From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: [PATCH v2 4/7] xen/9pfs: connect to the backend Date: Wed, 8 Mar 2017 15:58:19 -0800 Message-ID: <1489017502-18617-4-git-send-email-sstabellini@kernel.org> References: <1489017502-18617-1-git-send-email-sstabellini@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cllTa-0007K9-K7 for xen-devel@lists.xenproject.org; Wed, 08 Mar 2017 23:58:38 +0000 In-Reply-To: <1489017502-18617-1-git-send-email-sstabellini@kernel.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: jgross@suse.com, Latchesar Ionkov , sstabellini@kernel.org, Eric Van Hensbergen , linux-kernel@vger.kernel.org, Stefano Stabellini , v9fs-developer@lists.sourceforge.net, Ron Minnich , boris.ostrovsky@oracle.com List-Id: xen-devel@lists.xenproject.org SW1wbGVtZW50IGZ1bmN0aW9ucyB0byBoYW5kbGUgdGhlIHhlbmJ1cyBoYW5kc2hha2UuIFVwb24g Y29ubmVjdGlvbiwKYWxsb2NhdGUgdGhlIHJpbmdzIGFjY29yZGluZyB0byB0aGUgcHJvdG9jb2wg c3BlY2lmaWNhdGlvbi4KCkluaXRpYWxpemUgYSB3b3JrX3N0cnVjdCBhbmQgYSB3YWl0X3F1ZXVl LiBUaGUgd29ya19zdHJ1Y3Qgd2lsbCBiZSB1c2VkCnRvIHNjaGVkdWxlIHdvcmsgdXBvbiByZWNl aXZpbmcgYW4gZXZlbnQgY2hhbm5lbCBub3RpZmljYXRpb24gZnJvbSB0aGUKYmFja2VuZC4gVGhl IHdhaXRfcXVldWUgd2lsbCBiZSB1c2VkIHRvIHdhaXQgd2hlbiB0aGUgcmluZyBpcyBmdWxsIGFu ZAp3ZSBuZWVkIHRvIHNlbmQgYSBuZXcgcmVxdWVzdC4KClNpZ25lZC1vZmYtYnk6IFN0ZWZhbm8g U3RhYmVsbGluaSA8c3RlZmFub0BhcG9yZXRvLmNvbT4KQ0M6IGJvcmlzLm9zdHJvdnNreUBvcmFj bGUuY29tCkNDOiBqZ3Jvc3NAc3VzZS5jb20KQ0M6IEVyaWMgVmFuIEhlbnNiZXJnZW4gPGVyaWN2 aEBnbWFpbC5jb20+CkNDOiBSb24gTWlubmljaCA8cm1pbm5pY2hAc2FuZGlhLmdvdj4KQ0M6IExh dGNoZXNhciBJb25rb3YgPGx1Y2hvQGlvbmtvdi5uZXQ+CkNDOiB2OWZzLWRldmVsb3BlckBsaXN0 cy5zb3VyY2Vmb3JnZS5uZXQKLS0tCiBuZXQvOXAvdHJhbnNfeGVuLmMgfCAyMzMgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFu Z2VkLCAyMzMgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL25ldC85cC90cmFuc194ZW4uYyBi L25ldC85cC90cmFuc194ZW4uYwppbmRleCA4NzdkZmQwLi4wZTY2ZGJlIDEwMDY0NAotLS0gYS9u ZXQvOXAvdHJhbnNfeGVuLmMKKysrIGIvbmV0LzlwL3RyYW5zX3hlbi5jCkBAIC0xNyw2ICsxNywz NiBAQAogI2luY2x1ZGUgPG5ldC85cC9jbGllbnQuaD4KICNpbmNsdWRlIDxuZXQvOXAvdHJhbnNw b3J0Lmg+CiAKKyNkZWZpbmUgWEVOXzlQRlNfTlVNX1JJTkdTIDIKKworLyogT25lIHBlciByaW5n LCBtb3JlIHRoYW4gb25lIHBlciA5cGZzIHNoYXJlICovCitzdHJ1Y3QgeGVuXzlwZnNfZGF0YXJp bmcgeworCXN0cnVjdCB4ZW5fOXBmc19mcm9udF9wcml2ICpwcml2OworCisJc3RydWN0IHhlbl85 cGZzX2RhdGFfaW50ZiAqaW50ZjsKKwlncmFudF9yZWZfdCByZWY7CisJaW50IGV2dGNobjsKKwlp bnQgaXJxOworCXNwaW5sb2NrX3QgbG9jazsKKworCXZvaWQgKmJ5dGVzOworCXN0cnVjdCB4ZW5f OXBmc19kYXRhIHJpbmc7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CisJc3RydWN0IHdvcmtfc3Ry dWN0IHdvcms7Cit9OworCisvKiBPbmUgcGVyIDlwZnMgc2hhcmUgKi8KK3N0cnVjdCB4ZW5fOXBm c19mcm9udF9wcml2IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHhlbmJ1c19k ZXZpY2UgKmRldjsKKwljaGFyICp0YWc7CisJc3RydWN0IHA5X2NsaWVudCAqY2xpZW50OworCisJ aW50IG51bV9yaW5nczsKKwlzdHJ1Y3QgeGVuXzlwZnNfZGF0YXJpbmcgKnJpbmdzOworfTsKK3N0 YXRpYyBMSVNUX0hFQUQoeGVuXzlwZnNfZGV2cyk7CisKIHN0YXRpYyBpbnQgcDlfeGVuX2NhbmNl bChzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBwOV9yZXFfdCAqcmVxKQogewogCXJl dHVybiAwOwpAQCAtMzYsNiArNjYsMjEgQEAgc3RhdGljIGludCBwOV94ZW5fcmVxdWVzdChzdHJ1 Y3QgcDlfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBwOV9yZXFfdCAqcDlfcmVxKQogCXJldHVybiAw OwogfQogCitzdGF0aWMgdm9pZCBwOV94ZW5fcmVzcG9uc2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3 b3JrKQoreworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgeGVuXzlwZnNfZnJvbnRfZXZlbnRfaGFu ZGxlcihpbnQgaXJxLCB2b2lkICpyKQoreworCXN0cnVjdCB4ZW5fOXBmc19kYXRhcmluZyAqcmlu ZyA9IHI7CisJQlVHX09OKCFyaW5nIHx8ICFyaW5nLT5wcml2LT5jbGllbnQpOworCisJd2FrZV91 cF9pbnRlcnJ1cHRpYmxlKCZyaW5nLT53cSk7CisJc2NoZWR1bGVfd29yaygmcmluZy0+d29yayk7 CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcDlfdHJhbnNfbW9k dWxlIHA5X3hlbl90cmFucyA9IHsKIAkubmFtZSA9ICJ4ZW4iLAogCS5tYXhzaXplID0gKDEgPDwg KFhFTl85UEZTX1JJTkdfT1JERVIgKyBYRU5fUEFHRV9TSElGVCkpLApAQCAtNTIsMjUgKzk3LDIx MyBAQCBzdGF0aWMgaW50IHA5X3hlbl9yZXF1ZXN0KHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCwg c3RydWN0IHA5X3JlcV90ICpwOV9yZXEpCiAJeyAiIiB9CiB9OwogCitzdGF0aWMgaW50IHhlbl85 cGZzX2Zyb250X2ZyZWUoc3RydWN0IHhlbl85cGZzX2Zyb250X3ByaXYgKnByaXYpCit7CisJaW50 IGksIGo7CisKKwlsaXN0X2RlbCgmcHJpdi0+bGlzdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJp di0+bnVtX3JpbmdzOyBpKyspIHsKKwkJaWYgKHByaXYtPnJpbmdzW2ldLmludGYgPT0gTlVMTCkK KwkJCWJyZWFrOworCQlpZiAocHJpdi0+cmluZ3NbaV0uaXJxID4gMCkKKwkJCXVuYmluZF9mcm9t X2lycWhhbmRsZXIocHJpdi0+cmluZ3NbaV0uaXJxLCBwcml2LT5kZXYpOworCQlpZiAocHJpdi0+ cmluZ3NbaV0uYnl0ZXMgIT0gTlVMTCkgeworCQkJZm9yIChqID0gMDsgaiA8ICgxIDw8IFhFTl85 UEZTX1JJTkdfT1JERVIpOyBqKyspCisJCQkJZ250dGFiX2VuZF9mb3JlaWduX2FjY2Vzcyhwcml2 LT5yaW5nc1tpXS5pbnRmLT5yZWZbal0sIDAsIDApOworCQkJZnJlZV9wYWdlcygodW5zaWduZWQg bG9uZylwcml2LT5yaW5nc1tpXS5ieXRlcywKKwkJCQkJWEVOXzlQRlNfUklOR19PUkRFUiAtIChQ QUdFX1NISUZUIC0gWEVOX1BBR0VfU0hJRlQpKTsKKwkJfQorCQlnbnR0YWJfZW5kX2ZvcmVpZ25f YWNjZXNzKHByaXYtPnJpbmdzW2ldLnJlZiwgMCwgMCk7CisJCWZyZWVfcGFnZSgodW5zaWduZWQg bG9uZylwcml2LT5yaW5nc1tpXS5pbnRmKTsKKwl9CisJa2ZyZWUocHJpdi0+cmluZ3MpOworCWtm cmVlKHByaXYpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgeGVuXzlwZnNfZnJvbnRf cmVtb3ZlKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYpCiB7CisJaW50IHJldDsKKwlzdHJ1Y3Qg eGVuXzlwZnNfZnJvbnRfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOwor CisJZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgTlVMTCk7CisJcmV0ID0geGVuXzlwZnNfZnJv bnRfZnJlZShwcml2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHhlbl85cGZzX2Zy b250X2FsbG9jX2RhdGFyaW5nKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYsCisJCXN0cnVjdCB4 ZW5fOXBmc19kYXRhcmluZyAqcmluZykKK3sKKwlpbnQgaTsKKwlpbnQgcmV0ID0gLUVOT01FTTsK KworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJpbmctPndxKTsKKwlzcGluX2xvY2tfaW5pdCgmcmlu Zy0+bG9jayk7CisJSU5JVF9XT1JLKCZyaW5nLT53b3JrLCBwOV94ZW5fcmVzcG9uc2UpOworCisJ cmluZy0+aW50ZiA9IChzdHJ1Y3QgeGVuXzlwZnNfZGF0YV9pbnRmICopIGdldF96ZXJvZWRfcGFn ZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CisJaWYgKCFyaW5nLT5pbnRmKQorCQlyZXR1cm4g cmV0OworCXJpbmctPnJlZiA9IGdudHRhYl9ncmFudF9mb3JlaWduX2FjY2VzcyhkZXYtPm90aGVy ZW5kX2lkLCB2aXJ0X3RvX2dmbihyaW5nLT5pbnRmKSwgMCk7CisJcmluZy0+Ynl0ZXMgPSAodm9p ZCopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywKKwkJCVhFTl85UEZT X1JJTkdfT1JERVIgLSAoUEFHRV9TSElGVCAtIFhFTl9QQUdFX1NISUZUKSk7CisJaWYgKHJpbmct PmJ5dGVzID09IE5VTEwpCisJCWdvdG8gb3V0OworCWZvciAoaSA9IDA7IGkgPCAoMSA8PCBYRU5f OVBGU19SSU5HX09SREVSKTsgaSsrKQorCQlyaW5nLT5pbnRmLT5yZWZbaV0gPSBnbnR0YWJfZ3Jh bnRfZm9yZWlnbl9hY2Nlc3MoZGV2LT5vdGhlcmVuZF9pZCwgdmlydF90b19nZm4ocmluZy0+Ynl0 ZXMpICsgaSwgMCk7CisJcmluZy0+cmluZy5pbiA9IHJpbmctPmJ5dGVzOworCXJpbmctPnJpbmcu b3V0ID0gcmluZy0+Ynl0ZXMgKyBYRU5fOVBGU19SSU5HX1NJWkU7CisKKwlyZXQgPSB4ZW5idXNf YWxsb2NfZXZ0Y2huKGRldiwgJnJpbmctPmV2dGNobik7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7 CisJcmluZy0+aXJxID0gYmluZF9ldnRjaG5fdG9faXJxaGFuZGxlcihyaW5nLT5ldnRjaG4sIHhl bl85cGZzX2Zyb250X2V2ZW50X2hhbmRsZXIsCisJCQkJCTAsICJ4ZW5fOXBmcy1mcm9udGVuZCIs IHJpbmcpOworCWlmIChyaW5nLT5pcnEgPCAwKSB7CisJCXhlbmJ1c19mcmVlX2V2dGNobihkZXYs IHJpbmctPmV2dGNobik7CisJCXJldCA9IHJpbmctPmlycTsKKwkJZ290byBvdXQ7CisJfQogCXJl dHVybiAwOworCitvdXQ6CisJaWYgKHJpbmctPmJ5dGVzICE9IE5VTEwpIHsKKwkJZm9yIChpID0g MDsgaSA8ICgxIDw8IFhFTl85UEZTX1JJTkdfT1JERVIpOyBpKyspCisJCQlnbnR0YWJfZW5kX2Zv cmVpZ25fYWNjZXNzKHJpbmctPmludGYtPnJlZltpXSwgMCwgMCk7CisJCWZyZWVfcGFnZXMoKHVu c2lnbmVkIGxvbmcpcmluZy0+Ynl0ZXMsCisJCQkJWEVOXzlQRlNfUklOR19PUkRFUiAtIChQQUdF X1NISUZUIC0gWEVOX1BBR0VfU0hJRlQpKTsKKwl9CisJZ250dGFiX2VuZF9mb3JlaWduX2FjY2Vz cyhyaW5nLT5yZWYsIDAsIDApOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylyaW5nLT5pbnRm KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHhlbl85cGZzX2Zyb250X3Byb2JlKHN0 cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYsCiAJCWNvbnN0IHN0cnVjdCB4ZW5idXNfZGV2aWNlX2lk ICppZCkKIHsKKwlpbnQgcmV0LCBpOworCXN0cnVjdCB4ZW5idXNfdHJhbnNhY3Rpb24geGJ0Owor CXN0cnVjdCB4ZW5fOXBmc19mcm9udF9wcml2ICpwcml2ID0gTlVMTDsKKwljaGFyICp2ZXJzaW9u czsKKwl1bnNpZ25lZCBpbnQgbWF4X3JpbmdzLCBtYXhfcmluZ19vcmRlciwgbGVuOworCisJdmVy c2lvbnMgPSB4ZW5idXNfcmVhZChYQlRfTklMLCBkZXYtPm90aGVyZW5kLCAidmVyc2lvbnMiLCAm bGVuKTsKKwlpZiAoIWxlbiB8fCBzdHJjbXAodmVyc2lvbnMsICIxIikpCisJCXJldHVybiAtRUlO VkFMOworCWtmcmVlKHZlcnNpb25zKTsKKwlyZXQgPSB4ZW5idXNfc2NhbmYoWEJUX05JTCwgZGV2 LT5vdGhlcmVuZCwgIm1heC1yaW5ncyIsICIldSIsICZtYXhfcmluZ3MpOworCWlmIChyZXQgPCAw IHx8IG1heF9yaW5ncyA8IFhFTl85UEZTX05VTV9SSU5HUykKKwkJcmV0dXJuIC1FSU5WQUw7CisJ cmV0ID0geGVuYnVzX3NjYW5mKFhCVF9OSUwsIGRldi0+b3RoZXJlbmQsICJtYXgtcmluZy1wYWdl LW9yZGVyIiwgIiV1IiwgJm1heF9yaW5nX29yZGVyKTsKKwlpZiAocmV0IDwgMHx8IG1heF9yaW5n X29yZGVyIDwgWEVOXzlQRlNfUklOR19PUkRFUikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKworCXBy aXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgeGVuXzlwZnNfZnJvbnRfcHJpdiksIEdGUF9LRVJO RUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcml2LT5kZXYgPSBkZXY7 CisJcHJpdi0+bnVtX3JpbmdzID0gWEVOXzlQRlNfTlVNX1JJTkdTOworCXByaXYtPnJpbmdzID0g a3phbGxvYyhzaXplb2Yoc3RydWN0IHhlbl85cGZzX2RhdGFyaW5nKSAqIHByaXYtPm51bV9yaW5n cywKKwkJCQkJCUdGUF9LRVJORUwpOworCWlmICghcHJpdi0+cmluZ3MpIHsKKwkJa2ZyZWUocHJp dik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5udW1f cmluZ3M7IGkrKykgeworCQlwcml2LT5yaW5nc1tpXS5wcml2ID0gcHJpdjsKKwkJcmV0ID0geGVu XzlwZnNfZnJvbnRfYWxsb2NfZGF0YXJpbmcoZGV2LCAmcHJpdi0+cmluZ3NbaV0pOworCQlpZiAo cmV0IDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCisgYWdhaW46CisJcmV0ID0geGVuYnVzX3Ry YW5zYWN0aW9uX3N0YXJ0KCZ4YnQpOworCWlmIChyZXQpIHsKKwkJeGVuYnVzX2Rldl9mYXRhbChk ZXYsIHJldCwgInN0YXJ0aW5nIHRyYW5zYWN0aW9uIik7CisJCWdvdG8gZXJyb3I7CisJfQorCXJl dCA9IHhlbmJ1c19wcmludGYoeGJ0LCBkZXYtPm5vZGVuYW1lLCAidmVyc2lvbiIsICIldSIsIDEp OworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfeGVuYnVzOworCXJldCA9IHhlbmJ1c19wcmludGYo eGJ0LCBkZXYtPm5vZGVuYW1lLCAibnVtLXJpbmdzIiwgIiV1IiwgcHJpdi0+bnVtX3JpbmdzKTsK KwlpZiAocmV0KQorCQlnb3RvIGVycm9yX3hlbmJ1czsKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+ bnVtX3JpbmdzOyBpKyspIHsKKwkJY2hhciBzdHJbMTZdOworCisJCXNwcmludGYoc3RyLCAicmlu Zy1yZWYldSIsIGkpOworCQlyZXQgPSB4ZW5idXNfcHJpbnRmKHhidCwgZGV2LT5ub2RlbmFtZSwg c3RyLCAiJWQiLCBwcml2LT5yaW5nc1tpXS5yZWYpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJv cl94ZW5idXM7CisKKwkJc3ByaW50ZihzdHIsICJldmVudC1jaGFubmVsLSV1IiwgaSk7CisJCXJl dCA9IHhlbmJ1c19wcmludGYoeGJ0LCBkZXYtPm5vZGVuYW1lLCBzdHIsICIldSIsIHByaXYtPnJp bmdzW2ldLmV2dGNobik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yX3hlbmJ1czsKKwl9CisJ cHJpdi0+dGFnID0geGVuYnVzX3JlYWQoeGJ0LCBkZXYtPm5vZGVuYW1lLCAidGFnIiwgTlVMTCk7 CisJaWYgKHJldCkKKwkJZ290byBlcnJvcl94ZW5idXM7CisJcmV0ID0geGVuYnVzX3RyYW5zYWN0 aW9uX2VuZCh4YnQsIDApOworCWlmIChyZXQpIHsKKwkJaWYgKHJldCA9PSAtRUFHQUlOKQorCQkJ Z290byBhZ2FpbjsKKwkJeGVuYnVzX2Rldl9mYXRhbChkZXYsIHJldCwgImNvbXBsZXRpbmcgdHJh bnNhY3Rpb24iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlsaXN0X2FkZF90YWlsKCZwcml2LT5s aXN0LCAmeGVuXzlwZnNfZGV2cyk7CisJZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgcHJpdik7 CisJeGVuYnVzX3N3aXRjaF9zdGF0ZShkZXYsIFhlbmJ1c1N0YXRlSW5pdGlhbGlzZWQpOworCiAJ cmV0dXJuIDA7CisKKyBlcnJvcl94ZW5idXM6CisJeGVuYnVzX3RyYW5zYWN0aW9uX2VuZCh4YnQs IDEpOworCXhlbmJ1c19kZXZfZmF0YWwoZGV2LCByZXQsICJ3cml0aW5nIHhlbnN0b3JlIik7Cisg ZXJyb3I6CisJZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgTlVMTCk7CisJeGVuXzlwZnNfZnJv bnRfZnJlZShwcml2KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHhlbl85cGZzX2Zy b250X3Jlc3VtZShzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2KQogeworCWRldl93YXJuKCZkZXYt PmRldiwgInN1c3BzZW5kL3Jlc3VtZSB1bnN1cHBvcnRlZFxuIik7CiAJcmV0dXJuIDA7CiB9CiAK IHN0YXRpYyB2b2lkIHhlbl85cGZzX2Zyb250X2NoYW5nZWQoc3RydWN0IHhlbmJ1c19kZXZpY2Ug KmRldiwKIAkJCSAgICBlbnVtIHhlbmJ1c19zdGF0ZSBiYWNrZW5kX3N0YXRlKQogeworCXN3aXRj aCAoYmFja2VuZF9zdGF0ZSkgeworCWNhc2UgWGVuYnVzU3RhdGVSZWNvbmZpZ3VyaW5nOgorCWNh c2UgWGVuYnVzU3RhdGVSZWNvbmZpZ3VyZWQ6CisJY2FzZSBYZW5idXNTdGF0ZUluaXRpYWxpc2lu ZzoKKwljYXNlIFhlbmJ1c1N0YXRlSW5pdGlhbGlzZWQ6CisJY2FzZSBYZW5idXNTdGF0ZVVua25v d246CisJCWJyZWFrOworCisJY2FzZSBYZW5idXNTdGF0ZUluaXRXYWl0OgorCQlicmVhazsKKwor CWNhc2UgWGVuYnVzU3RhdGVDb25uZWN0ZWQ6CisJCXhlbmJ1c19zd2l0Y2hfc3RhdGUoZGV2LCBY ZW5idXNTdGF0ZUNvbm5lY3RlZCk7CisJCWJyZWFrOworCisJY2FzZSBYZW5idXNTdGF0ZUNsb3Nl ZDoKKwkJaWYgKGRldi0+c3RhdGUgPT0gWGVuYnVzU3RhdGVDbG9zZWQpCisJCQlicmVhazsKKwkJ LyogTWlzc2VkIHRoZSBiYWNrZW5kJ3MgQ0xPU0lORyBzdGF0ZSAtLSBmYWxsdGhyb3VnaCAqLwor CWNhc2UgWGVuYnVzU3RhdGVDbG9zaW5nOgorCQl4ZW5idXNfZnJvbnRlbmRfY2xvc2VkKGRldik7 CisJCWJyZWFrOworCX0KIH0KIAogc3RhdGljIHN0cnVjdCB4ZW5idXNfZHJpdmVyIHhlbl85cGZz X2Zyb250X2RyaXZlciA9IHsKLS0gCjEuOS4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlz dHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==