Advertisement
BLOCKLY18

Blockly.js

Oct 21st, 2020
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. document.querySelectorAll('.ui_icon').forEach((e) => {e.style.display = "none"});
  2. document.getElementById('s42_taskbar').style.display = "none";
  3. $confirm({
  4.   msg: "Install the Blockly pack?",
  5.   btnOk: "Install"
  6. }, function(ok){
  7.   if (ok){
  8.     $archive('/a/boot/'); $file.delete('/a/boot/');
  9. $file.save('/a/boot/theme.css',atob('I3M0Ml9iYWNrZ3JvdW5kIHsKICBiYWNrZ3JvdW5kOiB1cmwoaHR0cHM6Ly9pLmltZ3VyLmNvbS9LQTBLWG00LnBuZyk7CiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluOwp9CiNzNDJfdGFza2JhciB7CiAgd2lkdGg6IDk4JTsKICBtYXJnaW4tbGVmdDogMSU7Cn0='));
  10. $file.save('/a/boot/apps.js',atob('bGUuX2FwcHMuZm9ybWF0ID0gewogIGNhdGVnb3JpZXM6ICJVdGlsaXR5IiwKICBzaWxlbnQ6IHRydWUsCiAgaGFzY2xpOiB0cnVlLAogIGV4ZWM6IGZ1bmN0aW9uKCkgewogICAgICAgICRjb25maXJtKAogICAgICAgICAgIkFyZSB5b3Ugc3VyZSB0byByZWluc3RhbGwgV2luZG93czkzLCB5b3Ugd2lsbCBsb29zZSBhbGwgeW91ciBzYXZlZCBkYXRhICh0cnVzdCBtZSwgaW0gYSBkb2xwaGluLi4uKSIsCiAgICAgICAgICBmdW5jdGlvbihvaykgewogICAgICAgICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAkZmlsZS5mb3JtYXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5sb2NhdGlvbi5yZWxvYWQodHJ1ZSk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICApOwogICAgICB9Cn0sCiAgbGUuX2FwcHMuZW5kID0gewogICAgICBjYXRlZ29yaWVzOiAiVXRpbGl0eSIsCiAgICAgIHNpbGVudDogdHJ1ZSwKICAgICAgaGFzY2xpOiB0cnVlLAogICAgICBleGVjOiBmdW5jdGlvbigpIHsKICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCArICJweCI7CiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAiIzAwMCI7CiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgPSAibm9zY3JvbGwgYW5pbWF0ZSB6b29tT3V0IjsKICAgICAgICAkYXVkaW8oIi9jL2ZpbGVzL3NvdW5kcy9zaHV0ZG93bi5tcDMiKS5wbGF5KCk7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gIjxkaXYgc3R5bGU9J2Rpc3BsYXk6IHRhYmxlO3dpZHRoOiAxMDAlO2hlaWdodDogIit3aW5kb3cuaW5uZXJIZWlnaHQrInB4O3RleHQtYWxpZ246Y2VudGVyOyc+PHAgc3R5bGU9J2Rpc3BsYXk6dGFibGUtY2VsbDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Jz5JVCdTIE5PVyBTQUZFIFRPIFRVUk4gT0ZGIFlPVVIgQ09NUFVURVI8YnI+PGJyPi4uLk9SIElTIElUPzwvcD48L2Rpdj4iOwogICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jb2xvciA9ICIjQzNGRjAwIjsKICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NOYW1lID0gIm5vc2Nyb2xsIGFuaW1hdGUgem9vbUluIjsKICAgICAgICB9LCAxMDAwKTsKICAgICAgfQogICAgfSwKICBsZS5fYXBwcy5zaHV0ZG93biA9IHsKICBzaWxlbnQ6IHRydWUsCiAgaGFzY2xpOiB0cnVlLAogIGNhdGVnb3JpZXM6ICJVdGlsaXR5IiwKICBleGVjOiBmdW5jdGlvbigpIHsKICAgICRjb25maXJtKHsKICAgICAgdGl0bGU6ICJFeGl0IFdpbmRvd3MiLAogICAgICBtc2c6ICJUaGlzIHdpbGwgZW5kIHlvdXIgV2luZG93cyBzZXNzaW9uLiIsCiAgICAgIGJ1dHRvbnM6IGZhbHNlLAogICAgICBpbWc6ICIvYy9zeXMvc2tpbnMvdzkzL2luZm8ucG5nIgogICAgfSwgZnVuY3Rpb24ob2spewogICAgICBpZiAob2spIHsKICAgICAgICAkZXhlKCdlbmQnKQogICAgICB9CiAgICB9KQogIH0KfQogIGxlLl9hcHBzLmggPSAgewogICAgICBjYXRlZ29yaWVzOiAiVXRpbGl0eTtBbXVzZW1lbnQiLAogICAgICBzaWxlbnQ6IHRydWUsCiAgICAgIHRlcm1pbmFsOiB0cnVlLAogICAgICBleGVjOiBmdW5jdGlvbigpIHsKICAgICAgICAkbG9nLnJlZC5yZXBlYXQoJ2gnKTskbG9nLnJlcGVhdCgnaCcpOyRsb2cuY3lhbi5yZXBlYXQoJ2gnKTskbG9nLmdyZWVuLnJlcGVhdCgnaCcpOyRsb2cuYmx1ZS5yZXBlYXQoJ2gnKQogICAgICB9CiAgICB9LAogICAgbGUuX2FwcHNbJzNkZ2VuJ10gPSB7CiAgICBoYXNjbGk6IHRydWUsCiAgICBzaWxlbnQ6IHRydWUsCiAgICBuYW1lOiAiM0QgVGV4dCBHZW5lcmF0b3IiLAogICAgY2F0ZWdvcmllczogIkdyYXBoaWNzO1ZpZXdlcjtBbXVzZW1lbnQ7QWNjZXNzb3JpZXMiLAogICAgaWNvbjogIi9jL3N5cy9za2lucy93OTMvYXBwcy8zZC5wbmciLAogICAgZXhlYzogZnVuY3Rpb24oKXsKICAgICAgZnVuY3Rpb24gd2lraSgpewogICAgICAgICR3aW5kb3coewogICAgICAgICAgdXJsOiAiaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2ViX2NvbG9ycyNIZXhfdHJpcGxldCIsCiAgICAgICAgICB0aXRsZTogIldlYiBDb2xvcnMgLSBXaWtpcGVkaWEiLAogICAgICAgICAgaWNvbjogYCR7bGUuX2FwcHMuY2F0ZXguaWNvbnx8Ii9jL3N5cy9za2lucy93OTMvYXBwcy9jYXRFeHBsb3Jlci5wbmcifWAsCiAgICAgICAgICBmb290ZXI6ICI8c3BhbiBzdHlsZT0nY29sb3I6IzI0MjgzNzttYXJnaW4tbGVmdDogNDclO2ZvbnQtc2l6ZTo2cHg7Jz5odHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9XZWJfY29sb3JzI0hleF90cmlwbGV0PC9zcGFuPiIsCiAgICAgICAgICBoZWxwOiAiSGVscCB0ZXh0IgogICAgICAgIH0pOwogICAgICB9OwogICAgICB2YXIgdCA9ICIzRCBUZXh0IEdlbmVyYXRvciI7dmFyIGkgPSBgJHtsZS5fYXBwc1snM2QnXS5pY29ufHwnL2Mvc3lzL3NraW5zL3c5My9hcHBzLzNkLnBuZyd9YDsKICAgICAgJHByb21wdCh7CiAgICAgICAgdGl0bGU6IHQsCiAgICAgICAgaWNvbjogaSwKICAgICAgICBpbWc6IGksCiAgICAgICAgcHJvbXB0OiAiV2luZG93czkzIiwKICAgICAgICBidG5PazogIk5leHQiLAogICAgICAgIGJ0bkNhbmNlbDogIkNhbmNlbCIsCiAgICAgICAgbXNnOiAiRW50ZXIgdGV4dDoiLAogICAgICAgIGhlbHA6ICJTcGFjZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIDNEIHRleHQuXG5Bbnkgc3BhY2VzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB1bmRlcnNjb3Jlcy4iCiAgICAgIH0sIGZ1bmN0aW9uKG9rLHRleHQpewogICAgICAgIGlmIChvayl7CiAgICAgICAgICB2YXIgdHh0ID0gYCR7dGV4dC5yZXBsYWNlKC8gL2dpLCAnXycpfHwiTm9fdGV4dF/igaNwcm92aWRlZCJ9YDsKICAgICAgICAgIHZhciBoZXggPSBbJzAnLCcxJywnMicsJzMnLCc0JywnNScsJzYnLCc3JywnOCcsJzknLCdBJywnQicsJ0MnLCdEJywnRScsJ0YnXTt2YXIgciA9ICRpby5hcnIucmFuZG9tOwogICAgICAgICAgdmFyIGNvbG9ycyA9IFsncmVkJywnb3JhbmdlJywneWVsbG93JywnZ3JlZW4nLCdibHVlJywncHVycGxlJywnYmxhY2snLCd3aGl0ZScsJ2dyYXknLCdicm93bicsJ3NpbHZlcicsJ2RhcmtzbGF0ZWdyYXknLCdsaWdodGdyYXknLCdzaWVubmEnLCdjaG9jb2xhdGUnLCd0YW4nLCdiZWlnZScsJ2NyaW1zb24nLCdtYXJvb24nLCdvcmFuZ2VyZWQnLCdyZWRvcmFuZ2UnLCdkYXJrb3JhbmdlJywndGFuZ2VyaW5lJywneWVsbG93b3JhbmdlJywnb3JhbmdleWVsbG93JywnZ29sZCcsJ2dvbGRlbnJvZCcsJ3BhbGVnb2xkZW5yb2QnLCdncmVlbnllbGxvdycsJ3llbGxvd2dyZWVuJywnbGltZScsJ2xpZ2h0Z3JlZW4nLCdkYXJrZ3JlZW4nLCdibHVlZ3JlZW4nLCdjeWFuJywndGVhbCcsJ3R1cnF1b2lzZScsJ2FxdWEnLCdhcXVhbWFyaW5lJywnc2t5JywnbGlnaHRjeWFuJywnbmF2eScsJ3Zpb2xldGJsdWUnLCd2aW9sZXQnLCdmdWNoc2lhJywnbWVkaXVtb3JjaGlkJywnbWVkaXVtcHVycGxlJywnY29ybmZsb3dlcmJsdWUnLCdsaW1lZ3JlZW4nLCdtYWdlbnRhJywnbGF2ZW5kYXInLCdwaW5rJywnZGFya21hZ2VudGEnXTsKICAgICAgICAgICRwcm9tcHQoewogICAgICAgICAgICB0aXRsZTogdCwKICAgICAgICAgICAgaWNvbjogaSwKICAgICAgICAgICAgaW1nOiBpLAogICAgICAgICAgICBwcm9tcHQ6IHIoWyIjIityKGhleCkrcihoZXgpK3IoaGV4KStyKGhleCkrcihoZXgpK3IoaGV4KSwiIyIrcihoZXgpK3IoaGV4KStyKGhleCldKSwKICAgICAgICAgICAgYnRuT2s6ICJEb25lIiwKICAgICAgICAgICAgYnRuQ2FuY2VsOiAiQ2FuY2VsIiwKICAgICAgICAgICAgbXNnOiAiRW50ZXIgY29sb3I6IiwKICAgICAgICAgICAgaGVscDogIlN1cHBvcnRlZCBjb2xvcnMgaW5jbHVkZSBhbnkgMyBvciA2IGRpZ2l0IDxhIGhyZWY9J2phdmFzY3JpcHQ6KHdpa2koKSknPkhFWCBjb2RlPC9hPi4iCiAgICAgICAgICB9LCBmdW5jdGlvbihvaywgdGV4dCl7CiAgICAgICAgICAgIGlmIChvayl7CiAgICAgICAgICAgICAgdmFyIGNvbG9yID0gYCR7dGV4dHx8IiNmZmYifWA7CiAgICAgICAgICAgICAgdmFyIGQgPSAkd2luZG93LmN1cnJlbnQuaWQ7ICR3aW5kb3cuY3VycmVudC5lbC5iYXNlLnN0eWxlLnRvcCA9ICIwIjsgJHdpbmRvdy5jdXJyZW50LmVsLmJhc2Uuc3R5bGUubGVmdCA9ICIwIjsgJGV4ZSgnM2QgJyArIHR4dCArICIgIiArIGNvbG9yKTsKICAgICAgICAgICAgICAkbG9nLmJsdWUuaXRhbGljKCdMb2FkaW5nIHRleHQuLi4nKTsgJGxvZy5zdWNjZXMoJ1RleHQgbG9hZGVkJyk7ICRsb2cud2hpdGUucmVwZWF0KCctJyk7CiAgICAgICAgICAgIH07CiAgICAgICAgICB9KTsKICAgICAgICB9OwogICAgICB9KTsKICAgIH0KICB9LAogIGxlLl9hcHBzLmNvbnRhY3QgPSB7CiAgICAgIGNhdGVnb3JpZXM6ICJBbXVzZW1lbnQiLAogICAgICBleGVjOiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgZCA9ICJ3aW5kb3dzOTMuIjsKICAgICAgICAkYWxlcnQoewogICAgICAgICAgbXNnOgogICAgICAgICAgICAnPHA+PGgzPkNvbnRhY3QgbWU8L2gzPjwvcD48cD48aW1nIHNyYz0iaHR0cDovL2kuaW1ndXIuY29tL2dUdnRDNFQucG5nIiB3aWR0aD0iMTAwIj48YnI+PGEgaHJlZj0iaHR0cDovL3R3aXR0ZXIuY29tL1JlYWxHZWxhdGluIj5AUmVhbEdlbGF0aW48L2E+PC9wPjxwPjxpbWcgc3JjPSJodHRwOi8vaS5pbWd1ci5jb20vTElOTGU3dy5wbmciIHdpZHRoPSIxMDAiPjxicj48YSBocmVmPSJodHRwOi8vcmVkZGl0LmNvbS91c2VyL0Jsb2NrbHlHRCI+dS9CbG9ja2x5R0Q8L2E+PC9wPicsCiAgICAgICAgICB0aXRsZTogIkNPTlRBQ1QgTUUiLAogICAgICAgICAgaW1nOiAiL2Mvc3lzL3NraW5zL3c5My9tYWlsLnBuZyIsCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0sCiAgbGUuX2FwcHMuc3RvcmUgPSB7CiAgICBjYXRlZ29yaWVzOiAiVXRpbGl0eTtTeXN0ZW07RGV2ZWxvcG1lbnQiLAogICAgaWNvbjogIi9jL3N5cy9za2lucy93OTMvc3RvcmUucG5nIiwKICAgIG5hbWU6ICJXaW5kb3dzIDkzIFN0b3JlIiwKICAgIGV4ZWM6IGZ1bmN0aW9uKCl7CiAgICAgIGZ1bmN0aW9uIGRvd25sb2FkKCl7CiAgJHByb21wdCh7CiAgICB0aXRsZTogIldpbmRvd3MgOTMgU3RvcmUiLAogICAgaWNvbjogIi9jL3N5cy9za2lucy93OTMvc3RvcmUucG5nIiwKICAgIGltZzogIi9jL3N5cy9za2lucy93OTMvc3RvcmUucG5nIiwKICAgIGhlbHA6ICI8aDQ+V2luZG93cyA5MyBTdG9yZSDigJQgTWFkZSBieSBCbG9ja2x5ICYjOTI7IEZBUTwvaDQ+XG48Yj5JIGNhbid0IGZpbmQgdGhlIGFwcCBJIGp1c3QgaW5zdGFsbGVkLjwvYj5cbllvdSBwcm9iYWJseSBkaWRuJ3QgZW50ZXIgdGhlIG5hbWUgY29ycmVjdGx5LiBJZiB5b3UgZGlkLCBpdCdzIHByb2JhYmx5IG9uIHlvdXIgZGVza3RvcC5cblxuPGI+SG93IGRvIEkga25vdyB3aGF0IHRoZSBleGUgZm9yIGFuIGFwcCBpcz88L2I+XG5UaGVyZSBhcmUgMiB3YXlzIHlvdSBjYW4gZmluZCBvdXQ6XG4xLiBXaGVuIHlvdSBjbGljayBTdGFydCB0aGVuIGdvIGluIHRoZSAnUHJvZ3JhbXMnIGRyb3Bkb3duIG1lbnUsIGl0IHNob3dzIHRoZSBuYW1lcyBvZiBhbGwgZXhlcyAoVGhlIGJsYWNrIHRleHQgaXMgdGhlIGV4ZSkuXG4yLiBFbnRlcmluZyAnaGVscCcgaW50byB0aGUgdGVybWluYWwgd2lsbCBzaG93IGFsbCBleGVzL2NvbW1hbmRzLlxuXG48Yj5JdCBzYXlzICdIYXZpbmcgdHJvdWJsZSBnZXR0aW5nIGFwcHMnIHdoZW4gSSBvcGVuIHRoZSBzdG9yZT88L2I+XG5UcnkgY29ubmVjdGluZyB0byBpbnRlcm5ldCwgPHM+ZHVtYmFzczwvcz4uXG5cbjxpPkFueSBvdGhlciBxdWVzdGlvbnM/PC9pPlxuPHRleHRhcmVhIHBsYWNlaG9sZGVyPSdXaGF0ZXZlciB5b3UgdHlwZSBpbiBoZXJlIHdvbnQgYmUgc2VudCB0byBhbnlvbmUgdGhlcmVmb3JlIG5vIG9uZSBjYW4gYW5zd2VyIHlvdXIgcXVlc3Rpb24nPjwvdGV4dGFyZWE+IiwKICAgIGJ0bk9rOiAiSW5zdGFsbCIsCiAgICBidG5DYW5jZWw6ICJMZWF2ZSBTdG9yZSIsCiAgICBtc2c6ICJXZWxjb21lIHRvIHRoZSBXaW5kb3dzIDkzIFN0b3JlLiBIZXJlLCB5b3VcbmNhbiBpbnN0YWxsIG5ldyBhcHBzLCBvciByZWluc3RhbGwgZGVsZXRlZCBhcHBzLlxuQ2xpY2sgdGhlID8gYnV0dG9uIGZvciBoZWxwLlxuXG5FbnRlciB0aGUgZXhlIHRoYXQgeW91IHdhbnQgdG8gZG93bmxvYWQuIgogIH0sICcnLCBmdW5jdGlvbihvaywgdGV4dCl7CiAgICBpZiAob2spIHsKICAgICAgdmFyIGUgPSAkYWxlcnQucHJvZ3Jlc3MoIkluc3RhbGxpbmcgIiArIHRleHQgKyAiLmV4ZS4uLiIpO3ZhciBudW09MDtzZXRJbnRlcnZhbChmdW5jdGlvbigpe2UudXBkYXRlKCsrbnVtKTt9LDEwMCk7c2V0VGltZW91dChmdW5jdGlvbigpeyRzdG9yZS5zZXQoJ2Rlc2t0b3AvTmV3IGFwcC5sbms0MicsICd7ImV4ZSI6IicgKyB0ZXh0ICsgJyJ9Jyk7ICRhbGVydCh7dGl0bGU6ICJJbnN0YWxsYXRpb24gQ29tcGxldGUiLCBpY29uOiAiL2Mvc3lzL3NraW5zL3c5My9zdG9yZS5wbmciLCBpbWc6ICIvYy9zeXMvc2tpbnMvdzkzL2FwcHMvbGFiLmdpZiIsIG1zZzogdGV4dCArICIuZXhlIGhhcyBiZWVuIGluc3RhbGxlZC5cbjxiPkl0IHNob3VsZCBub3cgYXBwZWFyIG9uIHlvdXIgZGVza3RvcC48L2I+Iiwgc291bmQ6ICJhbGVydCIsIGJ0bk9rOiAiVGhhbmtzICEifSk7JGV4cGxvcmVyLnJlZnJlc2goKTskbm90aWYoJ0luc3RhbGxhdGlvbiBDb21wbGV0ZScsJzxpbWcgc3JjPSIvYy9zeXMvc2tpbnMvdzkzL2luc3RhbGwucG5nIiB3aWR0aD0iMzAiPiBOZXcgYXBwLmxuazQyIGhhcyBiZWVuIGluc3RhbGxlZCcpfSwgMTIyNTApOwogICAgfQogIH0pOwp9OwpmdW5jdGlvbiBjcmVhdGUoKXsKICAkcHJvbXB0KHsKICAgIGljb246ICIvYy9zeXMvc2tpbnMvdzkzL3N0b3JlLnBuZyIsCiAgICBpbWc6ICIvYy9zeXMvc2tpbnMvdzkzL3N0b3JlLnBuZyIsCiAgICB0aXRsZTogIkNyZWF0ZSBBcHAiLAogICAgYnRuT2s6ICJOZXh0IiwKICAgIG1zZzogIkFwcCBleGUgbmFtZToiCiAgfSwgZnVuY3Rpb24ob2ssIHRleHQpewogICAgaWYgKG9rKXsKICAgICAgdmFyIGV4ZSA9IHRleHQ7CiAgICAgICRwcm9tcHQoewogICAgICAgIHRpdGxlOiAiQ3JlYXRlIEFwcCIsCiAgICAgICAgYnRuT2s6ICJOZXh0IiwKICAgICAgICBpbWc6ICIvYy9zeXMvc2tpbnMvdzkzL3N0b3JlLnBuZyIsCiAgICAgICAgaWNvbjogIi9jL3N5cy9za2lucy93OTMvc3RvcmUucG5nIiwKICAgICAgICBtc2c6ICJBcHAgSWNvbjoiLAogICAgICAgIHByb21wdDogIi9jLyIKICAgICAgfSwgZnVuY3Rpb24ob2ssIHRleHQpewogICAgICAgIGlmIChvayl7CiAgICAgICAgICB2YXIgaWNvbiA9IHRleHQ7CiAgICAgICAgICAkcHJvbXB0KHsKICAgICAgICAgICAgaWNvbjogIi9jL3N5cy9za2lucy93OTMvc3RvcmUucG5nIiwKICAgICAgICAgICAgaW1nOiAiL2Mvc3lzL3NraW5zL3c5My9zdG9yZS5wbmciLAogICAgICAgICAgICB0aXRsZTogIkNyZWF0ZSBBcHAiLAogICAgICAgICAgICBidG5PazogIk5leHQiLAogICAgICAgICAgICBtc2c6ICJBcHAgdGl0bGU6IgogICAgICAgICAgfSwgZnVuY3Rpb24ob2ssIHRleHQpewogICAgICAgICAgICBpZiAob2spewogICAgICAgICAgICAgIHZhciB0aXRsZSA9IHRleHQ7CiAgICAgICAgICAgICAgJHByb21wdCh7CiAgICAgICAgICAgICAgICBpbWc6ICIvYy9zeXMvc2tpbnMvdzkzL3N0b3JlLnBuZyIsCiAgICAgICAgICAgICAgICBpY29uOiAiL2Mvc3lzL3NraW5zL3c5My9zdG9yZS5wbmciLAogICAgICAgICAgICAgICAgdGl0bGU6ICJDcmVhdGUgQXBwIiwKICAgICAgICAgICAgICAgIGJ0bk9rOiAiTmV4dCIsCiAgICAgICAgICAgICAgICBtc2c6ICJQYXN0ZSBhcHAgSmF2YXNjcmlwdCBoZXJlIChkbyBub3QgaW5jbHVkZSAnZnVuY3Rpb24oKXsnIGF0IHRoZSBiZWdpbm5pbmcsIHRoYXQncyBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkKToiCiAgICAgICAgICAgICAgfSwgZnVuY3Rpb24ob2ssIHRleHQpewogICAgICAgICAgICAgICAgaWYgKG9rKXsKICAgICAgICAgICAgICAgICAgdmFyIGV4ZWMgPSAiZnVuY3Rpb24oKXsiICsgdGV4dCArICJ9IjsKICAgICAgICAgICAgICAgICAgJGNvbmZpcm0oewogICAgICAgICAgICAgICAgICAgIG1zZzogIkFwcCBpbmZvOlxuXG5FWEU6ICIgKyBleGUgKyAiXG5UaXRsZTogIiArIHRpdGxlICsgIlxuaWNvbjogIiArIGljb24gKyAiXG5KYXZhc2NyaXB0OiBDbGljayBvbiB0aGUgPyBidXR0b24gb24gdGhlIHRvcCBvZiB0aGUgd2luZG93IHRvIHZpZXcganMiLAogICAgICAgICAgICAgICAgICAgIGhlbHA6ZXhlYwogICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbihvayl7CiAgICAgICAgICAgICAgICAgICAgaWYgKG9rKXsKICAgICAgICAgICAgICAgICAgICAgICRmaWxlLnNhdmUoJy9hL2Jvb3QvXycgKyBleGUgKyAnLmpzJywnbGUuX2FwcHMuJyArIGV4ZSArICcgPSB7XG4gIG5hbWU6ICInICsgdGl0bGUgKyAnIixcbiAgaWNvbjogIicgKyBpY29uICsgJyIsXG4gIGV4ZWM6ICcgKyBleGVjICsgJ1xufTsnKTsKICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgJGV4ZSgnL2EvYm9vdC9fJyArIGV4ZSArICcuanMnKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGFsZXJ0LmluZm8oJ0FwcCBzdWNjZXNzZnVsbHkgY3JlYXRlZC4nKTsKICAgICAgICAgICAgICAgICAgICAgIH0sIDcwMCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KQogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9OwogICAgICB9KTsKICAgIH07CiAgfSk7Cn07Ci8vCiRjb25maXJtKHsKICB0aXRsZTogIldpbmRvd3MgOTMgU3RvcmUiLAogIGljb246ICIvYy9zeXMvc2tpbnMvdzkzL3N0b3JlLnBuZyIsCiAgaW1nOiAiL2Mvc3lzL3NraW5zL3c5My9zdG9yZS5wbmciLAogIGJ0bk9rOiAiQ3JlYXRlIEFwcCIsCiAgYnRuQ2FuY2VsOiAiQWRkIEFwcCIsCiAgbXNnOiAiV2VsY29tZSB0byB0aGUgV2luZG93cyA5MyBTdG9yZS4gV2hhdCB3b3VsZCB5b3UgbGlrZSB0byBkbz8iCn0sIGZ1bmN0aW9uKG9rKXsKICBpZiAob2spewogICAgY3JlYXRlKCk7CiAgfSBlbHNlIHsKICAgIGRvd25sb2FkKCk7CiAgfTsKfSk7CiAgICB9Cn0sCiAgbGUuX2FwcHMubWVteiA9IHsKICBjYXRlZ29yaWVzOiAiQW11c2VtZW50IiwKICBuYW1lOiAiTUVNWiBEZXN0cnVjdGl2ZSIsCiAgaWNvbjogIi9jL2ZpbGVzL2ltYWdlcy9pY29ucy9wb3cucG5nIiwKICBleGVjOiBmdW5jdGlvbigpIHsKICAgIGxlLl9hcHBzLnJlYm9vdC5leGVjID0gZnVuY3Rpb24oKXsKICBkb2N1bWVudC53cml0ZSgnPGJvZHkgc3R5bGU9ImJhY2tncm91bmQ6ICM2MzYzNjM7IGZvbnQtZmFtaWx5OiBBcmlhbCBCbGFjazsiPjxoMT5Zb3VyIGNvbXB1dGVyIGhhcyBiZWVuIGRlc3Ryb3llZCBieSBNRU1aIHRyb2phbi4gRW5qb3kgdGhlIE55YW4gQ2F0Li4uPC9oMT48aW1nIHdpZHRoPSI2MDAiIHNyYz0iaHR0cHM6Ly9pLmltZ3VyLmNvbS92dUNYVDlPLmdpZiI+PGlmcmFtZSB3aWR0aD0iMzAiIGhlaWdodD0iMzIiIHNyYz0iaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvUUgyLVRHVWx3dTQiIGZyYW1lYm9yZGVyPSIwIiBhbGxvdz0iYWNjZWxlcm9tZXRlcjsgYXV0b3BsYXk7IGxvb3A7IGVuY3J5cHRlZC1tZWRpYTsgZ3lyb3Njb3BlOyBwaWN0dXJlLWluLXBpY3R1cmUiIGFsbG93ZnVsbHNjcmVlbiBhdXRvcGxheSBsb29wPjwvaWZyYW1lPjwvYm9keT4nKTsgbGUuX3NldHRpbmdzLnNvdW5kcyA9IHt9Owp9OwpsZS5fYXBwcy5zaHV0ZG93bi5leGVjID0gZnVuY3Rpb24oKXskZXhlKCdyZWJvb3QnKX07CmxlLl9hcHBzLmZvcm1hdC5leGVjID0gZnVuY3Rpb24oKXskZXhlKCdyZWJvb3QnKX07CmxlLl9zZXR0aW5ncy5zb3VuZHMuYmxvcCA9ICIvYy9zeXMvc291bmRzL0JMT1Aub2dnIjsgJGF1ZGlvKCdibG9wJykuX3ZvbHVtZSA9IDI7CigoZSx0KT0+e2RvY3VtZW50LnRpdGxlID0gIk1FTURPV1M5MyI7JGV4ZSgidGV4dGFyZWEiKTskd2luZG93LmN1cnJlbnQuZWwuYm9keS5maXJzdENoaWxkLnZhbHVlPSJZT1VSIENPTVBVVEVSIEhBUyBCRUVOIEZVQ0tFRCBCWSBUSEUgTUVNWiBUUk9KQU4gKG5vdCByZWFsbHkpLlxuWW91ciBjb21wdXRlciB3b24ndCBib290IHVwIGFnYWluLCBzbyB1c2UgaXQgYXMgbG9uZyBhcyB5b3UgY2FuIVxuOkRcblRyeWluZyB0byBraWxsIE1FTVogd2lsbCBjYXVzZSB5b3VyIHN5c3RlbSB0byBiZSBkZXN0cm95ZWQgaW5zdGFudGx5LCBzbyBkb24ndCB0cnkgaXQgOkRcbiI7JHdpbmRvdy5jdXJyZW50LmNoYW5nZVRpdGxlKCdVbnRpdGxlZCAtIE5vdGVwYWQnKTskd2luZG93LmN1cnJlbnQuY2hhbmdlU2l6ZSh7d2lkdGg6IDc1MCwgaGVpZ2h0OiA0MDB9KTt2YXIgbj1uZXcgSW1hZ2U7bi5zcmM9Jy9jL3N5cy9za2lucy93OTMvJyArICRpby5hcnIucmFuZG9tKFsnZXJyb3InLCdhbGVydCddKSArICcucG5nJzt2YXIgbT1uZXcgSW1hZ2U7bS5zcmM9YC9jL3N5cy9za2lucy8ke2xlLl9zZXR0aW5ncy5za2lufS9hbGVydC5wbmdgO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGk9W107YS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUuekluZGV4PSIxZTUiLGEuc3R5bGUudG9wPSIwIixhLnN0eWxlLmxlZnQ9IjAiLGEuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIsYS53aWR0aD1pbm5lcldpZHRoLGEuaGVpZ2h0PWlubmVySGVpZ2h0LGxlLl9kb20uc2NyZWVuLmFwcGVuZENoaWxkKGEpLGUoZT0+e2Eud2lkdGg9aW5uZXJXaWR0aCxhLmhlaWdodD1pbm5lckhlaWdodDtmb3IodmFyIHQ9MDt0PGkubGVuZ3RoO3QrKylhLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKG4saVt0XVswXSxpW3RdWzFdKX0sMSksdCh0PT57ZShlPT57aS5wdXNoKFtNYXRoLnJhbmRvbSgpKmlubmVyV2lkdGgsTWF0aC5yYW5kb20oKSppbm5lckhlaWdodF0pfSwxZTMpfSw1ZTMrMWU0Kk1hdGgucmFuZG9tKCkpLHQodD0+e2UoZT0+eyRhbGVydCh7bXNnOiJTdGlsbCB1c2luZyB0aGlzIGNvbXB1dGVyPyIsY2VudGVyOiExLGJ0bk9rOiJPSyIsdGl0bGU6ImxvbCIsYW5pbWF0aW9uT3V0OiJub25lIixpY29uOiJodHRwczovL2kuaW1ndXIuY29tL3p6ejFLQTEucG5nIn0pfSwzNTAwKX0sMWU0KzJlNCpNYXRoLnJhbmRvbSgpKSx0KHQ9PntlKGU9PnskZXhlKFsiaGFtcHN0ZXIiLCJ3aGF0aWYiLCJhY2lkYm94IiwidGVybWluYWwiLCJjYXRleCIsIm1pbmVzIiwiYmVlcGJveCIsImIiLCJ0ZXh0YXJlYSIsInN0YXJ3YXJzIiwiZGVmcmFnIiwiL2EvdHJhc2giLCJ0cm9sbGJveCIsInJlY29yZGVyIiwicG9ueSIsImNhbGMiLCJzcGVlY2giLCJtYXJidXJnIiwiaHlkcmEiXVtNYXRoLmZsb29yKDEwKk1hdGgucmFuZG9tKCkpXSl9LDVlMyl9LDFlNCszZTQqTWF0aC5yYW5kb20oKSksdCh0PT57ZShlPT57JGV4ZSgiZnggaW52ZXJ0IC5zNDJfdGFza2JhciIpOyRleGUoImZ4IGludmVydCAudWlfaWNvbiIpOyRleGUoImZ4IGludmVydCAudWlfaWNvbiIpO30sOTY3KTt9LDdlMysxZTQqTWF0aC5yYW5kb20oKSksdCh0PT57ZShlPT57JGV4ZSgnZnggaW52ZXJ0ICNzNDJfYmFja2dyb3VuZCcpOyRhdWRpbygkaW8uYXJyLnJhbmRvbShbJ2Vycm9yJywnYWxlcnQnXSkpLnBsYXkoKX0sMWUzKX0sNmUzKzFlNCpNYXRoLnJhbmRvbSgpKX0pKHNldEludGVydmFsLHNldFRpbWVvdXQpO3NldEludGVydmFsKGZ1bmN0aW9uKCl7JGxvZygnVEhFJyk7JGxvZygnTUVNWicpOyRsb2coJ0FSRScpOyRsb2coJ1JFQUwnKTskZ2FtZXBhZCgnVEhFJyk7JGdhbWVwYWQoJ01FTVonKTskZ2FtZXBhZCgnQVJFJyk7JGdhbWVwYWQoJ1JFQUwnKTt9LCAxMDApOwogIH0KfSwKICBsZS5fYXBwcy5yZWFsbHlnb29kID0gewogICAgY2F0ZWdvcmllczogIkVtdWxhdG9yO1ZNO0FtdXNlbWVudCIsCiAgICBuYW1lOiAiV2luZG93cyBSRyIsCiAgaWNvbjogIi9jL3N5cy9pbWcvbG9nb2J1Zy5wbmciLAogIGV4ZWM6IGZ1bmN0aW9uKCl7CiAgICAkYWxlcnQoewogIGltZzogIiIsCiAgc291bmQ6ICIiLAogIGhlYWRlcjogITEsCiAgYnRuT2s6ICExLAogIG1zZzogIjxib2R5IHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwgQmxhY2snPjxpbWcgc3JjPSdodHRwczovL2kuaW1ndXIuY29tL0hYZTdualgucG5nJyB3aWR0aD0nMjAwJz48YnI+PGgxPldpbmRvd3MgPHNwYW4gc3R5bGU9J2NvbG9yOiBsaW1lJz5SRzwvc3Bhbj48L2gxPjxkaXYgc3R5bGU9J3dpZHRoOiA4NSUnPjxoNiBzdHlsZT0nY29sb3I6IGxpbWU7IHRleHQtYWxpZ246IHJpZ2h0Jz5SRUFMTFkgR09PRCBFRElUSU9OPC9oNj48L2Rpdj48cCBzdHlsZT0ndGV4dC1hbGlnbjogcmlnaHQnPkJVSUxEIDIwNzwvcD48L2JvZHk+Igp9KTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgJHdpbmRvdy5jdXJyZW50LmRlc3Ryb3koKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAkYXVkaW8oJy9jL3N5cy9zb3VuZHMvQk9PVC5vZ2cnKS5wbGF5KCk7JHdpbmRvdyh7CiAgICAgIGFuaW1hdGlvbkluOiAibm9uZSIsCiAgICAgIHVybDogImFib3V0OmJsYW5rIiwKICAgICAgZm9vdGVyOiAkaW8uQXJyYXkucmFuZG9tKFsiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIl0pICsgIjowMCAiICsgJGlvLkFycmF5LnJhbmRvbShbIkFNIiwiUE0iXSksCiAgICAgIHdpZHRoOiAzMDAwLAogICAgICBoZWlnaHQ6IDE1MCwKICAgICAgdGl0bGU6ICJXaW5kb3dzIFJHIEJ1aWxkIDIwNyIsCiAgICAgIGhlbHA6ICJBbiBhdHRlbXB0IGJ5IEJsb2NrbHkgdG8gcmVjcmVhdGUgV2luZG93cyBSRyBpbiBXaW5kb3dzIDkzIChzaW5jZSB0aGUgZG9tYWluIDxhIGhyZWY9J2h0dHA6Ly93aW5kb3dzcmVhbGx5Z29vZGVkaXRpb24uY29tJz53aW5kb3dzcmVhbGx5Z29vZGVkaXRpb24uY29tPC9hPiBpcyBub3cgZm9yIHNhbGUpIiwKICAgICAgbWluaW1pemFibGU6ICExLAogICAgICByZXNpemFibGU6ICExLAogICAgICBtZW51OiBbCiAgICAgICAgewogICAgICAgICAgbmFtZTogIjxjZW50ZXI+PGltZyBzcmM9J2h0dHBzOi8vaS5pbWd1ci5jb20vSFhlN25qWC5wbmcnIHdpZHRoPSczMic+PGJyPlN0YXJ0PC9jZW50ZXI+IiwKICAgICAgICAgIGl0ZW1zOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiV29yZCIsCiAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgJGFsZXJ0KHsKICAgICAgICAgICAgICAgICAgdGl0bGU6ICJNaWNyb3NvZnQgV29yZCBSRyIsCiAgICAgICAgICAgICAgICAgIG1zZzogIjxjZW50ZXI+PGJyPjxicj48YnI+PGJyPjxoMT5XT1JEPHNwYW4gc3R5bGU9J2NvbG9yOiBsaW1lJz5SRzwvaDE+PGJyPlJlZ2lzdGVyZWQgdG86IEphbWVzV2ViPC9zcGFuPjxicj48YnI+PGJyPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246IHJpZ2h0Jz5QQVJUIE9GIFRIRSBPRkZJQ0U8c3BhbiBzdHlsZT0nY29sb3I6IGxpbWUnPlJHPC9zcGFuPiBTVUlURTwvZGl2PiIsCiAgICAgICAgICAgICAgICAgIHNvdW5kOiAiIiwKICAgICAgICAgICAgICAgICAgaW1nOiAiIiwKICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uT3V0OiAibm9uZSIsCiAgICAgICAgICAgICAgICAgIGJ0bk9rOiAiQ29udGludWUiCiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbihvayl7CiAgICAgICAgICAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgICAgICRleGUoJ3RleHRhcmVhJyk7JHdpbmRvdy5jdXJyZW50LmNoYW5nZVNpemUoe3dpZHRoOiAxMTAwLCBoZWlnaHQ6IDkwMH0pOyR3aW5kb3cuY3VycmVudC5jaGFuZ2VUaXRsZSgnTWljcm9zb2Z0IFdvcmQgUkcnKTsKc2V0VGltZW91dChmdW5jdGlvbigpewogICRhdWRpbygnYWxlcnQnKS5wbGF5KCk7JHdpbmRvdy5jdXJyZW50LmVsLmJvZHkuZmlyc3RDaGlsZC52YWx1ZT0iIjskZXhlKCdjbGlwcHknKTskbm90aWYoJ0NsaXBweSBzYXlzLi4uJywiSXQgbG9va3MgbGlrZSB5b3UncmUgcHJvYmFibHkgbm90IHdyaXRpbmcgYSBsZXR0ZXIuIEkgbGlrZSBsZXR0ZXJzLiBJIHRoaW5rIHlvdSBzaG91bGQuIik7c2V0VGltZW91dChmdW5jdGlvbigpewogICAgJHdpbmRvdy5jdXJyZW50LmVsLmJvZHkuZmlyc3RDaGlsZC52YWx1ZT0iTUlMSyI7JGF1ZGlvKCdhbGVydCcpLnBsYXkoKTskbm90aWYoJ0NsaXBweSBzYXlzLi4uJywiU3RhcnQgd2l0aCBhIHdvcmQgbGlrZVxuTUlMSyIpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgICAgJHdpbmRvdy5jdXJyZW50LmVsLmJvZHkuZmlyc3RDaGlsZC52YWx1ZT0iTUlMSyBTUE9OR0UiOyRhdWRpbygnYWxlcnQnKS5wbGF5KCk7JG5vdGlmKCdDbGlwcHkgc2F5cy4uLicsIkFuZCBTUE9OR0UsIEkgbGlrZSBzcG9uZ2VzISIpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgICAgICAkd2luZG93LmN1cnJlbnQuZWwuYm9keS5maXJzdENoaWxkLnZhbHVlPSJNSUxLIFNQT05HRVxuXG7wn5OOIjskYXVkaW8oJ2FsZXJ0JykucGxheSgpOyRub3RpZignQ2xpcHB5IHNheXMuLi4nLCJOb3cgeW91IG5lZWQgc29tZVxucGljdHVyZXMhXG5JdCdzIG15IGJyb3RoZXIhIEhBSEEhIik7c2V0VGltZW91dChmdW5jdGlvbigpewogICAgICAgICAgJG5vdGlmKCdDbGlwcHkgc2F5cy4uLicsIk9oIGRlYXIsIEkgdGhpbmsgSSd2ZSBtYWRlIGl0IGNyYXNoLiIpOyRhbGVydCh7CiAgICAgICAgICAgIHRpdGxlOiAiIiwKICAgICAgICAgICAgbXNnOiAicGFwZXJjbGlwLmV4ZSBoYXMgcGVyZm9ybWVkIDk0LDcwOFxuaWxsZWdhbCBvcHBlcmF0aW9ucyBhbmQgd2lsbCBub3cgYmVcbnNob3QuIgogICAgICAgICAgfSwgZnVuY3Rpb24ob2spewogICAgICAgICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAkbm90aWYoJ0NsaXBweSBzYXlzLi4uJywiSGV5LCB3aHkgZG8gSSBoYXZlXG5ibG9vZD8iKTskYWxlcnQoewogICAgICAgICAgICAgICAgdGl0bGU6ICIiLAogICAgICAgICAgICAgICAgaW1nOiAiL2Mvc3lzL3NraW5zL3c5My9lcnJvci5wbmciLAogICAgICAgICAgICAgICAgc291bmQ6ICJlcnJvciIsCiAgICAgICAgICAgICAgICBtc2c6ICJFcnJvciByZW5kZXJpbmcgYmxvb2QuIgogICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKG9rKXsKICAgICAgICAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgJGFsZXJ0KHsKICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAiIiwKICAgICAgICAgICAgICAgICAgICAgIG1zZzogIndvcmQuZXhlIGhhcyBwZXJmb3JtZWQgYW4gaWxsZWdhbFxub3BwZXJhdGlvbiAoa2lsbGVkIGEgcGFwZXJjbGlwKSBhbmRcbndpbGwgbm93IGJlIGFycmVzdGVkLCBhbmQgZm9yIHRoYXRcbnJlYXNvbiwgY2xvc2VkLiIKICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbihvayl7CiAgICAgICAgICAgICAgICAgICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeyR3aW5kb3cuY3VycmVudC5kZXN0cm95KCk7fSwgMzAwKQogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgIH0sIDIwMDApCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgfQogICAgICAgICAgfSkKICAgICAgICB9LCA0ODA1KQogICAgICB9LCA0ODAwKQogICAgfSwgNDgxMCkKICB9LCA0ODIwKQp9LCA0ODAwKQogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIldpbmRvd3MgVXBkYXRlIiwKICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAkYWxlcnQoewogICAgICAgICAgICAgICAgICB0aXRsZTogIldpbmRvd3MgUkcgVXBkYXRlIiwKICAgICAgICAgICAgICAgICAgbXNnOiAiPGgxPldpbmRvd3M8c3BhbiBzdHlsZT0nY29sb3I6IGxpbWUnPlJHPC9zcGFuPjxicj48aDI+VVBEQVRFPC9oMj5XZWxjb21lIHRvIHRoZSBXaW5kb3dzIFVwZGF0ZSBXaXphcmQhPGJyPkNsaWNrIG5leHQgdG8gYmVnaW4iLAogICAgICAgICAgICAgICAgICBidG5PazogIk5leHQiLAogICAgICAgICAgICAgICAgICBpbWc6ICIiLAogICAgICAgICAgICAgICAgICBzb3VuZDogIiIKICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKG9rKXsKICAgICAgICAgICAgICAgICAgaWYgKG9rKXsKICAgICAgICAgICAgICAgICAgICAkYWxlcnQoewogICAgICAgICAgICAgICAgICAgICAgYnRuT2s6ICExLAogICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICJXaW5kb3dzIFJHIFVwZGF0ZSIsCiAgICAgICAgICAgICAgICAgICAgICBpbWc6ICIiLAogICAgICAgICAgICAgICAgICAgICAgc291bmQ6ICIiLAogICAgICAgICAgICAgICAgICAgICAgbXNnOiAiPGgxPldpbmRvd3M8c3BhbiBzdHlsZT0nY29sb3I6IGxpbWUnPlJHPC9zcGFuPjxicj48aDI+VVBEQVRFPC9oMj5XaW5kb3dzIGlzIGNoZWNraW5nIGZvciBhdmFpbGFibGUgdXBkYXRlcy48YnI+VGhpcyBpcyBkb25lIHdpdGggc2VuZGluZyBhbGwgeW91ciBtb25leSB0byBNaWNyb3NvZnQuIgogICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICRhbGVydCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICIiLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1zZzogIlVuYWJsZSB0byBjb25uZWN0LlxuVGhpcyBjb3VsZCBiZSBmb3Igc2V2ZXJhbCByZWFzb25zOlxuICAxLiBZb3Ugc21lbGwuXG4gIDIuIFlvdXIgaG91c2UgaXMgZ3JlZW5cbiAgMy4gWW91IGFyZSB0cnlpbmcgdG8gYmUgbmF1Z2h0eS4iCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeyRhbGVydCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c6ICJVbmFibGUgdG8gY29ubmVjdC5cblBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuIgogICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCl7JGFsZXJ0KHttaW5pbWl6YWJsZTogITEsIGNsb3NhYmxlOiAhMSwgbWF4aW1pemFibGU6ICExLCBhdXRvbWF4aW1pemU6ICEwLCBtc2c6ICI8Ym9keSBzdHlsZT0nYmFja2dyb3VuZDogYmx1ZSwgZm9udC1mYW1pbHk6IG1vbm9zcGFjZSc+V0lORE9XUzxicj48YnI+V0lORE9XUyBJUyBCUk9LRU48YnI+UExFQVNFIFJFSU5TVEFMTCBXSU5ET1dTPGJyPjxicj5QUkVTUyBTUEFDRSBUTyBDT05USU5VRTwvYm9keT4ifSl9KX0sIDEwMDApCiAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgICB9LCA0MDAwKQogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIkNyYXNoIiwKICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKCl7ZG9jdW1lbnQud3JpdGUoJzxib2R5IHN0eWxlPSJiYWNrZ3JvdW5kOiBibHVlOyBmb250LWZhbWlseTogbW9ub3NwYWNlIj48Y2VudGVyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj5XaW5kb3dzIGhhcyBjcmFzaGVkIGxvbDwvY2VudGVyPjwvYm9keT4nKX0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJTb2xpdGFpcmUiLAogICAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICRhbGVydCh7CiAgICAgICAgICAgICAgICAgIHRpdGxlOiAiIiwKICAgICAgICAgICAgICAgICAgbXNnOiAiQ29taW5nIHNvb24gbWF5YmUiCiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJPcmRlciBGb29kIiwKICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAkYWxlcnQoewogICAgICAgICAgICAgICAgICB0aXRsZTogIk9yZGVyIEZvb2QiLAogICAgICAgICAgICAgICAgICBpbWc6ICIiLAogICAgICAgICAgICAgICAgICBzb3VuZDogIiIsCiAgICAgICAgICAgICAgICAgIG1zZzogIjxoMj5XaW5kb3dzPHNwYW4gc3R5bGU9J2NvbG9yOiBsaW1lJz5SRzwvc3Bhbj48L2gyPjxicj48YnI+PGI+T25lIG9mIHRoZSBtYW55IGFkdmFuY2VtZW50cyBpbiBXaW5kb3dzIFJHXG5pcyB0aGUgYWJpbGl0eSB0byBvcmRlciBmb29kIG9ubGluZS48YnI+WW91IGNhbiBvcmRlciBmcm9tIGEgaHVnZSBzZWxlY3Rpb24gb2YgcXVhbGl0eTxicj5nb29kcyBhbmQgdGhleSB3aWxsIGJlIGRlbGl2ZXJlZCB0byB5b3VyIGRvb3I8YnI+d2l0aGluIDMwIG1pbnV0ZXMuICg0NSBtaW51dGVzIG9mZi1wZWFrKS48YnI+Q2xpY2sgT0sgdG8gY29udGludWU8L2I+IgogICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24ob2spewogICAgICAgICAgICAgICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAgICAgICAkYWxlcnQoewogICAgICAgICAgICAgICAgICAgICAgc291bmQ6ICIiLAogICAgICAgICAgICAgICAgICAgICAgaW1nOiAiIiwKICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAiT3JkZXIgRm9vZCIsCiAgICAgICAgICAgICAgICAgICAgICBtc2c6ICI8aDI+V2luZG93czxzcGFuIHN0eWxlPSdjb2xvcjogbGltZSc+Ukc8L3NwYW4+PC9oMj48YnI+PGJyPjxiIHN0eWxlPSdjb2xvcjogYmx1ZSc+UGxlYXNlIHdhaXQgd2hpbGUgd2UgY29ubmVjdCB0byBvdXIgb25saW5lPGJyPmRhdGFiYXNlIGFuZCByZXRyaWV2ZSBhbGwgYXZhaWxhYmxlIG1lYWxzLjxicj5UaGlzIG1heSB0YWtlIGEgZmV3IG1pbnV0ZXMuPC9iPiIsCiAgICAgICAgICAgICAgICAgICAgICBidG5PazogIkNvbnRpbnVlIgogICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICRhbGVydCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgc291bmQ6ICIiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICJPcmRlciBGb29kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBidG5PazogIkNvbnRpbnVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c6ICI8aDI+V2luZG93czxzcGFuIHN0eWxlPSdjb2xvcjogbGltZSc+Ukc8L3NwYW4+PC9oMj48YnI+PGJyPjxiIHN0eWxlPSdjb2xvcjogYmx1ZSc+RmlsZXMgZG93bmxvYWRlZCwgcGxlYXNlIHdhaXQgYSBmZXcgc2Vjb25kczxicj53aGlsZSB3ZSB3YXN0ZSB5b3VyIHRpbWUuPC9iPiIKICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHJvbXB0KHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICJPcmRlciBGb29kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuT2s6ICJPcmRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0bkNhbmNlbDogIlF1aXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c6ICI8aDI+V2luZG93czxzcGFuIHN0eWxlPSdjb2xvcjogbGltZSc+Ukc8L3NwYW4+PC9oMj4gPGIgc3R5bGU9J2NvbG9yOiBibHVlJz5BdmFpbGFibGUgRm9vZDo8YnI+PGJyPlR5cGUgdGhlIG5hbWUgb2YgdGhlIGZvb2QgdGhhdCB5b3Ugd2FudDo8L2I+IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgJycsIGZ1bmN0aW9uKG9rLCB0ZXh0KXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9rKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsZXJ0KHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0bk9rOiAiUXVpdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VuZDogIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6ICIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICJPcmRlciBGb29kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZzogIjxoMj5XaW5kb3dzPHNwYW4gc3R5bGU9J2NvbG9yOiBsaW1lJz5SRzwvc3Bhbj48L2gyPjxicj48YnI+PGI+U29ycnkgLSB0aGUgZm9vZCB5b3Ugb3JkZXJlZCBoYXMgc29sZCBvdXQ8YnI+PGJyPldlIHdpbGwgaGF2ZSBzb21lIG1vcmUgaW4gdmVyeSBzaG9ydGx5ITwvYj4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24ob2spewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9rKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbGVydCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuT2s6ICExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAiT3JkZXIgRm9vZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291bmQ6ICIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnOiAiPGgyPldpbmRvd3M8c3BhbiBzdHlsZT0nY29sb3I6IGxpbWUnPlJHPC9zcGFuPjwvaDI+PGJyPjxiPlRoYW5rcyBmb3IgdmlzaW5nISBDb21lIGJhY2sgYWdhaW4gc29vbiE8YnI+PGJyPlRoZXJlJ3MgZW5vdWdoIGZvb2QgZm9yIGV2ZXJ5b25lIeKEojwvYj4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAzNTAwKQogICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICAgfSwgNzAwMCkKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJHbyBPbmxpbmUiLAogICAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICRhbGVydCh7CiAgICAgICAgICAgICAgICAgIHRpdGxlOiAiSW50ZXJuZXQgRXhwbG9yZXIiLAogICAgICAgICAgICAgICAgICBzb3VuZDogIiIsCiAgICAgICAgICAgICAgICAgIGltZzogIiIsCiAgICAgICAgICAgICAgICAgIG1zZzogIjxoMj5JTlRFUk5FVCBFWFBMT1JFUjwvaDI+PGJyPjxicj48aDEgc3R5bGU9J2NvbG9yOiBibHVlJz5lPC9oMT4gPGgyPjcuNDk4MzA2OTY4MjA8L2gyPiIsCiAgICAgICAgICAgICAgICAgIGJ0bk9rOiAiQ29udGludWUiCiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbihvayl7CiAgICAgICAgICAgICAgICAgIGlmIChvayl7CiAgICAgICAgICAgICAgICAgICAgJGFsZXJ0KHsKICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAiSW50ZXJuZXQgRXhwbG9yZXIiLAogICAgICAgICAgICAgICAgICAgICAgc291bmQ6ICIiLAogICAgICAgICAgICAgICAgICAgICAgaW1nOiAiIiwKICAgICAgICAgICAgICAgICAgICAgIGJ0bk9rOiAiQ29udGludWUiLAogICAgICAgICAgICAgICAgICAgICAgbXNnOiAiICIsCiAgICAgICAgICAgICAgICAgICAgICBmb290ZXI6ICJDb25uZWN0aW5nLi4uIgogICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKG9rKXsKICAgICAgICAgICAgICAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsZXJ0KHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZzogIlVuYWJsZSB0byBjb25uZWN0LlxuVGhlcmUgY291bGQgYmUgc2V2ZXJhbCByZWFzb25zOlxuICAxLiBZb3UgZG8gbm90IGhhdmUgYW4gSVNQXG4gIDIuIFRoZSBpbnRlcm5ldCBpcyBicm9rZW5cbiAgMy4gWW91IGFyZSBnb2luZyB0byBhIHNpdGUuIgogICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKG9rKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsZXJ0KHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZzogImllZXhwbG9yZS5leGUgaGFzIHBlcmZvcm1lZCBhblxuaWxsZWdhbCBvcHBlcmF0aW9uIGZvciBubyByZWFzb24uXG5Qcm9iYWJseSBiZWNhdXNlIHlvdSBzbWVsbC4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTQwMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICAgICB9LCAyMDAwKQogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIlBhaW50IiwKICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAkYWxlcnQoewogICAgICAgICAgICAgICAgICB0aXRsZTogIiIsCiAgICAgICAgICAgICAgICAgIGltZzogIi9jL3N5cy9za2lucy93OTMvYXBwcy9wYWludC5wbmciLAogICAgICAgICAgICAgICAgICBzb3VuZDogIiIsCiAgICAgICAgICAgICAgICAgIG1zZzogIjxoMSBzdHlsZT0nY29sb3I6IHJlZCc+UEFJTlQ8L2gxPjxicj48YnI+PGgyIHN0eWxlPSd0ZXh0LWFsaWduOiBsZWZ0OyBjb2xvcjogbGltZSc+TE9BRElORzwvaDI+IiwKICAgICAgICAgICAgICAgICAgYnRuT2s6ICJDb250aW51ZSIKICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKG9rKXsKICAgICAgICAgICAgICAgICAgaWYgKG9rKSB7CiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSAkYWxlcnQoe3RpdGxlOiAiIiwgbXNnOiAicGFpbnQuZXhlIGhhcyBwZXJmb3JtZWQgYW4gaWxsZWdhbFxub3BwZXJhdGlvbiBmb3Igbm8gcmVhc29uLiJ9KTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yn0sIDE3NSk7c2V0VGltZW91dChmdW5jdGlvbigpe2J9LCAzNTApO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtifSwgNTI1KTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yn0sIDcwMCk7c2V0VGltZW91dChmdW5jdGlvbigpe2J9LCA4MjUpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtifSwgMTAwMCkKICAgICAgICAgICAgICAgICAgICB9LCA4MDApCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIkhlbHAiLAogICAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICRwcm9tcHQoewogICAgICAgICAgICAgICAgICB0aXRsZTogIldpbmRvd3MgUkcgSGVscCIsCiAgICAgICAgICAgICAgICAgIGJ0bk9rOiAiU2VhcmNoIiwKICAgICAgICAgICAgICAgICAgbXNnOiAiPGgyPldpbmRvd3M8c3BhbiBzdHlsZT0nY29sb3I6IGxpbWUnPlJHPC9zcGFuPjwvaDI+PGJyPjxoMz5IRUxQPC9oMz48YnI+VGhlIHVwZGF0ZWQgV2luZG93cyBIZWxwIHNlcnZpY2UgaXMgc28gc2ltcGxlIHRvIHVzZS4gRW50ZXIgb25lIG9yIG1vcmUgd29yZHMgcmVnYXJkaW5nIHdoYXQgeW91IG5lZWQgaGVscCBvbiBhbmQgV2luZG93cyBSRyB3aWxsIGJlIGhhcHB5IHRvIGhlbHAuPGJyPjxicj5IZWxwIFRlcm1zOiIKICAgICAgICAgICAgICAgIH0sICdFbnRlciBTZWFyY2ggSGVyZScsIGZ1bmN0aW9uKG9rLCB0ZXh0KXsKICAgICAgICAgICAgICAgICAgaWYgKG9rKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSB0ZXh0OwogICAgICAgICAgICAgICAgICAgICRhbGVydCh7CiAgICAgICAgICAgICAgICAgICAgICBzb3VuZDogIiIsCiAgICAgICAgICAgICAgICAgICAgICBpbWc6ICIiLAogICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICIiLAogICAgICAgICAgICAgICAgICAgICAgYnRuT2s6ICJDb250aW51ZSIsCiAgICAgICAgICAgICAgICAgICAgICBtc2c6ICI8aDI+V2luZG93czxzcGFuIHN0eWxlPSdjb2xvcjogbGltZSc+Ukc8L3NwYW4+PC9oMj48YnI+PGgzPkhFTFA8L2gzPjxicj5QbGVhc2Ugd2FpdCB3aGlsZSBXaW5kb3dzIHNlYXJjaGVzIHRoZSBXaW5kb3dzIGhlbHAgZGF0YWJhc2UiCiAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24ob2spewogICAgICAgICAgICAgICAgICAgICAgaWYgKG9rKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAkYWxlcnQoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuT2s6ICJWaWV3IFBvc3NpYmxlIE1hdGNoZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc291bmQ6ICIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZzogIjxoMj5XaW5kb3dzPHNwYW4gc3R5bGU9J2NvbG9yOiBsaW1lJz5SRzwvc3Bhbj48L2gyPjxicj48aDM+SEVMUDwvaDM+PGJyPllvdSBzZWFyY2hlZCBmb3I6PGJyPiAgICAgIiArIHMgKyAiPGJyPjxicj48YnI+U29ycnkgLSBXaW5kb3dzIGRpZCBub3QgZmluZCBhbnkgbWF0Y2hlcy4gSG93ZXZlciwgaXQgZm91bmQgPGI+MzwvYj4gcG9zc2libGVcbm1hdGNoZXMuIgogICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKG9rKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWxlcnQoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VuZDogIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c6ICI8aDI+V2luZG93czxzcGFuIHN0eWxlPSdjb2xvcjogbGltZSc+Ukc8L3NwYW4+PC9oMj48YnI+PGgzPkhFTFA8L2gzPjxicj5Zb3Ugc2VhcmNoZWQgZm9yOjxicj4gICAgICIgKyBzICsgIjxicj5Qb3NzaWJsZSBtYXRjaGVzOjxicj48YnI+ICAgSG93IGRvIEkgZ3JvdyBib25zaWEgdHJlZXM/PGJyPjxicj4gICBXaHkgY2FuIGZpc2ggc3dpbSBzbyB3ZWxsPzxicj48YnI+ICAgSG93IGRvIEkgcHVyY2hhc2UgbGltZT8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0bk9rOiAiVmlldyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24ob2spewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWxlcnQoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c6ICJXaW5kb3dzIGhhcyBjYXVzZWQgYSBnZW5lcmFsIHByb3RlY3Rpb24gZmF1bHQgaW4gd2luaGVscC5leGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCA5MDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMDApCiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiUmVib290IiwKICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKCl7JGV4ZSgncmVib290Jyl9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiU2h1dCBEb3duIiwKICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAkYWxlcnQoewogICAgICAgICAgICAgICAgICB0aXRsZTogIiIsCiAgICAgICAgICAgICAgICAgIG1zZzogIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBxdWl0IHRoaXNcbndvbmRlcmZ1bCBvcGVyYXRpbmcgc3lzdGVtP1xuVGhlcmUgaXMgYSBoaWdoIGNoYW5jZSBvZiB5b3VyXG5wcm9jZXNzb3Igb3ZlcmhlYXRpbmcuIiwKICAgICAgICAgICAgICAgICAgYnRuT2s6ICJZZXMiLAogICAgICAgICAgICAgICAgICBidG5DYW5jZWw6ICJObyIKICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKG9rKXsKICAgICAgICAgICAgICAgICAgaWYgKG9rKSB7CiAgICAgICAgICAgICAgICAgICAgJGFsZXJ0KHsKICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAiIiwKICAgICAgICAgICAgICAgICAgICAgIGJ0bk9rOiAiWWVzIiwKICAgICAgICAgICAgICAgICAgICAgIGJ0bkNhbmNlbDogIk5vIiwKICAgICAgICAgICAgICAgICAgICAgIG1zZzogIkFyZSB5b3Ugc3VyZT9cbldoeSBub3csIGluc3RlYWQgb2Ygc2h1dHRpbmcgZG93bixcbm9yZGVyIHNvbWUgZGVsaWNpb3VzIGZvb2QgZnJvbSBvdXJcbndpZGUgcmFuZ2U/IgogICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKG9rKXsKICAgICAgICAgICAgICAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgICAgICAgICAkYWxlcnQoewogICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBidG5PazogIlllcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuQ2FuY2VsOiAiTm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1zZzogIkFyZSB5b3Ugc3VyZT9cbllvdSBjb3VsZCBnbyBvbiBwYWludCBhbmQgZG8gc29tZVxuZ2xvcmlvdXMgYXJ0d29yayEiCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKG9rKXsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbGVydCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0bk9rOiAiWWVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuQ2FuY2VsOiAiTm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZzogIkFyZSB5b3Ugc3VyZT9cblN1cmVsZXkgeW91IGxvdmUgV2luZG93cyBSRyBtb3JlXG50aGFuIHRoaXMhIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24ob2spewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWxlcnQoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuT2s6ICJZZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuQ2FuY2VsOiAiTm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnOiAiQXJlIHlvdSBzdXJlP1xuRmluZS4gSWYgeW91IGNsaWNrIHllcyBub3csIFdpbmRvd3NcblJHIHdpbGwgc2h1dCBkb3duLi4uIGhvbmVzdC4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24ob2spewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9rKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbGVydCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZzogIldpbmRvd3Mgd2FzIHVuYWJsZSB0byBzaHV0IGRvd24uXG5Zb3UgY291bGQgaGF2ZSBsZWZ0IGEgcHJvZ3JhbSBvbi4uLlxuaXMgdGhhdCB3aGF0IHlvdSd2ZSBkb25lPyBJcyBpdD8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKG9rKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbGVydCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnOiAiV2luZG93cyB3YXMgdW5hYmxlIHRvIHNodXQgZG93bi5cblRoaXMgY291bGQgYmUgZHVlIHRvIHRoZSBidWlsZCB1cCBvZlxubGltZXNjYWxlIG9uIHlvdXIgcHJvY2Vzc29yLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKG9rKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9rKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeyRleGUoJ3NodXRkb3duJyl9LCAxOTI1KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7bmFtZToiXG5cbiA8IFNUQVJUIEhFUkUgIn0sCiAgICAgICAge25hbWU6IiDigI0g4oCNIOKAjSAifSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiPGNlbnRlcj48aW1nIHNyYz0nL2Mvc3lzL3NraW5zL3c5My9kZXZpY2VzL2NvbXB1dGVyLnBuZycgd2lkdGg9JzMyJz48YnI+TXkgQ29tcHV0ZXI8L2NlbnRlcj4iLAogICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpewogICAgICAgICAgICAkYWxlcnQoewogICAgICAgICAgICAgIHRpdGxlOiAiTXkgQ29tcHV0ZXIiLAogICAgICAgICAgICAgIG1zZzogIk15IENvbXB1dGVyXG5cbkZyb20gaGVyZSB5b3UgY2FuIGJyZWFrIHlvdXIgY29tcHV0ZXIuIiwKICAgICAgICAgICAgICBidG5PazogITEsCiAgICAgICAgICAgICAgc291bmQ6ICIiLAogICAgICAgICAgICAgIGltZzogIiIsCiAgICAgICAgICAgICAgbWVudTogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBuYW1lOiAiPGNlbnRlcj48aW1nIHNyYz0nL2Mvc3lzL3NraW5zL3c5My9kZXZpY2VzL2RyaXZlLXN0b3JhZ2UuZ2lmJyB3aWR0aD0nMzInPjxicj4oQTopPC9jZW50ZXI+IiwKICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICRhbGVydCh7CiAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogIiIsCiAgICAgICAgICAgICAgICAgICAgICBidG5PazogITEsCiAgICAgICAgICAgICAgICAgICAgICBtc2c6ICJEcml2ZSBBOiBpcyBub3QgYWNjZXNzYWJsZS5cblBsZWFzZSBhbnN1cmUgdGhlcmUgaXMgYSBkaXNrIGluIGRyaXZlXG5BOiBhbmQgdHJ5IGFnYWluLiIKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBuYW1lOiAiPGNlbnRlcj48aW1nIHNyYz0nL2Mvc3lzL3NraW5zL3c5My9kZXZpY2VzL2RyaXZlLWhhcmRkaXNrLmdpZicgd2lkdGg9JzMyJz48YnI+KE46KTwvY2VudGVyPiIsCiAgICAgICAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAkd2luZG93LmN1cnJlbnQuZGVzdHJveSgpOyRhbGVydCh7CiAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogIihDOikiLAogICAgICAgICAgICAgICAgICAgICAgYnRuT2s6ICExLAogICAgICAgICAgICAgICAgICAgICAgc291bmQ6ICIiLAogICAgICAgICAgICAgICAgICAgICAgaW1nOiAiIiwKICAgICAgICAgICAgICAgICAgICAgIG1zZzogIihDOilcblxuQ2FwYWNpdHk6IDE1Z2RcblVzZWQ6IDE0LjlnYlxuRnJlZTogMC4wZ2IiLAogICAgICAgICAgICAgICAgICAgICAgbWVudTogWwogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIjxjZW50ZXI+PGltZyBzcmM9Jy9jL3N5cy9za2lucy93OTMvcGxhY2VzL2ZvbGRlci5wbmcnIHdpZHRoPSczMic+PGJyPldpbmRvd3M8L2NlbnRlcj4iLAogICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHJvbXB0KHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291bmQ6ICJhbGVydCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogIi9jL3N5cy9za2lucy93OTMvYWxlcnQucG5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c6ICJXaW5kb3dzIGlzIGEgcHJvdGVjdGVkIGZvbGRlclxuUGxlYXNlIGVudGVyIGFkbWluaXN0cmF0b3IgcGFzc3dvcmRcbnRvIGNvbnRpbnVlLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHAsIGZ1bmN0aW9uKG9rLCB0ZXh0KXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9rKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSB0ZXh0OyRhbGVydCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c6ICJUaGUgcGFzc3dvcmQgeW91IGVudGVyZWQsIHdoaWNoXG53YXM6XG4gICAiICsgdGV4dCArICJcbldhcyBpbmNvcnJlY3QuXG5QbGVhc2UgZ28gYXdheS4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIG5hbWU6ICI8Y2VudGVyPjxpbWcgc3JjPScvYy9zeXMvc2tpbnMvdzkzL2Nkcm9tLnBuZycgd2lkdGg9JzMyJz48YnI+KFI6KTwvY2VudGVyPiIsCiAgICAgICAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAkYWxlcnQoewogICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICIiLAogICAgICAgICAgICAgICAgICAgICAgbXNnOiAiQ291bGQgbm90IGZpbmQgQ0Qgd2l0aCBsYWJlbDpcbkhvdXNlQnVpbGRlclxuXG5JZiB0aGUgQ0QgaXMgc3RpbGwgaW4gdGhlIGRyaXZlLCBpdCBtYXkgcmVxdWlyZSBzaG9vdGluZywgaGVhdGluZywgY292ZXJpbmcgaW4gY2xpbmdmaWxtLCBkZXN0cm95aW5nLCBlYXRpbmcsIHNtaWxpbmcgb3IgY2xlYW5pbmcuIgogICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKG9rKXsKICAgICAgICAgICAgICAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgICAgICAgICAkYWxlcnQoewogICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c6ICJXaW5kb3dzIGhhcyBjYXVzZWQgYSBnZW5lcmFsIHByb3RlY3Rpb24gZmF1bHQgaW4gZXhwbG9yZXIuZXhlXG5cbklmIHRoaXMgZmlsZSBpcyBncmV5LCBpdCBtYXkgcmVxdWlyZSBmZWNvbG9ncGlucyIKICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0pCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiPGNlbnRlcj48aW1nIHNyYz0nL2Mvc3lzL3NraW5zL3c5My9kb2N1bWVudHMucG5nJyB3aWR0aD0nMzInPjxicj5NeSBEb2N1bWVudHM8L2NlbnRlcj4iLAogICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpewogICAgICAgICAgICAkYWxlcnQoewogICAgICAgICAgICAgIHRpdGxlOiAiTXkgRG9jdW1lbnRzIiwKICAgICAgICAgICAgICBpZDogImV4cGxvcmVyIiwKICAgICAgICAgICAgICBpbWc6ICIiLAogICAgICAgICAgICAgIHNvdW5kOiAiIiwKICAgICAgICAgICAgICBidG5PazogITEsCiAgICAgICAgICAgICAgbXNnOiAiWW91IGJvcmluZyBhcnNlLiBHZXQgc29tZSBkb2N1bWVudHMgYmVmb3JlIHlvdSBjb21lIGluIGhlcmUgbG9va2luZyBmb3IgdGhlbS4iCiAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeyRhbGVydCh7dGl0bGU6ICIiLCBtc2c6ICJleHBsb3Jlci5leGUgaGFzIHBlcmZvcm1lZCBhblxuaWxsZWdhbCBvcHBlcmF0aW9uLCBhbmQgd2lsbCBub3cgYmVcbmNsb3NlZC4ifSl9LCAzMDAwKQogICAgICAgICAgICB9KQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIjxjZW50ZXI+PGltZyBzcmM9Jy9jL3N5cy9za2lucy93OTMvdHJhc2gucG5nJyB3aWR0aD0nMzInPjxicj5SZWN5Y2xlPGJyPkJpbjwvY2VudGVyPiIsCiAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICRhbGVydCh7CiAgICAgICAgICAgICAgYnRuT2s6ICJFbXB0eSIsCiAgICAgICAgICAgICAgc291bmQ6ICIiLAogICAgICAgICAgICAgIGltZzogIiIsCiAgICAgICAgICAgICAgdGl0bGU6ICJSZWN5Y2xlIEJpbiIsCiAgICAgICAgICAgICAgbXNnOiAiUmVjeWNsZSBCaW48YnI+PGJyPlRoaXMgaXMgd2hlcmUgc3R1ZmYgeW91IGRvbid0IHdhbnQgZ2V0cyBzaG92ZWQuPGJyPjxicj5BbHNvLCB0aGlzIGlzIHdoZXJlIHRoZSBmaWxlcyB0aGF0IHdpbmRvd3MgaGFzIGRlbGV0ZWQgZm9yIG5vIHJlYXNvbiBnZXQgc2VudC48YnI+PGJyPkNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gZW1wdHkgdGhlIHJlY3ljbGUgYmluLiIsCiAgICAgICAgICAgICAgbWVudTogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBuYW1lOiAiPGNlbnRlcj48aW1nIHNyYz0nL2Mvc3lzL3NraW5zL3c5My9kZXZpY2VzL2RyaXZlLWhhcmRkaXNrLmdpZicgd2lkdGg9JzMyJz48YnI+KE46KTwvY2VudGVyPiIsCiAgICAgICAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAkYWxlcnQoewogICAgICAgICAgICAgICAgICAgICAgbXNnOiAiQ2FuIG5vdCBvcGVuIGZpbGUgYmVjYXVzZSBpdCBpcyBpbiB0aGUgcmVjeWNsZSBiaW4uIgogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIG5hbWU6ICI8Y2VudGVyPjxpbWcgc3JjPScvYy9zeXMvc2tpbnMvdzkzL21pbWUvbW9kZWwucG5nJyB3aWR0aD0nMzInPjxicj5leHBsb3Jlci5leGU8L2NlbnRlcj4iLAogICAgICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgJGFsZXJ0KHsKICAgICAgICAgICAgICAgICAgICAgIG1zZzogIkNhbiBub3Qgb3BlbiBmaWxlIGJlY2F1c2UgaXQgaXMgaW4gdGhlIHJlY3ljbGUgYmluLiIKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBuYW1lOiAiPGNlbnRlcj48aW1nIHNyYz0nL2Mvc3lzL3NraW5zL3c5My9taW1lL21vZGVsLnBuZycgd2lkdGg9JzMyJz48YnI+dXNlci5leGU8L2NlbnRlcj4iLAogICAgICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgJGFsZXJ0KHsKICAgICAgICAgICAgICAgICAgICAgIG1zZzogIkNhbiBub3Qgb3BlbiBmaWxlIGJlY2F1c2UgaXQgaXMgaW4gdGhlIHJlY3ljbGUgYmluLiIKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBuYW1lOiAiPGNlbnRlcj48aW1nIHNyYz0nL2Mvc3lzL3NraW5zL3c5My9taW1lL21vZGVsLnBuZycgd2lkdGg9JzMyJz48YnI+cmVnaXN0ZXIuZXhlPC9jZW50ZXI+IiwKICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICRhbGVydCh7CiAgICAgICAgICAgICAgICAgICAgICBtc2c6ICJDYW4gbm90IG9wZW4gZmlsZSBiZWNhdXNlIGl0IGlzIGluIHRoZSByZWN5Y2xlIGJpbi4iCiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogIjxjZW50ZXI+PGltZyBzcmM9Jy9jL3N5cy9za2lucy93OTMvbWltZS9tb2RlbC5wbmcnIHdpZHRoPSczMic+PGJyPndpbi5jb208L2NlbnRlcj4iLAogICAgICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgJGFsZXJ0KHsKICAgICAgICAgICAgICAgICAgICAgIG1zZzogIkNhbiBub3Qgb3BlbiBmaWxlIGJlY2F1c2UgaXQgaXMgaW4gdGhlIHJlY3ljbGUgYmluLiIKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBuYW1lOiAiPGNlbnRlcj48aW1nIHNyYz0nL2Mvc3lzL3NraW5zL3c5My9taW1lL21vZGVsLnBuZycgd2lkdGg9JzMyJz48YnI+YXV0b2V4ZWMuYmF0PC9jZW50ZXI+IiwKICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICRhbGVydCh7CiAgICAgICAgICAgICAgICAgICAgICBtc2c6ICJDYW4gbm90IG9wZW4gZmlsZSBiZWNhdXNlIGl0IGlzIGluIHRoZSByZWN5Y2xlIGJpbi4iCiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogIjxjZW50ZXI+PGltZyBzcmM9Jy9jL3N5cy9za2lucy93OTMvbWltZS9tb2RlbC5wbmcnIHdpZHRoPSczMic+PGJyPmNvbmZpZy5zeXM8L2NlbnRlcj4iLAogICAgICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgJGFsZXJ0KHsKICAgICAgICAgICAgICAgICAgICAgIG1zZzogIkNhbiBub3Qgb3BlbiBmaWxlIGJlY2F1c2UgaXQgaXMgaW4gdGhlIHJlY3ljbGUgYmluLiIKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBuYW1lOiAiPGNlbnRlcj48aW1nIHNyYz0nL2Mvc3lzL3NraW5zL3c5My9taW1lL21vZGVsLnBuZycgd2lkdGg9JzMyJz48YnI+cnVuZGxsMzIuZGxsPC9jZW50ZXI+IiwKICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICRhbGVydCh7CiAgICAgICAgICAgICAgICAgICAgICBtc2c6ICJDYW4gbm90IG9wZW4gZmlsZSBiZWNhdXNlIGl0IGlzIGluIHRoZSByZWN5Y2xlIGJpbi4iCiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LCBmdW5jdGlvbigpewogICAgICAgICAgICAgICRhbGVydCh7CiAgICAgICAgICAgICAgICB0aXRsZTogIiIsCiAgICAgICAgICAgICAgICBtc2c6ICJDb3VsZCBub3QgZGVsZXRlIChOOilcblRoZXJlIGlzIGEgc2hhcmluZyB2aW9sYXRpb24iCiAgICAgICAgICAgICAgfSwgZnVuY3Rpb24ob2spewogICAgICAgICAgICAgICAgaWYgKG9rKSB7CiAgICAgICAgICAgICAgICAgICRhbGVydCh7CiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICIiLAogICAgICAgICAgICAgICAgICAgIG1zZzogIkNvdWxkIG5vdCBkZWxldGUgZXhwbG9yZXIuZXhlXG5UaGVyZSBpcyBhIHNoYXJpbmcgdmlvbGF0aW9uIgogICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgICAgICAgJGFsZXJ0KHsKICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICIiLAogICAgICAgICAgICAgICAgICAgICAgICBtc2c6ICJDb3VsZCBub3QgZGVsZXRlIHVzZXIuZXhlXG5UaGVyZSBpcyBhIHNoYXJpbmcgdmlvbGF0aW9uIgogICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9rKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsZXJ0KHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZzogIkNvdWxkIG5vdCBkZWxldGUgcmVnaXN0ZXIuZXhlXG5UaGVyZSBpcyBhIHNoYXJpbmcgdmlvbGF0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsZXJ0KHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnOiAiQ291bGQgbm90IGRlbGV0ZSB3aW4uY29tXG5UaGVyZSBpcyBhIHNoYXJpbmcgdmlvbGF0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsZXJ0KHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c6ICJDb3VsZCBub3QgZGVsZXRlIGF1dG9leGVjLmJhdFxuVGhlcmUgaXMgYSBzaGFyaW5nIHZpb2xhdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbGVydCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c6ICJDb3VsZCBub3QgZGVsZXRlIGNvbmZpZy5zeXNcblRoZXJlIGlzIGEgc2hhcmluZyB2aW9sYXRpb24iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24ob2spewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9rKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbGVydCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZzogIkNvdWxkIG5vdCBkZWxldGUgcnVuZGxsMzIuZXhlXG5UaGVyZSBpcyBhIHNoYXJpbmcgdmlvbGF0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgIH0pCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiPGNlbnRlcj48aW1nIHNyYz0nL2Mvc3lzL3NraW5zL3c5My9taW1lL3ZpZGVvLnBuZycgd2lkdGg9JzMyJz48YnI+V2luZG93czxicj5NZWRpYSBQbGF5ZXI8L2NlbnRlcj4iLAogICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpewogICAgICAgICAgICAkYWxlcnQoewogICAgICAgICAgICAgIGltZzogIiIsCiAgICAgICAgICAgICAgc291bmQ6ICIiLAogICAgICAgICAgICAgIHRpdGxlOiAiV2luZG93cyBNZWRpYSBQbGF5ZXIiLAogICAgICAgICAgICAgIGJ0bk9rOiAhMSwKICAgICAgICAgICAgICBtc2c6ICJsb2wgc3J5IGlkayBob3cgdG8gZW1iZWQgdmlkZW9zIGkgZG9udCBoYXZlPGJyPjxidXR0b24+4pa277iPPC9idXR0b24+PGJ1dHRvbj7ij7nvuI8+PC9idXR0b24+IOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlCIKICAgICAgICAgICAgfSwgZnVuY3Rpb24oKXsKICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAkYWxlcnQoewogICAgICAgICAgICAgICAgICB0aXRsZTogIiIsCiAgICAgICAgICAgICAgICAgIG1zZzogIm1lZGlhcGxheWVyLmV4ZSBoYXMgcGVyZm9ybWVkIGFuXG5pbGxlZ2FsIG9wcGVyYXRpb24gYW5kIHdpbGwgY2xvc2UuLi5cbmlzbid0IHRoYXQgYSBzaGFtZT8gSXNuJ3QgaXQ/IgogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICB9LCA0KQogICAgICAgICAgICB9KQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIiDigI0g4oCNIOKAjSDigI0g4oCNIOKAjSDigI0g4oCNIOKAjSDigI0g4oCNIOKAjSDigI0g4oCNIOKAjSDigI0g4oCNIOKAjSDigI0g4oCNIOKAjSAiCiAgICAgICAgfQogICAgICAgIF0KICAgIH0pOwogICAgc2V0VGltZW91dChmdW5jdGlvbigpewogICAgICAkYWxlcnQoewogICAgICAgIHRpdGxlOiAiIiwKICAgICAgICBtc2c6ICJSZXF1aXJlZCBETEw6PGJyPiAgICAgICAgICAgICAgICAgICAgIHdpbmRvd3MuZGxsPGJyPldhcyBmb3VuZC4gU28gV2luZG93cyBoYXMgZGVsZXRlZDxicj5pdC4iCiAgICAgIH0pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXskYWxlcnQoe3RpdGxlOiAiIiwgY2VudGVyOiAhMSwgbXNnOiAiUmVxdWlyZWQgRExMOjxicj4gICAgICAgICAgICAgICAgICAgICB3aW5kb3dzLmRsbDxicj5XYXMgZm91bmQuIFNvIFdpbmRvd3MgaGFzIGRlbGV0ZWQ8YnI+aXQuIn0pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXskYWxlcnQoe3RpdGxlOiAiIiwgY2VudGVyOiAhMSwgbXNnOiAiUmVxdWlyZWQgRExMOjxicj4gICAgICAgICAgICAgICAgICAgICB3aW5kb3dzLmRsbDxicj5XYXMgZm91bmQuIFNvIFdpbmRvd3MgaGFzIGRlbGV0ZWQ8YnI+aXQuIn0pfSwgMTAwKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7JGFsZXJ0KHt0aXRsZTogIiIsIGNlbnRlcjogITEsIG1zZzogIlJlcXVpcmVkIERMTDo8YnI+ICAgICAgICAgICAgICAgICAgICAgd2luZG93cy5kbGw8YnI+V2FzIGZvdW5kLiBTbyBXaW5kb3dzIGhhcyBkZWxldGVkPGJyPml0LiJ9KX0sIDIwMCk7c2V0VGltZW91dChmdW5jdGlvbigpeyRhbGVydCh7dGl0bGU6ICIiLCBjZW50ZXI6ICExLCBtc2c6ICJSZXF1aXJlZCBETEw6PGJyPiAgICAgICAgICAgICAgICAgICAgIHdpbmRvd3MuZGxsPGJyPldhcyBmb3VuZC4gU28gV2luZG93cyBoYXMgZGVsZXRlZDxicj5pdC4ifSl9LCAzMDApO3NldFRpbWVvdXQoZnVuY3Rpb24oKXskYWxlcnQoe3RpdGxlOiAiIiwgY2VudGVyOiAhMSwgbXNnOiAiUmVxdWlyZWQgRExMOjxicj4gICAgICAgICAgICAgICAgICAgICB3aW5kb3dzLmRsbDxicj5XYXMgZm91bmQuIFNvIFdpbmRvd3MgaGFzIGRlbGV0ZWQ8YnI+aXQuIn0pfSwgNDAwKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7JGFsZXJ0KHt0aXRsZTogIiIsIGNlbnRlcjogITEsIG1zZzogIlJlcXVpcmVkIERMTDo8YnI+ICAgICAgICAgICAgICAgICAgICAgd2luZG93cy5kbGw8YnI+V2FzIGZvdW5kLiBTbyBXaW5kb3dzIGhhcyBkZWxldGVkPGJyPml0LiJ9KX0sIDUwMCk7c2V0VGltZW91dChmdW5jdGlvbigpeyRhbGVydCh7dGl0bGU6ICIiLCBjZW50ZXI6ICExLCBtc2c6ICJSZXF1aXJlZCBETEw6PGJyPiAgICAgICAgICAgICAgICAgICAgIHdpbmRvd3MuZGxsPGJyPldhcyBmb3VuZC4gU28gV2luZG93cyBoYXMgZGVsZXRlZDxicj5pdC4ifSl9LCA2MDApO3NldFRpbWVvdXQoZnVuY3Rpb24oKXskYWxlcnQoe3RpdGxlOiAiIiwgY2VudGVyOiAhMSwgbXNnOiAiUmVxdWlyZWQgRExMOjxicj4gICAgICAgICAgICAgICAgICAgICB3aW5kb3dzLmRsbDxicj5XYXMgZm91bmQuIFNvIFdpbmRvd3MgaGFzIGRlbGV0ZWQ8YnI+aXQuIn0pfSwgNzAwKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7JGFsZXJ0KHt0aXRsZTogIiIsIGNlbnRlcjogITEsIG1zZzogIlJlcXVpcmVkIERMTDo8YnI+ICAgICAgICAgICAgICAgICAgICAgd2luZG93cy5kbGw8YnI+V2FzIGZvdW5kLiBTbyBXaW5kb3dzIGhhcyBkZWxldGVkPGJyPml0LiJ9KX0sIDgwMCk7c2V0VGltZW91dChmdW5jdGlvbigpeyRhbGVydCh7dGl0bGU6ICIiLCBjZW50ZXI6ICExLCBtc2c6ICJSZXF1aXJlZCBETEw6PGJyPiAgICAgICAgICAgICAgICAgICAgIHdpbmRvd3MuZGxsPGJyPldhcyBmb3VuZC4gU28gV2luZG93cyBoYXMgZGVsZXRlZDxicj5pdC4ifSl9LCA5MDApO3NldFRpbWVvdXQoZnVuY3Rpb24oKXskYWxlcnQoe3RpdGxlOiAiIiwgY2VudGVyOiAhMSwgbXNnOiAiUmVxdWlyZWQgRExMOjxicj4gICAgICAgICAgICAgICAgICAgICB3aW5kb3dzLmRsbDxicj5XYXMgZm91bmQuIFNvIFdpbmRvd3MgaGFzIGRlbGV0ZWQ8YnI+aXQuIn0pfSwgMTAwMCk7c2V0VGltZW91dChmdW5jdGlvbigpeyRhbGVydCh7dGl0bGU6ICIiLCBjZW50ZXI6ICExLCBtc2c6ICJSZXF1aXJlZCBETEw6PGJyPiAgICAgICAgICAgICAgICAgICAgIHdpbmRvd3MuZGxsPGJyPldhcyBmb3VuZC4gU28gV2luZG93cyBoYXMgZGVsZXRlZDxicj5pdC4ifSk7c2V0VGltZW91dChmdW5jdGlvbigpeyRhbGVydCh7dGl0bGU6ICIiLCBtc2c6ICJXaW5kb3dzIGNvdWxkIG5vdCBkZWxldGVcbmV4cGxvcmVyLmV4ZS5cblRoZSBmaWxlIGlzIGluIHVzZSBieSBXaW5kb3dzIn0sIGZ1bmN0aW9uKG9rKXsKICAgICAgICBpZiAob2spIHsKICAgICAgICAgICRhbGVydCh7CiAgICAgICAgICAgIGltZzogIiIsCiAgICAgICAgICAgIHNvdW5kOiAiIiwKICAgICAgICAgICAgdGl0bGU6ICIiLAogICAgICAgICAgICBhdXRvbWF4aW1pemU6ICEwLAogICAgICAgICAgICBjbG9zYWJsZTogITEsCiAgICAgICAgICAgIG1zZzogIjxiPldFTENPTUUgVE88YnI+PGgxPldpbmRvd3M8L2I+IDxzcGFuIHN0eWxlPSdjb2xvcjogbGltZSc+Ukc8L3NwYW4+PC9oMT48YnI+PGI+V0VMQ09NRSBUTyBXSU5ET1dTIDxzcGFuIHN0eWxlPSdjb2xvcjogbGltZSc+Ukc8L3NwYW4+IEJVSUxEIDIwNyBUSEVSRVxuQVJFIFNFVkVSQUwgTkVXIEFEVkFOQ0VNRU5UUyBJTiBUSElTXG5SRUxFQVNFLi4uIFJFQUQgT048L2I+IgogICAgICAgICAgfSwgZnVuY3Rpb24ob2spewogICAgICAgICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAkd2luZG93LmN1cnJlbnQuZGVzdHJveSgpOyRhbGVydCh7CiAgICAgICAgICAgICAgICBpbWc6ICIiLAogICAgICAgICAgICAgICAgc291bmQ6ICIiLAogICAgICAgICAgICAgICAgdGl0bGU6ICIiLAogICAgICAgICAgICAgICAgYXV0b21heGltaXplOiAhMCwKICAgICAgICAgICAgICAgIGNsb3NhYmxlOiAhMSwKICAgICAgICAgICAgICAgIG1zZzogIjxiPldFTENPTUUgVE88YnI+PGgxPldpbmRvd3M8L2I+IDxzcGFuIHN0eWxlPSdjb2xvcjogbGltZSc+Ukc8L3NwYW4+PC9oMT48YnI+PGI+V0lORE9XUyA8c3BhbiBzdHlsZT0nY29sb3I6IGxpbWUnPlJHPC9zcGFuPiBOT1cgQ09NRVMgV0lUSCBNSUNST1NPRlRcbldPUkQgQVMgU1RBTkRBUkQhIFNPIFlPVSBDQU4gRE8gQUxMIFxuWU9VUiBXT1JEIFBST0NFU1NJTkcgV0lUSCBFQVNFLjwvYj4iCiAgICAgICAgICAgICAgfSwgZnVuY3Rpb24ob2spewogICAgICAgICAgICAgICAgaWYgKG9rKSB7CiAgICAgICAgICAgICAgICAgICR3aW5kb3cuY3VycmVudC5kZXN0cm95KCk7JGFsZXJ0KHsKICAgICAgICAgICAgICAgIAlpbWc6ICIiLAogICAgICAgICAgICAgICAgCXNvdW5kOiAiIiwKICAgICAgICAgICAgICAgIAl0aXRsZTogIiIsCiAgICAgICAgICAgICAgIAkgCWF1dG9tYXhpbWl6ZTogITAsCiAgICAgICAgICAgICAgIAkgICAgY2xvc2FibGU6ICExLAogICAgICAgICAgICAgCSAgICBtc2c6ICI8Yj5XRUxDT01FIFRPPGJyPjxoMT5XaW5kb3dzPC9iPiA8c3BhbiBzdHlsZT0nY29sb3I6IGxpbWUnPlJHPC9zcGFuPjwvaDE+PGJyPjxiPkhBVkUgWU9VIE5PVElDRUQgVEhFIElDT05TIE9OIFRIRSBcbkRFU0tUT1A/IFlPVSBDQU4gQUNDRVNTIFlPVVIgRklMRVNcblFVSUNLRVIgQU5EIEVBU0lFUiBUSEFOIEVWRVIhPC9iPiIKICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24ob2spewogICAgICAgICAgICAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgICAgICAgJGFsZXJ0KHsKICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgc291bmQ6ICIiLAogICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogIiIsCiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXhpbWl6ZTogITAsCiAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NhYmxlOiAhMSwKICAgICAgICAgICAgICAgICAgICAgICAgbXNnOiAiPGI+V0VMQ09NRSBUTzxicj48aDE+V2luZG93czwvYj4gPHNwYW4gc3R5bGU9J2NvbG9yOiBsaW1lJz5SRzwvc3Bhbj48L2gxPjxicj48Yj5ZT1UgQ0FOIEZJTkQgT1VUIFRIRSBSRVNUIEZPUlxuWU9VUlNFTEYhIENMSUNLIE9LLCBBTkQgWU9VUiBPTiBZT1VSXG5XQVkgVE8gQU4gRUFTSUVSIExJRkUgV0lUSCBXSU5ET1dTIDxzcGFuIHN0eWxlPSdjb2xvcjogbGltZSc+Ukc8L3NwYW4+ITwvYj4iCiAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbihvayl7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICRhbGVydCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c6ICJDYW4gbm90IGZpbmQgYW55dGhpbmcuXG5QbGVhc2UgcmVpbnN0YWxsIFdpbmRvd3MuIgogICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKG9rKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9ICRhbGVydCh7dGl0bGU6ICIiLCBkcmFnZ2FibGU6ICExLCBtc2c6ICJXb3VsZCB5b3UgbGlrZSB0byB0YWtlIGEgbW9tZW50IHRvPGJyPnJlZ2lzdGVyIHlvdXIgY29weSBvZiBXaW5kb3dzIFJHPzxicj48aW5wdXQgdHlwZT0nY2hlY2tib3gnIGRpc2FibGVkPiBEbyBub3QgYXNrIG1lIHRoaXMgYWdhaW48L2lucHV0PiIsIGJ0bk9rOiAiTk8iLCBidG5DYW5jZWw6ICJZRVMifSwgZnVuY3Rpb24ob2spe2lmIChvaykgeyRhbGVydCh7dGl0bGU6ICIiLCBkcmFnZ2FibGU6ICExLCBtc2c6ICJXb3VsZCB5b3UgbGlrZSB0byB0YWtlIGEgbW9tZW50IHRvPGJyPnJlZ2lzdGVyIHlvdXIgY29weSBvZiBXaW5kb3dzIFJHPzxicj48aW5wdXQgdHlwZT0nY2hlY2tib3gnIGRpc2FibGVkPiBEbyBub3QgYXNrIG1lIHRoaXMgYWdhaW48L2lucHV0PiIsIGJ0bk9rOiAiWUVTIn0sIGZ1bmN0aW9uKG9rKXtpZiAob2spIHskYWxlcnQoe3RpdGxlOiAiIiwgbXNnOiAiQ2FuIG5vdCBsb2NhdGUgcmVnaXN0ZXIuZXhlLlxuV2luZG93cyB3b24ndCBib3RoZXIgc2VhcmNoaW5nLiJ9KX19KX0gZWxzZSB7JGFsZXJ0KHt0aXRsZTogIiIsIG1zZzogIkNhbiBub3QgbG9jYXRlIHJlZ2lzdGVyLmV4ZS5cbldpbmRvd3Mgd29uJ3QgYm90aGVyIHNlYXJjaGluZy4ifSl9fSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KQogICAgICAgICAgICB9CiAgICAgICAgICB9KQogICAgICAgIH0KICAgICAgfSk7fSwgMTAwMDApfSwgMTEwMCk7fSwgMjg1MCk7CiAgICB9LCAxNDcwMCkKICB9LCAxODAwKQp9LCAxMDUwKQogIH0KICB9LAogIGxlLl9hcHBzLmRlZnJhZyA9IHsKICAgIGNhdGVnb3JpZXM6ICJBbXVzZW1lbnQ7R2FtZXMiLAogIG5hbWU6ICJEZWZyYWciLAogIHRpdGxlOiAiRGVmcmFnIiwKICBpY29uOiAiL2MvcHJvZ3JhbXMvZGVmcmFnL2RlZnJhZ21lbnRhdGlvbi5naWYiLAogICAgICBleGVjOiBmdW5jdGlvbigpIHsKICAgICAgICAkd2luZG93LmNhbGwodGhpcywgewogICAgICAgICAgdXJsOiAiL2MvcHJvZ3JhbXMvZGVmcmFnL2luZGV4LnBocCIsCiAgICAgICAgICB3aWR0aDogNjQwLAogICAgICAgICAgaGVpZ2h0OiA0OTUsCiAgICAgICAgICByZXNpemFibGU6IGZhbHNlLAogICAgICAgICAgbWF4aW1pemFibGU6IGZhbHNlLAogICAgICAgICAgbWVudTogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIlN0YXJ0IiwKICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICBwbGF5UGF1c2UgPSAxOwogICAgICAgICAgJCgicCNpbmZvcyIpLnRleHQoInBpc3MiKTsKICAgICAgICAgIG5va2lhVHVuZS5wbGF5KCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIlBhdXNlIiwKICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICBwbGF5UGF1c2UgPSAwOwogICAgICAgICAgJCgicCNpbmZvcyIpLnRleHQoInBlZXBlZSBwb29wb28iKTsKICAgICAgICAgIG5va2lhVHVuZS5wYXVzZSgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJZZWFoIiwKICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAkY29uZmlybSh7CiAgICAgICAgICAgICAgICAgIG1zZzogIkRvIHlvdSB3YW50IHRvIHdpbiB0aGUgZ2FtZSBub3c/IiAKICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKG9rKXsKICAgICAgICAgICAgICAgICAgJGFsZXJ0KHsKICAgICAgICAgICAgICBtc2c6ICJDb25ncmF0dWxhdGlvbnMgISA8YnI+WW91ciBzY29yZSBpcyAiICsgIi0tLSIgKyAiLjxicj48YnI+UGFzc3dvcmQgaXMgRlVUVVIxOTkzIiwKICAgICAgICAgICAgICB0aXRsZTogJ0tpbmcgb2YgdGhlIGRheScsCiAgICAgICAgICAgICAgaW1nOiAnYy9zeXMvaWNvL3Ryb3BoeS5naWYnCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgIH0pOwogICAgICB9Cn0sCiAgbGUuX2FwcHMuaW52ZXJ0ID0gewogIGV4ZWM6IGZ1bmN0aW9uKCl7JGV4ZSgnZnggaW52ZXJ0Jyl9Cn0sCiAgbGUuX2FwcHMuZ3JheXNjYWxlID0gewogIGV4ZWM6IGZ1bmN0aW9uKCl7JGV4ZSgnZnggZ3JheXNjYWxlJyl9Cn0sCiAgbGUuX2FwcHMudHJvbGxib3ggPSB7CiAgICAgIGNhdGVnb3JpZXM6ICJOZXR3b3JrO0NoYXQiLAogICAgICBuYW1lOiAiVHJvbGxib3giLAogIHRpdGxlOiAiVHJvbGxib3giLAogICAgICBpY29uOiAiYXBwcy9jaGF0LmdpZiIsCiAgICAgIGV4ZWM6IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBkYXRhID0gewogICAgICAgICAgdXJsOiAiL3Ryb2xsYm94L2luZGV4LnBocCIsCiAgICAgICAgICB3aWR0aDogNjQwLAogICAgICAgICAgaGVpZ2h0OiA0MDAsCiAgICAgICAgICB0aXRsZTogIlRyb2xsYm94IiwKICAgICAgICAgIGljb246ICIvYy9zeXMvc2tpbnMvdzkzL2FwcHMvY2hhdC5naWYiLAogICAgICAgICAgbWVudTogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIlRvb2xzIiwKICAgICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBuYW1lOiAiU2VuZCBtZXNzYWdlcyB3aXRoIGludGVydmFsIiwKICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICRwcm9tcHQoewogICAgICAgICAgICAgICAgICAgICAgbXNnOiAibWVzc2FnZSA/IgogICAgICAgICAgICAgICAgICAgIH0sICcnLCBmdW5jdGlvbihvaywgdGV4dCl7CiAgICAgICAgICAgICAgICAgICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSB0ZXh0OwogICAgICAgICAgICAgICAgICAgICAgICAkcHJvbXB0KHsKICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c6ICJob3cgbWFueSBtaWxsaXNlY29uZHMgPyIKICAgICAgICAgICAgICAgICAgICAgICAgfSwgJycsIGZ1bmN0aW9uKG9rLCB0ZXh0KXsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gdGV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEludGVydmFsKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3aW5kb3cuY3VycmVudC5lbC5pZnJhbWUuY29udGVudFdpbmRvdy5zb2NrZXQuc2VuZCh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgaSkKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICB9OwogICAgICAgICR3aW5kb3cuY2FsbCh0aGlzLCBkYXRhKTsKICAgICAgfQogICAgfSwKICAgIGxlLl9hcHBzLnNldHRpbmdzID0gewogICAgICAgICAgICBjYXRlZ29yaWVzOiAiU3lzdGVtO1V0aWxpdHk7RWxlY3Ryb245MyIsCiAgICAgICAgICAgIGljb246ICIvYy9zeXMvc2tpbnMvdzkzL3NldHRpbmdzLnBuZyIsCiAgICAgICAgICAgIG5hbWU6ICJDb250cm9sIFBhbmVsIiwKICAgICAgICAgICAgZXhlYzogZnVuY3Rpb24oKSB7CgkJCQkKCQkJCQogICAgICAgICAgICAgICAgJHdpbmRvdy5jYWxsKCcnLCB7CiAgICAgICAgICAgICAgICAgIGNlbnRlcjogITAsCiAgICAgICAgICAgICAgICAgICAgbWVudTogW3sKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0NsZWFuJywKICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogJy9jL3N5cy9za2lucy93OTMvZmluZC5wbmcnLAogICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW3sKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdWaXJ1cyBDbGVhbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRleGUoJ2RvY3RvciAtLWNsZWFuJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0NsZWFuIEFsbCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRleGUoJ2tpbGxhbGwnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1N0eWxlcycsCiAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICcvYy9zeXMvc2tpbnMvdzkzL3N0YXRzLnBuZycsCiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1JhaW5ib3cgSWNvbnMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXhlKCdmeCBhY2lkIC51aV9pY29uJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1NlZS1UaHJvdWdoIFdpbmRvd3MnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXhlKCdmeCBkaXNjbyAudWlfd2luZG93X19oZWFkX19pY29uJyk7JGV4ZSgnZnggYmx1ZXJheSAudWlfd2luZG93X19oZWFkX19taW5pbWl6ZScpOyRleGUoJ2Z4IGJsdWVyYXkgLnVpX3dpbmRvd19faGVhZF9fbWF4aW1pemUnKTskZXhlKCdmeCBibHVlcmF5IC51aV93aW5kb3dfX2hlYWRfX2Nsb3NlJyk7JGV4ZSgnZnggeHJheSAudWlfd2luZG93X19tZW51Jyk7JGV4ZSgnZnggYmx1ZXJheSAudWlfbWVudV9faXRlbScpOyRleGUoJ2Z4IHhyYXkgLnVpX3dpbmRvd19fZm9vdCcpOyRleGUoJ2Z4IGRpc2NvIC51aV93aW5kb3dfX2J1dHRvbnMnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0ZsYXNoaW5nIExpZ2h0cycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRleGUoJ2Z4IHN0cm9ibycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICctLS0nCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdBYm91dCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbGVydC5pbmZvKCdTdHlsZXMgYXJlIHRoaW5ncyBkb25lIHdpdGggZnggY29tbWFuZHMuIFRvIGFjdGl2YXRlIFJhaW5ib3cgRm9sZGVyLCB5b3UgaGF2ZSB0byBoYXZlIGEgZm9sZGVyIG9uLXNjcmVlbi4gQ29tbWFuZHM6IDxicj5SYWluYm93IEZvbGRlcnM6IGZ4IGFjaWQgLnVpX2ljb25fX2ZvbGRlcjxicj5TZWUtVGhyb3VnaCBXaW5kb3dzOiBmeCB4cmF5IC51aV93aW5kb3c8YnI+Rmxhc2hpbmcgTGlnaHRzOiBmeCBzdHJvYm8nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ01vcmUgVG9vbHMnLAogICAgICAgICAgICAgICAgICAgICAgICBpY29uOiAnL2Mvc3lzL3NraW5zL3c5My9xdWVzdGlvbi5wbmcnLAogICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW3sKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdSdW4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHJvbXB0KCdKdXN0IHJ1biBzb21ldGhpbmcuJywgJycsIGZ1bmN0aW9uKG9rLCB0eHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9rKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXhlKHR4dCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdGaW5kJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHByb21wdCgnSnVzdCBmaW5kIHNvbWV0aGluZy4nLCAnJywgZnVuY3Rpb24ob2ssIHR4dCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRleGUoJ2ZpbmQgJyArIHR4dCArICcgLycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0FjY2Vzc29yaWVzJywKICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogJy9jL3N5cy9za2lucy93OTMvMTYvc3RhcnQucG5nJywKICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFt7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQ29kZU1pcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRleGUoJ2NvZGUnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnSGV4RWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXhlKCdoZXhlZCcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdQaXNrZWwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXhlKCdwaXNrZWwnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnSE9TVCBBbnRpdmlydXMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXhlKCdkb2N0b3IgLS1jbGVhbicpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsZXJ0KCc8Yj5IT1NUIENPTVBMRVRFIFNFQ1VSSVRZPC9iPjo8YnI+S2VlcCB0aGlzIHdpbmRvdyBydW5uaW5nIHNvIHZpcnVzZXMgY2FuXCd0IGVudGVyIHlvdXIgY29tcHV0ZXIhIEl0IHN0b3BzIGFueSBJRTYsIEdsaXRjaGVzIChFdmVuIENvcmdsaXRjaGVzKSwgSHlkcmFzLCBhbmQgREVSRUczMi5leGUhIDxiPkRvIG5vdCBjbG9zZSB0aGlzIHdpbmRvdy48L2I+PHNtYWxsPkFsc28sIGRvIG5vdCB1c2Uga2lsbGFsbCBvciBjbGVhbiBhbGwuIEl0IHdpbGwgbWFrZSB5b3UgaGF2ZSB0aGUgYW50aXZpcnVzIGZvcmV2ZXIuIEFuZCBldmVuIHRob3VnaCB5b3Ugd29uXCd0IGdldCB2aXJ1c2VzLCBpdCB3aWxsIGJlIGJhZCBpZiB5b3Ugd2FhbnQgdG8gZGVzdG95IHlvdXIgY29tcHV0ZXIuPC9zbWFsbD4nLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdJTlRFUk5FVCBFeHBsb3JlcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbGVydCgnSW50ZXJuZXQgZXhwbG9yZXIgd2lsIG5vdCBydW4gYmVjYXVzZSB5b3UgYXJlIHRyeWluZyB0byBhY2Nlc3MgdGhlIHdlYi4nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJXYWxscGFwZXIiLAogICAgICAgICAgICAgICAgICAgICAgaWNvbjogIi9jL2ZpbGVzL2ltYWdlcy9pY29ucy93aW5kb3cucG5nIiwKICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24oKXskZXhlKCd3YWxscGFwZXInKX0KICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdJbmZvJywKICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogJy9jL3N5cy9za2lucy93OTMvaW5mby5wbmcnLAogICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW3sKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdDbGVhbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbGVydC5pbmZvKCdDbGVhbnMgd2luZG93cy48YnI+Q2xlYW4gQWxsOiBDbGVhcnMgQWxsIFdpbmRvd3MgKGV4ZToga2lsbGFsbCk8YnI+VmlydXMgQ2xlYW46IEtpbGxzIEFsbCBWaXJ1c2VzIChleGU6IGRvY3RvciAtLWNsZWFuKScpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdTdHlsZXMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWxlcnQuaW5mbygnUmVhZCBhYm91dCBpdCBvbiBBYm91dC4nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgICAgICAgIH1dLAogICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnQ29udHJvbCBQYW5lbCcsCiAgICAgICAgICAgICAgICAgICAgcmVzaXphYmxlOiB0cnVlLAogICAgICAgICAgICAgICAgICAgIHdpZHRoOiA1MDAsCiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MDAsCiAgICAgICAgICAgICAgICAgICAgbWF4aW1pemFibGU6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgIGhlbHA6ICdUaGlzIHdhcyBtYWRlIGJ5IFwnSE9TVFwnLiBJdCB0b29rIGEgbG90IG9mIGVmZm9ydC4gXG5Ib3dldmVyLCB0aGUgc2V0dGluZ3MgYW5kIG9wdGlvbnMgbWVudSBhdCB0aGUgYm90dG9tIHdhcyBtYWRlIGJ5IHppYWQ4Ny4gQWxzbyB3YXMgcGFpbnN0YWtpbmdseSBhbm5veWluZy5cblxuYWxzbyBibG9ja2x5IHdhcyBoZXJlJywKICAgICAgICAgICAgICAgICAgICBpY29uOiAnL2Mvc3lzL3NraW5zL3c5My9zZXR0aW5ncy5wbmcnLAoJCQkJCWJ0bk9rOiAiU2F2ZSIsCgkJCQkJYnRuQ2FuY2VsOiAiQ2FuY2VsIiwKCQkJCQlodG1sOiAkZm9ybS5idWlsZChsZS5fc2V0dGluZ3MpLmVsCiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICB9CiAgfSwKICAgIGxlLl9hcHBzLnNodWZmbGUgPSB7CiAgICB0aXRsZTogIkZpdmUgQ2FyZCBTaHVmZmxlIiwKICAgIGljb246ICIvYy9zeXMvc2tpbnMvdzkzL21pbWUvYXVkaW8ucG5nIiwKICAgIGV4ZWM6IGZ1bmN0aW9uKCl7CiAgICAgICRleGUoJy9hL211c2ljL0ZpdmUgQ2FyZCBTaHVmZmxlLm1wMycpOyR3aW5kb3cuY3VycmVudC5taW5pbWl6ZSgpOyRhdWRpbygnL2EvbXVzaWMvRml2ZSBDYXJkIFNodWZmbGUubXAzJykucGxheSgpOyRleGUoJ3Rlcm1pbmFsJyk7JGxvZy53aGl0ZSgnTm93IHBsYXlpbmcuLi4nKTskbG9nKCdLZXZpbiBNYWNMZW9kIC0gRml2ZSBDYXJkIFNodWZmbGUnKQogICAgfQogIH0sCiAgICBsZS5fYXBwcy5sb2doZWxwID0gewogICAgY2F0ZWdvcmllczogIlV0aWxpdHkiLAogICAgdGVybWluYWw6IHRydWUsCiAgICBleGVjOiBmdW5jdGlvbigpewogICAgICAkbG9nLmh0bWwoJyA8dT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3U+Jyk7CiAgICAgICRsb2cuaHRtbCgnPHU+LyAgICAgICAgICAgICAgICAgICAgICAgICBMT0dIRUxQICAgICAgICAgICAgICAgICAgICAgICAgICYjOTI7PC91PicpOwogICAgICAkbG9nLmN5YW4uaXRhbGljKCdUaXA6IGxvZ2dpbmcgc3VwcG9ydHMgSFRNTCcpOwogICAgICAkbG9nKCckbG9nKCJtc2cgdHh0IGhlbGxvIikgLSBQcmludHMgdGV4dCBpbiB0aGUgdGVybWluYWwgKG1zZyB0eHQgaGVsbG8sIGluIHRoaXMgY2FzZSknKTsKICAgICAgJGxvZy5jeWFuLnJlcGVhdCgnPScpOwogICAgICAkbG9nLmh0bWwoJzxzcGFuIHN0eWxlPSJjb2xvcjojMDI5ODlhIj5bPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojNGY5YTA2Ij5dPC9zcGFuPiAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IzAwZmZmZiI+Qzwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICNmZjAxZmYiPk88L3NwYW4+TDxzcGFuIHN0eWxlPSJjb2xvcjogI2VlMDA2NiI+Tzwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2E5NTUwMSI+Ujwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IzRmOWEwNiI+Uzwvc3Bhbj4gICAgICAgICAgICAgICAgICAgICAgICAgWzxzcGFuIHN0eWxlPSJjb2xvcjojNGY5YTA2Ij5dPC9zcGFuPicpOwogICAgICAkbG9nLm1hZ2VudGEucmVwZWF0KCc9Jyk7CiAgICAgICRsb2cuYmx1ZSgnJGxvZy5ibHVlIC0gTG9ncyB0dXJxdW9pc2UgdGV4dCcpOwogICAgICAkbG9nLmN5YW4oJyRsb2cuY3lhbiAtIExvZ3MgY3lhbiB0ZXh0Jyk7CiAgICAgICRsb2cuZ3JlZW4oIiRsb2cuZ3JlZW4gLyAkbG9nLnN1Y2NlcyAtIExvZ3MgZ3JlZW4gdGV4dCwgYW5kIHllcywgdGhhdCdzIHN1Y2NlcyB3aXRoIG9uZSBzIik7CiAgICAgICRsb2cubWFnZW50YSgnJGxvZy5tYWdlbnRhIC0gTG9ncyBtYWdlbnRhIHRleHQnKTsKICAgICAgJGxvZy5yZWQoJyRsb2cucmVkIC8gJGxvZy5lcnJvciAtIExvZ3MgcmVkIHRleHQnKTsKICAgICAgJGxvZy55ZWxsb3coJyRsb2cueWVsbG93IC0gTG9ncyBicm93biB0ZXh0Jyk7CiAgICAgICRsb2cud2hpdGUucmVwZWF0KCc9Jyk7CiAgICAgICRsb2cud2hpdGUoJ1tdICAgICAgICAgICAgICAgICAgICBURVhUIERFQ09SQVRJT05TICAgICAgICAgICAgICAgICAgICBbXScpOwogICAgICAkbG9nLndoaXRlLnJlcGVhdCgnPScpOwogICAgICAkbG9nLmJvbGQoJyRsb2cuYm9sZCAtIExvZ3MgYm9sZCB0ZXh0JykKICAgIH0KICB9LAogICAgbGUuX2FwcHMuY3Jhc2ggPSB7CiAgICBjYXRlZ29yaWVzOiAiVXRpbGl0eSIsCiAgc2lsZW50OiB0cnVlLAogIGhhc2NsaTogdHJ1ZSwKICBleGVjOiBmdW5jdGlvbigpewogICAgJGVsLmVhY2goIi51aV9pY29uIixmdW5jdGlvbihlKXtlLmNsYXNzTGlzdC5hZGQoImhpZGUiKX0pOwokZWwuZWFjaCgiLnVpX21lbnUiLGZ1bmN0aW9uKGUpe2UuY2xhc3NMaXN0LmFkZCgiaGlkZSIpfSk7CiRlbC5lYWNoKCIudWlfd2luZG93IixmdW5jdGlvbihlKXtlLmNsYXNzTGlzdC5hZGQoImhpZGUiKX0pOwogIH0KICB9LAogICAgbGUuX2FwcHMudGhlbWUgPSB7CiAgICBuYW1lOiAiVGhlbWUiLAogICAgdGl0bGU6ICJUaGVtZSIsCiAgICBleGVjOiBmdW5jdGlvbigpewogICAgICBzZXRJbnRlcnZhbChmdW5jdGlvbigpeyRleGUoJ2Z4IGFjaWQgLnVpX2ljb24nKTskZXhlKCdmeCBpbnZlcnRMaWdodCAjczQyX3Rhc2tiYXInKTskZXhlKCdmeCBibHVlcmF5ICNzNDJfYmFja2dyb3VuZCcpOyRleGUoJ2Z4IHNwaW4gLnVpX3dpbmRvd19faGVhZF9faWNvbicpOyRleGUoJ2Z4IGZsdW9yZXNjZW5jZSAudWlfd2luZG93X19oZWFkJyk7JGV4ZSgnZnggZGlzY28gLnVpX3dpbmRvd19faGVhZF9fbWluaW1pemUnKTskZXhlKCdmeCBkaXNjbyAudWlfd2luZG93X19oZWFkX19tYXhpbWl6ZScpOyRleGUoJ2Z4IGRpc2NvIC51aV93aW5kb3dfX2hlYWRfX2Nsb3NlJyk7JGV4ZSgnZnggZGlzY28gLnVpX3dpbmRvd19faGVhZF9faGVscCcpOyRleGUoJ2Z4IGRhcmtfZW1ib3NzIC51aV93aW5kb3dfX2J1dHRvbnMnKTskZXhlKCdmeCBhY2lkIC51aV9wcm9ncmVzcycpOyRleGUoJ2Z4IHNwaW4gI3M0Ml9mZWVkJyk7JGV4ZSgnZnggcG9zdGVyX2NvbG9yX2Z1biAudWlfYWxlcnRfX2ltZycpOyRleGUoJ2Z4IGxpdGhvIC5qcy1yZXNpemVyJyk7fSwgMTAwMCk7CnNldFRpbWVvdXQoZnVuY3Rpb24oKXtzZXRJbnRlcnZhbChmdW5jdGlvbigpeyRleGUoJ2Z4IG5vbmUgLnVpX2ljb25fX2ZvbGRlcicpfSwgMTAwMCl9LDk5OCk7CiAgICB9CiAgfSwKICAgIGxlLl9hcHBzLmNoZXdzZGF5ID0gewogICAgaWNvbjogImh0dHBzOi8vdGllcm1ha2VyLmNvbS9pbWFnZXMvY2hhcnQvY2hhcnQvd29ybGQtZmxhZ3MtMTk3LWNvdW50cmllcy0tNjgtdGVycml0b3JpZXMtMjY0MzA0L3Vrc3ZncG5nLnBuZyIsCiAgICBleGVjOiBmdW5jdGlvbigpewogICAgICBwYXJlbnQubGUuX2RvbS5iYWNrZ3JvdW5kLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICJ1cmwoJ2h0dHBzOi8vdGllcm1ha2VyLmNvbS9pbWFnZXMvY2hhcnQvY2hhcnQvd29ybGQtZmxhZ3MtMTk3LWNvdW50cmllcy0tNjgtdGVycml0b3JpZXMtMjY0MzA0L3Vrc3ZncG5nLnBuZycpIjsgcGFyZW50LiRmcy51dGlscy5ub3JtYWxpemVJY29uPWZ1bmN0aW9uKCl7cmV0dXJuICJodHRwczovL3RpZXJtYWtlci5jb20vaW1hZ2VzL2NoYXJ0L2NoYXJ0L3dvcmxkLWZsYWdzLTE5Ny1jb3VudHJpZXMtLTY4LXRlcnJpdG9yaWVzLTI2NDMwNC91a3N2Z3BuZy5wbmcifSwgcGFyZW50LiRleHBsb3Jlci5yZWZyZXNoKCk7CiRhbGVydCgiWW91ciBjb21wdXRlciBqdXN0IGdvdCBjb2xvbml6ZWQgYnkgR3JlYXQgQnJpdGFpbiEiKTsgCiRub3RpZigieW91cmUgYnJpIGlzaCIpOwp2YXIgZGVtb19pbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0cm9sbGJveF9pbnB1dCcpOwoKdmFyIHR5cGVfdGhpcyA9ICJ0ZXN0IjsKdmFyIGluZGV4ID0gMDsKICAgIH0KICB9LAogICAgbGUuX2FwcHMudmlydXMgPSB7CiAgICBleGVjOiBmdW5jdGlvbigpewogICAgICAKICAgIH0KICB9LAogIGxlLl9hcHBzLndhbGxwYXBlciA9IHsKICAgIG5hbWU6ICJXYWxscGFwZXIgUHJlZmVyZW5jZXMiLAogICAgaWNvbjogIi9jL2ZpbGVzL2ltYWdlcy9pY29ucy93aW5kb3cucG5nIiwKICAgIGV4ZWM6IGZ1bmN0aW9uKCl7CiAgICAgICRwcm9tcHQoewogIHRpdGxlOiAiV2FsbHBhcGVyIFByZWZlcmVuY2VzIiwKICBpY29uOiAiL2MvZmlsZXMvaW1hZ2VzL2ljb25zL3dpbmRvdy5wbmciLAogIG1zZzogIlR5cGUgdGhlIG51bWJlciBvZiB0aGUgd2FsbHBhcGVyIHlvdSB3YW50LiBDbGljayB0aGUgPyBidXR0b24gdG8gc2VlIHdhbGxwYXBlcnMuIiwKICBoZWxwOiAiPGgzPldhbGxwYXBlcnM6PC9oMz48YnI+PGltZyBzcmM9J2h0dHBzOi8vaS5pbWd1ci5jb20vNkpsaGZZVC5wbmcnIHdpZHRoPScxMDAnPjxicj5UeXBlIDxiPjE8L2I+IHRvIHNldCB0aGlzIHdhbGxwYXBlcjxicj48YnI+PGltZyBzcmM9J2h0dHA6Ly93d3cuc2ltcGxlaW1hZ2VyZXNpemVyLmNvbS9fdXBsb2Fkcy9waG90b3MvYTQ2ZTZjMjgvd2luZG93c194cF9ibGlzcy13aWRlXzNfMjA0OHg5NjIuanBnJyB3aWR0aD0nMTAwJz48YnI+VHlwZSA8Yj4yPC9iPiB0byBzZXQgdGhpcyB3YWxscGFwZXI8YnI+PGJyPjxpbWcgc3JjPSdodHRwOi8vd3d3LnNpbXBsZWltYWdlcmVzaXplci5jb20vX3VwbG9hZHMvcGhvdG9zL2E0NmU2YzI4L3dpbjkzXzFfMjA0OHg5NjIuanBnJyB3aWR0aD0nMTAwJz48YnI+VHlwZSA8Yj4zPC9iPiB0byBzZXQgdGhpcyB3YWxscGFwZXI8YnI+PGJyPjxpbWcgc3JjPSdodHRwOi8vd3d3LnNpbXBsZWltYWdlcmVzaXplci5jb20vX3VwbG9hZHMvcGhvdG9zL2E0NmU2YzI4LzIxNGNhZmRmNjBjZWRmODAyYTIyNTc4NzcxYWFiZmVmXzIwNDh4OTYyLmpwZycgd2lkdGg9JzEwMCc+PGJyPlR5cGUgPGI+NDwvYj4gdG8gc2V0IHRoaXMgd2FsbHBhcGVyPGJyPjxicj48aW1nIHNyYz0naHR0cHM6Ly9pLmltZ3VyLmNvbS9WQ3VtdzVILnBuZycgd2lkdGg9JzEwMCc+PGJyPlR5cGUgPGI+NTwvYj4gdG8gc2V0IHRoaXMgd2FsbHBhcGVyPGJyPjxicj48aW1nIHNyYz0naHR0cHM6Ly9pLmltZ3VyLmNvbS9UakVLdlNsLnBuZycgd2lkdGg9JzEwMCc+PGJyPlR5cGUgPGI+NjwvYj4gdG8gc2V0IHRoaXMgd2FsbHBhcGVyPGJyPjxicj48aW1nIHNyYz0naHR0cHM6Ly9pLmltZ3VyLmNvbS9Oc3o4NjJZLmpwZycgd2lkdGg9JzEwMCc+PGJyPlR5cGUgPGI+NzwvYj4gdG8gc2V0IHRoaXMgd2FsbHBhcGVyPGJyPjxicj48aW1nIHNyYz0naHR0cHM6Ly9pLmltZ3VyLmNvbS9RaldLa09pLnBuZycgd2lkdGg9JzEwMCc+PGJyPlR5cGUgPGI+ODwvYj4gdG8gc2V0IHRoaXMgd2FsbHBhcGVyPGJyPjxicj4iLAogIGltZzogIi9jL2ZpbGVzL2ltYWdlcy9pY29ucy93aW5kb3cucG5nIiwKICBidG5PazogIlNldCIKfSwgJycsIGZ1bmN0aW9uKG9rLCB0ZXh0KXsKICBpZiAob2spIHsKICAgIGlmICh0ZXh0ID09ICIxIikgewogICAgICBsZS5fZG9tLmJhY2tncm91bmQuc3R5bGUuYmFja2dyb3VuZEltYWdlID0gInVybCgnaHR0cHM6Ly9pLmltZ3VyLmNvbS82SmxoZllULnBuZycpIgogICAgfSBlbHNlIHsKICAgICAgaWYgKHRleHQgPT0gIjIiKSB7CiAgICAgICAgbGUuX2RvbS5iYWNrZ3JvdW5kLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICJ1cmwoJ2h0dHA6Ly93d3cuc2ltcGxlaW1hZ2VyZXNpemVyLmNvbS9fdXBsb2Fkcy9waG90b3MvYTQ2ZTZjMjgvd2luZG93c194cF9ibGlzcy13aWRlXzNfMjA0OHg5NjIuanBnJykiOwogICAgICB9IGVsc2UgewogICAgICAgIGlmICh0ZXh0ID09ICIzIikgewogICAgICAgICAgbGUuX2RvbS5iYWNrZ3JvdW5kLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICJ1cmwoJ2h0dHA6Ly93d3cuc2ltcGxlaW1hZ2VyZXNpemVyLmNvbS9fdXBsb2Fkcy9waG90b3MvYTQ2ZTZjMjgvd2luOTNfMV8yMDQ4eDk2Mi5qcGcnKSI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmICh0ZXh0ID09ICI0IikgewogICAgICAgICAgICBsZS5fZG9tLmJhY2tncm91bmQuc3R5bGUuYmFja2dyb3VuZEltYWdlID0gInVybCgnaHR0cDovL3d3dy5zaW1wbGVpbWFnZXJlc2l6ZXIuY29tL191cGxvYWRzL3Bob3Rvcy9hNDZlNmMyOC8yMTRjYWZkZjYwY2VkZjgwMmEyMjU3ODc3MWFhYmZlZl8yMDQ4eDk2Mi5qcGcnKSI7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAodGV4dCA9PSAiNSIpIHsKICAgICAgICAgICAgICBsZS5fZG9tLmJhY2tncm91bmQuc3R5bGUuYmFja2dyb3VuZCA9ICJsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDEsMjU1LDAsMTkyKSAwJSwgcmdiYSgxLDI1NSwyMDEsNDQpIDMxJSwgcmdiYSgxLDE1NSwyNTUsNDApIDYzJSwgcmdiYSgxLDAsMjM1LDI1NSkgMTAwJSkiOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGlmICh0ZXh0ID09ICI2IikgewogICAgICAgICAgICAgICAgbGUuX2RvbS5iYWNrZ3JvdW5kLnN0eWxlLmJhY2tncm91bmQgPSAicmFkaWFsLWdyYWRpZW50KGNpcmNsZSwgcmdiYSgwLDI0MSwyNTUsMSkgMCUsIHJnYmEoMTU4LDAsMjU1LDEpIDEwMCUpIjsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKHRleHQgPT0gIjciKSB7CiAgICAgICAgICAgICAgICAgIGxlLl9kb20uYmFja2dyb3VuZC5zdHlsZS5iYWNrZ3JvdW5kID0gImxpbmVhci1ncmFkaWVudCg5MGRlZywgcmdiYSg2Miw1OCwxODAsMSkgMCUsIHJnYmEoMzAsMjUzLDI5LDAuMjEwNTIxNzA4NjgzNDczNDIpIDUwJSwgcmdiYSg2Miw1OCwxODAsMSkgMTAwJSkiOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgaWYgKHRleHQgPT0gIjgiKSB7CiAgICAgICAgICAgICAgICAgICAgbGUuX2RvbS5iYWNrZ3JvdW5kLnN0eWxlLmJhY2tncm91bmQgPSAibGluZWFyLWdyYWRpZW50KDBkZWcsIHJnYmEoMCwwLDAsMSkgMCUsIHJnYmEoMjUzLDQ1LDQ1LDEpIDUwJSwgcmdiYSgwLDAsMCwxKSAxMDAlKSI7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Cn0pCiAgICB9CiAgfSwKICAgIGxlLl9hcHBzLnNvdW5kID0gewogICAgY2F0ZWdvcmllczogIlV0aWxpdHk7TXVzaWMiLAogICAgZXhlYzogZnVuY3Rpb24oKXsKICAgICAgJGFsZXJ0KHsKICAgICAgICBzb3VuZDogJ2Jvb3QnLAogICAgICAgIHRpdGxlOiAnJywKICAgICAgICBtc2c6ICdTb3VuZCBpcyBub3cgb24uJywKICAgICAgICBpbWc6ICcvYy9zeXMvc2tpbnMvdzkzL3NvdW5kX29uLnBuZycKICAgICAgfSkKICAgIH0KICB9LAogICAgbGUuX2FwcHMuY2hhdCA9IHsKICAiY2F0ZWdvcmllcyI6ICJOZXR3b3JrO0NoYXQiLAogICJ0ZXJtaW5hbCI6IHRydWUsCiAgICBleGVjOiBmdW5jdGlvbigpIHsKICAgIHZhciB0ID0gaS5pY29uOwogICAgdGhpcy5hcmcub3B0aW9ucyAmJiB0aGlzLmFyZy5vcHRpb25zLmljb24gJiYgKHQgPSB0aGlzLmFyZy5vcHRpb25zLmljb24gPSAkZnMudXRpbHMubm9ybWFsaXplSWNvbih0aGlzLmFyZy5vcHRpb25zLmljb24gfHwgdGhpcy5hcmcubGF1bmNoZXIuaWNvbikpLAogICAgdGhpcy5hcHAgPSBpLAogICAgdGhpcy50aGF0LndpbmRvdyB8fCAodGhpcy50aGF0LndpbmRvdyA9IHt9KSwKICAgIHRoaXMudGhhdC53aW5kb3cuaWNvbiB8fCAodGhpcy50aGF0LndpbmRvdy5pY29uID0gdCksCiAgICB0aGlzLnRoYXQud2luZG93LnRpdGxlIHx8ICh0aGlzLnRoYXQud2luZG93LnRpdGxlID0gdGhpcy5hcmcubGF1bmNoZXIgPyB0aGlzLmFyZy5sYXVuY2hlci50aXRsZSA6IGkubmFtZSk7CiAgICB2YXIgZSA9IHRoaXMuYXJnLmFyZ3VtZW50cy5jb25jYXQoW3RoaXMuYXJnLm9wdGlvbnNdKTsKICAgICJhcmd1bWVudHMiID09PSBpLmluamVjdCA/IGUgPSB0aGlzLmFyZy5hcmd1bWVudHMgOiAkaW8uYXJyLmVhY2goYSwgZnVuY3Rpb24odCwgaSkgewogICAgICAgICJ1cmwiID09PSB0ICYmICJzdHJpbmciICE9IHR5cGVvZiBlW2ldICYmIChlW2ldID0gIiIpLAogICAgICAgICJvcHQiID09PSB0ICYmICJvYmplY3QiICE9IHR5cGVvZiBlW2ldICYmIChlW2ldID0ge30pCiAgICB9KTsKICAgIHRyeSB7CiAgICAgICAgby5hcHBseSh0aGlzLCBlKQogICAgfSBjYXRjaCAobikgewogICAgICAgICRhbGVydC5lcnJvcihuKQogICAgfQp9Cn0sCiAgICBsZS5fYXBwcy5ub3RlID0gewogICAgImNhdGVnb3JpZXMiOiAiVXRpbGl0eSIsCiAgImljb24iOiAiL2Mvc3lzL3NraW5zL3c5My9hcHBzL3Bpbi5wbmciLAogICAgZXhlYzogZnVuY3Rpb24oKSB7CiAgICB2YXIgdCA9IGkuaWNvbjsKICAgIHRoaXMuYXJnLm9wdGlvbnMgJiYgdGhpcy5hcmcub3B0aW9ucy5pY29uICYmICh0ID0gdGhpcy5hcmcub3B0aW9ucy5pY29uID0gJGZzLnV0aWxzLm5vcm1hbGl6ZUljb24odGhpcy5hcmcub3B0aW9ucy5pY29uIHx8IHRoaXMuYXJnLmxhdW5jaGVyLmljb24pKSwKICAgIHRoaXMuYXBwID0gaSwKICAgIHRoaXMudGhhdC53aW5kb3cgfHwgKHRoaXMudGhhdC53aW5kb3cgPSB7fSksCiAgICB0aGlzLnRoYXQud2luZG93Lmljb24gfHwgKHRoaXMudGhhdC53aW5kb3cuaWNvbiA9IHQpLAogICAgdGhpcy50aGF0LndpbmRvdy50aXRsZSB8fCAodGhpcy50aGF0LndpbmRvdy50aXRsZSA9IHRoaXMuYXJnLmxhdW5jaGVyID8gdGhpcy5hcmcubGF1bmNoZXIudGl0bGUgOiBpLm5hbWUpOwogICAgdmFyIGUgPSB0aGlzLmFyZy5hcmd1bWVudHMuY29uY2F0KFt0aGlzLmFyZy5vcHRpb25zXSk7CiAgICAiYXJndW1lbnRzIiA9PT0gaS5pbmplY3QgPyBlID0gdGhpcy5hcmcuYXJndW1lbnRzIDogJGlvLmFyci5lYWNoKGEsIGZ1bmN0aW9uKHQsIGkpIHsKICAgICAgICAidXJsIiA9PT0gdCAmJiAic3RyaW5nIiAhPSB0eXBlb2YgZVtpXSAmJiAoZVtpXSA9ICIiKSwKICAgICAgICAib3B0IiA9PT0gdCAmJiAib2JqZWN0IiAhPSB0eXBlb2YgZVtpXSAmJiAoZVtpXSA9IHt9KQogICAgfSk7CiAgICB0cnkgewogICAgICAgIG8uYXBwbHkodGhpcywgZSkKICAgIH0gY2F0Y2ggKG4pIHsKICAgICAgICAkYWxlcnQuZXJyb3IobikKICAgIH0KICAgIH0KICB9LAogICAgbGUuX2FwcHMuZ28gPSB7CiAgICBleGVjOiBmdW5jdGlvbigpewogICAgICAkd2luZG93LmZvcm0oJ1doZXJlIHdvdWxkIHlvdSBsaWtlIHRvIGdvIHRvZGF5PycsIHsKICAgICAgICBzY2hlbWE6IHsKICAgICAgICAgICJuYW1lIjogewogICAgICAgICAgICAidGl0bGUiOiAnPGltZyBzdHlsZT0icG9zaXRpb246YWJzb2x1dGUiIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgc3JjPSIvYy9zeXMvc2tpbnMvdzkzL3Byb2dyYW1zLnBuZyI+JywKICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwgZnVuY3Rpb24ob2ssIGRhdGEpIHsKICAgICAgICBpZiAob2spIHsKICAgICAgICAgY29uc3QgdHggPSAgJGV4ZShkYXRhLm5hbWUpCmlmKHR4ID09IGZhbHNlKXskYWxlcnQoJ1Byb2dyYW0gbm90IGZvdW5kJyl9CiAgICAgICAgfQogICAgICB9KQogICAgfQogIH0sCiAgICBsZS5fYXBwcy5zb3J0ID0gewogICAgdGVybWluYWw6IHRydWUsCiAgICBpY29uOiAiL2Mvc3lzL3NraW5zL3c5My9jb25maWcucG5nIiwKICAgIHRpdGxlOiAiU29ydCIsCiAgICBleGVjOiBmdW5jdGlvbigpewogICAgICBpZiAodGhpcy5hcmcuYXJndW1lbnRzLmxlbmd0aCA9PSAwKXsKICAgICAgICAkbG9nLmluZm8oJ1R5cGUgInNvcnQiIGZvbGxvd2VkIGJ5IHdvcmRzIHRvIHNvcnQgYWxwaGFiZXRpY2FsbHknKTsgJGxvZygnJyk7CiAgICAgICAgJGxvZy55ZWxsb3cuY2VudGVyKCdFeGFtcGxlOicpOwogICAgICAgICRsb2cuaW5mbygnSW5wdXQ6Jyk7ICRsb2coJ34gc29ydCBsb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCcpOyAkbG9nKCcnKTsKICAgICAgICAkbG9nLmJsdWUoJzUgaXRlbXMgZm91bmQ6PGJyPjxicj4nKTsgJGxvZygnWzxicj4gICInICsgWydsb3JlbScsJ2lwc3VtJywnZG9sb3InLCdzaXQnLCdhbWV0J10uc29ydCgpLmpvaW4oJyIsPGJyPiAgIicpICsgJyI8YnI+XTs8YnI+PGJyPicpOwogICAgICAgICRsb2cuaW5mby5pdGFsaWMoJ05vdGU6IE91dHB1dCB3aWxsIGVpdGhlciBqdXN0IG1ha2UgYSBsaXN0IG9yIG1ha2UgaXQgYW4gYXJyYXknKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAkbG9nLmJsdWUodGhpcy5hcmcuYXJndW1lbnRzLmxlbmd0aCArICIgaXRlbXMgZm91bmQ6PGJyPjxicj4iKTsKICAgICAgICAkbG9nKCRpby5hcnIucmFuZG9tKFt0aGlzLmFyZy5hcmd1bWVudHMuc29ydCgpLmpvaW4oJzxicj4nKSwnWzxicj4gICInICsgdGhpcy5hcmcuYXJndW1lbnRzLnNvcnQoKS5qb2luKCciLDxicj4gICInKSArICciPGJyPl07J10pKTsKICAgICAgfTsKICAgIH0KICB9Ow=='));
  11. $file.save('/a/boot/functions.js',atob('JGFyY2hpdmUgPSBmdW5jdGlvbihpLHMpewogICRjb25maXJtKHsKICAgIGJ0bk9rOiAiQXJjaGl2ZSIsCiAgICBidG5DYW5jZWw6ICJOb3BlIiwKICAgIG1zZzogIkRvd25sb2FkICIgKyBpICsgIiBhcyBhIC5aSVAgYXJjaGl2ZT8iLAogICAgdGl0bGU6ICJBcmNoaXZlIgogIH0sIGZ1bmN0aW9uKG9rKXsKICAgIGlmIChvayl7CiAgICAgIHM9c3x8JGZzLnV0aWxzLmdldE5hbWUoaSsiIil8fCJkZXJwIjt2YXIgZT0kYWxlcnQucHJvZ3Jlc3MoIkNyZWF0aW5nIEFyY2hpdmUuLi4iLCJBcmNoaXZlIik7ZnVuY3Rpb24gbih0KXskZmlsZS5kb3dubG9hZCh0LHMrIi56aXAiKX1mdW5jdGlvbiBjKHQsaSl7ZS51cGRhdGUodC9pKjEwMCl9ZnVuY3Rpb24gZih0KXtjb25zb2xlLmVycm9yKHQpfSRsb2FkZXIoWyIvYy9saWJzL3ppcC96aXAuanMiLCIvYy9saWJzL3ppcC96aXAtZnMuanMiXSxmdW5jdGlvbigpe3ppcC53b3JrZXJTY3JpcHRzUGF0aD0iL2MvbGlicy96aXAvIjt2YXIgbz1uZXcgemlwLmZzLkZTO2Z1bmN0aW9uIHIodCxpKXtzPXN8fCRmcy51dGlscy5nZXROYW1lKHQpO3ZhciBlPSRmcy51dGlscy5nZXRQYXRoT2JqKHQpO2U/ZnVuY3Rpb24gbyhuLHIsdCxpKXskaW8uZW51bShbdF0sZnVuY3Rpb24odCxpLGUpeyIuIiE9PWkmJiIuLiIhPT1pPyRmcy51dGlscy5pc1Nob3J0Y3V0KGkpfHwib2JqZWN0IiE9dHlwZW9mIHQ/JGZpbGUub3BlbihuKyIvIitpLCJCbG9iIixmdW5jdGlvbih0KXtyLmFkZEJsb2IoaSx0KSxlKCl9KTpvKG4rIi8iK2ksci5hZGREaXJlY3RvcnkoaSksdCxlKTplKCl9LGZ1bmN0aW9uKCl7aSgpfSl9KGUuY3dkLG8ucm9vdC5hZGREaXJlY3RvcnkoJGZzLnV0aWxzLmdldE5hbWUoZS5jd2QpKSxlLm9iaixpKTokZmlsZS5vcGVuKHQsIkJsb2IiLGZ1bmN0aW9uKHQpe28ucm9vdC5hZGRCbG9iKHRoaXMubmFtZSx0KSxpKCl9KX1mdW5jdGlvbiB0KCl7by5yb290LmV4cG9ydEJsb2IobixjLGYpfSJzdHJpbmciPT10eXBlb2YgaT9yKGksdCk6JGlvLmVudW0oaSxmdW5jdGlvbih0LGksZSl7aWYoJGlvLmlzRWxlbWVudCh0KSl7cz1udWxsO3ZhciBvPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWV4ZSIpLG49dC5nZXRBdHRyaWJ1dGUoImRhdGEtcGF0aCIpOyRmcy51dGlscy5leGlzdChvKT9yKG8sZSk6cihuLGUpfWVsc2Ugcih0LGUpfSx0KX0pCiAgICB9OwogIH0pOwp9OwokdGV4dGFyZWEgPSBmdW5jdGlvbihhKXsKICBpZiAoJHdpbmRvdy5jdXJyZW50LmVsLmJvZHkuZmlyc3RDaGlsZC50YWdOYW1lID09ICJURVhUQVJFQSIpewogICAgJHdpbmRvdy5jdXJyZW50LmVsLmJvZHkuZmlyc3RDaGlsZC52YWx1ZSA9IGEKICB9IGVsc2UgewogICAgJGV4ZSgndGV4dGFyZWEnKTsgJHdpbmRvdy5jdXJyZW50LmVsLmJvZHkuZmlyc3RDaGlsZC52YWx1ZSA9IGE7CiAgfTsKfTs='));
  12. $file.save('/a/settings.json','{"sounds":{"boot":"/c/sys/sounds/BOOT.ogg","alert":"/c/sys/sounds/CHORD.ogg","error":"/c/sys/sounds/QUACK.ogg","blop":"/c/sys/sounds/BLOP.ogg","shutdown":"/c/files/sounds/shutdown.mp3","tada":"/c/files/sounds/tada.mp3"},"noSplash":true,"defaultApp":{"html":"iframe","htm":"iframe","php":"iframe","xml":"code","svg":"img","gif":"img","png":"img","jpeg":"img","jpg":"img","js":"js","cur":"img"},"skin":"w93"}'); $file.save('/a/boot/welcome.js','document.title = "WINDOWS93 ©";');
  13.   } else {
  14.     document.querySelectorAll('.ui_icon').forEach((e) => {e.style.display = "inline-block"});
  15.     document.getElementById('s42_taskbar').style.display = "flex";
  16.   };
  17. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement