From b16ae8ff4eb83553036f0872b6edd71208361c5e Mon Sep 17 00:00:00 2001 From: apurva Date: Fri, 29 Nov 2024 13:02:53 +0530 Subject: [PATCH] fix:change styling when checkout button is disabled --- _dev/js/cart.js | 9 +++++++++ assets/js/theme.js | 10 +++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/_dev/js/cart.js b/_dev/js/cart.js index 87e2be1..ab6d7c2 100644 --- a/_dev/js/cart.js +++ b/_dev/js/cart.js @@ -24,6 +24,10 @@ const CheckUpdateQuantityOperations = { (errorMsg !== "" && !hasError) ) { $checkoutBtn.addClass("disabled"); + $checkoutBtn.css({ + 'background-color': 'grey', + 'color': 'white', + }); } if (errorMsg !== "") { @@ -46,6 +50,11 @@ const CheckUpdateQuantityOperations = { isUpdateOperation = false; $(prestashop.themeSelectors.notifications.container).html(""); $checkoutBtn.removeClass("disabled"); + $checkoutBtn.css({ + 'background-color': '#172554', + 'color': 'white', + }); + } }, checkUpdateOperation: (resp) => { diff --git a/assets/js/theme.js b/assets/js/theme.js index a943ab8..0e5ebe6 100644 --- a/assets/js/theme.js +++ b/assets/js/theme.js @@ -5857,6 +5857,10 @@ const $checkoutBtn = $$1(prestashop$1.themeSelectors.checkout.btn); if ($$1(prestashop$1.themeSelectors.notifications.dangerAlert).length || errorMsg !== "" && !hasError) { $checkoutBtn.addClass("disabled"); + $checkoutBtn.css({ + "background-color": "grey", + "color": "white" + }); } if (errorMsg !== "") { const strError = ` @@ -5877,6 +5881,10 @@ isUpdateOperation = false; $$1(prestashop$1.themeSelectors.notifications.container).html(""); $checkoutBtn.removeClass("disabled"); + $checkoutBtn.css({ + "background-color": "#172554", + "color": "white" + }); } }, checkUpdateOperation: (resp) => { @@ -7419,4 +7427,4 @@ }); }); })(jQuery, prestashop); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuanMiLCJzb3VyY2VzIjpbIi4uLy4uL19kZXYvbm9kZV9tb2R1bGVzL2pxdWVyeS1tb2RhbC9qcXVlcnkubW9kYWwuanMiLCIuLi8uLi9fZGV2L25vZGVfbW9kdWxlcy90b29sdGlwc3Rlci9kaXN0L2pzL3Rvb2x0aXBzdGVyLmJ1bmRsZS5taW4uanMiLCIuLi8uLi9fZGV2L25vZGVfbW9kdWxlcy9ib290c3RyYXAtdG91Y2hzcGluL2Rpc3QvanF1ZXJ5LmJvb3RzdHJhcC10b3VjaHNwaW4uanMiLCIuLi8uLi9fZGV2L25vZGVfbW9kdWxlcy9qcXVlcnktdG91Y2hzd2lwZS9qcXVlcnkudG91Y2hTd2lwZS5taW4uanMiLCIuLi8uLi9fZGV2L2pzL3NlbGVjdG9ycy5qcyIsIi4uLy4uL19kZXYvanMvdGFicy5qcyIsIi4uLy4uL19kZXYvanMvZWFzeXpvb20uanMiLCIuLi8uLi9fZGV2L2pzL3Jlc3BvbnNpdmUuanMiLCIuLi8uLi9fZGV2L2pzL2NoZWNrb3V0LmpzIiwiLi4vLi4vX2Rldi9qcy9jdXN0b21lci5qcyIsIi4uLy4uL19kZXYvbm9kZV9tb2R1bGVzL3ZlbG9jaXR5LWFuaW1hdGUvdmVsb2NpdHkuanMiLCIuLi8uLi9fZGV2L2pzL2NvbXBvbmVudHMvdXBkYXRlLXNvdXJjZXMuanMiLCIuLi8uLi9fZGV2L2pzL2NvbXBvbmVudHMvcHJvZHVjdC1taW5pYXR1cmUuanMiLCIuLi8uLi9fZGV2L2pzL2xpc3RpbmcuanMiLCIuLi8uLi9fZGV2L2pzL2NvbXBvbmVudHMvcHJvZHVjdC1zZWxlY3QuanMiLCIuLi8uLi9fZGV2L2pzL3Byb2R1Y3QuanMiLCIuLi8uLi9fZGV2L2pzL2NvbXBvbmVudHMvZGVib3VuY2UuanMiLCIuLi8uLi9fZGV2L2pzL2NhcnQuanMiLCIuLi8uLi9fZGV2L25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIiwiLi4vLi4vX2Rldi9qcy9jb21wb25lbnRzL2Ryb3AtZG93bi5qcyIsIi4uLy4uL19kZXYvanMvY29tcG9uZW50cy9mb3JtLmpzIiwiLi4vLi4vX2Rldi9ub2RlX21vZHVsZXMvc3ByaW50Zi1qcy9zcmMvc3ByaW50Zi5qcyIsIi4uLy4uL19kZXYvanMvY29tcG9uZW50cy91c2VQYXNzd29yZFBvbGljeS5qcyIsIi4uLy4uL19kZXYvanMvY29tcG9uZW50cy90b3AtbWVudS5qcyIsIi4uLy4uL19kZXYvbm9kZV9tb2R1bGVzL2pxdWVyeS10b2FzdC1wbHVnaW4vZGlzdC9qcXVlcnkudG9hc3QubWluLmpzIiwiLi4vLi4vX2Rldi9qcy9jb21wb25lbnRzL2Jsb2NrLWNhcnQuanMiLCIuLi8uLi9fZGV2L25vZGVfbW9kdWxlcy9qcXVlcnktb2ZmY2FudmFzL2Rpc3QvanF1ZXJ5Lm9mZmNhbnZhcy5taW4uanMiLCIuLi8uLi9fZGV2L2pzL3RoZW1lLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgQSBzaW1wbGUgalF1ZXJ5IG1vZGFsIChodHRwOi8vZ2l0aHViLmNvbS9reWxlZm94L2pxdWVyeS1tb2RhbClcbiAgICBWZXJzaW9uIDAuOS4yXG4qL1xuXG4oZnVuY3Rpb24gKGZhY3RvcnkpIHtcbiAgLy8gTWFraW5nIHlvdXIgalF1ZXJ5IHBsdWdpbiB3b3JrIGJldHRlciB3aXRoIG5wbSB0b29sc1xuICAvLyBodHRwOi8vYmxvZy5ucG1qcy5vcmcvcG9zdC8xMTI3MTIxNjk4MzAvbWFraW5nLXlvdXItanF1ZXJ5LXBsdWdpbi13b3JrLWJldHRlci13aXRoLW5wbVxuICBpZih0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuICAgIGZhY3RvcnkocmVxdWlyZShcImpxdWVyeVwiKSwgd2luZG93LCBkb2N1bWVudCk7XG4gIH1cbiAgZWxzZSB7XG4gICAgZmFjdG9yeShqUXVlcnksIHdpbmRvdywgZG9jdW1lbnQpO1xuICB9XG59KGZ1bmN0aW9uKCQsIHdpbmRvdywgZG9jdW1lbnQsIHVuZGVmaW5lZCkge1xuXG4gIHZhciBtb2RhbHMgPSBbXSxcbiAgICAgIGdldEN1cnJlbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG1vZGFscy5sZW5ndGggPyBtb2RhbHNbbW9kYWxzLmxlbmd0aCAtIDFdIDogbnVsbDtcbiAgICAgIH0sXG4gICAgICBzZWxlY3RDdXJyZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChpPW1vZGFscy5sZW5ndGgtMTsgaT49MDsgaS0tKSB7XG4gICAgICAgICAgaWYgKG1vZGFsc1tpXS4kYmxvY2tlcikge1xuICAgICAgICAgICAgbW9kYWxzW2ldLiRibG9ja2VyLnRvZ2dsZUNsYXNzKCdjdXJyZW50Jywhc2VsZWN0ZWQpLnRvZ2dsZUNsYXNzKCdiZWhpbmQnLHNlbGVjdGVkKTtcbiAgICAgICAgICAgIHNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgJC5tb2RhbCA9IGZ1bmN0aW9uKGVsLCBvcHRpb25zKSB7XG4gICAgdmFyIHJlbW92ZSwgdGFyZ2V0O1xuICAgIHRoaXMuJGJvZHkgPSAkKCdib2R5Jyk7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sICQubW9kYWwuZGVmYXVsdHMsIG9wdGlvbnMpO1xuICAgIHRoaXMub3B0aW9ucy5kb0ZhZGUgPSAhaXNOYU4ocGFyc2VJbnQodGhpcy5vcHRpb25zLmZhZGVEdXJhdGlvbiwgMTApKTtcbiAgICB0aGlzLiRibG9ja2VyID0gbnVsbDtcbiAgICBpZiAodGhpcy5vcHRpb25zLmNsb3NlRXhpc3RpbmcpXG4gICAgICB3aGlsZSAoJC5tb2RhbC5pc0FjdGl2ZSgpKVxuICAgICAgICAkLm1vZGFsLmNsb3NlKCk7IC8vIENsb3NlIGFueSBvcGVuIG1vZGFscy5cbiAgICBtb2RhbHMucHVzaCh0aGlzKTtcbiAgICBpZiAoZWwuaXMoJ2EnKSkge1xuICAgICAgdGFyZ2V0ID0gZWwuYXR0cignaHJlZicpO1xuICAgICAgdGhpcy5hbmNob3IgPSBlbDtcbiAgICAgIC8vU2VsZWN0IGVsZW1lbnQgYnkgaWQgZnJvbSBocmVmXG4gICAgICBpZiAoL14jLy50ZXN0KHRhcmdldCkpIHtcbiAgICAgICAgdGhpcy4kZWxtID0gJCh0YXJnZXQpO1xuICAgICAgICBpZiAodGhpcy4kZWxtLmxlbmd0aCAhPT0gMSkgcmV0dXJuIG51bGw7XG4gICAgICAgIHRoaXMuJGJvZHkuYXBwZW5kKHRoaXMuJGVsbSk7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgLy9BSkFYXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiRlbG0gPSAkKCc8ZGl2PicpO1xuICAgICAgICB0aGlzLiRib2R5LmFwcGVuZCh0aGlzLiRlbG0pO1xuICAgICAgICByZW1vdmUgPSBmdW5jdGlvbihldmVudCwgbW9kYWwpIHsgbW9kYWwuZWxtLnJlbW92ZSgpOyB9O1xuICAgICAgICB0aGlzLnNob3dTcGlubmVyKCk7XG4gICAgICAgIGVsLnRyaWdnZXIoJC5tb2RhbC5BSkFYX1NFTkQpO1xuICAgICAgICAkLmdldCh0YXJnZXQpLmRvbmUoZnVuY3Rpb24oaHRtbCkge1xuICAgICAgICAgIGlmICghJC5tb2RhbC5pc0FjdGl2ZSgpKSByZXR1cm47XG4gICAgICAgICAgZWwudHJpZ2dlcigkLm1vZGFsLkFKQVhfU1VDQ0VTUyk7XG4gICAgICAgICAgdmFyIGN1cnJlbnQgPSBnZXRDdXJyZW50KCk7XG4gICAgICAgICAgY3VycmVudC4kZWxtLmVtcHR5KCkuYXBwZW5kKGh0bWwpLm9uKCQubW9kYWwuQ0xPU0UsIHJlbW92ZSk7XG4gICAgICAgICAgY3VycmVudC5oaWRlU3Bpbm5lcigpO1xuICAgICAgICAgIGN1cnJlbnQub3BlbigpO1xuICAgICAgICAgIGVsLnRyaWdnZXIoJC5tb2RhbC5BSkFYX0NPTVBMRVRFKTtcbiAgICAgICAgfSkuZmFpbChmdW5jdGlvbigpIHtcbiAgICAgICAgICBlbC50cmlnZ2VyKCQubW9kYWwuQUpBWF9GQUlMKTtcbiAgICAgICAgICB2YXIgY3VycmVudCA9IGdldEN1cnJlbnQoKTtcbiAgICAgICAgICBjdXJyZW50LmhpZGVTcGlubmVyKCk7XG4gICAgICAgICAgbW9kYWxzLnBvcCgpOyAvLyByZW1vdmUgZXhwZWN0ZWQgbW9kYWwgZnJvbSB0aGUgbGlzdFxuICAgICAgICAgIGVsLnRyaWdnZXIoJC5tb2RhbC5BSkFYX0NPTVBMRVRFKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuJGVsbSA9IGVsO1xuICAgICAgdGhpcy5hbmNob3IgPSBlbDtcbiAgICAgIHRoaXMuJGJvZHkuYXBwZW5kKHRoaXMuJGVsbSk7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9XG4gIH07XG5cbiAgJC5tb2RhbC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6ICQubW9kYWwsXG5cbiAgICBvcGVuOiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBtID0gdGhpcztcbiAgICAgIHRoaXMuYmxvY2soKTtcbiAgICAgIHRoaXMuYW5jaG9yLmJsdXIoKTtcbiAgICAgIGlmKHRoaXMub3B0aW9ucy5kb0ZhZGUpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICBtLnNob3coKTtcbiAgICAgICAgfSwgdGhpcy5vcHRpb25zLmZhZGVEdXJhdGlvbiAqIHRoaXMub3B0aW9ucy5mYWRlRGVsYXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICB9XG4gICAgICAkKGRvY3VtZW50KS5vZmYoJ2tleWRvd24ubW9kYWwnKS5vbigna2V5ZG93bi5tb2RhbCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgIHZhciBjdXJyZW50ID0gZ2V0Q3VycmVudCgpO1xuICAgICAgICBpZiAoZXZlbnQud2hpY2ggPT09IDI3ICYmIGN1cnJlbnQub3B0aW9ucy5lc2NhcGVDbG9zZSkgY3VycmVudC5jbG9zZSgpO1xuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNsaWNrQ2xvc2UpXG4gICAgICAgIHRoaXMuJGJsb2NrZXIuY2xpY2soZnVuY3Rpb24oZSkge1xuICAgICAgICAgIGlmIChlLnRhcmdldCA9PT0gdGhpcylcbiAgICAgICAgICAgICQubW9kYWwuY2xvc2UoKTtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGNsb3NlOiBmdW5jdGlvbigpIHtcbiAgICAgIG1vZGFscy5wb3AoKTtcbiAgICAgIHRoaXMudW5ibG9jaygpO1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICBpZiAoISQubW9kYWwuaXNBY3RpdmUoKSlcbiAgICAgICAgJChkb2N1bWVudCkub2ZmKCdrZXlkb3duLm1vZGFsJyk7XG4gICAgfSxcblxuICAgIGJsb2NrOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuJGVsbS50cmlnZ2VyKCQubW9kYWwuQkVGT1JFX0JMT0NLLCBbdGhpcy5fY3R4KCldKTtcbiAgICAgIHRoaXMuJGJvZHkuY3NzKCdvdmVyZmxvdycsJ2hpZGRlbicpO1xuICAgICAgdGhpcy4kYmxvY2tlciA9ICQoJzxkaXYgY2xhc3M9XCInICsgdGhpcy5vcHRpb25zLmJsb2NrZXJDbGFzcyArICcgYmxvY2tlciBjdXJyZW50XCI+PC9kaXY+JykuYXBwZW5kVG8odGhpcy4kYm9keSk7XG4gICAgICBzZWxlY3RDdXJyZW50KCk7XG4gICAgICBpZih0aGlzLm9wdGlvbnMuZG9GYWRlKSB7XG4gICAgICAgIHRoaXMuJGJsb2NrZXIuY3NzKCdvcGFjaXR5JywwKS5hbmltYXRlKHtvcGFjaXR5OiAxfSwgdGhpcy5vcHRpb25zLmZhZGVEdXJhdGlvbik7XG4gICAgICB9XG4gICAgICB0aGlzLiRlbG0udHJpZ2dlcigkLm1vZGFsLkJMT0NLLCBbdGhpcy5fY3R4KCldKTtcbiAgICB9LFxuXG4gICAgdW5ibG9jazogZnVuY3Rpb24obm93KSB7XG4gICAgICBpZiAoIW5vdyAmJiB0aGlzLm9wdGlvbnMuZG9GYWRlKVxuICAgICAgICB0aGlzLiRibG9ja2VyLmZhZGVPdXQodGhpcy5vcHRpb25zLmZhZGVEdXJhdGlvbiwgdGhpcy51bmJsb2NrLmJpbmQodGhpcyx0cnVlKSk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy4kYmxvY2tlci5jaGlsZHJlbigpLmFwcGVuZFRvKHRoaXMuJGJvZHkpO1xuICAgICAgICB0aGlzLiRibG9ja2VyLnJlbW92ZSgpO1xuICAgICAgICB0aGlzLiRibG9ja2VyID0gbnVsbDtcbiAgICAgICAgc2VsZWN0Q3VycmVudCgpO1xuICAgICAgICBpZiAoISQubW9kYWwuaXNBY3RpdmUoKSlcbiAgICAgICAgICB0aGlzLiRib2R5LmNzcygnb3ZlcmZsb3cnLCcnKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdzogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLiRlbG0udHJpZ2dlcigkLm1vZGFsLkJFRk9SRV9PUEVOLCBbdGhpcy5fY3R4KCldKTtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0Nsb3NlKSB7XG4gICAgICAgIHRoaXMuY2xvc2VCdXR0b24gPSAkKCc8YSBocmVmPVwiI2Nsb3NlLW1vZGFsXCIgcmVsPVwibW9kYWw6Y2xvc2VcIiBjbGFzcz1cImNsb3NlLW1vZGFsICcgKyB0aGlzLm9wdGlvbnMuY2xvc2VDbGFzcyArICdcIj4nICsgdGhpcy5vcHRpb25zLmNsb3NlVGV4dCArICc8L2E+Jyk7XG4gICAgICAgIHRoaXMuJGVsbS5hcHBlbmQodGhpcy5jbG9zZUJ1dHRvbik7XG4gICAgICB9XG4gICAgICB0aGlzLiRlbG0uYWRkQ2xhc3ModGhpcy5vcHRpb25zLm1vZGFsQ2xhc3MpLmFwcGVuZFRvKHRoaXMuJGJsb2NrZXIpO1xuICAgICAgaWYodGhpcy5vcHRpb25zLmRvRmFkZSkge1xuICAgICAgICB0aGlzLiRlbG0uY3NzKHtvcGFjaXR5OiAwLCBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJ30pLmFuaW1hdGUoe29wYWNpdHk6IDF9LCB0aGlzLm9wdGlvbnMuZmFkZUR1cmF0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJGVsbS5jc3MoJ2Rpc3BsYXknLCAnaW5saW5lLWJsb2NrJyk7XG4gICAgICB9XG4gICAgICB0aGlzLiRlbG0udHJpZ2dlcigkLm1vZGFsLk9QRU4sIFt0aGlzLl9jdHgoKV0pO1xuICAgIH0sXG5cbiAgICBoaWRlOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuJGVsbS50cmlnZ2VyKCQubW9kYWwuQkVGT1JFX0NMT1NFLCBbdGhpcy5fY3R4KCldKTtcbiAgICAgIGlmICh0aGlzLmNsb3NlQnV0dG9uKSB0aGlzLmNsb3NlQnV0dG9uLnJlbW92ZSgpO1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgIGlmKHRoaXMub3B0aW9ucy5kb0ZhZGUpIHtcbiAgICAgICAgdGhpcy4kZWxtLmZhZGVPdXQodGhpcy5vcHRpb25zLmZhZGVEdXJhdGlvbiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzLiRlbG0udHJpZ2dlcigkLm1vZGFsLkFGVEVSX0NMT1NFLCBbX3RoaXMuX2N0eCgpXSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4kZWxtLmhpZGUoMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzLiRlbG0udHJpZ2dlcigkLm1vZGFsLkFGVEVSX0NMT1NFLCBbX3RoaXMuX2N0eCgpXSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy4kZWxtLnRyaWdnZXIoJC5tb2RhbC5DTE9TRSwgW3RoaXMuX2N0eCgpXSk7XG4gICAgfSxcblxuICAgIHNob3dTcGlubmVyOiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICghdGhpcy5vcHRpb25zLnNob3dTcGlubmVyKSByZXR1cm47XG4gICAgICB0aGlzLnNwaW5uZXIgPSB0aGlzLnNwaW5uZXIgfHwgJCgnPGRpdiBjbGFzcz1cIicgKyB0aGlzLm9wdGlvbnMubW9kYWxDbGFzcyArICctc3Bpbm5lclwiPjwvZGl2PicpXG4gICAgICAgIC5hcHBlbmQodGhpcy5vcHRpb25zLnNwaW5uZXJIdG1sKTtcbiAgICAgIHRoaXMuJGJvZHkuYXBwZW5kKHRoaXMuc3Bpbm5lcik7XG4gICAgICB0aGlzLnNwaW5uZXIuc2hvdygpO1xuICAgIH0sXG5cbiAgICBoaWRlU3Bpbm5lcjogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5zcGlubmVyKSB0aGlzLnNwaW5uZXIucmVtb3ZlKCk7XG4gICAgfSxcblxuICAgIC8vUmV0dXJuIGNvbnRleHQgZm9yIGN1c3RvbSBldmVudHNcbiAgICBfY3R4OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7IGVsbTogdGhpcy4kZWxtLCAkZWxtOiB0aGlzLiRlbG0sICRibG9ja2VyOiB0aGlzLiRibG9ja2VyLCBvcHRpb25zOiB0aGlzLm9wdGlvbnMsICRhbmNob3I6IHRoaXMuYW5jaG9yIH07XG4gICAgfVxuICB9O1xuXG4gICQubW9kYWwuY2xvc2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgIGlmICghJC5tb2RhbC5pc0FjdGl2ZSgpKSByZXR1cm47XG4gICAgaWYgKGV2ZW50KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHZhciBjdXJyZW50ID0gZ2V0Q3VycmVudCgpO1xuICAgIGN1cnJlbnQuY2xvc2UoKTtcbiAgICByZXR1cm4gY3VycmVudC4kZWxtO1xuICB9O1xuXG4gIC8vIFJldHVybnMgaWYgdGhlcmUgY3VycmVudGx5IGlzIGFuIGFjdGl2ZSBtb2RhbFxuICAkLm1vZGFsLmlzQWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBtb2RhbHMubGVuZ3RoID4gMDtcbiAgfTtcblxuICAkLm1vZGFsLmdldEN1cnJlbnQgPSBnZXRDdXJyZW50O1xuXG4gICQubW9kYWwuZGVmYXVsdHMgPSB7XG4gICAgY2xvc2VFeGlzdGluZzogdHJ1ZSxcbiAgICBlc2NhcGVDbG9zZTogdHJ1ZSxcbiAgICBjbGlja0Nsb3NlOiB0cnVlLFxuICAgIGNsb3NlVGV4dDogJ0Nsb3NlJyxcbiAgICBjbG9zZUNsYXNzOiAnJyxcbiAgICBtb2RhbENsYXNzOiBcIm1vZGFsXCIsXG4gICAgYmxvY2tlckNsYXNzOiBcImpxdWVyeS1tb2RhbFwiLFxuICAgIHNwaW5uZXJIdG1sOiAnPGRpdiBjbGFzcz1cInJlY3QxXCI+PC9kaXY+PGRpdiBjbGFzcz1cInJlY3QyXCI+PC9kaXY+PGRpdiBjbGFzcz1cInJlY3QzXCI+PC9kaXY+PGRpdiBjbGFzcz1cInJlY3Q0XCI+PC9kaXY+JyxcbiAgICBzaG93U3Bpbm5lcjogdHJ1ZSxcbiAgICBzaG93Q2xvc2U6IHRydWUsXG4gICAgZmFkZUR1cmF0aW9uOiBudWxsLCAgIC8vIE51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhlIGZhZGUgYW5pbWF0aW9uIHRha2VzLlxuICAgIGZhZGVEZWxheTogMS4wICAgICAgICAvLyBQb2ludCBkdXJpbmcgdGhlIG92ZXJsYXkncyBmYWRlLWluIHRoYXQgdGhlIG1vZGFsIGJlZ2lucyB0byBmYWRlIGluICguNSA9IDUwJSwgMS41ID0gMTUwJSwgZXRjLilcbiAgfTtcblxuICAvLyBFdmVudCBjb25zdGFudHNcbiAgJC5tb2RhbC5CRUZPUkVfQkxPQ0sgPSAnbW9kYWw6YmVmb3JlLWJsb2NrJztcbiAgJC5tb2RhbC5CTE9DSyA9ICdtb2RhbDpibG9jayc7XG4gICQubW9kYWwuQkVGT1JFX09QRU4gPSAnbW9kYWw6YmVmb3JlLW9wZW4nO1xuICAkLm1vZGFsLk9QRU4gPSAnbW9kYWw6b3Blbic7XG4gICQubW9kYWwuQkVGT1JFX0NMT1NFID0gJ21vZGFsOmJlZm9yZS1jbG9zZSc7XG4gICQubW9kYWwuQ0xPU0UgPSAnbW9kYWw6Y2xvc2UnO1xuICAkLm1vZGFsLkFGVEVSX0NMT1NFID0gJ21vZGFsOmFmdGVyLWNsb3NlJztcbiAgJC5tb2RhbC5BSkFYX1NFTkQgPSAnbW9kYWw6YWpheDpzZW5kJztcbiAgJC5tb2RhbC5BSkFYX1NVQ0NFU1MgPSAnbW9kYWw6YWpheDpzdWNjZXNzJztcbiAgJC5tb2RhbC5BSkFYX0ZBSUwgPSAnbW9kYWw6YWpheDpmYWlsJztcbiAgJC5tb2RhbC5BSkFYX0NPTVBMRVRFID0gJ21vZGFsOmFqYXg6Y29tcGxldGUnO1xuXG4gICQuZm4ubW9kYWwgPSBmdW5jdGlvbihvcHRpb25zKXtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIG5ldyAkLm1vZGFsKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvLyBBdXRvbWF0aWNhbGx5IGJpbmQgbGlua3Mgd2l0aCByZWw9XCJtb2RhbDpjbG9zZVwiIHRvLCB3ZWxsLCBjbG9zZSB0aGUgbW9kYWwuXG4gICQoZG9jdW1lbnQpLm9uKCdjbGljay5tb2RhbCcsICdhW3JlbH49XCJtb2RhbDpjbG9zZVwiXScsICQubW9kYWwuY2xvc2UpO1xuICAkKGRvY3VtZW50KS5vbignY2xpY2subW9kYWwnLCAnYVtyZWx+PVwibW9kYWw6b3BlblwiXScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAkKHRoaXMpLm1vZGFsKCk7XG4gIH0pO1xufSkpO1xuIiwiLyohIHRvb2x0aXBzdGVyIHY0LjIuOCAqLyFmdW5jdGlvbihhLGIpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wianF1ZXJ5XCJdLGZ1bmN0aW9uKGEpe3JldHVybiBiKGEpfSk6XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9YihyZXF1aXJlKFwianF1ZXJ5XCIpKTpiKGpRdWVyeSl9KHRoaXMsZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhKXt0aGlzLiRjb250YWluZXIsdGhpcy5jb25zdHJhaW50cz1udWxsLHRoaXMuX18kdG9vbHRpcCx0aGlzLl9faW5pdChhKX1mdW5jdGlvbiBjKGIsYyl7dmFyIGQ9ITA7cmV0dXJuIGEuZWFjaChiLGZ1bmN0aW9uKGEsZSl7cmV0dXJuIHZvaWQgMD09PWNbYV18fGJbYV0hPT1jW2FdPyhkPSExLCExKTp2b2lkIDB9KSxkfWZ1bmN0aW9uIGQoYil7dmFyIGM9Yi5hdHRyKFwiaWRcIiksZD1jP2gud2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGMpOm51bGw7cmV0dXJuIGQ/ZD09PWJbMF06YS5jb250YWlucyhoLndpbmRvdy5kb2N1bWVudC5ib2R5LGJbMF0pfWZ1bmN0aW9uIGUoKXtpZighZylyZXR1cm4hMTt2YXIgYT1nLmRvY3VtZW50LmJvZHl8fGcuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGI9YS5zdHlsZSxjPVwidHJhbnNpdGlvblwiLGQ9W1wiTW96XCIsXCJXZWJraXRcIixcIktodG1sXCIsXCJPXCIsXCJtc1wiXTtpZihcInN0cmluZ1wiPT10eXBlb2YgYltjXSlyZXR1cm4hMDtjPWMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYy5zdWJzdHIoMSk7Zm9yKHZhciBlPTA7ZTxkLmxlbmd0aDtlKyspaWYoXCJzdHJpbmdcIj09dHlwZW9mIGJbZFtlXStjXSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgZj17YW5pbWF0aW9uOlwiZmFkZVwiLGFuaW1hdGlvbkR1cmF0aW9uOjM1MCxjb250ZW50Om51bGwsY29udGVudEFzSFRNTDohMSxjb250ZW50Q2xvbmluZzohMSxkZWJ1ZzohMCxkZWxheTozMDAsZGVsYXlUb3VjaDpbMzAwLDUwMF0sZnVuY3Rpb25Jbml0Om51bGwsZnVuY3Rpb25CZWZvcmU6bnVsbCxmdW5jdGlvblJlYWR5Om51bGwsZnVuY3Rpb25BZnRlcjpudWxsLGZ1bmN0aW9uRm9ybWF0Om51bGwsSUVtaW46NixpbnRlcmFjdGl2ZTohMSxtdWx0aXBsZTohMSxwYXJlbnQ6bnVsbCxwbHVnaW5zOltcInNpZGVUaXBcIl0scmVwb3NpdGlvbk9uU2Nyb2xsOiExLHJlc3RvcmF0aW9uOlwibm9uZVwiLHNlbGZEZXN0cnVjdGlvbjohMCx0aGVtZTpbXSx0aW1lcjowLHRyYWNrZXJJbnRlcnZhbDo1MDAsdHJhY2tPcmlnaW46ITEsdHJhY2tUb29sdGlwOiExLHRyaWdnZXI6XCJob3ZlclwiLHRyaWdnZXJDbG9zZTp7Y2xpY2s6ITEsbW91c2VsZWF2ZTohMSxvcmlnaW5DbGljazohMSxzY3JvbGw6ITEsdGFwOiExLHRvdWNobGVhdmU6ITF9LHRyaWdnZXJPcGVuOntjbGljazohMSxtb3VzZWVudGVyOiExLHRhcDohMSx0b3VjaHN0YXJ0OiExfSx1cGRhdGVBbmltYXRpb246XCJyb3RhdGVcIix6SW5kZXg6OTk5OTk5OX0sZz1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpudWxsLGg9e2hhc1RvdWNoQ2FwYWJpbGl0eTohKCFnfHwhKFwib250b3VjaHN0YXJ0XCJpbiBnfHxnLkRvY3VtZW50VG91Y2gmJmcuZG9jdW1lbnQgaW5zdGFuY2VvZiBnLkRvY3VtZW50VG91Y2h8fGcubmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzKSksaGFzVHJhbnNpdGlvbnM6ZSgpLElFOiExLHNlbVZlcjpcIjQuMi44XCIsd2luZG93Omd9LGk9ZnVuY3Rpb24oKXt0aGlzLl9fJGVtaXR0ZXJQcml2YXRlPWEoe30pLHRoaXMuX18kZW1pdHRlclB1YmxpYz1hKHt9KSx0aGlzLl9faW5zdGFuY2VzTGF0ZXN0QXJyPVtdLHRoaXMuX19wbHVnaW5zPXt9LHRoaXMuX2Vudj1ofTtpLnByb3RvdHlwZT17X19icmlkZ2U6ZnVuY3Rpb24oYixjLGQpe2lmKCFjW2RdKXt2YXIgZT1mdW5jdGlvbigpe307ZS5wcm90b3R5cGU9Yjt2YXIgZz1uZXcgZTtnLl9faW5pdCYmZy5fX2luaXQoYyksYS5lYWNoKGIsZnVuY3Rpb24oYSxiKXswIT1hLmluZGV4T2YoXCJfX1wiKSYmKGNbYV0/Zi5kZWJ1ZyYmY29uc29sZS5sb2coXCJUaGUgXCIrYStcIiBtZXRob2Qgb2YgdGhlIFwiK2QrXCIgcGx1Z2luIGNvbmZsaWN0cyB3aXRoIGFub3RoZXIgcGx1Z2luIG9yIG5hdGl2ZSBtZXRob2RzXCIpOihjW2FdPWZ1bmN0aW9uKCl7cmV0dXJuIGdbYV0uYXBwbHkoZyxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSl9LGNbYV0uYnJpZGdlZD1nKSl9KSxjW2RdPWd9cmV0dXJuIHRoaXN9LF9fc2V0V2luZG93OmZ1bmN0aW9uKGEpe3JldHVybiBoLndpbmRvdz1hLHRoaXN9LF9nZXRSdWxlcjpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IGIoYSl9LF9vZmY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fXyRlbWl0dGVyUHJpdmF0ZS5vZmYuYXBwbHkodGhpcy5fXyRlbWl0dGVyUHJpdmF0ZSxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSksdGhpc30sX29uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX18kZW1pdHRlclByaXZhdGUub24uYXBwbHkodGhpcy5fXyRlbWl0dGVyUHJpdmF0ZSxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSksdGhpc30sX29uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fJGVtaXR0ZXJQcml2YXRlLm9uZS5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQcml2YXRlLEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpKSx0aGlzfSxfcGx1Z2luOmZ1bmN0aW9uKGIpe3ZhciBjPXRoaXM7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGIpe3ZhciBkPWIsZT1udWxsO3JldHVybiBkLmluZGV4T2YoXCIuXCIpPjA/ZT1jLl9fcGx1Z2luc1tkXTphLmVhY2goYy5fX3BsdWdpbnMsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi5uYW1lLnN1YnN0cmluZyhiLm5hbWUubGVuZ3RoLWQubGVuZ3RoLTEpPT1cIi5cIitkPyhlPWIsITEpOnZvaWQgMH0pLGV9aWYoYi5uYW1lLmluZGV4T2YoXCIuXCIpPDApdGhyb3cgbmV3IEVycm9yKFwiUGx1Z2lucyBtdXN0IGJlIG5hbWVzcGFjZWRcIik7cmV0dXJuIGMuX19wbHVnaW5zW2IubmFtZV09YixiLmNvcmUmJmMuX19icmlkZ2UoYi5jb3JlLGMsYi5uYW1lKSx0aGlzfSxfdHJpZ2dlcjpmdW5jdGlvbigpe3ZhciBhPUFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhWzBdJiYoYVswXT17dHlwZTphWzBdfSksdGhpcy5fXyRlbWl0dGVyUHJpdmF0ZS50cmlnZ2VyLmFwcGx5KHRoaXMuX18kZW1pdHRlclByaXZhdGUsYSksdGhpcy5fXyRlbWl0dGVyUHVibGljLnRyaWdnZXIuYXBwbHkodGhpcy5fXyRlbWl0dGVyUHVibGljLGEpLHRoaXN9LGluc3RhbmNlczpmdW5jdGlvbihiKXt2YXIgYz1bXSxkPWJ8fFwiLnRvb2x0aXBzdGVyZWRcIjtyZXR1cm4gYShkKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9YSh0aGlzKSxkPWIuZGF0YShcInRvb2x0aXBzdGVyLW5zXCIpO2QmJmEuZWFjaChkLGZ1bmN0aW9uKGEsZCl7Yy5wdXNoKGIuZGF0YShkKSl9KX0pLGN9LGluc3RhbmNlc0xhdGVzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faW5zdGFuY2VzTGF0ZXN0QXJyfSxvZmY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fXyRlbWl0dGVyUHVibGljLm9mZi5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQdWJsaWMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cykpLHRoaXN9LG9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX18kZW1pdHRlclB1YmxpYy5vbi5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQdWJsaWMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cykpLHRoaXN9LG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fJGVtaXR0ZXJQdWJsaWMub25lLmFwcGx5KHRoaXMuX18kZW1pdHRlclB1YmxpYyxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSksdGhpc30sb3JpZ2luczpmdW5jdGlvbihiKXt2YXIgYz1iP2IrXCIgXCI6XCJcIjtyZXR1cm4gYShjK1wiLnRvb2x0aXBzdGVyZWRcIikudG9BcnJheSgpfSxzZXREZWZhdWx0czpmdW5jdGlvbihiKXtyZXR1cm4gYS5leHRlbmQoZixiKSx0aGlzfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fJGVtaXR0ZXJQdWJsaWMudHJpZ2dlckhhbmRsZXIuYXBwbHkodGhpcy5fXyRlbWl0dGVyUHVibGljLEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpKSx0aGlzfX0sYS50b29sdGlwc3Rlcj1uZXcgaSxhLlRvb2x0aXBzdGVyPWZ1bmN0aW9uKGIsYyl7dGhpcy5fX2NhbGxiYWNrcz17Y2xvc2U6W10sb3BlbjpbXX0sdGhpcy5fX2Nsb3NpbmdUaW1lLHRoaXMuX19Db250ZW50LHRoaXMuX19jb250ZW50QmNyLHRoaXMuX19kZXN0cm95ZWQ9ITEsdGhpcy5fXyRlbWl0dGVyUHJpdmF0ZT1hKHt9KSx0aGlzLl9fJGVtaXR0ZXJQdWJsaWM9YSh7fSksdGhpcy5fX2VuYWJsZWQ9ITAsdGhpcy5fX2dhcmJhZ2VDb2xsZWN0b3IsdGhpcy5fX0dlb21ldHJ5LHRoaXMuX19sYXN0UG9zaXRpb24sdGhpcy5fX25hbWVzcGFjZT1cInRvb2x0aXBzdGVyLVwiK01hdGgucm91bmQoMWU2Kk1hdGgucmFuZG9tKCkpLHRoaXMuX19vcHRpb25zLHRoaXMuX18kb3JpZ2luUGFyZW50cyx0aGlzLl9fcG9pbnRlcklzT3Zlck9yaWdpbj0hMSx0aGlzLl9fcHJldmlvdXNUaGVtZXM9W10sdGhpcy5fX3N0YXRlPVwiY2xvc2VkXCIsdGhpcy5fX3RpbWVvdXRzPXtjbG9zZTpbXSxvcGVuOm51bGx9LHRoaXMuX190b3VjaEV2ZW50cz1bXSx0aGlzLl9fdHJhY2tlcj1udWxsLHRoaXMuXyRvcmlnaW4sdGhpcy5fJHRvb2x0aXAsdGhpcy5fX2luaXQoYixjKX0sYS5Ub29sdGlwc3Rlci5wcm90b3R5cGU9e19faW5pdDpmdW5jdGlvbihiLGMpe3ZhciBkPXRoaXM7aWYoZC5fJG9yaWdpbj1hKGIpLGQuX19vcHRpb25zPWEuZXh0ZW5kKCEwLHt9LGYsYyksZC5fX29wdGlvbnNGb3JtYXQoKSwhaC5JRXx8aC5JRT49ZC5fX29wdGlvbnMuSUVtaW4pe3ZhciBlPW51bGw7aWYodm9pZCAwPT09ZC5fJG9yaWdpbi5kYXRhKFwidG9vbHRpcHN0ZXItaW5pdGlhbFRpdGxlXCIpJiYoZT1kLl8kb3JpZ2luLmF0dHIoXCJ0aXRsZVwiKSx2b2lkIDA9PT1lJiYoZT1udWxsKSxkLl8kb3JpZ2luLmRhdGEoXCJ0b29sdGlwc3Rlci1pbml0aWFsVGl0bGVcIixlKSksbnVsbCE9PWQuX19vcHRpb25zLmNvbnRlbnQpZC5fX2NvbnRlbnRTZXQoZC5fX29wdGlvbnMuY29udGVudCk7ZWxzZXt2YXIgZyxpPWQuXyRvcmlnaW4uYXR0cihcImRhdGEtdG9vbHRpcC1jb250ZW50XCIpO2kmJihnPWEoaSkpLGcmJmdbMF0/ZC5fX2NvbnRlbnRTZXQoZy5maXJzdCgpKTpkLl9fY29udGVudFNldChlKX1kLl8kb3JpZ2luLnJlbW92ZUF0dHIoXCJ0aXRsZVwiKS5hZGRDbGFzcyhcInRvb2x0aXBzdGVyZWRcIiksZC5fX3ByZXBhcmVPcmlnaW4oKSxkLl9fcHJlcGFyZUdDKCksYS5lYWNoKGQuX19vcHRpb25zLnBsdWdpbnMsZnVuY3Rpb24oYSxiKXtkLl9wbHVnKGIpfSksaC5oYXNUb3VjaENhcGFiaWxpdHkmJmEoaC53aW5kb3cuZG9jdW1lbnQuYm9keSkub24oXCJ0b3VjaG1vdmUuXCIrZC5fX25hbWVzcGFjZStcIi10cmlnZ2VyT3BlblwiLGZ1bmN0aW9uKGEpe2QuX3RvdWNoUmVjb3JkRXZlbnQoYSl9KSxkLl9vbihcImNyZWF0ZWRcIixmdW5jdGlvbigpe2QuX19wcmVwYXJlVG9vbHRpcCgpfSkuX29uKFwicmVwb3NpdGlvbmVkXCIsZnVuY3Rpb24oYSl7ZC5fX2xhc3RQb3NpdGlvbj1hLnBvc2l0aW9ufSl9ZWxzZSBkLl9fb3B0aW9ucy5kaXNhYmxlZD0hMH0sX19jb250ZW50SW5zZXJ0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEuXyR0b29sdGlwLmZpbmQoXCIudG9vbHRpcHN0ZXItY29udGVudFwiKSxjPWEuX19Db250ZW50LGQ9ZnVuY3Rpb24oYSl7Yz1hfTtyZXR1cm4gYS5fdHJpZ2dlcih7dHlwZTpcImZvcm1hdFwiLGNvbnRlbnQ6YS5fX0NvbnRlbnQsZm9ybWF0OmR9KSxhLl9fb3B0aW9ucy5mdW5jdGlvbkZvcm1hdCYmKGM9YS5fX29wdGlvbnMuZnVuY3Rpb25Gb3JtYXQuY2FsbChhLGEse29yaWdpbjphLl8kb3JpZ2luWzBdfSxhLl9fQ29udGVudCkpLFwic3RyaW5nXCIhPXR5cGVvZiBjfHxhLl9fb3B0aW9ucy5jb250ZW50QXNIVE1MP2IuZW1wdHkoKS5hcHBlbmQoYyk6Yi50ZXh0KGMpLGF9LF9fY29udGVudFNldDpmdW5jdGlvbihiKXtyZXR1cm4gYiBpbnN0YW5jZW9mIGEmJnRoaXMuX19vcHRpb25zLmNvbnRlbnRDbG9uaW5nJiYoYj1iLmNsb25lKCEwKSksdGhpcy5fX0NvbnRlbnQ9Yix0aGlzLl90cmlnZ2VyKHt0eXBlOlwidXBkYXRlZFwiLGNvbnRlbnQ6Yn0pLHRoaXN9LF9fZGVzdHJveUVycm9yOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiVGhpcyB0b29sdGlwIGhhcyBiZWVuIGRlc3Ryb3llZCBhbmQgY2Fubm90IGV4ZWN1dGUgeW91ciBtZXRob2QgY2FsbC5cIil9LF9fZ2VvbWV0cnk6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLGM9Yi5fJG9yaWdpbixkPWIuXyRvcmlnaW4uaXMoXCJhcmVhXCIpO2lmKGQpe3ZhciBlPWIuXyRvcmlnaW4ucGFyZW50KCkuYXR0cihcIm5hbWVcIik7Yz1hKCdpbWdbdXNlbWFwPVwiIycrZSsnXCJdJyl9dmFyIGY9Y1swXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxnPWEoaC53aW5kb3cuZG9jdW1lbnQpLGk9YShoLndpbmRvdyksaj1jLGs9e2F2YWlsYWJsZTp7ZG9jdW1lbnQ6bnVsbCx3aW5kb3c6bnVsbH0sZG9jdW1lbnQ6e3NpemU6e2hlaWdodDpnLmhlaWdodCgpLHdpZHRoOmcud2lkdGgoKX19LHdpbmRvdzp7c2Nyb2xsOntsZWZ0Omgud2luZG93LnNjcm9sbFh8fGgud2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LHRvcDpoLndpbmRvdy5zY3JvbGxZfHxoLndpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wfSxzaXplOntoZWlnaHQ6aS5oZWlnaHQoKSx3aWR0aDppLndpZHRoKCl9fSxvcmlnaW46e2ZpeGVkTGluZWFnZTohMSxvZmZzZXQ6e30sc2l6ZTp7aGVpZ2h0OmYuYm90dG9tLWYudG9wLHdpZHRoOmYucmlnaHQtZi5sZWZ0fSx1c2VtYXBJbWFnZTpkP2NbMF06bnVsbCx3aW5kb3dPZmZzZXQ6e2JvdHRvbTpmLmJvdHRvbSxsZWZ0OmYubGVmdCxyaWdodDpmLnJpZ2h0LHRvcDpmLnRvcH19fTtpZihkKXt2YXIgbD1iLl8kb3JpZ2luLmF0dHIoXCJzaGFwZVwiKSxtPWIuXyRvcmlnaW4uYXR0cihcImNvb3Jkc1wiKTtpZihtJiYobT1tLnNwbGl0KFwiLFwiKSxhLm1hcChtLGZ1bmN0aW9uKGEsYil7bVtiXT1wYXJzZUludChhKX0pKSxcImRlZmF1bHRcIiE9bClzd2l0Y2gobCl7Y2FzZVwiY2lyY2xlXCI6dmFyIG49bVswXSxvPW1bMV0scD1tWzJdLHE9by1wLHI9bi1wO2sub3JpZ2luLnNpemUuaGVpZ2h0PTIqcCxrLm9yaWdpbi5zaXplLndpZHRoPWsub3JpZ2luLnNpemUuaGVpZ2h0LGsub3JpZ2luLndpbmRvd09mZnNldC5sZWZ0Kz1yLGsub3JpZ2luLndpbmRvd09mZnNldC50b3ArPXE7YnJlYWs7Y2FzZVwicmVjdFwiOnZhciBzPW1bMF0sdD1tWzFdLHU9bVsyXSx2PW1bM107ay5vcmlnaW4uc2l6ZS5oZWlnaHQ9di10LGsub3JpZ2luLnNpemUud2lkdGg9dS1zLGsub3JpZ2luLndpbmRvd09mZnNldC5sZWZ0Kz1zLGsub3JpZ2luLndpbmRvd09mZnNldC50b3ArPXQ7YnJlYWs7Y2FzZVwicG9seVwiOmZvcih2YXIgdz0wLHg9MCx5PTAsej0wLEE9XCJldmVuXCIsQj0wO0I8bS5sZW5ndGg7QisrKXt2YXIgQz1tW0JdO1wiZXZlblwiPT1BPyhDPnkmJih5PUMsMD09PUImJih3PXkpKSx3PkMmJih3PUMpLEE9XCJvZGRcIik6KEM+eiYmKHo9QywxPT1CJiYoeD16KSkseD5DJiYoeD1DKSxBPVwiZXZlblwiKX1rLm9yaWdpbi5zaXplLmhlaWdodD16LXgsay5vcmlnaW4uc2l6ZS53aWR0aD15LXcsay5vcmlnaW4ud2luZG93T2Zmc2V0LmxlZnQrPXcsay5vcmlnaW4ud2luZG93T2Zmc2V0LnRvcCs9eH19dmFyIEQ9ZnVuY3Rpb24oYSl7ay5vcmlnaW4uc2l6ZS5oZWlnaHQ9YS5oZWlnaHQsay5vcmlnaW4ud2luZG93T2Zmc2V0LmxlZnQ9YS5sZWZ0LGsub3JpZ2luLndpbmRvd09mZnNldC50b3A9YS50b3Asay5vcmlnaW4uc2l6ZS53aWR0aD1hLndpZHRofTtmb3IoYi5fdHJpZ2dlcih7dHlwZTpcImdlb21ldHJ5XCIsZWRpdDpELGdlb21ldHJ5OntoZWlnaHQ6ay5vcmlnaW4uc2l6ZS5oZWlnaHQsbGVmdDprLm9yaWdpbi53aW5kb3dPZmZzZXQubGVmdCx0b3A6ay5vcmlnaW4ud2luZG93T2Zmc2V0LnRvcCx3aWR0aDprLm9yaWdpbi5zaXplLndpZHRofX0pLGsub3JpZ2luLndpbmRvd09mZnNldC5yaWdodD1rLm9yaWdpbi53aW5kb3dPZmZzZXQubGVmdCtrLm9yaWdpbi5zaXplLndpZHRoLGsub3JpZ2luLndpbmRvd09mZnNldC5ib3R0b209ay5vcmlnaW4ud2luZG93T2Zmc2V0LnRvcCtrLm9yaWdpbi5zaXplLmhlaWdodCxrLm9yaWdpbi5vZmZzZXQubGVmdD1rLm9yaWdpbi53aW5kb3dPZmZzZXQubGVmdCtrLndpbmRvdy5zY3JvbGwubGVmdCxrLm9yaWdpbi5vZmZzZXQudG9wPWsub3JpZ2luLndpbmRvd09mZnNldC50b3Aray53aW5kb3cuc2Nyb2xsLnRvcCxrLm9yaWdpbi5vZmZzZXQuYm90dG9tPWsub3JpZ2luLm9mZnNldC50b3Aray5vcmlnaW4uc2l6ZS5oZWlnaHQsay5vcmlnaW4ub2Zmc2V0LnJpZ2h0PWsub3JpZ2luLm9mZnNldC5sZWZ0K2sub3JpZ2luLnNpemUud2lkdGgsay5hdmFpbGFibGUuZG9jdW1lbnQ9e2JvdHRvbTp7aGVpZ2h0OmsuZG9jdW1lbnQuc2l6ZS5oZWlnaHQtay5vcmlnaW4ub2Zmc2V0LmJvdHRvbSx3aWR0aDprLmRvY3VtZW50LnNpemUud2lkdGh9LGxlZnQ6e2hlaWdodDprLmRvY3VtZW50LnNpemUuaGVpZ2h0LHdpZHRoOmsub3JpZ2luLm9mZnNldC5sZWZ0fSxyaWdodDp7aGVpZ2h0OmsuZG9jdW1lbnQuc2l6ZS5oZWlnaHQsd2lkdGg6ay5kb2N1bWVudC5zaXplLndpZHRoLWsub3JpZ2luLm9mZnNldC5yaWdodH0sdG9wOntoZWlnaHQ6ay5vcmlnaW4ub2Zmc2V0LnRvcCx3aWR0aDprLmRvY3VtZW50LnNpemUud2lkdGh9fSxrLmF2YWlsYWJsZS53aW5kb3c9e2JvdHRvbTp7aGVpZ2h0Ok1hdGgubWF4KGsud2luZG93LnNpemUuaGVpZ2h0LU1hdGgubWF4KGsub3JpZ2luLndpbmRvd09mZnNldC5ib3R0b20sMCksMCksd2lkdGg6ay53aW5kb3cuc2l6ZS53aWR0aH0sbGVmdDp7aGVpZ2h0Omsud2luZG93LnNpemUuaGVpZ2h0LHdpZHRoOk1hdGgubWF4KGsub3JpZ2luLndpbmRvd09mZnNldC5sZWZ0LDApfSxyaWdodDp7aGVpZ2h0Omsud2luZG93LnNpemUuaGVpZ2h0LHdpZHRoOk1hdGgubWF4KGsud2luZG93LnNpemUud2lkdGgtTWF0aC5tYXgoay5vcmlnaW4ud2luZG93T2Zmc2V0LnJpZ2h0LDApLDApfSx0b3A6e2hlaWdodDpNYXRoLm1heChrLm9yaWdpbi53aW5kb3dPZmZzZXQudG9wLDApLHdpZHRoOmsud2luZG93LnNpemUud2lkdGh9fTtcImh0bWxcIiE9alswXS50YWdOYW1lLnRvTG93ZXJDYXNlKCk7KXtpZihcImZpeGVkXCI9PWouY3NzKFwicG9zaXRpb25cIikpe2sub3JpZ2luLmZpeGVkTGluZWFnZT0hMDticmVha31qPWoucGFyZW50KCl9cmV0dXJuIGt9LF9fb3B0aW9uc0Zvcm1hdDpmdW5jdGlvbigpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0aGlzLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbiYmKHRoaXMuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uPVt0aGlzLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbix0aGlzLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbl0pLFwibnVtYmVyXCI9PXR5cGVvZiB0aGlzLl9fb3B0aW9ucy5kZWxheSYmKHRoaXMuX19vcHRpb25zLmRlbGF5PVt0aGlzLl9fb3B0aW9ucy5kZWxheSx0aGlzLl9fb3B0aW9ucy5kZWxheV0pLFwibnVtYmVyXCI9PXR5cGVvZiB0aGlzLl9fb3B0aW9ucy5kZWxheVRvdWNoJiYodGhpcy5fX29wdGlvbnMuZGVsYXlUb3VjaD1bdGhpcy5fX29wdGlvbnMuZGVsYXlUb3VjaCx0aGlzLl9fb3B0aW9ucy5kZWxheVRvdWNoXSksXCJzdHJpbmdcIj09dHlwZW9mIHRoaXMuX19vcHRpb25zLnRoZW1lJiYodGhpcy5fX29wdGlvbnMudGhlbWU9W3RoaXMuX19vcHRpb25zLnRoZW1lXSksbnVsbD09PXRoaXMuX19vcHRpb25zLnBhcmVudD90aGlzLl9fb3B0aW9ucy5wYXJlbnQ9YShoLndpbmRvdy5kb2N1bWVudC5ib2R5KTpcInN0cmluZ1wiPT10eXBlb2YgdGhpcy5fX29wdGlvbnMucGFyZW50JiYodGhpcy5fX29wdGlvbnMucGFyZW50PWEodGhpcy5fX29wdGlvbnMucGFyZW50KSksXCJob3ZlclwiPT10aGlzLl9fb3B0aW9ucy50cmlnZ2VyPyh0aGlzLl9fb3B0aW9ucy50cmlnZ2VyT3Blbj17bW91c2VlbnRlcjohMCx0b3VjaHN0YXJ0OiEwfSx0aGlzLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2U9e21vdXNlbGVhdmU6ITAsb3JpZ2luQ2xpY2s6ITAsdG91Y2hsZWF2ZTohMH0pOlwiY2xpY2tcIj09dGhpcy5fX29wdGlvbnMudHJpZ2dlciYmKHRoaXMuX19vcHRpb25zLnRyaWdnZXJPcGVuPXtjbGljazohMCx0YXA6ITB9LHRoaXMuX19vcHRpb25zLnRyaWdnZXJDbG9zZT17Y2xpY2s6ITAsdGFwOiEwfSksdGhpcy5fdHJpZ2dlcihcIm9wdGlvbnNcIiksdGhpc30sX19wcmVwYXJlR0M6ZnVuY3Rpb24oKXt2YXIgYj10aGlzO3JldHVybiBiLl9fb3B0aW9ucy5zZWxmRGVzdHJ1Y3Rpb24/Yi5fX2dhcmJhZ2VDb2xsZWN0b3I9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXt2YXIgYz0obmV3IERhdGUpLmdldFRpbWUoKTtiLl9fdG91Y2hFdmVudHM9YS5ncmVwKGIuX190b3VjaEV2ZW50cyxmdW5jdGlvbihhLGIpe3JldHVybiBjLWEudGltZT42ZTR9KSxkKGIuXyRvcmlnaW4pfHxiLmNsb3NlKGZ1bmN0aW9uKCl7Yi5kZXN0cm95KCl9KX0sMmU0KTpjbGVhckludGVydmFsKGIuX19nYXJiYWdlQ29sbGVjdG9yKSxifSxfX3ByZXBhcmVPcmlnaW46ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2lmKGEuXyRvcmlnaW4ub2ZmKFwiLlwiK2EuX19uYW1lc3BhY2UrXCItdHJpZ2dlck9wZW5cIiksaC5oYXNUb3VjaENhcGFiaWxpdHkmJmEuXyRvcmlnaW4ub24oXCJ0b3VjaHN0YXJ0LlwiK2EuX19uYW1lc3BhY2UrXCItdHJpZ2dlck9wZW4gdG91Y2hlbmQuXCIrYS5fX25hbWVzcGFjZStcIi10cmlnZ2VyT3BlbiB0b3VjaGNhbmNlbC5cIithLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuXCIsZnVuY3Rpb24oYil7YS5fdG91Y2hSZWNvcmRFdmVudChiKX0pLGEuX19vcHRpb25zLnRyaWdnZXJPcGVuLmNsaWNrfHxhLl9fb3B0aW9ucy50cmlnZ2VyT3Blbi50YXAmJmguaGFzVG91Y2hDYXBhYmlsaXR5KXt2YXIgYj1cIlwiO2EuX19vcHRpb25zLnRyaWdnZXJPcGVuLmNsaWNrJiYoYis9XCJjbGljay5cIithLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuIFwiKSxhLl9fb3B0aW9ucy50cmlnZ2VyT3Blbi50YXAmJmguaGFzVG91Y2hDYXBhYmlsaXR5JiYoYis9XCJ0b3VjaGVuZC5cIithLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuXCIpLGEuXyRvcmlnaW4ub24oYixmdW5jdGlvbihiKXthLl90b3VjaElzTWVhbmluZ2Z1bEV2ZW50KGIpJiZhLl9vcGVuKGIpfSl9aWYoYS5fX29wdGlvbnMudHJpZ2dlck9wZW4ubW91c2VlbnRlcnx8YS5fX29wdGlvbnMudHJpZ2dlck9wZW4udG91Y2hzdGFydCYmaC5oYXNUb3VjaENhcGFiaWxpdHkpe3ZhciBiPVwiXCI7YS5fX29wdGlvbnMudHJpZ2dlck9wZW4ubW91c2VlbnRlciYmKGIrPVwibW91c2VlbnRlci5cIithLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuIFwiKSxhLl9fb3B0aW9ucy50cmlnZ2VyT3Blbi50b3VjaHN0YXJ0JiZoLmhhc1RvdWNoQ2FwYWJpbGl0eSYmKGIrPVwidG91Y2hzdGFydC5cIithLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuXCIpLGEuXyRvcmlnaW4ub24oYixmdW5jdGlvbihiKXshYS5fdG91Y2hJc1RvdWNoRXZlbnQoYikmJmEuX3RvdWNoSXNFbXVsYXRlZEV2ZW50KGIpfHwoYS5fX3BvaW50ZXJJc092ZXJPcmlnaW49ITAsYS5fb3BlblNob3J0bHkoYikpfSl9aWYoYS5fX29wdGlvbnMudHJpZ2dlckNsb3NlLm1vdXNlbGVhdmV8fGEuX19vcHRpb25zLnRyaWdnZXJDbG9zZS50b3VjaGxlYXZlJiZoLmhhc1RvdWNoQ2FwYWJpbGl0eSl7dmFyIGI9XCJcIjthLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2UubW91c2VsZWF2ZSYmKGIrPVwibW91c2VsZWF2ZS5cIithLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuIFwiKSxhLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2UudG91Y2hsZWF2ZSYmaC5oYXNUb3VjaENhcGFiaWxpdHkmJihiKz1cInRvdWNoZW5kLlwiK2EuX19uYW1lc3BhY2UrXCItdHJpZ2dlck9wZW4gdG91Y2hjYW5jZWwuXCIrYS5fX25hbWVzcGFjZStcIi10cmlnZ2VyT3BlblwiKSxhLl8kb3JpZ2luLm9uKGIsZnVuY3Rpb24oYil7YS5fdG91Y2hJc01lYW5pbmdmdWxFdmVudChiKSYmKGEuX19wb2ludGVySXNPdmVyT3JpZ2luPSExKX0pfXJldHVybiBhfSxfX3ByZXBhcmVUb29sdGlwOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjPWIuX19vcHRpb25zLmludGVyYWN0aXZlP1wiYXV0b1wiOlwiXCI7cmV0dXJuIGIuXyR0b29sdGlwLmF0dHIoXCJpZFwiLGIuX19uYW1lc3BhY2UpLmNzcyh7XCJwb2ludGVyLWV2ZW50c1wiOmMsekluZGV4OmIuX19vcHRpb25zLnpJbmRleH0pLGEuZWFjaChiLl9fcHJldmlvdXNUaGVtZXMsZnVuY3Rpb24oYSxjKXtiLl8kdG9vbHRpcC5yZW1vdmVDbGFzcyhjKX0pLGEuZWFjaChiLl9fb3B0aW9ucy50aGVtZSxmdW5jdGlvbihhLGMpe2IuXyR0b29sdGlwLmFkZENsYXNzKGMpfSksYi5fX3ByZXZpb3VzVGhlbWVzPWEubWVyZ2UoW10sYi5fX29wdGlvbnMudGhlbWUpLGJ9LF9fc2Nyb2xsSGFuZGxlcjpmdW5jdGlvbihiKXt2YXIgYz10aGlzO2lmKGMuX19vcHRpb25zLnRyaWdnZXJDbG9zZS5zY3JvbGwpYy5fY2xvc2UoYik7ZWxzZSBpZihkKGMuXyRvcmlnaW4pJiZkKGMuXyR0b29sdGlwKSl7dmFyIGU9bnVsbDtpZihiLnRhcmdldD09PWgud2luZG93LmRvY3VtZW50KWMuX19HZW9tZXRyeS5vcmlnaW4uZml4ZWRMaW5lYWdlfHxjLl9fb3B0aW9ucy5yZXBvc2l0aW9uT25TY3JvbGwmJmMucmVwb3NpdGlvbihiKTtlbHNle2U9Yy5fX2dlb21ldHJ5KCk7dmFyIGY9ITE7aWYoXCJmaXhlZFwiIT1jLl8kb3JpZ2luLmNzcyhcInBvc2l0aW9uXCIpJiZjLl9fJG9yaWdpblBhcmVudHMuZWFjaChmdW5jdGlvbihiLGMpe3ZhciBkPWEoYyksZz1kLmNzcyhcIm92ZXJmbG93LXhcIiksaD1kLmNzcyhcIm92ZXJmbG93LXlcIik7aWYoXCJ2aXNpYmxlXCIhPWd8fFwidmlzaWJsZVwiIT1oKXt2YXIgaT1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKFwidmlzaWJsZVwiIT1nJiYoZS5vcmlnaW4ud2luZG93T2Zmc2V0LmxlZnQ8aS5sZWZ0fHxlLm9yaWdpbi53aW5kb3dPZmZzZXQucmlnaHQ+aS5yaWdodCkpcmV0dXJuIGY9ITAsITE7aWYoXCJ2aXNpYmxlXCIhPWgmJihlLm9yaWdpbi53aW5kb3dPZmZzZXQudG9wPGkudG9wfHxlLm9yaWdpbi53aW5kb3dPZmZzZXQuYm90dG9tPmkuYm90dG9tKSlyZXR1cm4gZj0hMCwhMX1yZXR1cm5cImZpeGVkXCI9PWQuY3NzKFwicG9zaXRpb25cIik/ITE6dm9pZCAwfSksZiljLl8kdG9vbHRpcC5jc3MoXCJ2aXNpYmlsaXR5XCIsXCJoaWRkZW5cIik7ZWxzZSBpZihjLl8kdG9vbHRpcC5jc3MoXCJ2aXNpYmlsaXR5XCIsXCJ2aXNpYmxlXCIpLGMuX19vcHRpb25zLnJlcG9zaXRpb25PblNjcm9sbCljLnJlcG9zaXRpb24oYik7ZWxzZXt2YXIgZz1lLm9yaWdpbi5vZmZzZXQubGVmdC1jLl9fR2VvbWV0cnkub3JpZ2luLm9mZnNldC5sZWZ0LGk9ZS5vcmlnaW4ub2Zmc2V0LnRvcC1jLl9fR2VvbWV0cnkub3JpZ2luLm9mZnNldC50b3A7Yy5fJHRvb2x0aXAuY3NzKHtsZWZ0OmMuX19sYXN0UG9zaXRpb24uY29vcmQubGVmdCtnLHRvcDpjLl9fbGFzdFBvc2l0aW9uLmNvb3JkLnRvcCtpfSl9fWMuX3RyaWdnZXIoe3R5cGU6XCJzY3JvbGxcIixldmVudDpiLGdlbzplfSl9cmV0dXJuIGN9LF9fc3RhdGVTZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX19zdGF0ZT1hLHRoaXMuX3RyaWdnZXIoe3R5cGU6XCJzdGF0ZVwiLHN0YXRlOmF9KSx0aGlzfSxfX3RpbWVvdXRzQ2xlYXI6ZnVuY3Rpb24oKXtyZXR1cm4gY2xlYXJUaW1lb3V0KHRoaXMuX190aW1lb3V0cy5vcGVuKSx0aGlzLl9fdGltZW91dHMub3Blbj1udWxsLGEuZWFjaCh0aGlzLl9fdGltZW91dHMuY2xvc2UsZnVuY3Rpb24oYSxiKXtjbGVhclRpbWVvdXQoYil9KSx0aGlzLl9fdGltZW91dHMuY2xvc2U9W10sdGhpc30sX190cmFja2VyU3RhcnQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9YS5fJHRvb2x0aXAuZmluZChcIi50b29sdGlwc3Rlci1jb250ZW50XCIpO3JldHVybiBhLl9fb3B0aW9ucy50cmFja1Rvb2x0aXAmJihhLl9fY29udGVudEJjcj1iWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxhLl9fdHJhY2tlcj1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2lmKGQoYS5fJG9yaWdpbikmJmQoYS5fJHRvb2x0aXApKXtpZihhLl9fb3B0aW9ucy50cmFja09yaWdpbil7dmFyIGU9YS5fX2dlb21ldHJ5KCksZj0hMTtjKGUub3JpZ2luLnNpemUsYS5fX0dlb21ldHJ5Lm9yaWdpbi5zaXplKSYmKGEuX19HZW9tZXRyeS5vcmlnaW4uZml4ZWRMaW5lYWdlP2MoZS5vcmlnaW4ud2luZG93T2Zmc2V0LGEuX19HZW9tZXRyeS5vcmlnaW4ud2luZG93T2Zmc2V0KSYmKGY9ITApOmMoZS5vcmlnaW4ub2Zmc2V0LGEuX19HZW9tZXRyeS5vcmlnaW4ub2Zmc2V0KSYmKGY9ITApKSxmfHwoYS5fX29wdGlvbnMudHJpZ2dlckNsb3NlLm1vdXNlbGVhdmU/YS5fY2xvc2UoKTphLnJlcG9zaXRpb24oKSl9aWYoYS5fX29wdGlvbnMudHJhY2tUb29sdGlwKXt2YXIgZz1iWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2cuaGVpZ2h0PT09YS5fX2NvbnRlbnRCY3IuaGVpZ2h0JiZnLndpZHRoPT09YS5fX2NvbnRlbnRCY3Iud2lkdGh8fChhLnJlcG9zaXRpb24oKSxhLl9fY29udGVudEJjcj1nKX19ZWxzZSBhLl9jbG9zZSgpfSxhLl9fb3B0aW9ucy50cmFja2VySW50ZXJ2YWwpLGF9LF9jbG9zZTpmdW5jdGlvbihiLGMsZCl7dmFyIGU9dGhpcyxmPSEwO2lmKGUuX3RyaWdnZXIoe3R5cGU6XCJjbG9zZVwiLGV2ZW50OmIsc3RvcDpmdW5jdGlvbigpe2Y9ITF9fSksZnx8ZCl7YyYmZS5fX2NhbGxiYWNrcy5jbG9zZS5wdXNoKGMpLGUuX19jYWxsYmFja3Mub3Blbj1bXSxlLl9fdGltZW91dHNDbGVhcigpO3ZhciBnPWZ1bmN0aW9uKCl7YS5lYWNoKGUuX19jYWxsYmFja3MuY2xvc2UsZnVuY3Rpb24oYSxjKXtjLmNhbGwoZSxlLHtldmVudDpiLG9yaWdpbjplLl8kb3JpZ2luWzBdfSl9KSxlLl9fY2FsbGJhY2tzLmNsb3NlPVtdfTtpZihcImNsb3NlZFwiIT1lLl9fc3RhdGUpe3ZhciBpPSEwLGo9bmV3IERhdGUsaz1qLmdldFRpbWUoKSxsPWsrZS5fX29wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb25bMV07aWYoXCJkaXNhcHBlYXJpbmdcIj09ZS5fX3N0YXRlJiZsPmUuX19jbG9zaW5nVGltZSYmZS5fX29wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb25bMV0+MCYmKGk9ITEpLGkpe2UuX19jbG9zaW5nVGltZT1sLFwiZGlzYXBwZWFyaW5nXCIhPWUuX19zdGF0ZSYmZS5fX3N0YXRlU2V0KFwiZGlzYXBwZWFyaW5nXCIpO3ZhciBtPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChlLl9fdHJhY2tlciksZS5fdHJpZ2dlcih7dHlwZTpcImNsb3NpbmdcIixldmVudDpifSksZS5fJHRvb2x0aXAub2ZmKFwiLlwiK2UuX19uYW1lc3BhY2UrXCItdHJpZ2dlckNsb3NlXCIpLnJlbW92ZUNsYXNzKFwidG9vbHRpcHN0ZXItZHlpbmdcIiksYShoLndpbmRvdykub2ZmKFwiLlwiK2UuX19uYW1lc3BhY2UrXCItdHJpZ2dlckNsb3NlXCIpLGUuX18kb3JpZ2luUGFyZW50cy5lYWNoKGZ1bmN0aW9uKGIsYyl7YShjKS5vZmYoXCJzY3JvbGwuXCIrZS5fX25hbWVzcGFjZStcIi10cmlnZ2VyQ2xvc2VcIil9KSxlLl9fJG9yaWdpblBhcmVudHM9bnVsbCxhKGgud2luZG93LmRvY3VtZW50LmJvZHkpLm9mZihcIi5cIitlLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJDbG9zZVwiKSxlLl8kb3JpZ2luLm9mZihcIi5cIitlLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJDbG9zZVwiKSxlLl9vZmYoXCJkaXNtaXNzYWJsZVwiKSxlLl9fc3RhdGVTZXQoXCJjbG9zZWRcIiksZS5fdHJpZ2dlcih7dHlwZTpcImFmdGVyXCIsZXZlbnQ6Yn0pLGUuX19vcHRpb25zLmZ1bmN0aW9uQWZ0ZXImJmUuX19vcHRpb25zLmZ1bmN0aW9uQWZ0ZXIuY2FsbChlLGUse2V2ZW50OmIsb3JpZ2luOmUuXyRvcmlnaW5bMF19KSxnKCl9O2guaGFzVHJhbnNpdGlvbnM/KGUuXyR0b29sdGlwLmNzcyh7XCItbW96LWFuaW1hdGlvbi1kdXJhdGlvblwiOmUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzFdK1wibXNcIixcIi1tcy1hbmltYXRpb24tZHVyYXRpb25cIjplLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblsxXStcIm1zXCIsXCItby1hbmltYXRpb24tZHVyYXRpb25cIjplLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblsxXStcIm1zXCIsXCItd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvblwiOmUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzFdK1wibXNcIixcImFuaW1hdGlvbi1kdXJhdGlvblwiOmUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzFdK1wibXNcIixcInRyYW5zaXRpb24tZHVyYXRpb25cIjplLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblsxXStcIm1zXCJ9KSxlLl8kdG9vbHRpcC5jbGVhclF1ZXVlKCkucmVtb3ZlQ2xhc3MoXCJ0b29sdGlwc3Rlci1zaG93XCIpLmFkZENsYXNzKFwidG9vbHRpcHN0ZXItZHlpbmdcIiksZS5fX29wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb25bMV0+MCYmZS5fJHRvb2x0aXAuZGVsYXkoZS5fX29wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb25bMV0pLGUuXyR0b29sdGlwLnF1ZXVlKG0pKTplLl8kdG9vbHRpcC5zdG9wKCkuZmFkZU91dChlLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblsxXSxtKX19ZWxzZSBnKCl9cmV0dXJuIGV9LF9vZmY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fXyRlbWl0dGVyUHJpdmF0ZS5vZmYuYXBwbHkodGhpcy5fXyRlbWl0dGVyUHJpdmF0ZSxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSksdGhpc30sX29uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX18kZW1pdHRlclByaXZhdGUub24uYXBwbHkodGhpcy5fXyRlbWl0dGVyUHJpdmF0ZSxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSksdGhpc30sX29uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fJGVtaXR0ZXJQcml2YXRlLm9uZS5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQcml2YXRlLEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpKSx0aGlzfSxfb3BlbjpmdW5jdGlvbihiLGMpe3ZhciBlPXRoaXM7aWYoIWUuX19kZXN0cm95aW5nJiZkKGUuXyRvcmlnaW4pJiZlLl9fZW5hYmxlZCl7dmFyIGY9ITA7aWYoXCJjbG9zZWRcIj09ZS5fX3N0YXRlJiYoZS5fdHJpZ2dlcih7dHlwZTpcImJlZm9yZVwiLGV2ZW50OmIsc3RvcDpmdW5jdGlvbigpe2Y9ITF9fSksZiYmZS5fX29wdGlvbnMuZnVuY3Rpb25CZWZvcmUmJihmPWUuX19vcHRpb25zLmZ1bmN0aW9uQmVmb3JlLmNhbGwoZSxlLHtldmVudDpiLG9yaWdpbjplLl8kb3JpZ2luWzBdfSkpKSxmIT09ITEmJm51bGwhPT1lLl9fQ29udGVudCl7YyYmZS5fX2NhbGxiYWNrcy5vcGVuLnB1c2goYyksZS5fX2NhbGxiYWNrcy5jbG9zZT1bXSxlLl9fdGltZW91dHNDbGVhcigpO3ZhciBnLGk9ZnVuY3Rpb24oKXtcInN0YWJsZVwiIT1lLl9fc3RhdGUmJmUuX19zdGF0ZVNldChcInN0YWJsZVwiKSxhLmVhY2goZS5fX2NhbGxiYWNrcy5vcGVuLGZ1bmN0aW9uKGEsYil7Yi5jYWxsKGUsZSx7b3JpZ2luOmUuXyRvcmlnaW5bMF0sdG9vbHRpcDplLl8kdG9vbHRpcFswXX0pfSksZS5fX2NhbGxiYWNrcy5vcGVuPVtdfTtpZihcImNsb3NlZFwiIT09ZS5fX3N0YXRlKWc9MCxcImRpc2FwcGVhcmluZ1wiPT09ZS5fX3N0YXRlPyhlLl9fc3RhdGVTZXQoXCJhcHBlYXJpbmdcIiksaC5oYXNUcmFuc2l0aW9ucz8oZS5fJHRvb2x0aXAuY2xlYXJRdWV1ZSgpLnJlbW92ZUNsYXNzKFwidG9vbHRpcHN0ZXItZHlpbmdcIikuYWRkQ2xhc3MoXCJ0b29sdGlwc3Rlci1zaG93XCIpLGUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzBdPjAmJmUuXyR0b29sdGlwLmRlbGF5KGUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzBdKSxlLl8kdG9vbHRpcC5xdWV1ZShpKSk6ZS5fJHRvb2x0aXAuc3RvcCgpLmZhZGVJbihpKSk6XCJzdGFibGVcIj09ZS5fX3N0YXRlJiZpKCk7ZWxzZXtpZihlLl9fc3RhdGVTZXQoXCJhcHBlYXJpbmdcIiksZz1lLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblswXSxlLl9fY29udGVudEluc2VydCgpLGUucmVwb3NpdGlvbihiLCEwKSxoLmhhc1RyYW5zaXRpb25zPyhlLl8kdG9vbHRpcC5hZGRDbGFzcyhcInRvb2x0aXBzdGVyLVwiK2UuX19vcHRpb25zLmFuaW1hdGlvbikuYWRkQ2xhc3MoXCJ0b29sdGlwc3Rlci1pbml0aWFsXCIpLmNzcyh7XCItbW96LWFuaW1hdGlvbi1kdXJhdGlvblwiOmUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzBdK1wibXNcIixcIi1tcy1hbmltYXRpb24tZHVyYXRpb25cIjplLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblswXStcIm1zXCIsXCItby1hbmltYXRpb24tZHVyYXRpb25cIjplLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblswXStcIm1zXCIsXCItd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvblwiOmUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzBdK1wibXNcIixcImFuaW1hdGlvbi1kdXJhdGlvblwiOmUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzBdK1wibXNcIixcInRyYW5zaXRpb24tZHVyYXRpb25cIjplLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblswXStcIm1zXCJ9KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XCJjbG9zZWRcIiE9ZS5fX3N0YXRlJiYoZS5fJHRvb2x0aXAuYWRkQ2xhc3MoXCJ0b29sdGlwc3Rlci1zaG93XCIpLnJlbW92ZUNsYXNzKFwidG9vbHRpcHN0ZXItaW5pdGlhbFwiKSxlLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblswXT4wJiZlLl8kdG9vbHRpcC5kZWxheShlLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblswXSksZS5fJHRvb2x0aXAucXVldWUoaSkpfSwwKSk6ZS5fJHRvb2x0aXAuY3NzKFwiZGlzcGxheVwiLFwibm9uZVwiKS5mYWRlSW4oZS5fX29wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb25bMF0saSksZS5fX3RyYWNrZXJTdGFydCgpLGEoaC53aW5kb3cpLm9uKFwicmVzaXplLlwiK2UuX19uYW1lc3BhY2UrXCItdHJpZ2dlckNsb3NlXCIsZnVuY3Rpb24oYil7dmFyIGM9YShkb2N1bWVudC5hY3RpdmVFbGVtZW50KTsoYy5pcyhcImlucHV0XCIpfHxjLmlzKFwidGV4dGFyZWFcIikpJiZhLmNvbnRhaW5zKGUuXyR0b29sdGlwWzBdLGNbMF0pfHxlLnJlcG9zaXRpb24oYil9KS5vbihcInNjcm9sbC5cIitlLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJDbG9zZVwiLGZ1bmN0aW9uKGEpe2UuX19zY3JvbGxIYW5kbGVyKGEpfSksZS5fXyRvcmlnaW5QYXJlbnRzPWUuXyRvcmlnaW4ucGFyZW50cygpLGUuX18kb3JpZ2luUGFyZW50cy5lYWNoKGZ1bmN0aW9uKGIsYyl7YShjKS5vbihcInNjcm9sbC5cIitlLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJDbG9zZVwiLGZ1bmN0aW9uKGEpe2UuX19zY3JvbGxIYW5kbGVyKGEpfSl9KSxlLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2UubW91c2VsZWF2ZXx8ZS5fX29wdGlvbnMudHJpZ2dlckNsb3NlLnRvdWNobGVhdmUmJmguaGFzVG91Y2hDYXBhYmlsaXR5KXtlLl9vbihcImRpc21pc3NhYmxlXCIsZnVuY3Rpb24oYSl7YS5kaXNtaXNzYWJsZT9hLmRlbGF5PyhtPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl9jbG9zZShhLmV2ZW50KX0sYS5kZWxheSksZS5fX3RpbWVvdXRzLmNsb3NlLnB1c2gobSkpOmUuX2Nsb3NlKGEpOmNsZWFyVGltZW91dChtKX0pO3ZhciBqPWUuXyRvcmlnaW4saz1cIlwiLGw9XCJcIixtPW51bGw7ZS5fX29wdGlvbnMuaW50ZXJhY3RpdmUmJihqPWouYWRkKGUuXyR0b29sdGlwKSksZS5fX29wdGlvbnMudHJpZ2dlckNsb3NlLm1vdXNlbGVhdmUmJihrKz1cIm1vdXNlZW50ZXIuXCIrZS5fX25hbWVzcGFjZStcIi10cmlnZ2VyQ2xvc2UgXCIsbCs9XCJtb3VzZWxlYXZlLlwiK2UuX19uYW1lc3BhY2UrXCItdHJpZ2dlckNsb3NlIFwiKSxlLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2UudG91Y2hsZWF2ZSYmaC5oYXNUb3VjaENhcGFiaWxpdHkmJihrKz1cInRvdWNoc3RhcnQuXCIrZS5fX25hbWVzcGFjZStcIi10cmlnZ2VyQ2xvc2VcIixsKz1cInRvdWNoZW5kLlwiK2UuX19uYW1lc3BhY2UrXCItdHJpZ2dlckNsb3NlIHRvdWNoY2FuY2VsLlwiK2UuX19uYW1lc3BhY2UrXCItdHJpZ2dlckNsb3NlXCIpLGoub24obCxmdW5jdGlvbihhKXtpZihlLl90b3VjaElzVG91Y2hFdmVudChhKXx8IWUuX3RvdWNoSXNFbXVsYXRlZEV2ZW50KGEpKXt2YXIgYj1cIm1vdXNlbGVhdmVcIj09YS50eXBlP2UuX19vcHRpb25zLmRlbGF5OmUuX19vcHRpb25zLmRlbGF5VG91Y2g7ZS5fdHJpZ2dlcih7ZGVsYXk6YlsxXSxkaXNtaXNzYWJsZTohMCxldmVudDphLHR5cGU6XCJkaXNtaXNzYWJsZVwifSl9fSkub24oayxmdW5jdGlvbihhKXshZS5fdG91Y2hJc1RvdWNoRXZlbnQoYSkmJmUuX3RvdWNoSXNFbXVsYXRlZEV2ZW50KGEpfHxlLl90cmlnZ2VyKHtkaXNtaXNzYWJsZTohMSxldmVudDphLHR5cGU6XCJkaXNtaXNzYWJsZVwifSl9KX1lLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2Uub3JpZ2luQ2xpY2smJmUuXyRvcmlnaW4ub24oXCJjbGljay5cIitlLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJDbG9zZVwiLGZ1bmN0aW9uKGEpe2UuX3RvdWNoSXNUb3VjaEV2ZW50KGEpfHxlLl90b3VjaElzRW11bGF0ZWRFdmVudChhKXx8ZS5fY2xvc2UoYSl9KSwoZS5fX29wdGlvbnMudHJpZ2dlckNsb3NlLmNsaWNrfHxlLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2UudGFwJiZoLmhhc1RvdWNoQ2FwYWJpbGl0eSkmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihcImNsb3NlZFwiIT1lLl9fc3RhdGUpe3ZhciBiPVwiXCIsYz1hKGgud2luZG93LmRvY3VtZW50LmJvZHkpO2UuX19vcHRpb25zLnRyaWdnZXJDbG9zZS5jbGljayYmKGIrPVwiY2xpY2suXCIrZS5fX25hbWVzcGFjZStcIi10cmlnZ2VyQ2xvc2UgXCIpLGUuX19vcHRpb25zLnRyaWdnZXJDbG9zZS50YXAmJmguaGFzVG91Y2hDYXBhYmlsaXR5JiYoYis9XCJ0b3VjaGVuZC5cIitlLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJDbG9zZVwiKSxjLm9uKGIsZnVuY3Rpb24oYil7ZS5fdG91Y2hJc01lYW5pbmdmdWxFdmVudChiKSYmKGUuX3RvdWNoUmVjb3JkRXZlbnQoYiksZS5fX29wdGlvbnMuaW50ZXJhY3RpdmUmJmEuY29udGFpbnMoZS5fJHRvb2x0aXBbMF0sYi50YXJnZXQpfHxlLl9jbG9zZShiKSl9KSxlLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2UudGFwJiZoLmhhc1RvdWNoQ2FwYWJpbGl0eSYmYy5vbihcInRvdWNoc3RhcnQuXCIrZS5fX25hbWVzcGFjZStcIi10cmlnZ2VyQ2xvc2VcIixmdW5jdGlvbihhKXtlLl90b3VjaFJlY29yZEV2ZW50KGEpfSl9fSwwKSxlLl90cmlnZ2VyKFwicmVhZHlcIiksZS5fX29wdGlvbnMuZnVuY3Rpb25SZWFkeSYmZS5fX29wdGlvbnMuZnVuY3Rpb25SZWFkeS5jYWxsKGUsZSx7b3JpZ2luOmUuXyRvcmlnaW5bMF0sdG9vbHRpcDplLl8kdG9vbHRpcFswXX0pfWlmKGUuX19vcHRpb25zLnRpbWVyPjApe3ZhciBtPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl9jbG9zZSgpfSxlLl9fb3B0aW9ucy50aW1lcitnKTtlLl9fdGltZW91dHMuY2xvc2UucHVzaChtKX19fXJldHVybiBlfSxfb3BlblNob3J0bHk6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPSEwO2lmKFwic3RhYmxlXCIhPWIuX19zdGF0ZSYmXCJhcHBlYXJpbmdcIiE9Yi5fX3N0YXRlJiYhYi5fX3RpbWVvdXRzLm9wZW4mJihiLl90cmlnZ2VyKHt0eXBlOlwic3RhcnRcIixldmVudDphLHN0b3A6ZnVuY3Rpb24oKXtjPSExfX0pLGMpKXt2YXIgZD0wPT1hLnR5cGUuaW5kZXhPZihcInRvdWNoXCIpP2IuX19vcHRpb25zLmRlbGF5VG91Y2g6Yi5fX29wdGlvbnMuZGVsYXk7ZFswXT9iLl9fdGltZW91dHMub3Blbj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yi5fX3RpbWVvdXRzLm9wZW49bnVsbCxiLl9fcG9pbnRlcklzT3Zlck9yaWdpbiYmYi5fdG91Y2hJc01lYW5pbmdmdWxFdmVudChhKT8oYi5fdHJpZ2dlcihcInN0YXJ0ZW5kXCIpLGIuX29wZW4oYSkpOmIuX3RyaWdnZXIoXCJzdGFydGNhbmNlbFwiKX0sZFswXSk6KGIuX3RyaWdnZXIoXCJzdGFydGVuZFwiKSxiLl9vcGVuKGEpKX1yZXR1cm4gYn0sX29wdGlvbnNFeHRyYWN0OmZ1bmN0aW9uKGIsYyl7dmFyIGQ9dGhpcyxlPWEuZXh0ZW5kKCEwLHt9LGMpLGY9ZC5fX29wdGlvbnNbYl07cmV0dXJuIGZ8fChmPXt9LGEuZWFjaChjLGZ1bmN0aW9uKGEsYil7dmFyIGM9ZC5fX29wdGlvbnNbYV07dm9pZCAwIT09YyYmKGZbYV09Yyl9KSksYS5lYWNoKGUsZnVuY3Rpb24oYixjKXt2b2lkIDAhPT1mW2JdJiYoXCJvYmplY3RcIiE9dHlwZW9mIGN8fGMgaW5zdGFuY2VvZiBBcnJheXx8bnVsbD09Y3x8XCJvYmplY3RcIiE9dHlwZW9mIGZbYl18fGZbYl1pbnN0YW5jZW9mIEFycmF5fHxudWxsPT1mW2JdP2VbYl09ZltiXTphLmV4dGVuZChlW2JdLGZbYl0pKX0pLGV9LF9wbHVnOmZ1bmN0aW9uKGIpe3ZhciBjPWEudG9vbHRpcHN0ZXIuX3BsdWdpbihiKTtpZighYyl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBcIicrYisnXCIgcGx1Z2luIGlzIG5vdCBkZWZpbmVkJyk7cmV0dXJuIGMuaW5zdGFuY2UmJmEudG9vbHRpcHN0ZXIuX19icmlkZ2UoYy5pbnN0YW5jZSx0aGlzLGMubmFtZSksdGhpc30sX3RvdWNoSXNFbXVsYXRlZEV2ZW50OmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0hMSxjPShuZXcgRGF0ZSkuZ2V0VGltZSgpLGQ9dGhpcy5fX3RvdWNoRXZlbnRzLmxlbmd0aC0xO2Q+PTA7ZC0tKXt2YXIgZT10aGlzLl9fdG91Y2hFdmVudHNbZF07aWYoIShjLWUudGltZTw1MDApKWJyZWFrO2UudGFyZ2V0PT09YS50YXJnZXQmJihiPSEwKX1yZXR1cm4gYn0sX3RvdWNoSXNNZWFuaW5nZnVsRXZlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX3RvdWNoSXNUb3VjaEV2ZW50KGEpJiYhdGhpcy5fdG91Y2hTd2lwZWQoYS50YXJnZXQpfHwhdGhpcy5fdG91Y2hJc1RvdWNoRXZlbnQoYSkmJiF0aGlzLl90b3VjaElzRW11bGF0ZWRFdmVudChhKX0sX3RvdWNoSXNUb3VjaEV2ZW50OmZ1bmN0aW9uKGEpe3JldHVybiAwPT1hLnR5cGUuaW5kZXhPZihcInRvdWNoXCIpfSxfdG91Y2hSZWNvcmRFdmVudDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fdG91Y2hJc1RvdWNoRXZlbnQoYSkmJihhLnRpbWU9KG5ldyBEYXRlKS5nZXRUaW1lKCksdGhpcy5fX3RvdWNoRXZlbnRzLnB1c2goYSkpLHRoaXN9LF90b3VjaFN3aXBlZDpmdW5jdGlvbihhKXtmb3IodmFyIGI9ITEsYz10aGlzLl9fdG91Y2hFdmVudHMubGVuZ3RoLTE7Yz49MDtjLS0pe3ZhciBkPXRoaXMuX190b3VjaEV2ZW50c1tjXTtpZihcInRvdWNobW92ZVwiPT1kLnR5cGUpe2I9ITA7YnJlYWt9aWYoXCJ0b3VjaHN0YXJ0XCI9PWQudHlwZSYmYT09PWQudGFyZ2V0KWJyZWFrfXJldHVybiBifSxfdHJpZ2dlcjpmdW5jdGlvbigpe3ZhciBiPUFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBiWzBdJiYoYlswXT17dHlwZTpiWzBdfSksYlswXS5pbnN0YW5jZT10aGlzLGJbMF0ub3JpZ2luPXRoaXMuXyRvcmlnaW4/dGhpcy5fJG9yaWdpblswXTpudWxsLGJbMF0udG9vbHRpcD10aGlzLl8kdG9vbHRpcD90aGlzLl8kdG9vbHRpcFswXTpudWxsLHRoaXMuX18kZW1pdHRlclByaXZhdGUudHJpZ2dlci5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQcml2YXRlLGIpLGEudG9vbHRpcHN0ZXIuX3RyaWdnZXIuYXBwbHkoYS50b29sdGlwc3RlcixiKSx0aGlzLl9fJGVtaXR0ZXJQdWJsaWMudHJpZ2dlci5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQdWJsaWMsYiksdGhpc30sX3VucGx1ZzpmdW5jdGlvbihiKXt2YXIgYz10aGlzO2lmKGNbYl0pe3ZhciBkPWEudG9vbHRpcHN0ZXIuX3BsdWdpbihiKTtkLmluc3RhbmNlJiZhLmVhY2goZC5pbnN0YW5jZSxmdW5jdGlvbihhLGQpe2NbYV0mJmNbYV0uYnJpZGdlZD09PWNbYl0mJmRlbGV0ZSBjW2FdfSksY1tiXS5fX2Rlc3Ryb3kmJmNbYl0uX19kZXN0cm95KCksZGVsZXRlIGNbYl19cmV0dXJuIGN9LGNsb3NlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9fZGVzdHJveWVkP3RoaXMuX19kZXN0cm95RXJyb3IoKTp0aGlzLl9jbG9zZShudWxsLGEpLHRoaXN9LGNvbnRlbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztpZih2b2lkIDA9PT1hKXJldHVybiBiLl9fQ29udGVudDtpZihiLl9fZGVzdHJveWVkKWIuX19kZXN0cm95RXJyb3IoKTtlbHNlIGlmKGIuX19jb250ZW50U2V0KGEpLG51bGwhPT1iLl9fQ29udGVudCl7aWYoXCJjbG9zZWRcIiE9PWIuX19zdGF0ZSYmKGIuX19jb250ZW50SW5zZXJ0KCksYi5yZXBvc2l0aW9uKCksYi5fX29wdGlvbnMudXBkYXRlQW5pbWF0aW9uKSlpZihoLmhhc1RyYW5zaXRpb25zKXt2YXIgYz1iLl9fb3B0aW9ucy51cGRhdGVBbmltYXRpb247Yi5fJHRvb2x0aXAuYWRkQ2xhc3MoXCJ0b29sdGlwc3Rlci11cGRhdGUtXCIrYyksc2V0VGltZW91dChmdW5jdGlvbigpe1wiY2xvc2VkXCIhPWIuX19zdGF0ZSYmYi5fJHRvb2x0aXAucmVtb3ZlQ2xhc3MoXCJ0b29sdGlwc3Rlci11cGRhdGUtXCIrYyl9LDFlMyl9ZWxzZSBiLl8kdG9vbHRpcC5mYWRlVG8oMjAwLC41LGZ1bmN0aW9uKCl7XCJjbG9zZWRcIiE9Yi5fX3N0YXRlJiZiLl8kdG9vbHRpcC5mYWRlVG8oMjAwLDEpfSl9ZWxzZSBiLl9jbG9zZSgpO3JldHVybiBifSxkZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcztpZihiLl9fZGVzdHJveWVkKWIuX19kZXN0cm95RXJyb3IoKTtlbHNle1wiY2xvc2VkXCIhPWIuX19zdGF0ZT9iLm9wdGlvbihcImFuaW1hdGlvbkR1cmF0aW9uXCIsMCkuX2Nsb3NlKG51bGwsbnVsbCwhMCk6Yi5fX3RpbWVvdXRzQ2xlYXIoKSxiLl90cmlnZ2VyKFwiZGVzdHJveVwiKSxiLl9fZGVzdHJveWVkPSEwLGIuXyRvcmlnaW4ucmVtb3ZlRGF0YShiLl9fbmFtZXNwYWNlKS5vZmYoXCIuXCIrYi5fX25hbWVzcGFjZStcIi10cmlnZ2VyT3BlblwiKSxhKGgud2luZG93LmRvY3VtZW50LmJvZHkpLm9mZihcIi5cIitiLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuXCIpO3ZhciBjPWIuXyRvcmlnaW4uZGF0YShcInRvb2x0aXBzdGVyLW5zXCIpO2lmKGMpaWYoMT09PWMubGVuZ3RoKXt2YXIgZD1udWxsO1wicHJldmlvdXNcIj09Yi5fX29wdGlvbnMucmVzdG9yYXRpb24/ZD1iLl8kb3JpZ2luLmRhdGEoXCJ0b29sdGlwc3Rlci1pbml0aWFsVGl0bGVcIik6XCJjdXJyZW50XCI9PWIuX19vcHRpb25zLnJlc3RvcmF0aW9uJiYoZD1cInN0cmluZ1wiPT10eXBlb2YgYi5fX0NvbnRlbnQ/Yi5fX0NvbnRlbnQ6YShcIjxkaXY+PC9kaXY+XCIpLmFwcGVuZChiLl9fQ29udGVudCkuaHRtbCgpKSxkJiZiLl8kb3JpZ2luLmF0dHIoXCJ0aXRsZVwiLGQpLGIuXyRvcmlnaW4ucmVtb3ZlQ2xhc3MoXCJ0b29sdGlwc3RlcmVkXCIpLGIuXyRvcmlnaW4ucmVtb3ZlRGF0YShcInRvb2x0aXBzdGVyLW5zXCIpLnJlbW92ZURhdGEoXCJ0b29sdGlwc3Rlci1pbml0aWFsVGl0bGVcIil9ZWxzZSBjPWEuZ3JlcChjLGZ1bmN0aW9uKGEsYyl7cmV0dXJuIGEhPT1iLl9fbmFtZXNwYWNlfSksYi5fJG9yaWdpbi5kYXRhKFwidG9vbHRpcHN0ZXItbnNcIixjKTtiLl90cmlnZ2VyKFwiZGVzdHJveWVkXCIpLGIuX29mZigpLGIub2ZmKCksYi5fX0NvbnRlbnQ9bnVsbCxiLl9fJGVtaXR0ZXJQcml2YXRlPW51bGwsYi5fXyRlbWl0dGVyUHVibGljPW51bGwsYi5fX29wdGlvbnMucGFyZW50PW51bGwsYi5fJG9yaWdpbj1udWxsLGIuXyR0b29sdGlwPW51bGwsYS50b29sdGlwc3Rlci5fX2luc3RhbmNlc0xhdGVzdEFycj1hLmdyZXAoYS50b29sdGlwc3Rlci5fX2luc3RhbmNlc0xhdGVzdEFycixmdW5jdGlvbihhLGMpe3JldHVybiBiIT09YX0pLGNsZWFySW50ZXJ2YWwoYi5fX2dhcmJhZ2VDb2xsZWN0b3IpfXJldHVybiBifSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19kZXN0cm95ZWQ/KHRoaXMuX19kZXN0cm95RXJyb3IoKSx0aGlzKToodGhpcy5fY2xvc2UoKSx0aGlzLl9fZW5hYmxlZD0hMSx0aGlzKX0sZWxlbWVudE9yaWdpbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZGVzdHJveWVkP3ZvaWQgdGhpcy5fX2Rlc3Ryb3lFcnJvcigpOnRoaXMuXyRvcmlnaW5bMF19LGVsZW1lbnRUb29sdGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyR0b29sdGlwP3RoaXMuXyR0b29sdGlwWzBdOm51bGx9LGVuYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZW5hYmxlZD0hMCx0aGlzfSxoaWRlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNsb3NlKGEpfSxpbnN0YW5jZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxvZmY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2Rlc3Ryb3llZHx8dGhpcy5fXyRlbWl0dGVyUHVibGljLm9mZi5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQdWJsaWMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cykpLHRoaXN9LG9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19kZXN0cm95ZWQ/dGhpcy5fX2Rlc3Ryb3lFcnJvcigpOnRoaXMuX18kZW1pdHRlclB1YmxpYy5vbi5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQdWJsaWMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cykpLHRoaXN9LG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZGVzdHJveWVkP3RoaXMuX19kZXN0cm95RXJyb3IoKTp0aGlzLl9fJGVtaXR0ZXJQdWJsaWMub25lLmFwcGx5KHRoaXMuX18kZW1pdHRlclB1YmxpYyxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSksdGhpc30sb3BlbjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fX2Rlc3Ryb3llZD90aGlzLl9fZGVzdHJveUVycm9yKCk6dGhpcy5fb3BlbihudWxsLGEpLHRoaXN9LG9wdGlvbjpmdW5jdGlvbihiLGMpe3JldHVybiB2b2lkIDA9PT1jP3RoaXMuX19vcHRpb25zW2JdOih0aGlzLl9fZGVzdHJveWVkP3RoaXMuX19kZXN0cm95RXJyb3IoKToodGhpcy5fX29wdGlvbnNbYl09Yyx0aGlzLl9fb3B0aW9uc0Zvcm1hdCgpLGEuaW5BcnJheShiLFtcInRyaWdnZXJcIixcInRyaWdnZXJDbG9zZVwiLFwidHJpZ2dlck9wZW5cIl0pPj0wJiZ0aGlzLl9fcHJlcGFyZU9yaWdpbigpLFwic2VsZkRlc3RydWN0aW9uXCI9PT1iJiZ0aGlzLl9fcHJlcGFyZUdDKCkpLHRoaXMpfSxyZXBvc2l0aW9uOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztyZXR1cm4gYy5fX2Rlc3Ryb3llZD9jLl9fZGVzdHJveUVycm9yKCk6XCJjbG9zZWRcIiE9Yy5fX3N0YXRlJiZkKGMuXyRvcmlnaW4pJiYoYnx8ZChjLl8kdG9vbHRpcCkpJiYoYnx8Yy5fJHRvb2x0aXAuZGV0YWNoKCksYy5fX0dlb21ldHJ5PWMuX19nZW9tZXRyeSgpLGMuX3RyaWdnZXIoe3R5cGU6XCJyZXBvc2l0aW9uXCIsZXZlbnQ6YSxoZWxwZXI6e2dlbzpjLl9fR2VvbWV0cnl9fSkpLGN9LHNob3c6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMub3BlbihhKX0sc3RhdHVzOmZ1bmN0aW9uKCl7cmV0dXJue2Rlc3Ryb3llZDp0aGlzLl9fZGVzdHJveWVkLGVuYWJsZWQ6dGhpcy5fX2VuYWJsZWQsb3BlbjpcImNsb3NlZFwiIT09dGhpcy5fX3N0YXRlLHN0YXRlOnRoaXMuX19zdGF0ZX19LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19kZXN0cm95ZWQ/dGhpcy5fX2Rlc3Ryb3lFcnJvcigpOnRoaXMuX18kZW1pdHRlclB1YmxpYy50cmlnZ2VySGFuZGxlci5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQdWJsaWMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cykpLHRoaXN9fSxhLmZuLnRvb2x0aXBzdGVyPWZ1bmN0aW9uKCl7dmFyIGI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cyksYz1cIllvdSBhcmUgdXNpbmcgYSBzaW5nbGUgSFRNTCBlbGVtZW50IGFzIGNvbnRlbnQgZm9yIHNldmVyYWwgdG9vbHRpcHMuIFlvdSBwcm9iYWJseSB3YW50IHRvIHNldCB0aGUgY29udGVudENsb25pbmcgb3B0aW9uIHRvIFRSVUUuXCI7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiB0aGlzO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBiWzBdKXt2YXIgZD1cIiMqJH4mXCI7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPWEodGhpcykuZGF0YShcInRvb2x0aXBzdGVyLW5zXCIpLGY9ZT9hKHRoaXMpLmRhdGEoZVswXSk6bnVsbDtpZighZil0aHJvdyBuZXcgRXJyb3IoXCJZb3UgY2FsbGVkIFRvb2x0aXBzdGVyJ3MgXFxcIlwiK2JbMF0rJ1wiIG1ldGhvZCBvbiBhbiB1bmluaXRpYWxpemVkIGVsZW1lbnQnKTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBmW2JbMF1dKXRocm93IG5ldyBFcnJvcignVW5rbm93biBtZXRob2QgXCInK2JbMF0rJ1wiJyk7dGhpcy5sZW5ndGg+MSYmXCJjb250ZW50XCI9PWJbMF0mJihiWzFdaW5zdGFuY2VvZiBhfHxcIm9iamVjdFwiPT10eXBlb2YgYlsxXSYmbnVsbCE9YlsxXSYmYlsxXS50YWdOYW1lKSYmIWYuX19vcHRpb25zLmNvbnRlbnRDbG9uaW5nJiZmLl9fb3B0aW9ucy5kZWJ1ZyYmY29uc29sZS5sb2coYyk7dmFyIGc9ZltiWzBdXShiWzFdLGJbMl0pO3JldHVybiBnIT09Znx8XCJpbnN0YW5jZVwiPT09YlswXT8oZD1nLCExKTp2b2lkIDB9KSxcIiMqJH4mXCIhPT1kP2Q6dGhpc31hLnRvb2x0aXBzdGVyLl9faW5zdGFuY2VzTGF0ZXN0QXJyPVtdO3ZhciBlPWJbMF0mJnZvaWQgMCE9PWJbMF0ubXVsdGlwbGUsZz1lJiZiWzBdLm11bHRpcGxlfHwhZSYmZi5tdWx0aXBsZSxoPWJbMF0mJnZvaWQgMCE9PWJbMF0uY29udGVudCxpPWgmJmJbMF0uY29udGVudHx8IWgmJmYuY29udGVudCxqPWJbMF0mJnZvaWQgMCE9PWJbMF0uY29udGVudENsb25pbmcsaz1qJiZiWzBdLmNvbnRlbnRDbG9uaW5nfHwhaiYmZi5jb250ZW50Q2xvbmluZyxsPWJbMF0mJnZvaWQgMCE9PWJbMF0uZGVidWcsbT1sJiZiWzBdLmRlYnVnfHwhbCYmZi5kZWJ1ZztyZXR1cm4gdGhpcy5sZW5ndGg+MSYmKGkgaW5zdGFuY2VvZiBhfHxcIm9iamVjdFwiPT10eXBlb2YgaSYmbnVsbCE9aSYmaS50YWdOYW1lKSYmIWsmJm0mJmNvbnNvbGUubG9nKGMpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPSExLGQ9YSh0aGlzKSxlPWQuZGF0YShcInRvb2x0aXBzdGVyLW5zXCIpLGY9bnVsbDtlP2c/Yz0hMDptJiYoY29uc29sZS5sb2coXCJUb29sdGlwc3Rlcjogb25lIG9yIG1vcmUgdG9vbHRpcHMgYXJlIGFscmVhZHkgYXR0YWNoZWQgdG8gdGhlIGVsZW1lbnQgYmVsb3cuIElnbm9yaW5nLlwiKSxjb25zb2xlLmxvZyh0aGlzKSk6Yz0hMCxjJiYoZj1uZXcgYS5Ub29sdGlwc3Rlcih0aGlzLGJbMF0pLGV8fChlPVtdKSxlLnB1c2goZi5fX25hbWVzcGFjZSksZC5kYXRhKFwidG9vbHRpcHN0ZXItbnNcIixlKSxkLmRhdGEoZi5fX25hbWVzcGFjZSxmKSxmLl9fb3B0aW9ucy5mdW5jdGlvbkluaXQmJmYuX19vcHRpb25zLmZ1bmN0aW9uSW5pdC5jYWxsKGYsZix7b3JpZ2luOnRoaXN9KSxmLl90cmlnZ2VyKFwiaW5pdFwiKSksYS50b29sdGlwc3Rlci5fX2luc3RhbmNlc0xhdGVzdEFyci5wdXNoKGYpfSksdGhpc30sYi5wcm90b3R5cGU9e19faW5pdDpmdW5jdGlvbihiKXt0aGlzLl9fJHRvb2x0aXA9Yix0aGlzLl9fJHRvb2x0aXAuY3NzKHtsZWZ0OjAsb3ZlcmZsb3c6XCJoaWRkZW5cIixwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOjB9KS5maW5kKFwiLnRvb2x0aXBzdGVyLWNvbnRlbnRcIikuY3NzKFwib3ZlcmZsb3dcIixcImF1dG9cIiksdGhpcy4kY29udGFpbmVyPWEoJzxkaXYgY2xhc3M9XCJ0b29sdGlwc3Rlci1ydWxlclwiPjwvZGl2PicpLmFwcGVuZCh0aGlzLl9fJHRvb2x0aXApLmFwcGVuZFRvKGgud2luZG93LmRvY3VtZW50LmJvZHkpfSxfX2ZvcmNlUmVkcmF3OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fXyR0b29sdGlwLnBhcmVudCgpO3RoaXMuX18kdG9vbHRpcC5kZXRhY2goKSx0aGlzLl9fJHRvb2x0aXAuYXBwZW5kVG8oYSl9LGNvbnN0cmFpbjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmNvbnN0cmFpbnRzPXt3aWR0aDphLGhlaWdodDpifSx0aGlzLl9fJHRvb2x0aXAuY3NzKHtkaXNwbGF5OlwiYmxvY2tcIixoZWlnaHQ6XCJcIixvdmVyZmxvdzpcImF1dG9cIix3aWR0aDphfSksdGhpc30sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX18kdG9vbHRpcC5kZXRhY2goKS5maW5kKFwiLnRvb2x0aXBzdGVyLWNvbnRlbnRcIikuY3NzKHtkaXNwbGF5OlwiXCIsb3ZlcmZsb3c6XCJcIn0pLHRoaXMuJGNvbnRhaW5lci5yZW1vdmUoKX0sZnJlZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnN0cmFpbnRzPW51bGwsdGhpcy5fXyR0b29sdGlwLmNzcyh7ZGlzcGxheTpcIlwiLGhlaWdodDpcIlwiLG92ZXJmbG93OlwidmlzaWJsZVwiLHdpZHRoOlwiXCJ9KSx0aGlzfSxtZWFzdXJlOmZ1bmN0aW9uKCl7dGhpcy5fX2ZvcmNlUmVkcmF3KCk7dmFyIGE9dGhpcy5fXyR0b29sdGlwWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGI9e3NpemU6e2hlaWdodDphLmhlaWdodHx8YS5ib3R0b20tYS50b3Asd2lkdGg6YS53aWR0aHx8YS5yaWdodC1hLmxlZnR9fTtpZih0aGlzLmNvbnN0cmFpbnRzKXt2YXIgYz10aGlzLl9fJHRvb2x0aXAuZmluZChcIi50b29sdGlwc3Rlci1jb250ZW50XCIpLGQ9dGhpcy5fXyR0b29sdGlwLm91dGVySGVpZ2h0KCksZT1jWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGY9e2hlaWdodDpkPD10aGlzLmNvbnN0cmFpbnRzLmhlaWdodCx3aWR0aDphLndpZHRoPD10aGlzLmNvbnN0cmFpbnRzLndpZHRoJiZlLndpZHRoPj1jWzBdLnNjcm9sbFdpZHRoLTF9O2IuZml0cz1mLmhlaWdodCYmZi53aWR0aH1yZXR1cm4gaC5JRSYmaC5JRTw9MTEmJmIuc2l6ZS53aWR0aCE9PWgud2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCYmKGIuc2l6ZS53aWR0aD1NYXRoLmNlaWwoYi5zaXplLndpZHRoKSsxKSxifX07dmFyIGo9bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpOy0xIT1qLmluZGV4T2YoXCJtc2llXCIpP2guSUU9cGFyc2VJbnQoai5zcGxpdChcIm1zaWVcIilbMV0pOi0xIT09ai50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJ0cmlkZW50XCIpJiYtMSE9PWouaW5kZXhPZihcIiBydjoxMVwiKT9oLklFPTExOi0xIT1qLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcImVkZ2UvXCIpJiYoaC5JRT1wYXJzZUludChqLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCJlZGdlL1wiKVsxXSkpO3ZhciBrPVwidG9vbHRpcHN0ZXIuc2lkZVRpcFwiO3JldHVybiBhLnRvb2x0aXBzdGVyLl9wbHVnaW4oe25hbWU6ayxpbnN0YW5jZTp7X19kZWZhdWx0czpmdW5jdGlvbigpe3JldHVybnthcnJvdzohMCxkaXN0YW5jZTo2LGZ1bmN0aW9uUG9zaXRpb246bnVsbCxtYXhXaWR0aDpudWxsLG1pbkludGVyc2VjdGlvbjoxNixtaW5XaWR0aDowLHBvc2l0aW9uOm51bGwsc2lkZTpcInRvcFwiLHZpZXdwb3J0QXdhcmU6ITB9fSxfX2luaXQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztiLl9faW5zdGFuY2U9YSxiLl9fbmFtZXNwYWNlPVwidG9vbHRpcHN0ZXItc2lkZVRpcC1cIitNYXRoLnJvdW5kKDFlNipNYXRoLnJhbmRvbSgpKSxiLl9fcHJldmlvdXNTdGF0ZT1cImNsb3NlZFwiLGIuX19vcHRpb25zLGIuX19vcHRpb25zRm9ybWF0KCksYi5fX2luc3RhbmNlLl9vbihcInN0YXRlLlwiK2IuX19uYW1lc3BhY2UsZnVuY3Rpb24oYSl7XCJjbG9zZWRcIj09YS5zdGF0ZT9iLl9fY2xvc2UoKTpcImFwcGVhcmluZ1wiPT1hLnN0YXRlJiZcImNsb3NlZFwiPT1iLl9fcHJldmlvdXNTdGF0ZSYmYi5fX2NyZWF0ZSgpLGIuX19wcmV2aW91c1N0YXRlPWEuc3RhdGV9KSxiLl9faW5zdGFuY2UuX29uKFwib3B0aW9ucy5cIitiLl9fbmFtZXNwYWNlLGZ1bmN0aW9uKCl7Yi5fX29wdGlvbnNGb3JtYXQoKX0pLGIuX19pbnN0YW5jZS5fb24oXCJyZXBvc2l0aW9uLlwiK2IuX19uYW1lc3BhY2UsZnVuY3Rpb24oYSl7Yi5fX3JlcG9zaXRpb24oYS5ldmVudCxhLmhlbHBlcil9KX0sX19jbG9zZTpmdW5jdGlvbigpe3RoaXMuX19pbnN0YW5jZS5jb250ZW50KClpbnN0YW5jZW9mIGEmJnRoaXMuX19pbnN0YW5jZS5jb250ZW50KCkuZGV0YWNoKCksdGhpcy5fX2luc3RhbmNlLl8kdG9vbHRpcC5yZW1vdmUoKSx0aGlzLl9faW5zdGFuY2UuXyR0b29sdGlwPW51bGx9LF9fY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGI9YSgnPGRpdiBjbGFzcz1cInRvb2x0aXBzdGVyLWJhc2UgdG9vbHRpcHN0ZXItc2lkZXRpcFwiPjxkaXYgY2xhc3M9XCJ0b29sdGlwc3Rlci1ib3hcIj48ZGl2IGNsYXNzPVwidG9vbHRpcHN0ZXItY29udGVudFwiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9XCJ0b29sdGlwc3Rlci1hcnJvd1wiPjxkaXYgY2xhc3M9XCJ0b29sdGlwc3Rlci1hcnJvdy11bmNyb3BwZWRcIj48ZGl2IGNsYXNzPVwidG9vbHRpcHN0ZXItYXJyb3ctYm9yZGVyXCI+PC9kaXY+PGRpdiBjbGFzcz1cInRvb2x0aXBzdGVyLWFycm93LWJhY2tncm91bmRcIj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4nKTt0aGlzLl9fb3B0aW9ucy5hcnJvd3x8Yi5maW5kKFwiLnRvb2x0aXBzdGVyLWJveFwiKS5jc3MoXCJtYXJnaW5cIiwwKS5lbmQoKS5maW5kKFwiLnRvb2x0aXBzdGVyLWFycm93XCIpLmhpZGUoKSx0aGlzLl9fb3B0aW9ucy5taW5XaWR0aCYmYi5jc3MoXCJtaW4td2lkdGhcIix0aGlzLl9fb3B0aW9ucy5taW5XaWR0aCtcInB4XCIpLHRoaXMuX19vcHRpb25zLm1heFdpZHRoJiZiLmNzcyhcIm1heC13aWR0aFwiLHRoaXMuX19vcHRpb25zLm1heFdpZHRoK1wicHhcIiksXG50aGlzLl9faW5zdGFuY2UuXyR0b29sdGlwPWIsdGhpcy5fX2luc3RhbmNlLl90cmlnZ2VyKFwiY3JlYXRlZFwiKX0sX19kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fX2luc3RhbmNlLl9vZmYoXCIuXCIrc2VsZi5fX25hbWVzcGFjZSl9LF9fb3B0aW9uc0Zvcm1hdDpmdW5jdGlvbigpe3ZhciBiPXRoaXM7aWYoYi5fX29wdGlvbnM9Yi5fX2luc3RhbmNlLl9vcHRpb25zRXh0cmFjdChrLGIuX19kZWZhdWx0cygpKSxiLl9fb3B0aW9ucy5wb3NpdGlvbiYmKGIuX19vcHRpb25zLnNpZGU9Yi5fX29wdGlvbnMucG9zaXRpb24pLFwib2JqZWN0XCIhPXR5cGVvZiBiLl9fb3B0aW9ucy5kaXN0YW5jZSYmKGIuX19vcHRpb25zLmRpc3RhbmNlPVtiLl9fb3B0aW9ucy5kaXN0YW5jZV0pLGIuX19vcHRpb25zLmRpc3RhbmNlLmxlbmd0aDw0JiYodm9pZCAwPT09Yi5fX29wdGlvbnMuZGlzdGFuY2VbMV0mJihiLl9fb3B0aW9ucy5kaXN0YW5jZVsxXT1iLl9fb3B0aW9ucy5kaXN0YW5jZVswXSksdm9pZCAwPT09Yi5fX29wdGlvbnMuZGlzdGFuY2VbMl0mJihiLl9fb3B0aW9ucy5kaXN0YW5jZVsyXT1iLl9fb3B0aW9ucy5kaXN0YW5jZVswXSksdm9pZCAwPT09Yi5fX29wdGlvbnMuZGlzdGFuY2VbM10mJihiLl9fb3B0aW9ucy5kaXN0YW5jZVszXT1iLl9fb3B0aW9ucy5kaXN0YW5jZVsxXSkpLGIuX19vcHRpb25zLmRpc3RhbmNlPXt0b3A6Yi5fX29wdGlvbnMuZGlzdGFuY2VbMF0scmlnaHQ6Yi5fX29wdGlvbnMuZGlzdGFuY2VbMV0sYm90dG9tOmIuX19vcHRpb25zLmRpc3RhbmNlWzJdLGxlZnQ6Yi5fX29wdGlvbnMuZGlzdGFuY2VbM119LFwic3RyaW5nXCI9PXR5cGVvZiBiLl9fb3B0aW9ucy5zaWRlKXt2YXIgYz17dG9wOlwiYm90dG9tXCIscmlnaHQ6XCJsZWZ0XCIsYm90dG9tOlwidG9wXCIsbGVmdDpcInJpZ2h0XCJ9O2IuX19vcHRpb25zLnNpZGU9W2IuX19vcHRpb25zLnNpZGUsY1tiLl9fb3B0aW9ucy5zaWRlXV0sXCJsZWZ0XCI9PWIuX19vcHRpb25zLnNpZGVbMF18fFwicmlnaHRcIj09Yi5fX29wdGlvbnMuc2lkZVswXT9iLl9fb3B0aW9ucy5zaWRlLnB1c2goXCJ0b3BcIixcImJvdHRvbVwiKTpiLl9fb3B0aW9ucy5zaWRlLnB1c2goXCJyaWdodFwiLFwibGVmdFwiKX02PT09YS50b29sdGlwc3Rlci5fZW52LklFJiZiLl9fb3B0aW9ucy5hcnJvdyE9PSEwJiYoYi5fX29wdGlvbnMuYXJyb3c9ITEpfSxfX3JlcG9zaXRpb246ZnVuY3Rpb24oYixjKXt2YXIgZCxlPXRoaXMsZj1lLl9fdGFyZ2V0RmluZChjKSxnPVtdO2UuX19pbnN0YW5jZS5fJHRvb2x0aXAuZGV0YWNoKCk7dmFyIGg9ZS5fX2luc3RhbmNlLl8kdG9vbHRpcC5jbG9uZSgpLGk9YS50b29sdGlwc3Rlci5fZ2V0UnVsZXIoaCksaj0hMSxrPWUuX19pbnN0YW5jZS5vcHRpb24oXCJhbmltYXRpb25cIik7c3dpdGNoKGsmJmgucmVtb3ZlQ2xhc3MoXCJ0b29sdGlwc3Rlci1cIitrKSxhLmVhY2goW1wid2luZG93XCIsXCJkb2N1bWVudFwiXSxmdW5jdGlvbihkLGspe3ZhciBsPW51bGw7aWYoZS5fX2luc3RhbmNlLl90cmlnZ2VyKHtjb250YWluZXI6ayxoZWxwZXI6YyxzYXRpc2ZpZWQ6aix0YWtlVGVzdDpmdW5jdGlvbihhKXtsPWF9LHJlc3VsdHM6Zyx0eXBlOlwicG9zaXRpb25UZXN0XCJ9KSwxPT1sfHwwIT1sJiYwPT1qJiYoXCJ3aW5kb3dcIiE9a3x8ZS5fX29wdGlvbnMudmlld3BvcnRBd2FyZSkpZm9yKHZhciBkPTA7ZDxlLl9fb3B0aW9ucy5zaWRlLmxlbmd0aDtkKyspe3ZhciBtPXtob3Jpem9udGFsOjAsdmVydGljYWw6MH0sbj1lLl9fb3B0aW9ucy5zaWRlW2RdO1widG9wXCI9PW58fFwiYm90dG9tXCI9PW4/bS52ZXJ0aWNhbD1lLl9fb3B0aW9ucy5kaXN0YW5jZVtuXTptLmhvcml6b250YWw9ZS5fX29wdGlvbnMuZGlzdGFuY2Vbbl0sZS5fX3NpZGVDaGFuZ2UoaCxuKSxhLmVhY2goW1wibmF0dXJhbFwiLFwiY29uc3RyYWluZWRcIl0sZnVuY3Rpb24oYSxkKXtpZihsPW51bGwsZS5fX2luc3RhbmNlLl90cmlnZ2VyKHtjb250YWluZXI6ayxldmVudDpiLGhlbHBlcjpjLG1vZGU6ZCxyZXN1bHRzOmcsc2F0aXNmaWVkOmosc2lkZTpuLHRha2VUZXN0OmZ1bmN0aW9uKGEpe2w9YX0sdHlwZTpcInBvc2l0aW9uVGVzdFwifSksMT09bHx8MCE9bCYmMD09ail7dmFyIGg9e2NvbnRhaW5lcjprLGRpc3RhbmNlOm0sZml0czpudWxsLG1vZGU6ZCxvdXRlclNpemU6bnVsbCxzaWRlOm4sc2l6ZTpudWxsLHRhcmdldDpmW25dLHdob2xlOm51bGx9LG89XCJuYXR1cmFsXCI9PWQ/aS5mcmVlKCk6aS5jb25zdHJhaW4oYy5nZW8uYXZhaWxhYmxlW2tdW25dLndpZHRoLW0uaG9yaXpvbnRhbCxjLmdlby5hdmFpbGFibGVba11bbl0uaGVpZ2h0LW0udmVydGljYWwpLHA9by5tZWFzdXJlKCk7aWYoaC5zaXplPXAuc2l6ZSxoLm91dGVyU2l6ZT17aGVpZ2h0OnAuc2l6ZS5oZWlnaHQrbS52ZXJ0aWNhbCx3aWR0aDpwLnNpemUud2lkdGgrbS5ob3Jpem9udGFsfSxcIm5hdHVyYWxcIj09ZD9jLmdlby5hdmFpbGFibGVba11bbl0ud2lkdGg+PWgub3V0ZXJTaXplLndpZHRoJiZjLmdlby5hdmFpbGFibGVba11bbl0uaGVpZ2h0Pj1oLm91dGVyU2l6ZS5oZWlnaHQ/aC5maXRzPSEwOmguZml0cz0hMTpoLmZpdHM9cC5maXRzLFwid2luZG93XCI9PWsmJihoLmZpdHM/XCJ0b3BcIj09bnx8XCJib3R0b21cIj09bj9oLndob2xlPWMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQucmlnaHQ+PWUuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbiYmYy5nZW8ud2luZG93LnNpemUud2lkdGgtYy5nZW8ub3JpZ2luLndpbmRvd09mZnNldC5sZWZ0Pj1lLl9fb3B0aW9ucy5taW5JbnRlcnNlY3Rpb246aC53aG9sZT1jLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0LmJvdHRvbT49ZS5fX29wdGlvbnMubWluSW50ZXJzZWN0aW9uJiZjLmdlby53aW5kb3cuc2l6ZS5oZWlnaHQtYy5nZW8ub3JpZ2luLndpbmRvd09mZnNldC50b3A+PWUuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbjpoLndob2xlPSExKSxnLnB1c2goaCksaC53aG9sZSlqPSEwO2Vsc2UgaWYoXCJuYXR1cmFsXCI9PWgubW9kZSYmKGguZml0c3x8aC5zaXplLndpZHRoPD1jLmdlby5hdmFpbGFibGVba11bbl0ud2lkdGgpKXJldHVybiExfX0pfX0pLGUuX19pbnN0YW5jZS5fdHJpZ2dlcih7ZWRpdDpmdW5jdGlvbihhKXtnPWF9LGV2ZW50OmIsaGVscGVyOmMscmVzdWx0czpnLHR5cGU6XCJwb3NpdGlvblRlc3RlZFwifSksZy5zb3J0KGZ1bmN0aW9uKGEsYil7aWYoYS53aG9sZSYmIWIud2hvbGUpcmV0dXJuLTE7aWYoIWEud2hvbGUmJmIud2hvbGUpcmV0dXJuIDE7aWYoYS53aG9sZSYmYi53aG9sZSl7dmFyIGM9ZS5fX29wdGlvbnMuc2lkZS5pbmRleE9mKGEuc2lkZSksZD1lLl9fb3B0aW9ucy5zaWRlLmluZGV4T2YoYi5zaWRlKTtyZXR1cm4gZD5jPy0xOmM+ZD8xOlwibmF0dXJhbFwiPT1hLm1vZGU/LTE6MX1pZihhLmZpdHMmJiFiLmZpdHMpcmV0dXJuLTE7aWYoIWEuZml0cyYmYi5maXRzKXJldHVybiAxO2lmKGEuZml0cyYmYi5maXRzKXt2YXIgYz1lLl9fb3B0aW9ucy5zaWRlLmluZGV4T2YoYS5zaWRlKSxkPWUuX19vcHRpb25zLnNpZGUuaW5kZXhPZihiLnNpZGUpO3JldHVybiBkPmM/LTE6Yz5kPzE6XCJuYXR1cmFsXCI9PWEubW9kZT8tMToxfXJldHVyblwiZG9jdW1lbnRcIj09YS5jb250YWluZXImJlwiYm90dG9tXCI9PWEuc2lkZSYmXCJuYXR1cmFsXCI9PWEubW9kZT8tMToxfSksZD1nWzBdLGQuY29vcmQ9e30sZC5zaWRlKXtjYXNlXCJsZWZ0XCI6Y2FzZVwicmlnaHRcIjpkLmNvb3JkLnRvcD1NYXRoLmZsb29yKGQudGFyZ2V0LWQuc2l6ZS5oZWlnaHQvMik7YnJlYWs7Y2FzZVwiYm90dG9tXCI6Y2FzZVwidG9wXCI6ZC5jb29yZC5sZWZ0PU1hdGguZmxvb3IoZC50YXJnZXQtZC5zaXplLndpZHRoLzIpfXN3aXRjaChkLnNpZGUpe2Nhc2VcImxlZnRcIjpkLmNvb3JkLmxlZnQ9Yy5nZW8ub3JpZ2luLndpbmRvd09mZnNldC5sZWZ0LWQub3V0ZXJTaXplLndpZHRoO2JyZWFrO2Nhc2VcInJpZ2h0XCI6ZC5jb29yZC5sZWZ0PWMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQucmlnaHQrZC5kaXN0YW5jZS5ob3Jpem9udGFsO2JyZWFrO2Nhc2VcInRvcFwiOmQuY29vcmQudG9wPWMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQudG9wLWQub3V0ZXJTaXplLmhlaWdodDticmVhaztjYXNlXCJib3R0b21cIjpkLmNvb3JkLnRvcD1jLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0LmJvdHRvbStkLmRpc3RhbmNlLnZlcnRpY2FsfVwid2luZG93XCI9PWQuY29udGFpbmVyP1widG9wXCI9PWQuc2lkZXx8XCJib3R0b21cIj09ZC5zaWRlP2QuY29vcmQubGVmdDwwP2MuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQucmlnaHQtdGhpcy5fX29wdGlvbnMubWluSW50ZXJzZWN0aW9uPj0wP2QuY29vcmQubGVmdD0wOmQuY29vcmQubGVmdD1jLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0LnJpZ2h0LXRoaXMuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbi0xOmQuY29vcmQubGVmdD5jLmdlby53aW5kb3cuc2l6ZS53aWR0aC1kLnNpemUud2lkdGgmJihjLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0LmxlZnQrdGhpcy5fX29wdGlvbnMubWluSW50ZXJzZWN0aW9uPD1jLmdlby53aW5kb3cuc2l6ZS53aWR0aD9kLmNvb3JkLmxlZnQ9Yy5nZW8ud2luZG93LnNpemUud2lkdGgtZC5zaXplLndpZHRoOmQuY29vcmQubGVmdD1jLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0LmxlZnQrdGhpcy5fX29wdGlvbnMubWluSW50ZXJzZWN0aW9uKzEtZC5zaXplLndpZHRoKTpkLmNvb3JkLnRvcDwwP2MuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQuYm90dG9tLXRoaXMuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbj49MD9kLmNvb3JkLnRvcD0wOmQuY29vcmQudG9wPWMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQuYm90dG9tLXRoaXMuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbi0xOmQuY29vcmQudG9wPmMuZ2VvLndpbmRvdy5zaXplLmhlaWdodC1kLnNpemUuaGVpZ2h0JiYoYy5nZW8ub3JpZ2luLndpbmRvd09mZnNldC50b3ArdGhpcy5fX29wdGlvbnMubWluSW50ZXJzZWN0aW9uPD1jLmdlby53aW5kb3cuc2l6ZS5oZWlnaHQ/ZC5jb29yZC50b3A9Yy5nZW8ud2luZG93LnNpemUuaGVpZ2h0LWQuc2l6ZS5oZWlnaHQ6ZC5jb29yZC50b3A9Yy5nZW8ub3JpZ2luLndpbmRvd09mZnNldC50b3ArdGhpcy5fX29wdGlvbnMubWluSW50ZXJzZWN0aW9uKzEtZC5zaXplLmhlaWdodCk6KGQuY29vcmQubGVmdD5jLmdlby53aW5kb3cuc2l6ZS53aWR0aC1kLnNpemUud2lkdGgmJihkLmNvb3JkLmxlZnQ9Yy5nZW8ud2luZG93LnNpemUud2lkdGgtZC5zaXplLndpZHRoKSxkLmNvb3JkLmxlZnQ8MCYmKGQuY29vcmQubGVmdD0wKSksZS5fX3NpZGVDaGFuZ2UoaCxkLnNpZGUpLGMudG9vbHRpcENsb25lPWhbMF0sYy50b29sdGlwUGFyZW50PWUuX19pbnN0YW5jZS5vcHRpb24oXCJwYXJlbnRcIikucGFyZW50WzBdLGMubW9kZT1kLm1vZGUsYy53aG9sZT1kLndob2xlLGMub3JpZ2luPWUuX19pbnN0YW5jZS5fJG9yaWdpblswXSxjLnRvb2x0aXA9ZS5fX2luc3RhbmNlLl8kdG9vbHRpcFswXSxkZWxldGUgZC5jb250YWluZXIsZGVsZXRlIGQuZml0cyxkZWxldGUgZC5tb2RlLGRlbGV0ZSBkLm91dGVyU2l6ZSxkZWxldGUgZC53aG9sZSxkLmRpc3RhbmNlPWQuZGlzdGFuY2UuaG9yaXpvbnRhbHx8ZC5kaXN0YW5jZS52ZXJ0aWNhbDt2YXIgbD1hLmV4dGVuZCghMCx7fSxkKTtpZihlLl9faW5zdGFuY2UuX3RyaWdnZXIoe2VkaXQ6ZnVuY3Rpb24oYSl7ZD1hfSxldmVudDpiLGhlbHBlcjpjLHBvc2l0aW9uOmwsdHlwZTpcInBvc2l0aW9uXCJ9KSxlLl9fb3B0aW9ucy5mdW5jdGlvblBvc2l0aW9uKXt2YXIgbT1lLl9fb3B0aW9ucy5mdW5jdGlvblBvc2l0aW9uLmNhbGwoZSxlLl9faW5zdGFuY2UsYyxsKTttJiYoZD1tKX1pLmRlc3Ryb3koKTt2YXIgbixvO1widG9wXCI9PWQuc2lkZXx8XCJib3R0b21cIj09ZC5zaWRlPyhuPXtwcm9wOlwibGVmdFwiLHZhbDpkLnRhcmdldC1kLmNvb3JkLmxlZnR9LG89ZC5zaXplLndpZHRoLXRoaXMuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbik6KG49e3Byb3A6XCJ0b3BcIix2YWw6ZC50YXJnZXQtZC5jb29yZC50b3B9LG89ZC5zaXplLmhlaWdodC10aGlzLl9fb3B0aW9ucy5taW5JbnRlcnNlY3Rpb24pLG4udmFsPHRoaXMuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbj9uLnZhbD10aGlzLl9fb3B0aW9ucy5taW5JbnRlcnNlY3Rpb246bi52YWw+byYmKG4udmFsPW8pO3ZhciBwO3A9Yy5nZW8ub3JpZ2luLmZpeGVkTGluZWFnZT9jLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0OntsZWZ0OmMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQubGVmdCtjLmdlby53aW5kb3cuc2Nyb2xsLmxlZnQsdG9wOmMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQudG9wK2MuZ2VvLndpbmRvdy5zY3JvbGwudG9wfSxkLmNvb3JkPXtsZWZ0OnAubGVmdCsoZC5jb29yZC5sZWZ0LWMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQubGVmdCksdG9wOnAudG9wKyhkLmNvb3JkLnRvcC1jLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0LnRvcCl9LGUuX19zaWRlQ2hhbmdlKGUuX19pbnN0YW5jZS5fJHRvb2x0aXAsZC5zaWRlKSxjLmdlby5vcmlnaW4uZml4ZWRMaW5lYWdlP2UuX19pbnN0YW5jZS5fJHRvb2x0aXAuY3NzKFwicG9zaXRpb25cIixcImZpeGVkXCIpOmUuX19pbnN0YW5jZS5fJHRvb2x0aXAuY3NzKFwicG9zaXRpb25cIixcIlwiKSxlLl9faW5zdGFuY2UuXyR0b29sdGlwLmNzcyh7bGVmdDpkLmNvb3JkLmxlZnQsdG9wOmQuY29vcmQudG9wLGhlaWdodDpkLnNpemUuaGVpZ2h0LHdpZHRoOmQuc2l6ZS53aWR0aH0pLmZpbmQoXCIudG9vbHRpcHN0ZXItYXJyb3dcIikuY3NzKHtsZWZ0OlwiXCIsdG9wOlwiXCJ9KS5jc3Mobi5wcm9wLG4udmFsKSxlLl9faW5zdGFuY2UuXyR0b29sdGlwLmFwcGVuZFRvKGUuX19pbnN0YW5jZS5vcHRpb24oXCJwYXJlbnRcIikpLGUuX19pbnN0YW5jZS5fdHJpZ2dlcih7dHlwZTpcInJlcG9zaXRpb25lZFwiLGV2ZW50OmIscG9zaXRpb246ZH0pfSxfX3NpZGVDaGFuZ2U6ZnVuY3Rpb24oYSxiKXthLnJlbW92ZUNsYXNzKFwidG9vbHRpcHN0ZXItYm90dG9tXCIpLnJlbW92ZUNsYXNzKFwidG9vbHRpcHN0ZXItbGVmdFwiKS5yZW1vdmVDbGFzcyhcInRvb2x0aXBzdGVyLXJpZ2h0XCIpLnJlbW92ZUNsYXNzKFwidG9vbHRpcHN0ZXItdG9wXCIpLmFkZENsYXNzKFwidG9vbHRpcHN0ZXItXCIrYil9LF9fdGFyZ2V0RmluZDpmdW5jdGlvbihhKXt2YXIgYj17fSxjPXRoaXMuX19pbnN0YW5jZS5fJG9yaWdpblswXS5nZXRDbGllbnRSZWN0cygpO2lmKGMubGVuZ3RoPjEpe3ZhciBkPXRoaXMuX19pbnN0YW5jZS5fJG9yaWdpbi5jc3MoXCJvcGFjaXR5XCIpOzE9PWQmJih0aGlzLl9faW5zdGFuY2UuXyRvcmlnaW4uY3NzKFwib3BhY2l0eVwiLC45OSksYz10aGlzLl9faW5zdGFuY2UuXyRvcmlnaW5bMF0uZ2V0Q2xpZW50UmVjdHMoKSx0aGlzLl9faW5zdGFuY2UuXyRvcmlnaW4uY3NzKFwib3BhY2l0eVwiLDEpKX1pZihjLmxlbmd0aDwyKWIudG9wPU1hdGguZmxvb3IoYS5nZW8ub3JpZ2luLndpbmRvd09mZnNldC5sZWZ0K2EuZ2VvLm9yaWdpbi5zaXplLndpZHRoLzIpLGIuYm90dG9tPWIudG9wLGIubGVmdD1NYXRoLmZsb29yKGEuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQudG9wK2EuZ2VvLm9yaWdpbi5zaXplLmhlaWdodC8yKSxiLnJpZ2h0PWIubGVmdDtlbHNle3ZhciBlPWNbMF07Yi50b3A9TWF0aC5mbG9vcihlLmxlZnQrKGUucmlnaHQtZS5sZWZ0KS8yKSxlPWMubGVuZ3RoPjI/Y1tNYXRoLmNlaWwoYy5sZW5ndGgvMiktMV06Y1swXSxiLnJpZ2h0PU1hdGguZmxvb3IoZS50b3ArKGUuYm90dG9tLWUudG9wKS8yKSxlPWNbYy5sZW5ndGgtMV0sYi5ib3R0b209TWF0aC5mbG9vcihlLmxlZnQrKGUucmlnaHQtZS5sZWZ0KS8yKSxlPWMubGVuZ3RoPjI/Y1tNYXRoLmNlaWwoKGMubGVuZ3RoKzEpLzIpLTFdOmNbYy5sZW5ndGgtMV0sYi5sZWZ0PU1hdGguZmxvb3IoZS50b3ArKGUuYm90dG9tLWUudG9wKS8yKX1yZXR1cm4gYn19fSksYX0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfSwgX3R5cGVvZihvYmopOyB9XG4vKlxyXG4gKiAgQm9vdHN0cmFwIFRvdWNoc3BpbiAtIHY0LjcuM1xyXG4gKiAgQSBtb2JpbGUgYW5kIHRvdWNoIGZyaWVuZGx5IGlucHV0IHNwaW5uZXIgY29tcG9uZW50IGZvciBCb290c3RyYXAgMyAmIDQuXHJcbiAqICBodHRwczovL3d3dy52aXJ0dW9zb2Z0LmV1L2NvZGUvYm9vdHN0cmFwLXRvdWNoc3Bpbi9cclxuICpcclxuICogIE1hZGUgYnkgSXN0dsOhbiBVamotTcOpc3rDoXJvc1xyXG4gKiAgVW5kZXIgTUlUIExpY2Vuc2VcclxuICovXG4oZnVuY3Rpb24gKGZhY3RvcnkpIHtcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShbJ2pxdWVyeSddLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICgodHlwZW9mIG1vZHVsZSA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKG1vZHVsZSkpID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJvb3QsIGpRdWVyeSkge1xuICAgICAgaWYgKGpRdWVyeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGpRdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGpRdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeScpKHJvb3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmYWN0b3J5KGpRdWVyeSk7XG4gICAgICByZXR1cm4galF1ZXJ5O1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgZmFjdG9yeShqUXVlcnkpO1xuICB9XG59KShmdW5jdGlvbiAoJCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIF9jdXJyZW50U3Bpbm5lcklkID0gMDtcbiAgJC5mbi5Ub3VjaFNwaW4gPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBkZWZhdWx0cyA9IHtcbiAgICAgIG1pbjogMCxcbiAgICAgIC8vIElmIG51bGwsIHRoZXJlIGlzIG5vIG1pbmltdW0gZW5mb3JjZWRcbiAgICAgIG1heDogMTAwLFxuICAgICAgLy8gSWYgbnVsbCwgdGhlcmUgaXMgbm8gbWF4aW11bSBlbmZvcmNlZFxuICAgICAgaW5pdHZhbDogJycsXG4gICAgICByZXBsYWNlbWVudHZhbDogJycsXG4gICAgICBmaXJzdGNsaWNrdmFsdWVpZmVtcHR5OiBudWxsLFxuICAgICAgc3RlcDogMSxcbiAgICAgIGRlY2ltYWxzOiAwLFxuICAgICAgc3RlcGludGVydmFsOiAxMDAsXG4gICAgICBmb3JjZXN0ZXBkaXZpc2liaWxpdHk6ICdyb3VuZCcsXG4gICAgICAvLyBub25lIHwgZmxvb3IgfCByb3VuZCB8IGNlaWxcbiAgICAgIHN0ZXBpbnRlcnZhbGRlbGF5OiA1MDAsXG4gICAgICB2ZXJ0aWNhbGJ1dHRvbnM6IGZhbHNlLFxuICAgICAgdmVydGljYWx1cDogJyZwbHVzOycsXG4gICAgICB2ZXJ0aWNhbGRvd246ICcmbWludXM7JyxcbiAgICAgIHZlcnRpY2FsdXBjbGFzczogJycsXG4gICAgICB2ZXJ0aWNhbGRvd25jbGFzczogJycsXG4gICAgICBwcmVmaXg6ICcnLFxuICAgICAgcG9zdGZpeDogJycsXG4gICAgICBwcmVmaXhfZXh0cmFjbGFzczogJycsXG4gICAgICBwb3N0Zml4X2V4dHJhY2xhc3M6ICcnLFxuICAgICAgYm9vc3RlcjogdHJ1ZSxcbiAgICAgIGJvb3N0YXQ6IDEwLFxuICAgICAgbWF4Ym9vc3RlZHN0ZXA6IGZhbHNlLFxuICAgICAgbW91c2V3aGVlbDogdHJ1ZSxcbiAgICAgIGJ1dHRvbmRvd25fY2xhc3M6ICdidG4gYnRuLXByaW1hcnknLFxuICAgICAgYnV0dG9udXBfY2xhc3M6ICdidG4gYnRuLXByaW1hcnknLFxuICAgICAgYnV0dG9uZG93bl90eHQ6ICcmbWludXM7JyxcbiAgICAgIGJ1dHRvbnVwX3R4dDogJyZwbHVzOycsXG4gICAgICBjYWxsYmFja19iZWZvcmVfY2FsY3VsYXRpb246IGZ1bmN0aW9uIGNhbGxiYWNrX2JlZm9yZV9jYWxjdWxhdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9LFxuICAgICAgY2FsbGJhY2tfYWZ0ZXJfY2FsY3VsYXRpb246IGZ1bmN0aW9uIGNhbGxiYWNrX2FmdGVyX2NhbGN1bGF0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBhdHRyaWJ1dGVNYXAgPSB7XG4gICAgICBtaW46ICdtaW4nLFxuICAgICAgbWF4OiAnbWF4JyxcbiAgICAgIGluaXR2YWw6ICdpbml0LXZhbCcsXG4gICAgICByZXBsYWNlbWVudHZhbDogJ3JlcGxhY2VtZW50LXZhbCcsXG4gICAgICBmaXJzdGNsaWNrdmFsdWVpZmVtcHR5OiAnZmlyc3QtY2xpY2stdmFsdWUtaWYtZW1wdHknLFxuICAgICAgc3RlcDogJ3N0ZXAnLFxuICAgICAgZGVjaW1hbHM6ICdkZWNpbWFscycsXG4gICAgICBzdGVwaW50ZXJ2YWw6ICdzdGVwLWludGVydmFsJyxcbiAgICAgIHZlcnRpY2FsYnV0dG9uczogJ3ZlcnRpY2FsLWJ1dHRvbnMnLFxuICAgICAgdmVydGljYWx1cGNsYXNzOiAndmVydGljYWwtdXAtY2xhc3MnLFxuICAgICAgdmVydGljYWxkb3duY2xhc3M6ICd2ZXJ0aWNhbC1kb3duLWNsYXNzJyxcbiAgICAgIGZvcmNlc3RlcGRpdmlzaWJpbGl0eTogJ2ZvcmNlLXN0ZXAtZGl2aXNpYmlsaXR5JyxcbiAgICAgIHN0ZXBpbnRlcnZhbGRlbGF5OiAnc3RlcC1pbnRlcnZhbC1kZWxheScsXG4gICAgICBwcmVmaXg6ICdwcmVmaXgnLFxuICAgICAgcG9zdGZpeDogJ3Bvc3RmaXgnLFxuICAgICAgcHJlZml4X2V4dHJhY2xhc3M6ICdwcmVmaXgtZXh0cmEtY2xhc3MnLFxuICAgICAgcG9zdGZpeF9leHRyYWNsYXNzOiAncG9zdGZpeC1leHRyYS1jbGFzcycsXG4gICAgICBib29zdGVyOiAnYm9vc3RlcicsXG4gICAgICBib29zdGF0OiAnYm9vc3RhdCcsXG4gICAgICBtYXhib29zdGVkc3RlcDogJ21heC1ib29zdGVkLXN0ZXAnLFxuICAgICAgbW91c2V3aGVlbDogJ21vdXNlLXdoZWVsJyxcbiAgICAgIGJ1dHRvbmRvd25fY2xhc3M6ICdidXR0b24tZG93bi1jbGFzcycsXG4gICAgICBidXR0b251cF9jbGFzczogJ2J1dHRvbi11cC1jbGFzcycsXG4gICAgICBidXR0b25kb3duX3R4dDogJ2J1dHRvbi1kb3duLXR4dCcsXG4gICAgICBidXR0b251cF90eHQ6ICdidXR0b24tdXAtdHh0J1xuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc2V0dGluZ3MsXG4gICAgICAgIG9yaWdpbmFsaW5wdXQgPSAkKHRoaXMpLFxuICAgICAgICBvcmlnaW5hbGlucHV0X2RhdGEgPSBvcmlnaW5hbGlucHV0LmRhdGEoKSxcbiAgICAgICAgX2RldGFjaGVkX3ByZWZpeCxcbiAgICAgICAgX2RldGFjaGVkX3Bvc3RmaXgsXG4gICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgZWxlbWVudHMsXG4gICAgICAgIHZlcnRpY2FsYnV0dG9uc19odG1sLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgZG93blNwaW5UaW1lcixcbiAgICAgICAgdXBTcGluVGltZXIsXG4gICAgICAgIGRvd25EZWxheVRpbWVvdXQsXG4gICAgICAgIHVwRGVsYXlUaW1lb3V0LFxuICAgICAgICBzcGluY291bnQgPSAwLFxuICAgICAgICBzcGlubmluZyA9IGZhbHNlO1xuICAgICAgaW5pdCgpO1xuICAgICAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgICAgaWYgKG9yaWdpbmFsaW5wdXQuZGF0YSgnYWxyZWFkeWluaXRpYWxpemVkJykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgb3JpZ2luYWxpbnB1dC5kYXRhKCdhbHJlYWR5aW5pdGlhbGl6ZWQnLCB0cnVlKTtcbiAgICAgICAgX2N1cnJlbnRTcGlubmVySWQgKz0gMTtcbiAgICAgICAgb3JpZ2luYWxpbnB1dC5kYXRhKCdzcGlubmVyaWQnLCBfY3VycmVudFNwaW5uZXJJZCk7XG4gICAgICAgIGlmICghb3JpZ2luYWxpbnB1dC5pcygnaW5wdXQnKSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdNdXN0IGJlIGFuIGlucHV0LicpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBfaW5pdFNldHRpbmdzKCk7XG4gICAgICAgIF9zZXRJbml0dmFsKCk7XG4gICAgICAgIF9jaGVja1ZhbHVlKCk7XG4gICAgICAgIF9idWlsZEh0bWwoKTtcbiAgICAgICAgX2luaXRFbGVtZW50cygpO1xuICAgICAgICBfdXBkYXRlQnV0dG9uRGlzYWJsZWRTdGF0ZSgpO1xuICAgICAgICBfaGlkZUVtcHR5UHJlZml4UG9zdGZpeCgpO1xuICAgICAgICBfc2V0dXBNdXRhdGlvbk9ic2VydmVycygpO1xuICAgICAgICBfYmluZEV2ZW50cygpO1xuICAgICAgICBfYmluZEV2ZW50c0ludGVyZmFjZSgpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3NldEluaXR2YWwoKSB7XG4gICAgICAgIGlmIChzZXR0aW5ncy5pbml0dmFsICE9PSAnJyAmJiBvcmlnaW5hbGlucHV0LnZhbCgpID09PSAnJykge1xuICAgICAgICAgIG9yaWdpbmFsaW5wdXQudmFsKHNldHRpbmdzLmluaXR2YWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBjaGFuZ2VTZXR0aW5ncyhuZXdzZXR0aW5ncykge1xuICAgICAgICBfdXBkYXRlU2V0dGluZ3MobmV3c2V0dGluZ3MpO1xuICAgICAgICBfY2hlY2tWYWx1ZSgpO1xuICAgICAgICB2YXIgdmFsdWUgPSBlbGVtZW50cy5pbnB1dC52YWwoKTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSAnJykge1xuICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdChzZXR0aW5ncy5jYWxsYmFja19iZWZvcmVfY2FsY3VsYXRpb24oZWxlbWVudHMuaW5wdXQudmFsKCkpKTtcbiAgICAgICAgICBlbGVtZW50cy5pbnB1dC52YWwoc2V0dGluZ3MuY2FsbGJhY2tfYWZ0ZXJfY2FsY3VsYXRpb24ocGFyc2VGbG9hdCh2YWx1ZSkudG9GaXhlZChzZXR0aW5ncy5kZWNpbWFscykpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2luaXRTZXR0aW5ncygpIHtcbiAgICAgICAgc2V0dGluZ3MgPSAkLmV4dGVuZCh7fSwgZGVmYXVsdHMsIG9yaWdpbmFsaW5wdXRfZGF0YSwgX3BhcnNlQXR0cmlidXRlcygpLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKHBhcnNlRmxvYXQoc2V0dGluZ3Muc3RlcCkgIT09IDEpIHtcbiAgICAgICAgICB2YXIgcmVtYWluZGVyO1xuXG4gICAgICAgICAgLy8gTW9kaWZ5IHNldHRpbmdzLm1heCB0byBiZSBkaXZpc2libGUgYnkgc3RlcFxuICAgICAgICAgIHJlbWFpbmRlciA9IHNldHRpbmdzLm1heCAlIHNldHRpbmdzLnN0ZXA7XG4gICAgICAgICAgaWYgKHJlbWFpbmRlciAhPT0gMCkge1xuICAgICAgICAgICAgc2V0dGluZ3MubWF4ID0gcGFyc2VGbG9hdChzZXR0aW5ncy5tYXgpIC0gcmVtYWluZGVyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIERvIHRoZSBzYW1lIHdpdGggbWluLCBzaG91bGQgd29yayB3aXRoIG5lZ2F0aXZlIG51bWJlcnMgdG9vXG4gICAgICAgICAgcmVtYWluZGVyID0gc2V0dGluZ3MubWluICUgc2V0dGluZ3Muc3RlcDtcbiAgICAgICAgICBpZiAocmVtYWluZGVyICE9PSAwKSB7XG4gICAgICAgICAgICBzZXR0aW5ncy5taW4gPSBwYXJzZUZsb2F0KHNldHRpbmdzLm1pbikgKyAocGFyc2VGbG9hdChzZXR0aW5ncy5zdGVwKSAtIHJlbWFpbmRlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfcGFyc2VBdHRyaWJ1dGVzKCkge1xuICAgICAgICB2YXIgZGF0YSA9IHt9O1xuXG4gICAgICAgIC8vIFNldHRpbmcgdXAgYmFzZWQgb24gZGF0YSBhdHRyaWJ1dGVzXG4gICAgICAgICQuZWFjaChhdHRyaWJ1dGVNYXAsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgdmFyIGF0dHJOYW1lID0gJ2J0cy0nICsgdmFsdWUgKyAnJztcbiAgICAgICAgICBpZiAob3JpZ2luYWxpbnB1dC5pcygnW2RhdGEtJyArIGF0dHJOYW1lICsgJ10nKSkge1xuICAgICAgICAgICAgZGF0YVtrZXldID0gb3JpZ2luYWxpbnB1dC5kYXRhKGF0dHJOYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFNldHRpbmcgdXAgYmFzZWQgb24gaW5wdXQgYXR0cmlidXRlcyBpZiBzcGVjaWZpZWQgKGlucHV0IGF0dHJpYnV0ZXMgaGF2ZSBwcmVjZWRlbmNlKVxuICAgICAgICAkLmVhY2goWydtaW4nLCAnbWF4JywgJ3N0ZXAnXSwgZnVuY3Rpb24gKGksIGtleSkge1xuICAgICAgICAgIGlmIChvcmlnaW5hbGlucHV0LmlzKCdbJyArIGtleSArICddJykpIHtcbiAgICAgICAgICAgIGlmIChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0JvdGggdGhlIFwiZGF0YS1idHMtJyArIGtleSArICdcIiBkYXRhIGF0dHJpYnV0ZSBhbmQgdGhlIFwiJyArIGtleSArICdcIiBpbmRpdmlkdWFsIGF0dHJpYnV0ZSB3ZXJlIHNwZWNpZmllZCwgdGhlIGluZGl2aWR1YWwgYXR0cmlidXRlIHdpbGwgdGFrZSBwcmVjZWRlbmNlIG9uOiAnLCBvcmlnaW5hbGlucHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGFba2V5XSA9IG9yaWdpbmFsaW5wdXQuYXR0cihrZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2Rlc3Ryb3koKSB7XG4gICAgICAgIHZhciAkcGFyZW50ID0gb3JpZ2luYWxpbnB1dC5wYXJlbnQoKTtcbiAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgb3JpZ2luYWxpbnB1dC5vZmYoJy50b3VjaHNwaW4nKTtcbiAgICAgICAgaWYgKCRwYXJlbnQuaGFzQ2xhc3MoJ2Jvb3RzdHJhcC10b3VjaHNwaW4taW5qZWN0ZWQnKSkge1xuICAgICAgICAgIG9yaWdpbmFsaW5wdXQuc2libGluZ3MoKS5yZW1vdmUoKTtcbiAgICAgICAgICBvcmlnaW5hbGlucHV0LnVud3JhcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICQoJy5ib290c3RyYXAtdG91Y2hzcGluLWluamVjdGVkJywgJHBhcmVudCkucmVtb3ZlKCk7XG4gICAgICAgICAgJHBhcmVudC5yZW1vdmVDbGFzcygnYm9vdHN0cmFwLXRvdWNoc3BpbicpO1xuICAgICAgICB9XG4gICAgICAgIG9yaWdpbmFsaW5wdXQuZGF0YSgnYWxyZWFkeWluaXRpYWxpemVkJywgZmFsc2UpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3VwZGF0ZVNldHRpbmdzKG5ld3NldHRpbmdzKSB7XG4gICAgICAgIHNldHRpbmdzID0gJC5leHRlbmQoe30sIHNldHRpbmdzLCBuZXdzZXR0aW5ncyk7XG5cbiAgICAgICAgLy8gVXBkYXRlIHBvc3RmaXggYW5kIHByZWZpeCB0ZXh0cyBpZiB0aG9zZSBzZXR0aW5ncyB3ZXJlIGNoYW5nZWQuXG4gICAgICAgIGlmIChuZXdzZXR0aW5ncy5wb3N0Zml4KSB7XG4gICAgICAgICAgdmFyICRwb3N0Zml4ID0gb3JpZ2luYWxpbnB1dC5wYXJlbnQoKS5maW5kKCcuYm9vdHN0cmFwLXRvdWNoc3Bpbi1wb3N0Zml4Jyk7XG4gICAgICAgICAgaWYgKCRwb3N0Zml4Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgX2RldGFjaGVkX3Bvc3RmaXguaW5zZXJ0QWZ0ZXIob3JpZ2luYWxpbnB1dCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9yaWdpbmFsaW5wdXQucGFyZW50KCkuZmluZCgnLmJvb3RzdHJhcC10b3VjaHNwaW4tcG9zdGZpeCAuaW5wdXQtZ3JvdXAtdGV4dCcpLnRleHQobmV3c2V0dGluZ3MucG9zdGZpeCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld3NldHRpbmdzLnByZWZpeCkge1xuICAgICAgICAgIHZhciAkcHJlZml4ID0gb3JpZ2luYWxpbnB1dC5wYXJlbnQoKS5maW5kKCcuYm9vdHN0cmFwLXRvdWNoc3Bpbi1wcmVmaXgnKTtcbiAgICAgICAgICBpZiAoJHByZWZpeC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIF9kZXRhY2hlZF9wcmVmaXguaW5zZXJ0QmVmb3JlKG9yaWdpbmFsaW5wdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcmlnaW5hbGlucHV0LnBhcmVudCgpLmZpbmQoJy5ib290c3RyYXAtdG91Y2hzcGluLXByZWZpeCAuaW5wdXQtZ3JvdXAtdGV4dCcpLnRleHQobmV3c2V0dGluZ3MucHJlZml4KTtcbiAgICAgICAgfVxuICAgICAgICBfaGlkZUVtcHR5UHJlZml4UG9zdGZpeCgpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2J1aWxkSHRtbCgpIHtcbiAgICAgICAgdmFyIGluaXR2YWwgPSBvcmlnaW5hbGlucHV0LnZhbCgpLFxuICAgICAgICAgIHBhcmVudGVsZW1lbnQgPSBvcmlnaW5hbGlucHV0LnBhcmVudCgpO1xuICAgICAgICBpZiAoaW5pdHZhbCAhPT0gJycpIHtcbiAgICAgICAgICAvLyBpbml0dmFsIG1heSBub3QgYmUgcGFyc2FibGUgYXMgYSBudW1iZXIgKGNhbGxiYWNrX2FmdGVyX2NhbGN1bGF0aW9uKCkgbWF5IGRlY29yYXRlIGl0IHNvIGl0IGNhbnQgYmUgcGFyc2VkKS4gIFVzZSB0aGUgY2FsbGJhY2tzIGlmIHByb3ZpZGVkLlxuICAgICAgICAgIGluaXR2YWwgPSBzZXR0aW5ncy5jYWxsYmFja19iZWZvcmVfY2FsY3VsYXRpb24oaW5pdHZhbCk7XG4gICAgICAgICAgaW5pdHZhbCA9IHNldHRpbmdzLmNhbGxiYWNrX2FmdGVyX2NhbGN1bGF0aW9uKHBhcnNlRmxvYXQoaW5pdHZhbCkudG9GaXhlZChzZXR0aW5ncy5kZWNpbWFscykpO1xuICAgICAgICB9XG4gICAgICAgIG9yaWdpbmFsaW5wdXQuZGF0YSgnaW5pdHZhbHVlJywgaW5pdHZhbCkudmFsKGluaXR2YWwpO1xuICAgICAgICBvcmlnaW5hbGlucHV0LmFkZENsYXNzKCdmb3JtLWNvbnRyb2wnKTtcbiAgICAgICAgdmVydGljYWxidXR0b25zX2h0bWwgPSBcIlxcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtYWRkb24gYm9vdHN0cmFwLXRvdWNoc3Bpbi12ZXJ0aWNhbC1idXR0b24td3JhcHBlclxcXCI+XFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWJ0bi12ZXJ0aWNhbFxcXCI+XFxuICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVxcXCItMVxcXCIgY2xhc3M9XFxcIlwiLmNvbmNhdChzZXR0aW5ncy5idXR0b25kb3duX2NsYXNzLCBcIiBib290c3RyYXAtdG91Y2hzcGluLXVwIFwiKS5jb25jYXQoc2V0dGluZ3MudmVydGljYWx1cGNsYXNzLCBcIlxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIj5cIikuY29uY2F0KHNldHRpbmdzLnZlcnRpY2FsdXAsIFwiPC9idXR0b24+XFxuICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVxcXCItMVxcXCIgY2xhc3M9XFxcIlwiKS5jb25jYXQoc2V0dGluZ3MuYnV0dG9udXBfY2xhc3MsIFwiIGJvb3RzdHJhcC10b3VjaHNwaW4tZG93biBcIikuY29uY2F0KHNldHRpbmdzLnZlcnRpY2FsZG93bmNsYXNzLCBcIlxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIj5cIikuY29uY2F0KHNldHRpbmdzLnZlcnRpY2FsZG93biwgXCI8L2J1dHRvbj5cXG4gICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgXCIpO1xuICAgICAgICBpZiAocGFyZW50ZWxlbWVudC5oYXNDbGFzcygnaW5wdXQtZ3JvdXAnKSkge1xuICAgICAgICAgIF9hZHZhbmNlSW5wdXRHcm91cChwYXJlbnRlbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfYnVpbGRJbnB1dEdyb3VwKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9hZHZhbmNlSW5wdXRHcm91cChwYXJlbnRlbGVtZW50KSB7XG4gICAgICAgIHBhcmVudGVsZW1lbnQuYWRkQ2xhc3MoJ2Jvb3RzdHJhcC10b3VjaHNwaW4nKTtcbiAgICAgICAgdmFyIHByZXYgPSBvcmlnaW5hbGlucHV0LnByZXYoKSxcbiAgICAgICAgICBuZXh0ID0gb3JpZ2luYWxpbnB1dC5uZXh0KCk7XG4gICAgICAgIHZhciBkb3duaHRtbCxcbiAgICAgICAgICB1cGh0bWwsXG4gICAgICAgICAgcHJlZml4aHRtbCA9IFwiXFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uIGlucHV0LWdyb3VwLXByZXBlbmQgYm9vdHN0cmFwLXRvdWNoc3Bpbi1wcmVmaXggaW5wdXQtZ3JvdXAtcHJlcGVuZCBib290c3RyYXAtdG91Y2hzcGluLWluamVjdGVkXFxcIj5cXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJpbnB1dC1ncm91cC10ZXh0XFxcIj5cIi5jb25jYXQoc2V0dGluZ3MucHJlZml4LCBcIjwvc3Bhbj5cXG4gICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgIFwiKSxcbiAgICAgICAgICBwb3N0Zml4aHRtbCA9IFwiXFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uIGlucHV0LWdyb3VwLWFwcGVuZCBib290c3RyYXAtdG91Y2hzcGluLXBvc3RmaXggaW5wdXQtZ3JvdXAtYXBwZW5kIGJvb3RzdHJhcC10b3VjaHNwaW4taW5qZWN0ZWRcXFwiPlxcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLXRleHRcXFwiPlwiLmNvbmNhdChzZXR0aW5ncy5wb3N0Zml4LCBcIjwvc3Bhbj5cXG4gICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgIFwiKTtcbiAgICAgICAgaWYgKHNldHRpbmdzLnZlcnRpY2FsYnV0dG9ucykge1xuICAgICAgICAgICQodmVydGljYWxidXR0b25zX2h0bWwpLmluc2VydEFmdGVyKG9yaWdpbmFsaW5wdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwcmV2Lmhhc0NsYXNzKCdpbnB1dC1ncm91cC1idG4nKSB8fCBwcmV2Lmhhc0NsYXNzKCdpbnB1dC1ncm91cC1wcmVwZW5kJykpIHtcbiAgICAgICAgICAgIGRvd25odG1sID0gXCJcXG4gICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XFxcIi0xXFxcIiBjbGFzcz1cXFwiXCIuY29uY2F0KHNldHRpbmdzLmJ1dHRvbmRvd25fY2xhc3MsIFwiIGJvb3RzdHJhcC10b3VjaHNwaW4tZG93biBib290c3RyYXAtdG91Y2hzcGluLWluamVjdGVkXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiPlwiKS5jb25jYXQoc2V0dGluZ3MuYnV0dG9uZG93bl90eHQsIFwiPC9idXR0b24+XFxuICAgICAgICAgICAgXCIpO1xuICAgICAgICAgICAgcHJldi5hcHBlbmQoZG93bmh0bWwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb3duaHRtbCA9IFwiXFxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtYnRuIGlucHV0LWdyb3VwLXByZXBlbmQgYm9vdHN0cmFwLXRvdWNoc3Bpbi1pbmplY3RlZFxcXCI+XFxuICAgICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XFxcIi0xXFxcIiBjbGFzcz1cXFwiXCIuY29uY2F0KHNldHRpbmdzLmJ1dHRvbmRvd25fY2xhc3MsIFwiIGJvb3RzdHJhcC10b3VjaHNwaW4tZG93blxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIj5cIikuY29uY2F0KHNldHRpbmdzLmJ1dHRvbmRvd25fdHh0LCBcIjwvYnV0dG9uPlxcbiAgICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgIFwiKTtcbiAgICAgICAgICAgICQoZG93bmh0bWwpLmluc2VydEJlZm9yZShvcmlnaW5hbGlucHV0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5leHQuaGFzQ2xhc3MoJ2lucHV0LWdyb3VwLWJ0bicpIHx8IG5leHQuaGFzQ2xhc3MoJ2lucHV0LWdyb3VwLWFwcGVuZCcpKSB7XG4gICAgICAgICAgICB1cGh0bWwgPSBcIlxcbiAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XFxcIi0xXFxcIiBjbGFzcz1cXFwiXCIuY29uY2F0KHNldHRpbmdzLmJ1dHRvbnVwX2NsYXNzLCBcIiBib290c3RyYXAtdG91Y2hzcGluLXVwIGJvb3RzdHJhcC10b3VjaHNwaW4taW5qZWN0ZWRcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCI+XCIpLmNvbmNhdChzZXR0aW5ncy5idXR0b251cF90eHQsIFwiPC9idXR0b24+XFxuICAgICAgICAgIFwiKTtcbiAgICAgICAgICAgIG5leHQucHJlcGVuZCh1cGh0bWwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cGh0bWwgPSBcIlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJpbnB1dC1ncm91cC1idG4gaW5wdXQtZ3JvdXAtYXBwZW5kIGJvb3RzdHJhcC10b3VjaHNwaW4taW5qZWN0ZWRcXFwiPlxcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cXFwiLTFcXFwiIGNsYXNzPVxcXCJcIi5jb25jYXQoc2V0dGluZ3MuYnV0dG9udXBfY2xhc3MsIFwiIGJvb3RzdHJhcC10b3VjaHNwaW4tdXBcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCI+XCIpLmNvbmNhdChzZXR0aW5ncy5idXR0b251cF90eHQsIFwiPC9idXR0b24+XFxuICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICBcIik7XG4gICAgICAgICAgICAkKHVwaHRtbCkuaW5zZXJ0QWZ0ZXIob3JpZ2luYWxpbnB1dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICQocHJlZml4aHRtbCkuaW5zZXJ0QmVmb3JlKG9yaWdpbmFsaW5wdXQpO1xuICAgICAgICAkKHBvc3RmaXhodG1sKS5pbnNlcnRBZnRlcihvcmlnaW5hbGlucHV0KTtcbiAgICAgICAgY29udGFpbmVyID0gcGFyZW50ZWxlbWVudDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9idWlsZElucHV0R3JvdXAoKSB7XG4gICAgICAgIHZhciBodG1sO1xuICAgICAgICB2YXIgaW5wdXRHcm91cFNpemUgPSAnJztcbiAgICAgICAgaWYgKG9yaWdpbmFsaW5wdXQuaGFzQ2xhc3MoJ2lucHV0LXNtJykgfHwgb3JpZ2luYWxpbnB1dC5oYXNDbGFzcygnZm9ybS1jb250cm9sLXNtJykpIHtcbiAgICAgICAgICBpbnB1dEdyb3VwU2l6ZSA9ICdpbnB1dC1ncm91cC1zbSc7XG4gICAgICAgIH0gZWxzZSBpZiAob3JpZ2luYWxpbnB1dC5oYXNDbGFzcygnaW5wdXQtbGcnKSB8fCBvcmlnaW5hbGlucHV0Lmhhc0NsYXNzKCdmb3JtLWNvbnRyb2wtbGcnKSkge1xuICAgICAgICAgIGlucHV0R3JvdXBTaXplID0gJ2lucHV0LWdyb3VwLWxnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2V0dGluZ3MudmVydGljYWxidXR0b25zKSB7XG4gICAgICAgICAgaHRtbCA9IFwiXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAgXCIuY29uY2F0KGlucHV0R3JvdXBTaXplLCBcIiBib290c3RyYXAtdG91Y2hzcGluIGJvb3RzdHJhcC10b3VjaHNwaW4taW5qZWN0ZWRcXFwiPlxcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uIGlucHV0LWdyb3VwLXByZXBlbmQgYm9vdHN0cmFwLXRvdWNoc3Bpbi1wcmVmaXhcXFwiPlxcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtdGV4dFxcXCI+XCIpLmNvbmNhdChzZXR0aW5ncy5wcmVmaXgsIFwiPC9zcGFuPlxcbiAgICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uIGJvb3RzdHJhcC10b3VjaHNwaW4tcG9zdGZpeCBpbnB1dC1ncm91cC1hcHBlbmRcXFwiPlxcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtdGV4dFxcXCI+XCIpLmNvbmNhdChzZXR0aW5ncy5wb3N0Zml4LCBcIjwvc3Bhbj5cXG4gICAgICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgICAgICAgIFwiKS5jb25jYXQodmVydGljYWxidXR0b25zX2h0bWwsIFwiXFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgIFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBodG1sID0gXCJcXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJpbnB1dC1ncm91cCBib290c3RyYXAtdG91Y2hzcGluIGJvb3RzdHJhcC10b3VjaHNwaW4taW5qZWN0ZWRcXFwiPlxcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWJ0biBpbnB1dC1ncm91cC1wcmVwZW5kXFxcIj5cXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cXFwiLTFcXFwiIGNsYXNzPVxcXCJcIi5jb25jYXQoc2V0dGluZ3MuYnV0dG9uZG93bl9jbGFzcywgXCIgYm9vdHN0cmFwLXRvdWNoc3Bpbi1kb3duXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiPlwiKS5jb25jYXQoc2V0dGluZ3MuYnV0dG9uZG93bl90eHQsIFwiPC9idXR0b24+XFxuICAgICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtYWRkb24gYm9vdHN0cmFwLXRvdWNoc3Bpbi1wcmVmaXggaW5wdXQtZ3JvdXAtcHJlcGVuZFxcXCI+XFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJpbnB1dC1ncm91cC10ZXh0XFxcIj5cIikuY29uY2F0KHNldHRpbmdzLnByZWZpeCwgXCI8L3NwYW4+XFxuICAgICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtYWRkb24gYm9vdHN0cmFwLXRvdWNoc3Bpbi1wb3N0Zml4IGlucHV0LWdyb3VwLWFwcGVuZFxcXCI+XFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJpbnB1dC1ncm91cC10ZXh0XFxcIj5cIikuY29uY2F0KHNldHRpbmdzLnBvc3RmaXgsIFwiPC9zcGFuPlxcbiAgICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWJ0biBpbnB1dC1ncm91cC1hcHBlbmRcXFwiPlxcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVxcXCItMVxcXCIgY2xhc3M9XFxcIlwiKS5jb25jYXQoc2V0dGluZ3MuYnV0dG9udXBfY2xhc3MsIFwiIGJvb3RzdHJhcC10b3VjaHNwaW4tdXBcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCI+XCIpLmNvbmNhdChzZXR0aW5ncy5idXR0b251cF90eHQsIFwiPC9idXR0b24+XFxuICAgICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgPC9kaXY+XCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRhaW5lciA9ICQoaHRtbCkuaW5zZXJ0QmVmb3JlKG9yaWdpbmFsaW5wdXQpO1xuICAgICAgICAkKCcuYm9vdHN0cmFwLXRvdWNoc3Bpbi1wcmVmaXgnLCBjb250YWluZXIpLmFmdGVyKG9yaWdpbmFsaW5wdXQpO1xuICAgICAgICBpZiAob3JpZ2luYWxpbnB1dC5oYXNDbGFzcygnaW5wdXQtc20nKSB8fCBvcmlnaW5hbGlucHV0Lmhhc0NsYXNzKCdmb3JtLWNvbnRyb2wtc20nKSkge1xuICAgICAgICAgIGNvbnRhaW5lci5hZGRDbGFzcygnaW5wdXQtZ3JvdXAtc20nKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcmlnaW5hbGlucHV0Lmhhc0NsYXNzKCdpbnB1dC1sZycpIHx8IG9yaWdpbmFsaW5wdXQuaGFzQ2xhc3MoJ2Zvcm0tY29udHJvbC1sZycpKSB7XG4gICAgICAgICAgY29udGFpbmVyLmFkZENsYXNzKCdpbnB1dC1ncm91cC1sZycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfaW5pdEVsZW1lbnRzKCkge1xuICAgICAgICBlbGVtZW50cyA9IHtcbiAgICAgICAgICBkb3duOiAkKCcuYm9vdHN0cmFwLXRvdWNoc3Bpbi1kb3duJywgY29udGFpbmVyKSxcbiAgICAgICAgICB1cDogJCgnLmJvb3RzdHJhcC10b3VjaHNwaW4tdXAnLCBjb250YWluZXIpLFxuICAgICAgICAgIGlucHV0OiAkKCdpbnB1dCcsIGNvbnRhaW5lciksXG4gICAgICAgICAgcHJlZml4OiAkKCcuYm9vdHN0cmFwLXRvdWNoc3Bpbi1wcmVmaXgnLCBjb250YWluZXIpLmFkZENsYXNzKHNldHRpbmdzLnByZWZpeF9leHRyYWNsYXNzKSxcbiAgICAgICAgICBwb3N0Zml4OiAkKCcuYm9vdHN0cmFwLXRvdWNoc3Bpbi1wb3N0Zml4JywgY29udGFpbmVyKS5hZGRDbGFzcyhzZXR0aW5ncy5wb3N0Zml4X2V4dHJhY2xhc3MpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfaGlkZUVtcHR5UHJlZml4UG9zdGZpeCgpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzLnByZWZpeCA9PT0gJycpIHtcbiAgICAgICAgICBfZGV0YWNoZWRfcHJlZml4ID0gZWxlbWVudHMucHJlZml4LmRldGFjaCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXR0aW5ncy5wb3N0Zml4ID09PSAnJykge1xuICAgICAgICAgIF9kZXRhY2hlZF9wb3N0Zml4ID0gZWxlbWVudHMucG9zdGZpeC5kZXRhY2goKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2JpbmRFdmVudHMoKSB7XG4gICAgICAgIG9yaWdpbmFsaW5wdXQub24oJ2tleWRvd24udG91Y2hzcGluJywgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgdmFyIGNvZGUgPSBldi5rZXlDb2RlIHx8IGV2LndoaWNoO1xuICAgICAgICAgIGlmIChjb2RlID09PSAzOCkge1xuICAgICAgICAgICAgaWYgKHNwaW5uaW5nICE9PSAndXAnKSB7XG4gICAgICAgICAgICAgIHVwT25jZSgpO1xuICAgICAgICAgICAgICBzdGFydFVwU3BpbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDQwKSB7XG4gICAgICAgICAgICBpZiAoc3Bpbm5pbmcgIT09ICdkb3duJykge1xuICAgICAgICAgICAgICBkb3duT25jZSgpO1xuICAgICAgICAgICAgICBzdGFydERvd25TcGluKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gOSB8fCBjb2RlID09PSAxMykge1xuICAgICAgICAgICAgX2NoZWNrVmFsdWUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBvcmlnaW5hbGlucHV0Lm9uKCdrZXl1cC50b3VjaHNwaW4nLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICB2YXIgY29kZSA9IGV2LmtleUNvZGUgfHwgZXYud2hpY2g7XG4gICAgICAgICAgaWYgKGNvZGUgPT09IDM4KSB7XG4gICAgICAgICAgICBzdG9wU3BpbigpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gNDApIHtcbiAgICAgICAgICAgIHN0b3BTcGluKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBjaGFuZ2UgaXMgZmlyZWQgYmVmb3JlIGJsdXIsIHNvIHdlIG5lZWQgdG8gd29yayBhcm91bmQgdGhhdFxuICAgICAgICAkKGRvY3VtZW50KS5vbignbW91c2Vkb3duIHRvdWNoc3RhcnQnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBpZiAoJChldmVudC50YXJnZXQpLmlzKG9yaWdpbmFsaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIF9jaGVja1ZhbHVlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcmlnaW5hbGlucHV0Lm9uKCdibHVyLnRvdWNoc3BpbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfY2hlY2tWYWx1ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudHMuZG93bi5vbigna2V5ZG93bicsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgIHZhciBjb2RlID0gZXYua2V5Q29kZSB8fCBldi53aGljaDtcbiAgICAgICAgICBpZiAoY29kZSA9PT0gMzIgfHwgY29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgIGlmIChzcGlubmluZyAhPT0gJ2Rvd24nKSB7XG4gICAgICAgICAgICAgIGRvd25PbmNlKCk7XG4gICAgICAgICAgICAgIHN0YXJ0RG93blNwaW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudHMuZG93bi5vbigna2V5dXAudG91Y2hzcGluJywgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgdmFyIGNvZGUgPSBldi5rZXlDb2RlIHx8IGV2LndoaWNoO1xuICAgICAgICAgIGlmIChjb2RlID09PSAzMiB8fCBjb2RlID09PSAxMykge1xuICAgICAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBlbGVtZW50cy51cC5vbigna2V5ZG93bi50b3VjaHNwaW4nLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICB2YXIgY29kZSA9IGV2LmtleUNvZGUgfHwgZXYud2hpY2g7XG4gICAgICAgICAgaWYgKGNvZGUgPT09IDMyIHx8IGNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICBpZiAoc3Bpbm5pbmcgIT09ICd1cCcpIHtcbiAgICAgICAgICAgICAgdXBPbmNlKCk7XG4gICAgICAgICAgICAgIHN0YXJ0VXBTcGluKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnRzLnVwLm9uKCdrZXl1cC50b3VjaHNwaW4nLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICB2YXIgY29kZSA9IGV2LmtleUNvZGUgfHwgZXYud2hpY2g7XG4gICAgICAgICAgaWYgKGNvZGUgPT09IDMyIHx8IGNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICBzdG9wU3BpbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnRzLmRvd24ub24oJ21vdXNlZG93bi50b3VjaHNwaW4nLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICBlbGVtZW50cy5kb3duLm9mZigndG91Y2hzdGFydC50b3VjaHNwaW4nKTsgLy8gYW5kcm9pZCA0IHdvcmthcm91bmRcblxuICAgICAgICAgIGlmIChvcmlnaW5hbGlucHV0LmlzKCc6ZGlzYWJsZWQsW3JlYWRvbmx5XScpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGRvd25PbmNlKCk7XG4gICAgICAgICAgc3RhcnREb3duU3BpbigpO1xuICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBlbGVtZW50cy5kb3duLm9uKCd0b3VjaHN0YXJ0LnRvdWNoc3BpbicsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgIGVsZW1lbnRzLmRvd24ub2ZmKCdtb3VzZWRvd24udG91Y2hzcGluJyk7IC8vIGFuZHJvaWQgNCB3b3JrYXJvdW5kXG5cbiAgICAgICAgICBpZiAob3JpZ2luYWxpbnB1dC5pcygnOmRpc2FibGVkLFtyZWFkb25seV0nKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkb3duT25jZSgpO1xuICAgICAgICAgIHN0YXJ0RG93blNwaW4oKTtcbiAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudHMudXAub24oJ21vdXNlZG93bi50b3VjaHNwaW4nLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICBlbGVtZW50cy51cC5vZmYoJ3RvdWNoc3RhcnQudG91Y2hzcGluJyk7IC8vIGFuZHJvaWQgNCB3b3JrYXJvdW5kXG5cbiAgICAgICAgICBpZiAob3JpZ2luYWxpbnB1dC5pcygnOmRpc2FibGVkLFtyZWFkb25seV0nKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB1cE9uY2UoKTtcbiAgICAgICAgICBzdGFydFVwU3BpbigpO1xuICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBlbGVtZW50cy51cC5vbigndG91Y2hzdGFydC50b3VjaHNwaW4nLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICBlbGVtZW50cy51cC5vZmYoJ21vdXNlZG93bi50b3VjaHNwaW4nKTsgLy8gYW5kcm9pZCA0IHdvcmthcm91bmRcblxuICAgICAgICAgIGlmIChvcmlnaW5hbGlucHV0LmlzKCc6ZGlzYWJsZWQsW3JlYWRvbmx5XScpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHVwT25jZSgpO1xuICAgICAgICAgIHN0YXJ0VXBTcGluKCk7XG4gICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnRzLnVwLm9uKCdtb3VzZXVwLnRvdWNoc3BpbiBtb3VzZW91dC50b3VjaHNwaW4gdG91Y2hsZWF2ZS50b3VjaHNwaW4gdG91Y2hlbmQudG91Y2hzcGluIHRvdWNoY2FuY2VsLnRvdWNoc3BpbicsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgIGlmICghc3Bpbm5pbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnRzLmRvd24ub24oJ21vdXNldXAudG91Y2hzcGluIG1vdXNlb3V0LnRvdWNoc3BpbiB0b3VjaGxlYXZlLnRvdWNoc3BpbiB0b3VjaGVuZC50b3VjaHNwaW4gdG91Y2hjYW5jZWwudG91Y2hzcGluJywgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgaWYgKCFzcGlubmluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBzdG9wU3BpbigpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudHMuZG93bi5vbignbW91c2Vtb3ZlLnRvdWNoc3BpbiB0b3VjaG1vdmUudG91Y2hzcGluJywgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgaWYgKCFzcGlubmluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudHMudXAub24oJ21vdXNlbW92ZS50b3VjaHNwaW4gdG91Y2htb3ZlLnRvdWNoc3BpbicsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgIGlmICghc3Bpbm5pbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9yaWdpbmFsaW5wdXQub24oJ21vdXNld2hlZWwudG91Y2hzcGluIERPTU1vdXNlU2Nyb2xsLnRvdWNoc3BpbicsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgIGlmICghc2V0dGluZ3MubW91c2V3aGVlbCB8fCAhb3JpZ2luYWxpbnB1dC5pcygnOmZvY3VzJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGRlbHRhID0gZXYub3JpZ2luYWxFdmVudC53aGVlbERlbHRhIHx8IC1ldi5vcmlnaW5hbEV2ZW50LmRlbHRhWSB8fCAtZXYub3JpZ2luYWxFdmVudC5kZXRhaWw7XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBpZiAoZGVsdGEgPCAwKSB7XG4gICAgICAgICAgICBkb3duT25jZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cE9uY2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2JpbmRFdmVudHNJbnRlcmZhY2UoKSB7XG4gICAgICAgIG9yaWdpbmFsaW5wdXQub24oJ3RvdWNoc3Bpbi5kZXN0cm95JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF9kZXN0cm95KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcmlnaW5hbGlucHV0Lm9uKCd0b3VjaHNwaW4udXBvbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHN0b3BTcGluKCk7XG4gICAgICAgICAgdXBPbmNlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcmlnaW5hbGlucHV0Lm9uKCd0b3VjaHNwaW4uZG93bm9uY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgICBkb3duT25jZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgb3JpZ2luYWxpbnB1dC5vbigndG91Y2hzcGluLnN0YXJ0dXBzcGluJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHN0YXJ0VXBTcGluKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcmlnaW5hbGlucHV0Lm9uKCd0b3VjaHNwaW4uc3RhcnRkb3duc3BpbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzdGFydERvd25TcGluKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcmlnaW5hbGlucHV0Lm9uKCd0b3VjaHNwaW4uc3RvcHNwaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9yaWdpbmFsaW5wdXQub24oJ3RvdWNoc3Bpbi51cGRhdGVzZXR0aW5ncycsIGZ1bmN0aW9uIChlLCBuZXdzZXR0aW5ncykge1xuICAgICAgICAgIGNoYW5nZVNldHRpbmdzKG5ld3NldHRpbmdzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfc2V0dXBNdXRhdGlvbk9ic2VydmVycygpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIC8vIE11dGF0aW9uT2JzZXJ2ZXIgaXMgYXZhaWxhYmxlXG4gICAgICAgICAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuICAgICAgICAgICAgbXV0YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICAgICAgICAgIGlmIChtdXRhdGlvbi50eXBlID09PSAnYXR0cmlidXRlcycgJiYgKG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUgPT09ICdkaXNhYmxlZCcgfHwgbXV0YXRpb24uYXR0cmlidXRlTmFtZSA9PT0gJ3JlYWRvbmx5JykpIHtcbiAgICAgICAgICAgICAgICBfdXBkYXRlQnV0dG9uRGlzYWJsZWRTdGF0ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKG9yaWdpbmFsaW5wdXRbMF0sIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2ZvcmNlc3RlcGRpdmlzaWJpbGl0eSh2YWx1ZSkge1xuICAgICAgICBzd2l0Y2ggKHNldHRpbmdzLmZvcmNlc3RlcGRpdmlzaWJpbGl0eSkge1xuICAgICAgICAgIGNhc2UgJ3JvdW5kJzpcbiAgICAgICAgICAgIHJldHVybiAoTWF0aC5yb3VuZCh2YWx1ZSAvIHNldHRpbmdzLnN0ZXApICogc2V0dGluZ3Muc3RlcCkudG9GaXhlZChzZXR0aW5ncy5kZWNpbWFscyk7XG4gICAgICAgICAgY2FzZSAnZmxvb3InOlxuICAgICAgICAgICAgcmV0dXJuIChNYXRoLmZsb29yKHZhbHVlIC8gc2V0dGluZ3Muc3RlcCkgKiBzZXR0aW5ncy5zdGVwKS50b0ZpeGVkKHNldHRpbmdzLmRlY2ltYWxzKTtcbiAgICAgICAgICBjYXNlICdjZWlsJzpcbiAgICAgICAgICAgIHJldHVybiAoTWF0aC5jZWlsKHZhbHVlIC8gc2V0dGluZ3Muc3RlcCkgKiBzZXR0aW5ncy5zdGVwKS50b0ZpeGVkKHNldHRpbmdzLmRlY2ltYWxzKTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvRml4ZWQoc2V0dGluZ3MuZGVjaW1hbHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfY2hlY2tWYWx1ZSgpIHtcbiAgICAgICAgdmFyIHZhbCwgcGFyc2VkdmFsLCByZXR1cm52YWw7XG4gICAgICAgIHZhbCA9IHNldHRpbmdzLmNhbGxiYWNrX2JlZm9yZV9jYWxjdWxhdGlvbihvcmlnaW5hbGlucHV0LnZhbCgpKTtcbiAgICAgICAgaWYgKHZhbCA9PT0gJycpIHtcbiAgICAgICAgICBpZiAoc2V0dGluZ3MucmVwbGFjZW1lbnR2YWwgIT09ICcnKSB7XG4gICAgICAgICAgICBvcmlnaW5hbGlucHV0LnZhbChzZXR0aW5ncy5yZXBsYWNlbWVudHZhbCk7XG4gICAgICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNldHRpbmdzLmRlY2ltYWxzID4gMCAmJiB2YWwgPT09ICcuJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwYXJzZWR2YWwgPSBwYXJzZUZsb2F0KHZhbCk7XG4gICAgICAgIGlmIChpc05hTihwYXJzZWR2YWwpKSB7XG4gICAgICAgICAgaWYgKHNldHRpbmdzLnJlcGxhY2VtZW50dmFsICE9PSAnJykge1xuICAgICAgICAgICAgcGFyc2VkdmFsID0gc2V0dGluZ3MucmVwbGFjZW1lbnR2YWw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlZHZhbCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybnZhbCA9IHBhcnNlZHZhbDtcbiAgICAgICAgaWYgKHBhcnNlZHZhbC50b1N0cmluZygpICE9PSB2YWwpIHtcbiAgICAgICAgICByZXR1cm52YWwgPSBwYXJzZWR2YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJudmFsID0gX2ZvcmNlc3RlcGRpdmlzaWJpbGl0eShwYXJzZWR2YWwpO1xuICAgICAgICBpZiAoc2V0dGluZ3MubWluICE9PSBudWxsICYmIHBhcnNlZHZhbCA8IHNldHRpbmdzLm1pbikge1xuICAgICAgICAgIHJldHVybnZhbCA9IHNldHRpbmdzLm1pbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2V0dGluZ3MubWF4ICE9PSBudWxsICYmIHBhcnNlZHZhbCA+IHNldHRpbmdzLm1heCkge1xuICAgICAgICAgIHJldHVybnZhbCA9IHNldHRpbmdzLm1heDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VGbG9hdChwYXJzZWR2YWwpLnRvU3RyaW5nKCkgIT09IHBhcnNlRmxvYXQocmV0dXJudmFsKS50b1N0cmluZygpKSB7XG4gICAgICAgICAgb3JpZ2luYWxpbnB1dC52YWwocmV0dXJudmFsKTtcbiAgICAgICAgfVxuICAgICAgICBvcmlnaW5hbGlucHV0LnZhbChzZXR0aW5ncy5jYWxsYmFja19hZnRlcl9jYWxjdWxhdGlvbihwYXJzZUZsb2F0KHJldHVybnZhbCkudG9GaXhlZChzZXR0aW5ncy5kZWNpbWFscykpKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9nZXRCb29zdGVkU3RlcCgpIHtcbiAgICAgICAgaWYgKCFzZXR0aW5ncy5ib29zdGVyKSB7XG4gICAgICAgICAgcmV0dXJuIHNldHRpbmdzLnN0ZXA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGJvb3N0ZWQgPSBNYXRoLnBvdygyLCBNYXRoLmZsb29yKHNwaW5jb3VudCAvIHNldHRpbmdzLmJvb3N0YXQpKSAqIHNldHRpbmdzLnN0ZXA7XG4gICAgICAgICAgaWYgKHNldHRpbmdzLm1heGJvb3N0ZWRzdGVwKSB7XG4gICAgICAgICAgICBpZiAoYm9vc3RlZCA+IHNldHRpbmdzLm1heGJvb3N0ZWRzdGVwKSB7XG4gICAgICAgICAgICAgIGJvb3N0ZWQgPSBzZXR0aW5ncy5tYXhib29zdGVkc3RlcDtcbiAgICAgICAgICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gYm9vc3RlZCkgKiBib29zdGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoc2V0dGluZ3Muc3RlcCwgYm9vc3RlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHZhbHVlSWZJc05hTigpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXR0aW5ncy5maXJzdGNsaWNrdmFsdWVpZmVtcHR5ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHJldHVybiBzZXR0aW5ncy5maXJzdGNsaWNrdmFsdWVpZmVtcHR5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAoc2V0dGluZ3MubWluICsgc2V0dGluZ3MubWF4KSAvIDI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF91cGRhdGVCdXR0b25EaXNhYmxlZFN0YXRlKCkge1xuICAgICAgICB2YXIgaXNEaXNhYmxlZCA9IG9yaWdpbmFsaW5wdXQuaXMoJzpkaXNhYmxlZCxbcmVhZG9ubHldJyk7XG4gICAgICAgIGVsZW1lbnRzLnVwLnByb3AoJ2Rpc2FibGVkJywgaXNEaXNhYmxlZCk7XG4gICAgICAgIGVsZW1lbnRzLmRvd24ucHJvcCgnZGlzYWJsZWQnLCBpc0Rpc2FibGVkKTtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgICAgICBzdG9wU3BpbigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB1cE9uY2UoKSB7XG4gICAgICAgIGlmIChvcmlnaW5hbGlucHV0LmlzKCc6ZGlzYWJsZWQsW3JlYWRvbmx5XScpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIF9jaGVja1ZhbHVlKCk7XG4gICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdChzZXR0aW5ncy5jYWxsYmFja19iZWZvcmVfY2FsY3VsYXRpb24oZWxlbWVudHMuaW5wdXQudmFsKCkpKTtcbiAgICAgICAgdmFyIGluaXR2YWx1ZSA9IHZhbHVlO1xuICAgICAgICB2YXIgYm9vc3RlZHN0ZXA7XG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlSWZJc05hTigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvb3N0ZWRzdGVwID0gX2dldEJvb3N0ZWRTdGVwKCk7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSArIGJvb3N0ZWRzdGVwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXR0aW5ncy5tYXggIT09IG51bGwgJiYgdmFsdWUgPj0gc2V0dGluZ3MubWF4KSB7XG4gICAgICAgICAgdmFsdWUgPSBzZXR0aW5ncy5tYXg7XG4gICAgICAgICAgb3JpZ2luYWxpbnB1dC50cmlnZ2VyKCd0b3VjaHNwaW4ub24ubWF4Jyk7XG4gICAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50cy5pbnB1dC52YWwoc2V0dGluZ3MuY2FsbGJhY2tfYWZ0ZXJfY2FsY3VsYXRpb24ocGFyc2VGbG9hdCh2YWx1ZSkudG9GaXhlZChzZXR0aW5ncy5kZWNpbWFscykpKTtcbiAgICAgICAgaWYgKGluaXR2YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBkb3duT25jZSgpIHtcbiAgICAgICAgaWYgKG9yaWdpbmFsaW5wdXQuaXMoJzpkaXNhYmxlZCxbcmVhZG9ubHldJykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgX2NoZWNrVmFsdWUoKTtcbiAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHNldHRpbmdzLmNhbGxiYWNrX2JlZm9yZV9jYWxjdWxhdGlvbihlbGVtZW50cy5pbnB1dC52YWwoKSkpO1xuICAgICAgICB2YXIgaW5pdHZhbHVlID0gdmFsdWU7XG4gICAgICAgIHZhciBib29zdGVkc3RlcDtcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWVJZklzTmFOKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYm9vc3RlZHN0ZXAgPSBfZ2V0Qm9vc3RlZFN0ZXAoKTtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC0gYm9vc3RlZHN0ZXA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNldHRpbmdzLm1pbiAhPT0gbnVsbCAmJiB2YWx1ZSA8PSBzZXR0aW5ncy5taW4pIHtcbiAgICAgICAgICB2YWx1ZSA9IHNldHRpbmdzLm1pbjtcbiAgICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ3RvdWNoc3Bpbi5vbi5taW4nKTtcbiAgICAgICAgICBzdG9wU3BpbigpO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnRzLmlucHV0LnZhbChzZXR0aW5ncy5jYWxsYmFja19hZnRlcl9jYWxjdWxhdGlvbihwYXJzZUZsb2F0KHZhbHVlKS50b0ZpeGVkKHNldHRpbmdzLmRlY2ltYWxzKSkpO1xuICAgICAgICBpZiAoaW5pdHZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICAgIG9yaWdpbmFsaW5wdXQudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHN0YXJ0RG93blNwaW4oKSB7XG4gICAgICAgIGlmIChvcmlnaW5hbGlucHV0LmlzKCc6ZGlzYWJsZWQsW3JlYWRvbmx5XScpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN0b3BTcGluKCk7XG4gICAgICAgIHNwaW5jb3VudCA9IDA7XG4gICAgICAgIHNwaW5uaW5nID0gJ2Rvd24nO1xuICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ3RvdWNoc3Bpbi5vbi5zdGFydHNwaW4nKTtcbiAgICAgICAgb3JpZ2luYWxpbnB1dC50cmlnZ2VyKCd0b3VjaHNwaW4ub24uc3RhcnRkb3duc3BpbicpO1xuICAgICAgICBkb3duRGVsYXlUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZG93blNwaW5UaW1lciA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNwaW5jb3VudCsrO1xuICAgICAgICAgICAgZG93bk9uY2UoKTtcbiAgICAgICAgICB9LCBzZXR0aW5ncy5zdGVwaW50ZXJ2YWwpO1xuICAgICAgICB9LCBzZXR0aW5ncy5zdGVwaW50ZXJ2YWxkZWxheSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBzdGFydFVwU3BpbigpIHtcbiAgICAgICAgaWYgKG9yaWdpbmFsaW5wdXQuaXMoJzpkaXNhYmxlZCxbcmVhZG9ubHldJykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgc3BpbmNvdW50ID0gMDtcbiAgICAgICAgc3Bpbm5pbmcgPSAndXAnO1xuICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ3RvdWNoc3Bpbi5vbi5zdGFydHNwaW4nKTtcbiAgICAgICAgb3JpZ2luYWxpbnB1dC50cmlnZ2VyKCd0b3VjaHNwaW4ub24uc3RhcnR1cHNwaW4nKTtcbiAgICAgICAgdXBEZWxheVRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB1cFNwaW5UaW1lciA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNwaW5jb3VudCsrO1xuICAgICAgICAgICAgdXBPbmNlKCk7XG4gICAgICAgICAgfSwgc2V0dGluZ3Muc3RlcGludGVydmFsKTtcbiAgICAgICAgfSwgc2V0dGluZ3Muc3RlcGludGVydmFsZGVsYXkpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gc3RvcFNwaW4oKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChkb3duRGVsYXlUaW1lb3V0KTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHVwRGVsYXlUaW1lb3V0KTtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChkb3duU3BpblRpbWVyKTtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh1cFNwaW5UaW1lcik7XG4gICAgICAgIHN3aXRjaCAoc3Bpbm5pbmcpIHtcbiAgICAgICAgICBjYXNlICd1cCc6XG4gICAgICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ3RvdWNoc3Bpbi5vbi5zdG9wdXBzcGluJyk7XG4gICAgICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ3RvdWNoc3Bpbi5vbi5zdG9wc3BpbicpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ3RvdWNoc3Bpbi5vbi5zdG9wZG93bnNwaW4nKTtcbiAgICAgICAgICAgIG9yaWdpbmFsaW5wdXQudHJpZ2dlcigndG91Y2hzcGluLm9uLnN0b3BzcGluJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzcGluY291bnQgPSAwO1xuICAgICAgICBzcGlubmluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1qcXVlcnkuYm9vdHN0cmFwLXRvdWNoc3Bpbi5qcy5tYXBcbiIsIi8qIVxuICogQGZpbGVPdmVydmlldyBUb3VjaFN3aXBlIC0galF1ZXJ5IFBsdWdpblxuICogQHZlcnNpb24gMS42LjE4XG4gKlxuICogQGF1dGhvciBNYXR0IEJyeXNvbiBodHRwOi8vd3d3LmdpdGh1Yi5jb20vbWF0dGJyeXNvblxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWF0dGJyeXNvbi9Ub3VjaFN3aXBlLUpxdWVyeS1QbHVnaW5cbiAqIEBzZWUgaHR0cDovL2xhYnMucmFtcGludGVyYWN0aXZlLmNvLnVrL3RvdWNoU3dpcGUvXG4gKiBAc2VlIGh0dHA6Ly9wbHVnaW5zLmpxdWVyeS5jb20vcHJvamVjdC90b3VjaFN3aXBlXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTUgTWF0dCBCcnlzb25cbiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLlxuICpcbiAqL1xuIWZ1bmN0aW9uKGZhY3Rvcnkpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lLmFtZC5qUXVlcnk/ZGVmaW5lKFtcImpxdWVyeVwiXSxmYWN0b3J5KTpmYWN0b3J5KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzP3JlcXVpcmUoXCJqcXVlcnlcIik6alF1ZXJ5KX0oZnVuY3Rpb24oJCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gaW5pdChvcHRpb25zKXtyZXR1cm4hb3B0aW9uc3x8dm9pZCAwIT09b3B0aW9ucy5hbGxvd1BhZ2VTY3JvbGx8fHZvaWQgMD09PW9wdGlvbnMuc3dpcGUmJnZvaWQgMD09PW9wdGlvbnMuc3dpcGVTdGF0dXN8fChvcHRpb25zLmFsbG93UGFnZVNjcm9sbD1OT05FKSx2b2lkIDAhPT1vcHRpb25zLmNsaWNrJiZ2b2lkIDA9PT1vcHRpb25zLnRhcCYmKG9wdGlvbnMudGFwPW9wdGlvbnMuY2xpY2spLG9wdGlvbnN8fChvcHRpb25zPXt9KSxvcHRpb25zPSQuZXh0ZW5kKHt9LCQuZm4uc3dpcGUuZGVmYXVsdHMsb3B0aW9ucyksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyICR0aGlzPSQodGhpcykscGx1Z2luPSR0aGlzLmRhdGEoUExVR0lOX05TKTtwbHVnaW58fChwbHVnaW49bmV3IFRvdWNoU3dpcGUodGhpcyxvcHRpb25zKSwkdGhpcy5kYXRhKFBMVUdJTl9OUyxwbHVnaW4pKX0pfWZ1bmN0aW9uIFRvdWNoU3dpcGUoZWxlbWVudCxvcHRpb25zKXtmdW5jdGlvbiB0b3VjaFN0YXJ0KGpxRXZlbnQpe2lmKCEoZ2V0VG91Y2hJblByb2dyZXNzKCl8fCQoanFFdmVudC50YXJnZXQpLmNsb3Nlc3Qob3B0aW9ucy5leGNsdWRlZEVsZW1lbnRzLCRlbGVtZW50KS5sZW5ndGg+MCkpe3ZhciBldmVudD1qcUV2ZW50Lm9yaWdpbmFsRXZlbnQ/anFFdmVudC5vcmlnaW5hbEV2ZW50OmpxRXZlbnQ7aWYoIWV2ZW50LnBvaW50ZXJUeXBlfHxcIm1vdXNlXCIhPWV2ZW50LnBvaW50ZXJUeXBlfHwwIT1vcHRpb25zLmZhbGxiYWNrVG9Nb3VzZUV2ZW50cyl7dmFyIHJldCx0b3VjaGVzPWV2ZW50LnRvdWNoZXMsZXZ0PXRvdWNoZXM/dG91Y2hlc1swXTpldmVudDtyZXR1cm4gcGhhc2U9UEhBU0VfU1RBUlQsdG91Y2hlcz9maW5nZXJDb3VudD10b3VjaGVzLmxlbmd0aDpvcHRpb25zLnByZXZlbnREZWZhdWx0RXZlbnRzIT09ITEmJmpxRXZlbnQucHJldmVudERlZmF1bHQoKSxkaXN0YW5jZT0wLGRpcmVjdGlvbj1udWxsLGN1cnJlbnREaXJlY3Rpb249bnVsbCxwaW5jaERpcmVjdGlvbj1udWxsLGR1cmF0aW9uPTAsc3RhcnRUb3VjaGVzRGlzdGFuY2U9MCxlbmRUb3VjaGVzRGlzdGFuY2U9MCxwaW5jaFpvb209MSxwaW5jaERpc3RhbmNlPTAsbWF4aW11bXNNYXA9Y3JlYXRlTWF4aW11bXNEYXRhKCksY2FuY2VsTXVsdGlGaW5nZXJSZWxlYXNlKCksY3JlYXRlRmluZ2VyRGF0YSgwLGV2dCksIXRvdWNoZXN8fGZpbmdlckNvdW50PT09b3B0aW9ucy5maW5nZXJzfHxvcHRpb25zLmZpbmdlcnM9PT1BTExfRklOR0VSU3x8aGFzUGluY2hlcygpPyhzdGFydFRpbWU9Z2V0VGltZVN0YW1wKCksMj09ZmluZ2VyQ291bnQmJihjcmVhdGVGaW5nZXJEYXRhKDEsdG91Y2hlc1sxXSksc3RhcnRUb3VjaGVzRGlzdGFuY2U9ZW5kVG91Y2hlc0Rpc3RhbmNlPWNhbGN1bGF0ZVRvdWNoZXNEaXN0YW5jZShmaW5nZXJEYXRhWzBdLnN0YXJ0LGZpbmdlckRhdGFbMV0uc3RhcnQpKSwob3B0aW9ucy5zd2lwZVN0YXR1c3x8b3B0aW9ucy5waW5jaFN0YXR1cykmJihyZXQ9dHJpZ2dlckhhbmRsZXIoZXZlbnQscGhhc2UpKSk6cmV0PSExLHJldD09PSExPyhwaGFzZT1QSEFTRV9DQU5DRUwsdHJpZ2dlckhhbmRsZXIoZXZlbnQscGhhc2UpLHJldCk6KG9wdGlvbnMuaG9sZCYmKGhvbGRUaW1lb3V0PXNldFRpbWVvdXQoJC5wcm94eShmdW5jdGlvbigpeyRlbGVtZW50LnRyaWdnZXIoXCJob2xkXCIsW2V2ZW50LnRhcmdldF0pLG9wdGlvbnMuaG9sZCYmKHJldD1vcHRpb25zLmhvbGQuY2FsbCgkZWxlbWVudCxldmVudCxldmVudC50YXJnZXQpKX0sdGhpcyksb3B0aW9ucy5sb25nVGFwVGhyZXNob2xkKSksc2V0VG91Y2hJblByb2dyZXNzKCEwKSxudWxsKX19fWZ1bmN0aW9uIHRvdWNoTW92ZShqcUV2ZW50KXt2YXIgZXZlbnQ9anFFdmVudC5vcmlnaW5hbEV2ZW50P2pxRXZlbnQub3JpZ2luYWxFdmVudDpqcUV2ZW50O2lmKHBoYXNlIT09UEhBU0VfRU5EJiZwaGFzZSE9PVBIQVNFX0NBTkNFTCYmIWluTXVsdGlGaW5nZXJSZWxlYXNlKCkpe3ZhciByZXQsdG91Y2hlcz1ldmVudC50b3VjaGVzLGV2dD10b3VjaGVzP3RvdWNoZXNbMF06ZXZlbnQsY3VycmVudEZpbmdlcj11cGRhdGVGaW5nZXJEYXRhKGV2dCk7aWYoZW5kVGltZT1nZXRUaW1lU3RhbXAoKSx0b3VjaGVzJiYoZmluZ2VyQ291bnQ9dG91Y2hlcy5sZW5ndGgpLG9wdGlvbnMuaG9sZCYmY2xlYXJUaW1lb3V0KGhvbGRUaW1lb3V0KSxwaGFzZT1QSEFTRV9NT1ZFLDI9PWZpbmdlckNvdW50JiYoMD09c3RhcnRUb3VjaGVzRGlzdGFuY2U/KGNyZWF0ZUZpbmdlckRhdGEoMSx0b3VjaGVzWzFdKSxzdGFydFRvdWNoZXNEaXN0YW5jZT1lbmRUb3VjaGVzRGlzdGFuY2U9Y2FsY3VsYXRlVG91Y2hlc0Rpc3RhbmNlKGZpbmdlckRhdGFbMF0uc3RhcnQsZmluZ2VyRGF0YVsxXS5zdGFydCkpOih1cGRhdGVGaW5nZXJEYXRhKHRvdWNoZXNbMV0pLGVuZFRvdWNoZXNEaXN0YW5jZT1jYWxjdWxhdGVUb3VjaGVzRGlzdGFuY2UoZmluZ2VyRGF0YVswXS5lbmQsZmluZ2VyRGF0YVsxXS5lbmQpLHBpbmNoRGlyZWN0aW9uPWNhbGN1bGF0ZVBpbmNoRGlyZWN0aW9uKGZpbmdlckRhdGFbMF0uZW5kLGZpbmdlckRhdGFbMV0uZW5kKSkscGluY2hab29tPWNhbGN1bGF0ZVBpbmNoWm9vbShzdGFydFRvdWNoZXNEaXN0YW5jZSxlbmRUb3VjaGVzRGlzdGFuY2UpLHBpbmNoRGlzdGFuY2U9TWF0aC5hYnMoc3RhcnRUb3VjaGVzRGlzdGFuY2UtZW5kVG91Y2hlc0Rpc3RhbmNlKSksZmluZ2VyQ291bnQ9PT1vcHRpb25zLmZpbmdlcnN8fG9wdGlvbnMuZmluZ2Vycz09PUFMTF9GSU5HRVJTfHwhdG91Y2hlc3x8aGFzUGluY2hlcygpKXtpZihkaXJlY3Rpb249Y2FsY3VsYXRlRGlyZWN0aW9uKGN1cnJlbnRGaW5nZXIuc3RhcnQsY3VycmVudEZpbmdlci5lbmQpLGN1cnJlbnREaXJlY3Rpb249Y2FsY3VsYXRlRGlyZWN0aW9uKGN1cnJlbnRGaW5nZXIubGFzdCxjdXJyZW50RmluZ2VyLmVuZCksdmFsaWRhdGVEZWZhdWx0RXZlbnQoanFFdmVudCxjdXJyZW50RGlyZWN0aW9uKSxkaXN0YW5jZT1jYWxjdWxhdGVEaXN0YW5jZShjdXJyZW50RmluZ2VyLnN0YXJ0LGN1cnJlbnRGaW5nZXIuZW5kKSxkdXJhdGlvbj1jYWxjdWxhdGVEdXJhdGlvbigpLHNldE1heERpc3RhbmNlKGRpcmVjdGlvbixkaXN0YW5jZSkscmV0PXRyaWdnZXJIYW5kbGVyKGV2ZW50LHBoYXNlKSwhb3B0aW9ucy50cmlnZ2VyT25Ub3VjaEVuZHx8b3B0aW9ucy50cmlnZ2VyT25Ub3VjaExlYXZlKXt2YXIgaW5Cb3VuZHM9ITA7aWYob3B0aW9ucy50cmlnZ2VyT25Ub3VjaExlYXZlKXt2YXIgYm91bmRzPWdldGJvdW5kcyh0aGlzKTtpbkJvdW5kcz1pc0luQm91bmRzKGN1cnJlbnRGaW5nZXIuZW5kLGJvdW5kcyl9IW9wdGlvbnMudHJpZ2dlck9uVG91Y2hFbmQmJmluQm91bmRzP3BoYXNlPWdldE5leHRQaGFzZShQSEFTRV9NT1ZFKTpvcHRpb25zLnRyaWdnZXJPblRvdWNoTGVhdmUmJiFpbkJvdW5kcyYmKHBoYXNlPWdldE5leHRQaGFzZShQSEFTRV9FTkQpKSxwaGFzZSE9UEhBU0VfQ0FOQ0VMJiZwaGFzZSE9UEhBU0VfRU5EfHx0cmlnZ2VySGFuZGxlcihldmVudCxwaGFzZSl9fWVsc2UgcGhhc2U9UEhBU0VfQ0FOQ0VMLHRyaWdnZXJIYW5kbGVyKGV2ZW50LHBoYXNlKTtyZXQ9PT0hMSYmKHBoYXNlPVBIQVNFX0NBTkNFTCx0cmlnZ2VySGFuZGxlcihldmVudCxwaGFzZSkpfX1mdW5jdGlvbiB0b3VjaEVuZChqcUV2ZW50KXt2YXIgZXZlbnQ9anFFdmVudC5vcmlnaW5hbEV2ZW50P2pxRXZlbnQub3JpZ2luYWxFdmVudDpqcUV2ZW50LHRvdWNoZXM9ZXZlbnQudG91Y2hlcztpZih0b3VjaGVzKXtpZih0b3VjaGVzLmxlbmd0aCYmIWluTXVsdGlGaW5nZXJSZWxlYXNlKCkpcmV0dXJuIHN0YXJ0TXVsdGlGaW5nZXJSZWxlYXNlKGV2ZW50KSwhMDtpZih0b3VjaGVzLmxlbmd0aCYmaW5NdWx0aUZpbmdlclJlbGVhc2UoKSlyZXR1cm4hMH1yZXR1cm4gaW5NdWx0aUZpbmdlclJlbGVhc2UoKSYmKGZpbmdlckNvdW50PWZpbmdlckNvdW50QXRSZWxlYXNlKSxlbmRUaW1lPWdldFRpbWVTdGFtcCgpLGR1cmF0aW9uPWNhbGN1bGF0ZUR1cmF0aW9uKCksZGlkU3dpcGVCYWNrVG9DYW5jZWwoKXx8IXZhbGlkYXRlU3dpcGVEaXN0YW5jZSgpPyhwaGFzZT1QSEFTRV9DQU5DRUwsdHJpZ2dlckhhbmRsZXIoZXZlbnQscGhhc2UpKTpvcHRpb25zLnRyaWdnZXJPblRvdWNoRW5kfHxvcHRpb25zLnRyaWdnZXJPblRvdWNoRW5kPT09ITEmJnBoYXNlPT09UEhBU0VfTU9WRT8ob3B0aW9ucy5wcmV2ZW50RGVmYXVsdEV2ZW50cyE9PSExJiZqcUV2ZW50LmNhbmNlbGFibGUhPT0hMSYmanFFdmVudC5wcmV2ZW50RGVmYXVsdCgpLHBoYXNlPVBIQVNFX0VORCx0cmlnZ2VySGFuZGxlcihldmVudCxwaGFzZSkpOiFvcHRpb25zLnRyaWdnZXJPblRvdWNoRW5kJiZoYXNUYXAoKT8ocGhhc2U9UEhBU0VfRU5ELHRyaWdnZXJIYW5kbGVyRm9yR2VzdHVyZShldmVudCxwaGFzZSxUQVApKTpwaGFzZT09PVBIQVNFX01PVkUmJihwaGFzZT1QSEFTRV9DQU5DRUwsdHJpZ2dlckhhbmRsZXIoZXZlbnQscGhhc2UpKSxzZXRUb3VjaEluUHJvZ3Jlc3MoITEpLG51bGx9ZnVuY3Rpb24gdG91Y2hDYW5jZWwoKXtmaW5nZXJDb3VudD0wLGVuZFRpbWU9MCxzdGFydFRpbWU9MCxzdGFydFRvdWNoZXNEaXN0YW5jZT0wLGVuZFRvdWNoZXNEaXN0YW5jZT0wLHBpbmNoWm9vbT0xLGNhbmNlbE11bHRpRmluZ2VyUmVsZWFzZSgpLHNldFRvdWNoSW5Qcm9ncmVzcyghMSl9ZnVuY3Rpb24gdG91Y2hMZWF2ZShqcUV2ZW50KXt2YXIgZXZlbnQ9anFFdmVudC5vcmlnaW5hbEV2ZW50P2pxRXZlbnQub3JpZ2luYWxFdmVudDpqcUV2ZW50O29wdGlvbnMudHJpZ2dlck9uVG91Y2hMZWF2ZSYmKHBoYXNlPWdldE5leHRQaGFzZShQSEFTRV9FTkQpLHRyaWdnZXJIYW5kbGVyKGV2ZW50LHBoYXNlKSl9ZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXJzKCl7JGVsZW1lbnQub2ZmKFNUQVJUX0VWLHRvdWNoU3RhcnQpLCRlbGVtZW50Lm9mZihDQU5DRUxfRVYsdG91Y2hDYW5jZWwpLCRlbGVtZW50Lm9mZihNT1ZFX0VWLHRvdWNoTW92ZSksJGVsZW1lbnQub2ZmKEVORF9FVix0b3VjaEVuZCksTEVBVkVfRVYmJiRlbGVtZW50Lm9mZihMRUFWRV9FVix0b3VjaExlYXZlKSxzZXRUb3VjaEluUHJvZ3Jlc3MoITEpfWZ1bmN0aW9uIGdldE5leHRQaGFzZShjdXJyZW50UGhhc2Upe3ZhciBuZXh0UGhhc2U9Y3VycmVudFBoYXNlLHZhbGlkVGltZT12YWxpZGF0ZVN3aXBlVGltZSgpLHZhbGlkRGlzdGFuY2U9dmFsaWRhdGVTd2lwZURpc3RhbmNlKCksZGlkQ2FuY2VsPWRpZFN3aXBlQmFja1RvQ2FuY2VsKCk7cmV0dXJuIXZhbGlkVGltZXx8ZGlkQ2FuY2VsP25leHRQaGFzZT1QSEFTRV9DQU5DRUw6IXZhbGlkRGlzdGFuY2V8fGN1cnJlbnRQaGFzZSE9UEhBU0VfTU9WRXx8b3B0aW9ucy50cmlnZ2VyT25Ub3VjaEVuZCYmIW9wdGlvbnMudHJpZ2dlck9uVG91Y2hMZWF2ZT8hdmFsaWREaXN0YW5jZSYmY3VycmVudFBoYXNlPT1QSEFTRV9FTkQmJm9wdGlvbnMudHJpZ2dlck9uVG91Y2hMZWF2ZSYmKG5leHRQaGFzZT1QSEFTRV9DQU5DRUwpOm5leHRQaGFzZT1QSEFTRV9FTkQsbmV4dFBoYXNlfWZ1bmN0aW9uIHRyaWdnZXJIYW5kbGVyKGV2ZW50LHBoYXNlKXt2YXIgcmV0LHRvdWNoZXM9ZXZlbnQudG91Y2hlcztyZXR1cm4oZGlkU3dpcGUoKXx8aGFzU3dpcGVzKCkpJiYocmV0PXRyaWdnZXJIYW5kbGVyRm9yR2VzdHVyZShldmVudCxwaGFzZSxTV0lQRSkpLChkaWRQaW5jaCgpfHxoYXNQaW5jaGVzKCkpJiZyZXQhPT0hMSYmKHJldD10cmlnZ2VySGFuZGxlckZvckdlc3R1cmUoZXZlbnQscGhhc2UsUElOQ0gpKSxkaWREb3VibGVUYXAoKSYmcmV0IT09ITE/cmV0PXRyaWdnZXJIYW5kbGVyRm9yR2VzdHVyZShldmVudCxwaGFzZSxET1VCTEVfVEFQKTpkaWRMb25nVGFwKCkmJnJldCE9PSExP3JldD10cmlnZ2VySGFuZGxlckZvckdlc3R1cmUoZXZlbnQscGhhc2UsTE9OR19UQVApOmRpZFRhcCgpJiZyZXQhPT0hMSYmKHJldD10cmlnZ2VySGFuZGxlckZvckdlc3R1cmUoZXZlbnQscGhhc2UsVEFQKSkscGhhc2U9PT1QSEFTRV9DQU5DRUwmJnRvdWNoQ2FuY2VsKGV2ZW50KSxwaGFzZT09PVBIQVNFX0VORCYmKHRvdWNoZXM/dG91Y2hlcy5sZW5ndGh8fHRvdWNoQ2FuY2VsKGV2ZW50KTp0b3VjaENhbmNlbChldmVudCkpLHJldH1mdW5jdGlvbiB0cmlnZ2VySGFuZGxlckZvckdlc3R1cmUoZXZlbnQscGhhc2UsZ2VzdHVyZSl7dmFyIHJldDtpZihnZXN0dXJlPT1TV0lQRSl7aWYoJGVsZW1lbnQudHJpZ2dlcihcInN3aXBlU3RhdHVzXCIsW3BoYXNlLGRpcmVjdGlvbnx8bnVsbCxkaXN0YW5jZXx8MCxkdXJhdGlvbnx8MCxmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb25dKSxvcHRpb25zLnN3aXBlU3RhdHVzJiYocmV0PW9wdGlvbnMuc3dpcGVTdGF0dXMuY2FsbCgkZWxlbWVudCxldmVudCxwaGFzZSxkaXJlY3Rpb258fG51bGwsZGlzdGFuY2V8fDAsZHVyYXRpb258fDAsZmluZ2VyQ291bnQsZmluZ2VyRGF0YSxjdXJyZW50RGlyZWN0aW9uKSxyZXQ9PT0hMSkpcmV0dXJuITE7aWYocGhhc2U9PVBIQVNFX0VORCYmdmFsaWRhdGVTd2lwZSgpKXtpZihjbGVhclRpbWVvdXQoc2luZ2xlVGFwVGltZW91dCksY2xlYXJUaW1lb3V0KGhvbGRUaW1lb3V0KSwkZWxlbWVudC50cmlnZ2VyKFwic3dpcGVcIixbZGlyZWN0aW9uLGRpc3RhbmNlLGR1cmF0aW9uLGZpbmdlckNvdW50LGZpbmdlckRhdGEsY3VycmVudERpcmVjdGlvbl0pLG9wdGlvbnMuc3dpcGUmJihyZXQ9b3B0aW9ucy5zd2lwZS5jYWxsKCRlbGVtZW50LGV2ZW50LGRpcmVjdGlvbixkaXN0YW5jZSxkdXJhdGlvbixmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb24pLHJldD09PSExKSlyZXR1cm4hMTtzd2l0Y2goZGlyZWN0aW9uKXtjYXNlIExFRlQ6JGVsZW1lbnQudHJpZ2dlcihcInN3aXBlTGVmdFwiLFtkaXJlY3Rpb24sZGlzdGFuY2UsZHVyYXRpb24sZmluZ2VyQ291bnQsZmluZ2VyRGF0YSxjdXJyZW50RGlyZWN0aW9uXSksb3B0aW9ucy5zd2lwZUxlZnQmJihyZXQ9b3B0aW9ucy5zd2lwZUxlZnQuY2FsbCgkZWxlbWVudCxldmVudCxkaXJlY3Rpb24sZGlzdGFuY2UsZHVyYXRpb24sZmluZ2VyQ291bnQsZmluZ2VyRGF0YSxjdXJyZW50RGlyZWN0aW9uKSk7YnJlYWs7Y2FzZSBSSUdIVDokZWxlbWVudC50cmlnZ2VyKFwic3dpcGVSaWdodFwiLFtkaXJlY3Rpb24sZGlzdGFuY2UsZHVyYXRpb24sZmluZ2VyQ291bnQsZmluZ2VyRGF0YSxjdXJyZW50RGlyZWN0aW9uXSksb3B0aW9ucy5zd2lwZVJpZ2h0JiYocmV0PW9wdGlvbnMuc3dpcGVSaWdodC5jYWxsKCRlbGVtZW50LGV2ZW50LGRpcmVjdGlvbixkaXN0YW5jZSxkdXJhdGlvbixmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb24pKTticmVhaztjYXNlIFVQOiRlbGVtZW50LnRyaWdnZXIoXCJzd2lwZVVwXCIsW2RpcmVjdGlvbixkaXN0YW5jZSxkdXJhdGlvbixmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb25dKSxvcHRpb25zLnN3aXBlVXAmJihyZXQ9b3B0aW9ucy5zd2lwZVVwLmNhbGwoJGVsZW1lbnQsZXZlbnQsZGlyZWN0aW9uLGRpc3RhbmNlLGR1cmF0aW9uLGZpbmdlckNvdW50LGZpbmdlckRhdGEsY3VycmVudERpcmVjdGlvbikpO2JyZWFrO2Nhc2UgRE9XTjokZWxlbWVudC50cmlnZ2VyKFwic3dpcGVEb3duXCIsW2RpcmVjdGlvbixkaXN0YW5jZSxkdXJhdGlvbixmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb25dKSxvcHRpb25zLnN3aXBlRG93biYmKHJldD1vcHRpb25zLnN3aXBlRG93bi5jYWxsKCRlbGVtZW50LGV2ZW50LGRpcmVjdGlvbixkaXN0YW5jZSxkdXJhdGlvbixmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb24pKX19fWlmKGdlc3R1cmU9PVBJTkNIKXtpZigkZWxlbWVudC50cmlnZ2VyKFwicGluY2hTdGF0dXNcIixbcGhhc2UscGluY2hEaXJlY3Rpb258fG51bGwscGluY2hEaXN0YW5jZXx8MCxkdXJhdGlvbnx8MCxmaW5nZXJDb3VudCxwaW5jaFpvb20sZmluZ2VyRGF0YV0pLG9wdGlvbnMucGluY2hTdGF0dXMmJihyZXQ9b3B0aW9ucy5waW5jaFN0YXR1cy5jYWxsKCRlbGVtZW50LGV2ZW50LHBoYXNlLHBpbmNoRGlyZWN0aW9ufHxudWxsLHBpbmNoRGlzdGFuY2V8fDAsZHVyYXRpb258fDAsZmluZ2VyQ291bnQscGluY2hab29tLGZpbmdlckRhdGEpLHJldD09PSExKSlyZXR1cm4hMTtpZihwaGFzZT09UEhBU0VfRU5EJiZ2YWxpZGF0ZVBpbmNoKCkpc3dpdGNoKHBpbmNoRGlyZWN0aW9uKXtjYXNlIElOOiRlbGVtZW50LnRyaWdnZXIoXCJwaW5jaEluXCIsW3BpbmNoRGlyZWN0aW9ufHxudWxsLHBpbmNoRGlzdGFuY2V8fDAsZHVyYXRpb258fDAsZmluZ2VyQ291bnQscGluY2hab29tLGZpbmdlckRhdGFdKSxvcHRpb25zLnBpbmNoSW4mJihyZXQ9b3B0aW9ucy5waW5jaEluLmNhbGwoJGVsZW1lbnQsZXZlbnQscGluY2hEaXJlY3Rpb258fG51bGwscGluY2hEaXN0YW5jZXx8MCxkdXJhdGlvbnx8MCxmaW5nZXJDb3VudCxwaW5jaFpvb20sZmluZ2VyRGF0YSkpO2JyZWFrO2Nhc2UgT1VUOiRlbGVtZW50LnRyaWdnZXIoXCJwaW5jaE91dFwiLFtwaW5jaERpcmVjdGlvbnx8bnVsbCxwaW5jaERpc3RhbmNlfHwwLGR1cmF0aW9ufHwwLGZpbmdlckNvdW50LHBpbmNoWm9vbSxmaW5nZXJEYXRhXSksb3B0aW9ucy5waW5jaE91dCYmKHJldD1vcHRpb25zLnBpbmNoT3V0LmNhbGwoJGVsZW1lbnQsZXZlbnQscGluY2hEaXJlY3Rpb258fG51bGwscGluY2hEaXN0YW5jZXx8MCxkdXJhdGlvbnx8MCxmaW5nZXJDb3VudCxwaW5jaFpvb20sZmluZ2VyRGF0YSkpfX1yZXR1cm4gZ2VzdHVyZT09VEFQP3BoYXNlIT09UEhBU0VfQ0FOQ0VMJiZwaGFzZSE9PVBIQVNFX0VORHx8KGNsZWFyVGltZW91dChzaW5nbGVUYXBUaW1lb3V0KSxjbGVhclRpbWVvdXQoaG9sZFRpbWVvdXQpLGhhc0RvdWJsZVRhcCgpJiYhaW5Eb3VibGVUYXAoKT8oZG91YmxlVGFwU3RhcnRUaW1lPWdldFRpbWVTdGFtcCgpLHNpbmdsZVRhcFRpbWVvdXQ9c2V0VGltZW91dCgkLnByb3h5KGZ1bmN0aW9uKCl7ZG91YmxlVGFwU3RhcnRUaW1lPW51bGwsJGVsZW1lbnQudHJpZ2dlcihcInRhcFwiLFtldmVudC50YXJnZXRdKSxvcHRpb25zLnRhcCYmKHJldD1vcHRpb25zLnRhcC5jYWxsKCRlbGVtZW50LGV2ZW50LGV2ZW50LnRhcmdldCkpfSx0aGlzKSxvcHRpb25zLmRvdWJsZVRhcFRocmVzaG9sZCkpOihkb3VibGVUYXBTdGFydFRpbWU9bnVsbCwkZWxlbWVudC50cmlnZ2VyKFwidGFwXCIsW2V2ZW50LnRhcmdldF0pLG9wdGlvbnMudGFwJiYocmV0PW9wdGlvbnMudGFwLmNhbGwoJGVsZW1lbnQsZXZlbnQsZXZlbnQudGFyZ2V0KSkpKTpnZXN0dXJlPT1ET1VCTEVfVEFQP3BoYXNlIT09UEhBU0VfQ0FOQ0VMJiZwaGFzZSE9PVBIQVNFX0VORHx8KGNsZWFyVGltZW91dChzaW5nbGVUYXBUaW1lb3V0KSxjbGVhclRpbWVvdXQoaG9sZFRpbWVvdXQpLGRvdWJsZVRhcFN0YXJ0VGltZT1udWxsLCRlbGVtZW50LnRyaWdnZXIoXCJkb3VibGV0YXBcIixbZXZlbnQudGFyZ2V0XSksb3B0aW9ucy5kb3VibGVUYXAmJihyZXQ9b3B0aW9ucy5kb3VibGVUYXAuY2FsbCgkZWxlbWVudCxldmVudCxldmVudC50YXJnZXQpKSk6Z2VzdHVyZT09TE9OR19UQVAmJihwaGFzZSE9PVBIQVNFX0NBTkNFTCYmcGhhc2UhPT1QSEFTRV9FTkR8fChjbGVhclRpbWVvdXQoc2luZ2xlVGFwVGltZW91dCksZG91YmxlVGFwU3RhcnRUaW1lPW51bGwsJGVsZW1lbnQudHJpZ2dlcihcImxvbmd0YXBcIixbZXZlbnQudGFyZ2V0XSksb3B0aW9ucy5sb25nVGFwJiYocmV0PW9wdGlvbnMubG9uZ1RhcC5jYWxsKCRlbGVtZW50LGV2ZW50LGV2ZW50LnRhcmdldCkpKSkscmV0fWZ1bmN0aW9uIHZhbGlkYXRlU3dpcGVEaXN0YW5jZSgpe3ZhciB2YWxpZD0hMDtyZXR1cm4gbnVsbCE9PW9wdGlvbnMudGhyZXNob2xkJiYodmFsaWQ9ZGlzdGFuY2U+PW9wdGlvbnMudGhyZXNob2xkKSx2YWxpZH1mdW5jdGlvbiBkaWRTd2lwZUJhY2tUb0NhbmNlbCgpe3ZhciBjYW5jZWxsZWQ9ITE7cmV0dXJuIG51bGwhPT1vcHRpb25zLmNhbmNlbFRocmVzaG9sZCYmbnVsbCE9PWRpcmVjdGlvbiYmKGNhbmNlbGxlZD1nZXRNYXhEaXN0YW5jZShkaXJlY3Rpb24pLWRpc3RhbmNlPj1vcHRpb25zLmNhbmNlbFRocmVzaG9sZCksY2FuY2VsbGVkfWZ1bmN0aW9uIHZhbGlkYXRlUGluY2hEaXN0YW5jZSgpe3JldHVybiBudWxsIT09b3B0aW9ucy5waW5jaFRocmVzaG9sZD9waW5jaERpc3RhbmNlPj1vcHRpb25zLnBpbmNoVGhyZXNob2xkOiEwfWZ1bmN0aW9uIHZhbGlkYXRlU3dpcGVUaW1lKCl7dmFyIHJlc3VsdDtyZXR1cm4gcmVzdWx0PW9wdGlvbnMubWF4VGltZVRocmVzaG9sZD8hKGR1cmF0aW9uPj1vcHRpb25zLm1heFRpbWVUaHJlc2hvbGQpOiEwfWZ1bmN0aW9uIHZhbGlkYXRlRGVmYXVsdEV2ZW50KGpxRXZlbnQsZGlyZWN0aW9uKXtpZihvcHRpb25zLnByZXZlbnREZWZhdWx0RXZlbnRzIT09ITEpaWYob3B0aW9ucy5hbGxvd1BhZ2VTY3JvbGw9PT1OT05FKWpxRXZlbnQucHJldmVudERlZmF1bHQoKTtlbHNle3ZhciBhdXRvPW9wdGlvbnMuYWxsb3dQYWdlU2Nyb2xsPT09QVVUTztzd2l0Y2goZGlyZWN0aW9uKXtjYXNlIExFRlQ6KG9wdGlvbnMuc3dpcGVMZWZ0JiZhdXRvfHwhYXV0byYmb3B0aW9ucy5hbGxvd1BhZ2VTY3JvbGwhPUhPUklaT05UQUwpJiZqcUV2ZW50LnByZXZlbnREZWZhdWx0KCk7YnJlYWs7Y2FzZSBSSUdIVDoob3B0aW9ucy5zd2lwZVJpZ2h0JiZhdXRvfHwhYXV0byYmb3B0aW9ucy5hbGxvd1BhZ2VTY3JvbGwhPUhPUklaT05UQUwpJiZqcUV2ZW50LnByZXZlbnREZWZhdWx0KCk7YnJlYWs7Y2FzZSBVUDoob3B0aW9ucy5zd2lwZVVwJiZhdXRvfHwhYXV0byYmb3B0aW9ucy5hbGxvd1BhZ2VTY3JvbGwhPVZFUlRJQ0FMKSYmanFFdmVudC5wcmV2ZW50RGVmYXVsdCgpO2JyZWFrO2Nhc2UgRE9XTjoob3B0aW9ucy5zd2lwZURvd24mJmF1dG98fCFhdXRvJiZvcHRpb25zLmFsbG93UGFnZVNjcm9sbCE9VkVSVElDQUwpJiZqcUV2ZW50LnByZXZlbnREZWZhdWx0KCk7YnJlYWs7Y2FzZSBOT05FOn19fWZ1bmN0aW9uIHZhbGlkYXRlUGluY2goKXt2YXIgaGFzQ29ycmVjdEZpbmdlckNvdW50PXZhbGlkYXRlRmluZ2VycygpLGhhc0VuZFBvaW50PXZhbGlkYXRlRW5kUG9pbnQoKSxoYXNDb3JyZWN0RGlzdGFuY2U9dmFsaWRhdGVQaW5jaERpc3RhbmNlKCk7cmV0dXJuIGhhc0NvcnJlY3RGaW5nZXJDb3VudCYmaGFzRW5kUG9pbnQmJmhhc0NvcnJlY3REaXN0YW5jZX1mdW5jdGlvbiBoYXNQaW5jaGVzKCl7cmV0dXJuISEob3B0aW9ucy5waW5jaFN0YXR1c3x8b3B0aW9ucy5waW5jaElufHxvcHRpb25zLnBpbmNoT3V0KX1mdW5jdGlvbiBkaWRQaW5jaCgpe3JldHVybiEoIXZhbGlkYXRlUGluY2goKXx8IWhhc1BpbmNoZXMoKSl9ZnVuY3Rpb24gdmFsaWRhdGVTd2lwZSgpe3ZhciBoYXNWYWxpZFRpbWU9dmFsaWRhdGVTd2lwZVRpbWUoKSxoYXNWYWxpZERpc3RhbmNlPXZhbGlkYXRlU3dpcGVEaXN0YW5jZSgpLGhhc0NvcnJlY3RGaW5nZXJDb3VudD12YWxpZGF0ZUZpbmdlcnMoKSxoYXNFbmRQb2ludD12YWxpZGF0ZUVuZFBvaW50KCksZGlkQ2FuY2VsPWRpZFN3aXBlQmFja1RvQ2FuY2VsKCksdmFsaWQ9IWRpZENhbmNlbCYmaGFzRW5kUG9pbnQmJmhhc0NvcnJlY3RGaW5nZXJDb3VudCYmaGFzVmFsaWREaXN0YW5jZSYmaGFzVmFsaWRUaW1lO3JldHVybiB2YWxpZH1mdW5jdGlvbiBoYXNTd2lwZXMoKXtyZXR1cm4hIShvcHRpb25zLnN3aXBlfHxvcHRpb25zLnN3aXBlU3RhdHVzfHxvcHRpb25zLnN3aXBlTGVmdHx8b3B0aW9ucy5zd2lwZVJpZ2h0fHxvcHRpb25zLnN3aXBlVXB8fG9wdGlvbnMuc3dpcGVEb3duKX1mdW5jdGlvbiBkaWRTd2lwZSgpe3JldHVybiEoIXZhbGlkYXRlU3dpcGUoKXx8IWhhc1N3aXBlcygpKX1mdW5jdGlvbiB2YWxpZGF0ZUZpbmdlcnMoKXtyZXR1cm4gZmluZ2VyQ291bnQ9PT1vcHRpb25zLmZpbmdlcnN8fG9wdGlvbnMuZmluZ2Vycz09PUFMTF9GSU5HRVJTfHwhU1VQUE9SVFNfVE9VQ0h9ZnVuY3Rpb24gdmFsaWRhdGVFbmRQb2ludCgpe3JldHVybiAwIT09ZmluZ2VyRGF0YVswXS5lbmQueH1mdW5jdGlvbiBoYXNUYXAoKXtyZXR1cm4hIW9wdGlvbnMudGFwfWZ1bmN0aW9uIGhhc0RvdWJsZVRhcCgpe3JldHVybiEhb3B0aW9ucy5kb3VibGVUYXB9ZnVuY3Rpb24gaGFzTG9uZ1RhcCgpe3JldHVybiEhb3B0aW9ucy5sb25nVGFwfWZ1bmN0aW9uIHZhbGlkYXRlRG91YmxlVGFwKCl7aWYobnVsbD09ZG91YmxlVGFwU3RhcnRUaW1lKXJldHVybiExO3ZhciBub3c9Z2V0VGltZVN0YW1wKCk7cmV0dXJuIGhhc0RvdWJsZVRhcCgpJiZub3ctZG91YmxlVGFwU3RhcnRUaW1lPD1vcHRpb25zLmRvdWJsZVRhcFRocmVzaG9sZH1mdW5jdGlvbiBpbkRvdWJsZVRhcCgpe3JldHVybiB2YWxpZGF0ZURvdWJsZVRhcCgpfWZ1bmN0aW9uIHZhbGlkYXRlVGFwKCl7cmV0dXJuKDE9PT1maW5nZXJDb3VudHx8IVNVUFBPUlRTX1RPVUNIKSYmKGlzTmFOKGRpc3RhbmNlKXx8ZGlzdGFuY2U8b3B0aW9ucy50aHJlc2hvbGQpfWZ1bmN0aW9uIHZhbGlkYXRlTG9uZ1RhcCgpe3JldHVybiBkdXJhdGlvbj5vcHRpb25zLmxvbmdUYXBUaHJlc2hvbGQmJkRPVUJMRV9UQVBfVEhSRVNIT0xEPmRpc3RhbmNlfWZ1bmN0aW9uIGRpZFRhcCgpe3JldHVybiEoIXZhbGlkYXRlVGFwKCl8fCFoYXNUYXAoKSl9ZnVuY3Rpb24gZGlkRG91YmxlVGFwKCl7cmV0dXJuISghdmFsaWRhdGVEb3VibGVUYXAoKXx8IWhhc0RvdWJsZVRhcCgpKX1mdW5jdGlvbiBkaWRMb25nVGFwKCl7cmV0dXJuISghdmFsaWRhdGVMb25nVGFwKCl8fCFoYXNMb25nVGFwKCkpfWZ1bmN0aW9uIHN0YXJ0TXVsdGlGaW5nZXJSZWxlYXNlKGV2ZW50KXtwcmV2aW91c1RvdWNoRW5kVGltZT1nZXRUaW1lU3RhbXAoKSxmaW5nZXJDb3VudEF0UmVsZWFzZT1ldmVudC50b3VjaGVzLmxlbmd0aCsxfWZ1bmN0aW9uIGNhbmNlbE11bHRpRmluZ2VyUmVsZWFzZSgpe3ByZXZpb3VzVG91Y2hFbmRUaW1lPTAsZmluZ2VyQ291bnRBdFJlbGVhc2U9MH1mdW5jdGlvbiBpbk11bHRpRmluZ2VyUmVsZWFzZSgpe3ZhciB3aXRoaW5UaHJlc2hvbGQ9ITE7aWYocHJldmlvdXNUb3VjaEVuZFRpbWUpe3ZhciBkaWZmPWdldFRpbWVTdGFtcCgpLXByZXZpb3VzVG91Y2hFbmRUaW1lO2RpZmY8PW9wdGlvbnMuZmluZ2VyUmVsZWFzZVRocmVzaG9sZCYmKHdpdGhpblRocmVzaG9sZD0hMCl9cmV0dXJuIHdpdGhpblRocmVzaG9sZH1mdW5jdGlvbiBnZXRUb3VjaEluUHJvZ3Jlc3MoKXtyZXR1cm4hKCRlbGVtZW50LmRhdGEoUExVR0lOX05TK1wiX2ludG91Y2hcIikhPT0hMCl9ZnVuY3Rpb24gc2V0VG91Y2hJblByb2dyZXNzKHZhbCl7JGVsZW1lbnQmJih2YWw9PT0hMD8oJGVsZW1lbnQub24oTU9WRV9FVix0b3VjaE1vdmUpLCRlbGVtZW50Lm9uKEVORF9FVix0b3VjaEVuZCksTEVBVkVfRVYmJiRlbGVtZW50Lm9uKExFQVZFX0VWLHRvdWNoTGVhdmUpKTooJGVsZW1lbnQub2ZmKE1PVkVfRVYsdG91Y2hNb3ZlLCExKSwkZWxlbWVudC5vZmYoRU5EX0VWLHRvdWNoRW5kLCExKSxMRUFWRV9FViYmJGVsZW1lbnQub2ZmKExFQVZFX0VWLHRvdWNoTGVhdmUsITEpKSwkZWxlbWVudC5kYXRhKFBMVUdJTl9OUytcIl9pbnRvdWNoXCIsdmFsPT09ITApKX1mdW5jdGlvbiBjcmVhdGVGaW5nZXJEYXRhKGlkLGV2dCl7dmFyIGY9e3N0YXJ0Ont4OjAseTowfSxsYXN0Ont4OjAseTowfSxlbmQ6e3g6MCx5OjB9fTtyZXR1cm4gZi5zdGFydC54PWYubGFzdC54PWYuZW5kLng9ZXZ0LnBhZ2VYfHxldnQuY2xpZW50WCxmLnN0YXJ0Lnk9Zi5sYXN0Lnk9Zi5lbmQueT1ldnQucGFnZVl8fGV2dC5jbGllbnRZLGZpbmdlckRhdGFbaWRdPWYsZn1mdW5jdGlvbiB1cGRhdGVGaW5nZXJEYXRhKGV2dCl7dmFyIGlkPXZvaWQgMCE9PWV2dC5pZGVudGlmaWVyP2V2dC5pZGVudGlmaWVyOjAsZj1nZXRGaW5nZXJEYXRhKGlkKTtyZXR1cm4gbnVsbD09PWYmJihmPWNyZWF0ZUZpbmdlckRhdGEoaWQsZXZ0KSksZi5sYXN0Lng9Zi5lbmQueCxmLmxhc3QueT1mLmVuZC55LGYuZW5kLng9ZXZ0LnBhZ2VYfHxldnQuY2xpZW50WCxmLmVuZC55PWV2dC5wYWdlWXx8ZXZ0LmNsaWVudFksZn1mdW5jdGlvbiBnZXRGaW5nZXJEYXRhKGlkKXtyZXR1cm4gZmluZ2VyRGF0YVtpZF18fG51bGx9ZnVuY3Rpb24gc2V0TWF4RGlzdGFuY2UoZGlyZWN0aW9uLGRpc3RhbmNlKXtkaXJlY3Rpb24hPU5PTkUmJihkaXN0YW5jZT1NYXRoLm1heChkaXN0YW5jZSxnZXRNYXhEaXN0YW5jZShkaXJlY3Rpb24pKSxtYXhpbXVtc01hcFtkaXJlY3Rpb25dLmRpc3RhbmNlPWRpc3RhbmNlKX1mdW5jdGlvbiBnZXRNYXhEaXN0YW5jZShkaXJlY3Rpb24pe3JldHVybiBtYXhpbXVtc01hcFtkaXJlY3Rpb25dP21heGltdW1zTWFwW2RpcmVjdGlvbl0uZGlzdGFuY2U6dm9pZCAwfWZ1bmN0aW9uIGNyZWF0ZU1heGltdW1zRGF0YSgpe3ZhciBtYXhEYXRhPXt9O3JldHVybiBtYXhEYXRhW0xFRlRdPWNyZWF0ZU1heGltdW1WTyhMRUZUKSxtYXhEYXRhW1JJR0hUXT1jcmVhdGVNYXhpbXVtVk8oUklHSFQpLG1heERhdGFbVVBdPWNyZWF0ZU1heGltdW1WTyhVUCksbWF4RGF0YVtET1dOXT1jcmVhdGVNYXhpbXVtVk8oRE9XTiksbWF4RGF0YX1mdW5jdGlvbiBjcmVhdGVNYXhpbXVtVk8oZGlyKXtyZXR1cm57ZGlyZWN0aW9uOmRpcixkaXN0YW5jZTowfX1mdW5jdGlvbiBjYWxjdWxhdGVEdXJhdGlvbigpe3JldHVybiBlbmRUaW1lLXN0YXJ0VGltZX1mdW5jdGlvbiBjYWxjdWxhdGVUb3VjaGVzRGlzdGFuY2Uoc3RhcnRQb2ludCxlbmRQb2ludCl7dmFyIGRpZmZYPU1hdGguYWJzKHN0YXJ0UG9pbnQueC1lbmRQb2ludC54KSxkaWZmWT1NYXRoLmFicyhzdGFydFBvaW50LnktZW5kUG9pbnQueSk7cmV0dXJuIE1hdGgucm91bmQoTWF0aC5zcXJ0KGRpZmZYKmRpZmZYK2RpZmZZKmRpZmZZKSl9ZnVuY3Rpb24gY2FsY3VsYXRlUGluY2hab29tKHN0YXJ0RGlzdGFuY2UsZW5kRGlzdGFuY2Upe3ZhciBwZXJjZW50PWVuZERpc3RhbmNlL3N0YXJ0RGlzdGFuY2UqMTtyZXR1cm4gcGVyY2VudC50b0ZpeGVkKDIpfWZ1bmN0aW9uIGNhbGN1bGF0ZVBpbmNoRGlyZWN0aW9uKCl7cmV0dXJuIDE+cGluY2hab29tP09VVDpJTn1mdW5jdGlvbiBjYWxjdWxhdGVEaXN0YW5jZShzdGFydFBvaW50LGVuZFBvaW50KXtyZXR1cm4gTWF0aC5yb3VuZChNYXRoLnNxcnQoTWF0aC5wb3coZW5kUG9pbnQueC1zdGFydFBvaW50LngsMikrTWF0aC5wb3coZW5kUG9pbnQueS1zdGFydFBvaW50LnksMikpKX1mdW5jdGlvbiBjYWxjdWxhdGVBbmdsZShzdGFydFBvaW50LGVuZFBvaW50KXt2YXIgeD1zdGFydFBvaW50LngtZW5kUG9pbnQueCx5PWVuZFBvaW50Lnktc3RhcnRQb2ludC55LHI9TWF0aC5hdGFuMih5LHgpLGFuZ2xlPU1hdGgucm91bmQoMTgwKnIvTWF0aC5QSSk7cmV0dXJuIDA+YW5nbGUmJihhbmdsZT0zNjAtTWF0aC5hYnMoYW5nbGUpKSxhbmdsZX1mdW5jdGlvbiBjYWxjdWxhdGVEaXJlY3Rpb24oc3RhcnRQb2ludCxlbmRQb2ludCl7aWYoY29tcGFyZVBvaW50cyhzdGFydFBvaW50LGVuZFBvaW50KSlyZXR1cm4gTk9ORTt2YXIgYW5nbGU9Y2FsY3VsYXRlQW5nbGUoc3RhcnRQb2ludCxlbmRQb2ludCk7cmV0dXJuIDQ1Pj1hbmdsZSYmYW5nbGU+PTA/TEVGVDozNjA+PWFuZ2xlJiZhbmdsZT49MzE1P0xFRlQ6YW5nbGU+PTEzNSYmMjI1Pj1hbmdsZT9SSUdIVDphbmdsZT40NSYmMTM1PmFuZ2xlP0RPV046VVB9ZnVuY3Rpb24gZ2V0VGltZVN0YW1wKCl7dmFyIG5vdz1uZXcgRGF0ZTtyZXR1cm4gbm93LmdldFRpbWUoKX1mdW5jdGlvbiBnZXRib3VuZHMoZWwpe2VsPSQoZWwpO3ZhciBvZmZzZXQ9ZWwub2Zmc2V0KCksYm91bmRzPXtsZWZ0Om9mZnNldC5sZWZ0LHJpZ2h0Om9mZnNldC5sZWZ0K2VsLm91dGVyV2lkdGgoKSx0b3A6b2Zmc2V0LnRvcCxib3R0b206b2Zmc2V0LnRvcCtlbC5vdXRlckhlaWdodCgpfTtyZXR1cm4gYm91bmRzfWZ1bmN0aW9uIGlzSW5Cb3VuZHMocG9pbnQsYm91bmRzKXtyZXR1cm4gcG9pbnQueD5ib3VuZHMubGVmdCYmcG9pbnQueDxib3VuZHMucmlnaHQmJnBvaW50Lnk+Ym91bmRzLnRvcCYmcG9pbnQueTxib3VuZHMuYm90dG9tfWZ1bmN0aW9uIGNvbXBhcmVQb2ludHMocG9pbnRBLHBvaW50Qil7cmV0dXJuIHBvaW50QS54PT1wb2ludEIueCYmcG9pbnRBLnk9PXBvaW50Qi55fXZhciBvcHRpb25zPSQuZXh0ZW5kKHt9LG9wdGlvbnMpLHVzZVRvdWNoRXZlbnRzPVNVUFBPUlRTX1RPVUNIfHxTVVBQT1JUU19QT0lOVEVSfHwhb3B0aW9ucy5mYWxsYmFja1RvTW91c2VFdmVudHMsU1RBUlRfRVY9dXNlVG91Y2hFdmVudHM/U1VQUE9SVFNfUE9JTlRFUj9TVVBQT1JUU19QT0lOVEVSX0lFMTA/XCJNU1BvaW50ZXJEb3duXCI6XCJwb2ludGVyZG93blwiOlwidG91Y2hzdGFydFwiOlwibW91c2Vkb3duXCIsTU9WRV9FVj11c2VUb3VjaEV2ZW50cz9TVVBQT1JUU19QT0lOVEVSP1NVUFBPUlRTX1BPSU5URVJfSUUxMD9cIk1TUG9pbnRlck1vdmVcIjpcInBvaW50ZXJtb3ZlXCI6XCJ0b3VjaG1vdmVcIjpcIm1vdXNlbW92ZVwiLEVORF9FVj11c2VUb3VjaEV2ZW50cz9TVVBQT1JUU19QT0lOVEVSP1NVUFBPUlRTX1BPSU5URVJfSUUxMD9cIk1TUG9pbnRlclVwXCI6XCJwb2ludGVydXBcIjpcInRvdWNoZW5kXCI6XCJtb3VzZXVwXCIsTEVBVkVfRVY9dXNlVG91Y2hFdmVudHM/U1VQUE9SVFNfUE9JTlRFUj9cIm1vdXNlbGVhdmVcIjpudWxsOlwibW91c2VsZWF2ZVwiLENBTkNFTF9FVj1TVVBQT1JUU19QT0lOVEVSP1NVUFBPUlRTX1BPSU5URVJfSUUxMD9cIk1TUG9pbnRlckNhbmNlbFwiOlwicG9pbnRlcmNhbmNlbFwiOlwidG91Y2hjYW5jZWxcIixkaXN0YW5jZT0wLGRpcmVjdGlvbj1udWxsLGN1cnJlbnREaXJlY3Rpb249bnVsbCxkdXJhdGlvbj0wLHN0YXJ0VG91Y2hlc0Rpc3RhbmNlPTAsZW5kVG91Y2hlc0Rpc3RhbmNlPTAscGluY2hab29tPTEscGluY2hEaXN0YW5jZT0wLHBpbmNoRGlyZWN0aW9uPTAsbWF4aW11bXNNYXA9bnVsbCwkZWxlbWVudD0kKGVsZW1lbnQpLHBoYXNlPVwic3RhcnRcIixmaW5nZXJDb3VudD0wLGZpbmdlckRhdGE9e30sc3RhcnRUaW1lPTAsZW5kVGltZT0wLHByZXZpb3VzVG91Y2hFbmRUaW1lPTAsZmluZ2VyQ291bnRBdFJlbGVhc2U9MCxkb3VibGVUYXBTdGFydFRpbWU9MCxzaW5nbGVUYXBUaW1lb3V0PW51bGwsaG9sZFRpbWVvdXQ9bnVsbDt0cnl7JGVsZW1lbnQub24oU1RBUlRfRVYsdG91Y2hTdGFydCksJGVsZW1lbnQub24oQ0FOQ0VMX0VWLHRvdWNoQ2FuY2VsKX1jYXRjaChlKXskLmVycm9yKFwiZXZlbnRzIG5vdCBzdXBwb3J0ZWQgXCIrU1RBUlRfRVYrXCIsXCIrQ0FOQ0VMX0VWK1wiIG9uIGpRdWVyeS5zd2lwZVwiKX10aGlzLmVuYWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGUoKSwkZWxlbWVudC5vbihTVEFSVF9FVix0b3VjaFN0YXJ0KSwkZWxlbWVudC5vbihDQU5DRUxfRVYsdG91Y2hDYW5jZWwpLCRlbGVtZW50fSx0aGlzLmRpc2FibGU9ZnVuY3Rpb24oKXtyZXR1cm4gcmVtb3ZlTGlzdGVuZXJzKCksJGVsZW1lbnR9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe3JlbW92ZUxpc3RlbmVycygpLCRlbGVtZW50LmRhdGEoUExVR0lOX05TLG51bGwpLCRlbGVtZW50PW51bGx9LHRoaXMub3B0aW9uPWZ1bmN0aW9uKHByb3BlcnR5LHZhbHVlKXtpZihcIm9iamVjdFwiPT10eXBlb2YgcHJvcGVydHkpb3B0aW9ucz0kLmV4dGVuZChvcHRpb25zLHByb3BlcnR5KTtlbHNlIGlmKHZvaWQgMCE9PW9wdGlvbnNbcHJvcGVydHldKXtpZih2b2lkIDA9PT12YWx1ZSlyZXR1cm4gb3B0aW9uc1twcm9wZXJ0eV07b3B0aW9uc1twcm9wZXJ0eV09dmFsdWV9ZWxzZXtpZighcHJvcGVydHkpcmV0dXJuIG9wdGlvbnM7JC5lcnJvcihcIk9wdGlvbiBcIitwcm9wZXJ0eStcIiBkb2VzIG5vdCBleGlzdCBvbiBqUXVlcnkuc3dpcGUub3B0aW9uc1wiKX1yZXR1cm4gbnVsbH19dmFyIFZFUlNJT049XCIxLjYuMThcIixMRUZUPVwibGVmdFwiLFJJR0hUPVwicmlnaHRcIixVUD1cInVwXCIsRE9XTj1cImRvd25cIixJTj1cImluXCIsT1VUPVwib3V0XCIsTk9ORT1cIm5vbmVcIixBVVRPPVwiYXV0b1wiLFNXSVBFPVwic3dpcGVcIixQSU5DSD1cInBpbmNoXCIsVEFQPVwidGFwXCIsRE9VQkxFX1RBUD1cImRvdWJsZXRhcFwiLExPTkdfVEFQPVwibG9uZ3RhcFwiLEhPUklaT05UQUw9XCJob3Jpem9udGFsXCIsVkVSVElDQUw9XCJ2ZXJ0aWNhbFwiLEFMTF9GSU5HRVJTPVwiYWxsXCIsRE9VQkxFX1RBUF9USFJFU0hPTEQ9MTAsUEhBU0VfU1RBUlQ9XCJzdGFydFwiLFBIQVNFX01PVkU9XCJtb3ZlXCIsUEhBU0VfRU5EPVwiZW5kXCIsUEhBU0VfQ0FOQ0VMPVwiY2FuY2VsXCIsU1VQUE9SVFNfVE9VQ0g9XCJvbnRvdWNoc3RhcnRcImluIHdpbmRvdyxTVVBQT1JUU19QT0lOVEVSX0lFMTA9d2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkJiYhd2luZG93LlBvaW50ZXJFdmVudCYmIVNVUFBPUlRTX1RPVUNILFNVUFBPUlRTX1BPSU5URVI9KHdpbmRvdy5Qb2ludGVyRXZlbnR8fHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZCkmJiFTVVBQT1JUU19UT1VDSCxQTFVHSU5fTlM9XCJUb3VjaFN3aXBlXCIsZGVmYXVsdHM9e2ZpbmdlcnM6MSx0aHJlc2hvbGQ6NzUsY2FuY2VsVGhyZXNob2xkOm51bGwscGluY2hUaHJlc2hvbGQ6MjAsbWF4VGltZVRocmVzaG9sZDpudWxsLGZpbmdlclJlbGVhc2VUaHJlc2hvbGQ6MjUwLGxvbmdUYXBUaHJlc2hvbGQ6NTAwLGRvdWJsZVRhcFRocmVzaG9sZDoyMDAsc3dpcGU6bnVsbCxzd2lwZUxlZnQ6bnVsbCxzd2lwZVJpZ2h0Om51bGwsc3dpcGVVcDpudWxsLHN3aXBlRG93bjpudWxsLHN3aXBlU3RhdHVzOm51bGwscGluY2hJbjpudWxsLHBpbmNoT3V0Om51bGwscGluY2hTdGF0dXM6bnVsbCxjbGljazpudWxsLHRhcDpudWxsLGRvdWJsZVRhcDpudWxsLGxvbmdUYXA6bnVsbCxob2xkOm51bGwsdHJpZ2dlck9uVG91Y2hFbmQ6ITAsdHJpZ2dlck9uVG91Y2hMZWF2ZTohMSxhbGxvd1BhZ2VTY3JvbGw6XCJhdXRvXCIsZmFsbGJhY2tUb01vdXNlRXZlbnRzOiEwLGV4Y2x1ZGVkRWxlbWVudHM6XCIubm9Td2lwZVwiLHByZXZlbnREZWZhdWx0RXZlbnRzOiEwfTskLmZuLnN3aXBlPWZ1bmN0aW9uKG1ldGhvZCl7dmFyICR0aGlzPSQodGhpcykscGx1Z2luPSR0aGlzLmRhdGEoUExVR0lOX05TKTtpZihwbHVnaW4mJlwic3RyaW5nXCI9PXR5cGVvZiBtZXRob2Qpe2lmKHBsdWdpblttZXRob2RdKXJldHVybiBwbHVnaW5bbWV0aG9kXS5hcHBseShwbHVnaW4sQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKTskLmVycm9yKFwiTWV0aG9kIFwiK21ldGhvZCtcIiBkb2VzIG5vdCBleGlzdCBvbiBqUXVlcnkuc3dpcGVcIil9ZWxzZSBpZihwbHVnaW4mJlwib2JqZWN0XCI9PXR5cGVvZiBtZXRob2QpcGx1Z2luLm9wdGlvbi5hcHBseShwbHVnaW4sYXJndW1lbnRzKTtlbHNlIGlmKCEocGx1Z2lufHxcIm9iamVjdFwiIT10eXBlb2YgbWV0aG9kJiZtZXRob2QpKXJldHVybiBpbml0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gJHRoaXN9LCQuZm4uc3dpcGUudmVyc2lvbj1WRVJTSU9OLCQuZm4uc3dpcGUuZGVmYXVsdHM9ZGVmYXVsdHMsJC5mbi5zd2lwZS5waGFzZXM9e1BIQVNFX1NUQVJUOlBIQVNFX1NUQVJULFBIQVNFX01PVkU6UEhBU0VfTU9WRSxQSEFTRV9FTkQ6UEhBU0VfRU5ELFBIQVNFX0NBTkNFTDpQSEFTRV9DQU5DRUx9LCQuZm4uc3dpcGUuZGlyZWN0aW9ucz17TEVGVDpMRUZULFJJR0hUOlJJR0hULFVQOlVQLERPV046RE9XTixJTjpJTixPVVQ6T1VUfSwkLmZuLnN3aXBlLnBhZ2VTY3JvbGw9e05PTkU6Tk9ORSxIT1JJWk9OVEFMOkhPUklaT05UQUwsVkVSVElDQUw6VkVSVElDQUwsQVVUTzpBVVRPfSwkLmZuLnN3aXBlLmZpbmdlcnM9e09ORToxLFRXTzoyLFRIUkVFOjMsRk9VUjo0LEZJVkU6NSxBTEw6QUxMX0ZJTkdFUlN9fSk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5pbXBvcnQgcHJlc3Rhc2hvcCBmcm9tIFwicHJlc3Rhc2hvcFwiO1xuaW1wb3J0ICQgZnJvbSBcImpxdWVyeVwiO1xuXG5jb25zdCBwYXNzd29yZFBvbGljeSA9IHtcbiAgdGVtcGxhdGU6IFwiI3Bhc3N3b3JkLWZlZWRiYWNrXCIsXG4gIGhpbnQ6IFwiLmpzLWhpbnQtcGFzc3dvcmRcIixcbiAgY29udGFpbmVyOiBcIi5wYXNzd29yZC1zdHJlbmd0aC1mZWVkYmFja1wiLFxuICBzdHJlbmd0aFRleHQ6IFwiLnBhc3N3b3JkLXN0cmVuZ3RoLXRleHRcIixcbiAgcmVxdWlyZW1lbnRTY29yZTogXCIucGFzc3dvcmQtcmVxdWlyZW1lbnRzLXNjb3JlXCIsXG4gIHJlcXVpcmVtZW50TGVuZ3RoOiBcIi5wYXNzd29yZC1yZXF1aXJlbWVudHMtbGVuZ3RoXCIsXG4gIHJlcXVpcmVtZW50U2NvcmVJY29uOiBcIi5wYXNzd29yZC1yZXF1aXJlbWVudHMtc2NvcmUgaVwiLFxuICByZXF1aXJlbWVudExlbmd0aEljb246IFwiLnBhc3N3b3JkLXJlcXVpcmVtZW50cy1sZW5ndGggaVwiLFxuICBwcm9ncmVzc0JhcjogXCIucHJvZ3Jlc3MtYmFyXCIsXG4gIGlucHV0Q29sdW1uOiBcIi5qcy1pbnB1dC1jb2x1bW5cIixcbn07XG5cbnByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMgPSB7XG4gIHByb2R1Y3Q6IHtcbiAgICB0YWJzOiBcIi50YWJzIC5uYXYtbGlua1wiLFxuICAgIGFjdGl2ZU5hdkNsYXNzOiBcImpzLXByb2R1Y3QtbmF2LWFjdGl2ZVwiLFxuICAgIGFjdGl2ZVRhYkNsYXNzOiBcImpzLXByb2R1Y3QtdGFiLWFjdGl2ZVwiLFxuICAgIGFjdGl2ZVRhYnM6IFwiLnRhYnMgLm5hdi1saW5rLmFjdGl2ZSwgLmpzLXByb2R1Y3QtbmF2LWFjdGl2ZVwiLFxuICAgIGltYWdlc01vZGFsOiBcIi5qcy1wcm9kdWN0LWltYWdlcy1tb2RhbFwiLFxuICAgIHRodW1iOiBcIi5qcy10aHVtYlwiLFxuICAgIHRodW1iQ29udGFpbmVyOiBcIi50aHVtYi1jb250YWluZXIsIC5qcy10aHVtYi1jb250YWluZXJcIixcbiAgICBhcnJvd3M6IFwiLmpzLWFycm93c1wiLFxuICAgIHNlbGVjdGVkOiBcIi5zZWxlY3RlZCwgLmpzLXRodW1iLXNlbGVjdGVkXCIsXG4gICAgbW9kYWxQcm9kdWN0Q292ZXI6IFwiLmpzLW1vZGFsLXByb2R1Y3QtY292ZXJcIixcbiAgICBjb3ZlcjogXCIuanMtcXYtcHJvZHVjdC1jb3ZlclwiLFxuICAgIGN1c3RvbWl6YXRpb25Nb2RhbDogXCIuanMtY3VzdG9taXphdGlvbi1tb2RhbFwiLFxuICB9LFxuICBsaXN0aW5nOiB7XG4gICAgc2VhcmNoRmlsdGVyVG9nZ2xlcjogXCIjc2VhcmNoX2ZpbHRlcl90b2dnbGVyLCAuanMtc2VhcmNoLXRvZ2dsZXJcIixcbiAgICBzZWFyY2hGaWx0ZXJzV3JhcHBlcjogXCIjc2VhcmNoX2ZpbHRlcnNfd3JhcHBlclwiLFxuICAgIHNlYXJjaEZpbHRlckNvbnRyb2xzOiBcIiNzZWFyY2hfZmlsdGVyX2NvbnRyb2xzXCIsXG4gICAgc2VhcmNoRmlsdGVyczogXCIjc2VhcmNoX2ZpbHRlcnNcIixcbiAgICBhY3RpdmVTZWFyY2hGaWx0ZXJzOiBcIiNqcy1hY3RpdmUtc2VhcmNoLWZpbHRlcnNcIixcbiAgICBsaXN0VG9wOiBcIiNqcy1wcm9kdWN0LWxpc3QtdG9wXCIsXG4gICAgcHJvZHVjdDogXCIuanMtcHJvZHVjdFwiLFxuICAgIGxpc3Q6IFwiI2pzLXByb2R1Y3QtbGlzdFwiLFxuICAgIGxpc3RCb3R0b206IFwiI2pzLXByb2R1Y3QtbGlzdC1ib3R0b21cIixcbiAgICBsaXN0SGVhZGVyOiBcIiNqcy1wcm9kdWN0LWxpc3QtaGVhZGVyXCIsXG4gICAgc2VhcmNoRmlsdGVyc0NsZWFyQWxsOiBcIi5qcy1zZWFyY2gtZmlsdGVycy1jbGVhci1hbGxcIixcbiAgICBzZWFyY2hMaW5rOiBcIi5qcy1zZWFyY2gtbGlua1wiLFxuICB9LFxuICBvcmRlcjoge1xuICAgIHJldHVybkZvcm06IFwiI29yZGVyLXJldHVybi1mb3JtLCAuanMtb3JkZXItcmV0dXJuLWZvcm1cIixcbiAgfSxcbiAgYXJyb3dEb3duOiBcIi5hcnJvdy1kb3duLCAuanMtYXJyb3ctZG93blwiLFxuICBhcnJvd1VwOiBcIi5hcnJvdy11cCwgLmpzLWFycm93LXVwXCIsXG4gIGNsZWFyOiBcIi5jbGVhclwiLFxuICBmaWxlSW5wdXQ6IFwiLmpzLWZpbGUtaW5wdXRcIixcbiAgY29udGVudFdyYXBwZXI6IFwiI2NvbnRlbnQtd3JhcHBlciwgLmpzLWNvbnRlbnQtd3JhcHBlclwiLFxuICBmb290ZXI6IFwiI2Zvb3RlciwgLmpzLWZvb3RlclwiLFxuICBtb2RhbENvbnRlbnQ6IFwiLmpzLW1vZGFsLWNvbnRlbnRcIixcbiAgbW9kYWw6IFwiI21vZGFsLCAuanMtY2hlY2tvdXQtbW9kYWxcIixcbiAgdG91Y2hzcGluOiBcIi5qcy10b3VjaHNwaW5cIixcbiAgY2hlY2tvdXQ6IHtcbiAgICB0ZXJtc0xpbms6IFwiLmpzLXRlcm1zIGFcIixcbiAgICBnaWZ0Q2hlY2tib3g6IFwiLmpzLWdpZnQtY2hlY2tib3hcIixcbiAgICBpbWFnZXNMaW5rOiBcIi5jYXJkLWJsb2NrIC5jYXJ0LXN1bW1hcnktcHJvZHVjdHMgcCBhLCAuanMtc2hvdy1kZXRhaWxzXCIsXG4gICAgY2FycmllckV4dHJhQ29udGVudDogXCIuY2Fycmllci1leHRyYS1jb250ZW50LCAuanMtY2Fycmllci1leHRyYS1jb250ZW50XCIsXG4gICAgYnRuOiBcIi5jaGVja291dCBhXCIsXG4gIH0sXG4gIGNhcnQ6IHtcbiAgICBwcm9kdWN0TGluZVF0eTogXCIuanMtY2FydC1saW5lLXByb2R1Y3QtcXVhbnRpdHlcIixcbiAgICBxdWlja3ZpZXc6IFwiLnF1aWNrdmlld1wiLFxuICAgIHRvdWNoc3BpbjogXCIuYm9vdHN0cmFwLXRvdWNoc3BpblwiLFxuICAgIHByb21vQ29kZTogXCIjcHJvbW8tY29kZVwiLFxuICAgIGRpc3BsYXlQcm9tbzogXCIuZGlzcGxheS1wcm9tb1wiLFxuICAgIHByb21vQ29kZUJ1dHRvbjogXCIucHJvbW8tY29kZS1idXR0b25cIixcbiAgICBkaXNjb3VudENvZGU6IFwiLmpzLWRpc2NvdW50IC5jb2RlXCIsXG4gICAgZGlzY291bnROYW1lOiBcIltuYW1lPWRpc2NvdW50X25hbWVdXCIsXG4gICAgYWN0aW9uczpcbiAgICAgICdbZGF0YS1saW5rLWFjdGlvbj1cImRlbGV0ZS1mcm9tLWNhcnRcIl0sIFtkYXRhLWxpbmstYWN0aW9uPVwicmVtb3ZlLXZvdWNoZXJcIl0nLFxuICB9LFxuICBub3RpZmljYXRpb25zOiB7XG4gICAgZGFuZ2VyQWxlcnQ6IFwiI25vdGlmaWNhdGlvbnMgYXJ0aWNsZS5hbGVydC1kYW5nZXJcIixcbiAgICBjb250YWluZXI6IFwiI25vdGlmaWNhdGlvbnMubm90aWZpY2F0aW9ucy1jb250YWluZXJcIixcbiAgfSxcbiAgcGFzc3dvcmRQb2xpY3ksXG59O1xuXG4kKGRvY3VtZW50KS5yZWFkeSgoKSA9PiB7XG4gIHByZXN0YXNob3AuZW1pdChcInRoZW1lU2VsZWN0b3JzSW5pdFwiKTtcbn0pO1xuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5J1xuXG52YXIgc2ltcGxldGFic3BsdWdpbm5hbWUgPSAnc2ltcGxldGFicydcbmZ1bmN0aW9uIFNpbXBsZVRhYnNQbHVnaW4oZWxlbWVudCwgb3B0aW9ucykge1xuICB0aGlzLiRlbCA9ICQoZWxlbWVudClcbiAgdGhpcy4kdGFicyA9IFtdXG4gIHRoaXMuaW5pdCgpXG59XG5cbiQuZXh0ZW5kKFNpbXBsZVRhYnNQbHVnaW4ucHJvdG90eXBlLCB7XG4gIGluaXQoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgdGhpcy4kdGFicyA9IFtdXG4gICAgdGhpcy4kZWwuZmluZCgndWwgPiBsaSA+IGEnKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyICRhID0gJCh0aGlzKVxuICAgICAgdmFyIGlkID0gJGEuYXR0cignaHJlZicpXG4gICAgICBpZiAoIGlkLnN0YXJ0c1dpdGgoJyMnKSApIHtcbiAgICAgICAgaWQgPSBpZC5yZXBsYWNlKCcjJywgJycpXG4gICAgICAgIHZhciBleGlzdHMgPSBzZWxmLiR0YWJzLmZpbmQoZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgIHJldHVybiBlbGVtZW50ID09PSBpZFxuICAgICAgICB9KVxuICAgICAgICB2YXIgY29udGVudHNlbGVjdG9yID0gJyMnICsgaWQgKyAnLnRhYnMtY29udGVudCdcbiAgICAgICAgdmFyIGNvbnRlbnQgPSBzZWxmLiRlbC5maW5kKGNvbnRlbnRzZWxlY3RvcilcbiAgICAgICAgaWYgKCBleGlzdHMgKSB7XG4gICAgICAgICAgZXhpc3RzLnRhYiA9ICRhXG4gICAgICAgICAgZXhpc3RzLmNvbnRlbnQgPSBjb250ZW50XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VsZi4kdGFicy5wdXNoKHtcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIHRhYjogJGEsXG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICAgc2VsZi4kdGFicy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIGlmICghZWxlbWVudC50YWIuaGFzQ2xhc3MoJ2FjdGl2ZScpKSB7XG4gICAgICAgIHNlbGYuaGlkZShlbGVtZW50LmlkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZi5zaG93KGVsZW1lbnQuaWQpXG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnQudGFiLmNsaWNrKGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgc2VsZi5zaG93KGVsZW1lbnQuaWQpXG4gICAgICB9KVxuICAgIH0pXG4gIH0sXG4gIHNob3coaWQpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXNcbiAgICB0aGlzLiR0YWJzLmZvckVhY2goZnVuY3Rpb24oIGVsZW1lbnQgKSB7XG4gICAgICBzZWxmLmhpZGUoZWxlbWVudC5pZClcbiAgICAgIGlmICggZWxlbWVudC5pZCA9PT0gaWQgKSB7XG4gICAgICAgIGVsZW1lbnQudGFiLmFkZENsYXNzKCdhY3RpdmUnKS5hZGRDbGFzcygnZm9udC1ib2xkJylcbiAgICAgICAgZWxlbWVudC5jb250ZW50LnJlbW92ZUNsYXNzKCdoaWRkZW4nKVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG4gIGhpZGUoaWQpIHtcbiAgICB0aGlzLiR0YWJzLmZvckVhY2goZnVuY3Rpb24oIGVsZW1lbnQgKSB7XG4gICAgICBpZiAoIGVsZW1lbnQuaWQgPT09IGlkICkge1xuICAgICAgICBlbGVtZW50LnRhYi5yZW1vdmVDbGFzcygnYWN0aXZlJykucmVtb3ZlQ2xhc3MoJ2ZvbnQtYm9sZCcpXG4gICAgICAgIGVsZW1lbnQuY29udGVudC5hZGRDbGFzcygnaGlkZGVuJylcbiAgICAgIH1cbiAgICB9KVxuICB9LFxufSlcblxuJC5mbi5zaW1wbGV0YWJzID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgaWYgKCAhJC5kYXRhKHRoaXMsICdwbHVnaW5fJyArIHNpbXBsZXRhYnNwbHVnaW5uYW1lKSkge1xuICAgICAgJC5kYXRhKHRoaXMsICdwbHVnaW5fJyArIHNpbXBsZXRhYnNwbHVnaW5uYW1lLCBuZXcgU2ltcGxlVGFic1BsdWdpbih0aGlzLCBvcHRpb25zKSlcbiAgICB9XG4gIH0pXG59XG5cblxuIiwiKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoWydqcXVlcnknXSwgZnVuY3Rpb24oJCl7XG4gICAgICAgICAgICBmYWN0b3J5KCQpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2UgaWYodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSAocm9vdC5FYXN5Wm9vbSA9IGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JykpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LkVhc3lab29tID0gZmFjdG9yeShyb290LmpRdWVyeSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbiAoJCkge1xuXG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIHpvb21JbWdPdmVybGFwWDtcbiAgICB2YXIgem9vbUltZ092ZXJsYXBZO1xuICAgIHZhciByYXRpb1g7XG4gICAgdmFyIHJhdGlvWTtcbiAgICB2YXIgcG9pbnRlclBvc2l0aW9uWDtcbiAgICB2YXIgcG9pbnRlclBvc2l0aW9uWTtcblxuICAgIHZhciBkZWZhdWx0cyA9IHtcblxuICAgICAgICAvLyBUaGUgdGV4dCB0byBkaXNwbGF5IHdpdGhpbiB0aGUgbm90aWNlIGJveCB3aGlsZSBsb2FkaW5nIHRoZSB6b29tIGltYWdlLlxuICAgICAgICBsb2FkaW5nTm90aWNlOiAnTG9hZGluZyBpbWFnZScsXG5cbiAgICAgICAgLy8gVGhlIHRleHQgdG8gZGlzcGxheSB3aXRoaW4gdGhlIG5vdGljZSBib3ggaWYgYW4gZXJyb3Igb2NjdXJzIHdoZW4gbG9hZGluZyB0aGUgem9vbSBpbWFnZS5cbiAgICAgICAgZXJyb3JOb3RpY2U6ICdUaGUgaW1hZ2UgY291bGQgbm90IGJlIGxvYWRlZCcsXG5cbiAgICAgICAgLy8gVGhlIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgdG8gZGlzcGxheSB0aGUgZXJyb3Igbm90aWNlLlxuICAgICAgICBlcnJvckR1cmF0aW9uOiAyNTAwLFxuXG4gICAgICAgIC8vIEF0dHJpYnV0ZSB0byByZXRyaWV2ZSB0aGUgem9vbSBpbWFnZSBVUkwgZnJvbS5cbiAgICAgICAgbGlua0F0dHJpYnV0ZTogJ2hyZWYnLFxuXG4gICAgICAgIC8vIFByZXZlbnQgY2xpY2tzIG9uIHRoZSB6b29tIGltYWdlIGxpbmsuXG4gICAgICAgIHByZXZlbnRDbGlja3M6IHRydWUsXG5cbiAgICAgICAgLy8gQ2FsbGJhY2sgZnVuY3Rpb24gdG8gZXhlY3V0ZSBiZWZvcmUgdGhlIGZseW91dCBpcyBkaXNwbGF5ZWQuXG4gICAgICAgIGJlZm9yZVNob3c6ICQubm9vcCxcblxuICAgICAgICAvLyBDYWxsYmFjayBmdW5jdGlvbiB0byBleGVjdXRlIGJlZm9yZSB0aGUgZmx5b3V0IGlzIHJlbW92ZWQuXG4gICAgICAgIGJlZm9yZUhpZGU6ICQubm9vcCxcblxuICAgICAgICAvLyBDYWxsYmFjayBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGZseW91dCBpcyBkaXNwbGF5ZWQuXG4gICAgICAgIG9uU2hvdzogJC5ub29wLFxuXG4gICAgICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZmx5b3V0IGlzIHJlbW92ZWQuXG4gICAgICAgIG9uSGlkZTogJC5ub29wLFxuXG4gICAgICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgY3Vyc29yIGlzIG1vdmVkIHdoaWxlIG92ZXIgdGhlIGltYWdlLlxuICAgICAgICBvbk1vdmU6ICQubm9vcFxuXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEVhc3lab29tXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIChPcHRpb25hbClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBFYXN5Wm9vbSh0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy4kdGFyZ2V0ID0gJCh0YXJnZXQpO1xuICAgICAgICB0aGlzLm9wdHMgPSAkLmV4dGVuZCh7fSwgZGVmYXVsdHMsIG9wdGlvbnMsIHRoaXMuJHRhcmdldC5kYXRhKCkpO1xuXG4gICAgICAgIHRoaXMuaXNPcGVuID09PSB1bmRlZmluZWQgJiYgdGhpcy5faW5pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEVhc3lab29tLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRsaW5rICAgPSB0aGlzLiR0YXJnZXQuZmluZCgnYScpO1xuICAgICAgICB0aGlzLiRpbWFnZSAgPSB0aGlzLiR0YXJnZXQuZmluZCgnaW1nJyk7XG5cbiAgICAgICAgdGhpcy4kZmx5b3V0ID0gJCgnPGRpdiBjbGFzcz1cImVhc3l6b29tLWZseW91dFwiIC8+Jyk7XG4gICAgICAgIHRoaXMuJG5vdGljZSA9ICQoJzxkaXYgY2xhc3M9XCJlYXN5em9vbS1ub3RpY2VcIiAvPicpO1xuXG4gICAgICAgIHRoaXMuJHRhcmdldC5vbih7XG4gICAgICAgICAgICAnbW91c2Vtb3ZlLmVhc3l6b29tIHRvdWNobW92ZS5lYXN5em9vbSc6ICQucHJveHkodGhpcy5fb25Nb3ZlLCB0aGlzKSxcbiAgICAgICAgICAgICdtb3VzZWxlYXZlLmVhc3l6b29tIHRvdWNoZW5kLmVhc3l6b29tJzogJC5wcm94eSh0aGlzLl9vbkxlYXZlLCB0aGlzKSxcbiAgICAgICAgICAgICdtb3VzZWVudGVyLmVhc3l6b29tIHRvdWNoc3RhcnQuZWFzeXpvb20nOiAkLnByb3h5KHRoaXMuX29uRW50ZXIsIHRoaXMpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub3B0cy5wcmV2ZW50Q2xpY2tzICYmIHRoaXMuJHRhcmdldC5vbignY2xpY2suZWFzeXpvb20nLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBTaG93XG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fFRvdWNoRXZlbnR9IGVcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHRlc3RNb3VzZU92ZXIgKE9wdGlvbmFsKVxuICAgICAqL1xuICAgIEVhc3lab29tLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24oZSwgdGVzdE1vdXNlT3Zlcikge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0cy5iZWZvcmVTaG93LmNhbGwodGhpcykgPT09IGZhbHNlKSByZXR1cm47XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzUmVhZHkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2FkSW1hZ2UodGhpcy4kbGluay5hdHRyKHRoaXMub3B0cy5saW5rQXR0cmlidXRlKSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuaXNNb3VzZU92ZXIgfHwgIXRlc3RNb3VzZU92ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zaG93KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4kdGFyZ2V0LmFwcGVuZCh0aGlzLiRmbHlvdXQpO1xuXG4gICAgICAgIHZhciB0YXJnZXRXaWR0aCA9IHRoaXMuJHRhcmdldC5vdXRlcldpZHRoKCk7XG4gICAgICAgIHZhciB0YXJnZXRIZWlnaHQgPSB0aGlzLiR0YXJnZXQub3V0ZXJIZWlnaHQoKTtcblxuICAgICAgICB2YXIgZmx5b3V0SW5uZXJXaWR0aCA9IHRoaXMuJGZseW91dC53aWR0aCgpO1xuICAgICAgICB2YXIgZmx5b3V0SW5uZXJIZWlnaHQgPSB0aGlzLiRmbHlvdXQuaGVpZ2h0KCk7XG5cbiAgICAgICAgdmFyIHpvb21JbWdXaWR0aCA9IHRoaXMuJHpvb20ud2lkdGgoKTtcbiAgICAgICAgdmFyIHpvb21JbWdIZWlnaHQgPSB0aGlzLiR6b29tLmhlaWdodCgpO1xuXG4gICAgICAgIHpvb21JbWdPdmVybGFwWCA9IE1hdGguY2VpbCh6b29tSW1nV2lkdGggLSBmbHlvdXRJbm5lcldpZHRoKTtcbiAgICAgICAgem9vbUltZ092ZXJsYXBZID0gTWF0aC5jZWlsKHpvb21JbWdIZWlnaHQgLSBmbHlvdXRJbm5lckhlaWdodCk7XG5cblxuICAgICAgICAvLyBGb3Igd2hlbiB0aGUgem9vbSBpbWFnZSBpcyBzbWFsbGVyIHRoYW4gdGhlIGZseW91dCBlbGVtZW50LlxuICAgICAgICBpZiAoem9vbUltZ092ZXJsYXBYIDwgMCkgem9vbUltZ092ZXJsYXBYID0gMDtcbiAgICAgICAgaWYgKHpvb21JbWdPdmVybGFwWSA8IDApIHpvb21JbWdPdmVybGFwWSA9IDA7XG5cbiAgICAgICAgcmF0aW9YID0gem9vbUltZ092ZXJsYXBYIC8gdGFyZ2V0V2lkdGg7XG4gICAgICAgIHJhdGlvWSA9IHpvb21JbWdPdmVybGFwWSAvIHRhcmdldEhlaWdodDtcblxuICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5vcHRzLm9uU2hvdy5jYWxsKHRoaXMpO1xuXG4gICAgICAgIGUgJiYgdGhpcy5fbW92ZShlKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogT24gZW50ZXJcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICAgKi9cbiAgICBFYXN5Wm9vbS5wcm90b3R5cGUuX29uRW50ZXIgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciB0b3VjaGVzID0gZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXM7XG5cbiAgICAgICAgdGhpcy5pc01vdXNlT3ZlciA9IHRydWU7XG5cbiAgICAgICAgaWYgKCF0b3VjaGVzIHx8IHRvdWNoZXMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuc2hvdyhlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBPbiBtb3ZlXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBlXG4gICAgICovXG4gICAgRWFzeVpvb20ucHJvdG90eXBlLl9vbk1vdmUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcblxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX21vdmUoZSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE9uIGxlYXZlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBFYXN5Wm9vbS5wcm90b3R5cGUuX29uTGVhdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5pc01vdXNlT3ZlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzT3BlbiAmJiB0aGlzLmhpZGUoKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogT24gbG9hZFxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgICAqL1xuICAgIEVhc3lab29tLnByb3RvdHlwZS5fb25Mb2FkID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAvLyBJRSBtYXkgZmlyZSBhIGxvYWQgZXZlbnQgZXZlbiBvbiBlcnJvciBzbyB0ZXN0IHRoZSBpbWFnZSBkaW1lbnNpb25zXG4gICAgICAgIGlmICghZS5jdXJyZW50VGFyZ2V0LndpZHRoKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5pc1JlYWR5ID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLiRub3RpY2UuZGV0YWNoKCk7XG4gICAgICAgIHRoaXMuJGZseW91dC5odG1sKHRoaXMuJHpvb20pO1xuICAgICAgICB0aGlzLiR0YXJnZXQucmVtb3ZlQ2xhc3MoJ2lzLWxvYWRpbmcnKS5hZGRDbGFzcygnaXMtcmVhZHknKTtcblxuICAgICAgICBlLmRhdGEuY2FsbCAmJiBlLmRhdGEoKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogT24gZXJyb3JcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEVhc3lab29tLnByb3RvdHlwZS5fb25FcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy4kbm90aWNlLnRleHQodGhpcy5vcHRzLmVycm9yTm90aWNlKTtcbiAgICAgICAgdGhpcy4kdGFyZ2V0LnJlbW92ZUNsYXNzKCdpcy1sb2FkaW5nJykuYWRkQ2xhc3MoJ2lzLWVycm9yJyk7XG5cbiAgICAgICAgdGhpcy5kZXRhY2hOb3RpY2UgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgc2VsZi4kbm90aWNlLmRldGFjaCgpO1xuICAgICAgICAgICAgc2VsZi5kZXRhY2hOb3RpY2UgPSBudWxsO1xuICAgICAgICB9LCB0aGlzLm9wdHMuZXJyb3JEdXJhdGlvbik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIExvYWQgaW1hZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBocmVmXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICAgKi9cbiAgICBFYXN5Wm9vbS5wcm90b3R5cGUuX2xvYWRJbWFnZSA9IGZ1bmN0aW9uKGhyZWYsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciB6b29tID0gbmV3IEltYWdlKCk7XG5cbiAgICAgICAgdGhpcy4kdGFyZ2V0XG4gICAgICAgICAgICAuYWRkQ2xhc3MoJ2lzLWxvYWRpbmcnKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLiRub3RpY2UudGV4dCh0aGlzLm9wdHMubG9hZGluZ05vdGljZSkpO1xuXG4gICAgICAgIHRoaXMuJHpvb20gPSAkKHpvb20pXG4gICAgICAgICAgICAub24oJ2Vycm9yJywgJC5wcm94eSh0aGlzLl9vbkVycm9yLCB0aGlzKSlcbiAgICAgICAgICAgIC5vbignbG9hZCcsIGNhbGxiYWNrLCAkLnByb3h5KHRoaXMuX29uTG9hZCwgdGhpcykpO1xuXG4gICAgICAgIHpvb20uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICB6b29tLnNyYyA9IGhyZWY7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE1vdmVcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICAgKi9cbiAgICBFYXN5Wm9vbS5wcm90b3R5cGUuX21vdmUgPSBmdW5jdGlvbihlKSB7XG5cbiAgICAgICAgaWYgKGUudHlwZS5pbmRleE9mKCd0b3VjaCcpID09PSAwKSB7XG4gICAgICAgICAgICB2YXIgdG91Y2hsaXN0ID0gZS50b3VjaGVzIHx8IGUub3JpZ2luYWxFdmVudC50b3VjaGVzO1xuICAgICAgICAgICAgcG9pbnRlclBvc2l0aW9uWCA9IHRvdWNobGlzdFswXS5wYWdlWDtcbiAgICAgICAgICAgIHBvaW50ZXJQb3NpdGlvblkgPSB0b3VjaGxpc3RbMF0ucGFnZVk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb2ludGVyUG9zaXRpb25YID0gZS5wYWdlWCB8fCBwb2ludGVyUG9zaXRpb25YO1xuICAgICAgICAgICAgcG9pbnRlclBvc2l0aW9uWSA9IGUucGFnZVkgfHwgcG9pbnRlclBvc2l0aW9uWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0YXJnZXRPZmZzZXQgID0gdGhpcy4kdGFyZ2V0Lm9mZnNldCgpO1xuICAgICAgICB2YXIgcmVsYXRpdmVQb3NpdGlvblggPSBwb2ludGVyUG9zaXRpb25YIC0gdGFyZ2V0T2Zmc2V0LmxlZnQ7XG4gICAgICAgIHZhciByZWxhdGl2ZVBvc2l0aW9uWSA9IHBvaW50ZXJQb3NpdGlvblkgLSB0YXJnZXRPZmZzZXQudG9wO1xuICAgICAgICB2YXIgbW92ZVggPSBNYXRoLmNlaWwocmVsYXRpdmVQb3NpdGlvblggKiByYXRpb1gpO1xuICAgICAgICB2YXIgbW92ZVkgPSBNYXRoLmNlaWwocmVsYXRpdmVQb3NpdGlvblkgKiByYXRpb1kpO1xuXG4gICAgICAgIC8vIENsb3NlIGlmIG91dHNpZGVcbiAgICAgICAgaWYgKG1vdmVYIDwgMCB8fCBtb3ZlWSA8IDAgfHwgbW92ZVggPiB6b29tSW1nT3ZlcmxhcFggfHwgbW92ZVkgPiB6b29tSW1nT3ZlcmxhcFkpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHRvcCA9IG1vdmVZICogLTE7XG4gICAgICAgICAgICB2YXIgbGVmdCA9IG1vdmVYICogLTE7XG5cbiAgICAgICAgICAgIGlmICgndHJhbnNmb3JtJyBpbiBkb2N1bWVudC5ib2R5LnN0eWxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kem9vbS5jc3MoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoJyArIGxlZnQgKyAncHgsICcgKyB0b3AgKyAncHgpJyB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kem9vbS5jc3MoeyB0b3A6IHRvcCwgbGVmdDogbGVmdCB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5vcHRzLm9uTW92ZS5jYWxsKHRoaXMsIHRvcCwgbGVmdCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSGlkZVxuICAgICAqL1xuICAgIEVhc3lab29tLnByb3RvdHlwZS5oaWRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5iZWZvcmVIaWRlLmNhbGwodGhpcykgPT09IGZhbHNlKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy4kZmx5b3V0LmRldGFjaCgpO1xuICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMub3B0cy5vbkhpZGUuY2FsbCh0aGlzKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogU3dhcFxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzdGFuZGFyZFNyY1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB6b29tSHJlZlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBzcmNzZXQgKE9wdGlvbmFsKVxuICAgICAqL1xuICAgIEVhc3lab29tLnByb3RvdHlwZS5zd2FwID0gZnVuY3Rpb24oc3RhbmRhcmRTcmMsIHpvb21IcmVmLCBzcmNzZXQpIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIHRoaXMuaXNSZWFkeSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuZGV0YWNoTm90aWNlICYmIGNsZWFyVGltZW91dCh0aGlzLmRldGFjaE5vdGljZSk7XG5cbiAgICAgICAgdGhpcy4kbm90aWNlLnBhcmVudCgpLmxlbmd0aCAmJiB0aGlzLiRub3RpY2UuZGV0YWNoKCk7XG5cbiAgICAgICAgdGhpcy4kdGFyZ2V0LnJlbW92ZUNsYXNzKCdpcy1sb2FkaW5nIGlzLXJlYWR5IGlzLWVycm9yJyk7XG5cbiAgICAgICAgdGhpcy4kaW1hZ2UuYXR0cih7XG4gICAgICAgICAgICBzcmM6IHN0YW5kYXJkU3JjLFxuICAgICAgICAgICAgc3Jjc2V0OiAkLmlzQXJyYXkoc3Jjc2V0KSA/IHNyY3NldC5qb2luKCkgOiBzcmNzZXRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy4kbGluay5hdHRyKHRoaXMub3B0cy5saW5rQXR0cmlidXRlLCB6b29tSHJlZik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRlYXJkb3duXG4gICAgICovXG4gICAgRWFzeVpvb20ucHJvdG90eXBlLnRlYXJkb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuXG4gICAgICAgIHRoaXMuJHRhcmdldFxuICAgICAgICAgICAgLm9mZignLmVhc3l6b29tJylcbiAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnaXMtbG9hZGluZyBpcy1yZWFkeSBpcy1lcnJvcicpO1xuXG4gICAgICAgIHRoaXMuZGV0YWNoTm90aWNlICYmIGNsZWFyVGltZW91dCh0aGlzLmRldGFjaE5vdGljZSk7XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuJGxpbms7XG4gICAgICAgIGRlbGV0ZSB0aGlzLiR6b29tO1xuICAgICAgICBkZWxldGUgdGhpcy4kaW1hZ2U7XG4gICAgICAgIGRlbGV0ZSB0aGlzLiRub3RpY2U7XG4gICAgICAgIGRlbGV0ZSB0aGlzLiRmbHlvdXQ7XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuaXNPcGVuO1xuICAgICAgICBkZWxldGUgdGhpcy5pc1JlYWR5O1xuICAgIH07XG5cbiAgICAvLyBqUXVlcnkgcGx1Z2luIHdyYXBwZXJcbiAgICAkLmZuLmVhc3lab29tID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGFwaSA9ICQuZGF0YSh0aGlzLCAnZWFzeVpvb20nKTtcblxuICAgICAgICAgICAgaWYgKCFhcGkpIHtcbiAgICAgICAgICAgICAgICAkLmRhdGEodGhpcywgJ2Vhc3lab29tJywgbmV3IEVhc3lab29tKHRoaXMsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYXBpLmlzT3BlbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYXBpLl9pbml0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gRWFzeVpvb207XG59KSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKi9cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgcHJlc3Rhc2hvcCBmcm9tICdwcmVzdGFzaG9wJztcblxucHJlc3Rhc2hvcC5yZXNwb25zaXZlID0gcHJlc3Rhc2hvcC5yZXNwb25zaXZlIHx8IHt9O1xuXG5wcmVzdGFzaG9wLnJlc3BvbnNpdmUuY3VycmVudF93aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xucHJlc3Rhc2hvcC5yZXNwb25zaXZlLm1pbl93aWR0aCA9IDc2ODtcbnByZXN0YXNob3AucmVzcG9uc2l2ZS5tb2JpbGUgPSBwcmVzdGFzaG9wLnJlc3BvbnNpdmUuY3VycmVudF93aWR0aCA8IHByZXN0YXNob3AucmVzcG9uc2l2ZS5taW5fd2lkdGg7XG5cbmZ1bmN0aW9uIHN3YXBDaGlsZHJlbihvYmoxLCBvYmoyKSB7XG4gIGNvbnN0IHRlbXAgPSBvYmoyLmNoaWxkcmVuKCkuZGV0YWNoKCk7XG4gIG9iajIuZW1wdHkoKS5hcHBlbmQob2JqMS5jaGlsZHJlbigpLmRldGFjaCgpKTtcbiAgb2JqMS5hcHBlbmQodGVtcCk7XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZU1vYmlsZVN0eWxlcygpIHtcbiAgaWYgKHByZXN0YXNob3AucmVzcG9uc2l2ZS5tb2JpbGUpIHtcbiAgICAkKFwiKltpZF49J19kZXNrdG9wXyddXCIpLmVhY2goKGlkeCwgZWwpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9ICQoYCMke2VsLmlkLnJlcGxhY2UoJ19kZXNrdG9wXycsICdfbW9iaWxlXycpfWApO1xuXG4gICAgICBpZiAodGFyZ2V0Lmxlbmd0aCkge1xuICAgICAgICBzd2FwQ2hpbGRyZW4oJChlbCksIHRhcmdldCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgJChcIipbaWRePSdfbW9iaWxlXyddXCIpLmVhY2goKGlkeCwgZWwpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9ICQoYCMke2VsLmlkLnJlcGxhY2UoJ19tb2JpbGVfJywgJ19kZXNrdG9wXycpfWApO1xuXG4gICAgICBpZiAodGFyZ2V0Lmxlbmd0aCkge1xuICAgICAgICBzd2FwQ2hpbGRyZW4oJChlbCksIHRhcmdldCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcHJlc3Rhc2hvcC5lbWl0KCdyZXNwb25zaXZlIHVwZGF0ZScsIHtcbiAgICBtb2JpbGU6IHByZXN0YXNob3AucmVzcG9uc2l2ZS5tb2JpbGUsXG4gIH0pO1xufVxuXG4kKHdpbmRvdykub24oJ3Jlc2l6ZScsICgpID0+IHtcbiAgY29uc3QgY3cgPSBwcmVzdGFzaG9wLnJlc3BvbnNpdmUuY3VycmVudF93aWR0aDtcbiAgY29uc3QgbXcgPSBwcmVzdGFzaG9wLnJlc3BvbnNpdmUubWluX3dpZHRoO1xuICBjb25zdCB3ID0gd2luZG93LmlubmVyV2lkdGg7XG4gIGNvbnN0IHRvZ2dsZSA9IChjdyA+PSBtdyAmJiB3IDwgbXcpIHx8IChjdyA8IG13ICYmIHcgPj0gbXcpO1xuXG4gIHByZXN0YXNob3AucmVzcG9uc2l2ZS5jdXJyZW50X3dpZHRoID0gdztcbiAgcHJlc3Rhc2hvcC5yZXNwb25zaXZlLm1vYmlsZSA9IHByZXN0YXNob3AucmVzcG9uc2l2ZS5jdXJyZW50X3dpZHRoIDwgcHJlc3Rhc2hvcC5yZXNwb25zaXZlLm1pbl93aWR0aDtcbiAgaWYgKHRvZ2dsZSkge1xuICAgIHRvZ2dsZU1vYmlsZVN0eWxlcygpO1xuICB9XG59KTtcblxuJChkb2N1bWVudCkucmVhZHkoKCkgPT4ge1xuICBpZiAocHJlc3Rhc2hvcC5yZXNwb25zaXZlLm1vYmlsZSkge1xuICAgIHRvZ2dsZU1vYmlsZVN0eWxlcygpO1xuICB9XG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjAgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqL1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBwcmVzdGFzaG9wIGZyb20gJ3ByZXN0YXNob3AnO1xuXG5mdW5jdGlvbiBzZXRVcENoZWNrb3V0KCkge1xuICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY2hlY2tvdXQudGVybXNMaW5rKS5vbignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGxldCB1cmwgPSAkKGV2ZW50LnRhcmdldCkuYXR0cignaHJlZicpO1xuXG4gICAgaWYgKHVybCkge1xuICAgICAgLy8gVE9ETzogSGFuZGxlIHJlcXVlc3QgaWYgbm8gcHJldHR5IFVSTFxuICAgICAgdXJsICs9ICc/Y29udGVudF9vbmx5PTEnO1xuICAgICAgJC5nZXQodXJsLCAoY29udGVudCkgPT4ge1xuICAgICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubW9kYWwpXG4gICAgICAgICAgLmZpbmQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5tb2RhbENvbnRlbnQpXG4gICAgICAgICAgLmh0bWwoJChjb250ZW50KS5maW5kKCcucGFnZS1jbXMnKS5jb250ZW50cygpKTtcbiAgICAgIH0pLmZhaWwoKHJlc3ApID0+IHtcbiAgICAgICAgcHJlc3Rhc2hvcC5lbWl0KCdoYW5kbGVFcnJvcicsIHtldmVudFR5cGU6ICdjbGlja1Rlcm1zJywgcmVzcH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLm1vZGFsKS5tb2RhbCgnc2hvdycpO1xuICB9KTtcblxuICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY2hlY2tvdXQuZ2lmdENoZWNrYm94KS5vbignY2xpY2snLCAoKSA9PiB7XG4gICAgJCgnI2dpZnQnKS5zbGlkZVRvZ2dsZSgpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdG9nZ2xlSW1hZ2UoKSB7XG4gIC8vIEFycm93IHNob3cvaGlkZSBkZXRhaWxzIENoZWNrb3V0IHBhZ2VcbiAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNoZWNrb3V0LmltYWdlc0xpbmspLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBpY29uID0gJCh0aGlzKS5maW5kKCdpLm1hdGVyaWFsLWljb25zJyk7XG5cbiAgICBpZiAoaWNvbi50ZXh0KCkgPT09ICdleHBhbmRfbW9yZScpIHtcbiAgICAgIGljb24udGV4dCgnZXhwYW5kX2xlc3MnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWNvbi50ZXh0KCdleHBhbmRfbW9yZScpO1xuICAgIH1cbiAgfSk7XG59XG5cbiQoZnVuY3Rpb24oKSB7XG4gIGlmICgkKCdib2R5I2NoZWNrb3V0JykubGVuZ3RoID09PSAxKSB7XG4gICAgc2V0VXBDaGVja291dCgpO1xuICAgIHRvZ2dsZUltYWdlKCk7XG4gIH1cblxuICAkKCcudGFicycpLnNpbXBsZXRhYnMoKVxuXG4gIHByZXN0YXNob3Aub24oJ3VwZGF0ZWREZWxpdmVyeUZvcm0nLCAocGFyYW1zKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBwYXJhbXMuZGVsaXZlcnlPcHRpb24gPT09ICd1bmRlZmluZWQnIHx8IHBhcmFtcy5kZWxpdmVyeU9wdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gSGlkZSBhbGwgY2FycmllciBleHRyYSBjb250ZW50IC4uLlxuICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5jaGVja291dC5jYXJyaWVyRXh0cmFDb250ZW50KS5oaWRlKCk7XG4gICAgLy8gYW5kIHNob3cgdGhlIG9uZSByZWxhdGVkIHRvIHRoZSBzZWxlY3RlZCBjYXJyaWVyXG4gICAgcGFyYW1zLmRlbGl2ZXJ5T3B0aW9uLm5leHQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5jaGVja291dC5jYXJyaWVyRXh0cmFDb250ZW50KS5zbGlkZURvd24oKTtcbiAgfSk7XG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjAgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqL1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBwcmVzdGFzaG9wIGZyb20gJ3ByZXN0YXNob3AnO1xuXG5mdW5jdGlvbiBpbml0Um1hSXRlbVNlbGVjdG9yKCkge1xuICAkKGAke3ByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMub3JkZXIucmV0dXJuRm9ybX0gdGFibGUgdGhlYWQgaW5wdXRbdHlwZT1jaGVja2JveF1gKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY2hlY2tlZCA9ICQodGhpcykucHJvcCgnY2hlY2tlZCcpO1xuICAgICQoYCR7cHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5vcmRlci5yZXR1cm5Gb3JtfSB0YWJsZSB0Ym9keSBpbnB1dFt0eXBlPWNoZWNrYm94XWApLmVhY2goKF8sIGNoZWNrYm94KSA9PiB7XG4gICAgICAkKGNoZWNrYm94KS5wcm9wKCdjaGVja2VkJywgY2hlY2tlZCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzZXR1cEN1c3RvbWVyU2NyaXB0cygpIHtcbiAgaWYgKCQoJ2JvZHkjb3JkZXItZGV0YWlsJykpIHtcbiAgICBpbml0Um1hSXRlbVNlbGVjdG9yKCk7XG4gIH1cbn1cblxuJChkb2N1bWVudCkucmVhZHkoc2V0dXBDdXN0b21lclNjcmlwdHMpO1xuIiwiLyohIFZlbG9jaXR5SlMub3JnICgxLjUuMikuIChDKSAyMDE0IEp1bGlhbiBTaGFwaXJvLiBNSVQgQGxpY2Vuc2U6IGVuLndpa2lwZWRpYS5vcmcvd2lraS9NSVRfTGljZW5zZSAqL1xyXG5cclxuLyoqKioqKioqKioqKioqKioqKioqKioqKipcclxuIFZlbG9jaXR5IGpRdWVyeSBTaGltXHJcbiAqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuLyohIFZlbG9jaXR5SlMub3JnIGpRdWVyeSBTaGltICgxLjAuMSkuIChDKSAyMDE0IFRoZSBqUXVlcnkgRm91bmRhdGlvbi4gTUlUIEBsaWNlbnNlOiBlbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UuICovXHJcblxyXG4vKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGpRdWVyeSBmdW5jdGlvbnMgdGhhdCBWZWxvY2l0eSByZWxpZXMgb24sIHRoZXJlYnkgcmVtb3ZpbmcgVmVsb2NpdHkncyBkZXBlbmRlbmN5IG9uIGEgZnVsbCBjb3B5IG9mIGpRdWVyeSwgYW5kIGFsbG93aW5nIGl0IHRvIHdvcmsgaW4gYW55IGVudmlyb25tZW50LiAqL1xyXG4vKiBUaGVzZSBzaGltbWVkIGZ1bmN0aW9ucyBhcmUgb25seSB1c2VkIGlmIGpRdWVyeSBpc24ndCBwcmVzZW50LiBJZiBib3RoIHRoaXMgc2hpbSBhbmQgalF1ZXJ5IGFyZSBsb2FkZWQsIFZlbG9jaXR5IGRlZmF1bHRzIHRvIGpRdWVyeSBwcm9wZXIuICovXHJcbi8qIEJyb3dzZXIgc3VwcG9ydDogVXNpbmcgdGhpcyBzaGltIGluc3RlYWQgb2YgalF1ZXJ5IHByb3BlciByZW1vdmVzIHN1cHBvcnQgZm9yIElFOC4gKi9cclxuXHJcbihmdW5jdGlvbih3aW5kb3cpIHtcclxuXHRcInVzZSBzdHJpY3RcIjtcclxuXHQvKioqKioqKioqKioqKioqXHJcblx0IFNldHVwXHJcblx0ICoqKioqKioqKioqKioqKi9cclxuXHJcblx0LyogSWYgalF1ZXJ5IGlzIGFscmVhZHkgbG9hZGVkLCB0aGVyZSdzIG5vIHBvaW50IGluIGxvYWRpbmcgdGhpcyBzaGltLiAqL1xyXG5cdGlmICh3aW5kb3cualF1ZXJ5KSB7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHQvKiBqUXVlcnkgYmFzZS4gKi9cclxuXHR2YXIgJCA9IGZ1bmN0aW9uKHNlbGVjdG9yLCBjb250ZXh0KSB7XHJcblx0XHRyZXR1cm4gbmV3ICQuZm4uaW5pdChzZWxlY3RvciwgY29udGV4dCk7XHJcblx0fTtcclxuXHJcblx0LyoqKioqKioqKioqKioqKioqKioqXHJcblx0IFByaXZhdGUgTWV0aG9kc1xyXG5cdCAqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0LyogalF1ZXJ5ICovXHJcblx0JC5pc1dpbmRvdyA9IGZ1bmN0aW9uKG9iaikge1xyXG5cdFx0LyoganNoaW50IGVxZXFlcTogZmFsc2UgKi9cclxuXHRcdHJldHVybiBvYmogJiYgb2JqID09PSBvYmoud2luZG93O1xyXG5cdH07XHJcblxyXG5cdC8qIGpRdWVyeSAqL1xyXG5cdCQudHlwZSA9IGZ1bmN0aW9uKG9iaikge1xyXG5cdFx0aWYgKCFvYmopIHtcclxuXHRcdFx0cmV0dXJuIG9iaiArIFwiXCI7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiID9cclxuXHRcdFx0XHRjbGFzczJ0eXBlW3RvU3RyaW5nLmNhbGwob2JqKV0gfHwgXCJvYmplY3RcIiA6XHJcblx0XHRcdFx0dHlwZW9mIG9iajtcclxuXHR9O1xyXG5cclxuXHQvKiBqUXVlcnkgKi9cclxuXHQkLmlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uKG9iaikge1xyXG5cdFx0cmV0dXJuICQudHlwZShvYmopID09PSBcImFycmF5XCI7XHJcblx0fTtcclxuXHJcblx0LyogalF1ZXJ5ICovXHJcblx0ZnVuY3Rpb24gaXNBcnJheWxpa2Uob2JqKSB7XHJcblx0XHR2YXIgbGVuZ3RoID0gb2JqLmxlbmd0aCxcclxuXHRcdFx0XHR0eXBlID0gJC50eXBlKG9iaik7XHJcblxyXG5cdFx0aWYgKHR5cGUgPT09IFwiZnVuY3Rpb25cIiB8fCAkLmlzV2luZG93KG9iaikpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChvYmoubm9kZVR5cGUgPT09IDEgJiYgbGVuZ3RoKSB7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0eXBlID09PSBcImFycmF5XCIgfHwgbGVuZ3RoID09PSAwIHx8IHR5cGVvZiBsZW5ndGggPT09IFwibnVtYmVyXCIgJiYgbGVuZ3RoID4gMCAmJiAobGVuZ3RoIC0gMSkgaW4gb2JqO1xyXG5cdH1cclxuXHJcblx0LyoqKioqKioqKioqKioqKlxyXG5cdCAkIE1ldGhvZHNcclxuXHQgKioqKioqKioqKioqKioqL1xyXG5cclxuXHQvKiBqUXVlcnk6IFN1cHBvcnQgcmVtb3ZlZCBmb3IgSUU8OS4gKi9cclxuXHQkLmlzUGxhaW5PYmplY3QgPSBmdW5jdGlvbihvYmopIHtcclxuXHRcdHZhciBrZXk7XHJcblxyXG5cdFx0aWYgKCFvYmogfHwgJC50eXBlKG9iaikgIT09IFwib2JqZWN0XCIgfHwgb2JqLm5vZGVUeXBlIHx8ICQuaXNXaW5kb3cob2JqKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0aWYgKG9iai5jb25zdHJ1Y3RvciAmJlxyXG5cdFx0XHRcdFx0IWhhc093bi5jYWxsKG9iaiwgXCJjb25zdHJ1Y3RvclwiKSAmJlxyXG5cdFx0XHRcdFx0IWhhc093bi5jYWxsKG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsIFwiaXNQcm90b3R5cGVPZlwiKSkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChrZXkgaW4gb2JqKSB7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGtleSA9PT0gdW5kZWZpbmVkIHx8IGhhc093bi5jYWxsKG9iaiwga2V5KTtcclxuXHR9O1xyXG5cclxuXHQvKiBqUXVlcnkgKi9cclxuXHQkLmVhY2ggPSBmdW5jdGlvbihvYmosIGNhbGxiYWNrLCBhcmdzKSB7XHJcblx0XHR2YXIgdmFsdWUsXHJcblx0XHRcdFx0aSA9IDAsXHJcblx0XHRcdFx0bGVuZ3RoID0gb2JqLmxlbmd0aCxcclxuXHRcdFx0XHRpc0FycmF5ID0gaXNBcnJheWxpa2Uob2JqKTtcclxuXHJcblx0XHRpZiAoYXJncykge1xyXG5cdFx0XHRpZiAoaXNBcnJheSkge1xyXG5cdFx0XHRcdGZvciAoOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdHZhbHVlID0gY2FsbGJhY2suYXBwbHkob2JqW2ldLCBhcmdzKTtcclxuXHJcblx0XHRcdFx0XHRpZiAodmFsdWUgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRmb3IgKGkgaW4gb2JqKSB7XHJcblx0XHRcdFx0XHRpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHZhbHVlID0gY2FsbGJhY2suYXBwbHkob2JqW2ldLCBhcmdzKTtcclxuXHJcblx0XHRcdFx0XHRpZiAodmFsdWUgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmIChpc0FycmF5KSB7XHJcblx0XHRcdFx0Zm9yICg7IGkgPCBsZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjay5jYWxsKG9ialtpXSwgaSwgb2JqW2ldKTtcclxuXHJcblx0XHRcdFx0XHRpZiAodmFsdWUgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRmb3IgKGkgaW4gb2JqKSB7XHJcblx0XHRcdFx0XHRpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHZhbHVlID0gY2FsbGJhY2suY2FsbChvYmpbaV0sIGksIG9ialtpXSk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKHZhbHVlID09PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gb2JqO1xyXG5cdH07XHJcblxyXG5cdC8qIEN1c3RvbSAqL1xyXG5cdCQuZGF0YSA9IGZ1bmN0aW9uKG5vZGUsIGtleSwgdmFsdWUpIHtcclxuXHRcdC8qICQuZ2V0RGF0YSgpICovXHJcblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHR2YXIgZ2V0SWQgPSBub2RlWyQuZXhwYW5kb10sXHJcblx0XHRcdFx0XHRzdG9yZSA9IGdldElkICYmIGNhY2hlW2dldElkXTtcclxuXHJcblx0XHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdHJldHVybiBzdG9yZTtcclxuXHRcdFx0fSBlbHNlIGlmIChzdG9yZSkge1xyXG5cdFx0XHRcdGlmIChrZXkgaW4gc3RvcmUpIHtcclxuXHRcdFx0XHRcdHJldHVybiBzdG9yZVtrZXldO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHQvKiAkLnNldERhdGEoKSAqL1xyXG5cdFx0fSBlbHNlIGlmIChrZXkgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHR2YXIgc2V0SWQgPSBub2RlWyQuZXhwYW5kb10gfHwgKG5vZGVbJC5leHBhbmRvXSA9ICsrJC51dWlkKTtcclxuXHJcblx0XHRcdGNhY2hlW3NldElkXSA9IGNhY2hlW3NldElkXSB8fCB7fTtcclxuXHRcdFx0Y2FjaGVbc2V0SWRdW2tleV0gPSB2YWx1ZTtcclxuXHJcblx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQvKiBDdXN0b20gKi9cclxuXHQkLnJlbW92ZURhdGEgPSBmdW5jdGlvbihub2RlLCBrZXlzKSB7XHJcblx0XHR2YXIgaWQgPSBub2RlWyQuZXhwYW5kb10sXHJcblx0XHRcdFx0c3RvcmUgPSBpZCAmJiBjYWNoZVtpZF07XHJcblxyXG5cdFx0aWYgKHN0b3JlKSB7XHJcblx0XHRcdC8vIENsZWFudXAgdGhlIGVudGlyZSBzdG9yZSBpZiBubyBrZXlzIGFyZSBwcm92aWRlZC5cclxuXHRcdFx0aWYgKCFrZXlzKSB7XHJcblx0XHRcdFx0ZGVsZXRlIGNhY2hlW2lkXTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQkLmVhY2goa2V5cywgZnVuY3Rpb24oXywga2V5KSB7XHJcblx0XHRcdFx0XHRkZWxldGUgc3RvcmVba2V5XTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qIGpRdWVyeSAqL1xyXG5cdCQuZXh0ZW5kID0gZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgc3JjLCBjb3B5SXNBcnJheSwgY29weSwgbmFtZSwgb3B0aW9ucywgY2xvbmUsXHJcblx0XHRcdFx0dGFyZ2V0ID0gYXJndW1lbnRzWzBdIHx8IHt9LFxyXG5cdFx0XHRcdGkgPSAxLFxyXG5cdFx0XHRcdGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXHJcblx0XHRcdFx0ZGVlcCA9IGZhbHNlO1xyXG5cclxuXHRcdGlmICh0eXBlb2YgdGFyZ2V0ID09PSBcImJvb2xlYW5cIikge1xyXG5cdFx0XHRkZWVwID0gdGFyZ2V0O1xyXG5cclxuXHRcdFx0dGFyZ2V0ID0gYXJndW1lbnRzW2ldIHx8IHt9O1xyXG5cdFx0XHRpKys7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHR5cGVvZiB0YXJnZXQgIT09IFwib2JqZWN0XCIgJiYgJC50eXBlKHRhcmdldCkgIT09IFwiZnVuY3Rpb25cIikge1xyXG5cdFx0XHR0YXJnZXQgPSB7fTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaSA9PT0gbGVuZ3RoKSB7XHJcblx0XHRcdHRhcmdldCA9IHRoaXM7XHJcblx0XHRcdGktLTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGlmICgob3B0aW9ucyA9IGFyZ3VtZW50c1tpXSkpIHtcclxuXHRcdFx0XHRmb3IgKG5hbWUgaW4gb3B0aW9ucykge1xyXG5cdFx0XHRcdFx0aWYgKCFvcHRpb25zLmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0c3JjID0gdGFyZ2V0W25hbWVdO1xyXG5cdFx0XHRcdFx0Y29weSA9IG9wdGlvbnNbbmFtZV07XHJcblxyXG5cdFx0XHRcdFx0aWYgKHRhcmdldCA9PT0gY29weSkge1xyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAoZGVlcCAmJiBjb3B5ICYmICgkLmlzUGxhaW5PYmplY3QoY29weSkgfHwgKGNvcHlJc0FycmF5ID0gJC5pc0FycmF5KGNvcHkpKSkpIHtcclxuXHRcdFx0XHRcdFx0aWYgKGNvcHlJc0FycmF5KSB7XHJcblx0XHRcdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0XHRjbG9uZSA9IHNyYyAmJiAkLmlzQXJyYXkoc3JjKSA/IHNyYyA6IFtdO1xyXG5cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRjbG9uZSA9IHNyYyAmJiAkLmlzUGxhaW5PYmplY3Qoc3JjKSA/IHNyYyA6IHt9O1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR0YXJnZXRbbmFtZV0gPSAkLmV4dGVuZChkZWVwLCBjbG9uZSwgY29weSk7XHJcblxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmIChjb3B5ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0dGFyZ2V0W25hbWVdID0gY29weTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGFyZ2V0O1xyXG5cdH07XHJcblxyXG5cdC8qIGpRdWVyeSAxLjQuMyAqL1xyXG5cdCQucXVldWUgPSBmdW5jdGlvbihlbGVtLCB0eXBlLCBkYXRhKSB7XHJcblx0XHRmdW5jdGlvbiAkbWFrZUFycmF5KGFyciwgcmVzdWx0cykge1xyXG5cdFx0XHR2YXIgcmV0ID0gcmVzdWx0cyB8fCBbXTtcclxuXHJcblx0XHRcdGlmIChhcnIpIHtcclxuXHRcdFx0XHRpZiAoaXNBcnJheWxpa2UoT2JqZWN0KGFycikpKSB7XHJcblx0XHRcdFx0XHQvKiAkLm1lcmdlICovXHJcblx0XHRcdFx0XHQoZnVuY3Rpb24oZmlyc3QsIHNlY29uZCkge1xyXG5cdFx0XHRcdFx0XHR2YXIgbGVuID0gK3NlY29uZC5sZW5ndGgsXHJcblx0XHRcdFx0XHRcdFx0XHRqID0gMCxcclxuXHRcdFx0XHRcdFx0XHRcdGkgPSBmaXJzdC5sZW5ndGg7XHJcblxyXG5cdFx0XHRcdFx0XHR3aGlsZSAoaiA8IGxlbikge1xyXG5cdFx0XHRcdFx0XHRcdGZpcnN0W2krK10gPSBzZWNvbmRbaisrXTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKGxlbiAhPT0gbGVuKSB7XHJcblx0XHRcdFx0XHRcdFx0d2hpbGUgKHNlY29uZFtqXSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRmaXJzdFtpKytdID0gc2Vjb25kW2orK107XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRmaXJzdC5sZW5ndGggPSBpO1xyXG5cclxuXHRcdFx0XHRcdFx0cmV0dXJuIGZpcnN0O1xyXG5cdFx0XHRcdFx0fSkocmV0LCB0eXBlb2YgYXJyID09PSBcInN0cmluZ1wiID8gW2Fycl0gOiBhcnIpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRbXS5wdXNoLmNhbGwocmV0LCBhcnIpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHJldDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIWVsZW0pIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHR5cGUgPSAodHlwZSB8fCBcImZ4XCIpICsgXCJxdWV1ZVwiO1xyXG5cclxuXHRcdHZhciBxID0gJC5kYXRhKGVsZW0sIHR5cGUpO1xyXG5cclxuXHRcdGlmICghZGF0YSkge1xyXG5cdFx0XHRyZXR1cm4gcSB8fCBbXTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIXEgfHwgJC5pc0FycmF5KGRhdGEpKSB7XHJcblx0XHRcdHEgPSAkLmRhdGEoZWxlbSwgdHlwZSwgJG1ha2VBcnJheShkYXRhKSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRxLnB1c2goZGF0YSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHE7XHJcblx0fTtcclxuXHJcblx0LyogalF1ZXJ5IDEuNC4zICovXHJcblx0JC5kZXF1ZXVlID0gZnVuY3Rpb24oZWxlbXMsIHR5cGUpIHtcclxuXHRcdC8qIEN1c3RvbTogRW1iZWQgZWxlbWVudCBpdGVyYXRpb24uICovXHJcblx0XHQkLmVhY2goZWxlbXMubm9kZVR5cGUgPyBbZWxlbXNdIDogZWxlbXMsIGZ1bmN0aW9uKGksIGVsZW0pIHtcclxuXHRcdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xyXG5cclxuXHRcdFx0dmFyIHF1ZXVlID0gJC5xdWV1ZShlbGVtLCB0eXBlKSxcclxuXHRcdFx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcclxuXHJcblx0XHRcdGlmIChmbiA9PT0gXCJpbnByb2dyZXNzXCIpIHtcclxuXHRcdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChmbikge1xyXG5cdFx0XHRcdGlmICh0eXBlID09PSBcImZ4XCIpIHtcclxuXHRcdFx0XHRcdHF1ZXVlLnVuc2hpZnQoXCJpbnByb2dyZXNzXCIpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Zm4uY2FsbChlbGVtLCBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdCQuZGVxdWV1ZShlbGVtLCB0eXBlKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fTtcclxuXHJcblx0LyoqKioqKioqKioqKioqKioqKlxyXG5cdCAkLmZuIE1ldGhvZHNcclxuXHQgKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHQvKiBqUXVlcnkgKi9cclxuXHQkLmZuID0gJC5wcm90b3R5cGUgPSB7XHJcblx0XHRpbml0OiBmdW5jdGlvbihzZWxlY3Rvcikge1xyXG5cdFx0XHQvKiBKdXN0IHJldHVybiB0aGUgZWxlbWVudCB3cmFwcGVkIGluc2lkZSBhbiBhcnJheTsgZG9uJ3QgcHJvY2VlZCB3aXRoIHRoZSBhY3R1YWwgalF1ZXJ5IG5vZGUgd3JhcHBpbmcgcHJvY2Vzcy4gKi9cclxuXHRcdFx0aWYgKHNlbGVjdG9yLm5vZGVUeXBlKSB7XHJcblx0XHRcdFx0dGhpc1swXSA9IHNlbGVjdG9yO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJOb3QgYSBET00gbm9kZS5cIik7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRvZmZzZXQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHQvKiBqUXVlcnkgYWx0ZXJlZCBjb2RlOiBEcm9wcGVkIGRpc2Nvbm5lY3RlZCBET00gbm9kZSBjaGVja2luZy4gKi9cclxuXHRcdFx0dmFyIGJveCA9IHRoaXNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID8gdGhpc1swXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA6IHt0b3A6IDAsIGxlZnQ6IDB9O1xyXG5cclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHR0b3A6IGJveC50b3AgKyAod2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LnNjcm9sbFRvcCB8fCAwKSAtIChkb2N1bWVudC5jbGllbnRUb3AgfHwgMCksXHJcblx0XHRcdFx0bGVmdDogYm94LmxlZnQgKyAod2luZG93LnBhZ2VYT2Zmc2V0IHx8IGRvY3VtZW50LnNjcm9sbExlZnQgfHwgMCkgLSAoZG9jdW1lbnQuY2xpZW50TGVmdCB8fCAwKVxyXG5cdFx0XHR9O1xyXG5cdFx0fSxcclxuXHRcdHBvc2l0aW9uOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0LyogalF1ZXJ5ICovXHJcblx0XHRcdGZ1bmN0aW9uIG9mZnNldFBhcmVudEZuKGVsZW0pIHtcclxuXHRcdFx0XHR2YXIgb2Zmc2V0UGFyZW50ID0gZWxlbS5vZmZzZXRQYXJlbnQ7XHJcblxyXG5cdFx0XHRcdHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgKG9mZnNldFBhcmVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcImh0bWxcIiAmJiBvZmZzZXRQYXJlbnQuc3R5bGUgJiYgb2Zmc2V0UGFyZW50LnN0eWxlLnBvc2l0aW9uLnRvTG93ZXJDYXNlKCkgPT09IFwic3RhdGljXCIpKSB7XHJcblx0XHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50O1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIG9mZnNldFBhcmVudCB8fCBkb2N1bWVudDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogWmVwdG8gKi9cclxuXHRcdFx0dmFyIGVsZW0gPSB0aGlzWzBdLFxyXG5cdFx0XHRcdFx0b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50Rm4oZWxlbSksXHJcblx0XHRcdFx0XHRvZmZzZXQgPSB0aGlzLm9mZnNldCgpLFxyXG5cdFx0XHRcdFx0cGFyZW50T2Zmc2V0ID0gL14oPzpib2R5fGh0bWwpJC9pLnRlc3Qob2Zmc2V0UGFyZW50Lm5vZGVOYW1lKSA/IHt0b3A6IDAsIGxlZnQ6IDB9IDogJChvZmZzZXRQYXJlbnQpLm9mZnNldCgpO1xyXG5cclxuXHRcdFx0b2Zmc2V0LnRvcCAtPSBwYXJzZUZsb2F0KGVsZW0uc3R5bGUubWFyZ2luVG9wKSB8fCAwO1xyXG5cdFx0XHRvZmZzZXQubGVmdCAtPSBwYXJzZUZsb2F0KGVsZW0uc3R5bGUubWFyZ2luTGVmdCkgfHwgMDtcclxuXHJcblx0XHRcdGlmIChvZmZzZXRQYXJlbnQuc3R5bGUpIHtcclxuXHRcdFx0XHRwYXJlbnRPZmZzZXQudG9wICs9IHBhcnNlRmxvYXQob2Zmc2V0UGFyZW50LnN0eWxlLmJvcmRlclRvcFdpZHRoKSB8fCAwO1xyXG5cdFx0XHRcdHBhcmVudE9mZnNldC5sZWZ0ICs9IHBhcnNlRmxvYXQob2Zmc2V0UGFyZW50LnN0eWxlLmJvcmRlckxlZnRXaWR0aCkgfHwgMDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHR0b3A6IG9mZnNldC50b3AgLSBwYXJlbnRPZmZzZXQudG9wLFxyXG5cdFx0XHRcdGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnRcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQvKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdCBQcml2YXRlIFZhcmlhYmxlc1xyXG5cdCAqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHQvKiBGb3IgJC5kYXRhKCkgKi9cclxuXHR2YXIgY2FjaGUgPSB7fTtcclxuXHQkLmV4cGFuZG8gPSBcInZlbG9jaXR5XCIgKyAobmV3IERhdGUoKS5nZXRUaW1lKCkpO1xyXG5cdCQudXVpZCA9IDA7XHJcblxyXG5cdC8qIEZvciAkLnF1ZXVlKCkgKi9cclxuXHR2YXIgY2xhc3MydHlwZSA9IHt9LFxyXG5cdFx0XHRoYXNPd24gPSBjbGFzczJ0eXBlLmhhc093blByb3BlcnR5LFxyXG5cdFx0XHR0b1N0cmluZyA9IGNsYXNzMnR5cGUudG9TdHJpbmc7XHJcblxyXG5cdHZhciB0eXBlcyA9IFwiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvclwiLnNwbGl0KFwiIFwiKTtcclxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRjbGFzczJ0eXBlW1wiW29iamVjdCBcIiArIHR5cGVzW2ldICsgXCJdXCJdID0gdHlwZXNbaV0udG9Mb3dlckNhc2UoKTtcclxuXHR9XHJcblxyXG5cdC8qIE1ha2VzICQobm9kZSkgcG9zc2libGUsIHdpdGhvdXQgaGF2aW5nIHRvIGNhbGwgaW5pdC4gKi9cclxuXHQkLmZuLmluaXQucHJvdG90eXBlID0gJC5mbjtcclxuXHJcblx0LyogR2xvYmFsaXplIFZlbG9jaXR5IG9udG8gdGhlIHdpbmRvdywgYW5kIGFzc2lnbiBpdHMgVXRpbGl0aWVzIHByb3BlcnR5LiAqL1xyXG5cdHdpbmRvdy5WZWxvY2l0eSA9IHtVdGlsaXRpZXM6ICR9O1xyXG59KSh3aW5kb3cpO1xyXG5cclxuLyoqKioqKioqKioqKioqKioqKlxyXG4gVmVsb2NpdHkuanNcclxuICoqKioqKioqKioqKioqKioqKi9cclxuXHJcbihmdW5jdGlvbihmYWN0b3J5KSB7XHJcblx0XCJ1c2Ugc3RyaWN0XCI7XHJcblx0LyogQ29tbW9uSlMgbW9kdWxlLiAqL1xyXG5cdGlmICh0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xyXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XHJcblx0XHQvKiBBTUQgbW9kdWxlLiAqL1xyXG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcclxuXHRcdGRlZmluZShmYWN0b3J5KTtcclxuXHRcdC8qIEJyb3dzZXIgZ2xvYmFscy4gKi9cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZmFjdG9yeSgpO1xyXG5cdH1cclxufShmdW5jdGlvbigpIHtcclxuXHRcInVzZSBzdHJpY3RcIjtcclxuXHRyZXR1cm4gZnVuY3Rpb24oZ2xvYmFsLCB3aW5kb3csIGRvY3VtZW50LCB1bmRlZmluZWQpIHtcclxuXHJcblx0XHQvKioqKioqKioqKioqKioqXHJcblx0XHQgU3VtbWFyeVxyXG5cdFx0ICoqKioqKioqKioqKioqKi9cclxuXHJcblx0XHQvKlxyXG5cdFx0IC0gQ1NTOiBDU1Mgc3RhY2sgdGhhdCB3b3JrcyBpbmRlcGVuZGVudGx5IGZyb20gdGhlIHJlc3Qgb2YgVmVsb2NpdHkuXHJcblx0XHQgLSBhbmltYXRlKCk6IENvcmUgYW5pbWF0aW9uIG1ldGhvZCB0aGF0IGl0ZXJhdGVzIG92ZXIgdGhlIHRhcmdldGVkIGVsZW1lbnRzIGFuZCBxdWV1ZXMgdGhlIGluY29taW5nIGNhbGwgb250byBlYWNoIGVsZW1lbnQgaW5kaXZpZHVhbGx5LlxyXG5cdFx0IC0gUHJlLVF1ZXVlaW5nOiBQcmVwYXJlIHRoZSBlbGVtZW50IGZvciBhbmltYXRpb24gYnkgaW5zdGFudGlhdGluZyBpdHMgZGF0YSBjYWNoZSBhbmQgcHJvY2Vzc2luZyB0aGUgY2FsbCdzIG9wdGlvbnMuXHJcblx0XHQgLSBRdWV1ZWluZzogVGhlIGxvZ2ljIHRoYXQgcnVucyBvbmNlIHRoZSBjYWxsIGhhcyByZWFjaGVkIGl0cyBwb2ludCBvZiBleGVjdXRpb24gaW4gdGhlIGVsZW1lbnQncyAkLnF1ZXVlKCkgc3RhY2suXHJcblx0XHQgTW9zdCBsb2dpYyBpcyBwbGFjZWQgaGVyZSB0byBhdm9pZCByaXNraW5nIGl0IGJlY29taW5nIHN0YWxlIChpZiB0aGUgZWxlbWVudCdzIHByb3BlcnRpZXMgaGF2ZSBjaGFuZ2VkKS5cclxuXHRcdCAtIFB1c2hpbmc6IENvbnNvbGlkYXRpb24gb2YgdGhlIHR3ZWVuIGRhdGEgZm9sbG93ZWQgYnkgaXRzIHB1c2ggb250byB0aGUgZ2xvYmFsIGluLXByb2dyZXNzIGNhbGxzIGNvbnRhaW5lci5cclxuXHRcdCAtIHRpY2soKTogVGhlIHNpbmdsZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgbG9vcCByZXNwb25zaWJsZSBmb3IgdHdlZW5pbmcgYWxsIGluLXByb2dyZXNzIGNhbGxzLlxyXG5cdFx0IC0gY29tcGxldGVDYWxsKCk6IEhhbmRsZXMgdGhlIGNsZWFudXAgcHJvY2VzcyBmb3IgZWFjaCBWZWxvY2l0eSBjYWxsLlxyXG5cdFx0ICovXHJcblxyXG5cdFx0LyoqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0IEhlbHBlciBGdW5jdGlvbnNcclxuXHRcdCAqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0LyogSUUgZGV0ZWN0aW9uLiBHaXN0OiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9qdWxpYW5zaGFwaXJvLzkwOTg2MDkgKi9cclxuXHRcdHZhciBJRSA9IChmdW5jdGlvbigpIHtcclxuXHRcdFx0aWYgKGRvY3VtZW50LmRvY3VtZW50TW9kZSkge1xyXG5cdFx0XHRcdHJldHVybiBkb2N1bWVudC5kb2N1bWVudE1vZGU7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDc7IGkgPiA0OyBpLS0pIHtcclxuXHRcdFx0XHRcdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cclxuXHRcdFx0XHRcdGRpdi5pbm5lckhUTUwgPSBcIjwhLS1baWYgSUUgXCIgKyBpICsgXCJdPjxzcGFuPjwvc3Bhbj48IVtlbmRpZl0tLT5cIjtcclxuXHJcblx0XHRcdFx0XHRpZiAoZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic3BhblwiKS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0ZGl2ID0gbnVsbDtcclxuXHJcblx0XHRcdFx0XHRcdHJldHVybiBpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH0pKCk7XHJcblxyXG5cdFx0LyogckFGIHNoaW0uIEdpc3Q6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2p1bGlhbnNoYXBpcm8vOTQ5NzUxMyAqL1xyXG5cdFx0dmFyIHJBRlNoaW0gPSAoZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciB0aW1lTGFzdCA9IDA7XHJcblxyXG5cdFx0XHRyZXR1cm4gd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCB3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcblx0XHRcdFx0dmFyIHRpbWVDdXJyZW50ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKSxcclxuXHRcdFx0XHRcdFx0dGltZURlbHRhO1xyXG5cclxuXHRcdFx0XHQvKiBEeW5hbWljYWxseSBzZXQgZGVsYXkgb24gYSBwZXItdGljayBiYXNpcyB0byBtYXRjaCA2MGZwcy4gKi9cclxuXHRcdFx0XHQvKiBUZWNobmlxdWUgYnkgRXJpayBNb2xsZXIuIE1JVCBsaWNlbnNlOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9wYXVsaXJpc2gvMTU3OTY3MSAqL1xyXG5cdFx0XHRcdHRpbWVEZWx0YSA9IE1hdGgubWF4KDAsIDE2IC0gKHRpbWVDdXJyZW50IC0gdGltZUxhc3QpKTtcclxuXHRcdFx0XHR0aW1lTGFzdCA9IHRpbWVDdXJyZW50ICsgdGltZURlbHRhO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdGNhbGxiYWNrKHRpbWVDdXJyZW50ICsgdGltZURlbHRhKTtcclxuXHRcdFx0XHR9LCB0aW1lRGVsdGEpO1xyXG5cdFx0XHR9O1xyXG5cdFx0fSkoKTtcclxuXHJcblx0XHR2YXIgcGVyZm9ybWFuY2UgPSAoZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBwZXJmID0gd2luZG93LnBlcmZvcm1hbmNlIHx8IHt9O1xyXG5cclxuXHRcdFx0aWYgKHR5cGVvZiBwZXJmLm5vdyAhPT0gXCJmdW5jdGlvblwiKSB7XHJcblx0XHRcdFx0dmFyIG5vd09mZnNldCA9IHBlcmYudGltaW5nICYmIHBlcmYudGltaW5nLm5hdmlnYXRpb25TdGFydCA/IHBlcmYudGltaW5nLm5hdmlnYXRpb25TdGFydCA6IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XHJcblxyXG5cdFx0XHRcdHBlcmYubm93ID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIG5vd09mZnNldDtcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBwZXJmO1xyXG5cdFx0fSkoKTtcclxuXHJcblx0XHQvKiBBcnJheSBjb21wYWN0aW5nLiBDb3B5cmlnaHQgTG8tRGFzaC4gTUlUIExpY2Vuc2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvbWFzdGVyL0xJQ0VOU0UudHh0ICovXHJcblx0XHRmdW5jdGlvbiBjb21wYWN0U3BhcnNlQXJyYXkoYXJyYXkpIHtcclxuXHRcdFx0dmFyIGluZGV4ID0gLTEsXHJcblx0XHRcdFx0XHRsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDAsXHJcblx0XHRcdFx0XHRyZXN1bHQgPSBbXTtcclxuXHJcblx0XHRcdHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XHJcblx0XHRcdFx0dmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuXHRcdFx0XHRpZiAodmFsdWUpIHtcclxuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKHZhbHVlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTaGltIGZvciBcImZpeGluZ1wiIElFJ3MgbGFjayBvZiBzdXBwb3J0IChJRSA8IDkpIGZvciBhcHBseWluZyBzbGljZVxyXG5cdFx0ICogb24gaG9zdCBvYmplY3RzIGxpa2UgTmFtZWROb2RlTWFwLCBOb2RlTGlzdCwgYW5kIEhUTUxDb2xsZWN0aW9uXHJcblx0XHQgKiAodGVjaG5pY2FsbHksIHNpbmNlIGhvc3Qgb2JqZWN0cyBoYXZlIGJlZW4gaW1wbGVtZW50YXRpb24tZGVwZW5kZW50LFxyXG5cdFx0ICogYXQgbGVhc3QgYmVmb3JlIEVTMjAxNSwgSUUgaGFzbid0IG5lZWRlZCB0byB3b3JrIHRoaXMgd2F5KS5cclxuXHRcdCAqIEFsc28gd29ya3Mgb24gc3RyaW5ncywgZml4ZXMgSUUgPCA5IHRvIGFsbG93IGFuIGV4cGxpY2l0IHVuZGVmaW5lZFxyXG5cdFx0ICogZm9yIHRoZSAybmQgYXJndW1lbnQgKGFzIGluIEZpcmVmb3gpLCBhbmQgcHJldmVudHMgZXJyb3JzIHdoZW5cclxuXHRcdCAqIGNhbGxlZCBvbiBvdGhlciBET00gb2JqZWN0cy5cclxuXHRcdCAqL1xyXG5cdFx0dmFyIF9zbGljZSA9IChmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHQvLyBDYW4ndCBiZSB1c2VkIHdpdGggRE9NIGVsZW1lbnRzIGluIElFIDwgOVxyXG5cdFx0XHRcdHNsaWNlLmNhbGwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTtcclxuXHRcdFx0XHRyZXR1cm4gc2xpY2U7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHsgLy8gRmFpbHMgaW4gSUUgPCA5XHJcblxyXG5cdFx0XHRcdC8vIFRoaXMgd2lsbCB3b3JrIGZvciBnZW51aW5lIGFycmF5cywgYXJyYXktbGlrZSBvYmplY3RzLCBcclxuXHRcdFx0XHQvLyBOYW1lZE5vZGVNYXAgKGF0dHJpYnV0ZXMsIGVudGl0aWVzLCBub3RhdGlvbnMpLFxyXG5cdFx0XHRcdC8vIE5vZGVMaXN0IChlLmcuLCBnZXRFbGVtZW50c0J5VGFnTmFtZSksIEhUTUxDb2xsZWN0aW9uIChlLmcuLCBjaGlsZE5vZGVzKSxcclxuXHRcdFx0XHQvLyBhbmQgd2lsbCBub3QgZmFpbCBvbiBvdGhlciBET00gb2JqZWN0cyAoYXMgZG8gRE9NIGVsZW1lbnRzIGluIElFIDwgOSlcclxuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oYmVnaW4sIGVuZCkge1xyXG5cdFx0XHRcdFx0dmFyIGxlbiA9IHRoaXMubGVuZ3RoO1xyXG5cclxuXHRcdFx0XHRcdGlmICh0eXBlb2YgYmVnaW4gIT09IFwibnVtYmVyXCIpIHtcclxuXHRcdFx0XHRcdFx0YmVnaW4gPSAwO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Ly8gSUUgPCA5IGdldHMgdW5oYXBweSB3aXRoIGFuIHVuZGVmaW5lZCBlbmQgYXJndW1lbnRcclxuXHRcdFx0XHRcdGlmICh0eXBlb2YgZW5kICE9PSBcIm51bWJlclwiKSB7XHJcblx0XHRcdFx0XHRcdGVuZCA9IGxlbjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdC8vIEZvciBuYXRpdmUgQXJyYXkgb2JqZWN0cywgd2UgdXNlIHRoZSBuYXRpdmUgc2xpY2UgZnVuY3Rpb25cclxuXHRcdFx0XHRcdGlmICh0aGlzLnNsaWNlKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBzbGljZS5jYWxsKHRoaXMsIGJlZ2luLCBlbmQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Ly8gRm9yIGFycmF5IGxpa2Ugb2JqZWN0IHdlIGhhbmRsZSBpdCBvdXJzZWx2ZXMuXHJcblx0XHRcdFx0XHR2YXIgaSxcclxuXHRcdFx0XHRcdFx0XHRjbG9uZWQgPSBbXSxcclxuXHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgbmVnYXRpdmUgdmFsdWUgZm9yIFwiYmVnaW5cIlxyXG5cdFx0XHRcdFx0XHRcdHN0YXJ0ID0gKGJlZ2luID49IDApID8gYmVnaW4gOiBNYXRoLm1heCgwLCBsZW4gKyBiZWdpbiksXHJcblx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIG5lZ2F0aXZlIHZhbHVlIGZvciBcImVuZFwiXHJcblx0XHRcdFx0XHRcdFx0dXBUbyA9IGVuZCA8IDAgPyBsZW4gKyBlbmQgOiBNYXRoLm1pbihlbmQsIGxlbiksXHJcblx0XHRcdFx0XHRcdFx0Ly8gQWN0dWFsIGV4cGVjdGVkIHNpemUgb2YgdGhlIHNsaWNlXHJcblx0XHRcdFx0XHRcdFx0c2l6ZSA9IHVwVG8gLSBzdGFydDtcclxuXHJcblx0XHRcdFx0XHRpZiAoc2l6ZSA+IDApIHtcclxuXHRcdFx0XHRcdFx0Y2xvbmVkID0gbmV3IEFycmF5KHNpemUpO1xyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5jaGFyQXQpIHtcclxuXHRcdFx0XHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjbG9uZWRbaV0gPSB0aGlzLmNoYXJBdChzdGFydCArIGkpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjbG9uZWRbaV0gPSB0aGlzW3N0YXJ0ICsgaV07XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXR1cm4gY2xvbmVkO1xyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHRcdH0pKCk7XHJcblxyXG5cdFx0LyogLmluZGV4T2YgZG9lc24ndCBleGlzdCBpbiBJRTw5ICovXHJcblx0XHR2YXIgX2luQXJyYXkgPSAoZnVuY3Rpb24oKSB7XHJcblx0XHRcdGlmIChBcnJheS5wcm90b3R5cGUuaW5jbHVkZXMpIHtcclxuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oYXJyLCB2YWwpIHtcclxuXHRcdFx0XHRcdHJldHVybiBhcnIuaW5jbHVkZXModmFsKTtcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChBcnJheS5wcm90b3R5cGUuaW5kZXhPZikge1xyXG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbihhcnIsIHZhbCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGFyci5pbmRleE9mKHZhbCkgPj0gMDtcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBmdW5jdGlvbihhcnIsIHZhbCkge1xyXG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRpZiAoYXJyW2ldID09PSB2YWwpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdGZ1bmN0aW9uIHNhbml0aXplRWxlbWVudHMoZWxlbWVudHMpIHtcclxuXHRcdFx0LyogVW53cmFwIGpRdWVyeS9aZXB0byBvYmplY3RzLiAqL1xyXG5cdFx0XHRpZiAoVHlwZS5pc1dyYXBwZWQoZWxlbWVudHMpKSB7XHJcblx0XHRcdFx0ZWxlbWVudHMgPSBfc2xpY2UuY2FsbChlbGVtZW50cyk7XHJcblx0XHRcdFx0LyogV3JhcCBhIHNpbmdsZSBlbGVtZW50IGluIGFuIGFycmF5IHNvIHRoYXQgJC5lYWNoKCkgY2FuIGl0ZXJhdGUgd2l0aCB0aGUgZWxlbWVudCBpbnN0ZWFkIG9mIGl0cyBub2RlJ3MgY2hpbGRyZW4uICovXHJcblx0XHRcdH0gZWxzZSBpZiAoVHlwZS5pc05vZGUoZWxlbWVudHMpKSB7XHJcblx0XHRcdFx0ZWxlbWVudHMgPSBbZWxlbWVudHNdO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gZWxlbWVudHM7XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIFR5cGUgPSB7XHJcblx0XHRcdGlzTnVtYmVyOiBmdW5jdGlvbih2YXJpYWJsZSkge1xyXG5cdFx0XHRcdHJldHVybiAodHlwZW9mIHZhcmlhYmxlID09PSBcIm51bWJlclwiKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0aXNTdHJpbmc6IGZ1bmN0aW9uKHZhcmlhYmxlKSB7XHJcblx0XHRcdFx0cmV0dXJuICh0eXBlb2YgdmFyaWFibGUgPT09IFwic3RyaW5nXCIpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRpc0FycmF5OiBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uKHZhcmlhYmxlKSB7XHJcblx0XHRcdFx0cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YXJpYWJsZSkgPT09IFwiW29iamVjdCBBcnJheV1cIjtcclxuXHRcdFx0fSxcclxuXHRcdFx0aXNGdW5jdGlvbjogZnVuY3Rpb24odmFyaWFibGUpIHtcclxuXHRcdFx0XHRyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhcmlhYmxlKSA9PT0gXCJbb2JqZWN0IEZ1bmN0aW9uXVwiO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRpc05vZGU6IGZ1bmN0aW9uKHZhcmlhYmxlKSB7XHJcblx0XHRcdFx0cmV0dXJuIHZhcmlhYmxlICYmIHZhcmlhYmxlLm5vZGVUeXBlO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKiBEZXRlcm1pbmUgaWYgdmFyaWFibGUgaXMgYW4gYXJyYXktbGlrZSB3cmFwcGVkIGpRdWVyeSwgWmVwdG8gb3Igc2ltaWxhciBlbGVtZW50LCBvciBldmVuIGEgTm9kZUxpc3QgZXRjLiAqL1xyXG5cdFx0XHQvKiBOT1RFOiBIVE1MRm9ybUVsZW1lbnRzIGFsc28gaGF2ZSBhIGxlbmd0aC4gKi9cclxuXHRcdFx0aXNXcmFwcGVkOiBmdW5jdGlvbih2YXJpYWJsZSkge1xyXG5cdFx0XHRcdHJldHVybiB2YXJpYWJsZVxyXG5cdFx0XHRcdFx0XHQmJiB2YXJpYWJsZSAhPT0gd2luZG93XHJcblx0XHRcdFx0XHRcdCYmIFR5cGUuaXNOdW1iZXIodmFyaWFibGUubGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHQmJiAhVHlwZS5pc1N0cmluZyh2YXJpYWJsZSlcclxuXHRcdFx0XHRcdFx0JiYgIVR5cGUuaXNGdW5jdGlvbih2YXJpYWJsZSlcclxuXHRcdFx0XHRcdFx0JiYgIVR5cGUuaXNOb2RlKHZhcmlhYmxlKVxyXG5cdFx0XHRcdFx0XHQmJiAodmFyaWFibGUubGVuZ3RoID09PSAwIHx8IFR5cGUuaXNOb2RlKHZhcmlhYmxlWzBdKSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGlzU1ZHOiBmdW5jdGlvbih2YXJpYWJsZSkge1xyXG5cdFx0XHRcdHJldHVybiB3aW5kb3cuU1ZHRWxlbWVudCAmJiAodmFyaWFibGUgaW5zdGFuY2VvZiB3aW5kb3cuU1ZHRWxlbWVudCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKHZhcmlhYmxlKSB7XHJcblx0XHRcdFx0Zm9yICh2YXIgbmFtZSBpbiB2YXJpYWJsZSkge1xyXG5cdFx0XHRcdFx0aWYgKHZhcmlhYmxlLmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cclxuXHRcdC8qKioqKioqKioqKioqKioqKlxyXG5cdFx0IERlcGVuZGVuY2llc1xyXG5cdFx0ICoqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdHZhciAkLFxyXG5cdFx0XHRcdGlzSlF1ZXJ5ID0gZmFsc2U7XHJcblxyXG5cdFx0aWYgKGdsb2JhbC5mbiAmJiBnbG9iYWwuZm4uanF1ZXJ5KSB7XHJcblx0XHRcdCQgPSBnbG9iYWw7XHJcblx0XHRcdGlzSlF1ZXJ5ID0gdHJ1ZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdCQgPSB3aW5kb3cuVmVsb2NpdHkuVXRpbGl0aWVzO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChJRSA8PSA4ICYmICFpc0pRdWVyeSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJWZWxvY2l0eTogSUU4IGFuZCBiZWxvdyByZXF1aXJlIGpRdWVyeSB0byBiZSBsb2FkZWQgYmVmb3JlIFZlbG9jaXR5LlwiKTtcclxuXHRcdH0gZWxzZSBpZiAoSUUgPD0gNykge1xyXG5cdFx0XHQvKiBSZXZlcnQgdG8galF1ZXJ5J3MgJC5hbmltYXRlKCksIGFuZCBsb3NlIFZlbG9jaXR5J3MgZXh0cmEgZmVhdHVyZXMuICovXHJcblx0XHRcdGpRdWVyeS5mbi52ZWxvY2l0eSA9IGpRdWVyeS5mbi5hbmltYXRlO1xyXG5cclxuXHRcdFx0LyogTm93IHRoYXQgJC5mbi52ZWxvY2l0eSBpcyBhbGlhc2VkLCBhYm9ydCB0aGlzIFZlbG9jaXR5IGRlY2xhcmF0aW9uLiAqL1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqKioqKioqKioqKioqKioqXHJcblx0XHQgQ29uc3RhbnRzXHJcblx0XHQgKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0dmFyIERVUkFUSU9OX0RFRkFVTFQgPSA0MDAsXHJcblx0XHRcdFx0RUFTSU5HX0RFRkFVTFQgPSBcInN3aW5nXCI7XHJcblxyXG5cdFx0LyoqKioqKioqKioqKipcclxuXHRcdCBTdGF0ZVxyXG5cdFx0ICoqKioqKioqKioqKiovXHJcblxyXG5cdFx0dmFyIFZlbG9jaXR5ID0ge1xyXG5cdFx0XHQvKiBDb250YWluZXIgZm9yIHBhZ2Utd2lkZSBWZWxvY2l0eSBzdGF0ZSBkYXRhLiAqL1xyXG5cdFx0XHRTdGF0ZToge1xyXG5cdFx0XHRcdC8qIERldGVjdCBtb2JpbGUgZGV2aWNlcyB0byBkZXRlcm1pbmUgaWYgbW9iaWxlSEEgc2hvdWxkIGJlIHR1cm5lZCBvbi4gKi9cclxuXHRcdFx0XHRpc01vYmlsZTogL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSxcclxuXHRcdFx0XHQvKiBUaGUgbW9iaWxlSEEgb3B0aW9uJ3MgYmVoYXZpb3IgY2hhbmdlcyBvbiBvbGRlciBBbmRyb2lkIGRldmljZXMgKEdpbmdlcmJyZWFkLCB2ZXJzaW9ucyAyLjMuMy0yLjMuNykuICovXHJcblx0XHRcdFx0aXNBbmRyb2lkOiAvQW5kcm9pZC9pLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpLFxyXG5cdFx0XHRcdGlzR2luZ2VyYnJlYWQ6IC9BbmRyb2lkIDJcXC4zXFwuWzMtN10vaS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSxcclxuXHRcdFx0XHRpc0Nocm9tZTogd2luZG93LmNocm9tZSxcclxuXHRcdFx0XHRpc0ZpcmVmb3g6IC9GaXJlZm94L2kudGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCksXHJcblx0XHRcdFx0LyogQ3JlYXRlIGEgY2FjaGVkIGVsZW1lbnQgZm9yIHJlLXVzZSB3aGVuIGNoZWNraW5nIGZvciBDU1MgcHJvcGVydHkgcHJlZml4ZXMuICovXHJcblx0XHRcdFx0cHJlZml4RWxlbWVudDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxcclxuXHRcdFx0XHQvKiBDYWNoZSBldmVyeSBwcmVmaXggbWF0Y2ggdG8gYXZvaWQgcmVwZWF0aW5nIGxvb2t1cHMuICovXHJcblx0XHRcdFx0cHJlZml4TWF0Y2hlczoge30sXHJcblx0XHRcdFx0LyogQ2FjaGUgdGhlIGFuY2hvciB1c2VkIGZvciBhbmltYXRpbmcgd2luZG93IHNjcm9sbGluZy4gKi9cclxuXHRcdFx0XHRzY3JvbGxBbmNob3I6IG51bGwsXHJcblx0XHRcdFx0LyogQ2FjaGUgdGhlIGJyb3dzZXItc3BlY2lmaWMgcHJvcGVydHkgbmFtZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzY3JvbGwgYW5jaG9yLiAqL1xyXG5cdFx0XHRcdHNjcm9sbFByb3BlcnR5TGVmdDogbnVsbCxcclxuXHRcdFx0XHRzY3JvbGxQcm9wZXJ0eVRvcDogbnVsbCxcclxuXHRcdFx0XHQvKiBLZWVwIHRyYWNrIG9mIHdoZXRoZXIgb3VyIFJBRiB0aWNrIGlzIHJ1bm5pbmcuICovXHJcblx0XHRcdFx0aXNUaWNraW5nOiBmYWxzZSxcclxuXHRcdFx0XHQvKiBDb250YWluZXIgZm9yIGV2ZXJ5IGluLXByb2dyZXNzIGNhbGwgdG8gVmVsb2NpdHkuICovXHJcblx0XHRcdFx0Y2FsbHM6IFtdLFxyXG5cdFx0XHRcdGRlbGF5ZWRFbGVtZW50czoge1xyXG5cdFx0XHRcdFx0Y291bnQ6IDBcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdC8qIFZlbG9jaXR5J3MgY3VzdG9tIENTUyBzdGFjay4gTWFkZSBnbG9iYWwgZm9yIHVuaXQgdGVzdGluZy4gKi9cclxuXHRcdFx0Q1NTOiB7LyogRGVmaW5lZCBiZWxvdy4gKi99LFxyXG5cdFx0XHQvKiBBIHNoaW0gb2YgdGhlIGpRdWVyeSB1dGlsaXR5IGZ1bmN0aW9ucyB1c2VkIGJ5IFZlbG9jaXR5IC0tIHByb3ZpZGVkIGJ5IFZlbG9jaXR5J3Mgb3B0aW9uYWwgalF1ZXJ5IHNoaW0uICovXHJcblx0XHRcdFV0aWxpdGllczogJCxcclxuXHRcdFx0LyogQ29udGFpbmVyIGZvciB0aGUgdXNlcidzIGN1c3RvbSBhbmltYXRpb24gcmVkaXJlY3RzIHRoYXQgYXJlIHJlZmVyZW5jZWQgYnkgbmFtZSBpbiBwbGFjZSBvZiB0aGUgcHJvcGVydGllcyBtYXAgYXJndW1lbnQuICovXHJcblx0XHRcdFJlZGlyZWN0czogey8qIE1hbnVhbGx5IHJlZ2lzdGVyZWQgYnkgdGhlIHVzZXIuICovfSxcclxuXHRcdFx0RWFzaW5nczogey8qIERlZmluZWQgYmVsb3cuICovfSxcclxuXHRcdFx0LyogQXR0ZW1wdCB0byB1c2UgRVM2IFByb21pc2VzIGJ5IGRlZmF1bHQuIFVzZXJzIGNhbiBvdmVycmlkZSB0aGlzIHdpdGggYSB0aGlyZC1wYXJ0eSBwcm9taXNlcyBsaWJyYXJ5LiAqL1xyXG5cdFx0XHRQcm9taXNlOiB3aW5kb3cuUHJvbWlzZSxcclxuXHRcdFx0LyogVmVsb2NpdHkgb3B0aW9uIGRlZmF1bHRzLCB3aGljaCBjYW4gYmUgb3ZlcnJpZGVuIGJ5IHRoZSB1c2VyLiAqL1xyXG5cdFx0XHRkZWZhdWx0czoge1xyXG5cdFx0XHRcdHF1ZXVlOiBcIlwiLFxyXG5cdFx0XHRcdGR1cmF0aW9uOiBEVVJBVElPTl9ERUZBVUxULFxyXG5cdFx0XHRcdGVhc2luZzogRUFTSU5HX0RFRkFVTFQsXHJcblx0XHRcdFx0YmVnaW46IHVuZGVmaW5lZCxcclxuXHRcdFx0XHRjb21wbGV0ZTogdW5kZWZpbmVkLFxyXG5cdFx0XHRcdHByb2dyZXNzOiB1bmRlZmluZWQsXHJcblx0XHRcdFx0ZGlzcGxheTogdW5kZWZpbmVkLFxyXG5cdFx0XHRcdHZpc2liaWxpdHk6IHVuZGVmaW5lZCxcclxuXHRcdFx0XHRsb29wOiBmYWxzZSxcclxuXHRcdFx0XHRkZWxheTogZmFsc2UsXHJcblx0XHRcdFx0bW9iaWxlSEE6IHRydWUsXHJcblx0XHRcdFx0LyogQWR2YW5jZWQ6IFNldCB0byBmYWxzZSB0byBwcmV2ZW50IHByb3BlcnR5IHZhbHVlcyBmcm9tIGJlaW5nIGNhY2hlZCBiZXR3ZWVuIGNvbnNlY3V0aXZlIFZlbG9jaXR5LWluaXRpYXRlZCBjaGFpbiBjYWxscy4gKi9cclxuXHRcdFx0XHRfY2FjaGVWYWx1ZXM6IHRydWUsXHJcblx0XHRcdFx0LyogQWR2YW5jZWQ6IFNldCB0byBmYWxzZSBpZiB0aGUgcHJvbWlzZSBzaG91bGQgYWx3YXlzIHJlc29sdmUgb24gZW1wdHkgZWxlbWVudCBsaXN0cy4gKi9cclxuXHRcdFx0XHRwcm9taXNlUmVqZWN0RW1wdHk6IHRydWVcclxuXHRcdFx0fSxcclxuXHRcdFx0LyogQSBkZXNpZ24gZ29hbCBvZiBWZWxvY2l0eSBpcyB0byBjYWNoZSBkYXRhIHdoZXJldmVyIHBvc3NpYmxlIGluIG9yZGVyIHRvIGF2b2lkIERPTSByZXF1ZXJ5aW5nLiBBY2NvcmRpbmdseSwgZWFjaCBlbGVtZW50IGhhcyBhIGRhdGEgY2FjaGUuICovXHJcblx0XHRcdGluaXQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuXHRcdFx0XHQkLmRhdGEoZWxlbWVudCwgXCJ2ZWxvY2l0eVwiLCB7XHJcblx0XHRcdFx0XHQvKiBTdG9yZSB3aGV0aGVyIHRoaXMgaXMgYW4gU1ZHIGVsZW1lbnQsIHNpbmNlIGl0cyBwcm9wZXJ0aWVzIGFyZSByZXRyaWV2ZWQgYW5kIHVwZGF0ZWQgZGlmZmVyZW50bHkgdGhhbiBzdGFuZGFyZCBIVE1MIGVsZW1lbnRzLiAqL1xyXG5cdFx0XHRcdFx0aXNTVkc6IFR5cGUuaXNTVkcoZWxlbWVudCksXHJcblx0XHRcdFx0XHQvKiBLZWVwIHRyYWNrIG9mIHdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgY3VycmVudGx5IGJlaW5nIGFuaW1hdGVkIGJ5IFZlbG9jaXR5LlxyXG5cdFx0XHRcdFx0IFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgdGhhdCBwcm9wZXJ0eSB2YWx1ZXMgYXJlIG5vdCB0cmFuc2ZlcnJlZCBiZXR3ZWVuIG5vbi1jb25zZWN1dGl2ZSAoc3RhbGUpIGNhbGxzLiAqL1xyXG5cdFx0XHRcdFx0aXNBbmltYXRpbmc6IGZhbHNlLFxyXG5cdFx0XHRcdFx0LyogQSByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQncyBsaXZlIGNvbXB1dGVkU3R5bGUgb2JqZWN0LiBMZWFybiBtb3JlIGhlcmU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0FQSS93aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSAqL1xyXG5cdFx0XHRcdFx0Y29tcHV0ZWRTdHlsZTogbnVsbCxcclxuXHRcdFx0XHRcdC8qIFR3ZWVuIGRhdGEgaXMgY2FjaGVkIGZvciBlYWNoIGFuaW1hdGlvbiBvbiB0aGUgZWxlbWVudCBzbyB0aGF0IGRhdGEgY2FuIGJlIHBhc3NlZCBhY3Jvc3MgY2FsbHMgLS1cclxuXHRcdFx0XHRcdCBpbiBwYXJ0aWN1bGFyLCBlbmQgdmFsdWVzIGFyZSB1c2VkIGFzIHN1YnNlcXVlbnQgc3RhcnQgdmFsdWVzIGluIGNvbnNlY3V0aXZlIFZlbG9jaXR5IGNhbGxzLiAqL1xyXG5cdFx0XHRcdFx0dHdlZW5zQ29udGFpbmVyOiBudWxsLFxyXG5cdFx0XHRcdFx0LyogVGhlIGZ1bGwgcm9vdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgZWFjaCBDU1MgaG9vayBiZWluZyBhbmltYXRlZCBvbiB0aGlzIGVsZW1lbnQgYXJlIGNhY2hlZCBzbyB0aGF0OlxyXG5cdFx0XHRcdFx0IDEpIENvbmN1cnJlbnRseS1hbmltYXRpbmcgaG9va3Mgc2hhcmluZyB0aGUgc2FtZSByb290IGNhbiBoYXZlIHRoZWlyIHJvb3QgdmFsdWVzJyBtZXJnZWQgaW50byBvbmUgd2hpbGUgdHdlZW5pbmcuXHJcblx0XHRcdFx0XHQgMikgUG9zdC1ob29rLWluamVjdGlvbiByb290IHZhbHVlcyBjYW4gYmUgdHJhbnNmZXJyZWQgb3ZlciB0byBjb25zZWN1dGl2ZWx5IGNoYWluZWQgVmVsb2NpdHkgY2FsbHMgYXMgc3RhcnRpbmcgcm9vdCB2YWx1ZXMuICovXHJcblx0XHRcdFx0XHRyb290UHJvcGVydHlWYWx1ZUNhY2hlOiB7fSxcclxuXHRcdFx0XHRcdC8qIEEgY2FjaGUgZm9yIHRyYW5zZm9ybSB1cGRhdGVzLCB3aGljaCBtdXN0IGJlIG1hbnVhbGx5IGZsdXNoZWQgdmlhIENTUy5mbHVzaFRyYW5zZm9ybUNhY2hlKCkuICovXHJcblx0XHRcdFx0XHR0cmFuc2Zvcm1DYWNoZToge31cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0LyogQSBwYXJhbGxlbCB0byBqUXVlcnkncyAkLmNzcygpLCB1c2VkIGZvciBnZXR0aW5nL3NldHRpbmcgVmVsb2NpdHkncyBob29rZWQgQ1NTIHByb3BlcnRpZXMuICovXHJcblx0XHRcdGhvb2s6IG51bGwsIC8qIERlZmluZWQgYmVsb3cuICovXHJcblx0XHRcdC8qIFZlbG9jaXR5LXdpZGUgYW5pbWF0aW9uIHRpbWUgcmVtYXBwaW5nIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiAqL1xyXG5cdFx0XHRtb2NrOiBmYWxzZSxcclxuXHRcdFx0dmVyc2lvbjoge21ham9yOiAxLCBtaW5vcjogNSwgcGF0Y2g6IDJ9LFxyXG5cdFx0XHQvKiBTZXQgdG8gMSBvciAyIChtb3N0IHZlcmJvc2UpIHRvIG91dHB1dCBkZWJ1ZyBpbmZvIHRvIGNvbnNvbGUuICovXHJcblx0XHRcdGRlYnVnOiBmYWxzZSxcclxuXHRcdFx0LyogVXNlIHJBRiBoaWdoIHJlc29sdXRpb24gdGltZXN0YW1wIHdoZW4gYXZhaWxhYmxlICovXHJcblx0XHRcdHRpbWVzdGFtcDogdHJ1ZSxcclxuXHRcdFx0LyogUGF1c2UgYWxsIGFuaW1hdGlvbnMgKi9cclxuXHRcdFx0cGF1c2VBbGw6IGZ1bmN0aW9uKHF1ZXVlTmFtZSkge1xyXG5cdFx0XHRcdHZhciBjdXJyZW50VGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XHJcblxyXG5cdFx0XHRcdCQuZWFjaChWZWxvY2l0eS5TdGF0ZS5jYWxscywgZnVuY3Rpb24oaSwgYWN0aXZlQ2FsbCkge1xyXG5cclxuXHRcdFx0XHRcdGlmIChhY3RpdmVDYWxsKSB7XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBJZiB3ZSBoYXZlIGEgcXVldWVOYW1lIGFuZCB0aGlzIGNhbGwgaXMgbm90IG9uIHRoYXQgcXVldWUsIHNraXAgKi9cclxuXHRcdFx0XHRcdFx0aWYgKHF1ZXVlTmFtZSAhPT0gdW5kZWZpbmVkICYmICgoYWN0aXZlQ2FsbFsyXS5xdWV1ZSAhPT0gcXVldWVOYW1lKSB8fCAoYWN0aXZlQ2FsbFsyXS5xdWV1ZSA9PT0gZmFsc2UpKSkge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBTZXQgY2FsbCB0byBwYXVzZWQgKi9cclxuXHRcdFx0XHRcdFx0YWN0aXZlQ2FsbFs1XSA9IHtcclxuXHRcdFx0XHRcdFx0XHRyZXN1bWU6IGZhbHNlXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdC8qIFBhdXNlIHRpbWVycyBvbiBhbnkgY3VycmVudGx5IGRlbGF5ZWQgY2FsbHMgKi9cclxuXHRcdFx0XHQkLmVhY2goVmVsb2NpdHkuU3RhdGUuZGVsYXllZEVsZW1lbnRzLCBmdW5jdGlvbihrLCBlbGVtZW50KSB7XHJcblx0XHRcdFx0XHRpZiAoIWVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cGF1c2VEZWxheU9uRWxlbWVudChlbGVtZW50LCBjdXJyZW50VGltZSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdC8qIFJlc3VtZSBhbGwgYW5pbWF0aW9ucyAqL1xyXG5cdFx0XHRyZXN1bWVBbGw6IGZ1bmN0aW9uKHF1ZXVlTmFtZSkge1xyXG5cdFx0XHRcdHZhciBjdXJyZW50VGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XHJcblxyXG5cdFx0XHRcdCQuZWFjaChWZWxvY2l0eS5TdGF0ZS5jYWxscywgZnVuY3Rpb24oaSwgYWN0aXZlQ2FsbCkge1xyXG5cclxuXHRcdFx0XHRcdGlmIChhY3RpdmVDYWxsKSB7XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBJZiB3ZSBoYXZlIGEgcXVldWVOYW1lIGFuZCB0aGlzIGNhbGwgaXMgbm90IG9uIHRoYXQgcXVldWUsIHNraXAgKi9cclxuXHRcdFx0XHRcdFx0aWYgKHF1ZXVlTmFtZSAhPT0gdW5kZWZpbmVkICYmICgoYWN0aXZlQ2FsbFsyXS5xdWV1ZSAhPT0gcXVldWVOYW1lKSB8fCAoYWN0aXZlQ2FsbFsyXS5xdWV1ZSA9PT0gZmFsc2UpKSkge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBTZXQgY2FsbCB0byByZXN1bWVkIGlmIGl0IHdhcyBwYXVzZWQgKi9cclxuXHRcdFx0XHRcdFx0aWYgKGFjdGl2ZUNhbGxbNV0pIHtcclxuXHRcdFx0XHRcdFx0XHRhY3RpdmVDYWxsWzVdLnJlc3VtZSA9IHRydWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHQvKiBSZXN1bWUgdGltZXJzIG9uIGFueSBjdXJyZW50bHkgZGVsYXllZCBjYWxscyAqL1xyXG5cdFx0XHRcdCQuZWFjaChWZWxvY2l0eS5TdGF0ZS5kZWxheWVkRWxlbWVudHMsIGZ1bmN0aW9uKGssIGVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdGlmICghZWxlbWVudCkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXN1bWVEZWxheU9uRWxlbWVudChlbGVtZW50LCBjdXJyZW50VGltZSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblxyXG5cdFx0LyogUmV0cmlldmUgdGhlIGFwcHJvcHJpYXRlIHNjcm9sbCBhbmNob3IgYW5kIHByb3BlcnR5IG5hbWUgZm9yIHRoZSBicm93c2VyOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93LnNjcm9sbFkgKi9cclxuXHRcdGlmICh3aW5kb3cucGFnZVlPZmZzZXQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRWZWxvY2l0eS5TdGF0ZS5zY3JvbGxBbmNob3IgPSB3aW5kb3c7XHJcblx0XHRcdFZlbG9jaXR5LlN0YXRlLnNjcm9sbFByb3BlcnR5TGVmdCA9IFwicGFnZVhPZmZzZXRcIjtcclxuXHRcdFx0VmVsb2NpdHkuU3RhdGUuc2Nyb2xsUHJvcGVydHlUb3AgPSBcInBhZ2VZT2Zmc2V0XCI7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRWZWxvY2l0eS5TdGF0ZS5zY3JvbGxBbmNob3IgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlIHx8IGRvY3VtZW50LmJvZHk7XHJcblx0XHRcdFZlbG9jaXR5LlN0YXRlLnNjcm9sbFByb3BlcnR5TGVmdCA9IFwic2Nyb2xsTGVmdFwiO1xyXG5cdFx0XHRWZWxvY2l0eS5TdGF0ZS5zY3JvbGxQcm9wZXJ0eVRvcCA9IFwic2Nyb2xsVG9wXCI7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogU2hvcnRoYW5kIGFsaWFzIGZvciBqUXVlcnkncyAkLmRhdGEoKSB1dGlsaXR5LiAqL1xyXG5cdFx0ZnVuY3Rpb24gRGF0YShlbGVtZW50KSB7XHJcblx0XHRcdC8qIEhhcmRjb2RlIGEgcmVmZXJlbmNlIHRvIHRoZSBwbHVnaW4gbmFtZS4gKi9cclxuXHRcdFx0dmFyIHJlc3BvbnNlID0gJC5kYXRhKGVsZW1lbnQsIFwidmVsb2NpdHlcIik7XHJcblxyXG5cdFx0XHQvKiBqUXVlcnkgPD0xLjQuMiByZXR1cm5zIG51bGwgaW5zdGVhZCBvZiB1bmRlZmluZWQgd2hlbiBubyBtYXRjaCBpcyBmb3VuZC4gV2Ugbm9ybWFsaXplIHRoaXMgYmVoYXZpb3IuICovXHJcblx0XHRcdHJldHVybiByZXNwb25zZSA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJlc3BvbnNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKioqKioqKioqKioqKlxyXG5cdFx0IERlbGF5IFRpbWVyXHJcblx0XHQgKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0ZnVuY3Rpb24gcGF1c2VEZWxheU9uRWxlbWVudChlbGVtZW50LCBjdXJyZW50VGltZSkge1xyXG5cdFx0XHQvKiBDaGVjayBmb3IgYW55IGRlbGF5IHRpbWVycywgYW5kIHBhdXNlIHRoZSBzZXQgdGltZW91dHMgKHdoaWxlIHByZXNlcnZpbmcgdGltZSBkYXRhKVxyXG5cdFx0XHQgdG8gYmUgcmVzdW1lZCB3aGVuIHRoZSBcInJlc3VtZVwiIGNvbW1hbmQgaXMgaXNzdWVkICovXHJcblx0XHRcdHZhciBkYXRhID0gRGF0YShlbGVtZW50KTtcclxuXHRcdFx0aWYgKGRhdGEgJiYgZGF0YS5kZWxheVRpbWVyICYmICFkYXRhLmRlbGF5UGF1c2VkKSB7XHJcblx0XHRcdFx0ZGF0YS5kZWxheVJlbWFpbmluZyA9IGRhdGEuZGVsYXkgLSBjdXJyZW50VGltZSArIGRhdGEuZGVsYXlCZWdpbjtcclxuXHRcdFx0XHRkYXRhLmRlbGF5UGF1c2VkID0gdHJ1ZTtcclxuXHRcdFx0XHRjbGVhclRpbWVvdXQoZGF0YS5kZWxheVRpbWVyLnNldFRpbWVvdXQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0ZnVuY3Rpb24gcmVzdW1lRGVsYXlPbkVsZW1lbnQoZWxlbWVudCwgY3VycmVudFRpbWUpIHtcclxuXHRcdFx0LyogQ2hlY2sgZm9yIGFueSBwYXVzZWQgdGltZXJzIGFuZCByZXN1bWUgKi9cclxuXHRcdFx0dmFyIGRhdGEgPSBEYXRhKGVsZW1lbnQpO1xyXG5cdFx0XHRpZiAoZGF0YSAmJiBkYXRhLmRlbGF5VGltZXIgJiYgZGF0YS5kZWxheVBhdXNlZCkge1xyXG5cdFx0XHRcdC8qIElmIHRoZSBlbGVtZW50IHdhcyBtaWQtZGVsYXksIHJlIGluaXRpYXRlIHRoZSB0aW1lb3V0IHdpdGggdGhlIHJlbWFpbmluZyBkZWxheSAqL1xyXG5cdFx0XHRcdGRhdGEuZGVsYXlQYXVzZWQgPSBmYWxzZTtcclxuXHRcdFx0XHRkYXRhLmRlbGF5VGltZXIuc2V0VGltZW91dCA9IHNldFRpbWVvdXQoZGF0YS5kZWxheVRpbWVyLm5leHQsIGRhdGEuZGVsYXlSZW1haW5pbmcpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cclxuXHJcblx0XHQvKioqKioqKioqKioqKipcclxuXHRcdCBFYXNpbmdcclxuXHRcdCAqKioqKioqKioqKioqKi9cclxuXHJcblx0XHQvKiBTdGVwIGVhc2luZyBnZW5lcmF0b3IuICovXHJcblx0XHRmdW5jdGlvbiBnZW5lcmF0ZVN0ZXAoc3RlcHMpIHtcclxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKHApIHtcclxuXHRcdFx0XHRyZXR1cm4gTWF0aC5yb3VuZChwICogc3RlcHMpICogKDEgLyBzdGVwcyk7XHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdFx0LyogQmV6aWVyIGN1cnZlIGZ1bmN0aW9uIGdlbmVyYXRvci4gQ29weXJpZ2h0IEdhZXRhbiBSZW5hdWRlYXUuIE1JVCBMaWNlbnNlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01JVF9MaWNlbnNlICovXHJcblx0XHRmdW5jdGlvbiBnZW5lcmF0ZUJlemllcihtWDEsIG1ZMSwgbVgyLCBtWTIpIHtcclxuXHRcdFx0dmFyIE5FV1RPTl9JVEVSQVRJT05TID0gNCxcclxuXHRcdFx0XHRcdE5FV1RPTl9NSU5fU0xPUEUgPSAwLjAwMSxcclxuXHRcdFx0XHRcdFNVQkRJVklTSU9OX1BSRUNJU0lPTiA9IDAuMDAwMDAwMSxcclxuXHRcdFx0XHRcdFNVQkRJVklTSU9OX01BWF9JVEVSQVRJT05TID0gMTAsXHJcblx0XHRcdFx0XHRrU3BsaW5lVGFibGVTaXplID0gMTEsXHJcblx0XHRcdFx0XHRrU2FtcGxlU3RlcFNpemUgPSAxLjAgLyAoa1NwbGluZVRhYmxlU2l6ZSAtIDEuMCksXHJcblx0XHRcdFx0XHRmbG9hdDMyQXJyYXlTdXBwb3J0ZWQgPSBcIkZsb2F0MzJBcnJheVwiIGluIHdpbmRvdztcclxuXHJcblx0XHRcdC8qIE11c3QgY29udGFpbiBmb3VyIGFyZ3VtZW50cy4gKi9cclxuXHRcdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggIT09IDQpIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qIEFyZ3VtZW50cyBtdXN0IGJlIG51bWJlcnMuICovXHJcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgNDsgKytpKSB7XHJcblx0XHRcdFx0aWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gIT09IFwibnVtYmVyXCIgfHwgaXNOYU4oYXJndW1lbnRzW2ldKSB8fCAhaXNGaW5pdGUoYXJndW1lbnRzW2ldKSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogWCB2YWx1ZXMgbXVzdCBiZSBpbiB0aGUgWzAsIDFdIHJhbmdlLiAqL1xyXG5cdFx0XHRtWDEgPSBNYXRoLm1pbihtWDEsIDEpO1xyXG5cdFx0XHRtWDIgPSBNYXRoLm1pbihtWDIsIDEpO1xyXG5cdFx0XHRtWDEgPSBNYXRoLm1heChtWDEsIDApO1xyXG5cdFx0XHRtWDIgPSBNYXRoLm1heChtWDIsIDApO1xyXG5cclxuXHRcdFx0dmFyIG1TYW1wbGVWYWx1ZXMgPSBmbG9hdDMyQXJyYXlTdXBwb3J0ZWQgPyBuZXcgRmxvYXQzMkFycmF5KGtTcGxpbmVUYWJsZVNpemUpIDogbmV3IEFycmF5KGtTcGxpbmVUYWJsZVNpemUpO1xyXG5cclxuXHRcdFx0ZnVuY3Rpb24gQShhQTEsIGFBMikge1xyXG5cdFx0XHRcdHJldHVybiAxLjAgLSAzLjAgKiBhQTIgKyAzLjAgKiBhQTE7XHJcblx0XHRcdH1cclxuXHRcdFx0ZnVuY3Rpb24gQihhQTEsIGFBMikge1xyXG5cdFx0XHRcdHJldHVybiAzLjAgKiBhQTIgLSA2LjAgKiBhQTE7XHJcblx0XHRcdH1cclxuXHRcdFx0ZnVuY3Rpb24gQyhhQTEpIHtcclxuXHRcdFx0XHRyZXR1cm4gMy4wICogYUExO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmdW5jdGlvbiBjYWxjQmV6aWVyKGFULCBhQTEsIGFBMikge1xyXG5cdFx0XHRcdHJldHVybiAoKEEoYUExLCBhQTIpICogYVQgKyBCKGFBMSwgYUEyKSkgKiBhVCArIEMoYUExKSkgKiBhVDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZnVuY3Rpb24gZ2V0U2xvcGUoYVQsIGFBMSwgYUEyKSB7XHJcblx0XHRcdFx0cmV0dXJuIDMuMCAqIEEoYUExLCBhQTIpICogYVQgKiBhVCArIDIuMCAqIEIoYUExLCBhQTIpICogYVQgKyBDKGFBMSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZ1bmN0aW9uIG5ld3RvblJhcGhzb25JdGVyYXRlKGFYLCBhR3Vlc3NUKSB7XHJcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBORVdUT05fSVRFUkFUSU9OUzsgKytpKSB7XHJcblx0XHRcdFx0XHR2YXIgY3VycmVudFNsb3BlID0gZ2V0U2xvcGUoYUd1ZXNzVCwgbVgxLCBtWDIpO1xyXG5cclxuXHRcdFx0XHRcdGlmIChjdXJyZW50U2xvcGUgPT09IDAuMCkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gYUd1ZXNzVDtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR2YXIgY3VycmVudFggPSBjYWxjQmV6aWVyKGFHdWVzc1QsIG1YMSwgbVgyKSAtIGFYO1xyXG5cdFx0XHRcdFx0YUd1ZXNzVCAtPSBjdXJyZW50WCAvIGN1cnJlbnRTbG9wZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiBhR3Vlc3NUO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmdW5jdGlvbiBjYWxjU2FtcGxlVmFsdWVzKCkge1xyXG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwga1NwbGluZVRhYmxlU2l6ZTsgKytpKSB7XHJcblx0XHRcdFx0XHRtU2FtcGxlVmFsdWVzW2ldID0gY2FsY0JlemllcihpICoga1NhbXBsZVN0ZXBTaXplLCBtWDEsIG1YMik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmdW5jdGlvbiBiaW5hcnlTdWJkaXZpZGUoYVgsIGFBLCBhQikge1xyXG5cdFx0XHRcdHZhciBjdXJyZW50WCwgY3VycmVudFQsIGkgPSAwO1xyXG5cclxuXHRcdFx0XHRkbyB7XHJcblx0XHRcdFx0XHRjdXJyZW50VCA9IGFBICsgKGFCIC0gYUEpIC8gMi4wO1xyXG5cdFx0XHRcdFx0Y3VycmVudFggPSBjYWxjQmV6aWVyKGN1cnJlbnRULCBtWDEsIG1YMikgLSBhWDtcclxuXHRcdFx0XHRcdGlmIChjdXJyZW50WCA+IDAuMCkge1xyXG5cdFx0XHRcdFx0XHRhQiA9IGN1cnJlbnRUO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0YUEgPSBjdXJyZW50VDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IHdoaWxlIChNYXRoLmFicyhjdXJyZW50WCkgPiBTVUJESVZJU0lPTl9QUkVDSVNJT04gJiYgKytpIDwgU1VCRElWSVNJT05fTUFYX0lURVJBVElPTlMpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gY3VycmVudFQ7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZ1bmN0aW9uIGdldFRGb3JYKGFYKSB7XHJcblx0XHRcdFx0dmFyIGludGVydmFsU3RhcnQgPSAwLjAsXHJcblx0XHRcdFx0XHRcdGN1cnJlbnRTYW1wbGUgPSAxLFxyXG5cdFx0XHRcdFx0XHRsYXN0U2FtcGxlID0ga1NwbGluZVRhYmxlU2l6ZSAtIDE7XHJcblxyXG5cdFx0XHRcdGZvciAoOyBjdXJyZW50U2FtcGxlICE9PSBsYXN0U2FtcGxlICYmIG1TYW1wbGVWYWx1ZXNbY3VycmVudFNhbXBsZV0gPD0gYVg7ICsrY3VycmVudFNhbXBsZSkge1xyXG5cdFx0XHRcdFx0aW50ZXJ2YWxTdGFydCArPSBrU2FtcGxlU3RlcFNpemU7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQtLWN1cnJlbnRTYW1wbGU7XHJcblxyXG5cdFx0XHRcdHZhciBkaXN0ID0gKGFYIC0gbVNhbXBsZVZhbHVlc1tjdXJyZW50U2FtcGxlXSkgLyAobVNhbXBsZVZhbHVlc1tjdXJyZW50U2FtcGxlICsgMV0gLSBtU2FtcGxlVmFsdWVzW2N1cnJlbnRTYW1wbGVdKSxcclxuXHRcdFx0XHRcdFx0Z3Vlc3NGb3JUID0gaW50ZXJ2YWxTdGFydCArIGRpc3QgKiBrU2FtcGxlU3RlcFNpemUsXHJcblx0XHRcdFx0XHRcdGluaXRpYWxTbG9wZSA9IGdldFNsb3BlKGd1ZXNzRm9yVCwgbVgxLCBtWDIpO1xyXG5cclxuXHRcdFx0XHRpZiAoaW5pdGlhbFNsb3BlID49IE5FV1RPTl9NSU5fU0xPUEUpIHtcclxuXHRcdFx0XHRcdHJldHVybiBuZXd0b25SYXBoc29uSXRlcmF0ZShhWCwgZ3Vlc3NGb3JUKTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKGluaXRpYWxTbG9wZSA9PT0gMC4wKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gZ3Vlc3NGb3JUO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gYmluYXJ5U3ViZGl2aWRlKGFYLCBpbnRlcnZhbFN0YXJ0LCBpbnRlcnZhbFN0YXJ0ICsga1NhbXBsZVN0ZXBTaXplKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciBfcHJlY29tcHV0ZWQgPSBmYWxzZTtcclxuXHJcblx0XHRcdGZ1bmN0aW9uIHByZWNvbXB1dGUoKSB7XHJcblx0XHRcdFx0X3ByZWNvbXB1dGVkID0gdHJ1ZTtcclxuXHRcdFx0XHRpZiAobVgxICE9PSBtWTEgfHwgbVgyICE9PSBtWTIpIHtcclxuXHRcdFx0XHRcdGNhbGNTYW1wbGVWYWx1ZXMoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciBmID0gZnVuY3Rpb24oYVgpIHtcclxuXHRcdFx0XHRpZiAoIV9wcmVjb21wdXRlZCkge1xyXG5cdFx0XHRcdFx0cHJlY29tcHV0ZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAobVgxID09PSBtWTEgJiYgbVgyID09PSBtWTIpIHtcclxuXHRcdFx0XHRcdHJldHVybiBhWDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGFYID09PSAwKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gMDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGFYID09PSAxKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gMTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiBjYWxjQmV6aWVyKGdldFRGb3JYKGFYKSwgbVkxLCBtWTIpO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0Zi5nZXRDb250cm9sUG9pbnRzID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0cmV0dXJuIFt7eDogbVgxLCB5OiBtWTF9LCB7eDogbVgyLCB5OiBtWTJ9XTtcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdHZhciBzdHIgPSBcImdlbmVyYXRlQmV6aWVyKFwiICsgW21YMSwgbVkxLCBtWDIsIG1ZMl0gKyBcIilcIjtcclxuXHRcdFx0Zi50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHJldHVybiBzdHI7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRyZXR1cm4gZjtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBSdW5nZS1LdXR0YSBzcHJpbmcgcGh5c2ljcyBmdW5jdGlvbiBnZW5lcmF0b3IuIEFkYXB0ZWQgZnJvbSBGcmFtZXIuanMsIGNvcHlyaWdodCBLb2VuIEJvay4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKi9cclxuXHRcdC8qIEdpdmVuIGEgdGVuc2lvbiwgZnJpY3Rpb24sIGFuZCBkdXJhdGlvbiwgYSBzaW11bGF0aW9uIGF0IDYwRlBTIHdpbGwgZmlyc3QgcnVuIHdpdGhvdXQgYSBkZWZpbmVkIGR1cmF0aW9uIGluIG9yZGVyIHRvIGNhbGN1bGF0ZSB0aGUgZnVsbCBwYXRoLiBBIHNlY29uZCBwYXNzXHJcblx0XHQgdGhlbiBhZGp1c3RzIHRoZSB0aW1lIGRlbHRhIC0tIHVzaW5nIHRoZSByZWxhdGlvbiBiZXR3ZWVuIGFjdHVhbCB0aW1lIGFuZCBkdXJhdGlvbiAtLSB0byBjYWxjdWxhdGUgdGhlIHBhdGggZm9yIHRoZSBkdXJhdGlvbi1jb25zdHJhaW5lZCBhbmltYXRpb24uICovXHJcblx0XHR2YXIgZ2VuZXJhdGVTcHJpbmdSSzQgPSAoZnVuY3Rpb24oKSB7XHJcblx0XHRcdGZ1bmN0aW9uIHNwcmluZ0FjY2VsZXJhdGlvbkZvclN0YXRlKHN0YXRlKSB7XHJcblx0XHRcdFx0cmV0dXJuICgtc3RhdGUudGVuc2lvbiAqIHN0YXRlLngpIC0gKHN0YXRlLmZyaWN0aW9uICogc3RhdGUudik7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZ1bmN0aW9uIHNwcmluZ0V2YWx1YXRlU3RhdGVXaXRoRGVyaXZhdGl2ZShpbml0aWFsU3RhdGUsIGR0LCBkZXJpdmF0aXZlKSB7XHJcblx0XHRcdFx0dmFyIHN0YXRlID0ge1xyXG5cdFx0XHRcdFx0eDogaW5pdGlhbFN0YXRlLnggKyBkZXJpdmF0aXZlLmR4ICogZHQsXHJcblx0XHRcdFx0XHR2OiBpbml0aWFsU3RhdGUudiArIGRlcml2YXRpdmUuZHYgKiBkdCxcclxuXHRcdFx0XHRcdHRlbnNpb246IGluaXRpYWxTdGF0ZS50ZW5zaW9uLFxyXG5cdFx0XHRcdFx0ZnJpY3Rpb246IGluaXRpYWxTdGF0ZS5mcmljdGlvblxyXG5cdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdHJldHVybiB7ZHg6IHN0YXRlLnYsIGR2OiBzcHJpbmdBY2NlbGVyYXRpb25Gb3JTdGF0ZShzdGF0ZSl9O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmdW5jdGlvbiBzcHJpbmdJbnRlZ3JhdGVTdGF0ZShzdGF0ZSwgZHQpIHtcclxuXHRcdFx0XHR2YXIgYSA9IHtcclxuXHRcdFx0XHRcdGR4OiBzdGF0ZS52LFxyXG5cdFx0XHRcdFx0ZHY6IHNwcmluZ0FjY2VsZXJhdGlvbkZvclN0YXRlKHN0YXRlKVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdGIgPSBzcHJpbmdFdmFsdWF0ZVN0YXRlV2l0aERlcml2YXRpdmUoc3RhdGUsIGR0ICogMC41LCBhKSxcclxuXHRcdFx0XHRcdFx0YyA9IHNwcmluZ0V2YWx1YXRlU3RhdGVXaXRoRGVyaXZhdGl2ZShzdGF0ZSwgZHQgKiAwLjUsIGIpLFxyXG5cdFx0XHRcdFx0XHRkID0gc3ByaW5nRXZhbHVhdGVTdGF0ZVdpdGhEZXJpdmF0aXZlKHN0YXRlLCBkdCwgYyksXHJcblx0XHRcdFx0XHRcdGR4ZHQgPSAxLjAgLyA2LjAgKiAoYS5keCArIDIuMCAqIChiLmR4ICsgYy5keCkgKyBkLmR4KSxcclxuXHRcdFx0XHRcdFx0ZHZkdCA9IDEuMCAvIDYuMCAqIChhLmR2ICsgMi4wICogKGIuZHYgKyBjLmR2KSArIGQuZHYpO1xyXG5cclxuXHRcdFx0XHRzdGF0ZS54ID0gc3RhdGUueCArIGR4ZHQgKiBkdDtcclxuXHRcdFx0XHRzdGF0ZS52ID0gc3RhdGUudiArIGR2ZHQgKiBkdDtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHN0YXRlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gc3ByaW5nUks0RmFjdG9yeSh0ZW5zaW9uLCBmcmljdGlvbiwgZHVyYXRpb24pIHtcclxuXHJcblx0XHRcdFx0dmFyIGluaXRTdGF0ZSA9IHtcclxuXHRcdFx0XHRcdHg6IC0xLFxyXG5cdFx0XHRcdFx0djogMCxcclxuXHRcdFx0XHRcdHRlbnNpb246IG51bGwsXHJcblx0XHRcdFx0XHRmcmljdGlvbjogbnVsbFxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHBhdGggPSBbMF0sXHJcblx0XHRcdFx0XHRcdHRpbWVfbGFwc2VkID0gMCxcclxuXHRcdFx0XHRcdFx0dG9sZXJhbmNlID0gMSAvIDEwMDAwLFxyXG5cdFx0XHRcdFx0XHREVCA9IDE2IC8gMTAwMCxcclxuXHRcdFx0XHRcdFx0aGF2ZV9kdXJhdGlvbiwgZHQsIGxhc3Rfc3RhdGU7XHJcblxyXG5cdFx0XHRcdHRlbnNpb24gPSBwYXJzZUZsb2F0KHRlbnNpb24pIHx8IDUwMDtcclxuXHRcdFx0XHRmcmljdGlvbiA9IHBhcnNlRmxvYXQoZnJpY3Rpb24pIHx8IDIwO1xyXG5cdFx0XHRcdGR1cmF0aW9uID0gZHVyYXRpb24gfHwgbnVsbDtcclxuXHJcblx0XHRcdFx0aW5pdFN0YXRlLnRlbnNpb24gPSB0ZW5zaW9uO1xyXG5cdFx0XHRcdGluaXRTdGF0ZS5mcmljdGlvbiA9IGZyaWN0aW9uO1xyXG5cclxuXHRcdFx0XHRoYXZlX2R1cmF0aW9uID0gZHVyYXRpb24gIT09IG51bGw7XHJcblxyXG5cdFx0XHRcdC8qIENhbGN1bGF0ZSB0aGUgYWN0dWFsIHRpbWUgaXQgdGFrZXMgZm9yIHRoaXMgYW5pbWF0aW9uIHRvIGNvbXBsZXRlIHdpdGggdGhlIHByb3ZpZGVkIGNvbmRpdGlvbnMuICovXHJcblx0XHRcdFx0aWYgKGhhdmVfZHVyYXRpb24pIHtcclxuXHRcdFx0XHRcdC8qIFJ1biB0aGUgc2ltdWxhdGlvbiB3aXRob3V0IGEgZHVyYXRpb24uICovXHJcblx0XHRcdFx0XHR0aW1lX2xhcHNlZCA9IHNwcmluZ1JLNEZhY3RvcnkodGVuc2lvbiwgZnJpY3Rpb24pO1xyXG5cdFx0XHRcdFx0LyogQ29tcHV0ZSB0aGUgYWRqdXN0ZWQgdGltZSBkZWx0YS4gKi9cclxuXHRcdFx0XHRcdGR0ID0gdGltZV9sYXBzZWQgLyBkdXJhdGlvbiAqIERUO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRkdCA9IERUO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0d2hpbGUgKHRydWUpIHtcclxuXHRcdFx0XHRcdC8qIE5leHQvc3RlcCBmdW5jdGlvbiAuKi9cclxuXHRcdFx0XHRcdGxhc3Rfc3RhdGUgPSBzcHJpbmdJbnRlZ3JhdGVTdGF0ZShsYXN0X3N0YXRlIHx8IGluaXRTdGF0ZSwgZHQpO1xyXG5cdFx0XHRcdFx0LyogU3RvcmUgdGhlIHBvc2l0aW9uLiAqL1xyXG5cdFx0XHRcdFx0cGF0aC5wdXNoKDEgKyBsYXN0X3N0YXRlLngpO1xyXG5cdFx0XHRcdFx0dGltZV9sYXBzZWQgKz0gMTY7XHJcblx0XHRcdFx0XHQvKiBJZiB0aGUgY2hhbmdlIHRocmVzaG9sZCBpcyByZWFjaGVkLCBicmVhay4gKi9cclxuXHRcdFx0XHRcdGlmICghKE1hdGguYWJzKGxhc3Rfc3RhdGUueCkgPiB0b2xlcmFuY2UgJiYgTWF0aC5hYnMobGFzdF9zdGF0ZS52KSA+IHRvbGVyYW5jZSkpIHtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKiBJZiBkdXJhdGlvbiBpcyBub3QgZGVmaW5lZCwgcmV0dXJuIHRoZSBhY3R1YWwgdGltZSByZXF1aXJlZCBmb3IgY29tcGxldGluZyB0aGlzIGFuaW1hdGlvbi4gT3RoZXJ3aXNlLCByZXR1cm4gYSBjbG9zdXJlIHRoYXQgaG9sZHMgdGhlXHJcblx0XHRcdFx0IGNvbXB1dGVkIHBhdGggYW5kIHJldHVybnMgYSBzbmFwc2hvdCBvZiB0aGUgcG9zaXRpb24gYWNjb3JkaW5nIHRvIGEgZ2l2ZW4gcGVyY2VudENvbXBsZXRlLiAqL1xyXG5cdFx0XHRcdHJldHVybiAhaGF2ZV9kdXJhdGlvbiA/IHRpbWVfbGFwc2VkIDogZnVuY3Rpb24ocGVyY2VudENvbXBsZXRlKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gcGF0aFsgKHBlcmNlbnRDb21wbGV0ZSAqIChwYXRoLmxlbmd0aCAtIDEpKSB8IDAgXTtcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9O1xyXG5cdFx0fSgpKTtcclxuXHJcblx0XHQvKiBqUXVlcnkgZWFzaW5ncy4gKi9cclxuXHRcdFZlbG9jaXR5LkVhc2luZ3MgPSB7XHJcblx0XHRcdGxpbmVhcjogZnVuY3Rpb24ocCkge1xyXG5cdFx0XHRcdHJldHVybiBwO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRzd2luZzogZnVuY3Rpb24ocCkge1xyXG5cdFx0XHRcdHJldHVybiAwLjUgLSBNYXRoLmNvcyhwICogTWF0aC5QSSkgLyAyO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKiBCb251cyBcInNwcmluZ1wiIGVhc2luZywgd2hpY2ggaXMgYSBsZXNzIGV4YWdnZXJhdGVkIHZlcnNpb24gb2YgZWFzZUluT3V0RWxhc3RpYy4gKi9cclxuXHRcdFx0c3ByaW5nOiBmdW5jdGlvbihwKSB7XHJcblx0XHRcdFx0cmV0dXJuIDEgLSAoTWF0aC5jb3MocCAqIDQuNSAqIE1hdGguUEkpICogTWF0aC5leHAoLXAgKiA2KSk7XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblxyXG5cdFx0LyogQ1NTMyBhbmQgUm9iZXJ0IFBlbm5lciBlYXNpbmdzLiAqL1xyXG5cdFx0JC5lYWNoKFxyXG5cdFx0XHRcdFtcclxuXHRcdFx0XHRcdFtcImVhc2VcIiwgWzAuMjUsIDAuMSwgMC4yNSwgMS4wXV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlLWluXCIsIFswLjQyLCAwLjAsIDEuMDAsIDEuMF1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZS1vdXRcIiwgWzAuMDAsIDAuMCwgMC41OCwgMS4wXV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlLWluLW91dFwiLCBbMC40MiwgMC4wLCAwLjU4LCAxLjBdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VJblNpbmVcIiwgWzAuNDcsIDAsIDAuNzQ1LCAwLjcxNV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZU91dFNpbmVcIiwgWzAuMzksIDAuNTc1LCAwLjU2NSwgMV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZUluT3V0U2luZVwiLCBbMC40NDUsIDAuMDUsIDAuNTUsIDAuOTVdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VJblF1YWRcIiwgWzAuNTUsIDAuMDg1LCAwLjY4LCAwLjUzXV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlT3V0UXVhZFwiLCBbMC4yNSwgMC40NiwgMC40NSwgMC45NF1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZUluT3V0UXVhZFwiLCBbMC40NTUsIDAuMDMsIDAuNTE1LCAwLjk1NV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZUluQ3ViaWNcIiwgWzAuNTUsIDAuMDU1LCAwLjY3NSwgMC4xOV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZU91dEN1YmljXCIsIFswLjIxNSwgMC42MSwgMC4zNTUsIDFdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VJbk91dEN1YmljXCIsIFswLjY0NSwgMC4wNDUsIDAuMzU1LCAxXV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlSW5RdWFydFwiLCBbMC44OTUsIDAuMDMsIDAuNjg1LCAwLjIyXV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlT3V0UXVhcnRcIiwgWzAuMTY1LCAwLjg0LCAwLjQ0LCAxXV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlSW5PdXRRdWFydFwiLCBbMC43NywgMCwgMC4xNzUsIDFdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VJblF1aW50XCIsIFswLjc1NSwgMC4wNSwgMC44NTUsIDAuMDZdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VPdXRRdWludFwiLCBbMC4yMywgMSwgMC4zMiwgMV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZUluT3V0UXVpbnRcIiwgWzAuODYsIDAsIDAuMDcsIDFdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VJbkV4cG9cIiwgWzAuOTUsIDAuMDUsIDAuNzk1LCAwLjAzNV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZU91dEV4cG9cIiwgWzAuMTksIDEsIDAuMjIsIDFdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VJbk91dEV4cG9cIiwgWzEsIDAsIDAsIDFdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VJbkNpcmNcIiwgWzAuNiwgMC4wNCwgMC45OCwgMC4zMzVdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VPdXRDaXJjXCIsIFswLjA3NSwgMC44MiwgMC4xNjUsIDFdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VJbk91dENpcmNcIiwgWzAuNzg1LCAwLjEzNSwgMC4xNSwgMC44Nl1dXHJcblx0XHRcdFx0XSwgZnVuY3Rpb24oaSwgZWFzaW5nQXJyYXkpIHtcclxuXHRcdFx0VmVsb2NpdHkuRWFzaW5nc1tlYXNpbmdBcnJheVswXV0gPSBnZW5lcmF0ZUJlemllci5hcHBseShudWxsLCBlYXNpbmdBcnJheVsxXSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHQvKiBEZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIGVhc2luZyB0eXBlIGdpdmVuIGFuIGVhc2luZyBpbnB1dC4gKi9cclxuXHRcdGZ1bmN0aW9uIGdldEVhc2luZyh2YWx1ZSwgZHVyYXRpb24pIHtcclxuXHRcdFx0dmFyIGVhc2luZyA9IHZhbHVlO1xyXG5cclxuXHRcdFx0LyogVGhlIGVhc2luZyBvcHRpb24gY2FuIGVpdGhlciBiZSBhIHN0cmluZyB0aGF0IHJlZmVyZW5jZXMgYSBwcmUtcmVnaXN0ZXJlZCBlYXNpbmcsXHJcblx0XHRcdCBvciBpdCBjYW4gYmUgYSB0d28tL2ZvdXItaXRlbSBhcnJheSBvZiBpbnRlZ2VycyB0byBiZSBjb252ZXJ0ZWQgaW50byBhIGJlemllci9zcHJpbmcgZnVuY3Rpb24uICovXHJcblx0XHRcdGlmIChUeXBlLmlzU3RyaW5nKHZhbHVlKSkge1xyXG5cdFx0XHRcdC8qIEVuc3VyZSB0aGF0IHRoZSBlYXNpbmcgaGFzIGJlZW4gYXNzaWduZWQgdG8galF1ZXJ5J3MgVmVsb2NpdHkuRWFzaW5ncyBvYmplY3QuICovXHJcblx0XHRcdFx0aWYgKCFWZWxvY2l0eS5FYXNpbmdzW3ZhbHVlXSkge1xyXG5cdFx0XHRcdFx0ZWFzaW5nID0gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2UgaWYgKFR5cGUuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAxKSB7XHJcblx0XHRcdFx0ZWFzaW5nID0gZ2VuZXJhdGVTdGVwLmFwcGx5KG51bGwsIHZhbHVlKTtcclxuXHRcdFx0fSBlbHNlIGlmIChUeXBlLmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMikge1xyXG5cdFx0XHRcdC8qIHNwcmluZ1JLNCBtdXN0IGJlIHBhc3NlZCB0aGUgYW5pbWF0aW9uJ3MgZHVyYXRpb24uICovXHJcblx0XHRcdFx0LyogTm90ZTogSWYgdGhlIHNwcmluZ1JLNCBhcnJheSBjb250YWlucyBub24tbnVtYmVycywgZ2VuZXJhdGVTcHJpbmdSSzQoKSByZXR1cm5zIGFuIGVhc2luZ1xyXG5cdFx0XHRcdCBmdW5jdGlvbiBnZW5lcmF0ZWQgd2l0aCBkZWZhdWx0IHRlbnNpb24gYW5kIGZyaWN0aW9uIHZhbHVlcy4gKi9cclxuXHRcdFx0XHRlYXNpbmcgPSBnZW5lcmF0ZVNwcmluZ1JLNC5hcHBseShudWxsLCB2YWx1ZS5jb25jYXQoW2R1cmF0aW9uXSkpO1xyXG5cdFx0XHR9IGVsc2UgaWYgKFR5cGUuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSA0KSB7XHJcblx0XHRcdFx0LyogTm90ZTogSWYgdGhlIGJlemllciBhcnJheSBjb250YWlucyBub24tbnVtYmVycywgZ2VuZXJhdGVCZXppZXIoKSByZXR1cm5zIGZhbHNlLiAqL1xyXG5cdFx0XHRcdGVhc2luZyA9IGdlbmVyYXRlQmV6aWVyLmFwcGx5KG51bGwsIHZhbHVlKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRlYXNpbmcgPSBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogUmV2ZXJ0IHRvIHRoZSBWZWxvY2l0eS13aWRlIGRlZmF1bHQgZWFzaW5nIHR5cGUsIG9yIGZhbGwgYmFjayB0byBcInN3aW5nXCIgKHdoaWNoIGlzIGFsc28galF1ZXJ5J3MgZGVmYXVsdClcclxuXHRcdFx0IGlmIHRoZSBWZWxvY2l0eS13aWRlIGRlZmF1bHQgaGFzIGJlZW4gaW5jb3JyZWN0bHkgbW9kaWZpZWQuICovXHJcblx0XHRcdGlmIChlYXNpbmcgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0aWYgKFZlbG9jaXR5LkVhc2luZ3NbVmVsb2NpdHkuZGVmYXVsdHMuZWFzaW5nXSkge1xyXG5cdFx0XHRcdFx0ZWFzaW5nID0gVmVsb2NpdHkuZGVmYXVsdHMuZWFzaW5nO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRlYXNpbmcgPSBFQVNJTkdfREVGQVVMVDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBlYXNpbmc7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqKioqKioqKioqKioqKioqXHJcblx0XHQgQ1NTIFN0YWNrXHJcblx0XHQgKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0LyogVGhlIENTUyBvYmplY3QgaXMgYSBoaWdobHkgY29uZGVuc2VkIGFuZCBwZXJmb3JtYW50IENTUyBzdGFjayB0aGF0IGZ1bGx5IHJlcGxhY2VzIGpRdWVyeSdzLlxyXG5cdFx0IEl0IGhhbmRsZXMgdGhlIHZhbGlkYXRpb24sIGdldHRpbmcsIGFuZCBzZXR0aW5nIG9mIGJvdGggc3RhbmRhcmQgQ1NTIHByb3BlcnRpZXMgYW5kIENTUyBwcm9wZXJ0eSBob29rcy4gKi9cclxuXHRcdC8qIE5vdGU6IEEgXCJDU1NcIiBzaG9ydGhhbmQgaXMgYWxpYXNlZCBzbyB0aGF0IG91ciBjb2RlIGlzIGVhc2llciB0byByZWFkLiAqL1xyXG5cdFx0dmFyIENTUyA9IFZlbG9jaXR5LkNTUyA9IHtcclxuXHRcdFx0LyoqKioqKioqKioqKipcclxuXHRcdFx0IFJlZ0V4XHJcblx0XHRcdCAqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0UmVnRXg6IHtcclxuXHRcdFx0XHRpc0hleDogL14jKFtBLWZcXGRdezN9KXsxLDJ9JC9pLFxyXG5cdFx0XHRcdC8qIFVud3JhcCBhIHByb3BlcnR5IHZhbHVlJ3Mgc3Vycm91bmRpbmcgdGV4dCwgZS5nLiBcInJnYmEoNCwgMywgMiwgMSlcIiA9PT4gXCI0LCAzLCAyLCAxXCIgYW5kIFwicmVjdCg0cHggM3B4IDJweCAxcHgpXCIgPT0+IFwiNHB4IDNweCAycHggMXB4XCIuICovXHJcblx0XHRcdFx0dmFsdWVVbndyYXA6IC9eW0Etel0rXFwoKC4qKVxcKSQvaSxcclxuXHRcdFx0XHR3cmFwcGVkVmFsdWVBbHJlYWR5RXh0cmFjdGVkOiAvWzAtOS5dKyBbMC05Ll0rIFswLTkuXSsoIFswLTkuXSspPy8sXHJcblx0XHRcdFx0LyogU3BsaXQgYSBtdWx0aS12YWx1ZSBwcm9wZXJ0eSBpbnRvIGFuIGFycmF5IG9mIHN1YnZhbHVlcywgZS5nLiBcInJnYmEoNCwgMywgMiwgMSkgNHB4IDNweCAycHggMXB4XCIgPT0+IFsgXCJyZ2JhKDQsIDMsIDIsIDEpXCIsIFwiNHB4XCIsIFwiM3B4XCIsIFwiMnB4XCIsIFwiMXB4XCIgXS4gKi9cclxuXHRcdFx0XHR2YWx1ZVNwbGl0OiAvKFtBLXpdK1xcKC4rXFwpKXwoKFtBLXowLTkjLS5dKz8pKD89XFxzfCQpKS9pZ1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKioqKioqKioqKioqXHJcblx0XHRcdCBMaXN0c1xyXG5cdFx0XHQgKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0TGlzdHM6IHtcclxuXHRcdFx0XHRjb2xvcnM6IFtcImZpbGxcIiwgXCJzdHJva2VcIiwgXCJzdG9wQ29sb3JcIiwgXCJjb2xvclwiLCBcImJhY2tncm91bmRDb2xvclwiLCBcImJvcmRlckNvbG9yXCIsIFwiYm9yZGVyVG9wQ29sb3JcIiwgXCJib3JkZXJSaWdodENvbG9yXCIsIFwiYm9yZGVyQm90dG9tQ29sb3JcIiwgXCJib3JkZXJMZWZ0Q29sb3JcIiwgXCJvdXRsaW5lQ29sb3JcIl0sXHJcblx0XHRcdFx0dHJhbnNmb3Jtc0Jhc2U6IFtcInRyYW5zbGF0ZVhcIiwgXCJ0cmFuc2xhdGVZXCIsIFwic2NhbGVcIiwgXCJzY2FsZVhcIiwgXCJzY2FsZVlcIiwgXCJza2V3WFwiLCBcInNrZXdZXCIsIFwicm90YXRlWlwiXSxcclxuXHRcdFx0XHR0cmFuc2Zvcm1zM0Q6IFtcInRyYW5zZm9ybVBlcnNwZWN0aXZlXCIsIFwidHJhbnNsYXRlWlwiLCBcInNjYWxlWlwiLCBcInJvdGF0ZVhcIiwgXCJyb3RhdGVZXCJdLFxyXG5cdFx0XHRcdHVuaXRzOiBbXHJcblx0XHRcdFx0XHRcIiVcIiwgLy8gcmVsYXRpdmVcclxuXHRcdFx0XHRcdFwiZW1cIiwgXCJleFwiLCBcImNoXCIsIFwicmVtXCIsIC8vIGZvbnQgcmVsYXRpdmVcclxuXHRcdFx0XHRcdFwidndcIiwgXCJ2aFwiLCBcInZtaW5cIiwgXCJ2bWF4XCIsIC8vIHZpZXdwb3J0IHJlbGF0aXZlXHJcblx0XHRcdFx0XHRcImNtXCIsIFwibW1cIiwgXCJRXCIsIFwiaW5cIiwgXCJwY1wiLCBcInB0XCIsIFwicHhcIiwgLy8gYWJzb2x1dGUgbGVuZ3Roc1xyXG5cdFx0XHRcdFx0XCJkZWdcIiwgXCJncmFkXCIsIFwicmFkXCIsIFwidHVyblwiLCAvLyBhbmdsZXNcclxuXHRcdFx0XHRcdFwic1wiLCBcIm1zXCIgLy8gdGltZVxyXG5cdFx0XHRcdF0sXHJcblx0XHRcdFx0Y29sb3JOYW1lczoge1xyXG5cdFx0XHRcdFx0XCJhbGljZWJsdWVcIjogXCIyNDAsMjQ4LDI1NVwiLFxyXG5cdFx0XHRcdFx0XCJhbnRpcXVld2hpdGVcIjogXCIyNTAsMjM1LDIxNVwiLFxyXG5cdFx0XHRcdFx0XCJhcXVhbWFyaW5lXCI6IFwiMTI3LDI1NSwyMTJcIixcclxuXHRcdFx0XHRcdFwiYXF1YVwiOiBcIjAsMjU1LDI1NVwiLFxyXG5cdFx0XHRcdFx0XCJhenVyZVwiOiBcIjI0MCwyNTUsMjU1XCIsXHJcblx0XHRcdFx0XHRcImJlaWdlXCI6IFwiMjQ1LDI0NSwyMjBcIixcclxuXHRcdFx0XHRcdFwiYmlzcXVlXCI6IFwiMjU1LDIyOCwxOTZcIixcclxuXHRcdFx0XHRcdFwiYmxhY2tcIjogXCIwLDAsMFwiLFxyXG5cdFx0XHRcdFx0XCJibGFuY2hlZGFsbW9uZFwiOiBcIjI1NSwyMzUsMjA1XCIsXHJcblx0XHRcdFx0XHRcImJsdWV2aW9sZXRcIjogXCIxMzgsNDMsMjI2XCIsXHJcblx0XHRcdFx0XHRcImJsdWVcIjogXCIwLDAsMjU1XCIsXHJcblx0XHRcdFx0XHRcImJyb3duXCI6IFwiMTY1LDQyLDQyXCIsXHJcblx0XHRcdFx0XHRcImJ1cmx5d29vZFwiOiBcIjIyMiwxODQsMTM1XCIsXHJcblx0XHRcdFx0XHRcImNhZGV0Ymx1ZVwiOiBcIjk1LDE1OCwxNjBcIixcclxuXHRcdFx0XHRcdFwiY2hhcnRyZXVzZVwiOiBcIjEyNywyNTUsMFwiLFxyXG5cdFx0XHRcdFx0XCJjaG9jb2xhdGVcIjogXCIyMTAsMTA1LDMwXCIsXHJcblx0XHRcdFx0XHRcImNvcmFsXCI6IFwiMjU1LDEyNyw4MFwiLFxyXG5cdFx0XHRcdFx0XCJjb3JuZmxvd2VyYmx1ZVwiOiBcIjEwMCwxNDksMjM3XCIsXHJcblx0XHRcdFx0XHRcImNvcm5zaWxrXCI6IFwiMjU1LDI0OCwyMjBcIixcclxuXHRcdFx0XHRcdFwiY3JpbXNvblwiOiBcIjIyMCwyMCw2MFwiLFxyXG5cdFx0XHRcdFx0XCJjeWFuXCI6IFwiMCwyNTUsMjU1XCIsXHJcblx0XHRcdFx0XHRcImRhcmtibHVlXCI6IFwiMCwwLDEzOVwiLFxyXG5cdFx0XHRcdFx0XCJkYXJrY3lhblwiOiBcIjAsMTM5LDEzOVwiLFxyXG5cdFx0XHRcdFx0XCJkYXJrZ29sZGVucm9kXCI6IFwiMTg0LDEzNCwxMVwiLFxyXG5cdFx0XHRcdFx0XCJkYXJrZ3JheVwiOiBcIjE2OSwxNjksMTY5XCIsXHJcblx0XHRcdFx0XHRcImRhcmtncmV5XCI6IFwiMTY5LDE2OSwxNjlcIixcclxuXHRcdFx0XHRcdFwiZGFya2dyZWVuXCI6IFwiMCwxMDAsMFwiLFxyXG5cdFx0XHRcdFx0XCJkYXJra2hha2lcIjogXCIxODksMTgzLDEwN1wiLFxyXG5cdFx0XHRcdFx0XCJkYXJrbWFnZW50YVwiOiBcIjEzOSwwLDEzOVwiLFxyXG5cdFx0XHRcdFx0XCJkYXJrb2xpdmVncmVlblwiOiBcIjg1LDEwNyw0N1wiLFxyXG5cdFx0XHRcdFx0XCJkYXJrb3JhbmdlXCI6IFwiMjU1LDE0MCwwXCIsXHJcblx0XHRcdFx0XHRcImRhcmtvcmNoaWRcIjogXCIxNTMsNTAsMjA0XCIsXHJcblx0XHRcdFx0XHRcImRhcmtyZWRcIjogXCIxMzksMCwwXCIsXHJcblx0XHRcdFx0XHRcImRhcmtzYWxtb25cIjogXCIyMzMsMTUwLDEyMlwiLFxyXG5cdFx0XHRcdFx0XCJkYXJrc2VhZ3JlZW5cIjogXCIxNDMsMTg4LDE0M1wiLFxyXG5cdFx0XHRcdFx0XCJkYXJrc2xhdGVibHVlXCI6IFwiNzIsNjEsMTM5XCIsXHJcblx0XHRcdFx0XHRcImRhcmtzbGF0ZWdyYXlcIjogXCI0Nyw3OSw3OVwiLFxyXG5cdFx0XHRcdFx0XCJkYXJrdHVycXVvaXNlXCI6IFwiMCwyMDYsMjA5XCIsXHJcblx0XHRcdFx0XHRcImRhcmt2aW9sZXRcIjogXCIxNDgsMCwyMTFcIixcclxuXHRcdFx0XHRcdFwiZGVlcHBpbmtcIjogXCIyNTUsMjAsMTQ3XCIsXHJcblx0XHRcdFx0XHRcImRlZXBza3libHVlXCI6IFwiMCwxOTEsMjU1XCIsXHJcblx0XHRcdFx0XHRcImRpbWdyYXlcIjogXCIxMDUsMTA1LDEwNVwiLFxyXG5cdFx0XHRcdFx0XCJkaW1ncmV5XCI6IFwiMTA1LDEwNSwxMDVcIixcclxuXHRcdFx0XHRcdFwiZG9kZ2VyYmx1ZVwiOiBcIjMwLDE0NCwyNTVcIixcclxuXHRcdFx0XHRcdFwiZmlyZWJyaWNrXCI6IFwiMTc4LDM0LDM0XCIsXHJcblx0XHRcdFx0XHRcImZsb3JhbHdoaXRlXCI6IFwiMjU1LDI1MCwyNDBcIixcclxuXHRcdFx0XHRcdFwiZm9yZXN0Z3JlZW5cIjogXCIzNCwxMzksMzRcIixcclxuXHRcdFx0XHRcdFwiZnVjaHNpYVwiOiBcIjI1NSwwLDI1NVwiLFxyXG5cdFx0XHRcdFx0XCJnYWluc2Jvcm9cIjogXCIyMjAsMjIwLDIyMFwiLFxyXG5cdFx0XHRcdFx0XCJnaG9zdHdoaXRlXCI6IFwiMjQ4LDI0OCwyNTVcIixcclxuXHRcdFx0XHRcdFwiZ29sZFwiOiBcIjI1NSwyMTUsMFwiLFxyXG5cdFx0XHRcdFx0XCJnb2xkZW5yb2RcIjogXCIyMTgsMTY1LDMyXCIsXHJcblx0XHRcdFx0XHRcImdyYXlcIjogXCIxMjgsMTI4LDEyOFwiLFxyXG5cdFx0XHRcdFx0XCJncmV5XCI6IFwiMTI4LDEyOCwxMjhcIixcclxuXHRcdFx0XHRcdFwiZ3JlZW55ZWxsb3dcIjogXCIxNzMsMjU1LDQ3XCIsXHJcblx0XHRcdFx0XHRcImdyZWVuXCI6IFwiMCwxMjgsMFwiLFxyXG5cdFx0XHRcdFx0XCJob25leWRld1wiOiBcIjI0MCwyNTUsMjQwXCIsXHJcblx0XHRcdFx0XHRcImhvdHBpbmtcIjogXCIyNTUsMTA1LDE4MFwiLFxyXG5cdFx0XHRcdFx0XCJpbmRpYW5yZWRcIjogXCIyMDUsOTIsOTJcIixcclxuXHRcdFx0XHRcdFwiaW5kaWdvXCI6IFwiNzUsMCwxMzBcIixcclxuXHRcdFx0XHRcdFwiaXZvcnlcIjogXCIyNTUsMjU1LDI0MFwiLFxyXG5cdFx0XHRcdFx0XCJraGFraVwiOiBcIjI0MCwyMzAsMTQwXCIsXHJcblx0XHRcdFx0XHRcImxhdmVuZGVyYmx1c2hcIjogXCIyNTUsMjQwLDI0NVwiLFxyXG5cdFx0XHRcdFx0XCJsYXZlbmRlclwiOiBcIjIzMCwyMzAsMjUwXCIsXHJcblx0XHRcdFx0XHRcImxhd25ncmVlblwiOiBcIjEyNCwyNTIsMFwiLFxyXG5cdFx0XHRcdFx0XCJsZW1vbmNoaWZmb25cIjogXCIyNTUsMjUwLDIwNVwiLFxyXG5cdFx0XHRcdFx0XCJsaWdodGJsdWVcIjogXCIxNzMsMjE2LDIzMFwiLFxyXG5cdFx0XHRcdFx0XCJsaWdodGNvcmFsXCI6IFwiMjQwLDEyOCwxMjhcIixcclxuXHRcdFx0XHRcdFwibGlnaHRjeWFuXCI6IFwiMjI0LDI1NSwyNTVcIixcclxuXHRcdFx0XHRcdFwibGlnaHRnb2xkZW5yb2R5ZWxsb3dcIjogXCIyNTAsMjUwLDIxMFwiLFxyXG5cdFx0XHRcdFx0XCJsaWdodGdyYXlcIjogXCIyMTEsMjExLDIxMVwiLFxyXG5cdFx0XHRcdFx0XCJsaWdodGdyZXlcIjogXCIyMTEsMjExLDIxMVwiLFxyXG5cdFx0XHRcdFx0XCJsaWdodGdyZWVuXCI6IFwiMTQ0LDIzOCwxNDRcIixcclxuXHRcdFx0XHRcdFwibGlnaHRwaW5rXCI6IFwiMjU1LDE4MiwxOTNcIixcclxuXHRcdFx0XHRcdFwibGlnaHRzYWxtb25cIjogXCIyNTUsMTYwLDEyMlwiLFxyXG5cdFx0XHRcdFx0XCJsaWdodHNlYWdyZWVuXCI6IFwiMzIsMTc4LDE3MFwiLFxyXG5cdFx0XHRcdFx0XCJsaWdodHNreWJsdWVcIjogXCIxMzUsMjA2LDI1MFwiLFxyXG5cdFx0XHRcdFx0XCJsaWdodHNsYXRlZ3JheVwiOiBcIjExOSwxMzYsMTUzXCIsXHJcblx0XHRcdFx0XHRcImxpZ2h0c3RlZWxibHVlXCI6IFwiMTc2LDE5NiwyMjJcIixcclxuXHRcdFx0XHRcdFwibGlnaHR5ZWxsb3dcIjogXCIyNTUsMjU1LDIyNFwiLFxyXG5cdFx0XHRcdFx0XCJsaW1lZ3JlZW5cIjogXCI1MCwyMDUsNTBcIixcclxuXHRcdFx0XHRcdFwibGltZVwiOiBcIjAsMjU1LDBcIixcclxuXHRcdFx0XHRcdFwibGluZW5cIjogXCIyNTAsMjQwLDIzMFwiLFxyXG5cdFx0XHRcdFx0XCJtYWdlbnRhXCI6IFwiMjU1LDAsMjU1XCIsXHJcblx0XHRcdFx0XHRcIm1hcm9vblwiOiBcIjEyOCwwLDBcIixcclxuXHRcdFx0XHRcdFwibWVkaXVtYXF1YW1hcmluZVwiOiBcIjEwMiwyMDUsMTcwXCIsXHJcblx0XHRcdFx0XHRcIm1lZGl1bWJsdWVcIjogXCIwLDAsMjA1XCIsXHJcblx0XHRcdFx0XHRcIm1lZGl1bW9yY2hpZFwiOiBcIjE4Niw4NSwyMTFcIixcclxuXHRcdFx0XHRcdFwibWVkaXVtcHVycGxlXCI6IFwiMTQ3LDExMiwyMTlcIixcclxuXHRcdFx0XHRcdFwibWVkaXVtc2VhZ3JlZW5cIjogXCI2MCwxNzksMTEzXCIsXHJcblx0XHRcdFx0XHRcIm1lZGl1bXNsYXRlYmx1ZVwiOiBcIjEyMywxMDQsMjM4XCIsXHJcblx0XHRcdFx0XHRcIm1lZGl1bXNwcmluZ2dyZWVuXCI6IFwiMCwyNTAsMTU0XCIsXHJcblx0XHRcdFx0XHRcIm1lZGl1bXR1cnF1b2lzZVwiOiBcIjcyLDIwOSwyMDRcIixcclxuXHRcdFx0XHRcdFwibWVkaXVtdmlvbGV0cmVkXCI6IFwiMTk5LDIxLDEzM1wiLFxyXG5cdFx0XHRcdFx0XCJtaWRuaWdodGJsdWVcIjogXCIyNSwyNSwxMTJcIixcclxuXHRcdFx0XHRcdFwibWludGNyZWFtXCI6IFwiMjQ1LDI1NSwyNTBcIixcclxuXHRcdFx0XHRcdFwibWlzdHlyb3NlXCI6IFwiMjU1LDIyOCwyMjVcIixcclxuXHRcdFx0XHRcdFwibW9jY2FzaW5cIjogXCIyNTUsMjI4LDE4MVwiLFxyXG5cdFx0XHRcdFx0XCJuYXZham93aGl0ZVwiOiBcIjI1NSwyMjIsMTczXCIsXHJcblx0XHRcdFx0XHRcIm5hdnlcIjogXCIwLDAsMTI4XCIsXHJcblx0XHRcdFx0XHRcIm9sZGxhY2VcIjogXCIyNTMsMjQ1LDIzMFwiLFxyXG5cdFx0XHRcdFx0XCJvbGl2ZWRyYWJcIjogXCIxMDcsMTQyLDM1XCIsXHJcblx0XHRcdFx0XHRcIm9saXZlXCI6IFwiMTI4LDEyOCwwXCIsXHJcblx0XHRcdFx0XHRcIm9yYW5nZXJlZFwiOiBcIjI1NSw2OSwwXCIsXHJcblx0XHRcdFx0XHRcIm9yYW5nZVwiOiBcIjI1NSwxNjUsMFwiLFxyXG5cdFx0XHRcdFx0XCJvcmNoaWRcIjogXCIyMTgsMTEyLDIxNFwiLFxyXG5cdFx0XHRcdFx0XCJwYWxlZ29sZGVucm9kXCI6IFwiMjM4LDIzMiwxNzBcIixcclxuXHRcdFx0XHRcdFwicGFsZWdyZWVuXCI6IFwiMTUyLDI1MSwxNTJcIixcclxuXHRcdFx0XHRcdFwicGFsZXR1cnF1b2lzZVwiOiBcIjE3NSwyMzgsMjM4XCIsXHJcblx0XHRcdFx0XHRcInBhbGV2aW9sZXRyZWRcIjogXCIyMTksMTEyLDE0N1wiLFxyXG5cdFx0XHRcdFx0XCJwYXBheWF3aGlwXCI6IFwiMjU1LDIzOSwyMTNcIixcclxuXHRcdFx0XHRcdFwicGVhY2hwdWZmXCI6IFwiMjU1LDIxOCwxODVcIixcclxuXHRcdFx0XHRcdFwicGVydVwiOiBcIjIwNSwxMzMsNjNcIixcclxuXHRcdFx0XHRcdFwicGlua1wiOiBcIjI1NSwxOTIsMjAzXCIsXHJcblx0XHRcdFx0XHRcInBsdW1cIjogXCIyMjEsMTYwLDIyMVwiLFxyXG5cdFx0XHRcdFx0XCJwb3dkZXJibHVlXCI6IFwiMTc2LDIyNCwyMzBcIixcclxuXHRcdFx0XHRcdFwicHVycGxlXCI6IFwiMTI4LDAsMTI4XCIsXHJcblx0XHRcdFx0XHRcInJlZFwiOiBcIjI1NSwwLDBcIixcclxuXHRcdFx0XHRcdFwicm9zeWJyb3duXCI6IFwiMTg4LDE0MywxNDNcIixcclxuXHRcdFx0XHRcdFwicm95YWxibHVlXCI6IFwiNjUsMTA1LDIyNVwiLFxyXG5cdFx0XHRcdFx0XCJzYWRkbGVicm93blwiOiBcIjEzOSw2OSwxOVwiLFxyXG5cdFx0XHRcdFx0XCJzYWxtb25cIjogXCIyNTAsMTI4LDExNFwiLFxyXG5cdFx0XHRcdFx0XCJzYW5keWJyb3duXCI6IFwiMjQ0LDE2NCw5NlwiLFxyXG5cdFx0XHRcdFx0XCJzZWFncmVlblwiOiBcIjQ2LDEzOSw4N1wiLFxyXG5cdFx0XHRcdFx0XCJzZWFzaGVsbFwiOiBcIjI1NSwyNDUsMjM4XCIsXHJcblx0XHRcdFx0XHRcInNpZW5uYVwiOiBcIjE2MCw4Miw0NVwiLFxyXG5cdFx0XHRcdFx0XCJzaWx2ZXJcIjogXCIxOTIsMTkyLDE5MlwiLFxyXG5cdFx0XHRcdFx0XCJza3libHVlXCI6IFwiMTM1LDIwNiwyMzVcIixcclxuXHRcdFx0XHRcdFwic2xhdGVibHVlXCI6IFwiMTA2LDkwLDIwNVwiLFxyXG5cdFx0XHRcdFx0XCJzbGF0ZWdyYXlcIjogXCIxMTIsMTI4LDE0NFwiLFxyXG5cdFx0XHRcdFx0XCJzbm93XCI6IFwiMjU1LDI1MCwyNTBcIixcclxuXHRcdFx0XHRcdFwic3ByaW5nZ3JlZW5cIjogXCIwLDI1NSwxMjdcIixcclxuXHRcdFx0XHRcdFwic3RlZWxibHVlXCI6IFwiNzAsMTMwLDE4MFwiLFxyXG5cdFx0XHRcdFx0XCJ0YW5cIjogXCIyMTAsMTgwLDE0MFwiLFxyXG5cdFx0XHRcdFx0XCJ0ZWFsXCI6IFwiMCwxMjgsMTI4XCIsXHJcblx0XHRcdFx0XHRcInRoaXN0bGVcIjogXCIyMTYsMTkxLDIxNlwiLFxyXG5cdFx0XHRcdFx0XCJ0b21hdG9cIjogXCIyNTUsOTksNzFcIixcclxuXHRcdFx0XHRcdFwidHVycXVvaXNlXCI6IFwiNjQsMjI0LDIwOFwiLFxyXG5cdFx0XHRcdFx0XCJ2aW9sZXRcIjogXCIyMzgsMTMwLDIzOFwiLFxyXG5cdFx0XHRcdFx0XCJ3aGVhdFwiOiBcIjI0NSwyMjIsMTc5XCIsXHJcblx0XHRcdFx0XHRcIndoaXRlc21va2VcIjogXCIyNDUsMjQ1LDI0NVwiLFxyXG5cdFx0XHRcdFx0XCJ3aGl0ZVwiOiBcIjI1NSwyNTUsMjU1XCIsXHJcblx0XHRcdFx0XHRcInllbGxvd2dyZWVuXCI6IFwiMTU0LDIwNSw1MFwiLFxyXG5cdFx0XHRcdFx0XCJ5ZWxsb3dcIjogXCIyNTUsMjU1LDBcIlxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0LyoqKioqKioqKioqKlxyXG5cdFx0XHQgSG9va3NcclxuXHRcdFx0ICoqKioqKioqKioqKi9cclxuXHJcblx0XHRcdC8qIEhvb2tzIGFsbG93IGEgc3VicHJvcGVydHkgKGUuZy4gXCJib3hTaGFkb3dCbHVyXCIpIG9mIGEgY29tcG91bmQtdmFsdWUgQ1NTIHByb3BlcnR5XHJcblx0XHRcdCAoZS5nLiBcImJveFNoYWRvdzogWCBZIEJsdXIgU3ByZWFkIENvbG9yXCIpIHRvIGJlIGFuaW1hdGVkIGFzIGlmIGl0IHdlcmUgYSBkaXNjcmV0ZSBwcm9wZXJ0eS4gKi9cclxuXHRcdFx0LyogTm90ZTogQmV5b25kIGVuYWJsaW5nIGZpbmUtZ3JhaW5lZCBwcm9wZXJ0eSBhbmltYXRpb24sIGhvb2tpbmcgaXMgbmVjZXNzYXJ5IHNpbmNlIFZlbG9jaXR5IG9ubHlcclxuXHRcdFx0IHR3ZWVucyBwcm9wZXJ0aWVzIHdpdGggc2luZ2xlIG51bWVyaWMgdmFsdWVzOyB1bmxpa2UgQ1NTIHRyYW5zaXRpb25zLCBWZWxvY2l0eSBkb2VzIG5vdCBpbnRlcnBvbGF0ZSBjb21wb3VuZC12YWx1ZXMuICovXHJcblx0XHRcdEhvb2tzOiB7XHJcblx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IFJlZ2lzdHJhdGlvblxyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0LyogVGVtcGxhdGVzIGFyZSBhIGNvbmNpc2Ugd2F5IG9mIGluZGljYXRpbmcgd2hpY2ggc3VicHJvcGVydGllcyBtdXN0IGJlIGluZGl2aWR1YWxseSByZWdpc3RlcmVkIGZvciBlYWNoIGNvbXBvdW5kLXZhbHVlIENTUyBwcm9wZXJ0eS4gKi9cclxuXHRcdFx0XHQvKiBFYWNoIHRlbXBsYXRlIGNvbnNpc3RzIG9mIHRoZSBjb21wb3VuZC12YWx1ZSdzIGJhc2UgbmFtZSwgaXRzIGNvbnN0aXR1ZW50IHN1YnByb3BlcnR5IG5hbWVzLCBhbmQgdGhvc2Ugc3VicHJvcGVydGllcycgZGVmYXVsdCB2YWx1ZXMuICovXHJcblx0XHRcdFx0dGVtcGxhdGVzOiB7XHJcblx0XHRcdFx0XHRcInRleHRTaGFkb3dcIjogW1wiQ29sb3IgWCBZIEJsdXJcIiwgXCJibGFjayAwcHggMHB4IDBweFwiXSxcclxuXHRcdFx0XHRcdFwiYm94U2hhZG93XCI6IFtcIkNvbG9yIFggWSBCbHVyIFNwcmVhZFwiLCBcImJsYWNrIDBweCAwcHggMHB4IDBweFwiXSxcclxuXHRcdFx0XHRcdFwiY2xpcFwiOiBbXCJUb3AgUmlnaHQgQm90dG9tIExlZnRcIiwgXCIwcHggMHB4IDBweCAwcHhcIl0sXHJcblx0XHRcdFx0XHRcImJhY2tncm91bmRQb3NpdGlvblwiOiBbXCJYIFlcIiwgXCIwJSAwJVwiXSxcclxuXHRcdFx0XHRcdFwidHJhbnNmb3JtT3JpZ2luXCI6IFtcIlggWSBaXCIsIFwiNTAlIDUwJSAwcHhcIl0sXHJcblx0XHRcdFx0XHRcInBlcnNwZWN0aXZlT3JpZ2luXCI6IFtcIlggWVwiLCBcIjUwJSA1MCVcIl1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdC8qIEEgXCJyZWdpc3RlcmVkXCIgaG9vayBpcyBvbmUgdGhhdCBoYXMgYmVlbiBjb252ZXJ0ZWQgZnJvbSBpdHMgdGVtcGxhdGUgZm9ybSBpbnRvIGEgbGl2ZSxcclxuXHRcdFx0XHQgdHdlZW5hYmxlIHByb3BlcnR5LiBJdCBjb250YWlucyBkYXRhIHRvIGFzc29jaWF0ZSBpdCB3aXRoIGl0cyByb290IHByb3BlcnR5LiAqL1xyXG5cdFx0XHRcdHJlZ2lzdGVyZWQ6IHtcclxuXHRcdFx0XHRcdC8qIE5vdGU6IEEgcmVnaXN0ZXJlZCBob29rIGxvb2tzIGxpa2UgdGhpcyA9PT4gdGV4dFNoYWRvd0JsdXI6IFsgXCJ0ZXh0U2hhZG93XCIsIDMgXSxcclxuXHRcdFx0XHRcdCB3aGljaCBjb25zaXN0cyBvZiB0aGUgc3VicHJvcGVydHkncyBuYW1lLCB0aGUgYXNzb2NpYXRlZCByb290IHByb3BlcnR5J3MgbmFtZSxcclxuXHRcdFx0XHRcdCBhbmQgdGhlIHN1YnByb3BlcnR5J3MgcG9zaXRpb24gaW4gdGhlIHJvb3QncyB2YWx1ZS4gKi9cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdC8qIENvbnZlcnQgdGhlIHRlbXBsYXRlcyBpbnRvIGluZGl2aWR1YWwgaG9va3MgdGhlbiBhcHBlbmQgdGhlbSB0byB0aGUgcmVnaXN0ZXJlZCBvYmplY3QgYWJvdmUuICovXHJcblx0XHRcdFx0cmVnaXN0ZXI6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0LyogQ29sb3IgaG9va3MgcmVnaXN0cmF0aW9uOiBDb2xvcnMgYXJlIGRlZmF1bHRlZCB0byB3aGl0ZSAtLSBhcyBvcHBvc2VkIHRvIGJsYWNrIC0tIHNpbmNlIGNvbG9ycyB0aGF0IGFyZVxyXG5cdFx0XHRcdFx0IGN1cnJlbnRseSBzZXQgdG8gXCJ0cmFuc3BhcmVudFwiIGRlZmF1bHQgdG8gdGhlaXIgcmVzcGVjdGl2ZSB0ZW1wbGF0ZSBiZWxvdyB3aGVuIGNvbG9yLWFuaW1hdGVkLFxyXG5cdFx0XHRcdFx0IGFuZCB3aGl0ZSBpcyB0eXBpY2FsbHkgYSBjbG9zZXIgbWF0Y2ggdG8gdHJhbnNwYXJlbnQgdGhhbiBibGFjayBpcy4gQW4gZXhjZXB0aW9uIGlzIG1hZGUgZm9yIHRleHQgKFwiY29sb3JcIiksXHJcblx0XHRcdFx0XHQgd2hpY2ggaXMgYWxtb3N0IGFsd2F5cyBzZXQgY2xvc2VyIHRvIGJsYWNrIHRoYW4gd2hpdGUuICovXHJcblx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IENTUy5MaXN0cy5jb2xvcnMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0dmFyIHJnYkNvbXBvbmVudHMgPSAoQ1NTLkxpc3RzLmNvbG9yc1tpXSA9PT0gXCJjb2xvclwiKSA/IFwiMCAwIDAgMVwiIDogXCIyNTUgMjU1IDI1NSAxXCI7XHJcblx0XHRcdFx0XHRcdENTUy5Ib29rcy50ZW1wbGF0ZXNbQ1NTLkxpc3RzLmNvbG9yc1tpXV0gPSBbXCJSZWQgR3JlZW4gQmx1ZSBBbHBoYVwiLCByZ2JDb21wb25lbnRzXTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR2YXIgcm9vdFByb3BlcnR5LFxyXG5cdFx0XHRcdFx0XHRcdGhvb2tUZW1wbGF0ZSxcclxuXHRcdFx0XHRcdFx0XHRob29rTmFtZXM7XHJcblxyXG5cdFx0XHRcdFx0LyogSW4gSUUsIGNvbG9yIHZhbHVlcyBpbnNpZGUgY29tcG91bmQtdmFsdWUgcHJvcGVydGllcyBhcmUgcG9zaXRpb25lZCBhdCB0aGUgZW5kIHRoZSB2YWx1ZSBpbnN0ZWFkIG9mIGF0IHRoZSBiZWdpbm5pbmcuXHJcblx0XHRcdFx0XHQgVGh1cywgd2UgcmUtYXJyYW5nZSB0aGUgdGVtcGxhdGVzIGFjY29yZGluZ2x5LiAqL1xyXG5cdFx0XHRcdFx0aWYgKElFKSB7XHJcblx0XHRcdFx0XHRcdGZvciAocm9vdFByb3BlcnR5IGluIENTUy5Ib29rcy50ZW1wbGF0ZXMpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIUNTUy5Ib29rcy50ZW1wbGF0ZXMuaGFzT3duUHJvcGVydHkocm9vdFByb3BlcnR5KSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGhvb2tUZW1wbGF0ZSA9IENTUy5Ib29rcy50ZW1wbGF0ZXNbcm9vdFByb3BlcnR5XTtcclxuXHRcdFx0XHRcdFx0XHRob29rTmFtZXMgPSBob29rVGVtcGxhdGVbMF0uc3BsaXQoXCIgXCIpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHR2YXIgZGVmYXVsdFZhbHVlcyA9IGhvb2tUZW1wbGF0ZVsxXS5tYXRjaChDU1MuUmVnRXgudmFsdWVTcGxpdCk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmIChob29rTmFtZXNbMF0gPT09IFwiQ29sb3JcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogUmVwb3NpdGlvbiBib3RoIHRoZSBob29rJ3MgbmFtZSBhbmQgaXRzIGRlZmF1bHQgdmFsdWUgdG8gdGhlIGVuZCBvZiB0aGVpciByZXNwZWN0aXZlIHN0cmluZ3MuICovXHJcblx0XHRcdFx0XHRcdFx0XHRob29rTmFtZXMucHVzaChob29rTmFtZXMuc2hpZnQoKSk7XHJcblx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzLnB1c2goZGVmYXVsdFZhbHVlcy5zaGlmdCgpKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBSZXBsYWNlIHRoZSBleGlzdGluZyB0ZW1wbGF0ZSBmb3IgdGhlIGhvb2sncyByb290IHByb3BlcnR5LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0Q1NTLkhvb2tzLnRlbXBsYXRlc1tyb290UHJvcGVydHldID0gW2hvb2tOYW1lcy5qb2luKFwiIFwiKSwgZGVmYXVsdFZhbHVlcy5qb2luKFwiIFwiKV07XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogSG9vayByZWdpc3RyYXRpb24uICovXHJcblx0XHRcdFx0XHRmb3IgKHJvb3RQcm9wZXJ0eSBpbiBDU1MuSG9va3MudGVtcGxhdGVzKSB7XHJcblx0XHRcdFx0XHRcdGlmICghQ1NTLkhvb2tzLnRlbXBsYXRlcy5oYXNPd25Qcm9wZXJ0eShyb290UHJvcGVydHkpKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aG9va1RlbXBsYXRlID0gQ1NTLkhvb2tzLnRlbXBsYXRlc1tyb290UHJvcGVydHldO1xyXG5cdFx0XHRcdFx0XHRob29rTmFtZXMgPSBob29rVGVtcGxhdGVbMF0uc3BsaXQoXCIgXCIpO1xyXG5cclxuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaiBpbiBob29rTmFtZXMpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIWhvb2tOYW1lcy5oYXNPd25Qcm9wZXJ0eShqKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHZhciBmdWxsSG9va05hbWUgPSByb290UHJvcGVydHkgKyBob29rTmFtZXNbal0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdGhvb2tQb3NpdGlvbiA9IGo7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIEZvciBlYWNoIGhvb2ssIHJlZ2lzdGVyIGl0cyBmdWxsIG5hbWUgKGUuZy4gdGV4dFNoYWRvd0JsdXIpIHdpdGggaXRzIHJvb3QgcHJvcGVydHkgKGUuZy4gdGV4dFNoYWRvdylcclxuXHRcdFx0XHRcdFx0XHQgYW5kIHRoZSBob29rJ3MgcG9zaXRpb24gaW4gaXRzIHRlbXBsYXRlJ3MgZGVmYXVsdCB2YWx1ZSBzdHJpbmcuICovXHJcblx0XHRcdFx0XHRcdFx0Q1NTLkhvb2tzLnJlZ2lzdGVyZWRbZnVsbEhvb2tOYW1lXSA9IFtyb290UHJvcGVydHksIGhvb2tQb3NpdGlvbl07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdCBJbmplY3Rpb24gYW5kIEV4dHJhY3Rpb25cclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdC8qIExvb2sgdXAgdGhlIHJvb3QgcHJvcGVydHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBob29rIChlLmcuIHJldHVybiBcInRleHRTaGFkb3dcIiBmb3IgXCJ0ZXh0U2hhZG93Qmx1clwiKS4gKi9cclxuXHRcdFx0XHQvKiBTaW5jZSBhIGhvb2sgY2Fubm90IGJlIHNldCBkaXJlY3RseSAodGhlIGJyb3dzZXIgd29uJ3QgcmVjb2duaXplIGl0KSwgc3R5bGUgdXBkYXRpbmcgZm9yIGhvb2tzIGlzIHJvdXRlZCB0aHJvdWdoIHRoZSBob29rJ3Mgcm9vdCBwcm9wZXJ0eS4gKi9cclxuXHRcdFx0XHRnZXRSb290OiBmdW5jdGlvbihwcm9wZXJ0eSkge1xyXG5cdFx0XHRcdFx0dmFyIGhvb2tEYXRhID0gQ1NTLkhvb2tzLnJlZ2lzdGVyZWRbcHJvcGVydHldO1xyXG5cclxuXHRcdFx0XHRcdGlmIChob29rRGF0YSkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gaG9va0RhdGFbMF07XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvKiBJZiB0aGVyZSB3YXMgbm8gaG9vayBtYXRjaCwgcmV0dXJuIHRoZSBwcm9wZXJ0eSBuYW1lIHVudG91Y2hlZC4gKi9cclxuXHRcdFx0XHRcdFx0cmV0dXJuIHByb3BlcnR5O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0Z2V0VW5pdDogZnVuY3Rpb24oc3RyLCBzdGFydCkge1xyXG5cdFx0XHRcdFx0dmFyIHVuaXQgPSAoc3RyLnN1YnN0cihzdGFydCB8fCAwLCA1KS5tYXRjaCgvXlthLXolXSsvKSB8fCBbXSlbMF0gfHwgXCJcIjtcclxuXHJcblx0XHRcdFx0XHRpZiAodW5pdCAmJiBfaW5BcnJheShDU1MuTGlzdHMudW5pdHMsIHVuaXQpKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB1bml0O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRmaXhDb2xvcnM6IGZ1bmN0aW9uKHN0cikge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHN0ci5yZXBsYWNlKC8ocmdiYT9cXChcXHMqKT8oXFxiW2Etel0rXFxiKS9nLCBmdW5jdGlvbigkMCwgJDEsICQyKSB7XHJcblx0XHRcdFx0XHRcdGlmIChDU1MuTGlzdHMuY29sb3JOYW1lcy5oYXNPd25Qcm9wZXJ0eSgkMikpIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKCQxID8gJDEgOiBcInJnYmEoXCIpICsgQ1NTLkxpc3RzLmNvbG9yTmFtZXNbJDJdICsgKCQxID8gXCJcIiA6IFwiLDEpXCIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHJldHVybiAkMSArICQyO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQvKiBDb252ZXJ0IGFueSByb290UHJvcGVydHlWYWx1ZSwgbnVsbCBvciBvdGhlcndpc2UsIGludG8gYSBzcGFjZS1kZWxpbWl0ZWQgbGlzdCBvZiBob29rIHZhbHVlcyBzbyB0aGF0XHJcblx0XHRcdFx0IHRoZSB0YXJnZXRlZCBob29rIGNhbiBiZSBpbmplY3RlZCBvciBleHRyYWN0ZWQgYXQgaXRzIHN0YW5kYXJkIHBvc2l0aW9uLiAqL1xyXG5cdFx0XHRcdGNsZWFuUm9vdFByb3BlcnR5VmFsdWU6IGZ1bmN0aW9uKHJvb3RQcm9wZXJ0eSwgcm9vdFByb3BlcnR5VmFsdWUpIHtcclxuXHRcdFx0XHRcdC8qIElmIHRoZSByb290UHJvcGVydHlWYWx1ZSBpcyB3cmFwcGVkIHdpdGggXCJyZ2IoKVwiLCBcImNsaXAoKVwiLCBldGMuLCByZW1vdmUgdGhlIHdyYXBwaW5nIHRvIG5vcm1hbGl6ZSB0aGUgdmFsdWUgYmVmb3JlIG1hbmlwdWxhdGlvbi4gKi9cclxuXHRcdFx0XHRcdGlmIChDU1MuUmVnRXgudmFsdWVVbndyYXAudGVzdChyb290UHJvcGVydHlWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdFx0cm9vdFByb3BlcnR5VmFsdWUgPSByb290UHJvcGVydHlWYWx1ZS5tYXRjaChDU1MuUmVnRXgudmFsdWVVbndyYXApWzFdO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8qIElmIHJvb3RQcm9wZXJ0eVZhbHVlIGlzIGEgQ1NTIG51bGwtdmFsdWUgKGZyb20gd2hpY2ggdGhlcmUncyBpbmhlcmVudGx5IG5vIGhvb2sgdmFsdWUgdG8gZXh0cmFjdCksXHJcblx0XHRcdFx0XHQgZGVmYXVsdCB0byB0aGUgcm9vdCdzIGRlZmF1bHQgdmFsdWUgYXMgZGVmaW5lZCBpbiBDU1MuSG9va3MudGVtcGxhdGVzLiAqL1xyXG5cdFx0XHRcdFx0LyogTm90ZTogQ1NTIG51bGwtdmFsdWVzIGluY2x1ZGUgXCJub25lXCIsIFwiYXV0b1wiLCBhbmQgXCJ0cmFuc3BhcmVudFwiLiBUaGV5IG11c3QgYmUgY29udmVydGVkIGludG8gdGhlaXJcclxuXHRcdFx0XHRcdCB6ZXJvLXZhbHVlcyAoZS5nLiB0ZXh0U2hhZG93OiBcIm5vbmVcIiA9PT4gdGV4dFNoYWRvdzogXCIwcHggMHB4IDBweCBibGFja1wiKSBmb3IgaG9vayBtYW5pcHVsYXRpb24gdG8gcHJvY2VlZC4gKi9cclxuXHRcdFx0XHRcdGlmIChDU1MuVmFsdWVzLmlzQ1NTTnVsbFZhbHVlKHJvb3RQcm9wZXJ0eVZhbHVlKSkge1xyXG5cdFx0XHRcdFx0XHRyb290UHJvcGVydHlWYWx1ZSA9IENTUy5Ib29rcy50ZW1wbGF0ZXNbcm9vdFByb3BlcnR5XVsxXTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRyZXR1cm4gcm9vdFByb3BlcnR5VmFsdWU7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQvKiBFeHRyYWN0ZWQgdGhlIGhvb2sncyB2YWx1ZSBmcm9tIGl0cyByb290IHByb3BlcnR5J3MgdmFsdWUuIFRoaXMgaXMgdXNlZCB0byBnZXQgdGhlIHN0YXJ0aW5nIHZhbHVlIG9mIGFuIGFuaW1hdGluZyBob29rLiAqL1xyXG5cdFx0XHRcdGV4dHJhY3RWYWx1ZTogZnVuY3Rpb24oZnVsbEhvb2tOYW1lLCByb290UHJvcGVydHlWYWx1ZSkge1xyXG5cdFx0XHRcdFx0dmFyIGhvb2tEYXRhID0gQ1NTLkhvb2tzLnJlZ2lzdGVyZWRbZnVsbEhvb2tOYW1lXTtcclxuXHJcblx0XHRcdFx0XHRpZiAoaG9va0RhdGEpIHtcclxuXHRcdFx0XHRcdFx0dmFyIGhvb2tSb290ID0gaG9va0RhdGFbMF0sXHJcblx0XHRcdFx0XHRcdFx0XHRob29rUG9zaXRpb24gPSBob29rRGF0YVsxXTtcclxuXHJcblx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlID0gQ1NTLkhvb2tzLmNsZWFuUm9vdFByb3BlcnR5VmFsdWUoaG9va1Jvb3QsIHJvb3RQcm9wZXJ0eVZhbHVlKTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIFNwbGl0IHJvb3RQcm9wZXJ0eVZhbHVlIGludG8gaXRzIGNvbnN0aXR1ZW50IGhvb2sgdmFsdWVzIHRoZW4gZ3JhYiB0aGUgZGVzaXJlZCBob29rIGF0IGl0cyBzdGFuZGFyZCBwb3NpdGlvbi4gKi9cclxuXHRcdFx0XHRcdFx0cmV0dXJuIHJvb3RQcm9wZXJ0eVZhbHVlLnRvU3RyaW5nKCkubWF0Y2goQ1NTLlJlZ0V4LnZhbHVlU3BsaXQpW2hvb2tQb3NpdGlvbl07XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvKiBJZiB0aGUgcHJvdmlkZWQgZnVsbEhvb2tOYW1lIGlzbid0IGEgcmVnaXN0ZXJlZCBob29rLCByZXR1cm4gdGhlIHJvb3RQcm9wZXJ0eVZhbHVlIHRoYXQgd2FzIHBhc3NlZCBpbi4gKi9cclxuXHRcdFx0XHRcdFx0cmV0dXJuIHJvb3RQcm9wZXJ0eVZhbHVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0LyogSW5qZWN0IHRoZSBob29rJ3MgdmFsdWUgaW50byBpdHMgcm9vdCBwcm9wZXJ0eSdzIHZhbHVlLiBUaGlzIGlzIHVzZWQgdG8gcGllY2UgYmFjayB0b2dldGhlciB0aGUgcm9vdCBwcm9wZXJ0eVxyXG5cdFx0XHRcdCBvbmNlIFZlbG9jaXR5IGhhcyB1cGRhdGVkIG9uZSBvZiBpdHMgaW5kaXZpZHVhbGx5IGhvb2tlZCB2YWx1ZXMgdGhyb3VnaCB0d2VlbmluZy4gKi9cclxuXHRcdFx0XHRpbmplY3RWYWx1ZTogZnVuY3Rpb24oZnVsbEhvb2tOYW1lLCBob29rVmFsdWUsIHJvb3RQcm9wZXJ0eVZhbHVlKSB7XHJcblx0XHRcdFx0XHR2YXIgaG9va0RhdGEgPSBDU1MuSG9va3MucmVnaXN0ZXJlZFtmdWxsSG9va05hbWVdO1xyXG5cclxuXHRcdFx0XHRcdGlmIChob29rRGF0YSkge1xyXG5cdFx0XHRcdFx0XHR2YXIgaG9va1Jvb3QgPSBob29rRGF0YVswXSxcclxuXHRcdFx0XHRcdFx0XHRcdGhvb2tQb3NpdGlvbiA9IGhvb2tEYXRhWzFdLFxyXG5cdFx0XHRcdFx0XHRcdFx0cm9vdFByb3BlcnR5VmFsdWVQYXJ0cyxcclxuXHRcdFx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlVXBkYXRlZDtcclxuXHJcblx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlID0gQ1NTLkhvb2tzLmNsZWFuUm9vdFByb3BlcnR5VmFsdWUoaG9va1Jvb3QsIHJvb3RQcm9wZXJ0eVZhbHVlKTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIFNwbGl0IHJvb3RQcm9wZXJ0eVZhbHVlIGludG8gaXRzIGluZGl2aWR1YWwgaG9vayB2YWx1ZXMsIHJlcGxhY2UgdGhlIHRhcmdldGVkIHZhbHVlIHdpdGggaG9va1ZhbHVlLFxyXG5cdFx0XHRcdFx0XHQgdGhlbiByZWNvbnN0cnVjdCB0aGUgcm9vdFByb3BlcnR5VmFsdWUgc3RyaW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRyb290UHJvcGVydHlWYWx1ZVBhcnRzID0gcm9vdFByb3BlcnR5VmFsdWUudG9TdHJpbmcoKS5tYXRjaChDU1MuUmVnRXgudmFsdWVTcGxpdCk7XHJcblx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlUGFydHNbaG9va1Bvc2l0aW9uXSA9IGhvb2tWYWx1ZTtcclxuXHRcdFx0XHRcdFx0cm9vdFByb3BlcnR5VmFsdWVVcGRhdGVkID0gcm9vdFByb3BlcnR5VmFsdWVQYXJ0cy5qb2luKFwiIFwiKTtcclxuXHJcblx0XHRcdFx0XHRcdHJldHVybiByb290UHJvcGVydHlWYWx1ZVVwZGF0ZWQ7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvKiBJZiB0aGUgcHJvdmlkZWQgZnVsbEhvb2tOYW1lIGlzbid0IGEgcmVnaXN0ZXJlZCBob29rLCByZXR1cm4gdGhlIHJvb3RQcm9wZXJ0eVZhbHVlIHRoYXQgd2FzIHBhc3NlZCBpbi4gKi9cclxuXHRcdFx0XHRcdFx0cmV0dXJuIHJvb3RQcm9wZXJ0eVZhbHVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0IE5vcm1hbGl6YXRpb25zXHJcblx0XHRcdCAqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0LyogTm9ybWFsaXphdGlvbnMgc3RhbmRhcmRpemUgQ1NTIHByb3BlcnR5IG1hbmlwdWxhdGlvbiBieSBwb2xseWZpbGxpbmcgYnJvd3Nlci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgKGUuZy4gb3BhY2l0eSlcclxuXHRcdFx0IGFuZCByZWZvcm1hdHRpbmcgc3BlY2lhbCBwcm9wZXJ0aWVzIChlLmcuIGNsaXAsIHJnYmEpIHRvIGxvb2sgbGlrZSBzdGFuZGFyZCBvbmVzLiAqL1xyXG5cdFx0XHROb3JtYWxpemF0aW9uczoge1xyXG5cdFx0XHRcdC8qIE5vcm1hbGl6YXRpb25zIGFyZSBwYXNzZWQgYSBub3JtYWxpemF0aW9uIHRhcmdldCAoZWl0aGVyIHRoZSBwcm9wZXJ0eSdzIG5hbWUsIGl0cyBleHRyYWN0ZWQgdmFsdWUsIG9yIGl0cyBpbmplY3RlZCB2YWx1ZSksXHJcblx0XHRcdFx0IHRoZSB0YXJnZXRlZCBlbGVtZW50ICh3aGljaCBtYXkgbmVlZCB0byBiZSBxdWVyaWVkKSwgYW5kIHRoZSB0YXJnZXRlZCBwcm9wZXJ0eSB2YWx1ZS4gKi9cclxuXHRcdFx0XHRyZWdpc3RlcmVkOiB7XHJcblx0XHRcdFx0XHRjbGlwOiBmdW5jdGlvbih0eXBlLCBlbGVtZW50LCBwcm9wZXJ0eVZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdHN3aXRjaCAodHlwZSkge1xyXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJuYW1lXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gXCJjbGlwXCI7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBDbGlwIG5lZWRzIHRvIGJlIHVud3JhcHBlZCBhbmQgc3RyaXBwZWQgb2YgaXRzIGNvbW1hcyBkdXJpbmcgZXh0cmFjdGlvbi4gKi9cclxuXHRcdFx0XHRcdFx0XHRjYXNlIFwiZXh0cmFjdFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGV4dHJhY3RlZDtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBJZiBWZWxvY2l0eSBhbHNvIGV4dHJhY3RlZCB0aGlzIHZhbHVlLCBza2lwIGV4dHJhY3Rpb24uICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoQ1NTLlJlZ0V4LndyYXBwZWRWYWx1ZUFscmVhZHlFeHRyYWN0ZWQudGVzdChwcm9wZXJ0eVZhbHVlKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRleHRyYWN0ZWQgPSBwcm9wZXJ0eVZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogUmVtb3ZlIHRoZSBcInJlY3QoKVwiIHdyYXBwZXIuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGV4dHJhY3RlZCA9IHByb3BlcnR5VmFsdWUudG9TdHJpbmcoKS5tYXRjaChDU1MuUmVnRXgudmFsdWVVbndyYXApO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogU3RyaXAgb2ZmIGNvbW1hcy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0ZXh0cmFjdGVkID0gZXh0cmFjdGVkID8gZXh0cmFjdGVkWzFdLnJlcGxhY2UoLywoXFxzKyk/L2csIFwiIFwiKSA6IHByb3BlcnR5VmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGV4dHJhY3RlZDtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIENsaXAgbmVlZHMgdG8gYmUgcmUtd3JhcHBlZCBkdXJpbmcgaW5qZWN0aW9uLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJpbmplY3RcIjpcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBcInJlY3QoXCIgKyBwcm9wZXJ0eVZhbHVlICsgXCIpXCI7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRibHVyOiBmdW5jdGlvbih0eXBlLCBlbGVtZW50LCBwcm9wZXJ0eVZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdHN3aXRjaCAodHlwZSkge1xyXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJuYW1lXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gVmVsb2NpdHkuU3RhdGUuaXNGaXJlZm94ID8gXCJmaWx0ZXJcIiA6IFwiLXdlYmtpdC1maWx0ZXJcIjtcclxuXHRcdFx0XHRcdFx0XHRjYXNlIFwiZXh0cmFjdFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGV4dHJhY3RlZCA9IHBhcnNlRmxvYXQocHJvcGVydHlWYWx1ZSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogSWYgZXh0cmFjdGVkIGlzIE5hTiwgbWVhbmluZyB0aGUgdmFsdWUgaXNuJ3QgYWxyZWFkeSBleHRyYWN0ZWQuICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIShleHRyYWN0ZWQgfHwgZXh0cmFjdGVkID09PSAwKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgYmx1ckNvbXBvbmVudCA9IHByb3BlcnR5VmFsdWUudG9TdHJpbmcoKS5tYXRjaCgvYmx1clxcKChbMC05XStbQS16XSspXFwpL2kpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogSWYgdGhlIGZpbHRlciBzdHJpbmcgaGFkIGEgYmx1ciBjb21wb25lbnQsIHJldHVybiBqdXN0IHRoZSBibHVyIHZhbHVlIGFuZCB1bml0IHR5cGUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChibHVyQ29tcG9uZW50KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXh0cmFjdGVkID0gYmx1ckNvbXBvbmVudFsxXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBJZiB0aGUgY29tcG9uZW50IGRvZXNuJ3QgZXhpc3QsIGRlZmF1bHQgYmx1ciB0byAwLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGV4dHJhY3RlZCA9IDA7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZXh0cmFjdGVkO1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogQmx1ciBuZWVkcyB0byBiZSByZS13cmFwcGVkIGR1cmluZyBpbmplY3Rpb24uICovXHJcblx0XHRcdFx0XHRcdFx0Y2FzZSBcImluamVjdFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0LyogRm9yIHRoZSBibHVyIGVmZmVjdCB0byBiZSBmdWxseSBkZS1hcHBsaWVkLCBpdCBuZWVkcyB0byBiZSBzZXQgdG8gXCJub25lXCIgaW5zdGVhZCBvZiAwLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFwYXJzZUZsb2F0KHByb3BlcnR5VmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBcIm5vbmVcIjtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBcImJsdXIoXCIgKyBwcm9wZXJ0eVZhbHVlICsgXCIpXCI7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHQvKiA8PUlFOCBkbyBub3Qgc3VwcG9ydCB0aGUgc3RhbmRhcmQgb3BhY2l0eSBwcm9wZXJ0eS4gVGhleSB1c2UgZmlsdGVyOmFscGhhKG9wYWNpdHk9SU5UKSBpbnN0ZWFkLiAqL1xyXG5cdFx0XHRcdFx0b3BhY2l0eTogZnVuY3Rpb24odHlwZSwgZWxlbWVudCwgcHJvcGVydHlWYWx1ZSkge1xyXG5cdFx0XHRcdFx0XHRpZiAoSUUgPD0gOCkge1xyXG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAodHlwZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIm5hbWVcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFwiZmlsdGVyXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiZXh0cmFjdFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiA8PUlFOCByZXR1cm4gYSBcImZpbHRlclwiIHZhbHVlIG9mIFwiYWxwaGEob3BhY2l0eT1cXGR7MSwzfSlcIi5cclxuXHRcdFx0XHRcdFx0XHRcdFx0IEV4dHJhY3QgdGhlIHZhbHVlIGFuZCBjb252ZXJ0IGl0IHRvIGEgZGVjaW1hbCB2YWx1ZSB0byBtYXRjaCB0aGUgc3RhbmRhcmQgQ1NTIG9wYWNpdHkgcHJvcGVydHkncyBmb3JtYXR0aW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXh0cmFjdGVkID0gcHJvcGVydHlWYWx1ZS50b1N0cmluZygpLm1hdGNoKC9hbHBoYVxcKG9wYWNpdHk9KC4qKVxcKS9pKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChleHRyYWN0ZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBDb252ZXJ0IHRvIGRlY2ltYWwgdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IGV4dHJhY3RlZFsxXSAvIDEwMDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBXaGVuIGV4dHJhY3Rpbmcgb3BhY2l0eSwgZGVmYXVsdCB0byAxIHNpbmNlIGEgbnVsbCB2YWx1ZSBtZWFucyBvcGFjaXR5IGhhc24ndCBiZWVuIHNldC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gMTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHByb3BlcnR5VmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiaW5qZWN0XCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIE9wYWNpZmllZCBlbGVtZW50cyBhcmUgcmVxdWlyZWQgdG8gaGF2ZSB0aGVpciB6b29tIHByb3BlcnR5IHNldCB0byBhIG5vbi16ZXJvIHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbGVtZW50LnN0eWxlLnpvb20gPSAxO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogU2V0dGluZyB0aGUgZmlsdGVyIHByb3BlcnR5IG9uIGVsZW1lbnRzIHdpdGggY2VydGFpbiBmb250IHByb3BlcnR5IGNvbWJpbmF0aW9ucyBjYW4gcmVzdWx0IGluIGFcclxuXHRcdFx0XHRcdFx0XHRcdFx0IGhpZ2hseSB1bmFwcGVhbGluZyB1bHRyYS1ib2xkaW5nIGVmZmVjdC4gVGhlcmUncyBubyB3YXkgdG8gcmVtZWR5IHRoaXMgdGhyb3VnaG91dCBhIHR3ZWVuLCBidXQgZHJvcHBpbmcgdGhlXHJcblx0XHRcdFx0XHRcdFx0XHRcdCB2YWx1ZSBhbHRvZ2V0aGVyICh3aGVuIG9wYWNpdHkgaGl0cyAxKSBhdCBsZWFzdHMgZW5zdXJlcyB0aGF0IHRoZSBnbGl0Y2ggaXMgZ29uZSBwb3N0LXR3ZWVuaW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocGFyc2VGbG9hdChwcm9wZXJ0eVZhbHVlKSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogQXMgcGVyIHRoZSBmaWx0ZXIgcHJvcGVydHkncyBzcGVjLCBjb252ZXJ0IHRoZSBkZWNpbWFsIHZhbHVlIHRvIGEgd2hvbGUgbnVtYmVyIGFuZCB3cmFwIHRoZSB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gXCJhbHBoYShvcGFjaXR5PVwiICsgcGFyc2VJbnQocGFyc2VGbG9hdChwcm9wZXJ0eVZhbHVlKSAqIDEwMCwgMTApICsgXCIpXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0LyogV2l0aCBhbGwgb3RoZXIgYnJvd3NlcnMsIG5vcm1hbGl6YXRpb24gaXMgbm90IHJlcXVpcmVkOyByZXR1cm4gdGhlIHNhbWUgdmFsdWVzIHRoYXQgd2VyZSBwYXNzZWQgaW4uICovXHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwibmFtZVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gXCJvcGFjaXR5XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiZXh0cmFjdFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcHJvcGVydHlWYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJpbmplY3RcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHByb3BlcnR5VmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgQmF0Y2hlZCBSZWdpc3RyYXRpb25zXHJcblx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKiBOb3RlOiBCYXRjaGVkIG5vcm1hbGl6YXRpb25zIGV4dGVuZCB0aGUgQ1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWQgb2JqZWN0LiAqL1xyXG5cdFx0XHRcdHJlZ2lzdGVyOiBmdW5jdGlvbigpIHtcclxuXHJcblx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdCBUcmFuc2Zvcm1zXHJcblx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0LyogVHJhbnNmb3JtcyBhcmUgdGhlIHN1YnByb3BlcnRpZXMgY29udGFpbmVkIGJ5IHRoZSBDU1MgXCJ0cmFuc2Zvcm1cIiBwcm9wZXJ0eS4gVHJhbnNmb3JtcyBtdXN0IHVuZGVyZ28gbm9ybWFsaXphdGlvblxyXG5cdFx0XHRcdFx0IHNvIHRoYXQgdGhleSBjYW4gYmUgcmVmZXJlbmNlZCBpbiBhIHByb3BlcnRpZXMgbWFwIGJ5IHRoZWlyIGluZGl2aWR1YWwgbmFtZXMuICovXHJcblx0XHRcdFx0XHQvKiBOb3RlOiBXaGVuIHRyYW5zZm9ybXMgYXJlIFwic2V0XCIsIHRoZXkgYXJlIGFjdHVhbGx5IGFzc2lnbmVkIHRvIGEgcGVyLWVsZW1lbnQgdHJhbnNmb3JtQ2FjaGUuIFdoZW4gYWxsIHRyYW5zZm9ybVxyXG5cdFx0XHRcdFx0IHNldHRpbmcgaXMgY29tcGxldGUgY29tcGxldGUsIENTUy5mbHVzaFRyYW5zZm9ybUNhY2hlKCkgbXVzdCBiZSBtYW51YWxseSBjYWxsZWQgdG8gZmx1c2ggdGhlIHZhbHVlcyB0byB0aGUgRE9NLlxyXG5cdFx0XHRcdFx0IFRyYW5zZm9ybSBzZXR0aW5nIGlzIGJhdGNoZWQgaW4gdGhpcyB3YXkgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZTogdGhlIHRyYW5zZm9ybSBzdHlsZSBvbmx5IG5lZWRzIHRvIGJlIHVwZGF0ZWRcclxuXHRcdFx0XHRcdCBvbmNlIHdoZW4gbXVsdGlwbGUgdHJhbnNmb3JtIHN1YnByb3BlcnRpZXMgYXJlIGJlaW5nIGFuaW1hdGVkIHNpbXVsdGFuZW91c2x5LiAqL1xyXG5cdFx0XHRcdFx0LyogTm90ZTogSUU5IGFuZCBBbmRyb2lkIEdpbmdlcmJyZWFkIGhhdmUgc3VwcG9ydCBmb3IgMkQgLS0gYnV0IG5vdCAzRCAtLSB0cmFuc2Zvcm1zLiBTaW5jZSBhbmltYXRpbmcgdW5zdXBwb3J0ZWRcclxuXHRcdFx0XHRcdCB0cmFuc2Zvcm0gcHJvcGVydGllcyByZXN1bHRzIGluIHRoZSBicm93c2VyIGlnbm9yaW5nIHRoZSAqZW50aXJlKiB0cmFuc2Zvcm0gc3RyaW5nLCB3ZSBwcmV2ZW50IHRoZXNlIDNEIHZhbHVlc1xyXG5cdFx0XHRcdFx0IGZyb20gYmVpbmcgbm9ybWFsaXplZCBmb3IgdGhlc2UgYnJvd3NlcnMgc28gdGhhdCB0d2VlbmluZyBza2lwcyB0aGVzZSBwcm9wZXJ0aWVzIGFsdG9nZXRoZXJcclxuXHRcdFx0XHRcdCAoc2luY2UgaXQgd2lsbCBpZ25vcmUgdGhlbSBhcyBiZWluZyB1bnN1cHBvcnRlZCBieSB0aGUgYnJvd3Nlci4pICovXHJcblx0XHRcdFx0XHRpZiAoKCFJRSB8fCBJRSA+IDkpICYmICFWZWxvY2l0eS5TdGF0ZS5pc0dpbmdlcmJyZWFkKSB7XHJcblx0XHRcdFx0XHRcdC8qIE5vdGU6IFNpbmNlIHRoZSBzdGFuZGFsb25lIENTUyBcInBlcnNwZWN0aXZlXCIgcHJvcGVydHkgYW5kIHRoZSBDU1MgdHJhbnNmb3JtIFwicGVyc3BlY3RpdmVcIiBzdWJwcm9wZXJ0eVxyXG5cdFx0XHRcdFx0XHQgc2hhcmUgdGhlIHNhbWUgbmFtZSwgdGhlIGxhdHRlciBpcyBnaXZlbiBhIHVuaXF1ZSB0b2tlbiB3aXRoaW4gVmVsb2NpdHk6IFwidHJhbnNmb3JtUGVyc3BlY3RpdmVcIi4gKi9cclxuXHRcdFx0XHRcdFx0Q1NTLkxpc3RzLnRyYW5zZm9ybXNCYXNlID0gQ1NTLkxpc3RzLnRyYW5zZm9ybXNCYXNlLmNvbmNhdChDU1MuTGlzdHMudHJhbnNmb3JtczNEKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IENTUy5MaXN0cy50cmFuc2Zvcm1zQmFzZS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHQvKiBXcmFwIHRoZSBkeW5hbWljYWxseSBnZW5lcmF0ZWQgbm9ybWFsaXphdGlvbiBmdW5jdGlvbiBpbiBhIG5ldyBzY29wZSBzbyB0aGF0IHRyYW5zZm9ybU5hbWUncyB2YWx1ZSBpc1xyXG5cdFx0XHRcdFx0XHQgcGFpcmVkIHdpdGggaXRzIHJlc3BlY3RpdmUgZnVuY3Rpb24uIChPdGhlcndpc2UsIGFsbCBmdW5jdGlvbnMgd291bGQgdGFrZSB0aGUgZmluYWwgZm9yIGxvb3AncyB0cmFuc2Zvcm1OYW1lLikgKi9cclxuXHRcdFx0XHRcdFx0KGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHRcdHZhciB0cmFuc2Zvcm1OYW1lID0gQ1NTLkxpc3RzLnRyYW5zZm9ybXNCYXNlW2ldO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRDU1MuTm9ybWFsaXphdGlvbnMucmVnaXN0ZXJlZFt0cmFuc2Zvcm1OYW1lXSA9IGZ1bmN0aW9uKHR5cGUsIGVsZW1lbnQsIHByb3BlcnR5VmFsdWUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHN3aXRjaCAodHlwZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBUaGUgbm9ybWFsaXplZCBwcm9wZXJ0eSBuYW1lIGlzIHRoZSBwYXJlbnQgXCJ0cmFuc2Zvcm1cIiBwcm9wZXJ0eSAtLSB0aGUgcHJvcGVydHkgdGhhdCBpcyBhY3R1YWxseSBzZXQgaW4gQ1NTLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwibmFtZVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBcInRyYW5zZm9ybVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIFRyYW5zZm9ybSB2YWx1ZXMgYXJlIGNhY2hlZCBvbnRvIGEgcGVyLWVsZW1lbnQgdHJhbnNmb3JtQ2FjaGUgb2JqZWN0LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiZXh0cmFjdFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIElmIHRoaXMgdHJhbnNmb3JtIGhhcyB5ZXQgdG8gYmUgYXNzaWduZWQgYSB2YWx1ZSwgcmV0dXJuIGl0cyBudWxsIHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChEYXRhKGVsZW1lbnQpID09PSB1bmRlZmluZWQgfHwgRGF0YShlbGVtZW50KS50cmFuc2Zvcm1DYWNoZVt0cmFuc2Zvcm1OYW1lXSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBTY2FsZSBDU1MuTGlzdHMudHJhbnNmb3Jtc0Jhc2UgZGVmYXVsdCB0byAxIHdoZXJlYXMgYWxsIG90aGVyIHRyYW5zZm9ybSBwcm9wZXJ0aWVzIGRlZmF1bHQgdG8gMC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiAvXnNjYWxlL2kudGVzdCh0cmFuc2Zvcm1OYW1lKSA/IDEgOiAwO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogV2hlbiB0cmFuc2Zvcm0gdmFsdWVzIGFyZSBzZXQsIHRoZXkgYXJlIHdyYXBwZWQgaW4gcGFyZW50aGVzZXMgYXMgcGVyIHRoZSBDU1Mgc3BlYy5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCBUaHVzLCB3aGVuIGV4dHJhY3RpbmcgdGhlaXIgdmFsdWVzIChmb3IgdHdlZW4gY2FsY3VsYXRpb25zKSwgd2Ugc3RyaXAgb2ZmIHRoZSBwYXJlbnRoZXNlcy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIERhdGEoZWxlbWVudCkudHJhbnNmb3JtQ2FjaGVbdHJhbnNmb3JtTmFtZV0ucmVwbGFjZSgvWygpXS9nLCBcIlwiKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcImluamVjdFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBpbnZhbGlkID0gZmFsc2U7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIElmIGFuIGluZGl2aWR1YWwgdHJhbnNmb3JtIHByb3BlcnR5IGNvbnRhaW5zIGFuIHVuc3VwcG9ydGVkIHVuaXQgdHlwZSwgdGhlIGJyb3dzZXIgaWdub3JlcyB0aGUgKmVudGlyZSogdHJhbnNmb3JtIHByb3BlcnR5LlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCBUaHVzLCBwcm90ZWN0IHVzZXJzIGZyb20gdGhlbXNlbHZlcyBieSBza2lwcGluZyBzZXR0aW5nIGZvciB0cmFuc2Zvcm0gdmFsdWVzIHN1cHBsaWVkIHdpdGggaW52YWxpZCB1bml0IHR5cGVzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIFN3aXRjaCBvbiB0aGUgYmFzZSB0cmFuc2Zvcm0gdHlwZTsgaWdub3JlIHRoZSBheGlzIGJ5IHJlbW92aW5nIHRoZSBsYXN0IGxldHRlciBmcm9tIHRoZSB0cmFuc2Zvcm0ncyBuYW1lLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN3aXRjaCAodHJhbnNmb3JtTmFtZS5zdWJzdHIoMCwgdHJhbnNmb3JtTmFtZS5sZW5ndGggLSAxKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogV2hpdGVsaXN0IHVuaXQgdHlwZXMgZm9yIGVhY2ggdHJhbnNmb3JtLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcInRyYW5zbGF0ZVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbnZhbGlkID0gIS8oJXxweHxlbXxyZW18dnd8dmh8XFxkKSQvaS50ZXN0KHByb3BlcnR5VmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogU2luY2UgYW4gYXhpcy1mcmVlIFwic2NhbGVcIiBwcm9wZXJ0eSBpcyBzdXBwb3J0ZWQgYXMgd2VsbCwgYSBsaXR0bGUgaGFjayBpcyB1c2VkIGhlcmUgdG8gZGV0ZWN0IGl0IGJ5IGNob3BwaW5nIG9mZiBpdHMgbGFzdCBsZXR0ZXIuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwic2NhbFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcInNjYWxlXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIENocm9tZSBvbiBBbmRyb2lkIGhhcyBhIGJ1ZyBpbiB3aGljaCBzY2FsZWQgZWxlbWVudHMgYmx1ciBpZiB0aGVpciBpbml0aWFsIHNjYWxlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCB2YWx1ZSBpcyBiZWxvdyAxICh3aGljaCBjYW4gaGFwcGVuIHdpdGggZm9yY2VmZWVkaW5nKS4gVGh1cywgd2UgZGV0ZWN0IGEgeWV0LXVuc2V0IHNjYWxlIHByb3BlcnR5XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCBhbmQgZW5zdXJlIHRoYXQgaXRzIGZpcnN0IHZhbHVlIGlzIGFsd2F5cyAxLiBNb3JlIGluZm86IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTA0MTc4OTAvY3NzMy1hbmltYXRpb25zLXdpdGgtdHJhbnNmb3JtLWNhdXNlcy1ibHVycmVkLWVsZW1lbnRzLW9uLXdlYmtpdC8xMDQxNzk2MiMxMDQxNzk2MiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoVmVsb2NpdHkuU3RhdGUuaXNBbmRyb2lkICYmIERhdGEoZWxlbWVudCkudHJhbnNmb3JtQ2FjaGVbdHJhbnNmb3JtTmFtZV0gPT09IHVuZGVmaW5lZCAmJiBwcm9wZXJ0eVZhbHVlIDwgMSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSAxO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbnZhbGlkID0gIS8oXFxkKSQvaS50ZXN0KHByb3BlcnR5VmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJza2V3XCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGludmFsaWQgPSAhLyhkZWd8XFxkKSQvaS50ZXN0KHByb3BlcnR5VmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJyb3RhdGVcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW52YWxpZCA9ICEvKGRlZ3xcXGQpJC9pLnRlc3QocHJvcGVydHlWYWx1ZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFpbnZhbGlkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBBcyBwZXIgdGhlIENTUyBzcGVjLCB3cmFwIHRoZSB2YWx1ZSBpbiBwYXJlbnRoZXNlcy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdERhdGEoZWxlbWVudCkudHJhbnNmb3JtQ2FjaGVbdHJhbnNmb3JtTmFtZV0gPSBcIihcIiArIHByb3BlcnR5VmFsdWUgKyBcIilcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIEFsdGhvdWdoIHRoZSB2YWx1ZSBpcyBzZXQgb24gdGhlIHRyYW5zZm9ybUNhY2hlIG9iamVjdCwgcmV0dXJuIHRoZSBuZXdseS11cGRhdGVkIHZhbHVlIGZvciB0aGUgY2FsbGluZyBjb2RlIHRvIHByb2Nlc3MgYXMgbm9ybWFsLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBEYXRhKGVsZW1lbnQpLnRyYW5zZm9ybUNhY2hlW3RyYW5zZm9ybU5hbWVdO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdH0pKCk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyoqKioqKioqKioqKipcclxuXHRcdFx0XHRcdCBDb2xvcnNcclxuXHRcdFx0XHRcdCAqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdC8qIFNpbmNlIFZlbG9jaXR5IG9ubHkgYW5pbWF0ZXMgYSBzaW5nbGUgbnVtZXJpYyB2YWx1ZSBwZXIgcHJvcGVydHksIGNvbG9yIGFuaW1hdGlvbiBpcyBhY2hpZXZlZCBieSBob29raW5nIHRoZSBpbmRpdmlkdWFsIFJHQkEgY29tcG9uZW50cyBvZiBDU1MgY29sb3IgcHJvcGVydGllcy5cclxuXHRcdFx0XHRcdCBBY2NvcmRpbmdseSwgY29sb3IgdmFsdWVzIG11c3QgYmUgbm9ybWFsaXplZCAoZS5nLiBcIiNmZjAwMDBcIiwgXCJyZWRcIiwgYW5kIFwicmdiKDI1NSwgMCwgMClcIiA9PT4gXCIyNTUgMCAwIDFcIikgc28gdGhhdCB0aGVpciBjb21wb25lbnRzIGNhbiBiZSBpbmplY3RlZC9leHRyYWN0ZWQgYnkgQ1NTLkhvb2tzIGxvZ2ljLiAqL1xyXG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBDU1MuTGlzdHMuY29sb3JzLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdC8qIFdyYXAgdGhlIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBub3JtYWxpemF0aW9uIGZ1bmN0aW9uIGluIGEgbmV3IHNjb3BlIHNvIHRoYXQgY29sb3JOYW1lJ3MgdmFsdWUgaXMgcGFpcmVkIHdpdGggaXRzIHJlc3BlY3RpdmUgZnVuY3Rpb24uXHJcblx0XHRcdFx0XHRcdCAoT3RoZXJ3aXNlLCBhbGwgZnVuY3Rpb25zIHdvdWxkIHRha2UgdGhlIGZpbmFsIGZvciBsb29wJ3MgY29sb3JOYW1lLikgKi9cclxuXHRcdFx0XHRcdFx0KGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHRcdHZhciBjb2xvck5hbWUgPSBDU1MuTGlzdHMuY29sb3JzW2pdO1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBOb3RlOiBJbiBJRTw9OCwgd2hpY2ggc3VwcG9ydCByZ2IgYnV0IG5vdCByZ2JhLCBjb2xvciBwcm9wZXJ0aWVzIGFyZSByZXZlcnRlZCB0byByZ2IgYnkgc3RyaXBwaW5nIG9mZiB0aGUgYWxwaGEgY29tcG9uZW50LiAqL1xyXG5cdFx0XHRcdFx0XHRcdENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkW2NvbG9yTmFtZV0gPSBmdW5jdGlvbih0eXBlLCBlbGVtZW50LCBwcm9wZXJ0eVZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRzd2l0Y2ggKHR5cGUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIm5hbWVcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gY29sb3JOYW1lO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIENvbnZlcnQgYWxsIGNvbG9yIHZhbHVlcyBpbnRvIHRoZSByZ2IgZm9ybWF0LiAoT2xkIElFIGNhbiByZXR1cm4gaGV4IHZhbHVlcyBhbmQgY29sb3IgbmFtZXMgaW5zdGVhZCBvZiByZ2IvcmdiYS4pICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJleHRyYWN0XCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGV4dHJhY3RlZDtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogSWYgdGhlIGNvbG9yIGlzIGFscmVhZHkgaW4gaXRzIGhvb2thYmxlIGZvcm0gKGUuZy4gXCIyNTUgMjU1IDI1NSAxXCIpIGR1ZSB0byBoYXZpbmcgYmVlbiBwcmV2aW91c2x5IGV4dHJhY3RlZCwgc2tpcCBleHRyYWN0aW9uLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChDU1MuUmVnRXgud3JhcHBlZFZhbHVlQWxyZWFkeUV4dHJhY3RlZC50ZXN0KHByb3BlcnR5VmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRleHRyYWN0ZWQgPSBwcm9wZXJ0eVZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgY29udmVydGVkLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbG9yTmFtZXMgPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRibGFjazogXCJyZ2IoMCwgMCwgMClcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJsdWU6IFwicmdiKDAsIDAsIDI1NSlcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGdyYXk6IFwicmdiKDEyOCwgMTI4LCAxMjgpXCIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRncmVlbjogXCJyZ2IoMCwgMTI4LCAwKVwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVkOiBcInJnYigyNTUsIDAsIDApXCIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aGl0ZTogXCJyZ2IoMjU1LCAyNTUsIDI1NSlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogQ29udmVydCBjb2xvciBuYW1lcyB0byByZ2IuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoL15bQS16XSskL2kudGVzdChwcm9wZXJ0eVZhbHVlKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoY29sb3JOYW1lc1twcm9wZXJ0eVZhbHVlXSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udmVydGVkID0gY29sb3JOYW1lc1twcm9wZXJ0eVZhbHVlXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBJZiBhbiB1bm1hdGNoZWQgY29sb3IgbmFtZSBpcyBwcm92aWRlZCwgZGVmYXVsdCB0byBibGFjay4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZWQgPSBjb2xvck5hbWVzLmJsYWNrO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIENvbnZlcnQgaGV4IHZhbHVlcyB0byByZ2IuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKENTUy5SZWdFeC5pc0hleC50ZXN0KHByb3BlcnR5VmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlZCA9IFwicmdiKFwiICsgQ1NTLlZhbHVlcy5oZXhUb1JnYihwcm9wZXJ0eVZhbHVlKS5qb2luKFwiIFwiKSArIFwiKVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBJZiB0aGUgcHJvdmlkZWQgY29sb3IgZG9lc24ndCBtYXRjaCBhbnkgb2YgdGhlIGFjY2VwdGVkIGNvbG9yIGZvcm1hdHMsIGRlZmF1bHQgdG8gYmxhY2suICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoL15yZ2JhP1xcKC9pLnRlc3QocHJvcGVydHlWYWx1ZSkpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlZCA9IGNvbG9yTmFtZXMuYmxhY2s7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogUmVtb3ZlIHRoZSBzdXJyb3VuZGluZyBcInJnYi9yZ2JhKClcIiBzdHJpbmcgdGhlbiByZXBsYWNlIGNvbW1hcyB3aXRoIHNwYWNlcyBhbmQgc3RyaXBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCByZXBlYXRlZCBzcGFjZXMgKGluIGNhc2UgdGhlIHZhbHVlIGluY2x1ZGVkIHNwYWNlcyB0byBiZWdpbiB3aXRoKS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGV4dHJhY3RlZCA9IChjb252ZXJ0ZWQgfHwgcHJvcGVydHlWYWx1ZSkudG9TdHJpbmcoKS5tYXRjaChDU1MuUmVnRXgudmFsdWVVbndyYXApWzFdLnJlcGxhY2UoLywoXFxzKyk/L2csIFwiIFwiKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIFNvIGxvbmcgYXMgdGhpcyBpc24ndCA8PUlFOCwgYWRkIGEgZm91cnRoIChhbHBoYSkgY29tcG9uZW50IGlmIGl0J3MgbWlzc2luZyBhbmQgZGVmYXVsdCBpdCB0byAxICh2aXNpYmxlKS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoKCFJRSB8fCBJRSA+IDgpICYmIGV4dHJhY3RlZC5zcGxpdChcIiBcIikubGVuZ3RoID09PSAzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRleHRyYWN0ZWQgKz0gXCIgMVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGV4dHJhY3RlZDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcImluamVjdFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIElmIHdlIGhhdmUgYSBwYXR0ZXJuIHRoZW4gaXQgbWlnaHQgYWxyZWFkeSBoYXZlIHRoZSByaWdodCB2YWx1ZXMgKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoL15yZ2IvLnRlc3QocHJvcGVydHlWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBwcm9wZXJ0eVZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogSWYgdGhpcyBpcyBJRTw9OCBhbmQgYW4gYWxwaGEgY29tcG9uZW50IGV4aXN0cywgc3RyaXAgaXQgb2ZmLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChJRSA8PSA4KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocHJvcGVydHlWYWx1ZS5zcGxpdChcIiBcIikubGVuZ3RoID09PSA0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSBwcm9wZXJ0eVZhbHVlLnNwbGl0KC9cXHMrLykuc2xpY2UoMCwgMykuam9pbihcIiBcIik7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBPdGhlcndpc2UsIGFkZCBhIGZvdXJ0aCAoYWxwaGEpIGNvbXBvbmVudCBpZiBpdCdzIG1pc3NpbmcgYW5kIGRlZmF1bHQgaXQgdG8gMSAodmlzaWJsZSkuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChwcm9wZXJ0eVZhbHVlLnNwbGl0KFwiIFwiKS5sZW5ndGggPT09IDMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgKz0gXCIgMVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogUmUtaW5zZXJ0IHRoZSBicm93c2VyLWFwcHJvcHJpYXRlIHdyYXBwZXIoXCJyZ2IvcmdiYSgpXCIpLCBpbnNlcnQgY29tbWFzLCBhbmQgc3RyaXAgb2ZmIGRlY2ltYWwgdW5pdHNcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgb24gYWxsIHZhbHVlcyBidXQgdGhlIGZvdXJ0aCAoUiwgRywgYW5kIEIgb25seSBhY2NlcHQgd2hvbGUgbnVtYmVycykuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChJRSA8PSA4ID8gXCJyZ2JcIiA6IFwicmdiYVwiKSArIFwiKFwiICsgcHJvcGVydHlWYWx1ZS5yZXBsYWNlKC9cXHMrL2csIFwiLFwiKS5yZXBsYWNlKC9cXC4oXFxkKSsoPz0sKS9nLCBcIlwiKSArIFwiKVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdH0pKCk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyoqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHQgRGltZW5zaW9uc1xyXG5cdFx0XHRcdFx0ICoqKioqKioqKioqKioqL1xyXG5cdFx0XHRcdFx0ZnVuY3Rpb24gYXVnbWVudERpbWVuc2lvbihuYW1lLCBlbGVtZW50LCB3YW50SW5uZXIpIHtcclxuXHRcdFx0XHRcdFx0dmFyIGlzQm9yZGVyQm94ID0gQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJib3hTaXppbmdcIikudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSBcImJvcmRlci1ib3hcIjtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChpc0JvcmRlckJveCA9PT0gKHdhbnRJbm5lciB8fCBmYWxzZSkpIHtcclxuXHRcdFx0XHRcdFx0XHQvKiBpbiBib3gtc2l6aW5nIG1vZGUsIHRoZSBDU1Mgd2lkdGggLyBoZWlnaHQgYWNjZXNzb3JzIGFscmVhZHkgZ2l2ZSB0aGUgb3V0ZXJXaWR0aCAvIG91dGVySGVpZ2h0LiAqL1xyXG5cdFx0XHRcdFx0XHRcdHZhciBpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0YXVnbWVudCA9IDAsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHNpZGVzID0gbmFtZSA9PT0gXCJ3aWR0aFwiID8gW1wiTGVmdFwiLCBcIlJpZ2h0XCJdIDogW1wiVG9wXCIsIFwiQm90dG9tXCJdLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmaWVsZHMgPSBbXCJwYWRkaW5nXCIgKyBzaWRlc1swXSwgXCJwYWRkaW5nXCIgKyBzaWRlc1sxXSwgXCJib3JkZXJcIiArIHNpZGVzWzBdICsgXCJXaWR0aFwiLCBcImJvcmRlclwiICsgc2lkZXNbMV0gKyBcIldpZHRoXCJdO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IHBhcnNlRmxvYXQoQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgZmllbGRzW2ldKSk7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIWlzTmFOKHZhbHVlKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhdWdtZW50ICs9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gd2FudElubmVyID8gLWF1Z21lbnQgOiBhdWdtZW50O1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHJldHVybiAwO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZnVuY3Rpb24gZ2V0RGltZW5zaW9uKG5hbWUsIHdhbnRJbm5lcikge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24odHlwZSwgZWxlbWVudCwgcHJvcGVydHlWYWx1ZSkge1xyXG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAodHlwZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIm5hbWVcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG5hbWU7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiZXh0cmFjdFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcGFyc2VGbG9hdChwcm9wZXJ0eVZhbHVlKSArIGF1Z21lbnREaW1lbnNpb24obmFtZSwgZWxlbWVudCwgd2FudElubmVyKTtcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJpbmplY3RcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChwYXJzZUZsb2F0KHByb3BlcnR5VmFsdWUpIC0gYXVnbWVudERpbWVuc2lvbihuYW1lLCBlbGVtZW50LCB3YW50SW5uZXIpKSArIFwicHhcIjtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRDU1MuTm9ybWFsaXphdGlvbnMucmVnaXN0ZXJlZC5pbm5lcldpZHRoID0gZ2V0RGltZW5zaW9uKFwid2lkdGhcIiwgdHJ1ZSk7XHJcblx0XHRcdFx0XHRDU1MuTm9ybWFsaXphdGlvbnMucmVnaXN0ZXJlZC5pbm5lckhlaWdodCA9IGdldERpbWVuc2lvbihcImhlaWdodFwiLCB0cnVlKTtcclxuXHRcdFx0XHRcdENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkLm91dGVyV2lkdGggPSBnZXREaW1lbnNpb24oXCJ3aWR0aFwiKTtcclxuXHRcdFx0XHRcdENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkLm91dGVySGVpZ2h0ID0gZ2V0RGltZW5zaW9uKFwiaGVpZ2h0XCIpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgQ1NTIFByb3BlcnR5IE5hbWVzXHJcblx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHROYW1lczoge1xyXG5cdFx0XHRcdC8qIENhbWVsY2FzZSBhIHByb3BlcnR5IG5hbWUgaW50byBpdHMgSmF2YVNjcmlwdCBub3RhdGlvbiAoZS5nLiBcImJhY2tncm91bmQtY29sb3JcIiA9PT4gXCJiYWNrZ3JvdW5kQ29sb3JcIikuXHJcblx0XHRcdFx0IENhbWVsY2FzaW5nIGlzIHVzZWQgdG8gbm9ybWFsaXplIHByb3BlcnR5IG5hbWVzIGJldHdlZW4gYW5kIGFjcm9zcyBjYWxscy4gKi9cclxuXHRcdFx0XHRjYW1lbENhc2U6IGZ1bmN0aW9uKHByb3BlcnR5KSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gcHJvcGVydHkucmVwbGFjZSgvLShcXHcpL2csIGZ1bmN0aW9uKG1hdGNoLCBzdWJNYXRjaCkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gc3ViTWF0Y2gudG9VcHBlckNhc2UoKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0LyogRm9yIFNWRyBlbGVtZW50cywgc29tZSBwcm9wZXJ0aWVzIChuYW1lbHksIGRpbWVuc2lvbmFsIG9uZXMpIGFyZSBHRVQvU0VUIHZpYSB0aGUgZWxlbWVudCdzIEhUTUwgYXR0cmlidXRlcyAoaW5zdGVhZCBvZiB2aWEgQ1NTIHN0eWxlcykuICovXHJcblx0XHRcdFx0U1ZHQXR0cmlidXRlOiBmdW5jdGlvbihwcm9wZXJ0eSkge1xyXG5cdFx0XHRcdFx0dmFyIFNWR0F0dHJpYnV0ZXMgPSBcIndpZHRofGhlaWdodHx4fHl8Y3h8Y3l8cnxyeHxyeXx4MXx4Mnx5MXx5MlwiO1xyXG5cclxuXHRcdFx0XHRcdC8qIENlcnRhaW4gYnJvd3NlcnMgcmVxdWlyZSBhbiBTVkcgdHJhbnNmb3JtIHRvIGJlIGFwcGxpZWQgYXMgYW4gYXR0cmlidXRlLiAoT3RoZXJ3aXNlLCBhcHBsaWNhdGlvbiB2aWEgQ1NTIGlzIHByZWZlcmFibGUgZHVlIHRvIDNEIHN1cHBvcnQuKSAqL1xyXG5cdFx0XHRcdFx0aWYgKElFIHx8IChWZWxvY2l0eS5TdGF0ZS5pc0FuZHJvaWQgJiYgIVZlbG9jaXR5LlN0YXRlLmlzQ2hyb21lKSkge1xyXG5cdFx0XHRcdFx0XHRTVkdBdHRyaWJ1dGVzICs9IFwifHRyYW5zZm9ybVwiO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHJldHVybiBuZXcgUmVnRXhwKFwiXihcIiArIFNWR0F0dHJpYnV0ZXMgKyBcIikkXCIsIFwiaVwiKS50ZXN0KHByb3BlcnR5KTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdC8qIERldGVybWluZSB3aGV0aGVyIGEgcHJvcGVydHkgc2hvdWxkIGJlIHNldCB3aXRoIGEgdmVuZG9yIHByZWZpeC4gKi9cclxuXHRcdFx0XHQvKiBJZiBhIHByZWZpeGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IGV4aXN0cywgcmV0dXJuIGl0LiBPdGhlcndpc2UsIHJldHVybiB0aGUgb3JpZ2luYWwgcHJvcGVydHkgbmFtZS5cclxuXHRcdFx0XHQgSWYgdGhlIHByb3BlcnR5IGlzIG5vdCBhdCBhbGwgc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyLCByZXR1cm4gYSBmYWxzZSBmbGFnLiAqL1xyXG5cdFx0XHRcdHByZWZpeENoZWNrOiBmdW5jdGlvbihwcm9wZXJ0eSkge1xyXG5cdFx0XHRcdFx0LyogSWYgdGhpcyBwcm9wZXJ0eSBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQsIHJldHVybiB0aGUgY2FjaGVkIHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0aWYgKFZlbG9jaXR5LlN0YXRlLnByZWZpeE1hdGNoZXNbcHJvcGVydHldKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBbVmVsb2NpdHkuU3RhdGUucHJlZml4TWF0Y2hlc1twcm9wZXJ0eV0sIHRydWVdO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0dmFyIHZlbmRvcnMgPSBbXCJcIiwgXCJXZWJraXRcIiwgXCJNb3pcIiwgXCJtc1wiLCBcIk9cIl07XHJcblxyXG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMCwgdmVuZG9yc0xlbmd0aCA9IHZlbmRvcnMubGVuZ3RoOyBpIDwgdmVuZG9yc0xlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIHByb3BlcnR5UHJlZml4ZWQ7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmIChpID09PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVByZWZpeGVkID0gcHJvcGVydHk7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIENhcGl0YWxpemUgdGhlIGZpcnN0IGxldHRlciBvZiB0aGUgcHJvcGVydHkgdG8gY29uZm9ybSB0byBKYXZhU2NyaXB0IHZlbmRvciBwcmVmaXggbm90YXRpb24gKGUuZy4gd2Via2l0RmlsdGVyKS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5UHJlZml4ZWQgPSB2ZW5kb3JzW2ldICsgcHJvcGVydHkucmVwbGFjZSgvXlxcdy8sIGZ1bmN0aW9uKG1hdGNoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBtYXRjaC50b1VwcGVyQ2FzZSgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBDaGVjayBpZiB0aGUgYnJvd3NlciBzdXBwb3J0cyB0aGlzIHByb3BlcnR5IGFzIHByZWZpeGVkLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmIChUeXBlLmlzU3RyaW5nKFZlbG9jaXR5LlN0YXRlLnByZWZpeEVsZW1lbnQuc3R5bGVbcHJvcGVydHlQcmVmaXhlZF0pKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBDYWNoZSB0aGUgbWF0Y2guICovXHJcblx0XHRcdFx0XHRcdFx0XHRWZWxvY2l0eS5TdGF0ZS5wcmVmaXhNYXRjaGVzW3Byb3BlcnR5XSA9IHByb3BlcnR5UHJlZml4ZWQ7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFtwcm9wZXJ0eVByZWZpeGVkLCB0cnVlXTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZSBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIHByb3BlcnR5IGluIGFueSBmb3JtLCBpbmNsdWRlIGEgZmFsc2UgZmxhZyBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuIGRlY2lkZSBob3cgdG8gcHJvY2VlZC4gKi9cclxuXHRcdFx0XHRcdFx0cmV0dXJuIFtwcm9wZXJ0eSwgZmFsc2VdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgQ1NTIFByb3BlcnR5IFZhbHVlc1xyXG5cdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0VmFsdWVzOiB7XHJcblx0XHRcdFx0LyogSGV4IHRvIFJHQiBjb252ZXJzaW9uLiBDb3B5cmlnaHQgVGltIERvd246IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTYyMzgzOC9yZ2ItdG8taGV4LWFuZC1oZXgtdG8tcmdiICovXHJcblx0XHRcdFx0aGV4VG9SZ2I6IGZ1bmN0aW9uKGhleCkge1xyXG5cdFx0XHRcdFx0dmFyIHNob3J0Zm9ybVJlZ2V4ID0gL14jPyhbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKSQvaSxcclxuXHRcdFx0XHRcdFx0XHRsb25nZm9ybVJlZ2V4ID0gL14jPyhbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KSQvaSxcclxuXHRcdFx0XHRcdFx0XHRyZ2JQYXJ0cztcclxuXHJcblx0XHRcdFx0XHRoZXggPSBoZXgucmVwbGFjZShzaG9ydGZvcm1SZWdleCwgZnVuY3Rpb24obSwgciwgZywgYikge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gciArIHIgKyBnICsgZyArIGIgKyBiO1xyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0cmdiUGFydHMgPSBsb25nZm9ybVJlZ2V4LmV4ZWMoaGV4KTtcclxuXHJcblx0XHRcdFx0XHRyZXR1cm4gcmdiUGFydHMgPyBbcGFyc2VJbnQocmdiUGFydHNbMV0sIDE2KSwgcGFyc2VJbnQocmdiUGFydHNbMl0sIDE2KSwgcGFyc2VJbnQocmdiUGFydHNbM10sIDE2KV0gOiBbMCwgMCwgMF07XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRpc0NTU051bGxWYWx1ZTogZnVuY3Rpb24odmFsdWUpIHtcclxuXHRcdFx0XHRcdC8qIFRoZSBicm93c2VyIGRlZmF1bHRzIENTUyB2YWx1ZXMgdGhhdCBoYXZlIG5vdCBiZWVuIHNldCB0byBlaXRoZXIgMCBvciBvbmUgb2Ygc2V2ZXJhbCBwb3NzaWJsZSBudWxsLXZhbHVlIHN0cmluZ3MuXHJcblx0XHRcdFx0XHQgVGh1cywgd2UgY2hlY2sgZm9yIGJvdGggZmFsc2luZXNzIGFuZCB0aGVzZSBzcGVjaWFsIHN0cmluZ3MuICovXHJcblx0XHRcdFx0XHQvKiBOdWxsLXZhbHVlIGNoZWNraW5nIGlzIHBlcmZvcm1lZCB0byBkZWZhdWx0IHRoZSBzcGVjaWFsIHN0cmluZ3MgdG8gMCAoZm9yIHRoZSBzYWtlIG9mIHR3ZWVuaW5nKSBvciB0aGVpciBob29rXHJcblx0XHRcdFx0XHQgdGVtcGxhdGVzIGFzIGRlZmluZWQgYXMgQ1NTLkhvb2tzIChmb3IgdGhlIHNha2Ugb2YgaG9vayBpbmplY3Rpb24vZXh0cmFjdGlvbikuICovXHJcblx0XHRcdFx0XHQvKiBOb3RlOiBDaHJvbWUgcmV0dXJucyBcInJnYmEoMCwgMCwgMCwgMClcIiBmb3IgYW4gdW5kZWZpbmVkIGNvbG9yIHdoZXJlYXMgSUUgcmV0dXJucyBcInRyYW5zcGFyZW50XCIuICovXHJcblx0XHRcdFx0XHRyZXR1cm4gKCF2YWx1ZSB8fCAvXihub25lfGF1dG98dHJhbnNwYXJlbnR8KHJnYmFcXCgwLCA/MCwgPzAsID8wXFwpKSkkL2kudGVzdCh2YWx1ZSkpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0LyogUmV0cmlldmUgYSBwcm9wZXJ0eSdzIGRlZmF1bHQgdW5pdCB0eXBlLiBVc2VkIGZvciBhc3NpZ25pbmcgYSB1bml0IHR5cGUgd2hlbiBvbmUgaXMgbm90IHN1cHBsaWVkIGJ5IHRoZSB1c2VyLiAqL1xyXG5cdFx0XHRcdGdldFVuaXRUeXBlOiBmdW5jdGlvbihwcm9wZXJ0eSkge1xyXG5cdFx0XHRcdFx0aWYgKC9eKHJvdGF0ZXxza2V3KS9pLnRlc3QocHJvcGVydHkpKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBcImRlZ1wiO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICgvKF4oc2NhbGV8c2NhbGVYfHNjYWxlWXxzY2FsZVp8YWxwaGF8ZmxleEdyb3d8ZmxleEhlaWdodHx6SW5kZXh8Zm9udFdlaWdodCkkKXwoKG9wYWNpdHl8cmVkfGdyZWVufGJsdWV8YWxwaGEpJCkvaS50ZXN0KHByb3BlcnR5KSkge1xyXG5cdFx0XHRcdFx0XHQvKiBUaGUgYWJvdmUgcHJvcGVydGllcyBhcmUgdW5pdGxlc3MuICovXHJcblx0XHRcdFx0XHRcdHJldHVybiBcIlwiO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0LyogRGVmYXVsdCB0byBweCBmb3IgYWxsIG90aGVyIHByb3BlcnRpZXMuICovXHJcblx0XHRcdFx0XHRcdHJldHVybiBcInB4XCI7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQvKiBIVE1MIGVsZW1lbnRzIGRlZmF1bHQgdG8gYW4gYXNzb2NpYXRlZCBkaXNwbGF5IHR5cGUgd2hlbiB0aGV5J3JlIG5vdCBzZXQgdG8gZGlzcGxheTpub25lLiAqL1xyXG5cdFx0XHRcdC8qIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgY29ycmVjdGx5IHNldHRpbmcgdGhlIG5vbi1cIm5vbmVcIiBkaXNwbGF5IHZhbHVlIGluIGNlcnRhaW4gVmVsb2NpdHkgcmVkaXJlY3RzLCBzdWNoIGFzIGZhZGVJbi9PdXQuICovXHJcblx0XHRcdFx0Z2V0RGlzcGxheVR5cGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdHZhciB0YWdOYW1lID0gZWxlbWVudCAmJiBlbGVtZW50LnRhZ05hbWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuXHRcdFx0XHRcdGlmICgvXihifGJpZ3xpfHNtYWxsfHR0fGFiYnJ8YWNyb255bXxjaXRlfGNvZGV8ZGZufGVtfGtiZHxzdHJvbmd8c2FtcHx2YXJ8YXxiZG98YnJ8aW1nfG1hcHxvYmplY3R8cXxzY3JpcHR8c3BhbnxzdWJ8c3VwfGJ1dHRvbnxpbnB1dHxsYWJlbHxzZWxlY3R8dGV4dGFyZWEpJC9pLnRlc3QodGFnTmFtZSkpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIFwiaW5saW5lXCI7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKC9eKGxpKSQvaS50ZXN0KHRhZ05hbWUpKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBcImxpc3QtaXRlbVwiO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICgvXih0cikkL2kudGVzdCh0YWdOYW1lKSkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gXCJ0YWJsZS1yb3dcIjtcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoL14odGFibGUpJC9pLnRlc3QodGFnTmFtZSkpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIFwidGFibGVcIjtcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoL14odGJvZHkpJC9pLnRlc3QodGFnTmFtZSkpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIFwidGFibGUtcm93LWdyb3VwXCI7XHJcblx0XHRcdFx0XHRcdC8qIERlZmF1bHQgdG8gXCJibG9ja1wiIHdoZW4gbm8gbWF0Y2ggaXMgZm91bmQuICovXHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gXCJibG9ja1wiO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0LyogVGhlIGNsYXNzIGFkZC9yZW1vdmUgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIHRlbXBvcmFyaWx5IGFwcGx5IGEgXCJ2ZWxvY2l0eS1hbmltYXRpbmdcIiBjbGFzcyB0byBlbGVtZW50cyB3aGlsZSB0aGV5J3JlIGFuaW1hdGluZy4gKi9cclxuXHRcdFx0XHRhZGRDbGFzczogZnVuY3Rpb24oZWxlbWVudCwgY2xhc3NOYW1lKSB7XHJcblx0XHRcdFx0XHRpZiAoZWxlbWVudCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoZWxlbWVudC5jbGFzc0xpc3QpIHtcclxuXHRcdFx0XHRcdFx0XHRlbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChUeXBlLmlzU3RyaW5nKGVsZW1lbnQuY2xhc3NOYW1lKSkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIEVsZW1lbnQuY2xhc3NOYW1lIGlzIGFyb3VuZCAxNSUgZmFzdGVyIHRoZW4gc2V0L2dldEF0dHJpYnV0ZVxyXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuY2xhc3NOYW1lICs9IChlbGVtZW50LmNsYXNzTmFtZS5sZW5ndGggPyBcIiBcIiA6IFwiXCIpICsgY2xhc3NOYW1lO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdC8vIFdvcmsgYXJvdW5kIGZvciBJRSBzdHJpY3QgbW9kZSBhbmltYXRpbmcgU1ZHIC0gYW5kIGFueXRoaW5nIGVsc2UgdGhhdCBkb2Vzbid0IGJlaGF2ZSBjb3JyZWN0bHkgLSB0aGUgc2FtZSB3YXkgalF1ZXJ5IGRvZXMgaXRcclxuXHRcdFx0XHRcdFx0XHR2YXIgY3VycmVudENsYXNzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoSUUgPD0gNyA/IFwiY2xhc3NOYW1lXCIgOiBcImNsYXNzXCIpIHx8IFwiXCI7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgY3VycmVudENsYXNzICsgKGN1cnJlbnRDbGFzcyA/IFwiIFwiIDogXCJcIikgKyBjbGFzc05hbWUpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRyZW1vdmVDbGFzczogZnVuY3Rpb24oZWxlbWVudCwgY2xhc3NOYW1lKSB7XHJcblx0XHRcdFx0XHRpZiAoZWxlbWVudCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoZWxlbWVudC5jbGFzc0xpc3QpIHtcclxuXHRcdFx0XHRcdFx0XHRlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChUeXBlLmlzU3RyaW5nKGVsZW1lbnQuY2xhc3NOYW1lKSkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIEVsZW1lbnQuY2xhc3NOYW1lIGlzIGFyb3VuZCAxNSUgZmFzdGVyIHRoZW4gc2V0L2dldEF0dHJpYnV0ZVxyXG5cdFx0XHRcdFx0XHRcdC8vIFRPRE86IE5lZWQgc29tZSBqc3BlcmYgdGVzdHMgb24gcGVyZm9ybWFuY2UgLSBjYW4gd2UgZ2V0IHJpZCBvZiB0aGUgcmVnZXggYW5kIG1heWJlIHVzZSBzcGxpdCAvIGFycmF5IG1hbmlwdWxhdGlvbj9cclxuXHRcdFx0XHRcdFx0XHRlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lLnRvU3RyaW5nKCkucmVwbGFjZShuZXcgUmVnRXhwKFwiKF58XFxcXHMpXCIgKyBjbGFzc05hbWUuc3BsaXQoXCIgXCIpLmpvaW4oXCJ8XCIpICsgXCIoXFxcXHN8JClcIiwgXCJnaVwiKSwgXCIgXCIpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdC8vIFdvcmsgYXJvdW5kIGZvciBJRSBzdHJpY3QgbW9kZSBhbmltYXRpbmcgU1ZHIC0gYW5kIGFueXRoaW5nIGVsc2UgdGhhdCBkb2Vzbid0IGJlaGF2ZSBjb3JyZWN0bHkgLSB0aGUgc2FtZSB3YXkgalF1ZXJ5IGRvZXMgaXRcclxuXHRcdFx0XHRcdFx0XHR2YXIgY3VycmVudENsYXNzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoSUUgPD0gNyA/IFwiY2xhc3NOYW1lXCIgOiBcImNsYXNzXCIpIHx8IFwiXCI7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgY3VycmVudENsYXNzLnJlcGxhY2UobmV3IFJlZ0V4cChcIihefFxccylcIiArIGNsYXNzTmFtZS5zcGxpdChcIiBcIikuam9pbihcInxcIikgKyBcIihcXHN8JClcIiwgXCJnaVwiKSwgXCIgXCIpKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0IFN0eWxlIEdldHRpbmcgJiBTZXR0aW5nXHJcblx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0LyogVGhlIHNpbmd1bGFyIGdldFByb3BlcnR5VmFsdWUsIHdoaWNoIHJvdXRlcyB0aGUgbG9naWMgZm9yIGFsbCBub3JtYWxpemF0aW9ucywgaG9va3MsIGFuZCBzdGFuZGFyZCBDU1MgcHJvcGVydGllcy4gKi9cclxuXHRcdFx0Z2V0UHJvcGVydHlWYWx1ZTogZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHksIHJvb3RQcm9wZXJ0eVZhbHVlLCBmb3JjZVN0eWxlTG9va3VwKSB7XHJcblx0XHRcdFx0LyogR2V0IGFuIGVsZW1lbnQncyBjb21wdXRlZCBwcm9wZXJ0eSB2YWx1ZS4gKi9cclxuXHRcdFx0XHQvKiBOb3RlOiBSZXRyaWV2aW5nIHRoZSB2YWx1ZSBvZiBhIENTUyBwcm9wZXJ0eSBjYW5ub3Qgc2ltcGx5IGJlIHBlcmZvcm1lZCBieSBjaGVja2luZyBhbiBlbGVtZW50J3NcclxuXHRcdFx0XHQgc3R5bGUgYXR0cmlidXRlICh3aGljaCBvbmx5IHJlZmxlY3RzIHVzZXItZGVmaW5lZCB2YWx1ZXMpLiBJbnN0ZWFkLCB0aGUgYnJvd3NlciBtdXN0IGJlIHF1ZXJpZWQgZm9yIGEgcHJvcGVydHknc1xyXG5cdFx0XHRcdCAqY29tcHV0ZWQqIHZhbHVlLiBZb3UgY2FuIHJlYWQgbW9yZSBhYm91dCBnZXRDb21wdXRlZFN0eWxlIGhlcmU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0FQSS93aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSAqL1xyXG5cdFx0XHRcdGZ1bmN0aW9uIGNvbXB1dGVQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIHByb3BlcnR5KSB7XHJcblx0XHRcdFx0XHQvKiBXaGVuIGJveC1zaXppbmcgaXNuJ3Qgc2V0IHRvIGJvcmRlci1ib3gsIGhlaWdodCBhbmQgd2lkdGggc3R5bGUgdmFsdWVzIGFyZSBpbmNvcnJlY3RseSBjb21wdXRlZCB3aGVuIGFuXHJcblx0XHRcdFx0XHQgZWxlbWVudCdzIHNjcm9sbGJhcnMgYXJlIHZpc2libGUgKHdoaWNoIGV4cGFuZHMgdGhlIGVsZW1lbnQncyBkaW1lbnNpb25zKS4gVGh1cywgd2UgZGVmZXIgdG8gdGhlIG1vcmUgYWNjdXJhdGVcclxuXHRcdFx0XHRcdCBvZmZzZXRIZWlnaHQvV2lkdGggcHJvcGVydHksIHdoaWNoIGluY2x1ZGVzIHRoZSB0b3RhbCBkaW1lbnNpb25zIGZvciBpbnRlcmlvciwgYm9yZGVyLCBwYWRkaW5nLCBhbmQgc2Nyb2xsYmFyLlxyXG5cdFx0XHRcdFx0IFdlIHN1YnRyYWN0IGJvcmRlciBhbmQgcGFkZGluZyB0byBnZXQgdGhlIHN1bSBvZiBpbnRlcmlvciArIHNjcm9sbGJhci4gKi9cclxuXHRcdFx0XHRcdHZhciBjb21wdXRlZFZhbHVlID0gMDtcclxuXHJcblx0XHRcdFx0XHQvKiBJRTw9OCBkb2Vzbid0IHN1cHBvcnQgd2luZG93LmdldENvbXB1dGVkU3R5bGUsIHRodXMgd2UgZGVmZXIgdG8galF1ZXJ5LCB3aGljaCBoYXMgYW4gZXh0ZW5zaXZlIGFycmF5XHJcblx0XHRcdFx0XHQgb2YgaGFja3MgdG8gYWNjdXJhdGVseSByZXRyaWV2ZSBJRTggcHJvcGVydHkgdmFsdWVzLiBSZS1pbXBsZW1lbnRpbmcgdGhhdCBsb2dpYyBoZXJlIGlzIG5vdCB3b3J0aCBibG9hdGluZyB0aGVcclxuXHRcdFx0XHRcdCBjb2RlYmFzZSBmb3IgYSBkeWluZyBicm93c2VyLiBUaGUgcGVyZm9ybWFuY2UgcmVwZXJjdXNzaW9ucyBvZiB1c2luZyBqUXVlcnkgaGVyZSBhcmUgbWluaW1hbCBzaW5jZVxyXG5cdFx0XHRcdFx0IFZlbG9jaXR5IGlzIG9wdGltaXplZCB0byByYXJlbHkgKGFuZCBzb21ldGltZXMgbmV2ZXIpIHF1ZXJ5IHRoZSBET00uIEZ1cnRoZXIsIHRoZSAkLmNzcygpIGNvZGVwYXRoIGlzbid0IHRoYXQgc2xvdy4gKi9cclxuXHRcdFx0XHRcdGlmIChJRSA8PSA4KSB7XHJcblx0XHRcdFx0XHRcdGNvbXB1dGVkVmFsdWUgPSAkLmNzcyhlbGVtZW50LCBwcm9wZXJ0eSk7IC8qIEdFVCAqL1xyXG5cdFx0XHRcdFx0XHQvKiBBbGwgb3RoZXIgYnJvd3NlcnMgc3VwcG9ydCBnZXRDb21wdXRlZFN0eWxlLiBUaGUgcmV0dXJuZWQgbGl2ZSBvYmplY3QgcmVmZXJlbmNlIGlzIGNhY2hlZCBvbnRvIGl0c1xyXG5cdFx0XHRcdFx0XHQgYXNzb2NpYXRlZCBlbGVtZW50IHNvIHRoYXQgaXQgZG9lcyBub3QgbmVlZCB0byBiZSByZWZldGNoZWQgdXBvbiBldmVyeSBHRVQuICovXHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvKiBCcm93c2VycyBkbyBub3QgcmV0dXJuIGhlaWdodCBhbmQgd2lkdGggdmFsdWVzIGZvciBlbGVtZW50cyB0aGF0IGFyZSBzZXQgdG8gZGlzcGxheTpcIm5vbmVcIi4gVGh1cywgd2UgdGVtcG9yYXJpbHlcclxuXHRcdFx0XHRcdFx0IHRvZ2dsZSBkaXNwbGF5IHRvIHRoZSBlbGVtZW50IHR5cGUncyBkZWZhdWx0IHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHR2YXIgdG9nZ2xlRGlzcGxheSA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKC9eKHdpZHRofGhlaWdodCkkLy50ZXN0KHByb3BlcnR5KSAmJiBDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcImRpc3BsYXlcIikgPT09IDApIHtcclxuXHRcdFx0XHRcdFx0XHR0b2dnbGVEaXNwbGF5ID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRDU1Muc2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcImRpc3BsYXlcIiwgQ1NTLlZhbHVlcy5nZXREaXNwbGF5VHlwZShlbGVtZW50KSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdHZhciByZXZlcnREaXNwbGF5ID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHRvZ2dsZURpc3BsYXkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdENTUy5zZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwiZGlzcGxheVwiLCBcIm5vbmVcIik7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKCFmb3JjZVN0eWxlTG9va3VwKSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5ID09PSBcImhlaWdodFwiICYmIENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwiYm94U2l6aW5nXCIpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSAhPT0gXCJib3JkZXItYm94XCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciBjb250ZW50Qm94SGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQgLSAocGFyc2VGbG9hdChDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcImJvcmRlclRvcFdpZHRoXCIpKSB8fCAwKSAtIChwYXJzZUZsb2F0KENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwiYm9yZGVyQm90dG9tV2lkdGhcIikpIHx8IDApIC0gKHBhcnNlRmxvYXQoQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJwYWRkaW5nVG9wXCIpKSB8fCAwKSAtIChwYXJzZUZsb2F0KENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwicGFkZGluZ0JvdHRvbVwiKSkgfHwgMCk7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXZlcnREaXNwbGF5KCk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGNvbnRlbnRCb3hIZWlnaHQ7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChwcm9wZXJ0eSA9PT0gXCJ3aWR0aFwiICYmIENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwiYm94U2l6aW5nXCIpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSAhPT0gXCJib3JkZXItYm94XCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciBjb250ZW50Qm94V2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoIC0gKHBhcnNlRmxvYXQoQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJib3JkZXJMZWZ0V2lkdGhcIikpIHx8IDApIC0gKHBhcnNlRmxvYXQoQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJib3JkZXJSaWdodFdpZHRoXCIpKSB8fCAwKSAtIChwYXJzZUZsb2F0KENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwicGFkZGluZ0xlZnRcIikpIHx8IDApIC0gKHBhcnNlRmxvYXQoQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJwYWRkaW5nUmlnaHRcIikpIHx8IDApO1xyXG5cdFx0XHRcdFx0XHRcdFx0cmV2ZXJ0RGlzcGxheSgpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBjb250ZW50Qm94V2lkdGg7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR2YXIgY29tcHV0ZWRTdHlsZTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIEZvciBlbGVtZW50cyB0aGF0IFZlbG9jaXR5IGhhc24ndCBiZWVuIGNhbGxlZCBvbiBkaXJlY3RseSAoZS5nLiB3aGVuIFZlbG9jaXR5IHF1ZXJpZXMgdGhlIERPTSBvbiBiZWhhbGZcclxuXHRcdFx0XHRcdFx0IG9mIGEgcGFyZW50IG9mIGFuIGVsZW1lbnQgaXRzIGFuaW1hdGluZyksIHBlcmZvcm0gYSBkaXJlY3QgZ2V0Q29tcHV0ZWRTdHlsZSBsb29rdXAgc2luY2UgdGhlIG9iamVjdCBpc24ndCBjYWNoZWQuICovXHJcblx0XHRcdFx0XHRcdGlmIChEYXRhKGVsZW1lbnQpID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgbnVsbCk7IC8qIEdFVCAqL1xyXG5cdFx0XHRcdFx0XHRcdC8qIElmIHRoZSBjb21wdXRlZFN0eWxlIG9iamVjdCBoYXMgeWV0IHRvIGJlIGNhY2hlZCwgZG8gc28gbm93LiAqL1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCFEYXRhKGVsZW1lbnQpLmNvbXB1dGVkU3R5bGUpIHtcclxuXHRcdFx0XHRcdFx0XHRjb21wdXRlZFN0eWxlID0gRGF0YShlbGVtZW50KS5jb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgbnVsbCk7IC8qIEdFVCAqL1xyXG5cdFx0XHRcdFx0XHRcdC8qIElmIGNvbXB1dGVkU3R5bGUgaXMgY2FjaGVkLCB1c2UgaXQuICovXHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tcHV0ZWRTdHlsZSA9IERhdGEoZWxlbWVudCkuY29tcHV0ZWRTdHlsZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyogSUUgYW5kIEZpcmVmb3ggZG8gbm90IHJldHVybiBhIHZhbHVlIGZvciB0aGUgZ2VuZXJpYyBib3JkZXJDb2xvciAtLSB0aGV5IG9ubHkgcmV0dXJuIGluZGl2aWR1YWwgdmFsdWVzIGZvciBlYWNoIGJvcmRlciBzaWRlJ3MgY29sb3IuXHJcblx0XHRcdFx0XHRcdCBBbHNvLCBpbiBhbGwgYnJvd3NlcnMsIHdoZW4gYm9yZGVyIGNvbG9ycyBhcmVuJ3QgYWxsIHRoZSBzYW1lLCBhIGNvbXBvdW5kIHZhbHVlIGlzIHJldHVybmVkIHRoYXQgVmVsb2NpdHkgaXNuJ3Qgc2V0dXAgdG8gcGFyc2UuXHJcblx0XHRcdFx0XHRcdCBTbywgYXMgYSBwb2x5ZmlsbCBmb3IgcXVlcnlpbmcgaW5kaXZpZHVhbCBib3JkZXIgc2lkZSBjb2xvcnMsIHdlIGp1c3QgcmV0dXJuIHRoZSB0b3AgYm9yZGVyJ3MgY29sb3IgYW5kIGFuaW1hdGUgYWxsIGJvcmRlcnMgZnJvbSB0aGF0IHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydHkgPT09IFwiYm9yZGVyQ29sb3JcIikge1xyXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5ID0gXCJib3JkZXJUb3BDb2xvclwiO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBJRTkgaGFzIGEgYnVnIGluIHdoaWNoIHRoZSBcImZpbHRlclwiIHByb3BlcnR5IG11c3QgYmUgYWNjZXNzZWQgZnJvbSBjb21wdXRlZFN0eWxlIHVzaW5nIHRoZSBnZXRQcm9wZXJ0eVZhbHVlIG1ldGhvZFxyXG5cdFx0XHRcdFx0XHQgaW5zdGVhZCBvZiBhIGRpcmVjdCBwcm9wZXJ0eSBsb29rdXAuIFRoZSBnZXRQcm9wZXJ0eVZhbHVlIG1ldGhvZCBpcyBzbG93ZXIgdGhhbiBhIGRpcmVjdCBsb29rdXAsIHdoaWNoIGlzIHdoeSB3ZSBhdm9pZCBpdCBieSBkZWZhdWx0LiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoSUUgPT09IDkgJiYgcHJvcGVydHkgPT09IFwiZmlsdGVyXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRjb21wdXRlZFZhbHVlID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KTsgLyogR0VUICovXHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tcHV0ZWRWYWx1ZSA9IGNvbXB1dGVkU3R5bGVbcHJvcGVydHldO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBGYWxsIGJhY2sgdG8gdGhlIHByb3BlcnR5J3Mgc3R5bGUgdmFsdWUgKGlmIGRlZmluZWQpIHdoZW4gY29tcHV0ZWRWYWx1ZSByZXR1cm5zIG5vdGhpbmcsXHJcblx0XHRcdFx0XHRcdCB3aGljaCBjYW4gaGFwcGVuIHdoZW4gdGhlIGVsZW1lbnQgaGFzbid0IGJlZW4gcGFpbnRlZC4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKGNvbXB1dGVkVmFsdWUgPT09IFwiXCIgfHwgY29tcHV0ZWRWYWx1ZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbXB1dGVkVmFsdWUgPSBlbGVtZW50LnN0eWxlW3Byb3BlcnR5XTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0cmV2ZXJ0RGlzcGxheSgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8qIEZvciB0b3AsIHJpZ2h0LCBib3R0b20sIGFuZCBsZWZ0IChUUkJMKSB2YWx1ZXMgdGhhdCBhcmUgc2V0IHRvIFwiYXV0b1wiIG9uIGVsZW1lbnRzIG9mIFwiZml4ZWRcIiBvciBcImFic29sdXRlXCIgcG9zaXRpb24sXHJcblx0XHRcdFx0XHQgZGVmZXIgdG8galF1ZXJ5IGZvciBjb252ZXJ0aW5nIFwiYXV0b1wiIHRvIGEgbnVtZXJpYyB2YWx1ZS4gKEZvciBlbGVtZW50cyB3aXRoIGEgXCJzdGF0aWNcIiBvciBcInJlbGF0aXZlXCIgcG9zaXRpb24sIFwiYXV0b1wiIGhhcyB0aGUgc2FtZVxyXG5cdFx0XHRcdFx0IGVmZmVjdCBhcyBiZWluZyBzZXQgdG8gMCwgc28gbm8gY29udmVyc2lvbiBpcyBuZWNlc3NhcnkuKSAqL1xyXG5cdFx0XHRcdFx0LyogQW4gZXhhbXBsZSBvZiB3aHkgbnVtZXJpYyBjb252ZXJzaW9uIGlzIG5lY2Vzc2FyeTogV2hlbiBhbiBlbGVtZW50IHdpdGggXCJwb3NpdGlvbjphYnNvbHV0ZVwiIGhhcyBhbiB1bnRvdWNoZWQgXCJsZWZ0XCJcclxuXHRcdFx0XHRcdCBwcm9wZXJ0eSwgd2hpY2ggcmV2ZXJ0cyB0byBcImF1dG9cIiwgbGVmdCdzIHZhbHVlIGlzIDAgcmVsYXRpdmUgdG8gaXRzIHBhcmVudCBlbGVtZW50LCBidXQgaXMgb2Z0ZW4gbm9uLXplcm8gcmVsYXRpdmVcclxuXHRcdFx0XHRcdCB0byBpdHMgKmNvbnRhaW5pbmcqIChub3QgcGFyZW50KSBlbGVtZW50LCB3aGljaCBpcyB0aGUgbmVhcmVzdCBcInBvc2l0aW9uOnJlbGF0aXZlXCIgYW5jZXN0b3Igb3IgdGhlIHZpZXdwb3J0IChhbmQgYWx3YXlzIHRoZSB2aWV3cG9ydCBpbiB0aGUgY2FzZSBvZiBcInBvc2l0aW9uOmZpeGVkXCIpLiAqL1xyXG5cdFx0XHRcdFx0aWYgKGNvbXB1dGVkVmFsdWUgPT09IFwiYXV0b1wiICYmIC9eKHRvcHxyaWdodHxib3R0b218bGVmdCkkL2kudGVzdChwcm9wZXJ0eSkpIHtcclxuXHRcdFx0XHRcdFx0dmFyIHBvc2l0aW9uID0gY29tcHV0ZVByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJwb3NpdGlvblwiKTsgLyogR0VUICovXHJcblxyXG5cdFx0XHRcdFx0XHQvKiBGb3IgYWJzb2x1dGUgcG9zaXRpb25pbmcsIGpRdWVyeSdzICQucG9zaXRpb24oKSBvbmx5IHJldHVybnMgdmFsdWVzIGZvciB0b3AgYW5kIGxlZnQ7XHJcblx0XHRcdFx0XHRcdCByaWdodCBhbmQgYm90dG9tIHdpbGwgaGF2ZSB0aGVpciBcImF1dG9cIiB2YWx1ZSByZXZlcnRlZCB0byAwLiAqL1xyXG5cdFx0XHRcdFx0XHQvKiBOb3RlOiBBIGpRdWVyeSBvYmplY3QgbXVzdCBiZSBjcmVhdGVkIGhlcmUgc2luY2UgalF1ZXJ5IGRvZXNuJ3QgaGF2ZSBhIGxvdy1sZXZlbCBhbGlhcyBmb3IgJC5wb3NpdGlvbigpLlxyXG5cdFx0XHRcdFx0XHQgTm90IGEgYmlnIGRlYWwgc2luY2Ugd2UncmUgY3VycmVudGx5IGluIGEgR0VUIGJhdGNoIGFueXdheS4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKHBvc2l0aW9uID09PSBcImZpeGVkXCIgfHwgKHBvc2l0aW9uID09PSBcImFic29sdXRlXCIgJiYgL3RvcHxsZWZ0L2kudGVzdChwcm9wZXJ0eSkpKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogTm90ZTogalF1ZXJ5IHN0cmlwcyB0aGUgcGl4ZWwgdW5pdCBmcm9tIGl0cyByZXR1cm5lZCB2YWx1ZXM7IHdlIHJlLWFkZCBpdCBoZXJlIHRvIGNvbmZvcm0gd2l0aCBjb21wdXRlUHJvcGVydHlWYWx1ZSdzIGJlaGF2aW9yLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGNvbXB1dGVkVmFsdWUgPSAkKGVsZW1lbnQpLnBvc2l0aW9uKClbcHJvcGVydHldICsgXCJweFwiOyAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHJldHVybiBjb21wdXRlZFZhbHVlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dmFyIHByb3BlcnR5VmFsdWU7XHJcblxyXG5cdFx0XHRcdC8qIElmIHRoaXMgaXMgYSBob29rZWQgcHJvcGVydHkgKGUuZy4gXCJjbGlwTGVmdFwiIGluc3RlYWQgb2YgdGhlIHJvb3QgcHJvcGVydHkgb2YgXCJjbGlwXCIpLFxyXG5cdFx0XHRcdCBleHRyYWN0IHRoZSBob29rJ3MgdmFsdWUgZnJvbSBhIG5vcm1hbGl6ZWQgcm9vdFByb3BlcnR5VmFsdWUgdXNpbmcgQ1NTLkhvb2tzLmV4dHJhY3RWYWx1ZSgpLiAqL1xyXG5cdFx0XHRcdGlmIChDU1MuSG9va3MucmVnaXN0ZXJlZFtwcm9wZXJ0eV0pIHtcclxuXHRcdFx0XHRcdHZhciBob29rID0gcHJvcGVydHksXHJcblx0XHRcdFx0XHRcdFx0aG9va1Jvb3QgPSBDU1MuSG9va3MuZ2V0Um9vdChob29rKTtcclxuXHJcblx0XHRcdFx0XHQvKiBJZiBhIGNhY2hlZCByb290UHJvcGVydHlWYWx1ZSB3YXNuJ3QgcGFzc2VkIGluICh3aGljaCBWZWxvY2l0eSBhbHdheXMgYXR0ZW1wdHMgdG8gZG8gaW4gb3JkZXIgdG8gYXZvaWQgcmVxdWVyeWluZyB0aGUgRE9NKSxcclxuXHRcdFx0XHRcdCBxdWVyeSB0aGUgRE9NIGZvciB0aGUgcm9vdCBwcm9wZXJ0eSdzIHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0aWYgKHJvb3RQcm9wZXJ0eVZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0LyogU2luY2UgdGhlIGJyb3dzZXIgaXMgbm93IGJlaW5nIGRpcmVjdGx5IHF1ZXJpZWQsIHVzZSB0aGUgb2ZmaWNpYWwgcG9zdC1wcmVmaXhpbmcgcHJvcGVydHkgbmFtZSBmb3IgdGhpcyBsb29rdXAuICovXHJcblx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlID0gQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgQ1NTLk5hbWVzLnByZWZpeENoZWNrKGhvb2tSb290KVswXSk7IC8qIEdFVCAqL1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8qIElmIHRoaXMgcm9vdCBoYXMgYSBub3JtYWxpemF0aW9uIHJlZ2lzdGVyZWQsIHBlZm9ybSB0aGUgYXNzb2NpYXRlZCBub3JtYWxpemF0aW9uIGV4dHJhY3Rpb24uICovXHJcblx0XHRcdFx0XHRpZiAoQ1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWRbaG9va1Jvb3RdKSB7XHJcblx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlID0gQ1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWRbaG9va1Jvb3RdKFwiZXh0cmFjdFwiLCBlbGVtZW50LCByb290UHJvcGVydHlWYWx1ZSk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogRXh0cmFjdCB0aGUgaG9vaydzIHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IENTUy5Ib29rcy5leHRyYWN0VmFsdWUoaG9vaywgcm9vdFByb3BlcnR5VmFsdWUpO1xyXG5cclxuXHRcdFx0XHRcdC8qIElmIHRoaXMgaXMgYSBub3JtYWxpemVkIHByb3BlcnR5IChlLmcuIFwib3BhY2l0eVwiIGJlY29tZXMgXCJmaWx0ZXJcIiBpbiA8PUlFOCkgb3IgXCJ0cmFuc2xhdGVYXCIgYmVjb21lcyBcInRyYW5zZm9ybVwiKSxcclxuXHRcdFx0XHRcdCBub3JtYWxpemUgdGhlIHByb3BlcnR5J3MgbmFtZSBhbmQgdmFsdWUsIGFuZCBoYW5kbGUgdGhlIHNwZWNpYWwgY2FzZSBvZiB0cmFuc2Zvcm1zLiAqL1xyXG5cdFx0XHRcdFx0LyogTm90ZTogTm9ybWFsaXppbmcgYSBwcm9wZXJ0eSBpcyBtdXR1YWxseSBleGNsdXNpdmUgZnJvbSBob29raW5nIGEgcHJvcGVydHkgc2luY2UgaG9vay1leHRyYWN0ZWQgdmFsdWVzIGFyZSBzdHJpY3RseVxyXG5cdFx0XHRcdFx0IG51bWVyaWNhbCBhbmQgdGhlcmVmb3JlIGRvIG5vdCByZXF1aXJlIG5vcm1hbGl6YXRpb24gZXh0cmFjdGlvbi4gKi9cclxuXHRcdFx0XHR9IGVsc2UgaWYgKENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkW3Byb3BlcnR5XSkge1xyXG5cdFx0XHRcdFx0dmFyIG5vcm1hbGl6ZWRQcm9wZXJ0eU5hbWUsXHJcblx0XHRcdFx0XHRcdFx0bm9ybWFsaXplZFByb3BlcnR5VmFsdWU7XHJcblxyXG5cdFx0XHRcdFx0bm9ybWFsaXplZFByb3BlcnR5TmFtZSA9IENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkW3Byb3BlcnR5XShcIm5hbWVcIiwgZWxlbWVudCk7XHJcblxyXG5cdFx0XHRcdFx0LyogVHJhbnNmb3JtIHZhbHVlcyBhcmUgY2FsY3VsYXRlZCB2aWEgbm9ybWFsaXphdGlvbiBleHRyYWN0aW9uIChzZWUgYmVsb3cpLCB3aGljaCBjaGVja3MgYWdhaW5zdCB0aGUgZWxlbWVudCdzIHRyYW5zZm9ybUNhY2hlLlxyXG5cdFx0XHRcdFx0IEF0IG5vIHBvaW50IGRvIHRyYW5zZm9ybSBHRVRzIGV2ZXIgYWN0dWFsbHkgcXVlcnkgdGhlIERPTTsgaW5pdGlhbCBzdHlsZXNoZWV0IHZhbHVlcyBhcmUgbmV2ZXIgcHJvY2Vzc2VkLlxyXG5cdFx0XHRcdFx0IFRoaXMgaXMgYmVjYXVzZSBwYXJzaW5nIDNEIHRyYW5zZm9ybSBtYXRyaWNlcyBpcyBub3QgYWx3YXlzIGFjY3VyYXRlIGFuZCB3b3VsZCBibG9hdCBvdXIgY29kZWJhc2U7XHJcblx0XHRcdFx0XHQgdGh1cywgbm9ybWFsaXphdGlvbiBleHRyYWN0aW9uIGRlZmF1bHRzIGluaXRpYWwgdHJhbnNmb3JtIHZhbHVlcyB0byB0aGVpciB6ZXJvLXZhbHVlcyAoZS5nLiAxIGZvciBzY2FsZVggYW5kIDAgZm9yIHRyYW5zbGF0ZVgpLiAqL1xyXG5cdFx0XHRcdFx0aWYgKG5vcm1hbGl6ZWRQcm9wZXJ0eU5hbWUgIT09IFwidHJhbnNmb3JtXCIpIHtcclxuXHRcdFx0XHRcdFx0bm9ybWFsaXplZFByb3BlcnR5VmFsdWUgPSBjb21wdXRlUHJvcGVydHlWYWx1ZShlbGVtZW50LCBDU1MuTmFtZXMucHJlZml4Q2hlY2sobm9ybWFsaXplZFByb3BlcnR5TmFtZSlbMF0pOyAvKiBHRVQgKi9cclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZSB2YWx1ZSBpcyBhIENTUyBudWxsLXZhbHVlIGFuZCB0aGlzIHByb3BlcnR5IGhhcyBhIGhvb2sgdGVtcGxhdGUsIHVzZSB0aGF0IHplcm8tdmFsdWUgdGVtcGxhdGUgc28gdGhhdCBob29rcyBjYW4gYmUgZXh0cmFjdGVkIGZyb20gaXQuICovXHJcblx0XHRcdFx0XHRcdGlmIChDU1MuVmFsdWVzLmlzQ1NTTnVsbFZhbHVlKG5vcm1hbGl6ZWRQcm9wZXJ0eVZhbHVlKSAmJiBDU1MuSG9va3MudGVtcGxhdGVzW3Byb3BlcnR5XSkge1xyXG5cdFx0XHRcdFx0XHRcdG5vcm1hbGl6ZWRQcm9wZXJ0eVZhbHVlID0gQ1NTLkhvb2tzLnRlbXBsYXRlc1twcm9wZXJ0eV1bMV07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gQ1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWRbcHJvcGVydHldKFwiZXh0cmFjdFwiLCBlbGVtZW50LCBub3JtYWxpemVkUHJvcGVydHlWYWx1ZSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKiBJZiBhIChudW1lcmljKSB2YWx1ZSB3YXNuJ3QgcHJvZHVjZWQgdmlhIGhvb2sgZXh0cmFjdGlvbiBvciBub3JtYWxpemF0aW9uLCBxdWVyeSB0aGUgRE9NLiAqL1xyXG5cdFx0XHRcdGlmICghL15bXFxkLV0vLnRlc3QocHJvcGVydHlWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdC8qIEZvciBTVkcgZWxlbWVudHMsIGRpbWVuc2lvbmFsIHByb3BlcnRpZXMgKHdoaWNoIFNWR0F0dHJpYnV0ZSgpIGRldGVjdHMpIGFyZSB0d2VlbmVkIHZpYVxyXG5cdFx0XHRcdFx0IHRoZWlyIEhUTUwgYXR0cmlidXRlIHZhbHVlcyBpbnN0ZWFkIG9mIHRoZWlyIENTUyBzdHlsZSB2YWx1ZXMuICovXHJcblx0XHRcdFx0XHR2YXIgZGF0YSA9IERhdGEoZWxlbWVudCk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGRhdGEgJiYgZGF0YS5pc1NWRyAmJiBDU1MuTmFtZXMuU1ZHQXR0cmlidXRlKHByb3BlcnR5KSkge1xyXG5cdFx0XHRcdFx0XHQvKiBTaW5jZSB0aGUgaGVpZ2h0L3dpZHRoIGF0dHJpYnV0ZSB2YWx1ZXMgbXVzdCBiZSBzZXQgbWFudWFsbHksIHRoZXkgZG9uJ3QgcmVmbGVjdCBjb21wdXRlZCB2YWx1ZXMuXHJcblx0XHRcdFx0XHRcdCBUaHVzLCB3ZSB1c2UgdXNlIGdldEJCb3goKSB0byBlbnN1cmUgd2UgYWx3YXlzIGdldCB2YWx1ZXMgZm9yIGVsZW1lbnRzIHdpdGggdW5kZWZpbmVkIGhlaWdodC93aWR0aCBhdHRyaWJ1dGVzLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoL14oaGVpZ2h0fHdpZHRoKSQvaS50ZXN0KHByb3BlcnR5KSkge1xyXG5cdFx0XHRcdFx0XHRcdC8qIEZpcmVmb3ggdGhyb3dzIGFuIGVycm9yIGlmIC5nZXRCQm94KCkgaXMgY2FsbGVkIG9uIGFuIFNWRyB0aGF0IGlzbid0IGF0dGFjaGVkIHRvIHRoZSBET00uICovXHJcblx0XHRcdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSBlbGVtZW50LmdldEJCb3goKVtwcm9wZXJ0eV07XHJcblx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSAwO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHQvKiBPdGhlcndpc2UsIGFjY2VzcyB0aGUgYXR0cmlidXRlIHZhbHVlIGRpcmVjdGx5LiAqL1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShwcm9wZXJ0eSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSBjb21wdXRlUHJvcGVydHlWYWx1ZShlbGVtZW50LCBDU1MuTmFtZXMucHJlZml4Q2hlY2socHJvcGVydHkpWzBdKTsgLyogR0VUICovXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKiBTaW5jZSBwcm9wZXJ0eSBsb29rdXBzIGFyZSBmb3IgYW5pbWF0aW9uIHB1cnBvc2VzICh3aGljaCBlbnRhaWxzIGNvbXB1dGluZyB0aGUgbnVtZXJpYyBkZWx0YSBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgdmFsdWVzKSxcclxuXHRcdFx0XHQgY29udmVydCBDU1MgbnVsbC12YWx1ZXMgdG8gYW4gaW50ZWdlciBvZiB2YWx1ZSAwLiAqL1xyXG5cdFx0XHRcdGlmIChDU1MuVmFsdWVzLmlzQ1NTTnVsbFZhbHVlKHByb3BlcnR5VmFsdWUpKSB7XHJcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gMDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChWZWxvY2l0eS5kZWJ1ZyA+PSAyKSB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIkdldCBcIiArIHByb3BlcnR5ICsgXCI6IFwiICsgcHJvcGVydHlWYWx1ZSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gcHJvcGVydHlWYWx1ZTtcclxuXHRcdFx0fSxcclxuXHRcdFx0LyogVGhlIHNpbmd1bGFyIHNldFByb3BlcnR5VmFsdWUsIHdoaWNoIHJvdXRlcyB0aGUgbG9naWMgZm9yIGFsbCBub3JtYWxpemF0aW9ucywgaG9va3MsIGFuZCBzdGFuZGFyZCBDU1MgcHJvcGVydGllcy4gKi9cclxuXHRcdFx0c2V0UHJvcGVydHlWYWx1ZTogZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHksIHByb3BlcnR5VmFsdWUsIHJvb3RQcm9wZXJ0eVZhbHVlLCBzY3JvbGxEYXRhKSB7XHJcblx0XHRcdFx0dmFyIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5O1xyXG5cclxuXHRcdFx0XHQvKiBJbiBvcmRlciB0byBiZSBzdWJqZWN0ZWQgdG8gY2FsbCBvcHRpb25zIGFuZCBlbGVtZW50IHF1ZXVlaW5nLCBzY3JvbGwgYW5pbWF0aW9uIGlzIHJvdXRlZCB0aHJvdWdoIFZlbG9jaXR5IGFzIGlmIGl0IHdlcmUgYSBzdGFuZGFyZCBDU1MgcHJvcGVydHkuICovXHJcblx0XHRcdFx0aWYgKHByb3BlcnR5ID09PSBcInNjcm9sbFwiKSB7XHJcblx0XHRcdFx0XHQvKiBJZiBhIGNvbnRhaW5lciBvcHRpb24gaXMgcHJlc2VudCwgc2Nyb2xsIHRoZSBjb250YWluZXIgaW5zdGVhZCBvZiB0aGUgYnJvd3NlciB3aW5kb3cuICovXHJcblx0XHRcdFx0XHRpZiAoc2Nyb2xsRGF0YS5jb250YWluZXIpIHtcclxuXHRcdFx0XHRcdFx0c2Nyb2xsRGF0YS5jb250YWluZXJbXCJzY3JvbGxcIiArIHNjcm9sbERhdGEuZGlyZWN0aW9uXSA9IHByb3BlcnR5VmFsdWU7XHJcblx0XHRcdFx0XHRcdC8qIE90aGVyd2lzZSwgVmVsb2NpdHkgZGVmYXVsdHMgdG8gc2Nyb2xsaW5nIHRoZSBicm93c2VyIHdpbmRvdy4gKi9cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGlmIChzY3JvbGxEYXRhLmRpcmVjdGlvbiA9PT0gXCJMZWZ0XCIpIHtcclxuXHRcdFx0XHRcdFx0XHR3aW5kb3cuc2Nyb2xsVG8ocHJvcGVydHlWYWx1ZSwgc2Nyb2xsRGF0YS5hbHRlcm5hdGVWYWx1ZSk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0d2luZG93LnNjcm9sbFRvKHNjcm9sbERhdGEuYWx0ZXJuYXRlVmFsdWUsIHByb3BlcnR5VmFsdWUpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdC8qIFRyYW5zZm9ybXMgKHRyYW5zbGF0ZVgsIHJvdGF0ZVosIGV0Yy4pIGFyZSBhcHBsaWVkIHRvIGEgcGVyLWVsZW1lbnQgdHJhbnNmb3JtQ2FjaGUgb2JqZWN0LCB3aGljaCBpcyBtYW51YWxseSBmbHVzaGVkIHZpYSBmbHVzaFRyYW5zZm9ybUNhY2hlKCkuXHJcblx0XHRcdFx0XHQgVGh1cywgZm9yIG5vdywgd2UgbWVyZWx5IGNhY2hlIHRyYW5zZm9ybXMgYmVpbmcgU0VULiAqL1xyXG5cdFx0XHRcdFx0aWYgKENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkW3Byb3BlcnR5XSAmJiBDU1MuTm9ybWFsaXphdGlvbnMucmVnaXN0ZXJlZFtwcm9wZXJ0eV0oXCJuYW1lXCIsIGVsZW1lbnQpID09PSBcInRyYW5zZm9ybVwiKSB7XHJcblx0XHRcdFx0XHRcdC8qIFBlcmZvcm0gYSBub3JtYWxpemF0aW9uIGluamVjdGlvbi4gKi9cclxuXHRcdFx0XHRcdFx0LyogTm90ZTogVGhlIG5vcm1hbGl6YXRpb24gbG9naWMgaGFuZGxlcyB0aGUgdHJhbnNmb3JtQ2FjaGUgdXBkYXRpbmcuICovXHJcblx0XHRcdFx0XHRcdENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkW3Byb3BlcnR5XShcImluamVjdFwiLCBlbGVtZW50LCBwcm9wZXJ0eVZhbHVlKTtcclxuXHJcblx0XHRcdFx0XHRcdHByb3BlcnR5TmFtZSA9IFwidHJhbnNmb3JtXCI7XHJcblx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSBEYXRhKGVsZW1lbnQpLnRyYW5zZm9ybUNhY2hlW3Byb3BlcnR5XTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdC8qIEluamVjdCBob29rcy4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKENTUy5Ib29rcy5yZWdpc3RlcmVkW3Byb3BlcnR5XSkge1xyXG5cdFx0XHRcdFx0XHRcdHZhciBob29rTmFtZSA9IHByb3BlcnR5LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRob29rUm9vdCA9IENTUy5Ib29rcy5nZXRSb290KHByb3BlcnR5KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0LyogSWYgYSBjYWNoZWQgcm9vdFByb3BlcnR5VmFsdWUgd2FzIG5vdCBwcm92aWRlZCwgcXVlcnkgdGhlIERPTSBmb3IgdGhlIGhvb2tSb290J3MgY3VycmVudCB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRyb290UHJvcGVydHlWYWx1ZSA9IHJvb3RQcm9wZXJ0eVZhbHVlIHx8IENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIGhvb2tSb290KTsgLyogR0VUICovXHJcblxyXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSBDU1MuSG9va3MuaW5qZWN0VmFsdWUoaG9va05hbWUsIHByb3BlcnR5VmFsdWUsIHJvb3RQcm9wZXJ0eVZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eSA9IGhvb2tSb290O1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBOb3JtYWxpemUgbmFtZXMgYW5kIHZhbHVlcy4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkW3Byb3BlcnR5XSkge1xyXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSBDU1MuTm9ybWFsaXphdGlvbnMucmVnaXN0ZXJlZFtwcm9wZXJ0eV0oXCJpbmplY3RcIiwgZWxlbWVudCwgcHJvcGVydHlWYWx1ZSk7XHJcblx0XHRcdFx0XHRcdFx0cHJvcGVydHkgPSBDU1MuTm9ybWFsaXphdGlvbnMucmVnaXN0ZXJlZFtwcm9wZXJ0eV0oXCJuYW1lXCIsIGVsZW1lbnQpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBBc3NpZ24gdGhlIGFwcHJvcHJpYXRlIHZlbmRvciBwcmVmaXggYmVmb3JlIHBlcmZvcm1pbmcgYW4gb2ZmaWNpYWwgc3R5bGUgdXBkYXRlLiAqL1xyXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eU5hbWUgPSBDU1MuTmFtZXMucHJlZml4Q2hlY2socHJvcGVydHkpWzBdO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogQSB0cnkvY2F0Y2ggaXMgdXNlZCBmb3IgSUU8PTgsIHdoaWNoIHRocm93cyBhbiBlcnJvciB3aGVuIFwiaW52YWxpZFwiIENTUyB2YWx1ZXMgYXJlIHNldCwgZS5nLiBhIG5lZ2F0aXZlIHdpZHRoLlxyXG5cdFx0XHRcdFx0XHQgVHJ5L2NhdGNoIGlzIGF2b2lkZWQgZm9yIG90aGVyIGJyb3dzZXJzIHNpbmNlIGl0IGluY3VycyBhIHBlcmZvcm1hbmNlIG92ZXJoZWFkLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoSUUgPD0gOCkge1xyXG5cdFx0XHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdFx0XHRlbGVtZW50LnN0eWxlW3Byb3BlcnR5TmFtZV0gPSBwcm9wZXJ0eVZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoVmVsb2NpdHkuZGVidWcpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXCJCcm93c2VyIGRvZXMgbm90IHN1cHBvcnQgW1wiICsgcHJvcGVydHlWYWx1ZSArIFwiXSBmb3IgW1wiICsgcHJvcGVydHlOYW1lICsgXCJdXCIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHQvKiBTVkcgZWxlbWVudHMgaGF2ZSB0aGVpciBkaW1lbnNpb25hbCBwcm9wZXJ0aWVzICh3aWR0aCwgaGVpZ2h0LCB4LCB5LCBjeCwgZXRjLikgYXBwbGllZCBkaXJlY3RseSBhcyBhdHRyaWJ1dGVzIGluc3RlYWQgb2YgYXMgc3R5bGVzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdC8qIE5vdGU6IElFOCBkb2VzIG5vdCBzdXBwb3J0IFNWRyBlbGVtZW50cywgc28gaXQncyBva2F5IHRoYXQgd2Ugc2tpcCBpdCBmb3IgU1ZHIGFuaW1hdGlvbi4gKi9cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgZGF0YSA9IERhdGEoZWxlbWVudCk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmIChkYXRhICYmIGRhdGEuaXNTVkcgJiYgQ1NTLk5hbWVzLlNWR0F0dHJpYnV0ZShwcm9wZXJ0eSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIE5vdGU6IEZvciBTVkcgYXR0cmlidXRlcywgdmVuZG9yLXByZWZpeGVkIHByb3BlcnR5IG5hbWVzIGFyZSBuZXZlciB1c2VkLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogTm90ZTogTm90IGFsbCBDU1MgcHJvcGVydGllcyBjYW4gYmUgYW5pbWF0ZWQgdmlhIGF0dHJpYnV0ZXMsIGJ1dCB0aGUgYnJvd3NlciB3b24ndCB0aHJvdyBhbiBlcnJvciBmb3IgdW5zdXBwb3J0ZWQgcHJvcGVydGllcy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKHByb3BlcnR5LCBwcm9wZXJ0eVZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZVtwcm9wZXJ0eU5hbWVdID0gcHJvcGVydHlWYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChWZWxvY2l0eS5kZWJ1ZyA+PSAyKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXCJTZXQgXCIgKyBwcm9wZXJ0eSArIFwiIChcIiArIHByb3BlcnR5TmFtZSArIFwiKTogXCIgKyBwcm9wZXJ0eVZhbHVlKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0LyogUmV0dXJuIHRoZSBub3JtYWxpemVkIHByb3BlcnR5IG5hbWUgYW5kIHZhbHVlIGluIGNhc2UgdGhlIGNhbGxlciB3YW50cyB0byBrbm93IGhvdyB0aGVzZSB2YWx1ZXMgd2VyZSBtb2RpZmllZCBiZWZvcmUgYmVpbmcgYXBwbGllZCB0byB0aGUgRE9NLiAqL1xyXG5cdFx0XHRcdHJldHVybiBbcHJvcGVydHlOYW1lLCBwcm9wZXJ0eVZhbHVlXTtcclxuXHRcdFx0fSxcclxuXHRcdFx0LyogVG8gaW5jcmVhc2UgcGVyZm9ybWFuY2UgYnkgYmF0Y2hpbmcgdHJhbnNmb3JtIHVwZGF0ZXMgaW50byBhIHNpbmdsZSBTRVQsIHRyYW5zZm9ybXMgYXJlIG5vdCBkaXJlY3RseSBhcHBsaWVkIHRvIGFuIGVsZW1lbnQgdW50aWwgZmx1c2hUcmFuc2Zvcm1DYWNoZSgpIGlzIGNhbGxlZC4gKi9cclxuXHRcdFx0LyogTm90ZTogVmVsb2NpdHkgYXBwbGllcyB0cmFuc2Zvcm0gcHJvcGVydGllcyBpbiB0aGUgc2FtZSBvcmRlciB0aGF0IHRoZXkgYXJlIGNocm9ub2dpY2FsbHkgaW50cm9kdWNlZCB0byB0aGUgZWxlbWVudCdzIENTUyBzdHlsZXMuICovXHJcblx0XHRcdGZsdXNoVHJhbnNmb3JtQ2FjaGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuXHRcdFx0XHR2YXIgdHJhbnNmb3JtU3RyaW5nID0gXCJcIixcclxuXHRcdFx0XHRcdFx0ZGF0YSA9IERhdGEoZWxlbWVudCk7XHJcblxyXG5cdFx0XHRcdC8qIENlcnRhaW4gYnJvd3NlcnMgcmVxdWlyZSB0aGF0IFNWRyB0cmFuc2Zvcm1zIGJlIGFwcGxpZWQgYXMgYW4gYXR0cmlidXRlLiBIb3dldmVyLCB0aGUgU1ZHIHRyYW5zZm9ybSBhdHRyaWJ1dGUgdGFrZXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIENTUydzIHRyYW5zZm9ybSBzdHJpbmdcclxuXHRcdFx0XHQgKHVuaXRzIGFyZSBkcm9wcGVkIGFuZCwgZXhjZXB0IGZvciBza2V3WC9ZLCBzdWJwcm9wZXJ0aWVzIGFyZSBtZXJnZWQgaW50byB0aGVpciBtYXN0ZXIgcHJvcGVydHkgLS0gZS5nLiBzY2FsZVggYW5kIHNjYWxlWSBhcmUgbWVyZ2VkIGludG8gc2NhbGUoWCBZKS4gKi9cclxuXHRcdFx0XHRpZiAoKElFIHx8IChWZWxvY2l0eS5TdGF0ZS5pc0FuZHJvaWQgJiYgIVZlbG9jaXR5LlN0YXRlLmlzQ2hyb21lKSkgJiYgZGF0YSAmJiBkYXRhLmlzU1ZHKSB7XHJcblx0XHRcdFx0XHQvKiBTaW5jZSB0cmFuc2Zvcm0gdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlaXIgcGFyZW50aGVzZXMtd3JhcHBlZCBmb3JtLCB3ZSB1c2UgYSBoZWxwZXIgZnVuY3Rpb24gdG8gc3RyaXAgb3V0IHRoZWlyIG51bWVyaWMgdmFsdWVzLlxyXG5cdFx0XHRcdFx0IEZ1cnRoZXIsIFNWRyB0cmFuc2Zvcm0gcHJvcGVydGllcyBvbmx5IHRha2UgdW5pdGxlc3MgKHJlcHJlc2VudGluZyBwaXhlbHMpIHZhbHVlcywgc28gaXQncyBva2F5IHRoYXQgcGFyc2VGbG9hdCgpIHN0cmlwcyB0aGUgdW5pdCBzdWZmaXhlZCB0byB0aGUgZmxvYXQgdmFsdWUuICovXHJcblx0XHRcdFx0XHR2YXIgZ2V0VHJhbnNmb3JtRmxvYXQgPSBmdW5jdGlvbih0cmFuc2Zvcm1Qcm9wZXJ0eSkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gcGFyc2VGbG9hdChDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCB0cmFuc2Zvcm1Qcm9wZXJ0eSkpO1xyXG5cdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHQvKiBDcmVhdGUgYW4gb2JqZWN0IHRvIG9yZ2FuaXplIGFsbCB0aGUgdHJhbnNmb3JtcyB0aGF0IHdlJ2xsIGFwcGx5IHRvIHRoZSBTVkcgZWxlbWVudC4gVG8ga2VlcCB0aGUgbG9naWMgc2ltcGxlLFxyXG5cdFx0XHRcdFx0IHdlIHByb2Nlc3MgKmFsbCogdHJhbnNmb3JtIHByb3BlcnRpZXMgLS0gZXZlbiB0aG9zZSB0aGF0IG1heSBub3QgYmUgZXhwbGljaXRseSBhcHBsaWVkIChzaW5jZSB0aGV5IGRlZmF1bHQgdG8gdGhlaXIgemVyby12YWx1ZXMgYW55d2F5KS4gKi9cclxuXHRcdFx0XHRcdHZhciBTVkdUcmFuc2Zvcm1zID0ge1xyXG5cdFx0XHRcdFx0XHR0cmFuc2xhdGU6IFtnZXRUcmFuc2Zvcm1GbG9hdChcInRyYW5zbGF0ZVhcIiksIGdldFRyYW5zZm9ybUZsb2F0KFwidHJhbnNsYXRlWVwiKV0sXHJcblx0XHRcdFx0XHRcdHNrZXdYOiBbZ2V0VHJhbnNmb3JtRmxvYXQoXCJza2V3WFwiKV0sIHNrZXdZOiBbZ2V0VHJhbnNmb3JtRmxvYXQoXCJza2V3WVwiKV0sXHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZSBzY2FsZSBwcm9wZXJ0eSBpcyBzZXQgKG5vbi0xKSwgdXNlIHRoYXQgdmFsdWUgZm9yIHRoZSBzY2FsZVggYW5kIHNjYWxlWSB2YWx1ZXNcclxuXHRcdFx0XHRcdFx0ICh0aGlzIGJlaGF2aW9yIG1pbWljcyB0aGUgcmVzdWx0IG9mIGFuaW1hdGluZyBhbGwgdGhlc2UgcHJvcGVydGllcyBhdCBvbmNlIG9uIEhUTUwgZWxlbWVudHMpLiAqL1xyXG5cdFx0XHRcdFx0XHRzY2FsZTogZ2V0VHJhbnNmb3JtRmxvYXQoXCJzY2FsZVwiKSAhPT0gMSA/IFtnZXRUcmFuc2Zvcm1GbG9hdChcInNjYWxlXCIpLCBnZXRUcmFuc2Zvcm1GbG9hdChcInNjYWxlXCIpXSA6IFtnZXRUcmFuc2Zvcm1GbG9hdChcInNjYWxlWFwiKSwgZ2V0VHJhbnNmb3JtRmxvYXQoXCJzY2FsZVlcIildLFxyXG5cdFx0XHRcdFx0XHQvKiBOb3RlOiBTVkcncyByb3RhdGUgdHJhbnNmb3JtIHRha2VzIHRocmVlIHZhbHVlczogcm90YXRpb24gZGVncmVlcyBmb2xsb3dlZCBieSB0aGUgWCBhbmQgWSB2YWx1ZXNcclxuXHRcdFx0XHRcdFx0IGRlZmluaW5nIHRoZSByb3RhdGlvbidzIG9yaWdpbiBwb2ludC4gV2UgaWdub3JlIHRoZSBvcmlnaW4gdmFsdWVzIChkZWZhdWx0IHRoZW0gdG8gMCkuICovXHJcblx0XHRcdFx0XHRcdHJvdGF0ZTogW2dldFRyYW5zZm9ybUZsb2F0KFwicm90YXRlWlwiKSwgMCwgMF1cclxuXHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0LyogSXRlcmF0ZSB0aHJvdWdoIHRoZSB0cmFuc2Zvcm0gcHJvcGVydGllcyBpbiB0aGUgdXNlci1kZWZpbmVkIHByb3BlcnR5IG1hcCBvcmRlci5cclxuXHRcdFx0XHRcdCAoVGhpcyBtaW1pY3MgdGhlIGJlaGF2aW9yIG9mIG5vbi1TVkcgdHJhbnNmb3JtIGFuaW1hdGlvbi4pICovXHJcblx0XHRcdFx0XHQkLmVhY2goRGF0YShlbGVtZW50KS50cmFuc2Zvcm1DYWNoZSwgZnVuY3Rpb24odHJhbnNmb3JtTmFtZSkge1xyXG5cdFx0XHRcdFx0XHQvKiBFeGNlcHQgZm9yIHdpdGggc2tld1gvWSwgcmV2ZXJ0IHRoZSBheGlzLXNwZWNpZmljIHRyYW5zZm9ybSBzdWJwcm9wZXJ0aWVzIHRvIHRoZWlyIGF4aXMtZnJlZSBtYXN0ZXJcclxuXHRcdFx0XHRcdFx0IHByb3BlcnRpZXMgc28gdGhhdCB0aGV5IG1hdGNoIHVwIHdpdGggU1ZHJ3MgYWNjZXB0ZWQgdHJhbnNmb3JtIHByb3BlcnRpZXMuICovXHJcblx0XHRcdFx0XHRcdGlmICgvXnRyYW5zbGF0ZS9pLnRlc3QodHJhbnNmb3JtTmFtZSkpIHtcclxuXHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm1OYW1lID0gXCJ0cmFuc2xhdGVcIjtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICgvXnNjYWxlL2kudGVzdCh0cmFuc2Zvcm1OYW1lKSkge1xyXG5cdFx0XHRcdFx0XHRcdHRyYW5zZm9ybU5hbWUgPSBcInNjYWxlXCI7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoL15yb3RhdGUvaS50ZXN0KHRyYW5zZm9ybU5hbWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0dHJhbnNmb3JtTmFtZSA9IFwicm90YXRlXCI7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIENoZWNrIHRoYXQgd2UgaGF2ZW4ndCB5ZXQgZGVsZXRlZCB0aGUgcHJvcGVydHkgZnJvbSB0aGUgU1ZHVHJhbnNmb3JtcyBjb250YWluZXIuICovXHJcblx0XHRcdFx0XHRcdGlmIChTVkdUcmFuc2Zvcm1zW3RyYW5zZm9ybU5hbWVdKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogQXBwZW5kIHRoZSB0cmFuc2Zvcm0gcHJvcGVydHkgaW4gdGhlIFNWRy1zdXBwb3J0ZWQgdHJhbnNmb3JtIGZvcm1hdC4gQXMgcGVyIHRoZSBzcGVjLCBzdXJyb3VuZCB0aGUgc3BhY2UtZGVsaW1pdGVkIHZhbHVlcyBpbiBwYXJlbnRoZXNlcy4gKi9cclxuXHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm1TdHJpbmcgKz0gdHJhbnNmb3JtTmFtZSArIFwiKFwiICsgU1ZHVHJhbnNmb3Jtc1t0cmFuc2Zvcm1OYW1lXS5qb2luKFwiIFwiKSArIFwiKVwiICsgXCIgXCI7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIEFmdGVyIHByb2Nlc3NpbmcgYW4gU1ZHIHRyYW5zZm9ybSBwcm9wZXJ0eSwgZGVsZXRlIGl0IGZyb20gdGhlIFNWR1RyYW5zZm9ybXMgY29udGFpbmVyIHNvIHdlIGRvbid0XHJcblx0XHRcdFx0XHRcdFx0IHJlLWluc2VydCB0aGUgc2FtZSBtYXN0ZXIgcHJvcGVydHkgaWYgd2UgZW5jb3VudGVyIGFub3RoZXIgb25lIG9mIGl0cyBheGlzLXNwZWNpZmljIHByb3BlcnRpZXMuICovXHJcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIFNWR1RyYW5zZm9ybXNbdHJhbnNmb3JtTmFtZV07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR2YXIgdHJhbnNmb3JtVmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0cGVyc3BlY3RpdmU7XHJcblxyXG5cdFx0XHRcdFx0LyogVHJhbnNmb3JtIHByb3BlcnRpZXMgYXJlIHN0b3JlZCBhcyBtZW1iZXJzIG9mIHRoZSB0cmFuc2Zvcm1DYWNoZSBvYmplY3QuIENvbmNhdGVuYXRlIGFsbCB0aGUgbWVtYmVycyBpbnRvIGEgc3RyaW5nLiAqL1xyXG5cdFx0XHRcdFx0JC5lYWNoKERhdGEoZWxlbWVudCkudHJhbnNmb3JtQ2FjaGUsIGZ1bmN0aW9uKHRyYW5zZm9ybU5hbWUpIHtcclxuXHRcdFx0XHRcdFx0dHJhbnNmb3JtVmFsdWUgPSBEYXRhKGVsZW1lbnQpLnRyYW5zZm9ybUNhY2hlW3RyYW5zZm9ybU5hbWVdO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogVHJhbnNmb3JtJ3MgcGVyc3BlY3RpdmUgc3VicHJvcGVydHkgbXVzdCBiZSBzZXQgZmlyc3QgaW4gb3JkZXIgdG8gdGFrZSBlZmZlY3QuIFN0b3JlIGl0IHRlbXBvcmFyaWx5LiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAodHJhbnNmb3JtTmFtZSA9PT0gXCJ0cmFuc2Zvcm1QZXJzcGVjdGl2ZVwiKSB7XHJcblx0XHRcdFx0XHRcdFx0cGVyc3BlY3RpdmUgPSB0cmFuc2Zvcm1WYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyogSUU5IG9ubHkgc3VwcG9ydHMgb25lIHJvdGF0aW9uIHR5cGUsIHJvdGF0ZVosIHdoaWNoIGl0IHJlZmVycyB0byBhcyBcInJvdGF0ZVwiLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoSUUgPT09IDkgJiYgdHJhbnNmb3JtTmFtZSA9PT0gXCJyb3RhdGVaXCIpIHtcclxuXHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm1OYW1lID0gXCJyb3RhdGVcIjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0dHJhbnNmb3JtU3RyaW5nICs9IHRyYW5zZm9ybU5hbWUgKyB0cmFuc2Zvcm1WYWx1ZSArIFwiIFwiO1xyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0LyogSWYgcHJlc2VudCwgc2V0IHRoZSBwZXJzcGVjdGl2ZSBzdWJwcm9wZXJ0eSBmaXJzdC4gKi9cclxuXHRcdFx0XHRcdGlmIChwZXJzcGVjdGl2ZSkge1xyXG5cdFx0XHRcdFx0XHR0cmFuc2Zvcm1TdHJpbmcgPSBcInBlcnNwZWN0aXZlXCIgKyBwZXJzcGVjdGl2ZSArIFwiIFwiICsgdHJhbnNmb3JtU3RyaW5nO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Q1NTLnNldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJ0cmFuc2Zvcm1cIiwgdHJhbnNmb3JtU3RyaW5nKTtcclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHJcblx0XHQvKiBSZWdpc3RlciBob29rcyBhbmQgbm9ybWFsaXphdGlvbnMuICovXHJcblx0XHRDU1MuSG9va3MucmVnaXN0ZXIoKTtcclxuXHRcdENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcigpO1xyXG5cclxuXHRcdC8qIEFsbG93IGhvb2sgc2V0dGluZyBpbiB0aGUgc2FtZSBmYXNoaW9uIGFzIGpRdWVyeSdzICQuY3NzKCkuICovXHJcblx0XHRWZWxvY2l0eS5ob29rID0gZnVuY3Rpb24oZWxlbWVudHMsIGFyZzIsIGFyZzMpIHtcclxuXHRcdFx0dmFyIHZhbHVlO1xyXG5cclxuXHRcdFx0ZWxlbWVudHMgPSBzYW5pdGl6ZUVsZW1lbnRzKGVsZW1lbnRzKTtcclxuXHJcblx0XHRcdCQuZWFjaChlbGVtZW50cywgZnVuY3Rpb24oaSwgZWxlbWVudCkge1xyXG5cdFx0XHRcdC8qIEluaXRpYWxpemUgVmVsb2NpdHkncyBwZXItZWxlbWVudCBkYXRhIGNhY2hlIGlmIHRoaXMgZWxlbWVudCBoYXNuJ3QgcHJldmlvdXNseSBiZWVuIGFuaW1hdGVkLiAqL1xyXG5cdFx0XHRcdGlmIChEYXRhKGVsZW1lbnQpID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFZlbG9jaXR5LmluaXQoZWxlbWVudCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKiBHZXQgcHJvcGVydHkgdmFsdWUuIElmIGFuIGVsZW1lbnQgc2V0IHdhcyBwYXNzZWQgaW4sIG9ubHkgcmV0dXJuIHRoZSB2YWx1ZSBmb3IgdGhlIGZpcnN0IGVsZW1lbnQuICovXHJcblx0XHRcdFx0aWYgKGFyZzMgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0dmFsdWUgPSBDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBhcmcyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdC8qIFNldCBwcm9wZXJ0eSB2YWx1ZS4gKi9cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Lyogc1BWIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlIG5vcm1hbGl6ZWQgcHJvcGVydHlOYW1lL3Byb3BlcnR5VmFsdWUgcGFpciB1c2VkIHRvIHVwZGF0ZSB0aGUgRE9NLiAqL1xyXG5cdFx0XHRcdFx0dmFyIGFkanVzdGVkU2V0ID0gQ1NTLnNldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgYXJnMiwgYXJnMyk7XHJcblxyXG5cdFx0XHRcdFx0LyogVHJhbnNmb3JtIHByb3BlcnRpZXMgZG9uJ3QgYXV0b21hdGljYWxseSBzZXQuIFRoZXkgaGF2ZSB0byBiZSBmbHVzaGVkIHRvIHRoZSBET00uICovXHJcblx0XHRcdFx0XHRpZiAoYWRqdXN0ZWRTZXRbMF0gPT09IFwidHJhbnNmb3JtXCIpIHtcclxuXHRcdFx0XHRcdFx0VmVsb2NpdHkuQ1NTLmZsdXNoVHJhbnNmb3JtQ2FjaGUoZWxlbWVudCk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0dmFsdWUgPSBhZGp1c3RlZFNldDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0cmV0dXJuIHZhbHVlO1xyXG5cdFx0fTtcclxuXHJcblx0XHQvKioqKioqKioqKioqKioqKipcclxuXHRcdCBBbmltYXRpb25cclxuXHRcdCAqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHR2YXIgYW5pbWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgb3B0cztcclxuXHJcblx0XHRcdC8qKioqKioqKioqKioqKioqKipcclxuXHRcdFx0IENhbGwgQ2hhaW5cclxuXHRcdFx0ICoqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdC8qIExvZ2ljIGZvciBkZXRlcm1pbmluZyB3aGF0IHRvIHJldHVybiB0byB0aGUgY2FsbCBzdGFjayB3aGVuIGV4aXRpbmcgb3V0IG9mIFZlbG9jaXR5LiAqL1xyXG5cdFx0XHRmdW5jdGlvbiBnZXRDaGFpbigpIHtcclxuXHRcdFx0XHQvKiBJZiB3ZSBhcmUgdXNpbmcgdGhlIHV0aWxpdHkgZnVuY3Rpb24sIGF0dGVtcHQgdG8gcmV0dXJuIHRoaXMgY2FsbCdzIHByb21pc2UuIElmIG5vIHByb21pc2UgbGlicmFyeSB3YXMgZGV0ZWN0ZWQsXHJcblx0XHRcdFx0IGRlZmF1bHQgdG8gbnVsbCBpbnN0ZWFkIG9mIHJldHVybmluZyB0aGUgdGFyZ2V0ZWQgZWxlbWVudHMgc28gdGhhdCB1dGlsaXR5IGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlIGlzIHN0YW5kYXJkaXplZC4gKi9cclxuXHRcdFx0XHRpZiAoaXNVdGlsaXR5KSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gcHJvbWlzZURhdGEucHJvbWlzZSB8fCBudWxsO1xyXG5cdFx0XHRcdFx0LyogT3RoZXJ3aXNlLCBpZiB3ZSdyZSB1c2luZyAkLmZuLCByZXR1cm4gdGhlIGpRdWVyeS0vWmVwdG8td3JhcHBlZCBlbGVtZW50IHNldC4gKi9cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGVsZW1lbnRzV3JhcHBlZDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdCBBcmd1bWVudHMgQXNzaWdubWVudFxyXG5cdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdC8qIFRvIGFsbG93IGZvciBleHByZXNzaXZlIENvZmZlZVNjcmlwdCBjb2RlLCBWZWxvY2l0eSBzdXBwb3J0cyBhbiBhbHRlcm5hdGl2ZSBzeW50YXggaW4gd2hpY2ggXCJlbGVtZW50c1wiIChvciBcImVcIiksIFwicHJvcGVydGllc1wiIChvciBcInBcIiksIGFuZCBcIm9wdGlvbnNcIiAob3IgXCJvXCIpXHJcblx0XHRcdCBvYmplY3RzIGFyZSBkZWZpbmVkIG9uIGEgY29udGFpbmVyIG9iamVjdCB0aGF0J3MgcGFzc2VkIGluIGFzIFZlbG9jaXR5J3Mgc29sZSBhcmd1bWVudC4gKi9cclxuXHRcdFx0LyogTm90ZTogU29tZSBicm93c2VycyBhdXRvbWF0aWNhbGx5IHBvcHVsYXRlIGFyZ3VtZW50cyB3aXRoIGEgXCJwcm9wZXJ0aWVzXCIgb2JqZWN0LiBXZSBkZXRlY3QgaXQgYnkgY2hlY2tpbmcgZm9yIGl0cyBkZWZhdWx0IFwibmFtZXNcIiBwcm9wZXJ0eS4gKi9cclxuXHRcdFx0dmFyIHN5bnRhY3RpY1N1Z2FyID0gKGFyZ3VtZW50c1swXSAmJiAoYXJndW1lbnRzWzBdLnAgfHwgKCgkLmlzUGxhaW5PYmplY3QoYXJndW1lbnRzWzBdLnByb3BlcnRpZXMpICYmICFhcmd1bWVudHNbMF0ucHJvcGVydGllcy5uYW1lcykgfHwgVHlwZS5pc1N0cmluZyhhcmd1bWVudHNbMF0ucHJvcGVydGllcykpKSksXHJcblx0XHRcdFx0XHQvKiBXaGV0aGVyIFZlbG9jaXR5IHdhcyBjYWxsZWQgdmlhIHRoZSB1dGlsaXR5IGZ1bmN0aW9uIChhcyBvcHBvc2VkIHRvIG9uIGEgalF1ZXJ5L1plcHRvIG9iamVjdCkuICovXHJcblx0XHRcdFx0XHRpc1V0aWxpdHksXHJcblx0XHRcdFx0XHQvKiBXaGVuIFZlbG9jaXR5IGlzIGNhbGxlZCB2aWEgdGhlIHV0aWxpdHkgZnVuY3Rpb24gKCQuVmVsb2NpdHkoKS9WZWxvY2l0eSgpKSwgZWxlbWVudHMgYXJlIGV4cGxpY2l0bHlcclxuXHRcdFx0XHRcdCBwYXNzZWQgaW4gYXMgdGhlIGZpcnN0IHBhcmFtZXRlci4gVGh1cywgYXJndW1lbnQgcG9zaXRpb25pbmcgdmFyaWVzLiBXZSBub3JtYWxpemUgdGhlbSBoZXJlLiAqL1xyXG5cdFx0XHRcdFx0ZWxlbWVudHNXcmFwcGVkLFxyXG5cdFx0XHRcdFx0YXJndW1lbnRJbmRleDtcclxuXHJcblx0XHRcdHZhciBlbGVtZW50cyxcclxuXHRcdFx0XHRcdHByb3BlcnRpZXNNYXAsXHJcblx0XHRcdFx0XHRvcHRpb25zO1xyXG5cclxuXHRcdFx0LyogRGV0ZWN0IGpRdWVyeS9aZXB0byBlbGVtZW50cyBiZWluZyBhbmltYXRlZCB2aWEgdGhlICQuZm4gbWV0aG9kLiAqL1xyXG5cdFx0XHRpZiAoVHlwZS5pc1dyYXBwZWQodGhpcykpIHtcclxuXHRcdFx0XHRpc1V0aWxpdHkgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0YXJndW1lbnRJbmRleCA9IDA7XHJcblx0XHRcdFx0ZWxlbWVudHMgPSB0aGlzO1xyXG5cdFx0XHRcdGVsZW1lbnRzV3JhcHBlZCA9IHRoaXM7XHJcblx0XHRcdFx0LyogT3RoZXJ3aXNlLCByYXcgZWxlbWVudHMgYXJlIGJlaW5nIGFuaW1hdGVkIHZpYSB0aGUgdXRpbGl0eSBmdW5jdGlvbi4gKi9cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRpc1V0aWxpdHkgPSB0cnVlO1xyXG5cclxuXHRcdFx0XHRhcmd1bWVudEluZGV4ID0gMTtcclxuXHRcdFx0XHRlbGVtZW50cyA9IHN5bnRhY3RpY1N1Z2FyID8gKGFyZ3VtZW50c1swXS5lbGVtZW50cyB8fCBhcmd1bWVudHNbMF0uZSkgOiBhcmd1bWVudHNbMF07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qKioqKioqKioqKioqKipcclxuXHRcdFx0IFByb21pc2VzXHJcblx0XHRcdCAqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHR2YXIgcHJvbWlzZURhdGEgPSB7XHJcblx0XHRcdFx0cHJvbWlzZTogbnVsbCxcclxuXHRcdFx0XHRyZXNvbHZlcjogbnVsbCxcclxuXHRcdFx0XHRyZWplY3RlcjogbnVsbFxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0LyogSWYgdGhpcyBjYWxsIHdhcyBtYWRlIHZpYSB0aGUgdXRpbGl0eSBmdW5jdGlvbiAod2hpY2ggaXMgdGhlIGRlZmF1bHQgbWV0aG9kIG9mIGludm9jYXRpb24gd2hlbiBqUXVlcnkvWmVwdG8gYXJlIG5vdCBiZWluZyB1c2VkKSwgYW5kIGlmXHJcblx0XHRcdCBwcm9taXNlIHN1cHBvcnQgd2FzIGRldGVjdGVkLCBjcmVhdGUgYSBwcm9taXNlIG9iamVjdCBmb3IgdGhpcyBjYWxsIGFuZCBzdG9yZSByZWZlcmVuY2VzIHRvIGl0cyByZXNvbHZlciBhbmQgcmVqZWN0ZXIgbWV0aG9kcy4gVGhlIHJlc29sdmVcclxuXHRcdFx0IG1ldGhvZCBpcyB1c2VkIHdoZW4gYSBjYWxsIGNvbXBsZXRlcyBuYXR1cmFsbHkgb3IgaXMgcHJlbWF0dXJlbHkgc3RvcHBlZCBieSB0aGUgdXNlci4gSW4gYm90aCBjYXNlcywgY29tcGxldGVDYWxsKCkgaGFuZGxlcyB0aGUgYXNzb2NpYXRlZFxyXG5cdFx0XHQgY2FsbCBjbGVhbnVwIGFuZCBwcm9taXNlIHJlc29sdmluZyBsb2dpYy4gVGhlIHJlamVjdCBtZXRob2QgaXMgdXNlZCB3aGVuIGFuIGludmFsaWQgc2V0IG9mIGFyZ3VtZW50cyBpcyBwYXNzZWQgaW50byBhIFZlbG9jaXR5IGNhbGwuICovXHJcblx0XHRcdC8qIE5vdGU6IFZlbG9jaXR5IGVtcGxveXMgYSBjYWxsLWJhc2VkIHF1ZXVlaW5nIGFyY2hpdGVjdHVyZSwgd2hpY2ggbWVhbnMgdGhhdCBzdG9wcGluZyBhbiBhbmltYXRpbmcgZWxlbWVudCBhY3R1YWxseSBzdG9wcyB0aGUgZnVsbCBjYWxsIHRoYXRcclxuXHRcdFx0IHRyaWdnZXJlZCBpdCAtLSBub3QgdGhhdCBvbmUgZWxlbWVudCBleGNsdXNpdmVseS4gU2ltaWxhcmx5LCB0aGVyZSBpcyBvbmUgcHJvbWlzZSBwZXIgY2FsbCwgYW5kIGFsbCBlbGVtZW50cyB0YXJnZXRlZCBieSBhIFZlbG9jaXR5IGNhbGwgYXJlXHJcblx0XHRcdCBncm91cGVkIHRvZ2V0aGVyIGZvciB0aGUgcHVycG9zZXMgb2YgcmVzb2x2aW5nIGFuZCByZWplY3RpbmcgYSBwcm9taXNlLiAqL1xyXG5cdFx0XHRpZiAoaXNVdGlsaXR5ICYmIFZlbG9jaXR5LlByb21pc2UpIHtcclxuXHRcdFx0XHRwcm9taXNlRGF0YS5wcm9taXNlID0gbmV3IFZlbG9jaXR5LlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XHJcblx0XHRcdFx0XHRwcm9taXNlRGF0YS5yZXNvbHZlciA9IHJlc29sdmU7XHJcblx0XHRcdFx0XHRwcm9taXNlRGF0YS5yZWplY3RlciA9IHJlamVjdDtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHN5bnRhY3RpY1N1Z2FyKSB7XHJcblx0XHRcdFx0cHJvcGVydGllc01hcCA9IGFyZ3VtZW50c1swXS5wcm9wZXJ0aWVzIHx8IGFyZ3VtZW50c1swXS5wO1xyXG5cdFx0XHRcdG9wdGlvbnMgPSBhcmd1bWVudHNbMF0ub3B0aW9ucyB8fCBhcmd1bWVudHNbMF0ubztcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRwcm9wZXJ0aWVzTWFwID0gYXJndW1lbnRzW2FyZ3VtZW50SW5kZXhdO1xyXG5cdFx0XHRcdG9wdGlvbnMgPSBhcmd1bWVudHNbYXJndW1lbnRJbmRleCArIDFdO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRlbGVtZW50cyA9IHNhbml0aXplRWxlbWVudHMoZWxlbWVudHMpO1xyXG5cclxuXHRcdFx0aWYgKCFlbGVtZW50cykge1xyXG5cdFx0XHRcdGlmIChwcm9taXNlRGF0YS5wcm9taXNlKSB7XHJcblx0XHRcdFx0XHRpZiAoIXByb3BlcnRpZXNNYXAgfHwgIW9wdGlvbnMgfHwgb3B0aW9ucy5wcm9taXNlUmVqZWN0RW1wdHkgIT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHRcdHByb21pc2VEYXRhLnJlamVjdGVyKCk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRwcm9taXNlRGF0YS5yZXNvbHZlcigpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qIFRoZSBsZW5ndGggb2YgdGhlIGVsZW1lbnQgc2V0IChpbiB0aGUgZm9ybSBvZiBhIG5vZGVMaXN0IG9yIGFuIGFycmF5IG9mIGVsZW1lbnRzKSBpcyBkZWZhdWx0ZWQgdG8gMSBpbiBjYXNlIGFcclxuXHRcdFx0IHNpbmdsZSByYXcgRE9NIGVsZW1lbnQgaXMgcGFzc2VkIGluICh3aGljaCBkb2Vzbid0IGNvbnRhaW4gYSBsZW5ndGggcHJvcGVydHkpLiAqL1xyXG5cdFx0XHR2YXIgZWxlbWVudHNMZW5ndGggPSBlbGVtZW50cy5sZW5ndGgsXHJcblx0XHRcdFx0XHRlbGVtZW50c0luZGV4ID0gMDtcclxuXHJcblx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0IEFyZ3VtZW50IE92ZXJsb2FkaW5nXHJcblx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHQvKiBTdXBwb3J0IGlzIGluY2x1ZGVkIGZvciBqUXVlcnkncyBhcmd1bWVudCBvdmVybG9hZGluZzogJC5hbmltYXRlKHByb3BlcnR5TWFwIFssIGR1cmF0aW9uXSBbLCBlYXNpbmddIFssIGNvbXBsZXRlXSkuXHJcblx0XHRcdCBPdmVybG9hZGluZyBpcyBkZXRlY3RlZCBieSBjaGVja2luZyBmb3IgdGhlIGFic2VuY2Ugb2YgYW4gb2JqZWN0IGJlaW5nIHBhc3NlZCBpbnRvIG9wdGlvbnMuICovXHJcblx0XHRcdC8qIE5vdGU6IFRoZSBzdG9wL2ZpbmlzaC9wYXVzZS9yZXN1bWUgYWN0aW9ucyBkbyBub3QgYWNjZXB0IGFuaW1hdGlvbiBvcHRpb25zLCBhbmQgYXJlIHRoZXJlZm9yZSBleGNsdWRlZCBmcm9tIHRoaXMgY2hlY2suICovXHJcblx0XHRcdGlmICghL14oc3RvcHxmaW5pc2h8ZmluaXNoQWxsfHBhdXNlfHJlc3VtZSkkL2kudGVzdChwcm9wZXJ0aWVzTWFwKSAmJiAhJC5pc1BsYWluT2JqZWN0KG9wdGlvbnMpKSB7XHJcblx0XHRcdFx0LyogVGhlIHV0aWxpdHkgZnVuY3Rpb24gc2hpZnRzIGFsbCBhcmd1bWVudHMgb25lIHBvc2l0aW9uIHRvIHRoZSByaWdodCwgc28gd2UgYWRqdXN0IGZvciB0aGF0IG9mZnNldC4gKi9cclxuXHRcdFx0XHR2YXIgc3RhcnRpbmdBcmd1bWVudFBvc2l0aW9uID0gYXJndW1lbnRJbmRleCArIDE7XHJcblxyXG5cdFx0XHRcdG9wdGlvbnMgPSB7fTtcclxuXHJcblx0XHRcdFx0LyogSXRlcmF0ZSB0aHJvdWdoIGFsbCBvcHRpb25zIGFyZ3VtZW50cyAqL1xyXG5cdFx0XHRcdGZvciAodmFyIGkgPSBzdGFydGluZ0FyZ3VtZW50UG9zaXRpb247IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdC8qIFRyZWF0IGEgbnVtYmVyIGFzIGEgZHVyYXRpb24uIFBhcnNlIGl0IG91dC4gKi9cclxuXHRcdFx0XHRcdC8qIE5vdGU6IFRoZSBmb2xsb3dpbmcgUmVnRXggd2lsbCByZXR1cm4gdHJ1ZSBpZiBwYXNzZWQgYW4gYXJyYXkgd2l0aCBhIG51bWJlciBhcyBpdHMgZmlyc3QgaXRlbS5cclxuXHRcdFx0XHRcdCBUaHVzLCBhcnJheXMgYXJlIHNraXBwZWQgZnJvbSB0aGlzIGNoZWNrLiAqL1xyXG5cdFx0XHRcdFx0aWYgKCFUeXBlLmlzQXJyYXkoYXJndW1lbnRzW2ldKSAmJiAoL14oZmFzdHxub3JtYWx8c2xvdykkL2kudGVzdChhcmd1bWVudHNbaV0pIHx8IC9eXFxkLy50ZXN0KGFyZ3VtZW50c1tpXSkpKSB7XHJcblx0XHRcdFx0XHRcdG9wdGlvbnMuZHVyYXRpb24gPSBhcmd1bWVudHNbaV07XHJcblx0XHRcdFx0XHRcdC8qIFRyZWF0IHN0cmluZ3MgYW5kIGFycmF5cyBhcyBlYXNpbmdzLiAqL1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmIChUeXBlLmlzU3RyaW5nKGFyZ3VtZW50c1tpXSkgfHwgVHlwZS5pc0FycmF5KGFyZ3VtZW50c1tpXSkpIHtcclxuXHRcdFx0XHRcdFx0b3B0aW9ucy5lYXNpbmcgPSBhcmd1bWVudHNbaV07XHJcblx0XHRcdFx0XHRcdC8qIFRyZWF0IGEgZnVuY3Rpb24gYXMgYSBjb21wbGV0ZSBjYWxsYmFjay4gKi9cclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoVHlwZS5pc0Z1bmN0aW9uKGFyZ3VtZW50c1tpXSkpIHtcclxuXHRcdFx0XHRcdFx0b3B0aW9ucy5jb21wbGV0ZSA9IGFyZ3VtZW50c1tpXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0IEFjdGlvbiBEZXRlY3Rpb25cclxuXHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdC8qIFZlbG9jaXR5J3MgYmVoYXZpb3IgaXMgY2F0ZWdvcml6ZWQgaW50byBcImFjdGlvbnNcIjogRWxlbWVudHMgY2FuIGVpdGhlciBiZSBzcGVjaWFsbHkgc2Nyb2xsZWQgaW50byB2aWV3LFxyXG5cdFx0XHQgb3IgdGhleSBjYW4gYmUgc3RhcnRlZCwgc3RvcHBlZCwgcGF1c2VkLCByZXN1bWVkLCBvciByZXZlcnNlZCAuIElmIGEgbGl0ZXJhbCBvciByZWZlcmVuY2VkIHByb3BlcnRpZXMgbWFwIGlzIHBhc3NlZCBpbiBhcyBWZWxvY2l0eSdzXHJcblx0XHRcdCBmaXJzdCBhcmd1bWVudCwgdGhlIGFzc29jaWF0ZWQgYWN0aW9uIGlzIFwic3RhcnRcIi4gQWx0ZXJuYXRpdmVseSwgXCJzY3JvbGxcIiwgXCJyZXZlcnNlXCIsIFwicGF1c2VcIiwgXCJyZXN1bWVcIiBvciBcInN0b3BcIiBjYW4gYmUgcGFzc2VkIGluIFxyXG5cdFx0XHQgaW5zdGVhZCBvZiBhIHByb3BlcnRpZXMgbWFwLiAqL1xyXG5cdFx0XHR2YXIgYWN0aW9uO1xyXG5cclxuXHRcdFx0c3dpdGNoIChwcm9wZXJ0aWVzTWFwKSB7XHJcblx0XHRcdFx0Y2FzZSBcInNjcm9sbFwiOlxyXG5cdFx0XHRcdFx0YWN0aW9uID0gXCJzY3JvbGxcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0XHRjYXNlIFwicmV2ZXJzZVwiOlxyXG5cdFx0XHRcdFx0YWN0aW9uID0gXCJyZXZlcnNlXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0Y2FzZSBcInBhdXNlXCI6XHJcblxyXG5cdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdCBBY3Rpb246IFBhdXNlXHJcblx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHR2YXIgY3VycmVudFRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xyXG5cclxuXHRcdFx0XHRcdC8qIEhhbmRsZSBkZWxheSB0aW1lcnMgKi9cclxuXHRcdFx0XHRcdCQuZWFjaChlbGVtZW50cywgZnVuY3Rpb24oaSwgZWxlbWVudCkge1xyXG5cdFx0XHRcdFx0XHRwYXVzZURlbGF5T25FbGVtZW50KGVsZW1lbnQsIGN1cnJlbnRUaW1lKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdC8qIFBhdXNlIGFuZCBSZXN1bWUgYXJlIGNhbGwtd2lkZSAobm90IG9uIGEgcGVyIGVsZW1lbnQgYmFzaXMpLiBUaHVzLCBjYWxsaW5nIHBhdXNlIG9yIHJlc3VtZSBvbiBhIFxyXG5cdFx0XHRcdFx0IHNpbmdsZSBlbGVtZW50IHdpbGwgY2F1c2UgYW55IGNhbGxzIHRoYXQgY29udGFpbnQgdHdlZW5zIGZvciB0aGF0IGVsZW1lbnQgdG8gYmUgcGF1c2VkL3Jlc3VtZWRcclxuXHRcdFx0XHRcdCBhcyB3ZWxsLiAqL1xyXG5cclxuXHRcdFx0XHRcdC8qIEl0ZXJhdGUgdGhyb3VnaCBhbGwgY2FsbHMgYW5kIHBhdXNlIGFueSB0aGF0IGNvbnRhaW4gYW55IG9mIG91ciBlbGVtZW50cyAqL1xyXG5cdFx0XHRcdFx0JC5lYWNoKFZlbG9jaXR5LlN0YXRlLmNhbGxzLCBmdW5jdGlvbihpLCBhY3RpdmVDYWxsKSB7XHJcblxyXG5cdFx0XHRcdFx0XHR2YXIgZm91bmQgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0LyogSW5hY3RpdmUgY2FsbHMgYXJlIHNldCB0byBmYWxzZSBieSB0aGUgbG9naWMgaW5zaWRlIGNvbXBsZXRlQ2FsbCgpLiBTa2lwIHRoZW0uICovXHJcblx0XHRcdFx0XHRcdGlmIChhY3RpdmVDYWxsKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogSXRlcmF0ZSB0aHJvdWdoIHRoZSBhY3RpdmUgY2FsbCdzIHRhcmdldGVkIGVsZW1lbnRzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdCQuZWFjaChhY3RpdmVDYWxsWzFdLCBmdW5jdGlvbihrLCBhY3RpdmVFbGVtZW50KSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgcXVldWVOYW1lID0gKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkgPyBcIlwiIDogb3B0aW9ucztcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAocXVldWVOYW1lICE9PSB0cnVlICYmIChhY3RpdmVDYWxsWzJdLnF1ZXVlICE9PSBxdWV1ZU5hbWUpICYmICEob3B0aW9ucyA9PT0gdW5kZWZpbmVkICYmIGFjdGl2ZUNhbGxbMl0ucXVldWUgPT09IGZhbHNlKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBJdGVyYXRlIHRocm91Z2ggdGhlIGNhbGxzIHRhcmdldGVkIGJ5IHRoZSBzdG9wIGNvbW1hbmQuICovXHJcblx0XHRcdFx0XHRcdFx0XHQkLmVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGwsIGVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogQ2hlY2sgdGhhdCB0aGlzIGNhbGwgd2FzIGFwcGxpZWQgdG8gdGhlIHRhcmdldCBlbGVtZW50LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZWxlbWVudCA9PT0gYWN0aXZlRWxlbWVudCkge1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBTZXQgY2FsbCB0byBwYXVzZWQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhY3RpdmVDYWxsWzVdID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzdW1lOiBmYWxzZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIE9uY2Ugd2UgbWF0Y2ggYW4gZWxlbWVudCwgd2UgY2FuIGJvdW5jZSBvdXQgdG8gdGhlIG5leHQgY2FsbCBlbnRpcmVseSAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIFByb2NlZWQgdG8gY2hlY2sgbmV4dCBjYWxsIGlmIHdlIGhhdmUgYWxyZWFkeSBtYXRjaGVkICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoZm91bmQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0LyogU2luY2UgcGF1c2UgY3JlYXRlcyBubyBuZXcgdHdlZW5zLCBleGl0IG91dCBvZiBWZWxvY2l0eS4gKi9cclxuXHRcdFx0XHRcdHJldHVybiBnZXRDaGFpbigpO1xyXG5cclxuXHRcdFx0XHRjYXNlIFwicmVzdW1lXCI6XHJcblxyXG5cdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdCBBY3Rpb246IFJlc3VtZVxyXG5cdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0LyogSGFuZGxlIGRlbGF5IHRpbWVycyAqL1xyXG5cdFx0XHRcdFx0JC5lYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihpLCBlbGVtZW50KSB7XHJcblx0XHRcdFx0XHRcdHJlc3VtZURlbGF5T25FbGVtZW50KGVsZW1lbnQsIGN1cnJlbnRUaW1lKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdC8qIFBhdXNlIGFuZCBSZXN1bWUgYXJlIGNhbGwtd2lkZSAobm90IG9uIGEgcGVyIGVsZW1udCBiYXNpcykuIFRodXMsIGNhbGxpbmcgcGF1c2Ugb3IgcmVzdW1lIG9uIGEgXHJcblx0XHRcdFx0XHQgc2luZ2xlIGVsZW1lbnQgd2lsbCBjYXVzZSBhbnkgY2FsbHMgdGhhdCBjb250YWludCB0d2VlbnMgZm9yIHRoYXQgZWxlbWVudCB0byBiZSBwYXVzZWQvcmVzdW1lZFxyXG5cdFx0XHRcdFx0IGFzIHdlbGwuICovXHJcblxyXG5cdFx0XHRcdFx0LyogSXRlcmF0ZSB0aHJvdWdoIGFsbCBjYWxscyBhbmQgcGF1c2UgYW55IHRoYXQgY29udGFpbiBhbnkgb2Ygb3VyIGVsZW1lbnRzICovXHJcblx0XHRcdFx0XHQkLmVhY2goVmVsb2NpdHkuU3RhdGUuY2FsbHMsIGZ1bmN0aW9uKGksIGFjdGl2ZUNhbGwpIHtcclxuXHRcdFx0XHRcdFx0dmFyIGZvdW5kID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdC8qIEluYWN0aXZlIGNhbGxzIGFyZSBzZXQgdG8gZmFsc2UgYnkgdGhlIGxvZ2ljIGluc2lkZSBjb21wbGV0ZUNhbGwoKS4gU2tpcCB0aGVtLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoYWN0aXZlQ2FsbCkge1xyXG5cdFx0XHRcdFx0XHRcdC8qIEl0ZXJhdGUgdGhyb3VnaCB0aGUgYWN0aXZlIGNhbGwncyB0YXJnZXRlZCBlbGVtZW50cy4gKi9cclxuXHRcdFx0XHRcdFx0XHQkLmVhY2goYWN0aXZlQ2FsbFsxXSwgZnVuY3Rpb24oaywgYWN0aXZlRWxlbWVudCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHF1ZXVlTmFtZSA9IChvcHRpb25zID09PSB1bmRlZmluZWQpID8gXCJcIiA6IG9wdGlvbnM7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHF1ZXVlTmFtZSAhPT0gdHJ1ZSAmJiAoYWN0aXZlQ2FsbFsyXS5xdWV1ZSAhPT0gcXVldWVOYW1lKSAmJiAhKG9wdGlvbnMgPT09IHVuZGVmaW5lZCAmJiBhY3RpdmVDYWxsWzJdLnF1ZXVlID09PSBmYWxzZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogU2tpcCBhbnkgY2FsbHMgdGhhdCBoYXZlIG5ldmVyIGJlZW4gcGF1c2VkICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIWFjdGl2ZUNhbGxbNV0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogSXRlcmF0ZSB0aHJvdWdoIHRoZSBjYWxscyB0YXJnZXRlZCBieSB0aGUgc3RvcCBjb21tYW5kLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0JC5lYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihsLCBlbGVtZW50KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIENoZWNrIHRoYXQgdGhpcyBjYWxsIHdhcyBhcHBsaWVkIHRvIHRoZSB0YXJnZXQgZWxlbWVudC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVsZW1lbnQgPT09IGFjdGl2ZUVsZW1lbnQpIHtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogRmxhZyBhIHBhdXNlIG9iamVjdCB0byBiZSByZXN1bWVkLCB3aGljaCB3aWxsIG9jY3VyIGR1cmluZyB0aGUgbmV4dCB0aWNrLiBJblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCBhZGRpdGlvbiwgdGhlIHBhdXNlIG9iamVjdCB3aWxsIGF0IHRoYXQgdGltZSBiZSBkZWxldGVkICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0YWN0aXZlQ2FsbFs1XS5yZXN1bWUgPSB0cnVlO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBPbmNlIHdlIG1hdGNoIGFuIGVsZW1lbnQsIHdlIGNhbiBib3VuY2Ugb3V0IHRvIHRoZSBuZXh0IGNhbGwgZW50aXJlbHkgKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3VuZCA9IHRydWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBQcm9jZWVkIHRvIGNoZWNrIG5leHQgY2FsbCBpZiB3ZSBoYXZlIGFscmVhZHkgbWF0Y2hlZCAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGZvdW5kKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdC8qIFNpbmNlIHJlc3VtZSBjcmVhdGVzIG5vIG5ldyB0d2VlbnMsIGV4aXQgb3V0IG9mIFZlbG9jaXR5LiAqL1xyXG5cdFx0XHRcdFx0cmV0dXJuIGdldENoYWluKCk7XHJcblxyXG5cdFx0XHRcdGNhc2UgXCJmaW5pc2hcIjpcclxuXHRcdFx0XHRjYXNlIFwiZmluaXNoQWxsXCI6XHJcblx0XHRcdFx0Y2FzZSBcInN0b3BcIjpcclxuXHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHQgQWN0aW9uOiBTdG9wXHJcblx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHQvKiBDbGVhciB0aGUgY3VycmVudGx5LWFjdGl2ZSBkZWxheSBvbiBlYWNoIHRhcmdldGVkIGVsZW1lbnQuICovXHJcblx0XHRcdFx0XHQkLmVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGksIGVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdFx0aWYgKERhdGEoZWxlbWVudCkgJiYgRGF0YShlbGVtZW50KS5kZWxheVRpbWVyKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogU3RvcCB0aGUgdGltZXIgZnJvbSB0cmlnZ2VyaW5nIGl0cyBjYWNoZWQgbmV4dCgpIGZ1bmN0aW9uLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGNsZWFyVGltZW91dChEYXRhKGVsZW1lbnQpLmRlbGF5VGltZXIuc2V0VGltZW91dCk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIE1hbnVhbGx5IGNhbGwgdGhlIG5leHQoKSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBzdWJzZXF1ZW50IHF1ZXVlIGl0ZW1zIGNhbiBwcm9ncmVzcy4gKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAoRGF0YShlbGVtZW50KS5kZWxheVRpbWVyLm5leHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdERhdGEoZWxlbWVudCkuZGVsYXlUaW1lci5uZXh0KCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRkZWxldGUgRGF0YShlbGVtZW50KS5kZWxheVRpbWVyO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBJZiB3ZSB3YW50IHRvIGZpbmlzaCBldmVyeXRoaW5nIGluIHRoZSBxdWV1ZSwgd2UgaGF2ZSB0byBpdGVyYXRlIHRocm91Z2ggaXRcclxuXHRcdFx0XHRcdFx0IGFuZCBjYWxsIGVhY2ggZnVuY3Rpb24uIFRoaXMgd2lsbCBtYWtlIHRoZW0gYWN0aXZlIGNhbGxzIGJlbG93LCB3aGljaCB3aWxsXHJcblx0XHRcdFx0XHRcdCBjYXVzZSB0aGVtIHRvIGJlIGFwcGxpZWQgdmlhIHRoZSBkdXJhdGlvbiBzZXR0aW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydGllc01hcCA9PT0gXCJmaW5pc2hBbGxcIiAmJiAob3B0aW9ucyA9PT0gdHJ1ZSB8fCBUeXBlLmlzU3RyaW5nKG9wdGlvbnMpKSkge1xyXG5cdFx0XHRcdFx0XHRcdC8qIEl0ZXJhdGUgdGhyb3VnaCB0aGUgaXRlbXMgaW4gdGhlIGVsZW1lbnQncyBxdWV1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHQkLmVhY2goJC5xdWV1ZShlbGVtZW50LCBUeXBlLmlzU3RyaW5nKG9wdGlvbnMpID8gb3B0aW9ucyA6IFwiXCIpLCBmdW5jdGlvbihfLCBpdGVtKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBUaGUgcXVldWUgYXJyYXkgY2FuIGNvbnRhaW4gYW4gXCJpbnByb2dyZXNzXCIgc3RyaW5nLCB3aGljaCB3ZSBza2lwLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKFR5cGUuaXNGdW5jdGlvbihpdGVtKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpdGVtKCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIENsZWFyaW5nIHRoZSAkLnF1ZXVlKCkgYXJyYXkgaXMgYWNoaWV2ZWQgYnkgcmVzZXR0aW5nIGl0IHRvIFtdLiAqL1xyXG5cdFx0XHRcdFx0XHRcdCQucXVldWUoZWxlbWVudCwgVHlwZS5pc1N0cmluZyhvcHRpb25zKSA/IG9wdGlvbnMgOiBcIlwiLCBbXSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdHZhciBjYWxsc1RvU3RvcCA9IFtdO1xyXG5cclxuXHRcdFx0XHRcdC8qIFdoZW4gdGhlIHN0b3AgYWN0aW9uIGlzIHRyaWdnZXJlZCwgdGhlIGVsZW1lbnRzJyBjdXJyZW50bHkgYWN0aXZlIGNhbGwgaXMgaW1tZWRpYXRlbHkgc3RvcHBlZC4gVGhlIGFjdGl2ZSBjYWxsIG1pZ2h0IGhhdmVcclxuXHRcdFx0XHRcdCBiZWVuIGFwcGxpZWQgdG8gbXVsdGlwbGUgZWxlbWVudHMsIGluIHdoaWNoIGNhc2UgYWxsIG9mIHRoZSBjYWxsJ3MgZWxlbWVudHMgd2lsbCBiZSBzdG9wcGVkLiBXaGVuIGFuIGVsZW1lbnRcclxuXHRcdFx0XHRcdCBpcyBzdG9wcGVkLCB0aGUgbmV4dCBpdGVtIGluIGl0cyBhbmltYXRpb24gcXVldWUgaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcmVkLiAqL1xyXG5cdFx0XHRcdFx0LyogQW4gYWRkaXRpb25hbCBhcmd1bWVudCBtYXkgYmUgcGFzc2VkIGluIHRvIGNsZWFyIGFuIGVsZW1lbnQncyByZW1haW5pbmcgcXVldWVkIGNhbGxzLiBFaXRoZXIgdHJ1ZSAod2hpY2ggZGVmYXVsdHMgdG8gdGhlIFwiZnhcIiBxdWV1ZSlcclxuXHRcdFx0XHRcdCBvciBhIGN1c3RvbSBxdWV1ZSBzdHJpbmcgY2FuIGJlIHBhc3NlZCBpbi4gKi9cclxuXHRcdFx0XHRcdC8qIE5vdGU6IFRoZSBzdG9wIGNvbW1hbmQgcnVucyBwcmlvciB0byBWZWxvY2l0eSdzIFF1ZXVlaW5nIHBoYXNlIHNpbmNlIGl0cyBiZWhhdmlvciBpcyBpbnRlbmRlZCB0byB0YWtlIGVmZmVjdCAqaW1tZWRpYXRlbHkqLFxyXG5cdFx0XHRcdFx0IHJlZ2FyZGxlc3Mgb2YgdGhlIGVsZW1lbnQncyBjdXJyZW50IHF1ZXVlIHN0YXRlLiAqL1xyXG5cclxuXHRcdFx0XHRcdC8qIEl0ZXJhdGUgdGhyb3VnaCBldmVyeSBhY3RpdmUgY2FsbC4gKi9cclxuXHRcdFx0XHRcdCQuZWFjaChWZWxvY2l0eS5TdGF0ZS5jYWxscywgZnVuY3Rpb24oaSwgYWN0aXZlQ2FsbCkge1xyXG5cdFx0XHRcdFx0XHQvKiBJbmFjdGl2ZSBjYWxscyBhcmUgc2V0IHRvIGZhbHNlIGJ5IHRoZSBsb2dpYyBpbnNpZGUgY29tcGxldGVDYWxsKCkuIFNraXAgdGhlbS4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKGFjdGl2ZUNhbGwpIHtcclxuXHRcdFx0XHRcdFx0XHQvKiBJdGVyYXRlIHRocm91Z2ggdGhlIGFjdGl2ZSBjYWxsJ3MgdGFyZ2V0ZWQgZWxlbWVudHMuICovXHJcblx0XHRcdFx0XHRcdFx0JC5lYWNoKGFjdGl2ZUNhbGxbMV0sIGZ1bmN0aW9uKGssIGFjdGl2ZUVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIElmIHRydWUgd2FzIHBhc3NlZCBpbiBhcyBhIHNlY29uZGFyeSBhcmd1bWVudCwgY2xlYXIgYWJzb2x1dGVseSBhbGwgY2FsbHMgb24gdGhpcyBlbGVtZW50LiBPdGhlcndpc2UsIG9ubHlcclxuXHRcdFx0XHRcdFx0XHRcdCBjbGVhciBjYWxscyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlbGV2YW50IHF1ZXVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogQ2FsbCBzdG9wcGluZyBsb2dpYyB3b3JrcyBhcyBmb2xsb3dzOlxyXG5cdFx0XHRcdFx0XHRcdFx0IC0gb3B0aW9ucyA9PT0gdHJ1ZSAtLT4gc3RvcCBjdXJyZW50IGRlZmF1bHQgcXVldWUgY2FsbHMgKGFuZCBxdWV1ZTpmYWxzZSBjYWxscyksIGluY2x1ZGluZyByZW1haW5pbmcgcXVldWVkIG9uZXMuXHJcblx0XHRcdFx0XHRcdFx0XHQgLSBvcHRpb25zID09PSB1bmRlZmluZWQgLS0+IHN0b3AgY3VycmVudCBxdWV1ZTpcIlwiIGNhbGwgYW5kIGFsbCBxdWV1ZTpmYWxzZSBjYWxscy5cclxuXHRcdFx0XHRcdFx0XHRcdCAtIG9wdGlvbnMgPT09IGZhbHNlIC0tPiBzdG9wIG9ubHkgcXVldWU6ZmFsc2UgY2FsbHMuXHJcblx0XHRcdFx0XHRcdFx0XHQgLSBvcHRpb25zID09PSBcImN1c3RvbVwiIC0tPiBzdG9wIGN1cnJlbnQgcXVldWU6XCJjdXN0b21cIiBjYWxsLCBpbmNsdWRpbmcgcmVtYWluaW5nIHF1ZXVlZCBvbmVzICh0aGVyZSBpcyBubyBmdW5jdGlvbmFsaXR5IHRvIG9ubHkgY2xlYXIgdGhlIGN1cnJlbnRseS1ydW5uaW5nIHF1ZXVlOlwiY3VzdG9tXCIgY2FsbCkuICovXHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgcXVldWVOYW1lID0gKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkgPyBcIlwiIDogb3B0aW9ucztcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAocXVldWVOYW1lICE9PSB0cnVlICYmIChhY3RpdmVDYWxsWzJdLnF1ZXVlICE9PSBxdWV1ZU5hbWUpICYmICEob3B0aW9ucyA9PT0gdW5kZWZpbmVkICYmIGFjdGl2ZUNhbGxbMl0ucXVldWUgPT09IGZhbHNlKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBJdGVyYXRlIHRocm91Z2ggdGhlIGNhbGxzIHRhcmdldGVkIGJ5IHRoZSBzdG9wIGNvbW1hbmQuICovXHJcblx0XHRcdFx0XHRcdFx0XHQkLmVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGwsIGVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogQ2hlY2sgdGhhdCB0aGlzIGNhbGwgd2FzIGFwcGxpZWQgdG8gdGhlIHRhcmdldCBlbGVtZW50LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZWxlbWVudCA9PT0gYWN0aXZlRWxlbWVudCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIE9wdGlvbmFsbHkgY2xlYXIgdGhlIHJlbWFpbmluZyBxdWV1ZWQgY2FsbHMuIElmIHdlJ3JlIGRvaW5nIFwiZmluaXNoQWxsXCIgdGhpcyB3b24ndCBmaW5kIGFueXRoaW5nLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCBkdWUgdG8gdGhlIHF1ZXVlLWNsZWFyaW5nIGFib3ZlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChvcHRpb25zID09PSB0cnVlIHx8IFR5cGUuaXNTdHJpbmcob3B0aW9ucykpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIEl0ZXJhdGUgdGhyb3VnaCB0aGUgaXRlbXMgaW4gdGhlIGVsZW1lbnQncyBxdWV1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCQuZWFjaCgkLnF1ZXVlKGVsZW1lbnQsIFR5cGUuaXNTdHJpbmcob3B0aW9ucykgPyBvcHRpb25zIDogXCJcIiksIGZ1bmN0aW9uKF8sIGl0ZW0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogVGhlIHF1ZXVlIGFycmF5IGNhbiBjb250YWluIGFuIFwiaW5wcm9ncmVzc1wiIHN0cmluZywgd2hpY2ggd2Ugc2tpcC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKFR5cGUuaXNGdW5jdGlvbihpdGVtKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIFBhc3MgdGhlIGl0ZW0ncyBjYWxsYmFjayBhIGZsYWcgaW5kaWNhdGluZyB0aGF0IHdlIHdhbnQgdG8gYWJvcnQgZnJvbSB0aGUgcXVldWUgY2FsbC5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgKFNwZWNpZmljYWxseSwgdGhlIHF1ZXVlIHdpbGwgcmVzb2x2ZSB0aGUgY2FsbCdzIGFzc29jaWF0ZWQgcHJvbWlzZSB0aGVuIGFib3J0LikgICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbShudWxsLCB0cnVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogQ2xlYXJpbmcgdGhlICQucXVldWUoKSBhcnJheSBpcyBhY2hpZXZlZCBieSByZXNldHRpbmcgaXQgdG8gW10uICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkLnF1ZXVlKGVsZW1lbnQsIFR5cGUuaXNTdHJpbmcob3B0aW9ucykgPyBvcHRpb25zIDogXCJcIiwgW10pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHByb3BlcnRpZXNNYXAgPT09IFwic3RvcFwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBTaW5jZSBcInJldmVyc2VcIiB1c2VzIGNhY2hlZCBzdGFydCB2YWx1ZXMgKHRoZSBwcmV2aW91cyBjYWxsJ3MgZW5kVmFsdWVzKSwgdGhlc2UgdmFsdWVzIG11c3QgYmVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCBjaGFuZ2VkIHRvIHJlZmxlY3QgdGhlIGZpbmFsIHZhbHVlIHRoYXQgdGhlIGVsZW1lbnRzIHdlcmUgYWN0dWFsbHkgdHdlZW5lZCB0by4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIE5vdGU6IElmIG9ubHkgcXVldWU6ZmFsc2UvcXVldWU6XCJjdXN0b21cIiBhbmltYXRpb25zIGFyZSBjdXJyZW50bHkgcnVubmluZyBvbiBhbiBlbGVtZW50LCBpdCB3b24ndCBoYXZlIGEgdHdlZW5zQ29udGFpbmVyXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgb2JqZWN0LiBBbHNvLCBxdWV1ZTpmYWxzZS9xdWV1ZTpcImN1c3RvbVwiIGFuaW1hdGlvbnMgY2FuJ3QgYmUgcmV2ZXJzZWQuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGF0YSA9IERhdGEoZWxlbWVudCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZGF0YSAmJiBkYXRhLnR3ZWVuc0NvbnRhaW5lciAmJiAocXVldWVOYW1lID09PSB0cnVlIHx8IHF1ZXVlTmFtZSA9PT0gXCJcIikpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JC5lYWNoKGRhdGEudHdlZW5zQ29udGFpbmVyLCBmdW5jdGlvbihtLCBhY3RpdmVUd2Vlbikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFjdGl2ZVR3ZWVuLmVuZFZhbHVlID0gYWN0aXZlVHdlZW4uY3VycmVudFZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYWxsc1RvU3RvcC5wdXNoKGkpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAocHJvcGVydGllc01hcCA9PT0gXCJmaW5pc2hcIiB8fCBwcm9wZXJ0aWVzTWFwID09PSBcImZpbmlzaEFsbFwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBUbyBnZXQgYWN0aXZlIHR3ZWVucyB0byBmaW5pc2ggaW1tZWRpYXRlbHksIHdlIGZvcmNlZnVsbHkgc2hvcnRlbiB0aGVpciBkdXJhdGlvbnMgdG8gMW1zIHNvIHRoYXRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCB0aGV5IGZpbmlzaCB1cG9uIHRoZSBuZXh0IHJBZiB0aWNrIHRoZW4gcHJvY2VlZCB3aXRoIG5vcm1hbCBjYWxsIGNvbXBsZXRpb24gbG9naWMuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhY3RpdmVDYWxsWzJdLmR1cmF0aW9uID0gMTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHQvKiBQcmVtYXR1cmVseSBjYWxsIGNvbXBsZXRlQ2FsbCgpIG9uIGVhY2ggbWF0Y2hlZCBhY3RpdmUgY2FsbC4gUGFzcyBhbiBhZGRpdGlvbmFsIGZsYWcgZm9yIFwic3RvcFwiIHRvIGluZGljYXRlXHJcblx0XHRcdFx0XHQgdGhhdCB0aGUgY29tcGxldGUgY2FsbGJhY2sgYW5kIGRpc3BsYXk6bm9uZSBzZXR0aW5nIHNob3VsZCBiZSBza2lwcGVkIHNpbmNlIHdlJ3JlIGNvbXBsZXRpbmcgcHJlbWF0dXJlbHkuICovXHJcblx0XHRcdFx0XHRpZiAocHJvcGVydGllc01hcCA9PT0gXCJzdG9wXCIpIHtcclxuXHRcdFx0XHRcdFx0JC5lYWNoKGNhbGxzVG9TdG9wLCBmdW5jdGlvbihpLCBqKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tcGxldGVDYWxsKGosIHRydWUpO1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChwcm9taXNlRGF0YS5wcm9taXNlKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogSW1tZWRpYXRlbHkgcmVzb2x2ZSB0aGUgcHJvbWlzZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdG9wIGNhbGwgc2luY2Ugc3RvcCBydW5zIHN5bmNocm9ub3VzbHkuICovXHJcblx0XHRcdFx0XHRcdFx0cHJvbWlzZURhdGEucmVzb2x2ZXIoZWxlbWVudHMpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogU2luY2Ugd2UncmUgc3RvcHBpbmcsIGFuZCBub3QgcHJvY2VlZGluZyB3aXRoIHF1ZXVlaW5nLCBleGl0IG91dCBvZiBWZWxvY2l0eS4gKi9cclxuXHRcdFx0XHRcdHJldHVybiBnZXRDaGFpbigpO1xyXG5cclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0LyogVHJlYXQgYSBub24tZW1wdHkgcGxhaW4gb2JqZWN0IGFzIGEgbGl0ZXJhbCBwcm9wZXJ0aWVzIG1hcC4gKi9cclxuXHRcdFx0XHRcdGlmICgkLmlzUGxhaW5PYmplY3QocHJvcGVydGllc01hcCkgJiYgIVR5cGUuaXNFbXB0eU9iamVjdChwcm9wZXJ0aWVzTWFwKSkge1xyXG5cdFx0XHRcdFx0XHRhY3Rpb24gPSBcInN0YXJ0XCI7XHJcblxyXG5cdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHQgUmVkaXJlY3RzXHJcblx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0LyogQ2hlY2sgaWYgYSBzdHJpbmcgbWF0Y2hlcyBhIHJlZ2lzdGVyZWQgcmVkaXJlY3QgKHNlZSBSZWRpcmVjdHMgYWJvdmUpLiAqL1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmIChUeXBlLmlzU3RyaW5nKHByb3BlcnRpZXNNYXApICYmIFZlbG9jaXR5LlJlZGlyZWN0c1twcm9wZXJ0aWVzTWFwXSkge1xyXG5cdFx0XHRcdFx0XHRvcHRzID0gJC5leHRlbmQoe30sIG9wdGlvbnMpO1xyXG5cclxuXHRcdFx0XHRcdFx0dmFyIGR1cmF0aW9uT3JpZ2luYWwgPSBvcHRzLmR1cmF0aW9uLFxyXG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXlPcmlnaW5hbCA9IG9wdHMuZGVsYXkgfHwgMDtcclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZSBiYWNrd2FyZHMgb3B0aW9uIHdhcyBwYXNzZWQgaW4sIHJldmVyc2UgdGhlIGVsZW1lbnQgc2V0IHNvIHRoYXQgZWxlbWVudHMgYW5pbWF0ZSBmcm9tIHRoZSBsYXN0IHRvIHRoZSBmaXJzdC4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKG9wdHMuYmFja3dhcmRzID09PSB0cnVlKSB7XHJcblx0XHRcdFx0XHRcdFx0ZWxlbWVudHMgPSAkLmV4dGVuZCh0cnVlLCBbXSwgZWxlbWVudHMpLnJldmVyc2UoKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyogSW5kaXZpZHVhbGx5IHRyaWdnZXIgdGhlIHJlZGlyZWN0IGZvciBlYWNoIGVsZW1lbnQgaW4gdGhlIHNldCB0byBwcmV2ZW50IHVzZXJzIGZyb20gaGF2aW5nIHRvIGhhbmRsZSBpdGVyYXRpb24gbG9naWMgaW4gdGhlaXIgcmVkaXJlY3QuICovXHJcblx0XHRcdFx0XHRcdCQuZWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudEluZGV4LCBlbGVtZW50KSB7XHJcblx0XHRcdFx0XHRcdFx0LyogSWYgdGhlIHN0YWdnZXIgb3B0aW9uIHdhcyBwYXNzZWQgaW4sIHN1Y2Nlc3NpdmVseSBkZWxheSBlYWNoIGVsZW1lbnQgYnkgdGhlIHN0YWdnZXIgdmFsdWUgKGluIG1zKS4gUmV0YWluIHRoZSBvcmlnaW5hbCBkZWxheSB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAocGFyc2VGbG9hdChvcHRzLnN0YWdnZXIpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRvcHRzLmRlbGF5ID0gZGVsYXlPcmlnaW5hbCArIChwYXJzZUZsb2F0KG9wdHMuc3RhZ2dlcikgKiBlbGVtZW50SW5kZXgpO1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoVHlwZS5pc0Z1bmN0aW9uKG9wdHMuc3RhZ2dlcikpIHtcclxuXHRcdFx0XHRcdFx0XHRcdG9wdHMuZGVsYXkgPSBkZWxheU9yaWdpbmFsICsgb3B0cy5zdGFnZ2VyLmNhbGwoZWxlbWVudCwgZWxlbWVudEluZGV4LCBlbGVtZW50c0xlbmd0aCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBJZiB0aGUgZHJhZyBvcHRpb24gd2FzIHBhc3NlZCBpbiwgc3VjY2Vzc2l2ZWx5IGluY3JlYXNlL2RlY3JlYXNlIChkZXBlbmRpbmcgb24gdGhlIHByZXNlbnNlIG9mIG9wdHMuYmFja3dhcmRzKVxyXG5cdFx0XHRcdFx0XHRcdCB0aGUgZHVyYXRpb24gb2YgZWFjaCBlbGVtZW50J3MgYW5pbWF0aW9uLCB1c2luZyBmbG9vcnMgdG8gcHJldmVudCBwcm9kdWNpbmcgdmVyeSBzaG9ydCBkdXJhdGlvbnMuICovXHJcblx0XHRcdFx0XHRcdFx0aWYgKG9wdHMuZHJhZykge1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogRGVmYXVsdCB0aGUgZHVyYXRpb24gb2YgVUkgcGFjayBlZmZlY3RzIChjYWxsb3V0cyBhbmQgdHJhbnNpdGlvbnMpIHRvIDEwMDBtcyBpbnN0ZWFkIG9mIHRoZSB1c3VhbCBkZWZhdWx0IGR1cmF0aW9uIG9mIDQwMG1zLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0b3B0cy5kdXJhdGlvbiA9IHBhcnNlRmxvYXQoZHVyYXRpb25PcmlnaW5hbCkgfHwgKC9eKGNhbGxvdXR8dHJhbnNpdGlvbikvLnRlc3QocHJvcGVydGllc01hcCkgPyAxMDAwIDogRFVSQVRJT05fREVGQVVMVCk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogRm9yIGVhY2ggZWxlbWVudCwgdGFrZSB0aGUgZ3JlYXRlciBkdXJhdGlvbiBvZjogQSkgYW5pbWF0aW9uIGNvbXBsZXRpb24gcGVyY2VudGFnZSByZWxhdGl2ZSB0byB0aGUgb3JpZ2luYWwgZHVyYXRpb24sXHJcblx0XHRcdFx0XHRcdFx0XHQgQikgNzUlIG9mIHRoZSBvcmlnaW5hbCBkdXJhdGlvbiwgb3IgQykgYSAyMDBtcyBmYWxsYmFjayAoaW4gY2FzZSBkdXJhdGlvbiBpcyBhbHJlYWR5IHNldCB0byBhIGxvdyB2YWx1ZSkuXHJcblx0XHRcdFx0XHRcdFx0XHQgVGhlIGVuZCByZXN1bHQgaXMgYSBiYXNlbGluZSBvZiA3NSUgb2YgdGhlIHJlZGlyZWN0J3MgZHVyYXRpb24gdGhhdCBpbmNyZWFzZXMvZGVjcmVhc2VzIGFzIHRoZSBlbmQgb2YgdGhlIGVsZW1lbnQgc2V0IGlzIGFwcHJvYWNoZWQuICovXHJcblx0XHRcdFx0XHRcdFx0XHRvcHRzLmR1cmF0aW9uID0gTWF0aC5tYXgob3B0cy5kdXJhdGlvbiAqIChvcHRzLmJhY2t3YXJkcyA/IDEgLSBlbGVtZW50SW5kZXggLyBlbGVtZW50c0xlbmd0aCA6IChlbGVtZW50SW5kZXggKyAxKSAvIGVsZW1lbnRzTGVuZ3RoKSwgb3B0cy5kdXJhdGlvbiAqIDAuNzUsIDIwMCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBQYXNzIGluIHRoZSBjYWxsJ3Mgb3B0cyBvYmplY3Qgc28gdGhhdCB0aGUgcmVkaXJlY3QgY2FuIG9wdGlvbmFsbHkgZXh0ZW5kIGl0LiBJdCBkZWZhdWx0cyB0byBhbiBlbXB0eSBvYmplY3QgaW5zdGVhZCBvZiBudWxsIHRvXHJcblx0XHRcdFx0XHRcdFx0IHJlZHVjZSB0aGUgb3B0cyBjaGVja2luZyBsb2dpYyByZXF1aXJlZCBpbnNpZGUgdGhlIHJlZGlyZWN0LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFZlbG9jaXR5LlJlZGlyZWN0c1twcm9wZXJ0aWVzTWFwXS5jYWxsKGVsZW1lbnQsIGVsZW1lbnQsIG9wdHMgfHwge30sIGVsZW1lbnRJbmRleCwgZWxlbWVudHNMZW5ndGgsIGVsZW1lbnRzLCBwcm9taXNlRGF0YS5wcm9taXNlID8gcHJvbWlzZURhdGEgOiB1bmRlZmluZWQpO1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIFNpbmNlIHRoZSBhbmltYXRpb24gbG9naWMgcmVzaWRlcyB3aXRoaW4gdGhlIHJlZGlyZWN0J3Mgb3duIGNvZGUsIGFib3J0IHRoZSByZW1haW5kZXIgb2YgdGhpcyBjYWxsLlxyXG5cdFx0XHRcdFx0XHQgKFRoZSBwZXJmb3JtYW5jZSBvdmVyaGVhZCB1cCB0byB0aGlzIHBvaW50IGlzIHZpcnR1YWxseSBub24tZXhpc3RhbnQuKSAqL1xyXG5cdFx0XHRcdFx0XHQvKiBOb3RlOiBUaGUgalF1ZXJ5IGNhbGwgY2hhaW4gaXMga2VwdCBpbnRhY3QgYnkgcmV0dXJuaW5nIHRoZSBjb21wbGV0ZSBlbGVtZW50IHNldC4gKi9cclxuXHRcdFx0XHRcdFx0cmV0dXJuIGdldENoYWluKCk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHR2YXIgYWJvcnRFcnJvciA9IFwiVmVsb2NpdHk6IEZpcnN0IGFyZ3VtZW50IChcIiArIHByb3BlcnRpZXNNYXAgKyBcIikgd2FzIG5vdCBhIHByb3BlcnR5IG1hcCwgYSBrbm93biBhY3Rpb24sIG9yIGEgcmVnaXN0ZXJlZCByZWRpcmVjdC4gQWJvcnRpbmcuXCI7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocHJvbWlzZURhdGEucHJvbWlzZSkge1xyXG5cdFx0XHRcdFx0XHRcdHByb21pc2VEYXRhLnJlamVjdGVyKG5ldyBFcnJvcihhYm9ydEVycm9yKSk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAod2luZG93LmNvbnNvbGUpIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhhYm9ydEVycm9yKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0cmV0dXJuIGdldENoYWluKCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgQ2FsbC1XaWRlIFZhcmlhYmxlc1xyXG5cdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHQvKiBBIGNvbnRhaW5lciBmb3IgQ1NTIHVuaXQgY29udmVyc2lvbiByYXRpb3MgKGUuZy4gJSwgcmVtLCBhbmQgZW0gPT0+IHB4KSB0aGF0IGlzIHVzZWQgdG8gY2FjaGUgcmF0aW9zIGFjcm9zcyBhbGwgZWxlbWVudHNcclxuXHRcdFx0IGJlaW5nIGFuaW1hdGVkIGluIGEgc2luZ2xlIFZlbG9jaXR5IGNhbGwuIENhbGN1bGF0aW5nIHVuaXQgcmF0aW9zIG5lY2Vzc2l0YXRlcyBET00gcXVlcnlpbmcgYW5kIHVwZGF0aW5nLCBhbmQgaXMgdGhlcmVmb3JlXHJcblx0XHRcdCBhdm9pZGVkICh2aWEgY2FjaGluZykgd2hlcmV2ZXIgcG9zc2libGUuIFRoaXMgY29udGFpbmVyIGlzIGNhbGwtd2lkZSBpbnN0ZWFkIG9mIHBhZ2Utd2lkZSB0byBhdm9pZCB0aGUgcmlzayBvZiB1c2luZyBzdGFsZVxyXG5cdFx0XHQgY29udmVyc2lvbiBtZXRyaWNzIGFjcm9zcyBWZWxvY2l0eSBhbmltYXRpb25zIHRoYXQgYXJlIG5vdCBpbW1lZGlhdGVseSBjb25zZWN1dGl2ZWx5IGNoYWluZWQuICovXHJcblx0XHRcdHZhciBjYWxsVW5pdENvbnZlcnNpb25EYXRhID0ge1xyXG5cdFx0XHRcdGxhc3RQYXJlbnQ6IG51bGwsXHJcblx0XHRcdFx0bGFzdFBvc2l0aW9uOiBudWxsLFxyXG5cdFx0XHRcdGxhc3RGb250U2l6ZTogbnVsbCxcclxuXHRcdFx0XHRsYXN0UGVyY2VudFRvUHhXaWR0aDogbnVsbCxcclxuXHRcdFx0XHRsYXN0UGVyY2VudFRvUHhIZWlnaHQ6IG51bGwsXHJcblx0XHRcdFx0bGFzdEVtVG9QeDogbnVsbCxcclxuXHRcdFx0XHRyZW1Ub1B4OiBudWxsLFxyXG5cdFx0XHRcdHZ3VG9QeDogbnVsbCxcclxuXHRcdFx0XHR2aFRvUHg6IG51bGxcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdC8qIEEgY29udGFpbmVyIGZvciBhbGwgdGhlIGVuc3VpbmcgdHdlZW4gZGF0YSBhbmQgbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2FsbC4gVGhpcyBjb250YWluZXIgZ2V0cyBwdXNoZWQgdG8gdGhlIHBhZ2Utd2lkZVxyXG5cdFx0XHQgVmVsb2NpdHkuU3RhdGUuY2FsbHMgYXJyYXkgdGhhdCBpcyBwcm9jZXNzZWQgZHVyaW5nIGFuaW1hdGlvbiB0aWNraW5nLiAqL1xyXG5cdFx0XHR2YXIgY2FsbCA9IFtdO1xyXG5cclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgRWxlbWVudCBQcm9jZXNzaW5nXHJcblx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHQvKiBFbGVtZW50IHByb2Nlc3NpbmcgY29uc2lzdHMgb2YgdGhyZWUgcGFydHMgLS0gZGF0YSBwcm9jZXNzaW5nIHRoYXQgY2Fubm90IGdvIHN0YWxlIGFuZCBkYXRhIHByb2Nlc3NpbmcgdGhhdCAqY2FuKiBnbyBzdGFsZSAoaS5lLiB0aGlyZC1wYXJ0eSBzdHlsZSBtb2RpZmljYXRpb25zKTpcclxuXHRcdFx0IDEpIFByZS1RdWV1ZWluZzogRWxlbWVudC13aWRlIHZhcmlhYmxlcywgaW5jbHVkaW5nIHRoZSBlbGVtZW50J3MgZGF0YSBzdG9yYWdlLCBhcmUgaW5zdGFudGlhdGVkLiBDYWxsIG9wdGlvbnMgYXJlIHByZXBhcmVkLiBJZiB0cmlnZ2VyZWQsIHRoZSBTdG9wIGFjdGlvbiBpcyBleGVjdXRlZC5cclxuXHRcdFx0IDIpIFF1ZXVlaW5nOiBUaGUgbG9naWMgdGhhdCBydW5zIG9uY2UgdGhpcyBjYWxsIGhhcyByZWFjaGVkIGl0cyBwb2ludCBvZiBleGVjdXRpb24gaW4gdGhlIGVsZW1lbnQncyAkLnF1ZXVlKCkgc3RhY2suIE1vc3QgbG9naWMgaXMgcGxhY2VkIGhlcmUgdG8gYXZvaWQgcmlza2luZyBpdCBiZWNvbWluZyBzdGFsZS5cclxuXHRcdFx0IDMpIFB1c2hpbmc6IENvbnNvbGlkYXRpb24gb2YgdGhlIHR3ZWVuIGRhdGEgZm9sbG93ZWQgYnkgaXRzIHB1c2ggb250byB0aGUgZ2xvYmFsIGluLXByb2dyZXNzIGNhbGxzIGNvbnRhaW5lci5cclxuXHRcdFx0IGBlbGVtZW50QXJyYXlJbmRleGAgYWxsb3dzIHBhc3NpbmcgaW5kZXggb2YgdGhlIGVsZW1lbnQgaW4gdGhlIG9yaWdpbmFsIGFycmF5IHRvIHZhbHVlIGZ1bmN0aW9ucy5cclxuXHRcdFx0IElmIGBlbGVtZW50c0luZGV4YCB3ZXJlIHVzZWQgaW5zdGVhZCB0aGUgaW5kZXggd291bGQgYmUgZGV0ZXJtaW5lZCBieSB0aGUgZWxlbWVudHMnIHBlci1lbGVtZW50IHF1ZXVlLlxyXG5cdFx0XHQgKi9cclxuXHRcdFx0ZnVuY3Rpb24gcHJvY2Vzc0VsZW1lbnQoZWxlbWVudCwgZWxlbWVudEFycmF5SW5kZXgpIHtcclxuXHJcblx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgUGFydCBJOiBQcmUtUXVldWVpbmdcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdCBFbGVtZW50LVdpZGUgVmFyaWFibGVzXHJcblx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0dmFyIC8qIFRoZSBydW50aW1lIG9wdHMgb2JqZWN0IGlzIHRoZSBleHRlbnNpb24gb2YgdGhlIGN1cnJlbnQgY2FsbCdzIG9wdGlvbnMgYW5kIFZlbG9jaXR5J3MgcGFnZS13aWRlIG9wdGlvbiBkZWZhdWx0cy4gKi9cclxuXHRcdFx0XHRcdFx0b3B0cyA9ICQuZXh0ZW5kKHt9LCBWZWxvY2l0eS5kZWZhdWx0cywgb3B0aW9ucyksXHJcblx0XHRcdFx0XHRcdC8qIEEgY29udGFpbmVyIGZvciB0aGUgcHJvY2Vzc2VkIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGVhY2ggcHJvcGVydHkgaW4gdGhlIHByb3BlcnR5TWFwLlxyXG5cdFx0XHRcdFx0XHQgKEVhY2ggcHJvcGVydHkgaW4gdGhlIG1hcCBwcm9kdWNlcyBpdHMgb3duIFwidHdlZW5cIi4pICovXHJcblx0XHRcdFx0XHRcdHR3ZWVuc0NvbnRhaW5lciA9IHt9LFxyXG5cdFx0XHRcdFx0XHRlbGVtZW50VW5pdENvbnZlcnNpb25EYXRhO1xyXG5cclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IEVsZW1lbnQgSW5pdFxyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdGlmIChEYXRhKGVsZW1lbnQpID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFZlbG9jaXR5LmluaXQoZWxlbWVudCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IE9wdGlvbjogRGVsYXlcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKiBTaW5jZSBxdWV1ZTpmYWxzZSBkb2Vzbid0IHJlc3BlY3QgdGhlIGl0ZW0ncyBleGlzdGluZyBxdWV1ZSwgd2UgYXZvaWQgaW5qZWN0aW5nIGl0cyBkZWxheSBoZXJlIChpdCdzIHNldCBsYXRlciBvbikuICovXHJcblx0XHRcdFx0LyogTm90ZTogVmVsb2NpdHkgcm9sbHMgaXRzIG93biBkZWxheSBmdW5jdGlvbiBzaW5jZSBqUXVlcnkgZG9lc24ndCBoYXZlIGEgdXRpbGl0eSBhbGlhcyBmb3IgJC5mbi5kZWxheSgpXHJcblx0XHRcdFx0IChhbmQgdGh1cyByZXF1aXJlcyBqUXVlcnkgZWxlbWVudCBjcmVhdGlvbiwgd2hpY2ggd2UgYXZvaWQgc2luY2UgaXRzIG92ZXJoZWFkIGluY2x1ZGVzIERPTSBxdWVyeWluZykuICovXHJcblx0XHRcdFx0aWYgKHBhcnNlRmxvYXQob3B0cy5kZWxheSkgJiYgb3B0cy5xdWV1ZSAhPT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdCQucXVldWUoZWxlbWVudCwgb3B0cy5xdWV1ZSwgZnVuY3Rpb24obmV4dCwgY2xlYXJRdWV1ZSkge1xyXG5cdFx0XHRcdFx0XHRpZiAoY2xlYXJRdWV1ZSA9PT0gdHJ1ZSkge1xyXG5cdFx0XHRcdFx0XHRcdC8qIERvIG5vdCBjb250aW51ZSB3aXRoIGFuaW1hdGlvbiBxdWV1ZWluZy4gKi9cclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyogVGhpcyBpcyBhIGZsYWcgdXNlZCB0byBpbmRpY2F0ZSB0byB0aGUgdXBjb21pbmcgY29tcGxldGVDYWxsKCkgZnVuY3Rpb24gdGhhdCB0aGlzIHF1ZXVlIGVudHJ5IHdhcyBpbml0aWF0ZWQgYnkgVmVsb2NpdHkuIFNlZSBjb21wbGV0ZUNhbGwoKSBmb3IgZnVydGhlciBkZXRhaWxzLiAqL1xyXG5cdFx0XHRcdFx0XHRWZWxvY2l0eS52ZWxvY2l0eVF1ZXVlRW50cnlGbGFnID0gdHJ1ZTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIFRoZSBlbnN1aW5nIHF1ZXVlIGl0ZW0gKHdoaWNoIGlzIGFzc2lnbmVkIHRvIHRoZSBcIm5leHRcIiBhcmd1bWVudCB0aGF0ICQucXVldWUoKSBhdXRvbWF0aWNhbGx5IHBhc3NlcyBpbikgd2lsbCBiZSB0cmlnZ2VyZWQgYWZ0ZXIgYSBzZXRUaW1lb3V0IGRlbGF5LlxyXG5cdFx0XHRcdFx0XHQgVGhlIHNldFRpbWVvdXQgaXMgc3RvcmVkIHNvIHRoYXQgaXQgY2FuIGJlIHN1YmplY3RlZCB0byBjbGVhclRpbWVvdXQoKSBpZiB0aGlzIGFuaW1hdGlvbiBpcyBwcmVtYXR1cmVseSBzdG9wcGVkIHZpYSBWZWxvY2l0eSdzIFwic3RvcFwiIGNvbW1hbmQsIGFuZFxyXG5cdFx0XHRcdFx0XHQgZGVsYXlCZWdpbi9kZWxheVRpbWUgaXMgdXNlZCB0byBlbnN1cmUgd2UgY2FuIFwicGF1c2VcIiBhbmQgXCJyZXN1bWVcIiBhIHR3ZWVuIHRoYXQgaXMgc3RpbGwgbWlkLWRlbGF5LiAqL1xyXG5cclxuXHRcdFx0XHRcdFx0LyogVGVtcG9yYXJpbHkgc3RvcmUgZGVsYXllZCBlbGVtZW50cyB0byBmYWNpbGl0ZSBhY2Nlc3MgZm9yIGdsb2JhbCBwYXVzZS9yZXN1bWUgKi9cclxuXHRcdFx0XHRcdFx0dmFyIGNhbGxJbmRleCA9IFZlbG9jaXR5LlN0YXRlLmRlbGF5ZWRFbGVtZW50cy5jb3VudCsrO1xyXG5cdFx0XHRcdFx0XHRWZWxvY2l0eS5TdGF0ZS5kZWxheWVkRWxlbWVudHNbY2FsbEluZGV4XSA9IGVsZW1lbnQ7XHJcblxyXG5cdFx0XHRcdFx0XHR2YXIgZGVsYXlDb21wbGV0ZSA9IChmdW5jdGlvbihpbmRleCkge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIENsZWFyIHRoZSB0ZW1wb3JhcnkgZWxlbWVudCAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0VmVsb2NpdHkuU3RhdGUuZGVsYXllZEVsZW1lbnRzW2luZGV4XSA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIEZpbmFsbHksIGlzc3VlIHRoZSBjYWxsICovXHJcblx0XHRcdFx0XHRcdFx0XHRuZXh0KCk7XHJcblx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0fSkoY2FsbEluZGV4KTtcclxuXHJcblxyXG5cdFx0XHRcdFx0XHREYXRhKGVsZW1lbnQpLmRlbGF5QmVnaW4gPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xyXG5cdFx0XHRcdFx0XHREYXRhKGVsZW1lbnQpLmRlbGF5ID0gcGFyc2VGbG9hdChvcHRzLmRlbGF5KTtcclxuXHRcdFx0XHRcdFx0RGF0YShlbGVtZW50KS5kZWxheVRpbWVyID0ge1xyXG5cdFx0XHRcdFx0XHRcdHNldFRpbWVvdXQ6IHNldFRpbWVvdXQobmV4dCwgcGFyc2VGbG9hdChvcHRzLmRlbGF5KSksXHJcblx0XHRcdFx0XHRcdFx0bmV4dDogZGVsYXlDb21wbGV0ZVxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IE9wdGlvbjogRHVyYXRpb25cclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKiBTdXBwb3J0IGZvciBqUXVlcnkncyBuYW1lZCBkdXJhdGlvbnMuICovXHJcblx0XHRcdFx0c3dpdGNoIChvcHRzLmR1cmF0aW9uLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG5cdFx0XHRcdFx0Y2FzZSBcImZhc3RcIjpcclxuXHRcdFx0XHRcdFx0b3B0cy5kdXJhdGlvbiA9IDIwMDtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdFx0Y2FzZSBcIm5vcm1hbFwiOlxyXG5cdFx0XHRcdFx0XHRvcHRzLmR1cmF0aW9uID0gRFVSQVRJT05fREVGQVVMVDtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdFx0Y2FzZSBcInNsb3dcIjpcclxuXHRcdFx0XHRcdFx0b3B0cy5kdXJhdGlvbiA9IDYwMDtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0LyogUmVtb3ZlIHRoZSBwb3RlbnRpYWwgXCJtc1wiIHN1ZmZpeCBhbmQgZGVmYXVsdCB0byAxIGlmIHRoZSB1c2VyIGlzIGF0dGVtcHRpbmcgdG8gc2V0IGEgZHVyYXRpb24gb2YgMCAoaW4gb3JkZXIgdG8gcHJvZHVjZSBhbiBpbW1lZGlhdGUgc3R5bGUgY2hhbmdlKS4gKi9cclxuXHRcdFx0XHRcdFx0b3B0cy5kdXJhdGlvbiA9IHBhcnNlRmxvYXQob3B0cy5kdXJhdGlvbikgfHwgMTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgR2xvYmFsIE9wdGlvbjogTW9ja1xyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdGlmIChWZWxvY2l0eS5tb2NrICE9PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0LyogSW4gbW9jayBtb2RlLCBhbGwgYW5pbWF0aW9ucyBhcmUgZm9yY2VkIHRvIDFtcyBzbyB0aGF0IHRoZXkgb2NjdXIgaW1tZWRpYXRlbHkgdXBvbiB0aGUgbmV4dCByQUYgdGljay5cclxuXHRcdFx0XHRcdCBBbHRlcm5hdGl2ZWx5LCBhIG11bHRpcGxpZXIgY2FuIGJlIHBhc3NlZCBpbiB0byB0aW1lIHJlbWFwIGFsbCBkZWxheXMgYW5kIGR1cmF0aW9ucy4gKi9cclxuXHRcdFx0XHRcdGlmIChWZWxvY2l0eS5tb2NrID09PSB0cnVlKSB7XHJcblx0XHRcdFx0XHRcdG9wdHMuZHVyYXRpb24gPSBvcHRzLmRlbGF5ID0gMTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdG9wdHMuZHVyYXRpb24gKj0gcGFyc2VGbG9hdChWZWxvY2l0eS5tb2NrKSB8fCAxO1xyXG5cdFx0XHRcdFx0XHRvcHRzLmRlbGF5ICo9IHBhcnNlRmxvYXQoVmVsb2NpdHkubW9jaykgfHwgMTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IE9wdGlvbjogRWFzaW5nXHJcblx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdG9wdHMuZWFzaW5nID0gZ2V0RWFzaW5nKG9wdHMuZWFzaW5nLCBvcHRzLmR1cmF0aW9uKTtcclxuXHJcblx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgT3B0aW9uOiBDYWxsYmFja3NcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0LyogQ2FsbGJhY2tzIG11c3QgZnVuY3Rpb25zLiBPdGhlcndpc2UsIGRlZmF1bHQgdG8gbnVsbC4gKi9cclxuXHRcdFx0XHRpZiAob3B0cy5iZWdpbiAmJiAhVHlwZS5pc0Z1bmN0aW9uKG9wdHMuYmVnaW4pKSB7XHJcblx0XHRcdFx0XHRvcHRzLmJlZ2luID0gbnVsbDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChvcHRzLnByb2dyZXNzICYmICFUeXBlLmlzRnVuY3Rpb24ob3B0cy5wcm9ncmVzcykpIHtcclxuXHRcdFx0XHRcdG9wdHMucHJvZ3Jlc3MgPSBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKG9wdHMuY29tcGxldGUgJiYgIVR5cGUuaXNGdW5jdGlvbihvcHRzLmNvbXBsZXRlKSkge1xyXG5cdFx0XHRcdFx0b3B0cy5jb21wbGV0ZSA9IG51bGw7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IE9wdGlvbjogRGlzcGxheSAmIFZpc2liaWxpdHlcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKiBSZWZlciB0byBWZWxvY2l0eSdzIGRvY3VtZW50YXRpb24gKFZlbG9jaXR5SlMub3JnLyNkaXNwbGF5QW5kVmlzaWJpbGl0eSkgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGRpc3BsYXkgYW5kIHZpc2liaWxpdHkgb3B0aW9ucycgYmVoYXZpb3IuICovXHJcblx0XHRcdFx0LyogTm90ZTogV2Ugc3RyaWN0bHkgY2hlY2sgZm9yIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIGZhbHNpbmVzcyBiZWNhdXNlIGRpc3BsYXkgYWNjZXB0cyBhbiBlbXB0eSBzdHJpbmcgdmFsdWUuICovXHJcblx0XHRcdFx0aWYgKG9wdHMuZGlzcGxheSAhPT0gdW5kZWZpbmVkICYmIG9wdHMuZGlzcGxheSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0b3B0cy5kaXNwbGF5ID0gb3B0cy5kaXNwbGF5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcclxuXHJcblx0XHRcdFx0XHQvKiBVc2VycyBjYW4gcGFzcyBpbiBhIHNwZWNpYWwgXCJhdXRvXCIgdmFsdWUgdG8gaW5zdHJ1Y3QgVmVsb2NpdHkgdG8gc2V0IHRoZSBlbGVtZW50IHRvIGl0cyBkZWZhdWx0IGRpc3BsYXkgdmFsdWUuICovXHJcblx0XHRcdFx0XHRpZiAob3B0cy5kaXNwbGF5ID09PSBcImF1dG9cIikge1xyXG5cdFx0XHRcdFx0XHRvcHRzLmRpc3BsYXkgPSBWZWxvY2l0eS5DU1MuVmFsdWVzLmdldERpc3BsYXlUeXBlKGVsZW1lbnQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKG9wdHMudmlzaWJpbGl0eSAhPT0gdW5kZWZpbmVkICYmIG9wdHMudmlzaWJpbGl0eSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0b3B0cy52aXNpYmlsaXR5ID0gb3B0cy52aXNpYmlsaXR5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IE9wdGlvbjogbW9iaWxlSEFcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0LyogV2hlbiBzZXQgdG8gdHJ1ZSwgYW5kIGlmIHRoaXMgaXMgYSBtb2JpbGUgZGV2aWNlLCBtb2JpbGVIQSBhdXRvbWF0aWNhbGx5IGVuYWJsZXMgaGFyZHdhcmUgYWNjZWxlcmF0aW9uICh2aWEgYSBudWxsIHRyYW5zZm9ybSBoYWNrKVxyXG5cdFx0XHRcdCBvbiBhbmltYXRpbmcgZWxlbWVudHMuIEhBIGlzIHJlbW92ZWQgZnJvbSB0aGUgZWxlbWVudCBhdCB0aGUgY29tcGxldGlvbiBvZiBpdHMgYW5pbWF0aW9uLiAqL1xyXG5cdFx0XHRcdC8qIE5vdGU6IEFuZHJvaWQgR2luZ2VyYnJlYWQgZG9lc24ndCBzdXBwb3J0IEhBLiBJZiBhIG51bGwgdHJhbnNmb3JtIGhhY2sgKG1vYmlsZUhBKSBpcyBpbiBmYWN0IHNldCwgaXQgd2lsbCBwcmV2ZW50IG90aGVyIHRyYW5mb3JtIHN1YnByb3BlcnRpZXMgZnJvbSB0YWtpbmcgZWZmZWN0LiAqL1xyXG5cdFx0XHRcdC8qIE5vdGU6IFlvdSBjYW4gcmVhZCBtb3JlIGFib3V0IHRoZSB1c2Ugb2YgbW9iaWxlSEEgaW4gVmVsb2NpdHkncyBkb2N1bWVudGF0aW9uOiBWZWxvY2l0eUpTLm9yZy8jbW9iaWxlSEEuICovXHJcblx0XHRcdFx0b3B0cy5tb2JpbGVIQSA9IChvcHRzLm1vYmlsZUhBICYmIFZlbG9jaXR5LlN0YXRlLmlzTW9iaWxlICYmICFWZWxvY2l0eS5TdGF0ZS5pc0dpbmdlcmJyZWFkKTtcclxuXHJcblx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IFBhcnQgSUk6IFF1ZXVlaW5nXHJcblx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKiBXaGVuIGEgc2V0IG9mIGVsZW1lbnRzIGlzIHRhcmdldGVkIGJ5IGEgVmVsb2NpdHkgY2FsbCwgdGhlIHNldCBpcyBicm9rZW4gdXAgYW5kIGVhY2ggZWxlbWVudCBoYXMgdGhlIGN1cnJlbnQgVmVsb2NpdHkgY2FsbCBpbmRpdmlkdWFsbHkgcXVldWVkIG9udG8gaXQuXHJcblx0XHRcdFx0IEluIHRoaXMgd2F5LCBlYWNoIGVsZW1lbnQncyBleGlzdGluZyBxdWV1ZSBpcyByZXNwZWN0ZWQ7IHNvbWUgZWxlbWVudHMgbWF5IGFscmVhZHkgYmUgYW5pbWF0aW5nIGFuZCBhY2NvcmRpbmdseSBzaG91bGQgbm90IGhhdmUgdGhpcyBjdXJyZW50IFZlbG9jaXR5IGNhbGwgdHJpZ2dlcmVkIGltbWVkaWF0ZWx5LiAqL1xyXG5cdFx0XHRcdC8qIEluIGVhY2ggcXVldWUsIHR3ZWVuIGRhdGEgaXMgcHJvY2Vzc2VkIGZvciBlYWNoIGFuaW1hdGluZyBwcm9wZXJ0eSB0aGVuIHB1c2hlZCBvbnRvIHRoZSBjYWxsLXdpZGUgY2FsbHMgYXJyYXkuIFdoZW4gdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgc2V0IGhhcyBoYWQgaXRzIHR3ZWVucyBwcm9jZXNzZWQsXHJcblx0XHRcdFx0IHRoZSBjYWxsIGFycmF5IGlzIHB1c2hlZCB0byBWZWxvY2l0eS5TdGF0ZS5jYWxscyBmb3IgbGl2ZSBwcm9jZXNzaW5nIGJ5IHRoZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgdGljay4gKi9cclxuXHRcdFx0XHRmdW5jdGlvbiBidWlsZFF1ZXVlKG5leHQpIHtcclxuXHRcdFx0XHRcdHZhciBkYXRhLCBsYXN0VHdlZW5zQ29udGFpbmVyO1xyXG5cclxuXHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHQgT3B0aW9uOiBCZWdpblxyXG5cdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0LyogVGhlIGJlZ2luIGNhbGxiYWNrIGlzIGZpcmVkIG9uY2UgcGVyIGNhbGwgLS0gbm90IG9uY2UgcGVyIGVsZW1lbmV0IC0tIGFuZCBpcyBwYXNzZWQgdGhlIGZ1bGwgcmF3IERPTSBlbGVtZW50IHNldCBhcyBib3RoIGl0cyBjb250ZXh0IGFuZCBpdHMgZmlyc3QgYXJndW1lbnQuICovXHJcblx0XHRcdFx0XHRpZiAob3B0cy5iZWdpbiAmJiBlbGVtZW50c0luZGV4ID09PSAwKSB7XHJcblx0XHRcdFx0XHRcdC8qIFdlIHRocm93IGNhbGxiYWNrcyBpbiBhIHNldFRpbWVvdXQgc28gdGhhdCB0aHJvd24gZXJyb3JzIGRvbid0IGhhbHQgdGhlIGV4ZWN1dGlvbiBvZiBWZWxvY2l0eSBpdHNlbGYuICovXHJcblx0XHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdFx0b3B0cy5iZWdpbi5jYWxsKGVsZW1lbnRzLCBlbGVtZW50cyk7XHJcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRocm93IGVycm9yO1xyXG5cdFx0XHRcdFx0XHRcdH0sIDEpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHQgVHdlZW4gRGF0YSBDb25zdHJ1Y3Rpb24gKGZvciBTY3JvbGwpXHJcblx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0LyogTm90ZTogSW4gb3JkZXIgdG8gYmUgc3ViamVjdGVkIHRvIGNoYWluaW5nIGFuZCBhbmltYXRpb24gb3B0aW9ucywgc2Nyb2xsJ3MgdHdlZW5pbmcgaXMgcm91dGVkIHRocm91Z2ggVmVsb2NpdHkgYXMgaWYgaXQgd2VyZSBhIHN0YW5kYXJkIENTUyBwcm9wZXJ0eSBhbmltYXRpb24uICovXHJcblx0XHRcdFx0XHRpZiAoYWN0aW9uID09PSBcInNjcm9sbFwiKSB7XHJcblx0XHRcdFx0XHRcdC8qIFRoZSBzY3JvbGwgYWN0aW9uIHVuaXF1ZWx5IHRha2VzIGFuIG9wdGlvbmFsIFwib2Zmc2V0XCIgb3B0aW9uIC0tIHNwZWNpZmllZCBpbiBwaXhlbHMgLS0gdGhhdCBvZmZzZXRzIHRoZSB0YXJnZXRlZCBzY3JvbGwgcG9zaXRpb24uICovXHJcblx0XHRcdFx0XHRcdHZhciBzY3JvbGxEaXJlY3Rpb24gPSAoL154JC9pLnRlc3Qob3B0cy5heGlzKSA/IFwiTGVmdFwiIDogXCJUb3BcIiksXHJcblx0XHRcdFx0XHRcdFx0XHRzY3JvbGxPZmZzZXQgPSBwYXJzZUZsb2F0KG9wdHMub2Zmc2V0KSB8fCAwLFxyXG5cdFx0XHRcdFx0XHRcdFx0c2Nyb2xsUG9zaXRpb25DdXJyZW50LFxyXG5cdFx0XHRcdFx0XHRcdFx0c2Nyb2xsUG9zaXRpb25DdXJyZW50QWx0ZXJuYXRlLFxyXG5cdFx0XHRcdFx0XHRcdFx0c2Nyb2xsUG9zaXRpb25FbmQ7XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBTY3JvbGwgYWxzbyB1bmlxdWVseSB0YWtlcyBhbiBvcHRpb25hbCBcImNvbnRhaW5lclwiIG9wdGlvbiwgd2hpY2ggaW5kaWNhdGVzIHRoZSBwYXJlbnQgZWxlbWVudCB0aGF0IHNob3VsZCBiZSBzY3JvbGxlZCAtLVxyXG5cdFx0XHRcdFx0XHQgYXMgb3Bwb3NlZCB0byB0aGUgYnJvd3NlciB3aW5kb3cgaXRzZWxmLiBUaGlzIGlzIHVzZWZ1bCBmb3Igc2Nyb2xsaW5nIHRvd2FyZCBhbiBlbGVtZW50IHRoYXQncyBpbnNpZGUgYW4gb3ZlcmZsb3dpbmcgcGFyZW50IGVsZW1lbnQuICovXHJcblx0XHRcdFx0XHRcdGlmIChvcHRzLmNvbnRhaW5lcikge1xyXG5cdFx0XHRcdFx0XHRcdC8qIEVuc3VyZSB0aGF0IGVpdGhlciBhIGpRdWVyeSBvYmplY3Qgb3IgYSByYXcgRE9NIGVsZW1lbnQgd2FzIHBhc3NlZCBpbi4gKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAoVHlwZS5pc1dyYXBwZWQob3B0cy5jb250YWluZXIpIHx8IFR5cGUuaXNOb2RlKG9wdHMuY29udGFpbmVyKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogRXh0cmFjdCB0aGUgcmF3IERPTSBlbGVtZW50IGZyb20gdGhlIGpRdWVyeSB3cmFwcGVyLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0b3B0cy5jb250YWluZXIgPSBvcHRzLmNvbnRhaW5lclswXSB8fCBvcHRzLmNvbnRhaW5lcjtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIE5vdGU6IFVubGlrZSBvdGhlciBwcm9wZXJ0aWVzIGluIFZlbG9jaXR5LCB0aGUgYnJvd3NlcidzIHNjcm9sbCBwb3NpdGlvbiBpcyBuZXZlciBjYWNoZWQgc2luY2UgaXQgc28gZnJlcXVlbnRseSBjaGFuZ2VzXHJcblx0XHRcdFx0XHRcdFx0XHQgKGR1ZSB0byB0aGUgdXNlcidzIG5hdHVyYWwgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcGFnZSkuICovXHJcblx0XHRcdFx0XHRcdFx0XHRzY3JvbGxQb3NpdGlvbkN1cnJlbnQgPSBvcHRzLmNvbnRhaW5lcltcInNjcm9sbFwiICsgc2Nyb2xsRGlyZWN0aW9uXTsgLyogR0VUICovXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogJC5wb3NpdGlvbigpIHZhbHVlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIGNvbnRhaW5lcidzIGN1cnJlbnRseSB2aWV3YWJsZSBhcmVhICh3aXRob3V0IHRha2luZyBpbnRvIGFjY291bnQgdGhlIGNvbnRhaW5lcidzIHRydWUgZGltZW5zaW9uc1xyXG5cdFx0XHRcdFx0XHRcdFx0IC0tIHNheSwgZm9yIGV4YW1wbGUsIGlmIHRoZSBjb250YWluZXIgd2FzIG5vdCBvdmVyZmxvd2luZykuIFRodXMsIHRoZSBzY3JvbGwgZW5kIHZhbHVlIGlzIHRoZSBzdW0gb2YgdGhlIGNoaWxkIGVsZW1lbnQncyBwb3NpdGlvbiAqYW5kKlxyXG5cdFx0XHRcdFx0XHRcdFx0IHRoZSBzY3JvbGwgY29udGFpbmVyJ3MgY3VycmVudCBzY3JvbGwgcG9zaXRpb24uICovXHJcblx0XHRcdFx0XHRcdFx0XHRzY3JvbGxQb3NpdGlvbkVuZCA9IChzY3JvbGxQb3NpdGlvbkN1cnJlbnQgKyAkKGVsZW1lbnQpLnBvc2l0aW9uKClbc2Nyb2xsRGlyZWN0aW9uLnRvTG93ZXJDYXNlKCldKSArIHNjcm9sbE9mZnNldDsgLyogR0VUICovXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBJZiBhIHZhbHVlIG90aGVyIHRoYW4gYSBqUXVlcnkgb2JqZWN0IG9yIGEgcmF3IERPTSBlbGVtZW50IHdhcyBwYXNzZWQgaW4sIGRlZmF1bHQgdG8gbnVsbCBzbyB0aGF0IHRoaXMgb3B0aW9uIGlzIGlnbm9yZWQuICovXHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdG9wdHMuY29udGFpbmVyID0gbnVsbDtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0LyogSWYgdGhlIHdpbmRvdyBpdHNlbGYgaXMgYmVpbmcgc2Nyb2xsZWQgLS0gbm90IGEgY29udGFpbmluZyBlbGVtZW50IC0tIHBlcmZvcm0gYSBsaXZlIHNjcm9sbCBwb3NpdGlvbiBsb29rdXAgdXNpbmdcclxuXHRcdFx0XHRcdFx0XHQgdGhlIGFwcHJvcHJpYXRlIGNhY2hlZCBwcm9wZXJ0eSBuYW1lcyAod2hpY2ggZGlmZmVyIGJhc2VkIG9uIGJyb3dzZXIgdHlwZSkuICovXHJcblx0XHRcdFx0XHRcdFx0c2Nyb2xsUG9zaXRpb25DdXJyZW50ID0gVmVsb2NpdHkuU3RhdGUuc2Nyb2xsQW5jaG9yW1ZlbG9jaXR5LlN0YXRlW1wic2Nyb2xsUHJvcGVydHlcIiArIHNjcm9sbERpcmVjdGlvbl1dOyAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0XHQvKiBXaGVuIHNjcm9sbGluZyB0aGUgYnJvd3NlciB3aW5kb3csIGNhY2hlIHRoZSBhbHRlcm5hdGUgYXhpcydzIGN1cnJlbnQgdmFsdWUgc2luY2Ugd2luZG93LnNjcm9sbFRvKCkgZG9lc24ndCBsZXQgdXMgY2hhbmdlIG9ubHkgb25lIHZhbHVlIGF0IGEgdGltZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRzY3JvbGxQb3NpdGlvbkN1cnJlbnRBbHRlcm5hdGUgPSBWZWxvY2l0eS5TdGF0ZS5zY3JvbGxBbmNob3JbVmVsb2NpdHkuU3RhdGVbXCJzY3JvbGxQcm9wZXJ0eVwiICsgKHNjcm9sbERpcmVjdGlvbiA9PT0gXCJMZWZ0XCIgPyBcIlRvcFwiIDogXCJMZWZ0XCIpXV07IC8qIEdFVCAqL1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBVbmxpa2UgJC5wb3NpdGlvbigpLCAkLm9mZnNldCgpIHZhbHVlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJyb3dzZXIgd2luZG93J3MgdHJ1ZSBkaW1lbnNpb25zIC0tIG5vdCBtZXJlbHkgaXRzIGN1cnJlbnRseSB2aWV3YWJsZSBhcmVhIC0tXHJcblx0XHRcdFx0XHRcdFx0IGFuZCB0aGVyZWZvcmUgZW5kIHZhbHVlcyBkbyBub3QgbmVlZCB0byBiZSBjb21wb3VuZGVkIG9udG8gY3VycmVudCB2YWx1ZXMuICovXHJcblx0XHRcdFx0XHRcdFx0c2Nyb2xsUG9zaXRpb25FbmQgPSAkKGVsZW1lbnQpLm9mZnNldCgpW3Njcm9sbERpcmVjdGlvbi50b0xvd2VyQ2FzZSgpXSArIHNjcm9sbE9mZnNldDsgLyogR0VUICovXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIFNpbmNlIHRoZXJlJ3Mgb25seSBvbmUgZm9ybWF0IHRoYXQgc2Nyb2xsJ3MgYXNzb2NpYXRlZCB0d2VlbnNDb250YWluZXIgY2FuIHRha2UsIHdlIGNyZWF0ZSBpdCBtYW51YWxseS4gKi9cclxuXHRcdFx0XHRcdFx0dHdlZW5zQ29udGFpbmVyID0ge1xyXG5cdFx0XHRcdFx0XHRcdHNjcm9sbDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0cm9vdFByb3BlcnR5VmFsdWU6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZTogc2Nyb2xsUG9zaXRpb25DdXJyZW50LFxyXG5cdFx0XHRcdFx0XHRcdFx0Y3VycmVudFZhbHVlOiBzY3JvbGxQb3NpdGlvbkN1cnJlbnQsXHJcblx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZTogc2Nyb2xsUG9zaXRpb25FbmQsXHJcblx0XHRcdFx0XHRcdFx0XHR1bml0VHlwZTogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRcdGVhc2luZzogb3B0cy5lYXNpbmcsXHJcblx0XHRcdFx0XHRcdFx0XHRzY3JvbGxEYXRhOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRhaW5lcjogb3B0cy5jb250YWluZXIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGRpcmVjdGlvbjogc2Nyb2xsRGlyZWN0aW9uLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRhbHRlcm5hdGVWYWx1ZTogc2Nyb2xsUG9zaXRpb25DdXJyZW50QWx0ZXJuYXRlXHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHRlbGVtZW50OiBlbGVtZW50XHJcblx0XHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoVmVsb2NpdHkuZGVidWcpIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcInR3ZWVuc0NvbnRhaW5lciAoc2Nyb2xsKTogXCIsIHR3ZWVuc0NvbnRhaW5lci5zY3JvbGwsIGVsZW1lbnQpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdCBUd2VlbiBEYXRhIENvbnN0cnVjdGlvbiAoZm9yIFJldmVyc2UpXHJcblx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHQvKiBSZXZlcnNlIGFjdHMgbGlrZSBhIFwic3RhcnRcIiBhY3Rpb24gaW4gdGhhdCBhIHByb3BlcnR5IG1hcCBpcyBhbmltYXRlZCB0b3dhcmQuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXNcclxuXHRcdFx0XHRcdFx0IHRoYXQgdGhlIHByb3BlcnR5IG1hcCB1c2VkIGZvciByZXZlcnNlIGlzIHRoZSBpbnZlcnNlIG9mIHRoZSBtYXAgdXNlZCBpbiB0aGUgcHJldmlvdXMgY2FsbC4gVGh1cywgd2UgbWFuaXB1bGF0ZVxyXG5cdFx0XHRcdFx0XHQgdGhlIHByZXZpb3VzIGNhbGwgdG8gY29uc3RydWN0IG91ciBuZXcgbWFwOiB1c2UgdGhlIHByZXZpb3VzIG1hcCdzIGVuZCB2YWx1ZXMgYXMgb3VyIG5ldyBtYXAncyBzdGFydCB2YWx1ZXMuIENvcHkgb3ZlciBhbGwgb3RoZXIgZGF0YS4gKi9cclxuXHRcdFx0XHRcdFx0LyogTm90ZTogUmV2ZXJzZSBjYW4gYmUgZGlyZWN0bHkgY2FsbGVkIHZpYSB0aGUgXCJyZXZlcnNlXCIgcGFyYW1ldGVyLCBvciBpdCBjYW4gYmUgaW5kaXJlY3RseSB0cmlnZ2VyZWQgdmlhIHRoZSBsb29wIG9wdGlvbi4gKExvb3BzIGFyZSBjb21wb3NlZCBvZiBtdWx0aXBsZSByZXZlcnNlcy4pICovXHJcblx0XHRcdFx0XHRcdC8qIE5vdGU6IFJldmVyc2UgY2FsbHMgZG8gbm90IG5lZWQgdG8gYmUgY29uc2VjdXRpdmVseSBjaGFpbmVkIG9udG8gYSBjdXJyZW50bHktYW5pbWF0aW5nIGVsZW1lbnQgaW4gb3JkZXIgdG8gb3BlcmF0ZSBvbiBjYWNoZWQgdmFsdWVzO1xyXG5cdFx0XHRcdFx0XHQgdGhlcmUgaXMgbm8gaGFybSB0byByZXZlcnNlIGJlaW5nIGNhbGxlZCBvbiBhIHBvdGVudGlhbGx5IHN0YWxlIGRhdGEgY2FjaGUgc2luY2UgcmV2ZXJzZSdzIGJlaGF2aW9yIGlzIHNpbXBseSBkZWZpbmVkXHJcblx0XHRcdFx0XHRcdCBhcyByZXZlcnRpbmcgdG8gdGhlIGVsZW1lbnQncyB2YWx1ZXMgYXMgdGhleSB3ZXJlIHByaW9yIHRvIHRoZSBwcmV2aW91cyAqVmVsb2NpdHkqIGNhbGwuICovXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJyZXZlcnNlXCIpIHtcclxuXHRcdFx0XHRcdFx0ZGF0YSA9IERhdGEoZWxlbWVudCk7XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBBYm9ydCBpZiB0aGVyZSBpcyBubyBwcmlvciBhbmltYXRpb24gZGF0YSB0byByZXZlcnNlIHRvLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoIWRhdGEpIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmICghZGF0YS50d2VlbnNDb250YWluZXIpIHtcclxuXHRcdFx0XHRcdFx0XHQvKiBEZXF1ZXVlIHRoZSBlbGVtZW50IHNvIHRoYXQgdGhpcyBxdWV1ZSBlbnRyeSByZWxlYXNlcyBpdHNlbGYgaW1tZWRpYXRlbHksIGFsbG93aW5nIHN1YnNlcXVlbnQgcXVldWUgZW50cmllcyB0byBydW4uICovXHJcblx0XHRcdFx0XHRcdFx0JC5kZXF1ZXVlKGVsZW1lbnQsIG9wdHMucXVldWUpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdCBPcHRpb25zIFBhcnNpbmdcclxuXHRcdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBJZiB0aGUgZWxlbWVudCB3YXMgaGlkZGVuIHZpYSB0aGUgZGlzcGxheSBvcHRpb24gaW4gdGhlIHByZXZpb3VzIGNhbGwsXHJcblx0XHRcdFx0XHRcdFx0IHJldmVydCBkaXNwbGF5IHRvIFwiYXV0b1wiIHByaW9yIHRvIHJldmVyc2FsIHNvIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBhZ2Fpbi4gKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAoZGF0YS5vcHRzLmRpc3BsYXkgPT09IFwibm9uZVwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRkYXRhLm9wdHMuZGlzcGxheSA9IFwiYXV0b1wiO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKGRhdGEub3B0cy52aXNpYmlsaXR5ID09PSBcImhpZGRlblwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRkYXRhLm9wdHMudmlzaWJpbGl0eSA9IFwidmlzaWJsZVwiO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0LyogSWYgdGhlIGxvb3Agb3B0aW9uIHdhcyBzZXQgaW4gdGhlIHByZXZpb3VzIGNhbGwsIGRpc2FibGUgaXQgc28gdGhhdCBcInJldmVyc2VcIiBjYWxscyBhcmVuJ3QgcmVjdXJzaXZlbHkgZ2VuZXJhdGVkLlxyXG5cdFx0XHRcdFx0XHRcdCBGdXJ0aGVyLCByZW1vdmUgdGhlIHByZXZpb3VzIGNhbGwncyBjYWxsYmFjayBvcHRpb25zOyB0eXBpY2FsbHksIHVzZXJzIGRvIG5vdCB3YW50IHRoZXNlIHRvIGJlIHJlZmlyZWQuICovXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS5vcHRzLmxvb3AgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0XHRkYXRhLm9wdHMuYmVnaW4gPSBudWxsO1xyXG5cdFx0XHRcdFx0XHRcdGRhdGEub3B0cy5jb21wbGV0ZSA9IG51bGw7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIFNpbmNlIHdlJ3JlIGV4dGVuZGluZyBhbiBvcHRzIG9iamVjdCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZXh0ZW5kZWQgd2l0aCB0aGUgZGVmYXVsdHMgb3B0aW9ucyBvYmplY3QsXHJcblx0XHRcdFx0XHRcdFx0IHdlIHJlbW92ZSBub24tZXhwbGljaXRseS1kZWZpbmVkIHByb3BlcnRpZXMgdGhhdCBhcmUgYXV0by1hc3NpZ25lZCB2YWx1ZXMuICovXHJcblx0XHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmVhc2luZykge1xyXG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIG9wdHMuZWFzaW5nO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmR1cmF0aW9uKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgb3B0cy5kdXJhdGlvbjtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIFRoZSBvcHRzIG9iamVjdCB1c2VkIGZvciByZXZlcnNhbCBpcyBhbiBleHRlbnNpb24gb2YgdGhlIG9wdGlvbnMgb2JqZWN0IG9wdGlvbmFsbHkgcGFzc2VkIGludG8gdGhpc1xyXG5cdFx0XHRcdFx0XHRcdCByZXZlcnNlIGNhbGwgcGx1cyB0aGUgb3B0aW9ucyB1c2VkIGluIHRoZSBwcmV2aW91cyBWZWxvY2l0eSBjYWxsLiAqL1xyXG5cdFx0XHRcdFx0XHRcdG9wdHMgPSAkLmV4dGVuZCh7fSwgZGF0YS5vcHRzLCBvcHRzKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0XHQgVHdlZW5zIENvbnRhaW5lciBSZWNvbnN0cnVjdGlvblxyXG5cdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBDcmVhdGUgYSBkZWVweSBjb3B5IChpbmRpY2F0ZWQgdmlhIHRoZSB0cnVlIGZsYWcpIG9mIHRoZSBwcmV2aW91cyBjYWxsJ3MgdHdlZW5zQ29udGFpbmVyLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGxhc3RUd2VlbnNDb250YWluZXIgPSAkLmV4dGVuZCh0cnVlLCB7fSwgZGF0YSA/IGRhdGEudHdlZW5zQ29udGFpbmVyIDogbnVsbCk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIE1hbmlwdWxhdGUgdGhlIHByZXZpb3VzIHR3ZWVuc0NvbnRhaW5lciBieSByZXBsYWNpbmcgaXRzIGVuZCB2YWx1ZXMgYW5kIGN1cnJlbnRWYWx1ZXMgd2l0aCBpdHMgc3RhcnQgdmFsdWVzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGxhc3RUd2VlbiBpbiBsYXN0VHdlZW5zQ29udGFpbmVyKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBJbiBhZGRpdGlvbiB0byB0d2VlbiBkYXRhLCB0d2VlbnNDb250YWluZXJzIGNvbnRhaW4gYW4gZWxlbWVudCBwcm9wZXJ0eSB0aGF0IHdlIGlnbm9yZSBoZXJlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGxhc3RUd2VlbnNDb250YWluZXIuaGFzT3duUHJvcGVydHkobGFzdFR3ZWVuKSAmJiBsYXN0VHdlZW4gIT09IFwiZWxlbWVudFwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBsYXN0U3RhcnRWYWx1ZSA9IGxhc3RUd2VlbnNDb250YWluZXJbbGFzdFR3ZWVuXS5zdGFydFZhbHVlO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0bGFzdFR3ZWVuc0NvbnRhaW5lcltsYXN0VHdlZW5dLnN0YXJ0VmFsdWUgPSBsYXN0VHdlZW5zQ29udGFpbmVyW2xhc3RUd2Vlbl0uY3VycmVudFZhbHVlID0gbGFzdFR3ZWVuc0NvbnRhaW5lcltsYXN0VHdlZW5dLmVuZFZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRsYXN0VHdlZW5zQ29udGFpbmVyW2xhc3RUd2Vlbl0uZW5kVmFsdWUgPSBsYXN0U3RhcnRWYWx1ZTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIEVhc2luZyBpcyB0aGUgb25seSBvcHRpb24gdGhhdCBlbWJlZHMgaW50byB0aGUgaW5kaXZpZHVhbCB0d2VlbiBkYXRhIChzaW5jZSBpdCBjYW4gYmUgZGVmaW5lZCBvbiBhIHBlci1wcm9wZXJ0eSBiYXNpcykuXHJcblx0XHRcdFx0XHRcdFx0XHRcdCBBY2NvcmRpbmdseSwgZXZlcnkgcHJvcGVydHkncyBlYXNpbmcgdmFsdWUgbXVzdCBiZSB1cGRhdGVkIHdoZW4gYW4gb3B0aW9ucyBvYmplY3QgaXMgcGFzc2VkIGluIHdpdGggYSByZXZlcnNlIGNhbGwuXHJcblx0XHRcdFx0XHRcdFx0XHRcdCBUaGUgc2lkZSBlZmZlY3Qgb2YgdGhpcyBleHRlbnNpYmlsaXR5IGlzIHRoYXQgYWxsIHBlci1wcm9wZXJ0eSBlYXNpbmcgdmFsdWVzIGFyZSBmb3JjZWZ1bGx5IHJlc2V0IHRvIHRoZSBuZXcgdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghVHlwZS5pc0VtcHR5T2JqZWN0KG9wdGlvbnMpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGFzdFR3ZWVuc0NvbnRhaW5lcltsYXN0VHdlZW5dLmVhc2luZyA9IG9wdHMuZWFzaW5nO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoVmVsb2NpdHkuZGVidWcpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcInJldmVyc2UgdHdlZW5zQ29udGFpbmVyIChcIiArIGxhc3RUd2VlbiArIFwiKTogXCIgKyBKU09OLnN0cmluZ2lmeShsYXN0VHdlZW5zQ29udGFpbmVyW2xhc3RUd2Vlbl0pLCBlbGVtZW50KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0dHdlZW5zQ29udGFpbmVyID0gbGFzdFR3ZWVuc0NvbnRhaW5lcjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdCBUd2VlbiBEYXRhIENvbnN0cnVjdGlvbiAoZm9yIFN0YXJ0KVxyXG5cdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwic3RhcnRcIikge1xyXG5cclxuXHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0IFZhbHVlIFRyYW5zZmVycmluZ1xyXG5cdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIHRoaXMgcXVldWUgZW50cnkgZm9sbG93cyBhIHByZXZpb3VzIFZlbG9jaXR5LWluaXRpYXRlZCBxdWV1ZSBlbnRyeSAqYW5kKiBpZiB0aGlzIGVudHJ5IHdhcyBjcmVhdGVkXHJcblx0XHRcdFx0XHRcdCB3aGlsZSB0aGUgZWxlbWVudCB3YXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgYW5pbWF0ZWQgYnkgVmVsb2NpdHksIHRoZW4gdGhpcyBjdXJyZW50IGNhbGwgaXMgc2FmZSB0byB1c2VcclxuXHRcdFx0XHRcdFx0IHRoZSBlbmQgdmFsdWVzIGZyb20gdGhlIHByaW9yIGNhbGwgYXMgaXRzIHN0YXJ0IHZhbHVlcy4gVmVsb2NpdHkgYXR0ZW1wdHMgdG8gcGVyZm9ybSB0aGlzIHZhbHVlIHRyYW5zZmVyXHJcblx0XHRcdFx0XHRcdCBwcm9jZXNzIHdoZW5ldmVyIHBvc3NpYmxlIGluIG9yZGVyIHRvIGF2b2lkIHJlcXVlcnlpbmcgdGhlIERPTS4gKi9cclxuXHRcdFx0XHRcdFx0LyogSWYgdmFsdWVzIGFyZW4ndCB0cmFuc2ZlcnJlZCBmcm9tIGEgcHJpb3IgY2FsbCBhbmQgc3RhcnQgdmFsdWVzIHdlcmUgbm90IGZvcmNlZmVkIGJ5IHRoZSB1c2VyIChtb3JlIG9uIHRoaXMgYmVsb3cpLFxyXG5cdFx0XHRcdFx0XHQgdGhlbiB0aGUgRE9NIGlzIHF1ZXJpZWQgZm9yIHRoZSBlbGVtZW50J3MgY3VycmVudCB2YWx1ZXMgYXMgYSBsYXN0IHJlc29ydC4gKi9cclxuXHRcdFx0XHRcdFx0LyogTm90ZTogQ29udmVyc2VseSwgYW5pbWF0aW9uIHJldmVyc2FsIChhbmQgbG9vcGluZykgKmFsd2F5cyogcGVyZm9ybSBpbnRlci1jYWxsIHZhbHVlIHRyYW5zZmVyczsgdGhleSBuZXZlciByZXF1ZXJ5IHRoZSBET00uICovXHJcblxyXG5cdFx0XHRcdFx0XHRkYXRhID0gRGF0YShlbGVtZW50KTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIFRoZSBwZXItZWxlbWVudCBpc0FuaW1hdGluZyBmbGFnIGlzIHVzZWQgdG8gaW5kaWNhdGUgd2hldGhlciBpdCdzIHNhZmUgKGkuZS4gdGhlIGRhdGEgaXNuJ3Qgc3RhbGUpXHJcblx0XHRcdFx0XHRcdCB0byB0cmFuc2ZlciBvdmVyIGVuZCB2YWx1ZXMgdG8gdXNlIGFzIHN0YXJ0IHZhbHVlcy4gSWYgaXQncyBzZXQgdG8gdHJ1ZSBhbmQgdGhlcmUgaXMgYSBwcmV2aW91c1xyXG5cdFx0XHRcdFx0XHQgVmVsb2NpdHkgY2FsbCB0byBwdWxsIHZhbHVlcyBmcm9tLCBkbyBzby4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKGRhdGEgJiYgZGF0YS50d2VlbnNDb250YWluZXIgJiYgZGF0YS5pc0FuaW1hdGluZyA9PT0gdHJ1ZSkge1xyXG5cdFx0XHRcdFx0XHRcdGxhc3RUd2VlbnNDb250YWluZXIgPSBkYXRhLnR3ZWVuc0NvbnRhaW5lcjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHQgVHdlZW4gRGF0YSBDYWxjdWxhdGlvblxyXG5cdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0LyogVGhpcyBmdW5jdGlvbiBwYXJzZXMgcHJvcGVydHkgZGF0YSBhbmQgZGVmYXVsdHMgZW5kVmFsdWUsIGVhc2luZywgYW5kIHN0YXJ0VmFsdWUgYXMgYXBwcm9wcmlhdGUuICovXHJcblx0XHRcdFx0XHRcdC8qIFByb3BlcnR5IG1hcCB2YWx1ZXMgY2FuIGVpdGhlciB0YWtlIHRoZSBmb3JtIG9mIDEpIGEgc2luZ2xlIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgZW5kIHZhbHVlLFxyXG5cdFx0XHRcdFx0XHQgb3IgMikgYW4gYXJyYXkgaW4gdGhlIGZvcm0gb2YgWyBlbmRWYWx1ZSwgWywgZWFzaW5nXSBbLCBzdGFydFZhbHVlXSBdLlxyXG5cdFx0XHRcdFx0XHQgVGhlIG9wdGlvbmFsIHRoaXJkIHBhcmFtZXRlciBpcyBhIGZvcmNlZmVkIHN0YXJ0VmFsdWUgdG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHF1ZXJ5aW5nIHRoZSBET00gZm9yXHJcblx0XHRcdFx0XHRcdCB0aGUgZWxlbWVudCdzIGN1cnJlbnQgdmFsdWUuIFJlYWQgVmVsb2NpdHkncyBkb2NtZW50YXRpb24gdG8gbGVhcm4gbW9yZSBhYm91dCBmb3JjZWZlZWRpbmc6IFZlbG9jaXR5SlMub3JnLyNmb3JjZWZlZWRpbmcgKi9cclxuXHRcdFx0XHRcdFx0dmFyIHBhcnNlUHJvcGVydHlWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlRGF0YSwgc2tpcFJlc29sdmluZ0Vhc2luZykge1xyXG5cdFx0XHRcdFx0XHRcdHZhciBlbmRWYWx1ZSwgZWFzaW5nLCBzdGFydFZhbHVlO1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBJZiB3ZSBoYXZlIGEgZnVuY3Rpb24gYXMgdGhlIG1haW4gYXJndW1lbnQgdGhlbiByZXNvbHZlIGl0IGZpcnN0LCBpbiBjYXNlIGl0IHJldHVybnMgYW4gYXJyYXkgdGhhdCBuZWVkcyB0byBiZSBzcGxpdCAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmIChUeXBlLmlzRnVuY3Rpb24odmFsdWVEYXRhKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWVEYXRhID0gdmFsdWVEYXRhLmNhbGwoZWxlbWVudCwgZWxlbWVudEFycmF5SW5kZXgsIGVsZW1lbnRzTGVuZ3RoKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIEhhbmRsZSB0aGUgYXJyYXkgZm9ybWF0LCB3aGljaCBjYW4gYmUgc3RydWN0dXJlZCBhcyBvbmUgb2YgdGhyZWUgcG90ZW50aWFsIG92ZXJsb2FkczpcclxuXHRcdFx0XHRcdFx0XHQgQSkgWyBlbmRWYWx1ZSwgZWFzaW5nLCBzdGFydFZhbHVlIF0sIEIpIFsgZW5kVmFsdWUsIGVhc2luZyBdLCBvciBDKSBbIGVuZFZhbHVlLCBzdGFydFZhbHVlIF0gKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAoVHlwZS5pc0FycmF5KHZhbHVlRGF0YSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIGVuZFZhbHVlIGlzIGFsd2F5cyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgYXJyYXkuIERvbid0IGJvdGhlciB2YWxpZGF0aW5nIGVuZFZhbHVlJ3MgdmFsdWUgbm93XHJcblx0XHRcdFx0XHRcdFx0XHQgc2luY2UgdGhlIGVuc3VpbmcgcHJvcGVydHkgY3ljbGluZyBsb2dpYyBkb2VzIHRoYXQuICovXHJcblx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZSA9IHZhbHVlRGF0YVswXTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBUd28taXRlbSBhcnJheSBmb3JtYXQ6IElmIHRoZSBzZWNvbmQgaXRlbSBpcyBhIG51bWJlciwgZnVuY3Rpb24sIG9yIGhleCBzdHJpbmcsIHRyZWF0IGl0IGFzIGFcclxuXHRcdFx0XHRcdFx0XHRcdCBzdGFydCB2YWx1ZSBzaW5jZSBlYXNpbmdzIGNhbiBvbmx5IGJlIG5vbi1oZXggc3RyaW5ncyBvciBhcnJheXMuICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoKCFUeXBlLmlzQXJyYXkodmFsdWVEYXRhWzFdKSAmJiAvXltcXGQtXS8udGVzdCh2YWx1ZURhdGFbMV0pKSB8fCBUeXBlLmlzRnVuY3Rpb24odmFsdWVEYXRhWzFdKSB8fCBDU1MuUmVnRXguaXNIZXgudGVzdCh2YWx1ZURhdGFbMV0pKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWUgPSB2YWx1ZURhdGFbMV07XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIFR3byBvciB0aHJlZS1pdGVtIGFycmF5OiBJZiB0aGUgc2Vjb25kIGl0ZW0gaXMgYSBub24taGV4IHN0cmluZyBlYXNpbmcgbmFtZSBvciBhbiBhcnJheSwgdHJlYXQgaXQgYXMgYW4gZWFzaW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICgoVHlwZS5pc1N0cmluZyh2YWx1ZURhdGFbMV0pICYmICFDU1MuUmVnRXguaXNIZXgudGVzdCh2YWx1ZURhdGFbMV0pICYmIFZlbG9jaXR5LkVhc2luZ3NbdmFsdWVEYXRhWzFdXSkgfHwgVHlwZS5pc0FycmF5KHZhbHVlRGF0YVsxXSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZWFzaW5nID0gc2tpcFJlc29sdmluZ0Vhc2luZyA/IHZhbHVlRGF0YVsxXSA6IGdldEVhc2luZyh2YWx1ZURhdGFbMV0sIG9wdHMuZHVyYXRpb24pO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogRG9uJ3QgYm90aGVyIHZhbGlkYXRpbmcgc3RhcnRWYWx1ZSdzIHZhbHVlIG5vdyBzaW5jZSB0aGUgZW5zdWluZyBwcm9wZXJ0eSBjeWNsaW5nIGxvZ2ljIGluaGVyZW50bHkgZG9lcyB0aGF0LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlID0gdmFsdWVEYXRhWzJdO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSA9IHZhbHVlRGF0YVsxXSB8fCB2YWx1ZURhdGFbMl07XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBIYW5kbGUgdGhlIHNpbmdsZS12YWx1ZSBmb3JtYXQuICovXHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlID0gdmFsdWVEYXRhO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0LyogRGVmYXVsdCB0byB0aGUgY2FsbCdzIGVhc2luZyBpZiBhIHBlci1wcm9wZXJ0eSBlYXNpbmcgdHlwZSB3YXMgbm90IGRlZmluZWQuICovXHJcblx0XHRcdFx0XHRcdFx0aWYgKCFza2lwUmVzb2x2aW5nRWFzaW5nKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRlYXNpbmcgPSBlYXNpbmcgfHwgb3B0cy5lYXNpbmc7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBJZiBmdW5jdGlvbnMgd2VyZSBwYXNzZWQgaW4gYXMgdmFsdWVzLCBwYXNzIHRoZSBmdW5jdGlvbiB0aGUgY3VycmVudCBlbGVtZW50IGFzIGl0cyBjb250ZXh0LFxyXG5cdFx0XHRcdFx0XHRcdCBwbHVzIHRoZSBlbGVtZW50J3MgaW5kZXggYW5kIHRoZSBlbGVtZW50IHNldCdzIHNpemUgYXMgYXJndW1lbnRzLiBUaGVuLCBhc3NpZ24gdGhlIHJldHVybmVkIHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmIChUeXBlLmlzRnVuY3Rpb24oZW5kVmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZSA9IGVuZFZhbHVlLmNhbGwoZWxlbWVudCwgZWxlbWVudEFycmF5SW5kZXgsIGVsZW1lbnRzTGVuZ3RoKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmIChUeXBlLmlzRnVuY3Rpb24oc3RhcnRWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWUgPSBzdGFydFZhbHVlLmNhbGwoZWxlbWVudCwgZWxlbWVudEFycmF5SW5kZXgsIGVsZW1lbnRzTGVuZ3RoKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIEFsbG93IHN0YXJ0VmFsdWUgdG8gYmUgbGVmdCBhcyB1bmRlZmluZWQgdG8gaW5kaWNhdGUgdG8gdGhlIGVuc3VpbmcgY29kZSB0aGF0IGl0cyB2YWx1ZSB3YXMgbm90IGZvcmNlZmVkLiAqL1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiBbZW5kVmFsdWUgfHwgMCwgZWFzaW5nLCBzdGFydFZhbHVlXTtcclxuXHRcdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRcdHZhciBmaXhQcm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24ocHJvcGVydHksIHZhbHVlRGF0YSkge1xyXG5cdFx0XHRcdFx0XHRcdC8qIEluIGNhc2UgdGhpcyBwcm9wZXJ0eSBpcyBhIGhvb2ssIHRoZXJlIGFyZSBjaXJjdW1zdGFuY2VzIHdoZXJlIHdlIHdpbGwgaW50ZW5kIHRvIHdvcmsgb24gdGhlIGhvb2sncyByb290IHByb3BlcnR5IGFuZCBub3QgdGhlIGhvb2tlZCBzdWJwcm9wZXJ0eS4gKi9cclxuXHRcdFx0XHRcdFx0XHR2YXIgcm9vdFByb3BlcnR5ID0gQ1NTLkhvb2tzLmdldFJvb3QocHJvcGVydHkpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyb290UHJvcGVydHlWYWx1ZSA9IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBQYXJzZSBvdXQgZW5kVmFsdWUsIGVhc2luZywgYW5kIHN0YXJ0VmFsdWUgZnJvbSB0aGUgcHJvcGVydHkncyBkYXRhLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZSA9IHZhbHVlRGF0YVswXSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZWFzaW5nID0gdmFsdWVEYXRhWzFdLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlID0gdmFsdWVEYXRhWzJdLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuO1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0XHQgU3RhcnQgVmFsdWUgU291cmNpbmdcclxuXHRcdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIE90aGVyIHRoYW4gZm9yIHRoZSBkdW1teSB0d2VlbiBwcm9wZXJ0eSwgcHJvcGVydGllcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyIChhbmQgZG8gbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBub3JtYWxpemF0aW9uKSB3aWxsXHJcblx0XHRcdFx0XHRcdFx0IGluaGVyZW50bHkgcHJvZHVjZSBubyBzdHlsZSBjaGFuZ2VzIHdoZW4gc2V0LCBzbyB0aGV5IGFyZSBza2lwcGVkIGluIG9yZGVyIHRvIGRlY3JlYXNlIGFuaW1hdGlvbiB0aWNrIG92ZXJoZWFkLlxyXG5cdFx0XHRcdFx0XHRcdCBQcm9wZXJ0eSBzdXBwb3J0IGlzIGRldGVybWluZWQgdmlhIHByZWZpeENoZWNrKCksIHdoaWNoIHJldHVybnMgYSBmYWxzZSBmbGFnIHdoZW4gbm8gc3VwcG9ydGVkIGlzIGRldGVjdGVkLiAqL1xyXG5cdFx0XHRcdFx0XHRcdC8qIE5vdGU6IFNpbmNlIFNWRyBlbGVtZW50cyBoYXZlIHNvbWUgb2YgdGhlaXIgcHJvcGVydGllcyBkaXJlY3RseSBhcHBsaWVkIGFzIEhUTUwgYXR0cmlidXRlcyxcclxuXHRcdFx0XHRcdFx0XHQgdGhlcmUgaXMgbm8gd2F5IHRvIGNoZWNrIGZvciB0aGVpciBleHBsaWNpdCBicm93c2VyIHN1cHBvcnQsIGFuZCBzbyB3ZSBza2lwIHNraXAgdGhpcyBjaGVjayBmb3IgdGhlbS4gKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAoKCFkYXRhIHx8ICFkYXRhLmlzU1ZHKSAmJiByb290UHJvcGVydHkgIT09IFwidHdlZW5cIiAmJiBDU1MuTmFtZXMucHJlZml4Q2hlY2socm9vdFByb3BlcnR5KVsxXSA9PT0gZmFsc2UgJiYgQ1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWRbcm9vdFByb3BlcnR5XSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoVmVsb2NpdHkuZGVidWcpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXCJTa2lwcGluZyBbXCIgKyByb290UHJvcGVydHkgKyBcIl0gZHVlIHRvIGEgbGFjayBvZiBicm93c2VyIHN1cHBvcnQuXCIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0LyogSWYgdGhlIGRpc3BsYXkgb3B0aW9uIGlzIGJlaW5nIHNldCB0byBhIG5vbi1cIm5vbmVcIiAoZS5nLiBcImJsb2NrXCIpIGFuZCBvcGFjaXR5IChmaWx0ZXIgb24gSUU8PTgpIGlzIGJlaW5nXHJcblx0XHRcdFx0XHRcdFx0IGFuaW1hdGVkIHRvIGFuIGVuZFZhbHVlIG9mIG5vbi16ZXJvLCB0aGUgdXNlcidzIGludGVudGlvbiBpcyB0byBmYWRlIGluIGZyb20gaW52aXNpYmxlLCB0aHVzIHdlIGZvcmNlZmVlZCBvcGFjaXR5XHJcblx0XHRcdFx0XHRcdFx0IGEgc3RhcnRWYWx1ZSBvZiAwIGlmIGl0cyBzdGFydFZhbHVlIGhhc24ndCBhbHJlYWR5IGJlZW4gc291cmNlZCBieSB2YWx1ZSB0cmFuc2ZlcnJpbmcgb3IgcHJpb3IgZm9yY2VmZWVkaW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmICgoKG9wdHMuZGlzcGxheSAhPT0gdW5kZWZpbmVkICYmIG9wdHMuZGlzcGxheSAhPT0gbnVsbCAmJiBvcHRzLmRpc3BsYXkgIT09IFwibm9uZVwiKSB8fCAob3B0cy52aXNpYmlsaXR5ICE9PSB1bmRlZmluZWQgJiYgb3B0cy52aXNpYmlsaXR5ICE9PSBcImhpZGRlblwiKSkgJiYgL29wYWNpdHl8ZmlsdGVyLy50ZXN0KHByb3BlcnR5KSAmJiAhc3RhcnRWYWx1ZSAmJiBlbmRWYWx1ZSAhPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSA9IDA7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBJZiB2YWx1ZXMgaGF2ZSBiZWVuIHRyYW5zZmVycmVkIGZyb20gdGhlIHByZXZpb3VzIFZlbG9jaXR5IGNhbGwsIGV4dHJhY3QgdGhlIGVuZFZhbHVlIGFuZCByb290UHJvcGVydHlWYWx1ZVxyXG5cdFx0XHRcdFx0XHRcdCBmb3IgYWxsIG9mIHRoZSBjdXJyZW50IGNhbGwncyBwcm9wZXJ0aWVzIHRoYXQgd2VyZSAqYWxzbyogYW5pbWF0ZWQgaW4gdGhlIHByZXZpb3VzIGNhbGwuICovXHJcblx0XHRcdFx0XHRcdFx0LyogTm90ZTogVmFsdWUgdHJhbnNmZXJyaW5nIGNhbiBvcHRpb25hbGx5IGJlIGRpc2FibGVkIGJ5IHRoZSB1c2VyIHZpYSB0aGUgX2NhY2hlVmFsdWVzIG9wdGlvbi4gKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAob3B0cy5fY2FjaGVWYWx1ZXMgJiYgbGFzdFR3ZWVuc0NvbnRhaW5lciAmJiBsYXN0VHdlZW5zQ29udGFpbmVyW3Byb3BlcnR5XSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHN0YXJ0VmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlID0gbGFzdFR3ZWVuc0NvbnRhaW5lcltwcm9wZXJ0eV0uZW5kVmFsdWUgKyBsYXN0VHdlZW5zQ29udGFpbmVyW3Byb3BlcnR5XS51bml0VHlwZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBUaGUgcHJldmlvdXMgY2FsbCdzIHJvb3RQcm9wZXJ0eVZhbHVlIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSBlbGVtZW50J3MgZGF0YSBjYWNoZSBzaW5jZSB0aGF0J3MgdGhlXHJcblx0XHRcdFx0XHRcdFx0XHQgaW5zdGFuY2Ugb2Ygcm9vdFByb3BlcnR5VmFsdWUgdGhhdCBnZXRzIGZyZXNobHkgdXBkYXRlZCBieSB0aGUgdHdlZW5pbmcgcHJvY2Vzcywgd2hlcmVhcyB0aGUgcm9vdFByb3BlcnR5VmFsdWVcclxuXHRcdFx0XHRcdFx0XHRcdCBhdHRhY2hlZCB0byB0aGUgaW5jb21pbmcgbGFzdFR3ZWVuc0NvbnRhaW5lciBpcyBlcXVhbCB0byB0aGUgcm9vdCBwcm9wZXJ0eSdzIHZhbHVlIHByaW9yIHRvIGFueSB0d2VlbmluZy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlID0gZGF0YS5yb290UHJvcGVydHlWYWx1ZUNhY2hlW3Jvb3RQcm9wZXJ0eV07XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBJZiB2YWx1ZXMgd2VyZSBub3QgdHJhbnNmZXJyZWQgZnJvbSBhIHByZXZpb3VzIFZlbG9jaXR5IGNhbGwsIHF1ZXJ5IHRoZSBET00gYXMgbmVlZGVkLiAqL1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBIYW5kbGUgaG9va2VkIHByb3BlcnRpZXMuICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoQ1NTLkhvb2tzLnJlZ2lzdGVyZWRbcHJvcGVydHldKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChzdGFydFZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyb290UHJvcGVydHlWYWx1ZSA9IENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIHJvb3RQcm9wZXJ0eSk7IC8qIEdFVCAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIE5vdGU6IFRoZSBmb2xsb3dpbmcgZ2V0UHJvcGVydHlWYWx1ZSgpIGNhbGwgZG9lcyBub3QgYWN0dWFsbHkgdHJpZ2dlciBhIERPTSBxdWVyeTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgZ2V0UHJvcGVydHlWYWx1ZSgpIHdpbGwgZXh0cmFjdCB0aGUgaG9vayBmcm9tIHJvb3RQcm9wZXJ0eVZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWUgPSBDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBwcm9wZXJ0eSwgcm9vdFByb3BlcnR5VmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIElmIHN0YXJ0VmFsdWUgaXMgYWxyZWFkeSBkZWZpbmVkIHZpYSBmb3JjZWZlZWRpbmcsIGRvIG5vdCBxdWVyeSB0aGUgRE9NIGZvciB0aGUgcm9vdCBwcm9wZXJ0eSdzIHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCBqdXN0IGdyYWIgcm9vdFByb3BlcnR5J3MgemVyby12YWx1ZSB0ZW1wbGF0ZSBmcm9tIENTUy5Ib29rcy4gVGhpcyBvdmVyd3JpdGVzIHRoZSBlbGVtZW50J3MgYWN0dWFsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0IHJvb3QgcHJvcGVydHkgdmFsdWUgKGlmIG9uZSBpcyBzZXQpLCBidXQgdGhpcyBpcyBhY2NlcHRhYmxlIHNpbmNlIHRoZSBwcmltYXJ5IHJlYXNvbiB1c2VycyBmb3JjZWZlZWQgaXNcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgdG8gYXZvaWQgRE9NIHF1ZXJpZXMsIGFuZCB0aHVzIHdlIGxpa2V3aXNlIGF2b2lkIHF1ZXJ5aW5nIHRoZSBET00gZm9yIHRoZSByb290IHByb3BlcnR5J3MgdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogR3JhYiB0aGlzIGhvb2sncyB6ZXJvLXZhbHVlIHRlbXBsYXRlLCBlLmcuIFwiMHB4IDBweCAwcHggYmxhY2tcIi4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyb290UHJvcGVydHlWYWx1ZSA9IENTUy5Ib29rcy50ZW1wbGF0ZXNbcm9vdFByb3BlcnR5XVsxXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBIYW5kbGUgbm9uLWhvb2tlZCBwcm9wZXJ0aWVzIHRoYXQgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gZGVmaW5lZCB2aWEgZm9yY2VmZWVkaW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChzdGFydFZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSA9IENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIHByb3BlcnR5KTsgLyogR0VUICovXHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0XHQgVmFsdWUgRGF0YSBFeHRyYWN0aW9uXHJcblx0XHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0XHR2YXIgc2VwYXJhdGVkVmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlVW5pdFR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWVVbml0VHlwZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0b3BlcmF0b3IgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0XHRcdFx0LyogU2VwYXJhdGVzIGEgcHJvcGVydHkgdmFsdWUgaW50byBpdHMgbnVtZXJpYyB2YWx1ZSBhbmQgaXRzIHVuaXQgdHlwZS4gKi9cclxuXHRcdFx0XHRcdFx0XHR2YXIgc2VwYXJhdGVWYWx1ZSA9IGZ1bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHVuaXRUeXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG51bWVyaWNWYWx1ZTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRudW1lcmljVmFsdWUgPSAodmFsdWUgfHwgXCIwXCIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnRvU3RyaW5nKClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQudG9Mb3dlckNhc2UoKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIE1hdGNoIHRoZSB1bml0IHR5cGUgYXQgdGhlIGVuZCBvZiB0aGUgdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoL1slQS16XSskLywgZnVuY3Rpb24obWF0Y2gpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIEdyYWIgdGhlIHVuaXQgdHlwZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuaXRUeXBlID0gbWF0Y2g7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogU3RyaXAgdGhlIHVuaXQgdHlwZSBvZmYgb2YgdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gXCJcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBJZiBubyB1bml0IHR5cGUgd2FzIHN1cHBsaWVkLCBhc3NpZ24gb25lIHRoYXQgaXMgYXBwcm9wcmlhdGUgZm9yIHRoaXMgcHJvcGVydHkgKGUuZy4gXCJkZWdcIiBmb3Igcm90YXRlWiBvciBcInB4XCIgZm9yIHdpZHRoKS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGlmICghdW5pdFR5cGUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dW5pdFR5cGUgPSBDU1MuVmFsdWVzLmdldFVuaXRUeXBlKHByb3BlcnR5KTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gW251bWVyaWNWYWx1ZSwgdW5pdFR5cGVdO1xyXG5cdFx0XHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmIChzdGFydFZhbHVlICE9PSBlbmRWYWx1ZSAmJiBUeXBlLmlzU3RyaW5nKHN0YXJ0VmFsdWUpICYmIFR5cGUuaXNTdHJpbmcoZW5kVmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciBpU3RhcnQgPSAwLCAvLyBpbmRleCBpbiBzdGFydFZhbHVlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aUVuZCA9IDAsIC8vIGluZGV4IGluIGVuZFZhbHVlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0YVN0YXJ0ID0gW10sIC8vIGFycmF5IG9mIHN0YXJ0VmFsdWUgbnVtYmVyc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFFbmQgPSBbXSwgLy8gYXJyYXkgb2YgZW5kVmFsdWUgbnVtYmVyc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGluQ2FsYyA9IDAsIC8vIEtlZXAgdHJhY2sgb2YgYmVpbmcgaW5zaWRlIGEgXCJjYWxjKClcIiBzbyB3ZSBkb24ndCBkdXBsaWNhdGUgaXRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpblJHQiA9IDAsIC8vIEtlZXAgdHJhY2sgb2YgYmVpbmcgaW5zaWRlIGFuIFJHQiBhcyB3ZSBjYW4ndCB1c2UgZnJhY3Rpb25hbCB2YWx1ZXNcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpblJHQkEgPSAwOyAvLyBLZWVwIHRyYWNrIG9mIGJlaW5nIGluc2lkZSBhbiBSR0JBIGFzIHdlIG11c3QgcGFzcyBmcmFjdGlvbmFsIGZvciB0aGUgYWxwaGEgY2hhbm5lbFxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWUgPSBDU1MuSG9va3MuZml4Q29sb3JzKHN0YXJ0VmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWUgPSBDU1MuSG9va3MuZml4Q29sb3JzKGVuZFZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdHdoaWxlIChpU3RhcnQgPCBzdGFydFZhbHVlLmxlbmd0aCAmJiBpRW5kIDwgZW5kVmFsdWUubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBjU3RhcnQgPSBzdGFydFZhbHVlW2lTdGFydF0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjRW5kID0gZW5kVmFsdWVbaUVuZF07XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoL1tcXGRcXC4tXS8udGVzdChjU3RhcnQpICYmIC9bXFxkXFwuLV0vLnRlc3QoY0VuZCkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdFN0YXJ0ID0gY1N0YXJ0LCAvLyB0ZW1wb3JhcnkgY2hhcmFjdGVyIGJ1ZmZlclxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0RW5kID0gY0VuZCwgLy8gdGVtcG9yYXJ5IGNoYXJhY3RlciBidWZmZXJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZG90U3RhcnQgPSBcIi5cIiwgLy8gTWFrZSBzdXJlIHdlIGNhbiBvbmx5IGV2ZXIgbWF0Y2ggYSBzaW5nbGUgZG90IGluIGEgZGVjaW1hbFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkb3RFbmQgPSBcIi5cIjsgLy8gTWFrZSBzdXJlIHdlIGNhbiBvbmx5IGV2ZXIgbWF0Y2ggYSBzaW5nbGUgZG90IGluIGEgZGVjaW1hbFxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoKytpU3RhcnQgPCBzdGFydFZhbHVlLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y1N0YXJ0ID0gc3RhcnRWYWx1ZVtpU3RhcnRdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNTdGFydCA9PT0gZG90U3RhcnQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZG90U3RhcnQgPSBcIi4uXCI7IC8vIENhbiBuZXZlciBtYXRjaCB0d28gY2hhcmFjdGVyc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICghL1xcZC8udGVzdChjU3RhcnQpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dFN0YXJ0ICs9IGNTdGFydDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCsraUVuZCA8IGVuZFZhbHVlLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y0VuZCA9IGVuZFZhbHVlW2lFbmRdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNFbmQgPT09IGRvdEVuZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkb3RFbmQgPSBcIi4uXCI7IC8vIENhbiBuZXZlciBtYXRjaCB0d28gY2hhcmFjdGVyc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICghL1xcZC8udGVzdChjRW5kKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRFbmQgKz0gY0VuZDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHVTdGFydCA9IENTUy5Ib29rcy5nZXRVbml0KHN0YXJ0VmFsdWUsIGlTdGFydCksIC8vIHRlbXBvcmFyeSB1bml0IHR5cGVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dUVuZCA9IENTUy5Ib29rcy5nZXRVbml0KGVuZFZhbHVlLCBpRW5kKTsgLy8gdGVtcG9yYXJ5IHVuaXQgdHlwZVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpU3RhcnQgKz0gdVN0YXJ0Lmxlbmd0aDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpRW5kICs9IHVFbmQubGVuZ3RoO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh1U3RhcnQgPT09IHVFbmQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFNhbWUgdW5pdHNcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh0U3RhcnQgPT09IHRFbmQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU2FtZSBudW1iZXJzLCBzbyBqdXN0IGNvcHkgb3ZlclxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuICs9IHRTdGFydCArIHVTdGFydDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERpZmZlcmVudCBudW1iZXJzLCBzbyBzdG9yZSB0aGVtXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhdHRlcm4gKz0gXCJ7XCIgKyBhU3RhcnQubGVuZ3RoICsgKGluUkdCID8gXCIhXCIgOiBcIlwiKSArIFwifVwiICsgdVN0YXJ0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhU3RhcnQucHVzaChwYXJzZUZsb2F0KHRTdGFydCkpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhRW5kLnB1c2gocGFyc2VGbG9hdCh0RW5kKSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERpZmZlcmVudCB1bml0cywgc28gcHV0IGludG8gYSBcImNhbGMoZnJvbSArIHRvKVwiIGFuZCBhbmltYXRlIGVhY2ggc2lkZSB0by9mcm9tIHplcm9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBuU3RhcnQgPSBwYXJzZUZsb2F0KHRTdGFydCksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bkVuZCA9IHBhcnNlRmxvYXQodEVuZCk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGF0dGVybiArPSAoaW5DYWxjIDwgNSA/IFwiY2FsY1wiIDogXCJcIikgKyBcIihcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCsgKG5TdGFydCA/IFwie1wiICsgYVN0YXJ0Lmxlbmd0aCArIChpblJHQiA/IFwiIVwiIDogXCJcIikgKyBcIn1cIiA6IFwiMFwiKSArIHVTdGFydFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCsgXCIgKyBcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCsgKG5FbmQgPyBcIntcIiArIChhU3RhcnQubGVuZ3RoICsgKG5TdGFydCA/IDEgOiAwKSkgKyAoaW5SR0IgPyBcIiFcIiA6IFwiXCIpICsgXCJ9XCIgOiBcIjBcIikgKyB1RW5kXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KyBcIilcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChuU3RhcnQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YVN0YXJ0LnB1c2goblN0YXJ0KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUVuZC5wdXNoKDApO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG5FbmQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YVN0YXJ0LnB1c2goMCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFFbmQucHVzaChuRW5kKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoY1N0YXJ0ID09PSBjRW5kKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGF0dGVybiArPSBjU3RhcnQ7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aVN0YXJ0Kys7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aUVuZCsrO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEtlZXAgdHJhY2sgb2YgYmVpbmcgaW5zaWRlIGEgY2FsYygpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGluQ2FsYyA9PT0gMCAmJiBjU3RhcnQgPT09IFwiY1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHx8IGluQ2FsYyA9PT0gMSAmJiBjU3RhcnQgPT09IFwiYVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHx8IGluQ2FsYyA9PT0gMiAmJiBjU3RhcnQgPT09IFwibFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHx8IGluQ2FsYyA9PT0gMyAmJiBjU3RhcnQgPT09IFwiY1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHx8IGluQ2FsYyA+PSA0ICYmIGNTdGFydCA9PT0gXCIoXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbkNhbGMrKztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKChpbkNhbGMgJiYgaW5DYWxjIDwgNSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fHwgaW5DYWxjID49IDQgJiYgY1N0YXJ0ID09PSBcIilcIiAmJiAtLWluQ2FsYyA8IDUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGluQ2FsYyA9IDA7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEtlZXAgdHJhY2sgb2YgYmVpbmcgaW5zaWRlIGFuIHJnYigpIC8gcmdiYSgpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGluUkdCID09PSAwICYmIGNTdGFydCA9PT0gXCJyXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fHwgaW5SR0IgPT09IDEgJiYgY1N0YXJ0ID09PSBcImdcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR8fCBpblJHQiA9PT0gMiAmJiBjU3RhcnQgPT09IFwiYlwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHx8IGluUkdCID09PSAzICYmIGNTdGFydCA9PT0gXCJhXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fHwgaW5SR0IgPj0gMyAmJiBjU3RhcnQgPT09IFwiKFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGluUkdCID09PSAzICYmIGNTdGFydCA9PT0gXCJhXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5SR0JBID0gMTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGluUkdCKys7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChpblJHQkEgJiYgY1N0YXJ0ID09PSBcIixcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCsraW5SR0JBID4gMykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpblJHQiA9IGluUkdCQSA9IDA7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICgoaW5SR0JBICYmIGluUkdCIDwgKGluUkdCQSA/IDUgOiA0KSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fHwgaW5SR0IgPj0gKGluUkdCQSA/IDQgOiAzKSAmJiBjU3RhcnQgPT09IFwiKVwiICYmIC0taW5SR0IgPCAoaW5SR0JBID8gNSA6IDQpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpblJHQiA9IGluUkdCQSA9IDA7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGluQ2FsYyA9IDA7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogY2hhbmdpbmcgdW5pdHMsIGZpeGluZyBjb2xvdXJzXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChpU3RhcnQgIT09IHN0YXJ0VmFsdWUubGVuZ3RoIHx8IGlFbmQgIT09IGVuZFZhbHVlLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoVmVsb2NpdHkuZGVidWcpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKFwiVHJ5aW5nIHRvIHBhdHRlcm4gbWF0Y2ggbWlzLW1hdGNoZWQgc3RyaW5ncyBbXFxcIlwiICsgZW5kVmFsdWUgKyBcIlxcXCIsIFxcXCJcIiArIHN0YXJ0VmFsdWUgKyBcIlxcXCJdXCIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdHBhdHRlcm4gPSB1bmRlZmluZWQ7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAocGF0dGVybikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYVN0YXJ0Lmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChWZWxvY2l0eS5kZWJ1Zykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXCJQYXR0ZXJuIGZvdW5kIFxcXCJcIiArIHBhdHRlcm4gKyBcIlxcXCIgLT4gXCIsIGFTdGFydCwgYUVuZCwgXCJbXCIgKyBzdGFydFZhbHVlICsgXCIsXCIgKyBlbmRWYWx1ZSArIFwiXVwiKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSA9IGFTdGFydDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZSA9IGFFbmQ7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWVVbml0VHlwZSA9IHN0YXJ0VmFsdWVVbml0VHlwZSA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGF0dGVybiA9IHVuZGVmaW5lZDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKCFwYXR0ZXJuKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBTZXBhcmF0ZSBzdGFydFZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0c2VwYXJhdGVkVmFsdWUgPSBzZXBhcmF0ZVZhbHVlKHByb3BlcnR5LCBzdGFydFZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWUgPSBzZXBhcmF0ZWRWYWx1ZVswXTtcclxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWVVbml0VHlwZSA9IHNlcGFyYXRlZFZhbHVlWzFdO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIFNlcGFyYXRlIGVuZFZhbHVlLCBhbmQgZXh0cmFjdCBhIHZhbHVlIG9wZXJhdG9yIChlLmcuIFwiKz1cIiwgXCItPVwiKSBpZiBvbmUgZXhpc3RzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0c2VwYXJhdGVkVmFsdWUgPSBzZXBhcmF0ZVZhbHVlKHByb3BlcnR5LCBlbmRWYWx1ZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZSA9IHNlcGFyYXRlZFZhbHVlWzBdLnJlcGxhY2UoL14oWystXFwvKl0pPS8sIGZ1bmN0aW9uKG1hdGNoLCBzdWJNYXRjaCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRvcGVyYXRvciA9IHN1Yk1hdGNoO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogU3RyaXAgdGhlIG9wZXJhdG9yIG9mZiBvZiB0aGUgdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBcIlwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZVVuaXRUeXBlID0gc2VwYXJhdGVkVmFsdWVbMV07XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogUGFyc2UgZmxvYXQgdmFsdWVzIGZyb20gZW5kVmFsdWUgYW5kIHN0YXJ0VmFsdWUuIERlZmF1bHQgdG8gMCBpZiBOYU4gaXMgcmV0dXJuZWQuICovXHJcblx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlID0gcGFyc2VGbG9hdChzdGFydFZhbHVlKSB8fCAwO1xyXG5cdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWUgPSBwYXJzZUZsb2F0KGVuZFZhbHVlKSB8fCAwO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0XHRcdCBQcm9wZXJ0eS1TcGVjaWZpYyBWYWx1ZSBDb252ZXJzaW9uXHJcblx0XHRcdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIEN1c3RvbSBzdXBwb3J0IGZvciBwcm9wZXJ0aWVzIHRoYXQgZG9uJ3QgYWN0dWFsbHkgYWNjZXB0IHRoZSAlIHVuaXQgdHlwZSwgYnV0IHdoZXJlIHBvbGx5ZmlsbGluZyBpcyB0cml2aWFsIGFuZCByZWxhdGl2ZWx5IGZvb2xwcm9vZi4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChlbmRWYWx1ZVVuaXRUeXBlID09PSBcIiVcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBBICUtdmFsdWUgZm9udFNpemUvbGluZUhlaWdodCBpcyByZWxhdGl2ZSB0byB0aGUgcGFyZW50J3MgZm9udFNpemUgKGFzIG9wcG9zZWQgdG8gdGhlIHBhcmVudCdzIGRpbWVuc2lvbnMpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgd2hpY2ggaXMgaWRlbnRpY2FsIHRvIHRoZSBlbSB1bml0J3MgYmVoYXZpb3IsIHNvIHdlIHBpZ2d5YmFjayBvZmYgb2YgdGhhdC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKC9eKGZvbnRTaXplfGxpbmVIZWlnaHQpJC8udGVzdChwcm9wZXJ0eSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBDb252ZXJ0ICUgaW50byBhbiBlbSBkZWNpbWFsIHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlID0gZW5kVmFsdWUgLyAxMDA7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWVVbml0VHlwZSA9IFwiZW1cIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBGb3Igc2NhbGVYIGFuZCBzY2FsZVksIGNvbnZlcnQgdGhlIHZhbHVlIGludG8gaXRzIGRlY2ltYWwgZm9ybWF0IGFuZCBzdHJpcCBvZmYgdGhlIHVuaXQgdHlwZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICgvXnNjYWxlLy50ZXN0KHByb3BlcnR5KSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlID0gZW5kVmFsdWUgLyAxMDA7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWVVbml0VHlwZSA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogRm9yIFJHQiBjb21wb25lbnRzLCB0YWtlIHRoZSBkZWZpbmVkIHBlcmNlbnRhZ2Ugb2YgMjU1IGFuZCBzdHJpcCBvZmYgdGhlIHVuaXQgdHlwZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICgvKFJlZHxHcmVlbnxCbHVlKSQvaS50ZXN0KHByb3BlcnR5KSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlID0gKGVuZFZhbHVlIC8gMTAwKSAqIDI1NTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZVVuaXRUeXBlID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdCBVbml0IFJhdGlvIENhbGN1bGF0aW9uXHJcblx0XHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0LyogV2hlbiBxdWVyaWVkLCB0aGUgYnJvd3NlciByZXR1cm5zIChtb3N0KSBDU1MgcHJvcGVydHkgdmFsdWVzIGluIHBpeGVscy4gVGhlcmVmb3JlLCBpZiBhbiBlbmRWYWx1ZSB3aXRoIGEgdW5pdCB0eXBlIG9mXHJcblx0XHRcdFx0XHRcdFx0ICUsIGVtLCBvciByZW0gaXMgYW5pbWF0ZWQgdG93YXJkLCBzdGFydFZhbHVlIG11c3QgYmUgY29udmVydGVkIGZyb20gcGl4ZWxzIGludG8gdGhlIHNhbWUgdW5pdCB0eXBlIGFzIGVuZFZhbHVlIGluIG9yZGVyXHJcblx0XHRcdFx0XHRcdFx0IGZvciB2YWx1ZSBtYW5pcHVsYXRpb24gbG9naWMgKGluY3JlbWVudC9kZWNyZW1lbnQpIHRvIHByb2NlZWQuIEZ1cnRoZXIsIGlmIHRoZSBzdGFydFZhbHVlIHdhcyBmb3JjZWZlZCBvciB0cmFuc2ZlcnJlZFxyXG5cdFx0XHRcdFx0XHRcdCBmcm9tIGEgcHJldmlvdXMgY2FsbCwgc3RhcnRWYWx1ZSBtYXkgYWxzbyBub3QgYmUgaW4gcGl4ZWxzLiBVbml0IGNvbnZlcnNpb24gbG9naWMgdGhlcmVmb3JlIGNvbnNpc3RzIG9mIHR3byBzdGVwczpcclxuXHRcdFx0XHRcdFx0XHQgMSkgQ2FsY3VsYXRpbmcgdGhlIHJhdGlvIG9mICUvZW0vcmVtL3ZoL3Z3IHJlbGF0aXZlIHRvIHBpeGVsc1xyXG5cdFx0XHRcdFx0XHRcdCAyKSBDb252ZXJ0aW5nIHN0YXJ0VmFsdWUgaW50byB0aGUgc2FtZSB1bml0IG9mIG1lYXN1cmVtZW50IGFzIGVuZFZhbHVlIGJhc2VkIG9uIHRoZXNlIHJhdGlvcy4gKi9cclxuXHRcdFx0XHRcdFx0XHQvKiBVbml0IGNvbnZlcnNpb24gcmF0aW9zIGFyZSBjYWxjdWxhdGVkIGJ5IGluc2VydGluZyBhIHNpYmxpbmcgbm9kZSBuZXh0IHRvIHRoZSB0YXJnZXQgbm9kZSwgY29weWluZyBvdmVyIGl0cyBwb3NpdGlvbiBwcm9wZXJ0eSxcclxuXHRcdFx0XHRcdFx0XHQgc2V0dGluZyB2YWx1ZXMgd2l0aCB0aGUgdGFyZ2V0IHVuaXQgdHlwZSB0aGVuIGNvbXBhcmluZyB0aGUgcmV0dXJuZWQgcGl4ZWwgdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0LyogTm90ZTogRXZlbiBpZiBvbmx5IG9uZSBvZiB0aGVzZSB1bml0IHR5cGVzIGlzIGJlaW5nIGFuaW1hdGVkLCBhbGwgdW5pdCByYXRpb3MgYXJlIGNhbGN1bGF0ZWQgYXQgb25jZSBzaW5jZSB0aGUgb3ZlcmhlYWRcclxuXHRcdFx0XHRcdFx0XHQgb2YgYmF0Y2hpbmcgdGhlIFNFVHMgYW5kIEdFVHMgdG9nZXRoZXIgdXBmcm9udCBvdXR3ZWlnaHRzIHRoZSBwb3RlbnRpYWwgb3ZlcmhlYWRcclxuXHRcdFx0XHRcdFx0XHQgb2YgbGF5b3V0IHRocmFzaGluZyBjYXVzZWQgYnkgcmUtcXVlcnlpbmcgZm9yIHVuY2FsY3VsYXRlZCByYXRpb3MgZm9yIHN1YnNlcXVlbnRseS1wcm9jZXNzZWQgcHJvcGVydGllcy4gKi9cclxuXHRcdFx0XHRcdFx0XHQvKiBUb2RvOiBTaGlmdCB0aGlzIGxvZ2ljIGludG8gdGhlIGNhbGxzJyBmaXJzdCB0aWNrIGluc3RhbmNlIHNvIHRoYXQgaXQncyBzeW5jZWQgd2l0aCBSQUYuICovXHJcblx0XHRcdFx0XHRcdFx0dmFyIGNhbGN1bGF0ZVVuaXRSYXRpb3MgPSBmdW5jdGlvbigpIHtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdFx0XHQgU2FtZSBSYXRpbyBDaGVja3NcclxuXHRcdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogVGhlIHByb3BlcnRpZXMgYmVsb3cgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGVsZW1lbnQgZGlmZmVycyBzdWZmaWNpZW50bHkgZnJvbSB0aGlzIGNhbGwnc1xyXG5cdFx0XHRcdFx0XHRcdFx0IHByZXZpb3VzbHkgaXRlcmF0ZWQgZWxlbWVudCB0byBhbHNvIGRpZmZlciBpbiBpdHMgdW5pdCBjb252ZXJzaW9uIHJhdGlvcy4gSWYgdGhlIHByb3BlcnRpZXMgbWF0Y2ggdXAgd2l0aCB0aG9zZVxyXG5cdFx0XHRcdFx0XHRcdFx0IG9mIHRoZSBwcmlvciBlbGVtZW50LCB0aGUgcHJpb3IgZWxlbWVudCdzIGNvbnZlcnNpb24gcmF0aW9zIGFyZSB1c2VkLiBMaWtlIG1vc3Qgb3B0aW1pemF0aW9ucyBpbiBWZWxvY2l0eSxcclxuXHRcdFx0XHRcdFx0XHRcdCB0aGlzIGlzIGRvbmUgdG8gbWluaW1pemUgRE9NIHF1ZXJ5aW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHNhbWVSYXRpb0luZGljYXRvcnMgPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdG15UGFyZW50OiBlbGVtZW50LnBhcmVudE5vZGUgfHwgZG9jdW1lbnQuYm9keSwgLyogR0VUICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdHBvc2l0aW9uOiBDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcInBvc2l0aW9uXCIpLCAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9udFNpemU6IENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwiZm9udFNpemVcIikgLyogR0VUICovXHJcblx0XHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIERldGVybWluZSBpZiB0aGUgc2FtZSAlIHJhdGlvIGNhbiBiZSB1c2VkLiAlIGlzIGJhc2VkIG9uIHRoZSBlbGVtZW50J3MgcG9zaXRpb24gdmFsdWUgYW5kIGl0cyBwYXJlbnQncyB3aWR0aCBhbmQgaGVpZ2h0IGRpbWVuc2lvbnMuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2FtZVBlcmNlbnRSYXRpbyA9ICgoc2FtZVJhdGlvSW5kaWNhdG9ycy5wb3NpdGlvbiA9PT0gY2FsbFVuaXRDb252ZXJzaW9uRGF0YS5sYXN0UG9zaXRpb24pICYmIChzYW1lUmF0aW9JbmRpY2F0b3JzLm15UGFyZW50ID09PSBjYWxsVW5pdENvbnZlcnNpb25EYXRhLmxhc3RQYXJlbnQpKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBEZXRlcm1pbmUgaWYgdGhlIHNhbWUgZW0gcmF0aW8gY2FuIGJlIHVzZWQuIGVtIGlzIHJlbGF0aXZlIHRvIHRoZSBlbGVtZW50J3MgZm9udFNpemUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2FtZUVtUmF0aW8gPSAoc2FtZVJhdGlvSW5kaWNhdG9ycy5mb250U2l6ZSA9PT0gY2FsbFVuaXRDb252ZXJzaW9uRGF0YS5sYXN0Rm9udFNpemUpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIFN0b3JlIHRoZXNlIHJhdGlvIGluZGljYXRvcnMgY2FsbC13aWRlIGZvciB0aGUgbmV4dCBlbGVtZW50IHRvIGNvbXBhcmUgYWdhaW5zdC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGNhbGxVbml0Q29udmVyc2lvbkRhdGEubGFzdFBhcmVudCA9IHNhbWVSYXRpb0luZGljYXRvcnMubXlQYXJlbnQ7XHJcblx0XHRcdFx0XHRcdFx0XHRjYWxsVW5pdENvbnZlcnNpb25EYXRhLmxhc3RQb3NpdGlvbiA9IHNhbWVSYXRpb0luZGljYXRvcnMucG9zaXRpb247XHJcblx0XHRcdFx0XHRcdFx0XHRjYWxsVW5pdENvbnZlcnNpb25EYXRhLmxhc3RGb250U2l6ZSA9IHNhbWVSYXRpb0luZGljYXRvcnMuZm9udFNpemU7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdFx0IEVsZW1lbnQtU3BlY2lmaWMgVW5pdHNcclxuXHRcdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogTm90ZTogSUU4IHJvdW5kcyB0byB0aGUgbmVhcmVzdCBwaXhlbCB3aGVuIHJldHVybmluZyBDU1MgdmFsdWVzLCB0aHVzIHdlIHBlcmZvcm0gY29udmVyc2lvbnMgdXNpbmcgYSBtZWFzdXJlbWVudFxyXG5cdFx0XHRcdFx0XHRcdFx0IG9mIDEwMCAoaW5zdGVhZCBvZiAxKSB0byBnaXZlIG91ciByYXRpb3MgYSBwcmVjaXNpb24gb2YgYXQgbGVhc3QgMiBkZWNpbWFsIHZhbHVlcy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdHZhciBtZWFzdXJlbWVudCA9IDEwMCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1bml0UmF0aW9zID0ge307XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFzYW1lRW1SYXRpbyB8fCAhc2FtZVBlcmNlbnRSYXRpbykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZHVtbXkgPSBkYXRhICYmIGRhdGEuaXNTVkcgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInJlY3RcIikgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0VmVsb2NpdHkuaW5pdChkdW1teSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHNhbWVSYXRpb0luZGljYXRvcnMubXlQYXJlbnQuYXBwZW5kQ2hpbGQoZHVtbXkpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogVG8gYWNjdXJhdGVseSBhbmQgY29uc2lzdGVudGx5IGNhbGN1bGF0ZSBjb252ZXJzaW9uIHJhdGlvcywgdGhlIGVsZW1lbnQncyBjYXNjYWRlZCBvdmVyZmxvdyBhbmQgYm94LXNpemluZyBhcmUgc3RyaXBwZWQuXHJcblx0XHRcdFx0XHRcdFx0XHRcdCBTaW1pbGFybHksIHNpbmNlIHdpZHRoL2hlaWdodCBjYW4gYmUgYXJ0aWZpY2lhbGx5IGNvbnN0cmFpbmVkIGJ5IHRoZWlyIG1pbi0vbWF4LSBlcXVpdmFsZW50cywgdGhlc2UgYXJlIGNvbnRyb2xsZWQgZm9yIGFzIHdlbGwuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIE5vdGU6IE92ZXJmbG93IG11c3QgYmUgYWxzbyBiZSBjb250cm9sbGVkIGZvciBwZXItYXhpcyBzaW5jZSB0aGUgb3ZlcmZsb3cgcHJvcGVydHkgb3ZlcndyaXRlcyBpdHMgcGVyLWF4aXMgdmFsdWVzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQkLmVhY2goW1wib3ZlcmZsb3dcIiwgXCJvdmVyZmxvd1hcIiwgXCJvdmVyZmxvd1lcIl0sIGZ1bmN0aW9uKGksIHByb3BlcnR5KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0VmVsb2NpdHkuQ1NTLnNldFByb3BlcnR5VmFsdWUoZHVtbXksIHByb3BlcnR5LCBcImhpZGRlblwiKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFZlbG9jaXR5LkNTUy5zZXRQcm9wZXJ0eVZhbHVlKGR1bW15LCBcInBvc2l0aW9uXCIsIHNhbWVSYXRpb0luZGljYXRvcnMucG9zaXRpb24pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRWZWxvY2l0eS5DU1Muc2V0UHJvcGVydHlWYWx1ZShkdW1teSwgXCJmb250U2l6ZVwiLCBzYW1lUmF0aW9JbmRpY2F0b3JzLmZvbnRTaXplKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0VmVsb2NpdHkuQ1NTLnNldFByb3BlcnR5VmFsdWUoZHVtbXksIFwiYm94U2l6aW5nXCIsIFwiY29udGVudC1ib3hcIik7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiB3aWR0aCBhbmQgaGVpZ2h0IGFjdCBhcyBvdXIgcHJveHkgcHJvcGVydGllcyBmb3IgbWVhc3VyaW5nIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCAlIHJhdGlvcy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0JC5lYWNoKFtcIm1pbldpZHRoXCIsIFwibWF4V2lkdGhcIiwgXCJ3aWR0aFwiLCBcIm1pbkhlaWdodFwiLCBcIm1heEhlaWdodFwiLCBcImhlaWdodFwiXSwgZnVuY3Rpb24oaSwgcHJvcGVydHkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRWZWxvY2l0eS5DU1Muc2V0UHJvcGVydHlWYWx1ZShkdW1teSwgcHJvcGVydHksIG1lYXN1cmVtZW50ICsgXCIlXCIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogcGFkZGluZ0xlZnQgYXJiaXRyYXJpbHkgYWN0cyBhcyBvdXIgcHJveHkgcHJvcGVydHkgZm9yIHRoZSBlbSByYXRpby4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0VmVsb2NpdHkuQ1NTLnNldFByb3BlcnR5VmFsdWUoZHVtbXksIFwicGFkZGluZ0xlZnRcIiwgbWVhc3VyZW1lbnQgKyBcImVtXCIpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogRGl2aWRlIHRoZSByZXR1cm5lZCB2YWx1ZSBieSB0aGUgbWVhc3VyZW1lbnQgdG8gZ2V0IHRoZSByYXRpbyBiZXR3ZWVuIDElIGFuZCAxcHguIERlZmF1bHQgdG8gMSBzaW5jZSB3b3JraW5nIHdpdGggMCBjYW4gcHJvZHVjZSBJbmZpbml0ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0dW5pdFJhdGlvcy5wZXJjZW50VG9QeFdpZHRoID0gY2FsbFVuaXRDb252ZXJzaW9uRGF0YS5sYXN0UGVyY2VudFRvUHhXaWR0aCA9IChwYXJzZUZsb2F0KENTUy5nZXRQcm9wZXJ0eVZhbHVlKGR1bW15LCBcIndpZHRoXCIsIG51bGwsIHRydWUpKSB8fCAxKSAvIG1lYXN1cmVtZW50OyAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0dW5pdFJhdGlvcy5wZXJjZW50VG9QeEhlaWdodCA9IGNhbGxVbml0Q29udmVyc2lvbkRhdGEubGFzdFBlcmNlbnRUb1B4SGVpZ2h0ID0gKHBhcnNlRmxvYXQoQ1NTLmdldFByb3BlcnR5VmFsdWUoZHVtbXksIFwiaGVpZ2h0XCIsIG51bGwsIHRydWUpKSB8fCAxKSAvIG1lYXN1cmVtZW50OyAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0dW5pdFJhdGlvcy5lbVRvUHggPSBjYWxsVW5pdENvbnZlcnNpb25EYXRhLmxhc3RFbVRvUHggPSAocGFyc2VGbG9hdChDU1MuZ2V0UHJvcGVydHlWYWx1ZShkdW1teSwgXCJwYWRkaW5nTGVmdFwiKSkgfHwgMSkgLyBtZWFzdXJlbWVudDsgLyogR0VUICovXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzYW1lUmF0aW9JbmRpY2F0b3JzLm15UGFyZW50LnJlbW92ZUNoaWxkKGR1bW15KTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHVuaXRSYXRpb3MuZW1Ub1B4ID0gY2FsbFVuaXRDb252ZXJzaW9uRGF0YS5sYXN0RW1Ub1B4O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR1bml0UmF0aW9zLnBlcmNlbnRUb1B4V2lkdGggPSBjYWxsVW5pdENvbnZlcnNpb25EYXRhLmxhc3RQZXJjZW50VG9QeFdpZHRoO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR1bml0UmF0aW9zLnBlcmNlbnRUb1B4SGVpZ2h0ID0gY2FsbFVuaXRDb252ZXJzaW9uRGF0YS5sYXN0UGVyY2VudFRvUHhIZWlnaHQ7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdFx0IEVsZW1lbnQtQWdub3N0aWMgVW5pdHNcclxuXHRcdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogV2hlcmVhcyAlIGFuZCBlbSByYXRpb3MgYXJlIGRldGVybWluZWQgb24gYSBwZXItZWxlbWVudCBiYXNpcywgdGhlIHJlbSB1bml0IG9ubHkgbmVlZHMgdG8gYmUgY2hlY2tlZFxyXG5cdFx0XHRcdFx0XHRcdFx0IG9uY2UgcGVyIGNhbGwgc2luY2UgaXQncyBleGNsdXNpdmVseSBkZXBlbmRhbnQgdXBvbiBkb2N1bWVudC5ib2R5J3MgZm9udFNpemUuIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWVcclxuXHRcdFx0XHRcdFx0XHRcdCB0aGF0IGNhbGN1bGF0ZVVuaXRSYXRpb3MoKSBpcyBiZWluZyBydW4gZHVyaW5nIHRoaXMgY2FsbCwgcmVtVG9QeCB3aWxsIHN0aWxsIGJlIHNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZSBvZiBudWxsLFxyXG5cdFx0XHRcdFx0XHRcdFx0IHNvIHdlIGNhbGN1bGF0ZSBpdCBub3cuICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoY2FsbFVuaXRDb252ZXJzaW9uRGF0YS5yZW1Ub1B4ID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIERlZmF1bHQgdG8gYnJvd3NlcnMnIGRlZmF1bHQgZm9udFNpemUgb2YgMTZweCBpbiB0aGUgY2FzZSBvZiAwLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjYWxsVW5pdENvbnZlcnNpb25EYXRhLnJlbVRvUHggPSBwYXJzZUZsb2F0KENTUy5nZXRQcm9wZXJ0eVZhbHVlKGRvY3VtZW50LmJvZHksIFwiZm9udFNpemVcIikpIHx8IDE2OyAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBTaW1pbGFybHksIHZpZXdwb3J0IHVuaXRzIGFyZSAlLXJlbGF0aXZlIHRvIHRoZSB3aW5kb3cncyBpbm5lciBkaW1lbnNpb25zLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGNhbGxVbml0Q29udmVyc2lvbkRhdGEudndUb1B4ID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNhbGxVbml0Q29udmVyc2lvbkRhdGEudndUb1B4ID0gcGFyc2VGbG9hdCh3aW5kb3cuaW5uZXJXaWR0aCkgLyAxMDA7IC8qIEdFVCAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjYWxsVW5pdENvbnZlcnNpb25EYXRhLnZoVG9QeCA9IHBhcnNlRmxvYXQod2luZG93LmlubmVySGVpZ2h0KSAvIDEwMDsgLyogR0VUICovXHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0dW5pdFJhdGlvcy5yZW1Ub1B4ID0gY2FsbFVuaXRDb252ZXJzaW9uRGF0YS5yZW1Ub1B4O1xyXG5cdFx0XHRcdFx0XHRcdFx0dW5pdFJhdGlvcy52d1RvUHggPSBjYWxsVW5pdENvbnZlcnNpb25EYXRhLnZ3VG9QeDtcclxuXHRcdFx0XHRcdFx0XHRcdHVuaXRSYXRpb3MudmhUb1B4ID0gY2FsbFVuaXRDb252ZXJzaW9uRGF0YS52aFRvUHg7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKFZlbG9jaXR5LmRlYnVnID49IDEpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXCJVbml0IHJhdGlvczogXCIgKyBKU09OLnN0cmluZ2lmeSh1bml0UmF0aW9zKSwgZWxlbWVudCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdW5pdFJhdGlvcztcclxuXHRcdFx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0XHQgVW5pdCBDb252ZXJzaW9uXHJcblx0XHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBUaGUgKiBhbmQgLyBvcGVyYXRvcnMsIHdoaWNoIGFyZSBub3QgcGFzc2VkIGluIHdpdGggYW4gYXNzb2NpYXRlZCB1bml0LCBpbmhlcmVudGx5IHVzZSBzdGFydFZhbHVlJ3MgdW5pdC4gU2tpcCB2YWx1ZSBhbmQgdW5pdCBjb252ZXJzaW9uLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmICgvW1xcLypdLy50ZXN0KG9wZXJhdG9yKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWVVbml0VHlwZSA9IHN0YXJ0VmFsdWVVbml0VHlwZTtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIElmIHN0YXJ0VmFsdWUgYW5kIGVuZFZhbHVlIGRpZmZlciBpbiB1bml0IHR5cGUsIGNvbnZlcnQgc3RhcnRWYWx1ZSBpbnRvIHRoZSBzYW1lIHVuaXQgdHlwZSBhcyBlbmRWYWx1ZSBzbyB0aGF0IGlmIGVuZFZhbHVlVW5pdFR5cGVcclxuXHRcdFx0XHRcdFx0XHRcdCBpcyBhIHJlbGF0aXZlIHVuaXQgKCUsIGVtLCByZW0pLCB0aGUgdmFsdWVzIHNldCBkdXJpbmcgdHdlZW5pbmcgd2lsbCBjb250aW51ZSB0byBiZSBhY2N1cmF0ZWx5IHJlbGF0aXZlIGV2ZW4gaWYgdGhlIG1ldHJpY3MgdGhleSBkZXBlbmRcclxuXHRcdFx0XHRcdFx0XHRcdCBvbiBhcmUgZHluYW1pY2FsbHkgY2hhbmdpbmcgZHVyaW5nIHRoZSBjb3Vyc2Ugb2YgdGhlIGFuaW1hdGlvbi4gQ29udmVyc2VseSwgaWYgd2UgYWx3YXlzIG5vcm1hbGl6ZWQgaW50byBweCBhbmQgdXNlZCBweCBmb3Igc2V0dGluZyB2YWx1ZXMsIHRoZSBweCByYXRpb1xyXG5cdFx0XHRcdFx0XHRcdFx0IHdvdWxkIGJlY29tZSBzdGFsZSBpZiB0aGUgb3JpZ2luYWwgdW5pdCBiZWluZyBhbmltYXRlZCB0b3dhcmQgd2FzIHJlbGF0aXZlIGFuZCB0aGUgdW5kZXJseWluZyBtZXRyaWNzIGNoYW5nZSBkdXJpbmcgdGhlIGFuaW1hdGlvbi4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdC8qIFNpbmNlIDAgaXMgMCBpbiBhbnkgdW5pdCB0eXBlLCBubyBjb252ZXJzaW9uIGlzIG5lY2Vzc2FyeSB3aGVuIHN0YXJ0VmFsdWUgaXMgMCAtLSB3ZSBqdXN0IHN0YXJ0IGF0IDAgd2l0aCBlbmRWYWx1ZVVuaXRUeXBlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoKHN0YXJ0VmFsdWVVbml0VHlwZSAhPT0gZW5kVmFsdWVVbml0VHlwZSkgJiYgc3RhcnRWYWx1ZSAhPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogVW5pdCBjb252ZXJzaW9uIGlzIGFsc28gc2tpcHBlZCB3aGVuIGVuZFZhbHVlIGlzIDAsIGJ1dCAqc3RhcnRWYWx1ZVVuaXRUeXBlKiBtdXN0IGJlIHVzZWQgZm9yIHR3ZWVuIHZhbHVlcyB0byByZW1haW4gYWNjdXJhdGUuICovXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBOb3RlOiBTa2lwcGluZyB1bml0IGNvbnZlcnNpb24gaGVyZSBtZWFucyB0aGF0IGlmIGVuZFZhbHVlVW5pdFR5cGUgd2FzIG9yaWdpbmFsbHkgYSByZWxhdGl2ZSB1bml0LCB0aGUgYW5pbWF0aW9uIHdvbid0IHJlbGF0aXZlbHlcclxuXHRcdFx0XHRcdFx0XHRcdCBtYXRjaCB0aGUgdW5kZXJseWluZyBtZXRyaWNzIGlmIHRoZXkgY2hhbmdlLCBidXQgdGhpcyBpcyBhY2NlcHRhYmxlIHNpbmNlIHdlJ3JlIGFuaW1hdGluZyB0b3dhcmQgaW52aXNpYmlsaXR5IGluc3RlYWQgb2YgdG93YXJkIHZpc2liaWxpdHksXHJcblx0XHRcdFx0XHRcdFx0XHQgd2hpY2ggcmVtYWlucyBwYXN0IHRoZSBwb2ludCBvZiB0aGUgYW5pbWF0aW9uJ3MgY29tcGxldGlvbi4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChlbmRWYWx1ZSA9PT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZVVuaXRUeXBlID0gc3RhcnRWYWx1ZVVuaXRUeXBlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogQnkgdGhpcyBwb2ludCwgd2UgY2Fubm90IGF2b2lkIHVuaXQgY29udmVyc2lvbiAoaXQncyB1bmRlc2lyYWJsZSBzaW5jZSBpdCBjYXVzZXMgbGF5b3V0IHRocmFzaGluZykuXHJcblx0XHRcdFx0XHRcdFx0XHRcdCBJZiB3ZSBoYXZlbid0IGFscmVhZHksIHdlIHRyaWdnZXIgY2FsY3VsYXRlVW5pdFJhdGlvcygpLCB3aGljaCBydW5zIG9uY2UgcGVyIGVsZW1lbnQgcGVyIGNhbGwuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGVsZW1lbnRVbml0Q29udmVyc2lvbkRhdGEgPSBlbGVtZW50VW5pdENvbnZlcnNpb25EYXRhIHx8IGNhbGN1bGF0ZVVuaXRSYXRpb3MoKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIFRoZSBmb2xsb3dpbmcgUmVnRXggbWF0Y2hlcyBDU1MgcHJvcGVydGllcyB0aGF0IGhhdmUgdGhlaXIgJSB2YWx1ZXMgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIHgtYXhpcy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogTm90ZTogVzNDIHNwZWMgbWFuZGF0ZXMgdGhhdCBhbGwgb2YgbWFyZ2luIGFuZCBwYWRkaW5nJ3MgcHJvcGVydGllcyAoZXZlbiB0b3AgYW5kIGJvdHRvbSkgYXJlICUtcmVsYXRpdmUgdG8gdGhlICp3aWR0aCogb2YgdGhlIHBhcmVudCBlbGVtZW50LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXhpcyA9ICgvbWFyZ2lufHBhZGRpbmd8bGVmdHxyaWdodHx3aWR0aHx0ZXh0fHdvcmR8bGV0dGVyL2kudGVzdChwcm9wZXJ0eSkgfHwgL1gkLy50ZXN0KHByb3BlcnR5KSB8fCBwcm9wZXJ0eSA9PT0gXCJ4XCIpID8gXCJ4XCIgOiBcInlcIjtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIEluIG9yZGVyIHRvIGF2b2lkIGdlbmVyYXRpbmcgbl4yIGJlc3Bva2UgY29udmVyc2lvbiBmdW5jdGlvbnMsIHVuaXQgY29udmVyc2lvbiBpcyBhIHR3by1zdGVwIHByb2Nlc3M6XHJcblx0XHRcdFx0XHRcdFx0XHRcdCAxKSBDb252ZXJ0IHN0YXJ0VmFsdWUgaW50byBwaXhlbHMuIDIpIENvbnZlcnQgdGhpcyBuZXcgcGl4ZWwgdmFsdWUgaW50byBlbmRWYWx1ZSdzIHVuaXQgdHlwZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0c3dpdGNoIChzdGFydFZhbHVlVW5pdFR5cGUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiJVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogTm90ZTogdHJhbnNsYXRlWCBhbmQgdHJhbnNsYXRlWSBhcmUgdGhlIG9ubHkgcHJvcGVydGllcyB0aGF0IGFyZSAlLXJlbGF0aXZlIHRvIGFuIGVsZW1lbnQncyBvd24gZGltZW5zaW9ucyAtLSBub3QgaXRzIHBhcmVudCdzIGRpbWVuc2lvbnMuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgVmVsb2NpdHkgZG9lcyBub3QgaW5jbHVkZSBhIHNwZWNpYWwgY29udmVyc2lvbiBwcm9jZXNzIHRvIGFjY291bnQgZm9yIHRoaXMgYmVoYXZpb3IuIFRoZXJlZm9yZSwgYW5pbWF0aW5nIHRyYW5zbGF0ZVgvWSBmcm9tIGEgJSB2YWx1ZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0IHRvIGEgbm9uLSUgdmFsdWUgd2lsbCBwcm9kdWNlIGFuIGluY29ycmVjdCBzdGFydCB2YWx1ZS4gRm9ydHVuYXRlbHksIHRoaXMgc29ydCBvZiBjcm9zcy11bml0IGNvbnZlcnNpb24gaXMgcmFyZWx5IGRvbmUgYnkgdXNlcnMgaW4gcHJhY3RpY2UuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlICo9IChheGlzID09PSBcInhcIiA/IGVsZW1lbnRVbml0Q29udmVyc2lvbkRhdGEucGVyY2VudFRvUHhXaWR0aCA6IGVsZW1lbnRVbml0Q29udmVyc2lvbkRhdGEucGVyY2VudFRvUHhIZWlnaHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJweFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogcHggYWN0cyBhcyBvdXIgbWlkcG9pbnQgaW4gdGhlIHVuaXQgY29udmVyc2lvbiBwcm9jZXNzOyBkbyBub3RoaW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlICo9IGVsZW1lbnRVbml0Q29udmVyc2lvbkRhdGFbc3RhcnRWYWx1ZVVuaXRUeXBlICsgXCJUb1B4XCJdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBJbnZlcnQgdGhlIHB4IHJhdGlvcyB0byBjb252ZXJ0IGludG8gdG8gdGhlIHRhcmdldCB1bml0LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGVuZFZhbHVlVW5pdFR5cGUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiJVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSAqPSAxIC8gKGF4aXMgPT09IFwieFwiID8gZWxlbWVudFVuaXRDb252ZXJzaW9uRGF0YS5wZXJjZW50VG9QeFdpZHRoIDogZWxlbWVudFVuaXRDb252ZXJzaW9uRGF0YS5wZXJjZW50VG9QeEhlaWdodCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcInB4XCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBzdGFydFZhbHVlIGlzIGFscmVhZHkgaW4gcHgsIGRvIG5vdGhpbmc7IHdlJ3JlIGRvbmUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWUgKj0gMSAvIGVsZW1lbnRVbml0Q29udmVyc2lvbkRhdGFbZW5kVmFsdWVVbml0VHlwZSArIFwiVG9QeFwiXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdCBSZWxhdGl2ZSBWYWx1ZXNcclxuXHRcdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBPcGVyYXRvciBsb2dpYyBtdXN0IGJlIHBlcmZvcm1lZCBsYXN0IHNpbmNlIGl0IHJlcXVpcmVzIHVuaXQtbm9ybWFsaXplZCBzdGFydCBhbmQgZW5kIHZhbHVlcy4gKi9cclxuXHRcdFx0XHRcdFx0XHQvKiBOb3RlOiBSZWxhdGl2ZSAqcGVyY2VudCB2YWx1ZXMqIGRvIG5vdCBiZWhhdmUgaG93IG1vc3QgcGVvcGxlIHRoaW5rOyB3aGlsZSBvbmUgd291bGQgZXhwZWN0IFwiKz01MCVcIlxyXG5cdFx0XHRcdFx0XHRcdCB0byBpbmNyZWFzZSB0aGUgcHJvcGVydHkgMS41eCBpdHMgY3VycmVudCB2YWx1ZSwgaXQgaW4gZmFjdCBpbmNyZWFzZXMgdGhlIHBlcmNlbnQgdW5pdHMgaW4gYWJzb2x1dGUgdGVybXM6XHJcblx0XHRcdFx0XHRcdFx0IDUwIHBvaW50cyBpcyBhZGRlZCBvbiB0b3Agb2YgdGhlIGN1cnJlbnQgJSB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKG9wZXJhdG9yKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiK1wiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZSA9IHN0YXJ0VmFsdWUgKyBlbmRWYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIi1cIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWUgPSBzdGFydFZhbHVlIC0gZW5kVmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCIqXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlID0gc3RhcnRWYWx1ZSAqIGVuZFZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiL1wiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZSA9IHN0YXJ0VmFsdWUgLyBlbmRWYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0XHQgdHdlZW5zQ29udGFpbmVyIFB1c2hcclxuXHRcdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIENvbnN0cnVjdCB0aGUgcGVyLXByb3BlcnR5IHR3ZWVuIG9iamVjdCwgYW5kIHB1c2ggaXQgdG8gdGhlIGVsZW1lbnQncyB0d2VlbnNDb250YWluZXIuICovXHJcblx0XHRcdFx0XHRcdFx0dHdlZW5zQ29udGFpbmVyW3Byb3BlcnR5XSA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlOiByb290UHJvcGVydHlWYWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWU6IHN0YXJ0VmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VmFsdWU6IHN0YXJ0VmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZTogZW5kVmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0XHR1bml0VHlwZTogZW5kVmFsdWVVbml0VHlwZSxcclxuXHRcdFx0XHRcdFx0XHRcdGVhc2luZzogZWFzaW5nXHJcblx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0XHRpZiAocGF0dGVybikge1xyXG5cdFx0XHRcdFx0XHRcdFx0dHdlZW5zQ29udGFpbmVyW3Byb3BlcnR5XS5wYXR0ZXJuID0gcGF0dGVybjtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmIChWZWxvY2l0eS5kZWJ1Zykge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXCJ0d2VlbnNDb250YWluZXIgKFwiICsgcHJvcGVydHkgKyBcIik6IFwiICsgSlNPTi5zdHJpbmdpZnkodHdlZW5zQ29udGFpbmVyW3Byb3BlcnR5XSksIGVsZW1lbnQpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIENyZWF0ZSBhIHR3ZWVuIG91dCBvZiBlYWNoIHByb3BlcnR5LCBhbmQgYXBwZW5kIGl0cyBhc3NvY2lhdGVkIGRhdGEgdG8gdHdlZW5zQ29udGFpbmVyLiAqL1xyXG5cdFx0XHRcdFx0XHRmb3IgKHZhciBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzTWFwKSB7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmICghcHJvcGVydGllc01hcC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHQvKiBUaGUgb3JpZ2luYWwgcHJvcGVydHkgbmFtZSdzIGZvcm1hdCBtdXN0IGJlIHVzZWQgZm9yIHRoZSBwYXJzZVByb3BlcnR5VmFsdWUoKSBsb29rdXAsXHJcblx0XHRcdFx0XHRcdFx0IGJ1dCB3ZSB0aGVuIHVzZSBpdHMgY2FtZWxDYXNlIHN0eWxpbmcgdG8gbm9ybWFsaXplIGl0IGZvciBtYW5pcHVsYXRpb24uICovXHJcblx0XHRcdFx0XHRcdFx0dmFyIHByb3BlcnR5TmFtZSA9IENTUy5OYW1lcy5jYW1lbENhc2UocHJvcGVydHkpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZURhdGEgPSBwYXJzZVByb3BlcnR5VmFsdWUocHJvcGVydGllc01hcFtwcm9wZXJ0eV0pO1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBGaW5kIHNob3J0aGFuZCBjb2xvciBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBiZWVuIHBhc3NlZCBhIGhleCBzdHJpbmcuICovXHJcblx0XHRcdFx0XHRcdFx0LyogV291bGQgYmUgcXVpY2tlciB0byB1c2UgQ1NTLkxpc3RzLmNvbG9ycy5pbmNsdWRlcygpIGlmIHBvc3NpYmxlICovXHJcblx0XHRcdFx0XHRcdFx0aWYgKF9pbkFycmF5KENTUy5MaXN0cy5jb2xvcnMsIHByb3BlcnR5TmFtZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIFBhcnNlIHRoZSB2YWx1ZSBkYXRhIGZvciBlYWNoIHNob3J0aGFuZC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdHZhciBlbmRWYWx1ZSA9IHZhbHVlRGF0YVswXSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlYXNpbmcgPSB2YWx1ZURhdGFbMV0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSA9IHZhbHVlRGF0YVsyXTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoQ1NTLlJlZ0V4LmlzSGV4LnRlc3QoZW5kVmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIENvbnZlcnQgdGhlIGhleCBzdHJpbmdzIGludG8gdGhlaXIgUkdCIGNvbXBvbmVudCBhcnJheXMuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBjb2xvckNvbXBvbmVudHMgPSBbXCJSZWRcIiwgXCJHcmVlblwiLCBcIkJsdWVcIl0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZVJHQiA9IENTUy5WYWx1ZXMuaGV4VG9SZ2IoZW5kVmFsdWUpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZVJHQiA9IHN0YXJ0VmFsdWUgPyBDU1MuVmFsdWVzLmhleFRvUmdiKHN0YXJ0VmFsdWUpIDogdW5kZWZpbmVkO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogSW5qZWN0IHRoZSBSR0IgY29tcG9uZW50IHR3ZWVucyBpbnRvIHByb3BlcnRpZXNNYXAuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY29sb3JDb21wb25lbnRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRhdGFBcnJheSA9IFtlbmRWYWx1ZVJHQltpXV07XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChlYXNpbmcpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFBcnJheS5wdXNoKGVhc2luZyk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoc3RhcnRWYWx1ZVJHQiAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhQXJyYXkucHVzaChzdGFydFZhbHVlUkdCW2ldKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpeFByb3BlcnR5VmFsdWUocHJvcGVydHlOYW1lICsgY29sb3JDb21wb25lbnRzW2ldLCBkYXRhQXJyYXkpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIElmIHdlIGhhdmUgcmVwbGFjZWQgYSBzaG9ydGN1dCBjb2xvciB2YWx1ZSB0aGVuIGRvbid0IHVwZGF0ZSB0aGUgc3RhbmRhcmQgcHJvcGVydHkgbmFtZSAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0Zml4UHJvcGVydHlWYWx1ZShwcm9wZXJ0eU5hbWUsIHZhbHVlRGF0YSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIEFsb25nIHdpdGggaXRzIHByb3BlcnR5IGRhdGEsIHN0b3JlIGEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGl0c2VsZiBvbnRvIHR3ZWVuc0NvbnRhaW5lci4gKi9cclxuXHRcdFx0XHRcdFx0dHdlZW5zQ29udGFpbmVyLmVsZW1lbnQgPSBlbGVtZW50O1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0IENhbGwgUHVzaFxyXG5cdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdC8qIE5vdGU6IHR3ZWVuc0NvbnRhaW5lciBjYW4gYmUgZW1wdHkgaWYgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIGluIHRoaXMgY2FsbCdzIHByb3BlcnR5IG1hcCB3ZXJlIHNraXBwZWQgZHVlIHRvIG5vdFxyXG5cdFx0XHRcdFx0IGJlaW5nIHN1cHBvcnRlZCBieSB0aGUgYnJvd3Nlci4gVGhlIGVsZW1lbnQgcHJvcGVydHkgaXMgdXNlZCBmb3IgY2hlY2tpbmcgdGhhdCB0aGUgdHdlZW5zQ29udGFpbmVyIGhhcyBiZWVuIGFwcGVuZGVkIHRvLiAqL1xyXG5cdFx0XHRcdFx0aWYgKHR3ZWVuc0NvbnRhaW5lci5lbGVtZW50KSB7XHJcblx0XHRcdFx0XHRcdC8qIEFwcGx5IHRoZSBcInZlbG9jaXR5LWFuaW1hdGluZ1wiIGluZGljYXRvciBjbGFzcy4gKi9cclxuXHRcdFx0XHRcdFx0Q1NTLlZhbHVlcy5hZGRDbGFzcyhlbGVtZW50LCBcInZlbG9jaXR5LWFuaW1hdGluZ1wiKTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIFRoZSBjYWxsIGFycmF5IGhvdXNlcyB0aGUgdHdlZW5zQ29udGFpbmVycyBmb3IgZWFjaCBlbGVtZW50IGJlaW5nIGFuaW1hdGVkIGluIHRoZSBjdXJyZW50IGNhbGwuICovXHJcblx0XHRcdFx0XHRcdGNhbGwucHVzaCh0d2VlbnNDb250YWluZXIpO1xyXG5cclxuXHRcdFx0XHRcdFx0ZGF0YSA9IERhdGEoZWxlbWVudCk7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoZGF0YSkge1xyXG5cdFx0XHRcdFx0XHRcdC8qIFN0b3JlIHRoZSB0d2VlbnNDb250YWluZXIgYW5kIG9wdGlvbnMgaWYgd2UncmUgd29ya2luZyBvbiB0aGUgZGVmYXVsdCBlZmZlY3RzIHF1ZXVlLCBzbyB0aGF0IHRoZXkgY2FuIGJlIHVzZWQgYnkgdGhlIHJldmVyc2UgY29tbWFuZC4gKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAob3B0cy5xdWV1ZSA9PT0gXCJcIikge1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdGRhdGEudHdlZW5zQ29udGFpbmVyID0gdHdlZW5zQ29udGFpbmVyO1xyXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS5vcHRzID0gb3B0cztcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIFN3aXRjaCBvbiB0aGUgZWxlbWVudCdzIGFuaW1hdGluZyBmbGFnLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGRhdGEuaXNBbmltYXRpbmcgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBPbmNlIHRoZSBmaW5hbCBlbGVtZW50IGluIHRoaXMgY2FsbCdzIGVsZW1lbnQgc2V0IGhhcyBiZWVuIHByb2Nlc3NlZCwgcHVzaCB0aGUgY2FsbCBhcnJheSBvbnRvXHJcblx0XHRcdFx0XHRcdCBWZWxvY2l0eS5TdGF0ZS5jYWxscyBmb3IgdGhlIGFuaW1hdGlvbiB0aWNrIHRvIGltbWVkaWF0ZWx5IGJlZ2luIHByb2Nlc3NpbmcuICovXHJcblx0XHRcdFx0XHRcdGlmIChlbGVtZW50c0luZGV4ID09PSBlbGVtZW50c0xlbmd0aCAtIDEpIHtcclxuXHRcdFx0XHRcdFx0XHQvKiBBZGQgdGhlIGN1cnJlbnQgY2FsbCBwbHVzIGl0cyBhc3NvY2lhdGVkIG1ldGFkYXRhICh0aGUgZWxlbWVudCBzZXQgYW5kIHRoZSBjYWxsJ3Mgb3B0aW9ucykgb250byB0aGUgZ2xvYmFsIGNhbGwgY29udGFpbmVyLlxyXG5cdFx0XHRcdFx0XHRcdCBBbnl0aGluZyBvbiB0aGlzIGNhbGwgY29udGFpbmVyIGlzIHN1YmplY3RlZCB0byB0aWNrKCkgcHJvY2Vzc2luZy4gKi9cclxuXHRcdFx0XHRcdFx0XHRWZWxvY2l0eS5TdGF0ZS5jYWxscy5wdXNoKFtjYWxsLCBlbGVtZW50cywgb3B0cywgbnVsbCwgcHJvbWlzZURhdGEucmVzb2x2ZXIsIG51bGwsIDBdKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0LyogSWYgdGhlIGFuaW1hdGlvbiB0aWNrIGlzbid0IHJ1bm5pbmcsIHN0YXJ0IGl0LiAoVmVsb2NpdHkgc2h1dHMgaXQgb2ZmIHdoZW4gdGhlcmUgYXJlIG5vIGFjdGl2ZSBjYWxscyB0byBwcm9jZXNzLikgKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAoVmVsb2NpdHkuU3RhdGUuaXNUaWNraW5nID09PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0VmVsb2NpdHkuU3RhdGUuaXNUaWNraW5nID0gdHJ1ZTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBTdGFydCB0aGUgdGljayBsb29wLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0dGljaygpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRlbGVtZW50c0luZGV4Kys7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qIFdoZW4gdGhlIHF1ZXVlIG9wdGlvbiBpcyBzZXQgdG8gZmFsc2UsIHRoZSBjYWxsIHNraXBzIHRoZSBlbGVtZW50J3MgcXVldWUgYW5kIGZpcmVzIGltbWVkaWF0ZWx5LiAqL1xyXG5cdFx0XHRcdGlmIChvcHRzLnF1ZXVlID09PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0LyogU2luY2UgdGhpcyBidWlsZFF1ZXVlIGNhbGwgZG9lc24ndCByZXNwZWN0IHRoZSBlbGVtZW50J3MgZXhpc3RpbmcgcXVldWUgKHdoaWNoIGlzIHdoZXJlIGEgZGVsYXkgb3B0aW9uIHdvdWxkIGhhdmUgYmVlbiBhcHBlbmRlZCksXHJcblx0XHRcdFx0XHQgd2UgbWFudWFsbHkgaW5qZWN0IHRoZSBkZWxheSBwcm9wZXJ0eSBoZXJlIHdpdGggYW4gZXhwbGljaXQgc2V0VGltZW91dC4gKi9cclxuXHRcdFx0XHRcdGlmIChvcHRzLmRlbGF5KSB7XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBUZW1wb3JhcmlseSBzdG9yZSBkZWxheWVkIGVsZW1lbnRzIHRvIGZhY2lsaXRhdGUgYWNjZXNzIGZvciBnbG9iYWwgcGF1c2UvcmVzdW1lICovXHJcblx0XHRcdFx0XHRcdHZhciBjYWxsSW5kZXggPSBWZWxvY2l0eS5TdGF0ZS5kZWxheWVkRWxlbWVudHMuY291bnQrKztcclxuXHRcdFx0XHRcdFx0VmVsb2NpdHkuU3RhdGUuZGVsYXllZEVsZW1lbnRzW2NhbGxJbmRleF0gPSBlbGVtZW50O1xyXG5cclxuXHRcdFx0XHRcdFx0dmFyIGRlbGF5Q29tcGxldGUgPSAoZnVuY3Rpb24oaW5kZXgpIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBDbGVhciB0aGUgdGVtcG9yYXJ5IGVsZW1lbnQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdFZlbG9jaXR5LlN0YXRlLmRlbGF5ZWRFbGVtZW50c1tpbmRleF0gPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBGaW5hbGx5LCBpc3N1ZSB0aGUgY2FsbCAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0YnVpbGRRdWV1ZSgpO1xyXG5cdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdH0pKGNhbGxJbmRleCk7XHJcblxyXG5cdFx0XHRcdFx0XHREYXRhKGVsZW1lbnQpLmRlbGF5QmVnaW4gPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xyXG5cdFx0XHRcdFx0XHREYXRhKGVsZW1lbnQpLmRlbGF5ID0gcGFyc2VGbG9hdChvcHRzLmRlbGF5KTtcclxuXHRcdFx0XHRcdFx0RGF0YShlbGVtZW50KS5kZWxheVRpbWVyID0ge1xyXG5cdFx0XHRcdFx0XHRcdHNldFRpbWVvdXQ6IHNldFRpbWVvdXQoYnVpbGRRdWV1ZSwgcGFyc2VGbG9hdChvcHRzLmRlbGF5KSksXHJcblx0XHRcdFx0XHRcdFx0bmV4dDogZGVsYXlDb21wbGV0ZVxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0YnVpbGRRdWV1ZSgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0LyogT3RoZXJ3aXNlLCB0aGUgY2FsbCB1bmRlcmdvZXMgZWxlbWVudCBxdWV1ZWluZyBhcyBub3JtYWwuICovXHJcblx0XHRcdFx0XHQvKiBOb3RlOiBUbyBpbnRlcm9wZXJhdGUgd2l0aCBqUXVlcnksIFZlbG9jaXR5IHVzZXMgalF1ZXJ5J3Mgb3duICQucXVldWUoKSBzdGFjayBmb3IgcXVldWluZyBsb2dpYy4gKi9cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0JC5xdWV1ZShlbGVtZW50LCBvcHRzLnF1ZXVlLCBmdW5jdGlvbihuZXh0LCBjbGVhclF1ZXVlKSB7XHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZSBjbGVhclF1ZXVlIGZsYWcgd2FzIHBhc3NlZCBpbiBieSB0aGUgc3RvcCBjb21tYW5kLCByZXNvbHZlIHRoaXMgY2FsbCdzIHByb21pc2UuIChQcm9taXNlcyBjYW4gb25seSBiZSByZXNvbHZlZCBvbmNlLFxyXG5cdFx0XHRcdFx0XHQgc28gaXQncyBmaW5lIGlmIHRoaXMgaXMgcmVwZWF0ZWRseSB0cmlnZ2VyZWQgZm9yIGVhY2ggZWxlbWVudCBpbiB0aGUgYXNzb2NpYXRlZCBjYWxsLikgKi9cclxuXHRcdFx0XHRcdFx0aWYgKGNsZWFyUXVldWUgPT09IHRydWUpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAocHJvbWlzZURhdGEucHJvbWlzZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0cHJvbWlzZURhdGEucmVzb2x2ZXIoZWxlbWVudHMpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0LyogRG8gbm90IGNvbnRpbnVlIHdpdGggYW5pbWF0aW9uIHF1ZXVlaW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBUaGlzIGZsYWcgaW5kaWNhdGVzIHRvIHRoZSB1cGNvbWluZyBjb21wbGV0ZUNhbGwoKSBmdW5jdGlvbiB0aGF0IHRoaXMgcXVldWUgZW50cnkgd2FzIGluaXRpYXRlZCBieSBWZWxvY2l0eS5cclxuXHRcdFx0XHRcdFx0IFNlZSBjb21wbGV0ZUNhbGwoKSBmb3IgZnVydGhlciBkZXRhaWxzLiAqL1xyXG5cdFx0XHRcdFx0XHRWZWxvY2l0eS52ZWxvY2l0eVF1ZXVlRW50cnlGbGFnID0gdHJ1ZTtcclxuXHJcblx0XHRcdFx0XHRcdGJ1aWxkUXVldWUobmV4dCk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgQXV0by1EZXF1ZXVpbmdcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKiBBcyBwZXIgalF1ZXJ5J3MgJC5xdWV1ZSgpIGJlaGF2aW9yLCB0byBmaXJlIHRoZSBmaXJzdCBub24tY3VzdG9tLXF1ZXVlIGVudHJ5IG9uIGFuIGVsZW1lbnQsIHRoZSBlbGVtZW50XHJcblx0XHRcdFx0IG11c3QgYmUgZGVxdWV1ZWQgaWYgaXRzIHF1ZXVlIHN0YWNrIGNvbnNpc3RzICpzb2xlbHkqIG9mIHRoZSBjdXJyZW50IGNhbGwuIChUaGlzIGNhbiBiZSBkZXRlcm1pbmVkIGJ5IGNoZWNraW5nXHJcblx0XHRcdFx0IGZvciB0aGUgXCJpbnByb2dyZXNzXCIgaXRlbSB0aGF0IGpRdWVyeSBwcmVwZW5kcyB0byBhY3RpdmUgcXVldWUgc3RhY2sgYXJyYXlzLikgUmVnYXJkbGVzcywgd2hlbmV2ZXIgdGhlIGVsZW1lbnQnc1xyXG5cdFx0XHRcdCBxdWV1ZSBpcyBmdXJ0aGVyIGFwcGVuZGVkIHdpdGggYWRkaXRpb25hbCBpdGVtcyAtLSBpbmNsdWRpbmcgJC5kZWxheSgpJ3Mgb3IgZXZlbiAkLmFuaW1hdGUoKSBjYWxscywgdGhlIHF1ZXVlJ3NcclxuXHRcdFx0XHQgZmlyc3QgZW50cnkgaXMgYXV0b21hdGljYWxseSBmaXJlZC4gVGhpcyBiZWhhdmlvciBjb250cmFzdHMgdGhhdCBvZiBjdXN0b20gcXVldWVzLCB3aGljaCBuZXZlciBhdXRvLWZpcmUuICovXHJcblx0XHRcdFx0LyogTm90ZTogV2hlbiBhbiBlbGVtZW50IHNldCBpcyBiZWluZyBzdWJqZWN0ZWQgdG8gYSBub24tcGFyYWxsZWwgVmVsb2NpdHkgY2FsbCwgdGhlIGFuaW1hdGlvbiB3aWxsIG5vdCBiZWdpbiB1bnRpbFxyXG5cdFx0XHRcdCBlYWNoIG9uZSBvZiB0aGUgZWxlbWVudHMgaW4gdGhlIHNldCBoYXMgcmVhY2hlZCB0aGUgZW5kIG9mIGl0cyBpbmRpdmlkdWFsbHkgcHJlLWV4aXN0aW5nIHF1ZXVlIGNoYWluLiAqL1xyXG5cdFx0XHRcdC8qIE5vdGU6IFVuZm9ydHVuYXRlbHksIG1vc3QgcGVvcGxlIGRvbid0IGZ1bGx5IGdyYXNwIGpRdWVyeSdzIHBvd2VyZnVsLCB5ZXQgcXVpcmt5LCAkLnF1ZXVlKCkgZnVuY3Rpb24uXHJcblx0XHRcdFx0IExlYW4gbW9yZSBoZXJlOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNTgxNTgvY2FuLXNvbWVib2R5LWV4cGxhaW4tanF1ZXJ5LXF1ZXVlLXRvLW1lICovXHJcblx0XHRcdFx0aWYgKChvcHRzLnF1ZXVlID09PSBcIlwiIHx8IG9wdHMucXVldWUgPT09IFwiZnhcIikgJiYgJC5xdWV1ZShlbGVtZW50KVswXSAhPT0gXCJpbnByb2dyZXNzXCIpIHtcclxuXHRcdFx0XHRcdCQuZGVxdWV1ZShlbGVtZW50KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgRWxlbWVudCBTZXQgSXRlcmF0aW9uXHJcblx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdC8qIElmIHRoZSBcIm5vZGVUeXBlXCIgcHJvcGVydHkgZXhpc3RzIG9uIHRoZSBlbGVtZW50cyB2YXJpYWJsZSwgd2UncmUgYW5pbWF0aW5nIGEgc2luZ2xlIGVsZW1lbnQuXHJcblx0XHRcdCBQbGFjZSBpdCBpbiBhbiBhcnJheSBzbyB0aGF0ICQuZWFjaCgpIGNhbiBpdGVyYXRlIG92ZXIgaXQuICovXHJcblx0XHRcdCQuZWFjaChlbGVtZW50cywgZnVuY3Rpb24oaSwgZWxlbWVudCkge1xyXG5cdFx0XHRcdC8qIEVuc3VyZSBlYWNoIGVsZW1lbnQgaW4gYSBzZXQgaGFzIGEgbm9kZVR5cGUgKGlzIGEgcmVhbCBlbGVtZW50KSB0byBhdm9pZCB0aHJvd2luZyBlcnJvcnMuICovXHJcblx0XHRcdFx0aWYgKFR5cGUuaXNOb2RlKGVsZW1lbnQpKSB7XHJcblx0XHRcdFx0XHRwcm9jZXNzRWxlbWVudChlbGVtZW50LCBpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgT3B0aW9uOiBMb29wXHJcblx0XHRcdCAqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHQvKiBUaGUgbG9vcCBvcHRpb24gYWNjZXB0cyBhbiBpbnRlZ2VyIGluZGljYXRpbmcgaG93IG1hbnkgdGltZXMgdGhlIGVsZW1lbnQgc2hvdWxkIGxvb3AgYmV0d2VlbiB0aGUgdmFsdWVzIGluIHRoZVxyXG5cdFx0XHQgY3VycmVudCBjYWxsJ3MgcHJvcGVydGllcyBtYXAgYW5kIHRoZSBlbGVtZW50J3MgcHJvcGVydHkgdmFsdWVzIHByaW9yIHRvIHRoaXMgY2FsbC4gKi9cclxuXHRcdFx0LyogTm90ZTogVGhlIGxvb3Agb3B0aW9uJ3MgbG9naWMgaXMgcGVyZm9ybWVkIGhlcmUgLS0gYWZ0ZXIgZWxlbWVudCBwcm9jZXNzaW5nIC0tIGJlY2F1c2UgdGhlIGN1cnJlbnQgY2FsbCBuZWVkc1xyXG5cdFx0XHQgdG8gdW5kZXJnbyBpdHMgcXVldWUgaW5zZXJ0aW9uIHByaW9yIHRvIHRoZSBsb29wIG9wdGlvbiBnZW5lcmF0aW5nIGl0cyBzZXJpZXMgb2YgY29uc3RpdHVlbnQgXCJyZXZlcnNlXCIgY2FsbHMsXHJcblx0XHRcdCB3aGljaCBjaGFpbiBhZnRlciB0aGUgY3VycmVudCBjYWxsLiBUd28gcmV2ZXJzZSBjYWxscyAodHdvIFwiYWx0ZXJuYXRpb25zXCIpIGNvbnN0aXR1dGUgb25lIGxvb3AuICovXHJcblx0XHRcdG9wdHMgPSAkLmV4dGVuZCh7fSwgVmVsb2NpdHkuZGVmYXVsdHMsIG9wdGlvbnMpO1xyXG5cdFx0XHRvcHRzLmxvb3AgPSBwYXJzZUludChvcHRzLmxvb3AsIDEwKTtcclxuXHRcdFx0dmFyIHJldmVyc2VDYWxsc0NvdW50ID0gKG9wdHMubG9vcCAqIDIpIC0gMTtcclxuXHJcblx0XHRcdGlmIChvcHRzLmxvb3ApIHtcclxuXHRcdFx0XHQvKiBEb3VibGUgdGhlIGxvb3AgY291bnQgdG8gY29udmVydCBpdCBpbnRvIGl0cyBhcHByb3ByaWF0ZSBudW1iZXIgb2YgXCJyZXZlcnNlXCIgY2FsbHMuXHJcblx0XHRcdFx0IFN1YnRyYWN0IDEgZnJvbSB0aGUgcmVzdWx0aW5nIHZhbHVlIHNpbmNlIHRoZSBjdXJyZW50IGNhbGwgaXMgaW5jbHVkZWQgaW4gdGhlIHRvdGFsIGFsdGVybmF0aW9uIGNvdW50LiAqL1xyXG5cdFx0XHRcdGZvciAodmFyIHggPSAwOyB4IDwgcmV2ZXJzZUNhbGxzQ291bnQ7IHgrKykge1xyXG5cdFx0XHRcdFx0LyogU2luY2UgdGhlIGxvZ2ljIGZvciB0aGUgcmV2ZXJzZSBhY3Rpb24gb2NjdXJzIGluc2lkZSBRdWV1ZWluZyBhbmQgdGhlcmVmb3JlIHRoaXMgY2FsbCdzIG9wdGlvbnMgb2JqZWN0XHJcblx0XHRcdFx0XHQgaXNuJ3QgcGFyc2VkIHVudGlsIHRoZW4gYXMgd2VsbCwgdGhlIGN1cnJlbnQgY2FsbCdzIGRlbGF5IG9wdGlvbiBtdXN0IGJlIGV4cGxpY2l0bHkgcGFzc2VkIGludG8gdGhlIHJldmVyc2VcclxuXHRcdFx0XHRcdCBjYWxsIHNvIHRoYXQgdGhlIGRlbGF5IGxvZ2ljIHRoYXQgb2NjdXJzIGluc2lkZSAqUHJlLVF1ZXVlaW5nKiBjYW4gcHJvY2VzcyBpdC4gKi9cclxuXHRcdFx0XHRcdHZhciByZXZlcnNlT3B0aW9ucyA9IHtcclxuXHRcdFx0XHRcdFx0ZGVsYXk6IG9wdHMuZGVsYXksXHJcblx0XHRcdFx0XHRcdHByb2dyZXNzOiBvcHRzLnByb2dyZXNzXHJcblx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdC8qIElmIGEgY29tcGxldGUgY2FsbGJhY2sgd2FzIHBhc3NlZCBpbnRvIHRoaXMgY2FsbCwgdHJhbnNmZXIgaXQgdG8gdGhlIGxvb3AgcmVkaXJlY3QncyBmaW5hbCBcInJldmVyc2VcIiBjYWxsXHJcblx0XHRcdFx0XHQgc28gdGhhdCBpdCdzIHRyaWdnZXJlZCB3aGVuIHRoZSBlbnRpcmUgcmVkaXJlY3QgaXMgY29tcGxldGUgKGFuZCBub3Qgd2hlbiB0aGUgdmVyeSBmaXJzdCBhbmltYXRpb24gaXMgY29tcGxldGUpLiAqL1xyXG5cdFx0XHRcdFx0aWYgKHggPT09IHJldmVyc2VDYWxsc0NvdW50IC0gMSkge1xyXG5cdFx0XHRcdFx0XHRyZXZlcnNlT3B0aW9ucy5kaXNwbGF5ID0gb3B0cy5kaXNwbGF5O1xyXG5cdFx0XHRcdFx0XHRyZXZlcnNlT3B0aW9ucy52aXNpYmlsaXR5ID0gb3B0cy52aXNpYmlsaXR5O1xyXG5cdFx0XHRcdFx0XHRyZXZlcnNlT3B0aW9ucy5jb21wbGV0ZSA9IG9wdHMuY29tcGxldGU7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0YW5pbWF0ZShlbGVtZW50cywgXCJyZXZlcnNlXCIsIHJldmVyc2VPcHRpb25zKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qKioqKioqKioqKioqKipcclxuXHRcdFx0IENoYWluaW5nXHJcblx0XHRcdCAqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHQvKiBSZXR1cm4gdGhlIGVsZW1lbnRzIGJhY2sgdG8gdGhlIGNhbGwgY2hhaW4sIHdpdGggd3JhcHBlZCBlbGVtZW50cyB0YWtpbmcgcHJlY2VkZW5jZSBpbiBjYXNlIFZlbG9jaXR5IHdhcyBjYWxsZWQgdmlhIHRoZSAkLmZuLiBleHRlbnNpb24uICovXHJcblx0XHRcdHJldHVybiBnZXRDaGFpbigpO1xyXG5cdFx0fTtcclxuXHJcblx0XHQvKiBUdXJuIFZlbG9jaXR5IGludG8gdGhlIGFuaW1hdGlvbiBmdW5jdGlvbiwgZXh0ZW5kZWQgd2l0aCB0aGUgcHJlLWV4aXN0aW5nIFZlbG9jaXR5IG9iamVjdC4gKi9cclxuXHRcdFZlbG9jaXR5ID0gJC5leHRlbmQoYW5pbWF0ZSwgVmVsb2NpdHkpO1xyXG5cdFx0LyogRm9yIGxlZ2FjeSBzdXBwb3J0LCBhbHNvIGV4cG9zZSB0aGUgbGl0ZXJhbCBhbmltYXRlIG1ldGhvZC4gKi9cclxuXHRcdFZlbG9jaXR5LmFuaW1hdGUgPSBhbmltYXRlO1xyXG5cclxuXHRcdC8qKioqKioqKioqKioqKlxyXG5cdFx0IFRpbWluZ1xyXG5cdFx0ICoqKioqKioqKioqKioqL1xyXG5cclxuXHRcdC8qIFRpY2tlciBmdW5jdGlvbi4gKi9cclxuXHRcdHZhciB0aWNrZXIgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IHJBRlNoaW07XHJcblxyXG5cdFx0LyogSW5hY3RpdmUgYnJvd3NlciB0YWJzIHBhdXNlIHJBRiwgd2hpY2ggcmVzdWx0cyBpbiBhbGwgYWN0aXZlIGFuaW1hdGlvbnMgaW1tZWRpYXRlbHkgc3ByaW50aW5nIHRvIHRoZWlyIGNvbXBsZXRpb24gc3RhdGVzIHdoZW4gdGhlIHRhYiByZWZvY3VzZXMuXHJcblx0XHQgVG8gZ2V0IGFyb3VuZCB0aGlzLCB3ZSBkeW5hbWljYWxseSBzd2l0Y2ggckFGIHRvIHNldFRpbWVvdXQgKHdoaWNoIHRoZSBicm93c2VyICpkb2Vzbid0KiBwYXVzZSkgd2hlbiB0aGUgdGFiIGxvc2VzIGZvY3VzLiBXZSBza2lwIHRoaXMgZm9yIG1vYmlsZVxyXG5cdFx0IGRldmljZXMgdG8gYXZvaWQgd2FzdGluZyBiYXR0ZXJ5IHBvd2VyIG9uIGluYWN0aXZlIHRhYnMuICovXHJcblx0XHQvKiBOb3RlOiBUYWIgZm9jdXMgZGV0ZWN0aW9uIGRvZXNuJ3Qgd29yayBvbiBvbGRlciB2ZXJzaW9ucyBvZiBJRSwgYnV0IHRoYXQncyBva2F5IHNpbmNlIHRoZXkgZG9uJ3Qgc3VwcG9ydCByQUYgdG8gYmVnaW4gd2l0aC4gKi9cclxuXHRcdGlmICghVmVsb2NpdHkuU3RhdGUuaXNNb2JpbGUgJiYgZG9jdW1lbnQuaGlkZGVuICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0dmFyIHVwZGF0ZVRpY2tlciA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdC8qIFJlYXNzaWduIHRoZSByQUYgZnVuY3Rpb24gKHdoaWNoIHRoZSBnbG9iYWwgdGljaygpIGZ1bmN0aW9uIHVzZXMpIGJhc2VkIG9uIHRoZSB0YWIncyBmb2N1cyBzdGF0ZS4gKi9cclxuXHRcdFx0XHRpZiAoZG9jdW1lbnQuaGlkZGVuKSB7XHJcblx0XHRcdFx0XHR0aWNrZXIgPSBmdW5jdGlvbihjYWxsYmFjaykge1xyXG5cdFx0XHRcdFx0XHQvKiBUaGUgdGljayBmdW5jdGlvbiBuZWVkcyBhIHRydXRoeSBmaXJzdCBhcmd1bWVudCBpbiBvcmRlciB0byBwYXNzIGl0cyBpbnRlcm5hbCB0aW1lc3RhbXAgY2hlY2suICovXHJcblx0XHRcdFx0XHRcdHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHRcdGNhbGxiYWNrKHRydWUpO1xyXG5cdFx0XHRcdFx0XHR9LCAxNik7XHJcblx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdC8qIFRoZSByQUYgbG9vcCBoYXMgYmVlbiBwYXVzZWQgYnkgdGhlIGJyb3dzZXIsIHNvIHdlIG1hbnVhbGx5IHJlc3RhcnQgdGhlIHRpY2suICovXHJcblx0XHRcdFx0XHR0aWNrKCk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHRpY2tlciA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgckFGU2hpbTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHQvKiBQYWdlIGNvdWxkIGJlIHNpdHRpbmcgaW4gdGhlIGJhY2tncm91bmQgYXQgdGhpcyB0aW1lIChpLmUuIG9wZW5lZCBhcyBuZXcgdGFiKSBzbyBtYWtpbmcgc3VyZSB3ZSB1c2UgY29ycmVjdCB0aWNrZXIgZnJvbSB0aGUgc3RhcnQgKi9cclxuXHRcdFx0dXBkYXRlVGlja2VyKCk7XHJcblxyXG5cdFx0XHQvKiBBbmQgdGhlbiBydW4gY2hlY2sgYWdhaW4gZXZlcnkgdGltZSB2aXNpYmlsaXR5IGNoYW5nZXMgKi9cclxuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIiwgdXBkYXRlVGlja2VyKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKioqKioqKioqKioqXHJcblx0XHQgVGlja1xyXG5cdFx0ICoqKioqKioqKioqKi9cclxuXHJcblx0XHQvKiBOb3RlOiBBbGwgY2FsbHMgdG8gVmVsb2NpdHkgYXJlIHB1c2hlZCB0byB0aGUgVmVsb2NpdHkuU3RhdGUuY2FsbHMgYXJyYXksIHdoaWNoIGlzIGZ1bGx5IGl0ZXJhdGVkIHRocm91Z2ggdXBvbiBlYWNoIHRpY2suICovXHJcblx0XHRmdW5jdGlvbiB0aWNrKHRpbWVzdGFtcCkge1xyXG5cdFx0XHQvKiBBbiBlbXB0eSB0aW1lc3RhbXAgYXJndW1lbnQgaW5kaWNhdGVzIHRoYXQgdGhpcyBpcyB0aGUgZmlyc3QgdGljayBvY2N1cmVuY2Ugc2luY2UgdGlja2luZyB3YXMgdHVybmVkIG9uLlxyXG5cdFx0XHQgV2UgbGV2ZXJhZ2UgdGhpcyBtZXRhZGF0YSB0byBmdWxseSBpZ25vcmUgdGhlIGZpcnN0IHRpY2sgcGFzcyBzaW5jZSBSQUYncyBpbml0aWFsIHBhc3MgaXMgZmlyZWQgd2hlbmV2ZXJcclxuXHRcdFx0IHRoZSBicm93c2VyJ3MgbmV4dCB0aWNrIHN5bmMgdGltZSBvY2N1cnMsIHdoaWNoIHJlc3VsdHMgaW4gdGhlIGZpcnN0IGVsZW1lbnRzIHN1YmplY3RlZCB0byBWZWxvY2l0eVxyXG5cdFx0XHQgY2FsbHMgYmVpbmcgYW5pbWF0ZWQgb3V0IG9mIHN5bmMgd2l0aCBhbnkgZWxlbWVudHMgYW5pbWF0ZWQgaW1tZWRpYXRlbHkgdGhlcmVhZnRlci4gSW4gc2hvcnQsIHdlIGlnbm9yZVxyXG5cdFx0XHQgdGhlIGZpcnN0IFJBRiB0aWNrIHBhc3Mgc28gdGhhdCBlbGVtZW50cyBiZWluZyBpbW1lZGlhdGVseSBjb25zZWN1dGl2ZWx5IGFuaW1hdGVkIC0tIGluc3RlYWQgb2Ygc2ltdWx0YW5lb3VzbHkgYW5pbWF0ZWRcclxuXHRcdFx0IGJ5IHRoZSBzYW1lIFZlbG9jaXR5IGNhbGwgLS0gYXJlIHByb3Blcmx5IGJhdGNoZWQgaW50byB0aGUgc2FtZSBpbml0aWFsIFJBRiB0aWNrIGFuZCBjb25zZXF1ZW50bHkgcmVtYWluIGluIHN5bmMgdGhlcmVhZnRlci4gKi9cclxuXHRcdFx0aWYgKHRpbWVzdGFtcCkge1xyXG5cdFx0XHRcdC8qIFdlIG5vcm1hbGx5IHVzZSBSQUYncyBoaWdoIHJlc29sdXRpb24gdGltZXN0YW1wIGJ1dCBhcyBpdCBjYW4gYmUgc2lnbmlmaWNhbnRseSBvZmZzZXQgd2hlbiB0aGUgYnJvd3NlciBpc1xyXG5cdFx0XHRcdCB1bmRlciBoaWdoIHN0cmVzcyB3ZSBnaXZlIHRoZSBvcHRpb24gZm9yIGNob3BwaW5lc3Mgb3ZlciBhbGxvd2luZyB0aGUgYnJvd3NlciB0byBkcm9wIGh1Z2UgY2h1bmtzIG9mIGZyYW1lcy5cclxuXHRcdFx0XHQgV2UgdXNlIHBlcmZvcm1hbmNlLm5vdygpIGFuZCBzaGltIGl0IGlmIGl0IGRvZXNuJ3QgZXhpc3QgZm9yIHdoZW4gdGhlIHRhYiBpcyBoaWRkZW4uICovXHJcblx0XHRcdFx0dmFyIHRpbWVDdXJyZW50ID0gVmVsb2NpdHkudGltZXN0YW1wICYmIHRpbWVzdGFtcCAhPT0gdHJ1ZSA/IHRpbWVzdGFtcCA6IHBlcmZvcm1hbmNlLm5vdygpO1xyXG5cclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgQ2FsbCBJdGVyYXRpb25cclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdHZhciBjYWxsc0xlbmd0aCA9IFZlbG9jaXR5LlN0YXRlLmNhbGxzLmxlbmd0aDtcclxuXHJcblx0XHRcdFx0LyogVG8gc3BlZWQgdXAgaXRlcmF0aW5nIG92ZXIgdGhpcyBhcnJheSwgaXQgaXMgY29tcGFjdGVkIChmYWxzZXkgaXRlbXMgLS0gY2FsbHMgdGhhdCBoYXZlIGNvbXBsZXRlZCAtLSBhcmUgcmVtb3ZlZClcclxuXHRcdFx0XHQgd2hlbiBpdHMgbGVuZ3RoIGhhcyBiYWxsb29uZWQgdG8gYSBwb2ludCB0aGF0IGNhbiBpbXBhY3QgdGljayBwZXJmb3JtYW5jZS4gVGhpcyBvbmx5IGJlY29tZXMgbmVjZXNzYXJ5IHdoZW4gYW5pbWF0aW9uXHJcblx0XHRcdFx0IGhhcyBiZWVuIGNvbnRpbnVvdXMgd2l0aCBtYW55IGVsZW1lbnRzIG92ZXIgYSBsb25nIHBlcmlvZCBvZiB0aW1lOyB3aGVuZXZlciBhbGwgYWN0aXZlIGNhbGxzIGFyZSBjb21wbGV0ZWQsIGNvbXBsZXRlQ2FsbCgpIGNsZWFycyBWZWxvY2l0eS5TdGF0ZS5jYWxscy4gKi9cclxuXHRcdFx0XHRpZiAoY2FsbHNMZW5ndGggPiAxMDAwMCkge1xyXG5cdFx0XHRcdFx0VmVsb2NpdHkuU3RhdGUuY2FsbHMgPSBjb21wYWN0U3BhcnNlQXJyYXkoVmVsb2NpdHkuU3RhdGUuY2FsbHMpO1xyXG5cdFx0XHRcdFx0Y2FsbHNMZW5ndGggPSBWZWxvY2l0eS5TdGF0ZS5jYWxscy5sZW5ndGg7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKiBJdGVyYXRlIHRocm91Z2ggZWFjaCBhY3RpdmUgY2FsbC4gKi9cclxuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGNhbGxzTGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdC8qIFdoZW4gYSBWZWxvY2l0eSBjYWxsIGlzIGNvbXBsZXRlZCwgaXRzIFZlbG9jaXR5LlN0YXRlLmNhbGxzIGVudHJ5IGlzIHNldCB0byBmYWxzZS4gQ29udGludWUgb24gdG8gdGhlIG5leHQgY2FsbC4gKi9cclxuXHRcdFx0XHRcdGlmICghVmVsb2NpdHkuU3RhdGUuY2FsbHNbaV0pIHtcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0IENhbGwtV2lkZSBWYXJpYWJsZXNcclxuXHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0dmFyIGNhbGxDb250YWluZXIgPSBWZWxvY2l0eS5TdGF0ZS5jYWxsc1tpXSxcclxuXHRcdFx0XHRcdFx0XHRjYWxsID0gY2FsbENvbnRhaW5lclswXSxcclxuXHRcdFx0XHRcdFx0XHRvcHRzID0gY2FsbENvbnRhaW5lclsyXSxcclxuXHRcdFx0XHRcdFx0XHR0aW1lU3RhcnQgPSBjYWxsQ29udGFpbmVyWzNdLFxyXG5cdFx0XHRcdFx0XHRcdGZpcnN0VGljayA9ICF0aW1lU3RhcnQsXHJcblx0XHRcdFx0XHRcdFx0dHdlZW5EdW1teVZhbHVlID0gbnVsbCxcclxuXHRcdFx0XHRcdFx0XHRwYXVzZU9iamVjdCA9IGNhbGxDb250YWluZXJbNV0sXHJcblx0XHRcdFx0XHRcdFx0bWlsbGlzZWNvbmRzRWxsYXBzZWQgPSBjYWxsQ29udGFpbmVyWzZdO1xyXG5cclxuXHJcblxyXG5cdFx0XHRcdFx0LyogSWYgdGltZVN0YXJ0IGlzIHVuZGVmaW5lZCwgdGhlbiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRoYXQgdGhpcyBjYWxsIGhhcyBiZWVuIHByb2Nlc3NlZCBieSB0aWNrKCkuXHJcblx0XHRcdFx0XHQgV2UgYXNzaWduIHRpbWVTdGFydCBub3cgc28gdGhhdCBpdHMgdmFsdWUgaXMgYXMgY2xvc2UgdG8gdGhlIHJlYWwgYW5pbWF0aW9uIHN0YXJ0IHRpbWUgYXMgcG9zc2libGUuXHJcblx0XHRcdFx0XHQgKENvbnZlcnNlbHksIGhhZCB0aW1lU3RhcnQgYmVlbiBkZWZpbmVkIHdoZW4gdGhpcyBjYWxsIHdhcyBhZGRlZCB0byBWZWxvY2l0eS5TdGF0ZS5jYWxscywgdGhlIGRlbGF5XHJcblx0XHRcdFx0XHQgYmV0d2VlbiB0aGF0IHRpbWUgYW5kIG5vdyB3b3VsZCBjYXVzZSB0aGUgZmlyc3QgZmV3IGZyYW1lcyBvZiB0aGUgdHdlZW4gdG8gYmUgc2tpcHBlZCBzaW5jZVxyXG5cdFx0XHRcdFx0IHBlcmNlbnRDb21wbGV0ZSBpcyBjYWxjdWxhdGVkIHJlbGF0aXZlIHRvIHRpbWVTdGFydC4pICovXHJcblx0XHRcdFx0XHQvKiBGdXJ0aGVyLCBzdWJ0cmFjdCAxNm1zICh0aGUgYXBwcm94aW1hdGUgcmVzb2x1dGlvbiBvZiBSQUYpIGZyb20gdGhlIGN1cnJlbnQgdGltZSB2YWx1ZSBzbyB0aGF0IHRoZVxyXG5cdFx0XHRcdFx0IGZpcnN0IHRpY2sgaXRlcmF0aW9uIGlzbid0IHdhc3RlZCBieSBhbmltYXRpbmcgYXQgMCUgdHdlZW4gY29tcGxldGlvbiwgd2hpY2ggd291bGQgcHJvZHVjZSB0aGVcclxuXHRcdFx0XHRcdCBzYW1lIHN0eWxlIHZhbHVlIGFzIHRoZSBlbGVtZW50J3MgY3VycmVudCB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdGlmICghdGltZVN0YXJ0KSB7XHJcblx0XHRcdFx0XHRcdHRpbWVTdGFydCA9IFZlbG9jaXR5LlN0YXRlLmNhbGxzW2ldWzNdID0gdGltZUN1cnJlbnQgLSAxNjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKiBJZiBhIHBhdXNlIG9iamVjdCBpcyBwcmVzZW50LCBza2lwIHByb2Nlc3NpbmcgdW5sZXNzIGl0IGhhcyBiZWVuIHNldCB0byByZXN1bWUgKi9cclxuXHRcdFx0XHRcdGlmIChwYXVzZU9iamVjdCkge1xyXG5cdFx0XHRcdFx0XHRpZiAocGF1c2VPYmplY3QucmVzdW1lID09PSB0cnVlKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogVXBkYXRlIHRoZSB0aW1lIHN0YXJ0IHRvIGFjY29tb2RhdGUgdGhlIHBhdXNlZCBjb21wbGV0aW9uIGFtb3VudCAqL1xyXG5cdFx0XHRcdFx0XHRcdHRpbWVTdGFydCA9IGNhbGxDb250YWluZXJbM10gPSBNYXRoLnJvdW5kKHRpbWVDdXJyZW50IC0gbWlsbGlzZWNvbmRzRWxsYXBzZWQgLSAxNik7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIFJlbW92ZSBwYXVzZSBvYmplY3QgYWZ0ZXIgcHJvY2Vzc2luZyAqL1xyXG5cdFx0XHRcdFx0XHRcdGNhbGxDb250YWluZXJbNV0gPSBudWxsO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0bWlsbGlzZWNvbmRzRWxsYXBzZWQgPSBjYWxsQ29udGFpbmVyWzZdID0gdGltZUN1cnJlbnQgLSB0aW1lU3RhcnQ7XHJcblxyXG5cdFx0XHRcdFx0LyogVGhlIHR3ZWVuJ3MgY29tcGxldGlvbiBwZXJjZW50YWdlIGlzIHJlbGF0aXZlIHRvIHRoZSB0d2VlbidzIHN0YXJ0IHRpbWUsIG5vdCB0aGUgdHdlZW4ncyBzdGFydCB2YWx1ZVxyXG5cdFx0XHRcdFx0ICh3aGljaCB3b3VsZCByZXN1bHQgaW4gdW5wcmVkaWN0YWJsZSB0d2VlbiBkdXJhdGlvbnMgc2luY2UgSmF2YVNjcmlwdCdzIHRpbWVycyBhcmUgbm90IHBhcnRpY3VsYXJseSBhY2N1cmF0ZSkuXHJcblx0XHRcdFx0XHQgQWNjb3JkaW5nbHksIHdlIGVuc3VyZSB0aGF0IHBlcmNlbnRDb21wbGV0ZSBkb2VzIG5vdCBleGNlZWQgMS4gKi9cclxuXHRcdFx0XHRcdHZhciBwZXJjZW50Q29tcGxldGUgPSBNYXRoLm1pbigobWlsbGlzZWNvbmRzRWxsYXBzZWQpIC8gb3B0cy5kdXJhdGlvbiwgMSk7XHJcblxyXG5cdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdCBFbGVtZW50IEl0ZXJhdGlvblxyXG5cdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0LyogRm9yIGV2ZXJ5IGNhbGwsIGl0ZXJhdGUgdGhyb3VnaCBlYWNoIG9mIHRoZSBlbGVtZW50cyBpbiBpdHMgc2V0LiAqL1xyXG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDAsIGNhbGxMZW5ndGggPSBjYWxsLmxlbmd0aDsgaiA8IGNhbGxMZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHR2YXIgdHdlZW5zQ29udGFpbmVyID0gY2FsbFtqXSxcclxuXHRcdFx0XHRcdFx0XHRcdGVsZW1lbnQgPSB0d2VlbnNDb250YWluZXIuZWxlbWVudDtcclxuXHJcblx0XHRcdFx0XHRcdC8qIENoZWNrIHRvIHNlZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGJlZW4gZGVsZXRlZCBtaWR3YXkgdGhyb3VnaCB0aGUgYW5pbWF0aW9uIGJ5IGNoZWNraW5nIGZvciB0aGVcclxuXHRcdFx0XHRcdFx0IGNvbnRpbnVlZCBleGlzdGVuY2Ugb2YgaXRzIGRhdGEgY2FjaGUuIElmIGl0J3MgZ29uZSwgb3IgdGhlIGVsZW1lbnQgaXMgY3VycmVudGx5IHBhdXNlZCwgc2tpcCBhbmltYXRpbmcgdGhpcyBlbGVtZW50LiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoIURhdGEoZWxlbWVudCkpIHtcclxuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0dmFyIHRyYW5zZm9ybVByb3BlcnR5RXhpc3RzID0gZmFsc2U7XHJcblxyXG5cdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHQgRGlzcGxheSAmIFZpc2liaWxpdHkgVG9nZ2xpbmdcclxuXHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHQvKiBJZiB0aGUgZGlzcGxheSBvcHRpb24gaXMgc2V0IHRvIG5vbi1cIm5vbmVcIiwgc2V0IGl0IHVwZnJvbnQgc28gdGhhdCB0aGUgZWxlbWVudCBjYW4gYmVjb21lIHZpc2libGUgYmVmb3JlIHR3ZWVuaW5nIGJlZ2lucy5cclxuXHRcdFx0XHRcdFx0IChPdGhlcndpc2UsIGRpc3BsYXkncyBcIm5vbmVcIiB2YWx1ZSBpcyBzZXQgaW4gY29tcGxldGVDYWxsKCkgb25jZSB0aGUgYW5pbWF0aW9uIGhhcyBjb21wbGV0ZWQuKSAqL1xyXG5cdFx0XHRcdFx0XHRpZiAob3B0cy5kaXNwbGF5ICE9PSB1bmRlZmluZWQgJiYgb3B0cy5kaXNwbGF5ICE9PSBudWxsICYmIG9wdHMuZGlzcGxheSAhPT0gXCJub25lXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAob3B0cy5kaXNwbGF5ID09PSBcImZsZXhcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGZsZXhWYWx1ZXMgPSBbXCItd2Via2l0LWJveFwiLCBcIi1tb3otYm94XCIsIFwiLW1zLWZsZXhib3hcIiwgXCItd2Via2l0LWZsZXhcIl07XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0JC5lYWNoKGZsZXhWYWx1ZXMsIGZ1bmN0aW9uKGksIGZsZXhWYWx1ZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRDU1Muc2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcImRpc3BsYXlcIiwgZmxleFZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0Q1NTLnNldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJkaXNwbGF5XCIsIG9wdHMuZGlzcGxheSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIFNhbWUgZ29lcyB3aXRoIHRoZSB2aXNpYmlsaXR5IG9wdGlvbiwgYnV0IGl0cyBcIm5vbmVcIiBlcXVpdmFsZW50IGlzIFwiaGlkZGVuXCIuICovXHJcblx0XHRcdFx0XHRcdGlmIChvcHRzLnZpc2liaWxpdHkgIT09IHVuZGVmaW5lZCAmJiBvcHRzLnZpc2liaWxpdHkgIT09IFwiaGlkZGVuXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRDU1Muc2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcInZpc2liaWxpdHlcIiwgb3B0cy52aXNpYmlsaXR5KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHQgUHJvcGVydHkgSXRlcmF0aW9uXHJcblx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHQvKiBGb3IgZXZlcnkgZWxlbWVudCwgaXRlcmF0ZSB0aHJvdWdoIGVhY2ggcHJvcGVydHkuICovXHJcblx0XHRcdFx0XHRcdGZvciAodmFyIHByb3BlcnR5IGluIHR3ZWVuc0NvbnRhaW5lcikge1xyXG5cdFx0XHRcdFx0XHRcdC8qIE5vdGU6IEluIGFkZGl0aW9uIHRvIHByb3BlcnR5IHR3ZWVuIGRhdGEsIHR3ZWVuc0NvbnRhaW5lciBjb250YWlucyBhIHJlZmVyZW5jZSB0byBpdHMgYXNzb2NpYXRlZCBlbGVtZW50LiAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmICh0d2VlbnNDb250YWluZXIuaGFzT3duUHJvcGVydHkocHJvcGVydHkpICYmIHByb3BlcnR5ICE9PSBcImVsZW1lbnRcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHR3ZWVuID0gdHdlZW5zQ29udGFpbmVyW3Byb3BlcnR5XSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogRWFzaW5nIGNhbiBlaXRoZXIgYmUgYSBwcmUtZ2VuZXJlYXRlZCBmdW5jdGlvbiBvciBhIHN0cmluZyB0aGF0IHJlZmVyZW5jZXMgYSBwcmUtcmVnaXN0ZXJlZCBlYXNpbmdcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgb24gdGhlIFZlbG9jaXR5LkVhc2luZ3Mgb2JqZWN0LiBJbiBlaXRoZXIgY2FzZSwgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBlYXNpbmcgKmZ1bmN0aW9uKi4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlYXNpbmcgPSBUeXBlLmlzU3RyaW5nKHR3ZWVuLmVhc2luZykgPyBWZWxvY2l0eS5FYXNpbmdzW3R3ZWVuLmVhc2luZ10gOiB0d2Vlbi5lYXNpbmc7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdFx0IEN1cnJlbnQgVmFsdWUgQ2FsY3VsYXRpb25cclxuXHRcdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKFR5cGUuaXNTdHJpbmcodHdlZW4ucGF0dGVybikpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhdHRlcm5SZXBsYWNlID0gcGVyY2VudENvbXBsZXRlID09PSAxID9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uKCQwLCBpbmRleCwgcm91bmQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IHR3ZWVuLmVuZFZhbHVlW2luZGV4XTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiByb3VuZCA/IE1hdGgucm91bmQocmVzdWx0KSA6IHJlc3VsdDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24oJDAsIGluZGV4LCByb3VuZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgc3RhcnRWYWx1ZSA9IHR3ZWVuLnN0YXJ0VmFsdWVbaW5kZXhdLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHdlZW5EZWx0YSA9IHR3ZWVuLmVuZFZhbHVlW2luZGV4XSAtIHN0YXJ0VmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBzdGFydFZhbHVlICsgKHR3ZWVuRGVsdGEgKiBlYXNpbmcocGVyY2VudENvbXBsZXRlLCBvcHRzLCB0d2VlbkRlbHRhKSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcm91bmQgPyBNYXRoLnJvdW5kKHJlc3VsdCkgOiByZXN1bHQ7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudFZhbHVlID0gdHdlZW4ucGF0dGVybi5yZXBsYWNlKC97KFxcZCspKCEpP30vZywgcGF0dGVyblJlcGxhY2UpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChwZXJjZW50Q29tcGxldGUgPT09IDEpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogSWYgdGhpcyBpcyB0aGUgbGFzdCB0aWNrIHBhc3MgKGlmIHdlJ3ZlIHJlYWNoZWQgMTAwJSBjb21wbGV0aW9uIGZvciB0aGlzIHR3ZWVuKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0IGVuc3VyZSB0aGF0IGN1cnJlbnRWYWx1ZSBpcyBleHBsaWNpdGx5IHNldCB0byBpdHMgdGFyZ2V0IGVuZFZhbHVlIHNvIHRoYXQgaXQncyBub3Qgc3ViamVjdGVkIHRvIGFueSByb3VuZGluZy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudFZhbHVlID0gdHdlZW4uZW5kVmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBPdGhlcndpc2UsIGNhbGN1bGF0ZSBjdXJyZW50VmFsdWUgYmFzZWQgb24gdGhlIGN1cnJlbnQgZGVsdGEgZnJvbSBzdGFydFZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdHdlZW5EZWx0YSA9IHR3ZWVuLmVuZFZhbHVlIC0gdHdlZW4uc3RhcnRWYWx1ZTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IHR3ZWVuLnN0YXJ0VmFsdWUgKyAodHdlZW5EZWx0YSAqIGVhc2luZyhwZXJjZW50Q29tcGxldGUsIG9wdHMsIHR3ZWVuRGVsdGEpKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogSWYgbm8gdmFsdWUgY2hhbmdlIGlzIG9jY3VycmluZywgZG9uJ3QgcHJvY2VlZCB3aXRoIERPTSB1cGRhdGluZy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGlmICghZmlyc3RUaWNrICYmIChjdXJyZW50VmFsdWUgPT09IHR3ZWVuLmN1cnJlbnRWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0dHdlZW4uY3VycmVudFZhbHVlID0gY3VycmVudFZhbHVlO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIElmIHdlJ3JlIHR3ZWVuaW5nIGEgZmFrZSAndHdlZW4nIHByb3BlcnR5IGluIG9yZGVyIHRvIGxvZyB0cmFuc2l0aW9uIHZhbHVlcywgdXBkYXRlIHRoZSBvbmUtcGVyLWNhbGwgdmFyaWFibGUgc28gdGhhdFxyXG5cdFx0XHRcdFx0XHRcdFx0IGl0IGNhbiBiZSBwYXNzZWQgaW50byB0aGUgcHJvZ3Jlc3MgY2FsbGJhY2suICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAocHJvcGVydHkgPT09IFwidHdlZW5cIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0d2VlbkR1bW15VmFsdWUgPSBjdXJyZW50VmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdFx0XHRcdCBIb29rczogUGFydCBJXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKiovXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBob29rUm9vdDtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIEZvciBob29rZWQgcHJvcGVydGllcywgdGhlIG5ld2x5LXVwZGF0ZWQgcm9vdFByb3BlcnR5VmFsdWVDYWNoZSBpcyBjYWNoZWQgb250byB0aGUgZWxlbWVudCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkXHJcblx0XHRcdFx0XHRcdFx0XHRcdCBmb3Igc3Vic2VxdWVudCBob29rcyBpbiB0aGlzIGNhbGwgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lIHJvb3QgcHJvcGVydHkuIElmIHdlIGRpZG4ndCBjYWNoZSB0aGUgdXBkYXRlZFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgcm9vdFByb3BlcnR5VmFsdWUsIGVhY2ggc3Vic2VxdWVudCB1cGRhdGUgdG8gdGhlIHJvb3QgcHJvcGVydHkgaW4gdGhpcyB0aWNrIHBhc3Mgd291bGQgcmVzZXQgdGhlIHByZXZpb3VzIGhvb2snc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQgdXBkYXRlcyB0byByb290UHJvcGVydHlWYWx1ZSBwcmlvciB0byBpbmplY3Rpb24uIEEgbmljZSBwZXJmb3JtYW5jZSBieXByb2R1Y3Qgb2Ygcm9vdFByb3BlcnR5VmFsdWUgY2FjaGluZyBpcyB0aGF0XHJcblx0XHRcdFx0XHRcdFx0XHRcdCBzdWJzZXF1ZW50bHkgY2hhaW5lZCBhbmltYXRpb25zIHVzaW5nIHRoZSBzYW1lIGhvb2tSb290IGJ1dCBhIGRpZmZlcmVudCBob29rIGNhbiB1c2UgdGhpcyBjYWNoZWQgcm9vdFByb3BlcnR5VmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChDU1MuSG9va3MucmVnaXN0ZXJlZFtwcm9wZXJ0eV0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRob29rUm9vdCA9IENTUy5Ib29rcy5nZXRSb290KHByb3BlcnR5KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJvb3RQcm9wZXJ0eVZhbHVlQ2FjaGUgPSBEYXRhKGVsZW1lbnQpLnJvb3RQcm9wZXJ0eVZhbHVlQ2FjaGVbaG9va1Jvb3RdO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocm9vdFByb3BlcnR5VmFsdWVDYWNoZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHdlZW4ucm9vdFByb3BlcnR5VmFsdWUgPSByb290UHJvcGVydHlWYWx1ZUNhY2hlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdFx0XHRcdCBET00gVXBkYXRlXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIHNldFByb3BlcnR5VmFsdWUoKSByZXR1cm5zIGFuIGFycmF5IG9mIHRoZSBwcm9wZXJ0eSBuYW1lIGFuZCBwcm9wZXJ0eSB2YWx1ZSBwb3N0IGFueSBub3JtYWxpemF0aW9uIHRoYXQgbWF5IGhhdmUgYmVlbiBwZXJmb3JtZWQuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIE5vdGU6IFRvIHNvbHZlIGFuIElFPD04IHBvc2l0aW9uaW5nIGJ1ZywgdGhlIHVuaXQgdHlwZSBpcyBkcm9wcGVkIHdoZW4gc2V0dGluZyBhIHByb3BlcnR5IHZhbHVlIG9mIDAuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBhZGp1c3RlZFNldERhdGEgPSBDU1Muc2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCAvKiBTRVQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHdlZW4uY3VycmVudFZhbHVlICsgKElFIDwgOSAmJiBwYXJzZUZsb2F0KGN1cnJlbnRWYWx1ZSkgPT09IDAgPyBcIlwiIDogdHdlZW4udW5pdFR5cGUpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHdlZW4ucm9vdFByb3BlcnR5VmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0d2Vlbi5zY3JvbGxEYXRhKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdFx0XHRcdCBIb29rczogUGFydCBJSVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIE5vdyB0aGF0IHdlIGhhdmUgdGhlIGhvb2sncyB1cGRhdGVkIHJvb3RQcm9wZXJ0eVZhbHVlICh0aGUgcG9zdC1wcm9jZXNzZWQgdmFsdWUgcHJvdmlkZWQgYnkgYWRqdXN0ZWRTZXREYXRhKSwgY2FjaGUgaXQgb250byB0aGUgZWxlbWVudC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKENTUy5Ib29rcy5yZWdpc3RlcmVkW3Byb3BlcnR5XSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIFNpbmNlIGFkanVzdGVkU2V0RGF0YSBjb250YWlucyBub3JtYWxpemVkIGRhdGEgcmVhZHkgZm9yIERPTSB1cGRhdGluZywgdGhlIHJvb3RQcm9wZXJ0eVZhbHVlIG5lZWRzIHRvIGJlIHJlLWV4dHJhY3RlZCBmcm9tIGl0cyBub3JtYWxpemVkIGZvcm0uID8/ICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkW2hvb2tSb290XSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0RGF0YShlbGVtZW50KS5yb290UHJvcGVydHlWYWx1ZUNhY2hlW2hvb2tSb290XSA9IENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkW2hvb2tSb290XShcImV4dHJhY3RcIiwgbnVsbCwgYWRqdXN0ZWRTZXREYXRhWzFdKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0RGF0YShlbGVtZW50KS5yb290UHJvcGVydHlWYWx1ZUNhY2hlW2hvb2tSb290XSA9IGFkanVzdGVkU2V0RGF0YVsxXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0XHRcdFx0IFRyYW5zZm9ybXNcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIEZsYWcgd2hldGhlciBhIHRyYW5zZm9ybSBwcm9wZXJ0eSBpcyBiZWluZyBhbmltYXRlZCBzbyB0aGF0IGZsdXNoVHJhbnNmb3JtQ2FjaGUoKSBjYW4gYmUgdHJpZ2dlcmVkIG9uY2UgdGhpcyB0aWNrIHBhc3MgaXMgY29tcGxldGUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhZGp1c3RlZFNldERhdGFbMF0gPT09IFwidHJhbnNmb3JtXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm1Qcm9wZXJ0eUV4aXN0cyA9IHRydWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHQgbW9iaWxlSEFcclxuXHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHQvKiBJZiBtb2JpbGVIQSBpcyBlbmFibGVkLCBzZXQgdGhlIHRyYW5zbGF0ZTNkIHRyYW5zZm9ybSB0byBudWxsIHRvIGZvcmNlIGhhcmR3YXJlIGFjY2VsZXJhdGlvbi5cclxuXHRcdFx0XHRcdFx0IEl0J3Mgc2FmZSB0byBvdmVycmlkZSB0aGlzIHByb3BlcnR5IHNpbmNlIFZlbG9jaXR5IGRvZXNuJ3QgYWN0dWFsbHkgc3VwcG9ydCBpdHMgYW5pbWF0aW9uIChob29rcyBhcmUgdXNlZCBpbiBpdHMgcGxhY2UpLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAob3B0cy5tb2JpbGVIQSkge1xyXG5cdFx0XHRcdFx0XHRcdC8qIERvbid0IHNldCB0aGUgbnVsbCB0cmFuc2Zvcm0gaGFjayBpZiB3ZSd2ZSBhbHJlYWR5IGRvbmUgc28uICovXHJcblx0XHRcdFx0XHRcdFx0aWYgKERhdGEoZWxlbWVudCkudHJhbnNmb3JtQ2FjaGUudHJhbnNsYXRlM2QgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogQWxsIGVudHJpZXMgb24gdGhlIHRyYW5zZm9ybUNhY2hlIG9iamVjdCBhcmUgbGF0ZXIgY29uY2F0ZW5hdGVkIGludG8gYSBzaW5nbGUgdHJhbnNmb3JtIHN0cmluZyB2aWEgZmx1c2hUcmFuc2Zvcm1DYWNoZSgpLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0RGF0YShlbGVtZW50KS50cmFuc2Zvcm1DYWNoZS50cmFuc2xhdGUzZCA9IFwiKDBweCwgMHB4LCAwcHgpXCI7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0dHJhbnNmb3JtUHJvcGVydHlFeGlzdHMgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHRyYW5zZm9ybVByb3BlcnR5RXhpc3RzKSB7XHJcblx0XHRcdFx0XHRcdFx0Q1NTLmZsdXNoVHJhbnNmb3JtQ2FjaGUoZWxlbWVudCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKiBUaGUgbm9uLVwibm9uZVwiIGRpc3BsYXkgdmFsdWUgaXMgb25seSBhcHBsaWVkIHRvIGFuIGVsZW1lbnQgb25jZSAtLSB3aGVuIGl0cyBhc3NvY2lhdGVkIGNhbGwgaXMgZmlyc3QgdGlja2VkIHRocm91Z2guXHJcblx0XHRcdFx0XHQgQWNjb3JkaW5nbHksIGl0J3Mgc2V0IHRvIGZhbHNlIHNvIHRoYXQgaXQgaXNuJ3QgcmUtcHJvY2Vzc2VkIGJ5IHRoaXMgY2FsbCBpbiB0aGUgbmV4dCB0aWNrLiAqL1xyXG5cdFx0XHRcdFx0aWYgKG9wdHMuZGlzcGxheSAhPT0gdW5kZWZpbmVkICYmIG9wdHMuZGlzcGxheSAhPT0gXCJub25lXCIpIHtcclxuXHRcdFx0XHRcdFx0VmVsb2NpdHkuU3RhdGUuY2FsbHNbaV1bMl0uZGlzcGxheSA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKG9wdHMudmlzaWJpbGl0eSAhPT0gdW5kZWZpbmVkICYmIG9wdHMudmlzaWJpbGl0eSAhPT0gXCJoaWRkZW5cIikge1xyXG5cdFx0XHRcdFx0XHRWZWxvY2l0eS5TdGF0ZS5jYWxsc1tpXVsyXS52aXNpYmlsaXR5ID0gZmFsc2U7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogUGFzcyB0aGUgZWxlbWVudHMgYW5kIHRoZSB0aW1pbmcgZGF0YSAocGVyY2VudENvbXBsZXRlLCBtc1JlbWFpbmluZywgdGltZVN0YXJ0LCB0d2VlbkR1bW15VmFsdWUpIGludG8gdGhlIHByb2dyZXNzIGNhbGxiYWNrLiAqL1xyXG5cdFx0XHRcdFx0aWYgKG9wdHMucHJvZ3Jlc3MpIHtcclxuXHRcdFx0XHRcdFx0b3B0cy5wcm9ncmVzcy5jYWxsKGNhbGxDb250YWluZXJbMV0sXHJcblx0XHRcdFx0XHRcdFx0XHRjYWxsQ29udGFpbmVyWzFdLFxyXG5cdFx0XHRcdFx0XHRcdFx0cGVyY2VudENvbXBsZXRlLFxyXG5cdFx0XHRcdFx0XHRcdFx0TWF0aC5tYXgoMCwgKHRpbWVTdGFydCArIG9wdHMuZHVyYXRpb24pIC0gdGltZUN1cnJlbnQpLFxyXG5cdFx0XHRcdFx0XHRcdFx0dGltZVN0YXJ0LFxyXG5cdFx0XHRcdFx0XHRcdFx0dHdlZW5EdW1teVZhbHVlKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKiBJZiB0aGlzIGNhbGwgaGFzIGZpbmlzaGVkIHR3ZWVuaW5nLCBwYXNzIGl0cyBpbmRleCB0byBjb21wbGV0ZUNhbGwoKSB0byBoYW5kbGUgY2FsbCBjbGVhbnVwLiAqL1xyXG5cdFx0XHRcdFx0aWYgKHBlcmNlbnRDb21wbGV0ZSA9PT0gMSkge1xyXG5cdFx0XHRcdFx0XHRjb21wbGV0ZUNhbGwoaSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBOb3RlOiBjb21wbGV0ZUNhbGwoKSBzZXRzIHRoZSBpc1RpY2tpbmcgZmxhZyB0byBmYWxzZSB3aGVuIHRoZSBsYXN0IGNhbGwgb24gVmVsb2NpdHkuU3RhdGUuY2FsbHMgaGFzIGNvbXBsZXRlZC4gKi9cclxuXHRcdFx0aWYgKFZlbG9jaXR5LlN0YXRlLmlzVGlja2luZykge1xyXG5cdFx0XHRcdHRpY2tlcih0aWNrKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHQgQ2FsbCBDb21wbGV0aW9uXHJcblx0XHQgKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHQvKiBOb3RlOiBVbmxpa2UgdGljaygpLCB3aGljaCBwcm9jZXNzZXMgYWxsIGFjdGl2ZSBjYWxscyBhdCBvbmNlLCBjYWxsIGNvbXBsZXRpb24gaXMgaGFuZGxlZCBvbiBhIHBlci1jYWxsIGJhc2lzLiAqL1xyXG5cdFx0ZnVuY3Rpb24gY29tcGxldGVDYWxsKGNhbGxJbmRleCwgaXNTdG9wcGVkKSB7XHJcblx0XHRcdC8qIEVuc3VyZSB0aGUgY2FsbCBleGlzdHMuICovXHJcblx0XHRcdGlmICghVmVsb2NpdHkuU3RhdGUuY2FsbHNbY2FsbEluZGV4XSkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogUHVsbCB0aGUgbWV0YWRhdGEgZnJvbSB0aGUgY2FsbC4gKi9cclxuXHRcdFx0dmFyIGNhbGwgPSBWZWxvY2l0eS5TdGF0ZS5jYWxsc1tjYWxsSW5kZXhdWzBdLFxyXG5cdFx0XHRcdFx0ZWxlbWVudHMgPSBWZWxvY2l0eS5TdGF0ZS5jYWxsc1tjYWxsSW5kZXhdWzFdLFxyXG5cdFx0XHRcdFx0b3B0cyA9IFZlbG9jaXR5LlN0YXRlLmNhbGxzW2NhbGxJbmRleF1bMl0sXHJcblx0XHRcdFx0XHRyZXNvbHZlciA9IFZlbG9jaXR5LlN0YXRlLmNhbGxzW2NhbGxJbmRleF1bNF07XHJcblxyXG5cdFx0XHR2YXIgcmVtYWluaW5nQ2FsbHNFeGlzdCA9IGZhbHNlO1xyXG5cclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0IEVsZW1lbnQgRmluYWxpemF0aW9uXHJcblx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0Zm9yICh2YXIgaSA9IDAsIGNhbGxMZW5ndGggPSBjYWxsLmxlbmd0aDsgaSA8IGNhbGxMZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdHZhciBlbGVtZW50ID0gY2FsbFtpXS5lbGVtZW50O1xyXG5cclxuXHRcdFx0XHQvKiBJZiB0aGUgdXNlciBzZXQgZGlzcGxheSB0byBcIm5vbmVcIiAoaW50ZW5kaW5nIHRvIGhpZGUgdGhlIGVsZW1lbnQpLCBzZXQgaXQgbm93IHRoYXQgdGhlIGFuaW1hdGlvbiBoYXMgY29tcGxldGVkLiAqL1xyXG5cdFx0XHRcdC8qIE5vdGU6IGRpc3BsYXk6bm9uZSBpc24ndCBzZXQgd2hlbiBjYWxscyBhcmUgbWFudWFsbHkgc3RvcHBlZCAodmlhIFZlbG9jaXR5KFwic3RvcFwiKS4gKi9cclxuXHRcdFx0XHQvKiBOb3RlOiBEaXNwbGF5IGdldHMgaWdub3JlZCB3aXRoIFwicmV2ZXJzZVwiIGNhbGxzIGFuZCBpbmZpbml0ZSBsb29wcywgc2luY2UgdGhpcyBiZWhhdmlvciB3b3VsZCBiZSB1bmRlc2lyYWJsZS4gKi9cclxuXHRcdFx0XHRpZiAoIWlzU3RvcHBlZCAmJiAhb3B0cy5sb29wKSB7XHJcblx0XHRcdFx0XHRpZiAob3B0cy5kaXNwbGF5ID09PSBcIm5vbmVcIikge1xyXG5cdFx0XHRcdFx0XHRDU1Muc2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcImRpc3BsYXlcIiwgb3B0cy5kaXNwbGF5KTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAob3B0cy52aXNpYmlsaXR5ID09PSBcImhpZGRlblwiKSB7XHJcblx0XHRcdFx0XHRcdENTUy5zZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwidmlzaWJpbGl0eVwiLCBvcHRzLnZpc2liaWxpdHkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0LyogSWYgdGhlIGVsZW1lbnQncyBxdWV1ZSBpcyBlbXB0eSAoaWYgb25seSB0aGUgXCJpbnByb2dyZXNzXCIgaXRlbSBpcyBsZWZ0IGF0IHBvc2l0aW9uIDApIG9yIGlmIGl0cyBxdWV1ZSBpcyBhYm91dCB0byBydW5cclxuXHRcdFx0XHQgYSBub24tVmVsb2NpdHktaW5pdGlhdGVkIGVudHJ5LCB0dXJuIG9mZiB0aGUgaXNBbmltYXRpbmcgZmxhZy4gQSBub24tVmVsb2NpdHktaW5pdGlhdGllZCBxdWV1ZSBlbnRyeSdzIGxvZ2ljIG1pZ2h0IGFsdGVyXHJcblx0XHRcdFx0IGFuIGVsZW1lbnQncyBDU1MgdmFsdWVzIGFuZCB0aGVyZWJ5IGNhdXNlIFZlbG9jaXR5J3MgY2FjaGVkIHZhbHVlIGRhdGEgdG8gZ28gc3RhbGUuIFRvIGRldGVjdCBpZiBhIHF1ZXVlIGVudHJ5IHdhcyBpbml0aWF0ZWQgYnkgVmVsb2NpdHksXHJcblx0XHRcdFx0IHdlIGNoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mIG91ciBzcGVjaWFsIFZlbG9jaXR5LnF1ZXVlRW50cnlGbGFnIGRlY2xhcmF0aW9uLCB3aGljaCBtaW5pZmllcnMgd29uJ3QgcmVuYW1lIHNpbmNlIHRoZSBmbGFnXHJcblx0XHRcdFx0IGlzIGFzc2lnbmVkIHRvIGpRdWVyeSdzIGdsb2JhbCAkIG9iamVjdCBhbmQgdGh1cyBleGlzdHMgb3V0IG9mIFZlbG9jaXR5J3Mgb3duIHNjb3BlLiAqL1xyXG5cdFx0XHRcdHZhciBkYXRhID0gRGF0YShlbGVtZW50KTtcclxuXHJcblx0XHRcdFx0aWYgKG9wdHMubG9vcCAhPT0gdHJ1ZSAmJiAoJC5xdWV1ZShlbGVtZW50KVsxXSA9PT0gdW5kZWZpbmVkIHx8ICEvXFwudmVsb2NpdHlRdWV1ZUVudHJ5RmxhZy9pLnRlc3QoJC5xdWV1ZShlbGVtZW50KVsxXSkpKSB7XHJcblx0XHRcdFx0XHQvKiBUaGUgZWxlbWVudCBtYXkgaGF2ZSBiZWVuIGRlbGV0ZWQuIEVuc3VyZSB0aGF0IGl0cyBkYXRhIGNhY2hlIHN0aWxsIGV4aXN0cyBiZWZvcmUgYWN0aW5nIG9uIGl0LiAqL1xyXG5cdFx0XHRcdFx0aWYgKGRhdGEpIHtcclxuXHRcdFx0XHRcdFx0ZGF0YS5pc0FuaW1hdGluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHQvKiBDbGVhciB0aGUgZWxlbWVudCdzIHJvb3RQcm9wZXJ0eVZhbHVlQ2FjaGUsIHdoaWNoIHdpbGwgYmVjb21lIHN0YWxlLiAqL1xyXG5cdFx0XHRcdFx0XHRkYXRhLnJvb3RQcm9wZXJ0eVZhbHVlQ2FjaGUgPSB7fTtcclxuXHJcblx0XHRcdFx0XHRcdHZhciB0cmFuc2Zvcm1IQVByb3BlcnR5RXhpc3RzID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdC8qIElmIGFueSAzRCB0cmFuc2Zvcm0gc3VicHJvcGVydHkgaXMgYXQgaXRzIGRlZmF1bHQgdmFsdWUgKHJlZ2FyZGxlc3Mgb2YgdW5pdCB0eXBlKSwgcmVtb3ZlIGl0LiAqL1xyXG5cdFx0XHRcdFx0XHQkLmVhY2goQ1NTLkxpc3RzLnRyYW5zZm9ybXMzRCwgZnVuY3Rpb24oaSwgdHJhbnNmb3JtTmFtZSkge1xyXG5cdFx0XHRcdFx0XHRcdHZhciBkZWZhdWx0VmFsdWUgPSAvXnNjYWxlLy50ZXN0KHRyYW5zZm9ybU5hbWUpID8gMSA6IDAsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGRhdGEudHJhbnNmb3JtQ2FjaGVbdHJhbnNmb3JtTmFtZV07XHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmIChkYXRhLnRyYW5zZm9ybUNhY2hlW3RyYW5zZm9ybU5hbWVdICE9PSB1bmRlZmluZWQgJiYgbmV3IFJlZ0V4cChcIl5cXFxcKFwiICsgZGVmYXVsdFZhbHVlICsgXCJbXi5dXCIpLnRlc3QoY3VycmVudFZhbHVlKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dHJhbnNmb3JtSEFQcm9wZXJ0eUV4aXN0cyA9IHRydWU7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIGRhdGEudHJhbnNmb3JtQ2FjaGVbdHJhbnNmb3JtTmFtZV07XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIE1vYmlsZSBkZXZpY2VzIGhhdmUgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIHJlbW92ZWQgYXQgdGhlIGVuZCBvZiB0aGUgYW5pbWF0aW9uIGluIG9yZGVyIHRvIGF2b2lkIGhvZ2dpbmcgdGhlIEdQVSdzIG1lbW9yeS4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKG9wdHMubW9iaWxlSEEpIHtcclxuXHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm1IQVByb3BlcnR5RXhpc3RzID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRkZWxldGUgZGF0YS50cmFuc2Zvcm1DYWNoZS50cmFuc2xhdGUzZDtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyogRmx1c2ggdGhlIHN1YnByb3BlcnR5IHJlbW92YWxzIHRvIHRoZSBET00uICovXHJcblx0XHRcdFx0XHRcdGlmICh0cmFuc2Zvcm1IQVByb3BlcnR5RXhpc3RzKSB7XHJcblx0XHRcdFx0XHRcdFx0Q1NTLmZsdXNoVHJhbnNmb3JtQ2FjaGUoZWxlbWVudCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIFJlbW92ZSB0aGUgXCJ2ZWxvY2l0eS1hbmltYXRpbmdcIiBpbmRpY2F0b3IgY2xhc3MuICovXHJcblx0XHRcdFx0XHRcdENTUy5WYWx1ZXMucmVtb3ZlQ2xhc3MoZWxlbWVudCwgXCJ2ZWxvY2l0eS1hbmltYXRpbmdcIik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IE9wdGlvbjogQ29tcGxldGVcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKiBDb21wbGV0ZSBpcyBmaXJlZCBvbmNlIHBlciBjYWxsIChub3Qgb25jZSBwZXIgZWxlbWVudCkgYW5kIGlzIHBhc3NlZCB0aGUgZnVsbCByYXcgRE9NIGVsZW1lbnQgc2V0IGFzIGJvdGggaXRzIGNvbnRleHQgYW5kIGl0cyBmaXJzdCBhcmd1bWVudC4gKi9cclxuXHRcdFx0XHQvKiBOb3RlOiBDYWxsYmFja3MgYXJlbid0IGZpcmVkIHdoZW4gY2FsbHMgYXJlIG1hbnVhbGx5IHN0b3BwZWQgKHZpYSBWZWxvY2l0eShcInN0b3BcIikuICovXHJcblx0XHRcdFx0aWYgKCFpc1N0b3BwZWQgJiYgb3B0cy5jb21wbGV0ZSAmJiAhb3B0cy5sb29wICYmIChpID09PSBjYWxsTGVuZ3RoIC0gMSkpIHtcclxuXHRcdFx0XHRcdC8qIFdlIHRocm93IGNhbGxiYWNrcyBpbiBhIHNldFRpbWVvdXQgc28gdGhhdCB0aHJvd24gZXJyb3JzIGRvbid0IGhhbHQgdGhlIGV4ZWN1dGlvbiBvZiBWZWxvY2l0eSBpdHNlbGYuICovXHJcblx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRvcHRzLmNvbXBsZXRlLmNhbGwoZWxlbWVudHMsIGVsZW1lbnRzKTtcclxuXHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhyb3cgZXJyb3I7XHJcblx0XHRcdFx0XHRcdH0sIDEpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgUHJvbWlzZSBSZXNvbHZpbmdcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0LyogTm90ZTogSW5maW5pdGUgbG9vcHMgZG9uJ3QgcmV0dXJuIHByb21pc2VzLiAqL1xyXG5cdFx0XHRcdGlmIChyZXNvbHZlciAmJiBvcHRzLmxvb3AgIT09IHRydWUpIHtcclxuXHRcdFx0XHRcdHJlc29sdmVyKGVsZW1lbnRzKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IE9wdGlvbjogTG9vcCAoSW5maW5pdGUpXHJcblx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdGlmIChkYXRhICYmIG9wdHMubG9vcCA9PT0gdHJ1ZSAmJiAhaXNTdG9wcGVkKSB7XHJcblx0XHRcdFx0XHQvKiBJZiBhIHJvdGF0ZVgvWS9aIHByb3BlcnR5IGlzIGJlaW5nIGFuaW1hdGVkIGJ5IDM2MCBkZWcgd2l0aCBsb29wOnRydWUsIHN3YXAgdHdlZW4gc3RhcnQvZW5kIHZhbHVlcyB0byBlbmFibGVcclxuXHRcdFx0XHRcdCBjb250aW51b3VzIGl0ZXJhdGl2ZSByb3RhdGlvbiBsb29waW5nLiAoT3RoZXJpc2UsIHRoZSBlbGVtZW50IHdvdWxkIGp1c3Qgcm90YXRlIGJhY2sgYW5kIGZvcnRoLikgKi9cclxuXHRcdFx0XHRcdCQuZWFjaChkYXRhLnR3ZWVuc0NvbnRhaW5lciwgZnVuY3Rpb24ocHJvcGVydHlOYW1lLCB0d2VlbkNvbnRhaW5lcikge1xyXG5cdFx0XHRcdFx0XHRpZiAoL15yb3RhdGUvLnRlc3QocHJvcGVydHlOYW1lKSAmJiAoKHBhcnNlRmxvYXQodHdlZW5Db250YWluZXIuc3RhcnRWYWx1ZSkgLSBwYXJzZUZsb2F0KHR3ZWVuQ29udGFpbmVyLmVuZFZhbHVlKSkgJSAzNjAgPT09IDApKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIG9sZFN0YXJ0VmFsdWUgPSB0d2VlbkNvbnRhaW5lci5zdGFydFZhbHVlO1xyXG5cclxuXHRcdFx0XHRcdFx0XHR0d2VlbkNvbnRhaW5lci5zdGFydFZhbHVlID0gdHdlZW5Db250YWluZXIuZW5kVmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0dHdlZW5Db250YWluZXIuZW5kVmFsdWUgPSBvbGRTdGFydFZhbHVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoL15iYWNrZ3JvdW5kUG9zaXRpb24vLnRlc3QocHJvcGVydHlOYW1lKSAmJiBwYXJzZUZsb2F0KHR3ZWVuQ29udGFpbmVyLmVuZFZhbHVlKSA9PT0gMTAwICYmIHR3ZWVuQ29udGFpbmVyLnVuaXRUeXBlID09PSBcIiVcIikge1xyXG5cdFx0XHRcdFx0XHRcdHR3ZWVuQ29udGFpbmVyLmVuZFZhbHVlID0gMDtcclxuXHRcdFx0XHRcdFx0XHR0d2VlbkNvbnRhaW5lci5zdGFydFZhbHVlID0gMTAwO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRWZWxvY2l0eShlbGVtZW50LCBcInJldmVyc2VcIiwge2xvb3A6IHRydWUsIGRlbGF5OiBvcHRzLmRlbGF5fSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IERlcXVldWVpbmdcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKiBGaXJlIHRoZSBuZXh0IGNhbGwgaW4gdGhlIHF1ZXVlIHNvIGxvbmcgYXMgdGhpcyBjYWxsJ3MgcXVldWUgd2Fzbid0IHNldCB0byBmYWxzZSAodG8gdHJpZ2dlciBhIHBhcmFsbGVsIGFuaW1hdGlvbiksXHJcblx0XHRcdFx0IHdoaWNoIHdvdWxkIGhhdmUgYWxyZWFkeSBjYXVzZWQgdGhlIG5leHQgY2FsbCB0byBmaXJlLiBOb3RlOiBFdmVuIGlmIHRoZSBlbmQgb2YgdGhlIGFuaW1hdGlvbiBxdWV1ZSBoYXMgYmVlbiByZWFjaGVkLFxyXG5cdFx0XHRcdCAkLmRlcXVldWUoKSBtdXN0IHN0aWxsIGJlIGNhbGxlZCBpbiBvcmRlciB0byBjb21wbGV0ZWx5IGNsZWFyIGpRdWVyeSdzIGFuaW1hdGlvbiBxdWV1ZS4gKi9cclxuXHRcdFx0XHRpZiAob3B0cy5xdWV1ZSAhPT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdCQuZGVxdWV1ZShlbGVtZW50LCBvcHRzLnF1ZXVlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0IENhbGxzIEFycmF5IENsZWFudXBcclxuXHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdC8qIFNpbmNlIHRoaXMgY2FsbCBpcyBjb21wbGV0ZSwgc2V0IGl0IHRvIGZhbHNlIHNvIHRoYXQgdGhlIHJBRiB0aWNrIHNraXBzIGl0LiBUaGlzIGFycmF5IGlzIGxhdGVyIGNvbXBhY3RlZCB2aWEgY29tcGFjdFNwYXJzZUFycmF5KCkuXHJcblx0XHRcdCAoRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIHRoZSBjYWxsIGlzIHNldCB0byBmYWxzZSBpbnN0ZWFkIG9mIGJlaW5nIGRlbGV0ZWQgZnJvbSB0aGUgYXJyYXk6IGh0dHA6Ly93d3cuaHRtbDVyb2Nrcy5jb20vZW4vdHV0b3JpYWxzL3NwZWVkL3Y4LykgKi9cclxuXHRcdFx0VmVsb2NpdHkuU3RhdGUuY2FsbHNbY2FsbEluZGV4XSA9IGZhbHNlO1xyXG5cclxuXHRcdFx0LyogSXRlcmF0ZSB0aHJvdWdoIHRoZSBjYWxscyBhcnJheSB0byBkZXRlcm1pbmUgaWYgdGhpcyB3YXMgdGhlIGZpbmFsIGluLXByb2dyZXNzIGFuaW1hdGlvbi5cclxuXHRcdFx0IElmIHNvLCBzZXQgYSBmbGFnIHRvIGVuZCB0aWNraW5nIGFuZCBjbGVhciB0aGUgY2FsbHMgYXJyYXkuICovXHJcblx0XHRcdGZvciAodmFyIGogPSAwLCBjYWxsc0xlbmd0aCA9IFZlbG9jaXR5LlN0YXRlLmNhbGxzLmxlbmd0aDsgaiA8IGNhbGxzTGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRpZiAoVmVsb2NpdHkuU3RhdGUuY2FsbHNbal0gIT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHRyZW1haW5pbmdDYWxsc0V4aXN0ID0gdHJ1ZTtcclxuXHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChyZW1haW5pbmdDYWxsc0V4aXN0ID09PSBmYWxzZSkge1xyXG5cdFx0XHRcdC8qIHRpY2soKSB3aWxsIGRldGVjdCB0aGlzIGZsYWcgdXBvbiBpdHMgbmV4dCBpdGVyYXRpb24gYW5kIHN1YnNlcXVlbnRseSB0dXJuIGl0c2VsZiBvZmYuICovXHJcblx0XHRcdFx0VmVsb2NpdHkuU3RhdGUuaXNUaWNraW5nID0gZmFsc2U7XHJcblxyXG5cdFx0XHRcdC8qIENsZWFyIHRoZSBjYWxscyBhcnJheSBzbyB0aGF0IGl0cyBsZW5ndGggaXMgcmVzZXQuICovXHJcblx0XHRcdFx0ZGVsZXRlIFZlbG9jaXR5LlN0YXRlLmNhbGxzO1xyXG5cdFx0XHRcdFZlbG9jaXR5LlN0YXRlLmNhbGxzID0gW107XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvKioqKioqKioqKioqKioqKioqXHJcblx0XHQgRnJhbWV3b3Jrc1xyXG5cdFx0ICoqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHQvKiBCb3RoIGpRdWVyeSBhbmQgWmVwdG8gYWxsb3cgdGhlaXIgJC5mbiBvYmplY3QgdG8gYmUgZXh0ZW5kZWQgdG8gYWxsb3cgd3JhcHBlZCBlbGVtZW50cyB0byBiZSBzdWJqZWN0ZWQgdG8gcGx1Z2luIGNhbGxzLlxyXG5cdFx0IElmIGVpdGhlciBmcmFtZXdvcmsgaXMgbG9hZGVkLCByZWdpc3RlciBhIFwidmVsb2NpdHlcIiBleHRlbnNpb24gcG9pbnRpbmcgdG8gVmVsb2NpdHkncyBjb3JlIGFuaW1hdGUoKSBtZXRob2QuICBWZWxvY2l0eVxyXG5cdFx0IGFsc28gcmVnaXN0ZXJzIGl0c2VsZiBvbnRvIGEgZ2xvYmFsIGNvbnRhaW5lciAod2luZG93LmpRdWVyeSB8fCB3aW5kb3cuWmVwdG8gfHwgd2luZG93KSBzbyB0aGF0IGNlcnRhaW4gZmVhdHVyZXMgYXJlXHJcblx0XHQgYWNjZXNzaWJsZSBiZXlvbmQganVzdCBhIHBlci1lbGVtZW50IHNjb3BlLiBUaGlzIG1hc3RlciBvYmplY3QgY29udGFpbnMgYW4gLmFuaW1hdGUoKSBtZXRob2QsIHdoaWNoIGlzIGxhdGVyIGFzc2lnbmVkIHRvICQuZm5cclxuXHRcdCAoaWYgalF1ZXJ5IG9yIFplcHRvIGFyZSBwcmVzZW50KS4gQWNjb3JkaW5nbHksIFZlbG9jaXR5IGNhbiBib3RoIGFjdCBvbiB3cmFwcGVkIERPTSBlbGVtZW50cyBhbmQgc3RhbmQgYWxvbmUgZm9yIHRhcmdldGluZyByYXcgRE9NIGVsZW1lbnRzLiAqL1xyXG5cdFx0Z2xvYmFsLlZlbG9jaXR5ID0gVmVsb2NpdHk7XHJcblxyXG5cdFx0aWYgKGdsb2JhbCAhPT0gd2luZG93KSB7XHJcblx0XHRcdC8qIEFzc2lnbiB0aGUgZWxlbWVudCBmdW5jdGlvbiB0byBWZWxvY2l0eSdzIGNvcmUgYW5pbWF0ZSgpIG1ldGhvZC4gKi9cclxuXHRcdFx0Z2xvYmFsLmZuLnZlbG9jaXR5ID0gYW5pbWF0ZTtcclxuXHRcdFx0LyogQXNzaWduIHRoZSBvYmplY3QgZnVuY3Rpb24ncyBkZWZhdWx0cyB0byBWZWxvY2l0eSdzIGdsb2JhbCBkZWZhdWx0cyBvYmplY3QuICovXHJcblx0XHRcdGdsb2JhbC5mbi52ZWxvY2l0eS5kZWZhdWx0cyA9IFZlbG9jaXR5LmRlZmF1bHRzO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0IFBhY2thZ2VkIFJlZGlyZWN0c1xyXG5cdFx0ICoqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdC8qIHNsaWRlVXAsIHNsaWRlRG93biAqL1xyXG5cdFx0JC5lYWNoKFtcIkRvd25cIiwgXCJVcFwiXSwgZnVuY3Rpb24oaSwgZGlyZWN0aW9uKSB7XHJcblx0XHRcdFZlbG9jaXR5LlJlZGlyZWN0c1tcInNsaWRlXCIgKyBkaXJlY3Rpb25dID0gZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucywgZWxlbWVudHNJbmRleCwgZWxlbWVudHNTaXplLCBlbGVtZW50cywgcHJvbWlzZURhdGEpIHtcclxuXHRcdFx0XHR2YXIgb3B0cyA9ICQuZXh0ZW5kKHt9LCBvcHRpb25zKSxcclxuXHRcdFx0XHRcdFx0YmVnaW4gPSBvcHRzLmJlZ2luLFxyXG5cdFx0XHRcdFx0XHRjb21wbGV0ZSA9IG9wdHMuY29tcGxldGUsXHJcblx0XHRcdFx0XHRcdGlubGluZVZhbHVlcyA9IHt9LFxyXG5cdFx0XHRcdFx0XHRjb21wdXRlZFZhbHVlcyA9IHtoZWlnaHQ6IFwiXCIsIG1hcmdpblRvcDogXCJcIiwgbWFyZ2luQm90dG9tOiBcIlwiLCBwYWRkaW5nVG9wOiBcIlwiLCBwYWRkaW5nQm90dG9tOiBcIlwifTtcclxuXHJcblx0XHRcdFx0aWYgKG9wdHMuZGlzcGxheSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHQvKiBTaG93IHRoZSBlbGVtZW50IGJlZm9yZSBzbGlkZURvd24gYmVnaW5zIGFuZCBoaWRlIHRoZSBlbGVtZW50IGFmdGVyIHNsaWRlVXAgY29tcGxldGVzLiAqL1xyXG5cdFx0XHRcdFx0LyogTm90ZTogSW5saW5lIGVsZW1lbnRzIGNhbm5vdCBoYXZlIGRpbWVuc2lvbnMgYW5pbWF0ZWQsIHNvIHRoZXkncmUgcmV2ZXJ0ZWQgdG8gaW5saW5lLWJsb2NrLiAqL1xyXG5cdFx0XHRcdFx0b3B0cy5kaXNwbGF5ID0gKGRpcmVjdGlvbiA9PT0gXCJEb3duXCIgPyAoVmVsb2NpdHkuQ1NTLlZhbHVlcy5nZXREaXNwbGF5VHlwZShlbGVtZW50KSA9PT0gXCJpbmxpbmVcIiA/IFwiaW5saW5lLWJsb2NrXCIgOiBcImJsb2NrXCIpIDogXCJub25lXCIpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0b3B0cy5iZWdpbiA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0LyogSWYgdGhlIHVzZXIgcGFzc2VkIGluIGEgYmVnaW4gY2FsbGJhY2ssIGZpcmUgaXQgbm93LiAqL1xyXG5cdFx0XHRcdFx0aWYgKGVsZW1lbnRzSW5kZXggPT09IDAgJiYgYmVnaW4pIHtcclxuXHRcdFx0XHRcdFx0YmVnaW4uY2FsbChlbGVtZW50cywgZWxlbWVudHMpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8qIENhY2hlIHRoZSBlbGVtZW50cycgb3JpZ2luYWwgdmVydGljYWwgZGltZW5zaW9uYWwgcHJvcGVydHkgdmFsdWVzIHNvIHRoYXQgd2UgY2FuIGFuaW1hdGUgYmFjayB0byB0aGVtLiAqL1xyXG5cdFx0XHRcdFx0Zm9yICh2YXIgcHJvcGVydHkgaW4gY29tcHV0ZWRWYWx1ZXMpIHtcclxuXHRcdFx0XHRcdFx0aWYgKCFjb21wdXRlZFZhbHVlcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcclxuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpbmxpbmVWYWx1ZXNbcHJvcGVydHldID0gZWxlbWVudC5zdHlsZVtwcm9wZXJ0eV07XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBGb3Igc2xpZGVEb3duLCB1c2UgZm9yY2VmZWVkaW5nIHRvIGFuaW1hdGUgYWxsIHZlcnRpY2FsIHByb3BlcnRpZXMgZnJvbSAwLiBGb3Igc2xpZGVVcCxcclxuXHRcdFx0XHRcdFx0IHVzZSBmb3JjZWZlZWRpbmcgdG8gc3RhcnQgZnJvbSBjb21wdXRlZCB2YWx1ZXMgYW5kIGFuaW1hdGUgZG93biB0byAwLiAqL1xyXG5cdFx0XHRcdFx0XHR2YXIgcHJvcGVydHlWYWx1ZSA9IENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIHByb3BlcnR5KTtcclxuXHRcdFx0XHRcdFx0Y29tcHV0ZWRWYWx1ZXNbcHJvcGVydHldID0gKGRpcmVjdGlvbiA9PT0gXCJEb3duXCIpID8gW3Byb3BlcnR5VmFsdWUsIDBdIDogWzAsIHByb3BlcnR5VmFsdWVdO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8qIEZvcmNlIHZlcnRpY2FsIG92ZXJmbG93IGNvbnRlbnQgdG8gY2xpcCBzbyB0aGF0IHNsaWRpbmcgd29ya3MgYXMgZXhwZWN0ZWQuICovXHJcblx0XHRcdFx0XHRpbmxpbmVWYWx1ZXMub3ZlcmZsb3cgPSBlbGVtZW50LnN0eWxlLm92ZXJmbG93O1xyXG5cdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0b3B0cy5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0LyogUmVzZXQgZWxlbWVudCB0byBpdHMgcHJlLXNsaWRlIGlubGluZSB2YWx1ZXMgb25jZSBpdHMgc2xpZGUgYW5pbWF0aW9uIGlzIGNvbXBsZXRlLiAqL1xyXG5cdFx0XHRcdFx0Zm9yICh2YXIgcHJvcGVydHkgaW4gaW5saW5lVmFsdWVzKSB7XHJcblx0XHRcdFx0XHRcdGlmIChpbmxpbmVWYWx1ZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKSB7XHJcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZVtwcm9wZXJ0eV0gPSBpbmxpbmVWYWx1ZXNbcHJvcGVydHldO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogSWYgdGhlIHVzZXIgcGFzc2VkIGluIGEgY29tcGxldGUgY2FsbGJhY2ssIGZpcmUgaXQgbm93LiAqL1xyXG5cdFx0XHRcdFx0aWYgKGVsZW1lbnRzSW5kZXggPT09IGVsZW1lbnRzU2l6ZSAtIDEpIHtcclxuXHRcdFx0XHRcdFx0aWYgKGNvbXBsZXRlKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tcGxldGUuY2FsbChlbGVtZW50cywgZWxlbWVudHMpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChwcm9taXNlRGF0YSkge1xyXG5cdFx0XHRcdFx0XHRcdHByb21pc2VEYXRhLnJlc29sdmVyKGVsZW1lbnRzKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFZlbG9jaXR5KGVsZW1lbnQsIGNvbXB1dGVkVmFsdWVzLCBvcHRzKTtcclxuXHRcdFx0fTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8qIGZhZGVJbiwgZmFkZU91dCAqL1xyXG5cdFx0JC5lYWNoKFtcIkluXCIsIFwiT3V0XCJdLCBmdW5jdGlvbihpLCBkaXJlY3Rpb24pIHtcclxuXHRcdFx0VmVsb2NpdHkuUmVkaXJlY3RzW1wiZmFkZVwiICsgZGlyZWN0aW9uXSA9IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMsIGVsZW1lbnRzSW5kZXgsIGVsZW1lbnRzU2l6ZSwgZWxlbWVudHMsIHByb21pc2VEYXRhKSB7XHJcblx0XHRcdFx0dmFyIG9wdHMgPSAkLmV4dGVuZCh7fSwgb3B0aW9ucyksXHJcblx0XHRcdFx0XHRcdGNvbXBsZXRlID0gb3B0cy5jb21wbGV0ZSxcclxuXHRcdFx0XHRcdFx0cHJvcGVydGllc01hcCA9IHtvcGFjaXR5OiAoZGlyZWN0aW9uID09PSBcIkluXCIpID8gMSA6IDB9O1xyXG5cclxuXHRcdFx0XHQvKiBTaW5jZSByZWRpcmVjdHMgYXJlIHRyaWdnZXJlZCBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggZWxlbWVudCBpbiB0aGUgYW5pbWF0ZWQgc2V0LCBhdm9pZCByZXBlYXRlZGx5IHRyaWdnZXJpbmdcclxuXHRcdFx0XHQgY2FsbGJhY2tzIGJ5IGZpcmluZyB0aGVtIG9ubHkgd2hlbiB0aGUgZmluYWwgZWxlbWVudCBoYXMgYmVlbiByZWFjaGVkLiAqL1xyXG5cdFx0XHRcdGlmIChlbGVtZW50c0luZGV4ICE9PSAwKSB7XHJcblx0XHRcdFx0XHRvcHRzLmJlZ2luID0gbnVsbDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGVsZW1lbnRzSW5kZXggIT09IGVsZW1lbnRzU2l6ZSAtIDEpIHtcclxuXHRcdFx0XHRcdG9wdHMuY29tcGxldGUgPSBudWxsO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRvcHRzLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdGlmIChjb21wbGV0ZSkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbXBsZXRlLmNhbGwoZWxlbWVudHMsIGVsZW1lbnRzKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAocHJvbWlzZURhdGEpIHtcclxuXHRcdFx0XHRcdFx0XHRwcm9taXNlRGF0YS5yZXNvbHZlcihlbGVtZW50cyk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKiBJZiBhIGRpc3BsYXkgd2FzIHBhc3NlZCBpbiwgdXNlIGl0LiBPdGhlcndpc2UsIGRlZmF1bHQgdG8gXCJub25lXCIgZm9yIGZhZGVPdXQgb3IgdGhlIGVsZW1lbnQtc3BlY2lmaWMgZGVmYXVsdCBmb3IgZmFkZUluLiAqL1xyXG5cdFx0XHRcdC8qIE5vdGU6IFdlIGFsbG93IHVzZXJzIHRvIHBhc3MgaW4gXCJudWxsXCIgdG8gc2tpcCBkaXNwbGF5IHNldHRpbmcgYWx0b2dldGhlci4gKi9cclxuXHRcdFx0XHRpZiAob3B0cy5kaXNwbGF5ID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdG9wdHMuZGlzcGxheSA9IChkaXJlY3Rpb24gPT09IFwiSW5cIiA/IFwiYXV0b1wiIDogXCJub25lXCIpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0VmVsb2NpdHkodGhpcywgcHJvcGVydGllc01hcCwgb3B0cyk7XHJcblx0XHRcdH07XHJcblx0XHR9KTtcclxuXHJcblx0XHRyZXR1cm4gVmVsb2NpdHk7XHJcblx0fSgod2luZG93LmpRdWVyeSB8fCB3aW5kb3cuWmVwdG8gfHwgd2luZG93KSwgd2luZG93LCAod2luZG93ID8gd2luZG93LmRvY3VtZW50IDogdW5kZWZpbmVkKSk7XHJcbn0pKTtcclxuXHJcbi8qKioqKioqKioqKioqKioqKipcclxuIEtub3duIElzc3Vlc1xyXG4gKioqKioqKioqKioqKioqKioqL1xyXG5cclxuLyogVGhlIENTUyBzcGVjIG1hbmRhdGVzIHRoYXQgdGhlIHRyYW5zbGF0ZVgvWS9aIHRyYW5zZm9ybXMgYXJlICUtcmVsYXRpdmUgdG8gdGhlIGVsZW1lbnQgaXRzZWxmIC0tIG5vdCBpdHMgcGFyZW50LlxyXG4gVmVsb2NpdHksIGhvd2V2ZXIsIGRvZXNuJ3QgbWFrZSB0aGlzIGRpc3RpbmN0aW9uLiBUaHVzLCBjb252ZXJ0aW5nIHRvIG9yIGZyb20gdGhlICUgdW5pdCB3aXRoIHRoZXNlIHN1YnByb3BlcnRpZXNcclxuIHdpbGwgcHJvZHVjZSBhbiBpbmFjY3VyYXRlIGNvbnZlcnNpb24gdmFsdWUuIFRoZSBzYW1lIGlzc3VlIGV4aXN0cyB3aXRoIHRoZSBjeC9jeSBhdHRyaWJ1dGVzIG9mIFNWRyBjaXJjbGVzIGFuZCBlbGxpcHNlcy4gKi9cclxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1cGRhdGVTb3VyY2VzKGltZywgc291cmNlcykge1xuICBpZiAoc291cmNlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gR2V0IHNvdXJjZSBzaWJsaW5ncyBvZiB0aGUgaW1nIHRhZ1xuICBjb25zdCBpbWdTaWJsaW5nV2VicCA9ICQoaW1nKS5zaWJsaW5ncygnc291cmNlW3R5cGU9XCJpbWFnZS93ZWJwXCJdJyk7XG4gIGNvbnN0IGltZ1NpYmxpbmdBdmlmID0gJChpbWcpLnNpYmxpbmdzKCdzb3VyY2VbdHlwZT1cImltYWdlL2F2aWZcIl0nKTtcblxuICAvLyBVcGRhdGUgdGhlbSBpZiB0aGV5IGV4aXN0IGFuZCB3ZSBoYXZlIGEgc291cmNlIGZvciB0aGVtXG4gIGlmIChzb3VyY2VzLndlYnAgIT09IHVuZGVmaW5lZCAmJiBpbWdTaWJsaW5nV2VicC5sZW5ndGgpIHtcbiAgICBpbWdTaWJsaW5nV2VicC5hdHRyKCdzcmNzZXQnLCBzb3VyY2VzLndlYnApO1xuICB9XG4gIGlmIChzb3VyY2VzLmF2aWYgIT09IHVuZGVmaW5lZCAmJiBpbWdTaWJsaW5nQXZpZi5sZW5ndGgpIHtcbiAgICBpbWdTaWJsaW5nQXZpZi5hdHRyKCdzcmNzZXQnLCBzb3VyY2VzLmF2aWYpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKi9cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb2R1Y3RNaW5pdGF0dXJlIHtcbiAgaW5pdCgpIHtcbiAgICAkKCcuanMtcHJvZHVjdC1taW5pYXR1cmUnKS5lYWNoKChpbmRleCwgZWxlbWVudCkgPT4ge1xuICAgICAgLy8gTGltaXQgbnVtYmVyIG9mIHNob3duIGNvbG9yc1xuICAgICAgaWYgKCQoZWxlbWVudCkuZmluZCgnLmNvbG9yJykubGVuZ3RoID4gNSkge1xuICAgICAgICBsZXQgY291bnQgPSAwO1xuXG4gICAgICAgICQoZWxlbWVudClcbiAgICAgICAgICAuZmluZCgnLmNvbG9yJylcbiAgICAgICAgICAuZWFjaCgoY29sb3JJbmRleCwgY29sb3JFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoY29sb3JJbmRleCA+IDQpIHtcbiAgICAgICAgICAgICAgJChjb2xvckVsZW1lbnQpLmhpZGUoKTtcbiAgICAgICAgICAgICAgY291bnQgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJy5qcy1jb3VudCcpLmFwcGVuZChgKyR7Y291bnR9YCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjAgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqL1xuaW1wb3J0ICQgZnJvbSBcImpxdWVyeVwiO1xuaW1wb3J0IHByZXN0YXNob3AgZnJvbSBcInByZXN0YXNob3BcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuaW1wb3J0IFwidmVsb2NpdHktYW5pbWF0ZVwiO1xuaW1wb3J0IHVwZGF0ZVNvdXJjZXMgZnJvbSBcIi4vY29tcG9uZW50cy91cGRhdGUtc291cmNlc1wiO1xuaW1wb3J0IFByb2R1Y3RNaW5pdGF0dXJlIGZyb20gXCIuL2NvbXBvbmVudHMvcHJvZHVjdC1taW5pYXR1cmVcIjtcblxuXG5cbiQoZG9jdW1lbnQpLnJlYWR5KCgpID0+IHtcbiAgbGV0IHBhZ2VGaWx0ZXIgPSBmYWxzZTtcblxuICAkKFwiI3BhZ2luYXRpb24tYW5jaG9yLmpzLXNlYXJjaC1saW5rXCIpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgIHBhZ2VGaWx0ZXIgPSB0cnVlXG4gIH0gKVxuICBjb25zdCBtb3ZlID0gKGRpcmVjdGlvbikgPT4ge1xuICAgIGNvbnN0IFRIVU1CX01BUkdJTiA9IDIwO1xuICAgIGNvbnN0ICR0aHVtYm5haWxzID0gJChcIi5qcy1xdi1wcm9kdWN0LWltYWdlc1wiKTtcbiAgICBjb25zdCB0aHVtYkhlaWdodCA9XG4gICAgICAkKFwiLmpzLXF2LXByb2R1Y3QtaW1hZ2VzIGxpIGltZ1wiKS5oZWlnaHQoKSArIFRIVU1CX01BUkdJTjtcbiAgICBjb25zdCBjdXJyZW50UG9zaXRpb24gPSAkdGh1bWJuYWlscy5wb3NpdGlvbigpLnRvcDtcbiAgICAkdGh1bWJuYWlscy52ZWxvY2l0eShcbiAgICAgIHtcbiAgICAgICAgdHJhbnNsYXRlWTpcbiAgICAgICAgICBkaXJlY3Rpb24gPT09IFwidXBcIlxuICAgICAgICAgICAgPyBjdXJyZW50UG9zaXRpb24gKyB0aHVtYkhlaWdodFxuICAgICAgICAgICAgOiBjdXJyZW50UG9zaXRpb24gLSB0aHVtYkhlaWdodCxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICgkdGh1bWJuYWlscy5wb3NpdGlvbigpLnRvcCA+PSAwKSB7XG4gICAgICAgICAgJChcIi5hcnJvdy11cFwiKS5jc3MoXCJvcGFjaXR5XCIsIFwiLjJcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgJHRodW1ibmFpbHMucG9zaXRpb24oKS50b3AgKyAkdGh1bWJuYWlscy5oZWlnaHQoKSA8PVxuICAgICAgICAgICQoXCIuanMtcXYtbWFza1wiKS5oZWlnaHQoKVxuICAgICAgICApIHtcbiAgICAgICAgICAkKFwiLmFycm93LWRvd25cIikuY3NzKFwib3BhY2l0eVwiLCBcIi4yXCIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgcHJvZHVjdENvbmZpZyA9IChxdikgPT4ge1xuICAgIGNvbnN0IE1BWF9USFVNQlMgPSA0O1xuICAgIGNvbnN0ICRhcnJvd3MgPSAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5hcnJvd3MpO1xuICAgIGNvbnN0ICR0aHVtYm5haWxzID0gcXYuZmluZChcIi5qcy1xdi1wcm9kdWN0LWltYWdlc1wiKTtcbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC50aHVtYikub24oXCJjbGlja1wiLCAoZXZlbnQpID0+IHtcbiAgICAgIC8vIFN3YXAgYWN0aXZlIGNsYXNzZXMgb24gdGh1bWJuYWlsXG4gICAgICBpZiAoJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QudGh1bWIpLmhhc0NsYXNzKFwic2VsZWN0ZWRcIikpIHtcbiAgICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QudGh1bWIpLnJlbW92ZUNsYXNzKFwic2VsZWN0ZWRcIik7XG4gICAgICB9XG4gICAgICAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmFkZENsYXNzKFwic2VsZWN0ZWRcIik7XG5cbiAgICAgIC8vIEdldCBkYXRhIGZyb20gdGh1bWJuYWlsIGFuZCB1cGRhdGUgY292ZXIgc3JjLCBhbHQgYW5kIHRpdGxlXG4gICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5jb3ZlcikuYXR0cihcbiAgICAgICAgXCJzcmNcIixcbiAgICAgICAgJChldmVudC50YXJnZXQpLmRhdGEoXCJpbWFnZS1sYXJnZS1zcmNcIiksXG4gICAgICApO1xuICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QuY292ZXIpLmF0dHIoXG4gICAgICAgIFwiYWx0XCIsXG4gICAgICAgICQoZXZlbnQudGFyZ2V0KS5hdHRyKFwiYWx0XCIpLFxuICAgICAgKTtcbiAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmNvdmVyKS5hdHRyKFxuICAgICAgICBcInRpdGxlXCIsXG4gICAgICAgICQoZXZlbnQudGFyZ2V0KS5hdHRyKFwidGl0bGVcIiksXG4gICAgICApO1xuXG4gICAgICAvLyBHZXQgZGF0YSBmcm9tIHRodW1ibmFpbCBhbmQgdXBkYXRlIGNvdmVyIHNvdXJjZXNcbiAgICAgIHVwZGF0ZVNvdXJjZXMoXG4gICAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmNvdmVyKSxcbiAgICAgICAgJChldmVudC50YXJnZXQpLmRhdGEoXCJpbWFnZS1sYXJnZS1zb3VyY2VzXCIpLFxuICAgICAgKTtcbiAgICB9KTtcbiAgICBpZiAoJHRodW1ibmFpbHMuZmluZChcImxpXCIpLmxlbmd0aCA8PSBNQVhfVEhVTUJTKSB7XG4gICAgICAkYXJyb3dzLmhpZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJGFycm93cy5vbihcImNsaWNrXCIsIChldmVudCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgJChldmVudC50YXJnZXQpLmhhc0NsYXNzKFwiYXJyb3ctdXBcIikgJiZcbiAgICAgICAgICAkKFwiLmpzLXF2LXByb2R1Y3QtaW1hZ2VzXCIpLnBvc2l0aW9uKCkudG9wIDwgMFxuICAgICAgICApIHtcbiAgICAgICAgICBtb3ZlKFwidXBcIik7XG4gICAgICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmFycm93RG93bikuY3NzKFwib3BhY2l0eVwiLCBcIjFcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgJChldmVudC50YXJnZXQpLmhhc0NsYXNzKFwiYXJyb3ctZG93blwiKSAmJlxuICAgICAgICAgICR0aHVtYm5haWxzLnBvc2l0aW9uKCkudG9wICsgJHRodW1ibmFpbHMuaGVpZ2h0KCkgPlxuICAgICAgICAgICAgJChcIi5qcy1xdi1tYXNrXCIpLmhlaWdodCgpXG4gICAgICAgICkge1xuICAgICAgICAgIG1vdmUoXCJkb3duXCIpO1xuICAgICAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5hcnJvd1VwKS5jc3MoXCJvcGFjaXR5XCIsIFwiMVwiKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHF2LmZpbmQocHJlc3Rhc2hvcC5zZWxlY3RvcnMucXVhbnRpdHlXYW50ZWQpLlRvdWNoU3Bpbih7XG4gICAgICB2ZXJ0aWNhbGJ1dHRvbnM6IHRydWUsXG4gICAgICBtaW46IDEsXG4gICAgICBtYXg6IDEwMDAwMDAsXG4gICAgfSk7XG5cbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMudG91Y2hzcGluKS5vZmYoXCJ0b3VjaHN0YXJ0LnRvdWNoc3BpblwiKTtcbiAgfTtcblxuICBwcmVzdGFzaG9wLm9uKFwiY2xpY2tRdWlja1ZpZXdcIiwgKGVsbSkgPT4ge1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBhY3Rpb246IFwicXVpY2t2aWV3XCIsXG4gICAgICBpZF9wcm9kdWN0OiBlbG0uZGF0YXNldC5pZFByb2R1Y3QsXG4gICAgICBpZF9wcm9kdWN0X2F0dHJpYnV0ZTogZWxtLmRhdGFzZXQuaWRQcm9kdWN0QXR0cmlidXRlLFxuICAgIH07XG4gICAgJC5wb3N0KHByZXN0YXNob3AudXJscy5wYWdlcy5wcm9kdWN0LCBkYXRhLCBudWxsLCBcImpzb25cIilcbiAgICAgIC50aGVuKChyZXNwKSA9PiB7XG4gICAgICAgICQoXCJib2R5XCIpLmFwcGVuZChyZXNwLnF1aWNrdmlld19odG1sKTtcbiAgICAgICAgY29uc3QgcHJvZHVjdE1vZGFsID0gJChcbiAgICAgICAgICBgI3F1aWNrdmlldy1tb2RhbC0ke3Jlc3AucHJvZHVjdC5pZH0tJHtyZXNwLnByb2R1Y3QuaWRfcHJvZHVjdF9hdHRyaWJ1dGV9YCxcbiAgICAgICAgKTtcbiAgICAgICAgcHJvZHVjdE1vZGFsLm1vZGFsKFwic2hvd1wiKTtcbiAgICAgICAgcHJvZHVjdENvbmZpZyhwcm9kdWN0TW9kYWwpO1xuICAgICAgICBwcm9kdWN0TW9kYWwub24oXCJoaWRkZW4uYnMubW9kYWxcIiwgKCkgPT4ge1xuICAgICAgICAgIHByb2R1Y3RNb2RhbC5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLmZhaWwoKHJlc3ApID0+IHtcbiAgICAgICAgcHJlc3Rhc2hvcC5lbWl0KFwiaGFuZGxlRXJyb3JcIiwge1xuICAgICAgICAgIGV2ZW50VHlwZTogXCJjbGlja1F1aWNrVmlld1wiLFxuICAgICAgICAgIHJlc3AsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH0pO1xuXG4gICQoXCJib2R5XCIpLm9uKFxuICAgIFwiY2xpY2tcIixcbiAgICBwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmxpc3Rpbmcuc2VhcmNoRmlsdGVyVG9nZ2xlcixcbiAgICAoKSA9PiB7XG4gICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5zZWFyY2hGaWx0ZXJzV3JhcHBlcikucmVtb3ZlQ2xhc3MoXG4gICAgICAgIFwiaGlkZGVuLXNtLWRvd25cIixcbiAgICAgICk7XG4gICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY29udGVudFdyYXBwZXIpLmFkZENsYXNzKFwiaGlkZGVuLXNtLWRvd25cIik7XG4gICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuZm9vdGVyKS5hZGRDbGFzcyhcImhpZGRlbi1zbS1kb3duXCIpO1xuICAgIH0sXG4gICk7XG4gICQoXG4gICAgYCR7cHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5saXN0aW5nLnNlYXJjaEZpbHRlckNvbnRyb2xzfSAke3ByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY2xlYXJ9YCxcbiAgKS5vbihcImNsaWNrXCIsICgpID0+IHtcbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5zZWFyY2hGaWx0ZXJzV3JhcHBlcikuYWRkQ2xhc3MoXG4gICAgICBcImhpZGRlbi1zbS1kb3duXCIsXG4gICAgKTtcbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY29udGVudFdyYXBwZXIpLnJlbW92ZUNsYXNzKFwiaGlkZGVuLXNtLWRvd25cIik7XG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmZvb3RlcikucmVtb3ZlQ2xhc3MoXCJoaWRkZW4tc20tZG93blwiKTtcbiAgfSk7XG4gICQoYCR7cHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5saXN0aW5nLnNlYXJjaEZpbHRlckNvbnRyb2xzfSAub2tgKS5vbihcbiAgICBcImNsaWNrXCIsXG4gICAgKCkgPT4ge1xuICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmxpc3Rpbmcuc2VhcmNoRmlsdGVyc1dyYXBwZXIpLmFkZENsYXNzKFxuICAgICAgICBcImhpZGRlbi1zbS1kb3duXCIsXG4gICAgICApO1xuICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNvbnRlbnRXcmFwcGVyKS5yZW1vdmVDbGFzcyhcImhpZGRlbi1zbS1kb3duXCIpO1xuICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmZvb3RlcikucmVtb3ZlQ2xhc3MoXCJoaWRkZW4tc20tZG93blwiKTtcbiAgICB9LFxuICApO1xuXG4gIGNvbnN0IHBhcnNlU2VhcmNoVXJsID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnRhcmdldC5kYXRhc2V0LnNlYXJjaFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXZlbnQudGFyZ2V0LmRhdGFzZXQuc2VhcmNoVXJsO1xuICAgIH1cblxuICAgIGlmICgkKGV2ZW50LnRhcmdldCkucGFyZW50KClbMF0uZGF0YXNldC5zZWFyY2hVcmwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuIG5vdCBwYXJzZSBzZWFyY2ggVVJMXCIpO1xuICAgIH1cblxuICAgIHJldHVybiAkKGV2ZW50LnRhcmdldCkucGFyZW50KClbMF0uZGF0YXNldC5zZWFyY2hVcmw7XG4gIH07XG5cbiAgZnVuY3Rpb24gdXBkYXRlUHJvZHVjdExpc3RET00oZGF0YSkge1xuICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5saXN0aW5nLnNlYXJjaEZpbHRlcnMpLnJlcGxhY2VXaXRoKFxuICAgICAgZGF0YS5yZW5kZXJlZF9mYWNldHMsXG4gICAgKTtcbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5hY3RpdmVTZWFyY2hGaWx0ZXJzKS5yZXBsYWNlV2l0aChcbiAgICAgIGRhdGEucmVuZGVyZWRfYWN0aXZlX2ZpbHRlcnMsXG4gICAgKTtcbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5saXN0VG9wKS5yZXBsYWNlV2l0aChcbiAgICAgIGRhdGEucmVuZGVyZWRfcHJvZHVjdHNfdG9wLFxuICAgICk7XG5cbiAgICBjb25zdCByZW5kZXJlZFByb2R1Y3RzID0gJChkYXRhLnJlbmRlcmVkX3Byb2R1Y3RzKTtcbiAgICBjb25zdCBwcm9kdWN0U2VsZWN0b3JzID0gJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmxpc3RpbmcucHJvZHVjdCk7XG5cbiAgICBpZiAocHJvZHVjdFNlbGVjdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBwcm9kdWN0U2VsZWN0b3JzXG4gICAgICAgIC5yZW1vdmVDbGFzcygpXG4gICAgICAgIC5hZGRDbGFzcyhwcm9kdWN0U2VsZWN0b3JzLmZpcnN0KCkuYXR0cihcImNsYXNzXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvZHVjdFNlbGVjdG9yc1xuICAgICAgICAucmVtb3ZlQ2xhc3MoKVxuICAgICAgICAuYWRkQ2xhc3MocmVuZGVyZWRQcm9kdWN0cy5maXJzdCgpLmF0dHIoXCJjbGFzc1wiKSk7XG4gICAgfVxuXG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmxpc3RpbmcubGlzdCkucmVwbGFjZVdpdGgocmVuZGVyZWRQcm9kdWN0cyk7XG5cbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5saXN0Qm90dG9tKS5yZXBsYWNlV2l0aChcbiAgICAgIGRhdGEucmVuZGVyZWRfcHJvZHVjdHNfYm90dG9tLFxuICAgICk7XG4gICAgaWYgKGRhdGEucmVuZGVyZWRfcHJvZHVjdHNfaGVhZGVyKSB7XG4gICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5saXN0SGVhZGVyKS5yZXBsYWNlV2l0aChcbiAgICAgICAgZGF0YS5yZW5kZXJlZF9wcm9kdWN0c19oZWFkZXIsXG4gICAgICApO1xuICAgIH1cblxuICAgICQoJyNzaG93LWZpbHRlcnMnKS5vbignY2xpY2sub2ZmY2FudmFzJywgKCkgPT4ge1xuICAgICAgJCgnI3Byb2R1Y3QtbGlzdC10b3AtZmlsdGVycycpLnNob3coKTtcbiAgICB9KTtcbiAgXG4gICAgJCgnI2hpZGUtZmlsdGVycycpLm9uKCdjbGljay5vZmZjYW52YXMnLCAoKSA9PiB7XG4gICAgICAkKCcjcHJvZHVjdC1saXN0LXRvcC1maWx0ZXJzJykuaGlkZSgpO1xuICAgICAgJCgnI292ZXJsYXknKS5oaWRlKCk7IFxuICAgIH0pO1xuXG4gICAgJCgnI3Nob3ctZmlsdGVycycpLmNsaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgJCgnI292ZXJsYXknKS5zaG93KCk7XG4gICAgfSk7XG5cbiAgICAkKFwiI3BhZ2luYXRpb24tYW5jaG9yLmpzLXNlYXJjaC1saW5rXCIpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICAgcGFnZUZpbHRlciA9IHRydWVcbiAgICB9IClcblxuICBcbiAgICBmdW5jdGlvbiBjaGVja0FuZFNob3dPdmVybGF5KCkge1xuICAgICAgaWYgKCQoJyNwcm9kdWN0LWxpc3QtdG9wLWZpbHRlcnMnKS5pcygnOnZpc2libGUnKSkgeyBcbiAgICAgICAgICAkKCcjb3ZlcmxheScpLnNob3coKTtcbiAgICAgIH0gZWxzZSB7IFxuICAgICAgICAgICQoJyNvdmVybGF5JykuaGlkZSgpO1xuICAgICAgfVxuICB9XG5cbiAgICBpZiAoICFwYWdlRmlsdGVyICkge1xuICAgICAgJCgnI3Byb2R1Y3QtbGlzdC10b3AtZmlsdGVycycpLnNob3coZnVuY3Rpb24oKSB7XG4gICAgICAgIGNoZWNrQW5kU2hvd092ZXJsYXkoKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAkKCcjcHJvZHVjdC1saXN0LXRvcC1maWx0ZXJzJykuaGlkZSgpO1xuICAgIH1cblxuICAgICQoJyNvdmVybGF5Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgICAkKCcjcHJvZHVjdC1saXN0LXRvcC1maWx0ZXJzJykuaGlkZSgpO1xuICAgICAgJCgnI292ZXJsYXknKS5oaWRlKCk7ICBcbiAgICAgXG4gIH0pO1xuXHQgICBwYWdlRmlsdGVyID0gZmFsc2VcblxuICAgICQoJy50aC1hY2NvcmRpb24nKS50aGFjY29yZGlvbigpO1xuXG4gICAgY29uc3QgcHJvZHVjdE1pbml0YXR1cmUgPSBuZXcgUHJvZHVjdE1pbml0YXR1cmUoKTtcbiAgICBwcm9kdWN0TWluaXRhdHVyZS5pbml0KCk7XG4gIH1cblxuICBcblxuICAkKFwiYm9keVwiKS5vbihcbiAgICBcImNoYW5nZVwiLFxuICAgIGAke3ByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5zZWFyY2hGaWx0ZXJzfSBpbnB1dFtkYXRhLXNlYXJjaC11cmxdYCxcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIHByZXN0YXNob3AuZW1pdChcInVwZGF0ZUZhY2V0c1wiLCBwYXJzZVNlYXJjaFVybChldmVudCkpO1xuICAgIH0sXG4gICk7XG5cbiAgJChcImJvZHlcIikub24oXG4gICAgXCJjbGlja1wiLFxuICAgIHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5zZWFyY2hGaWx0ZXJzQ2xlYXJBbGwsXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICBwcmVzdGFzaG9wLmVtaXQoXCJ1cGRhdGVGYWNldHNcIiwgcGFyc2VTZWFyY2hVcmwoZXZlbnQpKTtcbiAgICB9LFxuICApO1xuXG4gICQoXCJib2R5XCIpLm9uKFxuICAgIFwiY2xpY2tcIixcbiAgICBwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmxpc3Rpbmcuc2VhcmNoTGluayxcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBwcmVzdGFzaG9wLmVtaXQoXCJ1cGRhdGVGYWNldHNcIiwgJChldmVudC50YXJnZXQpLmNsb3Nlc3QoXCJhXCIpLmdldCgwKS5ocmVmKTtcbiAgICB9LFxuICApO1xuXG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgKGUpID0+IHtcbiAgICBpZiAoZS5zdGF0ZSAmJiBlLnN0YXRlLmN1cnJlbnRfdXJsKSB7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGUuc3RhdGUuY3VycmVudF91cmw7XG4gICAgfVxuICB9KTtcblxuICAkKFwiYm9keVwiKS5vbihcbiAgICBcImNoYW5nZVwiLFxuICAgIGAke3ByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5zZWFyY2hGaWx0ZXJzfSBzZWxlY3RgLFxuICAgIChldmVudCkgPT4ge1xuICAgICAgY29uc3QgZm9ybSA9ICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFwiZm9ybVwiKTtcbiAgICAgIHByZXN0YXNob3AuZW1pdChcInVwZGF0ZUZhY2V0c1wiLCBgPyR7Zm9ybS5zZXJpYWxpemUoKX1gKTtcbiAgICB9LFxuICApO1xuXG4gIHByZXN0YXNob3Aub24oXCJ1cGRhdGVQcm9kdWN0TGlzdFwiLCAoZGF0YSkgPT4ge1xuICAgIHVwZGF0ZVByb2R1Y3RMaXN0RE9NKGRhdGEpO1xuICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgfSk7XG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjAgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqL1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuaW1wb3J0ICd2ZWxvY2l0eS1hbmltYXRlJztcbi8vIGltcG9ydCB1cGRhdGVTb3VyY2VzIGZyb20gJ3VwZGF0ZS1zb3VyY2VzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvZHVjdFNlbGVjdCB7XG4gIGluaXQoKSB7XG4gICAgY29uc3QgTUFYX1RIVU1CUyA9IDU7XG4gICAgY29uc3QgJGFycm93cyA9ICQoJy5qcy1tb2RhbC1hcnJvd3MnKTtcbiAgICBjb25zdCAkdGh1bWJuYWlscyA9ICQoJy5qcy1tb2RhbC1wcm9kdWN0LWltYWdlcycpO1xuXG4gICAgJCgnYm9keScpXG4gICAgICAub24oJ2NsaWNrJywgJy5qcy1tb2RhbC10aHVtYicsIChldmVudCkgPT4ge1xuICAgICAgICAvLyBTd2FwIGFjdGl2ZSBjbGFzc2VzIG9uIHRodW1ibmFpbFxuICAgICAgICBpZiAoJCgnLmpzLW1vZGFsLXRodW1iJykuaGFzQ2xhc3MoJ3NlbGVjdGVkJykpIHtcbiAgICAgICAgICAkKCcuanMtbW9kYWwtdGh1bWInKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmFkZENsYXNzKCdzZWxlY3RlZCcpO1xuXG4gICAgICAgIC8vIEdldCBkYXRhIGZyb20gdGh1bWJuYWlsIGFuZCB1cGRhdGUgY292ZXIgc3JjLCBhbHQgYW5kIHRpdGxlXG4gICAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0Lm1vZGFsUHJvZHVjdENvdmVyKS5hdHRyKCdzcmMnLCAkKGV2ZW50LnRhcmdldCkuZGF0YSgnaW1hZ2UtbGFyZ2Utc3JjJykpO1xuICAgICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5tb2RhbFByb2R1Y3RDb3ZlcikuYXR0cigndGl0bGUnLCAkKGV2ZW50LnRhcmdldCkuYXR0cigndGl0bGUnKSk7XG4gICAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0Lm1vZGFsUHJvZHVjdENvdmVyKS5hdHRyKCdhbHQnLCAkKGV2ZW50LnRhcmdldCkuYXR0cignYWx0JykpO1xuXG4gICAgICAgIC8vIEdldCBkYXRhIGZyb20gdGh1bWJuYWlsIGFuZCB1cGRhdGUgY292ZXIgc291cmNlc1xuICAgICAgICAvLyB1cGRhdGVTb3VyY2VzKFxuICAgICAgICAvLyAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0Lm1vZGFsUHJvZHVjdENvdmVyKSxcbiAgICAgICAgLy8gICAkKGV2ZW50LnRhcmdldCkuZGF0YSgnaW1hZ2UtbGFyZ2Utc291cmNlcycpLFxuICAgICAgICAvLyApO1xuICAgICAgfSlcbiAgICAgIC5vbignY2xpY2snLCAnYXNpZGUjdGh1bWJuYWlscycsIChldmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmlkID09PSAndGh1bWJuYWlscycpIHtcbiAgICAgICAgICAkKCcjcHJvZHVjdC1tb2RhbCcpLm1vZGFsKCdoaWRlJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgaWYgKCQoJy5qcy1tb2RhbC1wcm9kdWN0LWltYWdlcyBsaScpLmxlbmd0aCA8PSBNQVhfVEhVTUJTKSB7XG4gICAgICAkYXJyb3dzLmNzcygnb3BhY2l0eScsICcuMicpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkYXJyb3dzLm9uKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgICBpZiAoJChldmVudC50YXJnZXQpLmhhc0NsYXNzKCdhcnJvdy11cCcpICYmICR0aHVtYm5haWxzLnBvc2l0aW9uKCkudG9wIDwgMCkge1xuICAgICAgICAgIHRoaXMubW92ZSgndXAnKTtcbiAgICAgICAgICAkKCcuanMtbW9kYWwtYXJyb3ctZG93bicpLmNzcygnb3BhY2l0eScsICcxJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgJChldmVudC50YXJnZXQpLmhhc0NsYXNzKCdhcnJvdy1kb3duJylcbiAgICAgICAgICAmJiAkdGh1bWJuYWlscy5wb3NpdGlvbigpLnRvcCArICR0aHVtYm5haWxzLmhlaWdodCgpID4gJCgnLmpzLW1vZGFsLW1hc2snKS5oZWlnaHQoKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLm1vdmUoJ2Rvd24nKTtcbiAgICAgICAgICAkKCcuanMtbW9kYWwtYXJyb3ctdXAnKS5jc3MoJ29wYWNpdHknLCAnMScpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBtb3ZlKGRpcmVjdGlvbikge1xuICAgIGNvbnN0IFRIVU1CX01BUkdJTiA9IDEwO1xuICAgIGNvbnN0ICR0aHVtYm5haWxzID0gJCgnLmpzLW1vZGFsLXByb2R1Y3QtaW1hZ2VzJyk7XG4gICAgY29uc3QgdGh1bWJIZWlnaHQgPSAkKCcuanMtbW9kYWwtcHJvZHVjdC1pbWFnZXMgbGkgaW1nJykuaGVpZ2h0KCkgKyBUSFVNQl9NQVJHSU47XG4gICAgY29uc3QgY3VycmVudFBvc2l0aW9uID0gJHRodW1ibmFpbHMucG9zaXRpb24oKS50b3A7XG4gICAgJHRodW1ibmFpbHMudmVsb2NpdHkoXG4gICAgICB7XG4gICAgICAgIHRyYW5zbGF0ZVk6IGRpcmVjdGlvbiA9PT0gJ3VwJyA/IGN1cnJlbnRQb3NpdGlvbiArIHRodW1iSGVpZ2h0IDogY3VycmVudFBvc2l0aW9uIC0gdGh1bWJIZWlnaHQsXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAoJHRodW1ibmFpbHMucG9zaXRpb24oKS50b3AgPj0gMCkge1xuICAgICAgICAgICQoJy5qcy1tb2RhbC1hcnJvdy11cCcpLmNzcygnb3BhY2l0eScsICcuMicpO1xuICAgICAgICB9IGVsc2UgaWYgKCR0aHVtYm5haWxzLnBvc2l0aW9uKCkudG9wICsgJHRodW1ibmFpbHMuaGVpZ2h0KCkgPD0gJCgnLmpzLW1vZGFsLW1hc2snKS5oZWlnaHQoKSkge1xuICAgICAgICAgICQoJy5qcy1tb2RhbC1hcnJvdy1kb3duJykuY3NzKCdvcGFjaXR5JywgJy4yJyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IHByZXN0YXNob3AgZnJvbSAncHJlc3Rhc2hvcCc7XG5pbXBvcnQgUHJvZHVjdFNlbGVjdCBmcm9tICcuL2NvbXBvbmVudHMvcHJvZHVjdC1zZWxlY3QnO1xuaW1wb3J0IHVwZGF0ZVNvdXJjZXMgZnJvbSAnLi9jb21wb25lbnRzL3VwZGF0ZS1zb3VyY2VzJztcblxuJChkb2N1bWVudCkucmVhZHkoKCkgPT4ge1xuICBmdW5jdGlvbiBjb3ZlckltYWdlKCkge1xuICAgIGNvbnN0IHByb2R1Y3RDb3ZlciA9ICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmNvdmVyKTtcbiAgICBjb25zdCBtb2RhbFByb2R1Y3RDb3ZlciA9ICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0Lm1vZGFsUHJvZHVjdENvdmVyKTtcbiAgICBsZXQgdGh1bWJTZWxlY3RlZCA9ICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LnNlbGVjdGVkKTtcblxuICAgIGNvbnN0IHN3aXBlID0gKHNlbGVjdGVkVGh1bWIsIHRodW1iUGFyZW50KSA9PiB7XG4gICAgICBjb25zdCBuZXdTZWxlY3RlZFRodW1iID0gdGh1bWJQYXJlbnQuZmluZChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QudGh1bWIpO1xuXG4gICAgICAvLyBTd2FwIGFjdGl2ZSBjbGFzc2VzIG9uIHRodW1ibmFpbFxuICAgICAgc2VsZWN0ZWRUaHVtYi5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgIG5ld1NlbGVjdGVkVGh1bWIuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XG5cbiAgICAgIC8vIFVwZGF0ZSBzb3VyY2VzIG9mIGJvdGggY292ZXIgYW5kIG1vZGFsIGNvdmVyXG4gICAgICBtb2RhbFByb2R1Y3RDb3Zlci5wcm9wKCdzcmMnLCBuZXdTZWxlY3RlZFRodW1iLmRhdGEoJ2ltYWdlLWxhcmdlLXNyYycpKTtcbiAgICAgIHByb2R1Y3RDb3Zlci5wcm9wKCdzcmMnLCBuZXdTZWxlY3RlZFRodW1iLmRhdGEoJ2ltYWdlLW1lZGl1bS1zcmMnKSk7XG4gICAgICAkKCcuZWFzeXpvb20gI2Vhc3l6b29tLWxhcmdlLWltZy1hbmNob3InKS5hdHRyKCdocmVmJywgbmV3U2VsZWN0ZWRUaHVtYi5kYXRhKCdpbWFnZS1sYXJnZS1zcmMnKSk7XG5cbiAgICAgIC8vIEdldCBkYXRhIGZyb20gdGh1bWJuYWlsIGFuZCB1cGRhdGUgY292ZXIgc3JjLCBhbHQgYW5kIHRpdGxlXG4gICAgICBwcm9kdWN0Q292ZXIuYXR0cigndGl0bGUnLCBuZXdTZWxlY3RlZFRodW1iLmF0dHIoJ3RpdGxlJykpO1xuICAgICAgbW9kYWxQcm9kdWN0Q292ZXIuYXR0cigndGl0bGUnLCBuZXdTZWxlY3RlZFRodW1iLmF0dHIoJ3RpdGxlJykpO1xuICAgICAgcHJvZHVjdENvdmVyLmF0dHIoJ2FsdCcsIG5ld1NlbGVjdGVkVGh1bWIuYXR0cignYWx0JykpO1xuICAgICAgbW9kYWxQcm9kdWN0Q292ZXIuYXR0cignYWx0JywgbmV3U2VsZWN0ZWRUaHVtYi5hdHRyKCdhbHQnKSk7XG5cbiAgICAgIC8vIEdldCBkYXRhIGZyb20gdGh1bWJuYWlsIGFuZCB1cGRhdGUgY292ZXIgc291cmNlc1xuICAgICAgdXBkYXRlU291cmNlcyhwcm9kdWN0Q292ZXIsIG5ld1NlbGVjdGVkVGh1bWIuZGF0YSgnaW1hZ2UtbWVkaXVtLXNvdXJjZXMnKSk7XG4gICAgICB1cGRhdGVTb3VyY2VzKG1vZGFsUHJvZHVjdENvdmVyLCBuZXdTZWxlY3RlZFRodW1iLmRhdGEoJ2ltYWdlLWxhcmdlLXNvdXJjZXMnKSk7XG4gICAgfTtcblxuICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LnRodW1iKS5vbignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgIHRodW1iU2VsZWN0ZWQgPSAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5zZWxlY3RlZCk7XG4gICAgICBzd2lwZSh0aHVtYlNlbGVjdGVkLCAkKGV2ZW50LnRhcmdldCkuY2xvc2VzdChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QudGh1bWJDb250YWluZXIpKTtcbiAgICB9KTtcblxuICAgIHByb2R1Y3RDb3Zlci5zd2lwZSh7XG4gICAgICBzd2lwZTogKGV2ZW50LCBkaXJlY3Rpb24pID0+IHtcbiAgICAgICAgdGh1bWJTZWxlY3RlZCA9ICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LnNlbGVjdGVkKTtcbiAgICAgICAgY29uc3QgcGFyZW50VGh1bWIgPSB0aHVtYlNlbGVjdGVkLmNsb3Nlc3QocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LnRodW1iQ29udGFpbmVyKTtcblxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgaWYgKHBhcmVudFRodW1iLnByZXYoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzd2lwZSh0aHVtYlNlbGVjdGVkLCBwYXJlbnRUaHVtYi5wcmV2KCkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGFyZW50VGh1bWIubmV4dCgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHN3aXBlKHRodW1iU2VsZWN0ZWQsIHBhcmVudFRodW1iLm5leHQoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHBhcmVudFRodW1iLm5leHQoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzd2lwZSh0aHVtYlNlbGVjdGVkLCBwYXJlbnRUaHVtYi5uZXh0KCkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGFyZW50VGh1bWIucHJldigpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHN3aXBlKHRodW1iU2VsZWN0ZWQsIHBhcmVudFRodW1iLnByZXYoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYWxsb3dQYWdlU2Nyb2xsOiAndmVydGljYWwnLFxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaW1hZ2VTY3JvbGxCb3goKSB7XG4gICAgaWYgKCQoJyNtYWluIC5qcy1xdi1wcm9kdWN0LWltYWdlcyBsaScpLmxlbmd0aCA+IDIpIHtcbiAgICAgICQoJyNtYWluIC5qcy1xdi1tYXNrJykuYWRkQ2xhc3MoJ3Njcm9sbCcpO1xuICAgICAgJCgnLnNjcm9sbC1ib3gtYXJyb3dzJykuYWRkQ2xhc3MoJ3Njcm9sbCcpO1xuICAgICAgJCgnI21haW4gLmpzLXF2LW1hc2snKS5zY3JvbGxib3goe1xuICAgICAgICBkaXJlY3Rpb246ICdoJyxcbiAgICAgICAgZGlzdGFuY2U6IDExMyxcbiAgICAgICAgYXV0b1BsYXk6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICAkKCcuc2Nyb2xsLWJveC1hcnJvd3MgLmxlZnQnKS5jbGljaygoKSA9PiB7XG4gICAgICAgICQoJyNtYWluIC5qcy1xdi1tYXNrJykudHJpZ2dlcignYmFja3dhcmQnKTtcbiAgICAgIH0pO1xuICAgICAgJCgnLnNjcm9sbC1ib3gtYXJyb3dzIC5yaWdodCcpLmNsaWNrKCgpID0+IHtcbiAgICAgICAgJCgnI21haW4gLmpzLXF2LW1hc2snKS50cmlnZ2VyKCdmb3J3YXJkJyk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgJCgnI21haW4gLmpzLXF2LW1hc2snKS5yZW1vdmVDbGFzcygnc2Nyb2xsJyk7XG4gICAgICAkKCcuc2Nyb2xsLWJveC1hcnJvd3MnKS5yZW1vdmVDbGFzcygnc2Nyb2xsJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlSW5wdXRGaWxlKCkge1xuICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5maWxlSW5wdXQpLm9uKCdjaGFuZ2UnLCAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9ICQoZXZlbnQuY3VycmVudFRhcmdldClbMF07XG4gICAgICBjb25zdCBmaWxlID0gKHRhcmdldCkgPyB0YXJnZXQuZmlsZXNbMF0gOiBudWxsO1xuXG4gICAgICBpZiAodGFyZ2V0ICYmIGZpbGUpIHtcbiAgICAgICAgJCh0YXJnZXQpLnByZXYoKS50ZXh0KGZpbGUubmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQcm9kdWN0U3BpbigpIHtcbiAgICBjb25zdCAkcXVhbnRpdHlJbnB1dCA9ICQocHJlc3Rhc2hvcC5zZWxlY3RvcnMucXVhbnRpdHlXYW50ZWQpO1xuXG4gICAgJHF1YW50aXR5SW5wdXQuVG91Y2hTcGluKHtcbiAgICAgIHZlcnRpY2FsYnV0dG9uczogdHJ1ZSxcbiAgICAgIHZlcnRpY2FsdXBjbGFzczogJ21hdGVyaWFsLWljb25zIHRvdWNoc3Bpbi11cCcsXG4gICAgICB2ZXJ0aWNhbGRvd25jbGFzczogJ21hdGVyaWFsLWljb25zIHRvdWNoc3Bpbi1kb3duJyxcbiAgICAgIGJ1dHRvbmRvd25fY2xhc3M6ICdidG4gYnRuLXRvdWNoc3BpbiBqcy10b3VjaHNwaW4nLFxuICAgICAgYnV0dG9udXBfY2xhc3M6ICdidG4gYnRuLXRvdWNoc3BpbiBqcy10b3VjaHNwaW4nLFxuICAgICAgbWluOiBwYXJzZUludCgkcXVhbnRpdHlJbnB1dC5hdHRyKCdtaW4nKSwgMTApLFxuICAgICAgbWF4OiAxMDAwMDAwLFxuICAgIH0pO1xuXG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnRvdWNoc3Bpbikub2ZmKCd0b3VjaHN0YXJ0LnRvdWNoc3BpbicpO1xuXG4gICAgJHF1YW50aXR5SW5wdXQub24oJ2ZvY3Vzb3V0JywgKCkgPT4ge1xuICAgICAgaWYgKCRxdWFudGl0eUlucHV0LnZhbCgpID09PSAnJyB8fCAkcXVhbnRpdHlJbnB1dC52YWwoKSA8ICRxdWFudGl0eUlucHV0LmF0dHIoJ21pbicpKSB7XG4gICAgICAgICRxdWFudGl0eUlucHV0LnZhbCgkcXVhbnRpdHlJbnB1dC5hdHRyKCdtaW4nKSk7XG4gICAgICAgICRxdWFudGl0eUlucHV0LnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgJCgnYm9keScpLm9uKCdjaGFuZ2Uga2V5dXAnLCBwcmVzdGFzaG9wLnNlbGVjdG9ycy5xdWFudGl0eVdhbnRlZCwgKGUpID0+IHtcbiAgICAgIGlmICgkcXVhbnRpdHlJbnB1dC52YWwoKSAhPT0gJycpIHtcbiAgICAgICAgJChlLmN1cnJlbnRUYXJnZXQpLnRyaWdnZXIoJ3RvdWNoc3Bpbi5zdG9wc3BpbicpO1xuICAgICAgICBwcmVzdGFzaG9wLmVtaXQoJ3VwZGF0ZVByb2R1Y3QnLCB7XG4gICAgICAgICAgZXZlbnRUeXBlOiAndXBkYXRlZFByb2R1Y3RRdWFudGl0eScsXG4gICAgICAgICAgZXZlbnQ6IGUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkSnNQcm9kdWN0VGFiQWN0aXZlU2VsZWN0b3IoKSB7XG4gICAgY29uc3QgbmF2ID0gJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QudGFicyk7XG4gICAgbmF2Lm9uKCdzaG93LmJzLnRhYicsIChlKSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSAkKGUudGFyZ2V0KTtcbiAgICAgIHRhcmdldC5hZGRDbGFzcyhwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QuYWN0aXZlTmF2Q2xhc3MpO1xuICAgICAgJCh0YXJnZXQuYXR0cignaHJlZicpKS5hZGRDbGFzcyhwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QuYWN0aXZlVGFiQ2xhc3MpO1xuICAgIH0pO1xuICAgIG5hdi5vbignaGlkZS5icy50YWInLCAoZSkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gJChlLnRhcmdldCk7XG4gICAgICB0YXJnZXQucmVtb3ZlQ2xhc3MocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmFjdGl2ZU5hdkNsYXNzKTtcbiAgICAgICQodGFyZ2V0LmF0dHIoJ2hyZWYnKSkucmVtb3ZlQ2xhc3MocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmFjdGl2ZVRhYkNsYXNzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZVByb2R1Y3RTcGluKCk7XG4gIGNyZWF0ZUlucHV0RmlsZSgpO1xuICBjb3ZlckltYWdlKCk7XG4gIGltYWdlU2Nyb2xsQm94KCk7XG4gIGFkZEpzUHJvZHVjdFRhYkFjdGl2ZVNlbGVjdG9yKCk7XG5cbiAgcHJlc3Rhc2hvcC5vbigndXBkYXRlZFByb2R1Y3QnLCAoZXZlbnQpID0+IHtcbiAgICBjcmVhdGVJbnB1dEZpbGUoKTtcbiAgICBjb3ZlckltYWdlKCk7XG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LnByb2R1Y3RfbWluaW1hbF9xdWFudGl0eSkge1xuICAgICAgY29uc3QgbWluaW1hbFByb2R1Y3RRdWFudGl0eSA9IHBhcnNlSW50KGV2ZW50LnByb2R1Y3RfbWluaW1hbF9xdWFudGl0eSwgMTApO1xuICAgICAgY29uc3QgcXVhbnRpdHlJbnB1dFNlbGVjdG9yID0gcHJlc3Rhc2hvcC5zZWxlY3RvcnMucXVhbnRpdHlXYW50ZWQ7XG4gICAgICBjb25zdCBxdWFudGl0eUlucHV0ID0gJChxdWFudGl0eUlucHV0U2VsZWN0b3IpO1xuXG4gICAgICAvLyBAc2VlIGh0dHA6Ly93d3cudmlydHVvc29mdC5ldS9jb2RlL2Jvb3RzdHJhcC10b3VjaHNwaW4vIGFib3V0IEJvb3RzdHJhcCBUb3VjaFNwaW5cbiAgICAgIHF1YW50aXR5SW5wdXQudHJpZ2dlcigndG91Y2hzcGluLnVwZGF0ZXNldHRpbmdzJywge1xuICAgICAgICBtaW46IG1pbmltYWxQcm9kdWN0UXVhbnRpdHksXG4gICAgICB9KTtcbiAgICB9XG4gICAgaW1hZ2VTY3JvbGxCb3goKTtcbiAgICAkKCQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmFjdGl2ZVRhYnMpLmF0dHIoJ2hyZWYnKSkuYWRkQ2xhc3MoJ2FjdGl2ZScpLnJlbW92ZUNsYXNzKCdmYWRlJyk7XG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QuaW1hZ2VzTW9kYWwpLnJlcGxhY2VXaXRoKGV2ZW50LnByb2R1Y3RfaW1hZ2VzX21vZGFsKTtcblxuICAgIGNvbnN0IHByb2R1Y3RTZWxlY3QgPSBuZXcgUHJvZHVjdFNlbGVjdCgpO1xuICAgIHByb2R1Y3RTZWxlY3QuaW5pdCgpO1xuICB9KTtcbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIHRpbWVvdXQgPSAzMDApIHtcbiAgbGV0IHRpbWVyO1xuXG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHsgZnVuYy5hcHBseSh0aGlzLCBhcmdzKTsgfSwgdGltZW91dCk7XG4gIH07XG59XG4iLCJpbXBvcnQgJCBmcm9tIFwianF1ZXJ5XCI7XG5pbXBvcnQgcHJlc3Rhc2hvcCBmcm9tIFwicHJlc3Rhc2hvcFwiO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gXCIuL2NvbXBvbmVudHMvZGVib3VuY2VcIjtcblxucHJlc3Rhc2hvcC5jYXJ0ID0gcHJlc3Rhc2hvcC5jYXJ0IHx8IHt9O1xuXG5wcmVzdGFzaG9wLmNhcnQuYWN0aXZlX2lucHV0cyA9IG51bGw7XG5cbmNvbnN0IHNwaW5uZXJTZWxlY3RvciA9ICdpbnB1dFtuYW1lPVwicHJvZHVjdC1xdWFudGl0eS1zcGluXCJdJztcbmxldCBoYXNFcnJvciA9IGZhbHNlO1xubGV0IGlzVXBkYXRlT3BlcmF0aW9uID0gZmFsc2U7XG5sZXQgZXJyb3JNc2cgPSBcIlwiO1xuXG5jb25zdCBDaGVja1VwZGF0ZVF1YW50aXR5T3BlcmF0aW9ucyA9IHtcbiAgc3dpdGNoRXJyb3JTdGF0OiAoKSA9PiB7XG4gICAgLyoqXG4gICAgICogaWYgZXJyb3JNc2cgaXMgbm90IGVtcHR5IG9yIGlmIG5vdGlmaWNhdGlvbnMgYXJlIHNob3duLCB3ZSBoYXZlIGVycm9yIHRvIGRpc3BsYXlcbiAgICAgKiBpZiBoYXNFcnJvciBpcyB0cnVlLCBxdWFudGl0eSB3YXMgbm90IHVwZGF0ZWQgOiB3ZSBkb24ndCBkaXNhYmxlIGNoZWNrb3V0IGJ1dHRvblxuICAgICAqL1xuICAgIGNvbnN0ICRjaGVja291dEJ0biA9ICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5jaGVja291dC5idG4pO1xuXG4gICAgaWYgKFxuICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLm5vdGlmaWNhdGlvbnMuZGFuZ2VyQWxlcnQpLmxlbmd0aCB8fFxuICAgICAgKGVycm9yTXNnICE9PSBcIlwiICYmICFoYXNFcnJvcilcbiAgICApIHtcbiAgICAgICRjaGVja291dEJ0bi5hZGRDbGFzcyhcImRpc2FibGVkXCIpO1xuICAgIH1cblxuICAgIGlmIChlcnJvck1zZyAhPT0gXCJcIikge1xuICAgICAgY29uc3Qgc3RyRXJyb3IgPSBgXG4gICAgICAgIDxhcnRpY2xlIGNsYXNzPVwiYWxlcnQgdGV4dC1jZW50ZXIgdy1maXQgZmxleCBtdC0xMiBwLTIgYmctcmVkLTEwMCBib3JkZXIgYm9yZGVyLXJlZC0zMDAgYWxlcnQtZGFuZ2VyXCIgcm9sZT1cImFsZXJ0XCIgZGF0YS1hbGVydD1cImRhbmdlclwiPlxuICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgIDxsaT4ke2Vycm9yTXNnfTwvbGk+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9hcnRpY2xlPlxuICAgICAgYDtcbiAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5ub3RpZmljYXRpb25zLmNvbnRhaW5lcikuaHRtbChzdHJFcnJvcik7XG4gICAgICBlcnJvck1zZyA9IFwiXCI7XG4gICAgICBpc1VwZGF0ZU9wZXJhdGlvbiA9IGZhbHNlO1xuICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgIC8vIGlmIGhhc0Vycm9yIGlzIHRydWUsIHF1YW50aXR5IHdhcyBub3QgdXBkYXRlZCA6IGFsbG93IGNoZWNrb3V0XG4gICAgICAgICRjaGVja291dEJ0bi5yZW1vdmVDbGFzcyhcImRpc2FibGVkXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWhhc0Vycm9yICYmIGlzVXBkYXRlT3BlcmF0aW9uKSB7XG4gICAgICBoYXNFcnJvciA9IGZhbHNlO1xuICAgICAgaXNVcGRhdGVPcGVyYXRpb24gPSBmYWxzZTtcbiAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5ub3RpZmljYXRpb25zLmNvbnRhaW5lcikuaHRtbChcIlwiKTtcbiAgICAgICRjaGVja291dEJ0bi5yZW1vdmVDbGFzcyhcImRpc2FibGVkXCIpO1xuICAgIH1cbiAgfSxcbiAgY2hlY2tVcGRhdGVPcGVyYXRpb246IChyZXNwKSA9PiB7XG4gICAgLyoqXG4gICAgICogcmVzcC5oYXNFcnJvciBjYW4gYmUgbm90IGRlZmluZWQgYnV0IHJlc3AuZXJyb3JzIG5vdCBlbXB0eTogcXVhbnRpdHkgaXMgdXBkYXRlZCBidXQgb3JkZXIgY2Fubm90IGJlIHBsYWNlZFxuICAgICAqIHdoZW4gcmVzcC5oYXNFcnJvcj10cnVlLCBxdWFudGl0eSBpcyBub3QgdXBkYXRlZFxuICAgICAqL1xuICAgIGNvbnN0IHsgaGFzRXJyb3I6IGhhc0Vycm9yT2NjdXJyZWQsIGVycm9yczogZXJyb3JEYXRhIH0gPSByZXNwO1xuICAgIGhhc0Vycm9yID0gaGFzRXJyb3JPY2N1cnJlZCA/PyBmYWxzZTtcbiAgICBjb25zdCBlcnJvcnMgPSBlcnJvckRhdGEgPz8gXCJcIjtcblxuICAgIC8vIDEuNy4yLnggcmV0dXJucyBlcnJvcnMgYXMgc3RyaW5nLCAxLjcuMy54IHJldHVybnMgYXJyYXlcbiAgICBpZiAoZXJyb3JzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIGVycm9yTXNnID0gZXJyb3JzLmpvaW4oXCIgXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvck1zZyA9IGVycm9ycztcbiAgICB9XG5cbiAgICBpc1VwZGF0ZU9wZXJhdGlvbiA9IHRydWU7XG4gIH0sXG59O1xuXG4vKipcbiAqIEF0dGFjaCBCb290c3RyYXAgVG91Y2hTcGluIGV2ZW50IGhhbmRsZXJzXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVNwaW4oKSB7XG4gICQuZWFjaCgkKHNwaW5uZXJTZWxlY3RvciksIChpbmRleCwgc3Bpbm5lcikgPT4ge1xuICAgICQoc3Bpbm5lcikuVG91Y2hTcGluKHtcbiAgICAgIG1pbjogcGFyc2VJbnQoJChzcGlubmVyKS5hdHRyKFwibWluXCIpLCAxMCksXG4gICAgICBtYXg6IDEwMDAwMDAsXG4gICAgfSk7XG4gIH0pO1xuXG4gICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy50b3VjaHNwaW4pLm9mZihcInRvdWNoc3RhcnQudG91Y2hzcGluXCIpO1xuXG4gIENoZWNrVXBkYXRlUXVhbnRpdHlPcGVyYXRpb25zLnN3aXRjaEVycm9yU3RhdCgpO1xufVxuXG5jb25zdCBwcmV2ZW50Q3VzdG9tTW9kYWxPcGVuID0gKGV2ZW50KSA9PiB7XG4gIGlmICh3aW5kb3cuc2hvdWxkUHJldmVudE1vZGFsKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbiQoZnVuY3Rpb24gKCkge1xuICBjb25zdCBwcm9kdWN0TGluZUluQ2FydFNlbGVjdG9yID1cbiAgICBwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNhcnQucHJvZHVjdExpbmVRdHk7XG4gIGNvbnN0IHByb21pc2VzID0gW107XG5cbiAgcHJlc3Rhc2hvcC5vbihcInVwZGF0ZWRDYXJ0XCIsICgpID0+IHtcbiAgICB3aW5kb3cuc2hvdWxkUHJldmVudE1vZGFsID0gZmFsc2U7XG5cbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5jdXN0b21pemF0aW9uTW9kYWwpLm9uKFxuICAgICAgXCJzaG93LmJzLm1vZGFsXCIsXG4gICAgICAobW9kYWxFdmVudCkgPT4ge1xuICAgICAgICBwcmV2ZW50Q3VzdG9tTW9kYWxPcGVuKG1vZGFsRXZlbnQpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgY3JlYXRlU3BpbigpO1xuICB9KTtcblxuICBjcmVhdGVTcGluKCk7XG5cbiAgY29uc3QgJGJvZHkgPSAkKFwiYm9keVwiKTtcblxuICBmdW5jdGlvbiBpc1RvdWNoU3BpbihuYW1lc3BhY2UpIHtcbiAgICByZXR1cm4gbmFtZXNwYWNlID09PSBcIm9uLnN0YXJ0dXBzcGluXCIgfHwgbmFtZXNwYWNlID09PSBcIm9uLnN0YXJ0ZG93bnNwaW5cIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3VsZEluY3JlYXNlUHJvZHVjdFF1YW50aXR5KG5hbWVzcGFjZSkge1xuICAgIHJldHVybiBuYW1lc3BhY2UgPT09IFwib24uc3RhcnR1cHNwaW5cIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRDYXJ0TGluZVByb2R1Y3RRdWFudGl0eUlucHV0KCR0YXJnZXQpIHtcbiAgICBjb25zdCAkaW5wdXQgPSAkdGFyZ2V0XG4gICAgICAucGFyZW50cyhwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNhcnQudG91Y2hzcGluKVxuICAgICAgLmZpbmQocHJvZHVjdExpbmVJbkNhcnRTZWxlY3Rvcik7XG5cbiAgICBpZiAoJGlucHV0LmlzKFwiOmZvY3VzXCIpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gJGlucHV0O1xuICB9XG5cbiAgZnVuY3Rpb24gY2FtZWxpemUoc3ViamVjdCkge1xuICAgIGNvbnN0IGFjdGlvblR5cGVQYXJ0cyA9IHN1YmplY3Quc3BsaXQoXCItXCIpO1xuICAgIGxldCBpO1xuICAgIGxldCBwYXJ0O1xuICAgIGxldCBjYW1lbGl6ZWRTdWJqZWN0ID0gXCJcIjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBhY3Rpb25UeXBlUGFydHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHBhcnQgPSBhY3Rpb25UeXBlUGFydHNbaV07XG5cbiAgICAgIGlmIChpICE9PSAwKSB7XG4gICAgICAgIHBhcnQgPSBwYXJ0LnN1YnN0cmluZygwLCAxKS50b1VwcGVyQ2FzZSgpICsgcGFydC5zdWJzdHJpbmcoMSk7XG4gICAgICB9XG5cbiAgICAgIGNhbWVsaXplZFN1YmplY3QgKz0gcGFydDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FtZWxpemVkU3ViamVjdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlQ2FydEFjdGlvbigkdGFyZ2V0LCBuYW1lc3BhY2UpIHtcbiAgICBpZiAoIWlzVG91Y2hTcGluKG5hbWVzcGFjZSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVybDogJHRhcmdldC5hdHRyKFwiaHJlZlwiKSxcbiAgICAgICAgdHlwZTogY2FtZWxpemUoJHRhcmdldC5kYXRhKFwibGluay1hY3Rpb25cIikpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCAkaW5wdXQgPSBmaW5kQ2FydExpbmVQcm9kdWN0UXVhbnRpdHlJbnB1dCgkdGFyZ2V0KTtcblxuICAgIGlmICghJGlucHV0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IGNhcnRBY3Rpb24gPSB7fTtcblxuICAgIGlmIChzaG91bGRJbmNyZWFzZVByb2R1Y3RRdWFudGl0eShuYW1lc3BhY2UpKSB7XG4gICAgICBjYXJ0QWN0aW9uID0ge1xuICAgICAgICB1cmw6ICRpbnB1dC5kYXRhKFwidXAtdXJsXCIpLFxuICAgICAgICB0eXBlOiBcImluY3JlYXNlUHJvZHVjdFF1YW50aXR5XCIsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjYXJ0QWN0aW9uID0ge1xuICAgICAgICB1cmw6ICRpbnB1dC5kYXRhKFwiZG93bi11cmxcIiksXG4gICAgICAgIHR5cGU6IFwiZGVjcmVhc2VQcm9kdWN0UXVhbnRpdHlcIixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhcnRBY3Rpb247XG4gIH1cblxuICBjb25zdCBhYm9ydFByZXZpb3VzUmVxdWVzdHMgPSAoKSA9PiB7XG4gICAgbGV0IHByb21pc2U7XG4gICAgd2hpbGUgKHByb21pc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlcy5wb3AoKTtcbiAgICAgIHByb21pc2UuYWJvcnQoKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZ2V0VG91Y2hTcGluSW5wdXQgPSAoJGJ1dHRvbikgPT5cbiAgICAkKCRidXR0b24ucGFyZW50cyhwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNhcnQudG91Y2hzcGluKS5maW5kKFwiaW5wdXRcIikpO1xuXG4gICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmN1c3RvbWl6YXRpb25Nb2RhbCkub24oXG4gICAgXCJzaG93LmJzLm1vZGFsXCIsXG4gICAgKG1vZGFsRXZlbnQpID0+IHtcbiAgICAgIHByZXZlbnRDdXN0b21Nb2RhbE9wZW4obW9kYWxFdmVudCk7XG4gICAgfSxcbiAgKTtcblxuICBjb25zdCBoYW5kbGVDYXJ0QWN0aW9uID0gKGV2ZW50KSA9PiB7XG4gICAgYWJvcnRQcmV2aW91c1JlcXVlc3RzKCk7XG4gICAgd2luZG93LnNob3VsZFByZXZlbnRNb2RhbCA9IHRydWU7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0ICR0YXJnZXQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIGNvbnN0IHsgZGF0YXNldCB9ID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICBjb25zdCBjYXJ0QWN0aW9uID0gcGFyc2VDYXJ0QWN0aW9uKCR0YXJnZXQsIGV2ZW50Lm5hbWVzcGFjZSk7XG4gICAgY29uc3QgcmVxdWVzdERhdGEgPSB7XG4gICAgICBhamF4OiBcIjFcIixcbiAgICAgIGFjdGlvbjogXCJ1cGRhdGVcIixcbiAgICB9O1xuXG4gICAgaWYgKCFjYXJ0QWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgJC5hamF4KHtcbiAgICAgIHVybDogY2FydEFjdGlvbi51cmwsXG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgZGF0YTogcmVxdWVzdERhdGEsXG4gICAgICBkYXRhVHlwZTogXCJqc29uXCIsXG4gICAgICBiZWZvcmVTZW5kKGpxWEhSKSB7XG4gICAgICAgIHByb21pc2VzLnB1c2goanFYSFIpO1xuICAgICAgfSxcbiAgICB9KVxuICAgICAgLnRoZW4oKHJlc3ApID0+IHtcbiAgICAgICAgY29uc3QgJHF1YW50aXR5SW5wdXQgPSBnZXRUb3VjaFNwaW5JbnB1dCgkdGFyZ2V0KTtcbiAgICAgICAgQ2hlY2tVcGRhdGVRdWFudGl0eU9wZXJhdGlvbnMuY2hlY2tVcGRhdGVPcGVyYXRpb24ocmVzcCk7XG4gICAgICAgICRxdWFudGl0eUlucHV0LnZhbChyZXNwLnF1YW50aXR5KTtcblxuICAgICAgICAvLyBSZWZyZXNoIGNhcnQgcHJldmlld1xuICAgICAgICBwcmVzdGFzaG9wLmVtaXQoXCJ1cGRhdGVDYXJ0XCIsIHtcbiAgICAgICAgICByZWFzb246IGRhdGFzZXQsXG4gICAgICAgICAgcmVzcCxcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLmZhaWwoKHJlc3ApID0+IHtcbiAgICAgICAgcHJlc3Rhc2hvcC5lbWl0KFwiaGFuZGxlRXJyb3JcIiwge1xuICAgICAgICAgIGV2ZW50VHlwZTogXCJ1cGRhdGVQcm9kdWN0SW5DYXJ0XCIsXG4gICAgICAgICAgcmVzcCxcbiAgICAgICAgICBjYXJ0QWN0aW9uOiBjYXJ0QWN0aW9uLnR5cGUsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH07XG5cbiAgJGJvZHkub24oXCJjbGlja1wiLCBwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNhcnQuYWN0aW9ucywgaGFuZGxlQ2FydEFjdGlvbik7XG5cbiAgZnVuY3Rpb24gc2VuZFVwZGF0ZVF1YW50aXR5SW5DYXJ0UmVxdWVzdChcbiAgICB1cGRhdGVRdWFudGl0eUluQ2FydFVybCxcbiAgICByZXF1ZXN0RGF0YSxcbiAgICAkdGFyZ2V0LFxuICApIHtcbiAgICBhYm9ydFByZXZpb3VzUmVxdWVzdHMoKTtcbiAgICB3aW5kb3cuc2hvdWxkUHJldmVudE1vZGFsID0gdHJ1ZTtcblxuICAgIHJldHVybiAkLmFqYXgoe1xuICAgICAgdXJsOiB1cGRhdGVRdWFudGl0eUluQ2FydFVybCxcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBkYXRhOiByZXF1ZXN0RGF0YSxcbiAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcbiAgICAgIGJlZm9yZVNlbmQoanFYSFIpIHtcbiAgICAgICAgcHJvbWlzZXMucHVzaChqcVhIUik7XG4gICAgICB9LFxuICAgIH0pXG4gICAgICAudGhlbigocmVzcCkgPT4ge1xuICAgICAgICBDaGVja1VwZGF0ZVF1YW50aXR5T3BlcmF0aW9ucy5jaGVja1VwZGF0ZU9wZXJhdGlvbihyZXNwKTtcblxuICAgICAgICAkdGFyZ2V0LnZhbChyZXNwLnF1YW50aXR5KTtcbiAgICAgICAgY29uc3QgZGF0YXNldCA9ICR0YXJnZXQgJiYgJHRhcmdldC5kYXRhc2V0ID8gJHRhcmdldC5kYXRhc2V0IDogcmVzcDtcblxuICAgICAgICAvLyBSZWZyZXNoIGNhcnQgcHJldmlld1xuICAgICAgICBwcmVzdGFzaG9wLmVtaXQoXCJ1cGRhdGVDYXJ0XCIsIHtcbiAgICAgICAgICByZWFzb246IGRhdGFzZXQsXG4gICAgICAgICAgcmVzcCxcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLmZhaWwoKHJlc3ApID0+IHtcbiAgICAgICAgcHJlc3Rhc2hvcC5lbWl0KFwiaGFuZGxlRXJyb3JcIiwge1xuICAgICAgICAgIGV2ZW50VHlwZTogXCJ1cGRhdGVQcm9kdWN0UXVhbnRpdHlJbkNhcnRcIixcbiAgICAgICAgICByZXNwLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UXVhbnRpdHlDaGFuZ2VUeXBlKCRxdWFudGl0eSkge1xuICAgIHJldHVybiAkcXVhbnRpdHkgPiAwID8gXCJ1cFwiIDogXCJkb3duXCI7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRSZXF1ZXN0RGF0YShxdWFudGl0eSkge1xuICAgIHJldHVybiB7XG4gICAgICBhamF4OiBcIjFcIixcbiAgICAgIHF0eTogTWF0aC5hYnMocXVhbnRpdHkpLFxuICAgICAgYWN0aW9uOiBcInVwZGF0ZVwiLFxuICAgICAgb3A6IGdldFF1YW50aXR5Q2hhbmdlVHlwZShxdWFudGl0eSksXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVByb2R1Y3RRdWFudGl0eUluQ2FydChldmVudCkge1xuICAgIGNvbnN0ICR0YXJnZXQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIGNvbnN0IHVwZGF0ZVF1YW50aXR5SW5DYXJ0VXJsID0gJHRhcmdldC5kYXRhKFwidXBkYXRlLXVybFwiKTtcbiAgICBjb25zdCBiYXNlVmFsdWUgPSAkdGFyZ2V0LmF0dHIoXCJ2YWx1ZVwiKTtcblxuICAgIC8vIFRoZXJlIHNob3VsZCBiZSBhIHZhbGlkIHByb2R1Y3QgcXVhbnRpdHkgaW4gY2FydFxuICAgIGNvbnN0IHRhcmdldFZhbHVlID0gJHRhcmdldC52YWwoKTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIGlmIChcbiAgICAgIHRhcmdldFZhbHVlICE9IHBhcnNlSW50KHRhcmdldFZhbHVlLCAxMCkgfHxcbiAgICAgIHRhcmdldFZhbHVlIDwgMCB8fFxuICAgICAgaXNOYU4odGFyZ2V0VmFsdWUpXG4gICAgKSB7XG4gICAgICB3aW5kb3cuc2hvdWxkUHJldmVudE1vZGFsID0gZmFsc2U7XG4gICAgICAkdGFyZ2V0LnZhbChiYXNlVmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgLy8gVGhlcmUgc2hvdWxkIGJlIGEgbmV3IHByb2R1Y3QgcXVhbnRpdHkgaW4gY2FydFxuICAgIGNvbnN0IHF0eSA9IHRhcmdldFZhbHVlIC0gYmFzZVZhbHVlO1xuXG4gICAgaWYgKHF0eSA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0YXJnZXRWYWx1ZSA9PT0gXCIwXCIpIHtcbiAgICAgICR0YXJnZXRcbiAgICAgICAgLmNsb3Nlc3QoXCIucHJvZHVjdC1saW5lLWFjdGlvbnNcIilcbiAgICAgICAgLmZpbmQoJ1tkYXRhLWxpbmstYWN0aW9uPVwiZGVsZXRlLWZyb20tY2FydFwiXScpXG4gICAgICAgIC5jbGljaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkdGFyZ2V0LmF0dHIoXCJ2YWx1ZVwiLCB0YXJnZXRWYWx1ZSk7XG4gICAgICBzZW5kVXBkYXRlUXVhbnRpdHlJbkNhcnRSZXF1ZXN0KFxuICAgICAgICB1cGRhdGVRdWFudGl0eUluQ2FydFVybCxcbiAgICAgICAgZ2V0UmVxdWVzdERhdGEocXR5KSxcbiAgICAgICAgJHRhcmdldCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgJGJvZHkub24oXG4gICAgXCJ0b3VjaHNwaW4ub24uc3RvcHNwaW5cIixcbiAgICBzcGlubmVyU2VsZWN0b3IsXG4gICAgZGVib3VuY2UodXBkYXRlUHJvZHVjdFF1YW50aXR5SW5DYXJ0KSxcbiAgKTtcblxuICAkYm9keS5vbihcImZvY3Vzb3V0IGtleXVwXCIsIHByb2R1Y3RMaW5lSW5DYXJ0U2VsZWN0b3IsIChldmVudCkgPT4ge1xuICAgIGlmIChldmVudC50eXBlID09PSBcImtleXVwXCIpIHtcbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAxMykge1xuICAgICAgICBpc1VwZGF0ZU9wZXJhdGlvbiA9IHRydWU7XG4gICAgICAgIHVwZGF0ZVByb2R1Y3RRdWFudGl0eUluQ2FydChldmVudCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIWlzVXBkYXRlT3BlcmF0aW9uKSB7XG4gICAgICB1cGRhdGVQcm9kdWN0UXVhbnRpdHlJbkNhcnQoZXZlbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG5cbiAgY29uc3QgJHRpbWVvdXRFZmZlY3QgPSA0MDA7XG5cbiAgJGJvZHkub24oXG4gICAgXCJoaWRkZW4uYnMuY29sbGFwc2VcIixcbiAgICBwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNhcnQucHJvbW9Db2RlLFxuICAgICgpID0+IHtcbiAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5jYXJ0LmRpc3BsYXlQcm9tbykuc2hvdygkdGltZW91dEVmZmVjdCk7XG4gICAgfSxcbiAgKTtcblxuICAkYm9keS5vbihcImNsaWNrXCIsIHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY2FydC5wcm9tb0NvZGVCdXR0b24sIChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY2FydC5wcm9tb0NvZGUpLmNvbGxhcHNlKFwidG9nZ2xlXCIpO1xuICB9KTtcblxuICAkYm9keS5vbihcImNsaWNrXCIsIHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY2FydC5kaXNwbGF5UHJvbW8sIChldmVudCkgPT4ge1xuICAgICQoZXZlbnQuY3VycmVudFRhcmdldCkuaGlkZSgkdGltZW91dEVmZmVjdCk7XG4gIH0pO1xuXG4gICRib2R5Lm9uKFwiY2xpY2tcIiwgcHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5jYXJ0LmRpc2NvdW50Q29kZSwgKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCAkY29kZSA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgY29uc3QgJGRpc2NvdW50SW5wdXQgPSAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY2FydC5kaXNjb3VudE5hbWUpO1xuXG4gICAgJGRpc2NvdW50SW5wdXQudmFsKCRjb2RlLnRleHQoKSk7XG4gICAgLy8gU2hvdyBwcm9tbyBjb2RlIGZpZWxkXG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNhcnQucHJvbW9Db2RlKS5jb2xsYXBzZShcInNob3dcIik7XG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNhcnQuZGlzcGxheVByb21vKS5oaWRlKCR0aW1lb3V0RWZmZWN0KTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59KTtcblxuJChkb2N1bWVudCkucmVhZHkoKCkgPT4ge1xuICBjb25zdCBlID0gJChcImJvZHlcIik7XG4gIGUub2ZmKFwic3VibWl0XCIsICdbZGF0YS1saW5rLWFjdGlvbj1cImFkZC12b3VjaGVyXCJdJyksXG4gICAgZS5vbihcInN1Ym1pdFwiLCAnW2RhdGEtbGluay1hY3Rpb249XCJhZGQtdm91Y2hlclwiXScsIChlKSA9PiB7XG4gICAgICBjb25zdCBwcm9tb1N1Ym1pdEJ0biA9ICQoXCIjcHJvbW8tY29kZS1mb3JtIGJ1dHRvblwiKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IG4gPSAkKGUuY3VycmVudFRhcmdldCksXG4gICAgICAgIG8gPSBuLmF0dHIoXCJhY3Rpb25cIik7XG4gICAgICAwID09PSBuLmZpbmQoXCJbbmFtZT1hY3Rpb25dXCIpLmxlbmd0aCAmJlxuICAgICAgICBuLmFwcGVuZCgkKFwiPGlucHV0PlwiLCB7IHR5cGU6IFwiaGlkZGVuXCIsIG5hbWU6IFwiYWpheFwiLCB2YWx1ZTogMSB9KSksXG4gICAgICAgIDAgPT09IG4uZmluZChcIltuYW1lPWFjdGlvbl1cIikubGVuZ3RoICYmXG4gICAgICAgICAgbi5hcHBlbmQoXG4gICAgICAgICAgICAkKFwiPGlucHV0PlwiLCB7IHR5cGU6IFwiaGlkZGVuXCIsIG5hbWU6IFwiYWN0aW9uXCIsIHZhbHVlOiBcInVwZGF0ZVwiIH0pLFxuICAgICAgICAgICksXG4gICAgICAgIHByb21vU3VibWl0QnRuLnRleHQoXCJDSEVDS0lOR1wiKTtcbiAgICAgIHByb21vU3VibWl0QnRuLnByb3AoXCJkaXNhYmxlXCIsIHRydWUpO1xuICAgICAgJC5wb3N0KG8sIG4uc2VyaWFsaXplKCksIG51bGwsIFwianNvblwiKVxuICAgICAgICAudGhlbigobikgPT4ge1xuICAgICAgICAgIG4uaGFzRXJyb3JcbiAgICAgICAgICAgID8gJChcIi5qcy1lcnJvclwiKS5zaG93KCkuZmluZChcIi5qcy1lcnJvci10ZXh0XCIpLnRleHQobi5lcnJvcnNbMF0pXG4gICAgICAgICAgICA6IHByZXN0YXNob3AuZW1pdChcInVwZGF0ZUNhcnRcIiwge1xuICAgICAgICAgICAgICAgIHJlYXNvbjogZS50YXJnZXQuZGF0YXNldCxcbiAgICAgICAgICAgICAgICByZXNwOiBuLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICBwcm9tb1N1Ym1pdEJ0bi50ZXh0KFwiQUREXCIpO1xuICAgICAgICAgIHByb21vU3VibWl0QnRuLnByb3AoXCJkaXNhYmxlXCIsIGZhbHNlKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmZhaWwoKGUpID0+IHtcbiAgICAgICAgICBwcmVzdGFzaG9wLmVtaXQoXCJoYW5kbGVFcnJvclwiLCB7XG4gICAgICAgICAgICBldmVudFR5cGU6IFwidXBkYXRlQ2FydFwiLFxuICAgICAgICAgICAgcmVzcDogZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwcm9tb1N1Ym1pdEJ0bi50ZXh0KFwiQUREXCIpO1xuICAgICAgICAgIHByb21vU3VibWl0QnRuLnByb3AoXCJkaXNhYmxlXCIsIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnID8gUmVmbGVjdCA6IG51bGxcbnZhciBSZWZsZWN0QXBwbHkgPSBSICYmIHR5cGVvZiBSLmFwcGx5ID09PSAnZnVuY3Rpb24nXG4gID8gUi5hcHBseVxuICA6IGZ1bmN0aW9uIFJlZmxlY3RBcHBseSh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpO1xuICB9XG5cbnZhciBSZWZsZWN0T3duS2V5c1xuaWYgKFIgJiYgdHlwZW9mIFIub3duS2V5cyA9PT0gJ2Z1bmN0aW9uJykge1xuICBSZWZsZWN0T3duS2V5cyA9IFIub3duS2V5c1xufSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldClcbiAgICAgIC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpKTtcbiAgfTtcbn0gZWxzZSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFByb2Nlc3NFbWl0V2FybmluZyh3YXJuaW5nKSB7XG4gIGlmIChjb25zb2xlICYmIGNvbnNvbGUud2FybikgY29uc29sZS53YXJuKHdhcm5pbmcpO1xufVxuXG52YXIgTnVtYmVySXNOYU4gPSBOdW1iZXIuaXNOYU4gfHwgZnVuY3Rpb24gTnVtYmVySXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICBFdmVudEVtaXR0ZXIuaW5pdC5jYWxsKHRoaXMpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG5tb2R1bGUuZXhwb3J0cy5vbmNlID0gb25jZTtcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC4xMC54XG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHNDb3VudCA9IDA7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG5cbi8vIEJ5IGRlZmF1bHQgRXZlbnRFbWl0dGVycyB3aWxsIHByaW50IGEgd2FybmluZyBpZiBtb3JlIHRoYW4gMTAgbGlzdGVuZXJzIGFyZVxuLy8gYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1c2VmdWwgZGVmYXVsdCB3aGljaCBoZWxwcyBmaW5kaW5nIG1lbW9yeSBsZWFrcy5cbnZhciBkZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7XG5cbmZ1bmN0aW9uIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImxpc3RlbmVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgbGlzdGVuZXIpO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudEVtaXR0ZXIsICdkZWZhdWx0TWF4TGlzdGVuZXJzJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkZWZhdWx0TWF4TGlzdGVuZXJzO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKGFyZykge1xuICAgIGlmICh0eXBlb2YgYXJnICE9PSAnbnVtYmVyJyB8fCBhcmcgPCAwIHx8IE51bWJlcklzTmFOKGFyZykpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJkZWZhdWx0TWF4TGlzdGVuZXJzXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIGFyZyArICcuJyk7XG4gICAgfVxuICAgIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSBhcmc7XG4gIH1cbn0pO1xuXG5FdmVudEVtaXR0ZXIuaW5pdCA9IGZ1bmN0aW9uKCkge1xuXG4gIGlmICh0aGlzLl9ldmVudHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5fZXZlbnRzID09PSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50cykge1xuICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICB9XG5cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDtcbn07XG5cbi8vIE9idmlvdXNseSBub3QgYWxsIEVtaXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRvIDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93c1xuLy8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycyhuKSB7XG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicgfHwgbiA8IDAgfHwgTnVtYmVySXNOYU4obikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiblwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBuICsgJy4nKTtcbiAgfVxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIF9nZXRNYXhMaXN0ZW5lcnModGhhdCkge1xuICBpZiAodGhhdC5fbWF4TGlzdGVuZXJzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzO1xuICByZXR1cm4gdGhhdC5fbWF4TGlzdGVuZXJzO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmdldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIGdldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIF9nZXRNYXhMaXN0ZW5lcnModGhpcyk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KHR5cGUpIHtcbiAgdmFyIGFyZ3MgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICB2YXIgZG9FcnJvciA9ICh0eXBlID09PSAnZXJyb3InKTtcblxuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpXG4gICAgZG9FcnJvciA9IChkb0Vycm9yICYmIGV2ZW50cy5lcnJvciA9PT0gdW5kZWZpbmVkKTtcbiAgZWxzZSBpZiAoIWRvRXJyb3IpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIgdGhlbiB0aHJvdy5cbiAgaWYgKGRvRXJyb3IpIHtcbiAgICB2YXIgZXI7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMClcbiAgICAgIGVyID0gYXJnc1swXTtcbiAgICBpZiAoZXIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgLy8gTm90ZTogVGhlIGNvbW1lbnRzIG9uIHRoZSBgdGhyb3dgIGxpbmVzIGFyZSBpbnRlbnRpb25hbCwgdGhleSBzaG93XG4gICAgICAvLyB1cCBpbiBOb2RlJ3Mgb3V0cHV0IGlmIHRoaXMgcmVzdWx0cyBpbiBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uLlxuICAgICAgdGhyb3cgZXI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gICAgfVxuICAgIC8vIEF0IGxlYXN0IGdpdmUgc29tZSBraW5kIG9mIGNvbnRleHQgdG8gdGhlIHVzZXJcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdVbmhhbmRsZWQgZXJyb3IuJyArIChlciA/ICcgKCcgKyBlci5tZXNzYWdlICsgJyknIDogJycpKTtcbiAgICBlcnIuY29udGV4dCA9IGVyO1xuICAgIHRocm93IGVycjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgfVxuXG4gIHZhciBoYW5kbGVyID0gZXZlbnRzW3R5cGVdO1xuXG4gIGlmIChoYW5kbGVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIFJlZmxlY3RBcHBseShoYW5kbGVyLCB0aGlzLCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuID0gaGFuZGxlci5sZW5ndGg7XG4gICAgdmFyIGxpc3RlbmVycyA9IGFycmF5Q2xvbmUoaGFuZGxlciwgbGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKVxuICAgICAgUmVmbGVjdEFwcGx5KGxpc3RlbmVyc1tpXSwgdGhpcywgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIF9hZGRMaXN0ZW5lcih0YXJnZXQsIHR5cGUsIGxpc3RlbmVyLCBwcmVwZW5kKSB7XG4gIHZhciBtO1xuICB2YXIgZXZlbnRzO1xuICB2YXIgZXhpc3Rpbmc7XG5cbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0YXJnZXQuX2V2ZW50c0NvdW50ID0gMDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUbyBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBlID09PSBcIm5ld0xpc3RlbmVyXCIhIEJlZm9yZVxuICAgIC8vIGFkZGluZyBpdCB0byB0aGUgbGlzdGVuZXJzLCBmaXJzdCBlbWl0IFwibmV3TGlzdGVuZXJcIi5cbiAgICBpZiAoZXZlbnRzLm5ld0xpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRhcmdldC5lbWl0KCduZXdMaXN0ZW5lcicsIHR5cGUsXG4gICAgICAgICAgICAgICAgICBsaXN0ZW5lci5saXN0ZW5lciA/IGxpc3RlbmVyLmxpc3RlbmVyIDogbGlzdGVuZXIpO1xuXG4gICAgICAvLyBSZS1hc3NpZ24gYGV2ZW50c2AgYmVjYXVzZSBhIG5ld0xpc3RlbmVyIGhhbmRsZXIgY291bGQgaGF2ZSBjYXVzZWQgdGhlXG4gICAgICAvLyB0aGlzLl9ldmVudHMgdG8gYmUgYXNzaWduZWQgdG8gYSBuZXcgb2JqZWN0XG4gICAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgICB9XG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV07XG4gIH1cblxuICBpZiAoZXhpc3RpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7XG4gICAgKyt0YXJnZXQuX2V2ZW50c0NvdW50O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgZXhpc3RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEFkZGluZyB0aGUgc2Vjb25kIGVsZW1lbnQsIG5lZWQgdG8gY2hhbmdlIHRvIGFycmF5LlxuICAgICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPVxuICAgICAgICBwcmVwZW5kID8gW2xpc3RlbmVyLCBleGlzdGluZ10gOiBbZXhpc3RpbmcsIGxpc3RlbmVyXTtcbiAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGFycmF5LCBqdXN0IGFwcGVuZC5cbiAgICB9IGVsc2UgaWYgKHByZXBlbmQpIHtcbiAgICAgIGV4aXN0aW5nLnVuc2hpZnQobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleGlzdGluZy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgbGlzdGVuZXIgbGVha1xuICAgIG0gPSBfZ2V0TWF4TGlzdGVuZXJzKHRhcmdldCk7XG4gICAgaWYgKG0gPiAwICYmIGV4aXN0aW5nLmxlbmd0aCA+IG0gJiYgIWV4aXN0aW5nLndhcm5lZCkge1xuICAgICAgZXhpc3Rpbmcud2FybmVkID0gdHJ1ZTtcbiAgICAgIC8vIE5vIGVycm9yIGNvZGUgZm9yIHRoaXMgc2luY2UgaXQgaXMgYSBXYXJuaW5nXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgIHZhciB3ID0gbmV3IEVycm9yKCdQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5sZW5ndGggKyAnICcgKyBTdHJpbmcodHlwZSkgKyAnIGxpc3RlbmVycyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY3JlYXNlIGxpbWl0Jyk7XG4gICAgICB3Lm5hbWUgPSAnTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nJztcbiAgICAgIHcuZW1pdHRlciA9IHRhcmdldDtcbiAgICAgIHcudHlwZSA9IHR5cGU7XG4gICAgICB3LmNvdW50ID0gZXhpc3RpbmcubGVuZ3RoO1xuICAgICAgUHJvY2Vzc0VtaXRXYXJuaW5nKHcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiBhZGRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgdHJ1ZSk7XG4gICAgfTtcblxuZnVuY3Rpb24gb25jZVdyYXBwZXIoKSB7XG4gIGlmICghdGhpcy5maXJlZCkge1xuICAgIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSwgdGhpcy53cmFwRm4pO1xuICAgIHRoaXMuZmlyZWQgPSB0cnVlO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk7XG4gICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsIGFyZ3VtZW50cyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX29uY2VXcmFwKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIHN0YXRlID0geyBmaXJlZDogZmFsc2UsIHdyYXBGbjogdW5kZWZpbmVkLCB0YXJnZXQ6IHRhcmdldCwgdHlwZTogdHlwZSwgbGlzdGVuZXI6IGxpc3RlbmVyIH07XG4gIHZhciB3cmFwcGVkID0gb25jZVdyYXBwZXIuYmluZChzdGF0ZSk7XG4gIHdyYXBwZWQubGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgc3RhdGUud3JhcEZuID0gd3JhcHBlZDtcbiAgcmV0dXJuIHdyYXBwZWQ7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UodHlwZSwgbGlzdGVuZXIpIHtcbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gIHRoaXMub24odHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kT25jZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgIHRoaXMucHJlcGVuZExpc3RlbmVyKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuLy8gRW1pdHMgYSAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGlmIGFuZCBvbmx5IGlmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICB2YXIgbGlzdCwgZXZlbnRzLCBwb3NpdGlvbiwgaSwgb3JpZ2luYWxMaXN0ZW5lcjtcblxuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGxpc3QgPSBldmVudHNbdHlwZV07XG4gICAgICBpZiAobGlzdCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgaWYgKGxpc3QgPT09IGxpc3RlbmVyIHx8IGxpc3QubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgICAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0Lmxpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbGlzdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwb3NpdGlvbiA9IC0xO1xuXG4gICAgICAgIGZvciAoaSA9IGxpc3QubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBpZiAobGlzdFtpXSA9PT0gbGlzdGVuZXIgfHwgbGlzdFtpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsTGlzdGVuZXIgPSBsaXN0W2ldLmxpc3RlbmVyO1xuICAgICAgICAgICAgcG9zaXRpb24gPSBpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgMClcbiAgICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgICBpZiAocG9zaXRpb24gPT09IDApXG4gICAgICAgICAgbGlzdC5zaGlmdCgpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBzcGxpY2VPbmUobGlzdCwgcG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKVxuICAgICAgICAgIGV2ZW50c1t0eXBlXSA9IGxpc3RbMF07XG5cbiAgICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBvcmlnaW5hbExpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKHR5cGUpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMsIGV2ZW50cywgaTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8gZW1pdFxuICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnRzW3R5cGVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgLy8gZW1pdCByZW1vdmVMaXN0ZW5lciBmb3IgYWxsIGxpc3RlbmVycyBvbiBhbGwgZXZlbnRzXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGV2ZW50cyk7XG4gICAgICAgIHZhciBrZXk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoa2V5ID09PSAncmVtb3ZlTGlzdGVuZXInKSBjb250aW51ZTtcbiAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZW1vdmVMaXN0ZW5lcicpO1xuICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICBsaXN0ZW5lcnMgPSBldmVudHNbdHlwZV07XG5cbiAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzKTtcbiAgICAgIH0gZWxzZSBpZiAobGlzdGVuZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gTElGTyBvcmRlclxuICAgICAgICBmb3IgKGkgPSBsaXN0ZW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuZnVuY3Rpb24gX2xpc3RlbmVycyh0YXJnZXQsIHR5cGUsIHVud3JhcCkge1xuICB2YXIgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG5cbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcbiAgaWYgKGV2bGlzdGVuZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKVxuICAgIHJldHVybiB1bndyYXAgPyBbZXZsaXN0ZW5lci5saXN0ZW5lciB8fCBldmxpc3RlbmVyXSA6IFtldmxpc3RlbmVyXTtcblxuICByZXR1cm4gdW53cmFwID9cbiAgICB1bndyYXBMaXN0ZW5lcnMoZXZsaXN0ZW5lcikgOiBhcnJheUNsb25lKGV2bGlzdGVuZXIsIGV2bGlzdGVuZXIubGVuZ3RoKTtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCB0cnVlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmF3TGlzdGVuZXJzID0gZnVuY3Rpb24gcmF3TGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5saXN0ZW5lckNvdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJDb3VudCh0eXBlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbGlzdGVuZXJDb3VudC5jYWxsKGVtaXR0ZXIsIHR5cGUpO1xuICB9XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBsaXN0ZW5lckNvdW50O1xuZnVuY3Rpb24gbGlzdGVuZXJDb3VudCh0eXBlKSB7XG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG5cbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG5cbiAgICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSBpZiAoZXZsaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXZsaXN0ZW5lci5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZXZlbnROYW1lcyA9IGZ1bmN0aW9uIGV2ZW50TmFtZXMoKSB7XG4gIHJldHVybiB0aGlzLl9ldmVudHNDb3VudCA+IDAgPyBSZWZsZWN0T3duS2V5cyh0aGlzLl9ldmVudHMpIDogW107XG59O1xuXG5mdW5jdGlvbiBhcnJheUNsb25lKGFyciwgbikge1xuICB2YXIgY29weSA9IG5ldyBBcnJheShuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpXG4gICAgY29weVtpXSA9IGFycltpXTtcbiAgcmV0dXJuIGNvcHk7XG59XG5cbmZ1bmN0aW9uIHNwbGljZU9uZShsaXN0LCBpbmRleCkge1xuICBmb3IgKDsgaW5kZXggKyAxIDwgbGlzdC5sZW5ndGg7IGluZGV4KyspXG4gICAgbGlzdFtpbmRleF0gPSBsaXN0W2luZGV4ICsgMV07XG4gIGxpc3QucG9wKCk7XG59XG5cbmZ1bmN0aW9uIHVud3JhcExpc3RlbmVycyhhcnIpIHtcbiAgdmFyIHJldCA9IG5ldyBBcnJheShhcnIubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXQubGVuZ3RoOyArK2kpIHtcbiAgICByZXRbaV0gPSBhcnJbaV0ubGlzdGVuZXIgfHwgYXJyW2ldO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIG9uY2UoZW1pdHRlciwgbmFtZSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGZ1bmN0aW9uIGVycm9yTGlzdGVuZXIoZXJyKSB7XG4gICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKG5hbWUsIHJlc29sdmVyKTtcbiAgICAgIHJlamVjdChlcnIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc29sdmVyKCkge1xuICAgICAgaWYgKHR5cGVvZiBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgICByZXNvbHZlKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCByZXNvbHZlciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGlmIChuYW1lICE9PSAnZXJyb3InKSB7XG4gICAgICBhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlcihlbWl0dGVyLCBlcnJvckxpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgaGFuZGxlciwgZmxhZ3MpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsICdlcnJvcicsIGhhbmRsZXIsIGZsYWdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgbGlzdGVuZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChmbGFncy5vbmNlKSB7XG4gICAgICBlbWl0dGVyLm9uY2UobmFtZSwgbGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbWl0dGVyLm9uKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIEV2ZW50VGFyZ2V0IGRvZXMgbm90IGhhdmUgYGVycm9yYCBldmVudCBzZW1hbnRpY3MgbGlrZSBOb2RlXG4gICAgLy8gRXZlbnRFbWl0dGVycywgd2UgZG8gbm90IGxpc3RlbiBmb3IgYGVycm9yYCBldmVudHMgaGVyZS5cbiAgICBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIobmFtZSwgZnVuY3Rpb24gd3JhcExpc3RlbmVyKGFyZykge1xuICAgICAgLy8gSUUgZG9lcyBub3QgaGF2ZSBidWlsdGluIGB7IG9uY2U6IHRydWUgfWAgc3VwcG9ydCBzbyB3ZVxuICAgICAgLy8gaGF2ZSB0byBkbyBpdCBtYW51YWxseS5cbiAgICAgIGlmIChmbGFncy5vbmNlKSB7XG4gICAgICAgIGVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCB3cmFwTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgbGlzdGVuZXIoYXJnKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJlbWl0dGVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGVtaXR0ZXIpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKi9cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyb3BEb3duIHtcbiAgY29uc3RydWN0b3IoZWwpIHtcbiAgICB0aGlzLmVsID0gZWw7XG4gIH1cblxuICBpbml0KCkge1xuICAgIHRoaXMuZWwub24oJ3Nob3cuYnMuZHJvcGRvd24nLCAoZSwgZWwpID0+IHtcbiAgICAgIGlmIChlbCkge1xuICAgICAgICAkKGAjJHtlbH1gKS5maW5kKCcuZHJvcGRvd24tbWVudScpLmZpcnN0KCkuc3RvcCh0cnVlLCB0cnVlKVxuICAgICAgICAgIC5zbGlkZURvd24oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICQoZS50YXJnZXQpLmZpbmQoJy5kcm9wZG93bi1tZW51JykuZmlyc3QoKS5zdG9wKHRydWUsIHRydWUpXG4gICAgICAgICAgLnNsaWRlRG93bigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5lbC5vbignaGlkZS5icy5kcm9wZG93bicsIChlLCBlbCkgPT4ge1xuICAgICAgaWYgKGVsKSB7XG4gICAgICAgICQoYCMke2VsfWApLmZpbmQoJy5kcm9wZG93bi1tZW51JykuZmlyc3QoKS5zdG9wKHRydWUsIHRydWUpXG4gICAgICAgICAgLnNsaWRlVXAoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICQoZS50YXJnZXQpLmZpbmQoJy5kcm9wZG93bi1tZW51JykuZmlyc3QoKS5zdG9wKHRydWUsIHRydWUpXG4gICAgICAgICAgLnNsaWRlVXAoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZWwuZmluZCgnc2VsZWN0LmxpbmsnKS5lYWNoKChpZHgsIGVsKSA9PiB7XG4gICAgICAkKGVsKS5vbignY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24gPSAkKHRoaXMpLnZhbCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjAgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqL1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRm9ybSB7XG4gIGluaXQoKSB7XG4gICAgdGhpcy5wYXJlbnRGb2N1cygpO1xuICAgIHRoaXMudG9nZ2xlUGFzc3dvcmRWaXNpYmlsaXR5KCk7XG4gIH1cblxuICBwYXJlbnRGb2N1cygpIHtcbiAgICAkKCcuanMtY2hpbGQtZm9jdXMnKS5vbignZm9jdXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5qcy1wYXJlbnQtZm9jdXMnKS5hZGRDbGFzcygnZm9jdXMnKTtcbiAgICB9KTtcbiAgICAkKCcuanMtY2hpbGQtZm9jdXMnKS5vbignZm9jdXNvdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5qcy1wYXJlbnQtZm9jdXMnKS5yZW1vdmVDbGFzcygnZm9jdXMnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZVBhc3N3b3JkVmlzaWJpbGl0eSgpIHtcbiAgICAkKCdidXR0b25bZGF0YS1hY3Rpb249XCJzaG93LXBhc3N3b3JkXCJdJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZWxtID0gJCh0aGlzKS5jbG9zZXN0KCcuaW5wdXQtZ3JvdXAnKS5jaGlsZHJlbignaW5wdXQuanMtdmlzaWJsZS1wYXNzd29yZCcpO1xuXG4gICAgICBpZiAoZWxtLmF0dHIoJ3R5cGUnKSA9PT0gJ3Bhc3N3b3JkJykge1xuICAgICAgICBlbG0uYXR0cigndHlwZScsICd0ZXh0Jyk7XG4gICAgICAgICQodGhpcykudGV4dCgkKHRoaXMpLmRhdGEoJ3RleHRIaWRlJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxtLmF0dHIoJ3R5cGUnLCAncGFzc3dvcmQnKTtcbiAgICAgICAgJCh0aGlzKS50ZXh0KCQodGhpcykuZGF0YSgndGV4dFNob3cnKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIi8qIGdsb2JhbCB3aW5kb3csIGV4cG9ydHMsIGRlZmluZSAqL1xuXG4hZnVuY3Rpb24oKSB7XG4gICAgJ3VzZSBzdHJpY3QnXG5cbiAgICB2YXIgcmUgPSB7XG4gICAgICAgIG5vdF9zdHJpbmc6IC9bXnNdLyxcbiAgICAgICAgbm90X2Jvb2w6IC9bXnRdLyxcbiAgICAgICAgbm90X3R5cGU6IC9bXlRdLyxcbiAgICAgICAgbm90X3ByaW1pdGl2ZTogL1tedl0vLFxuICAgICAgICBudW1iZXI6IC9bZGllZmddLyxcbiAgICAgICAgbnVtZXJpY19hcmc6IC9bYmNkaWVmZ3V4WF0vLFxuICAgICAgICBqc29uOiAvW2pdLyxcbiAgICAgICAgbm90X2pzb246IC9bXmpdLyxcbiAgICAgICAgdGV4dDogL15bXlxceDI1XSsvLFxuICAgICAgICBtb2R1bG86IC9eXFx4MjV7Mn0vLFxuICAgICAgICBwbGFjZWhvbGRlcjogL15cXHgyNSg/OihbMS05XVxcZCopXFwkfFxcKChbXildKylcXCkpPyhcXCspPygwfCdbXiRdKT8oLSk/KFxcZCspPyg/OlxcLihcXGQrKSk/KFtiLWdpam9zdFR1dnhYXSkvLFxuICAgICAgICBrZXk6IC9eKFthLXpfXVthLXpfXFxkXSopL2ksXG4gICAgICAgIGtleV9hY2Nlc3M6IC9eXFwuKFthLXpfXVthLXpfXFxkXSopL2ksXG4gICAgICAgIGluZGV4X2FjY2VzczogL15cXFsoXFxkKylcXF0vLFxuICAgICAgICBzaWduOiAvXlsrLV0vXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3ByaW50ZihrZXkpIHtcbiAgICAgICAgLy8gYGFyZ3VtZW50c2AgaXMgbm90IGFuIGFycmF5LCBidXQgc2hvdWxkIGJlIGZpbmUgZm9yIHRoaXMgY2FsbFxuICAgICAgICByZXR1cm4gc3ByaW50Zl9mb3JtYXQoc3ByaW50Zl9wYXJzZShrZXkpLCBhcmd1bWVudHMpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdnNwcmludGYoZm10LCBhcmd2KSB7XG4gICAgICAgIHJldHVybiBzcHJpbnRmLmFwcGx5KG51bGwsIFtmbXRdLmNvbmNhdChhcmd2IHx8IFtdKSlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzcHJpbnRmX2Zvcm1hdChwYXJzZV90cmVlLCBhcmd2KSB7XG4gICAgICAgIHZhciBjdXJzb3IgPSAxLCB0cmVlX2xlbmd0aCA9IHBhcnNlX3RyZWUubGVuZ3RoLCBhcmcsIG91dHB1dCA9ICcnLCBpLCBrLCBwaCwgcGFkLCBwYWRfY2hhcmFjdGVyLCBwYWRfbGVuZ3RoLCBpc19wb3NpdGl2ZSwgc2lnblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdHJlZV9sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJzZV90cmVlW2ldID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSBwYXJzZV90cmVlW2ldXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgcGFyc2VfdHJlZVtpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBwaCA9IHBhcnNlX3RyZWVbaV0gLy8gY29udmVuaWVuY2UgcHVycG9zZXMgb25seVxuICAgICAgICAgICAgICAgIGlmIChwaC5rZXlzKSB7IC8vIGtleXdvcmQgYXJndW1lbnRcbiAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndltjdXJzb3JdXG4gICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBwaC5rZXlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzcHJpbnRmKCdbc3ByaW50Zl0gQ2Fubm90IGFjY2VzcyBwcm9wZXJ0eSBcIiVzXCIgb2YgdW5kZWZpbmVkIHZhbHVlIFwiJXNcIicsIHBoLmtleXNba10sIHBoLmtleXNbay0xXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmdbcGgua2V5c1trXV1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwaC5wYXJhbV9ubykgeyAvLyBwb3NpdGlvbmFsIGFyZ3VtZW50IChleHBsaWNpdClcbiAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndltwaC5wYXJhbV9ub11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7IC8vIHBvc2l0aW9uYWwgYXJndW1lbnQgKGltcGxpY2l0KVxuICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd2W2N1cnNvcisrXVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyZS5ub3RfdHlwZS50ZXN0KHBoLnR5cGUpICYmIHJlLm5vdF9wcmltaXRpdmUudGVzdChwaC50eXBlKSAmJiBhcmcgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcoKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyZS5udW1lcmljX2FyZy50ZXN0KHBoLnR5cGUpICYmICh0eXBlb2YgYXJnICE9PSAnbnVtYmVyJyAmJiBpc05hTihhcmcpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHNwcmludGYoJ1tzcHJpbnRmXSBleHBlY3RpbmcgbnVtYmVyIGJ1dCBmb3VuZCAlVCcsIGFyZykpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlLm51bWJlci50ZXN0KHBoLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzX3Bvc2l0aXZlID0gYXJnID49IDBcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHBoLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYic6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBwYXJzZUludChhcmcsIDEwKS50b1N0cmluZygyKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGFyZywgMTApKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2knOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gcGFyc2VJbnQoYXJnLCAxMClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2onOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gSlNPTi5zdHJpbmdpZnkoYXJnLCBudWxsLCBwaC53aWR0aCA/IHBhcnNlSW50KHBoLndpZHRoKSA6IDApXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHBoLnByZWNpc2lvbiA/IHBhcnNlRmxvYXQoYXJnKS50b0V4cG9uZW50aWFsKHBoLnByZWNpc2lvbikgOiBwYXJzZUZsb2F0KGFyZykudG9FeHBvbmVudGlhbCgpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdmJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHBoLnByZWNpc2lvbiA/IHBhcnNlRmxvYXQoYXJnKS50b0ZpeGVkKHBoLnByZWNpc2lvbikgOiBwYXJzZUZsb2F0KGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2cnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gcGgucHJlY2lzaW9uID8gU3RyaW5nKE51bWJlcihhcmcudG9QcmVjaXNpb24ocGgucHJlY2lzaW9uKSkpIDogcGFyc2VGbG9hdChhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdvJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IChwYXJzZUludChhcmcsIDEwKSA+Pj4gMCkudG9TdHJpbmcoOClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gU3RyaW5nKGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IChwaC5wcmVjaXNpb24gPyBhcmcuc3Vic3RyaW5nKDAsIHBoLnByZWNpc2lvbikgOiBhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IFN0cmluZyghIWFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IChwaC5wcmVjaXNpb24gPyBhcmcuc3Vic3RyaW5nKDAsIHBoLnByZWNpc2lvbikgOiBhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdUJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAocGgucHJlY2lzaW9uID8gYXJnLnN1YnN0cmluZygwLCBwaC5wcmVjaXNpb24pIDogYXJnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBwYXJzZUludChhcmcsIDEwKSA+Pj4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndic6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAocGgucHJlY2lzaW9uID8gYXJnLnN1YnN0cmluZygwLCBwaC5wcmVjaXNpb24pIDogYXJnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAneCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAocGFyc2VJbnQoYXJnLCAxMCkgPj4+IDApLnRvU3RyaW5nKDE2KVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnWCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAocGFyc2VJbnQoYXJnLCAxMCkgPj4+IDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmUuanNvbi50ZXN0KHBoLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSBhcmdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZS5udW1iZXIudGVzdChwaC50eXBlKSAmJiAoIWlzX3Bvc2l0aXZlIHx8IHBoLnNpZ24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaWduID0gaXNfcG9zaXRpdmUgPyAnKycgOiAnLSdcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZy50b1N0cmluZygpLnJlcGxhY2UocmUuc2lnbiwgJycpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaWduID0gJydcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwYWRfY2hhcmFjdGVyID0gcGgucGFkX2NoYXIgPyBwaC5wYWRfY2hhciA9PT0gJzAnID8gJzAnIDogcGgucGFkX2NoYXIuY2hhckF0KDEpIDogJyAnXG4gICAgICAgICAgICAgICAgICAgIHBhZF9sZW5ndGggPSBwaC53aWR0aCAtIChzaWduICsgYXJnKS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgcGFkID0gcGgud2lkdGggPyAocGFkX2xlbmd0aCA+IDAgPyBwYWRfY2hhcmFjdGVyLnJlcGVhdChwYWRfbGVuZ3RoKSA6ICcnKSA6ICcnXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSBwaC5hbGlnbiA/IHNpZ24gKyBhcmcgKyBwYWQgOiAocGFkX2NoYXJhY3RlciA9PT0gJzAnID8gc2lnbiArIHBhZCArIGFyZyA6IHBhZCArIHNpZ24gKyBhcmcpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXRcbiAgICB9XG5cbiAgICB2YXIgc3ByaW50Zl9jYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuICAgIGZ1bmN0aW9uIHNwcmludGZfcGFyc2UoZm10KSB7XG4gICAgICAgIGlmIChzcHJpbnRmX2NhY2hlW2ZtdF0pIHtcbiAgICAgICAgICAgIHJldHVybiBzcHJpbnRmX2NhY2hlW2ZtdF1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfZm10ID0gZm10LCBtYXRjaCwgcGFyc2VfdHJlZSA9IFtdLCBhcmdfbmFtZXMgPSAwXG4gICAgICAgIHdoaWxlIChfZm10KSB7XG4gICAgICAgICAgICBpZiAoKG1hdGNoID0gcmUudGV4dC5leGVjKF9mbXQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBhcnNlX3RyZWUucHVzaChtYXRjaFswXSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKChtYXRjaCA9IHJlLm1vZHVsby5leGVjKF9mbXQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBhcnNlX3RyZWUucHVzaCgnJScpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICgobWF0Y2ggPSByZS5wbGFjZWhvbGRlci5leGVjKF9mbXQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaFsyXSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdfbmFtZXMgfD0gMVxuICAgICAgICAgICAgICAgICAgICB2YXIgZmllbGRfbGlzdCA9IFtdLCByZXBsYWNlbWVudF9maWVsZCA9IG1hdGNoWzJdLCBmaWVsZF9tYXRjaCA9IFtdXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZmllbGRfbWF0Y2ggPSByZS5rZXkuZXhlYyhyZXBsYWNlbWVudF9maWVsZCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9saXN0LnB1c2goZmllbGRfbWF0Y2hbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKHJlcGxhY2VtZW50X2ZpZWxkID0gcmVwbGFjZW1lbnRfZmllbGQuc3Vic3RyaW5nKGZpZWxkX21hdGNoWzBdLmxlbmd0aCkpICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZmllbGRfbWF0Y2ggPSByZS5rZXlfYWNjZXNzLmV4ZWMocmVwbGFjZW1lbnRfZmllbGQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9saXN0LnB1c2goZmllbGRfbWF0Y2hbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChmaWVsZF9tYXRjaCA9IHJlLmluZGV4X2FjY2Vzcy5leGVjKHJlcGxhY2VtZW50X2ZpZWxkKSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbGlzdC5wdXNoKGZpZWxkX21hdGNoWzFdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdbc3ByaW50Zl0gZmFpbGVkIHRvIHBhcnNlIG5hbWVkIGFyZ3VtZW50IGtleScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdbc3ByaW50Zl0gZmFpbGVkIHRvIHBhcnNlIG5hbWVkIGFyZ3VtZW50IGtleScpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hbMl0gPSBmaWVsZF9saXN0XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcmdfbmFtZXMgfD0gMlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYXJnX25hbWVzID09PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignW3NwcmludGZdIG1peGluZyBwb3NpdGlvbmFsIGFuZCBuYW1lZCBwbGFjZWhvbGRlcnMgaXMgbm90ICh5ZXQpIHN1cHBvcnRlZCcpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcGFyc2VfdHJlZS5wdXNoKFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogbWF0Y2hbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV9ubzogICAgbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlzOiAgICAgICAgbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzaWduOiAgICAgICAgbWF0Y2hbM10sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRfY2hhcjogICAgbWF0Y2hbNF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbjogICAgICAgbWF0Y2hbNV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogICAgICAgbWF0Y2hbNl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb246ICAgbWF0Y2hbN10sXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAgICAgICAgbWF0Y2hbOF1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignW3NwcmludGZdIHVuZXhwZWN0ZWQgcGxhY2Vob2xkZXInKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2ZtdCA9IF9mbXQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3ByaW50Zl9jYWNoZVtmbXRdID0gcGFyc2VfdHJlZVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGV4cG9ydCB0byBlaXRoZXIgYnJvd3NlciBvciBub2RlLmpzXG4gICAgICovXG4gICAgLyogZXNsaW50LWRpc2FibGUgcXVvdGUtcHJvcHMgKi9cbiAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGV4cG9ydHNbJ3NwcmludGYnXSA9IHNwcmludGZcbiAgICAgICAgZXhwb3J0c1sndnNwcmludGYnXSA9IHZzcHJpbnRmXG4gICAgfVxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3aW5kb3dbJ3NwcmludGYnXSA9IHNwcmludGZcbiAgICAgICAgd2luZG93Wyd2c3ByaW50ZiddID0gdnNwcmludGZcblxuICAgICAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmVbJ2FtZCddKSB7XG4gICAgICAgICAgICBkZWZpbmUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgJ3NwcmludGYnOiBzcHJpbnRmLFxuICAgICAgICAgICAgICAgICAgICAndnNwcmludGYnOiB2c3ByaW50ZlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSBxdW90ZS1wcm9wcyAqL1xufSgpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKi9cblxuaW1wb3J0IHtzcHJpbnRmfSBmcm9tICdzcHJpbnRmLWpzJztcblxuY29uc3Qge3Bhc3N3b3JkUG9saWN5OiBQYXNzd29yZFBvbGljeU1hcH0gPSBwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzO1xuXG5jb25zdCBQQVNTV09SRF9QT0xJQ1lfRVJST1IgPSAnVGhlIHBhc3N3b3JkIHBvbGljeSBlbGVtZW50cyBhcmUgdW5kZWZpbmVkLic7XG5cbmNvbnN0IGdldFBhc3N3b3JkU3RyZW5ndGhGZWVkYmFjayA9IChcbiAgc3RyZW5ndGgsXG4pID0+IHtcbiAgc3dpdGNoIChzdHJlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yOiAnYmctZGFuZ2VyJyxcbiAgICAgIH07XG5cbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2xvcjogJ2JnLWRhbmdlcicsXG4gICAgICB9O1xuXG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sb3I6ICdiZy13YXJuaW5nJyxcbiAgICAgIH07XG5cbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2xvcjogJ2JnLXN1Y2Nlc3MnLFxuICAgICAgfTtcblxuICAgIGNhc2UgNDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yOiAnYmctc3VjY2VzcycsXG4gICAgICB9O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwYXNzd29yZCBzdHJlbmd0aCBpbmRpY2F0b3IuJyk7XG4gIH1cbn07XG5cbmNvbnN0IHdhdGNoUGFzc3dvcmQgPSBhc3luYyAoXG4gIGVsZW1lbnRJbnB1dCxcbiAgZmVlZGJhY2tDb250YWluZXIsXG4gIGhpbnRzLFxuKSA9PiB7XG4gIGNvbnN0IHtwcmVzdGFzaG9wfSA9IHdpbmRvdztcbiAgY29uc3QgcGFzc3dvcmRWYWx1ZSA9IGVsZW1lbnRJbnB1dC52YWx1ZTtcbiAgY29uc3QgZWxlbWVudEljb24gPSBmZWVkYmFja0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFBhc3N3b3JkUG9saWN5TWFwLnJlcXVpcmVtZW50U2NvcmVJY29uKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJlc3Rhc2hvcC5jaGVja1Bhc3N3b3JkU2NvcmUocGFzc3dvcmRWYWx1ZSk7XG4gIGNvbnN0IGZlZWRiYWNrID0gZ2V0UGFzc3dvcmRTdHJlbmd0aEZlZWRiYWNrKHJlc3VsdC5zY29yZSk7XG4gIGNvbnN0IHBhc3N3b3JkTGVuZ3RoID0gcGFzc3dvcmRWYWx1ZS5sZW5ndGg7XG4gIGNvbnN0IHBvcG92ZXJDb250ZW50ID0gW107XG5cbiAgJChlbGVtZW50SW5wdXQpLnBvcG92ZXIoJ2Rpc3Bvc2UnKTtcblxuICBmZWVkYmFja0NvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gcGFzc3dvcmRWYWx1ZSA9PT0gJycgPyAnbm9uZScgOiAnYmxvY2snO1xuXG4gIGlmIChyZXN1bHQuZmVlZGJhY2sud2FybmluZyAhPT0gJycpIHtcbiAgICBpZiAocmVzdWx0LmZlZWRiYWNrLndhcm5pbmcgaW4gaGludHMpIHtcbiAgICAgIHBvcG92ZXJDb250ZW50LnB1c2goaGludHNbcmVzdWx0LmZlZWRiYWNrLndhcm5pbmddKTtcbiAgICB9XG4gIH1cblxuICByZXN1bHQuZmVlZGJhY2suc3VnZ2VzdGlvbnMuZm9yRWFjaCgoc3VnZ2VzdGlvbikgPT4ge1xuICAgIGlmIChzdWdnZXN0aW9uIGluIGhpbnRzKSB7XG4gICAgICBwb3BvdmVyQ29udGVudC5wdXNoKGhpbnRzW3N1Z2dlc3Rpb25dKTtcbiAgICB9XG4gIH0pO1xuXG4gICQoZWxlbWVudElucHV0KS5wb3BvdmVyKHtcbiAgICBodG1sOiB0cnVlLFxuICAgIHBsYWNlbWVudDogJ3RvcCcsXG4gICAgY29udGVudDogcG9wb3ZlckNvbnRlbnQuam9pbignPGJyLz4nKSxcbiAgfSkucG9wb3Zlcignc2hvdycpO1xuXG4gIGNvbnN0IHBhc3N3b3JkTGVuZ3RoVmFsaWQgPSBwYXNzd29yZExlbmd0aCA+PSBwYXJzZUludChlbGVtZW50SW5wdXQuZGF0YXNldC5taW5sZW5ndGgsIDEwKVxuICAgICYmIHBhc3N3b3JkTGVuZ3RoIDw9IHBhcnNlSW50KGVsZW1lbnRJbnB1dC5kYXRhc2V0Lm1heGxlbmd0aCwgMTApO1xuICBjb25zdCBwYXNzd29yZFNjb3JlVmFsaWQgPSBwYXJzZUludChlbGVtZW50SW5wdXQuZGF0YXNldC5taW5zY29yZSwgMTApIDw9IHJlc3VsdC5zY29yZTtcblxuICBmZWVkYmFja0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFBhc3N3b3JkUG9saWN5TWFwLnJlcXVpcmVtZW50TGVuZ3RoSWNvbikuY2xhc3NMaXN0LnRvZ2dsZShcbiAgICAndGV4dC1zdWNjZXNzJyxcbiAgICBwYXNzd29yZExlbmd0aFZhbGlkLFxuICApO1xuXG4gIGVsZW1lbnRJY29uLmNsYXNzTGlzdC50b2dnbGUoXG4gICAgJ3RleHQtc3VjY2VzcycsXG4gICAgcGFzc3dvcmRTY29yZVZhbGlkLFxuICApO1xuXG4gIC8vIENoYW5nZSBpbnB1dCBib3JkZXIgY29sb3IgZGVwZW5kaW5nIG9uIHRoZSB2YWxpZGl0eVxuICBlbGVtZW50SW5wdXRcbiAgICAuY2xhc3NMaXN0LnJlbW92ZSgnYm9yZGVyLXN1Y2Nlc3MnLCAnYm9yZGVyLWRhbmdlcicpO1xuICBlbGVtZW50SW5wdXRcbiAgICAuY2xhc3NMaXN0LmFkZChwYXNzd29yZFNjb3JlVmFsaWQgJiYgcGFzc3dvcmRMZW5ndGhWYWxpZCA/ICdib3JkZXItc3VjY2VzcycgOiAnYm9yZGVyLWRhbmdlcicpO1xuICBlbGVtZW50SW5wdXRcbiAgICAuY2xhc3NMaXN0LmFkZCgnZm9ybS1jb250cm9sJywgJ2JvcmRlcicpO1xuXG4gIGNvbnN0IHBlcmNlbnRhZ2UgPSAocmVzdWx0LnNjb3JlICogMjApICsgMjA7XG4gIGNvbnN0IHByb2dyZXNzQmFyID0gZmVlZGJhY2tDb250YWluZXIucXVlcnlTZWxlY3RvcihQYXNzd29yZFBvbGljeU1hcC5wcm9ncmVzc0Jhcik7XG5cbiAgLy8gaW5jcmVhc2UgYW5kIGRlY3JlYXNlIHByb2dyZXNzIGJhclxuICBpZiAocHJvZ3Jlc3NCYXIpIHtcbiAgICBwcm9ncmVzc0Jhci5zdHlsZS53aWR0aCA9IGAke3BlcmNlbnRhZ2V9JWA7XG4gICAgcHJvZ3Jlc3NCYXIuY2xhc3NMaXN0LnJlbW92ZSgnYmctc3VjY2VzcycsICdiZy1kYW5nZXInLCAnYmctd2FybmluZycpO1xuICAgIHByb2dyZXNzQmFyLmNsYXNzTGlzdC5hZGQoZmVlZGJhY2suY29sb3IpO1xuICB9XG59O1xuXG4vLyBOb3QgdGVzdGFibGUgYmVjYXVzZSBpdCBtYW5pcHVsYXRlcyBTVkcgZWxlbWVudHMsIHVuc3VwcG9ydGVkIGJ5IEpTRG9tXG5jb25zdCB1c2VQYXNzd29yZFBvbGljeSA9IChzZWxlY3RvcikgPT4ge1xuICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgY29uc3QgaW5wdXRDb2x1bW4gPSBlbGVtZW50Py5xdWVyeVNlbGVjdG9yKFBhc3N3b3JkUG9saWN5TWFwLmlucHV0Q29sdW1uKTtcbiAgICBjb25zdCBlbGVtZW50SW5wdXQgPSBlbGVtZW50Py5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICAgIGNvbnN0IHRlbXBsYXRlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IGZlZWRiYWNrVGVtcGxhdGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFBhc3N3b3JkUG9saWN5TWFwLnRlbXBsYXRlKTtcbiAgICBsZXQgZmVlZGJhY2tDb250YWluZXI7XG5cbiAgICBpZiAoZmVlZGJhY2tUZW1wbGF0ZSAmJiBlbGVtZW50ICYmIGlucHV0Q29sdW1uICYmIGVsZW1lbnRJbnB1dCkge1xuICAgICAgdGVtcGxhdGVFbGVtZW50LmlubmVySFRNTCA9IGZlZWRiYWNrVGVtcGxhdGUuaW5uZXJIVE1MO1xuICAgICAgaW5wdXRDb2x1bW4uYXBwZW5kKHRlbXBsYXRlRWxlbWVudCk7XG4gICAgICBmZWVkYmFja0NvbnRhaW5lciA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcihQYXNzd29yZFBvbGljeU1hcC5jb250YWluZXIpO1xuXG4gICAgICBpZiAoZmVlZGJhY2tDb250YWluZXIpIHtcbiAgICAgICAgY29uc3QgaGludEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFBhc3N3b3JkUG9saWN5TWFwLmhpbnQpO1xuXG4gICAgICAgIGlmIChoaW50RWxlbWVudCkge1xuICAgICAgICAgIGNvbnN0IGhpbnRzID0gSlNPTi5wYXJzZShoaW50RWxlbWVudC5pbm5lckhUTUwpO1xuXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgICBjb25zdCBwYXNzd29yZFJlcXVpcmVtZW50c0xlbmd0aCA9IGZlZWRiYWNrQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoUGFzc3dvcmRQb2xpY3lNYXAucmVxdWlyZW1lbnRMZW5ndGgpO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgICAgY29uc3QgcGFzc3dvcmRSZXF1aXJlbWVudHNTY29yZSA9IGZlZWRiYWNrQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoUGFzc3dvcmRQb2xpY3lNYXAucmVxdWlyZW1lbnRTY29yZSk7XG4gICAgICAgICAgY29uc3QgcGFzc3dvcmRMZW5ndGhUZXh0ID0gcGFzc3dvcmRSZXF1aXJlbWVudHNMZW5ndGg/LnF1ZXJ5U2VsZWN0b3IoJ3NwYW4nKTtcbiAgICAgICAgICBjb25zdCBwYXNzd29yZFJlcXVpcmVtZW50c1RleHQgPSBwYXNzd29yZFJlcXVpcmVtZW50c1Njb3JlPy5xdWVyeVNlbGVjdG9yKCdzcGFuJyk7XG5cbiAgICAgICAgICBpZiAocGFzc3dvcmRMZW5ndGhUZXh0ICYmIHBhc3N3b3JkUmVxdWlyZW1lbnRzTGVuZ3RoICYmIHBhc3N3b3JkUmVxdWlyZW1lbnRzTGVuZ3RoLmRhdGFzZXQudHJhbnNsYXRpb24pIHtcbiAgICAgICAgICAgIHBhc3N3b3JkTGVuZ3RoVGV4dC5pbm5lclRleHQgPSBzcHJpbnRmKFxuICAgICAgICAgICAgICBwYXNzd29yZFJlcXVpcmVtZW50c0xlbmd0aC5kYXRhc2V0LnRyYW5zbGF0aW9uLFxuICAgICAgICAgICAgICBlbGVtZW50SW5wdXQuZGF0YXNldC5taW5sZW5ndGgsXG4gICAgICAgICAgICAgIGVsZW1lbnRJbnB1dC5kYXRhc2V0Lm1heGxlbmd0aCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHBhc3N3b3JkUmVxdWlyZW1lbnRzVGV4dCAmJiBwYXNzd29yZFJlcXVpcmVtZW50c1Njb3JlICYmIHBhc3N3b3JkUmVxdWlyZW1lbnRzU2NvcmUuZGF0YXNldC50cmFuc2xhdGlvbikge1xuICAgICAgICAgICAgcGFzc3dvcmRSZXF1aXJlbWVudHNUZXh0LmlubmVyVGV4dCA9IHNwcmludGYoXG4gICAgICAgICAgICAgIHBhc3N3b3JkUmVxdWlyZW1lbnRzU2NvcmUuZGF0YXNldC50cmFuc2xhdGlvbixcbiAgICAgICAgICAgICAgaGludHNbZWxlbWVudElucHV0LmRhdGFzZXQubWluc2NvcmVdLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAgIGVsZW1lbnRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsICgpID0+IHdhdGNoUGFzc3dvcmQoZWxlbWVudElucHV0LCBmZWVkYmFja0NvbnRhaW5lciwgaGludHMpKTtcbiAgICAgICAgICBlbGVtZW50SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsICgpID0+IHtcbiAgICAgICAgICAgICQoZWxlbWVudElucHV0KS5wb3BvdmVyKCdkaXNwb3NlJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiBuZXcgRXJyb3IoUEFTU1dPUkRfUE9MSUNZX0VSUk9SKSxcbiAgICB9O1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHVzZVBhc3N3b3JkUG9saWN5O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IHByZXN0YXNob3AgZnJvbSAncHJlc3Rhc2hvcCc7XG5pbXBvcnQgRHJvcERvd24gZnJvbSAnLi9kcm9wLWRvd24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb3BNZW51IGV4dGVuZHMgRHJvcERvd24ge1xuICBpbml0KCkge1xuICAgIGxldCBlbG10Q2xhc3M7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5lbC5maW5kKCdsaScpLm9uKCdtb3VzZWVudGVyIG1vdXNlbGVhdmUnLCAoZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuZWwucGFyZW50KCkuaGFzQ2xhc3MoJ21vYmlsZScpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnRUYXJnZXRDbGFzcyA9ICQoZS5jdXJyZW50VGFyZ2V0KS5hdHRyKCdjbGFzcycpO1xuXG4gICAgICBpZiAoZWxtdENsYXNzICE9PSBjdXJyZW50VGFyZ2V0Q2xhc3MpIHtcbiAgICAgICAgY29uc3QgY2xhc3Nlc1NlbGVjdGVkID0gQXJyYXkucHJvdG90eXBlLnNsaWNlXG4gICAgICAgICAgLmNhbGwoZS5jdXJyZW50VGFyZ2V0LmNsYXNzTGlzdClcbiAgICAgICAgICAubWFwKChlbGVtKSA9PiAodHlwZW9mIGVsZW0gPT09ICdzdHJpbmcnID8gYC4ke2VsZW19YCA6IGZhbHNlKSk7XG5cbiAgICAgICAgZWxtdENsYXNzID0gY2xhc3Nlc1NlbGVjdGVkLmpvaW4oJycpO1xuXG4gICAgICAgIGlmIChlbG10Q2xhc3MgJiYgJChlLnRhcmdldCkuZGF0YSgnZGVwdGgnKSA9PT0gMCkge1xuICAgICAgICAgICQoYCR7ZWxtdENsYXNzfSAuanMtc3ViLW1lbnVgKS5jc3Moe1xuICAgICAgICAgICAgdG9wOiAkKGAke2VsbXRDbGFzc31gKS5oZWlnaHQoKSArICQoYCR7ZWxtdENsYXNzfWApLnBvc2l0aW9uKCkudG9wLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgJCgnI21lbnUtaWNvbicpLm9uKCdjbGljaycsICgpID0+IHtcbiAgICAgICQoJyNtb2JpbGVfdG9wX21lbnVfd3JhcHBlcicpLnRvZ2dsZSgpO1xuICAgICAgc2VsZi50b2dnbGVNb2JpbGVNZW51KCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmVsLm9uKCdjbGljaycsIChlKSA9PiB7XG4gICAgICBpZiAodGhpcy5lbC5wYXJlbnQoKS5oYXNDbGFzcygnbW9iaWxlJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcblxuICAgIHByZXN0YXNob3Aub24oJ3Jlc3BvbnNpdmUgdXBkYXRlJywgKCkgPT4ge1xuICAgICAgJCgnLmpzLXN1Yi1tZW51JykucmVtb3ZlQXR0cignc3R5bGUnKTtcbiAgICAgIHNlbGYudG9nZ2xlTW9iaWxlTWVudSgpO1xuICAgIH0pO1xuICAgIHN1cGVyLmluaXQoKTtcbiAgfVxuXG4gIHRvZ2dsZU1vYmlsZU1lbnUoKSB7XG4gICAgJCgnI2hlYWRlcicpLnRvZ2dsZUNsYXNzKCdpcy1vcGVuJyk7XG4gICAgaWYgKCQoJyNtb2JpbGVfdG9wX21lbnVfd3JhcHBlcicpLmlzKCc6dmlzaWJsZScpKSB7XG4gICAgICAkKCcjbm90aWZpY2F0aW9ucywgI3dyYXBwZXIsICNmb290ZXInKS5oaWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICQoJyNub3RpZmljYXRpb25zLCAjd3JhcHBlciwgI2Zvb3RlcicpLnNob3coKTtcbiAgICB9XG4gIH1cbn1cbiIsIlwiZnVuY3Rpb25cIiE9dHlwZW9mIE9iamVjdC5jcmVhdGUmJihPYmplY3QuY3JlYXRlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG8oKXt9cmV0dXJuIG8ucHJvdG90eXBlPXQsbmV3IG99KSxmdW5jdGlvbih0LG8saSxzKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17X3Bvc2l0aW9uQ2xhc3NlczpbXCJib3R0b20tbGVmdFwiLFwiYm90dG9tLXJpZ2h0XCIsXCJ0b3AtcmlnaHRcIixcInRvcC1sZWZ0XCIsXCJib3R0b20tY2VudGVyXCIsXCJ0b3AtY2VudGVyXCIsXCJtaWQtY2VudGVyXCJdLF9kZWZhdWx0SWNvbnM6W1wic3VjY2Vzc1wiLFwiZXJyb3JcIixcImluZm9cIixcIndhcm5pbmdcIl0saW5pdDpmdW5jdGlvbihvLGkpe3RoaXMucHJlcGFyZU9wdGlvbnMobyx0LnRvYXN0Lm9wdGlvbnMpLHRoaXMucHJvY2VzcygpfSxwcmVwYXJlT3B0aW9uczpmdW5jdGlvbihvLGkpe3ZhciBzPXt9O1wic3RyaW5nXCI9PXR5cGVvZiBvfHxvIGluc3RhbmNlb2YgQXJyYXk/cy50ZXh0PW86cz1vLHRoaXMub3B0aW9ucz10LmV4dGVuZCh7fSxpLHMpfSxwcm9jZXNzOmZ1bmN0aW9uKCl7dGhpcy5zZXR1cCgpLHRoaXMuYWRkVG9Eb20oKSx0aGlzLnBvc2l0aW9uKCksdGhpcy5iaW5kVG9hc3QoKSx0aGlzLmFuaW1hdGUoKX0sc2V0dXA6ZnVuY3Rpb24oKXt2YXIgbz1cIlwiO2lmKHRoaXMuX3RvYXN0RWw9dGhpcy5fdG9hc3RFbHx8dChcIjxkaXY+PC9kaXY+XCIse1wiY2xhc3NcIjpcImpxLXRvYXN0LXNpbmdsZVwifSksbys9JzxzcGFuIGNsYXNzPVwianEtdG9hc3QtbG9hZGVyXCI+PC9zcGFuPicsdGhpcy5vcHRpb25zLmFsbG93VG9hc3RDbG9zZSYmKG8rPSc8c3BhbiBjbGFzcz1cImNsb3NlLWpxLXRvYXN0LXNpbmdsZVwiPiZ0aW1lczs8L3NwYW4+JyksdGhpcy5vcHRpb25zLnRleHQgaW5zdGFuY2VvZiBBcnJheSl7dGhpcy5vcHRpb25zLmhlYWRpbmcmJihvKz0nPGgyIGNsYXNzPVwianEtdG9hc3QtaGVhZGluZ1wiPicrdGhpcy5vcHRpb25zLmhlYWRpbmcrXCI8L2gyPlwiKSxvKz0nPHVsIGNsYXNzPVwianEtdG9hc3QtdWxcIj4nO2Zvcih2YXIgaT0wO2k8dGhpcy5vcHRpb25zLnRleHQubGVuZ3RoO2krKylvKz0nPGxpIGNsYXNzPVwianEtdG9hc3QtbGlcIiBpZD1cImpxLXRvYXN0LWl0ZW0tJytpKydcIj4nK3RoaXMub3B0aW9ucy50ZXh0W2ldK1wiPC9saT5cIjtvKz1cIjwvdWw+XCJ9ZWxzZSB0aGlzLm9wdGlvbnMuaGVhZGluZyYmKG8rPSc8aDIgY2xhc3M9XCJqcS10b2FzdC1oZWFkaW5nXCI+Jyt0aGlzLm9wdGlvbnMuaGVhZGluZytcIjwvaDI+XCIpLG8rPXRoaXMub3B0aW9ucy50ZXh0O3RoaXMuX3RvYXN0RWwuaHRtbChvKSx0aGlzLm9wdGlvbnMuYmdDb2xvciE9PSExJiZ0aGlzLl90b2FzdEVsLmNzcyhcImJhY2tncm91bmQtY29sb3JcIix0aGlzLm9wdGlvbnMuYmdDb2xvciksdGhpcy5vcHRpb25zLnRleHRDb2xvciE9PSExJiZ0aGlzLl90b2FzdEVsLmNzcyhcImNvbG9yXCIsdGhpcy5vcHRpb25zLnRleHRDb2xvciksdGhpcy5vcHRpb25zLnRleHRBbGlnbiYmdGhpcy5fdG9hc3RFbC5jc3MoXCJ0ZXh0LWFsaWduXCIsdGhpcy5vcHRpb25zLnRleHRBbGlnbiksdGhpcy5vcHRpb25zLmljb24hPT0hMSYmKHRoaXMuX3RvYXN0RWwuYWRkQ2xhc3MoXCJqcS1oYXMtaWNvblwiKSwtMSE9PXQuaW5BcnJheSh0aGlzLm9wdGlvbnMuaWNvbix0aGlzLl9kZWZhdWx0SWNvbnMpJiZ0aGlzLl90b2FzdEVsLmFkZENsYXNzKFwianEtaWNvbi1cIit0aGlzLm9wdGlvbnMuaWNvbikpLHRoaXMub3B0aW9uc1tcImNsYXNzXCJdIT09ITEmJnRoaXMuX3RvYXN0RWwuYWRkQ2xhc3ModGhpcy5vcHRpb25zW1wiY2xhc3NcIl0pfSxwb3NpdGlvbjpmdW5jdGlvbigpe1wic3RyaW5nXCI9PXR5cGVvZiB0aGlzLm9wdGlvbnMucG9zaXRpb24mJi0xIT09dC5pbkFycmF5KHRoaXMub3B0aW9ucy5wb3NpdGlvbix0aGlzLl9wb3NpdGlvbkNsYXNzZXMpP1wiYm90dG9tLWNlbnRlclwiPT09dGhpcy5vcHRpb25zLnBvc2l0aW9uP3RoaXMuX2NvbnRhaW5lci5jc3Moe2xlZnQ6dChvKS5vdXRlcldpZHRoKCkvMi10aGlzLl9jb250YWluZXIub3V0ZXJXaWR0aCgpLzIsYm90dG9tOjIwfSk6XCJ0b3AtY2VudGVyXCI9PT10aGlzLm9wdGlvbnMucG9zaXRpb24/dGhpcy5fY29udGFpbmVyLmNzcyh7bGVmdDp0KG8pLm91dGVyV2lkdGgoKS8yLXRoaXMuX2NvbnRhaW5lci5vdXRlcldpZHRoKCkvMix0b3A6MjB9KTpcIm1pZC1jZW50ZXJcIj09PXRoaXMub3B0aW9ucy5wb3NpdGlvbj90aGlzLl9jb250YWluZXIuY3NzKHtsZWZ0OnQobykub3V0ZXJXaWR0aCgpLzItdGhpcy5fY29udGFpbmVyLm91dGVyV2lkdGgoKS8yLHRvcDp0KG8pLm91dGVySGVpZ2h0KCkvMi10aGlzLl9jb250YWluZXIub3V0ZXJIZWlnaHQoKS8yfSk6dGhpcy5fY29udGFpbmVyLmFkZENsYXNzKHRoaXMub3B0aW9ucy5wb3NpdGlvbik6XCJvYmplY3RcIj09dHlwZW9mIHRoaXMub3B0aW9ucy5wb3NpdGlvbj90aGlzLl9jb250YWluZXIuY3NzKHt0b3A6dGhpcy5vcHRpb25zLnBvc2l0aW9uLnRvcD90aGlzLm9wdGlvbnMucG9zaXRpb24udG9wOlwiYXV0b1wiLGJvdHRvbTp0aGlzLm9wdGlvbnMucG9zaXRpb24uYm90dG9tP3RoaXMub3B0aW9ucy5wb3NpdGlvbi5ib3R0b206XCJhdXRvXCIsbGVmdDp0aGlzLm9wdGlvbnMucG9zaXRpb24ubGVmdD90aGlzLm9wdGlvbnMucG9zaXRpb24ubGVmdDpcImF1dG9cIixyaWdodDp0aGlzLm9wdGlvbnMucG9zaXRpb24ucmlnaHQ/dGhpcy5vcHRpb25zLnBvc2l0aW9uLnJpZ2h0OlwiYXV0b1wifSk6dGhpcy5fY29udGFpbmVyLmFkZENsYXNzKFwiYm90dG9tLWxlZnRcIil9LGJpbmRUb2FzdDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fdG9hc3RFbC5vbihcImFmdGVyU2hvd25cIixmdW5jdGlvbigpe3QucHJvY2Vzc0xvYWRlcigpfSksdGhpcy5fdG9hc3RFbC5maW5kKFwiLmNsb3NlLWpxLXRvYXN0LXNpbmdsZVwiKS5vbihcImNsaWNrXCIsZnVuY3Rpb24obyl7by5wcmV2ZW50RGVmYXVsdCgpLFwiZmFkZVwiPT09dC5vcHRpb25zLnNob3dIaWRlVHJhbnNpdGlvbj8odC5fdG9hc3RFbC50cmlnZ2VyKFwiYmVmb3JlSGlkZVwiKSx0Ll90b2FzdEVsLmZhZGVPdXQoZnVuY3Rpb24oKXt0Ll90b2FzdEVsLnRyaWdnZXIoXCJhZnRlckhpZGRlblwiKX0pKTpcInNsaWRlXCI9PT10Lm9wdGlvbnMuc2hvd0hpZGVUcmFuc2l0aW9uPyh0Ll90b2FzdEVsLnRyaWdnZXIoXCJiZWZvcmVIaWRlXCIpLHQuX3RvYXN0RWwuc2xpZGVVcChmdW5jdGlvbigpe3QuX3RvYXN0RWwudHJpZ2dlcihcImFmdGVySGlkZGVuXCIpfSkpOih0Ll90b2FzdEVsLnRyaWdnZXIoXCJiZWZvcmVIaWRlXCIpLHQuX3RvYXN0RWwuaGlkZShmdW5jdGlvbigpe3QuX3RvYXN0RWwudHJpZ2dlcihcImFmdGVySGlkZGVuXCIpfSkpfSksXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5vcHRpb25zLmJlZm9yZVNob3cmJnRoaXMuX3RvYXN0RWwub24oXCJiZWZvcmVTaG93XCIsZnVuY3Rpb24oKXt0Lm9wdGlvbnMuYmVmb3JlU2hvdygpfSksXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5vcHRpb25zLmFmdGVyU2hvd24mJnRoaXMuX3RvYXN0RWwub24oXCJhZnRlclNob3duXCIsZnVuY3Rpb24oKXt0Lm9wdGlvbnMuYWZ0ZXJTaG93bigpfSksXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5vcHRpb25zLmJlZm9yZUhpZGUmJnRoaXMuX3RvYXN0RWwub24oXCJiZWZvcmVIaWRlXCIsZnVuY3Rpb24oKXt0Lm9wdGlvbnMuYmVmb3JlSGlkZSgpfSksXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5vcHRpb25zLmFmdGVySGlkZGVuJiZ0aGlzLl90b2FzdEVsLm9uKFwiYWZ0ZXJIaWRkZW5cIixmdW5jdGlvbigpe3Qub3B0aW9ucy5hZnRlckhpZGRlbigpfSl9LGFkZFRvRG9tOmZ1bmN0aW9uKCl7dmFyIG89dChcIi5qcS10b2FzdC13cmFwXCIpO2lmKDA9PT1vLmxlbmd0aD8obz10KFwiPGRpdj48L2Rpdj5cIix7XCJjbGFzc1wiOlwianEtdG9hc3Qtd3JhcFwifSksdChcImJvZHlcIikuYXBwZW5kKG8pKTooIXRoaXMub3B0aW9ucy5zdGFja3x8aXNOYU4ocGFyc2VJbnQodGhpcy5vcHRpb25zLnN0YWNrLDEwKSkpJiZvLmVtcHR5KCksby5maW5kKFwiLmpxLXRvYXN0LXNpbmdsZTpoaWRkZW5cIikucmVtb3ZlKCksby5hcHBlbmQodGhpcy5fdG9hc3RFbCksdGhpcy5vcHRpb25zLnN0YWNrJiYhaXNOYU4ocGFyc2VJbnQodGhpcy5vcHRpb25zLnN0YWNrKSwxMCkpe3ZhciBpPW8uZmluZChcIi5qcS10b2FzdC1zaW5nbGVcIikubGVuZ3RoLHM9aS10aGlzLm9wdGlvbnMuc3RhY2s7cz4wJiZ0KFwiLmpxLXRvYXN0LXdyYXBcIikuZmluZChcIi5qcS10b2FzdC1zaW5nbGVcIikuc2xpY2UoMCxzKS5yZW1vdmUoKX10aGlzLl9jb250YWluZXI9b30sY2FuQXV0b0hpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmhpZGVBZnRlciE9PSExJiYhaXNOYU4ocGFyc2VJbnQodGhpcy5vcHRpb25zLmhpZGVBZnRlciwxMCkpfSxwcm9jZXNzTG9hZGVyOmZ1bmN0aW9uKCl7aWYoIXRoaXMuY2FuQXV0b0hpZGUoKXx8dGhpcy5vcHRpb25zLmxvYWRlcj09PSExKXJldHVybiExO3ZhciB0PXRoaXMuX3RvYXN0RWwuZmluZChcIi5qcS10b2FzdC1sb2FkZXJcIiksbz0odGhpcy5vcHRpb25zLmhpZGVBZnRlci00MDApLzFlMytcInNcIixpPXRoaXMub3B0aW9ucy5sb2FkZXJCZyxzPXQuYXR0cihcInN0eWxlXCIpfHxcIlwiO3M9cy5zdWJzdHJpbmcoMCxzLmluZGV4T2YoXCItd2Via2l0LXRyYW5zaXRpb25cIikpLHMrPVwiLXdlYmtpdC10cmFuc2l0aW9uOiB3aWR0aCBcIitvK1wiIGVhc2UtaW47ICAgICAgICAgICAgICAgICAgICAgICAtby10cmFuc2l0aW9uOiB3aWR0aCBcIitvK1wiIGVhc2UtaW47ICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiB3aWR0aCBcIitvK1wiIGVhc2UtaW47ICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBcIitpK1wiO1wiLHQuYXR0cihcInN0eWxlXCIscykuYWRkQ2xhc3MoXCJqcS10b2FzdC1sb2FkZWRcIil9LGFuaW1hdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuX3RvYXN0RWwuaGlkZSgpLHRoaXMuX3RvYXN0RWwudHJpZ2dlcihcImJlZm9yZVNob3dcIiksXCJmYWRlXCI9PT10aGlzLm9wdGlvbnMuc2hvd0hpZGVUcmFuc2l0aW9uLnRvTG93ZXJDYXNlKCk/dGhpcy5fdG9hc3RFbC5mYWRlSW4oZnVuY3Rpb24oKXt0Ll90b2FzdEVsLnRyaWdnZXIoXCJhZnRlclNob3duXCIpfSk6XCJzbGlkZVwiPT09dGhpcy5vcHRpb25zLnNob3dIaWRlVHJhbnNpdGlvbi50b0xvd2VyQ2FzZSgpP3RoaXMuX3RvYXN0RWwuc2xpZGVEb3duKGZ1bmN0aW9uKCl7dC5fdG9hc3RFbC50cmlnZ2VyKFwiYWZ0ZXJTaG93blwiKX0pOnRoaXMuX3RvYXN0RWwuc2hvdyhmdW5jdGlvbigpe3QuX3RvYXN0RWwudHJpZ2dlcihcImFmdGVyU2hvd25cIil9KSx0aGlzLmNhbkF1dG9IaWRlKCkpe3ZhciB0PXRoaXM7by5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XCJmYWRlXCI9PT10Lm9wdGlvbnMuc2hvd0hpZGVUcmFuc2l0aW9uLnRvTG93ZXJDYXNlKCk/KHQuX3RvYXN0RWwudHJpZ2dlcihcImJlZm9yZUhpZGVcIiksdC5fdG9hc3RFbC5mYWRlT3V0KGZ1bmN0aW9uKCl7dC5fdG9hc3RFbC50cmlnZ2VyKFwiYWZ0ZXJIaWRkZW5cIil9KSk6XCJzbGlkZVwiPT09dC5vcHRpb25zLnNob3dIaWRlVHJhbnNpdGlvbi50b0xvd2VyQ2FzZSgpPyh0Ll90b2FzdEVsLnRyaWdnZXIoXCJiZWZvcmVIaWRlXCIpLHQuX3RvYXN0RWwuc2xpZGVVcChmdW5jdGlvbigpe3QuX3RvYXN0RWwudHJpZ2dlcihcImFmdGVySGlkZGVuXCIpfSkpOih0Ll90b2FzdEVsLnRyaWdnZXIoXCJiZWZvcmVIaWRlXCIpLHQuX3RvYXN0RWwuaGlkZShmdW5jdGlvbigpe3QuX3RvYXN0RWwudHJpZ2dlcihcImFmdGVySGlkZGVuXCIpfSkpfSx0aGlzLm9wdGlvbnMuaGlkZUFmdGVyKX19LHJlc2V0OmZ1bmN0aW9uKG8pe1wiYWxsXCI9PT1vP3QoXCIuanEtdG9hc3Qtd3JhcFwiKS5yZW1vdmUoKTp0aGlzLl90b2FzdEVsLnJlbW92ZSgpfSx1cGRhdGU6ZnVuY3Rpb24odCl7dGhpcy5wcmVwYXJlT3B0aW9ucyh0LHRoaXMub3B0aW9ucyksdGhpcy5zZXR1cCgpLHRoaXMuYmluZFRvYXN0KCl9fTt0LnRvYXN0PWZ1bmN0aW9uKHQpe3ZhciBvPU9iamVjdC5jcmVhdGUobik7cmV0dXJuIG8uaW5pdCh0LHRoaXMpLHtyZXNldDpmdW5jdGlvbih0KXtvLnJlc2V0KHQpfSx1cGRhdGU6ZnVuY3Rpb24odCl7by51cGRhdGUodCl9fX0sdC50b2FzdC5vcHRpb25zPXt0ZXh0OlwiXCIsaGVhZGluZzpcIlwiLHNob3dIaWRlVHJhbnNpdGlvbjpcImZhZGVcIixhbGxvd1RvYXN0Q2xvc2U6ITAsaGlkZUFmdGVyOjNlMyxsb2FkZXI6ITAsbG9hZGVyQmc6XCIjOUVDNjAwXCIsc3RhY2s6NSxwb3NpdGlvbjpcImJvdHRvbS1sZWZ0XCIsYmdDb2xvcjohMSx0ZXh0Q29sb3I6ITEsdGV4dEFsaWduOlwibGVmdFwiLGljb246ITEsYmVmb3JlU2hvdzpmdW5jdGlvbigpe30sYWZ0ZXJTaG93bjpmdW5jdGlvbigpe30sYmVmb3JlSGlkZTpmdW5jdGlvbigpe30sYWZ0ZXJIaWRkZW46ZnVuY3Rpb24oKXt9fX0oalF1ZXJ5LHdpbmRvdyxkb2N1bWVudCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5pbXBvcnQgcHJlc3Rhc2hvcCBmcm9tICdwcmVzdGFzaG9wJztcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgJ2pxdWVyeS10b2FzdC1wbHVnaW4nO1xuaW1wb3J0ICdqcXVlcnktdG9hc3QtcGx1Z2luL2Rpc3QvanF1ZXJ5LnRvYXN0Lm1pbi5jc3MnO1xuXG4kKCgpID0+IHtcbiAgcHJlc3Rhc2hvcC5ibG9ja2NhcnQgPSBwcmVzdGFzaG9wLmJsb2NrY2FydCB8fCB7fTtcbiAgY29uc3Qgc2hvd01vZGFsID0gcHJlc3Rhc2hvcC5ibG9ja2NhcnQuc2hvd01vZGFsXG4gICAgfHwgZnVuY3Rpb24gKG1vZGFsKSB7XG4gICAgICBjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcbiAgICAgICRib2R5LmFwcGVuZChtb2RhbCk7XG4gICAgICAkKCcjYmxvY2tjYXJ0LW1vZGFsJykubW9kYWwoKTtcbiAgICAgIGNvbnNvbGUubG9nKCdjYWxsZWQnKTtcbiAgICAgICRib2R5Lm9uZSgnY2xpY2snLCAnI2Jsb2NrY2FydC1tb2RhbCcsIChldmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmlkID09PSAnYmxvY2tjYXJ0LW1vZGFsJykge1xuICAgICAgICAgICQubW9kYWwuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgcHJlc3Rhc2hvcC5vbigndXBkYXRlQ2FydCcsIChldmVudCkgPT4ge1xuICAgIGNvbnN0IHJlZnJlc2hVUkwgPSAkKCcuYmxvY2tjYXJ0JykuZGF0YSgncmVmcmVzaC11cmwnKTtcbiAgICBsZXQgcmVxdWVzdERhdGEgPSB7fTtcblxuICAgIGlmIChcbiAgICAgIGV2ZW50XG4gICAgICAmJiBldmVudC5yZWFzb25cbiAgICAgICYmIHR5cGVvZiBldmVudC5yZXNwICE9PSAndW5kZWZpbmVkJ1xuICAgICAgJiYgIWV2ZW50LnJlc3AuaGFzRXJyb3JcbiAgICApIHtcbiAgICAgIHJlcXVlc3REYXRhID0ge1xuICAgICAgICBpZF9jdXN0b21pemF0aW9uOiBldmVudC5yZWFzb24uaWRDdXN0b21pemF0aW9uLFxuICAgICAgICBpZF9wcm9kdWN0X2F0dHJpYnV0ZTogZXZlbnQucmVhc29uLmlkUHJvZHVjdEF0dHJpYnV0ZSxcbiAgICAgICAgaWRfcHJvZHVjdDogZXZlbnQucmVhc29uLmlkUHJvZHVjdCxcbiAgICAgICAgYWN0aW9uOiBldmVudC5yZWFzb24ubGlua0FjdGlvbixcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChldmVudCAmJiBldmVudC5yZXNwICYmIGV2ZW50LnJlc3AuaGFzRXJyb3IpIHtcbiAgICAgIHByZXN0YXNob3AuZW1pdCgnc2hvd0Vycm9yTmV4dFRvQWRkdG9DYXJ0QnV0dG9uJywge1xuICAgICAgICBlcnJvck1lc3NhZ2U6IGV2ZW50LnJlc3AuZXJyb3JzLmpvaW4oJzxici8+JyksXG4gICAgICB9KTtcbiAgICB9XG4gICAgJC5wb3N0KHJlZnJlc2hVUkwsIHJlcXVlc3REYXRhKVxuICAgICAgLnRoZW4oKHJlc3ApID0+IHtcbiAgICAgICAgJCgnLmJsb2NrY2FydCcpLnJlcGxhY2VXaXRoKCQocmVzcC5wcmV2aWV3KS5maW5kKCcuYmxvY2tjYXJ0JykpO1xuICAgICAgICBpZiAocmVzcC5tb2RhbCkge1xuICAgICAgICAgICQudG9hc3Qoe1xuICAgICAgICAgICAgaGVhZGluZzogJ0FkZGVkIHRvIENhcnQnLFxuICAgICAgICAgICAgdGV4dDogJ1lvdSBjYW4gY2hlY2tvdXQgb3IgY29udGludWUgc2hvcHBpbmcuJyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgIHRvcDogJzEwMHB4JyxcbiAgICAgICAgICAgICAgcmlnaHQ6ICcyMHB4JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBiZ0NvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICB0ZXh0Q29sb3I6ICcjMTExODI3JyxcbiAgICAgICAgICAgIGxvYWRlckJnOiAnIzE3MjU1NCcsXG4gICAgICAgICAgICBjbGFzczogJ3JvdW5kZWQtbm9uZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5mYWlsKChyZXNwKSA9PiB7XG4gICAgICAgIHByZXN0YXNob3AuZW1pdCgnaGFuZGxlRXJyb3InLCB7XG4gICAgICAgICAgZXZlbnRUeXBlOiAndXBkYXRlU2hvcHBpbmdDYXJ0JyxcbiAgICAgICAgICByZXNwLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9KTtcbn0pO1xuIiwiLyoqXG4gKiBqUXVlcnkub2ZmY2FudmFzIHYzLjQuNyAtIEVhc3kgdG8gdXNlIGpRdWVyeSBvZmZjYW52YXMgcGx1Z2luLlxuICogQ29weXJpZ2h0IDIwMTYgTGFycyBHcmF1Ym5lciAtIGh0dHA6Ly9sZ3JhdWJuZXIuZ2l0aHViLmlvL2pxdWVyeS1vZmZjYW52YXMvXG4gKiBMaWNlbnNlOiBNSVRcbiAqL1xuIWZ1bmN0aW9uKHQsZSl7XCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZSYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKHQscyl7cmV0dXJuIHZvaWQgMD09PXMmJihzPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/cmVxdWlyZShcImpxdWVyeVwiKTpyZXF1aXJlKFwianF1ZXJ5XCIpKHQpKSxlKHMpLHN9OlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wianF1ZXJ5IFwiXSxlKTplKGpRdWVyeSl9KHRoaXMsZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZSh0LGUscyl7dmFyIGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dGhpcyxvPWFyZ3VtZW50cyxoPWZ1bmN0aW9uKCl7aT1udWxsLHN8fHQuYXBwbHkobixvKX0sYT1zJiYhaTtjbGVhclRpbWVvdXQoaSksaT1zZXRUaW1lb3V0KGgsZSksYSYmdC5hcHBseShuLG8pfX1mdW5jdGlvbiBzKGUscyl7dmFyIG4sbyxoPXQoZSkuZGF0YSgpO3RoaXMuJGVsPXQoZSk7Zm9yKG4gaW4gaCloLmhhc093blByb3BlcnR5KG4pJiYvXm9mZmNhbnZhc1tBLVpdKy8udGVzdChuKSYmKG89bltpLmxlbmd0aF0udG9Mb3dlckNhc2UoKStuLnN1YnN0cihpLmxlbmd0aCsxKSxoW29dPWhbbl0pO3RoaXMuc2V0dGluZ3M9dC5leHRlbmQoITAse30sdC5mbltpXS5kZWZhdWx0cyxzLGgpLHRoaXMubmFtZT1pLHRoaXMuJGVsLmRhdGEodGhpcy5uYW1lK1wiLm9wdHNcIix0aGlzLnNldHRpbmdzKSx0aGlzLmluaXQoKX12YXIgaT1cIm9mZmNhbnZhc1wiO3QuZXh0ZW5kKHMucHJvdG90eXBlLHtzZXRIZWlnaHRzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kb3V0ZXJXcmFwcGVyLmhlaWdodCgpO3RoaXMuJGVsLmRhdGEodGhpcy5uYW1lK1wiLm9wdHNcIikmJih0aGlzLiRlbGVtZW50LmNzcyhcImhlaWdodFwiLHQpLHRoaXMuc2V0dGluZ3Mub3ZlcmxheSYmdGhpcy4kb3ZlcmxheS5jc3MoXCJoZWlnaHRcIix0KSl9LHNob3c6ZnVuY3Rpb24oKXt2YXIgZT17fTt0aGlzLnZpc2libGV8fCh0aGlzLiRjb250LmFkZENsYXNzKHRoaXMuc2V0dGluZ3MuY2xhc3Nlcy5vcGVuKSx0aGlzLnZpc2libGU9ITAsdGhpcy4kZWwudHJpZ2dlcihcInNob3cuXCIrdGhpcy5uYW1lKSx0aGlzLiRlbC50cmlnZ2VyKFwidG9nZ2xlLlwiK3RoaXMubmFtZSx0aGlzLnZpc2libGUpLHRoaXMuc2V0SGVpZ2h0cygpLGVbdGhpcy5zZXR0aW5ncy5vcmlnaW5dPXRoaXMuZWZmZWN0c1t0aGlzLnNldHRpbmdzLmVmZmVjdF0udG8sdGhpcy5lZmZlY3RzW3RoaXMuc2V0dGluZ3MuZWZmZWN0XS4kZWwudmVsb2NpdHkoZSx0LmV4dGVuZCh7Y29tcGxldGU6ZnVuY3Rpb24oKXt0aGlzLiRlbC50cmlnZ2VyKFwic2hvd24uXCIrdGhpcy5uYW1lKSx0aGlzLnNldHRpbmdzLm92ZXJsYXkmJnRoaXMuJG92ZXJsYXkub25lKFwiY2xpY2suXCIrdGhpcy5uYW1lLGZ1bmN0aW9uKCl7dGhpcy5oaWRlKCl9LmJpbmQodGhpcykpfS5iaW5kKHRoaXMpfSx0aGlzLmFuaW1hdGlvbk9wdGlvbnMpKSx0aGlzLnNldHRpbmdzLm92ZXJsYXkmJnRoaXMuJG92ZXJsYXkudmVsb2NpdHkoe29wYWNpdHk6MX0sdC5leHRlbmQoe2Rpc3BsYXk6XCJibG9ja1wifSx0aGlzLmFuaW1hdGlvbk9wdGlvbnMpKSl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLnZpc2libGUmJih0aGlzLiRjb250LnJlbW92ZUNsYXNzKHRoaXMuc2V0dGluZ3MuY2xhc3Nlcy5vcGVuKSx0aGlzLnZpc2libGU9ITEsdGhpcy4kZWwudHJpZ2dlcihcImhpZGUuXCIrdGhpcy5uYW1lKSx0aGlzLiRlbC50cmlnZ2VyKFwidG9nZ2xlLlwiK3RoaXMubmFtZSx0aGlzLnZpc2libGUpLHRoaXMuZWZmZWN0c1t0aGlzLnNldHRpbmdzLmVmZmVjdF0uJGVsLnZlbG9jaXR5KFwic3RvcFwiKS52ZWxvY2l0eShcInJldmVyc2VcIix0LmV4dGVuZCh7Y29tcGxldGU6ZnVuY3Rpb24oKXt0aGlzLiRlbC50cmlnZ2VyKFwiaGlkZGVuLlwiK3RoaXMubmFtZSl9LmJpbmQodGhpcyl9LHRoaXMuYW5pbWF0aW9uT3B0aW9ucykpLHRoaXMuc2V0dGluZ3Mub3ZlcmxheSYmdGhpcy4kb3ZlcmxheS52ZWxvY2l0eShcInN0b3BcIikudmVsb2NpdHkoXCJyZXZlcnNlXCIsdC5leHRlbmQoe2Rpc3BsYXk6XCJub25lXCJ9LHRoaXMuYW5pbWF0aW9uT3B0aW9ucykpKX0sdG9nZ2xlOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMudmlzaWJsZT90aGlzLmhpZGU6dGhpcy5zaG93KS5jYWxsKHRoaXMpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy4kZWwuZGF0YSh0aGlzLm5hbWUrXCIub3B0c1wiKSYmKHRoaXMuJGlubmVyV3JhcHBlci51bndyYXAoKSx0aGlzLiRpbm5lcldyYXBwZXIuY2hpbGRyZW4oKS51bndyYXAoKSx0aGlzLiRjb250LnJlbW92ZUNsYXNzKHRoaXMuc2V0dGluZ3MuY2xhc3Nlcy5jb250YWluZXIpLnJlbW92ZUNsYXNzKHRoaXMuc2V0dGluZ3MuY2xhc3Nlcy5vcGVuKSx0aGlzLnNldHRpbmdzLm92ZXJsYXkmJnRoaXMuJG92ZXJsYXkub2ZmKFwiY2xpY2suXCIrdGhpcy5uYW1lKS5yZW1vdmUoKSx0aGlzLiRlbC51bndyYXAoKS5yZW1vdmVEYXRhKHRoaXMubmFtZStcIi5vcHRzXCIpLnJlbW92ZUF0dHIoXCJzdHlsZVwiKSx0aGlzLiR3aW4ub2ZmKFwicmVzaXplLlwiK3RoaXMubmFtZSkpfSxpbml0OmZ1bmN0aW9uKCl7dmFyIHM9e307dGhpcy4kd2luPXQod2luZG93KSx0aGlzLiRib2R5PXQoXCJib2R5XCIpLHRoaXMudmlzaWJsZT0hMSx0aGlzLiRjb250PXQodGhpcy5zZXR0aW5ncy5jb250YWluZXIpLHRoaXMuJGNvbnQuYWRkQ2xhc3ModGhpcy5zZXR0aW5ncy5jbGFzc2VzLmNvbnRhaW5lcikuY2hpbGRyZW4oXCI6bm90KHNjcmlwdClcIikud3JhcEFsbCh0KFwiPGRpdi8+XCIpLmFkZENsYXNzKHRoaXMuc2V0dGluZ3MuY2xhc3Nlcy5vdXRlcikpLHRoaXMuJG91dGVyV3JhcHBlcj10KFwiLlwiK3RoaXMuc2V0dGluZ3MuY2xhc3Nlcy5vdXRlcikud3JhcElubmVyKHQoXCI8ZGl2Lz5cIikuYWRkQ2xhc3ModGhpcy5zZXR0aW5ncy5jbGFzc2VzLmlubmVyKSksdGhpcy4kaW5uZXJXcmFwcGVyPXQoXCIuXCIrdGhpcy5zZXR0aW5ncy5jbGFzc2VzLmlubmVyKSx0aGlzLnNldHRpbmdzLm92ZXJsYXkmJih0aGlzLiRpbm5lcldyYXBwZXIuYXBwZW5kKHQoXCI8ZGl2Lz5cIikuYWRkQ2xhc3ModGhpcy5zZXR0aW5ncy5jbGFzc2VzLm92ZXJsYXkpLmNzcyhcImJhY2tncm91bmQtY29sb3JcIix0aGlzLnNldHRpbmdzLm92ZXJsYXlDb2xvcikpLHRoaXMuJG92ZXJsYXk9dChcIi5cIit0aGlzLnNldHRpbmdzLmNsYXNzZXMub3ZlcmxheSkpLHRoaXMuJGVsLndyYXAodChcIjxkaXYvPlwiKS5hZGRDbGFzcyh0aGlzLnNldHRpbmdzLmNsYXNzZXMuZWxlbWVudCkpLHRoaXMuJGVsZW1lbnQ9dGhpcy4kZWwucGFyZW50KCksc1t0aGlzLnNldHRpbmdzLm9yaWdpbl09XCItXCIrdGhpcy5zZXR0aW5ncy5jb3ZlcmFnZSxzLndpZHRoPXRoaXMuc2V0dGluZ3MuY292ZXJhZ2UsdGhpcy4kZWxlbWVudC5jc3MocyksdGhpcy5lZmZlY3RzPXtwdXNoOnskZWw6dGhpcy4kaW5uZXJXcmFwcGVyLGZyb206MCx0bzp0aGlzLnNldHRpbmdzLmNvdmVyYWdlfSxcInNsaWRlLWluLW92ZXJcIjp7JGVsOnRoaXMuJGVsZW1lbnQsZnJvbTpcIi1cIit0aGlzLnNldHRpbmdzLmNvdmVyYWdlLHRvOjB9fSx0aGlzLmFuaW1hdGlvbk9wdGlvbnM9e2Vhc2luZzp0aGlzLnNldHRpbmdzLmVhc2luZyxkdXJhdGlvbjp0aGlzLnNldHRpbmdzLmR1cmF0aW9ufSx0aGlzLiR3aW4ub24oXCJyZXNpemUuXCIrdGhpcy5uYW1lLGUodGhpcy5zZXRIZWlnaHRzLDMwMCkuYmluZCh0aGlzKSksdGhpcy5zZXRIZWlnaHRzKCksdGhpcy4kZWwudHJpZ2dlcihcImluaXQuXCIrdGhpcy5uYW1lKX19KSx0LmZuW2ldPWZ1bmN0aW9uKGUpe3ZhciBuLG89YXJndW1lbnRzO3JldHVybiB2b2lkIDA9PT1lfHxcIm9iamVjdFwiPT10eXBlb2YgZT90aGlzLmVhY2goZnVuY3Rpb24oKXt0LmRhdGEodGhpcyxcInBsdWdpbl9cIitpKXx8dC5kYXRhKHRoaXMsXCJwbHVnaW5fXCIraSxuZXcgcyh0aGlzLGUpKX0pOlwic3RyaW5nXCI9PXR5cGVvZiBlJiZcIl9cIiE9PWVbMF0mJlwiaW5pdFwiIT09ZSYmKHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBoPXQuZGF0YSh0aGlzLFwicGx1Z2luX1wiK2kpO2ggaW5zdGFuY2VvZiBzJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBoW2VdJiYobj1oW2VdLmFwcGx5KGgsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobywxKSkpLFwiZGVzdHJveVwiPT09ZSYmdC5kYXRhKHRoaXMsXCJwbHVnaW5fXCIraSxudWxsKX0pLHZvaWQgMCE9PW4/bjp0aGlzKX0sdC5mbltpXS5kZWZhdWx0cz17Y2xhc3Nlczp7Y29udGFpbmVyOmksZWxlbWVudDppK1wiLWVsZW1lbnRcIixpbm5lcjppK1wiLWlubmVyXCIsb3BlbjppK1wiLW9wZW5cIixvdXRlcjppK1wiLW91dGVyXCIsb3ZlcmxheTppK1wiLW92ZXJsYXlcIn0sY29udGFpbmVyOlwiYm9keVwiLGNvdmVyYWdlOlwiMjIwcHhcIixvcmlnaW46XCJsZWZ0XCIsZHVyYXRpb246MzAwLGVhc2luZzpcImVhc2UtaW4tb3V0XCIsZWZmZWN0OlwicHVzaFwiLG92ZXJsYXk6ITEsb3ZlcmxheUNvbG9yOlwicmdiYSgwLCAwLCAwLCAwLjcpXCJ9fSk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gaW1wb3J0ICdib290c3RyYXAvZGlzdC9qcy9ib290c3RyYXAubWluJztcbmltcG9ydCBcImpxdWVyeS1tb2RhbFwiO1xuLy8gaW1wb3J0IFwianF1ZXJ5LW9mZmNhbnZhcy9kaXN0L2pxdWVyeS5vZmZjYW52YXMubWluLmNzc1wiO1xuaW1wb3J0IFwidG9vbHRpcHN0ZXJcIjtcbmltcG9ydCBcInRvb2x0aXBzdGVyL2Rpc3QvY3NzL3Rvb2x0aXBzdGVyLmJ1bmRsZS5taW4uY3NzXCI7XG5pbXBvcnQgXCJ0b29sdGlwc3Rlci9kaXN0L2Nzcy9wbHVnaW5zL3Rvb2x0aXBzdGVyL3NpZGVUaXAvdGhlbWVzL3Rvb2x0aXBzdGVyLXNpZGVUaXAtc2hhZG93Lm1pbi5jc3NcIjtcbmltcG9ydCB0b3VjaHNwaW4gZnJvbSBcImJvb3RzdHJhcC10b3VjaHNwaW5cIjtcbmltcG9ydCBcImpxdWVyeS10b3VjaHN3aXBlXCI7XG5pbXBvcnQgXCIuL3NlbGVjdG9yc1wiO1xuaW1wb3J0IFwiLi90YWJzLmpzXCI7XG5pbXBvcnQgXCIuL2Vhc3l6b29tXCI7XG5cbmltcG9ydCBcIi4vcmVzcG9uc2l2ZVwiO1xuaW1wb3J0IFwiLi9jaGVja291dFwiO1xuaW1wb3J0IFwiLi9jdXN0b21lclwiO1xuaW1wb3J0IFwiLi9saXN0aW5nXCI7XG5pbXBvcnQgXCIuL3Byb2R1Y3RcIjtcbmltcG9ydCBcIi4vY2FydFwiO1xuaW1wb3J0IFwiLi9mYWNldHNcIjtcblxuaW1wb3J0IHByZXN0YXNob3AgZnJvbSBcInByZXN0YXNob3BcIjtcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IERyb3BEb3duIGZyb20gXCIuL2NvbXBvbmVudHMvZHJvcC1kb3duXCI7XG5pbXBvcnQgRm9ybSBmcm9tIFwiLi9jb21wb25lbnRzL2Zvcm1cIjtcbmltcG9ydCB1c2VQYXNzd29yZFBvbGljeSBmcm9tIFwiLi9jb21wb25lbnRzL3VzZVBhc3N3b3JkUG9saWN5XCI7XG5pbXBvcnQgUHJvZHVjdE1pbml0YXR1cmUgZnJvbSBcIi4vY29tcG9uZW50cy9wcm9kdWN0LW1pbmlhdHVyZVwiO1xuaW1wb3J0IFByb2R1Y3RTZWxlY3QgZnJvbSBcIi4vY29tcG9uZW50cy9wcm9kdWN0LXNlbGVjdFwiO1xuaW1wb3J0IFRvcE1lbnUgZnJvbSBcIi4vY29tcG9uZW50cy90b3AtbWVudVwiO1xuXG5pbXBvcnQgXCIuL2NvbXBvbmVudHMvYmxvY2stY2FydFwiO1xuaW1wb3J0ICQgZnJvbSBcImpxdWVyeVwiO1xuaW1wb3J0IGpvIGZyb20gXCJqcXVlcnktb2ZmY2FudmFzXCI7XG5qbyh3aW5kb3csICQpO1xudG91Y2hzcGluKHdpbmRvdywgJCk7XG4vKiBlc2xpbnQtZW5hYmxlICovXG5cbi8vIFwiaW5oZXJpdFwiIEV2ZW50RW1pdHRlclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5mb3IgKGNvbnN0IGkgaW4gRXZlbnRFbWl0dGVyLnByb3RvdHlwZSkge1xuICBwcmVzdGFzaG9wW2ldID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZVtpXTtcbn1cblxuJCgoKSA9PiB7XG4gIGNvbnN0IGRyb3BEb3duRWwgPSAkKCcuanMtZHJvcGRvd24nKTtcbiAgY29uc3QgZm9ybSA9IG5ldyBGb3JtKCk7XG4gIGNvbnN0IHRvcE1lbnVFbCA9ICQoJy5qcy10b3AtbWVudSB1bFtkYXRhLWRlcHRoPVwiMFwiXScpO1xuICBjb25zdCBkcm9wRG93biA9IG5ldyBEcm9wRG93bihkcm9wRG93bkVsKTtcbiAgY29uc3QgdG9wTWVudSA9IG5ldyBUb3BNZW51KHRvcE1lbnVFbCk7XG4gIGNvbnN0IHByb2R1Y3RNaW5pdGF0dXJlID0gbmV3IFByb2R1Y3RNaW5pdGF0dXJlKCk7XG4gIGNvbnN0IHByb2R1Y3RTZWxlY3QgPSBuZXcgUHJvZHVjdFNlbGVjdCgpO1xuICBkcm9wRG93bi5pbml0KCk7XG4gIGZvcm0uaW5pdCgpO1xuICB0b3BNZW51LmluaXQoKTtcbiAgcHJvZHVjdE1pbml0YXR1cmUuaW5pdCgpO1xuICBwcm9kdWN0U2VsZWN0LmluaXQoKTtcbiAgdXNlUGFzc3dvcmRQb2xpY3koJy5maWVsZC1wYXNzd29yZC1wb2xpY3knKTtcblxuICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkge1xuICAgIGlmICgkKCcuYWRkLXRvLWNhcnQnKS5pcygnOmRpc2FibGVkJykpIHtcbiAgICAgICQoJy5hZGQtdG8tY2FydCcpLmNzcyh7XG4gICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJ2dyZXknLCAgXG4gICAgICAgICdjb2xvcic6ICd3aGl0ZScsICAgICAgICAgICAgIFxuICAgICAgICAnY3Vyc29yJzogJ25vdC1hbGxvd2VkJyAgICAgICAgXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1x0XG5cbiAgJCgnLmVhc3l6b29tJykuZWFzeVpvb20oe1xuICB9KTtcblxuICAkKCcuY2Fyb3VzZWxbZGF0YS10b3VjaD1cInRydWVcIl0nKS5zd2lwZSh7XG4gICAgc3dpcGUoZXZlbnQsIGRpcmVjdGlvbikge1xuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICQodGhpcykuY2Fyb3VzZWwoJ25leHQnKTtcbiAgICAgIH1cbiAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgJCh0aGlzKS5jYXJvdXNlbCgncHJldicpO1xuICAgICAgfVxuICAgIH0sXG4gICAgYWxsb3dQYWdlU2Nyb2xsOiAndmVydGljYWwnLFxuICB9KTtcblxuICAkKCcjcHJvZHVjdC1saXN0LXRvcC1maWx0ZXJzJykub2ZmY2FudmFzKHtcbiAgICBkdXJhdGlvbjogMTAwLFxuICAgIGVmZmVjdDogJ3NsaWRlLWluLW92ZXInLFxuICAgIGNsYXNzZXM6IHtcbiAgICAgIGVsZW1lbnQ6ICdhYnNvbHV0ZSB0b3AtMCB6LTUwJyxcbiAgICB9LFxuICB9KTtcblxuICAkKCcjc2hvdy1maWx0ZXJzJykub24oJ2NsaWNrLm9mZmNhbnZhcycsICgpID0+IHtcbiAgICAkKCcjb3ZlcmxheScpLnNob3coKTsgIFxuICAgICQoJyNwcm9kdWN0LWxpc3QtdG9wLWZpbHRlcnMnKS5zaG93KCk7ICBcbiAgfSk7XG4gIFxuICAkKCcjaGlkZS1maWx0ZXJzJykub24oJ2NsaWNrLm9mZmNhbnZhcycsICgpID0+IHtcbiAgICAkKCcjcHJvZHVjdC1saXN0LXRvcC1maWx0ZXJzJykuaGlkZSgpOyBcbiAgICAkKCcjb3ZlcmxheScpLmhpZGUoKTtcbiAgfSk7XG4gIFxuICAkKCcjb3ZlcmxheScpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICQoJyNwcm9kdWN0LWxpc3QtdG9wLWZpbHRlcnMnKS5oaWRlKCk7ICBcbiAgICAkKCcjb3ZlcmxheScpLmhpZGUoKTsgIFxuICB9KTtcblxuICBmdW5jdGlvbiBUaEFjY29yZGlvbigpIHt9XG5cbiAgJC5leHRlbmQoVGhBY2NvcmRpb24ucHJvdG90eXBlLCB7XG4gICAgaW5pdCgpIHt9LFxuICB9KTtcblxuICAkLmZuLnRoYWNjb3JkaW9uID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNlbGVjdG9ycyA9IHtcbiAgICAgIHJvb3Q6ICcudGgtYWNjb3JkaW9uJyxcbiAgICAgIGl0ZW06ICcudGgtYWNjb3JkaW9uLWl0ZW0nLFxuICAgICAgdHJpZ2dlcjogJy50aC1hY2NvcmRpb24taXRlbS10cmlnZ2VyJyxcbiAgICAgIHN2ZzogJy50aC1hY2NvcmRpb24taXRlbS10cmlnZ2VyLXN2ZycsXG4gICAgICBjb250ZW50OiAnLnRoLWFjY29yZGlvbi1pdGVtLWNvbnRlbnQnLFxuICAgIH07XG4gICAgbGV0IHNlbGVjdGlvbiA9IG51bGw7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmZpbmQoc2VsZWN0b3JzLml0ZW0pO1xuICAgIGNvbnN0IHJvdGF0ZUNsYXNzID0gJ3JvdGF0ZS05MCBkdXJhdGlvbi01MDAnO1xuXG4gICAgZnVuY3Rpb24gY29sbGFwc2VBbGwoKSB7XG4gICAgICBpdGVtcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJCh0aGlzKS5maW5kKHNlbGVjdG9ycy5jb250ZW50KS5oaWRlKDUwMCk7XG4gICAgICAgICQodGhpcykuZmluZChzZWxlY3RvcnMuc3ZnKS5yZW1vdmVDbGFzcyhyb3RhdGVDbGFzcyk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICAkKHNlbGVjdGlvbikuZmluZChzZWxlY3RvcnMuY29udGVudCkuaGlkZSg1MDApO1xuICAgICAgJChzZWxlY3Rpb24pLmZpbmQoc2VsZWN0b3JzLnN2ZykucmVtb3ZlQ2xhc3MoJ3JvdGF0ZS05MCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9wZW4oKSB7XG4gICAgICBjb2xsYXBzZUFsbCgpO1xuICAgICAgJChzZWxlY3Rpb24pLmZpbmQoc2VsZWN0b3JzLmNvbnRlbnQpLnNob3coNTAwKTtcbiAgICAgICQoc2VsZWN0aW9uKS5maW5kKHNlbGVjdG9ycy5zdmcpLmFkZENsYXNzKHJvdGF0ZUNsYXNzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc09wZW4oaXRlbSkge1xuICAgICAgcmV0dXJuICQoaXRlbSkuZmluZChzZWxlY3RvcnMuY29udGVudCkuaXMoJzp2aXNpYmxlJyk7XG4gICAgfVxuXG4gICAgY29sbGFwc2VBbGwoKTtcblxuICAgIGl0ZW1zLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAkKHRoaXMpXG4gICAgICAgIC5maW5kKHNlbGVjdG9ycy50cmlnZ2VyKVxuICAgICAgICAub24oJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgIGlmIChzZWxlY3Rpb24gPT09IHNlbGYpIHtcbiAgICAgICAgICAgIGlmIChpc09wZW4oc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICBjbG9zZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb3BlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxlY3Rpb24gPSBzZWxmO1xuICAgICAgICAgICAgaWYgKCFpc09wZW4oc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICBvcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICAkKCcudGgtYWNjb3JkaW9uJykudGhhY2NvcmRpb24oKTtcbiAgJCgnLnRvb2x0aXAnKS50b29sdGlwc3Rlcih7XG4gICAgdGhlbWU6ICd0b29sdGlwc3Rlci1zaGFkb3cnLFxuICAgIHRyaWdnZXJPcGVuOiB7XG4gICAgICBjbGljazogdHJ1ZSxcbiAgICAgIG1vdXNlZW50ZXI6IHRydWUsXG4gICAgICB0b3VjaHN0YXJ0OiB0cnVlLFxuICAgIH0sXG4gICAgZGVsYXlUb3VjaDogWzAsIDIwMDBdLFxuICB9KTtcblxuICAkKCcudG9nZ2xlLW1haW4tbWVudScpLm9uKCdjbGljaycsICgpID0+IHtcbiAgICAkKCcubW9iaWxlLW1haW4tbWVudScpLnRvZ2dsZSgpO1xuICB9KTtcblx0XG59KTtcblxuIl0sIm5hbWVzIjpbInJlcXVpcmUkJDAiLCIkIiwid2luZG93IiwiZG9jdW1lbnQiLCJ1bmRlZmluZWQiLCJtb2R1bGUiLCJ0aGlzIiwiYSIsImIiLCJjIiwiZCIsImUiLCJnIiwiaSIsImYiLCJqIiwiayIsImgiLCJsIiwibSIsIm4iLCJvIiwicCIsIm9iaiIsImpRdWVyeSIsInZhbHVlIiwicGhhc2UiLCJkaXJlY3Rpb24iLCJkaXN0YW5jZSIsInByZXN0YXNob3AiLCJzZWxmIiwiZWxlbSIsIm9mZnNldFBhcmVudCIsImdsb2JhbCIsIiQyIiwiZWxlbWVudCIsInByb3BlcnR5Iiwib3B0cyIsImNhbGxJbmRleCIsImRlbGF5Q29tcGxldGUiLCJ2YWx1ZURhdGEiLCJlbmRWYWx1ZSIsImVhc2luZyIsInN0YXJ0VmFsdWUiLCJ0d2VlbkRlbHRhIiwiUmVmbGVjdEFwcGx5IiwiUmVmbGVjdE93bktleXMiLCJOdW1iZXJJc05hTiIsImV2ZW50c01vZHVsZSIsImV2ZW50cyIsIm9uY2UiLCJzcHJpbnRmIiwicyIsInQiLCJFdmVudEVtaXR0ZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFLQSxLQUFDLFNBQVUsU0FBUztBQUdtRDtBQUNuRSxnQkFBUUEsS0FBbUIsUUFBUSxRQUFRO0FBQUEsTUFJNUM7QUFBQSxJQUNGLEdBQUMsU0FBU0MsSUFBR0MsU0FBUUMsV0FBVUMsYUFBVztBQUV6QyxVQUFJLFNBQVMsQ0FBRSxHQUNYLGFBQWEsV0FBVztBQUN0QixlQUFPLE9BQU8sU0FBUyxPQUFPLE9BQU8sU0FBUyxDQUFDLElBQUk7QUFBQSxNQUNwRCxHQUNELGdCQUFnQixXQUFXO0FBQ3pCLFlBQUksR0FDQSxXQUFXO0FBQ2YsYUFBSyxJQUFFLE9BQU8sU0FBTyxHQUFHLEtBQUcsR0FBRyxLQUFLO0FBQ2pDLGNBQUksT0FBTyxDQUFDLEVBQUUsVUFBVTtBQUN0QixtQkFBTyxDQUFDLEVBQUUsU0FBUyxZQUFZLFdBQVUsQ0FBQyxRQUFRLEVBQUUsWUFBWSxVQUFTLFFBQVE7QUFDakYsdUJBQVc7QUFBQSxVQUNaO0FBQUEsUUFDRjtBQUFBLE1BQ1Q7QUFFRSxNQUFBSCxHQUFFLFFBQVEsU0FBUyxJQUFJLFNBQVM7QUFDOUIsWUFBSSxRQUFRO0FBQ1osYUFBSyxRQUFRQSxH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QUFFLEtBQUk7QUFBUyxvQkFBSSxJQUFFLEVBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRSxDQUFDLEdBQUUsSUFBRSxFQUFFLENBQUMsR0FBRSxJQUFFLElBQUUsR0FBRSxJQUFFLElBQUU7QUFBRSxnQkFBQVMsR0FBRSxPQUFPLEtBQUssU0FBTyxJQUFFLEdBQUVBLEdBQUUsT0FBTyxLQUFLLFFBQU1BLEdBQUUsT0FBTyxLQUFLLFFBQU9BLEdBQUUsT0FBTyxhQUFhLFFBQU0sR0FBRUEsR0FBRSxPQUFPLGFBQWEsT0FBSztBQUFFO0FBQUEsY0FBTSxLQUFJO0FBQU8sb0JBQUksSUFBRSxFQUFFLENBQUMsR0FBRSxJQUFFLEVBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRSxDQUFDLEdBQUUsSUFBRSxFQUFFLENBQUM7QUFBRSxnQkFBQUEsR0FBRSxPQUFPLEtBQUssU0FBTyxJQUFFLEdBQUVBLEdBQUUsT0FBTyxLQUFLLFFBQU0sSUFBRSxHQUFFQSxHQUFFLE9BQU8sYUFBYSxRQUFNLEdBQUVBLEdBQUUsT0FBTyxhQUFhLE9BQUs7QUFBRTtBQUFBLGNBQU0sS0FBSTtBQUFPLHlCQUFRLElBQUUsR0FBRSxJQUFFLEdBQUUsSUFBRSxHQUFFLElBQUUsR0FBRSxJQUFFLFFBQU8sSUFBRSxHQUFFLElBQUUsRUFBRSxRQUFPLEtBQUk7QUFBQyxzQkFBSSxJQUFFLEVBQUUsQ0FBQztBQUFFLDRCQUFRLEtBQUcsSUFBRSxNQUFJLElBQUUsR0FBRSxNQUFJLE1BQUksSUFBRSxLQUFJLElBQUUsTUFBSSxJQUFFLElBQUcsSUFBRSxVQUFRLElBQUUsTUFBSSxJQUFFLEdBQUUsS0FBRyxNQUFJLElBQUUsS0FBSSxJQUFFLE1BQUksSUFBRSxJQUFHLElBQUU7QUFBQSxnQkFBTztBQUFDLGdCQUFBQSxHQUFFLE9BQU8sS0FBSyxTQUFPLElBQUUsR0FBRUEsR0FBRSxPQUFPLEtBQUssUUFBTSxJQUFFLEdBQUVBLEdBQUUsT0FBTyxhQUFhLFFBQU0sR0FBRUEsR0FBRSxPQUFPLGFBQWEsT0FBSztBQUFBLFlBQUM7QUFBQSxRQUFDO0FBQUMsWUFBSSxJQUFFLFNBQVNULElBQUU7QUFBQyxVQUFBUyxHQUFFLE9BQU8sS0FBSyxTQUFPVCxHQUFFLFFBQU9TLEdBQUUsT0FBTyxhQUFhLE9BQUtULEdBQUUsTUFBS1MsR0FBRSxPQUFPLGFBQWEsTUFBSVQsR0FBRSxLQUFJUyxHQUFFLE9BQU8sS0FBSyxRQUFNVCxHQUFFO0FBQUEsUUFBSztBQUFFLGFBQUlDLEdBQUUsU0FBUyxFQUFDLE1BQUssWUFBVyxNQUFLLEdBQUUsVUFBUyxFQUFDLFFBQU9RLEdBQUUsT0FBTyxLQUFLLFFBQU8sTUFBS0EsR0FBRSxPQUFPLGFBQWEsTUFBSyxLQUFJQSxHQUFFLE9BQU8sYUFBYSxLQUFJLE9BQU1BLEdBQUUsT0FBTyxLQUFLLE1BQUssRUFBQyxDQUFDLEdBQUVBLEdBQUUsT0FBTyxhQUFhLFFBQU1BLEdBQUUsT0FBTyxhQUFhLE9BQUtBLEdBQUUsT0FBTyxLQUFLLE9BQU1BLEdBQUUsT0FBTyxhQUFhLFNBQU9BLEdBQUUsT0FBTyxhQUFhLE1BQUlBLEdBQUUsT0FBTyxLQUFLLFFBQU9BLEdBQUUsT0FBTyxPQUFPLE9BQUtBLEdBQUUsT0FBTyxhQUFhLE9BQUtBLEdBQUUsT0FBTyxPQUFPLE1BQUtBLEdBQUUsT0FBTyxPQUFPLE1BQUlBLEdBQUUsT0FBTyxhQUFhLE1BQUlBLEdBQUUsT0FBTyxPQUFPLEtBQUlBLEdBQUUsT0FBTyxPQUFPLFNBQU9BLEdBQUUsT0FBTyxPQUFPLE1BQUlBLEdBQUUsT0FBTyxLQUFLLFFBQU9BLEdBQUUsT0FBTyxPQUFPLFFBQU1BLEdBQUUsT0FBTyxPQUFPLE9BQUtBLEdBQUUsT0FBTyxLQUFLLE9BQU1BLEdBQUUsVUFBVSxXQUFTLEVBQUMsUUFBTyxFQUFDLFFBQU9BLEdBQUUsU0FBUyxLQUFLLFNBQU9BLEdBQUUsT0FBTyxPQUFPLFFBQU8sT0FBTUEsR0FBRSxTQUFTLEtBQUssTUFBSyxHQUFFLE1BQUssRUFBQyxRQUFPQSxHQUFFLFNBQVMsS0FBSyxRQUFPLE9BQU1BLEdBQUUsT0FBTyxPQUFPLEtBQUksR0FBRSxP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LEdBQUUsSUFBSSxPQUFPLGFBQWEsT0FBS0EsR0FBRSxJQUFJLE9BQU8sS0FBSyxRQUFNLENBQUMsR0FBRUMsR0FBRSxTQUFPQSxHQUFFLEtBQUlBLEdBQUUsT0FBSyxLQUFLLE1BQU1ELEdBQUUsSUFBSSxPQUFPLGFBQWEsTUFBSUEsR0FBRSxJQUFJLE9BQU8sS0FBSyxTQUFPLENBQUMsR0FBRUMsR0FBRSxRQUFNQSxHQUFFO0FBQUEsYUFBUztBQUFDLGNBQUlHLEtBQUVGLEdBQUUsQ0FBQztBQUFFLFVBQUFELEdBQUUsTUFBSSxLQUFLLE1BQU1HLEdBQUUsUUFBTUEsR0FBRSxRQUFNQSxHQUFFLFFBQU0sQ0FBQyxHQUFFQSxLQUFFRixHQUFFLFNBQU8sSUFBRUEsR0FBRSxLQUFLLEtBQUtBLEdBQUUsU0FBTyxDQUFDLElBQUUsQ0FBQyxJQUFFQSxHQUFFLENBQUMsR0FBRUQsR0FBRSxRQUFNLEtBQUssTUFBTUcsR0FBRSxPQUFLQSxHQUFFLFNBQU9BLEdBQUUsT0FBSyxDQUFDLEdBQUVBLEtBQUVGLEdBQUVBLEdBQUUsU0FBTyxDQUFDLEdBQUVELEdBQUUsU0FBTyxLQUFLLE1BQU1HLEdBQUUsUUFBTUEsR0FBRSxRQUFNQSxHQUFFLFFBQU0sQ0FBQyxHQUFFQSxLQUFFRixHQUFFLFNBQU8sSUFBRUEsR0FBRSxLQUFLLE1BQU1BLEdBQUUsU0FBTyxLQUFHLENBQUMsSUFBRSxDQUFDLElBQUVBLEdBQUVBLEdBQUUsU0FBTyxDQUFDLEdBQUVELEdBQUUsT0FBSyxLQUFLLE1BQU1HLEdBQUUsT0FBS0EsR0FBRSxTQUFPQSxHQUFFLE9BQUssQ0FBQztBQUFBLFFBQUM7QUFBQyxlQUFPSDtBQUFBLE1BQUMsRUFBQyxFQUFDLENBQUMsR0FBRTtBQUFBLElBQUMsQ0FBQztBQUFBOzs7Ozs7QUNDanFQLGFBQVMsUUFBUSxLQUFLO0FBQUU7QUFBMkIsYUFBTyxVQUFVLGNBQWMsT0FBTyxVQUFVLFlBQVksT0FBTyxPQUFPLFdBQVcsU0FBVWUsTUFBSztBQUFFLGVBQU8sT0FBT0E7QUFBQSxVQUFTLFNBQVVBLE1B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QUNSLFNBQVM7QUFBQSxjQUNULFNBQVM7QUFBQSxjQUNULFVBQVU7QUFBQSxjQUNWLFNBQVM7QUFBQSxjQUNULGtCQUFrQjtBQUFBLGNBQ2xCLGNBQWM7QUFBQSxjQUNkLFFBQVE7QUFBQSxjQUNSLFNBQVM7QUFBQSxjQUNULGFBQWE7QUFBQSxjQUNiLGFBQWE7QUFBQSxjQUNiLGNBQWM7QUFBQSxjQUNkLGFBQWE7QUFBQSxjQUNiLFNBQVM7QUFBQSxjQUNULGtCQUFrQjtBQUFBLGNBQ2xCLFlBQVk7QUFBQSxjQUNaLFdBQVc7QUFBQSxjQUNYLFFBQVE7QUFBQSxjQUNSLFlBQVk7QUFBQSxjQUNaLFlBQVk7QUFBQSxjQUNaLGlCQUFpQjtBQUFBLGNBQ2pCLFlBQVk7QUFBQSxjQUNaLFlBQVk7QUFBQSxjQUNaLGFBQWE7QUFBQSxjQUNiLGFBQWE7QUFBQSxjQUNiLGVBQWU7QUFBQSxjQUNmLGtCQUFrQjtBQUFBLGNBQ2xCLGNBQWM7QUFBQSxjQUNkLGNBQWM7QUFBQSxjQUNkLFdBQVc7QUFBQSxjQUNYLGNBQWM7QUFBQSxjQUNkLGdCQUFnQjtBQUFBLGNBQ2hCLGlCQUFpQjtBQUFBLGNBQ2pCLGlCQUFpQjtBQUFBLGNBQ2pCLGlCQUFpQjtBQUFBLGNBQ2pCLGNBQWM7QUFBQSxjQUNkLFlBQVk7QUFBQSxjQUNaLGVBQWU7QUFBQSxjQUNmLFdBQVc7QUFBQSxjQUNYLFdBQVc7QUFBQSxjQUNYLGNBQWM7QUFBQSxjQUNkLGFBQWE7QUFBQSxjQUNiLGVBQWU7QUFBQSxjQUNmLGVBQWU7QUFBQSxjQUNmLFdBQVc7QUFBQSxjQUNYLGFBQWE7QUFBQSxjQUNiLGNBQWM7QUFBQSxjQUNkLFFBQVE7QUFBQSxjQUNSLGFBQWE7QUFBQSxjQUNiLFFBQVE7QUFBQSxjQUNSLFFBQVE7QUFBQSxjQUNSLGVBQWU7QUFBQSxjQUNmLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxjQUNaLFdBQVc7QUFBQSxjQUNYLGFBQWE7QUFBQSxjQUNiLFVBQVU7QUFBQSxjQUNWLFNBQVM7QUFBQSxjQUNULFNBQVM7QUFBQSxjQUNULGlCQUFpQjtBQUFBLGNBQ2pCLFlBQVk7QUFBQSxjQUNaLGFBQWE7QUFBQSxjQUNiLGdCQUFnQjtBQUFBLGNBQ2hCLGFBQWE7QUFBQSxjQUNiLGNBQWM7QUFBQSxjQUNkLGFBQWE7QUFBQSxjQUNiLHdCQUF3QjtBQUFBLGNBQ3hCLGFBQWE7QUFBQSxjQUNiLGFBQWE7QUFBQSxjQUNiLGNBQWM7QUFBQSxjQUNkLGFBQWE7QUFBQSxjQUNiLGVBQWU7QUFBQSxjQUNmLGlCQUFpQjtBQUFBLGNBQ2pCLGdCQUFnQjtBQUFBLGNBQ2hCLGtCQUFrQjtBQUFBLGNBQ2xCLGtCQUFrQjtBQUFBLGNBQ2xCLGVBQWU7QUFBQSxjQUNmLGFBQWE7QUFBQSxjQUNiLFFBQVE7QUFBQSxjQUNSLFNBQVM7QUFBQSxjQUNULFdBQVc7QUFBQSxjQUNYLFVBQVU7QUFBQSxjQUNWLG9CQUFvQjtBQUFBLGNBQ3BCLGNBQWM7QUFBQSxjQUNkLGdCQUFnQjtBQUFBLGNBQ2hCLGdCQUFnQjtBQUFBLGNBQ2hCLGtCQUFrQjtBQUFBLGNBQ2xCLG1CQUFtQjtBQUFBLGNBQ25CLHFCQUFxQjtBQUFBLGNBQ3JCLG1CQUFtQjtBQUFBLGNBQ25CLG1CQUFtQjtBQUFBLGNBQ25CLGdCQUFnQjtBQUFBLGNBQ2hCLGFBQWE7QUFBQSxjQUNiLGFBQWE7QUFBQSxjQUNiLFlBQVk7QUFBQSxjQUNaLGVBQWU7QUFBQSxjQUNmLFFBQVE7QUFBQSxjQUNSLFdBQVc7QUFBQSxjQUNYLGFBQWE7QUFBQSxjQUNiLFNBQVM7QUFBQSxjQUNULGFBQWE7QUFBQSxjQUNiLFVBQVU7QUFBQSxjQUNWLFVBQVU7QUFBQSxjQUNWLGlCQUFpQjtBQUFBLGNBQ2pCLGFBQWE7QUFBQSxjQUNiLGlCQUFpQjtBQUFBLGNBQ2pCLGlCQUFpQjtBQUFBLGNBQ2pCLGNBQWM7QUFBQSxjQUNkLGFBQWE7QUFBQSxjQUNiLFFBQVE7QUFBQSxjQUNSLFFBQVE7QUFBQSxjQUNSLFFBQVE7QUFBQSxjQUNSLGNBQWM7QUFBQSxjQUNkLFVBQVU7QUFBQSxjQUNWLE9BQU87QUFBQSxjQUNQLGFBQWE7QUFBQSxjQUNiLGFBQWE7QUFBQSxjQUNiLGVBQWU7QUFBQSxjQUNmLFVBQVU7QUFBQSxjQUNWLGNBQWM7QUFBQSxjQUNkLFlBQVk7QUFBQSxjQUNaLFlBQVk7QUFBQSxjQUNaLFVBQVU7QUFBQSxjQUNWLFVBQVU7QUFBQSxjQUNWLFdBQVc7QUFBQSxjQUNYLGFBQWE7QUFBQSxjQUNiLGFBQWE7QUFBQSxjQUNiLFFBQVE7QUFBQSxjQUNSLGVBQWU7QUFBQSxjQUNmLGFBQWE7QUFBQSxjQUNiLE9BQU87QUFBQSxjQUNQLFFBQVE7QUFBQSxjQUNSLFdBQVc7QUFBQSxjQUNYLFVBQVU7QUFBQSxjQUNWLGFBQWE7QUFBQSxjQUNiLFVBQVU7QUFBQSxjQUNWLFNBQVM7QUFBQSxjQUNULGNBQWM7QUFBQSxjQUNkLFNBQVM7QUFBQSxjQUNULGVBQWU7QUFBQSxjQUNmLFVBQVU7QUFBQSxZQUNWO0FBQUEsVUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFTRCxPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBT04sV0FBVztBQUFBLGNBQ1YsY0FBYyxDQUFDLGtCQUFrQixtQkFBbUI7QUFBQSxjQUNwRCxhQUFhLENBQUMseUJBQXlCLHVCQUF1QjtBQUFBLGNBQzlELFFBQVEsQ0FBQyx5QkFBeUIsaUJBQWlCO0FBQUEsY0FDbkQsc0JBQXNCLENBQUMsT0FBTyxPQUFPO0FBQUEsY0FDckMsbUJBQW1CLENBQUMsU0FBUyxhQUFhO0FBQUEsY0FDMUMscUJBQXFCLENBQUMsT0FBTyxTQUFTO0FBQUEsWUFDdEM7QUFBQTtBQUFBO0FBQUEsWUFHRCxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFJWDtBQUFBO0FBQUEsWUFFRCxVQUFVLFdBQVc7QUFLcEIsdUJBQVMsSUFBSSxHQUFHLElBQUksSUFBSSxNQUFNLE9BQU8sUUFBUSxLQUFLO0FBQ2pELG9CQUFJLGdCQUFpQixJQUFJLE1BQU0sT0FBTyxDQUFDLE1BQU0sVUFBVyxZQUFZO0FBQ3BFLG9CQUFJLE1BQU0sVUFBVSxJQUFJLE1BQU0sT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixhQUFhO0FBQUEsY0FDakY7QUFFRCxrQkFBSSxjQUNGLGNBQ0E7QUFJRixrQkFBSSxJQUFJO0FBQ1AscUJBQUssZ0JBQWdCLElBQUksTUFBTSxXQUFXO0FBQ3pDLHNCQUFJLENBQUMsSUFBSSxNQUFNLFVBQVUsZUFBZSxZQUFZLEdBQUc7QUFDdEQ7QUFBQSxrQkFDQTtBQUNELGlDQUFlLElBQUksTUFBTSxVQUFVLFlBQVk7QUFDL0MsOEJBQVksYUFBYSxDQUFDLEVBQUUsTUFBTSxHQUFHO0FBRXJDLHNCQUFJLGdCQUFnQixhQUFhLENBQUMsRUFBRSxNQUFNLElBQUksTUFBTSxVQUFVO0FBRTlELHNCQUFJLFVBQVUsQ0FBQyxNQUFNLFNBQVM7QUFFN0IsOEJBQVUsS0FBSyxVQUFVLE1BQU8sQ0FBQTtBQUNoQyxrQ0FBYyxLQUFLLGNBQWMsTUFBTyxDQUFBO0FBR3hDLHdCQUFJLE1BQU0sVUFBVSxZQUFZLElBQUksQ0FBQyxVQUFVLEtBQUssR0FBRyxHQUFHLGNBQWMsS0FBSyxHQUFHLENBQUM7QUFBQSxrQkFDakY7QUFBQSxnQkFDRDtBQUFBLGNBQ0Q7QUFHRCxtQkFBSyxnQkFBZ0IsSUFBSSxNQUFNLFdBQVc7QUFDekMsb0JBQUksQ0FBQyxJQUFJLE1BQU0sVUFBVSxlQUFlLFlBQVksR0FBRztBQUN0RDtBQUFBLGdCQUNBO0FBQ0QsK0JBQWUsSUFBSSxNQUFNLFVBQVUsWUFBWTtBQUMvQyw0QkFBWSxhQUFhLENBQUMsRUFBRSxNQUFNLEdBQUc7QUFFckMseUJBQVMsS0FBSyxXQUFXO0FBQ3hCLHNCQUFJLENBQUMsVUFBVSxlQUFlLENBQUMsR0FBRztBQUNqQztBQUFBLGtCQUNBO0FBQ0Qsc0JBQUksZUFBZSxlQUFlLFVBQVUsQ0FBQyxHQUMzQyxlQUFlO0FBSWpCLHNCQUFJLE1BQU0sV0FBVyxZQUFZLElBQUksQ0FBQyxjQUFjLFlBQVk7QUFBQSxnQkFDaEU7QUFBQSxjQUNEO0FBQUEsWUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQU9ELFNBQVMsU0FBUyxVQUFVO0FBQzNCLGtCQUFJLFdBQVcsSUFBSSxNQUFNLFdBQVcsUUFBUTtBQUU1QyxrQkFBSSxVQUFVO0FBQ2IsdUJBQU8sU0FBUyxDQUFDO0FBQUEsY0FDdkIsT0FBWTtBQUVOLHVCQUFPO0FBQUEsY0FDUDtBQUFBLFlBQ0Q7QUFBQSxZQUNELFNBQVMsU0FBUyxLQUFLLE9BQU87QUFDN0Isa0JBQUksUUFBUSxJQUFJLE9BQU8sU0FBUyxHQUFHLENBQUMsRUFBRSxNQUFNLFVBQVUsS0FBSyxDQUFFLEdBQUUsQ0FBQyxLQUFLO0FBRXJFLGtCQUFJLFFBQVEsU0FBUyxJQUFJLE1BQU0sS0FBVyxHQUFHO0FBQzVDLHVCQUFPO0FBQUEsY0FDUDtBQUNELHFCQUFPO0FBQUEsWUFDUDtBQUFBLFlBQ0QsV0FBVyxTQUFTLEtBQUs7QUFDeEIscUJBQU8sSUFBSSxRQUFRLDhCQUE4QixTQUFTLElBQUksSUFBSWlDLEtBQUk7QUFDckUsb0JBQUksSUFBSSxNQUFNLFdBQVcsZUFBZUEsR0FBRSxHQUFHO0FBQzVDLDBCQUFRLEtBQUssS0FBSyxXQUFXLElBQUksTUFBTSxXQUFXQSxHQUFFLEtBQUssS0FBSyxLQUFLO0FBQUEsZ0JBQ25FO0FBQ0QsdUJBQU8sS0FBS0E7QUFBQSxjQUNsQixDQUFNO0FBQUEsWUFDRDtBQUFBO0FBQUE7QUFBQSxZQUdELHdCQUF3QixTQUFTLGNBQWMsbUJBQW1CO0FBRWpFLGtCQUFJLElBQUksTUFBTSxZQUFZLEtBQUssaUJBQWlCLEdBQUc7QUFDbEQsb0NBQW9CLGtCQUFrQixNQUFNLElBQUksTUFBTSxXQUFXLEVBQUUsQ0FBQztBQUFBLGNBQ3BFO0FBTUQsa0JBQUksSUFBSSxPQUFPLGVBQWUsaUJBQWlCLEdBQUc7QUFDakQsb0NBQW9CLElBQUksTUFBTSxVQUFVLFlBQVksRUFBRSxDQUFDO0FBQUEsY0FDdkQ7QUFFRCxxQkFBTztBQUFBLFlBQ1A7QUFBQTtBQUFBLFlBRUQsY0FBYyxTQUFTLGNBQWMsbUJBQW1CO0FBQ3ZELGtCQUFJLFdBQVcsSUFBSSxNQUFNLFdBQVcsWUFBWTtBQUVoRCxrQkFBSSxVQUFVO0FBQ2Isb0JBQUksV0FBVyxTQUFTLENBQUMsR0FDdkIsZUFBZSxTQUFTLENBQUM7QUFFM0Isb0NBQW9CLElBQUksTUFBTSx1QkFBdUIsVUFBVSxpQkFBaUI7QUFHaEYsdUJBQU8sa0JBQWtCLFNBQVEsRUFBRyxNQUFNLElBQUksTUFBTSxVQUFVLEVBQUUsWUFBWTtBQUFBLGNBQ2xGLE9BQVk7QUFFTix1QkFBTztBQUFBLGNBQ1A7QUFBQSxZQUNEO0FBQUE7QUFBQTtBQUFBLFlBR0QsYUFBYSxTQUFTLGNBQWMsV0FBVyxtQkFBbUI7QUFDakUsa0JBQUksV0FBVyxJQUFJLE1BQU0sV0FBVyxZQUFZO0FBRWhELGtCQUFJLFVBQVU7QUFDYixvQkFBSSxXQUFXLFNBQVMsQ0FBQyxHQUN2QixlQUFlLFNBQVMsQ0FBQyxHQUN6Qix3QkFDQTtBQUVGLG9DQUFvQixJQUFJLE1BQU0sdUJBQXVCLFVBQVUsaUJBQWlCO0FBSWhGLHlDQUF5QixrQkFBa0IsU0FBVSxFQUFDLE1BQU0sSUFBSSxNQUFNLFVBQVU7QUFDaEYsdUNBQXVCLFlBQVksSUFBSTtBQUN2QywyQ0FBMkIsdUJBQXVCLEtBQUssR0FBRztBQUUxRCx1QkFBTztBQUFBLGNBQ2IsT0FBWTtBQUVOLHVCQUFPO0FBQUEsY0FDUDtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBT0QsZ0JBQWdCO0FBQUE7QUFBQTtBQUFBLFlBR2YsWUFBWTtBQUFBLGNBQ1gsTUFBTSxTQUFTLE1BQU0sU0FBUyxlQUFlO0FBQzVDLHdCQUFRLE1BQUk7QUFBQSxrQkFDWCxLQUFLO0FBQ0osMkJBQU87QUFBQSxrQkFFUixLQUFLO0FBQ0osd0JBQUk7QUFHSix3QkFBSSxJQUFJLE1BQU0sNkJBQTZCLEtBQUssYUFBYSxHQUFHO0FBQy9ELGtDQUFZO0FBQUEsb0JBQ3JCLE9BQWU7QUFFTixrQ0FBWSxjQUFjLFNBQVUsRUFBQyxNQUFNLElBQUksTUFBTSxXQUFXO0FBR2hFLGtDQUFZLFlBQVksVUFBVSxDQUFDLEVBQUUsUUFBUSxZQUFZLEdBQUcsSUFBSTtBQUFBLG9CQUNoRTtBQUVELDJCQUFPO0FBQUEsa0JBRVIsS0FBSztBQUNKLDJCQUFPLFVBQVUsZ0JBQWdCO0FBQUEsZ0JBQ2xDO0FBQUEsY0FDRDtBQUFBLGNBQ0QsTUFBTSxTQUFTLE1BQU0sU0FBUyxlQUFlO0FBQzVDLHdCQUFRLE1BQUk7QUFBQSxrQkFDWCxLQUFLO0FBQ0osMkJBQU8sU0FBUyxNQUFNLFlBQVksV0FBVztBQUFBLGtCQUM5QyxLQUFLO0FBQ0osd0JBQUksWUFBWSxXQUFXLGFBQWE7QUFHeEMsd0JBQUksRUFBRSxhQUFhLGNBQWMsSUFBSTtBQUNwQywwQkFBSSxnQkFBZ0IsY0FBYyxTQUFVLEVBQUMsTUFBTSx5QkFBeUI7QUFHNUUsMEJBQUksZUFBZTtBQUNsQixvQ0FBWSxjQUFjLENBQUM7QUFBQSxzQkFFckMsT0FBZ0I7QUFDTixvQ0FBWTtBQUFBLHNCQUNaO0FBQUEsb0JBQ0Q7QUFFRCwyQkFBTztBQUFBLGtCQUVSLEtBQUs7QUFFSix3QkFBSSxDQUFDLFdBQVcsYUFBYSxHQUFHO0FBQy9CLDZCQUFPO0FBQUEsb0JBQ2hCLE9BQWU7QUFDTiw2QkFBTyxVQUFVLGdCQUFnQjtBQUFBLG9CQUNqQztBQUFBLGdCQUNGO0FBQUEsY0FDRDtBQUFBO0FBQUEsY0FFRCxTQUFTLFNBQVMsTUFBTSxTQUFTLGVBQWU7QUFDL0Msb0JBQUksTUFBTSxHQUFHO0FBQ1osMEJBQVEsTUFBSTtBQUFBLG9CQUNYLEtBQUs7QUFDSiw2QkFBTztBQUFBLG9CQUNSLEtBQUs7QUFHSiwwQkFBSSxZQUFZLGNBQWMsU0FBVSxFQUFDLE1BQU0sd0JBQXdCO0FBRXZFLDBCQUFJLFdBQVc7QUFFZCx3Q0FBZ0IsVUFBVSxDQUFDLElBQUk7QUFBQSxzQkFDekMsT0FBZ0I7QUFFTix3Q0FBZ0I7QUFBQSxzQkFDaEI7QUFFRCw2QkFBTztBQUFBLG9CQUNSLEtBQUs7QUFFSiw4QkFBUSxNQUFNLE9BQU87QUFLckIsMEJBQUksV0FBVyxhQUFhLEtBQUssR0FBRztBQUNuQywrQkFBTztBQUFBLHNCQUNqQixPQUFnQjtBQUVOLCtCQUFPLG1CQUFtQixTQUFTLFdBQVcsYUFBYSxJQUFJLEtBQUssRUFBRSxJQUFJO0FBQUEsc0JBQzFFO0FBQUEsa0JBQ0Y7QUFBQSxnQkFFUixPQUFhO0FBQ04sMEJBQVEsTUFBSTtBQUFBLG9CQUNYLEtBQUs7QUFDSiw2QkFBTztBQUFBLG9CQUNSLEtBQUs7QUFDSiw2QkFBTztBQUFBLG9CQUNSLEtBQUs7QUFDSiw2QkFBTztBQUFBLGtCQUNSO0FBQUEsZ0JBQ0Q7QUFBQSxjQUNEO0FBQUEsWUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFNRCxVQUFVLFdBQVc7QUFnQnBCLG1CQUFLLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxTQUFTLE1BQU0sZUFBZTtBQUdyRCxvQkFBSSxNQUFNLGlCQUFpQixJQUFJLE1BQU0sZUFBZSxPQUFPLElBQUksTUFBTSxZQUFZO0FBQUEsY0FDakY7QUFFRCx1QkFBUyxJQUFJLEdBQUcsSUFBSSxJQUFJLE1BQU0sZUFBZSxRQUFRLEtBQUs7QUFHekQsaUJBQUMsV0FBVztBQUNYLHNCQUFJLGdCQUFnQixJQUFJLE1BQU0sZUFBZSxDQUFDO0FBRTlDLHNCQUFJLGVBQWUsV0FBVyxhQUFhLElBQUksU0FBUyxNQUFNLFNBQVMsZUFBZTtBQUNyRiw0QkFBUSxNQUFJO0FBQUEsc0JBRVgsS0FBSztBQUNKLCtCQUFPO0FBQUEsc0JBRVIsS0FBSztBQUVKLDRCQUFJLEtBQUssT0FBTyxNQUFNOUIsZUFBYSxLQUFLLE9BQU8sRUFBRSxlQUFlLGFBQWEsTUFBTUEsYUFBVztBQUU3RixpQ0FBTyxVQUFVLEtBQUssYUFBYSxJQUFJLElBQUk7QUFBQSx3QkFHM0M7QUFDRCwrQkFBTyxLQUFLLE9BQU8sRUFBRSxlQUFlLGFBQWEsRUFBRSxRQUFRLFNBQVMsRUFBRTtBQUFBLHNCQUN2RSxLQUFLO0FBQ0osNEJBQUksVUFBVTtBQUtkLGdDQUFRLGNBQWMsT0FBTyxHQUFHLGNBQWMsU0FBUyxDQUFDLEdBQUM7QUFBQSwwQkFFeEQsS0FBSztBQUNKLHNDQUFVLENBQUMsMkJBQTJCLEtBQUssYUFBYTtBQUN4RDtBQUFBLDBCQUVELEtBQUs7QUFBQSwwQkFDTCxLQUFLO0FBSUosZ0NBQUksU0FBUyxNQUFNLGFBQWEsS0FBSyxPQUFPLEVBQUUsZUFBZSxhQUFhLE1BQU1BLGVBQWEsZ0JBQWdCLEdBQUc7QUFDL0csOENBQWdCO0FBQUEsNEJBQ2hCO0FBRUQsc0NBQVUsQ0FBQyxTQUFTLEtBQUssYUFBYTtBQUN0QztBQUFBLDBCQUNELEtBQUs7QUFDSixzQ0FBVSxDQUFDLGFBQWEsS0FBSyxhQUFhO0FBQzFDO0FBQUEsMEJBQ0QsS0FBSztBQUNKLHNDQUFVLENBQUMsYUFBYSxLQUFLLGFBQWE7QUFDMUM7QUFBQSx3QkFDRDtBQUVELDRCQUFJLENBQUMsU0FBUztBQUViLCtCQUFLLE9BQU8sRUFBRSxlQUFlLGFBQWEsSUFBSSxNQUFNLGdCQUFnQjtBQUFBLHdCQUNwRTtBQUdELCtCQUFPLEtBQUssT0FBTyxFQUFFLGVBQWUsYUFBYTtBQUFBLG9CQUNsRDtBQUFBLGtCQUNUO0FBQUEsZ0JBQ0E7Y0FDTTtBQVFELHVCQUFTLElBQUksR0FBRyxJQUFJLElBQUksTUFBTSxPQUFPLFFBQVEsS0FBSztBQUdqRCxpQkFBQyxXQUFXO0FBQ1gsc0JBQUksWUFBWSxJQUFJLE1BQU0sT0FBTyxDQUFDO0FBR2xDLHNCQUFJLGVBQWUsV0FBVyxTQUFTLElBQUksU0FBUyxNQUFNLFNBQVMsZUFBZTtBQUNqRiw0QkFBUSxNQUFJO0FBQUEsc0JBQ1gsS0FBSztBQUNKLCtCQUFPO0FBQUEsc0JBRVIsS0FBSztBQUNKLDRCQUFJO0FBR0osNEJBQUksSUFBSSxNQUFNLDZCQUE2QixLQUFLLGFBQWEsR0FBRztBQUMvRCxzQ0FBWTtBQUFBLHdCQUN2QixPQUFpQjtBQUNOLDhCQUFJLFdBQ0YsYUFBYTtBQUFBLDRCQUNaLE9BQU87QUFBQSw0QkFDUCxNQUFNO0FBQUEsNEJBQ04sTUFBTTtBQUFBLDRCQUNOLE9BQU87QUFBQSw0QkFDUCxLQUFLO0FBQUEsNEJBQ0wsT0FBTztBQUFBLDBCQUNyQjtBQUdXLDhCQUFJLFlBQVksS0FBSyxhQUFhLEdBQUc7QUFDcEMsZ0NBQUksV0FBVyxhQUFhLE1BQU1BLGFBQVc7QUFDNUMsMENBQVksV0FBVyxhQUFhO0FBQUEsNEJBQ2pELE9BQW1CO0FBRU4sMENBQVksV0FBVztBQUFBLDRCQUN2QjtBQUFBLDBCQUViLFdBQXNCLElBQUksTUFBTSxNQUFNLEtBQUssYUFBYSxHQUFHO0FBQy9DLHdDQUFZLFNBQVMsSUFBSSxPQUFPLFNBQVMsYUFBYSxFQUFFLEtBQUssR0FBRyxJQUFJO0FBQUEsMEJBRXBFLFdBQVUsQ0FBRSxZQUFZLEtBQUssYUFBYSxHQUFJO0FBQzlDLHdDQUFZLFdBQVc7QUFBQSwwQkFDdkI7QUFJRCx1Q0FBYSxhQUFhLGVBQWUsU0FBVSxFQUFDLE1BQU0sSUFBSSxNQUFNLFdBQVcsRUFBRSxDQUFDLEVBQUUsUUFBUSxZQUFZLEdBQUc7QUFBQSx3QkFDM0c7QUFHRCw2QkFBSyxDQUFDLE1BQU0sS0FBSyxNQUFNLFVBQVUsTUFBTSxHQUFHLEVBQUUsV0FBVyxHQUFHO0FBQ3pELHVDQUFhO0FBQUEsd0JBQ2I7QUFFRCwrQkFBTztBQUFBLHNCQUNSLEtBQUs7QUFFSiw0QkFBSSxPQUFPLEtBQUssYUFBYSxHQUFHO0FBQy9CLGlDQUFPO0FBQUEsd0JBQ1A7QUFHRCw0QkFBSSxNQUFNLEdBQUc7QUFDWiw4QkFBSSxjQUFjLE1BQU0sR0FBRyxFQUFFLFdBQVcsR0FBRztBQUMxQyw0Q0FBZ0IsY0FBYyxNQUFNLEtBQUssRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUFBLDBCQUMvRDtBQUFBLHdCQUVaLFdBQXFCLGNBQWMsTUFBTSxHQUFHLEVBQUUsV0FBVyxHQUFHO0FBQ2pELDJDQUFpQjtBQUFBLHdCQUNqQjtBQUlELGdDQUFRLE1BQU0sSUFBSSxRQUFRLFVBQVUsTUFBTSxjQUFjLFFBQVEsUUFBUSxHQUFHLEVBQUUsUUFBUSxpQkFBaUIsRUFBRSxJQUFJO0FBQUEsb0JBQzdHO0FBQUEsa0JBQ1Q7QUFBQSxnQkFDQTtjQUNNO0FBS0QsdUJBQVMsaUJBQWlCLE1BQU0sU0FBUyxXQUFXO0FBQ25ELG9CQUFJLGNBQWMsSUFBSSxpQkFBaUIsU0FBUyxXQUFXLEVBQUUsU0FBVSxFQUFDLFlBQWEsTUFBSztBQUUxRixvQkFBSSxpQkFBaUIsYUFBYSxRQUFRO0FBRXpDLHNCQUFJUyxJQUNGLE9BQ0EsVUFBVSxHQUNWLFFBQVEsU0FBUyxVQUFVLENBQUMsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLFFBQVEsR0FDL0QsU0FBUyxDQUFDLFlBQVksTUFBTSxDQUFDLEdBQUcsWUFBWSxNQUFNLENBQUMsR0FBRyxXQUFXLE1BQU0sQ0FBQyxJQUFJLFNBQVMsV0FBVyxNQUFNLENBQUMsSUFBSSxPQUFPO0FBRXBILHVCQUFLQSxLQUFJLEdBQUdBLEtBQUksT0FBTyxRQUFRQSxNQUFLO0FBQ25DLDRCQUFRLFdBQVcsSUFBSSxpQkFBaUIsU0FBUyxPQUFPQSxFQUFDLENBQUMsQ0FBQztBQUMzRCx3QkFBSSxDQUFDLE1BQU0sS0FBSyxHQUFHO0FBQ2xCLGlDQUFXO0FBQUEsb0JBQ1g7QUFBQSxrQkFDRDtBQUNELHlCQUFPLFlBQVksQ0FBQyxVQUFVO0FBQUEsZ0JBQzlCO0FBQ0QsdUJBQU87QUFBQSxjQUNQO0FBQ0QsdUJBQVMsYUFBYSxNQUFNLFdBQVc7QUFDdEMsdUJBQU8sU0FBUyxNQUFNLFNBQVMsZUFBZTtBQUM3QywwQkFBUSxNQUFJO0FBQUEsb0JBQ1gsS0FBSztBQUNKLDZCQUFPO0FBQUEsb0JBQ1IsS0FBSztBQUNKLDZCQUFPLFdBQVcsYUFBYSxJQUFJLGlCQUFpQixNQUFNLFNBQVMsU0FBUztBQUFBLG9CQUM3RSxLQUFLO0FBQ0osNkJBQVEsV0FBVyxhQUFhLElBQUksaUJBQWlCLE1BQU0sU0FBUyxTQUFTLElBQUs7QUFBQSxrQkFDbkY7QUFBQSxnQkFDUjtBQUFBLGNBQ007QUFDRCxrQkFBSSxlQUFlLFdBQVcsYUFBYSxhQUFhLFNBQVMsSUFBSTtBQUNyRSxrQkFBSSxlQUFlLFdBQVcsY0FBYyxhQUFhLFVBQVUsSUFBSTtBQUN2RSxrQkFBSSxlQUFlLFdBQVcsYUFBYSxhQUFhLE9BQU87QUFDL0Qsa0JBQUksZUFBZSxXQUFXLGNBQWMsYUFBYSxRQUFRO0FBQUEsWUFDakU7QUFBQSxVQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFLRCxPQUFPO0FBQUE7QUFBQTtBQUFBLFlBR04sV0FBVyxTQUFTLFVBQVU7QUFDN0IscUJBQU8sU0FBUyxRQUFRLFVBQVUsU0FBUyxPQUFPLFVBQVU7QUFDM0QsdUJBQU8sU0FBUztjQUN0QixDQUFNO0FBQUEsWUFDRDtBQUFBO0FBQUEsWUFFRCxjQUFjLFNBQVMsVUFBVTtBQUNoQyxrQkFBSSxnQkFBZ0I7QUFHcEIsa0JBQUksTUFBTyxTQUFTLE1BQU0sYUFBYSxDQUFDLFNBQVMsTUFBTSxVQUFXO0FBQ2pFLGlDQUFpQjtBQUFBLGNBQ2pCO0FBRUQscUJBQU8sSUFBSSxPQUFPLE9BQU8sZ0JBQWdCLE1BQU0sR0FBRyxFQUFFLEtBQUssUUFBUTtBQUFBLFlBQ2pFO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFJRCxhQUFhLFNBQVMsVUFBVTtBQUUvQixrQkFBSSxTQUFTLE1BQU0sY0FBYyxRQUFRLEdBQUc7QUFDM0MsdUJBQU8sQ0FBQyxTQUFTLE1BQU0sY0FBYyxRQUFRLEdBQUcsSUFBSTtBQUFBLGNBQzFELE9BQVk7QUFDTixvQkFBSSxVQUFVLENBQUMsSUFBSSxVQUFVLE9BQU8sTUFBTSxHQUFHO0FBRTdDLHlCQUFTLElBQUksR0FBRyxnQkFBZ0IsUUFBUSxRQUFRLElBQUksZUFBZSxLQUFLO0FBQ3ZFLHNCQUFJO0FBRUosc0JBQUksTUFBTSxHQUFHO0FBQ1osdUNBQW1CO0FBQUEsa0JBQzNCLE9BQWM7QUFFTix1Q0FBbUIsUUFBUSxDQUFDLElBQUksU0FBUyxRQUFRLE9BQU8sU0FBUyxPQUFPO0FBQ3ZFLDZCQUFPLE1BQU07b0JBQ3RCLENBQVM7QUFBQSxrQkFDRDtBQUdELHNCQUFJLEtBQUssU0FBUyxTQUFTLE1BQU0sY0FBYyxNQUFNLGdCQUFnQixDQUFDLEdBQUc7QUFFeEUsNkJBQVMsTUFBTSxjQUFjLFFBQVEsSUFBSTtBQUV6QywyQkFBTyxDQUFDLGtCQUFrQixJQUFJO0FBQUEsa0JBQzlCO0FBQUEsZ0JBQ0Q7QUFHRCx1QkFBTyxDQUFDLFVBQVUsS0FBSztBQUFBLGNBQ3ZCO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUtELFFBQVE7QUFBQTtBQUFBLFlBRVAsVUFBVSxTQUFTLEtBQUs7QUFDdkIsa0JBQUksaUJBQWlCLG9DQUNuQixnQkFBZ0IsNkNBQ2hCO0FBRUYsb0JBQU0sSUFBSSxRQUFRLGdCQUFnQixTQUFTLEdBQUcsR0FBRyxHQUFHLEdBQUc7QUFDdEQsdUJBQU8sSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJO0FBQUEsY0FDakMsQ0FBTTtBQUVELHlCQUFXLGNBQWMsS0FBSyxHQUFHO0FBRWpDLHFCQUFPLFdBQVcsQ0FBQyxTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFBQSxZQUM5RztBQUFBLFlBQ0QsZ0JBQWdCLFNBQVMsT0FBTztBQU0vQixxQkFBUSxDQUFDLFNBQVMscURBQXFELEtBQUssS0FBSztBQUFBLFlBQ2pGO0FBQUE7QUFBQSxZQUVELGFBQWEsU0FBUyxVQUFVO0FBQy9CLGtCQUFJLGtCQUFrQixLQUFLLFFBQVEsR0FBRztBQUNyQyx1QkFBTztBQUFBLGNBQ1AsV0FBVSxrSEFBa0gsS0FBSyxRQUFRLEdBQUc7QUFFNUksdUJBQU87QUFBQSxjQUNiLE9BQVk7QUFFTix1QkFBTztBQUFBLGNBQ1A7QUFBQSxZQUNEO0FBQUE7QUFBQTtBQUFBLFlBR0QsZ0JBQWdCLFNBQVMsU0FBUztBQUNqQyxrQkFBSSxVQUFVLFdBQVcsUUFBUSxRQUFRLFNBQVEsRUFBRztBQUVwRCxrQkFBSSwySkFBMkosS0FBSyxPQUFPLEdBQUc7QUFDN0ssdUJBQU87QUFBQSxjQUNQLFdBQVUsVUFBVSxLQUFLLE9BQU8sR0FBRztBQUNuQyx1QkFBTztBQUFBLGNBQ1AsV0FBVSxVQUFVLEtBQUssT0FBTyxHQUFHO0FBQ25DLHVCQUFPO0FBQUEsY0FDUCxXQUFVLGFBQWEsS0FBSyxPQUFPLEdBQUc7QUFDdEMsdUJBQU87QUFBQSxjQUNQLFdBQVUsYUFBYSxLQUFLLE9BQU8sR0FBRztBQUN0Qyx1QkFBTztBQUFBLGNBRWIsT0FBWTtBQUNOLHVCQUFPO0FBQUEsY0FDUDtBQUFBLFlBQ0Q7QUFBQTtBQUFBLFlBRUQsVUFBVSxTQUFTLFNBQVMsV0FBVztBQUN0QyxrQkFBSSxTQUFTO0FBQ1osb0JBQUksUUFBUSxXQUFXO0FBQ3RCLDBCQUFRLFVBQVUsSUFBSSxTQUFTO0FBQUEsZ0JBQy9CLFdBQVUsS0FBSyxTQUFTLFFBQVEsU0FBUyxHQUFHO0FBRTVDLDBCQUFRLGNBQWMsUUFBUSxVQUFVLFNBQVMsTUFBTSxNQUFNO0FBQUEsZ0JBQ3BFLE9BQWE7QUFFTixzQkFBSSxlQUFlLFFBQVEsYUFBYSxNQUFNLElBQUksY0FBYyxPQUFPLEtBQUs7QUFFNUUsMEJBQVEsYUFBYSxTQUFTLGdCQUFnQixlQUFlLE1BQU0sTUFBTSxTQUFTO0FBQUEsZ0JBQ2xGO0FBQUEsY0FDRDtBQUFBLFlBQ0Q7QUFBQSxZQUNELGFBQWEsU0FBUyxTQUFTLFdBQVc7QUFDekMsa0JBQUksU0FBUztBQUNaLG9CQUFJLFFBQVEsV0FBVztBQUN0QiwwQkFBUSxVQUFVLE9BQU8sU0FBUztBQUFBLGdCQUNsQyxXQUFVLEtBQUssU0FBUyxRQUFRLFNBQVMsR0FBRztBQUc1QywwQkFBUSxZQUFZLFFBQVEsVUFBVSxTQUFRLEVBQUcsUUFBUSxJQUFJLE9BQU8sWUFBWSxVQUFVLE1BQU0sR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLFdBQVcsSUFBSSxHQUFHLEdBQUc7QUFBQSxnQkFDN0ksT0FBYTtBQUVOLHNCQUFJLGVBQWUsUUFBUSxhQUFhLE1BQU0sSUFBSSxjQUFjLE9BQU8sS0FBSztBQUU1RSwwQkFBUSxhQUFhLFNBQVMsYUFBYSxRQUFRLElBQUksT0FBTyxVQUFXLFVBQVUsTUFBTSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksU0FBVSxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQUEsZ0JBQy9IO0FBQUEsY0FDRDtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQU1ELGtCQUFrQixTQUFTLFNBQVMsVUFBVSxtQkFBbUIsa0JBQWtCO0FBS2xGLHFCQUFTLHFCQUFxQnNCLFVBQVNDLFdBQVU7QUFLaEQsa0JBQUksZ0JBQWdCO0FBTXBCLGtCQUFJLE1BQU0sR0FBRztBQUNaLGdDQUFnQm5DLEdBQUUsSUFBSWtDLFVBQVNDLFNBQVE7QUFBQSxjQUc3QyxPQUFZO0FBR04sb0JBQUksZ0JBQWdCO0FBRXBCLG9CQUFJLG1CQUFtQixLQUFLQSxTQUFRLEtBQUssSUFBSSxpQkFBaUJELFVBQVMsU0FBUyxNQUFNLEdBQUc7QUFDeEYsa0NBQWdCO0FBQ2hCLHNCQUFJLGlCQUFpQkEsVUFBUyxXQUFXLElBQUksT0FBTyxlQUFlQSxRQUFPLENBQUM7QUFBQSxnQkFDM0U7QUFFRCxvQkFBSSxnQkFBZ0IsV0FBVztBQUM5QixzQkFBSSxlQUFlO0FBQ2xCLHdCQUFJLGlCQUFpQkEsVUFBUyxXQUFXLE1BQU07QUFBQSxrQkFDL0M7QUFBQSxnQkFDUjtBQUVNLG9CQUFJLENBQUMsa0JBQWtCO0FBQ3RCLHNCQUFJQyxjQUFhLFlBQVksSUFBSSxpQkFBaUJELFVBQVMsV0FBVyxFQUFFLFNBQVEsRUFBRyxZQUFXLE1BQU8sY0FBYztBQUNsSCx3QkFBSSxtQkFBbUJBLFNBQVEsZ0JBQWdCLFdBQVcsSUFBSSxpQkFBaUJBLFVBQVMsZ0JBQWdCLENBQUMsS0FBSyxNQUFNLFdBQVcsSUFBSSxpQkFBaUJBLFVBQVMsbUJBQW1CLENBQUMsS0FBSyxNQUFNLFdBQVcsSUFBSSxpQkFBaUJBLFVBQVMsWUFBWSxDQUFDLEtBQUssTUFBTSxXQUFXLElBQUksaUJBQWlCQSxVQUFTLGVBQWUsQ0FBQyxLQUFLO0FBQzNUO0FBRUEsMkJBQU87QUFBQSxrQkFDUCxXQUFVQyxjQUFhLFdBQVcsSUFBSSxpQkFBaUJELFVBQVMsV0FBVyxFQUFFLFNBQVEsRUFBRyxZQUFXLE1BQU8sY0FBYztBQUN4SCx3QkFBSSxrQkFBa0JBLFNBQVEsZUFBZSxXQUFXLElBQUksaUJBQWlCQSxVQUFTLGlCQUFpQixDQUFDLEtBQUssTUFBTSxXQUFXLElBQUksaUJBQWlCQSxVQUFTLGtCQUFrQixDQUFDLEtBQUssTUFBTSxXQUFXLElBQUksaUJBQWlCQSxVQUFTLGFBQWEsQ0FBQyxLQUFLLE1BQU0sV0FBVyxJQUFJLGlCQUFpQkEsVUFBUyxjQUFjLENBQUMsS0FBSztBQUN6VDtBQUVBLDJCQUFPO0FBQUEsa0JBQ1A7QUFBQSxnQkFDRDtBQUVELG9CQUFJO0FBSUosb0JBQUksS0FBS0EsUUFBTyxNQUFNL0IsYUFBVztBQUNoQyxrQ0FBZ0JGLFFBQU8saUJBQWlCaUMsVUFBUyxJQUFJO0FBQUEsZ0JBRXJELFdBQVUsQ0FBQyxLQUFLQSxRQUFPLEVBQUUsZUFBZTtBQUN4QyxrQ0FBZ0IsS0FBS0EsUUFBTyxFQUFFLGdCQUFnQmpDLFFBQU8saUJBQWlCaUMsVUFBUyxJQUFJO0FBQUEsZ0JBRTFGLE9BQWE7QUFDTixrQ0FBZ0IsS0FBS0EsUUFBTyxFQUFFO0FBQUEsZ0JBQzlCO0FBS0Qsb0JBQUlDLGNBQWEsZUFBZTtBQUMvQixrQkFBQUEsWUFBVztBQUFBLGdCQUNYO0FBSUQsb0JBQUksT0FBTyxLQUFLQSxjQUFhLFVBQVU7QUFDdEMsa0NBQWdCLGNBQWMsaUJBQWlCQSxTQUFRO0FBQUEsZ0JBQzlELE9BQWE7QUFDTixrQ0FBZ0IsY0FBY0EsU0FBUTtBQUFBLGdCQUN0QztBQUlELG9CQUFJLGtCQUFrQixNQUFNLGtCQUFrQixNQUFNO0FBQ25ELGtDQUFnQkQsU0FBUSxNQUFNQyxTQUFRO0FBQUEsZ0JBQ3RDO0FBRUQ7Y0FDQTtBQVFELGtCQUFJLGtCQUFrQixVQUFVLDZCQUE2QixLQUFLQSxTQUFRLEdBQUc7QUFDNUUsb0JBQUksV0FBVyxxQkFBcUJELFVBQVMsVUFBVTtBQU12RCxvQkFBSSxhQUFhLFdBQVksYUFBYSxjQUFjLFlBQVksS0FBS0MsU0FBUSxHQUFJO0FBRXBGLGtDQUFnQm5DLEdBQUVrQyxRQUFPLEVBQUUsU0FBUSxFQUFHQyxTQUFRLElBQUk7QUFBQSxnQkFDbEQ7QUFBQSxjQUNEO0FBRUQscUJBQU87QUFBQSxZQUNQO0FBRUQsZ0JBQUk7QUFJSixnQkFBSSxJQUFJLE1BQU0sV0FBVyxRQUFRLEdBQUc7QUFDbkMsa0JBQUksT0FBTyxVQUNULFdBQVcsSUFBSSxNQUFNLFFBQVEsSUFBSTtBQUluQyxrQkFBSSxzQkFBc0JoQyxhQUFXO0FBRXBDLG9DQUFvQixJQUFJLGlCQUFpQixTQUFTLElBQUksTUFBTSxZQUFZLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFBQSxjQUNwRjtBQUdELGtCQUFJLElBQUksZUFBZSxXQUFXLFFBQVEsR0FBRztBQUM1QyxvQ0FBb0IsSUFBSSxlQUFlLFdBQVcsUUFBUSxFQUFFLFdBQVcsU0FBUyxpQkFBaUI7QUFBQSxjQUNqRztBQUdELDhCQUFnQixJQUFJLE1BQU0sYUFBYSxNQUFNLGlCQUFpQjtBQUFBLFlBTTlELFdBQVUsSUFBSSxlQUFlLFdBQVcsUUFBUSxHQUFHO0FBQ25ELGtCQUFJLHdCQUNGO0FBRUYsdUNBQXlCLElBQUksZUFBZSxXQUFXLFFBQVEsRUFBRSxRQUFRLE9BQU87QUFNaEYsa0JBQUksMkJBQTJCLGFBQWE7QUFDM0MsMENBQTBCLHFCQUFxQixTQUFTLElBQUksTUFBTSxZQUFZLHNCQUFzQixFQUFFLENBQUMsQ0FBQztBQUd4RyxvQkFBSSxJQUFJLE9BQU8sZUFBZSx1QkFBdUIsS0FBSyxJQUFJLE1BQU0sVUFBVSxRQUFRLEdBQUc7QUFDeEYsNENBQTBCLElBQUksTUFBTSxVQUFVLFFBQVEsRUFBRSxDQUFDO0FBQUEsZ0JBQ3pEO0FBQUEsY0FDRDtBQUVELDhCQUFnQixJQUFJLGVBQWUsV0FBVyxRQUFRLEVBQUUsV0FBVyxTQUFTLHVCQUF1QjtBQUFBLFlBQ25HO0FBR0QsZ0JBQUksQ0FBQyxTQUFTLEtBQUssYUFBYSxHQUFHO0FBR2xDLGtCQUFJLE9BQU8sS0FBSyxPQUFPO0FBRXZCLGtCQUFJLFFBQVEsS0FBSyxTQUFTLElBQUksTUFBTSxhQUFhLFFBQVEsR0FBRztBQUczRCxvQkFBSSxvQkFBb0IsS0FBSyxRQUFRLEdBQUc7QUFFdkMsc0JBQUk7QUFDSCxvQ0FBZ0IsUUFBUSxRQUFTLEVBQUMsUUFBUTtBQUFBLGtCQUMxQyxTQUFRLE9BQU87QUFDZixvQ0FBZ0I7QUFBQSxrQkFDaEI7QUFBQSxnQkFFUixPQUFhO0FBQ04sa0NBQWdCLFFBQVEsYUFBYSxRQUFRO0FBQUEsZ0JBQzdDO0FBQUEsY0FDUCxPQUFZO0FBQ04sZ0NBQWdCLHFCQUFxQixTQUFTLElBQUksTUFBTSxZQUFZLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFBQSxjQUNoRjtBQUFBLFlBQ0Q7QUFJRCxnQkFBSSxJQUFJLE9BQU8sZUFBZSxhQUFhLEdBQUc7QUFDN0MsOEJBQWdCO0FBQUEsWUFDaEI7QUFFRCxnQkFBSSxTQUFTLFNBQVMsR0FBRztBQUN4QixzQkFBUSxJQUFJLFNBQVMsV0FBVyxPQUFPLGFBQWE7QUFBQSxZQUNwRDtBQUVELG1CQUFPO0FBQUEsVUFDUDtBQUFBO0FBQUEsVUFFRCxrQkFBa0IsU0FBUyxTQUFTLFVBQVUsZUFBZSxtQkFBbUIsWUFBWTtBQUMzRixnQkFBSSxlQUFlO0FBR25CLGdCQUFJLGFBQWEsVUFBVTtBQUUxQixrQkFBSSxXQUFXLFdBQVc7QUFDekIsMkJBQVcsVUFBVSxXQUFXLFdBQVcsU0FBUyxJQUFJO0FBQUEsY0FFOUQsT0FBWTtBQUNOLG9CQUFJLFdBQVcsY0FBYyxRQUFRO0FBQ3BDLGtCQUFBRixRQUFPLFNBQVMsZUFBZSxXQUFXLGNBQWM7QUFBQSxnQkFDL0QsT0FBYTtBQUNOLGtCQUFBQSxRQUFPLFNBQVMsV0FBVyxnQkFBZ0IsYUFBYTtBQUFBLGdCQUN4RDtBQUFBLGNBQ0Q7QUFBQSxZQUNOLE9BQVc7QUFHTixrQkFBSSxJQUFJLGVBQWUsV0FBVyxRQUFRLEtBQUssSUFBSSxlQUFlLFdBQVcsUUFBUSxFQUFFLFFBQVEsT0FBTyxNQUFNLGFBQWE7QUFHeEgsb0JBQUksZUFBZSxXQUFXLFFBQVEsRUFBRSxVQUFVLFNBQVMsYUFBYTtBQUV4RSwrQkFBZTtBQUNmLGdDQUFnQixLQUFLLE9BQU8sRUFBRSxlQUFlLFFBQVE7QUFBQSxjQUMzRCxPQUFZO0FBRU4sb0JBQUksSUFBSSxNQUFNLFdBQVcsUUFBUSxHQUFHO0FBQ25DLHNCQUFJLFdBQVcsVUFDYixXQUFXLElBQUksTUFBTSxRQUFRLFFBQVE7QUFHdkMsc0NBQW9CLHFCQUFxQixJQUFJLGlCQUFpQixTQUFTLFFBQVE7QUFFL0Usa0NBQWdCLElBQUksTUFBTSxZQUFZLFVBQVUsZUFBZSxpQkFBaUI7QUFDaEYsNkJBQVc7QUFBQSxnQkFDWDtBQUdELG9CQUFJLElBQUksZUFBZSxXQUFXLFFBQVEsR0FBRztBQUM1QyxrQ0FBZ0IsSUFBSSxlQUFlLFdBQVcsUUFBUSxFQUFFLFVBQVUsU0FBUyxhQUFhO0FBQ3hGLDZCQUFXLElBQUksZUFBZSxXQUFXLFFBQVEsRUFBRSxRQUFRLE9BQU87QUFBQSxnQkFDbEU7QUFHRCwrQkFBZSxJQUFJLE1BQU0sWUFBWSxRQUFRLEVBQUUsQ0FBQztBQUloRCxvQkFBSSxNQUFNLEdBQUc7QUFDWixzQkFBSTtBQUNILDRCQUFRLE1BQU0sWUFBWSxJQUFJO0FBQUEsa0JBQzlCLFNBQVEsT0FBTztBQUNmLHdCQUFJLFNBQVMsT0FBTztBQUNuQiw4QkFBUSxJQUFJLCtCQUErQixnQkFBZ0IsWUFBWSxlQUFlLEdBQUc7QUFBQSxvQkFDekY7QUFBQSxrQkFDRDtBQUFBLGdCQUdSLE9BQWE7QUFDTixzQkFBSSxPQUFPLEtBQUssT0FBTztBQUV2QixzQkFBSSxRQUFRLEtBQUssU0FBUyxJQUFJLE1BQU0sYUFBYSxRQUFRLEdBQUc7QUFHM0QsNEJBQVEsYUFBYSxVQUFVLGFBQWE7QUFBQSxrQkFDcEQsT0FBYztBQUNOLDRCQUFRLE1BQU0sWUFBWSxJQUFJO0FBQUEsa0JBQzlCO0FBQUEsZ0JBQ0Q7QUFFRCxvQkFBSSxTQUFTLFNBQVMsR0FBRztBQUN4QiwwQkFBUSxJQUFJLFNBQVMsV0FBVyxPQUFPLGVBQWUsUUFBUSxhQUFhO0FBQUEsZ0JBQzNFO0FBQUEsY0FDRDtBQUFBLFlBQ0Q7QUFHRCxtQkFBTyxDQUFDLGNBQWMsYUFBYTtBQUFBLFVBQ25DO0FBQUE7QUFBQTtBQUFBLFVBR0QscUJBQXFCLFNBQVMsU0FBUztBQUN0QyxnQkFBSSxrQkFBa0IsSUFDcEIsT0FBTyxLQUFLLE9BQU87QUFJckIsaUJBQUssTUFBTyxTQUFTLE1BQU0sYUFBYSxDQUFDLFNBQVMsTUFBTSxhQUFjLFFBQVEsS0FBSyxPQUFPO0FBR3pGLGtCQUFJLG9CQUFvQixTQUFTLG1CQUFtQjtBQUNuRCx1QkFBTyxXQUFXLElBQUksaUJBQWlCLFNBQVMsaUJBQWlCLENBQUM7QUFBQSxjQUN4RTtBQUlLLGtCQUFJLGdCQUFnQjtBQUFBLGdCQUNuQixXQUFXLENBQUMsa0JBQWtCLFlBQVksR0FBRyxrQkFBa0IsWUFBWSxDQUFDO0FBQUEsZ0JBQzVFLE9BQU8sQ0FBQyxrQkFBa0IsT0FBTyxDQUFDO0FBQUEsZ0JBQUcsT0FBTyxDQUFDLGtCQUFrQixPQUFPLENBQUM7QUFBQTtBQUFBO0FBQUEsZ0JBR3ZFLE9BQU8sa0JBQWtCLE9BQU8sTUFBTSxJQUFJLENBQUMsa0JBQWtCLE9BQU8sR0FBRyxrQkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsUUFBUSxHQUFHLGtCQUFrQixRQUFRLENBQUM7QUFBQTtBQUFBO0FBQUEsZ0JBRzlKLFFBQVEsQ0FBQyxrQkFBa0IsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUFBLGNBQ2pEO0FBSUssY0FBQUQsR0FBRSxLQUFLLEtBQUssT0FBTyxFQUFFLGdCQUFnQixTQUFTLGVBQWU7QUFHNUQsb0JBQUksY0FBYyxLQUFLLGFBQWEsR0FBRztBQUN0QyxrQ0FBZ0I7QUFBQSxnQkFDaEIsV0FBVSxVQUFVLEtBQUssYUFBYSxHQUFHO0FBQ3pDLGtDQUFnQjtBQUFBLGdCQUNoQixXQUFVLFdBQVcsS0FBSyxhQUFhLEdBQUc7QUFDMUMsa0NBQWdCO0FBQUEsZ0JBQ2hCO0FBR0Qsb0JBQUksY0FBYyxhQUFhLEdBQUc7QUFFakMscUNBQW1CLGdCQUFnQixNQUFNLGNBQWMsYUFBYSxFQUFFLEtBQUssR0FBRyxJQUFJO0FBSWxGLHlCQUFPLGNBQWMsYUFBYTtBQUFBLGdCQUNsQztBQUFBLGNBQ1AsQ0FBTTtBQUFBLFlBQ04sT0FBVztBQUNOLGtCQUFJLGdCQUNGO0FBR0YsY0FBQUEsR0FBRSxLQUFLLEtBQUssT0FBTyxFQUFFLGdCQUFnQixTQUFTLGVBQWU7QUFDNUQsaUNBQWlCLEtBQUssT0FBTyxFQUFFLGVBQWUsYUFBYTtBQUczRCxvQkFBSSxrQkFBa0Isd0JBQXdCO0FBQzdDLGdDQUFjO0FBQ2QseUJBQU87QUFBQSxnQkFDUDtBQUdELG9CQUFJLE9BQU8sS0FBSyxrQkFBa0IsV0FBVztBQUM1QyxrQ0FBZ0I7QUFBQSxnQkFDaEI7QUFFRCxtQ0FBbUIsZ0JBQWdCLGlCQUFpQjtBQUFBLGNBQzFELENBQU07QUFHRCxrQkFBSSxhQUFhO0FBQ2hCLGtDQUFrQixnQkFBZ0IsY0FBYyxNQUFNO0FBQUEsY0FDdEQ7QUFBQSxZQUNEO0FBRUQsZ0JBQUksaUJBQWlCLFNBQVMsYUFBYSxlQUFlO0FBQUEsVUFDMUQ7QUFBQSxRQUNKO0FBR0UsWUFBSSxNQUFNO0FBQ1YsWUFBSSxlQUFlO0FBR25CLGlCQUFTLE9BQU8sU0FBUyxVQUFVLE1BQU0sTUFBTTtBQUM5QyxjQUFJO0FBRUoscUJBQVcsaUJBQWlCLFFBQVE7QUFFcEMsVUFBQUEsR0FBRSxLQUFLLFVBQVUsU0FBUyxHQUFHLFNBQVM7QUFFckMsZ0JBQUksS0FBSyxPQUFPLE1BQU1HLGFBQVc7QUFDaEMsdUJBQVMsS0FBSyxPQUFPO0FBQUEsWUFDckI7QUFHRCxnQkFBSSxTQUFTQSxhQUFXO0FBQ3ZCLGtCQUFJLFVBQVVBLGFBQVc7QUFDeEIsd0JBQVEsSUFBSSxpQkFBaUIsU0FBUyxJQUFJO0FBQUEsY0FDMUM7QUFBQSxZQUVOLE9BQVc7QUFFTixrQkFBSSxjQUFjLElBQUksaUJBQWlCLFNBQVMsTUFBTSxJQUFJO0FBRzFELGtCQUFJLFlBQVksQ0FBQyxNQUFNLGFBQWE7QUFDbkMseUJBQVMsSUFBSSxvQkFBb0IsT0FBTztBQUFBLGNBQ3hDO0FBRUQsc0JBQVE7QUFBQSxZQUNSO0FBQUEsVUFDTCxDQUFJO0FBRUQsaUJBQU87QUFBQSxRQUNWO0FBTUUsWUFBSSxVQUFVLFdBQVc7QUFDeEIsY0FBSTtBQU9KLG1CQUFTLFdBQVc7QUFHbkIsZ0JBQUksV0FBVztBQUNkLHFCQUFPLFlBQVksV0FBVztBQUFBLFlBRW5DLE9BQVc7QUFDTixxQkFBTztBQUFBLFlBQ1A7QUFBQSxVQUNEO0FBU0QsY0FBSSxpQkFBa0IsVUFBVSxDQUFDLE1BQU0sVUFBVSxDQUFDLEVBQUUsTUFBT0gsR0FBRSxjQUFjLFVBQVUsQ0FBQyxFQUFFLFVBQVUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFdBQVcsU0FBVSxLQUFLLFNBQVMsVUFBVSxDQUFDLEVBQUUsVUFBVSxLQUU3SyxXQUdBLGlCQUNBO0FBRUYsY0FBSSxVQUNGLGVBQ0E7QUFHRixjQUFJLEtBQUssVUFBVSxJQUFJLEdBQUc7QUFDekIsd0JBQVk7QUFFWiw0QkFBZ0I7QUFDaEIsdUJBQVc7QUFDWCw4QkFBa0I7QUFBQSxVQUV0QixPQUFVO0FBQ04sd0JBQVk7QUFFWiw0QkFBZ0I7QUFDaEIsdUJBQVcsaUJBQWtCLFVBQVUsQ0FBQyxFQUFFLFlBQVksVUFBVSxDQUFDLEVBQUUsSUFBSyxVQUFVLENBQUM7QUFBQSxVQUNuRjtBQU1ELGNBQUksY0FBYztBQUFBLFlBQ2pCLFNBQVM7QUFBQSxZQUNULFVBQVU7QUFBQSxZQUNWLFVBQVU7QUFBQSxVQUNkO0FBU0csY0FBSSxhQUFhLFNBQVMsU0FBUztBQUNsQyx3QkFBWSxVQUFVLElBQUksU0FBUyxRQUFRLFNBQVMsU0FBUyxRQUFRO0FBQ3BFLDBCQUFZLFdBQVc7QUFDdkIsMEJBQVksV0FBVztBQUFBLFlBQzVCLENBQUs7QUFBQSxVQUNEO0FBRUQsY0FBSSxnQkFBZ0I7QUFDbkIsNEJBQWdCLFVBQVUsQ0FBQyxFQUFFLGNBQWMsVUFBVSxDQUFDLEVBQUU7QUFDeEQsc0JBQVUsVUFBVSxDQUFDLEVBQUUsV0FBVyxVQUFVLENBQUMsRUFBRTtBQUFBLFVBQ25ELE9BQVU7QUFDTiw0QkFBZ0IsVUFBVSxhQUFhO0FBQ3ZDLHNCQUFVLFVBQVUsZ0JBQWdCLENBQUM7QUFBQSxVQUNyQztBQUVELHFCQUFXLGlCQUFpQixRQUFRO0FBRXBDLGNBQUksQ0FBQyxVQUFVO0FBQ2QsZ0JBQUksWUFBWSxTQUFTO0FBQ3hCLGtCQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxRQUFRLHVCQUF1QixPQUFPO0FBQ3ZFLDRCQUFZLFNBQVE7QUFBQSxjQUMxQixPQUFZO0FBQ04sNEJBQVksU0FBUTtBQUFBLGNBQ3BCO0FBQUEsWUFDRDtBQUNEO0FBQUEsVUFDQTtBQUlELGNBQUksaUJBQWlCLFNBQVMsUUFDNUIsZ0JBQWdCO0FBU2xCLGNBQUksQ0FBQywwQ0FBMEMsS0FBSyxhQUFhLEtBQUssQ0FBQ0EsR0FBRSxjQUFjLE9BQU8sR0FBRztBQUVoRyxnQkFBSSwyQkFBMkIsZ0JBQWdCO0FBRS9DLHNCQUFVLENBQUE7QUFHVixxQkFBUyxJQUFJLDBCQUEwQixJQUFJLFVBQVUsUUFBUSxLQUFLO0FBSWpFLGtCQUFJLENBQUMsS0FBSyxRQUFRLFVBQVUsQ0FBQyxDQUFDLE1BQU0sd0JBQXdCLEtBQUssVUFBVSxDQUFDLENBQUMsS0FBSyxNQUFNLEtBQUssVUFBVSxDQUFDLENBQUMsSUFBSTtBQUM1Ryx3QkFBUSxXQUFXLFVBQVUsQ0FBQztBQUFBLGNBRTlCLFdBQVUsS0FBSyxTQUFTLFVBQVUsQ0FBQyxDQUFDLEtBQUssS0FBSyxRQUFRLFVBQVUsQ0FBQyxDQUFDLEdBQUc7QUFDckUsd0JBQVEsU0FBUyxVQUFVLENBQUM7QUFBQSxjQUU1QixXQUFVLEtBQUssV0FBVyxVQUFVLENBQUMsQ0FBQyxHQUFHO0FBQ3pDLHdCQUFRLFdBQVcsVUFBVSxDQUFDO0FBQUEsY0FDOUI7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQVVELGNBQUk7QUFFSixrQkFBUSxlQUFhO0FBQUEsWUFDcEIsS0FBSztBQUNKLHVCQUFTO0FBQ1Q7QUFBQSxZQUVELEtBQUs7QUFDSix1QkFBUztBQUNUO0FBQUEsWUFFRCxLQUFLO0FBTUosa0JBQUksZUFBZSxvQkFBSSxLQUFNLEdBQUUsUUFBTztBQUd0QyxjQUFBQSxHQUFFLEtBQUssVUFBVSxTQUFTWSxJQUFHLFNBQVM7QUFDckMsb0NBQW9CLFNBQVMsV0FBVztBQUFBLGNBQzlDLENBQU07QUFPRCxjQUFBWixHQUFFLEtBQUssU0FBUyxNQUFNLE9BQU8sU0FBU1ksSUFBRyxZQUFZO0FBRXBELG9CQUFJLFFBQVE7QUFFWixvQkFBSSxZQUFZO0FBRWYsa0JBQUFaLEdBQUUsS0FBSyxXQUFXLENBQUMsR0FBRyxTQUFTLEdBQUcsZUFBZTtBQUNoRCx3QkFBSSxZQUFhLFlBQVlHLGNBQWEsS0FBSztBQUUvQyx3QkFBSSxjQUFjLFFBQVMsV0FBVyxDQUFDLEVBQUUsVUFBVSxhQUFjLEVBQUUsWUFBWUEsZUFBYSxXQUFXLENBQUMsRUFBRSxVQUFVLFFBQVE7QUFDM0gsNkJBQU87QUFBQSxvQkFDUDtBQUdELG9CQUFBSCxHQUFFLEtBQUssVUFBVSxTQUFTLEdBQUcsU0FBUztBQUVyQywwQkFBSSxZQUFZLGVBQWU7QUFHOUIsbUNBQVcsQ0FBQyxJQUFJO0FBQUEsMEJBQ2YsUUFBUTtBQUFBLHdCQUNuQjtBQUdVLGdDQUFRO0FBQ1IsK0JBQU87QUFBQSxzQkFDUDtBQUFBLG9CQUNWLENBQVM7QUFHRCx3QkFBSSxPQUFPO0FBQ1YsNkJBQU87QUFBQSxvQkFDUDtBQUFBLGtCQUNULENBQVE7QUFBQSxnQkFDRDtBQUFBLGNBRVAsQ0FBTTtBQUdELHFCQUFPLFNBQVE7QUFBQSxZQUVoQixLQUFLO0FBT0osY0FBQUEsR0FBRSxLQUFLLFVBQVUsU0FBU1ksSUFBRyxTQUFTO0FBQ3JDLHFDQUFxQixPQUFvQjtBQUFBLGNBQy9DLENBQU07QUFPRCxjQUFBWixHQUFFLEtBQUssU0FBUyxNQUFNLE9BQU8sU0FBU1ksSUFBRyxZQUFZO0FBQ3BELG9CQUFJLFFBQVE7QUFFWixvQkFBSSxZQUFZO0FBRWYsa0JBQUFaLEdBQUUsS0FBSyxXQUFXLENBQUMsR0FBRyxTQUFTLEdBQUcsZUFBZTtBQUNoRCx3QkFBSSxZQUFhLFlBQVlHLGNBQWEsS0FBSztBQUUvQyx3QkFBSSxjQUFjLFFBQVMsV0FBVyxDQUFDLEVBQUUsVUFBVSxhQUFjLEVBQUUsWUFBWUEsZUFBYSxXQUFXLENBQUMsRUFBRSxVQUFVLFFBQVE7QUFDM0gsNkJBQU87QUFBQSxvQkFDUDtBQUdELHdCQUFJLENBQUMsV0FBVyxDQUFDLEdBQUc7QUFDbkIsNkJBQU87QUFBQSxvQkFDUDtBQUdELG9CQUFBSCxHQUFFLEtBQUssVUFBVSxTQUFTLEdBQUcsU0FBUztBQUVyQywwQkFBSSxZQUFZLGVBQWU7QUFJOUIsbUNBQVcsQ0FBQyxFQUFFLFNBQVM7QUFHdkIsZ0NBQVE7QUFDUiwrQkFBTztBQUFBLHNCQUNQO0FBQUEsb0JBQ1YsQ0FBUztBQUdELHdCQUFJLE9BQU87QUFDViw2QkFBTztBQUFBLG9CQUNQO0FBQUEsa0JBQ1QsQ0FBUTtBQUFBLGdCQUNEO0FBQUEsY0FFUCxDQUFNO0FBR0QscUJBQU8sU0FBUTtBQUFBLFlBRWhCLEtBQUs7QUFBQSxZQUNMLEtBQUs7QUFBQSxZQUNMLEtBQUs7QUFNSixjQUFBQSxHQUFFLEtBQUssVUFBVSxTQUFTWSxJQUFHLFNBQVM7QUFDckMsb0JBQUksS0FBSyxPQUFPLEtBQUssS0FBSyxPQUFPLEVBQUUsWUFBWTtBQUU5QywrQkFBYSxLQUFLLE9BQU8sRUFBRSxXQUFXLFVBQVU7QUFHaEQsc0JBQUksS0FBSyxPQUFPLEVBQUUsV0FBVyxNQUFNO0FBQ2xDLHlCQUFLLE9BQU8sRUFBRSxXQUFXLEtBQUk7QUFBQSxrQkFDN0I7QUFFRCx5QkFBTyxLQUFLLE9BQU8sRUFBRTtBQUFBLGdCQUNyQjtBQUtELG9CQUFJLGtCQUFrQixnQkFBZ0IsWUFBWSxRQUFRLEtBQUssU0FBUyxPQUFPLElBQUk7QUFFbEYsa0JBQUFaLEdBQUUsS0FBS0EsR0FBRSxNQUFNLFNBQVMsS0FBSyxTQUFTLE9BQU8sSUFBSSxVQUFVLEVBQUUsR0FBRyxTQUFTLEdBQUcsTUFBTTtBQUVqRix3QkFBSSxLQUFLLFdBQVcsSUFBSSxHQUFHO0FBQzFCO29CQUNBO0FBQUEsa0JBQ1QsQ0FBUTtBQUdELGtCQUFBQSxHQUFFLE1BQU0sU0FBUyxLQUFLLFNBQVMsT0FBTyxJQUFJLFVBQVUsSUFBSSxDQUFBLENBQUU7QUFBQSxnQkFDMUQ7QUFBQSxjQUNQLENBQU07QUFFRCxrQkFBSSxjQUFjLENBQUE7QUFXbEIsY0FBQUEsR0FBRSxLQUFLLFNBQVMsTUFBTSxPQUFPLFNBQVNZLElBQUcsWUFBWTtBQUVwRCxvQkFBSSxZQUFZO0FBRWYsa0JBQUFaLEdBQUUsS0FBSyxXQUFXLENBQUMsR0FBRyxTQUFTLEdBQUcsZUFBZTtBQVFoRCx3QkFBSSxZQUFhLFlBQVlHLGNBQWEsS0FBSztBQUUvQyx3QkFBSSxjQUFjLFFBQVMsV0FBVyxDQUFDLEVBQUUsVUFBVSxhQUFjLEVBQUUsWUFBWUEsZUFBYSxXQUFXLENBQUMsRUFBRSxVQUFVLFFBQVE7QUFDM0gsNkJBQU87QUFBQSxvQkFDUDtBQUdELG9CQUFBSCxHQUFFLEtBQUssVUFBVSxTQUFTLEdBQUcsU0FBUztBQUVyQywwQkFBSSxZQUFZLGVBQWU7QUFHOUIsNEJBQUksWUFBWSxRQUFRLEtBQUssU0FBUyxPQUFPLEdBQUc7QUFFL0MsMEJBQUFBLEdBQUUsS0FBS0EsR0FBRSxNQUFNLFNBQVMsS0FBSyxTQUFTLE9BQU8sSUFBSSxVQUFVLEVBQUUsR0FBRyxTQUFTLEdBQUcsTUFBTTtBQUVqRixnQ0FBSSxLQUFLLFdBQVcsSUFBSSxHQUFHO0FBRzFCLG1DQUFLLE1BQU0sSUFBSTtBQUFBLDRCQUNmO0FBQUEsMEJBQ2IsQ0FBWTtBQUdELDBCQUFBQSxHQUFFLE1BQU0sU0FBUyxLQUFLLFNBQVMsT0FBTyxJQUFJLFVBQVUsSUFBSSxDQUFBLENBQUU7QUFBQSx3QkFDMUQ7QUFFRCw0QkFBSSxrQkFBa0IsUUFBUTtBQUs3Qiw4QkFBSSxPQUFPLEtBQUssT0FBTztBQUN2Qiw4QkFBSSxRQUFRLEtBQUssb0JBQW9CLGNBQWMsUUFBUSxjQUFjLEtBQUs7QUFDN0UsNEJBQUFBLEdBQUUsS0FBSyxLQUFLLGlCQUFpQixTQUFTLEdBQUcsYUFBYTtBQUNyRCwwQ0FBWSxXQUFXLFlBQVk7QUFBQSw0QkFDaEQsQ0FBYTtBQUFBLDBCQUNEO0FBRUQsc0NBQVksS0FBS1ksRUFBQztBQUFBLHdCQUNsQixXQUFVLGtCQUFrQixZQUFZLGtCQUFrQixhQUFhO0FBR3ZFLHFDQUFXLENBQUMsRUFBRSxXQUFXO0FBQUEsd0JBQ3pCO0FBQUEsc0JBQ0Q7QUFBQSxvQkFDVixDQUFTO0FBQUEsa0JBQ1QsQ0FBUTtBQUFBLGdCQUNEO0FBQUEsY0FDUCxDQUFNO0FBSUQsa0JBQUksa0JBQWtCLFFBQVE7QUFDN0IsZ0JBQUFaLEdBQUUsS0FBSyxhQUFhLFNBQVNZLElBQUcsR0FBRztBQUNsQywrQkFBYSxHQUFHLElBQUk7QUFBQSxnQkFDM0IsQ0FBTztBQUVELG9CQUFJLFlBQVksU0FBUztBQUV4Qiw4QkFBWSxTQUFTLFFBQVE7QUFBQSxnQkFDN0I7QUFBQSxjQUNEO0FBR0QscUJBQU8sU0FBUTtBQUFBLFlBRWhCO0FBRUMsa0JBQUlaLEdBQUUsY0FBYyxhQUFhLEtBQUssQ0FBQyxLQUFLLGNBQWMsYUFBYSxHQUFHO0FBQ3pFLHlCQUFTO0FBQUEsY0FPZixXQUFnQixLQUFLLFNBQVMsYUFBYSxLQUFLLFNBQVMsVUFBVSxhQUFhLEdBQUc7QUFDN0UsdUJBQU9BLEdBQUUsT0FBTyxDQUFFLEdBQUUsT0FBTztBQUUzQixvQkFBSSxtQkFBbUIsS0FBSyxVQUMxQixnQkFBZ0IsS0FBSyxTQUFTO0FBR2hDLG9CQUFJLEtBQUssY0FBYyxNQUFNO0FBQzVCLDZCQUFXQSxHQUFFLE9BQU8sTUFBTSxDQUFBLEdBQUksUUFBUSxFQUFFO2dCQUN4QztBQUdELGdCQUFBQSxHQUFFLEtBQUssVUFBVSxTQUFTLGNBQWMsU0FBUztBQUVoRCxzQkFBSSxXQUFXLEtBQUssT0FBTyxHQUFHO0FBQzdCLHlCQUFLLFFBQVEsZ0JBQWlCLFdBQVcsS0FBSyxPQUFPLElBQUk7QUFBQSxrQkFDekQsV0FBVSxLQUFLLFdBQVcsS0FBSyxPQUFPLEdBQUc7QUFDekMseUJBQUssUUFBUSxnQkFBZ0IsS0FBSyxRQUFRLEtBQUssU0FBUyxjQUFjLGNBQWM7QUFBQSxrQkFDcEY7QUFJRCxzQkFBSSxLQUFLLE1BQU07QUFFZCx5QkFBSyxXQUFXLFdBQVcsZ0JBQWdCLE1BQU0sd0JBQXdCLEtBQUssYUFBYSxJQUFJLE1BQU87QUFLdEcseUJBQUssV0FBVyxLQUFLLElBQUksS0FBSyxZQUFZLEtBQUssWUFBWSxJQUFJLGVBQWUsa0JBQWtCLGVBQWUsS0FBSyxpQkFBaUIsS0FBSyxXQUFXLE1BQU0sR0FBRztBQUFBLGtCQUM5SjtBQUlELDJCQUFTLFVBQVUsYUFBYSxFQUFFLEtBQUssU0FBUyxTQUFTLFFBQVEsQ0FBRSxHQUFFLGNBQWMsZ0JBQWdCLFVBQVUsWUFBWSxVQUFVLGNBQWNHLFdBQVM7QUFBQSxnQkFDakssQ0FBTztBQUtELHVCQUFPLFNBQVE7QUFBQSxjQUNyQixPQUFZO0FBQ04sb0JBQUksYUFBYSwrQkFBK0IsZ0JBQWdCO0FBRWhFLG9CQUFJLFlBQVksU0FBUztBQUN4Qiw4QkFBWSxTQUFTLElBQUksTUFBTSxVQUFVLENBQUM7QUFBQSxnQkFDakQsV0FBaUJGLFFBQU8sU0FBUztBQUMxQiwwQkFBUSxJQUFJLFVBQVU7QUFBQSxnQkFDdEI7QUFFRCx1QkFBTyxTQUFRO0FBQUEsY0FDZjtBQUFBLFVBQ0Y7QUFVRCxjQUFJLHlCQUF5QjtBQUFBLFlBQzVCLFlBQVk7QUFBQSxZQUNaLGNBQWM7QUFBQSxZQUNkLGNBQWM7QUFBQSxZQUNkLHNCQUFzQjtBQUFBLFlBQ3RCLHVCQUF1QjtBQUFBLFlBQ3ZCLFlBQVk7QUFBQSxZQUNaLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxZQUNSLFFBQVE7QUFBQSxVQUNaO0FBSUcsY0FBSSxPQUFPLENBQUE7QUFhWCxtQkFBUyxlQUFlLFNBQVMsbUJBQW1CO0FBVW5ELGdCQUNFbUMsUUFBT3BDLEdBQUUsT0FBTyxDQUFFLEdBQUUsU0FBUyxVQUFVLE9BQU8sR0FHOUMsa0JBQWtCLENBQUUsR0FDcEI7QUFNRixnQkFBSSxLQUFLLE9BQU8sTUFBTUcsYUFBVztBQUNoQyx1QkFBUyxLQUFLLE9BQU87QUFBQSxZQUNyQjtBQVNELGdCQUFJLFdBQVdpQyxNQUFLLEtBQUssS0FBS0EsTUFBSyxVQUFVLE9BQU87QUFDbkQsY0FBQXBDLEdBQUUsTUFBTSxTQUFTb0MsTUFBSyxPQUFPLFNBQVMsTUFBTSxZQUFZO0FBQ3ZELG9CQUFJLGVBQWUsTUFBTTtBQUV4Qix5QkFBTztBQUFBLGdCQUNQO0FBR0QseUJBQVMseUJBQXlCO0FBT2xDLG9CQUFJQyxhQUFZLFNBQVMsTUFBTSxnQkFBZ0I7QUFDL0MseUJBQVMsTUFBTSxnQkFBZ0JBLFVBQVMsSUFBSTtBQUU1QyxvQkFBSUMsaUJBQWlCLFNBQVMsT0FBTztBQUNwQyx5QkFBTyxXQUFXO0FBRWpCLDZCQUFTLE1BQU0sZ0JBQWdCLEtBQUssSUFBSTtBQUd4QztrQkFDUjtBQUFBLGdCQUNPLEVBQUVELFVBQVM7QUFHWixxQkFBSyxPQUFPLEVBQUUsY0FBYyxvQkFBSSxLQUFJLEdBQUk7QUFDeEMscUJBQUssT0FBTyxFQUFFLFFBQVEsV0FBV0QsTUFBSyxLQUFLO0FBQzNDLHFCQUFLLE9BQU8sRUFBRSxhQUFhO0FBQUEsa0JBQzFCLFlBQVksV0FBVyxNQUFNLFdBQVdBLE1BQUssS0FBSyxDQUFDO0FBQUEsa0JBQ25ELE1BQU1FO0FBQUEsZ0JBQ2I7QUFBQSxjQUNBLENBQU07QUFBQSxZQUNEO0FBT0Qsb0JBQVFGLE1BQUssU0FBUyxTQUFRLEVBQUcsWUFBYSxHQUFBO0FBQUEsY0FDN0MsS0FBSztBQUNKLGdCQUFBQSxNQUFLLFdBQVc7QUFDaEI7QUFBQSxjQUVELEtBQUs7QUFDSixnQkFBQUEsTUFBSyxXQUFXO0FBQ2hCO0FBQUEsY0FFRCxLQUFLO0FBQ0osZ0JBQUFBLE1BQUssV0FBVztBQUNoQjtBQUFBLGNBRUQ7QUFFQyxnQkFBQUEsTUFBSyxXQUFXLFdBQVdBLE1BQUssUUFBUSxLQUFLO0FBQUEsWUFDOUM7QUFNRCxnQkFBSSxTQUFTLFNBQVMsT0FBTztBQUc1QixrQkFBSSxTQUFTLFNBQVMsTUFBTTtBQUMzQixnQkFBQUEsTUFBSyxXQUFXQSxNQUFLLFFBQVE7QUFBQSxjQUNuQyxPQUFZO0FBQ04sZ0JBQUFBLE1BQUssWUFBWSxXQUFXLFNBQVMsSUFBSSxLQUFLO0FBQzlDLGdCQUFBQSxNQUFLLFNBQVMsV0FBVyxTQUFTLElBQUksS0FBSztBQUFBLGNBQzNDO0FBQUEsWUFDRDtBQU1ELFlBQUFBLE1BQUssU0FBUyxVQUFVQSxNQUFLLFFBQVFBLE1BQUssUUFBUTtBQU9sRCxnQkFBSUEsTUFBSyxTQUFTLENBQUMsS0FBSyxXQUFXQSxNQUFLLEtBQUssR0FBRztBQUMvQyxjQUFBQSxNQUFLLFFBQVE7QUFBQSxZQUNiO0FBRUQsZ0JBQUlBLE1BQUssWUFBWSxDQUFDLEtBQUssV0FBV0EsTUFBSyxRQUFRLEdBQUc7QUFDckQsY0FBQUEsTUFBSyxXQUFXO0FBQUEsWUFDaEI7QUFFRCxnQkFBSUEsTUFBSyxZQUFZLENBQUMsS0FBSyxXQUFXQSxNQUFLLFFBQVEsR0FBRztBQUNyRCxjQUFBQSxNQUFLLFdBQVc7QUFBQSxZQUNoQjtBQVFELGdCQUFJQSxNQUFLLFlBQVlqQyxlQUFhaUMsTUFBSyxZQUFZLE1BQU07QUFDeEQsY0FBQUEsTUFBSyxVQUFVQSxNQUFLLFFBQVEsU0FBUSxFQUFHO0FBR3ZDLGtCQUFJQSxNQUFLLFlBQVksUUFBUTtBQUM1QixnQkFBQUEsTUFBSyxVQUFVLFNBQVMsSUFBSSxPQUFPLGVBQWUsT0FBTztBQUFBLGNBQ3pEO0FBQUEsWUFDRDtBQUVELGdCQUFJQSxNQUFLLGVBQWVqQyxlQUFhaUMsTUFBSyxlQUFlLE1BQU07QUFDOUQsY0FBQUEsTUFBSyxhQUFhQSxNQUFLLFdBQVcsU0FBUSxFQUFHO1lBQzdDO0FBVUQsWUFBQUEsTUFBSyxXQUFZQSxNQUFLLFlBQVksU0FBUyxNQUFNLFlBQVksQ0FBQyxTQUFTLE1BQU07QUFVN0UscUJBQVMsV0FBVyxNQUFNO0FBQ3pCLGtCQUFJLE1BQU07QUFPVixrQkFBSUEsTUFBSyxTQUFTLGtCQUFrQixHQUFHO0FBRXRDLG9CQUFJO0FBQ0gsa0JBQUFBLE1BQUssTUFBTSxLQUFLLFVBQVUsUUFBUTtBQUFBLGdCQUNsQyxTQUFRLE9BQU87QUFDZiw2QkFBVyxXQUFXO0FBQ3JCLDBCQUFNO0FBQUEsa0JBQ04sR0FBRSxDQUFDO0FBQUEsZ0JBQ0o7QUFBQSxjQUNEO0FBT0Qsa0JBQUksV0FBVyxVQUFVO0FBRXhCLG9CQUFJLGtCQUFtQixPQUFPLEtBQUtBLE1BQUssSUFBSSxJQUFJLFNBQVMsT0FDdkQsZUFBZSxXQUFXQSxNQUFLLE1BQU0sS0FBSyxHQUMxQyx1QkFDQSxnQ0FDQTtBQUlGLG9CQUFJQSxNQUFLLFdBQVc7QUFFbkIsc0JBQUksS0FBSyxVQUFVQSxNQUFLLFNBQVMsS0FBSyxLQUFLLE9BQU9BLE1BQUssU0FBUyxHQUFHO0FBRWxFLG9CQUFBQSxNQUFLLFlBQVlBLE1BQUssVUFBVSxDQUFDLEtBQUtBLE1BQUs7QUFHM0MsNENBQXdCQSxNQUFLLFVBQVUsV0FBVyxlQUFlO0FBS2pFLHdDQUFxQix3QkFBd0JwQyxHQUFFLE9BQU8sRUFBRSxTQUFVLEVBQUMsZ0JBQWdCLGFBQWEsSUFBSztBQUFBLGtCQUU3RyxPQUFjO0FBQ04sb0JBQUFvQyxNQUFLLFlBQVk7QUFBQSxrQkFDakI7QUFBQSxnQkFDUixPQUFhO0FBR04sMENBQXdCLFNBQVMsTUFBTSxhQUFhLFNBQVMsTUFBTSxtQkFBbUIsZUFBZSxDQUFDO0FBRXRHLG1EQUFpQyxTQUFTLE1BQU0sYUFBYSxTQUFTLE1BQU0sb0JBQW9CLG9CQUFvQixTQUFTLFFBQVEsT0FBTyxDQUFDO0FBSTdJLHNDQUFvQnBDLEdBQUUsT0FBTyxFQUFFLE9BQVEsRUFBQyxnQkFBZ0IsYUFBYSxJQUFJO0FBQUEsZ0JBQ3pFO0FBR0Qsa0NBQWtCO0FBQUEsa0JBQ2pCLFFBQVE7QUFBQSxvQkFDUCxtQkFBbUI7QUFBQSxvQkFDbkIsWUFBWTtBQUFBLG9CQUNaLGNBQWM7QUFBQSxvQkFDZCxVQUFVO0FBQUEsb0JBQ1YsVUFBVTtBQUFBLG9CQUNWLFFBQVFvQyxNQUFLO0FBQUEsb0JBQ2IsWUFBWTtBQUFBLHNCQUNYLFdBQVdBLE1BQUs7QUFBQSxzQkFDaEIsV0FBVztBQUFBLHNCQUNYLGdCQUFnQjtBQUFBLG9CQUNoQjtBQUFBLGtCQUNEO0FBQUEsa0JBQ0Q7QUFBQSxnQkFDUDtBQUVNLG9CQUFJLFNBQVMsT0FBTztBQUNuQiwwQkFBUSxJQUFJLDhCQUE4QixnQkFBZ0IsUUFBUSxPQUFPO0FBQUEsZ0JBQ3pFO0FBQUEsY0FhUCxXQUFnQixXQUFXLFdBQVc7QUFDaEMsdUJBQU8sS0FBSyxPQUFPO0FBR25CLG9CQUFJLENBQUMsTUFBTTtBQUNWO0FBQUEsZ0JBQ0E7QUFFRCxvQkFBSSxDQUFDLEtBQUssaUJBQWlCO0FBRTFCLGtCQUFBcEMsR0FBRSxRQUFRLFNBQVNvQyxNQUFLLEtBQUs7QUFFN0I7QUFBQSxnQkFDUCxPQUFhO0FBT04sc0JBQUksS0FBSyxLQUFLLFlBQVksUUFBUTtBQUNqQyx5QkFBSyxLQUFLLFVBQVU7QUFBQSxrQkFDcEI7QUFFRCxzQkFBSSxLQUFLLEtBQUssZUFBZSxVQUFVO0FBQ3RDLHlCQUFLLEtBQUssYUFBYTtBQUFBLGtCQUN2QjtBQUlELHVCQUFLLEtBQUssT0FBTztBQUNqQix1QkFBSyxLQUFLLFFBQVE7QUFDbEIsdUJBQUssS0FBSyxXQUFXO0FBSXJCLHNCQUFJLENBQUMsUUFBUSxRQUFRO0FBQ3BCLDJCQUFPQSxNQUFLO0FBQUEsa0JBQ1o7QUFFRCxzQkFBSSxDQUFDLFFBQVEsVUFBVTtBQUN0QiwyQkFBT0EsTUFBSztBQUFBLGtCQUNaO0FBSUQsa0JBQUFBLFFBQU9wQyxHQUFFLE9BQU8sQ0FBQSxHQUFJLEtBQUssTUFBTW9DLEtBQUk7QUFPbkMsd0NBQXNCcEMsR0FBRSxPQUFPLE1BQU0sQ0FBQSxHQUFJLE9BQU8sS0FBSyxrQkFBa0IsSUFBSTtBQUczRSwyQkFBUyxhQUFhLHFCQUFxQjtBQUUxQyx3QkFBSSxvQkFBb0IsZUFBZSxTQUFTLEtBQUssY0FBYyxXQUFXO0FBQzdFLDBCQUFJLGlCQUFpQixvQkFBb0IsU0FBUyxFQUFFO0FBRXBELDBDQUFvQixTQUFTLEVBQUUsYUFBYSxvQkFBb0IsU0FBUyxFQUFFLGVBQWUsb0JBQW9CLFNBQVMsRUFBRTtBQUN6SCwwQ0FBb0IsU0FBUyxFQUFFLFdBQVc7QUFLMUMsMEJBQUksQ0FBQyxLQUFLLGNBQWMsT0FBTyxHQUFHO0FBQ2pDLDRDQUFvQixTQUFTLEVBQUUsU0FBU29DLE1BQUs7QUFBQSxzQkFDN0M7QUFFRCwwQkFBSSxTQUFTLE9BQU87QUFDbkIsZ0NBQVEsSUFBSSw4QkFBOEIsWUFBWSxRQUFRLEtBQUssVUFBVSxvQkFBb0IsU0FBUyxDQUFDLEdBQUcsT0FBTztBQUFBLHNCQUNySDtBQUFBLG9CQUNEO0FBQUEsa0JBQ0Q7QUFFRCxvQ0FBa0I7QUFBQSxnQkFDbEI7QUFBQSxjQU1QLFdBQWdCLFdBQVcsU0FBUztBQWM5Qix1QkFBTyxLQUFLLE9BQU87QUFLbkIsb0JBQUksUUFBUSxLQUFLLG1CQUFtQixLQUFLLGdCQUFnQixNQUFNO0FBQzlELHdDQUFzQixLQUFLO0FBQUEsZ0JBQzNCO0FBV0Qsb0JBQUkscUJBQXFCLFNBQVNHLFlBQVcscUJBQXFCO0FBQ2pFLHNCQUFJQyxXQUFVQyxTQUFRQztBQUd0QixzQkFBSSxLQUFLLFdBQVdILFVBQVMsR0FBRztBQUMvQixvQkFBQUEsYUFBWUEsV0FBVSxLQUFLLFNBQVMsbUJBQW1CLGNBQWM7QUFBQSxrQkFDckU7QUFJRCxzQkFBSSxLQUFLLFFBQVFBLFVBQVMsR0FBRztBQUc1QixvQkFBQUMsWUFBV0QsV0FBVSxDQUFDO0FBSXRCLHdCQUFLLENBQUMsS0FBSyxRQUFRQSxXQUFVLENBQUMsQ0FBQyxLQUFLLFNBQVMsS0FBS0EsV0FBVSxDQUFDLENBQUMsS0FBTSxLQUFLLFdBQVdBLFdBQVUsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLE1BQU0sS0FBS0EsV0FBVSxDQUFDLENBQUMsR0FBRztBQUN4SSxzQkFBQUcsY0FBYUgsV0FBVSxDQUFDO0FBQUEsb0JBRXhCLFdBQVcsS0FBSyxTQUFTQSxXQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLE1BQU0sS0FBS0EsV0FBVSxDQUFDLENBQUMsS0FBSyxTQUFTLFFBQVFBLFdBQVUsQ0FBQyxDQUFDLEtBQU0sS0FBSyxRQUFRQSxXQUFVLENBQUMsQ0FBQyxHQUFHO0FBQ2hKLHNCQUFBRSxVQUFTLHNCQUFzQkYsV0FBVSxDQUFDLElBQUksVUFBVUEsV0FBVSxDQUFDLEdBQUdILE1BQUssUUFBUTtBQUduRixzQkFBQU0sY0FBYUgsV0FBVSxDQUFDO0FBQUEsb0JBQ2pDLE9BQWU7QUFDTixzQkFBQUcsY0FBYUgsV0FBVSxDQUFDLEtBQUtBLFdBQVUsQ0FBQztBQUFBLG9CQUN4QztBQUFBLGtCQUVULE9BQWM7QUFDTixvQkFBQUMsWUFBV0Q7QUFBQSxrQkFDWDtBQUdELHNCQUFJLENBQUMscUJBQXFCO0FBQ3pCLG9CQUFBRSxVQUFTQSxXQUFVTCxNQUFLO0FBQUEsa0JBQ3hCO0FBSUQsc0JBQUksS0FBSyxXQUFXSSxTQUFRLEdBQUc7QUFDOUIsb0JBQUFBLFlBQVdBLFVBQVMsS0FBSyxTQUFTLG1CQUFtQixjQUFjO0FBQUEsa0JBQ25FO0FBRUQsc0JBQUksS0FBSyxXQUFXRSxXQUFVLEdBQUc7QUFDaEMsb0JBQUFBLGNBQWFBLFlBQVcsS0FBSyxTQUFTLG1CQUFtQixjQUFjO0FBQUEsa0JBQ3ZFO0FBR0QseUJBQU8sQ0FBQ0YsYUFBWSxHQUFHQyxTQUFRQyxXQUFVO0FBQUEsZ0JBQ2hEO0FBRU0sb0JBQUksbUJBQW1CLFNBQVNQLFdBQVVJLFlBQVc7QUFFcEQsc0JBQUksZUFBZSxJQUFJLE1BQU0sUUFBUUosU0FBUSxHQUMzQyxvQkFBb0IsT0FFcEJLLFlBQVdELFdBQVUsQ0FBQyxHQUN0QkUsVUFBU0YsV0FBVSxDQUFDLEdBQ3BCRyxjQUFhSCxXQUFVLENBQUMsR0FDeEI7QUFXRix1QkFBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFVBQVUsaUJBQWlCLFdBQVcsSUFBSSxNQUFNLFlBQVksWUFBWSxFQUFFLENBQUMsTUFBTSxTQUFTLElBQUksZUFBZSxXQUFXLFlBQVksTUFBTXBDLGFBQVc7QUFDeEssd0JBQUksU0FBUyxPQUFPO0FBQ25CLDhCQUFRLElBQUksZUFBZSxlQUFlLHFDQUFxQztBQUFBLG9CQUMvRTtBQUNEO0FBQUEsa0JBQ0E7QUFLRCx1QkFBTWlDLE1BQUssWUFBWWpDLGVBQWFpQyxNQUFLLFlBQVksUUFBUUEsTUFBSyxZQUFZLFVBQVlBLE1BQUssZUFBZWpDLGVBQWFpQyxNQUFLLGVBQWUsYUFBYyxpQkFBaUIsS0FBS0QsU0FBUSxLQUFLLENBQUNPLGVBQWNGLGNBQWEsR0FBRztBQUM5TixvQkFBQUUsY0FBYTtBQUFBLGtCQUNiO0FBS0Qsc0JBQUlOLE1BQUssZ0JBQWdCLHVCQUF1QixvQkFBb0JELFNBQVEsR0FBRztBQUM5RSx3QkFBSU8sZ0JBQWV2QyxhQUFXO0FBQzdCLHNCQUFBdUMsY0FBYSxvQkFBb0JQLFNBQVEsRUFBRSxXQUFXLG9CQUFvQkEsU0FBUSxFQUFFO0FBQUEsb0JBQ3BGO0FBS0Qsd0NBQW9CLEtBQUssdUJBQXVCLFlBQVk7QUFBQSxrQkFFcEUsT0FBYztBQUVOLHdCQUFJLElBQUksTUFBTSxXQUFXQSxTQUFRLEdBQUc7QUFDbkMsMEJBQUlPLGdCQUFldkMsYUFBVztBQUM3Qiw0Q0FBb0IsSUFBSSxpQkFBaUIsU0FBUyxZQUFZO0FBRzlELHdCQUFBdUMsY0FBYSxJQUFJLGlCQUFpQixTQUFTUCxXQUFVLGlCQUFpQjtBQUFBLHNCQUtoRixPQUFnQjtBQUVOLDRDQUFvQixJQUFJLE1BQU0sVUFBVSxZQUFZLEVBQUUsQ0FBQztBQUFBLHNCQUN2RDtBQUFBLG9CQUVWLFdBQW1CTyxnQkFBZXZDLGFBQVc7QUFDcEMsc0JBQUF1QyxjQUFhLElBQUksaUJBQWlCLFNBQVNQLFNBQVE7QUFBQSxvQkFDbkQ7QUFBQSxrQkFDRDtBQU1ELHNCQUFJLGdCQUNGLGtCQUNBLG9CQUNBLFdBQVc7QUFHYixzQkFBSSxnQkFBZ0IsU0FBU0EsV0FBVSxPQUFPO0FBQzdDLHdCQUFJLFVBQ0Y7QUFFRixvQ0FBZ0IsU0FBUyxLQUN0QixTQUFVLEVBQ1YsWUFBYSxFQUViLFFBQVEsWUFBWSxTQUFTLE9BQU87QUFFcEMsaUNBQVc7QUFHWCw2QkFBTztBQUFBLG9CQUNsQixDQUFXO0FBR0gsd0JBQUksQ0FBQyxVQUFVO0FBQ2QsaUNBQVcsSUFBSSxPQUFPLFlBQVlBLFNBQVE7QUFBQSxvQkFDMUM7QUFFRCwyQkFBTyxDQUFDLGNBQWMsUUFBUTtBQUFBLGtCQUN0QztBQUVPLHNCQUFJTyxnQkFBZUYsYUFBWSxLQUFLLFNBQVNFLFdBQVUsS0FBSyxLQUFLLFNBQVNGLFNBQVEsR0FBRztBQUNwRiw4QkFBVTtBQUNWLHdCQUFJLFNBQVMsR0FDWCxPQUFPLEdBQ1AsU0FBUyxDQUFFLEdBQ1gsT0FBTyxDQUFFLEdBQ1QsU0FBUyxHQUNULFFBQVEsR0FDUixTQUFTO0FBRVgsb0JBQUFFLGNBQWEsSUFBSSxNQUFNLFVBQVVBLFdBQVU7QUFDM0Msb0JBQUFGLFlBQVcsSUFBSSxNQUFNLFVBQVVBLFNBQVE7QUFDdkMsMkJBQU8sU0FBU0UsWUFBVyxVQUFVLE9BQU9GLFVBQVMsUUFBUTtBQUM1RCwwQkFBSSxTQUFTRSxZQUFXLE1BQU0sR0FDNUIsT0FBT0YsVUFBUyxJQUFJO0FBRXRCLDBCQUFJLFVBQVUsS0FBSyxNQUFNLEtBQUssVUFBVSxLQUFLLElBQUksR0FBRztBQUNuRCw0QkFBSSxTQUFTLFFBQ1gsT0FBTyxNQUNQLFdBQVcsS0FDWCxTQUFTO0FBRVgsK0JBQU8sRUFBRSxTQUFTRSxZQUFXLFFBQVE7QUFDcEMsbUNBQVNBLFlBQVcsTUFBTTtBQUMxQiw4QkFBSSxXQUFXLFVBQVU7QUFDeEIsdUNBQVc7QUFBQSwwQkFDWCxXQUFVLENBQUMsS0FBSyxLQUFLLE1BQU0sR0FBRztBQUM5QjtBQUFBLDBCQUNBO0FBQ0Qsb0NBQVU7QUFBQSx3QkFDVjtBQUNELCtCQUFPLEVBQUUsT0FBT0YsVUFBUyxRQUFRO0FBQ2hDLGlDQUFPQSxVQUFTLElBQUk7QUFDcEIsOEJBQUksU0FBUyxRQUFRO0FBQ3BCLHFDQUFTO0FBQUEsMEJBQ1QsV0FBVSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUc7QUFDNUI7QUFBQSwwQkFDQTtBQUNELGtDQUFRO0FBQUEsd0JBQ1I7QUFDRCw0QkFBSSxTQUFTLElBQUksTUFBTSxRQUFRRSxhQUFZLE1BQU0sR0FDL0MsT0FBTyxJQUFJLE1BQU0sUUFBUUYsV0FBVSxJQUFJO0FBRXpDLGtDQUFVLE9BQU87QUFDakIsZ0NBQVEsS0FBSztBQUNiLDRCQUFJLFdBQVcsTUFBTTtBQUVwQiw4QkFBSSxXQUFXLE1BQU07QUFFcEIsdUNBQVcsU0FBUztBQUFBLDBCQUNoQyxPQUFrQjtBQUVOLHVDQUFXLE1BQU0sT0FBTyxVQUFVLFFBQVEsTUFBTSxNQUFNLE1BQU07QUFDNUQsbUNBQU8sS0FBSyxXQUFXLE1BQU0sQ0FBQztBQUM5QixpQ0FBSyxLQUFLLFdBQVcsSUFBSSxDQUFDO0FBQUEsMEJBQzFCO0FBQUEsd0JBQ1osT0FBaUI7QUFFTiw4QkFBSSxTQUFTLFdBQVcsTUFBTSxHQUM1QixPQUFPLFdBQVcsSUFBSTtBQUV4QixzQ0FBWSxTQUFTLElBQUksU0FBUyxNQUFNLE9BQ25DLFNBQVMsTUFBTSxPQUFPLFVBQVUsUUFBUSxNQUFNLE1BQU0sTUFBTSxPQUFPLFNBQ2xFLFNBQ0MsT0FBTyxPQUFPLE9BQU8sVUFBVSxTQUFTLElBQUksT0FBTyxRQUFRLE1BQU0sTUFBTSxNQUFNLE9BQU8sT0FDckY7QUFDSiw4QkFBSSxRQUFRO0FBQ1gsbUNBQU8sS0FBSyxNQUFNO0FBQ2xCLGlDQUFLLEtBQUssQ0FBQztBQUFBLDBCQUNYO0FBQ0QsOEJBQUksTUFBTTtBQUNULG1DQUFPLEtBQUssQ0FBQztBQUNiLGlDQUFLLEtBQUssSUFBSTtBQUFBLDBCQUNkO0FBQUEsd0JBQ0Q7QUFBQSxzQkFDWCxXQUFvQixXQUFXLE1BQU07QUFDM0IsbUNBQVc7QUFDWDtBQUNBO0FBRUEsNEJBQUksV0FBVyxLQUFLLFdBQVcsT0FDMUIsV0FBVyxLQUFLLFdBQVcsT0FDM0IsV0FBVyxLQUFLLFdBQVcsT0FDM0IsV0FBVyxLQUFLLFdBQVcsT0FDM0IsVUFBVSxLQUFLLFdBQVcsS0FDM0I7QUFDSDtBQUFBLHdCQUNYLFdBQXNCLFVBQVUsU0FBUyxLQUMxQixVQUFVLEtBQUssV0FBVyxPQUFPLEVBQUUsU0FBUyxHQUFHO0FBQ25ELG1DQUFTO0FBQUEsd0JBQ1Q7QUFFRCw0QkFBSSxVQUFVLEtBQUssV0FBVyxPQUN6QixVQUFVLEtBQUssV0FBVyxPQUMxQixVQUFVLEtBQUssV0FBVyxPQUMxQixVQUFVLEtBQUssV0FBVyxPQUMxQixTQUFTLEtBQUssV0FBVyxLQUMxQjtBQUNILDhCQUFJLFVBQVUsS0FBSyxXQUFXLEtBQUs7QUFDbEMscUNBQVM7QUFBQSwwQkFDVDtBQUNEO0FBQUEsd0JBQ1gsV0FBcUIsVUFBVSxXQUFXLEtBQUs7QUFDcEMsOEJBQUksRUFBRSxTQUFTLEdBQUc7QUFDakIsb0NBQVEsU0FBUztBQUFBLDBCQUNqQjtBQUFBLHdCQUNaLFdBQXNCLFVBQVUsU0FBUyxTQUFTLElBQUksTUFDdkMsVUFBVSxTQUFTLElBQUksTUFBTSxXQUFXLE9BQU8sRUFBRSxTQUFTLFNBQVMsSUFBSSxJQUFJO0FBQy9FLGtDQUFRLFNBQVM7QUFBQSx3QkFDakI7QUFBQSxzQkFDWCxPQUFnQjtBQUNOLGlDQUFTO0FBRVQ7QUFBQSxzQkFDQTtBQUFBLG9CQUNEO0FBQ0Qsd0JBQUksV0FBV0UsWUFBVyxVQUFVLFNBQVNGLFVBQVMsUUFBUTtBQUM3RCwwQkFBSSxTQUFTLE9BQU87QUFDbkIsZ0NBQVEsTUFBTSxtREFBb0RBLFlBQVcsU0FBV0UsY0FBYSxJQUFLO0FBQUEsc0JBQzFHO0FBQ0QsZ0NBQVV2QztBQUFBQSxvQkFDVjtBQUNELHdCQUFJLFNBQVM7QUFDWiwwQkFBSSxPQUFPLFFBQVE7QUFDbEIsNEJBQUksU0FBUyxPQUFPO0FBQ25CLGtDQUFRLElBQUksb0JBQXFCLFVBQVUsU0FBVSxRQUFRLE1BQU0sTUFBTXVDLGNBQWEsTUFBTUYsWUFBVyxHQUFHO0FBQUEsd0JBQzFHO0FBQ0Qsd0JBQUFFLGNBQWE7QUFDYix3QkFBQUYsWUFBVztBQUNYLDJDQUFtQixxQkFBcUI7QUFBQSxzQkFDbEQsT0FBZ0I7QUFDTixrQ0FBVXJDO0FBQUFBLHNCQUNWO0FBQUEsb0JBQ0Q7QUFBQSxrQkFDRDtBQUVELHNCQUFJLENBQUMsU0FBUztBQUViLHFDQUFpQixjQUFjZ0MsV0FBVU8sV0FBVTtBQUNuRCxvQkFBQUEsY0FBYSxlQUFlLENBQUM7QUFDN0IseUNBQXFCLGVBQWUsQ0FBQztBQUdyQyxxQ0FBaUIsY0FBY1AsV0FBVUssU0FBUTtBQUNqRCxvQkFBQUEsWUFBVyxlQUFlLENBQUMsRUFBRSxRQUFRLGVBQWUsU0FBUyxPQUFPLFVBQVU7QUFDN0UsaUNBQVc7QUFHWCw2QkFBTztBQUFBLG9CQUNoQixDQUFTO0FBQ0QsdUNBQW1CLGVBQWUsQ0FBQztBQUduQyxvQkFBQUUsY0FBYSxXQUFXQSxXQUFVLEtBQUs7QUFDdkMsb0JBQUFGLFlBQVcsV0FBV0EsU0FBUSxLQUFLO0FBT25DLHdCQUFJLHFCQUFxQixLQUFLO0FBRzdCLDBCQUFJLDBCQUEwQixLQUFLTCxTQUFRLEdBQUc7QUFFN0Msd0JBQUFLLFlBQVdBLFlBQVc7QUFDdEIsMkNBQW1CO0FBQUEsc0JBRW5CLFdBQVUsU0FBUyxLQUFLTCxTQUFRLEdBQUc7QUFDbkMsd0JBQUFLLFlBQVdBLFlBQVc7QUFDdEIsMkNBQW1CO0FBQUEsc0JBRW5CLFdBQVUscUJBQXFCLEtBQUtMLFNBQVEsR0FBRztBQUMvQyx3QkFBQUssWUFBWUEsWUFBVyxNQUFPO0FBQzlCLDJDQUFtQjtBQUFBLHNCQUNuQjtBQUFBLG9CQUNEO0FBQUEsa0JBQ0Q7QUFrQkQsc0JBQUksc0JBQXNCLFdBQVc7QUFVcEMsd0JBQUksc0JBQXNCO0FBQUEsc0JBQ3pCLFVBQVUsUUFBUSxjQUFjdEMsVUFBUztBQUFBO0FBQUEsc0JBQ3pDLFVBQVUsSUFBSSxpQkFBaUIsU0FBUyxVQUFVO0FBQUE7QUFBQSxzQkFDbEQsVUFBVSxJQUFJLGlCQUFpQixTQUFTLFVBQVU7QUFBQTtBQUFBLG9CQUNsRCxHQUVDLG1CQUFxQixvQkFBb0IsYUFBYSx1QkFBdUIsZ0JBQWtCLG9CQUFvQixhQUFhLHVCQUF1QixZQUV2SixjQUFlLG9CQUFvQixhQUFhLHVCQUF1QjtBQUd6RSwyQ0FBdUIsYUFBYSxvQkFBb0I7QUFDeEQsMkNBQXVCLGVBQWUsb0JBQW9CO0FBQzFELDJDQUF1QixlQUFlLG9CQUFvQjtBQVExRCx3QkFBSSxjQUFjLEtBQ2hCLGFBQWEsQ0FBQTtBQUVmLHdCQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQjtBQUN0QywwQkFBSSxRQUFRLFFBQVEsS0FBSyxRQUFRQSxVQUFTLGdCQUFnQiw4QkFBOEIsTUFBTSxJQUFJQSxVQUFTLGNBQWMsS0FBSztBQUU5SCwrQkFBUyxLQUFLLEtBQUs7QUFDbkIsMENBQW9CLFNBQVMsWUFBWSxLQUFLO0FBSzlDLHNCQUFBRixHQUFFLEtBQUssQ0FBQyxZQUFZLGFBQWEsV0FBVyxHQUFHLFNBQVNZLElBQUd1QixXQUFVO0FBQ3BFLGlDQUFTLElBQUksaUJBQWlCLE9BQU9BLFdBQVUsUUFBUTtBQUFBLHNCQUNqRSxDQUFVO0FBQ0QsK0JBQVMsSUFBSSxpQkFBaUIsT0FBTyxZQUFZLG9CQUFvQixRQUFRO0FBQzdFLCtCQUFTLElBQUksaUJBQWlCLE9BQU8sWUFBWSxvQkFBb0IsUUFBUTtBQUM3RSwrQkFBUyxJQUFJLGlCQUFpQixPQUFPLGFBQWEsYUFBYTtBQUcvRCxzQkFBQW5DLEdBQUUsS0FBSyxDQUFDLFlBQVksWUFBWSxTQUFTLGFBQWEsYUFBYSxRQUFRLEdBQUcsU0FBU1ksSUFBR3VCLFdBQVU7QUFDbkcsaUNBQVMsSUFBSSxpQkFBaUIsT0FBT0EsV0FBVSxjQUFjLEdBQUc7QUFBQSxzQkFDMUUsQ0FBVTtBQUVELCtCQUFTLElBQUksaUJBQWlCLE9BQU8sZUFBZSxjQUFjLElBQUk7QUFHdEUsaUNBQVcsbUJBQW1CLHVCQUF1Qix3QkFBd0IsV0FBVyxJQUFJLGlCQUFpQixPQUFPLFNBQVMsTUFBTSxJQUFJLENBQUMsS0FBSyxLQUFLO0FBQ2xKLGlDQUFXLG9CQUFvQix1QkFBdUIseUJBQXlCLFdBQVcsSUFBSSxpQkFBaUIsT0FBTyxVQUFVLE1BQU0sSUFBSSxDQUFDLEtBQUssS0FBSztBQUNySixpQ0FBVyxTQUFTLHVCQUF1QixjQUFjLFdBQVcsSUFBSSxpQkFBaUIsT0FBTyxhQUFhLENBQUMsS0FBSyxLQUFLO0FBRXhILDBDQUFvQixTQUFTLFlBQVksS0FBSztBQUFBLG9CQUN2RCxPQUFlO0FBQ04saUNBQVcsU0FBUyx1QkFBdUI7QUFDM0MsaUNBQVcsbUJBQW1CLHVCQUF1QjtBQUNyRCxpQ0FBVyxvQkFBb0IsdUJBQXVCO0FBQUEsb0JBQ3REO0FBVUQsd0JBQUksdUJBQXVCLFlBQVksTUFBTTtBQUU1Qyw2Q0FBdUIsVUFBVSxXQUFXLElBQUksaUJBQWlCakMsVUFBUyxNQUFNLFVBQVUsQ0FBQyxLQUFLO0FBQUEsb0JBQ2hHO0FBR0Qsd0JBQUksdUJBQXVCLFdBQVcsTUFBTTtBQUMzQyw2Q0FBdUIsU0FBUyxXQUFXRCxRQUFPLFVBQVUsSUFBSTtBQUNoRSw2Q0FBdUIsU0FBUyxXQUFXQSxRQUFPLFdBQVcsSUFBSTtBQUFBLG9CQUNqRTtBQUVELCtCQUFXLFVBQVUsdUJBQXVCO0FBQzVDLCtCQUFXLFNBQVMsdUJBQXVCO0FBQzNDLCtCQUFXLFNBQVMsdUJBQXVCO0FBRTNDLHdCQUFJLFNBQVMsU0FBUyxHQUFHO0FBQ3hCLDhCQUFRLElBQUksa0JBQWtCLEtBQUssVUFBVSxVQUFVLEdBQUcsT0FBTztBQUFBLG9CQUNqRTtBQUNELDJCQUFPO0FBQUEsa0JBQ2Y7QUFPTyxzQkFBSSxRQUFRLEtBQUssUUFBUSxHQUFHO0FBQzNCLHVDQUFtQjtBQUFBLGtCQU1uQixXQUFXLHVCQUF1QixvQkFBcUJ5QyxnQkFBZSxHQUFHO0FBS3pFLHdCQUFJRixjQUFhLEdBQUc7QUFDbkIseUNBQW1CO0FBQUEsb0JBQzVCLE9BQWU7QUFHTixrREFBNEIsNkJBQTZCO0FBSXpELDBCQUFJLE9BQVEsb0RBQW9ELEtBQUtMLFNBQVEsS0FBSyxLQUFLLEtBQUtBLFNBQVEsS0FBS0EsY0FBYSxNQUFPLE1BQU07QUFJbkksOEJBQVEsb0JBQWtCO0FBQUEsd0JBQ3pCLEtBQUs7QUFJSiwwQkFBQU8sZUFBZSxTQUFTLE1BQU0sMEJBQTBCLG1CQUFtQiwwQkFBMEI7QUFDckc7QUFBQSx3QkFFRCxLQUFLO0FBRUo7QUFBQSx3QkFFRDtBQUNDLDBCQUFBQSxlQUFjLDBCQUEwQixxQkFBcUIsTUFBTTtBQUFBLHNCQUNwRTtBQUdELDhCQUFRLGtCQUFnQjtBQUFBLHdCQUN2QixLQUFLO0FBQ0osMEJBQUFBLGVBQWMsS0FBSyxTQUFTLE1BQU0sMEJBQTBCLG1CQUFtQiwwQkFBMEI7QUFDekc7QUFBQSx3QkFFRCxLQUFLO0FBRUo7QUFBQSx3QkFFRDtBQUNDLDBCQUFBQSxlQUFjLElBQUksMEJBQTBCLG1CQUFtQixNQUFNO0FBQUEsc0JBQ3RFO0FBQUEsb0JBQ0Q7QUFBQSxrQkFDRDtBQVVELDBCQUFRLFVBQVE7QUFBQSxvQkFDZixLQUFLO0FBQ0osc0JBQUFGLFlBQVdFLGNBQWFGO0FBQ3hCO0FBQUEsb0JBRUQsS0FBSztBQUNKLHNCQUFBQSxZQUFXRSxjQUFhRjtBQUN4QjtBQUFBLG9CQUVELEtBQUs7QUFDSixzQkFBQUEsWUFBV0UsY0FBYUY7QUFDeEI7QUFBQSxvQkFFRCxLQUFLO0FBQ0osc0JBQUFBLFlBQVdFLGNBQWFGO0FBQ3hCO0FBQUEsa0JBQ0Q7QUFPRCxrQ0FBZ0JMLFNBQVEsSUFBSTtBQUFBLG9CQUMzQjtBQUFBLG9CQUNBLFlBQVlPO0FBQUEsb0JBQ1osY0FBY0E7QUFBQSxvQkFDZCxVQUFVRjtBQUFBLG9CQUNWLFVBQVU7QUFBQSxvQkFDVixRQUFRQztBQUFBLGtCQUNoQjtBQUNPLHNCQUFJLFNBQVM7QUFDWixvQ0FBZ0JOLFNBQVEsRUFBRSxVQUFVO0FBQUEsa0JBQ3BDO0FBRUQsc0JBQUksU0FBUyxPQUFPO0FBQ25CLDRCQUFRLElBQUksc0JBQXNCQSxZQUFXLFFBQVEsS0FBSyxVQUFVLGdCQUFnQkEsU0FBUSxDQUFDLEdBQUcsT0FBTztBQUFBLGtCQUN2RztBQUFBLGdCQUNSO0FBR00seUJBQVMsWUFBWSxlQUFlO0FBRW5DLHNCQUFJLENBQUMsY0FBYyxlQUFlLFFBQVEsR0FBRztBQUM1QztBQUFBLGtCQUNBO0FBR0Qsc0JBQUksZUFBZSxJQUFJLE1BQU0sVUFBVSxRQUFRLEdBQzdDLFlBQVksbUJBQW1CLGNBQWMsUUFBUSxDQUFDO0FBSXhELHNCQUFJLFNBQVMsSUFBSSxNQUFNLE1BQW9CLEdBQUc7QUFFN0Msd0JBQUksV0FBVyxVQUFVLENBQUMsR0FDeEIsU0FBUyxVQUFVLENBQUMsR0FDcEIsYUFBYSxVQUFVLENBQUM7QUFFMUIsd0JBQUksSUFBSSxNQUFNLE1BQU0sS0FBSyxRQUFRLEdBQUc7QUFFbkMsMEJBQUksa0JBQWtCLENBQUMsT0FBTyxTQUFTLE1BQU0sR0FDM0MsY0FBYyxJQUFJLE9BQU8sU0FBUyxRQUFRLEdBQzFDLGdCQUFnQixhQUFhLElBQUksT0FBTyxTQUFTLFVBQVUsSUFBSWhDO0FBR2pFLCtCQUFTUyxLQUFJLEdBQUdBLEtBQUksZ0JBQWdCLFFBQVFBLE1BQUs7QUFDaEQsNEJBQUksWUFBWSxDQUFDLFlBQVlBLEVBQUMsQ0FBQztBQUUvQiw0QkFBSSxRQUFRO0FBQ1gsb0NBQVUsS0FBSyxNQUFNO0FBQUEsd0JBQ3JCO0FBRUQsNEJBQUksa0JBQWtCVCxhQUFXO0FBQ2hDLG9DQUFVLEtBQUssY0FBY1MsRUFBQyxDQUFDO0FBQUEsd0JBQy9CO0FBRUQseUNBQWlCLGVBQWUsZ0JBQWdCQSxFQUFDLEdBQUcsU0FBUztBQUFBLHNCQUM3RDtBQUVEO0FBQUEsb0JBQ0E7QUFBQSxrQkFDRDtBQUNELG1DQUFpQixjQUFjLFNBQVM7QUFBQSxnQkFDeEM7QUFHRCxnQ0FBZ0IsVUFBVTtBQUFBLGNBQzFCO0FBUUQsa0JBQUksZ0JBQWdCLFNBQVM7QUFFNUIsb0JBQUksT0FBTyxTQUFTLFNBQVMsb0JBQW9CO0FBR2pELHFCQUFLLEtBQUssZUFBZTtBQUV6Qix1QkFBTyxLQUFLLE9BQU87QUFFbkIsb0JBQUksTUFBTTtBQUVULHNCQUFJd0IsTUFBSyxVQUFVLElBQUk7QUFFdEIseUJBQUssa0JBQWtCO0FBQ3ZCLHlCQUFLLE9BQU9BO0FBQUEsa0JBQ1o7QUFHRCx1QkFBSyxjQUFjO0FBQUEsZ0JBQ25CO0FBSUQsb0JBQUksa0JBQWtCLGlCQUFpQixHQUFHO0FBR3pDLDJCQUFTLE1BQU0sTUFBTSxLQUFLLENBQUMsTUFBTSxVQUFVQSxPQUFNLE1BQU0sWUFBWSxVQUFVLE1BQU0sQ0FBQyxDQUFDO0FBR3JGLHNCQUFJLFNBQVMsTUFBTSxjQUFjLE9BQU87QUFDdkMsNkJBQVMsTUFBTSxZQUFZO0FBRzNCO2tCQUNBO0FBQUEsZ0JBQ1IsT0FBYTtBQUNOO0FBQUEsZ0JBQ0E7QUFBQSxjQUNEO0FBQUEsWUFDRDtBQUdELGdCQUFJQSxNQUFLLFVBQVUsT0FBTztBQUd6QixrQkFBSUEsTUFBSyxPQUFPO0FBR2Ysb0JBQUksWUFBWSxTQUFTLE1BQU0sZ0JBQWdCO0FBQy9DLHlCQUFTLE1BQU0sZ0JBQWdCLFNBQVMsSUFBSTtBQUU1QyxvQkFBSSxnQkFBaUIsU0FBUyxPQUFPO0FBQ3BDLHlCQUFPLFdBQVc7QUFFakIsNkJBQVMsTUFBTSxnQkFBZ0IsS0FBSyxJQUFJO0FBR3hDO2tCQUNSO0FBQUEsZ0JBQ08sRUFBRSxTQUFTO0FBRVoscUJBQUssT0FBTyxFQUFFLGNBQWMsb0JBQUksS0FBSSxHQUFJO0FBQ3hDLHFCQUFLLE9BQU8sRUFBRSxRQUFRLFdBQVdBLE1BQUssS0FBSztBQUMzQyxxQkFBSyxPQUFPLEVBQUUsYUFBYTtBQUFBLGtCQUMxQixZQUFZLFdBQVcsWUFBWSxXQUFXQSxNQUFLLEtBQUssQ0FBQztBQUFBLGtCQUN6RCxNQUFNO0FBQUEsZ0JBQ2I7QUFBQSxjQUNBLE9BQVk7QUFDTjtjQUNBO0FBQUEsWUFHTixPQUFXO0FBQ04sY0FBQXBDLEdBQUUsTUFBTSxTQUFTb0MsTUFBSyxPQUFPLFNBQVMsTUFBTSxZQUFZO0FBR3ZELG9CQUFJLGVBQWUsTUFBTTtBQUN4QixzQkFBSSxZQUFZLFNBQVM7QUFDeEIsZ0NBQVksU0FBUyxRQUFRO0FBQUEsa0JBQzdCO0FBR0QseUJBQU87QUFBQSxnQkFDUDtBQUlELHlCQUFTLHlCQUF5QjtBQUVsQywyQkFBZTtBQUFBLGNBQ3JCLENBQU07QUFBQSxZQUNEO0FBZUQsaUJBQUtBLE1BQUssVUFBVSxNQUFNQSxNQUFLLFVBQVUsU0FBU3BDLEdBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxNQUFNLGNBQWM7QUFDdkYsY0FBQUEsR0FBRSxRQUFRLE9BQU87QUFBQSxZQUNqQjtBQUFBLFVBQ0Q7QUFRRCxVQUFBQSxHQUFFLEtBQUssVUFBVSxTQUFTWSxJQUFHLFNBQVM7QUFFckMsZ0JBQUksS0FBSyxPQUFPLE9BQU8sR0FBRztBQUN6Qiw2QkFBZSxTQUFTQSxFQUFDO0FBQUEsWUFDekI7QUFBQSxVQUNMLENBQUk7QUFXRCxpQkFBT1osR0FBRSxPQUFPLENBQUEsR0FBSSxTQUFTLFVBQVUsT0FBTztBQUM5QyxlQUFLLE9BQU8sU0FBUyxLQUFLLE1BQU0sRUFBRTtBQUNsQyxjQUFJLG9CQUFxQixLQUFLLE9BQU8sSUFBSztBQUUxQyxjQUFJLEtBQUssTUFBTTtBQUdkLHFCQUFTLElBQUksR0FBRyxJQUFJLG1CQUFtQixLQUFLO0FBSTNDLGtCQUFJLGlCQUFpQjtBQUFBLGdCQUNwQixPQUFPLEtBQUs7QUFBQSxnQkFDWixVQUFVLEtBQUs7QUFBQSxjQUNyQjtBQUlLLGtCQUFJLE1BQU0sb0JBQW9CLEdBQUc7QUFDaEMsK0JBQWUsVUFBVSxLQUFLO0FBQzlCLCtCQUFlLGFBQWEsS0FBSztBQUNqQywrQkFBZSxXQUFXLEtBQUs7QUFBQSxjQUMvQjtBQUVELHNCQUFRLFVBQVUsV0FBVyxjQUFjO0FBQUEsWUFDM0M7QUFBQSxVQUNEO0FBT0QsaUJBQU8sU0FBUTtBQUFBLFFBQ2xCO0FBR0UsbUJBQVdBLEdBQUUsT0FBTyxTQUFTLFFBQVE7QUFFckMsaUJBQVMsVUFBVTtBQU9uQixZQUFJLFNBQVNDLFFBQU8seUJBQXlCO0FBTTdDLFlBQUksQ0FBQyxTQUFTLE1BQU0sWUFBWUMsVUFBUyxXQUFXQyxhQUFXO0FBQzlELGNBQUksZUFBZSxXQUFXO0FBRTdCLGdCQUFJRCxVQUFTLFFBQVE7QUFDcEIsdUJBQVMsU0FBUyxVQUFVO0FBRTNCLHVCQUFPLFdBQVcsV0FBVztBQUM1QiwyQkFBUyxJQUFJO0FBQUEsZ0JBQ2IsR0FBRSxFQUFFO0FBQUEsY0FDWDtBQUdLO1lBQ0wsT0FBVztBQUNOLHVCQUFTRCxRQUFPLHlCQUF5QjtBQUFBLFlBQ3pDO0FBQUEsVUFDTDtBQUdHO0FBR0EsVUFBQUMsVUFBUyxpQkFBaUIsb0JBQW9CLFlBQVk7QUFBQSxRQUMxRDtBQU9ELGlCQUFTLEtBQUssV0FBVztBQU94QixjQUFJLFdBQVc7QUFJZCxnQkFBSSxjQUFjLFNBQVMsYUFBYSxjQUFjLE9BQU8sWUFBWSxZQUFZO0FBTXJGLGdCQUFJLGNBQWMsU0FBUyxNQUFNLE1BQU07QUFLdkMsZ0JBQUksY0FBYyxLQUFPO0FBQ3hCLHVCQUFTLE1BQU0sUUFBUSxtQkFBbUIsU0FBUyxNQUFNLEtBQUs7QUFDOUQsNEJBQWMsU0FBUyxNQUFNLE1BQU07QUFBQSxZQUNuQztBQUdELHFCQUFTLElBQUksR0FBRyxJQUFJLGFBQWEsS0FBSztBQUVyQyxrQkFBSSxDQUFDLFNBQVMsTUFBTSxNQUFNLENBQUMsR0FBRztBQUM3QjtBQUFBLGNBQ0E7QUFNRCxrQkFBSSxnQkFBZ0IsU0FBUyxNQUFNLE1BQU0sQ0FBQyxHQUN4QyxPQUFPLGNBQWMsQ0FBQyxHQUN0QixPQUFPLGNBQWMsQ0FBQyxHQUN0QixZQUFZLGNBQWMsQ0FBQyxHQUMzQixZQUFZLENBQUMsV0FDYixrQkFBa0IsTUFDbEIsY0FBYyxjQUFjLENBQUMsR0FDN0IsdUJBQXVCLGNBQWMsQ0FBQztBQVl4QyxrQkFBSSxDQUFDLFdBQVc7QUFDZiw0QkFBWSxTQUFTLE1BQU0sTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLGNBQWM7QUFBQSxjQUN2RDtBQUdELGtCQUFJLGFBQWE7QUFDaEIsb0JBQUksWUFBWSxXQUFXLE1BQU07QUFFaEMsOEJBQVksY0FBYyxDQUFDLElBQUksS0FBSyxNQUFNLGNBQWMsdUJBQXVCLEVBQUU7QUFHakYsZ0NBQWMsQ0FBQyxJQUFJO0FBQUEsZ0JBQzFCLE9BQWE7QUFDTjtBQUFBLGdCQUNBO0FBQUEsY0FDRDtBQUVELHFDQUF1QixjQUFjLENBQUMsSUFBSSxjQUFjO0FBS3hELGtCQUFJLGtCQUFrQixLQUFLLElBQUssdUJBQXdCLEtBQUssVUFBVSxDQUFDO0FBT3hFLHVCQUFTLElBQUksR0FBRyxhQUFhLEtBQUssUUFBUSxJQUFJLFlBQVksS0FBSztBQUM5RCxvQkFBSSxrQkFBa0IsS0FBSyxDQUFDLEdBQzFCLFVBQVUsZ0JBQWdCO0FBSTVCLG9CQUFJLENBQUMsS0FBSyxPQUFPLEdBQUc7QUFDbkI7QUFBQSxnQkFDQTtBQUVELG9CQUFJLDBCQUEwQjtBQVE5QixvQkFBSSxLQUFLLFlBQVlDLGVBQWEsS0FBSyxZQUFZLFFBQVEsS0FBSyxZQUFZLFFBQVE7QUFDbkYsc0JBQUksS0FBSyxZQUFZLFFBQVE7QUFDNUIsd0JBQUksYUFBYSxDQUFDLGVBQWUsWUFBWSxlQUFlLGNBQWM7QUFFMUUsb0JBQUFILEdBQUUsS0FBSyxZQUFZLFNBQVNZLElBQUcsV0FBVztBQUN6QywwQkFBSSxpQkFBaUIsU0FBUyxXQUFXLFNBQVM7QUFBQSxvQkFDM0QsQ0FBUztBQUFBLGtCQUNEO0FBRUQsc0JBQUksaUJBQWlCLFNBQVMsV0FBVyxLQUFLLE9BQU87QUFBQSxnQkFDckQ7QUFHRCxvQkFBSSxLQUFLLGVBQWVULGVBQWEsS0FBSyxlQUFlLFVBQVU7QUFDbEUsc0JBQUksaUJBQWlCLFNBQVMsY0FBYyxLQUFLLFVBQVU7QUFBQSxnQkFDM0Q7QUFPRCx5QkFBUyxZQUFZLGlCQUFpQjtBQUVyQyxzQkFBSSxnQkFBZ0IsZUFBZSxRQUFRLEtBQUssYUFBYSxXQUFXO0FBQ3ZFLHdCQUFJLFFBQVEsZ0JBQWdCLFFBQVEsR0FDbEMsY0FHQSxTQUFTLEtBQUssU0FBUyxNQUFNLE1BQU0sSUFBSSxTQUFTLFFBQVEsTUFBTSxNQUFNLElBQUksTUFBTTtBQU1oRix3QkFBSSxLQUFLLFNBQVMsTUFBTSxPQUFPLEdBQUc7QUFDakMsMEJBQUksaUJBQWlCLG9CQUFvQixJQUN2QyxTQUFTLElBQUksT0FBTyxPQUFPO0FBQzFCLDRCQUFJLFNBQVMsTUFBTSxTQUFTLEtBQUs7QUFFakMsK0JBQU8sUUFBUSxLQUFLLE1BQU0sTUFBTSxJQUFJO0FBQUEsc0JBQ3BDLElBQ0QsU0FBUyxJQUFJLE9BQU8sT0FBTztBQUMxQiw0QkFBSSxhQUFhLE1BQU0sV0FBVyxLQUFLLEdBQ3JDd0MsY0FBYSxNQUFNLFNBQVMsS0FBSyxJQUFJLFlBQ3JDLFNBQVMsYUFBY0EsY0FBYSxPQUFPLGlCQUFpQixNQUFNQSxXQUFVO0FBRTlFLCtCQUFPLFFBQVEsS0FBSyxNQUFNLE1BQU0sSUFBSTtBQUFBLHNCQUNoRDtBQUVTLHFDQUFlLE1BQU0sUUFBUSxRQUFRLGdCQUFnQixjQUFjO0FBQUEsb0JBQzVFLFdBQW1CLG9CQUFvQixHQUFHO0FBR2pDLHFDQUFlLE1BQU07QUFBQSxvQkFDOUIsT0FBZTtBQUVOLDBCQUFJLGFBQWEsTUFBTSxXQUFXLE1BQU07QUFFeEMscUNBQWUsTUFBTSxhQUFjLGFBQWEsT0FBTyxpQkFBaUIsTUFBTSxVQUFVO0FBQUEsb0JBRXhGO0FBQ0Qsd0JBQUksQ0FBQyxhQUFjLGlCQUFpQixNQUFNLGNBQWU7QUFDeEQ7QUFBQSxvQkFDQTtBQUVELDBCQUFNLGVBQWU7QUFJckIsd0JBQUksYUFBYSxTQUFTO0FBQ3pCLHdDQUFrQjtBQUFBLG9CQUMzQixPQUFlO0FBSU4sMEJBQUk7QUFPSiwwQkFBSSxJQUFJLE1BQU0sV0FBVyxRQUFRLEdBQUc7QUFDbkMsbUNBQVcsSUFBSSxNQUFNLFFBQVEsUUFBUTtBQUVyQyw0QkFBSSx5QkFBeUIsS0FBSyxPQUFPLEVBQUUsdUJBQXVCLFFBQVE7QUFFMUUsNEJBQUksd0JBQXdCO0FBQzNCLGdDQUFNLG9CQUFvQjtBQUFBLHdCQUMxQjtBQUFBLHNCQUNEO0FBUUQsMEJBQUksa0JBQWtCLElBQUk7QUFBQSx3QkFBaUI7QUFBQTtBQUFBLHdCQUN6QztBQUFBLHdCQUNBLE1BQU0sZ0JBQWdCLEtBQUssS0FBSyxXQUFXLFlBQVksTUFBTSxJQUFJLEtBQUssTUFBTTtBQUFBLHdCQUM1RSxNQUFNO0FBQUEsd0JBQ04sTUFBTTtBQUFBLHNCQUFVO0FBT2xCLDBCQUFJLElBQUksTUFBTSxXQUFXLFFBQVEsR0FBRztBQUVuQyw0QkFBSSxJQUFJLGVBQWUsV0FBVyxRQUFRLEdBQUc7QUFDNUMsK0JBQUssT0FBTyxFQUFFLHVCQUF1QixRQUFRLElBQUksSUFBSSxlQUFlLFdBQVcsUUFBUSxFQUFFLFdBQVcsTUFBTSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQUEsd0JBQ3ZJLE9BQWlCO0FBQ04sK0JBQUssT0FBTyxFQUFFLHVCQUF1QixRQUFRLElBQUksZ0JBQWdCLENBQUM7QUFBQSx3QkFDbEU7QUFBQSxzQkFDRDtBQU9ELDBCQUFJLGdCQUFnQixDQUFDLE1BQU0sYUFBYTtBQUN2QyxrREFBMEI7QUFBQSxzQkFDMUI7QUFBQSxvQkFFRDtBQUFBLGtCQUNEO0FBQUEsZ0JBQ0Q7QUFRRCxvQkFBSSxLQUFLLFVBQVU7QUFFbEIsc0JBQUksS0FBSyxPQUFPLEVBQUUsZUFBZSxnQkFBZ0J4QyxhQUFXO0FBRTNELHlCQUFLLE9BQU8sRUFBRSxlQUFlLGNBQWM7QUFFM0MsOENBQTBCO0FBQUEsa0JBQzFCO0FBQUEsZ0JBQ0Q7QUFFRCxvQkFBSSx5QkFBeUI7QUFDNUIsc0JBQUksb0JBQW9CLE9BQU87QUFBQSxnQkFDL0I7QUFBQSxjQUNEO0FBSUQsa0JBQUksS0FBSyxZQUFZQSxlQUFhLEtBQUssWUFBWSxRQUFRO0FBQzFELHlCQUFTLE1BQU0sTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVU7QUFBQSxjQUNyQztBQUNELGtCQUFJLEtBQUssZUFBZUEsZUFBYSxLQUFLLGVBQWUsVUFBVTtBQUNsRSx5QkFBUyxNQUFNLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxhQUFhO0FBQUEsY0FDeEM7QUFHRCxrQkFBSSxLQUFLLFVBQVU7QUFDbEIscUJBQUssU0FBUztBQUFBLGtCQUFLLGNBQWMsQ0FBQztBQUFBLGtCQUNoQyxjQUFjLENBQUM7QUFBQSxrQkFDZjtBQUFBLGtCQUNBLEtBQUssSUFBSSxHQUFJLFlBQVksS0FBSyxXQUFZLFdBQVc7QUFBQSxrQkFDckQ7QUFBQSxrQkFDQTtBQUFBLGdCQUFlO0FBQUEsY0FDakI7QUFHRCxrQkFBSSxvQkFBb0IsR0FBRztBQUMxQiw2QkFBYSxDQUFDO0FBQUEsY0FDZDtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBR0QsY0FBSSxTQUFTLE1BQU0sV0FBVztBQUM3QixtQkFBTyxJQUFJO0FBQUEsVUFDWDtBQUFBLFFBQ0Q7QUFPRCxpQkFBUyxhQUFhLFdBQVcsV0FBVztBQUUzQyxjQUFJLENBQUMsU0FBUyxNQUFNLE1BQU0sU0FBUyxHQUFHO0FBQ3JDLG1CQUFPO0FBQUEsVUFDUDtBQUdELGNBQUksT0FBTyxTQUFTLE1BQU0sTUFBTSxTQUFTLEVBQUUsQ0FBQyxHQUMxQyxXQUFXLFNBQVMsTUFBTSxNQUFNLFNBQVMsRUFBRSxDQUFDLEdBQzVDLE9BQU8sU0FBUyxNQUFNLE1BQU0sU0FBUyxFQUFFLENBQUMsR0FDeEMsV0FBVyxTQUFTLE1BQU0sTUFBTSxTQUFTLEVBQUUsQ0FBQztBQUU5QyxjQUFJLHNCQUFzQjtBQU0xQixtQkFBUyxJQUFJLEdBQUcsYUFBYSxLQUFLLFFBQVEsSUFBSSxZQUFZLEtBQUs7QUFDOUQsZ0JBQUksVUFBVSxLQUFLLENBQUMsRUFBRTtBQUt0QixnQkFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLE1BQU07QUFDN0Isa0JBQUksS0FBSyxZQUFZLFFBQVE7QUFDNUIsb0JBQUksaUJBQWlCLFNBQVMsV0FBVyxLQUFLLE9BQU87QUFBQSxjQUNyRDtBQUVELGtCQUFJLEtBQUssZUFBZSxVQUFVO0FBQ2pDLG9CQUFJLGlCQUFpQixTQUFTLGNBQWMsS0FBSyxVQUFVO0FBQUEsY0FDM0Q7QUFBQSxZQUNEO0FBT0QsZ0JBQUksT0FBTyxLQUFLLE9BQU87QUFFdkIsZ0JBQUksS0FBSyxTQUFTLFNBQVNILEdBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxNQUFNRyxlQUFhLENBQUMsNEJBQTRCLEtBQUtILEdBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUk7QUFFeEgsa0JBQUksTUFBTTtBQUNULHFCQUFLLGNBQWM7QUFFbkIscUJBQUsseUJBQXlCO0FBRTlCLG9CQUFJLDRCQUE0QjtBQUVoQyxnQkFBQUEsR0FBRSxLQUFLLElBQUksTUFBTSxjQUFjLFNBQVNZLElBQUcsZUFBZTtBQUN6RCxzQkFBSSxlQUFlLFNBQVMsS0FBSyxhQUFhLElBQUksSUFBSSxHQUNwRCxlQUFlLEtBQUssZUFBZSxhQUFhO0FBRWxELHNCQUFJLEtBQUssZUFBZSxhQUFhLE1BQU1ULGVBQWEsSUFBSSxPQUFPLFNBQVMsZUFBZSxNQUFNLEVBQUUsS0FBSyxZQUFZLEdBQUc7QUFDdEgsZ0RBQTRCO0FBRTVCLDJCQUFPLEtBQUssZUFBZSxhQUFhO0FBQUEsa0JBQ3hDO0FBQUEsZ0JBQ1IsQ0FBTztBQUdELG9CQUFJLEtBQUssVUFBVTtBQUNsQiw4Q0FBNEI7QUFDNUIseUJBQU8sS0FBSyxlQUFlO0FBQUEsZ0JBQzNCO0FBR0Qsb0JBQUksMkJBQTJCO0FBQzlCLHNCQUFJLG9CQUFvQixPQUFPO0FBQUEsZ0JBQy9CO0FBR0Qsb0JBQUksT0FBTyxZQUFZLFNBQVMsb0JBQW9CO0FBQUEsY0FDcEQ7QUFBQSxZQUNEO0FBUUQsZ0JBQUksQ0FBQyxhQUFhLEtBQUssWUFBWSxDQUFDLEtBQUssUUFBUyxNQUFNLGFBQWEsR0FBSTtBQUV4RSxrQkFBSTtBQUNILHFCQUFLLFNBQVMsS0FBSyxVQUFVLFFBQVE7QUFBQSxjQUNyQyxTQUFRLE9BQU87QUFDZiwyQkFBVyxXQUFXO0FBQ3JCLHdCQUFNO0FBQUEsZ0JBQ04sR0FBRSxDQUFDO0FBQUEsY0FDSjtBQUFBLFlBQ0Q7QUFPRCxnQkFBSSxZQUFZLEtBQUssU0FBUyxNQUFNO0FBQ25DLHVCQUFTLFFBQVE7QUFBQSxZQUNqQjtBQU1ELGdCQUFJLFFBQVEsS0FBSyxTQUFTLFFBQVEsQ0FBQyxXQUFXO0FBRzdDLGNBQUFILEdBQUUsS0FBSyxLQUFLLGlCQUFpQixTQUFTLGNBQWMsZ0JBQWdCO0FBQ25FLG9CQUFJLFVBQVUsS0FBSyxZQUFZLE1BQU8sV0FBVyxlQUFlLFVBQVUsSUFBSSxXQUFXLGVBQWUsUUFBUSxLQUFLLFFBQVEsR0FBSTtBQUNoSSxzQkFBSSxnQkFBZ0IsZUFBZTtBQUVuQyxpQ0FBZSxhQUFhLGVBQWU7QUFDM0MsaUNBQWUsV0FBVztBQUFBLGdCQUMxQjtBQUVELG9CQUFJLHNCQUFzQixLQUFLLFlBQVksS0FBSyxXQUFXLGVBQWUsUUFBUSxNQUFNLE9BQU8sZUFBZSxhQUFhLEtBQUs7QUFDL0gsaUNBQWUsV0FBVztBQUMxQixpQ0FBZSxhQUFhO0FBQUEsZ0JBQzVCO0FBQUEsY0FDUCxDQUFNO0FBRUQsdUJBQVMsU0FBUyxXQUFXLEVBQUMsTUFBTSxNQUFNLE9BQU8sS0FBSyxNQUFLLENBQUM7QUFBQSxZQUM1RDtBQVNELGdCQUFJLEtBQUssVUFBVSxPQUFPO0FBQ3pCLGNBQUFBLEdBQUUsUUFBUSxTQUFTLEtBQUssS0FBSztBQUFBLFlBQzdCO0FBQUEsVUFDRDtBQVFELG1CQUFTLE1BQU0sTUFBTSxTQUFTLElBQUk7QUFJbEMsbUJBQVMsSUFBSSxHQUFHLGNBQWMsU0FBUyxNQUFNLE1BQU0sUUFBUSxJQUFJLGFBQWEsS0FBSztBQUNoRixnQkFBSSxTQUFTLE1BQU0sTUFBTSxDQUFDLE1BQU0sT0FBTztBQUN0QyxvQ0FBc0I7QUFFdEI7QUFBQSxZQUNBO0FBQUEsVUFDRDtBQUVELGNBQUksd0JBQXdCLE9BQU87QUFFbEMscUJBQVMsTUFBTSxZQUFZO0FBRzNCLG1CQUFPLFNBQVMsTUFBTTtBQUN0QixxQkFBUyxNQUFNLFFBQVE7VUFDdkI7QUFBQSxRQUNEO0FBV0QsUUFBQWdDLFFBQU8sV0FBVztBQUVsQixZQUFJQSxZQUFXL0IsU0FBUTtBQUV0QixVQUFBK0IsUUFBTyxHQUFHLFdBQVc7QUFFckIsVUFBQUEsUUFBTyxHQUFHLFNBQVMsV0FBVyxTQUFTO0FBQUEsUUFDdkM7QUFPRCxRQUFBaEMsR0FBRSxLQUFLLENBQUMsUUFBUSxJQUFJLEdBQUcsU0FBUyxHQUFHLFdBQVc7QUFDN0MsbUJBQVMsVUFBVSxVQUFVLFNBQVMsSUFBSSxTQUFTLFNBQVMsU0FBUyxlQUFlLGNBQWMsVUFBVSxhQUFhO0FBQ3hILGdCQUFJLE9BQU9BLEdBQUUsT0FBTyxDQUFBLEdBQUksT0FBTyxHQUM3QixRQUFRLEtBQUssT0FDYixXQUFXLEtBQUssVUFDaEIsZUFBZSxDQUFFLEdBQ2pCLGlCQUFpQixFQUFDLFFBQVEsSUFBSSxXQUFXLElBQUksY0FBYyxJQUFJLFlBQVksSUFBSSxlQUFlLEdBQUU7QUFFbEcsZ0JBQUksS0FBSyxZQUFZRyxhQUFXO0FBRy9CLG1CQUFLLFVBQVcsY0FBYyxTQUFVLFNBQVMsSUFBSSxPQUFPLGVBQWUsT0FBTyxNQUFNLFdBQVcsaUJBQWlCLFVBQVc7QUFBQSxZQUMvSDtBQUVELGlCQUFLLFFBQVEsV0FBVztBQUV2QixrQkFBSSxrQkFBa0IsS0FBSyxPQUFPO0FBQ2pDLHNCQUFNLEtBQUssVUFBVSxRQUFRO0FBQUEsY0FDN0I7QUFHRCx1QkFBUyxZQUFZLGdCQUFnQjtBQUNwQyxvQkFBSSxDQUFDLGVBQWUsZUFBZSxRQUFRLEdBQUc7QUFDN0M7QUFBQSxnQkFDQTtBQUNELDZCQUFhLFFBQVEsSUFBSSxRQUFRLE1BQU0sUUFBUTtBQUkvQyxvQkFBSSxnQkFBZ0IsSUFBSSxpQkFBaUIsU0FBUyxRQUFRO0FBQzFELCtCQUFlLFFBQVEsSUFBSyxjQUFjLFNBQVUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYTtBQUFBLGNBQzFGO0FBR0QsMkJBQWEsV0FBVyxRQUFRLE1BQU07QUFDdEMsc0JBQVEsTUFBTSxXQUFXO0FBQUEsWUFDOUI7QUFFSSxpQkFBSyxXQUFXLFdBQVc7QUFFMUIsdUJBQVMsWUFBWSxjQUFjO0FBQ2xDLG9CQUFJLGFBQWEsZUFBZSxRQUFRLEdBQUc7QUFDMUMsMEJBQVEsTUFBTSxRQUFRLElBQUksYUFBYSxRQUFRO0FBQUEsZ0JBQy9DO0FBQUEsY0FDRDtBQUdELGtCQUFJLGtCQUFrQixlQUFlLEdBQUc7QUFDdkMsb0JBQUksVUFBVTtBQUNiLDJCQUFTLEtBQUssVUFBVSxRQUFRO0FBQUEsZ0JBQ2hDO0FBQ0Qsb0JBQUksYUFBYTtBQUNoQiw4QkFBWSxTQUFTLFFBQVE7QUFBQSxnQkFDN0I7QUFBQSxjQUNEO0FBQUEsWUFDTjtBQUVJLHFCQUFTLFNBQVMsZ0JBQWdCLElBQUk7QUFBQSxVQUMxQztBQUFBLFFBQ0EsQ0FBRztBQUdELFFBQUFILEdBQUUsS0FBSyxDQUFDLE1BQU0sS0FBSyxHQUFHLFNBQVMsR0FBRyxXQUFXO0FBQzVDLG1CQUFTLFVBQVUsU0FBUyxTQUFTLElBQUksU0FBUyxTQUFTLFNBQVMsZUFBZSxjQUFjLFVBQVUsYUFBYTtBQUN2SCxnQkFBSSxPQUFPQSxHQUFFLE9BQU8sQ0FBQSxHQUFJLE9BQU8sR0FDN0IsV0FBVyxLQUFLLFVBQ2hCLGdCQUFnQixFQUFDLFNBQVUsY0FBYyxPQUFRLElBQUksRUFBQztBQUl4RCxnQkFBSSxrQkFBa0IsR0FBRztBQUN4QixtQkFBSyxRQUFRO0FBQUEsWUFDYjtBQUNELGdCQUFJLGtCQUFrQixlQUFlLEdBQUc7QUFDdkMsbUJBQUssV0FBVztBQUFBLFlBQ3JCLE9BQVc7QUFDTixtQkFBSyxXQUFXLFdBQVc7QUFDMUIsb0JBQUksVUFBVTtBQUNiLDJCQUFTLEtBQUssVUFBVSxRQUFRO0FBQUEsZ0JBQ2hDO0FBQ0Qsb0JBQUksYUFBYTtBQUNoQiw4QkFBWSxTQUFTLFFBQVE7QUFBQSxnQkFDN0I7QUFBQSxjQUNQO0FBQUEsWUFDSztBQUlELGdCQUFJLEtBQUssWUFBWUcsYUFBVztBQUMvQixtQkFBSyxVQUFXLGNBQWMsT0FBTyxTQUFTO0FBQUEsWUFDOUM7QUFFRCxxQkFBUyxNQUFNLGVBQWUsSUFBSTtBQUFBLFVBQ3RDO0FBQUEsUUFDQSxDQUFHO0FBRUQsZUFBTztBQUFBLE1BQ1AsRUFBRSxPQUFPLFVBQVUsT0FBTyxTQUFTLFFBQVMsUUFBUyxTQUFTLE9BQU8sV0FBVyxNQUFTO0FBQUEsSUFDM0YsQ0FBQztBQUFBO0VDNXBKRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUEwQmUsV0FBUyxjQUFjLEtBQUssU0FBUztBQUNsRCxRQUFJLFlBQVksUUFBVztBQUN6QjtBQUFBLElBQ0Q7QUFHRCxVQUFNLGlCQUFpQkgsSUFBRSxHQUFHLEVBQUUsU0FBUywyQkFBMkI7QUFDbEUsVUFBTSxpQkFBaUJBLElBQUUsR0FBRyxFQUFFLFNBQVMsMkJBQTJCO0FBR2xFLFFBQUksUUFBUSxTQUFTLFVBQWEsZUFBZSxRQUFRO0FBQ3ZELHFCQUFlLEtBQUssVUFBVSxRQUFRLElBQUk7QUFBQSxJQUMzQztBQUNELFFBQUksUUFBUSxTQUFTLFVBQWEsZUFBZSxRQUFRO0FBQ3ZELHFCQUFlLEtBQUssVUFBVSxRQUFRLElBQUk7QUFBQSxJQUMzQztBQUFBLEVBQ0g7QUFBQSxFQzFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQTBCZSxNQUFNLGtCQUFrQjtBQUFBLElBQ3JDLE9BQU87QUFDTEEsVUFBRSx1QkFBdUIsRUFBRSxLQUFLLENBQUMsT0FBTyxZQUFZO0FBRWxELFlBQUlBLElBQUUsT0FBTyxFQUFFLEtBQUssUUFBUSxFQUFFLFNBQVMsR0FBRztBQUN4QyxjQUFJLFFBQVE7QUFFWkEsY0FBRSxPQUFPLEVBQ04sS0FBSyxRQUFRLEVBQ2IsS0FBSyxDQUFDLFlBQVksaUJBQWlCO0FBQ2xDLGdCQUFJLGFBQWEsR0FBRztBQUNsQkEsa0JBQUUsWUFBWSxFQUFFO0FBQ2hCLHVCQUFTO0FBQUEsWUFDVjtBQUFBLFVBQ2IsQ0FBVztBQUVIQSxjQUFFLE9BQU8sRUFBRSxLQUFLLFdBQVcsRUFBRSxPQUFPLElBQUksS0FBSyxFQUFFO0FBQUEsUUFDaEQ7QUFBQSxNQUNQLENBQUs7QUFBQSxJQUNGO0FBQUEsRUFDSDtBQUFBLEVDOUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWlDQUEsTUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNO0FBQ3RCLFFBQUksYUFBYTtBQUVqQkEsUUFBRSxtQ0FBbUMsRUFBRSxHQUFHLFNBQVMsV0FBVztBQUM1RCxtQkFBYTtBQUFBLElBQ2pCLENBQUs7QUFDSCxVQUFNLE9BQU8sQ0FBQyxjQUFjO0FBQzFCLFlBQU0sZUFBZTtBQUNyQixZQUFNLGNBQWNBLElBQUUsdUJBQXVCO0FBQzdDLFlBQU0sY0FDSkEsSUFBRSw4QkFBOEIsRUFBRSxPQUFNLElBQUs7QUFDL0MsWUFBTSxrQkFBa0IsWUFBWSxTQUFRLEVBQUc7QUFDL0Msa0JBQVk7QUFBQSxRQUNWO0FBQUEsVUFDRSxZQUNFLGNBQWMsT0FDVixrQkFBa0IsY0FDbEIsa0JBQWtCO0FBQUEsUUFDekI7QUFBQSxRQUNELE1BQU07QUFDSixjQUFJLFlBQVksV0FBVyxPQUFPLEdBQUc7QUFDbkNBLGdCQUFFLFdBQVcsRUFBRSxJQUFJLFdBQVcsSUFBSTtBQUFBLFVBQzVDLFdBQ1UsWUFBWSxTQUFVLEVBQUMsTUFBTSxZQUFZLE9BQVEsS0FDakRBLElBQUUsYUFBYSxFQUFFLE9BQVEsR0FDekI7QUFDQUEsZ0JBQUUsYUFBYSxFQUFFLElBQUksV0FBVyxJQUFJO0FBQUEsVUFDckM7QUFBQSxRQUNGO0FBQUEsTUFDUDtBQUFBLElBQ0E7QUFFRSxVQUFNLGdCQUFnQixDQUFDLE9BQU87QUFDNUIsWUFBTSxhQUFhO0FBQ25CLFlBQU0sVUFBVUEsSUFBRTRCLGFBQVcsZUFBZSxRQUFRLE1BQU07QUFDMUQsWUFBTSxjQUFjLEdBQUcsS0FBSyx1QkFBdUI7QUFDbkQ1QixVQUFFNEIsYUFBVyxlQUFlLFFBQVEsS0FBSyxFQUFFLEdBQUcsU0FBUyxDQUFDLFVBQVU7QUFFaEUsWUFBSTVCLElBQUU0QixhQUFXLGVBQWUsUUFBUSxLQUFLLEVBQUUsU0FBUyxVQUFVLEdBQUc7QUFDbkU1QixjQUFFNEIsYUFBVyxlQUFlLFFBQVEsS0FBSyxFQUFFLFlBQVksVUFBVTtBQUFBLFFBQ2xFO0FBQ0Q1QixZQUFFLE1BQU0sYUFBYSxFQUFFLFNBQVMsVUFBVTtBQUcxQ0EsWUFBRTRCLGFBQVcsZUFBZSxRQUFRLEtBQUssRUFBRTtBQUFBLFVBQ3pDO0FBQUEsVUFDQTVCLElBQUUsTUFBTSxNQUFNLEVBQUUsS0FBSyxpQkFBaUI7QUFBQSxRQUM5QztBQUNNQSxZQUFFNEIsYUFBVyxlQUFlLFFBQVEsS0FBSyxFQUFFO0FBQUEsVUFDekM7QUFBQSxVQUNBNUIsSUFBRSxNQUFNLE1BQU0sRUFBRSxLQUFLLEtBQUs7QUFBQSxRQUNsQztBQUNNQSxZQUFFNEIsYUFBVyxlQUFlLFFBQVEsS0FBSyxFQUFFO0FBQUEsVUFDekM7QUFBQSxVQUNBNUIsSUFBRSxNQUFNLE1BQU0sRUFBRSxLQUFLLE9BQU87QUFBQSxRQUNwQztBQUdNO0FBQUEsVUFDRUEsSUFBRTRCLGFBQVcsZUFBZSxRQUFRLEtBQUs7QUFBQSxVQUN6QzVCLElBQUUsTUFBTSxNQUFNLEVBQUUsS0FBSyxxQkFBcUI7QUFBQSxRQUNsRDtBQUFBLE1BQ0EsQ0FBSztBQUNELFVBQUksWUFBWSxLQUFLLElBQUksRUFBRSxVQUFVLFlBQVk7QUFDL0MsZ0JBQVEsS0FBSTtBQUFBLE1BQ2xCLE9BQVc7QUFDTCxnQkFBUSxHQUFHLFNBQVMsQ0FBQyxVQUFVO0FBQzdCLGNBQ0VBLElBQUUsTUFBTSxNQUFNLEVBQUUsU0FBUyxVQUFVLEtBQ25DQSxJQUFFLHVCQUF1QixFQUFFLFNBQVUsRUFBQyxNQUFNLEdBQzVDO0FBQ0EsaUJBQUssSUFBSTtBQUNUQSxnQkFBRTRCLGFBQVcsZUFBZSxTQUFTLEVBQUUsSUFBSSxXQUFXLEdBQUc7QUFBQSxVQUNuRSxXQUNVNUIsSUFBRSxNQUFNLE1BQU0sRUFBRSxTQUFTLFlBQVksS0FDckMsWUFBWSxTQUFVLEVBQUMsTUFBTSxZQUFZLE9BQVEsSUFDL0NBLElBQUUsYUFBYSxFQUFFLE9BQVEsR0FDM0I7QUFDQSxpQkFBSyxNQUFNO0FBQ1hBLGdCQUFFNEIsYUFBVyxlQUFlLE9BQU8sRUFBRSxJQUFJLFdBQVcsR0FBRztBQUFBLFVBQ3hEO0FBQUEsUUFDVCxDQUFPO0FBQUEsTUFDRjtBQUNELFNBQUcsS0FBS0EsYUFBVyxVQUFVLGNBQWMsRUFBRSxVQUFVO0FBQUEsUUFDckQsaUJBQWlCO0FBQUEsUUFDakIsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLE1BQ1gsQ0FBSztBQUVENUIsVUFBRTRCLGFBQVcsZUFBZSxTQUFTLEVBQUUsSUFBSSxzQkFBc0I7QUFBQSxJQUNyRTtBQUVFQSxpQkFBVyxHQUFHLGtCQUFrQixDQUFDLFFBQVE7QUFDdkMsWUFBTSxPQUFPO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixZQUFZLElBQUksUUFBUTtBQUFBLFFBQ3hCLHNCQUFzQixJQUFJLFFBQVE7QUFBQSxNQUN4QztBQUNJNUIsVUFBRSxLQUFLNEIsYUFBVyxLQUFLLE1BQU0sU0FBUyxNQUFNLE1BQU0sTUFBTSxFQUNyRCxLQUFLLENBQUMsU0FBUztBQUNkNUIsWUFBRSxNQUFNLEVBQUUsT0FBTyxLQUFLLGNBQWM7QUFDcEMsY0FBTSxlQUFlQTtBQUFBQSxVQUNuQixvQkFBb0IsS0FBSyxRQUFRLEVBQUUsSUFBSSxLQUFLLFFBQVEsb0JBQW9CO0FBQUEsUUFDbEY7QUFDUSxxQkFBYSxNQUFNLE1BQU07QUFDekIsc0JBQWMsWUFBWTtBQUMxQixxQkFBYSxHQUFHLG1CQUFtQixNQUFNO0FBQ3ZDLHVCQUFhLE9BQU07QUFBQSxRQUM3QixDQUFTO0FBQUEsTUFDVCxDQUFPLEVBQ0EsS0FBSyxDQUFDLFNBQVM7QUFDZDRCLHFCQUFXLEtBQUssZUFBZTtBQUFBLFVBQzdCLFdBQVc7QUFBQSxVQUNYO0FBQUEsUUFDVixDQUFTO0FBQUEsTUFDVCxDQUFPO0FBQUEsSUFDUCxDQUFHO0FBRUQ1QixRQUFFLE1BQU0sRUFBRTtBQUFBLE1BQ1I7QUFBQSxNQUNBNEIsYUFBVyxlQUFlLFFBQVE7QUFBQSxNQUNsQyxNQUFNO0FBQ0o1QixZQUFFNEIsYUFBVyxlQUFlLFFBQVEsb0JBQW9CLEVBQUU7QUFBQSxVQUN4RDtBQUFBLFFBQ1I7QUFDTTVCLFlBQUU0QixhQUFXLGVBQWUsY0FBYyxFQUFFLFNBQVMsZ0JBQWdCO0FBQ3JFNUIsWUFBRTRCLGFBQVcsZUFBZSxNQUFNLEVBQUUsU0FBUyxnQkFBZ0I7QUFBQSxNQUM5RDtBQUFBLElBQ0w7QUFDRTVCO0FBQUFBLE1BQ0UsR0FBRzRCLGFBQVcsZUFBZSxRQUFRLG9CQUFvQixJQUFJQSxhQUFXLGVBQWUsS0FBSztBQUFBLElBQ2hHLEVBQUksR0FBRyxTQUFTLE1BQU07QUFDbEI1QixVQUFFNEIsYUFBVyxlQUFlLFFBQVEsb0JBQW9CLEVBQUU7QUFBQSxRQUN4RDtBQUFBLE1BQ047QUFDSTVCLFVBQUU0QixhQUFXLGVBQWUsY0FBYyxFQUFFLFlBQVksZ0JBQWdCO0FBQ3hFNUIsVUFBRTRCLGFBQVcsZUFBZSxNQUFNLEVBQUUsWUFBWSxnQkFBZ0I7QUFBQSxJQUNwRSxDQUFHO0FBQ0Q1QixRQUFFLEdBQUc0QixhQUFXLGVBQWUsUUFBUSxvQkFBb0IsTUFBTSxFQUFFO0FBQUEsTUFDakU7QUFBQSxNQUNBLE1BQU07QUFDSjVCLFlBQUU0QixhQUFXLGVBQWUsUUFBUSxvQkFBb0IsRUFBRTtBQUFBLFVBQ3hEO0FBQUEsUUFDUjtBQUNNNUIsWUFBRTRCLGFBQVcsZUFBZSxjQUFjLEVBQUUsWUFBWSxnQkFBZ0I7QUFDeEU1QixZQUFFNEIsYUFBVyxlQUFlLE1BQU0sRUFBRSxZQUFZLGdCQUFnQjtBQUFBLE1BQ2pFO0FBQUEsSUFDTDtBQUVFLFVBQU0saUJBQWlCLFNBQVUsT0FBTztBQUN0QyxVQUFJLE1BQU0sT0FBTyxRQUFRLGNBQWMsUUFBVztBQUNoRCxlQUFPLE1BQU0sT0FBTyxRQUFRO0FBQUEsTUFDN0I7QUFFRCxVQUFJNUIsSUFBRSxNQUFNLE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRSxRQUFRLGNBQWMsUUFBVztBQUMvRCxjQUFNLElBQUksTUFBTSwwQkFBMEI7QUFBQSxNQUMzQztBQUVELGFBQU9BLElBQUUsTUFBTSxNQUFNLEVBQUUsT0FBTSxFQUFHLENBQUMsRUFBRSxRQUFRO0FBQUEsSUFDL0M7QUFFRSxhQUFTLHFCQUFxQixNQUFNO0FBQ2xDQSxVQUFFNEIsYUFBVyxlQUFlLFFBQVEsYUFBYSxFQUFFO0FBQUEsUUFDakQsS0FBSztBQUFBLE1BQ1g7QUFDSTVCLFVBQUU0QixhQUFXLGVBQWUsUUFBUSxtQkFBbUIsRUFBRTtBQUFBLFFBQ3ZELEtBQUs7QUFBQSxNQUNYO0FBQ0k1QixVQUFFNEIsYUFBVyxlQUFlLFFBQVEsT0FBTyxFQUFFO0FBQUEsUUFDM0MsS0FBSztBQUFBLE1BQ1g7QUFFSSxZQUFNLG1CQUFtQjVCLElBQUUsS0FBSyxpQkFBaUI7QUFDakQsWUFBTSxtQkFBbUJBLElBQUU0QixhQUFXLGVBQWUsUUFBUSxPQUFPO0FBRXBFLFVBQUksaUJBQWlCLFNBQVMsR0FBRztBQUMvQix5QkFDRyxZQUFhLEVBQ2IsU0FBUyxpQkFBaUIsTUFBSyxFQUFHLEtBQUssT0FBTyxDQUFDO0FBQUEsTUFDeEQsT0FBVztBQUNMLHlCQUNHLFlBQWEsRUFDYixTQUFTLGlCQUFpQixNQUFLLEVBQUcsS0FBSyxPQUFPLENBQUM7QUFBQSxNQUNuRDtBQUVENUIsVUFBRTRCLGFBQVcsZUFBZSxRQUFRLElBQUksRUFBRSxZQUFZLGdCQUFnQjtBQUV0RTVCLFVBQUU0QixhQUFXLGVBQWUsUUFBUSxVQUFVLEVBQUU7QUFBQSxRQUM5QyxLQUFLO0FBQUEsTUFDWDtBQUNJLFVBQUksS0FBSywwQkFBMEI7QUFDakM1QixZQUFFNEIsYUFBVyxlQUFlLFFBQVEsVUFBVSxFQUFFO0FBQUEsVUFDOUMsS0FBSztBQUFBLFFBQ2I7QUFBQSxNQUNLO0FBRUQ1QixVQUFFLGVBQWUsRUFBRSxHQUFHLG1CQUFtQixNQUFNO0FBQzdDQSxZQUFFLDJCQUEyQixFQUFFO01BQ3JDLENBQUs7QUFFREEsVUFBRSxlQUFlLEVBQUUsR0FBRyxtQkFBbUIsTUFBTTtBQUM3Q0EsWUFBRSwyQkFBMkIsRUFBRTtBQUMvQkEsWUFBRSxVQUFVLEVBQUU7TUFDcEIsQ0FBSztBQUVEQSxVQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVc7QUFDbENBLFlBQUUsVUFBVSxFQUFFO01BQ3BCLENBQUs7QUFFREEsVUFBRSxtQ0FBbUMsRUFBRSxHQUFHLFNBQVMsV0FBVztBQUM1RCxxQkFBYTtBQUFBLE1BQ25CLENBQU87QUFHSCxlQUFTLHNCQUFzQjtBQUM3QixZQUFJQSxJQUFFLDJCQUEyQixFQUFFLEdBQUcsVUFBVSxHQUFHO0FBQy9DQSxjQUFFLFVBQVUsRUFBRTtRQUN4QixPQUFhO0FBQ0hBLGNBQUUsVUFBVSxFQUFFO1FBQ2pCO0FBQUEsTUFDSjtBQUVDLFVBQUssQ0FBQyxZQUFhO0FBQ2pCQSxZQUFFLDJCQUEyQixFQUFFLEtBQUssV0FBVztBQUM3QztRQUNSLENBQU87QUFBQSxNQUNQLE9BQVc7QUFDTEEsWUFBRSwyQkFBMkIsRUFBRTtNQUNoQztBQUVEQSxVQUFFLFVBQVUsRUFBRSxHQUFHLFNBQVMsV0FBVztBQUNuQ0EsWUFBRSwyQkFBMkIsRUFBRTtBQUMvQkEsWUFBRSxVQUFVLEVBQUU7TUFFcEIsQ0FBRztBQUNDLG1CQUFhO0FBRWJBLFVBQUUsZUFBZSxFQUFFO0FBRW5CLFlBQU0sb0JBQW9CLElBQUk7QUFDOUIsd0JBQWtCLEtBQUk7QUFBQSxJQUN2QjtBQUlEQSxRQUFFLE1BQU0sRUFBRTtBQUFBLE1BQ1I7QUFBQSxNQUNBLEdBQUc0QixhQUFXLGVBQWUsUUFBUSxhQUFhO0FBQUEsTUFDbEQsQ0FBQyxVQUFVO0FBQ1RBLHFCQUFXLEtBQUssZ0JBQWdCLGVBQWUsS0FBSyxDQUFDO0FBQUEsTUFDdEQ7QUFBQSxJQUNMO0FBRUU1QixRQUFFLE1BQU0sRUFBRTtBQUFBLE1BQ1I7QUFBQSxNQUNBNEIsYUFBVyxlQUFlLFFBQVE7QUFBQSxNQUNsQyxDQUFDLFVBQVU7QUFDVEEscUJBQVcsS0FBSyxnQkFBZ0IsZUFBZSxLQUFLLENBQUM7QUFBQSxNQUN0RDtBQUFBLElBQ0w7QUFFRTVCLFFBQUUsTUFBTSxFQUFFO0FBQUEsTUFDUjtBQUFBLE1BQ0E0QixhQUFXLGVBQWUsUUFBUTtBQUFBLE1BQ2xDLENBQUMsVUFBVTtBQUNULGNBQU0sZUFBYztBQUNwQkEscUJBQVcsS0FBSyxnQkFBZ0I1QixJQUFFLE1BQU0sTUFBTSxFQUFFLFFBQVEsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUk7QUFBQSxNQUN6RTtBQUFBLElBQ0w7QUFFRSxXQUFPLGlCQUFpQixZQUFZLENBQUMsTUFBTTtBQUN6QyxVQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYTtBQUNsQyxlQUFPLFNBQVMsT0FBTyxFQUFFLE1BQU07QUFBQSxNQUNoQztBQUFBLElBQ0wsQ0FBRztBQUVEQSxRQUFFLE1BQU0sRUFBRTtBQUFBLE1BQ1I7QUFBQSxNQUNBLEdBQUc0QixhQUFXLGVBQWUsUUFBUSxhQUFhO0FBQUEsTUFDbEQsQ0FBQyxVQUFVO0FBQ1QsY0FBTSxPQUFPNUIsSUFBRSxNQUFNLE1BQU0sRUFBRSxRQUFRLE1BQU07QUFDM0M0QixxQkFBVyxLQUFLLGdCQUFnQixJQUFJLEtBQUssVUFBUyxDQUFFLEVBQUU7QUFBQSxNQUN2RDtBQUFBLElBQ0w7QUFFRUEsaUJBQVcsR0FBRyxxQkFBcUIsQ0FBQyxTQUFTO0FBQzNDLDJCQUFxQixJQUFJO0FBQ3pCLGFBQU8sU0FBUyxHQUFHLENBQUM7QUFBQSxJQUN4QixDQUFHO0FBQUEsRUFDSCxDQUFDO0FBQUEsRUNsVUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUE2QmUsTUFBTSxjQUFjO0FBQUEsSUFDakMsT0FBTztBQUNMLFlBQU0sYUFBYTtBQUNuQixZQUFNLFVBQVU1QixJQUFFLGtCQUFrQjtBQUNwQyxZQUFNLGNBQWNBLElBQUUsMEJBQTBCO0FBRWhEQSxVQUFFLE1BQU0sRUFDTCxHQUFHLFNBQVMsbUJBQW1CLENBQUMsVUFBVTtBQUV6QyxZQUFJQSxJQUFFLGlCQUFpQixFQUFFLFNBQVMsVUFBVSxHQUFHO0FBQzdDQSxjQUFFLGlCQUFpQixFQUFFLFlBQVksVUFBVTtBQUFBLFFBQzVDO0FBQ0RBLFlBQUUsTUFBTSxhQUFhLEVBQUUsU0FBUyxVQUFVO0FBRzFDQSxZQUFFLFdBQVcsZUFBZSxRQUFRLGlCQUFpQixFQUFFLEtBQUssT0FBT0EsSUFBRSxNQUFNLE1BQU0sRUFBRSxLQUFLLGlCQUFpQixDQUFDO0FBQzFHQSxZQUFFLFdBQVcsZUFBZSxRQUFRLGlCQUFpQixFQUFFLEtBQUssU0FBU0EsSUFBRSxNQUFNLE1BQU0sRUFBRSxLQUFLLE9BQU8sQ0FBQztBQUNsR0EsWUFBRSxXQUFXLGVBQWUsUUFBUSxpQkFBaUIsRUFBRSxLQUFLLE9BQU9BLElBQUUsTUFBTSxNQUFNLEVBQUUsS0FBSyxLQUFLLENBQUM7QUFBQSxNQU90RyxDQUFPLEVBQ0EsR0FBRyxTQUFTLG9CQUFvQixDQUFDLFVBQVU7QUFDMUMsWUFBSSxNQUFNLE9BQU8sT0FBTyxjQUFjO0FBQ3BDQSxjQUFFLGdCQUFnQixFQUFFLE1BQU0sTUFBTTtBQUFBLFFBQ2pDO0FBQUEsTUFDVCxDQUFPO0FBRUgsVUFBSUEsSUFBRSw2QkFBNkIsRUFBRSxVQUFVLFlBQVk7QUFDekQsZ0JBQVEsSUFBSSxXQUFXLElBQUk7QUFBQSxNQUNqQyxPQUFXO0FBQ0wsZ0JBQVEsR0FBRyxTQUFTLENBQUMsVUFBVTtBQUM3QixjQUFJQSxJQUFFLE1BQU0sTUFBTSxFQUFFLFNBQVMsVUFBVSxLQUFLLFlBQVksV0FBVyxNQUFNLEdBQUc7QUFDMUUsaUJBQUssS0FBSyxJQUFJO0FBQ2RBLGdCQUFFLHNCQUFzQixFQUFFLElBQUksV0FBVyxHQUFHO0FBQUEsVUFDdEQsV0FDVUEsSUFBRSxNQUFNLE1BQU0sRUFBRSxTQUFTLFlBQVksS0FDbEMsWUFBWSxXQUFXLE1BQU0sWUFBWSxPQUFNLElBQUtBLElBQUUsZ0JBQWdCLEVBQUUsT0FBUSxHQUNuRjtBQUNBLGlCQUFLLEtBQUssTUFBTTtBQUNoQkEsZ0JBQUUsb0JBQW9CLEVBQUUsSUFBSSxXQUFXLEdBQUc7QUFBQSxVQUMzQztBQUFBLFFBQ1QsQ0FBTztBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsSUFFRCxLQUFLLFdBQVc7QUFDZCxZQUFNLGVBQWU7QUFDckIsWUFBTSxjQUFjQSxJQUFFLDBCQUEwQjtBQUNoRCxZQUFNLGNBQWNBLElBQUUsaUNBQWlDLEVBQUUsT0FBTSxJQUFLO0FBQ3BFLFlBQU0sa0JBQWtCLFlBQVksU0FBUSxFQUFHO0FBQy9DLGtCQUFZO0FBQUEsUUFDVjtBQUFBLFVBQ0UsWUFBWSxjQUFjLE9BQU8sa0JBQWtCLGNBQWMsa0JBQWtCO0FBQUEsUUFDcEY7QUFBQSxRQUNELE1BQU07QUFDSixjQUFJLFlBQVksV0FBVyxPQUFPLEdBQUc7QUFDbkNBLGdCQUFFLG9CQUFvQixFQUFFLElBQUksV0FBVyxJQUFJO0FBQUEsVUFDNUMsV0FBVSxZQUFZLFNBQVUsRUFBQyxNQUFNLFlBQVksT0FBTSxLQUFNQSxJQUFFLGdCQUFnQixFQUFFLE9BQU0sR0FBSTtBQUM1RkEsZ0JBQUUsc0JBQXNCLEVBQUUsSUFBSSxXQUFXLElBQUk7QUFBQSxVQUM5QztBQUFBLFFBQ0Y7QUFBQSxNQUNQO0FBQUEsSUFDRztBQUFBLEVBQ0g7QUFBQSxFQ2hHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE2QkFBLE1BQUUsUUFBUSxFQUFFLE1BQU0sTUFBTTtBQUN0QixhQUFTLGFBQWE7QUFDcEIsWUFBTSxlQUFlQSxJQUFFNEIsYUFBVyxlQUFlLFFBQVEsS0FBSztBQUM5RCxZQUFNLG9CQUFvQjVCLElBQUU0QixhQUFXLGVBQWUsUUFBUSxpQkFBaUI7QUFDL0UsVUFBSSxnQkFBZ0I1QixJQUFFNEIsYUFBVyxlQUFlLFFBQVEsUUFBUTtBQUVoRSxZQUFNLFFBQVEsQ0FBQyxlQUFlLGdCQUFnQjtBQUM1QyxjQUFNLG1CQUFtQixZQUFZLEtBQUtBLGFBQVcsZUFBZSxRQUFRLEtBQUs7QUFHakYsc0JBQWMsWUFBWSxVQUFVO0FBQ3BDLHlCQUFpQixTQUFTLFVBQVU7QUFHcEMsMEJBQWtCLEtBQUssT0FBTyxpQkFBaUIsS0FBSyxpQkFBaUIsQ0FBQztBQUN0RSxxQkFBYSxLQUFLLE9BQU8saUJBQWlCLEtBQUssa0JBQWtCLENBQUM7QUFDbEU1QixZQUFFLHNDQUFzQyxFQUFFLEtBQUssUUFBUSxpQkFBaUIsS0FBSyxpQkFBaUIsQ0FBQztBQUcvRixxQkFBYSxLQUFLLFNBQVMsaUJBQWlCLEtBQUssT0FBTyxDQUFDO0FBQ3pELDBCQUFrQixLQUFLLFNBQVMsaUJBQWlCLEtBQUssT0FBTyxDQUFDO0FBQzlELHFCQUFhLEtBQUssT0FBTyxpQkFBaUIsS0FBSyxLQUFLLENBQUM7QUFDckQsMEJBQWtCLEtBQUssT0FBTyxpQkFBaUIsS0FBSyxLQUFLLENBQUM7QUFHMUQsc0JBQWMsY0FBYyxpQkFBaUIsS0FBSyxzQkFBc0IsQ0FBQztBQUN6RSxzQkFBYyxtQkFBbUIsaUJBQWlCLEtBQUsscUJBQXFCLENBQUM7QUFBQSxNQUNuRjtBQUVJQSxVQUFFNEIsYUFBVyxlQUFlLFFBQVEsS0FBSyxFQUFFLEdBQUcsU0FBUyxDQUFDLFVBQVU7QUFDaEUsd0JBQWdCNUIsSUFBRTRCLGFBQVcsZUFBZSxRQUFRLFFBQVE7QUFDNUQsY0FBTSxlQUFlNUIsSUFBRSxNQUFNLE1BQU0sRUFBRSxRQUFRNEIsYUFBVyxlQUFlLFFBQVEsY0FBYyxDQUFDO0FBQUEsTUFDcEcsQ0FBSztBQUVELG1CQUFhLE1BQU07QUFBQSxRQUNqQixPQUFPLENBQUMsT0FBTyxjQUFjO0FBQzNCLDBCQUFnQjVCLElBQUU0QixhQUFXLGVBQWUsUUFBUSxRQUFRO0FBQzVELGdCQUFNLGNBQWMsY0FBYyxRQUFRQSxhQUFXLGVBQWUsUUFBUSxjQUFjO0FBRTFGLGNBQUksY0FBYyxTQUFTO0FBQ3pCLGdCQUFJLFlBQVksT0FBTyxTQUFTLEdBQUc7QUFDakMsb0JBQU0sZUFBZSxZQUFZLEtBQU0sQ0FBQTtBQUFBLFlBQ3hDLFdBQVUsWUFBWSxPQUFPLFNBQVMsR0FBRztBQUN4QyxvQkFBTSxlQUFlLFlBQVksS0FBTSxDQUFBO0FBQUEsWUFDeEM7QUFBQSxVQUNYLFdBQW1CLGNBQWMsUUFBUTtBQUMvQixnQkFBSSxZQUFZLE9BQU8sU0FBUyxHQUFHO0FBQ2pDLG9CQUFNLGVBQWUsWUFBWSxLQUFNLENBQUE7QUFBQSxZQUN4QyxXQUFVLFlBQVksT0FBTyxTQUFTLEdBQUc7QUFDeEMsb0JBQU0sZUFBZSxZQUFZLEtBQU0sQ0FBQTtBQUFBLFlBQ3hDO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxRQUNELGlCQUFpQjtBQUFBLE1BQ3ZCLENBQUs7QUFBQSxJQUNGO0FBRUQsYUFBUyxpQkFBaUI7QUFDeEIsVUFBSTVCLElBQUUsZ0NBQWdDLEVBQUUsU0FBUyxHQUFHO0FBQ2xEQSxZQUFFLG1CQUFtQixFQUFFLFNBQVMsUUFBUTtBQUN4Q0EsWUFBRSxvQkFBb0IsRUFBRSxTQUFTLFFBQVE7QUFDekNBLFlBQUUsbUJBQW1CLEVBQUUsVUFBVTtBQUFBLFVBQy9CLFdBQVc7QUFBQSxVQUNYLFVBQVU7QUFBQSxVQUNWLFVBQVU7QUFBQSxRQUNsQixDQUFPO0FBQ0RBLFlBQUUsMEJBQTBCLEVBQUUsTUFBTSxNQUFNO0FBQ3hDQSxjQUFFLG1CQUFtQixFQUFFLFFBQVEsVUFBVTtBQUFBLFFBQ2pELENBQU87QUFDREEsWUFBRSwyQkFBMkIsRUFBRSxNQUFNLE1BQU07QUFDekNBLGNBQUUsbUJBQW1CLEVBQUUsUUFBUSxTQUFTO0FBQUEsUUFDaEQsQ0FBTztBQUFBLE1BQ1AsT0FBVztBQUNMQSxZQUFFLG1CQUFtQixFQUFFLFlBQVksUUFBUTtBQUMzQ0EsWUFBRSxvQkFBb0IsRUFBRSxZQUFZLFFBQVE7QUFBQSxNQUM3QztBQUFBLElBQ0Y7QUFFRCxhQUFTLGtCQUFrQjtBQUN6QkEsVUFBRTRCLGFBQVcsZUFBZSxTQUFTLEVBQUUsR0FBRyxVQUFVLENBQUMsVUFBVTtBQUM3RCxjQUFNLFNBQVM1QixJQUFFLE1BQU0sYUFBYSxFQUFFLENBQUM7QUFDdkMsY0FBTSxPQUFRLFNBQVUsT0FBTyxNQUFNLENBQUMsSUFBSTtBQUUxQyxZQUFJLFVBQVUsTUFBTTtBQUNsQkEsY0FBRSxNQUFNLEVBQUUsS0FBSSxFQUFHLEtBQUssS0FBSyxJQUFJO0FBQUEsUUFDaEM7QUFBQSxNQUNQLENBQUs7QUFBQSxJQUNGO0FBRUQsYUFBUyxvQkFBb0I7QUFDM0IsWUFBTSxpQkFBaUJBLElBQUU0QixhQUFXLFVBQVUsY0FBYztBQUU1RCxxQkFBZSxVQUFVO0FBQUEsUUFDdkIsaUJBQWlCO0FBQUEsUUFDakIsaUJBQWlCO0FBQUEsUUFDakIsbUJBQW1CO0FBQUEsUUFDbkIsa0JBQWtCO0FBQUEsUUFDbEIsZ0JBQWdCO0FBQUEsUUFDaEIsS0FBSyxTQUFTLGVBQWUsS0FBSyxLQUFLLEdBQUcsRUFBRTtBQUFBLFFBQzVDLEtBQUs7QUFBQSxNQUNYLENBQUs7QUFFRDVCLFVBQUU0QixhQUFXLGVBQWUsU0FBUyxFQUFFLElBQUksc0JBQXNCO0FBRWpFLHFCQUFlLEdBQUcsWUFBWSxNQUFNO0FBQ2xDLFlBQUksZUFBZSxJQUFLLE1BQUssTUFBTSxlQUFlLElBQUcsSUFBSyxlQUFlLEtBQUssS0FBSyxHQUFHO0FBQ3BGLHlCQUFlLElBQUksZUFBZSxLQUFLLEtBQUssQ0FBQztBQUM3Qyx5QkFBZSxRQUFRLFFBQVE7QUFBQSxRQUNoQztBQUFBLE1BQ1AsQ0FBSztBQUVENUIsVUFBRSxNQUFNLEVBQUUsR0FBRyxnQkFBZ0I0QixhQUFXLFVBQVUsZ0JBQWdCLENBQUMsTUFBTTtBQUN2RSxZQUFJLGVBQWUsSUFBSyxNQUFLLElBQUk7QUFDL0I1QixjQUFFLEVBQUUsYUFBYSxFQUFFLFFBQVEsb0JBQW9CO0FBQy9DNEIsdUJBQVcsS0FBSyxpQkFBaUI7QUFBQSxZQUMvQixXQUFXO0FBQUEsWUFDWCxPQUFPO0FBQUEsVUFDakIsQ0FBUztBQUFBLFFBQ0Y7QUFBQSxNQUNQLENBQUs7QUFBQSxJQUNGO0FBRUQsYUFBUyxnQ0FBZ0M7QUFDdkMsWUFBTSxNQUFNNUIsSUFBRTRCLGFBQVcsZUFBZSxRQUFRLElBQUk7QUFDcEQsVUFBSSxHQUFHLGVBQWUsQ0FBQyxNQUFNO0FBQzNCLGNBQU0sU0FBUzVCLElBQUUsRUFBRSxNQUFNO0FBQ3pCLGVBQU8sU0FBUzRCLGFBQVcsZUFBZSxRQUFRLGNBQWM7QUFDaEU1QixZQUFFLE9BQU8sS0FBSyxNQUFNLENBQUMsRUFBRSxTQUFTNEIsYUFBVyxlQUFlLFFBQVEsY0FBYztBQUFBLE1BQ3RGLENBQUs7QUFDRCxVQUFJLEdBQUcsZUFBZSxDQUFDLE1BQU07QUFDM0IsY0FBTSxTQUFTNUIsSUFBRSxFQUFFLE1BQU07QUFDekIsZUFBTyxZQUFZNEIsYUFBVyxlQUFlLFFBQVEsY0FBYztBQUNuRTVCLFlBQUUsT0FBTyxLQUFLLE1BQU0sQ0FBQyxFQUFFLFlBQVk0QixhQUFXLGVBQWUsUUFBUSxjQUFjO0FBQUEsTUFDekYsQ0FBSztBQUFBLElBQ0Y7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUFBLGlCQUFXLEdBQUcsa0JBQWtCLENBQUMsVUFBVTtBQUN6QztBQUNBO0FBQ0EsVUFBSSxTQUFTLE1BQU0sMEJBQTBCO0FBQzNDLGNBQU0seUJBQXlCLFNBQVMsTUFBTSwwQkFBMEIsRUFBRTtBQUMxRSxjQUFNLHdCQUF3QkEsYUFBVyxVQUFVO0FBQ25ELGNBQU0sZ0JBQWdCNUIsSUFBRSxxQkFBcUI7QUFHN0Msc0JBQWMsUUFBUSw0QkFBNEI7QUFBQSxVQUNoRCxLQUFLO0FBQUEsUUFDYixDQUFPO0FBQUEsTUFDRjtBQUNEO0FBQ0FBLFVBQUVBLElBQUU0QixhQUFXLGVBQWUsUUFBUSxVQUFVLEVBQUUsS0FBSyxNQUFNLENBQUMsRUFBRSxTQUFTLFFBQVEsRUFBRSxZQUFZLE1BQU07QUFDckc1QixVQUFFNEIsYUFBVyxlQUFlLFFBQVEsV0FBVyxFQUFFLFlBQVksTUFBTSxvQkFBb0I7QUFFdkYsWUFBTSxnQkFBZ0IsSUFBSTtBQUMxQixvQkFBYyxLQUFJO0FBQUEsSUFDdEIsQ0FBRztBQUFBLEVBQ0gsQ0FBQztBQUFBLEVDL0xEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXlCZSxXQUFTLFNBQVMsTUFBTSxVQUFVLEtBQUs7QUFDcEQsUUFBSTtBQUVKLFdBQU8sSUFBSSxTQUFTO0FBQ2xCLG1CQUFhLEtBQUs7QUFDbEIsY0FBUSxXQUFXLE1BQU07QUFBRSxhQUFLLE1BQU0sTUFBTSxJQUFJO0FBQUEsU0FBTSxPQUFPO0FBQUEsSUFDakU7QUFBQSxFQUNBO0FDNUJVLGVBQUMsT0FBT0EsYUFBVyxRQUFRO0FBRXJDQSxlQUFXLEtBQUssZ0JBQWdCO0FBRWhDLFFBQU0sa0JBQWtCO0FBQ3hCLE1BQUksV0FBVztBQUNmLE1BQUksb0JBQW9CO0FBQ3hCLE1BQUksV0FBVztBQUVmLFFBQU0sZ0NBQWdDO0FBQUEsSUFDcEMsaUJBQWlCLE1BQU07QUFLckIsWUFBTSxlQUFlNUIsSUFBRTRCLGFBQVcsZUFBZSxTQUFTLEdBQUc7QUFFN0QsVUFDRTVCLElBQUU0QixhQUFXLGVBQWUsY0FBYyxXQUFXLEVBQUUsVUFDdEQsYUFBYSxNQUFNLENBQUMsVUFDckI7QUFDQSxxQkFBYSxTQUFTLFVBQVU7QUFBQSxNQUNqQztBQUVELFVBQUksYUFBYSxJQUFJO0FBQ25CLGNBQU0sV0FBVztBQUFBO0FBQUE7QUFBQSxrQkFHTCxRQUFRO0FBQUE7QUFBQTtBQUFBO0FBSXBCNUIsWUFBRTRCLGFBQVcsZUFBZSxjQUFjLFNBQVMsRUFBRSxLQUFLLFFBQVE7QUFDbEUsbUJBQVc7QUFDWCw0QkFBb0I7QUFDcEIsWUFBSSxVQUFVO0FBRVosdUJBQWEsWUFBWSxVQUFVO0FBQUEsUUFDcEM7QUFBQSxNQUNQLFdBQWUsQ0FBQyxZQUFZLG1CQUFtQjtBQUN6QyxtQkFBVztBQUNYLDRCQUFvQjtBQUNwQjVCLFlBQUU0QixhQUFXLGVBQWUsY0FBYyxTQUFTLEVBQUUsS0FBSyxFQUFFO0FBQzVELHFCQUFhLFlBQVksVUFBVTtBQUFBLE1BQ3BDO0FBQUEsSUFDRjtBQUFBLElBQ0Qsc0JBQXNCLENBQUMsU0FBUztBQUs5QixZQUFNLEVBQUUsVUFBVSxrQkFBa0IsUUFBUSxVQUFTLElBQUs7QUFDMUQsaUJBQVcsb0JBQW9CO0FBQy9CLFlBQU0sU0FBUyxhQUFhO0FBRzVCLFVBQUksa0JBQWtCLE9BQU87QUFDM0IsbUJBQVcsT0FBTyxLQUFLLEdBQUc7QUFBQSxNQUNoQyxPQUFXO0FBQ0wsbUJBQVc7QUFBQSxNQUNaO0FBRUQsMEJBQW9CO0FBQUEsSUFDckI7QUFBQSxFQUNIO0FBS0EsV0FBUyxhQUFhO0FBQ3BCNUIsUUFBRSxLQUFLQSxJQUFFLGVBQWUsR0FBRyxDQUFDLE9BQU8sWUFBWTtBQUM3Q0EsVUFBRSxPQUFPLEVBQUUsVUFBVTtBQUFBLFFBQ25CLEtBQUssU0FBU0EsSUFBRSxPQUFPLEVBQUUsS0FBSyxLQUFLLEdBQUcsRUFBRTtBQUFBLFFBQ3hDLEtBQUs7QUFBQSxNQUNYLENBQUs7QUFBQSxJQUNMLENBQUc7QUFFREEsUUFBRTRCLGFBQVcsZUFBZSxTQUFTLEVBQUUsSUFBSSxzQkFBc0I7QUFFakUsa0NBQThCLGdCQUFlO0FBQUEsRUFDL0M7QUFFQSxRQUFNLHlCQUF5QixDQUFDLFVBQVU7QUFDeEMsUUFBSSxPQUFPLG9CQUFvQjtBQUM3QixZQUFNLGVBQWM7QUFFcEIsYUFBTztBQUFBLElBQ1I7QUFFRCxXQUFPO0FBQUEsRUFDVDtBQUNBNUIsTUFBRSxXQUFZO0FBQ1osVUFBTSw0QkFDSjRCLGFBQVcsZUFBZSxLQUFLO0FBQ2pDLFVBQU0sV0FBVyxDQUFBO0FBRWpCQSxpQkFBVyxHQUFHLGVBQWUsTUFBTTtBQUNqQyxhQUFPLHFCQUFxQjtBQUU1QjVCLFVBQUU0QixhQUFXLGVBQWUsUUFBUSxrQkFBa0IsRUFBRTtBQUFBLFFBQ3REO0FBQUEsUUFDQSxDQUFDLGVBQWU7QUFDZCxpQ0FBdUIsVUFBVTtBQUFBLFFBQ2xDO0FBQUEsTUFDUDtBQUVJO0lBQ0osQ0FBRztBQUVEO0FBRUEsVUFBTSxRQUFRNUIsSUFBRSxNQUFNO0FBRXRCLGFBQVMsWUFBWSxXQUFXO0FBQzlCLGFBQU8sY0FBYyxvQkFBb0IsY0FBYztBQUFBLElBQ3hEO0FBRUQsYUFBUyw4QkFBOEIsV0FBVztBQUNoRCxhQUFPLGNBQWM7QUFBQSxJQUN0QjtBQUVELGFBQVMsaUNBQWlDLFNBQVM7QUFDakQsWUFBTSxTQUFTLFFBQ1osUUFBUTRCLGFBQVcsZUFBZSxLQUFLLFNBQVMsRUFDaEQsS0FBSyx5QkFBeUI7QUFFakMsVUFBSSxPQUFPLEdBQUcsUUFBUSxHQUFHO0FBQ3ZCLGVBQU87QUFBQSxNQUNSO0FBRUQsYUFBTztBQUFBLElBQ1I7QUFFRCxhQUFTLFNBQVMsU0FBUztBQUN6QixZQUFNLGtCQUFrQixRQUFRLE1BQU0sR0FBRztBQUN6QyxVQUFJO0FBQ0osVUFBSTtBQUNKLFVBQUksbUJBQW1CO0FBRXZCLFdBQUssSUFBSSxHQUFHLElBQUksZ0JBQWdCLFFBQVEsS0FBSyxHQUFHO0FBQzlDLGVBQU8sZ0JBQWdCLENBQUM7QUFFeEIsWUFBSSxNQUFNLEdBQUc7QUFDWCxpQkFBTyxLQUFLLFVBQVUsR0FBRyxDQUFDLEVBQUUsWUFBVyxJQUFLLEtBQUssVUFBVSxDQUFDO0FBQUEsUUFDN0Q7QUFFRCw0QkFBb0I7QUFBQSxNQUNyQjtBQUVELGFBQU87QUFBQSxJQUNSO0FBRUQsYUFBUyxnQkFBZ0IsU0FBUyxXQUFXO0FBQzNDLFVBQUksQ0FBQyxZQUFZLFNBQVMsR0FBRztBQUMzQixlQUFPO0FBQUEsVUFDTCxLQUFLLFFBQVEsS0FBSyxNQUFNO0FBQUEsVUFDeEIsTUFBTSxTQUFTLFFBQVEsS0FBSyxhQUFhLENBQUM7QUFBQSxRQUNsRDtBQUFBLE1BQ0s7QUFFRCxZQUFNLFNBQVMsaUNBQWlDLE9BQU87QUFFdkQsVUFBSSxDQUFDLFFBQVE7QUFDWCxlQUFPO0FBQUEsTUFDUjtBQUVELFVBQUksYUFBYSxDQUFBO0FBRWpCLFVBQUksOEJBQThCLFNBQVMsR0FBRztBQUM1QyxxQkFBYTtBQUFBLFVBQ1gsS0FBSyxPQUFPLEtBQUssUUFBUTtBQUFBLFVBQ3pCLE1BQU07QUFBQSxRQUNkO0FBQUEsTUFDQSxPQUFXO0FBQ0wscUJBQWE7QUFBQSxVQUNYLEtBQUssT0FBTyxLQUFLLFVBQVU7QUFBQSxVQUMzQixNQUFNO0FBQUEsUUFDZDtBQUFBLE1BQ0s7QUFFRCxhQUFPO0FBQUEsSUFDUjtBQUVELFVBQU0sd0JBQXdCLE1BQU07QUFDbEMsVUFBSTtBQUNKLGFBQU8sU0FBUyxTQUFTLEdBQUc7QUFDMUIsa0JBQVUsU0FBUztBQUNuQixnQkFBUSxNQUFLO0FBQUEsTUFDZDtBQUFBLElBQ0w7QUFFRSxVQUFNLG9CQUFvQixDQUFDLFlBQ3pCNUIsSUFBRSxRQUFRLFFBQVE0QixhQUFXLGVBQWUsS0FBSyxTQUFTLEVBQUUsS0FBSyxPQUFPLENBQUM7QUFFM0U1QixRQUFFNEIsYUFBVyxlQUFlLFFBQVEsa0JBQWtCLEVBQUU7QUFBQSxNQUN0RDtBQUFBLE1BQ0EsQ0FBQyxlQUFlO0FBQ2QsK0JBQXVCLFVBQVU7QUFBQSxNQUNsQztBQUFBLElBQ0w7QUFFRSxVQUFNLG1CQUFtQixDQUFDLFVBQVU7QUFDbEM7QUFDQSxhQUFPLHFCQUFxQjtBQUM1QixZQUFNLGVBQWM7QUFFcEIsWUFBTSxVQUFVNUIsSUFBRSxNQUFNLGFBQWE7QUFDckMsWUFBTSxFQUFFLFFBQU8sSUFBSyxNQUFNO0FBQzFCLFlBQU0sYUFBYSxnQkFBZ0IsU0FBUyxNQUFNLFNBQVM7QUFDM0QsWUFBTSxjQUFjO0FBQUEsUUFDbEIsTUFBTTtBQUFBLFFBQ04sUUFBUTtBQUFBLE1BQ2Q7QUFFSSxVQUFJLENBQUMsWUFBWTtBQUNmO0FBQUEsTUFDRDtBQUVEQSxVQUFFLEtBQUs7QUFBQSxRQUNMLEtBQUssV0FBVztBQUFBLFFBQ2hCLFFBQVE7QUFBQSxRQUNSLE1BQU07QUFBQSxRQUNOLFVBQVU7QUFBQSxRQUNWLFdBQVcsT0FBTztBQUNoQixtQkFBUyxLQUFLLEtBQUs7QUFBQSxRQUNwQjtBQUFBLE1BQ1AsQ0FBSyxFQUNFLEtBQUssQ0FBQyxTQUFTO0FBQ2QsY0FBTSxpQkFBaUIsa0JBQWtCLE9BQU87QUFDaEQsc0NBQThCLHFCQUFxQixJQUFJO0FBQ3ZELHVCQUFlLElBQUksS0FBSyxRQUFRO0FBR2hDNEIscUJBQVcsS0FBSyxjQUFjO0FBQUEsVUFDNUIsUUFBUTtBQUFBLFVBQ1I7QUFBQSxRQUNWLENBQVM7QUFBQSxNQUNULENBQU8sRUFDQSxLQUFLLENBQUMsU0FBUztBQUNkQSxxQkFBVyxLQUFLLGVBQWU7QUFBQSxVQUM3QixXQUFXO0FBQUEsVUFDWDtBQUFBLFVBQ0EsWUFBWSxXQUFXO0FBQUEsUUFDakMsQ0FBUztBQUFBLE1BQ1QsQ0FBTztBQUFBLElBQ1A7QUFFRSxVQUFNLEdBQUcsU0FBU0EsYUFBVyxlQUFlLEtBQUssU0FBUyxnQkFBZ0I7QUFFMUUsYUFBUyxnQ0FDUCx5QkFDQSxhQUNBLFNBQ0E7QUFDQTtBQUNBLGFBQU8scUJBQXFCO0FBRTVCLGFBQU81QixJQUFFLEtBQUs7QUFBQSxRQUNaLEtBQUs7QUFBQSxRQUNMLFFBQVE7QUFBQSxRQUNSLE1BQU07QUFBQSxRQUNOLFVBQVU7QUFBQSxRQUNWLFdBQVcsT0FBTztBQUNoQixtQkFBUyxLQUFLLEtBQUs7QUFBQSxRQUNwQjtBQUFBLE1BQ1AsQ0FBSyxFQUNFLEtBQUssQ0FBQyxTQUFTO0FBQ2Qsc0NBQThCLHFCQUFxQixJQUFJO0FBRXZELGdCQUFRLElBQUksS0FBSyxRQUFRO0FBQ3pCLGNBQU0sVUFBVSxXQUFXLFFBQVEsVUFBVSxRQUFRLFVBQVU7QUFHL0Q0QixxQkFBVyxLQUFLLGNBQWM7QUFBQSxVQUM1QixRQUFRO0FBQUEsVUFDUjtBQUFBLFFBQ1YsQ0FBUztBQUFBLE1BQ1QsQ0FBTyxFQUNBLEtBQUssQ0FBQyxTQUFTO0FBQ2RBLHFCQUFXLEtBQUssZUFBZTtBQUFBLFVBQzdCLFdBQVc7QUFBQSxVQUNYO0FBQUEsUUFDVixDQUFTO0FBQUEsTUFDVCxDQUFPO0FBQUEsSUFDSjtBQUVELGFBQVMsc0JBQXNCLFdBQVc7QUFDeEMsYUFBTyxZQUFZLElBQUksT0FBTztBQUFBLElBQy9CO0FBRUQsYUFBUyxlQUFlLFVBQVU7QUFDaEMsYUFBTztBQUFBLFFBQ0wsTUFBTTtBQUFBLFFBQ04sS0FBSyxLQUFLLElBQUksUUFBUTtBQUFBLFFBQ3RCLFFBQVE7QUFBQSxRQUNSLElBQUksc0JBQXNCLFFBQVE7QUFBQSxNQUN4QztBQUFBLElBQ0c7QUFFRCxhQUFTLDRCQUE0QixPQUFPO0FBQzFDLFlBQU0sVUFBVTVCLElBQUUsTUFBTSxhQUFhO0FBQ3JDLFlBQU0sMEJBQTBCLFFBQVEsS0FBSyxZQUFZO0FBQ3pELFlBQU0sWUFBWSxRQUFRLEtBQUssT0FBTztBQUd0QyxZQUFNLGNBQWMsUUFBUTtBQUU1QixVQUNFLGVBQWUsU0FBUyxhQUFhLEVBQUUsS0FDdkMsY0FBYyxLQUNkLE1BQU0sV0FBVyxHQUNqQjtBQUNBLGVBQU8scUJBQXFCO0FBQzVCLGdCQUFRLElBQUksU0FBUztBQUNyQjtBQUFBLE1BQ0Q7QUFHRCxZQUFNLE1BQU0sY0FBYztBQUUxQixVQUFJLFFBQVEsR0FBRztBQUNiO0FBQUEsTUFDRDtBQUVELFVBQUksZ0JBQWdCLEtBQUs7QUFDdkIsZ0JBQ0csUUFBUSx1QkFBdUIsRUFDL0IsS0FBSyx1Q0FBdUMsRUFDNUM7TUFDVCxPQUFXO0FBQ0wsZ0JBQVEsS0FBSyxTQUFTLFdBQVc7QUFDakM7QUFBQSxVQUNFO0FBQUEsVUFDQSxlQUFlLEdBQUc7QUFBQSxVQUNsQjtBQUFBLFFBQ1I7QUFBQSxNQUNLO0FBQUEsSUFDRjtBQUVELFVBQU07QUFBQSxNQUNKO0FBQUEsTUFDQTtBQUFBLE1BQ0EsU0FBUywyQkFBMkI7QUFBQSxJQUN4QztBQUVFLFVBQU0sR0FBRyxrQkFBa0IsMkJBQTJCLENBQUMsVUFBVTtBQUMvRCxVQUFJLE1BQU0sU0FBUyxTQUFTO0FBQzFCLFlBQUksTUFBTSxZQUFZLElBQUk7QUFDeEIsOEJBQW9CO0FBQ3BCLHNDQUE0QixLQUFLO0FBQUEsUUFDbEM7QUFFRCxlQUFPO0FBQUEsTUFDUjtBQUVELFVBQUksQ0FBQyxtQkFBbUI7QUFDdEIsb0NBQTRCLEtBQUs7QUFBQSxNQUNsQztBQUVELGFBQU87QUFBQSxJQUNYLENBQUc7QUFFRCxVQUFNLGlCQUFpQjtBQUV2QixVQUFNO0FBQUEsTUFDSjtBQUFBLE1BQ0E0QixhQUFXLGVBQWUsS0FBSztBQUFBLE1BQy9CLE1BQU07QUFDSjVCLFlBQUU0QixhQUFXLGVBQWUsS0FBSyxZQUFZLEVBQUUsS0FBSyxjQUFjO0FBQUEsTUFDbkU7QUFBQSxJQUNMO0FBRUUsVUFBTSxHQUFHLFNBQVNBLGFBQVcsZUFBZSxLQUFLLGlCQUFpQixDQUFDLFVBQVU7QUFDM0UsWUFBTSxlQUFjO0FBRXBCNUIsVUFBRTRCLGFBQVcsZUFBZSxLQUFLLFNBQVMsRUFBRSxTQUFTLFFBQVE7QUFBQSxJQUNqRSxDQUFHO0FBRUQsVUFBTSxHQUFHLFNBQVNBLGFBQVcsZUFBZSxLQUFLLGNBQWMsQ0FBQyxVQUFVO0FBQ3hFNUIsVUFBRSxNQUFNLGFBQWEsRUFBRSxLQUFLLGNBQWM7QUFBQSxJQUM5QyxDQUFHO0FBRUQsVUFBTSxHQUFHLFNBQVM0QixhQUFXLGVBQWUsS0FBSyxjQUFjLENBQUMsVUFBVTtBQUN4RSxZQUFNLGdCQUFlO0FBRXJCLFlBQU0sUUFBUTVCLElBQUUsTUFBTSxhQUFhO0FBQ25DLFlBQU0saUJBQWlCQSxJQUFFNEIsYUFBVyxlQUFlLEtBQUssWUFBWTtBQUVwRSxxQkFBZSxJQUFJLE1BQU0sS0FBTSxDQUFBO0FBRS9CNUIsVUFBRTRCLGFBQVcsZUFBZSxLQUFLLFNBQVMsRUFBRSxTQUFTLE1BQU07QUFDM0Q1QixVQUFFNEIsYUFBVyxlQUFlLEtBQUssWUFBWSxFQUFFLEtBQUssY0FBYztBQUVsRSxhQUFPO0FBQUEsSUFDWCxDQUFHO0FBQUEsRUFDSCxDQUFDO0FBRUQ1QixNQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU07QUFDdEIsVUFBTSxJQUFJQSxJQUFFLE1BQU07QUFDbEIsTUFBRSxJQUFJLFVBQVUsa0NBQWtDLEdBQ2hELEVBQUUsR0FBRyxVQUFVLG9DQUFvQyxDQUFDVSxPQUFNO0FBQ3hELFlBQU0saUJBQWlCVixJQUFFLHlCQUF5QjtBQUNsRCxNQUFBVSxHQUFFLGVBQWM7QUFDaEIsWUFBTSxJQUFJVixJQUFFVSxHQUFFLGFBQWEsR0FDekIsSUFBSSxFQUFFLEtBQUssUUFBUTtBQUNyQixZQUFNLEVBQUUsS0FBSyxlQUFlLEVBQUUsVUFDNUIsRUFBRSxPQUFPVixJQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsTUFBTSxRQUFRLE9BQU8sRUFBRyxDQUFBLENBQUMsR0FDakUsTUFBTSxFQUFFLEtBQUssZUFBZSxFQUFFLFVBQzVCLEVBQUU7QUFBQSxRQUNBQSxJQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsTUFBTSxVQUFVLE9BQU8sVUFBVTtBQUFBLE1BQ2pFLEdBQ0gsZUFBZSxLQUFLLFVBQVU7QUFDaEMscUJBQWUsS0FBSyxXQUFXLElBQUk7QUFDbkNBLFVBQUUsS0FBSyxHQUFHLEVBQUUsVUFBVyxHQUFFLE1BQU0sTUFBTSxFQUNsQyxLQUFLLENBQUNtQixPQUFNO0FBQ1gsUUFBQUEsR0FBRSxXQUNFbkIsSUFBRSxXQUFXLEVBQUUsS0FBSSxFQUFHLEtBQUssZ0JBQWdCLEVBQUUsS0FBS21CLEdBQUUsT0FBTyxDQUFDLENBQUMsSUFDN0RTLGFBQVcsS0FBSyxjQUFjO0FBQUEsVUFDNUIsUUFBUWxCLEdBQUUsT0FBTztBQUFBLFVBQ2pCLE1BQU1TO0FBQUEsUUFDdEIsQ0FBZTtBQUNMLHVCQUFlLEtBQUssS0FBSztBQUN6Qix1QkFBZSxLQUFLLFdBQVcsS0FBSztBQUFBLE1BQzlDLENBQVMsRUFDQSxLQUFLLENBQUNULE9BQU07QUFDWGtCLHFCQUFXLEtBQUssZUFBZTtBQUFBLFVBQzdCLFdBQVc7QUFBQSxVQUNYLE1BQU1sQjtBQUFBLFFBQ2xCLENBQVc7QUFDRCx1QkFBZSxLQUFLLEtBQUs7QUFDekIsdUJBQWUsS0FBSyxXQUFXLEtBQUs7QUFBQSxNQUM5QyxDQUFTO0FBQUEsSUFDVCxDQUFLO0FBQUEsRUFDTCxDQUFDOztBQzlaRCxNQUFJLElBQUksT0FBTyxZQUFZLFdBQVcsVUFBVTtBQUNoRCxNQUFJLGVBQWUsS0FBSyxPQUFPLEVBQUUsVUFBVSxhQUN2QyxFQUFFLFFBQ0YsU0FBU2tDLGNBQWEsUUFBUSxVQUFVLE1BQU07QUFDOUMsV0FBTyxTQUFTLFVBQVUsTUFBTSxLQUFLLFFBQVEsVUFBVSxJQUFJO0FBQUEsRUFDNUQ7QUFFSCxNQUFJO0FBQ0osTUFBSSxLQUFLLE9BQU8sRUFBRSxZQUFZLFlBQVk7QUFDeEMscUJBQWlCLEVBQUU7QUFBQSxFQUNyQixXQUFXLE9BQU8sdUJBQXVCO0FBQ3ZDLHFCQUFpQixTQUFTQyxnQkFBZSxRQUFRO0FBQy9DLGFBQU8sT0FBTyxvQkFBb0IsTUFBTSxFQUNyQyxPQUFPLE9BQU8sc0JBQXNCLE1BQU0sQ0FBQztBQUFBLElBQ2xEO0FBQUEsRUFDQSxPQUFPO0FBQ0wscUJBQWlCLFNBQVNBLGdCQUFlLFFBQVE7QUFDL0MsYUFBTyxPQUFPLG9CQUFvQixNQUFNO0FBQUEsSUFDNUM7QUFBQSxFQUNBO0FBRUEsV0FBUyxtQkFBbUIsU0FBUztBQUNuQyxRQUFJLFdBQVcsUUFBUTtBQUFNLGNBQVEsS0FBSyxPQUFPO0FBQUEsRUFDbkQ7QUFFQSxNQUFJLGNBQWMsT0FBTyxTQUFTLFNBQVNDLGFBQVksT0FBTztBQUM1RCxXQUFPLFVBQVU7QUFBQSxFQUNuQjtBQUVBLFdBQVMsZUFBZTtBQUN0QixpQkFBYSxLQUFLLEtBQUssSUFBSTtBQUFBLEVBQzdCO0FBQ0FDLFNBQWMsVUFBRztBQUNFQSxTQUFBLFFBQUEsT0FBRztBQUd0QixlQUFhLGVBQWU7QUFFNUIsZUFBYSxVQUFVLFVBQVU7QUFDakMsZUFBYSxVQUFVLGVBQWU7QUFDdEMsZUFBYSxVQUFVLGdCQUFnQjtBQUl2QyxNQUFJLHNCQUFzQjtBQUUxQixXQUFTLGNBQWMsVUFBVTtBQUMvQixRQUFJLE9BQU8sYUFBYSxZQUFZO0FBQ2xDLFlBQU0sSUFBSSxVQUFVLHFFQUFxRSxPQUFPLFFBQVE7QUFBQSxJQUN6RztBQUFBLEVBQ0g7QUFFQSxTQUFPLGVBQWUsY0FBYyx1QkFBdUI7QUFBQSxJQUN6RCxZQUFZO0FBQUEsSUFDWixLQUFLLFdBQVc7QUFDZCxhQUFPO0FBQUEsSUFDUjtBQUFBLElBQ0QsS0FBSyxTQUFTLEtBQUs7QUFDakIsVUFBSSxPQUFPLFFBQVEsWUFBWSxNQUFNLEtBQUssWUFBWSxHQUFHLEdBQUc7QUFDMUQsY0FBTSxJQUFJLFdBQVcsb0dBQW9HLE1BQU0sR0FBRztBQUFBLE1BQ25JO0FBQ0QsNEJBQXNCO0FBQUEsSUFDdkI7QUFBQSxFQUNILENBQUM7QUFFRCxlQUFhLE9BQU8sV0FBVztBQUU3QixRQUFJLEtBQUssWUFBWSxVQUNqQixLQUFLLFlBQVksT0FBTyxlQUFlLElBQUksRUFBRSxTQUFTO0FBQ3hELFdBQUssVUFBVSx1QkFBTyxPQUFPLElBQUk7QUFDakMsV0FBSyxlQUFlO0FBQUEsSUFDckI7QUFFRCxTQUFLLGdCQUFnQixLQUFLLGlCQUFpQjtBQUFBLEVBQzdDO0FBSUEsZUFBYSxVQUFVLGtCQUFrQixTQUFTLGdCQUFnQixHQUFHO0FBQ25FLFFBQUksT0FBTyxNQUFNLFlBQVksSUFBSSxLQUFLLFlBQVksQ0FBQyxHQUFHO0FBQ3BELFlBQU0sSUFBSSxXQUFXLGtGQUFrRixJQUFJLEdBQUc7QUFBQSxJQUMvRztBQUNELFNBQUssZ0JBQWdCO0FBQ3JCLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBUyxpQkFBaUIsTUFBTTtBQUM5QixRQUFJLEtBQUssa0JBQWtCO0FBQ3pCLGFBQU8sYUFBYTtBQUN0QixXQUFPLEtBQUs7QUFBQSxFQUNkO0FBRUEsZUFBYSxVQUFVLGtCQUFrQixTQUFTLGtCQUFrQjtBQUNsRSxXQUFPLGlCQUFpQixJQUFJO0FBQUEsRUFDOUI7QUFFQSxlQUFhLFVBQVUsT0FBTyxTQUFTLEtBQUssTUFBTTtBQUNoRCxRQUFJLE9BQU8sQ0FBQTtBQUNYLGFBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRO0FBQUssV0FBSyxLQUFLLFVBQVUsQ0FBQyxDQUFDO0FBQ2pFLFFBQUksVUFBVyxTQUFTO0FBRXhCLFFBQUlDLFVBQVMsS0FBSztBQUNsQixRQUFJQSxZQUFXO0FBQ2IsZ0JBQVcsV0FBV0EsUUFBTyxVQUFVO0FBQUEsYUFDaEMsQ0FBQztBQUNSLGFBQU87QUFHVCxRQUFJLFNBQVM7QUFDWCxVQUFJO0FBQ0osVUFBSSxLQUFLLFNBQVM7QUFDaEIsYUFBSyxLQUFLLENBQUM7QUFDYixVQUFJLGNBQWMsT0FBTztBQUd2QixjQUFNO0FBQUEsTUFDUDtBQUVELFVBQUksTUFBTSxJQUFJLE1BQU0sc0JBQXNCLEtBQUssT0FBTyxHQUFHLFVBQVUsTUFBTSxHQUFHO0FBQzVFLFVBQUksVUFBVTtBQUNkLFlBQU07QUFBQSxJQUNQO0FBRUQsUUFBSSxVQUFVQSxRQUFPLElBQUk7QUFFekIsUUFBSSxZQUFZO0FBQ2QsYUFBTztBQUVULFFBQUksT0FBTyxZQUFZLFlBQVk7QUFDakMsbUJBQWEsU0FBUyxNQUFNLElBQUk7QUFBQSxJQUNwQyxPQUFTO0FBQ0wsVUFBSSxNQUFNLFFBQVE7QUFDbEIsVUFBSSxZQUFZLFdBQVcsU0FBUyxHQUFHO0FBQ3ZDLGVBQVMsSUFBSSxHQUFHLElBQUksS0FBSyxFQUFFO0FBQ3pCLHFCQUFhLFVBQVUsQ0FBQyxHQUFHLE1BQU0sSUFBSTtBQUFBLElBQ3hDO0FBRUQsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLGFBQWEsUUFBUSxNQUFNLFVBQVUsU0FBUztBQUNyRCxRQUFJO0FBQ0osUUFBSUE7QUFDSixRQUFJO0FBRUosa0JBQWMsUUFBUTtBQUV0QixJQUFBQSxVQUFTLE9BQU87QUFDaEIsUUFBSUEsWUFBVyxRQUFXO0FBQ3hCLE1BQUFBLFVBQVMsT0FBTyxVQUFVLHVCQUFPLE9BQU8sSUFBSTtBQUM1QyxhQUFPLGVBQWU7QUFBQSxJQUMxQixPQUFTO0FBR0wsVUFBSUEsUUFBTyxnQkFBZ0IsUUFBVztBQUNwQyxlQUFPO0FBQUEsVUFBSztBQUFBLFVBQWU7QUFBQSxVQUNmLFNBQVMsV0FBVyxTQUFTLFdBQVc7QUFBQSxRQUFRO0FBSTVELFFBQUFBLFVBQVMsT0FBTztBQUFBLE1BQ2pCO0FBQ0QsaUJBQVdBLFFBQU8sSUFBSTtBQUFBLElBQ3ZCO0FBRUQsUUFBSSxhQUFhLFFBQVc7QUFFMUIsaUJBQVdBLFFBQU8sSUFBSSxJQUFJO0FBQzFCLFFBQUUsT0FBTztBQUFBLElBQ2IsT0FBUztBQUNMLFVBQUksT0FBTyxhQUFhLFlBQVk7QUFFbEMsbUJBQVdBLFFBQU8sSUFBSSxJQUNwQixVQUFVLENBQUMsVUFBVSxRQUFRLElBQUksQ0FBQyxVQUFVLFFBQVE7QUFBQSxNQUV2RCxXQUFVLFNBQVM7QUFDbEIsaUJBQVMsUUFBUSxRQUFRO0FBQUEsTUFDL0IsT0FBVztBQUNMLGlCQUFTLEtBQUssUUFBUTtBQUFBLE1BQ3ZCO0FBR0QsVUFBSSxpQkFBaUIsTUFBTTtBQUMzQixVQUFJLElBQUksS0FBSyxTQUFTLFNBQVMsS0FBSyxDQUFDLFNBQVMsUUFBUTtBQUNwRCxpQkFBUyxTQUFTO0FBR2xCLFlBQUksSUFBSSxJQUFJLE1BQU0saURBQ0UsU0FBUyxTQUFTLE1BQU0sT0FBTyxJQUFJLElBQUksbUVBRXZCO0FBQ3BDLFVBQUUsT0FBTztBQUNULFVBQUUsVUFBVTtBQUNaLFVBQUUsT0FBTztBQUNULFVBQUUsUUFBUSxTQUFTO0FBQ25CLDJCQUFtQixDQUFDO0FBQUEsTUFDckI7QUFBQSxJQUNGO0FBRUQsV0FBTztBQUFBLEVBQ1Q7QUFFQSxlQUFhLFVBQVUsY0FBYyxTQUFTLFlBQVksTUFBTSxVQUFVO0FBQ3hFLFdBQU8sYUFBYSxNQUFNLE1BQU0sVUFBVSxLQUFLO0FBQUEsRUFDakQ7QUFFQSxlQUFhLFVBQVUsS0FBSyxhQUFhLFVBQVU7QUFFbkQsZUFBYSxVQUFVLGtCQUNuQixTQUFTLGdCQUFnQixNQUFNLFVBQVU7QUFDdkMsV0FBTyxhQUFhLE1BQU0sTUFBTSxVQUFVLElBQUk7QUFBQSxFQUNwRDtBQUVBLFdBQVMsY0FBYztBQUNyQixRQUFJLENBQUMsS0FBSyxPQUFPO0FBQ2YsV0FBSyxPQUFPLGVBQWUsS0FBSyxNQUFNLEtBQUssTUFBTTtBQUNqRCxXQUFLLFFBQVE7QUFDYixVQUFJLFVBQVUsV0FBVztBQUN2QixlQUFPLEtBQUssU0FBUyxLQUFLLEtBQUssTUFBTTtBQUN2QyxhQUFPLEtBQUssU0FBUyxNQUFNLEtBQUssUUFBUSxTQUFTO0FBQUEsSUFDbEQ7QUFBQSxFQUNIO0FBRUEsV0FBUyxVQUFVLFFBQVEsTUFBTSxVQUFVO0FBQ3pDLFFBQUksUUFBUSxFQUFFLE9BQU8sT0FBTyxRQUFRLFFBQVcsUUFBZ0IsTUFBWSxTQUFrQjtBQUM3RixRQUFJLFVBQVUsWUFBWSxLQUFLLEtBQUs7QUFDcEMsWUFBUSxXQUFXO0FBQ25CLFVBQU0sU0FBUztBQUNmLFdBQU87QUFBQSxFQUNUO0FBRUEsZUFBYSxVQUFVLE9BQU8sU0FBU0MsTUFBSyxNQUFNLFVBQVU7QUFDMUQsa0JBQWMsUUFBUTtBQUN0QixTQUFLLEdBQUcsTUFBTSxVQUFVLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDN0MsV0FBTztBQUFBLEVBQ1Q7QUFFQSxlQUFhLFVBQVUsc0JBQ25CLFNBQVMsb0JBQW9CLE1BQU0sVUFBVTtBQUMzQyxrQkFBYyxRQUFRO0FBQ3RCLFNBQUssZ0JBQWdCLE1BQU0sVUFBVSxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzFELFdBQU87QUFBQSxFQUNiO0FBR0EsZUFBYSxVQUFVLGlCQUNuQixTQUFTLGVBQWUsTUFBTSxVQUFVO0FBQ3RDLFFBQUksTUFBTUQsU0FBUSxVQUFVLEdBQUc7QUFFL0Isa0JBQWMsUUFBUTtBQUV0QixJQUFBQSxVQUFTLEtBQUs7QUFDZCxRQUFJQSxZQUFXO0FBQ2IsYUFBTztBQUVULFdBQU9BLFFBQU8sSUFBSTtBQUNsQixRQUFJLFNBQVM7QUFDWCxhQUFPO0FBRVQsUUFBSSxTQUFTLFlBQVksS0FBSyxhQUFhLFVBQVU7QUFDbkQsVUFBSSxFQUFFLEtBQUssaUJBQWlCO0FBQzFCLGFBQUssVUFBVSx1QkFBTyxPQUFPLElBQUk7QUFBQSxXQUM5QjtBQUNILGVBQU9BLFFBQU8sSUFBSTtBQUNsQixZQUFJQSxRQUFPO0FBQ1QsZUFBSyxLQUFLLGtCQUFrQixNQUFNLEtBQUssWUFBWSxRQUFRO0FBQUEsTUFDOUQ7QUFBQSxJQUNULFdBQWlCLE9BQU8sU0FBUyxZQUFZO0FBQ3JDLGlCQUFXO0FBRVgsV0FBSyxJQUFJLEtBQUssU0FBUyxHQUFHLEtBQUssR0FBRyxLQUFLO0FBQ3JDLFlBQUksS0FBSyxDQUFDLE1BQU0sWUFBWSxLQUFLLENBQUMsRUFBRSxhQUFhLFVBQVU7QUFDekQsNkJBQW1CLEtBQUssQ0FBQyxFQUFFO0FBQzNCLHFCQUFXO0FBQ1g7QUFBQSxRQUNEO0FBQUEsTUFDRjtBQUVELFVBQUksV0FBVztBQUNiLGVBQU87QUFFVCxVQUFJLGFBQWE7QUFDZixhQUFLLE1BQUs7QUFBQSxXQUNQO0FBQ0gsa0JBQVUsTUFBTSxRQUFRO0FBQUEsTUFDekI7QUFFRCxVQUFJLEtBQUssV0FBVztBQUNsQixRQUFBQSxRQUFPLElBQUksSUFBSSxLQUFLLENBQUM7QUFFdkIsVUFBSUEsUUFBTyxtQkFBbUI7QUFDNUIsYUFBSyxLQUFLLGtCQUFrQixNQUFNLG9CQUFvQixRQUFRO0FBQUEsSUFDakU7QUFFRCxXQUFPO0FBQUEsRUFDYjtBQUVBLGVBQWEsVUFBVSxNQUFNLGFBQWEsVUFBVTtBQUVwRCxlQUFhLFVBQVUscUJBQ25CLFNBQVMsbUJBQW1CLE1BQU07QUFDaEMsUUFBSSxXQUFXQSxTQUFRO0FBRXZCLElBQUFBLFVBQVMsS0FBSztBQUNkLFFBQUlBLFlBQVc7QUFDYixhQUFPO0FBR1QsUUFBSUEsUUFBTyxtQkFBbUIsUUFBVztBQUN2QyxVQUFJLFVBQVUsV0FBVyxHQUFHO0FBQzFCLGFBQUssVUFBVSx1QkFBTyxPQUFPLElBQUk7QUFDakMsYUFBSyxlQUFlO0FBQUEsTUFDckIsV0FBVUEsUUFBTyxJQUFJLE1BQU0sUUFBVztBQUNyQyxZQUFJLEVBQUUsS0FBSyxpQkFBaUI7QUFDMUIsZUFBSyxVQUFVLHVCQUFPLE9BQU8sSUFBSTtBQUFBO0FBRWpDLGlCQUFPQSxRQUFPLElBQUk7QUFBQSxNQUNyQjtBQUNELGFBQU87QUFBQSxJQUNSO0FBR0QsUUFBSSxVQUFVLFdBQVcsR0FBRztBQUMxQixVQUFJLE9BQU8sT0FBTyxLQUFLQSxPQUFNO0FBQzdCLFVBQUk7QUFDSixXQUFLLElBQUksR0FBRyxJQUFJLEtBQUssUUFBUSxFQUFFLEdBQUc7QUFDaEMsY0FBTSxLQUFLLENBQUM7QUFDWixZQUFJLFFBQVE7QUFBa0I7QUFDOUIsYUFBSyxtQkFBbUIsR0FBRztBQUFBLE1BQzVCO0FBQ0QsV0FBSyxtQkFBbUIsZ0JBQWdCO0FBQ3hDLFdBQUssVUFBVSx1QkFBTyxPQUFPLElBQUk7QUFDakMsV0FBSyxlQUFlO0FBQ3BCLGFBQU87QUFBQSxJQUNSO0FBRUQsZ0JBQVlBLFFBQU8sSUFBSTtBQUV2QixRQUFJLE9BQU8sY0FBYyxZQUFZO0FBQ25DLFdBQUssZUFBZSxNQUFNLFNBQVM7QUFBQSxJQUMzQyxXQUFpQixjQUFjLFFBQVc7QUFFbEMsV0FBSyxJQUFJLFVBQVUsU0FBUyxHQUFHLEtBQUssR0FBRyxLQUFLO0FBQzFDLGFBQUssZUFBZSxNQUFNLFVBQVUsQ0FBQyxDQUFDO0FBQUEsTUFDdkM7QUFBQSxJQUNGO0FBRUQsV0FBTztBQUFBLEVBQ2I7QUFFQSxXQUFTLFdBQVcsUUFBUSxNQUFNLFFBQVE7QUFDeEMsUUFBSUEsVUFBUyxPQUFPO0FBRXBCLFFBQUlBLFlBQVc7QUFDYixhQUFPO0FBRVQsUUFBSSxhQUFhQSxRQUFPLElBQUk7QUFDNUIsUUFBSSxlQUFlO0FBQ2pCLGFBQU87QUFFVCxRQUFJLE9BQU8sZUFBZTtBQUN4QixhQUFPLFNBQVMsQ0FBQyxXQUFXLFlBQVksVUFBVSxJQUFJLENBQUMsVUFBVTtBQUVuRSxXQUFPLFNBQ0wsZ0JBQWdCLFVBQVUsSUFBSSxXQUFXLFlBQVksV0FBVyxNQUFNO0FBQUEsRUFDMUU7QUFFQSxlQUFhLFVBQVUsWUFBWSxTQUFTLFVBQVUsTUFBTTtBQUMxRCxXQUFPLFdBQVcsTUFBTSxNQUFNLElBQUk7QUFBQSxFQUNwQztBQUVBLGVBQWEsVUFBVSxlQUFlLFNBQVMsYUFBYSxNQUFNO0FBQ2hFLFdBQU8sV0FBVyxNQUFNLE1BQU0sS0FBSztBQUFBLEVBQ3JDO0FBRUEsZUFBYSxnQkFBZ0IsU0FBUyxTQUFTLE1BQU07QUFDbkQsUUFBSSxPQUFPLFFBQVEsa0JBQWtCLFlBQVk7QUFDL0MsYUFBTyxRQUFRLGNBQWMsSUFBSTtBQUFBLElBQ3JDLE9BQVM7QUFDTCxhQUFPLGNBQWMsS0FBSyxTQUFTLElBQUk7QUFBQSxJQUN4QztBQUFBLEVBQ0g7QUFFQSxlQUFhLFVBQVUsZ0JBQWdCO0FBQ3ZDLFdBQVMsY0FBYyxNQUFNO0FBQzNCLFFBQUlBLFVBQVMsS0FBSztBQUVsQixRQUFJQSxZQUFXLFFBQVc7QUFDeEIsVUFBSSxhQUFhQSxRQUFPLElBQUk7QUFFNUIsVUFBSSxPQUFPLGVBQWUsWUFBWTtBQUNwQyxlQUFPO0FBQUEsTUFDYixXQUFlLGVBQWUsUUFBVztBQUNuQyxlQUFPLFdBQVc7QUFBQSxNQUNuQjtBQUFBLElBQ0Y7QUFFRCxXQUFPO0FBQUEsRUFDVDtBQUVBLGVBQWEsVUFBVSxhQUFhLFNBQVMsYUFBYTtBQUN4RCxXQUFPLEtBQUssZUFBZSxJQUFJLGVBQWUsS0FBSyxPQUFPLElBQUk7RUFDaEU7QUFFQSxXQUFTLFdBQVcsS0FBSyxHQUFHO0FBQzFCLFFBQUksT0FBTyxJQUFJLE1BQU0sQ0FBQztBQUN0QixhQUFTLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRTtBQUN2QixXQUFLLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDakIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLFVBQVUsTUFBTSxPQUFPO0FBQzlCLFdBQU8sUUFBUSxJQUFJLEtBQUssUUFBUTtBQUM5QixXQUFLLEtBQUssSUFBSSxLQUFLLFFBQVEsQ0FBQztBQUM5QixTQUFLLElBQUc7QUFBQSxFQUNWO0FBRUEsV0FBUyxnQkFBZ0IsS0FBSztBQUM1QixRQUFJLE1BQU0sSUFBSSxNQUFNLElBQUksTUFBTTtBQUM5QixhQUFTLElBQUksR0FBRyxJQUFJLElBQUksUUFBUSxFQUFFLEdBQUc7QUFDbkMsVUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsWUFBWSxJQUFJLENBQUM7QUFBQSxJQUNsQztBQUNELFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBUyxLQUFLLFNBQVMsTUFBTTtBQUMzQixXQUFPLElBQUksUUFBUSxTQUFVLFNBQVMsUUFBUTtBQUM1QyxlQUFTLGNBQWMsS0FBSztBQUMxQixnQkFBUSxlQUFlLE1BQU0sUUFBUTtBQUNyQyxlQUFPLEdBQUc7QUFBQSxNQUNYO0FBRUQsZUFBUyxXQUFXO0FBQ2xCLFlBQUksT0FBTyxRQUFRLG1CQUFtQixZQUFZO0FBQ2hELGtCQUFRLGVBQWUsU0FBUyxhQUFhO0FBQUEsUUFDOUM7QUFDRCxnQkFBUSxDQUFBLEVBQUcsTUFBTSxLQUFLLFNBQVMsQ0FBQztBQUFBLE1BRXRDO0FBQ0kscUNBQStCLFNBQVMsTUFBTSxVQUFVLEVBQUUsTUFBTSxLQUFJLENBQUU7QUFDdEUsVUFBSSxTQUFTLFNBQVM7QUFDcEIsc0NBQThCLFNBQVMsZUFBZSxFQUFFLE1BQU0sS0FBTSxDQUFBO0FBQUEsTUFDckU7QUFBQSxJQUNMLENBQUc7QUFBQSxFQUNIO0FBRUEsV0FBUyw4QkFBOEIsU0FBUyxTQUFTLE9BQU87QUFDOUQsUUFBSSxPQUFPLFFBQVEsT0FBTyxZQUFZO0FBQ3BDLHFDQUErQixTQUFTLFNBQVMsU0FBUyxLQUFLO0FBQUEsSUFDaEU7QUFBQSxFQUNIO0FBRUEsV0FBUywrQkFBK0IsU0FBUyxNQUFNLFVBQVUsT0FBTztBQUN0RSxRQUFJLE9BQU8sUUFBUSxPQUFPLFlBQVk7QUFDcEMsVUFBSSxNQUFNLE1BQU07QUFDZCxnQkFBUSxLQUFLLE1BQU0sUUFBUTtBQUFBLE1BQ2pDLE9BQVc7QUFDTCxnQkFBUSxHQUFHLE1BQU0sUUFBUTtBQUFBLE1BQzFCO0FBQUEsSUFDRixXQUFVLE9BQU8sUUFBUSxxQkFBcUIsWUFBWTtBQUd6RCxjQUFRLGlCQUFpQixNQUFNLFNBQVMsYUFBYSxLQUFLO0FBR3hELFlBQUksTUFBTSxNQUFNO0FBQ2Qsa0JBQVEsb0JBQW9CLE1BQU0sWUFBWTtBQUFBLFFBQy9DO0FBQ0QsaUJBQVMsR0FBRztBQUFBLE1BQ2xCLENBQUs7QUFBQSxJQUNMLE9BQVM7QUFDTCxZQUFNLElBQUksVUFBVSx3RUFBd0UsT0FBTyxPQUFPO0FBQUEsSUFDM0c7QUFBQSxFQUNIOzs7RUNoZkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUEwQmUsTUFBTSxTQUFTO0FBQUEsSUFDNUIsWUFBWSxJQUFJO0FBQ2QsV0FBSyxLQUFLO0FBQUEsSUFDWDtBQUFBLElBRUQsT0FBTztBQUNMLFdBQUssR0FBRyxHQUFHLG9CQUFvQixDQUFDLEdBQUcsT0FBTztBQUN4QyxZQUFJLElBQUk7QUFDTmhELGNBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLGdCQUFnQixFQUFFLE1BQU8sRUFBQyxLQUFLLE1BQU0sSUFBSSxFQUN2RDtRQUNYLE9BQWE7QUFDTEEsY0FBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLGdCQUFnQixFQUFFLFFBQVEsS0FBSyxNQUFNLElBQUksRUFDdkQ7UUFDSjtBQUFBLE1BQ1AsQ0FBSztBQUVELFdBQUssR0FBRyxHQUFHLG9CQUFvQixDQUFDLEdBQUcsT0FBTztBQUN4QyxZQUFJLElBQUk7QUFDTkEsY0FBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssZ0JBQWdCLEVBQUUsTUFBTyxFQUFDLEtBQUssTUFBTSxJQUFJLEVBQ3ZEO1FBQ1gsT0FBYTtBQUNMQSxjQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssZ0JBQWdCLEVBQUUsUUFBUSxLQUFLLE1BQU0sSUFBSSxFQUN2RDtRQUNKO0FBQUEsTUFDUCxDQUFLO0FBRUQsV0FBSyxHQUFHLEtBQUssYUFBYSxFQUFFLEtBQUssQ0FBQyxLQUFLLE9BQU87QUFDNUNBLFlBQUUsRUFBRSxFQUFFLEdBQUcsVUFBVSxXQUFZO0FBQzdCLGlCQUFPLFdBQVdBLElBQUUsSUFBSSxFQUFFLElBQUc7QUFBQSxRQUNyQyxDQUFPO0FBQUEsTUFDUCxDQUFLO0FBQUEsSUFDRjtBQUFBLEVBQ0g7QUFBQSxFQzFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQTBCZSxNQUFNLEtBQUs7QUFBQSxJQUN4QixPQUFPO0FBQ0wsV0FBSyxZQUFXO0FBQ2hCLFdBQUsseUJBQXdCO0FBQUEsSUFDOUI7QUFBQSxJQUVELGNBQWM7QUFDWkEsVUFBRSxpQkFBaUIsRUFBRSxHQUFHLFNBQVMsV0FBWTtBQUMzQ0EsWUFBRSxJQUFJLEVBQUUsUUFBUSxrQkFBa0IsRUFBRSxTQUFTLE9BQU87QUFBQSxNQUMxRCxDQUFLO0FBQ0RBLFVBQUUsaUJBQWlCLEVBQUUsR0FBRyxZQUFZLFdBQVk7QUFDOUNBLFlBQUUsSUFBSSxFQUFFLFFBQVEsa0JBQWtCLEVBQUUsWUFBWSxPQUFPO0FBQUEsTUFDN0QsQ0FBSztBQUFBLElBQ0Y7QUFBQSxJQUVELDJCQUEyQjtBQUN6QkEsVUFBRSxxQ0FBcUMsRUFBRSxHQUFHLFNBQVMsV0FBWTtBQUMvRCxjQUFNLE1BQU1BLElBQUUsSUFBSSxFQUFFLFFBQVEsY0FBYyxFQUFFLFNBQVMsMkJBQTJCO0FBRWhGLFlBQUksSUFBSSxLQUFLLE1BQU0sTUFBTSxZQUFZO0FBQ25DLGNBQUksS0FBSyxRQUFRLE1BQU07QUFDdkJBLGNBQUUsSUFBSSxFQUFFLEtBQUtBLElBQUUsSUFBSSxFQUFFLEtBQUssVUFBVSxDQUFDO0FBQUEsUUFDN0MsT0FBYTtBQUNMLGNBQUksS0FBSyxRQUFRLFVBQVU7QUFDM0JBLGNBQUUsSUFBSSxFQUFFLEtBQUtBLElBQUUsSUFBSSxFQUFFLEtBQUssVUFBVSxDQUFDO0FBQUEsUUFDdEM7QUFBQSxNQUNQLENBQUs7QUFBQSxJQUNGO0FBQUEsRUFDSDs7O0FDcERBLEtBQUMsV0FBVztBQUdSLFVBQUksS0FBSztBQUFBLFFBQ0wsWUFBWTtBQUFBLFFBQ1osVUFBVTtBQUFBLFFBQ1YsVUFBVTtBQUFBLFFBQ1YsZUFBZTtBQUFBLFFBQ2YsUUFBUTtBQUFBLFFBQ1IsYUFBYTtBQUFBLFFBQ2IsTUFBTTtBQUFBLFFBQ04sVUFBVTtBQUFBLFFBQ1YsTUFBTTtBQUFBLFFBQ04sUUFBUTtBQUFBLFFBQ1IsYUFBYTtBQUFBLFFBQ2IsS0FBSztBQUFBLFFBQ0wsWUFBWTtBQUFBLFFBQ1osY0FBYztBQUFBLFFBQ2QsTUFBTTtBQUFBLE1BQ1Q7QUFFRCxlQUFTa0QsU0FBUSxLQUFLO0FBRWxCLGVBQU8sZUFBZSxjQUFjLEdBQUcsR0FBRyxTQUFTO0FBQUEsTUFDdEQ7QUFFRCxlQUFTLFNBQVMsS0FBSyxNQUFNO0FBQ3pCLGVBQU9BLFNBQVEsTUFBTSxNQUFNLENBQUMsR0FBRyxFQUFFLE9BQU8sUUFBUSxDQUFBLENBQUUsQ0FBQztBQUFBLE1BQ3REO0FBRUQsZUFBUyxlQUFlLFlBQVksTUFBTTtBQUN0QyxZQUFJLFNBQVMsR0FBRyxjQUFjLFdBQVcsUUFBUSxLQUFLLFNBQVMsSUFBSSxHQUFHLEdBQUcsSUFBSSxLQUFLLGVBQWUsWUFBWSxhQUFhO0FBQzFILGFBQUssSUFBSSxHQUFHLElBQUksYUFBYSxLQUFLO0FBQzlCLGNBQUksT0FBTyxXQUFXLENBQUMsTUFBTSxVQUFVO0FBQ25DLHNCQUFVLFdBQVcsQ0FBQztBQUFBLFVBQ3pCLFdBQ1EsT0FBTyxXQUFXLENBQUMsTUFBTSxVQUFVO0FBQ3hDLGlCQUFLLFdBQVcsQ0FBQztBQUNqQixnQkFBSSxHQUFHLE1BQU07QUFDVCxvQkFBTSxLQUFLLE1BQU07QUFDakIsbUJBQUssSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLFFBQVEsS0FBSztBQUNqQyxvQkFBSSxPQUFPLFFBQVc7QUFDbEIsd0JBQU0sSUFBSSxNQUFNQSxTQUFRLGlFQUFpRSxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsS0FBSyxJQUFFLENBQUMsQ0FBQyxDQUFDO0FBQUEsZ0JBQ3JIO0FBQ0Qsc0JBQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQUEsY0FDdkI7QUFBQSxZQUNKLFdBQ1EsR0FBRyxVQUFVO0FBQ2xCLG9CQUFNLEtBQUssR0FBRyxRQUFRO0FBQUEsWUFDekIsT0FDSTtBQUNELG9CQUFNLEtBQUssUUFBUTtBQUFBLFlBQ3RCO0FBRUQsZ0JBQUksR0FBRyxTQUFTLEtBQUssR0FBRyxJQUFJLEtBQUssR0FBRyxjQUFjLEtBQUssR0FBRyxJQUFJLEtBQUssZUFBZSxVQUFVO0FBQ3hGLG9CQUFNLElBQUs7QUFBQSxZQUNkO0FBRUQsZ0JBQUksR0FBRyxZQUFZLEtBQUssR0FBRyxJQUFJLE1BQU0sT0FBTyxRQUFRLFlBQVksTUFBTSxHQUFHLElBQUk7QUFDekUsb0JBQU0sSUFBSSxVQUFVQSxTQUFRLDJDQUEyQyxHQUFHLENBQUM7QUFBQSxZQUM5RTtBQUVELGdCQUFJLEdBQUcsT0FBTyxLQUFLLEdBQUcsSUFBSSxHQUFHO0FBQ3pCLDRCQUFjLE9BQU87QUFBQSxZQUN4QjtBQUVELG9CQUFRLEdBQUcsTUFBSTtBQUFBLGNBQ1gsS0FBSztBQUNELHNCQUFNLFNBQVMsS0FBSyxFQUFFLEVBQUUsU0FBUyxDQUFDO0FBQ2xDO0FBQUEsY0FDSixLQUFLO0FBQ0Qsc0JBQU0sT0FBTyxhQUFhLFNBQVMsS0FBSyxFQUFFLENBQUM7QUFDM0M7QUFBQSxjQUNKLEtBQUs7QUFBQSxjQUNMLEtBQUs7QUFDRCxzQkFBTSxTQUFTLEtBQUssRUFBRTtBQUN0QjtBQUFBLGNBQ0osS0FBSztBQUNELHNCQUFNLEtBQUssVUFBVSxLQUFLLE1BQU0sR0FBRyxRQUFRLFNBQVMsR0FBRyxLQUFLLElBQUksQ0FBQztBQUNqRTtBQUFBLGNBQ0osS0FBSztBQUNELHNCQUFNLEdBQUcsWUFBWSxXQUFXLEdBQUcsRUFBRSxjQUFjLEdBQUcsU0FBUyxJQUFJLFdBQVcsR0FBRyxFQUFFLGNBQWU7QUFDbEc7QUFBQSxjQUNKLEtBQUs7QUFDRCxzQkFBTSxHQUFHLFlBQVksV0FBVyxHQUFHLEVBQUUsUUFBUSxHQUFHLFNBQVMsSUFBSSxXQUFXLEdBQUc7QUFDM0U7QUFBQSxjQUNKLEtBQUs7QUFDRCxzQkFBTSxHQUFHLFlBQVksT0FBTyxPQUFPLElBQUksWUFBWSxHQUFHLFNBQVMsQ0FBQyxDQUFDLElBQUksV0FBVyxHQUFHO0FBQ25GO0FBQUEsY0FDSixLQUFLO0FBQ0QsdUJBQU8sU0FBUyxLQUFLLEVBQUUsTUFBTSxHQUFHLFNBQVMsQ0FBQztBQUMxQztBQUFBLGNBQ0osS0FBSztBQUNELHNCQUFNLE9BQU8sR0FBRztBQUNoQixzQkFBTyxHQUFHLFlBQVksSUFBSSxVQUFVLEdBQUcsR0FBRyxTQUFTLElBQUk7QUFDdkQ7QUFBQSxjQUNKLEtBQUs7QUFDRCxzQkFBTSxPQUFPLENBQUMsQ0FBQyxHQUFHO0FBQ2xCLHNCQUFPLEdBQUcsWUFBWSxJQUFJLFVBQVUsR0FBRyxHQUFHLFNBQVMsSUFBSTtBQUN2RDtBQUFBLGNBQ0osS0FBSztBQUNELHNCQUFNLE9BQU8sVUFBVSxTQUFTLEtBQUssR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLEVBQUUsWUFBYTtBQUNwRSxzQkFBTyxHQUFHLFlBQVksSUFBSSxVQUFVLEdBQUcsR0FBRyxTQUFTLElBQUk7QUFDdkQ7QUFBQSxjQUNKLEtBQUs7QUFDRCxzQkFBTSxTQUFTLEtBQUssRUFBRSxNQUFNO0FBQzVCO0FBQUEsY0FDSixLQUFLO0FBQ0Qsc0JBQU0sSUFBSSxRQUFTO0FBQ25CLHNCQUFPLEdBQUcsWUFBWSxJQUFJLFVBQVUsR0FBRyxHQUFHLFNBQVMsSUFBSTtBQUN2RDtBQUFBLGNBQ0osS0FBSztBQUNELHVCQUFPLFNBQVMsS0FBSyxFQUFFLE1BQU0sR0FBRyxTQUFTLEVBQUU7QUFDM0M7QUFBQSxjQUNKLEtBQUs7QUFDRCx1QkFBTyxTQUFTLEtBQUssRUFBRSxNQUFNLEdBQUcsU0FBUyxFQUFFLEVBQUUsWUFBYTtBQUMxRDtBQUFBLFlBQ1A7QUFDRCxnQkFBSSxHQUFHLEtBQUssS0FBSyxHQUFHLElBQUksR0FBRztBQUN2Qix3QkFBVTtBQUFBLFlBQ2IsT0FDSTtBQUNELGtCQUFJLEdBQUcsT0FBTyxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsZUFBZSxHQUFHLE9BQU87QUFDdEQsdUJBQU8sY0FBYyxNQUFNO0FBQzNCLHNCQUFNLElBQUksU0FBVSxFQUFDLFFBQVEsR0FBRyxNQUFNLEVBQUU7QUFBQSxjQUMzQyxPQUNJO0FBQ0QsdUJBQU87QUFBQSxjQUNWO0FBQ0QsOEJBQWdCLEdBQUcsV0FBVyxHQUFHLGFBQWEsTUFBTSxNQUFNLEdBQUcsU0FBUyxPQUFPLENBQUMsSUFBSTtBQUNsRiwyQkFBYSxHQUFHLFNBQVMsT0FBTyxLQUFLO0FBQ3JDLG9CQUFNLEdBQUcsUUFBUyxhQUFhLElBQUksY0FBYyxPQUFPLFVBQVUsSUFBSSxLQUFNO0FBQzVFLHdCQUFVLEdBQUcsUUFBUSxPQUFPLE1BQU0sTUFBTyxrQkFBa0IsTUFBTSxPQUFPLE1BQU0sTUFBTSxNQUFNLE9BQU87QUFBQSxZQUNwRztBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQ0QsZUFBTztBQUFBLE1BQ1Y7QUFFRCxVQUFJLGdCQUFnQix1QkFBTyxPQUFPLElBQUk7QUFFdEMsZUFBUyxjQUFjLEtBQUs7QUFDeEIsWUFBSSxjQUFjLEdBQUcsR0FBRztBQUNwQixpQkFBTyxjQUFjLEdBQUc7QUFBQSxRQUMzQjtBQUVELFlBQUksT0FBTyxLQUFLLE9BQU8sYUFBYSxDQUFBLEdBQUksWUFBWTtBQUNwRCxlQUFPLE1BQU07QUFDVCxlQUFLLFFBQVEsR0FBRyxLQUFLLEtBQUssSUFBSSxPQUFPLE1BQU07QUFDdkMsdUJBQVcsS0FBSyxNQUFNLENBQUMsQ0FBQztBQUFBLFVBQzNCLFlBQ1MsUUFBUSxHQUFHLE9BQU8sS0FBSyxJQUFJLE9BQU8sTUFBTTtBQUM5Qyx1QkFBVyxLQUFLLEdBQUc7QUFBQSxVQUN0QixZQUNTLFFBQVEsR0FBRyxZQUFZLEtBQUssSUFBSSxPQUFPLE1BQU07QUFDbkQsZ0JBQUksTUFBTSxDQUFDLEdBQUc7QUFDViwyQkFBYTtBQUNiLGtCQUFJLGFBQWEsQ0FBQSxHQUFJLG9CQUFvQixNQUFNLENBQUMsR0FBRyxjQUFjLENBQUU7QUFDbkUsbUJBQUssY0FBYyxHQUFHLElBQUksS0FBSyxpQkFBaUIsT0FBTyxNQUFNO0FBQ3pELDJCQUFXLEtBQUssWUFBWSxDQUFDLENBQUM7QUFDOUIsd0JBQVEsb0JBQW9CLGtCQUFrQixVQUFVLFlBQVksQ0FBQyxFQUFFLE1BQU0sT0FBTyxJQUFJO0FBQ3BGLHVCQUFLLGNBQWMsR0FBRyxXQUFXLEtBQUssaUJBQWlCLE9BQU8sTUFBTTtBQUNoRSwrQkFBVyxLQUFLLFlBQVksQ0FBQyxDQUFDO0FBQUEsa0JBQ2pDLFlBQ1MsY0FBYyxHQUFHLGFBQWEsS0FBSyxpQkFBaUIsT0FBTyxNQUFNO0FBQ3ZFLCtCQUFXLEtBQUssWUFBWSxDQUFDLENBQUM7QUFBQSxrQkFDakMsT0FDSTtBQUNELDBCQUFNLElBQUksWUFBWSw4Q0FBOEM7QUFBQSxrQkFDdkU7QUFBQSxnQkFDSjtBQUFBLGNBQ0osT0FDSTtBQUNELHNCQUFNLElBQUksWUFBWSw4Q0FBOEM7QUFBQSxjQUN2RTtBQUNELG9CQUFNLENBQUMsSUFBSTtBQUFBLFlBQ2QsT0FDSTtBQUNELDJCQUFhO0FBQUEsWUFDaEI7QUFDRCxnQkFBSSxjQUFjLEdBQUc7QUFDakIsb0JBQU0sSUFBSSxNQUFNLDJFQUEyRTtBQUFBLFlBQzlGO0FBRUQsdUJBQVc7QUFBQSxjQUNQO0FBQUEsZ0JBQ0ksYUFBYSxNQUFNLENBQUM7QUFBQSxnQkFDcEIsVUFBYSxNQUFNLENBQUM7QUFBQSxnQkFDcEIsTUFBYSxNQUFNLENBQUM7QUFBQSxnQkFDcEIsTUFBYSxNQUFNLENBQUM7QUFBQSxnQkFDcEIsVUFBYSxNQUFNLENBQUM7QUFBQSxnQkFDcEIsT0FBYSxNQUFNLENBQUM7QUFBQSxnQkFDcEIsT0FBYSxNQUFNLENBQUM7QUFBQSxnQkFDcEIsV0FBYSxNQUFNLENBQUM7QUFBQSxnQkFDcEIsTUFBYSxNQUFNLENBQUM7QUFBQSxjQUN2QjtBQUFBLFlBQ0o7QUFBQSxVQUNKLE9BQ0k7QUFDRCxrQkFBTSxJQUFJLFlBQVksa0NBQWtDO0FBQUEsVUFDM0Q7QUFDRCxpQkFBTyxLQUFLLFVBQVUsTUFBTSxDQUFDLEVBQUUsTUFBTTtBQUFBLFFBQ3hDO0FBQ0QsZUFBTyxjQUFjLEdBQUcsSUFBSTtBQUFBLE1BQy9CO0FBTW1DO0FBQ2hDLGdCQUFRLFNBQVMsSUFBSUE7QUFDckIsZ0JBQVEsVUFBVSxJQUFJO0FBQUEsTUFDekI7QUFDRCxVQUFJLE9BQU8sV0FBVyxhQUFhO0FBQy9CLGVBQU8sU0FBUyxJQUFJQTtBQUNwQixlQUFPLFVBQVUsSUFBSTtBQUFBLE1BVXhCO0FBQUEsSUFFTDs7RUN0T0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMkJBLFFBQU0sRUFBQyxnQkFBZ0Isa0JBQWlCLElBQUksV0FBVztBQUV2RCxRQUFNLHdCQUF3QjtBQUU5QixRQUFNLDhCQUE4QixDQUNsQyxhQUNHO0FBQ0gsWUFBUSxVQUFRO0FBQUEsTUFDZCxLQUFLO0FBQ0gsZUFBTztBQUFBLFVBQ0wsT0FBTztBQUFBLFFBQ2Y7QUFBQSxNQUVJLEtBQUs7QUFDSCxlQUFPO0FBQUEsVUFDTCxPQUFPO0FBQUEsUUFDZjtBQUFBLE1BRUksS0FBSztBQUNILGVBQU87QUFBQSxVQUNMLE9BQU87QUFBQSxRQUNmO0FBQUEsTUFFSSxLQUFLO0FBQ0gsZUFBTztBQUFBLFVBQ0wsT0FBTztBQUFBLFFBQ2Y7QUFBQSxNQUVJLEtBQUs7QUFDSCxlQUFPO0FBQUEsVUFDTCxPQUFPO0FBQUEsUUFDZjtBQUFBLE1BRUk7QUFDRSxjQUFNLElBQUksTUFBTSxzQ0FBc0M7QUFBQSxJQUN6RDtBQUFBLEVBQ0g7QUFFQSxRQUFNLGdCQUFnQixPQUNwQixjQUNBLG1CQUNBLFVBQ0c7QUFDSCxVQUFNLEVBQUMsWUFBQXRCLFlBQVUsSUFBSTtBQUNyQixVQUFNLGdCQUFnQixhQUFhO0FBQ25DLFVBQU0sY0FBYyxrQkFBa0IsY0FBYyxrQkFBa0Isb0JBQW9CO0FBQzFGLFVBQU0sU0FBUyxNQUFNQSxZQUFXLG1CQUFtQixhQUFhO0FBQ2hFLFVBQU0sV0FBVyw0QkFBNEIsT0FBTyxLQUFLO0FBQ3pELFVBQU0saUJBQWlCLGNBQWM7QUFDckMsVUFBTSxpQkFBaUIsQ0FBQTtBQUV2QixNQUFFLFlBQVksRUFBRSxRQUFRLFNBQVM7QUFFakMsc0JBQWtCLE1BQU0sVUFBVSxrQkFBa0IsS0FBSyxTQUFTO0FBRWxFLFFBQUksT0FBTyxTQUFTLFlBQVksSUFBSTtBQUNsQyxVQUFJLE9BQU8sU0FBUyxXQUFXLE9BQU87QUFDcEMsdUJBQWUsS0FBSyxNQUFNLE9BQU8sU0FBUyxPQUFPLENBQUM7QUFBQSxNQUNuRDtBQUFBLElBQ0Y7QUFFRCxXQUFPLFNBQVMsWUFBWSxRQUFRLENBQUMsZUFBZTtBQUNsRCxVQUFJLGNBQWMsT0FBTztBQUN2Qix1QkFBZSxLQUFLLE1BQU0sVUFBVSxDQUFDO0FBQUEsTUFDdEM7QUFBQSxJQUNMLENBQUc7QUFFRCxNQUFFLFlBQVksRUFBRSxRQUFRO0FBQUEsTUFDdEIsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsU0FBUyxlQUFlLEtBQUssT0FBTztBQUFBLElBQ3hDLENBQUcsRUFBRSxRQUFRLE1BQU07QUFFakIsVUFBTSxzQkFBc0Isa0JBQWtCLFNBQVMsYUFBYSxRQUFRLFdBQVcsRUFBRSxLQUNwRixrQkFBa0IsU0FBUyxhQUFhLFFBQVEsV0FBVyxFQUFFO0FBQ2xFLFVBQU0scUJBQXFCLFNBQVMsYUFBYSxRQUFRLFVBQVUsRUFBRSxLQUFLLE9BQU87QUFFakYsc0JBQWtCLGNBQWMsa0JBQWtCLHFCQUFxQixFQUFFLFVBQVU7QUFBQSxNQUNqRjtBQUFBLE1BQ0E7QUFBQSxJQUNKO0FBRUUsZ0JBQVksVUFBVTtBQUFBLE1BQ3BCO0FBQUEsTUFDQTtBQUFBLElBQ0o7QUFHRSxpQkFDRyxVQUFVLE9BQU8sa0JBQWtCLGVBQWU7QUFDckQsaUJBQ0csVUFBVSxJQUFJLHNCQUFzQixzQkFBc0IsbUJBQW1CLGVBQWU7QUFDL0YsaUJBQ0csVUFBVSxJQUFJLGdCQUFnQixRQUFRO0FBRXpDLFVBQU0sYUFBYyxPQUFPLFFBQVEsS0FBTTtBQUN6QyxVQUFNLGNBQWMsa0JBQWtCLGNBQWMsa0JBQWtCLFdBQVc7QUFHakYsUUFBSSxhQUFhO0FBQ2Ysa0JBQVksTUFBTSxRQUFRLEdBQUcsVUFBVTtBQUN2QyxrQkFBWSxVQUFVLE9BQU8sY0FBYyxhQUFhLFlBQVk7QUFDcEUsa0JBQVksVUFBVSxJQUFJLFNBQVMsS0FBSztBQUFBLElBQ3pDO0FBQUEsRUFDSDtBQUdBLFFBQU0sb0JBQW9CLENBQUMsYUFBYTtBQUN0QyxVQUFNLFdBQVcsU0FBUyxpQkFBaUIsUUFBUTtBQUNuRCxhQUFTLFFBQVEsQ0FBQyxZQUFZO0FBQzVCLFlBQU0sY0FBYyxtQ0FBUyxjQUFjLGtCQUFrQjtBQUM3RCxZQUFNLGVBQWUsbUNBQVMsY0FBYztBQUM1QyxZQUFNLGtCQUFrQixTQUFTLGNBQWMsS0FBSztBQUNwRCxZQUFNLG1CQUFtQixTQUFTLGNBQWMsa0JBQWtCLFFBQVE7QUFDMUUsVUFBSTtBQUVKLFVBQUksb0JBQW9CLFdBQVcsZUFBZSxjQUFjO0FBQzlELHdCQUFnQixZQUFZLGlCQUFpQjtBQUM3QyxvQkFBWSxPQUFPLGVBQWU7QUFDbEMsNEJBQW9CLFFBQVEsY0FBYyxrQkFBa0IsU0FBUztBQUVyRSxZQUFJLG1CQUFtQjtBQUNyQixnQkFBTSxjQUFjLFNBQVMsY0FBYyxrQkFBa0IsSUFBSTtBQUVqRSxjQUFJLGFBQWE7QUFDZixrQkFBTSxRQUFRLEtBQUssTUFBTSxZQUFZLFNBQVM7QUFHOUMsa0JBQU0sNkJBQTZCLGtCQUFrQixjQUFjLGtCQUFrQixpQkFBaUI7QUFFdEcsa0JBQU0sNEJBQTRCLGtCQUFrQixjQUFjLGtCQUFrQixnQkFBZ0I7QUFDcEcsa0JBQU0scUJBQXFCLHlFQUE0QixjQUFjO0FBQ3JFLGtCQUFNLDJCQUEyQix1RUFBMkIsY0FBYztBQUUxRSxnQkFBSSxzQkFBc0IsOEJBQThCLDJCQUEyQixRQUFRLGFBQWE7QUFDdEcsaUNBQW1CLFlBQVlzQixRQUFPO0FBQUEsZ0JBQ3BDLDJCQUEyQixRQUFRO0FBQUEsZ0JBQ25DLGFBQWEsUUFBUTtBQUFBLGdCQUNyQixhQUFhLFFBQVE7QUFBQSxjQUNuQztBQUFBLFlBQ1c7QUFFRCxnQkFBSSw0QkFBNEIsNkJBQTZCLDBCQUEwQixRQUFRLGFBQWE7QUFDMUcsdUNBQXlCLFlBQVlBLFFBQU87QUFBQSxnQkFDMUMsMEJBQTBCLFFBQVE7QUFBQSxnQkFDbEMsTUFBTSxhQUFhLFFBQVEsUUFBUTtBQUFBLGNBQ2pEO0FBQUEsWUFDVztBQUdELHlCQUFhLGlCQUFpQixTQUFTLE1BQU0sY0FBYyxjQUFjLG1CQUFtQixLQUFLLENBQUM7QUFDbEcseUJBQWEsaUJBQWlCLFFBQVEsTUFBTTtBQUMxQyxnQkFBRSxZQUFZLEVBQUUsUUFBUSxTQUFTO0FBQUEsWUFDN0MsQ0FBVztBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVELFVBQUksU0FBUztBQUNYLGVBQU87QUFBQSxVQUNMO0FBQUEsUUFDUjtBQUFBLE1BQ0s7QUFFRCxhQUFPO0FBQUEsUUFDTCxPQUFPLElBQUksTUFBTSxxQkFBcUI7QUFBQSxNQUM1QztBQUFBLElBQ0EsQ0FBRztBQUFBLEVBQ0g7QUFBQSxFQ25NQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQTRCZSxNQUFNLGdCQUFnQixTQUFTO0FBQUEsSUFDNUMsT0FBTztBQUNMLFVBQUk7QUFDSixZQUFNckIsUUFBTztBQUNiLFdBQUssR0FBRyxLQUFLLElBQUksRUFBRSxHQUFHLHlCQUF5QixDQUFDLE1BQU07QUFDcEQsWUFBSSxLQUFLLEdBQUcsT0FBUSxFQUFDLFNBQVMsUUFBUSxHQUFHO0FBQ3ZDO0FBQUEsUUFDRDtBQUNELGNBQU0scUJBQXFCN0IsSUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLE9BQU87QUFFMUQsWUFBSSxjQUFjLG9CQUFvQjtBQUNwQyxnQkFBTSxrQkFBa0IsTUFBTSxVQUFVLE1BQ3JDLEtBQUssRUFBRSxjQUFjLFNBQVMsRUFDOUIsSUFBSSxDQUFDLFNBQVUsT0FBTyxTQUFTLFdBQVcsSUFBSSxJQUFJLEtBQUssS0FBTTtBQUVoRSxzQkFBWSxnQkFBZ0IsS0FBSyxFQUFFO0FBRW5DLGNBQUksYUFBYUEsSUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLE9BQU8sTUFBTSxHQUFHO0FBQ2hEQSxnQkFBRSxHQUFHLFNBQVMsZUFBZSxFQUFFLElBQUk7QUFBQSxjQUNqQyxLQUFLQSxJQUFFLEdBQUcsU0FBUyxFQUFFLEVBQUUsT0FBTSxJQUFLQSxJQUFFLEdBQUcsU0FBUyxFQUFFLEVBQUUsU0FBVSxFQUFDO0FBQUEsWUFDM0UsQ0FBVztBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsTUFDUCxDQUFLO0FBQ0RBLFVBQUUsWUFBWSxFQUFFLEdBQUcsU0FBUyxNQUFNO0FBQ2hDQSxZQUFFLDBCQUEwQixFQUFFO0FBQzlCLFFBQUE2QixNQUFLLGlCQUFnQjtBQUFBLE1BQzNCLENBQUs7QUFFRCxXQUFLLEdBQUcsR0FBRyxTQUFTLENBQUMsTUFBTTtBQUN6QixZQUFJLEtBQUssR0FBRyxPQUFRLEVBQUMsU0FBUyxRQUFRLEdBQUc7QUFDdkM7QUFBQSxRQUNEO0FBQ0QsVUFBRSxnQkFBZTtBQUFBLE1BQ3ZCLENBQUs7QUFFREQsbUJBQVcsR0FBRyxxQkFBcUIsTUFBTTtBQUN2QzVCLFlBQUUsY0FBYyxFQUFFLFdBQVcsT0FBTztBQUNwQyxRQUFBNkIsTUFBSyxpQkFBZ0I7QUFBQSxNQUMzQixDQUFLO0FBQ0QsWUFBTSxLQUFJO0FBQUEsSUFDWDtBQUFBLElBRUQsbUJBQW1CO0FBQ2pCN0IsVUFBRSxTQUFTLEVBQUUsWUFBWSxTQUFTO0FBQ2xDLFVBQUlBLElBQUUsMEJBQTBCLEVBQUUsR0FBRyxVQUFVLEdBQUc7QUFDaERBLFlBQUUsbUNBQW1DLEVBQUU7TUFDN0MsT0FBVztBQUNMQSxZQUFFLG1DQUFtQyxFQUFFO01BQ3hDO0FBQUEsSUFDRjtBQUFBLEVBQ0g7QUMvRUEsZ0JBQVksT0FBTyxPQUFPLFdBQVMsT0FBTyxTQUFPLFNBQVMsR0FBRTtBQUFDLGFBQVMsSUFBRztBQUFBLElBQUU7QUFBQSxXQUFPLEVBQUUsWUFBVSxHQUFFLElBQUk7QUFBQSxFQUFDLElBQUcsU0FBUyxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQWMsUUFBSSxJQUFFLEVBQUMsa0JBQWlCLENBQUMsZUFBYyxnQkFBZSxhQUFZLFlBQVcsaUJBQWdCLGNBQWEsWUFBWSxHQUFFLGVBQWMsQ0FBQyxXQUFVLFNBQVEsUUFBTyxTQUFTLEdBQUUsTUFBSyxTQUFTb0IsSUFBRVIsSUFBRTtBQUFDLFdBQUssZUFBZVEsSUFBRSxFQUFFLE1BQU0sT0FBTyxHQUFFLEtBQUssUUFBTztBQUFBLElBQUUsR0FBRSxnQkFBZSxTQUFTQSxJQUFFUixJQUFFO0FBQUMsVUFBSXVDLEtBQUUsQ0FBQTtBQUFHLGtCQUFVLE9BQU8vQixNQUFHQSxjQUFhLFFBQU0rQixHQUFFLE9BQUsvQixLQUFFK0IsS0FBRS9CLElBQUUsS0FBSyxVQUFRLEVBQUUsT0FBTyxDQUFFLEdBQUNSLElBQUV1QyxFQUFDO0FBQUEsSUFBQyxHQUFFLFNBQVEsV0FBVTtBQUFDLFdBQUssTUFBSyxHQUFHLEtBQUssU0FBUSxHQUFHLEtBQUssWUFBVyxLQUFLLFVBQVcsR0FBQyxLQUFLLFFBQVM7QUFBQSxJQUFBLEdBQUUsT0FBTSxXQUFVO0FBQUMsVUFBSS9CLEtBQUU7QUFBRyxVQUFHLEtBQUssV0FBUyxLQUFLLFlBQVUsRUFBRSxlQUFjLEVBQUMsU0FBUSxrQkFBaUIsQ0FBQyxHQUFFQSxNQUFHLHlDQUF3QyxLQUFLLFFBQVEsb0JBQWtCQSxNQUFHLHVEQUFzRCxLQUFLLFFBQVEsZ0JBQWdCLE9BQU07QUFBQyxhQUFLLFFBQVEsWUFBVUEsTUFBRyxrQ0FBZ0MsS0FBSyxRQUFRLFVBQVEsVUFBU0EsTUFBRztBQUEyQixpQkFBUVIsS0FBRSxHQUFFQSxLQUFFLEtBQUssUUFBUSxLQUFLLFFBQU9BO0FBQUksVUFBQVEsTUFBRywrQ0FBNkNSLEtBQUUsT0FBSyxLQUFLLFFBQVEsS0FBS0EsRUFBQyxJQUFFO0FBQVEsUUFBQVEsTUFBRztBQUFBLE1BQU87QUFBTSxhQUFLLFFBQVEsWUFBVUEsTUFBRyxrQ0FBZ0MsS0FBSyxRQUFRLFVBQVEsVUFBU0EsTUFBRyxLQUFLLFFBQVE7QUFBSyxXQUFLLFNBQVMsS0FBS0EsRUFBQyxHQUFFLEtBQUssUUFBUSxZQUFVLFNBQUksS0FBSyxTQUFTLElBQUksb0JBQW1CLEtBQUssUUFBUSxPQUFPLEdBQUUsS0FBSyxRQUFRLGNBQVksU0FBSSxLQUFLLFNBQVMsSUFBSSxTQUFRLEtBQUssUUFBUSxTQUFTLEdBQUUsS0FBSyxRQUFRLGFBQVcsS0FBSyxTQUFTLElBQUksY0FBYSxLQUFLLFFBQVEsU0FBUyxHQUFFLEtBQUssUUFBUSxTQUFPLFVBQUssS0FBSyxTQUFTLFNBQVMsYUFBYSxHQUFFLE9BQUssRUFBRSxRQUFRLEtBQUssUUFBUSxNQUFLLEtBQUssYUFBYSxLQUFHLEtBQUssU0FBUyxTQUFTLGFBQVcsS0FBSyxRQUFRLElBQUksSUFBRyxLQUFLLFFBQVEsT0FBTyxNQUFJLFNBQUksS0FBSyxTQUFTLFNBQVMsS0FBSyxRQUFRLE9BQU8sQ0FBQztBQUFBLElBQUMsR0FBRSxVQUFTLFdBQVU7QUFBQyxrQkFBVSxPQUFPLEtBQUssUUFBUSxZQUFVLE9BQUssRUFBRSxRQUFRLEtBQUssUUFBUSxVQUFTLEtBQUssZ0JBQWdCLElBQUUsb0JBQWtCLEtBQUssUUFBUSxXQUFTLEtBQUssV0FBVyxJQUFJLEVBQUMsTUFBSyxFQUFFLENBQUMsRUFBRSxXQUFZLElBQUMsSUFBRSxLQUFLLFdBQVcsV0FBWSxJQUFDLEdBQUUsUUFBTyxHQUFFLENBQUMsSUFBRSxpQkFBZSxLQUFLLFFBQVEsV0FBUyxLQUFLLFdBQVcsSUFBSSxFQUFDLE1BQUssRUFBRSxDQUFDLEVBQUUsV0FBWSxJQUFDLElBQUUsS0FBSyxXQUFXLFdBQVksSUFBQyxHQUFFLEtBQUksR0FBRSxDQUFDLElBQUUsaUJBQWUsS0FBSyxRQUFRLFdBQVMsS0FBSyxXQUFXLElBQUksRUFBQyxNQUFLLEVBQUUsQ0FBQyxFQUFFLFdBQVksSUFBQyxJQUFFLEtBQUssV0FBVyxXQUFZLElBQUMsR0FBRSxLQUFJLEVBQUUsQ0FBQyxFQUFFLFlBQWEsSUFBQyxJQUFFLEtBQUssV0FBVyxZQUFhLElBQUMsRUFBQyxDQUFDLElBQUUsS0FBSyxXQUFXLFNBQVMsS0FBSyxRQUFRLFFBQVEsSUFBRSxZQUFVLE9BQU8sS0FBSyxRQUFRLFdBQVMsS0FBSyxXQUFXLElBQUksRUFBQyxLQUFJLEtBQUssUUFBUSxTQUFTLE1BQUksS0FBSyxRQUFRLFNBQVMsTUFBSSxRQUFPLFFBQU8sS0FBSyxRQUFRLFNBQVMsU0FBTyxLQUFLLFFBQVEsU0FBUyxTQUFPLFFBQU8sTUFBSyxLQUFLLFFBQVEsU0FBUyxPQUFLLEtBQUssUUFBUSxTQUFTLE9BQUssUUFBTyxPQUFNLEtBQUssUUFBUSxTQUFTLFFBQU0sS0FBSyxRQUFRLFNBQVMsUUFBTSxPQUFNLENBQUMsSUFBRSxLQUFLLFdBQVcsU0FBUyxhQUFhO0FBQUEsSUFBQyxHQUFFLFdBQVUsV0FBVTtBQUFDLFVBQUlnQyxLQUFFO0FBQUssV0FBSyxTQUFTLEdBQUcsY0FBYSxXQUFVO0FBQUMsUUFBQUEsR0FBRSxjQUFhO0FBQUEsTUFBRSxDQUFDLEdBQUUsS0FBSyxTQUFTLEtBQUssd0JBQXdCLEVBQUUsR0FBRyxTQUFRLFNBQVNoQyxJQUFFO0FBQUMsUUFBQUEsR0FBRSxlQUFjLEdBQUcsV0FBU2dDLEdBQUUsUUFBUSxzQkFBb0JBLEdBQUUsU0FBUyxRQUFRLFlBQVksR0FBRUEsR0FBRSxTQUFTLFFBQVEsV0FBVTtBQUFDLFVBQUFBLEdBQUUsU0FBUyxRQUFRLGFBQWE7QUFBQSxRQUFDLENBQUMsS0FBRyxZQUFVQSxHQUFFLFFBQVEsc0JBQW9CQSxHQUFFLFNBQVMsUUFBUSxZQUFZLEdBQUVBLEdBQUUsU0FBUyxRQUFRLFdBQVU7QUFBQyxVQUFBQSxHQUFFLFNBQVMsUUFBUSxhQUFhO0FBQUEsUUFBQyxDQUFDLE1BQUlBLEdBQUUsU0FBUyxRQUFRLFlBQVksR0FBRUEsR0FBRSxTQUFTLEtBQUssV0FBVTtBQUFDLFVBQUFBLEdBQUUsU0FBUyxRQUFRLGFBQWE7QUFBQSxRQUFDLENBQUM7QUFBQSxNQUFFLENBQUMsR0FBRSxjQUFZLE9BQU8sS0FBSyxRQUFRLGNBQVksS0FBSyxTQUFTLEdBQUcsY0FBYSxXQUFVO0FBQUMsUUFBQUEsR0FBRSxRQUFRLFdBQVU7QUFBQSxNQUFFLENBQUMsR0FBRSxjQUFZLE9BQU8sS0FBSyxRQUFRLGNBQVksS0FBSyxTQUFTLEdBQUcsY0FBYSxXQUFVO0FBQUMsUUFBQUEsR0FBRSxRQUFRLFdBQVU7QUFBQSxNQUFFLENBQUMsR0FBRSxjQUFZLE9BQU8sS0FBSyxRQUFRLGNBQVksS0FBSyxTQUFTLEdBQUcsY0FBYSxXQUFVO0FBQUMsUUFBQUEsR0FBRSxRQUFRLFdBQVU7QUFBQSxNQUFFLENBQUMsR0FBRSxjQUFZLE9BQU8sS0FBSyxRQUFRLGVBQWEsS0FBSyxTQUFTLEdBQUcsZUFBYyxXQUFVO0FBQUMsUUFBQUEsR0FBRSxRQUFRLFlBQVc7QUFBQSxNQUFFLENBQUM7QUFBQSxJQUFDLEdBQUUsVUFBUyxXQUFVO0FBQUMsVUFBSWhDLEtBQUUsRUFBRSxnQkFBZ0I7QUFBRSxVQUFHLE1BQUlBLEdBQUUsVUFBUUEsS0FBRSxFQUFFLGVBQWMsRUFBQyxTQUFRLGdCQUFlLENBQUMsR0FBRSxFQUFFLE1BQU0sRUFBRSxPQUFPQSxFQUFDLE1BQUksQ0FBQyxLQUFLLFFBQVEsU0FBTyxNQUFNLFNBQVMsS0FBSyxRQUFRLE9BQU0sRUFBRSxDQUFDLE1BQUlBLEdBQUUsTUFBSyxHQUFHQSxHQUFFLEtBQUsseUJBQXlCLEVBQUUsT0FBUSxHQUFDQSxHQUFFLE9BQU8sS0FBSyxRQUFRLEdBQUUsS0FBSyxRQUFRLFNBQU8sQ0FBQyxNQUFNLFNBQVMsS0FBSyxRQUFRLEtBQUssR0FBRSxFQUFFLEdBQUU7QUFBQyxZQUFJUixLQUFFUSxHQUFFLEtBQUssa0JBQWtCLEVBQUUsUUFBTytCLEtBQUV2QyxLQUFFLEtBQUssUUFBUTtBQUFNLFFBQUF1QyxLQUFFLEtBQUcsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLGtCQUFrQixFQUFFLE1BQU0sR0FBRUEsRUFBQyxFQUFFLE9BQVE7QUFBQSxNQUFBO0FBQUMsV0FBSyxhQUFXL0I7QUFBQSxJQUFDLEdBQUUsYUFBWSxXQUFVO0FBQUMsYUFBTyxLQUFLLFFBQVEsY0FBWSxTQUFJLENBQUMsTUFBTSxTQUFTLEtBQUssUUFBUSxXQUFVLEVBQUUsQ0FBQztBQUFBLElBQUMsR0FBRSxlQUFjLFdBQVU7QUFBQyxVQUFHLENBQUMsS0FBSyxpQkFBZSxLQUFLLFFBQVEsV0FBUztBQUFHLGVBQU07QUFBRyxVQUFJZ0MsS0FBRSxLQUFLLFNBQVMsS0FBSyxrQkFBa0IsR0FBRWhDLE1BQUcsS0FBSyxRQUFRLFlBQVUsT0FBSyxNQUFJLEtBQUlSLEtBQUUsS0FBSyxRQUFRLFVBQVN1QyxLQUFFQyxHQUFFLEtBQUssT0FBTyxLQUFHO0FBQUcsTUFBQUQsS0FBRUEsR0FBRSxVQUFVLEdBQUVBLEdBQUUsUUFBUSxvQkFBb0IsQ0FBQyxHQUFFQSxNQUFHLCtCQUE2Qi9CLEtBQUUsMERBQXdEQSxLQUFFLHVEQUFxREEsS0FBRSx1REFBcURSLEtBQUUsS0FBSXdDLEdBQUUsS0FBSyxTQUFRRCxFQUFDLEVBQUUsU0FBUyxpQkFBaUI7QUFBQSxJQUFDLEdBQUUsU0FBUSxXQUFVO0FBQUMsVUFBSUMsS0FBRTtBQUFLLFVBQUcsS0FBSyxTQUFTLFFBQU8sS0FBSyxTQUFTLFFBQVEsWUFBWSxHQUFFLFdBQVMsS0FBSyxRQUFRLG1CQUFtQixZQUFXLElBQUcsS0FBSyxTQUFTLE9BQU8sV0FBVTtBQUFDLFFBQUFBLEdBQUUsU0FBUyxRQUFRLFlBQVk7QUFBQSxNQUFDLENBQUMsSUFBRSxZQUFVLEtBQUssUUFBUSxtQkFBbUIsWUFBYSxJQUFDLEtBQUssU0FBUyxVQUFVLFdBQVU7QUFBQyxRQUFBQSxHQUFFLFNBQVMsUUFBUSxZQUFZO0FBQUEsTUFBQyxDQUFDLElBQUUsS0FBSyxTQUFTLEtBQUssV0FBVTtBQUFDLFFBQUFBLEdBQUUsU0FBUyxRQUFRLFlBQVk7QUFBQSxNQUFDLENBQUMsR0FBRSxLQUFLLFlBQVcsR0FBRztBQUFDLFlBQUlBLEtBQUU7QUFBSyxVQUFFLFdBQVcsV0FBVTtBQUFDLHFCQUFTQSxHQUFFLFFBQVEsbUJBQW1CLFlBQVcsS0FBSUEsR0FBRSxTQUFTLFFBQVEsWUFBWSxHQUFFQSxHQUFFLFNBQVMsUUFBUSxXQUFVO0FBQUMsWUFBQUEsR0FBRSxTQUFTLFFBQVEsYUFBYTtBQUFBLFVBQUMsQ0FBQyxLQUFHLFlBQVVBLEdBQUUsUUFBUSxtQkFBbUIsWUFBYSxLQUFFQSxHQUFFLFNBQVMsUUFBUSxZQUFZLEdBQUVBLEdBQUUsU0FBUyxRQUFRLFdBQVU7QUFBQyxZQUFBQSxHQUFFLFNBQVMsUUFBUSxhQUFhO0FBQUEsVUFBQyxDQUFDLE1BQUlBLEdBQUUsU0FBUyxRQUFRLFlBQVksR0FBRUEsR0FBRSxTQUFTLEtBQUssV0FBVTtBQUFDLFlBQUFBLEdBQUUsU0FBUyxRQUFRLGFBQWE7QUFBQSxVQUFDLENBQUM7QUFBQSxRQUFFLEdBQUUsS0FBSyxRQUFRLFNBQVM7QUFBQSxNQUFDO0FBQUEsSUFBQyxHQUFFLE9BQU0sU0FBU2hDLElBQUU7QUFBQyxnQkFBUUEsS0FBRSxFQUFFLGdCQUFnQixFQUFFLE9BQVEsSUFBQyxLQUFLLFNBQVMsT0FBUTtBQUFBLElBQUEsR0FBRSxRQUFPLFNBQVNnQyxJQUFFO0FBQUMsV0FBSyxlQUFlQSxJQUFFLEtBQUssT0FBTyxHQUFFLEtBQUssTUFBTyxHQUFDLEtBQUssVUFBVztBQUFBLElBQUEsRUFBQztBQUFFLE1BQUUsUUFBTSxTQUFTQSxJQUFFO0FBQUMsVUFBSWhDLEtBQUUsT0FBTyxPQUFPLENBQUM7QUFBRSxhQUFPQSxHQUFFLEtBQUtnQyxJQUFFLElBQUksR0FBRSxFQUFDLE9BQU0sU0FBU0EsSUFBRTtBQUFDLFFBQUFoQyxHQUFFLE1BQU1nQyxFQUFDO0FBQUEsTUFBQyxHQUFFLFFBQU8sU0FBU0EsSUFBRTtBQUFDLFFBQUFoQyxHQUFFLE9BQU9nQyxFQUFDO0FBQUEsTUFBQyxFQUFDO0FBQUEsSUFBQyxHQUFFLEVBQUUsTUFBTSxVQUFRLEVBQUMsTUFBSyxJQUFHLFNBQVEsSUFBRyxvQkFBbUIsUUFBTyxpQkFBZ0IsTUFBRyxXQUFVLEtBQUksUUFBTyxNQUFHLFVBQVMsV0FBVSxPQUFNLEdBQUUsVUFBUyxlQUFjLFNBQVEsT0FBRyxXQUFVLE9BQUcsV0FBVSxRQUFPLE1BQUssT0FBRyxZQUFXLFdBQVU7QUFBQSxJQUFFLEdBQUMsWUFBVyxXQUFVO0FBQUEsSUFBRSxHQUFDLFlBQVcsV0FBVTtBQUFBLElBQUUsR0FBQyxhQUFZLFdBQVU7QUFBQSxJQUFBLEVBQUU7QUFBQSxFQUFDLEVBQUUsUUFBTyxNQUFlOztFQ0E3ck07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBNkJBcEQsTUFBRSxNQUFNO0FBQ040QixpQkFBVyxZQUFZQSxhQUFXLGFBQWEsQ0FBQTtBQUM3QkEsaUJBQVcsVUFBVSxhQUNsQyxTQUFVLE9BQU87QUFDbEIsWUFBTSxRQUFRNUIsSUFBRSxNQUFNO0FBQ3RCLFlBQU0sT0FBTyxLQUFLO0FBQ2xCQSxVQUFFLGtCQUFrQixFQUFFO0FBQ3RCLGNBQVEsSUFBSSxRQUFRO0FBQ3BCLFlBQU0sSUFBSSxTQUFTLG9CQUFvQixDQUFDLFVBQVU7QUFDaEQsWUFBSSxNQUFNLE9BQU8sT0FBTyxtQkFBbUI7QUFDekNBLGNBQUUsTUFBTTtRQUNUO0FBQUEsTUFDVCxDQUFPO0FBQUEsSUFDRDtBQUNKNEIsaUJBQVcsR0FBRyxjQUFjLENBQUMsVUFBVTtBQUNyQyxZQUFNLGFBQWE1QixJQUFFLFlBQVksRUFBRSxLQUFLLGFBQWE7QUFDckQsVUFBSSxjQUFjLENBQUE7QUFFbEIsVUFDRSxTQUNHLE1BQU0sVUFDTixPQUFPLE1BQU0sU0FBUyxlQUN0QixDQUFDLE1BQU0sS0FBSyxVQUNmO0FBQ0Esc0JBQWM7QUFBQSxVQUNaLGtCQUFrQixNQUFNLE9BQU87QUFBQSxVQUMvQixzQkFBc0IsTUFBTSxPQUFPO0FBQUEsVUFDbkMsWUFBWSxNQUFNLE9BQU87QUFBQSxVQUN6QixRQUFRLE1BQU0sT0FBTztBQUFBLFFBQzdCO0FBQUEsTUFDSztBQUNELFVBQUksU0FBUyxNQUFNLFFBQVEsTUFBTSxLQUFLLFVBQVU7QUFDOUM0QixxQkFBVyxLQUFLLGtDQUFrQztBQUFBLFVBQ2hELGNBQWMsTUFBTSxLQUFLLE9BQU8sS0FBSyxPQUFPO0FBQUEsUUFDcEQsQ0FBTztBQUFBLE1BQ0Y7QUFDRDVCLFVBQUUsS0FBSyxZQUFZLFdBQVcsRUFDM0IsS0FBSyxDQUFDLFNBQVM7QUFDZEEsWUFBRSxZQUFZLEVBQUUsWUFBWUEsSUFBRSxLQUFLLE9BQU8sRUFBRSxLQUFLLFlBQVksQ0FBQztBQUM5RCxZQUFJLEtBQUssT0FBTztBQUNkQSxjQUFFLE1BQU07QUFBQSxZQUNOLFNBQVM7QUFBQSxZQUNULE1BQU07QUFBQSxZQUNOLFVBQVU7QUFBQSxjQUNSLEtBQUs7QUFBQSxjQUNMLE9BQU87QUFBQSxZQUNSO0FBQUEsWUFDRCxTQUFTO0FBQUEsWUFDVCxXQUFXO0FBQUEsWUFDWCxVQUFVO0FBQUEsWUFDVixPQUFPO0FBQUEsVUFDbkIsQ0FBVztBQUFBLFFBQ0Y7QUFBQSxNQUNULENBQU8sRUFDQSxLQUFLLENBQUMsU0FBUztBQUNkNEIscUJBQVcsS0FBSyxlQUFlO0FBQUEsVUFDN0IsV0FBVztBQUFBLFVBQ1g7QUFBQSxRQUNWLENBQVM7QUFBQSxNQUNULENBQU87QUFBQSxJQUNQLENBQUc7QUFBQSxFQUNILENBQUM7OztBQ3JGRCxLQUFDLFNBQVMsR0FBRSxHQUFFO0FBQTBELE1BQUF4QixRQUFBLFVBQWUsU0FBU2dELElBQUUsR0FBRTtBQUFDLGVBQU8sV0FBUyxNQUFJLElBQUUsZUFBYSxPQUFPLFNBQU9yRCxNQUFrQkEsSUFBa0JxRCxFQUFDLElBQUcsRUFBRSxDQUFDLEdBQUU7QUFBQSxNQUFDO0FBQUEsSUFBdUUsRUFBRS9DLGdCQUFLLFNBQVMsR0FBRTtBQUFjLGVBQVMsRUFBRStDLElBQUUxQyxJQUFFeUMsSUFBRTtBQUFDLFlBQUl2QztBQUFFLGVBQU8sV0FBVTtBQUFDLGNBQUksSUFBRSxNQUFLLElBQUUsV0FBVSxJQUFFLFdBQVU7QUFBQyxZQUFBQSxLQUFFLE1BQUt1QyxNQUFHQyxHQUFFLE1BQU0sR0FBRSxDQUFDO0FBQUEsVUFBQyxHQUFFLElBQUVELE1BQUcsQ0FBQ3ZDO0FBQUUsdUJBQWFBLEVBQUMsR0FBRUEsS0FBRSxXQUFXLEdBQUVGLEVBQUMsR0FBRSxLQUFHMEMsR0FBRSxNQUFNLEdBQUUsQ0FBQztBQUFBLFFBQUM7QUFBQSxNQUFDO0FBQUMsZUFBUyxFQUFFMUMsSUFBRXlDLElBQUU7QUFBQyxZQUFJLEdBQUUsR0FBRSxJQUFFLEVBQUV6QyxFQUFDLEVBQUU7QUFBTyxhQUFLLE1BQUksRUFBRUEsRUFBQztBQUFFLGFBQUksS0FBSztBQUFFLFlBQUUsZUFBZSxDQUFDLEtBQUcsbUJBQW1CLEtBQUssQ0FBQyxNQUFJLElBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxZQUFXLElBQUcsRUFBRSxPQUFPLEVBQUUsU0FBTyxDQUFDLEdBQUUsRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDO0FBQUcsYUFBSyxXQUFTLEVBQUUsT0FBTyxNQUFHLENBQUEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLFVBQVN5QyxJQUFFLENBQUMsR0FBRSxLQUFLLE9BQUssR0FBRSxLQUFLLElBQUksS0FBSyxLQUFLLE9BQUssU0FBUSxLQUFLLFFBQVEsR0FBRSxLQUFLO01BQU07QUFBQyxVQUFJLElBQUU7QUFBWSxRQUFFLE9BQU8sRUFBRSxXQUFVLEVBQUMsWUFBVyxXQUFVO0FBQUMsWUFBSUMsS0FBRSxLQUFLLGNBQWMsT0FBTTtBQUFHLGFBQUssSUFBSSxLQUFLLEtBQUssT0FBSyxPQUFPLE1BQUksS0FBSyxTQUFTLElBQUksVUFBU0EsRUFBQyxHQUFFLEtBQUssU0FBUyxXQUFTLEtBQUssU0FBUyxJQUFJLFVBQVNBLEVBQUM7QUFBQSxNQUFFLEdBQUUsTUFBSyxXQUFVO0FBQUMsWUFBSTFDLEtBQUUsQ0FBRTtBQUFDLGFBQUssWUFBVSxLQUFLLE1BQU0sU0FBUyxLQUFLLFNBQVMsUUFBUSxJQUFJLEdBQUUsS0FBSyxVQUFRLE1BQUcsS0FBSyxJQUFJLFFBQVEsVUFBUSxLQUFLLElBQUksR0FBRSxLQUFLLElBQUksUUFBUSxZQUFVLEtBQUssTUFBSyxLQUFLLE9BQU8sR0FBRSxLQUFLLFdBQVksR0FBQ0EsR0FBRSxLQUFLLFNBQVMsTUFBTSxJQUFFLEtBQUssUUFBUSxLQUFLLFNBQVMsTUFBTSxFQUFFLElBQUcsS0FBSyxRQUFRLEtBQUssU0FBUyxNQUFNLEVBQUUsSUFBSSxTQUFTQSxJQUFFLEVBQUUsT0FBTyxFQUFDLFdBQVMsV0FBVTtBQUFDLGVBQUssSUFBSSxRQUFRLFdBQVMsS0FBSyxJQUFJLEdBQUUsS0FBSyxTQUFTLFdBQVMsS0FBSyxTQUFTLElBQUksV0FBUyxLQUFLLE9BQUssV0FBVTtBQUFDLGlCQUFLLEtBQUk7QUFBQSxVQUFFLEdBQUUsS0FBSyxJQUFJLENBQUM7QUFBQSxRQUFDLEdBQUUsS0FBSyxJQUFJLEVBQUMsR0FBRSxLQUFLLGdCQUFnQixDQUFDLEdBQUUsS0FBSyxTQUFTLFdBQVMsS0FBSyxTQUFTLFNBQVMsRUFBQyxTQUFRLEVBQUMsR0FBRSxFQUFFLE9BQU8sRUFBQyxTQUFRLFFBQU8sR0FBRSxLQUFLLGdCQUFnQixDQUFDO0FBQUEsTUFBRSxHQUFFLE1BQUssV0FBVTtBQUFDLGFBQUssWUFBVSxLQUFLLE1BQU0sWUFBWSxLQUFLLFNBQVMsUUFBUSxJQUFJLEdBQUUsS0FBSyxVQUFRLE9BQUcsS0FBSyxJQUFJLFFBQVEsVUFBUSxLQUFLLElBQUksR0FBRSxLQUFLLElBQUksUUFBUSxZQUFVLEtBQUssTUFBSyxLQUFLLE9BQU8sR0FBRSxLQUFLLFFBQVEsS0FBSyxTQUFTLE1BQU0sRUFBRSxJQUFJLFNBQVMsTUFBTSxFQUFFLFNBQVMsV0FBVSxFQUFFLE9BQU8sRUFBQyxXQUFTLFdBQVU7QUFBQyxlQUFLLElBQUksUUFBUSxZQUFVLEtBQUssSUFBSTtBQUFBLFFBQUMsR0FBRSxLQUFLLElBQUksRUFBQyxHQUFFLEtBQUssZ0JBQWdCLENBQUMsR0FBRSxLQUFLLFNBQVMsV0FBUyxLQUFLLFNBQVMsU0FBUyxNQUFNLEVBQUUsU0FBUyxXQUFVLEVBQUUsT0FBTyxFQUFDLFNBQVEsT0FBTSxHQUFFLEtBQUssZ0JBQWdCLENBQUM7QUFBQSxNQUFFLEdBQUUsUUFBTyxXQUFVO0FBQUMsZ0JBQU8sS0FBSyxVQUFRLEtBQUssT0FBSyxLQUFLLE1BQU0sS0FBSyxJQUFJO0FBQUEsTUFBQyxHQUFFLFNBQVEsV0FBVTtBQUFDLGFBQUssSUFBSSxLQUFLLEtBQUssT0FBSyxPQUFPLE1BQUksS0FBSyxjQUFjLFVBQVMsS0FBSyxjQUFjLFNBQVUsRUFBQyxPQUFRLEdBQUMsS0FBSyxNQUFNLFlBQVksS0FBSyxTQUFTLFFBQVEsU0FBUyxFQUFFLFlBQVksS0FBSyxTQUFTLFFBQVEsSUFBSSxHQUFFLEtBQUssU0FBUyxXQUFTLEtBQUssU0FBUyxJQUFJLFdBQVMsS0FBSyxJQUFJLEVBQUUsVUFBUyxLQUFLLElBQUksT0FBUSxFQUFDLFdBQVcsS0FBSyxPQUFLLE9BQU8sRUFBRSxXQUFXLE9BQU8sR0FBRSxLQUFLLEtBQUssSUFBSSxZQUFVLEtBQUssSUFBSTtBQUFBLE1BQUUsR0FBRSxNQUFLLFdBQVU7QUFBQyxZQUFJeUMsS0FBRSxDQUFFO0FBQUMsYUFBSyxPQUFLLEVBQUUsTUFBTSxHQUFFLEtBQUssUUFBTSxFQUFFLE1BQU0sR0FBRSxLQUFLLFVBQVEsT0FBRyxLQUFLLFFBQU0sRUFBRSxLQUFLLFNBQVMsU0FBUyxHQUFFLEtBQUssTUFBTSxTQUFTLEtBQUssU0FBUyxRQUFRLFNBQVMsRUFBRSxTQUFTLGNBQWMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsS0FBSyxTQUFTLFFBQVEsS0FBSyxDQUFDLEdBQUUsS0FBSyxnQkFBYyxFQUFFLE1BQUksS0FBSyxTQUFTLFFBQVEsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxLQUFLLFNBQVMsUUFBUSxLQUFLLENBQUMsR0FBRSxLQUFLLGdCQUFjLEVBQUUsTUFBSSxLQUFLLFNBQVMsUUFBUSxLQUFLLEdBQUUsS0FBSyxT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 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuanMiLCJzb3VyY2VzIjpbIi4uLy4uL19kZXYvbm9kZV9tb2R1bGVzL2pxdWVyeS1tb2RhbC9qcXVlcnkubW9kYWwuanMiLCIuLi8uLi9fZGV2L25vZGVfbW9kdWxlcy90b29sdGlwc3Rlci9kaXN0L2pzL3Rvb2x0aXBzdGVyLmJ1bmRsZS5taW4uanMiLCIuLi8uLi9fZGV2L25vZGVfbW9kdWxlcy9ib290c3RyYXAtdG91Y2hzcGluL2Rpc3QvanF1ZXJ5LmJvb3RzdHJhcC10b3VjaHNwaW4uanMiLCIuLi8uLi9fZGV2L25vZGVfbW9kdWxlcy9qcXVlcnktdG91Y2hzd2lwZS9qcXVlcnkudG91Y2hTd2lwZS5taW4uanMiLCIuLi8uLi9fZGV2L2pzL3NlbGVjdG9ycy5qcyIsIi4uLy4uL19kZXYvanMvdGFicy5qcyIsIi4uLy4uL19kZXYvanMvZWFzeXpvb20uanMiLCIuLi8uLi9fZGV2L2pzL3Jlc3BvbnNpdmUuanMiLCIuLi8uLi9fZGV2L2pzL2NoZWNrb3V0LmpzIiwiLi4vLi4vX2Rldi9qcy9jdXN0b21lci5qcyIsIi4uLy4uL19kZXYvbm9kZV9tb2R1bGVzL3ZlbG9jaXR5LWFuaW1hdGUvdmVsb2NpdHkuanMiLCIuLi8uLi9fZGV2L2pzL2NvbXBvbmVudHMvdXBkYXRlLXNvdXJjZXMuanMiLCIuLi8uLi9fZGV2L2pzL2NvbXBvbmVudHMvcHJvZHVjdC1taW5pYXR1cmUuanMiLCIuLi8uLi9fZGV2L2pzL2xpc3RpbmcuanMiLCIuLi8uLi9fZGV2L2pzL2NvbXBvbmVudHMvcHJvZHVjdC1zZWxlY3QuanMiLCIuLi8uLi9fZGV2L2pzL3Byb2R1Y3QuanMiLCIuLi8uLi9fZGV2L2pzL2NvbXBvbmVudHMvZGVib3VuY2UuanMiLCIuLi8uLi9fZGV2L2pzL2NhcnQuanMiLCIuLi8uLi9fZGV2L25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIiwiLi4vLi4vX2Rldi9qcy9jb21wb25lbnRzL2Ryb3AtZG93bi5qcyIsIi4uLy4uL19kZXYvanMvY29tcG9uZW50cy9mb3JtLmpzIiwiLi4vLi4vX2Rldi9ub2RlX21vZHVsZXMvc3ByaW50Zi1qcy9zcmMvc3ByaW50Zi5qcyIsIi4uLy4uL19kZXYvanMvY29tcG9uZW50cy91c2VQYXNzd29yZFBvbGljeS5qcyIsIi4uLy4uL19kZXYvanMvY29tcG9uZW50cy90b3AtbWVudS5qcyIsIi4uLy4uL19kZXYvbm9kZV9tb2R1bGVzL2pxdWVyeS10b2FzdC1wbHVnaW4vZGlzdC9qcXVlcnkudG9hc3QubWluLmpzIiwiLi4vLi4vX2Rldi9qcy9jb21wb25lbnRzL2Jsb2NrLWNhcnQuanMiLCIuLi8uLi9fZGV2L25vZGVfbW9kdWxlcy9qcXVlcnktb2ZmY2FudmFzL2Rpc3QvanF1ZXJ5Lm9mZmNhbnZhcy5taW4uanMiLCIuLi8uLi9fZGV2L2pzL3RoZW1lLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgQSBzaW1wbGUgalF1ZXJ5IG1vZGFsIChodHRwOi8vZ2l0aHViLmNvbS9reWxlZm94L2pxdWVyeS1tb2RhbClcbiAgICBWZXJzaW9uIDAuOS4yXG4qL1xuXG4oZnVuY3Rpb24gKGZhY3RvcnkpIHtcbiAgLy8gTWFraW5nIHlvdXIgalF1ZXJ5IHBsdWdpbiB3b3JrIGJldHRlciB3aXRoIG5wbSB0b29sc1xuICAvLyBodHRwOi8vYmxvZy5ucG1qcy5vcmcvcG9zdC8xMTI3MTIxNjk4MzAvbWFraW5nLXlvdXItanF1ZXJ5LXBsdWdpbi13b3JrLWJldHRlci13aXRoLW5wbVxuICBpZih0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuICAgIGZhY3RvcnkocmVxdWlyZShcImpxdWVyeVwiKSwgd2luZG93LCBkb2N1bWVudCk7XG4gIH1cbiAgZWxzZSB7XG4gICAgZmFjdG9yeShqUXVlcnksIHdpbmRvdywgZG9jdW1lbnQpO1xuICB9XG59KGZ1bmN0aW9uKCQsIHdpbmRvdywgZG9jdW1lbnQsIHVuZGVmaW5lZCkge1xuXG4gIHZhciBtb2RhbHMgPSBbXSxcbiAgICAgIGdldEN1cnJlbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG1vZGFscy5sZW5ndGggPyBtb2RhbHNbbW9kYWxzLmxlbmd0aCAtIDFdIDogbnVsbDtcbiAgICAgIH0sXG4gICAgICBzZWxlY3RDdXJyZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChpPW1vZGFscy5sZW5ndGgtMTsgaT49MDsgaS0tKSB7XG4gICAgICAgICAgaWYgKG1vZGFsc1tpXS4kYmxvY2tlcikge1xuICAgICAgICAgICAgbW9kYWxzW2ldLiRibG9ja2VyLnRvZ2dsZUNsYXNzKCdjdXJyZW50Jywhc2VsZWN0ZWQpLnRvZ2dsZUNsYXNzKCdiZWhpbmQnLHNlbGVjdGVkKTtcbiAgICAgICAgICAgIHNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgJC5tb2RhbCA9IGZ1bmN0aW9uKGVsLCBvcHRpb25zKSB7XG4gICAgdmFyIHJlbW92ZSwgdGFyZ2V0O1xuICAgIHRoaXMuJGJvZHkgPSAkKCdib2R5Jyk7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sICQubW9kYWwuZGVmYXVsdHMsIG9wdGlvbnMpO1xuICAgIHRoaXMub3B0aW9ucy5kb0ZhZGUgPSAhaXNOYU4ocGFyc2VJbnQodGhpcy5vcHRpb25zLmZhZGVEdXJhdGlvbiwgMTApKTtcbiAgICB0aGlzLiRibG9ja2VyID0gbnVsbDtcbiAgICBpZiAodGhpcy5vcHRpb25zLmNsb3NlRXhpc3RpbmcpXG4gICAgICB3aGlsZSAoJC5tb2RhbC5pc0FjdGl2ZSgpKVxuICAgICAgICAkLm1vZGFsLmNsb3NlKCk7IC8vIENsb3NlIGFueSBvcGVuIG1vZGFscy5cbiAgICBtb2RhbHMucHVzaCh0aGlzKTtcbiAgICBpZiAoZWwuaXMoJ2EnKSkge1xuICAgICAgdGFyZ2V0ID0gZWwuYXR0cignaHJlZicpO1xuICAgICAgdGhpcy5hbmNob3IgPSBlbDtcbiAgICAgIC8vU2VsZWN0IGVsZW1lbnQgYnkgaWQgZnJvbSBocmVmXG4gICAgICBpZiAoL14jLy50ZXN0KHRhcmdldCkpIHtcbiAgICAgICAgdGhpcy4kZWxtID0gJCh0YXJnZXQpO1xuICAgICAgICBpZiAodGhpcy4kZWxtLmxlbmd0aCAhPT0gMSkgcmV0dXJuIG51bGw7XG4gICAgICAgIHRoaXMuJGJvZHkuYXBwZW5kKHRoaXMuJGVsbSk7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgLy9BSkFYXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiRlbG0gPSAkKCc8ZGl2PicpO1xuICAgICAgICB0aGlzLiRib2R5LmFwcGVuZCh0aGlzLiRlbG0pO1xuICAgICAgICByZW1vdmUgPSBmdW5jdGlvbihldmVudCwgbW9kYWwpIHsgbW9kYWwuZWxtLnJlbW92ZSgpOyB9O1xuICAgICAgICB0aGlzLnNob3dTcGlubmVyKCk7XG4gICAgICAgIGVsLnRyaWdnZXIoJC5tb2RhbC5BSkFYX1NFTkQpO1xuICAgICAgICAkLmdldCh0YXJnZXQpLmRvbmUoZnVuY3Rpb24oaHRtbCkge1xuICAgICAgICAgIGlmICghJC5tb2RhbC5pc0FjdGl2ZSgpKSByZXR1cm47XG4gICAgICAgICAgZWwudHJpZ2dlcigkLm1vZGFsLkFKQVhfU1VDQ0VTUyk7XG4gICAgICAgICAgdmFyIGN1cnJlbnQgPSBnZXRDdXJyZW50KCk7XG4gICAgICAgICAgY3VycmVudC4kZWxtLmVtcHR5KCkuYXBwZW5kKGh0bWwpLm9uKCQubW9kYWwuQ0xPU0UsIHJlbW92ZSk7XG4gICAgICAgICAgY3VycmVudC5oaWRlU3Bpbm5lcigpO1xuICAgICAgICAgIGN1cnJlbnQub3BlbigpO1xuICAgICAgICAgIGVsLnRyaWdnZXIoJC5tb2RhbC5BSkFYX0NPTVBMRVRFKTtcbiAgICAgICAgfSkuZmFpbChmdW5jdGlvbigpIHtcbiAgICAgICAgICBlbC50cmlnZ2VyKCQubW9kYWwuQUpBWF9GQUlMKTtcbiAgICAgICAgICB2YXIgY3VycmVudCA9IGdldEN1cnJlbnQoKTtcbiAgICAgICAgICBjdXJyZW50LmhpZGVTcGlubmVyKCk7XG4gICAgICAgICAgbW9kYWxzLnBvcCgpOyAvLyByZW1vdmUgZXhwZWN0ZWQgbW9kYWwgZnJvbSB0aGUgbGlzdFxuICAgICAgICAgIGVsLnRyaWdnZXIoJC5tb2RhbC5BSkFYX0NPTVBMRVRFKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuJGVsbSA9IGVsO1xuICAgICAgdGhpcy5hbmNob3IgPSBlbDtcbiAgICAgIHRoaXMuJGJvZHkuYXBwZW5kKHRoaXMuJGVsbSk7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9XG4gIH07XG5cbiAgJC5tb2RhbC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6ICQubW9kYWwsXG5cbiAgICBvcGVuOiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBtID0gdGhpcztcbiAgICAgIHRoaXMuYmxvY2soKTtcbiAgICAgIHRoaXMuYW5jaG9yLmJsdXIoKTtcbiAgICAgIGlmKHRoaXMub3B0aW9ucy5kb0ZhZGUpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICBtLnNob3coKTtcbiAgICAgICAgfSwgdGhpcy5vcHRpb25zLmZhZGVEdXJhdGlvbiAqIHRoaXMub3B0aW9ucy5mYWRlRGVsYXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICB9XG4gICAgICAkKGRvY3VtZW50KS5vZmYoJ2tleWRvd24ubW9kYWwnKS5vbigna2V5ZG93bi5tb2RhbCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgIHZhciBjdXJyZW50ID0gZ2V0Q3VycmVudCgpO1xuICAgICAgICBpZiAoZXZlbnQud2hpY2ggPT09IDI3ICYmIGN1cnJlbnQub3B0aW9ucy5lc2NhcGVDbG9zZSkgY3VycmVudC5jbG9zZSgpO1xuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNsaWNrQ2xvc2UpXG4gICAgICAgIHRoaXMuJGJsb2NrZXIuY2xpY2soZnVuY3Rpb24oZSkge1xuICAgICAgICAgIGlmIChlLnRhcmdldCA9PT0gdGhpcylcbiAgICAgICAgICAgICQubW9kYWwuY2xvc2UoKTtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGNsb3NlOiBmdW5jdGlvbigpIHtcbiAgICAgIG1vZGFscy5wb3AoKTtcbiAgICAgIHRoaXMudW5ibG9jaygpO1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICBpZiAoISQubW9kYWwuaXNBY3RpdmUoKSlcbiAgICAgICAgJChkb2N1bWVudCkub2ZmKCdrZXlkb3duLm1vZGFsJyk7XG4gICAgfSxcblxuICAgIGJsb2NrOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuJGVsbS50cmlnZ2VyKCQubW9kYWwuQkVGT1JFX0JMT0NLLCBbdGhpcy5fY3R4KCldKTtcbiAgICAgIHRoaXMuJGJvZHkuY3NzKCdvdmVyZmxvdycsJ2hpZGRlbicpO1xuICAgICAgdGhpcy4kYmxvY2tlciA9ICQoJzxkaXYgY2xhc3M9XCInICsgdGhpcy5vcHRpb25zLmJsb2NrZXJDbGFzcyArICcgYmxvY2tlciBjdXJyZW50XCI+PC9kaXY+JykuYXBwZW5kVG8odGhpcy4kYm9keSk7XG4gICAgICBzZWxlY3RDdXJyZW50KCk7XG4gICAgICBpZih0aGlzLm9wdGlvbnMuZG9GYWRlKSB7XG4gICAgICAgIHRoaXMuJGJsb2NrZXIuY3NzKCdvcGFjaXR5JywwKS5hbmltYXRlKHtvcGFjaXR5OiAxfSwgdGhpcy5vcHRpb25zLmZhZGVEdXJhdGlvbik7XG4gICAgICB9XG4gICAgICB0aGlzLiRlbG0udHJpZ2dlcigkLm1vZGFsLkJMT0NLLCBbdGhpcy5fY3R4KCldKTtcbiAgICB9LFxuXG4gICAgdW5ibG9jazogZnVuY3Rpb24obm93KSB7XG4gICAgICBpZiAoIW5vdyAmJiB0aGlzLm9wdGlvbnMuZG9GYWRlKVxuICAgICAgICB0aGlzLiRibG9ja2VyLmZhZGVPdXQodGhpcy5vcHRpb25zLmZhZGVEdXJhdGlvbiwgdGhpcy51bmJsb2NrLmJpbmQodGhpcyx0cnVlKSk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy4kYmxvY2tlci5jaGlsZHJlbigpLmFwcGVuZFRvKHRoaXMuJGJvZHkpO1xuICAgICAgICB0aGlzLiRibG9ja2VyLnJlbW92ZSgpO1xuICAgICAgICB0aGlzLiRibG9ja2VyID0gbnVsbDtcbiAgICAgICAgc2VsZWN0Q3VycmVudCgpO1xuICAgICAgICBpZiAoISQubW9kYWwuaXNBY3RpdmUoKSlcbiAgICAgICAgICB0aGlzLiRib2R5LmNzcygnb3ZlcmZsb3cnLCcnKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdzogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLiRlbG0udHJpZ2dlcigkLm1vZGFsLkJFRk9SRV9PUEVOLCBbdGhpcy5fY3R4KCldKTtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0Nsb3NlKSB7XG4gICAgICAgIHRoaXMuY2xvc2VCdXR0b24gPSAkKCc8YSBocmVmPVwiI2Nsb3NlLW1vZGFsXCIgcmVsPVwibW9kYWw6Y2xvc2VcIiBjbGFzcz1cImNsb3NlLW1vZGFsICcgKyB0aGlzLm9wdGlvbnMuY2xvc2VDbGFzcyArICdcIj4nICsgdGhpcy5vcHRpb25zLmNsb3NlVGV4dCArICc8L2E+Jyk7XG4gICAgICAgIHRoaXMuJGVsbS5hcHBlbmQodGhpcy5jbG9zZUJ1dHRvbik7XG4gICAgICB9XG4gICAgICB0aGlzLiRlbG0uYWRkQ2xhc3ModGhpcy5vcHRpb25zLm1vZGFsQ2xhc3MpLmFwcGVuZFRvKHRoaXMuJGJsb2NrZXIpO1xuICAgICAgaWYodGhpcy5vcHRpb25zLmRvRmFkZSkge1xuICAgICAgICB0aGlzLiRlbG0uY3NzKHtvcGFjaXR5OiAwLCBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJ30pLmFuaW1hdGUoe29wYWNpdHk6IDF9LCB0aGlzLm9wdGlvbnMuZmFkZUR1cmF0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJGVsbS5jc3MoJ2Rpc3BsYXknLCAnaW5saW5lLWJsb2NrJyk7XG4gICAgICB9XG4gICAgICB0aGlzLiRlbG0udHJpZ2dlcigkLm1vZGFsLk9QRU4sIFt0aGlzLl9jdHgoKV0pO1xuICAgIH0sXG5cbiAgICBoaWRlOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuJGVsbS50cmlnZ2VyKCQubW9kYWwuQkVGT1JFX0NMT1NFLCBbdGhpcy5fY3R4KCldKTtcbiAgICAgIGlmICh0aGlzLmNsb3NlQnV0dG9uKSB0aGlzLmNsb3NlQnV0dG9uLnJlbW92ZSgpO1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgIGlmKHRoaXMub3B0aW9ucy5kb0ZhZGUpIHtcbiAgICAgICAgdGhpcy4kZWxtLmZhZGVPdXQodGhpcy5vcHRpb25zLmZhZGVEdXJhdGlvbiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzLiRlbG0udHJpZ2dlcigkLm1vZGFsLkFGVEVSX0NMT1NFLCBbX3RoaXMuX2N0eCgpXSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4kZWxtLmhpZGUoMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzLiRlbG0udHJpZ2dlcigkLm1vZGFsLkFGVEVSX0NMT1NFLCBbX3RoaXMuX2N0eCgpXSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy4kZWxtLnRyaWdnZXIoJC5tb2RhbC5DTE9TRSwgW3RoaXMuX2N0eCgpXSk7XG4gICAgfSxcblxuICAgIHNob3dTcGlubmVyOiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICghdGhpcy5vcHRpb25zLnNob3dTcGlubmVyKSByZXR1cm47XG4gICAgICB0aGlzLnNwaW5uZXIgPSB0aGlzLnNwaW5uZXIgfHwgJCgnPGRpdiBjbGFzcz1cIicgKyB0aGlzLm9wdGlvbnMubW9kYWxDbGFzcyArICctc3Bpbm5lclwiPjwvZGl2PicpXG4gICAgICAgIC5hcHBlbmQodGhpcy5vcHRpb25zLnNwaW5uZXJIdG1sKTtcbiAgICAgIHRoaXMuJGJvZHkuYXBwZW5kKHRoaXMuc3Bpbm5lcik7XG4gICAgICB0aGlzLnNwaW5uZXIuc2hvdygpO1xuICAgIH0sXG5cbiAgICBoaWRlU3Bpbm5lcjogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5zcGlubmVyKSB0aGlzLnNwaW5uZXIucmVtb3ZlKCk7XG4gICAgfSxcblxuICAgIC8vUmV0dXJuIGNvbnRleHQgZm9yIGN1c3RvbSBldmVudHNcbiAgICBfY3R4OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7IGVsbTogdGhpcy4kZWxtLCAkZWxtOiB0aGlzLiRlbG0sICRibG9ja2VyOiB0aGlzLiRibG9ja2VyLCBvcHRpb25zOiB0aGlzLm9wdGlvbnMsICRhbmNob3I6IHRoaXMuYW5jaG9yIH07XG4gICAgfVxuICB9O1xuXG4gICQubW9kYWwuY2xvc2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgIGlmICghJC5tb2RhbC5pc0FjdGl2ZSgpKSByZXR1cm47XG4gICAgaWYgKGV2ZW50KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHZhciBjdXJyZW50ID0gZ2V0Q3VycmVudCgpO1xuICAgIGN1cnJlbnQuY2xvc2UoKTtcbiAgICByZXR1cm4gY3VycmVudC4kZWxtO1xuICB9O1xuXG4gIC8vIFJldHVybnMgaWYgdGhlcmUgY3VycmVudGx5IGlzIGFuIGFjdGl2ZSBtb2RhbFxuICAkLm1vZGFsLmlzQWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBtb2RhbHMubGVuZ3RoID4gMDtcbiAgfTtcblxuICAkLm1vZGFsLmdldEN1cnJlbnQgPSBnZXRDdXJyZW50O1xuXG4gICQubW9kYWwuZGVmYXVsdHMgPSB7XG4gICAgY2xvc2VFeGlzdGluZzogdHJ1ZSxcbiAgICBlc2NhcGVDbG9zZTogdHJ1ZSxcbiAgICBjbGlja0Nsb3NlOiB0cnVlLFxuICAgIGNsb3NlVGV4dDogJ0Nsb3NlJyxcbiAgICBjbG9zZUNsYXNzOiAnJyxcbiAgICBtb2RhbENsYXNzOiBcIm1vZGFsXCIsXG4gICAgYmxvY2tlckNsYXNzOiBcImpxdWVyeS1tb2RhbFwiLFxuICAgIHNwaW5uZXJIdG1sOiAnPGRpdiBjbGFzcz1cInJlY3QxXCI+PC9kaXY+PGRpdiBjbGFzcz1cInJlY3QyXCI+PC9kaXY+PGRpdiBjbGFzcz1cInJlY3QzXCI+PC9kaXY+PGRpdiBjbGFzcz1cInJlY3Q0XCI+PC9kaXY+JyxcbiAgICBzaG93U3Bpbm5lcjogdHJ1ZSxcbiAgICBzaG93Q2xvc2U6IHRydWUsXG4gICAgZmFkZUR1cmF0aW9uOiBudWxsLCAgIC8vIE51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhlIGZhZGUgYW5pbWF0aW9uIHRha2VzLlxuICAgIGZhZGVEZWxheTogMS4wICAgICAgICAvLyBQb2ludCBkdXJpbmcgdGhlIG92ZXJsYXkncyBmYWRlLWluIHRoYXQgdGhlIG1vZGFsIGJlZ2lucyB0byBmYWRlIGluICguNSA9IDUwJSwgMS41ID0gMTUwJSwgZXRjLilcbiAgfTtcblxuICAvLyBFdmVudCBjb25zdGFudHNcbiAgJC5tb2RhbC5CRUZPUkVfQkxPQ0sgPSAnbW9kYWw6YmVmb3JlLWJsb2NrJztcbiAgJC5tb2RhbC5CTE9DSyA9ICdtb2RhbDpibG9jayc7XG4gICQubW9kYWwuQkVGT1JFX09QRU4gPSAnbW9kYWw6YmVmb3JlLW9wZW4nO1xuICAkLm1vZGFsLk9QRU4gPSAnbW9kYWw6b3Blbic7XG4gICQubW9kYWwuQkVGT1JFX0NMT1NFID0gJ21vZGFsOmJlZm9yZS1jbG9zZSc7XG4gICQubW9kYWwuQ0xPU0UgPSAnbW9kYWw6Y2xvc2UnO1xuICAkLm1vZGFsLkFGVEVSX0NMT1NFID0gJ21vZGFsOmFmdGVyLWNsb3NlJztcbiAgJC5tb2RhbC5BSkFYX1NFTkQgPSAnbW9kYWw6YWpheDpzZW5kJztcbiAgJC5tb2RhbC5BSkFYX1NVQ0NFU1MgPSAnbW9kYWw6YWpheDpzdWNjZXNzJztcbiAgJC5tb2RhbC5BSkFYX0ZBSUwgPSAnbW9kYWw6YWpheDpmYWlsJztcbiAgJC5tb2RhbC5BSkFYX0NPTVBMRVRFID0gJ21vZGFsOmFqYXg6Y29tcGxldGUnO1xuXG4gICQuZm4ubW9kYWwgPSBmdW5jdGlvbihvcHRpb25zKXtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIG5ldyAkLm1vZGFsKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvLyBBdXRvbWF0aWNhbGx5IGJpbmQgbGlua3Mgd2l0aCByZWw9XCJtb2RhbDpjbG9zZVwiIHRvLCB3ZWxsLCBjbG9zZSB0aGUgbW9kYWwuXG4gICQoZG9jdW1lbnQpLm9uKCdjbGljay5tb2RhbCcsICdhW3JlbH49XCJtb2RhbDpjbG9zZVwiXScsICQubW9kYWwuY2xvc2UpO1xuICAkKGRvY3VtZW50KS5vbignY2xpY2subW9kYWwnLCAnYVtyZWx+PVwibW9kYWw6b3BlblwiXScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAkKHRoaXMpLm1vZGFsKCk7XG4gIH0pO1xufSkpO1xuIiwiLyohIHRvb2x0aXBzdGVyIHY0LjIuOCAqLyFmdW5jdGlvbihhLGIpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wianF1ZXJ5XCJdLGZ1bmN0aW9uKGEpe3JldHVybiBiKGEpfSk6XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9YihyZXF1aXJlKFwianF1ZXJ5XCIpKTpiKGpRdWVyeSl9KHRoaXMsZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhKXt0aGlzLiRjb250YWluZXIsdGhpcy5jb25zdHJhaW50cz1udWxsLHRoaXMuX18kdG9vbHRpcCx0aGlzLl9faW5pdChhKX1mdW5jdGlvbiBjKGIsYyl7dmFyIGQ9ITA7cmV0dXJuIGEuZWFjaChiLGZ1bmN0aW9uKGEsZSl7cmV0dXJuIHZvaWQgMD09PWNbYV18fGJbYV0hPT1jW2FdPyhkPSExLCExKTp2b2lkIDB9KSxkfWZ1bmN0aW9uIGQoYil7dmFyIGM9Yi5hdHRyKFwiaWRcIiksZD1jP2gud2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGMpOm51bGw7cmV0dXJuIGQ/ZD09PWJbMF06YS5jb250YWlucyhoLndpbmRvdy5kb2N1bWVudC5ib2R5LGJbMF0pfWZ1bmN0aW9uIGUoKXtpZighZylyZXR1cm4hMTt2YXIgYT1nLmRvY3VtZW50LmJvZHl8fGcuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGI9YS5zdHlsZSxjPVwidHJhbnNpdGlvblwiLGQ9W1wiTW96XCIsXCJXZWJraXRcIixcIktodG1sXCIsXCJPXCIsXCJtc1wiXTtpZihcInN0cmluZ1wiPT10eXBlb2YgYltjXSlyZXR1cm4hMDtjPWMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYy5zdWJzdHIoMSk7Zm9yKHZhciBlPTA7ZTxkLmxlbmd0aDtlKyspaWYoXCJzdHJpbmdcIj09dHlwZW9mIGJbZFtlXStjXSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgZj17YW5pbWF0aW9uOlwiZmFkZVwiLGFuaW1hdGlvbkR1cmF0aW9uOjM1MCxjb250ZW50Om51bGwsY29udGVudEFzSFRNTDohMSxjb250ZW50Q2xvbmluZzohMSxkZWJ1ZzohMCxkZWxheTozMDAsZGVsYXlUb3VjaDpbMzAwLDUwMF0sZnVuY3Rpb25Jbml0Om51bGwsZnVuY3Rpb25CZWZvcmU6bnVsbCxmdW5jdGlvblJlYWR5Om51bGwsZnVuY3Rpb25BZnRlcjpudWxsLGZ1bmN0aW9uRm9ybWF0Om51bGwsSUVtaW46NixpbnRlcmFjdGl2ZTohMSxtdWx0aXBsZTohMSxwYXJlbnQ6bnVsbCxwbHVnaW5zOltcInNpZGVUaXBcIl0scmVwb3NpdGlvbk9uU2Nyb2xsOiExLHJlc3RvcmF0aW9uOlwibm9uZVwiLHNlbGZEZXN0cnVjdGlvbjohMCx0aGVtZTpbXSx0aW1lcjowLHRyYWNrZXJJbnRlcnZhbDo1MDAsdHJhY2tPcmlnaW46ITEsdHJhY2tUb29sdGlwOiExLHRyaWdnZXI6XCJob3ZlclwiLHRyaWdnZXJDbG9zZTp7Y2xpY2s6ITEsbW91c2VsZWF2ZTohMSxvcmlnaW5DbGljazohMSxzY3JvbGw6ITEsdGFwOiExLHRvdWNobGVhdmU6ITF9LHRyaWdnZXJPcGVuOntjbGljazohMSxtb3VzZWVudGVyOiExLHRhcDohMSx0b3VjaHN0YXJ0OiExfSx1cGRhdGVBbmltYXRpb246XCJyb3RhdGVcIix6SW5kZXg6OTk5OTk5OX0sZz1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpudWxsLGg9e2hhc1RvdWNoQ2FwYWJpbGl0eTohKCFnfHwhKFwib250b3VjaHN0YXJ0XCJpbiBnfHxnLkRvY3VtZW50VG91Y2gmJmcuZG9jdW1lbnQgaW5zdGFuY2VvZiBnLkRvY3VtZW50VG91Y2h8fGcubmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzKSksaGFzVHJhbnNpdGlvbnM6ZSgpLElFOiExLHNlbVZlcjpcIjQuMi44XCIsd2luZG93Omd9LGk9ZnVuY3Rpb24oKXt0aGlzLl9fJGVtaXR0ZXJQcml2YXRlPWEoe30pLHRoaXMuX18kZW1pdHRlclB1YmxpYz1hKHt9KSx0aGlzLl9faW5zdGFuY2VzTGF0ZXN0QXJyPVtdLHRoaXMuX19wbHVnaW5zPXt9LHRoaXMuX2Vudj1ofTtpLnByb3RvdHlwZT17X19icmlkZ2U6ZnVuY3Rpb24oYixjLGQpe2lmKCFjW2RdKXt2YXIgZT1mdW5jdGlvbigpe307ZS5wcm90b3R5cGU9Yjt2YXIgZz1uZXcgZTtnLl9faW5pdCYmZy5fX2luaXQoYyksYS5lYWNoKGIsZnVuY3Rpb24oYSxiKXswIT1hLmluZGV4T2YoXCJfX1wiKSYmKGNbYV0/Zi5kZWJ1ZyYmY29uc29sZS5sb2coXCJUaGUgXCIrYStcIiBtZXRob2Qgb2YgdGhlIFwiK2QrXCIgcGx1Z2luIGNvbmZsaWN0cyB3aXRoIGFub3RoZXIgcGx1Z2luIG9yIG5hdGl2ZSBtZXRob2RzXCIpOihjW2FdPWZ1bmN0aW9uKCl7cmV0dXJuIGdbYV0uYXBwbHkoZyxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSl9LGNbYV0uYnJpZGdlZD1nKSl9KSxjW2RdPWd9cmV0dXJuIHRoaXN9LF9fc2V0V2luZG93OmZ1bmN0aW9uKGEpe3JldHVybiBoLndpbmRvdz1hLHRoaXN9LF9nZXRSdWxlcjpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IGIoYSl9LF9vZmY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fXyRlbWl0dGVyUHJpdmF0ZS5vZmYuYXBwbHkodGhpcy5fXyRlbWl0dGVyUHJpdmF0ZSxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSksdGhpc30sX29uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX18kZW1pdHRlclByaXZhdGUub24uYXBwbHkodGhpcy5fXyRlbWl0dGVyUHJpdmF0ZSxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSksdGhpc30sX29uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fJGVtaXR0ZXJQcml2YXRlLm9uZS5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQcml2YXRlLEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpKSx0aGlzfSxfcGx1Z2luOmZ1bmN0aW9uKGIpe3ZhciBjPXRoaXM7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGIpe3ZhciBkPWIsZT1udWxsO3JldHVybiBkLmluZGV4T2YoXCIuXCIpPjA/ZT1jLl9fcGx1Z2luc1tkXTphLmVhY2goYy5fX3BsdWdpbnMsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi5uYW1lLnN1YnN0cmluZyhiLm5hbWUubGVuZ3RoLWQubGVuZ3RoLTEpPT1cIi5cIitkPyhlPWIsITEpOnZvaWQgMH0pLGV9aWYoYi5uYW1lLmluZGV4T2YoXCIuXCIpPDApdGhyb3cgbmV3IEVycm9yKFwiUGx1Z2lucyBtdXN0IGJlIG5hbWVzcGFjZWRcIik7cmV0dXJuIGMuX19wbHVnaW5zW2IubmFtZV09YixiLmNvcmUmJmMuX19icmlkZ2UoYi5jb3JlLGMsYi5uYW1lKSx0aGlzfSxfdHJpZ2dlcjpmdW5jdGlvbigpe3ZhciBhPUFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhWzBdJiYoYVswXT17dHlwZTphWzBdfSksdGhpcy5fXyRlbWl0dGVyUHJpdmF0ZS50cmlnZ2VyLmFwcGx5KHRoaXMuX18kZW1pdHRlclByaXZhdGUsYSksdGhpcy5fXyRlbWl0dGVyUHVibGljLnRyaWdnZXIuYXBwbHkodGhpcy5fXyRlbWl0dGVyUHVibGljLGEpLHRoaXN9LGluc3RhbmNlczpmdW5jdGlvbihiKXt2YXIgYz1bXSxkPWJ8fFwiLnRvb2x0aXBzdGVyZWRcIjtyZXR1cm4gYShkKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9YSh0aGlzKSxkPWIuZGF0YShcInRvb2x0aXBzdGVyLW5zXCIpO2QmJmEuZWFjaChkLGZ1bmN0aW9uKGEsZCl7Yy5wdXNoKGIuZGF0YShkKSl9KX0pLGN9LGluc3RhbmNlc0xhdGVzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faW5zdGFuY2VzTGF0ZXN0QXJyfSxvZmY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fXyRlbWl0dGVyUHVibGljLm9mZi5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQdWJsaWMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cykpLHRoaXN9LG9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX18kZW1pdHRlclB1YmxpYy5vbi5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQdWJsaWMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cykpLHRoaXN9LG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fJGVtaXR0ZXJQdWJsaWMub25lLmFwcGx5KHRoaXMuX18kZW1pdHRlclB1YmxpYyxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSksdGhpc30sb3JpZ2luczpmdW5jdGlvbihiKXt2YXIgYz1iP2IrXCIgXCI6XCJcIjtyZXR1cm4gYShjK1wiLnRvb2x0aXBzdGVyZWRcIikudG9BcnJheSgpfSxzZXREZWZhdWx0czpmdW5jdGlvbihiKXtyZXR1cm4gYS5leHRlbmQoZixiKSx0aGlzfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fJGVtaXR0ZXJQdWJsaWMudHJpZ2dlckhhbmRsZXIuYXBwbHkodGhpcy5fXyRlbWl0dGVyUHVibGljLEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpKSx0aGlzfX0sYS50b29sdGlwc3Rlcj1uZXcgaSxhLlRvb2x0aXBzdGVyPWZ1bmN0aW9uKGIsYyl7dGhpcy5fX2NhbGxiYWNrcz17Y2xvc2U6W10sb3BlbjpbXX0sdGhpcy5fX2Nsb3NpbmdUaW1lLHRoaXMuX19Db250ZW50LHRoaXMuX19jb250ZW50QmNyLHRoaXMuX19kZXN0cm95ZWQ9ITEsdGhpcy5fXyRlbWl0dGVyUHJpdmF0ZT1hKHt9KSx0aGlzLl9fJGVtaXR0ZXJQdWJsaWM9YSh7fSksdGhpcy5fX2VuYWJsZWQ9ITAsdGhpcy5fX2dhcmJhZ2VDb2xsZWN0b3IsdGhpcy5fX0dlb21ldHJ5LHRoaXMuX19sYXN0UG9zaXRpb24sdGhpcy5fX25hbWVzcGFjZT1cInRvb2x0aXBzdGVyLVwiK01hdGgucm91bmQoMWU2Kk1hdGgucmFuZG9tKCkpLHRoaXMuX19vcHRpb25zLHRoaXMuX18kb3JpZ2luUGFyZW50cyx0aGlzLl9fcG9pbnRlcklzT3Zlck9yaWdpbj0hMSx0aGlzLl9fcHJldmlvdXNUaGVtZXM9W10sdGhpcy5fX3N0YXRlPVwiY2xvc2VkXCIsdGhpcy5fX3RpbWVvdXRzPXtjbG9zZTpbXSxvcGVuOm51bGx9LHRoaXMuX190b3VjaEV2ZW50cz1bXSx0aGlzLl9fdHJhY2tlcj1udWxsLHRoaXMuXyRvcmlnaW4sdGhpcy5fJHRvb2x0aXAsdGhpcy5fX2luaXQoYixjKX0sYS5Ub29sdGlwc3Rlci5wcm90b3R5cGU9e19faW5pdDpmdW5jdGlvbihiLGMpe3ZhciBkPXRoaXM7aWYoZC5fJG9yaWdpbj1hKGIpLGQuX19vcHRpb25zPWEuZXh0ZW5kKCEwLHt9LGYsYyksZC5fX29wdGlvbnNGb3JtYXQoKSwhaC5JRXx8aC5JRT49ZC5fX29wdGlvbnMuSUVtaW4pe3ZhciBlPW51bGw7aWYodm9pZCAwPT09ZC5fJG9yaWdpbi5kYXRhKFwidG9vbHRpcHN0ZXItaW5pdGlhbFRpdGxlXCIpJiYoZT1kLl8kb3JpZ2luLmF0dHIoXCJ0aXRsZVwiKSx2b2lkIDA9PT1lJiYoZT1udWxsKSxkLl8kb3JpZ2luLmRhdGEoXCJ0b29sdGlwc3Rlci1pbml0aWFsVGl0bGVcIixlKSksbnVsbCE9PWQuX19vcHRpb25zLmNvbnRlbnQpZC5fX2NvbnRlbnRTZXQoZC5fX29wdGlvbnMuY29udGVudCk7ZWxzZXt2YXIgZyxpPWQuXyRvcmlnaW4uYXR0cihcImRhdGEtdG9vbHRpcC1jb250ZW50XCIpO2kmJihnPWEoaSkpLGcmJmdbMF0/ZC5fX2NvbnRlbnRTZXQoZy5maXJzdCgpKTpkLl9fY29udGVudFNldChlKX1kLl8kb3JpZ2luLnJlbW92ZUF0dHIoXCJ0aXRsZVwiKS5hZGRDbGFzcyhcInRvb2x0aXBzdGVyZWRcIiksZC5fX3ByZXBhcmVPcmlnaW4oKSxkLl9fcHJlcGFyZUdDKCksYS5lYWNoKGQuX19vcHRpb25zLnBsdWdpbnMsZnVuY3Rpb24oYSxiKXtkLl9wbHVnKGIpfSksaC5oYXNUb3VjaENhcGFiaWxpdHkmJmEoaC53aW5kb3cuZG9jdW1lbnQuYm9keSkub24oXCJ0b3VjaG1vdmUuXCIrZC5fX25hbWVzcGFjZStcIi10cmlnZ2VyT3BlblwiLGZ1bmN0aW9uKGEpe2QuX3RvdWNoUmVjb3JkRXZlbnQoYSl9KSxkLl9vbihcImNyZWF0ZWRcIixmdW5jdGlvbigpe2QuX19wcmVwYXJlVG9vbHRpcCgpfSkuX29uKFwicmVwb3NpdGlvbmVkXCIsZnVuY3Rpb24oYSl7ZC5fX2xhc3RQb3NpdGlvbj1hLnBvc2l0aW9ufSl9ZWxzZSBkLl9fb3B0aW9ucy5kaXNhYmxlZD0hMH0sX19jb250ZW50SW5zZXJ0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEuXyR0b29sdGlwLmZpbmQoXCIudG9vbHRpcHN0ZXItY29udGVudFwiKSxjPWEuX19Db250ZW50LGQ9ZnVuY3Rpb24oYSl7Yz1hfTtyZXR1cm4gYS5fdHJpZ2dlcih7dHlwZTpcImZvcm1hdFwiLGNvbnRlbnQ6YS5fX0NvbnRlbnQsZm9ybWF0OmR9KSxhLl9fb3B0aW9ucy5mdW5jdGlvbkZvcm1hdCYmKGM9YS5fX29wdGlvbnMuZnVuY3Rpb25Gb3JtYXQuY2FsbChhLGEse29yaWdpbjphLl8kb3JpZ2luWzBdfSxhLl9fQ29udGVudCkpLFwic3RyaW5nXCIhPXR5cGVvZiBjfHxhLl9fb3B0aW9ucy5jb250ZW50QXNIVE1MP2IuZW1wdHkoKS5hcHBlbmQoYyk6Yi50ZXh0KGMpLGF9LF9fY29udGVudFNldDpmdW5jdGlvbihiKXtyZXR1cm4gYiBpbnN0YW5jZW9mIGEmJnRoaXMuX19vcHRpb25zLmNvbnRlbnRDbG9uaW5nJiYoYj1iLmNsb25lKCEwKSksdGhpcy5fX0NvbnRlbnQ9Yix0aGlzLl90cmlnZ2VyKHt0eXBlOlwidXBkYXRlZFwiLGNvbnRlbnQ6Yn0pLHRoaXN9LF9fZGVzdHJveUVycm9yOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiVGhpcyB0b29sdGlwIGhhcyBiZWVuIGRlc3Ryb3llZCBhbmQgY2Fubm90IGV4ZWN1dGUgeW91ciBtZXRob2QgY2FsbC5cIil9LF9fZ2VvbWV0cnk6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLGM9Yi5fJG9yaWdpbixkPWIuXyRvcmlnaW4uaXMoXCJhcmVhXCIpO2lmKGQpe3ZhciBlPWIuXyRvcmlnaW4ucGFyZW50KCkuYXR0cihcIm5hbWVcIik7Yz1hKCdpbWdbdXNlbWFwPVwiIycrZSsnXCJdJyl9dmFyIGY9Y1swXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxnPWEoaC53aW5kb3cuZG9jdW1lbnQpLGk9YShoLndpbmRvdyksaj1jLGs9e2F2YWlsYWJsZTp7ZG9jdW1lbnQ6bnVsbCx3aW5kb3c6bnVsbH0sZG9jdW1lbnQ6e3NpemU6e2hlaWdodDpnLmhlaWdodCgpLHdpZHRoOmcud2lkdGgoKX19LHdpbmRvdzp7c2Nyb2xsOntsZWZ0Omgud2luZG93LnNjcm9sbFh8fGgud2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LHRvcDpoLndpbmRvdy5zY3JvbGxZfHxoLndpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wfSxzaXplOntoZWlnaHQ6aS5oZWlnaHQoKSx3aWR0aDppLndpZHRoKCl9fSxvcmlnaW46e2ZpeGVkTGluZWFnZTohMSxvZmZzZXQ6e30sc2l6ZTp7aGVpZ2h0OmYuYm90dG9tLWYudG9wLHdpZHRoOmYucmlnaHQtZi5sZWZ0fSx1c2VtYXBJbWFnZTpkP2NbMF06bnVsbCx3aW5kb3dPZmZzZXQ6e2JvdHRvbTpmLmJvdHRvbSxsZWZ0OmYubGVmdCxyaWdodDpmLnJpZ2h0LHRvcDpmLnRvcH19fTtpZihkKXt2YXIgbD1iLl8kb3JpZ2luLmF0dHIoXCJzaGFwZVwiKSxtPWIuXyRvcmlnaW4uYXR0cihcImNvb3Jkc1wiKTtpZihtJiYobT1tLnNwbGl0KFwiLFwiKSxhLm1hcChtLGZ1bmN0aW9uKGEsYil7bVtiXT1wYXJzZUludChhKX0pKSxcImRlZmF1bHRcIiE9bClzd2l0Y2gobCl7Y2FzZVwiY2lyY2xlXCI6dmFyIG49bVswXSxvPW1bMV0scD1tWzJdLHE9by1wLHI9bi1wO2sub3JpZ2luLnNpemUuaGVpZ2h0PTIqcCxrLm9yaWdpbi5zaXplLndpZHRoPWsub3JpZ2luLnNpemUuaGVpZ2h0LGsub3JpZ2luLndpbmRvd09mZnNldC5sZWZ0Kz1yLGsub3JpZ2luLndpbmRvd09mZnNldC50b3ArPXE7YnJlYWs7Y2FzZVwicmVjdFwiOnZhciBzPW1bMF0sdD1tWzFdLHU9bVsyXSx2PW1bM107ay5vcmlnaW4uc2l6ZS5oZWlnaHQ9di10LGsub3JpZ2luLnNpemUud2lkdGg9dS1zLGsub3JpZ2luLndpbmRvd09mZnNldC5sZWZ0Kz1zLGsub3JpZ2luLndpbmRvd09mZnNldC50b3ArPXQ7YnJlYWs7Y2FzZVwicG9seVwiOmZvcih2YXIgdz0wLHg9MCx5PTAsej0wLEE9XCJldmVuXCIsQj0wO0I8bS5sZW5ndGg7QisrKXt2YXIgQz1tW0JdO1wiZXZlblwiPT1BPyhDPnkmJih5PUMsMD09PUImJih3PXkpKSx3PkMmJih3PUMpLEE9XCJvZGRcIik6KEM+eiYmKHo9QywxPT1CJiYoeD16KSkseD5DJiYoeD1DKSxBPVwiZXZlblwiKX1rLm9yaWdpbi5zaXplLmhlaWdodD16LXgsay5vcmlnaW4uc2l6ZS53aWR0aD15LXcsay5vcmlnaW4ud2luZG93T2Zmc2V0LmxlZnQrPXcsay5vcmlnaW4ud2luZG93T2Zmc2V0LnRvcCs9eH19dmFyIEQ9ZnVuY3Rpb24oYSl7ay5vcmlnaW4uc2l6ZS5oZWlnaHQ9YS5oZWlnaHQsay5vcmlnaW4ud2luZG93T2Zmc2V0LmxlZnQ9YS5sZWZ0LGsub3JpZ2luLndpbmRvd09mZnNldC50b3A9YS50b3Asay5vcmlnaW4uc2l6ZS53aWR0aD1hLndpZHRofTtmb3IoYi5fdHJpZ2dlcih7dHlwZTpcImdlb21ldHJ5XCIsZWRpdDpELGdlb21ldHJ5OntoZWlnaHQ6ay5vcmlnaW4uc2l6ZS5oZWlnaHQsbGVmdDprLm9yaWdpbi53aW5kb3dPZmZzZXQubGVmdCx0b3A6ay5vcmlnaW4ud2luZG93T2Zmc2V0LnRvcCx3aWR0aDprLm9yaWdpbi5zaXplLndpZHRofX0pLGsub3JpZ2luLndpbmRvd09mZnNldC5yaWdodD1rLm9yaWdpbi53aW5kb3dPZmZzZXQubGVmdCtrLm9yaWdpbi5zaXplLndpZHRoLGsub3JpZ2luLndpbmRvd09mZnNldC5ib3R0b209ay5vcmlnaW4ud2luZG93T2Zmc2V0LnRvcCtrLm9yaWdpbi5zaXplLmhlaWdodCxrLm9yaWdpbi5vZmZzZXQubGVmdD1rLm9yaWdpbi53aW5kb3dPZmZzZXQubGVmdCtrLndpbmRvdy5zY3JvbGwubGVmdCxrLm9yaWdpbi5vZmZzZXQudG9wPWsub3JpZ2luLndpbmRvd09mZnNldC50b3Aray53aW5kb3cuc2Nyb2xsLnRvcCxrLm9yaWdpbi5vZmZzZXQuYm90dG9tPWsub3JpZ2luLm9mZnNldC50b3Aray5vcmlnaW4uc2l6ZS5oZWlnaHQsay5vcmlnaW4ub2Zmc2V0LnJpZ2h0PWsub3JpZ2luLm9mZnNldC5sZWZ0K2sub3JpZ2luLnNpemUud2lkdGgsay5hdmFpbGFibGUuZG9jdW1lbnQ9e2JvdHRvbTp7aGVpZ2h0OmsuZG9jdW1lbnQuc2l6ZS5oZWlnaHQtay5vcmlnaW4ub2Zmc2V0LmJvdHRvbSx3aWR0aDprLmRvY3VtZW50LnNpemUud2lkdGh9LGxlZnQ6e2hlaWdodDprLmRvY3VtZW50LnNpemUuaGVpZ2h0LHdpZHRoOmsub3JpZ2luLm9mZnNldC5sZWZ0fSxyaWdodDp7aGVpZ2h0OmsuZG9jdW1lbnQuc2l6ZS5oZWlnaHQsd2lkdGg6ay5kb2N1bWVudC5zaXplLndpZHRoLWsub3JpZ2luLm9mZnNldC5yaWdodH0sdG9wOntoZWlnaHQ6ay5vcmlnaW4ub2Zmc2V0LnRvcCx3aWR0aDprLmRvY3VtZW50LnNpemUud2lkdGh9fSxrLmF2YWlsYWJsZS53aW5kb3c9e2JvdHRvbTp7aGVpZ2h0Ok1hdGgubWF4KGsud2luZG93LnNpemUuaGVpZ2h0LU1hdGgubWF4KGsub3JpZ2luLndpbmRvd09mZnNldC5ib3R0b20sMCksMCksd2lkdGg6ay53aW5kb3cuc2l6ZS53aWR0aH0sbGVmdDp7aGVpZ2h0Omsud2luZG93LnNpemUuaGVpZ2h0LHdpZHRoOk1hdGgubWF4KGsub3JpZ2luLndpbmRvd09mZnNldC5sZWZ0LDApfSxyaWdodDp7aGVpZ2h0Omsud2luZG93LnNpemUuaGVpZ2h0LHdpZHRoOk1hdGgubWF4KGsud2luZG93LnNpemUud2lkdGgtTWF0aC5tYXgoay5vcmlnaW4ud2luZG93T2Zmc2V0LnJpZ2h0LDApLDApfSx0b3A6e2hlaWdodDpNYXRoLm1heChrLm9yaWdpbi53aW5kb3dPZmZzZXQudG9wLDApLHdpZHRoOmsud2luZG93LnNpemUud2lkdGh9fTtcImh0bWxcIiE9alswXS50YWdOYW1lLnRvTG93ZXJDYXNlKCk7KXtpZihcImZpeGVkXCI9PWouY3NzKFwicG9zaXRpb25cIikpe2sub3JpZ2luLmZpeGVkTGluZWFnZT0hMDticmVha31qPWoucGFyZW50KCl9cmV0dXJuIGt9LF9fb3B0aW9uc0Zvcm1hdDpmdW5jdGlvbigpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0aGlzLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbiYmKHRoaXMuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uPVt0aGlzLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbix0aGlzLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbl0pLFwibnVtYmVyXCI9PXR5cGVvZiB0aGlzLl9fb3B0aW9ucy5kZWxheSYmKHRoaXMuX19vcHRpb25zLmRlbGF5PVt0aGlzLl9fb3B0aW9ucy5kZWxheSx0aGlzLl9fb3B0aW9ucy5kZWxheV0pLFwibnVtYmVyXCI9PXR5cGVvZiB0aGlzLl9fb3B0aW9ucy5kZWxheVRvdWNoJiYodGhpcy5fX29wdGlvbnMuZGVsYXlUb3VjaD1bdGhpcy5fX29wdGlvbnMuZGVsYXlUb3VjaCx0aGlzLl9fb3B0aW9ucy5kZWxheVRvdWNoXSksXCJzdHJpbmdcIj09dHlwZW9mIHRoaXMuX19vcHRpb25zLnRoZW1lJiYodGhpcy5fX29wdGlvbnMudGhlbWU9W3RoaXMuX19vcHRpb25zLnRoZW1lXSksbnVsbD09PXRoaXMuX19vcHRpb25zLnBhcmVudD90aGlzLl9fb3B0aW9ucy5wYXJlbnQ9YShoLndpbmRvdy5kb2N1bWVudC5ib2R5KTpcInN0cmluZ1wiPT10eXBlb2YgdGhpcy5fX29wdGlvbnMucGFyZW50JiYodGhpcy5fX29wdGlvbnMucGFyZW50PWEodGhpcy5fX29wdGlvbnMucGFyZW50KSksXCJob3ZlclwiPT10aGlzLl9fb3B0aW9ucy50cmlnZ2VyPyh0aGlzLl9fb3B0aW9ucy50cmlnZ2VyT3Blbj17bW91c2VlbnRlcjohMCx0b3VjaHN0YXJ0OiEwfSx0aGlzLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2U9e21vdXNlbGVhdmU6ITAsb3JpZ2luQ2xpY2s6ITAsdG91Y2hsZWF2ZTohMH0pOlwiY2xpY2tcIj09dGhpcy5fX29wdGlvbnMudHJpZ2dlciYmKHRoaXMuX19vcHRpb25zLnRyaWdnZXJPcGVuPXtjbGljazohMCx0YXA6ITB9LHRoaXMuX19vcHRpb25zLnRyaWdnZXJDbG9zZT17Y2xpY2s6ITAsdGFwOiEwfSksdGhpcy5fdHJpZ2dlcihcIm9wdGlvbnNcIiksdGhpc30sX19wcmVwYXJlR0M6ZnVuY3Rpb24oKXt2YXIgYj10aGlzO3JldHVybiBiLl9fb3B0aW9ucy5zZWxmRGVzdHJ1Y3Rpb24/Yi5fX2dhcmJhZ2VDb2xsZWN0b3I9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXt2YXIgYz0obmV3IERhdGUpLmdldFRpbWUoKTtiLl9fdG91Y2hFdmVudHM9YS5ncmVwKGIuX190b3VjaEV2ZW50cyxmdW5jdGlvbihhLGIpe3JldHVybiBjLWEudGltZT42ZTR9KSxkKGIuXyRvcmlnaW4pfHxiLmNsb3NlKGZ1bmN0aW9uKCl7Yi5kZXN0cm95KCl9KX0sMmU0KTpjbGVhckludGVydmFsKGIuX19nYXJiYWdlQ29sbGVjdG9yKSxifSxfX3ByZXBhcmVPcmlnaW46ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2lmKGEuXyRvcmlnaW4ub2ZmKFwiLlwiK2EuX19uYW1lc3BhY2UrXCItdHJpZ2dlck9wZW5cIiksaC5oYXNUb3VjaENhcGFiaWxpdHkmJmEuXyRvcmlnaW4ub24oXCJ0b3VjaHN0YXJ0LlwiK2EuX19uYW1lc3BhY2UrXCItdHJpZ2dlck9wZW4gdG91Y2hlbmQuXCIrYS5fX25hbWVzcGFjZStcIi10cmlnZ2VyT3BlbiB0b3VjaGNhbmNlbC5cIithLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuXCIsZnVuY3Rpb24oYil7YS5fdG91Y2hSZWNvcmRFdmVudChiKX0pLGEuX19vcHRpb25zLnRyaWdnZXJPcGVuLmNsaWNrfHxhLl9fb3B0aW9ucy50cmlnZ2VyT3Blbi50YXAmJmguaGFzVG91Y2hDYXBhYmlsaXR5KXt2YXIgYj1cIlwiO2EuX19vcHRpb25zLnRyaWdnZXJPcGVuLmNsaWNrJiYoYis9XCJjbGljay5cIithLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuIFwiKSxhLl9fb3B0aW9ucy50cmlnZ2VyT3Blbi50YXAmJmguaGFzVG91Y2hDYXBhYmlsaXR5JiYoYis9XCJ0b3VjaGVuZC5cIithLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuXCIpLGEuXyRvcmlnaW4ub24oYixmdW5jdGlvbihiKXthLl90b3VjaElzTWVhbmluZ2Z1bEV2ZW50KGIpJiZhLl9vcGVuKGIpfSl9aWYoYS5fX29wdGlvbnMudHJpZ2dlck9wZW4ubW91c2VlbnRlcnx8YS5fX29wdGlvbnMudHJpZ2dlck9wZW4udG91Y2hzdGFydCYmaC5oYXNUb3VjaENhcGFiaWxpdHkpe3ZhciBiPVwiXCI7YS5fX29wdGlvbnMudHJpZ2dlck9wZW4ubW91c2VlbnRlciYmKGIrPVwibW91c2VlbnRlci5cIithLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuIFwiKSxhLl9fb3B0aW9ucy50cmlnZ2VyT3Blbi50b3VjaHN0YXJ0JiZoLmhhc1RvdWNoQ2FwYWJpbGl0eSYmKGIrPVwidG91Y2hzdGFydC5cIithLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuXCIpLGEuXyRvcmlnaW4ub24oYixmdW5jdGlvbihiKXshYS5fdG91Y2hJc1RvdWNoRXZlbnQoYikmJmEuX3RvdWNoSXNFbXVsYXRlZEV2ZW50KGIpfHwoYS5fX3BvaW50ZXJJc092ZXJPcmlnaW49ITAsYS5fb3BlblNob3J0bHkoYikpfSl9aWYoYS5fX29wdGlvbnMudHJpZ2dlckNsb3NlLm1vdXNlbGVhdmV8fGEuX19vcHRpb25zLnRyaWdnZXJDbG9zZS50b3VjaGxlYXZlJiZoLmhhc1RvdWNoQ2FwYWJpbGl0eSl7dmFyIGI9XCJcIjthLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2UubW91c2VsZWF2ZSYmKGIrPVwibW91c2VsZWF2ZS5cIithLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuIFwiKSxhLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2UudG91Y2hsZWF2ZSYmaC5oYXNUb3VjaENhcGFiaWxpdHkmJihiKz1cInRvdWNoZW5kLlwiK2EuX19uYW1lc3BhY2UrXCItdHJpZ2dlck9wZW4gdG91Y2hjYW5jZWwuXCIrYS5fX25hbWVzcGFjZStcIi10cmlnZ2VyT3BlblwiKSxhLl8kb3JpZ2luLm9uKGIsZnVuY3Rpb24oYil7YS5fdG91Y2hJc01lYW5pbmdmdWxFdmVudChiKSYmKGEuX19wb2ludGVySXNPdmVyT3JpZ2luPSExKX0pfXJldHVybiBhfSxfX3ByZXBhcmVUb29sdGlwOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjPWIuX19vcHRpb25zLmludGVyYWN0aXZlP1wiYXV0b1wiOlwiXCI7cmV0dXJuIGIuXyR0b29sdGlwLmF0dHIoXCJpZFwiLGIuX19uYW1lc3BhY2UpLmNzcyh7XCJwb2ludGVyLWV2ZW50c1wiOmMsekluZGV4OmIuX19vcHRpb25zLnpJbmRleH0pLGEuZWFjaChiLl9fcHJldmlvdXNUaGVtZXMsZnVuY3Rpb24oYSxjKXtiLl8kdG9vbHRpcC5yZW1vdmVDbGFzcyhjKX0pLGEuZWFjaChiLl9fb3B0aW9ucy50aGVtZSxmdW5jdGlvbihhLGMpe2IuXyR0b29sdGlwLmFkZENsYXNzKGMpfSksYi5fX3ByZXZpb3VzVGhlbWVzPWEubWVyZ2UoW10sYi5fX29wdGlvbnMudGhlbWUpLGJ9LF9fc2Nyb2xsSGFuZGxlcjpmdW5jdGlvbihiKXt2YXIgYz10aGlzO2lmKGMuX19vcHRpb25zLnRyaWdnZXJDbG9zZS5zY3JvbGwpYy5fY2xvc2UoYik7ZWxzZSBpZihkKGMuXyRvcmlnaW4pJiZkKGMuXyR0b29sdGlwKSl7dmFyIGU9bnVsbDtpZihiLnRhcmdldD09PWgud2luZG93LmRvY3VtZW50KWMuX19HZW9tZXRyeS5vcmlnaW4uZml4ZWRMaW5lYWdlfHxjLl9fb3B0aW9ucy5yZXBvc2l0aW9uT25TY3JvbGwmJmMucmVwb3NpdGlvbihiKTtlbHNle2U9Yy5fX2dlb21ldHJ5KCk7dmFyIGY9ITE7aWYoXCJmaXhlZFwiIT1jLl8kb3JpZ2luLmNzcyhcInBvc2l0aW9uXCIpJiZjLl9fJG9yaWdpblBhcmVudHMuZWFjaChmdW5jdGlvbihiLGMpe3ZhciBkPWEoYyksZz1kLmNzcyhcIm92ZXJmbG93LXhcIiksaD1kLmNzcyhcIm92ZXJmbG93LXlcIik7aWYoXCJ2aXNpYmxlXCIhPWd8fFwidmlzaWJsZVwiIT1oKXt2YXIgaT1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKFwidmlzaWJsZVwiIT1nJiYoZS5vcmlnaW4ud2luZG93T2Zmc2V0LmxlZnQ8aS5sZWZ0fHxlLm9yaWdpbi53aW5kb3dPZmZzZXQucmlnaHQ+aS5yaWdodCkpcmV0dXJuIGY9ITAsITE7aWYoXCJ2aXNpYmxlXCIhPWgmJihlLm9yaWdpbi53aW5kb3dPZmZzZXQudG9wPGkudG9wfHxlLm9yaWdpbi53aW5kb3dPZmZzZXQuYm90dG9tPmkuYm90dG9tKSlyZXR1cm4gZj0hMCwhMX1yZXR1cm5cImZpeGVkXCI9PWQuY3NzKFwicG9zaXRpb25cIik/ITE6dm9pZCAwfSksZiljLl8kdG9vbHRpcC5jc3MoXCJ2aXNpYmlsaXR5XCIsXCJoaWRkZW5cIik7ZWxzZSBpZihjLl8kdG9vbHRpcC5jc3MoXCJ2aXNpYmlsaXR5XCIsXCJ2aXNpYmxlXCIpLGMuX19vcHRpb25zLnJlcG9zaXRpb25PblNjcm9sbCljLnJlcG9zaXRpb24oYik7ZWxzZXt2YXIgZz1lLm9yaWdpbi5vZmZzZXQubGVmdC1jLl9fR2VvbWV0cnkub3JpZ2luLm9mZnNldC5sZWZ0LGk9ZS5vcmlnaW4ub2Zmc2V0LnRvcC1jLl9fR2VvbWV0cnkub3JpZ2luLm9mZnNldC50b3A7Yy5fJHRvb2x0aXAuY3NzKHtsZWZ0OmMuX19sYXN0UG9zaXRpb24uY29vcmQubGVmdCtnLHRvcDpjLl9fbGFzdFBvc2l0aW9uLmNvb3JkLnRvcCtpfSl9fWMuX3RyaWdnZXIoe3R5cGU6XCJzY3JvbGxcIixldmVudDpiLGdlbzplfSl9cmV0dXJuIGN9LF9fc3RhdGVTZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX19zdGF0ZT1hLHRoaXMuX3RyaWdnZXIoe3R5cGU6XCJzdGF0ZVwiLHN0YXRlOmF9KSx0aGlzfSxfX3RpbWVvdXRzQ2xlYXI6ZnVuY3Rpb24oKXtyZXR1cm4gY2xlYXJUaW1lb3V0KHRoaXMuX190aW1lb3V0cy5vcGVuKSx0aGlzLl9fdGltZW91dHMub3Blbj1udWxsLGEuZWFjaCh0aGlzLl9fdGltZW91dHMuY2xvc2UsZnVuY3Rpb24oYSxiKXtjbGVhclRpbWVvdXQoYil9KSx0aGlzLl9fdGltZW91dHMuY2xvc2U9W10sdGhpc30sX190cmFja2VyU3RhcnQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9YS5fJHRvb2x0aXAuZmluZChcIi50b29sdGlwc3Rlci1jb250ZW50XCIpO3JldHVybiBhLl9fb3B0aW9ucy50cmFja1Rvb2x0aXAmJihhLl9fY29udGVudEJjcj1iWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxhLl9fdHJhY2tlcj1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2lmKGQoYS5fJG9yaWdpbikmJmQoYS5fJHRvb2x0aXApKXtpZihhLl9fb3B0aW9ucy50cmFja09yaWdpbil7dmFyIGU9YS5fX2dlb21ldHJ5KCksZj0hMTtjKGUub3JpZ2luLnNpemUsYS5fX0dlb21ldHJ5Lm9yaWdpbi5zaXplKSYmKGEuX19HZW9tZXRyeS5vcmlnaW4uZml4ZWRMaW5lYWdlP2MoZS5vcmlnaW4ud2luZG93T2Zmc2V0LGEuX19HZW9tZXRyeS5vcmlnaW4ud2luZG93T2Zmc2V0KSYmKGY9ITApOmMoZS5vcmlnaW4ub2Zmc2V0LGEuX19HZW9tZXRyeS5vcmlnaW4ub2Zmc2V0KSYmKGY9ITApKSxmfHwoYS5fX29wdGlvbnMudHJpZ2dlckNsb3NlLm1vdXNlbGVhdmU/YS5fY2xvc2UoKTphLnJlcG9zaXRpb24oKSl9aWYoYS5fX29wdGlvbnMudHJhY2tUb29sdGlwKXt2YXIgZz1iWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2cuaGVpZ2h0PT09YS5fX2NvbnRlbnRCY3IuaGVpZ2h0JiZnLndpZHRoPT09YS5fX2NvbnRlbnRCY3Iud2lkdGh8fChhLnJlcG9zaXRpb24oKSxhLl9fY29udGVudEJjcj1nKX19ZWxzZSBhLl9jbG9zZSgpfSxhLl9fb3B0aW9ucy50cmFja2VySW50ZXJ2YWwpLGF9LF9jbG9zZTpmdW5jdGlvbihiLGMsZCl7dmFyIGU9dGhpcyxmPSEwO2lmKGUuX3RyaWdnZXIoe3R5cGU6XCJjbG9zZVwiLGV2ZW50OmIsc3RvcDpmdW5jdGlvbigpe2Y9ITF9fSksZnx8ZCl7YyYmZS5fX2NhbGxiYWNrcy5jbG9zZS5wdXNoKGMpLGUuX19jYWxsYmFja3Mub3Blbj1bXSxlLl9fdGltZW91dHNDbGVhcigpO3ZhciBnPWZ1bmN0aW9uKCl7YS5lYWNoKGUuX19jYWxsYmFja3MuY2xvc2UsZnVuY3Rpb24oYSxjKXtjLmNhbGwoZSxlLHtldmVudDpiLG9yaWdpbjplLl8kb3JpZ2luWzBdfSl9KSxlLl9fY2FsbGJhY2tzLmNsb3NlPVtdfTtpZihcImNsb3NlZFwiIT1lLl9fc3RhdGUpe3ZhciBpPSEwLGo9bmV3IERhdGUsaz1qLmdldFRpbWUoKSxsPWsrZS5fX29wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb25bMV07aWYoXCJkaXNhcHBlYXJpbmdcIj09ZS5fX3N0YXRlJiZsPmUuX19jbG9zaW5nVGltZSYmZS5fX29wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb25bMV0+MCYmKGk9ITEpLGkpe2UuX19jbG9zaW5nVGltZT1sLFwiZGlzYXBwZWFyaW5nXCIhPWUuX19zdGF0ZSYmZS5fX3N0YXRlU2V0KFwiZGlzYXBwZWFyaW5nXCIpO3ZhciBtPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChlLl9fdHJhY2tlciksZS5fdHJpZ2dlcih7dHlwZTpcImNsb3NpbmdcIixldmVudDpifSksZS5fJHRvb2x0aXAub2ZmKFwiLlwiK2UuX19uYW1lc3BhY2UrXCItdHJpZ2dlckNsb3NlXCIpLnJlbW92ZUNsYXNzKFwidG9vbHRpcHN0ZXItZHlpbmdcIiksYShoLndpbmRvdykub2ZmKFwiLlwiK2UuX19uYW1lc3BhY2UrXCItdHJpZ2dlckNsb3NlXCIpLGUuX18kb3JpZ2luUGFyZW50cy5lYWNoKGZ1bmN0aW9uKGIsYyl7YShjKS5vZmYoXCJzY3JvbGwuXCIrZS5fX25hbWVzcGFjZStcIi10cmlnZ2VyQ2xvc2VcIil9KSxlLl9fJG9yaWdpblBhcmVudHM9bnVsbCxhKGgud2luZG93LmRvY3VtZW50LmJvZHkpLm9mZihcIi5cIitlLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJDbG9zZVwiKSxlLl8kb3JpZ2luLm9mZihcIi5cIitlLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJDbG9zZVwiKSxlLl9vZmYoXCJkaXNtaXNzYWJsZVwiKSxlLl9fc3RhdGVTZXQoXCJjbG9zZWRcIiksZS5fdHJpZ2dlcih7dHlwZTpcImFmdGVyXCIsZXZlbnQ6Yn0pLGUuX19vcHRpb25zLmZ1bmN0aW9uQWZ0ZXImJmUuX19vcHRpb25zLmZ1bmN0aW9uQWZ0ZXIuY2FsbChlLGUse2V2ZW50OmIsb3JpZ2luOmUuXyRvcmlnaW5bMF19KSxnKCl9O2guaGFzVHJhbnNpdGlvbnM/KGUuXyR0b29sdGlwLmNzcyh7XCItbW96LWFuaW1hdGlvbi1kdXJhdGlvblwiOmUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzFdK1wibXNcIixcIi1tcy1hbmltYXRpb24tZHVyYXRpb25cIjplLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblsxXStcIm1zXCIsXCItby1hbmltYXRpb24tZHVyYXRpb25cIjplLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblsxXStcIm1zXCIsXCItd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvblwiOmUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzFdK1wibXNcIixcImFuaW1hdGlvbi1kdXJhdGlvblwiOmUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzFdK1wibXNcIixcInRyYW5zaXRpb24tZHVyYXRpb25cIjplLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblsxXStcIm1zXCJ9KSxlLl8kdG9vbHRpcC5jbGVhclF1ZXVlKCkucmVtb3ZlQ2xhc3MoXCJ0b29sdGlwc3Rlci1zaG93XCIpLmFkZENsYXNzKFwidG9vbHRpcHN0ZXItZHlpbmdcIiksZS5fX29wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb25bMV0+MCYmZS5fJHRvb2x0aXAuZGVsYXkoZS5fX29wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb25bMV0pLGUuXyR0b29sdGlwLnF1ZXVlKG0pKTplLl8kdG9vbHRpcC5zdG9wKCkuZmFkZU91dChlLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblsxXSxtKX19ZWxzZSBnKCl9cmV0dXJuIGV9LF9vZmY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fXyRlbWl0dGVyUHJpdmF0ZS5vZmYuYXBwbHkodGhpcy5fXyRlbWl0dGVyUHJpdmF0ZSxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSksdGhpc30sX29uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX18kZW1pdHRlclByaXZhdGUub24uYXBwbHkodGhpcy5fXyRlbWl0dGVyUHJpdmF0ZSxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSksdGhpc30sX29uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fJGVtaXR0ZXJQcml2YXRlLm9uZS5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQcml2YXRlLEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpKSx0aGlzfSxfb3BlbjpmdW5jdGlvbihiLGMpe3ZhciBlPXRoaXM7aWYoIWUuX19kZXN0cm95aW5nJiZkKGUuXyRvcmlnaW4pJiZlLl9fZW5hYmxlZCl7dmFyIGY9ITA7aWYoXCJjbG9zZWRcIj09ZS5fX3N0YXRlJiYoZS5fdHJpZ2dlcih7dHlwZTpcImJlZm9yZVwiLGV2ZW50OmIsc3RvcDpmdW5jdGlvbigpe2Y9ITF9fSksZiYmZS5fX29wdGlvbnMuZnVuY3Rpb25CZWZvcmUmJihmPWUuX19vcHRpb25zLmZ1bmN0aW9uQmVmb3JlLmNhbGwoZSxlLHtldmVudDpiLG9yaWdpbjplLl8kb3JpZ2luWzBdfSkpKSxmIT09ITEmJm51bGwhPT1lLl9fQ29udGVudCl7YyYmZS5fX2NhbGxiYWNrcy5vcGVuLnB1c2goYyksZS5fX2NhbGxiYWNrcy5jbG9zZT1bXSxlLl9fdGltZW91dHNDbGVhcigpO3ZhciBnLGk9ZnVuY3Rpb24oKXtcInN0YWJsZVwiIT1lLl9fc3RhdGUmJmUuX19zdGF0ZVNldChcInN0YWJsZVwiKSxhLmVhY2goZS5fX2NhbGxiYWNrcy5vcGVuLGZ1bmN0aW9uKGEsYil7Yi5jYWxsKGUsZSx7b3JpZ2luOmUuXyRvcmlnaW5bMF0sdG9vbHRpcDplLl8kdG9vbHRpcFswXX0pfSksZS5fX2NhbGxiYWNrcy5vcGVuPVtdfTtpZihcImNsb3NlZFwiIT09ZS5fX3N0YXRlKWc9MCxcImRpc2FwcGVhcmluZ1wiPT09ZS5fX3N0YXRlPyhlLl9fc3RhdGVTZXQoXCJhcHBlYXJpbmdcIiksaC5oYXNUcmFuc2l0aW9ucz8oZS5fJHRvb2x0aXAuY2xlYXJRdWV1ZSgpLnJlbW92ZUNsYXNzKFwidG9vbHRpcHN0ZXItZHlpbmdcIikuYWRkQ2xhc3MoXCJ0b29sdGlwc3Rlci1zaG93XCIpLGUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzBdPjAmJmUuXyR0b29sdGlwLmRlbGF5KGUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzBdKSxlLl8kdG9vbHRpcC5xdWV1ZShpKSk6ZS5fJHRvb2x0aXAuc3RvcCgpLmZhZGVJbihpKSk6XCJzdGFibGVcIj09ZS5fX3N0YXRlJiZpKCk7ZWxzZXtpZihlLl9fc3RhdGVTZXQoXCJhcHBlYXJpbmdcIiksZz1lLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblswXSxlLl9fY29udGVudEluc2VydCgpLGUucmVwb3NpdGlvbihiLCEwKSxoLmhhc1RyYW5zaXRpb25zPyhlLl8kdG9vbHRpcC5hZGRDbGFzcyhcInRvb2x0aXBzdGVyLVwiK2UuX19vcHRpb25zLmFuaW1hdGlvbikuYWRkQ2xhc3MoXCJ0b29sdGlwc3Rlci1pbml0aWFsXCIpLmNzcyh7XCItbW96LWFuaW1hdGlvbi1kdXJhdGlvblwiOmUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzBdK1wibXNcIixcIi1tcy1hbmltYXRpb24tZHVyYXRpb25cIjplLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblswXStcIm1zXCIsXCItby1hbmltYXRpb24tZHVyYXRpb25cIjplLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblswXStcIm1zXCIsXCItd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvblwiOmUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzBdK1wibXNcIixcImFuaW1hdGlvbi1kdXJhdGlvblwiOmUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzBdK1wibXNcIixcInRyYW5zaXRpb24tZHVyYXRpb25cIjplLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblswXStcIm1zXCJ9KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XCJjbG9zZWRcIiE9ZS5fX3N0YXRlJiYoZS5fJHRvb2x0aXAuYWRkQ2xhc3MoXCJ0b29sdGlwc3Rlci1zaG93XCIpLnJlbW92ZUNsYXNzKFwidG9vbHRpcHN0ZXItaW5pdGlhbFwiKSxlLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblswXT4wJiZlLl8kdG9vbHRpcC5kZWxheShlLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblswXSksZS5fJHRvb2x0aXAucXVldWUoaSkpfSwwKSk6ZS5fJHRvb2x0aXAuY3NzKFwiZGlzcGxheVwiLFwibm9uZVwiKS5mYWRlSW4oZS5fX29wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb25bMF0saSksZS5fX3RyYWNrZXJTdGFydCgpLGEoaC53aW5kb3cpLm9uKFwicmVzaXplLlwiK2UuX19uYW1lc3BhY2UrXCItdHJpZ2dlckNsb3NlXCIsZnVuY3Rpb24oYil7dmFyIGM9YShkb2N1bWVudC5hY3RpdmVFbGVtZW50KTsoYy5pcyhcImlucHV0XCIpfHxjLmlzKFwidGV4dGFyZWFcIikpJiZhLmNvbnRhaW5zKGUuXyR0b29sdGlwWzBdLGNbMF0pfHxlLnJlcG9zaXRpb24oYil9KS5vbihcInNjcm9sbC5cIitlLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJDbG9zZVwiLGZ1bmN0aW9uKGEpe2UuX19zY3JvbGxIYW5kbGVyKGEpfSksZS5fXyRvcmlnaW5QYXJlbnRzPWUuXyRvcmlnaW4ucGFyZW50cygpLGUuX18kb3JpZ2luUGFyZW50cy5lYWNoKGZ1bmN0aW9uKGIsYyl7YShjKS5vbihcInNjcm9sbC5cIitlLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJDbG9zZVwiLGZ1bmN0aW9uKGEpe2UuX19zY3JvbGxIYW5kbGVyKGEpfSl9KSxlLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2UubW91c2VsZWF2ZXx8ZS5fX29wdGlvbnMudHJpZ2dlckNsb3NlLnRvdWNobGVhdmUmJmguaGFzVG91Y2hDYXBhYmlsaXR5KXtlLl9vbihcImRpc21pc3NhYmxlXCIsZnVuY3Rpb24oYSl7YS5kaXNtaXNzYWJsZT9hLmRlbGF5PyhtPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl9jbG9zZShhLmV2ZW50KX0sYS5kZWxheSksZS5fX3RpbWVvdXRzLmNsb3NlLnB1c2gobSkpOmUuX2Nsb3NlKGEpOmNsZWFyVGltZW91dChtKX0pO3ZhciBqPWUuXyRvcmlnaW4saz1cIlwiLGw9XCJcIixtPW51bGw7ZS5fX29wdGlvbnMuaW50ZXJhY3RpdmUmJihqPWouYWRkKGUuXyR0b29sdGlwKSksZS5fX29wdGlvbnMudHJpZ2dlckNsb3NlLm1vdXNlbGVhdmUmJihrKz1cIm1vdXNlZW50ZXIuXCIrZS5fX25hbWVzcGFjZStcIi10cmlnZ2VyQ2xvc2UgXCIsbCs9XCJtb3VzZWxlYXZlLlwiK2UuX19uYW1lc3BhY2UrXCItdHJpZ2dlckNsb3NlIFwiKSxlLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2UudG91Y2hsZWF2ZSYmaC5oYXNUb3VjaENhcGFiaWxpdHkmJihrKz1cInRvdWNoc3RhcnQuXCIrZS5fX25hbWVzcGFjZStcIi10cmlnZ2VyQ2xvc2VcIixsKz1cInRvdWNoZW5kLlwiK2UuX19uYW1lc3BhY2UrXCItdHJpZ2dlckNsb3NlIHRvdWNoY2FuY2VsLlwiK2UuX19uYW1lc3BhY2UrXCItdHJpZ2dlckNsb3NlXCIpLGoub24obCxmdW5jdGlvbihhKXtpZihlLl90b3VjaElzVG91Y2hFdmVudChhKXx8IWUuX3RvdWNoSXNFbXVsYXRlZEV2ZW50KGEpKXt2YXIgYj1cIm1vdXNlbGVhdmVcIj09YS50eXBlP2UuX19vcHRpb25zLmRlbGF5OmUuX19vcHRpb25zLmRlbGF5VG91Y2g7ZS5fdHJpZ2dlcih7ZGVsYXk6YlsxXSxkaXNtaXNzYWJsZTohMCxldmVudDphLHR5cGU6XCJkaXNtaXNzYWJsZVwifSl9fSkub24oayxmdW5jdGlvbihhKXshZS5fdG91Y2hJc1RvdWNoRXZlbnQoYSkmJmUuX3RvdWNoSXNFbXVsYXRlZEV2ZW50KGEpfHxlLl90cmlnZ2VyKHtkaXNtaXNzYWJsZTohMSxldmVudDphLHR5cGU6XCJkaXNtaXNzYWJsZVwifSl9KX1lLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2Uub3JpZ2luQ2xpY2smJmUuXyRvcmlnaW4ub24oXCJjbGljay5cIitlLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJDbG9zZVwiLGZ1bmN0aW9uKGEpe2UuX3RvdWNoSXNUb3VjaEV2ZW50KGEpfHxlLl90b3VjaElzRW11bGF0ZWRFdmVudChhKXx8ZS5fY2xvc2UoYSl9KSwoZS5fX29wdGlvbnMudHJpZ2dlckNsb3NlLmNsaWNrfHxlLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2UudGFwJiZoLmhhc1RvdWNoQ2FwYWJpbGl0eSkmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihcImNsb3NlZFwiIT1lLl9fc3RhdGUpe3ZhciBiPVwiXCIsYz1hKGgud2luZG93LmRvY3VtZW50LmJvZHkpO2UuX19vcHRpb25zLnRyaWdnZXJDbG9zZS5jbGljayYmKGIrPVwiY2xpY2suXCIrZS5fX25hbWVzcGFjZStcIi10cmlnZ2VyQ2xvc2UgXCIpLGUuX19vcHRpb25zLnRyaWdnZXJDbG9zZS50YXAmJmguaGFzVG91Y2hDYXBhYmlsaXR5JiYoYis9XCJ0b3VjaGVuZC5cIitlLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJDbG9zZVwiKSxjLm9uKGIsZnVuY3Rpb24oYil7ZS5fdG91Y2hJc01lYW5pbmdmdWxFdmVudChiKSYmKGUuX3RvdWNoUmVjb3JkRXZlbnQoYiksZS5fX29wdGlvbnMuaW50ZXJhY3RpdmUmJmEuY29udGFpbnMoZS5fJHRvb2x0aXBbMF0sYi50YXJnZXQpfHxlLl9jbG9zZShiKSl9KSxlLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2UudGFwJiZoLmhhc1RvdWNoQ2FwYWJpbGl0eSYmYy5vbihcInRvdWNoc3RhcnQuXCIrZS5fX25hbWVzcGFjZStcIi10cmlnZ2VyQ2xvc2VcIixmdW5jdGlvbihhKXtlLl90b3VjaFJlY29yZEV2ZW50KGEpfSl9fSwwKSxlLl90cmlnZ2VyKFwicmVhZHlcIiksZS5fX29wdGlvbnMuZnVuY3Rpb25SZWFkeSYmZS5fX29wdGlvbnMuZnVuY3Rpb25SZWFkeS5jYWxsKGUsZSx7b3JpZ2luOmUuXyRvcmlnaW5bMF0sdG9vbHRpcDplLl8kdG9vbHRpcFswXX0pfWlmKGUuX19vcHRpb25zLnRpbWVyPjApe3ZhciBtPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl9jbG9zZSgpfSxlLl9fb3B0aW9ucy50aW1lcitnKTtlLl9fdGltZW91dHMuY2xvc2UucHVzaChtKX19fXJldHVybiBlfSxfb3BlblNob3J0bHk6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPSEwO2lmKFwic3RhYmxlXCIhPWIuX19zdGF0ZSYmXCJhcHBlYXJpbmdcIiE9Yi5fX3N0YXRlJiYhYi5fX3RpbWVvdXRzLm9wZW4mJihiLl90cmlnZ2VyKHt0eXBlOlwic3RhcnRcIixldmVudDphLHN0b3A6ZnVuY3Rpb24oKXtjPSExfX0pLGMpKXt2YXIgZD0wPT1hLnR5cGUuaW5kZXhPZihcInRvdWNoXCIpP2IuX19vcHRpb25zLmRlbGF5VG91Y2g6Yi5fX29wdGlvbnMuZGVsYXk7ZFswXT9iLl9fdGltZW91dHMub3Blbj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yi5fX3RpbWVvdXRzLm9wZW49bnVsbCxiLl9fcG9pbnRlcklzT3Zlck9yaWdpbiYmYi5fdG91Y2hJc01lYW5pbmdmdWxFdmVudChhKT8oYi5fdHJpZ2dlcihcInN0YXJ0ZW5kXCIpLGIuX29wZW4oYSkpOmIuX3RyaWdnZXIoXCJzdGFydGNhbmNlbFwiKX0sZFswXSk6KGIuX3RyaWdnZXIoXCJzdGFydGVuZFwiKSxiLl9vcGVuKGEpKX1yZXR1cm4gYn0sX29wdGlvbnNFeHRyYWN0OmZ1bmN0aW9uKGIsYyl7dmFyIGQ9dGhpcyxlPWEuZXh0ZW5kKCEwLHt9LGMpLGY9ZC5fX29wdGlvbnNbYl07cmV0dXJuIGZ8fChmPXt9LGEuZWFjaChjLGZ1bmN0aW9uKGEsYil7dmFyIGM9ZC5fX29wdGlvbnNbYV07dm9pZCAwIT09YyYmKGZbYV09Yyl9KSksYS5lYWNoKGUsZnVuY3Rpb24oYixjKXt2b2lkIDAhPT1mW2JdJiYoXCJvYmplY3RcIiE9dHlwZW9mIGN8fGMgaW5zdGFuY2VvZiBBcnJheXx8bnVsbD09Y3x8XCJvYmplY3RcIiE9dHlwZW9mIGZbYl18fGZbYl1pbnN0YW5jZW9mIEFycmF5fHxudWxsPT1mW2JdP2VbYl09ZltiXTphLmV4dGVuZChlW2JdLGZbYl0pKX0pLGV9LF9wbHVnOmZ1bmN0aW9uKGIpe3ZhciBjPWEudG9vbHRpcHN0ZXIuX3BsdWdpbihiKTtpZighYyl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBcIicrYisnXCIgcGx1Z2luIGlzIG5vdCBkZWZpbmVkJyk7cmV0dXJuIGMuaW5zdGFuY2UmJmEudG9vbHRpcHN0ZXIuX19icmlkZ2UoYy5pbnN0YW5jZSx0aGlzLGMubmFtZSksdGhpc30sX3RvdWNoSXNFbXVsYXRlZEV2ZW50OmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0hMSxjPShuZXcgRGF0ZSkuZ2V0VGltZSgpLGQ9dGhpcy5fX3RvdWNoRXZlbnRzLmxlbmd0aC0xO2Q+PTA7ZC0tKXt2YXIgZT10aGlzLl9fdG91Y2hFdmVudHNbZF07aWYoIShjLWUudGltZTw1MDApKWJyZWFrO2UudGFyZ2V0PT09YS50YXJnZXQmJihiPSEwKX1yZXR1cm4gYn0sX3RvdWNoSXNNZWFuaW5nZnVsRXZlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX3RvdWNoSXNUb3VjaEV2ZW50KGEpJiYhdGhpcy5fdG91Y2hTd2lwZWQoYS50YXJnZXQpfHwhdGhpcy5fdG91Y2hJc1RvdWNoRXZlbnQoYSkmJiF0aGlzLl90b3VjaElzRW11bGF0ZWRFdmVudChhKX0sX3RvdWNoSXNUb3VjaEV2ZW50OmZ1bmN0aW9uKGEpe3JldHVybiAwPT1hLnR5cGUuaW5kZXhPZihcInRvdWNoXCIpfSxfdG91Y2hSZWNvcmRFdmVudDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fdG91Y2hJc1RvdWNoRXZlbnQoYSkmJihhLnRpbWU9KG5ldyBEYXRlKS5nZXRUaW1lKCksdGhpcy5fX3RvdWNoRXZlbnRzLnB1c2goYSkpLHRoaXN9LF90b3VjaFN3aXBlZDpmdW5jdGlvbihhKXtmb3IodmFyIGI9ITEsYz10aGlzLl9fdG91Y2hFdmVudHMubGVuZ3RoLTE7Yz49MDtjLS0pe3ZhciBkPXRoaXMuX190b3VjaEV2ZW50c1tjXTtpZihcInRvdWNobW92ZVwiPT1kLnR5cGUpe2I9ITA7YnJlYWt9aWYoXCJ0b3VjaHN0YXJ0XCI9PWQudHlwZSYmYT09PWQudGFyZ2V0KWJyZWFrfXJldHVybiBifSxfdHJpZ2dlcjpmdW5jdGlvbigpe3ZhciBiPUFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBiWzBdJiYoYlswXT17dHlwZTpiWzBdfSksYlswXS5pbnN0YW5jZT10aGlzLGJbMF0ub3JpZ2luPXRoaXMuXyRvcmlnaW4/dGhpcy5fJG9yaWdpblswXTpudWxsLGJbMF0udG9vbHRpcD10aGlzLl8kdG9vbHRpcD90aGlzLl8kdG9vbHRpcFswXTpudWxsLHRoaXMuX18kZW1pdHRlclByaXZhdGUudHJpZ2dlci5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQcml2YXRlLGIpLGEudG9vbHRpcHN0ZXIuX3RyaWdnZXIuYXBwbHkoYS50b29sdGlwc3RlcixiKSx0aGlzLl9fJGVtaXR0ZXJQdWJsaWMudHJpZ2dlci5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQdWJsaWMsYiksdGhpc30sX3VucGx1ZzpmdW5jdGlvbihiKXt2YXIgYz10aGlzO2lmKGNbYl0pe3ZhciBkPWEudG9vbHRpcHN0ZXIuX3BsdWdpbihiKTtkLmluc3RhbmNlJiZhLmVhY2goZC5pbnN0YW5jZSxmdW5jdGlvbihhLGQpe2NbYV0mJmNbYV0uYnJpZGdlZD09PWNbYl0mJmRlbGV0ZSBjW2FdfSksY1tiXS5fX2Rlc3Ryb3kmJmNbYl0uX19kZXN0cm95KCksZGVsZXRlIGNbYl19cmV0dXJuIGN9LGNsb3NlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9fZGVzdHJveWVkP3RoaXMuX19kZXN0cm95RXJyb3IoKTp0aGlzLl9jbG9zZShudWxsLGEpLHRoaXN9LGNvbnRlbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztpZih2b2lkIDA9PT1hKXJldHVybiBiLl9fQ29udGVudDtpZihiLl9fZGVzdHJveWVkKWIuX19kZXN0cm95RXJyb3IoKTtlbHNlIGlmKGIuX19jb250ZW50U2V0KGEpLG51bGwhPT1iLl9fQ29udGVudCl7aWYoXCJjbG9zZWRcIiE9PWIuX19zdGF0ZSYmKGIuX19jb250ZW50SW5zZXJ0KCksYi5yZXBvc2l0aW9uKCksYi5fX29wdGlvbnMudXBkYXRlQW5pbWF0aW9uKSlpZihoLmhhc1RyYW5zaXRpb25zKXt2YXIgYz1iLl9fb3B0aW9ucy51cGRhdGVBbmltYXRpb247Yi5fJHRvb2x0aXAuYWRkQ2xhc3MoXCJ0b29sdGlwc3Rlci11cGRhdGUtXCIrYyksc2V0VGltZW91dChmdW5jdGlvbigpe1wiY2xvc2VkXCIhPWIuX19zdGF0ZSYmYi5fJHRvb2x0aXAucmVtb3ZlQ2xhc3MoXCJ0b29sdGlwc3Rlci11cGRhdGUtXCIrYyl9LDFlMyl9ZWxzZSBiLl8kdG9vbHRpcC5mYWRlVG8oMjAwLC41LGZ1bmN0aW9uKCl7XCJjbG9zZWRcIiE9Yi5fX3N0YXRlJiZiLl8kdG9vbHRpcC5mYWRlVG8oMjAwLDEpfSl9ZWxzZSBiLl9jbG9zZSgpO3JldHVybiBifSxkZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcztpZihiLl9fZGVzdHJveWVkKWIuX19kZXN0cm95RXJyb3IoKTtlbHNle1wiY2xvc2VkXCIhPWIuX19zdGF0ZT9iLm9wdGlvbihcImFuaW1hdGlvbkR1cmF0aW9uXCIsMCkuX2Nsb3NlKG51bGwsbnVsbCwhMCk6Yi5fX3RpbWVvdXRzQ2xlYXIoKSxiLl90cmlnZ2VyKFwiZGVzdHJveVwiKSxiLl9fZGVzdHJveWVkPSEwLGIuXyRvcmlnaW4ucmVtb3ZlRGF0YShiLl9fbmFtZXNwYWNlKS5vZmYoXCIuXCIrYi5fX25hbWVzcGFjZStcIi10cmlnZ2VyT3BlblwiKSxhKGgud2luZG93LmRvY3VtZW50LmJvZHkpLm9mZihcIi5cIitiLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuXCIpO3ZhciBjPWIuXyRvcmlnaW4uZGF0YShcInRvb2x0aXBzdGVyLW5zXCIpO2lmKGMpaWYoMT09PWMubGVuZ3RoKXt2YXIgZD1udWxsO1wicHJldmlvdXNcIj09Yi5fX29wdGlvbnMucmVzdG9yYXRpb24/ZD1iLl8kb3JpZ2luLmRhdGEoXCJ0b29sdGlwc3Rlci1pbml0aWFsVGl0bGVcIik6XCJjdXJyZW50XCI9PWIuX19vcHRpb25zLnJlc3RvcmF0aW9uJiYoZD1cInN0cmluZ1wiPT10eXBlb2YgYi5fX0NvbnRlbnQ/Yi5fX0NvbnRlbnQ6YShcIjxkaXY+PC9kaXY+XCIpLmFwcGVuZChiLl9fQ29udGVudCkuaHRtbCgpKSxkJiZiLl8kb3JpZ2luLmF0dHIoXCJ0aXRsZVwiLGQpLGIuXyRvcmlnaW4ucmVtb3ZlQ2xhc3MoXCJ0b29sdGlwc3RlcmVkXCIpLGIuXyRvcmlnaW4ucmVtb3ZlRGF0YShcInRvb2x0aXBzdGVyLW5zXCIpLnJlbW92ZURhdGEoXCJ0b29sdGlwc3Rlci1pbml0aWFsVGl0bGVcIil9ZWxzZSBjPWEuZ3JlcChjLGZ1bmN0aW9uKGEsYyl7cmV0dXJuIGEhPT1iLl9fbmFtZXNwYWNlfSksYi5fJG9yaWdpbi5kYXRhKFwidG9vbHRpcHN0ZXItbnNcIixjKTtiLl90cmlnZ2VyKFwiZGVzdHJveWVkXCIpLGIuX29mZigpLGIub2ZmKCksYi5fX0NvbnRlbnQ9bnVsbCxiLl9fJGVtaXR0ZXJQcml2YXRlPW51bGwsYi5fXyRlbWl0dGVyUHVibGljPW51bGwsYi5fX29wdGlvbnMucGFyZW50PW51bGwsYi5fJG9yaWdpbj1udWxsLGIuXyR0b29sdGlwPW51bGwsYS50b29sdGlwc3Rlci5fX2luc3RhbmNlc0xhdGVzdEFycj1hLmdyZXAoYS50b29sdGlwc3Rlci5fX2luc3RhbmNlc0xhdGVzdEFycixmdW5jdGlvbihhLGMpe3JldHVybiBiIT09YX0pLGNsZWFySW50ZXJ2YWwoYi5fX2dhcmJhZ2VDb2xsZWN0b3IpfXJldHVybiBifSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19kZXN0cm95ZWQ/KHRoaXMuX19kZXN0cm95RXJyb3IoKSx0aGlzKToodGhpcy5fY2xvc2UoKSx0aGlzLl9fZW5hYmxlZD0hMSx0aGlzKX0sZWxlbWVudE9yaWdpbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZGVzdHJveWVkP3ZvaWQgdGhpcy5fX2Rlc3Ryb3lFcnJvcigpOnRoaXMuXyRvcmlnaW5bMF19LGVsZW1lbnRUb29sdGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyR0b29sdGlwP3RoaXMuXyR0b29sdGlwWzBdOm51bGx9LGVuYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZW5hYmxlZD0hMCx0aGlzfSxoaWRlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNsb3NlKGEpfSxpbnN0YW5jZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxvZmY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2Rlc3Ryb3llZHx8dGhpcy5fXyRlbWl0dGVyUHVibGljLm9mZi5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQdWJsaWMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cykpLHRoaXN9LG9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19kZXN0cm95ZWQ/dGhpcy5fX2Rlc3Ryb3lFcnJvcigpOnRoaXMuX18kZW1pdHRlclB1YmxpYy5vbi5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQdWJsaWMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cykpLHRoaXN9LG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZGVzdHJveWVkP3RoaXMuX19kZXN0cm95RXJyb3IoKTp0aGlzLl9fJGVtaXR0ZXJQdWJsaWMub25lLmFwcGx5KHRoaXMuX18kZW1pdHRlclB1YmxpYyxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSksdGhpc30sb3BlbjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fX2Rlc3Ryb3llZD90aGlzLl9fZGVzdHJveUVycm9yKCk6dGhpcy5fb3BlbihudWxsLGEpLHRoaXN9LG9wdGlvbjpmdW5jdGlvbihiLGMpe3JldHVybiB2b2lkIDA9PT1jP3RoaXMuX19vcHRpb25zW2JdOih0aGlzLl9fZGVzdHJveWVkP3RoaXMuX19kZXN0cm95RXJyb3IoKToodGhpcy5fX29wdGlvbnNbYl09Yyx0aGlzLl9fb3B0aW9uc0Zvcm1hdCgpLGEuaW5BcnJheShiLFtcInRyaWdnZXJcIixcInRyaWdnZXJDbG9zZVwiLFwidHJpZ2dlck9wZW5cIl0pPj0wJiZ0aGlzLl9fcHJlcGFyZU9yaWdpbigpLFwic2VsZkRlc3RydWN0aW9uXCI9PT1iJiZ0aGlzLl9fcHJlcGFyZUdDKCkpLHRoaXMpfSxyZXBvc2l0aW9uOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztyZXR1cm4gYy5fX2Rlc3Ryb3llZD9jLl9fZGVzdHJveUVycm9yKCk6XCJjbG9zZWRcIiE9Yy5fX3N0YXRlJiZkKGMuXyRvcmlnaW4pJiYoYnx8ZChjLl8kdG9vbHRpcCkpJiYoYnx8Yy5fJHRvb2x0aXAuZGV0YWNoKCksYy5fX0dlb21ldHJ5PWMuX19nZW9tZXRyeSgpLGMuX3RyaWdnZXIoe3R5cGU6XCJyZXBvc2l0aW9uXCIsZXZlbnQ6YSxoZWxwZXI6e2dlbzpjLl9fR2VvbWV0cnl9fSkpLGN9LHNob3c6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMub3BlbihhKX0sc3RhdHVzOmZ1bmN0aW9uKCl7cmV0dXJue2Rlc3Ryb3llZDp0aGlzLl9fZGVzdHJveWVkLGVuYWJsZWQ6dGhpcy5fX2VuYWJsZWQsb3BlbjpcImNsb3NlZFwiIT09dGhpcy5fX3N0YXRlLHN0YXRlOnRoaXMuX19zdGF0ZX19LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19kZXN0cm95ZWQ/dGhpcy5fX2Rlc3Ryb3lFcnJvcigpOnRoaXMuX18kZW1pdHRlclB1YmxpYy50cmlnZ2VySGFuZGxlci5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQdWJsaWMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cykpLHRoaXN9fSxhLmZuLnRvb2x0aXBzdGVyPWZ1bmN0aW9uKCl7dmFyIGI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cyksYz1cIllvdSBhcmUgdXNpbmcgYSBzaW5nbGUgSFRNTCBlbGVtZW50IGFzIGNvbnRlbnQgZm9yIHNldmVyYWwgdG9vbHRpcHMuIFlvdSBwcm9iYWJseSB3YW50IHRvIHNldCB0aGUgY29udGVudENsb25pbmcgb3B0aW9uIHRvIFRSVUUuXCI7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiB0aGlzO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBiWzBdKXt2YXIgZD1cIiMqJH4mXCI7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPWEodGhpcykuZGF0YShcInRvb2x0aXBzdGVyLW5zXCIpLGY9ZT9hKHRoaXMpLmRhdGEoZVswXSk6bnVsbDtpZighZil0aHJvdyBuZXcgRXJyb3IoXCJZb3UgY2FsbGVkIFRvb2x0aXBzdGVyJ3MgXFxcIlwiK2JbMF0rJ1wiIG1ldGhvZCBvbiBhbiB1bmluaXRpYWxpemVkIGVsZW1lbnQnKTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBmW2JbMF1dKXRocm93IG5ldyBFcnJvcignVW5rbm93biBtZXRob2QgXCInK2JbMF0rJ1wiJyk7dGhpcy5sZW5ndGg+MSYmXCJjb250ZW50XCI9PWJbMF0mJihiWzFdaW5zdGFuY2VvZiBhfHxcIm9iamVjdFwiPT10eXBlb2YgYlsxXSYmbnVsbCE9YlsxXSYmYlsxXS50YWdOYW1lKSYmIWYuX19vcHRpb25zLmNvbnRlbnRDbG9uaW5nJiZmLl9fb3B0aW9ucy5kZWJ1ZyYmY29uc29sZS5sb2coYyk7dmFyIGc9ZltiWzBdXShiWzFdLGJbMl0pO3JldHVybiBnIT09Znx8XCJpbnN0YW5jZVwiPT09YlswXT8oZD1nLCExKTp2b2lkIDB9KSxcIiMqJH4mXCIhPT1kP2Q6dGhpc31hLnRvb2x0aXBzdGVyLl9faW5zdGFuY2VzTGF0ZXN0QXJyPVtdO3ZhciBlPWJbMF0mJnZvaWQgMCE9PWJbMF0ubXVsdGlwbGUsZz1lJiZiWzBdLm11bHRpcGxlfHwhZSYmZi5tdWx0aXBsZSxoPWJbMF0mJnZvaWQgMCE9PWJbMF0uY29udGVudCxpPWgmJmJbMF0uY29udGVudHx8IWgmJmYuY29udGVudCxqPWJbMF0mJnZvaWQgMCE9PWJbMF0uY29udGVudENsb25pbmcsaz1qJiZiWzBdLmNvbnRlbnRDbG9uaW5nfHwhaiYmZi5jb250ZW50Q2xvbmluZyxsPWJbMF0mJnZvaWQgMCE9PWJbMF0uZGVidWcsbT1sJiZiWzBdLmRlYnVnfHwhbCYmZi5kZWJ1ZztyZXR1cm4gdGhpcy5sZW5ndGg+MSYmKGkgaW5zdGFuY2VvZiBhfHxcIm9iamVjdFwiPT10eXBlb2YgaSYmbnVsbCE9aSYmaS50YWdOYW1lKSYmIWsmJm0mJmNvbnNvbGUubG9nKGMpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPSExLGQ9YSh0aGlzKSxlPWQuZGF0YShcInRvb2x0aXBzdGVyLW5zXCIpLGY9bnVsbDtlP2c/Yz0hMDptJiYoY29uc29sZS5sb2coXCJUb29sdGlwc3Rlcjogb25lIG9yIG1vcmUgdG9vbHRpcHMgYXJlIGFscmVhZHkgYXR0YWNoZWQgdG8gdGhlIGVsZW1lbnQgYmVsb3cuIElnbm9yaW5nLlwiKSxjb25zb2xlLmxvZyh0aGlzKSk6Yz0hMCxjJiYoZj1uZXcgYS5Ub29sdGlwc3Rlcih0aGlzLGJbMF0pLGV8fChlPVtdKSxlLnB1c2goZi5fX25hbWVzcGFjZSksZC5kYXRhKFwidG9vbHRpcHN0ZXItbnNcIixlKSxkLmRhdGEoZi5fX25hbWVzcGFjZSxmKSxmLl9fb3B0aW9ucy5mdW5jdGlvbkluaXQmJmYuX19vcHRpb25zLmZ1bmN0aW9uSW5pdC5jYWxsKGYsZix7b3JpZ2luOnRoaXN9KSxmLl90cmlnZ2VyKFwiaW5pdFwiKSksYS50b29sdGlwc3Rlci5fX2luc3RhbmNlc0xhdGVzdEFyci5wdXNoKGYpfSksdGhpc30sYi5wcm90b3R5cGU9e19faW5pdDpmdW5jdGlvbihiKXt0aGlzLl9fJHRvb2x0aXA9Yix0aGlzLl9fJHRvb2x0aXAuY3NzKHtsZWZ0OjAsb3ZlcmZsb3c6XCJoaWRkZW5cIixwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOjB9KS5maW5kKFwiLnRvb2x0aXBzdGVyLWNvbnRlbnRcIikuY3NzKFwib3ZlcmZsb3dcIixcImF1dG9cIiksdGhpcy4kY29udGFpbmVyPWEoJzxkaXYgY2xhc3M9XCJ0b29sdGlwc3Rlci1ydWxlclwiPjwvZGl2PicpLmFwcGVuZCh0aGlzLl9fJHRvb2x0aXApLmFwcGVuZFRvKGgud2luZG93LmRvY3VtZW50LmJvZHkpfSxfX2ZvcmNlUmVkcmF3OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fXyR0b29sdGlwLnBhcmVudCgpO3RoaXMuX18kdG9vbHRpcC5kZXRhY2goKSx0aGlzLl9fJHRvb2x0aXAuYXBwZW5kVG8oYSl9LGNvbnN0cmFpbjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmNvbnN0cmFpbnRzPXt3aWR0aDphLGhlaWdodDpifSx0aGlzLl9fJHRvb2x0aXAuY3NzKHtkaXNwbGF5OlwiYmxvY2tcIixoZWlnaHQ6XCJcIixvdmVyZmxvdzpcImF1dG9cIix3aWR0aDphfSksdGhpc30sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX18kdG9vbHRpcC5kZXRhY2goKS5maW5kKFwiLnRvb2x0aXBzdGVyLWNvbnRlbnRcIikuY3NzKHtkaXNwbGF5OlwiXCIsb3ZlcmZsb3c6XCJcIn0pLHRoaXMuJGNvbnRhaW5lci5yZW1vdmUoKX0sZnJlZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnN0cmFpbnRzPW51bGwsdGhpcy5fXyR0b29sdGlwLmNzcyh7ZGlzcGxheTpcIlwiLGhlaWdodDpcIlwiLG92ZXJmbG93OlwidmlzaWJsZVwiLHdpZHRoOlwiXCJ9KSx0aGlzfSxtZWFzdXJlOmZ1bmN0aW9uKCl7dGhpcy5fX2ZvcmNlUmVkcmF3KCk7dmFyIGE9dGhpcy5fXyR0b29sdGlwWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGI9e3NpemU6e2hlaWdodDphLmhlaWdodHx8YS5ib3R0b20tYS50b3Asd2lkdGg6YS53aWR0aHx8YS5yaWdodC1hLmxlZnR9fTtpZih0aGlzLmNvbnN0cmFpbnRzKXt2YXIgYz10aGlzLl9fJHRvb2x0aXAuZmluZChcIi50b29sdGlwc3Rlci1jb250ZW50XCIpLGQ9dGhpcy5fXyR0b29sdGlwLm91dGVySGVpZ2h0KCksZT1jWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGY9e2hlaWdodDpkPD10aGlzLmNvbnN0cmFpbnRzLmhlaWdodCx3aWR0aDphLndpZHRoPD10aGlzLmNvbnN0cmFpbnRzLndpZHRoJiZlLndpZHRoPj1jWzBdLnNjcm9sbFdpZHRoLTF9O2IuZml0cz1mLmhlaWdodCYmZi53aWR0aH1yZXR1cm4gaC5JRSYmaC5JRTw9MTEmJmIuc2l6ZS53aWR0aCE9PWgud2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCYmKGIuc2l6ZS53aWR0aD1NYXRoLmNlaWwoYi5zaXplLndpZHRoKSsxKSxifX07dmFyIGo9bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpOy0xIT1qLmluZGV4T2YoXCJtc2llXCIpP2guSUU9cGFyc2VJbnQoai5zcGxpdChcIm1zaWVcIilbMV0pOi0xIT09ai50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJ0cmlkZW50XCIpJiYtMSE9PWouaW5kZXhPZihcIiBydjoxMVwiKT9oLklFPTExOi0xIT1qLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcImVkZ2UvXCIpJiYoaC5JRT1wYXJzZUludChqLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCJlZGdlL1wiKVsxXSkpO3ZhciBrPVwidG9vbHRpcHN0ZXIuc2lkZVRpcFwiO3JldHVybiBhLnRvb2x0aXBzdGVyLl9wbHVnaW4oe25hbWU6ayxpbnN0YW5jZTp7X19kZWZhdWx0czpmdW5jdGlvbigpe3JldHVybnthcnJvdzohMCxkaXN0YW5jZTo2LGZ1bmN0aW9uUG9zaXRpb246bnVsbCxtYXhXaWR0aDpudWxsLG1pbkludGVyc2VjdGlvbjoxNixtaW5XaWR0aDowLHBvc2l0aW9uOm51bGwsc2lkZTpcInRvcFwiLHZpZXdwb3J0QXdhcmU6ITB9fSxfX2luaXQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztiLl9faW5zdGFuY2U9YSxiLl9fbmFtZXNwYWNlPVwidG9vbHRpcHN0ZXItc2lkZVRpcC1cIitNYXRoLnJvdW5kKDFlNipNYXRoLnJhbmRvbSgpKSxiLl9fcHJldmlvdXNTdGF0ZT1cImNsb3NlZFwiLGIuX19vcHRpb25zLGIuX19vcHRpb25zRm9ybWF0KCksYi5fX2luc3RhbmNlLl9vbihcInN0YXRlLlwiK2IuX19uYW1lc3BhY2UsZnVuY3Rpb24oYSl7XCJjbG9zZWRcIj09YS5zdGF0ZT9iLl9fY2xvc2UoKTpcImFwcGVhcmluZ1wiPT1hLnN0YXRlJiZcImNsb3NlZFwiPT1iLl9fcHJldmlvdXNTdGF0ZSYmYi5fX2NyZWF0ZSgpLGIuX19wcmV2aW91c1N0YXRlPWEuc3RhdGV9KSxiLl9faW5zdGFuY2UuX29uKFwib3B0aW9ucy5cIitiLl9fbmFtZXNwYWNlLGZ1bmN0aW9uKCl7Yi5fX29wdGlvbnNGb3JtYXQoKX0pLGIuX19pbnN0YW5jZS5fb24oXCJyZXBvc2l0aW9uLlwiK2IuX19uYW1lc3BhY2UsZnVuY3Rpb24oYSl7Yi5fX3JlcG9zaXRpb24oYS5ldmVudCxhLmhlbHBlcil9KX0sX19jbG9zZTpmdW5jdGlvbigpe3RoaXMuX19pbnN0YW5jZS5jb250ZW50KClpbnN0YW5jZW9mIGEmJnRoaXMuX19pbnN0YW5jZS5jb250ZW50KCkuZGV0YWNoKCksdGhpcy5fX2luc3RhbmNlLl8kdG9vbHRpcC5yZW1vdmUoKSx0aGlzLl9faW5zdGFuY2UuXyR0b29sdGlwPW51bGx9LF9fY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGI9YSgnPGRpdiBjbGFzcz1cInRvb2x0aXBzdGVyLWJhc2UgdG9vbHRpcHN0ZXItc2lkZXRpcFwiPjxkaXYgY2xhc3M9XCJ0b29sdGlwc3Rlci1ib3hcIj48ZGl2IGNsYXNzPVwidG9vbHRpcHN0ZXItY29udGVudFwiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9XCJ0b29sdGlwc3Rlci1hcnJvd1wiPjxkaXYgY2xhc3M9XCJ0b29sdGlwc3Rlci1hcnJvdy11bmNyb3BwZWRcIj48ZGl2IGNsYXNzPVwidG9vbHRpcHN0ZXItYXJyb3ctYm9yZGVyXCI+PC9kaXY+PGRpdiBjbGFzcz1cInRvb2x0aXBzdGVyLWFycm93LWJhY2tncm91bmRcIj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4nKTt0aGlzLl9fb3B0aW9ucy5hcnJvd3x8Yi5maW5kKFwiLnRvb2x0aXBzdGVyLWJveFwiKS5jc3MoXCJtYXJnaW5cIiwwKS5lbmQoKS5maW5kKFwiLnRvb2x0aXBzdGVyLWFycm93XCIpLmhpZGUoKSx0aGlzLl9fb3B0aW9ucy5taW5XaWR0aCYmYi5jc3MoXCJtaW4td2lkdGhcIix0aGlzLl9fb3B0aW9ucy5taW5XaWR0aCtcInB4XCIpLHRoaXMuX19vcHRpb25zLm1heFdpZHRoJiZiLmNzcyhcIm1heC13aWR0aFwiLHRoaXMuX19vcHRpb25zLm1heFdpZHRoK1wicHhcIiksXG50aGlzLl9faW5zdGFuY2UuXyR0b29sdGlwPWIsdGhpcy5fX2luc3RhbmNlLl90cmlnZ2VyKFwiY3JlYXRlZFwiKX0sX19kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fX2luc3RhbmNlLl9vZmYoXCIuXCIrc2VsZi5fX25hbWVzcGFjZSl9LF9fb3B0aW9uc0Zvcm1hdDpmdW5jdGlvbigpe3ZhciBiPXRoaXM7aWYoYi5fX29wdGlvbnM9Yi5fX2luc3RhbmNlLl9vcHRpb25zRXh0cmFjdChrLGIuX19kZWZhdWx0cygpKSxiLl9fb3B0aW9ucy5wb3NpdGlvbiYmKGIuX19vcHRpb25zLnNpZGU9Yi5fX29wdGlvbnMucG9zaXRpb24pLFwib2JqZWN0XCIhPXR5cGVvZiBiLl9fb3B0aW9ucy5kaXN0YW5jZSYmKGIuX19vcHRpb25zLmRpc3RhbmNlPVtiLl9fb3B0aW9ucy5kaXN0YW5jZV0pLGIuX19vcHRpb25zLmRpc3RhbmNlLmxlbmd0aDw0JiYodm9pZCAwPT09Yi5fX29wdGlvbnMuZGlzdGFuY2VbMV0mJihiLl9fb3B0aW9ucy5kaXN0YW5jZVsxXT1iLl9fb3B0aW9ucy5kaXN0YW5jZVswXSksdm9pZCAwPT09Yi5fX29wdGlvbnMuZGlzdGFuY2VbMl0mJihiLl9fb3B0aW9ucy5kaXN0YW5jZVsyXT1iLl9fb3B0aW9ucy5kaXN0YW5jZVswXSksdm9pZCAwPT09Yi5fX29wdGlvbnMuZGlzdGFuY2VbM10mJihiLl9fb3B0aW9ucy5kaXN0YW5jZVszXT1iLl9fb3B0aW9ucy5kaXN0YW5jZVsxXSkpLGIuX19vcHRpb25zLmRpc3RhbmNlPXt0b3A6Yi5fX29wdGlvbnMuZGlzdGFuY2VbMF0scmlnaHQ6Yi5fX29wdGlvbnMuZGlzdGFuY2VbMV0sYm90dG9tOmIuX19vcHRpb25zLmRpc3RhbmNlWzJdLGxlZnQ6Yi5fX29wdGlvbnMuZGlzdGFuY2VbM119LFwic3RyaW5nXCI9PXR5cGVvZiBiLl9fb3B0aW9ucy5zaWRlKXt2YXIgYz17dG9wOlwiYm90dG9tXCIscmlnaHQ6XCJsZWZ0XCIsYm90dG9tOlwidG9wXCIsbGVmdDpcInJpZ2h0XCJ9O2IuX19vcHRpb25zLnNpZGU9W2IuX19vcHRpb25zLnNpZGUsY1tiLl9fb3B0aW9ucy5zaWRlXV0sXCJsZWZ0XCI9PWIuX19vcHRpb25zLnNpZGVbMF18fFwicmlnaHRcIj09Yi5fX29wdGlvbnMuc2lkZVswXT9iLl9fb3B0aW9ucy5zaWRlLnB1c2goXCJ0b3BcIixcImJvdHRvbVwiKTpiLl9fb3B0aW9ucy5zaWRlLnB1c2goXCJyaWdodFwiLFwibGVmdFwiKX02PT09YS50b29sdGlwc3Rlci5fZW52LklFJiZiLl9fb3B0aW9ucy5hcnJvdyE9PSEwJiYoYi5fX29wdGlvbnMuYXJyb3c9ITEpfSxfX3JlcG9zaXRpb246ZnVuY3Rpb24oYixjKXt2YXIgZCxlPXRoaXMsZj1lLl9fdGFyZ2V0RmluZChjKSxnPVtdO2UuX19pbnN0YW5jZS5fJHRvb2x0aXAuZGV0YWNoKCk7dmFyIGg9ZS5fX2luc3RhbmNlLl8kdG9vbHRpcC5jbG9uZSgpLGk9YS50b29sdGlwc3Rlci5fZ2V0UnVsZXIoaCksaj0hMSxrPWUuX19pbnN0YW5jZS5vcHRpb24oXCJhbmltYXRpb25cIik7c3dpdGNoKGsmJmgucmVtb3ZlQ2xhc3MoXCJ0b29sdGlwc3Rlci1cIitrKSxhLmVhY2goW1wid2luZG93XCIsXCJkb2N1bWVudFwiXSxmdW5jdGlvbihkLGspe3ZhciBsPW51bGw7aWYoZS5fX2luc3RhbmNlLl90cmlnZ2VyKHtjb250YWluZXI6ayxoZWxwZXI6YyxzYXRpc2ZpZWQ6aix0YWtlVGVzdDpmdW5jdGlvbihhKXtsPWF9LHJlc3VsdHM6Zyx0eXBlOlwicG9zaXRpb25UZXN0XCJ9KSwxPT1sfHwwIT1sJiYwPT1qJiYoXCJ3aW5kb3dcIiE9a3x8ZS5fX29wdGlvbnMudmlld3BvcnRBd2FyZSkpZm9yKHZhciBkPTA7ZDxlLl9fb3B0aW9ucy5zaWRlLmxlbmd0aDtkKyspe3ZhciBtPXtob3Jpem9udGFsOjAsdmVydGljYWw6MH0sbj1lLl9fb3B0aW9ucy5zaWRlW2RdO1widG9wXCI9PW58fFwiYm90dG9tXCI9PW4/bS52ZXJ0aWNhbD1lLl9fb3B0aW9ucy5kaXN0YW5jZVtuXTptLmhvcml6b250YWw9ZS5fX29wdGlvbnMuZGlzdGFuY2Vbbl0sZS5fX3NpZGVDaGFuZ2UoaCxuKSxhLmVhY2goW1wibmF0dXJhbFwiLFwiY29uc3RyYWluZWRcIl0sZnVuY3Rpb24oYSxkKXtpZihsPW51bGwsZS5fX2luc3RhbmNlLl90cmlnZ2VyKHtjb250YWluZXI6ayxldmVudDpiLGhlbHBlcjpjLG1vZGU6ZCxyZXN1bHRzOmcsc2F0aXNmaWVkOmosc2lkZTpuLHRha2VUZXN0OmZ1bmN0aW9uKGEpe2w9YX0sdHlwZTpcInBvc2l0aW9uVGVzdFwifSksMT09bHx8MCE9bCYmMD09ail7dmFyIGg9e2NvbnRhaW5lcjprLGRpc3RhbmNlOm0sZml0czpudWxsLG1vZGU6ZCxvdXRlclNpemU6bnVsbCxzaWRlOm4sc2l6ZTpudWxsLHRhcmdldDpmW25dLHdob2xlOm51bGx9LG89XCJuYXR1cmFsXCI9PWQ/aS5mcmVlKCk6aS5jb25zdHJhaW4oYy5nZW8uYXZhaWxhYmxlW2tdW25dLndpZHRoLW0uaG9yaXpvbnRhbCxjLmdlby5hdmFpbGFibGVba11bbl0uaGVpZ2h0LW0udmVydGljYWwpLHA9by5tZWFzdXJlKCk7aWYoaC5zaXplPXAuc2l6ZSxoLm91dGVyU2l6ZT17aGVpZ2h0OnAuc2l6ZS5oZWlnaHQrbS52ZXJ0aWNhbCx3aWR0aDpwLnNpemUud2lkdGgrbS5ob3Jpem9udGFsfSxcIm5hdHVyYWxcIj09ZD9jLmdlby5hdmFpbGFibGVba11bbl0ud2lkdGg+PWgub3V0ZXJTaXplLndpZHRoJiZjLmdlby5hdmFpbGFibGVba11bbl0uaGVpZ2h0Pj1oLm91dGVyU2l6ZS5oZWlnaHQ/aC5maXRzPSEwOmguZml0cz0hMTpoLmZpdHM9cC5maXRzLFwid2luZG93XCI9PWsmJihoLmZpdHM/XCJ0b3BcIj09bnx8XCJib3R0b21cIj09bj9oLndob2xlPWMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQucmlnaHQ+PWUuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbiYmYy5nZW8ud2luZG93LnNpemUud2lkdGgtYy5nZW8ub3JpZ2luLndpbmRvd09mZnNldC5sZWZ0Pj1lLl9fb3B0aW9ucy5taW5JbnRlcnNlY3Rpb246aC53aG9sZT1jLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0LmJvdHRvbT49ZS5fX29wdGlvbnMubWluSW50ZXJzZWN0aW9uJiZjLmdlby53aW5kb3cuc2l6ZS5oZWlnaHQtYy5nZW8ub3JpZ2luLndpbmRvd09mZnNldC50b3A+PWUuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbjpoLndob2xlPSExKSxnLnB1c2goaCksaC53aG9sZSlqPSEwO2Vsc2UgaWYoXCJuYXR1cmFsXCI9PWgubW9kZSYmKGguZml0c3x8aC5zaXplLndpZHRoPD1jLmdlby5hdmFpbGFibGVba11bbl0ud2lkdGgpKXJldHVybiExfX0pfX0pLGUuX19pbnN0YW5jZS5fdHJpZ2dlcih7ZWRpdDpmdW5jdGlvbihhKXtnPWF9LGV2ZW50OmIsaGVscGVyOmMscmVzdWx0czpnLHR5cGU6XCJwb3NpdGlvblRlc3RlZFwifSksZy5zb3J0KGZ1bmN0aW9uKGEsYil7aWYoYS53aG9sZSYmIWIud2hvbGUpcmV0dXJuLTE7aWYoIWEud2hvbGUmJmIud2hvbGUpcmV0dXJuIDE7aWYoYS53aG9sZSYmYi53aG9sZSl7dmFyIGM9ZS5fX29wdGlvbnMuc2lkZS5pbmRleE9mKGEuc2lkZSksZD1lLl9fb3B0aW9ucy5zaWRlLmluZGV4T2YoYi5zaWRlKTtyZXR1cm4gZD5jPy0xOmM+ZD8xOlwibmF0dXJhbFwiPT1hLm1vZGU/LTE6MX1pZihhLmZpdHMmJiFiLmZpdHMpcmV0dXJuLTE7aWYoIWEuZml0cyYmYi5maXRzKXJldHVybiAxO2lmKGEuZml0cyYmYi5maXRzKXt2YXIgYz1lLl9fb3B0aW9ucy5zaWRlLmluZGV4T2YoYS5zaWRlKSxkPWUuX19vcHRpb25zLnNpZGUuaW5kZXhPZihiLnNpZGUpO3JldHVybiBkPmM/LTE6Yz5kPzE6XCJuYXR1cmFsXCI9PWEubW9kZT8tMToxfXJldHVyblwiZG9jdW1lbnRcIj09YS5jb250YWluZXImJlwiYm90dG9tXCI9PWEuc2lkZSYmXCJuYXR1cmFsXCI9PWEubW9kZT8tMToxfSksZD1nWzBdLGQuY29vcmQ9e30sZC5zaWRlKXtjYXNlXCJsZWZ0XCI6Y2FzZVwicmlnaHRcIjpkLmNvb3JkLnRvcD1NYXRoLmZsb29yKGQudGFyZ2V0LWQuc2l6ZS5oZWlnaHQvMik7YnJlYWs7Y2FzZVwiYm90dG9tXCI6Y2FzZVwidG9wXCI6ZC5jb29yZC5sZWZ0PU1hdGguZmxvb3IoZC50YXJnZXQtZC5zaXplLndpZHRoLzIpfXN3aXRjaChkLnNpZGUpe2Nhc2VcImxlZnRcIjpkLmNvb3JkLmxlZnQ9Yy5nZW8ub3JpZ2luLndpbmRvd09mZnNldC5sZWZ0LWQub3V0ZXJTaXplLndpZHRoO2JyZWFrO2Nhc2VcInJpZ2h0XCI6ZC5jb29yZC5sZWZ0PWMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQucmlnaHQrZC5kaXN0YW5jZS5ob3Jpem9udGFsO2JyZWFrO2Nhc2VcInRvcFwiOmQuY29vcmQudG9wPWMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQudG9wLWQub3V0ZXJTaXplLmhlaWdodDticmVhaztjYXNlXCJib3R0b21cIjpkLmNvb3JkLnRvcD1jLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0LmJvdHRvbStkLmRpc3RhbmNlLnZlcnRpY2FsfVwid2luZG93XCI9PWQuY29udGFpbmVyP1widG9wXCI9PWQuc2lkZXx8XCJib3R0b21cIj09ZC5zaWRlP2QuY29vcmQubGVmdDwwP2MuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQucmlnaHQtdGhpcy5fX29wdGlvbnMubWluSW50ZXJzZWN0aW9uPj0wP2QuY29vcmQubGVmdD0wOmQuY29vcmQubGVmdD1jLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0LnJpZ2h0LXRoaXMuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbi0xOmQuY29vcmQubGVmdD5jLmdlby53aW5kb3cuc2l6ZS53aWR0aC1kLnNpemUud2lkdGgmJihjLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0LmxlZnQrdGhpcy5fX29wdGlvbnMubWluSW50ZXJzZWN0aW9uPD1jLmdlby53aW5kb3cuc2l6ZS53aWR0aD9kLmNvb3JkLmxlZnQ9Yy5nZW8ud2luZG93LnNpemUud2lkdGgtZC5zaXplLndpZHRoOmQuY29vcmQubGVmdD1jLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0LmxlZnQrdGhpcy5fX29wdGlvbnMubWluSW50ZXJzZWN0aW9uKzEtZC5zaXplLndpZHRoKTpkLmNvb3JkLnRvcDwwP2MuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQuYm90dG9tLXRoaXMuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbj49MD9kLmNvb3JkLnRvcD0wOmQuY29vcmQudG9wPWMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQuYm90dG9tLXRoaXMuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbi0xOmQuY29vcmQudG9wPmMuZ2VvLndpbmRvdy5zaXplLmhlaWdodC1kLnNpemUuaGVpZ2h0JiYoYy5nZW8ub3JpZ2luLndpbmRvd09mZnNldC50b3ArdGhpcy5fX29wdGlvbnMubWluSW50ZXJzZWN0aW9uPD1jLmdlby53aW5kb3cuc2l6ZS5oZWlnaHQ/ZC5jb29yZC50b3A9Yy5nZW8ud2luZG93LnNpemUuaGVpZ2h0LWQuc2l6ZS5oZWlnaHQ6ZC5jb29yZC50b3A9Yy5nZW8ub3JpZ2luLndpbmRvd09mZnNldC50b3ArdGhpcy5fX29wdGlvbnMubWluSW50ZXJzZWN0aW9uKzEtZC5zaXplLmhlaWdodCk6KGQuY29vcmQubGVmdD5jLmdlby53aW5kb3cuc2l6ZS53aWR0aC1kLnNpemUud2lkdGgmJihkLmNvb3JkLmxlZnQ9Yy5nZW8ud2luZG93LnNpemUud2lkdGgtZC5zaXplLndpZHRoKSxkLmNvb3JkLmxlZnQ8MCYmKGQuY29vcmQubGVmdD0wKSksZS5fX3NpZGVDaGFuZ2UoaCxkLnNpZGUpLGMudG9vbHRpcENsb25lPWhbMF0sYy50b29sdGlwUGFyZW50PWUuX19pbnN0YW5jZS5vcHRpb24oXCJwYXJlbnRcIikucGFyZW50WzBdLGMubW9kZT1kLm1vZGUsYy53aG9sZT1kLndob2xlLGMub3JpZ2luPWUuX19pbnN0YW5jZS5fJG9yaWdpblswXSxjLnRvb2x0aXA9ZS5fX2luc3RhbmNlLl8kdG9vbHRpcFswXSxkZWxldGUgZC5jb250YWluZXIsZGVsZXRlIGQuZml0cyxkZWxldGUgZC5tb2RlLGRlbGV0ZSBkLm91dGVyU2l6ZSxkZWxldGUgZC53aG9sZSxkLmRpc3RhbmNlPWQuZGlzdGFuY2UuaG9yaXpvbnRhbHx8ZC5kaXN0YW5jZS52ZXJ0aWNhbDt2YXIgbD1hLmV4dGVuZCghMCx7fSxkKTtpZihlLl9faW5zdGFuY2UuX3RyaWdnZXIoe2VkaXQ6ZnVuY3Rpb24oYSl7ZD1hfSxldmVudDpiLGhlbHBlcjpjLHBvc2l0aW9uOmwsdHlwZTpcInBvc2l0aW9uXCJ9KSxlLl9fb3B0aW9ucy5mdW5jdGlvblBvc2l0aW9uKXt2YXIgbT1lLl9fb3B0aW9ucy5mdW5jdGlvblBvc2l0aW9uLmNhbGwoZSxlLl9faW5zdGFuY2UsYyxsKTttJiYoZD1tKX1pLmRlc3Ryb3koKTt2YXIgbixvO1widG9wXCI9PWQuc2lkZXx8XCJib3R0b21cIj09ZC5zaWRlPyhuPXtwcm9wOlwibGVmdFwiLHZhbDpkLnRhcmdldC1kLmNvb3JkLmxlZnR9LG89ZC5zaXplLndpZHRoLXRoaXMuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbik6KG49e3Byb3A6XCJ0b3BcIix2YWw6ZC50YXJnZXQtZC5jb29yZC50b3B9LG89ZC5zaXplLmhlaWdodC10aGlzLl9fb3B0aW9ucy5taW5JbnRlcnNlY3Rpb24pLG4udmFsPHRoaXMuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbj9uLnZhbD10aGlzLl9fb3B0aW9ucy5taW5JbnRlcnNlY3Rpb246bi52YWw+byYmKG4udmFsPW8pO3ZhciBwO3A9Yy5nZW8ub3JpZ2luLmZpeGVkTGluZWFnZT9jLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0OntsZWZ0OmMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQubGVmdCtjLmdlby53aW5kb3cuc2Nyb2xsLmxlZnQsdG9wOmMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQudG9wK2MuZ2VvLndpbmRvdy5zY3JvbGwudG9wfSxkLmNvb3JkPXtsZWZ0OnAubGVmdCsoZC5jb29yZC5sZWZ0LWMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQubGVmdCksdG9wOnAudG9wKyhkLmNvb3JkLnRvcC1jLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0LnRvcCl9LGUuX19zaWRlQ2hhbmdlKGUuX19pbnN0YW5jZS5fJHRvb2x0aXAsZC5zaWRlKSxjLmdlby5vcmlnaW4uZml4ZWRMaW5lYWdlP2UuX19pbnN0YW5jZS5fJHRvb2x0aXAuY3NzKFwicG9zaXRpb25cIixcImZpeGVkXCIpOmUuX19pbnN0YW5jZS5fJHRvb2x0aXAuY3NzKFwicG9zaXRpb25cIixcIlwiKSxlLl9faW5zdGFuY2UuXyR0b29sdGlwLmNzcyh7bGVmdDpkLmNvb3JkLmxlZnQsdG9wOmQuY29vcmQudG9wLGhlaWdodDpkLnNpemUuaGVpZ2h0LHdpZHRoOmQuc2l6ZS53aWR0aH0pLmZpbmQoXCIudG9vbHRpcHN0ZXItYXJyb3dcIikuY3NzKHtsZWZ0OlwiXCIsdG9wOlwiXCJ9KS5jc3Mobi5wcm9wLG4udmFsKSxlLl9faW5zdGFuY2UuXyR0b29sdGlwLmFwcGVuZFRvKGUuX19pbnN0YW5jZS5vcHRpb24oXCJwYXJlbnRcIikpLGUuX19pbnN0YW5jZS5fdHJpZ2dlcih7dHlwZTpcInJlcG9zaXRpb25lZFwiLGV2ZW50OmIscG9zaXRpb246ZH0pfSxfX3NpZGVDaGFuZ2U6ZnVuY3Rpb24oYSxiKXthLnJlbW92ZUNsYXNzKFwidG9vbHRpcHN0ZXItYm90dG9tXCIpLnJlbW92ZUNsYXNzKFwidG9vbHRpcHN0ZXItbGVmdFwiKS5yZW1vdmVDbGFzcyhcInRvb2x0aXBzdGVyLXJpZ2h0XCIpLnJlbW92ZUNsYXNzKFwidG9vbHRpcHN0ZXItdG9wXCIpLmFkZENsYXNzKFwidG9vbHRpcHN0ZXItXCIrYil9LF9fdGFyZ2V0RmluZDpmdW5jdGlvbihhKXt2YXIgYj17fSxjPXRoaXMuX19pbnN0YW5jZS5fJG9yaWdpblswXS5nZXRDbGllbnRSZWN0cygpO2lmKGMubGVuZ3RoPjEpe3ZhciBkPXRoaXMuX19pbnN0YW5jZS5fJG9yaWdpbi5jc3MoXCJvcGFjaXR5XCIpOzE9PWQmJih0aGlzLl9faW5zdGFuY2UuXyRvcmlnaW4uY3NzKFwib3BhY2l0eVwiLC45OSksYz10aGlzLl9faW5zdGFuY2UuXyRvcmlnaW5bMF0uZ2V0Q2xpZW50UmVjdHMoKSx0aGlzLl9faW5zdGFuY2UuXyRvcmlnaW4uY3NzKFwib3BhY2l0eVwiLDEpKX1pZihjLmxlbmd0aDwyKWIudG9wPU1hdGguZmxvb3IoYS5nZW8ub3JpZ2luLndpbmRvd09mZnNldC5sZWZ0K2EuZ2VvLm9yaWdpbi5zaXplLndpZHRoLzIpLGIuYm90dG9tPWIudG9wLGIubGVmdD1NYXRoLmZsb29yKGEuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQudG9wK2EuZ2VvLm9yaWdpbi5zaXplLmhlaWdodC8yKSxiLnJpZ2h0PWIubGVmdDtlbHNle3ZhciBlPWNbMF07Yi50b3A9TWF0aC5mbG9vcihlLmxlZnQrKGUucmlnaHQtZS5sZWZ0KS8yKSxlPWMubGVuZ3RoPjI/Y1tNYXRoLmNlaWwoYy5sZW5ndGgvMiktMV06Y1swXSxiLnJpZ2h0PU1hdGguZmxvb3IoZS50b3ArKGUuYm90dG9tLWUudG9wKS8yKSxlPWNbYy5sZW5ndGgtMV0sYi5ib3R0b209TWF0aC5mbG9vcihlLmxlZnQrKGUucmlnaHQtZS5sZWZ0KS8yKSxlPWMubGVuZ3RoPjI/Y1tNYXRoLmNlaWwoKGMubGVuZ3RoKzEpLzIpLTFdOmNbYy5sZW5ndGgtMV0sYi5sZWZ0PU1hdGguZmxvb3IoZS50b3ArKGUuYm90dG9tLWUudG9wKS8yKX1yZXR1cm4gYn19fSksYX0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfSwgX3R5cGVvZihvYmopOyB9XG4vKlxyXG4gKiAgQm9vdHN0cmFwIFRvdWNoc3BpbiAtIHY0LjcuM1xyXG4gKiAgQSBtb2JpbGUgYW5kIHRvdWNoIGZyaWVuZGx5IGlucHV0IHNwaW5uZXIgY29tcG9uZW50IGZvciBCb290c3RyYXAgMyAmIDQuXHJcbiAqICBodHRwczovL3d3dy52aXJ0dW9zb2Z0LmV1L2NvZGUvYm9vdHN0cmFwLXRvdWNoc3Bpbi9cclxuICpcclxuICogIE1hZGUgYnkgSXN0dsOhbiBVamotTcOpc3rDoXJvc1xyXG4gKiAgVW5kZXIgTUlUIExpY2Vuc2VcclxuICovXG4oZnVuY3Rpb24gKGZhY3RvcnkpIHtcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShbJ2pxdWVyeSddLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICgodHlwZW9mIG1vZHVsZSA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKG1vZHVsZSkpID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJvb3QsIGpRdWVyeSkge1xuICAgICAgaWYgKGpRdWVyeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGpRdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGpRdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeScpKHJvb3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmYWN0b3J5KGpRdWVyeSk7XG4gICAgICByZXR1cm4galF1ZXJ5O1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgZmFjdG9yeShqUXVlcnkpO1xuICB9XG59KShmdW5jdGlvbiAoJCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIF9jdXJyZW50U3Bpbm5lcklkID0gMDtcbiAgJC5mbi5Ub3VjaFNwaW4gPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBkZWZhdWx0cyA9IHtcbiAgICAgIG1pbjogMCxcbiAgICAgIC8vIElmIG51bGwsIHRoZXJlIGlzIG5vIG1pbmltdW0gZW5mb3JjZWRcbiAgICAgIG1heDogMTAwLFxuICAgICAgLy8gSWYgbnVsbCwgdGhlcmUgaXMgbm8gbWF4aW11bSBlbmZvcmNlZFxuICAgICAgaW5pdHZhbDogJycsXG4gICAgICByZXBsYWNlbWVudHZhbDogJycsXG4gICAgICBmaXJzdGNsaWNrdmFsdWVpZmVtcHR5OiBudWxsLFxuICAgICAgc3RlcDogMSxcbiAgICAgIGRlY2ltYWxzOiAwLFxuICAgICAgc3RlcGludGVydmFsOiAxMDAsXG4gICAgICBmb3JjZXN0ZXBkaXZpc2liaWxpdHk6ICdyb3VuZCcsXG4gICAgICAvLyBub25lIHwgZmxvb3IgfCByb3VuZCB8IGNlaWxcbiAgICAgIHN0ZXBpbnRlcnZhbGRlbGF5OiA1MDAsXG4gICAgICB2ZXJ0aWNhbGJ1dHRvbnM6IGZhbHNlLFxuICAgICAgdmVydGljYWx1cDogJyZwbHVzOycsXG4gICAgICB2ZXJ0aWNhbGRvd246ICcmbWludXM7JyxcbiAgICAgIHZlcnRpY2FsdXBjbGFzczogJycsXG4gICAgICB2ZXJ0aWNhbGRvd25jbGFzczogJycsXG4gICAgICBwcmVmaXg6ICcnLFxuICAgICAgcG9zdGZpeDogJycsXG4gICAgICBwcmVmaXhfZXh0cmFjbGFzczogJycsXG4gICAgICBwb3N0Zml4X2V4dHJhY2xhc3M6ICcnLFxuICAgICAgYm9vc3RlcjogdHJ1ZSxcbiAgICAgIGJvb3N0YXQ6IDEwLFxuICAgICAgbWF4Ym9vc3RlZHN0ZXA6IGZhbHNlLFxuICAgICAgbW91c2V3aGVlbDogdHJ1ZSxcbiAgICAgIGJ1dHRvbmRvd25fY2xhc3M6ICdidG4gYnRuLXByaW1hcnknLFxuICAgICAgYnV0dG9udXBfY2xhc3M6ICdidG4gYnRuLXByaW1hcnknLFxuICAgICAgYnV0dG9uZG93bl90eHQ6ICcmbWludXM7JyxcbiAgICAgIGJ1dHRvbnVwX3R4dDogJyZwbHVzOycsXG4gICAgICBjYWxsYmFja19iZWZvcmVfY2FsY3VsYXRpb246IGZ1bmN0aW9uIGNhbGxiYWNrX2JlZm9yZV9jYWxjdWxhdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9LFxuICAgICAgY2FsbGJhY2tfYWZ0ZXJfY2FsY3VsYXRpb246IGZ1bmN0aW9uIGNhbGxiYWNrX2FmdGVyX2NhbGN1bGF0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBhdHRyaWJ1dGVNYXAgPSB7XG4gICAgICBtaW46ICdtaW4nLFxuICAgICAgbWF4OiAnbWF4JyxcbiAgICAgIGluaXR2YWw6ICdpbml0LXZhbCcsXG4gICAgICByZXBsYWNlbWVudHZhbDogJ3JlcGxhY2VtZW50LXZhbCcsXG4gICAgICBmaXJzdGNsaWNrdmFsdWVpZmVtcHR5OiAnZmlyc3QtY2xpY2stdmFsdWUtaWYtZW1wdHknLFxuICAgICAgc3RlcDogJ3N0ZXAnLFxuICAgICAgZGVjaW1hbHM6ICdkZWNpbWFscycsXG4gICAgICBzdGVwaW50ZXJ2YWw6ICdzdGVwLWludGVydmFsJyxcbiAgICAgIHZlcnRpY2FsYnV0dG9uczogJ3ZlcnRpY2FsLWJ1dHRvbnMnLFxuICAgICAgdmVydGljYWx1cGNsYXNzOiAndmVydGljYWwtdXAtY2xhc3MnLFxuICAgICAgdmVydGljYWxkb3duY2xhc3M6ICd2ZXJ0aWNhbC1kb3duLWNsYXNzJyxcbiAgICAgIGZvcmNlc3RlcGRpdmlzaWJpbGl0eTogJ2ZvcmNlLXN0ZXAtZGl2aXNpYmlsaXR5JyxcbiAgICAgIHN0ZXBpbnRlcnZhbGRlbGF5OiAnc3RlcC1pbnRlcnZhbC1kZWxheScsXG4gICAgICBwcmVmaXg6ICdwcmVmaXgnLFxuICAgICAgcG9zdGZpeDogJ3Bvc3RmaXgnLFxuICAgICAgcHJlZml4X2V4dHJhY2xhc3M6ICdwcmVmaXgtZXh0cmEtY2xhc3MnLFxuICAgICAgcG9zdGZpeF9leHRyYWNsYXNzOiAncG9zdGZpeC1leHRyYS1jbGFzcycsXG4gICAgICBib29zdGVyOiAnYm9vc3RlcicsXG4gICAgICBib29zdGF0OiAnYm9vc3RhdCcsXG4gICAgICBtYXhib29zdGVkc3RlcDogJ21heC1ib29zdGVkLXN0ZXAnLFxuICAgICAgbW91c2V3aGVlbDogJ21vdXNlLXdoZWVsJyxcbiAgICAgIGJ1dHRvbmRvd25fY2xhc3M6ICdidXR0b24tZG93bi1jbGFzcycsXG4gICAgICBidXR0b251cF9jbGFzczogJ2J1dHRvbi11cC1jbGFzcycsXG4gICAgICBidXR0b25kb3duX3R4dDogJ2J1dHRvbi1kb3duLXR4dCcsXG4gICAgICBidXR0b251cF90eHQ6ICdidXR0b24tdXAtdHh0J1xuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc2V0dGluZ3MsXG4gICAgICAgIG9yaWdpbmFsaW5wdXQgPSAkKHRoaXMpLFxuICAgICAgICBvcmlnaW5hbGlucHV0X2RhdGEgPSBvcmlnaW5hbGlucHV0LmRhdGEoKSxcbiAgICAgICAgX2RldGFjaGVkX3ByZWZpeCxcbiAgICAgICAgX2RldGFjaGVkX3Bvc3RmaXgsXG4gICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgZWxlbWVudHMsXG4gICAgICAgIHZlcnRpY2FsYnV0dG9uc19odG1sLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgZG93blNwaW5UaW1lcixcbiAgICAgICAgdXBTcGluVGltZXIsXG4gICAgICAgIGRvd25EZWxheVRpbWVvdXQsXG4gICAgICAgIHVwRGVsYXlUaW1lb3V0LFxuICAgICAgICBzcGluY291bnQgPSAwLFxuICAgICAgICBzcGlubmluZyA9IGZhbHNlO1xuICAgICAgaW5pdCgpO1xuICAgICAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgICAgaWYgKG9yaWdpbmFsaW5wdXQuZGF0YSgnYWxyZWFkeWluaXRpYWxpemVkJykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgb3JpZ2luYWxpbnB1dC5kYXRhKCdhbHJlYWR5aW5pdGlhbGl6ZWQnLCB0cnVlKTtcbiAgICAgICAgX2N1cnJlbnRTcGlubmVySWQgKz0gMTtcbiAgICAgICAgb3JpZ2luYWxpbnB1dC5kYXRhKCdzcGlubmVyaWQnLCBfY3VycmVudFNwaW5uZXJJZCk7XG4gICAgICAgIGlmICghb3JpZ2luYWxpbnB1dC5pcygnaW5wdXQnKSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdNdXN0IGJlIGFuIGlucHV0LicpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBfaW5pdFNldHRpbmdzKCk7XG4gICAgICAgIF9zZXRJbml0dmFsKCk7XG4gICAgICAgIF9jaGVja1ZhbHVlKCk7XG4gICAgICAgIF9idWlsZEh0bWwoKTtcbiAgICAgICAgX2luaXRFbGVtZW50cygpO1xuICAgICAgICBfdXBkYXRlQnV0dG9uRGlzYWJsZWRTdGF0ZSgpO1xuICAgICAgICBfaGlkZUVtcHR5UHJlZml4UG9zdGZpeCgpO1xuICAgICAgICBfc2V0dXBNdXRhdGlvbk9ic2VydmVycygpO1xuICAgICAgICBfYmluZEV2ZW50cygpO1xuICAgICAgICBfYmluZEV2ZW50c0ludGVyZmFjZSgpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3NldEluaXR2YWwoKSB7XG4gICAgICAgIGlmIChzZXR0aW5ncy5pbml0dmFsICE9PSAnJyAmJiBvcmlnaW5hbGlucHV0LnZhbCgpID09PSAnJykge1xuICAgICAgICAgIG9yaWdpbmFsaW5wdXQudmFsKHNldHRpbmdzLmluaXR2YWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBjaGFuZ2VTZXR0aW5ncyhuZXdzZXR0aW5ncykge1xuICAgICAgICBfdXBkYXRlU2V0dGluZ3MobmV3c2V0dGluZ3MpO1xuICAgICAgICBfY2hlY2tWYWx1ZSgpO1xuICAgICAgICB2YXIgdmFsdWUgPSBlbGVtZW50cy5pbnB1dC52YWwoKTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSAnJykge1xuICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdChzZXR0aW5ncy5jYWxsYmFja19iZWZvcmVfY2FsY3VsYXRpb24oZWxlbWVudHMuaW5wdXQudmFsKCkpKTtcbiAgICAgICAgICBlbGVtZW50cy5pbnB1dC52YWwoc2V0dGluZ3MuY2FsbGJhY2tfYWZ0ZXJfY2FsY3VsYXRpb24ocGFyc2VGbG9hdCh2YWx1ZSkudG9GaXhlZChzZXR0aW5ncy5kZWNpbWFscykpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2luaXRTZXR0aW5ncygpIHtcbiAgICAgICAgc2V0dGluZ3MgPSAkLmV4dGVuZCh7fSwgZGVmYXVsdHMsIG9yaWdpbmFsaW5wdXRfZGF0YSwgX3BhcnNlQXR0cmlidXRlcygpLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKHBhcnNlRmxvYXQoc2V0dGluZ3Muc3RlcCkgIT09IDEpIHtcbiAgICAgICAgICB2YXIgcmVtYWluZGVyO1xuXG4gICAgICAgICAgLy8gTW9kaWZ5IHNldHRpbmdzLm1heCB0byBiZSBkaXZpc2libGUgYnkgc3RlcFxuICAgICAgICAgIHJlbWFpbmRlciA9IHNldHRpbmdzLm1heCAlIHNldHRpbmdzLnN0ZXA7XG4gICAgICAgICAgaWYgKHJlbWFpbmRlciAhPT0gMCkge1xuICAgICAgICAgICAgc2V0dGluZ3MubWF4ID0gcGFyc2VGbG9hdChzZXR0aW5ncy5tYXgpIC0gcmVtYWluZGVyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIERvIHRoZSBzYW1lIHdpdGggbWluLCBzaG91bGQgd29yayB3aXRoIG5lZ2F0aXZlIG51bWJlcnMgdG9vXG4gICAgICAgICAgcmVtYWluZGVyID0gc2V0dGluZ3MubWluICUgc2V0dGluZ3Muc3RlcDtcbiAgICAgICAgICBpZiAocmVtYWluZGVyICE9PSAwKSB7XG4gICAgICAgICAgICBzZXR0aW5ncy5taW4gPSBwYXJzZUZsb2F0KHNldHRpbmdzLm1pbikgKyAocGFyc2VGbG9hdChzZXR0aW5ncy5zdGVwKSAtIHJlbWFpbmRlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfcGFyc2VBdHRyaWJ1dGVzKCkge1xuICAgICAgICB2YXIgZGF0YSA9IHt9O1xuXG4gICAgICAgIC8vIFNldHRpbmcgdXAgYmFzZWQgb24gZGF0YSBhdHRyaWJ1dGVzXG4gICAgICAgICQuZWFjaChhdHRyaWJ1dGVNYXAsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgdmFyIGF0dHJOYW1lID0gJ2J0cy0nICsgdmFsdWUgKyAnJztcbiAgICAgICAgICBpZiAob3JpZ2luYWxpbnB1dC5pcygnW2RhdGEtJyArIGF0dHJOYW1lICsgJ10nKSkge1xuICAgICAgICAgICAgZGF0YVtrZXldID0gb3JpZ2luYWxpbnB1dC5kYXRhKGF0dHJOYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFNldHRpbmcgdXAgYmFzZWQgb24gaW5wdXQgYXR0cmlidXRlcyBpZiBzcGVjaWZpZWQgKGlucHV0IGF0dHJpYnV0ZXMgaGF2ZSBwcmVjZWRlbmNlKVxuICAgICAgICAkLmVhY2goWydtaW4nLCAnbWF4JywgJ3N0ZXAnXSwgZnVuY3Rpb24gKGksIGtleSkge1xuICAgICAgICAgIGlmIChvcmlnaW5hbGlucHV0LmlzKCdbJyArIGtleSArICddJykpIHtcbiAgICAgICAgICAgIGlmIChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0JvdGggdGhlIFwiZGF0YS1idHMtJyArIGtleSArICdcIiBkYXRhIGF0dHJpYnV0ZSBhbmQgdGhlIFwiJyArIGtleSArICdcIiBpbmRpdmlkdWFsIGF0dHJpYnV0ZSB3ZXJlIHNwZWNpZmllZCwgdGhlIGluZGl2aWR1YWwgYXR0cmlidXRlIHdpbGwgdGFrZSBwcmVjZWRlbmNlIG9uOiAnLCBvcmlnaW5hbGlucHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGFba2V5XSA9IG9yaWdpbmFsaW5wdXQuYXR0cihrZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2Rlc3Ryb3koKSB7XG4gICAgICAgIHZhciAkcGFyZW50ID0gb3JpZ2luYWxpbnB1dC5wYXJlbnQoKTtcbiAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgb3JpZ2luYWxpbnB1dC5vZmYoJy50b3VjaHNwaW4nKTtcbiAgICAgICAgaWYgKCRwYXJlbnQuaGFzQ2xhc3MoJ2Jvb3RzdHJhcC10b3VjaHNwaW4taW5qZWN0ZWQnKSkge1xuICAgICAgICAgIG9yaWdpbmFsaW5wdXQuc2libGluZ3MoKS5yZW1vdmUoKTtcbiAgICAgICAgICBvcmlnaW5hbGlucHV0LnVud3JhcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICQoJy5ib290c3RyYXAtdG91Y2hzcGluLWluamVjdGVkJywgJHBhcmVudCkucmVtb3ZlKCk7XG4gICAgICAgICAgJHBhcmVudC5yZW1vdmVDbGFzcygnYm9vdHN0cmFwLXRvdWNoc3BpbicpO1xuICAgICAgICB9XG4gICAgICAgIG9yaWdpbmFsaW5wdXQuZGF0YSgnYWxyZWFkeWluaXRpYWxpemVkJywgZmFsc2UpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3VwZGF0ZVNldHRpbmdzKG5ld3NldHRpbmdzKSB7XG4gICAgICAgIHNldHRpbmdzID0gJC5leHRlbmQoe30sIHNldHRpbmdzLCBuZXdzZXR0aW5ncyk7XG5cbiAgICAgICAgLy8gVXBkYXRlIHBvc3RmaXggYW5kIHByZWZpeCB0ZXh0cyBpZiB0aG9zZSBzZXR0aW5ncyB3ZXJlIGNoYW5nZWQuXG4gICAgICAgIGlmIChuZXdzZXR0aW5ncy5wb3N0Zml4KSB7XG4gICAgICAgICAgdmFyICRwb3N0Zml4ID0gb3JpZ2luYWxpbnB1dC5wYXJlbnQoKS5maW5kKCcuYm9vdHN0cmFwLXRvdWNoc3Bpbi1wb3N0Zml4Jyk7XG4gICAgICAgICAgaWYgKCRwb3N0Zml4Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgX2RldGFjaGVkX3Bvc3RmaXguaW5zZXJ0QWZ0ZXIob3JpZ2luYWxpbnB1dCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9yaWdpbmFsaW5wdXQucGFyZW50KCkuZmluZCgnLmJvb3RzdHJhcC10b3VjaHNwaW4tcG9zdGZpeCAuaW5wdXQtZ3JvdXAtdGV4dCcpLnRleHQobmV3c2V0dGluZ3MucG9zdGZpeCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld3NldHRpbmdzLnByZWZpeCkge1xuICAgICAgICAgIHZhciAkcHJlZml4ID0gb3JpZ2luYWxpbnB1dC5wYXJlbnQoKS5maW5kKCcuYm9vdHN0cmFwLXRvdWNoc3Bpbi1wcmVmaXgnKTtcbiAgICAgICAgICBpZiAoJHByZWZpeC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIF9kZXRhY2hlZF9wcmVmaXguaW5zZXJ0QmVmb3JlKG9yaWdpbmFsaW5wdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcmlnaW5hbGlucHV0LnBhcmVudCgpLmZpbmQoJy5ib290c3RyYXAtdG91Y2hzcGluLXByZWZpeCAuaW5wdXQtZ3JvdXAtdGV4dCcpLnRleHQobmV3c2V0dGluZ3MucHJlZml4KTtcbiAgICAgICAgfVxuICAgICAgICBfaGlkZUVtcHR5UHJlZml4UG9zdGZpeCgpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2J1aWxkSHRtbCgpIHtcbiAgICAgICAgdmFyIGluaXR2YWwgPSBvcmlnaW5hbGlucHV0LnZhbCgpLFxuICAgICAgICAgIHBhcmVudGVsZW1lbnQgPSBvcmlnaW5hbGlucHV0LnBhcmVudCgpO1xuICAgICAgICBpZiAoaW5pdHZhbCAhPT0gJycpIHtcbiAgICAgICAgICAvLyBpbml0dmFsIG1heSBub3QgYmUgcGFyc2FibGUgYXMgYSBudW1iZXIgKGNhbGxiYWNrX2FmdGVyX2NhbGN1bGF0aW9uKCkgbWF5IGRlY29yYXRlIGl0IHNvIGl0IGNhbnQgYmUgcGFyc2VkKS4gIFVzZSB0aGUgY2FsbGJhY2tzIGlmIHByb3ZpZGVkLlxuICAgICAgICAgIGluaXR2YWwgPSBzZXR0aW5ncy5jYWxsYmFja19iZWZvcmVfY2FsY3VsYXRpb24oaW5pdHZhbCk7XG4gICAgICAgICAgaW5pdHZhbCA9IHNldHRpbmdzLmNhbGxiYWNrX2FmdGVyX2NhbGN1bGF0aW9uKHBhcnNlRmxvYXQoaW5pdHZhbCkudG9GaXhlZChzZXR0aW5ncy5kZWNpbWFscykpO1xuICAgICAgICB9XG4gICAgICAgIG9yaWdpbmFsaW5wdXQuZGF0YSgnaW5pdHZhbHVlJywgaW5pdHZhbCkudmFsKGluaXR2YWwpO1xuICAgICAgICBvcmlnaW5hbGlucHV0LmFkZENsYXNzKCdmb3JtLWNvbnRyb2wnKTtcbiAgICAgICAgdmVydGljYWxidXR0b25zX2h0bWwgPSBcIlxcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtYWRkb24gYm9vdHN0cmFwLXRvdWNoc3Bpbi12ZXJ0aWNhbC1idXR0b24td3JhcHBlclxcXCI+XFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWJ0bi12ZXJ0aWNhbFxcXCI+XFxuICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVxcXCItMVxcXCIgY2xhc3M9XFxcIlwiLmNvbmNhdChzZXR0aW5ncy5idXR0b25kb3duX2NsYXNzLCBcIiBib290c3RyYXAtdG91Y2hzcGluLXVwIFwiKS5jb25jYXQoc2V0dGluZ3MudmVydGljYWx1cGNsYXNzLCBcIlxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIj5cIikuY29uY2F0KHNldHRpbmdzLnZlcnRpY2FsdXAsIFwiPC9idXR0b24+XFxuICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVxcXCItMVxcXCIgY2xhc3M9XFxcIlwiKS5jb25jYXQoc2V0dGluZ3MuYnV0dG9udXBfY2xhc3MsIFwiIGJvb3RzdHJhcC10b3VjaHNwaW4tZG93biBcIikuY29uY2F0KHNldHRpbmdzLnZlcnRpY2FsZG93bmNsYXNzLCBcIlxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIj5cIikuY29uY2F0KHNldHRpbmdzLnZlcnRpY2FsZG93biwgXCI8L2J1dHRvbj5cXG4gICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgXCIpO1xuICAgICAgICBpZiAocGFyZW50ZWxlbWVudC5oYXNDbGFzcygnaW5wdXQtZ3JvdXAnKSkge1xuICAgICAgICAgIF9hZHZhbmNlSW5wdXRHcm91cChwYXJlbnRlbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfYnVpbGRJbnB1dEdyb3VwKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9hZHZhbmNlSW5wdXRHcm91cChwYXJlbnRlbGVtZW50KSB7XG4gICAgICAgIHBhcmVudGVsZW1lbnQuYWRkQ2xhc3MoJ2Jvb3RzdHJhcC10b3VjaHNwaW4nKTtcbiAgICAgICAgdmFyIHByZXYgPSBvcmlnaW5hbGlucHV0LnByZXYoKSxcbiAgICAgICAgICBuZXh0ID0gb3JpZ2luYWxpbnB1dC5uZXh0KCk7XG4gICAgICAgIHZhciBkb3duaHRtbCxcbiAgICAgICAgICB1cGh0bWwsXG4gICAgICAgICAgcHJlZml4aHRtbCA9IFwiXFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uIGlucHV0LWdyb3VwLXByZXBlbmQgYm9vdHN0cmFwLXRvdWNoc3Bpbi1wcmVmaXggaW5wdXQtZ3JvdXAtcHJlcGVuZCBib290c3RyYXAtdG91Y2hzcGluLWluamVjdGVkXFxcIj5cXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJpbnB1dC1ncm91cC10ZXh0XFxcIj5cIi5jb25jYXQoc2V0dGluZ3MucHJlZml4LCBcIjwvc3Bhbj5cXG4gICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgIFwiKSxcbiAgICAgICAgICBwb3N0Zml4aHRtbCA9IFwiXFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uIGlucHV0LWdyb3VwLWFwcGVuZCBib290c3RyYXAtdG91Y2hzcGluLXBvc3RmaXggaW5wdXQtZ3JvdXAtYXBwZW5kIGJvb3RzdHJhcC10b3VjaHNwaW4taW5qZWN0ZWRcXFwiPlxcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLXRleHRcXFwiPlwiLmNvbmNhdChzZXR0aW5ncy5wb3N0Zml4LCBcIjwvc3Bhbj5cXG4gICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgIFwiKTtcbiAgICAgICAgaWYgKHNldHRpbmdzLnZlcnRpY2FsYnV0dG9ucykge1xuICAgICAgICAgICQodmVydGljYWxidXR0b25zX2h0bWwpLmluc2VydEFmdGVyKG9yaWdpbmFsaW5wdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwcmV2Lmhhc0NsYXNzKCdpbnB1dC1ncm91cC1idG4nKSB8fCBwcmV2Lmhhc0NsYXNzKCdpbnB1dC1ncm91cC1wcmVwZW5kJykpIHtcbiAgICAgICAgICAgIGRvd25odG1sID0gXCJcXG4gICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XFxcIi0xXFxcIiBjbGFzcz1cXFwiXCIuY29uY2F0KHNldHRpbmdzLmJ1dHRvbmRvd25fY2xhc3MsIFwiIGJvb3RzdHJhcC10b3VjaHNwaW4tZG93biBib290c3RyYXAtdG91Y2hzcGluLWluamVjdGVkXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiPlwiKS5jb25jYXQoc2V0dGluZ3MuYnV0dG9uZG93bl90eHQsIFwiPC9idXR0b24+XFxuICAgICAgICAgICAgXCIpO1xuICAgICAgICAgICAgcHJldi5hcHBlbmQoZG93bmh0bWwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb3duaHRtbCA9IFwiXFxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtYnRuIGlucHV0LWdyb3VwLXByZXBlbmQgYm9vdHN0cmFwLXRvdWNoc3Bpbi1pbmplY3RlZFxcXCI+XFxuICAgICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XFxcIi0xXFxcIiBjbGFzcz1cXFwiXCIuY29uY2F0KHNldHRpbmdzLmJ1dHRvbmRvd25fY2xhc3MsIFwiIGJvb3RzdHJhcC10b3VjaHNwaW4tZG93blxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIj5cIikuY29uY2F0KHNldHRpbmdzLmJ1dHRvbmRvd25fdHh0LCBcIjwvYnV0dG9uPlxcbiAgICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgIFwiKTtcbiAgICAgICAgICAgICQoZG93bmh0bWwpLmluc2VydEJlZm9yZShvcmlnaW5hbGlucHV0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5leHQuaGFzQ2xhc3MoJ2lucHV0LWdyb3VwLWJ0bicpIHx8IG5leHQuaGFzQ2xhc3MoJ2lucHV0LWdyb3VwLWFwcGVuZCcpKSB7XG4gICAgICAgICAgICB1cGh0bWwgPSBcIlxcbiAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XFxcIi0xXFxcIiBjbGFzcz1cXFwiXCIuY29uY2F0KHNldHRpbmdzLmJ1dHRvbnVwX2NsYXNzLCBcIiBib290c3RyYXAtdG91Y2hzcGluLXVwIGJvb3RzdHJhcC10b3VjaHNwaW4taW5qZWN0ZWRcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCI+XCIpLmNvbmNhdChzZXR0aW5ncy5idXR0b251cF90eHQsIFwiPC9idXR0b24+XFxuICAgICAgICAgIFwiKTtcbiAgICAgICAgICAgIG5leHQucHJlcGVuZCh1cGh0bWwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cGh0bWwgPSBcIlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJpbnB1dC1ncm91cC1idG4gaW5wdXQtZ3JvdXAtYXBwZW5kIGJvb3RzdHJhcC10b3VjaHNwaW4taW5qZWN0ZWRcXFwiPlxcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cXFwiLTFcXFwiIGNsYXNzPVxcXCJcIi5jb25jYXQoc2V0dGluZ3MuYnV0dG9udXBfY2xhc3MsIFwiIGJvb3RzdHJhcC10b3VjaHNwaW4tdXBcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCI+XCIpLmNvbmNhdChzZXR0aW5ncy5idXR0b251cF90eHQsIFwiPC9idXR0b24+XFxuICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICBcIik7XG4gICAgICAgICAgICAkKHVwaHRtbCkuaW5zZXJ0QWZ0ZXIob3JpZ2luYWxpbnB1dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICQocHJlZml4aHRtbCkuaW5zZXJ0QmVmb3JlKG9yaWdpbmFsaW5wdXQpO1xuICAgICAgICAkKHBvc3RmaXhodG1sKS5pbnNlcnRBZnRlcihvcmlnaW5hbGlucHV0KTtcbiAgICAgICAgY29udGFpbmVyID0gcGFyZW50ZWxlbWVudDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9idWlsZElucHV0R3JvdXAoKSB7XG4gICAgICAgIHZhciBodG1sO1xuICAgICAgICB2YXIgaW5wdXRHcm91cFNpemUgPSAnJztcbiAgICAgICAgaWYgKG9yaWdpbmFsaW5wdXQuaGFzQ2xhc3MoJ2lucHV0LXNtJykgfHwgb3JpZ2luYWxpbnB1dC5oYXNDbGFzcygnZm9ybS1jb250cm9sLXNtJykpIHtcbiAgICAgICAgICBpbnB1dEdyb3VwU2l6ZSA9ICdpbnB1dC1ncm91cC1zbSc7XG4gICAgICAgIH0gZWxzZSBpZiAob3JpZ2luYWxpbnB1dC5oYXNDbGFzcygnaW5wdXQtbGcnKSB8fCBvcmlnaW5hbGlucHV0Lmhhc0NsYXNzKCdmb3JtLWNvbnRyb2wtbGcnKSkge1xuICAgICAgICAgIGlucHV0R3JvdXBTaXplID0gJ2lucHV0LWdyb3VwLWxnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2V0dGluZ3MudmVydGljYWxidXR0b25zKSB7XG4gICAgICAgICAgaHRtbCA9IFwiXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAgXCIuY29uY2F0KGlucHV0R3JvdXBTaXplLCBcIiBib290c3RyYXAtdG91Y2hzcGluIGJvb3RzdHJhcC10b3VjaHNwaW4taW5qZWN0ZWRcXFwiPlxcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uIGlucHV0LWdyb3VwLXByZXBlbmQgYm9vdHN0cmFwLXRvdWNoc3Bpbi1wcmVmaXhcXFwiPlxcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtdGV4dFxcXCI+XCIpLmNvbmNhdChzZXR0aW5ncy5wcmVmaXgsIFwiPC9zcGFuPlxcbiAgICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uIGJvb3RzdHJhcC10b3VjaHNwaW4tcG9zdGZpeCBpbnB1dC1ncm91cC1hcHBlbmRcXFwiPlxcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtdGV4dFxcXCI+XCIpLmNvbmNhdChzZXR0aW5ncy5wb3N0Zml4LCBcIjwvc3Bhbj5cXG4gICAgICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgICAgICAgIFwiKS5jb25jYXQodmVydGljYWxidXR0b25zX2h0bWwsIFwiXFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgIFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBodG1sID0gXCJcXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJpbnB1dC1ncm91cCBib290c3RyYXAtdG91Y2hzcGluIGJvb3RzdHJhcC10b3VjaHNwaW4taW5qZWN0ZWRcXFwiPlxcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWJ0biBpbnB1dC1ncm91cC1wcmVwZW5kXFxcIj5cXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cXFwiLTFcXFwiIGNsYXNzPVxcXCJcIi5jb25jYXQoc2V0dGluZ3MuYnV0dG9uZG93bl9jbGFzcywgXCIgYm9vdHN0cmFwLXRvdWNoc3Bpbi1kb3duXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiPlwiKS5jb25jYXQoc2V0dGluZ3MuYnV0dG9uZG93bl90eHQsIFwiPC9idXR0b24+XFxuICAgICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtYWRkb24gYm9vdHN0cmFwLXRvdWNoc3Bpbi1wcmVmaXggaW5wdXQtZ3JvdXAtcHJlcGVuZFxcXCI+XFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJpbnB1dC1ncm91cC10ZXh0XFxcIj5cIikuY29uY2F0KHNldHRpbmdzLnByZWZpeCwgXCI8L3NwYW4+XFxuICAgICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtYWRkb24gYm9vdHN0cmFwLXRvdWNoc3Bpbi1wb3N0Zml4IGlucHV0LWdyb3VwLWFwcGVuZFxcXCI+XFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJpbnB1dC1ncm91cC10ZXh0XFxcIj5cIikuY29uY2F0KHNldHRpbmdzLnBvc3RmaXgsIFwiPC9zcGFuPlxcbiAgICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWJ0biBpbnB1dC1ncm91cC1hcHBlbmRcXFwiPlxcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVxcXCItMVxcXCIgY2xhc3M9XFxcIlwiKS5jb25jYXQoc2V0dGluZ3MuYnV0dG9udXBfY2xhc3MsIFwiIGJvb3RzdHJhcC10b3VjaHNwaW4tdXBcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCI+XCIpLmNvbmNhdChzZXR0aW5ncy5idXR0b251cF90eHQsIFwiPC9idXR0b24+XFxuICAgICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgPC9kaXY+XCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRhaW5lciA9ICQoaHRtbCkuaW5zZXJ0QmVmb3JlKG9yaWdpbmFsaW5wdXQpO1xuICAgICAgICAkKCcuYm9vdHN0cmFwLXRvdWNoc3Bpbi1wcmVmaXgnLCBjb250YWluZXIpLmFmdGVyKG9yaWdpbmFsaW5wdXQpO1xuICAgICAgICBpZiAob3JpZ2luYWxpbnB1dC5oYXNDbGFzcygnaW5wdXQtc20nKSB8fCBvcmlnaW5hbGlucHV0Lmhhc0NsYXNzKCdmb3JtLWNvbnRyb2wtc20nKSkge1xuICAgICAgICAgIGNvbnRhaW5lci5hZGRDbGFzcygnaW5wdXQtZ3JvdXAtc20nKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcmlnaW5hbGlucHV0Lmhhc0NsYXNzKCdpbnB1dC1sZycpIHx8IG9yaWdpbmFsaW5wdXQuaGFzQ2xhc3MoJ2Zvcm0tY29udHJvbC1sZycpKSB7XG4gICAgICAgICAgY29udGFpbmVyLmFkZENsYXNzKCdpbnB1dC1ncm91cC1sZycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfaW5pdEVsZW1lbnRzKCkge1xuICAgICAgICBlbGVtZW50cyA9IHtcbiAgICAgICAgICBkb3duOiAkKCcuYm9vdHN0cmFwLXRvdWNoc3Bpbi1kb3duJywgY29udGFpbmVyKSxcbiAgICAgICAgICB1cDogJCgnLmJvb3RzdHJhcC10b3VjaHNwaW4tdXAnLCBjb250YWluZXIpLFxuICAgICAgICAgIGlucHV0OiAkKCdpbnB1dCcsIGNvbnRhaW5lciksXG4gICAgICAgICAgcHJlZml4OiAkKCcuYm9vdHN0cmFwLXRvdWNoc3Bpbi1wcmVmaXgnLCBjb250YWluZXIpLmFkZENsYXNzKHNldHRpbmdzLnByZWZpeF9leHRyYWNsYXNzKSxcbiAgICAgICAgICBwb3N0Zml4OiAkKCcuYm9vdHN0cmFwLXRvdWNoc3Bpbi1wb3N0Zml4JywgY29udGFpbmVyKS5hZGRDbGFzcyhzZXR0aW5ncy5wb3N0Zml4X2V4dHJhY2xhc3MpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfaGlkZUVtcHR5UHJlZml4UG9zdGZpeCgpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzLnByZWZpeCA9PT0gJycpIHtcbiAgICAgICAgICBfZGV0YWNoZWRfcHJlZml4ID0gZWxlbWVudHMucHJlZml4LmRldGFjaCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXR0aW5ncy5wb3N0Zml4ID09PSAnJykge1xuICAgICAgICAgIF9kZXRhY2hlZF9wb3N0Zml4ID0gZWxlbWVudHMucG9zdGZpeC5kZXRhY2goKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2JpbmRFdmVudHMoKSB7XG4gICAgICAgIG9yaWdpbmFsaW5wdXQub24oJ2tleWRvd24udG91Y2hzcGluJywgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgdmFyIGNvZGUgPSBldi5rZXlDb2RlIHx8IGV2LndoaWNoO1xuICAgICAgICAgIGlmIChjb2RlID09PSAzOCkge1xuICAgICAgICAgICAgaWYgKHNwaW5uaW5nICE9PSAndXAnKSB7XG4gICAgICAgICAgICAgIHVwT25jZSgpO1xuICAgICAgICAgICAgICBzdGFydFVwU3BpbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDQwKSB7XG4gICAgICAgICAgICBpZiAoc3Bpbm5pbmcgIT09ICdkb3duJykge1xuICAgICAgICAgICAgICBkb3duT25jZSgpO1xuICAgICAgICAgICAgICBzdGFydERvd25TcGluKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gOSB8fCBjb2RlID09PSAxMykge1xuICAgICAgICAgICAgX2NoZWNrVmFsdWUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBvcmlnaW5hbGlucHV0Lm9uKCdrZXl1cC50b3VjaHNwaW4nLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICB2YXIgY29kZSA9IGV2LmtleUNvZGUgfHwgZXYud2hpY2g7XG4gICAgICAgICAgaWYgKGNvZGUgPT09IDM4KSB7XG4gICAgICAgICAgICBzdG9wU3BpbigpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gNDApIHtcbiAgICAgICAgICAgIHN0b3BTcGluKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBjaGFuZ2UgaXMgZmlyZWQgYmVmb3JlIGJsdXIsIHNvIHdlIG5lZWQgdG8gd29yayBhcm91bmQgdGhhdFxuICAgICAgICAkKGRvY3VtZW50KS5vbignbW91c2Vkb3duIHRvdWNoc3RhcnQnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBpZiAoJChldmVudC50YXJnZXQpLmlzKG9yaWdpbmFsaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIF9jaGVja1ZhbHVlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcmlnaW5hbGlucHV0Lm9uKCdibHVyLnRvdWNoc3BpbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfY2hlY2tWYWx1ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudHMuZG93bi5vbigna2V5ZG93bicsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgIHZhciBjb2RlID0gZXYua2V5Q29kZSB8fCBldi53aGljaDtcbiAgICAgICAgICBpZiAoY29kZSA9PT0gMzIgfHwgY29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgIGlmIChzcGlubmluZyAhPT0gJ2Rvd24nKSB7XG4gICAgICAgICAgICAgIGRvd25PbmNlKCk7XG4gICAgICAgICAgICAgIHN0YXJ0RG93blNwaW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudHMuZG93bi5vbigna2V5dXAudG91Y2hzcGluJywgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgdmFyIGNvZGUgPSBldi5rZXlDb2RlIHx8IGV2LndoaWNoO1xuICAgICAgICAgIGlmIChjb2RlID09PSAzMiB8fCBjb2RlID09PSAxMykge1xuICAgICAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBlbGVtZW50cy51cC5vbigna2V5ZG93bi50b3VjaHNwaW4nLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICB2YXIgY29kZSA9IGV2LmtleUNvZGUgfHwgZXYud2hpY2g7XG4gICAgICAgICAgaWYgKGNvZGUgPT09IDMyIHx8IGNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICBpZiAoc3Bpbm5pbmcgIT09ICd1cCcpIHtcbiAgICAgICAgICAgICAgdXBPbmNlKCk7XG4gICAgICAgICAgICAgIHN0YXJ0VXBTcGluKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnRzLnVwLm9uKCdrZXl1cC50b3VjaHNwaW4nLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICB2YXIgY29kZSA9IGV2LmtleUNvZGUgfHwgZXYud2hpY2g7XG4gICAgICAgICAgaWYgKGNvZGUgPT09IDMyIHx8IGNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICBzdG9wU3BpbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnRzLmRvd24ub24oJ21vdXNlZG93bi50b3VjaHNwaW4nLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICBlbGVtZW50cy5kb3duLm9mZigndG91Y2hzdGFydC50b3VjaHNwaW4nKTsgLy8gYW5kcm9pZCA0IHdvcmthcm91bmRcblxuICAgICAgICAgIGlmIChvcmlnaW5hbGlucHV0LmlzKCc6ZGlzYWJsZWQsW3JlYWRvbmx5XScpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGRvd25PbmNlKCk7XG4gICAgICAgICAgc3RhcnREb3duU3BpbigpO1xuICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBlbGVtZW50cy5kb3duLm9uKCd0b3VjaHN0YXJ0LnRvdWNoc3BpbicsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgIGVsZW1lbnRzLmRvd24ub2ZmKCdtb3VzZWRvd24udG91Y2hzcGluJyk7IC8vIGFuZHJvaWQgNCB3b3JrYXJvdW5kXG5cbiAgICAgICAgICBpZiAob3JpZ2luYWxpbnB1dC5pcygnOmRpc2FibGVkLFtyZWFkb25seV0nKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkb3duT25jZSgpO1xuICAgICAgICAgIHN0YXJ0RG93blNwaW4oKTtcbiAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudHMudXAub24oJ21vdXNlZG93bi50b3VjaHNwaW4nLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICBlbGVtZW50cy51cC5vZmYoJ3RvdWNoc3RhcnQudG91Y2hzcGluJyk7IC8vIGFuZHJvaWQgNCB3b3JrYXJvdW5kXG5cbiAgICAgICAgICBpZiAob3JpZ2luYWxpbnB1dC5pcygnOmRpc2FibGVkLFtyZWFkb25seV0nKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB1cE9uY2UoKTtcbiAgICAgICAgICBzdGFydFVwU3BpbigpO1xuICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBlbGVtZW50cy51cC5vbigndG91Y2hzdGFydC50b3VjaHNwaW4nLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICBlbGVtZW50cy51cC5vZmYoJ21vdXNlZG93bi50b3VjaHNwaW4nKTsgLy8gYW5kcm9pZCA0IHdvcmthcm91bmRcblxuICAgICAgICAgIGlmIChvcmlnaW5hbGlucHV0LmlzKCc6ZGlzYWJsZWQsW3JlYWRvbmx5XScpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHVwT25jZSgpO1xuICAgICAgICAgIHN0YXJ0VXBTcGluKCk7XG4gICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnRzLnVwLm9uKCdtb3VzZXVwLnRvdWNoc3BpbiBtb3VzZW91dC50b3VjaHNwaW4gdG91Y2hsZWF2ZS50b3VjaHNwaW4gdG91Y2hlbmQudG91Y2hzcGluIHRvdWNoY2FuY2VsLnRvdWNoc3BpbicsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgIGlmICghc3Bpbm5pbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnRzLmRvd24ub24oJ21vdXNldXAudG91Y2hzcGluIG1vdXNlb3V0LnRvdWNoc3BpbiB0b3VjaGxlYXZlLnRvdWNoc3BpbiB0b3VjaGVuZC50b3VjaHNwaW4gdG91Y2hjYW5jZWwudG91Y2hzcGluJywgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgaWYgKCFzcGlubmluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBzdG9wU3BpbigpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudHMuZG93bi5vbignbW91c2Vtb3ZlLnRvdWNoc3BpbiB0b3VjaG1vdmUudG91Y2hzcGluJywgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgaWYgKCFzcGlubmluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudHMudXAub24oJ21vdXNlbW92ZS50b3VjaHNwaW4gdG91Y2htb3ZlLnRvdWNoc3BpbicsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgIGlmICghc3Bpbm5pbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9yaWdpbmFsaW5wdXQub24oJ21vdXNld2hlZWwudG91Y2hzcGluIERPTU1vdXNlU2Nyb2xsLnRvdWNoc3BpbicsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgIGlmICghc2V0dGluZ3MubW91c2V3aGVlbCB8fCAhb3JpZ2luYWxpbnB1dC5pcygnOmZvY3VzJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGRlbHRhID0gZXYub3JpZ2luYWxFdmVudC53aGVlbERlbHRhIHx8IC1ldi5vcmlnaW5hbEV2ZW50LmRlbHRhWSB8fCAtZXYub3JpZ2luYWxFdmVudC5kZXRhaWw7XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBpZiAoZGVsdGEgPCAwKSB7XG4gICAgICAgICAgICBkb3duT25jZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cE9uY2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2JpbmRFdmVudHNJbnRlcmZhY2UoKSB7XG4gICAgICAgIG9yaWdpbmFsaW5wdXQub24oJ3RvdWNoc3Bpbi5kZXN0cm95JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF9kZXN0cm95KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcmlnaW5hbGlucHV0Lm9uKCd0b3VjaHNwaW4udXBvbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHN0b3BTcGluKCk7XG4gICAgICAgICAgdXBPbmNlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcmlnaW5hbGlucHV0Lm9uKCd0b3VjaHNwaW4uZG93bm9uY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgICBkb3duT25jZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgb3JpZ2luYWxpbnB1dC5vbigndG91Y2hzcGluLnN0YXJ0dXBzcGluJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHN0YXJ0VXBTcGluKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcmlnaW5hbGlucHV0Lm9uKCd0b3VjaHNwaW4uc3RhcnRkb3duc3BpbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzdGFydERvd25TcGluKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcmlnaW5hbGlucHV0Lm9uKCd0b3VjaHNwaW4uc3RvcHNwaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9yaWdpbmFsaW5wdXQub24oJ3RvdWNoc3Bpbi51cGRhdGVzZXR0aW5ncycsIGZ1bmN0aW9uIChlLCBuZXdzZXR0aW5ncykge1xuICAgICAgICAgIGNoYW5nZVNldHRpbmdzKG5ld3NldHRpbmdzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfc2V0dXBNdXRhdGlvbk9ic2VydmVycygpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIC8vIE11dGF0aW9uT2JzZXJ2ZXIgaXMgYXZhaWxhYmxlXG4gICAgICAgICAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuICAgICAgICAgICAgbXV0YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICAgICAgICAgIGlmIChtdXRhdGlvbi50eXBlID09PSAnYXR0cmlidXRlcycgJiYgKG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUgPT09ICdkaXNhYmxlZCcgfHwgbXV0YXRpb24uYXR0cmlidXRlTmFtZSA9PT0gJ3JlYWRvbmx5JykpIHtcbiAgICAgICAgICAgICAgICBfdXBkYXRlQnV0dG9uRGlzYWJsZWRTdGF0ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKG9yaWdpbmFsaW5wdXRbMF0sIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2ZvcmNlc3RlcGRpdmlzaWJpbGl0eSh2YWx1ZSkge1xuICAgICAgICBzd2l0Y2ggKHNldHRpbmdzLmZvcmNlc3RlcGRpdmlzaWJpbGl0eSkge1xuICAgICAgICAgIGNhc2UgJ3JvdW5kJzpcbiAgICAgICAgICAgIHJldHVybiAoTWF0aC5yb3VuZCh2YWx1ZSAvIHNldHRpbmdzLnN0ZXApICogc2V0dGluZ3Muc3RlcCkudG9GaXhlZChzZXR0aW5ncy5kZWNpbWFscyk7XG4gICAgICAgICAgY2FzZSAnZmxvb3InOlxuICAgICAgICAgICAgcmV0dXJuIChNYXRoLmZsb29yKHZhbHVlIC8gc2V0dGluZ3Muc3RlcCkgKiBzZXR0aW5ncy5zdGVwKS50b0ZpeGVkKHNldHRpbmdzLmRlY2ltYWxzKTtcbiAgICAgICAgICBjYXNlICdjZWlsJzpcbiAgICAgICAgICAgIHJldHVybiAoTWF0aC5jZWlsKHZhbHVlIC8gc2V0dGluZ3Muc3RlcCkgKiBzZXR0aW5ncy5zdGVwKS50b0ZpeGVkKHNldHRpbmdzLmRlY2ltYWxzKTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvRml4ZWQoc2V0dGluZ3MuZGVjaW1hbHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfY2hlY2tWYWx1ZSgpIHtcbiAgICAgICAgdmFyIHZhbCwgcGFyc2VkdmFsLCByZXR1cm52YWw7XG4gICAgICAgIHZhbCA9IHNldHRpbmdzLmNhbGxiYWNrX2JlZm9yZV9jYWxjdWxhdGlvbihvcmlnaW5hbGlucHV0LnZhbCgpKTtcbiAgICAgICAgaWYgKHZhbCA9PT0gJycpIHtcbiAgICAgICAgICBpZiAoc2V0dGluZ3MucmVwbGFjZW1lbnR2YWwgIT09ICcnKSB7XG4gICAgICAgICAgICBvcmlnaW5hbGlucHV0LnZhbChzZXR0aW5ncy5yZXBsYWNlbWVudHZhbCk7XG4gICAgICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNldHRpbmdzLmRlY2ltYWxzID4gMCAmJiB2YWwgPT09ICcuJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwYXJzZWR2YWwgPSBwYXJzZUZsb2F0KHZhbCk7XG4gICAgICAgIGlmIChpc05hTihwYXJzZWR2YWwpKSB7XG4gICAgICAgICAgaWYgKHNldHRpbmdzLnJlcGxhY2VtZW50dmFsICE9PSAnJykge1xuICAgICAgICAgICAgcGFyc2VkdmFsID0gc2V0dGluZ3MucmVwbGFjZW1lbnR2YWw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlZHZhbCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybnZhbCA9IHBhcnNlZHZhbDtcbiAgICAgICAgaWYgKHBhcnNlZHZhbC50b1N0cmluZygpICE9PSB2YWwpIHtcbiAgICAgICAgICByZXR1cm52YWwgPSBwYXJzZWR2YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJudmFsID0gX2ZvcmNlc3RlcGRpdmlzaWJpbGl0eShwYXJzZWR2YWwpO1xuICAgICAgICBpZiAoc2V0dGluZ3MubWluICE9PSBudWxsICYmIHBhcnNlZHZhbCA8IHNldHRpbmdzLm1pbikge1xuICAgICAgICAgIHJldHVybnZhbCA9IHNldHRpbmdzLm1pbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2V0dGluZ3MubWF4ICE9PSBudWxsICYmIHBhcnNlZHZhbCA+IHNldHRpbmdzLm1heCkge1xuICAgICAgICAgIHJldHVybnZhbCA9IHNldHRpbmdzLm1heDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VGbG9hdChwYXJzZWR2YWwpLnRvU3RyaW5nKCkgIT09IHBhcnNlRmxvYXQocmV0dXJudmFsKS50b1N0cmluZygpKSB7XG4gICAgICAgICAgb3JpZ2luYWxpbnB1dC52YWwocmV0dXJudmFsKTtcbiAgICAgICAgfVxuICAgICAgICBvcmlnaW5hbGlucHV0LnZhbChzZXR0aW5ncy5jYWxsYmFja19hZnRlcl9jYWxjdWxhdGlvbihwYXJzZUZsb2F0KHJldHVybnZhbCkudG9GaXhlZChzZXR0aW5ncy5kZWNpbWFscykpKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9nZXRCb29zdGVkU3RlcCgpIHtcbiAgICAgICAgaWYgKCFzZXR0aW5ncy5ib29zdGVyKSB7XG4gICAgICAgICAgcmV0dXJuIHNldHRpbmdzLnN0ZXA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGJvb3N0ZWQgPSBNYXRoLnBvdygyLCBNYXRoLmZsb29yKHNwaW5jb3VudCAvIHNldHRpbmdzLmJvb3N0YXQpKSAqIHNldHRpbmdzLnN0ZXA7XG4gICAgICAgICAgaWYgKHNldHRpbmdzLm1heGJvb3N0ZWRzdGVwKSB7XG4gICAgICAgICAgICBpZiAoYm9vc3RlZCA+IHNldHRpbmdzLm1heGJvb3N0ZWRzdGVwKSB7XG4gICAgICAgICAgICAgIGJvb3N0ZWQgPSBzZXR0aW5ncy5tYXhib29zdGVkc3RlcDtcbiAgICAgICAgICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gYm9vc3RlZCkgKiBib29zdGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoc2V0dGluZ3Muc3RlcCwgYm9vc3RlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHZhbHVlSWZJc05hTigpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXR0aW5ncy5maXJzdGNsaWNrdmFsdWVpZmVtcHR5ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHJldHVybiBzZXR0aW5ncy5maXJzdGNsaWNrdmFsdWVpZmVtcHR5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAoc2V0dGluZ3MubWluICsgc2V0dGluZ3MubWF4KSAvIDI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF91cGRhdGVCdXR0b25EaXNhYmxlZFN0YXRlKCkge1xuICAgICAgICB2YXIgaXNEaXNhYmxlZCA9IG9yaWdpbmFsaW5wdXQuaXMoJzpkaXNhYmxlZCxbcmVhZG9ubHldJyk7XG4gICAgICAgIGVsZW1lbnRzLnVwLnByb3AoJ2Rpc2FibGVkJywgaXNEaXNhYmxlZCk7XG4gICAgICAgIGVsZW1lbnRzLmRvd24ucHJvcCgnZGlzYWJsZWQnLCBpc0Rpc2FibGVkKTtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgICAgICBzdG9wU3BpbigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB1cE9uY2UoKSB7XG4gICAgICAgIGlmIChvcmlnaW5hbGlucHV0LmlzKCc6ZGlzYWJsZWQsW3JlYWRvbmx5XScpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIF9jaGVja1ZhbHVlKCk7XG4gICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdChzZXR0aW5ncy5jYWxsYmFja19iZWZvcmVfY2FsY3VsYXRpb24oZWxlbWVudHMuaW5wdXQudmFsKCkpKTtcbiAgICAgICAgdmFyIGluaXR2YWx1ZSA9IHZhbHVlO1xuICAgICAgICB2YXIgYm9vc3RlZHN0ZXA7XG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlSWZJc05hTigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvb3N0ZWRzdGVwID0gX2dldEJvb3N0ZWRTdGVwKCk7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSArIGJvb3N0ZWRzdGVwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXR0aW5ncy5tYXggIT09IG51bGwgJiYgdmFsdWUgPj0gc2V0dGluZ3MubWF4KSB7XG4gICAgICAgICAgdmFsdWUgPSBzZXR0aW5ncy5tYXg7XG4gICAgICAgICAgb3JpZ2luYWxpbnB1dC50cmlnZ2VyKCd0b3VjaHNwaW4ub24ubWF4Jyk7XG4gICAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50cy5pbnB1dC52YWwoc2V0dGluZ3MuY2FsbGJhY2tfYWZ0ZXJfY2FsY3VsYXRpb24ocGFyc2VGbG9hdCh2YWx1ZSkudG9GaXhlZChzZXR0aW5ncy5kZWNpbWFscykpKTtcbiAgICAgICAgaWYgKGluaXR2YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBkb3duT25jZSgpIHtcbiAgICAgICAgaWYgKG9yaWdpbmFsaW5wdXQuaXMoJzpkaXNhYmxlZCxbcmVhZG9ubHldJykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgX2NoZWNrVmFsdWUoKTtcbiAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHNldHRpbmdzLmNhbGxiYWNrX2JlZm9yZV9jYWxjdWxhdGlvbihlbGVtZW50cy5pbnB1dC52YWwoKSkpO1xuICAgICAgICB2YXIgaW5pdHZhbHVlID0gdmFsdWU7XG4gICAgICAgIHZhciBib29zdGVkc3RlcDtcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWVJZklzTmFOKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYm9vc3RlZHN0ZXAgPSBfZ2V0Qm9vc3RlZFN0ZXAoKTtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC0gYm9vc3RlZHN0ZXA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNldHRpbmdzLm1pbiAhPT0gbnVsbCAmJiB2YWx1ZSA8PSBzZXR0aW5ncy5taW4pIHtcbiAgICAgICAgICB2YWx1ZSA9IHNldHRpbmdzLm1pbjtcbiAgICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ3RvdWNoc3Bpbi5vbi5taW4nKTtcbiAgICAgICAgICBzdG9wU3BpbigpO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnRzLmlucHV0LnZhbChzZXR0aW5ncy5jYWxsYmFja19hZnRlcl9jYWxjdWxhdGlvbihwYXJzZUZsb2F0KHZhbHVlKS50b0ZpeGVkKHNldHRpbmdzLmRlY2ltYWxzKSkpO1xuICAgICAgICBpZiAoaW5pdHZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICAgIG9yaWdpbmFsaW5wdXQudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHN0YXJ0RG93blNwaW4oKSB7XG4gICAgICAgIGlmIChvcmlnaW5hbGlucHV0LmlzKCc6ZGlzYWJsZWQsW3JlYWRvbmx5XScpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN0b3BTcGluKCk7XG4gICAgICAgIHNwaW5jb3VudCA9IDA7XG4gICAgICAgIHNwaW5uaW5nID0gJ2Rvd24nO1xuICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ3RvdWNoc3Bpbi5vbi5zdGFydHNwaW4nKTtcbiAgICAgICAgb3JpZ2luYWxpbnB1dC50cmlnZ2VyKCd0b3VjaHNwaW4ub24uc3RhcnRkb3duc3BpbicpO1xuICAgICAgICBkb3duRGVsYXlUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZG93blNwaW5UaW1lciA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNwaW5jb3VudCsrO1xuICAgICAgICAgICAgZG93bk9uY2UoKTtcbiAgICAgICAgICB9LCBzZXR0aW5ncy5zdGVwaW50ZXJ2YWwpO1xuICAgICAgICB9LCBzZXR0aW5ncy5zdGVwaW50ZXJ2YWxkZWxheSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBzdGFydFVwU3BpbigpIHtcbiAgICAgICAgaWYgKG9yaWdpbmFsaW5wdXQuaXMoJzpkaXNhYmxlZCxbcmVhZG9ubHldJykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgc3BpbmNvdW50ID0gMDtcbiAgICAgICAgc3Bpbm5pbmcgPSAndXAnO1xuICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ3RvdWNoc3Bpbi5vbi5zdGFydHNwaW4nKTtcbiAgICAgICAgb3JpZ2luYWxpbnB1dC50cmlnZ2VyKCd0b3VjaHNwaW4ub24uc3RhcnR1cHNwaW4nKTtcbiAgICAgICAgdXBEZWxheVRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB1cFNwaW5UaW1lciA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNwaW5jb3VudCsrO1xuICAgICAgICAgICAgdXBPbmNlKCk7XG4gICAgICAgICAgfSwgc2V0dGluZ3Muc3RlcGludGVydmFsKTtcbiAgICAgICAgfSwgc2V0dGluZ3Muc3RlcGludGVydmFsZGVsYXkpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gc3RvcFNwaW4oKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChkb3duRGVsYXlUaW1lb3V0KTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHVwRGVsYXlUaW1lb3V0KTtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChkb3duU3BpblRpbWVyKTtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh1cFNwaW5UaW1lcik7XG4gICAgICAgIHN3aXRjaCAoc3Bpbm5pbmcpIHtcbiAgICAgICAgICBjYXNlICd1cCc6XG4gICAgICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ3RvdWNoc3Bpbi5vbi5zdG9wdXBzcGluJyk7XG4gICAgICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ3RvdWNoc3Bpbi5vbi5zdG9wc3BpbicpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ3RvdWNoc3Bpbi5vbi5zdG9wZG93bnNwaW4nKTtcbiAgICAgICAgICAgIG9yaWdpbmFsaW5wdXQudHJpZ2dlcigndG91Y2hzcGluLm9uLnN0b3BzcGluJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzcGluY291bnQgPSAwO1xuICAgICAgICBzcGlubmluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1qcXVlcnkuYm9vdHN0cmFwLXRvdWNoc3Bpbi5qcy5tYXBcbiIsIi8qIVxuICogQGZpbGVPdmVydmlldyBUb3VjaFN3aXBlIC0galF1ZXJ5IFBsdWdpblxuICogQHZlcnNpb24gMS42LjE4XG4gKlxuICogQGF1dGhvciBNYXR0IEJyeXNvbiBodHRwOi8vd3d3LmdpdGh1Yi5jb20vbWF0dGJyeXNvblxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWF0dGJyeXNvbi9Ub3VjaFN3aXBlLUpxdWVyeS1QbHVnaW5cbiAqIEBzZWUgaHR0cDovL2xhYnMucmFtcGludGVyYWN0aXZlLmNvLnVrL3RvdWNoU3dpcGUvXG4gKiBAc2VlIGh0dHA6Ly9wbHVnaW5zLmpxdWVyeS5jb20vcHJvamVjdC90b3VjaFN3aXBlXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTUgTWF0dCBCcnlzb25cbiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLlxuICpcbiAqL1xuIWZ1bmN0aW9uKGZhY3Rvcnkpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lLmFtZC5qUXVlcnk/ZGVmaW5lKFtcImpxdWVyeVwiXSxmYWN0b3J5KTpmYWN0b3J5KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzP3JlcXVpcmUoXCJqcXVlcnlcIik6alF1ZXJ5KX0oZnVuY3Rpb24oJCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gaW5pdChvcHRpb25zKXtyZXR1cm4hb3B0aW9uc3x8dm9pZCAwIT09b3B0aW9ucy5hbGxvd1BhZ2VTY3JvbGx8fHZvaWQgMD09PW9wdGlvbnMuc3dpcGUmJnZvaWQgMD09PW9wdGlvbnMuc3dpcGVTdGF0dXN8fChvcHRpb25zLmFsbG93UGFnZVNjcm9sbD1OT05FKSx2b2lkIDAhPT1vcHRpb25zLmNsaWNrJiZ2b2lkIDA9PT1vcHRpb25zLnRhcCYmKG9wdGlvbnMudGFwPW9wdGlvbnMuY2xpY2spLG9wdGlvbnN8fChvcHRpb25zPXt9KSxvcHRpb25zPSQuZXh0ZW5kKHt9LCQuZm4uc3dpcGUuZGVmYXVsdHMsb3B0aW9ucyksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyICR0aGlzPSQodGhpcykscGx1Z2luPSR0aGlzLmRhdGEoUExVR0lOX05TKTtwbHVnaW58fChwbHVnaW49bmV3IFRvdWNoU3dpcGUodGhpcyxvcHRpb25zKSwkdGhpcy5kYXRhKFBMVUdJTl9OUyxwbHVnaW4pKX0pfWZ1bmN0aW9uIFRvdWNoU3dpcGUoZWxlbWVudCxvcHRpb25zKXtmdW5jdGlvbiB0b3VjaFN0YXJ0KGpxRXZlbnQpe2lmKCEoZ2V0VG91Y2hJblByb2dyZXNzKCl8fCQoanFFdmVudC50YXJnZXQpLmNsb3Nlc3Qob3B0aW9ucy5leGNsdWRlZEVsZW1lbnRzLCRlbGVtZW50KS5sZW5ndGg+MCkpe3ZhciBldmVudD1qcUV2ZW50Lm9yaWdpbmFsRXZlbnQ/anFFdmVudC5vcmlnaW5hbEV2ZW50OmpxRXZlbnQ7aWYoIWV2ZW50LnBvaW50ZXJUeXBlfHxcIm1vdXNlXCIhPWV2ZW50LnBvaW50ZXJUeXBlfHwwIT1vcHRpb25zLmZhbGxiYWNrVG9Nb3VzZUV2ZW50cyl7dmFyIHJldCx0b3VjaGVzPWV2ZW50LnRvdWNoZXMsZXZ0PXRvdWNoZXM/dG91Y2hlc1swXTpldmVudDtyZXR1cm4gcGhhc2U9UEhBU0VfU1RBUlQsdG91Y2hlcz9maW5nZXJDb3VudD10b3VjaGVzLmxlbmd0aDpvcHRpb25zLnByZXZlbnREZWZhdWx0RXZlbnRzIT09ITEmJmpxRXZlbnQucHJldmVudERlZmF1bHQoKSxkaXN0YW5jZT0wLGRpcmVjdGlvbj1udWxsLGN1cnJlbnREaXJlY3Rpb249bnVsbCxwaW5jaERpcmVjdGlvbj1udWxsLGR1cmF0aW9uPTAsc3RhcnRUb3VjaGVzRGlzdGFuY2U9MCxlbmRUb3VjaGVzRGlzdGFuY2U9MCxwaW5jaFpvb209MSxwaW5jaERpc3RhbmNlPTAsbWF4aW11bXNNYXA9Y3JlYXRlTWF4aW11bXNEYXRhKCksY2FuY2VsTXVsdGlGaW5nZXJSZWxlYXNlKCksY3JlYXRlRmluZ2VyRGF0YSgwLGV2dCksIXRvdWNoZXN8fGZpbmdlckNvdW50PT09b3B0aW9ucy5maW5nZXJzfHxvcHRpb25zLmZpbmdlcnM9PT1BTExfRklOR0VSU3x8aGFzUGluY2hlcygpPyhzdGFydFRpbWU9Z2V0VGltZVN0YW1wKCksMj09ZmluZ2VyQ291bnQmJihjcmVhdGVGaW5nZXJEYXRhKDEsdG91Y2hlc1sxXSksc3RhcnRUb3VjaGVzRGlzdGFuY2U9ZW5kVG91Y2hlc0Rpc3RhbmNlPWNhbGN1bGF0ZVRvdWNoZXNEaXN0YW5jZShmaW5nZXJEYXRhWzBdLnN0YXJ0LGZpbmdlckRhdGFbMV0uc3RhcnQpKSwob3B0aW9ucy5zd2lwZVN0YXR1c3x8b3B0aW9ucy5waW5jaFN0YXR1cykmJihyZXQ9dHJpZ2dlckhhbmRsZXIoZXZlbnQscGhhc2UpKSk6cmV0PSExLHJldD09PSExPyhwaGFzZT1QSEFTRV9DQU5DRUwsdHJpZ2dlckhhbmRsZXIoZXZlbnQscGhhc2UpLHJldCk6KG9wdGlvbnMuaG9sZCYmKGhvbGRUaW1lb3V0PXNldFRpbWVvdXQoJC5wcm94eShmdW5jdGlvbigpeyRlbGVtZW50LnRyaWdnZXIoXCJob2xkXCIsW2V2ZW50LnRhcmdldF0pLG9wdGlvbnMuaG9sZCYmKHJldD1vcHRpb25zLmhvbGQuY2FsbCgkZWxlbWVudCxldmVudCxldmVudC50YXJnZXQpKX0sdGhpcyksb3B0aW9ucy5sb25nVGFwVGhyZXNob2xkKSksc2V0VG91Y2hJblByb2dyZXNzKCEwKSxudWxsKX19fWZ1bmN0aW9uIHRvdWNoTW92ZShqcUV2ZW50KXt2YXIgZXZlbnQ9anFFdmVudC5vcmlnaW5hbEV2ZW50P2pxRXZlbnQub3JpZ2luYWxFdmVudDpqcUV2ZW50O2lmKHBoYXNlIT09UEhBU0VfRU5EJiZwaGFzZSE9PVBIQVNFX0NBTkNFTCYmIWluTXVsdGlGaW5nZXJSZWxlYXNlKCkpe3ZhciByZXQsdG91Y2hlcz1ldmVudC50b3VjaGVzLGV2dD10b3VjaGVzP3RvdWNoZXNbMF06ZXZlbnQsY3VycmVudEZpbmdlcj11cGRhdGVGaW5nZXJEYXRhKGV2dCk7aWYoZW5kVGltZT1nZXRUaW1lU3RhbXAoKSx0b3VjaGVzJiYoZmluZ2VyQ291bnQ9dG91Y2hlcy5sZW5ndGgpLG9wdGlvbnMuaG9sZCYmY2xlYXJUaW1lb3V0KGhvbGRUaW1lb3V0KSxwaGFzZT1QSEFTRV9NT1ZFLDI9PWZpbmdlckNvdW50JiYoMD09c3RhcnRUb3VjaGVzRGlzdGFuY2U/KGNyZWF0ZUZpbmdlckRhdGEoMSx0b3VjaGVzWzFdKSxzdGFydFRvdWNoZXNEaXN0YW5jZT1lbmRUb3VjaGVzRGlzdGFuY2U9Y2FsY3VsYXRlVG91Y2hlc0Rpc3RhbmNlKGZpbmdlckRhdGFbMF0uc3RhcnQsZmluZ2VyRGF0YVsxXS5zdGFydCkpOih1cGRhdGVGaW5nZXJEYXRhKHRvdWNoZXNbMV0pLGVuZFRvdWNoZXNEaXN0YW5jZT1jYWxjdWxhdGVUb3VjaGVzRGlzdGFuY2UoZmluZ2VyRGF0YVswXS5lbmQsZmluZ2VyRGF0YVsxXS5lbmQpLHBpbmNoRGlyZWN0aW9uPWNhbGN1bGF0ZVBpbmNoRGlyZWN0aW9uKGZpbmdlckRhdGFbMF0uZW5kLGZpbmdlckRhdGFbMV0uZW5kKSkscGluY2hab29tPWNhbGN1bGF0ZVBpbmNoWm9vbShzdGFydFRvdWNoZXNEaXN0YW5jZSxlbmRUb3VjaGVzRGlzdGFuY2UpLHBpbmNoRGlzdGFuY2U9TWF0aC5hYnMoc3RhcnRUb3VjaGVzRGlzdGFuY2UtZW5kVG91Y2hlc0Rpc3RhbmNlKSksZmluZ2VyQ291bnQ9PT1vcHRpb25zLmZpbmdlcnN8fG9wdGlvbnMuZmluZ2Vycz09PUFMTF9GSU5HRVJTfHwhdG91Y2hlc3x8aGFzUGluY2hlcygpKXtpZihkaXJlY3Rpb249Y2FsY3VsYXRlRGlyZWN0aW9uKGN1cnJlbnRGaW5nZXIuc3RhcnQsY3VycmVudEZpbmdlci5lbmQpLGN1cnJlbnREaXJlY3Rpb249Y2FsY3VsYXRlRGlyZWN0aW9uKGN1cnJlbnRGaW5nZXIubGFzdCxjdXJyZW50RmluZ2VyLmVuZCksdmFsaWRhdGVEZWZhdWx0RXZlbnQoanFFdmVudCxjdXJyZW50RGlyZWN0aW9uKSxkaXN0YW5jZT1jYWxjdWxhdGVEaXN0YW5jZShjdXJyZW50RmluZ2VyLnN0YXJ0LGN1cnJlbnRGaW5nZXIuZW5kKSxkdXJhdGlvbj1jYWxjdWxhdGVEdXJhdGlvbigpLHNldE1heERpc3RhbmNlKGRpcmVjdGlvbixkaXN0YW5jZSkscmV0PXRyaWdnZXJIYW5kbGVyKGV2ZW50LHBoYXNlKSwhb3B0aW9ucy50cmlnZ2VyT25Ub3VjaEVuZHx8b3B0aW9ucy50cmlnZ2VyT25Ub3VjaExlYXZlKXt2YXIgaW5Cb3VuZHM9ITA7aWYob3B0aW9ucy50cmlnZ2VyT25Ub3VjaExlYXZlKXt2YXIgYm91bmRzPWdldGJvdW5kcyh0aGlzKTtpbkJvdW5kcz1pc0luQm91bmRzKGN1cnJlbnRGaW5nZXIuZW5kLGJvdW5kcyl9IW9wdGlvbnMudHJpZ2dlck9uVG91Y2hFbmQmJmluQm91bmRzP3BoYXNlPWdldE5leHRQaGFzZShQSEFTRV9NT1ZFKTpvcHRpb25zLnRyaWdnZXJPblRvdWNoTGVhdmUmJiFpbkJvdW5kcyYmKHBoYXNlPWdldE5leHRQaGFzZShQSEFTRV9FTkQpKSxwaGFzZSE9UEhBU0VfQ0FOQ0VMJiZwaGFzZSE9UEhBU0VfRU5EfHx0cmlnZ2VySGFuZGxlcihldmVudCxwaGFzZSl9fWVsc2UgcGhhc2U9UEhBU0VfQ0FOQ0VMLHRyaWdnZXJIYW5kbGVyKGV2ZW50LHBoYXNlKTtyZXQ9PT0hMSYmKHBoYXNlPVBIQVNFX0NBTkNFTCx0cmlnZ2VySGFuZGxlcihldmVudCxwaGFzZSkpfX1mdW5jdGlvbiB0b3VjaEVuZChqcUV2ZW50KXt2YXIgZXZlbnQ9anFFdmVudC5vcmlnaW5hbEV2ZW50P2pxRXZlbnQub3JpZ2luYWxFdmVudDpqcUV2ZW50LHRvdWNoZXM9ZXZlbnQudG91Y2hlcztpZih0b3VjaGVzKXtpZih0b3VjaGVzLmxlbmd0aCYmIWluTXVsdGlGaW5nZXJSZWxlYXNlKCkpcmV0dXJuIHN0YXJ0TXVsdGlGaW5nZXJSZWxlYXNlKGV2ZW50KSwhMDtpZih0b3VjaGVzLmxlbmd0aCYmaW5NdWx0aUZpbmdlclJlbGVhc2UoKSlyZXR1cm4hMH1yZXR1cm4gaW5NdWx0aUZpbmdlclJlbGVhc2UoKSYmKGZpbmdlckNvdW50PWZpbmdlckNvdW50QXRSZWxlYXNlKSxlbmRUaW1lPWdldFRpbWVTdGFtcCgpLGR1cmF0aW9uPWNhbGN1bGF0ZUR1cmF0aW9uKCksZGlkU3dpcGVCYWNrVG9DYW5jZWwoKXx8IXZhbGlkYXRlU3dpcGVEaXN0YW5jZSgpPyhwaGFzZT1QSEFTRV9DQU5DRUwsdHJpZ2dlckhhbmRsZXIoZXZlbnQscGhhc2UpKTpvcHRpb25zLnRyaWdnZXJPblRvdWNoRW5kfHxvcHRpb25zLnRyaWdnZXJPblRvdWNoRW5kPT09ITEmJnBoYXNlPT09UEhBU0VfTU9WRT8ob3B0aW9ucy5wcmV2ZW50RGVmYXVsdEV2ZW50cyE9PSExJiZqcUV2ZW50LmNhbmNlbGFibGUhPT0hMSYmanFFdmVudC5wcmV2ZW50RGVmYXVsdCgpLHBoYXNlPVBIQVNFX0VORCx0cmlnZ2VySGFuZGxlcihldmVudCxwaGFzZSkpOiFvcHRpb25zLnRyaWdnZXJPblRvdWNoRW5kJiZoYXNUYXAoKT8ocGhhc2U9UEhBU0VfRU5ELHRyaWdnZXJIYW5kbGVyRm9yR2VzdHVyZShldmVudCxwaGFzZSxUQVApKTpwaGFzZT09PVBIQVNFX01PVkUmJihwaGFzZT1QSEFTRV9DQU5DRUwsdHJpZ2dlckhhbmRsZXIoZXZlbnQscGhhc2UpKSxzZXRUb3VjaEluUHJvZ3Jlc3MoITEpLG51bGx9ZnVuY3Rpb24gdG91Y2hDYW5jZWwoKXtmaW5nZXJDb3VudD0wLGVuZFRpbWU9MCxzdGFydFRpbWU9MCxzdGFydFRvdWNoZXNEaXN0YW5jZT0wLGVuZFRvdWNoZXNEaXN0YW5jZT0wLHBpbmNoWm9vbT0xLGNhbmNlbE11bHRpRmluZ2VyUmVsZWFzZSgpLHNldFRvdWNoSW5Qcm9ncmVzcyghMSl9ZnVuY3Rpb24gdG91Y2hMZWF2ZShqcUV2ZW50KXt2YXIgZXZlbnQ9anFFdmVudC5vcmlnaW5hbEV2ZW50P2pxRXZlbnQub3JpZ2luYWxFdmVudDpqcUV2ZW50O29wdGlvbnMudHJpZ2dlck9uVG91Y2hMZWF2ZSYmKHBoYXNlPWdldE5leHRQaGFzZShQSEFTRV9FTkQpLHRyaWdnZXJIYW5kbGVyKGV2ZW50LHBoYXNlKSl9ZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXJzKCl7JGVsZW1lbnQub2ZmKFNUQVJUX0VWLHRvdWNoU3RhcnQpLCRlbGVtZW50Lm9mZihDQU5DRUxfRVYsdG91Y2hDYW5jZWwpLCRlbGVtZW50Lm9mZihNT1ZFX0VWLHRvdWNoTW92ZSksJGVsZW1lbnQub2ZmKEVORF9FVix0b3VjaEVuZCksTEVBVkVfRVYmJiRlbGVtZW50Lm9mZihMRUFWRV9FVix0b3VjaExlYXZlKSxzZXRUb3VjaEluUHJvZ3Jlc3MoITEpfWZ1bmN0aW9uIGdldE5leHRQaGFzZShjdXJyZW50UGhhc2Upe3ZhciBuZXh0UGhhc2U9Y3VycmVudFBoYXNlLHZhbGlkVGltZT12YWxpZGF0ZVN3aXBlVGltZSgpLHZhbGlkRGlzdGFuY2U9dmFsaWRhdGVTd2lwZURpc3RhbmNlKCksZGlkQ2FuY2VsPWRpZFN3aXBlQmFja1RvQ2FuY2VsKCk7cmV0dXJuIXZhbGlkVGltZXx8ZGlkQ2FuY2VsP25leHRQaGFzZT1QSEFTRV9DQU5DRUw6IXZhbGlkRGlzdGFuY2V8fGN1cnJlbnRQaGFzZSE9UEhBU0VfTU9WRXx8b3B0aW9ucy50cmlnZ2VyT25Ub3VjaEVuZCYmIW9wdGlvbnMudHJpZ2dlck9uVG91Y2hMZWF2ZT8hdmFsaWREaXN0YW5jZSYmY3VycmVudFBoYXNlPT1QSEFTRV9FTkQmJm9wdGlvbnMudHJpZ2dlck9uVG91Y2hMZWF2ZSYmKG5leHRQaGFzZT1QSEFTRV9DQU5DRUwpOm5leHRQaGFzZT1QSEFTRV9FTkQsbmV4dFBoYXNlfWZ1bmN0aW9uIHRyaWdnZXJIYW5kbGVyKGV2ZW50LHBoYXNlKXt2YXIgcmV0LHRvdWNoZXM9ZXZlbnQudG91Y2hlcztyZXR1cm4oZGlkU3dpcGUoKXx8aGFzU3dpcGVzKCkpJiYocmV0PXRyaWdnZXJIYW5kbGVyRm9yR2VzdHVyZShldmVudCxwaGFzZSxTV0lQRSkpLChkaWRQaW5jaCgpfHxoYXNQaW5jaGVzKCkpJiZyZXQhPT0hMSYmKHJldD10cmlnZ2VySGFuZGxlckZvckdlc3R1cmUoZXZlbnQscGhhc2UsUElOQ0gpKSxkaWREb3VibGVUYXAoKSYmcmV0IT09ITE/cmV0PXRyaWdnZXJIYW5kbGVyRm9yR2VzdHVyZShldmVudCxwaGFzZSxET1VCTEVfVEFQKTpkaWRMb25nVGFwKCkmJnJldCE9PSExP3JldD10cmlnZ2VySGFuZGxlckZvckdlc3R1cmUoZXZlbnQscGhhc2UsTE9OR19UQVApOmRpZFRhcCgpJiZyZXQhPT0hMSYmKHJldD10cmlnZ2VySGFuZGxlckZvckdlc3R1cmUoZXZlbnQscGhhc2UsVEFQKSkscGhhc2U9PT1QSEFTRV9DQU5DRUwmJnRvdWNoQ2FuY2VsKGV2ZW50KSxwaGFzZT09PVBIQVNFX0VORCYmKHRvdWNoZXM/dG91Y2hlcy5sZW5ndGh8fHRvdWNoQ2FuY2VsKGV2ZW50KTp0b3VjaENhbmNlbChldmVudCkpLHJldH1mdW5jdGlvbiB0cmlnZ2VySGFuZGxlckZvckdlc3R1cmUoZXZlbnQscGhhc2UsZ2VzdHVyZSl7dmFyIHJldDtpZihnZXN0dXJlPT1TV0lQRSl7aWYoJGVsZW1lbnQudHJpZ2dlcihcInN3aXBlU3RhdHVzXCIsW3BoYXNlLGRpcmVjdGlvbnx8bnVsbCxkaXN0YW5jZXx8MCxkdXJhdGlvbnx8MCxmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb25dKSxvcHRpb25zLnN3aXBlU3RhdHVzJiYocmV0PW9wdGlvbnMuc3dpcGVTdGF0dXMuY2FsbCgkZWxlbWVudCxldmVudCxwaGFzZSxkaXJlY3Rpb258fG51bGwsZGlzdGFuY2V8fDAsZHVyYXRpb258fDAsZmluZ2VyQ291bnQsZmluZ2VyRGF0YSxjdXJyZW50RGlyZWN0aW9uKSxyZXQ9PT0hMSkpcmV0dXJuITE7aWYocGhhc2U9PVBIQVNFX0VORCYmdmFsaWRhdGVTd2lwZSgpKXtpZihjbGVhclRpbWVvdXQoc2luZ2xlVGFwVGltZW91dCksY2xlYXJUaW1lb3V0KGhvbGRUaW1lb3V0KSwkZWxlbWVudC50cmlnZ2VyKFwic3dpcGVcIixbZGlyZWN0aW9uLGRpc3RhbmNlLGR1cmF0aW9uLGZpbmdlckNvdW50LGZpbmdlckRhdGEsY3VycmVudERpcmVjdGlvbl0pLG9wdGlvbnMuc3dpcGUmJihyZXQ9b3B0aW9ucy5zd2lwZS5jYWxsKCRlbGVtZW50LGV2ZW50LGRpcmVjdGlvbixkaXN0YW5jZSxkdXJhdGlvbixmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb24pLHJldD09PSExKSlyZXR1cm4hMTtzd2l0Y2goZGlyZWN0aW9uKXtjYXNlIExFRlQ6JGVsZW1lbnQudHJpZ2dlcihcInN3aXBlTGVmdFwiLFtkaXJlY3Rpb24sZGlzdGFuY2UsZHVyYXRpb24sZmluZ2VyQ291bnQsZmluZ2VyRGF0YSxjdXJyZW50RGlyZWN0aW9uXSksb3B0aW9ucy5zd2lwZUxlZnQmJihyZXQ9b3B0aW9ucy5zd2lwZUxlZnQuY2FsbCgkZWxlbWVudCxldmVudCxkaXJlY3Rpb24sZGlzdGFuY2UsZHVyYXRpb24sZmluZ2VyQ291bnQsZmluZ2VyRGF0YSxjdXJyZW50RGlyZWN0aW9uKSk7YnJlYWs7Y2FzZSBSSUdIVDokZWxlbWVudC50cmlnZ2VyKFwic3dpcGVSaWdodFwiLFtkaXJlY3Rpb24sZGlzdGFuY2UsZHVyYXRpb24sZmluZ2VyQ291bnQsZmluZ2VyRGF0YSxjdXJyZW50RGlyZWN0aW9uXSksb3B0aW9ucy5zd2lwZVJpZ2h0JiYocmV0PW9wdGlvbnMuc3dpcGVSaWdodC5jYWxsKCRlbGVtZW50LGV2ZW50LGRpcmVjdGlvbixkaXN0YW5jZSxkdXJhdGlvbixmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb24pKTticmVhaztjYXNlIFVQOiRlbGVtZW50LnRyaWdnZXIoXCJzd2lwZVVwXCIsW2RpcmVjdGlvbixkaXN0YW5jZSxkdXJhdGlvbixmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb25dKSxvcHRpb25zLnN3aXBlVXAmJihyZXQ9b3B0aW9ucy5zd2lwZVVwLmNhbGwoJGVsZW1lbnQsZXZlbnQsZGlyZWN0aW9uLGRpc3RhbmNlLGR1cmF0aW9uLGZpbmdlckNvdW50LGZpbmdlckRhdGEsY3VycmVudERpcmVjdGlvbikpO2JyZWFrO2Nhc2UgRE9XTjokZWxlbWVudC50cmlnZ2VyKFwic3dpcGVEb3duXCIsW2RpcmVjdGlvbixkaXN0YW5jZSxkdXJhdGlvbixmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb25dKSxvcHRpb25zLnN3aXBlRG93biYmKHJldD1vcHRpb25zLnN3aXBlRG93bi5jYWxsKCRlbGVtZW50LGV2ZW50LGRpcmVjdGlvbixkaXN0YW5jZSxkdXJhdGlvbixmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb24pKX19fWlmKGdlc3R1cmU9PVBJTkNIKXtpZigkZWxlbWVudC50cmlnZ2VyKFwicGluY2hTdGF0dXNcIixbcGhhc2UscGluY2hEaXJlY3Rpb258fG51bGwscGluY2hEaXN0YW5jZXx8MCxkdXJhdGlvbnx8MCxmaW5nZXJDb3VudCxwaW5jaFpvb20sZmluZ2VyRGF0YV0pLG9wdGlvbnMucGluY2hTdGF0dXMmJihyZXQ9b3B0aW9ucy5waW5jaFN0YXR1cy5jYWxsKCRlbGVtZW50LGV2ZW50LHBoYXNlLHBpbmNoRGlyZWN0aW9ufHxudWxsLHBpbmNoRGlzdGFuY2V8fDAsZHVyYXRpb258fDAsZmluZ2VyQ291bnQscGluY2hab29tLGZpbmdlckRhdGEpLHJldD09PSExKSlyZXR1cm4hMTtpZihwaGFzZT09UEhBU0VfRU5EJiZ2YWxpZGF0ZVBpbmNoKCkpc3dpdGNoKHBpbmNoRGlyZWN0aW9uKXtjYXNlIElOOiRlbGVtZW50LnRyaWdnZXIoXCJwaW5jaEluXCIsW3BpbmNoRGlyZWN0aW9ufHxudWxsLHBpbmNoRGlzdGFuY2V8fDAsZHVyYXRpb258fDAsZmluZ2VyQ291bnQscGluY2hab29tLGZpbmdlckRhdGFdKSxvcHRpb25zLnBpbmNoSW4mJihyZXQ9b3B0aW9ucy5waW5jaEluLmNhbGwoJGVsZW1lbnQsZXZlbnQscGluY2hEaXJlY3Rpb258fG51bGwscGluY2hEaXN0YW5jZXx8MCxkdXJhdGlvbnx8MCxmaW5nZXJDb3VudCxwaW5jaFpvb20sZmluZ2VyRGF0YSkpO2JyZWFrO2Nhc2UgT1VUOiRlbGVtZW50LnRyaWdnZXIoXCJwaW5jaE91dFwiLFtwaW5jaERpcmVjdGlvbnx8bnVsbCxwaW5jaERpc3RhbmNlfHwwLGR1cmF0aW9ufHwwLGZpbmdlckNvdW50LHBpbmNoWm9vbSxmaW5nZXJEYXRhXSksb3B0aW9ucy5waW5jaE91dCYmKHJldD1vcHRpb25zLnBpbmNoT3V0LmNhbGwoJGVsZW1lbnQsZXZlbnQscGluY2hEaXJlY3Rpb258fG51bGwscGluY2hEaXN0YW5jZXx8MCxkdXJhdGlvbnx8MCxmaW5nZXJDb3VudCxwaW5jaFpvb20sZmluZ2VyRGF0YSkpfX1yZXR1cm4gZ2VzdHVyZT09VEFQP3BoYXNlIT09UEhBU0VfQ0FOQ0VMJiZwaGFzZSE9PVBIQVNFX0VORHx8KGNsZWFyVGltZW91dChzaW5nbGVUYXBUaW1lb3V0KSxjbGVhclRpbWVvdXQoaG9sZFRpbWVvdXQpLGhhc0RvdWJsZVRhcCgpJiYhaW5Eb3VibGVUYXAoKT8oZG91YmxlVGFwU3RhcnRUaW1lPWdldFRpbWVTdGFtcCgpLHNpbmdsZVRhcFRpbWVvdXQ9c2V0VGltZW91dCgkLnByb3h5KGZ1bmN0aW9uKCl7ZG91YmxlVGFwU3RhcnRUaW1lPW51bGwsJGVsZW1lbnQudHJpZ2dlcihcInRhcFwiLFtldmVudC50YXJnZXRdKSxvcHRpb25zLnRhcCYmKHJldD1vcHRpb25zLnRhcC5jYWxsKCRlbGVtZW50LGV2ZW50LGV2ZW50LnRhcmdldCkpfSx0aGlzKSxvcHRpb25zLmRvdWJsZVRhcFRocmVzaG9sZCkpOihkb3VibGVUYXBTdGFydFRpbWU9bnVsbCwkZWxlbWVudC50cmlnZ2VyKFwidGFwXCIsW2V2ZW50LnRhcmdldF0pLG9wdGlvbnMudGFwJiYocmV0PW9wdGlvbnMudGFwLmNhbGwoJGVsZW1lbnQsZXZlbnQsZXZlbnQudGFyZ2V0KSkpKTpnZXN0dXJlPT1ET1VCTEVfVEFQP3BoYXNlIT09UEhBU0VfQ0FOQ0VMJiZwaGFzZSE9PVBIQVNFX0VORHx8KGNsZWFyVGltZW91dChzaW5nbGVUYXBUaW1lb3V0KSxjbGVhclRpbWVvdXQoaG9sZFRpbWVvdXQpLGRvdWJsZVRhcFN0YXJ0VGltZT1udWxsLCRlbGVtZW50LnRyaWdnZXIoXCJkb3VibGV0YXBcIixbZXZlbnQudGFyZ2V0XSksb3B0aW9ucy5kb3VibGVUYXAmJihyZXQ9b3B0aW9ucy5kb3VibGVUYXAuY2FsbCgkZWxlbWVudCxldmVudCxldmVudC50YXJnZXQpKSk6Z2VzdHVyZT09TE9OR19UQVAmJihwaGFzZSE9PVBIQVNFX0NBTkNFTCYmcGhhc2UhPT1QSEFTRV9FTkR8fChjbGVhclRpbWVvdXQoc2luZ2xlVGFwVGltZW91dCksZG91YmxlVGFwU3RhcnRUaW1lPW51bGwsJGVsZW1lbnQudHJpZ2dlcihcImxvbmd0YXBcIixbZXZlbnQudGFyZ2V0XSksb3B0aW9ucy5sb25nVGFwJiYocmV0PW9wdGlvbnMubG9uZ1RhcC5jYWxsKCRlbGVtZW50LGV2ZW50LGV2ZW50LnRhcmdldCkpKSkscmV0fWZ1bmN0aW9uIHZhbGlkYXRlU3dpcGVEaXN0YW5jZSgpe3ZhciB2YWxpZD0hMDtyZXR1cm4gbnVsbCE9PW9wdGlvbnMudGhyZXNob2xkJiYodmFsaWQ9ZGlzdGFuY2U+PW9wdGlvbnMudGhyZXNob2xkKSx2YWxpZH1mdW5jdGlvbiBkaWRTd2lwZUJhY2tUb0NhbmNlbCgpe3ZhciBjYW5jZWxsZWQ9ITE7cmV0dXJuIG51bGwhPT1vcHRpb25zLmNhbmNlbFRocmVzaG9sZCYmbnVsbCE9PWRpcmVjdGlvbiYmKGNhbmNlbGxlZD1nZXRNYXhEaXN0YW5jZShkaXJlY3Rpb24pLWRpc3RhbmNlPj1vcHRpb25zLmNhbmNlbFRocmVzaG9sZCksY2FuY2VsbGVkfWZ1bmN0aW9uIHZhbGlkYXRlUGluY2hEaXN0YW5jZSgpe3JldHVybiBudWxsIT09b3B0aW9ucy5waW5jaFRocmVzaG9sZD9waW5jaERpc3RhbmNlPj1vcHRpb25zLnBpbmNoVGhyZXNob2xkOiEwfWZ1bmN0aW9uIHZhbGlkYXRlU3dpcGVUaW1lKCl7dmFyIHJlc3VsdDtyZXR1cm4gcmVzdWx0PW9wdGlvbnMubWF4VGltZVRocmVzaG9sZD8hKGR1cmF0aW9uPj1vcHRpb25zLm1heFRpbWVUaHJlc2hvbGQpOiEwfWZ1bmN0aW9uIHZhbGlkYXRlRGVmYXVsdEV2ZW50KGpxRXZlbnQsZGlyZWN0aW9uKXtpZihvcHRpb25zLnByZXZlbnREZWZhdWx0RXZlbnRzIT09ITEpaWYob3B0aW9ucy5hbGxvd1BhZ2VTY3JvbGw9PT1OT05FKWpxRXZlbnQucHJldmVudERlZmF1bHQoKTtlbHNle3ZhciBhdXRvPW9wdGlvbnMuYWxsb3dQYWdlU2Nyb2xsPT09QVVUTztzd2l0Y2goZGlyZWN0aW9uKXtjYXNlIExFRlQ6KG9wdGlvbnMuc3dpcGVMZWZ0JiZhdXRvfHwhYXV0byYmb3B0aW9ucy5hbGxvd1BhZ2VTY3JvbGwhPUhPUklaT05UQUwpJiZqcUV2ZW50LnByZXZlbnREZWZhdWx0KCk7YnJlYWs7Y2FzZSBSSUdIVDoob3B0aW9ucy5zd2lwZVJpZ2h0JiZhdXRvfHwhYXV0byYmb3B0aW9ucy5hbGxvd1BhZ2VTY3JvbGwhPUhPUklaT05UQUwpJiZqcUV2ZW50LnByZXZlbnREZWZhdWx0KCk7YnJlYWs7Y2FzZSBVUDoob3B0aW9ucy5zd2lwZVVwJiZhdXRvfHwhYXV0byYmb3B0aW9ucy5hbGxvd1BhZ2VTY3JvbGwhPVZFUlRJQ0FMKSYmanFFdmVudC5wcmV2ZW50RGVmYXVsdCgpO2JyZWFrO2Nhc2UgRE9XTjoob3B0aW9ucy5zd2lwZURvd24mJmF1dG98fCFhdXRvJiZvcHRpb25zLmFsbG93UGFnZVNjcm9sbCE9VkVSVElDQUwpJiZqcUV2ZW50LnByZXZlbnREZWZhdWx0KCk7YnJlYWs7Y2FzZSBOT05FOn19fWZ1bmN0aW9uIHZhbGlkYXRlUGluY2goKXt2YXIgaGFzQ29ycmVjdEZpbmdlckNvdW50PXZhbGlkYXRlRmluZ2VycygpLGhhc0VuZFBvaW50PXZhbGlkYXRlRW5kUG9pbnQoKSxoYXNDb3JyZWN0RGlzdGFuY2U9dmFsaWRhdGVQaW5jaERpc3RhbmNlKCk7cmV0dXJuIGhhc0NvcnJlY3RGaW5nZXJDb3VudCYmaGFzRW5kUG9pbnQmJmhhc0NvcnJlY3REaXN0YW5jZX1mdW5jdGlvbiBoYXNQaW5jaGVzKCl7cmV0dXJuISEob3B0aW9ucy5waW5jaFN0YXR1c3x8b3B0aW9ucy5waW5jaElufHxvcHRpb25zLnBpbmNoT3V0KX1mdW5jdGlvbiBkaWRQaW5jaCgpe3JldHVybiEoIXZhbGlkYXRlUGluY2goKXx8IWhhc1BpbmNoZXMoKSl9ZnVuY3Rpb24gdmFsaWRhdGVTd2lwZSgpe3ZhciBoYXNWYWxpZFRpbWU9dmFsaWRhdGVTd2lwZVRpbWUoKSxoYXNWYWxpZERpc3RhbmNlPXZhbGlkYXRlU3dpcGVEaXN0YW5jZSgpLGhhc0NvcnJlY3RGaW5nZXJDb3VudD12YWxpZGF0ZUZpbmdlcnMoKSxoYXNFbmRQb2ludD12YWxpZGF0ZUVuZFBvaW50KCksZGlkQ2FuY2VsPWRpZFN3aXBlQmFja1RvQ2FuY2VsKCksdmFsaWQ9IWRpZENhbmNlbCYmaGFzRW5kUG9pbnQmJmhhc0NvcnJlY3RGaW5nZXJDb3VudCYmaGFzVmFsaWREaXN0YW5jZSYmaGFzVmFsaWRUaW1lO3JldHVybiB2YWxpZH1mdW5jdGlvbiBoYXNTd2lwZXMoKXtyZXR1cm4hIShvcHRpb25zLnN3aXBlfHxvcHRpb25zLnN3aXBlU3RhdHVzfHxvcHRpb25zLnN3aXBlTGVmdHx8b3B0aW9ucy5zd2lwZVJpZ2h0fHxvcHRpb25zLnN3aXBlVXB8fG9wdGlvbnMuc3dpcGVEb3duKX1mdW5jdGlvbiBkaWRTd2lwZSgpe3JldHVybiEoIXZhbGlkYXRlU3dpcGUoKXx8IWhhc1N3aXBlcygpKX1mdW5jdGlvbiB2YWxpZGF0ZUZpbmdlcnMoKXtyZXR1cm4gZmluZ2VyQ291bnQ9PT1vcHRpb25zLmZpbmdlcnN8fG9wdGlvbnMuZmluZ2Vycz09PUFMTF9GSU5HRVJTfHwhU1VQUE9SVFNfVE9VQ0h9ZnVuY3Rpb24gdmFsaWRhdGVFbmRQb2ludCgpe3JldHVybiAwIT09ZmluZ2VyRGF0YVswXS5lbmQueH1mdW5jdGlvbiBoYXNUYXAoKXtyZXR1cm4hIW9wdGlvbnMudGFwfWZ1bmN0aW9uIGhhc0RvdWJsZVRhcCgpe3JldHVybiEhb3B0aW9ucy5kb3VibGVUYXB9ZnVuY3Rpb24gaGFzTG9uZ1RhcCgpe3JldHVybiEhb3B0aW9ucy5sb25nVGFwfWZ1bmN0aW9uIHZhbGlkYXRlRG91YmxlVGFwKCl7aWYobnVsbD09ZG91YmxlVGFwU3RhcnRUaW1lKXJldHVybiExO3ZhciBub3c9Z2V0VGltZVN0YW1wKCk7cmV0dXJuIGhhc0RvdWJsZVRhcCgpJiZub3ctZG91YmxlVGFwU3RhcnRUaW1lPD1vcHRpb25zLmRvdWJsZVRhcFRocmVzaG9sZH1mdW5jdGlvbiBpbkRvdWJsZVRhcCgpe3JldHVybiB2YWxpZGF0ZURvdWJsZVRhcCgpfWZ1bmN0aW9uIHZhbGlkYXRlVGFwKCl7cmV0dXJuKDE9PT1maW5nZXJDb3VudHx8IVNVUFBPUlRTX1RPVUNIKSYmKGlzTmFOKGRpc3RhbmNlKXx8ZGlzdGFuY2U8b3B0aW9ucy50aHJlc2hvbGQpfWZ1bmN0aW9uIHZhbGlkYXRlTG9uZ1RhcCgpe3JldHVybiBkdXJhdGlvbj5vcHRpb25zLmxvbmdUYXBUaHJlc2hvbGQmJkRPVUJMRV9UQVBfVEhSRVNIT0xEPmRpc3RhbmNlfWZ1bmN0aW9uIGRpZFRhcCgpe3JldHVybiEoIXZhbGlkYXRlVGFwKCl8fCFoYXNUYXAoKSl9ZnVuY3Rpb24gZGlkRG91YmxlVGFwKCl7cmV0dXJuISghdmFsaWRhdGVEb3VibGVUYXAoKXx8IWhhc0RvdWJsZVRhcCgpKX1mdW5jdGlvbiBkaWRMb25nVGFwKCl7cmV0dXJuISghdmFsaWRhdGVMb25nVGFwKCl8fCFoYXNMb25nVGFwKCkpfWZ1bmN0aW9uIHN0YXJ0TXVsdGlGaW5nZXJSZWxlYXNlKGV2ZW50KXtwcmV2aW91c1RvdWNoRW5kVGltZT1nZXRUaW1lU3RhbXAoKSxmaW5nZXJDb3VudEF0UmVsZWFzZT1ldmVudC50b3VjaGVzLmxlbmd0aCsxfWZ1bmN0aW9uIGNhbmNlbE11bHRpRmluZ2VyUmVsZWFzZSgpe3ByZXZpb3VzVG91Y2hFbmRUaW1lPTAsZmluZ2VyQ291bnRBdFJlbGVhc2U9MH1mdW5jdGlvbiBpbk11bHRpRmluZ2VyUmVsZWFzZSgpe3ZhciB3aXRoaW5UaHJlc2hvbGQ9ITE7aWYocHJldmlvdXNUb3VjaEVuZFRpbWUpe3ZhciBkaWZmPWdldFRpbWVTdGFtcCgpLXByZXZpb3VzVG91Y2hFbmRUaW1lO2RpZmY8PW9wdGlvbnMuZmluZ2VyUmVsZWFzZVRocmVzaG9sZCYmKHdpdGhpblRocmVzaG9sZD0hMCl9cmV0dXJuIHdpdGhpblRocmVzaG9sZH1mdW5jdGlvbiBnZXRUb3VjaEluUHJvZ3Jlc3MoKXtyZXR1cm4hKCRlbGVtZW50LmRhdGEoUExVR0lOX05TK1wiX2ludG91Y2hcIikhPT0hMCl9ZnVuY3Rpb24gc2V0VG91Y2hJblByb2dyZXNzKHZhbCl7JGVsZW1lbnQmJih2YWw9PT0hMD8oJGVsZW1lbnQub24oTU9WRV9FVix0b3VjaE1vdmUpLCRlbGVtZW50Lm9uKEVORF9FVix0b3VjaEVuZCksTEVBVkVfRVYmJiRlbGVtZW50Lm9uKExFQVZFX0VWLHRvdWNoTGVhdmUpKTooJGVsZW1lbnQub2ZmKE1PVkVfRVYsdG91Y2hNb3ZlLCExKSwkZWxlbWVudC5vZmYoRU5EX0VWLHRvdWNoRW5kLCExKSxMRUFWRV9FViYmJGVsZW1lbnQub2ZmKExFQVZFX0VWLHRvdWNoTGVhdmUsITEpKSwkZWxlbWVudC5kYXRhKFBMVUdJTl9OUytcIl9pbnRvdWNoXCIsdmFsPT09ITApKX1mdW5jdGlvbiBjcmVhdGVGaW5nZXJEYXRhKGlkLGV2dCl7dmFyIGY9e3N0YXJ0Ont4OjAseTowfSxsYXN0Ont4OjAseTowfSxlbmQ6e3g6MCx5OjB9fTtyZXR1cm4gZi5zdGFydC54PWYubGFzdC54PWYuZW5kLng9ZXZ0LnBhZ2VYfHxldnQuY2xpZW50WCxmLnN0YXJ0Lnk9Zi5sYXN0Lnk9Zi5lbmQueT1ldnQucGFnZVl8fGV2dC5jbGllbnRZLGZpbmdlckRhdGFbaWRdPWYsZn1mdW5jdGlvbiB1cGRhdGVGaW5nZXJEYXRhKGV2dCl7dmFyIGlkPXZvaWQgMCE9PWV2dC5pZGVudGlmaWVyP2V2dC5pZGVudGlmaWVyOjAsZj1nZXRGaW5nZXJEYXRhKGlkKTtyZXR1cm4gbnVsbD09PWYmJihmPWNyZWF0ZUZpbmdlckRhdGEoaWQsZXZ0KSksZi5sYXN0Lng9Zi5lbmQueCxmLmxhc3QueT1mLmVuZC55LGYuZW5kLng9ZXZ0LnBhZ2VYfHxldnQuY2xpZW50WCxmLmVuZC55PWV2dC5wYWdlWXx8ZXZ0LmNsaWVudFksZn1mdW5jdGlvbiBnZXRGaW5nZXJEYXRhKGlkKXtyZXR1cm4gZmluZ2VyRGF0YVtpZF18fG51bGx9ZnVuY3Rpb24gc2V0TWF4RGlzdGFuY2UoZGlyZWN0aW9uLGRpc3RhbmNlKXtkaXJlY3Rpb24hPU5PTkUmJihkaXN0YW5jZT1NYXRoLm1heChkaXN0YW5jZSxnZXRNYXhEaXN0YW5jZShkaXJlY3Rpb24pKSxtYXhpbXVtc01hcFtkaXJlY3Rpb25dLmRpc3RhbmNlPWRpc3RhbmNlKX1mdW5jdGlvbiBnZXRNYXhEaXN0YW5jZShkaXJlY3Rpb24pe3JldHVybiBtYXhpbXVtc01hcFtkaXJlY3Rpb25dP21heGltdW1zTWFwW2RpcmVjdGlvbl0uZGlzdGFuY2U6dm9pZCAwfWZ1bmN0aW9uIGNyZWF0ZU1heGltdW1zRGF0YSgpe3ZhciBtYXhEYXRhPXt9O3JldHVybiBtYXhEYXRhW0xFRlRdPWNyZWF0ZU1heGltdW1WTyhMRUZUKSxtYXhEYXRhW1JJR0hUXT1jcmVhdGVNYXhpbXVtVk8oUklHSFQpLG1heERhdGFbVVBdPWNyZWF0ZU1heGltdW1WTyhVUCksbWF4RGF0YVtET1dOXT1jcmVhdGVNYXhpbXVtVk8oRE9XTiksbWF4RGF0YX1mdW5jdGlvbiBjcmVhdGVNYXhpbXVtVk8oZGlyKXtyZXR1cm57ZGlyZWN0aW9uOmRpcixkaXN0YW5jZTowfX1mdW5jdGlvbiBjYWxjdWxhdGVEdXJhdGlvbigpe3JldHVybiBlbmRUaW1lLXN0YXJ0VGltZX1mdW5jdGlvbiBjYWxjdWxhdGVUb3VjaGVzRGlzdGFuY2Uoc3RhcnRQb2ludCxlbmRQb2ludCl7dmFyIGRpZmZYPU1hdGguYWJzKHN0YXJ0UG9pbnQueC1lbmRQb2ludC54KSxkaWZmWT1NYXRoLmFicyhzdGFydFBvaW50LnktZW5kUG9pbnQueSk7cmV0dXJuIE1hdGgucm91bmQoTWF0aC5zcXJ0KGRpZmZYKmRpZmZYK2RpZmZZKmRpZmZZKSl9ZnVuY3Rpb24gY2FsY3VsYXRlUGluY2hab29tKHN0YXJ0RGlzdGFuY2UsZW5kRGlzdGFuY2Upe3ZhciBwZXJjZW50PWVuZERpc3RhbmNlL3N0YXJ0RGlzdGFuY2UqMTtyZXR1cm4gcGVyY2VudC50b0ZpeGVkKDIpfWZ1bmN0aW9uIGNhbGN1bGF0ZVBpbmNoRGlyZWN0aW9uKCl7cmV0dXJuIDE+cGluY2hab29tP09VVDpJTn1mdW5jdGlvbiBjYWxjdWxhdGVEaXN0YW5jZShzdGFydFBvaW50LGVuZFBvaW50KXtyZXR1cm4gTWF0aC5yb3VuZChNYXRoLnNxcnQoTWF0aC5wb3coZW5kUG9pbnQueC1zdGFydFBvaW50LngsMikrTWF0aC5wb3coZW5kUG9pbnQueS1zdGFydFBvaW50LnksMikpKX1mdW5jdGlvbiBjYWxjdWxhdGVBbmdsZShzdGFydFBvaW50LGVuZFBvaW50KXt2YXIgeD1zdGFydFBvaW50LngtZW5kUG9pbnQueCx5PWVuZFBvaW50Lnktc3RhcnRQb2ludC55LHI9TWF0aC5hdGFuMih5LHgpLGFuZ2xlPU1hdGgucm91bmQoMTgwKnIvTWF0aC5QSSk7cmV0dXJuIDA+YW5nbGUmJihhbmdsZT0zNjAtTWF0aC5hYnMoYW5nbGUpKSxhbmdsZX1mdW5jdGlvbiBjYWxjdWxhdGVEaXJlY3Rpb24oc3RhcnRQb2ludCxlbmRQb2ludCl7aWYoY29tcGFyZVBvaW50cyhzdGFydFBvaW50LGVuZFBvaW50KSlyZXR1cm4gTk9ORTt2YXIgYW5nbGU9Y2FsY3VsYXRlQW5nbGUoc3RhcnRQb2ludCxlbmRQb2ludCk7cmV0dXJuIDQ1Pj1hbmdsZSYmYW5nbGU+PTA/TEVGVDozNjA+PWFuZ2xlJiZhbmdsZT49MzE1P0xFRlQ6YW5nbGU+PTEzNSYmMjI1Pj1hbmdsZT9SSUdIVDphbmdsZT40NSYmMTM1PmFuZ2xlP0RPV046VVB9ZnVuY3Rpb24gZ2V0VGltZVN0YW1wKCl7dmFyIG5vdz1uZXcgRGF0ZTtyZXR1cm4gbm93LmdldFRpbWUoKX1mdW5jdGlvbiBnZXRib3VuZHMoZWwpe2VsPSQoZWwpO3ZhciBvZmZzZXQ9ZWwub2Zmc2V0KCksYm91bmRzPXtsZWZ0Om9mZnNldC5sZWZ0LHJpZ2h0Om9mZnNldC5sZWZ0K2VsLm91dGVyV2lkdGgoKSx0b3A6b2Zmc2V0LnRvcCxib3R0b206b2Zmc2V0LnRvcCtlbC5vdXRlckhlaWdodCgpfTtyZXR1cm4gYm91bmRzfWZ1bmN0aW9uIGlzSW5Cb3VuZHMocG9pbnQsYm91bmRzKXtyZXR1cm4gcG9pbnQueD5ib3VuZHMubGVmdCYmcG9pbnQueDxib3VuZHMucmlnaHQmJnBvaW50Lnk+Ym91bmRzLnRvcCYmcG9pbnQueTxib3VuZHMuYm90dG9tfWZ1bmN0aW9uIGNvbXBhcmVQb2ludHMocG9pbnRBLHBvaW50Qil7cmV0dXJuIHBvaW50QS54PT1wb2ludEIueCYmcG9pbnRBLnk9PXBvaW50Qi55fXZhciBvcHRpb25zPSQuZXh0ZW5kKHt9LG9wdGlvbnMpLHVzZVRvdWNoRXZlbnRzPVNVUFBPUlRTX1RPVUNIfHxTVVBQT1JUU19QT0lOVEVSfHwhb3B0aW9ucy5mYWxsYmFja1RvTW91c2VFdmVudHMsU1RBUlRfRVY9dXNlVG91Y2hFdmVudHM/U1VQUE9SVFNfUE9JTlRFUj9TVVBQT1JUU19QT0lOVEVSX0lFMTA/XCJNU1BvaW50ZXJEb3duXCI6XCJwb2ludGVyZG93blwiOlwidG91Y2hzdGFydFwiOlwibW91c2Vkb3duXCIsTU9WRV9FVj11c2VUb3VjaEV2ZW50cz9TVVBQT1JUU19QT0lOVEVSP1NVUFBPUlRTX1BPSU5URVJfSUUxMD9cIk1TUG9pbnRlck1vdmVcIjpcInBvaW50ZXJtb3ZlXCI6XCJ0b3VjaG1vdmVcIjpcIm1vdXNlbW92ZVwiLEVORF9FVj11c2VUb3VjaEV2ZW50cz9TVVBQT1JUU19QT0lOVEVSP1NVUFBPUlRTX1BPSU5URVJfSUUxMD9cIk1TUG9pbnRlclVwXCI6XCJwb2ludGVydXBcIjpcInRvdWNoZW5kXCI6XCJtb3VzZXVwXCIsTEVBVkVfRVY9dXNlVG91Y2hFdmVudHM/U1VQUE9SVFNfUE9JTlRFUj9cIm1vdXNlbGVhdmVcIjpudWxsOlwibW91c2VsZWF2ZVwiLENBTkNFTF9FVj1TVVBQT1JUU19QT0lOVEVSP1NVUFBPUlRTX1BPSU5URVJfSUUxMD9cIk1TUG9pbnRlckNhbmNlbFwiOlwicG9pbnRlcmNhbmNlbFwiOlwidG91Y2hjYW5jZWxcIixkaXN0YW5jZT0wLGRpcmVjdGlvbj1udWxsLGN1cnJlbnREaXJlY3Rpb249bnVsbCxkdXJhdGlvbj0wLHN0YXJ0VG91Y2hlc0Rpc3RhbmNlPTAsZW5kVG91Y2hlc0Rpc3RhbmNlPTAscGluY2hab29tPTEscGluY2hEaXN0YW5jZT0wLHBpbmNoRGlyZWN0aW9uPTAsbWF4aW11bXNNYXA9bnVsbCwkZWxlbWVudD0kKGVsZW1lbnQpLHBoYXNlPVwic3RhcnRcIixmaW5nZXJDb3VudD0wLGZpbmdlckRhdGE9e30sc3RhcnRUaW1lPTAsZW5kVGltZT0wLHByZXZpb3VzVG91Y2hFbmRUaW1lPTAsZmluZ2VyQ291bnRBdFJlbGVhc2U9MCxkb3VibGVUYXBTdGFydFRpbWU9MCxzaW5nbGVUYXBUaW1lb3V0PW51bGwsaG9sZFRpbWVvdXQ9bnVsbDt0cnl7JGVsZW1lbnQub24oU1RBUlRfRVYsdG91Y2hTdGFydCksJGVsZW1lbnQub24oQ0FOQ0VMX0VWLHRvdWNoQ2FuY2VsKX1jYXRjaChlKXskLmVycm9yKFwiZXZlbnRzIG5vdCBzdXBwb3J0ZWQgXCIrU1RBUlRfRVYrXCIsXCIrQ0FOQ0VMX0VWK1wiIG9uIGpRdWVyeS5zd2lwZVwiKX10aGlzLmVuYWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGUoKSwkZWxlbWVudC5vbihTVEFSVF9FVix0b3VjaFN0YXJ0KSwkZWxlbWVudC5vbihDQU5DRUxfRVYsdG91Y2hDYW5jZWwpLCRlbGVtZW50fSx0aGlzLmRpc2FibGU9ZnVuY3Rpb24oKXtyZXR1cm4gcmVtb3ZlTGlzdGVuZXJzKCksJGVsZW1lbnR9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe3JlbW92ZUxpc3RlbmVycygpLCRlbGVtZW50LmRhdGEoUExVR0lOX05TLG51bGwpLCRlbGVtZW50PW51bGx9LHRoaXMub3B0aW9uPWZ1bmN0aW9uKHByb3BlcnR5LHZhbHVlKXtpZihcIm9iamVjdFwiPT10eXBlb2YgcHJvcGVydHkpb3B0aW9ucz0kLmV4dGVuZChvcHRpb25zLHByb3BlcnR5KTtlbHNlIGlmKHZvaWQgMCE9PW9wdGlvbnNbcHJvcGVydHldKXtpZih2b2lkIDA9PT12YWx1ZSlyZXR1cm4gb3B0aW9uc1twcm9wZXJ0eV07b3B0aW9uc1twcm9wZXJ0eV09dmFsdWV9ZWxzZXtpZighcHJvcGVydHkpcmV0dXJuIG9wdGlvbnM7JC5lcnJvcihcIk9wdGlvbiBcIitwcm9wZXJ0eStcIiBkb2VzIG5vdCBleGlzdCBvbiBqUXVlcnkuc3dpcGUub3B0aW9uc1wiKX1yZXR1cm4gbnVsbH19dmFyIFZFUlNJT049XCIxLjYuMThcIixMRUZUPVwibGVmdFwiLFJJR0hUPVwicmlnaHRcIixVUD1cInVwXCIsRE9XTj1cImRvd25cIixJTj1cImluXCIsT1VUPVwib3V0XCIsTk9ORT1cIm5vbmVcIixBVVRPPVwiYXV0b1wiLFNXSVBFPVwic3dpcGVcIixQSU5DSD1cInBpbmNoXCIsVEFQPVwidGFwXCIsRE9VQkxFX1RBUD1cImRvdWJsZXRhcFwiLExPTkdfVEFQPVwibG9uZ3RhcFwiLEhPUklaT05UQUw9XCJob3Jpem9udGFsXCIsVkVSVElDQUw9XCJ2ZXJ0aWNhbFwiLEFMTF9GSU5HRVJTPVwiYWxsXCIsRE9VQkxFX1RBUF9USFJFU0hPTEQ9MTAsUEhBU0VfU1RBUlQ9XCJzdGFydFwiLFBIQVNFX01PVkU9XCJtb3ZlXCIsUEhBU0VfRU5EPVwiZW5kXCIsUEhBU0VfQ0FOQ0VMPVwiY2FuY2VsXCIsU1VQUE9SVFNfVE9VQ0g9XCJvbnRvdWNoc3RhcnRcImluIHdpbmRvdyxTVVBQT1JUU19QT0lOVEVSX0lFMTA9d2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkJiYhd2luZG93LlBvaW50ZXJFdmVudCYmIVNVUFBPUlRTX1RPVUNILFNVUFBPUlRTX1BPSU5URVI9KHdpbmRvdy5Qb2ludGVyRXZlbnR8fHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZCkmJiFTVVBQT1JUU19UT1VDSCxQTFVHSU5fTlM9XCJUb3VjaFN3aXBlXCIsZGVmYXVsdHM9e2ZpbmdlcnM6MSx0aHJlc2hvbGQ6NzUsY2FuY2VsVGhyZXNob2xkOm51bGwscGluY2hUaHJlc2hvbGQ6MjAsbWF4VGltZVRocmVzaG9sZDpudWxsLGZpbmdlclJlbGVhc2VUaHJlc2hvbGQ6MjUwLGxvbmdUYXBUaHJlc2hvbGQ6NTAwLGRvdWJsZVRhcFRocmVzaG9sZDoyMDAsc3dpcGU6bnVsbCxzd2lwZUxlZnQ6bnVsbCxzd2lwZVJpZ2h0Om51bGwsc3dpcGVVcDpudWxsLHN3aXBlRG93bjpudWxsLHN3aXBlU3RhdHVzOm51bGwscGluY2hJbjpudWxsLHBpbmNoT3V0Om51bGwscGluY2hTdGF0dXM6bnVsbCxjbGljazpudWxsLHRhcDpudWxsLGRvdWJsZVRhcDpudWxsLGxvbmdUYXA6bnVsbCxob2xkOm51bGwsdHJpZ2dlck9uVG91Y2hFbmQ6ITAsdHJpZ2dlck9uVG91Y2hMZWF2ZTohMSxhbGxvd1BhZ2VTY3JvbGw6XCJhdXRvXCIsZmFsbGJhY2tUb01vdXNlRXZlbnRzOiEwLGV4Y2x1ZGVkRWxlbWVudHM6XCIubm9Td2lwZVwiLHByZXZlbnREZWZhdWx0RXZlbnRzOiEwfTskLmZuLnN3aXBlPWZ1bmN0aW9uKG1ldGhvZCl7dmFyICR0aGlzPSQodGhpcykscGx1Z2luPSR0aGlzLmRhdGEoUExVR0lOX05TKTtpZihwbHVnaW4mJlwic3RyaW5nXCI9PXR5cGVvZiBtZXRob2Qpe2lmKHBsdWdpblttZXRob2RdKXJldHVybiBwbHVnaW5bbWV0aG9kXS5hcHBseShwbHVnaW4sQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKTskLmVycm9yKFwiTWV0aG9kIFwiK21ldGhvZCtcIiBkb2VzIG5vdCBleGlzdCBvbiBqUXVlcnkuc3dpcGVcIil9ZWxzZSBpZihwbHVnaW4mJlwib2JqZWN0XCI9PXR5cGVvZiBtZXRob2QpcGx1Z2luLm9wdGlvbi5hcHBseShwbHVnaW4sYXJndW1lbnRzKTtlbHNlIGlmKCEocGx1Z2lufHxcIm9iamVjdFwiIT10eXBlb2YgbWV0aG9kJiZtZXRob2QpKXJldHVybiBpbml0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gJHRoaXN9LCQuZm4uc3dpcGUudmVyc2lvbj1WRVJTSU9OLCQuZm4uc3dpcGUuZGVmYXVsdHM9ZGVmYXVsdHMsJC5mbi5zd2lwZS5waGFzZXM9e1BIQVNFX1NUQVJUOlBIQVNFX1NUQVJULFBIQVNFX01PVkU6UEhBU0VfTU9WRSxQSEFTRV9FTkQ6UEhBU0VfRU5ELFBIQVNFX0NBTkNFTDpQSEFTRV9DQU5DRUx9LCQuZm4uc3dpcGUuZGlyZWN0aW9ucz17TEVGVDpMRUZULFJJR0hUOlJJR0hULFVQOlVQLERPV046RE9XTixJTjpJTixPVVQ6T1VUfSwkLmZuLnN3aXBlLnBhZ2VTY3JvbGw9e05PTkU6Tk9ORSxIT1JJWk9OVEFMOkhPUklaT05UQUwsVkVSVElDQUw6VkVSVElDQUwsQVVUTzpBVVRPfSwkLmZuLnN3aXBlLmZpbmdlcnM9e09ORToxLFRXTzoyLFRIUkVFOjMsRk9VUjo0LEZJVkU6NSxBTEw6QUxMX0ZJTkdFUlN9fSk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5pbXBvcnQgcHJlc3Rhc2hvcCBmcm9tIFwicHJlc3Rhc2hvcFwiO1xuaW1wb3J0ICQgZnJvbSBcImpxdWVyeVwiO1xuXG5jb25zdCBwYXNzd29yZFBvbGljeSA9IHtcbiAgdGVtcGxhdGU6IFwiI3Bhc3N3b3JkLWZlZWRiYWNrXCIsXG4gIGhpbnQ6IFwiLmpzLWhpbnQtcGFzc3dvcmRcIixcbiAgY29udGFpbmVyOiBcIi5wYXNzd29yZC1zdHJlbmd0aC1mZWVkYmFja1wiLFxuICBzdHJlbmd0aFRleHQ6IFwiLnBhc3N3b3JkLXN0cmVuZ3RoLXRleHRcIixcbiAgcmVxdWlyZW1lbnRTY29yZTogXCIucGFzc3dvcmQtcmVxdWlyZW1lbnRzLXNjb3JlXCIsXG4gIHJlcXVpcmVtZW50TGVuZ3RoOiBcIi5wYXNzd29yZC1yZXF1aXJlbWVudHMtbGVuZ3RoXCIsXG4gIHJlcXVpcmVtZW50U2NvcmVJY29uOiBcIi5wYXNzd29yZC1yZXF1aXJlbWVudHMtc2NvcmUgaVwiLFxuICByZXF1aXJlbWVudExlbmd0aEljb246IFwiLnBhc3N3b3JkLXJlcXVpcmVtZW50cy1sZW5ndGggaVwiLFxuICBwcm9ncmVzc0JhcjogXCIucHJvZ3Jlc3MtYmFyXCIsXG4gIGlucHV0Q29sdW1uOiBcIi5qcy1pbnB1dC1jb2x1bW5cIixcbn07XG5cbnByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMgPSB7XG4gIHByb2R1Y3Q6IHtcbiAgICB0YWJzOiBcIi50YWJzIC5uYXYtbGlua1wiLFxuICAgIGFjdGl2ZU5hdkNsYXNzOiBcImpzLXByb2R1Y3QtbmF2LWFjdGl2ZVwiLFxuICAgIGFjdGl2ZVRhYkNsYXNzOiBcImpzLXByb2R1Y3QtdGFiLWFjdGl2ZVwiLFxuICAgIGFjdGl2ZVRhYnM6IFwiLnRhYnMgLm5hdi1saW5rLmFjdGl2ZSwgLmpzLXByb2R1Y3QtbmF2LWFjdGl2ZVwiLFxuICAgIGltYWdlc01vZGFsOiBcIi5qcy1wcm9kdWN0LWltYWdlcy1tb2RhbFwiLFxuICAgIHRodW1iOiBcIi5qcy10aHVtYlwiLFxuICAgIHRodW1iQ29udGFpbmVyOiBcIi50aHVtYi1jb250YWluZXIsIC5qcy10aHVtYi1jb250YWluZXJcIixcbiAgICBhcnJvd3M6IFwiLmpzLWFycm93c1wiLFxuICAgIHNlbGVjdGVkOiBcIi5zZWxlY3RlZCwgLmpzLXRodW1iLXNlbGVjdGVkXCIsXG4gICAgbW9kYWxQcm9kdWN0Q292ZXI6IFwiLmpzLW1vZGFsLXByb2R1Y3QtY292ZXJcIixcbiAgICBjb3ZlcjogXCIuanMtcXYtcHJvZHVjdC1jb3ZlclwiLFxuICAgIGN1c3RvbWl6YXRpb25Nb2RhbDogXCIuanMtY3VzdG9taXphdGlvbi1tb2RhbFwiLFxuICB9LFxuICBsaXN0aW5nOiB7XG4gICAgc2VhcmNoRmlsdGVyVG9nZ2xlcjogXCIjc2VhcmNoX2ZpbHRlcl90b2dnbGVyLCAuanMtc2VhcmNoLXRvZ2dsZXJcIixcbiAgICBzZWFyY2hGaWx0ZXJzV3JhcHBlcjogXCIjc2VhcmNoX2ZpbHRlcnNfd3JhcHBlclwiLFxuICAgIHNlYXJjaEZpbHRlckNvbnRyb2xzOiBcIiNzZWFyY2hfZmlsdGVyX2NvbnRyb2xzXCIsXG4gICAgc2VhcmNoRmlsdGVyczogXCIjc2VhcmNoX2ZpbHRlcnNcIixcbiAgICBhY3RpdmVTZWFyY2hGaWx0ZXJzOiBcIiNqcy1hY3RpdmUtc2VhcmNoLWZpbHRlcnNcIixcbiAgICBsaXN0VG9wOiBcIiNqcy1wcm9kdWN0LWxpc3QtdG9wXCIsXG4gICAgcHJvZHVjdDogXCIuanMtcHJvZHVjdFwiLFxuICAgIGxpc3Q6IFwiI2pzLXByb2R1Y3QtbGlzdFwiLFxuICAgIGxpc3RCb3R0b206IFwiI2pzLXByb2R1Y3QtbGlzdC1ib3R0b21cIixcbiAgICBsaXN0SGVhZGVyOiBcIiNqcy1wcm9kdWN0LWxpc3QtaGVhZGVyXCIsXG4gICAgc2VhcmNoRmlsdGVyc0NsZWFyQWxsOiBcIi5qcy1zZWFyY2gtZmlsdGVycy1jbGVhci1hbGxcIixcbiAgICBzZWFyY2hMaW5rOiBcIi5qcy1zZWFyY2gtbGlua1wiLFxuICB9LFxuICBvcmRlcjoge1xuICAgIHJldHVybkZvcm06IFwiI29yZGVyLXJldHVybi1mb3JtLCAuanMtb3JkZXItcmV0dXJuLWZvcm1cIixcbiAgfSxcbiAgYXJyb3dEb3duOiBcIi5hcnJvdy1kb3duLCAuanMtYXJyb3ctZG93blwiLFxuICBhcnJvd1VwOiBcIi5hcnJvdy11cCwgLmpzLWFycm93LXVwXCIsXG4gIGNsZWFyOiBcIi5jbGVhclwiLFxuICBmaWxlSW5wdXQ6IFwiLmpzLWZpbGUtaW5wdXRcIixcbiAgY29udGVudFdyYXBwZXI6IFwiI2NvbnRlbnQtd3JhcHBlciwgLmpzLWNvbnRlbnQtd3JhcHBlclwiLFxuICBmb290ZXI6IFwiI2Zvb3RlciwgLmpzLWZvb3RlclwiLFxuICBtb2RhbENvbnRlbnQ6IFwiLmpzLW1vZGFsLWNvbnRlbnRcIixcbiAgbW9kYWw6IFwiI21vZGFsLCAuanMtY2hlY2tvdXQtbW9kYWxcIixcbiAgdG91Y2hzcGluOiBcIi5qcy10b3VjaHNwaW5cIixcbiAgY2hlY2tvdXQ6IHtcbiAgICB0ZXJtc0xpbms6IFwiLmpzLXRlcm1zIGFcIixcbiAgICBnaWZ0Q2hlY2tib3g6IFwiLmpzLWdpZnQtY2hlY2tib3hcIixcbiAgICBpbWFnZXNMaW5rOiBcIi5jYXJkLWJsb2NrIC5jYXJ0LXN1bW1hcnktcHJvZHVjdHMgcCBhLCAuanMtc2hvdy1kZXRhaWxzXCIsXG4gICAgY2FycmllckV4dHJhQ29udGVudDogXCIuY2Fycmllci1leHRyYS1jb250ZW50LCAuanMtY2Fycmllci1leHRyYS1jb250ZW50XCIsXG4gICAgYnRuOiBcIi5jaGVja291dCBhXCIsXG4gIH0sXG4gIGNhcnQ6IHtcbiAgICBwcm9kdWN0TGluZVF0eTogXCIuanMtY2FydC1saW5lLXByb2R1Y3QtcXVhbnRpdHlcIixcbiAgICBxdWlja3ZpZXc6IFwiLnF1aWNrdmlld1wiLFxuICAgIHRvdWNoc3BpbjogXCIuYm9vdHN0cmFwLXRvdWNoc3BpblwiLFxuICAgIHByb21vQ29kZTogXCIjcHJvbW8tY29kZVwiLFxuICAgIGRpc3BsYXlQcm9tbzogXCIuZGlzcGxheS1wcm9tb1wiLFxuICAgIHByb21vQ29kZUJ1dHRvbjogXCIucHJvbW8tY29kZS1idXR0b25cIixcbiAgICBkaXNjb3VudENvZGU6IFwiLmpzLWRpc2NvdW50IC5jb2RlXCIsXG4gICAgZGlzY291bnROYW1lOiBcIltuYW1lPWRpc2NvdW50X25hbWVdXCIsXG4gICAgYWN0aW9uczpcbiAgICAgICdbZGF0YS1saW5rLWFjdGlvbj1cImRlbGV0ZS1mcm9tLWNhcnRcIl0sIFtkYXRhLWxpbmstYWN0aW9uPVwicmVtb3ZlLXZvdWNoZXJcIl0nLFxuICB9LFxuICBub3RpZmljYXRpb25zOiB7XG4gICAgZGFuZ2VyQWxlcnQ6IFwiI25vdGlmaWNhdGlvbnMgYXJ0aWNsZS5hbGVydC1kYW5nZXJcIixcbiAgICBjb250YWluZXI6IFwiI25vdGlmaWNhdGlvbnMubm90aWZpY2F0aW9ucy1jb250YWluZXJcIixcbiAgfSxcbiAgcGFzc3dvcmRQb2xpY3ksXG59O1xuXG4kKGRvY3VtZW50KS5yZWFkeSgoKSA9PiB7XG4gIHByZXN0YXNob3AuZW1pdChcInRoZW1lU2VsZWN0b3JzSW5pdFwiKTtcbn0pO1xuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5J1xuXG52YXIgc2ltcGxldGFic3BsdWdpbm5hbWUgPSAnc2ltcGxldGFicydcbmZ1bmN0aW9uIFNpbXBsZVRhYnNQbHVnaW4oZWxlbWVudCwgb3B0aW9ucykge1xuICB0aGlzLiRlbCA9ICQoZWxlbWVudClcbiAgdGhpcy4kdGFicyA9IFtdXG4gIHRoaXMuaW5pdCgpXG59XG5cbiQuZXh0ZW5kKFNpbXBsZVRhYnNQbHVnaW4ucHJvdG90eXBlLCB7XG4gIGluaXQoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgdGhpcy4kdGFicyA9IFtdXG4gICAgdGhpcy4kZWwuZmluZCgndWwgPiBsaSA+IGEnKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyICRhID0gJCh0aGlzKVxuICAgICAgdmFyIGlkID0gJGEuYXR0cignaHJlZicpXG4gICAgICBpZiAoIGlkLnN0YXJ0c1dpdGgoJyMnKSApIHtcbiAgICAgICAgaWQgPSBpZC5yZXBsYWNlKCcjJywgJycpXG4gICAgICAgIHZhciBleGlzdHMgPSBzZWxmLiR0YWJzLmZpbmQoZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgIHJldHVybiBlbGVtZW50ID09PSBpZFxuICAgICAgICB9KVxuICAgICAgICB2YXIgY29udGVudHNlbGVjdG9yID0gJyMnICsgaWQgKyAnLnRhYnMtY29udGVudCdcbiAgICAgICAgdmFyIGNvbnRlbnQgPSBzZWxmLiRlbC5maW5kKGNvbnRlbnRzZWxlY3RvcilcbiAgICAgICAgaWYgKCBleGlzdHMgKSB7XG4gICAgICAgICAgZXhpc3RzLnRhYiA9ICRhXG4gICAgICAgICAgZXhpc3RzLmNvbnRlbnQgPSBjb250ZW50XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VsZi4kdGFicy5wdXNoKHtcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIHRhYjogJGEsXG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICAgc2VsZi4kdGFicy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIGlmICghZWxlbWVudC50YWIuaGFzQ2xhc3MoJ2FjdGl2ZScpKSB7XG4gICAgICAgIHNlbGYuaGlkZShlbGVtZW50LmlkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZi5zaG93KGVsZW1lbnQuaWQpXG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnQudGFiLmNsaWNrKGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgc2VsZi5zaG93KGVsZW1lbnQuaWQpXG4gICAgICB9KVxuICAgIH0pXG4gIH0sXG4gIHNob3coaWQpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXNcbiAgICB0aGlzLiR0YWJzLmZvckVhY2goZnVuY3Rpb24oIGVsZW1lbnQgKSB7XG4gICAgICBzZWxmLmhpZGUoZWxlbWVudC5pZClcbiAgICAgIGlmICggZWxlbWVudC5pZCA9PT0gaWQgKSB7XG4gICAgICAgIGVsZW1lbnQudGFiLmFkZENsYXNzKCdhY3RpdmUnKS5hZGRDbGFzcygnZm9udC1ib2xkJylcbiAgICAgICAgZWxlbWVudC5jb250ZW50LnJlbW92ZUNsYXNzKCdoaWRkZW4nKVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG4gIGhpZGUoaWQpIHtcbiAgICB0aGlzLiR0YWJzLmZvckVhY2goZnVuY3Rpb24oIGVsZW1lbnQgKSB7XG4gICAgICBpZiAoIGVsZW1lbnQuaWQgPT09IGlkICkge1xuICAgICAgICBlbGVtZW50LnRhYi5yZW1vdmVDbGFzcygnYWN0aXZlJykucmVtb3ZlQ2xhc3MoJ2ZvbnQtYm9sZCcpXG4gICAgICAgIGVsZW1lbnQuY29udGVudC5hZGRDbGFzcygnaGlkZGVuJylcbiAgICAgIH1cbiAgICB9KVxuICB9LFxufSlcblxuJC5mbi5zaW1wbGV0YWJzID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgaWYgKCAhJC5kYXRhKHRoaXMsICdwbHVnaW5fJyArIHNpbXBsZXRhYnNwbHVnaW5uYW1lKSkge1xuICAgICAgJC5kYXRhKHRoaXMsICdwbHVnaW5fJyArIHNpbXBsZXRhYnNwbHVnaW5uYW1lLCBuZXcgU2ltcGxlVGFic1BsdWdpbih0aGlzLCBvcHRpb25zKSlcbiAgICB9XG4gIH0pXG59XG5cblxuIiwiKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoWydqcXVlcnknXSwgZnVuY3Rpb24oJCl7XG4gICAgICAgICAgICBmYWN0b3J5KCQpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2UgaWYodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSAocm9vdC5FYXN5Wm9vbSA9IGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JykpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LkVhc3lab29tID0gZmFjdG9yeShyb290LmpRdWVyeSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbiAoJCkge1xuXG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIHpvb21JbWdPdmVybGFwWDtcbiAgICB2YXIgem9vbUltZ092ZXJsYXBZO1xuICAgIHZhciByYXRpb1g7XG4gICAgdmFyIHJhdGlvWTtcbiAgICB2YXIgcG9pbnRlclBvc2l0aW9uWDtcbiAgICB2YXIgcG9pbnRlclBvc2l0aW9uWTtcblxuICAgIHZhciBkZWZhdWx0cyA9IHtcblxuICAgICAgICAvLyBUaGUgdGV4dCB0byBkaXNwbGF5IHdpdGhpbiB0aGUgbm90aWNlIGJveCB3aGlsZSBsb2FkaW5nIHRoZSB6b29tIGltYWdlLlxuICAgICAgICBsb2FkaW5nTm90aWNlOiAnTG9hZGluZyBpbWFnZScsXG5cbiAgICAgICAgLy8gVGhlIHRleHQgdG8gZGlzcGxheSB3aXRoaW4gdGhlIG5vdGljZSBib3ggaWYgYW4gZXJyb3Igb2NjdXJzIHdoZW4gbG9hZGluZyB0aGUgem9vbSBpbWFnZS5cbiAgICAgICAgZXJyb3JOb3RpY2U6ICdUaGUgaW1hZ2UgY291bGQgbm90IGJlIGxvYWRlZCcsXG5cbiAgICAgICAgLy8gVGhlIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgdG8gZGlzcGxheSB0aGUgZXJyb3Igbm90aWNlLlxuICAgICAgICBlcnJvckR1cmF0aW9uOiAyNTAwLFxuXG4gICAgICAgIC8vIEF0dHJpYnV0ZSB0byByZXRyaWV2ZSB0aGUgem9vbSBpbWFnZSBVUkwgZnJvbS5cbiAgICAgICAgbGlua0F0dHJpYnV0ZTogJ2hyZWYnLFxuXG4gICAgICAgIC8vIFByZXZlbnQgY2xpY2tzIG9uIHRoZSB6b29tIGltYWdlIGxpbmsuXG4gICAgICAgIHByZXZlbnRDbGlja3M6IHRydWUsXG5cbiAgICAgICAgLy8gQ2FsbGJhY2sgZnVuY3Rpb24gdG8gZXhlY3V0ZSBiZWZvcmUgdGhlIGZseW91dCBpcyBkaXNwbGF5ZWQuXG4gICAgICAgIGJlZm9yZVNob3c6ICQubm9vcCxcblxuICAgICAgICAvLyBDYWxsYmFjayBmdW5jdGlvbiB0byBleGVjdXRlIGJlZm9yZSB0aGUgZmx5b3V0IGlzIHJlbW92ZWQuXG4gICAgICAgIGJlZm9yZUhpZGU6ICQubm9vcCxcblxuICAgICAgICAvLyBDYWxsYmFjayBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGZseW91dCBpcyBkaXNwbGF5ZWQuXG4gICAgICAgIG9uU2hvdzogJC5ub29wLFxuXG4gICAgICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZmx5b3V0IGlzIHJlbW92ZWQuXG4gICAgICAgIG9uSGlkZTogJC5ub29wLFxuXG4gICAgICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgY3Vyc29yIGlzIG1vdmVkIHdoaWxlIG92ZXIgdGhlIGltYWdlLlxuICAgICAgICBvbk1vdmU6ICQubm9vcFxuXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEVhc3lab29tXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIChPcHRpb25hbClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBFYXN5Wm9vbSh0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy4kdGFyZ2V0ID0gJCh0YXJnZXQpO1xuICAgICAgICB0aGlzLm9wdHMgPSAkLmV4dGVuZCh7fSwgZGVmYXVsdHMsIG9wdGlvbnMsIHRoaXMuJHRhcmdldC5kYXRhKCkpO1xuXG4gICAgICAgIHRoaXMuaXNPcGVuID09PSB1bmRlZmluZWQgJiYgdGhpcy5faW5pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEVhc3lab29tLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRsaW5rICAgPSB0aGlzLiR0YXJnZXQuZmluZCgnYScpO1xuICAgICAgICB0aGlzLiRpbWFnZSAgPSB0aGlzLiR0YXJnZXQuZmluZCgnaW1nJyk7XG5cbiAgICAgICAgdGhpcy4kZmx5b3V0ID0gJCgnPGRpdiBjbGFzcz1cImVhc3l6b29tLWZseW91dFwiIC8+Jyk7XG4gICAgICAgIHRoaXMuJG5vdGljZSA9ICQoJzxkaXYgY2xhc3M9XCJlYXN5em9vbS1ub3RpY2VcIiAvPicpO1xuXG4gICAgICAgIHRoaXMuJHRhcmdldC5vbih7XG4gICAgICAgICAgICAnbW91c2Vtb3ZlLmVhc3l6b29tIHRvdWNobW92ZS5lYXN5em9vbSc6ICQucHJveHkodGhpcy5fb25Nb3ZlLCB0aGlzKSxcbiAgICAgICAgICAgICdtb3VzZWxlYXZlLmVhc3l6b29tIHRvdWNoZW5kLmVhc3l6b29tJzogJC5wcm94eSh0aGlzLl9vbkxlYXZlLCB0aGlzKSxcbiAgICAgICAgICAgICdtb3VzZWVudGVyLmVhc3l6b29tIHRvdWNoc3RhcnQuZWFzeXpvb20nOiAkLnByb3h5KHRoaXMuX29uRW50ZXIsIHRoaXMpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub3B0cy5wcmV2ZW50Q2xpY2tzICYmIHRoaXMuJHRhcmdldC5vbignY2xpY2suZWFzeXpvb20nLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBTaG93XG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fFRvdWNoRXZlbnR9IGVcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHRlc3RNb3VzZU92ZXIgKE9wdGlvbmFsKVxuICAgICAqL1xuICAgIEVhc3lab29tLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24oZSwgdGVzdE1vdXNlT3Zlcikge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0cy5iZWZvcmVTaG93LmNhbGwodGhpcykgPT09IGZhbHNlKSByZXR1cm47XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzUmVhZHkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2FkSW1hZ2UodGhpcy4kbGluay5hdHRyKHRoaXMub3B0cy5saW5rQXR0cmlidXRlKSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuaXNNb3VzZU92ZXIgfHwgIXRlc3RNb3VzZU92ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zaG93KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4kdGFyZ2V0LmFwcGVuZCh0aGlzLiRmbHlvdXQpO1xuXG4gICAgICAgIHZhciB0YXJnZXRXaWR0aCA9IHRoaXMuJHRhcmdldC5vdXRlcldpZHRoKCk7XG4gICAgICAgIHZhciB0YXJnZXRIZWlnaHQgPSB0aGlzLiR0YXJnZXQub3V0ZXJIZWlnaHQoKTtcblxuICAgICAgICB2YXIgZmx5b3V0SW5uZXJXaWR0aCA9IHRoaXMuJGZseW91dC53aWR0aCgpO1xuICAgICAgICB2YXIgZmx5b3V0SW5uZXJIZWlnaHQgPSB0aGlzLiRmbHlvdXQuaGVpZ2h0KCk7XG5cbiAgICAgICAgdmFyIHpvb21JbWdXaWR0aCA9IHRoaXMuJHpvb20ud2lkdGgoKTtcbiAgICAgICAgdmFyIHpvb21JbWdIZWlnaHQgPSB0aGlzLiR6b29tLmhlaWdodCgpO1xuXG4gICAgICAgIHpvb21JbWdPdmVybGFwWCA9IE1hdGguY2VpbCh6b29tSW1nV2lkdGggLSBmbHlvdXRJbm5lcldpZHRoKTtcbiAgICAgICAgem9vbUltZ092ZXJsYXBZID0gTWF0aC5jZWlsKHpvb21JbWdIZWlnaHQgLSBmbHlvdXRJbm5lckhlaWdodCk7XG5cblxuICAgICAgICAvLyBGb3Igd2hlbiB0aGUgem9vbSBpbWFnZSBpcyBzbWFsbGVyIHRoYW4gdGhlIGZseW91dCBlbGVtZW50LlxuICAgICAgICBpZiAoem9vbUltZ092ZXJsYXBYIDwgMCkgem9vbUltZ092ZXJsYXBYID0gMDtcbiAgICAgICAgaWYgKHpvb21JbWdPdmVybGFwWSA8IDApIHpvb21JbWdPdmVybGFwWSA9IDA7XG5cbiAgICAgICAgcmF0aW9YID0gem9vbUltZ092ZXJsYXBYIC8gdGFyZ2V0V2lkdGg7XG4gICAgICAgIHJhdGlvWSA9IHpvb21JbWdPdmVybGFwWSAvIHRhcmdldEhlaWdodDtcblxuICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5vcHRzLm9uU2hvdy5jYWxsKHRoaXMpO1xuXG4gICAgICAgIGUgJiYgdGhpcy5fbW92ZShlKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogT24gZW50ZXJcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICAgKi9cbiAgICBFYXN5Wm9vbS5wcm90b3R5cGUuX29uRW50ZXIgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciB0b3VjaGVzID0gZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXM7XG5cbiAgICAgICAgdGhpcy5pc01vdXNlT3ZlciA9IHRydWU7XG5cbiAgICAgICAgaWYgKCF0b3VjaGVzIHx8IHRvdWNoZXMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuc2hvdyhlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBPbiBtb3ZlXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBlXG4gICAgICovXG4gICAgRWFzeVpvb20ucHJvdG90eXBlLl9vbk1vdmUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcblxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX21vdmUoZSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE9uIGxlYXZlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBFYXN5Wm9vbS5wcm90b3R5cGUuX29uTGVhdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5pc01vdXNlT3ZlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzT3BlbiAmJiB0aGlzLmhpZGUoKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogT24gbG9hZFxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgICAqL1xuICAgIEVhc3lab29tLnByb3RvdHlwZS5fb25Mb2FkID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAvLyBJRSBtYXkgZmlyZSBhIGxvYWQgZXZlbnQgZXZlbiBvbiBlcnJvciBzbyB0ZXN0IHRoZSBpbWFnZSBkaW1lbnNpb25zXG4gICAgICAgIGlmICghZS5jdXJyZW50VGFyZ2V0LndpZHRoKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5pc1JlYWR5ID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLiRub3RpY2UuZGV0YWNoKCk7XG4gICAgICAgIHRoaXMuJGZseW91dC5odG1sKHRoaXMuJHpvb20pO1xuICAgICAgICB0aGlzLiR0YXJnZXQucmVtb3ZlQ2xhc3MoJ2lzLWxvYWRpbmcnKS5hZGRDbGFzcygnaXMtcmVhZHknKTtcblxuICAgICAgICBlLmRhdGEuY2FsbCAmJiBlLmRhdGEoKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogT24gZXJyb3JcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEVhc3lab29tLnByb3RvdHlwZS5fb25FcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy4kbm90aWNlLnRleHQodGhpcy5vcHRzLmVycm9yTm90aWNlKTtcbiAgICAgICAgdGhpcy4kdGFyZ2V0LnJlbW92ZUNsYXNzKCdpcy1sb2FkaW5nJykuYWRkQ2xhc3MoJ2lzLWVycm9yJyk7XG5cbiAgICAgICAgdGhpcy5kZXRhY2hOb3RpY2UgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgc2VsZi4kbm90aWNlLmRldGFjaCgpO1xuICAgICAgICAgICAgc2VsZi5kZXRhY2hOb3RpY2UgPSBudWxsO1xuICAgICAgICB9LCB0aGlzLm9wdHMuZXJyb3JEdXJhdGlvbik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIExvYWQgaW1hZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBocmVmXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICAgKi9cbiAgICBFYXN5Wm9vbS5wcm90b3R5cGUuX2xvYWRJbWFnZSA9IGZ1bmN0aW9uKGhyZWYsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciB6b29tID0gbmV3IEltYWdlKCk7XG5cbiAgICAgICAgdGhpcy4kdGFyZ2V0XG4gICAgICAgICAgICAuYWRkQ2xhc3MoJ2lzLWxvYWRpbmcnKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLiRub3RpY2UudGV4dCh0aGlzLm9wdHMubG9hZGluZ05vdGljZSkpO1xuXG4gICAgICAgIHRoaXMuJHpvb20gPSAkKHpvb20pXG4gICAgICAgICAgICAub24oJ2Vycm9yJywgJC5wcm94eSh0aGlzLl9vbkVycm9yLCB0aGlzKSlcbiAgICAgICAgICAgIC5vbignbG9hZCcsIGNhbGxiYWNrLCAkLnByb3h5KHRoaXMuX29uTG9hZCwgdGhpcykpO1xuXG4gICAgICAgIHpvb20uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICB6b29tLnNyYyA9IGhyZWY7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE1vdmVcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICAgKi9cbiAgICBFYXN5Wm9vbS5wcm90b3R5cGUuX21vdmUgPSBmdW5jdGlvbihlKSB7XG5cbiAgICAgICAgaWYgKGUudHlwZS5pbmRleE9mKCd0b3VjaCcpID09PSAwKSB7XG4gICAgICAgICAgICB2YXIgdG91Y2hsaXN0ID0gZS50b3VjaGVzIHx8IGUub3JpZ2luYWxFdmVudC50b3VjaGVzO1xuICAgICAgICAgICAgcG9pbnRlclBvc2l0aW9uWCA9IHRvdWNobGlzdFswXS5wYWdlWDtcbiAgICAgICAgICAgIHBvaW50ZXJQb3NpdGlvblkgPSB0b3VjaGxpc3RbMF0ucGFnZVk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb2ludGVyUG9zaXRpb25YID0gZS5wYWdlWCB8fCBwb2ludGVyUG9zaXRpb25YO1xuICAgICAgICAgICAgcG9pbnRlclBvc2l0aW9uWSA9IGUucGFnZVkgfHwgcG9pbnRlclBvc2l0aW9uWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0YXJnZXRPZmZzZXQgID0gdGhpcy4kdGFyZ2V0Lm9mZnNldCgpO1xuICAgICAgICB2YXIgcmVsYXRpdmVQb3NpdGlvblggPSBwb2ludGVyUG9zaXRpb25YIC0gdGFyZ2V0T2Zmc2V0LmxlZnQ7XG4gICAgICAgIHZhciByZWxhdGl2ZVBvc2l0aW9uWSA9IHBvaW50ZXJQb3NpdGlvblkgLSB0YXJnZXRPZmZzZXQudG9wO1xuICAgICAgICB2YXIgbW92ZVggPSBNYXRoLmNlaWwocmVsYXRpdmVQb3NpdGlvblggKiByYXRpb1gpO1xuICAgICAgICB2YXIgbW92ZVkgPSBNYXRoLmNlaWwocmVsYXRpdmVQb3NpdGlvblkgKiByYXRpb1kpO1xuXG4gICAgICAgIC8vIENsb3NlIGlmIG91dHNpZGVcbiAgICAgICAgaWYgKG1vdmVYIDwgMCB8fCBtb3ZlWSA8IDAgfHwgbW92ZVggPiB6b29tSW1nT3ZlcmxhcFggfHwgbW92ZVkgPiB6b29tSW1nT3ZlcmxhcFkpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHRvcCA9IG1vdmVZICogLTE7XG4gICAgICAgICAgICB2YXIgbGVmdCA9IG1vdmVYICogLTE7XG5cbiAgICAgICAgICAgIGlmICgndHJhbnNmb3JtJyBpbiBkb2N1bWVudC5ib2R5LnN0eWxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kem9vbS5jc3MoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoJyArIGxlZnQgKyAncHgsICcgKyB0b3AgKyAncHgpJyB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kem9vbS5jc3MoeyB0b3A6IHRvcCwgbGVmdDogbGVmdCB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5vcHRzLm9uTW92ZS5jYWxsKHRoaXMsIHRvcCwgbGVmdCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSGlkZVxuICAgICAqL1xuICAgIEVhc3lab29tLnByb3RvdHlwZS5oaWRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5iZWZvcmVIaWRlLmNhbGwodGhpcykgPT09IGZhbHNlKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy4kZmx5b3V0LmRldGFjaCgpO1xuICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMub3B0cy5vbkhpZGUuY2FsbCh0aGlzKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogU3dhcFxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzdGFuZGFyZFNyY1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB6b29tSHJlZlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBzcmNzZXQgKE9wdGlvbmFsKVxuICAgICAqL1xuICAgIEVhc3lab29tLnByb3RvdHlwZS5zd2FwID0gZnVuY3Rpb24oc3RhbmRhcmRTcmMsIHpvb21IcmVmLCBzcmNzZXQpIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIHRoaXMuaXNSZWFkeSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuZGV0YWNoTm90aWNlICYmIGNsZWFyVGltZW91dCh0aGlzLmRldGFjaE5vdGljZSk7XG5cbiAgICAgICAgdGhpcy4kbm90aWNlLnBhcmVudCgpLmxlbmd0aCAmJiB0aGlzLiRub3RpY2UuZGV0YWNoKCk7XG5cbiAgICAgICAgdGhpcy4kdGFyZ2V0LnJlbW92ZUNsYXNzKCdpcy1sb2FkaW5nIGlzLXJlYWR5IGlzLWVycm9yJyk7XG5cbiAgICAgICAgdGhpcy4kaW1hZ2UuYXR0cih7XG4gICAgICAgICAgICBzcmM6IHN0YW5kYXJkU3JjLFxuICAgICAgICAgICAgc3Jjc2V0OiAkLmlzQXJyYXkoc3Jjc2V0KSA/IHNyY3NldC5qb2luKCkgOiBzcmNzZXRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy4kbGluay5hdHRyKHRoaXMub3B0cy5saW5rQXR0cmlidXRlLCB6b29tSHJlZik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRlYXJkb3duXG4gICAgICovXG4gICAgRWFzeVpvb20ucHJvdG90eXBlLnRlYXJkb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuXG4gICAgICAgIHRoaXMuJHRhcmdldFxuICAgICAgICAgICAgLm9mZignLmVhc3l6b29tJylcbiAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnaXMtbG9hZGluZyBpcy1yZWFkeSBpcy1lcnJvcicpO1xuXG4gICAgICAgIHRoaXMuZGV0YWNoTm90aWNlICYmIGNsZWFyVGltZW91dCh0aGlzLmRldGFjaE5vdGljZSk7XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuJGxpbms7XG4gICAgICAgIGRlbGV0ZSB0aGlzLiR6b29tO1xuICAgICAgICBkZWxldGUgdGhpcy4kaW1hZ2U7XG4gICAgICAgIGRlbGV0ZSB0aGlzLiRub3RpY2U7XG4gICAgICAgIGRlbGV0ZSB0aGlzLiRmbHlvdXQ7XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuaXNPcGVuO1xuICAgICAgICBkZWxldGUgdGhpcy5pc1JlYWR5O1xuICAgIH07XG5cbiAgICAvLyBqUXVlcnkgcGx1Z2luIHdyYXBwZXJcbiAgICAkLmZuLmVhc3lab29tID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGFwaSA9ICQuZGF0YSh0aGlzLCAnZWFzeVpvb20nKTtcblxuICAgICAgICAgICAgaWYgKCFhcGkpIHtcbiAgICAgICAgICAgICAgICAkLmRhdGEodGhpcywgJ2Vhc3lab29tJywgbmV3IEVhc3lab29tKHRoaXMsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYXBpLmlzT3BlbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYXBpLl9pbml0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gRWFzeVpvb207XG59KSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKi9cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgcHJlc3Rhc2hvcCBmcm9tICdwcmVzdGFzaG9wJztcblxucHJlc3Rhc2hvcC5yZXNwb25zaXZlID0gcHJlc3Rhc2hvcC5yZXNwb25zaXZlIHx8IHt9O1xuXG5wcmVzdGFzaG9wLnJlc3BvbnNpdmUuY3VycmVudF93aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xucHJlc3Rhc2hvcC5yZXNwb25zaXZlLm1pbl93aWR0aCA9IDc2ODtcbnByZXN0YXNob3AucmVzcG9uc2l2ZS5tb2JpbGUgPSBwcmVzdGFzaG9wLnJlc3BvbnNpdmUuY3VycmVudF93aWR0aCA8IHByZXN0YXNob3AucmVzcG9uc2l2ZS5taW5fd2lkdGg7XG5cbmZ1bmN0aW9uIHN3YXBDaGlsZHJlbihvYmoxLCBvYmoyKSB7XG4gIGNvbnN0IHRlbXAgPSBvYmoyLmNoaWxkcmVuKCkuZGV0YWNoKCk7XG4gIG9iajIuZW1wdHkoKS5hcHBlbmQob2JqMS5jaGlsZHJlbigpLmRldGFjaCgpKTtcbiAgb2JqMS5hcHBlbmQodGVtcCk7XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZU1vYmlsZVN0eWxlcygpIHtcbiAgaWYgKHByZXN0YXNob3AucmVzcG9uc2l2ZS5tb2JpbGUpIHtcbiAgICAkKFwiKltpZF49J19kZXNrdG9wXyddXCIpLmVhY2goKGlkeCwgZWwpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9ICQoYCMke2VsLmlkLnJlcGxhY2UoJ19kZXNrdG9wXycsICdfbW9iaWxlXycpfWApO1xuXG4gICAgICBpZiAodGFyZ2V0Lmxlbmd0aCkge1xuICAgICAgICBzd2FwQ2hpbGRyZW4oJChlbCksIHRhcmdldCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgJChcIipbaWRePSdfbW9iaWxlXyddXCIpLmVhY2goKGlkeCwgZWwpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9ICQoYCMke2VsLmlkLnJlcGxhY2UoJ19tb2JpbGVfJywgJ19kZXNrdG9wXycpfWApO1xuXG4gICAgICBpZiAodGFyZ2V0Lmxlbmd0aCkge1xuICAgICAgICBzd2FwQ2hpbGRyZW4oJChlbCksIHRhcmdldCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcHJlc3Rhc2hvcC5lbWl0KCdyZXNwb25zaXZlIHVwZGF0ZScsIHtcbiAgICBtb2JpbGU6IHByZXN0YXNob3AucmVzcG9uc2l2ZS5tb2JpbGUsXG4gIH0pO1xufVxuXG4kKHdpbmRvdykub24oJ3Jlc2l6ZScsICgpID0+IHtcbiAgY29uc3QgY3cgPSBwcmVzdGFzaG9wLnJlc3BvbnNpdmUuY3VycmVudF93aWR0aDtcbiAgY29uc3QgbXcgPSBwcmVzdGFzaG9wLnJlc3BvbnNpdmUubWluX3dpZHRoO1xuICBjb25zdCB3ID0gd2luZG93LmlubmVyV2lkdGg7XG4gIGNvbnN0IHRvZ2dsZSA9IChjdyA+PSBtdyAmJiB3IDwgbXcpIHx8IChjdyA8IG13ICYmIHcgPj0gbXcpO1xuXG4gIHByZXN0YXNob3AucmVzcG9uc2l2ZS5jdXJyZW50X3dpZHRoID0gdztcbiAgcHJlc3Rhc2hvcC5yZXNwb25zaXZlLm1vYmlsZSA9IHByZXN0YXNob3AucmVzcG9uc2l2ZS5jdXJyZW50X3dpZHRoIDwgcHJlc3Rhc2hvcC5yZXNwb25zaXZlLm1pbl93aWR0aDtcbiAgaWYgKHRvZ2dsZSkge1xuICAgIHRvZ2dsZU1vYmlsZVN0eWxlcygpO1xuICB9XG59KTtcblxuJChkb2N1bWVudCkucmVhZHkoKCkgPT4ge1xuICBpZiAocHJlc3Rhc2hvcC5yZXNwb25zaXZlLm1vYmlsZSkge1xuICAgIHRvZ2dsZU1vYmlsZVN0eWxlcygpO1xuICB9XG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjAgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqL1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBwcmVzdGFzaG9wIGZyb20gJ3ByZXN0YXNob3AnO1xuXG5mdW5jdGlvbiBzZXRVcENoZWNrb3V0KCkge1xuICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY2hlY2tvdXQudGVybXNMaW5rKS5vbignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGxldCB1cmwgPSAkKGV2ZW50LnRhcmdldCkuYXR0cignaHJlZicpO1xuXG4gICAgaWYgKHVybCkge1xuICAgICAgLy8gVE9ETzogSGFuZGxlIHJlcXVlc3QgaWYgbm8gcHJldHR5IFVSTFxuICAgICAgdXJsICs9ICc/Y29udGVudF9vbmx5PTEnO1xuICAgICAgJC5nZXQodXJsLCAoY29udGVudCkgPT4ge1xuICAgICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubW9kYWwpXG4gICAgICAgICAgLmZpbmQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5tb2RhbENvbnRlbnQpXG4gICAgICAgICAgLmh0bWwoJChjb250ZW50KS5maW5kKCcucGFnZS1jbXMnKS5jb250ZW50cygpKTtcbiAgICAgIH0pLmZhaWwoKHJlc3ApID0+IHtcbiAgICAgICAgcHJlc3Rhc2hvcC5lbWl0KCdoYW5kbGVFcnJvcicsIHtldmVudFR5cGU6ICdjbGlja1Rlcm1zJywgcmVzcH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLm1vZGFsKS5tb2RhbCgnc2hvdycpO1xuICB9KTtcblxuICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY2hlY2tvdXQuZ2lmdENoZWNrYm94KS5vbignY2xpY2snLCAoKSA9PiB7XG4gICAgJCgnI2dpZnQnKS5zbGlkZVRvZ2dsZSgpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdG9nZ2xlSW1hZ2UoKSB7XG4gIC8vIEFycm93IHNob3cvaGlkZSBkZXRhaWxzIENoZWNrb3V0IHBhZ2VcbiAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNoZWNrb3V0LmltYWdlc0xpbmspLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBpY29uID0gJCh0aGlzKS5maW5kKCdpLm1hdGVyaWFsLWljb25zJyk7XG5cbiAgICBpZiAoaWNvbi50ZXh0KCkgPT09ICdleHBhbmRfbW9yZScpIHtcbiAgICAgIGljb24udGV4dCgnZXhwYW5kX2xlc3MnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWNvbi50ZXh0KCdleHBhbmRfbW9yZScpO1xuICAgIH1cbiAgfSk7XG59XG5cbiQoZnVuY3Rpb24oKSB7XG4gIGlmICgkKCdib2R5I2NoZWNrb3V0JykubGVuZ3RoID09PSAxKSB7XG4gICAgc2V0VXBDaGVja291dCgpO1xuICAgIHRvZ2dsZUltYWdlKCk7XG4gIH1cblxuICAkKCcudGFicycpLnNpbXBsZXRhYnMoKVxuXG4gIHByZXN0YXNob3Aub24oJ3VwZGF0ZWREZWxpdmVyeUZvcm0nLCAocGFyYW1zKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBwYXJhbXMuZGVsaXZlcnlPcHRpb24gPT09ICd1bmRlZmluZWQnIHx8IHBhcmFtcy5kZWxpdmVyeU9wdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gSGlkZSBhbGwgY2FycmllciBleHRyYSBjb250ZW50IC4uLlxuICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5jaGVja291dC5jYXJyaWVyRXh0cmFDb250ZW50KS5oaWRlKCk7XG4gICAgLy8gYW5kIHNob3cgdGhlIG9uZSByZWxhdGVkIHRvIHRoZSBzZWxlY3RlZCBjYXJyaWVyXG4gICAgcGFyYW1zLmRlbGl2ZXJ5T3B0aW9uLm5leHQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5jaGVja291dC5jYXJyaWVyRXh0cmFDb250ZW50KS5zbGlkZURvd24oKTtcbiAgfSk7XG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjAgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqL1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBwcmVzdGFzaG9wIGZyb20gJ3ByZXN0YXNob3AnO1xuXG5mdW5jdGlvbiBpbml0Um1hSXRlbVNlbGVjdG9yKCkge1xuICAkKGAke3ByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMub3JkZXIucmV0dXJuRm9ybX0gdGFibGUgdGhlYWQgaW5wdXRbdHlwZT1jaGVja2JveF1gKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY2hlY2tlZCA9ICQodGhpcykucHJvcCgnY2hlY2tlZCcpO1xuICAgICQoYCR7cHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5vcmRlci5yZXR1cm5Gb3JtfSB0YWJsZSB0Ym9keSBpbnB1dFt0eXBlPWNoZWNrYm94XWApLmVhY2goKF8sIGNoZWNrYm94KSA9PiB7XG4gICAgICAkKGNoZWNrYm94KS5wcm9wKCdjaGVja2VkJywgY2hlY2tlZCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzZXR1cEN1c3RvbWVyU2NyaXB0cygpIHtcbiAgaWYgKCQoJ2JvZHkjb3JkZXItZGV0YWlsJykpIHtcbiAgICBpbml0Um1hSXRlbVNlbGVjdG9yKCk7XG4gIH1cbn1cblxuJChkb2N1bWVudCkucmVhZHkoc2V0dXBDdXN0b21lclNjcmlwdHMpO1xuIiwiLyohIFZlbG9jaXR5SlMub3JnICgxLjUuMikuIChDKSAyMDE0IEp1bGlhbiBTaGFwaXJvLiBNSVQgQGxpY2Vuc2U6IGVuLndpa2lwZWRpYS5vcmcvd2lraS9NSVRfTGljZW5zZSAqL1xyXG5cclxuLyoqKioqKioqKioqKioqKioqKioqKioqKipcclxuIFZlbG9jaXR5IGpRdWVyeSBTaGltXHJcbiAqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuLyohIFZlbG9jaXR5SlMub3JnIGpRdWVyeSBTaGltICgxLjAuMSkuIChDKSAyMDE0IFRoZSBqUXVlcnkgRm91bmRhdGlvbi4gTUlUIEBsaWNlbnNlOiBlbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UuICovXHJcblxyXG4vKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGpRdWVyeSBmdW5jdGlvbnMgdGhhdCBWZWxvY2l0eSByZWxpZXMgb24sIHRoZXJlYnkgcmVtb3ZpbmcgVmVsb2NpdHkncyBkZXBlbmRlbmN5IG9uIGEgZnVsbCBjb3B5IG9mIGpRdWVyeSwgYW5kIGFsbG93aW5nIGl0IHRvIHdvcmsgaW4gYW55IGVudmlyb25tZW50LiAqL1xyXG4vKiBUaGVzZSBzaGltbWVkIGZ1bmN0aW9ucyBhcmUgb25seSB1c2VkIGlmIGpRdWVyeSBpc24ndCBwcmVzZW50LiBJZiBib3RoIHRoaXMgc2hpbSBhbmQgalF1ZXJ5IGFyZSBsb2FkZWQsIFZlbG9jaXR5IGRlZmF1bHRzIHRvIGpRdWVyeSBwcm9wZXIuICovXHJcbi8qIEJyb3dzZXIgc3VwcG9ydDogVXNpbmcgdGhpcyBzaGltIGluc3RlYWQgb2YgalF1ZXJ5IHByb3BlciByZW1vdmVzIHN1cHBvcnQgZm9yIElFOC4gKi9cclxuXHJcbihmdW5jdGlvbih3aW5kb3cpIHtcclxuXHRcInVzZSBzdHJpY3RcIjtcclxuXHQvKioqKioqKioqKioqKioqXHJcblx0IFNldHVwXHJcblx0ICoqKioqKioqKioqKioqKi9cclxuXHJcblx0LyogSWYgalF1ZXJ5IGlzIGFscmVhZHkgbG9hZGVkLCB0aGVyZSdzIG5vIHBvaW50IGluIGxvYWRpbmcgdGhpcyBzaGltLiAqL1xyXG5cdGlmICh3aW5kb3cualF1ZXJ5KSB7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHQvKiBqUXVlcnkgYmFzZS4gKi9cclxuXHR2YXIgJCA9IGZ1bmN0aW9uKHNlbGVjdG9yLCBjb250ZXh0KSB7XHJcblx0XHRyZXR1cm4gbmV3ICQuZm4uaW5pdChzZWxlY3RvciwgY29udGV4dCk7XHJcblx0fTtcclxuXHJcblx0LyoqKioqKioqKioqKioqKioqKioqXHJcblx0IFByaXZhdGUgTWV0aG9kc1xyXG5cdCAqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0LyogalF1ZXJ5ICovXHJcblx0JC5pc1dpbmRvdyA9IGZ1bmN0aW9uKG9iaikge1xyXG5cdFx0LyoganNoaW50IGVxZXFlcTogZmFsc2UgKi9cclxuXHRcdHJldHVybiBvYmogJiYgb2JqID09PSBvYmoud2luZG93O1xyXG5cdH07XHJcblxyXG5cdC8qIGpRdWVyeSAqL1xyXG5cdCQudHlwZSA9IGZ1bmN0aW9uKG9iaikge1xyXG5cdFx0aWYgKCFvYmopIHtcclxuXHRcdFx0cmV0dXJuIG9iaiArIFwiXCI7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiID9cclxuXHRcdFx0XHRjbGFzczJ0eXBlW3RvU3RyaW5nLmNhbGwob2JqKV0gfHwgXCJvYmplY3RcIiA6XHJcblx0XHRcdFx0dHlwZW9mIG9iajtcclxuXHR9O1xyXG5cclxuXHQvKiBqUXVlcnkgKi9cclxuXHQkLmlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uKG9iaikge1xyXG5cdFx0cmV0dXJuICQudHlwZShvYmopID09PSBcImFycmF5XCI7XHJcblx0fTtcclxuXHJcblx0LyogalF1ZXJ5ICovXHJcblx0ZnVuY3Rpb24gaXNBcnJheWxpa2Uob2JqKSB7XHJcblx0XHR2YXIgbGVuZ3RoID0gb2JqLmxlbmd0aCxcclxuXHRcdFx0XHR0eXBlID0gJC50eXBlKG9iaik7XHJcblxyXG5cdFx0aWYgKHR5cGUgPT09IFwiZnVuY3Rpb25cIiB8fCAkLmlzV2luZG93KG9iaikpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChvYmoubm9kZVR5cGUgPT09IDEgJiYgbGVuZ3RoKSB7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0eXBlID09PSBcImFycmF5XCIgfHwgbGVuZ3RoID09PSAwIHx8IHR5cGVvZiBsZW5ndGggPT09IFwibnVtYmVyXCIgJiYgbGVuZ3RoID4gMCAmJiAobGVuZ3RoIC0gMSkgaW4gb2JqO1xyXG5cdH1cclxuXHJcblx0LyoqKioqKioqKioqKioqKlxyXG5cdCAkIE1ldGhvZHNcclxuXHQgKioqKioqKioqKioqKioqL1xyXG5cclxuXHQvKiBqUXVlcnk6IFN1cHBvcnQgcmVtb3ZlZCBmb3IgSUU8OS4gKi9cclxuXHQkLmlzUGxhaW5PYmplY3QgPSBmdW5jdGlvbihvYmopIHtcclxuXHRcdHZhciBrZXk7XHJcblxyXG5cdFx0aWYgKCFvYmogfHwgJC50eXBlKG9iaikgIT09IFwib2JqZWN0XCIgfHwgb2JqLm5vZGVUeXBlIHx8ICQuaXNXaW5kb3cob2JqKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0aWYgKG9iai5jb25zdHJ1Y3RvciAmJlxyXG5cdFx0XHRcdFx0IWhhc093bi5jYWxsKG9iaiwgXCJjb25zdHJ1Y3RvclwiKSAmJlxyXG5cdFx0XHRcdFx0IWhhc093bi5jYWxsKG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsIFwiaXNQcm90b3R5cGVPZlwiKSkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChrZXkgaW4gb2JqKSB7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGtleSA9PT0gdW5kZWZpbmVkIHx8IGhhc093bi5jYWxsKG9iaiwga2V5KTtcclxuXHR9O1xyXG5cclxuXHQvKiBqUXVlcnkgKi9cclxuXHQkLmVhY2ggPSBmdW5jdGlvbihvYmosIGNhbGxiYWNrLCBhcmdzKSB7XHJcblx0XHR2YXIgdmFsdWUsXHJcblx0XHRcdFx0aSA9IDAsXHJcblx0XHRcdFx0bGVuZ3RoID0gb2JqLmxlbmd0aCxcclxuXHRcdFx0XHRpc0FycmF5ID0gaXNBcnJheWxpa2Uob2JqKTtcclxuXHJcblx0XHRpZiAoYXJncykge1xyXG5cdFx0XHRpZiAoaXNBcnJheSkge1xyXG5cdFx0XHRcdGZvciAoOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdHZhbHVlID0gY2FsbGJhY2suYXBwbHkob2JqW2ldLCBhcmdzKTtcclxuXHJcblx0XHRcdFx0XHRpZiAodmFsdWUgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRmb3IgKGkgaW4gb2JqKSB7XHJcblx0XHRcdFx0XHRpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHZhbHVlID0gY2FsbGJhY2suYXBwbHkob2JqW2ldLCBhcmdzKTtcclxuXHJcblx0XHRcdFx0XHRpZiAodmFsdWUgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmIChpc0FycmF5KSB7XHJcblx0XHRcdFx0Zm9yICg7IGkgPCBsZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjay5jYWxsKG9ialtpXSwgaSwgb2JqW2ldKTtcclxuXHJcblx0XHRcdFx0XHRpZiAodmFsdWUgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRmb3IgKGkgaW4gb2JqKSB7XHJcblx0XHRcdFx0XHRpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHZhbHVlID0gY2FsbGJhY2suY2FsbChvYmpbaV0sIGksIG9ialtpXSk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKHZhbHVlID09PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gb2JqO1xyXG5cdH07XHJcblxyXG5cdC8qIEN1c3RvbSAqL1xyXG5cdCQuZGF0YSA9IGZ1bmN0aW9uKG5vZGUsIGtleSwgdmFsdWUpIHtcclxuXHRcdC8qICQuZ2V0RGF0YSgpICovXHJcblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHR2YXIgZ2V0SWQgPSBub2RlWyQuZXhwYW5kb10sXHJcblx0XHRcdFx0XHRzdG9yZSA9IGdldElkICYmIGNhY2hlW2dldElkXTtcclxuXHJcblx0XHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdHJldHVybiBzdG9yZTtcclxuXHRcdFx0fSBlbHNlIGlmIChzdG9yZSkge1xyXG5cdFx0XHRcdGlmIChrZXkgaW4gc3RvcmUpIHtcclxuXHRcdFx0XHRcdHJldHVybiBzdG9yZVtrZXldO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHQvKiAkLnNldERhdGEoKSAqL1xyXG5cdFx0fSBlbHNlIGlmIChrZXkgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHR2YXIgc2V0SWQgPSBub2RlWyQuZXhwYW5kb10gfHwgKG5vZGVbJC5leHBhbmRvXSA9ICsrJC51dWlkKTtcclxuXHJcblx0XHRcdGNhY2hlW3NldElkXSA9IGNhY2hlW3NldElkXSB8fCB7fTtcclxuXHRcdFx0Y2FjaGVbc2V0SWRdW2tleV0gPSB2YWx1ZTtcclxuXHJcblx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQvKiBDdXN0b20gKi9cclxuXHQkLnJlbW92ZURhdGEgPSBmdW5jdGlvbihub2RlLCBrZXlzKSB7XHJcblx0XHR2YXIgaWQgPSBub2RlWyQuZXhwYW5kb10sXHJcblx0XHRcdFx0c3RvcmUgPSBpZCAmJiBjYWNoZVtpZF07XHJcblxyXG5cdFx0aWYgKHN0b3JlKSB7XHJcblx0XHRcdC8vIENsZWFudXAgdGhlIGVudGlyZSBzdG9yZSBpZiBubyBrZXlzIGFyZSBwcm92aWRlZC5cclxuXHRcdFx0aWYgKCFrZXlzKSB7XHJcblx0XHRcdFx0ZGVsZXRlIGNhY2hlW2lkXTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQkLmVhY2goa2V5cywgZnVuY3Rpb24oXywga2V5KSB7XHJcblx0XHRcdFx0XHRkZWxldGUgc3RvcmVba2V5XTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qIGpRdWVyeSAqL1xyXG5cdCQuZXh0ZW5kID0gZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgc3JjLCBjb3B5SXNBcnJheSwgY29weSwgbmFtZSwgb3B0aW9ucywgY2xvbmUsXHJcblx0XHRcdFx0dGFyZ2V0ID0gYXJndW1lbnRzWzBdIHx8IHt9LFxyXG5cdFx0XHRcdGkgPSAxLFxyXG5cdFx0XHRcdGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXHJcblx0XHRcdFx0ZGVlcCA9IGZhbHNlO1xyXG5cclxuXHRcdGlmICh0eXBlb2YgdGFyZ2V0ID09PSBcImJvb2xlYW5cIikge1xyXG5cdFx0XHRkZWVwID0gdGFyZ2V0O1xyXG5cclxuXHRcdFx0dGFyZ2V0ID0gYXJndW1lbnRzW2ldIHx8IHt9O1xyXG5cdFx0XHRpKys7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHR5cGVvZiB0YXJnZXQgIT09IFwib2JqZWN0XCIgJiYgJC50eXBlKHRhcmdldCkgIT09IFwiZnVuY3Rpb25cIikge1xyXG5cdFx0XHR0YXJnZXQgPSB7fTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaSA9PT0gbGVuZ3RoKSB7XHJcblx0XHRcdHRhcmdldCA9IHRoaXM7XHJcblx0XHRcdGktLTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGlmICgob3B0aW9ucyA9IGFyZ3VtZW50c1tpXSkpIHtcclxuXHRcdFx0XHRmb3IgKG5hbWUgaW4gb3B0aW9ucykge1xyXG5cdFx0XHRcdFx0aWYgKCFvcHRpb25zLmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0c3JjID0gdGFyZ2V0W25hbWVdO1xyXG5cdFx0XHRcdFx0Y29weSA9IG9wdGlvbnNbbmFtZV07XHJcblxyXG5cdFx0XHRcdFx0aWYgKHRhcmdldCA9PT0gY29weSkge1xyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAoZGVlcCAmJiBjb3B5ICYmICgkLmlzUGxhaW5PYmplY3QoY29weSkgfHwgKGNvcHlJc0FycmF5ID0gJC5pc0FycmF5KGNvcHkpKSkpIHtcclxuXHRcdFx0XHRcdFx0aWYgKGNvcHlJc0FycmF5KSB7XHJcblx0XHRcdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0XHRjbG9uZSA9IHNyYyAmJiAkLmlzQXJyYXkoc3JjKSA/IHNyYyA6IFtdO1xyXG5cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRjbG9uZSA9IHNyYyAmJiAkLmlzUGxhaW5PYmplY3Qoc3JjKSA/IHNyYyA6IHt9O1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR0YXJnZXRbbmFtZV0gPSAkLmV4dGVuZChkZWVwLCBjbG9uZSwgY29weSk7XHJcblxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmIChjb3B5ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0dGFyZ2V0W25hbWVdID0gY29weTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGFyZ2V0O1xyXG5cdH07XHJcblxyXG5cdC8qIGpRdWVyeSAxLjQuMyAqL1xyXG5cdCQucXVldWUgPSBmdW5jdGlvbihlbGVtLCB0eXBlLCBkYXRhKSB7XHJcblx0XHRmdW5jdGlvbiAkbWFrZUFycmF5KGFyciwgcmVzdWx0cykge1xyXG5cdFx0XHR2YXIgcmV0ID0gcmVzdWx0cyB8fCBbXTtcclxuXHJcblx0XHRcdGlmIChhcnIpIHtcclxuXHRcdFx0XHRpZiAoaXNBcnJheWxpa2UoT2JqZWN0KGFycikpKSB7XHJcblx0XHRcdFx0XHQvKiAkLm1lcmdlICovXHJcblx0XHRcdFx0XHQoZnVuY3Rpb24oZmlyc3QsIHNlY29uZCkge1xyXG5cdFx0XHRcdFx0XHR2YXIgbGVuID0gK3NlY29uZC5sZW5ndGgsXHJcblx0XHRcdFx0XHRcdFx0XHRqID0gMCxcclxuXHRcdFx0XHRcdFx0XHRcdGkgPSBmaXJzdC5sZW5ndGg7XHJcblxyXG5cdFx0XHRcdFx0XHR3aGlsZSAoaiA8IGxlbikge1xyXG5cdFx0XHRcdFx0XHRcdGZpcnN0W2krK10gPSBzZWNvbmRbaisrXTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKGxlbiAhPT0gbGVuKSB7XHJcblx0XHRcdFx0XHRcdFx0d2hpbGUgKHNlY29uZFtqXSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRmaXJzdFtpKytdID0gc2Vjb25kW2orK107XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRmaXJzdC5sZW5ndGggPSBpO1xyXG5cclxuXHRcdFx0XHRcdFx0cmV0dXJuIGZpcnN0O1xyXG5cdFx0XHRcdFx0fSkocmV0LCB0eXBlb2YgYXJyID09PSBcInN0cmluZ1wiID8gW2Fycl0gOiBhcnIpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRbXS5wdXNoLmNhbGwocmV0LCBhcnIpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHJldDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIWVsZW0pIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHR5cGUgPSAodHlwZSB8fCBcImZ4XCIpICsgXCJxdWV1ZVwiO1xyXG5cclxuXHRcdHZhciBxID0gJC5kYXRhKGVsZW0sIHR5cGUpO1xyXG5cclxuXHRcdGlmICghZGF0YSkge1xyXG5cdFx0XHRyZXR1cm4gcSB8fCBbXTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIXEgfHwgJC5pc0FycmF5KGRhdGEpKSB7XHJcblx0XHRcdHEgPSAkLmRhdGEoZWxlbSwgdHlwZSwgJG1ha2VBcnJheShkYXRhKSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRxLnB1c2goZGF0YSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHE7XHJcblx0fTtcclxuXHJcblx0LyogalF1ZXJ5IDEuNC4zICovXHJcblx0JC5kZXF1ZXVlID0gZnVuY3Rpb24oZWxlbXMsIHR5cGUpIHtcclxuXHRcdC8qIEN1c3RvbTogRW1iZWQgZWxlbWVudCBpdGVyYXRpb24uICovXHJcblx0XHQkLmVhY2goZWxlbXMubm9kZVR5cGUgPyBbZWxlbXNdIDogZWxlbXMsIGZ1bmN0aW9uKGksIGVsZW0pIHtcclxuXHRcdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xyXG5cclxuXHRcdFx0dmFyIHF1ZXVlID0gJC5xdWV1ZShlbGVtLCB0eXBlKSxcclxuXHRcdFx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcclxuXHJcblx0XHRcdGlmIChmbiA9PT0gXCJpbnByb2dyZXNzXCIpIHtcclxuXHRcdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChmbikge1xyXG5cdFx0XHRcdGlmICh0eXBlID09PSBcImZ4XCIpIHtcclxuXHRcdFx0XHRcdHF1ZXVlLnVuc2hpZnQoXCJpbnByb2dyZXNzXCIpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Zm4uY2FsbChlbGVtLCBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdCQuZGVxdWV1ZShlbGVtLCB0eXBlKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fTtcclxuXHJcblx0LyoqKioqKioqKioqKioqKioqKlxyXG5cdCAkLmZuIE1ldGhvZHNcclxuXHQgKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHQvKiBqUXVlcnkgKi9cclxuXHQkLmZuID0gJC5wcm90b3R5cGUgPSB7XHJcblx0XHRpbml0OiBmdW5jdGlvbihzZWxlY3Rvcikge1xyXG5cdFx0XHQvKiBKdXN0IHJldHVybiB0aGUgZWxlbWVudCB3cmFwcGVkIGluc2lkZSBhbiBhcnJheTsgZG9uJ3QgcHJvY2VlZCB3aXRoIHRoZSBhY3R1YWwgalF1ZXJ5IG5vZGUgd3JhcHBpbmcgcHJvY2Vzcy4gKi9cclxuXHRcdFx0aWYgKHNlbGVjdG9yLm5vZGVUeXBlKSB7XHJcblx0XHRcdFx0dGhpc1swXSA9IHNlbGVjdG9yO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJOb3QgYSBET00gbm9kZS5cIik7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRvZmZzZXQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHQvKiBqUXVlcnkgYWx0ZXJlZCBjb2RlOiBEcm9wcGVkIGRpc2Nvbm5lY3RlZCBET00gbm9kZSBjaGVja2luZy4gKi9cclxuXHRcdFx0dmFyIGJveCA9IHRoaXNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID8gdGhpc1swXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA6IHt0b3A6IDAsIGxlZnQ6IDB9O1xyXG5cclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHR0b3A6IGJveC50b3AgKyAod2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LnNjcm9sbFRvcCB8fCAwKSAtIChkb2N1bWVudC5jbGllbnRUb3AgfHwgMCksXHJcblx0XHRcdFx0bGVmdDogYm94LmxlZnQgKyAod2luZG93LnBhZ2VYT2Zmc2V0IHx8IGRvY3VtZW50LnNjcm9sbExlZnQgfHwgMCkgLSAoZG9jdW1lbnQuY2xpZW50TGVmdCB8fCAwKVxyXG5cdFx0XHR9O1xyXG5cdFx0fSxcclxuXHRcdHBvc2l0aW9uOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0LyogalF1ZXJ5ICovXHJcblx0XHRcdGZ1bmN0aW9uIG9mZnNldFBhcmVudEZuKGVsZW0pIHtcclxuXHRcdFx0XHR2YXIgb2Zmc2V0UGFyZW50ID0gZWxlbS5vZmZzZXRQYXJlbnQ7XHJcblxyXG5cdFx0XHRcdHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgKG9mZnNldFBhcmVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcImh0bWxcIiAmJiBvZmZzZXRQYXJlbnQuc3R5bGUgJiYgb2Zmc2V0UGFyZW50LnN0eWxlLnBvc2l0aW9uLnRvTG93ZXJDYXNlKCkgPT09IFwic3RhdGljXCIpKSB7XHJcblx0XHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50O1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIG9mZnNldFBhcmVudCB8fCBkb2N1bWVudDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogWmVwdG8gKi9cclxuXHRcdFx0dmFyIGVsZW0gPSB0aGlzWzBdLFxyXG5cdFx0XHRcdFx0b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50Rm4oZWxlbSksXHJcblx0XHRcdFx0XHRvZmZzZXQgPSB0aGlzLm9mZnNldCgpLFxyXG5cdFx0XHRcdFx0cGFyZW50T2Zmc2V0ID0gL14oPzpib2R5fGh0bWwpJC9pLnRlc3Qob2Zmc2V0UGFyZW50Lm5vZGVOYW1lKSA/IHt0b3A6IDAsIGxlZnQ6IDB9IDogJChvZmZzZXRQYXJlbnQpLm9mZnNldCgpO1xyXG5cclxuXHRcdFx0b2Zmc2V0LnRvcCAtPSBwYXJzZUZsb2F0KGVsZW0uc3R5bGUubWFyZ2luVG9wKSB8fCAwO1xyXG5cdFx0XHRvZmZzZXQubGVmdCAtPSBwYXJzZUZsb2F0KGVsZW0uc3R5bGUubWFyZ2luTGVmdCkgfHwgMDtcclxuXHJcblx0XHRcdGlmIChvZmZzZXRQYXJlbnQuc3R5bGUpIHtcclxuXHRcdFx0XHRwYXJlbnRPZmZzZXQudG9wICs9IHBhcnNlRmxvYXQob2Zmc2V0UGFyZW50LnN0eWxlLmJvcmRlclRvcFdpZHRoKSB8fCAwO1xyXG5cdFx0XHRcdHBhcmVudE9mZnNldC5sZWZ0ICs9IHBhcnNlRmxvYXQob2Zmc2V0UGFyZW50LnN0eWxlLmJvcmRlckxlZnRXaWR0aCkgfHwgMDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHR0b3A6IG9mZnNldC50b3AgLSBwYXJlbnRPZmZzZXQudG9wLFxyXG5cdFx0XHRcdGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnRcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQvKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdCBQcml2YXRlIFZhcmlhYmxlc1xyXG5cdCAqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHQvKiBGb3IgJC5kYXRhKCkgKi9cclxuXHR2YXIgY2FjaGUgPSB7fTtcclxuXHQkLmV4cGFuZG8gPSBcInZlbG9jaXR5XCIgKyAobmV3IERhdGUoKS5nZXRUaW1lKCkpO1xyXG5cdCQudXVpZCA9IDA7XHJcblxyXG5cdC8qIEZvciAkLnF1ZXVlKCkgKi9cclxuXHR2YXIgY2xhc3MydHlwZSA9IHt9LFxyXG5cdFx0XHRoYXNPd24gPSBjbGFzczJ0eXBlLmhhc093blByb3BlcnR5LFxyXG5cdFx0XHR0b1N0cmluZyA9IGNsYXNzMnR5cGUudG9TdHJpbmc7XHJcblxyXG5cdHZhciB0eXBlcyA9IFwiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvclwiLnNwbGl0KFwiIFwiKTtcclxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRjbGFzczJ0eXBlW1wiW29iamVjdCBcIiArIHR5cGVzW2ldICsgXCJdXCJdID0gdHlwZXNbaV0udG9Mb3dlckNhc2UoKTtcclxuXHR9XHJcblxyXG5cdC8qIE1ha2VzICQobm9kZSkgcG9zc2libGUsIHdpdGhvdXQgaGF2aW5nIHRvIGNhbGwgaW5pdC4gKi9cclxuXHQkLmZuLmluaXQucHJvdG90eXBlID0gJC5mbjtcclxuXHJcblx0LyogR2xvYmFsaXplIFZlbG9jaXR5IG9udG8gdGhlIHdpbmRvdywgYW5kIGFzc2lnbiBpdHMgVXRpbGl0aWVzIHByb3BlcnR5LiAqL1xyXG5cdHdpbmRvdy5WZWxvY2l0eSA9IHtVdGlsaXRpZXM6ICR9O1xyXG59KSh3aW5kb3cpO1xyXG5cclxuLyoqKioqKioqKioqKioqKioqKlxyXG4gVmVsb2NpdHkuanNcclxuICoqKioqKioqKioqKioqKioqKi9cclxuXHJcbihmdW5jdGlvbihmYWN0b3J5KSB7XHJcblx0XCJ1c2Ugc3RyaWN0XCI7XHJcblx0LyogQ29tbW9uSlMgbW9kdWxlLiAqL1xyXG5cdGlmICh0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xyXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XHJcblx0XHQvKiBBTUQgbW9kdWxlLiAqL1xyXG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcclxuXHRcdGRlZmluZShmYWN0b3J5KTtcclxuXHRcdC8qIEJyb3dzZXIgZ2xvYmFscy4gKi9cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZmFjdG9yeSgpO1xyXG5cdH1cclxufShmdW5jdGlvbigpIHtcclxuXHRcInVzZSBzdHJpY3RcIjtcclxuXHRyZXR1cm4gZnVuY3Rpb24oZ2xvYmFsLCB3aW5kb3csIGRvY3VtZW50LCB1bmRlZmluZWQpIHtcclxuXHJcblx0XHQvKioqKioqKioqKioqKioqXHJcblx0XHQgU3VtbWFyeVxyXG5cdFx0ICoqKioqKioqKioqKioqKi9cclxuXHJcblx0XHQvKlxyXG5cdFx0IC0gQ1NTOiBDU1Mgc3RhY2sgdGhhdCB3b3JrcyBpbmRlcGVuZGVudGx5IGZyb20gdGhlIHJlc3Qgb2YgVmVsb2NpdHkuXHJcblx0XHQgLSBhbmltYXRlKCk6IENvcmUgYW5pbWF0aW9uIG1ldGhvZCB0aGF0IGl0ZXJhdGVzIG92ZXIgdGhlIHRhcmdldGVkIGVsZW1lbnRzIGFuZCBxdWV1ZXMgdGhlIGluY29taW5nIGNhbGwgb250byBlYWNoIGVsZW1lbnQgaW5kaXZpZHVhbGx5LlxyXG5cdFx0IC0gUHJlLVF1ZXVlaW5nOiBQcmVwYXJlIHRoZSBlbGVtZW50IGZvciBhbmltYXRpb24gYnkgaW5zdGFudGlhdGluZyBpdHMgZGF0YSBjYWNoZSBhbmQgcHJvY2Vzc2luZyB0aGUgY2FsbCdzIG9wdGlvbnMuXHJcblx0XHQgLSBRdWV1ZWluZzogVGhlIGxvZ2ljIHRoYXQgcnVucyBvbmNlIHRoZSBjYWxsIGhhcyByZWFjaGVkIGl0cyBwb2ludCBvZiBleGVjdXRpb24gaW4gdGhlIGVsZW1lbnQncyAkLnF1ZXVlKCkgc3RhY2suXHJcblx0XHQgTW9zdCBsb2dpYyBpcyBwbGFjZWQgaGVyZSB0byBhdm9pZCByaXNraW5nIGl0IGJlY29taW5nIHN0YWxlIChpZiB0aGUgZWxlbWVudCdzIHByb3BlcnRpZXMgaGF2ZSBjaGFuZ2VkKS5cclxuXHRcdCAtIFB1c2hpbmc6IENvbnNvbGlkYXRpb24gb2YgdGhlIHR3ZWVuIGRhdGEgZm9sbG93ZWQgYnkgaXRzIHB1c2ggb250byB0aGUgZ2xvYmFsIGluLXByb2dyZXNzIGNhbGxzIGNvbnRhaW5lci5cclxuXHRcdCAtIHRpY2soKTogVGhlIHNpbmdsZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgbG9vcCByZXNwb25zaWJsZSBmb3IgdHdlZW5pbmcgYWxsIGluLXByb2dyZXNzIGNhbGxzLlxyXG5cdFx0IC0gY29tcGxldGVDYWxsKCk6IEhhbmRsZXMgdGhlIGNsZWFudXAgcHJvY2VzcyBmb3IgZWFjaCBWZWxvY2l0eSBjYWxsLlxyXG5cdFx0ICovXHJcblxyXG5cdFx0LyoqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0IEhlbHBlciBGdW5jdGlvbnNcclxuXHRcdCAqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0LyogSUUgZGV0ZWN0aW9uLiBHaXN0OiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9qdWxpYW5zaGFwaXJvLzkwOTg2MDkgKi9cclxuXHRcdHZhciBJRSA9IChmdW5jdGlvbigpIHtcclxuXHRcdFx0aWYgKGRvY3VtZW50LmRvY3VtZW50TW9kZSkge1xyXG5cdFx0XHRcdHJldHVybiBkb2N1bWVudC5kb2N1bWVudE1vZGU7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDc7IGkgPiA0OyBpLS0pIHtcclxuXHRcdFx0XHRcdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cclxuXHRcdFx0XHRcdGRpdi5pbm5lckhUTUwgPSBcIjwhLS1baWYgSUUgXCIgKyBpICsgXCJdPjxzcGFuPjwvc3Bhbj48IVtlbmRpZl0tLT5cIjtcclxuXHJcblx0XHRcdFx0XHRpZiAoZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic3BhblwiKS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0ZGl2ID0gbnVsbDtcclxuXHJcblx0XHRcdFx0XHRcdHJldHVybiBpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH0pKCk7XHJcblxyXG5cdFx0LyogckFGIHNoaW0uIEdpc3Q6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2p1bGlhbnNoYXBpcm8vOTQ5NzUxMyAqL1xyXG5cdFx0dmFyIHJBRlNoaW0gPSAoZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciB0aW1lTGFzdCA9IDA7XHJcblxyXG5cdFx0XHRyZXR1cm4gd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCB3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcblx0XHRcdFx0dmFyIHRpbWVDdXJyZW50ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKSxcclxuXHRcdFx0XHRcdFx0dGltZURlbHRhO1xyXG5cclxuXHRcdFx0XHQvKiBEeW5hbWljYWxseSBzZXQgZGVsYXkgb24gYSBwZXItdGljayBiYXNpcyB0byBtYXRjaCA2MGZwcy4gKi9cclxuXHRcdFx0XHQvKiBUZWNobmlxdWUgYnkgRXJpayBNb2xsZXIuIE1JVCBsaWNlbnNlOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9wYXVsaXJpc2gvMTU3OTY3MSAqL1xyXG5cdFx0XHRcdHRpbWVEZWx0YSA9IE1hdGgubWF4KDAsIDE2IC0gKHRpbWVDdXJyZW50IC0gdGltZUxhc3QpKTtcclxuXHRcdFx0XHR0aW1lTGFzdCA9IHRpbWVDdXJyZW50ICsgdGltZURlbHRhO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdGNhbGxiYWNrKHRpbWVDdXJyZW50ICsgdGltZURlbHRhKTtcclxuXHRcdFx0XHR9LCB0aW1lRGVsdGEpO1xyXG5cdFx0XHR9O1xyXG5cdFx0fSkoKTtcclxuXHJcblx0XHR2YXIgcGVyZm9ybWFuY2UgPSAoZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBwZXJmID0gd2luZG93LnBlcmZvcm1hbmNlIHx8IHt9O1xyXG5cclxuXHRcdFx0aWYgKHR5cGVvZiBwZXJmLm5vdyAhPT0gXCJmdW5jdGlvblwiKSB7XHJcblx0XHRcdFx0dmFyIG5vd09mZnNldCA9IHBlcmYudGltaW5nICYmIHBlcmYudGltaW5nLm5hdmlnYXRpb25TdGFydCA/IHBlcmYudGltaW5nLm5hdmlnYXRpb25TdGFydCA6IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XHJcblxyXG5cdFx0XHRcdHBlcmYubm93ID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIG5vd09mZnNldDtcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBwZXJmO1xyXG5cdFx0fSkoKTtcclxuXHJcblx0XHQvKiBBcnJheSBjb21wYWN0aW5nLiBDb3B5cmlnaHQgTG8tRGFzaC4gTUlUIExpY2Vuc2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvbWFzdGVyL0xJQ0VOU0UudHh0ICovXHJcblx0XHRmdW5jdGlvbiBjb21wYWN0U3BhcnNlQXJyYXkoYXJyYXkpIHtcclxuXHRcdFx0dmFyIGluZGV4ID0gLTEsXHJcblx0XHRcdFx0XHRsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDAsXHJcblx0XHRcdFx0XHRyZXN1bHQgPSBbXTtcclxuXHJcblx0XHRcdHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XHJcblx0XHRcdFx0dmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuXHRcdFx0XHRpZiAodmFsdWUpIHtcclxuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKHZhbHVlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTaGltIGZvciBcImZpeGluZ1wiIElFJ3MgbGFjayBvZiBzdXBwb3J0IChJRSA8IDkpIGZvciBhcHBseWluZyBzbGljZVxyXG5cdFx0ICogb24gaG9zdCBvYmplY3RzIGxpa2UgTmFtZWROb2RlTWFwLCBOb2RlTGlzdCwgYW5kIEhUTUxDb2xsZWN0aW9uXHJcblx0XHQgKiAodGVjaG5pY2FsbHksIHNpbmNlIGhvc3Qgb2JqZWN0cyBoYXZlIGJlZW4gaW1wbGVtZW50YXRpb24tZGVwZW5kZW50LFxyXG5cdFx0ICogYXQgbGVhc3QgYmVmb3JlIEVTMjAxNSwgSUUgaGFzbid0IG5lZWRlZCB0byB3b3JrIHRoaXMgd2F5KS5cclxuXHRcdCAqIEFsc28gd29ya3Mgb24gc3RyaW5ncywgZml4ZXMgSUUgPCA5IHRvIGFsbG93IGFuIGV4cGxpY2l0IHVuZGVmaW5lZFxyXG5cdFx0ICogZm9yIHRoZSAybmQgYXJndW1lbnQgKGFzIGluIEZpcmVmb3gpLCBhbmQgcHJldmVudHMgZXJyb3JzIHdoZW5cclxuXHRcdCAqIGNhbGxlZCBvbiBvdGhlciBET00gb2JqZWN0cy5cclxuXHRcdCAqL1xyXG5cdFx0dmFyIF9zbGljZSA9IChmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHQvLyBDYW4ndCBiZSB1c2VkIHdpdGggRE9NIGVsZW1lbnRzIGluIElFIDwgOVxyXG5cdFx0XHRcdHNsaWNlLmNhbGwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTtcclxuXHRcdFx0XHRyZXR1cm4gc2xpY2U7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHsgLy8gRmFpbHMgaW4gSUUgPCA5XHJcblxyXG5cdFx0XHRcdC8vIFRoaXMgd2lsbCB3b3JrIGZvciBnZW51aW5lIGFycmF5cywgYXJyYXktbGlrZSBvYmplY3RzLCBcclxuXHRcdFx0XHQvLyBOYW1lZE5vZGVNYXAgKGF0dHJpYnV0ZXMsIGVudGl0aWVzLCBub3RhdGlvbnMpLFxyXG5cdFx0XHRcdC8vIE5vZGVMaXN0IChlLmcuLCBnZXRFbGVtZW50c0J5VGFnTmFtZSksIEhUTUxDb2xsZWN0aW9uIChlLmcuLCBjaGlsZE5vZGVzKSxcclxuXHRcdFx0XHQvLyBhbmQgd2lsbCBub3QgZmFpbCBvbiBvdGhlciBET00gb2JqZWN0cyAoYXMgZG8gRE9NIGVsZW1lbnRzIGluIElFIDwgOSlcclxuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oYmVnaW4sIGVuZCkge1xyXG5cdFx0XHRcdFx0dmFyIGxlbiA9IHRoaXMubGVuZ3RoO1xyXG5cclxuXHRcdFx0XHRcdGlmICh0eXBlb2YgYmVnaW4gIT09IFwibnVtYmVyXCIpIHtcclxuXHRcdFx0XHRcdFx0YmVnaW4gPSAwO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Ly8gSUUgPCA5IGdldHMgdW5oYXBweSB3aXRoIGFuIHVuZGVmaW5lZCBlbmQgYXJndW1lbnRcclxuXHRcdFx0XHRcdGlmICh0eXBlb2YgZW5kICE9PSBcIm51bWJlclwiKSB7XHJcblx0XHRcdFx0XHRcdGVuZCA9IGxlbjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdC8vIEZvciBuYXRpdmUgQXJyYXkgb2JqZWN0cywgd2UgdXNlIHRoZSBuYXRpdmUgc2xpY2UgZnVuY3Rpb25cclxuXHRcdFx0XHRcdGlmICh0aGlzLnNsaWNlKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBzbGljZS5jYWxsKHRoaXMsIGJlZ2luLCBlbmQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Ly8gRm9yIGFycmF5IGxpa2Ugb2JqZWN0IHdlIGhhbmRsZSBpdCBvdXJzZWx2ZXMuXHJcblx0XHRcdFx0XHR2YXIgaSxcclxuXHRcdFx0XHRcdFx0XHRjbG9uZWQgPSBbXSxcclxuXHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgbmVnYXRpdmUgdmFsdWUgZm9yIFwiYmVnaW5cIlxyXG5cdFx0XHRcdFx0XHRcdHN0YXJ0ID0gKGJlZ2luID49IDApID8gYmVnaW4gOiBNYXRoLm1heCgwLCBsZW4gKyBiZWdpbiksXHJcblx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIG5lZ2F0aXZlIHZhbHVlIGZvciBcImVuZFwiXHJcblx0XHRcdFx0XHRcdFx0dXBUbyA9IGVuZCA8IDAgPyBsZW4gKyBlbmQgOiBNYXRoLm1pbihlbmQsIGxlbiksXHJcblx0XHRcdFx0XHRcdFx0Ly8gQWN0dWFsIGV4cGVjdGVkIHNpemUgb2YgdGhlIHNsaWNlXHJcblx0XHRcdFx0XHRcdFx0c2l6ZSA9IHVwVG8gLSBzdGFydDtcclxuXHJcblx0XHRcdFx0XHRpZiAoc2l6ZSA+IDApIHtcclxuXHRcdFx0XHRcdFx0Y2xvbmVkID0gbmV3IEFycmF5KHNpemUpO1xyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5jaGFyQXQpIHtcclxuXHRcdFx0XHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjbG9uZWRbaV0gPSB0aGlzLmNoYXJBdChzdGFydCArIGkpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjbG9uZWRbaV0gPSB0aGlzW3N0YXJ0ICsgaV07XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXR1cm4gY2xvbmVkO1xyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHRcdH0pKCk7XHJcblxyXG5cdFx0LyogLmluZGV4T2YgZG9lc24ndCBleGlzdCBpbiBJRTw5ICovXHJcblx0XHR2YXIgX2luQXJyYXkgPSAoZnVuY3Rpb24oKSB7XHJcblx0XHRcdGlmIChBcnJheS5wcm90b3R5cGUuaW5jbHVkZXMpIHtcclxuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oYXJyLCB2YWwpIHtcclxuXHRcdFx0XHRcdHJldHVybiBhcnIuaW5jbHVkZXModmFsKTtcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChBcnJheS5wcm90b3R5cGUuaW5kZXhPZikge1xyXG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbihhcnIsIHZhbCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGFyci5pbmRleE9mKHZhbCkgPj0gMDtcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBmdW5jdGlvbihhcnIsIHZhbCkge1xyXG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRpZiAoYXJyW2ldID09PSB2YWwpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdGZ1bmN0aW9uIHNhbml0aXplRWxlbWVudHMoZWxlbWVudHMpIHtcclxuXHRcdFx0LyogVW53cmFwIGpRdWVyeS9aZXB0byBvYmplY3RzLiAqL1xyXG5cdFx0XHRpZiAoVHlwZS5pc1dyYXBwZWQoZWxlbWVudHMpKSB7XHJcblx0XHRcdFx0ZWxlbWVudHMgPSBfc2xpY2UuY2FsbChlbGVtZW50cyk7XHJcblx0XHRcdFx0LyogV3JhcCBhIHNpbmdsZSBlbGVtZW50IGluIGFuIGFycmF5IHNvIHRoYXQgJC5lYWNoKCkgY2FuIGl0ZXJhdGUgd2l0aCB0aGUgZWxlbWVudCBpbnN0ZWFkIG9mIGl0cyBub2RlJ3MgY2hpbGRyZW4uICovXHJcblx0XHRcdH0gZWxzZSBpZiAoVHlwZS5pc05vZGUoZWxlbWVudHMpKSB7XHJcblx0XHRcdFx0ZWxlbWVudHMgPSBbZWxlbWVudHNdO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gZWxlbWVudHM7XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIFR5cGUgPSB7XHJcblx0XHRcdGlzTnVtYmVyOiBmdW5jdGlvbih2YXJpYWJsZSkge1xyXG5cdFx0XHRcdHJldHVybiAodHlwZW9mIHZhcmlhYmxlID09PSBcIm51bWJlclwiKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0aXNTdHJpbmc6IGZ1bmN0aW9uKHZhcmlhYmxlKSB7XHJcblx0XHRcdFx0cmV0dXJuICh0eXBlb2YgdmFyaWFibGUgPT09IFwic3RyaW5nXCIpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRpc0FycmF5OiBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uKHZhcmlhYmxlKSB7XHJcblx0XHRcdFx0cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YXJpYWJsZSkgPT09IFwiW29iamVjdCBBcnJheV1cIjtcclxuXHRcdFx0fSxcclxuXHRcdFx0aXNGdW5jdGlvbjogZnVuY3Rpb24odmFyaWFibGUpIHtcclxuXHRcdFx0XHRyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhcmlhYmxlKSA9PT0gXCJbb2JqZWN0IEZ1bmN0aW9uXVwiO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRpc05vZGU6IGZ1bmN0aW9uKHZhcmlhYmxlKSB7XHJcblx0XHRcdFx0cmV0dXJuIHZhcmlhYmxlICYmIHZhcmlhYmxlLm5vZGVUeXBlO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKiBEZXRlcm1pbmUgaWYgdmFyaWFibGUgaXMgYW4gYXJyYXktbGlrZSB3cmFwcGVkIGpRdWVyeSwgWmVwdG8gb3Igc2ltaWxhciBlbGVtZW50LCBvciBldmVuIGEgTm9kZUxpc3QgZXRjLiAqL1xyXG5cdFx0XHQvKiBOT1RFOiBIVE1MRm9ybUVsZW1lbnRzIGFsc28gaGF2ZSBhIGxlbmd0aC4gKi9cclxuXHRcdFx0aXNXcmFwcGVkOiBmdW5jdGlvbih2YXJpYWJsZSkge1xyXG5cdFx0XHRcdHJldHVybiB2YXJpYWJsZVxyXG5cdFx0XHRcdFx0XHQmJiB2YXJpYWJsZSAhPT0gd2luZG93XHJcblx0XHRcdFx0XHRcdCYmIFR5cGUuaXNOdW1iZXIodmFyaWFibGUubGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHQmJiAhVHlwZS5pc1N0cmluZyh2YXJpYWJsZSlcclxuXHRcdFx0XHRcdFx0JiYgIVR5cGUuaXNGdW5jdGlvbih2YXJpYWJsZSlcclxuXHRcdFx0XHRcdFx0JiYgIVR5cGUuaXNOb2RlKHZhcmlhYmxlKVxyXG5cdFx0XHRcdFx0XHQmJiAodmFyaWFibGUubGVuZ3RoID09PSAwIHx8IFR5cGUuaXNOb2RlKHZhcmlhYmxlWzBdKSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGlzU1ZHOiBmdW5jdGlvbih2YXJpYWJsZSkge1xyXG5cdFx0XHRcdHJldHVybiB3aW5kb3cuU1ZHRWxlbWVudCAmJiAodmFyaWFibGUgaW5zdGFuY2VvZiB3aW5kb3cuU1ZHRWxlbWVudCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKHZhcmlhYmxlKSB7XHJcblx0XHRcdFx0Zm9yICh2YXIgbmFtZSBpbiB2YXJpYWJsZSkge1xyXG5cdFx0XHRcdFx0aWYgKHZhcmlhYmxlLmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cclxuXHRcdC8qKioqKioqKioqKioqKioqKlxyXG5cdFx0IERlcGVuZGVuY2llc1xyXG5cdFx0ICoqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdHZhciAkLFxyXG5cdFx0XHRcdGlzSlF1ZXJ5ID0gZmFsc2U7XHJcblxyXG5cdFx0aWYgKGdsb2JhbC5mbiAmJiBnbG9iYWwuZm4uanF1ZXJ5KSB7XHJcblx0XHRcdCQgPSBnbG9iYWw7XHJcblx0XHRcdGlzSlF1ZXJ5ID0gdHJ1ZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdCQgPSB3aW5kb3cuVmVsb2NpdHkuVXRpbGl0aWVzO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChJRSA8PSA4ICYmICFpc0pRdWVyeSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJWZWxvY2l0eTogSUU4IGFuZCBiZWxvdyByZXF1aXJlIGpRdWVyeSB0byBiZSBsb2FkZWQgYmVmb3JlIFZlbG9jaXR5LlwiKTtcclxuXHRcdH0gZWxzZSBpZiAoSUUgPD0gNykge1xyXG5cdFx0XHQvKiBSZXZlcnQgdG8galF1ZXJ5J3MgJC5hbmltYXRlKCksIGFuZCBsb3NlIFZlbG9jaXR5J3MgZXh0cmEgZmVhdHVyZXMuICovXHJcblx0XHRcdGpRdWVyeS5mbi52ZWxvY2l0eSA9IGpRdWVyeS5mbi5hbmltYXRlO1xyXG5cclxuXHRcdFx0LyogTm93IHRoYXQgJC5mbi52ZWxvY2l0eSBpcyBhbGlhc2VkLCBhYm9ydCB0aGlzIFZlbG9jaXR5IGRlY2xhcmF0aW9uLiAqL1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqKioqKioqKioqKioqKioqXHJcblx0XHQgQ29uc3RhbnRzXHJcblx0XHQgKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0dmFyIERVUkFUSU9OX0RFRkFVTFQgPSA0MDAsXHJcblx0XHRcdFx0RUFTSU5HX0RFRkFVTFQgPSBcInN3aW5nXCI7XHJcblxyXG5cdFx0LyoqKioqKioqKioqKipcclxuXHRcdCBTdGF0ZVxyXG5cdFx0ICoqKioqKioqKioqKiovXHJcblxyXG5cdFx0dmFyIFZlbG9jaXR5ID0ge1xyXG5cdFx0XHQvKiBDb250YWluZXIgZm9yIHBhZ2Utd2lkZSBWZWxvY2l0eSBzdGF0ZSBkYXRhLiAqL1xyXG5cdFx0XHRTdGF0ZToge1xyXG5cdFx0XHRcdC8qIERldGVjdCBtb2JpbGUgZGV2aWNlcyB0byBkZXRlcm1pbmUgaWYgbW9iaWxlSEEgc2hvdWxkIGJlIHR1cm5lZCBvbi4gKi9cclxuXHRcdFx0XHRpc01vYmlsZTogL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSxcclxuXHRcdFx0XHQvKiBUaGUgbW9iaWxlSEEgb3B0aW9uJ3MgYmVoYXZpb3IgY2hhbmdlcyBvbiBvbGRlciBBbmRyb2lkIGRldmljZXMgKEdpbmdlcmJyZWFkLCB2ZXJzaW9ucyAyLjMuMy0yLjMuNykuICovXHJcblx0XHRcdFx0aXNBbmRyb2lkOiAvQW5kcm9pZC9pLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpLFxyXG5cdFx0XHRcdGlzR2luZ2VyYnJlYWQ6IC9BbmRyb2lkIDJcXC4zXFwuWzMtN10vaS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSxcclxuXHRcdFx0XHRpc0Nocm9tZTogd2luZG93LmNocm9tZSxcclxuXHRcdFx0XHRpc0ZpcmVmb3g6IC9GaXJlZm94L2kudGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCksXHJcblx0XHRcdFx0LyogQ3JlYXRlIGEgY2FjaGVkIGVsZW1lbnQgZm9yIHJlLXVzZSB3aGVuIGNoZWNraW5nIGZvciBDU1MgcHJvcGVydHkgcHJlZml4ZXMuICovXHJcblx0XHRcdFx0cHJlZml4RWxlbWVudDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxcclxuXHRcdFx0XHQvKiBDYWNoZSBldmVyeSBwcmVmaXggbWF0Y2ggdG8gYXZvaWQgcmVwZWF0aW5nIGxvb2t1cHMuICovXHJcblx0XHRcdFx0cHJlZml4TWF0Y2hlczoge30sXHJcblx0XHRcdFx0LyogQ2FjaGUgdGhlIGFuY2hvciB1c2VkIGZvciBhbmltYXRpbmcgd2luZG93IHNjcm9sbGluZy4gKi9cclxuXHRcdFx0XHRzY3JvbGxBbmNob3I6IG51bGwsXHJcblx0XHRcdFx0LyogQ2FjaGUgdGhlIGJyb3dzZXItc3BlY2lmaWMgcHJvcGVydHkgbmFtZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzY3JvbGwgYW5jaG9yLiAqL1xyXG5cdFx0XHRcdHNjcm9sbFByb3BlcnR5TGVmdDogbnVsbCxcclxuXHRcdFx0XHRzY3JvbGxQcm9wZXJ0eVRvcDogbnVsbCxcclxuXHRcdFx0XHQvKiBLZWVwIHRyYWNrIG9mIHdoZXRoZXIgb3VyIFJBRiB0aWNrIGlzIHJ1bm5pbmcuICovXHJcblx0XHRcdFx0aXNUaWNraW5nOiBmYWxzZSxcclxuXHRcdFx0XHQvKiBDb250YWluZXIgZm9yIGV2ZXJ5IGluLXByb2dyZXNzIGNhbGwgdG8gVmVsb2NpdHkuICovXHJcblx0XHRcdFx0Y2FsbHM6IFtdLFxyXG5cdFx0XHRcdGRlbGF5ZWRFbGVtZW50czoge1xyXG5cdFx0XHRcdFx0Y291bnQ6IDBcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdC8qIFZlbG9jaXR5J3MgY3VzdG9tIENTUyBzdGFjay4gTWFkZSBnbG9iYWwgZm9yIHVuaXQgdGVzdGluZy4gKi9cclxuXHRcdFx0Q1NTOiB7LyogRGVmaW5lZCBiZWxvdy4gKi99LFxyXG5cdFx0XHQvKiBBIHNoaW0gb2YgdGhlIGpRdWVyeSB1dGlsaXR5IGZ1bmN0aW9ucyB1c2VkIGJ5IFZlbG9jaXR5IC0tIHByb3ZpZGVkIGJ5IFZlbG9jaXR5J3Mgb3B0aW9uYWwgalF1ZXJ5IHNoaW0uICovXHJcblx0XHRcdFV0aWxpdGllczogJCxcclxuXHRcdFx0LyogQ29udGFpbmVyIGZvciB0aGUgdXNlcidzIGN1c3RvbSBhbmltYXRpb24gcmVkaXJlY3RzIHRoYXQgYXJlIHJlZmVyZW5jZWQgYnkgbmFtZSBpbiBwbGFjZSBvZiB0aGUgcHJvcGVydGllcyBtYXAgYXJndW1lbnQuICovXHJcblx0XHRcdFJlZGlyZWN0czogey8qIE1hbnVhbGx5IHJlZ2lzdGVyZWQgYnkgdGhlIHVzZXIuICovfSxcclxuXHRcdFx0RWFzaW5nczogey8qIERlZmluZWQgYmVsb3cuICovfSxcclxuXHRcdFx0LyogQXR0ZW1wdCB0byB1c2UgRVM2IFByb21pc2VzIGJ5IGRlZmF1bHQuIFVzZXJzIGNhbiBvdmVycmlkZSB0aGlzIHdpdGggYSB0aGlyZC1wYXJ0eSBwcm9taXNlcyBsaWJyYXJ5LiAqL1xyXG5cdFx0XHRQcm9taXNlOiB3aW5kb3cuUHJvbWlzZSxcclxuXHRcdFx0LyogVmVsb2NpdHkgb3B0aW9uIGRlZmF1bHRzLCB3aGljaCBjYW4gYmUgb3ZlcnJpZGVuIGJ5IHRoZSB1c2VyLiAqL1xyXG5cdFx0XHRkZWZhdWx0czoge1xyXG5cdFx0XHRcdHF1ZXVlOiBcIlwiLFxyXG5cdFx0XHRcdGR1cmF0aW9uOiBEVVJBVElPTl9ERUZBVUxULFxyXG5cdFx0XHRcdGVhc2luZzogRUFTSU5HX0RFRkFVTFQsXHJcblx0XHRcdFx0YmVnaW46IHVuZGVmaW5lZCxcclxuXHRcdFx0XHRjb21wbGV0ZTogdW5kZWZpbmVkLFxyXG5cdFx0XHRcdHByb2dyZXNzOiB1bmRlZmluZWQsXHJcblx0XHRcdFx0ZGlzcGxheTogdW5kZWZpbmVkLFxyXG5cdFx0XHRcdHZpc2liaWxpdHk6IHVuZGVmaW5lZCxcclxuXHRcdFx0XHRsb29wOiBmYWxzZSxcclxuXHRcdFx0XHRkZWxheTogZmFsc2UsXHJcblx0XHRcdFx0bW9iaWxlSEE6IHRydWUsXHJcblx0XHRcdFx0LyogQWR2YW5jZWQ6IFNldCB0byBmYWxzZSB0byBwcmV2ZW50IHByb3BlcnR5IHZhbHVlcyBmcm9tIGJlaW5nIGNhY2hlZCBiZXR3ZWVuIGNvbnNlY3V0aXZlIFZlbG9jaXR5LWluaXRpYXRlZCBjaGFpbiBjYWxscy4gKi9cclxuXHRcdFx0XHRfY2FjaGVWYWx1ZXM6IHRydWUsXHJcblx0XHRcdFx0LyogQWR2YW5jZWQ6IFNldCB0byBmYWxzZSBpZiB0aGUgcHJvbWlzZSBzaG91bGQgYWx3YXlzIHJlc29sdmUgb24gZW1wdHkgZWxlbWVudCBsaXN0cy4gKi9cclxuXHRcdFx0XHRwcm9taXNlUmVqZWN0RW1wdHk6IHRydWVcclxuXHRcdFx0fSxcclxuXHRcdFx0LyogQSBkZXNpZ24gZ29hbCBvZiBWZWxvY2l0eSBpcyB0byBjYWNoZSBkYXRhIHdoZXJldmVyIHBvc3NpYmxlIGluIG9yZGVyIHRvIGF2b2lkIERPTSByZXF1ZXJ5aW5nLiBBY2NvcmRpbmdseSwgZWFjaCBlbGVtZW50IGhhcyBhIGRhdGEgY2FjaGUuICovXHJcblx0XHRcdGluaXQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuXHRcdFx0XHQkLmRhdGEoZWxlbWVudCwgXCJ2ZWxvY2l0eVwiLCB7XHJcblx0XHRcdFx0XHQvKiBTdG9yZSB3aGV0aGVyIHRoaXMgaXMgYW4gU1ZHIGVsZW1lbnQsIHNpbmNlIGl0cyBwcm9wZXJ0aWVzIGFyZSByZXRyaWV2ZWQgYW5kIHVwZGF0ZWQgZGlmZmVyZW50bHkgdGhhbiBzdGFuZGFyZCBIVE1MIGVsZW1lbnRzLiAqL1xyXG5cdFx0XHRcdFx0aXNTVkc6IFR5cGUuaXNTVkcoZWxlbWVudCksXHJcblx0XHRcdFx0XHQvKiBLZWVwIHRyYWNrIG9mIHdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgY3VycmVudGx5IGJlaW5nIGFuaW1hdGVkIGJ5IFZlbG9jaXR5LlxyXG5cdFx0XHRcdFx0IFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgdGhhdCBwcm9wZXJ0eSB2YWx1ZXMgYXJlIG5vdCB0cmFuc2ZlcnJlZCBiZXR3ZWVuIG5vbi1jb25zZWN1dGl2ZSAoc3RhbGUpIGNhbGxzLiAqL1xyXG5cdFx0XHRcdFx0aXNBbmltYXRpbmc6IGZhbHNlLFxyXG5cdFx0XHRcdFx0LyogQSByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQncyBsaXZlIGNvbXB1dGVkU3R5bGUgb2JqZWN0LiBMZWFybiBtb3JlIGhlcmU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0FQSS93aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSAqL1xyXG5cdFx0XHRcdFx0Y29tcHV0ZWRTdHlsZTogbnVsbCxcclxuXHRcdFx0XHRcdC8qIFR3ZWVuIGRhdGEgaXMgY2FjaGVkIGZvciBlYWNoIGFuaW1hdGlvbiBvbiB0aGUgZWxlbWVudCBzbyB0aGF0IGRhdGEgY2FuIGJlIHBhc3NlZCBhY3Jvc3MgY2FsbHMgLS1cclxuXHRcdFx0XHRcdCBpbiBwYXJ0aWN1bGFyLCBlbmQgdmFsdWVzIGFyZSB1c2VkIGFzIHN1YnNlcXVlbnQgc3RhcnQgdmFsdWVzIGluIGNvbnNlY3V0aXZlIFZlbG9jaXR5IGNhbGxzLiAqL1xyXG5cdFx0XHRcdFx0dHdlZW5zQ29udGFpbmVyOiBudWxsLFxyXG5cdFx0XHRcdFx0LyogVGhlIGZ1bGwgcm9vdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgZWFjaCBDU1MgaG9vayBiZWluZyBhbmltYXRlZCBvbiB0aGlzIGVsZW1lbnQgYXJlIGNhY2hlZCBzbyB0aGF0OlxyXG5cdFx0XHRcdFx0IDEpIENvbmN1cnJlbnRseS1hbmltYXRpbmcgaG9va3Mgc2hhcmluZyB0aGUgc2FtZSByb290IGNhbiBoYXZlIHRoZWlyIHJvb3QgdmFsdWVzJyBtZXJnZWQgaW50byBvbmUgd2hpbGUgdHdlZW5pbmcuXHJcblx0XHRcdFx0XHQgMikgUG9zdC1ob29rLWluamVjdGlvbiByb290IHZhbHVlcyBjYW4gYmUgdHJhbnNmZXJyZWQgb3ZlciB0byBjb25zZWN1dGl2ZWx5IGNoYWluZWQgVmVsb2NpdHkgY2FsbHMgYXMgc3RhcnRpbmcgcm9vdCB2YWx1ZXMuICovXHJcblx0XHRcdFx0XHRyb290UHJvcGVydHlWYWx1ZUNhY2hlOiB7fSxcclxuXHRcdFx0XHRcdC8qIEEgY2FjaGUgZm9yIHRyYW5zZm9ybSB1cGRhdGVzLCB3aGljaCBtdXN0IGJlIG1hbnVhbGx5IGZsdXNoZWQgdmlhIENTUy5mbHVzaFRyYW5zZm9ybUNhY2hlKCkuICovXHJcblx0XHRcdFx0XHR0cmFuc2Zvcm1DYWNoZToge31cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0LyogQSBwYXJhbGxlbCB0byBqUXVlcnkncyAkLmNzcygpLCB1c2VkIGZvciBnZXR0aW5nL3NldHRpbmcgVmVsb2NpdHkncyBob29rZWQgQ1NTIHByb3BlcnRpZXMuICovXHJcblx0XHRcdGhvb2s6IG51bGwsIC8qIERlZmluZWQgYmVsb3cuICovXHJcblx0XHRcdC8qIFZlbG9jaXR5LXdpZGUgYW5pbWF0aW9uIHRpbWUgcmVtYXBwaW5nIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiAqL1xyXG5cdFx0XHRtb2NrOiBmYWxzZSxcclxuXHRcdFx0dmVyc2lvbjoge21ham9yOiAxLCBtaW5vcjogNSwgcGF0Y2g6IDJ9LFxyXG5cdFx0XHQvKiBTZXQgdG8gMSBvciAyIChtb3N0IHZlcmJvc2UpIHRvIG91dHB1dCBkZWJ1ZyBpbmZvIHRvIGNvbnNvbGUuICovXHJcblx0XHRcdGRlYnVnOiBmYWxzZSxcclxuXHRcdFx0LyogVXNlIHJBRiBoaWdoIHJlc29sdXRpb24gdGltZXN0YW1wIHdoZW4gYXZhaWxhYmxlICovXHJcblx0XHRcdHRpbWVzdGFtcDogdHJ1ZSxcclxuXHRcdFx0LyogUGF1c2UgYWxsIGFuaW1hdGlvbnMgKi9cclxuXHRcdFx0cGF1c2VBbGw6IGZ1bmN0aW9uKHF1ZXVlTmFtZSkge1xyXG5cdFx0XHRcdHZhciBjdXJyZW50VGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XHJcblxyXG5cdFx0XHRcdCQuZWFjaChWZWxvY2l0eS5TdGF0ZS5jYWxscywgZnVuY3Rpb24oaSwgYWN0aXZlQ2FsbCkge1xyXG5cclxuXHRcdFx0XHRcdGlmIChhY3RpdmVDYWxsKSB7XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBJZiB3ZSBoYXZlIGEgcXVldWVOYW1lIGFuZCB0aGlzIGNhbGwgaXMgbm90IG9uIHRoYXQgcXVldWUsIHNraXAgKi9cclxuXHRcdFx0XHRcdFx0aWYgKHF1ZXVlTmFtZSAhPT0gdW5kZWZpbmVkICYmICgoYWN0aXZlQ2FsbFsyXS5xdWV1ZSAhPT0gcXVldWVOYW1lKSB8fCAoYWN0aXZlQ2FsbFsyXS5xdWV1ZSA9PT0gZmFsc2UpKSkge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBTZXQgY2FsbCB0byBwYXVzZWQgKi9cclxuXHRcdFx0XHRcdFx0YWN0aXZlQ2FsbFs1XSA9IHtcclxuXHRcdFx0XHRcdFx0XHRyZXN1bWU6IGZhbHNlXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdC8qIFBhdXNlIHRpbWVycyBvbiBhbnkgY3VycmVudGx5IGRlbGF5ZWQgY2FsbHMgKi9cclxuXHRcdFx0XHQkLmVhY2goVmVsb2NpdHkuU3RhdGUuZGVsYXllZEVsZW1lbnRzLCBmdW5jdGlvbihrLCBlbGVtZW50KSB7XHJcblx0XHRcdFx0XHRpZiAoIWVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cGF1c2VEZWxheU9uRWxlbWVudChlbGVtZW50LCBjdXJyZW50VGltZSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdC8qIFJlc3VtZSBhbGwgYW5pbWF0aW9ucyAqL1xyXG5cdFx0XHRyZXN1bWVBbGw6IGZ1bmN0aW9uKHF1ZXVlTmFtZSkge1xyXG5cdFx0XHRcdHZhciBjdXJyZW50VGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XHJcblxyXG5cdFx0XHRcdCQuZWFjaChWZWxvY2l0eS5TdGF0ZS5jYWxscywgZnVuY3Rpb24oaSwgYWN0aXZlQ2FsbCkge1xyXG5cclxuXHRcdFx0XHRcdGlmIChhY3RpdmVDYWxsKSB7XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBJZiB3ZSBoYXZlIGEgcXVldWVOYW1lIGFuZCB0aGlzIGNhbGwgaXMgbm90IG9uIHRoYXQgcXVldWUsIHNraXAgKi9cclxuXHRcdFx0XHRcdFx0aWYgKHF1ZXVlTmFtZSAhPT0gdW5kZWZpbmVkICYmICgoYWN0aXZlQ2FsbFsyXS5xdWV1ZSAhPT0gcXVldWVOYW1lKSB8fCAoYWN0aXZlQ2FsbFsyXS5xdWV1ZSA9PT0gZmFsc2UpKSkge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBTZXQgY2FsbCB0byByZXN1bWVkIGlmIGl0IHdhcyBwYXVzZWQgKi9cclxuXHRcdFx0XHRcdFx0aWYgKGFjdGl2ZUNhbGxbNV0pIHtcclxuXHRcdFx0XHRcdFx0XHRhY3RpdmVDYWxsWzVdLnJlc3VtZSA9IHRydWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHQvKiBSZXN1bWUgdGltZXJzIG9uIGFueSBjdXJyZW50bHkgZGVsYXllZCBjYWxscyAqL1xyXG5cdFx0XHRcdCQuZWFjaChWZWxvY2l0eS5TdGF0ZS5kZWxheWVkRWxlbWVudHMsIGZ1bmN0aW9uKGssIGVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdGlmICghZWxlbWVudCkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXN1bWVEZWxheU9uRWxlbWVudChlbGVtZW50LCBjdXJyZW50VGltZSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblxyXG5cdFx0LyogUmV0cmlldmUgdGhlIGFwcHJvcHJpYXRlIHNjcm9sbCBhbmNob3IgYW5kIHByb3BlcnR5IG5hbWUgZm9yIHRoZSBicm93c2VyOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93LnNjcm9sbFkgKi9cclxuXHRcdGlmICh3aW5kb3cucGFnZVlPZmZzZXQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRWZWxvY2l0eS5TdGF0ZS5zY3JvbGxBbmNob3IgPSB3aW5kb3c7XHJcblx0XHRcdFZlbG9jaXR5LlN0YXRlLnNjcm9sbFByb3BlcnR5TGVmdCA9IFwicGFnZVhPZmZzZXRcIjtcclxuXHRcdFx0VmVsb2NpdHkuU3RhdGUuc2Nyb2xsUHJvcGVydHlUb3AgPSBcInBhZ2VZT2Zmc2V0XCI7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRWZWxvY2l0eS5TdGF0ZS5zY3JvbGxBbmNob3IgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlIHx8IGRvY3VtZW50LmJvZHk7XHJcblx0XHRcdFZlbG9jaXR5LlN0YXRlLnNjcm9sbFByb3BlcnR5TGVmdCA9IFwic2Nyb2xsTGVmdFwiO1xyXG5cdFx0XHRWZWxvY2l0eS5TdGF0ZS5zY3JvbGxQcm9wZXJ0eVRvcCA9IFwic2Nyb2xsVG9wXCI7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogU2hvcnRoYW5kIGFsaWFzIGZvciBqUXVlcnkncyAkLmRhdGEoKSB1dGlsaXR5LiAqL1xyXG5cdFx0ZnVuY3Rpb24gRGF0YShlbGVtZW50KSB7XHJcblx0XHRcdC8qIEhhcmRjb2RlIGEgcmVmZXJlbmNlIHRvIHRoZSBwbHVnaW4gbmFtZS4gKi9cclxuXHRcdFx0dmFyIHJlc3BvbnNlID0gJC5kYXRhKGVsZW1lbnQsIFwidmVsb2NpdHlcIik7XHJcblxyXG5cdFx0XHQvKiBqUXVlcnkgPD0xLjQuMiByZXR1cm5zIG51bGwgaW5zdGVhZCBvZiB1bmRlZmluZWQgd2hlbiBubyBtYXRjaCBpcyBmb3VuZC4gV2Ugbm9ybWFsaXplIHRoaXMgYmVoYXZpb3IuICovXHJcblx0XHRcdHJldHVybiByZXNwb25zZSA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJlc3BvbnNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKioqKioqKioqKioqKlxyXG5cdFx0IERlbGF5IFRpbWVyXHJcblx0XHQgKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0ZnVuY3Rpb24gcGF1c2VEZWxheU9uRWxlbWVudChlbGVtZW50LCBjdXJyZW50VGltZSkge1xyXG5cdFx0XHQvKiBDaGVjayBmb3IgYW55IGRlbGF5IHRpbWVycywgYW5kIHBhdXNlIHRoZSBzZXQgdGltZW91dHMgKHdoaWxlIHByZXNlcnZpbmcgdGltZSBkYXRhKVxyXG5cdFx0XHQgdG8gYmUgcmVzdW1lZCB3aGVuIHRoZSBcInJlc3VtZVwiIGNvbW1hbmQgaXMgaXNzdWVkICovXHJcblx0XHRcdHZhciBkYXRhID0gRGF0YShlbGVtZW50KTtcclxuXHRcdFx0aWYgKGRhdGEgJiYgZGF0YS5kZWxheVRpbWVyICYmICFkYXRhLmRlbGF5UGF1c2VkKSB7XHJcblx0XHRcdFx0ZGF0YS5kZWxheVJlbWFpbmluZyA9IGRhdGEuZGVsYXkgLSBjdXJyZW50VGltZSArIGRhdGEuZGVsYXlCZWdpbjtcclxuXHRcdFx0XHRkYXRhLmRlbGF5UGF1c2VkID0gdHJ1ZTtcclxuXHRcdFx0XHRjbGVhclRpbWVvdXQoZGF0YS5kZWxheVRpbWVyLnNldFRpbWVvdXQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0ZnVuY3Rpb24gcmVzdW1lRGVsYXlPbkVsZW1lbnQoZWxlbWVudCwgY3VycmVudFRpbWUpIHtcclxuXHRcdFx0LyogQ2hlY2sgZm9yIGFueSBwYXVzZWQgdGltZXJzIGFuZCByZXN1bWUgKi9cclxuXHRcdFx0dmFyIGRhdGEgPSBEYXRhKGVsZW1lbnQpO1xyXG5cdFx0XHRpZiAoZGF0YSAmJiBkYXRhLmRlbGF5VGltZXIgJiYgZGF0YS5kZWxheVBhdXNlZCkge1xyXG5cdFx0XHRcdC8qIElmIHRoZSBlbGVtZW50IHdhcyBtaWQtZGVsYXksIHJlIGluaXRpYXRlIHRoZSB0aW1lb3V0IHdpdGggdGhlIHJlbWFpbmluZyBkZWxheSAqL1xyXG5cdFx0XHRcdGRhdGEuZGVsYXlQYXVzZWQgPSBmYWxzZTtcclxuXHRcdFx0XHRkYXRhLmRlbGF5VGltZXIuc2V0VGltZW91dCA9IHNldFRpbWVvdXQoZGF0YS5kZWxheVRpbWVyLm5leHQsIGRhdGEuZGVsYXlSZW1haW5pbmcpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cclxuXHJcblx0XHQvKioqKioqKioqKioqKipcclxuXHRcdCBFYXNpbmdcclxuXHRcdCAqKioqKioqKioqKioqKi9cclxuXHJcblx0XHQvKiBTdGVwIGVhc2luZyBnZW5lcmF0b3IuICovXHJcblx0XHRmdW5jdGlvbiBnZW5lcmF0ZVN0ZXAoc3RlcHMpIHtcclxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKHApIHtcclxuXHRcdFx0XHRyZXR1cm4gTWF0aC5yb3VuZChwICogc3RlcHMpICogKDEgLyBzdGVwcyk7XHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdFx0LyogQmV6aWVyIGN1cnZlIGZ1bmN0aW9uIGdlbmVyYXRvci4gQ29weXJpZ2h0IEdhZXRhbiBSZW5hdWRlYXUuIE1JVCBMaWNlbnNlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01JVF9MaWNlbnNlICovXHJcblx0XHRmdW5jdGlvbiBnZW5lcmF0ZUJlemllcihtWDEsIG1ZMSwgbVgyLCBtWTIpIHtcclxuXHRcdFx0dmFyIE5FV1RPTl9JVEVSQVRJT05TID0gNCxcclxuXHRcdFx0XHRcdE5FV1RPTl9NSU5fU0xPUEUgPSAwLjAwMSxcclxuXHRcdFx0XHRcdFNVQkRJVklTSU9OX1BSRUNJU0lPTiA9IDAuMDAwMDAwMSxcclxuXHRcdFx0XHRcdFNVQkRJVklTSU9OX01BWF9JVEVSQVRJT05TID0gMTAsXHJcblx0XHRcdFx0XHRrU3BsaW5lVGFibGVTaXplID0gMTEsXHJcblx0XHRcdFx0XHRrU2FtcGxlU3RlcFNpemUgPSAxLjAgLyAoa1NwbGluZVRhYmxlU2l6ZSAtIDEuMCksXHJcblx0XHRcdFx0XHRmbG9hdDMyQXJyYXlTdXBwb3J0ZWQgPSBcIkZsb2F0MzJBcnJheVwiIGluIHdpbmRvdztcclxuXHJcblx0XHRcdC8qIE11c3QgY29udGFpbiBmb3VyIGFyZ3VtZW50cy4gKi9cclxuXHRcdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggIT09IDQpIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qIEFyZ3VtZW50cyBtdXN0IGJlIG51bWJlcnMuICovXHJcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgNDsgKytpKSB7XHJcblx0XHRcdFx0aWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gIT09IFwibnVtYmVyXCIgfHwgaXNOYU4oYXJndW1lbnRzW2ldKSB8fCAhaXNGaW5pdGUoYXJndW1lbnRzW2ldKSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogWCB2YWx1ZXMgbXVzdCBiZSBpbiB0aGUgWzAsIDFdIHJhbmdlLiAqL1xyXG5cdFx0XHRtWDEgPSBNYXRoLm1pbihtWDEsIDEpO1xyXG5cdFx0XHRtWDIgPSBNYXRoLm1pbihtWDIsIDEpO1xyXG5cdFx0XHRtWDEgPSBNYXRoLm1heChtWDEsIDApO1xyXG5cdFx0XHRtWDIgPSBNYXRoLm1heChtWDIsIDApO1xyXG5cclxuXHRcdFx0dmFyIG1TYW1wbGVWYWx1ZXMgPSBmbG9hdDMyQXJyYXlTdXBwb3J0ZWQgPyBuZXcgRmxvYXQzMkFycmF5KGtTcGxpbmVUYWJsZVNpemUpIDogbmV3IEFycmF5KGtTcGxpbmVUYWJsZVNpemUpO1xyXG5cclxuXHRcdFx0ZnVuY3Rpb24gQShhQTEsIGFBMikge1xyXG5cdFx0XHRcdHJldHVybiAxLjAgLSAzLjAgKiBhQTIgKyAzLjAgKiBhQTE7XHJcblx0XHRcdH1cclxuXHRcdFx0ZnVuY3Rpb24gQihhQTEsIGFBMikge1xyXG5cdFx0XHRcdHJldHVybiAzLjAgKiBhQTIgLSA2LjAgKiBhQTE7XHJcblx0XHRcdH1cclxuXHRcdFx0ZnVuY3Rpb24gQyhhQTEpIHtcclxuXHRcdFx0XHRyZXR1cm4gMy4wICogYUExO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmdW5jdGlvbiBjYWxjQmV6aWVyKGFULCBhQTEsIGFBMikge1xyXG5cdFx0XHRcdHJldHVybiAoKEEoYUExLCBhQTIpICogYVQgKyBCKGFBMSwgYUEyKSkgKiBhVCArIEMoYUExKSkgKiBhVDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZnVuY3Rpb24gZ2V0U2xvcGUoYVQsIGFBMSwgYUEyKSB7XHJcblx0XHRcdFx0cmV0dXJuIDMuMCAqIEEoYUExLCBhQTIpICogYVQgKiBhVCArIDIuMCAqIEIoYUExLCBhQTIpICogYVQgKyBDKGFBMSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZ1bmN0aW9uIG5ld3RvblJhcGhzb25JdGVyYXRlKGFYLCBhR3Vlc3NUKSB7XHJcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBORVdUT05fSVRFUkFUSU9OUzsgKytpKSB7XHJcblx0XHRcdFx0XHR2YXIgY3VycmVudFNsb3BlID0gZ2V0U2xvcGUoYUd1ZXNzVCwgbVgxLCBtWDIpO1xyXG5cclxuXHRcdFx0XHRcdGlmIChjdXJyZW50U2xvcGUgPT09IDAuMCkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gYUd1ZXNzVDtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR2YXIgY3VycmVudFggPSBjYWxjQmV6aWVyKGFHdWVzc1QsIG1YMSwgbVgyKSAtIGFYO1xyXG5cdFx0XHRcdFx0YUd1ZXNzVCAtPSBjdXJyZW50WCAvIGN1cnJlbnRTbG9wZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiBhR3Vlc3NUO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmdW5jdGlvbiBjYWxjU2FtcGxlVmFsdWVzKCkge1xyXG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwga1NwbGluZVRhYmxlU2l6ZTsgKytpKSB7XHJcblx0XHRcdFx0XHRtU2FtcGxlVmFsdWVzW2ldID0gY2FsY0JlemllcihpICoga1NhbXBsZVN0ZXBTaXplLCBtWDEsIG1YMik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmdW5jdGlvbiBiaW5hcnlTdWJkaXZpZGUoYVgsIGFBLCBhQikge1xyXG5cdFx0XHRcdHZhciBjdXJyZW50WCwgY3VycmVudFQsIGkgPSAwO1xyXG5cclxuXHRcdFx0XHRkbyB7XHJcblx0XHRcdFx0XHRjdXJyZW50VCA9IGFBICsgKGFCIC0gYUEpIC8gMi4wO1xyXG5cdFx0XHRcdFx0Y3VycmVudFggPSBjYWxjQmV6aWVyKGN1cnJlbnRULCBtWDEsIG1YMikgLSBhWDtcclxuXHRcdFx0XHRcdGlmIChjdXJyZW50WCA+IDAuMCkge1xyXG5cdFx0XHRcdFx0XHRhQiA9IGN1cnJlbnRUO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0YUEgPSBjdXJyZW50VDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IHdoaWxlIChNYXRoLmFicyhjdXJyZW50WCkgPiBTVUJESVZJU0lPTl9QUkVDSVNJT04gJiYgKytpIDwgU1VCRElWSVNJT05fTUFYX0lURVJBVElPTlMpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gY3VycmVudFQ7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZ1bmN0aW9uIGdldFRGb3JYKGFYKSB7XHJcblx0XHRcdFx0dmFyIGludGVydmFsU3RhcnQgPSAwLjAsXHJcblx0XHRcdFx0XHRcdGN1cnJlbnRTYW1wbGUgPSAxLFxyXG5cdFx0XHRcdFx0XHRsYXN0U2FtcGxlID0ga1NwbGluZVRhYmxlU2l6ZSAtIDE7XHJcblxyXG5cdFx0XHRcdGZvciAoOyBjdXJyZW50U2FtcGxlICE9PSBsYXN0U2FtcGxlICYmIG1TYW1wbGVWYWx1ZXNbY3VycmVudFNhbXBsZV0gPD0gYVg7ICsrY3VycmVudFNhbXBsZSkge1xyXG5cdFx0XHRcdFx0aW50ZXJ2YWxTdGFydCArPSBrU2FtcGxlU3RlcFNpemU7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQtLWN1cnJlbnRTYW1wbGU7XHJcblxyXG5cdFx0XHRcdHZhciBkaXN0ID0gKGFYIC0gbVNhbXBsZVZhbHVlc1tjdXJyZW50U2FtcGxlXSkgLyAobVNhbXBsZVZhbHVlc1tjdXJyZW50U2FtcGxlICsgMV0gLSBtU2FtcGxlVmFsdWVzW2N1cnJlbnRTYW1wbGVdKSxcclxuXHRcdFx0XHRcdFx0Z3Vlc3NGb3JUID0gaW50ZXJ2YWxTdGFydCArIGRpc3QgKiBrU2FtcGxlU3RlcFNpemUsXHJcblx0XHRcdFx0XHRcdGluaXRpYWxTbG9wZSA9IGdldFNsb3BlKGd1ZXNzRm9yVCwgbVgxLCBtWDIpO1xyXG5cclxuXHRcdFx0XHRpZiAoaW5pdGlhbFNsb3BlID49IE5FV1RPTl9NSU5fU0xPUEUpIHtcclxuXHRcdFx0XHRcdHJldHVybiBuZXd0b25SYXBoc29uSXRlcmF0ZShhWCwgZ3Vlc3NGb3JUKTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKGluaXRpYWxTbG9wZSA9PT0gMC4wKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gZ3Vlc3NGb3JUO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gYmluYXJ5U3ViZGl2aWRlKGFYLCBpbnRlcnZhbFN0YXJ0LCBpbnRlcnZhbFN0YXJ0ICsga1NhbXBsZVN0ZXBTaXplKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciBfcHJlY29tcHV0ZWQgPSBmYWxzZTtcclxuXHJcblx0XHRcdGZ1bmN0aW9uIHByZWNvbXB1dGUoKSB7XHJcblx0XHRcdFx0X3ByZWNvbXB1dGVkID0gdHJ1ZTtcclxuXHRcdFx0XHRpZiAobVgxICE9PSBtWTEgfHwgbVgyICE9PSBtWTIpIHtcclxuXHRcdFx0XHRcdGNhbGNTYW1wbGVWYWx1ZXMoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciBmID0gZnVuY3Rpb24oYVgpIHtcclxuXHRcdFx0XHRpZiAoIV9wcmVjb21wdXRlZCkge1xyXG5cdFx0XHRcdFx0cHJlY29tcHV0ZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAobVgxID09PSBtWTEgJiYgbVgyID09PSBtWTIpIHtcclxuXHRcdFx0XHRcdHJldHVybiBhWDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGFYID09PSAwKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gMDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGFYID09PSAxKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gMTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiBjYWxjQmV6aWVyKGdldFRGb3JYKGFYKSwgbVkxLCBtWTIpO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0Zi5nZXRDb250cm9sUG9pbnRzID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0cmV0dXJuIFt7eDogbVgxLCB5OiBtWTF9LCB7eDogbVgyLCB5OiBtWTJ9XTtcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdHZhciBzdHIgPSBcImdlbmVyYXRlQmV6aWVyKFwiICsgW21YMSwgbVkxLCBtWDIsIG1ZMl0gKyBcIilcIjtcclxuXHRcdFx0Zi50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHJldHVybiBzdHI7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRyZXR1cm4gZjtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBSdW5nZS1LdXR0YSBzcHJpbmcgcGh5c2ljcyBmdW5jdGlvbiBnZW5lcmF0b3IuIEFkYXB0ZWQgZnJvbSBGcmFtZXIuanMsIGNvcHlyaWdodCBLb2VuIEJvay4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKi9cclxuXHRcdC8qIEdpdmVuIGEgdGVuc2lvbiwgZnJpY3Rpb24sIGFuZCBkdXJhdGlvbiwgYSBzaW11bGF0aW9uIGF0IDYwRlBTIHdpbGwgZmlyc3QgcnVuIHdpdGhvdXQgYSBkZWZpbmVkIGR1cmF0aW9uIGluIG9yZGVyIHRvIGNhbGN1bGF0ZSB0aGUgZnVsbCBwYXRoLiBBIHNlY29uZCBwYXNzXHJcblx0XHQgdGhlbiBhZGp1c3RzIHRoZSB0aW1lIGRlbHRhIC0tIHVzaW5nIHRoZSByZWxhdGlvbiBiZXR3ZWVuIGFjdHVhbCB0aW1lIGFuZCBkdXJhdGlvbiAtLSB0byBjYWxjdWxhdGUgdGhlIHBhdGggZm9yIHRoZSBkdXJhdGlvbi1jb25zdHJhaW5lZCBhbmltYXRpb24uICovXHJcblx0XHR2YXIgZ2VuZXJhdGVTcHJpbmdSSzQgPSAoZnVuY3Rpb24oKSB7XHJcblx0XHRcdGZ1bmN0aW9uIHNwcmluZ0FjY2VsZXJhdGlvbkZvclN0YXRlKHN0YXRlKSB7XHJcblx0XHRcdFx0cmV0dXJuICgtc3RhdGUudGVuc2lvbiAqIHN0YXRlLngpIC0gKHN0YXRlLmZyaWN0aW9uICogc3RhdGUudik7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZ1bmN0aW9uIHNwcmluZ0V2YWx1YXRlU3RhdGVXaXRoRGVyaXZhdGl2ZShpbml0aWFsU3RhdGUsIGR0LCBkZXJpdmF0aXZlKSB7XHJcblx0XHRcdFx0dmFyIHN0YXRlID0ge1xyXG5cdFx0XHRcdFx0eDogaW5pdGlhbFN0YXRlLnggKyBkZXJpdmF0aXZlLmR4ICogZHQsXHJcblx0XHRcdFx0XHR2OiBpbml0aWFsU3RhdGUudiArIGRlcml2YXRpdmUuZHYgKiBkdCxcclxuXHRcdFx0XHRcdHRlbnNpb246IGluaXRpYWxTdGF0ZS50ZW5zaW9uLFxyXG5cdFx0XHRcdFx0ZnJpY3Rpb246IGluaXRpYWxTdGF0ZS5mcmljdGlvblxyXG5cdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdHJldHVybiB7ZHg6IHN0YXRlLnYsIGR2OiBzcHJpbmdBY2NlbGVyYXRpb25Gb3JTdGF0ZShzdGF0ZSl9O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmdW5jdGlvbiBzcHJpbmdJbnRlZ3JhdGVTdGF0ZShzdGF0ZSwgZHQpIHtcclxuXHRcdFx0XHR2YXIgYSA9IHtcclxuXHRcdFx0XHRcdGR4OiBzdGF0ZS52LFxyXG5cdFx0XHRcdFx0ZHY6IHNwcmluZ0FjY2VsZXJhdGlvbkZvclN0YXRlKHN0YXRlKVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdGIgPSBzcHJpbmdFdmFsdWF0ZVN0YXRlV2l0aERlcml2YXRpdmUoc3RhdGUsIGR0ICogMC41LCBhKSxcclxuXHRcdFx0XHRcdFx0YyA9IHNwcmluZ0V2YWx1YXRlU3RhdGVXaXRoRGVyaXZhdGl2ZShzdGF0ZSwgZHQgKiAwLjUsIGIpLFxyXG5cdFx0XHRcdFx0XHRkID0gc3ByaW5nRXZhbHVhdGVTdGF0ZVdpdGhEZXJpdmF0aXZlKHN0YXRlLCBkdCwgYyksXHJcblx0XHRcdFx0XHRcdGR4ZHQgPSAxLjAgLyA2LjAgKiAoYS5keCArIDIuMCAqIChiLmR4ICsgYy5keCkgKyBkLmR4KSxcclxuXHRcdFx0XHRcdFx0ZHZkdCA9IDEuMCAvIDYuMCAqIChhLmR2ICsgMi4wICogKGIuZHYgKyBjLmR2KSArIGQuZHYpO1xyXG5cclxuXHRcdFx0XHRzdGF0ZS54ID0gc3RhdGUueCArIGR4ZHQgKiBkdDtcclxuXHRcdFx0XHRzdGF0ZS52ID0gc3RhdGUudiArIGR2ZHQgKiBkdDtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHN0YXRlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gc3ByaW5nUks0RmFjdG9yeSh0ZW5zaW9uLCBmcmljdGlvbiwgZHVyYXRpb24pIHtcclxuXHJcblx0XHRcdFx0dmFyIGluaXRTdGF0ZSA9IHtcclxuXHRcdFx0XHRcdHg6IC0xLFxyXG5cdFx0XHRcdFx0djogMCxcclxuXHRcdFx0XHRcdHRlbnNpb246IG51bGwsXHJcblx0XHRcdFx0XHRmcmljdGlvbjogbnVsbFxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHBhdGggPSBbMF0sXHJcblx0XHRcdFx0XHRcdHRpbWVfbGFwc2VkID0gMCxcclxuXHRcdFx0XHRcdFx0dG9sZXJhbmNlID0gMSAvIDEwMDAwLFxyXG5cdFx0XHRcdFx0XHREVCA9IDE2IC8gMTAwMCxcclxuXHRcdFx0XHRcdFx0aGF2ZV9kdXJhdGlvbiwgZHQsIGxhc3Rfc3RhdGU7XHJcblxyXG5cdFx0XHRcdHRlbnNpb24gPSBwYXJzZUZsb2F0KHRlbnNpb24pIHx8IDUwMDtcclxuXHRcdFx0XHRmcmljdGlvbiA9IHBhcnNlRmxvYXQoZnJpY3Rpb24pIHx8IDIwO1xyXG5cdFx0XHRcdGR1cmF0aW9uID0gZHVyYXRpb24gfHwgbnVsbDtcclxuXHJcblx0XHRcdFx0aW5pdFN0YXRlLnRlbnNpb24gPSB0ZW5zaW9uO1xyXG5cdFx0XHRcdGluaXRTdGF0ZS5mcmljdGlvbiA9IGZyaWN0aW9uO1xyXG5cclxuXHRcdFx0XHRoYXZlX2R1cmF0aW9uID0gZHVyYXRpb24gIT09IG51bGw7XHJcblxyXG5cdFx0XHRcdC8qIENhbGN1bGF0ZSB0aGUgYWN0dWFsIHRpbWUgaXQgdGFrZXMgZm9yIHRoaXMgYW5pbWF0aW9uIHRvIGNvbXBsZXRlIHdpdGggdGhlIHByb3ZpZGVkIGNvbmRpdGlvbnMuICovXHJcblx0XHRcdFx0aWYgKGhhdmVfZHVyYXRpb24pIHtcclxuXHRcdFx0XHRcdC8qIFJ1biB0aGUgc2ltdWxhdGlvbiB3aXRob3V0IGEgZHVyYXRpb24uICovXHJcblx0XHRcdFx0XHR0aW1lX2xhcHNlZCA9IHNwcmluZ1JLNEZhY3RvcnkodGVuc2lvbiwgZnJpY3Rpb24pO1xyXG5cdFx0XHRcdFx0LyogQ29tcHV0ZSB0aGUgYWRqdXN0ZWQgdGltZSBkZWx0YS4gKi9cclxuXHRcdFx0XHRcdGR0ID0gdGltZV9sYXBzZWQgLyBkdXJhdGlvbiAqIERUO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRkdCA9IERUO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0d2hpbGUgKHRydWUpIHtcclxuXHRcdFx0XHRcdC8qIE5leHQvc3RlcCBmdW5jdGlvbiAuKi9cclxuXHRcdFx0XHRcdGxhc3Rfc3RhdGUgPSBzcHJpbmdJbnRlZ3JhdGVTdGF0ZShsYXN0X3N0YXRlIHx8IGluaXRTdGF0ZSwgZHQpO1xyXG5cdFx0XHRcdFx0LyogU3RvcmUgdGhlIHBvc2l0aW9uLiAqL1xyXG5cdFx0XHRcdFx0cGF0aC5wdXNoKDEgKyBsYXN0X3N0YXRlLngpO1xyXG5cdFx0XHRcdFx0dGltZV9sYXBzZWQgKz0gMTY7XHJcblx0XHRcdFx0XHQvKiBJZiB0aGUgY2hhbmdlIHRocmVzaG9sZCBpcyByZWFjaGVkLCBicmVhay4gKi9cclxuXHRcdFx0XHRcdGlmICghKE1hdGguYWJzKGxhc3Rfc3RhdGUueCkgPiB0b2xlcmFuY2UgJiYgTWF0aC5hYnMobGFzdF9zdGF0ZS52KSA+IHRvbGVyYW5jZSkpIHtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKiBJZiBkdXJhdGlvbiBpcyBub3QgZGVmaW5lZCwgcmV0dXJuIHRoZSBhY3R1YWwgdGltZSByZXF1aXJlZCBmb3IgY29tcGxldGluZyB0aGlzIGFuaW1hdGlvbi4gT3RoZXJ3aXNlLCByZXR1cm4gYSBjbG9zdXJlIHRoYXQgaG9sZHMgdGhlXHJcblx0XHRcdFx0IGNvbXB1dGVkIHBhdGggYW5kIHJldHVybnMgYSBzbmFwc2hvdCBvZiB0aGUgcG9zaXRpb24gYWNjb3JkaW5nIHRvIGEgZ2l2ZW4gcGVyY2VudENvbXBsZXRlLiAqL1xyXG5cdFx0XHRcdHJldHVybiAhaGF2ZV9kdXJhdGlvbiA/IHRpbWVfbGFwc2VkIDogZnVuY3Rpb24ocGVyY2VudENvbXBsZXRlKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gcGF0aFsgKHBlcmNlbnRDb21wbGV0ZSAqIChwYXRoLmxlbmd0aCAtIDEpKSB8IDAgXTtcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9O1xyXG5cdFx0fSgpKTtcclxuXHJcblx0XHQvKiBqUXVlcnkgZWFzaW5ncy4gKi9cclxuXHRcdFZlbG9jaXR5LkVhc2luZ3MgPSB7XHJcblx0XHRcdGxpbmVhcjogZnVuY3Rpb24ocCkge1xyXG5cdFx0XHRcdHJldHVybiBwO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRzd2luZzogZnVuY3Rpb24ocCkge1xyXG5cdFx0XHRcdHJldHVybiAwLjUgLSBNYXRoLmNvcyhwICogTWF0aC5QSSkgLyAyO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKiBCb251cyBcInNwcmluZ1wiIGVhc2luZywgd2hpY2ggaXMgYSBsZXNzIGV4YWdnZXJhdGVkIHZlcnNpb24gb2YgZWFzZUluT3V0RWxhc3RpYy4gKi9cclxuXHRcdFx0c3ByaW5nOiBmdW5jdGlvbihwKSB7XHJcblx0XHRcdFx0cmV0dXJuIDEgLSAoTWF0aC5jb3MocCAqIDQuNSAqIE1hdGguUEkpICogTWF0aC5leHAoLXAgKiA2KSk7XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblxyXG5cdFx0LyogQ1NTMyBhbmQgUm9iZXJ0IFBlbm5lciBlYXNpbmdzLiAqL1xyXG5cdFx0JC5lYWNoKFxyXG5cdFx0XHRcdFtcclxuXHRcdFx0XHRcdFtcImVhc2VcIiwgWzAuMjUsIDAuMSwgMC4yNSwgMS4wXV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlLWluXCIsIFswLjQyLCAwLjAsIDEuMDAsIDEuMF1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZS1vdXRcIiwgWzAuMDAsIDAuMCwgMC41OCwgMS4wXV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlLWluLW91dFwiLCBbMC40MiwgMC4wLCAwLjU4LCAxLjBdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VJblNpbmVcIiwgWzAuNDcsIDAsIDAuNzQ1LCAwLjcxNV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZU91dFNpbmVcIiwgWzAuMzksIDAuNTc1LCAwLjU2NSwgMV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZUluT3V0U2luZVwiLCBbMC40NDUsIDAuMDUsIDAuNTUsIDAuOTVdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VJblF1YWRcIiwgWzAuNTUsIDAuMDg1LCAwLjY4LCAwLjUzXV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlT3V0UXVhZFwiLCBbMC4yNSwgMC40NiwgMC40NSwgMC45NF1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZUluT3V0UXVhZFwiLCBbMC40NTUsIDAuMDMsIDAuNTE1LCAwLjk1NV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZUluQ3ViaWNcIiwgWzAuNTUsIDAuMDU1LCAwLjY3NSwgMC4xOV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZU91dEN1YmljXCIsIFswLjIxNSwgMC42MSwgMC4zNTUsIDFdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VJbk91dEN1YmljXCIsIFswLjY0NSwgMC4wNDUsIDAuMzU1LCAxXV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlSW5RdWFydFwiLCBbMC44OTUsIDAuMDMsIDAuNjg1LCAwLjIyXV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlT3V0UXVhcnRcIiwgWzAuMTY1LCAwLjg0LCAwLjQ0LCAxXV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlSW5PdXRRdWFydFwiLCBbMC43NywgMCwgMC4xNzUsIDFdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VJblF1aW50XCIsIFswLjc1NSwgMC4wNSwgMC44NTUsIDAuMDZdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VPdXRRdWludFwiLCBbMC4yMywgMSwgMC4zMiwgMV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZUluT3V0UXVpbnRcIiwgWzAuODYsIDAsIDAuMDcsIDFdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VJbkV4cG9cIiwgWzAuOTUsIDAuMDUsIDAuNzk1LCAwLjAzNV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZU91dEV4cG9cIiwgWzAuMTksIDEsIDAuMjIsIDFdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VJbk91dEV4cG9cIiwgWzEsIDAsIDAsIDFdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VJbkNpcmNcIiwgWzAuNiwgMC4wNCwgMC45OCwgMC4zMzVdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VPdXRDaXJjXCIsIFswLjA3NSwgMC44MiwgMC4xNjUsIDFdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VJbk91dENpcmNcIiwgWzAuNzg1LCAwLjEzNSwgMC4xNSwgMC44Nl1dXHJcblx0XHRcdFx0XSwgZnVuY3Rpb24oaSwgZWFzaW5nQXJyYXkpIHtcclxuXHRcdFx0VmVsb2NpdHkuRWFzaW5nc1tlYXNpbmdBcnJheVswXV0gPSBnZW5lcmF0ZUJlemllci5hcHBseShudWxsLCBlYXNpbmdBcnJheVsxXSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHQvKiBEZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIGVhc2luZyB0eXBlIGdpdmVuIGFuIGVhc2luZyBpbnB1dC4gKi9cclxuXHRcdGZ1bmN0aW9uIGdldEVhc2luZyh2YWx1ZSwgZHVyYXRpb24pIHtcclxuXHRcdFx0dmFyIGVhc2luZyA9IHZhbHVlO1xyXG5cclxuXHRcdFx0LyogVGhlIGVhc2luZyBvcHRpb24gY2FuIGVpdGhlciBiZSBhIHN0cmluZyB0aGF0IHJlZmVyZW5jZXMgYSBwcmUtcmVnaXN0ZXJlZCBlYXNpbmcsXHJcblx0XHRcdCBvciBpdCBjYW4gYmUgYSB0d28tL2ZvdXItaXRlbSBhcnJheSBvZiBpbnRlZ2VycyB0byBiZSBjb252ZXJ0ZWQgaW50byBhIGJlemllci9zcHJpbmcgZnVuY3Rpb24uICovXHJcblx0XHRcdGlmIChUeXBlLmlzU3RyaW5nKHZhbHVlKSkge1xyXG5cdFx0XHRcdC8qIEVuc3VyZSB0aGF0IHRoZSBlYXNpbmcgaGFzIGJlZW4gYXNzaWduZWQgdG8galF1ZXJ5J3MgVmVsb2NpdHkuRWFzaW5ncyBvYmplY3QuICovXHJcblx0XHRcdFx0aWYgKCFWZWxvY2l0eS5FYXNpbmdzW3ZhbHVlXSkge1xyXG5cdFx0XHRcdFx0ZWFzaW5nID0gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2UgaWYgKFR5cGUuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAxKSB7XHJcblx0XHRcdFx0ZWFzaW5nID0gZ2VuZXJhdGVTdGVwLmFwcGx5KG51bGwsIHZhbHVlKTtcclxuXHRcdFx0fSBlbHNlIGlmIChUeXBlLmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMikge1xyXG5cdFx0XHRcdC8qIHNwcmluZ1JLNCBtdXN0IGJlIHBhc3NlZCB0aGUgYW5pbWF0aW9uJ3MgZHVyYXRpb24uICovXHJcblx0XHRcdFx0LyogTm90ZTogSWYgdGhlIHNwcmluZ1JLNCBhcnJheSBjb250YWlucyBub24tbnVtYmVycywgZ2VuZXJhdGVTcHJpbmdSSzQoKSByZXR1cm5zIGFuIGVhc2luZ1xyXG5cdFx0XHRcdCBmdW5jdGlvbiBnZW5lcmF0ZWQgd2l0aCBkZWZhdWx0IHRlbnNpb24gYW5kIGZyaWN0aW9uIHZhbHVlcy4gKi9cclxuXHRcdFx0XHRlYXNpbmcgPSBnZW5lcmF0ZVNwcmluZ1JLNC5hcHBseShudWxsLCB2YWx1ZS5jb25jYXQoW2R1cmF0aW9uXSkpO1xyXG5cdFx0XHR9IGVsc2UgaWYgKFR5cGUuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSA0KSB7XHJcblx0XHRcdFx0LyogTm90ZTogSWYgdGhlIGJlemllciBhcnJheSBjb250YWlucyBub24tbnVtYmVycywgZ2VuZXJhdGVCZXppZXIoKSByZXR1cm5zIGZhbHNlLiAqL1xyXG5cdFx0XHRcdGVhc2luZyA9IGdlbmVyYXRlQmV6aWVyLmFwcGx5KG51bGwsIHZhbHVlKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRlYXNpbmcgPSBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogUmV2ZXJ0IHRvIHRoZSBWZWxvY2l0eS13aWRlIGRlZmF1bHQgZWFzaW5nIHR5cGUsIG9yIGZhbGwgYmFjayB0byBcInN3aW5nXCIgKHdoaWNoIGlzIGFsc28galF1ZXJ5J3MgZGVmYXVsdClcclxuXHRcdFx0IGlmIHRoZSBWZWxvY2l0eS13aWRlIGRlZmF1bHQgaGFzIGJlZW4gaW5jb3JyZWN0bHkgbW9kaWZpZWQuICovXHJcblx0XHRcdGlmIChlYXNpbmcgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0aWYgKFZlbG9jaXR5LkVhc2luZ3NbVmVsb2NpdHkuZGVmYXVsdHMuZWFzaW5nXSkge1xyXG5cdFx0XHRcdFx0ZWFzaW5nID0gVmVsb2NpdHkuZGVmYXVsdHMuZWFzaW5nO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRlYXNpbmcgPSBFQVNJTkdfREVGQVVMVDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBlYXNpbmc7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqKioqKioqKioqKioqKioqXHJcblx0XHQgQ1NTIFN0YWNrXHJcblx0XHQgKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0LyogVGhlIENTUyBvYmplY3QgaXMgYSBoaWdobHkgY29uZGVuc2VkIGFuZCBwZXJmb3JtYW50IENTUyBzdGFjayB0aGF0IGZ1bGx5IHJlcGxhY2VzIGpRdWVyeSdzLlxyXG5cdFx0IEl0IGhhbmRsZXMgdGhlIHZhbGlkYXRpb24sIGdldHRpbmcsIGFuZCBzZXR0aW5nIG9mIGJvdGggc3RhbmRhcmQgQ1NTIHByb3BlcnRpZXMgYW5kIENTUyBwcm9wZXJ0eSBob29rcy4gKi9cclxuXHRcdC8qIE5vdGU6IEEgXCJDU1NcIiBzaG9ydGhhbmQgaXMgYWxpYXNlZCBzbyB0aGF0IG91ciBjb2RlIGlzIGVhc2llciB0byByZWFkLiAqL1xyXG5cdFx0dmFyIENTUyA9IFZlbG9jaXR5LkNTUyA9IHtcclxuXHRcdFx0LyoqKioqKioqKioqKipcclxuXHRcdFx0IFJlZ0V4XHJcblx0XHRcdCAqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0UmVnRXg6IHtcclxuXHRcdFx0XHRpc0hleDogL14jKFtBLWZcXGRdezN9KXsxLDJ9JC9pLFxyXG5cdFx0XHRcdC8qIFVud3JhcCBhIHByb3BlcnR5IHZhbHVlJ3Mgc3Vycm91bmRpbmcgdGV4dCwgZS5nLiBcInJnYmEoNCwgMywgMiwgMSlcIiA9PT4gXCI0LCAzLCAyLCAxXCIgYW5kIFwicmVjdCg0cHggM3B4IDJweCAxcHgpXCIgPT0+IFwiNHB4IDNweCAycHggMXB4XCIuICovXHJcblx0XHRcdFx0dmFsdWVVbndyYXA6IC9eW0Etel0rXFwoKC4qKVxcKSQvaSxcclxuXHRcdFx0XHR3cmFwcGVkVmFsdWVBbHJlYWR5RXh0cmFjdGVkOiAvWzAtOS5dKyBbMC05Ll0rIFswLTkuXSsoIFswLTkuXSspPy8sXHJcblx0XHRcdFx0LyogU3BsaXQgYSBtdWx0aS12YWx1ZSBwcm9wZXJ0eSBpbnRvIGFuIGFycmF5IG9mIHN1YnZhbHVlcywgZS5nLiBcInJnYmEoNCwgMywgMiwgMSkgNHB4IDNweCAycHggMXB4XCIgPT0+IFsgXCJyZ2JhKDQsIDMsIDIsIDEpXCIsIFwiNHB4XCIsIFwiM3B4XCIsIFwiMnB4XCIsIFwiMXB4XCIgXS4gKi9cclxuXHRcdFx0XHR2YWx1ZVNwbGl0OiAvKFtBLXpdK1xcKC4rXFwpKXwoKFtBLXowLTkjLS5dKz8pKD89XFxzfCQpKS9pZ1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKioqKioqKioqKioqXHJcblx0XHRcdCBMaXN0c1xyXG5cdFx0XHQgKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0TGlzdHM6IHtcclxuXHRcdFx0XHRjb2xvcnM6IFtcImZpbGxcIiwgXCJzdHJva2VcIiwgXCJzdG9wQ29sb3JcIiwgXCJjb2xvclwiLCBcImJhY2tncm91bmRDb2xvclwiLCBcImJvcmRlckNvbG9yXCIsIFwiYm9yZGVyVG9wQ29sb3JcIiwgXCJib3JkZXJSaWdodENvbG9yXCIsIFwiYm9yZGVyQm90dG9tQ29sb3JcIiwgXCJib3JkZXJMZWZ0Q29sb3JcIiwgXCJvdXRsaW5lQ29sb3JcIl0sXHJcblx0XHRcdFx0dHJhbnNmb3Jtc0Jhc2U6IFtcInRyYW5zbGF0ZVhcIiwgXCJ0cmFuc2xhdGVZXCIsIFwic2NhbGVcIiwgXCJzY2FsZVhcIiwgXCJzY2FsZVlcIiwgXCJza2V3WFwiLCBcInNrZXdZXCIsIFwicm90YXRlWlwiXSxcclxuXHRcdFx0XHR0cmFuc2Zvcm1zM0Q6IFtcInRyYW5zZm9ybVBlcnNwZWN0aXZlXCIsIFwidHJhbnNsYXRlWlwiLCBcInNjYWxlWlwiLCBcInJvdGF0ZVhcIiwgXCJyb3RhdGVZXCJdLFxyXG5cdFx0XHRcdHVuaXRzOiBbXHJcblx0XHRcdFx0XHRcIiVcIiwgLy8gcmVsYXRpdmVcclxuXHRcdFx0XHRcdFwiZW1cIiwgXCJleFwiLCBcImNoXCIsIFwicmVtXCIsIC8vIGZvbnQgcmVsYXRpdmVcclxuXHRcdFx0XHRcdFwidndcIiwgXCJ2aFwiLCBcInZtaW5cIiwgXCJ2bWF4XCIsIC8vIHZpZXdwb3J0IHJlbGF0aXZlXHJcblx0XHRcdFx0XHRcImNtXCIsIFwibW1cIiwgXCJRXCIsIFwiaW5cIiwgXCJwY1wiLCBcInB0XCIsIFwicHhcIiwgLy8gYWJzb2x1dGUgbGVuZ3Roc1xyXG5cdFx0XHRcdFx0XCJkZWdcIiwgXCJncmFkXCIsIFwicmFkXCIsIFwidHVyblwiLCAvLyBhbmdsZXNcclxuXHRcdFx0XHRcdFwic1wiLCBcIm1zXCIgLy8gdGltZVxyXG5cdFx0XHRcdF0sXHJcblx0XHRcdFx0Y29sb3JOYW1lczoge1xyXG5cdFx0XHRcdFx0XCJhbGljZWJsdWVcIjogXCIyNDAsMjQ4LDI1NVwiLFxyXG5cdFx0XHRcdFx0XCJhbnRpcXVld2hpdGVcIjogXCIyNTAsMjM1LDIxNVwiLFxyXG5cdFx0XHRcdFx0XCJhcXVhbWFyaW5lXCI6IFwiMTI3LDI1NSwyMTJcIixcclxuXHRcdFx0XHRcdFwiYXF1YVwiOiBcIjAsMjU1LDI1NVwiLFxyXG5cdFx0XHRcdFx0XCJhenVyZVwiOiBcIjI0MCwyNTUsMjU1XCIsXHJcblx0XHRcdFx0XHRcImJlaWdlXCI6IFwiMjQ1LDI0NSwyMjBcIixcclxuXHRcdFx0XHRcdFwiYmlzcXVlXCI6IFwiMjU1LDIyOCwxOTZcIixcclxuXHRcdFx0XHRcdFwiYmxhY2tcIjogXCIwLDAsMFwiLFxyXG5cdFx0XHRcdFx0XCJibGFuY2hlZGFsbW9uZFwiOiBcIjI1NSwyMzUsMjA1XCIsXHJcblx0XHRcdFx0XHRcImJsdWV2aW9sZXRcIjogXCIxMzgsNDMsMjI2XCIsXHJcblx0XHRcdFx0XHRcImJsdWVcIjogXCIwLDAsMjU1XCIsXHJcblx0XHRcdFx0XHRcImJyb3duXCI6IFwiMTY1LDQyLDQyXCIsXHJcblx0XHRcdFx0XHRcImJ1cmx5d29vZFwiOiBcIjIyMiwxODQsMTM1XCIsXHJcblx0XHRcdFx0XHRcImNhZGV0Ymx1ZVwiOiBcIjk1LDE1OCwxNjBcIixcclxuXHRcdFx0XHRcdFwiY2hhcnRyZXVzZVwiOiBcIjEyNywyNTUsMFwiLFxyXG5cdFx0XHRcdFx0XCJjaG9jb2xhdGVcIjogXCIyMTAsMTA1LDMwXCIsXHJcblx0XHRcdFx0XHRcImNvcmFsXCI6IFwiMjU1LDEyNyw4MFwiLFxyXG5cdFx0XHRcdFx0XCJjb3JuZmxvd2VyYmx1ZVwiOiBcIjEwMCwxNDksMjM3XCIsXHJcblx0XHRcdFx0XHRcImNvcm5zaWxrXCI6IFwiMjU1LDI0OCwyMjBcIixcclxuXHRcdFx0XHRcdFwiY3JpbXNvblwiOiBcIjIyMCwyMCw2MFwiLFxyXG5cdFx0XHRcdFx0XCJjeWFuXCI6IFwiMCwyNTUsMjU1XCIsXHJcblx0XHRcdFx0XHRcImRhcmtibHVlXCI6IFwiMCwwLDEzOVwiLFxyXG5cdFx0XHRcdFx0XCJkYXJrY3lhblwiOiBcIjAsMTM5LDEzOVwiLFxyXG5cdFx0XHRcdFx0XCJkYXJrZ29sZGVucm9kXCI6IFwiMTg0LDEzNCwxMVwiLFxyXG5cdFx0XHRcdFx0XCJkYXJrZ3JheVwiOiBcIjE2OSwxNjksMTY5XCIsXHJcblx0XHRcdFx0XHRcImRhcmtncmV5XCI6IFwiMTY5LDE2OSwxNjlcIixcclxuXHRcdFx0XHRcdFwiZGFya2dyZWVuXCI6IFwiMCwxMDAsMFwiLFxyXG5cdFx0XHRcdFx0XCJkYXJra2hha2lcIjogXCIxODksMTgzLDEwN1wiLFxyXG5cdFx0XHRcdFx0XCJkYXJrbWFnZW50YVwiOiBcIjEzOSwwLDEzOVwiLFxyXG5cdFx0XHRcdFx0XCJkYXJrb2xpdmVncmVlblwiOiBcIjg1LDEwNyw0N1wiLFxyXG5cdFx0XHRcdFx0XCJkYXJrb3JhbmdlXCI6IFwiMjU1LDE0MCwwXCIsXHJcblx0XHRcdFx0XHRcImRhcmtvcmNoaWRcIjogXCIxNTMsNTAsMjA0XCIsXHJcblx0XHRcdFx0XHRcImRhcmtyZWRcIjogXCIxMzksMCwwXCIsXHJcblx0XHRcdFx0XHRcImRhcmtzYWxtb25cIjogXCIyMzMsMTUwLDEyMlwiLFxyXG5cdFx0XHRcdFx0XCJkYXJrc2VhZ3JlZW5cIjogXCIxNDMsMTg4LDE0M1wiLFxyXG5cdFx0XHRcdFx0XCJkYXJrc2xhdGVibHVlXCI6IFwiNzIsNjEsMTM5XCIsXHJcblx0XHRcdFx0XHRcImRhcmtzbGF0ZWdyYXlcIjogXCI0Nyw3OSw3OVwiLFxyXG5cdFx0XHRcdFx0XCJkYXJrdHVycXVvaXNlXCI6IFwiMCwyMDYsMjA5XCIsXHJcblx0XHRcdFx0XHRcImRhcmt2aW9sZXRcIjogXCIxNDgsMCwyMTFcIixcclxuXHRcdFx0XHRcdFwiZGVlcHBpbmtcIjogXCIyNTUsMjAsMTQ3XCIsXHJcblx0XHRcdFx0XHRcImRlZXBza3libHVlXCI6IFwiMCwxOTEsMjU1XCIsXHJcblx0XHRcdFx0XHRcImRpbWdyYXlcIjogXCIxMDUsMTA1LDEwNVwiLFxyXG5cdFx0XHRcdFx0XCJkaW1ncmV5XCI6IFwiMTA1LDEwNSwxMDVcIixcclxuXHRcdFx0XHRcdFwiZG9kZ2VyYmx1ZVwiOiBcIjMwLDE0NCwyNTVcIixcclxuXHRcdFx0XHRcdFwiZmlyZWJyaWNrXCI6IFwiMTc4LDM0LDM0XCIsXHJcblx0XHRcdFx0XHRcImZsb3JhbHdoaXRlXCI6IFwiMjU1LDI1MCwyNDBcIixcclxuXHRcdFx0XHRcdFwiZm9yZXN0Z3JlZW5cIjogXCIzNCwxMzksMzRcIixcclxuXHRcdFx0XHRcdFwiZnVjaHNpYVwiOiBcIjI1NSwwLDI1NVwiLFxyXG5cdFx0XHRcdFx0XCJnYWluc2Jvcm9cIjogXCIyMjAsMjIwLDIyMFwiLFxyXG5cdFx0XHRcdFx0XCJnaG9zdHdoaXRlXCI6IFwiMjQ4LDI0OCwyNTVcIixcclxuXHRcdFx0XHRcdFwiZ29sZFwiOiBcIjI1NSwyMTUsMFwiLFxyXG5cdFx0XHRcdFx0XCJnb2xkZW5yb2RcIjogXCIyMTgsMTY1LDMyXCIsXHJcblx0XHRcdFx0XHRcImdyYXlcIjogXCIxMjgsMTI4LDEyOFwiLFxyXG5cdFx0XHRcdFx0XCJncmV5XCI6IFwiMTI4LDEyOCwxMjhcIixcclxuXHRcdFx0XHRcdFwiZ3JlZW55ZWxsb3dcIjogXCIxNzMsMjU1LDQ3XCIsXHJcblx0XHRcdFx0XHRcImdyZWVuXCI6IFwiMCwxMjgsMFwiLFxyXG5cdFx0XHRcdFx0XCJob25leWRld1wiOiBcIjI0MCwyNTUsMjQwXCIsXHJcblx0XHRcdFx0XHRcImhvdHBpbmtcIjogXCIyNTUsMTA1LDE4MFwiLFxyXG5cdFx0XHRcdFx0XCJpbmRpYW5yZWRcIjogXCIyMDUsOTIsOTJcIixcclxuXHRcdFx0XHRcdFwiaW5kaWdvXCI6IFwiNzUsMCwxMzBcIixcclxuXHRcdFx0XHRcdFwiaXZvcnlcIjogXCIyNTUsMjU1LDI0MFwiLFxyXG5cdFx0XHRcdFx0XCJraGFraVwiOiBcIjI0MCwyMzAsMTQwXCIsXHJcblx0XHRcdFx0XHRcImxhdmVuZGVyYmx1c2hcIjogXCIyNTUsMjQwLDI0NVwiLFxyXG5cdFx0XHRcdFx0XCJsYXZlbmRlclwiOiBcIjIzMCwyMzAsMjUwXCIsXHJcblx0XHRcdFx0XHRcImxhd25ncmVlblwiOiBcIjEyNCwyNTIsMFwiLFxyXG5cdFx0XHRcdFx0XCJsZW1vbmNoaWZmb25cIjogXCIyNTUsMjUwLDIwNVwiLFxyXG5cdFx0XHRcdFx0XCJsaWdodGJsdWVcIjogXCIxNzMsMjE2LDIzMFwiLFxyXG5cdFx0XHRcdFx0XCJsaWdodGNvcmFsXCI6IFwiMjQwLDEyOCwxMjhcIixcclxuXHRcdFx0XHRcdFwibGlnaHRjeWFuXCI6IFwiMjI0LDI1NSwyNTVcIixcclxuXHRcdFx0XHRcdFwibGlnaHRnb2xkZW5yb2R5ZWxsb3dcIjogXCIyNTAsMjUwLDIxMFwiLFxyXG5cdFx0XHRcdFx0XCJsaWdodGdyYXlcIjogXCIyMTEsMjExLDIxMVwiLFxyXG5cdFx0XHRcdFx0XCJsaWdodGdyZXlcIjogXCIyMTEsMjExLDIxMVwiLFxyXG5cdFx0XHRcdFx0XCJsaWdodGdyZWVuXCI6IFwiMTQ0LDIzOCwxNDRcIixcclxuXHRcdFx0XHRcdFwibGlnaHRwaW5rXCI6IFwiMjU1LDE4MiwxOTNcIixcclxuXHRcdFx0XHRcdFwibGlnaHRzYWxtb25cIjogXCIyNTUsMTYwLDEyMlwiLFxyXG5cdFx0XHRcdFx0XCJsaWdodHNlYWdyZWVuXCI6IFwiMzIsMTc4LDE3MFwiLFxyXG5cdFx0XHRcdFx0XCJsaWdodHNreWJsdWVcIjogXCIxMzUsMjA2LDI1MFwiLFxyXG5cdFx0XHRcdFx0XCJsaWdodHNsYXRlZ3JheVwiOiBcIjExOSwxMzYsMTUzXCIsXHJcblx0XHRcdFx0XHRcImxpZ2h0c3RlZWxibHVlXCI6IFwiMTc2LDE5NiwyMjJcIixcclxuXHRcdFx0XHRcdFwibGlnaHR5ZWxsb3dcIjogXCIyNTUsMjU1LDIyNFwiLFxyXG5cdFx0XHRcdFx0XCJsaW1lZ3JlZW5cIjogXCI1MCwyMDUsNTBcIixcclxuXHRcdFx0XHRcdFwibGltZVwiOiBcIjAsMjU1LDBcIixcclxuXHRcdFx0XHRcdFwibGluZW5cIjogXCIyNTAsMjQwLDIzMFwiLFxyXG5cdFx0XHRcdFx0XCJtYWdlbnRhXCI6IFwiMjU1LDAsMjU1XCIsXHJcblx0XHRcdFx0XHRcIm1hcm9vblwiOiBcIjEyOCwwLDBcIixcclxuXHRcdFx0XHRcdFwibWVkaXVtYXF1YW1hcmluZVwiOiBcIjEwMiwyMDUsMTcwXCIsXHJcblx0XHRcdFx0XHRcIm1lZGl1bWJsdWVcIjogXCIwLDAsMjA1XCIsXHJcblx0XHRcdFx0XHRcIm1lZGl1bW9yY2hpZFwiOiBcIjE4Niw4NSwyMTFcIixcclxuXHRcdFx0XHRcdFwibWVkaXVtcHVycGxlXCI6IFwiMTQ3LDExMiwyMTlcIixcclxuXHRcdFx0XHRcdFwibWVkaXVtc2VhZ3JlZW5cIjogXCI2MCwxNzksMTEzXCIsXHJcblx0XHRcdFx0XHRcIm1lZGl1bXNsYXRlYmx1ZVwiOiBcIjEyMywxMDQsMjM4XCIsXHJcblx0XHRcdFx0XHRcIm1lZGl1bXNwcmluZ2dyZWVuXCI6IFwiMCwyNTAsMTU0XCIsXHJcblx0XHRcdFx0XHRcIm1lZGl1bXR1cnF1b2lzZVwiOiBcIjcyLDIwOSwyMDRcIixcclxuXHRcdFx0XHRcdFwibWVkaXVtdmlvbGV0cmVkXCI6IFwiMTk5LDIxLDEzM1wiLFxyXG5cdFx0XHRcdFx0XCJtaWRuaWdodGJsdWVcIjogXCIyNSwyNSwxMTJcIixcclxuXHRcdFx0XHRcdFwibWludGNyZWFtXCI6IFwiMjQ1LDI1NSwyNTBcIixcclxuXHRcdFx0XHRcdFwibWlzdHlyb3NlXCI6IFwiMjU1LDIyOCwyMjVcIixcclxuXHRcdFx0XHRcdFwibW9jY2FzaW5cIjogXCIyNTUsMjI4LDE4MVwiLFxyXG5cdFx0XHRcdFx0XCJuYXZham93aGl0ZVwiOiBcIjI1NSwyMjIsMTczXCIsXHJcblx0XHRcdFx0XHRcIm5hdnlcIjogXCIwLDAsMTI4XCIsXHJcblx0XHRcdFx0XHRcIm9sZGxhY2VcIjogXCIyNTMsMjQ1LDIzMFwiLFxyXG5cdFx0XHRcdFx0XCJvbGl2ZWRyYWJcIjogXCIxMDcsMTQyLDM1XCIsXHJcblx0XHRcdFx0XHRcIm9saXZlXCI6IFwiMTI4LDEyOCwwXCIsXHJcblx0XHRcdFx0XHRcIm9yYW5nZXJlZFwiOiBcIjI1NSw2OSwwXCIsXHJcblx0XHRcdFx0XHRcIm9yYW5nZVwiOiBcIjI1NSwxNjUsMFwiLFxyXG5cdFx0XHRcdFx0XCJvcmNoaWRcIjogXCIyMTgsMTEyLDIxNFwiLFxyXG5cdFx0XHRcdFx0XCJwYWxlZ29sZGVucm9kXCI6IFwiMjM4LDIzMiwxNzBcIixcclxuXHRcdFx0XHRcdFwicGFsZWdyZWVuXCI6IFwiMTUyLDI1MSwxNTJcIixcclxuXHRcdFx0XHRcdFwicGFsZXR1cnF1b2lzZVwiOiBcIjE3NSwyMzgsMjM4XCIsXHJcblx0XHRcdFx0XHRcInBhbGV2aW9sZXRyZWRcIjogXCIyMTksMTEyLDE0N1wiLFxyXG5cdFx0XHRcdFx0XCJwYXBheWF3aGlwXCI6IFwiMjU1LDIzOSwyMTNcIixcclxuXHRcdFx0XHRcdFwicGVhY2hwdWZmXCI6IFwiMjU1LDIxOCwxODVcIixcclxuXHRcdFx0XHRcdFwicGVydVwiOiBcIjIwNSwxMzMsNjNcIixcclxuXHRcdFx0XHRcdFwicGlua1wiOiBcIjI1NSwxOTIsMjAzXCIsXHJcblx0XHRcdFx0XHRcInBsdW1cIjogXCIyMjEsMTYwLDIyMVwiLFxyXG5cdFx0XHRcdFx0XCJwb3dkZXJibHVlXCI6IFwiMTc2LDIyNCwyMzBcIixcclxuXHRcdFx0XHRcdFwicHVycGxlXCI6IFwiMTI4LDAsMTI4XCIsXHJcblx0XHRcdFx0XHRcInJlZFwiOiBcIjI1NSwwLDBcIixcclxuXHRcdFx0XHRcdFwicm9zeWJyb3duXCI6IFwiMTg4LDE0MywxNDNcIixcclxuXHRcdFx0XHRcdFwicm95YWxibHVlXCI6IFwiNjUsMTA1LDIyNVwiLFxyXG5cdFx0XHRcdFx0XCJzYWRkbGVicm93blwiOiBcIjEzOSw2OSwxOVwiLFxyXG5cdFx0XHRcdFx0XCJzYWxtb25cIjogXCIyNTAsMTI4LDExNFwiLFxyXG5cdFx0XHRcdFx0XCJzYW5keWJyb3duXCI6IFwiMjQ0LDE2NCw5NlwiLFxyXG5cdFx0XHRcdFx0XCJzZWFncmVlblwiOiBcIjQ2LDEzOSw4N1wiLFxyXG5cdFx0XHRcdFx0XCJzZWFzaGVsbFwiOiBcIjI1NSwyNDUsMjM4XCIsXHJcblx0XHRcdFx0XHRcInNpZW5uYVwiOiBcIjE2MCw4Miw0NVwiLFxyXG5cdFx0XHRcdFx0XCJzaWx2ZXJcIjogXCIxOTIsMTkyLDE5MlwiLFxyXG5cdFx0XHRcdFx0XCJza3libHVlXCI6IFwiMTM1LDIwNiwyMzVcIixcclxuXHRcdFx0XHRcdFwic2xhdGVibHVlXCI6IFwiMTA2LDkwLDIwNVwiLFxyXG5cdFx0XHRcdFx0XCJzbGF0ZWdyYXlcIjogXCIxMTIsMTI4LDE0NFwiLFxyXG5cdFx0XHRcdFx0XCJzbm93XCI6IFwiMjU1LDI1MCwyNTBcIixcclxuXHRcdFx0XHRcdFwic3ByaW5nZ3JlZW5cIjogXCIwLDI1NSwxMjdcIixcclxuXHRcdFx0XHRcdFwic3RlZWxibHVlXCI6IFwiNzAsMTMwLDE4MFwiLFxyXG5cdFx0XHRcdFx0XCJ0YW5cIjogXCIyMTAsMTgwLDE0MFwiLFxyXG5cdFx0XHRcdFx0XCJ0ZWFsXCI6IFwiMCwxMjgsMTI4XCIsXHJcblx0XHRcdFx0XHRcInRoaXN0bGVcIjogXCIyMTYsMTkxLDIxNlwiLFxyXG5cdFx0XHRcdFx0XCJ0b21hdG9cIjogXCIyNTUsOTksNzFcIixcclxuXHRcdFx0XHRcdFwidHVycXVvaXNlXCI6IFwiNjQsMjI0LDIwOFwiLFxyXG5cdFx0XHRcdFx0XCJ2aW9sZXRcIjogXCIyMzgsMTMwLDIzOFwiLFxyXG5cdFx0XHRcdFx0XCJ3aGVhdFwiOiBcIjI0NSwyMjIsMTc5XCIsXHJcblx0XHRcdFx0XHRcIndoaXRlc21va2VcIjogXCIyNDUsMjQ1LDI0NVwiLFxyXG5cdFx0XHRcdFx0XCJ3aGl0ZVwiOiBcIjI1NSwyNTUsMjU1XCIsXHJcblx0XHRcdFx0XHRcInllbGxvd2dyZWVuXCI6IFwiMTU0LDIwNSw1MFwiLFxyXG5cdFx0XHRcdFx0XCJ5ZWxsb3dcIjogXCIyNTUsMjU1LDBcIlxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0LyoqKioqKioqKioqKlxyXG5cdFx0XHQgSG9va3NcclxuXHRcdFx0ICoqKioqKioqKioqKi9cclxuXHJcblx0XHRcdC8qIEhvb2tzIGFsbG93IGEgc3VicHJvcGVydHkgKGUuZy4gXCJib3hTaGFkb3dCbHVyXCIpIG9mIGEgY29tcG91bmQtdmFsdWUgQ1NTIHByb3BlcnR5XHJcblx0XHRcdCAoZS5nLiBcImJveFNoYWRvdzogWCBZIEJsdXIgU3ByZWFkIENvbG9yXCIpIHRvIGJlIGFuaW1hdGVkIGFzIGlmIGl0IHdlcmUgYSBkaXNjcmV0ZSBwcm9wZXJ0eS4gKi9cclxuXHRcdFx0LyogTm90ZTogQmV5b25kIGVuYWJsaW5nIGZpbmUtZ3JhaW5lZCBwcm9wZXJ0eSBhbmltYXRpb24sIGhvb2tpbmcgaXMgbmVjZXNzYXJ5IHNpbmNlIFZlbG9jaXR5IG9ubHlcclxuXHRcdFx0IHR3ZWVucyBwcm9wZXJ0aWVzIHdpdGggc2luZ2xlIG51bWVyaWMgdmFsdWVzOyB1bmxpa2UgQ1NTIHRyYW5zaXRpb25zLCBWZWxvY2l0eSBkb2VzIG5vdCBpbnRlcnBvbGF0ZSBjb21wb3VuZC12YWx1ZXMuICovXHJcblx0XHRcdEhvb2tzOiB7XHJcblx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IFJlZ2lzdHJhdGlvblxyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0LyogVGVtcGxhdGVzIGFyZSBhIGNvbmNpc2Ugd2F5IG9mIGluZGljYXRpbmcgd2hpY2ggc3VicHJvcGVydGllcyBtdXN0IGJlIGluZGl2aWR1YWxseSByZWdpc3RlcmVkIGZvciBlYWNoIGNvbXBvdW5kLXZhbHVlIENTUyBwcm9wZXJ0eS4gKi9cclxuXHRcdFx0XHQvKiBFYWNoIHRlbXBsYXRlIGNvbnNpc3RzIG9mIHRoZSBjb21wb3VuZC12YWx1ZSdzIGJhc2UgbmFtZSwgaXRzIGNvbnN0aXR1ZW50IHN1YnByb3BlcnR5IG5hbWVzLCBhbmQgdGhvc2Ugc3VicHJvcGVydGllcycgZGVmYXVsdCB2YWx1ZXMuICovXHJcblx0XHRcdFx0dGVtcGxhdGVzOiB7XHJcblx0XHRcdFx0XHRcInRleHRTaGFkb3dcIjogW1wiQ29sb3IgWCBZIEJsdXJcIiwgXCJibGFjayAwcHggMHB4IDBweFwiXSxcclxuXHRcdFx0XHRcdFwiYm94U2hhZG93XCI6IFtcIkNvbG9yIFggWSBCbHVyIFNwcmVhZFwiLCBcImJsYWNrIDBweCAwcHggMHB4IDBweFwiXSxcclxuXHRcdFx0XHRcdFwiY2xpcFwiOiBbXCJUb3AgUmlnaHQgQm90dG9tIExlZnRcIiwgXCIwcHggMHB4IDBweCAwcHhcIl0sXHJcblx0XHRcdFx0XHRcImJhY2tncm91bmRQb3NpdGlvblwiOiBbXCJYIFlcIiwgXCIwJSAwJVwiXSxcclxuXHRcdFx0XHRcdFwidHJhbnNmb3JtT3JpZ2luXCI6IFtcIlggWSBaXCIsIFwiNTAlIDUwJSAwcHhcIl0sXHJcblx0XHRcdFx0XHRcInBlcnNwZWN0aXZlT3JpZ2luXCI6IFtcIlggWVwiLCBcIjUwJSA1MCVcIl1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdC8qIEEgXCJyZWdpc3RlcmVkXCIgaG9vayBpcyBvbmUgdGhhdCBoYXMgYmVlbiBjb252ZXJ0ZWQgZnJvbSBpdHMgdGVtcGxhdGUgZm9ybSBpbnRvIGEgbGl2ZSxcclxuXHRcdFx0XHQgdHdlZW5hYmxlIHByb3BlcnR5LiBJdCBjb250YWlucyBkYXRhIHRvIGFzc29jaWF0ZSBpdCB3aXRoIGl0cyByb290IHByb3BlcnR5LiAqL1xyXG5cdFx0XHRcdHJlZ2lzdGVyZWQ6IHtcclxuXHRcdFx0XHRcdC8qIE5vdGU6IEEgcmVnaXN0ZXJlZCBob29rIGxvb2tzIGxpa2UgdGhpcyA9PT4gdGV4dFNoYWRvd0JsdXI6IFsgXCJ0ZXh0U2hhZG93XCIsIDMgXSxcclxuXHRcdFx0XHRcdCB3aGljaCBjb25zaXN0cyBvZiB0aGUgc3VicHJvcGVydHkncyBuYW1lLCB0aGUgYXNzb2NpYXRlZCByb290IHByb3BlcnR5J3MgbmFtZSxcclxuXHRcdFx0XHRcdCBhbmQgdGhlIHN1YnByb3BlcnR5J3MgcG9zaXRpb24gaW4gdGhlIHJvb3QncyB2YWx1ZS4gKi9cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdC8qIENvbnZlcnQgdGhlIHRlbXBsYXRlcyBpbnRvIGluZGl2aWR1YWwgaG9va3MgdGhlbiBhcHBlbmQgdGhlbSB0byB0aGUgcmVnaXN0ZXJlZCBvYmplY3QgYWJvdmUuICovXHJcblx0XHRcdFx0cmVnaXN0ZXI6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0LyogQ29sb3IgaG9va3MgcmVnaXN0cmF0aW9uOiBDb2xvcnMgYXJlIGRlZmF1bHRlZCB0byB3aGl0ZSAtLSBhcyBvcHBvc2VkIHRvIGJsYWNrIC0tIHNpbmNlIGNvbG9ycyB0aGF0IGFyZVxyXG5cdFx0XHRcdFx0IGN1cnJlbnRseSBzZXQgdG8gXCJ0cmFuc3BhcmVudFwiIGRlZmF1bHQgdG8gdGhlaXIgcmVzcGVjdGl2ZSB0ZW1wbGF0ZSBiZWxvdyB3aGVuIGNvbG9yLWFuaW1hdGVkLFxyXG5cdFx0XHRcdFx0IGFuZCB3aGl0ZSBpcyB0eXBpY2FsbHkgYSBjbG9zZXIgbWF0Y2ggdG8gdHJhbnNwYXJlbnQgdGhhbiBibGFjayBpcy4gQW4gZXhjZXB0aW9uIGlzIG1hZGUgZm9yIHRleHQgKFwiY29sb3JcIiksXHJcblx0XHRcdFx0XHQgd2hpY2ggaXMgYWxtb3N0IGFsd2F5cyBzZXQgY2xvc2VyIHRvIGJsYWNrIHRoYW4gd2hpdGUuICovXHJcblx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IENTUy5MaXN0cy5jb2xvcnMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0dmFyIHJnYkNvbXBvbmVudHMgPSAoQ1NTLkxpc3RzLmNvbG9yc1tpXSA9PT0gXCJjb2xvclwiKSA/IFwiMCAwIDAgMVwiIDogXCIyNTUgMjU1IDI1NSAxXCI7XHJcblx0XHRcdFx0XHRcdENTUy5Ib29rcy50ZW1wbGF0ZXNbQ1NTLkxpc3RzLmNvbG9yc1tpXV0gPSBbXCJSZWQgR3JlZW4gQmx1ZSBBbHBoYVwiLCByZ2JDb21wb25lbnRzXTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR2YXIgcm9vdFByb3BlcnR5LFxyXG5cdFx0XHRcdFx0XHRcdGhvb2tUZW1wbGF0ZSxcclxuXHRcdFx0XHRcdFx0XHRob29rTmFtZXM7XHJcblxyXG5cdFx0XHRcdFx0LyogSW4gSUUsIGNvbG9yIHZhbHVlcyBpbnNpZGUgY29tcG91bmQtdmFsdWUgcHJvcGVydGllcyBhcmUgcG9zaXRpb25lZCBhdCB0aGUgZW5kIHRoZSB2YWx1ZSBpbnN0ZWFkIG9mIGF0IHRoZSBiZWdpbm5pbmcuXHJcblx0XHRcdFx0XHQgVGh1cywgd2UgcmUtYXJyYW5nZSB0aGUgdGVtcGxhdGVzIGFjY29yZGluZ2x5LiAqL1xyXG5cdFx0XHRcdFx0aWYgKElFKSB7XHJcblx0XHRcdFx0XHRcdGZvciAocm9vdFByb3BlcnR5IGluIENTUy5Ib29rcy50ZW1wbGF0ZXMpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIUNTUy5Ib29rcy50ZW1wbGF0ZXMuaGFzT3duUHJvcGVydHkocm9vdFByb3BlcnR5KSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGhvb2tUZW1wbGF0ZSA9IENTUy5Ib29rcy50ZW1wbGF0ZXNbcm9vdFByb3BlcnR5XTtcclxuXHRcdFx0XHRcdFx0XHRob29rTmFtZXMgPSBob29rVGVtcGxhdGVbMF0uc3BsaXQoXCIgXCIpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHR2YXIgZGVmYXVsdFZhbHVlcyA9IGhvb2tUZW1wbGF0ZVsxXS5tYXRjaChDU1MuUmVnRXgudmFsdWVTcGxpdCk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmIChob29rTmFtZXNbMF0gPT09IFwiQ29sb3JcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogUmVwb3NpdGlvbiBib3RoIHRoZSBob29rJ3MgbmFtZSBhbmQgaXRzIGRlZmF1bHQgdmFsdWUgdG8gdGhlIGVuZCBvZiB0aGVpciByZXNwZWN0aXZlIHN0cmluZ3MuICovXHJcblx0XHRcdFx0XHRcdFx0XHRob29rTmFtZXMucHVzaChob29rTmFtZXMuc2hpZnQoKSk7XHJcblx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzLnB1c2goZGVmYXVsdFZhbHVlcy5zaGlmdCgpKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBSZXBsYWNlIHRoZSBleGlzdGluZyB0ZW1wbGF0ZSBmb3IgdGhlIGhvb2sncyByb290IHByb3BlcnR5LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0Q1NTLkhvb2tzLnRlbXBsYXRlc1tyb290UHJvcGVydHldID0gW2hvb2tOYW1lcy5qb2luKFwiIFwiKSwgZGVmYXVsdFZhbHVlcy5qb2luKFwiIFwiKV07XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogSG9vayByZWdpc3RyYXRpb24uICovXHJcblx0XHRcdFx0XHRmb3IgKHJvb3RQcm9wZXJ0eSBpbiBDU1MuSG9va3MudGVtcGxhdGVzKSB7XHJcblx0XHRcdFx0XHRcdGlmICghQ1NTLkhvb2tzLnRlbXBsYXRlcy5oYXNPd25Qcm9wZXJ0eShyb290UHJvcGVydHkpKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aG9va1RlbXBsYXRlID0gQ1NTLkhvb2tzLnRlbXBsYXRlc1tyb290UHJvcGVydHldO1xyXG5cdFx0XHRcdFx0XHRob29rTmFtZXMgPSBob29rVGVtcGxhdGVbMF0uc3BsaXQoXCIgXCIpO1xyXG5cclxuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaiBpbiBob29rTmFtZXMpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIWhvb2tOYW1lcy5oYXNPd25Qcm9wZXJ0eShqKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHZhciBmdWxsSG9va05hbWUgPSByb290UHJvcGVydHkgKyBob29rTmFtZXNbal0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdGhvb2tQb3NpdGlvbiA9IGo7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIEZvciBlYWNoIGhvb2ssIHJlZ2lzdGVyIGl0cyBmdWxsIG5hbWUgKGUuZy4gdGV4dFNoYWRvd0JsdXIpIHdpdGggaXRzIHJvb3QgcHJvcGVydHkgKGUuZy4gdGV4dFNoYWRvdylcclxuXHRcdFx0XHRcdFx0XHQgYW5kIHRoZSBob29rJ3MgcG9zaXRpb24gaW4gaXRzIHRlbXBsYXRlJ3MgZGVmYXVsdCB2YWx1ZSBzdHJpbmcuICovXHJcblx0XHRcdFx0XHRcdFx0Q1NTLkhvb2tzLnJlZ2lzdGVyZWRbZnVsbEhvb2tOYW1lXSA9IFtyb290UHJvcGVydHksIGhvb2tQb3NpdGlvbl07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdCBJbmplY3Rpb24gYW5kIEV4dHJhY3Rpb25cclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdC8qIExvb2sgdXAgdGhlIHJvb3QgcHJvcGVydHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBob29rIChlLmcuIHJldHVybiBcInRleHRTaGFkb3dcIiBmb3IgXCJ0ZXh0U2hhZG93Qmx1clwiKS4gKi9cclxuXHRcdFx0XHQvKiBTaW5jZSBhIGhvb2sgY2Fubm90IGJlIHNldCBkaXJlY3RseSAodGhlIGJyb3dzZXIgd29uJ3QgcmVjb2duaXplIGl0KSwgc3R5bGUgdXBkYXRpbmcgZm9yIGhvb2tzIGlzIHJvdXRlZCB0aHJvdWdoIHRoZSBob29rJ3Mgcm9vdCBwcm9wZXJ0eS4gKi9cclxuXHRcdFx0XHRnZXRSb290OiBmdW5jdGlvbihwcm9wZXJ0eSkge1xyXG5cdFx0XHRcdFx0dmFyIGhvb2tEYXRhID0gQ1NTLkhvb2tzLnJlZ2lzdGVyZWRbcHJvcGVydHldO1xyXG5cclxuXHRcdFx0XHRcdGlmIChob29rRGF0YSkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gaG9va0RhdGFbMF07XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvKiBJZiB0aGVyZSB3YXMgbm8gaG9vayBtYXRjaCwgcmV0dXJuIHRoZSBwcm9wZXJ0eSBuYW1lIHVudG91Y2hlZC4gKi9cclxuXHRcdFx0XHRcdFx0cmV0dXJuIHByb3BlcnR5O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0Z2V0VW5pdDogZnVuY3Rpb24oc3RyLCBzdGFydCkge1xyXG5cdFx0XHRcdFx0dmFyIHVuaXQgPSAoc3RyLnN1YnN0cihzdGFydCB8fCAwLCA1KS5tYXRjaCgvXlthLXolXSsvKSB8fCBbXSlbMF0gfHwgXCJcIjtcclxuXHJcblx0XHRcdFx0XHRpZiAodW5pdCAmJiBfaW5BcnJheShDU1MuTGlzdHMudW5pdHMsIHVuaXQpKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB1bml0O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRmaXhDb2xvcnM6IGZ1bmN0aW9uKHN0cikge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHN0ci5yZXBsYWNlKC8ocmdiYT9cXChcXHMqKT8oXFxiW2Etel0rXFxiKS9nLCBmdW5jdGlvbigkMCwgJDEsICQyKSB7XHJcblx0XHRcdFx0XHRcdGlmIChDU1MuTGlzdHMuY29sb3JOYW1lcy5oYXNPd25Qcm9wZXJ0eSgkMikpIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKCQxID8gJDEgOiBcInJnYmEoXCIpICsgQ1NTLkxpc3RzLmNvbG9yTmFtZXNbJDJdICsgKCQxID8gXCJcIiA6IFwiLDEpXCIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHJldHVybiAkMSArICQyO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQvKiBDb252ZXJ0IGFueSByb290UHJvcGVydHlWYWx1ZSwgbnVsbCBvciBvdGhlcndpc2UsIGludG8gYSBzcGFjZS1kZWxpbWl0ZWQgbGlzdCBvZiBob29rIHZhbHVlcyBzbyB0aGF0XHJcblx0XHRcdFx0IHRoZSB0YXJnZXRlZCBob29rIGNhbiBiZSBpbmplY3RlZCBvciBleHRyYWN0ZWQgYXQgaXRzIHN0YW5kYXJkIHBvc2l0aW9uLiAqL1xyXG5cdFx0XHRcdGNsZWFuUm9vdFByb3BlcnR5VmFsdWU6IGZ1bmN0aW9uKHJvb3RQcm9wZXJ0eSwgcm9vdFByb3BlcnR5VmFsdWUpIHtcclxuXHRcdFx0XHRcdC8qIElmIHRoZSByb290UHJvcGVydHlWYWx1ZSBpcyB3cmFwcGVkIHdpdGggXCJyZ2IoKVwiLCBcImNsaXAoKVwiLCBldGMuLCByZW1vdmUgdGhlIHdyYXBwaW5nIHRvIG5vcm1hbGl6ZSB0aGUgdmFsdWUgYmVmb3JlIG1hbmlwdWxhdGlvbi4gKi9cclxuXHRcdFx0XHRcdGlmIChDU1MuUmVnRXgudmFsdWVVbndyYXAudGVzdChyb290UHJvcGVydHlWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdFx0cm9vdFByb3BlcnR5VmFsdWUgPSByb290UHJvcGVydHlWYWx1ZS5tYXRjaChDU1MuUmVnRXgudmFsdWVVbndyYXApWzFdO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8qIElmIHJvb3RQcm9wZXJ0eVZhbHVlIGlzIGEgQ1NTIG51bGwtdmFsdWUgKGZyb20gd2hpY2ggdGhlcmUncyBpbmhlcmVudGx5IG5vIGhvb2sgdmFsdWUgdG8gZXh0cmFjdCksXHJcblx0XHRcdFx0XHQgZGVmYXVsdCB0byB0aGUgcm9vdCdzIGRlZmF1bHQgdmFsdWUgYXMgZGVmaW5lZCBpbiBDU1MuSG9va3MudGVtcGxhdGVzLiAqL1xyXG5cdFx0XHRcdFx0LyogTm90ZTogQ1NTIG51bGwtdmFsdWVzIGluY2x1ZGUgXCJub25lXCIsIFwiYXV0b1wiLCBhbmQgXCJ0cmFuc3BhcmVudFwiLiBUaGV5IG11c3QgYmUgY29udmVydGVkIGludG8gdGhlaXJcclxuXHRcdFx0XHRcdCB6ZXJvLXZhbHVlcyAoZS5nLiB0ZXh0U2hhZG93OiBcIm5vbmVcIiA9PT4gdGV4dFNoYWRvdzogXCIwcHggMHB4IDBweCBibGFja1wiKSBmb3IgaG9vayBtYW5pcHVsYXRpb24gdG8gcHJvY2VlZC4gKi9cclxuXHRcdFx0XHRcdGlmIChDU1MuVmFsdWVzLmlzQ1NTTnVsbFZhbHVlKHJvb3RQcm9wZXJ0eVZhbHVlKSkge1xyXG5cdFx0XHRcdFx0XHRyb290UHJvcGVydHlWYWx1ZSA9IENTUy5Ib29rcy50ZW1wbGF0ZXNbcm9vdFByb3BlcnR5XVsxXTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRyZXR1cm4gcm9vdFByb3BlcnR5VmFsdWU7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQvKiBFeHRyYWN0ZWQgdGhlIGhvb2sncyB2YWx1ZSBmcm9tIGl0cyByb290IHByb3BlcnR5J3MgdmFsdWUuIFRoaXMgaXMgdXNlZCB0byBnZXQgdGhlIHN0YXJ0aW5nIHZhbHVlIG9mIGFuIGFuaW1hdGluZyBob29rLiAqL1xyXG5cdFx0XHRcdGV4dHJhY3RWYWx1ZTogZnVuY3Rpb24oZnVsbEhvb2tOYW1lLCByb290UHJvcGVydHlWYWx1ZSkge1xyXG5cdFx0XHRcdFx0dmFyIGhvb2tEYXRhID0gQ1NTLkhvb2tzLnJlZ2lzdGVyZWRbZnVsbEhvb2tOYW1lXTtcclxuXHJcblx0XHRcdFx0XHRpZiAoaG9va0RhdGEpIHtcclxuXHRcdFx0XHRcdFx0dmFyIGhvb2tSb290ID0gaG9va0RhdGFbMF0sXHJcblx0XHRcdFx0XHRcdFx0XHRob29rUG9zaXRpb24gPSBob29rRGF0YVsxXTtcclxuXHJcblx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlID0gQ1NTLkhvb2tzLmNsZWFuUm9vdFByb3BlcnR5VmFsdWUoaG9va1Jvb3QsIHJvb3RQcm9wZXJ0eVZhbHVlKTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIFNwbGl0IHJvb3RQcm9wZXJ0eVZhbHVlIGludG8gaXRzIGNvbnN0aXR1ZW50IGhvb2sgdmFsdWVzIHRoZW4gZ3JhYiB0aGUgZGVzaXJlZCBob29rIGF0IGl0cyBzdGFuZGFyZCBwb3NpdGlvbi4gKi9cclxuXHRcdFx0XHRcdFx0cmV0dXJuIHJvb3RQcm9wZXJ0eVZhbHVlLnRvU3RyaW5nKCkubWF0Y2goQ1NTLlJlZ0V4LnZhbHVlU3BsaXQpW2hvb2tQb3NpdGlvbl07XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvKiBJZiB0aGUgcHJvdmlkZWQgZnVsbEhvb2tOYW1lIGlzbid0IGEgcmVnaXN0ZXJlZCBob29rLCByZXR1cm4gdGhlIHJvb3RQcm9wZXJ0eVZhbHVlIHRoYXQgd2FzIHBhc3NlZCBpbi4gKi9cclxuXHRcdFx0XHRcdFx0cmV0dXJuIHJvb3RQcm9wZXJ0eVZhbHVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0LyogSW5qZWN0IHRoZSBob29rJ3MgdmFsdWUgaW50byBpdHMgcm9vdCBwcm9wZXJ0eSdzIHZhbHVlLiBUaGlzIGlzIHVzZWQgdG8gcGllY2UgYmFjayB0b2dldGhlciB0aGUgcm9vdCBwcm9wZXJ0eVxyXG5cdFx0XHRcdCBvbmNlIFZlbG9jaXR5IGhhcyB1cGRhdGVkIG9uZSBvZiBpdHMgaW5kaXZpZHVhbGx5IGhvb2tlZCB2YWx1ZXMgdGhyb3VnaCB0d2VlbmluZy4gKi9cclxuXHRcdFx0XHRpbmplY3RWYWx1ZTogZnVuY3Rpb24oZnVsbEhvb2tOYW1lLCBob29rVmFsdWUsIHJvb3RQcm9wZXJ0eVZhbHVlKSB7XHJcblx0XHRcdFx0XHR2YXIgaG9va0RhdGEgPSBDU1MuSG9va3MucmVnaXN0ZXJlZFtmdWxsSG9va05hbWVdO1xyXG5cclxuXHRcdFx0XHRcdGlmIChob29rRGF0YSkge1xyXG5cdFx0XHRcdFx0XHR2YXIgaG9va1Jvb3QgPSBob29rRGF0YVswXSxcclxuXHRcdFx0XHRcdFx0XHRcdGhvb2tQb3NpdGlvbiA9IGhvb2tEYXRhWzFdLFxyXG5cdFx0XHRcdFx0XHRcdFx0cm9vdFByb3BlcnR5VmFsdWVQYXJ0cyxcclxuXHRcdFx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlVXBkYXRlZDtcclxuXHJcblx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlID0gQ1NTLkhvb2tzLmNsZWFuUm9vdFByb3BlcnR5VmFsdWUoaG9va1Jvb3QsIHJvb3RQcm9wZXJ0eVZhbHVlKTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIFNwbGl0IHJvb3RQcm9wZXJ0eVZhbHVlIGludG8gaXRzIGluZGl2aWR1YWwgaG9vayB2YWx1ZXMsIHJlcGxhY2UgdGhlIHRhcmdldGVkIHZhbHVlIHdpdGggaG9va1ZhbHVlLFxyXG5cdFx0XHRcdFx0XHQgdGhlbiByZWNvbnN0cnVjdCB0aGUgcm9vdFByb3BlcnR5VmFsdWUgc3RyaW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRyb290UHJvcGVydHlWYWx1ZVBhcnRzID0gcm9vdFByb3BlcnR5VmFsdWUudG9TdHJpbmcoKS5tYXRjaChDU1MuUmVnRXgudmFsdWVTcGxpdCk7XHJcblx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlUGFydHNbaG9va1Bvc2l0aW9uXSA9IGhvb2tWYWx1ZTtcclxuXHRcdFx0XHRcdFx0cm9vdFByb3BlcnR5VmFsdWVVcGRhdGVkID0gcm9vdFByb3BlcnR5VmFsdWVQYXJ0cy5qb2luKFwiIFwiKTtcclxuXHJcblx0XHRcdFx0XHRcdHJldHVybiByb290UHJvcGVydHlWYWx1ZVVwZGF0ZWQ7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvKiBJZiB0aGUgcHJvdmlkZWQgZnVsbEhvb2tOYW1lIGlzbid0IGEgcmVnaXN0ZXJlZCBob29rLCByZXR1cm4gdGhlIHJvb3RQcm9wZXJ0eVZhbHVlIHRoYXQgd2FzIHBhc3NlZCBpbi4gKi9cclxuXHRcdFx0XHRcdFx0cmV0dXJuIHJvb3RQcm9wZXJ0eVZhbHVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0IE5vcm1hbGl6YXRpb25zXHJcblx0XHRcdCAqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0LyogTm9ybWFsaXphdGlvbnMgc3RhbmRhcmRpemUgQ1NTIHByb3BlcnR5IG1hbmlwdWxhdGlvbiBieSBwb2xseWZpbGxpbmcgYnJvd3Nlci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgKGUuZy4gb3BhY2l0eSlcclxuXHRcdFx0IGFuZCByZWZvcm1hdHRpbmcgc3BlY2lhbCBwcm9wZXJ0aWVzIChlLmcuIGNsaXAsIHJnYmEpIHRvIGxvb2sgbGlrZSBzdGFuZGFyZCBvbmVzLiAqL1xyXG5cdFx0XHROb3JtYWxpemF0aW9uczoge1xyXG5cdFx0XHRcdC8qIE5vcm1hbGl6YXRpb25zIGFyZSBwYXNzZWQgYSBub3JtYWxpemF0aW9uIHRhcmdldCAoZWl0aGVyIHRoZSBwcm9wZXJ0eSdzIG5hbWUsIGl0cyBleHRyYWN0ZWQgdmFsdWUsIG9yIGl0cyBpbmplY3RlZCB2YWx1ZSksXHJcblx0XHRcdFx0IHRoZSB0YXJnZXRlZCBlbGVtZW50ICh3aGljaCBtYXkgbmVlZCB0byBiZSBxdWVyaWVkKSwgYW5kIHRoZSB0YXJnZXRlZCBwcm9wZXJ0eSB2YWx1ZS4gKi9cclxuXHRcdFx0XHRyZWdpc3RlcmVkOiB7XHJcblx0XHRcdFx0XHRjbGlwOiBmdW5jdGlvbih0eXBlLCBlbGVtZW50LCBwcm9wZXJ0eVZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdHN3aXRjaCAodHlwZSkge1xyXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJuYW1lXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gXCJjbGlwXCI7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBDbGlwIG5lZWRzIHRvIGJlIHVud3JhcHBlZCBhbmQgc3RyaXBwZWQgb2YgaXRzIGNvbW1hcyBkdXJpbmcgZXh0cmFjdGlvbi4gKi9cclxuXHRcdFx0XHRcdFx0XHRjYXNlIFwiZXh0cmFjdFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGV4dHJhY3RlZDtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBJZiBWZWxvY2l0eSBhbHNvIGV4dHJhY3RlZCB0aGlzIHZhbHVlLCBza2lwIGV4dHJhY3Rpb24uICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoQ1NTLlJlZ0V4LndyYXBwZWRWYWx1ZUFscmVhZHlFeHRyYWN0ZWQudGVzdChwcm9wZXJ0eVZhbHVlKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRleHRyYWN0ZWQgPSBwcm9wZXJ0eVZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogUmVtb3ZlIHRoZSBcInJlY3QoKVwiIHdyYXBwZXIuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGV4dHJhY3RlZCA9IHByb3BlcnR5VmFsdWUudG9TdHJpbmcoKS5tYXRjaChDU1MuUmVnRXgudmFsdWVVbndyYXApO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogU3RyaXAgb2ZmIGNvbW1hcy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0ZXh0cmFjdGVkID0gZXh0cmFjdGVkID8gZXh0cmFjdGVkWzFdLnJlcGxhY2UoLywoXFxzKyk/L2csIFwiIFwiKSA6IHByb3BlcnR5VmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGV4dHJhY3RlZDtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIENsaXAgbmVlZHMgdG8gYmUgcmUtd3JhcHBlZCBkdXJpbmcgaW5qZWN0aW9uLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJpbmplY3RcIjpcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBcInJlY3QoXCIgKyBwcm9wZXJ0eVZhbHVlICsgXCIpXCI7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRibHVyOiBmdW5jdGlvbih0eXBlLCBlbGVtZW50LCBwcm9wZXJ0eVZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdHN3aXRjaCAodHlwZSkge1xyXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJuYW1lXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gVmVsb2NpdHkuU3RhdGUuaXNGaXJlZm94ID8gXCJmaWx0ZXJcIiA6IFwiLXdlYmtpdC1maWx0ZXJcIjtcclxuXHRcdFx0XHRcdFx0XHRjYXNlIFwiZXh0cmFjdFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGV4dHJhY3RlZCA9IHBhcnNlRmxvYXQocHJvcGVydHlWYWx1ZSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogSWYgZXh0cmFjdGVkIGlzIE5hTiwgbWVhbmluZyB0aGUgdmFsdWUgaXNuJ3QgYWxyZWFkeSBleHRyYWN0ZWQuICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIShleHRyYWN0ZWQgfHwgZXh0cmFjdGVkID09PSAwKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgYmx1ckNvbXBvbmVudCA9IHByb3BlcnR5VmFsdWUudG9TdHJpbmcoKS5tYXRjaCgvYmx1clxcKChbMC05XStbQS16XSspXFwpL2kpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogSWYgdGhlIGZpbHRlciBzdHJpbmcgaGFkIGEgYmx1ciBjb21wb25lbnQsIHJldHVybiBqdXN0IHRoZSBibHVyIHZhbHVlIGFuZCB1bml0IHR5cGUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChibHVyQ29tcG9uZW50KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXh0cmFjdGVkID0gYmx1ckNvbXBvbmVudFsxXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBJZiB0aGUgY29tcG9uZW50IGRvZXNuJ3QgZXhpc3QsIGRlZmF1bHQgYmx1ciB0byAwLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGV4dHJhY3RlZCA9IDA7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZXh0cmFjdGVkO1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogQmx1ciBuZWVkcyB0byBiZSByZS13cmFwcGVkIGR1cmluZyBpbmplY3Rpb24uICovXHJcblx0XHRcdFx0XHRcdFx0Y2FzZSBcImluamVjdFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0LyogRm9yIHRoZSBibHVyIGVmZmVjdCB0byBiZSBmdWxseSBkZS1hcHBsaWVkLCBpdCBuZWVkcyB0byBiZSBzZXQgdG8gXCJub25lXCIgaW5zdGVhZCBvZiAwLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFwYXJzZUZsb2F0KHByb3BlcnR5VmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBcIm5vbmVcIjtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBcImJsdXIoXCIgKyBwcm9wZXJ0eVZhbHVlICsgXCIpXCI7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHQvKiA8PUlFOCBkbyBub3Qgc3VwcG9ydCB0aGUgc3RhbmRhcmQgb3BhY2l0eSBwcm9wZXJ0eS4gVGhleSB1c2UgZmlsdGVyOmFscGhhKG9wYWNpdHk9SU5UKSBpbnN0ZWFkLiAqL1xyXG5cdFx0XHRcdFx0b3BhY2l0eTogZnVuY3Rpb24odHlwZSwgZWxlbWVudCwgcHJvcGVydHlWYWx1ZSkge1xyXG5cdFx0XHRcdFx0XHRpZiAoSUUgPD0gOCkge1xyXG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAodHlwZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIm5hbWVcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFwiZmlsdGVyXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiZXh0cmFjdFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiA8PUlFOCByZXR1cm4gYSBcImZpbHRlclwiIHZhbHVlIG9mIFwiYWxwaGEob3BhY2l0eT1cXGR7MSwzfSlcIi5cclxuXHRcdFx0XHRcdFx0XHRcdFx0IEV4dHJhY3QgdGhlIHZhbHVlIGFuZCBjb252ZXJ0IGl0IHRvIGEgZGVjaW1hbCB2YWx1ZSB0byBtYXRjaCB0aGUgc3RhbmRhcmQgQ1NTIG9wYWNpdHkgcHJvcGVydHkncyBmb3JtYXR0aW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXh0cmFjdGVkID0gcHJvcGVydHlWYWx1ZS50b1N0cmluZygpLm1hdGNoKC9hbHBoYVxcKG9wYWNpdHk9KC4qKVxcKS9pKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChleHRyYWN0ZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBDb252ZXJ0IHRvIGRlY2ltYWwgdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IGV4dHJhY3RlZFsxXSAvIDEwMDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBXaGVuIGV4dHJhY3Rpbmcgb3BhY2l0eSwgZGVmYXVsdCB0byAxIHNpbmNlIGEgbnVsbCB2YWx1ZSBtZWFucyBvcGFjaXR5IGhhc24ndCBiZWVuIHNldC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gMTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHByb3BlcnR5VmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiaW5qZWN0XCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIE9wYWNpZmllZCBlbGVtZW50cyBhcmUgcmVxdWlyZWQgdG8gaGF2ZSB0aGVpciB6b29tIHByb3BlcnR5IHNldCB0byBhIG5vbi16ZXJvIHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbGVtZW50LnN0eWxlLnpvb20gPSAxO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogU2V0dGluZyB0aGUgZmlsdGVyIHByb3BlcnR5IG9uIGVsZW1lbnRzIHdpdGggY2VydGFpbiBmb250IHByb3BlcnR5IGNvbWJpbmF0aW9ucyBjYW4gcmVzdWx0IGluIGFcclxuXHRcdFx0XHRcdFx0XHRcdFx0IGhpZ2hseSB1bmFwcGVhbGluZyB1bHRyYS1ib2xkaW5nIGVmZmVjdC4gVGhlcmUncyBubyB3YXkgdG8gcmVtZWR5IHRoaXMgdGhyb3VnaG91dCBhIHR3ZWVuLCBidXQgZHJvcHBpbmcgdGhlXHJcblx0XHRcdFx0XHRcdFx0XHRcdCB2YWx1ZSBhbHRvZ2V0aGVyICh3aGVuIG9wYWNpdHkgaGl0cyAxKSBhdCBsZWFzdHMgZW5zdXJlcyB0aGF0IHRoZSBnbGl0Y2ggaXMgZ29uZSBwb3N0LXR3ZWVuaW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocGFyc2VGbG9hdChwcm9wZXJ0eVZhbHVlKSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogQXMgcGVyIHRoZSBmaWx0ZXIgcHJvcGVydHkncyBzcGVjLCBjb252ZXJ0IHRoZSBkZWNpbWFsIHZhbHVlIHRvIGEgd2hvbGUgbnVtYmVyIGFuZCB3cmFwIHRoZSB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gXCJhbHBoYShvcGFjaXR5PVwiICsgcGFyc2VJbnQocGFyc2VGbG9hdChwcm9wZXJ0eVZhbHVlKSAqIDEwMCwgMTApICsgXCIpXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0LyogV2l0aCBhbGwgb3RoZXIgYnJvd3NlcnMsIG5vcm1hbGl6YXRpb24gaXMgbm90IHJlcXVpcmVkOyByZXR1cm4gdGhlIHNhbWUgdmFsdWVzIHRoYXQgd2VyZSBwYXNzZWQgaW4uICovXHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwibmFtZVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gXCJvcGFjaXR5XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiZXh0cmFjdFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcHJvcGVydHlWYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJpbmplY3RcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHByb3BlcnR5VmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgQmF0Y2hlZCBSZWdpc3RyYXRpb25zXHJcblx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKiBOb3RlOiBCYXRjaGVkIG5vcm1hbGl6YXRpb25zIGV4dGVuZCB0aGUgQ1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWQgb2JqZWN0LiAqL1xyXG5cdFx0XHRcdHJlZ2lzdGVyOiBmdW5jdGlvbigpIHtcclxuXHJcblx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdCBUcmFuc2Zvcm1zXHJcblx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0LyogVHJhbnNmb3JtcyBhcmUgdGhlIHN1YnByb3BlcnRpZXMgY29udGFpbmVkIGJ5IHRoZSBDU1MgXCJ0cmFuc2Zvcm1cIiBwcm9wZXJ0eS4gVHJhbnNmb3JtcyBtdXN0IHVuZGVyZ28gbm9ybWFsaXphdGlvblxyXG5cdFx0XHRcdFx0IHNvIHRoYXQgdGhleSBjYW4gYmUgcmVmZXJlbmNlZCBpbiBhIHByb3BlcnRpZXMgbWFwIGJ5IHRoZWlyIGluZGl2aWR1YWwgbmFtZXMuICovXHJcblx0XHRcdFx0XHQvKiBOb3RlOiBXaGVuIHRyYW5zZm9ybXMgYXJlIFwic2V0XCIsIHRoZXkgYXJlIGFjdHVhbGx5IGFzc2lnbmVkIHRvIGEgcGVyLWVsZW1lbnQgdHJhbnNmb3JtQ2FjaGUuIFdoZW4gYWxsIHRyYW5zZm9ybVxyXG5cdFx0XHRcdFx0IHNldHRpbmcgaXMgY29tcGxldGUgY29tcGxldGUsIENTUy5mbHVzaFRyYW5zZm9ybUNhY2hlKCkgbXVzdCBiZSBtYW51YWxseSBjYWxsZWQgdG8gZmx1c2ggdGhlIHZhbHVlcyB0byB0aGUgRE9NLlxyXG5cdFx0XHRcdFx0IFRyYW5zZm9ybSBzZXR0aW5nIGlzIGJhdGNoZWQgaW4gdGhpcyB3YXkgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZTogdGhlIHRyYW5zZm9ybSBzdHlsZSBvbmx5IG5lZWRzIHRvIGJlIHVwZGF0ZWRcclxuXHRcdFx0XHRcdCBvbmNlIHdoZW4gbXVsdGlwbGUgdHJhbnNmb3JtIHN1YnByb3BlcnRpZXMgYXJlIGJlaW5nIGFuaW1hdGVkIHNpbXVsdGFuZW91c2x5LiAqL1xyXG5cdFx0XHRcdFx0LyogTm90ZTogSUU5IGFuZCBBbmRyb2lkIEdpbmdlcmJyZWFkIGhhdmUgc3VwcG9ydCBmb3IgMkQgLS0gYnV0IG5vdCAzRCAtLSB0cmFuc2Zvcm1zLiBTaW5jZSBhbmltYXRpbmcgdW5zdXBwb3J0ZWRcclxuXHRcdFx0XHRcdCB0cmFuc2Zvcm0gcHJvcGVydGllcyByZXN1bHRzIGluIHRoZSBicm93c2VyIGlnbm9yaW5nIHRoZSAqZW50aXJlKiB0cmFuc2Zvcm0gc3RyaW5nLCB3ZSBwcmV2ZW50IHRoZXNlIDNEIHZhbHVlc1xyXG5cdFx0XHRcdFx0IGZyb20gYmVpbmcgbm9ybWFsaXplZCBmb3IgdGhlc2UgYnJvd3NlcnMgc28gdGhhdCB0d2VlbmluZyBza2lwcyB0aGVzZSBwcm9wZXJ0aWVzIGFsdG9nZXRoZXJcclxuXHRcdFx0XHRcdCAoc2luY2UgaXQgd2lsbCBpZ25vcmUgdGhlbSBhcyBiZWluZyB1bnN1cHBvcnRlZCBieSB0aGUgYnJvd3Nlci4pICovXHJcblx0XHRcdFx0XHRpZiAoKCFJRSB8fCBJRSA+IDkpICYmICFWZWxvY2l0eS5TdGF0ZS5pc0dpbmdlcmJyZWFkKSB7XHJcblx0XHRcdFx0XHRcdC8qIE5vdGU6IFNpbmNlIHRoZSBzdGFuZGFsb25lIENTUyBcInBlcnNwZWN0aXZlXCIgcHJvcGVydHkgYW5kIHRoZSBDU1MgdHJhbnNmb3JtIFwicGVyc3BlY3RpdmVcIiBzdWJwcm9wZXJ0eVxyXG5cdFx0XHRcdFx0XHQgc2hhcmUgdGhlIHNhbWUgbmFtZSwgdGhlIGxhdHRlciBpcyBnaXZlbiBhIHVuaXF1ZSB0b2tlbiB3aXRoaW4gVmVsb2NpdHk6IFwidHJhbnNmb3JtUGVyc3BlY3RpdmVcIi4gKi9cclxuXHRcdFx0XHRcdFx0Q1NTLkxpc3RzLnRyYW5zZm9ybXNCYXNlID0gQ1NTLkxpc3RzLnRyYW5zZm9ybXNCYXNlLmNvbmNhdChDU1MuTGlzdHMudHJhbnNmb3JtczNEKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IENTUy5MaXN0cy50cmFuc2Zvcm1zQmFzZS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHQvKiBXcmFwIHRoZSBkeW5hbWljYWxseSBnZW5lcmF0ZWQgbm9ybWFsaXphdGlvbiBmdW5jdGlvbiBpbiBhIG5ldyBzY29wZSBzbyB0aGF0IHRyYW5zZm9ybU5hbWUncyB2YWx1ZSBpc1xyXG5cdFx0XHRcdFx0XHQgcGFpcmVkIHdpdGggaXRzIHJlc3BlY3RpdmUgZnVuY3Rpb24uIChPdGhlcndpc2UsIGFsbCBmdW5jdGlvbnMgd291bGQgdGFrZSB0aGUgZmluYWwgZm9yIGxvb3AncyB0cmFuc2Zvcm1OYW1lLikgKi9cclxuXHRcdFx0XHRcdFx0KGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHRcdHZhciB0cmFuc2Zvcm1OYW1lID0gQ1NTLkxpc3RzLnRyYW5zZm9ybXNCYXNlW2ldO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRDU1MuTm9ybWFsaXphdGlvbnMucmVnaXN0ZXJlZFt0cmFuc2Zvcm1OYW1lXSA9IGZ1bmN0aW9uKHR5cGUsIGVsZW1lbnQsIHByb3BlcnR5VmFsdWUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHN3aXRjaCAodHlwZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBUaGUgbm9ybWFsaXplZCBwcm9wZXJ0eSBuYW1lIGlzIHRoZSBwYXJlbnQgXCJ0cmFuc2Zvcm1cIiBwcm9wZXJ0eSAtLSB0aGUgcHJvcGVydHkgdGhhdCBpcyBhY3R1YWxseSBzZXQgaW4gQ1NTLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwibmFtZVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBcInRyYW5zZm9ybVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIFRyYW5zZm9ybSB2YWx1ZXMgYXJlIGNhY2hlZCBvbnRvIGEgcGVyLWVsZW1lbnQgdHJhbnNmb3JtQ2FjaGUgb2JqZWN0LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiZXh0cmFjdFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIElmIHRoaXMgdHJhbnNmb3JtIGhhcyB5ZXQgdG8gYmUgYXNzaWduZWQgYSB2YWx1ZSwgcmV0dXJuIGl0cyBudWxsIHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChEYXRhKGVsZW1lbnQpID09PSB1bmRlZmluZWQgfHwgRGF0YShlbGVtZW50KS50cmFuc2Zvcm1DYWNoZVt0cmFuc2Zvcm1OYW1lXSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBTY2FsZSBDU1MuTGlzdHMudHJhbnNmb3Jtc0Jhc2UgZGVmYXVsdCB0byAxIHdoZXJlYXMgYWxsIG90aGVyIHRyYW5zZm9ybSBwcm9wZXJ0aWVzIGRlZmF1bHQgdG8gMC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiAvXnNjYWxlL2kudGVzdCh0cmFuc2Zvcm1OYW1lKSA/IDEgOiAwO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogV2hlbiB0cmFuc2Zvcm0gdmFsdWVzIGFyZSBzZXQsIHRoZXkgYXJlIHdyYXBwZWQgaW4gcGFyZW50aGVzZXMgYXMgcGVyIHRoZSBDU1Mgc3BlYy5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCBUaHVzLCB3aGVuIGV4dHJhY3RpbmcgdGhlaXIgdmFsdWVzIChmb3IgdHdlZW4gY2FsY3VsYXRpb25zKSwgd2Ugc3RyaXAgb2ZmIHRoZSBwYXJlbnRoZXNlcy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIERhdGEoZWxlbWVudCkudHJhbnNmb3JtQ2FjaGVbdHJhbnNmb3JtTmFtZV0ucmVwbGFjZSgvWygpXS9nLCBcIlwiKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcImluamVjdFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBpbnZhbGlkID0gZmFsc2U7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIElmIGFuIGluZGl2aWR1YWwgdHJhbnNmb3JtIHByb3BlcnR5IGNvbnRhaW5zIGFuIHVuc3VwcG9ydGVkIHVuaXQgdHlwZSwgdGhlIGJyb3dzZXIgaWdub3JlcyB0aGUgKmVudGlyZSogdHJhbnNmb3JtIHByb3BlcnR5LlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCBUaHVzLCBwcm90ZWN0IHVzZXJzIGZyb20gdGhlbXNlbHZlcyBieSBza2lwcGluZyBzZXR0aW5nIGZvciB0cmFuc2Zvcm0gdmFsdWVzIHN1cHBsaWVkIHdpdGggaW52YWxpZCB1bml0IHR5cGVzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIFN3aXRjaCBvbiB0aGUgYmFzZSB0cmFuc2Zvcm0gdHlwZTsgaWdub3JlIHRoZSBheGlzIGJ5IHJlbW92aW5nIHRoZSBsYXN0IGxldHRlciBmcm9tIHRoZSB0cmFuc2Zvcm0ncyBuYW1lLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN3aXRjaCAodHJhbnNmb3JtTmFtZS5zdWJzdHIoMCwgdHJhbnNmb3JtTmFtZS5sZW5ndGggLSAxKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogV2hpdGVsaXN0IHVuaXQgdHlwZXMgZm9yIGVhY2ggdHJhbnNmb3JtLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcInRyYW5zbGF0ZVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbnZhbGlkID0gIS8oJXxweHxlbXxyZW18dnd8dmh8XFxkKSQvaS50ZXN0KHByb3BlcnR5VmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogU2luY2UgYW4gYXhpcy1mcmVlIFwic2NhbGVcIiBwcm9wZXJ0eSBpcyBzdXBwb3J0ZWQgYXMgd2VsbCwgYSBsaXR0bGUgaGFjayBpcyB1c2VkIGhlcmUgdG8gZGV0ZWN0IGl0IGJ5IGNob3BwaW5nIG9mZiBpdHMgbGFzdCBsZXR0ZXIuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwic2NhbFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcInNjYWxlXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIENocm9tZSBvbiBBbmRyb2lkIGhhcyBhIGJ1ZyBpbiB3aGljaCBzY2FsZWQgZWxlbWVudHMgYmx1ciBpZiB0aGVpciBpbml0aWFsIHNjYWxlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCB2YWx1ZSBpcyBiZWxvdyAxICh3aGljaCBjYW4gaGFwcGVuIHdpdGggZm9yY2VmZWVkaW5nKS4gVGh1cywgd2UgZGV0ZWN0IGEgeWV0LXVuc2V0IHNjYWxlIHByb3BlcnR5XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCBhbmQgZW5zdXJlIHRoYXQgaXRzIGZpcnN0IHZhbHVlIGlzIGFsd2F5cyAxLiBNb3JlIGluZm86IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTA0MTc4OTAvY3NzMy1hbmltYXRpb25zLXdpdGgtdHJhbnNmb3JtLWNhdXNlcy1ibHVycmVkLWVsZW1lbnRzLW9uLXdlYmtpdC8xMDQxNzk2MiMxMDQxNzk2MiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoVmVsb2NpdHkuU3RhdGUuaXNBbmRyb2lkICYmIERhdGEoZWxlbWVudCkudHJhbnNmb3JtQ2FjaGVbdHJhbnNmb3JtTmFtZV0gPT09IHVuZGVmaW5lZCAmJiBwcm9wZXJ0eVZhbHVlIDwgMSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSAxO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbnZhbGlkID0gIS8oXFxkKSQvaS50ZXN0KHByb3BlcnR5VmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJza2V3XCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGludmFsaWQgPSAhLyhkZWd8XFxkKSQvaS50ZXN0KHByb3BlcnR5VmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJyb3RhdGVcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW52YWxpZCA9ICEvKGRlZ3xcXGQpJC9pLnRlc3QocHJvcGVydHlWYWx1ZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFpbnZhbGlkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBBcyBwZXIgdGhlIENTUyBzcGVjLCB3cmFwIHRoZSB2YWx1ZSBpbiBwYXJlbnRoZXNlcy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdERhdGEoZWxlbWVudCkudHJhbnNmb3JtQ2FjaGVbdHJhbnNmb3JtTmFtZV0gPSBcIihcIiArIHByb3BlcnR5VmFsdWUgKyBcIilcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIEFsdGhvdWdoIHRoZSB2YWx1ZSBpcyBzZXQgb24gdGhlIHRyYW5zZm9ybUNhY2hlIG9iamVjdCwgcmV0dXJuIHRoZSBuZXdseS11cGRhdGVkIHZhbHVlIGZvciB0aGUgY2FsbGluZyBjb2RlIHRvIHByb2Nlc3MgYXMgbm9ybWFsLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBEYXRhKGVsZW1lbnQpLnRyYW5zZm9ybUNhY2hlW3RyYW5zZm9ybU5hbWVdO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdH0pKCk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyoqKioqKioqKioqKipcclxuXHRcdFx0XHRcdCBDb2xvcnNcclxuXHRcdFx0XHRcdCAqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdC8qIFNpbmNlIFZlbG9jaXR5IG9ubHkgYW5pbWF0ZXMgYSBzaW5nbGUgbnVtZXJpYyB2YWx1ZSBwZXIgcHJvcGVydHksIGNvbG9yIGFuaW1hdGlvbiBpcyBhY2hpZXZlZCBieSBob29raW5nIHRoZSBpbmRpdmlkdWFsIFJHQkEgY29tcG9uZW50cyBvZiBDU1MgY29sb3IgcHJvcGVydGllcy5cclxuXHRcdFx0XHRcdCBBY2NvcmRpbmdseSwgY29sb3IgdmFsdWVzIG11c3QgYmUgbm9ybWFsaXplZCAoZS5nLiBcIiNmZjAwMDBcIiwgXCJyZWRcIiwgYW5kIFwicmdiKDI1NSwgMCwgMClcIiA9PT4gXCIyNTUgMCAwIDFcIikgc28gdGhhdCB0aGVpciBjb21wb25lbnRzIGNhbiBiZSBpbmplY3RlZC9leHRyYWN0ZWQgYnkgQ1NTLkhvb2tzIGxvZ2ljLiAqL1xyXG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBDU1MuTGlzdHMuY29sb3JzLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdC8qIFdyYXAgdGhlIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBub3JtYWxpemF0aW9uIGZ1bmN0aW9uIGluIGEgbmV3IHNjb3BlIHNvIHRoYXQgY29sb3JOYW1lJ3MgdmFsdWUgaXMgcGFpcmVkIHdpdGggaXRzIHJlc3BlY3RpdmUgZnVuY3Rpb24uXHJcblx0XHRcdFx0XHRcdCAoT3RoZXJ3aXNlLCBhbGwgZnVuY3Rpb25zIHdvdWxkIHRha2UgdGhlIGZpbmFsIGZvciBsb29wJ3MgY29sb3JOYW1lLikgKi9cclxuXHRcdFx0XHRcdFx0KGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHRcdHZhciBjb2xvck5hbWUgPSBDU1MuTGlzdHMuY29sb3JzW2pdO1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBOb3RlOiBJbiBJRTw9OCwgd2hpY2ggc3VwcG9ydCByZ2IgYnV0IG5vdCByZ2JhLCBjb2xvciBwcm9wZXJ0aWVzIGFyZSByZXZlcnRlZCB0byByZ2IgYnkgc3RyaXBwaW5nIG9mZiB0aGUgYWxwaGEgY29tcG9uZW50LiAqL1xyXG5cdFx0XHRcdFx0XHRcdENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkW2NvbG9yTmFtZV0gPSBmdW5jdGlvbih0eXBlLCBlbGVtZW50LCBwcm9wZXJ0eVZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRzd2l0Y2ggKHR5cGUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIm5hbWVcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gY29sb3JOYW1lO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIENvbnZlcnQgYWxsIGNvbG9yIHZhbHVlcyBpbnRvIHRoZSByZ2IgZm9ybWF0LiAoT2xkIElFIGNhbiByZXR1cm4gaGV4IHZhbHVlcyBhbmQgY29sb3IgbmFtZXMgaW5zdGVhZCBvZiByZ2IvcmdiYS4pICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJleHRyYWN0XCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGV4dHJhY3RlZDtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogSWYgdGhlIGNvbG9yIGlzIGFscmVhZHkgaW4gaXRzIGhvb2thYmxlIGZvcm0gKGUuZy4gXCIyNTUgMjU1IDI1NSAxXCIpIGR1ZSB0byBoYXZpbmcgYmVlbiBwcmV2aW91c2x5IGV4dHJhY3RlZCwgc2tpcCBleHRyYWN0aW9uLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChDU1MuUmVnRXgud3JhcHBlZFZhbHVlQWxyZWFkeUV4dHJhY3RlZC50ZXN0KHByb3BlcnR5VmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRleHRyYWN0ZWQgPSBwcm9wZXJ0eVZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgY29udmVydGVkLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbG9yTmFtZXMgPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRibGFjazogXCJyZ2IoMCwgMCwgMClcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJsdWU6IFwicmdiKDAsIDAsIDI1NSlcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGdyYXk6IFwicmdiKDEyOCwgMTI4LCAxMjgpXCIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRncmVlbjogXCJyZ2IoMCwgMTI4LCAwKVwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVkOiBcInJnYigyNTUsIDAsIDApXCIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aGl0ZTogXCJyZ2IoMjU1LCAyNTUsIDI1NSlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogQ29udmVydCBjb2xvciBuYW1lcyB0byByZ2IuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoL15bQS16XSskL2kudGVzdChwcm9wZXJ0eVZhbHVlKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoY29sb3JOYW1lc1twcm9wZXJ0eVZhbHVlXSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udmVydGVkID0gY29sb3JOYW1lc1twcm9wZXJ0eVZhbHVlXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBJZiBhbiB1bm1hdGNoZWQgY29sb3IgbmFtZSBpcyBwcm92aWRlZCwgZGVmYXVsdCB0byBibGFjay4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZWQgPSBjb2xvck5hbWVzLmJsYWNrO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIENvbnZlcnQgaGV4IHZhbHVlcyB0byByZ2IuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKENTUy5SZWdFeC5pc0hleC50ZXN0KHByb3BlcnR5VmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlZCA9IFwicmdiKFwiICsgQ1NTLlZhbHVlcy5oZXhUb1JnYihwcm9wZXJ0eVZhbHVlKS5qb2luKFwiIFwiKSArIFwiKVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBJZiB0aGUgcHJvdmlkZWQgY29sb3IgZG9lc24ndCBtYXRjaCBhbnkgb2YgdGhlIGFjY2VwdGVkIGNvbG9yIGZvcm1hdHMsIGRlZmF1bHQgdG8gYmxhY2suICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoL15yZ2JhP1xcKC9pLnRlc3QocHJvcGVydHlWYWx1ZSkpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlZCA9IGNvbG9yTmFtZXMuYmxhY2s7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogUmVtb3ZlIHRoZSBzdXJyb3VuZGluZyBcInJnYi9yZ2JhKClcIiBzdHJpbmcgdGhlbiByZXBsYWNlIGNvbW1hcyB3aXRoIHNwYWNlcyBhbmQgc3RyaXBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCByZXBlYXRlZCBzcGFjZXMgKGluIGNhc2UgdGhlIHZhbHVlIGluY2x1ZGVkIHNwYWNlcyB0byBiZWdpbiB3aXRoKS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGV4dHJhY3RlZCA9IChjb252ZXJ0ZWQgfHwgcHJvcGVydHlWYWx1ZSkudG9TdHJpbmcoKS5tYXRjaChDU1MuUmVnRXgudmFsdWVVbndyYXApWzFdLnJlcGxhY2UoLywoXFxzKyk/L2csIFwiIFwiKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIFNvIGxvbmcgYXMgdGhpcyBpc24ndCA8PUlFOCwgYWRkIGEgZm91cnRoIChhbHBoYSkgY29tcG9uZW50IGlmIGl0J3MgbWlzc2luZyBhbmQgZGVmYXVsdCBpdCB0byAxICh2aXNpYmxlKS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoKCFJRSB8fCBJRSA+IDgpICYmIGV4dHJhY3RlZC5zcGxpdChcIiBcIikubGVuZ3RoID09PSAzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRleHRyYWN0ZWQgKz0gXCIgMVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGV4dHJhY3RlZDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcImluamVjdFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIElmIHdlIGhhdmUgYSBwYXR0ZXJuIHRoZW4gaXQgbWlnaHQgYWxyZWFkeSBoYXZlIHRoZSByaWdodCB2YWx1ZXMgKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoL15yZ2IvLnRlc3QocHJvcGVydHlWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBwcm9wZXJ0eVZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogSWYgdGhpcyBpcyBJRTw9OCBhbmQgYW4gYWxwaGEgY29tcG9uZW50IGV4aXN0cywgc3RyaXAgaXQgb2ZmLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChJRSA8PSA4KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocHJvcGVydHlWYWx1ZS5zcGxpdChcIiBcIikubGVuZ3RoID09PSA0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSBwcm9wZXJ0eVZhbHVlLnNwbGl0KC9cXHMrLykuc2xpY2UoMCwgMykuam9pbihcIiBcIik7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBPdGhlcndpc2UsIGFkZCBhIGZvdXJ0aCAoYWxwaGEpIGNvbXBvbmVudCBpZiBpdCdzIG1pc3NpbmcgYW5kIGRlZmF1bHQgaXQgdG8gMSAodmlzaWJsZSkuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChwcm9wZXJ0eVZhbHVlLnNwbGl0KFwiIFwiKS5sZW5ndGggPT09IDMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgKz0gXCIgMVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogUmUtaW5zZXJ0IHRoZSBicm93c2VyLWFwcHJvcHJpYXRlIHdyYXBwZXIoXCJyZ2IvcmdiYSgpXCIpLCBpbnNlcnQgY29tbWFzLCBhbmQgc3RyaXAgb2ZmIGRlY2ltYWwgdW5pdHNcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgb24gYWxsIHZhbHVlcyBidXQgdGhlIGZvdXJ0aCAoUiwgRywgYW5kIEIgb25seSBhY2NlcHQgd2hvbGUgbnVtYmVycykuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChJRSA8PSA4ID8gXCJyZ2JcIiA6IFwicmdiYVwiKSArIFwiKFwiICsgcHJvcGVydHlWYWx1ZS5yZXBsYWNlKC9cXHMrL2csIFwiLFwiKS5yZXBsYWNlKC9cXC4oXFxkKSsoPz0sKS9nLCBcIlwiKSArIFwiKVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdH0pKCk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyoqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHQgRGltZW5zaW9uc1xyXG5cdFx0XHRcdFx0ICoqKioqKioqKioqKioqL1xyXG5cdFx0XHRcdFx0ZnVuY3Rpb24gYXVnbWVudERpbWVuc2lvbihuYW1lLCBlbGVtZW50LCB3YW50SW5uZXIpIHtcclxuXHRcdFx0XHRcdFx0dmFyIGlzQm9yZGVyQm94ID0gQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJib3hTaXppbmdcIikudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSBcImJvcmRlci1ib3hcIjtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChpc0JvcmRlckJveCA9PT0gKHdhbnRJbm5lciB8fCBmYWxzZSkpIHtcclxuXHRcdFx0XHRcdFx0XHQvKiBpbiBib3gtc2l6aW5nIG1vZGUsIHRoZSBDU1Mgd2lkdGggLyBoZWlnaHQgYWNjZXNzb3JzIGFscmVhZHkgZ2l2ZSB0aGUgb3V0ZXJXaWR0aCAvIG91dGVySGVpZ2h0LiAqL1xyXG5cdFx0XHRcdFx0XHRcdHZhciBpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0YXVnbWVudCA9IDAsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHNpZGVzID0gbmFtZSA9PT0gXCJ3aWR0aFwiID8gW1wiTGVmdFwiLCBcIlJpZ2h0XCJdIDogW1wiVG9wXCIsIFwiQm90dG9tXCJdLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmaWVsZHMgPSBbXCJwYWRkaW5nXCIgKyBzaWRlc1swXSwgXCJwYWRkaW5nXCIgKyBzaWRlc1sxXSwgXCJib3JkZXJcIiArIHNpZGVzWzBdICsgXCJXaWR0aFwiLCBcImJvcmRlclwiICsgc2lkZXNbMV0gKyBcIldpZHRoXCJdO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IHBhcnNlRmxvYXQoQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgZmllbGRzW2ldKSk7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIWlzTmFOKHZhbHVlKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhdWdtZW50ICs9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gd2FudElubmVyID8gLWF1Z21lbnQgOiBhdWdtZW50O1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHJldHVybiAwO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZnVuY3Rpb24gZ2V0RGltZW5zaW9uKG5hbWUsIHdhbnRJbm5lcikge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24odHlwZSwgZWxlbWVudCwgcHJvcGVydHlWYWx1ZSkge1xyXG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAodHlwZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIm5hbWVcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG5hbWU7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiZXh0cmFjdFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcGFyc2VGbG9hdChwcm9wZXJ0eVZhbHVlKSArIGF1Z21lbnREaW1lbnNpb24obmFtZSwgZWxlbWVudCwgd2FudElubmVyKTtcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJpbmplY3RcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChwYXJzZUZsb2F0KHByb3BlcnR5VmFsdWUpIC0gYXVnbWVudERpbWVuc2lvbihuYW1lLCBlbGVtZW50LCB3YW50SW5uZXIpKSArIFwicHhcIjtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRDU1MuTm9ybWFsaXphdGlvbnMucmVnaXN0ZXJlZC5pbm5lcldpZHRoID0gZ2V0RGltZW5zaW9uKFwid2lkdGhcIiwgdHJ1ZSk7XHJcblx0XHRcdFx0XHRDU1MuTm9ybWFsaXphdGlvbnMucmVnaXN0ZXJlZC5pbm5lckhlaWdodCA9IGdldERpbWVuc2lvbihcImhlaWdodFwiLCB0cnVlKTtcclxuXHRcdFx0XHRcdENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkLm91dGVyV2lkdGggPSBnZXREaW1lbnNpb24oXCJ3aWR0aFwiKTtcclxuXHRcdFx0XHRcdENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkLm91dGVySGVpZ2h0ID0gZ2V0RGltZW5zaW9uKFwiaGVpZ2h0XCIpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgQ1NTIFByb3BlcnR5IE5hbWVzXHJcblx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHROYW1lczoge1xyXG5cdFx0XHRcdC8qIENhbWVsY2FzZSBhIHByb3BlcnR5IG5hbWUgaW50byBpdHMgSmF2YVNjcmlwdCBub3RhdGlvbiAoZS5nLiBcImJhY2tncm91bmQtY29sb3JcIiA9PT4gXCJiYWNrZ3JvdW5kQ29sb3JcIikuXHJcblx0XHRcdFx0IENhbWVsY2FzaW5nIGlzIHVzZWQgdG8gbm9ybWFsaXplIHByb3BlcnR5IG5hbWVzIGJldHdlZW4gYW5kIGFjcm9zcyBjYWxscy4gKi9cclxuXHRcdFx0XHRjYW1lbENhc2U6IGZ1bmN0aW9uKHByb3BlcnR5KSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gcHJvcGVydHkucmVwbGFjZSgvLShcXHcpL2csIGZ1bmN0aW9uKG1hdGNoLCBzdWJNYXRjaCkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gc3ViTWF0Y2gudG9VcHBlckNhc2UoKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0LyogRm9yIFNWRyBlbGVtZW50cywgc29tZSBwcm9wZXJ0aWVzIChuYW1lbHksIGRpbWVuc2lvbmFsIG9uZXMpIGFyZSBHRVQvU0VUIHZpYSB0aGUgZWxlbWVudCdzIEhUTUwgYXR0cmlidXRlcyAoaW5zdGVhZCBvZiB2aWEgQ1NTIHN0eWxlcykuICovXHJcblx0XHRcdFx0U1ZHQXR0cmlidXRlOiBmdW5jdGlvbihwcm9wZXJ0eSkge1xyXG5cdFx0XHRcdFx0dmFyIFNWR0F0dHJpYnV0ZXMgPSBcIndpZHRofGhlaWdodHx4fHl8Y3h8Y3l8cnxyeHxyeXx4MXx4Mnx5MXx5MlwiO1xyXG5cclxuXHRcdFx0XHRcdC8qIENlcnRhaW4gYnJvd3NlcnMgcmVxdWlyZSBhbiBTVkcgdHJhbnNmb3JtIHRvIGJlIGFwcGxpZWQgYXMgYW4gYXR0cmlidXRlLiAoT3RoZXJ3aXNlLCBhcHBsaWNhdGlvbiB2aWEgQ1NTIGlzIHByZWZlcmFibGUgZHVlIHRvIDNEIHN1cHBvcnQuKSAqL1xyXG5cdFx0XHRcdFx0aWYgKElFIHx8IChWZWxvY2l0eS5TdGF0ZS5pc0FuZHJvaWQgJiYgIVZlbG9jaXR5LlN0YXRlLmlzQ2hyb21lKSkge1xyXG5cdFx0XHRcdFx0XHRTVkdBdHRyaWJ1dGVzICs9IFwifHRyYW5zZm9ybVwiO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHJldHVybiBuZXcgUmVnRXhwKFwiXihcIiArIFNWR0F0dHJpYnV0ZXMgKyBcIikkXCIsIFwiaVwiKS50ZXN0KHByb3BlcnR5KTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdC8qIERldGVybWluZSB3aGV0aGVyIGEgcHJvcGVydHkgc2hvdWxkIGJlIHNldCB3aXRoIGEgdmVuZG9yIHByZWZpeC4gKi9cclxuXHRcdFx0XHQvKiBJZiBhIHByZWZpeGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IGV4aXN0cywgcmV0dXJuIGl0LiBPdGhlcndpc2UsIHJldHVybiB0aGUgb3JpZ2luYWwgcHJvcGVydHkgbmFtZS5cclxuXHRcdFx0XHQgSWYgdGhlIHByb3BlcnR5IGlzIG5vdCBhdCBhbGwgc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyLCByZXR1cm4gYSBmYWxzZSBmbGFnLiAqL1xyXG5cdFx0XHRcdHByZWZpeENoZWNrOiBmdW5jdGlvbihwcm9wZXJ0eSkge1xyXG5cdFx0XHRcdFx0LyogSWYgdGhpcyBwcm9wZXJ0eSBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQsIHJldHVybiB0aGUgY2FjaGVkIHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0aWYgKFZlbG9jaXR5LlN0YXRlLnByZWZpeE1hdGNoZXNbcHJvcGVydHldKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBbVmVsb2NpdHkuU3RhdGUucHJlZml4TWF0Y2hlc1twcm9wZXJ0eV0sIHRydWVdO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0dmFyIHZlbmRvcnMgPSBbXCJcIiwgXCJXZWJraXRcIiwgXCJNb3pcIiwgXCJtc1wiLCBcIk9cIl07XHJcblxyXG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMCwgdmVuZG9yc0xlbmd0aCA9IHZlbmRvcnMubGVuZ3RoOyBpIDwgdmVuZG9yc0xlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIHByb3BlcnR5UHJlZml4ZWQ7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmIChpID09PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVByZWZpeGVkID0gcHJvcGVydHk7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIENhcGl0YWxpemUgdGhlIGZpcnN0IGxldHRlciBvZiB0aGUgcHJvcGVydHkgdG8gY29uZm9ybSB0byBKYXZhU2NyaXB0IHZlbmRvciBwcmVmaXggbm90YXRpb24gKGUuZy4gd2Via2l0RmlsdGVyKS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5UHJlZml4ZWQgPSB2ZW5kb3JzW2ldICsgcHJvcGVydHkucmVwbGFjZSgvXlxcdy8sIGZ1bmN0aW9uKG1hdGNoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBtYXRjaC50b1VwcGVyQ2FzZSgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBDaGVjayBpZiB0aGUgYnJvd3NlciBzdXBwb3J0cyB0aGlzIHByb3BlcnR5IGFzIHByZWZpeGVkLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmIChUeXBlLmlzU3RyaW5nKFZlbG9jaXR5LlN0YXRlLnByZWZpeEVsZW1lbnQuc3R5bGVbcHJvcGVydHlQcmVmaXhlZF0pKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBDYWNoZSB0aGUgbWF0Y2guICovXHJcblx0XHRcdFx0XHRcdFx0XHRWZWxvY2l0eS5TdGF0ZS5wcmVmaXhNYXRjaGVzW3Byb3BlcnR5XSA9IHByb3BlcnR5UHJlZml4ZWQ7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFtwcm9wZXJ0eVByZWZpeGVkLCB0cnVlXTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZSBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIHByb3BlcnR5IGluIGFueSBmb3JtLCBpbmNsdWRlIGEgZmFsc2UgZmxhZyBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuIGRlY2lkZSBob3cgdG8gcHJvY2VlZC4gKi9cclxuXHRcdFx0XHRcdFx0cmV0dXJuIFtwcm9wZXJ0eSwgZmFsc2VdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgQ1NTIFByb3BlcnR5IFZhbHVlc1xyXG5cdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0VmFsdWVzOiB7XHJcblx0XHRcdFx0LyogSGV4IHRvIFJHQiBjb252ZXJzaW9uLiBDb3B5cmlnaHQgVGltIERvd246IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTYyMzgzOC9yZ2ItdG8taGV4LWFuZC1oZXgtdG8tcmdiICovXHJcblx0XHRcdFx0aGV4VG9SZ2I6IGZ1bmN0aW9uKGhleCkge1xyXG5cdFx0XHRcdFx0dmFyIHNob3J0Zm9ybVJlZ2V4ID0gL14jPyhbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKSQvaSxcclxuXHRcdFx0XHRcdFx0XHRsb25nZm9ybVJlZ2V4ID0gL14jPyhbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KSQvaSxcclxuXHRcdFx0XHRcdFx0XHRyZ2JQYXJ0cztcclxuXHJcblx0XHRcdFx0XHRoZXggPSBoZXgucmVwbGFjZShzaG9ydGZvcm1SZWdleCwgZnVuY3Rpb24obSwgciwgZywgYikge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gciArIHIgKyBnICsgZyArIGIgKyBiO1xyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0cmdiUGFydHMgPSBsb25nZm9ybVJlZ2V4LmV4ZWMoaGV4KTtcclxuXHJcblx0XHRcdFx0XHRyZXR1cm4gcmdiUGFydHMgPyBbcGFyc2VJbnQocmdiUGFydHNbMV0sIDE2KSwgcGFyc2VJbnQocmdiUGFydHNbMl0sIDE2KSwgcGFyc2VJbnQocmdiUGFydHNbM10sIDE2KV0gOiBbMCwgMCwgMF07XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRpc0NTU051bGxWYWx1ZTogZnVuY3Rpb24odmFsdWUpIHtcclxuXHRcdFx0XHRcdC8qIFRoZSBicm93c2VyIGRlZmF1bHRzIENTUyB2YWx1ZXMgdGhhdCBoYXZlIG5vdCBiZWVuIHNldCB0byBlaXRoZXIgMCBvciBvbmUgb2Ygc2V2ZXJhbCBwb3NzaWJsZSBudWxsLXZhbHVlIHN0cmluZ3MuXHJcblx0XHRcdFx0XHQgVGh1cywgd2UgY2hlY2sgZm9yIGJvdGggZmFsc2luZXNzIGFuZCB0aGVzZSBzcGVjaWFsIHN0cmluZ3MuICovXHJcblx0XHRcdFx0XHQvKiBOdWxsLXZhbHVlIGNoZWNraW5nIGlzIHBlcmZvcm1lZCB0byBkZWZhdWx0IHRoZSBzcGVjaWFsIHN0cmluZ3MgdG8gMCAoZm9yIHRoZSBzYWtlIG9mIHR3ZWVuaW5nKSBvciB0aGVpciBob29rXHJcblx0XHRcdFx0XHQgdGVtcGxhdGVzIGFzIGRlZmluZWQgYXMgQ1NTLkhvb2tzIChmb3IgdGhlIHNha2Ugb2YgaG9vayBpbmplY3Rpb24vZXh0cmFjdGlvbikuICovXHJcblx0XHRcdFx0XHQvKiBOb3RlOiBDaHJvbWUgcmV0dXJucyBcInJnYmEoMCwgMCwgMCwgMClcIiBmb3IgYW4gdW5kZWZpbmVkIGNvbG9yIHdoZXJlYXMgSUUgcmV0dXJucyBcInRyYW5zcGFyZW50XCIuICovXHJcblx0XHRcdFx0XHRyZXR1cm4gKCF2YWx1ZSB8fCAvXihub25lfGF1dG98dHJhbnNwYXJlbnR8KHJnYmFcXCgwLCA/MCwgPzAsID8wXFwpKSkkL2kudGVzdCh2YWx1ZSkpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0LyogUmV0cmlldmUgYSBwcm9wZXJ0eSdzIGRlZmF1bHQgdW5pdCB0eXBlLiBVc2VkIGZvciBhc3NpZ25pbmcgYSB1bml0IHR5cGUgd2hlbiBvbmUgaXMgbm90IHN1cHBsaWVkIGJ5IHRoZSB1c2VyLiAqL1xyXG5cdFx0XHRcdGdldFVuaXRUeXBlOiBmdW5jdGlvbihwcm9wZXJ0eSkge1xyXG5cdFx0XHRcdFx0aWYgKC9eKHJvdGF0ZXxza2V3KS9pLnRlc3QocHJvcGVydHkpKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBcImRlZ1wiO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICgvKF4oc2NhbGV8c2NhbGVYfHNjYWxlWXxzY2FsZVp8YWxwaGF8ZmxleEdyb3d8ZmxleEhlaWdodHx6SW5kZXh8Zm9udFdlaWdodCkkKXwoKG9wYWNpdHl8cmVkfGdyZWVufGJsdWV8YWxwaGEpJCkvaS50ZXN0KHByb3BlcnR5KSkge1xyXG5cdFx0XHRcdFx0XHQvKiBUaGUgYWJvdmUgcHJvcGVydGllcyBhcmUgdW5pdGxlc3MuICovXHJcblx0XHRcdFx0XHRcdHJldHVybiBcIlwiO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0LyogRGVmYXVsdCB0byBweCBmb3IgYWxsIG90aGVyIHByb3BlcnRpZXMuICovXHJcblx0XHRcdFx0XHRcdHJldHVybiBcInB4XCI7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQvKiBIVE1MIGVsZW1lbnRzIGRlZmF1bHQgdG8gYW4gYXNzb2NpYXRlZCBkaXNwbGF5IHR5cGUgd2hlbiB0aGV5J3JlIG5vdCBzZXQgdG8gZGlzcGxheTpub25lLiAqL1xyXG5cdFx0XHRcdC8qIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgY29ycmVjdGx5IHNldHRpbmcgdGhlIG5vbi1cIm5vbmVcIiBkaXNwbGF5IHZhbHVlIGluIGNlcnRhaW4gVmVsb2NpdHkgcmVkaXJlY3RzLCBzdWNoIGFzIGZhZGVJbi9PdXQuICovXHJcblx0XHRcdFx0Z2V0RGlzcGxheVR5cGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdHZhciB0YWdOYW1lID0gZWxlbWVudCAmJiBlbGVtZW50LnRhZ05hbWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuXHRcdFx0XHRcdGlmICgvXihifGJpZ3xpfHNtYWxsfHR0fGFiYnJ8YWNyb255bXxjaXRlfGNvZGV8ZGZufGVtfGtiZHxzdHJvbmd8c2FtcHx2YXJ8YXxiZG98YnJ8aW1nfG1hcHxvYmplY3R8cXxzY3JpcHR8c3BhbnxzdWJ8c3VwfGJ1dHRvbnxpbnB1dHxsYWJlbHxzZWxlY3R8dGV4dGFyZWEpJC9pLnRlc3QodGFnTmFtZSkpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIFwiaW5saW5lXCI7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKC9eKGxpKSQvaS50ZXN0KHRhZ05hbWUpKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBcImxpc3QtaXRlbVwiO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICgvXih0cikkL2kudGVzdCh0YWdOYW1lKSkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gXCJ0YWJsZS1yb3dcIjtcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoL14odGFibGUpJC9pLnRlc3QodGFnTmFtZSkpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIFwidGFibGVcIjtcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoL14odGJvZHkpJC9pLnRlc3QodGFnTmFtZSkpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIFwidGFibGUtcm93LWdyb3VwXCI7XHJcblx0XHRcdFx0XHRcdC8qIERlZmF1bHQgdG8gXCJibG9ja1wiIHdoZW4gbm8gbWF0Y2ggaXMgZm91bmQuICovXHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gXCJibG9ja1wiO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0LyogVGhlIGNsYXNzIGFkZC9yZW1vdmUgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIHRlbXBvcmFyaWx5IGFwcGx5IGEgXCJ2ZWxvY2l0eS1hbmltYXRpbmdcIiBjbGFzcyB0byBlbGVtZW50cyB3aGlsZSB0aGV5J3JlIGFuaW1hdGluZy4gKi9cclxuXHRcdFx0XHRhZGRDbGFzczogZnVuY3Rpb24oZWxlbWVudCwgY2xhc3NOYW1lKSB7XHJcblx0XHRcdFx0XHRpZiAoZWxlbWVudCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoZWxlbWVudC5jbGFzc0xpc3QpIHtcclxuXHRcdFx0XHRcdFx0XHRlbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChUeXBlLmlzU3RyaW5nKGVsZW1lbnQuY2xhc3NOYW1lKSkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIEVsZW1lbnQuY2xhc3NOYW1lIGlzIGFyb3VuZCAxNSUgZmFzdGVyIHRoZW4gc2V0L2dldEF0dHJpYnV0ZVxyXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuY2xhc3NOYW1lICs9IChlbGVtZW50LmNsYXNzTmFtZS5sZW5ndGggPyBcIiBcIiA6IFwiXCIpICsgY2xhc3NOYW1lO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdC8vIFdvcmsgYXJvdW5kIGZvciBJRSBzdHJpY3QgbW9kZSBhbmltYXRpbmcgU1ZHIC0gYW5kIGFueXRoaW5nIGVsc2UgdGhhdCBkb2Vzbid0IGJlaGF2ZSBjb3JyZWN0bHkgLSB0aGUgc2FtZSB3YXkgalF1ZXJ5IGRvZXMgaXRcclxuXHRcdFx0XHRcdFx0XHR2YXIgY3VycmVudENsYXNzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoSUUgPD0gNyA/IFwiY2xhc3NOYW1lXCIgOiBcImNsYXNzXCIpIHx8IFwiXCI7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgY3VycmVudENsYXNzICsgKGN1cnJlbnRDbGFzcyA/IFwiIFwiIDogXCJcIikgKyBjbGFzc05hbWUpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRyZW1vdmVDbGFzczogZnVuY3Rpb24oZWxlbWVudCwgY2xhc3NOYW1lKSB7XHJcblx0XHRcdFx0XHRpZiAoZWxlbWVudCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoZWxlbWVudC5jbGFzc0xpc3QpIHtcclxuXHRcdFx0XHRcdFx0XHRlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChUeXBlLmlzU3RyaW5nKGVsZW1lbnQuY2xhc3NOYW1lKSkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIEVsZW1lbnQuY2xhc3NOYW1lIGlzIGFyb3VuZCAxNSUgZmFzdGVyIHRoZW4gc2V0L2dldEF0dHJpYnV0ZVxyXG5cdFx0XHRcdFx0XHRcdC8vIFRPRE86IE5lZWQgc29tZSBqc3BlcmYgdGVzdHMgb24gcGVyZm9ybWFuY2UgLSBjYW4gd2UgZ2V0IHJpZCBvZiB0aGUgcmVnZXggYW5kIG1heWJlIHVzZSBzcGxpdCAvIGFycmF5IG1hbmlwdWxhdGlvbj9cclxuXHRcdFx0XHRcdFx0XHRlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lLnRvU3RyaW5nKCkucmVwbGFjZShuZXcgUmVnRXhwKFwiKF58XFxcXHMpXCIgKyBjbGFzc05hbWUuc3BsaXQoXCIgXCIpLmpvaW4oXCJ8XCIpICsgXCIoXFxcXHN8JClcIiwgXCJnaVwiKSwgXCIgXCIpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdC8vIFdvcmsgYXJvdW5kIGZvciBJRSBzdHJpY3QgbW9kZSBhbmltYXRpbmcgU1ZHIC0gYW5kIGFueXRoaW5nIGVsc2UgdGhhdCBkb2Vzbid0IGJlaGF2ZSBjb3JyZWN0bHkgLSB0aGUgc2FtZSB3YXkgalF1ZXJ5IGRvZXMgaXRcclxuXHRcdFx0XHRcdFx0XHR2YXIgY3VycmVudENsYXNzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoSUUgPD0gNyA/IFwiY2xhc3NOYW1lXCIgOiBcImNsYXNzXCIpIHx8IFwiXCI7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgY3VycmVudENsYXNzLnJlcGxhY2UobmV3IFJlZ0V4cChcIihefFxccylcIiArIGNsYXNzTmFtZS5zcGxpdChcIiBcIikuam9pbihcInxcIikgKyBcIihcXHN8JClcIiwgXCJnaVwiKSwgXCIgXCIpKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0IFN0eWxlIEdldHRpbmcgJiBTZXR0aW5nXHJcblx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0LyogVGhlIHNpbmd1bGFyIGdldFByb3BlcnR5VmFsdWUsIHdoaWNoIHJvdXRlcyB0aGUgbG9naWMgZm9yIGFsbCBub3JtYWxpemF0aW9ucywgaG9va3MsIGFuZCBzdGFuZGFyZCBDU1MgcHJvcGVydGllcy4gKi9cclxuXHRcdFx0Z2V0UHJvcGVydHlWYWx1ZTogZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHksIHJvb3RQcm9wZXJ0eVZhbHVlLCBmb3JjZVN0eWxlTG9va3VwKSB7XHJcblx0XHRcdFx0LyogR2V0IGFuIGVsZW1lbnQncyBjb21wdXRlZCBwcm9wZXJ0eSB2YWx1ZS4gKi9cclxuXHRcdFx0XHQvKiBOb3RlOiBSZXRyaWV2aW5nIHRoZSB2YWx1ZSBvZiBhIENTUyBwcm9wZXJ0eSBjYW5ub3Qgc2ltcGx5IGJlIHBlcmZvcm1lZCBieSBjaGVja2luZyBhbiBlbGVtZW50J3NcclxuXHRcdFx0XHQgc3R5bGUgYXR0cmlidXRlICh3aGljaCBvbmx5IHJlZmxlY3RzIHVzZXItZGVmaW5lZCB2YWx1ZXMpLiBJbnN0ZWFkLCB0aGUgYnJvd3NlciBtdXN0IGJlIHF1ZXJpZWQgZm9yIGEgcHJvcGVydHknc1xyXG5cdFx0XHRcdCAqY29tcHV0ZWQqIHZhbHVlLiBZb3UgY2FuIHJlYWQgbW9yZSBhYm91dCBnZXRDb21wdXRlZFN0eWxlIGhlcmU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0FQSS93aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSAqL1xyXG5cdFx0XHRcdGZ1bmN0aW9uIGNvbXB1dGVQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIHByb3BlcnR5KSB7XHJcblx0XHRcdFx0XHQvKiBXaGVuIGJveC1zaXppbmcgaXNuJ3Qgc2V0IHRvIGJvcmRlci1ib3gsIGhlaWdodCBhbmQgd2lkdGggc3R5bGUgdmFsdWVzIGFyZSBpbmNvcnJlY3RseSBjb21wdXRlZCB3aGVuIGFuXHJcblx0XHRcdFx0XHQgZWxlbWVudCdzIHNjcm9sbGJhcnMgYXJlIHZpc2libGUgKHdoaWNoIGV4cGFuZHMgdGhlIGVsZW1lbnQncyBkaW1lbnNpb25zKS4gVGh1cywgd2UgZGVmZXIgdG8gdGhlIG1vcmUgYWNjdXJhdGVcclxuXHRcdFx0XHRcdCBvZmZzZXRIZWlnaHQvV2lkdGggcHJvcGVydHksIHdoaWNoIGluY2x1ZGVzIHRoZSB0b3RhbCBkaW1lbnNpb25zIGZvciBpbnRlcmlvciwgYm9yZGVyLCBwYWRkaW5nLCBhbmQgc2Nyb2xsYmFyLlxyXG5cdFx0XHRcdFx0IFdlIHN1YnRyYWN0IGJvcmRlciBhbmQgcGFkZGluZyB0byBnZXQgdGhlIHN1bSBvZiBpbnRlcmlvciArIHNjcm9sbGJhci4gKi9cclxuXHRcdFx0XHRcdHZhciBjb21wdXRlZFZhbHVlID0gMDtcclxuXHJcblx0XHRcdFx0XHQvKiBJRTw9OCBkb2Vzbid0IHN1cHBvcnQgd2luZG93LmdldENvbXB1dGVkU3R5bGUsIHRodXMgd2UgZGVmZXIgdG8galF1ZXJ5LCB3aGljaCBoYXMgYW4gZXh0ZW5zaXZlIGFycmF5XHJcblx0XHRcdFx0XHQgb2YgaGFja3MgdG8gYWNjdXJhdGVseSByZXRyaWV2ZSBJRTggcHJvcGVydHkgdmFsdWVzLiBSZS1pbXBsZW1lbnRpbmcgdGhhdCBsb2dpYyBoZXJlIGlzIG5vdCB3b3J0aCBibG9hdGluZyB0aGVcclxuXHRcdFx0XHRcdCBjb2RlYmFzZSBmb3IgYSBkeWluZyBicm93c2VyLiBUaGUgcGVyZm9ybWFuY2UgcmVwZXJjdXNzaW9ucyBvZiB1c2luZyBqUXVlcnkgaGVyZSBhcmUgbWluaW1hbCBzaW5jZVxyXG5cdFx0XHRcdFx0IFZlbG9jaXR5IGlzIG9wdGltaXplZCB0byByYXJlbHkgKGFuZCBzb21ldGltZXMgbmV2ZXIpIHF1ZXJ5IHRoZSBET00uIEZ1cnRoZXIsIHRoZSAkLmNzcygpIGNvZGVwYXRoIGlzbid0IHRoYXQgc2xvdy4gKi9cclxuXHRcdFx0XHRcdGlmIChJRSA8PSA4KSB7XHJcblx0XHRcdFx0XHRcdGNvbXB1dGVkVmFsdWUgPSAkLmNzcyhlbGVtZW50LCBwcm9wZXJ0eSk7IC8qIEdFVCAqL1xyXG5cdFx0XHRcdFx0XHQvKiBBbGwgb3RoZXIgYnJvd3NlcnMgc3VwcG9ydCBnZXRDb21wdXRlZFN0eWxlLiBUaGUgcmV0dXJuZWQgbGl2ZSBvYmplY3QgcmVmZXJlbmNlIGlzIGNhY2hlZCBvbnRvIGl0c1xyXG5cdFx0XHRcdFx0XHQgYXNzb2NpYXRlZCBlbGVtZW50IHNvIHRoYXQgaXQgZG9lcyBub3QgbmVlZCB0byBiZSByZWZldGNoZWQgdXBvbiBldmVyeSBHRVQuICovXHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvKiBCcm93c2VycyBkbyBub3QgcmV0dXJuIGhlaWdodCBhbmQgd2lkdGggdmFsdWVzIGZvciBlbGVtZW50cyB0aGF0IGFyZSBzZXQgdG8gZGlzcGxheTpcIm5vbmVcIi4gVGh1cywgd2UgdGVtcG9yYXJpbHlcclxuXHRcdFx0XHRcdFx0IHRvZ2dsZSBkaXNwbGF5IHRvIHRoZSBlbGVtZW50IHR5cGUncyBkZWZhdWx0IHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHR2YXIgdG9nZ2xlRGlzcGxheSA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKC9eKHdpZHRofGhlaWdodCkkLy50ZXN0KHByb3BlcnR5KSAmJiBDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcImRpc3BsYXlcIikgPT09IDApIHtcclxuXHRcdFx0XHRcdFx0XHR0b2dnbGVEaXNwbGF5ID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRDU1Muc2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcImRpc3BsYXlcIiwgQ1NTLlZhbHVlcy5nZXREaXNwbGF5VHlwZShlbGVtZW50KSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdHZhciByZXZlcnREaXNwbGF5ID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHRvZ2dsZURpc3BsYXkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdENTUy5zZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwiZGlzcGxheVwiLCBcIm5vbmVcIik7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKCFmb3JjZVN0eWxlTG9va3VwKSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5ID09PSBcImhlaWdodFwiICYmIENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwiYm94U2l6aW5nXCIpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSAhPT0gXCJib3JkZXItYm94XCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciBjb250ZW50Qm94SGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQgLSAocGFyc2VGbG9hdChDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcImJvcmRlclRvcFdpZHRoXCIpKSB8fCAwKSAtIChwYXJzZUZsb2F0KENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwiYm9yZGVyQm90dG9tV2lkdGhcIikpIHx8IDApIC0gKHBhcnNlRmxvYXQoQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJwYWRkaW5nVG9wXCIpKSB8fCAwKSAtIChwYXJzZUZsb2F0KENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwicGFkZGluZ0JvdHRvbVwiKSkgfHwgMCk7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXZlcnREaXNwbGF5KCk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGNvbnRlbnRCb3hIZWlnaHQ7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChwcm9wZXJ0eSA9PT0gXCJ3aWR0aFwiICYmIENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwiYm94U2l6aW5nXCIpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSAhPT0gXCJib3JkZXItYm94XCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciBjb250ZW50Qm94V2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoIC0gKHBhcnNlRmxvYXQoQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJib3JkZXJMZWZ0V2lkdGhcIikpIHx8IDApIC0gKHBhcnNlRmxvYXQoQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJib3JkZXJSaWdodFdpZHRoXCIpKSB8fCAwKSAtIChwYXJzZUZsb2F0KENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwicGFkZGluZ0xlZnRcIikpIHx8IDApIC0gKHBhcnNlRmxvYXQoQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJwYWRkaW5nUmlnaHRcIikpIHx8IDApO1xyXG5cdFx0XHRcdFx0XHRcdFx0cmV2ZXJ0RGlzcGxheSgpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBjb250ZW50Qm94V2lkdGg7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR2YXIgY29tcHV0ZWRTdHlsZTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIEZvciBlbGVtZW50cyB0aGF0IFZlbG9jaXR5IGhhc24ndCBiZWVuIGNhbGxlZCBvbiBkaXJlY3RseSAoZS5nLiB3aGVuIFZlbG9jaXR5IHF1ZXJpZXMgdGhlIERPTSBvbiBiZWhhbGZcclxuXHRcdFx0XHRcdFx0IG9mIGEgcGFyZW50IG9mIGFuIGVsZW1lbnQgaXRzIGFuaW1hdGluZyksIHBlcmZvcm0gYSBkaXJlY3QgZ2V0Q29tcHV0ZWRTdHlsZSBsb29rdXAgc2luY2UgdGhlIG9iamVjdCBpc24ndCBjYWNoZWQuICovXHJcblx0XHRcdFx0XHRcdGlmIChEYXRhKGVsZW1lbnQpID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgbnVsbCk7IC8qIEdFVCAqL1xyXG5cdFx0XHRcdFx0XHRcdC8qIElmIHRoZSBjb21wdXRlZFN0eWxlIG9iamVjdCBoYXMgeWV0IHRvIGJlIGNhY2hlZCwgZG8gc28gbm93LiAqL1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCFEYXRhKGVsZW1lbnQpLmNvbXB1dGVkU3R5bGUpIHtcclxuXHRcdFx0XHRcdFx0XHRjb21wdXRlZFN0eWxlID0gRGF0YShlbGVtZW50KS5jb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgbnVsbCk7IC8qIEdFVCAqL1xyXG5cdFx0XHRcdFx0XHRcdC8qIElmIGNvbXB1dGVkU3R5bGUgaXMgY2FjaGVkLCB1c2UgaXQuICovXHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tcHV0ZWRTdHlsZSA9IERhdGEoZWxlbWVudCkuY29tcHV0ZWRTdHlsZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyogSUUgYW5kIEZpcmVmb3ggZG8gbm90IHJldHVybiBhIHZhbHVlIGZvciB0aGUgZ2VuZXJpYyBib3JkZXJDb2xvciAtLSB0aGV5IG9ubHkgcmV0dXJuIGluZGl2aWR1YWwgdmFsdWVzIGZvciBlYWNoIGJvcmRlciBzaWRlJ3MgY29sb3IuXHJcblx0XHRcdFx0XHRcdCBBbHNvLCBpbiBhbGwgYnJvd3NlcnMsIHdoZW4gYm9yZGVyIGNvbG9ycyBhcmVuJ3QgYWxsIHRoZSBzYW1lLCBhIGNvbXBvdW5kIHZhbHVlIGlzIHJldHVybmVkIHRoYXQgVmVsb2NpdHkgaXNuJ3Qgc2V0dXAgdG8gcGFyc2UuXHJcblx0XHRcdFx0XHRcdCBTbywgYXMgYSBwb2x5ZmlsbCBmb3IgcXVlcnlpbmcgaW5kaXZpZHVhbCBib3JkZXIgc2lkZSBjb2xvcnMsIHdlIGp1c3QgcmV0dXJuIHRoZSB0b3AgYm9yZGVyJ3MgY29sb3IgYW5kIGFuaW1hdGUgYWxsIGJvcmRlcnMgZnJvbSB0aGF0IHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydHkgPT09IFwiYm9yZGVyQ29sb3JcIikge1xyXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5ID0gXCJib3JkZXJUb3BDb2xvclwiO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBJRTkgaGFzIGEgYnVnIGluIHdoaWNoIHRoZSBcImZpbHRlclwiIHByb3BlcnR5IG11c3QgYmUgYWNjZXNzZWQgZnJvbSBjb21wdXRlZFN0eWxlIHVzaW5nIHRoZSBnZXRQcm9wZXJ0eVZhbHVlIG1ldGhvZFxyXG5cdFx0XHRcdFx0XHQgaW5zdGVhZCBvZiBhIGRpcmVjdCBwcm9wZXJ0eSBsb29rdXAuIFRoZSBnZXRQcm9wZXJ0eVZhbHVlIG1ldGhvZCBpcyBzbG93ZXIgdGhhbiBhIGRpcmVjdCBsb29rdXAsIHdoaWNoIGlzIHdoeSB3ZSBhdm9pZCBpdCBieSBkZWZhdWx0LiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoSUUgPT09IDkgJiYgcHJvcGVydHkgPT09IFwiZmlsdGVyXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRjb21wdXRlZFZhbHVlID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KTsgLyogR0VUICovXHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tcHV0ZWRWYWx1ZSA9IGNvbXB1dGVkU3R5bGVbcHJvcGVydHldO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBGYWxsIGJhY2sgdG8gdGhlIHByb3BlcnR5J3Mgc3R5bGUgdmFsdWUgKGlmIGRlZmluZWQpIHdoZW4gY29tcHV0ZWRWYWx1ZSByZXR1cm5zIG5vdGhpbmcsXHJcblx0XHRcdFx0XHRcdCB3aGljaCBjYW4gaGFwcGVuIHdoZW4gdGhlIGVsZW1lbnQgaGFzbid0IGJlZW4gcGFpbnRlZC4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKGNvbXB1dGVkVmFsdWUgPT09IFwiXCIgfHwgY29tcHV0ZWRWYWx1ZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbXB1dGVkVmFsdWUgPSBlbGVtZW50LnN0eWxlW3Byb3BlcnR5XTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0cmV2ZXJ0RGlzcGxheSgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8qIEZvciB0b3AsIHJpZ2h0LCBib3R0b20sIGFuZCBsZWZ0IChUUkJMKSB2YWx1ZXMgdGhhdCBhcmUgc2V0IHRvIFwiYXV0b1wiIG9uIGVsZW1lbnRzIG9mIFwiZml4ZWRcIiBvciBcImFic29sdXRlXCIgcG9zaXRpb24sXHJcblx0XHRcdFx0XHQgZGVmZXIgdG8galF1ZXJ5IGZvciBjb252ZXJ0aW5nIFwiYXV0b1wiIHRvIGEgbnVtZXJpYyB2YWx1ZS4gKEZvciBlbGVtZW50cyB3aXRoIGEgXCJzdGF0aWNcIiBvciBcInJlbGF0aXZlXCIgcG9zaXRpb24sIFwiYXV0b1wiIGhhcyB0aGUgc2FtZVxyXG5cdFx0XHRcdFx0IGVmZmVjdCBhcyBiZWluZyBzZXQgdG8gMCwgc28gbm8gY29udmVyc2lvbiBpcyBuZWNlc3NhcnkuKSAqL1xyXG5cdFx0XHRcdFx0LyogQW4gZXhhbXBsZSBvZiB3aHkgbnVtZXJpYyBjb252ZXJzaW9uIGlzIG5lY2Vzc2FyeTogV2hlbiBhbiBlbGVtZW50IHdpdGggXCJwb3NpdGlvbjphYnNvbHV0ZVwiIGhhcyBhbiB1bnRvdWNoZWQgXCJsZWZ0XCJcclxuXHRcdFx0XHRcdCBwcm9wZXJ0eSwgd2hpY2ggcmV2ZXJ0cyB0byBcImF1dG9cIiwgbGVmdCdzIHZhbHVlIGlzIDAgcmVsYXRpdmUgdG8gaXRzIHBhcmVudCBlbGVtZW50LCBidXQgaXMgb2Z0ZW4gbm9uLXplcm8gcmVsYXRpdmVcclxuXHRcdFx0XHRcdCB0byBpdHMgKmNvbnRhaW5pbmcqIChub3QgcGFyZW50KSBlbGVtZW50LCB3aGljaCBpcyB0aGUgbmVhcmVzdCBcInBvc2l0aW9uOnJlbGF0aXZlXCIgYW5jZXN0b3Igb3IgdGhlIHZpZXdwb3J0IChhbmQgYWx3YXlzIHRoZSB2aWV3cG9ydCBpbiB0aGUgY2FzZSBvZiBcInBvc2l0aW9uOmZpeGVkXCIpLiAqL1xyXG5cdFx0XHRcdFx0aWYgKGNvbXB1dGVkVmFsdWUgPT09IFwiYXV0b1wiICYmIC9eKHRvcHxyaWdodHxib3R0b218bGVmdCkkL2kudGVzdChwcm9wZXJ0eSkpIHtcclxuXHRcdFx0XHRcdFx0dmFyIHBvc2l0aW9uID0gY29tcHV0ZVByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJwb3NpdGlvblwiKTsgLyogR0VUICovXHJcblxyXG5cdFx0XHRcdFx0XHQvKiBGb3IgYWJzb2x1dGUgcG9zaXRpb25pbmcsIGpRdWVyeSdzICQucG9zaXRpb24oKSBvbmx5IHJldHVybnMgdmFsdWVzIGZvciB0b3AgYW5kIGxlZnQ7XHJcblx0XHRcdFx0XHRcdCByaWdodCBhbmQgYm90dG9tIHdpbGwgaGF2ZSB0aGVpciBcImF1dG9cIiB2YWx1ZSByZXZlcnRlZCB0byAwLiAqL1xyXG5cdFx0XHRcdFx0XHQvKiBOb3RlOiBBIGpRdWVyeSBvYmplY3QgbXVzdCBiZSBjcmVhdGVkIGhlcmUgc2luY2UgalF1ZXJ5IGRvZXNuJ3QgaGF2ZSBhIGxvdy1sZXZlbCBhbGlhcyBmb3IgJC5wb3NpdGlvbigpLlxyXG5cdFx0XHRcdFx0XHQgTm90IGEgYmlnIGRlYWwgc2luY2Ugd2UncmUgY3VycmVudGx5IGluIGEgR0VUIGJhdGNoIGFueXdheS4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKHBvc2l0aW9uID09PSBcImZpeGVkXCIgfHwgKHBvc2l0aW9uID09PSBcImFic29sdXRlXCIgJiYgL3RvcHxsZWZ0L2kudGVzdChwcm9wZXJ0eSkpKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogTm90ZTogalF1ZXJ5IHN0cmlwcyB0aGUgcGl4ZWwgdW5pdCBmcm9tIGl0cyByZXR1cm5lZCB2YWx1ZXM7IHdlIHJlLWFkZCBpdCBoZXJlIHRvIGNvbmZvcm0gd2l0aCBjb21wdXRlUHJvcGVydHlWYWx1ZSdzIGJlaGF2aW9yLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGNvbXB1dGVkVmFsdWUgPSAkKGVsZW1lbnQpLnBvc2l0aW9uKClbcHJvcGVydHldICsgXCJweFwiOyAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHJldHVybiBjb21wdXRlZFZhbHVlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dmFyIHByb3BlcnR5VmFsdWU7XHJcblxyXG5cdFx0XHRcdC8qIElmIHRoaXMgaXMgYSBob29rZWQgcHJvcGVydHkgKGUuZy4gXCJjbGlwTGVmdFwiIGluc3RlYWQgb2YgdGhlIHJvb3QgcHJvcGVydHkgb2YgXCJjbGlwXCIpLFxyXG5cdFx0XHRcdCBleHRyYWN0IHRoZSBob29rJ3MgdmFsdWUgZnJvbSBhIG5vcm1hbGl6ZWQgcm9vdFByb3BlcnR5VmFsdWUgdXNpbmcgQ1NTLkhvb2tzLmV4dHJhY3RWYWx1ZSgpLiAqL1xyXG5cdFx0XHRcdGlmIChDU1MuSG9va3MucmVnaXN0ZXJlZFtwcm9wZXJ0eV0pIHtcclxuXHRcdFx0XHRcdHZhciBob29rID0gcHJvcGVydHksXHJcblx0XHRcdFx0XHRcdFx0aG9va1Jvb3QgPSBDU1MuSG9va3MuZ2V0Um9vdChob29rKTtcclxuXHJcblx0XHRcdFx0XHQvKiBJZiBhIGNhY2hlZCByb290UHJvcGVydHlWYWx1ZSB3YXNuJ3QgcGFzc2VkIGluICh3aGljaCBWZWxvY2l0eSBhbHdheXMgYXR0ZW1wdHMgdG8gZG8gaW4gb3JkZXIgdG8gYXZvaWQgcmVxdWVyeWluZyB0aGUgRE9NKSxcclxuXHRcdFx0XHRcdCBxdWVyeSB0aGUgRE9NIGZvciB0aGUgcm9vdCBwcm9wZXJ0eSdzIHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0aWYgKHJvb3RQcm9wZXJ0eVZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0LyogU2luY2UgdGhlIGJyb3dzZXIgaXMgbm93IGJlaW5nIGRpcmVjdGx5IHF1ZXJpZWQsIHVzZSB0aGUgb2ZmaWNpYWwgcG9zdC1wcmVmaXhpbmcgcHJvcGVydHkgbmFtZSBmb3IgdGhpcyBsb29rdXAuICovXHJcblx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlID0gQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgQ1NTLk5hbWVzLnByZWZpeENoZWNrKGhvb2tSb290KVswXSk7IC8qIEdFVCAqL1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8qIElmIHRoaXMgcm9vdCBoYXMgYSBub3JtYWxpemF0aW9uIHJlZ2lzdGVyZWQsIHBlZm9ybSB0aGUgYXNzb2NpYXRlZCBub3JtYWxpemF0aW9uIGV4dHJhY3Rpb24uICovXHJcblx0XHRcdFx0XHRpZiAoQ1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWRbaG9va1Jvb3RdKSB7XHJcblx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlID0gQ1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWRbaG9va1Jvb3RdKFwiZXh0cmFjdFwiLCBlbGVtZW50LCByb290UHJvcGVydHlWYWx1ZSk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogRXh0cmFjdCB0aGUgaG9vaydzIHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IENTUy5Ib29rcy5leHRyYWN0VmFsdWUoaG9vaywgcm9vdFByb3BlcnR5VmFsdWUpO1xyXG5cclxuXHRcdFx0XHRcdC8qIElmIHRoaXMgaXMgYSBub3JtYWxpemVkIHByb3BlcnR5IChlLmcuIFwib3BhY2l0eVwiIGJlY29tZXMgXCJmaWx0ZXJcIiBpbiA8PUlFOCkgb3IgXCJ0cmFuc2xhdGVYXCIgYmVjb21lcyBcInRyYW5zZm9ybVwiKSxcclxuXHRcdFx0XHRcdCBub3JtYWxpemUgdGhlIHByb3BlcnR5J3MgbmFtZSBhbmQgdmFsdWUsIGFuZCBoYW5kbGUgdGhlIHNwZWNpYWwgY2FzZSBvZiB0cmFuc2Zvcm1zLiAqL1xyXG5cdFx0XHRcdFx0LyogTm90ZTogTm9ybWFsaXppbmcgYSBwcm9wZXJ0eSBpcyBtdXR1YWxseSBleGNsdXNpdmUgZnJvbSBob29raW5nIGEgcHJvcGVydHkgc2luY2UgaG9vay1leHRyYWN0ZWQgdmFsdWVzIGFyZSBzdHJpY3RseVxyXG5cdFx0XHRcdFx0IG51bWVyaWNhbCBhbmQgdGhlcmVmb3JlIGRvIG5vdCByZXF1aXJlIG5vcm1hbGl6YXRpb24gZXh0cmFjdGlvbi4gKi9cclxuXHRcdFx0XHR9IGVsc2UgaWYgKENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkW3Byb3BlcnR5XSkge1xyXG5cdFx0XHRcdFx0dmFyIG5vcm1hbGl6ZWRQcm9wZXJ0eU5hbWUsXHJcblx0XHRcdFx0XHRcdFx0bm9ybWFsaXplZFByb3BlcnR5VmFsdWU7XHJcblxyXG5cdFx0XHRcdFx0bm9ybWFsaXplZFByb3BlcnR5TmFtZSA9IENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkW3Byb3BlcnR5XShcIm5hbWVcIiwgZWxlbWVudCk7XHJcblxyXG5cdFx0XHRcdFx0LyogVHJhbnNmb3JtIHZhbHVlcyBhcmUgY2FsY3VsYXRlZCB2aWEgbm9ybWFsaXphdGlvbiBleHRyYWN0aW9uIChzZWUgYmVsb3cpLCB3aGljaCBjaGVja3MgYWdhaW5zdCB0aGUgZWxlbWVudCdzIHRyYW5zZm9ybUNhY2hlLlxyXG5cdFx0XHRcdFx0IEF0IG5vIHBvaW50IGRvIHRyYW5zZm9ybSBHRVRzIGV2ZXIgYWN0dWFsbHkgcXVlcnkgdGhlIERPTTsgaW5pdGlhbCBzdHlsZXNoZWV0IHZhbHVlcyBhcmUgbmV2ZXIgcHJvY2Vzc2VkLlxyXG5cdFx0XHRcdFx0IFRoaXMgaXMgYmVjYXVzZSBwYXJzaW5nIDNEIHRyYW5zZm9ybSBtYXRyaWNlcyBpcyBub3QgYWx3YXlzIGFjY3VyYXRlIGFuZCB3b3VsZCBibG9hdCBvdXIgY29kZWJhc2U7XHJcblx0XHRcdFx0XHQgdGh1cywgbm9ybWFsaXphdGlvbiBleHRyYWN0aW9uIGRlZmF1bHRzIGluaXRpYWwgdHJhbnNmb3JtIHZhbHVlcyB0byB0aGVpciB6ZXJvLXZhbHVlcyAoZS5nLiAxIGZvciBzY2FsZVggYW5kIDAgZm9yIHRyYW5zbGF0ZVgpLiAqL1xyXG5cdFx0XHRcdFx0aWYgKG5vcm1hbGl6ZWRQcm9wZXJ0eU5hbWUgIT09IFwidHJhbnNmb3JtXCIpIHtcclxuXHRcdFx0XHRcdFx0bm9ybWFsaXplZFByb3BlcnR5VmFsdWUgPSBjb21wdXRlUHJvcGVydHlWYWx1ZShlbGVtZW50LCBDU1MuTmFtZXMucHJlZml4Q2hlY2sobm9ybWFsaXplZFByb3BlcnR5TmFtZSlbMF0pOyAvKiBHRVQgKi9cclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZSB2YWx1ZSBpcyBhIENTUyBudWxsLXZhbHVlIGFuZCB0aGlzIHByb3BlcnR5IGhhcyBhIGhvb2sgdGVtcGxhdGUsIHVzZSB0aGF0IHplcm8tdmFsdWUgdGVtcGxhdGUgc28gdGhhdCBob29rcyBjYW4gYmUgZXh0cmFjdGVkIGZyb20gaXQuICovXHJcblx0XHRcdFx0XHRcdGlmIChDU1MuVmFsdWVzLmlzQ1NTTnVsbFZhbHVlKG5vcm1hbGl6ZWRQcm9wZXJ0eVZhbHVlKSAmJiBDU1MuSG9va3MudGVtcGxhdGVzW3Byb3BlcnR5XSkge1xyXG5cdFx0XHRcdFx0XHRcdG5vcm1hbGl6ZWRQcm9wZXJ0eVZhbHVlID0gQ1NTLkhvb2tzLnRlbXBsYXRlc1twcm9wZXJ0eV1bMV07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gQ1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWRbcHJvcGVydHldKFwiZXh0cmFjdFwiLCBlbGVtZW50LCBub3JtYWxpemVkUHJvcGVydHlWYWx1ZSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKiBJZiBhIChudW1lcmljKSB2YWx1ZSB3YXNuJ3QgcHJvZHVjZWQgdmlhIGhvb2sgZXh0cmFjdGlvbiBvciBub3JtYWxpemF0aW9uLCBxdWVyeSB0aGUgRE9NLiAqL1xyXG5cdFx0XHRcdGlmICghL15bXFxkLV0vLnRlc3QocHJvcGVydHlWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdC8qIEZvciBTVkcgZWxlbWVudHMsIGRpbWVuc2lvbmFsIHByb3BlcnRpZXMgKHdoaWNoIFNWR0F0dHJpYnV0ZSgpIGRldGVjdHMpIGFyZSB0d2VlbmVkIHZpYVxyXG5cdFx0XHRcdFx0IHRoZWlyIEhUTUwgYXR0cmlidXRlIHZhbHVlcyBpbnN0ZWFkIG9mIHRoZWlyIENTUyBzdHlsZSB2YWx1ZXMuICovXHJcblx0XHRcdFx0XHR2YXIgZGF0YSA9IERhdGEoZWxlbWVudCk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGRhdGEgJiYgZGF0YS5pc1NWRyAmJiBDU1MuTmFtZXMuU1ZHQXR0cmlidXRlKHByb3BlcnR5KSkge1xyXG5cdFx0XHRcdFx0XHQvKiBTaW5jZSB0aGUgaGVpZ2h0L3dpZHRoIGF0dHJpYnV0ZSB2YWx1ZXMgbXVzdCBiZSBzZXQgbWFudWFsbHksIHRoZXkgZG9uJ3QgcmVmbGVjdCBjb21wdXRlZCB2YWx1ZXMuXHJcblx0XHRcdFx0XHRcdCBUaHVzLCB3ZSB1c2UgdXNlIGdldEJCb3goKSB0byBlbnN1cmUgd2UgYWx3YXlzIGdldCB2YWx1ZXMgZm9yIGVsZW1lbnRzIHdpdGggdW5kZWZpbmVkIGhlaWdodC93aWR0aCBhdHRyaWJ1dGVzLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoL14oaGVpZ2h0fHdpZHRoKSQvaS50ZXN0KHByb3BlcnR5KSkge1xyXG5cdFx0XHRcdFx0XHRcdC8qIEZpcmVmb3ggdGhyb3dzIGFuIGVycm9yIGlmIC5nZXRCQm94KCkgaXMgY2FsbGVkIG9uIGFuIFNWRyB0aGF0IGlzbid0IGF0dGFjaGVkIHRvIHRoZSBET00uICovXHJcblx0XHRcdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSBlbGVtZW50LmdldEJCb3goKVtwcm9wZXJ0eV07XHJcblx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSAwO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHQvKiBPdGhlcndpc2UsIGFjY2VzcyB0aGUgYXR0cmlidXRlIHZhbHVlIGRpcmVjdGx5LiAqL1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShwcm9wZXJ0eSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSBjb21wdXRlUHJvcGVydHlWYWx1ZShlbGVtZW50LCBDU1MuTmFtZXMucHJlZml4Q2hlY2socHJvcGVydHkpWzBdKTsgLyogR0VUICovXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKiBTaW5jZSBwcm9wZXJ0eSBsb29rdXBzIGFyZSBmb3IgYW5pbWF0aW9uIHB1cnBvc2VzICh3aGljaCBlbnRhaWxzIGNvbXB1dGluZyB0aGUgbnVtZXJpYyBkZWx0YSBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgdmFsdWVzKSxcclxuXHRcdFx0XHQgY29udmVydCBDU1MgbnVsbC12YWx1ZXMgdG8gYW4gaW50ZWdlciBvZiB2YWx1ZSAwLiAqL1xyXG5cdFx0XHRcdGlmIChDU1MuVmFsdWVzLmlzQ1NTTnVsbFZhbHVlKHByb3BlcnR5VmFsdWUpKSB7XHJcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gMDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChWZWxvY2l0eS5kZWJ1ZyA+PSAyKSB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIkdldCBcIiArIHByb3BlcnR5ICsgXCI6IFwiICsgcHJvcGVydHlWYWx1ZSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gcHJvcGVydHlWYWx1ZTtcclxuXHRcdFx0fSxcclxuXHRcdFx0LyogVGhlIHNpbmd1bGFyIHNldFByb3BlcnR5VmFsdWUsIHdoaWNoIHJvdXRlcyB0aGUgbG9naWMgZm9yIGFsbCBub3JtYWxpemF0aW9ucywgaG9va3MsIGFuZCBzdGFuZGFyZCBDU1MgcHJvcGVydGllcy4gKi9cclxuXHRcdFx0c2V0UHJvcGVydHlWYWx1ZTogZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHksIHByb3BlcnR5VmFsdWUsIHJvb3RQcm9wZXJ0eVZhbHVlLCBzY3JvbGxEYXRhKSB7XHJcblx0XHRcdFx0dmFyIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5O1xyXG5cclxuXHRcdFx0XHQvKiBJbiBvcmRlciB0byBiZSBzdWJqZWN0ZWQgdG8gY2FsbCBvcHRpb25zIGFuZCBlbGVtZW50IHF1ZXVlaW5nLCBzY3JvbGwgYW5pbWF0aW9uIGlzIHJvdXRlZCB0aHJvdWdoIFZlbG9jaXR5IGFzIGlmIGl0IHdlcmUgYSBzdGFuZGFyZCBDU1MgcHJvcGVydHkuICovXHJcblx0XHRcdFx0aWYgKHByb3BlcnR5ID09PSBcInNjcm9sbFwiKSB7XHJcblx0XHRcdFx0XHQvKiBJZiBhIGNvbnRhaW5lciBvcHRpb24gaXMgcHJlc2VudCwgc2Nyb2xsIHRoZSBjb250YWluZXIgaW5zdGVhZCBvZiB0aGUgYnJvd3NlciB3aW5kb3cuICovXHJcblx0XHRcdFx0XHRpZiAoc2Nyb2xsRGF0YS5jb250YWluZXIpIHtcclxuXHRcdFx0XHRcdFx0c2Nyb2xsRGF0YS5jb250YWluZXJbXCJzY3JvbGxcIiArIHNjcm9sbERhdGEuZGlyZWN0aW9uXSA9IHByb3BlcnR5VmFsdWU7XHJcblx0XHRcdFx0XHRcdC8qIE90aGVyd2lzZSwgVmVsb2NpdHkgZGVmYXVsdHMgdG8gc2Nyb2xsaW5nIHRoZSBicm93c2VyIHdpbmRvdy4gKi9cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGlmIChzY3JvbGxEYXRhLmRpcmVjdGlvbiA9PT0gXCJMZWZ0XCIpIHtcclxuXHRcdFx0XHRcdFx0XHR3aW5kb3cuc2Nyb2xsVG8ocHJvcGVydHlWYWx1ZSwgc2Nyb2xsRGF0YS5hbHRlcm5hdGVWYWx1ZSk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0d2luZG93LnNjcm9sbFRvKHNjcm9sbERhdGEuYWx0ZXJuYXRlVmFsdWUsIHByb3BlcnR5VmFsdWUpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdC8qIFRyYW5zZm9ybXMgKHRyYW5zbGF0ZVgsIHJvdGF0ZVosIGV0Yy4pIGFyZSBhcHBsaWVkIHRvIGEgcGVyLWVsZW1lbnQgdHJhbnNmb3JtQ2FjaGUgb2JqZWN0LCB3aGljaCBpcyBtYW51YWxseSBmbHVzaGVkIHZpYSBmbHVzaFRyYW5zZm9ybUNhY2hlKCkuXHJcblx0XHRcdFx0XHQgVGh1cywgZm9yIG5vdywgd2UgbWVyZWx5IGNhY2hlIHRyYW5zZm9ybXMgYmVpbmcgU0VULiAqL1xyXG5cdFx0XHRcdFx0aWYgKENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkW3Byb3BlcnR5XSAmJiBDU1MuTm9ybWFsaXphdGlvbnMucmVnaXN0ZXJlZFtwcm9wZXJ0eV0oXCJuYW1lXCIsIGVsZW1lbnQpID09PSBcInRyYW5zZm9ybVwiKSB7XHJcblx0XHRcdFx0XHRcdC8qIFBlcmZvcm0gYSBub3JtYWxpemF0aW9uIGluamVjdGlvbi4gKi9cclxuXHRcdFx0XHRcdFx0LyogTm90ZTogVGhlIG5vcm1hbGl6YXRpb24gbG9naWMgaGFuZGxlcyB0aGUgdHJhbnNmb3JtQ2FjaGUgdXBkYXRpbmcuICovXHJcblx0XHRcdFx0XHRcdENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkW3Byb3BlcnR5XShcImluamVjdFwiLCBlbGVtZW50LCBwcm9wZXJ0eVZhbHVlKTtcclxuXHJcblx0XHRcdFx0XHRcdHByb3BlcnR5TmFtZSA9IFwidHJhbnNmb3JtXCI7XHJcblx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSBEYXRhKGVsZW1lbnQpLnRyYW5zZm9ybUNhY2hlW3Byb3BlcnR5XTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdC8qIEluamVjdCBob29rcy4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKENTUy5Ib29rcy5yZWdpc3RlcmVkW3Byb3BlcnR5XSkge1xyXG5cdFx0XHRcdFx0XHRcdHZhciBob29rTmFtZSA9IHByb3BlcnR5LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRob29rUm9vdCA9IENTUy5Ib29rcy5nZXRSb290KHByb3BlcnR5KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0LyogSWYgYSBjYWNoZWQgcm9vdFByb3BlcnR5VmFsdWUgd2FzIG5vdCBwcm92aWRlZCwgcXVlcnkgdGhlIERPTSBmb3IgdGhlIGhvb2tSb290J3MgY3VycmVudCB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRyb290UHJvcGVydHlWYWx1ZSA9IHJvb3RQcm9wZXJ0eVZhbHVlIHx8IENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIGhvb2tSb290KTsgLyogR0VUICovXHJcblxyXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSBDU1MuSG9va3MuaW5qZWN0VmFsdWUoaG9va05hbWUsIHByb3BlcnR5VmFsdWUsIHJvb3RQcm9wZXJ0eVZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eSA9IGhvb2tSb290O1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBOb3JtYWxpemUgbmFtZXMgYW5kIHZhbHVlcy4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkW3Byb3BlcnR5XSkge1xyXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSBDU1MuTm9ybWFsaXphdGlvbnMucmVnaXN0ZXJlZFtwcm9wZXJ0eV0oXCJpbmplY3RcIiwgZWxlbWVudCwgcHJvcGVydHlWYWx1ZSk7XHJcblx0XHRcdFx0XHRcdFx0cHJvcGVydHkgPSBDU1MuTm9ybWFsaXphdGlvbnMucmVnaXN0ZXJlZFtwcm9wZXJ0eV0oXCJuYW1lXCIsIGVsZW1lbnQpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBBc3NpZ24gdGhlIGFwcHJvcHJpYXRlIHZlbmRvciBwcmVmaXggYmVmb3JlIHBlcmZvcm1pbmcgYW4gb2ZmaWNpYWwgc3R5bGUgdXBkYXRlLiAqL1xyXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eU5hbWUgPSBDU1MuTmFtZXMucHJlZml4Q2hlY2socHJvcGVydHkpWzBdO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogQSB0cnkvY2F0Y2ggaXMgdXNlZCBmb3IgSUU8PTgsIHdoaWNoIHRocm93cyBhbiBlcnJvciB3aGVuIFwiaW52YWxpZFwiIENTUyB2YWx1ZXMgYXJlIHNldCwgZS5nLiBhIG5lZ2F0aXZlIHdpZHRoLlxyXG5cdFx0XHRcdFx0XHQgVHJ5L2NhdGNoIGlzIGF2b2lkZWQgZm9yIG90aGVyIGJyb3dzZXJzIHNpbmNlIGl0IGluY3VycyBhIHBlcmZvcm1hbmNlIG92ZXJoZWFkLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoSUUgPD0gOCkge1xyXG5cdFx0XHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdFx0XHRlbGVtZW50LnN0eWxlW3Byb3BlcnR5TmFtZV0gPSBwcm9wZXJ0eVZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoVmVsb2NpdHkuZGVidWcpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXCJCcm93c2VyIGRvZXMgbm90IHN1cHBvcnQgW1wiICsgcHJvcGVydHlWYWx1ZSArIFwiXSBmb3IgW1wiICsgcHJvcGVydHlOYW1lICsgXCJdXCIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHQvKiBTVkcgZWxlbWVudHMgaGF2ZSB0aGVpciBkaW1lbnNpb25hbCBwcm9wZXJ0aWVzICh3aWR0aCwgaGVpZ2h0LCB4LCB5LCBjeCwgZXRjLikgYXBwbGllZCBkaXJlY3RseSBhcyBhdHRyaWJ1dGVzIGluc3RlYWQgb2YgYXMgc3R5bGVzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdC8qIE5vdGU6IElFOCBkb2VzIG5vdCBzdXBwb3J0IFNWRyBlbGVtZW50cywgc28gaXQncyBva2F5IHRoYXQgd2Ugc2tpcCBpdCBmb3IgU1ZHIGFuaW1hdGlvbi4gKi9cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgZGF0YSA9IERhdGEoZWxlbWVudCk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmIChkYXRhICYmIGRhdGEuaXNTVkcgJiYgQ1NTLk5hbWVzLlNWR0F0dHJpYnV0ZShwcm9wZXJ0eSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIE5vdGU6IEZvciBTVkcgYXR0cmlidXRlcywgdmVuZG9yLXByZWZpeGVkIHByb3BlcnR5IG5hbWVzIGFyZSBuZXZlciB1c2VkLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogTm90ZTogTm90IGFsbCBDU1MgcHJvcGVydGllcyBjYW4gYmUgYW5pbWF0ZWQgdmlhIGF0dHJpYnV0ZXMsIGJ1dCB0aGUgYnJvd3NlciB3b24ndCB0aHJvdyBhbiBlcnJvciBmb3IgdW5zdXBwb3J0ZWQgcHJvcGVydGllcy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKHByb3BlcnR5LCBwcm9wZXJ0eVZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZVtwcm9wZXJ0eU5hbWVdID0gcHJvcGVydHlWYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChWZWxvY2l0eS5kZWJ1ZyA+PSAyKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXCJTZXQgXCIgKyBwcm9wZXJ0eSArIFwiIChcIiArIHByb3BlcnR5TmFtZSArIFwiKTogXCIgKyBwcm9wZXJ0eVZhbHVlKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0LyogUmV0dXJuIHRoZSBub3JtYWxpemVkIHByb3BlcnR5IG5hbWUgYW5kIHZhbHVlIGluIGNhc2UgdGhlIGNhbGxlciB3YW50cyB0byBrbm93IGhvdyB0aGVzZSB2YWx1ZXMgd2VyZSBtb2RpZmllZCBiZWZvcmUgYmVpbmcgYXBwbGllZCB0byB0aGUgRE9NLiAqL1xyXG5cdFx0XHRcdHJldHVybiBbcHJvcGVydHlOYW1lLCBwcm9wZXJ0eVZhbHVlXTtcclxuXHRcdFx0fSxcclxuXHRcdFx0LyogVG8gaW5jcmVhc2UgcGVyZm9ybWFuY2UgYnkgYmF0Y2hpbmcgdHJhbnNmb3JtIHVwZGF0ZXMgaW50byBhIHNpbmdsZSBTRVQsIHRyYW5zZm9ybXMgYXJlIG5vdCBkaXJlY3RseSBhcHBsaWVkIHRvIGFuIGVsZW1lbnQgdW50aWwgZmx1c2hUcmFuc2Zvcm1DYWNoZSgpIGlzIGNhbGxlZC4gKi9cclxuXHRcdFx0LyogTm90ZTogVmVsb2NpdHkgYXBwbGllcyB0cmFuc2Zvcm0gcHJvcGVydGllcyBpbiB0aGUgc2FtZSBvcmRlciB0aGF0IHRoZXkgYXJlIGNocm9ub2dpY2FsbHkgaW50cm9kdWNlZCB0byB0aGUgZWxlbWVudCdzIENTUyBzdHlsZXMuICovXHJcblx0XHRcdGZsdXNoVHJhbnNmb3JtQ2FjaGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuXHRcdFx0XHR2YXIgdHJhbnNmb3JtU3RyaW5nID0gXCJcIixcclxuXHRcdFx0XHRcdFx0ZGF0YSA9IERhdGEoZWxlbWVudCk7XHJcblxyXG5cdFx0XHRcdC8qIENlcnRhaW4gYnJvd3NlcnMgcmVxdWlyZSB0aGF0IFNWRyB0cmFuc2Zvcm1zIGJlIGFwcGxpZWQgYXMgYW4gYXR0cmlidXRlLiBIb3dldmVyLCB0aGUgU1ZHIHRyYW5zZm9ybSBhdHRyaWJ1dGUgdGFrZXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIENTUydzIHRyYW5zZm9ybSBzdHJpbmdcclxuXHRcdFx0XHQgKHVuaXRzIGFyZSBkcm9wcGVkIGFuZCwgZXhjZXB0IGZvciBza2V3WC9ZLCBzdWJwcm9wZXJ0aWVzIGFyZSBtZXJnZWQgaW50byB0aGVpciBtYXN0ZXIgcHJvcGVydHkgLS0gZS5nLiBzY2FsZVggYW5kIHNjYWxlWSBhcmUgbWVyZ2VkIGludG8gc2NhbGUoWCBZKS4gKi9cclxuXHRcdFx0XHRpZiAoKElFIHx8IChWZWxvY2l0eS5TdGF0ZS5pc0FuZHJvaWQgJiYgIVZlbG9jaXR5LlN0YXRlLmlzQ2hyb21lKSkgJiYgZGF0YSAmJiBkYXRhLmlzU1ZHKSB7XHJcblx0XHRcdFx0XHQvKiBTaW5jZSB0cmFuc2Zvcm0gdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlaXIgcGFyZW50aGVzZXMtd3JhcHBlZCBmb3JtLCB3ZSB1c2UgYSBoZWxwZXIgZnVuY3Rpb24gdG8gc3RyaXAgb3V0IHRoZWlyIG51bWVyaWMgdmFsdWVzLlxyXG5cdFx0XHRcdFx0IEZ1cnRoZXIsIFNWRyB0cmFuc2Zvcm0gcHJvcGVydGllcyBvbmx5IHRha2UgdW5pdGxlc3MgKHJlcHJlc2VudGluZyBwaXhlbHMpIHZhbHVlcywgc28gaXQncyBva2F5IHRoYXQgcGFyc2VGbG9hdCgpIHN0cmlwcyB0aGUgdW5pdCBzdWZmaXhlZCB0byB0aGUgZmxvYXQgdmFsdWUuICovXHJcblx0XHRcdFx0XHR2YXIgZ2V0VHJhbnNmb3JtRmxvYXQgPSBmdW5jdGlvbih0cmFuc2Zvcm1Qcm9wZXJ0eSkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gcGFyc2VGbG9hdChDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCB0cmFuc2Zvcm1Qcm9wZXJ0eSkpO1xyXG5cdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHQvKiBDcmVhdGUgYW4gb2JqZWN0IHRvIG9yZ2FuaXplIGFsbCB0aGUgdHJhbnNmb3JtcyB0aGF0IHdlJ2xsIGFwcGx5IHRvIHRoZSBTVkcgZWxlbWVudC4gVG8ga2VlcCB0aGUgbG9naWMgc2ltcGxlLFxyXG5cdFx0XHRcdFx0IHdlIHByb2Nlc3MgKmFsbCogdHJhbnNmb3JtIHByb3BlcnRpZXMgLS0gZXZlbiB0aG9zZSB0aGF0IG1heSBub3QgYmUgZXhwbGljaXRseSBhcHBsaWVkIChzaW5jZSB0aGV5IGRlZmF1bHQgdG8gdGhlaXIgemVyby12YWx1ZXMgYW55d2F5KS4gKi9cclxuXHRcdFx0XHRcdHZhciBTVkdUcmFuc2Zvcm1zID0ge1xyXG5cdFx0XHRcdFx0XHR0cmFuc2xhdGU6IFtnZXRUcmFuc2Zvcm1GbG9hdChcInRyYW5zbGF0ZVhcIiksIGdldFRyYW5zZm9ybUZsb2F0KFwidHJhbnNsYXRlWVwiKV0sXHJcblx0XHRcdFx0XHRcdHNrZXdYOiBbZ2V0VHJhbnNmb3JtRmxvYXQoXCJza2V3WFwiKV0sIHNrZXdZOiBbZ2V0VHJhbnNmb3JtRmxvYXQoXCJza2V3WVwiKV0sXHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZSBzY2FsZSBwcm9wZXJ0eSBpcyBzZXQgKG5vbi0xKSwgdXNlIHRoYXQgdmFsdWUgZm9yIHRoZSBzY2FsZVggYW5kIHNjYWxlWSB2YWx1ZXNcclxuXHRcdFx0XHRcdFx0ICh0aGlzIGJlaGF2aW9yIG1pbWljcyB0aGUgcmVzdWx0IG9mIGFuaW1hdGluZyBhbGwgdGhlc2UgcHJvcGVydGllcyBhdCBvbmNlIG9uIEhUTUwgZWxlbWVudHMpLiAqL1xyXG5cdFx0XHRcdFx0XHRzY2FsZTogZ2V0VHJhbnNmb3JtRmxvYXQoXCJzY2FsZVwiKSAhPT0gMSA/IFtnZXRUcmFuc2Zvcm1GbG9hdChcInNjYWxlXCIpLCBnZXRUcmFuc2Zvcm1GbG9hdChcInNjYWxlXCIpXSA6IFtnZXRUcmFuc2Zvcm1GbG9hdChcInNjYWxlWFwiKSwgZ2V0VHJhbnNmb3JtRmxvYXQoXCJzY2FsZVlcIildLFxyXG5cdFx0XHRcdFx0XHQvKiBOb3RlOiBTVkcncyByb3RhdGUgdHJhbnNmb3JtIHRha2VzIHRocmVlIHZhbHVlczogcm90YXRpb24gZGVncmVlcyBmb2xsb3dlZCBieSB0aGUgWCBhbmQgWSB2YWx1ZXNcclxuXHRcdFx0XHRcdFx0IGRlZmluaW5nIHRoZSByb3RhdGlvbidzIG9yaWdpbiBwb2ludC4gV2UgaWdub3JlIHRoZSBvcmlnaW4gdmFsdWVzIChkZWZhdWx0IHRoZW0gdG8gMCkuICovXHJcblx0XHRcdFx0XHRcdHJvdGF0ZTogW2dldFRyYW5zZm9ybUZsb2F0KFwicm90YXRlWlwiKSwgMCwgMF1cclxuXHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0LyogSXRlcmF0ZSB0aHJvdWdoIHRoZSB0cmFuc2Zvcm0gcHJvcGVydGllcyBpbiB0aGUgdXNlci1kZWZpbmVkIHByb3BlcnR5IG1hcCBvcmRlci5cclxuXHRcdFx0XHRcdCAoVGhpcyBtaW1pY3MgdGhlIGJlaGF2aW9yIG9mIG5vbi1TVkcgdHJhbnNmb3JtIGFuaW1hdGlvbi4pICovXHJcblx0XHRcdFx0XHQkLmVhY2goRGF0YShlbGVtZW50KS50cmFuc2Zvcm1DYWNoZSwgZnVuY3Rpb24odHJhbnNmb3JtTmFtZSkge1xyXG5cdFx0XHRcdFx0XHQvKiBFeGNlcHQgZm9yIHdpdGggc2tld1gvWSwgcmV2ZXJ0IHRoZSBheGlzLXNwZWNpZmljIHRyYW5zZm9ybSBzdWJwcm9wZXJ0aWVzIHRvIHRoZWlyIGF4aXMtZnJlZSBtYXN0ZXJcclxuXHRcdFx0XHRcdFx0IHByb3BlcnRpZXMgc28gdGhhdCB0aGV5IG1hdGNoIHVwIHdpdGggU1ZHJ3MgYWNjZXB0ZWQgdHJhbnNmb3JtIHByb3BlcnRpZXMuICovXHJcblx0XHRcdFx0XHRcdGlmICgvXnRyYW5zbGF0ZS9pLnRlc3QodHJhbnNmb3JtTmFtZSkpIHtcclxuXHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm1OYW1lID0gXCJ0cmFuc2xhdGVcIjtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICgvXnNjYWxlL2kudGVzdCh0cmFuc2Zvcm1OYW1lKSkge1xyXG5cdFx0XHRcdFx0XHRcdHRyYW5zZm9ybU5hbWUgPSBcInNjYWxlXCI7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoL15yb3RhdGUvaS50ZXN0KHRyYW5zZm9ybU5hbWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0dHJhbnNmb3JtTmFtZSA9IFwicm90YXRlXCI7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIENoZWNrIHRoYXQgd2UgaGF2ZW4ndCB5ZXQgZGVsZXRlZCB0aGUgcHJvcGVydHkgZnJvbSB0aGUgU1ZHVHJhbnNmb3JtcyBjb250YWluZXIuICovXHJcblx0XHRcdFx0XHRcdGlmIChTVkdUcmFuc2Zvcm1zW3RyYW5zZm9ybU5hbWVdKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogQXBwZW5kIHRoZSB0cmFuc2Zvcm0gcHJvcGVydHkgaW4gdGhlIFNWRy1zdXBwb3J0ZWQgdHJhbnNmb3JtIGZvcm1hdC4gQXMgcGVyIHRoZSBzcGVjLCBzdXJyb3VuZCB0aGUgc3BhY2UtZGVsaW1pdGVkIHZhbHVlcyBpbiBwYXJlbnRoZXNlcy4gKi9cclxuXHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm1TdHJpbmcgKz0gdHJhbnNmb3JtTmFtZSArIFwiKFwiICsgU1ZHVHJhbnNmb3Jtc1t0cmFuc2Zvcm1OYW1lXS5qb2luKFwiIFwiKSArIFwiKVwiICsgXCIgXCI7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIEFmdGVyIHByb2Nlc3NpbmcgYW4gU1ZHIHRyYW5zZm9ybSBwcm9wZXJ0eSwgZGVsZXRlIGl0IGZyb20gdGhlIFNWR1RyYW5zZm9ybXMgY29udGFpbmVyIHNvIHdlIGRvbid0XHJcblx0XHRcdFx0XHRcdFx0IHJlLWluc2VydCB0aGUgc2FtZSBtYXN0ZXIgcHJvcGVydHkgaWYgd2UgZW5jb3VudGVyIGFub3RoZXIgb25lIG9mIGl0cyBheGlzLXNwZWNpZmljIHByb3BlcnRpZXMuICovXHJcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIFNWR1RyYW5zZm9ybXNbdHJhbnNmb3JtTmFtZV07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR2YXIgdHJhbnNmb3JtVmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0cGVyc3BlY3RpdmU7XHJcblxyXG5cdFx0XHRcdFx0LyogVHJhbnNmb3JtIHByb3BlcnRpZXMgYXJlIHN0b3JlZCBhcyBtZW1iZXJzIG9mIHRoZSB0cmFuc2Zvcm1DYWNoZSBvYmplY3QuIENvbmNhdGVuYXRlIGFsbCB0aGUgbWVtYmVycyBpbnRvIGEgc3RyaW5nLiAqL1xyXG5cdFx0XHRcdFx0JC5lYWNoKERhdGEoZWxlbWVudCkudHJhbnNmb3JtQ2FjaGUsIGZ1bmN0aW9uKHRyYW5zZm9ybU5hbWUpIHtcclxuXHRcdFx0XHRcdFx0dHJhbnNmb3JtVmFsdWUgPSBEYXRhKGVsZW1lbnQpLnRyYW5zZm9ybUNhY2hlW3RyYW5zZm9ybU5hbWVdO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogVHJhbnNmb3JtJ3MgcGVyc3BlY3RpdmUgc3VicHJvcGVydHkgbXVzdCBiZSBzZXQgZmlyc3QgaW4gb3JkZXIgdG8gdGFrZSBlZmZlY3QuIFN0b3JlIGl0IHRlbXBvcmFyaWx5LiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAodHJhbnNmb3JtTmFtZSA9PT0gXCJ0cmFuc2Zvcm1QZXJzcGVjdGl2ZVwiKSB7XHJcblx0XHRcdFx0XHRcdFx0cGVyc3BlY3RpdmUgPSB0cmFuc2Zvcm1WYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyogSUU5IG9ubHkgc3VwcG9ydHMgb25lIHJvdGF0aW9uIHR5cGUsIHJvdGF0ZVosIHdoaWNoIGl0IHJlZmVycyB0byBhcyBcInJvdGF0ZVwiLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoSUUgPT09IDkgJiYgdHJhbnNmb3JtTmFtZSA9PT0gXCJyb3RhdGVaXCIpIHtcclxuXHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm1OYW1lID0gXCJyb3RhdGVcIjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0dHJhbnNmb3JtU3RyaW5nICs9IHRyYW5zZm9ybU5hbWUgKyB0cmFuc2Zvcm1WYWx1ZSArIFwiIFwiO1xyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0LyogSWYgcHJlc2VudCwgc2V0IHRoZSBwZXJzcGVjdGl2ZSBzdWJwcm9wZXJ0eSBmaXJzdC4gKi9cclxuXHRcdFx0XHRcdGlmIChwZXJzcGVjdGl2ZSkge1xyXG5cdFx0XHRcdFx0XHR0cmFuc2Zvcm1TdHJpbmcgPSBcInBlcnNwZWN0aXZlXCIgKyBwZXJzcGVjdGl2ZSArIFwiIFwiICsgdHJhbnNmb3JtU3RyaW5nO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Q1NTLnNldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJ0cmFuc2Zvcm1cIiwgdHJhbnNmb3JtU3RyaW5nKTtcclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHJcblx0XHQvKiBSZWdpc3RlciBob29rcyBhbmQgbm9ybWFsaXphdGlvbnMuICovXHJcblx0XHRDU1MuSG9va3MucmVnaXN0ZXIoKTtcclxuXHRcdENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcigpO1xyXG5cclxuXHRcdC8qIEFsbG93IGhvb2sgc2V0dGluZyBpbiB0aGUgc2FtZSBmYXNoaW9uIGFzIGpRdWVyeSdzICQuY3NzKCkuICovXHJcblx0XHRWZWxvY2l0eS5ob29rID0gZnVuY3Rpb24oZWxlbWVudHMsIGFyZzIsIGFyZzMpIHtcclxuXHRcdFx0dmFyIHZhbHVlO1xyXG5cclxuXHRcdFx0ZWxlbWVudHMgPSBzYW5pdGl6ZUVsZW1lbnRzKGVsZW1lbnRzKTtcclxuXHJcblx0XHRcdCQuZWFjaChlbGVtZW50cywgZnVuY3Rpb24oaSwgZWxlbWVudCkge1xyXG5cdFx0XHRcdC8qIEluaXRpYWxpemUgVmVsb2NpdHkncyBwZXItZWxlbWVudCBkYXRhIGNhY2hlIGlmIHRoaXMgZWxlbWVudCBoYXNuJ3QgcHJldmlvdXNseSBiZWVuIGFuaW1hdGVkLiAqL1xyXG5cdFx0XHRcdGlmIChEYXRhKGVsZW1lbnQpID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFZlbG9jaXR5LmluaXQoZWxlbWVudCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKiBHZXQgcHJvcGVydHkgdmFsdWUuIElmIGFuIGVsZW1lbnQgc2V0IHdhcyBwYXNzZWQgaW4sIG9ubHkgcmV0dXJuIHRoZSB2YWx1ZSBmb3IgdGhlIGZpcnN0IGVsZW1lbnQuICovXHJcblx0XHRcdFx0aWYgKGFyZzMgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0dmFsdWUgPSBDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBhcmcyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdC8qIFNldCBwcm9wZXJ0eSB2YWx1ZS4gKi9cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Lyogc1BWIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlIG5vcm1hbGl6ZWQgcHJvcGVydHlOYW1lL3Byb3BlcnR5VmFsdWUgcGFpciB1c2VkIHRvIHVwZGF0ZSB0aGUgRE9NLiAqL1xyXG5cdFx0XHRcdFx0dmFyIGFkanVzdGVkU2V0ID0gQ1NTLnNldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgYXJnMiwgYXJnMyk7XHJcblxyXG5cdFx0XHRcdFx0LyogVHJhbnNmb3JtIHByb3BlcnRpZXMgZG9uJ3QgYXV0b21hdGljYWxseSBzZXQuIFRoZXkgaGF2ZSB0byBiZSBmbHVzaGVkIHRvIHRoZSBET00uICovXHJcblx0XHRcdFx0XHRpZiAoYWRqdXN0ZWRTZXRbMF0gPT09IFwidHJhbnNmb3JtXCIpIHtcclxuXHRcdFx0XHRcdFx0VmVsb2NpdHkuQ1NTLmZsdXNoVHJhbnNmb3JtQ2FjaGUoZWxlbWVudCk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0dmFsdWUgPSBhZGp1c3RlZFNldDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0cmV0dXJuIHZhbHVlO1xyXG5cdFx0fTtcclxuXHJcblx0XHQvKioqKioqKioqKioqKioqKipcclxuXHRcdCBBbmltYXRpb25cclxuXHRcdCAqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHR2YXIgYW5pbWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgb3B0cztcclxuXHJcblx0XHRcdC8qKioqKioqKioqKioqKioqKipcclxuXHRcdFx0IENhbGwgQ2hhaW5cclxuXHRcdFx0ICoqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdC8qIExvZ2ljIGZvciBkZXRlcm1pbmluZyB3aGF0IHRvIHJldHVybiB0byB0aGUgY2FsbCBzdGFjayB3aGVuIGV4aXRpbmcgb3V0IG9mIFZlbG9jaXR5LiAqL1xyXG5cdFx0XHRmdW5jdGlvbiBnZXRDaGFpbigpIHtcclxuXHRcdFx0XHQvKiBJZiB3ZSBhcmUgdXNpbmcgdGhlIHV0aWxpdHkgZnVuY3Rpb24sIGF0dGVtcHQgdG8gcmV0dXJuIHRoaXMgY2FsbCdzIHByb21pc2UuIElmIG5vIHByb21pc2UgbGlicmFyeSB3YXMgZGV0ZWN0ZWQsXHJcblx0XHRcdFx0IGRlZmF1bHQgdG8gbnVsbCBpbnN0ZWFkIG9mIHJldHVybmluZyB0aGUgdGFyZ2V0ZWQgZWxlbWVudHMgc28gdGhhdCB1dGlsaXR5IGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlIGlzIHN0YW5kYXJkaXplZC4gKi9cclxuXHRcdFx0XHRpZiAoaXNVdGlsaXR5KSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gcHJvbWlzZURhdGEucHJvbWlzZSB8fCBudWxsO1xyXG5cdFx0XHRcdFx0LyogT3RoZXJ3aXNlLCBpZiB3ZSdyZSB1c2luZyAkLmZuLCByZXR1cm4gdGhlIGpRdWVyeS0vWmVwdG8td3JhcHBlZCBlbGVtZW50IHNldC4gKi9cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGVsZW1lbnRzV3JhcHBlZDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdCBBcmd1bWVudHMgQXNzaWdubWVudFxyXG5cdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdC8qIFRvIGFsbG93IGZvciBleHByZXNzaXZlIENvZmZlZVNjcmlwdCBjb2RlLCBWZWxvY2l0eSBzdXBwb3J0cyBhbiBhbHRlcm5hdGl2ZSBzeW50YXggaW4gd2hpY2ggXCJlbGVtZW50c1wiIChvciBcImVcIiksIFwicHJvcGVydGllc1wiIChvciBcInBcIiksIGFuZCBcIm9wdGlvbnNcIiAob3IgXCJvXCIpXHJcblx0XHRcdCBvYmplY3RzIGFyZSBkZWZpbmVkIG9uIGEgY29udGFpbmVyIG9iamVjdCB0aGF0J3MgcGFzc2VkIGluIGFzIFZlbG9jaXR5J3Mgc29sZSBhcmd1bWVudC4gKi9cclxuXHRcdFx0LyogTm90ZTogU29tZSBicm93c2VycyBhdXRvbWF0aWNhbGx5IHBvcHVsYXRlIGFyZ3VtZW50cyB3aXRoIGEgXCJwcm9wZXJ0aWVzXCIgb2JqZWN0LiBXZSBkZXRlY3QgaXQgYnkgY2hlY2tpbmcgZm9yIGl0cyBkZWZhdWx0IFwibmFtZXNcIiBwcm9wZXJ0eS4gKi9cclxuXHRcdFx0dmFyIHN5bnRhY3RpY1N1Z2FyID0gKGFyZ3VtZW50c1swXSAmJiAoYXJndW1lbnRzWzBdLnAgfHwgKCgkLmlzUGxhaW5PYmplY3QoYXJndW1lbnRzWzBdLnByb3BlcnRpZXMpICYmICFhcmd1bWVudHNbMF0ucHJvcGVydGllcy5uYW1lcykgfHwgVHlwZS5pc1N0cmluZyhhcmd1bWVudHNbMF0ucHJvcGVydGllcykpKSksXHJcblx0XHRcdFx0XHQvKiBXaGV0aGVyIFZlbG9jaXR5IHdhcyBjYWxsZWQgdmlhIHRoZSB1dGlsaXR5IGZ1bmN0aW9uIChhcyBvcHBvc2VkIHRvIG9uIGEgalF1ZXJ5L1plcHRvIG9iamVjdCkuICovXHJcblx0XHRcdFx0XHRpc1V0aWxpdHksXHJcblx0XHRcdFx0XHQvKiBXaGVuIFZlbG9jaXR5IGlzIGNhbGxlZCB2aWEgdGhlIHV0aWxpdHkgZnVuY3Rpb24gKCQuVmVsb2NpdHkoKS9WZWxvY2l0eSgpKSwgZWxlbWVudHMgYXJlIGV4cGxpY2l0bHlcclxuXHRcdFx0XHRcdCBwYXNzZWQgaW4gYXMgdGhlIGZpcnN0IHBhcmFtZXRlci4gVGh1cywgYXJndW1lbnQgcG9zaXRpb25pbmcgdmFyaWVzLiBXZSBub3JtYWxpemUgdGhlbSBoZXJlLiAqL1xyXG5cdFx0XHRcdFx0ZWxlbWVudHNXcmFwcGVkLFxyXG5cdFx0XHRcdFx0YXJndW1lbnRJbmRleDtcclxuXHJcblx0XHRcdHZhciBlbGVtZW50cyxcclxuXHRcdFx0XHRcdHByb3BlcnRpZXNNYXAsXHJcblx0XHRcdFx0XHRvcHRpb25zO1xyXG5cclxuXHRcdFx0LyogRGV0ZWN0IGpRdWVyeS9aZXB0byBlbGVtZW50cyBiZWluZyBhbmltYXRlZCB2aWEgdGhlICQuZm4gbWV0aG9kLiAqL1xyXG5cdFx0XHRpZiAoVHlwZS5pc1dyYXBwZWQodGhpcykpIHtcclxuXHRcdFx0XHRpc1V0aWxpdHkgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0YXJndW1lbnRJbmRleCA9IDA7XHJcblx0XHRcdFx0ZWxlbWVudHMgPSB0aGlzO1xyXG5cdFx0XHRcdGVsZW1lbnRzV3JhcHBlZCA9IHRoaXM7XHJcblx0XHRcdFx0LyogT3RoZXJ3aXNlLCByYXcgZWxlbWVudHMgYXJlIGJlaW5nIGFuaW1hdGVkIHZpYSB0aGUgdXRpbGl0eSBmdW5jdGlvbi4gKi9cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRpc1V0aWxpdHkgPSB0cnVlO1xyXG5cclxuXHRcdFx0XHRhcmd1bWVudEluZGV4ID0gMTtcclxuXHRcdFx0XHRlbGVtZW50cyA9IHN5bnRhY3RpY1N1Z2FyID8gKGFyZ3VtZW50c1swXS5lbGVtZW50cyB8fCBhcmd1bWVudHNbMF0uZSkgOiBhcmd1bWVudHNbMF07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qKioqKioqKioqKioqKipcclxuXHRcdFx0IFByb21pc2VzXHJcblx0XHRcdCAqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHR2YXIgcHJvbWlzZURhdGEgPSB7XHJcblx0XHRcdFx0cHJvbWlzZTogbnVsbCxcclxuXHRcdFx0XHRyZXNvbHZlcjogbnVsbCxcclxuXHRcdFx0XHRyZWplY3RlcjogbnVsbFxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0LyogSWYgdGhpcyBjYWxsIHdhcyBtYWRlIHZpYSB0aGUgdXRpbGl0eSBmdW5jdGlvbiAod2hpY2ggaXMgdGhlIGRlZmF1bHQgbWV0aG9kIG9mIGludm9jYXRpb24gd2hlbiBqUXVlcnkvWmVwdG8gYXJlIG5vdCBiZWluZyB1c2VkKSwgYW5kIGlmXHJcblx0XHRcdCBwcm9taXNlIHN1cHBvcnQgd2FzIGRldGVjdGVkLCBjcmVhdGUgYSBwcm9taXNlIG9iamVjdCBmb3IgdGhpcyBjYWxsIGFuZCBzdG9yZSByZWZlcmVuY2VzIHRvIGl0cyByZXNvbHZlciBhbmQgcmVqZWN0ZXIgbWV0aG9kcy4gVGhlIHJlc29sdmVcclxuXHRcdFx0IG1ldGhvZCBpcyB1c2VkIHdoZW4gYSBjYWxsIGNvbXBsZXRlcyBuYXR1cmFsbHkgb3IgaXMgcHJlbWF0dXJlbHkgc3RvcHBlZCBieSB0aGUgdXNlci4gSW4gYm90aCBjYXNlcywgY29tcGxldGVDYWxsKCkgaGFuZGxlcyB0aGUgYXNzb2NpYXRlZFxyXG5cdFx0XHQgY2FsbCBjbGVhbnVwIGFuZCBwcm9taXNlIHJlc29sdmluZyBsb2dpYy4gVGhlIHJlamVjdCBtZXRob2QgaXMgdXNlZCB3aGVuIGFuIGludmFsaWQgc2V0IG9mIGFyZ3VtZW50cyBpcyBwYXNzZWQgaW50byBhIFZlbG9jaXR5IGNhbGwuICovXHJcblx0XHRcdC8qIE5vdGU6IFZlbG9jaXR5IGVtcGxveXMgYSBjYWxsLWJhc2VkIHF1ZXVlaW5nIGFyY2hpdGVjdHVyZSwgd2hpY2ggbWVhbnMgdGhhdCBzdG9wcGluZyBhbiBhbmltYXRpbmcgZWxlbWVudCBhY3R1YWxseSBzdG9wcyB0aGUgZnVsbCBjYWxsIHRoYXRcclxuXHRcdFx0IHRyaWdnZXJlZCBpdCAtLSBub3QgdGhhdCBvbmUgZWxlbWVudCBleGNsdXNpdmVseS4gU2ltaWxhcmx5LCB0aGVyZSBpcyBvbmUgcHJvbWlzZSBwZXIgY2FsbCwgYW5kIGFsbCBlbGVtZW50cyB0YXJnZXRlZCBieSBhIFZlbG9jaXR5IGNhbGwgYXJlXHJcblx0XHRcdCBncm91cGVkIHRvZ2V0aGVyIGZvciB0aGUgcHVycG9zZXMgb2YgcmVzb2x2aW5nIGFuZCByZWplY3RpbmcgYSBwcm9taXNlLiAqL1xyXG5cdFx0XHRpZiAoaXNVdGlsaXR5ICYmIFZlbG9jaXR5LlByb21pc2UpIHtcclxuXHRcdFx0XHRwcm9taXNlRGF0YS5wcm9taXNlID0gbmV3IFZlbG9jaXR5LlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XHJcblx0XHRcdFx0XHRwcm9taXNlRGF0YS5yZXNvbHZlciA9IHJlc29sdmU7XHJcblx0XHRcdFx0XHRwcm9taXNlRGF0YS5yZWplY3RlciA9IHJlamVjdDtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHN5bnRhY3RpY1N1Z2FyKSB7XHJcblx0XHRcdFx0cHJvcGVydGllc01hcCA9IGFyZ3VtZW50c1swXS5wcm9wZXJ0aWVzIHx8IGFyZ3VtZW50c1swXS5wO1xyXG5cdFx0XHRcdG9wdGlvbnMgPSBhcmd1bWVudHNbMF0ub3B0aW9ucyB8fCBhcmd1bWVudHNbMF0ubztcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRwcm9wZXJ0aWVzTWFwID0gYXJndW1lbnRzW2FyZ3VtZW50SW5kZXhdO1xyXG5cdFx0XHRcdG9wdGlvbnMgPSBhcmd1bWVudHNbYXJndW1lbnRJbmRleCArIDFdO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRlbGVtZW50cyA9IHNhbml0aXplRWxlbWVudHMoZWxlbWVudHMpO1xyXG5cclxuXHRcdFx0aWYgKCFlbGVtZW50cykge1xyXG5cdFx0XHRcdGlmIChwcm9taXNlRGF0YS5wcm9taXNlKSB7XHJcblx0XHRcdFx0XHRpZiAoIXByb3BlcnRpZXNNYXAgfHwgIW9wdGlvbnMgfHwgb3B0aW9ucy5wcm9taXNlUmVqZWN0RW1wdHkgIT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHRcdHByb21pc2VEYXRhLnJlamVjdGVyKCk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRwcm9taXNlRGF0YS5yZXNvbHZlcigpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qIFRoZSBsZW5ndGggb2YgdGhlIGVsZW1lbnQgc2V0IChpbiB0aGUgZm9ybSBvZiBhIG5vZGVMaXN0IG9yIGFuIGFycmF5IG9mIGVsZW1lbnRzKSBpcyBkZWZhdWx0ZWQgdG8gMSBpbiBjYXNlIGFcclxuXHRcdFx0IHNpbmdsZSByYXcgRE9NIGVsZW1lbnQgaXMgcGFzc2VkIGluICh3aGljaCBkb2Vzbid0IGNvbnRhaW4gYSBsZW5ndGggcHJvcGVydHkpLiAqL1xyXG5cdFx0XHR2YXIgZWxlbWVudHNMZW5ndGggPSBlbGVtZW50cy5sZW5ndGgsXHJcblx0XHRcdFx0XHRlbGVtZW50c0luZGV4ID0gMDtcclxuXHJcblx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0IEFyZ3VtZW50IE92ZXJsb2FkaW5nXHJcblx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHQvKiBTdXBwb3J0IGlzIGluY2x1ZGVkIGZvciBqUXVlcnkncyBhcmd1bWVudCBvdmVybG9hZGluZzogJC5hbmltYXRlKHByb3BlcnR5TWFwIFssIGR1cmF0aW9uXSBbLCBlYXNpbmddIFssIGNvbXBsZXRlXSkuXHJcblx0XHRcdCBPdmVybG9hZGluZyBpcyBkZXRlY3RlZCBieSBjaGVja2luZyBmb3IgdGhlIGFic2VuY2Ugb2YgYW4gb2JqZWN0IGJlaW5nIHBhc3NlZCBpbnRvIG9wdGlvbnMuICovXHJcblx0XHRcdC8qIE5vdGU6IFRoZSBzdG9wL2ZpbmlzaC9wYXVzZS9yZXN1bWUgYWN0aW9ucyBkbyBub3QgYWNjZXB0IGFuaW1hdGlvbiBvcHRpb25zLCBhbmQgYXJlIHRoZXJlZm9yZSBleGNsdWRlZCBmcm9tIHRoaXMgY2hlY2suICovXHJcblx0XHRcdGlmICghL14oc3RvcHxmaW5pc2h8ZmluaXNoQWxsfHBhdXNlfHJlc3VtZSkkL2kudGVzdChwcm9wZXJ0aWVzTWFwKSAmJiAhJC5pc1BsYWluT2JqZWN0KG9wdGlvbnMpKSB7XHJcblx0XHRcdFx0LyogVGhlIHV0aWxpdHkgZnVuY3Rpb24gc2hpZnRzIGFsbCBhcmd1bWVudHMgb25lIHBvc2l0aW9uIHRvIHRoZSByaWdodCwgc28gd2UgYWRqdXN0IGZvciB0aGF0IG9mZnNldC4gKi9cclxuXHRcdFx0XHR2YXIgc3RhcnRpbmdBcmd1bWVudFBvc2l0aW9uID0gYXJndW1lbnRJbmRleCArIDE7XHJcblxyXG5cdFx0XHRcdG9wdGlvbnMgPSB7fTtcclxuXHJcblx0XHRcdFx0LyogSXRlcmF0ZSB0aHJvdWdoIGFsbCBvcHRpb25zIGFyZ3VtZW50cyAqL1xyXG5cdFx0XHRcdGZvciAodmFyIGkgPSBzdGFydGluZ0FyZ3VtZW50UG9zaXRpb247IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdC8qIFRyZWF0IGEgbnVtYmVyIGFzIGEgZHVyYXRpb24uIFBhcnNlIGl0IG91dC4gKi9cclxuXHRcdFx0XHRcdC8qIE5vdGU6IFRoZSBmb2xsb3dpbmcgUmVnRXggd2lsbCByZXR1cm4gdHJ1ZSBpZiBwYXNzZWQgYW4gYXJyYXkgd2l0aCBhIG51bWJlciBhcyBpdHMgZmlyc3QgaXRlbS5cclxuXHRcdFx0XHRcdCBUaHVzLCBhcnJheXMgYXJlIHNraXBwZWQgZnJvbSB0aGlzIGNoZWNrLiAqL1xyXG5cdFx0XHRcdFx0aWYgKCFUeXBlLmlzQXJyYXkoYXJndW1lbnRzW2ldKSAmJiAoL14oZmFzdHxub3JtYWx8c2xvdykkL2kudGVzdChhcmd1bWVudHNbaV0pIHx8IC9eXFxkLy50ZXN0KGFyZ3VtZW50c1tpXSkpKSB7XHJcblx0XHRcdFx0XHRcdG9wdGlvbnMuZHVyYXRpb24gPSBhcmd1bWVudHNbaV07XHJcblx0XHRcdFx0XHRcdC8qIFRyZWF0IHN0cmluZ3MgYW5kIGFycmF5cyBhcyBlYXNpbmdzLiAqL1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmIChUeXBlLmlzU3RyaW5nKGFyZ3VtZW50c1tpXSkgfHwgVHlwZS5pc0FycmF5KGFyZ3VtZW50c1tpXSkpIHtcclxuXHRcdFx0XHRcdFx0b3B0aW9ucy5lYXNpbmcgPSBhcmd1bWVudHNbaV07XHJcblx0XHRcdFx0XHRcdC8qIFRyZWF0IGEgZnVuY3Rpb24gYXMgYSBjb21wbGV0ZSBjYWxsYmFjay4gKi9cclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoVHlwZS5pc0Z1bmN0aW9uKGFyZ3VtZW50c1tpXSkpIHtcclxuXHRcdFx0XHRcdFx0b3B0aW9ucy5jb21wbGV0ZSA9IGFyZ3VtZW50c1tpXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0IEFjdGlvbiBEZXRlY3Rpb25cclxuXHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdC8qIFZlbG9jaXR5J3MgYmVoYXZpb3IgaXMgY2F0ZWdvcml6ZWQgaW50byBcImFjdGlvbnNcIjogRWxlbWVudHMgY2FuIGVpdGhlciBiZSBzcGVjaWFsbHkgc2Nyb2xsZWQgaW50byB2aWV3LFxyXG5cdFx0XHQgb3IgdGhleSBjYW4gYmUgc3RhcnRlZCwgc3RvcHBlZCwgcGF1c2VkLCByZXN1bWVkLCBvciByZXZlcnNlZCAuIElmIGEgbGl0ZXJhbCBvciByZWZlcmVuY2VkIHByb3BlcnRpZXMgbWFwIGlzIHBhc3NlZCBpbiBhcyBWZWxvY2l0eSdzXHJcblx0XHRcdCBmaXJzdCBhcmd1bWVudCwgdGhlIGFzc29jaWF0ZWQgYWN0aW9uIGlzIFwic3RhcnRcIi4gQWx0ZXJuYXRpdmVseSwgXCJzY3JvbGxcIiwgXCJyZXZlcnNlXCIsIFwicGF1c2VcIiwgXCJyZXN1bWVcIiBvciBcInN0b3BcIiBjYW4gYmUgcGFzc2VkIGluIFxyXG5cdFx0XHQgaW5zdGVhZCBvZiBhIHByb3BlcnRpZXMgbWFwLiAqL1xyXG5cdFx0XHR2YXIgYWN0aW9uO1xyXG5cclxuXHRcdFx0c3dpdGNoIChwcm9wZXJ0aWVzTWFwKSB7XHJcblx0XHRcdFx0Y2FzZSBcInNjcm9sbFwiOlxyXG5cdFx0XHRcdFx0YWN0aW9uID0gXCJzY3JvbGxcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0XHRjYXNlIFwicmV2ZXJzZVwiOlxyXG5cdFx0XHRcdFx0YWN0aW9uID0gXCJyZXZlcnNlXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0Y2FzZSBcInBhdXNlXCI6XHJcblxyXG5cdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdCBBY3Rpb246IFBhdXNlXHJcblx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHR2YXIgY3VycmVudFRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xyXG5cclxuXHRcdFx0XHRcdC8qIEhhbmRsZSBkZWxheSB0aW1lcnMgKi9cclxuXHRcdFx0XHRcdCQuZWFjaChlbGVtZW50cywgZnVuY3Rpb24oaSwgZWxlbWVudCkge1xyXG5cdFx0XHRcdFx0XHRwYXVzZURlbGF5T25FbGVtZW50KGVsZW1lbnQsIGN1cnJlbnRUaW1lKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdC8qIFBhdXNlIGFuZCBSZXN1bWUgYXJlIGNhbGwtd2lkZSAobm90IG9uIGEgcGVyIGVsZW1lbnQgYmFzaXMpLiBUaHVzLCBjYWxsaW5nIHBhdXNlIG9yIHJlc3VtZSBvbiBhIFxyXG5cdFx0XHRcdFx0IHNpbmdsZSBlbGVtZW50IHdpbGwgY2F1c2UgYW55IGNhbGxzIHRoYXQgY29udGFpbnQgdHdlZW5zIGZvciB0aGF0IGVsZW1lbnQgdG8gYmUgcGF1c2VkL3Jlc3VtZWRcclxuXHRcdFx0XHRcdCBhcyB3ZWxsLiAqL1xyXG5cclxuXHRcdFx0XHRcdC8qIEl0ZXJhdGUgdGhyb3VnaCBhbGwgY2FsbHMgYW5kIHBhdXNlIGFueSB0aGF0IGNvbnRhaW4gYW55IG9mIG91ciBlbGVtZW50cyAqL1xyXG5cdFx0XHRcdFx0JC5lYWNoKFZlbG9jaXR5LlN0YXRlLmNhbGxzLCBmdW5jdGlvbihpLCBhY3RpdmVDYWxsKSB7XHJcblxyXG5cdFx0XHRcdFx0XHR2YXIgZm91bmQgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0LyogSW5hY3RpdmUgY2FsbHMgYXJlIHNldCB0byBmYWxzZSBieSB0aGUgbG9naWMgaW5zaWRlIGNvbXBsZXRlQ2FsbCgpLiBTa2lwIHRoZW0uICovXHJcblx0XHRcdFx0XHRcdGlmIChhY3RpdmVDYWxsKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogSXRlcmF0ZSB0aHJvdWdoIHRoZSBhY3RpdmUgY2FsbCdzIHRhcmdldGVkIGVsZW1lbnRzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdCQuZWFjaChhY3RpdmVDYWxsWzFdLCBmdW5jdGlvbihrLCBhY3RpdmVFbGVtZW50KSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgcXVldWVOYW1lID0gKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkgPyBcIlwiIDogb3B0aW9ucztcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAocXVldWVOYW1lICE9PSB0cnVlICYmIChhY3RpdmVDYWxsWzJdLnF1ZXVlICE9PSBxdWV1ZU5hbWUpICYmICEob3B0aW9ucyA9PT0gdW5kZWZpbmVkICYmIGFjdGl2ZUNhbGxbMl0ucXVldWUgPT09IGZhbHNlKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBJdGVyYXRlIHRocm91Z2ggdGhlIGNhbGxzIHRhcmdldGVkIGJ5IHRoZSBzdG9wIGNvbW1hbmQuICovXHJcblx0XHRcdFx0XHRcdFx0XHQkLmVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGwsIGVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogQ2hlY2sgdGhhdCB0aGlzIGNhbGwgd2FzIGFwcGxpZWQgdG8gdGhlIHRhcmdldCBlbGVtZW50LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZWxlbWVudCA9PT0gYWN0aXZlRWxlbWVudCkge1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBTZXQgY2FsbCB0byBwYXVzZWQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhY3RpdmVDYWxsWzVdID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzdW1lOiBmYWxzZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIE9uY2Ugd2UgbWF0Y2ggYW4gZWxlbWVudCwgd2UgY2FuIGJvdW5jZSBvdXQgdG8gdGhlIG5leHQgY2FsbCBlbnRpcmVseSAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIFByb2NlZWQgdG8gY2hlY2sgbmV4dCBjYWxsIGlmIHdlIGhhdmUgYWxyZWFkeSBtYXRjaGVkICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoZm91bmQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0LyogU2luY2UgcGF1c2UgY3JlYXRlcyBubyBuZXcgdHdlZW5zLCBleGl0IG91dCBvZiBWZWxvY2l0eS4gKi9cclxuXHRcdFx0XHRcdHJldHVybiBnZXRDaGFpbigpO1xyXG5cclxuXHRcdFx0XHRjYXNlIFwicmVzdW1lXCI6XHJcblxyXG5cdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdCBBY3Rpb246IFJlc3VtZVxyXG5cdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0LyogSGFuZGxlIGRlbGF5IHRpbWVycyAqL1xyXG5cdFx0XHRcdFx0JC5lYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihpLCBlbGVtZW50KSB7XHJcblx0XHRcdFx0XHRcdHJlc3VtZURlbGF5T25FbGVtZW50KGVsZW1lbnQsIGN1cnJlbnRUaW1lKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdC8qIFBhdXNlIGFuZCBSZXN1bWUgYXJlIGNhbGwtd2lkZSAobm90IG9uIGEgcGVyIGVsZW1udCBiYXNpcykuIFRodXMsIGNhbGxpbmcgcGF1c2Ugb3IgcmVzdW1lIG9uIGEgXHJcblx0XHRcdFx0XHQgc2luZ2xlIGVsZW1lbnQgd2lsbCBjYXVzZSBhbnkgY2FsbHMgdGhhdCBjb250YWludCB0d2VlbnMgZm9yIHRoYXQgZWxlbWVudCB0byBiZSBwYXVzZWQvcmVzdW1lZFxyXG5cdFx0XHRcdFx0IGFzIHdlbGwuICovXHJcblxyXG5cdFx0XHRcdFx0LyogSXRlcmF0ZSB0aHJvdWdoIGFsbCBjYWxscyBhbmQgcGF1c2UgYW55IHRoYXQgY29udGFpbiBhbnkgb2Ygb3VyIGVsZW1lbnRzICovXHJcblx0XHRcdFx0XHQkLmVhY2goVmVsb2NpdHkuU3RhdGUuY2FsbHMsIGZ1bmN0aW9uKGksIGFjdGl2ZUNhbGwpIHtcclxuXHRcdFx0XHRcdFx0dmFyIGZvdW5kID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdC8qIEluYWN0aXZlIGNhbGxzIGFyZSBzZXQgdG8gZmFsc2UgYnkgdGhlIGxvZ2ljIGluc2lkZSBjb21wbGV0ZUNhbGwoKS4gU2tpcCB0aGVtLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoYWN0aXZlQ2FsbCkge1xyXG5cdFx0XHRcdFx0XHRcdC8qIEl0ZXJhdGUgdGhyb3VnaCB0aGUgYWN0aXZlIGNhbGwncyB0YXJnZXRlZCBlbGVtZW50cy4gKi9cclxuXHRcdFx0XHRcdFx0XHQkLmVhY2goYWN0aXZlQ2FsbFsxXSwgZnVuY3Rpb24oaywgYWN0aXZlRWxlbWVudCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHF1ZXVlTmFtZSA9IChvcHRpb25zID09PSB1bmRlZmluZWQpID8gXCJcIiA6IG9wdGlvbnM7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHF1ZXVlTmFtZSAhPT0gdHJ1ZSAmJiAoYWN0aXZlQ2FsbFsyXS5xdWV1ZSAhPT0gcXVldWVOYW1lKSAmJiAhKG9wdGlvbnMgPT09IHVuZGVmaW5lZCAmJiBhY3RpdmVDYWxsWzJdLnF1ZXVlID09PSBmYWxzZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogU2tpcCBhbnkgY2FsbHMgdGhhdCBoYXZlIG5ldmVyIGJlZW4gcGF1c2VkICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIWFjdGl2ZUNhbGxbNV0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogSXRlcmF0ZSB0aHJvdWdoIHRoZSBjYWxscyB0YXJnZXRlZCBieSB0aGUgc3RvcCBjb21tYW5kLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0JC5lYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihsLCBlbGVtZW50KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIENoZWNrIHRoYXQgdGhpcyBjYWxsIHdhcyBhcHBsaWVkIHRvIHRoZSB0YXJnZXQgZWxlbWVudC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVsZW1lbnQgPT09IGFjdGl2ZUVsZW1lbnQpIHtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogRmxhZyBhIHBhdXNlIG9iamVjdCB0byBiZSByZXN1bWVkLCB3aGljaCB3aWxsIG9jY3VyIGR1cmluZyB0aGUgbmV4dCB0aWNrLiBJblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCBhZGRpdGlvbiwgdGhlIHBhdXNlIG9iamVjdCB3aWxsIGF0IHRoYXQgdGltZSBiZSBkZWxldGVkICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0YWN0aXZlQ2FsbFs1XS5yZXN1bWUgPSB0cnVlO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBPbmNlIHdlIG1hdGNoIGFuIGVsZW1lbnQsIHdlIGNhbiBib3VuY2Ugb3V0IHRvIHRoZSBuZXh0IGNhbGwgZW50aXJlbHkgKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3VuZCA9IHRydWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBQcm9jZWVkIHRvIGNoZWNrIG5leHQgY2FsbCBpZiB3ZSBoYXZlIGFscmVhZHkgbWF0Y2hlZCAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGZvdW5kKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdC8qIFNpbmNlIHJlc3VtZSBjcmVhdGVzIG5vIG5ldyB0d2VlbnMsIGV4aXQgb3V0IG9mIFZlbG9jaXR5LiAqL1xyXG5cdFx0XHRcdFx0cmV0dXJuIGdldENoYWluKCk7XHJcblxyXG5cdFx0XHRcdGNhc2UgXCJmaW5pc2hcIjpcclxuXHRcdFx0XHRjYXNlIFwiZmluaXNoQWxsXCI6XHJcblx0XHRcdFx0Y2FzZSBcInN0b3BcIjpcclxuXHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHQgQWN0aW9uOiBTdG9wXHJcblx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHQvKiBDbGVhciB0aGUgY3VycmVudGx5LWFjdGl2ZSBkZWxheSBvbiBlYWNoIHRhcmdldGVkIGVsZW1lbnQuICovXHJcblx0XHRcdFx0XHQkLmVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGksIGVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdFx0aWYgKERhdGEoZWxlbWVudCkgJiYgRGF0YShlbGVtZW50KS5kZWxheVRpbWVyKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogU3RvcCB0aGUgdGltZXIgZnJvbSB0cmlnZ2VyaW5nIGl0cyBjYWNoZWQgbmV4dCgpIGZ1bmN0aW9uLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGNsZWFyVGltZW91dChEYXRhKGVsZW1lbnQpLmRlbGF5VGltZXIuc2V0VGltZW91dCk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIE1hbnVhbGx5IGNhbGwgdGhlIG5leHQoKSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBzdWJzZXF1ZW50IHF1ZXVlIGl0ZW1zIGNhbiBwcm9ncmVzcy4gKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAoRGF0YShlbGVtZW50KS5kZWxheVRpbWVyLm5leHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdERhdGEoZWxlbWVudCkuZGVsYXlUaW1lci5uZXh0KCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRkZWxldGUgRGF0YShlbGVtZW50KS5kZWxheVRpbWVyO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBJZiB3ZSB3YW50IHRvIGZpbmlzaCBldmVyeXRoaW5nIGluIHRoZSBxdWV1ZSwgd2UgaGF2ZSB0byBpdGVyYXRlIHRocm91Z2ggaXRcclxuXHRcdFx0XHRcdFx0IGFuZCBjYWxsIGVhY2ggZnVuY3Rpb24uIFRoaXMgd2lsbCBtYWtlIHRoZW0gYWN0aXZlIGNhbGxzIGJlbG93LCB3aGljaCB3aWxsXHJcblx0XHRcdFx0XHRcdCBjYXVzZSB0aGVtIHRvIGJlIGFwcGxpZWQgdmlhIHRoZSBkdXJhdGlvbiBzZXR0aW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydGllc01hcCA9PT0gXCJmaW5pc2hBbGxcIiAmJiAob3B0aW9ucyA9PT0gdHJ1ZSB8fCBUeXBlLmlzU3RyaW5nKG9wdGlvbnMpKSkge1xyXG5cdFx0XHRcdFx0XHRcdC8qIEl0ZXJhdGUgdGhyb3VnaCB0aGUgaXRlbXMgaW4gdGhlIGVsZW1lbnQncyBxdWV1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHQkLmVhY2goJC5xdWV1ZShlbGVtZW50LCBUeXBlLmlzU3RyaW5nKG9wdGlvbnMpID8gb3B0aW9ucyA6IFwiXCIpLCBmdW5jdGlvbihfLCBpdGVtKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBUaGUgcXVldWUgYXJyYXkgY2FuIGNvbnRhaW4gYW4gXCJpbnByb2dyZXNzXCIgc3RyaW5nLCB3aGljaCB3ZSBza2lwLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKFR5cGUuaXNGdW5jdGlvbihpdGVtKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpdGVtKCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIENsZWFyaW5nIHRoZSAkLnF1ZXVlKCkgYXJyYXkgaXMgYWNoaWV2ZWQgYnkgcmVzZXR0aW5nIGl0IHRvIFtdLiAqL1xyXG5cdFx0XHRcdFx0XHRcdCQucXVldWUoZWxlbWVudCwgVHlwZS5pc1N0cmluZyhvcHRpb25zKSA/IG9wdGlvbnMgOiBcIlwiLCBbXSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdHZhciBjYWxsc1RvU3RvcCA9IFtdO1xyXG5cclxuXHRcdFx0XHRcdC8qIFdoZW4gdGhlIHN0b3AgYWN0aW9uIGlzIHRyaWdnZXJlZCwgdGhlIGVsZW1lbnRzJyBjdXJyZW50bHkgYWN0aXZlIGNhbGwgaXMgaW1tZWRpYXRlbHkgc3RvcHBlZC4gVGhlIGFjdGl2ZSBjYWxsIG1pZ2h0IGhhdmVcclxuXHRcdFx0XHRcdCBiZWVuIGFwcGxpZWQgdG8gbXVsdGlwbGUgZWxlbWVudHMsIGluIHdoaWNoIGNhc2UgYWxsIG9mIHRoZSBjYWxsJ3MgZWxlbWVudHMgd2lsbCBiZSBzdG9wcGVkLiBXaGVuIGFuIGVsZW1lbnRcclxuXHRcdFx0XHRcdCBpcyBzdG9wcGVkLCB0aGUgbmV4dCBpdGVtIGluIGl0cyBhbmltYXRpb24gcXVldWUgaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcmVkLiAqL1xyXG5cdFx0XHRcdFx0LyogQW4gYWRkaXRpb25hbCBhcmd1bWVudCBtYXkgYmUgcGFzc2VkIGluIHRvIGNsZWFyIGFuIGVsZW1lbnQncyByZW1haW5pbmcgcXVldWVkIGNhbGxzLiBFaXRoZXIgdHJ1ZSAod2hpY2ggZGVmYXVsdHMgdG8gdGhlIFwiZnhcIiBxdWV1ZSlcclxuXHRcdFx0XHRcdCBvciBhIGN1c3RvbSBxdWV1ZSBzdHJpbmcgY2FuIGJlIHBhc3NlZCBpbi4gKi9cclxuXHRcdFx0XHRcdC8qIE5vdGU6IFRoZSBzdG9wIGNvbW1hbmQgcnVucyBwcmlvciB0byBWZWxvY2l0eSdzIFF1ZXVlaW5nIHBoYXNlIHNpbmNlIGl0cyBiZWhhdmlvciBpcyBpbnRlbmRlZCB0byB0YWtlIGVmZmVjdCAqaW1tZWRpYXRlbHkqLFxyXG5cdFx0XHRcdFx0IHJlZ2FyZGxlc3Mgb2YgdGhlIGVsZW1lbnQncyBjdXJyZW50IHF1ZXVlIHN0YXRlLiAqL1xyXG5cclxuXHRcdFx0XHRcdC8qIEl0ZXJhdGUgdGhyb3VnaCBldmVyeSBhY3RpdmUgY2FsbC4gKi9cclxuXHRcdFx0XHRcdCQuZWFjaChWZWxvY2l0eS5TdGF0ZS5jYWxscywgZnVuY3Rpb24oaSwgYWN0aXZlQ2FsbCkge1xyXG5cdFx0XHRcdFx0XHQvKiBJbmFjdGl2ZSBjYWxscyBhcmUgc2V0IHRvIGZhbHNlIGJ5IHRoZSBsb2dpYyBpbnNpZGUgY29tcGxldGVDYWxsKCkuIFNraXAgdGhlbS4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKGFjdGl2ZUNhbGwpIHtcclxuXHRcdFx0XHRcdFx0XHQvKiBJdGVyYXRlIHRocm91Z2ggdGhlIGFjdGl2ZSBjYWxsJ3MgdGFyZ2V0ZWQgZWxlbWVudHMuICovXHJcblx0XHRcdFx0XHRcdFx0JC5lYWNoKGFjdGl2ZUNhbGxbMV0sIGZ1bmN0aW9uKGssIGFjdGl2ZUVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIElmIHRydWUgd2FzIHBhc3NlZCBpbiBhcyBhIHNlY29uZGFyeSBhcmd1bWVudCwgY2xlYXIgYWJzb2x1dGVseSBhbGwgY2FsbHMgb24gdGhpcyBlbGVtZW50LiBPdGhlcndpc2UsIG9ubHlcclxuXHRcdFx0XHRcdFx0XHRcdCBjbGVhciBjYWxscyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlbGV2YW50IHF1ZXVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogQ2FsbCBzdG9wcGluZyBsb2dpYyB3b3JrcyBhcyBmb2xsb3dzOlxyXG5cdFx0XHRcdFx0XHRcdFx0IC0gb3B0aW9ucyA9PT0gdHJ1ZSAtLT4gc3RvcCBjdXJyZW50IGRlZmF1bHQgcXVldWUgY2FsbHMgKGFuZCBxdWV1ZTpmYWxzZSBjYWxscyksIGluY2x1ZGluZyByZW1haW5pbmcgcXVldWVkIG9uZXMuXHJcblx0XHRcdFx0XHRcdFx0XHQgLSBvcHRpb25zID09PSB1bmRlZmluZWQgLS0+IHN0b3AgY3VycmVudCBxdWV1ZTpcIlwiIGNhbGwgYW5kIGFsbCBxdWV1ZTpmYWxzZSBjYWxscy5cclxuXHRcdFx0XHRcdFx0XHRcdCAtIG9wdGlvbnMgPT09IGZhbHNlIC0tPiBzdG9wIG9ubHkgcXVldWU6ZmFsc2UgY2FsbHMuXHJcblx0XHRcdFx0XHRcdFx0XHQgLSBvcHRpb25zID09PSBcImN1c3RvbVwiIC0tPiBzdG9wIGN1cnJlbnQgcXVldWU6XCJjdXN0b21cIiBjYWxsLCBpbmNsdWRpbmcgcmVtYWluaW5nIHF1ZXVlZCBvbmVzICh0aGVyZSBpcyBubyBmdW5jdGlvbmFsaXR5IHRvIG9ubHkgY2xlYXIgdGhlIGN1cnJlbnRseS1ydW5uaW5nIHF1ZXVlOlwiY3VzdG9tXCIgY2FsbCkuICovXHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgcXVldWVOYW1lID0gKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkgPyBcIlwiIDogb3B0aW9ucztcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAocXVldWVOYW1lICE9PSB0cnVlICYmIChhY3RpdmVDYWxsWzJdLnF1ZXVlICE9PSBxdWV1ZU5hbWUpICYmICEob3B0aW9ucyA9PT0gdW5kZWZpbmVkICYmIGFjdGl2ZUNhbGxbMl0ucXVldWUgPT09IGZhbHNlKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBJdGVyYXRlIHRocm91Z2ggdGhlIGNhbGxzIHRhcmdldGVkIGJ5IHRoZSBzdG9wIGNvbW1hbmQuICovXHJcblx0XHRcdFx0XHRcdFx0XHQkLmVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGwsIGVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogQ2hlY2sgdGhhdCB0aGlzIGNhbGwgd2FzIGFwcGxpZWQgdG8gdGhlIHRhcmdldCBlbGVtZW50LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZWxlbWVudCA9PT0gYWN0aXZlRWxlbWVudCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIE9wdGlvbmFsbHkgY2xlYXIgdGhlIHJlbWFpbmluZyBxdWV1ZWQgY2FsbHMuIElmIHdlJ3JlIGRvaW5nIFwiZmluaXNoQWxsXCIgdGhpcyB3b24ndCBmaW5kIGFueXRoaW5nLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCBkdWUgdG8gdGhlIHF1ZXVlLWNsZWFyaW5nIGFib3ZlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChvcHRpb25zID09PSB0cnVlIHx8IFR5cGUuaXNTdHJpbmcob3B0aW9ucykpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIEl0ZXJhdGUgdGhyb3VnaCB0aGUgaXRlbXMgaW4gdGhlIGVsZW1lbnQncyBxdWV1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCQuZWFjaCgkLnF1ZXVlKGVsZW1lbnQsIFR5cGUuaXNTdHJpbmcob3B0aW9ucykgPyBvcHRpb25zIDogXCJcIiksIGZ1bmN0aW9uKF8sIGl0ZW0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogVGhlIHF1ZXVlIGFycmF5IGNhbiBjb250YWluIGFuIFwiaW5wcm9ncmVzc1wiIHN0cmluZywgd2hpY2ggd2Ugc2tpcC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKFR5cGUuaXNGdW5jdGlvbihpdGVtKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIFBhc3MgdGhlIGl0ZW0ncyBjYWxsYmFjayBhIGZsYWcgaW5kaWNhdGluZyB0aGF0IHdlIHdhbnQgdG8gYWJvcnQgZnJvbSB0aGUgcXVldWUgY2FsbC5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgKFNwZWNpZmljYWxseSwgdGhlIHF1ZXVlIHdpbGwgcmVzb2x2ZSB0aGUgY2FsbCdzIGFzc29jaWF0ZWQgcHJvbWlzZSB0aGVuIGFib3J0LikgICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbShudWxsLCB0cnVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogQ2xlYXJpbmcgdGhlICQucXVldWUoKSBhcnJheSBpcyBhY2hpZXZlZCBieSByZXNldHRpbmcgaXQgdG8gW10uICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkLnF1ZXVlKGVsZW1lbnQsIFR5cGUuaXNTdHJpbmcob3B0aW9ucykgPyBvcHRpb25zIDogXCJcIiwgW10pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHByb3BlcnRpZXNNYXAgPT09IFwic3RvcFwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBTaW5jZSBcInJldmVyc2VcIiB1c2VzIGNhY2hlZCBzdGFydCB2YWx1ZXMgKHRoZSBwcmV2aW91cyBjYWxsJ3MgZW5kVmFsdWVzKSwgdGhlc2UgdmFsdWVzIG11c3QgYmVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCBjaGFuZ2VkIHRvIHJlZmxlY3QgdGhlIGZpbmFsIHZhbHVlIHRoYXQgdGhlIGVsZW1lbnRzIHdlcmUgYWN0dWFsbHkgdHdlZW5lZCB0by4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIE5vdGU6IElmIG9ubHkgcXVldWU6ZmFsc2UvcXVldWU6XCJjdXN0b21cIiBhbmltYXRpb25zIGFyZSBjdXJyZW50bHkgcnVubmluZyBvbiBhbiBlbGVtZW50LCBpdCB3b24ndCBoYXZlIGEgdHdlZW5zQ29udGFpbmVyXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgb2JqZWN0LiBBbHNvLCBxdWV1ZTpmYWxzZS9xdWV1ZTpcImN1c3RvbVwiIGFuaW1hdGlvbnMgY2FuJ3QgYmUgcmV2ZXJzZWQuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGF0YSA9IERhdGEoZWxlbWVudCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZGF0YSAmJiBkYXRhLnR3ZWVuc0NvbnRhaW5lciAmJiAocXVldWVOYW1lID09PSB0cnVlIHx8IHF1ZXVlTmFtZSA9PT0gXCJcIikpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JC5lYWNoKGRhdGEudHdlZW5zQ29udGFpbmVyLCBmdW5jdGlvbihtLCBhY3RpdmVUd2Vlbikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFjdGl2ZVR3ZWVuLmVuZFZhbHVlID0gYWN0aXZlVHdlZW4uY3VycmVudFZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYWxsc1RvU3RvcC5wdXNoKGkpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAocHJvcGVydGllc01hcCA9PT0gXCJmaW5pc2hcIiB8fCBwcm9wZXJ0aWVzTWFwID09PSBcImZpbmlzaEFsbFwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBUbyBnZXQgYWN0aXZlIHR3ZWVucyB0byBmaW5pc2ggaW1tZWRpYXRlbHksIHdlIGZvcmNlZnVsbHkgc2hvcnRlbiB0aGVpciBkdXJhdGlvbnMgdG8gMW1zIHNvIHRoYXRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCB0aGV5IGZpbmlzaCB1cG9uIHRoZSBuZXh0IHJBZiB0aWNrIHRoZW4gcHJvY2VlZCB3aXRoIG5vcm1hbCBjYWxsIGNvbXBsZXRpb24gbG9naWMuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhY3RpdmVDYWxsWzJdLmR1cmF0aW9uID0gMTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHQvKiBQcmVtYXR1cmVseSBjYWxsIGNvbXBsZXRlQ2FsbCgpIG9uIGVhY2ggbWF0Y2hlZCBhY3RpdmUgY2FsbC4gUGFzcyBhbiBhZGRpdGlvbmFsIGZsYWcgZm9yIFwic3RvcFwiIHRvIGluZGljYXRlXHJcblx0XHRcdFx0XHQgdGhhdCB0aGUgY29tcGxldGUgY2FsbGJhY2sgYW5kIGRpc3BsYXk6bm9uZSBzZXR0aW5nIHNob3VsZCBiZSBza2lwcGVkIHNpbmNlIHdlJ3JlIGNvbXBsZXRpbmcgcHJlbWF0dXJlbHkuICovXHJcblx0XHRcdFx0XHRpZiAocHJvcGVydGllc01hcCA9PT0gXCJzdG9wXCIpIHtcclxuXHRcdFx0XHRcdFx0JC5lYWNoKGNhbGxzVG9TdG9wLCBmdW5jdGlvbihpLCBqKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tcGxldGVDYWxsKGosIHRydWUpO1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChwcm9taXNlRGF0YS5wcm9taXNlKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogSW1tZWRpYXRlbHkgcmVzb2x2ZSB0aGUgcHJvbWlzZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdG9wIGNhbGwgc2luY2Ugc3RvcCBydW5zIHN5bmNocm9ub3VzbHkuICovXHJcblx0XHRcdFx0XHRcdFx0cHJvbWlzZURhdGEucmVzb2x2ZXIoZWxlbWVudHMpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogU2luY2Ugd2UncmUgc3RvcHBpbmcsIGFuZCBub3QgcHJvY2VlZGluZyB3aXRoIHF1ZXVlaW5nLCBleGl0IG91dCBvZiBWZWxvY2l0eS4gKi9cclxuXHRcdFx0XHRcdHJldHVybiBnZXRDaGFpbigpO1xyXG5cclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0LyogVHJlYXQgYSBub24tZW1wdHkgcGxhaW4gb2JqZWN0IGFzIGEgbGl0ZXJhbCBwcm9wZXJ0aWVzIG1hcC4gKi9cclxuXHRcdFx0XHRcdGlmICgkLmlzUGxhaW5PYmplY3QocHJvcGVydGllc01hcCkgJiYgIVR5cGUuaXNFbXB0eU9iamVjdChwcm9wZXJ0aWVzTWFwKSkge1xyXG5cdFx0XHRcdFx0XHRhY3Rpb24gPSBcInN0YXJ0XCI7XHJcblxyXG5cdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHQgUmVkaXJlY3RzXHJcblx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0LyogQ2hlY2sgaWYgYSBzdHJpbmcgbWF0Y2hlcyBhIHJlZ2lzdGVyZWQgcmVkaXJlY3QgKHNlZSBSZWRpcmVjdHMgYWJvdmUpLiAqL1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmIChUeXBlLmlzU3RyaW5nKHByb3BlcnRpZXNNYXApICYmIFZlbG9jaXR5LlJlZGlyZWN0c1twcm9wZXJ0aWVzTWFwXSkge1xyXG5cdFx0XHRcdFx0XHRvcHRzID0gJC5leHRlbmQoe30sIG9wdGlvbnMpO1xyXG5cclxuXHRcdFx0XHRcdFx0dmFyIGR1cmF0aW9uT3JpZ2luYWwgPSBvcHRzLmR1cmF0aW9uLFxyXG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXlPcmlnaW5hbCA9IG9wdHMuZGVsYXkgfHwgMDtcclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZSBiYWNrd2FyZHMgb3B0aW9uIHdhcyBwYXNzZWQgaW4sIHJldmVyc2UgdGhlIGVsZW1lbnQgc2V0IHNvIHRoYXQgZWxlbWVudHMgYW5pbWF0ZSBmcm9tIHRoZSBsYXN0IHRvIHRoZSBmaXJzdC4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKG9wdHMuYmFja3dhcmRzID09PSB0cnVlKSB7XHJcblx0XHRcdFx0XHRcdFx0ZWxlbWVudHMgPSAkLmV4dGVuZCh0cnVlLCBbXSwgZWxlbWVudHMpLnJldmVyc2UoKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyogSW5kaXZpZHVhbGx5IHRyaWdnZXIgdGhlIHJlZGlyZWN0IGZvciBlYWNoIGVsZW1lbnQgaW4gdGhlIHNldCB0byBwcmV2ZW50IHVzZXJzIGZyb20gaGF2aW5nIHRvIGhhbmRsZSBpdGVyYXRpb24gbG9naWMgaW4gdGhlaXIgcmVkaXJlY3QuICovXHJcblx0XHRcdFx0XHRcdCQuZWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudEluZGV4LCBlbGVtZW50KSB7XHJcblx0XHRcdFx0XHRcdFx0LyogSWYgdGhlIHN0YWdnZXIgb3B0aW9uIHdhcyBwYXNzZWQgaW4sIHN1Y2Nlc3NpdmVseSBkZWxheSBlYWNoIGVsZW1lbnQgYnkgdGhlIHN0YWdnZXIgdmFsdWUgKGluIG1zKS4gUmV0YWluIHRoZSBvcmlnaW5hbCBkZWxheSB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAocGFyc2VGbG9hdChvcHRzLnN0YWdnZXIpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRvcHRzLmRlbGF5ID0gZGVsYXlPcmlnaW5hbCArIChwYXJzZUZsb2F0KG9wdHMuc3RhZ2dlcikgKiBlbGVtZW50SW5kZXgpO1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoVHlwZS5pc0Z1bmN0aW9uKG9wdHMuc3RhZ2dlcikpIHtcclxuXHRcdFx0XHRcdFx0XHRcdG9wdHMuZGVsYXkgPSBkZWxheU9yaWdpbmFsICsgb3B0cy5zdGFnZ2VyLmNhbGwoZWxlbWVudCwgZWxlbWVudEluZGV4LCBlbGVtZW50c0xlbmd0aCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBJZiB0aGUgZHJhZyBvcHRpb24gd2FzIHBhc3NlZCBpbiwgc3VjY2Vzc2l2ZWx5IGluY3JlYXNlL2RlY3JlYXNlIChkZXBlbmRpbmcgb24gdGhlIHByZXNlbnNlIG9mIG9wdHMuYmFja3dhcmRzKVxyXG5cdFx0XHRcdFx0XHRcdCB0aGUgZHVyYXRpb24gb2YgZWFjaCBlbGVtZW50J3MgYW5pbWF0aW9uLCB1c2luZyBmbG9vcnMgdG8gcHJldmVudCBwcm9kdWNpbmcgdmVyeSBzaG9ydCBkdXJhdGlvbnMuICovXHJcblx0XHRcdFx0XHRcdFx0aWYgKG9wdHMuZHJhZykge1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogRGVmYXVsdCB0aGUgZHVyYXRpb24gb2YgVUkgcGFjayBlZmZlY3RzIChjYWxsb3V0cyBhbmQgdHJhbnNpdGlvbnMpIHRvIDEwMDBtcyBpbnN0ZWFkIG9mIHRoZSB1c3VhbCBkZWZhdWx0IGR1cmF0aW9uIG9mIDQwMG1zLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0b3B0cy5kdXJhdGlvbiA9IHBhcnNlRmxvYXQoZHVyYXRpb25PcmlnaW5hbCkgfHwgKC9eKGNhbGxvdXR8dHJhbnNpdGlvbikvLnRlc3QocHJvcGVydGllc01hcCkgPyAxMDAwIDogRFVSQVRJT05fREVGQVVMVCk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogRm9yIGVhY2ggZWxlbWVudCwgdGFrZSB0aGUgZ3JlYXRlciBkdXJhdGlvbiBvZjogQSkgYW5pbWF0aW9uIGNvbXBsZXRpb24gcGVyY2VudGFnZSByZWxhdGl2ZSB0byB0aGUgb3JpZ2luYWwgZHVyYXRpb24sXHJcblx0XHRcdFx0XHRcdFx0XHQgQikgNzUlIG9mIHRoZSBvcmlnaW5hbCBkdXJhdGlvbiwgb3IgQykgYSAyMDBtcyBmYWxsYmFjayAoaW4gY2FzZSBkdXJhdGlvbiBpcyBhbHJlYWR5IHNldCB0byBhIGxvdyB2YWx1ZSkuXHJcblx0XHRcdFx0XHRcdFx0XHQgVGhlIGVuZCByZXN1bHQgaXMgYSBiYXNlbGluZSBvZiA3NSUgb2YgdGhlIHJlZGlyZWN0J3MgZHVyYXRpb24gdGhhdCBpbmNyZWFzZXMvZGVjcmVhc2VzIGFzIHRoZSBlbmQgb2YgdGhlIGVsZW1lbnQgc2V0IGlzIGFwcHJvYWNoZWQuICovXHJcblx0XHRcdFx0XHRcdFx0XHRvcHRzLmR1cmF0aW9uID0gTWF0aC5tYXgob3B0cy5kdXJhdGlvbiAqIChvcHRzLmJhY2t3YXJkcyA/IDEgLSBlbGVtZW50SW5kZXggLyBlbGVtZW50c0xlbmd0aCA6IChlbGVtZW50SW5kZXggKyAxKSAvIGVsZW1lbnRzTGVuZ3RoKSwgb3B0cy5kdXJhdGlvbiAqIDAuNzUsIDIwMCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBQYXNzIGluIHRoZSBjYWxsJ3Mgb3B0cyBvYmplY3Qgc28gdGhhdCB0aGUgcmVkaXJlY3QgY2FuIG9wdGlvbmFsbHkgZXh0ZW5kIGl0LiBJdCBkZWZhdWx0cyB0byBhbiBlbXB0eSBvYmplY3QgaW5zdGVhZCBvZiBudWxsIHRvXHJcblx0XHRcdFx0XHRcdFx0IHJlZHVjZSB0aGUgb3B0cyBjaGVja2luZyBsb2dpYyByZXF1aXJlZCBpbnNpZGUgdGhlIHJlZGlyZWN0LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFZlbG9jaXR5LlJlZGlyZWN0c1twcm9wZXJ0aWVzTWFwXS5jYWxsKGVsZW1lbnQsIGVsZW1lbnQsIG9wdHMgfHwge30sIGVsZW1lbnRJbmRleCwgZWxlbWVudHNMZW5ndGgsIGVsZW1lbnRzLCBwcm9taXNlRGF0YS5wcm9taXNlID8gcHJvbWlzZURhdGEgOiB1bmRlZmluZWQpO1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIFNpbmNlIHRoZSBhbmltYXRpb24gbG9naWMgcmVzaWRlcyB3aXRoaW4gdGhlIHJlZGlyZWN0J3Mgb3duIGNvZGUsIGFib3J0IHRoZSByZW1haW5kZXIgb2YgdGhpcyBjYWxsLlxyXG5cdFx0XHRcdFx0XHQgKFRoZSBwZXJmb3JtYW5jZSBvdmVyaGVhZCB1cCB0byB0aGlzIHBvaW50IGlzIHZpcnR1YWxseSBub24tZXhpc3RhbnQuKSAqL1xyXG5cdFx0XHRcdFx0XHQvKiBOb3RlOiBUaGUgalF1ZXJ5IGNhbGwgY2hhaW4gaXMga2VwdCBpbnRhY3QgYnkgcmV0dXJuaW5nIHRoZSBjb21wbGV0ZSBlbGVtZW50IHNldC4gKi9cclxuXHRcdFx0XHRcdFx0cmV0dXJuIGdldENoYWluKCk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHR2YXIgYWJvcnRFcnJvciA9IFwiVmVsb2NpdHk6IEZpcnN0IGFyZ3VtZW50IChcIiArIHByb3BlcnRpZXNNYXAgKyBcIikgd2FzIG5vdCBhIHByb3BlcnR5IG1hcCwgYSBrbm93biBhY3Rpb24sIG9yIGEgcmVnaXN0ZXJlZCByZWRpcmVjdC4gQWJvcnRpbmcuXCI7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocHJvbWlzZURhdGEucHJvbWlzZSkge1xyXG5cdFx0XHRcdFx0XHRcdHByb21pc2VEYXRhLnJlamVjdGVyKG5ldyBFcnJvcihhYm9ydEVycm9yKSk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAod2luZG93LmNvbnNvbGUpIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhhYm9ydEVycm9yKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0cmV0dXJuIGdldENoYWluKCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgQ2FsbC1XaWRlIFZhcmlhYmxlc1xyXG5cdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHQvKiBBIGNvbnRhaW5lciBmb3IgQ1NTIHVuaXQgY29udmVyc2lvbiByYXRpb3MgKGUuZy4gJSwgcmVtLCBhbmQgZW0gPT0+IHB4KSB0aGF0IGlzIHVzZWQgdG8gY2FjaGUgcmF0aW9zIGFjcm9zcyBhbGwgZWxlbWVudHNcclxuXHRcdFx0IGJlaW5nIGFuaW1hdGVkIGluIGEgc2luZ2xlIFZlbG9jaXR5IGNhbGwuIENhbGN1bGF0aW5nIHVuaXQgcmF0aW9zIG5lY2Vzc2l0YXRlcyBET00gcXVlcnlpbmcgYW5kIHVwZGF0aW5nLCBhbmQgaXMgdGhlcmVmb3JlXHJcblx0XHRcdCBhdm9pZGVkICh2aWEgY2FjaGluZykgd2hlcmV2ZXIgcG9zc2libGUuIFRoaXMgY29udGFpbmVyIGlzIGNhbGwtd2lkZSBpbnN0ZWFkIG9mIHBhZ2Utd2lkZSB0byBhdm9pZCB0aGUgcmlzayBvZiB1c2luZyBzdGFsZVxyXG5cdFx0XHQgY29udmVyc2lvbiBtZXRyaWNzIGFjcm9zcyBWZWxvY2l0eSBhbmltYXRpb25zIHRoYXQgYXJlIG5vdCBpbW1lZGlhdGVseSBjb25zZWN1dGl2ZWx5IGNoYWluZWQuICovXHJcblx0XHRcdHZhciBjYWxsVW5pdENvbnZlcnNpb25EYXRhID0ge1xyXG5cdFx0XHRcdGxhc3RQYXJlbnQ6IG51bGwsXHJcblx0XHRcdFx0bGFzdFBvc2l0aW9uOiBudWxsLFxyXG5cdFx0XHRcdGxhc3RGb250U2l6ZTogbnVsbCxcclxuXHRcdFx0XHRsYXN0UGVyY2VudFRvUHhXaWR0aDogbnVsbCxcclxuXHRcdFx0XHRsYXN0UGVyY2VudFRvUHhIZWlnaHQ6IG51bGwsXHJcblx0XHRcdFx0bGFzdEVtVG9QeDogbnVsbCxcclxuXHRcdFx0XHRyZW1Ub1B4OiBudWxsLFxyXG5cdFx0XHRcdHZ3VG9QeDogbnVsbCxcclxuXHRcdFx0XHR2aFRvUHg6IG51bGxcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdC8qIEEgY29udGFpbmVyIGZvciBhbGwgdGhlIGVuc3VpbmcgdHdlZW4gZGF0YSBhbmQgbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2FsbC4gVGhpcyBjb250YWluZXIgZ2V0cyBwdXNoZWQgdG8gdGhlIHBhZ2Utd2lkZVxyXG5cdFx0XHQgVmVsb2NpdHkuU3RhdGUuY2FsbHMgYXJyYXkgdGhhdCBpcyBwcm9jZXNzZWQgZHVyaW5nIGFuaW1hdGlvbiB0aWNraW5nLiAqL1xyXG5cdFx0XHR2YXIgY2FsbCA9IFtdO1xyXG5cclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgRWxlbWVudCBQcm9jZXNzaW5nXHJcblx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHQvKiBFbGVtZW50IHByb2Nlc3NpbmcgY29uc2lzdHMgb2YgdGhyZWUgcGFydHMgLS0gZGF0YSBwcm9jZXNzaW5nIHRoYXQgY2Fubm90IGdvIHN0YWxlIGFuZCBkYXRhIHByb2Nlc3NpbmcgdGhhdCAqY2FuKiBnbyBzdGFsZSAoaS5lLiB0aGlyZC1wYXJ0eSBzdHlsZSBtb2RpZmljYXRpb25zKTpcclxuXHRcdFx0IDEpIFByZS1RdWV1ZWluZzogRWxlbWVudC13aWRlIHZhcmlhYmxlcywgaW5jbHVkaW5nIHRoZSBlbGVtZW50J3MgZGF0YSBzdG9yYWdlLCBhcmUgaW5zdGFudGlhdGVkLiBDYWxsIG9wdGlvbnMgYXJlIHByZXBhcmVkLiBJZiB0cmlnZ2VyZWQsIHRoZSBTdG9wIGFjdGlvbiBpcyBleGVjdXRlZC5cclxuXHRcdFx0IDIpIFF1ZXVlaW5nOiBUaGUgbG9naWMgdGhhdCBydW5zIG9uY2UgdGhpcyBjYWxsIGhhcyByZWFjaGVkIGl0cyBwb2ludCBvZiBleGVjdXRpb24gaW4gdGhlIGVsZW1lbnQncyAkLnF1ZXVlKCkgc3RhY2suIE1vc3QgbG9naWMgaXMgcGxhY2VkIGhlcmUgdG8gYXZvaWQgcmlza2luZyBpdCBiZWNvbWluZyBzdGFsZS5cclxuXHRcdFx0IDMpIFB1c2hpbmc6IENvbnNvbGlkYXRpb24gb2YgdGhlIHR3ZWVuIGRhdGEgZm9sbG93ZWQgYnkgaXRzIHB1c2ggb250byB0aGUgZ2xvYmFsIGluLXByb2dyZXNzIGNhbGxzIGNvbnRhaW5lci5cclxuXHRcdFx0IGBlbGVtZW50QXJyYXlJbmRleGAgYWxsb3dzIHBhc3NpbmcgaW5kZXggb2YgdGhlIGVsZW1lbnQgaW4gdGhlIG9yaWdpbmFsIGFycmF5IHRvIHZhbHVlIGZ1bmN0aW9ucy5cclxuXHRcdFx0IElmIGBlbGVtZW50c0luZGV4YCB3ZXJlIHVzZWQgaW5zdGVhZCB0aGUgaW5kZXggd291bGQgYmUgZGV0ZXJtaW5lZCBieSB0aGUgZWxlbWVudHMnIHBlci1lbGVtZW50IHF1ZXVlLlxyXG5cdFx0XHQgKi9cclxuXHRcdFx0ZnVuY3Rpb24gcHJvY2Vzc0VsZW1lbnQoZWxlbWVudCwgZWxlbWVudEFycmF5SW5kZXgpIHtcclxuXHJcblx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgUGFydCBJOiBQcmUtUXVldWVpbmdcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdCBFbGVtZW50LVdpZGUgVmFyaWFibGVzXHJcblx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0dmFyIC8qIFRoZSBydW50aW1lIG9wdHMgb2JqZWN0IGlzIHRoZSBleHRlbnNpb24gb2YgdGhlIGN1cnJlbnQgY2FsbCdzIG9wdGlvbnMgYW5kIFZlbG9jaXR5J3MgcGFnZS13aWRlIG9wdGlvbiBkZWZhdWx0cy4gKi9cclxuXHRcdFx0XHRcdFx0b3B0cyA9ICQuZXh0ZW5kKHt9LCBWZWxvY2l0eS5kZWZhdWx0cywgb3B0aW9ucyksXHJcblx0XHRcdFx0XHRcdC8qIEEgY29udGFpbmVyIGZvciB0aGUgcHJvY2Vzc2VkIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGVhY2ggcHJvcGVydHkgaW4gdGhlIHByb3BlcnR5TWFwLlxyXG5cdFx0XHRcdFx0XHQgKEVhY2ggcHJvcGVydHkgaW4gdGhlIG1hcCBwcm9kdWNlcyBpdHMgb3duIFwidHdlZW5cIi4pICovXHJcblx0XHRcdFx0XHRcdHR3ZWVuc0NvbnRhaW5lciA9IHt9LFxyXG5cdFx0XHRcdFx0XHRlbGVtZW50VW5pdENvbnZlcnNpb25EYXRhO1xyXG5cclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IEVsZW1lbnQgSW5pdFxyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdGlmIChEYXRhKGVsZW1lbnQpID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFZlbG9jaXR5LmluaXQoZWxlbWVudCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IE9wdGlvbjogRGVsYXlcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKiBTaW5jZSBxdWV1ZTpmYWxzZSBkb2Vzbid0IHJlc3BlY3QgdGhlIGl0ZW0ncyBleGlzdGluZyBxdWV1ZSwgd2UgYXZvaWQgaW5qZWN0aW5nIGl0cyBkZWxheSBoZXJlIChpdCdzIHNldCBsYXRlciBvbikuICovXHJcblx0XHRcdFx0LyogTm90ZTogVmVsb2NpdHkgcm9sbHMgaXRzIG93biBkZWxheSBmdW5jdGlvbiBzaW5jZSBqUXVlcnkgZG9lc24ndCBoYXZlIGEgdXRpbGl0eSBhbGlhcyBmb3IgJC5mbi5kZWxheSgpXHJcblx0XHRcdFx0IChhbmQgdGh1cyByZXF1aXJlcyBqUXVlcnkgZWxlbWVudCBjcmVhdGlvbiwgd2hpY2ggd2UgYXZvaWQgc2luY2UgaXRzIG92ZXJoZWFkIGluY2x1ZGVzIERPTSBxdWVyeWluZykuICovXHJcblx0XHRcdFx0aWYgKHBhcnNlRmxvYXQob3B0cy5kZWxheSkgJiYgb3B0cy5xdWV1ZSAhPT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdCQucXVldWUoZWxlbWVudCwgb3B0cy5xdWV1ZSwgZnVuY3Rpb24obmV4dCwgY2xlYXJRdWV1ZSkge1xyXG5cdFx0XHRcdFx0XHRpZiAoY2xlYXJRdWV1ZSA9PT0gdHJ1ZSkge1xyXG5cdFx0XHRcdFx0XHRcdC8qIERvIG5vdCBjb250aW51ZSB3aXRoIGFuaW1hdGlvbiBxdWV1ZWluZy4gKi9cclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyogVGhpcyBpcyBhIGZsYWcgdXNlZCB0byBpbmRpY2F0ZSB0byB0aGUgdXBjb21pbmcgY29tcGxldGVDYWxsKCkgZnVuY3Rpb24gdGhhdCB0aGlzIHF1ZXVlIGVudHJ5IHdhcyBpbml0aWF0ZWQgYnkgVmVsb2NpdHkuIFNlZSBjb21wbGV0ZUNhbGwoKSBmb3IgZnVydGhlciBkZXRhaWxzLiAqL1xyXG5cdFx0XHRcdFx0XHRWZWxvY2l0eS52ZWxvY2l0eVF1ZXVlRW50cnlGbGFnID0gdHJ1ZTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIFRoZSBlbnN1aW5nIHF1ZXVlIGl0ZW0gKHdoaWNoIGlzIGFzc2lnbmVkIHRvIHRoZSBcIm5leHRcIiBhcmd1bWVudCB0aGF0ICQucXVldWUoKSBhdXRvbWF0aWNhbGx5IHBhc3NlcyBpbikgd2lsbCBiZSB0cmlnZ2VyZWQgYWZ0ZXIgYSBzZXRUaW1lb3V0IGRlbGF5LlxyXG5cdFx0XHRcdFx0XHQgVGhlIHNldFRpbWVvdXQgaXMgc3RvcmVkIHNvIHRoYXQgaXQgY2FuIGJlIHN1YmplY3RlZCB0byBjbGVhclRpbWVvdXQoKSBpZiB0aGlzIGFuaW1hdGlvbiBpcyBwcmVtYXR1cmVseSBzdG9wcGVkIHZpYSBWZWxvY2l0eSdzIFwic3RvcFwiIGNvbW1hbmQsIGFuZFxyXG5cdFx0XHRcdFx0XHQgZGVsYXlCZWdpbi9kZWxheVRpbWUgaXMgdXNlZCB0byBlbnN1cmUgd2UgY2FuIFwicGF1c2VcIiBhbmQgXCJyZXN1bWVcIiBhIHR3ZWVuIHRoYXQgaXMgc3RpbGwgbWlkLWRlbGF5LiAqL1xyXG5cclxuXHRcdFx0XHRcdFx0LyogVGVtcG9yYXJpbHkgc3RvcmUgZGVsYXllZCBlbGVtZW50cyB0byBmYWNpbGl0ZSBhY2Nlc3MgZm9yIGdsb2JhbCBwYXVzZS9yZXN1bWUgKi9cclxuXHRcdFx0XHRcdFx0dmFyIGNhbGxJbmRleCA9IFZlbG9jaXR5LlN0YXRlLmRlbGF5ZWRFbGVtZW50cy5jb3VudCsrO1xyXG5cdFx0XHRcdFx0XHRWZWxvY2l0eS5TdGF0ZS5kZWxheWVkRWxlbWVudHNbY2FsbEluZGV4XSA9IGVsZW1lbnQ7XHJcblxyXG5cdFx0XHRcdFx0XHR2YXIgZGVsYXlDb21wbGV0ZSA9IChmdW5jdGlvbihpbmRleCkge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIENsZWFyIHRoZSB0ZW1wb3JhcnkgZWxlbWVudCAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0VmVsb2NpdHkuU3RhdGUuZGVsYXllZEVsZW1lbnRzW2luZGV4XSA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIEZpbmFsbHksIGlzc3VlIHRoZSBjYWxsICovXHJcblx0XHRcdFx0XHRcdFx0XHRuZXh0KCk7XHJcblx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0fSkoY2FsbEluZGV4KTtcclxuXHJcblxyXG5cdFx0XHRcdFx0XHREYXRhKGVsZW1lbnQpLmRlbGF5QmVnaW4gPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xyXG5cdFx0XHRcdFx0XHREYXRhKGVsZW1lbnQpLmRlbGF5ID0gcGFyc2VGbG9hdChvcHRzLmRlbGF5KTtcclxuXHRcdFx0XHRcdFx0RGF0YShlbGVtZW50KS5kZWxheVRpbWVyID0ge1xyXG5cdFx0XHRcdFx0XHRcdHNldFRpbWVvdXQ6IHNldFRpbWVvdXQobmV4dCwgcGFyc2VGbG9hdChvcHRzLmRlbGF5KSksXHJcblx0XHRcdFx0XHRcdFx0bmV4dDogZGVsYXlDb21wbGV0ZVxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IE9wdGlvbjogRHVyYXRpb25cclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKiBTdXBwb3J0IGZvciBqUXVlcnkncyBuYW1lZCBkdXJhdGlvbnMuICovXHJcblx0XHRcdFx0c3dpdGNoIChvcHRzLmR1cmF0aW9uLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG5cdFx0XHRcdFx0Y2FzZSBcImZhc3RcIjpcclxuXHRcdFx0XHRcdFx0b3B0cy5kdXJhdGlvbiA9IDIwMDtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdFx0Y2FzZSBcIm5vcm1hbFwiOlxyXG5cdFx0XHRcdFx0XHRvcHRzLmR1cmF0aW9uID0gRFVSQVRJT05fREVGQVVMVDtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdFx0Y2FzZSBcInNsb3dcIjpcclxuXHRcdFx0XHRcdFx0b3B0cy5kdXJhdGlvbiA9IDYwMDtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0LyogUmVtb3ZlIHRoZSBwb3RlbnRpYWwgXCJtc1wiIHN1ZmZpeCBhbmQgZGVmYXVsdCB0byAxIGlmIHRoZSB1c2VyIGlzIGF0dGVtcHRpbmcgdG8gc2V0IGEgZHVyYXRpb24gb2YgMCAoaW4gb3JkZXIgdG8gcHJvZHVjZSBhbiBpbW1lZGlhdGUgc3R5bGUgY2hhbmdlKS4gKi9cclxuXHRcdFx0XHRcdFx0b3B0cy5kdXJhdGlvbiA9IHBhcnNlRmxvYXQob3B0cy5kdXJhdGlvbikgfHwgMTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgR2xvYmFsIE9wdGlvbjogTW9ja1xyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdGlmIChWZWxvY2l0eS5tb2NrICE9PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0LyogSW4gbW9jayBtb2RlLCBhbGwgYW5pbWF0aW9ucyBhcmUgZm9yY2VkIHRvIDFtcyBzbyB0aGF0IHRoZXkgb2NjdXIgaW1tZWRpYXRlbHkgdXBvbiB0aGUgbmV4dCByQUYgdGljay5cclxuXHRcdFx0XHRcdCBBbHRlcm5hdGl2ZWx5LCBhIG11bHRpcGxpZXIgY2FuIGJlIHBhc3NlZCBpbiB0byB0aW1lIHJlbWFwIGFsbCBkZWxheXMgYW5kIGR1cmF0aW9ucy4gKi9cclxuXHRcdFx0XHRcdGlmIChWZWxvY2l0eS5tb2NrID09PSB0cnVlKSB7XHJcblx0XHRcdFx0XHRcdG9wdHMuZHVyYXRpb24gPSBvcHRzLmRlbGF5ID0gMTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdG9wdHMuZHVyYXRpb24gKj0gcGFyc2VGbG9hdChWZWxvY2l0eS5tb2NrKSB8fCAxO1xyXG5cdFx0XHRcdFx0XHRvcHRzLmRlbGF5ICo9IHBhcnNlRmxvYXQoVmVsb2NpdHkubW9jaykgfHwgMTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IE9wdGlvbjogRWFzaW5nXHJcblx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdG9wdHMuZWFzaW5nID0gZ2V0RWFzaW5nKG9wdHMuZWFzaW5nLCBvcHRzLmR1cmF0aW9uKTtcclxuXHJcblx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgT3B0aW9uOiBDYWxsYmFja3NcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0LyogQ2FsbGJhY2tzIG11c3QgZnVuY3Rpb25zLiBPdGhlcndpc2UsIGRlZmF1bHQgdG8gbnVsbC4gKi9cclxuXHRcdFx0XHRpZiAob3B0cy5iZWdpbiAmJiAhVHlwZS5pc0Z1bmN0aW9uKG9wdHMuYmVnaW4pKSB7XHJcblx0XHRcdFx0XHRvcHRzLmJlZ2luID0gbnVsbDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChvcHRzLnByb2dyZXNzICYmICFUeXBlLmlzRnVuY3Rpb24ob3B0cy5wcm9ncmVzcykpIHtcclxuXHRcdFx0XHRcdG9wdHMucHJvZ3Jlc3MgPSBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKG9wdHMuY29tcGxldGUgJiYgIVR5cGUuaXNGdW5jdGlvbihvcHRzLmNvbXBsZXRlKSkge1xyXG5cdFx0XHRcdFx0b3B0cy5jb21wbGV0ZSA9IG51bGw7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IE9wdGlvbjogRGlzcGxheSAmIFZpc2liaWxpdHlcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKiBSZWZlciB0byBWZWxvY2l0eSdzIGRvY3VtZW50YXRpb24gKFZlbG9jaXR5SlMub3JnLyNkaXNwbGF5QW5kVmlzaWJpbGl0eSkgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGRpc3BsYXkgYW5kIHZpc2liaWxpdHkgb3B0aW9ucycgYmVoYXZpb3IuICovXHJcblx0XHRcdFx0LyogTm90ZTogV2Ugc3RyaWN0bHkgY2hlY2sgZm9yIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIGZhbHNpbmVzcyBiZWNhdXNlIGRpc3BsYXkgYWNjZXB0cyBhbiBlbXB0eSBzdHJpbmcgdmFsdWUuICovXHJcblx0XHRcdFx0aWYgKG9wdHMuZGlzcGxheSAhPT0gdW5kZWZpbmVkICYmIG9wdHMuZGlzcGxheSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0b3B0cy5kaXNwbGF5ID0gb3B0cy5kaXNwbGF5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcclxuXHJcblx0XHRcdFx0XHQvKiBVc2VycyBjYW4gcGFzcyBpbiBhIHNwZWNpYWwgXCJhdXRvXCIgdmFsdWUgdG8gaW5zdHJ1Y3QgVmVsb2NpdHkgdG8gc2V0IHRoZSBlbGVtZW50IHRvIGl0cyBkZWZhdWx0IGRpc3BsYXkgdmFsdWUuICovXHJcblx0XHRcdFx0XHRpZiAob3B0cy5kaXNwbGF5ID09PSBcImF1dG9cIikge1xyXG5cdFx0XHRcdFx0XHRvcHRzLmRpc3BsYXkgPSBWZWxvY2l0eS5DU1MuVmFsdWVzLmdldERpc3BsYXlUeXBlKGVsZW1lbnQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKG9wdHMudmlzaWJpbGl0eSAhPT0gdW5kZWZpbmVkICYmIG9wdHMudmlzaWJpbGl0eSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0b3B0cy52aXNpYmlsaXR5ID0gb3B0cy52aXNpYmlsaXR5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IE9wdGlvbjogbW9iaWxlSEFcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0LyogV2hlbiBzZXQgdG8gdHJ1ZSwgYW5kIGlmIHRoaXMgaXMgYSBtb2JpbGUgZGV2aWNlLCBtb2JpbGVIQSBhdXRvbWF0aWNhbGx5IGVuYWJsZXMgaGFyZHdhcmUgYWNjZWxlcmF0aW9uICh2aWEgYSBudWxsIHRyYW5zZm9ybSBoYWNrKVxyXG5cdFx0XHRcdCBvbiBhbmltYXRpbmcgZWxlbWVudHMuIEhBIGlzIHJlbW92ZWQgZnJvbSB0aGUgZWxlbWVudCBhdCB0aGUgY29tcGxldGlvbiBvZiBpdHMgYW5pbWF0aW9uLiAqL1xyXG5cdFx0XHRcdC8qIE5vdGU6IEFuZHJvaWQgR2luZ2VyYnJlYWQgZG9lc24ndCBzdXBwb3J0IEhBLiBJZiBhIG51bGwgdHJhbnNmb3JtIGhhY2sgKG1vYmlsZUhBKSBpcyBpbiBmYWN0IHNldCwgaXQgd2lsbCBwcmV2ZW50IG90aGVyIHRyYW5mb3JtIHN1YnByb3BlcnRpZXMgZnJvbSB0YWtpbmcgZWZmZWN0LiAqL1xyXG5cdFx0XHRcdC8qIE5vdGU6IFlvdSBjYW4gcmVhZCBtb3JlIGFib3V0IHRoZSB1c2Ugb2YgbW9iaWxlSEEgaW4gVmVsb2NpdHkncyBkb2N1bWVudGF0aW9uOiBWZWxvY2l0eUpTLm9yZy8jbW9iaWxlSEEuICovXHJcblx0XHRcdFx0b3B0cy5tb2JpbGVIQSA9IChvcHRzLm1vYmlsZUhBICYmIFZlbG9jaXR5LlN0YXRlLmlzTW9iaWxlICYmICFWZWxvY2l0eS5TdGF0ZS5pc0dpbmdlcmJyZWFkKTtcclxuXHJcblx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IFBhcnQgSUk6IFF1ZXVlaW5nXHJcblx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKiBXaGVuIGEgc2V0IG9mIGVsZW1lbnRzIGlzIHRhcmdldGVkIGJ5IGEgVmVsb2NpdHkgY2FsbCwgdGhlIHNldCBpcyBicm9rZW4gdXAgYW5kIGVhY2ggZWxlbWVudCBoYXMgdGhlIGN1cnJlbnQgVmVsb2NpdHkgY2FsbCBpbmRpdmlkdWFsbHkgcXVldWVkIG9udG8gaXQuXHJcblx0XHRcdFx0IEluIHRoaXMgd2F5LCBlYWNoIGVsZW1lbnQncyBleGlzdGluZyBxdWV1ZSBpcyByZXNwZWN0ZWQ7IHNvbWUgZWxlbWVudHMgbWF5IGFscmVhZHkgYmUgYW5pbWF0aW5nIGFuZCBhY2NvcmRpbmdseSBzaG91bGQgbm90IGhhdmUgdGhpcyBjdXJyZW50IFZlbG9jaXR5IGNhbGwgdHJpZ2dlcmVkIGltbWVkaWF0ZWx5LiAqL1xyXG5cdFx0XHRcdC8qIEluIGVhY2ggcXVldWUsIHR3ZWVuIGRhdGEgaXMgcHJvY2Vzc2VkIGZvciBlYWNoIGFuaW1hdGluZyBwcm9wZXJ0eSB0aGVuIHB1c2hlZCBvbnRvIHRoZSBjYWxsLXdpZGUgY2FsbHMgYXJyYXkuIFdoZW4gdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgc2V0IGhhcyBoYWQgaXRzIHR3ZWVucyBwcm9jZXNzZWQsXHJcblx0XHRcdFx0IHRoZSBjYWxsIGFycmF5IGlzIHB1c2hlZCB0byBWZWxvY2l0eS5TdGF0ZS5jYWxscyBmb3IgbGl2ZSBwcm9jZXNzaW5nIGJ5IHRoZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgdGljay4gKi9cclxuXHRcdFx0XHRmdW5jdGlvbiBidWlsZFF1ZXVlKG5leHQpIHtcclxuXHRcdFx0XHRcdHZhciBkYXRhLCBsYXN0VHdlZW5zQ29udGFpbmVyO1xyXG5cclxuXHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHQgT3B0aW9uOiBCZWdpblxyXG5cdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0LyogVGhlIGJlZ2luIGNhbGxiYWNrIGlzIGZpcmVkIG9uY2UgcGVyIGNhbGwgLS0gbm90IG9uY2UgcGVyIGVsZW1lbmV0IC0tIGFuZCBpcyBwYXNzZWQgdGhlIGZ1bGwgcmF3IERPTSBlbGVtZW50IHNldCBhcyBib3RoIGl0cyBjb250ZXh0IGFuZCBpdHMgZmlyc3QgYXJndW1lbnQuICovXHJcblx0XHRcdFx0XHRpZiAob3B0cy5iZWdpbiAmJiBlbGVtZW50c0luZGV4ID09PSAwKSB7XHJcblx0XHRcdFx0XHRcdC8qIFdlIHRocm93IGNhbGxiYWNrcyBpbiBhIHNldFRpbWVvdXQgc28gdGhhdCB0aHJvd24gZXJyb3JzIGRvbid0IGhhbHQgdGhlIGV4ZWN1dGlvbiBvZiBWZWxvY2l0eSBpdHNlbGYuICovXHJcblx0XHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdFx0b3B0cy5iZWdpbi5jYWxsKGVsZW1lbnRzLCBlbGVtZW50cyk7XHJcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRocm93IGVycm9yO1xyXG5cdFx0XHRcdFx0XHRcdH0sIDEpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHQgVHdlZW4gRGF0YSBDb25zdHJ1Y3Rpb24gKGZvciBTY3JvbGwpXHJcblx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0LyogTm90ZTogSW4gb3JkZXIgdG8gYmUgc3ViamVjdGVkIHRvIGNoYWluaW5nIGFuZCBhbmltYXRpb24gb3B0aW9ucywgc2Nyb2xsJ3MgdHdlZW5pbmcgaXMgcm91dGVkIHRocm91Z2ggVmVsb2NpdHkgYXMgaWYgaXQgd2VyZSBhIHN0YW5kYXJkIENTUyBwcm9wZXJ0eSBhbmltYXRpb24uICovXHJcblx0XHRcdFx0XHRpZiAoYWN0aW9uID09PSBcInNjcm9sbFwiKSB7XHJcblx0XHRcdFx0XHRcdC8qIFRoZSBzY3JvbGwgYWN0aW9uIHVuaXF1ZWx5IHRha2VzIGFuIG9wdGlvbmFsIFwib2Zmc2V0XCIgb3B0aW9uIC0tIHNwZWNpZmllZCBpbiBwaXhlbHMgLS0gdGhhdCBvZmZzZXRzIHRoZSB0YXJnZXRlZCBzY3JvbGwgcG9zaXRpb24uICovXHJcblx0XHRcdFx0XHRcdHZhciBzY3JvbGxEaXJlY3Rpb24gPSAoL154JC9pLnRlc3Qob3B0cy5heGlzKSA/IFwiTGVmdFwiIDogXCJUb3BcIiksXHJcblx0XHRcdFx0XHRcdFx0XHRzY3JvbGxPZmZzZXQgPSBwYXJzZUZsb2F0KG9wdHMub2Zmc2V0KSB8fCAwLFxyXG5cdFx0XHRcdFx0XHRcdFx0c2Nyb2xsUG9zaXRpb25DdXJyZW50LFxyXG5cdFx0XHRcdFx0XHRcdFx0c2Nyb2xsUG9zaXRpb25DdXJyZW50QWx0ZXJuYXRlLFxyXG5cdFx0XHRcdFx0XHRcdFx0c2Nyb2xsUG9zaXRpb25FbmQ7XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBTY3JvbGwgYWxzbyB1bmlxdWVseSB0YWtlcyBhbiBvcHRpb25hbCBcImNvbnRhaW5lclwiIG9wdGlvbiwgd2hpY2ggaW5kaWNhdGVzIHRoZSBwYXJlbnQgZWxlbWVudCB0aGF0IHNob3VsZCBiZSBzY3JvbGxlZCAtLVxyXG5cdFx0XHRcdFx0XHQgYXMgb3Bwb3NlZCB0byB0aGUgYnJvd3NlciB3aW5kb3cgaXRzZWxmLiBUaGlzIGlzIHVzZWZ1bCBmb3Igc2Nyb2xsaW5nIHRvd2FyZCBhbiBlbGVtZW50IHRoYXQncyBpbnNpZGUgYW4gb3ZlcmZsb3dpbmcgcGFyZW50IGVsZW1lbnQuICovXHJcblx0XHRcdFx0XHRcdGlmIChvcHRzLmNvbnRhaW5lcikge1xyXG5cdFx0XHRcdFx0XHRcdC8qIEVuc3VyZSB0aGF0IGVpdGhlciBhIGpRdWVyeSBvYmplY3Qgb3IgYSByYXcgRE9NIGVsZW1lbnQgd2FzIHBhc3NlZCBpbi4gKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAoVHlwZS5pc1dyYXBwZWQob3B0cy5jb250YWluZXIpIHx8IFR5cGUuaXNOb2RlKG9wdHMuY29udGFpbmVyKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogRXh0cmFjdCB0aGUgcmF3IERPTSBlbGVtZW50IGZyb20gdGhlIGpRdWVyeSB3cmFwcGVyLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0b3B0cy5jb250YWluZXIgPSBvcHRzLmNvbnRhaW5lclswXSB8fCBvcHRzLmNvbnRhaW5lcjtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIE5vdGU6IFVubGlrZSBvdGhlciBwcm9wZXJ0aWVzIGluIFZlbG9jaXR5LCB0aGUgYnJvd3NlcidzIHNjcm9sbCBwb3NpdGlvbiBpcyBuZXZlciBjYWNoZWQgc2luY2UgaXQgc28gZnJlcXVlbnRseSBjaGFuZ2VzXHJcblx0XHRcdFx0XHRcdFx0XHQgKGR1ZSB0byB0aGUgdXNlcidzIG5hdHVyYWwgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcGFnZSkuICovXHJcblx0XHRcdFx0XHRcdFx0XHRzY3JvbGxQb3NpdGlvbkN1cnJlbnQgPSBvcHRzLmNvbnRhaW5lcltcInNjcm9sbFwiICsgc2Nyb2xsRGlyZWN0aW9uXTsgLyogR0VUICovXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogJC5wb3NpdGlvbigpIHZhbHVlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIGNvbnRhaW5lcidzIGN1cnJlbnRseSB2aWV3YWJsZSBhcmVhICh3aXRob3V0IHRha2luZyBpbnRvIGFjY291bnQgdGhlIGNvbnRhaW5lcidzIHRydWUgZGltZW5zaW9uc1xyXG5cdFx0XHRcdFx0XHRcdFx0IC0tIHNheSwgZm9yIGV4YW1wbGUsIGlmIHRoZSBjb250YWluZXIgd2FzIG5vdCBvdmVyZmxvd2luZykuIFRodXMsIHRoZSBzY3JvbGwgZW5kIHZhbHVlIGlzIHRoZSBzdW0gb2YgdGhlIGNoaWxkIGVsZW1lbnQncyBwb3NpdGlvbiAqYW5kKlxyXG5cdFx0XHRcdFx0XHRcdFx0IHRoZSBzY3JvbGwgY29udGFpbmVyJ3MgY3VycmVudCBzY3JvbGwgcG9zaXRpb24uICovXHJcblx0XHRcdFx0XHRcdFx0XHRzY3JvbGxQb3NpdGlvbkVuZCA9IChzY3JvbGxQb3NpdGlvbkN1cnJlbnQgKyAkKGVsZW1lbnQpLnBvc2l0aW9uKClbc2Nyb2xsRGlyZWN0aW9uLnRvTG93ZXJDYXNlKCldKSArIHNjcm9sbE9mZnNldDsgLyogR0VUICovXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBJZiBhIHZhbHVlIG90aGVyIHRoYW4gYSBqUXVlcnkgb2JqZWN0IG9yIGEgcmF3IERPTSBlbGVtZW50IHdhcyBwYXNzZWQgaW4sIGRlZmF1bHQgdG8gbnVsbCBzbyB0aGF0IHRoaXMgb3B0aW9uIGlzIGlnbm9yZWQuICovXHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdG9wdHMuY29udGFpbmVyID0gbnVsbDtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0LyogSWYgdGhlIHdpbmRvdyBpdHNlbGYgaXMgYmVpbmcgc2Nyb2xsZWQgLS0gbm90IGEgY29udGFpbmluZyBlbGVtZW50IC0tIHBlcmZvcm0gYSBsaXZlIHNjcm9sbCBwb3NpdGlvbiBsb29rdXAgdXNpbmdcclxuXHRcdFx0XHRcdFx0XHQgdGhlIGFwcHJvcHJpYXRlIGNhY2hlZCBwcm9wZXJ0eSBuYW1lcyAod2hpY2ggZGlmZmVyIGJhc2VkIG9uIGJyb3dzZXIgdHlwZSkuICovXHJcblx0XHRcdFx0XHRcdFx0c2Nyb2xsUG9zaXRpb25DdXJyZW50ID0gVmVsb2NpdHkuU3RhdGUuc2Nyb2xsQW5jaG9yW1ZlbG9jaXR5LlN0YXRlW1wic2Nyb2xsUHJvcGVydHlcIiArIHNjcm9sbERpcmVjdGlvbl1dOyAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0XHQvKiBXaGVuIHNjcm9sbGluZyB0aGUgYnJvd3NlciB3aW5kb3csIGNhY2hlIHRoZSBhbHRlcm5hdGUgYXhpcydzIGN1cnJlbnQgdmFsdWUgc2luY2Ugd2luZG93LnNjcm9sbFRvKCkgZG9lc24ndCBsZXQgdXMgY2hhbmdlIG9ubHkgb25lIHZhbHVlIGF0IGEgdGltZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRzY3JvbGxQb3NpdGlvbkN1cnJlbnRBbHRlcm5hdGUgPSBWZWxvY2l0eS5TdGF0ZS5zY3JvbGxBbmNob3JbVmVsb2NpdHkuU3RhdGVbXCJzY3JvbGxQcm9wZXJ0eVwiICsgKHNjcm9sbERpcmVjdGlvbiA9PT0gXCJMZWZ0XCIgPyBcIlRvcFwiIDogXCJMZWZ0XCIpXV07IC8qIEdFVCAqL1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBVbmxpa2UgJC5wb3NpdGlvbigpLCAkLm9mZnNldCgpIHZhbHVlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJyb3dzZXIgd2luZG93J3MgdHJ1ZSBkaW1lbnNpb25zIC0tIG5vdCBtZXJlbHkgaXRzIGN1cnJlbnRseSB2aWV3YWJsZSBhcmVhIC0tXHJcblx0XHRcdFx0XHRcdFx0IGFuZCB0aGVyZWZvcmUgZW5kIHZhbHVlcyBkbyBub3QgbmVlZCB0byBiZSBjb21wb3VuZGVkIG9udG8gY3VycmVudCB2YWx1ZXMuICovXHJcblx0XHRcdFx0XHRcdFx0c2Nyb2xsUG9zaXRpb25FbmQgPSAkKGVsZW1lbnQpLm9mZnNldCgpW3Njcm9sbERpcmVjdGlvbi50b0xvd2VyQ2FzZSgpXSArIHNjcm9sbE9mZnNldDsgLyogR0VUICovXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIFNpbmNlIHRoZXJlJ3Mgb25seSBvbmUgZm9ybWF0IHRoYXQgc2Nyb2xsJ3MgYXNzb2NpYXRlZCB0d2VlbnNDb250YWluZXIgY2FuIHRha2UsIHdlIGNyZWF0ZSBpdCBtYW51YWxseS4gKi9cclxuXHRcdFx0XHRcdFx0dHdlZW5zQ29udGFpbmVyID0ge1xyXG5cdFx0XHRcdFx0XHRcdHNjcm9sbDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0cm9vdFByb3BlcnR5VmFsdWU6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZTogc2Nyb2xsUG9zaXRpb25DdXJyZW50LFxyXG5cdFx0XHRcdFx0XHRcdFx0Y3VycmVudFZhbHVlOiBzY3JvbGxQb3NpdGlvbkN1cnJlbnQsXHJcblx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZTogc2Nyb2xsUG9zaXRpb25FbmQsXHJcblx0XHRcdFx0XHRcdFx0XHR1bml0VHlwZTogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRcdGVhc2luZzogb3B0cy5lYXNpbmcsXHJcblx0XHRcdFx0XHRcdFx0XHRzY3JvbGxEYXRhOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRhaW5lcjogb3B0cy5jb250YWluZXIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGRpcmVjdGlvbjogc2Nyb2xsRGlyZWN0aW9uLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRhbHRlcm5hdGVWYWx1ZTogc2Nyb2xsUG9zaXRpb25DdXJyZW50QWx0ZXJuYXRlXHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHRlbGVtZW50OiBlbGVtZW50XHJcblx0XHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoVmVsb2NpdHkuZGVidWcpIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcInR3ZWVuc0NvbnRhaW5lciAoc2Nyb2xsKTogXCIsIHR3ZWVuc0NvbnRhaW5lci5zY3JvbGwsIGVsZW1lbnQpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdCBUd2VlbiBEYXRhIENvbnN0cnVjdGlvbiAoZm9yIFJldmVyc2UpXHJcblx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHQvKiBSZXZlcnNlIGFjdHMgbGlrZSBhIFwic3RhcnRcIiBhY3Rpb24gaW4gdGhhdCBhIHByb3BlcnR5IG1hcCBpcyBhbmltYXRlZCB0b3dhcmQuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXNcclxuXHRcdFx0XHRcdFx0IHRoYXQgdGhlIHByb3BlcnR5IG1hcCB1c2VkIGZvciByZXZlcnNlIGlzIHRoZSBpbnZlcnNlIG9mIHRoZSBtYXAgdXNlZCBpbiB0aGUgcHJldmlvdXMgY2FsbC4gVGh1cywgd2UgbWFuaXB1bGF0ZVxyXG5cdFx0XHRcdFx0XHQgdGhlIHByZXZpb3VzIGNhbGwgdG8gY29uc3RydWN0IG91ciBuZXcgbWFwOiB1c2UgdGhlIHByZXZpb3VzIG1hcCdzIGVuZCB2YWx1ZXMgYXMgb3VyIG5ldyBtYXAncyBzdGFydCB2YWx1ZXMuIENvcHkgb3ZlciBhbGwgb3RoZXIgZGF0YS4gKi9cclxuXHRcdFx0XHRcdFx0LyogTm90ZTogUmV2ZXJzZSBjYW4gYmUgZGlyZWN0bHkgY2FsbGVkIHZpYSB0aGUgXCJyZXZlcnNlXCIgcGFyYW1ldGVyLCBvciBpdCBjYW4gYmUgaW5kaXJlY3RseSB0cmlnZ2VyZWQgdmlhIHRoZSBsb29wIG9wdGlvbi4gKExvb3BzIGFyZSBjb21wb3NlZCBvZiBtdWx0aXBsZSByZXZlcnNlcy4pICovXHJcblx0XHRcdFx0XHRcdC8qIE5vdGU6IFJldmVyc2UgY2FsbHMgZG8gbm90IG5lZWQgdG8gYmUgY29uc2VjdXRpdmVseSBjaGFpbmVkIG9udG8gYSBjdXJyZW50bHktYW5pbWF0aW5nIGVsZW1lbnQgaW4gb3JkZXIgdG8gb3BlcmF0ZSBvbiBjYWNoZWQgdmFsdWVzO1xyXG5cdFx0XHRcdFx0XHQgdGhlcmUgaXMgbm8gaGFybSB0byByZXZlcnNlIGJlaW5nIGNhbGxlZCBvbiBhIHBvdGVudGlhbGx5IHN0YWxlIGRhdGEgY2FjaGUgc2luY2UgcmV2ZXJzZSdzIGJlaGF2aW9yIGlzIHNpbXBseSBkZWZpbmVkXHJcblx0XHRcdFx0XHRcdCBhcyByZXZlcnRpbmcgdG8gdGhlIGVsZW1lbnQncyB2YWx1ZXMgYXMgdGhleSB3ZXJlIHByaW9yIHRvIHRoZSBwcmV2aW91cyAqVmVsb2NpdHkqIGNhbGwuICovXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJyZXZlcnNlXCIpIHtcclxuXHRcdFx0XHRcdFx0ZGF0YSA9IERhdGEoZWxlbWVudCk7XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBBYm9ydCBpZiB0aGVyZSBpcyBubyBwcmlvciBhbmltYXRpb24gZGF0YSB0byByZXZlcnNlIHRvLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoIWRhdGEpIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmICghZGF0YS50d2VlbnNDb250YWluZXIpIHtcclxuXHRcdFx0XHRcdFx0XHQvKiBEZXF1ZXVlIHRoZSBlbGVtZW50IHNvIHRoYXQgdGhpcyBxdWV1ZSBlbnRyeSByZWxlYXNlcyBpdHNlbGYgaW1tZWRpYXRlbHksIGFsbG93aW5nIHN1YnNlcXVlbnQgcXVldWUgZW50cmllcyB0byBydW4uICovXHJcblx0XHRcdFx0XHRcdFx0JC5kZXF1ZXVlKGVsZW1lbnQsIG9wdHMucXVldWUpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdCBPcHRpb25zIFBhcnNpbmdcclxuXHRcdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBJZiB0aGUgZWxlbWVudCB3YXMgaGlkZGVuIHZpYSB0aGUgZGlzcGxheSBvcHRpb24gaW4gdGhlIHByZXZpb3VzIGNhbGwsXHJcblx0XHRcdFx0XHRcdFx0IHJldmVydCBkaXNwbGF5IHRvIFwiYXV0b1wiIHByaW9yIHRvIHJldmVyc2FsIHNvIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBhZ2Fpbi4gKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAoZGF0YS5vcHRzLmRpc3BsYXkgPT09IFwibm9uZVwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRkYXRhLm9wdHMuZGlzcGxheSA9IFwiYXV0b1wiO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKGRhdGEub3B0cy52aXNpYmlsaXR5ID09PSBcImhpZGRlblwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRkYXRhLm9wdHMudmlzaWJpbGl0eSA9IFwidmlzaWJsZVwiO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0LyogSWYgdGhlIGxvb3Agb3B0aW9uIHdhcyBzZXQgaW4gdGhlIHByZXZpb3VzIGNhbGwsIGRpc2FibGUgaXQgc28gdGhhdCBcInJldmVyc2VcIiBjYWxscyBhcmVuJ3QgcmVjdXJzaXZlbHkgZ2VuZXJhdGVkLlxyXG5cdFx0XHRcdFx0XHRcdCBGdXJ0aGVyLCByZW1vdmUgdGhlIHByZXZpb3VzIGNhbGwncyBjYWxsYmFjayBvcHRpb25zOyB0eXBpY2FsbHksIHVzZXJzIGRvIG5vdCB3YW50IHRoZXNlIHRvIGJlIHJlZmlyZWQuICovXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS5vcHRzLmxvb3AgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0XHRkYXRhLm9wdHMuYmVnaW4gPSBudWxsO1xyXG5cdFx0XHRcdFx0XHRcdGRhdGEub3B0cy5jb21wbGV0ZSA9IG51bGw7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIFNpbmNlIHdlJ3JlIGV4dGVuZGluZyBhbiBvcHRzIG9iamVjdCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZXh0ZW5kZWQgd2l0aCB0aGUgZGVmYXVsdHMgb3B0aW9ucyBvYmplY3QsXHJcblx0XHRcdFx0XHRcdFx0IHdlIHJlbW92ZSBub24tZXhwbGljaXRseS1kZWZpbmVkIHByb3BlcnRpZXMgdGhhdCBhcmUgYXV0by1hc3NpZ25lZCB2YWx1ZXMuICovXHJcblx0XHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmVhc2luZykge1xyXG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIG9wdHMuZWFzaW5nO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmR1cmF0aW9uKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgb3B0cy5kdXJhdGlvbjtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIFRoZSBvcHRzIG9iamVjdCB1c2VkIGZvciByZXZlcnNhbCBpcyBhbiBleHRlbnNpb24gb2YgdGhlIG9wdGlvbnMgb2JqZWN0IG9wdGlvbmFsbHkgcGFzc2VkIGludG8gdGhpc1xyXG5cdFx0XHRcdFx0XHRcdCByZXZlcnNlIGNhbGwgcGx1cyB0aGUgb3B0aW9ucyB1c2VkIGluIHRoZSBwcmV2aW91cyBWZWxvY2l0eSBjYWxsLiAqL1xyXG5cdFx0XHRcdFx0XHRcdG9wdHMgPSAkLmV4dGVuZCh7fSwgZGF0YS5vcHRzLCBvcHRzKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0XHQgVHdlZW5zIENvbnRhaW5lciBSZWNvbnN0cnVjdGlvblxyXG5cdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBDcmVhdGUgYSBkZWVweSBjb3B5IChpbmRpY2F0ZWQgdmlhIHRoZSB0cnVlIGZsYWcpIG9mIHRoZSBwcmV2aW91cyBjYWxsJ3MgdHdlZW5zQ29udGFpbmVyLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGxhc3RUd2VlbnNDb250YWluZXIgPSAkLmV4dGVuZCh0cnVlLCB7fSwgZGF0YSA/IGRhdGEudHdlZW5zQ29udGFpbmVyIDogbnVsbCk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIE1hbmlwdWxhdGUgdGhlIHByZXZpb3VzIHR3ZWVuc0NvbnRhaW5lciBieSByZXBsYWNpbmcgaXRzIGVuZCB2YWx1ZXMgYW5kIGN1cnJlbnRWYWx1ZXMgd2l0aCBpdHMgc3RhcnQgdmFsdWVzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGxhc3RUd2VlbiBpbiBsYXN0VHdlZW5zQ29udGFpbmVyKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBJbiBhZGRpdGlvbiB0byB0d2VlbiBkYXRhLCB0d2VlbnNDb250YWluZXJzIGNvbnRhaW4gYW4gZWxlbWVudCBwcm9wZXJ0eSB0aGF0IHdlIGlnbm9yZSBoZXJlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGxhc3RUd2VlbnNDb250YWluZXIuaGFzT3duUHJvcGVydHkobGFzdFR3ZWVuKSAmJiBsYXN0VHdlZW4gIT09IFwiZWxlbWVudFwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBsYXN0U3RhcnRWYWx1ZSA9IGxhc3RUd2VlbnNDb250YWluZXJbbGFzdFR3ZWVuXS5zdGFydFZhbHVlO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0bGFzdFR3ZWVuc0NvbnRhaW5lcltsYXN0VHdlZW5dLnN0YXJ0VmFsdWUgPSBsYXN0VHdlZW5zQ29udGFpbmVyW2xhc3RUd2Vlbl0uY3VycmVudFZhbHVlID0gbGFzdFR3ZWVuc0NvbnRhaW5lcltsYXN0VHdlZW5dLmVuZFZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRsYXN0VHdlZW5zQ29udGFpbmVyW2xhc3RUd2Vlbl0uZW5kVmFsdWUgPSBsYXN0U3RhcnRWYWx1ZTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIEVhc2luZyBpcyB0aGUgb25seSBvcHRpb24gdGhhdCBlbWJlZHMgaW50byB0aGUgaW5kaXZpZHVhbCB0d2VlbiBkYXRhIChzaW5jZSBpdCBjYW4gYmUgZGVmaW5lZCBvbiBhIHBlci1wcm9wZXJ0eSBiYXNpcykuXHJcblx0XHRcdFx0XHRcdFx0XHRcdCBBY2NvcmRpbmdseSwgZXZlcnkgcHJvcGVydHkncyBlYXNpbmcgdmFsdWUgbXVzdCBiZSB1cGRhdGVkIHdoZW4gYW4gb3B0aW9ucyBvYmplY3QgaXMgcGFzc2VkIGluIHdpdGggYSByZXZlcnNlIGNhbGwuXHJcblx0XHRcdFx0XHRcdFx0XHRcdCBUaGUgc2lkZSBlZmZlY3Qgb2YgdGhpcyBleHRlbnNpYmlsaXR5IGlzIHRoYXQgYWxsIHBlci1wcm9wZXJ0eSBlYXNpbmcgdmFsdWVzIGFyZSBmb3JjZWZ1bGx5IHJlc2V0IHRvIHRoZSBuZXcgdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghVHlwZS5pc0VtcHR5T2JqZWN0KG9wdGlvbnMpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGFzdFR3ZWVuc0NvbnRhaW5lcltsYXN0VHdlZW5dLmVhc2luZyA9IG9wdHMuZWFzaW5nO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoVmVsb2NpdHkuZGVidWcpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcInJldmVyc2UgdHdlZW5zQ29udGFpbmVyIChcIiArIGxhc3RUd2VlbiArIFwiKTogXCIgKyBKU09OLnN0cmluZ2lmeShsYXN0VHdlZW5zQ29udGFpbmVyW2xhc3RUd2Vlbl0pLCBlbGVtZW50KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0dHdlZW5zQ29udGFpbmVyID0gbGFzdFR3ZWVuc0NvbnRhaW5lcjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdCBUd2VlbiBEYXRhIENvbnN0cnVjdGlvbiAoZm9yIFN0YXJ0KVxyXG5cdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwic3RhcnRcIikge1xyXG5cclxuXHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0IFZhbHVlIFRyYW5zZmVycmluZ1xyXG5cdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIHRoaXMgcXVldWUgZW50cnkgZm9sbG93cyBhIHByZXZpb3VzIFZlbG9jaXR5LWluaXRpYXRlZCBxdWV1ZSBlbnRyeSAqYW5kKiBpZiB0aGlzIGVudHJ5IHdhcyBjcmVhdGVkXHJcblx0XHRcdFx0XHRcdCB3aGlsZSB0aGUgZWxlbWVudCB3YXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgYW5pbWF0ZWQgYnkgVmVsb2NpdHksIHRoZW4gdGhpcyBjdXJyZW50IGNhbGwgaXMgc2FmZSB0byB1c2VcclxuXHRcdFx0XHRcdFx0IHRoZSBlbmQgdmFsdWVzIGZyb20gdGhlIHByaW9yIGNhbGwgYXMgaXRzIHN0YXJ0IHZhbHVlcy4gVmVsb2NpdHkgYXR0ZW1wdHMgdG8gcGVyZm9ybSB0aGlzIHZhbHVlIHRyYW5zZmVyXHJcblx0XHRcdFx0XHRcdCBwcm9jZXNzIHdoZW5ldmVyIHBvc3NpYmxlIGluIG9yZGVyIHRvIGF2b2lkIHJlcXVlcnlpbmcgdGhlIERPTS4gKi9cclxuXHRcdFx0XHRcdFx0LyogSWYgdmFsdWVzIGFyZW4ndCB0cmFuc2ZlcnJlZCBmcm9tIGEgcHJpb3IgY2FsbCBhbmQgc3RhcnQgdmFsdWVzIHdlcmUgbm90IGZvcmNlZmVkIGJ5IHRoZSB1c2VyIChtb3JlIG9uIHRoaXMgYmVsb3cpLFxyXG5cdFx0XHRcdFx0XHQgdGhlbiB0aGUgRE9NIGlzIHF1ZXJpZWQgZm9yIHRoZSBlbGVtZW50J3MgY3VycmVudCB2YWx1ZXMgYXMgYSBsYXN0IHJlc29ydC4gKi9cclxuXHRcdFx0XHRcdFx0LyogTm90ZTogQ29udmVyc2VseSwgYW5pbWF0aW9uIHJldmVyc2FsIChhbmQgbG9vcGluZykgKmFsd2F5cyogcGVyZm9ybSBpbnRlci1jYWxsIHZhbHVlIHRyYW5zZmVyczsgdGhleSBuZXZlciByZXF1ZXJ5IHRoZSBET00uICovXHJcblxyXG5cdFx0XHRcdFx0XHRkYXRhID0gRGF0YShlbGVtZW50KTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIFRoZSBwZXItZWxlbWVudCBpc0FuaW1hdGluZyBmbGFnIGlzIHVzZWQgdG8gaW5kaWNhdGUgd2hldGhlciBpdCdzIHNhZmUgKGkuZS4gdGhlIGRhdGEgaXNuJ3Qgc3RhbGUpXHJcblx0XHRcdFx0XHRcdCB0byB0cmFuc2ZlciBvdmVyIGVuZCB2YWx1ZXMgdG8gdXNlIGFzIHN0YXJ0IHZhbHVlcy4gSWYgaXQncyBzZXQgdG8gdHJ1ZSBhbmQgdGhlcmUgaXMgYSBwcmV2aW91c1xyXG5cdFx0XHRcdFx0XHQgVmVsb2NpdHkgY2FsbCB0byBwdWxsIHZhbHVlcyBmcm9tLCBkbyBzby4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKGRhdGEgJiYgZGF0YS50d2VlbnNDb250YWluZXIgJiYgZGF0YS5pc0FuaW1hdGluZyA9PT0gdHJ1ZSkge1xyXG5cdFx0XHRcdFx0XHRcdGxhc3RUd2VlbnNDb250YWluZXIgPSBkYXRhLnR3ZWVuc0NvbnRhaW5lcjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHQgVHdlZW4gRGF0YSBDYWxjdWxhdGlvblxyXG5cdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0LyogVGhpcyBmdW5jdGlvbiBwYXJzZXMgcHJvcGVydHkgZGF0YSBhbmQgZGVmYXVsdHMgZW5kVmFsdWUsIGVhc2luZywgYW5kIHN0YXJ0VmFsdWUgYXMgYXBwcm9wcmlhdGUuICovXHJcblx0XHRcdFx0XHRcdC8qIFByb3BlcnR5IG1hcCB2YWx1ZXMgY2FuIGVpdGhlciB0YWtlIHRoZSBmb3JtIG9mIDEpIGEgc2luZ2xlIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgZW5kIHZhbHVlLFxyXG5cdFx0XHRcdFx0XHQgb3IgMikgYW4gYXJyYXkgaW4gdGhlIGZvcm0gb2YgWyBlbmRWYWx1ZSwgWywgZWFzaW5nXSBbLCBzdGFydFZhbHVlXSBdLlxyXG5cdFx0XHRcdFx0XHQgVGhlIG9wdGlvbmFsIHRoaXJkIHBhcmFtZXRlciBpcyBhIGZvcmNlZmVkIHN0YXJ0VmFsdWUgdG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHF1ZXJ5aW5nIHRoZSBET00gZm9yXHJcblx0XHRcdFx0XHRcdCB0aGUgZWxlbWVudCdzIGN1cnJlbnQgdmFsdWUuIFJlYWQgVmVsb2NpdHkncyBkb2NtZW50YXRpb24gdG8gbGVhcm4gbW9yZSBhYm91dCBmb3JjZWZlZWRpbmc6IFZlbG9jaXR5SlMub3JnLyNmb3JjZWZlZWRpbmcgKi9cclxuXHRcdFx0XHRcdFx0dmFyIHBhcnNlUHJvcGVydHlWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlRGF0YSwgc2tpcFJlc29sdmluZ0Vhc2luZykge1xyXG5cdFx0XHRcdFx0XHRcdHZhciBlbmRWYWx1ZSwgZWFzaW5nLCBzdGFydFZhbHVlO1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBJZiB3ZSBoYXZlIGEgZnVuY3Rpb24gYXMgdGhlIG1haW4gYXJndW1lbnQgdGhlbiByZXNvbHZlIGl0IGZpcnN0LCBpbiBjYXNlIGl0IHJldHVybnMgYW4gYXJyYXkgdGhhdCBuZWVkcyB0byBiZSBzcGxpdCAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmIChUeXBlLmlzRnVuY3Rpb24odmFsdWVEYXRhKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWVEYXRhID0gdmFsdWVEYXRhLmNhbGwoZWxlbWVudCwgZWxlbWVudEFycmF5SW5kZXgsIGVsZW1lbnRzTGVuZ3RoKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIEhhbmRsZSB0aGUgYXJyYXkgZm9ybWF0LCB3aGljaCBjYW4gYmUgc3RydWN0dXJlZCBhcyBvbmUgb2YgdGhyZWUgcG90ZW50aWFsIG92ZXJsb2FkczpcclxuXHRcdFx0XHRcdFx0XHQgQSkgWyBlbmRWYWx1ZSwgZWFzaW5nLCBzdGFydFZhbHVlIF0sIEIpIFsgZW5kVmFsdWUsIGVhc2luZyBdLCBvciBDKSBbIGVuZFZhbHVlLCBzdGFydFZhbHVlIF0gKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAoVHlwZS5pc0FycmF5KHZhbHVlRGF0YSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIGVuZFZhbHVlIGlzIGFsd2F5cyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgYXJyYXkuIERvbid0IGJvdGhlciB2YWxpZGF0aW5nIGVuZFZhbHVlJ3MgdmFsdWUgbm93XHJcblx0XHRcdFx0XHRcdFx0XHQgc2luY2UgdGhlIGVuc3VpbmcgcHJvcGVydHkgY3ljbGluZyBsb2dpYyBkb2VzIHRoYXQuICovXHJcblx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZSA9IHZhbHVlRGF0YVswXTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBUd28taXRlbSBhcnJheSBmb3JtYXQ6IElmIHRoZSBzZWNvbmQgaXRlbSBpcyBhIG51bWJlciwgZnVuY3Rpb24sIG9yIGhleCBzdHJpbmcsIHRyZWF0IGl0IGFzIGFcclxuXHRcdFx0XHRcdFx0XHRcdCBzdGFydCB2YWx1ZSBzaW5jZSBlYXNpbmdzIGNhbiBvbmx5IGJlIG5vbi1oZXggc3RyaW5ncyBvciBhcnJheXMuICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoKCFUeXBlLmlzQXJyYXkodmFsdWVEYXRhWzFdKSAmJiAvXltcXGQtXS8udGVzdCh2YWx1ZURhdGFbMV0pKSB8fCBUeXBlLmlzRnVuY3Rpb24odmFsdWVEYXRhWzFdKSB8fCBDU1MuUmVnRXguaXNIZXgudGVzdCh2YWx1ZURhdGFbMV0pKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWUgPSB2YWx1ZURhdGFbMV07XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIFR3byBvciB0aHJlZS1pdGVtIGFycmF5OiBJZiB0aGUgc2Vjb25kIGl0ZW0gaXMgYSBub24taGV4IHN0cmluZyBlYXNpbmcgbmFtZSBvciBhbiBhcnJheSwgdHJlYXQgaXQgYXMgYW4gZWFzaW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICgoVHlwZS5pc1N0cmluZyh2YWx1ZURhdGFbMV0pICYmICFDU1MuUmVnRXguaXNIZXgudGVzdCh2YWx1ZURhdGFbMV0pICYmIFZlbG9jaXR5LkVhc2luZ3NbdmFsdWVEYXRhWzFdXSkgfHwgVHlwZS5pc0FycmF5KHZhbHVlRGF0YVsxXSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZWFzaW5nID0gc2tpcFJlc29sdmluZ0Vhc2luZyA/IHZhbHVlRGF0YVsxXSA6IGdldEVhc2luZyh2YWx1ZURhdGFbMV0sIG9wdHMuZHVyYXRpb24pO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogRG9uJ3QgYm90aGVyIHZhbGlkYXRpbmcgc3RhcnRWYWx1ZSdzIHZhbHVlIG5vdyBzaW5jZSB0aGUgZW5zdWluZyBwcm9wZXJ0eSBjeWNsaW5nIGxvZ2ljIGluaGVyZW50bHkgZG9lcyB0aGF0LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlID0gdmFsdWVEYXRhWzJdO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSA9IHZhbHVlRGF0YVsxXSB8fCB2YWx1ZURhdGFbMl07XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBIYW5kbGUgdGhlIHNpbmdsZS12YWx1ZSBmb3JtYXQuICovXHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlID0gdmFsdWVEYXRhO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0LyogRGVmYXVsdCB0byB0aGUgY2FsbCdzIGVhc2luZyBpZiBhIHBlci1wcm9wZXJ0eSBlYXNpbmcgdHlwZSB3YXMgbm90IGRlZmluZWQuICovXHJcblx0XHRcdFx0XHRcdFx0aWYgKCFza2lwUmVzb2x2aW5nRWFzaW5nKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRlYXNpbmcgPSBlYXNpbmcgfHwgb3B0cy5lYXNpbmc7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBJZiBmdW5jdGlvbnMgd2VyZSBwYXNzZWQgaW4gYXMgdmFsdWVzLCBwYXNzIHRoZSBmdW5jdGlvbiB0aGUgY3VycmVudCBlbGVtZW50IGFzIGl0cyBjb250ZXh0LFxyXG5cdFx0XHRcdFx0XHRcdCBwbHVzIHRoZSBlbGVtZW50J3MgaW5kZXggYW5kIHRoZSBlbGVtZW50IHNldCdzIHNpemUgYXMgYXJndW1lbnRzLiBUaGVuLCBhc3NpZ24gdGhlIHJldHVybmVkIHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmIChUeXBlLmlzRnVuY3Rpb24oZW5kVmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZSA9IGVuZFZhbHVlLmNhbGwoZWxlbWVudCwgZWxlbWVudEFycmF5SW5kZXgsIGVsZW1lbnRzTGVuZ3RoKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmIChUeXBlLmlzRnVuY3Rpb24oc3RhcnRWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWUgPSBzdGFydFZhbHVlLmNhbGwoZWxlbWVudCwgZWxlbWVudEFycmF5SW5kZXgsIGVsZW1lbnRzTGVuZ3RoKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIEFsbG93IHN0YXJ0VmFsdWUgdG8gYmUgbGVmdCBhcyB1bmRlZmluZWQgdG8gaW5kaWNhdGUgdG8gdGhlIGVuc3VpbmcgY29kZSB0aGF0IGl0cyB2YWx1ZSB3YXMgbm90IGZvcmNlZmVkLiAqL1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiBbZW5kVmFsdWUgfHwgMCwgZWFzaW5nLCBzdGFydFZhbHVlXTtcclxuXHRcdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRcdHZhciBmaXhQcm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24ocHJvcGVydHksIHZhbHVlRGF0YSkge1xyXG5cdFx0XHRcdFx0XHRcdC8qIEluIGNhc2UgdGhpcyBwcm9wZXJ0eSBpcyBhIGhvb2ssIHRoZXJlIGFyZSBjaXJjdW1zdGFuY2VzIHdoZXJlIHdlIHdpbGwgaW50ZW5kIHRvIHdvcmsgb24gdGhlIGhvb2sncyByb290IHByb3BlcnR5IGFuZCBub3QgdGhlIGhvb2tlZCBzdWJwcm9wZXJ0eS4gKi9cclxuXHRcdFx0XHRcdFx0XHR2YXIgcm9vdFByb3BlcnR5ID0gQ1NTLkhvb2tzLmdldFJvb3QocHJvcGVydHkpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyb290UHJvcGVydHlWYWx1ZSA9IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBQYXJzZSBvdXQgZW5kVmFsdWUsIGVhc2luZywgYW5kIHN0YXJ0VmFsdWUgZnJvbSB0aGUgcHJvcGVydHkncyBkYXRhLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZSA9IHZhbHVlRGF0YVswXSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZWFzaW5nID0gdmFsdWVEYXRhWzFdLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlID0gdmFsdWVEYXRhWzJdLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuO1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0XHQgU3RhcnQgVmFsdWUgU291cmNpbmdcclxuXHRcdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIE90aGVyIHRoYW4gZm9yIHRoZSBkdW1teSB0d2VlbiBwcm9wZXJ0eSwgcHJvcGVydGllcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyIChhbmQgZG8gbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBub3JtYWxpemF0aW9uKSB3aWxsXHJcblx0XHRcdFx0XHRcdFx0IGluaGVyZW50bHkgcHJvZHVjZSBubyBzdHlsZSBjaGFuZ2VzIHdoZW4gc2V0LCBzbyB0aGV5IGFyZSBza2lwcGVkIGluIG9yZGVyIHRvIGRlY3JlYXNlIGFuaW1hdGlvbiB0aWNrIG92ZXJoZWFkLlxyXG5cdFx0XHRcdFx0XHRcdCBQcm9wZXJ0eSBzdXBwb3J0IGlzIGRldGVybWluZWQgdmlhIHByZWZpeENoZWNrKCksIHdoaWNoIHJldHVybnMgYSBmYWxzZSBmbGFnIHdoZW4gbm8gc3VwcG9ydGVkIGlzIGRldGVjdGVkLiAqL1xyXG5cdFx0XHRcdFx0XHRcdC8qIE5vdGU6IFNpbmNlIFNWRyBlbGVtZW50cyBoYXZlIHNvbWUgb2YgdGhlaXIgcHJvcGVydGllcyBkaXJlY3RseSBhcHBsaWVkIGFzIEhUTUwgYXR0cmlidXRlcyxcclxuXHRcdFx0XHRcdFx0XHQgdGhlcmUgaXMgbm8gd2F5IHRvIGNoZWNrIGZvciB0aGVpciBleHBsaWNpdCBicm93c2VyIHN1cHBvcnQsIGFuZCBzbyB3ZSBza2lwIHNraXAgdGhpcyBjaGVjayBmb3IgdGhlbS4gKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAoKCFkYXRhIHx8ICFkYXRhLmlzU1ZHKSAmJiByb290UHJvcGVydHkgIT09IFwidHdlZW5cIiAmJiBDU1MuTmFtZXMucHJlZml4Q2hlY2socm9vdFByb3BlcnR5KVsxXSA9PT0gZmFsc2UgJiYgQ1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWRbcm9vdFByb3BlcnR5XSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoVmVsb2NpdHkuZGVidWcpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXCJTa2lwcGluZyBbXCIgKyByb290UHJvcGVydHkgKyBcIl0gZHVlIHRvIGEgbGFjayBvZiBicm93c2VyIHN1cHBvcnQuXCIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0LyogSWYgdGhlIGRpc3BsYXkgb3B0aW9uIGlzIGJlaW5nIHNldCB0byBhIG5vbi1cIm5vbmVcIiAoZS5nLiBcImJsb2NrXCIpIGFuZCBvcGFjaXR5IChmaWx0ZXIgb24gSUU8PTgpIGlzIGJlaW5nXHJcblx0XHRcdFx0XHRcdFx0IGFuaW1hdGVkIHRvIGFuIGVuZFZhbHVlIG9mIG5vbi16ZXJvLCB0aGUgdXNlcidzIGludGVudGlvbiBpcyB0byBmYWRlIGluIGZyb20gaW52aXNpYmxlLCB0aHVzIHdlIGZvcmNlZmVlZCBvcGFjaXR5XHJcblx0XHRcdFx0XHRcdFx0IGEgc3RhcnRWYWx1ZSBvZiAwIGlmIGl0cyBzdGFydFZhbHVlIGhhc24ndCBhbHJlYWR5IGJlZW4gc291cmNlZCBieSB2YWx1ZSB0cmFuc2ZlcnJpbmcgb3IgcHJpb3IgZm9yY2VmZWVkaW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmICgoKG9wdHMuZGlzcGxheSAhPT0gdW5kZWZpbmVkICYmIG9wdHMuZGlzcGxheSAhPT0gbnVsbCAmJiBvcHRzLmRpc3BsYXkgIT09IFwibm9uZVwiKSB8fCAob3B0cy52aXNpYmlsaXR5ICE9PSB1bmRlZmluZWQgJiYgb3B0cy52aXNpYmlsaXR5ICE9PSBcImhpZGRlblwiKSkgJiYgL29wYWNpdHl8ZmlsdGVyLy50ZXN0KHByb3BlcnR5KSAmJiAhc3RhcnRWYWx1ZSAmJiBlbmRWYWx1ZSAhPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSA9IDA7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBJZiB2YWx1ZXMgaGF2ZSBiZWVuIHRyYW5zZmVycmVkIGZyb20gdGhlIHByZXZpb3VzIFZlbG9jaXR5IGNhbGwsIGV4dHJhY3QgdGhlIGVuZFZhbHVlIGFuZCByb290UHJvcGVydHlWYWx1ZVxyXG5cdFx0XHRcdFx0XHRcdCBmb3IgYWxsIG9mIHRoZSBjdXJyZW50IGNhbGwncyBwcm9wZXJ0aWVzIHRoYXQgd2VyZSAqYWxzbyogYW5pbWF0ZWQgaW4gdGhlIHByZXZpb3VzIGNhbGwuICovXHJcblx0XHRcdFx0XHRcdFx0LyogTm90ZTogVmFsdWUgdHJhbnNmZXJyaW5nIGNhbiBvcHRpb25hbGx5IGJlIGRpc2FibGVkIGJ5IHRoZSB1c2VyIHZpYSB0aGUgX2NhY2hlVmFsdWVzIG9wdGlvbi4gKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAob3B0cy5fY2FjaGVWYWx1ZXMgJiYgbGFzdFR3ZWVuc0NvbnRhaW5lciAmJiBsYXN0VHdlZW5zQ29udGFpbmVyW3Byb3BlcnR5XSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHN0YXJ0VmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlID0gbGFzdFR3ZWVuc0NvbnRhaW5lcltwcm9wZXJ0eV0uZW5kVmFsdWUgKyBsYXN0VHdlZW5zQ29udGFpbmVyW3Byb3BlcnR5XS51bml0VHlwZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBUaGUgcHJldmlvdXMgY2FsbCdzIHJvb3RQcm9wZXJ0eVZhbHVlIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSBlbGVtZW50J3MgZGF0YSBjYWNoZSBzaW5jZSB0aGF0J3MgdGhlXHJcblx0XHRcdFx0XHRcdFx0XHQgaW5zdGFuY2Ugb2Ygcm9vdFByb3BlcnR5VmFsdWUgdGhhdCBnZXRzIGZyZXNobHkgdXBkYXRlZCBieSB0aGUgdHdlZW5pbmcgcHJvY2Vzcywgd2hlcmVhcyB0aGUgcm9vdFByb3BlcnR5VmFsdWVcclxuXHRcdFx0XHRcdFx0XHRcdCBhdHRhY2hlZCB0byB0aGUgaW5jb21pbmcgbGFzdFR3ZWVuc0NvbnRhaW5lciBpcyBlcXVhbCB0byB0aGUgcm9vdCBwcm9wZXJ0eSdzIHZhbHVlIHByaW9yIHRvIGFueSB0d2VlbmluZy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlID0gZGF0YS5yb290UHJvcGVydHlWYWx1ZUNhY2hlW3Jvb3RQcm9wZXJ0eV07XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBJZiB2YWx1ZXMgd2VyZSBub3QgdHJhbnNmZXJyZWQgZnJvbSBhIHByZXZpb3VzIFZlbG9jaXR5IGNhbGwsIHF1ZXJ5IHRoZSBET00gYXMgbmVlZGVkLiAqL1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBIYW5kbGUgaG9va2VkIHByb3BlcnRpZXMuICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoQ1NTLkhvb2tzLnJlZ2lzdGVyZWRbcHJvcGVydHldKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChzdGFydFZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyb290UHJvcGVydHlWYWx1ZSA9IENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIHJvb3RQcm9wZXJ0eSk7IC8qIEdFVCAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIE5vdGU6IFRoZSBmb2xsb3dpbmcgZ2V0UHJvcGVydHlWYWx1ZSgpIGNhbGwgZG9lcyBub3QgYWN0dWFsbHkgdHJpZ2dlciBhIERPTSBxdWVyeTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgZ2V0UHJvcGVydHlWYWx1ZSgpIHdpbGwgZXh0cmFjdCB0aGUgaG9vayBmcm9tIHJvb3RQcm9wZXJ0eVZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWUgPSBDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBwcm9wZXJ0eSwgcm9vdFByb3BlcnR5VmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIElmIHN0YXJ0VmFsdWUgaXMgYWxyZWFkeSBkZWZpbmVkIHZpYSBmb3JjZWZlZWRpbmcsIGRvIG5vdCBxdWVyeSB0aGUgRE9NIGZvciB0aGUgcm9vdCBwcm9wZXJ0eSdzIHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCBqdXN0IGdyYWIgcm9vdFByb3BlcnR5J3MgemVyby12YWx1ZSB0ZW1wbGF0ZSBmcm9tIENTUy5Ib29rcy4gVGhpcyBvdmVyd3JpdGVzIHRoZSBlbGVtZW50J3MgYWN0dWFsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0IHJvb3QgcHJvcGVydHkgdmFsdWUgKGlmIG9uZSBpcyBzZXQpLCBidXQgdGhpcyBpcyBhY2NlcHRhYmxlIHNpbmNlIHRoZSBwcmltYXJ5IHJlYXNvbiB1c2VycyBmb3JjZWZlZWQgaXNcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgdG8gYXZvaWQgRE9NIHF1ZXJpZXMsIGFuZCB0aHVzIHdlIGxpa2V3aXNlIGF2b2lkIHF1ZXJ5aW5nIHRoZSBET00gZm9yIHRoZSByb290IHByb3BlcnR5J3MgdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogR3JhYiB0aGlzIGhvb2sncyB6ZXJvLXZhbHVlIHRlbXBsYXRlLCBlLmcuIFwiMHB4IDBweCAwcHggYmxhY2tcIi4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyb290UHJvcGVydHlWYWx1ZSA9IENTUy5Ib29rcy50ZW1wbGF0ZXNbcm9vdFByb3BlcnR5XVsxXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBIYW5kbGUgbm9uLWhvb2tlZCBwcm9wZXJ0aWVzIHRoYXQgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gZGVmaW5lZCB2aWEgZm9yY2VmZWVkaW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChzdGFydFZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSA9IENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIHByb3BlcnR5KTsgLyogR0VUICovXHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0XHQgVmFsdWUgRGF0YSBFeHRyYWN0aW9uXHJcblx0XHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0XHR2YXIgc2VwYXJhdGVkVmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlVW5pdFR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWVVbml0VHlwZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0b3BlcmF0b3IgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0XHRcdFx0LyogU2VwYXJhdGVzIGEgcHJvcGVydHkgdmFsdWUgaW50byBpdHMgbnVtZXJpYyB2YWx1ZSBhbmQgaXRzIHVuaXQgdHlwZS4gKi9cclxuXHRcdFx0XHRcdFx0XHR2YXIgc2VwYXJhdGVWYWx1ZSA9IGZ1bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHVuaXRUeXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG51bWVyaWNWYWx1ZTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRudW1lcmljVmFsdWUgPSAodmFsdWUgfHwgXCIwXCIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnRvU3RyaW5nKClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQudG9Mb3dlckNhc2UoKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIE1hdGNoIHRoZSB1bml0IHR5cGUgYXQgdGhlIGVuZCBvZiB0aGUgdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoL1slQS16XSskLywgZnVuY3Rpb24obWF0Y2gpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIEdyYWIgdGhlIHVuaXQgdHlwZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuaXRUeXBlID0gbWF0Y2g7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogU3RyaXAgdGhlIHVuaXQgdHlwZSBvZmYgb2YgdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gXCJcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBJZiBubyB1bml0IHR5cGUgd2FzIHN1cHBsaWVkLCBhc3NpZ24gb25lIHRoYXQgaXMgYXBwcm9wcmlhdGUgZm9yIHRoaXMgcHJvcGVydHkgKGUuZy4gXCJkZWdcIiBmb3Igcm90YXRlWiBvciBcInB4XCIgZm9yIHdpZHRoKS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGlmICghdW5pdFR5cGUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dW5pdFR5cGUgPSBDU1MuVmFsdWVzLmdldFVuaXRUeXBlKHByb3BlcnR5KTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gW251bWVyaWNWYWx1ZSwgdW5pdFR5cGVdO1xyXG5cdFx0XHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmIChzdGFydFZhbHVlICE9PSBlbmRWYWx1ZSAmJiBUeXBlLmlzU3RyaW5nKHN0YXJ0VmFsdWUpICYmIFR5cGUuaXNTdHJpbmcoZW5kVmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciBpU3RhcnQgPSAwLCAvLyBpbmRleCBpbiBzdGFydFZhbHVlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aUVuZCA9IDAsIC8vIGluZGV4IGluIGVuZFZhbHVlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0YVN0YXJ0ID0gW10sIC8vIGFycmF5IG9mIHN0YXJ0VmFsdWUgbnVtYmVyc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFFbmQgPSBbXSwgLy8gYXJyYXkgb2YgZW5kVmFsdWUgbnVtYmVyc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGluQ2FsYyA9IDAsIC8vIEtlZXAgdHJhY2sgb2YgYmVpbmcgaW5zaWRlIGEgXCJjYWxjKClcIiBzbyB3ZSBkb24ndCBkdXBsaWNhdGUgaXRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpblJHQiA9IDAsIC8vIEtlZXAgdHJhY2sgb2YgYmVpbmcgaW5zaWRlIGFuIFJHQiBhcyB3ZSBjYW4ndCB1c2UgZnJhY3Rpb25hbCB2YWx1ZXNcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpblJHQkEgPSAwOyAvLyBLZWVwIHRyYWNrIG9mIGJlaW5nIGluc2lkZSBhbiBSR0JBIGFzIHdlIG11c3QgcGFzcyBmcmFjdGlvbmFsIGZvciB0aGUgYWxwaGEgY2hhbm5lbFxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWUgPSBDU1MuSG9va3MuZml4Q29sb3JzKHN0YXJ0VmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWUgPSBDU1MuSG9va3MuZml4Q29sb3JzKGVuZFZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdHdoaWxlIChpU3RhcnQgPCBzdGFydFZhbHVlLmxlbmd0aCAmJiBpRW5kIDwgZW5kVmFsdWUubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBjU3RhcnQgPSBzdGFydFZhbHVlW2lTdGFydF0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjRW5kID0gZW5kVmFsdWVbaUVuZF07XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoL1tcXGRcXC4tXS8udGVzdChjU3RhcnQpICYmIC9bXFxkXFwuLV0vLnRlc3QoY0VuZCkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdFN0YXJ0ID0gY1N0YXJ0LCAvLyB0ZW1wb3JhcnkgY2hhcmFjdGVyIGJ1ZmZlclxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0RW5kID0gY0VuZCwgLy8gdGVtcG9yYXJ5IGNoYXJhY3RlciBidWZmZXJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZG90U3RhcnQgPSBcIi5cIiwgLy8gTWFrZSBzdXJlIHdlIGNhbiBvbmx5IGV2ZXIgbWF0Y2ggYSBzaW5nbGUgZG90IGluIGEgZGVjaW1hbFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkb3RFbmQgPSBcIi5cIjsgLy8gTWFrZSBzdXJlIHdlIGNhbiBvbmx5IGV2ZXIgbWF0Y2ggYSBzaW5nbGUgZG90IGluIGEgZGVjaW1hbFxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoKytpU3RhcnQgPCBzdGFydFZhbHVlLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y1N0YXJ0ID0gc3RhcnRWYWx1ZVtpU3RhcnRdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNTdGFydCA9PT0gZG90U3RhcnQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZG90U3RhcnQgPSBcIi4uXCI7IC8vIENhbiBuZXZlciBtYXRjaCB0d28gY2hhcmFjdGVyc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICghL1xcZC8udGVzdChjU3RhcnQpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dFN0YXJ0ICs9IGNTdGFydDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCsraUVuZCA8IGVuZFZhbHVlLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y0VuZCA9IGVuZFZhbHVlW2lFbmRdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNFbmQgPT09IGRvdEVuZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkb3RFbmQgPSBcIi4uXCI7IC8vIENhbiBuZXZlciBtYXRjaCB0d28gY2hhcmFjdGVyc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICghL1xcZC8udGVzdChjRW5kKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRFbmQgKz0gY0VuZDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHVTdGFydCA9IENTUy5Ib29rcy5nZXRVbml0KHN0YXJ0VmFsdWUsIGlTdGFydCksIC8vIHRlbXBvcmFyeSB1bml0IHR5cGVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dUVuZCA9IENTUy5Ib29rcy5nZXRVbml0KGVuZFZhbHVlLCBpRW5kKTsgLy8gdGVtcG9yYXJ5IHVuaXQgdHlwZVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpU3RhcnQgKz0gdVN0YXJ0Lmxlbmd0aDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpRW5kICs9IHVFbmQubGVuZ3RoO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh1U3RhcnQgPT09IHVFbmQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFNhbWUgdW5pdHNcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh0U3RhcnQgPT09IHRFbmQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU2FtZSBudW1iZXJzLCBzbyBqdXN0IGNvcHkgb3ZlclxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuICs9IHRTdGFydCArIHVTdGFydDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERpZmZlcmVudCBudW1iZXJzLCBzbyBzdG9yZSB0aGVtXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhdHRlcm4gKz0gXCJ7XCIgKyBhU3RhcnQubGVuZ3RoICsgKGluUkdCID8gXCIhXCIgOiBcIlwiKSArIFwifVwiICsgdVN0YXJ0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhU3RhcnQucHVzaChwYXJzZUZsb2F0KHRTdGFydCkpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhRW5kLnB1c2gocGFyc2VGbG9hdCh0RW5kKSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERpZmZlcmVudCB1bml0cywgc28gcHV0IGludG8gYSBcImNhbGMoZnJvbSArIHRvKVwiIGFuZCBhbmltYXRlIGVhY2ggc2lkZSB0by9mcm9tIHplcm9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBuU3RhcnQgPSBwYXJzZUZsb2F0KHRTdGFydCksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bkVuZCA9IHBhcnNlRmxvYXQodEVuZCk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGF0dGVybiArPSAoaW5DYWxjIDwgNSA/IFwiY2FsY1wiIDogXCJcIikgKyBcIihcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCsgKG5TdGFydCA/IFwie1wiICsgYVN0YXJ0Lmxlbmd0aCArIChpblJHQiA/IFwiIVwiIDogXCJcIikgKyBcIn1cIiA6IFwiMFwiKSArIHVTdGFydFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCsgXCIgKyBcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCsgKG5FbmQgPyBcIntcIiArIChhU3RhcnQubGVuZ3RoICsgKG5TdGFydCA/IDEgOiAwKSkgKyAoaW5SR0IgPyBcIiFcIiA6IFwiXCIpICsgXCJ9XCIgOiBcIjBcIikgKyB1RW5kXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KyBcIilcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChuU3RhcnQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YVN0YXJ0LnB1c2goblN0YXJ0KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUVuZC5wdXNoKDApO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG5FbmQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YVN0YXJ0LnB1c2goMCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFFbmQucHVzaChuRW5kKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoY1N0YXJ0ID09PSBjRW5kKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGF0dGVybiArPSBjU3RhcnQ7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aVN0YXJ0Kys7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aUVuZCsrO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEtlZXAgdHJhY2sgb2YgYmVpbmcgaW5zaWRlIGEgY2FsYygpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGluQ2FsYyA9PT0gMCAmJiBjU3RhcnQgPT09IFwiY1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHx8IGluQ2FsYyA9PT0gMSAmJiBjU3RhcnQgPT09IFwiYVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHx8IGluQ2FsYyA9PT0gMiAmJiBjU3RhcnQgPT09IFwibFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHx8IGluQ2FsYyA9PT0gMyAmJiBjU3RhcnQgPT09IFwiY1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHx8IGluQ2FsYyA+PSA0ICYmIGNTdGFydCA9PT0gXCIoXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbkNhbGMrKztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKChpbkNhbGMgJiYgaW5DYWxjIDwgNSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fHwgaW5DYWxjID49IDQgJiYgY1N0YXJ0ID09PSBcIilcIiAmJiAtLWluQ2FsYyA8IDUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGluQ2FsYyA9IDA7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEtlZXAgdHJhY2sgb2YgYmVpbmcgaW5zaWRlIGFuIHJnYigpIC8gcmdiYSgpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGluUkdCID09PSAwICYmIGNTdGFydCA9PT0gXCJyXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fHwgaW5SR0IgPT09IDEgJiYgY1N0YXJ0ID09PSBcImdcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR8fCBpblJHQiA9PT0gMiAmJiBjU3RhcnQgPT09IFwiYlwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHx8IGluUkdCID09PSAzICYmIGNTdGFydCA9PT0gXCJhXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fHwgaW5SR0IgPj0gMyAmJiBjU3RhcnQgPT09IFwiKFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGluUkdCID09PSAzICYmIGNTdGFydCA9PT0gXCJhXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5SR0JBID0gMTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGluUkdCKys7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChpblJHQkEgJiYgY1N0YXJ0ID09PSBcIixcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCsraW5SR0JBID4gMykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpblJHQiA9IGluUkdCQSA9IDA7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICgoaW5SR0JBICYmIGluUkdCIDwgKGluUkdCQSA/IDUgOiA0KSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fHwgaW5SR0IgPj0gKGluUkdCQSA/IDQgOiAzKSAmJiBjU3RhcnQgPT09IFwiKVwiICYmIC0taW5SR0IgPCAoaW5SR0JBID8gNSA6IDQpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpblJHQiA9IGluUkdCQSA9IDA7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGluQ2FsYyA9IDA7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogY2hhbmdpbmcgdW5pdHMsIGZpeGluZyBjb2xvdXJzXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChpU3RhcnQgIT09IHN0YXJ0VmFsdWUubGVuZ3RoIHx8IGlFbmQgIT09IGVuZFZhbHVlLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoVmVsb2NpdHkuZGVidWcpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKFwiVHJ5aW5nIHRvIHBhdHRlcm4gbWF0Y2ggbWlzLW1hdGNoZWQgc3RyaW5ncyBbXFxcIlwiICsgZW5kVmFsdWUgKyBcIlxcXCIsIFxcXCJcIiArIHN0YXJ0VmFsdWUgKyBcIlxcXCJdXCIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdHBhdHRlcm4gPSB1bmRlZmluZWQ7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAocGF0dGVybikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYVN0YXJ0Lmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChWZWxvY2l0eS5kZWJ1Zykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXCJQYXR0ZXJuIGZvdW5kIFxcXCJcIiArIHBhdHRlcm4gKyBcIlxcXCIgLT4gXCIsIGFTdGFydCwgYUVuZCwgXCJbXCIgKyBzdGFydFZhbHVlICsgXCIsXCIgKyBlbmRWYWx1ZSArIFwiXVwiKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSA9IGFTdGFydDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZSA9IGFFbmQ7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWVVbml0VHlwZSA9IHN0YXJ0VmFsdWVVbml0VHlwZSA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGF0dGVybiA9IHVuZGVmaW5lZDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKCFwYXR0ZXJuKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBTZXBhcmF0ZSBzdGFydFZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0c2VwYXJhdGVkVmFsdWUgPSBzZXBhcmF0ZVZhbHVlKHByb3BlcnR5LCBzdGFydFZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWUgPSBzZXBhcmF0ZWRWYWx1ZVswXTtcclxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWVVbml0VHlwZSA9IHNlcGFyYXRlZFZhbHVlWzFdO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIFNlcGFyYXRlIGVuZFZhbHVlLCBhbmQgZXh0cmFjdCBhIHZhbHVlIG9wZXJhdG9yIChlLmcuIFwiKz1cIiwgXCItPVwiKSBpZiBvbmUgZXhpc3RzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0c2VwYXJhdGVkVmFsdWUgPSBzZXBhcmF0ZVZhbHVlKHByb3BlcnR5LCBlbmRWYWx1ZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZSA9IHNlcGFyYXRlZFZhbHVlWzBdLnJlcGxhY2UoL14oWystXFwvKl0pPS8sIGZ1bmN0aW9uKG1hdGNoLCBzdWJNYXRjaCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRvcGVyYXRvciA9IHN1Yk1hdGNoO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogU3RyaXAgdGhlIG9wZXJhdG9yIG9mZiBvZiB0aGUgdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBcIlwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZVVuaXRUeXBlID0gc2VwYXJhdGVkVmFsdWVbMV07XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogUGFyc2UgZmxvYXQgdmFsdWVzIGZyb20gZW5kVmFsdWUgYW5kIHN0YXJ0VmFsdWUuIERlZmF1bHQgdG8gMCBpZiBOYU4gaXMgcmV0dXJuZWQuICovXHJcblx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlID0gcGFyc2VGbG9hdChzdGFydFZhbHVlKSB8fCAwO1xyXG5cdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWUgPSBwYXJzZUZsb2F0KGVuZFZhbHVlKSB8fCAwO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0XHRcdCBQcm9wZXJ0eS1TcGVjaWZpYyBWYWx1ZSBDb252ZXJzaW9uXHJcblx0XHRcdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIEN1c3RvbSBzdXBwb3J0IGZvciBwcm9wZXJ0aWVzIHRoYXQgZG9uJ3QgYWN0dWFsbHkgYWNjZXB0IHRoZSAlIHVuaXQgdHlwZSwgYnV0IHdoZXJlIHBvbGx5ZmlsbGluZyBpcyB0cml2aWFsIGFuZCByZWxhdGl2ZWx5IGZvb2xwcm9vZi4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChlbmRWYWx1ZVVuaXRUeXBlID09PSBcIiVcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBBICUtdmFsdWUgZm9udFNpemUvbGluZUhlaWdodCBpcyByZWxhdGl2ZSB0byB0aGUgcGFyZW50J3MgZm9udFNpemUgKGFzIG9wcG9zZWQgdG8gdGhlIHBhcmVudCdzIGRpbWVuc2lvbnMpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgd2hpY2ggaXMgaWRlbnRpY2FsIHRvIHRoZSBlbSB1bml0J3MgYmVoYXZpb3IsIHNvIHdlIHBpZ2d5YmFjayBvZmYgb2YgdGhhdC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKC9eKGZvbnRTaXplfGxpbmVIZWlnaHQpJC8udGVzdChwcm9wZXJ0eSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBDb252ZXJ0ICUgaW50byBhbiBlbSBkZWNpbWFsIHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlID0gZW5kVmFsdWUgLyAxMDA7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWVVbml0VHlwZSA9IFwiZW1cIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBGb3Igc2NhbGVYIGFuZCBzY2FsZVksIGNvbnZlcnQgdGhlIHZhbHVlIGludG8gaXRzIGRlY2ltYWwgZm9ybWF0IGFuZCBzdHJpcCBvZmYgdGhlIHVuaXQgdHlwZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICgvXnNjYWxlLy50ZXN0KHByb3BlcnR5KSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlID0gZW5kVmFsdWUgLyAxMDA7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWVVbml0VHlwZSA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogRm9yIFJHQiBjb21wb25lbnRzLCB0YWtlIHRoZSBkZWZpbmVkIHBlcmNlbnRhZ2Ugb2YgMjU1IGFuZCBzdHJpcCBvZmYgdGhlIHVuaXQgdHlwZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICgvKFJlZHxHcmVlbnxCbHVlKSQvaS50ZXN0KHByb3BlcnR5KSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlID0gKGVuZFZhbHVlIC8gMTAwKSAqIDI1NTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZVVuaXRUeXBlID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdCBVbml0IFJhdGlvIENhbGN1bGF0aW9uXHJcblx0XHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0LyogV2hlbiBxdWVyaWVkLCB0aGUgYnJvd3NlciByZXR1cm5zIChtb3N0KSBDU1MgcHJvcGVydHkgdmFsdWVzIGluIHBpeGVscy4gVGhlcmVmb3JlLCBpZiBhbiBlbmRWYWx1ZSB3aXRoIGEgdW5pdCB0eXBlIG9mXHJcblx0XHRcdFx0XHRcdFx0ICUsIGVtLCBvciByZW0gaXMgYW5pbWF0ZWQgdG93YXJkLCBzdGFydFZhbHVlIG11c3QgYmUgY29udmVydGVkIGZyb20gcGl4ZWxzIGludG8gdGhlIHNhbWUgdW5pdCB0eXBlIGFzIGVuZFZhbHVlIGluIG9yZGVyXHJcblx0XHRcdFx0XHRcdFx0IGZvciB2YWx1ZSBtYW5pcHVsYXRpb24gbG9naWMgKGluY3JlbWVudC9kZWNyZW1lbnQpIHRvIHByb2NlZWQuIEZ1cnRoZXIsIGlmIHRoZSBzdGFydFZhbHVlIHdhcyBmb3JjZWZlZCBvciB0cmFuc2ZlcnJlZFxyXG5cdFx0XHRcdFx0XHRcdCBmcm9tIGEgcHJldmlvdXMgY2FsbCwgc3RhcnRWYWx1ZSBtYXkgYWxzbyBub3QgYmUgaW4gcGl4ZWxzLiBVbml0IGNvbnZlcnNpb24gbG9naWMgdGhlcmVmb3JlIGNvbnNpc3RzIG9mIHR3byBzdGVwczpcclxuXHRcdFx0XHRcdFx0XHQgMSkgQ2FsY3VsYXRpbmcgdGhlIHJhdGlvIG9mICUvZW0vcmVtL3ZoL3Z3IHJlbGF0aXZlIHRvIHBpeGVsc1xyXG5cdFx0XHRcdFx0XHRcdCAyKSBDb252ZXJ0aW5nIHN0YXJ0VmFsdWUgaW50byB0aGUgc2FtZSB1bml0IG9mIG1lYXN1cmVtZW50IGFzIGVuZFZhbHVlIGJhc2VkIG9uIHRoZXNlIHJhdGlvcy4gKi9cclxuXHRcdFx0XHRcdFx0XHQvKiBVbml0IGNvbnZlcnNpb24gcmF0aW9zIGFyZSBjYWxjdWxhdGVkIGJ5IGluc2VydGluZyBhIHNpYmxpbmcgbm9kZSBuZXh0IHRvIHRoZSB0YXJnZXQgbm9kZSwgY29weWluZyBvdmVyIGl0cyBwb3NpdGlvbiBwcm9wZXJ0eSxcclxuXHRcdFx0XHRcdFx0XHQgc2V0dGluZyB2YWx1ZXMgd2l0aCB0aGUgdGFyZ2V0IHVuaXQgdHlwZSB0aGVuIGNvbXBhcmluZyB0aGUgcmV0dXJuZWQgcGl4ZWwgdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0LyogTm90ZTogRXZlbiBpZiBvbmx5IG9uZSBvZiB0aGVzZSB1bml0IHR5cGVzIGlzIGJlaW5nIGFuaW1hdGVkLCBhbGwgdW5pdCByYXRpb3MgYXJlIGNhbGN1bGF0ZWQgYXQgb25jZSBzaW5jZSB0aGUgb3ZlcmhlYWRcclxuXHRcdFx0XHRcdFx0XHQgb2YgYmF0Y2hpbmcgdGhlIFNFVHMgYW5kIEdFVHMgdG9nZXRoZXIgdXBmcm9udCBvdXR3ZWlnaHRzIHRoZSBwb3RlbnRpYWwgb3ZlcmhlYWRcclxuXHRcdFx0XHRcdFx0XHQgb2YgbGF5b3V0IHRocmFzaGluZyBjYXVzZWQgYnkgcmUtcXVlcnlpbmcgZm9yIHVuY2FsY3VsYXRlZCByYXRpb3MgZm9yIHN1YnNlcXVlbnRseS1wcm9jZXNzZWQgcHJvcGVydGllcy4gKi9cclxuXHRcdFx0XHRcdFx0XHQvKiBUb2RvOiBTaGlmdCB0aGlzIGxvZ2ljIGludG8gdGhlIGNhbGxzJyBmaXJzdCB0aWNrIGluc3RhbmNlIHNvIHRoYXQgaXQncyBzeW5jZWQgd2l0aCBSQUYuICovXHJcblx0XHRcdFx0XHRcdFx0dmFyIGNhbGN1bGF0ZVVuaXRSYXRpb3MgPSBmdW5jdGlvbigpIHtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdFx0XHQgU2FtZSBSYXRpbyBDaGVja3NcclxuXHRcdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogVGhlIHByb3BlcnRpZXMgYmVsb3cgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGVsZW1lbnQgZGlmZmVycyBzdWZmaWNpZW50bHkgZnJvbSB0aGlzIGNhbGwnc1xyXG5cdFx0XHRcdFx0XHRcdFx0IHByZXZpb3VzbHkgaXRlcmF0ZWQgZWxlbWVudCB0byBhbHNvIGRpZmZlciBpbiBpdHMgdW5pdCBjb252ZXJzaW9uIHJhdGlvcy4gSWYgdGhlIHByb3BlcnRpZXMgbWF0Y2ggdXAgd2l0aCB0aG9zZVxyXG5cdFx0XHRcdFx0XHRcdFx0IG9mIHRoZSBwcmlvciBlbGVtZW50LCB0aGUgcHJpb3IgZWxlbWVudCdzIGNvbnZlcnNpb24gcmF0aW9zIGFyZSB1c2VkLiBMaWtlIG1vc3Qgb3B0aW1pemF0aW9ucyBpbiBWZWxvY2l0eSxcclxuXHRcdFx0XHRcdFx0XHRcdCB0aGlzIGlzIGRvbmUgdG8gbWluaW1pemUgRE9NIHF1ZXJ5aW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHNhbWVSYXRpb0luZGljYXRvcnMgPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdG15UGFyZW50OiBlbGVtZW50LnBhcmVudE5vZGUgfHwgZG9jdW1lbnQuYm9keSwgLyogR0VUICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdHBvc2l0aW9uOiBDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcInBvc2l0aW9uXCIpLCAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9udFNpemU6IENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwiZm9udFNpemVcIikgLyogR0VUICovXHJcblx0XHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIERldGVybWluZSBpZiB0aGUgc2FtZSAlIHJhdGlvIGNhbiBiZSB1c2VkLiAlIGlzIGJhc2VkIG9uIHRoZSBlbGVtZW50J3MgcG9zaXRpb24gdmFsdWUgYW5kIGl0cyBwYXJlbnQncyB3aWR0aCBhbmQgaGVpZ2h0IGRpbWVuc2lvbnMuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2FtZVBlcmNlbnRSYXRpbyA9ICgoc2FtZVJhdGlvSW5kaWNhdG9ycy5wb3NpdGlvbiA9PT0gY2FsbFVuaXRDb252ZXJzaW9uRGF0YS5sYXN0UG9zaXRpb24pICYmIChzYW1lUmF0aW9JbmRpY2F0b3JzLm15UGFyZW50ID09PSBjYWxsVW5pdENvbnZlcnNpb25EYXRhLmxhc3RQYXJlbnQpKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBEZXRlcm1pbmUgaWYgdGhlIHNhbWUgZW0gcmF0aW8gY2FuIGJlIHVzZWQuIGVtIGlzIHJlbGF0aXZlIHRvIHRoZSBlbGVtZW50J3MgZm9udFNpemUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2FtZUVtUmF0aW8gPSAoc2FtZVJhdGlvSW5kaWNhdG9ycy5mb250U2l6ZSA9PT0gY2FsbFVuaXRDb252ZXJzaW9uRGF0YS5sYXN0Rm9udFNpemUpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIFN0b3JlIHRoZXNlIHJhdGlvIGluZGljYXRvcnMgY2FsbC13aWRlIGZvciB0aGUgbmV4dCBlbGVtZW50IHRvIGNvbXBhcmUgYWdhaW5zdC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGNhbGxVbml0Q29udmVyc2lvbkRhdGEubGFzdFBhcmVudCA9IHNhbWVSYXRpb0luZGljYXRvcnMubXlQYXJlbnQ7XHJcblx0XHRcdFx0XHRcdFx0XHRjYWxsVW5pdENvbnZlcnNpb25EYXRhLmxhc3RQb3NpdGlvbiA9IHNhbWVSYXRpb0luZGljYXRvcnMucG9zaXRpb247XHJcblx0XHRcdFx0XHRcdFx0XHRjYWxsVW5pdENvbnZlcnNpb25EYXRhLmxhc3RGb250U2l6ZSA9IHNhbWVSYXRpb0luZGljYXRvcnMuZm9udFNpemU7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdFx0IEVsZW1lbnQtU3BlY2lmaWMgVW5pdHNcclxuXHRcdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogTm90ZTogSUU4IHJvdW5kcyB0byB0aGUgbmVhcmVzdCBwaXhlbCB3aGVuIHJldHVybmluZyBDU1MgdmFsdWVzLCB0aHVzIHdlIHBlcmZvcm0gY29udmVyc2lvbnMgdXNpbmcgYSBtZWFzdXJlbWVudFxyXG5cdFx0XHRcdFx0XHRcdFx0IG9mIDEwMCAoaW5zdGVhZCBvZiAxKSB0byBnaXZlIG91ciByYXRpb3MgYSBwcmVjaXNpb24gb2YgYXQgbGVhc3QgMiBkZWNpbWFsIHZhbHVlcy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdHZhciBtZWFzdXJlbWVudCA9IDEwMCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1bml0UmF0aW9zID0ge307XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFzYW1lRW1SYXRpbyB8fCAhc2FtZVBlcmNlbnRSYXRpbykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZHVtbXkgPSBkYXRhICYmIGRhdGEuaXNTVkcgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInJlY3RcIikgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0VmVsb2NpdHkuaW5pdChkdW1teSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHNhbWVSYXRpb0luZGljYXRvcnMubXlQYXJlbnQuYXBwZW5kQ2hpbGQoZHVtbXkpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogVG8gYWNjdXJhdGVseSBhbmQgY29uc2lzdGVudGx5IGNhbGN1bGF0ZSBjb252ZXJzaW9uIHJhdGlvcywgdGhlIGVsZW1lbnQncyBjYXNjYWRlZCBvdmVyZmxvdyBhbmQgYm94LXNpemluZyBhcmUgc3RyaXBwZWQuXHJcblx0XHRcdFx0XHRcdFx0XHRcdCBTaW1pbGFybHksIHNpbmNlIHdpZHRoL2hlaWdodCBjYW4gYmUgYXJ0aWZpY2lhbGx5IGNvbnN0cmFpbmVkIGJ5IHRoZWlyIG1pbi0vbWF4LSBlcXVpdmFsZW50cywgdGhlc2UgYXJlIGNvbnRyb2xsZWQgZm9yIGFzIHdlbGwuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIE5vdGU6IE92ZXJmbG93IG11c3QgYmUgYWxzbyBiZSBjb250cm9sbGVkIGZvciBwZXItYXhpcyBzaW5jZSB0aGUgb3ZlcmZsb3cgcHJvcGVydHkgb3ZlcndyaXRlcyBpdHMgcGVyLWF4aXMgdmFsdWVzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQkLmVhY2goW1wib3ZlcmZsb3dcIiwgXCJvdmVyZmxvd1hcIiwgXCJvdmVyZmxvd1lcIl0sIGZ1bmN0aW9uKGksIHByb3BlcnR5KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0VmVsb2NpdHkuQ1NTLnNldFByb3BlcnR5VmFsdWUoZHVtbXksIHByb3BlcnR5LCBcImhpZGRlblwiKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFZlbG9jaXR5LkNTUy5zZXRQcm9wZXJ0eVZhbHVlKGR1bW15LCBcInBvc2l0aW9uXCIsIHNhbWVSYXRpb0luZGljYXRvcnMucG9zaXRpb24pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRWZWxvY2l0eS5DU1Muc2V0UHJvcGVydHlWYWx1ZShkdW1teSwgXCJmb250U2l6ZVwiLCBzYW1lUmF0aW9JbmRpY2F0b3JzLmZvbnRTaXplKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0VmVsb2NpdHkuQ1NTLnNldFByb3BlcnR5VmFsdWUoZHVtbXksIFwiYm94U2l6aW5nXCIsIFwiY29udGVudC1ib3hcIik7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiB3aWR0aCBhbmQgaGVpZ2h0IGFjdCBhcyBvdXIgcHJveHkgcHJvcGVydGllcyBmb3IgbWVhc3VyaW5nIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCAlIHJhdGlvcy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0JC5lYWNoKFtcIm1pbldpZHRoXCIsIFwibWF4V2lkdGhcIiwgXCJ3aWR0aFwiLCBcIm1pbkhlaWdodFwiLCBcIm1heEhlaWdodFwiLCBcImhlaWdodFwiXSwgZnVuY3Rpb24oaSwgcHJvcGVydHkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRWZWxvY2l0eS5DU1Muc2V0UHJvcGVydHlWYWx1ZShkdW1teSwgcHJvcGVydHksIG1lYXN1cmVtZW50ICsgXCIlXCIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogcGFkZGluZ0xlZnQgYXJiaXRyYXJpbHkgYWN0cyBhcyBvdXIgcHJveHkgcHJvcGVydHkgZm9yIHRoZSBlbSByYXRpby4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0VmVsb2NpdHkuQ1NTLnNldFByb3BlcnR5VmFsdWUoZHVtbXksIFwicGFkZGluZ0xlZnRcIiwgbWVhc3VyZW1lbnQgKyBcImVtXCIpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogRGl2aWRlIHRoZSByZXR1cm5lZCB2YWx1ZSBieSB0aGUgbWVhc3VyZW1lbnQgdG8gZ2V0IHRoZSByYXRpbyBiZXR3ZWVuIDElIGFuZCAxcHguIERlZmF1bHQgdG8gMSBzaW5jZSB3b3JraW5nIHdpdGggMCBjYW4gcHJvZHVjZSBJbmZpbml0ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0dW5pdFJhdGlvcy5wZXJjZW50VG9QeFdpZHRoID0gY2FsbFVuaXRDb252ZXJzaW9uRGF0YS5sYXN0UGVyY2VudFRvUHhXaWR0aCA9IChwYXJzZUZsb2F0KENTUy5nZXRQcm9wZXJ0eVZhbHVlKGR1bW15LCBcIndpZHRoXCIsIG51bGwsIHRydWUpKSB8fCAxKSAvIG1lYXN1cmVtZW50OyAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0dW5pdFJhdGlvcy5wZXJjZW50VG9QeEhlaWdodCA9IGNhbGxVbml0Q29udmVyc2lvbkRhdGEubGFzdFBlcmNlbnRUb1B4SGVpZ2h0ID0gKHBhcnNlRmxvYXQoQ1NTLmdldFByb3BlcnR5VmFsdWUoZHVtbXksIFwiaGVpZ2h0XCIsIG51bGwsIHRydWUpKSB8fCAxKSAvIG1lYXN1cmVtZW50OyAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0dW5pdFJhdGlvcy5lbVRvUHggPSBjYWxsVW5pdENvbnZlcnNpb25EYXRhLmxhc3RFbVRvUHggPSAocGFyc2VGbG9hdChDU1MuZ2V0UHJvcGVydHlWYWx1ZShkdW1teSwgXCJwYWRkaW5nTGVmdFwiKSkgfHwgMSkgLyBtZWFzdXJlbWVudDsgLyogR0VUICovXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzYW1lUmF0aW9JbmRpY2F0b3JzLm15UGFyZW50LnJlbW92ZUNoaWxkKGR1bW15KTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHVuaXRSYXRpb3MuZW1Ub1B4ID0gY2FsbFVuaXRDb252ZXJzaW9uRGF0YS5sYXN0RW1Ub1B4O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR1bml0UmF0aW9zLnBlcmNlbnRUb1B4V2lkdGggPSBjYWxsVW5pdENvbnZlcnNpb25EYXRhLmxhc3RQZXJjZW50VG9QeFdpZHRoO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR1bml0UmF0aW9zLnBlcmNlbnRUb1B4SGVpZ2h0ID0gY2FsbFVuaXRDb252ZXJzaW9uRGF0YS5sYXN0UGVyY2VudFRvUHhIZWlnaHQ7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdFx0IEVsZW1lbnQtQWdub3N0aWMgVW5pdHNcclxuXHRcdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogV2hlcmVhcyAlIGFuZCBlbSByYXRpb3MgYXJlIGRldGVybWluZWQgb24gYSBwZXItZWxlbWVudCBiYXNpcywgdGhlIHJlbSB1bml0IG9ubHkgbmVlZHMgdG8gYmUgY2hlY2tlZFxyXG5cdFx0XHRcdFx0XHRcdFx0IG9uY2UgcGVyIGNhbGwgc2luY2UgaXQncyBleGNsdXNpdmVseSBkZXBlbmRhbnQgdXBvbiBkb2N1bWVudC5ib2R5J3MgZm9udFNpemUuIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWVcclxuXHRcdFx0XHRcdFx0XHRcdCB0aGF0IGNhbGN1bGF0ZVVuaXRSYXRpb3MoKSBpcyBiZWluZyBydW4gZHVyaW5nIHRoaXMgY2FsbCwgcmVtVG9QeCB3aWxsIHN0aWxsIGJlIHNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZSBvZiBudWxsLFxyXG5cdFx0XHRcdFx0XHRcdFx0IHNvIHdlIGNhbGN1bGF0ZSBpdCBub3cuICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoY2FsbFVuaXRDb252ZXJzaW9uRGF0YS5yZW1Ub1B4ID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIERlZmF1bHQgdG8gYnJvd3NlcnMnIGRlZmF1bHQgZm9udFNpemUgb2YgMTZweCBpbiB0aGUgY2FzZSBvZiAwLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjYWxsVW5pdENvbnZlcnNpb25EYXRhLnJlbVRvUHggPSBwYXJzZUZsb2F0KENTUy5nZXRQcm9wZXJ0eVZhbHVlKGRvY3VtZW50LmJvZHksIFwiZm9udFNpemVcIikpIHx8IDE2OyAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBTaW1pbGFybHksIHZpZXdwb3J0IHVuaXRzIGFyZSAlLXJlbGF0aXZlIHRvIHRoZSB3aW5kb3cncyBpbm5lciBkaW1lbnNpb25zLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGNhbGxVbml0Q29udmVyc2lvbkRhdGEudndUb1B4ID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNhbGxVbml0Q29udmVyc2lvbkRhdGEudndUb1B4ID0gcGFyc2VGbG9hdCh3aW5kb3cuaW5uZXJXaWR0aCkgLyAxMDA7IC8qIEdFVCAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjYWxsVW5pdENvbnZlcnNpb25EYXRhLnZoVG9QeCA9IHBhcnNlRmxvYXQod2luZG93LmlubmVySGVpZ2h0KSAvIDEwMDsgLyogR0VUICovXHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0dW5pdFJhdGlvcy5yZW1Ub1B4ID0gY2FsbFVuaXRDb252ZXJzaW9uRGF0YS5yZW1Ub1B4O1xyXG5cdFx0XHRcdFx0XHRcdFx0dW5pdFJhdGlvcy52d1RvUHggPSBjYWxsVW5pdENvbnZlcnNpb25EYXRhLnZ3VG9QeDtcclxuXHRcdFx0XHRcdFx0XHRcdHVuaXRSYXRpb3MudmhUb1B4ID0gY2FsbFVuaXRDb252ZXJzaW9uRGF0YS52aFRvUHg7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKFZlbG9jaXR5LmRlYnVnID49IDEpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXCJVbml0IHJhdGlvczogXCIgKyBKU09OLnN0cmluZ2lmeSh1bml0UmF0aW9zKSwgZWxlbWVudCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdW5pdFJhdGlvcztcclxuXHRcdFx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0XHQgVW5pdCBDb252ZXJzaW9uXHJcblx0XHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBUaGUgKiBhbmQgLyBvcGVyYXRvcnMsIHdoaWNoIGFyZSBub3QgcGFzc2VkIGluIHdpdGggYW4gYXNzb2NpYXRlZCB1bml0LCBpbmhlcmVudGx5IHVzZSBzdGFydFZhbHVlJ3MgdW5pdC4gU2tpcCB2YWx1ZSBhbmQgdW5pdCBjb252ZXJzaW9uLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmICgvW1xcLypdLy50ZXN0KG9wZXJhdG9yKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWVVbml0VHlwZSA9IHN0YXJ0VmFsdWVVbml0VHlwZTtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIElmIHN0YXJ0VmFsdWUgYW5kIGVuZFZhbHVlIGRpZmZlciBpbiB1bml0IHR5cGUsIGNvbnZlcnQgc3RhcnRWYWx1ZSBpbnRvIHRoZSBzYW1lIHVuaXQgdHlwZSBhcyBlbmRWYWx1ZSBzbyB0aGF0IGlmIGVuZFZhbHVlVW5pdFR5cGVcclxuXHRcdFx0XHRcdFx0XHRcdCBpcyBhIHJlbGF0aXZlIHVuaXQgKCUsIGVtLCByZW0pLCB0aGUgdmFsdWVzIHNldCBkdXJpbmcgdHdlZW5pbmcgd2lsbCBjb250aW51ZSB0byBiZSBhY2N1cmF0ZWx5IHJlbGF0aXZlIGV2ZW4gaWYgdGhlIG1ldHJpY3MgdGhleSBkZXBlbmRcclxuXHRcdFx0XHRcdFx0XHRcdCBvbiBhcmUgZHluYW1pY2FsbHkgY2hhbmdpbmcgZHVyaW5nIHRoZSBjb3Vyc2Ugb2YgdGhlIGFuaW1hdGlvbi4gQ29udmVyc2VseSwgaWYgd2UgYWx3YXlzIG5vcm1hbGl6ZWQgaW50byBweCBhbmQgdXNlZCBweCBmb3Igc2V0dGluZyB2YWx1ZXMsIHRoZSBweCByYXRpb1xyXG5cdFx0XHRcdFx0XHRcdFx0IHdvdWxkIGJlY29tZSBzdGFsZSBpZiB0aGUgb3JpZ2luYWwgdW5pdCBiZWluZyBhbmltYXRlZCB0b3dhcmQgd2FzIHJlbGF0aXZlIGFuZCB0aGUgdW5kZXJseWluZyBtZXRyaWNzIGNoYW5nZSBkdXJpbmcgdGhlIGFuaW1hdGlvbi4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdC8qIFNpbmNlIDAgaXMgMCBpbiBhbnkgdW5pdCB0eXBlLCBubyBjb252ZXJzaW9uIGlzIG5lY2Vzc2FyeSB3aGVuIHN0YXJ0VmFsdWUgaXMgMCAtLSB3ZSBqdXN0IHN0YXJ0IGF0IDAgd2l0aCBlbmRWYWx1ZVVuaXRUeXBlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoKHN0YXJ0VmFsdWVVbml0VHlwZSAhPT0gZW5kVmFsdWVVbml0VHlwZSkgJiYgc3RhcnRWYWx1ZSAhPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogVW5pdCBjb252ZXJzaW9uIGlzIGFsc28gc2tpcHBlZCB3aGVuIGVuZFZhbHVlIGlzIDAsIGJ1dCAqc3RhcnRWYWx1ZVVuaXRUeXBlKiBtdXN0IGJlIHVzZWQgZm9yIHR3ZWVuIHZhbHVlcyB0byByZW1haW4gYWNjdXJhdGUuICovXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBOb3RlOiBTa2lwcGluZyB1bml0IGNvbnZlcnNpb24gaGVyZSBtZWFucyB0aGF0IGlmIGVuZFZhbHVlVW5pdFR5cGUgd2FzIG9yaWdpbmFsbHkgYSByZWxhdGl2ZSB1bml0LCB0aGUgYW5pbWF0aW9uIHdvbid0IHJlbGF0aXZlbHlcclxuXHRcdFx0XHRcdFx0XHRcdCBtYXRjaCB0aGUgdW5kZXJseWluZyBtZXRyaWNzIGlmIHRoZXkgY2hhbmdlLCBidXQgdGhpcyBpcyBhY2NlcHRhYmxlIHNpbmNlIHdlJ3JlIGFuaW1hdGluZyB0b3dhcmQgaW52aXNpYmlsaXR5IGluc3RlYWQgb2YgdG93YXJkIHZpc2liaWxpdHksXHJcblx0XHRcdFx0XHRcdFx0XHQgd2hpY2ggcmVtYWlucyBwYXN0IHRoZSBwb2ludCBvZiB0aGUgYW5pbWF0aW9uJ3MgY29tcGxldGlvbi4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChlbmRWYWx1ZSA9PT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZVVuaXRUeXBlID0gc3RhcnRWYWx1ZVVuaXRUeXBlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogQnkgdGhpcyBwb2ludCwgd2UgY2Fubm90IGF2b2lkIHVuaXQgY29udmVyc2lvbiAoaXQncyB1bmRlc2lyYWJsZSBzaW5jZSBpdCBjYXVzZXMgbGF5b3V0IHRocmFzaGluZykuXHJcblx0XHRcdFx0XHRcdFx0XHRcdCBJZiB3ZSBoYXZlbid0IGFscmVhZHksIHdlIHRyaWdnZXIgY2FsY3VsYXRlVW5pdFJhdGlvcygpLCB3aGljaCBydW5zIG9uY2UgcGVyIGVsZW1lbnQgcGVyIGNhbGwuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGVsZW1lbnRVbml0Q29udmVyc2lvbkRhdGEgPSBlbGVtZW50VW5pdENvbnZlcnNpb25EYXRhIHx8IGNhbGN1bGF0ZVVuaXRSYXRpb3MoKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIFRoZSBmb2xsb3dpbmcgUmVnRXggbWF0Y2hlcyBDU1MgcHJvcGVydGllcyB0aGF0IGhhdmUgdGhlaXIgJSB2YWx1ZXMgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIHgtYXhpcy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogTm90ZTogVzNDIHNwZWMgbWFuZGF0ZXMgdGhhdCBhbGwgb2YgbWFyZ2luIGFuZCBwYWRkaW5nJ3MgcHJvcGVydGllcyAoZXZlbiB0b3AgYW5kIGJvdHRvbSkgYXJlICUtcmVsYXRpdmUgdG8gdGhlICp3aWR0aCogb2YgdGhlIHBhcmVudCBlbGVtZW50LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXhpcyA9ICgvbWFyZ2lufHBhZGRpbmd8bGVmdHxyaWdodHx3aWR0aHx0ZXh0fHdvcmR8bGV0dGVyL2kudGVzdChwcm9wZXJ0eSkgfHwgL1gkLy50ZXN0KHByb3BlcnR5KSB8fCBwcm9wZXJ0eSA9PT0gXCJ4XCIpID8gXCJ4XCIgOiBcInlcIjtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIEluIG9yZGVyIHRvIGF2b2lkIGdlbmVyYXRpbmcgbl4yIGJlc3Bva2UgY29udmVyc2lvbiBmdW5jdGlvbnMsIHVuaXQgY29udmVyc2lvbiBpcyBhIHR3by1zdGVwIHByb2Nlc3M6XHJcblx0XHRcdFx0XHRcdFx0XHRcdCAxKSBDb252ZXJ0IHN0YXJ0VmFsdWUgaW50byBwaXhlbHMuIDIpIENvbnZlcnQgdGhpcyBuZXcgcGl4ZWwgdmFsdWUgaW50byBlbmRWYWx1ZSdzIHVuaXQgdHlwZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0c3dpdGNoIChzdGFydFZhbHVlVW5pdFR5cGUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiJVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogTm90ZTogdHJhbnNsYXRlWCBhbmQgdHJhbnNsYXRlWSBhcmUgdGhlIG9ubHkgcHJvcGVydGllcyB0aGF0IGFyZSAlLXJlbGF0aXZlIHRvIGFuIGVsZW1lbnQncyBvd24gZGltZW5zaW9ucyAtLSBub3QgaXRzIHBhcmVudCdzIGRpbWVuc2lvbnMuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgVmVsb2NpdHkgZG9lcyBub3QgaW5jbHVkZSBhIHNwZWNpYWwgY29udmVyc2lvbiBwcm9jZXNzIHRvIGFjY291bnQgZm9yIHRoaXMgYmVoYXZpb3IuIFRoZXJlZm9yZSwgYW5pbWF0aW5nIHRyYW5zbGF0ZVgvWSBmcm9tIGEgJSB2YWx1ZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0IHRvIGEgbm9uLSUgdmFsdWUgd2lsbCBwcm9kdWNlIGFuIGluY29ycmVjdCBzdGFydCB2YWx1ZS4gRm9ydHVuYXRlbHksIHRoaXMgc29ydCBvZiBjcm9zcy11bml0IGNvbnZlcnNpb24gaXMgcmFyZWx5IGRvbmUgYnkgdXNlcnMgaW4gcHJhY3RpY2UuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlICo9IChheGlzID09PSBcInhcIiA/IGVsZW1lbnRVbml0Q29udmVyc2lvbkRhdGEucGVyY2VudFRvUHhXaWR0aCA6IGVsZW1lbnRVbml0Q29udmVyc2lvbkRhdGEucGVyY2VudFRvUHhIZWlnaHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJweFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogcHggYWN0cyBhcyBvdXIgbWlkcG9pbnQgaW4gdGhlIHVuaXQgY29udmVyc2lvbiBwcm9jZXNzOyBkbyBub3RoaW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlICo9IGVsZW1lbnRVbml0Q29udmVyc2lvbkRhdGFbc3RhcnRWYWx1ZVVuaXRUeXBlICsgXCJUb1B4XCJdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBJbnZlcnQgdGhlIHB4IHJhdGlvcyB0byBjb252ZXJ0IGludG8gdG8gdGhlIHRhcmdldCB1bml0LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGVuZFZhbHVlVW5pdFR5cGUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiJVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSAqPSAxIC8gKGF4aXMgPT09IFwieFwiID8gZWxlbWVudFVuaXRDb252ZXJzaW9uRGF0YS5wZXJjZW50VG9QeFdpZHRoIDogZWxlbWVudFVuaXRDb252ZXJzaW9uRGF0YS5wZXJjZW50VG9QeEhlaWdodCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcInB4XCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBzdGFydFZhbHVlIGlzIGFscmVhZHkgaW4gcHgsIGRvIG5vdGhpbmc7IHdlJ3JlIGRvbmUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWUgKj0gMSAvIGVsZW1lbnRVbml0Q29udmVyc2lvbkRhdGFbZW5kVmFsdWVVbml0VHlwZSArIFwiVG9QeFwiXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdCBSZWxhdGl2ZSBWYWx1ZXNcclxuXHRcdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBPcGVyYXRvciBsb2dpYyBtdXN0IGJlIHBlcmZvcm1lZCBsYXN0IHNpbmNlIGl0IHJlcXVpcmVzIHVuaXQtbm9ybWFsaXplZCBzdGFydCBhbmQgZW5kIHZhbHVlcy4gKi9cclxuXHRcdFx0XHRcdFx0XHQvKiBOb3RlOiBSZWxhdGl2ZSAqcGVyY2VudCB2YWx1ZXMqIGRvIG5vdCBiZWhhdmUgaG93IG1vc3QgcGVvcGxlIHRoaW5rOyB3aGlsZSBvbmUgd291bGQgZXhwZWN0IFwiKz01MCVcIlxyXG5cdFx0XHRcdFx0XHRcdCB0byBpbmNyZWFzZSB0aGUgcHJvcGVydHkgMS41eCBpdHMgY3VycmVudCB2YWx1ZSwgaXQgaW4gZmFjdCBpbmNyZWFzZXMgdGhlIHBlcmNlbnQgdW5pdHMgaW4gYWJzb2x1dGUgdGVybXM6XHJcblx0XHRcdFx0XHRcdFx0IDUwIHBvaW50cyBpcyBhZGRlZCBvbiB0b3Agb2YgdGhlIGN1cnJlbnQgJSB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKG9wZXJhdG9yKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiK1wiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZSA9IHN0YXJ0VmFsdWUgKyBlbmRWYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIi1cIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWUgPSBzdGFydFZhbHVlIC0gZW5kVmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCIqXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlID0gc3RhcnRWYWx1ZSAqIGVuZFZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiL1wiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZSA9IHN0YXJ0VmFsdWUgLyBlbmRWYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0XHQgdHdlZW5zQ29udGFpbmVyIFB1c2hcclxuXHRcdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIENvbnN0cnVjdCB0aGUgcGVyLXByb3BlcnR5IHR3ZWVuIG9iamVjdCwgYW5kIHB1c2ggaXQgdG8gdGhlIGVsZW1lbnQncyB0d2VlbnNDb250YWluZXIuICovXHJcblx0XHRcdFx0XHRcdFx0dHdlZW5zQ29udGFpbmVyW3Byb3BlcnR5XSA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlOiByb290UHJvcGVydHlWYWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWU6IHN0YXJ0VmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VmFsdWU6IHN0YXJ0VmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZTogZW5kVmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0XHR1bml0VHlwZTogZW5kVmFsdWVVbml0VHlwZSxcclxuXHRcdFx0XHRcdFx0XHRcdGVhc2luZzogZWFzaW5nXHJcblx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0XHRpZiAocGF0dGVybikge1xyXG5cdFx0XHRcdFx0XHRcdFx0dHdlZW5zQ29udGFpbmVyW3Byb3BlcnR5XS5wYXR0ZXJuID0gcGF0dGVybjtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmIChWZWxvY2l0eS5kZWJ1Zykge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXCJ0d2VlbnNDb250YWluZXIgKFwiICsgcHJvcGVydHkgKyBcIik6IFwiICsgSlNPTi5zdHJpbmdpZnkodHdlZW5zQ29udGFpbmVyW3Byb3BlcnR5XSksIGVsZW1lbnQpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIENyZWF0ZSBhIHR3ZWVuIG91dCBvZiBlYWNoIHByb3BlcnR5LCBhbmQgYXBwZW5kIGl0cyBhc3NvY2lhdGVkIGRhdGEgdG8gdHdlZW5zQ29udGFpbmVyLiAqL1xyXG5cdFx0XHRcdFx0XHRmb3IgKHZhciBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzTWFwKSB7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmICghcHJvcGVydGllc01hcC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHQvKiBUaGUgb3JpZ2luYWwgcHJvcGVydHkgbmFtZSdzIGZvcm1hdCBtdXN0IGJlIHVzZWQgZm9yIHRoZSBwYXJzZVByb3BlcnR5VmFsdWUoKSBsb29rdXAsXHJcblx0XHRcdFx0XHRcdFx0IGJ1dCB3ZSB0aGVuIHVzZSBpdHMgY2FtZWxDYXNlIHN0eWxpbmcgdG8gbm9ybWFsaXplIGl0IGZvciBtYW5pcHVsYXRpb24uICovXHJcblx0XHRcdFx0XHRcdFx0dmFyIHByb3BlcnR5TmFtZSA9IENTUy5OYW1lcy5jYW1lbENhc2UocHJvcGVydHkpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZURhdGEgPSBwYXJzZVByb3BlcnR5VmFsdWUocHJvcGVydGllc01hcFtwcm9wZXJ0eV0pO1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBGaW5kIHNob3J0aGFuZCBjb2xvciBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBiZWVuIHBhc3NlZCBhIGhleCBzdHJpbmcuICovXHJcblx0XHRcdFx0XHRcdFx0LyogV291bGQgYmUgcXVpY2tlciB0byB1c2UgQ1NTLkxpc3RzLmNvbG9ycy5pbmNsdWRlcygpIGlmIHBvc3NpYmxlICovXHJcblx0XHRcdFx0XHRcdFx0aWYgKF9pbkFycmF5KENTUy5MaXN0cy5jb2xvcnMsIHByb3BlcnR5TmFtZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIFBhcnNlIHRoZSB2YWx1ZSBkYXRhIGZvciBlYWNoIHNob3J0aGFuZC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdHZhciBlbmRWYWx1ZSA9IHZhbHVlRGF0YVswXSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlYXNpbmcgPSB2YWx1ZURhdGFbMV0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSA9IHZhbHVlRGF0YVsyXTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoQ1NTLlJlZ0V4LmlzSGV4LnRlc3QoZW5kVmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIENvbnZlcnQgdGhlIGhleCBzdHJpbmdzIGludG8gdGhlaXIgUkdCIGNvbXBvbmVudCBhcnJheXMuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBjb2xvckNvbXBvbmVudHMgPSBbXCJSZWRcIiwgXCJHcmVlblwiLCBcIkJsdWVcIl0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZVJHQiA9IENTUy5WYWx1ZXMuaGV4VG9SZ2IoZW5kVmFsdWUpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZVJHQiA9IHN0YXJ0VmFsdWUgPyBDU1MuVmFsdWVzLmhleFRvUmdiKHN0YXJ0VmFsdWUpIDogdW5kZWZpbmVkO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogSW5qZWN0IHRoZSBSR0IgY29tcG9uZW50IHR3ZWVucyBpbnRvIHByb3BlcnRpZXNNYXAuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY29sb3JDb21wb25lbnRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRhdGFBcnJheSA9IFtlbmRWYWx1ZVJHQltpXV07XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChlYXNpbmcpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFBcnJheS5wdXNoKGVhc2luZyk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoc3RhcnRWYWx1ZVJHQiAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhQXJyYXkucHVzaChzdGFydFZhbHVlUkdCW2ldKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpeFByb3BlcnR5VmFsdWUocHJvcGVydHlOYW1lICsgY29sb3JDb21wb25lbnRzW2ldLCBkYXRhQXJyYXkpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIElmIHdlIGhhdmUgcmVwbGFjZWQgYSBzaG9ydGN1dCBjb2xvciB2YWx1ZSB0aGVuIGRvbid0IHVwZGF0ZSB0aGUgc3RhbmRhcmQgcHJvcGVydHkgbmFtZSAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0Zml4UHJvcGVydHlWYWx1ZShwcm9wZXJ0eU5hbWUsIHZhbHVlRGF0YSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIEFsb25nIHdpdGggaXRzIHByb3BlcnR5IGRhdGEsIHN0b3JlIGEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGl0c2VsZiBvbnRvIHR3ZWVuc0NvbnRhaW5lci4gKi9cclxuXHRcdFx0XHRcdFx0dHdlZW5zQ29udGFpbmVyLmVsZW1lbnQgPSBlbGVtZW50O1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0IENhbGwgUHVzaFxyXG5cdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdC8qIE5vdGU6IHR3ZWVuc0NvbnRhaW5lciBjYW4gYmUgZW1wdHkgaWYgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIGluIHRoaXMgY2FsbCdzIHByb3BlcnR5IG1hcCB3ZXJlIHNraXBwZWQgZHVlIHRvIG5vdFxyXG5cdFx0XHRcdFx0IGJlaW5nIHN1cHBvcnRlZCBieSB0aGUgYnJvd3Nlci4gVGhlIGVsZW1lbnQgcHJvcGVydHkgaXMgdXNlZCBmb3IgY2hlY2tpbmcgdGhhdCB0aGUgdHdlZW5zQ29udGFpbmVyIGhhcyBiZWVuIGFwcGVuZGVkIHRvLiAqL1xyXG5cdFx0XHRcdFx0aWYgKHR3ZWVuc0NvbnRhaW5lci5lbGVtZW50KSB7XHJcblx0XHRcdFx0XHRcdC8qIEFwcGx5IHRoZSBcInZlbG9jaXR5LWFuaW1hdGluZ1wiIGluZGljYXRvciBjbGFzcy4gKi9cclxuXHRcdFx0XHRcdFx0Q1NTLlZhbHVlcy5hZGRDbGFzcyhlbGVtZW50LCBcInZlbG9jaXR5LWFuaW1hdGluZ1wiKTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIFRoZSBjYWxsIGFycmF5IGhvdXNlcyB0aGUgdHdlZW5zQ29udGFpbmVycyBmb3IgZWFjaCBlbGVtZW50IGJlaW5nIGFuaW1hdGVkIGluIHRoZSBjdXJyZW50IGNhbGwuICovXHJcblx0XHRcdFx0XHRcdGNhbGwucHVzaCh0d2VlbnNDb250YWluZXIpO1xyXG5cclxuXHRcdFx0XHRcdFx0ZGF0YSA9IERhdGEoZWxlbWVudCk7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoZGF0YSkge1xyXG5cdFx0XHRcdFx0XHRcdC8qIFN0b3JlIHRoZSB0d2VlbnNDb250YWluZXIgYW5kIG9wdGlvbnMgaWYgd2UncmUgd29ya2luZyBvbiB0aGUgZGVmYXVsdCBlZmZlY3RzIHF1ZXVlLCBzbyB0aGF0IHRoZXkgY2FuIGJlIHVzZWQgYnkgdGhlIHJldmVyc2UgY29tbWFuZC4gKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAob3B0cy5xdWV1ZSA9PT0gXCJcIikge1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdGRhdGEudHdlZW5zQ29udGFpbmVyID0gdHdlZW5zQ29udGFpbmVyO1xyXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS5vcHRzID0gb3B0cztcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIFN3aXRjaCBvbiB0aGUgZWxlbWVudCdzIGFuaW1hdGluZyBmbGFnLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGRhdGEuaXNBbmltYXRpbmcgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBPbmNlIHRoZSBmaW5hbCBlbGVtZW50IGluIHRoaXMgY2FsbCdzIGVsZW1lbnQgc2V0IGhhcyBiZWVuIHByb2Nlc3NlZCwgcHVzaCB0aGUgY2FsbCBhcnJheSBvbnRvXHJcblx0XHRcdFx0XHRcdCBWZWxvY2l0eS5TdGF0ZS5jYWxscyBmb3IgdGhlIGFuaW1hdGlvbiB0aWNrIHRvIGltbWVkaWF0ZWx5IGJlZ2luIHByb2Nlc3NpbmcuICovXHJcblx0XHRcdFx0XHRcdGlmIChlbGVtZW50c0luZGV4ID09PSBlbGVtZW50c0xlbmd0aCAtIDEpIHtcclxuXHRcdFx0XHRcdFx0XHQvKiBBZGQgdGhlIGN1cnJlbnQgY2FsbCBwbHVzIGl0cyBhc3NvY2lhdGVkIG1ldGFkYXRhICh0aGUgZWxlbWVudCBzZXQgYW5kIHRoZSBjYWxsJ3Mgb3B0aW9ucykgb250byB0aGUgZ2xvYmFsIGNhbGwgY29udGFpbmVyLlxyXG5cdFx0XHRcdFx0XHRcdCBBbnl0aGluZyBvbiB0aGlzIGNhbGwgY29udGFpbmVyIGlzIHN1YmplY3RlZCB0byB0aWNrKCkgcHJvY2Vzc2luZy4gKi9cclxuXHRcdFx0XHRcdFx0XHRWZWxvY2l0eS5TdGF0ZS5jYWxscy5wdXNoKFtjYWxsLCBlbGVtZW50cywgb3B0cywgbnVsbCwgcHJvbWlzZURhdGEucmVzb2x2ZXIsIG51bGwsIDBdKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0LyogSWYgdGhlIGFuaW1hdGlvbiB0aWNrIGlzbid0IHJ1bm5pbmcsIHN0YXJ0IGl0LiAoVmVsb2NpdHkgc2h1dHMgaXQgb2ZmIHdoZW4gdGhlcmUgYXJlIG5vIGFjdGl2ZSBjYWxscyB0byBwcm9jZXNzLikgKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAoVmVsb2NpdHkuU3RhdGUuaXNUaWNraW5nID09PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0VmVsb2NpdHkuU3RhdGUuaXNUaWNraW5nID0gdHJ1ZTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBTdGFydCB0aGUgdGljayBsb29wLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0dGljaygpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRlbGVtZW50c0luZGV4Kys7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qIFdoZW4gdGhlIHF1ZXVlIG9wdGlvbiBpcyBzZXQgdG8gZmFsc2UsIHRoZSBjYWxsIHNraXBzIHRoZSBlbGVtZW50J3MgcXVldWUgYW5kIGZpcmVzIGltbWVkaWF0ZWx5LiAqL1xyXG5cdFx0XHRcdGlmIChvcHRzLnF1ZXVlID09PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0LyogU2luY2UgdGhpcyBidWlsZFF1ZXVlIGNhbGwgZG9lc24ndCByZXNwZWN0IHRoZSBlbGVtZW50J3MgZXhpc3RpbmcgcXVldWUgKHdoaWNoIGlzIHdoZXJlIGEgZGVsYXkgb3B0aW9uIHdvdWxkIGhhdmUgYmVlbiBhcHBlbmRlZCksXHJcblx0XHRcdFx0XHQgd2UgbWFudWFsbHkgaW5qZWN0IHRoZSBkZWxheSBwcm9wZXJ0eSBoZXJlIHdpdGggYW4gZXhwbGljaXQgc2V0VGltZW91dC4gKi9cclxuXHRcdFx0XHRcdGlmIChvcHRzLmRlbGF5KSB7XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBUZW1wb3JhcmlseSBzdG9yZSBkZWxheWVkIGVsZW1lbnRzIHRvIGZhY2lsaXRhdGUgYWNjZXNzIGZvciBnbG9iYWwgcGF1c2UvcmVzdW1lICovXHJcblx0XHRcdFx0XHRcdHZhciBjYWxsSW5kZXggPSBWZWxvY2l0eS5TdGF0ZS5kZWxheWVkRWxlbWVudHMuY291bnQrKztcclxuXHRcdFx0XHRcdFx0VmVsb2NpdHkuU3RhdGUuZGVsYXllZEVsZW1lbnRzW2NhbGxJbmRleF0gPSBlbGVtZW50O1xyXG5cclxuXHRcdFx0XHRcdFx0dmFyIGRlbGF5Q29tcGxldGUgPSAoZnVuY3Rpb24oaW5kZXgpIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBDbGVhciB0aGUgdGVtcG9yYXJ5IGVsZW1lbnQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdFZlbG9jaXR5LlN0YXRlLmRlbGF5ZWRFbGVtZW50c1tpbmRleF0gPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBGaW5hbGx5LCBpc3N1ZSB0aGUgY2FsbCAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0YnVpbGRRdWV1ZSgpO1xyXG5cdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdH0pKGNhbGxJbmRleCk7XHJcblxyXG5cdFx0XHRcdFx0XHREYXRhKGVsZW1lbnQpLmRlbGF5QmVnaW4gPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xyXG5cdFx0XHRcdFx0XHREYXRhKGVsZW1lbnQpLmRlbGF5ID0gcGFyc2VGbG9hdChvcHRzLmRlbGF5KTtcclxuXHRcdFx0XHRcdFx0RGF0YShlbGVtZW50KS5kZWxheVRpbWVyID0ge1xyXG5cdFx0XHRcdFx0XHRcdHNldFRpbWVvdXQ6IHNldFRpbWVvdXQoYnVpbGRRdWV1ZSwgcGFyc2VGbG9hdChvcHRzLmRlbGF5KSksXHJcblx0XHRcdFx0XHRcdFx0bmV4dDogZGVsYXlDb21wbGV0ZVxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0YnVpbGRRdWV1ZSgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0LyogT3RoZXJ3aXNlLCB0aGUgY2FsbCB1bmRlcmdvZXMgZWxlbWVudCBxdWV1ZWluZyBhcyBub3JtYWwuICovXHJcblx0XHRcdFx0XHQvKiBOb3RlOiBUbyBpbnRlcm9wZXJhdGUgd2l0aCBqUXVlcnksIFZlbG9jaXR5IHVzZXMgalF1ZXJ5J3Mgb3duICQucXVldWUoKSBzdGFjayBmb3IgcXVldWluZyBsb2dpYy4gKi9cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0JC5xdWV1ZShlbGVtZW50LCBvcHRzLnF1ZXVlLCBmdW5jdGlvbihuZXh0LCBjbGVhclF1ZXVlKSB7XHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZSBjbGVhclF1ZXVlIGZsYWcgd2FzIHBhc3NlZCBpbiBieSB0aGUgc3RvcCBjb21tYW5kLCByZXNvbHZlIHRoaXMgY2FsbCdzIHByb21pc2UuIChQcm9taXNlcyBjYW4gb25seSBiZSByZXNvbHZlZCBvbmNlLFxyXG5cdFx0XHRcdFx0XHQgc28gaXQncyBmaW5lIGlmIHRoaXMgaXMgcmVwZWF0ZWRseSB0cmlnZ2VyZWQgZm9yIGVhY2ggZWxlbWVudCBpbiB0aGUgYXNzb2NpYXRlZCBjYWxsLikgKi9cclxuXHRcdFx0XHRcdFx0aWYgKGNsZWFyUXVldWUgPT09IHRydWUpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAocHJvbWlzZURhdGEucHJvbWlzZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0cHJvbWlzZURhdGEucmVzb2x2ZXIoZWxlbWVudHMpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0LyogRG8gbm90IGNvbnRpbnVlIHdpdGggYW5pbWF0aW9uIHF1ZXVlaW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBUaGlzIGZsYWcgaW5kaWNhdGVzIHRvIHRoZSB1cGNvbWluZyBjb21wbGV0ZUNhbGwoKSBmdW5jdGlvbiB0aGF0IHRoaXMgcXVldWUgZW50cnkgd2FzIGluaXRpYXRlZCBieSBWZWxvY2l0eS5cclxuXHRcdFx0XHRcdFx0IFNlZSBjb21wbGV0ZUNhbGwoKSBmb3IgZnVydGhlciBkZXRhaWxzLiAqL1xyXG5cdFx0XHRcdFx0XHRWZWxvY2l0eS52ZWxvY2l0eVF1ZXVlRW50cnlGbGFnID0gdHJ1ZTtcclxuXHJcblx0XHRcdFx0XHRcdGJ1aWxkUXVldWUobmV4dCk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgQXV0by1EZXF1ZXVpbmdcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKiBBcyBwZXIgalF1ZXJ5J3MgJC5xdWV1ZSgpIGJlaGF2aW9yLCB0byBmaXJlIHRoZSBmaXJzdCBub24tY3VzdG9tLXF1ZXVlIGVudHJ5IG9uIGFuIGVsZW1lbnQsIHRoZSBlbGVtZW50XHJcblx0XHRcdFx0IG11c3QgYmUgZGVxdWV1ZWQgaWYgaXRzIHF1ZXVlIHN0YWNrIGNvbnNpc3RzICpzb2xlbHkqIG9mIHRoZSBjdXJyZW50IGNhbGwuIChUaGlzIGNhbiBiZSBkZXRlcm1pbmVkIGJ5IGNoZWNraW5nXHJcblx0XHRcdFx0IGZvciB0aGUgXCJpbnByb2dyZXNzXCIgaXRlbSB0aGF0IGpRdWVyeSBwcmVwZW5kcyB0byBhY3RpdmUgcXVldWUgc3RhY2sgYXJyYXlzLikgUmVnYXJkbGVzcywgd2hlbmV2ZXIgdGhlIGVsZW1lbnQnc1xyXG5cdFx0XHRcdCBxdWV1ZSBpcyBmdXJ0aGVyIGFwcGVuZGVkIHdpdGggYWRkaXRpb25hbCBpdGVtcyAtLSBpbmNsdWRpbmcgJC5kZWxheSgpJ3Mgb3IgZXZlbiAkLmFuaW1hdGUoKSBjYWxscywgdGhlIHF1ZXVlJ3NcclxuXHRcdFx0XHQgZmlyc3QgZW50cnkgaXMgYXV0b21hdGljYWxseSBmaXJlZC4gVGhpcyBiZWhhdmlvciBjb250cmFzdHMgdGhhdCBvZiBjdXN0b20gcXVldWVzLCB3aGljaCBuZXZlciBhdXRvLWZpcmUuICovXHJcblx0XHRcdFx0LyogTm90ZTogV2hlbiBhbiBlbGVtZW50IHNldCBpcyBiZWluZyBzdWJqZWN0ZWQgdG8gYSBub24tcGFyYWxsZWwgVmVsb2NpdHkgY2FsbCwgdGhlIGFuaW1hdGlvbiB3aWxsIG5vdCBiZWdpbiB1bnRpbFxyXG5cdFx0XHRcdCBlYWNoIG9uZSBvZiB0aGUgZWxlbWVudHMgaW4gdGhlIHNldCBoYXMgcmVhY2hlZCB0aGUgZW5kIG9mIGl0cyBpbmRpdmlkdWFsbHkgcHJlLWV4aXN0aW5nIHF1ZXVlIGNoYWluLiAqL1xyXG5cdFx0XHRcdC8qIE5vdGU6IFVuZm9ydHVuYXRlbHksIG1vc3QgcGVvcGxlIGRvbid0IGZ1bGx5IGdyYXNwIGpRdWVyeSdzIHBvd2VyZnVsLCB5ZXQgcXVpcmt5LCAkLnF1ZXVlKCkgZnVuY3Rpb24uXHJcblx0XHRcdFx0IExlYW4gbW9yZSBoZXJlOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNTgxNTgvY2FuLXNvbWVib2R5LWV4cGxhaW4tanF1ZXJ5LXF1ZXVlLXRvLW1lICovXHJcblx0XHRcdFx0aWYgKChvcHRzLnF1ZXVlID09PSBcIlwiIHx8IG9wdHMucXVldWUgPT09IFwiZnhcIikgJiYgJC5xdWV1ZShlbGVtZW50KVswXSAhPT0gXCJpbnByb2dyZXNzXCIpIHtcclxuXHRcdFx0XHRcdCQuZGVxdWV1ZShlbGVtZW50KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgRWxlbWVudCBTZXQgSXRlcmF0aW9uXHJcblx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdC8qIElmIHRoZSBcIm5vZGVUeXBlXCIgcHJvcGVydHkgZXhpc3RzIG9uIHRoZSBlbGVtZW50cyB2YXJpYWJsZSwgd2UncmUgYW5pbWF0aW5nIGEgc2luZ2xlIGVsZW1lbnQuXHJcblx0XHRcdCBQbGFjZSBpdCBpbiBhbiBhcnJheSBzbyB0aGF0ICQuZWFjaCgpIGNhbiBpdGVyYXRlIG92ZXIgaXQuICovXHJcblx0XHRcdCQuZWFjaChlbGVtZW50cywgZnVuY3Rpb24oaSwgZWxlbWVudCkge1xyXG5cdFx0XHRcdC8qIEVuc3VyZSBlYWNoIGVsZW1lbnQgaW4gYSBzZXQgaGFzIGEgbm9kZVR5cGUgKGlzIGEgcmVhbCBlbGVtZW50KSB0byBhdm9pZCB0aHJvd2luZyBlcnJvcnMuICovXHJcblx0XHRcdFx0aWYgKFR5cGUuaXNOb2RlKGVsZW1lbnQpKSB7XHJcblx0XHRcdFx0XHRwcm9jZXNzRWxlbWVudChlbGVtZW50LCBpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgT3B0aW9uOiBMb29wXHJcblx0XHRcdCAqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHQvKiBUaGUgbG9vcCBvcHRpb24gYWNjZXB0cyBhbiBpbnRlZ2VyIGluZGljYXRpbmcgaG93IG1hbnkgdGltZXMgdGhlIGVsZW1lbnQgc2hvdWxkIGxvb3AgYmV0d2VlbiB0aGUgdmFsdWVzIGluIHRoZVxyXG5cdFx0XHQgY3VycmVudCBjYWxsJ3MgcHJvcGVydGllcyBtYXAgYW5kIHRoZSBlbGVtZW50J3MgcHJvcGVydHkgdmFsdWVzIHByaW9yIHRvIHRoaXMgY2FsbC4gKi9cclxuXHRcdFx0LyogTm90ZTogVGhlIGxvb3Agb3B0aW9uJ3MgbG9naWMgaXMgcGVyZm9ybWVkIGhlcmUgLS0gYWZ0ZXIgZWxlbWVudCBwcm9jZXNzaW5nIC0tIGJlY2F1c2UgdGhlIGN1cnJlbnQgY2FsbCBuZWVkc1xyXG5cdFx0XHQgdG8gdW5kZXJnbyBpdHMgcXVldWUgaW5zZXJ0aW9uIHByaW9yIHRvIHRoZSBsb29wIG9wdGlvbiBnZW5lcmF0aW5nIGl0cyBzZXJpZXMgb2YgY29uc3RpdHVlbnQgXCJyZXZlcnNlXCIgY2FsbHMsXHJcblx0XHRcdCB3aGljaCBjaGFpbiBhZnRlciB0aGUgY3VycmVudCBjYWxsLiBUd28gcmV2ZXJzZSBjYWxscyAodHdvIFwiYWx0ZXJuYXRpb25zXCIpIGNvbnN0aXR1dGUgb25lIGxvb3AuICovXHJcblx0XHRcdG9wdHMgPSAkLmV4dGVuZCh7fSwgVmVsb2NpdHkuZGVmYXVsdHMsIG9wdGlvbnMpO1xyXG5cdFx0XHRvcHRzLmxvb3AgPSBwYXJzZUludChvcHRzLmxvb3AsIDEwKTtcclxuXHRcdFx0dmFyIHJldmVyc2VDYWxsc0NvdW50ID0gKG9wdHMubG9vcCAqIDIpIC0gMTtcclxuXHJcblx0XHRcdGlmIChvcHRzLmxvb3ApIHtcclxuXHRcdFx0XHQvKiBEb3VibGUgdGhlIGxvb3AgY291bnQgdG8gY29udmVydCBpdCBpbnRvIGl0cyBhcHByb3ByaWF0ZSBudW1iZXIgb2YgXCJyZXZlcnNlXCIgY2FsbHMuXHJcblx0XHRcdFx0IFN1YnRyYWN0IDEgZnJvbSB0aGUgcmVzdWx0aW5nIHZhbHVlIHNpbmNlIHRoZSBjdXJyZW50IGNhbGwgaXMgaW5jbHVkZWQgaW4gdGhlIHRvdGFsIGFsdGVybmF0aW9uIGNvdW50LiAqL1xyXG5cdFx0XHRcdGZvciAodmFyIHggPSAwOyB4IDwgcmV2ZXJzZUNhbGxzQ291bnQ7IHgrKykge1xyXG5cdFx0XHRcdFx0LyogU2luY2UgdGhlIGxvZ2ljIGZvciB0aGUgcmV2ZXJzZSBhY3Rpb24gb2NjdXJzIGluc2lkZSBRdWV1ZWluZyBhbmQgdGhlcmVmb3JlIHRoaXMgY2FsbCdzIG9wdGlvbnMgb2JqZWN0XHJcblx0XHRcdFx0XHQgaXNuJ3QgcGFyc2VkIHVudGlsIHRoZW4gYXMgd2VsbCwgdGhlIGN1cnJlbnQgY2FsbCdzIGRlbGF5IG9wdGlvbiBtdXN0IGJlIGV4cGxpY2l0bHkgcGFzc2VkIGludG8gdGhlIHJldmVyc2VcclxuXHRcdFx0XHRcdCBjYWxsIHNvIHRoYXQgdGhlIGRlbGF5IGxvZ2ljIHRoYXQgb2NjdXJzIGluc2lkZSAqUHJlLVF1ZXVlaW5nKiBjYW4gcHJvY2VzcyBpdC4gKi9cclxuXHRcdFx0XHRcdHZhciByZXZlcnNlT3B0aW9ucyA9IHtcclxuXHRcdFx0XHRcdFx0ZGVsYXk6IG9wdHMuZGVsYXksXHJcblx0XHRcdFx0XHRcdHByb2dyZXNzOiBvcHRzLnByb2dyZXNzXHJcblx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdC8qIElmIGEgY29tcGxldGUgY2FsbGJhY2sgd2FzIHBhc3NlZCBpbnRvIHRoaXMgY2FsbCwgdHJhbnNmZXIgaXQgdG8gdGhlIGxvb3AgcmVkaXJlY3QncyBmaW5hbCBcInJldmVyc2VcIiBjYWxsXHJcblx0XHRcdFx0XHQgc28gdGhhdCBpdCdzIHRyaWdnZXJlZCB3aGVuIHRoZSBlbnRpcmUgcmVkaXJlY3QgaXMgY29tcGxldGUgKGFuZCBub3Qgd2hlbiB0aGUgdmVyeSBmaXJzdCBhbmltYXRpb24gaXMgY29tcGxldGUpLiAqL1xyXG5cdFx0XHRcdFx0aWYgKHggPT09IHJldmVyc2VDYWxsc0NvdW50IC0gMSkge1xyXG5cdFx0XHRcdFx0XHRyZXZlcnNlT3B0aW9ucy5kaXNwbGF5ID0gb3B0cy5kaXNwbGF5O1xyXG5cdFx0XHRcdFx0XHRyZXZlcnNlT3B0aW9ucy52aXNpYmlsaXR5ID0gb3B0cy52aXNpYmlsaXR5O1xyXG5cdFx0XHRcdFx0XHRyZXZlcnNlT3B0aW9ucy5jb21wbGV0ZSA9IG9wdHMuY29tcGxldGU7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0YW5pbWF0ZShlbGVtZW50cywgXCJyZXZlcnNlXCIsIHJldmVyc2VPcHRpb25zKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qKioqKioqKioqKioqKipcclxuXHRcdFx0IENoYWluaW5nXHJcblx0XHRcdCAqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHQvKiBSZXR1cm4gdGhlIGVsZW1lbnRzIGJhY2sgdG8gdGhlIGNhbGwgY2hhaW4sIHdpdGggd3JhcHBlZCBlbGVtZW50cyB0YWtpbmcgcHJlY2VkZW5jZSBpbiBjYXNlIFZlbG9jaXR5IHdhcyBjYWxsZWQgdmlhIHRoZSAkLmZuLiBleHRlbnNpb24uICovXHJcblx0XHRcdHJldHVybiBnZXRDaGFpbigpO1xyXG5cdFx0fTtcclxuXHJcblx0XHQvKiBUdXJuIFZlbG9jaXR5IGludG8gdGhlIGFuaW1hdGlvbiBmdW5jdGlvbiwgZXh0ZW5kZWQgd2l0aCB0aGUgcHJlLWV4aXN0aW5nIFZlbG9jaXR5IG9iamVjdC4gKi9cclxuXHRcdFZlbG9jaXR5ID0gJC5leHRlbmQoYW5pbWF0ZSwgVmVsb2NpdHkpO1xyXG5cdFx0LyogRm9yIGxlZ2FjeSBzdXBwb3J0LCBhbHNvIGV4cG9zZSB0aGUgbGl0ZXJhbCBhbmltYXRlIG1ldGhvZC4gKi9cclxuXHRcdFZlbG9jaXR5LmFuaW1hdGUgPSBhbmltYXRlO1xyXG5cclxuXHRcdC8qKioqKioqKioqKioqKlxyXG5cdFx0IFRpbWluZ1xyXG5cdFx0ICoqKioqKioqKioqKioqL1xyXG5cclxuXHRcdC8qIFRpY2tlciBmdW5jdGlvbi4gKi9cclxuXHRcdHZhciB0aWNrZXIgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IHJBRlNoaW07XHJcblxyXG5cdFx0LyogSW5hY3RpdmUgYnJvd3NlciB0YWJzIHBhdXNlIHJBRiwgd2hpY2ggcmVzdWx0cyBpbiBhbGwgYWN0aXZlIGFuaW1hdGlvbnMgaW1tZWRpYXRlbHkgc3ByaW50aW5nIHRvIHRoZWlyIGNvbXBsZXRpb24gc3RhdGVzIHdoZW4gdGhlIHRhYiByZWZvY3VzZXMuXHJcblx0XHQgVG8gZ2V0IGFyb3VuZCB0aGlzLCB3ZSBkeW5hbWljYWxseSBzd2l0Y2ggckFGIHRvIHNldFRpbWVvdXQgKHdoaWNoIHRoZSBicm93c2VyICpkb2Vzbid0KiBwYXVzZSkgd2hlbiB0aGUgdGFiIGxvc2VzIGZvY3VzLiBXZSBza2lwIHRoaXMgZm9yIG1vYmlsZVxyXG5cdFx0IGRldmljZXMgdG8gYXZvaWQgd2FzdGluZyBiYXR0ZXJ5IHBvd2VyIG9uIGluYWN0aXZlIHRhYnMuICovXHJcblx0XHQvKiBOb3RlOiBUYWIgZm9jdXMgZGV0ZWN0aW9uIGRvZXNuJ3Qgd29yayBvbiBvbGRlciB2ZXJzaW9ucyBvZiBJRSwgYnV0IHRoYXQncyBva2F5IHNpbmNlIHRoZXkgZG9uJ3Qgc3VwcG9ydCByQUYgdG8gYmVnaW4gd2l0aC4gKi9cclxuXHRcdGlmICghVmVsb2NpdHkuU3RhdGUuaXNNb2JpbGUgJiYgZG9jdW1lbnQuaGlkZGVuICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0dmFyIHVwZGF0ZVRpY2tlciA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdC8qIFJlYXNzaWduIHRoZSByQUYgZnVuY3Rpb24gKHdoaWNoIHRoZSBnbG9iYWwgdGljaygpIGZ1bmN0aW9uIHVzZXMpIGJhc2VkIG9uIHRoZSB0YWIncyBmb2N1cyBzdGF0ZS4gKi9cclxuXHRcdFx0XHRpZiAoZG9jdW1lbnQuaGlkZGVuKSB7XHJcblx0XHRcdFx0XHR0aWNrZXIgPSBmdW5jdGlvbihjYWxsYmFjaykge1xyXG5cdFx0XHRcdFx0XHQvKiBUaGUgdGljayBmdW5jdGlvbiBuZWVkcyBhIHRydXRoeSBmaXJzdCBhcmd1bWVudCBpbiBvcmRlciB0byBwYXNzIGl0cyBpbnRlcm5hbCB0aW1lc3RhbXAgY2hlY2suICovXHJcblx0XHRcdFx0XHRcdHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHRcdGNhbGxiYWNrKHRydWUpO1xyXG5cdFx0XHRcdFx0XHR9LCAxNik7XHJcblx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdC8qIFRoZSByQUYgbG9vcCBoYXMgYmVlbiBwYXVzZWQgYnkgdGhlIGJyb3dzZXIsIHNvIHdlIG1hbnVhbGx5IHJlc3RhcnQgdGhlIHRpY2suICovXHJcblx0XHRcdFx0XHR0aWNrKCk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHRpY2tlciA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgckFGU2hpbTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHQvKiBQYWdlIGNvdWxkIGJlIHNpdHRpbmcgaW4gdGhlIGJhY2tncm91bmQgYXQgdGhpcyB0aW1lIChpLmUuIG9wZW5lZCBhcyBuZXcgdGFiKSBzbyBtYWtpbmcgc3VyZSB3ZSB1c2UgY29ycmVjdCB0aWNrZXIgZnJvbSB0aGUgc3RhcnQgKi9cclxuXHRcdFx0dXBkYXRlVGlja2VyKCk7XHJcblxyXG5cdFx0XHQvKiBBbmQgdGhlbiBydW4gY2hlY2sgYWdhaW4gZXZlcnkgdGltZSB2aXNpYmlsaXR5IGNoYW5nZXMgKi9cclxuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIiwgdXBkYXRlVGlja2VyKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKioqKioqKioqKioqXHJcblx0XHQgVGlja1xyXG5cdFx0ICoqKioqKioqKioqKi9cclxuXHJcblx0XHQvKiBOb3RlOiBBbGwgY2FsbHMgdG8gVmVsb2NpdHkgYXJlIHB1c2hlZCB0byB0aGUgVmVsb2NpdHkuU3RhdGUuY2FsbHMgYXJyYXksIHdoaWNoIGlzIGZ1bGx5IGl0ZXJhdGVkIHRocm91Z2ggdXBvbiBlYWNoIHRpY2suICovXHJcblx0XHRmdW5jdGlvbiB0aWNrKHRpbWVzdGFtcCkge1xyXG5cdFx0XHQvKiBBbiBlbXB0eSB0aW1lc3RhbXAgYXJndW1lbnQgaW5kaWNhdGVzIHRoYXQgdGhpcyBpcyB0aGUgZmlyc3QgdGljayBvY2N1cmVuY2Ugc2luY2UgdGlja2luZyB3YXMgdHVybmVkIG9uLlxyXG5cdFx0XHQgV2UgbGV2ZXJhZ2UgdGhpcyBtZXRhZGF0YSB0byBmdWxseSBpZ25vcmUgdGhlIGZpcnN0IHRpY2sgcGFzcyBzaW5jZSBSQUYncyBpbml0aWFsIHBhc3MgaXMgZmlyZWQgd2hlbmV2ZXJcclxuXHRcdFx0IHRoZSBicm93c2VyJ3MgbmV4dCB0aWNrIHN5bmMgdGltZSBvY2N1cnMsIHdoaWNoIHJlc3VsdHMgaW4gdGhlIGZpcnN0IGVsZW1lbnRzIHN1YmplY3RlZCB0byBWZWxvY2l0eVxyXG5cdFx0XHQgY2FsbHMgYmVpbmcgYW5pbWF0ZWQgb3V0IG9mIHN5bmMgd2l0aCBhbnkgZWxlbWVudHMgYW5pbWF0ZWQgaW1tZWRpYXRlbHkgdGhlcmVhZnRlci4gSW4gc2hvcnQsIHdlIGlnbm9yZVxyXG5cdFx0XHQgdGhlIGZpcnN0IFJBRiB0aWNrIHBhc3Mgc28gdGhhdCBlbGVtZW50cyBiZWluZyBpbW1lZGlhdGVseSBjb25zZWN1dGl2ZWx5IGFuaW1hdGVkIC0tIGluc3RlYWQgb2Ygc2ltdWx0YW5lb3VzbHkgYW5pbWF0ZWRcclxuXHRcdFx0IGJ5IHRoZSBzYW1lIFZlbG9jaXR5IGNhbGwgLS0gYXJlIHByb3Blcmx5IGJhdGNoZWQgaW50byB0aGUgc2FtZSBpbml0aWFsIFJBRiB0aWNrIGFuZCBjb25zZXF1ZW50bHkgcmVtYWluIGluIHN5bmMgdGhlcmVhZnRlci4gKi9cclxuXHRcdFx0aWYgKHRpbWVzdGFtcCkge1xyXG5cdFx0XHRcdC8qIFdlIG5vcm1hbGx5IHVzZSBSQUYncyBoaWdoIHJlc29sdXRpb24gdGltZXN0YW1wIGJ1dCBhcyBpdCBjYW4gYmUgc2lnbmlmaWNhbnRseSBvZmZzZXQgd2hlbiB0aGUgYnJvd3NlciBpc1xyXG5cdFx0XHRcdCB1bmRlciBoaWdoIHN0cmVzcyB3ZSBnaXZlIHRoZSBvcHRpb24gZm9yIGNob3BwaW5lc3Mgb3ZlciBhbGxvd2luZyB0aGUgYnJvd3NlciB0byBkcm9wIGh1Z2UgY2h1bmtzIG9mIGZyYW1lcy5cclxuXHRcdFx0XHQgV2UgdXNlIHBlcmZvcm1hbmNlLm5vdygpIGFuZCBzaGltIGl0IGlmIGl0IGRvZXNuJ3QgZXhpc3QgZm9yIHdoZW4gdGhlIHRhYiBpcyBoaWRkZW4uICovXHJcblx0XHRcdFx0dmFyIHRpbWVDdXJyZW50ID0gVmVsb2NpdHkudGltZXN0YW1wICYmIHRpbWVzdGFtcCAhPT0gdHJ1ZSA/IHRpbWVzdGFtcCA6IHBlcmZvcm1hbmNlLm5vdygpO1xyXG5cclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgQ2FsbCBJdGVyYXRpb25cclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdHZhciBjYWxsc0xlbmd0aCA9IFZlbG9jaXR5LlN0YXRlLmNhbGxzLmxlbmd0aDtcclxuXHJcblx0XHRcdFx0LyogVG8gc3BlZWQgdXAgaXRlcmF0aW5nIG92ZXIgdGhpcyBhcnJheSwgaXQgaXMgY29tcGFjdGVkIChmYWxzZXkgaXRlbXMgLS0gY2FsbHMgdGhhdCBoYXZlIGNvbXBsZXRlZCAtLSBhcmUgcmVtb3ZlZClcclxuXHRcdFx0XHQgd2hlbiBpdHMgbGVuZ3RoIGhhcyBiYWxsb29uZWQgdG8gYSBwb2ludCB0aGF0IGNhbiBpbXBhY3QgdGljayBwZXJmb3JtYW5jZS4gVGhpcyBvbmx5IGJlY29tZXMgbmVjZXNzYXJ5IHdoZW4gYW5pbWF0aW9uXHJcblx0XHRcdFx0IGhhcyBiZWVuIGNvbnRpbnVvdXMgd2l0aCBtYW55IGVsZW1lbnRzIG92ZXIgYSBsb25nIHBlcmlvZCBvZiB0aW1lOyB3aGVuZXZlciBhbGwgYWN0aXZlIGNhbGxzIGFyZSBjb21wbGV0ZWQsIGNvbXBsZXRlQ2FsbCgpIGNsZWFycyBWZWxvY2l0eS5TdGF0ZS5jYWxscy4gKi9cclxuXHRcdFx0XHRpZiAoY2FsbHNMZW5ndGggPiAxMDAwMCkge1xyXG5cdFx0XHRcdFx0VmVsb2NpdHkuU3RhdGUuY2FsbHMgPSBjb21wYWN0U3BhcnNlQXJyYXkoVmVsb2NpdHkuU3RhdGUuY2FsbHMpO1xyXG5cdFx0XHRcdFx0Y2FsbHNMZW5ndGggPSBWZWxvY2l0eS5TdGF0ZS5jYWxscy5sZW5ndGg7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKiBJdGVyYXRlIHRocm91Z2ggZWFjaCBhY3RpdmUgY2FsbC4gKi9cclxuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGNhbGxzTGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdC8qIFdoZW4gYSBWZWxvY2l0eSBjYWxsIGlzIGNvbXBsZXRlZCwgaXRzIFZlbG9jaXR5LlN0YXRlLmNhbGxzIGVudHJ5IGlzIHNldCB0byBmYWxzZS4gQ29udGludWUgb24gdG8gdGhlIG5leHQgY2FsbC4gKi9cclxuXHRcdFx0XHRcdGlmICghVmVsb2NpdHkuU3RhdGUuY2FsbHNbaV0pIHtcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0IENhbGwtV2lkZSBWYXJpYWJsZXNcclxuXHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0dmFyIGNhbGxDb250YWluZXIgPSBWZWxvY2l0eS5TdGF0ZS5jYWxsc1tpXSxcclxuXHRcdFx0XHRcdFx0XHRjYWxsID0gY2FsbENvbnRhaW5lclswXSxcclxuXHRcdFx0XHRcdFx0XHRvcHRzID0gY2FsbENvbnRhaW5lclsyXSxcclxuXHRcdFx0XHRcdFx0XHR0aW1lU3RhcnQgPSBjYWxsQ29udGFpbmVyWzNdLFxyXG5cdFx0XHRcdFx0XHRcdGZpcnN0VGljayA9ICF0aW1lU3RhcnQsXHJcblx0XHRcdFx0XHRcdFx0dHdlZW5EdW1teVZhbHVlID0gbnVsbCxcclxuXHRcdFx0XHRcdFx0XHRwYXVzZU9iamVjdCA9IGNhbGxDb250YWluZXJbNV0sXHJcblx0XHRcdFx0XHRcdFx0bWlsbGlzZWNvbmRzRWxsYXBzZWQgPSBjYWxsQ29udGFpbmVyWzZdO1xyXG5cclxuXHJcblxyXG5cdFx0XHRcdFx0LyogSWYgdGltZVN0YXJ0IGlzIHVuZGVmaW5lZCwgdGhlbiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRoYXQgdGhpcyBjYWxsIGhhcyBiZWVuIHByb2Nlc3NlZCBieSB0aWNrKCkuXHJcblx0XHRcdFx0XHQgV2UgYXNzaWduIHRpbWVTdGFydCBub3cgc28gdGhhdCBpdHMgdmFsdWUgaXMgYXMgY2xvc2UgdG8gdGhlIHJlYWwgYW5pbWF0aW9uIHN0YXJ0IHRpbWUgYXMgcG9zc2libGUuXHJcblx0XHRcdFx0XHQgKENvbnZlcnNlbHksIGhhZCB0aW1lU3RhcnQgYmVlbiBkZWZpbmVkIHdoZW4gdGhpcyBjYWxsIHdhcyBhZGRlZCB0byBWZWxvY2l0eS5TdGF0ZS5jYWxscywgdGhlIGRlbGF5XHJcblx0XHRcdFx0XHQgYmV0d2VlbiB0aGF0IHRpbWUgYW5kIG5vdyB3b3VsZCBjYXVzZSB0aGUgZmlyc3QgZmV3IGZyYW1lcyBvZiB0aGUgdHdlZW4gdG8gYmUgc2tpcHBlZCBzaW5jZVxyXG5cdFx0XHRcdFx0IHBlcmNlbnRDb21wbGV0ZSBpcyBjYWxjdWxhdGVkIHJlbGF0aXZlIHRvIHRpbWVTdGFydC4pICovXHJcblx0XHRcdFx0XHQvKiBGdXJ0aGVyLCBzdWJ0cmFjdCAxNm1zICh0aGUgYXBwcm94aW1hdGUgcmVzb2x1dGlvbiBvZiBSQUYpIGZyb20gdGhlIGN1cnJlbnQgdGltZSB2YWx1ZSBzbyB0aGF0IHRoZVxyXG5cdFx0XHRcdFx0IGZpcnN0IHRpY2sgaXRlcmF0aW9uIGlzbid0IHdhc3RlZCBieSBhbmltYXRpbmcgYXQgMCUgdHdlZW4gY29tcGxldGlvbiwgd2hpY2ggd291bGQgcHJvZHVjZSB0aGVcclxuXHRcdFx0XHRcdCBzYW1lIHN0eWxlIHZhbHVlIGFzIHRoZSBlbGVtZW50J3MgY3VycmVudCB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdGlmICghdGltZVN0YXJ0KSB7XHJcblx0XHRcdFx0XHRcdHRpbWVTdGFydCA9IFZlbG9jaXR5LlN0YXRlLmNhbGxzW2ldWzNdID0gdGltZUN1cnJlbnQgLSAxNjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKiBJZiBhIHBhdXNlIG9iamVjdCBpcyBwcmVzZW50LCBza2lwIHByb2Nlc3NpbmcgdW5sZXNzIGl0IGhhcyBiZWVuIHNldCB0byByZXN1bWUgKi9cclxuXHRcdFx0XHRcdGlmIChwYXVzZU9iamVjdCkge1xyXG5cdFx0XHRcdFx0XHRpZiAocGF1c2VPYmplY3QucmVzdW1lID09PSB0cnVlKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogVXBkYXRlIHRoZSB0aW1lIHN0YXJ0IHRvIGFjY29tb2RhdGUgdGhlIHBhdXNlZCBjb21wbGV0aW9uIGFtb3VudCAqL1xyXG5cdFx0XHRcdFx0XHRcdHRpbWVTdGFydCA9IGNhbGxDb250YWluZXJbM10gPSBNYXRoLnJvdW5kKHRpbWVDdXJyZW50IC0gbWlsbGlzZWNvbmRzRWxsYXBzZWQgLSAxNik7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIFJlbW92ZSBwYXVzZSBvYmplY3QgYWZ0ZXIgcHJvY2Vzc2luZyAqL1xyXG5cdFx0XHRcdFx0XHRcdGNhbGxDb250YWluZXJbNV0gPSBudWxsO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0bWlsbGlzZWNvbmRzRWxsYXBzZWQgPSBjYWxsQ29udGFpbmVyWzZdID0gdGltZUN1cnJlbnQgLSB0aW1lU3RhcnQ7XHJcblxyXG5cdFx0XHRcdFx0LyogVGhlIHR3ZWVuJ3MgY29tcGxldGlvbiBwZXJjZW50YWdlIGlzIHJlbGF0aXZlIHRvIHRoZSB0d2VlbidzIHN0YXJ0IHRpbWUsIG5vdCB0aGUgdHdlZW4ncyBzdGFydCB2YWx1ZVxyXG5cdFx0XHRcdFx0ICh3aGljaCB3b3VsZCByZXN1bHQgaW4gdW5wcmVkaWN0YWJsZSB0d2VlbiBkdXJhdGlvbnMgc2luY2UgSmF2YVNjcmlwdCdzIHRpbWVycyBhcmUgbm90IHBhcnRpY3VsYXJseSBhY2N1cmF0ZSkuXHJcblx0XHRcdFx0XHQgQWNjb3JkaW5nbHksIHdlIGVuc3VyZSB0aGF0IHBlcmNlbnRDb21wbGV0ZSBkb2VzIG5vdCBleGNlZWQgMS4gKi9cclxuXHRcdFx0XHRcdHZhciBwZXJjZW50Q29tcGxldGUgPSBNYXRoLm1pbigobWlsbGlzZWNvbmRzRWxsYXBzZWQpIC8gb3B0cy5kdXJhdGlvbiwgMSk7XHJcblxyXG5cdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdCBFbGVtZW50IEl0ZXJhdGlvblxyXG5cdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0LyogRm9yIGV2ZXJ5IGNhbGwsIGl0ZXJhdGUgdGhyb3VnaCBlYWNoIG9mIHRoZSBlbGVtZW50cyBpbiBpdHMgc2V0LiAqL1xyXG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDAsIGNhbGxMZW5ndGggPSBjYWxsLmxlbmd0aDsgaiA8IGNhbGxMZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHR2YXIgdHdlZW5zQ29udGFpbmVyID0gY2FsbFtqXSxcclxuXHRcdFx0XHRcdFx0XHRcdGVsZW1lbnQgPSB0d2VlbnNDb250YWluZXIuZWxlbWVudDtcclxuXHJcblx0XHRcdFx0XHRcdC8qIENoZWNrIHRvIHNlZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGJlZW4gZGVsZXRlZCBtaWR3YXkgdGhyb3VnaCB0aGUgYW5pbWF0aW9uIGJ5IGNoZWNraW5nIGZvciB0aGVcclxuXHRcdFx0XHRcdFx0IGNvbnRpbnVlZCBleGlzdGVuY2Ugb2YgaXRzIGRhdGEgY2FjaGUuIElmIGl0J3MgZ29uZSwgb3IgdGhlIGVsZW1lbnQgaXMgY3VycmVudGx5IHBhdXNlZCwgc2tpcCBhbmltYXRpbmcgdGhpcyBlbGVtZW50LiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoIURhdGEoZWxlbWVudCkpIHtcclxuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0dmFyIHRyYW5zZm9ybVByb3BlcnR5RXhpc3RzID0gZmFsc2U7XHJcblxyXG5cdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHQgRGlzcGxheSAmIFZpc2liaWxpdHkgVG9nZ2xpbmdcclxuXHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHQvKiBJZiB0aGUgZGlzcGxheSBvcHRpb24gaXMgc2V0IHRvIG5vbi1cIm5vbmVcIiwgc2V0IGl0IHVwZnJvbnQgc28gdGhhdCB0aGUgZWxlbWVudCBjYW4gYmVjb21lIHZpc2libGUgYmVmb3JlIHR3ZWVuaW5nIGJlZ2lucy5cclxuXHRcdFx0XHRcdFx0IChPdGhlcndpc2UsIGRpc3BsYXkncyBcIm5vbmVcIiB2YWx1ZSBpcyBzZXQgaW4gY29tcGxldGVDYWxsKCkgb25jZSB0aGUgYW5pbWF0aW9uIGhhcyBjb21wbGV0ZWQuKSAqL1xyXG5cdFx0XHRcdFx0XHRpZiAob3B0cy5kaXNwbGF5ICE9PSB1bmRlZmluZWQgJiYgb3B0cy5kaXNwbGF5ICE9PSBudWxsICYmIG9wdHMuZGlzcGxheSAhPT0gXCJub25lXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAob3B0cy5kaXNwbGF5ID09PSBcImZsZXhcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGZsZXhWYWx1ZXMgPSBbXCItd2Via2l0LWJveFwiLCBcIi1tb3otYm94XCIsIFwiLW1zLWZsZXhib3hcIiwgXCItd2Via2l0LWZsZXhcIl07XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0JC5lYWNoKGZsZXhWYWx1ZXMsIGZ1bmN0aW9uKGksIGZsZXhWYWx1ZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRDU1Muc2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcImRpc3BsYXlcIiwgZmxleFZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0Q1NTLnNldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJkaXNwbGF5XCIsIG9wdHMuZGlzcGxheSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIFNhbWUgZ29lcyB3aXRoIHRoZSB2aXNpYmlsaXR5IG9wdGlvbiwgYnV0IGl0cyBcIm5vbmVcIiBlcXVpdmFsZW50IGlzIFwiaGlkZGVuXCIuICovXHJcblx0XHRcdFx0XHRcdGlmIChvcHRzLnZpc2liaWxpdHkgIT09IHVuZGVmaW5lZCAmJiBvcHRzLnZpc2liaWxpdHkgIT09IFwiaGlkZGVuXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRDU1Muc2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcInZpc2liaWxpdHlcIiwgb3B0cy52aXNpYmlsaXR5KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHQgUHJvcGVydHkgSXRlcmF0aW9uXHJcblx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHQvKiBGb3IgZXZlcnkgZWxlbWVudCwgaXRlcmF0ZSB0aHJvdWdoIGVhY2ggcHJvcGVydHkuICovXHJcblx0XHRcdFx0XHRcdGZvciAodmFyIHByb3BlcnR5IGluIHR3ZWVuc0NvbnRhaW5lcikge1xyXG5cdFx0XHRcdFx0XHRcdC8qIE5vdGU6IEluIGFkZGl0aW9uIHRvIHByb3BlcnR5IHR3ZWVuIGRhdGEsIHR3ZWVuc0NvbnRhaW5lciBjb250YWlucyBhIHJlZmVyZW5jZSB0byBpdHMgYXNzb2NpYXRlZCBlbGVtZW50LiAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmICh0d2VlbnNDb250YWluZXIuaGFzT3duUHJvcGVydHkocHJvcGVydHkpICYmIHByb3BlcnR5ICE9PSBcImVsZW1lbnRcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHR3ZWVuID0gdHdlZW5zQ29udGFpbmVyW3Byb3BlcnR5XSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogRWFzaW5nIGNhbiBlaXRoZXIgYmUgYSBwcmUtZ2VuZXJlYXRlZCBmdW5jdGlvbiBvciBhIHN0cmluZyB0aGF0IHJlZmVyZW5jZXMgYSBwcmUtcmVnaXN0ZXJlZCBlYXNpbmdcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgb24gdGhlIFZlbG9jaXR5LkVhc2luZ3Mgb2JqZWN0LiBJbiBlaXRoZXIgY2FzZSwgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBlYXNpbmcgKmZ1bmN0aW9uKi4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlYXNpbmcgPSBUeXBlLmlzU3RyaW5nKHR3ZWVuLmVhc2luZykgPyBWZWxvY2l0eS5FYXNpbmdzW3R3ZWVuLmVhc2luZ10gOiB0d2Vlbi5lYXNpbmc7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdFx0IEN1cnJlbnQgVmFsdWUgQ2FsY3VsYXRpb25cclxuXHRcdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKFR5cGUuaXNTdHJpbmcodHdlZW4ucGF0dGVybikpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhdHRlcm5SZXBsYWNlID0gcGVyY2VudENvbXBsZXRlID09PSAxID9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uKCQwLCBpbmRleCwgcm91bmQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJlc3VsdCA9IHR3ZWVuLmVuZFZhbHVlW2luZGV4XTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiByb3VuZCA/IE1hdGgucm91bmQocmVzdWx0KSA6IHJlc3VsdDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24oJDAsIGluZGV4LCByb3VuZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgc3RhcnRWYWx1ZSA9IHR3ZWVuLnN0YXJ0VmFsdWVbaW5kZXhdLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHdlZW5EZWx0YSA9IHR3ZWVuLmVuZFZhbHVlW2luZGV4XSAtIHN0YXJ0VmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBzdGFydFZhbHVlICsgKHR3ZWVuRGVsdGEgKiBlYXNpbmcocGVyY2VudENvbXBsZXRlLCBvcHRzLCB0d2VlbkRlbHRhKSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcm91bmQgPyBNYXRoLnJvdW5kKHJlc3VsdCkgOiByZXN1bHQ7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudFZhbHVlID0gdHdlZW4ucGF0dGVybi5yZXBsYWNlKC97KFxcZCspKCEpP30vZywgcGF0dGVyblJlcGxhY2UpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChwZXJjZW50Q29tcGxldGUgPT09IDEpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogSWYgdGhpcyBpcyB0aGUgbGFzdCB0aWNrIHBhc3MgKGlmIHdlJ3ZlIHJlYWNoZWQgMTAwJSBjb21wbGV0aW9uIGZvciB0aGlzIHR3ZWVuKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0IGVuc3VyZSB0aGF0IGN1cnJlbnRWYWx1ZSBpcyBleHBsaWNpdGx5IHNldCB0byBpdHMgdGFyZ2V0IGVuZFZhbHVlIHNvIHRoYXQgaXQncyBub3Qgc3ViamVjdGVkIHRvIGFueSByb3VuZGluZy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudFZhbHVlID0gdHdlZW4uZW5kVmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBPdGhlcndpc2UsIGNhbGN1bGF0ZSBjdXJyZW50VmFsdWUgYmFzZWQgb24gdGhlIGN1cnJlbnQgZGVsdGEgZnJvbSBzdGFydFZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdHdlZW5EZWx0YSA9IHR3ZWVuLmVuZFZhbHVlIC0gdHdlZW4uc3RhcnRWYWx1ZTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IHR3ZWVuLnN0YXJ0VmFsdWUgKyAodHdlZW5EZWx0YSAqIGVhc2luZyhwZXJjZW50Q29tcGxldGUsIG9wdHMsIHR3ZWVuRGVsdGEpKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogSWYgbm8gdmFsdWUgY2hhbmdlIGlzIG9jY3VycmluZywgZG9uJ3QgcHJvY2VlZCB3aXRoIERPTSB1cGRhdGluZy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGlmICghZmlyc3RUaWNrICYmIChjdXJyZW50VmFsdWUgPT09IHR3ZWVuLmN1cnJlbnRWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0dHdlZW4uY3VycmVudFZhbHVlID0gY3VycmVudFZhbHVlO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIElmIHdlJ3JlIHR3ZWVuaW5nIGEgZmFrZSAndHdlZW4nIHByb3BlcnR5IGluIG9yZGVyIHRvIGxvZyB0cmFuc2l0aW9uIHZhbHVlcywgdXBkYXRlIHRoZSBvbmUtcGVyLWNhbGwgdmFyaWFibGUgc28gdGhhdFxyXG5cdFx0XHRcdFx0XHRcdFx0IGl0IGNhbiBiZSBwYXNzZWQgaW50byB0aGUgcHJvZ3Jlc3MgY2FsbGJhY2suICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAocHJvcGVydHkgPT09IFwidHdlZW5cIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0d2VlbkR1bW15VmFsdWUgPSBjdXJyZW50VmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdFx0XHRcdCBIb29rczogUGFydCBJXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKiovXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBob29rUm9vdDtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIEZvciBob29rZWQgcHJvcGVydGllcywgdGhlIG5ld2x5LXVwZGF0ZWQgcm9vdFByb3BlcnR5VmFsdWVDYWNoZSBpcyBjYWNoZWQgb250byB0aGUgZWxlbWVudCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkXHJcblx0XHRcdFx0XHRcdFx0XHRcdCBmb3Igc3Vic2VxdWVudCBob29rcyBpbiB0aGlzIGNhbGwgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lIHJvb3QgcHJvcGVydHkuIElmIHdlIGRpZG4ndCBjYWNoZSB0aGUgdXBkYXRlZFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgcm9vdFByb3BlcnR5VmFsdWUsIGVhY2ggc3Vic2VxdWVudCB1cGRhdGUgdG8gdGhlIHJvb3QgcHJvcGVydHkgaW4gdGhpcyB0aWNrIHBhc3Mgd291bGQgcmVzZXQgdGhlIHByZXZpb3VzIGhvb2snc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQgdXBkYXRlcyB0byByb290UHJvcGVydHlWYWx1ZSBwcmlvciB0byBpbmplY3Rpb24uIEEgbmljZSBwZXJmb3JtYW5jZSBieXByb2R1Y3Qgb2Ygcm9vdFByb3BlcnR5VmFsdWUgY2FjaGluZyBpcyB0aGF0XHJcblx0XHRcdFx0XHRcdFx0XHRcdCBzdWJzZXF1ZW50bHkgY2hhaW5lZCBhbmltYXRpb25zIHVzaW5nIHRoZSBzYW1lIGhvb2tSb290IGJ1dCBhIGRpZmZlcmVudCBob29rIGNhbiB1c2UgdGhpcyBjYWNoZWQgcm9vdFByb3BlcnR5VmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChDU1MuSG9va3MucmVnaXN0ZXJlZFtwcm9wZXJ0eV0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRob29rUm9vdCA9IENTUy5Ib29rcy5nZXRSb290KHByb3BlcnR5KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJvb3RQcm9wZXJ0eVZhbHVlQ2FjaGUgPSBEYXRhKGVsZW1lbnQpLnJvb3RQcm9wZXJ0eVZhbHVlQ2FjaGVbaG9va1Jvb3RdO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocm9vdFByb3BlcnR5VmFsdWVDYWNoZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHdlZW4ucm9vdFByb3BlcnR5VmFsdWUgPSByb290UHJvcGVydHlWYWx1ZUNhY2hlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdFx0XHRcdCBET00gVXBkYXRlXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIHNldFByb3BlcnR5VmFsdWUoKSByZXR1cm5zIGFuIGFycmF5IG9mIHRoZSBwcm9wZXJ0eSBuYW1lIGFuZCBwcm9wZXJ0eSB2YWx1ZSBwb3N0IGFueSBub3JtYWxpemF0aW9uIHRoYXQgbWF5IGhhdmUgYmVlbiBwZXJmb3JtZWQuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIE5vdGU6IFRvIHNvbHZlIGFuIElFPD04IHBvc2l0aW9uaW5nIGJ1ZywgdGhlIHVuaXQgdHlwZSBpcyBkcm9wcGVkIHdoZW4gc2V0dGluZyBhIHByb3BlcnR5IHZhbHVlIG9mIDAuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBhZGp1c3RlZFNldERhdGEgPSBDU1Muc2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCAvKiBTRVQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHdlZW4uY3VycmVudFZhbHVlICsgKElFIDwgOSAmJiBwYXJzZUZsb2F0KGN1cnJlbnRWYWx1ZSkgPT09IDAgPyBcIlwiIDogdHdlZW4udW5pdFR5cGUpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHdlZW4ucm9vdFByb3BlcnR5VmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0d2Vlbi5zY3JvbGxEYXRhKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdFx0XHRcdCBIb29rczogUGFydCBJSVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIE5vdyB0aGF0IHdlIGhhdmUgdGhlIGhvb2sncyB1cGRhdGVkIHJvb3RQcm9wZXJ0eVZhbHVlICh0aGUgcG9zdC1wcm9jZXNzZWQgdmFsdWUgcHJvdmlkZWQgYnkgYWRqdXN0ZWRTZXREYXRhKSwgY2FjaGUgaXQgb250byB0aGUgZWxlbWVudC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKENTUy5Ib29rcy5yZWdpc3RlcmVkW3Byb3BlcnR5XSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIFNpbmNlIGFkanVzdGVkU2V0RGF0YSBjb250YWlucyBub3JtYWxpemVkIGRhdGEgcmVhZHkgZm9yIERPTSB1cGRhdGluZywgdGhlIHJvb3RQcm9wZXJ0eVZhbHVlIG5lZWRzIHRvIGJlIHJlLWV4dHJhY3RlZCBmcm9tIGl0cyBub3JtYWxpemVkIGZvcm0uID8/ICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkW2hvb2tSb290XSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0RGF0YShlbGVtZW50KS5yb290UHJvcGVydHlWYWx1ZUNhY2hlW2hvb2tSb290XSA9IENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkW2hvb2tSb290XShcImV4dHJhY3RcIiwgbnVsbCwgYWRqdXN0ZWRTZXREYXRhWzFdKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0RGF0YShlbGVtZW50KS5yb290UHJvcGVydHlWYWx1ZUNhY2hlW2hvb2tSb290XSA9IGFkanVzdGVkU2V0RGF0YVsxXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0XHRcdFx0IFRyYW5zZm9ybXNcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIEZsYWcgd2hldGhlciBhIHRyYW5zZm9ybSBwcm9wZXJ0eSBpcyBiZWluZyBhbmltYXRlZCBzbyB0aGF0IGZsdXNoVHJhbnNmb3JtQ2FjaGUoKSBjYW4gYmUgdHJpZ2dlcmVkIG9uY2UgdGhpcyB0aWNrIHBhc3MgaXMgY29tcGxldGUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhZGp1c3RlZFNldERhdGFbMF0gPT09IFwidHJhbnNmb3JtXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm1Qcm9wZXJ0eUV4aXN0cyA9IHRydWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHQgbW9iaWxlSEFcclxuXHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHQvKiBJZiBtb2JpbGVIQSBpcyBlbmFibGVkLCBzZXQgdGhlIHRyYW5zbGF0ZTNkIHRyYW5zZm9ybSB0byBudWxsIHRvIGZvcmNlIGhhcmR3YXJlIGFjY2VsZXJhdGlvbi5cclxuXHRcdFx0XHRcdFx0IEl0J3Mgc2FmZSB0byBvdmVycmlkZSB0aGlzIHByb3BlcnR5IHNpbmNlIFZlbG9jaXR5IGRvZXNuJ3QgYWN0dWFsbHkgc3VwcG9ydCBpdHMgYW5pbWF0aW9uIChob29rcyBhcmUgdXNlZCBpbiBpdHMgcGxhY2UpLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAob3B0cy5tb2JpbGVIQSkge1xyXG5cdFx0XHRcdFx0XHRcdC8qIERvbid0IHNldCB0aGUgbnVsbCB0cmFuc2Zvcm0gaGFjayBpZiB3ZSd2ZSBhbHJlYWR5IGRvbmUgc28uICovXHJcblx0XHRcdFx0XHRcdFx0aWYgKERhdGEoZWxlbWVudCkudHJhbnNmb3JtQ2FjaGUudHJhbnNsYXRlM2QgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogQWxsIGVudHJpZXMgb24gdGhlIHRyYW5zZm9ybUNhY2hlIG9iamVjdCBhcmUgbGF0ZXIgY29uY2F0ZW5hdGVkIGludG8gYSBzaW5nbGUgdHJhbnNmb3JtIHN0cmluZyB2aWEgZmx1c2hUcmFuc2Zvcm1DYWNoZSgpLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0RGF0YShlbGVtZW50KS50cmFuc2Zvcm1DYWNoZS50cmFuc2xhdGUzZCA9IFwiKDBweCwgMHB4LCAwcHgpXCI7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0dHJhbnNmb3JtUHJvcGVydHlFeGlzdHMgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHRyYW5zZm9ybVByb3BlcnR5RXhpc3RzKSB7XHJcblx0XHRcdFx0XHRcdFx0Q1NTLmZsdXNoVHJhbnNmb3JtQ2FjaGUoZWxlbWVudCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKiBUaGUgbm9uLVwibm9uZVwiIGRpc3BsYXkgdmFsdWUgaXMgb25seSBhcHBsaWVkIHRvIGFuIGVsZW1lbnQgb25jZSAtLSB3aGVuIGl0cyBhc3NvY2lhdGVkIGNhbGwgaXMgZmlyc3QgdGlja2VkIHRocm91Z2guXHJcblx0XHRcdFx0XHQgQWNjb3JkaW5nbHksIGl0J3Mgc2V0IHRvIGZhbHNlIHNvIHRoYXQgaXQgaXNuJ3QgcmUtcHJvY2Vzc2VkIGJ5IHRoaXMgY2FsbCBpbiB0aGUgbmV4dCB0aWNrLiAqL1xyXG5cdFx0XHRcdFx0aWYgKG9wdHMuZGlzcGxheSAhPT0gdW5kZWZpbmVkICYmIG9wdHMuZGlzcGxheSAhPT0gXCJub25lXCIpIHtcclxuXHRcdFx0XHRcdFx0VmVsb2NpdHkuU3RhdGUuY2FsbHNbaV1bMl0uZGlzcGxheSA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKG9wdHMudmlzaWJpbGl0eSAhPT0gdW5kZWZpbmVkICYmIG9wdHMudmlzaWJpbGl0eSAhPT0gXCJoaWRkZW5cIikge1xyXG5cdFx0XHRcdFx0XHRWZWxvY2l0eS5TdGF0ZS5jYWxsc1tpXVsyXS52aXNpYmlsaXR5ID0gZmFsc2U7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogUGFzcyB0aGUgZWxlbWVudHMgYW5kIHRoZSB0aW1pbmcgZGF0YSAocGVyY2VudENvbXBsZXRlLCBtc1JlbWFpbmluZywgdGltZVN0YXJ0LCB0d2VlbkR1bW15VmFsdWUpIGludG8gdGhlIHByb2dyZXNzIGNhbGxiYWNrLiAqL1xyXG5cdFx0XHRcdFx0aWYgKG9wdHMucHJvZ3Jlc3MpIHtcclxuXHRcdFx0XHRcdFx0b3B0cy5wcm9ncmVzcy5jYWxsKGNhbGxDb250YWluZXJbMV0sXHJcblx0XHRcdFx0XHRcdFx0XHRjYWxsQ29udGFpbmVyWzFdLFxyXG5cdFx0XHRcdFx0XHRcdFx0cGVyY2VudENvbXBsZXRlLFxyXG5cdFx0XHRcdFx0XHRcdFx0TWF0aC5tYXgoMCwgKHRpbWVTdGFydCArIG9wdHMuZHVyYXRpb24pIC0gdGltZUN1cnJlbnQpLFxyXG5cdFx0XHRcdFx0XHRcdFx0dGltZVN0YXJ0LFxyXG5cdFx0XHRcdFx0XHRcdFx0dHdlZW5EdW1teVZhbHVlKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKiBJZiB0aGlzIGNhbGwgaGFzIGZpbmlzaGVkIHR3ZWVuaW5nLCBwYXNzIGl0cyBpbmRleCB0byBjb21wbGV0ZUNhbGwoKSB0byBoYW5kbGUgY2FsbCBjbGVhbnVwLiAqL1xyXG5cdFx0XHRcdFx0aWYgKHBlcmNlbnRDb21wbGV0ZSA9PT0gMSkge1xyXG5cdFx0XHRcdFx0XHRjb21wbGV0ZUNhbGwoaSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBOb3RlOiBjb21wbGV0ZUNhbGwoKSBzZXRzIHRoZSBpc1RpY2tpbmcgZmxhZyB0byBmYWxzZSB3aGVuIHRoZSBsYXN0IGNhbGwgb24gVmVsb2NpdHkuU3RhdGUuY2FsbHMgaGFzIGNvbXBsZXRlZC4gKi9cclxuXHRcdFx0aWYgKFZlbG9jaXR5LlN0YXRlLmlzVGlja2luZykge1xyXG5cdFx0XHRcdHRpY2tlcih0aWNrKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHQgQ2FsbCBDb21wbGV0aW9uXHJcblx0XHQgKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHQvKiBOb3RlOiBVbmxpa2UgdGljaygpLCB3aGljaCBwcm9jZXNzZXMgYWxsIGFjdGl2ZSBjYWxscyBhdCBvbmNlLCBjYWxsIGNvbXBsZXRpb24gaXMgaGFuZGxlZCBvbiBhIHBlci1jYWxsIGJhc2lzLiAqL1xyXG5cdFx0ZnVuY3Rpb24gY29tcGxldGVDYWxsKGNhbGxJbmRleCwgaXNTdG9wcGVkKSB7XHJcblx0XHRcdC8qIEVuc3VyZSB0aGUgY2FsbCBleGlzdHMuICovXHJcblx0XHRcdGlmICghVmVsb2NpdHkuU3RhdGUuY2FsbHNbY2FsbEluZGV4XSkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogUHVsbCB0aGUgbWV0YWRhdGEgZnJvbSB0aGUgY2FsbC4gKi9cclxuXHRcdFx0dmFyIGNhbGwgPSBWZWxvY2l0eS5TdGF0ZS5jYWxsc1tjYWxsSW5kZXhdWzBdLFxyXG5cdFx0XHRcdFx0ZWxlbWVudHMgPSBWZWxvY2l0eS5TdGF0ZS5jYWxsc1tjYWxsSW5kZXhdWzFdLFxyXG5cdFx0XHRcdFx0b3B0cyA9IFZlbG9jaXR5LlN0YXRlLmNhbGxzW2NhbGxJbmRleF1bMl0sXHJcblx0XHRcdFx0XHRyZXNvbHZlciA9IFZlbG9jaXR5LlN0YXRlLmNhbGxzW2NhbGxJbmRleF1bNF07XHJcblxyXG5cdFx0XHR2YXIgcmVtYWluaW5nQ2FsbHNFeGlzdCA9IGZhbHNlO1xyXG5cclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0IEVsZW1lbnQgRmluYWxpemF0aW9uXHJcblx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0Zm9yICh2YXIgaSA9IDAsIGNhbGxMZW5ndGggPSBjYWxsLmxlbmd0aDsgaSA8IGNhbGxMZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdHZhciBlbGVtZW50ID0gY2FsbFtpXS5lbGVtZW50O1xyXG5cclxuXHRcdFx0XHQvKiBJZiB0aGUgdXNlciBzZXQgZGlzcGxheSB0byBcIm5vbmVcIiAoaW50ZW5kaW5nIHRvIGhpZGUgdGhlIGVsZW1lbnQpLCBzZXQgaXQgbm93IHRoYXQgdGhlIGFuaW1hdGlvbiBoYXMgY29tcGxldGVkLiAqL1xyXG5cdFx0XHRcdC8qIE5vdGU6IGRpc3BsYXk6bm9uZSBpc24ndCBzZXQgd2hlbiBjYWxscyBhcmUgbWFudWFsbHkgc3RvcHBlZCAodmlhIFZlbG9jaXR5KFwic3RvcFwiKS4gKi9cclxuXHRcdFx0XHQvKiBOb3RlOiBEaXNwbGF5IGdldHMgaWdub3JlZCB3aXRoIFwicmV2ZXJzZVwiIGNhbGxzIGFuZCBpbmZpbml0ZSBsb29wcywgc2luY2UgdGhpcyBiZWhhdmlvciB3b3VsZCBiZSB1bmRlc2lyYWJsZS4gKi9cclxuXHRcdFx0XHRpZiAoIWlzU3RvcHBlZCAmJiAhb3B0cy5sb29wKSB7XHJcblx0XHRcdFx0XHRpZiAob3B0cy5kaXNwbGF5ID09PSBcIm5vbmVcIikge1xyXG5cdFx0XHRcdFx0XHRDU1Muc2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcImRpc3BsYXlcIiwgb3B0cy5kaXNwbGF5KTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAob3B0cy52aXNpYmlsaXR5ID09PSBcImhpZGRlblwiKSB7XHJcblx0XHRcdFx0XHRcdENTUy5zZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwidmlzaWJpbGl0eVwiLCBvcHRzLnZpc2liaWxpdHkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0LyogSWYgdGhlIGVsZW1lbnQncyBxdWV1ZSBpcyBlbXB0eSAoaWYgb25seSB0aGUgXCJpbnByb2dyZXNzXCIgaXRlbSBpcyBsZWZ0IGF0IHBvc2l0aW9uIDApIG9yIGlmIGl0cyBxdWV1ZSBpcyBhYm91dCB0byBydW5cclxuXHRcdFx0XHQgYSBub24tVmVsb2NpdHktaW5pdGlhdGVkIGVudHJ5LCB0dXJuIG9mZiB0aGUgaXNBbmltYXRpbmcgZmxhZy4gQSBub24tVmVsb2NpdHktaW5pdGlhdGllZCBxdWV1ZSBlbnRyeSdzIGxvZ2ljIG1pZ2h0IGFsdGVyXHJcblx0XHRcdFx0IGFuIGVsZW1lbnQncyBDU1MgdmFsdWVzIGFuZCB0aGVyZWJ5IGNhdXNlIFZlbG9jaXR5J3MgY2FjaGVkIHZhbHVlIGRhdGEgdG8gZ28gc3RhbGUuIFRvIGRldGVjdCBpZiBhIHF1ZXVlIGVudHJ5IHdhcyBpbml0aWF0ZWQgYnkgVmVsb2NpdHksXHJcblx0XHRcdFx0IHdlIGNoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mIG91ciBzcGVjaWFsIFZlbG9jaXR5LnF1ZXVlRW50cnlGbGFnIGRlY2xhcmF0aW9uLCB3aGljaCBtaW5pZmllcnMgd29uJ3QgcmVuYW1lIHNpbmNlIHRoZSBmbGFnXHJcblx0XHRcdFx0IGlzIGFzc2lnbmVkIHRvIGpRdWVyeSdzIGdsb2JhbCAkIG9iamVjdCBhbmQgdGh1cyBleGlzdHMgb3V0IG9mIFZlbG9jaXR5J3Mgb3duIHNjb3BlLiAqL1xyXG5cdFx0XHRcdHZhciBkYXRhID0gRGF0YShlbGVtZW50KTtcclxuXHJcblx0XHRcdFx0aWYgKG9wdHMubG9vcCAhPT0gdHJ1ZSAmJiAoJC5xdWV1ZShlbGVtZW50KVsxXSA9PT0gdW5kZWZpbmVkIHx8ICEvXFwudmVsb2NpdHlRdWV1ZUVudHJ5RmxhZy9pLnRlc3QoJC5xdWV1ZShlbGVtZW50KVsxXSkpKSB7XHJcblx0XHRcdFx0XHQvKiBUaGUgZWxlbWVudCBtYXkgaGF2ZSBiZWVuIGRlbGV0ZWQuIEVuc3VyZSB0aGF0IGl0cyBkYXRhIGNhY2hlIHN0aWxsIGV4aXN0cyBiZWZvcmUgYWN0aW5nIG9uIGl0LiAqL1xyXG5cdFx0XHRcdFx0aWYgKGRhdGEpIHtcclxuXHRcdFx0XHRcdFx0ZGF0YS5pc0FuaW1hdGluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHQvKiBDbGVhciB0aGUgZWxlbWVudCdzIHJvb3RQcm9wZXJ0eVZhbHVlQ2FjaGUsIHdoaWNoIHdpbGwgYmVjb21lIHN0YWxlLiAqL1xyXG5cdFx0XHRcdFx0XHRkYXRhLnJvb3RQcm9wZXJ0eVZhbHVlQ2FjaGUgPSB7fTtcclxuXHJcblx0XHRcdFx0XHRcdHZhciB0cmFuc2Zvcm1IQVByb3BlcnR5RXhpc3RzID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdC8qIElmIGFueSAzRCB0cmFuc2Zvcm0gc3VicHJvcGVydHkgaXMgYXQgaXRzIGRlZmF1bHQgdmFsdWUgKHJlZ2FyZGxlc3Mgb2YgdW5pdCB0eXBlKSwgcmVtb3ZlIGl0LiAqL1xyXG5cdFx0XHRcdFx0XHQkLmVhY2goQ1NTLkxpc3RzLnRyYW5zZm9ybXMzRCwgZnVuY3Rpb24oaSwgdHJhbnNmb3JtTmFtZSkge1xyXG5cdFx0XHRcdFx0XHRcdHZhciBkZWZhdWx0VmFsdWUgPSAvXnNjYWxlLy50ZXN0KHRyYW5zZm9ybU5hbWUpID8gMSA6IDAsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGRhdGEudHJhbnNmb3JtQ2FjaGVbdHJhbnNmb3JtTmFtZV07XHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmIChkYXRhLnRyYW5zZm9ybUNhY2hlW3RyYW5zZm9ybU5hbWVdICE9PSB1bmRlZmluZWQgJiYgbmV3IFJlZ0V4cChcIl5cXFxcKFwiICsgZGVmYXVsdFZhbHVlICsgXCJbXi5dXCIpLnRlc3QoY3VycmVudFZhbHVlKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dHJhbnNmb3JtSEFQcm9wZXJ0eUV4aXN0cyA9IHRydWU7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIGRhdGEudHJhbnNmb3JtQ2FjaGVbdHJhbnNmb3JtTmFtZV07XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIE1vYmlsZSBkZXZpY2VzIGhhdmUgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIHJlbW92ZWQgYXQgdGhlIGVuZCBvZiB0aGUgYW5pbWF0aW9uIGluIG9yZGVyIHRvIGF2b2lkIGhvZ2dpbmcgdGhlIEdQVSdzIG1lbW9yeS4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKG9wdHMubW9iaWxlSEEpIHtcclxuXHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm1IQVByb3BlcnR5RXhpc3RzID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRkZWxldGUgZGF0YS50cmFuc2Zvcm1DYWNoZS50cmFuc2xhdGUzZDtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyogRmx1c2ggdGhlIHN1YnByb3BlcnR5IHJlbW92YWxzIHRvIHRoZSBET00uICovXHJcblx0XHRcdFx0XHRcdGlmICh0cmFuc2Zvcm1IQVByb3BlcnR5RXhpc3RzKSB7XHJcblx0XHRcdFx0XHRcdFx0Q1NTLmZsdXNoVHJhbnNmb3JtQ2FjaGUoZWxlbWVudCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIFJlbW92ZSB0aGUgXCJ2ZWxvY2l0eS1hbmltYXRpbmdcIiBpbmRpY2F0b3IgY2xhc3MuICovXHJcblx0XHRcdFx0XHRcdENTUy5WYWx1ZXMucmVtb3ZlQ2xhc3MoZWxlbWVudCwgXCJ2ZWxvY2l0eS1hbmltYXRpbmdcIik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IE9wdGlvbjogQ29tcGxldGVcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKiBDb21wbGV0ZSBpcyBmaXJlZCBvbmNlIHBlciBjYWxsIChub3Qgb25jZSBwZXIgZWxlbWVudCkgYW5kIGlzIHBhc3NlZCB0aGUgZnVsbCByYXcgRE9NIGVsZW1lbnQgc2V0IGFzIGJvdGggaXRzIGNvbnRleHQgYW5kIGl0cyBmaXJzdCBhcmd1bWVudC4gKi9cclxuXHRcdFx0XHQvKiBOb3RlOiBDYWxsYmFja3MgYXJlbid0IGZpcmVkIHdoZW4gY2FsbHMgYXJlIG1hbnVhbGx5IHN0b3BwZWQgKHZpYSBWZWxvY2l0eShcInN0b3BcIikuICovXHJcblx0XHRcdFx0aWYgKCFpc1N0b3BwZWQgJiYgb3B0cy5jb21wbGV0ZSAmJiAhb3B0cy5sb29wICYmIChpID09PSBjYWxsTGVuZ3RoIC0gMSkpIHtcclxuXHRcdFx0XHRcdC8qIFdlIHRocm93IGNhbGxiYWNrcyBpbiBhIHNldFRpbWVvdXQgc28gdGhhdCB0aHJvd24gZXJyb3JzIGRvbid0IGhhbHQgdGhlIGV4ZWN1dGlvbiBvZiBWZWxvY2l0eSBpdHNlbGYuICovXHJcblx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRvcHRzLmNvbXBsZXRlLmNhbGwoZWxlbWVudHMsIGVsZW1lbnRzKTtcclxuXHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhyb3cgZXJyb3I7XHJcblx0XHRcdFx0XHRcdH0sIDEpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgUHJvbWlzZSBSZXNvbHZpbmdcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0LyogTm90ZTogSW5maW5pdGUgbG9vcHMgZG9uJ3QgcmV0dXJuIHByb21pc2VzLiAqL1xyXG5cdFx0XHRcdGlmIChyZXNvbHZlciAmJiBvcHRzLmxvb3AgIT09IHRydWUpIHtcclxuXHRcdFx0XHRcdHJlc29sdmVyKGVsZW1lbnRzKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IE9wdGlvbjogTG9vcCAoSW5maW5pdGUpXHJcblx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdGlmIChkYXRhICYmIG9wdHMubG9vcCA9PT0gdHJ1ZSAmJiAhaXNTdG9wcGVkKSB7XHJcblx0XHRcdFx0XHQvKiBJZiBhIHJvdGF0ZVgvWS9aIHByb3BlcnR5IGlzIGJlaW5nIGFuaW1hdGVkIGJ5IDM2MCBkZWcgd2l0aCBsb29wOnRydWUsIHN3YXAgdHdlZW4gc3RhcnQvZW5kIHZhbHVlcyB0byBlbmFibGVcclxuXHRcdFx0XHRcdCBjb250aW51b3VzIGl0ZXJhdGl2ZSByb3RhdGlvbiBsb29waW5nLiAoT3RoZXJpc2UsIHRoZSBlbGVtZW50IHdvdWxkIGp1c3Qgcm90YXRlIGJhY2sgYW5kIGZvcnRoLikgKi9cclxuXHRcdFx0XHRcdCQuZWFjaChkYXRhLnR3ZWVuc0NvbnRhaW5lciwgZnVuY3Rpb24ocHJvcGVydHlOYW1lLCB0d2VlbkNvbnRhaW5lcikge1xyXG5cdFx0XHRcdFx0XHRpZiAoL15yb3RhdGUvLnRlc3QocHJvcGVydHlOYW1lKSAmJiAoKHBhcnNlRmxvYXQodHdlZW5Db250YWluZXIuc3RhcnRWYWx1ZSkgLSBwYXJzZUZsb2F0KHR3ZWVuQ29udGFpbmVyLmVuZFZhbHVlKSkgJSAzNjAgPT09IDApKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIG9sZFN0YXJ0VmFsdWUgPSB0d2VlbkNvbnRhaW5lci5zdGFydFZhbHVlO1xyXG5cclxuXHRcdFx0XHRcdFx0XHR0d2VlbkNvbnRhaW5lci5zdGFydFZhbHVlID0gdHdlZW5Db250YWluZXIuZW5kVmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0dHdlZW5Db250YWluZXIuZW5kVmFsdWUgPSBvbGRTdGFydFZhbHVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoL15iYWNrZ3JvdW5kUG9zaXRpb24vLnRlc3QocHJvcGVydHlOYW1lKSAmJiBwYXJzZUZsb2F0KHR3ZWVuQ29udGFpbmVyLmVuZFZhbHVlKSA9PT0gMTAwICYmIHR3ZWVuQ29udGFpbmVyLnVuaXRUeXBlID09PSBcIiVcIikge1xyXG5cdFx0XHRcdFx0XHRcdHR3ZWVuQ29udGFpbmVyLmVuZFZhbHVlID0gMDtcclxuXHRcdFx0XHRcdFx0XHR0d2VlbkNvbnRhaW5lci5zdGFydFZhbHVlID0gMTAwO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRWZWxvY2l0eShlbGVtZW50LCBcInJldmVyc2VcIiwge2xvb3A6IHRydWUsIGRlbGF5OiBvcHRzLmRlbGF5fSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IERlcXVldWVpbmdcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKiBGaXJlIHRoZSBuZXh0IGNhbGwgaW4gdGhlIHF1ZXVlIHNvIGxvbmcgYXMgdGhpcyBjYWxsJ3MgcXVldWUgd2Fzbid0IHNldCB0byBmYWxzZSAodG8gdHJpZ2dlciBhIHBhcmFsbGVsIGFuaW1hdGlvbiksXHJcblx0XHRcdFx0IHdoaWNoIHdvdWxkIGhhdmUgYWxyZWFkeSBjYXVzZWQgdGhlIG5leHQgY2FsbCB0byBmaXJlLiBOb3RlOiBFdmVuIGlmIHRoZSBlbmQgb2YgdGhlIGFuaW1hdGlvbiBxdWV1ZSBoYXMgYmVlbiByZWFjaGVkLFxyXG5cdFx0XHRcdCAkLmRlcXVldWUoKSBtdXN0IHN0aWxsIGJlIGNhbGxlZCBpbiBvcmRlciB0byBjb21wbGV0ZWx5IGNsZWFyIGpRdWVyeSdzIGFuaW1hdGlvbiBxdWV1ZS4gKi9cclxuXHRcdFx0XHRpZiAob3B0cy5xdWV1ZSAhPT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdCQuZGVxdWV1ZShlbGVtZW50LCBvcHRzLnF1ZXVlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0IENhbGxzIEFycmF5IENsZWFudXBcclxuXHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdC8qIFNpbmNlIHRoaXMgY2FsbCBpcyBjb21wbGV0ZSwgc2V0IGl0IHRvIGZhbHNlIHNvIHRoYXQgdGhlIHJBRiB0aWNrIHNraXBzIGl0LiBUaGlzIGFycmF5IGlzIGxhdGVyIGNvbXBhY3RlZCB2aWEgY29tcGFjdFNwYXJzZUFycmF5KCkuXHJcblx0XHRcdCAoRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIHRoZSBjYWxsIGlzIHNldCB0byBmYWxzZSBpbnN0ZWFkIG9mIGJlaW5nIGRlbGV0ZWQgZnJvbSB0aGUgYXJyYXk6IGh0dHA6Ly93d3cuaHRtbDVyb2Nrcy5jb20vZW4vdHV0b3JpYWxzL3NwZWVkL3Y4LykgKi9cclxuXHRcdFx0VmVsb2NpdHkuU3RhdGUuY2FsbHNbY2FsbEluZGV4XSA9IGZhbHNlO1xyXG5cclxuXHRcdFx0LyogSXRlcmF0ZSB0aHJvdWdoIHRoZSBjYWxscyBhcnJheSB0byBkZXRlcm1pbmUgaWYgdGhpcyB3YXMgdGhlIGZpbmFsIGluLXByb2dyZXNzIGFuaW1hdGlvbi5cclxuXHRcdFx0IElmIHNvLCBzZXQgYSBmbGFnIHRvIGVuZCB0aWNraW5nIGFuZCBjbGVhciB0aGUgY2FsbHMgYXJyYXkuICovXHJcblx0XHRcdGZvciAodmFyIGogPSAwLCBjYWxsc0xlbmd0aCA9IFZlbG9jaXR5LlN0YXRlLmNhbGxzLmxlbmd0aDsgaiA8IGNhbGxzTGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRpZiAoVmVsb2NpdHkuU3RhdGUuY2FsbHNbal0gIT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHRyZW1haW5pbmdDYWxsc0V4aXN0ID0gdHJ1ZTtcclxuXHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChyZW1haW5pbmdDYWxsc0V4aXN0ID09PSBmYWxzZSkge1xyXG5cdFx0XHRcdC8qIHRpY2soKSB3aWxsIGRldGVjdCB0aGlzIGZsYWcgdXBvbiBpdHMgbmV4dCBpdGVyYXRpb24gYW5kIHN1YnNlcXVlbnRseSB0dXJuIGl0c2VsZiBvZmYuICovXHJcblx0XHRcdFx0VmVsb2NpdHkuU3RhdGUuaXNUaWNraW5nID0gZmFsc2U7XHJcblxyXG5cdFx0XHRcdC8qIENsZWFyIHRoZSBjYWxscyBhcnJheSBzbyB0aGF0IGl0cyBsZW5ndGggaXMgcmVzZXQuICovXHJcblx0XHRcdFx0ZGVsZXRlIFZlbG9jaXR5LlN0YXRlLmNhbGxzO1xyXG5cdFx0XHRcdFZlbG9jaXR5LlN0YXRlLmNhbGxzID0gW107XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvKioqKioqKioqKioqKioqKioqXHJcblx0XHQgRnJhbWV3b3Jrc1xyXG5cdFx0ICoqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHQvKiBCb3RoIGpRdWVyeSBhbmQgWmVwdG8gYWxsb3cgdGhlaXIgJC5mbiBvYmplY3QgdG8gYmUgZXh0ZW5kZWQgdG8gYWxsb3cgd3JhcHBlZCBlbGVtZW50cyB0byBiZSBzdWJqZWN0ZWQgdG8gcGx1Z2luIGNhbGxzLlxyXG5cdFx0IElmIGVpdGhlciBmcmFtZXdvcmsgaXMgbG9hZGVkLCByZWdpc3RlciBhIFwidmVsb2NpdHlcIiBleHRlbnNpb24gcG9pbnRpbmcgdG8gVmVsb2NpdHkncyBjb3JlIGFuaW1hdGUoKSBtZXRob2QuICBWZWxvY2l0eVxyXG5cdFx0IGFsc28gcmVnaXN0ZXJzIGl0c2VsZiBvbnRvIGEgZ2xvYmFsIGNvbnRhaW5lciAod2luZG93LmpRdWVyeSB8fCB3aW5kb3cuWmVwdG8gfHwgd2luZG93KSBzbyB0aGF0IGNlcnRhaW4gZmVhdHVyZXMgYXJlXHJcblx0XHQgYWNjZXNzaWJsZSBiZXlvbmQganVzdCBhIHBlci1lbGVtZW50IHNjb3BlLiBUaGlzIG1hc3RlciBvYmplY3QgY29udGFpbnMgYW4gLmFuaW1hdGUoKSBtZXRob2QsIHdoaWNoIGlzIGxhdGVyIGFzc2lnbmVkIHRvICQuZm5cclxuXHRcdCAoaWYgalF1ZXJ5IG9yIFplcHRvIGFyZSBwcmVzZW50KS4gQWNjb3JkaW5nbHksIFZlbG9jaXR5IGNhbiBib3RoIGFjdCBvbiB3cmFwcGVkIERPTSBlbGVtZW50cyBhbmQgc3RhbmQgYWxvbmUgZm9yIHRhcmdldGluZyByYXcgRE9NIGVsZW1lbnRzLiAqL1xyXG5cdFx0Z2xvYmFsLlZlbG9jaXR5ID0gVmVsb2NpdHk7XHJcblxyXG5cdFx0aWYgKGdsb2JhbCAhPT0gd2luZG93KSB7XHJcblx0XHRcdC8qIEFzc2lnbiB0aGUgZWxlbWVudCBmdW5jdGlvbiB0byBWZWxvY2l0eSdzIGNvcmUgYW5pbWF0ZSgpIG1ldGhvZC4gKi9cclxuXHRcdFx0Z2xvYmFsLmZuLnZlbG9jaXR5ID0gYW5pbWF0ZTtcclxuXHRcdFx0LyogQXNzaWduIHRoZSBvYmplY3QgZnVuY3Rpb24ncyBkZWZhdWx0cyB0byBWZWxvY2l0eSdzIGdsb2JhbCBkZWZhdWx0cyBvYmplY3QuICovXHJcblx0XHRcdGdsb2JhbC5mbi52ZWxvY2l0eS5kZWZhdWx0cyA9IFZlbG9jaXR5LmRlZmF1bHRzO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0IFBhY2thZ2VkIFJlZGlyZWN0c1xyXG5cdFx0ICoqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdC8qIHNsaWRlVXAsIHNsaWRlRG93biAqL1xyXG5cdFx0JC5lYWNoKFtcIkRvd25cIiwgXCJVcFwiXSwgZnVuY3Rpb24oaSwgZGlyZWN0aW9uKSB7XHJcblx0XHRcdFZlbG9jaXR5LlJlZGlyZWN0c1tcInNsaWRlXCIgKyBkaXJlY3Rpb25dID0gZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucywgZWxlbWVudHNJbmRleCwgZWxlbWVudHNTaXplLCBlbGVtZW50cywgcHJvbWlzZURhdGEpIHtcclxuXHRcdFx0XHR2YXIgb3B0cyA9ICQuZXh0ZW5kKHt9LCBvcHRpb25zKSxcclxuXHRcdFx0XHRcdFx0YmVnaW4gPSBvcHRzLmJlZ2luLFxyXG5cdFx0XHRcdFx0XHRjb21wbGV0ZSA9IG9wdHMuY29tcGxldGUsXHJcblx0XHRcdFx0XHRcdGlubGluZVZhbHVlcyA9IHt9LFxyXG5cdFx0XHRcdFx0XHRjb21wdXRlZFZhbHVlcyA9IHtoZWlnaHQ6IFwiXCIsIG1hcmdpblRvcDogXCJcIiwgbWFyZ2luQm90dG9tOiBcIlwiLCBwYWRkaW5nVG9wOiBcIlwiLCBwYWRkaW5nQm90dG9tOiBcIlwifTtcclxuXHJcblx0XHRcdFx0aWYgKG9wdHMuZGlzcGxheSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHQvKiBTaG93IHRoZSBlbGVtZW50IGJlZm9yZSBzbGlkZURvd24gYmVnaW5zIGFuZCBoaWRlIHRoZSBlbGVtZW50IGFmdGVyIHNsaWRlVXAgY29tcGxldGVzLiAqL1xyXG5cdFx0XHRcdFx0LyogTm90ZTogSW5saW5lIGVsZW1lbnRzIGNhbm5vdCBoYXZlIGRpbWVuc2lvbnMgYW5pbWF0ZWQsIHNvIHRoZXkncmUgcmV2ZXJ0ZWQgdG8gaW5saW5lLWJsb2NrLiAqL1xyXG5cdFx0XHRcdFx0b3B0cy5kaXNwbGF5ID0gKGRpcmVjdGlvbiA9PT0gXCJEb3duXCIgPyAoVmVsb2NpdHkuQ1NTLlZhbHVlcy5nZXREaXNwbGF5VHlwZShlbGVtZW50KSA9PT0gXCJpbmxpbmVcIiA/IFwiaW5saW5lLWJsb2NrXCIgOiBcImJsb2NrXCIpIDogXCJub25lXCIpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0b3B0cy5iZWdpbiA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0LyogSWYgdGhlIHVzZXIgcGFzc2VkIGluIGEgYmVnaW4gY2FsbGJhY2ssIGZpcmUgaXQgbm93LiAqL1xyXG5cdFx0XHRcdFx0aWYgKGVsZW1lbnRzSW5kZXggPT09IDAgJiYgYmVnaW4pIHtcclxuXHRcdFx0XHRcdFx0YmVnaW4uY2FsbChlbGVtZW50cywgZWxlbWVudHMpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8qIENhY2hlIHRoZSBlbGVtZW50cycgb3JpZ2luYWwgdmVydGljYWwgZGltZW5zaW9uYWwgcHJvcGVydHkgdmFsdWVzIHNvIHRoYXQgd2UgY2FuIGFuaW1hdGUgYmFjayB0byB0aGVtLiAqL1xyXG5cdFx0XHRcdFx0Zm9yICh2YXIgcHJvcGVydHkgaW4gY29tcHV0ZWRWYWx1ZXMpIHtcclxuXHRcdFx0XHRcdFx0aWYgKCFjb21wdXRlZFZhbHVlcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcclxuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpbmxpbmVWYWx1ZXNbcHJvcGVydHldID0gZWxlbWVudC5zdHlsZVtwcm9wZXJ0eV07XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBGb3Igc2xpZGVEb3duLCB1c2UgZm9yY2VmZWVkaW5nIHRvIGFuaW1hdGUgYWxsIHZlcnRpY2FsIHByb3BlcnRpZXMgZnJvbSAwLiBGb3Igc2xpZGVVcCxcclxuXHRcdFx0XHRcdFx0IHVzZSBmb3JjZWZlZWRpbmcgdG8gc3RhcnQgZnJvbSBjb21wdXRlZCB2YWx1ZXMgYW5kIGFuaW1hdGUgZG93biB0byAwLiAqL1xyXG5cdFx0XHRcdFx0XHR2YXIgcHJvcGVydHlWYWx1ZSA9IENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIHByb3BlcnR5KTtcclxuXHRcdFx0XHRcdFx0Y29tcHV0ZWRWYWx1ZXNbcHJvcGVydHldID0gKGRpcmVjdGlvbiA9PT0gXCJEb3duXCIpID8gW3Byb3BlcnR5VmFsdWUsIDBdIDogWzAsIHByb3BlcnR5VmFsdWVdO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8qIEZvcmNlIHZlcnRpY2FsIG92ZXJmbG93IGNvbnRlbnQgdG8gY2xpcCBzbyB0aGF0IHNsaWRpbmcgd29ya3MgYXMgZXhwZWN0ZWQuICovXHJcblx0XHRcdFx0XHRpbmxpbmVWYWx1ZXMub3ZlcmZsb3cgPSBlbGVtZW50LnN0eWxlLm92ZXJmbG93O1xyXG5cdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0b3B0cy5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0LyogUmVzZXQgZWxlbWVudCB0byBpdHMgcHJlLXNsaWRlIGlubGluZSB2YWx1ZXMgb25jZSBpdHMgc2xpZGUgYW5pbWF0aW9uIGlzIGNvbXBsZXRlLiAqL1xyXG5cdFx0XHRcdFx0Zm9yICh2YXIgcHJvcGVydHkgaW4gaW5saW5lVmFsdWVzKSB7XHJcblx0XHRcdFx0XHRcdGlmIChpbmxpbmVWYWx1ZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKSB7XHJcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZVtwcm9wZXJ0eV0gPSBpbmxpbmVWYWx1ZXNbcHJvcGVydHldO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogSWYgdGhlIHVzZXIgcGFzc2VkIGluIGEgY29tcGxldGUgY2FsbGJhY2ssIGZpcmUgaXQgbm93LiAqL1xyXG5cdFx0XHRcdFx0aWYgKGVsZW1lbnRzSW5kZXggPT09IGVsZW1lbnRzU2l6ZSAtIDEpIHtcclxuXHRcdFx0XHRcdFx0aWYgKGNvbXBsZXRlKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tcGxldGUuY2FsbChlbGVtZW50cywgZWxlbWVudHMpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChwcm9taXNlRGF0YSkge1xyXG5cdFx0XHRcdFx0XHRcdHByb21pc2VEYXRhLnJlc29sdmVyKGVsZW1lbnRzKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFZlbG9jaXR5KGVsZW1lbnQsIGNvbXB1dGVkVmFsdWVzLCBvcHRzKTtcclxuXHRcdFx0fTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8qIGZhZGVJbiwgZmFkZU91dCAqL1xyXG5cdFx0JC5lYWNoKFtcIkluXCIsIFwiT3V0XCJdLCBmdW5jdGlvbihpLCBkaXJlY3Rpb24pIHtcclxuXHRcdFx0VmVsb2NpdHkuUmVkaXJlY3RzW1wiZmFkZVwiICsgZGlyZWN0aW9uXSA9IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMsIGVsZW1lbnRzSW5kZXgsIGVsZW1lbnRzU2l6ZSwgZWxlbWVudHMsIHByb21pc2VEYXRhKSB7XHJcblx0XHRcdFx0dmFyIG9wdHMgPSAkLmV4dGVuZCh7fSwgb3B0aW9ucyksXHJcblx0XHRcdFx0XHRcdGNvbXBsZXRlID0gb3B0cy5jb21wbGV0ZSxcclxuXHRcdFx0XHRcdFx0cHJvcGVydGllc01hcCA9IHtvcGFjaXR5OiAoZGlyZWN0aW9uID09PSBcIkluXCIpID8gMSA6IDB9O1xyXG5cclxuXHRcdFx0XHQvKiBTaW5jZSByZWRpcmVjdHMgYXJlIHRyaWdnZXJlZCBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggZWxlbWVudCBpbiB0aGUgYW5pbWF0ZWQgc2V0LCBhdm9pZCByZXBlYXRlZGx5IHRyaWdnZXJpbmdcclxuXHRcdFx0XHQgY2FsbGJhY2tzIGJ5IGZpcmluZyB0aGVtIG9ubHkgd2hlbiB0aGUgZmluYWwgZWxlbWVudCBoYXMgYmVlbiByZWFjaGVkLiAqL1xyXG5cdFx0XHRcdGlmIChlbGVtZW50c0luZGV4ICE9PSAwKSB7XHJcblx0XHRcdFx0XHRvcHRzLmJlZ2luID0gbnVsbDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGVsZW1lbnRzSW5kZXggIT09IGVsZW1lbnRzU2l6ZSAtIDEpIHtcclxuXHRcdFx0XHRcdG9wdHMuY29tcGxldGUgPSBudWxsO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRvcHRzLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdGlmIChjb21wbGV0ZSkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbXBsZXRlLmNhbGwoZWxlbWVudHMsIGVsZW1lbnRzKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAocHJvbWlzZURhdGEpIHtcclxuXHRcdFx0XHRcdFx0XHRwcm9taXNlRGF0YS5yZXNvbHZlcihlbGVtZW50cyk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKiBJZiBhIGRpc3BsYXkgd2FzIHBhc3NlZCBpbiwgdXNlIGl0LiBPdGhlcndpc2UsIGRlZmF1bHQgdG8gXCJub25lXCIgZm9yIGZhZGVPdXQgb3IgdGhlIGVsZW1lbnQtc3BlY2lmaWMgZGVmYXVsdCBmb3IgZmFkZUluLiAqL1xyXG5cdFx0XHRcdC8qIE5vdGU6IFdlIGFsbG93IHVzZXJzIHRvIHBhc3MgaW4gXCJudWxsXCIgdG8gc2tpcCBkaXNwbGF5IHNldHRpbmcgYWx0b2dldGhlci4gKi9cclxuXHRcdFx0XHRpZiAob3B0cy5kaXNwbGF5ID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdG9wdHMuZGlzcGxheSA9IChkaXJlY3Rpb24gPT09IFwiSW5cIiA/IFwiYXV0b1wiIDogXCJub25lXCIpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0VmVsb2NpdHkodGhpcywgcHJvcGVydGllc01hcCwgb3B0cyk7XHJcblx0XHRcdH07XHJcblx0XHR9KTtcclxuXHJcblx0XHRyZXR1cm4gVmVsb2NpdHk7XHJcblx0fSgod2luZG93LmpRdWVyeSB8fCB3aW5kb3cuWmVwdG8gfHwgd2luZG93KSwgd2luZG93LCAod2luZG93ID8gd2luZG93LmRvY3VtZW50IDogdW5kZWZpbmVkKSk7XHJcbn0pKTtcclxuXHJcbi8qKioqKioqKioqKioqKioqKipcclxuIEtub3duIElzc3Vlc1xyXG4gKioqKioqKioqKioqKioqKioqL1xyXG5cclxuLyogVGhlIENTUyBzcGVjIG1hbmRhdGVzIHRoYXQgdGhlIHRyYW5zbGF0ZVgvWS9aIHRyYW5zZm9ybXMgYXJlICUtcmVsYXRpdmUgdG8gdGhlIGVsZW1lbnQgaXRzZWxmIC0tIG5vdCBpdHMgcGFyZW50LlxyXG4gVmVsb2NpdHksIGhvd2V2ZXIsIGRvZXNuJ3QgbWFrZSB0aGlzIGRpc3RpbmN0aW9uLiBUaHVzLCBjb252ZXJ0aW5nIHRvIG9yIGZyb20gdGhlICUgdW5pdCB3aXRoIHRoZXNlIHN1YnByb3BlcnRpZXNcclxuIHdpbGwgcHJvZHVjZSBhbiBpbmFjY3VyYXRlIGNvbnZlcnNpb24gdmFsdWUuIFRoZSBzYW1lIGlzc3VlIGV4aXN0cyB3aXRoIHRoZSBjeC9jeSBhdHRyaWJ1dGVzIG9mIFNWRyBjaXJjbGVzIGFuZCBlbGxpcHNlcy4gKi9cclxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1cGRhdGVTb3VyY2VzKGltZywgc291cmNlcykge1xuICBpZiAoc291cmNlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gR2V0IHNvdXJjZSBzaWJsaW5ncyBvZiB0aGUgaW1nIHRhZ1xuICBjb25zdCBpbWdTaWJsaW5nV2VicCA9ICQoaW1nKS5zaWJsaW5ncygnc291cmNlW3R5cGU9XCJpbWFnZS93ZWJwXCJdJyk7XG4gIGNvbnN0IGltZ1NpYmxpbmdBdmlmID0gJChpbWcpLnNpYmxpbmdzKCdzb3VyY2VbdHlwZT1cImltYWdlL2F2aWZcIl0nKTtcblxuICAvLyBVcGRhdGUgdGhlbSBpZiB0aGV5IGV4aXN0IGFuZCB3ZSBoYXZlIGEgc291cmNlIGZvciB0aGVtXG4gIGlmIChzb3VyY2VzLndlYnAgIT09IHVuZGVmaW5lZCAmJiBpbWdTaWJsaW5nV2VicC5sZW5ndGgpIHtcbiAgICBpbWdTaWJsaW5nV2VicC5hdHRyKCdzcmNzZXQnLCBzb3VyY2VzLndlYnApO1xuICB9XG4gIGlmIChzb3VyY2VzLmF2aWYgIT09IHVuZGVmaW5lZCAmJiBpbWdTaWJsaW5nQXZpZi5sZW5ndGgpIHtcbiAgICBpbWdTaWJsaW5nQXZpZi5hdHRyKCdzcmNzZXQnLCBzb3VyY2VzLmF2aWYpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKi9cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb2R1Y3RNaW5pdGF0dXJlIHtcbiAgaW5pdCgpIHtcbiAgICAkKCcuanMtcHJvZHVjdC1taW5pYXR1cmUnKS5lYWNoKChpbmRleCwgZWxlbWVudCkgPT4ge1xuICAgICAgLy8gTGltaXQgbnVtYmVyIG9mIHNob3duIGNvbG9yc1xuICAgICAgaWYgKCQoZWxlbWVudCkuZmluZCgnLmNvbG9yJykubGVuZ3RoID4gNSkge1xuICAgICAgICBsZXQgY291bnQgPSAwO1xuXG4gICAgICAgICQoZWxlbWVudClcbiAgICAgICAgICAuZmluZCgnLmNvbG9yJylcbiAgICAgICAgICAuZWFjaCgoY29sb3JJbmRleCwgY29sb3JFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoY29sb3JJbmRleCA+IDQpIHtcbiAgICAgICAgICAgICAgJChjb2xvckVsZW1lbnQpLmhpZGUoKTtcbiAgICAgICAgICAgICAgY291bnQgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJy5qcy1jb3VudCcpLmFwcGVuZChgKyR7Y291bnR9YCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjAgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqL1xuaW1wb3J0ICQgZnJvbSBcImpxdWVyeVwiO1xuaW1wb3J0IHByZXN0YXNob3AgZnJvbSBcInByZXN0YXNob3BcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuaW1wb3J0IFwidmVsb2NpdHktYW5pbWF0ZVwiO1xuaW1wb3J0IHVwZGF0ZVNvdXJjZXMgZnJvbSBcIi4vY29tcG9uZW50cy91cGRhdGUtc291cmNlc1wiO1xuaW1wb3J0IFByb2R1Y3RNaW5pdGF0dXJlIGZyb20gXCIuL2NvbXBvbmVudHMvcHJvZHVjdC1taW5pYXR1cmVcIjtcblxuXG5cbiQoZG9jdW1lbnQpLnJlYWR5KCgpID0+IHtcbiAgbGV0IHBhZ2VGaWx0ZXIgPSBmYWxzZTtcblxuICAkKFwiI3BhZ2luYXRpb24tYW5jaG9yLmpzLXNlYXJjaC1saW5rXCIpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgIHBhZ2VGaWx0ZXIgPSB0cnVlXG4gIH0gKVxuICBjb25zdCBtb3ZlID0gKGRpcmVjdGlvbikgPT4ge1xuICAgIGNvbnN0IFRIVU1CX01BUkdJTiA9IDIwO1xuICAgIGNvbnN0ICR0aHVtYm5haWxzID0gJChcIi5qcy1xdi1wcm9kdWN0LWltYWdlc1wiKTtcbiAgICBjb25zdCB0aHVtYkhlaWdodCA9XG4gICAgICAkKFwiLmpzLXF2LXByb2R1Y3QtaW1hZ2VzIGxpIGltZ1wiKS5oZWlnaHQoKSArIFRIVU1CX01BUkdJTjtcbiAgICBjb25zdCBjdXJyZW50UG9zaXRpb24gPSAkdGh1bWJuYWlscy5wb3NpdGlvbigpLnRvcDtcbiAgICAkdGh1bWJuYWlscy52ZWxvY2l0eShcbiAgICAgIHtcbiAgICAgICAgdHJhbnNsYXRlWTpcbiAgICAgICAgICBkaXJlY3Rpb24gPT09IFwidXBcIlxuICAgICAgICAgICAgPyBjdXJyZW50UG9zaXRpb24gKyB0aHVtYkhlaWdodFxuICAgICAgICAgICAgOiBjdXJyZW50UG9zaXRpb24gLSB0aHVtYkhlaWdodCxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICgkdGh1bWJuYWlscy5wb3NpdGlvbigpLnRvcCA+PSAwKSB7XG4gICAgICAgICAgJChcIi5hcnJvdy11cFwiKS5jc3MoXCJvcGFjaXR5XCIsIFwiLjJcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgJHRodW1ibmFpbHMucG9zaXRpb24oKS50b3AgKyAkdGh1bWJuYWlscy5oZWlnaHQoKSA8PVxuICAgICAgICAgICQoXCIuanMtcXYtbWFza1wiKS5oZWlnaHQoKVxuICAgICAgICApIHtcbiAgICAgICAgICAkKFwiLmFycm93LWRvd25cIikuY3NzKFwib3BhY2l0eVwiLCBcIi4yXCIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgcHJvZHVjdENvbmZpZyA9IChxdikgPT4ge1xuICAgIGNvbnN0IE1BWF9USFVNQlMgPSA0O1xuICAgIGNvbnN0ICRhcnJvd3MgPSAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5hcnJvd3MpO1xuICAgIGNvbnN0ICR0aHVtYm5haWxzID0gcXYuZmluZChcIi5qcy1xdi1wcm9kdWN0LWltYWdlc1wiKTtcbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC50aHVtYikub24oXCJjbGlja1wiLCAoZXZlbnQpID0+IHtcbiAgICAgIC8vIFN3YXAgYWN0aXZlIGNsYXNzZXMgb24gdGh1bWJuYWlsXG4gICAgICBpZiAoJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QudGh1bWIpLmhhc0NsYXNzKFwic2VsZWN0ZWRcIikpIHtcbiAgICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QudGh1bWIpLnJlbW92ZUNsYXNzKFwic2VsZWN0ZWRcIik7XG4gICAgICB9XG4gICAgICAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmFkZENsYXNzKFwic2VsZWN0ZWRcIik7XG5cbiAgICAgIC8vIEdldCBkYXRhIGZyb20gdGh1bWJuYWlsIGFuZCB1cGRhdGUgY292ZXIgc3JjLCBhbHQgYW5kIHRpdGxlXG4gICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5jb3ZlcikuYXR0cihcbiAgICAgICAgXCJzcmNcIixcbiAgICAgICAgJChldmVudC50YXJnZXQpLmRhdGEoXCJpbWFnZS1sYXJnZS1zcmNcIiksXG4gICAgICApO1xuICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QuY292ZXIpLmF0dHIoXG4gICAgICAgIFwiYWx0XCIsXG4gICAgICAgICQoZXZlbnQudGFyZ2V0KS5hdHRyKFwiYWx0XCIpLFxuICAgICAgKTtcbiAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmNvdmVyKS5hdHRyKFxuICAgICAgICBcInRpdGxlXCIsXG4gICAgICAgICQoZXZlbnQudGFyZ2V0KS5hdHRyKFwidGl0bGVcIiksXG4gICAgICApO1xuXG4gICAgICAvLyBHZXQgZGF0YSBmcm9tIHRodW1ibmFpbCBhbmQgdXBkYXRlIGNvdmVyIHNvdXJjZXNcbiAgICAgIHVwZGF0ZVNvdXJjZXMoXG4gICAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmNvdmVyKSxcbiAgICAgICAgJChldmVudC50YXJnZXQpLmRhdGEoXCJpbWFnZS1sYXJnZS1zb3VyY2VzXCIpLFxuICAgICAgKTtcbiAgICB9KTtcbiAgICBpZiAoJHRodW1ibmFpbHMuZmluZChcImxpXCIpLmxlbmd0aCA8PSBNQVhfVEhVTUJTKSB7XG4gICAgICAkYXJyb3dzLmhpZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJGFycm93cy5vbihcImNsaWNrXCIsIChldmVudCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgJChldmVudC50YXJnZXQpLmhhc0NsYXNzKFwiYXJyb3ctdXBcIikgJiZcbiAgICAgICAgICAkKFwiLmpzLXF2LXByb2R1Y3QtaW1hZ2VzXCIpLnBvc2l0aW9uKCkudG9wIDwgMFxuICAgICAgICApIHtcbiAgICAgICAgICBtb3ZlKFwidXBcIik7XG4gICAgICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmFycm93RG93bikuY3NzKFwib3BhY2l0eVwiLCBcIjFcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgJChldmVudC50YXJnZXQpLmhhc0NsYXNzKFwiYXJyb3ctZG93blwiKSAmJlxuICAgICAgICAgICR0aHVtYm5haWxzLnBvc2l0aW9uKCkudG9wICsgJHRodW1ibmFpbHMuaGVpZ2h0KCkgPlxuICAgICAgICAgICAgJChcIi5qcy1xdi1tYXNrXCIpLmhlaWdodCgpXG4gICAgICAgICkge1xuICAgICAgICAgIG1vdmUoXCJkb3duXCIpO1xuICAgICAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5hcnJvd1VwKS5jc3MoXCJvcGFjaXR5XCIsIFwiMVwiKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHF2LmZpbmQocHJlc3Rhc2hvcC5zZWxlY3RvcnMucXVhbnRpdHlXYW50ZWQpLlRvdWNoU3Bpbih7XG4gICAgICB2ZXJ0aWNhbGJ1dHRvbnM6IHRydWUsXG4gICAgICBtaW46IDEsXG4gICAgICBtYXg6IDEwMDAwMDAsXG4gICAgfSk7XG5cbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMudG91Y2hzcGluKS5vZmYoXCJ0b3VjaHN0YXJ0LnRvdWNoc3BpblwiKTtcbiAgfTtcblxuICBwcmVzdGFzaG9wLm9uKFwiY2xpY2tRdWlja1ZpZXdcIiwgKGVsbSkgPT4ge1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBhY3Rpb246IFwicXVpY2t2aWV3XCIsXG4gICAgICBpZF9wcm9kdWN0OiBlbG0uZGF0YXNldC5pZFByb2R1Y3QsXG4gICAgICBpZF9wcm9kdWN0X2F0dHJpYnV0ZTogZWxtLmRhdGFzZXQuaWRQcm9kdWN0QXR0cmlidXRlLFxuICAgIH07XG4gICAgJC5wb3N0KHByZXN0YXNob3AudXJscy5wYWdlcy5wcm9kdWN0LCBkYXRhLCBudWxsLCBcImpzb25cIilcbiAgICAgIC50aGVuKChyZXNwKSA9PiB7XG4gICAgICAgICQoXCJib2R5XCIpLmFwcGVuZChyZXNwLnF1aWNrdmlld19odG1sKTtcbiAgICAgICAgY29uc3QgcHJvZHVjdE1vZGFsID0gJChcbiAgICAgICAgICBgI3F1aWNrdmlldy1tb2RhbC0ke3Jlc3AucHJvZHVjdC5pZH0tJHtyZXNwLnByb2R1Y3QuaWRfcHJvZHVjdF9hdHRyaWJ1dGV9YCxcbiAgICAgICAgKTtcbiAgICAgICAgcHJvZHVjdE1vZGFsLm1vZGFsKFwic2hvd1wiKTtcbiAgICAgICAgcHJvZHVjdENvbmZpZyhwcm9kdWN0TW9kYWwpO1xuICAgICAgICBwcm9kdWN0TW9kYWwub24oXCJoaWRkZW4uYnMubW9kYWxcIiwgKCkgPT4ge1xuICAgICAgICAgIHByb2R1Y3RNb2RhbC5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLmZhaWwoKHJlc3ApID0+IHtcbiAgICAgICAgcHJlc3Rhc2hvcC5lbWl0KFwiaGFuZGxlRXJyb3JcIiwge1xuICAgICAgICAgIGV2ZW50VHlwZTogXCJjbGlja1F1aWNrVmlld1wiLFxuICAgICAgICAgIHJlc3AsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH0pO1xuXG4gICQoXCJib2R5XCIpLm9uKFxuICAgIFwiY2xpY2tcIixcbiAgICBwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmxpc3Rpbmcuc2VhcmNoRmlsdGVyVG9nZ2xlcixcbiAgICAoKSA9PiB7XG4gICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5zZWFyY2hGaWx0ZXJzV3JhcHBlcikucmVtb3ZlQ2xhc3MoXG4gICAgICAgIFwiaGlkZGVuLXNtLWRvd25cIixcbiAgICAgICk7XG4gICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY29udGVudFdyYXBwZXIpLmFkZENsYXNzKFwiaGlkZGVuLXNtLWRvd25cIik7XG4gICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuZm9vdGVyKS5hZGRDbGFzcyhcImhpZGRlbi1zbS1kb3duXCIpO1xuICAgIH0sXG4gICk7XG4gICQoXG4gICAgYCR7cHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5saXN0aW5nLnNlYXJjaEZpbHRlckNvbnRyb2xzfSAke3ByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY2xlYXJ9YCxcbiAgKS5vbihcImNsaWNrXCIsICgpID0+IHtcbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5zZWFyY2hGaWx0ZXJzV3JhcHBlcikuYWRkQ2xhc3MoXG4gICAgICBcImhpZGRlbi1zbS1kb3duXCIsXG4gICAgKTtcbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY29udGVudFdyYXBwZXIpLnJlbW92ZUNsYXNzKFwiaGlkZGVuLXNtLWRvd25cIik7XG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmZvb3RlcikucmVtb3ZlQ2xhc3MoXCJoaWRkZW4tc20tZG93blwiKTtcbiAgfSk7XG4gICQoYCR7cHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5saXN0aW5nLnNlYXJjaEZpbHRlckNvbnRyb2xzfSAub2tgKS5vbihcbiAgICBcImNsaWNrXCIsXG4gICAgKCkgPT4ge1xuICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmxpc3Rpbmcuc2VhcmNoRmlsdGVyc1dyYXBwZXIpLmFkZENsYXNzKFxuICAgICAgICBcImhpZGRlbi1zbS1kb3duXCIsXG4gICAgICApO1xuICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNvbnRlbnRXcmFwcGVyKS5yZW1vdmVDbGFzcyhcImhpZGRlbi1zbS1kb3duXCIpO1xuICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmZvb3RlcikucmVtb3ZlQ2xhc3MoXCJoaWRkZW4tc20tZG93blwiKTtcbiAgICB9LFxuICApO1xuXG4gIGNvbnN0IHBhcnNlU2VhcmNoVXJsID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnRhcmdldC5kYXRhc2V0LnNlYXJjaFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXZlbnQudGFyZ2V0LmRhdGFzZXQuc2VhcmNoVXJsO1xuICAgIH1cblxuICAgIGlmICgkKGV2ZW50LnRhcmdldCkucGFyZW50KClbMF0uZGF0YXNldC5zZWFyY2hVcmwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuIG5vdCBwYXJzZSBzZWFyY2ggVVJMXCIpO1xuICAgIH1cblxuICAgIHJldHVybiAkKGV2ZW50LnRhcmdldCkucGFyZW50KClbMF0uZGF0YXNldC5zZWFyY2hVcmw7XG4gIH07XG5cbiAgZnVuY3Rpb24gdXBkYXRlUHJvZHVjdExpc3RET00oZGF0YSkge1xuICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5saXN0aW5nLnNlYXJjaEZpbHRlcnMpLnJlcGxhY2VXaXRoKFxuICAgICAgZGF0YS5yZW5kZXJlZF9mYWNldHMsXG4gICAgKTtcbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5hY3RpdmVTZWFyY2hGaWx0ZXJzKS5yZXBsYWNlV2l0aChcbiAgICAgIGRhdGEucmVuZGVyZWRfYWN0aXZlX2ZpbHRlcnMsXG4gICAgKTtcbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5saXN0VG9wKS5yZXBsYWNlV2l0aChcbiAgICAgIGRhdGEucmVuZGVyZWRfcHJvZHVjdHNfdG9wLFxuICAgICk7XG5cbiAgICBjb25zdCByZW5kZXJlZFByb2R1Y3RzID0gJChkYXRhLnJlbmRlcmVkX3Byb2R1Y3RzKTtcbiAgICBjb25zdCBwcm9kdWN0U2VsZWN0b3JzID0gJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmxpc3RpbmcucHJvZHVjdCk7XG5cbiAgICBpZiAocHJvZHVjdFNlbGVjdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBwcm9kdWN0U2VsZWN0b3JzXG4gICAgICAgIC5yZW1vdmVDbGFzcygpXG4gICAgICAgIC5hZGRDbGFzcyhwcm9kdWN0U2VsZWN0b3JzLmZpcnN0KCkuYXR0cihcImNsYXNzXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvZHVjdFNlbGVjdG9yc1xuICAgICAgICAucmVtb3ZlQ2xhc3MoKVxuICAgICAgICAuYWRkQ2xhc3MocmVuZGVyZWRQcm9kdWN0cy5maXJzdCgpLmF0dHIoXCJjbGFzc1wiKSk7XG4gICAgfVxuXG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmxpc3RpbmcubGlzdCkucmVwbGFjZVdpdGgocmVuZGVyZWRQcm9kdWN0cyk7XG5cbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5saXN0Qm90dG9tKS5yZXBsYWNlV2l0aChcbiAgICAgIGRhdGEucmVuZGVyZWRfcHJvZHVjdHNfYm90dG9tLFxuICAgICk7XG4gICAgaWYgKGRhdGEucmVuZGVyZWRfcHJvZHVjdHNfaGVhZGVyKSB7XG4gICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5saXN0SGVhZGVyKS5yZXBsYWNlV2l0aChcbiAgICAgICAgZGF0YS5yZW5kZXJlZF9wcm9kdWN0c19oZWFkZXIsXG4gICAgICApO1xuICAgIH1cblxuICAgICQoJyNzaG93LWZpbHRlcnMnKS5vbignY2xpY2sub2ZmY2FudmFzJywgKCkgPT4ge1xuICAgICAgJCgnI3Byb2R1Y3QtbGlzdC10b3AtZmlsdGVycycpLnNob3coKTtcbiAgICB9KTtcbiAgXG4gICAgJCgnI2hpZGUtZmlsdGVycycpLm9uKCdjbGljay5vZmZjYW52YXMnLCAoKSA9PiB7XG4gICAgICAkKCcjcHJvZHVjdC1saXN0LXRvcC1maWx0ZXJzJykuaGlkZSgpO1xuICAgICAgJCgnI292ZXJsYXknKS5oaWRlKCk7IFxuICAgIH0pO1xuXG4gICAgJCgnI3Nob3ctZmlsdGVycycpLmNsaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgJCgnI292ZXJsYXknKS5zaG93KCk7XG4gICAgfSk7XG5cbiAgICAkKFwiI3BhZ2luYXRpb24tYW5jaG9yLmpzLXNlYXJjaC1saW5rXCIpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICAgcGFnZUZpbHRlciA9IHRydWVcbiAgICB9IClcblxuICBcbiAgICBmdW5jdGlvbiBjaGVja0FuZFNob3dPdmVybGF5KCkge1xuICAgICAgaWYgKCQoJyNwcm9kdWN0LWxpc3QtdG9wLWZpbHRlcnMnKS5pcygnOnZpc2libGUnKSkgeyBcbiAgICAgICAgICAkKCcjb3ZlcmxheScpLnNob3coKTtcbiAgICAgIH0gZWxzZSB7IFxuICAgICAgICAgICQoJyNvdmVybGF5JykuaGlkZSgpO1xuICAgICAgfVxuICB9XG5cbiAgICBpZiAoICFwYWdlRmlsdGVyICkge1xuICAgICAgJCgnI3Byb2R1Y3QtbGlzdC10b3AtZmlsdGVycycpLnNob3coZnVuY3Rpb24oKSB7XG4gICAgICAgIGNoZWNrQW5kU2hvd092ZXJsYXkoKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAkKCcjcHJvZHVjdC1saXN0LXRvcC1maWx0ZXJzJykuaGlkZSgpO1xuICAgIH1cblxuICAgICQoJyNvdmVybGF5Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgICAkKCcjcHJvZHVjdC1saXN0LXRvcC1maWx0ZXJzJykuaGlkZSgpO1xuICAgICAgJCgnI292ZXJsYXknKS5oaWRlKCk7ICBcbiAgICAgXG4gIH0pO1xuXHQgICBwYWdlRmlsdGVyID0gZmFsc2VcblxuICAgICQoJy50aC1hY2NvcmRpb24nKS50aGFjY29yZGlvbigpO1xuXG4gICAgY29uc3QgcHJvZHVjdE1pbml0YXR1cmUgPSBuZXcgUHJvZHVjdE1pbml0YXR1cmUoKTtcbiAgICBwcm9kdWN0TWluaXRhdHVyZS5pbml0KCk7XG4gIH1cblxuICBcblxuICAkKFwiYm9keVwiKS5vbihcbiAgICBcImNoYW5nZVwiLFxuICAgIGAke3ByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5zZWFyY2hGaWx0ZXJzfSBpbnB1dFtkYXRhLXNlYXJjaC11cmxdYCxcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIHByZXN0YXNob3AuZW1pdChcInVwZGF0ZUZhY2V0c1wiLCBwYXJzZVNlYXJjaFVybChldmVudCkpO1xuICAgIH0sXG4gICk7XG5cbiAgJChcImJvZHlcIikub24oXG4gICAgXCJjbGlja1wiLFxuICAgIHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5zZWFyY2hGaWx0ZXJzQ2xlYXJBbGwsXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICBwcmVzdGFzaG9wLmVtaXQoXCJ1cGRhdGVGYWNldHNcIiwgcGFyc2VTZWFyY2hVcmwoZXZlbnQpKTtcbiAgICB9LFxuICApO1xuXG4gICQoXCJib2R5XCIpLm9uKFxuICAgIFwiY2xpY2tcIixcbiAgICBwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmxpc3Rpbmcuc2VhcmNoTGluayxcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBwcmVzdGFzaG9wLmVtaXQoXCJ1cGRhdGVGYWNldHNcIiwgJChldmVudC50YXJnZXQpLmNsb3Nlc3QoXCJhXCIpLmdldCgwKS5ocmVmKTtcbiAgICB9LFxuICApO1xuXG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgKGUpID0+IHtcbiAgICBpZiAoZS5zdGF0ZSAmJiBlLnN0YXRlLmN1cnJlbnRfdXJsKSB7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGUuc3RhdGUuY3VycmVudF91cmw7XG4gICAgfVxuICB9KTtcblxuICAkKFwiYm9keVwiKS5vbihcbiAgICBcImNoYW5nZVwiLFxuICAgIGAke3ByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5zZWFyY2hGaWx0ZXJzfSBzZWxlY3RgLFxuICAgIChldmVudCkgPT4ge1xuICAgICAgY29uc3QgZm9ybSA9ICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFwiZm9ybVwiKTtcbiAgICAgIHByZXN0YXNob3AuZW1pdChcInVwZGF0ZUZhY2V0c1wiLCBgPyR7Zm9ybS5zZXJpYWxpemUoKX1gKTtcbiAgICB9LFxuICApO1xuXG4gIHByZXN0YXNob3Aub24oXCJ1cGRhdGVQcm9kdWN0TGlzdFwiLCAoZGF0YSkgPT4ge1xuICAgIHVwZGF0ZVByb2R1Y3RMaXN0RE9NKGRhdGEpO1xuICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgfSk7XG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjAgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqL1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuaW1wb3J0ICd2ZWxvY2l0eS1hbmltYXRlJztcbi8vIGltcG9ydCB1cGRhdGVTb3VyY2VzIGZyb20gJ3VwZGF0ZS1zb3VyY2VzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvZHVjdFNlbGVjdCB7XG4gIGluaXQoKSB7XG4gICAgY29uc3QgTUFYX1RIVU1CUyA9IDU7XG4gICAgY29uc3QgJGFycm93cyA9ICQoJy5qcy1tb2RhbC1hcnJvd3MnKTtcbiAgICBjb25zdCAkdGh1bWJuYWlscyA9ICQoJy5qcy1tb2RhbC1wcm9kdWN0LWltYWdlcycpO1xuXG4gICAgJCgnYm9keScpXG4gICAgICAub24oJ2NsaWNrJywgJy5qcy1tb2RhbC10aHVtYicsIChldmVudCkgPT4ge1xuICAgICAgICAvLyBTd2FwIGFjdGl2ZSBjbGFzc2VzIG9uIHRodW1ibmFpbFxuICAgICAgICBpZiAoJCgnLmpzLW1vZGFsLXRodW1iJykuaGFzQ2xhc3MoJ3NlbGVjdGVkJykpIHtcbiAgICAgICAgICAkKCcuanMtbW9kYWwtdGh1bWInKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmFkZENsYXNzKCdzZWxlY3RlZCcpO1xuXG4gICAgICAgIC8vIEdldCBkYXRhIGZyb20gdGh1bWJuYWlsIGFuZCB1cGRhdGUgY292ZXIgc3JjLCBhbHQgYW5kIHRpdGxlXG4gICAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0Lm1vZGFsUHJvZHVjdENvdmVyKS5hdHRyKCdzcmMnLCAkKGV2ZW50LnRhcmdldCkuZGF0YSgnaW1hZ2UtbGFyZ2Utc3JjJykpO1xuICAgICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5tb2RhbFByb2R1Y3RDb3ZlcikuYXR0cigndGl0bGUnLCAkKGV2ZW50LnRhcmdldCkuYXR0cigndGl0bGUnKSk7XG4gICAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0Lm1vZGFsUHJvZHVjdENvdmVyKS5hdHRyKCdhbHQnLCAkKGV2ZW50LnRhcmdldCkuYXR0cignYWx0JykpO1xuXG4gICAgICAgIC8vIEdldCBkYXRhIGZyb20gdGh1bWJuYWlsIGFuZCB1cGRhdGUgY292ZXIgc291cmNlc1xuICAgICAgICAvLyB1cGRhdGVTb3VyY2VzKFxuICAgICAgICAvLyAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0Lm1vZGFsUHJvZHVjdENvdmVyKSxcbiAgICAgICAgLy8gICAkKGV2ZW50LnRhcmdldCkuZGF0YSgnaW1hZ2UtbGFyZ2Utc291cmNlcycpLFxuICAgICAgICAvLyApO1xuICAgICAgfSlcbiAgICAgIC5vbignY2xpY2snLCAnYXNpZGUjdGh1bWJuYWlscycsIChldmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmlkID09PSAndGh1bWJuYWlscycpIHtcbiAgICAgICAgICAkKCcjcHJvZHVjdC1tb2RhbCcpLm1vZGFsKCdoaWRlJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgaWYgKCQoJy5qcy1tb2RhbC1wcm9kdWN0LWltYWdlcyBsaScpLmxlbmd0aCA8PSBNQVhfVEhVTUJTKSB7XG4gICAgICAkYXJyb3dzLmNzcygnb3BhY2l0eScsICcuMicpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkYXJyb3dzLm9uKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgICBpZiAoJChldmVudC50YXJnZXQpLmhhc0NsYXNzKCdhcnJvdy11cCcpICYmICR0aHVtYm5haWxzLnBvc2l0aW9uKCkudG9wIDwgMCkge1xuICAgICAgICAgIHRoaXMubW92ZSgndXAnKTtcbiAgICAgICAgICAkKCcuanMtbW9kYWwtYXJyb3ctZG93bicpLmNzcygnb3BhY2l0eScsICcxJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgJChldmVudC50YXJnZXQpLmhhc0NsYXNzKCdhcnJvdy1kb3duJylcbiAgICAgICAgICAmJiAkdGh1bWJuYWlscy5wb3NpdGlvbigpLnRvcCArICR0aHVtYm5haWxzLmhlaWdodCgpID4gJCgnLmpzLW1vZGFsLW1hc2snKS5oZWlnaHQoKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLm1vdmUoJ2Rvd24nKTtcbiAgICAgICAgICAkKCcuanMtbW9kYWwtYXJyb3ctdXAnKS5jc3MoJ29wYWNpdHknLCAnMScpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBtb3ZlKGRpcmVjdGlvbikge1xuICAgIGNvbnN0IFRIVU1CX01BUkdJTiA9IDEwO1xuICAgIGNvbnN0ICR0aHVtYm5haWxzID0gJCgnLmpzLW1vZGFsLXByb2R1Y3QtaW1hZ2VzJyk7XG4gICAgY29uc3QgdGh1bWJIZWlnaHQgPSAkKCcuanMtbW9kYWwtcHJvZHVjdC1pbWFnZXMgbGkgaW1nJykuaGVpZ2h0KCkgKyBUSFVNQl9NQVJHSU47XG4gICAgY29uc3QgY3VycmVudFBvc2l0aW9uID0gJHRodW1ibmFpbHMucG9zaXRpb24oKS50b3A7XG4gICAgJHRodW1ibmFpbHMudmVsb2NpdHkoXG4gICAgICB7XG4gICAgICAgIHRyYW5zbGF0ZVk6IGRpcmVjdGlvbiA9PT0gJ3VwJyA/IGN1cnJlbnRQb3NpdGlvbiArIHRodW1iSGVpZ2h0IDogY3VycmVudFBvc2l0aW9uIC0gdGh1bWJIZWlnaHQsXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAoJHRodW1ibmFpbHMucG9zaXRpb24oKS50b3AgPj0gMCkge1xuICAgICAgICAgICQoJy5qcy1tb2RhbC1hcnJvdy11cCcpLmNzcygnb3BhY2l0eScsICcuMicpO1xuICAgICAgICB9IGVsc2UgaWYgKCR0aHVtYm5haWxzLnBvc2l0aW9uKCkudG9wICsgJHRodW1ibmFpbHMuaGVpZ2h0KCkgPD0gJCgnLmpzLW1vZGFsLW1hc2snKS5oZWlnaHQoKSkge1xuICAgICAgICAgICQoJy5qcy1tb2RhbC1hcnJvdy1kb3duJykuY3NzKCdvcGFjaXR5JywgJy4yJyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IHByZXN0YXNob3AgZnJvbSAncHJlc3Rhc2hvcCc7XG5pbXBvcnQgUHJvZHVjdFNlbGVjdCBmcm9tICcuL2NvbXBvbmVudHMvcHJvZHVjdC1zZWxlY3QnO1xuaW1wb3J0IHVwZGF0ZVNvdXJjZXMgZnJvbSAnLi9jb21wb25lbnRzL3VwZGF0ZS1zb3VyY2VzJztcblxuJChkb2N1bWVudCkucmVhZHkoKCkgPT4ge1xuICBmdW5jdGlvbiBjb3ZlckltYWdlKCkge1xuICAgIGNvbnN0IHByb2R1Y3RDb3ZlciA9ICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmNvdmVyKTtcbiAgICBjb25zdCBtb2RhbFByb2R1Y3RDb3ZlciA9ICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0Lm1vZGFsUHJvZHVjdENvdmVyKTtcbiAgICBsZXQgdGh1bWJTZWxlY3RlZCA9ICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LnNlbGVjdGVkKTtcblxuICAgIGNvbnN0IHN3aXBlID0gKHNlbGVjdGVkVGh1bWIsIHRodW1iUGFyZW50KSA9PiB7XG4gICAgICBjb25zdCBuZXdTZWxlY3RlZFRodW1iID0gdGh1bWJQYXJlbnQuZmluZChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QudGh1bWIpO1xuXG4gICAgICAvLyBTd2FwIGFjdGl2ZSBjbGFzc2VzIG9uIHRodW1ibmFpbFxuICAgICAgc2VsZWN0ZWRUaHVtYi5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgIG5ld1NlbGVjdGVkVGh1bWIuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XG5cbiAgICAgIC8vIFVwZGF0ZSBzb3VyY2VzIG9mIGJvdGggY292ZXIgYW5kIG1vZGFsIGNvdmVyXG4gICAgICBtb2RhbFByb2R1Y3RDb3Zlci5wcm9wKCdzcmMnLCBuZXdTZWxlY3RlZFRodW1iLmRhdGEoJ2ltYWdlLWxhcmdlLXNyYycpKTtcbiAgICAgIHByb2R1Y3RDb3Zlci5wcm9wKCdzcmMnLCBuZXdTZWxlY3RlZFRodW1iLmRhdGEoJ2ltYWdlLW1lZGl1bS1zcmMnKSk7XG4gICAgICAkKCcuZWFzeXpvb20gI2Vhc3l6b29tLWxhcmdlLWltZy1hbmNob3InKS5hdHRyKCdocmVmJywgbmV3U2VsZWN0ZWRUaHVtYi5kYXRhKCdpbWFnZS1sYXJnZS1zcmMnKSk7XG5cbiAgICAgIC8vIEdldCBkYXRhIGZyb20gdGh1bWJuYWlsIGFuZCB1cGRhdGUgY292ZXIgc3JjLCBhbHQgYW5kIHRpdGxlXG4gICAgICBwcm9kdWN0Q292ZXIuYXR0cigndGl0bGUnLCBuZXdTZWxlY3RlZFRodW1iLmF0dHIoJ3RpdGxlJykpO1xuICAgICAgbW9kYWxQcm9kdWN0Q292ZXIuYXR0cigndGl0bGUnLCBuZXdTZWxlY3RlZFRodW1iLmF0dHIoJ3RpdGxlJykpO1xuICAgICAgcHJvZHVjdENvdmVyLmF0dHIoJ2FsdCcsIG5ld1NlbGVjdGVkVGh1bWIuYXR0cignYWx0JykpO1xuICAgICAgbW9kYWxQcm9kdWN0Q292ZXIuYXR0cignYWx0JywgbmV3U2VsZWN0ZWRUaHVtYi5hdHRyKCdhbHQnKSk7XG5cbiAgICAgIC8vIEdldCBkYXRhIGZyb20gdGh1bWJuYWlsIGFuZCB1cGRhdGUgY292ZXIgc291cmNlc1xuICAgICAgdXBkYXRlU291cmNlcyhwcm9kdWN0Q292ZXIsIG5ld1NlbGVjdGVkVGh1bWIuZGF0YSgnaW1hZ2UtbWVkaXVtLXNvdXJjZXMnKSk7XG4gICAgICB1cGRhdGVTb3VyY2VzKG1vZGFsUHJvZHVjdENvdmVyLCBuZXdTZWxlY3RlZFRodW1iLmRhdGEoJ2ltYWdlLWxhcmdlLXNvdXJjZXMnKSk7XG4gICAgfTtcblxuICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LnRodW1iKS5vbignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgIHRodW1iU2VsZWN0ZWQgPSAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5zZWxlY3RlZCk7XG4gICAgICBzd2lwZSh0aHVtYlNlbGVjdGVkLCAkKGV2ZW50LnRhcmdldCkuY2xvc2VzdChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QudGh1bWJDb250YWluZXIpKTtcbiAgICB9KTtcblxuICAgIHByb2R1Y3RDb3Zlci5zd2lwZSh7XG4gICAgICBzd2lwZTogKGV2ZW50LCBkaXJlY3Rpb24pID0+IHtcbiAgICAgICAgdGh1bWJTZWxlY3RlZCA9ICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LnNlbGVjdGVkKTtcbiAgICAgICAgY29uc3QgcGFyZW50VGh1bWIgPSB0aHVtYlNlbGVjdGVkLmNsb3Nlc3QocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LnRodW1iQ29udGFpbmVyKTtcblxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgaWYgKHBhcmVudFRodW1iLnByZXYoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzd2lwZSh0aHVtYlNlbGVjdGVkLCBwYXJlbnRUaHVtYi5wcmV2KCkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGFyZW50VGh1bWIubmV4dCgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHN3aXBlKHRodW1iU2VsZWN0ZWQsIHBhcmVudFRodW1iLm5leHQoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHBhcmVudFRodW1iLm5leHQoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzd2lwZSh0aHVtYlNlbGVjdGVkLCBwYXJlbnRUaHVtYi5uZXh0KCkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGFyZW50VGh1bWIucHJldigpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHN3aXBlKHRodW1iU2VsZWN0ZWQsIHBhcmVudFRodW1iLnByZXYoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYWxsb3dQYWdlU2Nyb2xsOiAndmVydGljYWwnLFxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaW1hZ2VTY3JvbGxCb3goKSB7XG4gICAgaWYgKCQoJyNtYWluIC5qcy1xdi1wcm9kdWN0LWltYWdlcyBsaScpLmxlbmd0aCA+IDIpIHtcbiAgICAgICQoJyNtYWluIC5qcy1xdi1tYXNrJykuYWRkQ2xhc3MoJ3Njcm9sbCcpO1xuICAgICAgJCgnLnNjcm9sbC1ib3gtYXJyb3dzJykuYWRkQ2xhc3MoJ3Njcm9sbCcpO1xuICAgICAgJCgnI21haW4gLmpzLXF2LW1hc2snKS5zY3JvbGxib3goe1xuICAgICAgICBkaXJlY3Rpb246ICdoJyxcbiAgICAgICAgZGlzdGFuY2U6IDExMyxcbiAgICAgICAgYXV0b1BsYXk6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICAkKCcuc2Nyb2xsLWJveC1hcnJvd3MgLmxlZnQnKS5jbGljaygoKSA9PiB7XG4gICAgICAgICQoJyNtYWluIC5qcy1xdi1tYXNrJykudHJpZ2dlcignYmFja3dhcmQnKTtcbiAgICAgIH0pO1xuICAgICAgJCgnLnNjcm9sbC1ib3gtYXJyb3dzIC5yaWdodCcpLmNsaWNrKCgpID0+IHtcbiAgICAgICAgJCgnI21haW4gLmpzLXF2LW1hc2snKS50cmlnZ2VyKCdmb3J3YXJkJyk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgJCgnI21haW4gLmpzLXF2LW1hc2snKS5yZW1vdmVDbGFzcygnc2Nyb2xsJyk7XG4gICAgICAkKCcuc2Nyb2xsLWJveC1hcnJvd3MnKS5yZW1vdmVDbGFzcygnc2Nyb2xsJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlSW5wdXRGaWxlKCkge1xuICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5maWxlSW5wdXQpLm9uKCdjaGFuZ2UnLCAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9ICQoZXZlbnQuY3VycmVudFRhcmdldClbMF07XG4gICAgICBjb25zdCBmaWxlID0gKHRhcmdldCkgPyB0YXJnZXQuZmlsZXNbMF0gOiBudWxsO1xuXG4gICAgICBpZiAodGFyZ2V0ICYmIGZpbGUpIHtcbiAgICAgICAgJCh0YXJnZXQpLnByZXYoKS50ZXh0KGZpbGUubmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQcm9kdWN0U3BpbigpIHtcbiAgICBjb25zdCAkcXVhbnRpdHlJbnB1dCA9ICQocHJlc3Rhc2hvcC5zZWxlY3RvcnMucXVhbnRpdHlXYW50ZWQpO1xuXG4gICAgJHF1YW50aXR5SW5wdXQuVG91Y2hTcGluKHtcbiAgICAgIHZlcnRpY2FsYnV0dG9uczogdHJ1ZSxcbiAgICAgIHZlcnRpY2FsdXBjbGFzczogJ21hdGVyaWFsLWljb25zIHRvdWNoc3Bpbi11cCcsXG4gICAgICB2ZXJ0aWNhbGRvd25jbGFzczogJ21hdGVyaWFsLWljb25zIHRvdWNoc3Bpbi1kb3duJyxcbiAgICAgIGJ1dHRvbmRvd25fY2xhc3M6ICdidG4gYnRuLXRvdWNoc3BpbiBqcy10b3VjaHNwaW4nLFxuICAgICAgYnV0dG9udXBfY2xhc3M6ICdidG4gYnRuLXRvdWNoc3BpbiBqcy10b3VjaHNwaW4nLFxuICAgICAgbWluOiBwYXJzZUludCgkcXVhbnRpdHlJbnB1dC5hdHRyKCdtaW4nKSwgMTApLFxuICAgICAgbWF4OiAxMDAwMDAwLFxuICAgIH0pO1xuXG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnRvdWNoc3Bpbikub2ZmKCd0b3VjaHN0YXJ0LnRvdWNoc3BpbicpO1xuXG4gICAgJHF1YW50aXR5SW5wdXQub24oJ2ZvY3Vzb3V0JywgKCkgPT4ge1xuICAgICAgaWYgKCRxdWFudGl0eUlucHV0LnZhbCgpID09PSAnJyB8fCAkcXVhbnRpdHlJbnB1dC52YWwoKSA8ICRxdWFudGl0eUlucHV0LmF0dHIoJ21pbicpKSB7XG4gICAgICAgICRxdWFudGl0eUlucHV0LnZhbCgkcXVhbnRpdHlJbnB1dC5hdHRyKCdtaW4nKSk7XG4gICAgICAgICRxdWFudGl0eUlucHV0LnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgJCgnYm9keScpLm9uKCdjaGFuZ2Uga2V5dXAnLCBwcmVzdGFzaG9wLnNlbGVjdG9ycy5xdWFudGl0eVdhbnRlZCwgKGUpID0+IHtcbiAgICAgIGlmICgkcXVhbnRpdHlJbnB1dC52YWwoKSAhPT0gJycpIHtcbiAgICAgICAgJChlLmN1cnJlbnRUYXJnZXQpLnRyaWdnZXIoJ3RvdWNoc3Bpbi5zdG9wc3BpbicpO1xuICAgICAgICBwcmVzdGFzaG9wLmVtaXQoJ3VwZGF0ZVByb2R1Y3QnLCB7XG4gICAgICAgICAgZXZlbnRUeXBlOiAndXBkYXRlZFByb2R1Y3RRdWFudGl0eScsXG4gICAgICAgICAgZXZlbnQ6IGUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkSnNQcm9kdWN0VGFiQWN0aXZlU2VsZWN0b3IoKSB7XG4gICAgY29uc3QgbmF2ID0gJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QudGFicyk7XG4gICAgbmF2Lm9uKCdzaG93LmJzLnRhYicsIChlKSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSAkKGUudGFyZ2V0KTtcbiAgICAgIHRhcmdldC5hZGRDbGFzcyhwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QuYWN0aXZlTmF2Q2xhc3MpO1xuICAgICAgJCh0YXJnZXQuYXR0cignaHJlZicpKS5hZGRDbGFzcyhwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QuYWN0aXZlVGFiQ2xhc3MpO1xuICAgIH0pO1xuICAgIG5hdi5vbignaGlkZS5icy50YWInLCAoZSkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gJChlLnRhcmdldCk7XG4gICAgICB0YXJnZXQucmVtb3ZlQ2xhc3MocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmFjdGl2ZU5hdkNsYXNzKTtcbiAgICAgICQodGFyZ2V0LmF0dHIoJ2hyZWYnKSkucmVtb3ZlQ2xhc3MocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmFjdGl2ZVRhYkNsYXNzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZVByb2R1Y3RTcGluKCk7XG4gIGNyZWF0ZUlucHV0RmlsZSgpO1xuICBjb3ZlckltYWdlKCk7XG4gIGltYWdlU2Nyb2xsQm94KCk7XG4gIGFkZEpzUHJvZHVjdFRhYkFjdGl2ZVNlbGVjdG9yKCk7XG5cbiAgcHJlc3Rhc2hvcC5vbigndXBkYXRlZFByb2R1Y3QnLCAoZXZlbnQpID0+IHtcbiAgICBjcmVhdGVJbnB1dEZpbGUoKTtcbiAgICBjb3ZlckltYWdlKCk7XG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LnByb2R1Y3RfbWluaW1hbF9xdWFudGl0eSkge1xuICAgICAgY29uc3QgbWluaW1hbFByb2R1Y3RRdWFudGl0eSA9IHBhcnNlSW50KGV2ZW50LnByb2R1Y3RfbWluaW1hbF9xdWFudGl0eSwgMTApO1xuICAgICAgY29uc3QgcXVhbnRpdHlJbnB1dFNlbGVjdG9yID0gcHJlc3Rhc2hvcC5zZWxlY3RvcnMucXVhbnRpdHlXYW50ZWQ7XG4gICAgICBjb25zdCBxdWFudGl0eUlucHV0ID0gJChxdWFudGl0eUlucHV0U2VsZWN0b3IpO1xuXG4gICAgICAvLyBAc2VlIGh0dHA6Ly93d3cudmlydHVvc29mdC5ldS9jb2RlL2Jvb3RzdHJhcC10b3VjaHNwaW4vIGFib3V0IEJvb3RzdHJhcCBUb3VjaFNwaW5cbiAgICAgIHF1YW50aXR5SW5wdXQudHJpZ2dlcigndG91Y2hzcGluLnVwZGF0ZXNldHRpbmdzJywge1xuICAgICAgICBtaW46IG1pbmltYWxQcm9kdWN0UXVhbnRpdHksXG4gICAgICB9KTtcbiAgICB9XG4gICAgaW1hZ2VTY3JvbGxCb3goKTtcbiAgICAkKCQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmFjdGl2ZVRhYnMpLmF0dHIoJ2hyZWYnKSkuYWRkQ2xhc3MoJ2FjdGl2ZScpLnJlbW92ZUNsYXNzKCdmYWRlJyk7XG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QuaW1hZ2VzTW9kYWwpLnJlcGxhY2VXaXRoKGV2ZW50LnByb2R1Y3RfaW1hZ2VzX21vZGFsKTtcblxuICAgIGNvbnN0IHByb2R1Y3RTZWxlY3QgPSBuZXcgUHJvZHVjdFNlbGVjdCgpO1xuICAgIHByb2R1Y3RTZWxlY3QuaW5pdCgpO1xuICB9KTtcbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIHRpbWVvdXQgPSAzMDApIHtcbiAgbGV0IHRpbWVyO1xuXG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHsgZnVuYy5hcHBseSh0aGlzLCBhcmdzKTsgfSwgdGltZW91dCk7XG4gIH07XG59XG4iLCJpbXBvcnQgJCBmcm9tIFwianF1ZXJ5XCI7XG5pbXBvcnQgcHJlc3Rhc2hvcCBmcm9tIFwicHJlc3Rhc2hvcFwiO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gXCIuL2NvbXBvbmVudHMvZGVib3VuY2VcIjtcblxucHJlc3Rhc2hvcC5jYXJ0ID0gcHJlc3Rhc2hvcC5jYXJ0IHx8IHt9O1xuXG5wcmVzdGFzaG9wLmNhcnQuYWN0aXZlX2lucHV0cyA9IG51bGw7XG5cbmNvbnN0IHNwaW5uZXJTZWxlY3RvciA9ICdpbnB1dFtuYW1lPVwicHJvZHVjdC1xdWFudGl0eS1zcGluXCJdJztcbmxldCBoYXNFcnJvciA9IGZhbHNlO1xubGV0IGlzVXBkYXRlT3BlcmF0aW9uID0gZmFsc2U7XG5sZXQgZXJyb3JNc2cgPSBcIlwiO1xuXG5jb25zdCBDaGVja1VwZGF0ZVF1YW50aXR5T3BlcmF0aW9ucyA9IHtcbiAgc3dpdGNoRXJyb3JTdGF0OiAoKSA9PiB7XG4gICAgLyoqXG4gICAgICogaWYgZXJyb3JNc2cgaXMgbm90IGVtcHR5IG9yIGlmIG5vdGlmaWNhdGlvbnMgYXJlIHNob3duLCB3ZSBoYXZlIGVycm9yIHRvIGRpc3BsYXlcbiAgICAgKiBpZiBoYXNFcnJvciBpcyB0cnVlLCBxdWFudGl0eSB3YXMgbm90IHVwZGF0ZWQgOiB3ZSBkb24ndCBkaXNhYmxlIGNoZWNrb3V0IGJ1dHRvblxuICAgICAqL1xuICAgIGNvbnN0ICRjaGVja291dEJ0biA9ICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5jaGVja291dC5idG4pO1xuXG4gICAgaWYgKFxuICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLm5vdGlmaWNhdGlvbnMuZGFuZ2VyQWxlcnQpLmxlbmd0aCB8fFxuICAgICAgKGVycm9yTXNnICE9PSBcIlwiICYmICFoYXNFcnJvcilcbiAgICApIHtcbiAgICAgICRjaGVja291dEJ0bi5hZGRDbGFzcyhcImRpc2FibGVkXCIpO1xuICAgICAgJGNoZWNrb3V0QnRuLmNzcyh7XG4gICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJ2dyZXknLCAgXG4gICAgICAgICdjb2xvcic6ICd3aGl0ZScsICAgICAgICAgICAgICAgICAgICAgXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3JNc2cgIT09IFwiXCIpIHtcbiAgICAgIGNvbnN0IHN0ckVycm9yID0gYFxuICAgICAgICA8YXJ0aWNsZSBjbGFzcz1cImFsZXJ0IHRleHQtY2VudGVyIHctZml0IGZsZXggbXQtMTIgcC0yIGJnLXJlZC0xMDAgYm9yZGVyIGJvcmRlci1yZWQtMzAwIGFsZXJ0LWRhbmdlclwiIHJvbGU9XCJhbGVydFwiIGRhdGEtYWxlcnQ9XCJkYW5nZXJcIj5cbiAgICAgICAgICA8dWw+XG4gICAgICAgICAgICA8bGk+JHtlcnJvck1zZ308L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgIGA7XG4gICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubm90aWZpY2F0aW9ucy5jb250YWluZXIpLmh0bWwoc3RyRXJyb3IpO1xuICAgICAgZXJyb3JNc2cgPSBcIlwiO1xuICAgICAgaXNVcGRhdGVPcGVyYXRpb24gPSBmYWxzZTtcbiAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAvLyBpZiBoYXNFcnJvciBpcyB0cnVlLCBxdWFudGl0eSB3YXMgbm90IHVwZGF0ZWQgOiBhbGxvdyBjaGVja291dFxuICAgICAgICAkY2hlY2tvdXRCdG4ucmVtb3ZlQ2xhc3MoXCJkaXNhYmxlZFwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFoYXNFcnJvciAmJiBpc1VwZGF0ZU9wZXJhdGlvbikge1xuICAgICAgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgIGlzVXBkYXRlT3BlcmF0aW9uID0gZmFsc2U7XG4gICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubm90aWZpY2F0aW9ucy5jb250YWluZXIpLmh0bWwoXCJcIik7XG4gICAgICAkY2hlY2tvdXRCdG4ucmVtb3ZlQ2xhc3MoXCJkaXNhYmxlZFwiKTtcbiAgICAgICRjaGVja291dEJ0bi5jc3Moe1xuICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6ICcjMTcyNTU0JywgIFxuICAgICAgICAnY29sb3InOiAnd2hpdGUnLCAgICAgICAgICAgICAgICAgICAgXG4gICAgICB9KTtcbiAgICAgIFxuICAgIH1cbiAgfSxcbiAgY2hlY2tVcGRhdGVPcGVyYXRpb246IChyZXNwKSA9PiB7XG4gICAgLyoqXG4gICAgICogcmVzcC5oYXNFcnJvciBjYW4gYmUgbm90IGRlZmluZWQgYnV0IHJlc3AuZXJyb3JzIG5vdCBlbXB0eTogcXVhbnRpdHkgaXMgdXBkYXRlZCBidXQgb3JkZXIgY2Fubm90IGJlIHBsYWNlZFxuICAgICAqIHdoZW4gcmVzcC5oYXNFcnJvcj10cnVlLCBxdWFudGl0eSBpcyBub3QgdXBkYXRlZFxuICAgICAqL1xuICAgIGNvbnN0IHsgaGFzRXJyb3I6IGhhc0Vycm9yT2NjdXJyZWQsIGVycm9yczogZXJyb3JEYXRhIH0gPSByZXNwO1xuICAgIGhhc0Vycm9yID0gaGFzRXJyb3JPY2N1cnJlZCA/PyBmYWxzZTtcbiAgICBjb25zdCBlcnJvcnMgPSBlcnJvckRhdGEgPz8gXCJcIjtcblxuICAgIC8vIDEuNy4yLnggcmV0dXJucyBlcnJvcnMgYXMgc3RyaW5nLCAxLjcuMy54IHJldHVybnMgYXJyYXlcbiAgICBpZiAoZXJyb3JzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIGVycm9yTXNnID0gZXJyb3JzLmpvaW4oXCIgXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvck1zZyA9IGVycm9ycztcbiAgICB9XG5cbiAgICBpc1VwZGF0ZU9wZXJhdGlvbiA9IHRydWU7XG4gIH0sXG59O1xuXG4vKipcbiAqIEF0dGFjaCBCb290c3RyYXAgVG91Y2hTcGluIGV2ZW50IGhhbmRsZXJzXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVNwaW4oKSB7XG4gICQuZWFjaCgkKHNwaW5uZXJTZWxlY3RvciksIChpbmRleCwgc3Bpbm5lcikgPT4ge1xuICAgICQoc3Bpbm5lcikuVG91Y2hTcGluKHtcbiAgICAgIG1pbjogcGFyc2VJbnQoJChzcGlubmVyKS5hdHRyKFwibWluXCIpLCAxMCksXG4gICAgICBtYXg6IDEwMDAwMDAsXG4gICAgfSk7XG4gIH0pO1xuXG4gICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy50b3VjaHNwaW4pLm9mZihcInRvdWNoc3RhcnQudG91Y2hzcGluXCIpO1xuXG4gIENoZWNrVXBkYXRlUXVhbnRpdHlPcGVyYXRpb25zLnN3aXRjaEVycm9yU3RhdCgpO1xufVxuXG5jb25zdCBwcmV2ZW50Q3VzdG9tTW9kYWxPcGVuID0gKGV2ZW50KSA9PiB7XG4gIGlmICh3aW5kb3cuc2hvdWxkUHJldmVudE1vZGFsKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbiQoZnVuY3Rpb24gKCkge1xuICBjb25zdCBwcm9kdWN0TGluZUluQ2FydFNlbGVjdG9yID1cbiAgICBwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNhcnQucHJvZHVjdExpbmVRdHk7XG4gIGNvbnN0IHByb21pc2VzID0gW107XG5cbiAgcHJlc3Rhc2hvcC5vbihcInVwZGF0ZWRDYXJ0XCIsICgpID0+IHtcbiAgICB3aW5kb3cuc2hvdWxkUHJldmVudE1vZGFsID0gZmFsc2U7XG5cbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5jdXN0b21pemF0aW9uTW9kYWwpLm9uKFxuICAgICAgXCJzaG93LmJzLm1vZGFsXCIsXG4gICAgICAobW9kYWxFdmVudCkgPT4ge1xuICAgICAgICBwcmV2ZW50Q3VzdG9tTW9kYWxPcGVuKG1vZGFsRXZlbnQpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgY3JlYXRlU3BpbigpO1xuICB9KTtcblxuICBjcmVhdGVTcGluKCk7XG5cbiAgY29uc3QgJGJvZHkgPSAkKFwiYm9keVwiKTtcblxuICBmdW5jdGlvbiBpc1RvdWNoU3BpbihuYW1lc3BhY2UpIHtcbiAgICByZXR1cm4gbmFtZXNwYWNlID09PSBcIm9uLnN0YXJ0dXBzcGluXCIgfHwgbmFtZXNwYWNlID09PSBcIm9uLnN0YXJ0ZG93bnNwaW5cIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3VsZEluY3JlYXNlUHJvZHVjdFF1YW50aXR5KG5hbWVzcGFjZSkge1xuICAgIHJldHVybiBuYW1lc3BhY2UgPT09IFwib24uc3RhcnR1cHNwaW5cIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRDYXJ0TGluZVByb2R1Y3RRdWFudGl0eUlucHV0KCR0YXJnZXQpIHtcbiAgICBjb25zdCAkaW5wdXQgPSAkdGFyZ2V0XG4gICAgICAucGFyZW50cyhwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNhcnQudG91Y2hzcGluKVxuICAgICAgLmZpbmQocHJvZHVjdExpbmVJbkNhcnRTZWxlY3Rvcik7XG5cbiAgICBpZiAoJGlucHV0LmlzKFwiOmZvY3VzXCIpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gJGlucHV0O1xuICB9XG5cbiAgZnVuY3Rpb24gY2FtZWxpemUoc3ViamVjdCkge1xuICAgIGNvbnN0IGFjdGlvblR5cGVQYXJ0cyA9IHN1YmplY3Quc3BsaXQoXCItXCIpO1xuICAgIGxldCBpO1xuICAgIGxldCBwYXJ0O1xuICAgIGxldCBjYW1lbGl6ZWRTdWJqZWN0ID0gXCJcIjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBhY3Rpb25UeXBlUGFydHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHBhcnQgPSBhY3Rpb25UeXBlUGFydHNbaV07XG5cbiAgICAgIGlmIChpICE9PSAwKSB7XG4gICAgICAgIHBhcnQgPSBwYXJ0LnN1YnN0cmluZygwLCAxKS50b1VwcGVyQ2FzZSgpICsgcGFydC5zdWJzdHJpbmcoMSk7XG4gICAgICB9XG5cbiAgICAgIGNhbWVsaXplZFN1YmplY3QgKz0gcGFydDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FtZWxpemVkU3ViamVjdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlQ2FydEFjdGlvbigkdGFyZ2V0LCBuYW1lc3BhY2UpIHtcbiAgICBpZiAoIWlzVG91Y2hTcGluKG5hbWVzcGFjZSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVybDogJHRhcmdldC5hdHRyKFwiaHJlZlwiKSxcbiAgICAgICAgdHlwZTogY2FtZWxpemUoJHRhcmdldC5kYXRhKFwibGluay1hY3Rpb25cIikpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCAkaW5wdXQgPSBmaW5kQ2FydExpbmVQcm9kdWN0UXVhbnRpdHlJbnB1dCgkdGFyZ2V0KTtcblxuICAgIGlmICghJGlucHV0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IGNhcnRBY3Rpb24gPSB7fTtcblxuICAgIGlmIChzaG91bGRJbmNyZWFzZVByb2R1Y3RRdWFudGl0eShuYW1lc3BhY2UpKSB7XG4gICAgICBjYXJ0QWN0aW9uID0ge1xuICAgICAgICB1cmw6ICRpbnB1dC5kYXRhKFwidXAtdXJsXCIpLFxuICAgICAgICB0eXBlOiBcImluY3JlYXNlUHJvZHVjdFF1YW50aXR5XCIsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjYXJ0QWN0aW9uID0ge1xuICAgICAgICB1cmw6ICRpbnB1dC5kYXRhKFwiZG93bi11cmxcIiksXG4gICAgICAgIHR5cGU6IFwiZGVjcmVhc2VQcm9kdWN0UXVhbnRpdHlcIixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhcnRBY3Rpb247XG4gIH1cblxuICBjb25zdCBhYm9ydFByZXZpb3VzUmVxdWVzdHMgPSAoKSA9PiB7XG4gICAgbGV0IHByb21pc2U7XG4gICAgd2hpbGUgKHByb21pc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlcy5wb3AoKTtcbiAgICAgIHByb21pc2UuYWJvcnQoKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZ2V0VG91Y2hTcGluSW5wdXQgPSAoJGJ1dHRvbikgPT5cbiAgICAkKCRidXR0b24ucGFyZW50cyhwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNhcnQudG91Y2hzcGluKS5maW5kKFwiaW5wdXRcIikpO1xuXG4gICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmN1c3RvbWl6YXRpb25Nb2RhbCkub24oXG4gICAgXCJzaG93LmJzLm1vZGFsXCIsXG4gICAgKG1vZGFsRXZlbnQpID0+IHtcbiAgICAgIHByZXZlbnRDdXN0b21Nb2RhbE9wZW4obW9kYWxFdmVudCk7XG4gICAgfSxcbiAgKTtcblxuICBjb25zdCBoYW5kbGVDYXJ0QWN0aW9uID0gKGV2ZW50KSA9PiB7XG4gICAgYWJvcnRQcmV2aW91c1JlcXVlc3RzKCk7XG4gICAgd2luZG93LnNob3VsZFByZXZlbnRNb2RhbCA9IHRydWU7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0ICR0YXJnZXQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIGNvbnN0IHsgZGF0YXNldCB9ID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICBjb25zdCBjYXJ0QWN0aW9uID0gcGFyc2VDYXJ0QWN0aW9uKCR0YXJnZXQsIGV2ZW50Lm5hbWVzcGFjZSk7XG4gICAgY29uc3QgcmVxdWVzdERhdGEgPSB7XG4gICAgICBhamF4OiBcIjFcIixcbiAgICAgIGFjdGlvbjogXCJ1cGRhdGVcIixcbiAgICB9O1xuXG4gICAgaWYgKCFjYXJ0QWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgJC5hamF4KHtcbiAgICAgIHVybDogY2FydEFjdGlvbi51cmwsXG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgZGF0YTogcmVxdWVzdERhdGEsXG4gICAgICBkYXRhVHlwZTogXCJqc29uXCIsXG4gICAgICBiZWZvcmVTZW5kKGpxWEhSKSB7XG4gICAgICAgIHByb21pc2VzLnB1c2goanFYSFIpO1xuICAgICAgfSxcbiAgICB9KVxuICAgICAgLnRoZW4oKHJlc3ApID0+IHtcbiAgICAgICAgY29uc3QgJHF1YW50aXR5SW5wdXQgPSBnZXRUb3VjaFNwaW5JbnB1dCgkdGFyZ2V0KTtcbiAgICAgICAgQ2hlY2tVcGRhdGVRdWFudGl0eU9wZXJhdGlvbnMuY2hlY2tVcGRhdGVPcGVyYXRpb24ocmVzcCk7XG4gICAgICAgICRxdWFudGl0eUlucHV0LnZhbChyZXNwLnF1YW50aXR5KTtcblxuICAgICAgICAvLyBSZWZyZXNoIGNhcnQgcHJldmlld1xuICAgICAgICBwcmVzdGFzaG9wLmVtaXQoXCJ1cGRhdGVDYXJ0XCIsIHtcbiAgICAgICAgICByZWFzb246IGRhdGFzZXQsXG4gICAgICAgICAgcmVzcCxcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLmZhaWwoKHJlc3ApID0+IHtcbiAgICAgICAgcHJlc3Rhc2hvcC5lbWl0KFwiaGFuZGxlRXJyb3JcIiwge1xuICAgICAgICAgIGV2ZW50VHlwZTogXCJ1cGRhdGVQcm9kdWN0SW5DYXJ0XCIsXG4gICAgICAgICAgcmVzcCxcbiAgICAgICAgICBjYXJ0QWN0aW9uOiBjYXJ0QWN0aW9uLnR5cGUsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH07XG5cbiAgJGJvZHkub24oXCJjbGlja1wiLCBwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNhcnQuYWN0aW9ucywgaGFuZGxlQ2FydEFjdGlvbik7XG5cbiAgZnVuY3Rpb24gc2VuZFVwZGF0ZVF1YW50aXR5SW5DYXJ0UmVxdWVzdChcbiAgICB1cGRhdGVRdWFudGl0eUluQ2FydFVybCxcbiAgICByZXF1ZXN0RGF0YSxcbiAgICAkdGFyZ2V0LFxuICApIHtcbiAgICBhYm9ydFByZXZpb3VzUmVxdWVzdHMoKTtcbiAgICB3aW5kb3cuc2hvdWxkUHJldmVudE1vZGFsID0gdHJ1ZTtcblxuICAgIHJldHVybiAkLmFqYXgoe1xuICAgICAgdXJsOiB1cGRhdGVRdWFudGl0eUluQ2FydFVybCxcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBkYXRhOiByZXF1ZXN0RGF0YSxcbiAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcbiAgICAgIGJlZm9yZVNlbmQoanFYSFIpIHtcbiAgICAgICAgcHJvbWlzZXMucHVzaChqcVhIUik7XG4gICAgICB9LFxuICAgIH0pXG4gICAgICAudGhlbigocmVzcCkgPT4ge1xuICAgICAgICBDaGVja1VwZGF0ZVF1YW50aXR5T3BlcmF0aW9ucy5jaGVja1VwZGF0ZU9wZXJhdGlvbihyZXNwKTtcblxuICAgICAgICAkdGFyZ2V0LnZhbChyZXNwLnF1YW50aXR5KTtcbiAgICAgICAgY29uc3QgZGF0YXNldCA9ICR0YXJnZXQgJiYgJHRhcmdldC5kYXRhc2V0ID8gJHRhcmdldC5kYXRhc2V0IDogcmVzcDtcblxuICAgICAgICAvLyBSZWZyZXNoIGNhcnQgcHJldmlld1xuICAgICAgICBwcmVzdGFzaG9wLmVtaXQoXCJ1cGRhdGVDYXJ0XCIsIHtcbiAgICAgICAgICByZWFzb246IGRhdGFzZXQsXG4gICAgICAgICAgcmVzcCxcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLmZhaWwoKHJlc3ApID0+IHtcbiAgICAgICAgcHJlc3Rhc2hvcC5lbWl0KFwiaGFuZGxlRXJyb3JcIiwge1xuICAgICAgICAgIGV2ZW50VHlwZTogXCJ1cGRhdGVQcm9kdWN0UXVhbnRpdHlJbkNhcnRcIixcbiAgICAgICAgICByZXNwLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UXVhbnRpdHlDaGFuZ2VUeXBlKCRxdWFudGl0eSkge1xuICAgIHJldHVybiAkcXVhbnRpdHkgPiAwID8gXCJ1cFwiIDogXCJkb3duXCI7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRSZXF1ZXN0RGF0YShxdWFudGl0eSkge1xuICAgIHJldHVybiB7XG4gICAgICBhamF4OiBcIjFcIixcbiAgICAgIHF0eTogTWF0aC5hYnMocXVhbnRpdHkpLFxuICAgICAgYWN0aW9uOiBcInVwZGF0ZVwiLFxuICAgICAgb3A6IGdldFF1YW50aXR5Q2hhbmdlVHlwZShxdWFudGl0eSksXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVByb2R1Y3RRdWFudGl0eUluQ2FydChldmVudCkge1xuICAgIGNvbnN0ICR0YXJnZXQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIGNvbnN0IHVwZGF0ZVF1YW50aXR5SW5DYXJ0VXJsID0gJHRhcmdldC5kYXRhKFwidXBkYXRlLXVybFwiKTtcbiAgICBjb25zdCBiYXNlVmFsdWUgPSAkdGFyZ2V0LmF0dHIoXCJ2YWx1ZVwiKTtcblxuICAgIC8vIFRoZXJlIHNob3VsZCBiZSBhIHZhbGlkIHByb2R1Y3QgcXVhbnRpdHkgaW4gY2FydFxuICAgIGNvbnN0IHRhcmdldFZhbHVlID0gJHRhcmdldC52YWwoKTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIGlmIChcbiAgICAgIHRhcmdldFZhbHVlICE9IHBhcnNlSW50KHRhcmdldFZhbHVlLCAxMCkgfHxcbiAgICAgIHRhcmdldFZhbHVlIDwgMCB8fFxuICAgICAgaXNOYU4odGFyZ2V0VmFsdWUpXG4gICAgKSB7XG4gICAgICB3aW5kb3cuc2hvdWxkUHJldmVudE1vZGFsID0gZmFsc2U7XG4gICAgICAkdGFyZ2V0LnZhbChiYXNlVmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgLy8gVGhlcmUgc2hvdWxkIGJlIGEgbmV3IHByb2R1Y3QgcXVhbnRpdHkgaW4gY2FydFxuICAgIGNvbnN0IHF0eSA9IHRhcmdldFZhbHVlIC0gYmFzZVZhbHVlO1xuXG4gICAgaWYgKHF0eSA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0YXJnZXRWYWx1ZSA9PT0gXCIwXCIpIHtcbiAgICAgICR0YXJnZXRcbiAgICAgICAgLmNsb3Nlc3QoXCIucHJvZHVjdC1saW5lLWFjdGlvbnNcIilcbiAgICAgICAgLmZpbmQoJ1tkYXRhLWxpbmstYWN0aW9uPVwiZGVsZXRlLWZyb20tY2FydFwiXScpXG4gICAgICAgIC5jbGljaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkdGFyZ2V0LmF0dHIoXCJ2YWx1ZVwiLCB0YXJnZXRWYWx1ZSk7XG4gICAgICBzZW5kVXBkYXRlUXVhbnRpdHlJbkNhcnRSZXF1ZXN0KFxuICAgICAgICB1cGRhdGVRdWFudGl0eUluQ2FydFVybCxcbiAgICAgICAgZ2V0UmVxdWVzdERhdGEocXR5KSxcbiAgICAgICAgJHRhcmdldCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgJGJvZHkub24oXG4gICAgXCJ0b3VjaHNwaW4ub24uc3RvcHNwaW5cIixcbiAgICBzcGlubmVyU2VsZWN0b3IsXG4gICAgZGVib3VuY2UodXBkYXRlUHJvZHVjdFF1YW50aXR5SW5DYXJ0KSxcbiAgKTtcblxuICAkYm9keS5vbihcImZvY3Vzb3V0IGtleXVwXCIsIHByb2R1Y3RMaW5lSW5DYXJ0U2VsZWN0b3IsIChldmVudCkgPT4ge1xuICAgIGlmIChldmVudC50eXBlID09PSBcImtleXVwXCIpIHtcbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAxMykge1xuICAgICAgICBpc1VwZGF0ZU9wZXJhdGlvbiA9IHRydWU7XG4gICAgICAgIHVwZGF0ZVByb2R1Y3RRdWFudGl0eUluQ2FydChldmVudCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIWlzVXBkYXRlT3BlcmF0aW9uKSB7XG4gICAgICB1cGRhdGVQcm9kdWN0UXVhbnRpdHlJbkNhcnQoZXZlbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG5cbiAgY29uc3QgJHRpbWVvdXRFZmZlY3QgPSA0MDA7XG5cbiAgJGJvZHkub24oXG4gICAgXCJoaWRkZW4uYnMuY29sbGFwc2VcIixcbiAgICBwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNhcnQucHJvbW9Db2RlLFxuICAgICgpID0+IHtcbiAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5jYXJ0LmRpc3BsYXlQcm9tbykuc2hvdygkdGltZW91dEVmZmVjdCk7XG4gICAgfSxcbiAgKTtcblxuICAkYm9keS5vbihcImNsaWNrXCIsIHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY2FydC5wcm9tb0NvZGVCdXR0b24sIChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY2FydC5wcm9tb0NvZGUpLmNvbGxhcHNlKFwidG9nZ2xlXCIpO1xuICB9KTtcblxuICAkYm9keS5vbihcImNsaWNrXCIsIHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY2FydC5kaXNwbGF5UHJvbW8sIChldmVudCkgPT4ge1xuICAgICQoZXZlbnQuY3VycmVudFRhcmdldCkuaGlkZSgkdGltZW91dEVmZmVjdCk7XG4gIH0pO1xuXG4gICRib2R5Lm9uKFwiY2xpY2tcIiwgcHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5jYXJ0LmRpc2NvdW50Q29kZSwgKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCAkY29kZSA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgY29uc3QgJGRpc2NvdW50SW5wdXQgPSAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY2FydC5kaXNjb3VudE5hbWUpO1xuXG4gICAgJGRpc2NvdW50SW5wdXQudmFsKCRjb2RlLnRleHQoKSk7XG4gICAgLy8gU2hvdyBwcm9tbyBjb2RlIGZpZWxkXG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNhcnQucHJvbW9Db2RlKS5jb2xsYXBzZShcInNob3dcIik7XG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNhcnQuZGlzcGxheVByb21vKS5oaWRlKCR0aW1lb3V0RWZmZWN0KTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59KTtcblxuJChkb2N1bWVudCkucmVhZHkoKCkgPT4ge1xuICBjb25zdCBlID0gJChcImJvZHlcIik7XG4gIGUub2ZmKFwic3VibWl0XCIsICdbZGF0YS1saW5rLWFjdGlvbj1cImFkZC12b3VjaGVyXCJdJyksXG4gICAgZS5vbihcInN1Ym1pdFwiLCAnW2RhdGEtbGluay1hY3Rpb249XCJhZGQtdm91Y2hlclwiXScsIChlKSA9PiB7XG4gICAgICBjb25zdCBwcm9tb1N1Ym1pdEJ0biA9ICQoXCIjcHJvbW8tY29kZS1mb3JtIGJ1dHRvblwiKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IG4gPSAkKGUuY3VycmVudFRhcmdldCksXG4gICAgICAgIG8gPSBuLmF0dHIoXCJhY3Rpb25cIik7XG4gICAgICAwID09PSBuLmZpbmQoXCJbbmFtZT1hY3Rpb25dXCIpLmxlbmd0aCAmJlxuICAgICAgICBuLmFwcGVuZCgkKFwiPGlucHV0PlwiLCB7IHR5cGU6IFwiaGlkZGVuXCIsIG5hbWU6IFwiYWpheFwiLCB2YWx1ZTogMSB9KSksXG4gICAgICAgIDAgPT09IG4uZmluZChcIltuYW1lPWFjdGlvbl1cIikubGVuZ3RoICYmXG4gICAgICAgICAgbi5hcHBlbmQoXG4gICAgICAgICAgICAkKFwiPGlucHV0PlwiLCB7IHR5cGU6IFwiaGlkZGVuXCIsIG5hbWU6IFwiYWN0aW9uXCIsIHZhbHVlOiBcInVwZGF0ZVwiIH0pLFxuICAgICAgICAgICksXG4gICAgICAgIHByb21vU3VibWl0QnRuLnRleHQoXCJDSEVDS0lOR1wiKTtcbiAgICAgIHByb21vU3VibWl0QnRuLnByb3AoXCJkaXNhYmxlXCIsIHRydWUpO1xuICAgICAgJC5wb3N0KG8sIG4uc2VyaWFsaXplKCksIG51bGwsIFwianNvblwiKVxuICAgICAgICAudGhlbigobikgPT4ge1xuICAgICAgICAgIG4uaGFzRXJyb3JcbiAgICAgICAgICAgID8gJChcIi5qcy1lcnJvclwiKS5zaG93KCkuZmluZChcIi5qcy1lcnJvci10ZXh0XCIpLnRleHQobi5lcnJvcnNbMF0pXG4gICAgICAgICAgICA6IHByZXN0YXNob3AuZW1pdChcInVwZGF0ZUNhcnRcIiwge1xuICAgICAgICAgICAgICAgIHJlYXNvbjogZS50YXJnZXQuZGF0YXNldCxcbiAgICAgICAgICAgICAgICByZXNwOiBuLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICBwcm9tb1N1Ym1pdEJ0bi50ZXh0KFwiQUREXCIpO1xuICAgICAgICAgIHByb21vU3VibWl0QnRuLnByb3AoXCJkaXNhYmxlXCIsIGZhbHNlKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmZhaWwoKGUpID0+IHtcbiAgICAgICAgICBwcmVzdGFzaG9wLmVtaXQoXCJoYW5kbGVFcnJvclwiLCB7XG4gICAgICAgICAgICBldmVudFR5cGU6IFwidXBkYXRlQ2FydFwiLFxuICAgICAgICAgICAgcmVzcDogZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwcm9tb1N1Ym1pdEJ0bi50ZXh0KFwiQUREXCIpO1xuICAgICAgICAgIHByb21vU3VibWl0QnRuLnByb3AoXCJkaXNhYmxlXCIsIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnID8gUmVmbGVjdCA6IG51bGxcbnZhciBSZWZsZWN0QXBwbHkgPSBSICYmIHR5cGVvZiBSLmFwcGx5ID09PSAnZnVuY3Rpb24nXG4gID8gUi5hcHBseVxuICA6IGZ1bmN0aW9uIFJlZmxlY3RBcHBseSh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpO1xuICB9XG5cbnZhciBSZWZsZWN0T3duS2V5c1xuaWYgKFIgJiYgdHlwZW9mIFIub3duS2V5cyA9PT0gJ2Z1bmN0aW9uJykge1xuICBSZWZsZWN0T3duS2V5cyA9IFIub3duS2V5c1xufSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldClcbiAgICAgIC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpKTtcbiAgfTtcbn0gZWxzZSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFByb2Nlc3NFbWl0V2FybmluZyh3YXJuaW5nKSB7XG4gIGlmIChjb25zb2xlICYmIGNvbnNvbGUud2FybikgY29uc29sZS53YXJuKHdhcm5pbmcpO1xufVxuXG52YXIgTnVtYmVySXNOYU4gPSBOdW1iZXIuaXNOYU4gfHwgZnVuY3Rpb24gTnVtYmVySXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICBFdmVudEVtaXR0ZXIuaW5pdC5jYWxsKHRoaXMpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG5tb2R1bGUuZXhwb3J0cy5vbmNlID0gb25jZTtcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC4xMC54XG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHNDb3VudCA9IDA7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG5cbi8vIEJ5IGRlZmF1bHQgRXZlbnRFbWl0dGVycyB3aWxsIHByaW50IGEgd2FybmluZyBpZiBtb3JlIHRoYW4gMTAgbGlzdGVuZXJzIGFyZVxuLy8gYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1c2VmdWwgZGVmYXVsdCB3aGljaCBoZWxwcyBmaW5kaW5nIG1lbW9yeSBsZWFrcy5cbnZhciBkZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7XG5cbmZ1bmN0aW9uIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImxpc3RlbmVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgbGlzdGVuZXIpO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudEVtaXR0ZXIsICdkZWZhdWx0TWF4TGlzdGVuZXJzJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkZWZhdWx0TWF4TGlzdGVuZXJzO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKGFyZykge1xuICAgIGlmICh0eXBlb2YgYXJnICE9PSAnbnVtYmVyJyB8fCBhcmcgPCAwIHx8IE51bWJlcklzTmFOKGFyZykpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJkZWZhdWx0TWF4TGlzdGVuZXJzXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIGFyZyArICcuJyk7XG4gICAgfVxuICAgIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSBhcmc7XG4gIH1cbn0pO1xuXG5FdmVudEVtaXR0ZXIuaW5pdCA9IGZ1bmN0aW9uKCkge1xuXG4gIGlmICh0aGlzLl9ldmVudHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5fZXZlbnRzID09PSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50cykge1xuICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICB9XG5cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDtcbn07XG5cbi8vIE9idmlvdXNseSBub3QgYWxsIEVtaXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRvIDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93c1xuLy8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycyhuKSB7XG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicgfHwgbiA8IDAgfHwgTnVtYmVySXNOYU4obikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiblwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBuICsgJy4nKTtcbiAgfVxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIF9nZXRNYXhMaXN0ZW5lcnModGhhdCkge1xuICBpZiAodGhhdC5fbWF4TGlzdGVuZXJzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzO1xuICByZXR1cm4gdGhhdC5fbWF4TGlzdGVuZXJzO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmdldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIGdldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIF9nZXRNYXhMaXN0ZW5lcnModGhpcyk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KHR5cGUpIHtcbiAgdmFyIGFyZ3MgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICB2YXIgZG9FcnJvciA9ICh0eXBlID09PSAnZXJyb3InKTtcblxuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpXG4gICAgZG9FcnJvciA9IChkb0Vycm9yICYmIGV2ZW50cy5lcnJvciA9PT0gdW5kZWZpbmVkKTtcbiAgZWxzZSBpZiAoIWRvRXJyb3IpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIgdGhlbiB0aHJvdy5cbiAgaWYgKGRvRXJyb3IpIHtcbiAgICB2YXIgZXI7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMClcbiAgICAgIGVyID0gYXJnc1swXTtcbiAgICBpZiAoZXIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgLy8gTm90ZTogVGhlIGNvbW1lbnRzIG9uIHRoZSBgdGhyb3dgIGxpbmVzIGFyZSBpbnRlbnRpb25hbCwgdGhleSBzaG93XG4gICAgICAvLyB1cCBpbiBOb2RlJ3Mgb3V0cHV0IGlmIHRoaXMgcmVzdWx0cyBpbiBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uLlxuICAgICAgdGhyb3cgZXI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gICAgfVxuICAgIC8vIEF0IGxlYXN0IGdpdmUgc29tZSBraW5kIG9mIGNvbnRleHQgdG8gdGhlIHVzZXJcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdVbmhhbmRsZWQgZXJyb3IuJyArIChlciA/ICcgKCcgKyBlci5tZXNzYWdlICsgJyknIDogJycpKTtcbiAgICBlcnIuY29udGV4dCA9IGVyO1xuICAgIHRocm93IGVycjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgfVxuXG4gIHZhciBoYW5kbGVyID0gZXZlbnRzW3R5cGVdO1xuXG4gIGlmIChoYW5kbGVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIFJlZmxlY3RBcHBseShoYW5kbGVyLCB0aGlzLCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuID0gaGFuZGxlci5sZW5ndGg7XG4gICAgdmFyIGxpc3RlbmVycyA9IGFycmF5Q2xvbmUoaGFuZGxlciwgbGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKVxuICAgICAgUmVmbGVjdEFwcGx5KGxpc3RlbmVyc1tpXSwgdGhpcywgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIF9hZGRMaXN0ZW5lcih0YXJnZXQsIHR5cGUsIGxpc3RlbmVyLCBwcmVwZW5kKSB7XG4gIHZhciBtO1xuICB2YXIgZXZlbnRzO1xuICB2YXIgZXhpc3Rpbmc7XG5cbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0YXJnZXQuX2V2ZW50c0NvdW50ID0gMDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUbyBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBlID09PSBcIm5ld0xpc3RlbmVyXCIhIEJlZm9yZVxuICAgIC8vIGFkZGluZyBpdCB0byB0aGUgbGlzdGVuZXJzLCBmaXJzdCBlbWl0IFwibmV3TGlzdGVuZXJcIi5cbiAgICBpZiAoZXZlbnRzLm5ld0xpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRhcmdldC5lbWl0KCduZXdMaXN0ZW5lcicsIHR5cGUsXG4gICAgICAgICAgICAgICAgICBsaXN0ZW5lci5saXN0ZW5lciA/IGxpc3RlbmVyLmxpc3RlbmVyIDogbGlzdGVuZXIpO1xuXG4gICAgICAvLyBSZS1hc3NpZ24gYGV2ZW50c2AgYmVjYXVzZSBhIG5ld0xpc3RlbmVyIGhhbmRsZXIgY291bGQgaGF2ZSBjYXVzZWQgdGhlXG4gICAgICAvLyB0aGlzLl9ldmVudHMgdG8gYmUgYXNzaWduZWQgdG8gYSBuZXcgb2JqZWN0XG4gICAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgICB9XG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV07XG4gIH1cblxuICBpZiAoZXhpc3RpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7XG4gICAgKyt0YXJnZXQuX2V2ZW50c0NvdW50O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgZXhpc3RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEFkZGluZyB0aGUgc2Vjb25kIGVsZW1lbnQsIG5lZWQgdG8gY2hhbmdlIHRvIGFycmF5LlxuICAgICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPVxuICAgICAgICBwcmVwZW5kID8gW2xpc3RlbmVyLCBleGlzdGluZ10gOiBbZXhpc3RpbmcsIGxpc3RlbmVyXTtcbiAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGFycmF5LCBqdXN0IGFwcGVuZC5cbiAgICB9IGVsc2UgaWYgKHByZXBlbmQpIHtcbiAgICAgIGV4aXN0aW5nLnVuc2hpZnQobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleGlzdGluZy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgbGlzdGVuZXIgbGVha1xuICAgIG0gPSBfZ2V0TWF4TGlzdGVuZXJzKHRhcmdldCk7XG4gICAgaWYgKG0gPiAwICYmIGV4aXN0aW5nLmxlbmd0aCA+IG0gJiYgIWV4aXN0aW5nLndhcm5lZCkge1xuICAgICAgZXhpc3Rpbmcud2FybmVkID0gdHJ1ZTtcbiAgICAgIC8vIE5vIGVycm9yIGNvZGUgZm9yIHRoaXMgc2luY2UgaXQgaXMgYSBXYXJuaW5nXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgIHZhciB3ID0gbmV3IEVycm9yKCdQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5sZW5ndGggKyAnICcgKyBTdHJpbmcodHlwZSkgKyAnIGxpc3RlbmVycyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY3JlYXNlIGxpbWl0Jyk7XG4gICAgICB3Lm5hbWUgPSAnTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nJztcbiAgICAgIHcuZW1pdHRlciA9IHRhcmdldDtcbiAgICAgIHcudHlwZSA9IHR5cGU7XG4gICAgICB3LmNvdW50ID0gZXhpc3RpbmcubGVuZ3RoO1xuICAgICAgUHJvY2Vzc0VtaXRXYXJuaW5nKHcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiBhZGRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgdHJ1ZSk7XG4gICAgfTtcblxuZnVuY3Rpb24gb25jZVdyYXBwZXIoKSB7XG4gIGlmICghdGhpcy5maXJlZCkge1xuICAgIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSwgdGhpcy53cmFwRm4pO1xuICAgIHRoaXMuZmlyZWQgPSB0cnVlO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk7XG4gICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsIGFyZ3VtZW50cyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX29uY2VXcmFwKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIHN0YXRlID0geyBmaXJlZDogZmFsc2UsIHdyYXBGbjogdW5kZWZpbmVkLCB0YXJnZXQ6IHRhcmdldCwgdHlwZTogdHlwZSwgbGlzdGVuZXI6IGxpc3RlbmVyIH07XG4gIHZhciB3cmFwcGVkID0gb25jZVdyYXBwZXIuYmluZChzdGF0ZSk7XG4gIHdyYXBwZWQubGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgc3RhdGUud3JhcEZuID0gd3JhcHBlZDtcbiAgcmV0dXJuIHdyYXBwZWQ7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UodHlwZSwgbGlzdGVuZXIpIHtcbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gIHRoaXMub24odHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kT25jZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgIHRoaXMucHJlcGVuZExpc3RlbmVyKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuLy8gRW1pdHMgYSAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGlmIGFuZCBvbmx5IGlmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICB2YXIgbGlzdCwgZXZlbnRzLCBwb3NpdGlvbiwgaSwgb3JpZ2luYWxMaXN0ZW5lcjtcblxuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGxpc3QgPSBldmVudHNbdHlwZV07XG4gICAgICBpZiAobGlzdCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgaWYgKGxpc3QgPT09IGxpc3RlbmVyIHx8IGxpc3QubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgICAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0Lmxpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbGlzdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwb3NpdGlvbiA9IC0xO1xuXG4gICAgICAgIGZvciAoaSA9IGxpc3QubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBpZiAobGlzdFtpXSA9PT0gbGlzdGVuZXIgfHwgbGlzdFtpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsTGlzdGVuZXIgPSBsaXN0W2ldLmxpc3RlbmVyO1xuICAgICAgICAgICAgcG9zaXRpb24gPSBpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgMClcbiAgICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgICBpZiAocG9zaXRpb24gPT09IDApXG4gICAgICAgICAgbGlzdC5zaGlmdCgpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBzcGxpY2VPbmUobGlzdCwgcG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKVxuICAgICAgICAgIGV2ZW50c1t0eXBlXSA9IGxpc3RbMF07XG5cbiAgICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBvcmlnaW5hbExpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKHR5cGUpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMsIGV2ZW50cywgaTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8gZW1pdFxuICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnRzW3R5cGVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgLy8gZW1pdCByZW1vdmVMaXN0ZW5lciBmb3IgYWxsIGxpc3RlbmVycyBvbiBhbGwgZXZlbnRzXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGV2ZW50cyk7XG4gICAgICAgIHZhciBrZXk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoa2V5ID09PSAncmVtb3ZlTGlzdGVuZXInKSBjb250aW51ZTtcbiAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZW1vdmVMaXN0ZW5lcicpO1xuICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICBsaXN0ZW5lcnMgPSBldmVudHNbdHlwZV07XG5cbiAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzKTtcbiAgICAgIH0gZWxzZSBpZiAobGlzdGVuZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gTElGTyBvcmRlclxuICAgICAgICBmb3IgKGkgPSBsaXN0ZW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuZnVuY3Rpb24gX2xpc3RlbmVycyh0YXJnZXQsIHR5cGUsIHVud3JhcCkge1xuICB2YXIgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG5cbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcbiAgaWYgKGV2bGlzdGVuZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKVxuICAgIHJldHVybiB1bndyYXAgPyBbZXZsaXN0ZW5lci5saXN0ZW5lciB8fCBldmxpc3RlbmVyXSA6IFtldmxpc3RlbmVyXTtcblxuICByZXR1cm4gdW53cmFwID9cbiAgICB1bndyYXBMaXN0ZW5lcnMoZXZsaXN0ZW5lcikgOiBhcnJheUNsb25lKGV2bGlzdGVuZXIsIGV2bGlzdGVuZXIubGVuZ3RoKTtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCB0cnVlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmF3TGlzdGVuZXJzID0gZnVuY3Rpb24gcmF3TGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5saXN0ZW5lckNvdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJDb3VudCh0eXBlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbGlzdGVuZXJDb3VudC5jYWxsKGVtaXR0ZXIsIHR5cGUpO1xuICB9XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBsaXN0ZW5lckNvdW50O1xuZnVuY3Rpb24gbGlzdGVuZXJDb3VudCh0eXBlKSB7XG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG5cbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG5cbiAgICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSBpZiAoZXZsaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXZsaXN0ZW5lci5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZXZlbnROYW1lcyA9IGZ1bmN0aW9uIGV2ZW50TmFtZXMoKSB7XG4gIHJldHVybiB0aGlzLl9ldmVudHNDb3VudCA+IDAgPyBSZWZsZWN0T3duS2V5cyh0aGlzLl9ldmVudHMpIDogW107XG59O1xuXG5mdW5jdGlvbiBhcnJheUNsb25lKGFyciwgbikge1xuICB2YXIgY29weSA9IG5ldyBBcnJheShuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpXG4gICAgY29weVtpXSA9IGFycltpXTtcbiAgcmV0dXJuIGNvcHk7XG59XG5cbmZ1bmN0aW9uIHNwbGljZU9uZShsaXN0LCBpbmRleCkge1xuICBmb3IgKDsgaW5kZXggKyAxIDwgbGlzdC5sZW5ndGg7IGluZGV4KyspXG4gICAgbGlzdFtpbmRleF0gPSBsaXN0W2luZGV4ICsgMV07XG4gIGxpc3QucG9wKCk7XG59XG5cbmZ1bmN0aW9uIHVud3JhcExpc3RlbmVycyhhcnIpIHtcbiAgdmFyIHJldCA9IG5ldyBBcnJheShhcnIubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXQubGVuZ3RoOyArK2kpIHtcbiAgICByZXRbaV0gPSBhcnJbaV0ubGlzdGVuZXIgfHwgYXJyW2ldO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIG9uY2UoZW1pdHRlciwgbmFtZSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGZ1bmN0aW9uIGVycm9yTGlzdGVuZXIoZXJyKSB7XG4gICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKG5hbWUsIHJlc29sdmVyKTtcbiAgICAgIHJlamVjdChlcnIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc29sdmVyKCkge1xuICAgICAgaWYgKHR5cGVvZiBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgICByZXNvbHZlKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCByZXNvbHZlciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGlmIChuYW1lICE9PSAnZXJyb3InKSB7XG4gICAgICBhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlcihlbWl0dGVyLCBlcnJvckxpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgaGFuZGxlciwgZmxhZ3MpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsICdlcnJvcicsIGhhbmRsZXIsIGZsYWdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgbGlzdGVuZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChmbGFncy5vbmNlKSB7XG4gICAgICBlbWl0dGVyLm9uY2UobmFtZSwgbGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbWl0dGVyLm9uKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIEV2ZW50VGFyZ2V0IGRvZXMgbm90IGhhdmUgYGVycm9yYCBldmVudCBzZW1hbnRpY3MgbGlrZSBOb2RlXG4gICAgLy8gRXZlbnRFbWl0dGVycywgd2UgZG8gbm90IGxpc3RlbiBmb3IgYGVycm9yYCBldmVudHMgaGVyZS5cbiAgICBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIobmFtZSwgZnVuY3Rpb24gd3JhcExpc3RlbmVyKGFyZykge1xuICAgICAgLy8gSUUgZG9lcyBub3QgaGF2ZSBidWlsdGluIGB7IG9uY2U6IHRydWUgfWAgc3VwcG9ydCBzbyB3ZVxuICAgICAgLy8gaGF2ZSB0byBkbyBpdCBtYW51YWxseS5cbiAgICAgIGlmIChmbGFncy5vbmNlKSB7XG4gICAgICAgIGVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCB3cmFwTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgbGlzdGVuZXIoYXJnKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJlbWl0dGVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGVtaXR0ZXIpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKi9cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyb3BEb3duIHtcbiAgY29uc3RydWN0b3IoZWwpIHtcbiAgICB0aGlzLmVsID0gZWw7XG4gIH1cblxuICBpbml0KCkge1xuICAgIHRoaXMuZWwub24oJ3Nob3cuYnMuZHJvcGRvd24nLCAoZSwgZWwpID0+IHtcbiAgICAgIGlmIChlbCkge1xuICAgICAgICAkKGAjJHtlbH1gKS5maW5kKCcuZHJvcGRvd24tbWVudScpLmZpcnN0KCkuc3RvcCh0cnVlLCB0cnVlKVxuICAgICAgICAgIC5zbGlkZURvd24oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICQoZS50YXJnZXQpLmZpbmQoJy5kcm9wZG93bi1tZW51JykuZmlyc3QoKS5zdG9wKHRydWUsIHRydWUpXG4gICAgICAgICAgLnNsaWRlRG93bigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5lbC5vbignaGlkZS5icy5kcm9wZG93bicsIChlLCBlbCkgPT4ge1xuICAgICAgaWYgKGVsKSB7XG4gICAgICAgICQoYCMke2VsfWApLmZpbmQoJy5kcm9wZG93bi1tZW51JykuZmlyc3QoKS5zdG9wKHRydWUsIHRydWUpXG4gICAgICAgICAgLnNsaWRlVXAoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICQoZS50YXJnZXQpLmZpbmQoJy5kcm9wZG93bi1tZW51JykuZmlyc3QoKS5zdG9wKHRydWUsIHRydWUpXG4gICAgICAgICAgLnNsaWRlVXAoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZWwuZmluZCgnc2VsZWN0LmxpbmsnKS5lYWNoKChpZHgsIGVsKSA9PiB7XG4gICAgICAkKGVsKS5vbignY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24gPSAkKHRoaXMpLnZhbCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjAgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqL1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRm9ybSB7XG4gIGluaXQoKSB7XG4gICAgdGhpcy5wYXJlbnRGb2N1cygpO1xuICAgIHRoaXMudG9nZ2xlUGFzc3dvcmRWaXNpYmlsaXR5KCk7XG4gIH1cblxuICBwYXJlbnRGb2N1cygpIHtcbiAgICAkKCcuanMtY2hpbGQtZm9jdXMnKS5vbignZm9jdXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5qcy1wYXJlbnQtZm9jdXMnKS5hZGRDbGFzcygnZm9jdXMnKTtcbiAgICB9KTtcbiAgICAkKCcuanMtY2hpbGQtZm9jdXMnKS5vbignZm9jdXNvdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5qcy1wYXJlbnQtZm9jdXMnKS5yZW1vdmVDbGFzcygnZm9jdXMnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZVBhc3N3b3JkVmlzaWJpbGl0eSgpIHtcbiAgICAkKCdidXR0b25bZGF0YS1hY3Rpb249XCJzaG93LXBhc3N3b3JkXCJdJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZWxtID0gJCh0aGlzKS5jbG9zZXN0KCcuaW5wdXQtZ3JvdXAnKS5jaGlsZHJlbignaW5wdXQuanMtdmlzaWJsZS1wYXNzd29yZCcpO1xuXG4gICAgICBpZiAoZWxtLmF0dHIoJ3R5cGUnKSA9PT0gJ3Bhc3N3b3JkJykge1xuICAgICAgICBlbG0uYXR0cigndHlwZScsICd0ZXh0Jyk7XG4gICAgICAgICQodGhpcykudGV4dCgkKHRoaXMpLmRhdGEoJ3RleHRIaWRlJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxtLmF0dHIoJ3R5cGUnLCAncGFzc3dvcmQnKTtcbiAgICAgICAgJCh0aGlzKS50ZXh0KCQodGhpcykuZGF0YSgndGV4dFNob3cnKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIi8qIGdsb2JhbCB3aW5kb3csIGV4cG9ydHMsIGRlZmluZSAqL1xuXG4hZnVuY3Rpb24oKSB7XG4gICAgJ3VzZSBzdHJpY3QnXG5cbiAgICB2YXIgcmUgPSB7XG4gICAgICAgIG5vdF9zdHJpbmc6IC9bXnNdLyxcbiAgICAgICAgbm90X2Jvb2w6IC9bXnRdLyxcbiAgICAgICAgbm90X3R5cGU6IC9bXlRdLyxcbiAgICAgICAgbm90X3ByaW1pdGl2ZTogL1tedl0vLFxuICAgICAgICBudW1iZXI6IC9bZGllZmddLyxcbiAgICAgICAgbnVtZXJpY19hcmc6IC9bYmNkaWVmZ3V4WF0vLFxuICAgICAgICBqc29uOiAvW2pdLyxcbiAgICAgICAgbm90X2pzb246IC9bXmpdLyxcbiAgICAgICAgdGV4dDogL15bXlxceDI1XSsvLFxuICAgICAgICBtb2R1bG86IC9eXFx4MjV7Mn0vLFxuICAgICAgICBwbGFjZWhvbGRlcjogL15cXHgyNSg/OihbMS05XVxcZCopXFwkfFxcKChbXildKylcXCkpPyhcXCspPygwfCdbXiRdKT8oLSk/KFxcZCspPyg/OlxcLihcXGQrKSk/KFtiLWdpam9zdFR1dnhYXSkvLFxuICAgICAgICBrZXk6IC9eKFthLXpfXVthLXpfXFxkXSopL2ksXG4gICAgICAgIGtleV9hY2Nlc3M6IC9eXFwuKFthLXpfXVthLXpfXFxkXSopL2ksXG4gICAgICAgIGluZGV4X2FjY2VzczogL15cXFsoXFxkKylcXF0vLFxuICAgICAgICBzaWduOiAvXlsrLV0vXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3ByaW50ZihrZXkpIHtcbiAgICAgICAgLy8gYGFyZ3VtZW50c2AgaXMgbm90IGFuIGFycmF5LCBidXQgc2hvdWxkIGJlIGZpbmUgZm9yIHRoaXMgY2FsbFxuICAgICAgICByZXR1cm4gc3ByaW50Zl9mb3JtYXQoc3ByaW50Zl9wYXJzZShrZXkpLCBhcmd1bWVudHMpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdnNwcmludGYoZm10LCBhcmd2KSB7XG4gICAgICAgIHJldHVybiBzcHJpbnRmLmFwcGx5KG51bGwsIFtmbXRdLmNvbmNhdChhcmd2IHx8IFtdKSlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzcHJpbnRmX2Zvcm1hdChwYXJzZV90cmVlLCBhcmd2KSB7XG4gICAgICAgIHZhciBjdXJzb3IgPSAxLCB0cmVlX2xlbmd0aCA9IHBhcnNlX3RyZWUubGVuZ3RoLCBhcmcsIG91dHB1dCA9ICcnLCBpLCBrLCBwaCwgcGFkLCBwYWRfY2hhcmFjdGVyLCBwYWRfbGVuZ3RoLCBpc19wb3NpdGl2ZSwgc2lnblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdHJlZV9sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJzZV90cmVlW2ldID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSBwYXJzZV90cmVlW2ldXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgcGFyc2VfdHJlZVtpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBwaCA9IHBhcnNlX3RyZWVbaV0gLy8gY29udmVuaWVuY2UgcHVycG9zZXMgb25seVxuICAgICAgICAgICAgICAgIGlmIChwaC5rZXlzKSB7IC8vIGtleXdvcmQgYXJndW1lbnRcbiAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndltjdXJzb3JdXG4gICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBwaC5rZXlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzcHJpbnRmKCdbc3ByaW50Zl0gQ2Fubm90IGFjY2VzcyBwcm9wZXJ0eSBcIiVzXCIgb2YgdW5kZWZpbmVkIHZhbHVlIFwiJXNcIicsIHBoLmtleXNba10sIHBoLmtleXNbay0xXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmdbcGgua2V5c1trXV1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwaC5wYXJhbV9ubykgeyAvLyBwb3NpdGlvbmFsIGFyZ3VtZW50IChleHBsaWNpdClcbiAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndltwaC5wYXJhbV9ub11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7IC8vIHBvc2l0aW9uYWwgYXJndW1lbnQgKGltcGxpY2l0KVxuICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd2W2N1cnNvcisrXVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyZS5ub3RfdHlwZS50ZXN0KHBoLnR5cGUpICYmIHJlLm5vdF9wcmltaXRpdmUudGVzdChwaC50eXBlKSAmJiBhcmcgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcoKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyZS5udW1lcmljX2FyZy50ZXN0KHBoLnR5cGUpICYmICh0eXBlb2YgYXJnICE9PSAnbnVtYmVyJyAmJiBpc05hTihhcmcpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHNwcmludGYoJ1tzcHJpbnRmXSBleHBlY3RpbmcgbnVtYmVyIGJ1dCBmb3VuZCAlVCcsIGFyZykpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlLm51bWJlci50ZXN0KHBoLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzX3Bvc2l0aXZlID0gYXJnID49IDBcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHBoLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYic6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBwYXJzZUludChhcmcsIDEwKS50b1N0cmluZygyKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGFyZywgMTApKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2knOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gcGFyc2VJbnQoYXJnLCAxMClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2onOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gSlNPTi5zdHJpbmdpZnkoYXJnLCBudWxsLCBwaC53aWR0aCA/IHBhcnNlSW50KHBoLndpZHRoKSA6IDApXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHBoLnByZWNpc2lvbiA/IHBhcnNlRmxvYXQoYXJnKS50b0V4cG9uZW50aWFsKHBoLnByZWNpc2lvbikgOiBwYXJzZUZsb2F0KGFyZykudG9FeHBvbmVudGlhbCgpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdmJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHBoLnByZWNpc2lvbiA/IHBhcnNlRmxvYXQoYXJnKS50b0ZpeGVkKHBoLnByZWNpc2lvbikgOiBwYXJzZUZsb2F0KGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2cnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gcGgucHJlY2lzaW9uID8gU3RyaW5nKE51bWJlcihhcmcudG9QcmVjaXNpb24ocGgucHJlY2lzaW9uKSkpIDogcGFyc2VGbG9hdChhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdvJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IChwYXJzZUludChhcmcsIDEwKSA+Pj4gMCkudG9TdHJpbmcoOClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gU3RyaW5nKGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IChwaC5wcmVjaXNpb24gPyBhcmcuc3Vic3RyaW5nKDAsIHBoLnByZWNpc2lvbikgOiBhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IFN0cmluZyghIWFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IChwaC5wcmVjaXNpb24gPyBhcmcuc3Vic3RyaW5nKDAsIHBoLnByZWNpc2lvbikgOiBhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdUJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAocGgucHJlY2lzaW9uID8gYXJnLnN1YnN0cmluZygwLCBwaC5wcmVjaXNpb24pIDogYXJnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBwYXJzZUludChhcmcsIDEwKSA+Pj4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndic6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAocGgucHJlY2lzaW9uID8gYXJnLnN1YnN0cmluZygwLCBwaC5wcmVjaXNpb24pIDogYXJnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAneCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAocGFyc2VJbnQoYXJnLCAxMCkgPj4+IDApLnRvU3RyaW5nKDE2KVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnWCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAocGFyc2VJbnQoYXJnLCAxMCkgPj4+IDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmUuanNvbi50ZXN0KHBoLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSBhcmdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZS5udW1iZXIudGVzdChwaC50eXBlKSAmJiAoIWlzX3Bvc2l0aXZlIHx8IHBoLnNpZ24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaWduID0gaXNfcG9zaXRpdmUgPyAnKycgOiAnLSdcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZy50b1N0cmluZygpLnJlcGxhY2UocmUuc2lnbiwgJycpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaWduID0gJydcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwYWRfY2hhcmFjdGVyID0gcGgucGFkX2NoYXIgPyBwaC5wYWRfY2hhciA9PT0gJzAnID8gJzAnIDogcGgucGFkX2NoYXIuY2hhckF0KDEpIDogJyAnXG4gICAgICAgICAgICAgICAgICAgIHBhZF9sZW5ndGggPSBwaC53aWR0aCAtIChzaWduICsgYXJnKS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgcGFkID0gcGgud2lkdGggPyAocGFkX2xlbmd0aCA+IDAgPyBwYWRfY2hhcmFjdGVyLnJlcGVhdChwYWRfbGVuZ3RoKSA6ICcnKSA6ICcnXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSBwaC5hbGlnbiA/IHNpZ24gKyBhcmcgKyBwYWQgOiAocGFkX2NoYXJhY3RlciA9PT0gJzAnID8gc2lnbiArIHBhZCArIGFyZyA6IHBhZCArIHNpZ24gKyBhcmcpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXRcbiAgICB9XG5cbiAgICB2YXIgc3ByaW50Zl9jYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuICAgIGZ1bmN0aW9uIHNwcmludGZfcGFyc2UoZm10KSB7XG4gICAgICAgIGlmIChzcHJpbnRmX2NhY2hlW2ZtdF0pIHtcbiAgICAgICAgICAgIHJldHVybiBzcHJpbnRmX2NhY2hlW2ZtdF1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfZm10ID0gZm10LCBtYXRjaCwgcGFyc2VfdHJlZSA9IFtdLCBhcmdfbmFtZXMgPSAwXG4gICAgICAgIHdoaWxlIChfZm10KSB7XG4gICAgICAgICAgICBpZiAoKG1hdGNoID0gcmUudGV4dC5leGVjKF9mbXQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBhcnNlX3RyZWUucHVzaChtYXRjaFswXSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKChtYXRjaCA9IHJlLm1vZHVsby5leGVjKF9mbXQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBhcnNlX3RyZWUucHVzaCgnJScpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICgobWF0Y2ggPSByZS5wbGFjZWhvbGRlci5leGVjKF9mbXQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaFsyXSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdfbmFtZXMgfD0gMVxuICAgICAgICAgICAgICAgICAgICB2YXIgZmllbGRfbGlzdCA9IFtdLCByZXBsYWNlbWVudF9maWVsZCA9IG1hdGNoWzJdLCBmaWVsZF9tYXRjaCA9IFtdXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZmllbGRfbWF0Y2ggPSByZS5rZXkuZXhlYyhyZXBsYWNlbWVudF9maWVsZCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9saXN0LnB1c2goZmllbGRfbWF0Y2hbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKHJlcGxhY2VtZW50X2ZpZWxkID0gcmVwbGFjZW1lbnRfZmllbGQuc3Vic3RyaW5nKGZpZWxkX21hdGNoWzBdLmxlbmd0aCkpICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZmllbGRfbWF0Y2ggPSByZS5rZXlfYWNjZXNzLmV4ZWMocmVwbGFjZW1lbnRfZmllbGQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9saXN0LnB1c2goZmllbGRfbWF0Y2hbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChmaWVsZF9tYXRjaCA9IHJlLmluZGV4X2FjY2Vzcy5leGVjKHJlcGxhY2VtZW50X2ZpZWxkKSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbGlzdC5wdXNoKGZpZWxkX21hdGNoWzFdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdbc3ByaW50Zl0gZmFpbGVkIHRvIHBhcnNlIG5hbWVkIGFyZ3VtZW50IGtleScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdbc3ByaW50Zl0gZmFpbGVkIHRvIHBhcnNlIG5hbWVkIGFyZ3VtZW50IGtleScpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hbMl0gPSBmaWVsZF9saXN0XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcmdfbmFtZXMgfD0gMlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYXJnX25hbWVzID09PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignW3NwcmludGZdIG1peGluZyBwb3NpdGlvbmFsIGFuZCBuYW1lZCBwbGFjZWhvbGRlcnMgaXMgbm90ICh5ZXQpIHN1cHBvcnRlZCcpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcGFyc2VfdHJlZS5wdXNoKFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogbWF0Y2hbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV9ubzogICAgbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlzOiAgICAgICAgbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzaWduOiAgICAgICAgbWF0Y2hbM10sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRfY2hhcjogICAgbWF0Y2hbNF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbjogICAgICAgbWF0Y2hbNV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogICAgICAgbWF0Y2hbNl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb246ICAgbWF0Y2hbN10sXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAgICAgICAgbWF0Y2hbOF1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignW3NwcmludGZdIHVuZXhwZWN0ZWQgcGxhY2Vob2xkZXInKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2ZtdCA9IF9mbXQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3ByaW50Zl9jYWNoZVtmbXRdID0gcGFyc2VfdHJlZVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGV4cG9ydCB0byBlaXRoZXIgYnJvd3NlciBvciBub2RlLmpzXG4gICAgICovXG4gICAgLyogZXNsaW50LWRpc2FibGUgcXVvdGUtcHJvcHMgKi9cbiAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGV4cG9ydHNbJ3NwcmludGYnXSA9IHNwcmludGZcbiAgICAgICAgZXhwb3J0c1sndnNwcmludGYnXSA9IHZzcHJpbnRmXG4gICAgfVxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3aW5kb3dbJ3NwcmludGYnXSA9IHNwcmludGZcbiAgICAgICAgd2luZG93Wyd2c3ByaW50ZiddID0gdnNwcmludGZcblxuICAgICAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmVbJ2FtZCddKSB7XG4gICAgICAgICAgICBkZWZpbmUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgJ3NwcmludGYnOiBzcHJpbnRmLFxuICAgICAgICAgICAgICAgICAgICAndnNwcmludGYnOiB2c3ByaW50ZlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSBxdW90ZS1wcm9wcyAqL1xufSgpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKi9cblxuaW1wb3J0IHtzcHJpbnRmfSBmcm9tICdzcHJpbnRmLWpzJztcblxuY29uc3Qge3Bhc3N3b3JkUG9saWN5OiBQYXNzd29yZFBvbGljeU1hcH0gPSBwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzO1xuXG5jb25zdCBQQVNTV09SRF9QT0xJQ1lfRVJST1IgPSAnVGhlIHBhc3N3b3JkIHBvbGljeSBlbGVtZW50cyBhcmUgdW5kZWZpbmVkLic7XG5cbmNvbnN0IGdldFBhc3N3b3JkU3RyZW5ndGhGZWVkYmFjayA9IChcbiAgc3RyZW5ndGgsXG4pID0+IHtcbiAgc3dpdGNoIChzdHJlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yOiAnYmctZGFuZ2VyJyxcbiAgICAgIH07XG5cbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2xvcjogJ2JnLWRhbmdlcicsXG4gICAgICB9O1xuXG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sb3I6ICdiZy13YXJuaW5nJyxcbiAgICAgIH07XG5cbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2xvcjogJ2JnLXN1Y2Nlc3MnLFxuICAgICAgfTtcblxuICAgIGNhc2UgNDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yOiAnYmctc3VjY2VzcycsXG4gICAgICB9O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwYXNzd29yZCBzdHJlbmd0aCBpbmRpY2F0b3IuJyk7XG4gIH1cbn07XG5cbmNvbnN0IHdhdGNoUGFzc3dvcmQgPSBhc3luYyAoXG4gIGVsZW1lbnRJbnB1dCxcbiAgZmVlZGJhY2tDb250YWluZXIsXG4gIGhpbnRzLFxuKSA9PiB7XG4gIGNvbnN0IHtwcmVzdGFzaG9wfSA9IHdpbmRvdztcbiAgY29uc3QgcGFzc3dvcmRWYWx1ZSA9IGVsZW1lbnRJbnB1dC52YWx1ZTtcbiAgY29uc3QgZWxlbWVudEljb24gPSBmZWVkYmFja0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFBhc3N3b3JkUG9saWN5TWFwLnJlcXVpcmVtZW50U2NvcmVJY29uKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJlc3Rhc2hvcC5jaGVja1Bhc3N3b3JkU2NvcmUocGFzc3dvcmRWYWx1ZSk7XG4gIGNvbnN0IGZlZWRiYWNrID0gZ2V0UGFzc3dvcmRTdHJlbmd0aEZlZWRiYWNrKHJlc3VsdC5zY29yZSk7XG4gIGNvbnN0IHBhc3N3b3JkTGVuZ3RoID0gcGFzc3dvcmRWYWx1ZS5sZW5ndGg7XG4gIGNvbnN0IHBvcG92ZXJDb250ZW50ID0gW107XG5cbiAgJChlbGVtZW50SW5wdXQpLnBvcG92ZXIoJ2Rpc3Bvc2UnKTtcblxuICBmZWVkYmFja0NvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gcGFzc3dvcmRWYWx1ZSA9PT0gJycgPyAnbm9uZScgOiAnYmxvY2snO1xuXG4gIGlmIChyZXN1bHQuZmVlZGJhY2sud2FybmluZyAhPT0gJycpIHtcbiAgICBpZiAocmVzdWx0LmZlZWRiYWNrLndhcm5pbmcgaW4gaGludHMpIHtcbiAgICAgIHBvcG92ZXJDb250ZW50LnB1c2goaGludHNbcmVzdWx0LmZlZWRiYWNrLndhcm5pbmddKTtcbiAgICB9XG4gIH1cblxuICByZXN1bHQuZmVlZGJhY2suc3VnZ2VzdGlvbnMuZm9yRWFjaCgoc3VnZ2VzdGlvbikgPT4ge1xuICAgIGlmIChzdWdnZXN0aW9uIGluIGhpbnRzKSB7XG4gICAgICBwb3BvdmVyQ29udGVudC5wdXNoKGhpbnRzW3N1Z2dlc3Rpb25dKTtcbiAgICB9XG4gIH0pO1xuXG4gICQoZWxlbWVudElucHV0KS5wb3BvdmVyKHtcbiAgICBodG1sOiB0cnVlLFxuICAgIHBsYWNlbWVudDogJ3RvcCcsXG4gICAgY29udGVudDogcG9wb3ZlckNvbnRlbnQuam9pbignPGJyLz4nKSxcbiAgfSkucG9wb3Zlcignc2hvdycpO1xuXG4gIGNvbnN0IHBhc3N3b3JkTGVuZ3RoVmFsaWQgPSBwYXNzd29yZExlbmd0aCA+PSBwYXJzZUludChlbGVtZW50SW5wdXQuZGF0YXNldC5taW5sZW5ndGgsIDEwKVxuICAgICYmIHBhc3N3b3JkTGVuZ3RoIDw9IHBhcnNlSW50KGVsZW1lbnRJbnB1dC5kYXRhc2V0Lm1heGxlbmd0aCwgMTApO1xuICBjb25zdCBwYXNzd29yZFNjb3JlVmFsaWQgPSBwYXJzZUludChlbGVtZW50SW5wdXQuZGF0YXNldC5taW5zY29yZSwgMTApIDw9IHJlc3VsdC5zY29yZTtcblxuICBmZWVkYmFja0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFBhc3N3b3JkUG9saWN5TWFwLnJlcXVpcmVtZW50TGVuZ3RoSWNvbikuY2xhc3NMaXN0LnRvZ2dsZShcbiAgICAndGV4dC1zdWNjZXNzJyxcbiAgICBwYXNzd29yZExlbmd0aFZhbGlkLFxuICApO1xuXG4gIGVsZW1lbnRJY29uLmNsYXNzTGlzdC50b2dnbGUoXG4gICAgJ3RleHQtc3VjY2VzcycsXG4gICAgcGFzc3dvcmRTY29yZVZhbGlkLFxuICApO1xuXG4gIC8vIENoYW5nZSBpbnB1dCBib3JkZXIgY29sb3IgZGVwZW5kaW5nIG9uIHRoZSB2YWxpZGl0eVxuICBlbGVtZW50SW5wdXRcbiAgICAuY2xhc3NMaXN0LnJlbW92ZSgnYm9yZGVyLXN1Y2Nlc3MnLCAnYm9yZGVyLWRhbmdlcicpO1xuICBlbGVtZW50SW5wdXRcbiAgICAuY2xhc3NMaXN0LmFkZChwYXNzd29yZFNjb3JlVmFsaWQgJiYgcGFzc3dvcmRMZW5ndGhWYWxpZCA/ICdib3JkZXItc3VjY2VzcycgOiAnYm9yZGVyLWRhbmdlcicpO1xuICBlbGVtZW50SW5wdXRcbiAgICAuY2xhc3NMaXN0LmFkZCgnZm9ybS1jb250cm9sJywgJ2JvcmRlcicpO1xuXG4gIGNvbnN0IHBlcmNlbnRhZ2UgPSAocmVzdWx0LnNjb3JlICogMjApICsgMjA7XG4gIGNvbnN0IHByb2dyZXNzQmFyID0gZmVlZGJhY2tDb250YWluZXIucXVlcnlTZWxlY3RvcihQYXNzd29yZFBvbGljeU1hcC5wcm9ncmVzc0Jhcik7XG5cbiAgLy8gaW5jcmVhc2UgYW5kIGRlY3JlYXNlIHByb2dyZXNzIGJhclxuICBpZiAocHJvZ3Jlc3NCYXIpIHtcbiAgICBwcm9ncmVzc0Jhci5zdHlsZS53aWR0aCA9IGAke3BlcmNlbnRhZ2V9JWA7XG4gICAgcHJvZ3Jlc3NCYXIuY2xhc3NMaXN0LnJlbW92ZSgnYmctc3VjY2VzcycsICdiZy1kYW5nZXInLCAnYmctd2FybmluZycpO1xuICAgIHByb2dyZXNzQmFyLmNsYXNzTGlzdC5hZGQoZmVlZGJhY2suY29sb3IpO1xuICB9XG59O1xuXG4vLyBOb3QgdGVzdGFibGUgYmVjYXVzZSBpdCBtYW5pcHVsYXRlcyBTVkcgZWxlbWVudHMsIHVuc3VwcG9ydGVkIGJ5IEpTRG9tXG5jb25zdCB1c2VQYXNzd29yZFBvbGljeSA9IChzZWxlY3RvcikgPT4ge1xuICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgY29uc3QgaW5wdXRDb2x1bW4gPSBlbGVtZW50Py5xdWVyeVNlbGVjdG9yKFBhc3N3b3JkUG9saWN5TWFwLmlucHV0Q29sdW1uKTtcbiAgICBjb25zdCBlbGVtZW50SW5wdXQgPSBlbGVtZW50Py5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICAgIGNvbnN0IHRlbXBsYXRlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IGZlZWRiYWNrVGVtcGxhdGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFBhc3N3b3JkUG9saWN5TWFwLnRlbXBsYXRlKTtcbiAgICBsZXQgZmVlZGJhY2tDb250YWluZXI7XG5cbiAgICBpZiAoZmVlZGJhY2tUZW1wbGF0ZSAmJiBlbGVtZW50ICYmIGlucHV0Q29sdW1uICYmIGVsZW1lbnRJbnB1dCkge1xuICAgICAgdGVtcGxhdGVFbGVtZW50LmlubmVySFRNTCA9IGZlZWRiYWNrVGVtcGxhdGUuaW5uZXJIVE1MO1xuICAgICAgaW5wdXRDb2x1bW4uYXBwZW5kKHRlbXBsYXRlRWxlbWVudCk7XG4gICAgICBmZWVkYmFja0NvbnRhaW5lciA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcihQYXNzd29yZFBvbGljeU1hcC5jb250YWluZXIpO1xuXG4gICAgICBpZiAoZmVlZGJhY2tDb250YWluZXIpIHtcbiAgICAgICAgY29uc3QgaGludEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFBhc3N3b3JkUG9saWN5TWFwLmhpbnQpO1xuXG4gICAgICAgIGlmIChoaW50RWxlbWVudCkge1xuICAgICAgICAgIGNvbnN0IGhpbnRzID0gSlNPTi5wYXJzZShoaW50RWxlbWVudC5pbm5lckhUTUwpO1xuXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgICBjb25zdCBwYXNzd29yZFJlcXVpcmVtZW50c0xlbmd0aCA9IGZlZWRiYWNrQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoUGFzc3dvcmRQb2xpY3lNYXAucmVxdWlyZW1lbnRMZW5ndGgpO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgICAgY29uc3QgcGFzc3dvcmRSZXF1aXJlbWVudHNTY29yZSA9IGZlZWRiYWNrQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoUGFzc3dvcmRQb2xpY3lNYXAucmVxdWlyZW1lbnRTY29yZSk7XG4gICAgICAgICAgY29uc3QgcGFzc3dvcmRMZW5ndGhUZXh0ID0gcGFzc3dvcmRSZXF1aXJlbWVudHNMZW5ndGg/LnF1ZXJ5U2VsZWN0b3IoJ3NwYW4nKTtcbiAgICAgICAgICBjb25zdCBwYXNzd29yZFJlcXVpcmVtZW50c1RleHQgPSBwYXNzd29yZFJlcXVpcmVtZW50c1Njb3JlPy5xdWVyeVNlbGVjdG9yKCdzcGFuJyk7XG5cbiAgICAgICAgICBpZiAocGFzc3dvcmRMZW5ndGhUZXh0ICYmIHBhc3N3b3JkUmVxdWlyZW1lbnRzTGVuZ3RoICYmIHBhc3N3b3JkUmVxdWlyZW1lbnRzTGVuZ3RoLmRhdGFzZXQudHJhbnNsYXRpb24pIHtcbiAgICAgICAgICAgIHBhc3N3b3JkTGVuZ3RoVGV4dC5pbm5lclRleHQgPSBzcHJpbnRmKFxuICAgICAgICAgICAgICBwYXNzd29yZFJlcXVpcmVtZW50c0xlbmd0aC5kYXRhc2V0LnRyYW5zbGF0aW9uLFxuICAgICAgICAgICAgICBlbGVtZW50SW5wdXQuZGF0YXNldC5taW5sZW5ndGgsXG4gICAgICAgICAgICAgIGVsZW1lbnRJbnB1dC5kYXRhc2V0Lm1heGxlbmd0aCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHBhc3N3b3JkUmVxdWlyZW1lbnRzVGV4dCAmJiBwYXNzd29yZFJlcXVpcmVtZW50c1Njb3JlICYmIHBhc3N3b3JkUmVxdWlyZW1lbnRzU2NvcmUuZGF0YXNldC50cmFuc2xhdGlvbikge1xuICAgICAgICAgICAgcGFzc3dvcmRSZXF1aXJlbWVudHNUZXh0LmlubmVyVGV4dCA9IHNwcmludGYoXG4gICAgICAgICAgICAgIHBhc3N3b3JkUmVxdWlyZW1lbnRzU2NvcmUuZGF0YXNldC50cmFuc2xhdGlvbixcbiAgICAgICAgICAgICAgaGludHNbZWxlbWVudElucHV0LmRhdGFzZXQubWluc2NvcmVdLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAgIGVsZW1lbnRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsICgpID0+IHdhdGNoUGFzc3dvcmQoZWxlbWVudElucHV0LCBmZWVkYmFja0NvbnRhaW5lciwgaGludHMpKTtcbiAgICAgICAgICBlbGVtZW50SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsICgpID0+IHtcbiAgICAgICAgICAgICQoZWxlbWVudElucHV0KS5wb3BvdmVyKCdkaXNwb3NlJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiBuZXcgRXJyb3IoUEFTU1dPUkRfUE9MSUNZX0VSUk9SKSxcbiAgICB9O1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHVzZVBhc3N3b3JkUG9saWN5O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IHByZXN0YXNob3AgZnJvbSAncHJlc3Rhc2hvcCc7XG5pbXBvcnQgRHJvcERvd24gZnJvbSAnLi9kcm9wLWRvd24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb3BNZW51IGV4dGVuZHMgRHJvcERvd24ge1xuICBpbml0KCkge1xuICAgIGxldCBlbG10Q2xhc3M7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5lbC5maW5kKCdsaScpLm9uKCdtb3VzZWVudGVyIG1vdXNlbGVhdmUnLCAoZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuZWwucGFyZW50KCkuaGFzQ2xhc3MoJ21vYmlsZScpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnRUYXJnZXRDbGFzcyA9ICQoZS5jdXJyZW50VGFyZ2V0KS5hdHRyKCdjbGFzcycpO1xuXG4gICAgICBpZiAoZWxtdENsYXNzICE9PSBjdXJyZW50VGFyZ2V0Q2xhc3MpIHtcbiAgICAgICAgY29uc3QgY2xhc3Nlc1NlbGVjdGVkID0gQXJyYXkucHJvdG90eXBlLnNsaWNlXG4gICAgICAgICAgLmNhbGwoZS5jdXJyZW50VGFyZ2V0LmNsYXNzTGlzdClcbiAgICAgICAgICAubWFwKChlbGVtKSA9PiAodHlwZW9mIGVsZW0gPT09ICdzdHJpbmcnID8gYC4ke2VsZW19YCA6IGZhbHNlKSk7XG5cbiAgICAgICAgZWxtdENsYXNzID0gY2xhc3Nlc1NlbGVjdGVkLmpvaW4oJycpO1xuXG4gICAgICAgIGlmIChlbG10Q2xhc3MgJiYgJChlLnRhcmdldCkuZGF0YSgnZGVwdGgnKSA9PT0gMCkge1xuICAgICAgICAgICQoYCR7ZWxtdENsYXNzfSAuanMtc3ViLW1lbnVgKS5jc3Moe1xuICAgICAgICAgICAgdG9wOiAkKGAke2VsbXRDbGFzc31gKS5oZWlnaHQoKSArICQoYCR7ZWxtdENsYXNzfWApLnBvc2l0aW9uKCkudG9wLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgJCgnI21lbnUtaWNvbicpLm9uKCdjbGljaycsICgpID0+IHtcbiAgICAgICQoJyNtb2JpbGVfdG9wX21lbnVfd3JhcHBlcicpLnRvZ2dsZSgpO1xuICAgICAgc2VsZi50b2dnbGVNb2JpbGVNZW51KCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmVsLm9uKCdjbGljaycsIChlKSA9PiB7XG4gICAgICBpZiAodGhpcy5lbC5wYXJlbnQoKS5oYXNDbGFzcygnbW9iaWxlJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcblxuICAgIHByZXN0YXNob3Aub24oJ3Jlc3BvbnNpdmUgdXBkYXRlJywgKCkgPT4ge1xuICAgICAgJCgnLmpzLXN1Yi1tZW51JykucmVtb3ZlQXR0cignc3R5bGUnKTtcbiAgICAgIHNlbGYudG9nZ2xlTW9iaWxlTWVudSgpO1xuICAgIH0pO1xuICAgIHN1cGVyLmluaXQoKTtcbiAgfVxuXG4gIHRvZ2dsZU1vYmlsZU1lbnUoKSB7XG4gICAgJCgnI2hlYWRlcicpLnRvZ2dsZUNsYXNzKCdpcy1vcGVuJyk7XG4gICAgaWYgKCQoJyNtb2JpbGVfdG9wX21lbnVfd3JhcHBlcicpLmlzKCc6dmlzaWJsZScpKSB7XG4gICAgICAkKCcjbm90aWZpY2F0aW9ucywgI3dyYXBwZXIsICNmb290ZXInKS5oaWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICQoJyNub3RpZmljYXRpb25zLCAjd3JhcHBlciwgI2Zvb3RlcicpLnNob3coKTtcbiAgICB9XG4gIH1cbn1cbiIsIlwiZnVuY3Rpb25cIiE9dHlwZW9mIE9iamVjdC5jcmVhdGUmJihPYmplY3QuY3JlYXRlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG8oKXt9cmV0dXJuIG8ucHJvdG90eXBlPXQsbmV3IG99KSxmdW5jdGlvbih0LG8saSxzKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17X3Bvc2l0aW9uQ2xhc3NlczpbXCJib3R0b20tbGVmdFwiLFwiYm90dG9tLXJpZ2h0XCIsXCJ0b3AtcmlnaHRcIixcInRvcC1sZWZ0XCIsXCJib3R0b20tY2VudGVyXCIsXCJ0b3AtY2VudGVyXCIsXCJtaWQtY2VudGVyXCJdLF9kZWZhdWx0SWNvbnM6W1wic3VjY2Vzc1wiLFwiZXJyb3JcIixcImluZm9cIixcIndhcm5pbmdcIl0saW5pdDpmdW5jdGlvbihvLGkpe3RoaXMucHJlcGFyZU9wdGlvbnMobyx0LnRvYXN0Lm9wdGlvbnMpLHRoaXMucHJvY2VzcygpfSxwcmVwYXJlT3B0aW9uczpmdW5jdGlvbihvLGkpe3ZhciBzPXt9O1wic3RyaW5nXCI9PXR5cGVvZiBvfHxvIGluc3RhbmNlb2YgQXJyYXk/cy50ZXh0PW86cz1vLHRoaXMub3B0aW9ucz10LmV4dGVuZCh7fSxpLHMpfSxwcm9jZXNzOmZ1bmN0aW9uKCl7dGhpcy5zZXR1cCgpLHRoaXMuYWRkVG9Eb20oKSx0aGlzLnBvc2l0aW9uKCksdGhpcy5iaW5kVG9hc3QoKSx0aGlzLmFuaW1hdGUoKX0sc2V0dXA6ZnVuY3Rpb24oKXt2YXIgbz1cIlwiO2lmKHRoaXMuX3RvYXN0RWw9dGhpcy5fdG9hc3RFbHx8dChcIjxkaXY+PC9kaXY+XCIse1wiY2xhc3NcIjpcImpxLXRvYXN0LXNpbmdsZVwifSksbys9JzxzcGFuIGNsYXNzPVwianEtdG9hc3QtbG9hZGVyXCI+PC9zcGFuPicsdGhpcy5vcHRpb25zLmFsbG93VG9hc3RDbG9zZSYmKG8rPSc8c3BhbiBjbGFzcz1cImNsb3NlLWpxLXRvYXN0LXNpbmdsZVwiPiZ0aW1lczs8L3NwYW4+JyksdGhpcy5vcHRpb25zLnRleHQgaW5zdGFuY2VvZiBBcnJheSl7dGhpcy5vcHRpb25zLmhlYWRpbmcmJihvKz0nPGgyIGNsYXNzPVwianEtdG9hc3QtaGVhZGluZ1wiPicrdGhpcy5vcHRpb25zLmhlYWRpbmcrXCI8L2gyPlwiKSxvKz0nPHVsIGNsYXNzPVwianEtdG9hc3QtdWxcIj4nO2Zvcih2YXIgaT0wO2k8dGhpcy5vcHRpb25zLnRleHQubGVuZ3RoO2krKylvKz0nPGxpIGNsYXNzPVwianEtdG9hc3QtbGlcIiBpZD1cImpxLXRvYXN0LWl0ZW0tJytpKydcIj4nK3RoaXMub3B0aW9ucy50ZXh0W2ldK1wiPC9saT5cIjtvKz1cIjwvdWw+XCJ9ZWxzZSB0aGlzLm9wdGlvbnMuaGVhZGluZyYmKG8rPSc8aDIgY2xhc3M9XCJqcS10b2FzdC1oZWFkaW5nXCI+Jyt0aGlzLm9wdGlvbnMuaGVhZGluZytcIjwvaDI+XCIpLG8rPXRoaXMub3B0aW9ucy50ZXh0O3RoaXMuX3RvYXN0RWwuaHRtbChvKSx0aGlzLm9wdGlvbnMuYmdDb2xvciE9PSExJiZ0aGlzLl90b2FzdEVsLmNzcyhcImJhY2tncm91bmQtY29sb3JcIix0aGlzLm9wdGlvbnMuYmdDb2xvciksdGhpcy5vcHRpb25zLnRleHRDb2xvciE9PSExJiZ0aGlzLl90b2FzdEVsLmNzcyhcImNvbG9yXCIsdGhpcy5vcHRpb25zLnRleHRDb2xvciksdGhpcy5vcHRpb25zLnRleHRBbGlnbiYmdGhpcy5fdG9hc3RFbC5jc3MoXCJ0ZXh0LWFsaWduXCIsdGhpcy5vcHRpb25zLnRleHRBbGlnbiksdGhpcy5vcHRpb25zLmljb24hPT0hMSYmKHRoaXMuX3RvYXN0RWwuYWRkQ2xhc3MoXCJqcS1oYXMtaWNvblwiKSwtMSE9PXQuaW5BcnJheSh0aGlzLm9wdGlvbnMuaWNvbix0aGlzLl9kZWZhdWx0SWNvbnMpJiZ0aGlzLl90b2FzdEVsLmFkZENsYXNzKFwianEtaWNvbi1cIit0aGlzLm9wdGlvbnMuaWNvbikpLHRoaXMub3B0aW9uc1tcImNsYXNzXCJdIT09ITEmJnRoaXMuX3RvYXN0RWwuYWRkQ2xhc3ModGhpcy5vcHRpb25zW1wiY2xhc3NcIl0pfSxwb3NpdGlvbjpmdW5jdGlvbigpe1wic3RyaW5nXCI9PXR5cGVvZiB0aGlzLm9wdGlvbnMucG9zaXRpb24mJi0xIT09dC5pbkFycmF5KHRoaXMub3B0aW9ucy5wb3NpdGlvbix0aGlzLl9wb3NpdGlvbkNsYXNzZXMpP1wiYm90dG9tLWNlbnRlclwiPT09dGhpcy5vcHRpb25zLnBvc2l0aW9uP3RoaXMuX2NvbnRhaW5lci5jc3Moe2xlZnQ6dChvKS5vdXRlcldpZHRoKCkvMi10aGlzLl9jb250YWluZXIub3V0ZXJXaWR0aCgpLzIsYm90dG9tOjIwfSk6XCJ0b3AtY2VudGVyXCI9PT10aGlzLm9wdGlvbnMucG9zaXRpb24/dGhpcy5fY29udGFpbmVyLmNzcyh7bGVmdDp0KG8pLm91dGVyV2lkdGgoKS8yLXRoaXMuX2NvbnRhaW5lci5vdXRlcldpZHRoKCkvMix0b3A6MjB9KTpcIm1pZC1jZW50ZXJcIj09PXRoaXMub3B0aW9ucy5wb3NpdGlvbj90aGlzLl9jb250YWluZXIuY3NzKHtsZWZ0OnQobykub3V0ZXJXaWR0aCgpLzItdGhpcy5fY29udGFpbmVyLm91dGVyV2lkdGgoKS8yLHRvcDp0KG8pLm91dGVySGVpZ2h0KCkvMi10aGlzLl9jb250YWluZXIub3V0ZXJIZWlnaHQoKS8yfSk6dGhpcy5fY29udGFpbmVyLmFkZENsYXNzKHRoaXMub3B0aW9ucy5wb3NpdGlvbik6XCJvYmplY3RcIj09dHlwZW9mIHRoaXMub3B0aW9ucy5wb3NpdGlvbj90aGlzLl9jb250YWluZXIuY3NzKHt0b3A6dGhpcy5vcHRpb25zLnBvc2l0aW9uLnRvcD90aGlzLm9wdGlvbnMucG9zaXRpb24udG9wOlwiYXV0b1wiLGJvdHRvbTp0aGlzLm9wdGlvbnMucG9zaXRpb24uYm90dG9tP3RoaXMub3B0aW9ucy5wb3NpdGlvbi5ib3R0b206XCJhdXRvXCIsbGVmdDp0aGlzLm9wdGlvbnMucG9zaXRpb24ubGVmdD90aGlzLm9wdGlvbnMucG9zaXRpb24ubGVmdDpcImF1dG9cIixyaWdodDp0aGlzLm9wdGlvbnMucG9zaXRpb24ucmlnaHQ/dGhpcy5vcHRpb25zLnBvc2l0aW9uLnJpZ2h0OlwiYXV0b1wifSk6dGhpcy5fY29udGFpbmVyLmFkZENsYXNzKFwiYm90dG9tLWxlZnRcIil9LGJpbmRUb2FzdDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fdG9hc3RFbC5vbihcImFmdGVyU2hvd25cIixmdW5jdGlvbigpe3QucHJvY2Vzc0xvYWRlcigpfSksdGhpcy5fdG9hc3RFbC5maW5kKFwiLmNsb3NlLWpxLXRvYXN0LXNpbmdsZVwiKS5vbihcImNsaWNrXCIsZnVuY3Rpb24obyl7by5wcmV2ZW50RGVmYXVsdCgpLFwiZmFkZVwiPT09dC5vcHRpb25zLnNob3dIaWRlVHJhbnNpdGlvbj8odC5fdG9hc3RFbC50cmlnZ2VyKFwiYmVmb3JlSGlkZVwiKSx0Ll90b2FzdEVsLmZhZGVPdXQoZnVuY3Rpb24oKXt0Ll90b2FzdEVsLnRyaWdnZXIoXCJhZnRlckhpZGRlblwiKX0pKTpcInNsaWRlXCI9PT10Lm9wdGlvbnMuc2hvd0hpZGVUcmFuc2l0aW9uPyh0Ll90b2FzdEVsLnRyaWdnZXIoXCJiZWZvcmVIaWRlXCIpLHQuX3RvYXN0RWwuc2xpZGVVcChmdW5jdGlvbigpe3QuX3RvYXN0RWwudHJpZ2dlcihcImFmdGVySGlkZGVuXCIpfSkpOih0Ll90b2FzdEVsLnRyaWdnZXIoXCJiZWZvcmVIaWRlXCIpLHQuX3RvYXN0RWwuaGlkZShmdW5jdGlvbigpe3QuX3RvYXN0RWwudHJpZ2dlcihcImFmdGVySGlkZGVuXCIpfSkpfSksXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5vcHRpb25zLmJlZm9yZVNob3cmJnRoaXMuX3RvYXN0RWwub24oXCJiZWZvcmVTaG93XCIsZnVuY3Rpb24oKXt0Lm9wdGlvbnMuYmVmb3JlU2hvdygpfSksXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5vcHRpb25zLmFmdGVyU2hvd24mJnRoaXMuX3RvYXN0RWwub24oXCJhZnRlclNob3duXCIsZnVuY3Rpb24oKXt0Lm9wdGlvbnMuYWZ0ZXJTaG93bigpfSksXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5vcHRpb25zLmJlZm9yZUhpZGUmJnRoaXMuX3RvYXN0RWwub24oXCJiZWZvcmVIaWRlXCIsZnVuY3Rpb24oKXt0Lm9wdGlvbnMuYmVmb3JlSGlkZSgpfSksXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5vcHRpb25zLmFmdGVySGlkZGVuJiZ0aGlzLl90b2FzdEVsLm9uKFwiYWZ0ZXJIaWRkZW5cIixmdW5jdGlvbigpe3Qub3B0aW9ucy5hZnRlckhpZGRlbigpfSl9LGFkZFRvRG9tOmZ1bmN0aW9uKCl7dmFyIG89dChcIi5qcS10b2FzdC13cmFwXCIpO2lmKDA9PT1vLmxlbmd0aD8obz10KFwiPGRpdj48L2Rpdj5cIix7XCJjbGFzc1wiOlwianEtdG9hc3Qtd3JhcFwifSksdChcImJvZHlcIikuYXBwZW5kKG8pKTooIXRoaXMub3B0aW9ucy5zdGFja3x8aXNOYU4ocGFyc2VJbnQodGhpcy5vcHRpb25zLnN0YWNrLDEwKSkpJiZvLmVtcHR5KCksby5maW5kKFwiLmpxLXRvYXN0LXNpbmdsZTpoaWRkZW5cIikucmVtb3ZlKCksby5hcHBlbmQodGhpcy5fdG9hc3RFbCksdGhpcy5vcHRpb25zLnN0YWNrJiYhaXNOYU4ocGFyc2VJbnQodGhpcy5vcHRpb25zLnN0YWNrKSwxMCkpe3ZhciBpPW8uZmluZChcIi5qcS10b2FzdC1zaW5nbGVcIikubGVuZ3RoLHM9aS10aGlzLm9wdGlvbnMuc3RhY2s7cz4wJiZ0KFwiLmpxLXRvYXN0LXdyYXBcIikuZmluZChcIi5qcS10b2FzdC1zaW5nbGVcIikuc2xpY2UoMCxzKS5yZW1vdmUoKX10aGlzLl9jb250YWluZXI9b30sY2FuQXV0b0hpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmhpZGVBZnRlciE9PSExJiYhaXNOYU4ocGFyc2VJbnQodGhpcy5vcHRpb25zLmhpZGVBZnRlciwxMCkpfSxwcm9jZXNzTG9hZGVyOmZ1bmN0aW9uKCl7aWYoIXRoaXMuY2FuQXV0b0hpZGUoKXx8dGhpcy5vcHRpb25zLmxvYWRlcj09PSExKXJldHVybiExO3ZhciB0PXRoaXMuX3RvYXN0RWwuZmluZChcIi5qcS10b2FzdC1sb2FkZXJcIiksbz0odGhpcy5vcHRpb25zLmhpZGVBZnRlci00MDApLzFlMytcInNcIixpPXRoaXMub3B0aW9ucy5sb2FkZXJCZyxzPXQuYXR0cihcInN0eWxlXCIpfHxcIlwiO3M9cy5zdWJzdHJpbmcoMCxzLmluZGV4T2YoXCItd2Via2l0LXRyYW5zaXRpb25cIikpLHMrPVwiLXdlYmtpdC10cmFuc2l0aW9uOiB3aWR0aCBcIitvK1wiIGVhc2UtaW47ICAgICAgICAgICAgICAgICAgICAgICAtby10cmFuc2l0aW9uOiB3aWR0aCBcIitvK1wiIGVhc2UtaW47ICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiB3aWR0aCBcIitvK1wiIGVhc2UtaW47ICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBcIitpK1wiO1wiLHQuYXR0cihcInN0eWxlXCIscykuYWRkQ2xhc3MoXCJqcS10b2FzdC1sb2FkZWRcIil9LGFuaW1hdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuX3RvYXN0RWwuaGlkZSgpLHRoaXMuX3RvYXN0RWwudHJpZ2dlcihcImJlZm9yZVNob3dcIiksXCJmYWRlXCI9PT10aGlzLm9wdGlvbnMuc2hvd0hpZGVUcmFuc2l0aW9uLnRvTG93ZXJDYXNlKCk/dGhpcy5fdG9hc3RFbC5mYWRlSW4oZnVuY3Rpb24oKXt0Ll90b2FzdEVsLnRyaWdnZXIoXCJhZnRlclNob3duXCIpfSk6XCJzbGlkZVwiPT09dGhpcy5vcHRpb25zLnNob3dIaWRlVHJhbnNpdGlvbi50b0xvd2VyQ2FzZSgpP3RoaXMuX3RvYXN0RWwuc2xpZGVEb3duKGZ1bmN0aW9uKCl7dC5fdG9hc3RFbC50cmlnZ2VyKFwiYWZ0ZXJTaG93blwiKX0pOnRoaXMuX3RvYXN0RWwuc2hvdyhmdW5jdGlvbigpe3QuX3RvYXN0RWwudHJpZ2dlcihcImFmdGVyU2hvd25cIil9KSx0aGlzLmNhbkF1dG9IaWRlKCkpe3ZhciB0PXRoaXM7by5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XCJmYWRlXCI9PT10Lm9wdGlvbnMuc2hvd0hpZGVUcmFuc2l0aW9uLnRvTG93ZXJDYXNlKCk/KHQuX3RvYXN0RWwudHJpZ2dlcihcImJlZm9yZUhpZGVcIiksdC5fdG9hc3RFbC5mYWRlT3V0KGZ1bmN0aW9uKCl7dC5fdG9hc3RFbC50cmlnZ2VyKFwiYWZ0ZXJIaWRkZW5cIil9KSk6XCJzbGlkZVwiPT09dC5vcHRpb25zLnNob3dIaWRlVHJhbnNpdGlvbi50b0xvd2VyQ2FzZSgpPyh0Ll90b2FzdEVsLnRyaWdnZXIoXCJiZWZvcmVIaWRlXCIpLHQuX3RvYXN0RWwuc2xpZGVVcChmdW5jdGlvbigpe3QuX3RvYXN0RWwudHJpZ2dlcihcImFmdGVySGlkZGVuXCIpfSkpOih0Ll90b2FzdEVsLnRyaWdnZXIoXCJiZWZvcmVIaWRlXCIpLHQuX3RvYXN0RWwuaGlkZShmdW5jdGlvbigpe3QuX3RvYXN0RWwudHJpZ2dlcihcImFmdGVySGlkZGVuXCIpfSkpfSx0aGlzLm9wdGlvbnMuaGlkZUFmdGVyKX19LHJlc2V0OmZ1bmN0aW9uKG8pe1wiYWxsXCI9PT1vP3QoXCIuanEtdG9hc3Qtd3JhcFwiKS5yZW1vdmUoKTp0aGlzLl90b2FzdEVsLnJlbW92ZSgpfSx1cGRhdGU6ZnVuY3Rpb24odCl7dGhpcy5wcmVwYXJlT3B0aW9ucyh0LHRoaXMub3B0aW9ucyksdGhpcy5zZXR1cCgpLHRoaXMuYmluZFRvYXN0KCl9fTt0LnRvYXN0PWZ1bmN0aW9uKHQpe3ZhciBvPU9iamVjdC5jcmVhdGUobik7cmV0dXJuIG8uaW5pdCh0LHRoaXMpLHtyZXNldDpmdW5jdGlvbih0KXtvLnJlc2V0KHQpfSx1cGRhdGU6ZnVuY3Rpb24odCl7by51cGRhdGUodCl9fX0sdC50b2FzdC5vcHRpb25zPXt0ZXh0OlwiXCIsaGVhZGluZzpcIlwiLHNob3dIaWRlVHJhbnNpdGlvbjpcImZhZGVcIixhbGxvd1RvYXN0Q2xvc2U6ITAsaGlkZUFmdGVyOjNlMyxsb2FkZXI6ITAsbG9hZGVyQmc6XCIjOUVDNjAwXCIsc3RhY2s6NSxwb3NpdGlvbjpcImJvdHRvbS1sZWZ0XCIsYmdDb2xvcjohMSx0ZXh0Q29sb3I6ITEsdGV4dEFsaWduOlwibGVmdFwiLGljb246ITEsYmVmb3JlU2hvdzpmdW5jdGlvbigpe30sYWZ0ZXJTaG93bjpmdW5jdGlvbigpe30sYmVmb3JlSGlkZTpmdW5jdGlvbigpe30sYWZ0ZXJIaWRkZW46ZnVuY3Rpb24oKXt9fX0oalF1ZXJ5LHdpbmRvdyxkb2N1bWVudCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5pbXBvcnQgcHJlc3Rhc2hvcCBmcm9tICdwcmVzdGFzaG9wJztcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgJ2pxdWVyeS10b2FzdC1wbHVnaW4nO1xuaW1wb3J0ICdqcXVlcnktdG9hc3QtcGx1Z2luL2Rpc3QvanF1ZXJ5LnRvYXN0Lm1pbi5jc3MnO1xuXG4kKCgpID0+IHtcbiAgcHJlc3Rhc2hvcC5ibG9ja2NhcnQgPSBwcmVzdGFzaG9wLmJsb2NrY2FydCB8fCB7fTtcbiAgY29uc3Qgc2hvd01vZGFsID0gcHJlc3Rhc2hvcC5ibG9ja2NhcnQuc2hvd01vZGFsXG4gICAgfHwgZnVuY3Rpb24gKG1vZGFsKSB7XG4gICAgICBjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcbiAgICAgICRib2R5LmFwcGVuZChtb2RhbCk7XG4gICAgICAkKCcjYmxvY2tjYXJ0LW1vZGFsJykubW9kYWwoKTtcbiAgICAgIGNvbnNvbGUubG9nKCdjYWxsZWQnKTtcbiAgICAgICRib2R5Lm9uZSgnY2xpY2snLCAnI2Jsb2NrY2FydC1tb2RhbCcsIChldmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmlkID09PSAnYmxvY2tjYXJ0LW1vZGFsJykge1xuICAgICAgICAgICQubW9kYWwuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgcHJlc3Rhc2hvcC5vbigndXBkYXRlQ2FydCcsIChldmVudCkgPT4ge1xuICAgIGNvbnN0IHJlZnJlc2hVUkwgPSAkKCcuYmxvY2tjYXJ0JykuZGF0YSgncmVmcmVzaC11cmwnKTtcbiAgICBsZXQgcmVxdWVzdERhdGEgPSB7fTtcblxuICAgIGlmIChcbiAgICAgIGV2ZW50XG4gICAgICAmJiBldmVudC5yZWFzb25cbiAgICAgICYmIHR5cGVvZiBldmVudC5yZXNwICE9PSAndW5kZWZpbmVkJ1xuICAgICAgJiYgIWV2ZW50LnJlc3AuaGFzRXJyb3JcbiAgICApIHtcbiAgICAgIHJlcXVlc3REYXRhID0ge1xuICAgICAgICBpZF9jdXN0b21pemF0aW9uOiBldmVudC5yZWFzb24uaWRDdXN0b21pemF0aW9uLFxuICAgICAgICBpZF9wcm9kdWN0X2F0dHJpYnV0ZTogZXZlbnQucmVhc29uLmlkUHJvZHVjdEF0dHJpYnV0ZSxcbiAgICAgICAgaWRfcHJvZHVjdDogZXZlbnQucmVhc29uLmlkUHJvZHVjdCxcbiAgICAgICAgYWN0aW9uOiBldmVudC5yZWFzb24ubGlua0FjdGlvbixcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChldmVudCAmJiBldmVudC5yZXNwICYmIGV2ZW50LnJlc3AuaGFzRXJyb3IpIHtcbiAgICAgIHByZXN0YXNob3AuZW1pdCgnc2hvd0Vycm9yTmV4dFRvQWRkdG9DYXJ0QnV0dG9uJywge1xuICAgICAgICBlcnJvck1lc3NhZ2U6IGV2ZW50LnJlc3AuZXJyb3JzLmpvaW4oJzxici8+JyksXG4gICAgICB9KTtcbiAgICB9XG4gICAgJC5wb3N0KHJlZnJlc2hVUkwsIHJlcXVlc3REYXRhKVxuICAgICAgLnRoZW4oKHJlc3ApID0+IHtcbiAgICAgICAgJCgnLmJsb2NrY2FydCcpLnJlcGxhY2VXaXRoKCQocmVzcC5wcmV2aWV3KS5maW5kKCcuYmxvY2tjYXJ0JykpO1xuICAgICAgICBpZiAocmVzcC5tb2RhbCkge1xuICAgICAgICAgICQudG9hc3Qoe1xuICAgICAgICAgICAgaGVhZGluZzogJ0FkZGVkIHRvIENhcnQnLFxuICAgICAgICAgICAgdGV4dDogJ1lvdSBjYW4gY2hlY2tvdXQgb3IgY29udGludWUgc2hvcHBpbmcuJyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgIHRvcDogJzEwMHB4JyxcbiAgICAgICAgICAgICAgcmlnaHQ6ICcyMHB4JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBiZ0NvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICB0ZXh0Q29sb3I6ICcjMTExODI3JyxcbiAgICAgICAgICAgIGxvYWRlckJnOiAnIzE3MjU1NCcsXG4gICAgICAgICAgICBjbGFzczogJ3JvdW5kZWQtbm9uZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5mYWlsKChyZXNwKSA9PiB7XG4gICAgICAgIHByZXN0YXNob3AuZW1pdCgnaGFuZGxlRXJyb3InLCB7XG4gICAgICAgICAgZXZlbnRUeXBlOiAndXBkYXRlU2hvcHBpbmdDYXJ0JyxcbiAgICAgICAgICByZXNwLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9KTtcbn0pO1xuIiwiLyoqXG4gKiBqUXVlcnkub2ZmY2FudmFzIHYzLjQuNyAtIEVhc3kgdG8gdXNlIGpRdWVyeSBvZmZjYW52YXMgcGx1Z2luLlxuICogQ29weXJpZ2h0IDIwMTYgTGFycyBHcmF1Ym5lciAtIGh0dHA6Ly9sZ3JhdWJuZXIuZ2l0aHViLmlvL2pxdWVyeS1vZmZjYW52YXMvXG4gKiBMaWNlbnNlOiBNSVRcbiAqL1xuIWZ1bmN0aW9uKHQsZSl7XCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZSYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKHQscyl7cmV0dXJuIHZvaWQgMD09PXMmJihzPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/cmVxdWlyZShcImpxdWVyeVwiKTpyZXF1aXJlKFwianF1ZXJ5XCIpKHQpKSxlKHMpLHN9OlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wianF1ZXJ5IFwiXSxlKTplKGpRdWVyeSl9KHRoaXMsZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZSh0LGUscyl7dmFyIGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dGhpcyxvPWFyZ3VtZW50cyxoPWZ1bmN0aW9uKCl7aT1udWxsLHN8fHQuYXBwbHkobixvKX0sYT1zJiYhaTtjbGVhclRpbWVvdXQoaSksaT1zZXRUaW1lb3V0KGgsZSksYSYmdC5hcHBseShuLG8pfX1mdW5jdGlvbiBzKGUscyl7dmFyIG4sbyxoPXQoZSkuZGF0YSgpO3RoaXMuJGVsPXQoZSk7Zm9yKG4gaW4gaCloLmhhc093blByb3BlcnR5KG4pJiYvXm9mZmNhbnZhc1tBLVpdKy8udGVzdChuKSYmKG89bltpLmxlbmd0aF0udG9Mb3dlckNhc2UoKStuLnN1YnN0cihpLmxlbmd0aCsxKSxoW29dPWhbbl0pO3RoaXMuc2V0dGluZ3M9dC5leHRlbmQoITAse30sdC5mbltpXS5kZWZhdWx0cyxzLGgpLHRoaXMubmFtZT1pLHRoaXMuJGVsLmRhdGEodGhpcy5uYW1lK1wiLm9wdHNcIix0aGlzLnNldHRpbmdzKSx0aGlzLmluaXQoKX12YXIgaT1cIm9mZmNhbnZhc1wiO3QuZXh0ZW5kKHMucHJvdG90eXBlLHtzZXRIZWlnaHRzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kb3V0ZXJXcmFwcGVyLmhlaWdodCgpO3RoaXMuJGVsLmRhdGEodGhpcy5uYW1lK1wiLm9wdHNcIikmJih0aGlzLiRlbGVtZW50LmNzcyhcImhlaWdodFwiLHQpLHRoaXMuc2V0dGluZ3Mub3ZlcmxheSYmdGhpcy4kb3ZlcmxheS5jc3MoXCJoZWlnaHRcIix0KSl9LHNob3c6ZnVuY3Rpb24oKXt2YXIgZT17fTt0aGlzLnZpc2libGV8fCh0aGlzLiRjb250LmFkZENsYXNzKHRoaXMuc2V0dGluZ3MuY2xhc3Nlcy5vcGVuKSx0aGlzLnZpc2libGU9ITAsdGhpcy4kZWwudHJpZ2dlcihcInNob3cuXCIrdGhpcy5uYW1lKSx0aGlzLiRlbC50cmlnZ2VyKFwidG9nZ2xlLlwiK3RoaXMubmFtZSx0aGlzLnZpc2libGUpLHRoaXMuc2V0SGVpZ2h0cygpLGVbdGhpcy5zZXR0aW5ncy5vcmlnaW5dPXRoaXMuZWZmZWN0c1t0aGlzLnNldHRpbmdzLmVmZmVjdF0udG8sdGhpcy5lZmZlY3RzW3RoaXMuc2V0dGluZ3MuZWZmZWN0XS4kZWwudmVsb2NpdHkoZSx0LmV4dGVuZCh7Y29tcGxldGU6ZnVuY3Rpb24oKXt0aGlzLiRlbC50cmlnZ2VyKFwic2hvd24uXCIrdGhpcy5uYW1lKSx0aGlzLnNldHRpbmdzLm92ZXJsYXkmJnRoaXMuJG92ZXJsYXkub25lKFwiY2xpY2suXCIrdGhpcy5uYW1lLGZ1bmN0aW9uKCl7dGhpcy5oaWRlKCl9LmJpbmQodGhpcykpfS5iaW5kKHRoaXMpfSx0aGlzLmFuaW1hdGlvbk9wdGlvbnMpKSx0aGlzLnNldHRpbmdzLm92ZXJsYXkmJnRoaXMuJG92ZXJsYXkudmVsb2NpdHkoe29wYWNpdHk6MX0sdC5leHRlbmQoe2Rpc3BsYXk6XCJibG9ja1wifSx0aGlzLmFuaW1hdGlvbk9wdGlvbnMpKSl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLnZpc2libGUmJih0aGlzLiRjb250LnJlbW92ZUNsYXNzKHRoaXMuc2V0dGluZ3MuY2xhc3Nlcy5vcGVuKSx0aGlzLnZpc2libGU9ITEsdGhpcy4kZWwudHJpZ2dlcihcImhpZGUuXCIrdGhpcy5uYW1lKSx0aGlzLiRlbC50cmlnZ2VyKFwidG9nZ2xlLlwiK3RoaXMubmFtZSx0aGlzLnZpc2libGUpLHRoaXMuZWZmZWN0c1t0aGlzLnNldHRpbmdzLmVmZmVjdF0uJGVsLnZlbG9jaXR5KFwic3RvcFwiKS52ZWxvY2l0eShcInJldmVyc2VcIix0LmV4dGVuZCh7Y29tcGxldGU6ZnVuY3Rpb24oKXt0aGlzLiRlbC50cmlnZ2VyKFwiaGlkZGVuLlwiK3RoaXMubmFtZSl9LmJpbmQodGhpcyl9LHRoaXMuYW5pbWF0aW9uT3B0aW9ucykpLHRoaXMuc2V0dGluZ3Mub3ZlcmxheSYmdGhpcy4kb3ZlcmxheS52ZWxvY2l0eShcInN0b3BcIikudmVsb2NpdHkoXCJyZXZlcnNlXCIsdC5leHRlbmQoe2Rpc3BsYXk6XCJub25lXCJ9LHRoaXMuYW5pbWF0aW9uT3B0aW9ucykpKX0sdG9nZ2xlOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMudmlzaWJsZT90aGlzLmhpZGU6dGhpcy5zaG93KS5jYWxsKHRoaXMpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy4kZWwuZGF0YSh0aGlzLm5hbWUrXCIub3B0c1wiKSYmKHRoaXMuJGlubmVyV3JhcHBlci51bndyYXAoKSx0aGlzLiRpbm5lcldyYXBwZXIuY2hpbGRyZW4oKS51bndyYXAoKSx0aGlzLiRjb250LnJlbW92ZUNsYXNzKHRoaXMuc2V0dGluZ3MuY2xhc3Nlcy5jb250YWluZXIpLnJlbW92ZUNsYXNzKHRoaXMuc2V0dGluZ3MuY2xhc3Nlcy5vcGVuKSx0aGlzLnNldHRpbmdzLm92ZXJsYXkmJnRoaXMuJG92ZXJsYXkub2ZmKFwiY2xpY2suXCIrdGhpcy5uYW1lKS5yZW1vdmUoKSx0aGlzLiRlbC51bndyYXAoKS5yZW1vdmVEYXRhKHRoaXMubmFtZStcIi5vcHRzXCIpLnJlbW92ZUF0dHIoXCJzdHlsZVwiKSx0aGlzLiR3aW4ub2ZmKFwicmVzaXplLlwiK3RoaXMubmFtZSkpfSxpbml0OmZ1bmN0aW9uKCl7dmFyIHM9e307dGhpcy4kd2luPXQod2luZG93KSx0aGlzLiRib2R5PXQoXCJib2R5XCIpLHRoaXMudmlzaWJsZT0hMSx0aGlzLiRjb250PXQodGhpcy5zZXR0aW5ncy5jb250YWluZXIpLHRoaXMuJGNvbnQuYWRkQ2xhc3ModGhpcy5zZXR0aW5ncy5jbGFzc2VzLmNvbnRhaW5lcikuY2hpbGRyZW4oXCI6bm90KHNjcmlwdClcIikud3JhcEFsbCh0KFwiPGRpdi8+XCIpLmFkZENsYXNzKHRoaXMuc2V0dGluZ3MuY2xhc3Nlcy5vdXRlcikpLHRoaXMuJG91dGVyV3JhcHBlcj10KFwiLlwiK3RoaXMuc2V0dGluZ3MuY2xhc3Nlcy5vdXRlcikud3JhcElubmVyKHQoXCI8ZGl2Lz5cIikuYWRkQ2xhc3ModGhpcy5zZXR0aW5ncy5jbGFzc2VzLmlubmVyKSksdGhpcy4kaW5uZXJXcmFwcGVyPXQoXCIuXCIrdGhpcy5zZXR0aW5ncy5jbGFzc2VzLmlubmVyKSx0aGlzLnNldHRpbmdzLm92ZXJsYXkmJih0aGlzLiRpbm5lcldyYXBwZXIuYXBwZW5kKHQoXCI8ZGl2Lz5cIikuYWRkQ2xhc3ModGhpcy5zZXR0aW5ncy5jbGFzc2VzLm92ZXJsYXkpLmNzcyhcImJhY2tncm91bmQtY29sb3JcIix0aGlzLnNldHRpbmdzLm92ZXJsYXlDb2xvcikpLHRoaXMuJG92ZXJsYXk9dChcIi5cIit0aGlzLnNldHRpbmdzLmNsYXNzZXMub3ZlcmxheSkpLHRoaXMuJGVsLndyYXAodChcIjxkaXYvPlwiKS5hZGRDbGFzcyh0aGlzLnNldHRpbmdzLmNsYXNzZXMuZWxlbWVudCkpLHRoaXMuJGVsZW1lbnQ9dGhpcy4kZWwucGFyZW50KCksc1t0aGlzLnNldHRpbmdzLm9yaWdpbl09XCItXCIrdGhpcy5zZXR0aW5ncy5jb3ZlcmFnZSxzLndpZHRoPXRoaXMuc2V0dGluZ3MuY292ZXJhZ2UsdGhpcy4kZWxlbWVudC5jc3MocyksdGhpcy5lZmZlY3RzPXtwdXNoOnskZWw6dGhpcy4kaW5uZXJXcmFwcGVyLGZyb206MCx0bzp0aGlzLnNldHRpbmdzLmNvdmVyYWdlfSxcInNsaWRlLWluLW92ZXJcIjp7JGVsOnRoaXMuJGVsZW1lbnQsZnJvbTpcIi1cIit0aGlzLnNldHRpbmdzLmNvdmVyYWdlLHRvOjB9fSx0aGlzLmFuaW1hdGlvbk9wdGlvbnM9e2Vhc2luZzp0aGlzLnNldHRpbmdzLmVhc2luZyxkdXJhdGlvbjp0aGlzLnNldHRpbmdzLmR1cmF0aW9ufSx0aGlzLiR3aW4ub24oXCJyZXNpemUuXCIrdGhpcy5uYW1lLGUodGhpcy5zZXRIZWlnaHRzLDMwMCkuYmluZCh0aGlzKSksdGhpcy5zZXRIZWlnaHRzKCksdGhpcy4kZWwudHJpZ2dlcihcImluaXQuXCIrdGhpcy5uYW1lKX19KSx0LmZuW2ldPWZ1bmN0aW9uKGUpe3ZhciBuLG89YXJndW1lbnRzO3JldHVybiB2b2lkIDA9PT1lfHxcIm9iamVjdFwiPT10eXBlb2YgZT90aGlzLmVhY2goZnVuY3Rpb24oKXt0LmRhdGEodGhpcyxcInBsdWdpbl9cIitpKXx8dC5kYXRhKHRoaXMsXCJwbHVnaW5fXCIraSxuZXcgcyh0aGlzLGUpKX0pOlwic3RyaW5nXCI9PXR5cGVvZiBlJiZcIl9cIiE9PWVbMF0mJlwiaW5pdFwiIT09ZSYmKHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBoPXQuZGF0YSh0aGlzLFwicGx1Z2luX1wiK2kpO2ggaW5zdGFuY2VvZiBzJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBoW2VdJiYobj1oW2VdLmFwcGx5KGgsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobywxKSkpLFwiZGVzdHJveVwiPT09ZSYmdC5kYXRhKHRoaXMsXCJwbHVnaW5fXCIraSxudWxsKX0pLHZvaWQgMCE9PW4/bjp0aGlzKX0sdC5mbltpXS5kZWZhdWx0cz17Y2xhc3Nlczp7Y29udGFpbmVyOmksZWxlbWVudDppK1wiLWVsZW1lbnRcIixpbm5lcjppK1wiLWlubmVyXCIsb3BlbjppK1wiLW9wZW5cIixvdXRlcjppK1wiLW91dGVyXCIsb3ZlcmxheTppK1wiLW92ZXJsYXlcIn0sY29udGFpbmVyOlwiYm9keVwiLGNvdmVyYWdlOlwiMjIwcHhcIixvcmlnaW46XCJsZWZ0XCIsZHVyYXRpb246MzAwLGVhc2luZzpcImVhc2UtaW4tb3V0XCIsZWZmZWN0OlwicHVzaFwiLG92ZXJsYXk6ITEsb3ZlcmxheUNvbG9yOlwicmdiYSgwLCAwLCAwLCAwLjcpXCJ9fSk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gaW1wb3J0ICdib290c3RyYXAvZGlzdC9qcy9ib290c3RyYXAubWluJztcbmltcG9ydCBcImpxdWVyeS1tb2RhbFwiO1xuLy8gaW1wb3J0IFwianF1ZXJ5LW9mZmNhbnZhcy9kaXN0L2pxdWVyeS5vZmZjYW52YXMubWluLmNzc1wiO1xuaW1wb3J0IFwidG9vbHRpcHN0ZXJcIjtcbmltcG9ydCBcInRvb2x0aXBzdGVyL2Rpc3QvY3NzL3Rvb2x0aXBzdGVyLmJ1bmRsZS5taW4uY3NzXCI7XG5pbXBvcnQgXCJ0b29sdGlwc3Rlci9kaXN0L2Nzcy9wbHVnaW5zL3Rvb2x0aXBzdGVyL3NpZGVUaXAvdGhlbWVzL3Rvb2x0aXBzdGVyLXNpZGVUaXAtc2hhZG93Lm1pbi5jc3NcIjtcbmltcG9ydCB0b3VjaHNwaW4gZnJvbSBcImJvb3RzdHJhcC10b3VjaHNwaW5cIjtcbmltcG9ydCBcImpxdWVyeS10b3VjaHN3aXBlXCI7XG5pbXBvcnQgXCIuL3NlbGVjdG9yc1wiO1xuaW1wb3J0IFwiLi90YWJzLmpzXCI7XG5pbXBvcnQgXCIuL2Vhc3l6b29tXCI7XG5cbmltcG9ydCBcIi4vcmVzcG9uc2l2ZVwiO1xuaW1wb3J0IFwiLi9jaGVja291dFwiO1xuaW1wb3J0IFwiLi9jdXN0b21lclwiO1xuaW1wb3J0IFwiLi9saXN0aW5nXCI7XG5pbXBvcnQgXCIuL3Byb2R1Y3RcIjtcbmltcG9ydCBcIi4vY2FydFwiO1xuaW1wb3J0IFwiLi9mYWNldHNcIjtcblxuaW1wb3J0IHByZXN0YXNob3AgZnJvbSBcInByZXN0YXNob3BcIjtcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IERyb3BEb3duIGZyb20gXCIuL2NvbXBvbmVudHMvZHJvcC1kb3duXCI7XG5pbXBvcnQgRm9ybSBmcm9tIFwiLi9jb21wb25lbnRzL2Zvcm1cIjtcbmltcG9ydCB1c2VQYXNzd29yZFBvbGljeSBmcm9tIFwiLi9jb21wb25lbnRzL3VzZVBhc3N3b3JkUG9saWN5XCI7XG5pbXBvcnQgUHJvZHVjdE1pbml0YXR1cmUgZnJvbSBcIi4vY29tcG9uZW50cy9wcm9kdWN0LW1pbmlhdHVyZVwiO1xuaW1wb3J0IFByb2R1Y3RTZWxlY3QgZnJvbSBcIi4vY29tcG9uZW50cy9wcm9kdWN0LXNlbGVjdFwiO1xuaW1wb3J0IFRvcE1lbnUgZnJvbSBcIi4vY29tcG9uZW50cy90b3AtbWVudVwiO1xuXG5pbXBvcnQgXCIuL2NvbXBvbmVudHMvYmxvY2stY2FydFwiO1xuaW1wb3J0ICQgZnJvbSBcImpxdWVyeVwiO1xuaW1wb3J0IGpvIGZyb20gXCJqcXVlcnktb2ZmY2FudmFzXCI7XG5qbyh3aW5kb3csICQpO1xudG91Y2hzcGluKHdpbmRvdywgJCk7XG4vKiBlc2xpbnQtZW5hYmxlICovXG5cbi8vIFwiaW5oZXJpdFwiIEV2ZW50RW1pdHRlclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5mb3IgKGNvbnN0IGkgaW4gRXZlbnRFbWl0dGVyLnByb3RvdHlwZSkge1xuICBwcmVzdGFzaG9wW2ldID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZVtpXTtcbn1cblxuJCgoKSA9PiB7XG4gIGNvbnN0IGRyb3BEb3duRWwgPSAkKCcuanMtZHJvcGRvd24nKTtcbiAgY29uc3QgZm9ybSA9IG5ldyBGb3JtKCk7XG4gIGNvbnN0IHRvcE1lbnVFbCA9ICQoJy5qcy10b3AtbWVudSB1bFtkYXRhLWRlcHRoPVwiMFwiXScpO1xuICBjb25zdCBkcm9wRG93biA9IG5ldyBEcm9wRG93bihkcm9wRG93bkVsKTtcbiAgY29uc3QgdG9wTWVudSA9IG5ldyBUb3BNZW51KHRvcE1lbnVFbCk7XG4gIGNvbnN0IHByb2R1Y3RNaW5pdGF0dXJlID0gbmV3IFByb2R1Y3RNaW5pdGF0dXJlKCk7XG4gIGNvbnN0IHByb2R1Y3RTZWxlY3QgPSBuZXcgUHJvZHVjdFNlbGVjdCgpO1xuICBkcm9wRG93bi5pbml0KCk7XG4gIGZvcm0uaW5pdCgpO1xuICB0b3BNZW51LmluaXQoKTtcbiAgcHJvZHVjdE1pbml0YXR1cmUuaW5pdCgpO1xuICBwcm9kdWN0U2VsZWN0LmluaXQoKTtcbiAgdXNlUGFzc3dvcmRQb2xpY3koJy5maWVsZC1wYXNzd29yZC1wb2xpY3knKTtcblxuICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkge1xuICAgIGlmICgkKCcuYWRkLXRvLWNhcnQnKS5pcygnOmRpc2FibGVkJykpIHtcbiAgICAgICQoJy5hZGQtdG8tY2FydCcpLmNzcyh7XG4gICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJ2dyZXknLCAgXG4gICAgICAgICdjb2xvcic6ICd3aGl0ZScsICAgICAgICAgICAgIFxuICAgICAgICAnY3Vyc29yJzogJ25vdC1hbGxvd2VkJyAgICAgICAgXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1x0XG5cbiAgJCgnLmVhc3l6b29tJykuZWFzeVpvb20oe1xuICB9KTtcblxuICAkKCcuY2Fyb3VzZWxbZGF0YS10b3VjaD1cInRydWVcIl0nKS5zd2lwZSh7XG4gICAgc3dpcGUoZXZlbnQsIGRpcmVjdGlvbikge1xuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICQodGhpcykuY2Fyb3VzZWwoJ25leHQnKTtcbiAgICAgIH1cbiAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgJCh0aGlzKS5jYXJvdXNlbCgncHJldicpO1xuICAgICAgfVxuICAgIH0sXG4gICAgYWxsb3dQYWdlU2Nyb2xsOiAndmVydGljYWwnLFxuICB9KTtcblxuICAkKCcjcHJvZHVjdC1saXN0LXRvcC1maWx0ZXJzJykub2ZmY2FudmFzKHtcbiAgICBkdXJhdGlvbjogMTAwLFxuICAgIGVmZmVjdDogJ3NsaWRlLWluLW92ZXInLFxuICAgIGNsYXNzZXM6IHtcbiAgICAgIGVsZW1lbnQ6ICdhYnNvbHV0ZSB0b3AtMCB6LTUwJyxcbiAgICB9LFxuICB9KTtcblxuICAkKCcjc2hvdy1maWx0ZXJzJykub24oJ2NsaWNrLm9mZmNhbnZhcycsICgpID0+IHtcbiAgICAkKCcjb3ZlcmxheScpLnNob3coKTsgIFxuICAgICQoJyNwcm9kdWN0LWxpc3QtdG9wLWZpbHRlcnMnKS5zaG93KCk7ICBcbiAgfSk7XG4gIFxuICAkKCcjaGlkZS1maWx0ZXJzJykub24oJ2NsaWNrLm9mZmNhbnZhcycsICgpID0+IHtcbiAgICAkKCcjcHJvZHVjdC1saXN0LXRvcC1maWx0ZXJzJykuaGlkZSgpOyBcbiAgICAkKCcjb3ZlcmxheScpLmhpZGUoKTtcbiAgfSk7XG4gIFxuICAkKCcjb3ZlcmxheScpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICQoJyNwcm9kdWN0LWxpc3QtdG9wLWZpbHRlcnMnKS5oaWRlKCk7ICBcbiAgICAkKCcjb3ZlcmxheScpLmhpZGUoKTsgIFxuICB9KTtcblxuICBmdW5jdGlvbiBUaEFjY29yZGlvbigpIHt9XG5cbiAgJC5leHRlbmQoVGhBY2NvcmRpb24ucHJvdG90eXBlLCB7XG4gICAgaW5pdCgpIHt9LFxuICB9KTtcblxuICAkLmZuLnRoYWNjb3JkaW9uID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNlbGVjdG9ycyA9IHtcbiAgICAgIHJvb3Q6ICcudGgtYWNjb3JkaW9uJyxcbiAgICAgIGl0ZW06ICcudGgtYWNjb3JkaW9uLWl0ZW0nLFxuICAgICAgdHJpZ2dlcjogJy50aC1hY2NvcmRpb24taXRlbS10cmlnZ2VyJyxcbiAgICAgIHN2ZzogJy50aC1hY2NvcmRpb24taXRlbS10cmlnZ2VyLXN2ZycsXG4gICAgICBjb250ZW50OiAnLnRoLWFjY29yZGlvbi1pdGVtLWNvbnRlbnQnLFxuICAgIH07XG4gICAgbGV0IHNlbGVjdGlvbiA9IG51bGw7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmZpbmQoc2VsZWN0b3JzLml0ZW0pO1xuICAgIGNvbnN0IHJvdGF0ZUNsYXNzID0gJ3JvdGF0ZS05MCBkdXJhdGlvbi01MDAnO1xuXG4gICAgZnVuY3Rpb24gY29sbGFwc2VBbGwoKSB7XG4gICAgICBpdGVtcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJCh0aGlzKS5maW5kKHNlbGVjdG9ycy5jb250ZW50KS5oaWRlKDUwMCk7XG4gICAgICAgICQodGhpcykuZmluZChzZWxlY3RvcnMuc3ZnKS5yZW1vdmVDbGFzcyhyb3RhdGVDbGFzcyk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICAkKHNlbGVjdGlvbikuZmluZChzZWxlY3RvcnMuY29udGVudCkuaGlkZSg1MDApO1xuICAgICAgJChzZWxlY3Rpb24pLmZpbmQoc2VsZWN0b3JzLnN2ZykucmVtb3ZlQ2xhc3MoJ3JvdGF0ZS05MCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9wZW4oKSB7XG4gICAgICBjb2xsYXBzZUFsbCgpO1xuICAgICAgJChzZWxlY3Rpb24pLmZpbmQoc2VsZWN0b3JzLmNvbnRlbnQpLnNob3coNTAwKTtcbiAgICAgICQoc2VsZWN0aW9uKS5maW5kKHNlbGVjdG9ycy5zdmcpLmFkZENsYXNzKHJvdGF0ZUNsYXNzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc09wZW4oaXRlbSkge1xuICAgICAgcmV0dXJuICQoaXRlbSkuZmluZChzZWxlY3RvcnMuY29udGVudCkuaXMoJzp2aXNpYmxlJyk7XG4gICAgfVxuXG4gICAgY29sbGFwc2VBbGwoKTtcblxuICAgIGl0ZW1zLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAkKHRoaXMpXG4gICAgICAgIC5maW5kKHNlbGVjdG9ycy50cmlnZ2VyKVxuICAgICAgICAub24oJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgIGlmIChzZWxlY3Rpb24gPT09IHNlbGYpIHtcbiAgICAgICAgICAgIGlmIChpc09wZW4oc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICBjbG9zZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb3BlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxlY3Rpb24gPSBzZWxmO1xuICAgICAgICAgICAgaWYgKCFpc09wZW4oc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICBvcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICAkKCcudGgtYWNjb3JkaW9uJykudGhhY2NvcmRpb24oKTtcbiAgJCgnLnRvb2x0aXAnKS50b29sdGlwc3Rlcih7XG4gICAgdGhlbWU6ICd0b29sdGlwc3Rlci1zaGFkb3cnLFxuICAgIHRyaWdnZXJPcGVuOiB7XG4gICAgICBjbGljazogdHJ1ZSxcbiAgICAgIG1vdXNlZW50ZXI6IHRydWUsXG4gICAgICB0b3VjaHN0YXJ0OiB0cnVlLFxuICAgIH0sXG4gICAgZGVsYXlUb3VjaDogWzAsIDIwMDBdLFxuICB9KTtcblxuICAkKCcudG9nZ2xlLW1haW4tbWVudScpLm9uKCdjbGljaycsICgpID0+IHtcbiAgICAkKCcubW9iaWxlLW1haW4tbWVudScpLnRvZ2dsZSgpO1xuICB9KTtcblx0XG59KTtcblxuIl0sIm5hbWVzIjpbInJlcXVpcmUkJDAiLCIkIiwid2luZG93IiwiZG9jdW1lbnQiLCJ1bmRlZmluZWQiLCJtb2R1bGUiLCJ0aGlzIiwiYSIsImIiLCJjIiwiZCIsImUiLCJnIiwiaSIsImYiLCJqIiwiayIsImgiLCJsIiwibSIsIm4iLCJvIiwicCIsIm9iaiIsImpRdWVyeSIsInZhbHVlIiwicGhhc2UiLCJkaXJlY3Rpb24iLCJkaXN0YW5jZSIsInByZXN0YXNob3AiLCJzZWxmIiwiZWxlbSIsIm9mZnNldFBhcmVudCIsImdsb2JhbCIsIiQyIiwiZWxlbWVudCIsInByb3BlcnR5Iiwib3B0cyIsImNhbGxJbmRleCIsImRlbGF5Q29tcGxldGUiLCJ2YWx1ZURhdGEiLCJlbmRWYWx1ZSIsImVhc2luZyIsInN0YXJ0VmFsdWUiLCJ0d2VlbkRlbHRhIiwiUmVmbGVjdEFwcGx5IiwiUmVmbGVjdE93bktleXMiLCJOdW1iZXJJc05hTiIsImV2ZW50c01vZHVsZSIsImV2ZW50cyIsIm9uY2UiLCJzcHJpbnRmIiwicyIsInQiLCJFdmVudEVtaXR0ZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFLQSxLQUFDLFNBQVUsU0FBUztBQUdtRDtBQUNuRSxnQkFBUUEsS0FBbUIsUUFBUSxRQUFRO0FBQUEsTUFJNUM7QUFBQSxJQUNGLEdBQUMsU0FBU0MsSUFBR0MsU0FBUUMsV0FBVUMsYUFBVztBQUV6QyxVQUFJLFNBQVMsQ0FBRSxHQUNYLGFBQWEsV0FBVztBQUN0QixlQUFPLE9BQU8sU0FBUyxPQUFPLE9BQU8sU0FBUyxDQUFDLElBQUk7QUFBQSxNQUNwRCxHQUNELGdCQUFnQixXQUFXO0FBQ3pCLFlBQUksR0FDQSxX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QUksSUFBRSxLQUFJLElBQUUsTUFBSSxJQUFFLElBQUcsSUFBRSxVQUFRLElBQUUsTUFBSSxJQUFFLEdBQUUsS0FBRyxNQUFJLElBQUUsS0FBSSxJQUFFLE1BQUksSUFBRSxJQUFHLElBQUU7QUFBQSxnQkFBTztBQUFDLGdCQUFBQSxHQUFFLE9BQU8sS0FBSyxTQUFPLElBQUUsR0FBRUEsR0FBRSxPQUFPLEtBQUssUUFBTSxJQUFFLEdBQUVBLEdBQUUsT0FBTyxhQUFhLFFBQU0sR0FBRUEsR0FBRSxPQUFPLGFBQWEsT0FBSztBQUFBLFlBQUM7QUFBQSxRQUFDO0FBQUMsWUFBSSxJQUFFLFNBQVNULElBQUU7QUFBQyxVQUFBUyxHQUFFLE9BQU8sS0FBSyxTQUFPVCxHQUFFLFFBQU9TLEdBQUUsT0FBTyxhQUFhLE9BQUtULEdBQUUsTUFBS1MsR0FBRSxPQUFPLGFBQWEsTUFBSVQsR0FBRSxLQUFJUyxHQUFFLE9BQU8sS0FBSyxRQUFNVCxHQUFFO0FBQUEsUUFBSztBQUFFLGFBQUlDLEdBQUUsU0FBUyxFQUFDLE1BQUssWUFBVyxNQUFLLEdBQUUsVUFBUyxFQUFDLFFBQU9RLEdBQUUsT0FBTyxLQUFLLFFBQU8sTUFBS0EsR0FBRSxPQUFPLGFBQWEsTUFBSyxLQUFJQSxHQUFFLE9BQU8sYUFBYSxLQUFJLE9BQU1BLEdBQUUsT0FBTyxLQUFLLE1BQUssRUFBQyxDQUFDLEdBQUVBLEdBQUUsT0FBTyxhQUFhLFFBQU1BLEdBQUUsT0FBTyxhQUFhLE9BQUtBLEdBQUUsT0FBTyxLQUFLLE9BQU1BLEdBQUUsT0FBTyxhQUFhLFNBQU9BLEdBQUUsT0FBTyxhQUFhLE1BQUlBLEdBQUUsT0FBTyxLQUFLLFFBQU9BLEdBQUUsT0FBTyxPQUFPLE9BQUtBLEdBQUUsT0FBTyxhQUFhLE9BQUtBLEdBQUUsT0FBTyxPQUFPLE1BQUtBLEdBQUUsT0FBTyxPQUFPLE1BQUlBLEdBQUUsT0FBTyxhQUFhLE1BQUlBLEdBQUUsT0FBTyxPQUFPLEtBQUlBLEdBQUUsT0FBTyxPQUFPLFNBQU9BLEdBQUUsT0FBTyxPQUFPLE1BQUlBLEdBQUUsT0FBTyxLQUFLLFFBQU9BLEdBQUUsT0FBTyxPQUFPLFFBQU1BLEdBQUUsT0FBTyxPQUFPLE9BQUtBLEdBQUUsT0FBTyxLQUFLLE9BQU1BLEdBQUUsVUFBVSxXQUFTLEVBQUMsUUFBTyxFQUFDLFFBQU9BLEdBQUUsU0FBUyxLQUFLLFNBQU9BLEdBQUUsT0FBTyxPQUFPLFFBQU8sT0FBTUEsR0FBRSxTQUFTLEtBQUssTUFBSyxHQUFFLE1BQUssRUFBQyxRQUFPQSxHQUFFLFNBQVMsS0FBSyxRQUFPLE9BQU1BLEdBQUUsT0FBTyxPQUFPLEtBQUksR0FBRSxPQUFNLEVBQUMsUUFBT0EsR0FBRSxTQUFTLEtBQUssUUFBTyxPQUFNQSxHQUFFLFNBQVMsS0FBSyxRQUFNQSxHQUFFLE9BQU8sT0FBTyxNQUFLLEdBQUUsS0FBSSxFQUFDLFFBQU9BLEdBQUUsT0FBTyxPQUFPLEtBQUksT0FBTUEsR0FBRSxTQUFTLEtBQUssTUFBSyxFQUFDLEdBQUVBLEdBQUUsVUFBVSxTQUFPLEVBQUMsUUFBTyxFQUFDLFFBQU8sS0FBSyxJQUFJQSxHQUFFLE9BQU8sS0FBSyxTQUFPLEtBQUssSUFBSUEsR0FBRSxPQUFPLGFBQWEsUUFBTyxDQUFDLEdBQUUsQ0FBQyxHQUFFLE9BQU1BLEdBQUUsT0FBTyxLQUFLLE1BQUssR0FBRSxNQUFLLEVBQUMsUUFBT0EsR0FBRSxPQUFPLEtBQUssUUFBTyxPQUFNLEtBQUssSUFBSUEsR0FBRSxPQUFPLGFBQWEsTUFBSyxDQUFDLEVBQUMsR0FBRSxPQUFNLEVBQUMsUUFBT0EsR0FBRSxPQUFPLEtBQUssUUFBTyxPQUFNLEtBQUssSUFBSUEsR0FBRSxPQUFPLEtBQUssUUFBTSxLQUFLLElBQUlBLEdBQUUsT0FBTyxhQUFhLE9BQU0sQ0FBQyxHQUFFLENBQUMsRUFBQyxHQUFFLEtBQUksRUFBQyxRQUFPLEtBQUssSUFBSUEsR0FBRSxPQUFPLGFBQWEsS0FBSSxDQUFDLEdBQUUsT0FBTUEsR0FBRSxPQUFPLEtBQUssTUFBSyxFQUFDLEdBQUUsVUFBUUQsR0FBRSxDQUFDLEVBQUUsUUFBUSxZ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LGVBQWU7QUFBQSxjQUNmLGVBQWU7QUFBQSxjQUNmLFdBQVc7QUFBQSxjQUNYLGFBQWE7QUFBQSxjQUNiLGNBQWM7QUFBQSxjQUNkLFFBQVE7QUFBQSxjQUNSLGFBQWE7QUFBQSxjQUNiLFFBQVE7QUFBQSxjQUNSLFFBQVE7QUFBQSxjQUNSLGVBQWU7QUFBQSxjQUNmLFNBQVM7QUFBQSxjQUNULFlBQVk7QUFBQSxjQUNaLFdBQVc7QUFBQSxjQUNYLGFBQWE7QUFBQSxjQUNiLFVBQVU7QUFBQSxjQUNWLFNBQVM7QUFBQSxjQUNULFNBQVM7QUFBQSxjQUNULGlCQUFpQjtBQUFBLGNBQ2pCLFlBQVk7QUFBQSxjQUNaLGFBQWE7QUFBQSxjQUNiLGdCQUFnQjtBQUFBLGNBQ2hCLGFBQWE7QUFBQSxjQUNiLGNBQWM7QUFBQSxjQUNkLGFBQWE7QUFBQSxjQUNiLHdCQUF3QjtBQUFBLGNBQ3hCLGFBQWE7QUFBQSxjQUNiLGFBQWE7QUFBQSxjQUNiLGNBQWM7QUFBQSxjQUNkLGFBQWE7QUFBQSxjQUNiLGVBQWU7QUFBQSxjQUNmLGlCQUFpQjtBQUFBLGNBQ2pCLGdCQUFnQjtBQUFBLGNBQ2hCLGtCQUFrQjtBQUFBLGNBQ2xCLGtCQUFrQjtBQUFBLGNBQ2xCLGVBQWU7QUFBQSxjQUNmLGFBQWE7QUFBQSxjQUNiLFFBQVE7QUFBQSxjQUNSLFNBQVM7QUFBQSxjQUNULFdBQVc7QUFBQSxjQUNYLFVBQVU7QUFBQSxjQUNWLG9CQUFvQjtBQUFBLGNBQ3BCLGNBQWM7QUFBQSxjQUNkLGdCQUFnQjtBQUFBLGNBQ2hCLGdCQUFnQjtBQUFBLGNBQ2hCLGtCQUFrQjtBQUFBLGNBQ2xCLG1CQUFtQjtBQUFBLGNBQ25CLHFCQUFxQjtBQUFBLGNBQ3JCLG1CQUFtQjtBQUFBLGNBQ25CLG1CQUFtQjtBQUFBLGNBQ25CLGdCQUFnQjtBQUFBLGNBQ2hCLGFBQWE7QUFBQSxjQUNiLGFBQWE7QUFBQSxjQUNiLFlBQVk7QUFBQSxjQUNaLGVBQWU7QUFBQSxjQUNmLFFBQVE7QUFBQSxjQUNSLFdBQVc7QUFBQSxjQUNYLGFBQWE7QUFBQSxj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QUMsWUFBSXlDLEtBQUUsQ0FBRTtBQUFDLGFBQUssT0FBSyxFQUFFLE1BQU0sR0FBRSxLQUFLLFFBQU0sRUFBRSxNQUFNLEdBQUUsS0FBSyxVQUFRLE9BQUcsS0FBSyxRQUFNLEVBQUUsS0FBSyxTQUFTLFNBQVMsR0FBRSxLQUFLLE1BQU0sU0FBUyxLQUFLLFNBQVMsUUFBUSxTQUFTLEVBQUUsU0FBUyxjQUFjLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEtBQUssU0FBUyxRQUFRLEtBQUssQ0FBQyxHQUFFLEtBQUssZ0JBQWMsRUFBRSxNQUFJLEtBQUssU0FBUyxRQUFRLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsS0FBSyxTQUFTLFFBQVEsS0FBSyxDQUFDLEdBQUUsS0FBSyxnQkFBYyxFQUFFLE1BQUksS0FBSyxTQUFTLFFBQVEsS0FBSyxHQUFFLEtBQUssU0FBUyxZQUFVLEtBQUssY0FBYyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsS0FBSyxTQUFTLFFBQVEsT0FBTyxFQUFFLElBQUksb0JBQW1CLEtBQUssU0FBUyxZQUFZLENBQUMsR0FBRSxLQUFLLFdBQVMsRUFBRSxNQUFJLEtBQUssU0FBUyxRQUFRLE9BQU8sSUFBRyxLQUFLLElBQUksS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEtBQUssU0FBUyxRQUFRLE9BQU8sQ0FBQyxHQUFFLEtBQUssV0FBUyxLQUFLLElBQUksT0FBUSxHQUFDQSxHQUFFLEtBQUssU0FBUyxNQUFNLElBQUUsTUFBSSxLQUFLLFNBQVMsVUFBU0EsR0FBRSxRQUFNLEtBQUssU0FBUyxVQUFTLEtBQUssU0FBUyxJQUFJQSxFQUFDLEdBQUUsS0FBSyxVQUFRLEVBQUMsTUFBSyxFQUFDLEtBQUksS0FBSyxlQUFjLE1BQUssR0FBRSxJQUFHLEtBQUssU0FBUyxTQUFRLEdBQUUsaUJBQWdCLEVBQUMsS0FBSSxLQUFLLFVBQVMsTUFBSyxNQUFJLEtBQUssU0FBUyxVQUFTLElBQUcsRUFBQyxFQUFDLEdBQUUsS0FBSyxtQkFBaUIsRUFBQyxRQUFP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