From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [PATCH v9 06/27] xen-xsplice: Tool to manipulate xsplice payloads Date: Mon, 25 Apr 2016 11:34:53 -0400 Message-ID: <1461598514-5440-7-git-send-email-konrad.wilk@oracle.com> References: <1461598514-5440-1-git-send-email-konrad.wilk@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1auiYs-0004y8-IT for xen-devel@lists.xenproject.org; Mon, 25 Apr 2016 15:36:34 +0000 In-Reply-To: <1461598514-5440-1-git-send-email-konrad.wilk@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: konrad@kernel.org, xen-devel@lists.xenproject.org, sasha.levin@oracle.com, andrew.cooper3@citrix.com, ross.lagerwall@citrix.com, mpohlack@amazon.de Cc: Wei Liu , Stefano Stabellini , Ian Jackson , Konrad Rzeszutek Wilk List-Id: xen-devel@lists.xenproject.org QSBzaW1wbGUgdG9vbCB0aGF0IGFsbG93cyBhbiBzeXN0ZW0gYWRtaW4gdG8gcGVyZm9ybQpiYXNp YyB4c3BsaWNlIG9wZXJhdGlvbnM6CgogLSBVcGxvYWQgYSB4c3BsaWNlIGZpbGUgKHdpdGggYW4g dW5pcXVlIG5hbWUpCiAtIExpc3QgYWxsIHRoZSB4c3BsaWNlIHBheWxvYWRzIGxvYWRlZC4KIC0g QXBwbHksIHJldmVydCwgcmVwbGFjZSwgb3IgdW5sb2FkIHRoZSBwYXlsb2FkIHVzaW5nIHRoZQog ICB1bmlxdWUgbmFtZS4KIC0gRG8gYWxsIHR3byAtIHVwbG9hZCwgYW5kIGFwcGx5IHRoZSBwYXls b2FkIGluIG9uZSBnbyAobG9hZCkuCiAgIEFsc28gd2lsbCB1c2UgdGhlIG5hbWUgb2YgdGhlIGZp bGUgYXMgdGhlIDxuYW1lPgoKU2lnbmVkLW9mZi1ieTogS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxr b25yYWQud2lsa0BvcmFjbGUuY29tPgpTaWduZWQtb2ZmLWJ5OiBSb3NzIExhZ2Vyd2FsbCA8cm9z cy5sYWdlcndhbGxAY2l0cml4LmNvbT4KQWNrZWQtYnk6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJp eC5jb20+CgotLS0KQ2M6IElhbiBKYWNrc29uIDxpYW4uamFja3NvbkBldS5jaXRyaXguY29tPgpD YzogU3RlZmFubyBTdGFiZWxsaW5pIDxzc3RhYmVsbGluaUBrZXJuZWwub3JnPgpDYzogV2VpIExp dSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KCnYyOgogLSBSZW1vdmVkIFJFVkVSVEVEIHN0YXRlLgog LSBGaXhlZCBidWdzIGhhbmRsaW5nIFhTUExJQ0VfU1RBVFVTX1BST0dSRVNTLgogLSBTcGxpdCBz dGF0dXMgaW50byBzdGF0ZSBhbmQgZXJyb3IuCiAgIEFkZCBSRVBMQUNFIGFjdGlvbi4KdjM6CiAt IFV0aWxpemUgdGhlIHRpbWVvdXQgYW5kIHVzZSB0aGUgZGVmYXVsdCBvbmUgKGxldCB0aGUgaHlw ZXJ2aXNvcgogICBwaWNrIGl0KS4KIC0gQ2hhbmdlIHRoZSBzL2FsbC9sb2FkIGFuZCBpbmZlciB0 aGUgPGlkPiBmcm9tIG5hbWUgb2YgZmlsZS4KIC0gcy9pZC9uYW1lLwogLSBEb24ndCB1c2UgaHlw ZXJjYWxsIGJ1ZmZlciBpbiB1cGxvYWRfZnVuYywgaW5zdGVhZCBkbyBpdCBpbiBsaWJ4YwogLSBS ZW1vdmUgdGhlIGRlYnVnIHByaW50ay4KIC0gUmVtb3ZlIGdvdG8ncyAocGVyIFdlaSdzIHJldmll dykKIC0gVXNlIGZwcmludGYoc3RkZXJyIGluIGVycm9yIHBhdGhzLgogLSBBZGQgbG9jYWwgdmFy aWFibGUgYmxvY2suCiAtIFN5bnRheCwgZXhwYW5kIGNvbW1lbnQsIGFuZCBkb24ndCBvdmVyd3Jp dGUgcmMgaWYgeGNfeHNwbGljZV91cGxvYWQgZmFpbGVkLgp2NDoKIC0gUmVtb3ZlIExPQURFRCBz dGF0ZS4gT25seSBoYXZlIENIRUNLRUQgc3RhdGUuCi0tLQotLS0KIC5naXRpZ25vcmUgICAgICAg ICAgICAgICB8ICAgMSArCiB0b29scy9taXNjL01ha2VmaWxlICAgICAgfCAgIDQgKwogdG9vbHMv bWlzYy94ZW4teHNwbGljZS5jIHwgNDYzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDQ2OCBpbnNlcnRpb25zKCspCiBjcmVh dGUgbW9kZSAxMDA2NDQgdG9vbHMvbWlzYy94ZW4teHNwbGljZS5jCgpkaWZmIC0tZ2l0IGEvLmdp dGlnbm9yZSBiLy5naXRpZ25vcmUKaW5kZXggMjBmZmEyZC4uMzllYjc3OSAxMDA2NDQKLS0tIGEv LmdpdGlnbm9yZQorKysgYi8uZ2l0aWdub3JlCkBAIC0xODIsNiArMTgyLDcgQEAgdG9vbHMvbWlz Yy94ZW5fY3B1cGVyZgogdG9vbHMvbWlzYy94ZW4tY3B1aWQKIHRvb2xzL21pc2MveGVuLWRldGVj dAogdG9vbHMvbWlzYy94ZW4tdG1lbS1saXN0LXBhcnNlCit0b29scy9taXNjL3hlbi14c3BsaWNl CiB0b29scy9taXNjL3hlbnBlcmYKIHRvb2xzL21pc2MveGVucG0KIHRvb2xzL21pc2MveGVuLWh2 bWN0eApkaWZmIC0tZ2l0IGEvdG9vbHMvbWlzYy9NYWtlZmlsZSBiL3Rvb2xzL21pc2MvTWFrZWZp bGUKaW5kZXggYTk0ZGFkOS4uM2E1Zjg0MiAxMDA2NDQKLS0tIGEvdG9vbHMvbWlzYy9NYWtlZmls ZQorKysgYi90b29scy9taXNjL01ha2VmaWxlCkBAIC0zMiw2ICszMiw3IEBAIElOU1RBTExfU0JJ TiAgICAgICAgICAgICAgICAgICArPSB4ZW5sb2NrcHJvZgogSU5TVEFMTF9TQklOICAgICAgICAg ICAgICAgICAgICs9IHhlbnBlcmYKIElOU1RBTExfU0JJTiAgICAgICAgICAgICAgICAgICArPSB4 ZW5wbQogSU5TVEFMTF9TQklOICAgICAgICAgICAgICAgICAgICs9IHhlbndhdGNoZG9nZAorSU5T VEFMTF9TQklOICAgICAgICAgICAgICAgICAgICs9IHhlbi14c3BsaWNlCiBJTlNUQUxMX1NCSU4g Kz0gJChJTlNUQUxMX1NCSU4teSkKIAogIyBFdmVyeXRoaW5nIHRvIGJlIGluc3RhbGxlZCBpbiBh IHByaXZhdGUgYmluLwpAQCAtMTAzLDYgKzEwNCw5IEBAIHhlbi1tZm5kdW1wOiB4ZW4tbWZuZHVt cC5vCiB4ZW53YXRjaGRvZ2Q6IHhlbndhdGNoZG9nZC5vCiAJJChDQykgJChMREZMQUdTKSAtbyAk QCAkPCAkKExETElCU19saWJ4ZW5jdHJsKSAkKEFQUEVORF9MREZMQUdTKQogCit4ZW4teHNwbGlj ZTogeGVuLXhzcGxpY2UubworCSQoQ0MpICQoTERGTEFHUykgLW8gJEAgJDwgJChMRExJQlNfbGli eGVuY3RybCkgJChBUFBFTkRfTERGTEFHUykKKwogeGVuLWxvd21lbWQ6IHhlbi1sb3dtZW1kLm8K IAkkKENDKSAkKExERkxBR1MpIC1vICRAICQ8ICQoTERMSUJTX2xpYnhlbmV2dGNobikgJChMRExJ QlNfbGlieGVuY3RybCkgJChMRExJQlNfbGlieGVuc3RvcmUpICQoQVBQRU5EX0xERkxBR1MpCiAK ZGlmZiAtLWdpdCBhL3Rvb2xzL21pc2MveGVuLXhzcGxpY2UuYyBiL3Rvb2xzL21pc2MveGVuLXhz cGxpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjkyMjhlCi0tLSAv ZGV2L251bGwKKysrIGIvdG9vbHMvbWlzYy94ZW4teHNwbGljZS5jCkBAIC0wLDAgKzEsNDYzIEBA CisvKgorICogQ29weXJpZ2h0IChjKSAyMDE2IE9yYWNsZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMu IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVk ZSA8bGliZ2VuLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNp bmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5cy9z dGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8eGVuY3RybC5oPgorI2luY2x1 ZGUgPHhlbnN0b3JlLmg+CisKK3N0YXRpYyB4Y19pbnRlcmZhY2UgKnhjaDsKKwordm9pZCBzaG93 X2hlbHAodm9pZCkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICJ4ZW4teHNw bGljZTogWHNwbGljZSB0ZXN0IHRvb2xcbiIKKyAgICAgICAgICAgICJVc2FnZTogeGVuLXhzcGxp Y2UgPGNvbW1hbmQ+IFthcmdzXVxuIgorICAgICAgICAgICAgIiA8bmFtZT4gQW4gdW5pcXVlIG5h bWUgb2YgcGF5bG9hZC4gVXAgdG8gJWQgY2hhcmFjdGVycy5cbiIKKyAgICAgICAgICAgICJDb21t YW5kczpcbiIKKyAgICAgICAgICAgICIgIGhlbHAgICAgICAgICAgICAgICAgICAgZGlzcGxheSB0 aGlzIGhlbHBcbiIKKyAgICAgICAgICAgICIgIHVwbG9hZCA8bmFtZT4gPGZpbGU+ICAgdXBsb2Fk IGZpbGUgPGZpbGU+IHdpdGggPG5hbWU+IG5hbWVcbiIKKyAgICAgICAgICAgICIgIGxpc3QgICAg ICAgICAgICAgICAgICAgbGlzdCBwYXlsb2FkcyB1cGxvYWRlZC5cbiIKKyAgICAgICAgICAgICIg IGFwcGx5IDxuYW1lPiAgICAgICAgICAgYXBwbHkgPG5hbWU+IHBhdGNoLlxuIgorICAgICAgICAg ICAgIiAgcmV2ZXJ0IDxuYW1lPiAgICAgICAgICByZXZlcnQgbmFtZSA8bmFtZT4gcGF0Y2guXG4i CisgICAgICAgICAgICAiICByZXBsYWNlIDxuYW1lPiAgICAgICAgIGFwcGx5IDxuYW1lPiBwYXRj aCBhbmQgcmV2ZXJ0IGFsbCBvdGhlcnMuXG4iCisgICAgICAgICAgICAiICB1bmxvYWQgPG5hbWU+ ICAgICAgICAgIHVubG9hZCBuYW1lIDxuYW1lPiBwYXRjaC5cbiIKKyAgICAgICAgICAgICIgIGxv YWQgIDxmaWxlPiAgICAgICAgICAgdXBsb2FkLCBjaGVjayBhbmQgYXBwbHkgPGZpbGU+LlxuIgor ICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIGlzIHRoZSA8ZmlsZT4g bmFtZVxuIiwKKyAgICAgICAgICAgIFhFTl9YU1BMSUNFX05BTUVfU0laRSk7Cit9CisKKy8qIHdy YXBwZXIgZnVuY3Rpb24gKi8KK3N0YXRpYyBpbnQgaGVscF9mdW5jKGludCBhcmdjLCBjaGFyICph cmd2W10pCit7CisgICAgc2hvd19oZWxwKCk7CisgICAgcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUg QVJSQVlfU0laRShhKSAoc2l6ZW9mIChhKSAvIHNpemVvZiAoKGEpWzBdKSkKKworc3RhdGljIGNv bnN0IGNoYXIgKnN0YXRlMnN0cih1bnNpZ25lZCBpbnQgc3RhdGUpCit7CisjZGVmaW5lIFNUQVRF KHgpIFtYU1BMSUNFX1NUQVRFXyMjeF0gPSAjeAorICAgIHN0YXRpYyBjb25zdCBjaGFyICpjb25z dCBuYW1lc1tdID0geworICAgICAgICAgICAgU1RBVEUoQ0hFQ0tFRCksCisgICAgICAgICAgICBT VEFURShBUFBMSUVEKSwKKyAgICB9OworI3VuZGVmIFNUQVRFCisgICAgaWYgKHN0YXRlID49IEFS UkFZX1NJWkUobmFtZXMpIHx8ICFuYW1lc1tzdGF0ZV0pCisgICAgICAgIHJldHVybiAidW5rbm93 biI7CisKKyAgICByZXR1cm4gbmFtZXNbc3RhdGVdOworfQorCisvKiBUaGlzIHZhbHVlIHdhcyBj aG9vc2VuIGFkaG9jLiBJdCBjb3VsZCBiZSA0MiB0b28uICovCisjZGVmaW5lIE1BWF9MRU4gMTEK K3N0YXRpYyBpbnQgbGlzdF9mdW5jKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgdW5z aWduZWQgaW50IGlkeCwgZG9uZSwgbGVmdCwgaTsKKyAgICB4ZW5feHNwbGljZV9zdGF0dXNfdCAq aW5mbyA9IE5VTEw7CisgICAgY2hhciAqbmFtZSA9IE5VTEw7CisgICAgdWludDMyX3QgKmxlbiA9 IE5VTEw7CisgICAgaW50IHJjID0gRU5PTUVNOworCisgICAgaWYgKCBhcmdjICkKKyAgICB7Cisg ICAgICAgIHNob3dfaGVscCgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlkeCA9 IGxlZnQgPSAwOworICAgIGluZm8gPSBtYWxsb2Moc2l6ZW9mKCppbmZvKSAqIE1BWF9MRU4pOwor ICAgIGlmICggIWluZm8gKQorICAgICAgICByZXR1cm4gcmM7CisgICAgbmFtZSA9IG1hbGxvYyhz aXplb2YoKm5hbWUpICogWEVOX1hTUExJQ0VfTkFNRV9TSVpFICogTUFYX0xFTik7CisgICAgaWYg KCAhbmFtZSApCisgICAgeworICAgICAgICBmcmVlKGluZm8pOworICAgICAgICByZXR1cm4gcmM7 CisgICAgfQorICAgIGxlbiA9IG1hbGxvYyhzaXplb2YoKmxlbikgKiBNQVhfTEVOKTsKKyAgICBp ZiAoICFsZW4gKSB7CisgICAgICAgIGZyZWUobmFtZSk7CisgICAgICAgIGZyZWUoaW5mbyk7Cisg ICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgICBmcHJpbnRmKHN0ZG91dCwiIElEICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3RhdHVzXG4iCisgICAgICAgICAgICAg ICAgICAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tXG4iKTsKKyAgICBkbyB7CisgICAgICAgIGRvbmUgPSAwOworICAgICAgICAvKiBUaGUgbWVt c2V0IGlzIGRvbmUgdG8gY2F0Y2ggZXJyb3JzLiAqLworICAgICAgICBtZW1zZXQoaW5mbywgJ0En LCBzaXplb2YoKmluZm8pICogTUFYX0xFTik7CisgICAgICAgIG1lbXNldChuYW1lLCAnQicsIHNp emVvZigqbmFtZSAqIE1BWF9MRU4gKiBYRU5fWFNQTElDRV9OQU1FX1NJWkUpKTsKKyAgICAgICAg bWVtc2V0KGxlbiwgJ0MnLCBzaXplb2YoKmxlbikgKiBNQVhfTEVOKTsKKyAgICAgICAgcmMgPSB4 Y194c3BsaWNlX2xpc3QoeGNoLCBNQVhfTEVOLCBpZHgsIGluZm8sIG5hbWUsIGxlbiwgJmRvbmUs ICZsZWZ0KTsKKyAgICAgICAgaWYgKCByYyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmlu dGYoc3RkZXJyLCAiRmFpbGVkIHRvIGxpc3QgJWQvJWQ6ICVkKCVzKSFcbiIsCisgICAgICAgICAg ICAgICAgICAgIGlkeCwgbGVmdCwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGRvbmU7IGkrKyAp CisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBqOworICAgICAgICAgICAgdWlu dDMyX3Qgc3o7CisgICAgICAgICAgICBjaGFyICpzdHI7CisKKyAgICAgICAgICAgIHN6ID0gbGVu W2ldOworICAgICAgICAgICAgc3RyID0gbmFtZSArIChpICogWEVOX1hTUExJQ0VfTkFNRV9TSVpF KTsKKyAgICAgICAgICAgIGZvciAoIGogPSBzejsgaiA8IFhFTl9YU1BMSUNFX05BTUVfU0laRTsg aisrICkKKyAgICAgICAgICAgICAgICBzdHJbal0gPSAnXDAnOworCisgICAgICAgICAgICBwcmlu dGYoIiUtNDBzfCAlcyIsIHN0ciwgc3RhdGUyc3RyKGluZm9baV0uc3RhdGUpKTsKKyAgICAgICAg ICAgIGlmICggaW5mb1tpXS5yYyApCisgICAgICAgICAgICAgICAgcHJpbnRmKCIgKCVkLCAlcylc biIsIC1pbmZvW2ldLnJjLCBzdHJlcnJvcigtaW5mb1tpXS5yYykpOworICAgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgICAgIHB1dHMoIiIpOworICAgICAgICB9CisgICAgICAgIGlkeCArPSBk b25lOworICAgIH0gd2hpbGUgKCBsZWZ0ICk7CisKKyAgICBmcmVlKG5hbWUpOworICAgIGZyZWUo aW5mbyk7CisgICAgZnJlZShsZW4pOworICAgIHJldHVybiByYzsKK30KKyN1bmRlZiBNQVhfTEVO CisKK3N0YXRpYyBpbnQgZ2V0X25hbWUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqbmFt ZSkKK3sKKyAgICBzc2l6ZV90IGxlbiA9IHN0cmxlbihhcmd2WzBdKTsKKyAgICBpZiAoIGxlbiA+ IFhFTl9YU1BMSUNFX05BTUVfU0laRSApCisgICAgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwg IklEIE1VU1QgYmUgJWQgY2hhcmFjdGVycyFcbiIsIFhFTl9YU1BMSUNFX05BTUVfU0laRSk7Cisg ICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gZXJybm87CisgICAgfQorICAg IC8qIERvbid0IHdhbnQgYW55IGZ1bm55IHN0cmluZ3MgZnJvbSB0aGUgc3RhY2suICovCisgICAg bWVtc2V0KG5hbWUsIDAsIFhFTl9YU1BMSUNFX05BTUVfU0laRSk7CisgICAgc3RybmNweShuYW1l LCBhcmd2WzBdLCBsZW4pOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVwbG9hZF9m dW5jKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgY2hhciAqZmlsZW5hbWU7CisgICAg Y2hhciBuYW1lW1hFTl9YU1BMSUNFX05BTUVfU0laRV07CisgICAgaW50IGZkID0gMCwgcmM7Cisg ICAgc3RydWN0IHN0YXQgYnVmOworICAgIHVuc2lnbmVkIGNoYXIgKmZidWY7CisgICAgc3NpemVf dCBsZW47CisKKyAgICBpZiAoIGFyZ2MgIT0gMiApCisgICAgeworICAgICAgICBzaG93X2hlbHAo KTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICggZ2V0X25hbWUoYXJnYywg YXJndiwgbmFtZSkgKQorICAgICAgICByZXR1cm4gRUlOVkFMOworCisgICAgZmlsZW5hbWUgPSBh cmd2WzFdOworICAgIGZkID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOworICAgIGlmICggZmQg PCAwICkKKyAgICB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IG9wZW4gJXMs IGVycm9yOiAlZCglcylcbiIsCisgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGVycm5vLCBzdHJl cnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZXJybm87CisgICAgfQorICAgIGlmICggc3Rh dChmaWxlbmFtZSwgJmJ1ZikgIT0gMCApCisgICAgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwg IkNvdWxkIG5vdCBnZXQgcmlnaHQgc2l6ZSAlcywgZXJyb3I6ICVkKCVzKVxuIiwKKyAgICAgICAg ICAgICAgICBmaWxlbmFtZSwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGNsb3Nl KGZkKTsKKyAgICAgICAgcmV0dXJuIGVycm5vOworICAgIH0KKworICAgIGxlbiA9IGJ1Zi5zdF9z aXplOworICAgIGZidWYgPSBtbWFwKDAsIGxlbiwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQs IDApOworICAgIGlmICggZmJ1ZiA9PSBNQVBfRkFJTEVEICkKKyAgICB7CisgICAgICAgIGZwcmlu dGYoc3RkZXJyLCJDb3VsZCBub3QgbWFwOiAlcywgZXJyb3I6ICVkKCVzKVxuIiwKKyAgICAgICAg ICAgICAgICBmaWxlbmFtZSwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGNsb3Nl IChmZCk7CisgICAgICAgIHJldHVybiBlcnJubzsKKyAgICB9CisgICAgcHJpbnRmKCJVcGxvYWRp bmcgJXMgKCV6dSBieXRlcylcbiIsIGZpbGVuYW1lLCBsZW4pOworICAgIHJjID0geGNfeHNwbGlj ZV91cGxvYWQoeGNoLCBuYW1lLCBmYnVmLCBsZW4pOworICAgIGlmICggcmMgKQorICAgICAgICBm cHJpbnRmKHN0ZGVyciwgIlVwbG9hZCBmYWlsZWQ6ICVzLCBlcnJvcjogJWQoJXMpIVxuIiwKKyAg ICAgICAgICAgICAgICBmaWxlbmFtZSwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisKKyAgICBp ZiAoIG11bm1hcCggZmJ1ZiwgbGVuKSApCisgICAgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwg IkNvdWxkIG5vdCB1bm1hcCE/IGVycm9yOiAlZCglcykhXG4iLAorICAgICAgICAgICAgICAgIGVy cm5vLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBpZiAoICFyYyApCisgICAgICAgICAgICBy YyA9IGVycm5vOworICAgIH0KKyAgICBjbG9zZShmZCk7CisKKyAgICByZXR1cm4gcmM7Cit9CisK Ky8qIFRoZXNlIE1VU1QgbWF0Y2ggdG8gdGhlICdhY3Rpb25fb3B0aW9uc1tdJyBhcnJheSBzbG90 cy4gKi8KK2VudW0geworICAgIEFDVElPTl9BUFBMWSA9IDAsCisgICAgQUNUSU9OX1JFVkVSVCA9 IDEsCisgICAgQUNUSU9OX1VOTE9BRCA9IDIsCisgICAgQUNUSU9OX1JFUExBQ0UgPSAzLAorfTsK Kworc3RydWN0IHsKKyAgICBpbnQgYWxsb3c7IC8qIFN0YXRlIGl0IG11c3QgYmUgaW4gdG8gY2Fs bCBmdW5jdGlvbi4gKi8KKyAgICBpbnQgZXhwZWN0ZWQ7IC8qIFRoZSBzdGF0ZSB0byBiZSBpbiBh ZnRlciB0aGUgZnVuY3Rpb24uICovCisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBpbnQgKCpm dW5jdGlvbikoeGNfaW50ZXJmYWNlICp4Y2gsIGNoYXIgKm5hbWUsIHVpbnQzMl90IHRpbWVvdXQp OworICAgIHVuc2lnbmVkIGludCBleGVjdXRlZDsgLyogSGFzIHRoZSBmdW5jdGlvbiBiZWVuIGNh bGxlZD8uICovCit9IGFjdGlvbl9vcHRpb25zW10gPSB7CisgICAgeyAgIC5hbGxvdyA9IFhTUExJ Q0VfU1RBVEVfQ0hFQ0tFRCwKKyAgICAgICAgLmV4cGVjdGVkID0gWFNQTElDRV9TVEFURV9BUFBM SUVELAorICAgICAgICAubmFtZSA9ICJhcHBseSIsCisgICAgICAgIC5mdW5jdGlvbiA9IHhjX3hz cGxpY2VfYXBwbHksCisgICAgfSwKKyAgICB7ICAgLmFsbG93ID0gWFNQTElDRV9TVEFURV9BUFBM SUVELAorICAgICAgICAuZXhwZWN0ZWQgPSBYU1BMSUNFX1NUQVRFX0NIRUNLRUQsCisgICAgICAg IC5uYW1lID0gInJldmVydCIsCisgICAgICAgIC5mdW5jdGlvbiA9IHhjX3hzcGxpY2VfcmV2ZXJ0 LAorICAgIH0sCisgICAgeyAgIC5hbGxvdyA9IFhTUExJQ0VfU1RBVEVfQ0hFQ0tFRCwKKyAgICAg ICAgLmV4cGVjdGVkID0gLUVOT0VOVCwKKyAgICAgICAgLm5hbWUgPSAidW5sb2FkIiwKKyAgICAg ICAgLmZ1bmN0aW9uID0geGNfeHNwbGljZV91bmxvYWQsCisgICAgfSwKKyAgICB7ICAgLmFsbG93 ID0gWFNQTElDRV9TVEFURV9DSEVDS0VELAorICAgICAgICAuZXhwZWN0ZWQgPSBYU1BMSUNFX1NU QVRFX0FQUExJRUQsCisgICAgICAgIC5uYW1lID0gInJlcGxhY2UiLAorICAgICAgICAuZnVuY3Rp b24gPSB4Y194c3BsaWNlX3JlcGxhY2UsCisgICAgfSwKK307CisKKy8qIEdvIGFyb3VuZCAzMDAg KiAwLjEgc2Vjb25kcyA9IDMwIHNlY29uZHMuICovCisjZGVmaW5lIFJFVFJJRVMgMzAwCisvKiBh a2EgMC4xIHNlY29uZCAqLworI2RlZmluZSBERUxBWSAxMDAwMDAKKworaW50IGFjdGlvbl9mdW5j KGludCBhcmdjLCBjaGFyICphcmd2W10sIHVuc2lnbmVkIGludCBpZHgpCit7CisgICAgY2hhciBu YW1lW1hFTl9YU1BMSUNFX05BTUVfU0laRV07CisgICAgaW50IHJjLCBvcmlnaW5hbF9zdGF0ZTsK KyAgICB4ZW5feHNwbGljZV9zdGF0dXNfdCBzdGF0dXM7CisgICAgdW5zaWduZWQgaW50IHJldHJ5 ID0gMDsKKworICAgIGlmICggYXJnYyAhPSAxICkKKyAgICB7CisgICAgICAgIHNob3dfaGVscCgp OworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKCBpZHggPj0gQVJSQVlfU0la RShhY3Rpb25fb3B0aW9ucykgKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoIGdldF9u YW1lKGFyZ2MsIGFyZ3YsIG5hbWUpICkKKyAgICAgICAgcmV0dXJuIEVJTlZBTDsKKworICAgIC8q IENoZWNrIGluaXRpYWwgc3RhdHVzLiAqLworICAgIHJjID0geGNfeHNwbGljZV9nZXQoeGNoLCBu YW1lLCAmc3RhdHVzKTsKKyAgICBpZiAoIHJjICkKKyAgICB7CisgICAgICAgIGZwcmludGYoc3Rk ZXJyLCAiJXMgZmFpbGVkIHRvIGdldCBzdGF0dXMgKHJjPSVkLCAlcykhXG4iLAorICAgICAgICAg ICAgICAgIG5hbWUsIC1yYywgc3RyZXJyb3IoLXJjKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAg ICB9CisgICAgaWYgKCBzdGF0dXMucmMgPT0gLUVBR0FJTiApCisgICAgeworICAgICAgICBmcHJp bnRmKHN0ZGVyciwgIiVzIGZhaWxlZC4gT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3NcbiIs IG5hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKCBzdGF0dXMuc3Rh dGUgPT0gYWN0aW9uX29wdGlvbnNbaWR4XS5leHBlY3RlZCApCisgICAgeworICAgICAgICBwcmlu dGYoIk5vIGFjdGlvbiBuZWVkZWRcbiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg ICAvKiBQZXJmb3JtIGFjdGlvbi4gKi8KKyAgICBpZiAoIGFjdGlvbl9vcHRpb25zW2lkeF0uYWxs b3cgJiBzdGF0dXMuc3RhdGUgKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJQZXJmb3JtaW5nICVz OiIsIGFjdGlvbl9vcHRpb25zW2lkeF0ubmFtZSk7CisgICAgICAgIHJjID0gYWN0aW9uX29wdGlv bnNbaWR4XS5mdW5jdGlvbih4Y2gsIG5hbWUsIDApOworICAgICAgICBpZiAoIHJjICkKKyAgICAg ICAgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyBmYWlsZWQgd2l0aCAlZCglcylc biIsIG5hbWUsIC1yYywgc3RyZXJyb3IoLXJjKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7Cisg ICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcHJpbnRmKCIlczogaW4g d3Jvbmcgc3RhdGUgKCVzKSwgZXhwZWN0ZWQgKCVzKVxuIiwKKyAgICAgICAgICAgICAgIG5hbWUs IHN0YXRlMnN0cihzdGF0dXMuc3RhdGUpLAorICAgICAgICAgICAgICAgc3RhdGUyc3RyKGFjdGlv bl9vcHRpb25zW2lkeF0uZXhwZWN0ZWQpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKwor ICAgIG9yaWdpbmFsX3N0YXRlID0gc3RhdHVzLnN0YXRlOworICAgIGRvIHsKKyAgICAgICAgcmMg PSB4Y194c3BsaWNlX2dldCh4Y2gsIG5hbWUsICZzdGF0dXMpOworICAgICAgICBpZiAoIHJjICkK KyAgICAgICAgeworICAgICAgICAgICAgcmMgPSAtZXJybm87CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgfQorCisgICAgICAgIGlmICggc3RhdHVzLnN0YXRlICE9IG9yaWdpbmFsX3N0YXRl ICkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoIHN0YXR1cy5yYyAmJiBzdGF0dXMu cmMgIT0gLUVBR0FJTiApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJjID0gc3RhdHVzLnJjOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBwcmludGYoIi4iKTsKKyAg ICAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgICAgIHVzbGVlcChERUxBWSk7CisgICAgfSB3aGls ZSAoICsrcmV0cnkgPCBSRVRSSUVTICk7CisKKyAgICBpZiAoIHJldHJ5ID49IFJFVFJJRVMgKQor ICAgIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogT3BlcmF0aW9uIGRpZG4ndCBjb21w bGV0ZSBhZnRlciAzMCBzZWNvbmRzLlxuIiwgbmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAg ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKCByYyA9PSAwICkKKyAgICAgICAgICAg IHJjID0gc3RhdHVzLnN0YXRlOworCisgICAgICAgIGlmICggYWN0aW9uX29wdGlvbnNbaWR4XS5l eHBlY3RlZCA9PSByYyApCisgICAgICAgICAgICBwcmludGYoIiBjb21wbGV0ZWRcbiIpOworICAg ICAgICBlbHNlIGlmICggcmMgPCAwICkKKyAgICAgICAgeworICAgICAgICAgICAgZnByaW50Zihz dGRlcnIsICIlcyBmYWlsZWQgd2l0aCAlZCglcylcbiIsIG5hbWUsIC1yYywgc3RyZXJyb3IoLXJj KSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg ICAgICB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBpbiB3cm9uZyBzdGF0ZSAo JXMpLCBleHBlY3RlZCAoJXMpXG4iLAorICAgICAgICAgICAgICAgbmFtZSwgc3RhdGUyc3RyKHJj KSwKKyAgICAgICAgICAgICAgIHN0YXRlMnN0cihhY3Rpb25fb3B0aW9uc1tpZHhdLmV4cGVjdGVk KSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBsb2FkX2Z1bmMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK K3sKKyAgICBpbnQgcmM7CisgICAgY2hhciAqbmV3X2FyZ3ZbMl07CisgICAgY2hhciAqcGF0aCwg Km5hbWUsICpsYXN0ZG90OworCisgICAgaWYgKCBhcmdjICE9IDEgKQorICAgIHsKKyAgICAgICAg c2hvd19oZWxwKCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgLyogPGZpbGU+ICov CisgICAgbmV3X2FyZ3ZbMV0gPSBhcmd2WzBdOworCisgICAgLyogU3ludGhlc2l6ZSB0aGUgPGlk PiAqLworICAgIHBhdGggPSBzdHJkdXAoYXJndlswXSk7CisKKyAgICBuYW1lID0gYmFzZW5hbWUo cGF0aCk7CisgICAgbGFzdGRvdCA9IHN0cnJjaHIobmFtZSwgJy4nKTsKKyAgICBpZiAoIGxhc3Rk b3QgIT0gTlVMTCApCisgICAgICAgICpsYXN0ZG90ID0gJ1wwJzsKKyAgICBuZXdfYXJndlswXSA9 IG5hbWU7CisKKyAgICByYyA9IHVwbG9hZF9mdW5jKDIgLyogPGlkPiA8ZmlsZT4gKi8sIG5ld19h cmd2KTsKKyAgICBpZiAoIHJjICkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgcmMgPSBhY3Rp b25fZnVuYygxIC8qIG9ubHkgPGlkPiAqLywgbmV3X2FyZ3YsIEFDVElPTl9BUFBMWSk7CisgICAg aWYgKCByYyApCisgICAgICAgIGFjdGlvbl9mdW5jKDEsIG5ld19hcmd2LCBBQ1RJT05fVU5MT0FE KTsKKworICAgIGZyZWUocGF0aCk7CisgICAgcmV0dXJuIHJjOworfQorCisvKgorICogVGhlc2Ug YXJlIGFsc28gZnVuY3Rpb25zIGluIGFjdGlvbl9vcHRpb25zIHRoYXQgYXJlIGNhbGxlZCBpbiBj YXNlCisgKiBub25lIG9mIHRoZSBvbmVzIGluIG1haW5fb3B0aW9ucyBtYXRjaC4KKyAqLworc3Ry dWN0IHsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIGludCAoKmZ1bmN0aW9uKShpbnQgYXJn YywgY2hhciAqYXJndltdKTsKK30gbWFpbl9vcHRpb25zW10gPSB7CisgICAgeyAiaGVscCIsIGhl bHBfZnVuYyB9LAorICAgIHsgImxpc3QiLCBsaXN0X2Z1bmMgfSwKKyAgICB7ICJ1cGxvYWQiLCB1 cGxvYWRfZnVuYyB9LAorICAgIHsgImxvYWQiLCBsb2FkX2Z1bmMgfSwKK307CisKK2ludCBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgaW50IGksIGosIHJldDsKKworICAgIGlm ICggYXJnYyAgPD0gMSApCisgICAgeworICAgICAgICBzaG93X2hlbHAoKTsKKyAgICAgICAgcmV0 dXJuIDA7CisgICAgfQorICAgIGZvciAoIGkgPSAwOyBpIDwgQVJSQVlfU0laRShtYWluX29wdGlv bnMpOyBpKysgKQorICAgICAgICBpZiAoIXN0cm5jbXAobWFpbl9vcHRpb25zW2ldLm5hbWUsIGFy Z3ZbMV0sIHN0cmxlbihhcmd2WzFdKSkpCisgICAgICAgICAgICBicmVhazsKKworICAgIGlmICgg aSA9PSBBUlJBWV9TSVpFKG1haW5fb3B0aW9ucykgKQorICAgIHsKKyAgICAgICAgZm9yICggaiA9 IDA7IGogPCBBUlJBWV9TSVpFKGFjdGlvbl9vcHRpb25zKTsgaisrICkKKyAgICAgICAgICAgIGlm ICghc3RybmNtcChhY3Rpb25fb3B0aW9uc1tqXS5uYW1lLCBhcmd2WzFdLCBzdHJsZW4oYXJndlsx XSkpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICggaiA9PSBBUlJBWV9T SVpFKGFjdGlvbl9vcHRpb25zKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmludGYoc3Rk ZXJyLCAiVW5yZWNvZ25pc2VkIGNvbW1hbmQgJyVzJyAtLSB0cnkgIgorICAgICAgICAgICAgICAg ICAgICIneGVuLXhzcGxpY2UgaGVscCdcbiIsIGFyZ3ZbMV0pOworICAgICAgICAgICAgcmV0dXJu IDE7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgaiA9IEFSUkFZX1NJWkUoYWN0aW9u X29wdGlvbnMpOworCisgICAgeGNoID0geGNfaW50ZXJmYWNlX29wZW4oMCwwLDApOworICAgIGlm ICggIXhjaCApCisgICAgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImZhaWxlZCB0byBnZXQg dGhlIGhhbmRsZXJcbiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIGkg PT0gQVJSQVlfU0laRShtYWluX29wdGlvbnMpICkKKyAgICAgICAgcmV0ID0gYWN0aW9uX2Z1bmMo YXJnYyAtMiwgYXJndiArIDIsIGopOworICAgIGVsc2UKKyAgICAgICAgcmV0ID0gbWFpbl9vcHRp b25zW2ldLmZ1bmN0aW9uKGFyZ2MgLTIsIGFyZ3YgKyAyKTsKKworICAgIHhjX2ludGVyZmFjZV9j bG9zZSh4Y2gpOworCisgICAgcmV0dXJuICEhcmV0OworfQorCisvKgorICogTG9jYWwgdmFyaWFi bGVzOgorICogbW9kZTogQworICogYy1maWxlLXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZz ZXQ6IDQKKyAqIHRhYi13aWR0aDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6 CisgKi8KLS0gCjIuNS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpo dHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK