Transaction executed successfully

Transaction Details

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

Transaction hash
05EDEDE43FEE8DE45B9FBEC9B49CCFCB15621F2332D6F13931E164346B63A984

Transaction overview

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

Execution summary

TX INDEX
0
Position in block
GAS WANTED
150,000,000
Requested gas limit
GAS USED
55,422,216
Gas consumed
FEE
180000ugnot
Transaction fee

Participants

Sender
Package / Realm
Not available
Memo
None

Message

Message #1
m_addpkg
Caller
Arguments
g1747t5m2f08plqjlrjk2q0qld7465hxz8gkx59c50000000ugnot

Execution log

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

Events

No events emitted by this transaction.

Raw encoded transaction

CsvGAgoML3ZtLm1fYWRkcGtnErnGAgooZzE3NDd0NW0yZjA4cGxxamxyamsycTBxbGQ3NDY1aHh6OGdreDU5YxL8xQIKBGhvbWUSOGduby5sYW5kL3IvZzE3NDd0NW0yZjA4cGxxamxyamsycTBxbGQ3NDY1aHh6OGdreDU5Yy9ob21lGp0WCgpiYW5uZXIuZ25vEo4WcGFja2FnZSBob21lCgppbXBvcnQgImVuY29kaW5nL2Jhc2U2NCIKCi8vIFRoaXMgZmlsZSBpcyBzaGFyZWQsIHVuY2hhbmdlZCwgYnkgZXZlcnkgU2Ftb3VyYcOvIGhvbWUgcmVhbG0sIHNvIHRoZSBwYWdlcwovLyBrZWVwIG9uZSB2aXN1YWwgaWRlbnRpdHkuIFdoYXQgZGlmZmVycyBsaXZlcyBpbiBjb250ZW50Lmduby4KCi8vIHRvcmlpTWFzayBpcyB0aGUgU2Ftb3VyYcOvIENvb3AgbWFyaywgcmVkcmF3biBhcyB2ZWN0b3JzOiBhIHRvcmlpIGdhdGUgY3V0Ci8vIG91dCBvZiBhIGZ1bGwgY2lyY2xlLCBpbiBhIDQ4MHg0ODAgYm94LiBFdmVyeXRoaW5nIHBhaW50ZWQgdGhyb3VnaCB0aGUgbWFzawovLyB0YWtlcyB0aGUgc2hhcGUgb2YgdGhlIG1hcmsuCmNvbnN0IHRvcmlpTWFzayA9IGA8bWFzayBpZD0idG9yaWkiPjxjaXJjbGUgY3g9IjIzOCIgY3k9IjI0MCIgcj0iMjQwIiBmaWxsPSIjZmZmIi8+PGcgZmlsbD0iIzAwMCI+YCArCglgPHBhdGggZD0iTS0xMCA5MCBRMjM4IDE2NCA0OTAgOTAgTDQ5MCAxNDAgUTIzOCAxOTAgLTEwIDE0MCBaIi8+YCArCglgPHBhdGggZD0iTTEwMiAxNDAgTDE2NSAxNDAgTDE2MiAyMDYgTDk2IDIwNiBaIi8+YCArCglgPHBhdGggZD0iTTMwMiAxNDAgTDM2NCAxNDAgTDM3MCAyMDYgTDMwNCAyMDYgWiIvPmAgKwoJYDxyZWN0IHg9Ii0xMCIgeT0iMjA1IiB3aWR0aD0iNTAwIiBoZWlnaHQ9IjQxIi8+YCArCglgPHBhdGggZD0iTTg5IDI0NSBMMTU5IDI0NSBMMTQ1IDQ5MCBMNTUgNDkwIFoiLz5gICsKCWA8cmVjdCB4PSItMTAiIHk9IjI3NCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIzMiIvPmAgKwoJYDxwYXRoIGQ9Ik0zMDcgMjQ1IEwzNzcgMjQ1IEw0MTEgNDkwIEwzMjEgNDkwIFoiLz5gICsKCWA8cGF0aCBkPSJNMzgyIDI5NiBMNDkwIDM5OCBMNDkwIDQ1NSBMMzkwIDM1OCBaIi8+YCArCglgPC9nPjwvbWFzaz5gCgp0eXBlIGhlcm9UZXh0IHN0cnVjdCB7CglraWNrZXIgICBzdHJpbmcgLy8gc21hbGwgcmVkIGNhcHMgbGluZSBhYm92ZSB0aGUgdGl0bGUKCXRpdGxlICAgIHN0cmluZwoJc3VidGl0bGUgc3RyaW5nCgl0YWdsaW5lICBzdHJpbmcgLy8gcmVkIG1vbm9zcGFjZSBsaW5lCglmb290bGluZSBzdHJpbmcgLy8gZ3JleSBtb25vc3BhY2UgbGluZQoJYWx0ICAgICAgc3RyaW5nCn0KCi8vIGhlcm9TVkcgZHJhd3MgdGhlIHBhZ2UgYmFubmVyOiB0aGUgbWFyayBzZXQgaW4gYSByZWQgc3VuIG9uIHRoZSByaWdodCwgdGhlCi8vIHRleHQgc3RhY2sgb24gdGhlIGxlZnQuCmZ1bmMgaGVyb1NWRyhoIGhlcm9UZXh0KSBzdHJpbmcgewoJcmV0dXJuIGA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9Ijk2MCIgaGVpZ2h0PSIzMDAiIHZpZXdCb3g9IjAgMCA5NjAgMzAwIj5gICsKCQlgPGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJiZyIgeDE9IjAiIHkxPSIwIiB4Mj0iMSIgeTI9IjEiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzBlMGUwZSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzJhMGMxMCIvPjwvbGluZWFyR3JhZGllbnQ+YCArCgkJdG9yaWlNYXNrICsgYDwvZGVmcz5gICsKCQlgPHJlY3Qgd2lkdGg9Ijk2MCIgaGVpZ2h0PSIzMDAiIHJ4PSIxOCIgZmlsbD0idXJsKCNiZykiLz5gICsKCQlgPGcgc3Ryb2tlPSIjZmZmZmZmIiBzdHJva2Utb3BhY2l0eT0iLjA1Ij48cGF0aCBkPSJNMCA2MEg5NjBNMCAxMjBIOTYwTTAgMTgwSDk2ME0wIDI0MEg5NjAiLz48L2c+YCArCgkJYDxjaXJjbGUgY3g9Ijc5MCIgY3k9IjE1MCIgcj0iMTI4IiBmaWxsPSIjZTYzOTQ2Ii8+YCArCgkJYDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY4NiA0Nikgc2NhbGUoLjQzMzMpIj48cmVjdCB3aWR0aD0iNDgwIiBoZWlnaHQ9IjQ4MCIgZmlsbD0iI2Y0ZWZlNiIgbWFzaz0idXJsKCN0b3JpaSkiLz48L2c+YCArCgkJYDx0ZXh0IHg9IjU2IiB5PSI3OCIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSxNZW5sbyxtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIGxldHRlci1zcGFjaW5nPSIzIiBmaWxsPSIjZTYzOTQ2Ij5gICsgeG1sVGV4dChoLmtpY2tlcikgKyBgPC90ZXh0PmAgKwoJCWA8dGV4dCB4PSI1MiIgeT0iMTYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLC1hcHBsZS1zeXN0ZW0sU2Vnb2UgVUksc2Fucy1zZXJpZiIgZm9udC13ZWlnaHQ9IjgwMCIgZm9udC1zaXplPSI3NiIgZmlsbD0iI2ZmZmZmZiI+YCArIHhtbFRleHQoaC50aXRsZSkgKyBgPC90ZXh0PmAgKwoJCWA8dGV4dCB4PSI1NiIgeT0iMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLC1hcHBsZS1zeXN0ZW0sU2Vnb2UgVUksc2Fucy1zZXJpZiIgZm9udC1zaXplPSIyMiIgZmlsbD0iI2U4ZTJkOCI+YCArIHhtbFRleHQoaC5zdWJ0aXRsZSkgKyBgPC90ZXh0PmAgKwoJCWA8dGV4dCB4PSI1NiIgeT0iMjM2IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLE1lbmxvLG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNiIgZmlsbD0iI2U2Mzk0NiI+YCArIHhtbFRleHQoaC50YWdsaW5lKSArIGA8L3RleHQ+YCArCgkJYDx0ZXh0IHg9IjU2IiB5PSIyNjYiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsTWVubG8sbW9ub3NwYWNlIiBmb250LXNpemU9IjEyIiBmaWxsPSIjOGE4YThhIj5gICsgeG1sVGV4dChoLmZvb3RsaW5lKSArIGA8L3RleHQ+YCArCgkJYDwvc3ZnPmAKfQoKZnVuYyBoZXJvSW1hZ2UoKSBzdHJpbmcgewoJcmV0dXJuICIhWyIgKyBtZFRleHQoaGVyby5hbHQpICsgIl0oZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwiICsKCQliYXNlNjQuU3RkRW5jb2RpbmcuRW5jb2RlVG9TdHJpbmcoW11ieXRlKGhlcm9TVkcoaGVybykpKSArICIpIgp9Chq3bgoLY29udGVudC5nbm8Sp25wYWNrYWdlIGhvbWUKCi8vIGRlZmF1bHRTbG90cyBhbmQgZGVmYXVsdEdhbGxlcmllcyBzZWVkIHRoZSBwYWdlIGF0IGRlcGxveSB0aW1lLiBBZnRlciB0aGF0Ci8vIHRoZSBjaGFpbiBpcyB0aGUgc291cmNlIG9mIHRydXRoOiBlZGl0IHdpdGggU2V0IGFuZCBTZXRHYWxsZXJ5LCBub3QgYnkKLy8gcmVkZXBsb3lpbmcuCgpjb25zdCBob21lID0gIi9yL2cxNzQ3dDVtMmYwOHBscWpscmprMnEwcWxkNzQ2NWh4ejhna3g1OWMvaG9tZSIKCmNvbnN0IG1lbWJhID0gImh0dHBzOi8vbWVtYmEuc2Ftb3VyYWkuYXBwL21haW5uZXQiCgp2YXIgaGVybyA9IGhlcm9UZXh0ewoJa2lja2VyOiAgICJTQU1PVVJBw48gQ09PUCDCtyBHTk8uTEFORCDCtyBQQVJJUyIsCgl0aXRsZTogICAgInrDtMOWbWEiLAoJc3VidGl0bGU6ICJGb3VuZGVyLCBDRU8gJiBDVE8gb2YgU2Ftb3VyYcOvIENvb3AiLAoJdGFnbGluZTogICI8MyBpcyB0aGUgZW5jcnlwdGlvbiBrZXkuIiwKCWZvb3RsaW5lOiAiZmlsbSBjcmV3IMK3IGVuZ2luZWVyaW5nIHN0dWRpbyDCtyBnbm8ubGFuZCBjb3JlIGNvbnRyaWJ1dG9ycyIsCglhbHQ6ICAgICAgInrDtMOWbWEsIEZvdW5kZXIsIENFTyAmIENUTyBvZiBTYW1vdXJhw68gQ29vcCIsCn0KCnZhciBkZWZhdWx0U2xvdHMgPSBbXXN0cnVjdHsgc2x1ZywgYm9keSBzdHJpbmcgfXsKCXsibGF5b3V0IiwgYDpoZXJvOgoKPGduby1jb2x1bW5zPgohW3rDtMOWbWFdKGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8zNzM0NTA0MD9zPTQwMCkKPGduby1jb2x1bW5zLXNlcCAvPgo6YmlvOgoKOnNvY2lhbDoKPC9nbm8tY29sdW1ucz4KCiMjIOS7iiBOb3cKCjpub3c6CgojIyDpgZMgRm91ciB5ZWFycyBpbiB0aGUgZ25vLmxhbmQgY29yZQoKOmNvcmU6CgojIyDmupAgT3BlbiBzb3VyY2UKCjpvc3M6Cgo6Z2FsbGVyeS5vc3M6CgojIyDkvZwgUHJvZHVjdHMKCjpwcm9kdWN0czoKCjpnYWxsZXJ5LnByb2R1Y3RzOgoKIyMg57WEIEluc2lkZSBNZW1iYQoKOm1lbWJhOgoKOmdhbGxlcnkubWVtYmE6CgojIyDpjLIgZ25vLmxhbmQgb24gZmlsbQoKOmdub2ZpbG06Cgo6Z2FsbGVyeS5nbm86CgojIyDnpa0gRXZlbnRzCgo6ZXZlbnRzOgoKOmdhbGxlcnkuZXZlbnRzOgoKIyMg5aCxIENvbnRyaWJ1dGlvbiByZXBvcnRzCgo6cmVwb3J0czoKCjpnYWxsZXJ5LnJlcG9ydHM6CgojIyDlraYgUGVlciBEZXY6IGduby5sYW5kLCB0YXVnaHQgb24gdmlkZW8KCjpwZWVyZGV2OgoKOmdhbGxlcnkucGVlcmRldjoKCiMjIOaXhSBXRUIgVFJJUAoKOndlYnRyaXA6Cgo6Z2FsbGVyeS53ZWJ0cmlwOgoKIyMg5pigIEZpbG1zIGJ5IHRoZSBjcmV3Cgo6ZmlsbXM6Cgo6Z2FsbGVyeS5maWxtczoKCiMjIOaVsCBOdW1iZXJzCgo6bnVtYmVyczoKCiMjIOKZpSA8MyBpcyB0aGUgZW5jcnlwdGlvbiBrZXkKCjpoZWFydHM6CgotLS0KCipUaGlzIHBhZ2UgaXMgYSBjb250cmFjdC4qIGAgKyAiYDpyZWFsbTpgIiArIGAgwrcgcmV2IDpyZXY6IMK3IGJsb2NrIDpoZWlnaHQ6IG9uIDpjaGFpbmlkOiDCtyBldmVyeSBwb3N0ZXIgb24gaXQgaXMgZHJhd24gb24gY2hhaW4gwrcgW3Nsb3RzXShgICsgaG9tZSArIGA6c2xvdHMpCmB9LAoKCXsiYmlvIiwgYCoqRm91bmRlciwgQ0VPICYgQ1RPIG9mIFtTYW1vdXJhw68gQ29vcF0oaHR0cHM6Ly93d3cuc2Ftb3VyYWkud29ybGQpKiosIGEgd29ya2VyIGNvb3BlcmF0aXZlIGZyb20gUGFyaXMgdGhhdCBpcyBhIGZpbG0gY3JldyBhbmQgYW4gZW5naW5lZXJpbmcgc3R1ZGlvIGluIG9uZSBjb21wYW55LCBidWlsZGluZyBhbmQgcHJvbW90aW5nIG9wZW4tc291cmNlIGN1bHR1cmUgc2luY2UgMjAxNi4KCkNvLWZvdW5kZXIgb2YgdGhlIFtQYXJpcyBQMlAgRmVzdGl2YWxdKGh0dHBzOi8vcDJwLnNhbW91cmFpLnR2KS4gRm9yIG1vcmUgdGhhbiAxMiB5ZWFycyBJJ3ZlIHdvcmtlZCBhY3Jvc3MgdGhlIHBlZXItdG8tcGVlciwgY3liZXJzZWN1cml0eSBhbmQgb3Blbi1zb3VyY2UgZWNvc3lzdGVtcywgcmVzZWFyY2hpbmcgYW5kIGJ1aWxkaW5nIGRlY2VudHJhbGl6ZWQgb3JnYW5pemF0aW9ucy4gQWxvbmdzaWRlIHRoZSBjb29wLCBJIGxlYWQgKipzYW1jcmV3KiosIG91ciBnbm8ubGFuZCB0ZWFtOiBjb3JlIGNvbnRyaWJ1dG9ycyB0byBHbm9WTSBhbmQgdGhlIGduby5sYW5kIGNoYWluLCBhbmQgb25lIG9mIGl0cyBnZW5lc2lzIHZhbGlkYXRvcnMuIEkgYWxzbyBidWlsZCBbTWVtYmFdKGh0dHBzOi8vbWVtYmEuc2Ftb3VyYWkuYXBwKS5gfSwKCgl7InNvY2lhbCIsIGBbR2l0SHViXShodHRwczovL2dpdGh1Yi5jb20venh4bWEpIMK3IFtzYW1vdXJhaS53b3JsZF0oaHR0cHM6Ly93d3cuc2Ftb3VyYWkud29ybGQpIMK3IFtTYW1vdXJhw68gVFZdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2NoYW5uZWwvVUMwZ0V4U1N6eVU4Z1RxVWpvWWVySThBKSDCtyBbWF0oaHR0cHM6Ly93d3cudHdpdHRlci5jb20vc2Ftb3VyYWljb29wKSDCtyBbdGhlIGNyZXddKC91L3NhbWNyZXcpYH0sCgoJeyJub3ciLCBgLSAqKkhvbGRpbmcgdGhlIGxpbmUuKiogc2FtY3JldyBydW5zIG9uZSBvZiB0aGUgZm91ciB2YWxpZGF0b3JzIHNlY3VyaW5nIGAgKyAiYGdub2xhbmQtMWAiICsgYCwgbGl2ZSBzaW5jZSBtYWlubmV0IGxhdW5jaCBvbiAxMiBTZXB0ZW1iZXIgMjAyNi4KLSAqKk1lbWJhLCBvbiBtYWlubmV0LioqIDE0IHNhbWNyZXcgcGFja2FnZXMgYXJlIGxpdmUsIGZyb20gdGhlIFtBcHAgU3RvcmVdKC9yL3NhbWNyZXcvbWVtYmFfYXBwc3RvcmVfdjMpIHRvIFtlc2Nyb3ddKC9yL3NhbWNyZXcvZXNjcm93X3YzKSBhbmQgYW4gW2FyY2FkZSBsZWFkZXJib2FyZF0oL3Ivc2FtY3Jldy9tZW1iYV9hcmNhZGVfbGVhZGVyYm9hcmRfdjEpLgotICoqRmlsbWluZyB0aGUgY2hhaW4uKiogVGhlIGNyZXcga2VlcHMgZG9jdW1lbnRpbmcgZ25vLmxhbmQ6IHJldHJlYXRzLCBldmVudHMsIGJ1aWxkZXJzLmB9LAoKCXsiY29yZSIsIGBTYW1vdXJhw68gQ29vcCBoYXMgY29udHJpYnV0ZWQgdG8gdGhlIGduby5sYW5kIGNvcmUgZm9yIG1vcmUgdGhhbiBmb3VyIHllYXJzLiBUaGUgY3JldyBoYXMgKipbMjU2IG1lcmdlZCBwdWxsIHJlcXVlc3RzIGluIGdub2xhbmcvZ25vXShodHRwczovL2dpdGh1Yi5jb20vZ25vbGFuZy9nbm8vcHVsbHM/cT1pcyUzQXByK2lzJTNBbWVyZ2VkK2F1dGhvciUzQW9tYXJzeSthdXRob3IlM0FWaWxsYXF1aXJhbm0rYXV0aG9yJTNBbXZhbGxlbmV0K2F1dGhvciUzQWRhdmQtZ3psK2F1dGhvciUzQW4waXpuMGl6K2F1dGhvciUzQWh0aGlldTExMTArYXV0aG9yJTNBbW9vbmlhK2F1dGhvciUzQVdhRGFkaWRvdSthdXRob3IlM0FvbW5pd2lyZWQrYXV0aG9yJTNBQW1velBheSkqKiwgYWJvdXQgb25lIGluIGVsZXZlbiBvZiBldmVyeSBQUiBldmVyIG1lcmdlZCB0aGVyZSwgYW5kIG1vcmUgZWFjaCB5ZWFyOiA0OCBpbiAyMDI0LCA3OSBpbiAyMDI1LCAxMjggc28gZmFyIGluIDIwMjYuCgp8IHwgd2hhdCB3ZSBkbyB8CnwgLS0tIHwgLS0tIHwKfCAqKkdub1ZNKiogfCBUaGUgaW50ZXJwcmV0ZXIsIGl0cyB0eXBlIGNoZWNrZXIsIHN0ZGxpYnMgYW5kIHRlc3Qgc3VpdGU6IG1vc3Qgb2Ygb3VyIHVwc3RyZWFtIHdvcmsuIHwKfCAqKlNlY3VyaXR5KiogfCBIYXJkZW5pbmcgdGhlIFZNLCBjb25zZW5zdXMgYW5kIHAycCBhZ2FpbnN0IGNyYXNoZXMsIG92ZXJmbG93cyBhbmQgbWFsZm9ybWVkIGlucHV0LiB8CnwgKipDaGFpbiAmIHRvb2xpbmcqKiB8IGduby5sYW5kIG5vZGUsIHRtMiwgZ2VuZXNpcyB0b29scywgYCArICJgZ25vZGV2YCIgKyBgLCBkb2NzLiB8CnwgKipWYWxpZGF0b3JzKiogfCBBIGdlbmVzaXMgdmFsaWRhdG9yLCBbZ25vbW9uaXRvcmluZ10oaHR0cHM6Ly9naXRodWIuY29tL3NhbW91cmFpd29ybGQvZ25vbW9uaXRvcmluZykgYW5kIHRoZSBba2F0YW5hXShodHRwczovL2dpdGh1Yi5jb20vc2Ftb3VyYWl3b3JsZC9rYXRhbmEpIEdvdkRBTyBkYWVtb24uIHwKfCAqKkdvdmVybmFuY2UgcmVzZWFyY2gqKiB8IE91ciBbcmVzZWFyY2ggbGFiXShodHRwczovL3NhbW91cmFpd29ybGQuZ2l0aHViLmlvL2dvdi1yZXNlYXJjaC13aWtpLykgc3R1ZGllcyBob3cgY29vcGVyYXRpdmVzLCBEQU9zIGFuZCBvcGVuLXNvdXJjZSBwcm9qZWN0cyBnb3Zlcm4gdGhlbXNlbHZlcy4gW2dub2Rhb2tpdF0oaHR0cHM6Ly9naXRodWIuY29tL3NhbW91cmFpd29ybGQvZ25vZGFva2l0KSBhbmQgTWVtYmEgYXJlIGl0cyBvdXRwdXQuIHwKfCAqKkRlc2lnbiBwYXJ0bmVyKiogfCBXZSBidWlsZCBvdXIgb3duIHByb2R1Y3RzIG9uIGduby5sYW5kIGFuZCBzZW5kIHdoYXQgdGhleSB0ZWFjaCB1cyBiYWNrIHVwc3RyZWFtLiB8CnwgKipEb2N1bWVudGF0aW9uKiogfCBSZXRyZWF0IGFuZCBldmVudCByZXBvcnRzIGZvciB0aGUgY29yZSB0ZWFtLCB0aGUgUGVlciBEZXYgdHV0b3JpYWxzLCB0aGUgV0VCIFRSSVAgaW50ZXJ2aWV3cy4gfGB9LAoKCXsib3NzIiwgYEV2ZXJ5dGhpbmcgd2UgY2FuIG9wZW4sIHdlIG9wZW4uIE91ciBwdWJsaWMgZ25vIHJlcG9zaXRvcmllcyBhcmUgb24gW0dpdEh1Yl0oaHR0cHM6Ly9naXRodWIuY29tL3NhbW91cmFpd29ybGQpOyB0aGUgd2hvbGUgdGVhbSBwYWdlIGlzIGF0IFsvdS9zYW1jcmV3XSgvdS9zYW1jcmV3KS5gfSwKCgl7Imdub2ZpbG0iLCBgVGhlIGNyZXcgZmlsbXMgZ25vLmxhbmQgZnJvbSB0aGUgaW5zaWRlOiBicmFuZCBmaWxtcywgY29yZS10ZWFtIHJldHJlYXRzLCBwb3J0cmFpdHMgb2YgdGhlIHRlYW1zIGJ1aWxkaW5nIG9uIGl0LmB9LAoKCXsicHJvZHVjdHMiLCBgUHJvZHVjdHMgYnVpbHQgYW5kIHJ1biBieSB0aGUgY29vcCwgY2xvc2VzdCB0byBnbm8ubGFuZCBmaXJzdC5gfSwKCgl7Im1lbWJhIiwgYFtNZW1iYV0oaHR0cHM6Ly9tZW1iYS5zYW1vdXJhaS5hcHApIGlzIGFuIGV4cGVyaW1lbnRhbCBvcGVyYXRpbmcgc3lzdGVtIGZvciBkZWNlbnRyYWxpc2VkIG9yZ2FuaXNhdGlvbnMsIGFuZCB0aGUgZGlyZWN0IG91dHB1dCBvZiBvdXIgZ292ZXJuYW5jZSByZXNlYXJjaC4gSXQgaXMgTUlULWxpY2Vuc2VkIGFuZCBbb3BlbiBzb3VyY2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9zYW1vdXJhaXdvcmxkL21lbWJhKS4gRWFjaCBvZiBpdHMgcGFydHMgaXMgYSBwcm9kdWN0IGluIGl0cyBvd24gcmlnaHQuIEhvdmVyIGEgY2FyZCBmb3IgZGV0YWlscy4KCkV2ZXJ5IGdhbWUgdXNlcyBvbmUgZGFpbHkgc2VlZCBmb3IgZXZlcnlvbmUsIGRyYXduIGZyb20gYSBnbm8ubGFuZCBibG9jaywgYW5kIG5lZWRzIG5vIHdhbGxldC5gfSwKCgl7ImV2ZW50cyIsIGBXZSBwcm9kdWNlIHRoZSBldmVudHMgd2UgYmVsaWV2ZSBpbiwgYW5kIHdlIGZpbG0gdGhlIHJlc3Qgb2YgdGhlIGVjb3N5c3RlbSdzLiAqKlBhcmlzIFAyUCBGZXN0aXZhbCoqOiBmaXZlIGRheXMgb2YgcGVlci10by1wZWVyIGF0IEdyb3VuZCBDb250cm9sLCBmcmVlLCBmb3IgNSwwMDAgcGVvcGxlLiBUaGUgw4lkaXRpb24gIzEgdGFsa3MgYXJlIFthbGwgb25saW5lXShodHRwczovL3AycC5zYW1vdXJhaS50dikuICoqSHlwZXIgSGFja3RpdmUgRmVzdGl2YWwqKjogYSBmaWxtIGZlc3RpdmFsIGZvciBpbmRlcGVuZGVudCBkb2N1bWVudGFyaWVzIGZ1bmRlZCBieSBTYW1vdXJhw68gR3JhbnRzLiBJdCBoYXMgaGFkIHRocmVlIGVkaXRpb25zLCB0d28gYXQgbWsyIFF1YWkgZGUgU2VpbmUsIGFuZCBzZWxscyBpdHMgdGlja2V0cyBvbiBaZW5hby5gfSwKCgl7InJlcG9ydHMiLCBgRWFjaCB5ZWFyLCBvbmUgZmlsbSBzaG93cyBldmVyeXRoaW5nIHRoZSBjb29wIHNoaXBwZWQuYH0sCgoJeyJwZWVyZGV2IiwgYEEgMTctbGVzc29uIGN1cnJpY3VsdW0sIHByb2R1Y2VkIGVuZCB0byBlbmQgYnkgdGhlIGNvb3AsIHRoYXQgdGFrZXMgYSBkZXZlbG9wZXIgZnJvbSBhbiBlbXB0eSBtYWNoaW5lIHRvIEdvdkRBTyBhbmQgdGhlIGludGVycmVhbG0gc3BlYy4gW1dhdGNoIHRoZSBwbGF5bGlzdF0oaHR0cHM6Ly93d3cueW91dHViZS5jb20vcGxheWxpc3Q/bGlzdD1QTEpaclFpa3lmTWMta0JvalhnQW9qT3o0VVFQdXE0RGlZKS5gfSwKCgl7IndlYnRyaXAiLCBgRWlnaHQgY29udmVyc2F0aW9ucyB3aXRoIGduby5sYW5kIGFuZCB3ZWIzIGJ1aWxkZXJzLCBmaWxtZWQgYnkgdGhlIGNyZXcgaW4gMjAyNC5gfSwKCgl7ImZpbG1zIiwgYDQwIGZlc3RpdmFsIHNlbGVjdGlvbnMsIDMgd2lucy4gW1RoZSBVbmRlcmdyb3VuZCBTaXN0aW5lIENoYXBlbF0oaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1mc1JGSG1kaXlHRSkgdG9vayBCZXN0IERvY3VtZW50YXJ5IGF0IHRoZSBMb25kb24gSW5kZXBlbmRlbnQgRmlsbSBBd2FyZHMgYW5kIHdhcyByZWxlYXNlZCBmcmVlIG9uIGJvdGggSVBGUyBhbmQgWW91VHViZS5gfSwKCgl7Im51bWJlcnMiLCBgfCBzaW5jZSBkYXkgb25lIHwgfAp8IC0tLSB8IC0tLTogfAp8IENyZXcgUFJzIG1lcmdlZCBpbiBnbm9sYW5nL2dubyB8IDI1NiB8CnwgTXkgbWVyZ2VkIHB1bGwgcmVxdWVzdHMsIGFsbCByZXBvcyB8IDIsOTQxIHwKfCDigKZvZiB3aGljaCBpbnRvIE1lbWJhIHwgMSwwMTggfAp8IHNhbWNyZXcgcGFja2FnZXMgbGl2ZSBvbiBgICsgImBnbm9sYW5kLTFgIiArIGAgfCAxNCB8CnwgUHJvamVjdHMgZGVsaXZlcmVkIGJ5IHRoZSBjb29wIHNpbmNlIDIwMTYgfCA1MDArIHwKfCBGZXN0aXZhbCBzZWxlY3Rpb25zIMK3IHdpbnMgfCA0MCDCtyAzIHwKfCBQZWVyIERldiB0dXRvcmlhbHMgfCAxNyB8CnwgQ29udHJpYnV0aW5nIG9uIEdubyBzaW5jZSB8IDIwMjIgfAoKKkNvdW50ZWQgZnJvbSBHaXRIdWIsIHRoZSBjaGFpbiBhbmQgc2Ftb3VyYWkud29ybGQgb24gMjMgU2VwdGVtYmVyIDIwMjYuKmB9LAp9Cgpjb25zdCAoCgl5dCA9ICJodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PSIKCWdoID0gImh0dHBzOi8vZ2l0aHViLmNvbS9zYW1vdXJhaXdvcmxkLyIKKQoKdmFyIGRlZmF1bHRHYWxsZXJpZXMgPSBbXXN0cnVjdHsgbmFtZSwgc3BlYyBzdHJpbmcgfXsKCXsiZ25vIiwgYApnbm8gfCBHbm86IFRoZSBQb3dlciBUbyBCdWlsZCBXaGF0IE1hdHRlcnMgfCBnbm8ubGFuZCDCtyBicmFuZCBmaWxtIHwgYCArIHl0ICsgYE05MjBQTzN5ckhrCmdubyB8IEFsaWdubWVudCBSZXRyZWF0LCBUdXJpbiB8IGduby5sYW5kIGNvcmUgdGVhbSDCtyByZXRyZWF0IHJlcG9ydCB8IGAgKyB5dCArIGAzY3pNSzNzMzBLUQpnbm8gfCBJbnNpZGUgT25ibG9jIHwgZ25vLmxhbmQgwrcgdGVhbSBwb3J0cmFpdCDCtyBOb3YgMjAyNCB8IGAgKyB5dCArIGA3dW14SFlESjRCawpgfSwKCgl7Im1lbWJhIiwgYAptZW1iYSB8IE11bHRpc2lnIFdhbGxldCB8IEZvciBvcmdhbml6YXRpb25zIMK3IEFkZW5hICYgZ25va2V5IHwgYCArIG1lbWJhICsgYC9tdWx0aXNpZyB8IENyZWF0ZSBvciBpbXBvcnQgYSBtdWx0aXNpZywgcHJvcG9zZSBzZW5kcyBhbmQgY29udHJhY3QgY2FsbHMsIGNvbGxlY3Qgc2lnbmF0dXJlcyBmcm9tIEFkZW5hIG9yIGdub2tleSwgdGhlbiBicm9hZGNhc3QuCm1lbWJhIHwgREFPIE1hbmFnZW1lbnQgfCBDcmVhdGUsIHZvdGUsIGV4ZWN1dGUgwrcgR292REFPIHwgYCArIG1lbWJhICsgYC9kYW8gfCBCcm93c2UgR292REFPIGFuZCBjb21tdW5pdHkgREFPcywgdm90ZSwgZXhlY3V0ZSwgY3JlYXRlIHlvdXIgb3duIGFuZCB0YWxrIGluIERBTyBjaGFubmVscy4KbWVtYmEgfCBWYWxpZGF0b3IgTW9uaXRvcmluZyB8IFJlbGlhYmlsaXR5IHNjb3JlcyDCtyBoYWNrZXIgdmlldyB8IGAgKyBtZW1iYSArIGAvdmFsaWRhdG9ycyB8IEV2ZXJ5IHZhbGlkYXRvciBzY29yZWQgZm9yIHJlbGlhYmlsaXR5LCBwbHVzIGEgbGl2ZSBjb25zZW5zdXMgaGFja2VyIHZpZXcuCm1lbWJhIHwgQWxlcnRpbmcgfCBHb3ZEQU8gJiB2YWxpZGF0b3JzIMK3IDMgY2hhbm5lbHMgfCBgICsgbWVtYmEgKyBgL2FsZXJ0cyB8IEdvdkRBTyBhbmQgdmFsaWRhdG9yIGFsZXJ0cyBvbiBEaXNjb3JkLCBTbGFjayBhbmQgVGVsZWdyYW0uCm1lbWJhIHwgT24tY2hhaW4gQXBwIFN0b3JlIHwgUmVnaXN0cnkgwrcgc3VibWlzc2lvbnMgwrcgY3VyYXRpb24gfCBgICsgbWVtYmEgKyBgL2FwcHMgfCBUaGUgZWNvc3lzdGVtJ3MgYXBwcywgd2l0aCBhbiBvbi1jaGFpbiByZWdpc3RyeSwgc3VibWlzc2lvbnMgYW5kIGN1cmF0aW9uLgptZW1iYSB8IERpcmVjdG9yeSB8IERBT3MgwrcgcmVhbG1zIMK3IHBhY2thZ2VzIMK3IHVzZXJzIHwgYCArIG1lbWJhICsgYC9kaXJlY3RvcnkgfCBTZWFyY2ggREFPcywgcmVhbG1zLCBwYWNrYWdlcywgdG9rZW5zIGFuZCB1c2Vycywgd2l0aCBzb3VyY2UgYW5kIHJlbmRlciBzaWRlIGJ5IHNpZGUuCm1lbWJhIHwgRGV2IFJlcG9ydHMgfCBnbm9sb3ZlIHNjb3JlYm9hcmQgwrcgd2Vla2x5IHJlcG9ydHMgfCBgICsgbWVtYmEgKyBgL2dub2xvdmUgfCBUaGUgZ25vbG92ZSBjb250cmlidXRvciBzY29yZWJvYXJkLCB3ZWVrbHkgcmVwb3J0cyBhbmQgdGVhbSBhbmFseXRpY3MuCm1lbWJhIHwgVG9rZW4gTGF1bmNoZXIgfCBHUkMyMCDCtyBicm93c2UgJiBsYXVuY2ggfCBgICsgbWVtYmEgKyBgL3Rva2VucyB8IEJyb3dzZSBHUkMyMCB0b2tlbnMgYW5kIGxhdW5jaCB5b3VyIG93bi4KbWVtYmEgfCBTb2NpYWwgRmVlZCB8IE9uLWNoYWluIHBvc3RzIMK3IG9wZW4gbW9kZXJhdGlvbiB8IGAgKyBtZW1iYSArIGAvZmVlZCB8IEFuIG9uLWNoYWluIHNvY2lhbCBmZWVkIHdpdGggYSBwdWJsaWMgbW9kZXJhdGlvbiBsb2cuCm1lbWJhIHwgUXVlc3RzICYgQmFkZ2VzIHwgR25vQnVpbGRlcnMgwrcgODUgcXVlc3RzIMK3IDggcmFua3MgfCBgICsgbWVtYmEgKyBgL3F1ZXN0cyB8IEdub0J1aWxkZXJzOiA4NSBxdWVzdHMsIDggcmFua3MsIGEgbGVhZGVyYm9hcmQgYW5kIG9uLWNoYWluIGJhZGdlcy4KZ2FtZSB8IFNwYWNlIEludmFkZXJzIHwgRGFpbHkgb3IgZnJlZSBwbGF5IMK3IG5vIHdhbGxldCB8IGAgKyBtZW1iYSArIGAvZ2FtZS9zcGFjZS1pbnZhZGVycyB8IE1hcmNoaW5nIHdhdmVzLCBjb21ib3MsIGEgbXlzdGVyeSBVRk8gYW5kIGRlc3RydWN0aWJsZSBidW5rZXJzLiBEYWlseSBvciBmcmVlIHBsYXksIGtleWJvYXJkIG9yIHRvdWNoLgpnYW1lIHwgQmxvY2sgUGFydHkgfCBEYWlseSA0w5c0IG1lcmdlIMK3IHNlZWRlZCBieSBhIGJsb2NrIHwgYCArIG1lbWJhICsgYC9nYW1lIHwgQSBkYWlseSB0aWxlLW1lcmdlIHB1enpsZS4gRXZlcnlvbmUgZ2V0cyB0aGUgc2FtZSBib2FyZCwgc2VlZGVkIGZyb20gYSByZWFsIGduby5sYW5kIGJsb2NrLiBTdHJlYWtzIGFuZCBhIGRhaWx5IGxlYWRlcmJvYXJkLgpnYW1lIHwgQkFSUklDQURFIHwgOTAtc2Vjb25kIGxhbmUgZGVmZW5jZSDCtyA4IHdhdmVzIHwgYCArIG1lbWJhICsgYC9nYW1lL2JhcnJpY2FkZSB8IEhvbGQgdGhlIGJhcnJpY2FkZSBhZ2FpbnN0IFRoZSBPcmRlciBmb3IgOCB3YXZlcyB1cCB0byB0aGUgQnJvYWRjYXN0IFRvd2VyLCB0aGVuIGFuIGVuZGxlc3Mgc2llZ2UuIFJ1bnMgY2FuIGJlIGNlcnRpZmllZCBvbiBjaGFpbi4KYH0sCgoJeyJvc3MiLCBgCm9zcyB8IG1lbWJhIHwgTXVsdGlzaWcgJiBEQU8gZ292ZXJuYW5jZSBmb3IgZ25vLmxhbmQgfCBgICsgZ2ggKyBgbWVtYmEKb3NzIHwgZ25vbG92ZSB8IFRoZSBnbm8ubGFuZCBjb250cmlidXRvciBzY29yZWJvYXJkIHwgYCArIGdoICsgYGdub2xvdmUKb3NzIHwgemVuYW8gfCBFdmVudCB0aWNrZXRpbmcgJiBjb21tdW5pdGllcyB8IGAgKyBnaCArIGB6ZW5hbwpvc3MgfCBnbm9kYW9raXQgfCBBIGZyYW1ld29yayBmb3IgREFPcyBpbiBHbm8gfCBgICsgZ2ggKyBgZ25vZGFva2l0Cm9zcyB8IGdub21vbml0b3JpbmcgfCBNb25pdG9yaW5nIGZvciBnbm8gdmFsaWRhdG9ycyB8IGAgKyBnaCArIGBnbm9tb25pdG9yaW5nCm9zcyB8IGthdGFuYSB8IEdvdkRBTyB2YWxpZGF0b3ItZWplY3Rpb24gZGFlbW9uIHwgYCArIGdoICsgYGthdGFuYQpvc3MgfCBnbm8tdmFsaWRhdG9yLXRvb2xzIHwgVmFsaWRhdG9ycyAmIHNlbnRyaWVzIGFzIGNvZGUgfCBgICsgZ2ggKyBgZ25vLXZhbGlkYXRvci10b29scwpvc3MgfCBnb3YtcmVzZWFyY2gtd2lraSB8IFRoZSBnb3Zlcm5hbmNlIHJlc2VhcmNoIGxhYiB8IGAgKyBnaCArIGBnb3YtcmVzZWFyY2gtd2lraQpvc3MgfCBwZWVyZGV2IHwgVGhlIFBlZXIgRGV2IGNoYW5uZWwsIGluIHRoZSBvcGVuIHwgYCArIGdoICsgYHBlZXJkZXYKb3NzIHwgdmFsaWRhdG9yLWRpYWdub3N0aWNzIHwgVGhlIHZhbGlkYXRvciBmaXJlLWRyaWxsIHBvcnRhbCB8IGAgKyBnaCArIGB2YWxpZGF0b3ItZGlhZ25vc3RpY3MKb3NzIHwgZ25vLW9uYm9hcmRpbmctYm90IHwgVmFsaWRhdG9yIG9uYm9hcmRpbmcsIG9uIERpc2NvcmQgfCBgICsgZ2ggKyBgZ25vLW9uYm9hcmRpbmctYm90Cm9zcyB8IGduby1nb3ZkYW8tYWN0aXZpdHktcGFyc2VyIHwgR292REFPIHZvdGVyIGFjdGl2aXR5ICYgdGVzdCBlbnYgfCBgICsgZ2ggKyBgZ25vLWdvdmRhby1hY3Rpdml0eS1wYXJzZXIKYH0sCgoJeyJwcm9kdWN0cyIsIGAKcHJvZHVjdCB8IE1lbWJhIHwgT3JnYW5pemF0aW9ucyBPUyBmb3IgZ25vLmxhbmQgfCBodHRwczovL21lbWJhLnNhbW91cmFpLmFwcApwcm9kdWN0IHwgWmVuYW8gfCBFdmVudCB0aWNrZXRpbmcgJiBjb21tdW5pdHkgY29vcmRpbmF0aW9uIHwgaHR0cHM6Ly96ZW5hby5pbwpwcm9kdWN0IHwgZ25vbG92ZSB8IFdobyBidWlsZHMgZ25vLmxhbmQsIHJhbmtlZCB8IGh0dHBzOi8vZ25vbG92ZS53b3JsZApwcm9kdWN0IHwgVmlzaW8gfCBGcmVlIHZpZGVvIG1lZXRpbmdzLCBubyBhY2NvdW50IHwgaHR0cHM6Ly92aXNpby5zYW1vdXJhaS5hcHAKcHJvZHVjdCB8IEdyZWZmb24gfCBTZWxmLWhvc3Qgc292ZXJlaWduIGFwcHMgaW4gb25lIGNsaWNrIHwgaHR0cHM6Ly9ncmVmZm9uLmlvCnByb2R1Y3QgfCBSZXBvcnR6IHwgVGhlIGRpZ2l0YWwgY29tbW9ucywgbGl2ZSBmcm9tIEdpdEh1YiB8IGh0dHBzOi8vcmVwb3J0ei5kZXYKYH0sCgoJeyJldmVudHMiLCBgCmZlc3RpdmFsIHwgUGFyaXMgUDJQIEZlc3RpdmFsIHwgQ28tZm91bmRlZCBieSB6w7TDlm1hIMK3IEdyb3VuZCBDb250cm9sIHwgYCArIHl0ICsgYFBROUk3M3RKb2JVCmZlc3RpdmFsIHwgSHlwZXIgSGFja3RpdmUgRmVzdGl2YWwgfCAzIGVkaXRpb25zIMK3IG1rMiBRdWFpIGRlIFNlaW5lIHwgaHR0cHM6Ly9oeXBlcmhhY2t0aXZlLmlvCmV2ZW50IHwgV2ViMyBTdW1taXQgfCBXZWIzIEZvdW5kYXRpb24gwrcgQmVybGluIDIwMjQtMjUgfCBgICsgeXQgKyBgUFJHMGNuVjdZRzgKZXZlbnQgfCBkV2ViIENhbXAgfCBJbnRlcm5ldCBBcmNoaXZlIMK3IENhbGlmb3JuaWEgMjAyMiB8IGAgKyB5dCArIGB6eDdEZHV2MEhkNApldmVudCB8IEZ1bmRpbmcgdGhlIENvbW1vbnMgfCBTYW4gRnJhbmNpc2NvIMK3IEJ1ZW5vcyBBaXJlcyB8IGAgKyB5dCArIGBiT1pyVWhhOWFROApgfSwKCgl7InJlcG9ydHMiLCBgCnJlcG9ydCB8IENvbnRyaWJ1dGlvbiBSZXBvcnQgMjAyNSB8IFNhbW91cmHDryBDb29wIMK3IFdlbGNvbWUgdG8gMjAyNiB8IGAgKyB5dCArIGBhRzRNMzdGWDRJSQpyZXBvcnQgfCBDb250cmlidXRpb24gUmVwb3J0IDIwMjQgfCBTYW1vdXJhw68gQ29vcCDCtyBXZWxjb21lIHRvIDIwMjUgfCBgICsgeXQgKyBgMzdMNHZVTHN6TFEKcmVwb3J0IHwgQ29udHJpYnV0aW9uIFJlcG9ydCAyMDIzIHwgU2Ftb3VyYcOvIENvb3AgwrcgV2VsY29tZSB0byAyMDI0IHwgYCArIHl0ICsgYHRqMGltR1ZKSFFjCmB9LAoKCXsicGVlcmRldiIsIGAKcGVlcmRldiB8IFNldHVwIHlvdXIgbG9jYWwgZW52aXJvbm1lbnQgfCBMZXNzb24gMSB8IGAgKyB5dCArIGBDOFJ1QV91VTNGcwpwZWVyZGV2IHwgQnVpbGQgYW5kIHRlc3QgeW91ciBmaXJzdCBkQXBwIHwgTGVzc29uIDIgfCBgICsgeXQgKyBgbnpvNlFneFFIZ3cKcGVlcmRldiB8IFJlZ2lzdGVyIHlvdXIgVXNlciBTcGFjZSB8IExlc3NvbiAzIHwgYCArIHl0ICsgYFI1dDFHbUJSVVZrCnBlZXJkZXYgfCBUcmFuc2FjdGlvbiB0eXBlcyB8IGNhbGwgwrcgcnVuIMK3IGFkZHBrZyDCtyBzZW5kIHwgYCArIHl0ICsgYC1aM00xWFZ4V1U4CnBlZXJkZXYgfCBDb2lucyBhbmQgR1JDMjAgfCBMZXNzb24gNSB8IGAgKyB5dCArIGA0dHdvVXlqbzRyQQpwZWVyZGV2IHwgQVZMIHRyZWUgdnMgbWFwIHwgTGVzc29uIDYgfCBgICsgeXQgKyBgUWg3M01xeHhLVE0KcGVlcmRldiB8IERlcGxveWluZyBHbm8gcGFja2FnZXMgfCBMZXNzb24gNyB8IGAgKyB5dCArIGBCN2JTcmVDd0lscwpwZWVyZGV2IHwgSW50ZXJhY3RpdmUgZG9jdW1lbnRhdGlvbiB8IExlc3NvbiA4IHwgYCArIHl0ICsgYHpwR3hNUW8zVi1vCnBlZXJkZXYgfCBFZmZlY3RpdmUgcHJvZ3JhbW1pbmcgaW4gR25vIHwgTGVzc29uIDkgfCBgICsgeXQgKyBgVU5KU3VNZGpURkEKcGVlcmRldiB8IEludGVycmVhbG0gc3BlY2lmaWNhdGlvbiB8IExlc3NvbiAxMCB8IGAgKyB5dCArIGBKSmp1Ny1HZVJiQQpwZWVyZGV2IHwgREFPcyBhbmQgbW9kdWxhciBnb3Zlcm5hbmNlIHwgTGVzc29uIDExIHwgYCArIHl0ICsgYFNwaFBnc2pLUXlRCnBlZXJkZXYgfCBHb3Zlcm5hbmNlIERBTyAoR292REFPKSB8IExlc3NvbiAxMiB8IGAgKyB5dCArIGBqTS02ZXp5bl92NApwZWVyZGV2IHwgSW5kZXggeW91ciB0cmFuc2FjdGlvbnMgfCB0eC1pbmRleGVyIHwgYCArIHl0ICsgYDhsZDBuc1YzN1NBCnBlZXJkZXYgfCBNb25pdG9yIHlvdXIgdmFsaWRhdG9yIHwgZ25vbW9uaXRvcmluZyB8IGAgKyB5dCArIGB1andiS1NGU193ZwpwZWVyZGV2IHwgRXh0ZW5kIHlvdXIgSURFIHwgVlMgQ29kZSDCtyBOZW92aW0gwrcgRW1hY3MgwrcgSmV0QnJhaW5zIHwgYCArIHl0ICsgYFNzazFtLVlHbnlvCnBlZXJkZXYgfCBTZWN1cmUgeW91ciB3YWxsZXQgfCBMZXNzb24gMTYgfCBgICsgeXQgKyBgcTJqbE44S1hCTUEKcGVlcmRldiB8IEdubyB2cyBTb2xpZGl0eSB8IExlc3NvbiAxNyB8IGAgKyB5dCArIGBPaTc3aHZKQ1ZiVQpgfSwKCgl7IndlYnRyaXAiLCBgCndlYnRyaXAgfCAjMSBDcmVhdGluZyBhIE5ldyBFcmEgd2l0aCBHbm8gfCBNYW5mcmVkIFRvdXJvbiDCtyBnbm8ubGFuZCB8IGAgKyB5dCArIGBIdjJRU0lqel9VOAp3ZWJ0cmlwIHwgIzIgQnVpbGRpbmcgVHJ1c3QgaW4gV2ViMyB8IElzYWFjIFBhdGthIMK3IFNoaWVsZDMgfCBgICsgeXQgKyBgaEtjOWVXVTJfQ0kKd2VidHJpcCB8ICMzIERpZ2l0YWwgQXJ0IERpc3J1cHRvcnMgfCBEaXN0cmlidXRlZCBHYWxsZXJ5IHwgYCArIHl0ICsgYDRudlZhazk3ZWlrCndlYnRyaXAgfCAjNCBEZWNlbnRyYWxpemluZyBEaWdpdGFsIENvbW11bml0aWVzIHwgTW9yZ2FuIEJhemFsZ2V0dGUgwrcgZ25vLmxhbmQgfCBgICsgeXQgKyBgSHBybDJXa01ZQ0EKd2VidHJpcCB8ICM1IEJyaWRnaW5nIFdlYjIgYW5kIFdlYjMgfCBEb25nd29uIFNoaW4gwrcgT25ibG9jIHwgYCArIHl0ICsgYC1rYl9ONFk3Y20wCndlYnRyaXAgfCAjNiBUaGUgRnV0dXJlIG9mIFN0YWtpbmcgYW5kIE5GVHMgfCBBZHJpZW4gRmFndWV0IMK3IFN0YWtlTGFiIHwgYCArIHl0ICsgYDBjT2RJb1ExbnBJCndlYnRyaXAgfCAjNyBQZXJzb25hbCBEZXZlbG9wbWVudCBhbmQgQmxvY2tjaGFpbiB8IERyYWdvcyBSb3VhIHwgYCArIHl0ICsgYGF3OFNKYWp6UmRBCndlYnRyaXAgfCAjOCBXb3JrLUxpZmUgQmFsYW5jZSAmIFByb2R1Y3QgRGVzaWduIHwgRGlhbmUgfCBgICsgeXQgKyBgcl9TOVlid0Y5VU0KYH0sCgoJeyJmaWxtcyIsIGAKZmlsbSB8IFRoZSBVbmRlcmdyb3VuZCBTaXN0aW5lIENoYXBlbCB8IEZlYXR1cmUgZG9jdW1lbnRhcnkgwrcgMjAyMSB8IGAgKyB5dCArIGBmc1JGSG1kaXlHRQpmaWxtIHwgSGFzaGlyaXlhIHwgRG9jdW1lbnRhcnkgwrcgMjAyNSB8IGAgKyB5dCArIGBPcU1UbVNFYnFxWQpmaWxtIHwgU295IFlvIHwgRG9jdW1lbnRhcnkgwrcgMjAyNSB8IGAgKyB5dCArIGBmV0UyZnBadURFTQpmaWxtIHwgTWHDsWFuYSBjdWVzdGEgbcOhcyB8IERvY3VtZW50YXJ5IMK3IDIwMjYgfCBgICsgeXQgKyBgUEVBUjdsOGRHRWsKZmlsbSB8IENvbW11bml0eSBOZXR3b3JrcyB8IERvY3VtZW50YXJ5IMK3IDIwMjQgfCBgICsgeXQgKyBgSnVIVnRlRWhOem8KZmlsbSB8IEknbSBKdXN0IGEgTG9zdCBHdXkgfCBTaG9ydCBmaWxtIMK3IDIwMjUgfCBgICsgeXQgKyBgODRSZ1F4ZEkzbjgKYH0sCn0KGuFDCgtnYWxsZXJ5LmdubxLRQ3BhY2thZ2UgaG9tZQoKaW1wb3J0ICgKCSJlbmNvZGluZy9iYXNlNjQiCgkic3RyaW5ncyIKCgkiZ25vLmxhbmQvcC9udC9hdmwvdjAiCikKCi8vIFRoaXMgZmlsZSBpcyBzaGFyZWQsIHVuY2hhbmdlZCwgYnkgZXZlcnkgU2Ftb3VyYcOvIGhvbWUgcmVhbG0uCi8vCi8vIEEgZ2FsbGVyeSBpcyBhIG5hbWVkIGxpc3Qgb2YgY2FyZHMuIGdub3dlYidzIENTUCBvbmx5IHBhaW50cyBpbWFnZXMgZnJvbSBhCi8vIGZldyBob3N0cyAoWW91VHViZSB0aHVtYm5haWxzIGFyZSBub3QgYW1vbmcgdGhlbSkgYnV0IGl0IGFsbG93cwovLyBkYXRhOmltYWdlL3N2Zyt4bWwsIHNvIGV2ZXJ5IGNhcmQgaXMgYSBwb3N0ZXIgZHJhd24gaGVyZSwgb24gY2hhaW4sIGFuZAovLyBsaW5rZWQgdG8gaXRzIHZpZGVvIG9yIHNpdGUuCi8vCi8vIEEgZ2FsbGVyeSBpcyB3cml0dGVuIGluIG9uZSBTZXQtbGlrZSBjYWxsIGFzIGxpbmVzIG9mCi8vCi8vCWtpbmQgfCB0aXRsZSB8IG1ldGEgfCB1cmwgW3wgZGVzY3JpcHRpb25dCi8vCi8vIFRoZSBvcHRpb25hbCBkZXNjcmlwdGlvbiBiZWNvbWVzIHRoZSBjYXJkJ3MgaG92ZXIgdGV4dC4KLy8gYW5kIHJlbmRlcmVkIHdoZXJldmVyIHRoZSBsYXlvdXQgc2F5cyA6Z2FsbGVyeS48bmFtZT46LgoKY29uc3QgKAoJZ2FsbGVyeVByZWZpeCA9ICJnYWxsZXJ5LiIKCWNhcmRzUGVyUm93ICAgPSAzCgltYXhDYXJkcyAgICAgID0gNDgKCW1heFRpdGxlTGVuICAgPSA4MAoJbWF4TWV0YUxlbiAgICA9IDgwCgltYXhEZXNjTGVuICAgID0gMjAwCikKCnR5cGUgY2FyZCBzdHJ1Y3QgewoJa2luZCwgdGl0bGUsIG1ldGEsIHVybCBzdHJpbmcKCWRlc2MgICAgICAgICAgICAgICAgICAgc3RyaW5nIC8vIGhvdmVyIHRleHQsIG9wdGlvbmFsCglsYWJlbCAgICAgICAgICAgICAgICAgIHN0cmluZyAvLyBvdmVycmlkZXMgdGhlIGtpbmQncyBsYWJlbCB3aGVuIHNldAp9Cgp2YXIgZ2FsbGVyaWVzID0gYXZsLk5ld1RyZWUoKSAvLyBuYW1lIC0+IFtdY2FyZAoKdHlwZSBzdHlsZSBzdHJ1Y3QgewoJbGFiZWwsIGdseXBoLCBhY2NlbnQsIHNoYWRlIHN0cmluZwoJdmlkZW8gICAgICAgICAgICAgICAgICAgICAgIGJvb2wKfQoKdmFyIHN0eWxlcyA9IG1hcFtzdHJpbmddc3R5bGV7CgkicmVwb3J0IjogICAgICAgIHsiQ09OVFJJQlVUSU9OIFJFUE9SVCIsICLloLEiLCAiI2U2Mzk0NiIsICIjM2ExMDE0IiwgdHJ1ZX0sCgkiZ25vIjogICAgICAgICAgIHsiR05PLkxBTkQgwrcgRklMTUVEIEJZIFNBTU9VUkHDjyIsICLpgZMiLCAiIzJlYzRiNiIsICIjMGQyZTJiIiwgdHJ1ZX0sCgkid2VidHJpcCI6ICAgICAgIHsiV0VCIFRSSVAgwrcgU0VSSUVTIiwgIuaXhSIsICIjZmY3YWEyIiwgIiMzYTE0MjIiLCB0cnVlfSwKCSJwZWVyZGV2IjogICAgICAgeyJQRUVSIERFViDCtyBHTk8gVFVUT1JJQUwiLCAi5a2mIiwgIiM0ZWE4ZGUiLCAiIzBmMjUzNiIsIHRydWV9LAoJImV2ZW50IjogICAgICAgICB7IkVWRU5UIiwgIuelrSIsICIjZjRhMjYxIiwgIiMzYTI0MTIiLCB0cnVlfSwKCSJmZXN0aXZhbCI6ICAgICAgeyJGRVNUSVZBTCDCtyBCWSBTQU1PVVJBw48iLCAi56WtIiwgIiNmNGEyNjEiLCAiIzNhMjQxMiIsIGZhbHNlfSwKCSJmaWxtIjogICAgICAgICAgeyJGSUxNIMK3IERJUkVDVEVEIEJZIFRIRSBDUkVXIiwgIuaYoCIsICIjYjM4OGViIiwgIiMyNjFhMzYiLCB0cnVlfSwKCSJwcm9kdWN0IjogICAgICAgeyJQUk9EVUNUIiwgIuS9nCIsICIjZTljNDZhIiwgIiMzNTJiMTAiLCBmYWxzZX0sCgkibWVtYmEiOiAgICAgICAgIHsiTUVNQkEgwrcgUFJPRFVDVCIsICLntYQiLCAiI2U5YzQ2YSIsICIjMzUyYjEwIiwgZmFsc2V9LAoJImdhbWUiOiAgICAgICAgICB7IkFSQ0FERSDCtyBQTEFZIElOIE1FTUJBIiwgIumBiiIsICIjOGFjOTI2IiwgIiMxYzJhMGIiLCB0cnVlfSwKCSJvc3MiOiAgICAgICAgICAgeyJPUEVOIFNPVVJDRSDCtyBHSVRIVUIiLCAi5rqQIiwgIiNhOGIzYmQiLCAiIzFiMjAyNiIsIGZhbHNlfSwKCSJtZW1iZXIiOiAgICAgICAgeyJTQU1PVVJBw48gwrcgQ1JFVyIsICLkvo0iLCAiI2U2Mzk0NiIsICIjMmExMDEyIiwgZmFsc2V9LAoJIm1lbWJlci1tZWRpYSI6ICB7IlNBTU9VUkHDjyDCtyBNRURJQSIsICLmmKAiLCAiI2IzODhlYiIsICIjMjYxYTM2IiwgZmFsc2V9LAoJIm1lbWJlci1hbHVtbmkiOiB7IlNBTU9VUkHDjyDCtyBBTFVNTkkiLCAi5L6NIiwgIiM5YWEwYTYiLCAiIzFkMWYyMiIsIGZhbHNlfSwKfQoKZnVuYyBzdHlsZU9mKGtpbmQgc3RyaW5nKSBzdHlsZSB7CglpZiBzLCBvayA6PSBzdHlsZXNba2luZF07IG9rIHsKCQlyZXR1cm4gcwoJfQoJcmV0dXJuIHN0eWxle3N0cmluZ3MuVG9VcHBlcihraW5kKSwgIuS+jSIsICIjZTYzOTQ2IiwgIiMyYTEwMTIiLCBmYWxzZX0KfQoKLy8gU2V0R2FsbGVyeSByZXBsYWNlcyBhIHdob2xlIGdhbGxlcnkgZnJvbSBpdHMgbGluZSBmb3JtYXQuCmZ1bmMgU2V0R2FsbGVyeShjdXIgcmVhbG0sIG5hbWUsIHNwZWMgc3RyaW5nKSB7Cglhc3NlcnRBZG1pbihjdXIpCglpZiAhdmFsaWRTbHVnKG5hbWUpIHsKCQlwYW5pYygiaW52YWxpZCBnYWxsZXJ5IG5hbWU6ICIgKyBuYW1lKQoJfQoJY2FyZHMgOj0gcGFyc2VHYWxsZXJ5KHNwZWMpCglyZXYrKwoJZ2FsbGVyaWVzLlNldChuYW1lLCBjYXJkcykKfQoKLy8gRGVsZXRlR2FsbGVyeSByZW1vdmVzIGEgZ2FsbGVyeS4KZnVuYyBEZWxldGVHYWxsZXJ5KGN1ciByZWFsbSwgbmFtZSBzdHJpbmcpIHsKCWFzc2VydEFkbWluKGN1cikKCWlmIF8sIHJlbW92ZWQgOj0gZ2FsbGVyaWVzLlJlbW92ZShuYW1lKTsgIXJlbW92ZWQgewoJCXBhbmljKCJubyBzdWNoIGdhbGxlcnk6ICIgKyBuYW1lKQoJfQoJcmV2KysKfQoKZnVuYyBwYXJzZUdhbGxlcnkoc3BlYyBzdHJpbmcpIFtdY2FyZCB7Cgl2YXIgY2FyZHMgW11jYXJkCglmb3IgXywgbGluZSA6PSByYW5nZSBzdHJpbmdzLlNwbGl0KHNwZWMsICJcbiIpIHsKCQlsaW5lID0gc3RyaW5ncy5UcmltU3BhY2UobGluZSkKCQlpZiBsaW5lID09ICIiIHx8IHN0cmluZ3MuSGFzUHJlZml4KGxpbmUsICIjIikgewoJCQljb250aW51ZQoJCX0KCQlmIDo9IHN0cmluZ3MuU3BsaXQobGluZSwgInwiKQoJCWlmIGxlbihmKSAhPSA0ICYmIGxlbihmKSAhPSA1IHsKCQkJcGFuaWMoImdhbGxlcnkgbGluZSBuZWVkcyA0IG9yIDUgZmllbGRzIChraW5kIHwgdGl0bGUgfCBtZXRhIHwgdXJsIFt8IGRlc2NyaXB0aW9uXSk6ICIgKyBsaW5lKQoJCX0KCQljIDo9IGNhcmR7CgkJCWtpbmQ6ICBzdHJpbmdzLlRyaW1TcGFjZShmWzBdKSwKCQkJdGl0bGU6IHN0cmluZ3MuVHJpbVNwYWNlKGZbMV0pLAoJCQltZXRhOiAgc3RyaW5ncy5UcmltU3BhY2UoZlsyXSksCgkJCXVybDogICBzdHJpbmdzLlRyaW1TcGFjZShmWzNdKSwKCQl9CgkJaWYgbGVuKGYpID09IDUgewoJCQljLmRlc2MgPSBzdHJpbmdzLlRyaW1TcGFjZShmWzRdKQoJCQlpZiBsZW4oYy5kZXNjKSA+IG1heERlc2NMZW4gfHwgc3RyaW5ncy5Db250YWluc0FueShjLmRlc2MsICJcIlxcIikgewoJCQkJcGFuaWMoImdhbGxlcnkgZGVzY3JpcHRpb24gbXVzdCBiZSBhdCBtb3N0IDIwMCBieXRlcywgd2l0aG91dCBxdW90ZXMgb3IgYmFja3NsYXNoZXM6ICIgKyBsaW5lKQoJCQl9CgkJfQoJCWlmICF2YWxpZFNsdWcoYy5raW5kKSB8fCBjLnRpdGxlID09ICIiIHx8IGxlbihjLnRpdGxlKSA+IG1heFRpdGxlTGVuIHx8IGxlbihjLm1ldGEpID4gbWF4TWV0YUxlbiB7CgkJCXBhbmljKCJiYWQgZ2FsbGVyeSBsaW5lOiAiICsgbGluZSkKCQl9CgkJaWYgIXN0cmluZ3MuSGFzUHJlZml4KGMudXJsLCAiaHR0cHM6Ly8iKSAmJiAhc3RyaW5ncy5IYXNQcmVmaXgoYy51cmwsICIvIikgewoJCQlwYW5pYygiZ2FsbGVyeSB1cmwgbXVzdCBiZSBodHRwczovLyBvciBhIC9wYXRoOiAiICsgYy51cmwpCgkJfQoJCWlmIHN0cmluZ3MuQ29udGFpbnNBbnkoYy51cmwsICIgKCk8PlwiIikgewoJCQlwYW5pYygiZ2FsbGVyeSB1cmwgaGFzIGNoYXJhY3RlcnMgbWFya2Rvd24gd291bGQgYnJlYWsgb246ICIgKyBjLnVybCkKCQl9CgkJY2FyZHMgPSBhcHBlbmQoY2FyZHMsIGMpCgl9CglpZiBsZW4oY2FyZHMpID09IDAgfHwgbGVuKGNhcmRzKSA+IG1heENhcmRzIHsKCQlwYW5pYygiYSBnYWxsZXJ5IGhvbGRzIDEgdG8gNDggY2FyZHMiKQoJfQoJcmV0dXJuIGNhcmRzCn0KCi8vIHJlbmRlckdhbGxlcnkgbGF5cyBjYXJkcyBvdXQgY2FyZHNQZXJSb3cgdG8gYSByb3csIGVhY2ggb25lIGEgcG9zdGVyIHRoYXQKLy8gbGlua3MgdG8gaXRzIHRhcmdldC4KZnVuYyByZW5kZXJHYWxsZXJ5KG5hbWUgc3RyaW5nKSAoc3RyaW5nLCBib29sKSB7Cgl2IDo9IGdhbGxlcmllcy5HZXQobmFtZSkKCWlmIHYgPT0gbmlsIHsKCQlyZXR1cm4gIiIsIGZhbHNlCgl9CgljYXJkcyA6PSB2LihbXWNhcmQpCgl2YXIgYiBzdHJpbmdzLkJ1aWxkZXIKCWZvciBpIDo9IDA7IGkgPCBsZW4oY2FyZHMpOyBpICs9IGNhcmRzUGVyUm93IHsKCQliLldyaXRlU3RyaW5nKCI8Z25vLWNvbHVtbnM+XG4iKQoJCWZvciBqIDo9IGk7IGogPCBpK2NhcmRzUGVyUm93OyBqKysgewoJCQlpZiBqID4gaSB7CgkJCQliLldyaXRlU3RyaW5nKCI8Z25vLWNvbHVtbnMtc2VwIC8+XG4iKQoJCQl9CgkJCWlmIGogPCBsZW4oY2FyZHMpIHsKCQkJCWMgOj0gY2FyZHNbal0KCQkJCWIuV3JpdGVTdHJpbmcoIlshWyIgKyBtZFRleHQoYy50aXRsZSkgKyAiXSgiICsgcG9zdGVyVVJJKGMpICsgIildKCIgKyBjLnVybCArIGxpbmtUaXRsZShjLmRlc2MpICsgIilcbiIpCgkJCX0KCQl9CgkJYi5Xcml0ZVN0cmluZygiPC9nbm8tY29sdW1ucz5cblxuIikKCX0KCXJldHVybiBzdHJpbmdzLlRyaW1TdWZmaXgoYi5TdHJpbmcoKSwgIlxuXG4iKSwgdHJ1ZQp9CgovLyBsaW5rVGl0bGUgcmVuZGVycyBhbiBvcHRpb25hbCBtYXJrZG93biBsaW5rIHRpdGxlLCB3aGljaCBnbm93ZWIgZW1pdHMgYXMKLy8gdGhlIGxpbmsncyBob3ZlciB0ZXh0LgpmdW5jIGxpbmtUaXRsZShkZXNjIHN0cmluZykgc3RyaW5nIHsKCWlmIGRlc2MgPT0gIiIgewoJCXJldHVybiAiIgoJfQoJcmV0dXJuIGAgImAgKyBkZXNjICsgYCJgCn0KCi8vIG1kVGV4dCBrZWVwcyBhIHRpdGxlIGZyb20gY2xvc2luZyB0aGUgbWFya2Rvd24gaW1hZ2UgYWx0IHRleHQgZWFybHkuCmZ1bmMgbWRUZXh0KHMgc3RyaW5nKSBzdHJpbmcgewoJcmV0dXJuIHN0cmluZ3MuTmV3UmVwbGFjZXIoIlsiLCAiKCIsICJdIiwgIikiKS5SZXBsYWNlKHMpCn0KCmZ1bmMgeG1sVGV4dChzIHN0cmluZykgc3RyaW5nIHsKCXJldHVybiBzdHJpbmdzLk5ld1JlcGxhY2VyKCImIiwgIiZhbXA7IiwgIjwiLCAiJmx0OyIsICI+IiwgIiZndDsiLCAiXCIiLCAiJnF1b3Q7IiwgIiciLCAiJiMzOTsiKS5SZXBsYWNlKHMpCn0KCi8vIHdyYXAgc3BsaXRzIHMgaW50byBhdCBtb3N0IHR3byBsaW5lcyBvZiBhYm91dCB3aWR0aCBydW5lczsgdGhlIHNlY29uZCBsaW5lCi8vIGlzIGN1dCB3aXRoIGFuIGVsbGlwc2lzIHdoZW4gdGhlIHRpdGxlIGlzIGxvbmdlci4KZnVuYyB3cmFwKHMgc3RyaW5nLCB3aWR0aCBpbnQpIFtdc3RyaW5nIHsKCXdvcmRzIDo9IHN0cmluZ3MuRmllbGRzKHMpCgl2YXIgbGluZXMgW11zdHJpbmcKCWN1ciA6PSAiIgoJZm9yIF8sIHcgOj0gcmFuZ2Ugd29yZHMgewoJCWlmIGN1ciA9PSAiIiB7CgkJCWN1ciA9IHcKCQl9IGVsc2UgaWYgcnVuZUxlbihjdXIpKzErcnVuZUxlbih3KSA8PSB3aWR0aCB7CgkJCWN1ciArPSAiICIgKyB3CgkJfSBlbHNlIHsKCQkJbGluZXMgPSBhcHBlbmQobGluZXMsIGN1cikKCQkJY3VyID0gdwoJCX0KCX0KCWlmIGN1ciAhPSAiIiB7CgkJbGluZXMgPSBhcHBlbmQobGluZXMsIGN1cikKCX0KCWlmIGxlbihsaW5lcykgPiAyIHsKCQlzZWNvbmQgOj0gW11ydW5lKHN0cmluZ3MuSm9pbihsaW5lc1sxOl0sICIgIikpCgkJaWYgbGVuKHNlY29uZCkgPiB3aWR0aCB7CgkJCXNlY29uZCA9IGFwcGVuZChzZWNvbmRbOndpZHRoLTFdLCAn4oCmJykKCQl9CgkJbGluZXMgPSBbXXN0cmluZ3tsaW5lc1swXSwgc3RyaW5nKHNlY29uZCl9Cgl9CglyZXR1cm4gbGluZXMKfQoKZnVuYyBydW5lTGVuKHMgc3RyaW5nKSBpbnQgeyByZXR1cm4gbGVuKFtdcnVuZShzKSkgfQoKLy8gY2xpcCBjdXRzIHMgdG8gYXQgbW9zdCBuIHJ1bmVzLCBlbmRpbmcgd2l0aCBhbiBlbGxpcHNpcyB3aGVuIGl0IGhhZCB0byBjdXQuCmZ1bmMgY2xpcChzIHN0cmluZywgbiBpbnQpIHN0cmluZyB7CglyIDo9IFtdcnVuZShzKQoJaWYgbGVuKHIpIDw9IG4gewoJCXJldHVybiBzCgl9CglyZXR1cm4gc3RyaW5nKGFwcGVuZChyWzpuLTFdLCAn4oCmJykpCn0KCmZ1bmMgcG9zdGVyVVJJKGMgY2FyZCkgc3RyaW5nIHsKCXJldHVybiAiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwiICsgYmFzZTY0LlN0ZEVuY29kaW5nLkVuY29kZVRvU3RyaW5nKFtdYnl0ZShwb3N0ZXIoYykpKQp9CgovLyBwb3N0ZXIgZHJhd3MgYSAzMjB4MTgwIGNhcmQ6IGEgZGFyayBncmFkaWVudCwgYSByaXNpbmcgc3VuIGluIHRoZSBraW5kJ3MKLy8gYWNjZW50IChhIHBsYXkgYnV0dG9uIGZvciB2aWRlb3MpLCBhIGxhcmdlIGthbmppIHdhdGVybWFyaywgdGhlIGtpbmQgbGFiZWwsCi8vIHRoZSB0aXRsZSBvbiB1cCB0byB0d28gbGluZXMgYW5kIGEgbWV0YSBsaW5lLgpmdW5jIHBvc3RlcihjIGNhcmQpIHN0cmluZyB7CglzdCA6PSBzdHlsZU9mKGMua2luZCkKCWlmIGMubGFiZWwgIT0gIiIgewoJCXN0LmxhYmVsID0gYy5sYWJlbAoJfQoJdmFyIGIgc3RyaW5ncy5CdWlsZGVyCgliLldyaXRlU3RyaW5nKGA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjMyMCIgaGVpZ2h0PSIxODAiIHZpZXdCb3g9IjAgMCAzMjAgMTgwIj5gKQoJYi5Xcml0ZVN0cmluZyhgPGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJnIiB4MT0iMCIgeTE9IjAiIHgyPSIxIiB5Mj0iMSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMTIxMjEyIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSJgICsgc3Quc2hhZGUgKyBgIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+YCkKCWIuV3JpdGVTdHJpbmcoYDxyZWN0IHdpZHRoPSIzMjAiIGhlaWdodD0iMTgwIiByeD0iMTQiIGZpbGw9InVybCgjZykiLz5gKQoJYi5Xcml0ZVN0cmluZyhgPHRleHQgeD0iMzA2IiB5PSIxNzAiIHRleHQtYW5jaG9yPSJlbmQiIGZvbnQtZmFtaWx5PSJzZXJpZiIgZm9udC1zaXplPSIxMjAiIGZpbGw9IiNmZmZmZmYiIGZpbGwtb3BhY2l0eT0iLjA2Ij5gICsgc3QuZ2x5cGggKyBgPC90ZXh0PmApCgliLldyaXRlU3RyaW5nKGA8Y2lyY2xlIGN4PSIyNjgiIGN5PSI1MiIgcj0iMzAiIGZpbGw9ImAgKyBzdC5hY2NlbnQgKyBgIi8+YCkKCWlmIHN0LnZpZGVvIHsKCQliLldyaXRlU3RyaW5nKGA8cGF0aCBkPSJNMjYwIDM4IEwyODIgNTIgTDI2MCA2NiBaIiBmaWxsPSIjMTIxMjEyIi8+YCkKCX0gZWxzZSB7CgkJYi5Xcml0ZVN0cmluZyhgPHBhdGggZD0iTTI1NiA1MiBIMjgwIE0yNzIgNDQgTDI4MCA1MiBMMjcyIDYwIiBzdHJva2U9IiMxMjEyMTIiIHN0cm9rZS13aWR0aD0iNCIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+YCkKCX0KCWIuV3JpdGVTdHJpbmcoYDxyZWN0IHg9IjE4IiB5PSIyMCIgd2lkdGg9IjMiIGhlaWdodD0iMTIiIGZpbGw9ImAgKyBzdC5hY2NlbnQgKyBgIi8+YCkKCWIuV3JpdGVTdHJpbmcoYDx0ZXh0IHg9IjI3IiB5PSIzMSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSxNZW5sbyxtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTAiIGxldHRlci1zcGFjaW5nPSIxLjUiIGZpbGw9ImAgKyBzdC5hY2NlbnQgKyBgIj5gICsgeG1sVGV4dChzdC5sYWJlbCkgKyBgPC90ZXh0PmApCglsaW5lcyA6PSB3cmFwKGMudGl0bGUsIDI0KQoJeSA6PSAxMDgKCWlmIGxlbihsaW5lcykgPT0gMSB7CgkJeSA9IDEyNgoJfQoJZm9yIF8sIGwgOj0gcmFuZ2UgbGluZXMgewoJCWIuV3JpdGVTdHJpbmcoYDx0ZXh0IHg9IjE4IiB5PSJgICsgaXRvYSh5KSArIGAiIGZvbnQtZmFtaWx5PSJzeXN0ZW0tdWksLWFwcGxlLXN5c3RlbSxTZWdvZSBVSSxzYW5zLXNlcmlmIiBmb250LXdlaWdodD0iNzAwIiBmb250LXNpemU9IjIwIiBmaWxsPSIjZmZmZmZmIj5gICsgeG1sVGV4dChsKSArIGA8L3RleHQ+YCkKCQl5ICs9IDI1Cgl9CgkvLyBUaGUgbWV0YSBsaW5lIGh1Z3MgdGhlIGJvdHRvbS1yaWdodCBjb3JuZXI6IGdub3dlYiBkcmF3cyBpdHMKCS8vIGV4dGVybmFsLWxpbmsgYmFkZ2Ugb3ZlciB0aGUgYm90dG9tLWxlZnQgb25lLgoJYi5Xcml0ZVN0cmluZyhgPHRleHQgeD0iMzA0IiB5PSIxNjQiIHRleHQtYW5jaG9yPSJlbmQiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsTWVubG8sbW9ub3NwYWNlIiBmb250LXNpemU9IjExIiBmaWxsPSIjYmRiZGJkIj5gICsgeG1sVGV4dChjbGlwKGMubWV0YSwgNDApKSArIGA8L3RleHQ+YCkKCWIuV3JpdGVTdHJpbmcoYDwvc3ZnPmApCglyZXR1cm4gYi5TdHJpbmcoKQp9CgpmdW5jIGl0b2EobiBpbnQpIHN0cmluZyB7CglpZiBuID09IDAgewoJCXJldHVybiAiMCIKCX0KCXZhciBkIFtdYnl0ZQoJZm9yIG4gPiAwIHsKCQlkID0gYXBwZW5kKFtdYnl0ZXtieXRlKCcwJyArIG4lMTApfSwgZC4uLikKCQluIC89IDEwCgl9CglyZXR1cm4gc3RyaW5nKGQpCn0KGm4KC2dub21vZC50b21sEl9tb2R1bGUgPSAiZ25vLmxhbmQvci9nMTc0N3Q1bTJmMDhwbHFqbHJqazJxMHFsZDc0NjVoeHo4Z2t4NTljL2hvbWUiCmdubyA9ICIwLjkiCnByaXZhdGUgPSB0cnVlChrmIAoIaG9tZS5nbm8S2SAvLyBQYWNrYWdlIGhvbWUgaXMgesO0w5ZtYSdzIHByb2ZpbGUgcGFnZSBvbiBnbm8ubGFuZC4KLy8KLy8gZ25vd2ViIHJlbmRlcnMgYSBwcm9maWxlIGJ5IGNhbGxpbmcgUmVuZGVyKCIiKSBvbiB0aGUgcmVhbG0gYXQgZXhhY3RseQovLyAvci88bmFtZXNwYWNlPi9ob21lLCBzbyB0aGlzIHBhdGggY2FycmllcyBubyAvdk4gc3VmZml4LgovLwovLyBUaGUgcGFnZSBpcyBhc3NlbWJsZWQgZnJvbSBTTE9UUzogbmFtZWQgbWFya2Rvd24gZnJhZ21lbnRzLCBvbmUgU2V0Ci8vIHRyYW5zYWN0aW9uIGVhY2guIFRoZSBzbG90IG5hbWVkICJsYXlvdXQiIGlzIHRoZSB0ZW1wbGF0ZTsgZXZlcnkgOnNsdWc6Ci8vIHBsYWNlaG9sZGVyIGluIGl0IGlzIHJlcGxhY2VkIGJ5IHRoZSBzbG90IG9mIHRoYXQgbmFtZSwgaW4gYSBzaW5nbGUgcGFzcy4KLy8gaW5pdCBzZWVkcyBldmVyeSBzbG90IGZyb20gY29udGVudC5nbm8sIHNvIHRoZSBwYWdlIGlzIGNvbXBsZXRlIHRoZSBibG9jawovLyBpdCBnb2VzIGxpdmUgYW5kIGxhdGVyIGVkaXRzIGFyZSBkYXRhLCBub3QgcmVkZXBsb3lzLgovLwovLyBPbmUgdGhpbmcgb24gdGhpcyBwYWdlIGlzIG5vdCB3cml0dGVuIGJ5IGl0cyBvd25lcjogdmlzaXRvcnMgY2FuIHNlbmQgYQovLyBoZWFydCAoPDMpLCBvbmUgcGVyIGFkZHJlc3MsIGFuZCB0aGUgcGFnZSBjb3VudHMgdGhlbS4KcGFja2FnZSBob21lCgppbXBvcnQgKAoJInN0cmNvbnYiCgkic3RyaW5ncyIKCgkiY2hhaW4vcnVudGltZSIKCgkiZ25vLmxhbmQvcC9udC9hdmwvdjAiCikKCi8vIGFkbWluIGlzIHRoZSBvbmx5IGFkZHJlc3MgYWxsb3dlZCB0byBlZGl0IHNsb3RzLgpjb25zdCBhZG1pbiA9IGFkZHJlc3MoImcxNzQ3dDVtMmYwOHBscWpscmprMnEwcWxkNzQ2NWh4ejhna3g1OWMiKQoKY29uc3QgKAoJbGF5b3V0U2x1ZyA9ICJsYXlvdXQiCgltYXhTbHVnTGVuID0gNjQKCW1heFJlY2VudCAgPSA3CikKCnR5cGUgc2xvdCBzdHJ1Y3QgewoJYm9keSAgICBzdHJpbmcKCXJldiAgICAgaW50Cgl1cGRhdGVkIGludDY0Cn0KCnZhciAoCglzbG90cyA9IGF2bC5OZXdUcmVlKCkgLy8gc2x1ZyAtPiAqc2xvdAoJcmV2ICAgaW50ICAgICAgICAgICAgIC8vIHRvdGFsIHNsb3Qgd3JpdGVzCgoJaGVhcnRzID0gYXZsLk5ld1RyZWUoKSAvLyBhZGRyZXNzIHN0cmluZyAtPiBpbnQ2NCBoZWlnaHQgb2YgdGhlIGhlYXJ0CglyZWNlbnQgW11hZGRyZXNzICAgICAgICAvLyBuZXdlc3QgZmlyc3QsIGF0IG1vc3QgbWF4UmVjZW50CikKCi8vIHJlc2VydmVkU2x1Z3MgYXJlIHBsYWNlaG9sZGVycyBjb21wdXRlZCBhdCByZW5kZXIgdGltZS4gQSBzbG90IG1heSBub3QgdGFrZQovLyBvbmUgb2YgdGhlc2UgbmFtZXMsIHNvIG5vdGhpbmcgYSBzbG90IHNheXMgY2FuIHNoYWRvdyBjaGFpbiBzdGF0ZS4KdmFyIHJlc2VydmVkU2x1Z3MgPSBbXXN0cmluZ3siY2hhaW5pZCIsICJoZWlnaHQiLCAiaGVhcnRzIiwgImhlcm8iLCAicmVhbG0iLCAicmV2In0KCmZ1bmMgaW5pdCgpIHsKCWZvciBfLCBzIDo9IHJhbmdlIGRlZmF1bHRTbG90cyB7CgkJcmV2KysKCQlzbG90cy5TZXQocy5zbHVnLCAmc2xvdHtib2R5OiBzLmJvZHksIHJldjogcmV2LCB1cGRhdGVkOiBydW50aW1lLkNoYWluSGVpZ2h0KCl9KQoJfQoJZm9yIF8sIGcgOj0gcmFuZ2UgZGVmYXVsdEdhbGxlcmllcyB7CgkJZ2FsbGVyaWVzLlNldChnLm5hbWUsIHBhcnNlR2FsbGVyeShnLnNwZWMpKQoJfQp9CgpmdW5jIGFzc2VydEFkbWluKGN1ciByZWFsbSkgewoJaWYgY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpICE9IGFkbWluIHsKCQlwYW5pYygicmVzdHJpY3RlZCB0byBhZG1pbiIpCgl9Cn0KCmZ1bmMgdmFsaWRTbHVnKHNsdWcgc3RyaW5nKSBib29sIHsKCWlmIGxlbihzbHVnKSA9PSAwIHx8IGxlbihzbHVnKSA+IG1heFNsdWdMZW4gewoJCXJldHVybiBmYWxzZQoJfQoJZm9yIGkgOj0gMDsgaSA8IGxlbihzbHVnKTsgaSsrIHsKCQljIDo9IHNsdWdbaV0KCQlpZiAhKGMgPj0gJ2EnICYmIGMgPD0gJ3onIHx8IGMgPj0gJzAnICYmIGMgPD0gJzknIHx8IGMgPT0gJy0nIHx8IGMgPT0gJ18nIHx8IGMgPT0gJy4nKSB7CgkJCXJldHVybiBmYWxzZQoJCX0KCX0KCXJldHVybiB0cnVlCn0KCmZ1bmMgYXNzZXJ0V3JpdGFibGVTbHVnKHNsdWcgc3RyaW5nKSB7CglpZiAhdmFsaWRTbHVnKHNsdWcpIHsKCQlwYW5pYygiaW52YWxpZCBzbHVnOiB3YW50IDEtIiArIHN0cmNvbnYuSXRvYShtYXhTbHVnTGVuKSArICIgYnl0ZXMgb2YgW2EtejAtOS5fLV0sIGdvdCAiICsgc3RyY29udi5RdW90ZShzbHVnKSkKCX0KCWZvciBfLCByIDo9IHJhbmdlIHJlc2VydmVkU2x1Z3MgewoJCWlmIHNsdWcgPT0gciB7CgkJCXBhbmljKCJyZXNlcnZlZCBzbHVnOiAiICsgc2x1ZykKCQl9Cgl9CglpZiBzdHJpbmdzLkhhc1ByZWZpeChzbHVnLCBnYWxsZXJ5UHJlZml4KSB7CgkJcGFuaWMoInJlc2VydmVkIHNsdWc6ICIgKyBnYWxsZXJ5UHJlZml4ICsgIiogcmVuZGVycyBhIGdhbGxlcnksIHVzZSBTZXRHYWxsZXJ5IikKCX0KfQoKLy8gU2V0IGNyZWF0ZXMgb3IgcmVwbGFjZXMgb25lIHNsb3QuCmZ1bmMgU2V0KGN1ciByZWFsbSwgc2x1ZywgYm9keSBzdHJpbmcpIHsKCWFzc2VydEFkbWluKGN1cikKCWFzc2VydFdyaXRhYmxlU2x1ZyhzbHVnKQoJcmV2KysKCXNsb3RzLlNldChzbHVnLCAmc2xvdHtib2R5OiBib2R5LCByZXY6IHJldiwgdXBkYXRlZDogcnVudGltZS5DaGFpbkhlaWdodCgpfSkKfQoKLy8gQXBwZW5kIGFkZHMgdG8gdGhlIGVuZCBvZiBhIHNsb3QsIGNyZWF0aW5nIGl0IHdoZW4gYWJzZW50LCBmb3IgYm9kaWVzIHRvbwovLyBsYXJnZSBmb3Igb25lIHRyYW5zYWN0aW9uLgpmdW5jIEFwcGVuZChjdXIgcmVhbG0sIHNsdWcsIGJvZHkgc3RyaW5nKSB7Cglhc3NlcnRBZG1pbihjdXIpCglhc3NlcnRXcml0YWJsZVNsdWcoc2x1ZykKCXByZXYgOj0gIiIKCWlmIHYgOj0gc2xvdHMuR2V0KHNsdWcpOyB2ICE9IG5pbCB7CgkJcHJldiA9IHYuKCpzbG90KS5ib2R5Cgl9CglyZXYrKwoJc2xvdHMuU2V0KHNsdWcsICZzbG90e2JvZHk6IHByZXYgKyBib2R5LCByZXY6IHJldiwgdXBkYXRlZDogcnVudGltZS5DaGFpbkhlaWdodCgpfSkKfQoKLy8gRGVsZXRlIHJlbW92ZXMgYSBzbG90LiBEZWxldGluZyAibGF5b3V0IiBmYWxscyBiYWNrIHRvIHRoZSBidWlsdC1pbiBsYXlvdXQuCmZ1bmMgRGVsZXRlKGN1ciByZWFsbSwgc2x1ZyBzdHJpbmcpIHsKCWFzc2VydEFkbWluKGN1cikKCWlmIF8sIHJlbW92ZWQgOj0gc2xvdHMuUmVtb3ZlKHNsdWcpOyAhcmVtb3ZlZCB7CgkJcGFuaWMoIm5vIHN1Y2ggc2xvdDogIiArIHNsdWcpCgl9CglyZXYrKwp9CgovLyBHZXQgcmV0dXJucyBhIHNsb3QgYm9keSwgb3IgIiIgd2hlbiB0aGUgc2xvdCBkb2VzIG5vdCBleGlzdC4KZnVuYyBHZXQoc2x1ZyBzdHJpbmcpIHN0cmluZyB7CglpZiB2IDo9IHNsb3RzLkdldChzbHVnKTsgdiAhPSBuaWwgewoJCXJldHVybiB2Ligqc2xvdCkuYm9keQoJfQoJcmV0dXJuICIiCn0KCi8vIFJldmlzaW9uIGlzIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2xvdCB3cml0ZXMgYWNjZXB0ZWQuCmZ1bmMgUmV2aXNpb24oKSBpbnQgeyByZXR1cm4gcmV2IH0KCi8vIEhlYXJ0IHJlY29yZHMgb25lIDwzIGZyb20gdGhlIGNhbGxlci4gRWFjaCBhZGRyZXNzIGNhbiBzZW5kIGV4YWN0bHkgb25lLgpmdW5jIEhlYXJ0KGN1ciByZWFsbSkgewoJZnJvbSA6PSBjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkKCWlmIGhlYXJ0cy5IYXMoZnJvbS5TdHJpbmcoKSkgewoJCXBhbmljKCJhbHJlYWR5IHNlbnQ6IG9uZSA8MyBwZXIgYWRkcmVzcyIpCgl9CgloZWFydHMuU2V0KGZyb20uU3RyaW5nKCksIHJ1bnRpbWUuQ2hhaW5IZWlnaHQoKSkKCglyZWNlbnQgPSBhcHBlbmQoW11hZGRyZXNze2Zyb219LCByZWNlbnQuLi4pCglpZiBsZW4ocmVjZW50KSA+IG1heFJlY2VudCB7CgkJcmVjZW50ID0gcmVjZW50WzptYXhSZWNlbnRdCgl9Cn0KCi8vIEhlYXJ0cyByZXR1cm5zIGhvdyBtYW55IGRpc3RpbmN0IGFkZHJlc3NlcyBzZW50IGEgPDMuCmZ1bmMgSGVhcnRzKCkgaW50IHsgcmV0dXJuIGhlYXJ0cy5TaXplKCkgfQoKLy8gSGFzSGVhcnQgcmVwb3J0cyB3aGV0aGVyIGFkZHIgYWxyZWFkeSBzZW50IGEgPDMuCmZ1bmMgSGFzSGVhcnQoYWRkciBhZGRyZXNzKSBib29sIHsgcmV0dXJuIGhlYXJ0cy5IYXMoYWRkci5TdHJpbmcoKSkgfQoaljUKDWhvbWVfdGVzdC5nbm8ShDVwYWNrYWdlIGhvbWUKCmltcG9ydCAoCgkic3RyaW5ncyIKCSJ0ZXN0aW5nIgoKCSJnbm8ubGFuZC9wL250L2F2bC92MCIKCSJnbm8ubGFuZC9wL250L3Rlc3R1dGlscy92MCIKCSJnbm8ubGFuZC9wL250L3Vhc3NlcnQvdjAiCikKCnZhciAoCglhbGljZSAgID0gdGVzdHV0aWxzLlRlc3RBZGRyZXNzKCJhbGljZSIpCglib2IgICAgID0gdGVzdHV0aWxzLlRlc3RBZGRyZXNzKCJib2IiKQoJbWFsbG9yeSA9IHRlc3R1dGlscy5UZXN0QWRkcmVzcygibWFsbG9yeSIpCikKCmZ1bmMgcmVzZXQoKSB7CglnYWxsZXJpZXMgPSBhdmwuTmV3VHJlZSgpCglzbG90cyA9IGF2bC5OZXdUcmVlKCkKCXJldiA9IDAKCWhlYXJ0cyA9IGF2bC5OZXdUcmVlKCkKCXJlY2VudCA9IG5pbAp9CgpmdW5jIHNlZWQoc2x1ZywgYm9keSBzdHJpbmcpIHsKCXJldisrCglzbG90cy5TZXQoc2x1ZywgJnNsb3R7Ym9keTogYm9keSwgcmV2OiByZXZ9KQp9CgpmdW5jIFRlc3REZWZhdWx0UGFnZVJlbmRlcnNFdmVyeVNlY3Rpb24odCAqdGVzdGluZy5UKSB7CgkvLyBTdGF0ZSBhcyBsZWZ0IGJ5IGluaXQ6IGV2ZXJ5IGRlZmF1bHQgc2xvdCwgbm8gaGVhcnQgeWV0LgoJcGFnZSA6PSBSZW5kZXIoIiIpCglmb3IgXywgd2FudCA6PSByYW5nZSBbXXN0cmluZ3siZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwiLCAiRm91bmRlciwgQ0VPICYgQ1RPIiwgIiMjIOS7iiBOb3ciLCAiIyMg57WEIEluc2lkZSBNZW1iYSIsICJCQVJSSUNBREUiLCAiMjU2IG1lcmdlZCBwdWxsIHJlcXVlc3RzIiwgIlBhcmlzIFAyUCBGZXN0aXZhbCIsICJDb250cmlidXRpbmcgb24gR25vIHNpbmNlIHwgMjAyMiIsICIjIyDmupAgT3BlbiBzb3VyY2UiLCAiKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9YUc0TTM3Rlg0SUkpIiwgIioqMCoqIGhlYXJ0cyBzbyBmYXIuIiwgImduby5sYW5kL3IvZzE3NDd0NW0yZjA4cGxxamxyamsycTBxbGQ3NDY1aHh6OGdreDU5Yy9ob21lIn0gewoJCXVhc3NlcnQuVHJ1ZSh0LCBzdHJpbmdzLkNvbnRhaW5zKHBhZ2UsIHdhbnQpLCAibWlzc2luZzogIit3YW50KQoJfQoJZm9yIF8sIHMgOj0gcmFuZ2UgZGVmYXVsdFNsb3RzIHsKCQl1YXNzZXJ0LkZhbHNlKHQsIHN0cmluZ3MuQ29udGFpbnMocGFnZSwgIjoiK3Muc2x1ZysiOiIpLCAidW5maWxsZWQgcGxhY2Vob2xkZXIgOiIrcy5zbHVnKyI6IikKCX0KCWZvciBfLCBnIDo9IHJhbmdlIGRlZmF1bHRHYWxsZXJpZXMgewoJCXVhc3NlcnQuRmFsc2UodCwgc3RyaW5ncy5Db250YWlucyhwYWdlLCAiOmdhbGxlcnkuIitnLm5hbWUrIjoiKSwgInVuZmlsbGVkIGdhbGxlcnkgOmdhbGxlcnkuIitnLm5hbWUrIjoiKQoJfQoJdWFzc2VydC5GYWxzZSh0LCBzdHJpbmdzLkNvbnRhaW5zKHBhZ2UsICI6aGVybzoiKSkKfQoKZnVuYyBUZXN0U2V0R2V0RGVsZXRlKGN1ciByZWFsbSwgdCAqdGVzdGluZy5UKSB7CglyZXNldCgpCgl0ZXN0aW5nLlNldFJlYWxtKHRlc3RpbmcuTmV3VXNlclJlYWxtKGFkbWluKSkKCglTZXQoY3Jvc3MoY3VyKSwgImJpbyIsICJCdWlsZGluZyBvbiBnbm8uIikKCXVhc3NlcnQuRXF1YWwodCwgIkJ1aWxkaW5nIG9uIGduby4iLCBHZXQoImJpbyIpKQoJQXBwZW5kKGNyb3NzKGN1ciksICJiaW8iLCAiIFN0aWxsLiIpCgl1YXNzZXJ0LkVxdWFsKHQsICJCdWlsZGluZyBvbiBnbm8uIFN0aWxsLiIsIEdldCgiYmlvIikpCgl1YXNzZXJ0LkVxdWFsKHQsIDIsIFJldmlzaW9uKCkpCgoJRGVsZXRlKGNyb3NzKGN1ciksICJiaW8iKQoJdWFzc2VydC5FcXVhbCh0LCAiIiwgR2V0KCJiaW8iKSkKCXVhc3NlcnQuQWJvcnRzV2l0aE1lc3NhZ2UodCwgY3VyLCAibm8gc3VjaCBzbG90OiBiaW8iLCBmdW5jKCkgewoJCURlbGV0ZShjcm9zcyhjdXIpLCAiYmlvIikKCX0pCn0KCmZ1bmMgVGVzdFdyaXRlc0FyZUFkbWluT25seShjdXIgcmVhbG0sIHQgKnRlc3RpbmcuVCkgewoJcmVzZXQoKQoJdGVzdGluZy5TZXRSZWFsbSh0ZXN0aW5nLk5ld1VzZXJSZWFsbShtYWxsb3J5KSkKCXVhc3NlcnQuQWJvcnRzV2l0aE1lc3NhZ2UodCwgY3VyLCAicmVzdHJpY3RlZCB0byBhZG1pbiIsIGZ1bmMoKSB7IFNldChjcm9zcyhjdXIpLCAiYmlvIiwgInB3bmVkIikgfSkKCXVhc3NlcnQuQWJvcnRzV2l0aE1lc3NhZ2UodCwgY3VyLCAicmVzdHJpY3RlZCB0byBhZG1pbiIsIGZ1bmMoKSB7IEFwcGVuZChjcm9zcyhjdXIpLCAiYmlvIiwgInB3bmVkIikgfSkKCXVhc3NlcnQuQWJvcnRzV2l0aE1lc3NhZ2UodCwgY3VyLCAicmVzdHJpY3RlZCB0byBhZG1pbiIsIGZ1bmMoKSB7IERlbGV0ZShjcm9zcyhjdXIpLCAiYmlvIikgfSkKfQoKZnVuYyBUZXN0U2x1Z1J1bGVzKGN1ciByZWFsbSwgdCAqdGVzdGluZy5UKSB7CglyZXNldCgpCgl0ZXN0aW5nLlNldFJlYWxtKHRlc3RpbmcuTmV3VXNlclJlYWxtKGFkbWluKSkKCXVhc3NlcnQuQWJvcnRzQ29udGFpbnModCwgY3VyLCAiaW52YWxpZCBzbHVnIiwgZnVuYygpIHsgU2V0KGNyb3NzKGN1ciksICJCYWQiLCAieCIpIH0pCgl1YXNzZXJ0LkFib3J0c0NvbnRhaW5zKHQsIGN1ciwgImludmFsaWQgc2x1ZyIsIGZ1bmMoKSB7IFNldChjcm9zcyhjdXIpLCAiYTpiIiwgIngiKSB9KQoJdWFzc2VydC5BYm9ydHNDb250YWlucyh0LCBjdXIsICJpbnZhbGlkIHNsdWciLCBmdW5jKCkgeyBTZXQoY3Jvc3MoY3VyKSwgIiIsICJ4IikgfSkKCXVhc3NlcnQuQWJvcnRzV2l0aE1lc3NhZ2UodCwgY3VyLCAicmVzZXJ2ZWQgc2x1ZzogaGVhcnRzIiwgZnVuYygpIHsgU2V0KGNyb3NzKGN1ciksICJoZWFydHMiLCAiZmFrZSA5OTk5IikgfSkKCXVhc3NlcnQuQWJvcnRzQ29udGFpbnModCwgY3VyLCAicmVzZXJ2ZWQgc2x1ZzogZ2FsbGVyeS4iLCBmdW5jKCkgeyBTZXQoY3Jvc3MoY3VyKSwgImdhbGxlcnkueCIsICJmYWtlIikgfSkKfQoKZnVuYyBUZXN0RmlsbElzU2luZ2xlUGFzcyh0ICp0ZXN0aW5nLlQpIHsKCXJlc2V0KCkKCXNlZWQoImxheW91dCIsICJBIDphOiBCIDptaXNzaW5nOiBDIDEwOjMwIDpiOiIpCglzZWVkKCJhIiwgIls6YjpdIikKCXNlZWQoImIiLCAiYmVlIikKCXVhc3NlcnQuRXF1YWwodCwgIkEgWzpiOl0gQiA6bWlzc2luZzogQyAxMDozMCBiZWUiLCBSZW5kZXIoIiIpKQp9CgpmdW5jIFRlc3RGYWxsYmFja0xheW91dCh0ICp0ZXN0aW5nLlQpIHsKCXJlc2V0KCkKCXNlZWQoImJpbyIsICJoaSIpCgl1YXNzZXJ0LlRydWUodCwgc3RyaW5ncy5IYXNQcmVmaXgoUmVuZGVyKCIiKSwgIiMgesO0w5ZtYVxuXG5oaVxuXG4qKjAqKiBoZWFydHMiKSkKfQoKZnVuYyBUZXN0SGVhcnRPbmNlUGVyQWRkcmVzcyhjdXIgcmVhbG0sIHQgKnRlc3RpbmcuVCkgewoJcmVzZXQoKQoJc2VlZCgibGF5b3V0IiwgIjpoZWFydHM6IikKCgl0ZXN0aW5nLlNldFJlYWxtKHRlc3RpbmcuTmV3VXNlclJlYWxtKGFsaWNlKSkKCUhlYXJ0KGNyb3NzKGN1cikpCgl1YXNzZXJ0LkVxdWFsKHQsIDEsIEhlYXJ0cygpKQoJdWFzc2VydC5UcnVlKHQsIEhhc0hlYXJ0KGFsaWNlKSkKCXVhc3NlcnQuQWJvcnRzV2l0aE1lc3NhZ2UodCwgY3VyLCAiYWxyZWFkeSBzZW50OiBvbmUgPDMgcGVyIGFkZHJlc3MiLCBmdW5jKCkgeyBIZWFydChjcm9zcyhjdXIpKSB9KQoKCXRlc3RpbmcuU2V0UmVhbG0odGVzdGluZy5OZXdVc2VyUmVhbG0oYm9iKSkKCUhlYXJ0KGNyb3NzKGN1cikpCgl1YXNzZXJ0LkVxdWFsKHQsIDIsIEhlYXJ0cygpKQoJdWFzc2VydC5FcXVhbCh0LCBib2IsIHJlY2VudFswXSwgIm5ld2VzdCBmaXJzdCIpCgoJcGFnZSA6PSBSZW5kZXIoIiIpCgl1YXNzZXJ0LlRydWUodCwgc3RyaW5ncy5Db250YWlucyhwYWdlLCAiKioyKiogaGVhcnRzIHNvIGZhci4iKSkKCXVhc3NlcnQuVHJ1ZSh0LCBzdHJpbmdzLkNvbnRhaW5zKHBhZ2UsICIvdS8iK2JvYi5TdHJpbmcoKSkpCgl1YXNzZXJ0LlRydWUodCwgc3RyaW5ncy5Db250YWlucyhSZW5kZXIoImhlYXJ0cyIpLCAiL3UvIithbGljZS5TdHJpbmcoKSkpCn0KCmZ1bmMgVGVzdFJlY2VudElzQm91bmRlZChjdXIgcmVhbG0sIHQgKnRlc3RpbmcuVCkgewoJcmVzZXQoKQoJZm9yIGkgOj0gMDsgaSA8IG1heFJlY2VudCszOyBpKysgewoJCXRlc3RpbmcuU2V0UmVhbG0odGVzdGluZy5OZXdVc2VyUmVhbG0odGVzdHV0aWxzLlRlc3RBZGRyZXNzKCJmYW4iICsgc3RyaW5nKHJ1bmUoJ2EnK2kpKSkpKQoJCUhlYXJ0KGNyb3NzKGN1cikpCgl9Cgl1YXNzZXJ0LkVxdWFsKHQsIG1heFJlY2VudCszLCBIZWFydHMoKSkKCXVhc3NlcnQuRXF1YWwodCwgbWF4UmVjZW50LCBsZW4ocmVjZW50KSkKfQoKZnVuYyBUZXN0T3RoZXJWaWV3cyh0ICp0ZXN0aW5nLlQpIHsKCXJlc2V0KCkKCXNlZWQoImJpbyIsICJoZWxsbyIpCgl1YXNzZXJ0LlRydWUodCwgc3RyaW5ncy5Db250YWlucyhSZW5kZXIoInNsb3RzIiksICJbYmlvXSIpKQoJdWFzc2VydC5UcnVlKHQsIHN0cmluZ3MuQ29udGFpbnMoUmVuZGVyKCJzbG90cy9iaW8iKSwgImhlbGxvIikpCgl1YXNzZXJ0LlRydWUodCwgc3RyaW5ncy5Db250YWlucyhSZW5kZXIoInNsb3RzL25vcGUiKSwgIk5vdCBmb3VuZCIpKQoJdWFzc2VydC5UcnVlKHQsIHN0cmluZ3MuQ29udGFpbnMoUmVuZGVyKCJub3BlIiksICJOb3QgZm91bmQiKSkKfQoKZnVuYyBUZXN0R2FsbGVyeShjdXIgcmVhbG0sIHQgKnRlc3RpbmcuVCkgewoJcmVzZXQoKQoJc2VlZCgibGF5b3V0IiwgIjpnYWxsZXJ5LmRlbW86IikKCgl0ZXN0aW5nLlNldFJlYWxtKHRlc3RpbmcuTmV3VXNlclJlYWxtKG1hbGxvcnkpKQoJdWFzc2VydC5BYm9ydHNXaXRoTWVzc2FnZSh0LCBjdXIsICJyZXN0cmljdGVkIHRvIGFkbWluIiwgZnVuYygpIHsKCQlTZXRHYWxsZXJ5KGNyb3NzKGN1ciksICJkZW1vIiwgImZpbG0gfCBBIHwgYiB8IGh0dHBzOi8veC55IikKCX0pCgoJdGVzdGluZy5TZXRSZWFsbSh0ZXN0aW5nLk5ld1VzZXJSZWFsbShhZG1pbikpCgl1YXNzZXJ0LkFib3J0c0NvbnRhaW5zKHQsIGN1ciwgIm5lZWRzIDQgb3IgNSBmaWVsZHMiLCBmdW5jKCkgeyBTZXRHYWxsZXJ5KGNyb3NzKGN1ciksICJkZW1vIiwgImZpbG0gfCBBIHwgYiIpIH0pCgl1YXNzZXJ0LkFib3J0c0NvbnRhaW5zKHQsIGN1ciwgIm11c3QgYmUgaHR0cHM6Ly8iLCBmdW5jKCkgeyBTZXRHYWxsZXJ5KGNyb3NzKGN1ciksICJkZW1vIiwgImZpbG0gfCBBIHwgYiB8IGphdmFzY3JpcHQ6YWxlcnQoMSkiKSB9KQoJdWFzc2VydC5BYm9ydHNDb250YWlucyh0LCBjdXIsICJtYXJrZG93biB3b3VsZCBicmVhayIsIGZ1bmMoKSB7IFNldEdhbGxlcnkoY3Jvc3MoY3VyKSwgImRlbW8iLCAiZmlsbSB8IEEgfCBiIHwgaHR0cHM6Ly94LnkvYSliIikgfSkKCglTZXRHYWxsZXJ5KGNyb3NzKGN1ciksICJkZW1vIiwgIiMgY29tbWVudFxuZmlsbSB8IE9uZSA8Jj4gfCBtZXRhIHwgaHR0cHM6Ly9hLmIvMVxucHJvZHVjdCB8IFR3byB8IG0gfCAvci94XG5ldmVudCB8IFRocmVlIHwgbSB8IGh0dHBzOi8vYS5iLzNcbnJlcG9ydCB8IEZvdXIgfCBtIHwgaHR0cHM6Ly9hLmIvNCIpCglwYWdlIDo9IFJlbmRlcigiIikKCXVhc3NlcnQuRXF1YWwodCwgMiwgc3RyaW5ncy5Db3VudChwYWdlLCAiPGduby1jb2x1bW5zPiIpLCAiMyBwZXIgcm93IikKCXVhc3NlcnQuRXF1YWwodCwgNCwgc3RyaW5ncy5Db3VudChwYWdlLCAiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwiKSkKCXVhc3NlcnQuVHJ1ZSh0LCBzdHJpbmdzLkNvbnRhaW5zKHBhZ2UsICJdKGh0dHBzOi8vYS5iLzEpIikpCgl1YXNzZXJ0LlRydWUodCwgc3RyaW5ncy5Db250YWlucyhwYWdlLCAiXSgvci94KSIpKQoKCS8vIFRpdGxlcyBhcmUgWE1MLWVzY2FwZWQgaW5zaWRlIHRoZSBwb3N0ZXIuCglzdmcgOj0gcG9zdGVyKGNhcmR7a2luZDogImZpbG0iLCB0aXRsZTogIk9uZSA8Jj4iLCBtZXRhOiAibSIsIHVybDogImh0dHBzOi8vYS5iIn0pCgl1YXNzZXJ0LlRydWUodCwgc3RyaW5ncy5Db250YWlucyhzdmcsICJPbmUgJmx0OyZhbXA7Jmd0OyIpKQoKCS8vIEFuIG9wdGlvbmFsIGZpZnRoIGZpZWxkIGJlY29tZXMgdGhlIGxpbmsncyBob3ZlciB0ZXh0LgoJU2V0R2FsbGVyeShjcm9zcyhjdXIpLCAiZGVtbyIsICJtZW1iYSB8IERBTyBNYW5hZ2VtZW50IHwgbSB8IGh0dHBzOi8vYS5iL2RhbyB8IFZvdGUsIGV4ZWN1dGUsIGNyZWF0ZS4iKQoJdWFzc2VydC5UcnVlKHQsIHN0cmluZ3MuQ29udGFpbnMoUmVuZGVyKCIiKSwgYF0oaHR0cHM6Ly9hLmIvZGFvICJWb3RlLCBleGVjdXRlLCBjcmVhdGUuIilgKSkKCXVhc3NlcnQuRXF1YWwodCwgIk1FTUJBIMK3IFBST0RVQ1QiLCBzdHlsZU9mKCJtZW1iYSIpLmxhYmVsLCAiZXZlcnkgc2VlZGVkIGtpbmQgaGFzIGl0cyBvd24gc3R5bGUiKQoJdWFzc2VydC5BYm9ydHNDb250YWlucyh0LCBjdXIsICJ3aXRob3V0IHF1b3RlcyIsIGZ1bmMoKSB7CgkJU2V0R2FsbGVyeShjcm9zcyhjdXIpLCAiZGVtbyIsICJtZW1iYSB8IEEgfCBtIHwgaHR0cHM6Ly9hLmIgfCBzYXkgXCJoaVwiIikKCX0pCgoJRGVsZXRlR2FsbGVyeShjcm9zcyhjdXIpLCAiZGVtbyIpCgl1YXNzZXJ0LkVxdWFsKHQsICI6Z2FsbGVyeS5kZW1vOiIsIFJlbmRlcigiIiksICJhIG1pc3NpbmcgZ2FsbGVyeSBzdGF5cyB2aXNpYmxlIikKfQoKZnVuYyBUZXN0V3JhcCh0ICp0ZXN0aW5nLlQpIHsKCXVhc3NlcnQuRXF1YWwodCwgMSwgbGVuKHdyYXAoIlNob3J0IHRpdGxlIiwgMjQpKSkKCWxpbmVzIDo9IHdyYXAoIlRoZSBVbmRlcmdyb3VuZCBTaXN0aW5lIENoYXBlbCBpcyBhIHZlcnkgbG9uZyB0aXRsZSBpbmRlZWQiLCAyNCkKCXVhc3NlcnQuRXF1YWwodCwgMiwgbGVuKGxpbmVzKSkKCXVhc3NlcnQuVHJ1ZSh0LCBzdHJpbmdzLkhhc1N1ZmZpeChsaW5lc1sxXSwgIuKApiIpKQp9ChrlJQoKcmVuZGVyLmdubxLWJXBhY2thZ2UgaG9tZQoKaW1wb3J0ICgKCSJzdHJjb252IgoJInN0cmluZ3MiCgoJImNoYWluL3J1bnRpbWUiCikKCmNvbnN0ICgKCXJlYWxtUGF0aCA9ICJnbm8ubGFuZC9yL2cxNzQ3dDVtMmYwOHBscWpscmprMnEwcWxkNzQ2NWh4ejhna3g1OWMvaG9tZSIKCXdlYlBhdGggICA9ICIvci9nMTc0N3Q1bTJmMDhwbHFqbHJqazJxMHFsZDc0NjVoeHo4Z2t4NTljL2hvbWUiCikKCi8vIGZhbGxiYWNrTGF5b3V0IHJlbmRlcnMgd2hlbiB0aGUgbGF5b3V0IHNsb3QgaXMgZGVsZXRlZC4KY29uc3QgZmFsbGJhY2tMYXlvdXQgPSAiIyB6w7TDlm1hXG5cbjpiaW86XG5cbjpoZWFydHM6XG4iCgovLyBSZW5kZXIgc2VydmVzOgovLwovLwkiIiAgICAgICAgICAgICB0aGUgcHJvZmlsZSBwYWdlCi8vCSJzbG90cyIgICAgICAgIHRoZSBzbG90IGluZGV4Ci8vCSJzbG90cy88c2x1Zz4iIG9uZSBzbG90J3MgcmF3IG1hcmtkb3duCi8vCSJoZWFydHMiICAgICAgIGV2ZXJ5b25lIHdobyBzZW50IGEgPDMKZnVuYyBSZW5kZXIocGF0aCBzdHJpbmcpIHN0cmluZyB7Cglzd2l0Y2ggewoJY2FzZSBwYXRoID09ICIiOgoJCXJldHVybiByZW5kZXJQYWdlKCkKCWNhc2UgcGF0aCA9PSAic2xvdHMiOgoJCXJldHVybiByZW5kZXJJbmRleCgpCgljYXNlIHN0cmluZ3MuSGFzUHJlZml4KHBhdGgsICJzbG90cy8iKToKCQlyZXR1cm4gcmVuZGVyU2xvdChzdHJpbmdzLlRyaW1QcmVmaXgocGF0aCwgInNsb3RzLyIpKQoJY2FzZSBwYXRoID09ICJoZWFydHMiOgoJCXJldHVybiByZW5kZXJIZWFydHMoKQoJfQoJcmV0dXJuICIjIE5vdCBmb3VuZFxuXG5ObyBzdWNoIHBhdGg6ICIgKyBzdHJjb252LlF1b3RlKHBhdGgpICsgIlxuXG5bQmFjayBob21lXSgiICsgd2ViUGF0aCArICIpXG4iCn0KCmZ1bmMgcmVuZGVyUGFnZSgpIHN0cmluZyB7CglsYXlvdXQgOj0gR2V0KGxheW91dFNsdWcpCglpZiBsYXlvdXQgPT0gIiIgewoJCWxheW91dCA9IGZhbGxiYWNrTGF5b3V0Cgl9CglyZXR1cm4gZmlsbChsYXlvdXQpCn0KCi8vIGZpbGwgcmVwbGFjZXMgZXZlcnkgOnNsdWc6IGluIHMsIGluIG9uZSBsZWZ0LXRvLXJpZ2h0IHBhc3MuIFJlcGxhY2VtZW50IHRleHQKLy8gaXMgbmV2ZXIgcmVzY2FubmVkLCBzbyBhIHNsb3QgY2Fubm90IGV4cGFuZCBpbnRvIGFub3RoZXIgc2xvdC4gQSBwbGFjZWhvbGRlcgovLyB3aXRoIG5vIHZhbHVlIHN0YXlzIHZlcmJhdGltOiBhIG1pc3Npbmcgc2VjdGlvbiBzaG91bGQgYmUgdmlzaWJsZS4KZnVuYyBmaWxsKHMgc3RyaW5nKSBzdHJpbmcgewoJdmFyIGIgc3RyaW5ncy5CdWlsZGVyCglmb3IgewoJCWkgOj0gc3RyaW5ncy5JbmRleEJ5dGUocywgJzonKQoJCWlmIGkgPCAwIHsKCQkJYi5Xcml0ZVN0cmluZyhzKQoJCQlyZXR1cm4gYi5TdHJpbmcoKQoJCX0KCQliLldyaXRlU3RyaW5nKHNbOmldKQoJCXMgPSBzW2k6XQoJCWogOj0gc3RyaW5ncy5JbmRleEJ5dGUoc1sxOl0sICc6JykKCQlpZiBqIDwgMCB7CgkJCWIuV3JpdGVTdHJpbmcocykKCQkJcmV0dXJuIGIuU3RyaW5nKCkKCQl9CgkJc2x1ZyA6PSBzWzEgOiBqKzFdCgkJaWYgdiwgb2sgOj0gbG9va3VwKHNsdWcpOyBvayB7CgkJCWIuV3JpdGVTdHJpbmcodikKCQkJcyA9IHNbaisyOl0KCQkJY29udGludWUKCQl9CgkJLy8gTm90IGEgcGxhY2Vob2xkZXI6IGVtaXQgdGhlIGZpcnN0ICc6JyBhbmQgcmVzY2FuIGZyb20gdGhlIG5leHQgb25lLAoJCS8vIHNvICJhOmIgOmJpbzoiIHN0aWxsIGZpbmRzIDpiaW86LgoJCWIuV3JpdGVTdHJpbmcoIjoiKQoJCXMgPSBzWzE6XQoJfQp9CgpmdW5jIGxvb2t1cChzbHVnIHN0cmluZykgKHN0cmluZywgYm9vbCkgewoJaWYgIXZhbGlkU2x1ZyhzbHVnKSB7CgkJcmV0dXJuICIiLCBmYWxzZQoJfQoJc3dpdGNoIHNsdWcgewoJY2FzZSAiY2hhaW5pZCI6CgkJcmV0dXJuIHJ1bnRpbWUuQ2hhaW5JRCgpLCB0cnVlCgljYXNlICJoZWlnaHQiOgoJCXJldHVybiBzdHJjb252LkZvcm1hdEludChydW50aW1lLkNoYWluSGVpZ2h0KCksIDEwKSwgdHJ1ZQoJY2FzZSAiaGVhcnRzIjoKCQlyZXR1cm4gaGVhcnRzQmxvY2soKSwgdHJ1ZQoJY2FzZSAiaGVybyI6CgkJcmV0dXJuIGhlcm9JbWFnZSgpLCB0cnVlCgljYXNlICJyZWFsbSI6CgkJcmV0dXJuIHJlYWxtUGF0aCwgdHJ1ZQoJY2FzZSAicmV2IjoKCQlyZXR1cm4gc3RyY29udi5JdG9hKHJldiksIHRydWUKCX0KCWlmIHN0cmluZ3MuSGFzUHJlZml4KHNsdWcsIGdhbGxlcnlQcmVmaXgpIHsKCQlyZXR1cm4gcmVuZGVyR2FsbGVyeShzdHJpbmdzLlRyaW1QcmVmaXgoc2x1ZywgZ2FsbGVyeVByZWZpeCkpCgl9CglpZiB2IDo9IHNsb3RzLkdldChzbHVnKTsgdiAhPSBuaWwgewoJCXJldHVybiB2Ligqc2xvdCkuYm9keSwgdHJ1ZQoJfQoJcmV0dXJuICIiLCBmYWxzZQp9CgpmdW5jIGhlYXJ0c0Jsb2NrKCkgc3RyaW5nIHsKCW4gOj0gaGVhcnRzLlNpemUoKQoJdmFyIGIgc3RyaW5ncy5CdWlsZGVyCgliLldyaXRlU3RyaW5nKCIqKiIpCgliLldyaXRlU3RyaW5nKHN0cmNvbnYuSXRvYShuKSkKCWlmIG4gPT0gMSB7CgkJYi5Xcml0ZVN0cmluZygiKiogaGVhcnQgc28gZmFyLiIpCgl9IGVsc2UgewoJCWIuV3JpdGVTdHJpbmcoIioqIGhlYXJ0cyBzbyBmYXIuIikKCX0KCWIuV3JpdGVTdHJpbmcoIiBbU2VuZCB5b3Vyc10oIiArIHdlYlBhdGggKyAiJGhlbHAmZnVuYz1IZWFydCk6IG9uZSB0cmFuc2FjdGlvbiwgb25lIHBlciBhZGRyZXNzLCBmb3JldmVyIG9uIGNoYWluLiIpCglpZiBsZW4ocmVjZW50KSA+IDAgewoJCWIuV3JpdGVTdHJpbmcoIlxuXG5MYXRlc3Q6ICIpCgkJZm9yIGksIGEgOj0gcmFuZ2UgcmVjZW50IHsKCQkJaWYgaSA+IDAgewoJCQkJYi5Xcml0ZVN0cmluZygiIMK3ICIpCgkJCX0KCQkJYi5Xcml0ZVN0cmluZyh1c2VyTGluayhhKSkKCQl9CgkJYi5Xcml0ZVN0cmluZygiIMK3IFthbGxdKCIgKyB3ZWJQYXRoICsgIjpoZWFydHMpIikKCX0KCXJldHVybiBiLlN0cmluZygpCn0KCi8vIHVzZXJMaW5rIHJlbmRlcnMgYW4gYWRkcmVzcyBhcyBhIHNob3J0IGxpbmsgdG8gaXRzIGduby5sYW5kIHByb2ZpbGUuCmZ1bmMgdXNlckxpbmsoYSBhZGRyZXNzKSBzdHJpbmcgewoJcyA6PSBhLlN0cmluZygpCglzaG9ydCA6PSBzCglpZiBsZW4ocykgPiAxMiB7CgkJc2hvcnQgPSBzWzo3XSArICLigKYiICsgc1tsZW4ocyktNDpdCgl9CglyZXR1cm4gIlsiICsgc2hvcnQgKyAiXSgvdS8iICsgcyArICIpIgp9CgpmdW5jIHJlbmRlckhlYXJ0cygpIHN0cmluZyB7Cgl2YXIgYiBzdHJpbmdzLkJ1aWxkZXIKCWIuV3JpdGVTdHJpbmcoIiMgPDNcblxuIikKCWIuV3JpdGVTdHJpbmcoc3RyY29udi5JdG9hKGhlYXJ0cy5TaXplKCkpICsgIiBhZGRyZXNzKGVzKSBzZW50IGEgaGVhcnQuIFtTZW5kIHlvdXJzXSgiICsgd2ViUGF0aCArICIkaGVscCZmdW5jPUhlYXJ0KS5cblxuIikKCWlmIGhlYXJ0cy5TaXplKCkgPT0gMCB7CgkJYi5Xcml0ZVN0cmluZygiX0JlIHRoZSBmaXJzdC5fXG4iKQoJCXJldHVybiBiLlN0cmluZygpCgl9CgliLldyaXRlU3RyaW5nKCJ8IGZyb20gfCBibG9jayB8XG58IC0tLSB8IC0tLTogfFxuIikKCWhlYXJ0cy5JdGVyYXRlKCIiLCAiIiwgZnVuYyhrZXkgc3RyaW5nLCB2YWx1ZSBhbnkpIGJvb2wgewoJCWIuV3JpdGVTdHJpbmcoInwgIiArIHVzZXJMaW5rKGFkZHJlc3Moa2V5KSkgKyAiIHwgIiArIHN0cmNvbnYuRm9ybWF0SW50KHZhbHVlLihpbnQ2NCksIDEwKSArICIgfFxuIikKCQlyZXR1cm4gZmFsc2UKCX0pCgliLldyaXRlU3RyaW5nKCJcbltCYWNrIGhvbWVdKCIgKyB3ZWJQYXRoICsgIilcbiIpCglyZXR1cm4gYi5TdHJpbmcoKQp9CgpmdW5jIHJlbmRlckluZGV4KCkgc3RyaW5nIHsKCXZhciBiIHN0cmluZ3MuQnVpbGRlcgoJYi5Xcml0ZVN0cmluZygiIyBTbG90c1xuXG5yZXYgIiArIHN0cmNvbnYuSXRvYShyZXYpICsgIiDCtyAiICsgc3RyY29udi5JdG9hKHNsb3RzLlNpemUoKSkgKyAiIHNsb3QocylcblxuIikKCWIuV3JpdGVTdHJpbmcoInwgc2xvdCB8IGJ5dGVzIHwgcmV2IHwgaGVpZ2h0IHxcbnwgLS0tIHwgLS0tOiB8IC0tLTogfCAtLS06IHxcbiIpCglzbG90cy5JdGVyYXRlKCIiLCAiIiwgZnVuYyhrZXkgc3RyaW5nLCB2YWx1ZSBhbnkpIGJvb2wgewoJCXMgOj0gdmFsdWUuKCpzbG90KQoJCWIuV3JpdGVTdHJpbmcoInwgWyIgKyBrZXkgKyAiXSgiICsgd2ViUGF0aCArICI6c2xvdHMvIiArIGtleSArICIpIHwgIiArCgkJCXN0cmNvbnYuSXRvYShsZW4ocy5ib2R5KSkgKyAiIHwgIiArIHN0cmNvbnYuSXRvYShzLnJldikgKyAiIHwgIiArCgkJCXN0cmNvbnYuRm9ybWF0SW50KHMudXBkYXRlZCwgMTApICsgIiB8XG4iKQoJCXJldHVybiBmYWxzZQoJfSkKCXJldHVybiBiLlN0cmluZygpCn0KCmZ1bmMgcmVuZGVyU2xvdChzbHVnIHN0cmluZykgc3RyaW5nIHsKCXYgOj0gc2xvdHMuR2V0KHNsdWcpCglpZiB2ID09IG5pbCB7CgkJcmV0dXJuICIjIE5vdCBmb3VuZFxuXG5ObyBzbG90IG5hbWVkICIgKyBzdHJjb252LlF1b3RlKHNsdWcpICsgIi5cblxuW1Nsb3QgaW5kZXhdKCIgKyB3ZWJQYXRoICsgIjpzbG90cylcbiIKCX0KCXMgOj0gdi4oKnNsb3QpCglib2R5IDo9IHMuYm9keQoJaWYgIXN0cmluZ3MuSGFzU3VmZml4KGJvZHksICJcbiIpIHsKCQlib2R5ICs9ICJcbiIKCX0KCXJldHVybiAiIyAiICsgc2x1ZyArICJcblxuIiArIHN0cmNvbnYuSXRvYShsZW4ocy5ib2R5KSkgKyAiIGJ5dGVzIMK3IHJldiAiICsgc3RyY29udi5JdG9hKHMucmV2KSArCgkJIiDCtyB3cml0dGVuIGF0IGhlaWdodCAiICsgc3RyY29udi5Gb3JtYXRJbnQocy51cGRhdGVkLCAxMCkgKyAiXG5cbmBgYGBcbiIgKyBib2R5ICsgImBgYGBcbiIKfQoiIgoTL2duby5NZW1QYWNrYWdlVHlwZRILCglNUFVzZXJBbGwiDTUwMDAwMDAwdWdub3QSEwiAxoaPARILMTgwMDAwdWdub3QaqAEKOgoTL3RtLlB1YktleVNlY3AyNTZrMRIjCiEDIOV/XirsLZoGpqv9CvKHp1VH1UALFVlXp85ozdflgQASQO+DawK/xgidSaTjOgWq7hQYELQrq8pznm8R5oQZwQRGFx73TfyY187VRXEBbc21hbE4UHWIli/JFEL8hyeYiR4aKGcxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxbHV1eGU=

Raw transaction data

Raw JSON data