tx · 6jxdd47uAaFABQkqL4R59Yq8X1os8QuLfKFwwNFfe4De

3MsS3oDXxqDJ2vmzcvBQeQLkThmMmuojN74:  -0.14200000 Waves

2020.02.04 01:18 [883574] data 3MsS3oDXxqDJ2vmzcvBQeQLkThmMmuojN74 > SELF 0.00000000 Waves

3MsS3oDXxqDJ2vmzcvBQeQLkThmMmuojN74: main.js_0: "base64:LyoNCiAgIENvcHlyaWdodCAyMDE0IE5lYmV6IEJyaWVma2FuaQ0KICAgZmxvcHB5YmlyZCAtIG1haW4uanMNCg0KICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQogICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQogICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCg0KICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KDQogICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQogICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQogICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQogICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCiovDQoNCnZhciBkZWJ1Z21vZGUgPSBmYWxzZTsNCg0KdmFyIHN0YXRlcyA9IE9iamVjdC5mcmVlemUoew0KICAgU3BsYXNoU2NyZWVuOiAwLA0KICAgR2FtZVNjcmVlbjogMSwNCiAgIFNjb3JlU2NyZWVuOiAyDQp9KTsNCg0KdmFyIGN1cnJlbnRzdGF0ZTsNCg0KdmFyIGdyYXZpdHkgPSAwLjI1Ow0KdmFyIHZlbG9jaXR5ID0gMDsNCnZhciBwb3NpdGlvbiA9IDE4MDsNCnZhciByb3RhdGlvbiA9IDA7DQp2YXIganVtcCA9IC00LjY7DQp2YXIgZmx5QXJlYSA9ICQoIiNmbHlhcmVhIikuaGVpZ2h0KCk7DQoNCnZhciBzY29yZSA9IDA7DQp2YXIgaGlnaHNjb3JlID0gMDsNCg0KdmFyIHBpcGVoZWlnaHQgPSA5MDsNCnZhciBwaXBld2lkdGggPSA1MjsNCnZhciBwaXBlcyA9IG5ldyBBcnJheSgpOw0KDQp2YXIgcmVwbGF5Y2xpY2thYmxlID0gZmFsc2U7DQoNCi8vc291bmRzDQp2YXIgdm9sdW1lID0gMzA7DQp2YXIgc291bmRKdW1wID0gbmV3IGJ1enouc291bmQoImFzc2V0cy9zb3VuZHMvc2Z4X3dpbmcub2dnIik7DQp2YXIgc291bmRTY29yZSA9IG5ldyBidXp6LnNvdW5kKCJhc3NldHMvc291bmRzL3NmeF9wb2ludC5vZ2ciKTsNCnZhciBzb3VuZEhpdCA9IG5ldyBidXp6LnNvdW5kKCJhc3NldHMvc291bmRzL3NmeF9oaXQub2dnIik7DQp2YXIgc291bmREaWUgPSBuZXcgYnV6ei5zb3VuZCgiYXNzZXRzL3NvdW5kcy9zZnhfZGllLm9nZyIpOw0KdmFyIHNvdW5kU3dvb3NoID0gbmV3IGJ1enouc291bmQoImFzc2V0cy9zb3VuZHMvc2Z4X3N3b29zaGluZy5vZ2ciKTsNCmJ1enouYWxsKCkuc2V0Vm9sdW1lKHZvbHVtZSk7DQoNCi8vbG9vcHMNCnZhciBsb29wR2FtZWxvb3A7DQp2YXIgbG9vcFBpcGVsb29wOw0KDQokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsNCiAgIGlmKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggPT0gIj9kZWJ1ZyIpDQogICAgICBkZWJ1Z21vZGUgPSB0cnVlOw0KICAgaWYod2luZG93LmxvY2F0aW9uLnNlYXJjaCA9PSAiP2Vhc3kiKQ0KICAgICAgcGlwZWhlaWdodCA9IDIwMDsNCiAgIA0KICAgLy9nZXQgdGhlIGhpZ2hzY29yZQ0KICAgdmFyIHNhdmVkc2NvcmUgPSBnZXRDb29raWUoImhpZ2hzY29yZSIpOw0KICAgaWYoc2F2ZWRzY29yZSAhPSAiIikNCiAgICAgIGhpZ2hzY29yZSA9IHBhcnNlSW50KHNhdmVkc2NvcmUpOw0KICAgDQogICAvL3N0YXJ0IHdpdGggdGhlIHNwbGFzaCBzY3JlZW4NCiAgIHNob3dTcGxhc2goKTsNCn0pOw0KDQpmdW5jdGlvbiBnZXRDb29raWUoY25hbWUpDQp7DQogICB2YXIgbmFtZSA9IGNuYW1lICsgIj0iOw0KICAgdmFyIGNhID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7DQogICBmb3IodmFyIGk9MDsgaTxjYS5sZW5ndGg7IGkrKykgDQogICB7DQogICAgICB2YXIgYyA9IGNhW2ldLnRyaW0oKTsNCiAgICAgIGlmIChjLmluZGV4T2YobmFtZSk9PTApIHJldHVybiBjLnN1YnN0cmluZyhuYW1lLmxlbmd0aCxjLmxlbmd0aCk7DQogICB9DQogICByZXR1cm4gIiI7DQp9DQoNCmZ1bmN0aW9uIHNldENvb2tpZShjbmFtZSxjdmFsdWUsZXhkYXlzKQ0Kew0KICAgdmFyIGQgPSBuZXcgRGF0ZSgpOw0KICAgZC5zZXRUaW1lKGQuZ2V0VGltZSgpKyhleGRheXMqMjQqNjAqNjAqMTAwMCkpOw0KICAgdmFyIGV4cGlyZXMgPSAiZXhwaXJlcz0iK2QudG9HTVRTdHJpbmcoKTsNCiAgIGRvY3VtZW50LmNvb2tpZSA9IGNuYW1lICsgIj0iICsgY3ZhbHVlICsgIjsgIiArIGV4cGlyZXM7DQp9DQoNCmZ1bmN0aW9uIHNob3dTcGxhc2goKQ0Kew0KICAgY3VycmVudHN0YXRlID0gc3RhdGVzLlNwbGFzaFNjcmVlbjsNCiAgIA0KICAgLy9zZXQgdGhlIGRlZmF1bHRzIChhZ2FpbikNCiAgIHZlbG9jaXR5ID0gMDsNCiAgIHBvc2l0aW9uID0gMTgwOw0KICAgcm90YXRpb24gPSAwOw0KICAgc2NvcmUgPSAwOw0KICAgDQogICAvL3VwZGF0ZSB0aGUgcGxheWVyIGluIHByZXBhcmF0aW9uIGZvciB0aGUgbmV4dCBnYW1lDQogICAkKCIjcGxheWVyIikuY3NzKHsgeTogMCwgeDogMH0pOw0KICAgdXBkYXRlUGxheWVyKCQoIiNwbGF5ZXIiKSk7DQogICANCiAgIHNvdW5kU3dvb3NoLnN0b3AoKTsNCiAgIHNvdW5kU3dvb3NoLnBsYXkoKTsNCiAgIA0KICAgLy9jbGVhciBvdXQgYWxsIHRoZSBwaXBlcyBpZiB0aGVyZSBhcmUgYW55DQogICAkKCIucGlwZSIpLnJlbW92ZSgpOw0KICAgcGlwZXMgPSBuZXcgQXJyYXkoKTsNCiAgIA0KICAgLy9tYWtlIGV2ZXJ5dGhpbmcgYW5pbWF0ZWQgYWdhaW4NCiAgICQoIi5hbmltYXRlZCIpLmNzcygnYW5pbWF0aW9uLXBsYXktc3RhdGUnLCAncnVubmluZycpOw0KICAgJCgiLmFuaW1hdGVkIikuY3NzKCctd2Via2l0LWFuaW1hdGlvbi1wbGF5LXN0YXRlJywgJ3J1bm5pbmcnKTsNCiAgIA0KICAgLy9mYWRlIGluIHRoZSBzcGxhc2gNCiAgICQoIiNzcGxhc2giKS50cmFuc2l0aW9uKHsgb3BhY2l0eTogMSB9LCAyMDAwLCAnZWFzZScpOw0KfQ0KDQpmdW5jdGlvbiBzdGFydEdhbWUoKQ0Kew0KICAgY3VycmVudHN0YXRlID0gc3RhdGVzLkdhbWVTY3JlZW47DQogICANCiAgIC8vZmFkZSBvdXQgdGhlIHNwbGFzaA0KICAgJCgiI3NwbGFzaCIpLnN0b3AoKTsNCiAgICQoIiNzcGxhc2giKS50cmFuc2l0aW9uKHsgb3BhY2l0eTogMCB9LCA1MDAsICdlYXNlJyk7DQogICANCiAgIC8vdXBkYXRlIHRoZSBiaWcgc2NvcmUNCiAgIHNldEJpZ1Njb3JlKCk7DQogICANCiAgIC8vZGVidWcgbW9kZT8NCiAgIGlmKGRlYnVnbW9kZSkNCiAgIHsNCiAgICAgIC8vc2hvdyB0aGUgYm91bmRpbmcgYm94ZXMNCiAgICAgICQoIi5ib3VuZGluZ2JveCIpLnNob3coKTsNCiAgIH0NCg0KICAgLy9zdGFydCB1cCBvdXIgbG9vcHMNCiAgIHZhciB1cGRhdGVyYXRlID0gMTAwMC4wIC8gNjAuMCA7IC8vNjAgdGltZXMgYSBzZWNvbmQNCiAgIGxvb3BHYW1lbG9vcCA9IHNldEludGVydmFsKGdhbWVsb29wLCB1cGRhdGVyYXRlKTsNCiAgIGxvb3BQaXBlbG9vcCA9IHNldEludGVydmFsKHVwZGF0ZVBpcGVzLCAxNDAwKTsNCiAgIA0KICAgLy9qdW1wIGZyb20gdGhlIHN0YXJ0IQ0KICAgcGxheWVySnVtcCgpOw0KfQ0KDQpmdW5jdGlvbiB1cGRhdGVQbGF5ZXIocGxheWVyKQ0Kew0KICAgLy9yb3RhdGlvbg0KICAgcm90YXRpb24gPSBNYXRoLm1pbigodmVsb2NpdHkgLyAxMCkgKiA5MCwgOTApOw0KICAgDQogICAvL2FwcGx5IHJvdGF0aW9uIGFuZCBwb3NpdGlvbg0KICAgJChwbGF5ZXIpLmNzcyh7IHJvdGF0ZTogcm90YXRpb24sIHRvcDogcG9zaXRpb24gfSk7DQp9DQoNCmZ1bmN0aW9uIGdhbWVsb29wKCkgew0KICAgdmFyIHBsYXllciA9ICQoIiNwbGF5ZXIiKTsNCiAgIA0KICAgLy91cGRhdGUgdGhlIHBsYXllciBzcGVlZC9wb3NpdGlvbg0KICAgdmVsb2NpdHkgKz0gZ3Jhdml0eTsNCiAgIHBvc2l0aW9uICs9IHZlbG9jaXR5Ow0KICAgDQogICAvL3VwZGF0ZSB0aGUgcGxheWVyDQogICB1cGRhdGVQbGF5ZXIocGxheWVyKTsNCiAgIA0KICAgLy9jcmVhdGUgdGhlIGJvdW5kaW5nIGJveA0KICAgdmFyIGJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbGF5ZXInKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsNCiAgIHZhciBvcmlnd2lkdGggPSAzNC4wOw0KICAgdmFyIG9yaWdoZWlnaHQgPSAyNC4wOw0KICAgDQogICB2YXIgYm94d2lkdGggPSBvcmlnd2lkdGggLSAoTWF0aC5zaW4oTWF0aC5hYnMocm90YXRpb24pIC8gOTApICogOCk7DQogICB2YXIgYm94aGVpZ2h0ID0gKG9yaWdoZWlnaHQgKyBib3guaGVpZ2h0KSAvIDI7DQogICB2YXIgYm94bGVmdCA9ICgoYm94LndpZHRoIC0gYm94d2lkdGgpIC8gMikgKyBib3gubGVmdDsNCiAgIHZhciBib3h0b3AgPSAoKGJveC5oZWlnaHQgLSBib3hoZWlnaHQpIC8gMikgKyBib3gudG9wOw0KICAgdmFyIGJveHJpZ2h0ID0gYm94bGVmdCArIGJveHdpZHRoOw0KICAgdmFyIGJveGJvdHRvbSA9IGJveHRvcCArIGJveGhlaWdodDsNCiAgIA0KICAgLy9pZiB3ZSdyZSBpbiBkZWJ1ZyBtb2RlLCBkcmF3IHRoZSBib3VuZGluZyBib3gNCiAgIGlmKGRlYnVnbW9kZSkNCiAgIHsNCiAgICAgIHZhciBib3VuZGluZ2JveCA9ICQoIiNwbGF5ZXJib3giKTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygnbGVmdCcsIGJveGxlZnQpOw0KICAgICAgYm91bmRpbmdib3guY3NzKCd0b3AnLCBib3h0b3ApOw0KICAgICAgYm91bmRpbmdib3guY3NzKCdoZWlnaHQnLCBib3hoZWlnaHQpOw0KICAgICAgYm91bmRpbmdib3guY3NzKCd3aWR0aCcsIGJveHdpZHRoKTsNCiAgIH0NCiAgIA0KICAgLy9kaWQgd2UgaGl0IHRoZSBncm91bmQ/DQogICBpZihib3guYm90dG9tID49ICQoIiNsYW5kIikub2Zmc2V0KCkudG9wKQ0KICAgew0KICAgICAgcGxheWVyRGVhZCgpOw0KICAgICAgcmV0dXJuOw0KICAgfQ0KICAgDQogICAvL2hhdmUgdGhleSB0cmllZCB0byBlc2NhcGUgdGhyb3VnaCB0aGUgY2VpbGluZz8gOm8NCiAgIHZhciBjZWlsaW5nID0gJCgiI2NlaWxpbmciKTsNCiAgIGlmKGJveHRvcCA8PSAoY2VpbGluZy5vZmZzZXQoKS50b3AgKyBjZWlsaW5nLmhlaWdodCgpKSkNCiAgICAgIHBvc2l0aW9uID0gMDsNCiAgIA0KICAgLy93ZSBjYW4ndCBnbyBhbnkgZnVydGhlciB3aXRob3V0IGEgcGlwZQ0KICAgaWYocGlwZXNbMF0gPT0gbnVsbCkNCiAgICAgIHJldHVybjsNCiAgIA0KICAgLy9kZXRlcm1pbmUgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgbmV4dCBwaXBlcyBpbm5lciBhcmVhDQogICB2YXIgbmV4dHBpcGUgPSBwaXBlc1swXTsNCiAgIHZhciBuZXh0cGlwZXVwcGVyID0gbmV4dHBpcGUuY2hpbGRyZW4oIi5waXBlX3VwcGVyIik7DQogICANCiAgIHZhciBwaXBldG9wID0gbmV4dHBpcGV1cHBlci5vZmZzZXQoKS50b3AgKyBuZXh0cGlwZXVwcGVyLmhlaWdodCgpOw0KICAgdmFyIHBpcGVsZWZ0ID0gbmV4dHBpcGV1cHBlci5vZmZzZXQoKS5sZWZ0IC0gMjsgLy8gZm9yIHNvbWUgcmVhc29uIGl0IHN0YXJ0cyBhdCB0aGUgaW5uZXIgcGlwZXMgb2Zmc2V0LCBub3QgdGhlIG91dGVyIHBpcGVzLg0KICAgdmFyIHBpcGVyaWdodCA9IHBpcGVsZWZ0ICsgcGlwZXdpZHRoOw0KICAgdmFyIHBpcGVib3R0b20gPSBwaXBldG9wICsgcGlwZWhlaWdodDsNCiAgIA0KICAgaWYoZGVidWdtb2RlKQ0KICAgew0KICAgICAgdmFyIGJvdW5kaW5nYm94ID0gJCgiI3BpcGVib3giKTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygnbGVmdCcsIHBpcGVsZWZ0KTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygndG9wJywgcGlwZXRvcCk7DQogICAgICBib3VuZGluZ2JveC5jc3MoJ2hlaWdodCcsIHBpcGVoZWlnaHQpOw0KICAgICAgYm91bmRpbmdib3guY3NzKCd3aWR0aCcsIHBpcGV3aWR0aCk7DQogICB9DQogICANCiAgIC8vaGF2ZSB3ZSBnb3R0ZW4gaW5zaWRlIHRoZSBwaXBlIHlldD8NCiAgIGlmKGJveHJpZ2h0ID4gcGlwZWxlZnQpDQogICB7DQogICAgICAvL3dlJ3JlIHdpdGhpbiB0aGUgcGlwZSwgaGF2ZSB3ZSBwYXNzZWQgYmV0d2VlbiB1cHBlciBhbmQgbG93ZXIgcGlwZXM/DQogICAgICBpZihib3h0b3AgPiBwaXBldG9wICYmIGJveGJvdHRvbSA8IHBpcGVib3R0b20pDQogICAgICB7DQogICAgICAgICAvL3llYWghIHdlJ3JlIHdpdGhpbiBib3VuZHMNCiAgICAgICAgIA0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICAgLy9ubyEgd2UgdG91Y2hlZCB0aGUgcGlwZQ0KICAgICAgICAgcGxheWVyRGVhZCgpOw0KICAgICAgICAgcmV0dXJuOw0KICAgICAgfQ0KICAgfQ0KICAgDQogICANCiAgIC8vaGF2ZSB3ZSBwYXNzZWQgdGhlIGltbWluZW50IGRhbmdlcj8NCiAgIGlmKGJveGxlZnQgPiBwaXBlcmlnaHQpDQogICB7DQogICAgICAvL3llcywgcmVtb3ZlIGl0DQogICAgICBwaXBlcy5zcGxpY2UoMCwgMSk7DQogICAgICANCiAgICAgIC8vYW5kIHNjb3JlIGEgcG9pbnQNCiAgICAgIHBsYXllclNjb3JlKCk7DQogICB9DQp9DQoNCi8vSGFuZGxlIHNwYWNlIGJhcg0KJChkb2N1bWVudCkua2V5ZG93bihmdW5jdGlvbihlKXsNCiAgIC8vc3BhY2UgYmFyIQ0KICAgaWYoZS5rZXlDb2RlID09IDMyKQ0KICAgew0KICAgICAgLy9pbiBTY29yZVNjcmVlbiwgaGl0dGluZyBzcGFjZSBzaG91bGQgY2xpY2sgdGhlICJyZXBsYXkiIGJ1dHRvbi4gZWxzZSBpdCdzIGp1c3QgYSByZWd1bGFyIHNwYWNlYmFyIGhpdA0KICAgICAgaWYoY3VycmVudHN0YXRlID09IHN0YXRlcy5TY29yZVNjcmVlbikNCiAgICAgICAgICQoIiNyZXBsYXkiKS5jbGljaygpOw0KICAgICAgZWxzZQ0KICAgICAgICAgc2NyZWVuQ2xpY2soKTsNCiAgIH0NCn0pOw0KDQovL0hhbmRsZSBtb3VzZSBkb3duIE9SIHRvdWNoIHN0YXJ0DQppZigib250b3VjaHN0YXJ0IiBpbiB3aW5kb3cpDQogICAkKGRvY3VtZW50KS5vbigidG91Y2hzdGFydCIsIHNjcmVlbkNsaWNrKTsNCmVsc2UNCiAgICQoZG9jdW1lbnQpLm9uKCJtb3VzZWRvd24iLCBzY3JlZW5DbGljayk7DQoNCmZ1bmN0aW9uIHNjcmVlbkNsaWNrKCkNCnsNCiAgIGlmKGN1cnJlbnRzdGF0ZSA9PSBzdGF0ZXMuR2FtZVNjcmVlbikNCiAgIHsNCiAgICAgIHBsYXllckp1bXAoKTsNCiAgIH0NCiAgIGVsc2UgaWYoY3VycmVudHN0YXRlID09IHN0YXRlcy5TcGxhc2hTY3JlZW4pDQogICB7DQogICAgICBzdGFydEdhbWUoKTsNCiAgIH0NCn0NCg0KZnVuY3Rpb24gcGxheWVySnVtcCgpDQp7DQogICB2ZWxvY2l0eSA9IGp1bXA7DQogICAvL3BsYXkganVtcCBzb3VuZA0KICAgc291bmRKdW1wLnN0b3AoKTsNCiAgIHNvdW5kSnVtcC5wbGF5KCk7DQp9DQoNCmZ1bmN0aW9uIHNldEJpZ1Njb3JlKGVyYXNlKQ0Kew0KICAgdmFyIGVsZW1zY29yZSA9ICQoIiNiaWdzY29yZSIpOw0KICAgZWxlbXNjb3JlLmVtcHR5KCk7DQogICANCiAgIGlmKGVyYXNlKQ0KICAgICAgcmV0dXJuOw0KICAgDQogICB2YXIgZGlnaXRzID0gc2NvcmUudG9TdHJpbmcoKS5zcGxpdCgnJyk7DQogICBmb3IodmFyIGkgPSAwOyBpIDwgZGlnaXRzLmxlbmd0aDsgaSsrKQ0KICAgICAgZWxlbXNjb3JlLmFwcGVuZCgiPGltZyBzcmM9J2h0dHBzOi8vbm9kZXMtdGVzdG5ldC53YXZlc25vZGVzLmNvbS9hZGRyZXNzZXMvZGF0YS93ZWIlMkJkYXBwJTNBJTJGJTJGM01zUzNvRFh4cURKMnZtemN2QlFlUUxrVGhtTW11b2pONzQlMkZmb250X2JpZ18iICsgZGlnaXRzW2ldICsgIi5wbmdfY291bnQnIGFsdD0nIiArIGRpZ2l0c1tpXSArICInPiIpOw0KfQ0KDQpmdW5jdGlvbiBzZXRTbWFsbFNjb3JlKCkNCnsNCiAgIHZhciBlbGVtc2NvcmUgPSAkKCIjY3VycmVudHNjb3JlIik7DQogICBlbGVtc2NvcmUuZW1wdHkoKTsNCiAgIA0KICAgdmFyIGRpZ2l0cyA9IHNjb3JlLnRvU3RyaW5nKCkuc3BsaXQoJycpOw0KICAgZm9yKHZhciBpID0gMDsgaSA8IGRpZ2l0cy5sZW5ndGg7IGkrKykNCiAgICAgIGVsZW1zY29yZS5hcHBlbmQoIjxpbWcgc3JjPSdodHRwczovL25vZGVzLXRlc3RuZXQud2F2ZXNub2Rlcy5jb20vYWRkcmVzc2VzL2RhdGEvd2ViJTJCZGFwcCUzQSUyRiUyRjNNc1Mzb0RYeHFESjJ2bXpjdkJRZVFMa1RobU1tdW9qTjc0JTJGZm9udF9zbWFsbF8iICsgZGlnaXRzW2ldICsgIi5wbmdfY291bnQnIGFsdD0nIiArIGRpZ2l0c1tpXSArICInPiIpOw0KfQ0KDQpmdW5jdGlvbiBzZXRIaWdoU2NvcmUoKQ0Kew0KICAgdmFyIGVsZW1zY29yZSA9ICQoIiNoaWdoc2NvcmUiKTsNCiAgIGVsZW1zY29yZS5lbXB0eSgpOw0KICAgDQogICB2YXIgZGlnaXRzID0gaGlnaHNjb3JlLnRvU3RyaW5nKCkuc3BsaXQoJycpOw0KICAgZm9yKHZhciBpID0gMDsgaSA8IGRpZ2l0cy5sZW5ndGg7IGkrKykNCiAgICAgIGVsZW1zY29yZS5hcHBlbmQoIjxpbWcgc3JjPSdodHRwczovL25vZGVzLXRlc3RuZXQud2F2ZXNub2Rlcy5jb20vYWRkcmVzc2VzL2RhdGEvd2ViJTJCZGFwcCUzQSUyRiUyRjNNc1Mzb0RYeHFESjJ2bXpjdkJRZVFMa1RobU1tdW9qTjc0JTJGZm9udF9zbWFsbF8iICsgZGlnaXRzW2ldICsgIi5wbmdfY291bnQnIGFsdD0nIiArIGRpZ2l0c1tpXSArICInPiIpOw0KfQ0KDQpmdW5jdGlvbiBzZXRNZWRhbCgpDQp7DQogICB2YXIgZWxlbW1lZGFsID0gJCgiI21lZGFsIik7DQogICBlbGVtbWVkYWwuZW1wdHkoKTsNCiAgIA0KICAgaWYoc2NvcmUgPCAxMCkNCiAgICAgIC8vc2lnbmFsIHRoYXQgbm8gbWVkYWwgaGFzIGJlZW4gd29uDQogICAgICByZXR1cm4gZmFsc2U7DQogICANCiAgIGlmKHNjb3JlID49IDEwKQ0KICAgICAgbWVkYWwgPSAiYnJvbnplIjsNCiAgIGlmKHNjb3JlID49IDIwKQ0KICAgICAgbWVkYWwgPSAic2lsdmVyIjsNCiAgIGlmKHNjb3JlID49IDMwKQ0KICAgICAgbWVkYWwgPSAiZ29sZCI7DQogICBpZihzY29yZSA+PSA0MCkNCiAgICAgIG1lZGFsID0gInBsYXRpbnVtIjsNCiAgIA0KICAgZWxlbW1lZGFsLmFwcGVuZCgnPGltZyBzcmM9Imh0dHBzOi8vbm9kZXMtdGVzdG5ldC53YXZlc25vZGVzLmNvbS9hZGRyZXNzZXMvZGF0YS93ZWIlMkJkYXBwJTNBJTJGJTJGM01zUzNvRFh4cURKMnZtemN2QlFlUUxrVGhtTW11b2pONzQlMkZtZWRhbF8nICsgbWVkYWwgKycucG5nX2NvdW50IiBhbHQ9IicgKyBtZWRhbCArJyI+Jyk7DQogICANCiAgIC8vc2lnbmFsIHRoYXQgYSBtZWRhbCBoYXMgYmVlbiB3b24NCiAgIHJldHVybiB0cnVlOw0KfQ0KDQpmdW5jdGlvbiBwbGF5ZXJEZWFkKCkNCnsNCiAgIC8vc3RvcCBhbmltYXRpbmcgZXZlcnl0aGluZyENCiAgICQoIi5hbmltYXRlZCIpLmNzcygnYW5pbWF0aW9uLXBsYXktc3RhdGUnLCAncGF1c2VkJyk7DQogICAkKCIuYW5pbWF0ZWQiKS5jc3MoJy13ZWJraXQtYW5pbWF0aW9uLXBsYXktc3RhdGUnLCAncGF1c2VkJyk7DQogICANCiAgIC8vZHJvcCB0aGUgYmlyZCB0byB0aGUgZmxvb3INCiAgIHZhciBwbGF5ZXJib3R0b20gPSAkKCIjcGxheWVyIikucG9zaXRpb24oKS50b3AgKyAkKCIjcGxheWVyIikud2lkdGgoKTsgLy93ZSB1c2Ugd2lkdGggYmVjYXVzZSBoZSdsbCBiZSByb3RhdGVkIDkwIGRlZw0KICAgdmFyIGZsb29yID0gZmx5QXJlYTsNCiAgIHZhciBtb3ZleSA9IE1hdGgubWF4KDAsIGZsb29yIC0gcGxheWVyYm90dG9tKTsNCiAgICQoIiNwbGF5ZXIiKS50cmFuc2l0aW9uKHsgeTogbW92ZXkgKyAncHgnLCByb3RhdGU6IDkwfSwgMTAwMCwgJ2Vhc2VJbk91dEN1YmljJyk7DQogICANCiAgIC8vaXQncyB0aW1lIHRvIGNoYW5nZSBzdGF0ZXMuIGFzIG9mIG5vdyB3ZSdyZSBjb25zaWRlcmVkIFNjb3JlU2NyZWVuIHRvIGRpc2FibGUgbGVmdCBjbGljay9mbHlpbmcNCiAgIGN1cnJlbnRzdGF0ZSA9IHN0YXRlcy5TY29yZVNjcmVlbjsNCg0KICAgLy9kZXN0cm95IG91ciBnYW1lbG9vcHMNCiAgIGNsZWFySW50ZXJ2YWwobG9vcEdhbWVsb29wKTsNCiAgIGNsZWFySW50ZXJ2YWwobG9vcFBpcGVsb29wKTsNCiAgIGxvb3BHYW1lbG9vcCA9IG51bGw7DQogICBsb29wUGlwZWxvb3AgPSBudWxsOw0KDQogICAvL21vYmlsZSBicm93c2VycyBkb24ndCBzdXBwb3J0IGJ1enogYmluZE9uY2UgZXZlbnQNCiAgIGlmKGlzSW5jb21wYXRpYmxlLmFueSgpKQ0KICAgew0KICAgICAgLy9za2lwIHJpZ2h0IHRvIHNob3dpbmcgc2NvcmUNCiAgICAgIHNob3dTY29yZSgpOw0KICAgfQ0KICAgZWxzZQ0KICAgew0KICAgICAgLy9wbGF5IHRoZSBoaXQgc291bmQgKHRoZW4gdGhlIGRlYWQgc291bmQpIGFuZCB0aGVuIHNob3cgc2NvcmUNCiAgICAgIHNvdW5kSGl0LnBsYXkoKS5iaW5kT25jZSgiZW5kZWQiLCBmdW5jdGlvbigpIHsNCiAgICAgICAgIHNvdW5kRGllLnBsYXkoKS5iaW5kT25jZSgiZW5kZWQiLCBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgIHNob3dTY29yZSgpOw0KICAgICAgICAgfSk7DQogICAgICB9KTsNCiAgIH0NCn0NCg0KZnVuY3Rpb24gc2hvd1Njb3JlKCkNCnsNCiAgIC8vdW5oaWRlIHVzDQogICAkKCIjc2NvcmVib2FyZCIpLmNzcygiZGlzcGxheSIsICJibG9jayIpOw0KICAgDQogICAvL3JlbW92ZSB0aGUgYmlnIHNjb3JlDQogICBzZXRCaWdTY29yZSh0cnVlKTsNCiAgIA0KICAgLy9oYXZlIHRoZXkgYmVhdGVuIHRoZWlyIGhpZ2ggc2NvcmU/DQogICBpZihzY29yZSA+IGhpZ2hzY29yZSkNCiAgIHsNCiAgICAgIC8veWVhaCENCiAgICAgIGhpZ2hzY29yZSA9IHNjb3JlOw0KICAgICAgLy9zYXZlIGl0IQ0KICAgICAgc2V0Q29va2llKCJoaWdoc2NvcmUiLCBoaWdoc2NvcmUsIDk5OSk7DQogICB9DQogICANCiAgIC8vdXBkYXRlIHRoZSBzY29yZWJvYXJkDQogICBzZXRTbWFsbFNjb3JlKCk7DQogICBzZXRIaWdoU2NvcmUoKTsNCiAgIHZhciB3b25tZWRhbCA9IHNldE1lZGFsKCk7DQogICANCiAgIC8vU1dPT1NIIQ0KICAgc291bmRTd29vc2guc3RvcCgpOw0KICAgc291bmRTd29vc2gucGxheSgpOw0KICAgDQogICAvL3Nob3cgdGhlIHNjb3JlYm9hcmQNCiAgICQoIiNzY29yZWJvYXJkIikuY3NzKHsgeTogJzQwcHgnLCBvcGFjaXR5OiAwIH0pOyAvL21vdmUgaXQgZG93biBzbyB3ZSBjYW4gc2xpZGUgaXQgdXANCiAgICQoIiNyZXBsYXkiKS5jc3MoeyB5OiAnNDBweCcsIG9wYWNpdHk6IDAgfSk7DQogICAkKCIjc2NvcmVib2FyZCIpLnRyYW5zaXRpb24oeyB5OiAnMHB4Jywgb3BhY2l0eTogMX0sIDYwMCwgJ2Vhc2UnLCBmdW5jdGlvbigpIHsNCiAgICAgIC8vV2hlbiB0aGUgYW5pbWF0aW9uIGlzIGRvbmUsIGFuaW1hdGUgaW4gdGhlIHJlcGxheSBidXR0b24gYW5kIFNXT09TSCENCiAgICAgIHNvdW5kU3dvb3NoLnN0b3AoKTsNCiAgICAgIHNvdW5kU3dvb3NoLnBsYXkoKTsNCiAgICAgICQoIiNyZXBsYXkiKS50cmFuc2l0aW9uKHsgeTogJzBweCcsIG9wYWNpdHk6IDF9LCA2MDAsICdlYXNlJyk7DQogICAgICANCiAgICAgIC8vYWxzbyBhbmltYXRlIGluIHRoZSBNRURBTCEgV09PIQ0KICAgICAgaWYod29ubWVkYWwpDQogICAgICB7DQogICAgICAgICAkKCIjbWVkYWwiKS5jc3MoeyBzY2FsZTogMiwgb3BhY2l0eTogMCB9KTsNCiAgICAgICAgICQoIiNtZWRhbCIpLnRyYW5zaXRpb24oeyBvcGFjaXR5OiAxLCBzY2FsZTogMSB9LCAxMjAwLCAnZWFzZScpOw0KICAgICAgfQ0KICAgfSk7DQogICANCiAgIC8vbWFrZSB0aGUgcmVwbGF5IGJ1dHRvbiBjbGlja2FibGUNCiAgIHJlcGxheWNsaWNrYWJsZSA9IHRydWU7DQoNCiAgIC8vIEdyYXNzUjAwdDogYWRkZWQgZm9yIGNvbW11bmljYXRpbmcgdGhlIHNjb3JlLg0KICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2dyYXNzUm9vdC5nYW1lRW5kZWQnLCB7ZGV0YWlsOiB7IHNjb3JlOiBzY29yZSB9IH0pKTsNCn0NCg0KJCgiI3JlcGxheSIpLmNsaWNrKGZ1bmN0aW9uKCkgew0KICAgLy9tYWtlIHN1cmUgd2UgY2FuIG9ubHkgY2xpY2sgb25jZQ0KICAgaWYoIXJlcGxheWNsaWNrYWJsZSkNCiAgICAgIHJldHVybjsNCiAgIGVsc2UNCiAgICAgIHJlcGxheWNsaWNrYWJsZSA9IGZhbHNlOw0KICAgLy9TV09PU0ghDQogICBzb3VuZFN3b29zaC5zdG9wKCk7DQogICBzb3VuZFN3b29zaC5wbGF5KCk7DQogICANCiAgIC8vZmFkZSBvdXQgdGhlIHNjb3JlYm9hcmQNCiAgICQoIiNzY29yZWJvYXJkIikudHJhbnNpdGlvbih7IHk6ICctNDBweCcsIG9wYWNpdHk6IDB9LCAxMDAwLCAnZWFzZScsIGZ1bmN0aW9uKCkgew0KICAgICAgLy93aGVuIHRoYXQncyBkb25lLCBkaXNwbGF5IHVzIGJhY2sgdG8gbm90aGluZw0KICAgICAgJCgiI3Njb3JlYm9hcmQiKS5jc3MoImRpc3BsYXkiLCAibm9uZSIpOw0KICAgICAgDQogICAgICAvL3N0YXJ0IHRoZSBnYW1lIG92ZXIhDQogICAgICBzaG93U3BsYXNoKCk7DQogICB9KTsNCn0pOw0KDQpmdW5jdGlvbiBwbGF5ZXJTY29yZSgpDQp7DQogICBzY29yZSArPSAxOw0KICAgLy9wbGF5IHNjb3JlIHNvdW5kDQogICBzb3VuZFNjb3JlLnN0b3AoKTsNCiAgIHNvdW5kU2NvcmUucGxheSgpOw0KICAgc2V0QmlnU2NvcmUoKTsNCn0NCg0KZnVuY3Rpb24gdXBkYXRlUGlwZXMoKQ0Kew0KICAgLy9EbyBhbnkgcGlwZXMgbmVlZCByZW1vdmFsPw0KICAgJCgiLnBpcGUiKS5maWx0ZXIoZnVuY3Rpb24oKSB7IHJldHVybiAkKHRoaXMpLnBvc2l0aW9uKCkubGVmdCA8PSAtMTAwOyB9KS5yZW1vdmUoKQ0KICAgDQogICAvL2FkZCBhIG5ldyBwaXBlICh0b3AgaGVpZ2h0ICsgYm90dG9tIGhlaWdodCAgKyBwaXBlaGVpZ2h0ID09IGZseUFyZWEpIGFuZCBwdXQgaXQgaW4gb3VyIHRyYWNrZXINCiAgIHZhciBwYWRkaW5nID0gODA7DQogICB2YXIgY29uc3RyYWludCA9IGZseUFyZWEgLSBwaXBlaGVpZ2h0IC0gKHBhZGRpbmcgKiAyKTsgLy9kb3VibGUgcGFkZGluZyAoZm9yIHRvcCBhbmQgYm90dG9tKQ0KICAgdmFyIHRvcGhlaWdodCA9IE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkqY29uc3RyYWludCkgKyBwYWRkaW5nKTsgLy9hZGQgbG93ZXIgcGFkZGluZw0KICAgdmFyIGJvdHRvbWhlaWdodCA9IChmbHlBcmVhIC0gcGlwZWhlaWdodCkgLSB0b3BoZWlnaHQ7DQogICB2YXIgbmV3cGlwZSA9ICQoJzxkaXYgY2xhc3M9InBpcGUgYW5pbWF0ZWQiPjxkaXYgY2xhc3M9InBpcGVfdXBwZXIiIHN0eWxlPSJoZWlnaHQ6ICcgKyB0b3BoZWlnaHQgKyAncHg7Ij48L2Rpdj48ZGl2IGNsYXNzPSJwaXBlX2xvd2VyIiBzdHlsZT0iaGVpZ2h0OiAnICsgYm90dG9taGVpZ2h0ICsgJ3B4OyI+PC9kaXY+PC9kaXY+Jyk7DQogICAkKCIjZmx5YXJlYSIpLmFwcGVuZChuZXdwaXBlKTsNCiAgIHBpcGVzLnB1c2gobmV3cGlwZSk7DQp9DQoNCnZhciBpc0luY29tcGF0aWJsZSA9IHsNCiAgIEFuZHJvaWQ6IGZ1bmN0aW9uKCkgew0KICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSk7DQogICB9LA0KICAgQmxhY2tCZXJyeTogZnVuY3Rpb24oKSB7DQogICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQmxhY2tCZXJyeS9pKTsNCiAgIH0sDQogICBpT1M6IGZ1bmN0aW9uKCkgew0KICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSk7DQogICB9LA0KICAgT3BlcmE6IGZ1bmN0aW9uKCkgew0KICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL09wZXJhIE1pbmkvaSk7DQogICB9LA0KICAgU2FmYXJpOiBmdW5jdGlvbigpIHsNCiAgIHJldHVybiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvT1MgWC4qU2FmYXJpLykgJiYgISBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9DaHJvbWUvKSk7DQogICB9LA0KICAgV2luZG93czogZnVuY3Rpb24oKSB7DQogICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvSUVNb2JpbGUvaSk7DQogICB9LA0KICAgYW55OiBmdW5jdGlvbigpIHsNCiAgIHJldHVybiAoaXNJbmNvbXBhdGlibGUuQW5kcm9pZCgpIHx8IGlzSW5jb21wYXRpYmxlLkJsYWNrQmVycnkoKSB8fCBpc0luY29tcGF0aWJsZS5pT1MoKSB8fCBpc0luY29tcGF0aWJsZS5PcGVyYSgpIHx8IGlzSW5jb21wYXRpYmxlLlNhZmFyaSgpIHx8IGlzSW5jb21wYXRpYmxlLldpbmRvd3MoKSk7DQogICB9DQp9Ow==" -> "base64:LyoNCiAgIENvcHlyaWdodCAyMDE0IE5lYmV6IEJyaWVma2FuaQ0KICAgZmxvcHB5YmlyZCAtIG1haW4uanMNCg0KICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQogICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQogICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCg0KICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KDQogICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQogICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQogICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQogICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCiovDQoNCnZhciBkZWJ1Z21vZGUgPSBmYWxzZTsNCg0KdmFyIHN0YXRlcyA9IE9iamVjdC5mcmVlemUoew0KICAgU3BsYXNoU2NyZWVuOiAwLA0KICAgR2FtZVNjcmVlbjogMSwNCiAgIFNjb3JlU2NyZWVuOiAyDQp9KTsNCg0KdmFyIGN1cnJlbnRzdGF0ZTsNCg0KdmFyIGdyYXZpdHkgPSAwLjI1Ow0KdmFyIHZlbG9jaXR5ID0gMDsNCnZhciBwb3NpdGlvbiA9IDE4MDsNCnZhciByb3RhdGlvbiA9IDA7DQp2YXIganVtcCA9IC00LjY7DQp2YXIgZmx5QXJlYSA9ICQoIiNmbHlhcmVhIikuaGVpZ2h0KCk7DQoNCnZhciBzY29yZSA9IDA7DQp2YXIgaGlnaHNjb3JlID0gMDsNCg0KdmFyIHBpcGVoZWlnaHQgPSA5MDsNCnZhciBwaXBld2lkdGggPSA1MjsNCnZhciBwaXBlcyA9IG5ldyBBcnJheSgpOw0KDQp2YXIgcmVwbGF5Y2xpY2thYmxlID0gZmFsc2U7DQoNCi8vc291bmRzDQp2YXIgdm9sdW1lID0gMzA7DQp2YXIgc291bmRKdW1wID0gbmV3IGJ1enouc291bmQoImFzc2V0cy9zb3VuZHMvc2Z4X3dpbmcub2dnIik7DQp2YXIgc291bmRTY29yZSA9IG5ldyBidXp6LnNvdW5kKCJhc3NldHMvc291bmRzL3NmeF9wb2ludC5vZ2ciKTsNCnZhciBzb3VuZEhpdCA9IG5ldyBidXp6LnNvdW5kKCJhc3NldHMvc291bmRzL3NmeF9oaXQub2dnIik7DQp2YXIgc291bmREaWUgPSBuZXcgYnV6ei5zb3VuZCgiYXNzZXRzL3NvdW5kcy9zZnhfZGllLm9nZyIpOw0KdmFyIHNvdW5kU3dvb3NoID0gbmV3IGJ1enouc291bmQoImFzc2V0cy9zb3VuZHMvc2Z4X3N3b29zaGluZy5vZ2ciKTsNCmJ1enouYWxsKCkuc2V0Vm9sdW1lKHZvbHVtZSk7DQoNCi8vbG9vcHMNCnZhciBsb29wR2FtZWxvb3A7DQp2YXIgbG9vcFBpcGVsb29wOw0KDQokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsNCiAgIGlmKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggPT0gIj9kZWJ1ZyIpDQogICAgICBkZWJ1Z21vZGUgPSB0cnVlOw0KICAgaWYod2luZG93LmxvY2F0aW9uLnNlYXJjaCA9PSAiP2Vhc3kiKQ0KICAgICAgcGlwZWhlaWdodCA9IDIwMDsNCiAgIA0KICAgLy9nZXQgdGhlIGhpZ2hzY29yZQ0KICAgdmFyIHNhdmVkc2NvcmUgPSBnZXRDb29raWUoImhpZ2hzY29yZSIpOw0KICAgaWYoc2F2ZWRzY29yZSAhPSAiIikNCiAgICAgIGhpZ2hzY29yZSA9IHBhcnNlSW50KHNhdmVkc2NvcmUpOw0KICAgDQogICAvL3N0YXJ0IHdpdGggdGhlIHNwbGFzaCBzY3JlZW4NCiAgIHNob3dTcGxhc2goKTsNCn0pOw0KDQpmdW5jdGlvbiBnZXRDb29raWUoY25hbWUpDQp7DQogICB2YXIgbmFtZSA9IGNuYW1lICsgIj0iOw0KICAgdmFyIGNhID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7DQogICBmb3IodmFyIGk9MDsgaTxjYS5sZW5ndGg7IGkrKykgDQogICB7DQogICAgICB2YXIgYyA9IGNhW2ldLnRyaW0oKTsNCiAgICAgIGlmIChjLmluZGV4T2YobmFtZSk9PTApIHJldHVybiBjLnN1YnN0cmluZyhuYW1lLmxlbmd0aCxjLmxlbmd0aCk7DQogICB9DQogICByZXR1cm4gIiI7DQp9DQoNCmZ1bmN0aW9uIHNldENvb2tpZShjbmFtZSxjdmFsdWUsZXhkYXlzKQ0Kew0KICAgdmFyIGQgPSBuZXcgRGF0ZSgpOw0KICAgZC5zZXRUaW1lKGQuZ2V0VGltZSgpKyhleGRheXMqMjQqNjAqNjAqMTAwMCkpOw0KICAgdmFyIGV4cGlyZXMgPSAiZXhwaXJlcz0iK2QudG9HTVRTdHJpbmcoKTsNCiAgIGRvY3VtZW50LmNvb2tpZSA9IGNuYW1lICsgIj0iICsgY3ZhbHVlICsgIjsgIiArIGV4cGlyZXM7DQp9DQoNCmZ1bmN0aW9uIHNob3dTcGxhc2goKQ0Kew0KICAgY3VycmVudHN0YXRlID0gc3RhdGVzLlNwbGFzaFNjcmVlbjsNCiAgIA0KICAgLy9zZXQgdGhlIGRlZmF1bHRzIChhZ2FpbikNCiAgIHZlbG9jaXR5ID0gMDsNCiAgIHBvc2l0aW9uID0gMTgwOw0KICAgcm90YXRpb24gPSAwOw0KICAgc2NvcmUgPSAwOw0KICAgDQogICAvL3VwZGF0ZSB0aGUgcGxheWVyIGluIHByZXBhcmF0aW9uIGZvciB0aGUgbmV4dCBnYW1lDQogICAkKCIjcGxheWVyIikuY3NzKHsgeTogMCwgeDogMH0pOw0KICAgdXBkYXRlUGxheWVyKCQoIiNwbGF5ZXIiKSk7DQogICANCiAgIHNvdW5kU3dvb3NoLnN0b3AoKTsNCiAgIHNvdW5kU3dvb3NoLnBsYXkoKTsNCiAgIA0KICAgLy9jbGVhciBvdXQgYWxsIHRoZSBwaXBlcyBpZiB0aGVyZSBhcmUgYW55DQogICAkKCIucGlwZSIpLnJlbW92ZSgpOw0KICAgcGlwZXMgPSBuZXcgQXJyYXkoKTsNCiAgIA0KICAgLy9tYWtlIGV2ZXJ5dGhpbmcgYW5pbWF0ZWQgYWdhaW4NCiAgICQoIi5hbmltYXRlZCIpLmNzcygnYW5pbWF0aW9uLXBsYXktc3RhdGUnLCAncnVubmluZycpOw0KICAgJCgiLmFuaW1hdGVkIikuY3NzKCctd2Via2l0LWFuaW1hdGlvbi1wbGF5LXN0YXRlJywgJ3J1bm5pbmcnKTsNCiAgIA0KICAgLy9mYWRlIGluIHRoZSBzcGxhc2gNCiAgICQoIiNzcGxhc2giKS50cmFuc2l0aW9uKHsgb3BhY2l0eTogMSB9LCAyMDAwLCAnZWFzZScpOw0KfQ0KDQpmdW5jdGlvbiBzdGFydEdhbWUoKQ0Kew0KICAgY3VycmVudHN0YXRlID0gc3RhdGVzLkdhbWVTY3JlZW47DQogICANCiAgIC8vZmFkZSBvdXQgdGhlIHNwbGFzaA0KICAgJCgiI3NwbGFzaCIpLnN0b3AoKTsNCiAgICQoIiNzcGxhc2giKS50cmFuc2l0aW9uKHsgb3BhY2l0eTogMCB9LCA1MDAsICdlYXNlJyk7DQogICANCiAgIC8vdXBkYXRlIHRoZSBiaWcgc2NvcmUNCiAgIHNldEJpZ1Njb3JlKCk7DQogICANCiAgIC8vZGVidWcgbW9kZT8NCiAgIGlmKGRlYnVnbW9kZSkNCiAgIHsNCiAgICAgIC8vc2hvdyB0aGUgYm91bmRpbmcgYm94ZXMNCiAgICAgICQoIi5ib3VuZGluZ2JveCIpLnNob3coKTsNCiAgIH0NCg0KICAgLy9zdGFydCB1cCBvdXIgbG9vcHMNCiAgIHZhciB1cGRhdGVyYXRlID0gMTAwMC4wIC8gNjAuMCA7IC8vNjAgdGltZXMgYSBzZWNvbmQNCiAgIGxvb3BHYW1lbG9vcCA9IHNldEludGVydmFsKGdhbWVsb29wLCB1cGRhdGVyYXRlKTsNCiAgIGxvb3BQaXBlbG9vcCA9IHNldEludGVydmFsKHVwZGF0ZVBpcGVzLCAxNDAwKTsNCiAgIA0KICAgLy9qdW1wIGZyb20gdGhlIHN0YXJ0IQ0KICAgcGxheWVySnVtcCgpOw0KfQ0KDQpmdW5jdGlvbiB1cGRhdGVQbGF5ZXIocGxheWVyKQ0Kew0KICAgLy9yb3RhdGlvbg0KICAgcm90YXRpb24gPSBNYXRoLm1pbigodmVsb2NpdHkgLyAxMCkgKiA5MCwgOTApOw0KICAgDQogICAvL2FwcGx5IHJvdGF0aW9uIGFuZCBwb3NpdGlvbg0KICAgJChwbGF5ZXIpLmNzcyh7IHJvdGF0ZTogcm90YXRpb24sIHRvcDogcG9zaXRpb24gfSk7DQp9DQoNCmZ1bmN0aW9uIGdhbWVsb29wKCkgew0KICAgdmFyIHBsYXllciA9ICQoIiNwbGF5ZXIiKTsNCiAgIA0KICAgLy91cGRhdGUgdGhlIHBsYXllciBzcGVlZC9wb3NpdGlvbg0KICAgdmVsb2NpdHkgKz0gZ3Jhdml0eTsNCiAgIHBvc2l0aW9uICs9IHZlbG9jaXR5Ow0KICAgDQogICAvL3VwZGF0ZSB0aGUgcGxheWVyDQogICB1cGRhdGVQbGF5ZXIocGxheWVyKTsNCiAgIA0KICAgLy9jcmVhdGUgdGhlIGJvdW5kaW5nIGJveA0KICAgdmFyIGJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbGF5ZXInKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsNCiAgIHZhciBvcmlnd2lkdGggPSAzNC4wOw0KICAgdmFyIG9yaWdoZWlnaHQgPSAyNC4wOw0KICAgDQogICB2YXIgYm94d2lkdGggPSBvcmlnd2lkdGggLSAoTWF0aC5zaW4oTWF0aC5hYnMocm90YXRpb24pIC8gOTApICogOCk7DQogICB2YXIgYm94aGVpZ2h0ID0gKG9yaWdoZWlnaHQgKyBib3guaGVpZ2h0KSAvIDI7DQogICB2YXIgYm94bGVmdCA9ICgoYm94LndpZHRoIC0gYm94d2lkdGgpIC8gMikgKyBib3gubGVmdDsNCiAgIHZhciBib3h0b3AgPSAoKGJveC5oZWlnaHQgLSBib3hoZWlnaHQpIC8gMikgKyBib3gudG9wOw0KICAgdmFyIGJveHJpZ2h0ID0gYm94bGVmdCArIGJveHdpZHRoOw0KICAgdmFyIGJveGJvdHRvbSA9IGJveHRvcCArIGJveGhlaWdodDsNCiAgIA0KICAgLy9pZiB3ZSdyZSBpbiBkZWJ1ZyBtb2RlLCBkcmF3IHRoZSBib3VuZGluZyBib3gNCiAgIGlmKGRlYnVnbW9kZSkNCiAgIHsNCiAgICAgIHZhciBib3VuZGluZ2JveCA9ICQoIiNwbGF5ZXJib3giKTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygnbGVmdCcsIGJveGxlZnQpOw0KICAgICAgYm91bmRpbmdib3guY3NzKCd0b3AnLCBib3h0b3ApOw0KICAgICAgYm91bmRpbmdib3guY3NzKCdoZWlnaHQnLCBib3hoZWlnaHQpOw0KICAgICAgYm91bmRpbmdib3guY3NzKCd3aWR0aCcsIGJveHdpZHRoKTsNCiAgIH0NCiAgIA0KICAgLy9kaWQgd2UgaGl0IHRoZSBncm91bmQ/DQogICBpZihib3guYm90dG9tID49ICQoIiNsYW5kIikub2Zmc2V0KCkudG9wKQ0KICAgew0KICAgICAgcGxheWVyRGVhZCgpOw0KICAgICAgcmV0dXJuOw0KICAgfQ0KICAgDQogICAvL2hhdmUgdGhleSB0cmllZCB0byBlc2NhcGUgdGhyb3VnaCB0aGUgY2VpbGluZz8gOm8NCiAgIHZhciBjZWlsaW5nID0gJCgiI2NlaWxpbmciKTsNCiAgIGlmKGJveHRvcCA8PSAoY2VpbGluZy5vZmZzZXQoKS50b3AgKyBjZWlsaW5nLmhlaWdodCgpKSkNCiAgICAgIHBvc2l0aW9uID0gMDsNCiAgIA0KICAgLy93ZSBjYW4ndCBnbyBhbnkgZnVydGhlciB3aXRob3V0IGEgcGlwZQ0KICAgaWYocGlwZXNbMF0gPT0gbnVsbCkNCiAgICAgIHJldHVybjsNCiAgIA0KICAgLy9kZXRlcm1pbmUgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgbmV4dCBwaXBlcyBpbm5lciBhcmVhDQogICB2YXIgbmV4dHBpcGUgPSBwaXBlc1swXTsNCiAgIHZhciBuZXh0cGlwZXVwcGVyID0gbmV4dHBpcGUuY2hpbGRyZW4oIi5waXBlX3VwcGVyIik7DQogICANCiAgIHZhciBwaXBldG9wID0gbmV4dHBpcGV1cHBlci5vZmZzZXQoKS50b3AgKyBuZXh0cGlwZXVwcGVyLmhlaWdodCgpOw0KICAgdmFyIHBpcGVsZWZ0ID0gbmV4dHBpcGV1cHBlci5vZmZzZXQoKS5sZWZ0IC0gMjsgLy8gZm9yIHNvbWUgcmVhc29uIGl0IHN0YXJ0cyBhdCB0aGUgaW5uZXIgcGlwZXMgb2Zmc2V0LCBub3QgdGhlIG91dGVyIHBpcGVzLg0KICAgdmFyIHBpcGVyaWdodCA9IHBpcGVsZWZ0ICsgcGlwZXdpZHRoOw0KICAgdmFyIHBpcGVib3R0b20gPSBwaXBldG9wICsgcGlwZWhlaWdodDsNCiAgIA0KICAgaWYoZGVidWdtb2RlKQ0KICAgew0KICAgICAgdmFyIGJvdW5kaW5nYm94ID0gJCgiI3BpcGVib3giKTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygnbGVmdCcsIHBpcGVsZWZ0KTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygndG9wJywgcGlwZXRvcCk7DQogICAgICBib3VuZGluZ2JveC5jc3MoJ2hlaWdodCcsIHBpcGVoZWlnaHQpOw0KICAgICAgYm91bmRpbmdib3guY3NzKCd3aWR0aCcsIHBpcGV3aWR0aCk7DQogICB9DQogICANCiAgIC8vaGF2ZSB3ZSBnb3R0ZW4gaW5zaWRlIHRoZSBwaXBlIHlldD8NCiAgIGlmKGJveHJpZ2h0ID4gcGlwZWxlZnQpDQogICB7DQogICAgICAvL3dlJ3JlIHdpdGhpbiB0aGUgcGlwZSwgaGF2ZSB3ZSBwYXNzZWQgYmV0d2VlbiB1cHBlciBhbmQgbG93ZXIgcGlwZXM/DQogICAgICBpZihib3h0b3AgPiBwaXBldG9wICYmIGJveGJvdHRvbSA8IHBpcGVib3R0b20pDQogICAgICB7DQogICAgICAgICAvL3llYWghIHdlJ3JlIHdpdGhpbiBib3VuZHMNCiAgICAgICAgIA0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICAgLy9ubyEgd2UgdG91Y2hlZCB0aGUgcGlwZQ0KICAgICAgICAgcGxheWVyRGVhZCgpOw0KICAgICAgICAgcmV0dXJuOw0KICAgICAgfQ0KICAgfQ0KICAgDQogICANCiAgIC8vaGF2ZSB3ZSBwYXNzZWQgdGhlIGltbWluZW50IGRhbmdlcj8NCiAgIGlmKGJveGxlZnQgPiBwaXBlcmlnaHQpDQogICB7DQogICAgICAvL3llcywgcmVtb3ZlIGl0DQogICAgICBwaXBlcy5zcGxpY2UoMCwgMSk7DQogICAgICANCiAgICAgIC8vYW5kIHNjb3JlIGEgcG9pbnQNCiAgICAgIHBsYXllclNjb3JlKCk7DQogICB9DQp9DQoNCi8vSGFuZGxlIHNwYWNlIGJhcg0KJChkb2N1bWVudCkua2V5ZG93bihmdW5jdGlvbihlKXsNCiAgIC8vc3BhY2UgYmFyIQ0KICAgaWYoZS5rZXlDb2RlID09IDMyKQ0KICAgew0KICAgICAgLy9pbiBTY29yZVNjcmVlbiwgaGl0dGluZyBzcGFjZSBzaG91bGQgY2xpY2sgdGhlICJyZXBsYXkiIGJ1dHRvbi4gZWxzZSBpdCdzIGp1c3QgYSByZWd1bGFyIHNwYWNlYmFyIGhpdA0KICAgICAgaWYoY3VycmVudHN0YXRlID09IHN0YXRlcy5TY29yZVNjcmVlbikNCiAgICAgICAgICQoIiNyZXBsYXkiKS5jbGljaygpOw0KICAgICAgZWxzZQ0KICAgICAgICAgc2NyZWVuQ2xpY2soKTsNCiAgIH0NCn0pOw0KDQovL0hhbmRsZSBtb3VzZSBkb3duIE9SIHRvdWNoIHN0YXJ0DQppZigib250b3VjaHN0YXJ0IiBpbiB3aW5kb3cpDQogICAkKGRvY3VtZW50KS5vbigidG91Y2hzdGFydCIsIHNjcmVlbkNsaWNrKTsNCmVsc2UNCiAgICQoZG9jdW1lbnQpLm9uKCJtb3VzZWRvd24iLCBzY3JlZW5DbGljayk7DQoNCmZ1bmN0aW9uIHNjcmVlbkNsaWNrKCkNCnsNCiAgIGlmKGN1cnJlbnRzdGF0ZSA9PSBzdGF0ZXMuR2FtZVNjcmVlbikNCiAgIHsNCiAgICAgIHBsYXllckp1bXAoKTsNCiAgIH0NCiAgIGVsc2UgaWYoY3VycmVudHN0YXRlID09IHN0YXRlcy5TcGxhc2hTY3JlZW4pDQogICB7DQogICAgICBzdGFydEdhbWUoKTsNCiAgIH0NCn0NCg0KZnVuY3Rpb24gcGxheWVySnVtcCgpDQp7DQogICB2ZWxvY2l0eSA9IGp1bXA7DQogICAvL3BsYXkganVtcCBzb3VuZA0KICAgc291bmRKdW1wLnN0b3AoKTsNCiAgIHNvdW5kSnVtcC5wbGF5KCk7DQp9DQoNCmZ1bmN0aW9uIHNldEJpZ1Njb3JlKGVyYXNlKQ0Kew0KICAgdmFyIGVsZW1zY29yZSA9ICQoIiNiaWdzY29yZSIpOw0KICAgZWxlbXNjb3JlLmVtcHR5KCk7DQogICANCiAgIGlmKGVyYXNlKQ0KICAgICAgcmV0dXJuOw0KICAgDQogICB2YXIgZGlnaXRzID0gc2NvcmUudG9TdHJpbmcoKS5zcGxpdCgnJyk7DQogICBmb3IodmFyIGkgPSAwOyBpIDwgZGlnaXRzLmxlbmd0aDsgaSsrKQ0KICAgICAgZWxlbXNjb3JlLmFwcGVuZCgiPGltZyBzcmM9J2Fzc2V0cy9mb250X2JpZ18iICsgZGlnaXRzW2ldICsgIi5wbmcnIGFsdD0nIiArIGRpZ2l0c1tpXSArICInPiIpOw0KfQ0KDQpmdW5jdGlvbiBzZXRTbWFsbFNjb3JlKCkNCnsNCiAgIHZhciBlbGVtc2NvcmUgPSAkKCIjY3VycmVudHNjb3JlIik7DQogICBlbGVtc2NvcmUuZW1wdHkoKTsNCiAgIA0KICAgdmFyIGRpZ2l0cyA9IHNjb3JlLnRvU3RyaW5nKCkuc3BsaXQoJycpOw0KICAgZm9yKHZhciBpID0gMDsgaSA8IGRpZ2l0cy5sZW5ndGg7IGkrKykNCiAgICAgIGVsZW1zY29yZS5hcHBlbmQoIjxpbWcgc3JjPSdhc3NldHMvZm9udF9zbWFsbF8iICsgZGlnaXRzW2ldICsgIi5wbmcnIGFsdD0nIiArIGRpZ2l0c1tpXSArICInPiIpOw0KfQ0KDQpmdW5jdGlvbiBzZXRIaWdoU2NvcmUoKQ0Kew0KICAgdmFyIGVsZW1zY29yZSA9ICQoIiNoaWdoc2NvcmUiKTsNCiAgIGVsZW1zY29yZS5lbXB0eSgpOw0KICAgDQogICB2YXIgZGlnaXRzID0gaGlnaHNjb3JlLnRvU3RyaW5nKCkuc3BsaXQoJycpOw0KICAgZm9yKHZhciBpID0gMDsgaSA8IGRpZ2l0cy5sZW5ndGg7IGkrKykNCiAgICAgIGVsZW1zY29yZS5hcHBlbmQoIjxpbWcgc3JjPSdhc3NldHMvZm9udF9zbWFsbF8iICsgZGlnaXRzW2ldICsgIi5wbmcnIGFsdD0nIiArIGRpZ2l0c1tpXSArICInPiIpOw0KfQ0KDQpmdW5jdGlvbiBzZXRNZWRhbCgpDQp7DQogICB2YXIgZWxlbW1lZGFsID0gJCgiI21lZGFsIik7DQogICBlbGVtbWVkYWwuZW1wdHkoKTsNCiAgIA0KICAgaWYoc2NvcmUgPCAxMCkNCiAgICAgIC8vc2lnbmFsIHRoYXQgbm8gbWVkYWwgaGFzIGJlZW4gd29uDQogICAgICByZXR1cm4gZmFsc2U7DQogICANCiAgIGlmKHNjb3JlID49IDEwKQ0KICAgICAgbWVkYWwgPSAiYnJvbnplIjsNCiAgIGlmKHNjb3JlID49IDIwKQ0KICAgICAgbWVkYWwgPSAic2lsdmVyIjsNCiAgIGlmKHNjb3JlID49IDMwKQ0KICAgICAgbWVkYWwgPSAiZ29sZCI7DQogICBpZihzY29yZSA+PSA0MCkNCiAgICAgIG1lZGFsID0gInBsYXRpbnVtIjsNCiAgIA0KICAgZWxlbW1lZGFsLmFwcGVuZCgnPGltZyBzcmM9ImFzc2V0cy9tZWRhbF8nICsgbWVkYWwgKycucG5nIiBhbHQ9IicgKyBtZWRhbCArJyI+Jyk7DQogICANCiAgIC8vc2lnbmFsIHRoYXQgYSBtZWRhbCBoYXMgYmVlbiB3b24NCiAgIHJldHVybiB0cnVlOw0KfQ0KDQpmdW5jdGlvbiBwbGF5ZXJEZWFkKCkNCnsNCiAgIC8vc3RvcCBhbmltYXRpbmcgZXZlcnl0aGluZyENCiAgICQoIi5hbmltYXRlZCIpLmNzcygnYW5pbWF0aW9uLXBsYXktc3RhdGUnLCAncGF1c2VkJyk7DQogICAkKCIuYW5pbWF0ZWQiKS5jc3MoJy13ZWJraXQtYW5pbWF0aW9uLXBsYXktc3RhdGUnLCAncGF1c2VkJyk7DQogICANCiAgIC8vZHJvcCB0aGUgYmlyZCB0byB0aGUgZmxvb3INCiAgIHZhciBwbGF5ZXJib3R0b20gPSAkKCIjcGxheWVyIikucG9zaXRpb24oKS50b3AgKyAkKCIjcGxheWVyIikud2lkdGgoKTsgLy93ZSB1c2Ugd2lkdGggYmVjYXVzZSBoZSdsbCBiZSByb3RhdGVkIDkwIGRlZw0KICAgdmFyIGZsb29yID0gZmx5QXJlYTsNCiAgIHZhciBtb3ZleSA9IE1hdGgubWF4KDAsIGZsb29yIC0gcGxheWVyYm90dG9tKTsNCiAgICQoIiNwbGF5ZXIiKS50cmFuc2l0aW9uKHsgeTogbW92ZXkgKyAncHgnLCByb3RhdGU6IDkwfSwgMTAwMCwgJ2Vhc2VJbk91dEN1YmljJyk7DQogICANCiAgIC8vaXQncyB0aW1lIHRvIGNoYW5nZSBzdGF0ZXMuIGFzIG9mIG5vdyB3ZSdyZSBjb25zaWRlcmVkIFNjb3JlU2NyZWVuIHRvIGRpc2FibGUgbGVmdCBjbGljay9mbHlpbmcNCiAgIGN1cnJlbnRzdGF0ZSA9IHN0YXRlcy5TY29yZVNjcmVlbjsNCg0KICAgLy9kZXN0cm95IG91ciBnYW1lbG9vcHMNCiAgIGNsZWFySW50ZXJ2YWwobG9vcEdhbWVsb29wKTsNCiAgIGNsZWFySW50ZXJ2YWwobG9vcFBpcGVsb29wKTsNCiAgIGxvb3BHYW1lbG9vcCA9IG51bGw7DQogICBsb29wUGlwZWxvb3AgPSBudWxsOw0KDQogICAvL21vYmlsZSBicm93c2VycyBkb24ndCBzdXBwb3J0IGJ1enogYmluZE9uY2UgZXZlbnQNCiAgIGlmKGlzSW5jb21wYXRpYmxlLmFueSgpKQ0KICAgew0KICAgICAgLy9za2lwIHJpZ2h0IHRvIHNob3dpbmcgc2NvcmUNCiAgICAgIHNob3dTY29yZSgpOw0KICAgfQ0KICAgZWxzZQ0KICAgew0KICAgICAgLy9wbGF5IHRoZSBoaXQgc291bmQgKHRoZW4gdGhlIGRlYWQgc291bmQpIGFuZCB0aGVuIHNob3cgc2NvcmUNCiAgICAgIHNvdW5kSGl0LnBsYXkoKS5iaW5kT25jZSgiZW5kZWQiLCBmdW5jdGlvbigpIHsNCiAgICAgICAgIHNvdW5kRGllLnBsYXkoKS5iaW5kT25jZSgiZW5kZWQiLCBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgIHNob3dTY29yZSgpOw0KICAgICAgICAgfSk7DQogICAgICB9KTsNCiAgIH0NCn0NCg0KZnVuY3Rpb24gc2hvd1Njb3JlKCkNCnsNCiAgIC8vdW5oaWRlIHVzDQogICAkKCIjc2NvcmVib2FyZCIpLmNzcygiZGlzcGxheSIsICJibG9jayIpOw0KICAgDQogICAvL3JlbW92ZSB0aGUgYmlnIHNjb3JlDQogICBzZXRCaWdTY29yZSh0cnVlKTsNCiAgIA0KICAgLy9oYXZlIHRoZXkgYmVhdGVuIHRoZWlyIGhpZ2ggc2NvcmU/DQogICBpZihzY29yZSA+IGhpZ2hzY29yZSkNCiAgIHsNCiAgICAgIC8veWVhaCENCiAgICAgIGhpZ2hzY29yZSA9IHNjb3JlOw0KICAgICAgLy9zYXZlIGl0IQ0KICAgICAgc2V0Q29va2llKCJoaWdoc2NvcmUiLCBoaWdoc2NvcmUsIDk5OSk7DQogICB9DQogICANCiAgIC8vdXBkYXRlIHRoZSBzY29yZWJvYXJkDQogICBzZXRTbWFsbFNjb3JlKCk7DQogICBzZXRIaWdoU2NvcmUoKTsNCiAgIHZhciB3b25tZWRhbCA9IHNldE1lZGFsKCk7DQogICANCiAgIC8vU1dPT1NIIQ0KICAgc291bmRTd29vc2guc3RvcCgpOw0KICAgc291bmRTd29vc2gucGxheSgpOw0KICAgDQogICAvL3Nob3cgdGhlIHNjb3JlYm9hcmQNCiAgICQoIiNzY29yZWJvYXJkIikuY3NzKHsgeTogJzQwcHgnLCBvcGFjaXR5OiAwIH0pOyAvL21vdmUgaXQgZG93biBzbyB3ZSBjYW4gc2xpZGUgaXQgdXANCiAgICQoIiNyZXBsYXkiKS5jc3MoeyB5OiAnNDBweCcsIG9wYWNpdHk6IDAgfSk7DQogICAkKCIjc2NvcmVib2FyZCIpLnRyYW5zaXRpb24oeyB5OiAnMHB4Jywgb3BhY2l0eTogMX0sIDYwMCwgJ2Vhc2UnLCBmdW5jdGlvbigpIHsNCiAgICAgIC8vV2hlbiB0aGUgYW5pbWF0aW9uIGlzIGRvbmUsIGFuaW1hdGUgaW4gdGhlIHJlcGxheSBidXR0b24gYW5kIFNXT09TSCENCiAgICAgIHNvdW5kU3dvb3NoLnN0b3AoKTsNCiAgICAgIHNvdW5kU3dvb3NoLnBsYXkoKTsNCiAgICAgICQoIiNyZXBsYXkiKS50cmFuc2l0aW9uKHsgeTogJzBweCcsIG9wYWNpdHk6IDF9LCA2MDAsICdlYXNlJyk7DQogICAgICANCiAgICAgIC8vYWxzbyBhbmltYXRlIGluIHRoZSBNRURBTCEgV09PIQ0KICAgICAgaWYod29ubWVkYWwpDQogICAgICB7DQogICAgICAgICAkKCIjbWVkYWwiKS5jc3MoeyBzY2FsZTogMiwgb3BhY2l0eTogMCB9KTsNCiAgICAgICAgICQoIiNtZWRhbCIpLnRyYW5zaXRpb24oeyBvcGFjaXR5OiAxLCBzY2FsZTogMSB9LCAxMjAwLCAnZWFzZScpOw0KICAgICAgfQ0KICAgfSk7DQogICANCiAgIC8vbWFrZSB0aGUgcmVwbGF5IGJ1dHRvbiBjbGlja2FibGUNCiAgIHJlcGxheWNsaWNrYWJsZSA9IHRydWU7DQoNCiAgIC8vIEdyYXNzUjAwdDogYWRkZWQgZm9yIGNvbW11bmljYXRpbmcgdGhlIHNjb3JlLg0KICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2dyYXNzUm9vdC5nYW1lRW5kZWQnLCB7ZGV0YWlsOiB7IHNjb3JlOiBzY29yZSB9IH0pKTsNCn0NCg0KJCgiI3JlcGxheSIpLmNsaWNrKGZ1bmN0aW9uKCkgew0KICAgLy9tYWtlIHN1cmUgd2UgY2FuIG9ubHkgY2xpY2sgb25jZQ0KICAgaWYoIXJlcGxheWNsaWNrYWJsZSkNCiAgICAgIHJldHVybjsNCiAgIGVsc2UNCiAgICAgIHJlcGxheWNsaWNrYWJsZSA9IGZhbHNlOw0KICAgLy9TV09PU0ghDQogICBzb3VuZFN3b29zaC5zdG9wKCk7DQogICBzb3VuZFN3b29zaC5wbGF5KCk7DQogICANCiAgIC8vZmFkZSBvdXQgdGhlIHNjb3JlYm9hcmQNCiAgICQoIiNzY29yZWJvYXJkIikudHJhbnNpdGlvbih7IHk6ICctNDBweCcsIG9wYWNpdHk6IDB9LCAxMDAwLCAnZWFzZScsIGZ1bmN0aW9uKCkgew0KICAgICAgLy93aGVuIHRoYXQncyBkb25lLCBkaXNwbGF5IHVzIGJhY2sgdG8gbm90aGluZw0KICAgICAgJCgiI3Njb3JlYm9hcmQiKS5jc3MoImRpc3BsYXkiLCAibm9uZSIpOw0KICAgICAgDQogICAgICAvL3N0YXJ0IHRoZSBnYW1lIG92ZXIhDQogICAgICBzaG93U3BsYXNoKCk7DQogICB9KTsNCn0pOw0KDQpmdW5jdGlvbiBwbGF5ZXJTY29yZSgpDQp7DQogICBzY29yZSArPSAxOw0KICAgLy9wbGF5IHNjb3JlIHNvdW5kDQogICBzb3VuZFNjb3JlLnN0b3AoKTsNCiAgIHNvdW5kU2NvcmUucGxheSgpOw0KICAgc2V0QmlnU2NvcmUoKTsNCn0NCg0KZnVuY3Rpb24gdXBkYXRlUGlwZXMoKQ0Kew0KICAgLy9EbyBhbnkgcGlwZXMgbmVlZCByZW1vdmFsPw0KICAgJCgiLnBpcGUiKS5maWx0ZXIoZnVuY3Rpb24oKSB7IHJldHVybiAkKHRoaXMpLnBvc2l0aW9uKCkubGVmdCA8PSAtMTAwOyB9KS5yZW1vdmUoKQ0KICAgDQogICAvL2FkZCBhIG5ldyBwaXBlICh0b3AgaGVpZ2h0ICsgYm90dG9tIGhlaWdodCAgKyBwaXBlaGVpZ2h0ID09IGZseUFyZWEpIGFuZCBwdXQgaXQgaW4gb3VyIHRyYWNrZXINCiAgIHZhciBwYWRkaW5nID0gODA7DQogICB2YXIgY29uc3RyYWludCA9IGZseUFyZWEgLSBwaXBlaGVpZ2h0IC0gKHBhZGRpbmcgKiAyKTsgLy9kb3VibGUgcGFkZGluZyAoZm9yIHRvcCBhbmQgYm90dG9tKQ0KICAgdmFyIHRvcGhlaWdodCA9IE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkqY29uc3RyYWludCkgKyBwYWRkaW5nKTsgLy9hZGQgbG93ZXIgcGFkZGluZw0KICAgdmFyIGJvdHRvbWhlaWdodCA9IChmbHlBcmVhIC0gcGlwZWhlaWdodCkgLSB0b3BoZWlnaHQ7DQogICB2YXIgbmV3cGlwZSA9ICQoJzxkaXYgY2xhc3M9InBpcGUgYW5pbWF0ZWQiPjxkaXYgY2xhc3M9InBpcGVfdXBwZXIiIHN0eWxlPSJoZWlnaHQ6ICcgKyB0b3BoZWlnaHQgKyAncHg7Ij48L2Rpdj48ZGl2IGNsYXNzPSJwaXBlX2xvd2VyIiBzdHlsZT0iaGVpZ2h0OiAnICsgYm90dG9taGVpZ2h0ICsgJ3B4OyI+PC9kaXY+PC9kaXY+Jyk7DQogICAkKCIjZmx5YXJlYSIpLmFwcGVuZChuZXdwaXBlKTsNCiAgIHBpcGVzLnB1c2gobmV3cGlwZSk7DQp9DQoNCnZhciBpc0luY29tcGF0aWJsZSA9IHsNCiAgIEFuZHJvaWQ6IGZ1bmN0aW9uKCkgew0KICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSk7DQogICB9LA0KICAgQmxhY2tCZXJyeTogZnVuY3Rpb24oKSB7DQogICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQmxhY2tCZXJyeS9pKTsNCiAgIH0sDQogICBpT1M6IGZ1bmN0aW9uKCkgew0KICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSk7DQogICB9LA0KICAgT3BlcmE6IGZ1bmN0aW9uKCkgew0KICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL09wZXJhIE1pbmkvaSk7DQogICB9LA0KICAgU2FmYXJpOiBmdW5jdGlvbigpIHsNCiAgIHJldHVybiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvT1MgWC4qU2FmYXJpLykgJiYgISBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9DaHJvbWUvKSk7DQogICB9LA0KICAgV2luZG93czogZnVuY3Rpb24oKSB7DQogICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvSUVNb2JpbGUvaSk7DQogICB9LA0KICAgYW55OiBmdW5jdGlvbigpIHsNCiAgIHJldHVybiAoaXNJbmNvbXBhdGlibGUuQW5kcm9pZCgpIHx8IGlzSW5jb21wYXRpYmxlLkJsYWNrQmVycnkoKSB8fCBpc0luY29tcGF0aWJsZS5pT1MoKSB8fCBpc0luY29tcGF0aWJsZS5PcGVyYSgpIHx8IGlzSW5jb21wYXRpYmxlLlNhZmFyaSgpIHx8IGlzSW5jb21wYXRpYmxlLldpbmRvd3MoKSk7DQogICB9DQp9Ow=="

