From mboxrd@z Thu Jan 1 00:00:00 1970 From: Haozhong Zhang Subject: [RFC XEN PATCH v2 15/15] tools/misc: add xen-ndctl Date: Mon, 20 Mar 2017 08:09:49 +0800 Message-ID: <20170320000949.24675-16-haozhong.zhang@intel.com> References: <20170320000949.24675-1-haozhong.zhang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170320000949.24675-1-haozhong.zhang@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: Konrad Rzeszutek Wilk , Dan Williams , Ian Jackson , Wei Liu , Haozhong Zhang List-Id: xen-devel@lists.xenproject.org eGVuLW5kY3RsIGlzIGEgdG9vbCBmb3IgdXNlcnMgaW4gRG9tMCB0byBzZXR1cCB0aGUgaG9zdCBw bWVtIHdpdGggWGVuCmh5cGVydmlzb3IuIEl0J3MgdXNlZCB0byBzcGVjaWZ5IHRoZSBzdG9yYWdl LCB3aGljaCBpcyBlaXRoZXIgdGhlCnJlZ3VsYXIgUkFNIG9yIGEgcG1lbSByYW5nZSwgdG8gbWFu YWdlIHRoZSBzcGVjaWZpZWQgcG1lbS4KClNpZ25lZC1vZmYtYnk6IEhhb3pob25nIFpoYW5nIDxo YW96aG9uZy56aGFuZ0BpbnRlbC5jb20+Ci0tLQpDYzogSWFuIEphY2tzb24gPGlhbi5qYWNrc29u QGV1LmNpdHJpeC5jb20+CkNjOiBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPgotLS0KIC5n aXRpZ25vcmUgICAgICAgICAgICAgfCAgIDEgKwogdG9vbHMvbWlzYy9NYWtlZmlsZSAgICB8ICAg NCArCiB0b29scy9taXNjL3hlbi1uZGN0bC5jIHwgMjI3ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMjMyIGluc2VydGlv bnMoKykKCmRpZmYgLS1naXQgYS8uZ2l0aWdub3JlIGIvLmdpdGlnbm9yZQppbmRleCA0NTY3ZGU3 YTU5Li4xYWY3Y2RhOGJkIDEwMDY0NAotLS0gYS8uZ2l0aWdub3JlCisrKyBiLy5naXRpZ25vcmUK QEAgLTIwNiw2ICsyMDYsNyBAQCB0b29scy9taXNjL3hlbi1odm1jdHgKIHRvb2xzL21pc2MveGVu bG9ja3Byb2YKIHRvb2xzL21pc2MvbG93bWVtZAogdG9vbHMvbWlzYy94ZW5jb3YKK3Rvb2xzL21p c2MveGVuLW5kY3RsCiB0b29scy9wa2ctY29uZmlnLyoKIHRvb2xzL3FlbXUteGVuLWJ1aWxkCiB0 b29scy94ZW50cmFjZS94ZW5hbHl6ZQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWlzYy9NYWtlZmlsZSBi L3Rvb2xzL21pc2MvTWFrZWZpbGUKaW5kZXggODE1MmY3YmZiNS4uODZkODlmMTU3NyAxMDA2NDQK LS0tIGEvdG9vbHMvbWlzYy9NYWtlZmlsZQorKysgYi90b29scy9taXNjL01ha2VmaWxlCkBAIC0z MSw2ICszMSw3IEBAIElOU1RBTExfU0JJTiAgICAgICAgICAgICAgICAgICArPSB4ZW5wZXJmCiBJ TlNUQUxMX1NCSU4gICAgICAgICAgICAgICAgICAgKz0geGVucG0KIElOU1RBTExfU0JJTiAgICAg ICAgICAgICAgICAgICArPSB4ZW53YXRjaGRvZ2QKIElOU1RBTExfU0JJTiAgICAgICAgICAgICAg ICAgICArPSB4ZW4tbGl2ZXBhdGNoCitJTlNUQUxMX1NCSU4gICAgICAgICAgICAgICAgICAgKz0g eGVuLW5kY3RsCiBJTlNUQUxMX1NCSU4gKz0gJChJTlNUQUxMX1NCSU4teSkKIAogIyBFdmVyeXRo aW5nIHRvIGJlIGluc3RhbGxlZCBpbiBhIHByaXZhdGUgYmluLwpAQCAtMTA4LDQgKzEwOSw3IEBA IHhlbi1sb3dtZW1kOiB4ZW4tbG93bWVtZC5vCiB4ZW5jb3Y6IHhlbmNvdi5vCiAJJChDQykgJChM REZMQUdTKSAtbyAkQCAkPCAkKExETElCU19saWJ4ZW5jdHJsKSAkKEFQUEVORF9MREZMQUdTKQog Cit4ZW4tbmRjdGw6IHhlbi1uZGN0bC5vCisJJChDQykgJChMREZMQUdTKSAtbyAkQCAkPCAkKExE TElCU19saWJ4ZW5jdHJsKSAkKEFQUEVORF9MREZMQUdTKQorCiAtaW5jbHVkZSAkKERFUFMpCmRp ZmYgLS1naXQgYS90b29scy9taXNjL3hlbi1uZGN0bC5jIGIvdG9vbHMvbWlzYy94ZW4tbmRjdGwu YwppbmRleCBlNjlkZTI5YmIyLi5mNTU2YTMxZGNmIDEwMDY0NAotLS0gYS90b29scy9taXNjL3hl bi1uZGN0bC5jCisrKyBiL3Rvb2xzL21pc2MveGVuLW5kY3RsLmMKQEAgLTAsMCArMSwyMjcgQEAK Ky8qCisgKiB4ZW4tbmRjdGwuYworICoKKyAqIFhlbiBOVkRJTU0gbWFuYWdlbWVudCB0b29sCisg KgorICogQ29weXJpZ2h0IChDKSAyMDE3LCAgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgor ICogb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24KKyAqIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sCisgKiBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9u IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLAorICogcHVibGlzaCwgZGlz dHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwK KyAqIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sCisgKiBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAq CisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1F UkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO RlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdI VCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICogVE9SVCBPUiBP VEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUK KyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJF LgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVk ZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8eGVuY3RybC5oPgor CisjZGVmaW5lIEFSUkFZX1NJWkUoYSkgKHNpemVvZiAoYSkgLyBzaXplb2YgKChhKVswXSkpCisK K3N0YXRpYyB4Y19pbnRlcmZhY2UgKnhjaDsKKworc3RhdGljIGludCBoYW5kbGVfaGVscChpbnQg YXJnYywgY2hhciAqYXJndltdKTsKK3N0YXRpYyBpbnQgaGFuZGxlX2xpc3RfY21kcyhpbnQgYXJn YywgY2hhciAqYXJndltdKTsKK3N0YXRpYyBpbnQgaGFuZGxlX3NldHVwKGludCBhcmdjLCBjaGFy ICphcmd2W10pOworCitzdGF0aWMgY29uc3Qgc3RydWN0Cit7CisgICAgY29uc3QgY2hhciAqbmFt ZTsKKyAgICBjb25zdCBjaGFyICpzeW50YXg7CisgICAgY29uc3QgY2hhciAqaGVscDsKKyAgICBp bnQgKCpoYW5kbGVyKShpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICBib29sIG5lZWRfeGM7 Cit9IGNtZHNbXSA9Cit7CisgICAgeworICAgICAgICAubmFtZSAgICA9ICJoZWxwIiwKKyAgICAg ICAgLnN5bnRheCAgPSAiW2NvbW1hbmRdIiwKKyAgICAgICAgLmhlbHAgICAgPSAiU2hvdyB0aGlz IG1lc3NhZ2Ugb3IgdGhlIGhlbHAgbWVzc2FnZSBvZiAnY29tbWFuZCcuXG4iCisgICAgICAgICAg ICAgICAgICAgIlVzZSBjb21tYW5kICdsaXN0LWNtZHMnIHRvIGxpc3QgYWxsIHN1cHBvcnRlZCBj b21tYW5kcy5cbiIsCisgICAgICAgIC5oYW5kbGVyID0gaGFuZGxlX2hlbHAsCisgICAgfSwKKwor ICAgIHsKKyAgICAgICAgLm5hbWUgICAgPSAibGlzdC1jbWRzIiwKKyAgICAgICAgLnN5bnRheCAg PSAiIiwKKyAgICAgICAgLmhlbHAgICAgPSAiTGlzdCBhbGwgc3VwcG9ydGVkIGNvbW1hbmRzXG4i LAorICAgICAgICAuaGFuZGxlciA9IGhhbmRsZV9saXN0X2NtZHMsCisgICAgfSwKKworICAgIHsK KyAgICAgICAgLm5hbWUgICAgPSAic2V0dXAiLAorICAgICAgICAuc3ludGF4ICA9ICI8c21mbj4g PGVtZm4+IFs8bWdtdF9zbWZuPiA8bWdtdF9lbWZuPl0iLAorICAgICAgICAuaGVscCAgICA9ICJT ZXR1cCBYZW4gaHlwZXJ2aXNvciB0byBwcmVwYXJlIGZvciBtYXBwaW5nIGhvc3QgcG1lbSBwYWdl c1xuIgorICAgICAgICAgICAgICAgICAgICJmcm9tIE1GTiAnc21mbicgdG8gJ2VtZm4nLiBJZiAn bWdtdF9zbWZuJyBhbmQgJ21nbXRfZW1mbicgYXJlXG4iCisgICAgICAgICAgICAgICAgICAgInNw ZWNpZmllZCwgaG9zdCBwbWVtIHBhZ2VzIGZyb20gTUZOICdtZ210X3NtZm4nIGFuZCAnbWdtdF9l bWZuJ1xuIgorICAgICAgICAgICAgICAgICAgICJ3aWxsIGJlIHVzZWQgYnkgWGVuIGh5cGVydmlz b3IgdG8gbWFuYWdlIHRoaXMgbWFwcGluZy5cbiIsCisgICAgICAgIC5oYW5kbGVyID0gaGFuZGxl X3NldHVwLAorICAgICAgICAubmVlZF94YyA9IHRydWUsCisgICAgfSwKK307CisKK3N0YXRpYyB2 b2lkIHNob3dfaGVscChjb25zdCBjaGFyICpjbWQpCit7CisgICAgaW50IG5yID0gQVJSQVlfU0la RShjbWRzKTsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIGZwcmludGYoc3RkZXJyLCAiVXNh Z2U6IHhlbi1uZGN0bCAiKTsKKworICAgIGlmICggIWNtZCApCisgICAgeworICAgICAgICBmcHJp bnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAiPGNvbW1hbmQ+IFthcmdzXVxuXG4iCisgICAg ICAgICAgICAgICAgIkxpc3QgYWxsIHN1cHBvcnRlZCBjb21tYW5kcyBieSAneGVuLW5kY3RsIGxp c3QtY21kcydcbiIKKyAgICAgICAgICAgICAgICAiR2V0IGhlbHAgb2YgYSBjb21tYW5kIGJ5ICd4 ZW4tbmRjdGwgaGVscCA8Y29tbWFuZD4nXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor ICAgIGZvciAoIGkgPSAwOyBpIDwgbnI7IGkrKyApCisgICAgICAgIGlmICggIXN0cmNtcChjbWQs IGNtZHNbaV0ubmFtZSkgKQorICAgICAgICB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg IiVzICVzXG5cbiVzIiwKKyAgICAgICAgICAgICAgICAgICAgY21kc1tpXS5uYW1lLCBjbWRzW2ld LnN5bnRheCwgY21kc1tpXS5oZWxwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK KyAgICBpZiAoIGkgPT0gbnIgKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuc3VwcG9ydGVk IGNvbW1hbmQgJyVzJy4gIgorICAgICAgICAgICAgICAgICJMaXN0IGFsbCBzdXBwb3J0ZWQgY29t bWFuZHMgYnkgJ3hlbi1uZGN0bCBsaXN0LWNtZHMnLlxuIiwKKyAgICAgICAgICAgICAgICBjbWQp OworfQorCitzdGF0aWMgaW50IGhhbmRsZV91bnJlY29nbml6ZWRfYXJndW1lbnRzKGNvbnN0IGNo YXIgKmNtZCkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlVucmVjb2duaXplZCBhcmd1bWVudHNc blxuIik7CisgICAgc2hvd19oZWxwKGNtZCk7CisgICAgcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0 YXRpYyBpbnQgaGFuZGxlX2hlbHAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBpZiAo IGFyZ2MgPT0gMSApCisgICAgICAgIHNob3dfaGVscChOVUxMKTsKKyAgICBlbHNlIGlmICggYXJn YyA9PSAyICkKKyAgICAgICAgc2hvd19oZWxwKGFyZ3ZbMV0pOworICAgIGVsc2UKKyAgICAgICAg cmV0dXJuIGhhbmRsZV91bnJlY29nbml6ZWRfYXJndW1lbnRzKGFyZ3ZbMF0pOworCisgICAgcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2xpc3RfY21kcyhpbnQgYXJnYywgY2hhciAq YXJndltdKQoreworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgaWYgKCBhcmdjID4gMSApCisg ICAgICAgIHJldHVybiBoYW5kbGVfdW5yZWNvZ25pemVkX2FyZ3VtZW50cyhhcmd2WzBdKTsKKwor ICAgIGZvciAoIGkgPSAwOyBpIDwgQVJSQVlfU0laRShjbWRzKTsgaSsrICkKKyAgICAgICAgZnBy aW50ZihzdGRlcnIsICIlc1xuIiwgY21kc1tpXS5uYW1lKTsKKworICAgIHJldHVybiAwOworfQor CitzdGF0aWMgaW50IGhhbmRsZV9zZXR1cChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAg IHVuc2lnbmVkIGxvbmcgc21mbiwgZW1mbiwgbWdtdF9zbWZuID0gSU5WQUxJRF9NRk4sIG1nbXRf ZW1mbiA9IElOVkFMSURfTUZOOworCisgICAgaWYgKCBhcmdjICE9IDMgLyogeGVuLW5kY3RsIHNl dHVwIHNtZm4gZW1mbiAqLyAmJgorICAgICAgICAgYXJnYyAhPSA1IC8qIHhlbi1uZGN0bCBzZXR1 cCBzbWZuIGVtZm4gbWdtdF9zbWZuIG1nbXRfZW1mbiAqLyApCisgICAgICAgIHJldHVybiBoYW5k bGVfdW5yZWNvZ25pemVkX2FyZ3VtZW50cyhhcmd2WzBdKTsKKworI2RlZmluZSBzdHJ0b3VsX2No ZWNrX292ZXJmbG93KHN0ciwgcmV0KSAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg ICAocmV0KSA9IHN0cnRvdWwoKHN0ciksIE5VTEwsIDApOyAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICBpZiAoIGVycm5vID09IEVSQU5HRSApICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJNRk4gJyVzJyBvdmVyZmxv d1xuIiwgKHN0cikpOyAgXAorICAgICAgICAgICAgcmV0dXJuIC1lcnJubzsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKKyAgICBzdHJ0 b3VsX2NoZWNrX292ZXJmbG93KGFyZ3ZbMV0sIHNtZm4pOworICAgIHN0cnRvdWxfY2hlY2tfb3Zl cmZsb3coYXJndlsyXSwgZW1mbik7CisKKyAgICBpZiAoIGFyZ2MgPT0gNSApCisgICAgeworICAg ICAgICBzdHJ0b3VsX2NoZWNrX292ZXJmbG93KGFyZ3ZbM10sIG1nbXRfc21mbik7CisgICAgICAg IHN0cnRvdWxfY2hlY2tfb3ZlcmZsb3coYXJndls0XSwgbWdtdF9lbWZuKTsKKyAgICB9CisKKyN1 bmRlZiBzdHJ0b3VsX2NoZWNrX292ZXJmbG93CisKKyAgICByZXR1cm4geGNfbnZkaW1tX3BtZW1f c2V0dXAoeGNoLCBzbWZuLCBlbWZuLCBtZ210X3NtZm4sIG1nbXRfZW1mbik7Cit9CisKK2ludCBt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgdW5zaWduZWQgaW50IGk7CisgICAg aW50IG5yX2NtZHMgPSBBUlJBWV9TSVpFKGNtZHMpLCByYyA9IDA7CisgICAgY29uc3QgY2hhciAq Y21kOworCisgICAgaWYgKCBhcmdjIDw9IDEgKQorICAgIHsKKyAgICAgICAgc2hvd19oZWxwKE5V TEwpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBjbWQgPSBhcmd2WzFdOworCisg ICAgZm9yICggaSA9IDA7IGkgPCBucl9jbWRzOyBpKysgKQorICAgICAgICBpZiAoICFzdHJjbXAo Y21kLCBjbWRzW2ldLm5hbWUpICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCBjbWRzW2ld Lm5lZWRfeGMgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHhjaCA9IHhjX2ludGVy ZmFjZV9vcGVuKDAsIDAsIDApOworICAgICAgICAgICAgICAgIGlmICggIXhjaCApCisgICAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByYyA9IC1lcnJubzsKKyAgICAgICAgICAg ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJmYWlsZWQgdG8gZ2V0IHhjIGhhbmRsZXJcbiIpOwor ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9CisgICAgICAgICAgICByYyA9IGNtZHNbaV0uaGFuZGxlcihhcmdjIC0gMSwgJmFyZ3ZbMV0p OworICAgICAgICAgICAgaWYgKCByYyApCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs ICIlcyBmYWlsZWQ6ICVzXG4iLCBjbWRzW2ldLm5hbWUsIHN0cmVycm9yKC1yYykpOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIGlmICggaSA9PSBucl9jbWRzICkKKyAgICB7 CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5zdXBwb3J0ZWQgY29tbWFuZCAnJXMnLiAiCisg ICAgICAgICAgICAgICAgIkxpc3QgYWxsIHN1cHBvcnRlZCBjb21tYW5kcyBieSAneGVuLW5kY3Rs IGxpc3QtY21kcycuXG4iLAorICAgICAgICAgICAgICAgIGNtZCk7CisgICAgICAgIHJjID0gLUVO T1NZUzsKKyAgICB9CisKKyAgICBpZiAoIHhjaCApCisgICAgICAgIHhjX2ludGVyZmFjZV9jbG9z ZSh4Y2gpOworCisgICAgcmV0dXJuIHJjOworfQorCisvKgorICogTG9jYWwgdmFyaWFibGVzOgor ICogbW9kZTogQworICogYy1maWxlLXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQK KyAqIHRhYi13aWR0aDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8K LS0gCjIuMTIuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6 Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=