From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [PATCH v7 04/24] xen-xsplice: Tool to manipulate xsplice payloads Date: Sun, 10 Apr 2016 17:14:36 -0400 Message-ID: <1460322896-1115-5-git-send-email-konrad.wilk@oracle.com> References: <1460322896-1115-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.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1apMhu-0000H3-B7 for xen-devel@lists.xenproject.org; Sun, 10 Apr 2016 21:15:46 +0000 In-Reply-To: <1460322896-1115-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: xen-devel@lists.xenproject.org, konrad@kernel.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 YzogU3RlZmFubyBTdGFiZWxsaW5pIDxzdGVmYW5vLnN0YWJlbGxpbmlAZXUuY2l0cml4LmNvbT4K Q2M6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+Cgp2MjoKIC0gUmVtb3ZlZCBSRVZFUlRF RCBzdGF0ZS4KIC0gRml4ZWQgYnVncyBoYW5kbGluZyBYU1BMSUNFX1NUQVRVU19QUk9HUkVTUy4K IC0gU3BsaXQgc3RhdHVzIGludG8gc3RhdGUgYW5kIGVycm9yLgogICBBZGQgUkVQTEFDRSBhY3Rp b24uCnYzOgogLSBVdGlsaXplIHRoZSB0aW1lb3V0IGFuZCB1c2UgdGhlIGRlZmF1bHQgb25lIChs ZXQgdGhlIGh5cGVydmlzb3IKICAgcGljayBpdCkuCiAtIENoYW5nZSB0aGUgcy9hbGwvbG9hZCBh bmQgaW5mZXIgdGhlIDxpZD4gZnJvbSBuYW1lIG9mIGZpbGUuCiAtIHMvaWQvbmFtZS8KIC0gRG9u J3QgdXNlIGh5cGVyY2FsbCBidWZmZXIgaW4gdXBsb2FkX2Z1bmMsIGluc3RlYWQgZG8gaXQgaW4g bGlieGMKIC0gUmVtb3ZlIHRoZSBkZWJ1ZyBwcmludGsuCiAtIFJlbW92ZSBnb3RvJ3MgKHBlciBX ZWkncyByZXZpZXcpCiAtIFVzZSBmcHJpbnRmKHN0ZGVyciBpbiBlcnJvciBwYXRocy4KIC0gQWRk IGxvY2FsIHZhcmlhYmxlIGJsb2NrLgogLSBTeW50YXgsIGV4cGFuZCBjb21tZW50LCBhbmQgZG9u J3Qgb3ZlcndyaXRlIHJjIGlmIHhjX3hzcGxpY2VfdXBsb2FkIGZhaWxlZC4KdjQ6CiAtIFJlbW92 ZSBMT0FERUQgc3RhdGUuIE9ubHkgaGF2ZSBDSEVDS0VEIHN0YXRlLgotLS0KLS0tCiAuZ2l0aWdu b3JlICAgICAgICAgICAgICAgfCAgIDEgKwogdG9vbHMvbWlzYy9NYWtlZmlsZSAgICAgIHwgICA0 ICsKIHRvb2xzL21pc2MveGVuLXhzcGxpY2UuYyB8IDQ2MyArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA0NjggaW5zZXJ0aW9u cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL21pc2MveGVuLXhzcGxpY2UuYwoKZGlmZiAt LWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDIwZmZhMmQuLjM5ZWI3NzkgMTAw NjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMTgyLDYgKzE4Miw3IEBA IHRvb2xzL21pc2MveGVuX2NwdXBlcmYKIHRvb2xzL21pc2MveGVuLWNwdWlkCiB0b29scy9taXNj L3hlbi1kZXRlY3QKIHRvb2xzL21pc2MveGVuLXRtZW0tbGlzdC1wYXJzZQordG9vbHMvbWlzYy94 ZW4teHNwbGljZQogdG9vbHMvbWlzYy94ZW5wZXJmCiB0b29scy9taXNjL3hlbnBtCiB0b29scy9t aXNjL3hlbi1odm1jdHgKZGlmZiAtLWdpdCBhL3Rvb2xzL21pc2MvTWFrZWZpbGUgYi90b29scy9t aXNjL01ha2VmaWxlCmluZGV4IGE5NGRhZDkuLjNhNWY4NDIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL21p c2MvTWFrZWZpbGUKKysrIGIvdG9vbHMvbWlzYy9NYWtlZmlsZQpAQCAtMzIsNiArMzIsNyBAQCBJ TlNUQUxMX1NCSU4gICAgICAgICAgICAgICAgICAgKz0geGVubG9ja3Byb2YKIElOU1RBTExfU0JJ TiAgICAgICAgICAgICAgICAgICArPSB4ZW5wZXJmCiBJTlNUQUxMX1NCSU4gICAgICAgICAgICAg ICAgICAgKz0geGVucG0KIElOU1RBTExfU0JJTiAgICAgICAgICAgICAgICAgICArPSB4ZW53YXRj aGRvZ2QKK0lOU1RBTExfU0JJTiAgICAgICAgICAgICAgICAgICArPSB4ZW4teHNwbGljZQogSU5T VEFMTF9TQklOICs9ICQoSU5TVEFMTF9TQklOLXkpCiAKICMgRXZlcnl0aGluZyB0byBiZSBpbnN0 YWxsZWQgaW4gYSBwcml2YXRlIGJpbi8KQEAgLTEwMyw2ICsxMDQsOSBAQCB4ZW4tbWZuZHVtcDog eGVuLW1mbmR1bXAubwogeGVud2F0Y2hkb2dkOiB4ZW53YXRjaGRvZ2QubwogCSQoQ0MpICQoTERG TEFHUykgLW8gJEAgJDwgJChMRExJQlNfbGlieGVuY3RybCkgJChBUFBFTkRfTERGTEFHUykKIAor eGVuLXhzcGxpY2U6IHhlbi14c3BsaWNlLm8KKwkkKENDKSAkKExERkxBR1MpIC1vICRAICQ8ICQo TERMSUJTX2xpYnhlbmN0cmwpICQoQVBQRU5EX0xERkxBR1MpCisKIHhlbi1sb3dtZW1kOiB4ZW4t bG93bWVtZC5vCiAJJChDQykgJChMREZMQUdTKSAtbyAkQCAkPCAkKExETElCU19saWJ4ZW5ldnRj aG4pICQoTERMSUJTX2xpYnhlbmN0cmwpICQoTERMSUJTX2xpYnhlbnN0b3JlKSAkKEFQUEVORF9M REZMQUdTKQogCmRpZmYgLS1naXQgYS90b29scy9taXNjL3hlbi14c3BsaWNlLmMgYi90b29scy9t aXNjL3hlbi14c3BsaWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI5 MjI4ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL21pc2MveGVuLXhzcGxpY2UuYwpAQCAtMCww ICsxLDQ2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNiBPcmFjbGUgYW5kL29yIGl0cyBh ZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNpbmNsdWRlIDxmY250bC5o PgorI2luY2x1ZGUgPGxpYmdlbi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3Rk bGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNs dWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHhlbmN0cmwu aD4KKyNpbmNsdWRlIDx4ZW5zdG9yZS5oPgorCitzdGF0aWMgeGNfaW50ZXJmYWNlICp4Y2g7CisK K3ZvaWQgc2hvd19oZWxwKHZvaWQpCit7CisgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAg ICAieGVuLXhzcGxpY2U6IFhzcGxpY2UgdGVzdCB0b29sXG4iCisgICAgICAgICAgICAiVXNhZ2U6 IHhlbi14c3BsaWNlIDxjb21tYW5kPiBbYXJnc11cbiIKKyAgICAgICAgICAgICIgPG5hbWU+IEFu IHVuaXF1ZSBuYW1lIG9mIHBheWxvYWQuIFVwIHRvICVkIGNoYXJhY3RlcnMuXG4iCisgICAgICAg ICAgICAiQ29tbWFuZHM6XG4iCisgICAgICAgICAgICAiICBoZWxwICAgICAgICAgICAgICAgICAg IGRpc3BsYXkgdGhpcyBoZWxwXG4iCisgICAgICAgICAgICAiICB1cGxvYWQgPG5hbWU+IDxmaWxl PiAgIHVwbG9hZCBmaWxlIDxmaWxlPiB3aXRoIDxuYW1lPiBuYW1lXG4iCisgICAgICAgICAgICAi ICBsaXN0ICAgICAgICAgICAgICAgICAgIGxpc3QgcGF5bG9hZHMgdXBsb2FkZWQuXG4iCisgICAg ICAgICAgICAiICBhcHBseSA8bmFtZT4gICAgICAgICAgIGFwcGx5IDxuYW1lPiBwYXRjaC5cbiIK KyAgICAgICAgICAgICIgIHJldmVydCA8bmFtZT4gICAgICAgICAgcmV2ZXJ0IG5hbWUgPG5hbWU+ IHBhdGNoLlxuIgorICAgICAgICAgICAgIiAgcmVwbGFjZSA8bmFtZT4gICAgICAgICBhcHBseSA8 bmFtZT4gcGF0Y2ggYW5kIHJldmVydCBhbGwgb3RoZXJzLlxuIgorICAgICAgICAgICAgIiAgdW5s b2FkIDxuYW1lPiAgICAgICAgICB1bmxvYWQgbmFtZSA8bmFtZT4gcGF0Y2guXG4iCisgICAgICAg ICAgICAiICBsb2FkICA8ZmlsZT4gICAgICAgICAgIHVwbG9hZCwgY2hlY2sgYW5kIGFwcGx5IDxm aWxlPi5cbiIKKyAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSBpcyB0 aGUgPGZpbGU+IG5hbWVcbiIsCisgICAgICAgICAgICBYRU5fWFNQTElDRV9OQU1FX1NJWkUpOwor fQorCisvKiB3cmFwcGVyIGZ1bmN0aW9uICovCitzdGF0aWMgaW50IGhlbHBfZnVuYyhpbnQgYXJn YywgY2hhciAqYXJndltdKQoreworICAgIHNob3dfaGVscCgpOworICAgIHJldHVybiAwOworfQor CisjZGVmaW5lIEFSUkFZX1NJWkUoYSkgKHNpemVvZiAoYSkgLyBzaXplb2YgKChhKVswXSkpCisK K3N0YXRpYyBjb25zdCBjaGFyICpzdGF0ZTJzdHIodW5zaWduZWQgaW50IHN0YXRlKQoreworI2Rl ZmluZSBTVEFURSh4KSBbWFNQTElDRV9TVEFURV8jI3hdID0gI3gKKyAgICBzdGF0aWMgY29uc3Qg Y2hhciAqY29uc3QgbmFtZXNbXSA9IHsKKyAgICAgICAgICAgIFNUQVRFKENIRUNLRUQpLAorICAg ICAgICAgICAgU1RBVEUoQVBQTElFRCksCisgICAgfTsKKyN1bmRlZiBTVEFURQorICAgIGlmIChz dGF0ZSA+PSBBUlJBWV9TSVpFKG5hbWVzKSB8fCAhbmFtZXNbc3RhdGVdKQorICAgICAgICByZXR1 cm4gInVua25vd24iOworCisgICAgcmV0dXJuIG5hbWVzW3N0YXRlXTsKK30KKworLyogVGhpcyB2 YWx1ZSB3YXMgY2hvb3NlbiBhZGhvYy4gSXQgY291bGQgYmUgNDIgdG9vLiAqLworI2RlZmluZSBN QVhfTEVOIDExCitzdGF0aWMgaW50IGxpc3RfZnVuYyhpbnQgYXJnYywgY2hhciAqYXJndltdKQor eworICAgIHVuc2lnbmVkIGludCBpZHgsIGRvbmUsIGxlZnQsIGk7CisgICAgeGVuX3hzcGxpY2Vf c3RhdHVzX3QgKmluZm8gPSBOVUxMOworICAgIGNoYXIgKm5hbWUgPSBOVUxMOworICAgIHVpbnQz Ml90ICpsZW4gPSBOVUxMOworICAgIGludCByYyA9IEVOT01FTTsKKworICAgIGlmICggYXJnYyAp CisgICAgeworICAgICAgICBzaG93X2hlbHAoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0K KyAgICBpZHggPSBsZWZ0ID0gMDsKKyAgICBpbmZvID0gbWFsbG9jKHNpemVvZigqaW5mbykgKiBN QVhfTEVOKTsKKyAgICBpZiAoICFpbmZvICkKKyAgICAgICAgcmV0dXJuIHJjOworICAgIG5hbWUg PSBtYWxsb2Moc2l6ZW9mKCpuYW1lKSAqIFhFTl9YU1BMSUNFX05BTUVfU0laRSAqIE1BWF9MRU4p OworICAgIGlmICggIW5hbWUgKQorICAgIHsKKyAgICAgICAgZnJlZShpbmZvKTsKKyAgICAgICAg cmV0dXJuIHJjOworICAgIH0KKyAgICBsZW4gPSBtYWxsb2Moc2l6ZW9mKCpsZW4pICogTUFYX0xF Tik7CisgICAgaWYgKCAhbGVuICkgeworICAgICAgICBmcmVlKG5hbWUpOworICAgICAgICBmcmVl KGluZm8pOworICAgICAgICByZXR1cm4gcmM7CisgICAgfQorCisgICAgZnByaW50ZihzdGRvdXQs IiBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHN0YXR1c1xuIgorICAg ICAgICAgICAgICAgICAgICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLVxuIik7CisgICAgZG8geworICAgICAgICBkb25lID0gMDsKKyAgICAgICAg LyogVGhlIG1lbXNldCBpcyBkb25lIHRvIGNhdGNoIGVycm9ycy4gKi8KKyAgICAgICAgbWVtc2V0 KGluZm8sICdBJywgc2l6ZW9mKCppbmZvKSAqIE1BWF9MRU4pOworICAgICAgICBtZW1zZXQobmFt ZSwgJ0InLCBzaXplb2YoKm5hbWUgKiBNQVhfTEVOICogWEVOX1hTUExJQ0VfTkFNRV9TSVpFKSk7 CisgICAgICAgIG1lbXNldChsZW4sICdDJywgc2l6ZW9mKCpsZW4pICogTUFYX0xFTik7CisgICAg ICAgIHJjID0geGNfeHNwbGljZV9saXN0KHhjaCwgTUFYX0xFTiwgaWR4LCBpbmZvLCBuYW1lLCBs ZW4sICZkb25lLCAmbGVmdCk7CisgICAgICAgIGlmICggcmMgKQorICAgICAgICB7CisgICAgICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBsaXN0ICVkLyVkOiAlZCglcykhXG4iLAor ICAgICAgICAgICAgICAgICAgICBpZHgsIGxlZnQsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZm9yICggaSA9IDA7IGkgPCBk b25lOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgajsKKyAgICAg ICAgICAgIHVpbnQzMl90IHN6OworICAgICAgICAgICAgY2hhciAqc3RyOworCisgICAgICAgICAg ICBzeiA9IGxlbltpXTsKKyAgICAgICAgICAgIHN0ciA9IG5hbWUgKyAoaSAqIFhFTl9YU1BMSUNF X05BTUVfU0laRSk7CisgICAgICAgICAgICBmb3IgKCBqID0gc3o7IGogPCBYRU5fWFNQTElDRV9O QU1FX1NJWkU7IGorKyApCisgICAgICAgICAgICAgICAgc3RyW2pdID0gJ1wwJzsKKworICAgICAg ICAgICAgcHJpbnRmKCIlLTQwc3wgJXMiLCBzdHIsIHN0YXRlMnN0cihpbmZvW2ldLnN0YXRlKSk7 CisgICAgICAgICAgICBpZiAoIGluZm9baV0ucmMgKQorICAgICAgICAgICAgICAgIHByaW50Zigi ICglZCwgJXMpXG4iLCAtaW5mb1tpXS5yYywgc3RyZXJyb3IoLWluZm9baV0ucmMpKTsKKyAgICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwdXRzKCIiKTsKKyAgICAgICAgfQorICAgICAg ICBpZHggKz0gZG9uZTsKKyAgICB9IHdoaWxlICggbGVmdCApOworCisgICAgZnJlZShuYW1lKTsK KyAgICBmcmVlKGluZm8pOworICAgIGZyZWUobGVuKTsKKyAgICByZXR1cm4gcmM7Cit9CisjdW5k ZWYgTUFYX0xFTgorCitzdGF0aWMgaW50IGdldF9uYW1lKGludCBhcmdjLCBjaGFyICphcmd2W10s IGNoYXIgKm5hbWUpCit7CisgICAgc3NpemVfdCBsZW4gPSBzdHJsZW4oYXJndlswXSk7CisgICAg aWYgKCBsZW4gPiBYRU5fWFNQTElDRV9OQU1FX1NJWkUgKQorICAgIHsKKyAgICAgICAgZnByaW50 ZihzdGRlcnIsICJJRCBNVVNUIGJlICVkIGNoYXJhY3RlcnMhXG4iLCBYRU5fWFNQTElDRV9OQU1F X1NJWkUpOworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIGVycm5vOwor ICAgIH0KKyAgICAvKiBEb24ndCB3YW50IGFueSBmdW5ueSBzdHJpbmdzIGZyb20gdGhlIHN0YWNr LiAqLworICAgIG1lbXNldChuYW1lLCAwLCBYRU5fWFNQTElDRV9OQU1FX1NJWkUpOworICAgIHN0 cm5jcHkobmFtZSwgYXJndlswXSwgbGVuKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCB1cGxvYWRfZnVuYyhpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGNoYXIgKmZpbGVu YW1lOworICAgIGNoYXIgbmFtZVtYRU5fWFNQTElDRV9OQU1FX1NJWkVdOworICAgIGludCBmZCA9 IDAsIHJjOworICAgIHN0cnVjdCBzdGF0IGJ1ZjsKKyAgICB1bnNpZ25lZCBjaGFyICpmYnVmOwor ICAgIHNzaXplX3QgbGVuOworCisgICAgaWYgKCBhcmdjICE9IDIgKQorICAgIHsKKyAgICAgICAg c2hvd19oZWxwKCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoIGdldF9u YW1lKGFyZ2MsIGFyZ3YsIG5hbWUpICkKKyAgICAgICAgcmV0dXJuIEVJTlZBTDsKKworICAgIGZp bGVuYW1lID0gYXJndlsxXTsKKyAgICBmZCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRPTkxZKTsKKyAg ICBpZiAoIGZkIDwgMCApCisgICAgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5v dCBvcGVuICVzLCBlcnJvcjogJWQoJXMpXG4iLAorICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBl cnJubywgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGVycm5vOworICAgIH0KKyAg ICBpZiAoIHN0YXQoZmlsZW5hbWUsICZidWYpICE9IDAgKQorICAgIHsKKyAgICAgICAgZnByaW50 ZihzdGRlcnIsICJDb3VsZCBub3QgZ2V0IHJpZ2h0IHNpemUgJXMsIGVycm9yOiAlZCglcylcbiIs CisgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOworICAg ICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybiBlcnJubzsKKyAgICB9CisKKyAgICBsZW4g PSBidWYuc3Rfc2l6ZTsKKyAgICBmYnVmID0gbW1hcCgwLCBsZW4sIFBST1RfUkVBRCwgTUFQX1BS SVZBVEUsIGZkLCAwKTsKKyAgICBpZiAoIGZidWYgPT0gTUFQX0ZBSUxFRCApCisgICAgeworICAg ICAgICBmcHJpbnRmKHN0ZGVyciwiQ291bGQgbm90IG1hcDogJXMsIGVycm9yOiAlZCglcylcbiIs CisgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOworICAg ICAgICBjbG9zZSAoZmQpOworICAgICAgICByZXR1cm4gZXJybm87CisgICAgfQorICAgIHByaW50 ZigiVXBsb2FkaW5nICVzICglenUgYnl0ZXMpXG4iLCBmaWxlbmFtZSwgbGVuKTsKKyAgICByYyA9 IHhjX3hzcGxpY2VfdXBsb2FkKHhjaCwgbmFtZSwgZmJ1ZiwgbGVuKTsKKyAgICBpZiAoIHJjICkK KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJVcGxvYWQgZmFpbGVkOiAlcywgZXJyb3I6ICVkKCVz KSFcbiIsCisgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGVycm5vLCBzdHJlcnJvcihlcnJubykp OworCisgICAgaWYgKCBtdW5tYXAoIGZidWYsIGxlbikgKQorICAgIHsKKyAgICAgICAgZnByaW50 ZihzdGRlcnIsICJDb3VsZCBub3QgdW5tYXAhPyBlcnJvcjogJWQoJXMpIVxuIiwKKyAgICAgICAg ICAgICAgICBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgaWYgKCAhcmMgKQorICAg ICAgICAgICAgcmMgPSBlcnJubzsKKyAgICB9CisgICAgY2xvc2UoZmQpOworCisgICAgcmV0dXJu IHJjOworfQorCisvKiBUaGVzZSBNVVNUIG1hdGNoIHRvIHRoZSAnYWN0aW9uX29wdGlvbnNbXScg YXJyYXkgc2xvdHMuICovCitlbnVtIHsKKyAgICBBQ1RJT05fQVBQTFkgPSAwLAorICAgIEFDVElP Tl9SRVZFUlQgPSAxLAorICAgIEFDVElPTl9VTkxPQUQgPSAyLAorICAgIEFDVElPTl9SRVBMQUNF ID0gMywKK307CisKK3N0cnVjdCB7CisgICAgaW50IGFsbG93OyAvKiBTdGF0ZSBpdCBtdXN0IGJl IGluIHRvIGNhbGwgZnVuY3Rpb24uICovCisgICAgaW50IGV4cGVjdGVkOyAvKiBUaGUgc3RhdGUg dG8gYmUgaW4gYWZ0ZXIgdGhlIGZ1bmN0aW9uLiAqLworICAgIGNvbnN0IGNoYXIgKm5hbWU7Cisg ICAgaW50ICgqZnVuY3Rpb24pKHhjX2ludGVyZmFjZSAqeGNoLCBjaGFyICpuYW1lLCB1aW50MzJf dCB0aW1lb3V0KTsKKyAgICB1bnNpZ25lZCBpbnQgZXhlY3V0ZWQ7IC8qIEhhcyB0aGUgZnVuY3Rp b24gYmVlbiBjYWxsZWQ/LiAqLworfSBhY3Rpb25fb3B0aW9uc1tdID0geworICAgIHsgICAuYWxs b3cgPSBYU1BMSUNFX1NUQVRFX0NIRUNLRUQsCisgICAgICAgIC5leHBlY3RlZCA9IFhTUExJQ0Vf U1RBVEVfQVBQTElFRCwKKyAgICAgICAgLm5hbWUgPSAiYXBwbHkiLAorICAgICAgICAuZnVuY3Rp b24gPSB4Y194c3BsaWNlX2FwcGx5LAorICAgIH0sCisgICAgeyAgIC5hbGxvdyA9IFhTUExJQ0Vf U1RBVEVfQVBQTElFRCwKKyAgICAgICAgLmV4cGVjdGVkID0gWFNQTElDRV9TVEFURV9DSEVDS0VE LAorICAgICAgICAubmFtZSA9ICJyZXZlcnQiLAorICAgICAgICAuZnVuY3Rpb24gPSB4Y194c3Bs aWNlX3JldmVydCwKKyAgICB9LAorICAgIHsgICAuYWxsb3cgPSBYU1BMSUNFX1NUQVRFX0NIRUNL RUQsCisgICAgICAgIC5leHBlY3RlZCA9IC1FTk9FTlQsCisgICAgICAgIC5uYW1lID0gInVubG9h ZCIsCisgICAgICAgIC5mdW5jdGlvbiA9IHhjX3hzcGxpY2VfdW5sb2FkLAorICAgIH0sCisgICAg eyAgIC5hbGxvdyA9IFhTUExJQ0VfU1RBVEVfQ0hFQ0tFRCwKKyAgICAgICAgLmV4cGVjdGVkID0g WFNQTElDRV9TVEFURV9BUFBMSUVELAorICAgICAgICAubmFtZSA9ICJyZXBsYWNlIiwKKyAgICAg ICAgLmZ1bmN0aW9uID0geGNfeHNwbGljZV9yZXBsYWNlLAorICAgIH0sCit9OworCisvKiBHbyBh cm91bmQgMzAwICogMC4xIHNlY29uZHMgPSAzMCBzZWNvbmRzLiAqLworI2RlZmluZSBSRVRSSUVT IDMwMAorLyogYWthIDAuMSBzZWNvbmQgKi8KKyNkZWZpbmUgREVMQVkgMTAwMDAwCisKK2ludCBh Y3Rpb25fZnVuYyhpbnQgYXJnYywgY2hhciAqYXJndltdLCB1bnNpZ25lZCBpbnQgaWR4KQorewor ICAgIGNoYXIgbmFtZVtYRU5fWFNQTElDRV9OQU1FX1NJWkVdOworICAgIGludCByYywgb3JpZ2lu YWxfc3RhdGU7CisgICAgeGVuX3hzcGxpY2Vfc3RhdHVzX3Qgc3RhdHVzOworICAgIHVuc2lnbmVk IGludCByZXRyeSA9IDA7CisKKyAgICBpZiAoIGFyZ2MgIT0gMSApCisgICAgeworICAgICAgICBz aG93X2hlbHAoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICggaWR4ID49 IEFSUkFZX1NJWkUoYWN0aW9uX29wdGlvbnMpICkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAg aWYgKCBnZXRfbmFtZShhcmdjLCBhcmd2LCBuYW1lKSApCisgICAgICAgIHJldHVybiBFSU5WQUw7 CisKKyAgICAvKiBDaGVjayBpbml0aWFsIHN0YXR1cy4gKi8KKyAgICByYyA9IHhjX3hzcGxpY2Vf Z2V0KHhjaCwgbmFtZSwgJnN0YXR1cyk7CisgICAgaWYgKCByYyApCisgICAgeworICAgICAgICBm cHJpbnRmKHN0ZGVyciwgIiVzIGZhaWxlZCB0byBnZXQgc3RhdHVzIChyYz0lZCwgJXMpIVxuIiwK KyAgICAgICAgICAgICAgICBuYW1lLCAtcmMsIHN0cmVycm9yKC1yYykpOworICAgICAgICByZXR1 cm4gLTE7CisgICAgfQorICAgIGlmICggc3RhdHVzLnJjID09IC1FQUdBSU4gKQorICAgIHsKKyAg ICAgICAgZnByaW50ZihzdGRlcnIsICIlcyBmYWlsZWQuIE9wZXJhdGlvbiBhbHJlYWR5IGluIHBy b2dyZXNzXG4iLCBuYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICgg c3RhdHVzLnN0YXRlID09IGFjdGlvbl9vcHRpb25zW2lkeF0uZXhwZWN0ZWQgKQorICAgIHsKKyAg ICAgICAgcHJpbnRmKCJObyBhY3Rpb24gbmVlZGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg ICAgfQorCisgICAgLyogUGVyZm9ybSBhY3Rpb24uICovCisgICAgaWYgKCBhY3Rpb25fb3B0aW9u c1tpZHhdLmFsbG93ICYgc3RhdHVzLnN0YXRlICkKKyAgICB7CisgICAgICAgIHByaW50ZigiUGVy Zm9ybWluZyAlczoiLCBhY3Rpb25fb3B0aW9uc1tpZHhdLm5hbWUpOworICAgICAgICByYyA9IGFj dGlvbl9vcHRpb25zW2lkeF0uZnVuY3Rpb24oeGNoLCBuYW1lLCAwKTsKKyAgICAgICAgaWYgKCBy YyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgZmFpbGVkIHdp dGggJWQoJXMpXG4iLCBuYW1lLCAtcmMsIHN0cmVycm9yKC1yYykpOworICAgICAgICAgICAgcmV0 dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHByaW50 ZigiJXM6IGluIHdyb25nIHN0YXRlICglcyksIGV4cGVjdGVkICglcylcbiIsCisgICAgICAgICAg ICAgICBuYW1lLCBzdGF0ZTJzdHIoc3RhdHVzLnN0YXRlKSwKKyAgICAgICAgICAgICAgIHN0YXRl MnN0cihhY3Rpb25fb3B0aW9uc1tpZHhdLmV4cGVjdGVkKSk7CisgICAgICAgIHJldHVybiAtMTsK KyAgICB9CisKKyAgICBvcmlnaW5hbF9zdGF0ZSA9IHN0YXR1cy5zdGF0ZTsKKyAgICBkbyB7Cisg ICAgICAgIHJjID0geGNfeHNwbGljZV9nZXQoeGNoLCBuYW1lLCAmc3RhdHVzKTsKKyAgICAgICAg aWYgKCByYyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJjID0gLWVycm5vOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHN0YXR1cy5zdGF0ZSAhPSBvcmln aW5hbF9zdGF0ZSApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCBzdGF0dXMucmMg JiYgc3RhdHVzLnJjICE9IC1FQUdBSU4gKQorICAgICAgICB7CisgICAgICAgICAgICByYyA9IHN0 YXR1cy5yYzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcHJpbnRm KCIuIik7CisgICAgICAgIGZmbHVzaChzdGRvdXQpOworICAgICAgICB1c2xlZXAoREVMQVkpOwor ICAgIH0gd2hpbGUgKCArK3JldHJ5IDwgUkVUUklFUyApOworCisgICAgaWYgKCByZXRyeSA+PSBS RVRSSUVTICkKKyAgICB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IE9wZXJhdGlvbiBk aWRuJ3QgY29tcGxldGUgYWZ0ZXIgMzAgc2Vjb25kcy5cbiIsIG5hbWUpOworICAgICAgICByZXR1 cm4gLTE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICggcmMgPT0gMCApCisg ICAgICAgICAgICByYyA9IHN0YXR1cy5zdGF0ZTsKKworICAgICAgICBpZiAoIGFjdGlvbl9vcHRp b25zW2lkeF0uZXhwZWN0ZWQgPT0gcmMgKQorICAgICAgICAgICAgcHJpbnRmKCIgY29tcGxldGVk XG4iKTsKKyAgICAgICAgZWxzZSBpZiAoIHJjIDwgMCApCisgICAgICAgIHsKKyAgICAgICAgICAg IGZwcmludGYoc3RkZXJyLCAiJXMgZmFpbGVkIHdpdGggJWQoJXMpXG4iLCBuYW1lLCAtcmMsIHN0 cmVycm9yKC1yYykpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAg IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogaW4gd3Jv bmcgc3RhdGUgKCVzKSwgZXhwZWN0ZWQgKCVzKVxuIiwKKyAgICAgICAgICAgICAgIG5hbWUsIHN0 YXRlMnN0cihyYyksCisgICAgICAgICAgICAgICBzdGF0ZTJzdHIoYWN0aW9uX29wdGlvbnNbaWR4 XS5leHBlY3RlZCkpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQor CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG9hZF9mdW5jKGludCBhcmdjLCBjaGFy ICphcmd2W10pCit7CisgICAgaW50IHJjOworICAgIGNoYXIgKm5ld19hcmd2WzJdOworICAgIGNo YXIgKnBhdGgsICpuYW1lLCAqbGFzdGRvdDsKKworICAgIGlmICggYXJnYyAhPSAxICkKKyAgICB7 CisgICAgICAgIHNob3dfaGVscCgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIC8q IDxmaWxlPiAqLworICAgIG5ld19hcmd2WzFdID0gYXJndlswXTsKKworICAgIC8qIFN5bnRoZXNp emUgdGhlIDxpZD4gKi8KKyAgICBwYXRoID0gc3RyZHVwKGFyZ3ZbMF0pOworCisgICAgbmFtZSA9 IGJhc2VuYW1lKHBhdGgpOworICAgIGxhc3Rkb3QgPSBzdHJyY2hyKG5hbWUsICcuJyk7CisgICAg aWYgKCBsYXN0ZG90ICE9IE5VTEwgKQorICAgICAgICAqbGFzdGRvdCA9ICdcMCc7CisgICAgbmV3 X2FyZ3ZbMF0gPSBuYW1lOworCisgICAgcmMgPSB1cGxvYWRfZnVuYygyIC8qIDxpZD4gPGZpbGU+ ICovLCBuZXdfYXJndik7CisgICAgaWYgKCByYyApCisgICAgICAgIHJldHVybiByYzsKKworICAg IHJjID0gYWN0aW9uX2Z1bmMoMSAvKiBvbmx5IDxpZD4gKi8sIG5ld19hcmd2LCBBQ1RJT05fQVBQ TFkpOworICAgIGlmICggcmMgKQorICAgICAgICBhY3Rpb25fZnVuYygxLCBuZXdfYXJndiwgQUNU SU9OX1VOTE9BRCk7CisKKyAgICBmcmVlKHBhdGgpOworICAgIHJldHVybiByYzsKK30KKworLyoK KyAqIFRoZXNlIGFyZSBhbHNvIGZ1bmN0aW9ucyBpbiBhY3Rpb25fb3B0aW9ucyB0aGF0IGFyZSBj YWxsZWQgaW4gY2FzZQorICogbm9uZSBvZiB0aGUgb25lcyBpbiBtYWluX29wdGlvbnMgbWF0Y2gu CisgKi8KK3N0cnVjdCB7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBpbnQgKCpmdW5jdGlv bikoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Cit9IG1haW5fb3B0aW9uc1tdID0geworICAgIHsg ImhlbHAiLCBoZWxwX2Z1bmMgfSwKKyAgICB7ICJsaXN0IiwgbGlzdF9mdW5jIH0sCisgICAgeyAi dXBsb2FkIiwgdXBsb2FkX2Z1bmMgfSwKKyAgICB7ICJsb2FkIiwgbG9hZF9mdW5jIH0sCit9Owor CitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGludCBpLCBqLCByZXQ7 CisKKyAgICBpZiAoIGFyZ2MgIDw9IDEgKQorICAgIHsKKyAgICAgICAgc2hvd19oZWxwKCk7Cisg ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBmb3IgKCBpID0gMDsgaSA8IEFSUkFZX1NJWkUo bWFpbl9vcHRpb25zKTsgaSsrICkKKyAgICAgICAgaWYgKCFzdHJuY21wKG1haW5fb3B0aW9uc1tp XS5uYW1lLCBhcmd2WzFdLCBzdHJsZW4oYXJndlsxXSkpKQorICAgICAgICAgICAgYnJlYWs7CisK KyAgICBpZiAoIGkgPT0gQVJSQVlfU0laRShtYWluX29wdGlvbnMpICkKKyAgICB7CisgICAgICAg IGZvciAoIGogPSAwOyBqIDwgQVJSQVlfU0laRShhY3Rpb25fb3B0aW9ucyk7IGorKyApCisgICAg ICAgICAgICBpZiAoIXN0cm5jbXAoYWN0aW9uX29wdGlvbnNbal0ubmFtZSwgYXJndlsxXSwgc3Ry bGVuKGFyZ3ZbMV0pKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoIGog PT0gQVJSQVlfU0laRShhY3Rpb25fb3B0aW9ucykgKQorICAgICAgICB7CisgICAgICAgICAgICBm cHJpbnRmKHN0ZGVyciwgIlVucmVjb2duaXNlZCBjb21tYW5kICclcycgLS0gdHJ5ICIKKyAgICAg ICAgICAgICAgICAgICAiJ3hlbi14c3BsaWNlIGhlbHAnXG4iLCBhcmd2WzFdKTsKKyAgICAgICAg ICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGogPSBBUlJBWV9T SVpFKGFjdGlvbl9vcHRpb25zKTsKKworICAgIHhjaCA9IHhjX2ludGVyZmFjZV9vcGVuKDAsMCww KTsKKyAgICBpZiAoICF4Y2ggKQorICAgIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJmYWls ZWQgdG8gZ2V0IHRoZSBoYW5kbGVyXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg ICAgaWYgKCBpID09IEFSUkFZX1NJWkUobWFpbl9vcHRpb25zKSApCisgICAgICAgIHJldCA9IGFj dGlvbl9mdW5jKGFyZ2MgLTIsIGFyZ3YgKyAyLCBqKTsKKyAgICBlbHNlCisgICAgICAgIHJldCA9 IG1haW5fb3B0aW9uc1tpXS5mdW5jdGlvbihhcmdjIC0yLCBhcmd2ICsgMik7CisKKyAgICB4Y19p bnRlcmZhY2VfY2xvc2UoeGNoKTsKKworICAgIHJldHVybiAhIXJldDsKK30KKworLyoKKyAqIExv Y2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMt YmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5p bAorICogRW5kOgorICovCi0tIAoyLjUuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3Rz Lnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==