Transaction executed successfully
Transaction Details
Inspect execution, participants, message data, gas usage, events and raw transaction data.
Transaction hash
8C7519559AFDB04A80BEE4ECDDAF455F5EF30346969991473FF8CE6F8C7FA20D
Transaction overview
Execution summary
TX INDEX
0
Position in block
GAS WANTED
15,000,000
Requested gas limit
GAS USED
13,134,393
Gas consumed
FEE
20000ugnot
Transaction fee
Participants
Message
Message #1
m_addpkg
Arguments
g17khqpukees4237dtn3astzapmp462vjhsz6st4
Execution log
msg:0,success:true,log:,events:[]
Events
No events emitted by this transaction.
Raw encoded transaction
Cs1KCgwvdm0ubV9hZGRwa2cSvEoKKGcxN2tocXB1a2VlczQyMzdkdG4zYXN0emFwbXA0NjJ2amhzejZzdDQSj0oKBHRyaWUSOGduby5sYW5kL3AvZzE3a2hxcHVrZWVzNDIzN2R0bjNhc3R6YXBtcDQ2MnZqaHN6NnN0NC90cmllGr4HCglSRUFETUUubWQSsAcjIFRyaWUgUGFja2FnZQoKUGFja2FnZSBpbXBsZW1lbnRzIGEgc2ltcGxlIHByZWZpeC10cmVlICh0cmllKSBmb3IgR25vIHJlYWxtcywga2V5ZWQgYnkKYHN0cmluZ2Agd2l0aCB2YWx1ZXMgb2YgYW55IHR5cGUuCgpgVHJlZWAgaW1wbGVtZW50cyB0aGUgW2BhdmwuSVRyZWVgXShodHRwczovL2duby5sYW5kL3AvbnQvYXZsL3YwJHNvdXJjZSZmaWxlPXRyZWUuZ25vKQppbnRlcmZhY2UgZnJvbSBgZ25vLmxhbmQvcC9udC9hdmxgLCBzbyBpdCBjYW4gYmUgdXNlZCBhcyBhIGRyb3AtaW4gYWx0ZXJuYXRpdmUKdG8gYW4gQVZMIHRyZWUuCgpSZXBvc2l0b3J5IGNhbiBiZSBmb3VuZCBhdCBbamVyb25pbW9hbGJpL2dub21lXShodHRwczovL2dpdGh1Yi5jb20vamVyb25pbW9hbGJpL2dub21lKSwKYXMgcGFydCBvZiBgamVyb25pbW9hbGJpYCdzIEdubyBzbWFydCBjb250cmFjdHMgbW9ub3JlcG8uCgojIyBVc2FnZQoKW2VtYmVkbWRdOiMgKGZpbGV0ZXN0cy9yZWFkbWVfZmlsZXRlc3QuZ25vIGdvKQpgYGBnbwpwYWNrYWdlIG1haW4KCmltcG9ydCAiZ25vLmxhbmQvcC9qZXJvbmltb2FsYmkvdHJpZSIKCmZ1bmMgbWFpbigpIHsKCXRyZWUgOj0gdHJpZS5OZXdUcmVlKCkKCXRyZWUuU2V0KCJhcHBsZSIsIDEpCgl0cmVlLlNldCgiYXBwIiwgMikKCXRyZWUuU2V0KCJiYW5hbmEiLCAzKQoKCS8vIEdldCB2YWx1ZSBmb3IgYXBwCgl2IDo9IHRyZWUuR2V0KCJhcHAiKQoJcHJpbnRsbih2KQoKCS8vIEl0ZXJhdGUga2V5cyBpbiBsZXhpY29ncmFwaGljIG9yZGVyOiBhcHAsIGFwcGxlLCBiYW5hbmEuCgl0cmVlLkl0ZXJhdGUoIiIsICIiLCBmdW5jKGtleSBzdHJpbmcsIHZhbHVlIGFueSkgYm9vbCB7CgkJcHJpbnRsbihrZXksIHZhbHVlKQoJCXJldHVybiBmYWxzZQoJfSkKfQoKLy8gT3V0cHV0OgovLyAyCi8vIGFwcCAyCi8vIGFwcGxlIDEKLy8gYmFuYW5hIDMKYGBgChraAgoHZG9jLmdubxLOAi8vIFBhY2thZ2UgdHJpZSBwcm92aWRlcyBhIHNpbXBsZSBwcmVmaXgtdHJlZSAodHJpZSkgZm9yIHN0b3Jpbmcga2V5LXZhbHVlIGRhdGEKLy8gaW4gR25vIHJlYWxtcy4KLy8KLy8gS2V5cyBhcmUgc3RyaW5ncyBvcmRlcmVkIGxleGljb2dyYXBoaWNhbGx5IGJ5IHRoZWlyIHJhdyBieXRlcyBhbmQgdmFsdWVzIGNhbgovLyBiZSBvZiBhbnkgdHlwZS4gVHJlZSBpbXBsZW1lbnRzIHRoZSBhdmwuSVRyZWUgaW50ZXJmYWNlIGZyb20KLy8gYGduby5sYW5kL3AvbnQvYXZsYCwgc28gaXQgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gYW4gQVZMIHRyZWUuCnBhY2thZ2UgdHJpZQoaQwoLZ25vbW9kLnRvbWwSNG1vZHVsZSA9ICJnbm8ubGFuZC9wL2plcm9uaW1vYWxiaS90cmllIgpnbm8gPSAiMC45IgoaiBsKCG5vZGUuZ25vEvsacGFja2FnZSB0cmllCgovLyBub2RlIGlzIGEgc2luZ2xlIHBvc2l0aW9uIGluIHRoZSB0cmllIHRyZWUKdHlwZSBub2RlIHN0cnVjdCB7CgljaGFyICAgICBieXRlICAgIC8vIG5vZGUncyBjaGFyLCB1bnVzZWQgaW4gdGhlIHJvb3Qgbm9kZQoJdmFsdWUgICAgYW55ICAgICAvLyBub2RlJ3MgdmFsdWUsIHN0b3JlZCB3aGVuIGlzS2V5IGlzIHRydWUKCWlzS2V5ICAgIGJvb2wgICAgLy8gd2hldGhlciBhIGtleSB0ZXJtaW5hdGVzIGF0IHRoaXMgbm9kZQoJY2hpbGRyZW4gW10qbm9kZSAvLyBjaGlsZCBub2Rlcywga2VwdCBzb3J0ZWQgYXNjZW5kaW5nIGJ5IGNoYXIKfQoKLy8gY2hpbGRJbmRleCByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgY2hpbGQgcmVhY2hlZCBieSBieXRlIGMgYW5kIHdoZXRoZXIgc3VjaAovLyBhIGNoaWxkIGV4aXN0cy4gV2hlbiBpdCBkb2VzIG5vdCBleGlzdCwgdGhlIHJldHVybmVkIGluZGV4IGlzIHRoZSBwb3NpdGlvbiBhdAovLyB3aGljaCBhIGNoaWxkIHdpdGggYnl0ZSBjIG11c3QgYmUgaW5zZXJ0ZWQgdG8ga2VlcCBjaGlsZHJlbiBzb3J0ZWQuCmZ1bmMgKG4gKm5vZGUpIGNoaWxkSW5kZXgoYyBieXRlKSAoaW50LCBib29sKSB7CglsbyA6PSAwCgloaSA6PSBsZW4obi5jaGlsZHJlbikKCWZvciBsbyA8IGhpIHsKCQltaWQgOj0gKGxvICsgaGkpIC8gMgoKCQlzd2l0Y2ggewoJCWNhc2Ugbi5jaGlsZHJlblttaWRdLmNoYXIgPCBjOgoJCQlsbyA9IG1pZCArIDEKCQljYXNlIG4uY2hpbGRyZW5bbWlkXS5jaGFyID4gYzoKCQkJaGkgPSBtaWQKCQlkZWZhdWx0OgoJCQlyZXR1cm4gbWlkLCB0cnVlCgkJfQoJfQoJcmV0dXJuIGxvLCBmYWxzZQp9CgovLyBnZXQgcmV0cmlldmVzIHRoZSB2YWx1ZSBzdG9yZWQgdW5kZXIga2V5IGluIHRoZSBzdWJ0cmVlIHJvb3RlZCBhdCBuLgpmdW5jIChuICpub2RlKSBnZXQoa2V5IHN0cmluZykgKHZhbHVlIGFueSwgZXhpc3RzIGJvb2wpIHsKCWN1ciA6PSBuCglmb3IgaSA6PSAwOyBpIDwgbGVuKGtleSk7IGkrKyB7CgkJaWR4LCBvayA6PSBjdXIuY2hpbGRJbmRleChrZXlbaV0pCgkJaWYgIW9rIHsKCQkJcmV0dXJuIG5pbCwgZmFsc2UKCQl9CgoJCWN1ciA9IGN1ci5jaGlsZHJlbltpZHhdCgl9CgoJaWYgIWN1ci5pc0tleSB7CgkJcmV0dXJuIG5pbCwgZmFsc2UKCX0KCXJldHVybiBjdXIudmFsdWUsIHRydWUKfQoKLy8gc2V0IGluc2VydHMgb3IgdXBkYXRlcyBrZXkgd2l0aCB2YWx1ZS4gSXQgcmV0dXJucyB0cnVlIHdoZW4gdGhlIGtleSBhbHJlYWR5Ci8vIGV4aXN0ZWQgYW5kIGl0cyB2YWx1ZSB1cGRhdGVkLCBhbmQgZmFsc2Ugd2hlbiBpdCB3YXMgbmV3bHkgaW5zZXJ0ZWQuCmZ1bmMgKG4gKm5vZGUpIHNldChrZXkgc3RyaW5nLCB2YWx1ZSBhbnkpICh1cGRhdGVkIGJvb2wpIHsKCWN1ciA6PSBuCglmb3IgaSA6PSAwOyBpIDwgbGVuKGtleSk7IGkrKyB7CgkJYyA6PSBrZXlbaV0KCQlpZHgsIG9rIDo9IGN1ci5jaGlsZEluZGV4KGMpCgkJaWYgb2sgewoJCQljdXIgPSBjdXIuY2hpbGRyZW5baWR4XQoJCQljb250aW51ZQoJCX0KCgkJY2hpbGQgOj0gJm5vZGV7Y2hhcjogY30KCQljdXIuY2hpbGRyZW4gPSBhcHBlbmQoY3VyLmNoaWxkcmVuLCBuaWwpCgkJY29weShjdXIuY2hpbGRyZW5baWR4KzE6XSwgY3VyLmNoaWxkcmVuW2lkeDpdKQoJCWN1ci5jaGlsZHJlbltpZHhdID0gY2hpbGQKCQljdXIgPSBjaGlsZAoJfQoKCWlmIGN1ci5pc0tleSB7CgkJY3VyLnZhbHVlID0gdmFsdWUKCQlyZXR1cm4gdHJ1ZQoJfQoKCWN1ci5pc0tleSA9IHRydWUKCWN1ci52YWx1ZSA9IHZhbHVlCglyZXR1cm4gZmFsc2UKfQoKLy8gcmVtb3ZlIGRlbGV0ZXMga2V5IGZyb20gdGhlIHN1YnRyZWUgcm9vdGVkIGF0IG4sIHBydW5pbmcgYW55IG5vZGVzIHRoYXQgbm8KLy8gbG9uZ2VyIHRlcm1pbmF0ZSBhIGtleSBhbmQgaGF2ZSBubyBjaGlsZHJlbi4gSXQgcmV0dXJucyB0aGUgcmVtb3ZlZCB2YWx1ZSBhbmQKLy8gd2hldGhlciB0aGUga2V5IHdhcyBmb3VuZC4KZnVuYyAobiAqbm9kZSkgcmVtb3ZlKGtleSBzdHJpbmcpICh2YWx1ZSBhbnksIHJlbW92ZWQgYm9vbCkgewoJaWYga2V5ID09ICIiIHsKCQlpZiAhbi5pc0tleSB7CgkJCXJldHVybiBuaWwsIGZhbHNlCgkJfQoKCQl2YWx1ZSA9IG4udmFsdWUKCQluLmlzS2V5ID0gZmFsc2UKCQluLnZhbHVlID0gbmlsCgkJcmV0dXJuIHZhbHVlLCB0cnVlCgl9CgoJaWR4LCBvayA6PSBuLmNoaWxkSW5kZXgoa2V5WzBdKQoJaWYgIW9rIHsKCQlyZXR1cm4gbmlsLCBmYWxzZQoJfQoKCWNoaWxkIDo9IG4uY2hpbGRyZW5baWR4XQoJdmFsdWUsIHJlbW92ZWQgPSBjaGlsZC5yZW1vdmUoa2V5WzE6XSkKCWlmIHJlbW92ZWQgJiYgIWNoaWxkLmlzS2V5ICYmIGxlbihjaGlsZC5jaGlsZHJlbikgPT0gMCB7CgkJbi5jaGlsZHJlbiA9IGFwcGVuZChuLmNoaWxkcmVuWzppZHhdLCBuLmNoaWxkcmVuW2lkeCsxOl0uLi4pCgl9CglyZXR1cm4gdmFsdWUsIHJlbW92ZWQKfQoKLy8gaW5vcmRlciB2aXNpdHMgdGhpcyBub2RlICh3aGVuIGl0IHRlcm1pbmF0ZXMgYSBrZXkpIGFuZCBpdHMgd2hvbGUgc3VidHJlZS4KLy8ga2V5IGlzIHRoZSBmdWxsIGtleSBzcGVsbGVkIGZyb20gdGhlIHJvb3QgdG8gdGhpcyBub2RlLiBXaGVuIGFzY2VuZGluZyBpcwovLyB0cnVlIGtleXMgYXJlIHByb2R1Y2VkIGluIGxleGljb2dyYXBoaWMgb3JkZXIsIG90aGVyd2lzZSBpbiByZXZlcnNlLiBCZWNhdXNlCi8vIGEga2V5IGFsd2F5cyBzb3J0cyBiZWZvcmUgYW55IGtleSB0aGF0IGV4dGVuZHMgaXQsIHRoZSB0ZXJtaW5hbCB2YWx1ZSBpcwovLyBlbWl0dGVkIGJlZm9yZSB0aGUgY2hpbGRyZW4gd2hlbiBhc2NlbmRpbmcgYW5kIGFmdGVyIHRoZW0gd2hlbiBkZXNjZW5kaW5nLgovLyBJdCByZXR1cm5zIHRydWUgYXMgc29vbiBhcyBjYiByZXF1ZXN0cyB0aGUgd2FsayB0byBzdG9wLgpmdW5jIChuICpub2RlKSBpbm9yZGVyKGtleSBzdHJpbmcsIGFzY2VuZGluZyBib29sLCBjYiBmdW5jKGtleSBzdHJpbmcsIHZhbHVlIGFueSkgYm9vbCkgKHN0b3AgYm9vbCkgewoJaWYgYXNjZW5kaW5nIHsKCQlpZiBuLmlzS2V5ICYmIGNiKGtleSwgbi52YWx1ZSkgewoJCQlyZXR1cm4gdHJ1ZQoJCX0KCgkJZm9yIF8sIGMgOj0gcmFuZ2Ugbi5jaGlsZHJlbiB7CgkJCWlmIGMuaW5vcmRlcihrZXkrc3RyaW5nKFtdYnl0ZXtjLmNoYXJ9KSwgYXNjZW5kaW5nLCBjYikgewoJCQkJcmV0dXJuIHRydWUKCQkJfQoJCX0KCQlyZXR1cm4gZmFsc2UKCX0KCglmb3IgaSA6PSBsZW4obi5jaGlsZHJlbikgLSAxOyBpID49IDA7IGktLSB7CgkJYyA6PSBuLmNoaWxkcmVuW2ldCgkJaWYgYy5pbm9yZGVyKGtleStzdHJpbmcoW11ieXRle2MuY2hhcn0pLCBhc2NlbmRpbmcsIGNiKSB7CgkJCXJldHVybiB0cnVlCgkJfQoJfQoKCWlmIG4uaXNLZXkgJiYgY2Ioa2V5LCBuLnZhbHVlKSB7CgkJcmV0dXJuIHRydWUKCX0KCXJldHVybiBmYWxzZQp9Chq6IwoIdHJlZS5nbm8SrSNwYWNrYWdlIHRyaWUKCmltcG9ydCAiZ25vLmxhbmQvcC9udC9hdmwvdjAiCgovLyBWZXJpZnkgdGhhdCBUcmVlIGltcGxlbWVudHMgdGhlIElUcmVlIGludGVyZmFjZS4KdmFyIF8gYXZsLklUcmVlID0gKCpUcmVlKShuaWwpCgovLyBUcmVlIGlzIGEgcHJlZml4IHRyZWUgKHRyaWUpIGtleWVkIGJ5IHN0cmluZyB3aXRoIHZhbHVlcyBvZiBhbnkgdHlwZS4KLy8gSXQgaW1wbGVtZW50cyB0aGUgYXZsLklUcmVlIGludGVyZmFjZSwgc28gaXQgY2FuIGJlIHVzZWQgYXMgYSBkcm9wLWluCi8vIGFsdGVybmF0aXZlIHRvIGFuIEFWTCB0cmVlLiBLZXlzIGFyZSBvcmRlcmVkIGxleGljb2dyYXBoaWNhbGx5IGJ5IHRoZWlyaQovLyByYXcgYnl0ZXMuCi8vCi8vIFRoZSB6ZXJvIFRyZWUgaXMgYW4gZW1wdHksIHJlYWR5LXRvLXVzZSB0cmVlLgp0eXBlIFRyZWUgc3RydWN0IHsKCXJvb3QgKm5vZGUKCXNpemUgaW50Cn0KCi8vIE5ld1RyZWUgY3JlYXRlcyBhIG5ldyBlbXB0eSB0cmllIHRyZWUuCmZ1bmMgTmV3VHJlZSgpICpUcmVlIHsKCXJldHVybiAmVHJlZXtyb290OiAmbm9kZXt9fQp9CgovLyBTaXplIHJldHVybnMgdGhlIG51bWJlciBvZiBrZXktdmFsdWUgcGFpcnMgc3RvcmVkIGluIHRoZSB0cmVlLgpmdW5jICh0ICpUcmVlKSBTaXplKCkgaW50IHsKCXJldHVybiB0LnNpemUKfQoKLy8gSGFzIHJlcG9ydHMgd2hldGhlciBrZXkgZXhpc3RzIGluIHRoZSB0cmVlLgpmdW5jICh0ICpUcmVlKSBIYXMoa2V5IHN0cmluZykgYm9vbCB7CglpZiB0LnJvb3QgPT0gbmlsIHsKCQlyZXR1cm4gZmFsc2UKCX0KCglfLCBleGlzdHMgOj0gdC5yb290LmdldChrZXkpCglyZXR1cm4gZXhpc3RzCn0KCi8vIEdldCByZXRyaWV2ZXMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBrZXkuCmZ1bmMgKHQgKlRyZWUpIEdldChrZXkgc3RyaW5nKSBhbnkgewoJaWYgdC5yb290ID09IG5pbCB7CgkJcmV0dXJuIG5pbAoJfQoKCXYsIF8gOj0gdC5yb290LmdldChrZXkpCglyZXR1cm4gdgp9CgovLyBHZXRCeUluZGV4IHJldHJpZXZlcyB0aGUga2V5LXZhbHVlIHBhaXIgYXQgdGhlIGdpdmVuIGluZGV4Ci8vIGluIGxleGljb2dyYXBoaWMgb3JkZXIuIEl0IHBhbmljcyBpZiBpbmRleCBpcyBvdXQgb2YgcmFuZ2UuCmZ1bmMgKHQgKlRyZWUpIEdldEJ5SW5kZXgoaW5kZXggaW50KSAoa2V5IHN0cmluZywgdmFsdWUgYW55KSB7CglpZiBpbmRleCA8IDAgfHwgaW5kZXggPj0gdC5zaXplIHsKCQlwYW5pYygidHJpZTogaW5kZXggb3V0IG9mIHJhbmdlIikKCX0KCglpIDo9IDAKCXQucm9vdC5pbm9yZGVyKCIiLCB0cnVlLCBmdW5jKGsgc3RyaW5nLCB2IGFueSkgYm9vbCB7CgkJaWYgaSA9PSBpbmRleCB7CgkJCWtleSwgdmFsdWUgPSBrLCB2CgkJCXJldHVybiB0cnVlCgkJfQoKCQlpKysKCQlyZXR1cm4gZmFsc2UKCX0pCglyZXR1cm4ga2V5LCB2YWx1ZQp9CgovLyBTZXQgaW5zZXJ0cyBvciB1cGRhdGVzIGEga2V5LXZhbHVlIHBhaXIuCi8vIEl0IHJldHVybnMgdHJ1ZSB3aGVuIHRoZSBrZXkgYWxyZWFkeSBleGlzdGVkIGFuZCBpdHMgdmFsdWUKLy8gd2FzIHVwZGF0ZWQsIGFuZCBmYWxzZSB3aGVuIHRoZSBrZXkgd2FzIG5ld2x5IGluc2VydGVkLgpmdW5jICh0ICpUcmVlKSBTZXQoa2V5IHN0cmluZywgdmFsdWUgYW55KSAodXBkYXRlZCBib29sKSB7CglpZiB0LnJvb3QgPT0gbmlsIHsKCQl0LnJvb3QgPSAmbm9kZXt9Cgl9CgoJdXBkYXRlZCA9IHQucm9vdC5zZXQoa2V5LCB2YWx1ZSkKCWlmICF1cGRhdGVkIHsKCQl0LnNpemUrKwoJfQoJcmV0dXJuIHVwZGF0ZWQKfQoKLy8gUmVtb3ZlIGRlbGV0ZXMgdGhlIHBhaXIgc3RvcmVkIHVuZGVyIGtleS4KLy8gSXQgcmV0dXJucyB0aGUgcmVtb3ZlZCB2YWx1ZSBhbmQgd2hldGhlciB0aGUga2V5IHdhcyBmb3VuZCBhbmQgcmVtb3ZlZC4KZnVuYyAodCAqVHJlZSkgUmVtb3ZlKGtleSBzdHJpbmcpICh2YWx1ZSBhbnksIHJlbW92ZWQgYm9vbCkgewoJaWYgdC5yb290ID09IG5pbCB7CgkJcmV0dXJuIG5pbCwgZmFsc2UKCX0KCgl2YWx1ZSwgcmVtb3ZlZCA9IHQucm9vdC5yZW1vdmUoa2V5KQoJaWYgcmVtb3ZlZCB7CgkJdC5zaXplLS0KCX0KCXJldHVybiB2YWx1ZSwgcmVtb3ZlZAp9CgovLyBJdGVyYXRlIHBlcmZvcm1zIGFuIGluLW9yZGVyIChhc2NlbmRpbmcpIHRyYXZlcnNhbCBvdmVyIHRoZSBrZXlzIGluIHRoZQovLyByYW5nZSBbc3RhcnQsIGVuZCksIHN0YXJ0IGlzIGluY2x1c2l2ZSBhbmQgZW5kIGlzIGV4Y2x1c2l2ZS4KLy8gQW4gZW1wdHkgc3RhcnQgb3IgZW5kIG1lYW5zIHVuYm91bmRlZCBvbiB0aGF0IHNpZGUuCi8vIEl0ZXJhdGlvbiBzdG9wcyB3aGVuIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUsIHRoZSBtZXRob2QgcmV0dXJucyB3aGV0aGVyCi8vIGl0IHdhcyBzdG9wcGVkIHRoYXQgd2F5LgpmdW5jICh0ICpUcmVlKSBJdGVyYXRlKHN0YXJ0LCBlbmQgc3RyaW5nLCBjYiBhdmwuSXRlckNiRm4pIGJvb2wgewoJaWYgdC5yb290ID09IG5pbCB7CgkJcmV0dXJuIGZhbHNlCgl9CgoJcmV0dXJuIHQucm9vdC5pbm9yZGVyKCIiLCB0cnVlLCBmdW5jKGtleSBzdHJpbmcsIHZhbHVlIGFueSkgYm9vbCB7CgkJaWYgc3RhcnQgIT0gIiIgJiYga2V5IDwgc3RhcnQgewoJCQlyZXR1cm4gZmFsc2UKCQl9CgoJCWlmIGVuZCAhPSAiIiAmJiBrZXkgPj0gZW5kIHsKCQkJcmV0dXJuIGZhbHNlCgkJfQoJCXJldHVybiBjYihrZXksIHZhbHVlKQoJfSkKfQoKLy8gUmV2ZXJzZUl0ZXJhdGUgcGVyZm9ybXMgYSByZXZlcnNlIGluLW9yZGVyIChkZXNjZW5kaW5nKSB0cmF2ZXJzYWwgb3ZlciB0aGUKLy8ga2V5cyBpbiB0aGUgcmFuZ2UgW3N0YXJ0LCBlbmRdLCB3aGVyZSBib3RoIHN0YXJ0IGFuZCBlbmQgYXJlIGluY2x1c2l2ZS4KLy8gQW4gZW1wdHkgc3RhcnQgb3IgZW5kIG1lYW5zIHVuYm91bmRlZCBvbiB0aGF0IHNpZGUuCi8vIEl0ZXJhdGlvbiBzdG9wcyB3aGVuIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWU7IHRoZSBtZXRob2QgcmV0dXJucyB3aGV0aGVyCi8vIGl0IHdhcyBzdG9wcGVkIHRoYXQgd2F5LgpmdW5jICh0ICpUcmVlKSBSZXZlcnNlSXRlcmF0ZShzdGFydCwgZW5kIHN0cmluZywgY2IgYXZsLkl0ZXJDYkZuKSBib29sIHsKCWlmIHQucm9vdCA9PSBuaWwgewoJCXJldHVybiBmYWxzZQoJfQoKCXJldHVybiB0LnJvb3QuaW5vcmRlcigiIiwgZmFsc2UsIGZ1bmMoa2V5IHN0cmluZywgdmFsdWUgYW55KSBib29sIHsKCQlpZiBzdGFydCAhPSAiIiAmJiBrZXkgPCBzdGFydCB7CgkJCXJldHVybiBmYWxzZQoJCX0KCgkJaWYgZW5kICE9ICIiICYmIGtleSA+IGVuZCB7CgkJCXJldHVybiBmYWxzZQoJCX0KCQlyZXR1cm4gY2Ioa2V5LCB2YWx1ZSkKCX0pCn0KCi8vIEl0ZXJhdGVCeU9mZnNldCBwZXJmb3JtcyBhbiBpbi1vcmRlciAoYXNjZW5kaW5nKSB0cmF2ZXJzYWwgdGhhdCBza2lwcyB0aGUKLy8gZmlyc3Qgb2Zmc2V0IGtleXMgYW5kIHRoZW4gdmlzaXRzIHVwIHRvIGNvdW50IGtleXMuCi8vIEl0ZXJhdGlvbiBzdG9wcyBlYXJseSB3aGVuIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUsIHRoZSBtZXRob2QgcmV0dXJucwovLyB3aGV0aGVyIGl0IHdhcyBzdG9wcGVkIHRoYXQgd2F5LgpmdW5jICh0ICpUcmVlKSBJdGVyYXRlQnlPZmZzZXQob2Zmc2V0IGludCwgY291bnQgaW50LCBjYiBhdmwuSXRlckNiRm4pIGJvb2wgewoJcmV0dXJuIHQuaXRlcmF0ZUJ5T2Zmc2V0KG9mZnNldCwgY291bnQsIHRydWUsIGNiKQp9CgovLyBSZXZlcnNlSXRlcmF0ZUJ5T2Zmc2V0IHBlcmZvcm1zIGEgcmV2ZXJzZSBpbi1vcmRlciAoZGVzY2VuZGluZykgdHJhdmVyc2FsCi8vIHRoYXQgc2tpcHMgdGhlIGZpcnN0IG9mZnNldCBrZXlzIGFuZCB0aGVuIHZpc2l0cyB1cCB0byBjb3VudCBrZXlzLgovLyBJdGVyYXRpb24gc3RvcHMgZWFybHkgd2hlbiB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlOyB0aGUgbWV0aG9kIHJldHVybnMgd2hldGhlcgovLyBpdCB3YXMgc3RvcHBlZCB0aGF0IHdheS4KZnVuYyAodCAqVHJlZSkgUmV2ZXJzZUl0ZXJhdGVCeU9mZnNldChvZmZzZXQgaW50LCBjb3VudCBpbnQsIGNiIGF2bC5JdGVyQ2JGbikgYm9vbCB7CglyZXR1cm4gdC5pdGVyYXRlQnlPZmZzZXQob2Zmc2V0LCBjb3VudCwgZmFsc2UsIGNiKQp9CgpmdW5jICh0ICpUcmVlKSBpdGVyYXRlQnlPZmZzZXQob2Zmc2V0LCBjb3VudCBpbnQsIGFzY2VuZGluZyBib29sLCBjYiBhdmwuSXRlckNiRm4pIGJvb2wgewoJaWYgdC5yb290ID09IG5pbCB8fCBjb3VudCA8PSAwIHsKCQlyZXR1cm4gZmFsc2UKCX0KCglza2lwcGVkLCBlbWl0dGVkIDo9IDAsIDAKCXN0b3BwZWQgOj0gZmFsc2UKCXQucm9vdC5pbm9yZGVyKCIiLCBhc2NlbmRpbmcsIGZ1bmMoa2V5IHN0cmluZywgdmFsdWUgYW55KSBib29sIHsKCQlpZiBza2lwcGVkIDwgb2Zmc2V0IHsKCQkJc2tpcHBlZCsrCgkJCXJldHVybiBmYWxzZQoJCX0KCgkJc3RvcHBlZCA9IGNiKGtleSwgdmFsdWUpCgkJZW1pdHRlZCsrCgkJcmV0dXJuIHN0b3BwZWQgfHwgZW1pdHRlZCA+PSBjb3VudAoJfSkKCXJldHVybiBzdG9wcGVkCn0KIiIKEy9nbm8uTWVtUGFja2FnZVR5cGUSCwoJTVBVc2VyQWxsEhEIgIenDhIKMjAwMDB1Z25vdBqoAQo6ChMvdG0uUHViS2V5U2VjcDI1NmsxEiMKIQLg/HIt+xiL9BCyqzFswoh/47e7ozrWoMlW2tsQ5FheyBJANyfA3fABD5TBmNiO0tphI9cO9d5EElra+qJ6bLEsG1ACM9NDgB7tYnBgs8Kuw8ulCrKOnLYeKS3uJSZAoNgYcBooZzFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFsdXV4ZQ==