UNPKG

@ryanmorr/templar

Version:

A simple and versatile DOM templating engine

2 lines 50.9 kB
/*! @ryanmorr/templar v2.0.0 | https://github.com/ryanmorr/templar */function _typeof2(a){return _typeof2="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof2(a)}(function(a,b){"object"===("undefined"==typeof exports?"undefined":_typeof2(exports))&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):(a=a||self,a.index=b())})(this,function(){'use strict';function a(b){return a="function"==typeof Symbol&&"symbol"===_typeof2(Symbol.iterator)?function(a){return _typeof2(a)}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":_typeof2(a)},a(b)}function b(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function c(a,b){for(var c,d=0;d<b.length;d++)c=b[d],c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(a,c.key,c)}function d(a,b,d){return b&&c(a.prototype,b),d&&c(a,d),a}function e(){for(E=null;0<G.length;)G.shift().render()}function f(c){return new Promise(function(a,b){E||(E=requestAnimationFrame(e)),G.push({render:function(){return a(c())},cancel:b})})}function g(){return Math.random().toString(36).substr(2,9)}function h(a){return I.test(a)}function i(b){return"object"===a(b)&&!0===b.templar}function j(a,b,c){var d;for(a.global&&(a.lastIndex=0);d=a.exec(b);)c(d)}function k(a){return H.innerHTML=a,document.importNode(H.content,!0)}function l(a,b){var c=document.createTextNode(""),d=document.createTextNode("");return c.templarId=d.templarId=b,a.insertBefore(c,a.firstChild),a.appendChild(d),a}function m(a,b){for(var c=[],d=a.firstChild,e=!1;d;)d.templarId!==b||e?d.templarId===b&&e&&(e=!1,c.push(d)):e=!0,e&&c.push(d),d=d.nextSibling;return c}function n(a){return a.reduce(function(a,b){return a.appendChild(q(b))&&a},document.createDocumentFragment())}function o(a){return 11===a.nodeType?Array.from(a.childNodes):a}function p(a,b){Array.isArray(b)?b.forEach(function(b){return a.removeChild(b)}):a.removeChild(b)}function q(a,b){return i(a)?a:null==a?document.createTextNode(""):("number"==typeof a&&(a+=""),"string"==typeof a?!1===b&&h(a)?k(a):document.createTextNode(a):Array.isArray(a)?n(a):a)}function r(a,b,c){i(b)?(b.unmount(),a.insertBefore(b.frag,c),b._setRoot(a)):a.insertBefore(b,c)}function s(a,b,c){i(b)?(b.unmount(),a.replaceChild(b.frag,c),b._setRoot(a)):a.replaceChild(b,c)}function t(a,b,c,d,e){if("number"==typeof c&&(c+=""),3===b.nodeType&&"string"==typeof c&&!h(c))return b.data=c,b;var f=q(c,d),g=o(f);return i(b)?(b.unmount(),r(a,f,e)):Array.isArray(b)?0===b.length?r(a,f,e):1===b.length?s(a,f,b[0]):(p(a,b),r(a,f,e)):s(a,f,b),g}function u(a,b,c,d){if(!("style"===b))b.startsWith("on")&&("function"==typeof c||"function"==typeof d)?(b=b.slice(2).toLowerCase(),null==d?a.removeEventListener(b,c):null==c&&a.addEventListener(b,d)):"form"!==b&&"list"!==b&&b in a?a[b]=null==d?"":d:null==d||!1===d?a.removeAttribute(b):a.setAttribute(b,d);else if("string"==typeof d)a.style.cssText=d;else for(var e in d){var f=null==d||null==d[e]?"":d[e];"-"===e[0]?a.style.setProperty(e,f):a.style[e]=f}}function v(a){return-1!==a.indexOf("{{")}function w(a,b){return a.replace(J,function(a,c){return b[c]}).trim()}function x(a){var b=[];return j(J,a,function(a){return b.push(a[1])}),b}function y(a,b,c){b in a||(a[b]=[]),a[b].push(c)}function z(a,b,c,d){var e=null,g=x(d),h=c.startsWith("on");h&&(b[c]=null,b.removeAttribute(c));var i=function(){var f=e;e=h||d==="{{"+g[0]+"}}"?a.data[g[0]]:w(d,a.data);e===f||(u(b,c,f,e),a.events.emit("attributechange",b,f,e))};return function(){g.every(function(b){return b in a.data})&&(document.contains(b)?f(i):i())}}function A(a,b,c,d,e){var g=null,h=function(){if(g=a.data[d],g!==b){var f=c.parentNode;b=t(f,b,g,e,c),a.events.emit("change",f)}};return function(){d in a.data&&(document.contains(c)?f(h):h())}}function B(a,b,c,d,e){var f=z(a,b,d,e);x(e).forEach(function(a){return y(c,a,f)})}function C(a,b,c){var d=document.createDocumentFragment();return j(K,b.data,function(b){if(null!=b[1]){var e=b[1],f=!1;"&"===e[0]&&(f=!0,e=e.substr(1));var g=document.createTextNode(""),h=document.createTextNode(""),i=A(a,g,h,e,f);y(c,e,i),d.appendChild(g),d.appendChild(h)}else null!=b[2]&&d.appendChild(document.createTextNode(b[2]))}),d}function D(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:{};return Array.from(b).reduce(function(b,c){if(3===c.nodeType)v(c.data)&&c.replaceWith(C(a,c,b));else if(1===c.nodeType){for(var d,e=0,f=c.attributes.length;e<f;e++)d=c.attributes[e],v(d.value)&&B(a,c,b,d.name,d.value);c.hasChildNodes()&&D(a,c.childNodes,b)}return b},c)}var E,F=/*#__PURE__*/function(){function a(){b(this,a),this.events={}}return d(a,[{key:"on",value:function(a,b){var c=this.events[a];void 0===c&&(c=[],this.events[a]=c),c.push(b)}},{key:"remove",value:function(a,b){var c=this.events[a];if(void 0!==c)for(var d=0,e=c.length;d<e;d++)if(c[d]===b)return void c.splice(d,1)}},{key:"emit",value:function(a){for(var b=arguments.length,c=Array(1<b?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];var e=this.events[a];void 0!==e&&e.length&&e.forEach(function(a){return a.apply(void 0,c)})}}]),a}(),G=[],H=document.createElement("template"),I=/<[a-z][\s\S]*>/,J=/\{\{\s*&?(.+?)\s*\}\}/g,K=/\{\{\s*(.+?)\s*\}\}|((?:(?!(?:\{\{\s*(.+?)\s*\}\})).)+)/g,L=/*#__PURE__*/function(){function a(c,d){b(this,a),this.id=g(),this.templar=!0,this.data={};var e=k(c.trim());this.root=this.frag=l(e,this.id),this.bindings=D(this,e.childNodes),this.events=new F,this.mounted=!1,d&&this.set(d)}return d(a,[{key:"mount",value:function(a){this.isMounted()&&this.unmount(),a.appendChild(this.frag),this._setRoot(a)}},{key:"unmount",value:function(){var a=this;this.isMounted()&&(m(this.getRoot(),this.id).forEach(function(b){a.frag.appendChild(b)}),this.root=this.frag,this.mounted=!1,this.events.emit("unmount"))}},{key:"get",value:function(a){return a in this.data?this.data[a]:null}},{key:"set",value:function(a,b){var c=this;return"string"==typeof a?void(this.data[a]=b,this.bindings[a].forEach(function(a){return a()})):void Object.keys(a).forEach(function(b){return c.set(b,a[b])})}},{key:"on",value:function(a,b){var c=this;return this.events.on(a,b),function(){return c.events.remove(a,b)}}},{key:"query",value:function(a){var b=this.getRoot();if(b===this.frag)return Array.from(b.querySelectorAll(a));var c=m(b,this.id);return Array.from(b.querySelectorAll(a)).filter(function(a){return c.some(function(b){return b===a||!!(1===b.nodeType&&b.contains(a))})})}},{key:"getRoot",value:function(){return this.root}},{key:"isMounted",value:function(){return this.mounted}},{key:"_setRoot",value:function(a){this.root=a,this.mounted=!0,this.events.emit("mount",a)}}]),a}();/*! @ryanmorr/schedule-render v2.0.1 | https://github.com/ryanmorr/schedule-render */return function(a,b){return new L(a,b)}}); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhci51bWQuanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9Acnlhbm1vcnIvc2NoZWR1bGUtcmVuZGVyL2Rpc3Qvc2NoZWR1bGUtcmVuZGVyLmVzbS5qcyIsIi4uL3NyYy91dGlsLmpzIiwiLi4vc3JjL3BhdGNoLmpzIiwiLi4vc3JjL3BhcnNlci5qcyIsIi4uL3NyYy9ldmVudC1lbWl0dGVyLmpzIiwiLi4vc3JjL3RlbXBsYXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyohIEByeWFubW9yci9zY2hlZHVsZS1yZW5kZXIgdjIuMC4xIHwgaHR0cHM6Ly9naXRodWIuY29tL3J5YW5tb3JyL3NjaGVkdWxlLXJlbmRlciAqL3ZhciBmcmFtZSxzdGFydCxidWRnZXQ9bnVsbCxiYXRjaD1bXSxCUk9XU0VSX1JFTkRFUl9USU1FPTY7ZnVuY3Rpb24gcmVuZGVyKCl7aWYoZnJhbWU9bnVsbCxudWxsPT1idWRnZXQpZm9yKDswPGJhdGNoLmxlbmd0aDspYmF0Y2guc2hpZnQoKS5yZW5kZXIoKTtlbHNle3N0YXJ0PXBlcmZvcm1hbmNlLm5vdygpO2RvIGJhdGNoLnNoaWZ0KCkucmVuZGVyKCk7d2hpbGUoMDxiYXRjaC5sZW5ndGgmJnBlcmZvcm1hbmNlLm5vdygpLXN0YXJ0PGJ1ZGdldCk7MDxiYXRjaC5sZW5ndGgmJihmcmFtZT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVuZGVyKSl9fWZ1bmN0aW9uIGZwcyhhKXtidWRnZXQ9XCJudW1iZXJcIj09dHlwZW9mIGE/MWUzL2EtQlJPV1NFUl9SRU5ERVJfVElNRTpudWxsfWZ1bmN0aW9uIGNsZWFyKCl7Zm9yKGZyYW1lJiZjYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZSk7MDxiYXRjaC5sZW5ndGg7KWJhdGNoLnNoaWZ0KCkuY2FuY2VsKCl9ZnVuY3Rpb24gc2NoZWR1bGVSZW5kZXIoYSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGIsYyl7ZnJhbWV8fChmcmFtZT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVuZGVyKSksYmF0Y2gucHVzaCh7cmVuZGVyOmZ1bmN0aW9uKCl7cmV0dXJuIGIoYSgpKX0sY2FuY2VsOmN9KX0pfWV4cG9ydHtjbGVhcixmcHMsc2NoZWR1bGVSZW5kZXJ9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljMk5vWldSMWJHVXRjbVZ1WkdWeUxtVnpiUzVxY3lJc0luTnZkWEpqWlhNaU9sc2lMaTR2YzNKakwzTmphR1ZrZFd4bExYSmxibVJsY2k1cWN5SmRMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpzWlhRZ1puSmhiV1U3WEhKY2JteGxkQ0J6ZEdGeWREdGNjbHh1YkdWMElHSjFaR2RsZENBOUlHNTFiR3c3WEhKY2JtTnZibk4wSUdKaGRHTm9JRDBnVzEwN1hISmNibHh5WEc0dkx5QkNjbTkzYzJWeUozTWdjbVZ4ZFdseVpTQmhjbTkxYm1RZ05tMXpJSFJ2SUhKbGJtUmxjaUJoSUdaeVlXMWxYSEpjYmk4dklHaDBkSEJ6T2k4dlpHVjJaV3h2Y0dWeWN5NW5iMjluYkdVdVkyOXRMM2RsWWk5bWRXNWtZVzFsYm5SaGJITXZjR1Z5Wm05eWJXRnVZMlV2Y21GcGJDTmhibWx0WVhScGIyNWNjbHh1WTI5dWMzUWdRbEpQVjFORlVsOVNSVTVFUlZKZlZFbE5SU0E5SURZN1hISmNibHh5WEc1bWRXNWpkR2x2YmlCeVpXNWtaWElvS1NCN1hISmNiaUFnSUNCbWNtRnRaU0E5SUc1MWJHdzdYSEpjYmlBZ0lDQnBaaUFvWW5Wa1oyVjBJRDA5SUc1MWJHd3BJSHRjY2x4dUlDQWdJQ0FnSUNCM2FHbHNaU0FvWW1GMFkyZ3ViR1Z1WjNSb0lENGdNQ2tnWW1GMFkyZ3VjMmhwWm5Rb0tTNXlaVzVrWlhJb0tUdGNjbHh1SUNBZ0lIMGdaV3h6WlNCN1hISmNiaUFnSUNBZ0lDQWdjM1JoY25RZ1BTQndaWEptYjNKdFlXNWpaUzV1YjNjb0tUdGNjbHh1SUNBZ0lDQWdJQ0JrYnlCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUdKaGRHTm9Mbk5vYVdaMEtDa3VjbVZ1WkdWeUtDazdYSEpjYmlBZ0lDQWdJQ0FnZlNCM2FHbHNaU0FvWW1GMFkyZ3ViR1Z1WjNSb0lENGdNQ0FtSmlBb0tIQmxjbVp2Y20xaGJtTmxMbTV2ZHlncElDMGdjM1JoY25RcElEd2dZblZrWjJWMEtTazdYSEpjYmlBZ0lDQWdJQ0FnYVdZZ0tHSmhkR05vTG14bGJtZDBhQ0ErSURBcElIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ1puSmhiV1VnUFNCeVpYRjFaWE4wUVc1cGJXRjBhVzl1Um5KaGJXVW9jbVZ1WkdWeUtUdGNjbHh1SUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0I5WEhKY2JuMWNjbHh1WEhKY2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCbWNITW9kbUZzZFdVcElIdGNjbHh1SUNBZ0lHSjFaR2RsZENBOUlDaDBlWEJsYjJZZ2RtRnNkV1VnUFQwOUlDZHVkVzFpWlhJbktTQS9JQ2d4TURBd0lDOGdkbUZzZFdVcElDMGdRbEpQVjFORlVsOVNSVTVFUlZKZlZFbE5SU0E2SUc1MWJHdzdYSEpjYm4xY2NseHVYSEpjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJqYkdWaGNpZ3BJSHRjY2x4dUlDQWdJR2xtSUNobWNtRnRaU2tnZTF4eVhHNGdJQ0FnSUNBZ0lHTmhibU5sYkVGdWFXMWhkR2x2YmtaeVlXMWxLR1p5WVcxbEtUdGNjbHh1SUNBZ0lIMWNjbHh1SUNBZ0lIZG9hV3hsSUNoaVlYUmphQzVzWlc1bmRHZ2dQaUF3S1NCaVlYUmphQzV6YUdsbWRDZ3BMbU5oYm1ObGJDZ3BPMXh5WEc1OVhISmNibHh5WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYzJOb1pXUjFiR1ZTWlc1a1pYSW9ZMkZzYkdKaFkyc3BJSHRjY2x4dUlDQWdJSEpsZEhWeWJpQnVaWGNnVUhKdmJXbHpaU2dvY21WemIyeDJaU3dnY21WcVpXTjBLU0E5UGlCN1hISmNiaUFnSUNBZ0lDQWdhV1lnS0NGbWNtRnRaU2tnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0JtY21GdFpTQTlJSEpsY1hWbGMzUkJibWx0WVhScGIyNUdjbUZ0WlNoeVpXNWtaWElwTzF4eVhHNGdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdJQ0JpWVhSamFDNXdkWE5vS0h0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnY21WdVpHVnlPaUFvS1NBOVBpQnlaWE52YkhabEtHTmhiR3hpWVdOcktDa3BMRnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZVzVqWld3NklISmxhbVZqZEZ4eVhHNGdJQ0FnSUNBZ0lIMHBPMXh5WEc0Z0lDQWdmU2s3WEhKY2JuMWNjbHh1SWwwc0ltNWhiV1Z6SWpwYkltWnlZVzFsSWl3aWMzUmhjblFpTENKaWRXUm5aWFFpTENKaVlYUmphQ0lzSWtKU1QxZFRSVkpmVWtWT1JFVlNYMVJKVFVVaUxDSnlaVzVrWlhJaUxDSnNaVzVuZEdnaUxDSnphR2xtZENJc0luQmxjbVp2Y20xaGJtTmxJaXdpYm05M0lpd2ljbVZ4ZFdWemRFRnVhVzFoZEdsdmJrWnlZVzFsSWl3aVpuQnpJaXdpZG1Gc2RXVWlMQ0pqYkdWaGNpSXNJbU5oYm1ObGJFRnVhVzFoZEdsdmJrWnlZVzFsSWl3aVkyRnVZMlZzSWl3aWMyTm9aV1IxYkdWU1pXNWtaWElpTENKallXeHNZbUZqYXlJc0lsQnliMjFwYzJVaUxDSnlaWE52YkhabElpd2ljbVZxWldOMElpd2ljSFZ6YUNKZExDSnRZWEJ3YVc1bmN5STZJbmRHUVVGSlFTeERRVUZCUVN4TlFVTkJReXhOUVVOQlF5eE5RVUZOTEVOQlFVY3NTMEZEVUVNc1MwRkJTeXhEUVVGSExFZEJTVkpETEcxQ1FVRnRRaXhEUVVGSExFVkJSVFZDTEZGQlFWTkRMRU5CUVVGQkxFMUJRVlFzUlVGQmEwSXNTVUZEWkV3c1MwRkJTeXhEUVVGSExFdEJRMDBzU1VGQlZrVXNSVUZCUVVFc1dVRkRjMElzUTBGQlprTXNRMEZCUVVFc1MwRkJTeXhEUVVGRFJ5eFJRVUZaU0N4TFFVRkxMRU5CUVVOSkxFdEJRVTVLTEVkQlFXTkZMRTFCUVdSR0xFOUJRM1JDTEVOQlEwaEdMRXRCUVVzc1EwRkJSMDhzVjBGQlZ5eERRVUZEUXl4SFFVRmFSQ3hGUVVSTUxFZEJSME5NTEVOQlFVRkJMRXRCUVVzc1EwRkJRMGtzUzBGQlRrb3NSMEZCWTBVc1RVRkJaRVlzVTBGRGIwSXNRMEZCWmtFc1EwRkJRVUVzUzBGQlN5eERRVUZEUnl4TlFVRk9TQ3hGUVVGelFrc3NWMEZCVnl4RFFVRkRReXhIUVVGYVJDeEhRVUZ2UWxBc1MwRkJjRUpQTEVOQlFUWkNUaXhSUVVONlF5eERRVUZtUXl4RFFVRkJRU3hMUVVGTExFTkJRVU5ITEUxQlRGQXNSMEZOUTA0c1MwRkJTeXhEUVVGSFZTeHhRa0ZCY1VJc1EwRkJRMHdzVFVGQlJDeERRVTQ1UWl4SFFWZEtMRkZCUVZOTkxFTkJRVUZCTEVkQlFWUXNRMEZCWVVNc1EwRkJZaXhEUVVGdlFpeERRVU4yUWxZc1RVRkJUU3hEUVVGeFFpeFJRVUZxUWl4UlFVRlBWU3hEUVVGQlFTeERRVUZRTEVOQlFUaENMRWxCUVU5QkxFTkJRVkFzUTBGQlowSlNMRzFDUVVFNVF5eERRVUZ2UlN4TFFVZHNSaXhSUVVGblFsTXNRMEZCUVVFc1MwRkJhRUlzUlVGQmQwSXNTMEZEYUVKaUxFdEJSR2RDTEVWQlJXaENZeXh2UWtGQmIwSXNRMEZCUTJRc1MwRkJSQ3hEUVVaS0xFTkJTVVVzUTBGQlprY3NRMEZCUVVFc1MwRkJTeXhEUVVGRFJ5eE5RVXBQTEVWQlNVdElMRXRCUVVzc1EwRkJRMGtzUzBGQlRrb3NSMEZCWTFrc1RVRkJaRm9zUjBGSGRFSXNVVUZCVTJFc1EwRkJRVUVzWTBGQlZDeERRVUYzUWtNc1EwRkJlRUlzUTBGQmEwTXNUMEZET1VJc1NVRkJTVU1zUTBGQlFVRXNUMEZCU2l4RFFVRlpMRk5CUVVORExFTkJRVVFzUTBGQlZVTXNRMEZCVml4RFFVRnhRaXhEUVVNdlFuQkNMRXRCUkN0Q0xFZEJSV2hEUVN4TFFVRkxMRU5CUVVkVkxIRkNRVUZ4UWl4RFFVRkRUQ3hOUVVGRUxFTkJSa2NzUlVGSmNFTkdMRXRCUVVzc1EwRkJRMnRDTEVsQlFVNXNRaXhEUVVGWExFTkJRMUJGTEUxQlFVMHNRMEZCUlN4cFFrRkJUV01zUTBGQlFVRXNRMEZCVHl4RFFVRkRSaXhEUVVGUkxFVkJRVlFzUTBGRVpDeERRVUZCTEVOQlJWQkdMRTFCUVUwc1EwRkJSVXNzUTBGR1JDeERRVUZZYWtJc1EwRktSeXhEUVVGQkluMD1cbiIsImNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKTtcclxuY29uc3QgaHRtbFJlID0gLzxbYS16XVtcXHNcXFNdKj4vO1xyXG5jb25zdCBlc2NhcGVIVE1MUmUgPSAvWzw+JlwiJ10vZztcclxuY29uc3QgZXNjYXBlSFRNTE1hcCA9IHtcclxuICAgICc8JzogJyZsdDsnLFxyXG4gICAgJz4nOiAnJmd0OycsXHJcbiAgICAnJic6ICcmYW1wOycsXHJcbiAgICAnXCInOiAnJiMzOTsnLFxyXG4gICAgJ1xcJyc6ICcmcXVvdDsnXHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdWlkKCkge1xyXG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb24ob2JqKSB7XHJcbiAgICByZXR1cm4ge30udG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNIVE1MKHN0cikge1xyXG4gICAgcmV0dXJuIGh0bWxSZS50ZXN0KHN0cik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1RlbXBsYXRlKG9iaikge1xyXG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iai50ZW1wbGFyID09PSB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWF0Y2hlcyhyZSwgc3RyLCBmbikge1xyXG4gICAgbGV0IG1hdGNoZXM7XHJcbiAgICBpZiAocmUuZ2xvYmFsKSB7XHJcbiAgICAgICAgcmUubGFzdEluZGV4ID0gMDtcclxuICAgIH1cclxuICAgIHdoaWxlICgobWF0Y2hlcyA9IHJlLmV4ZWMoc3RyKSkpIHtcclxuICAgICAgICBmbihtYXRjaGVzKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUhUTUwoc3RyKSB7XHJcbiAgICBpZiAoc3RyID09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHN0ciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoZXNjYXBlSFRNTFJlLCAoYykgPT4gZXNjYXBlSFRNTE1hcFtjXSB8fCAnJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VIVE1MKGh0bWwpIHtcclxuICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGh0bWw7XHJcbiAgICByZXR1cm4gZG9jdW1lbnQuaW1wb3J0Tm9kZSh0ZW1wbGF0ZS5jb250ZW50LCB0cnVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBGcmFnbWVudChmcmFnLCBpZCkge1xyXG4gICAgY29uc3QgZmlyc3QgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XHJcbiAgICBjb25zdCBsYXN0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xyXG4gICAgZmlyc3QudGVtcGxhcklkID0gbGFzdC50ZW1wbGFySWQgPSBpZDtcclxuICAgIGZyYWcuaW5zZXJ0QmVmb3JlKGZpcnN0LCBmcmFnLmZpcnN0Q2hpbGQpO1xyXG4gICAgZnJhZy5hcHBlbmRDaGlsZChsYXN0KTtcclxuICAgIHJldHVybiBmcmFnO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVtcGxhdGVOb2Rlcyhyb290LCBpZCkge1xyXG4gICAgY29uc3QgZWxlbWVudHMgPSBbXTtcclxuICAgIGxldCBub2RlID0gcm9vdC5maXJzdENoaWxkLCBpc1RwbCA9IGZhbHNlO1xyXG4gICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgICBpZiAobm9kZS50ZW1wbGFySWQgPT09IGlkICYmICFpc1RwbCkge1xyXG4gICAgICAgICAgICBpc1RwbCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChub2RlLnRlbXBsYXJJZCA9PT0gaWQgJiYgaXNUcGwpIHtcclxuICAgICAgICAgICAgaXNUcGwgPSBmYWxzZTtcclxuICAgICAgICAgICAgZWxlbWVudHMucHVzaChub2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzVHBsKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVsZW1lbnRzO1xyXG59XHJcbiIsImltcG9ydCB7IGlzSFRNTCwgaXNUZW1wbGF0ZSwgcGFyc2VIVE1MIH0gZnJvbSAnLi91dGlsJztcclxuXHJcbmZ1bmN0aW9uIGFycmF5VG9GcmFnKG5vZGVzKSB7XHJcbiAgICByZXR1cm4gbm9kZXMucmVkdWNlKChmcmFnLCBub2RlKSA9PiBmcmFnLmFwcGVuZENoaWxkKGdldE5vZGUobm9kZSkpICYmIGZyYWcsIGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc29sdmVOb2RlKG5vZGUpIHtcclxuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAxMSkge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKG5vZGUuY2hpbGROb2Rlcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbm9kZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2xlYXIocGFyZW50LCBlbGVtZW50KSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50KSkge1xyXG4gICAgICAgIGVsZW1lbnQuZm9yRWFjaCgobm9kZSkgPT4gcGFyZW50LnJlbW92ZUNoaWxkKG5vZGUpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXROb2RlKHZhbHVlLCBlc2NhcGUpIHtcclxuICAgIGlmIChpc1RlbXBsYXRlKHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBpZiAoZXNjYXBlID09PSBmYWxzZSAmJiBpc0hUTUwodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUhUTUwodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIGFycmF5VG9GcmFnKHZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKHBhcmVudCwgbm9kZSwgcmVmZXJlbmNlTm9kZSkge1xyXG4gICAgaWYgKGlzVGVtcGxhdGUobm9kZSkpIHtcclxuICAgICAgICBub2RlLnVubW91bnQoKTtcclxuICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5vZGUuZnJhZywgcmVmZXJlbmNlTm9kZSk7XHJcbiAgICAgICAgbm9kZS5fc2V0Um9vdChwYXJlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5vZGUsIHJlZmVyZW5jZU5vZGUpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZXBsYWNlKHBhcmVudCwgbm9kZSwgcmVmZXJlbmNlTm9kZSkge1xyXG4gICAgaWYgKGlzVGVtcGxhdGUobm9kZSkpIHtcclxuICAgICAgICBub2RlLnVubW91bnQoKTtcclxuICAgICAgICBwYXJlbnQucmVwbGFjZUNoaWxkKG5vZGUuZnJhZywgcmVmZXJlbmNlTm9kZSk7XHJcbiAgICAgICAgbm9kZS5fc2V0Um9vdChwYXJlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBwYXJlbnQucmVwbGFjZUNoaWxkKG5vZGUsIHJlZmVyZW5jZU5vZGUpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2hOb2RlKHBhcmVudCwgb2xkTm9kZSwgbmV3VmFsdWUsIGVzY2FwZSwgbWFya2VyKSB7XHJcbiAgICBpZiAodHlwZW9mIG5ld1ZhbHVlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIG5ld1ZhbHVlID0gU3RyaW5nKG5ld1ZhbHVlKTtcclxuICAgIH1cclxuICAgIGlmIChvbGROb2RlLm5vZGVUeXBlID09PSAzICYmIHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ3N0cmluZycgJiYgIWlzSFRNTChuZXdWYWx1ZSkpIHtcclxuICAgICAgICBvbGROb2RlLmRhdGEgPSBuZXdWYWx1ZTtcclxuICAgICAgICByZXR1cm4gb2xkTm9kZTtcclxuICAgIH1cclxuICAgIGNvbnN0IG5ld05vZGUgPSBnZXROb2RlKG5ld1ZhbHVlLCBlc2NhcGUpO1xyXG4gICAgY29uc3QgcmVzb2x2ZWROb2RlID0gcmVzb2x2ZU5vZGUobmV3Tm9kZSk7XHJcbiAgICBpZiAoaXNUZW1wbGF0ZShvbGROb2RlKSkge1xyXG4gICAgICAgIG9sZE5vZGUudW5tb3VudCgpO1xyXG4gICAgICAgIGluc2VydEJlZm9yZShwYXJlbnQsIG5ld05vZGUsIG1hcmtlcik7XHJcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob2xkTm9kZSkpIHtcclxuICAgICAgICBpZiAob2xkTm9kZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgaW5zZXJ0QmVmb3JlKHBhcmVudCwgbmV3Tm9kZSwgbWFya2VyKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG9sZE5vZGUubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJlcGxhY2UocGFyZW50LCBuZXdOb2RlLCBvbGROb2RlWzBdKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjbGVhcihwYXJlbnQsIG9sZE5vZGUpO1xyXG4gICAgICAgICAgICBpbnNlcnRCZWZvcmUocGFyZW50LCBuZXdOb2RlLCBtYXJrZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVwbGFjZShwYXJlbnQsIG5ld05vZGUsIG9sZE5vZGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc29sdmVkTm9kZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoQXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIG9sZFZhbCwgbmV3VmFsKSB7XHJcbiAgICBpZiAobmFtZSA9PT0gJ3N0eWxlJykge1xyXG4gICAgICAgIGlmICh0eXBlb2YgbmV3VmFsID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlLmNzc1RleHQgPSBuZXdWYWw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbmV3VmFsKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdHlsZSA9IG5ld1ZhbCA9PSBudWxsIHx8IG5ld1ZhbFtrZXldID09IG51bGwgPyAnJyA6IG5ld1ZhbFtrZXldO1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleVswXSA9PT0gJy0nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHN0eWxlKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZVtrZXldID0gc3R5bGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKG5hbWUuc3RhcnRzV2l0aCgnb24nKSAmJiAodHlwZW9mIG9sZFZhbCA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgbmV3VmFsID09PSAnZnVuY3Rpb24nKSkge1xyXG4gICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDIpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKG5ld1ZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCBvbGRWYWwpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAob2xkVmFsID09IG51bGwpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKG5hbWUsIG5ld1ZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChuYW1lICE9PSAnZm9ybScgJiYgbmFtZSAhPT0gJ2xpc3QnICYmIG5hbWUgaW4gZWxlbWVudCkge1xyXG4gICAgICAgIGVsZW1lbnRbbmFtZV0gPSBuZXdWYWwgPT0gbnVsbCA/ICcnIDogbmV3VmFsO1xyXG4gICAgfSBlbHNlIGlmIChuZXdWYWwgPT0gbnVsbCB8fCBuZXdWYWwgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIG5ld1ZhbCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgc2NoZWR1bGVSZW5kZXIgfSBmcm9tICdAcnlhbm1vcnIvc2NoZWR1bGUtcmVuZGVyJztcclxuaW1wb3J0IHsgcGF0Y2hOb2RlLCBwYXRjaEF0dHJpYnV0ZSB9IGZyb20gJy4vcGF0Y2gnO1xyXG5pbXBvcnQgeyBnZXRNYXRjaGVzIH0gZnJvbSAnLi91dGlsJztcclxuXHJcbmNvbnN0IG1hdGNoZXJSZSA9IC9cXHtcXHtcXHMqJj8oLis/KVxccypcXH1cXH0vZztcclxuY29uc3Qgbm9kZUNvbnRlbnRSZSA9IC9cXHtcXHtcXHMqKC4rPylcXHMqXFx9XFx9fCgoPzooPyEoPzpcXHtcXHtcXHMqKC4rPylcXHMqXFx9XFx9KSkuKSspL2c7XHJcblxyXG5mdW5jdGlvbiBoYXNJbnRlcnBvbGF0aW9uKHN0cikge1xyXG4gICAgcmV0dXJuIHN0ci5pbmRleE9mKCd7eycpICE9PSAtMTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW50ZXJwb2xhdGUodHBsLCBkYXRhKSB7XHJcbiAgICByZXR1cm4gdHBsLnJlcGxhY2UobWF0Y2hlclJlLCAoYWxsLCB0b2tlbikgPT4gZGF0YVt0b2tlbl0pLnRyaW0oKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0VG9rZW5zKHZhbHVlKSB7XHJcbiAgICBjb25zdCB0b2tlbnMgPSBbXTtcclxuICAgIGdldE1hdGNoZXMobWF0Y2hlclJlLCB2YWx1ZSwgKG1hdGNoZXMpID0+IHRva2Vucy5wdXNoKG1hdGNoZXNbMV0pKTtcclxuICAgIHJldHVybiB0b2tlbnM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZEJpbmRpbmcoYmluZGluZ3MsIHRva2VuLCBiaW5kaW5nKSB7XHJcbiAgICBpZiAoISh0b2tlbiBpbiBiaW5kaW5ncykpIHtcclxuICAgICAgICBiaW5kaW5nc1t0b2tlbl0gPSBbXTtcclxuICAgIH1cclxuICAgIGJpbmRpbmdzW3Rva2VuXS5wdXNoKGJpbmRpbmcpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhdHRyaWJ1dGVCaW5kaW5nKHRwbCwgbm9kZSwgYXR0ciwgdGV4dCkge1xyXG4gICAgbGV0IHZhbHVlID0gbnVsbDtcclxuICAgIGNvbnN0IHRva2VucyA9IGdldFRva2Vucyh0ZXh0KTtcclxuICAgIGNvbnN0IGlzRXZlbnQgPSBhdHRyLnN0YXJ0c1dpdGgoJ29uJyk7XHJcbiAgICBpZiAoaXNFdmVudCkge1xyXG4gICAgICAgIG5vZGVbYXR0cl0gPSBudWxsO1xyXG4gICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHIpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVuZGVyID0gKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdmFsdWUgPSBpc0V2ZW50IHx8IHRleHQgPT09ICgne3snICsgdG9rZW5zWzBdICsgJ319JykgPyB0cGwuZGF0YVt0b2tlbnNbMF1dIDogaW50ZXJwb2xhdGUodGV4dCwgdHBsLmRhdGEpO1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gb2xkVmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwYXRjaEF0dHJpYnV0ZShub2RlLCBhdHRyLCBvbGRWYWx1ZSwgdmFsdWUpO1xyXG4gICAgICAgIHRwbC5ldmVudHMuZW1pdCgnYXR0cmlidXRlY2hhbmdlJywgbm9kZSwgb2xkVmFsdWUsIHZhbHVlKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgIGlmICh0b2tlbnMuZXZlcnkoKHRva2VuKSA9PiB0b2tlbiBpbiB0cGwuZGF0YSkpIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmNvbnRhaW5zKG5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBzY2hlZHVsZVJlbmRlcihyZW5kZXIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBub2RlQmluZGluZyh0cGwsIG5vZGUsIG1hcmtlciwgdG9rZW4sIGVzY2FwZSkge1xyXG4gICAgbGV0IHZhbHVlID0gbnVsbDtcclxuICAgIGNvbnN0IHJlbmRlciA9ICgpID0+IHtcclxuICAgICAgICB2YWx1ZSA9IHRwbC5kYXRhW3Rva2VuXTtcclxuICAgICAgICBpZiAodmFsdWUgPT09IG5vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwYXJlbnQgPSBtYXJrZXIucGFyZW50Tm9kZTtcclxuICAgICAgICBub2RlID0gcGF0Y2hOb2RlKHBhcmVudCwgbm9kZSwgdmFsdWUsIGVzY2FwZSwgbWFya2VyKTtcclxuICAgICAgICB0cGwuZXZlbnRzLmVtaXQoJ2NoYW5nZScsIHBhcmVudCk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICBpZiAodG9rZW4gaW4gdHBsLmRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmNvbnRhaW5zKG1hcmtlcikpIHtcclxuICAgICAgICAgICAgICAgIHNjaGVkdWxlUmVuZGVyKHJlbmRlcik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZW5kZXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQXR0cmlidXRlKHRwbCwgbm9kZSwgYmluZGluZ3MsIG5hbWUsIHZhbHVlKSB7XHJcbiAgICBjb25zdCBiaW5kaW5nID0gYXR0cmlidXRlQmluZGluZyh0cGwsIG5vZGUsIG5hbWUsIHZhbHVlKTtcclxuICAgIGdldFRva2Vucyh2YWx1ZSkuZm9yRWFjaCgodG9rZW4pID0+IGFkZEJpbmRpbmcoYmluZGluZ3MsIHRva2VuLCBiaW5kaW5nKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlTm9kZSh0cGwsIG5vZGUsIGJpbmRpbmdzKSB7XHJcbiAgICBjb25zdCBmcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xyXG4gICAgZ2V0TWF0Y2hlcyhub2RlQ29udGVudFJlLCBub2RlLmRhdGEsIChtYXRjaGVzKSA9PiB7XHJcbiAgICAgICAgaWYgKG1hdGNoZXNbMV0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBsZXQgdG9rZW4gPSBtYXRjaGVzWzFdLCBlc2NhcGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRva2VuWzBdID09PSAnJicpIHtcclxuICAgICAgICAgICAgICAgIGVzY2FwZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2VuLnN1YnN0cigxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzdWJzdGl0dXRlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xyXG4gICAgICAgICAgICBjb25zdCBtYXJrZXIgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGJpbmRpbmcgPSBub2RlQmluZGluZyh0cGwsIHN1YnN0aXR1dGUsIG1hcmtlciwgdG9rZW4sIGVzY2FwZSk7XHJcbiAgICAgICAgICAgIGFkZEJpbmRpbmcoYmluZGluZ3MsIHRva2VuLCBiaW5kaW5nKTtcclxuICAgICAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChzdWJzdGl0dXRlKTtcclxuICAgICAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChtYXJrZXIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWF0Y2hlc1syXSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWF0Y2hlc1syXSkpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZyYWc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRlbXBsYXRlKHRwbCwgbm9kZXMsIGJpbmRpbmdzID0ge30pIHtcclxuICAgIHJldHVybiBBcnJheS5mcm9tKG5vZGVzKS5yZWR1Y2UoKGJpbmRpbmdzLCBub2RlKSA9PiB7XHJcbiAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDMpIHtcclxuICAgICAgICAgICAgaWYgKGhhc0ludGVycG9sYXRpb24obm9kZS5kYXRhKSkge1xyXG4gICAgICAgICAgICAgICAgbm9kZS5yZXBsYWNlV2l0aChwYXJzZU5vZGUodHBsLCBub2RlLCBiaW5kaW5ncykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChub2RlLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBub2RlLmF0dHJpYnV0ZXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHIgPSBub2RlLmF0dHJpYnV0ZXNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoaGFzSW50ZXJwb2xhdGlvbihhdHRyLnZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlQXR0cmlidXRlKHRwbCwgbm9kZSwgYmluZGluZ3MsIGF0dHIubmFtZSwgYXR0ci52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5vZGUuaGFzQ2hpbGROb2RlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJzZVRlbXBsYXRlKHRwbCwgbm9kZS5jaGlsZE5vZGVzLCBiaW5kaW5ncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGJpbmRpbmdzO1xyXG4gICAgfSwgYmluZGluZ3MpO1xyXG59XHJcbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmV2ZW50cyA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIG9uKG5hbWUsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgbGV0IGNhbGxiYWNrcyA9IHRoaXMuZXZlbnRzW25hbWVdO1xyXG4gICAgICAgIGlmIChjYWxsYmFja3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBjYWxsYmFja3MgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5ldmVudHNbbmFtZV0gPSBjYWxsYmFja3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmUobmFtZSwgY2FsbGJhY2spIHtcclxuICAgICAgICBjb25zdCBjYWxsYmFja3MgPSB0aGlzLmV2ZW50c1tuYW1lXTtcclxuICAgICAgICBpZiAoY2FsbGJhY2tzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNhbGxiYWNrcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrc1tpXSA9PT0gY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3Muc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlbWl0KG5hbWUsIC4uLmFyZ3MpIHtcclxuICAgICAgICBjb25zdCBjYWxsYmFja3MgPSB0aGlzLmV2ZW50c1tuYW1lXTtcclxuICAgICAgICBpZiAoY2FsbGJhY2tzICE9PSB1bmRlZmluZWQgJiYgY2FsbGJhY2tzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjYWxsYmFja3MuZm9yRWFjaCgoY2FsbGJhY2spID0+IGNhbGxiYWNrKC4uLmFyZ3MpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICcuL2V2ZW50LWVtaXR0ZXInO1xyXG5pbXBvcnQgeyBwYXJzZVRlbXBsYXRlIH0gZnJvbSAnLi9wYXJzZXInO1xyXG5pbXBvcnQgeyBwYXJzZUhUTUwsIHVpZCwgd3JhcEZyYWdtZW50LCBnZXRUZW1wbGF0ZU5vZGVzIH0gZnJvbSAnLi91dGlsJztcclxuXHJcbmNsYXNzIFRlbXBsYXIge1xyXG4gICAgY29uc3RydWN0b3IodHBsLCBkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5pZCA9IHVpZCgpO1xyXG4gICAgICAgIHRoaXMudGVtcGxhciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kYXRhID0ge307XHJcbiAgICAgICAgY29uc3QgZnJhZyA9IHBhcnNlSFRNTCh0cGwudHJpbSgpKTtcclxuICAgICAgICB0aGlzLnJvb3QgPSB0aGlzLmZyYWcgPSB3cmFwRnJhZ21lbnQoZnJhZywgdGhpcy5pZCk7XHJcbiAgICAgICAgdGhpcy5iaW5kaW5ncyA9IHBhcnNlVGVtcGxhdGUodGhpcywgZnJhZy5jaGlsZE5vZGVzKTtcclxuICAgICAgICB0aGlzLmV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgICAgICB0aGlzLm1vdW50ZWQgPSBmYWxzZTtcclxuICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldChkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbW91bnQocm9vdCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzTW91bnRlZCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudW5tb3VudCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByb290LmFwcGVuZENoaWxkKHRoaXMuZnJhZyk7XHJcbiAgICAgICAgdGhpcy5fc2V0Um9vdChyb290KTtcclxuICAgIH1cclxuXHJcbiAgICB1bm1vdW50KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzTW91bnRlZCgpKSB7XHJcbiAgICAgICAgICAgIGdldFRlbXBsYXRlTm9kZXModGhpcy5nZXRSb290KCksIHRoaXMuaWQpLmZvckVhY2goKG5vZGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhZy5hcHBlbmRDaGlsZChub2RlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMucm9vdCA9IHRoaXMuZnJhZztcclxuICAgICAgICAgICAgdGhpcy5tb3VudGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzLmVtaXQoJ3VubW91bnQnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0KHRva2VuKSB7XHJcbiAgICAgICAgcmV0dXJuIHRva2VuIGluIHRoaXMuZGF0YSA/IHRoaXMuZGF0YVt0b2tlbl0gOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCh0b2tlbiwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHRva2VuICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0b2tlbikuZm9yRWFjaCgobmFtZSkgPT4gdGhpcy5zZXQobmFtZSwgdG9rZW5bbmFtZV0pKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRhdGFbdG9rZW5dID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5iaW5kaW5nc1t0b2tlbl0uZm9yRWFjaCgoYmluZGluZykgPT4gYmluZGluZygpKTtcclxuICAgIH1cclxuXHJcbiAgICBvbihuYW1lLCBjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuZXZlbnRzLm9uKG5hbWUsIGNhbGxiYWNrKTtcclxuICAgICAgICByZXR1cm4gKCkgPT4gdGhpcy5ldmVudHMucmVtb3ZlKG5hbWUsIGNhbGxiYWNrKTtcclxuICAgIH1cclxuXHJcbiAgICBxdWVyeShzZWxlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLmdldFJvb3QoKTtcclxuICAgICAgICBpZiAocm9vdCA9PT0gdGhpcy5mcmFnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHJvb3QucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0cGxOb2RlcyA9IGdldFRlbXBsYXRlTm9kZXMocm9vdCwgdGhpcy5pZCk7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20ocm9vdC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKChub2RlKSA9PiB0cGxOb2Rlcy5zb21lKCh0cGxOb2RlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0cGxOb2RlID09PSBub2RlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHBsTm9kZS5ub2RlVHlwZSA9PT0gMSAmJiB0cGxOb2RlLmNvbnRhaW5zKG5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFJvb3QoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdDtcclxuICAgIH1cclxuXHJcbiAgICBpc01vdW50ZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW91bnRlZDtcclxuICAgIH1cclxuXHJcbiAgICBfc2V0Um9vdChyb290KSB7XHJcbiAgICAgICAgdGhpcy5yb290ID0gcm9vdDtcclxuICAgICAgICB0aGlzLm1vdW50ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZXZlbnRzLmVtaXQoJ21vdW50Jywgcm9vdCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRlbXBsYXIodHBsLCBkYXRhKSB7XHJcbiAgICByZXR1cm4gbmV3IFRlbXBsYXIodHBsLCBkYXRhKTtcclxufVxyXG4iXSwibmFtZXMiOlsicmVuZGVyIiwiZnJhbWUiLCJiYXRjaCIsImxlbmd0aCIsInNoaWZ0Iiwic2NoZWR1bGVSZW5kZXIiLCJhIiwiUHJvbWlzZSIsImIiLCJjIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicHVzaCIsImNhbmNlbCIsInVpZCIsIk1hdGgiLCJyYW5kb20iLCJ0b1N0cmluZyIsInN1YnN0ciIsImlzSFRNTCIsInN0ciIsImh0bWxSZSIsInRlc3QiLCJpc1RlbXBsYXRlIiwib2JqIiwiX3R5cGVvZiIsInRlbXBsYXIiLCJnZXRNYXRjaGVzIiwicmUiLCJmbiIsIm1hdGNoZXMiLCJnbG9iYWwiLCJsYXN0SW5kZXgiLCJleGVjIiwicGFyc2VIVE1MIiwiaHRtbCIsInRlbXBsYXRlIiwiaW5uZXJIVE1MIiwiZG9jdW1lbnQiLCJpbXBvcnROb2RlIiwiY29udGVudCIsIndyYXBGcmFnbWVudCIsImZyYWciLCJpZCIsImZpcnN0IiwiY3JlYXRlVGV4dE5vZGUiLCJsYXN0IiwidGVtcGxhcklkIiwiaW5zZXJ0QmVmb3JlIiwiZmlyc3RDaGlsZCIsImFwcGVuZENoaWxkIiwiZ2V0VGVtcGxhdGVOb2RlcyIsInJvb3QiLCJlbGVtZW50cyIsIm5vZGUiLCJpc1RwbCIsIm5leHRTaWJsaW5nIiwiYXJyYXlUb0ZyYWciLCJub2RlcyIsInJlZHVjZSIsImdldE5vZGUiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwicmVzb2x2ZU5vZGUiLCJub2RlVHlwZSIsIkFycmF5IiwiZnJvbSIsImNoaWxkTm9kZXMiLCJjbGVhciIsInBhcmVudCIsImVsZW1lbnQiLCJpc0FycmF5IiwiZm9yRWFjaCIsInJlbW92ZUNoaWxkIiwidmFsdWUiLCJlc2NhcGUiLCJyZWZlcmVuY2VOb2RlIiwidW5tb3VudCIsIl9zZXRSb290IiwicmVwbGFjZSIsInJlcGxhY2VDaGlsZCIsInBhdGNoTm9kZSIsIm9sZE5vZGUiLCJuZXdWYWx1ZSIsIm1hcmtlciIsImRhdGEiLCJuZXdOb2RlIiwicmVzb2x2ZWROb2RlIiwicGF0Y2hBdHRyaWJ1dGUiLCJuYW1lIiwib2xkVmFsIiwibmV3VmFsIiwic3RhcnRzV2l0aCIsInNsaWNlIiwidG9Mb3dlckNhc2UiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsInN0eWxlIiwiY3NzVGV4dCIsImtleSIsInNldFByb3BlcnR5IiwiaGFzSW50ZXJwb2xhdGlvbiIsImluZGV4T2YiLCJpbnRlcnBvbGF0ZSIsInRwbCIsIm1hdGNoZXJSZSIsImFsbCIsInRva2VuIiwidHJpbSIsImdldFRva2VucyIsInRva2VucyIsImFkZEJpbmRpbmciLCJiaW5kaW5ncyIsImJpbmRpbmciLCJhdHRyaWJ1dGVCaW5kaW5nIiwiYXR0ciIsInRleHQiLCJpc0V2ZW50Iiwib2xkVmFsdWUiLCJldmVudHMiLCJlbWl0IiwiZXZlcnkiLCJjb250YWlucyIsIm5vZGVCaW5kaW5nIiwicGFyZW50Tm9kZSIsInBhcnNlQXR0cmlidXRlIiwicGFyc2VOb2RlIiwibm9kZUNvbnRlbnRSZSIsInN1YnN0aXR1dGUiLCJwYXJzZVRlbXBsYXRlIiwicmVwbGFjZVdpdGgiLCJpIiwiYXR0cmlidXRlcyIsImhhc0NoaWxkTm9kZXMiLCJFdmVudEVtaXR0ZXIiLCJjYWxsYmFjayIsImNhbGxiYWNrcyIsImxlbiIsInNwbGljZSIsImFyZ3MiLCJjcmVhdGVFbGVtZW50IiwiVGVtcGxhciIsIm1vdW50ZWQiLCJzZXQiLCJpc01vdW50ZWQiLCJnZXRSb290IiwiX3RoaXMiLCJPYmplY3QiLCJrZXlzIiwiX3RoaXMyIiwib24iLCJfdGhpczMiLCJyZW1vdmUiLCJzZWxlY3RvciIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJ0cGxOb2RlcyIsImZpbHRlciIsInNvbWUiLCJ0cGxOb2RlIl0sIm1hcHBpbmdzIjoicWxDQUFnSixRQUFTQSxDQUFBQSxDQUFULEVBQWlCLENBQTRCLElBQXhCQyxDQUFLLENBQUMsSUFBa0IsQ0FBSyxFQUFFQyxDQUFLLENBQUNDLE1BQWIsRUFBcUJELENBQUssQ0FBQ0UsS0FBTixHQUFjSixNQUFkLEVBQW1XLFNBQVNLLENBQUFBLENBQVQsQ0FBd0JDLENBQXhCLENBQTBCLENBQUMsTUFBTyxJQUFJQyxDQUFBQSxPQUFKLENBQVksU0FBU0MsQ0FBVCxDQUFXQyxDQUFYLENB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