Transaction executed successfully

Transaction Details

Inspect execution, participants, message data, gas usage, events and raw transaction data.

Transaction hash
BD9E746874A08B7C2103160F8347BBBB3DC79682EA4AB94AC4782245881D5867

Transaction overview

Status
Success
Execution completed
Block
#265720
Included in block
Message Type
m_addpkg
Primary message

Execution summary

TX INDEX
0
Position in block
GAS WANTED
60,000,000
Requested gas limit
GAS USED
33,926,134
Gas consumed
FEE
120000ugnot
Transaction fee

Participants

Sender
Package / Realm
Not available
Memo
None

Message

Message #1
m_addpkg
Caller
Arguments
g136j0m08pkm2lwwde9dmlx8uee26llent9s5cpf9000000ugnot

Execution log

msg:0,success:true,log:,events:[]

Events

No events emitted by this transaction.

Raw encoded transaction

Ct6sAQoML3ZtLm1fYWRkcGtnEsysAQooZzEzNmowbTA4cGttMmx3d2RlOWRtbHg4dWVlMjZsbGVudDlzNWNwZhKQrAEKG21lbWJhX2FyY2FkZV9sZWFkZXJib2FyZF92MRIuZ25vLmxhbmQvci9zYW1jcmV3L21lbWJhX2FyY2FkZV9sZWFkZXJib2FyZF92MRrwEwoJYWRtaW4uZ25vEuITcGFja2FnZSBtZW1iYV9hcmNhZGVfbGVhZGVyYm9hcmRfdjEKCmltcG9ydCAiY2hhaW4iCgovLyBBZG1pbiBzdXJmYWNlIOKAlCBvd25lci1nYXRlZC4gVGhlIG93bmVyIGlzIHRoZSBzYW1jcmV3IG11bHRpc2lnIGF0IGxhdW5jaCBhbmQgY2FuIGJlIGhhbmRlZCB0bwovLyB0aGUgbWVtYmFfZGFvIGV4ZWN1dG9yIHZpYSB0aGUgMi1zdGVwIFRyYW5zZmVyT3duZXJzaGlwL0FjY2VwdE93bmVyc2hpcCAobmV2ZXIgYSAxLXN0ZXAgdHJhbnNmZXIKLy8gdG8gYSBtaXN0eXBlZC9kZWFkIGFkZHJlc3MpLgoKLy8gQWRkQXR0ZXN0ZXIgYWxsb3dsaXN0cyBhbiBBRERSRVNTICh0aGUgYmFja2VuZCB2ZXJpZmllcidzIGRlZGljYXRlZCBsb3ctcHJpdmlsZWdlIGtleSDigJQgbmV2ZXIgdGhlCi8vIGRlcGxveSBtdWx0aXNpZyBpdHNlbGYpIGFzIGFuIGF1dGhvcml6ZWQgcmVzdWx0IHNvdXJjZS4gT3duZXIgb25seS4KZnVuYyBBZGRBdHRlc3RlcihjdXIgcmVhbG0sIGFkZHIgYWRkcmVzcykgewoJYXNzZXJ0T3duZXIoY3VyKQoJaWYgYWRkciA9PSAiIiB7CgkJcGFuaWMoImF0dGVzdGVyIGFkZHJlc3MgbXVzdCBiZSBub24tZW1wdHkiKQoJfQoJYXR0ZXN0ZXJzLlNldChhZGRyLlN0cmluZygpLCB0cnVlKQoJY2hhaW4uRW1pdCgiQXR0ZXN0ZXJBZGRlZCIsICJhZGRyIiwgYWRkci5TdHJpbmcoKSkKfQoKLy8gUmVtb3ZlQXR0ZXN0ZXIgcmV2b2tlcyBhbiBhdHRlc3RlciBrZXkuIE93bmVyIG9ubHkuCmZ1bmMgUmVtb3ZlQXR0ZXN0ZXIoY3VyIHJlYWxtLCBhZGRyIGFkZHJlc3MpIHsKCWFzc2VydE93bmVyKGN1cikKCWF0dGVzdGVycy5SZW1vdmUoYWRkci5TdHJpbmcoKSkKCWNoYWluLkVtaXQoIkF0dGVzdGVyUmVtb3ZlZCIsICJhZGRyIiwgYWRkci5TdHJpbmcoKSkKfQoKLy8gUGF1c2UgZnJlZXplcyBhbGwgYXR0ZXN0YXRpb24gKyByZWNlaXB0IHJlcXVlc3RzIChyZWFkcyBzdGF5IGF2YWlsYWJsZSkuIE93bmVyIG9ubHkuCmZ1bmMgUGF1c2UoY3VyIHJlYWxtLCBzdGF0ZSBib29sKSB7Cglhc3NlcnRPd25lcihjdXIpCglwYXVzZWQgPSBzdGF0ZQoJY2hhaW4uRW1pdCgiUGF1c2VTZXQiLCAicGF1c2VkIiwgYm9vbFN0cihzdGF0ZSkpCn0KCi8vIFRyYW5zZmVyT3duZXJzaGlwIHN0YWdlcyBhIG5ldyBvd25lcjsgaXQgdGFrZXMgZWZmZWN0IG9ubHkgYWZ0ZXIgQWNjZXB0T3duZXJzaGlwIGlzIGNhbGxlZCBCWQovLyB0aGF0IGFkZHJlc3MgKDItc3RlcCwgc28gYSB0eXBvIGNhbid0IGJyaWNrIGFkbWluKS4KZnVuYyBUcmFuc2Zlck93bmVyc2hpcChjdXIgcmVhbG0sIG5ld093bmVyIGFkZHJlc3MpIHsKCWFzc2VydE93bmVyKGN1cikKCWlmIG5ld093bmVyID09ICIiIHsKCQlwYW5pYygibmV3T3duZXIgbXVzdCBiZSBub24tZW1wdHkiKQoJfQoJaWYgIW5ld093bmVyLklzVmFsaWQoKSB7CgkJcGFuaWMoImludmFsaWQgYWRkcmVzczogIiArIG5ld093bmVyLlN0cmluZygpKQoJfQoJaWYgbmV3T3duZXIgPT0gb3duZXIgewoJCXBhbmljKCJuZXdPd25lciBpcyB0aGUgY3VycmVudCBvd25lciIpCgl9CglwZW5kaW5nT3duZXIgPSBuZXdPd25lcgoJY2hhaW4uRW1pdCgiT3duZXJzaGlwVHJhbnNmZXJTdGFydGVkIiwgInBlbmRpbmciLCBuZXdPd25lci5TdHJpbmcoKSkKfQoKLy8gQ2FuY2VsT3duZXJzaGlwVHJhbnNmZXIgd2l0aGRyYXdzIGEgc3RhZ2VkIGhhbmRvZmYuIE93bmVyIG9ubHkuCmZ1bmMgQ2FuY2VsT3duZXJzaGlwVHJhbnNmZXIoY3VyIHJlYWxtKSB7Cglhc3NlcnRPd25lcihjdXIpCglpZiBwZW5kaW5nT3duZXIgPT0gIiIgewoJCXBhbmljKCJubyBwZW5kaW5nIG93bmVyc2hpcCB0cmFuc2ZlciIpCgl9CgljYW5jZWxsZWQgOj0gcGVuZGluZ093bmVyCglwZW5kaW5nT3duZXIgPSAiIgoJY2hhaW4uRW1pdCgiT3duZXJzaGlwVHJhbnNmZXJDYW5jZWxsZWQiLCAicGVuZGluZyIsIGNhbmNlbGxlZC5TdHJpbmcoKSkKfQoKLy8gR2V0UGVuZGluZ093bmVyIHJldHVybnMgdGhlIHN0YWdlZCBzdWNjZXNzb3IsIG9yIHRoZSBlbXB0eSBhZGRyZXNzLgpmdW5jIEdldFBlbmRpbmdPd25lcigpIGFkZHJlc3MgeyByZXR1cm4gcGVuZGluZ093bmVyIH0KCi8vIEFjY2VwdE93bmVyc2hpcCBjb21wbGV0ZXMgdGhlIGhhbmRvZmYuIE9ubHkgdGhlIHN0YWdlZCBwZW5kaW5nT3duZXIgbWF5IGNhbGwgaXQuCmZ1bmMgQWNjZXB0T3duZXJzaGlwKGN1ciByZWFsbSkgewoJaWYgIWN1ci5Jc0N1cnJlbnQoKSB7CgkJcGFuaWMoInNwb29mZWQgcmVhbG0iKQoJfQoJaWYgcGVuZGluZ093bmVyID09ICIiIHsKCQlwYW5pYygibm8gcGVuZGluZyBvd25lcnNoaXAgdHJhbnNmZXIiKQoJfQoJaWYgY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpICE9IHBlbmRpbmdPd25lciB7CgkJcGFuaWMoInVuYXV0aG9yaXplZDogb25seSB0aGUgcGVuZGluZyBvd25lciBtYXkgYWNjZXB0IikKCX0KCW93bmVyID0gcGVuZGluZ093bmVyCglwZW5kaW5nT3duZXIgPSAiIgoJY2hhaW4uRW1pdCgiT3duZXJzaGlwVHJhbnNmZXJBY2NlcHRlZCIsICJvd25lciIsIG93bmVyLlN0cmluZygpKQp9ChpVCgtnbm9tb2QudG9tbBJGbW9kdWxlID0gImduby5sYW5kL3Ivc2FtY3Jldy9tZW1iYV9hcmNhZGVfbGVhZGVyYm9hcmRfdjEiCmdubyA9ICIwLjkiChrPYQoPbGVhZGVyYm9hcmQuZ25vErthLy8gUGFja2FnZSBtZW1iYV9hcmNhZGVfbGVhZGVyYm9hcmRfdjEgaXMgdGhlIGZ1bmRzLWZyZWUsIHZlcmlmaWVkLXNjb3JlIGxlZGdlciBmb3IgdGhlIE1lbWJhCi8vIGFyY2FkZSAoQkFSUklDQURFLCBTcGFjZSBJbnZhZGVycywgYW5kIGZ1dHVyZSBnYW1lcyDigJQgb25lIHJlYWxtLCBib2FyZHMga2V5ZWQgcGVyIGdhbWUgc2x1ZykuCi8vIE5vdGhpbmcgaGVyZSB0cnVzdHMgYSBjbGllbnQgbnVtYmVyOiBhbiBhdXRob3JpemVkIEFUVEVTVEVSICh0aGUgYmFja2VuZCB2ZXJpZmllcidzIGtleSkKLy8gcmUtc2ltdWxhdGVzIGEgc3VibWl0dGVkIGlucHV0IGxvZyBhbmQgYXR0ZXN0cyBvbmx5IHRoZSByZXByb2R1Y2VkIHJlc3VsdC4gVGhlIGNoYWluIHN0b3JlcyB0aGUKLy8gYXR0ZXN0ZWQgcmVzdWx0IHBsdXMgYSBjb21taXRtZW50IHRvIHRoZSBsb2cgKGl0cyBzaGEyNTYpIOKAlCB0aGUgbG9nIGl0c2VsZiBzdGF5cyBvZmYtY2hhaW47Ci8vICJ2ZXJpZmllZCwgbmV2ZXIgdHJ1c3RsZXNzIiBpcyB0aGUgcHVibGljIGNvbnRyYWN0LgovLwovLyBTQUZFVFk6IHRoZXJlIGlzIE5PIGJhbmtlciwgTk8gdHJhbnNmZXIsIGFuZCBOTyBPcmlnaW5TZW5kIGFueXdoZXJlIOKAlCB0aGUgZnVuZC1kcmFpbiByaXNrIGNsYXNzCi8vIGRvZXMgbm90IGFwcGx5LiBUaGUgb25seSB0cnVzdCBib3VuZGFyeSBpcyB3aG8gbWF5IGF0dGVzdCAob3duZXIg4oiqIHRoZSBhdHRlc3RlciBhbGxvd2xpc3QpOyBldmVyeQovLyB3cml0ZSBlbWl0cyBhbiBldmVudC4gVHdvIGJ1Y2tldHMgbmV2ZXIgbWl4OiB0aGUgY29tcGV0aXRpdmUgREFJTFkgQk9BUkQgKG9uZSBiZXN0IGVudHJ5IHBlcgovLyBhZGRyZXNzIHBlciBnYW1lIHBlciBkYXksIHNoYXJlZCBzZWVkKSBhbmQgcGVyc29uYWwgVFJBSU5JTkcgUkVDRUlQVFMgKHByYWN0aWNlIHJ1bnMg4oCUIGEKLy8gdmVyaWZpZWQgZmxleCwgbmV2ZXIgcmFua2VkKS4KLy8KLy8gVGhlIGdhbWUgc2x1ZyBpcyBzaGFwZS12YWxpZGF0ZWQgb25seSDigJQgdGhlcmUgaXMgZGVsaWJlcmF0ZWx5IE5PIG9uLWNoYWluIGdhbWUgcmVnaXN0cnk6IHRoZQovLyByZWFsbSBpcyBmdW5kcy1mcmVlLCBzbyB0aGUgd29yc3QgYSB0eXBvJ2Qgc2x1ZyBjYW4gZG8gaXMgZnJhZ21lbnQgYSBib2FyZCwgYW5kIHRoZSBhdHRlc3RlcgovLyAobm90IHRoZSBwbGF5ZXIpIGF1dGhvcnMgdGhlIHNsdWcuCnBhY2thZ2UgbWVtYmFfYXJjYWRlX2xlYWRlcmJvYXJkX3YxCgppbXBvcnQgKAoJImNoYWluIgoJImNoYWluL3J1bnRpbWUiCgoJImduby5sYW5kL3Avc2FtY3Jldy9hdmwiCgkiZ25vLmxhbmQvcC9udC91Zm10L3YwIgopCgovLyBObyBvd25lciBpcyBjb21waWxlZCBpbjogdGhlIHB1Ymxpc2hpbmcgdHJhbnNhY3Rpb24ncyBzaWduZXIgKG9uIGdub2xhbmQtMSB0aGUgc2FtY3JldwovLyBuYW1lc3BhY2UgbXVsdGlzaWcsIHRoZSBzdGFtcGVkIGNyZWF0b3IgYXQgZW5hYmxlIHRpbWUpIGlzIHNlZWRlZCBhcyBvd25lciBhdCBwYWNrYWdlIGxvYWQ7Ci8vIGhhbmQgaXQgdG8gdGhlIG1lbWJhX2RhbyBleGVjdXRvciBwb3N0LWRlcGxveSB2aWEgdGhlIDItc3RlcCBvd25lcnNoaXAgdHJhbnNmZXIuCgpjb25zdCAoCgkvLyBNYXhTY29yZSBib3VuZHMgYSBzaW5nbGUgYXR0ZXN0ZWQgc2NvcmUg4oCUIGEgZmF0LWZpbmdlciAvIG92ZXJmbG93IGd1YXJkIGZhciBhYm92ZSBhbnkKCS8vIHJlYWNoYWJsZSBzaW0gc2NvcmUgKGFyY2FkZSBzaW0gc2NvcmVzIGxpdmUgaW4gdGhlIHRlbnMgb2YgdGhvdXNhbmRzKS4KCU1heFNjb3JlID0gaW50NjQoMV8wMDBfMDAwXzAwMCkKCS8vIE1heEdhbWVMZW4gYm91bmRzIHRoZSBnYW1lIHNsdWcuIFRoZSBzbHVnIGNoYXJzZXQgaXMgW2EtejAtOS1dLCB3aGljaCBFWENMVURFUyAnfCcg4oCUCgkvLyBsb2FkLWJlYXJpbmc6ICd8JyBpcyB0aGUgY29tcG9zaXRlLWtleSBzZXBhcmF0b3IgaW4gZXZlcnkgc2NvcGVkIHRyZWUgYmVsb3cuCglNYXhHYW1lTGVuID0gMzIKCS8vIE1heFN0YXRzTGVuIGJvdW5kcyB0aGUgYXR0ZXN0ZXItYXV0aG9yZWQgcGVyLWdhbWUgc3RhdHMgSlNPTiBibG9iLiBSYW5raW5nIG5ldmVyIHJlYWRzCgkvLyBpdDsgcmVhZHMgb25seSBldmVyIGVtaXQgaXQgSlNPTi1lc2NhcGVkLgoJTWF4U3RhdHNMZW4gPSAyNTYKCS8vIFJlY2VpcHRzQ2FwIGJvdW5kcyBvbmUgYWRkcmVzcydzIHRyYWluaW5nLXJlY2VpcHQgcmluZyAob2xkZXN0IGV2aWN0ZWQgZmlyc3Q7IHRoZSByaW5nIGlzCgkvLyBtaXhlZC1nYW1lLCBzbyB0aGlzIGlzIHRoZSBwZXItYWRkcmVzcyBib3VuZCkuCglSZWNlaXB0c0NhcCA9IDEwMAoJLy8gUmVjZWlwdERhaWx5Q2FwIGJvdW5kcyBob3cgbWFueSByZWNlaXB0cyBvbmUgYWRkcmVzcyBtYXkgbWludCBwZXIgKGdhbWUsIGRheSkgKHNwYW0gY2FwKS4KCVJlY2VpcHREYWlseUNhcCA9IDUKCS8vIFJlcXVlc3RDYXAgYm91bmRzIG9uZSBhZGRyZXNzJ3MgUEVORElORyByZWNlaXB0IHJlcXVlc3RzIChmdWxmaWxsZWQgb25lcyBmcmVlIHRoZWlyIHNsb3QpOgoJLy8gdGhlIG9ubHkgdW5wcml2aWxlZ2VkIHdyaXRlIHBhdGggbXVzdCBub3QgZ3JvdyByZWFsbSBzdGF0ZSB1bmJvdW5kZWRseS4KCVJlcXVlc3RDYXAgPSA4CikKCi8vIEVudHJ5IGlzIG9uZSBhdHRlc3RlZCwgdmVyaWZpZXItcmVwcm9kdWNlZCBydW4gcmVzdWx0Lgp0eXBlIEVudHJ5IHN0cnVjdCB7CglBZGRyICAgICAgICAgICBhZGRyZXNzCglHYW1lICAgICAgICAgICBzdHJpbmcgLy8gc2x1ZywgMS4uTWF4R2FtZUxlbiBjaGFycyBvZiBbYS16MC05LV0gKG5ldmVyICd8JywgdGhlIGtleSBzZXBhcmF0b3IpCglEYXkgICAgICAgICAgICBzdHJpbmcgLy8gWVlZWS1NTS1ERCAodGhlIHNoYXJlZCBkYWlseSBzZWVkJ3MgZGF0ZTsgcmVjZWlwdCA9IHN1Ym1pc3Npb24gZGF5KQoJTW9kZSAgICAgICAgICAgc3RyaW5nIC8vICJkYWlseSIgfCAicHJhY3RpY2UiCglTZWVkICAgICAgICAgICBzdHJpbmcKCVNjb3JlICAgICAgICAgIGludDY0ICAvLyB0aGUgT05MWSByYW5rZWQgZmllbGQKCVN0YXRzICAgICAgICAgIHN0cmluZyAvLyBjb21wYWN0IGF0dGVzdGVyLWF1dGhvcmVkIEpTT04gKGdhbWUtc3BlY2lmaWM7IOKJpCBNYXhTdGF0c0xlbjsgb3BhcXVlIGhlcmUpCglTaW1WZXJzaW9uICAgICBpbnQ2NAoJU3RhdGVIYXNoICAgICAgc3RyaW5nIC8vIHRoZSBzaW0ncyBjYW5vbmljYWwgdGVybWluYWwtc3RhdGUgZGlnZXN0CglJbnB1dExvZ1NoYTI1NiBzdHJpbmcgLy8gY29tbWl0bWVudCB0byB0aGUgb2ZmLWNoYWluIGlucHV0IGxvZyAodGhlIHByb29mKQoJQXR0ZXN0ZWRBdCAgICAgaW50NjQgIC8vIGJsb2NrIGhlaWdodAp9Cgp2YXIgKAoJb3duZXIgICAgICAgIGFkZHJlc3MKCXBlbmRpbmdPd25lciBhZGRyZXNzCglwYXVzZWQgICAgICAgYm9vbAoJYXR0ZXN0ZXJzICAgID0gYXZsLk5ld1RyZWUoKSAvLyBhdHRlc3RlciBhZGRyZXNzIHN0cmluZyAtPiBib29sCglib2FyZHMgICAgICAgPSBhdmwuTmV3VHJlZSgpIC8vICJnYW1lfGRheXxhZGRyIiAtPiAqRW50cnkgKGNvbXBldGl0aXZlLCBvbmUgYmVzdCBwZXIgYWRkci9nYW1lL2RheSkKCXJlY2VpcHRzICAgICA9IGF2bC5OZXdUcmVlKCkgLy8gYWRkciBzdHJpbmcgLT4gW10qRW50cnkgKHRyYWluaW5nIHJpbmcsIG1peGVkLWdhbWUsIGNhcHBlZCkKCWxvZ0hhc2hlcyAgICA9IGF2bC5OZXdUcmVlKCkgLy8gImdhbWV8ZGF5fHNoYTI1NiIgLT4gYWRkciBzdHJpbmcgKGJvYXJkIHNsb3Q6IGZpcnN0LXN1Ym1pdHRlci1wZXItZGF5KQoJaGFzaE93bmVycyAgID0gYXZsLk5ld1RyZWUoKSAvLyBzaGEyNTYgLT4gYWRkciBzdHJpbmcgKEdMT0JBTDogYSBsb2cgYmluZHMgdG8gT05FIGFkZHJlc3MsIGV2ZXIpCglyZXF1ZXN0cyAgICAgPSBhdmwuTmV3VHJlZSgpIC8vICJhZGRyfHNoYTI1NiIgLT4gaW50NjQgaGVpZ2h0IChwbGF5ZXItcGFpZCByZWNlaXB0IHJlcXVlc3RzKQoJcmVxdWVzdENvdW50ID0gYXZsLk5ld1RyZWUoKSAvLyBhZGRyIHN0cmluZyAtPiBpbnQgKHBlbmRpbmcgcmVxdWVzdHMsIGNhcHBlZCBhdCBSZXF1ZXN0Q2FwKQoJYm9hcmRDb3VudCAgID0gYXZsLk5ld1RyZWUoKSAvLyAiZ2FtZXxkYXkiIC0+IGludCAoZW50cmllcyBwZXIgZ2FtZS1kYXksIE8oMSkgcmVhZHMpCikKCmZ1bmMgaW5pdCgpIHsgc2VlZEF1dGhvcml0eShwdWJsaXNoZXJBdExvYWQoKSkgfQoKLy8gc2VlZEF1dGhvcml0eSBpbnN0YWxscyB0aGUgcHVibGlzaGVyIGFzIG93bmVyLiBJdCBydW5zIG9uY2UgYXQgcGFja2FnZSBsb2FkLgpmdW5jIHNlZWRBdXRob3JpdHkocHVibGlzaGVyIGFkZHJlc3MpIHsKCW93bmVyID0gcHVibGlzaGVyCglwZW5kaW5nT3duZXIgPSAiIgp9CgpmdW5jIGFzc2VydE93bmVyKGN1ciByZWFsbSkgewoJaWYgIWN1ci5Jc0N1cnJlbnQoKSB7CgkJcGFuaWMoInNwb29mZWQgcmVhbG0iKQoJfQoJaWYgY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpICE9IG93bmVyIHsKCQlwYW5pYygidW5hdXRob3JpemVkOiBvd25lciBvbmx5IikKCX0KfQoKZnVuYyBhc3NlcnROb3RQYXVzZWQoKSB7CglpZiBwYXVzZWQgewoJCXBhbmljKCJhdHRlc3RhdGlvbiBpcyBwYXVzZWQiKQoJfQp9CgpmdW5jIGlzQXR0ZXN0ZXIoYWRkciBzdHJpbmcpIGJvb2wgewoJXywgb2sgOj0gYXR0ZXN0ZXJzLkdldChhZGRyKQoJcmV0dXJuIG9rCn0KCi8vIGFzc2VydEF0dGVzdGVyIGlzIHRoZSBzaW5nbGUgdHJ1c3QgYm91bmRhcnk6IG9ubHkgdGhlIG93bmVyIG9yIGFuIGFsbG93bGlzdGVkIGF0dGVzdGVyIGtleSAodGhlCi8vIGJhY2tlbmQgdmVyaWZpZXIpIG1heSB3cml0ZSByZXN1bHRzLiBUaGUgdmVyaWZpZXIncyBvd24gcmUtc2ltdWxhdGlvbiBnYXRlIGlzIHdoYXQgbWFrZXMgYW4KLy8gYXR0ZXN0ZWQgc2NvcmUgbWVhbmluZ2Z1bCDigJQgdGhpcyByZWFsbSBvbmx5IGVuZm9yY2VzIHRoYXQgdGhlIHNvdXJjZSBpcyB0cnVzdGVkLgpmdW5jIGFzc2VydEF0dGVzdGVyKGN1ciByZWFsbSkgewoJaWYgIWN1ci5Jc0N1cnJlbnQoKSB7CgkJcGFuaWMoInNwb29mZWQgcmVhbG0iKQoJfQoJcHIgOj0gY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpCglpZiBwciAhPSBvd25lciAmJiAhaXNBdHRlc3Rlcihwci5TdHJpbmcoKSkgewoJCXBhbmljKCJ1bmF1dGhvcml6ZWQ6IG93bmVyIG9yIGFsbG93bGlzdGVkIGF0dGVzdGVyIG9ubHkiKQoJfQp9CgpmdW5jIGFzc2VydEVudHJ5U2hhcGUoZ2FtZSBzdHJpbmcsIGFkZHIgYWRkcmVzcywgZGF5LCBtb2RlLCBzZWVkIHN0cmluZywgc2NvcmUsIHNpbVZlcnNpb24gaW50NjQsIHN0YXRlSGFzaCwgbG9nSGFzaCwgc3RhdHMgc3RyaW5nKSB7CglpZiBhZGRyID09ICIiIHsKCQlwYW5pYygiYWRkciBtdXN0IGJlIG5vbi1lbXB0eSIpCgl9Cglhc3NlcnRHYW1lU2x1ZyhnYW1lKQoJaWYgbGVuKGRheSkgIT0gMTAgfHwgZGF5WzRdICE9ICctJyB8fCBkYXlbN10gIT0gJy0nIHsKCQlwYW5pYygiZGF5IG11c3QgYmUgWVlZWS1NTS1ERCIpCgl9Cglmb3IgXywgaSA6PSByYW5nZSBbXWludHswLCAxLCAyLCAzLCA1LCA2LCA4LCA5fSB7CgkJaWYgZGF5W2ldIDwgJzAnIHx8IGRheVtpXSA+ICc5JyB7CgkJCXBhbmljKCJkYXkgbXVzdCBiZSBZWVlZLU1NLUREIikKCQl9Cgl9CglpZiBtb2RlICE9ICJkYWlseSIgJiYgbW9kZSAhPSAicHJhY3RpY2UiIHsKCQlwYW5pYygibW9kZSBtdXN0IGJlIGRhaWx5IG9yIHByYWN0aWNlIikKCX0KCWlmIHNlZWQgPT0gIiIgewoJCXBhbmljKCJzZWVkIG11c3QgYmUgbm9uLWVtcHR5IikKCX0KCWlmIHNjb3JlIDwgMCB8fCBzY29yZSA+IE1heFNjb3JlIHsKCQlwYW5pYygic2NvcmUgb3V0IG9mIHJhbmdlIikKCX0KCWlmIHNpbVZlcnNpb24gPD0gMCB7CgkJcGFuaWMoInNpbVZlcnNpb24gbXVzdCBiZSBwb3NpdGl2ZSIpCgl9CglpZiBzdGF0ZUhhc2ggPT0gIiIgfHwgbG9nSGFzaCA9PSAiIiB7CgkJcGFuaWMoInN0YXRlSGFzaCBhbmQgaW5wdXRMb2dTaGEyNTYgbXVzdCBiZSBub24tZW1wdHkiKQoJfQoJaWYgbGVuKHN0YXRzKSA+IE1heFN0YXRzTGVuIHsKCQlwYW5pYygic3RhdHMgdG9vIGxvbmciKQoJfQp9CgovLyBhc3NlcnRHYW1lU2x1ZyB2YWxpZGF0ZXMgdGhlIGdhbWUgc2x1ZyBzaGFwZTogMS4uTWF4R2FtZUxlbiBieXRlcyBvZiBbYS16MC05LV0uIFRoZSBjaGFyc2V0Ci8vIGV4Y2x1ZGVzICd8JyAoYW5kIGV2ZXJ5dGhpbmcgZWxzZSksIHNvIGEgc2x1ZyBjYW4gbmV2ZXIgZm9yZ2Ugb3Igc3BsaXQgYSBjb21wb3NpdGUga2V5LgpmdW5jIGFzc2VydEdhbWVTbHVnKGdhbWUgc3RyaW5nKSB7CglpZiBsZW4oZ2FtZSkgPCAxIHx8IGxlbihnYW1lKSA+IE1heEdhbWVMZW4gewoJCXBhbmljKCJnYW1lIG11c3QgYmUgMS0zMiBjaGFycyBvZiBbYS16MC05LV0iKQoJfQoJZm9yIGkgOj0gMDsgaSA8IGxlbihnYW1lKTsgaSsrIHsKCQljIDo9IGdhbWVbaV0KCQlpZiAoYyA8ICdhJyB8fCBjID4gJ3onKSAmJiAoYyA8ICcwJyB8fCBjID4gJzknKSAmJiBjICE9ICctJyB7CgkJCXBhbmljKCJnYW1lIG11c3QgYmUgMS0zMiBjaGFycyBvZiBbYS16MC05LV0iKQoJCX0KCX0KfQoKLy8gQXR0ZXN0U2NvcmUgd3JpdGVzIChvciBpbXByb3ZlcykgYW4gYWRkcmVzcydzIGVudHJ5IG9uIGEgZ2FtZSdzIGNvbXBldGl0aXZlIGJvYXJkIGZvciBhIGRheS4KLy8gQXR0ZXN0ZXItb25seS4gVGhlIHZlcmlmaWVyIGJhdGNoZXMgYSBkYXkncyByZXN1bHRzIGludG8gb25lIG11bHRpLW1zZyB0eCBhdCBkYXkgY2xvc2UsIHBsdXMKLy8gc3BhbS1jYXBwZWQgc2luZ2xlcyBmb3IgdGhlICJjZXJ0aWZ5IG5vdyIgZmxvdy4gUmUtYXR0ZXN0aW5nIHRoZSBzYW1lIGdhbWUvYWRkcmVzcy9kYXkgb25seSBldmVyCi8vIFJBSVNFUyB0aGUgc2NvcmUgKFNlY29uZCBXaW5kKS4gQSBsb2cgaGFzaCBhbHJlYWR5IGF0dGVzdGVkIGZvciB0aGF0IGdhbWUtZGF5IGZvciBhIERJRkZFUkVOVAovLyBhZGRyZXNzIGlzIHJlamVjdGVkIOKAlCBvbiBhIHNoYXJlZCBkYWlseSBzZWVkIGEgdmFsaWQgaW5wdXQgbG9nIGlzIHBvcnRhYmxlLCBzbyBmaXJzdC1zdWJtaXR0ZXIKLy8gd2lucyAocmVwbGF5LXRoZWZ0IGRlZmVuc2UpLiBgc3RhdHNgIGlzIHRoZSBhdHRlc3Rlci1hdXRob3JlZCBwZXItZ2FtZSBKU09OIGJsb2IgKHdhdmVzLCB3aW5zLAovLyBsZXZlbHMsIOKApikg4oCUIG5ldmVyIHJhbmtlZCwgb25seSBlY2hvZWQgYnkgcmVhZHMuCmZ1bmMgQXR0ZXN0U2NvcmUoY3VyIHJlYWxtLCBnYW1lIHN0cmluZywgYWRkciBhZGRyZXNzLCBkYXksIHNlZWQgc3RyaW5nLCBzY29yZSwgc2ltVmVyc2lvbiBpbnQ2NCwgc3RhdGVIYXNoLCBsb2dIYXNoLCBzdGF0cyBzdHJpbmcpIHsKCWFzc2VydE5vdFBhdXNlZCgpCglhc3NlcnRBdHRlc3RlcihjdXIpCglhc3NlcnRFbnRyeVNoYXBlKGdhbWUsIGFkZHIsIGRheSwgImRhaWx5Iiwgc2VlZCwgc2NvcmUsIHNpbVZlcnNpb24sIHN0YXRlSGFzaCwgbG9nSGFzaCwgc3RhdHMpCgoJaGFzaEtleSA6PSBnYW1lICsgInwiICsgZGF5ICsgInwiICsgbG9nSGFzaAoJaWYgdiwgb2sgOj0gbG9nSGFzaGVzLkdldChoYXNoS2V5KTsgb2sgJiYgdi4oc3RyaW5nKSAhPSBhZGRyLlN0cmluZygpIHsKCQlwYW5pYygiZHVwbGljYXRlIGlucHV0IGxvZzogYWxyZWFkeSBhdHRlc3RlZCBmb3IgYW5vdGhlciBhZGRyZXNzIHRvZGF5IikKCX0KCS8vIFRoZSBHTE9CQUwgbmV0OiBhIGxvZyBiaW5kcyB0byBvbmUgYWRkcmVzcyBmb3JldmVyLCBhY3Jvc3MgQk9USCBidWNrZXRzIOKAlAoJLy8gYSBzdG9sZW4gbG9nIGNhbid0IHRha2UgYSBib2FyZCBzbG90IHRvZGF5LCBhIHJlY2VpcHQgdG9tb3Jyb3csIG9yCgkvLyBhbnl0aGluZyB1bmRlciBhIGRpZmZlcmVudCBkYXkgT1IgR0FNRSBzdHJpbmcgKHRoZSByZXZpZXcgcmF0aW9uYWxlCgkvLyBnZW5lcmFsaXplczogbm8gZnJlZS1mb3JtIHN0cmluZyBtYXkgbGF1bmRlciBhIHN0b2xlbiBsb2csIHNvIHRoaXMgdHJlZQoJLy8gZGVsaWJlcmF0ZWx5IHN0YXlzIFVOU0NPUEVEIGJ5IGdhbWUpLgoJYXNzZXJ0SGFzaE93bmVyKGxvZ0hhc2gsIGFkZHIpCgoJa2V5IDo9IGdhbWUgKyAifCIgKyBkYXkgKyAifCIgKyBhZGRyLlN0cmluZygpCglpZiB2LCBvayA6PSBib2FyZHMuR2V0KGtleSk7IG9rIHsKCQlpZiB2LigqRW50cnkpLlNjb3JlID49IHNjb3JlIHsKCQkJcGFuaWMoImV4aXN0aW5nIGVudHJ5IGlzIG5vdCBpbXByb3ZlZCIpCgkJfQoJfSBlbHNlIHsKCQljb3VudEtleSA6PSBnYW1lICsgInwiICsgZGF5CgkJbiA6PSAwCgkJaWYgYywgb2sgOj0gYm9hcmRDb3VudC5HZXQoY291bnRLZXkpOyBvayB7CgkJCW4gPSBjLihpbnQpCgkJfQoJCWJvYXJkQ291bnQuU2V0KGNvdW50S2V5LCBuKzEpCgl9CgoJZSA6PSAmRW50cnl7CgkJQWRkcjogYWRkciwgR2FtZTogZ2FtZSwgRGF5OiBkYXksIE1vZGU6ICJkYWlseSIsIFNlZWQ6IHNlZWQsIFNjb3JlOiBzY29yZSwgU3RhdHM6IHN0YXRzLAoJCVNpbVZlcnNpb246IHNpbVZlcnNpb24sIFN0YXRlSGFzaDogc3RhdGVIYXNoLAoJCUlucHV0TG9nU2hhMjU2OiBsb2dIYXNoLCBBdHRlc3RlZEF0OiBydW50aW1lLkNoYWluSGVpZ2h0KCksCgl9Cglib2FyZHMuU2V0KGtleSwgZSkKCWxvZ0hhc2hlcy5TZXQoaGFzaEtleSwgYWRkci5TdHJpbmcoKSkKCWhhc2hPd25lcnMuU2V0KGxvZ0hhc2gsIGFkZHIuU3RyaW5nKCkpCgljaGFpbi5FbWl0KCJTY29yZUF0dGVzdGVkIiwgImdhbWUiLCBnYW1lLCAiYWRkciIsIGFkZHIuU3RyaW5nKCksICJkYXkiLCBkYXksCgkJInNjb3JlIiwgaXRvYTY0KHNjb3JlKSwgInNpbVZlcnNpb24iLCBpdG9hNjQoc2ltVmVyc2lvbikpCn0KCi8vIEF0dGVzdFJlY2VpcHQgbWludHMgYSBwZXJzb25hbCB0cmFpbmluZyByZWNlaXB0IOKAlCBhIHZlcmlmaWVkICJJIGRpZCB0aGlzIHJ1biIsIG5ldmVyIHJhbmtlZC4KLy8gQXR0ZXN0ZXItb25seTsgY2FwcGVkIHBlciBhZGRyZXNzIHBlciAoZ2FtZSwgZGF5KSBhbmQgcmluZy1jYXBwZWQgcGVyIGFkZHJlc3MuIEZ1bGZpbGxzIChhbmQKLy8gY2xlYXJzKSBhIG1hdGNoaW5nIHBsYXllci1wYWlkIFJlcXVlc3RSZWNlaXB0IGlmIG9uZSBpcyBzdGFnZWQuCmZ1bmMgQXR0ZXN0UmVjZWlwdChjdXIgcmVhbG0sIGdhbWUgc3RyaW5nLCBhZGRyIGFkZHJlc3MsIGRheSwgc2VlZCBzdHJpbmcsIHNjb3JlLCBzaW1WZXJzaW9uIGludDY0LCBzdGF0ZUhhc2gsIGxvZ0hhc2gsIHN0YXRzIHN0cmluZykgewoJYXNzZXJ0Tm90UGF1c2VkKCkKCWFzc2VydEF0dGVzdGVyKGN1cikKCWFzc2VydEVudHJ5U2hhcGUoZ2FtZSwgYWRkciwgZGF5LCAicHJhY3RpY2UiLCBzZWVkLCBzY29yZSwgc2ltVmVyc2lvbiwgc3RhdGVIYXNoLCBsb2dIYXNoLCBzdGF0cykKCgl2YXIgcmluZyBbXSpFbnRyeQoJaWYgdiwgb2sgOj0gcmVjZWlwdHMuR2V0KGFkZHIuU3RyaW5nKCkpOyBvayB7CgkJcmluZyA9IHYuKFtdKkVudHJ5KQoJfQoJc2FtZURheSA6PSAwCglmb3IgXywgciA6PSByYW5nZSByaW5nIHsKCQlpZiByLklucHV0TG9nU2hhMjU2ID09IGxvZ0hhc2ggewoJCQlwYW5pYygiZHVwbGljYXRlIHJlY2VpcHQgZm9yIHRoaXMgaW5wdXQgbG9nIikKCQl9CgkJaWYgci5HYW1lID09IGdhbWUgJiYgci5EYXkgPT0gZGF5IHsKCQkJc2FtZURheSsrCgkJfQoJfQoJaWYgc2FtZURheSA+PSBSZWNlaXB0RGFpbHlDYXAgewoJCXBhbmljKCJyZWNlaXB0IGNhcCByZWFjaGVkIGZvciB0aGlzIGRheSIpCgl9CgkvLyBUaGUgc2FtZSBHTE9CQUwgbmV0IGFzIHRoZSBib2FyZDogYSByZWNlaXB0IGZvciBzb21lb25lIGVsc2UncyBhdHRlc3RlZAoJLy8gbG9nIGlzIGEgZm9yZ2VkICJ2ZXJpZmllZCBmbGV4IiDigJQgcmVqZWN0IGl0LCBhbmQgYmluZCBmaXJzdCB1c2UgaGVyZSB0b28uCglhc3NlcnRIYXNoT3duZXIobG9nSGFzaCwgYWRkcikKCgllIDo9ICZFbnRyeXsKCQlBZGRyOiBhZGRyLCBHYW1lOiBnYW1lLCBEYXk6IGRheSwgTW9kZTogInByYWN0aWNlIiwgU2VlZDogc2VlZCwgU2NvcmU6IHNjb3JlLCBTdGF0czogc3RhdHMsCgkJU2ltVmVyc2lvbjogc2ltVmVyc2lvbiwgU3RhdGVIYXNoOiBzdGF0ZUhhc2gsCgkJSW5wdXRMb2dTaGEyNTY6IGxvZ0hhc2gsIEF0dGVzdGVkQXQ6IHJ1bnRpbWUuQ2hhaW5IZWlnaHQoKSwKCX0KCXJpbmcgPSBhcHBlbmQocmluZywgZSkKCWlmIGxlbihyaW5nKSA+IFJlY2VpcHRzQ2FwIHsKCQlyaW5nID0gcmluZ1tsZW4ocmluZyktUmVjZWlwdHNDYXA6XSAvLyBldmljdCBvbGRlc3QKCX0KCXJlY2VpcHRzLlNldChhZGRyLlN0cmluZygpLCByaW5nKQoJaGFzaE93bmVycy5TZXQobG9nSGFzaCwgYWRkci5TdHJpbmcoKSkKCWNsZWFyUmVxdWVzdChhZGRyLCBsb2dIYXNoKQoJY2hhaW4uRW1pdCgiUmVjZWlwdEF0dGVzdGVkIiwgImdhbWUiLCBnYW1lLCAiYWRkciIsIGFkZHIuU3RyaW5nKCksICJkYXkiLCBkYXksCgkJInNjb3JlIiwgaXRvYTY0KHNjb3JlKSwgInNpbVZlcnNpb24iLCBpdG9hNjQoc2ltVmVyc2lvbikpCn0KCi8vIFJlcXVlc3RSZWNlaXB0IGlzIHRoZSBwbGF5ZXItcGFpZCBsZWc6IEFOWSBzaWduZXIgc3RhZ2VzIGFuIG9uLWNoYWluIGNvbnNlbnQgKyBwYXltZW50IGFuY2hvciBmb3IKLy8gb25lIG9mIHRoZWlyIG93biBydW5zICh0aGV5IHBheSB0aGlzIGNhbGwncyBnYXMpLiBUaGUgYmFja2VuZCBzZWVzIHRoZSBldmVudCwgdmVyaWZpZXMgdGhlIHN0b3JlZAovLyBsb2csIGFuZCBmdWxmaWxscyB2aWEgQXR0ZXN0UmVjZWlwdC4gU2VsZi1saW1pdGluZzogZWFjaCByZXF1ZXN0IGNvc3RzIHRoZSBjYWxsZXIgZ2FzLCBhbmQgb25lCi8vIGtleSBzbG90IHBlciAoYWRkciwgaGFzaCkuIEhhc2gtc2NvcGVkIGFuZCBnYW1lLWFnbm9zdGljIG9uIHB1cnBvc2Ug4oCUIHRoZSB2ZXJpZmllciwgbm90IHRoZQovLyBwbGF5ZXIsIGRlY2lkZXMgd2hpY2ggZ2FtZSB0aGUgbG9nIHJlcGxheXMgdW5kZXIuCmZ1bmMgUmVxdWVzdFJlY2VpcHQoY3VyIHJlYWxtLCBsb2dIYXNoIHN0cmluZykgewoJYXNzZXJ0Tm90UGF1c2VkKCkKCWlmICFjdXIuSXNDdXJyZW50KCkgewoJCXBhbmljKCJzcG9vZmVkIHJlYWxtIikKCX0KCWlmIGxvZ0hhc2ggPT0gIiIgewoJCXBhbmljKCJsb2dIYXNoIG11c3QgYmUgbm9uLWVtcHR5IikKCX0KCWNhbGxlciA6PSBjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkKCWtleSA6PSBjYWxsZXIuU3RyaW5nKCkgKyAifCIgKyBsb2dIYXNoCglpZiBfLCBvayA6PSByZXF1ZXN0cy5HZXQoa2V5KTsgIW9rIHsKCQluIDo9IDAKCQlpZiBjLCBvayA6PSByZXF1ZXN0Q291bnQuR2V0KGNhbGxlci5TdHJpbmcoKSk7IG9rIHsKCQkJbiA9IGMuKGludCkKCQl9CgkJaWYgbiA+PSBSZXF1ZXN0Q2FwIHsKCQkJcGFuaWMoInBlbmRpbmcgcmVxdWVzdCBjYXAgcmVhY2hlZCDigJQgd2FpdCBmb3IgZnVsZmlsbG1lbnQiKQoJCX0KCQlyZXF1ZXN0Q291bnQuU2V0KGNhbGxlci5TdHJpbmcoKSwgbisxKQoJfQoJcmVxdWVzdHMuU2V0KGtleSwgcnVudGltZS5DaGFpbkhlaWdodCgpKQoJY2hhaW4uRW1pdCgiUmVjZWlwdFJlcXVlc3RlZCIsICJhZGRyIiwgY2FsbGVyLlN0cmluZygpLCAibG9nSGFzaCIsIGxvZ0hhc2gpCn0KCi8vIGFzc2VydEhhc2hPd25lciBlbmZvcmNlcyB0aGUgR0xPQkFMIG9uZS1sb2ctb25lLWFkZHJlc3MgcnVsZSBzaGFyZWQgYnkgYm90aAovLyBidWNrZXRzIChhbmQgYnkgZXZlcnkgZ2FtZSksIGFuZCBpcyBpZGVtcG90ZW50IGZvciB0aGUgcmlnaHRmdWwgb3duZXIKLy8gKFNlY29uZCBXaW5kIHJlLWF0dGVzdHMpLgpmdW5jIGFzc2VydEhhc2hPd25lcihsb2dIYXNoIHN0cmluZywgYWRkciBhZGRyZXNzKSB7CglpZiB2LCBvayA6PSBoYXNoT3duZXJzLkdldChsb2dIYXNoKTsgb2sgJiYgdi4oc3RyaW5nKSAhPSBhZGRyLlN0cmluZygpIHsKCQlwYW5pYygiZHVwbGljYXRlIGlucHV0IGxvZzogYWxyZWFkeSBib3VuZCB0byBhbm90aGVyIGFkZHJlc3MiKQoJfQp9CgovLyBjbGVhclJlcXVlc3QgcmVtb3ZlcyBhIGZ1bGZpbGxlZCByZXF1ZXN0IGFuZCBmcmVlcyB0aGUgY2FsbGVyJ3MgY2FwIHNsb3QuCmZ1bmMgY2xlYXJSZXF1ZXN0KGFkZHIgYWRkcmVzcywgbG9nSGFzaCBzdHJpbmcpIHsKCWtleSA6PSBhZGRyLlN0cmluZygpICsgInwiICsgbG9nSGFzaAoJaWYgXywgb2sgOj0gcmVxdWVzdHMuR2V0KGtleSk7ICFvayB7CgkJcmV0dXJuCgl9CglyZXF1ZXN0cy5SZW1vdmUoa2V5KQoJaWYgYywgb2sgOj0gcmVxdWVzdENvdW50LkdldChhZGRyLlN0cmluZygpKTsgb2sgewoJCWlmIG4gOj0gYy4oaW50KTsgbiA+IDEgewoJCQlyZXF1ZXN0Q291bnQuU2V0KGFkZHIuU3RyaW5nKCksIG4tMSkKCQl9IGVsc2UgewoJCQlyZXF1ZXN0Q291bnQuUmVtb3ZlKGFkZHIuU3RyaW5nKCkpCgkJfQoJfQp9CgpmdW5jIGl0b2E2NChuIGludDY0KSBzdHJpbmcgeyByZXR1cm4gdWZtdC5TcHJpbnRmKCIlZCIsIG4pIH0KCmZ1bmMgYm9vbFN0cihiIGJvb2wpIHN0cmluZyB7CglpZiBiIHsKCQlyZXR1cm4gInRydWUiCgl9CglyZXR1cm4gImZhbHNlIgp9ChqJAwoNcHVibGlzaGVyLmdubxL3AnBhY2thZ2UgbWVtYmFfYXJjYWRlX2xlYWRlcmJvYXJkX3YxCgppbXBvcnQgImNoYWluL3J1bnRpbWUvdW5zYWZlIgoKLy8gcHVibGlzaGVyQXRMb2FkIGNhcHR1cmVzIHRoZSBBZGRQYWNrYWdlIHNpZ25lciBkdXJpbmcgcGFja2FnZSBpbml0aWFsaXphdGlvbi4KLy8gS2VlcGluZyB0aGUgdW5zYWZlIGxvYWQtdGltZSBwcmltaXRpdmUgc2VwYXJhdGUgZnJvbSBjcm9zc2luZyBlbnRyeXBvaW50cyBsZXRzCi8vIHByaXZpbGVnZWQgY2FsbHMgdXNlIG9ubHkgdGhlIGZyYW1lLXZlcmlmaWVkIGN1ci5Jc0N1cnJlbnQvY3VyLlByZXZpb3VzIEFQSS4KZnVuYyBwdWJsaXNoZXJBdExvYWQoKSBhZGRyZXNzIHsgcmV0dXJuIHVuc2FmZS5PcmlnaW5DYWxsZXIoKSB9Chr0MQoJcmVhZHMuZ25vEuYxcGFja2FnZSBtZW1iYV9hcmNhZGVfbGVhZGVyYm9hcmRfdjEKCmltcG9ydCAoCgkic3RyaW5ncyIKCgkiZ25vLmxhbmQvcC9udC91Zm10L3YwIgopCgovLyDilIDilIAgUmVhZCBnZXR0ZXJzIChwdXJlLCBub24tZmFpbGluZzsgc2VydmVkIHZpYSB2bS9xZXZhbCBvciBSZW5kZXIpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKLy8gR2V0T3duZXIgcmV0dXJucyB0aGUgY3VycmVudCBvd25lci4KZnVuYyBHZXRPd25lcigpIGFkZHJlc3MgeyByZXR1cm4gb3duZXIgfQoKLy8gSXNQYXVzZWQgcmVwb3J0cyB3aGV0aGVyIGF0dGVzdGF0aW9uIGlzIGZyb3plbi4KZnVuYyBJc1BhdXNlZCgpIGJvb2wgeyByZXR1cm4gcGF1c2VkIH0KCi8vIElzQXR0ZXN0ZXIgcmVwb3J0cyB3aGV0aGVyIGFuIGFkZHJlc3MgaXMgb24gdGhlIGF0dGVzdGVyIGFsbG93bGlzdC4KZnVuYyBJc0F0dGVzdGVyKGFkZHIgc3RyaW5nKSBib29sIHsgcmV0dXJuIGlzQXR0ZXN0ZXIoYWRkcikgfQoKLy8gQm9hcmRDb3VudCByZXR1cm5zIGhvdyBtYW55IGFkZHJlc3NlcyBob2xkIGFuIGVudHJ5IG9uIGEgZ2FtZSdzIGJvYXJkIGZvciBhIGRheSAoTygxKSkuCmZ1bmMgQm9hcmRDb3VudChnYW1lLCBkYXkgc3RyaW5nKSBpbnQgewoJaWYgdiwgb2sgOj0gYm9hcmRDb3VudC5HZXQoZ2FtZSArICJ8IiArIGRheSk7IG9rIHsKCQlyZXR1cm4gdi4oaW50KQoJfQoJcmV0dXJuIDAKfQoKLy8gZW50cnlKU09OIGVtaXRzIG9uZSBlbnRyeS4gYHN0YXRzYCBpcyB0aGUgYXR0ZXN0ZXIncyBvcGFxdWUgSlNPTiBibG9iIGFuZCBpcyBlbWl0dGVkIGFzIGFuCi8vIEVTQ0FQRUQgU1RSSU5HIEZJRUxEIOKAlCBuZXZlciBzcGxpY2VkIHJhdyBpbnRvIHRoZSBkb2N1bWVudCDigJQgc28gYSBtYWxmb3JtZWQgYmxvYiBjYW4gY29ycnVwdAovLyBub3RoaW5nIGJ1dCBpdHNlbGYuCmZ1bmMgZW50cnlKU09OKGUgKkVudHJ5KSBzdHJpbmcgewoJcmV0dXJuIHVmbXQuU3ByaW50ZigKCQlgeyJhZGRyIjoiJXMiLCJnYW1lIjoiJXMiLCJkYXkiOiIlcyIsIm1vZGUiOiIlcyIsInNjb3JlIjolZCwic3RhdHMiOiIlcyIsInNpbVZlcnNpb24iOiVkLCJzdGF0ZUhhc2giOiIlcyIsImlucHV0TG9nU2hhMjU2IjoiJXMiLCJhdHRlc3RlZEF0IjolZH1gLAoJCWpzb25Fc2NhcGUoZS5BZGRyLlN0cmluZygpKSwganNvbkVzY2FwZShlLkdhbWUpLCBqc29uRXNjYXBlKGUuRGF5KSwganNvbkVzY2FwZShlLk1vZGUpLAoJCWUuU2NvcmUsIGpzb25Fc2NhcGUoZS5TdGF0cyksIGUuU2ltVmVyc2lvbiwganNvbkVzY2FwZShlLlN0YXRlSGFzaCksCgkJanNvbkVzY2FwZShlLklucHV0TG9nU2hhMjU2KSwgZS5BdHRlc3RlZEF0KQp9CgovLyBHZXRFbnRyeUpTT04gcmV0dXJucyBvbmUgYWRkcmVzcydzIGJvYXJkIGVudHJ5IGZvciBhIGdhbWUtZGF5LCBvciAibnVsbCIuCmZ1bmMgR2V0RW50cnlKU09OKGdhbWUsIGRheSwgYWRkciBzdHJpbmcpIHN0cmluZyB7CglpZiB2LCBvayA6PSBib2FyZHMuR2V0KGdhbWUgKyAifCIgKyBkYXkgKyAifCIgKyBhZGRyKTsgb2sgewoJCXJldHVybiBlbnRyeUpTT04odi4oKkVudHJ5KSkKCX0KCXJldHVybiAibnVsbCIKfQoKLy8gZGF5RW50cmllcyBjb2xsZWN0cyBhIGdhbWUtZGF5J3MgYm9hcmQgZW50cmllcyBpbiBjYW5vbmljYWwgcmFuayBvcmRlcjogc2NvcmUgZGVzYywKLy8gdGhlbiBlYXJsaWVyIGF0dGVzdGF0aW9uLCB0aGVuIGFkZHJlc3Mg4oCUIGEgdG90YWwgb3JkZXIsIHNvIHBhZ2luYXRpb24gaXMgc3RhYmxlLgpmdW5jIGRheUVudHJpZXMoZ2FtZSwgZGF5IHN0cmluZykgW10qRW50cnkgewoJdmFyIG91dCBbXSpFbnRyeQoJcHJlZml4IDo9IGdhbWUgKyAifCIgKyBkYXkgKyAifCIKCWJvYXJkcy5JdGVyYXRlKHByZWZpeCwgcHJlZml4KyJ+IiwgZnVuYyhfIHN0cmluZywgdiBhbnkpIGJvb2wgewoJCW91dCA9IGFwcGVuZChvdXQsIHYuKCpFbnRyeSkpCgkJcmV0dXJuIGZhbHNlCgl9KQoJLy8gSW5zZXJ0aW9uIHNvcnQgKGdubyBzdGRsaWIgaGFzIG5vIHNvcnQuU2xpY2UpOiBhIGRheSdzIGJvYXJkIGlzIGJvdW5kZWQKCS8vIGFuZCByZWFkcyBhcmUgcWV2YWwtc2lkZSDigJQgTyhuwrIpIG9uIGEgZmV3IGh1bmRyZWQgZW50cmllcyBpcyBmaW5lLgoJZm9yIGkgOj0gMTsgaSA8IGxlbihvdXQpOyBpKysgewoJCWUgOj0gb3V0W2ldCgkJaiA6PSBpIC0gMQoJCWZvciBqID49IDAgJiYgcmFua3NBZnRlcihvdXRbal0sIGUpIHsKCQkJb3V0W2orMV0gPSBvdXRbal0KCQkJai0tCgkJfQoJCW91dFtqKzFdID0gZQoJfQoJcmV0dXJuIG91dAp9CgovLyByYW5rc0FmdGVyIHJlcG9ydHMgd2hldGhlciBhIHNob3VsZCBzaXQgQUZURVIgYiBpbiByYW5rIG9yZGVyIOKAlCBhIHRvdGFsCi8vIG9yZGVyIChzY29yZSBkZXNjLCB0aGVuIGVhcmxpZXIgYXR0ZXN0YXRpb24sIHRoZW4gYWRkcmVzcykgc28gcGFnaW5hdGlvbgovLyBpcyBzdGFibGUgYW5kIGlkZW50aWNhbCBldmVyeXdoZXJlLgpmdW5jIHJhbmtzQWZ0ZXIoYSwgYiAqRW50cnkpIGJvb2wgewoJaWYgYS5TY29yZSAhPSBiLlNjb3JlIHsKCQlyZXR1cm4gYS5TY29yZSA8IGIuU2NvcmUKCX0KCWlmIGEuQXR0ZXN0ZWRBdCAhPSBiLkF0dGVzdGVkQXQgewoJCXJldHVybiBhLkF0dGVzdGVkQXQgPiBiLkF0dGVzdGVkQXQKCX0KCXJldHVybiBhLkFkZHIuU3RyaW5nKCkgPiBiLkFkZHIuU3RyaW5nKCkKfQoKLy8gR2V0Qm9hcmRKU09OIHJldHVybnMgYSBwYWdlIG9mIGEgZ2FtZS1kYXkncyBib2FyZCwgcmFuay1vcmRlcmVkLCBhcwovLyB7ImdhbWUiOuKApiwiZGF5IjrigKYsInRvdGFsIjpOLCJlbnRyaWVzIjpb4oCmXX0uIFJlYWRzIHNvcnQgdGhlIGRheSdzIGVudHJpZXMgb24gZGVtYW5kIOKAlAovLyBmaW5lIGZvciBhIHRlc3RuZXQtc2NhbGUgYm9hcmQ7IGEgcmFuayBpbmRleCAocG9pbnRzX3YxLXN0eWxlKSBpcyB0aGUgdjIKLy8gdXBncmFkZSBpZiBkYWlseSBib2FyZHMgZ3JvdyBwYXN0IGEgZmV3IHRob3VzYW5kIGVudHJpZXMuCmZ1bmMgR2V0Qm9hcmRKU09OKGdhbWUsIGRheSBzdHJpbmcsIG9mZnNldCwgbGltaXQgaW50KSBzdHJpbmcgewoJYWxsIDo9IGRheUVudHJpZXMoZ2FtZSwgZGF5KQoJaWYgb2Zmc2V0IDwgMCB7CgkJb2Zmc2V0ID0gMAoJfQoJaWYgbGltaXQgPD0gMCB8fCBsaW1pdCA+IDEwMCB7CgkJbGltaXQgPSAxMDAKCX0KCXZhciBzYiBzdHJpbmdzLkJ1aWxkZXIKCXNiLldyaXRlU3RyaW5nKHVmbXQuU3ByaW50ZihgeyJnYW1lIjoiJXMiLCJkYXkiOiIlcyIsInRvdGFsIjolZCwiZW50cmllcyI6W2AsCgkJanNvbkVzY2FwZShnYW1lKSwganNvbkVzY2FwZShkYXkpLCBsZW4oYWxsKSkpCglmb3IgaSA6PSBvZmZzZXQ7IGkgPCBsZW4oYWxsKSAmJiBpIDwgb2Zmc2V0K2xpbWl0OyBpKysgewoJCWlmIGkgPiBvZmZzZXQgewoJCQlzYi5Xcml0ZVN0cmluZygiLCIpCgkJfQoJCXNiLldyaXRlU3RyaW5nKGVudHJ5SlNPTihhbGxbaV0pKQoJfQoJc2IuV3JpdGVTdHJpbmcoIl19IikKCXJldHVybiBzYi5TdHJpbmcoKQp9CgovLyBHZXRSZWNlaXB0c0pTT04gcmV0dXJucyBhIHBhZ2Ugb2Ygb25lIGFkZHJlc3MncyB0cmFpbmluZyByZWNlaXB0cyAoYWxsIGdhbWVzLCBuZXdlc3QgZmlyc3QpIGFzCi8vIHsiYWRkciI64oCmLCJ0b3RhbCI6TiwiZW50cmllcyI6W+KApl19LgpmdW5jIEdldFJlY2VpcHRzSlNPTihhZGRyIHN0cmluZywgb2Zmc2V0LCBsaW1pdCBpbnQpIHN0cmluZyB7Cgl2YXIgcmluZyBbXSpFbnRyeQoJaWYgdiwgb2sgOj0gcmVjZWlwdHMuR2V0KGFkZHIpOyBvayB7CgkJcmluZyA9IHYuKFtdKkVudHJ5KQoJfQoJaWYgb2Zmc2V0IDwgMCB7CgkJb2Zmc2V0ID0gMAoJfQoJaWYgbGltaXQgPD0gMCB8fCBsaW1pdCA+IDEwMCB7CgkJbGltaXQgPSAxMDAKCX0KCXZhciBzYiBzdHJpbmdzLkJ1aWxkZXIKCXNiLldyaXRlU3RyaW5nKHVmbXQuU3ByaW50ZihgeyJhZGRyIjoiJXMiLCJ0b3RhbCI6JWQsImVudHJpZXMiOltgLCBqc29uRXNjYXBlKGFkZHIpLCBsZW4ocmluZykpKQoJbiA6PSAwCglmb3IgaSA6PSBsZW4ocmluZykgLSAxIC0gb2Zmc2V0OyBpID49IDAgJiYgbiA8IGxpbWl0OyBpLS0gewoJCWlmIG4gPiAwIHsKCQkJc2IuV3JpdGVTdHJpbmcoIiwiKQoJCX0KCQlzYi5Xcml0ZVN0cmluZyhlbnRyeUpTT04ocmluZ1tpXSkpCgkJbisrCgl9CglzYi5Xcml0ZVN0cmluZygiXX0iKQoJcmV0dXJuIHNiLlN0cmluZygpCn0KCi8vIFJlbmRlciBzZXJ2ZXMgYSBodW1hbi1yZWFkYWJsZSBzbmFwc2hvdDogYDpib2FyZC88Z2FtZT4vWVlZWS1NTS1ERGAgZm9yIGEgZ2FtZS1kYXkncyB0b3AKLy8gZW50cmllcywgYDpyZWNlaXB0cy88YWRkcj5gIGZvciBhbiBhZGRyZXNzJ3MgbGF0ZXN0IHJlY2VpcHRzLgpmdW5jIFJlbmRlcihwYXRoIHN0cmluZykgc3RyaW5nIHsKCWlmIHN0cmluZ3MuSGFzUHJlZml4KHBhdGgsICJib2FyZC8iKSB7CgkJcmVzdCA6PSBwYXRoW2xlbigiYm9hcmQvIik6XQoJCXNsYXNoIDo9IHN0cmluZ3MuSW5kZXgocmVzdCwgIi8iKQoJCWlmIHNsYXNoIDwgMCB7CgkJCXJldHVybiAiIyBtZW1iYV9hcmNhZGVfbGVhZGVyYm9hcmRfdjFcblxuVXNlIGA6Ym9hcmQvPGdhbWU+L1lZWVktTU0tRERgLlxuIgoJCX0KCQlnYW1lIDo9IHJlc3RbOnNsYXNoXQoJCWRheSA6PSByZXN0W3NsYXNoKzE6XQoJCWFsbCA6PSBkYXlFbnRyaWVzKGdhbWUsIGRheSkKCQl2YXIgc2Igc3RyaW5ncy5CdWlsZGVyCgkJc2IuV3JpdGVTdHJpbmcoIiMgIiArIGpzb25Fc2NhcGUoZ2FtZSkgKyAiIGRhaWx5IGJvYXJkIOKAlCAiICsganNvbkVzY2FwZShkYXkpICsgIlxuXG4iKQoJCWlmIGxlbihhbGwpID09IDAgewoJCQlzYi5Xcml0ZVN0cmluZygiTm8gYXR0ZXN0ZWQgcnVucyB5ZXQuXG4iKQoJCQlyZXR1cm4gc2IuU3RyaW5nKCkKCQl9CgkJZm9yIGksIGUgOj0gcmFuZ2UgYWxsIHsKCQkJaWYgaSA+PSA1MCB7CgkJCQlzYi5Xcml0ZVN0cmluZyh1Zm10LlNwcmludGYoIlxu4oCmYW5kICVkIG1vcmUuXG4iLCBsZW4oYWxsKS01MCkpCgkJCQlicmVhawoJCQl9CgkJCWxpbmUgOj0gdWZtdC5TcHJpbnRmKCIlZC4gYCVzYCDigJQgKiolZCoqIiwgaSsxLCBlLkFkZHIuU3RyaW5nKCksIGUuU2NvcmUpCgkJCWlmIGUuU3RhdHMgIT0gIiIgewoJCQkJbGluZSArPSAiIMK3ICIgKyBqc29uRXNjYXBlKGUuU3RhdHMpCgkJCX0KCQkJc2IuV3JpdGVTdHJpbmcobGluZSArICJcbiIpCgkJfQoJCXJldHVybiBzYi5TdHJpbmcoKQoJfQoJaWYgc3RyaW5ncy5IYXNQcmVmaXgocGF0aCwgInJlY2VpcHRzLyIpIHsKCQlhZGRyIDo9IHBhdGhbbGVuKCJyZWNlaXB0cy8iKTpdCgkJcmV0dXJuICIjIFRyYWluaW5nIHJlY2VpcHRzIOKAlCAiICsgYWRkciArICJcblxuYGBganNvblxuIiArIEdldFJlY2VpcHRzSlNPTihhZGRyLCAwLCAyMCkgKyAiXG5gYGBcbiIKCX0KCXJldHVybiAiIyBtZW1iYV9hcmNhZGVfbGVhZGVyYm9hcmRfdjFcblxuVmVyaWZpZWQgTWVtYmEgYXJjYWRlIHJlc3VsdHMg4oCUIG5ldmVyIGEgY2xpZW50LWNsYWltZWQgbnVtYmVyLlxuXG4iICsKCQkiLSBgOmJvYXJkLzxnYW1lPi9ZWVlZLU1NLUREYCDigJQgYSBnYW1lJ3MgY29tcGV0aXRpdmUgYm9hcmQgZm9yIGEgZGF5XG4iICsKCQkiLSBgOnJlY2VpcHRzLzxhZGRyPmAg4oCUIGFuIGFkZHJlc3MncyB0cmFpbmluZyByZWNlaXB0cyAoYWxsIGdhbWVzKVxuIgp9CgovLyBqc29uRXNjYXBlIGVzY2FwZXMgYSBzdHJpbmcgZm9yIGVtYmVkZGluZyBpbiBhIEpTT04gc3RyaW5nIGxpdGVyYWwgKGRlZmVuc2l2ZSDigJQgYWRkcmVzc2VzIGFyZQovLyBiZWNoMzIgYW5kIGhhc2hlcyBhcmUgaGV4LCBidXQgdGhlIHJlYWQgcGF0aCBlc2NhcGVzIHJlZ2FyZGxlc3M7IHRoZSBSZW5kZXIgcGF0aCByZXVzZXMgaXQgdG8KLy8gbmV1dHJhbGl6ZSBuZXdsaW5lcy9jb250cm9sIGNoYXJzIGluIGF0dGVzdGVyLWF1dGhvcmVkIHN0YXRzKS4KZnVuYyBqc29uRXNjYXBlKHMgc3RyaW5nKSBzdHJpbmcgewoJdmFyIHNiIHN0cmluZ3MuQnVpbGRlcgoJZm9yIF8sIHIgOj0gcmFuZ2UgcyB7CgkJc3dpdGNoIHIgewoJCWNhc2UgJyInOgoJCQlzYi5Xcml0ZVN0cmluZygiXFxcIiIpCgkJY2FzZSAnXFwnOgoJCQlzYi5Xcml0ZVN0cmluZygiXFxcXCIpCgkJY2FzZSAnXG4nOgoJCQlzYi5Xcml0ZVN0cmluZygiXFxuIikKCQljYXNlICdccic6CgkJCXNiLldyaXRlU3RyaW5nKCJcXHIiKQoJCWNhc2UgJ1x0JzoKCQkJc2IuV3JpdGVTdHJpbmcoIlxcdCIpCgkJZGVmYXVsdDoKCQkJaWYgciA8IDB4MjAgewoJCQkJc2IuV3JpdGVTdHJpbmcodWZtdC5TcHJpbnRmKCJcXHUlMDR4IiwgcikpCgkJCX0gZWxzZSB7CgkJCQlzYi5Xcml0ZVN0cmluZyhzdHJpbmcocikpCgkJCX0KCQl9Cgl9CglyZXR1cm4gc2IuU3RyaW5nKCkKfQoiIgoTL2duby5NZW1QYWNrYWdlVHlwZRILCglNUFVzZXJBbGwiDDkwMDAwMDB1Z25vdBISCICcnDkSCzEyMDAwMHVnbm90GogDCs0BChIvdG0uUHViS2V5TXVsdGlzaWcStgEIAhI6ChMvdG0uUHViS2V5U2VjcDI1NmsxEiMKIQNdTsrzjy2oA1bKxxCiASBMVUReZbe8FQo/n1GUQS9f7RI6ChMvdG0uUHViS2V5U2VjcDI1NmsxEiMKIQMo44neuGQmEOBJpWfwt5YFd/18PcgdS1Pidavq3ZGmeBI6ChMvdG0uUHViS2V5U2VjcDI1NmsxEiMKIQMg5X9eKuwtmgamq/0K8oenVUfVQAsVWVenzmjN1+WBABKLAQoFCAMSAaASQJ/DcPhQytcGYVKFV5kuZikoHrMGTxFKBB1vfYKEF7KAQ9n5E65whW/LPrOqvsRLLsJrcDQPwvKb2G6XtXcg0+MSQA51sy+VIfbtRYNNTz4lktN7mgIlwciCnUuhIUrkPjwlbvnBmGqaTpEQVdscR/yptU7Je7KsfTWdZ8NLOmVhfToaKGcxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxbHV1eGU=

Raw transaction data

Raw JSON data