Transaction executed successfully

Transaction Details

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

Transaction hash
B1B2EC51F31B77B896F106FEC450637F109B56FA86531B5E542FCD300CD0916D

Transaction overview

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

Execution summary

TX INDEX
0
Position in block
GAS WANTED
65,924,000
Requested gas limit
GAS USED
28,666,715
Gas consumed
FEE
197772ugnot
Transaction fee

Participants

Sender
Package / Realm
Not available
Memo
None

Message

Message #1
m_addpkg
Caller
Arguments
g1manfred47kzduec920z88wfr64ylksmdcedlf59000000ugnot

Execution log

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

Events

No events emitted by this transaction.

Raw encoded transaction

CqyjAQoML3ZtLm1fYWRkcGtnEpqjAQooZzFtYW5mcmVkNDdremR1ZWM5MjB6ODh3ZnI2NHlsa3NtZGNlZGxmNRLeogEKCGRldnRvb2xzEiZnbm8ubGFuZC9yL21vdWwveC9hbGxpbm9uZS9kZXZ0b29scy92MBqgGwoJUkVBRE1FLm1kEpIbIyBgZ25vLmxhbmQvci9tb3VsL3gvYWxsaW5vbmUvZGV2dG9vbHNgCgpUaGUgd29ya2VkIGV4YW1wbGUgb2Ygd2lyaW5nIG1vdWwncyBkZXZlbG9wZXIgcGFja2FnZXMgaW50byBvbmUgcmVhbG06IHdoYXQgYQpuZXcgcmVhbG0gc2hvdWxkIGNvcHkuCgpFaWdodCBwYWNrYWdlcywgZWFjaCBlYXJuaW5nIGl0cyBwbGFjZSBpbiB0aGUgb3V0cHV0OgoKfCBwYWNrYWdlIHwgd2hhdCBpdCBjb250cmlidXRlcyB8CnwtLS18LS0tfAp8IFtgci9tb3VsL2NvbmZpZ2BdKC4uLy4uLy4uL2NvbmZpZykgfCB0aGUgbm90aWNlIGJsb2NrLCB0aGUgcGF1c2UgZ3VhcmQsIHdoaWNoIGV4cGxvcmVyIHRvIGxpbmsgfAp8IFtgcC9tb3VsL215Z25vc2NhbmBdKC4uLy4uLy4uLy4uL3AvbW91bC9teWdub3NjYW4pIHwgdGhlIGV4cGxvcmVyIHJvdXRlcyB8CnwgW2BwL21vdWwvZGVidWdgXSguLi8uLi8uLi8uLi9wL21vdWwvZGVidWcpIHwgdGhlIGA/ZGVidWc9MWAgcGFuZWwgfAp8IFtgcC9tb3VsL3JlYWxtcGF0aGBdKC4uLy4uLy4uLy4uL3AvbW91bC9yZWFsbXBhdGgpIHwgcmVhZGluZyB0aGUgcmVuZGVyIHBhdGggfAp8IFtgcC9tb3VsL2tpdC91aWBdKC4uLy4uLy4uLy4uL3AvbW91bC9raXQvdWkpIHwgZXNjYXBpbmcgY2FsbGVyIGlucHV0LCBhbmQgdGhlIHRhYmxlcyB8CnwgW2BwL21vdWwvbWRgXSguLi8uLi8uLi8uLi9wL21vdWwvbWQpIHwgdGhlIG1hcmtkb3duIHwKfCBbYHAvbW91bC90eGxpbmtgXSguLi8uLi8uLi8uLi9wL21vdWwvdHhsaW5rKSB8IHRoZSBjYWxsIGxpbmtzIHwKfCBbYHAvbW91bC9maWZvYF0oLi4vLi4vLi4vLi4vcC9tb3VsL2ZpZm8pIHwgdGhlIGJvdW5kZWQgbm90ZSBsaXN0IHwKCiMjIFRoZSB0aHJlZSBsaW5lcyB3b3J0aCBjb3B5aW5nCgpgYGBnbwpmdW5jIFJlbmRlcihwYXRoIHN0cmluZykgc3RyaW5nIHsKCXJldHVybiBjb25maWcuVG9wQmxvY2tGb3IocmVhbG1QYXRoKSArIGJvZHkgKyBjb25maWcuQm90dG9tQmxvY2tGb3IocmVhbG1QYXRoKQp9CgpmdW5jIEFkZChjdXIgcmVhbG0sIGJvZHkgc3RyaW5nKSB7Cgljb25maWcuQXNzZXJ0V3JpdGFibGVGb3IocmVhbG1QYXRoKSAgLy8gaG9ub3VycyB0aGUgcGF1c2Ugc3dpdGNoCglub3Rlcy5BcHBlbmQodWkuSW5saW5lKGJvZHkpKSAgICAgICAgLy8gZXNjYXBlcyB3aGF0IGEgY2FsbGVyIHR5cGVkCn0KYGBgCgpUaGUgZmlyc3QgZ2l2ZXMgdGhlIHJlYWxtIGEgcGxhY2UgZm9yIGEgd2FybmluZyBhbmQgYSBwYXVzZSBiYW5uZXIgd2l0aG91dApzaGlwcGluZyBhbnkgYmFubmVyIGNvZGUsIGFuZCByZXR1cm5zIGAiImAgd2hpbGUgbm90aGluZyBpcyBzZXQsIHNvIGEgcGFnZSB0aGF0CmNvbmNhdGVuYXRlcyBpdCB1bmNvbmRpdGlvbmFsbHkgaXMgdW5jaGFuZ2VkIGJ5IGRlZmF1bHQuCgpUaGUgc2Vjb25kIGlzIHR3byBzZXBhcmF0ZSBndWFyZHMgYW5kIGJvdGggaGF2ZSB0byBiZSB0aGVyZTogdGhlIHBhdXNlIG9uZSBzbwphbiBpbmNpZGVudCBjYW4gc3RvcCB3cml0ZXMgZnJvbSBvdXRzaWRlIHRoaXMgcmVhbG0gYW5kIHdpdGhvdXQgYSByZWRlcGxveSwgYW5kCnRoZSBlc2NhcGluZyBvbmUgYmVjYXVzZSBhIHN0cmluZyBhIGNhbGxlciB0eXBlZCBpcyB0aGUgb2xkZXN0IHdheSB0byBicmVhayBhCnBhZ2UuCgojIyBUd28gdmlld3MKCmBSZW5kZXIoIiIpYCBpcyB0aGUgcm9vdCBhbmQgaXMgZnJlZSBvZiBhbnl0aGluZyB0aGF0IG1vdmVzLCBzbyBhbiBleGFtcGxlIHRlc3QKY2FuIHBpbiBpdC4gRXZlcnl0aGluZyBsaXZlICh0aGUgaGVpZ2h0LCB0aGUgY2hhaW4gaWQsIHRoZSBsaW5rcyBidWlsdCBmcm9tCnRoZW0pIGlzIHVuZGVyIGA6Y2hhaW5gLCB3aGljaCBpcyBhbHNvIHdoYXQga2VlcHMgdGhlIHBpbm5lZCBvdXRwdXQgc3RhYmxlLgoKU3RhdGUgaXMgZGlzcG9zYWJsZTogdGhlIG5vdGUgbGlzdCBpcyBib3VuZGVkIGJ5IGBmaWZvYCBhdCAxMCBlbnRyaWVzIGFuZCB0aGlzCnJlYWxtIGlzIGBwcml2YXRlID0gdHJ1ZWAsIHNvIGEgcmVkZXBsb3kgd2lwZXMgaXQgb24gcHVycG9zZS4KCjwhLS0gQkVHSU4gR05PQ09OVFJBQ1RTIEZPT1RFUiAoZ2VuZXJhdGVkIGJ5IGBtYWtlIHJlYWRtZXNgOyBkbyBub3QgZWRpdCBiZWxvdykgLS0+CgotLS0KClBhcnQgb2YgKipbbW91bC9nbm8tY29udHJhY3RzXShodHRwczovL2dpdGh1Yi5jb20vbW91bC9nbm8tY29udHJhY3RzKSoqIOKAlCBtb3VsJ3MgdmVyc2lvbmVkIGduby5sYW5kIGNvbnRyYWN0cy4gU2VlIHRoZSByZXBvc2l0b3J5IGZvciB0aGUgZnVsbCBjYXRhbG9nLCBidWlsZC90ZXN0IHRvb2xpbmcsIGFuZCB1c2FnZS4KCioqT24gbWFpbm5ldDoqKiBbIVtkZXBsb3ltZW50IHN0YXR1c10oaHR0cHM6Ly9nbm9zY29wZS5jb20vX2JhZGdlcy9zaGllbGQvc3RhdHVzL3IvbW91bC94L2FsbGlub25lL2RldnRvb2xzL3YwP25ldHdvcms9bWFpbm5ldCldKGh0dHBzOi8vZ25vc2NvcGUuY29tL3JlYWxtL3IvbW91bC94L2FsbGlub25lL2RldnRvb2xzL3YwKSBbIVt0cmFuc2FjdGlvbnNdKGh0dHBzOi8vZ25vc2NvcGUuY29tL19iYWRnZXMvc2hpZWxkL3R4cy9yL21vdWwveC9hbGxpbm9uZS9kZXZ0b29scy92MD9uZXR3b3JrPW1haW5uZXQpXShodHRwczovL2dub3Njb3BlLmNvbS9yZWFsbS9yL21vdWwveC9hbGxpbm9uZS9kZXZ0b29scy92MCkgWyFbdW5pcXVlIGNhbGxlcnNdKGh0dHBzOi8vZ25vc2NvcGUuY29tL19iYWRnZXMvc2hpZWxkL3VzZXJzL3IvbW91bC94L2FsbGlub25lL2RldnRvb2xzL3YwP25ldHdvcms9bWFpbm5ldCldKGh0dHBzOi8vZ25vc2NvcGUuY29tL3JlYWxtL3IvbW91bC94L2FsbGlub25lL2RldnRvb2xzL3YwKSBbIVtkZXBsb3llZCByZXZpc2lvbl0oaHR0cHM6Ly9nbm9zY29wZS5jb20vX2JhZGdlcy9zaGllbGQvdmVyc2lvbi9yL21vdWwveC9hbGxpbm9uZS9kZXZ0b29scy92MD9uZXR3b3JrPW1haW5uZXQpXShodHRwczovL2dub3Njb3BlLmNvbS9yZWFsbS9yL21vdWwveC9hbGxpbm9uZS9kZXZ0b29scy92MCkKCioqRGVwZW5kZW5jeSBncmFwaDoqKgoKIVtnbm8ubGFuZC9yL21vdWwveC9hbGxpbm9uZS9kZXZ0b29scy92MCBkZXBlbmRlbmN5IGdyYXBoXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW91bC9nbm8tY29udHJhY3RzL21haW4vX2Fzc2V0cy9nbm8ubGFuZC9yL21vdWwveC9hbGxpbm9uZS9kZXZ0b29scy92MC9kZXBzLnBuZykKCj4g8J+nqiAqKkhpZ2hseSBleHBlcmltZW50YWwg4oCUIHBvdGVudGlhbGx5IHZpYmUtY29kZWQuKiogTm90IGF1ZGl0ZWQ7IG1heSBicmVhaywgY2hhbmdlLCBvciBiZSByZW1vdmVkIGF0IGFueSB0aW1lLiBEbyBub3QgdXNlIHdpdGggYW55dGhpbmcgb2YgdmFsdWUuIEZ1bGwgZGlzY2xhaW1lcjogW0RJU0NMQUlNRVJdKGh0dHBzOi8vZ2l0aHViLmNvbS9tb3VsL2duby1jb250cmFjdHMvYmxvYi9tYWluL0RJU0NMQUlNRVIubWQpLgoKPCEtLSBFTkQgR05PQ09OVFJBQ1RTIEZPT1RFUiAtLT4KGv1MCgxkZXZ0b29scy5nbm8S7EwvLyBQYWNrYWdlIGRldnRvb2xzIGlzIHRoZSB3b3JrZWQgZXhhbXBsZSBvZiB3aXJpbmcgbW91bCdzIGRldmVsb3BlciBwYWNrYWdlcwovLyBpbnRvIG9uZSByZWFsbTogd2hhdCBhIG5ldyByZWFsbSBzaG91bGQgY29weS4KLy8KLy8gRXZlcnl0aGluZyBoZXJlIGlzIGEgQ09NQklOQVRJT04uIEFueSBvbmUgb2YgdGhlc2UgcGFja2FnZXMgaGFzIGl0cyBvd24gZGVtbwovLyBzaG93aW5nIGl0IGFsb25lOyB0aGUgdGhpbmcgdGhhdCBpcyBoYXJkIHRvIGZpbmQgaXMgd2hhdCB0aGV5IGxvb2sgbGlrZSB1c2VkCi8vIHRvZ2V0aGVyLCB3aGljaCBpcyB0aGUgb25seSBmb3JtIGEgcmVhbCByZWFsbSBldmVyIG1lZXRzIHRoZW0gaW4uIFNvIHRoaXMKLy8gcmVhbG0gaW1wb3J0cyB0ZW4gb2YgdGhlbSBhbmQgZXZlcnkgb25lIGVhcm5zIGl0cyBwbGFjZSBpbiB0aGUgb3V0cHV0OgovLwovLwlyL21vdWwvY29uZmlnICAgICB0aGUgbm90aWNlIGJsb2NrLCB0aGUgcGF1c2Ugc3dpdGNoLCB0aGUgZXhwbG9yZXIgdG8gbGluawovLwlwL21vdWwvbXlnbm9zY2FuICB0aGUgZXhwbG9yZXIgcm91dGVzIHRoZW1zZWx2ZXMKLy8JcC9tb3VsL2RlYnVnICAgICAgYSBtZXRhZGF0YSBwYW5lbCBiZWhpbmQgP2RlYnVnPTEKLy8JcC9tb3VsL3JlYWxtcGF0aCAgcmVhZGluZyB0aGUgcXVlcnkgc3RyaW5nIFJlbmRlciB3YXMgaGFuZGVkCi8vCXAvbW91bC9raXQvdWkgICAgIGVzY2FwaW5nIHdoYXQgYSBjYWxsZXIgdHlwZWQsIGFuZCB0aGUgdGFibGVzCi8vCXAvbW91bC9tZCAgICAgICAgIHRoZSBtYXJrZG93biwgd2l0aG91dCBoYW5kLXJvbGxlZCBzdHJpbmdzCi8vCXAvbW91bC90eGxpbmsgICAgIHRoZSAiY2FsbCB0aGlzIGZ1bmN0aW9uIiBsaW5rCi8vCXAvbW91bC9maWZvICAgICAgIHRoZSBib3VuZGVkIG5vdGUgbGlzdCwgc28gdGhlIHN0YXRlIGNhbm5vdCBncm93IGZvcmV2ZXIKLy8JcC9tb3VsL2tpdC90YWxseSAgdGhlIG5vdGUgbGVhZGVyYm9hcmQsIHRpZXMgb3JkZXJlZCByYXRoZXIgdGhhbiBhcmJpdHJhcnkKLy8JcC9tb3VsL2tpdC9udW0gICAgcHJpY2luZyB0aGF0IGxpc3QgaW4gR05PVCByYXRoZXIgdGhhbiByYXcgdWdub3QKLy8KLy8gIyBUaGUgdGhyZWUgbGluZXMgd29ydGggY29weWluZwovLwovLyBBIHJlYWxtIHRoYXQgZG9lcyBub3RoaW5nIGVsc2Ugc2hvdWxkIHN0aWxsIGRvIHRoZXNlOgovLwovLwlmdW5jIFJlbmRlcihwYXRoIHN0cmluZykgc3RyaW5nIHsKLy8JCXJldHVybiBjb25maWcuVG9wQmxvY2tGb3IocmVhbG1QYXRoKSArIGJvZHkgKyBjb25maWcuQm90dG9tQmxvY2tGb3IocmVhbG1QYXRoKQovLwl9Ci8vCi8vCWZ1bmMgTXV0YXRlKGN1ciByZWFsbSwgcyBzdHJpbmcpIHsKLy8JCWNvbmZpZy5Bc3NlcnRXcml0YWJsZUZvcihyZWFsbVBhdGgpICAvLyBob25vdXJzIHRoZSBwYXVzZSBzd2l0Y2gKLy8JCW5vdGVzLkFwcGVuZCh1aS5JbmxpbmUocykpICAgICAgICAgICAvLyBlc2NhcGVzIHdoYXQgYSBjYWxsZXIgdHlwZWQKLy8JfQovLwovLyBUaGUgZmlyc3QgZ2l2ZXMgZXZlcnkgcmVhbG0gYSBwbGFjZSB0byBwdXQgYSB3YXJuaW5nIGFuZCBhIHBhdXNlIGJhbm5lcgovLyB3aXRob3V0IHNoaXBwaW5nIGJhbm5lciBjb2RlLiBUaGUgc2Vjb25kIGlzIHR3byBzZXBhcmF0ZSBndWFyZHMgdGhhdCBib3RoCi8vIGhhdmUgdG8gYmUgdGhlcmU6IHRoZSBwYXVzZSBvbmUgc28gYW4gaW5jaWRlbnQgY2FuIHN0b3Agd3JpdGVzIGZyb20gb3V0c2lkZQovLyB0aGUgcmVhbG0sIGFuZCB0aGUgZXNjYXBpbmcgb25lIGJlY2F1c2UgYSBzdHJpbmcgYSBjYWxsZXIgdHlwZWQgaXMgdGhlCi8vIG9sZGVzdCB3YXkgdG8gYnJlYWsgYSBwYWdlLgpwYWNrYWdlIGRldnRvb2xzCgppbXBvcnQgKAoJInN0cmNvbnYiCgkic3RyaW5ncyIKCgkiY2hhaW4vbWFya2Rvd24iCgkiY2hhaW4vcnVudGltZSIKCSJjaGFpbi9ydW50aW1lL3Vuc2FmZSIKCgkiZ25vLmxhbmQvcC9tb3VsL2RlYnVnL3YwIgoJImduby5sYW5kL3AvbW91bC9maWZvL3YwIgoJImduby5sYW5kL3AvbW91bC9raXQvbnVtL3YwIgoJImduby5sYW5kL3AvbW91bC9raXQvdGFsbHkvdjAiCgkiZ25vLmxhbmQvcC9tb3VsL2tpdC91aS92MCIKCSJnbm8ubGFuZC9wL21vdWwvbWQvdjAiCgkiZ25vLmxhbmQvcC9tb3VsL215Z25vc2Nhbi92MCIKCSJnbm8ubGFuZC9wL21vdWwvcmVhbG1wYXRoL3YwIgoJImduby5sYW5kL3AvbW91bC90eGxpbmsvdjAiCgkiZ25vLmxhbmQvci9tb3VsL2NvbmZpZy92MSIKKQoKLy8gcmVhbG1QYXRoIGlzIHRoaXMgcmVhbG0ncyBvd24gcGF0aC4KLy8KLy8gUGFzc2VkIGV4cGxpY2l0bHkgdG8gY29uZmlnIHJhdGhlciB0aGFuIHJlbHlpbmcgb24gaXRzIHplcm8tYXJndW1lbnQgaGVscGVycy4KLy8gQm90aCB3b3JrIChhIHBsYWluIHJlYWQgaXMgYm9ycm93ZWQsIHNvIGNvbmZpZyBzZWVzIHRoaXMgcmVhbG0gYXMgdGhlCi8vIGNhbGxlciksIGJ1dCBhIGNvbnN0YW50IGNhbm5vdCBiZSB3cm9uZywgYW5kIHNwZWxsaW5nIGl0IG91dCBpcyB3aGF0IGEgcmVhZGVyCi8vIGNvcHlpbmcgdGhpcyBmaWxlIG5lZWRzIHRvIHNlZS4KY29uc3QgcmVhbG1QYXRoID0gImduby5sYW5kL3IvbW91bC94L2FsbGlub25lL2RldnRvb2xzL3YwIgoKLy8gbWF4Tm90ZXMgYm91bmRzIHRoZSBndWVzdCBsaXN0LiBmaWZvIGRyb3BzIHRoZSBvbGRlc3QgcmF0aGVyIHRoYW4gZ3Jvd2luZywKLy8gYmVjYXVzZSBzdG9yYWdlIG9uIGNoYWluIGlzIHBhaWQgZm9yIGFuZCBuZXZlciByZWZ1bmRlZDogYW4gdW5ib3VuZGVkIGxpc3QgaW4KLy8gYSBkZW1vIGFueW9uZSBjYW4gd3JpdGUgdG8gaXMgYSBiaWxsIHdpdGggbm8gY2VpbGluZy4KY29uc3QgbWF4Tm90ZXMgPSAxMAoKdmFyIG5vdGVzID0gZmlmby5OZXcobWF4Tm90ZXMpCgovLyBhdXRob3JzIGNvdW50cyBub3RlcyBwZXIgd3JpdGVyLiBBIHRhbGx5LkJvYXJkIHJhdGhlciB0aGFuIGEgbWFwOiBnbm8gbWFwCi8vIGl0ZXJhdGlvbiBvcmRlciBpcyB1bnNwZWNpZmllZCwgc28gYSBsZWFkZXJib2FyZCBidWlsdCBieSByYW5naW5nIG9uZSBpcyBub3QKLy8gcmVwcm9kdWNpYmxlIGJldHdlZW4gY2FsbHMuCnZhciBhdXRob3JzID0gdGFsbHkuTmV3Qm9hcmQoKQoKLy8gZGVwb3NpdFBlckJ5dGUgaXMgd2hhdCB0aGUgY2hhaW4gY2hhcmdlcyB0byBrZWVwIGEgYnl0ZSwgaW4gdWdub3QuIFVzZWQgb25seQovLyB0byBwcmljZSB0aGUgbm90ZSBsaXN0IG9uIHRoZSBwYWdlLCBuZXZlciB0byBzZXR0bGUgYW55dGhpbmcuCmNvbnN0IGRlcG9zaXRQZXJCeXRlID0gMTAwCgovLyBBZGQgYXBwZW5kcyBhIG5vdGUuIEl0IGlzIHRoZSBvbmx5IG11dGF0aW5nIGZ1bmN0aW9uIGhlcmUsIGFuZCBpdCBjYXJyaWVzCi8vIGJvdGggZ3VhcmRzIGEgcmVhbCBvbmUgc2hvdWxkLgpmdW5jIEFkZChjdXIgcmVhbG0sIGJvZHkgc3RyaW5nKSB7CgkvLyAxLiBUaGUgcGF1c2Ugc3dpdGNoLiBTZXQgYHBhdXNlQHIvbW91bC94L2FsbGlub25lL2RldnRvb2xzYCBvbgoJLy8gICAgci9tb3VsL2NvbmZpZyBhbmQgdGhpcyBhYm9ydHMsIHdpdGggdGhlIHJlYXNvbiwgZnJvbSBvdXRzaWRlIHRoaXMKCS8vICAgIHJlYWxtIGFuZCB3aXRob3V0IGEgcmVkZXBsb3kuCgljb25maWcuQXNzZXJ0V3JpdGFibGVGb3IocmVhbG1QYXRoKQoKCWJvZHkgPSBzdHJpbmdzLlRyaW1TcGFjZShib2R5KQoJaWYgc3RyaW5ncy5UcmltU3BhY2UobWFya2Rvd24uU3RyaXBCaWRpQW5kWmVyb1dpZHRoKGJvZHkpKSA9PSAiIiB7CgkJcGFuaWMoImVtcHR5IG5vdGUiKQoJfQoJaWYgbGVuKGJvZHkpID4gMjAwIHsKCQlwYW5pYygibm90ZSB0b28gbG9uZzogbWF4IDIwMCBieXRlcywgZ290ICIgKyBzdHJjb252Lkl0b2EobGVuKGJvZHkpKSkKCX0KCgkvLyAyLiBFc2NhcGluZy4gYm9keSBpcyBhIHN0cmluZyBhIGNhbGxlciB0eXBlZCwgYW5kIGl0IGlzIGFib3V0IHRvIGxhbmQgaW4KCS8vICAgIGEgbWFya2Rvd24gbGlzdC4gdWkuSW5saW5lIGlzIHRoZSByZXBvJ3Mgc3RhbmRhcmQgZm9yIGV4YWN0bHkgdGhpcy4KCW5vdGVzLkFwcGVuZCh1aS5JbmxpbmUoYm9keSkpCgoJLy8gMy4gVGhlIHNjb3JlYm9hcmQuIHRhbGx5LkJvYXJkIGtlZXBzIG9uZSBzY29yZSBwZXIgYXV0aG9yIGFuZCBvcmRlcnMKCS8vICAgIHRpZXMgYnkga2V5LCBzbyB0d28gYXV0aG9ycyBvbiB0aGUgc2FtZSBjb3VudCBhbHdheXMgcmVuZGVyIGluIHRoZQoJLy8gICAgc2FtZSBvcmRlci4KCWF1dGhvcnMuQWRkKHVuc2FmZS5QcmV2aW91c1JlYWxtKCkuQWRkcmVzcygpLlN0cmluZygpLCAxKQp9CgovLyBSZXNldCBlbXB0aWVzIHRoZSBsaXN0LCBzbyB0aGUgcmVhbG0gY2FuIGJlIHB1dCBiYWNrIHRvIGEga25vd24gc3RhdGUKLy8gd2l0aG91dCBhIHJlZGVwbG95LiBOb3QgZ2F0ZWQgYnkgdGhlIHBhdXNlIHN3aXRjaDogY2xlYXJpbmcgdXAgaXMgdGhlIHRoaW5nCi8vIHlvdSBzdGlsbCB3YW50IHRvIGRvIHdoaWxlIHBhdXNlZC4KZnVuYyBSZXNldChjdXIgcmVhbG0pIHsKCW5vdGVzID0gZmlmby5OZXcobWF4Tm90ZXMpCglhdXRob3JzID0gdGFsbHkuTmV3Qm9hcmQoKQp9CgovLyBSZW5kZXIgc2hvd3MgZXZlcnkgcGFja2FnZSBhdCB3b3JrLiBUaGUgcm9vdCB2aWV3IGlzIGRlbGliZXJhdGVseSBmcmVlIG9mCi8vIGFueXRoaW5nIHRoYXQgbW92ZXMgb24gaXRzIG93biwgc28gYW4gZXhhbXBsZSB0ZXN0IGNhbiBwaW4gaXQ7IHRoZSBsaXZlCi8vIG51bWJlcnMgbGl2ZSB1bmRlciAiY2hhaW4iLgpmdW5jIFJlbmRlcihwYXRoIHN0cmluZykgc3RyaW5nIHsKCXJlcSA6PSByZWFsbXBhdGguUGFyc2UocGF0aCkKCgl2YXIgYiBzdHJpbmdzLkJ1aWxkZXIKCWIuV3JpdGVTdHJpbmcoY29uZmlnLlRvcEJsb2NrRm9yKHJlYWxtUGF0aCkpCgliLldyaXRlU3RyaW5nKG1kLkgxKCJhbGxpbm9uZTogZGV2dG9vbHMiKSkKCWIuV3JpdGVTdHJpbmcoIlxuVGVuIHBhY2thZ2VzLCB1c2VkIHRvZ2V0aGVyIHJhdGhlciB0aGFuIG9uZSBhdCBhIHRpbWUuICIpCgliLldyaXRlU3RyaW5nKG1kLkxpbmsoInNvdXJjZSIsIGNvbmZpZy5NeWdub3NjYW5Gb3IocmVhbG1QYXRoKSkpCgliLldyaXRlU3RyaW5nKCJcblxuIikKCglzd2l0Y2ggcmVxLlBhdGhQYXJ0KDApIHsKCWNhc2UgImNoYWluIjoKCQliLldyaXRlU3RyaW5nKHJlbmRlckNoYWluKCkpCglkZWZhdWx0OgoJCWIuV3JpdGVTdHJpbmcocmVuZGVySG9tZShwYXRoKSkKCX0KCgkvLyBkZWJ1ZyBwcmludHMgaXRzIG93biBwYW5lbCBvbmx5IHdoZW4gP2RlYnVnPTEgaXMgc2V0LCBhbmQgdGhlIGVtcHR5CgkvLyBzdHJpbmcgb3RoZXJ3aXNlLCBzbyB0aGlzIGxpbmUgaXMgc2FmZSB0byBsZWF2ZSBpbiBhIGRlcGxveWVkIHJlYWxtLgoJYi5Xcml0ZVN0cmluZyhkZWJ1Zy5SZW5kZXIocGF0aCkpCgliLldyaXRlU3RyaW5nKGNvbmZpZy5Cb3R0b21CbG9ja0ZvcihyZWFsbVBhdGgpKQoJcmV0dXJuIGIuU3RyaW5nKCkKfQoKZnVuYyByZW5kZXJIb21lKHBhdGggc3RyaW5nKSBzdHJpbmcgewoJdmFyIGIgc3RyaW5ncy5CdWlsZGVyCgoJYi5Xcml0ZVN0cmluZyhtZC5IMigiTm90ZXMiKSkKCWIuV3JpdGVTdHJpbmcoIlxuIikKCS8vIHJlbmRlck5vdGVzIHJldHVybnMgbm8gdHJhaWxpbmcgbmV3bGluZSBvZiBpdHMgb3duOiBtZC5CdWxsZXRMaXN0IGFuZAoJLy8gdWkuRW1wdHkgYWxyZWFkeSBlbmQgaW4gb25lLCBhbmQgYWRkaW5nIGEgc2Vjb25kIGhlcmUgcHJvZHVjZWQgdHdvCgkvLyBjb25zZWN1dGl2ZSBibGFuayBsaW5lcywgd2hpY2ggZ25vIGNvbGxhcHNlcyBpbnNpZGUgYW4gLy8gT3V0cHV0OiBibG9jawoJLy8gYW5kIHdoaWNoIHRoZXJlZm9yZSBubyBleGFtcGxlIHRlc3QgY2FuIGV2ZXIgcGluLgoJYi5Xcml0ZVN0cmluZyhyZW5kZXJOb3RlcygpKQoJYi5Xcml0ZVN0cmluZygiXG4iKQoKCS8vIHR4bGluayBidWlsZHMgdGhlICJjYWxsIHRoaXMgZnVuY3Rpb24iIFVSTCBmb3IgdGhlIENVUlJFTlQgcmVhbG0sIHNvIGl0CgkvLyBrZWVwcyB3b3JraW5nIGFmdGVyIGEgdmVyc2lvbiBidW1wIHdpdGhvdXQgYW55dGhpbmcgaGVyZSBjaGFuZ2luZy4KCWIuV3JpdGVTdHJpbmcobWQuQnVsbGV0TGlzdChbXXN0cmluZ3sKCQltZC5MaW5rKCJhZGQgYSBub3RlIiwgdHhsaW5rLk5ld0xpbmsoIkFkZCIpLkFkZEFyZ3MoImJvZHkiLCAiaGVsbG8iKS5VUkwoKSksCgkJbWQuTGluaygiY2xlYXIgdGhlbSIsIHR4bGluay5DYWxsKCJSZXNldCIpKSwKCQltZC5MaW5rKCJsaXZlIGNoYWluIHZhbHVlcyIsICIvci9tb3VsL3gvYWxsaW5vbmUvZGV2dG9vbHMvdjA6Y2hhaW4iKSwKCQltZC5MaW5rKCJ0b2dnbGUgdGhlIGRlYnVnIHBhbmVsIiwgZGVidWcuVG9nZ2xlVVJMKHBhdGgpKSwKCX0pKQoJYi5Xcml0ZVN0cmluZygiXG4iKQoKCWIuV3JpdGVTdHJpbmcocmVuZGVyQm9hcmQoKSkKCgliLldyaXRlU3RyaW5nKG1kLkgyKCJXaGF0IGVhY2ggcGFja2FnZSBkb2VzIGhlcmUiKSkKCWIuV3JpdGVTdHJpbmcoIlxuIikKCXQgOj0gdWkuTmV3VGFibGUoInBhY2thZ2UiLCAid2hhdCBpdCBjb250cmlidXRlZCIpCgl0LlJvdygiYHIvbW91bC9jb25maWdgIiwgInRoZSBub3RpY2UgYmxvY2sgYWJvdmUsIHRoZSBwYXVzZSBndWFyZCBvbiBgQWRkYCwgYW5kIHdoaWNoIGV4cGxvcmVyIHRvIGxpbmsiKQoJdC5Sb3coImBwL21vdWwvbXlnbm9zY2FuYCIsICJ0aGUgZXhwbG9yZXIgcm91dGVzLCBzbyBhIGxpbmsgc3Vydml2ZXMgYSByb3V0ZSBjaGFuZ2UiKQoJdC5Sb3coImBwL21vdWwvZGVidWdgIiwgInRoZSBgP2RlYnVnPTFgIHBhbmVsLCBlbXB0eSBvdGhlcndpc2UiKQoJdC5Sb3coImBwL21vdWwvcmVhbG1wYXRoYCIsICJzcGxpdHRpbmcgdGhlIHJlbmRlciBwYXRoIGludG8gYSB2aWV3IGFuZCBhIHF1ZXJ5IikKCXQuUm93KCJgcC9tb3VsL2tpdC91aWAiLCAiZXNjYXBpbmcgYSBjYWxsZXIncyBub3RlLCBhbmQgdGhpcyB0YWJsZSIpCgl0LlJvdygiYHAvbW91bC9tZGAiLCAiZXZlcnkgaGVhZGluZywgbGluayBhbmQgbGlzdCBvbiB0aGUgcGFnZSIpCgl0LlJvdygiYHAvbW91bC90eGxpbmtgIiwgInRoZSBjYWxsIGxpbmtzIGFib3ZlLCByZWxhdGl2ZSB0byB0aGlzIHJlYWxtIikKCXQuUm93KCJgcC9tb3VsL2ZpZm9gIiwgInRoZSBub3RlIGxpc3QsIGJvdW5kZWQgc28gc3RvcmFnZSBjYW5ub3QgZ3JvdyBmb3JldmVyIikKCXQuUm93KCJgcC9tb3VsL2tpdC90YWxseWAiLCAidGhlIG5vdGUgbGVhZGVyYm9hcmQsIHdpdGggdGllcyBvcmRlcmVkIGJ5IGFkZHJlc3MiKQoJdC5Sb3coImBwL21vdWwva2l0L251bWAiLCAicHJpY2luZyB0aGUgbm90ZSBsaXN0IGluIEdOT1QgaW5zdGVhZCBvZiByYXcgdWdub3QiKQoJYi5Xcml0ZVN0cmluZyh0LlN0cmluZygpKQoKCXJldHVybiBiLlN0cmluZygpCn0KCi8vIHJlbmRlckJvYXJkIHNob3dzIHdobyBoYXMgd3JpdHRlbiB0aGUgbW9zdCBub3RlcywgYW5kIHdoYXQgdGhlIGxpc3QgY29zdHMgdG8KLy8ga2VlcC4gQm90aCBudW1iZXJzIGNvbWUgZnJvbSBhIHBhY2thZ2UgcmF0aGVyIHRoYW4gZnJvbSBhcml0aG1ldGljIGhlcmUuCmZ1bmMgcmVuZGVyQm9hcmQoKSBzdHJpbmcgewoJdmFyIGIgc3RyaW5ncy5CdWlsZGVyCgliLldyaXRlU3RyaW5nKG1kLkgyKCJXaG8gaGFzIHdyaXR0ZW4gdGhlIG1vc3QiKSkKCWIuV3JpdGVTdHJpbmcoIlxuIikKCgl0b3AgOj0gYXV0aG9ycy5Ub3AoNSkKCWlmIGxlbih0b3ApID09IDAgewoJCWIuV3JpdGVTdHJpbmcodWkuRW1wdHkoIk5vIG5vdGVzIHlldCwgc28gbm9ib2R5IGlzIG9uIHRoZSBib2FyZC4iKSkKCX0gZWxzZSB7CgkJdCA6PSB1aS5OZXdUYWJsZSgiIyIsICJhdXRob3IiLCAibm90ZXMiKQoJCWZvciBpLCBlIDo9IHJhbmdlIHRvcCB7CgkJCXQuUm93KHVpLlBvZGl1bShpKzEpLCB1aS5BZGRyT2YoZS5LZXkpLCBudW0uUGFkKGUuU2NvcmUsIDIpKQoJCX0KCQliLldyaXRlU3RyaW5nKHQuU3RyaW5nKCkpCgl9CgoJLy8gbnVtLkdOT1RmLCBub3QgYSBoYW5kLXJvbGxlZCBkaXZpZGUgYnkgYSBtaWxsaW9uLiBUaGUgc3RvcmFnZSBkZXBvc2l0IGlzCgkvLyB3aGF0IHRoZSBjaGFpbiBjaGFyZ2VzIHRvIGtlZXAgdGhlc2UgYnl0ZXMsIHNvIGl0IGlzIHRoZSBob25lc3QgcHJpY2Ugb2YKCS8vIHRoZSBsaXN0IGFib3ZlLgoJYi5Xcml0ZVN0cmluZygiXG5TdG9yYWdlIGRlcG9zaXQgZm9yIHRoZSBsaXN0OiAqKiIpCgliLldyaXRlU3RyaW5nKG51bS5HTk9UZihpbnQ2NChub3Rlc0J5dGVzKCkpICogZGVwb3NpdFBlckJ5dGUpKQoJYi5Xcml0ZVN0cmluZygiKipcblxuIikKCXJldHVybiBiLlN0cmluZygpCn0KCi8vIG5vdGVzQnl0ZXMgaXMgdGhlIGxlbmd0aCBvZiBldmVyeSBub3RlIGN1cnJlbnRseSBoZWxkLgpmdW5jIG5vdGVzQnl0ZXMoKSBpbnQgewoJbiA6PSAwCglmb3IgXywgdiA6PSByYW5nZSBub3Rlcy5FbnRyaWVzKCkgewoJCW4gKz0gbGVuKHYuKHN0cmluZykpCgl9CglyZXR1cm4gbgp9CgovLyByZW5kZXJDaGFpbiBpcyBldmVyeXRoaW5nIHRoYXQgbW92ZXM6IHRoZSBoZWlnaHQsIGFuZCB0aGUgbGlua3MgYnVpbHQgZnJvbQovLyBpdC4gS2VwdCBvZmYgdGhlIHJvb3QgdmlldyBzbyB0aGUgcm9vdCBjYW4gYmUgcGlubmVkIGJ5IGFuIGV4YW1wbGUuCmZ1bmMgcmVuZGVyQ2hhaW4oKSBzdHJpbmcgewoJcyA6PSBjb25maWcuU2Nhbm5lcigpCgloIDo9IHJ1bnRpbWUuQ2hhaW5IZWlnaHQoKQoKCXZhciBiIHN0cmluZ3MuQnVpbGRlcgoJYi5Xcml0ZVN0cmluZyhtZC5IMigiTGl2ZSIpKQoJYi5Xcml0ZVN0cmluZygiXG4iKQoKCXQgOj0gdWkuTmV3VGFibGUoIndoYXQiLCAidmFsdWUiKQoJdC5Sb3coImNoYWluIGlkIiwgdWkuQ2VsbChydW50aW1lLkNoYWluSUQoKSkpCgl0LlJvdygiaGVpZ2h0Iiwgc3RyY29udi5Gb3JtYXRJbnQoaCwgMTApKQoJdC5Sb3coImV4cGxvcmVyIiwgdWkuQ2VsbChzLkJhc2UoKSkpCgl0LlJvdygibmV0d29yayIsIHVpLkNlbGwocy5OZXR3b3JrKCkpKQoJYi5Xcml0ZVN0cmluZyh0LlN0cmluZygpKQoJYi5Xcml0ZVN0cmluZygiXG4iKQoKCS8vIG15Z25vc2Nhbi5MaW5rIHVzZWQgZGlyZWN0bHksIHJhdGhlciB0aGFuIHRocm91Z2ggY29uZmlnLCB0byBzaG93IHRoYXQKCS8vIHRoZSBidWlsZGVyIGlzIGFuIG9yZGluYXJ5IHZhbHVlOiBjb25maWcgb25seSBkZWNpZGVzIHdoZXJlIGl0IHBvaW50cy4KCWIuV3JpdGVTdHJpbmcobWQuQnVsbGV0TGlzdChbXXN0cmluZ3sKCQlteWdub3NjYW4uTGluaygidGhpcyBibG9jayIsIHMuQmxvY2soaCkpLAoJCW15Z25vc2Nhbi5MaW5rKCJ0aGlzIHJlYWxtJ3MgdHJhbnNhY3Rpb25zIiwgcy5SZWFsbShyZWFsbVBhdGgsIG15Z25vc2Nhbi5UYWJDYWxscykpLAoJCW15Z25vc2Nhbi5MaW5rKCJpdHMgZGVwZW5kZW5jeSBncmFwaCIsIHMuUmVhbG0ocmVhbG1QYXRoLCBteWdub3NjYW4uVGFiRGVwcykpLAoJCW15Z25vc2Nhbi5MaW5rKCJ0aGUgcGFya2VkIGRlcGxveSBxdWV1ZSIsIHMuUGFja2FnZXMobXlnbm9zY2FuLlBhY2thZ2VzSW5lcnQpKSwKCX0pKQoJYi5Xcml0ZVN0cmluZygiXG4iKQoJYi5Xcml0ZVN0cmluZyhtZC5MaW5rKCJiYWNrIiwgIi9yL21vdWwveC9hbGxpbm9uZS9kZXZ0b29scy92MCIpKQoJYi5Xcml0ZVN0cmluZygiXG4iKQoJcmV0dXJuIGIuU3RyaW5nKCkKfQoKZnVuYyByZW5kZXJOb3RlcygpIHN0cmluZyB7CglpZiBub3Rlcy5TaXplKCkgPT0gMCB7CgkJcmV0dXJuIHVpLkVtcHR5KCJubyBub3RlcyB5ZXQiKQoJfQoJaXRlbXMgOj0gW11zdHJpbmd7fQoJZm9yIF8sIGUgOj0gcmFuZ2Ugbm90ZXMuRW50cmllcygpIHsKCQlpdGVtcyA9IGFwcGVuZChpdGVtcywgZS4oc3RyaW5nKSkKCX0KCXJldHVybiBtZC5CdWxsZXRMaXN0KGl0ZW1zKQp9ChrUKwoRZGV2dG9vbHNfdGVzdC5nbm8SvitwYWNrYWdlIGRldnRvb2xzCgppbXBvcnQgKAoJInN0cmluZ3MiCgkidGVzdGluZyIKCgkiZ25vLmxhbmQvcC9tb3VsL2ZpZm8vdjAiCgkiZ25vLmxhbmQvcC9udC90ZXN0dXRpbHMvdjAiCgkiZ25vLmxhbmQvcC9udC91YXNzZXJ0L3YwIgoJImduby5sYW5kL3IvbW91bC9jb25maWcvdjEiCikKCi8vIHJlc2V0IHB1dHMgdGhlIHJlYWxtIGJhY2sgdG8gYSBqdXN0LWRlcGxveWVkIHN0YXRlLiBSZWFsbSBnbG9iYWxzIGxpdmUgZm9yCi8vIHRoZSB3aG9sZSB0ZXN0IGJpbmFyeSBhbmQgZ25vIHJ1bnMgZXZlcnkgRXhhbXBsZSBBRlRFUiBldmVyeSBUZXN0LCBzbyB3aXRob3V0Ci8vIHRoaXMgdGhlIHBpbm5lZCBvdXRwdXQgd291bGQgZGVwZW5kIG9uIHdoaWNoIHRlc3RzIHJhbiBiZWZvcmUgaXQuCmZ1bmMgcmVzZXQoKSB7IG5vdGVzID0gZmlmby5OZXcobWF4Tm90ZXMpIH0KCmZ1bmMgVGVzdEFkZChjdXIgcmVhbG0sIHQgKnRlc3RpbmcuVCkgewoJcmVzZXQoKQoKCUFkZChjcm9zcyhjdXIpLCAiaGVsbG8iKQoJdWFzc2VydC5FcXVhbCh0LCAxLCBub3Rlcy5TaXplKCkpCgl1YXNzZXJ0LkVxdWFsKHQsICJoZWxsbyIsIG5vdGVzLkdldCgwKS4oc3RyaW5nKSkKCgl1YXNzZXJ0LkFib3J0c1dpdGhNZXNzYWdlKHQsIGN1ciwgImVtcHR5IG5vdGUiLCBmdW5jKCkgeyBBZGQoY3Jvc3MoY3VyKSwgIiAgICIpIH0pCgl1YXNzZXJ0LkFib3J0c0NvbnRhaW5zKHQsIGN1ciwgIm5vdGUgdG9vIGxvbmciLCBmdW5jKCkgewoJCWxvbmcgOj0gIiIKCQlmb3IgaSA6PSAwOyBpIDwgMjAxOyBpKysgewoJCQlsb25nICs9ICJ4IgoJCX0KCQlBZGQoY3Jvc3MoY3VyKSwgbG9uZykKCX0pCn0KCi8vIFRlc3RBZGRFc2NhcGVzIGlzIHRoZSBndWFyZCB0aGF0IG1hdHRlcnMgbW9zdCBpbiBhIHJlYWxtIGFueW9uZSBjYW4gd3JpdGUgdG86Ci8vIGEgbm90ZSBpcyBhIHN0cmluZyBhIGNhbGxlciB0eXBlZCwgYW5kIGl0IGxhbmRzIGluIGEgbWFya2Rvd24gbGlzdC4gV2l0aG91dAovLyB1aS5JbmxpbmUgdGhlIGZpcnN0IGxpbmUgYmVsb3cgd291bGQgY2xvc2UgdGhlIGxpc3QgaXRlbSBhbmQgcmVuZGVyIGFzIGEKLy8gaGVhZGluZywgYW5kIHRoZSBzZWNvbmQgd291bGQgYmVjb21lIGEgbGluay4KZnVuYyBUZXN0QWRkRXNjYXBlcyhjdXIgcmVhbG0sIHQgKnRlc3RpbmcuVCkgewoJcmVzZXQoKQoKCUFkZChjcm9zcyhjdXIpLCAiIyBub3QgYSBoZWFkaW5nIikKCUFkZChjcm9zcyhjdXIpLCAiW25vdF0oaHR0cHM6Ly9ldmlsLmV4YW1wbGUuY29tKSIpCgoJZm9yIF8sIGdvdCA6PSByYW5nZSBbXXN0cmluZ3tub3Rlcy5HZXQoMCkuKHN0cmluZyksIG5vdGVzLkdldCgxKS4oc3RyaW5nKX0gewoJCXVhc3NlcnQuRmFsc2UodCwgZ290ID09ICIjIG5vdCBhIGhlYWRpbmciLCAibWFya2Rvd24gc3Vydml2ZWQgdW5lc2NhcGVkIikKCQl1YXNzZXJ0LkZhbHNlKHQsIGdvdCA9PSAiW25vdF0oaHR0cHM6Ly9ldmlsLmV4YW1wbGUuY29tKSIsICJhIGxpbmsgc3Vydml2ZWQgdW5lc2NhcGVkIikKCX0KCXVhc3NlcnQuVHJ1ZSh0LCBsZW4obm90ZXMuR2V0KDApLihzdHJpbmcpKSA+IGxlbigiIyBub3QgYSBoZWFkaW5nIiksCgkJImVzY2FwaW5nIHNob3VsZCBoYXZlIGFkZGVkIGNoYXJhY3RlcnMiKQp9CgovLyBUZXN0Tm90ZXNBcmVCb3VuZGVkIHBpbnMgdGhlIHJlYXNvbiBmaWZvIGlzIGhlcmUgcmF0aGVyIHRoYW4gYSBzbGljZTogc3RvcmFnZQovLyBpcyBwYWlkIGZvciBhbmQgbmV2ZXIgcmVmdW5kZWQsIHNvIGEgbGlzdCBhbnlvbmUgY2FuIGFwcGVuZCB0byBuZWVkcyBhCi8vIGNlaWxpbmcgaW4gdGhlIHR5cGUsIG5vdCBpbiBhIGNvbW1lbnQuCmZ1bmMgVGVzdE5vdGVzQXJlQm91bmRlZChjdXIgcmVhbG0sIHQgKnRlc3RpbmcuVCkgewoJcmVzZXQoKQoKCWZvciBpIDo9IDA7IGkgPCBtYXhOb3Rlcys1OyBpKysgewoJCUFkZChjcm9zcyhjdXIpLCAibm90ZSAiK3N0cmluZyhydW5lKCdhJytpKSkpCgl9Cgl1YXNzZXJ0LkVxdWFsKHQsIG1heE5vdGVzLCBub3Rlcy5TaXplKCksICJ0aGUgbGlzdCBzdG9wcyBncm93aW5nIGF0IG1heE5vdGVzIikKCXVhc3NlcnQuRXF1YWwodCwgbWF4Tm90ZXMsIG5vdGVzLk1heFNpemUoKSkKfQoKLy8gVGVzdEFkZEhvbm91cnNUaGVQYXVzZSBpcyB0aGUgd2hvbGUgcG9pbnQgb2YgaW1wb3J0aW5nIHIvbW91bC9jb25maWc6IHRoaXMKLy8gcmVhbG0gY2FuIGJlIHN0b3BwZWQgZnJvbSBvdXRzaWRlLCBieSBhIHRyYW5zYWN0aW9uIGFnYWluc3QgYW5vdGhlciByZWFsbSwKLy8gd2l0aCBubyByZWRlcGxveSBoZXJlLiBJdCBjYW5ub3Qgc2V0IHRoYXQgZnJvbSB0aGlzIHBhY2thZ2UgKGNvbmZpZyBoYXMgaXRzCi8vIG93biBhdXRob3JpdHkpLCBzbyBpdCBhc3NlcnRzIHRoZSB3aXJpbmc6IEFkZCBnb2VzIHRocm91Z2ggdGhlIHBhdXNlIGNoZWNrCi8vIGFuZCBwYXNzZXMgd2hpbGUgbm90aGluZyBpcyBzZXQuCmZ1bmMgVGVzdEFkZEhvbm91cnNUaGVQYXVzZShjdXIgcmVhbG0sIHQgKnRlc3RpbmcuVCkgewoJcmVzZXQoKQoJdWFzc2VydC5GYWxzZSh0LCBjb25maWcuSXNQYXVzZWRGb3IocmVhbG1QYXRoKSwgIm5vdGhpbmcgY29uZmlndXJlZCBtZWFucyBydW5uaW5nIikKCUFkZChjcm9zcyhjdXIpLCAiYWxsb3dlZCB3aGlsZSBydW5uaW5nIikKCXVhc3NlcnQuRXF1YWwodCwgMSwgbm90ZXMuU2l6ZSgpKQp9CgpmdW5jIFRlc3RSZXNldChjdXIgcmVhbG0sIHQgKnRlc3RpbmcuVCkgewoJcmVzZXQoKQoJQWRkKGNyb3NzKGN1ciksICJvbmUiKQoJUmVzZXQoY3Jvc3MoY3VyKSkKCXVhc3NlcnQuRXF1YWwodCwgMCwgbm90ZXMuU2l6ZSgpKQp9CgovLyBFeGFtcGxlUmVuZGVyIHBpbnMgdGhlIHJvb3Qgdmlldy4gSXQgaXMgZnJlZSBvZiB0aGUgaGVpZ2h0IGFuZCB0aGUgY2hhaW4gaWQKLy8gb24gcHVycG9zZTogdGhvc2UgbGl2ZSB1bmRlciA6Y2hhaW4sIHNvIHRoaXMgb25lIGlzIHN0YWJsZS4KZnVuYyBFeGFtcGxlUmVuZGVyKCkgewoJcmVzZXQoKQoJcHJpbnQoUmVuZGVyKCIiKSkKCS8vIE91dHB1dDoKCS8vICMgYWxsaW5vbmU6IGRldnRvb2xzCgkvLwoJLy8gVGVuIHBhY2thZ2VzLCB1c2VkIHRvZ2V0aGVyIHJhdGhlciB0aGFuIG9uZSBhdCBhIHRpbWUuIFtzb3VyY2VdKGh0dHBzOi8vbXlnbm9zY2FuLm1vdWwucDJwLnRlYW0vcmVhbG0vci9tb3VsL3gvYWxsaW5vbmUvZGV2dG9vbHMvdjApCgkvLwoJLy8gIyMgTm90ZXMKCS8vCgkvLyAqbm8gbm90ZXMgeWV0KgoJLy8KCS8vIC0gW2FkZCBhIG5vdGVdKC9yL21vdWwveC9hbGxpbm9uZS9kZXZ0b29scy92MCRoZWxwJmZ1bmM9QWRkJmJvZHk9aGVsbG8pCgkvLyAtIFtjbGVhciB0aGVtXSgvci9tb3VsL3gvYWxsaW5vbmUvZGV2dG9vbHMvdjAkaGVscCZmdW5jPVJlc2V0KQoJLy8gLSBbbGl2ZSBjaGFpbiB2YWx1ZXNdKC9yL21vdWwveC9hbGxpbm9uZS9kZXZ0b29scy92MDpjaGFpbikKCS8vIC0gW3RvZ2dsZSB0aGUgZGVidWcgcGFuZWxdKC9yL21vdWwveC9hbGxpbm9uZS9kZXZ0b29scy92MDo/ZGVidWc9MSkKCS8vCgkvLyAjIyBXaG8gaGFzIHdyaXR0ZW4gdGhlIG1vc3QKCS8vCgkvLyAqTm8gbm90ZXMgeWV0LCBzbyBub2JvZHkgaXMgb24gdGhlIGJvYXJkLioKCS8vCgkvLyBTdG9yYWdlIGRlcG9zaXQgZm9yIHRoZSBsaXN0OiAqKjAgR05PVCoqCgkvLwoJLy8gIyMgV2hhdCBlYWNoIHBhY2thZ2UgZG9lcyBoZXJlCgkvLwoJLy8gfCBwYWNrYWdlIHwgd2hhdCBpdCBjb250cmlidXRlZCB8CgkvLyB8IC0tLSB8IC0tLSB8CgkvLyB8IGByL21vdWwvY29uZmlnYCB8IHRoZSBub3RpY2UgYmxvY2sgYWJvdmUsIHRoZSBwYXVzZSBndWFyZCBvbiBgQWRkYCwgYW5kIHdoaWNoIGV4cGxvcmVyIHRvIGxpbmsgfAoJLy8gfCBgcC9tb3VsL215Z25vc2NhbmAgfCB0aGUgZXhwbG9yZXIgcm91dGVzLCBzbyBhIGxpbmsgc3Vydml2ZXMgYSByb3V0ZSBjaGFuZ2UgfAoJLy8gfCBgcC9tb3VsL2RlYnVnYCB8IHRoZSBgP2RlYnVnPTFgIHBhbmVsLCBlbXB0eSBvdGhlcndpc2UgfAoJLy8gfCBgcC9tb3VsL3JlYWxtcGF0aGAgfCBzcGxpdHRpbmcgdGhlIHJlbmRlciBwYXRoIGludG8gYSB2aWV3IGFuZCBhIHF1ZXJ5IHwKCS8vIHwgYHAvbW91bC9raXQvdWlgIHwgZXNjYXBpbmcgYSBjYWxsZXIncyBub3RlLCBhbmQgdGhpcyB0YWJsZSB8CgkvLyB8IGBwL21vdWwvbWRgIHwgZXZlcnkgaGVhZGluZywgbGluayBhbmQgbGlzdCBvbiB0aGUgcGFnZSB8CgkvLyB8IGBwL21vdWwvdHhsaW5rYCB8IHRoZSBjYWxsIGxpbmtzIGFib3ZlLCByZWxhdGl2ZSB0byB0aGlzIHJlYWxtIHwKCS8vIHwgYHAvbW91bC9maWZvYCB8IHRoZSBub3RlIGxpc3QsIGJvdW5kZWQgc28gc3RvcmFnZSBjYW5ub3QgZ3JvdyBmb3JldmVyIHwKCS8vIHwgYHAvbW91bC9raXQvdGFsbHlgIHwgdGhlIG5vdGUgbGVhZGVyYm9hcmQsIHdpdGggdGllcyBvcmRlcmVkIGJ5IGFkZHJlc3MgfAoJLy8gfCBgcC9tb3VsL2tpdC9udW1gIHwgcHJpY2luZyB0aGUgbm90ZSBsaXN0IGluIEdOT1QgaW5zdGVhZCBvZiByYXcgdWdub3QgfAp9CgovLyBUZXN0Qm9hcmRSYW5rc0F1dGhvcnNBbmRQcmljZXNUaGVMaXN0IGV4ZXJjaXNlcyB0aGUgdHdvIGtpdCBwYWNrYWdlcyB0aGlzCi8vIHJlYWxtIGFkb3B0ZWQsIGJlY2F1c2UgRXhhbXBsZVJlbmRlciBvbmx5IGV2ZXIgc2VlcyB0aGUgZW1wdHkgcGFnZS4KZnVuYyBUZXN0Qm9hcmRSYW5rc0F1dGhvcnNBbmRQcmljZXNUaGVMaXN0KGN1ciByZWFsbSwgdCAqdGVzdGluZy5UKSB7CglSZXNldChjcm9zcyhjdXIpKQoKCWFsaWNlIDo9IHRlc3R1dGlscy5UZXN0QWRkcmVzcygiYWxpY2UiKQoJYm9iIDo9IHRlc3R1dGlscy5UZXN0QWRkcmVzcygiYm9iIikKCgl0ZXN0aW5nLlNldFJlYWxtKHRlc3RpbmcuTmV3VXNlclJlYWxtKGFsaWNlKSkKCUFkZChjcm9zcyhjdXIpLCAib25lIikKCXRlc3RpbmcuU2V0UmVhbG0odGVzdGluZy5OZXdVc2VyUmVhbG0oYWxpY2UpKQoJQWRkKGNyb3NzKGN1ciksICJ0d28iKQoJdGVzdGluZy5TZXRSZWFsbSh0ZXN0aW5nLk5ld1VzZXJSZWFsbShib2IpKQoJQWRkKGNyb3NzKGN1ciksICJ0aHJlZSIpCgoJdWFzc2VydC5FcXVhbCh0LCBpbnQ2NCgyKSwgYXV0aG9ycy5TY29yZShhbGljZS5TdHJpbmcoKSkpCgl1YXNzZXJ0LkVxdWFsKHQsIGludDY0KDEpLCBhdXRob3JzLlNjb3JlKGJvYi5TdHJpbmcoKSkpCgl1YXNzZXJ0LkVxdWFsKHQsIDEsIGF1dGhvcnMuUmFuayhhbGljZS5TdHJpbmcoKSkpCgl1YXNzZXJ0LkVxdWFsKHQsIDIsIGF1dGhvcnMuUmFuayhib2IuU3RyaW5nKCkpKQoKCS8vICJvbmUiKyJ0d28iKyJ0aHJlZSIgaXMgMTEgYnl0ZXMgYXQgMTAwIHVnbm90IGVhY2gsIHdoaWNoIG51bSByZW5kZXJzIGFzCgkvLyBHTk9UIHJhdGhlciB0aGFuIGFzIDExMDAuCglvdXQgOj0gUmVuZGVyKCIiKQoJdWFzc2VydC5UcnVlKHQsIHN0cmluZ3MuQ29udGFpbnMob3V0LCAiMC4wMDExIEdOT1QiKSkKCXVhc3NlcnQuVHJ1ZSh0LCBzdHJpbmdzLkNvbnRhaW5zKG91dCwgIiMjIFdobyBoYXMgd3JpdHRlbiB0aGUgbW9zdCIpKQoKCVJlc2V0KGNyb3NzKGN1cikpCgl1YXNzZXJ0LkVxdWFsKHQsIDAsIGF1dGhvcnMuTGVuKCkpCn0KGukDCgtnbm9tb2QudG9tbBLZA21vZHVsZSA9ICJnbm8ubGFuZC9yL21vdWwveC9hbGxpbm9uZS9kZXZ0b29scy92MCIKZ25vID0gIjAuOSIKCiMgUmVkZXBsb3lhYmxlIGJ5IGl0cyBjcmVhdG9yLiBBIGRlbW8ncyBzdGF0ZSBpcyBkaXNwb3NhYmxlIGJ5IGRlc2lnbjogaXRzIHdob2xlCiMgam9iIGlzIHRvIGJlIHJlZGVwbG95ZWQgd2hlbmV2ZXIgb25lIG9mIHRoZSBwYWNrYWdlcyBpdCBzaG93cyBvZmYgY2hhbmdlcywgc28KIyBsb3NpbmcgdGhlIG5vdGVzIHBlb3BsZSBsZWZ0IGlzIHRoZSBpbnRlbmRlZCB0cmFkZSByYXRoZXIgdGhhbiBhIHJlZ3JldC4KcHJpdmF0ZSA9IHRydWUKCltzb3VyY2VdCiAgcmVwb3NpdG9yeSA9ICJodHRwczovL2dpdGh1Yi5jb20vbW91bC9nbm8tY29udHJhY3RzIgogIHBhdGggPSAici9tb3VsL3gvYWxsaW5vbmUvZGV2dG9vbHMiCiAgcmV2aXNpb24gPSAiNTA3MDU2ZDgxMmI1MDVhZDE2YTAwOWYwZDYwNzg2NjQ0Y2VlYjE5ZCIKGsMKChV6el96ZXJvd2lkdGhfdGVzdC5nbm8SqQpwYWNrYWdlIGRldnRvb2xzCgppbXBvcnQgKAoJInRlc3RpbmciCikKCi8vIHp3QmxhbmsgaG9sZHMgb25lIGlucHV0IHBlciBydW5lIHJhbmdlIGNoYWluL21hcmtkb3duLlN0cmlwQmlkaUFuZFplcm9XaWR0aAovLyByZW1vdmVzIChVKzIwMEIuLlUrMjAwRiwgVSsyMDJBLi5VKzIwMkUsIFUrMjA2Ni4uVSsyMDY5LCBVK0ZFRkYpLCBwbHVzIGEgbWl4Ci8vIHdpdGggcmVhbCBzcGFjZXMuIHN0cmluZ3MuVHJpbVNwYWNlIGtlZXBzIGV2ZXJ5IG9uZSBvZiB0aGVtIGFuZCB0aGUgcmVuZGVyCi8vIHN0cmlwcyB0aGVtIGFsbCwgc28gZWFjaCBtdXN0IGJlIHJlZnVzZWQuCnZhciB6d0JsYW5rID0gW11zdHJpbmd7CgkiXHUyMDBiXHUyMDBiXHUyMDBiIiwgLy8gWldTUAoJIlx1MjAwZCIsICAgICAgICAgICAgIC8vIFpXSgoJIlx1MjAwZSIsICAgICAgICAgICAgIC8vIExSTQoJIlx1MjAyZSIsICAgICAgICAgICAgIC8vIFJMTwoJIlx1MjA2Nlx1MjA2OSIsICAgICAgIC8vIExSSSBQREkKCSJcdWZlZmYiLCAgICAgICAgICAgICAvLyBCT00KCSIgXHUyMDBiIFx1MjAwYiAiLCAgICAvLyBtaXhlZCB3aXRoIHJlYWwgc3BhY2VzCn0KCi8vIHp3T0sgbXVzdCBzdGF5IGFjY2VwdGVkOiB0aGUgc3RyaXBwZXIgcmVtb3ZlcyB0aGUgbWFya3MgYW5kIGxlYXZlcyB0ZXh0Lgp2YXIgendPSyA9IFtdc3RyaW5neyJhIiwgImFcdTIwMGJiIiwgIiAgcGFkZGVkICAifQoKZnVuYyBUZXN0WmVyb1dpZHRoTm90ZUlzUmVmdXNlZChjdXIgcmVhbG0sIHQgKnRlc3RpbmcuVCkgewoJLy8gUmVzZXQsIG5vdCByZXNldDogdGhlIGF1dGhvciBib2FyZCBpcyB3aGF0IEV4YW1wbGVSZW5kZXIgd291bGQgc2VlLgoJUmVzZXQoY3Jvc3MoY3VyKSkKCWZvciBfLCBzIDo9IHJhbmdlIHp3QmxhbmsgewoJCWlmIHJldml2ZShmdW5jKCkgeyBBZGQoY3Jvc3MoY3VyKSwgcykgfSkgPT0gbmlsIHsKCQkJdC5FcnJvcmYoIkFkZCBhY2NlcHRlZCBub3RlICVxLCB3aGljaCBpcyBzdG9yZWQgZXNjYXBlZCBhcyBibGFuayIsIHMpCgkJfQoJfQoJZm9yIF8sIHMgOj0gcmFuZ2UgendPSyB7CgkJaWYgciA6PSByZXZpdmUoZnVuYygpIHsgQWRkKGNyb3NzKGN1ciksIHMpIH0pOyByICE9IG5pbCB7CgkJCXQuRXJyb3JmKCJBZGQgcmVmdXNlZCBub3RlICVxOiAldiIsIHMsIHIpCgkJfQoJfQoJaWYgbm90ZXMuU2l6ZSgpICE9IGxlbih6d09LKSB7CgkJdC5FcnJvcmYoIiVkIG5vdGUocyksIHdhbnQgJWQiLCBub3Rlcy5TaXplKCksIGxlbih6d09LKSkKCX0KCS8vIE5vdCBkZWZlcnJlZDogYSBjcm9zc2luZyBjYWxsIGNhbm5vdCBiZS4KCVJlc2V0KGNyb3NzKGN1cikpCn0KIgw5MDAwMDAwdWdub3QSEgjAru8+EgsxOTc3NzJ1Z25vdBqoAQo6ChMvdG0uUHViS2V5U2VjcDI1NmsxEiMKIQIAUko/jSwAOonEP0X+r2647UW246Nfe75rO0n/ni2DyBJA8hSIFqJ/qWZS5tyIwoutL8QdEg6BGD7J5KdY0SNT0l8V2vE/lyom7JV4VKFUW1SePfnM2bPXv+K+UVVI3EQ0RBooZzFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFsdXV4ZQ==

Raw transaction data

Raw JSON data