{
  "jsonrpc": "2.0",
  "id": "",
  "result": {
    "hash": "dik1dndb6dswqwl5RJkOnFg20A5SqEuXnTKEt3B/gtk=",
    "height": "585791",
    "index": 0,
    "tx_result": {
      "ResponseBase": {
        "Error": null,
        "Data": null,
        "Events": [
          {
            "@type": "/tm.StorageDepositEvent",
            "bytes_delta": "35356",
            "fee_delta": "3535600ugnot",
            "pkg_path": "gno.land/r/g1ut6uspuh73e02yauxpmyt8g3wwddaq8utagvm3/market"
          }
        ],
        "Log": "msg:0,success:true,log:,events:[]",
        "Info": ""
      },
      "GasWanted": "52475172",
      "GasUsed": "34983448"
    },
    "tx": "CraSAQoML3ZtLm1fYWRkcGtnEqSSAQooZzF1dDZ1c3B1aDczZTAyeWF1eHBteXQ4ZzN3d2RkYXE4dXRhZ3ZtMxLnkQEKBm1hcmtldBI6Z25vLmxhbmQvci9nMXV0NnVzcHVoNzNlMDJ5YXV4cG15dDhnM3d3ZGRhcTh1dGFndm0zL21hcmtldBphCgtnbm9tb2QudG9tbBJSCm1vZHVsZSA9ICJnbm8ubGFuZC9yL2cxdXQ2dXNwdWg3M2UwMnlhdXhwbXl0OGczd3dkZGFxOHV0YWd2bTMvbWFya2V0Igpnbm8gPSAiMC45Ihq8kAEKCm1hcmtldC5nbm8SrJABLy8gUmVhbG0gbWFya2V0IGlzIGEgY3VzdG9kaWFsIEdOT1QgbWFya2V0cGxhY2UgZm9yIGdvb2RzIGxpc3RpbmdzOgovLyBzZWxsZXJzIGxpc3QgKHRpdGxlLCBkZXNjcmlwdGlvbiwgcHJpY2UpLCBhIGJ1eWVyIHB1cmNoYXNlcyBieQovLyBwYXlpbmcgdGhlIGV4YWN0IHByaWNlLCB0aGUgbWFya2V0cGxhY2UgaG9sZHMgdGhlIHZhbHVlIHVudGlsIHRoZQovLyBzZWxsZXIgY2xhaW1zIHRoZWlyIHByb2NlZWRzIChwcmljZSBtaW51cyBhIHRyYW5zcGFyZW50LCBzbmFwc2hvdHRlZAovLyBwcm90b2NvbCBmZWUpLgovLwovLyBDT01QT1NJVElPTiAocGVyIHRoZSByZWNvcmRlZCBESVNDT1ZFUlkgLyBSRVVTRSBBTkFMWVNJUyk6IGJhbGFuY2UKLy8gYWNjb3VudGluZyBpcyBmZWVsZWRnZXIsIGNvaW4gbW92ZW1lbnQgaXMgY29pbmlvLCBmcmVlLXRleHQgcmVuZGVyCi8vIHNhZmV0eSBpcyB0aGUgZWNvc3lzdGVtIHNhbml0aXplciBwL250L21hcmtkb3duL3Nhbml0aXplL3YwLiBUaGlzCi8vIHJlYWxtIG93bnMgb25seSB0aGUgbGlzdGluZyBzdGF0ZSBtYWNoaW5lLiBUd28gcGF0dGVybnMgYXJlIGFkb3B0ZWQKLy8gZnJvbSBpbnNwZWN0ZWQgZWNvc3lzdGVtIG1hcmtldHBsYWNlczogbm9uLXBheWFibGUgZW50cnlwb2ludHMKLy8gUkVGVVNFIGFjY2lkZW50YWwgLXNlbmQgaW5zdGVhZCBvZiBzdHJhbmRpbmcgaXQgYXMgc3VycGx1cwovLyAobnNtYXJrZXQvdjQncyBhc3NlcnROb1NlbmQpLCBhbmQgYWRtaW4gaGFuZG9mZiBpcyAyLVNURVAKLy8gKG1lbWJhX2FwcHN0b3JlX3YyJ3MgVHJhbnNmZXJPd25lcnNoaXAvQWNjZXB0T3duZXJzaGlwKSwgY2xvc2luZyB0aGUKLy8gb25lLXN0ZXAtdHJhbnNmZXIgdHJhZGUtb2ZmIGNhcnJpZWQgYnkgZWFybGllciByZWFsbXMuCi8vCi8vIExJRkVDWUNMRSAodGVybWluYWwgc3RhdGVzIGFyZSBmcm96ZW47IG9uZSB0cmFuc2l0aW9uIHBlciBsaXN0aW5nKToKLy8KLy8JQ3JlYXRlTGlzdGluZyAoYW55b25lLCBubyBjb2lucykgOiBzdGF0dXMgQWN0aXZlOyB0aGUgZmVlIGJwcyBpcwovLwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOQVBTSE9UVEVELCBzdWJqZWN0IHRvIHRoZQovLwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGxlcidzIG93biBtYXhGZWVCcHMgY2VpbGluZwovLwlCdXkgKEVPQSArIC1zZW5kID09IHByaWNlKSAgICAgICA6IEFjdGl2ZSAtPiBTb2xkLCBhdG9taWNhbGx5OgovLwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2NlZWRzIChwcmljZSAtIHNuYXBzaG90IGZlZSkKLy8JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVkaXQgdGhlIHNlbGxlcidzIGNsYWltYWJsZQovLwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhbGFuY2UsIHRoZSBmZWUgYWNjcnVlcyB0byB0aGUKLy8JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3QsIHRoZSBidXllciBpcyByZWNvcmRlZAovLwlDYW5jZWxMaXN0aW5nIChzZWxsZXIgb25seSkgICAgICA6IEFjdGl2ZSAtPiBDYW5jZWxsZWQgKG5vIGZ1bmRzCi8vCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGludm9sdmVkOyBsaXN0aW5ncyBob2xkIG5vCi8vCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUpCi8vCUNsYWltIC8gQ2xhaW1BbGwgKGFueW9uZSkgICAgICAgIDogcGF5cyBvdXQgdGhlIGNhbGxlcidzIG93bgovLwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYWltYWJsZSBwcm9jZWVkcwovLwlXaXRoZHJhd0ZlZXMgKGZlZSByZWNpcGllbnQpICAgICA6IHBheXMgb3V0IHRoZSBmZWUgcG90Ci8vCi8vIExJU1RJTkdTIEFSRSBJTU1VVEFCTEU6IHRoZXJlIGlzIG5vIHByaWNlIHVwZGF0ZSDigJQgY2FuY2VsIGFuZCByZWxpc3QKLy8gKG5ldyBpZCkuIFRvZ2V0aGVyIHdpdGggQnV5J3MgRVhBQ1QtZW52ZWxvcGUgcnVsZSB0aGlzIGNsb3NlcyB0aGUKLy8gbGlzdGluZy1tYW5pcHVsYXRpb24gcmFjZSB0d2ljZSBvdmVyOiBhIGNhbmNlbGxlZC9yZWxpc3RlZCBsaXN0aW5nCi8vIGZhaWxzIEJ1eSdzIHN0YXR1cyBjaGVjaywgYW5kIGFueSBwcmljZSBjaGFuZ2UgZmFpbHMgdGhlIGVudmVsb3BlCi8vIGNoZWNrIOKAlCBlaXRoZXIgd2F5IHRoZSBidXllcidzIGNvaW5zIHJldmVydCB3aXRoIHRoZSB0cmFuc2FjdGlvbi4KLy8gQnV5ZXJzIGFyZSBzdHJ1Y3R1cmFsbHkgaW5kaWZmZXJlbnQgdG8gZmVlIGNoYW5nZXM6IHRoZXkgcGF5IHRoZQovLyBsaXN0ZWQgcHJpY2U7IHRoZSBmZWUgY29tZXMgb3V0IG9mIHRoZSBzZWxsZXIncyBwcm9jZWVkcyBhdCB0aGUgYnBzCi8vIHNuYXBzaG90dGVkIHdoZW4gdGhlIFNFTExFUiBsaXN0ZWQgKHdpdGggdGhlIHNlbGxlcidzIG93biBjZWlsaW5nIOKAlAovLyB0aGUgY3JlYXRpb24tdGltZSBmZWUgcmFjZSBpcyBjbG9zZWQgdGhlIHNhbWUgd2F5IGdyYW50cyBjbG9zZXMgaXQpLgovLwovLyBBVVRIT1JJWkFUSU9OOiBldmVyeSBpZGVudGl0eSBkZXJpdmVzIGZyb20gdGhlIGNyb3NzaW5nIGVudHJ5cG9pbnQncwovLyBjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCk7IG5vIGZ1bmN0aW9uIHRha2VzIGEgY2FsbGVyIGlkZW50aXR5IGFzIGEKLy8gcGFyYW1ldGVyLiBTZWxsZXJzIG1heSBiZSBFT0FzIG9yIHJlYWxtcyAodGhleSBjbGFpbSB1bmRlciB0aGVpciBvd24KLy8gYWRkcmVzcyk7IGJ1eWVycyBtdXN0IGJlIEVPQXMgKGNvaW5pby5SZWNlaXZlIGlzIHRoZQovLyByZWNlaXB0LWd1YXJhbnRlZWQgc2hhcGUpLiBTZWxmLXB1cmNoYXNlIGlzIHJlamVjdGVkLgovLwovLyBSRUFMTS1TRUxMRVIgQ0FWRUFUIChhdWRpdCBZMSk6IGFzc2VydE5vU2VuZCByZWFkcyB0aGUgT1JJR0lOCi8vIHRyYW5zYWN0aW9uJ3Mgc2VuZCBlbnZlbG9wZSwgc28gYSByZWFsbSBzZWxsZXIgbXVzdCBjYWxsCi8vIENyZWF0ZUxpc3RpbmcvQ2FuY2VsTGlzdGluZy9DbGFpbSogaW4gYSB0cmFuc2FjdGlvbiB3aG9zZSBvcmlnaW4KLy8gY2FycmllZCBubyAtc2VuZCDigJQgb3RoZXJ3aXNlIHRoZSBndWFyZCBmYWlscyBjbG9zZWQgZXZlbiB0aG91Z2ggdGhpcwovLyByZWFsbSByZWNlaXZlZCBub3RoaW5nLiBOb3QgdGhpcmQtcGFydHkgdHJpZ2dlcmFibGUgKG5vYm9keSBjYW4KLy8gYXR0YWNoIGEgc2VuZCB0byBzb21lb25lIGVsc2UncyB0cmFuc2FjdGlvbik7IHRoZSB3b3JrYXJvdW5kIGlzIGEKLy8gc2VwYXJhdGUgdHJhbnNhY3Rpb24uCi8vCi8vIE1PTkVUQVJZIElOVkFSSUFOVCAoY29uc2VydmF0aW9uKTogbGlzdGluZ3MgaG9sZCBOTyB2YWx1ZSwgc28gd2l0aAovLyBIID0gdWdub3QgaGVsZCBhdCB0aGUgcmVhbG0gYWRkcmVzcywgVSA9IGNsYWltYWJsZSBzZWxsZXIgcHJvY2VlZHMsCi8vIEYgPSB0aGUgZmVlIHBvdCwgUyA+PSAwIG91dC1vZi1iYW5kIHN1cnBsdXM6Ci8vCi8vCUggPT0gVSArIEYgKyBTCi8vCi8vIEJ1eSByYWlzZXMgSCBieSBleGFjdGx5IHByaWNlIGFuZCBVK0YgYnkgZXhhY3RseSBwcmljZSAoZmVlbGVkZ2VyCi8vIGd1YXJhbnRlZXMgY3JlZGl0ZWQgKyBmZWUgPT0gYW1vdW50KTsgQ2xhaW0qL1dpdGhkcmF3RmVlcyBkZWJpdCB0aGUKLy8gbGVkZ2VyIGJlZm9yZSBjb2luaW8uUGF5b3V0IG1vdmVzIHRoZSBpZGVudGljYWwgYW1vdW50IG91dDsgYW55Ci8vIHBhbmljIGFib3J0cyB0aGUgd2hvbGUgdHJhbnNhY3Rpb247IHRoaXMgcmVhbG0gbmV2ZXIgaXNzdWVzIG9yCi8vIHJlbW92ZXMgY29pbnMuIFN1cnBsdXMgaXMgcmVjb3ZlcmFibGUgb25seSB2aWEgU3dlZXBEZW5vbSAoZmVlCi8vIHJlY2lwaWVudCksIHdoaWNoIHJlc2VydmVzIExpYWJpbGl0aWVzKCkgPSBVICsgRi4KLy8KLy8gQVBQTElDQVRJT04gSU5WQVJJQU5UOiBzdGF0dXMgdHJhbnNpdGlvbnMgQWN0aXZlIC0+IHtTb2xkLAovLyBDYW5jZWxsZWR9IGV4YWN0bHkgb25jZTsgU29sZCBpZiBhbmQgb25seSBpZiBhIGJ1eWVyIGlzIHJlY29yZGVkOwovLyBmb3IgZXZlcnkgc29sZCBsaXN0aW5nLCBwcm9jZWVkcyArIGZlZSA9PSBwcmljZSBhdCB0aGUgc25hcHNob3R0ZWQKLy8gYnBzLgpwYWNrYWdlIG1hcmtldAoKaW1wb3J0ICgKCSJjaGFpbiIKCSJjaGFpbi9ydW50aW1lL3Vuc2FmZSIKCSJzdHJjb252IgoKCSJnbm8ubGFuZC9wL2cxdXQ2dXNwdWg3M2UwMnlhdXhwbXl0OGczd3dkZGFxOHV0YWd2bTMvY29pbmlvIgoJImduby5sYW5kL3AvZzF1dDZ1c3B1aDczZTAyeWF1eHBteXQ4ZzN3d2RkYXE4dXRhZ3ZtMy9mZWVsZWRnZXIiCgkiZ25vLmxhbmQvcC9udC9hdmwvdjAiCgkiZ25vLmxhbmQvcC9udC9tYXJrZG93bi9zYW5pdGl6ZS92MCIKKQoKLy8gRGVub20gaXMgdGhlIG9ubHkgYXNzZXQgdGhpcyByZWFsbSBhY2NlcHRzLgpjb25zdCBEZW5vbSA9ICJ1Z25vdCIKCi8vIE1heEZlZUJwcyBpcyB0aGUgaGFyZCBwcm90b2NvbC1mZWUgY2FwOiAxMDAwIGJwcyA9IDEwJS4KY29uc3QgTWF4RmVlQnBzID0gaW50NjQoMTAwMCkKCi8vIExpc3Rpbmcgc3RhdHVzIHZhbHVlcy4KY29uc3QgKAoJU3RhdHVzQWN0aXZlICAgID0gImFjdGl2ZSIKCVN0YXR1c1NvbGQgICAgICA9ICJzb2xkIgoJU3RhdHVzQ2FuY2VsbGVkID0gImNhbmNlbGxlZCIKKQoKLy8gSW5wdXQgYm91bmRzLgpjb25zdCAoCglNYXhUaXRsZUxlbiA9IDgwCglNYXhEZXNjTGVuICA9IDIwMDAKCU1pblByaWNlICAgID0gaW50NjQoMSkKKQoKdHlwZSBsaXN0aW5nIHN0cnVjdCB7CglpZCAgICAgICAgICBpbnQ2NAoJc2VsbGVyICAgICAgYWRkcmVzcwoJdGl0bGUgICAgICAgc3RyaW5nCglkZXNjcmlwdGlvbiBzdHJpbmcKCXByaWNlICAgICAgIGludDY0CglmZWVCcHMgICAgICBpbnQ2NCAvLyBzbmFwc2hvdHRlZCBhdCBjcmVhdGlvbiwgY2hhcmdlZCBhdCBCdXkKCXN0YXR1cyAgICAgIHN0cmluZwoJYnV5ZXIgICAgICAgYWRkcmVzcyAvLyBzZXQgaWZmIHN0YXR1cyA9PSBTdGF0dXNTb2xkCn0KCnZhciAoCglhZG1pbiAgICAgICAgYWRkcmVzcyAvLyBtYXkgc2V0IGZlZSwgZmVlIHJlY2lwaWVudCwgc3RhZ2Ugc3VjY2Vzc29yCglwZW5kaW5nQWRtaW4gYWRkcmVzcyAvLyBzdGFnZWQgYnkgVHJhbnNmZXJBZG1pbiwgY29tcGxldGVzIHZpYSBBY2NlcHRBZG1pbgoJZmVlUmVjaXBpZW50IGFkZHJlc3MgLy8gbWF5IHdpdGhkcmF3IGZlZXMgYW5kIHN3ZWVwIHN1cnBsdXMKCWZlZUJwcyAgICAgICBpbnQ2NCAgIC8vIGZlZSBzbmFwc2hvdHRlZCBpbnRvIE5FVyBsaXN0aW5ncwoKCXNlbGYgICBhZGRyZXNzIC8vIHRoaXMgcmVhbG0ncyBhZGRyZXNzLCBjYXB0dXJlZCBhdCBkZXBsb3kKCW5leHRJRCBpbnQ2NAoKCWxpc3RpbmdzID0gYXZsLk5ld1RyZWUoKSAvLyBwYWRJRChpZCkgLT4gKmxpc3RpbmcKCWxlZGdlciAgID0gZmVlbGVkZ2VyLk11c3ROZXcoTWF4RmVlQnBzKQopCgpmdW5jIGluaXQoKSB7CglhZG1pbiA9IHVuc2FmZS5PcmlnaW5DYWxsZXIoKQoJZmVlUmVjaXBpZW50ID0gYWRtaW4KCXNlbGYgPSB1bnNhZmUuQ3VycmVudFJlYWxtKCkuQWRkcmVzcygpCn0KCi8vIENyZWF0ZUxpc3RpbmcgcHVibGlzaGVzIGFuIGltbXV0YWJsZSBsaXN0aW5nIGFuZCByZXR1cm5zIGl0cyBpZC4gTm8KLy8gY29pbnMgYXJlIGFjY2VwdGVkICh0aGUgc3RvcmFnZSBkZXBvc2l0IHRoZSBjYWxsZXIgcGF5cyBpcyB0aGUKLy8gYW50aS1zcGFtKS4gVGhlIGN1cnJlbnQgcHJvdG9jb2wgZmVlIGlzIHNuYXBzaG90dGVkIGludG8gdGhlIGxpc3RpbmcKLy8gYW5kIG11c3Qgbm90IGV4Y2VlZCBtYXhGZWVCcHMsIHRoZSBjZWlsaW5nIHRoZSBzZWxsZXIgc2lnbmVkIGZvcjsKLy8gcGFzcyBNYXhGZWVCcHMgdG8gYWNjZXB0IGFueSBsZWdhbCBmZWUuIFNlbGxlcnMgbWF5IGJlIEVPQXMgb3IKLy8gcmVhbG1zLgpmdW5jIENyZWF0ZUxpc3RpbmcoY3VyIHJlYWxtLCB0aXRsZSwgZGVzY3JpcHRpb24gc3RyaW5nLCBwcmljZSwgbWF4RmVlQnBzIGludDY0KSBpbnQ2NCB7Cglhc3NlcnROb1NlbmQoKQoJc2VsbGVyIDo9IGN1ci5QcmV2aW91cygpLkFkZHJlc3MoKQoJaWYgZmVlQnBzID4gbWF4RmVlQnBzIHsKCQlwYW5pYygiY3VycmVudCBmZWUgIiArIGl0b2EoZmVlQnBzKSArICIgYnBzIGV4Y2VlZHMgdGhlIHNlbGxlcidzIG1heGltdW0gIiArIGl0b2EobWF4RmVlQnBzKSkKCX0KCWFzc2VydFZhbGlkVGl0bGUodGl0bGUpCglpZiBsZW4oZGVzY3JpcHRpb24pID09IDAgfHwgbGVuKGRlc2NyaXB0aW9uKSA+IE1heERlc2NMZW4gewoJCXBhbmljKCJkZXNjcmlwdGlvbiBtdXN0IGJlIDEtIiArIHN0cmNvbnYuSXRvYShNYXhEZXNjTGVuKSArICIgYnl0ZXMiKQoJfQoJaWYgcHJpY2UgPCBNaW5QcmljZSB7CgkJcGFuaWMoInByaWNlIG11c3QgYmUgYXQgbGVhc3QgIiArIGl0b2EoTWluUHJpY2UpICsgRGVub20pCgl9CgoJbmV4dElEKysKCWwgOj0gJmxpc3Rpbmd7CgkJaWQ6ICAgICAgICAgIG5leHRJRCwKCQlzZWxsZXI6ICAgICAgc2VsbGVyLAoJCXRpdGxlOiAgICAgICB0aXRsZSwKCQlkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sCgkJcHJpY2U6ICAgICAgIHByaWNlLAoJCWZlZUJwczogICAgICBmZWVCcHMsCgkJc3RhdHVzOiAgICAgIFN0YXR1c0FjdGl2ZSwKCX0KCWxpc3RpbmdzLlNldChwYWRJRChsLmlkKSwgbCkKCgljaGFpbi5FbWl0KCJMaXN0aW5nQ3JlYXRlZCIsCgkJImlkIiwgaXRvYShsLmlkKSwKCQkic2VsbGVyIiwgc2VsbGVyLlN0cmluZygpLAoJCSJwcmljZSIsIGl0b2EocHJpY2UpLAoJCSJmZWVCcHMiLCBpdG9hKGwuZmVlQnBzKSwKCSkKCXJldHVybiBsLmlkCn0KCi8vIEJ1eSBwdXJjaGFzZXMgYW4gYWN0aXZlIGxpc3RpbmcuIFRoZSBidXllciBtdXN0IGJlIGEgZGlyZWN0IEVPQQovLyBjYWxsZXIgYW5kIGF0dGFjaCBFWEFDVExZIHRoZSBsaXN0ZWQgcHJpY2UgaW4gdWdub3Qg4oCUIGFueSBtaXNtYXRjaAovLyAoaW5jbHVkaW5nIGEgcHJpY2UgdGhlIHNlbGxlciBjaGFuZ2VkIGJ5IGNhbmNlbC1hbmQtcmVsaXN0KSBhYm9ydHMKLy8gYW5kIHRoZSBjb2lucyByZXZlcnQgd2l0aCB0aGUgdHJhbnNhY3Rpb24uIFNldHRsZW1lbnQgaXMgYXRvbWljOgovLyB0aGUgc2VsbGVyJ3MgcHJvY2VlZHMgKHByaWNlIG1pbnVzIHRoZSBzbmFwc2hvdHRlZCBmZWUpIGJlY29tZQovLyBjbGFpbWFibGUsIHRoZSBmZWUgYWNjcnVlcyB0byB0aGUgcG90LCBhbmQgdGhlIGJ1eWVyIGlzIHJlY29yZGVkLgovLyBUZXJtaW5hbC4KZnVuYyBCdXkoY3VyIHJlYWxtLCBpZCBpbnQ2NCkgewoJYnV5ZXIsIGFtb3VudCA6PSBjb2luaW8uUmVjZWl2ZSgwLCBjdXIsIERlbm9tKQoJbCA6PSBtdXN0R2V0TGlzdGluZyhpZCkKCWlmIGwuc3RhdHVzICE9IFN0YXR1c0FjdGl2ZSB7CgkJcGFuaWMoImxpc3RpbmcgaXMgbm90IGFjdGl2ZSIpCgl9CglpZiBidXllciA9PSBsLnNlbGxlciB7CgkJcGFuaWMoInRoZSBzZWxsZXIgY2Fubm90IGJ1eSB0aGVpciBvd24gbGlzdGluZyIpCgl9CglpZiBhbW91bnQgIT0gbC5wcmljZSB7CgkJcGFuaWMoInNlbmQgZXhhY3RseSB0aGUgbGlzdGVkIHByaWNlOiAiICsgaXRvYShsLnByaWNlKSArIERlbm9tKQoJfQoKCS8vIE1vdmUgdGhlIHB1cmNoYXNlIGludG8gbGVkZ2VyIGxpYWJpbGl0aWVzIGluIG9uZSB0cmFuc2FjdGlvbiwgYXQKCS8vIHRoZSBmZWUgc25hcHNob3R0ZWQgd2hlbiB0aGUgc2VsbGVyIGxpc3RlZC4gZmVlbGVkZ2VyIHZhbGlkYXRlcwoJLy8gYmVmb3JlIG11dGF0aW5nOyBhbiBlcnJvciBhYm9ydHMgZXZlcnl0aGluZyBhbmQgdGhlIGxpc3RpbmcKCS8vIHN0YXlzIEFjdGl2ZS4KCXByb2NlZWRzLCBmZWUsIGVyciA6PSBsZWRnZXIuRGVwb3NpdChsLnNlbGxlci5TdHJpbmcoKSwgbC5wcmljZSwgbC5mZWVCcHMpCglpZiBlcnIgIT0gbmlsIHsKCQlwYW5pYyhlcnIpCgl9CglsLnN0YXR1cyA9IFN0YXR1c1NvbGQKCWwuYnV5ZXIgPSBidXllcgoKCWNoYWluLkVtaXQoIlNvbGQiLAoJCSJpZCIsIGl0b2EoaWQpLAoJCSJzZWxsZXIiLCBsLnNlbGxlci5TdHJpbmcoKSwKCQkiYnV5ZXIiLCBidXllci5TdHJpbmcoKSwKCQkicHJpY2UiLCBpdG9hKGwucHJpY2UpLAoJCSJwcm9jZWVkcyIsIGl0b2EocHJvY2VlZHMpLAoJCSJmZWUiLCBpdG9hKGZlZSksCgkpCn0KCi8vIENhbmNlbExpc3Rpbmcgd2l0aGRyYXdzIGFuIGFjdGl2ZSBsaXN0aW5nLiBPbmx5IHRoZSBzZWxsZXIgbWF5Ci8vIGNhbmNlbDsgbm8gZnVuZHMgYXJlIGludm9sdmVkLiBUZXJtaW5hbC4KZnVuYyBDYW5jZWxMaXN0aW5nKGN1ciByZWFsbSwgaWQgaW50NjQpIHsKCWFzc2VydE5vU2VuZCgpCgljYWxsZXIgOj0gY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpCglsIDo9IG11c3RHZXRMaXN0aW5nKGlkKQoJaWYgY2FsbGVyICE9IGwuc2VsbGVyIHsKCQlwYW5pYygib25seSB0aGUgc2VsbGVyIG1heSBjYW5jZWwiKQoJfQoJaWYgbC5zdGF0dXMgIT0gU3RhdHVzQWN0aXZlIHsKCQlwYW5pYygibGlzdGluZyBpcyBub3QgYWN0aXZlIikKCX0KCWwuc3RhdHVzID0gU3RhdHVzQ2FuY2VsbGVkCgoJY2hhaW4uRW1pdCgiTGlzdGluZ0NhbmNlbGxlZCIsICJpZCIsIGl0b2EoaWQpLCAic2VsbGVyIiwgbC5zZWxsZXIuU3RyaW5nKCkpCn0KCi8vIENsYWltIHNlbmRzIGFtb3VudCB1Z25vdCBvZiB0aGUgY2FsbGVyJ3MgY2xhaW1hYmxlIHByb2NlZWRzIGJhY2sgdG8KLy8gdGhlIGNhbGxlci4KZnVuYyBDbGFpbShjdXIgcmVhbG0sIGFtb3VudCBpbnQ2NCkgewoJYXNzZXJ0Tm9TZW5kKCkKCWNhbGxlciA6PSBjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkKCWlmIGVyciA6PSBsZWRnZXIuV2l0aGRyYXcoY2FsbGVyLlN0cmluZygpLCBhbW91bnQpOyBlcnIgIT0gbmlsIHsKCQlwYW5pYyhlcnIpCgl9Cgljb2luaW8uUGF5b3V0KDAsIGN1ciwgY2FsbGVyLCBEZW5vbSwgYW1vdW50KQoJY2hhaW4uRW1pdCgiQ2xhaW0iLCAidG8iLCBjYWxsZXIuU3RyaW5nKCksICJhbW91bnQiLCBpdG9hKGFtb3VudCkpCn0KCi8vIENsYWltQWxsIHNlbmRzIHRoZSBjYWxsZXIncyBlbnRpcmUgY2xhaW1hYmxlIHByb2NlZWRzIGJhY2sgdG8gdGhlCi8vIGNhbGxlci4gRmFpbHMgaWYgdGhlcmUgaXMgbm90aGluZyB0byBjbGFpbS4KZnVuYyBDbGFpbUFsbChjdXIgcmVhbG0pIHsKCWFzc2VydE5vU2VuZCgpCgljYWxsZXIgOj0gY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpCglhbW91bnQsIGVyciA6PSBsZWRnZXIuV2l0aGRyYXdBbGwoY2FsbGVyLlN0cmluZygpKQoJaWYgZXJyICE9IG5pbCB7CgkJcGFuaWMoZXJyKQoJfQoJaWYgYW1vdW50ID09IDAgewoJCXBhbmljKCJub3RoaW5nIHRvIGNsYWltIikKCX0KCWNvaW5pby5QYXlvdXQoMCwgY3VyLCBjYWxsZXIsIERlbm9tLCBhbW91bnQpCgljaGFpbi5FbWl0KCJDbGFpbSIsICJ0byIsIGNhbGxlci5TdHJpbmcoKSwgImFtb3VudCIsIGl0b2EoYW1vdW50KSkKfQoKLy8gV2l0aGRyYXdGZWVzIHNlbmRzIHRoZSBhY2NydWVkIGZlZSBwb3QgdG8gdGhlIGZlZSByZWNpcGllbnQuIE9ubHkKLy8gdGhlIGZlZSByZWNpcGllbnQgbWF5IGNhbGwgaXQuCmZ1bmMgV2l0aGRyYXdGZWVzKGN1ciByZWFsbSkgewoJYXNzZXJ0Tm9TZW5kKCkKCWNhbGxlciA6PSBjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkKCWlmIGNhbGxlciAhPSBmZWVSZWNpcGllbnQgewoJCXBhbmljKCJvbmx5IHRoZSBmZWUgcmVjaXBpZW50IG1heSB3aXRoZHJhdyBmZWVzIikKCX0KCWlmIGxlZGdlci5GZWVzQWNjcnVlZCgpID09IDAgewoJCXBhbmljKCJubyBmZWVzIGFjY3J1ZWQiKQoJfQoJYW1vdW50IDo9IGxlZGdlci5XaXRoZHJhd0ZlZXMoKQoJY29pbmlvLlBheW91dCgwLCBjdXIsIGZlZVJlY2lwaWVudCwgRGVub20sIGFtb3VudCkKCWNoYWluLkVtaXQoIkZlZXNXaXRoZHJhd24iLCAidG8iLCBmZWVSZWNpcGllbnQuU3RyaW5nKCksICJhbW91bnQiLCBpdG9hKGFtb3VudCkpCn0KCi8vIFN3ZWVwRGVub20gc2VuZHMgdGhlIHN1cnBsdXMgb2YgYSBzaW5nbGUgZGVub21pbmF0aW9uIHRvIHRoZSBmZWUKLy8gcmVjaXBpZW50LiBGb3IgdWdub3Qgb25seSB0aGUgZXhjZXNzIG92ZXIgTGlhYmlsaXRpZXMoKSBtb3Zlczsgb3RoZXIKLy8gZGVub21zIG1vdmUgd2hvbGx5LiBPbmx5IHRoZSBmZWUgcmVjaXBpZW50IG1heSBjYWxsIGl0LgpmdW5jIFN3ZWVwRGVub20oY3VyIHJlYWxtLCBkZW5vbSBzdHJpbmcpIHsKCWFzc2VydE5vU2VuZCgpCgljYWxsZXIgOj0gY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpCglpZiBjYWxsZXIgIT0gZmVlUmVjaXBpZW50IHsKCQlwYW5pYygib25seSB0aGUgZmVlIHJlY2lwaWVudCBtYXkgc3dlZXAgc3VycGx1cyIpCgl9CglyZXNlcnZlIDo9IGludDY0KDApCglpZiBkZW5vbSA9PSBEZW5vbSB7CgkJcmVzZXJ2ZSA9IExpYWJpbGl0aWVzKCkKCX0KCXN3ZXB0IDo9IGNvaW5pby5Td2VlcCgwLCBjdXIsIGZlZVJlY2lwaWVudCwgZGVub20sIHJlc2VydmUpCgljaGFpbi5FbWl0KCJTdXJwbHVzU3dlcHQiLCAidG8iLCBmZWVSZWNpcGllbnQuU3RyaW5nKCksICJjb2lucyIsIGl0b2Eoc3dlcHQpK2Rlbm9tKQp9CgovLyBTZXRGZWVCcHMgc2V0cyB0aGUgcHJvdG9jb2wgZmVlIHNuYXBzaG90dGVkIGludG8gRlVUVVJFIGxpc3RpbmdzLgovLyBFeGlzdGluZyBsaXN0aW5ncyBrZWVwIHRoZSBmZWUgdGhleSB3ZXJlIGNyZWF0ZWQgdW5kZXIuIEFkbWluIG9ubHk7Ci8vIGJvdW5kZWQgYnkgWzAsIE1heEZlZUJwc10uCmZ1bmMgU2V0RmVlQnBzKGN1ciByZWFsbSwgYnBzIGludDY0KSB7Cglhc3NlcnROb1NlbmQoKQoJYXNzZXJ0QWRtaW4oY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpKQoJaWYgYnBzIDwgMCB8fCBicHMgPiBNYXhGZWVCcHMgewoJCXBhbmljKCJmZWUgYnBzIG91dCBvZiByYW5nZSBbMCwgIiArIGl0b2EoTWF4RmVlQnBzKSArICJdIikKCX0KCW9sZCA6PSBmZWVCcHMKCWZlZUJwcyA9IGJwcwoJY2hhaW4uRW1pdCgiRmVlQnBzQ2hhbmdlZCIsICJvbGQiLCBpdG9hKG9sZCksICJuZXciLCBpdG9hKGJwcykpCn0KCi8vIFNldEZlZVJlY2lwaWVudCByZS1wb2ludHMgdGhlIGZlZS9zdXJwbHVzIHJvbGUsIGluY2x1ZGluZyB0aGUgcG90Ci8vIGFjY3J1ZWQgc28gZmFyLiBBZG1pbiBvbmx5OyB6ZXJvIGFkZHJlc3MgcmVqZWN0ZWQuCmZ1bmMgU2V0RmVlUmVjaXBpZW50KGN1ciByZWFsbSwgbmV4dCBhZGRyZXNzKSB7Cglhc3NlcnROb1NlbmQoKQoJYXNzZXJ0QWRtaW4oY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpKQoJdmFyIHplcm8gYWRkcmVzcwoJaWYgbmV4dCA9PSB6ZXJvIHsKCQlwYW5pYygiZW1wdHkgZmVlIHJlY2lwaWVudCIpCgl9CglvbGQgOj0gZmVlUmVjaXBpZW50CglmZWVSZWNpcGllbnQgPSBuZXh0CgljaGFpbi5FbWl0KCJGZWVSZWNpcGllbnRDaGFuZ2VkIiwgIm9sZCIsIG9sZC5TdHJpbmcoKSwgIm5ldyIsIG5leHQuU3RyaW5nKCkpCn0KCi8vIFRyYW5zZmVyQWRtaW4gU1RBR0VTIGEgc3VjY2Vzc29yIGFkbWluOyB0aGUgaGFuZG9mZiBjb21wbGV0ZXMgb25seQovLyB3aGVuIHRoYXQgYWRkcmVzcyBjYWxscyBBY2NlcHRBZG1pbiAoMi1zdGVwLCBzbyBhIHR5cG8gY2Fubm90IGJyaWNrCi8vIGFkbWluaXN0cmF0aW9uIOKAlCBwYXR0ZXJuIGFkb3B0ZWQgZnJvbSBtZW1iYV9hcHBzdG9yZV92MikuIEFkbWluCi8vIG9ubHk7IHplcm8gYWRkcmVzcyByZWplY3RlZC4gUmUtc3RhZ2luZyBvdmVyd3JpdGVzIGEgcHJldmlvdXMgc3RhZ2UuCmZ1bmMgVHJhbnNmZXJBZG1pbihjdXIgcmVhbG0sIG5leHQgYWRkcmVzcykgewoJYXNzZXJ0Tm9TZW5kKCkKCWFzc2VydEFkbWluKGN1ci5QcmV2aW91cygpLkFkZHJlc3MoKSkKCXZhciB6ZXJvIGFkZHJlc3MKCWlmIG5leHQgPT0gemVybyB7CgkJcGFuaWMoImVtcHR5IGFkbWluIGFkZHJlc3MiKQoJfQoJcGVuZGluZ0FkbWluID0gbmV4dAoJY2hhaW4uRW1pdCgiQWRtaW5UcmFuc2ZlclN0YWdlZCIsICJwZW5kaW5nIiwgbmV4dC5TdHJpbmcoKSkKfQoKLy8gQWNjZXB0QWRtaW4gY29tcGxldGVzIGEgc3RhZ2VkIGFkbWluIGhhbmRvZmYuIE9ubHkgdGhlIHN0YWdlZAovLyBhZGRyZXNzIG1heSBjYWxsIGl0LgpmdW5jIEFjY2VwdEFkbWluKGN1ciByZWFsbSkgewoJYXNzZXJ0Tm9TZW5kKCkKCWNhbGxlciA6PSBjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkKCXZhciB6ZXJvIGFkZHJlc3MKCWlmIHBlbmRpbmdBZG1pbiA9PSB6ZXJvIHx8IGNhbGxlciAhPSBwZW5kaW5nQWRtaW4gewoJCXBhbmljKCJjYWxsZXIgaXMgbm90IHRoZSBzdGFnZWQgYWRtaW4iKQoJfQoJYWRtaW4gPSBwZW5kaW5nQWRtaW4KCXBlbmRpbmdBZG1pbiA9IHplcm8KCWNoYWluLkVtaXQoIkFkbWluVHJhbnNmZXJyZWQiLCAibmV3QWRtaW4iLCBhZG1pbi5TdHJpbmcoKSkKfQoKLy8gLS0tIHJlYWQtb25seSB2aWV3cyAtLS0KCi8vIExpc3RpbmdJbmZvIHJldHVybnMgYSBsaXN0aW5nJ3MgZmllbGRzIGJ5IHZhbHVlOiBzZWxsZXIsIHRpdGxlLAovLyBwcmljZSwgc25hcHNob3R0ZWQgZmVlIGJwcywgc3RhdHVzLCBhbmQgYnV5ZXIgKHplcm8gdW5sZXNzIHNvbGQpLgpmdW5jIExpc3RpbmdJbmZvKGlkIGludDY0KSAoc2VsbGVyIGFkZHJlc3MsIHRpdGxlIHN0cmluZywgcHJpY2UsIGZlZUJwcyBpbnQ2NCwgc3RhdHVzIHN0cmluZywgYnV5ZXIgYWRkcmVzcykgewoJbCA6PSBtdXN0R2V0TGlzdGluZyhpZCkKCXJldHVybiBsLnNlbGxlciwgbC50aXRsZSwgbC5wcmljZSwgbC5mZWVCcHMsIGwuc3RhdHVzLCBsLmJ1eWVyCn0KCi8vIERlc2NyaXB0aW9uIHJldHVybnMgYSBsaXN0aW5nJ3MgcmF3IGRlc2NyaXB0aW9uIHRleHQuCmZ1bmMgRGVzY3JpcHRpb24oaWQgaW50NjQpIHN0cmluZyB7IHJldHVybiBtdXN0R2V0TGlzdGluZyhpZCkuZGVzY3JpcHRpb24gfQoKLy8gUXVvdGUgcmV0dXJucyB3aGF0IGEgYnV5ZXIgcGF5cyBhbmQgd2hhdCB0aGUgc2VsbGVyIHdvdWxkIHJlY2VpdmUKLy8gZm9yIGEgbGlzdGluZywgYXQgaXRzIFNOQVBTSE9UVEVEIGZlZSDigJQgdGhlIHNhbWUgYXJpdGhtZXRpYyBCdXkKLy8gcGVyZm9ybXMgKHBhdHRlcm4gZnJvbSBuc21hcmtldC92NDogYSBmZWUgZGlzY292ZXJlZCBhZnRlciBzaWduaW5nCi8vIGlzIGEgZmVlIHRoZSBzZWxsZXIgd2FzIG5vdCB0b2xkIGFib3V0KS4KZnVuYyBRdW90ZShpZCBpbnQ2NCkgKHByaWNlLCBmZWUsIHRvU2VsbGVyIGludDY0KSB7CglsIDo9IG11c3RHZXRMaXN0aW5nKGlkKQoJZiwgZXJyIDo9IGZlZWxlZGdlci5GZWVGb3IobC5wcmljZSwgbC5mZWVCcHMpCglpZiBlcnIgIT0gbmlsIHsKCQlwYW5pYyhlcnIpCgl9CglyZXR1cm4gbC5wcmljZSwgZiwgbC5wcmljZSAtIGYKfQoKLy8gQWRtaW4gcmV0dXJucyB0aGUgY3VycmVudCBhZG1pbi4KZnVuYyBBZG1pbigpIGFkZHJlc3MgeyByZXR1cm4gYWRtaW4gfQoKLy8gUGVuZGluZ0FkbWluIHJldHVybnMgdGhlIHN0YWdlZCBzdWNjZXNzb3IgKHplcm8gd2hlbiBub25lKS4KZnVuYyBQZW5kaW5nQWRtaW4oKSBhZGRyZXNzIHsgcmV0dXJuIHBlbmRpbmdBZG1pbiB9CgovLyBGZWVSZWNpcGllbnQgcmV0dXJucyB3aG8gbWF5IHdpdGhkcmF3IGZlZXMgYW5kIHN3ZWVwIHN1cnBsdXMuCmZ1bmMgRmVlUmVjaXBpZW50KCkgYWRkcmVzcyB7IHJldHVybiBmZWVSZWNpcGllbnQgfQoKLy8gRmVlQnBzIHJldHVybnMgdGhlIGZlZSB0aGF0IHdpbGwgYmUgc25hcHNob3R0ZWQgaW50byBuZXdseSBjcmVhdGVkCi8vIGxpc3RpbmdzIChleGlzdGluZyBsaXN0aW5ncyBrZWVwIHRoZWlyIG93biBzbmFwc2hvdCkuCmZ1bmMgRmVlQnBzKCkgaW50NjQgeyByZXR1cm4gZmVlQnBzIH0KCi8vIE51bUxpc3RpbmdzIHJldHVybnMgaG93IG1hbnkgbGlzdGluZ3MgaGF2ZSBldmVyIGJlZW4gY3JlYXRlZC4KZnVuYyBOdW1MaXN0aW5ncygpIGludDY0IHsgcmV0dXJuIG5leHRJRCB9CgovLyBCYWxhbmNlT2YgcmV0dXJucyBhZGRyJ3MgY2xhaW1hYmxlIHByb2NlZWRzLgpmdW5jIEJhbGFuY2VPZihhZGRyIGFkZHJlc3MpIGludDY0IHsgcmV0dXJuIGxlZGdlci5CYWxhbmNlT2YoYWRkci5TdHJpbmcoKSkgfQoKLy8gVXNlcnNUb3RhbCByZXR1cm5zIHRoZSBzdW0gb2YgYWxsIGNsYWltYWJsZSBwcm9jZWVkcyAodGhlIFUgdGVybSkuCmZ1bmMgVXNlcnNUb3RhbCgpIGludDY0IHsgcmV0dXJuIGxlZGdlci5Vc2Vyc1RvdGFsKCkgfQoKLy8gRmVlc0FjY3J1ZWQgcmV0dXJucyB0aGUgZmVlIHBvdCAodGhlIEYgdGVybSkuCmZ1bmMgRmVlc0FjY3J1ZWQoKSBpbnQ2NCB7IHJldHVybiBsZWRnZXIuRmVlc0FjY3J1ZWQoKSB9CgovLyBMaWFiaWxpdGllcyByZXR1cm5zIGV2ZXJ5dGhpbmcgdGhpcyByZWFsbSBvd2VzOiBVc2Vyc1RvdGFsICsKLy8gRmVlc0FjY3J1ZWQgKGxpc3RpbmdzIGhvbGQgbm8gdmFsdWUgYnkgY29uc3RydWN0aW9uKS4KZnVuYyBMaWFiaWxpdGllcygpIGludDY0IHsgcmV0dXJuIGxlZGdlci5MaWFiaWxpdGllcygpIH0KCi8vIEhlbGQgcmV0dXJucyB0aGUgdWdub3QgYWN0dWFsbHkgaGVsZCBhdCB0aGUgcmVhbG0gYWRkcmVzcyAoSCkuCmZ1bmMgSGVsZCgpIGludDY0IHsgcmV0dXJuIGNvaW5pby5IZWxkQXQoc2VsZiwgRGVub20pIH0KCi8vIFN1cnBsdXMgcmV0dXJucyBIZWxkKCkgLSBMaWFiaWxpdGllcygpICh0aGUgUyB0ZXJtKS4KZnVuYyBTdXJwbHVzKCkgaW50NjQgeyByZXR1cm4gSGVsZCgpIC0gbGVkZ2VyLkxpYWJpbGl0aWVzKCkgfQoKLy8gQWRkcmVzcyByZXR1cm5zIHRoaXMgcmVhbG0ncyBhZGRyZXNzLgpmdW5jIEFkZHJlc3MoKSBhZGRyZXNzIHsgcmV0dXJuIHNlbGYgfQoKLy8gUmVuZGVyIHNob3dzIHRoZSBtYXJrZXQgYXQgIiIgYW5kIGEgbGlzdGluZyBkZXRhaWwgYXQgIjxpZD4iLgovLyBUaXRsZXMgYXJlIGNoYXJzZXQtcmVzdHJpY3RlZDsgZGVzY3JpcHRpb25zIHBhc3MgdGhyb3VnaCB0aGUKLy8gZWNvc3lzdGVtIHNhbml0aXplci4KZnVuYyBSZW5kZXIocGF0aCBzdHJpbmcpIHN0cmluZyB7CglpZiBwYXRoICE9ICIiIHsKCQlyZXR1cm4gcmVuZGVyTGlzdGluZyhwYXRoKQoJfQoJaGVsZCA6PSBIZWxkKCkKCWxpYWIgOj0gbGVkZ2VyLkxpYWJpbGl0aWVzKCkKCXN0YXR1cyA6PSAiT0siCglpZiBoZWxkIDwgbGlhYiB7CgkJc3RhdHVzID0gIlZJT0xBVEVEIgoJfQoJb3V0IDo9ICIjIE1hcmtldHBsYWNlXG5cbiIKCW91dCArPSAiQ3VzdG9kaWFsIEdOT1QgbWFya2V0cGxhY2U7IGFjY291bnRpbmcgdmlhIGZlZWxlZGdlciwgY29pbiBJL08gdmlhIGNvaW5pby5cblxuIgoJb3V0ICs9ICIjIyBDb25maWd1cmF0aW9uXG5cbiIKCW91dCArPSAiLSBmZWUgZm9yIG5ldyBsaXN0aW5nczogIiArIGl0b2EoZmVlQnBzKSArICIgYnBzIChjYXAgIiArIGl0b2EoTWF4RmVlQnBzKSArCgkJIiBicHM7IGVhY2ggbGlzdGluZyBrZWVwcyB0aGUgZmVlIHNuYXBzaG90dGVkIGF0IGl0cyBjcmVhdGlvbilcbiIKCW91dCArPSAiLSBmZWUgcmVjaXBpZW50OiAiICsgZmVlUmVjaXBpZW50LlN0cmluZygpICsgIlxuIgoJb3V0ICs9ICItIGFkbWluOiAiICsgYWRtaW4uU3RyaW5nKCkgKyAiXG5cbiIKCW91dCArPSAiIyMgQWNjb3VudGluZyAoSCA9PSBVICsgRiArIFM7IGxpc3RpbmdzIGhvbGQgbm8gdmFsdWUpXG5cbiIKCW91dCArPSAiLSBjbGFpbWFibGUgcHJvY2VlZHMgKFUpOiAiICsgaXRvYShsZWRnZXIuVXNlcnNUb3RhbCgpKSArIERlbm9tICsgIlxuIgoJb3V0ICs9ICItIGZlZXMgYWNjcnVlZCAoRik6ICIgKyBpdG9hKGxlZGdlci5GZWVzQWNjcnVlZCgpKSArIERlbm9tICsgIlxuIgoJb3V0ICs9ICItIGhlbGQgKEgpOiAiICsgaXRvYShoZWxkKSArIERlbm9tICsgIlxuIgoJb3V0ICs9ICItIGNvbnNlcnZhdGlvbjogIiArIHN0YXR1cyArICJcblxuIgoJb3V0ICs9ICIjIyBMYXRlc3QgbGlzdGluZ3NcblxuIgoJaWYgbmV4dElEID09IDAgewoJCW91dCArPSAiTm8gbGlzdGluZ3MgeWV0LlxuIgoJCXJldHVybiBvdXQKCX0KCXNob3duIDo9IDAKCWxpc3RpbmdzLlJldmVyc2VJdGVyYXRlKCIiLCAiIiwgZnVuYyhfIHN0cmluZywgdiBhbnkpIGJvb2wgewoJCWwgOj0gdi4oKmxpc3RpbmcpCgkJb3V0ICs9ICItIFsjIiArIGl0b2EobC5pZCkgKyAiXSgiICsgIi9yL2cxdXQ2dXNwdWg3M2UwMnlhdXhwbXl0OGczd3dkZGFxOHV0YWd2bTMvbWFya2V0OiIgKyBpdG9hKGwuaWQpICsgIikgWyIgKwoJCQlsLnN0YXR1cyArICJdICIgKyBsLnRpdGxlICsgIiDigJQgIiArIGl0b2EobC5wcmljZSkgKyBEZW5vbSArICJcbiIKCQlzaG93bisrCgkJcmV0dXJuIHNob3duID49IDIwCgl9KQoJcmV0dXJuIG91dAp9CgpmdW5jIHJlbmRlckxpc3RpbmcocGF0aCBzdHJpbmcpIHN0cmluZyB7CglpZCwgZXJyIDo9IHN0cmNvbnYuUGFyc2VJbnQocGF0aCwgMTAsIDY0KQoJaWYgZXJyICE9IG5pbCB7CgkJcmV0dXJuICI+IFshV0FSTklOR11cbj4gaW52YWxpZCBsaXN0aW5nIGlkXG4iCgl9Cgl2IDo9IGxpc3RpbmdzLkdldChwYWRJRChpZCkpCglpZiB2ID09IG5pbCB7CgkJcmV0dXJuICI+IFshV0FSTklOR11cbj4gdW5rbm93biBsaXN0aW5nIGlkXG4iCgl9CglsIDo9IHYuKCpsaXN0aW5nKQoJb3V0IDo9ICIjIExpc3RpbmcgIyIgKyBpdG9hKGwuaWQpICsgIjogIiArIGwudGl0bGUgKyAiXG5cbiIKCW91dCArPSAiLSBzdGF0dXM6ICIgKyBsLnN0YXR1cyArICJcbiIKCW91dCArPSAiLSBzZWxsZXI6ICIgKyBsLnNlbGxlci5TdHJpbmcoKSArICJcbiIKCW91dCArPSAiLSBwcmljZTogIiArIGl0b2EobC5wcmljZSkgKyBEZW5vbSArICJcbiIKCW91dCArPSAiLSBmZWUgKHNuYXBzaG90KTogIiArIGl0b2EobC5mZWVCcHMpICsgIiBicHNcbiIKCWlmIGwuc3RhdHVzID09IFN0YXR1c1NvbGQgewoJCW91dCArPSAiLSBidXllcjogIiArIGwuYnV5ZXIuU3RyaW5nKCkgKyAiXG4iCgl9CglvdXQgKz0gIlxuIyMgRGVzY3JpcHRpb25cblxuIiArIHNhbml0aXplLklubGluZVRleHQobC5kZXNjcmlwdGlvbikgKyAiXG4iCglyZXR1cm4gb3V0Cn0KCi8vIC0tLSBpbnRlcm5hbHMgLS0tCgovLyBhc3NlcnROb1NlbmQgcmVmdXNlcyBjb2lucyBvbiBub24tcGF5YWJsZSBlbnRyeXBvaW50czogYW4gYWNjaWRlbnRhbAovLyAtc2VuZCB3b3VsZCBvdGhlcndpc2Ugc3RyYW5kIGF0IHRoZSByZWFsbSBhcyBzd2VlcC1vbmx5IHN1cnBsdXMKLy8gKHBhdHRlcm4gZnJvbSBuc21hcmtldC92NCkuIEJ1eSBpcyB0aGUgb25seSBwYXlhYmxlIGZ1bmN0aW9uLgovLyBOT1RFOiB0aGlzIHJlYWRzIHRoZSBPUklHSU4gZW52ZWxvcGUg4oCUIGZvciBFT0EgY2FsbGVycyB0aGF0IGlzCi8vIGV4YWN0bHkgImNvaW5zIHRoYXQgbGFuZGVkIGhlcmUiOyBmb3IgcmVhbG0gY2FsbGVycyBpdCBmYWlscyBjbG9zZWQKLy8gd2hlbmV2ZXIgdGhlIG9yaWdpbiB0eCBjYXJyaWVkIGFueSAtc2VuZCAoc2VlIHRoZSBoZWFkZXIgY2F2ZWF0KS4KZnVuYyBhc3NlcnROb1NlbmQoKSB7CglpZiBsZW4odW5zYWZlLk9yaWdpblNlbmQoKSkgIT0gMCB7CgkJcGFuaWMoInRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYWNjZXB0IGNvaW5zIikKCX0KfQoKZnVuYyBhc3NlcnRBZG1pbihjYWxsZXIgYWRkcmVzcykgewoJaWYgY2FsbGVyICE9IGFkbWluIHsKCQlwYW5pYygiYWRtaW4gb25seSIpCgl9Cn0KCmZ1bmMgbXVzdEdldExpc3RpbmcoaWQgaW50NjQpICpsaXN0aW5nIHsKCXYgOj0gbGlzdGluZ3MuR2V0KHBhZElEKGlkKSkKCWlmIHYgPT0gbmlsIHsKCQlwYW5pYygidW5rbm93biBsaXN0aW5nIGlkIikKCX0KCXJldHVybiB2LigqbGlzdGluZykKfQoKLy8gYXNzZXJ0VmFsaWRUaXRsZSBib3VuZHMgbGVuZ3RoIGFuZCByZXN0cmljdHMgdGhlIGNoYXJzZXQgc28gdGl0bGVzCi8vIGFyZSBsaXN0LXNhZmUgaW4gUmVuZGVyIHdpdGhvdXQgZXNjYXBpbmcuCmZ1bmMgYXNzZXJ0VmFsaWRUaXRsZSh0aXRsZSBzdHJpbmcpIHsKCWlmIGxlbih0aXRsZSkgPT0gMCB8fCBsZW4odGl0bGUpID4gTWF4VGl0bGVMZW4gewoJCXBhbmljKCJ0aXRsZSBtdXN0IGJlIDEtIiArIHN0cmNvbnYuSXRvYShNYXhUaXRsZUxlbikgKyAiIGNoYXJhY3RlcnMiKQoJfQoJZm9yIGkgOj0gMDsgaSA8IGxlbih0aXRsZSk7IGkrKyB7CgkJYyA6PSB0aXRsZVtpXQoJCXN3aXRjaCB7CgkJY2FzZSBjID49ICdhJyAmJiBjIDw9ICd6JzoKCQljYXNlIGMgPj0gJ0EnICYmIGMgPD0gJ1onOgoJCWNhc2UgYyA+PSAnMCcgJiYgYyA8PSAnOSc6CgkJY2FzZSBjID09ICcgJyB8fCBjID09ICdfJyB8fCBjID09ICctJzoKCQlkZWZhdWx0OgoJCQlwYW5pYygidGl0bGUgbWF5IG9ubHkgY29udGFpbiBsZXR0ZXJzLCBkaWdpdHMsIHNwYWNlLCBfIGFuZCAtIikKCQl9Cgl9Cn0KCi8vIHBhZElEIHJlbmRlcnMgYW4gaWQgYXMgYSBmaXhlZC13aWR0aCBrZXkgc28gYXZsIGl0ZXJhdGlvbiBvcmRlciBpcwovLyBudW1lcmljIG9yZGVyLgpmdW5jIHBhZElEKGlkIGludDY0KSBzdHJpbmcgewoJcyA6PSBzdHJjb252LkZvcm1hdEludChpZCwgMTApCglmb3IgbGVuKHMpIDwgMTIgewoJCXMgPSAiMCIgKyBzCgl9CglyZXR1cm4gcwp9CgpmdW5jIGl0b2EobiBpbnQ2NCkgc3RyaW5nIHsKCXJldHVybiBzdHJjb252LkZvcm1hdEludChuLCAxMCkKfQoiDTEwMDAwMDAwdWdub3QSEgjI1IUyEgsxMDQ5NTJ1Z25vdBqoAQo6ChMvdG0uUHViS2V5U2VjcDI1NmsxEiMKIQIW9DF2ySV4zjQumeJvrSn3/nxG7XBDVv+rkxV/YrsOmBJAZpToMDsEgw//iE5kYwU9ap9w9etlvHN4HxhS5bPwra8zZn9AS3m67Xqkj/wXZ32+9alkmp1hm5l2OCNxFZzdRBooZzFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFsdXV4ZQ=="
  }
}