{ "type": 12, "id": "6jxdd47uAaFABQkqL4R59Yq8X1os8QuLfKFwwNFfe4De", "fee": 14200000, "feeAssetId": null, "timestamp": 1580768309343, "version": 1, "sender": "3MsS3oDXxqDJ2vmzcvBQeQLkThmMmuojN74", "senderPublicKey": "4QDBXGfVauJPSWh9E6NVEz4Nu6guZt5b5pNrqdoSomp1", "proofs": [ "3twGYn2xifntBku1tg46JqfqTNgNkzS5FUzA9oZwZEeK3QvyecWYvRUm8aTMRKqP1891ZArP64c8i8vkyXtF8fUt" ], "data": [ { "key": "main.js_0", "type": "binary", "value": "base64:LyoNCiAgIENvcHlyaWdodCAyMDE0IE5lYmV6IEJyaWVma2FuaQ0KICAgZmxvcHB5YmlyZCAtIG1haW4uanMNCg0KICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQogICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQogICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCg0KICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KDQogICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQogICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQogICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQogICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCiovDQoNCnZhciBkZWJ1Z21vZGUgPSBmYWxzZTsNCg0KdmFyIHN0YXRlcyA9IE9iamVjdC5mcmVlemUoew0KICAgU3BsYXNoU2NyZWVuOiAwLA0KICAgR2FtZVNjcmVlbjogMSwNCiAgIFNjb3JlU2NyZWVuOiAyDQp9KTsNCg0KdmFyIGN1cnJlbnRzdGF0ZTsNCg0KdmFyIGdyYXZpdHkgPSAwLjI1Ow0KdmFyIHZlbG9jaXR5ID0gMDsNCnZhciBwb3NpdGlvbiA9IDE4MDsNCnZhciByb3RhdGlvbiA9IDA7DQp2YXIganVtcCA9IC00LjY7DQp2YXIgZmx5QXJlYSA9ICQoIiNmbHlhcmVhIikuaGVpZ2h0KCk7DQoNCnZhciBzY29yZSA9IDA7DQp2YXIgaGlnaHNjb3JlID0gMDsNCg0KdmFyIHBpcGVoZWlnaHQgPSA5MDsNCnZhciBwaXBld2lkdGggPSA1MjsNCnZhciBwaXBlcyA9IG5ldyBBcnJheSgpOw0KDQp2YXIgcmVwbGF5Y2xpY2thYmxlID0gZmFsc2U7DQoNCi8vc291bmRzDQp2YXIgdm9sdW1lID0gMzA7DQp2YXIgc291bmRKdW1wID0gbmV3IGJ1enouc291bmQoImFzc2V0cy9zb3VuZHMvc2Z4X3dpbmcub2dnIik7DQp2YXIgc291bmRTY29yZSA9IG5ldyBidXp6LnNvdW5kKCJhc3NldHMvc291bmRzL3NmeF9wb2ludC5vZ2ciKTsNCnZhciBzb3VuZEhpdCA9IG5ldyBidXp6LnNvdW5kKCJhc3NldHMvc291bmRzL3NmeF9oaXQub2dnIik7DQp2YXIgc291bmREaWUgPSBuZXcgYnV6ei5zb3VuZCgiYXNzZXRzL3NvdW5kcy9zZnhfZGllLm9nZyIpOw0KdmFyIHNvdW5kU3dvb3NoID0gbmV3IGJ1enouc291bmQoImFzc2V0cy9zb3VuZHMvc2Z4X3N3b29zaGluZy5vZ2ciKTsNCmJ1enouYWxsKCkuc2V0Vm9sdW1lKHZvbHVtZSk7DQoNCi8vbG9vcHMNCnZhciBsb29wR2FtZWxvb3A7DQp2YXIgbG9vcFBpcGVsb29wOw0KDQokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsNCiAgIGlmKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggPT0gIj9kZWJ1ZyIpDQogICAgICBkZWJ1Z21vZGUgPSB0cnVlOw0KICAgaWYod2luZG93LmxvY2F0aW9uLnNlYXJjaCA9PSAiP2Vhc3kiKQ0KICAgICAgcGlwZWhlaWdodCA9IDIwMDsNCiAgIA0KICAgLy9nZXQgdGhlIGhpZ2hzY29yZQ0KICAgdmFyIHNhdmVkc2NvcmUgPSBnZXRDb29raWUoImhpZ2hzY29yZSIpOw0KICAgaWYoc2F2ZWRzY29yZSAhPSAiIikNCiAgICAgIGhpZ2hzY29yZSA9IHBhcnNlSW50KHNhdmVkc2NvcmUpOw0KICAgDQogICAvL3N0YXJ0IHdpdGggdGhlIHNwbGFzaCBzY3JlZW4NCiAgIHNob3dTcGxhc2goKTsNCn0pOw0KDQpmdW5jdGlvbiBnZXRDb29raWUoY25hbWUpDQp7DQogICB2YXIgbmFtZSA9IGNuYW1lICsgIj0iOw0KICAgdmFyIGNhID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7DQogICBmb3IodmFyIGk9MDsgaTxjYS5sZW5ndGg7IGkrKykgDQogICB7DQogICAgICB2YXIgYyA9IGNhW2ldLnRyaW0oKTsNCiAgICAgIGlmIChjLmluZGV4T2YobmFtZSk9PTApIHJldHVybiBjLnN1YnN0cmluZyhuYW1lLmxlbmd0aCxjLmxlbmd0aCk7DQogICB9DQogICByZXR1cm4gIiI7DQp9DQoNCmZ1bmN0aW9uIHNldENvb2tpZShjbmFtZSxjdmFsdWUsZXhkYXlzKQ0Kew0KICAgdmFyIGQgPSBuZXcgRGF0ZSgpOw0KICAgZC5zZXRUaW1lKGQuZ2V0VGltZSgpKyhleGRheXMqMjQqNjAqNjAqMTAwMCkpOw0KICAgdmFyIGV4cGlyZXMgPSAiZXhwaXJlcz0iK2QudG9HTVRTdHJpbmcoKTsNCiAgIGRvY3VtZW50LmNvb2tpZSA9IGNuYW1lICsgIj0iICsgY3ZhbHVlICsgIjsgIiArIGV4cGlyZXM7DQp9DQoNCmZ1bmN0aW9uIHNob3dTcGxhc2goKQ0Kew0KICAgY3VycmVudHN0YXRlID0gc3RhdGVzLlNwbGFzaFNjcmVlbjsNCiAgIA0KICAgLy9zZXQgdGhlIGRlZmF1bHRzIChhZ2FpbikNCiAgIHZlbG9jaXR5ID0gMDsNCiAgIHBvc2l0aW9uID0gMTgwOw0KICAgcm90YXRpb24gPSAwOw0KICAgc2NvcmUgPSAwOw0KICAgDQogICAvL3VwZGF0ZSB0aGUgcGxheWVyIGluIHByZXBhcmF0aW9uIGZvciB0aGUgbmV4dCBnYW1lDQogICAkKCIjcGxheWVyIikuY3NzKHsgeTogMCwgeDogMH0pOw0KICAgdXBkYXRlUGxheWVyKCQoIiNwbGF5ZXIiKSk7DQogICANCiAgIHNvdW5kU3dvb3NoLnN0b3AoKTsNCiAgIHNvdW5kU3dvb3NoLnBsYXkoKTsNCiAgIA0KICAgLy9jbGVhciBvdXQgYWxsIHRoZSBwaXBlcyBpZiB0aGVyZSBhcmUgYW55DQogICAkKCIucGlwZSIpLnJlbW92ZSgpOw0KICAgcGlwZXMgPSBuZXcgQXJyYXkoKTsNCiAgIA0KICAgLy9tYWtlIGV2ZXJ5dGhpbmcgYW5pbWF0ZWQgYWdhaW4NCiAgICQoIi5hbmltYXRlZCIpLmNzcygnYW5pbWF0aW9uLXBsYXktc3RhdGUnLCAncnVubmluZycpOw0KICAgJCgiLmFuaW1hdGVkIikuY3NzKCctd2Via2l0LWFuaW1hdGlvbi1wbGF5LXN0YXRlJywgJ3J1bm5pbmcnKTsNCiAgIA0KICAgLy9mYWRlIGluIHRoZSBzcGxhc2gNCiAgICQoIiNzcGxhc2giKS50cmFuc2l0aW9uKHsgb3BhY2l0eTogMSB9LCAyMDAwLCAnZWFzZScpOw0KfQ0KDQpmdW5jdGlvbiBzdGFydEdhbWUoKQ0Kew0KICAgY3VycmVudHN0YXRlID0gc3RhdGVzLkdhbWVTY3JlZW47DQogICANCiAgIC8vZmFkZSBvdXQgdGhlIHNwbGFzaA0KICAgJCgiI3NwbGFzaCIpLnN0b3AoKTsNCiAgICQoIiNzcGxhc2giKS50cmFuc2l0aW9uKHsgb3BhY2l0eTogMCB9LCA1MDAsICdlYXNlJyk7DQogICANCiAgIC8vdXBkYXRlIHRoZSBiaWcgc2NvcmUNCiAgIHNldEJpZ1Njb3JlKCk7DQogICANCiAgIC8vZGVidWcgbW9kZT8NCiAgIGlmKGRlYnVnbW9kZSkNCiAgIHsNCiAgICAgIC8vc2hvdyB0aGUgYm91bmRpbmcgYm94ZXMNCiAgICAgICQoIi5ib3VuZGluZ2JveCIpLnNob3coKTsNCiAgIH0NCg0KICAgLy9zdGFydCB1cCBvdXIgbG9vcHMNCiAgIHZhciB1cGRhdGVyYXRlID0gMTAwMC4wIC8gNjAuMCA7IC8vNjAgdGltZXMgYSBzZWNvbmQNCiAgIGxvb3BHYW1lbG9vcCA9IHNldEludGVydmFsKGdhbWVsb29wLCB1cGRhdGVyYXRlKTsNCiAgIGxvb3BQaXBlbG9vcCA9IHNldEludGVydmFsKHVwZGF0ZVBpcGVzLCAxNDAwKTsNCiAgIA0KICAgLy9qdW1wIGZyb20gdGhlIHN0YXJ0IQ0KICAgcGxheWVySnVtcCgpOw0KfQ0KDQpmdW5jdGlvbiB1cGRhdGVQbGF5ZXIocGxheWVyKQ0Kew0KICAgLy9yb3RhdGlvbg0KICAgcm90YXRpb24gPSBNYXRoLm1pbigodmVsb2NpdHkgLyAxMCkgKiA5MCwgOTApOw0KICAgDQogICAvL2FwcGx5IHJvdGF0aW9uIGFuZCBwb3NpdGlvbg0KICAgJChwbGF5ZXIpLmNzcyh7IHJvdGF0ZTogcm90YXRpb24sIHRvcDogcG9zaXRpb24gfSk7DQp9DQoNCmZ1bmN0aW9uIGdhbWVsb29wKCkgew0KICAgdmFyIHBsYXllciA9ICQoIiNwbGF5ZXIiKTsNCiAgIA0KICAgLy91cGRhdGUgdGhlIHBsYXllciBzcGVlZC9wb3NpdGlvbg0KICAgdmVsb2NpdHkgKz0gZ3Jhdml0eTsNCiAgIHBvc2l0aW9uICs9IHZlbG9jaXR5Ow0KICAgDQogICAvL3VwZGF0ZSB0aGUgcGxheWVyDQogICB1cGRhdGVQbGF5ZXIocGxheWVyKTsNCiAgIA0KICAgLy9jcmVhdGUgdGhlIGJvdW5kaW5nIGJveA0KICAgdmFyIGJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbGF5ZXInKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsNCiAgIHZhciBvcmlnd2lkdGggPSAzNC4wOw0KICAgdmFyIG9yaWdoZWlnaHQgPSAyNC4wOw0KICAgDQogICB2YXIgYm94d2lkdGggPSBvcmlnd2lkdGggLSAoTWF0aC5zaW4oTWF0aC5hYnMocm90YXRpb24pIC8gOTApICogOCk7DQogICB2YXIgYm94aGVpZ2h0ID0gKG9yaWdoZWlnaHQgKyBib3guaGVpZ2h0KSAvIDI7DQogICB2YXIgYm94bGVmdCA9ICgoYm94LndpZHRoIC0gYm94d2lkdGgpIC8gMikgKyBib3gubGVmdDsNCiAgIHZhciBib3h0b3AgPSAoKGJveC5oZWlnaHQgLSBib3hoZWlnaHQpIC8gMikgKyBib3gudG9wOw0KICAgdmFyIGJveHJpZ2h0ID0gYm94bGVmdCArIGJveHdpZHRoOw0KICAgdmFyIGJveGJvdHRvbSA9IGJveHRvcCArIGJveGhlaWdodDsNCiAgIA0KICAgLy9pZiB3ZSdyZSBpbiBkZWJ1ZyBtb2RlLCBkcmF3IHRoZSBib3VuZGluZyBib3gNCiAgIGlmKGRlYnVnbW9kZSkNCiAgIHsNCiAgICAgIHZhciBib3VuZGluZ2JveCA9ICQoIiNwbGF5ZXJib3giKTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygnbGVmdCcsIGJveGxlZnQpOw0KICAgICAgYm91bmRpbmdib3guY3NzKCd0b3AnLCBib3h0b3ApOw0KICAgICAgYm91bmRpbmdib3guY3NzKCdoZWlnaHQnLCBib3hoZWlnaHQpOw0KICAgICAgYm91bmRpbmdib3guY3NzKCd3aWR0aCcsIGJveHdpZHRoKTsNCiAgIH0NCiAgIA0KICAgLy9kaWQgd2UgaGl0IHRoZSBncm91bmQ/DQogICBpZihib3guYm90dG9tID49ICQoIiNsYW5kIikub2Zmc2V0KCkudG9wKQ0KICAgew0KICAgICAgcGxheWVyRGVhZCgpOw0KICAgICAgcmV0dXJuOw0KICAgfQ0KICAgDQogICAvL2hhdmUgdGhleSB0cmllZCB0byBlc2NhcGUgdGhyb3VnaCB0aGUgY2VpbGluZz8gOm8NCiAgIHZhciBjZWlsaW5nID0gJCgiI2NlaWxpbmciKTsNCiAgIGlmKGJveHRvcCA8PSAoY2VpbGluZy5vZmZzZXQoKS50b3AgKyBjZWlsaW5nLmhlaWdodCgpKSkNCiAgICAgIHBvc2l0aW9uID0gMDsNCiAgIA0KICAgLy93ZSBjYW4ndCBnbyBhbnkgZnVydGhlciB3aXRob3V0IGEgcGlwZQ0KICAgaWYocGlwZXNbMF0gPT0gbnVsbCkNCiAgICAgIHJldHVybjsNCiAgIA0KICAgLy9kZXRlcm1pbmUgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgbmV4dCBwaXBlcyBpbm5lciBhcmVhDQogICB2YXIgbmV4dHBpcGUgPSBwaXBlc1swXTsNCiAgIHZhciBuZXh0cGlwZXVwcGVyID0gbmV4dHBpcGUuY2hpbGRyZW4oIi5waXBlX3VwcGVyIik7DQogICANCiAgIHZhciBwaXBldG9wID0gbmV4dHBpcGV1cHBlci5vZmZzZXQoKS50b3AgKyBuZXh0cGlwZXVwcGVyLmhlaWdodCgpOw0KICAgdmFyIHBpcGVsZWZ0ID0gbmV4dHBpcGV1cHBlci5vZmZzZXQoKS5sZWZ0IC0gMjsgLy8gZm9yIHNvbWUgcmVhc29uIGl0IHN0YXJ0cyBhdCB0aGUgaW5uZXIgcGlwZXMgb2Zmc2V0LCBub3QgdGhlIG91dGVyIHBpcGVzLg0KICAgdmFyIHBpcGVyaWdodCA9IHBpcGVsZWZ0ICsgcGlwZXdpZHRoOw0KICAgdmFyIHBpcGVib3R0b20gPSBwaXBldG9wICsgcGlwZWhlaWdodDsNCiAgIA0KICAgaWYoZGVidWdtb2RlKQ0KICAgew0KICAgICAgdmFyIGJvdW5kaW5nYm94ID0gJCgiI3BpcGVib3giKTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygnbGVmdCcsIHBpcGVsZWZ0KTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygndG9wJywgcGlwZXRvcCk7DQogICAgICBib3VuZGluZ2JveC5jc3MoJ2hlaWdodCcsIHBpcGVoZWlnaHQpOw0KICAgICAgYm91bmRpbmdib3guY3NzKCd3aWR0aCcsIHBpcGV3aWR0aCk7DQogICB9DQogICANCiAgIC8vaGF2ZSB3ZSBnb3R0ZW4gaW5zaWRlIHRoZSBwaXBlIHlldD8NCiAgIGlmKGJveHJpZ2h0ID4gcGlwZWxlZnQpDQogICB7DQogICAgICAvL3dlJ3JlIHdpdGhpbiB0aGUgcGlwZSwgaGF2ZSB3ZSBwYXNzZWQgYmV0d2VlbiB1cHBlciBhbmQgbG93ZXIgcGlwZXM/DQogICAgICBpZihib3h0b3AgPiBwaXBldG9wICYmIGJveGJvdHRvbSA8IHBpcGVib3R0b20pDQogICAgICB7DQogICAgICAgICAvL3llYWghIHdlJ3JlIHdpdGhpbiBib3VuZHMNCiAgICAgICAgIA0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICAgLy9ubyEgd2UgdG91Y2hlZCB0aGUgcGlwZQ0KICAgICAgICAgcGxheWVyRGVhZCgpOw0KICAgICAgICAgcmV0dXJuOw0KICAgICAgfQ0KICAgfQ0KICAgDQogICANCiAgIC8vaGF2ZSB3ZSBwYXNzZWQgdGhlIGltbWluZW50IGRhbmdlcj8NCiAgIGlmKGJveGxlZnQgPiBwaXBlcmlnaHQpDQogICB7DQogICAgICAvL3llcywgcmVtb3ZlIGl0DQogICAgICBwaXBlcy5zcGxpY2UoMCwgMSk7DQogICAgICANCiAgICAgIC8vYW5kIHNjb3JlIGEgcG9pbnQNCiAgICAgIHBsYXllclNjb3JlKCk7DQogICB9DQp9DQoNCi8vSGFuZGxlIHNwYWNlIGJhcg0KJChkb2N1bWVudCkua2V5ZG93bihmdW5jdGlvbihlKXsNCiAgIC8vc3BhY2UgYmFyIQ0KICAgaWYoZS5rZXlDb2RlID09IDMyKQ0KICAgew0KICAgICAgLy9pbiBTY29yZVNjcmVlbiwgaGl0dGluZyBzcGFjZSBzaG91bGQgY2xpY2sgdGhlICJyZXBsYXkiIGJ1dHRvbi4gZWxzZSBpdCdzIGp1c3QgYSByZWd1bGFyIHNwYWNlYmFyIGhpdA0KICAgICAgaWYoY3VycmVudHN0YXRlID09IHN0YXRlcy5TY29yZVNjcmVlbikNCiAgICAgICAgICQoIiNyZXBsYXkiKS5jbGljaygpOw0KICAgICAgZWxzZQ0KICAgICAgICAgc2NyZWVuQ2xpY2soKTsNCiAgIH0NCn0pOw0KDQovL0hhbmRsZSBtb3VzZSBkb3duIE9SIHRvdWNoIHN0YXJ0DQppZigib250b3VjaHN0YXJ0IiBpbiB3aW5kb3cpDQogICAkKGRvY3VtZW50KS5vbigidG91Y2hzdGFydCIsIHNjcmVlbkNsaWNrKTsNCmVsc2UNCiAgICQoZG9jdW1lbnQpLm9uKCJtb3VzZWRvd24iLCBzY3JlZW5DbGljayk7DQoNCmZ1bmN0aW9uIHNjcmVlbkNsaWNrKCkNCnsNCiAgIGlmKGN1cnJlbnRzdGF0ZSA9PSBzdGF0ZXMuR2FtZVNjcmVlbikNCiAgIHsNCiAgICAgIHBsYXllckp1bXAoKTsNCiAgIH0NCiAgIGVsc2UgaWYoY3VycmVudHN0YXRlID09IHN0YXRlcy5TcGxhc2hTY3JlZW4pDQogICB7DQogICAgICBzdGFydEdhbWUoKTsNCiAgIH0NCn0NCg0KZnVuY3Rpb24gcGxheWVySnVtcCgpDQp7DQogICB2ZWxvY2l0eSA9IGp1bXA7DQogICAvL3BsYXkganVtcCBzb3VuZA0KICAgc291bmRKdW1wLnN0b3AoKTsNCiAgIHNvdW5kSnVtcC5wbGF5KCk7DQp9DQoNCmZ1bmN0aW9uIHNldEJpZ1Njb3JlKGVyYXNlKQ0Kew0KICAgdmFyIGVsZW1zY29yZSA9ICQoIiNiaWdzY29yZSIpOw0KICAgZWxlbXNjb3JlLmVtcHR5KCk7DQogICANCiAgIGlmKGVyYXNlKQ0KICAgICAgcmV0dXJuOw0KICAgDQogICB2YXIgZGlnaXRzID0gc2NvcmUudG9TdHJpbmcoKS5zcGxpdCgnJyk7DQogICBmb3IodmFyIGkgPSAwOyBpIDwgZGlnaXRzLmxlbmd0aDsgaSsrKQ0KICAgICAgZWxlbXNjb3JlLmFwcGVuZCgiPGltZyBzcmM9J2Fzc2V0cy9mb250X2JpZ18iICsgZGlnaXRzW2ldICsgIi5wbmcnIGFsdD0nIiArIGRpZ2l0c1tpXSArICInPiIpOw0KfQ0KDQpmdW5jdGlvbiBzZXRTbWFsbFNjb3JlKCkNCnsNCiAgIHZhciBlbGVtc2NvcmUgPSAkKCIjY3VycmVudHNjb3JlIik7DQogICBlbGVtc2NvcmUuZW1wdHkoKTsNCiAgIA0KICAgdmFyIGRpZ2l0cyA9IHNjb3JlLnRvU3RyaW5nKCkuc3BsaXQoJycpOw0KICAgZm9yKHZhciBpID0gMDsgaSA8IGRpZ2l0cy5sZW5ndGg7IGkrKykNCiAgICAgIGVsZW1zY29yZS5hcHBlbmQoIjxpbWcgc3JjPSdhc3NldHMvZm9udF9zbWFsbF8iICsgZGlnaXRzW2ldICsgIi5wbmcnIGFsdD0nIiArIGRpZ2l0c1tpXSArICInPiIpOw0KfQ0KDQpmdW5jdGlvbiBzZXRIaWdoU2NvcmUoKQ0Kew0KICAgdmFyIGVsZW1zY29yZSA9ICQoIiNoaWdoc2NvcmUiKTsNCiAgIGVsZW1zY29yZS5lbXB0eSgpOw0KICAgDQogICB2YXIgZGlnaXRzID0gaGlnaHNjb3JlLnRvU3RyaW5nKCkuc3BsaXQoJycpOw0KICAgZm9yKHZhciBpID0gMDsgaSA8IGRpZ2l0cy5sZW5ndGg7IGkrKykNCiAgICAgIGVsZW1zY29yZS5hcHBlbmQoIjxpbWcgc3JjPSdhc3NldHMvZm9udF9zbWFsbF8iICsgZGlnaXRzW2ldICsgIi5wbmcnIGFsdD0nIiArIGRpZ2l0c1tpXSArICInPiIpOw0KfQ0KDQpmdW5jdGlvbiBzZXRNZWRhbCgpDQp7DQogICB2YXIgZWxlbW1lZGFsID0gJCgiI21lZGFsIik7DQogICBlbGVtbWVkYWwuZW1wdHkoKTsNCiAgIA0KICAgaWYoc2NvcmUgPCAxMCkNCiAgICAgIC8vc2lnbmFsIHRoYXQgbm8gbWVkYWwgaGFzIGJlZW4gd29uDQogICAgICByZXR1cm4gZmFsc2U7DQogICANCiAgIGlmKHNjb3JlID49IDEwKQ0KICAgICAgbWVkYWwgPSAiYnJvbnplIjsNCiAgIGlmKHNjb3JlID49IDIwKQ0KICAgICAgbWVkYWwgPSAic2lsdmVyIjsNCiAgIGlmKHNjb3JlID49IDMwKQ0KICAgICAgbWVkYWwgPSAiZ29sZCI7DQogICBpZihzY29yZSA+PSA0MCkNCiAgICAgIG1lZGFsID0gInBsYXRpbnVtIjsNCiAgIA0KICAgZWxlbW1lZGFsLmFwcGVuZCgnPGltZyBzcmM9ImFzc2V0cy9tZWRhbF8nICsgbWVkYWwgKycucG5nIiBhbHQ9IicgKyBtZWRhbCArJyI+Jyk7DQogICANCiAgIC8vc2lnbmFsIHRoYXQgYSBtZWRhbCBoYXMgYmVlbiB3b24NCiAgIHJldHVybiB0cnVlOw0KfQ0KDQpmdW5jdGlvbiBwbGF5ZXJEZWFkKCkNCnsNCiAgIC8vc3RvcCBhbmltYXRpbmcgZXZlcnl0aGluZyENCiAgICQoIi5hbmltYXRlZCIpLmNzcygnYW5pbWF0aW9uLXBsYXktc3RhdGUnLCAncGF1c2VkJyk7DQogICAkKCIuYW5pbWF0ZWQiKS5jc3MoJy13ZWJraXQtYW5pbWF0aW9uLXBsYXktc3RhdGUnLCAncGF1c2VkJyk7DQogICANCiAgIC8vZHJvcCB0aGUgYmlyZCB0byB0aGUgZmxvb3INCiAgIHZhciBwbGF5ZXJib3R0b20gPSAkKCIjcGxheWVyIikucG9zaXRpb24oKS50b3AgKyAkKCIjcGxheWVyIikud2lkdGgoKTsgLy93ZSB1c2Ugd2lkdGggYmVjYXVzZSBoZSdsbCBiZSByb3RhdGVkIDkwIGRlZw0KICAgdmFyIGZsb29yID0gZmx5QXJlYTsNCiAgIHZhciBtb3ZleSA9IE1hdGgubWF4KDAsIGZsb29yIC0gcGxheWVyYm90dG9tKTsNCiAgICQoIiNwbGF5ZXIiKS50cmFuc2l0aW9uKHsgeTogbW92ZXkgKyAncHgnLCByb3RhdGU6IDkwfSwgMTAwMCwgJ2Vhc2VJbk91dEN1YmljJyk7DQogICANCiAgIC8vaXQncyB0aW1lIHRvIGNoYW5nZSBzdGF0ZXMuIGFzIG9mIG5vdyB3ZSdyZSBjb25zaWRlcmVkIFNjb3JlU2NyZWVuIHRvIGRpc2FibGUgbGVmdCBjbGljay9mbHlpbmcNCiAgIGN1cnJlbnRzdGF0ZSA9IHN0YXRlcy5TY29yZVNjcmVlbjsNCg0KICAgLy9kZXN0cm95IG91ciBnYW1lbG9vcHMNCiAgIGNsZWFySW50ZXJ2YWwobG9vcEdhbWVsb29wKTsNCiAgIGNsZWFySW50ZXJ2YWwobG9vcFBpcGVsb29wKTsNCiAgIGxvb3BHYW1lbG9vcCA9IG51bGw7DQogICBsb29wUGlwZWxvb3AgPSBudWxsOw0KDQogICAvL21vYmlsZSBicm93c2VycyBkb24ndCBzdXBwb3J0IGJ1enogYmluZE9uY2UgZXZlbnQNCiAgIGlmKGlzSW5jb21wYXRpYmxlLmFueSgpKQ0KICAgew0KICAgICAgLy9za2lwIHJpZ2h0IHRvIHNob3dpbmcgc2NvcmUNCiAgICAgIHNob3dTY29yZSgpOw0KICAgfQ0KICAgZWxzZQ0KICAgew0KICAgICAgLy9wbGF5IHRoZSBoaXQgc291bmQgKHRoZW4gdGhlIGRlYWQgc291bmQpIGFuZCB0aGVuIHNob3cgc2NvcmUNCiAgICAgIHNvdW5kSGl0LnBsYXkoKS5iaW5kT25jZSgiZW5kZWQiLCBmdW5jdGlvbigpIHsNCiAgICAgICAgIHNvdW5kRGllLnBsYXkoKS5iaW5kT25jZSgiZW5kZWQiLCBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgIHNob3dTY29yZSgpOw0KICAgICAgICAgfSk7DQogICAgICB9KTsNCiAgIH0NCn0NCg0KZnVuY3Rpb24gc2hvd1Njb3JlKCkNCnsNCiAgIC8vdW5oaWRlIHVzDQogICAkKCIjc2NvcmVib2FyZCIpLmNzcygiZGlzcGxheSIsICJibG9jayIpOw0KICAgDQogICAvL3JlbW92ZSB0aGUgYmlnIHNjb3JlDQogICBzZXRCaWdTY29yZSh0cnVlKTsNCiAgIA0KICAgLy9oYXZlIHRoZXkgYmVhdGVuIHRoZWlyIGhpZ2ggc2NvcmU/DQogICBpZihzY29yZSA+IGhpZ2hzY29yZSkNCiAgIHsNCiAgICAgIC8veWVhaCENCiAgICAgIGhpZ2hzY29yZSA9IHNjb3JlOw0KICAgICAgLy9zYXZlIGl0IQ0KICAgICAgc2V0Q29va2llKCJoaWdoc2NvcmUiLCBoaWdoc2NvcmUsIDk5OSk7DQogICB9DQogICANCiAgIC8vdXBkYXRlIHRoZSBzY29yZWJvYXJkDQogICBzZXRTbWFsbFNjb3JlKCk7DQogICBzZXRIaWdoU2NvcmUoKTsNCiAgIHZhciB3b25tZWRhbCA9IHNldE1lZGFsKCk7DQogICANCiAgIC8vU1dPT1NIIQ0KICAgc291bmRTd29vc2guc3RvcCgpOw0KICAgc291bmRTd29vc2gucGxheSgpOw0KICAgDQogICAvL3Nob3cgdGhlIHNjb3JlYm9hcmQNCiAgICQoIiNzY29yZWJvYXJkIikuY3NzKHsgeTogJzQwcHgnLCBvcGFjaXR5OiAwIH0pOyAvL21vdmUgaXQgZG93biBzbyB3ZSBjYW4gc2xpZGUgaXQgdXANCiAgICQoIiNyZXBsYXkiKS5jc3MoeyB5OiAnNDBweCcsIG9wYWNpdHk6IDAgfSk7DQogICAkKCIjc2NvcmVib2FyZCIpLnRyYW5zaXRpb24oeyB5OiAnMHB4Jywgb3BhY2l0eTogMX0sIDYwMCwgJ2Vhc2UnLCBmdW5jdGlvbigpIHsNCiAgICAgIC8vV2hlbiB0aGUgYW5pbWF0aW9uIGlzIGRvbmUsIGFuaW1hdGUgaW4gdGhlIHJlcGxheSBidXR0b24gYW5kIFNXT09TSCENCiAgICAgIHNvdW5kU3dvb3NoLnN0b3AoKTsNCiAgICAgIHNvdW5kU3dvb3NoLnBsYXkoKTsNCiAgICAgICQoIiNyZXBsYXkiKS50cmFuc2l0aW9uKHsgeTogJzBweCcsIG9wYWNpdHk6IDF9LCA2MDAsICdlYXNlJyk7DQogICAgICANCiAgICAgIC8vYWxzbyBhbmltYXRlIGluIHRoZSBNRURBTCEgV09PIQ0KICAgICAgaWYod29ubWVkYWwpDQogICAgICB7DQogICAgICAgICAkKCIjbWVkYWwiKS5jc3MoeyBzY2FsZTogMiwgb3BhY2l0eTogMCB9KTsNCiAgICAgICAgICQoIiNtZWRhbCIpLnRyYW5zaXRpb24oeyBvcGFjaXR5OiAxLCBzY2FsZTogMSB9LCAxMjAwLCAnZWFzZScpOw0KICAgICAgfQ0KICAgfSk7DQogICANCiAgIC8vbWFrZSB0aGUgcmVwbGF5IGJ1dHRvbiBjbGlja2FibGUNCiAgIHJlcGxheWNsaWNrYWJsZSA9IHRydWU7DQoNCiAgIC8vIEdyYXNzUjAwdDogYWRkZWQgZm9yIGNvbW11bmljYXRpbmcgdGhlIHNjb3JlLg0KICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2dyYXNzUm9vdC5nYW1lRW5kZWQnLCB7ZGV0YWlsOiB7IHNjb3JlOiBzY29yZSB9IH0pKTsNCn0NCg0KJCgiI3JlcGxheSIpLmNsaWNrKGZ1bmN0aW9uKCkgew0KICAgLy9tYWtlIHN1cmUgd2UgY2FuIG9ubHkgY2xpY2sgb25jZQ0KICAgaWYoIXJlcGxheWNsaWNrYWJsZSkNCiAgICAgIHJldHVybjsNCiAgIGVsc2UNCiAgICAgIHJlcGxheWNsaWNrYWJsZSA9IGZhbHNlOw0KICAgLy9TV09PU0ghDQogICBzb3VuZFN3b29zaC5zdG9wKCk7DQogICBzb3VuZFN3b29zaC5wbGF5KCk7DQogICANCiAgIC8vZmFkZSBvdXQgdGhlIHNjb3JlYm9hcmQNCiAgICQoIiNzY29yZWJvYXJkIikudHJhbnNpdGlvbih7IHk6ICctNDBweCcsIG9wYWNpdHk6IDB9LCAxMDAwLCAnZWFzZScsIGZ1bmN0aW9uKCkgew0KICAgICAgLy93aGVuIHRoYXQncyBkb25lLCBkaXNwbGF5IHVzIGJhY2sgdG8gbm90aGluZw0KICAgICAgJCgiI3Njb3JlYm9hcmQiKS5jc3MoImRpc3BsYXkiLCAibm9uZSIpOw0KICAgICAgDQogICAgICAvL3N0YXJ0IHRoZSBnYW1lIG92ZXIhDQogICAgICBzaG93U3BsYXNoKCk7DQogICB9KTsNCn0pOw0KDQpmdW5jdGlvbiBwbGF5ZXJTY29yZSgpDQp7DQogICBzY29yZSArPSAxOw0KICAgLy9wbGF5IHNjb3JlIHNvdW5kDQogICBzb3VuZFNjb3JlLnN0b3AoKTsNCiAgIHNvdW5kU2NvcmUucGxheSgpOw0KICAgc2V0QmlnU2NvcmUoKTsNCn0NCg0KZnVuY3Rpb24gdXBkYXRlUGlwZXMoKQ0Kew0KICAgLy9EbyBhbnkgcGlwZXMgbmVlZCByZW1vdmFsPw0KICAgJCgiLnBpcGUiKS5maWx0ZXIoZnVuY3Rpb24oKSB7IHJldHVybiAkKHRoaXMpLnBvc2l0aW9uKCkubGVmdCA8PSAtMTAwOyB9KS5yZW1vdmUoKQ0KICAgDQogICAvL2FkZCBhIG5ldyBwaXBlICh0b3AgaGVpZ2h0ICsgYm90dG9tIGhlaWdodCAgKyBwaXBlaGVpZ2h0ID09IGZseUFyZWEpIGFuZCBwdXQgaXQgaW4gb3VyIHRyYWNrZXINCiAgIHZhciBwYWRkaW5nID0gODA7DQogICB2YXIgY29uc3RyYWludCA9IGZseUFyZWEgLSBwaXBlaGVpZ2h0IC0gKHBhZGRpbmcgKiAyKTsgLy9kb3VibGUgcGFkZGluZyAoZm9yIHRvcCBhbmQgYm90dG9tKQ0KICAgdmFyIHRvcGhlaWdodCA9IE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkqY29uc3RyYWludCkgKyBwYWRkaW5nKTsgLy9hZGQgbG93ZXIgcGFkZGluZw0KICAgdmFyIGJvdHRvbWhlaWdodCA9IChmbHlBcmVhIC0gcGlwZWhlaWdodCkgLSB0b3BoZWlnaHQ7DQogICB2YXIgbmV3cGlwZSA9ICQoJzxkaXYgY2xhc3M9InBpcGUgYW5pbWF0ZWQiPjxkaXYgY2xhc3M9InBpcGVfdXBwZXIiIHN0eWxlPSJoZWlnaHQ6ICcgKyB0b3BoZWlnaHQgKyAncHg7Ij48L2Rpdj48ZGl2IGNsYXNzPSJwaXBlX2xvd2VyIiBzdHlsZT0iaGVpZ2h0OiAnICsgYm90dG9taGVpZ2h0ICsgJ3B4OyI+PC9kaXY+PC9kaXY+Jyk7DQogICAkKCIjZmx5YXJlYSIpLmFwcGVuZChuZXdwaXBlKTsNCiAgIHBpcGVzLnB1c2gobmV3cGlwZSk7DQp9DQoNCnZhciBpc0luY29tcGF0aWJsZSA9IHsNCiAgIEFuZHJvaWQ6IGZ1bmN0aW9uKCkgew0KICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSk7DQogICB9LA0KICAgQmxhY2tCZXJyeTogZnVuY3Rpb24oKSB7DQogICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQmxhY2tCZXJyeS9pKTsNCiAgIH0sDQogICBpT1M6IGZ1bmN0aW9uKCkgew0KICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSk7DQogICB9LA0KICAgT3BlcmE6IGZ1bmN0aW9uKCkgew0KICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL09wZXJhIE1pbmkvaSk7DQogICB9LA0KICAgU2FmYXJpOiBmdW5jdGlvbigpIHsNCiAgIHJldHVybiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvT1MgWC4qU2FmYXJpLykgJiYgISBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9DaHJvbWUvKSk7DQogICB9LA0KICAgV2luZG93czogZnVuY3Rpb24oKSB7DQogICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvSUVNb2JpbGUvaSk7DQogICB9LA0KICAgYW55OiBmdW5jdGlvbigpIHsNCiAgIHJldHVybiAoaXNJbmNvbXBhdGlibGUuQW5kcm9pZCgpIHx8IGlzSW5jb21wYXRpYmxlLkJsYWNrQmVycnkoKSB8fCBpc0luY29tcGF0aWJsZS5pT1MoKSB8fCBpc0luY29tcGF0aWJsZS5PcGVyYSgpIHx8IGlzSW5jb21wYXRpYmxlLlNhZmFyaSgpIHx8IGlzSW5jb21wYXRpYmxlLldpbmRvd3MoKSk7DQogICB9DQp9Ow==" } ], "height": 883574, "spentComplexity": 0 }

github/deemru/w8io/169f3d6 
335.32 ms