New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

hybrids

Package Overview
Dependencies
Maintainers
2
Versions
149
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

hybrids - npm Package Compare versions

Comparing version 2.0.0 to 2.0.1

12

CHANGELOG.md

@@ -5,2 +5,12 @@ # Change Log

## [2.0.1](https://github.com/hybridsjs/hybrids/compare/v2.0.0...v2.0.1) (2019-03-04)
### Bug Fixes
* **html:** allows property expressions inside of table elements ([92ce234](https://github.com/hybridsjs/hybrids/commit/92ce234))
* **test:** edge and ie broken test fixes for the newest shadydom version ([9cc7ad7](https://github.com/hybridsjs/hybrids/commit/9cc7ad7))
<a name="2.0.0"></a>

@@ -26,3 +36,3 @@ # [2.0.0](https://github.com/hybridsjs/hybrids/compare/v1.5.0...v2.0.0) (2019-01-08)

* **define:** Descriptor property with `connect` key will not translate to `property(value)`.
* **define:** Property as an object with `connect` key will not translate to `property(value)`.

@@ -29,0 +39,0 @@

2

dist/hybrids.js

@@ -1,2 +0,2 @@

!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.hybrids=t():e.hybrids=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){"use strict";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function c(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.dispatchEvent(new CustomEvent(t,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},o=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),o.forEach(function(t){r(e,t,n[t])})}return e}({bubbles:!1},n)))}function i(e,t){var n=window.ShadyCSS;return n&&!n.nativeShadow?e(n):t}function u(e){var t=String(e.tagName).toLowerCase();return"<".concat(t,">")}n.r(t);var a="ActiveXObject"in window;function f(e){return(f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var l=function(e){return e},s=function(e){if("object"!==f(e))throw TypeError("Assigned value must be an object: ".concat("undefined"==typeof v?"undefined":f(v)));return e&&Object.freeze(e)};function d(e,t){var n=f(e),r=l;switch(n){case"string":r=String;break;case"number":r=Number;break;case"boolean":r=Boolean;break;case"function":e=(r=e)();break;case"object":e&&Object.freeze(e),r=s}return{get:function(t){return arguments.length>1&&void 0!==arguments[1]?arguments[1]:e},set:function(e,t,n){return r(t,n)},connect:"object"!==n&&"undefined"!==n?function(n,r,c){if(n[r]===e){var i=o(r);if(n.hasAttribute(i)){var u=n.getAttribute(i);n[r]=""===u||u}}return t&&t(n,r,c)}:t}}function p(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function y(e){return(y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var b=new WeakMap,h=new WeakMap,m=1e3/60,g=[];function w(e){var t=e.composedPath()[0];t===e.currentTarget&&(g[0]||requestAnimationFrame(function(){return function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(n&&performance.now()-n>m)requestAnimationFrame(function(){return e(t)});else{var r=g[t],o=performance.now();if(r){if(b.has(r)){var c=b.get(r),u=h.get(r);try{var a=r[c];a!==u&&(h.set(r,a),a(),u||i(function(e){return e.styleElement(r)}))}catch(n){throw e(t+1,o),n}}e(t+1,o)}else i(function(e){return g.forEach(function(t){return e.styleSubtree(t)})}),g=[]}}()}),-1===g.indexOf(t)&&g.push(t))}function S(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("function"!=typeof e)throw TypeError("The first argument must be a function: ".concat(y(e)));var n=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){p(e,t,n[t])})}return e}({shadowRoot:!0},t);return{get:function(t){var r=e(t);return function(){return r(t,n.shadowRoot?t.shadowRoot:t)}},connect:function(e,t){if(b.has(e))throw Error("Render factory already used in '".concat(b.get(e),"' key"));if(n.shadowRoot&&!e.shadowRoot){var r={mode:"open"};"object"===y(n.shadowRoot)&&Object.assign(r,n.shadowRoot),e.attachShadow(r)}return e.addEventListener("@invalidate",w),b.set(e,t),function(){e.removeEventListener("@invalidate",w),b.delete(e)}}}}var E=new WeakMap;function N(e,t){var n=E.get(e);n||(n=new Map,E.set(e,n));var r=n.get(t);return r||(r={target:e,key:t,value:void 0,deps:new Set,state:1,checksum:0},n.set(t,r)),r}function O(e){var t=e.state,n=e.deps,r=t;return n.forEach(function(e){e.target[e.key],r+=e.state}),r}var j=null;function x(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function k(e,t){return!t||"object"!==P(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function T(e){var t="function"==typeof Map?new Map:void 0;return(T=function(e){if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;var n;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return A(e,arguments,C(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),M(r,e)})(e)}function A(e,t,n){return(A=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&M(o,n.prototype),o}).apply(null,arguments)}function M(e,t){return(M=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function C(e){return(C=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function P(e){return(P="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _(e){c(e,"@invalidate",{bubbles:!0,composed:!0})}var L=function(e,t){return t};function R(e,t){e.hybrids=t,e.connects=[],Object.keys(t).forEach(function(n){var r,o=t[n],c=P(o);r="function"===c?"render"===n?S(o):{get:o}:null!==o&&"object"===c&&("object"!==c||o.get||o.set||o.connect)?{get:o.get||L,set:o.set||!o.get&&L||void 0,connect:o.connect}:d(o),Object.defineProperty(e.prototype,n,{get:function(){return function(e,t,n){var r=N(e,t);if(j===r)throw j=null,Error("Circular '".concat(t,"' get invocation in '").concat(u(e),"'"));j&&j.deps.add(r);var o=j;if(j=r,r.checksum&&r.checksum===O(r))return j=o,r.value;r.deps.clear();try{var c=n(e,r.value);c!==r.value&&(r.state+=1,r.value=c),r.checksum=O(r),j=o}catch(e){throw j=null,e}return r.value}(this,n,r.get)},set:r.set&&function(e){var t=this;!function(e,t,n,r,o){if(j)throw j=null,Error("Try to set '".concat(t,"' of '").concat(u(e),"' in get call"));var c=N(e,t),i=n(e,r,c.value);i!==c.value&&(c.state+=1,c.value=i,o())}(this,n,r.set,e,function(){return _(t)})},enumerable:!0,configurable:!1}),r.connect&&e.connects.push(function(e){return r.connect(e,n,function(){(!(arguments.length>0&&void 0!==arguments[0])||arguments[0])&&function(e,t,n){if(j)throw j=null,Error("Try to invalidate '".concat(t,"' in '").concat(u(e),"' get call"));var r=N(e,t);r.checksum=0,n&&(r.value=void 0)}(e,n),_(e)})})})}var W=new WeakMap;function D(e,t){var n=P(t);if("object"!==n&&"function"!==n)throw TypeError("Second argument must be an object or a function: ".concat(n));var r=window.customElements.get(e);if("function"===n)return r!==t?window.customElements.define(e,t):r;if(r){if(r.hybrids===t)return r;throw Error("Element '".concat(e,"' already defined"))}var o=function(t){function n(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),k(this,C(n).apply(this,arguments))}var r,o,c;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&M(e,t)}(n,T(HTMLElement)),r=n,c=[{key:"name",get:function(){return e}}],(o=[{key:"connectedCallback",value:function(){var e=this,t=this.constructor.connects.reduce(function(t,n){var r=n(e);return r&&t.add(r),t},new Set);W.set(this,t),_(this)}},{key:"disconnectedCallback",value:function(){W.get(this).forEach(function(e){return e()})}}])&&x(r.prototype,o),c&&x(r,c),n}();return R(o,t),customElements.define(e,o),o}function B(e){return Object.keys(e).reduce(function(t,n){var r=o(n.replace(/((?!([A-Z]{2}|^))[A-Z])/g,"-$1"));return t[n]=D(r,e[n]),t},{})}function F(){return"object"===P(arguments.length<=0?void 0:arguments[0])?B(arguments.length<=0?void 0:arguments[0]):D.apply(void 0,arguments)}var H=new WeakMap;function X(e){var t="function"==typeof e?e:function(t){return t===e};return{get:function(e){return function(e,t){for(var n=e.parentElement||e.parentNode.host;n;){var r=n.constructor.hybrids;if(r&&t(r))return n;n=n.parentElement||n.parentNode&&n.parentNode.host}return n||null}(e,t)},connect:function(e,t,n){var r=e[t];if(r){var o=H.get(r);return o||(o=new Set,H.set(r,o)),o.add(n),function(){o.delete(n),n()}}return!1}}}function $(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{deep:!1,nested:!1},n="function"==typeof e?e:function(t){return t===e};return{get:function(e){return function e(t,n,r){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];return Array.from(t.children).forEach(function(t){var c=t.constructor.hybrids;c&&n(c)?(o.push(t),r.deep&&r.nested&&e(t,n,r,o)):r.deep&&e(t,n,r,o)}),o}(e,n,t)},connect:function(e,n,r){var o=new MutationObserver(r),c=new Set,i=function(t){var o=t.target;c.size||Promise.resolve().then(function(){for(var t=e[n],o=0;o<t.length;o+=1)if(c.has(t[o])){r(!1);break}c.clear()}),c.add(o)};return o.observe(e,{childList:!0,subtree:!!t.deep}),e.addEventListener("@invalidate",i),function(){o.disconnect(),e.removeEventListener("@invalidate",i)}}}}document.addEventListener("@invalidate",function(e){var t=H.get(e.composedPath()[0]);t&&t.forEach(function(e){return e()})});var q=new WeakMap,z={get:function(e,t){return q.has(e)?q.get(e):(void 0!==t&&q.set(e,t),t)},set:function(e,t){return q.set(e,t),t}};function Z(e){for(var t;e&&(t=z.get(e))&&t.endNode;)e=t.endNode;return e}function I(e){var t=z.get(e),n=t.startNode;if(n)for(var r=n,o=Z(t.endNode).nextSibling;r;){var c=r.nextSibling;r.parentNode.removeChild(r),r=c!==o&&c}}var G=new WeakMap;function U(e,t,n){var r=G.get(t),o=n.map(function(e,t){return{id:Object.prototype.hasOwnProperty.call(e,"id")?e.id:t,value:e,placeholder:null,available:!0}});if(G.set(t,o),r){var c=new Set;o.forEach(function(e){return c.add(e.id)}),r=r.filter(function(e){return!!c.has(e.id)||(I(e.placeholder),e.placeholder.parentNode.removeChild(e.placeholder),!1)})}var i=t,u=n.length-1,a=z.get(t);o.forEach(function(t,n){var o,c=r&&r.find(function(e){return e.available&&e.id===t.id});c?(c.available=!1,(o=c.placeholder).previousSibling!==i&&function(e,t){var n=z.get(e),r=n.startNode,o=Z(n.endNode);t.parentNode.insertBefore(e,t.nextSibling);for(var c=e,i=r;i;){var u=i.nextSibling;c.parentNode.insertBefore(i,c.nextSibling),c=i,i=u!==o.nextSibling&&u}}(o,i),c.value!==t.value&&J(e,o,t.value)):(o=document.createTextNode(""),i.parentNode.insertBefore(o,i.nextSibling),J(e,o,t.value)),i=Z(z.get(o).endNode||o),0===n&&(a.startNode=o),n===u&&(a.endNode=i),t.placeholder=o}),r&&r.forEach(function(e){e.available&&(I(e.placeholder),e.placeholder.parentNode.removeChild(e.placeholder))})}function V(e){return(V="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function J(e,t,n){var r=Array.isArray(n)?"array":V(n),o=z.get(t,{});switch(o.type!==r&&(I(t),o=z.set(t,{type:r}),""!==t.textContent&&(t.textContent="")),r){case"function":n(e,t);break;case"array":U(e,t,n);break;default:t.textContent="number"===r||n?n:""}}function K(e){return(K="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var Q=new WeakMap;function Y(e){return(Y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var ee=new WeakMap;function te(e,t,n){var r=ee.get(t)||new Set,o=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Set;return Array.isArray(e)?e.forEach(function(e){return t.add(e)}):null!==e&&"object"===Y(e)?Object.keys(e).forEach(function(n){return e[n]&&t.add(n)}):t.add(e),t}(n);ee.set(t,o),o.forEach(function(e){t.classList.add(e),r.delete(e)}),r.forEach(function(e){t.classList.remove(e)})}function ne(e){return(ne="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var re=new WeakMap;function oe(e,t,n){if(null===n||"object"!==ne(n))throw TypeError("Style value must be an object in ".concat(u(t),":"),n);var r=re.get(t)||new Map,c=Object.keys(n).reduce(function(e,c){var i=o(c),u=n[c];return u||0===u?t.style.setProperty(i,u):t.style.removeProperty(i),e.set(i,u),r.delete(i),e},new Map);r.forEach(function(e,n){t.style[n]=""}),re.set(t,c)}function ce(e,t,n){if("on"===t.substr(0,2))return function(e){return function(t,n,r,o){if(o&&n.removeEventListener(e,Q.get(o),void 0!==o.options&&o.options),r){if("function"!=typeof r)throw Error("Event listener must be a function: ".concat(K(r)));Q.set(r,r.bind(null,t)),n.addEventListener(e,Q.get(r),void 0!==r.options&&r.options)}}}(t.substr(2));switch(e){case"class":return te;case"style":return oe;default:return function(r,o,c){if(n||o instanceof SVGElement||!(t in o))if(!1===c||null==c)o.removeAttribute(e);else{var i=!0===c?"":String(c);o.setAttribute(e,i)}else o[t]!==c&&(o[t]=c)}}}function ie(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=[],r=!0,o=!1,c=void 0;try{for(var i,u=e[Symbol.iterator]();!(r=(i=u.next()).done)&&(n.push(i.value),!t||n.length!==t);r=!0);}catch(e){o=!0,c=e}finally{try{r||null==u.return||u.return()}finally{if(o)throw c}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function ue(e){return(ue="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var ae=Date.now(),fe=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return"{{h-".concat(ae,"-").concat(e,"}}")},le=fe("(\\d+)"),se=new RegExp("^".concat(le,"$")),de=new RegExp(le,"g"),pe="--".concat(ae,"--"),ye=new RegExp(pe,"g"),ve=new WeakMap;var be="object"===ue(window.ShadyDOM)&&window.ShadyDOM.inUse?function(e){var t;return{get currentNode(){return t},nextNode:function(){return!!(t=void 0===t?e.childNodes[0]:t.childNodes.length?t.childNodes[0]:t.nextSibling?t.nextSibling:t.parentNode.nextSibling)}}}:function(e){return document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_TEXT,null,!1)},he=document.createElement("div");function me(e,t,n){var r=document.createElement("template"),o=[],c=function(e,t){var n=e.reduce(function(t,n,r){return 0===r?n:e.slice(r).join("").match(/\s*<\/\s*(table|tr|thead|tbody|tfoot|colgroup)>/)?"".concat(t,"\x3c!--").concat(fe(r-1),"--\x3e").concat(n):t+fe(r-1)+n},"");return t&&(n+="<style>\n".concat(t.join("\n/*------*/\n"),"\n</style>")),a?n.replace(/style\s*=\s*(["][^"]+["]|['][^']+[']|[^\s"'<>\/]+)/g,function(e){return"".concat(pe).concat(e)}):n}(e,n);if(t&&(c="<svg>".concat(c,"</svg>")),a?r.innerHTML=c:(he.innerHTML="<template>".concat(c,"</template>"),r.content.appendChild(he.children[0].content)),t){var u=r.content.firstChild;r.content.removeChild(u),Array.from(u.childNodes).forEach(function(e){return r.content.appendChild(e)})}!function(e){for(var t,n=document.createNodeIterator(e,NodeFilter.SHOW_COMMENT,null,!1);t=n.nextNode();)se.test(t.textContent)&&(t.parentNode.insertBefore(document.createTextNode(t.textContent),t),t.parentNode.removeChild(t))}(r.content);for(var f=be(r.content),l=0,s=function(){var n=f.currentNode;if(n.nodeType===Node.TEXT_NODE){var r=n.textContent;if(!r.match(se)){var c=r.match(de);if(c){var i=n;c.reduce(function(e,t){var n=ie(e.pop().split(t),2),r=n[0],o=n[1];return r&&e.push(r),e.push(t),o&&e.push(o),e},[r]).forEach(function(e,t){0===t?i.textContent=e:i=i.parentNode.insertBefore(document.createTextNode(e),i.nextSibling)})}}var u=n.textContent.match(se);u&&(a||(n.textContent=""),o[u[1]]=[l,J])}else n.nodeType===Node.ELEMENT_NODE&&Array.from(n.attributes).forEach(function(r){var c=r.value.trim(),i=a?r.name.replace(pe,""):r.name,u=c.match(se);if(u){var f=e[u[1]].replace(/\s*=\s*['"]*$/g,"").split(" ").pop();o[u[1]]=[l,ce(i,f,t)],n.removeAttribute(r.name)}else{var s=c.match(de);if(s){var d="attr__".concat(i);s.forEach(function(e,t){var n=ie(e.match(se),2)[1];o[n]=[l,function(n,r,o){var u=z.get(r,{});u[d]=(u[d]||c).replace(e,null==o?"":o),1!==s.length&&t+1!==s.length||(r.setAttribute(i,u[d]),u[d]=void 0)}]}),r.value="",a&&i!==r.name&&(n.removeAttribute(r.name),n.setAttribute(i,""))}}});l+=1};f.nextNode();)s();return function(e,t,n){var c=z.get(t,{type:"function"});if(r!==c.template){c.template&&I(t);var u=document.importNode(function(e,t){return t?i(function(n){var r=ve.get(e);r||(r=new Map,ve.set(e,r));var o=r.get(t);if(!o){(o=document.createElement("template")).content.appendChild(e.content.cloneNode(!0)),r.set(t,o);var c=o.content.querySelectorAll("style");Array.from(c).forEach(function(e){for(var t=e.childNodes.length+1,n=0;n<t;n+=1)e.parentNode.insertBefore(document.createTextNode(fe()),e)}),n.prepareTemplate(o,t.toLowerCase())}return o},e):e}(r,e.tagName).content,!0),f=be(u),l=o.slice(0),s=0,d=l.shift(),p=[];for(Object.assign(c,{template:r,markers:p});f.nextNode();){var y=f.currentNode;for(y.nodeType===Node.TEXT_NODE&&(se.test(y.textContent)?y.textContent="":a&&(y.textContent=y.textContent.replace(ye,"")));d&&d[0]===s;)p.push([y,d[1]]),d=l.shift();s+=1}var v=Array.from(u.childNodes);if(c.startNode=v[0],c.endNode=v[v.length-1],t.nodeType===Node.TEXT_NODE){var b=t;v.forEach(function(e){t.parentNode.insertBefore(e,b.nextSibling),b=e})}else t.appendChild(u)}c.markers.forEach(function(t,r){var o=ie(t,2),i=o[0],u=o[1];c.lastArgs&&c.lastArgs[r]===n[r]||u(e,i,n[r],c.lastArgs?c.lastArgs[r]:void 0)}),c.lastArgs=n}}var ge=new WeakMap;function we(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:200;return function(r,o){var c;t&&(c=setTimeout(function(){c=void 0,requestAnimationFrame(function(){t(r,o)})},n)),ge.set(o,e),e.then(function(t){c&&clearTimeout(c),ge.get(o)===e&&(t(r,o),ge.set(o,null))})}}var Se=fe(),Ee=new Map,Ne=new WeakMap,Oe={define:function(e){return F(e),this},key:function(e){return this.id=e,this},style:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Ne.set(this,t),this}};function je(e,t,n){return Object.assign(function r(o){var c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o,i=Ne.get(r),u="".concat(e.join(Se)).concat(i?i.join(Se):"").concat(n?"svg":""),a=Ee.get(u);a||(a=me(e,n,i),Ee.set(u,a)),a(o,c,t)},Oe)}function xe(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return je(e,n)}function ke(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return je(e,n,!0)}Object.assign(xe,{resolve:we}),Object.assign(ke,{resolve:we}),n.d(t,"define",function(){return F}),n.d(t,"property",function(){return d}),n.d(t,"parent",function(){return X}),n.d(t,"children",function(){return $}),n.d(t,"render",function(){return S}),n.d(t,"dispatch",function(){return c}),n.d(t,"html",function(){return xe}),n.d(t,"svg",function(){return ke})}])});
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.hybrids=t():e.hybrids=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){"use strict";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function c(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.dispatchEvent(new CustomEvent(t,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},o=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),o.forEach(function(t){r(e,t,n[t])})}return e}({bubbles:!1},n)))}function i(e,t){var n=window.ShadyCSS;return n&&!n.nativeShadow?e(n):t}function u(e){var t=String(e.tagName).toLowerCase();return"<".concat(t,">")}n.r(t);var a="ActiveXObject"in window;function f(e){return(f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var l=function(e){return e},s=function(e){if("object"!==f(e))throw TypeError("Assigned value must be an object: ".concat("undefined"==typeof v?"undefined":f(v)));return e&&Object.freeze(e)};function d(e,t){var n=f(e),r=l;switch(n){case"string":r=String;break;case"number":r=Number;break;case"boolean":r=Boolean;break;case"function":e=(r=e)();break;case"object":e&&Object.freeze(e),r=s}return{get:function(t){return arguments.length>1&&void 0!==arguments[1]?arguments[1]:e},set:function(e,t,n){return r(t,n)},connect:"object"!==n&&"undefined"!==n?function(n,r,c){if(n[r]===e){var i=o(r);if(n.hasAttribute(i)){var u=n.getAttribute(i);n[r]=""===u||u}}return t&&t(n,r,c)}:t}}function p(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function y(e){return(y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var b=new WeakMap,h=new WeakMap,m=1e3/60,g=[];function w(e){var t=e.composedPath()[0];t===e.currentTarget&&(g[0]||requestAnimationFrame(function(){return function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(n&&performance.now()-n>m)requestAnimationFrame(function(){return e(t)});else{var r=g[t],o=performance.now();if(r){if(b.has(r)){var c=b.get(r),u=h.get(r);try{var a=r[c];a!==u&&(h.set(r,a),a(),u||i(function(e){return e.styleElement(r)}))}catch(n){throw e(t+1,o),n}}e(t+1,o)}else i(function(e){return g.forEach(function(t){return e.styleSubtree(t)})}),g=[]}}()}),-1===g.indexOf(t)&&g.push(t))}function S(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("function"!=typeof e)throw TypeError("The first argument must be a function: ".concat(y(e)));var n=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){p(e,t,n[t])})}return e}({shadowRoot:!0},t);return{get:function(t){var r=e(t);return function(){return r(t,n.shadowRoot?t.shadowRoot:t)}},connect:function(e,t){if(b.has(e))throw Error("Render factory already used in '".concat(b.get(e),"' key"));if(n.shadowRoot&&!e.shadowRoot){var r={mode:"open"};"object"===y(n.shadowRoot)&&Object.assign(r,n.shadowRoot),e.attachShadow(r)}return e.addEventListener("@invalidate",w),b.set(e,t),function(){e.removeEventListener("@invalidate",w),b.delete(e)}}}}var E=new WeakMap;function N(e,t){var n=E.get(e);n||(n=new Map,E.set(e,n));var r=n.get(t);return r||(r={target:e,key:t,value:void 0,deps:new Set,state:1,checksum:0},n.set(t,r)),r}function O(e){var t=e.state,n=e.deps,r=t;return n.forEach(function(e){e.target[e.key],r+=e.state}),r}var j=null;function x(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function k(e,t){return!t||"object"!==P(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function T(e){var t="function"==typeof Map?new Map:void 0;return(T=function(e){if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;var n;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return A(e,arguments,C(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),M(r,e)})(e)}function A(e,t,n){return(A=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&M(o,n.prototype),o}).apply(null,arguments)}function M(e,t){return(M=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function C(e){return(C=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function P(e){return(P="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _(e){c(e,"@invalidate",{bubbles:!0,composed:!0})}var L=function(e,t){return t};function R(e,t){e.hybrids=t,e.connects=[],Object.keys(t).forEach(function(n){var r,o=t[n],c=P(o);r="function"===c?"render"===n?S(o):{get:o}:null!==o&&"object"===c&&("object"!==c||o.get||o.set||o.connect)?{get:o.get||L,set:o.set||!o.get&&L||void 0,connect:o.connect}:d(o),Object.defineProperty(e.prototype,n,{get:function(){return function(e,t,n){var r=N(e,t);if(j===r)throw j=null,Error("Circular '".concat(t,"' get invocation in '").concat(u(e),"'"));j&&j.deps.add(r);var o=j;if(j=r,r.checksum&&r.checksum===O(r))return j=o,r.value;r.deps.clear();try{var c=n(e,r.value);c!==r.value&&(r.state+=1,r.value=c),r.checksum=O(r),j=o}catch(e){throw j=null,e}return r.value}(this,n,r.get)},set:r.set&&function(e){var t=this;!function(e,t,n,r,o){if(j)throw j=null,Error("Try to set '".concat(t,"' of '").concat(u(e),"' in get call"));var c=N(e,t),i=n(e,r,c.value);i!==c.value&&(c.state+=1,c.value=i,o())}(this,n,r.set,e,function(){return _(t)})},enumerable:!0,configurable:!1}),r.connect&&e.connects.push(function(e){return r.connect(e,n,function(){(!(arguments.length>0&&void 0!==arguments[0])||arguments[0])&&function(e,t,n){if(j)throw j=null,Error("Try to invalidate '".concat(t,"' in '").concat(u(e),"' get call"));var r=N(e,t);r.checksum=0,n&&(r.value=void 0)}(e,n),_(e)})})})}var W=new WeakMap;function D(e,t){var n=P(t);if("object"!==n&&"function"!==n)throw TypeError("Second argument must be an object or a function: ".concat(n));var r=window.customElements.get(e);if("function"===n)return r!==t?window.customElements.define(e,t):r;if(r){if(r.hybrids===t)return r;throw Error("Element '".concat(e,"' already defined"))}var o=function(t){function n(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),k(this,C(n).apply(this,arguments))}var r,o,c;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&M(e,t)}(n,T(HTMLElement)),r=n,c=[{key:"name",get:function(){return e}}],(o=[{key:"connectedCallback",value:function(){var e=this,t=this.constructor.connects.reduce(function(t,n){var r=n(e);return r&&t.add(r),t},new Set);W.set(this,t),_(this)}},{key:"disconnectedCallback",value:function(){W.get(this).forEach(function(e){return e()})}}])&&x(r.prototype,o),c&&x(r,c),n}();return R(o,t),customElements.define(e,o),o}function B(e){return Object.keys(e).reduce(function(t,n){var r=o(n.replace(/((?!([A-Z]{2}|^))[A-Z])/g,"-$1"));return t[n]=D(r,e[n]),t},{})}function F(){return"object"===P(arguments.length<=0?void 0:arguments[0])?B(arguments.length<=0?void 0:arguments[0]):D.apply(void 0,arguments)}var H=new WeakMap;function X(e){var t="function"==typeof e?e:function(t){return t===e};return{get:function(e){return function(e,t){for(var n=e.parentElement||e.parentNode.host;n;){var r=n.constructor.hybrids;if(r&&t(r))return n;n=n.parentElement||n.parentNode&&n.parentNode.host}return n||null}(e,t)},connect:function(e,t,n){var r=e[t];if(r){var o=H.get(r);return o||(o=new Set,H.set(r,o)),o.add(n),function(){o.delete(n),n()}}return!1}}}function $(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{deep:!1,nested:!1},n="function"==typeof e?e:function(t){return t===e};return{get:function(e){return function e(t,n,r){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];return Array.from(t.children).forEach(function(t){var c=t.constructor.hybrids;c&&n(c)?(o.push(t),r.deep&&r.nested&&e(t,n,r,o)):r.deep&&e(t,n,r,o)}),o}(e,n,t)},connect:function(e,n,r){var o=new MutationObserver(r),c=new Set,i=function(t){var o=t.target;c.size||Promise.resolve().then(function(){for(var t=e[n],o=0;o<t.length;o+=1)if(c.has(t[o])){r(!1);break}c.clear()}),c.add(o)};return o.observe(e,{childList:!0,subtree:!!t.deep}),e.addEventListener("@invalidate",i),function(){o.disconnect(),e.removeEventListener("@invalidate",i)}}}}document.addEventListener("@invalidate",function(e){var t=H.get(e.composedPath()[0]);t&&t.forEach(function(e){return e()})});var q=new WeakMap,z={get:function(e,t){return q.has(e)?q.get(e):(void 0!==t&&q.set(e,t),t)},set:function(e,t){return q.set(e,t),t}};function Z(e){for(var t;e&&(t=z.get(e))&&t.endNode;)e=t.endNode;return e}function I(e){var t=z.get(e),n=t.startNode;if(n)for(var r=n,o=Z(t.endNode).nextSibling;r;){var c=r.nextSibling;r.parentNode.removeChild(r),r=c!==o&&c}}var G=new WeakMap;function U(e,t,n){var r=G.get(t),o=n.map(function(e,t){return{id:Object.prototype.hasOwnProperty.call(e,"id")?e.id:t,value:e,placeholder:null,available:!0}});if(G.set(t,o),r){var c=new Set;o.forEach(function(e){return c.add(e.id)}),r=r.filter(function(e){return!!c.has(e.id)||(I(e.placeholder),e.placeholder.parentNode.removeChild(e.placeholder),!1)})}var i=t,u=n.length-1,a=z.get(t);o.forEach(function(t,n){var o,c=r&&r.find(function(e){return e.available&&e.id===t.id});c?(c.available=!1,(o=c.placeholder).previousSibling!==i&&function(e,t){var n=z.get(e),r=n.startNode,o=Z(n.endNode);t.parentNode.insertBefore(e,t.nextSibling);for(var c=e,i=r;i;){var u=i.nextSibling;c.parentNode.insertBefore(i,c.nextSibling),c=i,i=u!==o.nextSibling&&u}}(o,i),c.value!==t.value&&J(e,o,t.value)):(o=document.createTextNode(""),i.parentNode.insertBefore(o,i.nextSibling),J(e,o,t.value)),i=Z(z.get(o).endNode||o),0===n&&(a.startNode=o),n===u&&(a.endNode=i),t.placeholder=o}),r&&r.forEach(function(e){e.available&&(I(e.placeholder),e.placeholder.parentNode.removeChild(e.placeholder))})}function V(e){return(V="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function J(e,t,n){var r=Array.isArray(n)?"array":V(n),o=z.get(t,{});switch(o.type!==r&&(I(t),o=z.set(t,{type:r}),""!==t.textContent&&(t.textContent="")),r){case"function":n(e,t);break;case"array":U(e,t,n);break;default:t.textContent="number"===r||n?n:""}}function K(e){return(K="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var Q=new WeakMap;function Y(e){return(Y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var ee=new WeakMap;function te(e,t,n){var r=ee.get(t)||new Set,o=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Set;return Array.isArray(e)?e.forEach(function(e){return t.add(e)}):null!==e&&"object"===Y(e)?Object.keys(e).forEach(function(n){return e[n]&&t.add(n)}):t.add(e),t}(n);ee.set(t,o),o.forEach(function(e){t.classList.add(e),r.delete(e)}),r.forEach(function(e){t.classList.remove(e)})}function ne(e){return(ne="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var re=new WeakMap;function oe(e,t,n){if(null===n||"object"!==ne(n))throw TypeError("Style value must be an object in ".concat(u(t),":"),n);var r=re.get(t)||new Map,c=Object.keys(n).reduce(function(e,c){var i=o(c),u=n[c];return u||0===u?t.style.setProperty(i,u):t.style.removeProperty(i),e.set(i,u),r.delete(i),e},new Map);r.forEach(function(e,n){t.style[n]=""}),re.set(t,c)}function ce(e,t,n){if("on"===t.substr(0,2))return function(e){return function(t,n,r,o){if(o&&n.removeEventListener(e,Q.get(o),void 0!==o.options&&o.options),r){if("function"!=typeof r)throw Error("Event listener must be a function: ".concat(K(r)));Q.set(r,r.bind(null,t)),n.addEventListener(e,Q.get(r),void 0!==r.options&&r.options)}}}(t.substr(2));switch(e){case"class":return te;case"style":return oe;default:return function(r,o,c){if(n||o instanceof SVGElement||!(t in o))if(!1===c||null==c)o.removeAttribute(e);else{var i=!0===c?"":String(c);o.setAttribute(e,i)}else o[t]!==c&&(o[t]=c)}}}function ie(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=[],r=!0,o=!1,c=void 0;try{for(var i,u=e[Symbol.iterator]();!(r=(i=u.next()).done)&&(n.push(i.value),!t||n.length!==t);r=!0);}catch(e){o=!0,c=e}finally{try{r||null==u.return||u.return()}finally{if(o)throw c}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function ue(e){return(ue="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var ae=Date.now(),fe=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return"{{h-".concat(ae,"-").concat(e,"}}")},le=fe("(\\d+)"),se=new RegExp("^".concat(le,"$")),de=new RegExp(le,"g"),pe="--".concat(ae,"--"),ye=new RegExp(pe,"g"),ve=new WeakMap;var be="object"===ue(window.ShadyDOM)&&window.ShadyDOM.inUse?function(e){var t;return{get currentNode(){return t},nextNode:function(){return!!(t=void 0===t?e.childNodes[0]:t.childNodes.length?t.childNodes[0]:t.nextSibling?t.nextSibling:t.parentNode.nextSibling)}}}:function(e){return document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_TEXT,null,!1)},he=document.createElement("div");function me(e,t,n){var r=document.createElement("template"),o=[],c=function(e,t){var n=e.reduce(function(t,n,r){return 0===r?n:e.slice(r).join("").match(/^\s*<\/\s*(table|tr|thead|tbody|tfoot|colgroup)>/)?"".concat(t,"\x3c!--").concat(fe(r-1),"--\x3e").concat(n):t+fe(r-1)+n},"");return t&&(n+="<style>\n".concat(t.join("\n/*------*/\n"),"\n</style>")),a?n.replace(/style\s*=\s*(["][^"]+["]|['][^']+[']|[^\s"'<>\/]+)/g,function(e){return"".concat(pe).concat(e)}):n}(e,n);if(t&&(c="<svg>".concat(c,"</svg>")),a?r.innerHTML=c:(he.innerHTML="<template>".concat(c,"</template>"),r.content.appendChild(he.children[0].content)),t){var u=r.content.firstChild;r.content.removeChild(u),Array.from(u.childNodes).forEach(function(e){return r.content.appendChild(e)})}!function(e){for(var t,n=document.createNodeIterator(e,NodeFilter.SHOW_COMMENT,null,!1);t=n.nextNode();)se.test(t.textContent)&&(t.parentNode.insertBefore(document.createTextNode(t.textContent),t),t.parentNode.removeChild(t))}(r.content);for(var f=be(r.content),l=0,s=function(){var n=f.currentNode;if(n.nodeType===Node.TEXT_NODE){var r=n.textContent;if(!r.match(se)){var c=r.match(de);if(c){var i=n;c.reduce(function(e,t){var n=ie(e.pop().split(t),2),r=n[0],o=n[1];return r&&e.push(r),e.push(t),o&&e.push(o),e},[r]).forEach(function(e,t){0===t?i.textContent=e:i=i.parentNode.insertBefore(document.createTextNode(e),i.nextSibling)})}}var u=n.textContent.match(se);u&&(a||(n.textContent=""),o[u[1]]=[l,J])}else n.nodeType===Node.ELEMENT_NODE&&Array.from(n.attributes).forEach(function(r){var c=r.value.trim(),i=a?r.name.replace(pe,""):r.name,u=c.match(se);if(u){var f=e[u[1]].replace(/\s*=\s*['"]*$/g,"").split(" ").pop();o[u[1]]=[l,ce(i,f,t)],n.removeAttribute(r.name)}else{var s=c.match(de);if(s){var d="attr__".concat(i);s.forEach(function(e,t){var n=ie(e.match(se),2)[1];o[n]=[l,function(n,r,o){var u=z.get(r,{});u[d]=(u[d]||c).replace(e,null==o?"":o),1!==s.length&&t+1!==s.length||(r.setAttribute(i,u[d]),u[d]=void 0)}]}),r.value="",a&&i!==r.name&&(n.removeAttribute(r.name),n.setAttribute(i,""))}}});l+=1};f.nextNode();)s();return function(e,t,n){var c=z.get(t,{type:"function"});if(r!==c.template){c.template&&I(t);var u=document.importNode(function(e,t){return t?i(function(n){var r=ve.get(e);r||(r=new Map,ve.set(e,r));var o=r.get(t);if(!o){(o=document.createElement("template")).content.appendChild(e.content.cloneNode(!0)),r.set(t,o);var c=o.content.querySelectorAll("style");Array.from(c).forEach(function(e){for(var t=e.childNodes.length+1,n=0;n<t;n+=1)e.parentNode.insertBefore(document.createTextNode(fe()),e)}),n.prepareTemplate(o,t.toLowerCase())}return o},e):e}(r,e.tagName).content,!0),f=be(u),l=o.slice(0),s=0,d=l.shift(),p=[];for(Object.assign(c,{template:r,markers:p});f.nextNode();){var y=f.currentNode;for(y.nodeType===Node.TEXT_NODE&&(se.test(y.textContent)?y.textContent="":a&&(y.textContent=y.textContent.replace(ye,"")));d&&d[0]===s;)p.push([y,d[1]]),d=l.shift();s+=1}var v=Array.from(u.childNodes);if(c.startNode=v[0],c.endNode=v[v.length-1],t.nodeType===Node.TEXT_NODE){var b=t;v.forEach(function(e){t.parentNode.insertBefore(e,b.nextSibling),b=e})}else t.appendChild(u)}c.markers.forEach(function(t,r){var o=ie(t,2),i=o[0],u=o[1];c.lastArgs&&c.lastArgs[r]===n[r]||u(e,i,n[r],c.lastArgs?c.lastArgs[r]:void 0)}),c.lastArgs=n}}var ge=new WeakMap;function we(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:200;return function(r,o){var c;t&&(c=setTimeout(function(){c=void 0,requestAnimationFrame(function(){t(r,o)})},n)),ge.set(o,e),e.then(function(t){c&&clearTimeout(c),ge.get(o)===e&&(t(r,o),ge.set(o,null))})}}var Se=fe(),Ee=new Map,Ne=new WeakMap,Oe={define:function(e){return F(e),this},key:function(e){return this.id=e,this},style:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Ne.set(this,t),this}};function je(e,t,n){return Object.assign(function r(o){var c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o,i=Ne.get(r),u="".concat(e.join(Se)).concat(i?i.join(Se):"").concat(n?"svg":""),a=Ee.get(u);a||(a=me(e,n,i),Ee.set(u,a)),a(o,c,t)},Oe)}function xe(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return je(e,n)}function ke(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return je(e,n,!0)}Object.assign(xe,{resolve:we}),Object.assign(ke,{resolve:we}),n.d(t,"define",function(){return F}),n.d(t,"property",function(){return d}),n.d(t,"parent",function(){return X}),n.d(t,"children",function(){return $}),n.d(t,"render",function(){return S}),n.d(t,"dispatch",function(){return c}),n.d(t,"html",function(){return xe}),n.d(t,"svg",function(){return ke})}])});
//# sourceMappingURL=hybrids.js.map

@@ -38,10 +38,26 @@ # Render

value: 1,
render: ({ value }) => html`
<div>${value}</div>
`,
render: ({ value }) => html`<div>${value}</div>`,
};
```
The factory uses Shadow DOM, which is created synchronously in `connect` callback. It can be disabled in the `options` object. Then, `target` argument of update function is a `host`. However, `options` object can be passed only with explicit definition using `render` factory function.
### Shadow DOM
The factory by default uses [Shadow DOM](https://developer.mozilla.org/docs/Web/Web_Components/Using_shadow_DOM) as a `target`, which is created synchronously in `connect` callback. It is expected behavior, so usually you can omit `options` object and use [translation](../core-concepts/translation.md) rule for the render factory.
Although, If your element does not require [style encapsulation](https://developers.google.com/web/fundamentals/web-components/shadowdom#styling) and [children distribution](https://developers.google.com/web/fundamentals/web-components/shadowdom#composition_slot) (`<slot>` element can be used only inside of the `shadowRoot`) you can disable Shadow DOM in the `options` object. Then, `target` argument of the update function become a `host`. In the result, your template will replace children content of the custom element (in Light DOM).
Keep in mind, that the `options` can be passed only with `render(fn, options)` factory function called explicitly:
```javascript
import { html, render } from 'hybrids';
const MyElement = {
value: 1,
render: render(
({ value }) => html`<div>${value}</div>`,
{ shadowRoot: false },
),
};
```
## Update Mechanism

@@ -62,2 +78,60 @@

Property defined with `render` factory uses the same cache mechanism like other properties. The update process calls `fn` only if related properties have changed.
Property defined with `render` factory uses the same cache mechanism like other properties. The update process calls `fn` only if related properties have changed.
## Unit Testing
Because of the asynchronous update mechanism with threshold, it might be tricky to test if custom element instance renders correctly. However, you can create your unit tests on the basis of the definition itself.
The render key is usually a function, which returns update function. It can be called synchronously with mocked host and arbitrary target element (for example `<div>` element):
```javascript
import { html } from 'hybrids';
const MyElement = {
value: 1,
render: ({ value }) => html`
<div>${value}</div>
`,
};
it('should render value "1"', () => {
const div = document.createElement('div');
const host = { value: 1 };
// "render" key is a function
const update = MyElement.render(host);
// Updates target element
update(host, div);
// Check results synchronously
expect(div.children[0].textContent).toBe('1');
});
```
If you use `render` factory explicitly, your template definition can be defined outside of the factory call:
```javascript
import { html, render } from 'hybrids';
// Take out template definition
const renderTemplate = ({ value }) => html`<div>${value}</div>`;
const MyElement = {
value: 1,
render: render(renderTemplate, { shadowRoot: false }),
};
it('should render value "1"', () => {
const div = document.createElement('div');
const host = { value: 1 };
const update = renderTemplate(host);
// Updates target element
update(host, div);
// Check results synchronously
expect(div.children[0].textContent).toBe('1');
});
```

@@ -49,6 +49,6 @@ # Factories

The hybrids uses factories to provide all the features required for building reach custom elements:
The hybrids uses factories to provide all the features required for building rich custom elements:
* create [properties](../built-in-factories/property.md) connected to the attribute value with type transform
* [render](../built-in-factories/render.md) DOM structure of the element
* connect [parent or children](../built-in-factories/parent-children.md) elements
* connect [parent or children](../built-in-factories/parent-children.md) elements

@@ -32,2 +32,15 @@ # Introduction

### Customized Built-in Elements
The concept decouples component definition from its corresponding class constructor. Property descriptors are independent - they can be easily shared between definitions, so they can't depend on the specific base class, like `HTMLAnchorElement`. The library always uses `HTMLElement` as a base class.
[Customized built-in elements](https://developer.mozilla.org/docs/Web/Web_Components/Using_custom_elements#Customized_built-in_elements) are not supported, and only [autonomous custom elements](https://developer.mozilla.org/docs/Web/Web_Components/Using_custom_elements#Autonomous_custom_elements) can be defined. However, you can easily create custom element containing built-in elements:
```javascript
const MyLink = {
href: '',
render: ({ href }) => html`<a href=${href}>...</a>`,
};
```
## Simplified Lifecycle

@@ -34,0 +47,0 @@

# Translation
You can always define properties using [property descriptor](descriptors.md) objects. However, the translation concept provides a set of rules for translating the definition that does not match property descriptor structure. The value can be a primitive, a function, or even an object, but without get and set methods.
You can always define properties using [property descriptor](descriptors.md) objects. However, the translation concept provides a set of rules for translating the definition that does not match property descriptor structure. The value can be a primitive, a function, or even an object, but without get, set and connect methods.

@@ -5,0 +5,0 @@ The translation expands shorter syntax or applies built-in factories using passed values. The translation is done in the following order:

@@ -30,1 +30,3 @@ # Promises

```
👆 [Click and play with &lt;async-user&gt; custom element on ⚡StackBlitz](https://stackblitz.com/edit/hybrids-async-user?file=async-user.js)
# Styling
To style your custom element, you can create `<style>` element directly in the template, use a nested template with styles, or pass text content of thy CSS file.
To style your custom element, you can create `<style>` element directly in the template, use a nested template with styles, or pass text content of CSS file.

@@ -87,6 +87,7 @@ ## Style Element

Style helper works best with bundlers, which support importing text content of the CSS files (for [Webpack](https://github.com/webpack/webpack) use [css-loader](https://github.com/webpack-contrib/css-loader) without [style-loader](https://github.com/webpack-contrib/style-loader)):
Style helper works the best with bundlers, which support importing text content of the CSS files (for [webpack](https://github.com/webpack/webpack), use [raw-loader](https://github.com/webpack-contrib/raw-loader).
```javascript
import styles from './MyElement.css'; // `styles` should contain text content of CSS file
// `styles` should contain text content of CSS file
import styles from './MyElement.css';

@@ -99,1 +100,54 @@ const MyElement = {

```
### webpack Config
```js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
use: ['raw-loader']
}
]
}
}
```
## Preprocessors (PostCSS, Sass, etc.)
If using external stylesheets (above), you can add a preprocessor such as [PostCSS](https://github.com/postcss/postcss) using a webpack config. You can alternately use `"sass-loader"` for Sass.
It’s important **not** to use `css-loader` or `style-loader` like you may be used to, as either will interfere with Hybrid’s ability to parse the stylesheet.
### Installation
```bash
npm install --save-dev raw-loader postcss postcss-loader postcss-preset-env
```
### webpack Config
```js
const postcssPresetEnv = require("postcss-preset-env"); // optional; for example (below)
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
use: [
'raw-loader',
{
loader: 'postcss-loader',
// This is optional; just showing an example of a plugin w/ options
options: {
plugins: () => [postcssPresetEnv({ 'nesting-rules': true })]
}
}
]
}
]
}
}
```

@@ -78,3 +78,3 @@ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }

if (parts.slice(index).join('').match(/\s*<\/\s*(table|tr|thead|tbody|tfoot|colgroup)>/)) {
if (parts.slice(index).join('').match(/^\s*<\/\s*(table|tr|thead|tbody|tfoot|colgroup)>/)) {
return "".concat(acc, "<!--").concat(getPlaceholder(index - 1), "-->").concat(part);

@@ -338,2 +338,2 @@ }

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZS9jb3JlLmpzIl0sIm5hbWVzIjpbInN0cmluZ2lmeUVsZW1lbnQiLCJzaGFkeUNTUyIsIklTX0lFIiwiZGF0YU1hcCIsInJlbW92ZVRlbXBsYXRlIiwicmVzb2x2ZVZhbHVlIiwicmVzb2x2ZVByb3BlcnR5IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiZSIsIlRJTUVTVEFNUCIsIkRhdGUiLCJub3ciLCJnZXRQbGFjZWhvbGRlciIsImlkIiwiUExBQ0VIT0xERVJfUkVHRVhQX1RFWFQiLCJQTEFDRUhPTERFUl9SRUdFWFBfRVFVQUwiLCJSZWdFeHAiLCJQTEFDRUhPTERFUl9SRUdFWFBfQUxMIiwiQVRUUl9QUkVGSVgiLCJBVFRSX1JFR0VYUCIsInByZXBhcmVkVGVtcGxhdGVzIiwiV2Vha01hcCIsImFwcGx5U2hhZHlDU1MiLCJ0ZW1wbGF0ZSIsInRhZ05hbWUiLCJzaGFkeSIsIm1hcCIsImdldCIsIk1hcCIsInNldCIsImNsb25lIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY29udGVudCIsImFwcGVuZENoaWxkIiwiY2xvbmVOb2RlIiwic3R5bGVzIiwicXVlcnlTZWxlY3RvckFsbCIsIkFycmF5IiwiZnJvbSIsImZvckVhY2giLCJzdHlsZSIsImNvdW50IiwiY2hpbGROb2RlcyIsImxlbmd0aCIsImkiLCJwYXJlbnROb2RlIiwiaW5zZXJ0QmVmb3JlIiwiY3JlYXRlVGV4dE5vZGUiLCJwcmVwYXJlVGVtcGxhdGUiLCJ0b0xvd2VyQ2FzZSIsImNyZWF0ZVNpZ25hdHVyZSIsInBhcnRzIiwic2lnbmF0dXJlIiwicmVkdWNlIiwiYWNjIiwicGFydCIsImluZGV4Iiwic2xpY2UiLCJqb2luIiwibWF0Y2giLCJyZXBsYWNlIiwiZ2V0UHJvcGVydHlOYW1lIiwic3RyaW5nIiwic3BsaXQiLCJwb3AiLCJyZXBsYWNlQ29tbWVudHMiLCJmcmFnbWVudCIsIml0ZXJhdG9yIiwiY3JlYXRlTm9kZUl0ZXJhdG9yIiwiTm9kZUZpbHRlciIsIlNIT1dfQ09NTUVOVCIsIm5vZGUiLCJuZXh0Tm9kZSIsInRlc3QiLCJ0ZXh0Q29udGVudCIsInJlbW92ZUNoaWxkIiwiY3JlYXRlSW50ZXJuYWxXYWxrZXIiLCJjb250ZXh0IiwiY3VycmVudE5vZGUiLCJ1bmRlZmluZWQiLCJuZXh0U2libGluZyIsImNyZWF0ZUV4dGVybmFsV2Fsa2VyIiwiY3JlYXRlVHJlZVdhbGtlciIsIlNIT1dfRUxFTUVOVCIsIlNIT1dfVEVYVCIsImNyZWF0ZVdhbGtlciIsIndpbmRvdyIsIlNoYWR5RE9NIiwiaW5Vc2UiLCJjb250YWluZXIiLCJjb21waWxlIiwicmF3UGFydHMiLCJpc1NWRyIsImlubmVySFRNTCIsImNoaWxkcmVuIiwic3ZnUm9vdCIsImZpcnN0Q2hpbGQiLCJjb21waWxlV2Fsa2VyIiwiY29tcGlsZUluZGV4Iiwibm9kZVR5cGUiLCJOb2RlIiwiVEVYVF9OT0RFIiwidGV4dCIsInJlc3VsdHMiLCJwbGFjZWhvbGRlciIsImJlZm9yZSIsIm5leHQiLCJwdXNoIiwiZXF1YWwiLCJFTEVNRU5UX05PREUiLCJhdHRyaWJ1dGVzIiwiYXR0ciIsInZhbHVlIiwidHJpbSIsIm5hbWUiLCJwcm9wZXJ0eU5hbWUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJwYXJ0aWFsTmFtZSIsImhvc3QiLCJ0YXJnZXQiLCJhdHRyVmFsdWUiLCJkYXRhIiwic2V0QXR0cmlidXRlIiwiYXJncyIsInR5cGUiLCJpbXBvcnROb2RlIiwicmVuZGVyV2Fsa2VyIiwiY2xvbmVkUGFydHMiLCJyZW5kZXJJbmRleCIsImN1cnJlbnRQYXJ0Iiwic2hpZnQiLCJtYXJrZXJzIiwiT2JqZWN0IiwiYXNzaWduIiwiaW5kZXhPZiIsImN1c3RvbUVsZW1lbnRzIiwiRXJyb3IiLCJjaGlsZExpc3QiLCJzdGFydE5vZGUiLCJlbmROb2RlIiwicHJldmlvdXNDaGlsZCIsImNoaWxkIiwiZm4iLCJsYXN0QXJncyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLFNBQVNBLGdCQUFULEVB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LENBQUNzQixRQUFMLEdBQWdCcEIsSUFBaEI7QUFDRCxHQWhFRDtBQWlFRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN0cmluZ2lmeUVsZW1lbnQsIHNoYWR5Q1NTLCBJU19JRSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IGRhdGFNYXAsIHJlbW92ZVRlbXBsYXRlIH0gZnJvbSAnLi91dGlscyc7XG5cbmltcG9ydCByZXNvbHZlVmFsdWUgZnJvbSAnLi9yZXNvbHZlcnMvdmFsdWUnO1xuaW1wb3J0IHJlc29sdmVQcm9wZXJ0eSBmcm9tICcuL3Jlc29sdmVycy9wcm9wZXJ0eSc7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG50cnkgeyBwcm9jZXNzLmVudi5OT0RFX0VOViB9IGNhdGNoKGUpIHsgdmFyIHByb2Nlc3MgPSB7IGVudjogeyBOT0RFX0VOVjogJ3Byb2R1Y3Rpb24nIH0gfTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbmNvbnN0IFRJTUVTVEFNUCA9IERhdGUubm93KCk7XG5cbmV4cG9ydCBjb25zdCBnZXRQbGFjZWhvbGRlciA9IChpZCA9IDApID0+IGB7e2gtJHtUSU1FU1RBTVB9LSR7aWR9fX1gO1xuXG5jb25zdCBQTEFDRUhPTERFUl9SRUdFWFBfVEVYVCA9IGdldFBsYWNlaG9sZGVyKCcoXFxcXGQrKScpO1xuY29uc3QgUExBQ0VIT0xERVJfUkVHRVhQX0VRVUFMID0gbmV3IFJlZ0V4cChgXiR7UExBQ0VIT0xERVJfUkVHRVhQX1RFWFR9JGApO1xuY29uc3QgUExBQ0VIT0xERVJfUkVHRVhQX0FMTCA9IG5ldyBSZWdFeHAoUExBQ0VIT0xERVJfUkVHRVhQX1RFWFQsICdnJyk7XG5cbmNvbnN0IEFUVFJfUFJFRklYID0gYC0tJHtUSU1FU1RBTVB9LS1gO1xuY29uc3QgQVRUUl9SRUdFWFAgPSBuZXcgUmVnRXhwKEFUVFJfUFJFRklYLCAnZycpO1xuXG5jb25zdCBwcmVwYXJlZFRlbXBsYXRlcyA9IG5ldyBXZWFrTWFwKCk7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBhcHBseVNoYWR5Q1NTKHRlbXBsYXRlLCB0YWdOYW1lKSB7XG4gIGlmICghdGFnTmFtZSkgcmV0dXJuIHRlbXBsYXRlO1xuXG4gIHJldHVybiBzaGFkeUNTUygoc2hhZHkpID0+IHtcbiAgICBsZXQgbWFwID0gcHJlcGFyZWRUZW1wbGF0ZXMuZ2V0KHRlbXBsYXRlKTtcbiAgICBpZiAoIW1hcCkge1xuICAgICAgbWFwID0gbmV3IE1hcCgpO1xuICAgICAgcHJlcGFyZWRUZW1wbGF0ZXMuc2V0KHRlbXBsYXRlLCBtYXApO1xuICAgIH1cblxuICAgIGxldCBjbG9uZSA9IG1hcC5nZXQodGFnTmFtZSk7XG5cbiAgICBpZiAoIWNsb25lKSB7XG4gICAgICBjbG9uZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gICAgICBjbG9uZS5jb250ZW50LmFwcGVuZENoaWxkKHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpKTtcblxuICAgICAgbWFwLnNldCh0YWdOYW1lLCBjbG9uZSk7XG5cbiAgICAgIGNvbnN0IHN0eWxlcyA9IGNsb25lLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgnc3R5bGUnKTtcblxuICAgICAgQXJyYXkuZnJvbShzdHlsZXMpLmZvckVhY2goKHN0eWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gc3R5bGUuY2hpbGROb2Rlcy5sZW5ndGggKyAxO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpICs9IDEpIHtcbiAgICAgICAgICBzdHlsZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnZXRQbGFjZWhvbGRlcigpKSwgc3R5bGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgc2hhZHkucHJlcGFyZVRlbXBsYXRlKGNsb25lLCB0YWdOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgICByZXR1cm4gY2xvbmU7XG4gIH0sIHRlbXBsYXRlKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU2lnbmF0dXJlKHBhcnRzLCBzdHlsZXMpIHtcbiAgbGV0IHNpZ25hdHVyZSA9IHBhcnRzLnJlZHVjZSgoYWNjLCBwYXJ0LCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgfVxuICAgIGlmIChwYXJ0cy5zbGljZShpbmRleCkuam9pbignJykubWF0Y2goL1xccyo8XFwvXFxzKih0YWJsZXx0cnx0aGVhZHx0Ym9keXx0Zm9vdHxjb2xncm91cCk+LykpIHtcbiAgICAgIHJldHVybiBgJHthY2N9PCEtLSR7Z2V0UGxhY2Vob2xkZXIoaW5kZXggLSAxKX0tLT4ke3BhcnR9YDtcbiAgICB9XG4gICAgcmV0dXJuIGFjYyArIGdldFBsYWNlaG9sZGVyKGluZGV4IC0gMSkgKyBwYXJ0O1xuICB9LCAnJyk7XG5cbiAgaWYgKHN0eWxlcykge1xuICAgIHNpZ25hdHVyZSArPSBgPHN0eWxlPlxcbiR7c3R5bGVzLmpvaW4oJ1xcbi8qLS0tLS0tKi9cXG4nKX1cXG48L3N0eWxlPmA7XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKElTX0lFKSB7XG4gICAgcmV0dXJuIHNpZ25hdHVyZS5yZXBsYWNlKFxuICAgICAgL3N0eWxlXFxzKj1cXHMqKFtcIl1bXlwiXStbXCJdfFsnXVteJ10rWyddfFteXFxzXCInPD4vXSspL2csXG4gICAgICBtYXRjaCA9PiBgJHtBVFRSX1BSRUZJWH0ke21hdGNofWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmZ1bmN0aW9uIGdldFByb3BlcnR5TmFtZShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXHMqPVxccypbJ1wiXSokL2csICcnKS5zcGxpdCgnICcpLnBvcCgpO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlQ29tbWVudHMoZnJhZ21lbnQpIHtcbiAgY29uc3QgaXRlcmF0b3IgPSBkb2N1bWVudC5jcmVhdGVOb2RlSXRlcmF0b3IoZnJhZ21lbnQsIE5vZGVGaWx0ZXIuU0hPV19DT01NRU5ULCBudWxsLCBmYWxzZSk7XG4gIGxldCBub2RlO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uZC1hc3NpZ25cbiAgd2hpbGUgKG5vZGUgPSBpdGVyYXRvci5uZXh0Tm9kZSgpKSB7XG4gICAgaWYgKFBMQUNFSE9MREVSX1JFR0VYUF9FUVVBTC50ZXN0KG5vZGUudGV4dENvbnRlbnQpKSB7XG4gICAgICBub2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5vZGUudGV4dENvbnRlbnQpLCBub2RlKTtcbiAgICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUludGVybmFsV2Fsa2VyKGNvbnRleHQpIHtcbiAgbGV0IG5vZGU7XG5cbiAgcmV0dXJuIHtcbiAgICBnZXQgY3VycmVudE5vZGUoKSB7IHJldHVybiBub2RlOyB9LFxuICAgIG5leHROb2RlKCkge1xuICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBub2RlID0gY29udGV4dC5jaGlsZE5vZGVzWzBdO1xuICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkTm9kZXNbMF07XG4gICAgICB9IGVsc2UgaWYgKG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlLm5leHRTaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gISFub2RlO1xuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUV4dGVybmFsV2Fsa2VyKGNvbnRleHQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoXG4gICAgY29udGV4dCxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgIE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5UIHwgTm9kZUZpbHRlci5TSE9XX1RFWFQsXG4gICAgbnVsbCxcbiAgICBmYWxzZSxcbiAgKTtcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmNvbnN0IGNyZWF0ZVdhbGtlciA9IHR5cGVvZiB3aW5kb3cuU2hhZHlET00gPT09ICdvYmplY3QnICYmIHdpbmRvdy5TaGFkeURPTS5pblVzZSA/IGNyZWF0ZUludGVybmFsV2Fsa2VyIDogY3JlYXRlRXh0ZXJuYWxXYWxrZXI7XG5cbmNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGUocmF3UGFydHMsIGlzU1ZHLCBzdHlsZXMpIHtcbiAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpO1xuICBjb25zdCBwYXJ0cyA9IFtdO1xuXG4gIGxldCBzaWduYXR1cmUgPSBjcmVhdGVTaWduYXR1cmUocmF3UGFydHMsIHN0eWxlcyk7XG4gIGlmIChpc1NWRykgc2lnbmF0dXJlID0gYDxzdmc+JHtzaWduYXR1cmV9PC9zdmc+YDtcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKElTX0lFKSB7XG4gICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gc2lnbmF0dXJlO1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBgPHRlbXBsYXRlPiR7c2lnbmF0dXJlfTwvdGVtcGxhdGU+YDtcbiAgICB0ZW1wbGF0ZS5jb250ZW50LmFwcGVuZENoaWxkKGNvbnRhaW5lci5jaGlsZHJlblswXS5jb250ZW50KTtcbiAgfVxuXG4gIGlmIChpc1NWRykge1xuICAgIGNvbnN0IHN2Z1Jvb3QgPSB0ZW1wbGF0ZS5jb250ZW50LmZpcnN0Q2hpbGQ7XG4gICAgdGVtcGxhdGUuY29udGVudC5yZW1vdmVDaGlsZChzdmdSb290KTtcbiAgICBBcnJheS5mcm9tKHN2Z1Jvb3QuY2hpbGROb2RlcykuZm9yRWFjaChub2RlID0+IHRlbXBsYXRlLmNvbnRlbnQuYXBwZW5kQ2hpbGQobm9kZSkpO1xuICB9XG5cbiAgcmVwbGFjZUNvbW1lbnRzKHRlbXBsYXRlLmNvbnRlbnQpO1xuXG4gIGNvbnN0IGNvbXBpbGVXYWxrZXIgPSBjcmVhdGVXYWxrZXIodGVtcGxhdGUuY29udGVudCk7XG4gIGxldCBjb21waWxlSW5kZXggPSAwO1xuXG4gIHdoaWxlIChjb21waWxlV2Fsa2VyLm5leHROb2RlKCkpIHtcbiAgICBjb25zdCBub2RlID0gY29tcGlsZVdhbGtlci5jdXJyZW50Tm9kZTtcblxuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc3QgdGV4dCA9IG5vZGUudGV4dENvbnRlbnQ7XG5cbiAgICAgIGlmICghdGV4dC5tYXRjaChQTEFDRUhPTERFUl9SRUdFWFBfRVFVQUwpKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0ZXh0Lm1hdGNoKFBMQUNFSE9MREVSX1JFR0VYUF9BTEwpO1xuICAgICAgICBpZiAocmVzdWx0cykge1xuICAgICAgICAgIGxldCBjdXJyZW50Tm9kZSA9IG5vZGU7XG4gICAgICAgICAgcmVzdWx0c1xuICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCBwbGFjZWhvbGRlcikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBbYmVmb3JlLCBuZXh0XSA9IGFjYy5wb3AoKS5zcGxpdChwbGFjZWhvbGRlcik7XG4gICAgICAgICAgICAgIGlmIChiZWZvcmUpIGFjYy5wdXNoKGJlZm9yZSk7XG4gICAgICAgICAgICAgIGFjYy5wdXNoKHBsYWNlaG9sZGVyKTtcbiAgICAgICAgICAgICAgaWYgKG5leHQpIGFjYy5wdXNoKG5leHQpO1xuICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwgW3RleHRdKVxuICAgICAgICAgICAgLmZvckVhY2goKHBhcnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlLnRleHRDb250ZW50ID0gcGFydDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGVcbiAgICAgICAgICAgICAgICAgIC5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocGFydCksIGN1cnJlbnROb2RlLm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZXF1YWwgPSBub2RlLnRleHRDb250ZW50Lm1hdGNoKFBMQUNFSE9MREVSX1JFR0VYUF9FUVVBTCk7XG4gICAgICBpZiAoZXF1YWwpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKCFJU19JRSkgbm9kZS50ZXh0Q29udGVudCA9ICcnO1xuICAgICAgICBwYXJ0c1tlcXVhbFsxXV0gPSBbY29tcGlsZUluZGV4LCByZXNvbHZlVmFsdWVdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqLyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9uZWx5LWlmXG4gICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgQXJyYXkuZnJvbShub2RlLmF0dHJpYnV0ZXMpLmZvckVhY2goKGF0dHIpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF0dHIudmFsdWUudHJpbSgpO1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgY29uc3QgbmFtZSA9IElTX0lFID8gYXR0ci5uYW1lLnJlcGxhY2UoQVRUUl9QUkVGSVgsICcnKSA6IGF0dHIubmFtZTtcbiAgICAgICAgICBjb25zdCBlcXVhbCA9IHZhbHVlLm1hdGNoKFBMQUNFSE9MREVSX1JFR0VYUF9FUVVBTCk7XG4gICAgICAgICAgaWYgKGVxdWFsKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBnZXRQcm9wZXJ0eU5hbWUocmF3UGFydHNbZXF1YWxbMV1dKTtcbiAgICAgICAgICAgIHBhcnRzW2VxdWFsWzFdXSA9IFtjb21waWxlSW5kZXgsIHJlc29sdmVQcm9wZXJ0eShuYW1lLCBwcm9wZXJ0eU5hbWUsIGlzU1ZHKV07XG4gICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShhdHRyLm5hbWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHRzID0gdmFsdWUubWF0Y2goUExBQ0VIT0xERVJfUkVHRVhQX0FMTCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0cykge1xuICAgICAgICAgICAgICBjb25zdCBwYXJ0aWFsTmFtZSA9IGBhdHRyX18ke25hbWV9YDtcblxuICAgICAgICAgICAgICByZXN1bHRzLmZvckVhY2goKHBsYWNlaG9sZGVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IFssIGlkXSA9IHBsYWNlaG9sZGVyLm1hdGNoKFBMQUNFSE9MREVSX1JFR0VYUF9FUVVBTCk7XG4gICAgICAgICAgICAgICAgcGFydHNbaWRdID0gW2NvbXBpbGVJbmRleCwgKGhvc3QsIHRhcmdldCwgYXR0clZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gZGF0YU1hcC5nZXQodGFyZ2V0LCB7fSk7XG4gICAgICAgICAgICAgICAgICBkYXRhW3BhcnRpYWxOYW1lXSA9IChkYXRhW3BhcnRpYWxOYW1lXSB8fCB2YWx1ZSkucmVwbGFjZShwbGFjZWhvbGRlciwgYXR0clZhbHVlID09IG51bGwgPyAnJyA6IGF0dHJWYWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAgIGlmICgocmVzdWx0cy5sZW5ndGggPT09IDEpIHx8IChpbmRleCArIDEgPT09IHJlc3VsdHMubGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKG5hbWUsIGRhdGFbcGFydGlhbE5hbWVdKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVtwYXJ0aWFsTmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGF0dHIudmFsdWUgPSAnJztcblxuICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgICBpZiAoSVNfSUUgJiYgbmFtZSAhPT0gYXR0ci5uYW1lKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoYXR0ci5uYW1lKTtcbiAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShuYW1lLCAnJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBpbGVJbmRleCArPSAxO1xuICB9XG5cbiAgcmV0dXJuIChob3N0LCB0YXJnZXQsIGFyZ3MpID0+IHtcbiAgICBjb25zdCBkYXRhID0gZGF0YU1hcC5nZXQodGFyZ2V0LCB7IHR5cGU6ICdmdW5jdGlvbicgfSk7XG5cbiAgICBpZiAodGVtcGxhdGUgIT09IGRhdGEudGVtcGxhdGUpIHtcbiAgICAgIGlmIChkYXRhLnRlbXBsYXRlKSByZW1vdmVUZW1wbGF0ZSh0YXJnZXQpO1xuXG4gICAgICBjb25zdCBmcmFnbWVudCA9IGRvY3VtZW50LmltcG9ydE5vZGUoYXBwbHlTaGFkeUNTUyh0ZW1wbGF0ZSwgaG9zdC50YWdOYW1lKS5jb250ZW50LCB0cnVlKTtcblxuICAgICAgY29uc3QgcmVuZGVyV2Fsa2VyID0gY3JlYXRlV2Fsa2VyKGZyYWdtZW50KTtcbiAgICAgIGNvbnN0IGNsb25lZFBhcnRzID0gcGFydHMuc2xpY2UoMCk7XG5cbiAgICAgIGxldCByZW5kZXJJbmRleCA9IDA7XG4gICAgICBsZXQgY3VycmVudFBhcnQgPSBjbG9uZWRQYXJ0cy5zaGlmdCgpO1xuXG4gICAgICBjb25zdCBtYXJrZXJzID0gW107XG5cbiAgICAgIE9iamVjdC5hc3NpZ24oZGF0YSwgeyB0ZW1wbGF0ZSwgbWFya2VycyB9KTtcblxuICAgICAgd2hpbGUgKHJlbmRlcldhbGtlci5uZXh0Tm9kZSgpKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSByZW5kZXJXYWxrZXIuY3VycmVudE5vZGU7XG5cbiAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICBpZiAoUExBQ0VIT0xERVJfUkVHRVhQX0VRVUFMLnRlc3Qobm9kZS50ZXh0Q29udGVudCkpIHtcbiAgICAgICAgICAgIG5vZGUudGV4dENvbnRlbnQgPSAnJztcbiAgICAgICAgICB9IGVsc2UgaWYgKElTX0lFKSB7XG4gICAgICAgICAgICBub2RlLnRleHRDb250ZW50ID0gbm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKEFUVFJfUkVHRVhQLCAnJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgbm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBpZiAobm9kZS50YWdOYW1lLmluZGV4T2YoJy0nKSA+IC0xICYmICFjdXN0b21FbGVtZW50cy5nZXQobm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgTWlzc2luZyAnJHtzdHJpbmdpZnlFbGVtZW50KG5vZGUpfScgZWxlbWVudCBkZWZpbml0aW9uIGluICcke3N0cmluZ2lmeUVsZW1lbnQoaG9zdCl9J2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChjdXJyZW50UGFydCAmJiBjdXJyZW50UGFydFswXSA9PT0gcmVuZGVySW5kZXgpIHtcbiAgICAgICAgICBtYXJrZXJzLnB1c2goW25vZGUsIGN1cnJlbnRQYXJ0WzFdXSk7XG4gICAgICAgICAgY3VycmVudFBhcnQgPSBjbG9uZWRQYXJ0cy5zaGlmdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVySW5kZXggKz0gMTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hpbGRMaXN0ID0gQXJyYXkuZnJvbShmcmFnbWVudC5jaGlsZE5vZGVzKTtcblxuICAgICAgZGF0YS5zdGFydE5vZGUgPSBjaGlsZExpc3RbMF07XG4gICAgICBkYXRhLmVuZE5vZGUgPSBjaGlsZExpc3RbY2hpbGRMaXN0Lmxlbmd0aCAtIDFdO1xuXG4gICAgICBpZiAodGFyZ2V0Lm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICBsZXQgcHJldmlvdXNDaGlsZCA9IHRhcmdldDtcbiAgICAgICAgY2hpbGRMaXN0LmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAgICAgdGFyZ2V0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNoaWxkLCBwcmV2aW91c0NoaWxkLm5leHRTaWJsaW5nKTtcbiAgICAgICAgICBwcmV2aW91c0NoaWxkID0gY2hpbGQ7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0LmFwcGVuZENoaWxkKGZyYWdtZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkYXRhLm1hcmtlcnMuZm9yRWFjaCgoW25vZGUsIGZuXSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChkYXRhLmxhc3RBcmdzICYmIGRhdGEubGFzdEFyZ3NbaW5kZXhdID09PSBhcmdzW2luZGV4XSkgcmV0dXJuO1xuICAgICAgZm4oaG9zdCwgbm9kZSwgYXJnc1tpbmRleF0sIGRhdGEubGFzdEFyZ3MgPyBkYXRhLmxhc3RBcmdzW2luZGV4XSA6IHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICBkYXRhLmxhc3RBcmdzID0gYXJncztcbiAgfTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZS9jb3JlLmpzIl0sIm5hbWVzIjpbInN0cmluZ2lmeUVsZW1lbnQiLCJzaGFkeUNTUyIsIklTX0lFIiwiZGF0YU1hcCIsInJlbW92ZVRlbXBsYXRlIiwicmVzb2x2ZVZhbHVlIiwicmVzb2x2ZVByb3BlcnR5IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiZSIsIlRJTUVTVEFNUCIsIkRhdGUiLCJub3ciLCJnZXRQbGFjZWhvbGRlciIsImlkIiwiUExBQ0VIT0xERVJfUkVHRVhQX1RFWFQiLCJQTEFDRUhPTERFUl9SRUdFWFBfRVFVQUwiLCJSZWdFeHAiLCJQTEFDRUhPTERFUl9SRUdFWFBfQUxMIiwiQVRUUl9QUkVGSVgiLCJBVFRSX1JFR0VYUCIsInByZXBhcmVkVGVtcGxhdGVzIiwiV2Vha01hcCIsImFwcGx5U2hhZHlDU1MiLCJ0ZW1wbGF0ZSIsInRhZ05hbWUiLCJzaGFkeSIsIm1hcCIsImdldCIsIk1hcCIsInNldCIsImNsb25lIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY29udGVudCIsImFwcGVuZENoaWxkIiwiY2xvbmVOb2RlIiwic3R5bGVzIiwicXVlcnlTZWxlY3RvckFsbCIsIkFycmF5IiwiZnJvbSIsImZvckVhY2giLCJzdHlsZSIsImNvdW50IiwiY2hpbGROb2RlcyIsImxlbmd0aCIsImkiLCJwYXJlbnROb2RlIiwiaW5zZXJ0QmVmb3JlIiwiY3JlYXRlVGV4dE5vZGUiLCJwcmVwYXJlVGVtcGxhdGUiLCJ0b0xvd2VyQ2FzZSIsImNyZWF0ZVNpZ25hdHVyZSIsInBhcnRzIiwic2lnbmF0dXJlIiwicmVkdWNlIiwiYWNjIiwicGFydCIsImluZGV4Iiwic2xpY2UiLCJqb2luIiwibWF0Y2giLCJyZXBsYWNlIiwiZ2V0UHJvcGVydHlOYW1lIiwic3RyaW5nIiwic3BsaXQiLCJwb3AiLCJyZXBsYWNlQ29tbWVudHMiLCJmcmFnbWVudCIsIml0ZXJhdG9yIiwiY3JlYXRlTm9kZUl0ZXJhdG9yIiwiTm9kZUZpbHRlciIsIlNIT1dfQ09NTUVOVCIsIm5vZGUiLCJuZXh0Tm9kZSIsInRlc3QiLCJ0ZXh0Q29udGVudCIsInJlbW92ZUNoaWxkIiwiY3JlYXRlSW50ZXJuYWxXYWxrZXIiLCJjb250ZXh0IiwiY3VycmVudE5vZGUiLCJ1bmRlZmluZWQiLCJuZXh0U2libGluZyIsImNyZWF0ZUV4dGVybmFsV2Fsa2VyIiwiY3JlYXRlVHJlZVdhbGtlciIsIlNIT1dfRUxFTUVOVCIsIlNIT1dfVEVYVCIsImNyZWF0ZVdhbGtlciIsIndpbmRvdyIsIlNoYWR5RE9NIiwiaW5Vc2UiLCJjb250YWluZXIiLCJjb21waWxlIiwicmF3UGFydHMiLCJpc1NWRyIsImlubmVySFRNTCIsImNoaWxkcmVuIiwic3ZnUm9vdCIsImZpcnN0Q2hpbGQiLCJjb21waWxlV2Fsa2VyIiwiY29tcGlsZUluZGV4Iiwibm9kZVR5cGUiLCJOb2RlIiwiVEVYVF9OT0RFIiwidGV4dCIsInJlc3VsdHMiLCJwbGFjZWhvbGRlciIsImJlZm9yZSIsIm5leHQiLCJwdXNoIiwiZXF1YWwiLCJFTEVNRU5UX05PREUiLCJhdHRyaWJ1dGVzIiwiYXR0ciIsInZhbHVlIiwidHJpbSIsIm5hbWUiLCJwcm9wZXJ0eU5hbWUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJwYXJ0aWFsTmFtZSIsImhvc3QiLCJ0YXJnZXQiLCJhdHRyVmFsdWUiLCJkYXRhIiwic2V0QXR0cmlidXRlIiwiYXJncyIsInR5cGUiLCJpbXBvcnROb2RlIiwicmVuZGVyV2Fsa2VyIiwiY2xvbmVkUGFydHMiLCJyZW5kZXJJbmRleCIsImN1cnJlbnRQYXJ0Iiwic2hpZnQiLCJtYXJrZXJzIiwiT2JqZWN0IiwiYXNzaWduIiwiaW5kZXhPZiIsImN1c3RvbUVsZW1lbnRzIiwiRXJyb3IiLCJjaGlsZExpc3QiLCJzdGFydE5vZGUiLCJlbmROb2RlIiwicHJldmlvdXNDaGlsZCIsImNoaWxkIiwiZm4iLCJsYXN0QXJncyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLFNBQVNBLGdCQUFULEVB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LENBQUNzQixRQUFMLEdBQWdCcEIsSUFBaEI7QUFDRCxHQWhFRDtBQWlFRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN0cmluZ2lmeUVsZW1lbnQsIHNoYWR5Q1NTLCBJU19JRSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IGRhdGFNYXAsIHJlbW92ZVRlbXBsYXRlIH0gZnJvbSAnLi91dGlscyc7XG5cbmltcG9ydCByZXNvbHZlVmFsdWUgZnJvbSAnLi9yZXNvbHZlcnMvdmFsdWUnO1xuaW1wb3J0IHJlc29sdmVQcm9wZXJ0eSBmcm9tICcuL3Jlc29sdmVycy9wcm9wZXJ0eSc7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG50cnkgeyBwcm9jZXNzLmVudi5OT0RFX0VOViB9IGNhdGNoKGUpIHsgdmFyIHByb2Nlc3MgPSB7IGVudjogeyBOT0RFX0VOVjogJ3Byb2R1Y3Rpb24nIH0gfTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbmNvbnN0IFRJTUVTVEFNUCA9IERhdGUubm93KCk7XG5cbmV4cG9ydCBjb25zdCBnZXRQbGFjZWhvbGRlciA9IChpZCA9IDApID0+IGB7e2gtJHtUSU1FU1RBTVB9LSR7aWR9fX1gO1xuXG5jb25zdCBQTEFDRUhPTERFUl9SRUdFWFBfVEVYVCA9IGdldFBsYWNlaG9sZGVyKCcoXFxcXGQrKScpO1xuY29uc3QgUExBQ0VIT0xERVJfUkVHRVhQX0VRVUFMID0gbmV3IFJlZ0V4cChgXiR7UExBQ0VIT0xERVJfUkVHRVhQX1RFWFR9JGApO1xuY29uc3QgUExBQ0VIT0xERVJfUkVHRVhQX0FMTCA9IG5ldyBSZWdFeHAoUExBQ0VIT0xERVJfUkVHRVhQX1RFWFQsICdnJyk7XG5cbmNvbnN0IEFUVFJfUFJFRklYID0gYC0tJHtUSU1FU1RBTVB9LS1gO1xuY29uc3QgQVRUUl9SRUdFWFAgPSBuZXcgUmVnRXhwKEFUVFJfUFJFRklYLCAnZycpO1xuXG5jb25zdCBwcmVwYXJlZFRlbXBsYXRlcyA9IG5ldyBXZWFrTWFwKCk7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBhcHBseVNoYWR5Q1NTKHRlbXBsYXRlLCB0YWdOYW1lKSB7XG4gIGlmICghdGFnTmFtZSkgcmV0dXJuIHRlbXBsYXRlO1xuXG4gIHJldHVybiBzaGFkeUNTUygoc2hhZHkpID0+IHtcbiAgICBsZXQgbWFwID0gcHJlcGFyZWRUZW1wbGF0ZXMuZ2V0KHRlbXBsYXRlKTtcbiAgICBpZiAoIW1hcCkge1xuICAgICAgbWFwID0gbmV3IE1hcCgpO1xuICAgICAgcHJlcGFyZWRUZW1wbGF0ZXMuc2V0KHRlbXBsYXRlLCBtYXApO1xuICAgIH1cblxuICAgIGxldCBjbG9uZSA9IG1hcC5nZXQodGFnTmFtZSk7XG5cbiAgICBpZiAoIWNsb25lKSB7XG4gICAgICBjbG9uZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gICAgICBjbG9uZS5jb250ZW50LmFwcGVuZENoaWxkKHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpKTtcblxuICAgICAgbWFwLnNldCh0YWdOYW1lLCBjbG9uZSk7XG5cbiAgICAgIGNvbnN0IHN0eWxlcyA9IGNsb25lLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgnc3R5bGUnKTtcblxuICAgICAgQXJyYXkuZnJvbShzdHlsZXMpLmZvckVhY2goKHN0eWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gc3R5bGUuY2hpbGROb2Rlcy5sZW5ndGggKyAxO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpICs9IDEpIHtcbiAgICAgICAgICBzdHlsZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnZXRQbGFjZWhvbGRlcigpKSwgc3R5bGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgc2hhZHkucHJlcGFyZVRlbXBsYXRlKGNsb25lLCB0YWdOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgICByZXR1cm4gY2xvbmU7XG4gIH0sIHRlbXBsYXRlKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU2lnbmF0dXJlKHBhcnRzLCBzdHlsZXMpIHtcbiAgbGV0IHNpZ25hdHVyZSA9IHBhcnRzLnJlZHVjZSgoYWNjLCBwYXJ0LCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLnNsaWNlKGluZGV4KS5qb2luKCcnKS5tYXRjaCgvXlxccyo8XFwvXFxzKih0YWJsZXx0cnx0aGVhZHx0Ym9keXx0Zm9vdHxjb2xncm91cCk+LykpIHtcbiAgICAgIHJldHVybiBgJHthY2N9PCEtLSR7Z2V0UGxhY2Vob2xkZXIoaW5kZXggLSAxKX0tLT4ke3BhcnR9YDtcbiAgICB9XG4gICAgcmV0dXJuIGFjYyArIGdldFBsYWNlaG9sZGVyKGluZGV4IC0gMSkgKyBwYXJ0O1xuICB9LCAnJyk7XG5cbiAgaWYgKHN0eWxlcykge1xuICAgIHNpZ25hdHVyZSArPSBgPHN0eWxlPlxcbiR7c3R5bGVzLmpvaW4oJ1xcbi8qLS0tLS0tKi9cXG4nKX1cXG48L3N0eWxlPmA7XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKElTX0lFKSB7XG4gICAgcmV0dXJuIHNpZ25hdHVyZS5yZXBsYWNlKFxuICAgICAgL3N0eWxlXFxzKj1cXHMqKFtcIl1bXlwiXStbXCJdfFsnXVteJ10rWyddfFteXFxzXCInPD4vXSspL2csXG4gICAgICBtYXRjaCA9PiBgJHtBVFRSX1BSRUZJWH0ke21hdGNofWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmZ1bmN0aW9uIGdldFByb3BlcnR5TmFtZShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXHMqPVxccypbJ1wiXSokL2csICcnKS5zcGxpdCgnICcpLnBvcCgpO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlQ29tbWVudHMoZnJhZ21lbnQpIHtcbiAgY29uc3QgaXRlcmF0b3IgPSBkb2N1bWVudC5jcmVhdGVOb2RlSXRlcmF0b3IoZnJhZ21lbnQsIE5vZGVGaWx0ZXIuU0hPV19DT01NRU5ULCBudWxsLCBmYWxzZSk7XG4gIGxldCBub2RlO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uZC1hc3NpZ25cbiAgd2hpbGUgKG5vZGUgPSBpdGVyYXRvci5uZXh0Tm9kZSgpKSB7XG4gICAgaWYgKFBMQUNFSE9MREVSX1JFR0VYUF9FUVVBTC50ZXN0KG5vZGUudGV4dENvbnRlbnQpKSB7XG4gICAgICBub2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5vZGUudGV4dENvbnRlbnQpLCBub2RlKTtcbiAgICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUludGVybmFsV2Fsa2VyKGNvbnRleHQpIHtcbiAgbGV0IG5vZGU7XG5cbiAgcmV0dXJuIHtcbiAgICBnZXQgY3VycmVudE5vZGUoKSB7IHJldHVybiBub2RlOyB9LFxuICAgIG5leHROb2RlKCkge1xuICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBub2RlID0gY29udGV4dC5jaGlsZE5vZGVzWzBdO1xuICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkTm9kZXNbMF07XG4gICAgICB9IGVsc2UgaWYgKG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlLm5leHRTaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gISFub2RlO1xuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUV4dGVybmFsV2Fsa2VyKGNvbnRleHQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoXG4gICAgY29udGV4dCxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgIE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5UIHwgTm9kZUZpbHRlci5TSE9XX1RFWFQsXG4gICAgbnVsbCxcbiAgICBmYWxzZSxcbiAgKTtcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmNvbnN0IGNyZWF0ZVdhbGtlciA9IHR5cGVvZiB3aW5kb3cuU2hhZHlET00gPT09ICdvYmplY3QnICYmIHdpbmRvdy5TaGFkeURPTS5pblVzZSA/IGNyZWF0ZUludGVybmFsV2Fsa2VyIDogY3JlYXRlRXh0ZXJuYWxXYWxrZXI7XG5cbmNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGUocmF3UGFydHMsIGlzU1ZHLCBzdHlsZXMpIHtcbiAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpO1xuICBjb25zdCBwYXJ0cyA9IFtdO1xuXG4gIGxldCBzaWduYXR1cmUgPSBjcmVhdGVTaWduYXR1cmUocmF3UGFydHMsIHN0eWxlcyk7XG4gIGlmIChpc1NWRykgc2lnbmF0dXJlID0gYDxzdmc+JHtzaWduYXR1cmV9PC9zdmc+YDtcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKElTX0lFKSB7XG4gICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gc2lnbmF0dXJlO1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBgPHRlbXBsYXRlPiR7c2lnbmF0dXJlfTwvdGVtcGxhdGU+YDtcbiAgICB0ZW1wbGF0ZS5jb250ZW50LmFwcGVuZENoaWxkKGNvbnRhaW5lci5jaGlsZHJlblswXS5jb250ZW50KTtcbiAgfVxuXG4gIGlmIChpc1NWRykge1xuICAgIGNvbnN0IHN2Z1Jvb3QgPSB0ZW1wbGF0ZS5jb250ZW50LmZpcnN0Q2hpbGQ7XG4gICAgdGVtcGxhdGUuY29udGVudC5yZW1vdmVDaGlsZChzdmdSb290KTtcbiAgICBBcnJheS5mcm9tKHN2Z1Jvb3QuY2hpbGROb2RlcykuZm9yRWFjaChub2RlID0+IHRlbXBsYXRlLmNvbnRlbnQuYXBwZW5kQ2hpbGQobm9kZSkpO1xuICB9XG5cbiAgcmVwbGFjZUNvbW1lbnRzKHRlbXBsYXRlLmNvbnRlbnQpO1xuXG4gIGNvbnN0IGNvbXBpbGVXYWxrZXIgPSBjcmVhdGVXYWxrZXIodGVtcGxhdGUuY29udGVudCk7XG4gIGxldCBjb21waWxlSW5kZXggPSAwO1xuXG4gIHdoaWxlIChjb21waWxlV2Fsa2VyLm5leHROb2RlKCkpIHtcbiAgICBjb25zdCBub2RlID0gY29tcGlsZVdhbGtlci5jdXJyZW50Tm9kZTtcblxuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc3QgdGV4dCA9IG5vZGUudGV4dENvbnRlbnQ7XG5cbiAgICAgIGlmICghdGV4dC5tYXRjaChQTEFDRUhPTERFUl9SRUdFWFBfRVFVQUwpKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0ZXh0Lm1hdGNoKFBMQUNFSE9MREVSX1JFR0VYUF9BTEwpO1xuICAgICAgICBpZiAocmVzdWx0cykge1xuICAgICAgICAgIGxldCBjdXJyZW50Tm9kZSA9IG5vZGU7XG4gICAgICAgICAgcmVzdWx0c1xuICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCBwbGFjZWhvbGRlcikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBbYmVmb3JlLCBuZXh0XSA9IGFjYy5wb3AoKS5zcGxpdChwbGFjZWhvbGRlcik7XG4gICAgICAgICAgICAgIGlmIChiZWZvcmUpIGFjYy5wdXNoKGJlZm9yZSk7XG4gICAgICAgICAgICAgIGFjYy5wdXNoKHBsYWNlaG9sZGVyKTtcbiAgICAgICAgICAgICAgaWYgKG5leHQpIGFjYy5wdXNoKG5leHQpO1xuICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwgW3RleHRdKVxuICAgICAgICAgICAgLmZvckVhY2goKHBhcnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlLnRleHRDb250ZW50ID0gcGFydDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGVcbiAgICAgICAgICAgICAgICAgIC5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocGFydCksIGN1cnJlbnROb2RlLm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZXF1YWwgPSBub2RlLnRleHRDb250ZW50Lm1hdGNoKFBMQUNFSE9MREVSX1JFR0VYUF9FUVVBTCk7XG4gICAgICBpZiAoZXF1YWwpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKCFJU19JRSkgbm9kZS50ZXh0Q29udGVudCA9ICcnO1xuICAgICAgICBwYXJ0c1tlcXVhbFsxXV0gPSBbY29tcGlsZUluZGV4LCByZXNvbHZlVmFsdWVdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqLyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9uZWx5LWlmXG4gICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgQXJyYXkuZnJvbShub2RlLmF0dHJpYnV0ZXMpLmZvckVhY2goKGF0dHIpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF0dHIudmFsdWUudHJpbSgpO1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgY29uc3QgbmFtZSA9IElTX0lFID8gYXR0ci5uYW1lLnJlcGxhY2UoQVRUUl9QUkVGSVgsICcnKSA6IGF0dHIubmFtZTtcbiAgICAgICAgICBjb25zdCBlcXVhbCA9IHZhbHVlLm1hdGNoKFBMQUNFSE9MREVSX1JFR0VYUF9FUVVBTCk7XG4gICAgICAgICAgaWYgKGVxdWFsKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBnZXRQcm9wZXJ0eU5hbWUocmF3UGFydHNbZXF1YWxbMV1dKTtcbiAgICAgICAgICAgIHBhcnRzW2VxdWFsWzFdXSA9IFtjb21waWxlSW5kZXgsIHJlc29sdmVQcm9wZXJ0eShuYW1lLCBwcm9wZXJ0eU5hbWUsIGlzU1ZHKV07XG4gICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShhdHRyLm5hbWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHRzID0gdmFsdWUubWF0Y2goUExBQ0VIT0xERVJfUkVHRVhQX0FMTCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0cykge1xuICAgICAgICAgICAgICBjb25zdCBwYXJ0aWFsTmFtZSA9IGBhdHRyX18ke25hbWV9YDtcblxuICAgICAgICAgICAgICByZXN1bHRzLmZvckVhY2goKHBsYWNlaG9sZGVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IFssIGlkXSA9IHBsYWNlaG9sZGVyLm1hdGNoKFBMQUNFSE9MREVSX1JFR0VYUF9FUVVBTCk7XG4gICAgICAgICAgICAgICAgcGFydHNbaWRdID0gW2NvbXBpbGVJbmRleCwgKGhvc3QsIHRhcmdldCwgYXR0clZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gZGF0YU1hcC5nZXQodGFyZ2V0LCB7fSk7XG4gICAgICAgICAgICAgICAgICBkYXRhW3BhcnRpYWxOYW1lXSA9IChkYXRhW3BhcnRpYWxOYW1lXSB8fCB2YWx1ZSkucmVwbGFjZShwbGFjZWhvbGRlciwgYXR0clZhbHVlID09IG51bGwgPyAnJyA6IGF0dHJWYWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAgIGlmICgocmVzdWx0cy5sZW5ndGggPT09IDEpIHx8IChpbmRleCArIDEgPT09IHJlc3VsdHMubGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKG5hbWUsIGRhdGFbcGFydGlhbE5hbWVdKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVtwYXJ0aWFsTmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGF0dHIudmFsdWUgPSAnJztcblxuICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgICBpZiAoSVNfSUUgJiYgbmFtZSAhPT0gYXR0ci5uYW1lKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoYXR0ci5uYW1lKTtcbiAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShuYW1lLCAnJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBpbGVJbmRleCArPSAxO1xuICB9XG5cbiAgcmV0dXJuIChob3N0LCB0YXJnZXQsIGFyZ3MpID0+IHtcbiAgICBjb25zdCBkYXRhID0gZGF0YU1hcC5nZXQodGFyZ2V0LCB7IHR5cGU6ICdmdW5jdGlvbicgfSk7XG5cbiAgICBpZiAodGVtcGxhdGUgIT09IGRhdGEudGVtcGxhdGUpIHtcbiAgICAgIGlmIChkYXRhLnRlbXBsYXRlKSByZW1vdmVUZW1wbGF0ZSh0YXJnZXQpO1xuXG4gICAgICBjb25zdCBmcmFnbWVudCA9IGRvY3VtZW50LmltcG9ydE5vZGUoYXBwbHlTaGFkeUNTUyh0ZW1wbGF0ZSwgaG9zdC50YWdOYW1lKS5jb250ZW50LCB0cnVlKTtcblxuICAgICAgY29uc3QgcmVuZGVyV2Fsa2VyID0gY3JlYXRlV2Fsa2VyKGZyYWdtZW50KTtcbiAgICAgIGNvbnN0IGNsb25lZFBhcnRzID0gcGFydHMuc2xpY2UoMCk7XG5cbiAgICAgIGxldCByZW5kZXJJbmRleCA9IDA7XG4gICAgICBsZXQgY3VycmVudFBhcnQgPSBjbG9uZWRQYXJ0cy5zaGlmdCgpO1xuXG4gICAgICBjb25zdCBtYXJrZXJzID0gW107XG5cbiAgICAgIE9iamVjdC5hc3NpZ24oZGF0YSwgeyB0ZW1wbGF0ZSwgbWFya2VycyB9KTtcblxuICAgICAgd2hpbGUgKHJlbmRlcldhbGtlci5uZXh0Tm9kZSgpKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSByZW5kZXJXYWxrZXIuY3VycmVudE5vZGU7XG5cbiAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICBpZiAoUExBQ0VIT0xERVJfUkVHRVhQX0VRVUFMLnRlc3Qobm9kZS50ZXh0Q29udGVudCkpIHtcbiAgICAgICAgICAgIG5vZGUudGV4dENvbnRlbnQgPSAnJztcbiAgICAgICAgICB9IGVsc2UgaWYgKElTX0lFKSB7XG4gICAgICAgICAgICBub2RlLnRleHRDb250ZW50ID0gbm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKEFUVFJfUkVHRVhQLCAnJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgbm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBpZiAobm9kZS50YWdOYW1lLmluZGV4T2YoJy0nKSA+IC0xICYmICFjdXN0b21FbGVtZW50cy5nZXQobm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgTWlzc2luZyAnJHtzdHJpbmdpZnlFbGVtZW50KG5vZGUpfScgZWxlbWVudCBkZWZpbml0aW9uIGluICcke3N0cmluZ2lmeUVsZW1lbnQoaG9zdCl9J2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChjdXJyZW50UGFydCAmJiBjdXJyZW50UGFydFswXSA9PT0gcmVuZGVySW5kZXgpIHtcbiAgICAgICAgICBtYXJrZXJzLnB1c2goW25vZGUsIGN1cnJlbnRQYXJ0WzFdXSk7XG4gICAgICAgICAgY3VycmVudFBhcnQgPSBjbG9uZWRQYXJ0cy5zaGlmdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVySW5kZXggKz0gMTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hpbGRMaXN0ID0gQXJyYXkuZnJvbShmcmFnbWVudC5jaGlsZE5vZGVzKTtcblxuICAgICAgZGF0YS5zdGFydE5vZGUgPSBjaGlsZExpc3RbMF07XG4gICAgICBkYXRhLmVuZE5vZGUgPSBjaGlsZExpc3RbY2hpbGRMaXN0Lmxlbmd0aCAtIDFdO1xuXG4gICAgICBpZiAodGFyZ2V0Lm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICBsZXQgcHJldmlvdXNDaGlsZCA9IHRhcmdldDtcbiAgICAgICAgY2hpbGRMaXN0LmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAgICAgdGFyZ2V0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNoaWxkLCBwcmV2aW91c0NoaWxkLm5leHRTaWJsaW5nKTtcbiAgICAgICAgICBwcmV2aW91c0NoaWxkID0gY2hpbGQ7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0LmFwcGVuZENoaWxkKGZyYWdtZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkYXRhLm1hcmtlcnMuZm9yRWFjaCgoW25vZGUsIGZuXSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChkYXRhLmxhc3RBcmdzICYmIGRhdGEubGFzdEFyZ3NbaW5kZXhdID09PSBhcmdzW2luZGV4XSkgcmV0dXJuO1xuICAgICAgZm4oaG9zdCwgbm9kZSwgYXJnc1tpbmRleF0sIGRhdGEubGFzdEFyZ3MgPyBkYXRhLmxhc3RBcmdzW2luZGV4XSA6IHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICBkYXRhLmxhc3RBcmdzID0gYXJncztcbiAgfTtcbn1cbiJdfQ==

@@ -95,3 +95,3 @@ "use strict";

if (parts.slice(index).join('').match(/\s*<\/\s*(table|tr|thead|tbody|tfoot|colgroup)>/)) {
if (parts.slice(index).join('').match(/^\s*<\/\s*(table|tr|thead|tbody|tfoot|colgroup)>/)) {
return "".concat(acc, "<!--").concat(getPlaceholder(index - 1), "-->").concat(part);

@@ -357,2 +357,2 @@ }

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZS9jb3JlLmpzIl0sIm5hbWVzIjpbInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImUiLCJUSU1FU1RBTVAiLCJEYXRlIiwibm93IiwiZ2V0UGxhY2Vob2xkZXIiLCJpZCIsIlBMQUNFSE9MREVSX1JFR0VYUF9URVhUIiwiUExBQ0VIT0xERVJfUkVHRVhQX0VRVUFMIiwiUmVnRXhwIiwiUExBQ0VIT0xERVJfUkVHRVhQX0FMTCIsIkFUVFJfUFJFRklYIiwiQVRUUl9SRUdFWFAiLCJwcmVwYXJlZFRlbXBsYXRlcyIsIldlYWtNYXAiLCJhcHBseVNoYWR5Q1NTIiwidGVtcGxhdGUiLCJ0YWdOYW1lIiwic2hhZHkiLCJtYXAiLCJnZXQiLCJNYXAiLCJzZXQiLCJjbG9uZSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImNvbnRlbnQiLCJhcHBlbmRDaGlsZCIsImNsb25lTm9kZSIsInN0eWxlcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJBcnJheSIsImZyb20iLCJmb3JFYWNoIiwic3R5bGUiLCJjb3VudCIsImNoaWxkTm9kZXMiLCJsZW5ndGgiLCJpIiwicGFyZW50Tm9kZSIsImluc2VydEJlZm9yZSIsImNyZWF0ZVRleHROb2RlIiwicHJlcGFyZVRlbXBsYXRlIiwidG9Mb3dlckNhc2UiLCJjcmVhdGVTaWduYXR1cmUiLCJwYXJ0cyIsInNpZ25hdHVyZSIsInJlZHVjZSIsImFjYyIsInBhcnQiLCJpbmRleCIsInNsaWNlIiwiam9pbiIsIm1hdGNoIiwiSVNfSUUiLCJyZXBsYWNlIiwiZ2V0UHJvcGVydHlOYW1lIiwic3RyaW5nIiwic3BsaXQiLCJwb3AiLCJyZXBsYWNlQ29tbWVudHMiLCJmcmFnbWVudCIsIml0ZXJhdG9yIiwiY3JlYXRlTm9kZUl0ZXJhdG9yIiwiTm9kZUZpbHRlciIsIlNIT1dfQ09NTUVOVCIsIm5vZGUiLCJuZXh0Tm9kZSIsInRlc3QiLCJ0ZXh0Q29udGVudCIsInJlbW92ZUNoaWxkIiwiY3JlYXRlSW50ZXJuYWxXYWxrZXIiLCJjb250ZXh0IiwiY3VycmVudE5vZGUiLCJ1bmRlZmluZWQiLCJuZXh0U2libGluZyIsImNyZWF0ZUV4dGVybmFsV2Fsa2VyIiwiY3JlYXRlVHJlZVdhbGtlciIsIlNIT1dfRUxFTUVOVCIsIlNIT1dfVEVYVCIsImNyZWF0ZVdhbGtlciIsIndpbmRvdyIsIlNoYWR5RE9NIiwiaW5Vc2UiLCJjb250YWluZXIiLCJjb21waWxlIiwicmF3UGFydHMiLCJpc1NWRyIsImlubmVySFRNTCIsImNoaWxkcmVuIiwic3ZnUm9vdCIsImZpcnN0Q2hpbGQiLCJjb21waWxlV2Fsa2VyIiwiY29tcGlsZUluZGV4Iiwibm9kZVR5cGUiLCJOb2RlIiwiVEVYVF9OT0RFIiwidGV4dCIsInJlc3VsdHMiLCJwbGFjZWhvbGRlciIsImJlZm9yZSIsIm5leHQiLCJwdXNoIiwiZXF1YWwiLCJyZXNvbHZlVmFsdWUiLCJFTEVNRU5UX05PREUiLCJhdHRyaWJ1dGVzIiwiYXR0ciIsInZhbHVlIiwidHJpbSIsIm5hbWUiLCJwcm9wZXJ0eU5hbWUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJwYXJ0aWFsTmFtZSIsImhvc3QiLCJ0YXJnZXQiLCJhdHRyVmFsdWUiLCJkYXRhIiwiZGF0YU1hcCIsInNldEF0dHJpYnV0ZSIsImFyZ3MiLCJ0eXBlIiwiaW1wb3J0Tm9kZSIsInJlbmRlcldhbGtlciIsImNsb25lZFBhcnRzIiwicmVuZGVySW5kZXgiLCJjdXJyZW50UGFydCIsInNoaWZ0IiwibWFya2VycyIsIk9iamVjdCIsImFzc2lnbiIsImluZGV4T2YiLCJjdXN0b21FbGVtZW50cyIsIkVycm9yIiwiY2hpbGRMaXN0Iiwic3RhcnROb2RlIiwiZW5kTm9kZSIsInByZXZpb3VzQ2hpbGQiLCJjaGlsZCIsImZuIiwibGFzdEFyZ3MiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUVBOztBQUNBOzs7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0EsSUFBSTtBQUFFQSxFQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWUMs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QjtBQUNBbUIsUUFBQUEsU0FBUyxDQUFDckcsT0FBVixDQUFrQixVQUFDeUcsS0FBRCxFQUFXO0FBQzNCdkIsVUFBQUEsTUFBTSxDQUFDNUUsVUFBUCxDQUFrQkMsWUFBbEIsQ0FBK0JrRyxLQUEvQixFQUFzQ0QsYUFBYSxDQUFDOUQsV0FBcEQ7QUFDQThELFVBQUFBLGFBQWEsR0FBR0MsS0FBaEI7QUFDRCxTQUhEO0FBSUQsT0FORCxNQU1PO0FBQ0x2QixRQUFBQSxNQUFNLENBQUN4RixXQUFQLENBQW1Ca0MsUUFBbkI7QUFDRDtBQUNGOztBQUVEd0QsSUFBQUEsSUFBSSxDQUFDVyxPQUFMLENBQWEvRixPQUFiLENBQXFCLGdCQUFhaUIsS0FBYixFQUF1QjtBQUFBO0FBQUEsVUFBckJnQixJQUFxQjtBQUFBLFVBQWZ5RSxFQUFlOztBQUMxQyxVQUFJdEIsSUFBSSxDQUFDdUIsUUFBTCxJQUFpQnZCLElBQUksQ0FBQ3VCLFFBQUwsQ0FBYzFGLEtBQWQsTUFBeUJzRSxJQUFJLENBQUN0RSxLQUFELENBQWxELEVBQTJEO0FBQzNEeUYsTUFBQUEsRUFBRSxDQUFDekIsSUFBRCxFQUFPaEQsSUFBUCxFQUFhc0QsSUFBSSxDQUFDdEUsS0FBRCxDQUFqQixFQUEwQm1FLElBQUksQ0FBQ3VCLFFBQUwsR0FBZ0J2QixJQUFJLENBQUN1QixRQUFMLENBQWMxRixLQUFkLENBQWhCLEdBQXVDd0IsU0FBakUsQ0FBRjtBQUNELEtBSEQ7QUFLQTJDLElBQUFBLElBQUksQ0FBQ3VCLFFBQUwsR0FBZ0JwQixJQUFoQjtBQUNELEdBaEVEO0FBaUVEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3RyaW5naWZ5RWxlbWVudCwgc2hhZHlDU1MsIElTX0lFIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgZGF0YU1hcCwgcmVtb3ZlVGVtcGxhdGUgfSBmcm9tICcuL3V0aWxzJztcblxuaW1wb3J0IHJlc29sdmVWYWx1ZSBmcm9tICcuL3Jlc29sdmVycy92YWx1ZSc7XG5pbXBvcnQgcmVzb2x2ZVByb3BlcnR5IGZyb20gJy4vcmVzb2x2ZXJzL3Byb3BlcnR5JztcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnRyeSB7IHByb2Nlc3MuZW52Lk5PREVfRU5WIH0gY2F0Y2goZSkgeyB2YXIgcHJvY2VzcyA9IHsgZW52OiB7IE5PREVfRU5WOiAncHJvZHVjdGlvbicgfSB9OyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuY29uc3QgVElNRVNUQU1QID0gRGF0ZS5ub3coKTtcblxuZXhwb3J0IGNvbnN0IGdldFBsYWNlaG9sZGVyID0gKGlkID0gMCkgPT4gYHt7aC0ke1RJTUVTVEFNUH0tJHtpZH19fWA7XG5cbmNvbnN0IFBMQUNFSE9MREVSX1JFR0VYUF9URVhUID0gZ2V0UGxhY2Vob2xkZXIoJyhcXFxcZCspJyk7XG5jb25zdCBQTEFDRUhPTERFUl9SRUdFWFBfRVFVQUwgPSBuZXcgUmVnRXhwKGBeJHtQTEFDRUhPTERFUl9SRUdFWFBfVEVYVH0kYCk7XG5jb25zdCBQTEFDRUhPTERFUl9SRUdFWFBfQUxMID0gbmV3IFJlZ0V4cChQTEFDRUhPTERFUl9SRUdFWFBfVEVYVCwgJ2cnKTtcblxuY29uc3QgQVRUUl9QUkVGSVggPSBgLS0ke1RJTUVTVEFNUH0tLWA7XG5jb25zdCBBVFRSX1JFR0VYUCA9IG5ldyBSZWdFeHAoQVRUUl9QUkVGSVgsICdnJyk7XG5cbmNvbnN0IHByZXBhcmVkVGVtcGxhdGVzID0gbmV3IFdlYWtNYXAoKTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIGFwcGx5U2hhZHlDU1ModGVtcGxhdGUsIHRhZ05hbWUpIHtcbiAgaWYgKCF0YWdOYW1lKSByZXR1cm4gdGVtcGxhdGU7XG5cbiAgcmV0dXJuIHNoYWR5Q1NTKChzaGFkeSkgPT4ge1xuICAgIGxldCBtYXAgPSBwcmVwYXJlZFRlbXBsYXRlcy5nZXQodGVtcGxhdGUpO1xuICAgIGlmICghbWFwKSB7XG4gICAgICBtYXAgPSBuZXcgTWFwKCk7XG4gICAgICBwcmVwYXJlZFRlbXBsYXRlcy5zZXQodGVtcGxhdGUsIG1hcCk7XG4gICAgfVxuXG4gICAgbGV0IGNsb25lID0gbWFwLmdldCh0YWdOYW1lKTtcblxuICAgIGlmICghY2xvbmUpIHtcbiAgICAgIGNsb25lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKTtcbiAgICAgIGNsb25lLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuXG4gICAgICBtYXAuc2V0KHRhZ05hbWUsIGNsb25lKTtcblxuICAgICAgY29uc3Qgc3R5bGVzID0gY2xvbmUuY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCdzdHlsZScpO1xuXG4gICAgICBBcnJheS5mcm9tKHN0eWxlcykuZm9yRWFjaCgoc3R5bGUpID0+IHtcbiAgICAgICAgY29uc3QgY291bnQgPSBzdHlsZS5jaGlsZE5vZGVzLmxlbmd0aCArIDE7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkgKz0gMSkge1xuICAgICAgICAgIHN0eWxlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGdldFBsYWNlaG9sZGVyKCkpLCBzdHlsZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBzaGFkeS5wcmVwYXJlVGVtcGxhdGUoY2xvbmUsIHRhZ05hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuICAgIHJldHVybiBjbG9uZTtcbiAgfSwgdGVtcGxhdGUpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTaWduYXR1cmUocGFydHMsIHN0eWxlcykge1xuICBsZXQgc2lnbmF0dXJlID0gcGFydHMucmVkdWNlKChhY2MsIHBhcnQsIGluZGV4KSA9PiB7XG4gICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gcGFydDtcbiAgICB9XG4gICAgaWYgKHBhcnRzLnNsaWNlKGluZGV4KS5qb2luKCcnKS5tYXRjaCgvXFxzKjxcXC9cXHMqKHRhYmxlfHRyfHRoZWFkfHRib2R5fHRmb290fGNvbGdyb3VwKT4vKSkge1xuICAgICAgcmV0dXJuIGAke2FjY308IS0tJHtnZXRQbGFjZWhvbGRlcihpbmRleCAtIDEpfS0tPiR7cGFydH1gO1xuICAgIH1cbiAgICByZXR1cm4gYWNjICsgZ2V0UGxhY2Vob2xkZXIoaW5kZXggLSAxKSArIHBhcnQ7XG4gIH0sICcnKTtcblxuICBpZiAoc3R5bGVzKSB7XG4gICAgc2lnbmF0dXJlICs9IGA8c3R5bGU+XFxuJHtzdHlsZXMuam9pbignXFxuLyotLS0tLS0qL1xcbicpfVxcbjwvc3R5bGU+YDtcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoSVNfSUUpIHtcbiAgICByZXR1cm4gc2lnbmF0dXJlLnJlcGxhY2UoXG4gICAgICAvc3R5bGVcXHMqPVxccyooW1wiXVteXCJdK1tcIl18WyddW14nXStbJ118W15cXHNcIic8Pi9dKykvZyxcbiAgICAgIG1hdGNoID0+IGAke0FUVFJfUFJFRklYfSR7bWF0Y2h9YCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcGVydHlOYW1lKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xccyo9XFxzKlsnXCJdKiQvZywgJycpLnNwbGl0KCcgJykucG9wKCk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VDb21tZW50cyhmcmFnbWVudCkge1xuICBjb25zdCBpdGVyYXRvciA9IGRvY3VtZW50LmNyZWF0ZU5vZGVJdGVyYXRvcihmcmFnbWVudCwgTm9kZUZpbHRlci5TSE9XX0NPTU1FTlQsIG51bGwsIGZhbHNlKTtcbiAgbGV0IG5vZGU7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25kLWFzc2lnblxuICB3aGlsZSAobm9kZSA9IGl0ZXJhdG9yLm5leHROb2RlKCkpIHtcbiAgICBpZiAoUExBQ0VIT0xERVJfUkVHRVhQX0VRVUFMLnRlc3Qobm9kZS50ZXh0Q29udGVudCkpIHtcbiAgICAgIG5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobm9kZS50ZXh0Q29udGVudCksIG5vZGUpO1xuICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW50ZXJuYWxXYWxrZXIoY29udGV4dCkge1xuICBsZXQgbm9kZTtcblxuICByZXR1cm4ge1xuICAgIGdldCBjdXJyZW50Tm9kZSgpIHsgcmV0dXJuIG5vZGU7IH0sXG4gICAgbmV4dE5vZGUoKSB7XG4gICAgICBpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vZGUgPSBjb250ZXh0LmNoaWxkTm9kZXNbMF07XG4gICAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGROb2Rlc1swXTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5uZXh0U2libGluZykge1xuICAgICAgICBub2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUubmV4dFNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhIW5vZGU7XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXh0ZXJuYWxXYWxrZXIoY29udGV4dCkge1xuICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihcbiAgICBjb250ZXh0LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQgfCBOb2RlRmlsdGVyLlNIT1dfVEVYVCxcbiAgICBudWxsLFxuICAgIGZhbHNlLFxuICApO1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuY29uc3QgY3JlYXRlV2Fsa2VyID0gdHlwZW9mIHdpbmRvdy5TaGFkeURPTSA9PT0gJ29iamVjdCcgJiYgd2luZG93LlNoYWR5RE9NLmluVXNlID8gY3JlYXRlSW50ZXJuYWxXYWxrZXIgOiBjcmVhdGVFeHRlcm5hbFdhbGtlcjtcblxuY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZShyYXdQYXJ0cywgaXNTVkcsIHN0eWxlcykge1xuICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gIGNvbnN0IHBhcnRzID0gW107XG5cbiAgbGV0IHNpZ25hdHVyZSA9IGNyZWF0ZVNpZ25hdHVyZShyYXdQYXJ0cywgc3R5bGVzKTtcbiAgaWYgKGlzU1ZHKSBzaWduYXR1cmUgPSBgPHN2Zz4ke3NpZ25hdHVyZX08L3N2Zz5gO1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoSVNfSUUpIHtcbiAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBzaWduYXR1cmU7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLmlubmVySFRNTCA9IGA8dGVtcGxhdGU+JHtzaWduYXR1cmV9PC90ZW1wbGF0ZT5gO1xuICAgIHRlbXBsYXRlLmNvbnRlbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyLmNoaWxkcmVuWzBdLmNvbnRlbnQpO1xuICB9XG5cbiAgaWYgKGlzU1ZHKSB7XG4gICAgY29uc3Qgc3ZnUm9vdCA9IHRlbXBsYXRlLmNvbnRlbnQuZmlyc3RDaGlsZDtcbiAgICB0ZW1wbGF0ZS5jb250ZW50LnJlbW92ZUNoaWxkKHN2Z1Jvb3QpO1xuICAgIEFycmF5LmZyb20oc3ZnUm9vdC5jaGlsZE5vZGVzKS5mb3JFYWNoKG5vZGUgPT4gdGVtcGxhdGUuY29udGVudC5hcHBlbmRDaGlsZChub2RlKSk7XG4gIH1cblxuICByZXBsYWNlQ29tbWVudHModGVtcGxhdGUuY29udGVudCk7XG5cbiAgY29uc3QgY29tcGlsZVdhbGtlciA9IGNyZWF0ZVdhbGtlcih0ZW1wbGF0ZS5jb250ZW50KTtcbiAgbGV0IGNvbXBpbGVJbmRleCA9IDA7XG5cbiAgd2hpbGUgKGNvbXBpbGVXYWxrZXIubmV4dE5vZGUoKSkge1xuICAgIGNvbnN0IG5vZGUgPSBjb21waWxlV2Fsa2VyLmN1cnJlbnROb2RlO1xuXG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zdCB0ZXh0ID0gbm9kZS50ZXh0Q29udGVudDtcblxuICAgICAgaWYgKCF0ZXh0Lm1hdGNoKFBMQUNFSE9MREVSX1JFR0VYUF9FUVVBTCkpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IHRleHQubWF0Y2goUExBQ0VIT0xERVJfUkVHRVhQX0FMTCk7XG4gICAgICAgIGlmIChyZXN1bHRzKSB7XG4gICAgICAgICAgbGV0IGN1cnJlbnROb2RlID0gbm9kZTtcbiAgICAgICAgICByZXN1bHRzXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIHBsYWNlaG9sZGVyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IFtiZWZvcmUsIG5leHRdID0gYWNjLnBvcCgpLnNwbGl0KHBsYWNlaG9sZGVyKTtcbiAgICAgICAgICAgICAgaWYgKGJlZm9yZSkgYWNjLnB1c2goYmVmb3JlKTtcbiAgICAgICAgICAgICAgYWNjLnB1c2gocGxhY2Vob2xkZXIpO1xuICAgICAgICAgICAgICBpZiAobmV4dCkgYWNjLnB1c2gobmV4dCk7XG4gICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCBbdGV4dF0pXG4gICAgICAgICAgICAuZm9yRWFjaCgocGFydCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudE5vZGUudGV4dENvbnRlbnQgPSBwYXJ0O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50Tm9kZVxuICAgICAgICAgICAgICAgICAgLmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShwYXJ0KSwgY3VycmVudE5vZGUubmV4dFNpYmxpbmcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBlcXVhbCA9IG5vZGUudGV4dENvbnRlbnQubWF0Y2goUExBQ0VIT0xERVJfUkVHRVhQX0VRVUFMKTtcbiAgICAgIGlmIChlcXVhbCkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoIUlTX0lFKSBub2RlLnRleHRDb250ZW50ID0gJyc7XG4gICAgICAgIHBhcnRzW2VxdWFsWzFdXSA9IFtjb21waWxlSW5kZXgsIHJlc29sdmVWYWx1ZV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb25lbHktaWZcbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICBBcnJheS5mcm9tKG5vZGUuYXR0cmlidXRlcykuZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXR0ci52YWx1ZS50cmltKCk7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICBjb25zdCBuYW1lID0gSVNfSUUgPyBhdHRyLm5hbWUucmVwbGFjZShBVFRSX1BSRUZJWCwgJycpIDogYXR0ci5uYW1lO1xuICAgICAgICAgIGNvbnN0IGVxdWFsID0gdmFsdWUubWF0Y2goUExBQ0VIT0xERVJfUkVHRVhQX0VRVUFMKTtcbiAgICAgICAgICBpZiAoZXF1YWwpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IGdldFByb3BlcnR5TmFtZShyYXdQYXJ0c1tlcXVhbFsxXV0pO1xuICAgICAgICAgICAgcGFydHNbZXF1YWxbMV1dID0gW2NvbXBpbGVJbmRleCwgcmVzb2x2ZVByb3BlcnR5KG5hbWUsIHByb3BlcnR5TmFtZSwgaXNTVkcpXTtcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHIubmFtZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSB2YWx1ZS5tYXRjaChQTEFDRUhPTERFUl9SRUdFWFBfQUxMKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHRzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcnRpYWxOYW1lID0gYGF0dHJfXyR7bmFtZX1gO1xuXG4gICAgICAgICAgICAgIHJlc3VsdHMuZm9yRWFjaCgocGxhY2Vob2xkZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgWywgaWRdID0gcGxhY2Vob2xkZXIubWF0Y2goUExBQ0VIT0xERVJfUkVHRVhQX0VRVUFMKTtcbiAgICAgICAgICAgICAgICBwYXJ0c1tpZF0gPSBbY29tcGlsZUluZGV4LCAoaG9zdCwgdGFyZ2V0LCBhdHRyVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBkYXRhTWFwLmdldCh0YXJnZXQsIHt9KTtcbiAgICAgICAgICAgICAgICAgIGRhdGFbcGFydGlhbE5hbWVdID0gKGRhdGFbcGFydGlhbE5hbWVdIHx8IHZhbHVlKS5yZXBsYWNlKHBsYWNlaG9sZGVyLCBhdHRyVmFsdWUgPT0gbnVsbCA/ICcnIDogYXR0clZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgaWYgKChyZXN1bHRzLmxlbmd0aCA9PT0gMSkgfHwgKGluZGV4ICsgMSA9PT0gcmVzdWx0cy5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUobmFtZSwgZGF0YVtwYXJ0aWFsTmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICBkYXRhW3BhcnRpYWxOYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgYXR0ci52YWx1ZSA9ICcnO1xuXG4gICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICAgIGlmIChJU19JRSAmJiBuYW1lICE9PSBhdHRyLm5hbWUpIHtcbiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShhdHRyLm5hbWUpO1xuICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsICcnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tcGlsZUluZGV4ICs9IDE7XG4gIH1cblxuICByZXR1cm4gKGhvc3QsIHRhcmdldCwgYXJncykgPT4ge1xuICAgIGNvbnN0IGRhdGEgPSBkYXRhTWFwLmdldCh0YXJnZXQsIHsgdHlwZTogJ2Z1bmN0aW9uJyB9KTtcblxuICAgIGlmICh0ZW1wbGF0ZSAhPT0gZGF0YS50ZW1wbGF0ZSkge1xuICAgICAgaWYgKGRhdGEudGVtcGxhdGUpIHJlbW92ZVRlbXBsYXRlKHRhcmdldCk7XG5cbiAgICAgIGNvbnN0IGZyYWdtZW50ID0gZG9jdW1lbnQuaW1wb3J0Tm9kZShhcHBseVNoYWR5Q1NTKHRlbXBsYXRlLCBob3N0LnRhZ05hbWUpLmNvbnRlbnQsIHRydWUpO1xuXG4gICAgICBjb25zdCByZW5kZXJXYWxrZXIgPSBjcmVhdGVXYWxrZXIoZnJhZ21lbnQpO1xuICAgICAgY29uc3QgY2xvbmVkUGFydHMgPSBwYXJ0cy5zbGljZSgwKTtcblxuICAgICAgbGV0IHJlbmRlckluZGV4ID0gMDtcbiAgICAgIGxldCBjdXJyZW50UGFydCA9IGNsb25lZFBhcnRzLnNoaWZ0KCk7XG5cbiAgICAgIGNvbnN0IG1hcmtlcnMgPSBbXTtcblxuICAgICAgT2JqZWN0LmFzc2lnbihkYXRhLCB7IHRlbXBsYXRlLCBtYXJrZXJzIH0pO1xuXG4gICAgICB3aGlsZSAocmVuZGVyV2Fsa2VyLm5leHROb2RlKCkpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHJlbmRlcldhbGtlci5jdXJyZW50Tm9kZTtcblxuICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgIGlmIChQTEFDRUhPTERFUl9SRUdFWFBfRVFVQUwudGVzdChub2RlLnRleHRDb250ZW50KSkge1xuICAgICAgICAgICAgbm9kZS50ZXh0Q29udGVudCA9ICcnO1xuICAgICAgICAgIH0gZWxzZSBpZiAoSVNfSUUpIHtcbiAgICAgICAgICAgIG5vZGUudGV4dENvbnRlbnQgPSBub2RlLnRleHRDb250ZW50LnJlcGxhY2UoQVRUUl9SRUdFWFAsICcnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBub2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIGlmIChub2RlLnRhZ05hbWUuaW5kZXhPZignLScpID4gLTEgJiYgIWN1c3RvbUVsZW1lbnRzLmdldChub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKGBNaXNzaW5nICcke3N0cmluZ2lmeUVsZW1lbnQobm9kZSl9JyBlbGVtZW50IGRlZmluaXRpb24gaW4gJyR7c3RyaW5naWZ5RWxlbWVudChob3N0KX0nYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKGN1cnJlbnRQYXJ0ICYmIGN1cnJlbnRQYXJ0WzBdID09PSByZW5kZXJJbmRleCkge1xuICAgICAgICAgIG1hcmtlcnMucHVzaChbbm9kZSwgY3VycmVudFBhcnRbMV1dKTtcbiAgICAgICAgICBjdXJyZW50UGFydCA9IGNsb25lZFBhcnRzLnNoaWZ0KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJJbmRleCArPSAxO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjaGlsZExpc3QgPSBBcnJheS5mcm9tKGZyYWdtZW50LmNoaWxkTm9kZXMpO1xuXG4gICAgICBkYXRhLnN0YXJ0Tm9kZSA9IGNoaWxkTGlzdFswXTtcbiAgICAgIGRhdGEuZW5kTm9kZSA9IGNoaWxkTGlzdFtjaGlsZExpc3QubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmICh0YXJnZXQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICAgIGxldCBwcmV2aW91c0NoaWxkID0gdGFyZ2V0O1xuICAgICAgICBjaGlsZExpc3QuZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgICB0YXJnZXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2hpbGQsIHByZXZpb3VzQ2hpbGQubmV4dFNpYmxpbmcpO1xuICAgICAgICAgIHByZXZpb3VzQ2hpbGQgPSBjaGlsZDtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXQuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRhdGEubWFya2Vycy5mb3JFYWNoKChbbm9kZSwgZm5dLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGRhdGEubGFzdEFyZ3MgJiYgZGF0YS5sYXN0QXJnc1tpbmRleF0gPT09IGFyZ3NbaW5kZXhdKSByZXR1cm47XG4gICAgICBmbihob3N0LCBub2RlLCBhcmdzW2luZGV4XSwgZGF0YS5sYXN0QXJncyA/IGRhdGEubGFzdEFyZ3NbaW5kZXhdIDogdW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIGRhdGEubGFzdEFyZ3MgPSBhcmdzO1xuICB9O1xufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZS9jb3JlLmpzIl0sIm5hbWVzIjpbInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImUiLCJUSU1FU1RBTVAiLCJEYXRlIiwibm93IiwiZ2V0UGxhY2Vob2xkZXIiLCJpZCIsIlBMQUNFSE9MREVSX1JFR0VYUF9URVhUIiwiUExBQ0VIT0xERVJfUkVHRVhQX0VRVUFMIiwiUmVnRXhwIiwiUExBQ0VIT0xERVJfUkVHRVhQX0FMTCIsIkFUVFJfUFJFRklYIiwiQVRUUl9SRUdFWFAiLCJwcmVwYXJlZFRlbXBsYXRlcyIsIldlYWtNYXAiLCJhcHBseVNoYWR5Q1NTIiwidGVtcGxhdGUiLCJ0YWdOYW1lIiwic2hhZHkiLCJtYXAiLCJnZXQiLCJNYXAiLCJzZXQiLCJjbG9uZSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImNvbnRlbnQiLCJhcHBlbmRDaGlsZCIsImNsb25lTm9kZSIsInN0eWxlcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJBcnJheSIsImZyb20iLCJmb3JFYWNoIiwic3R5bGUiLCJjb3VudCIsImNoaWxkTm9kZXMiLCJsZW5ndGgiLCJpIiwicGFyZW50Tm9kZSIsImluc2VydEJlZm9yZSIsImNyZWF0ZVRleHROb2RlIiwicHJlcGFyZVRlbXBsYXRlIiwidG9Mb3dlckNhc2UiLCJjcmVhdGVTaWduYXR1cmUiLCJwYXJ0cyIsInNpZ25hdHVyZSIsInJlZHVjZSIsImFjYyIsInBhcnQiLCJpbmRleCIsInNsaWNlIiwiam9pbiIsIm1hdGNoIiwiSVNfSUUiLCJyZXBsYWNlIiwiZ2V0UHJvcGVydHlOYW1lIiwic3RyaW5nIiwic3BsaXQiLCJwb3AiLCJyZXBsYWNlQ29tbWVudHMiLCJmcmFnbWVudCIsIml0ZXJhdG9yIiwiY3JlYXRlTm9kZUl0ZXJhdG9yIiwiTm9kZUZpbHRlciIsIlNIT1dfQ09NTUVOVCIsIm5vZGUiLCJuZXh0Tm9kZSIsInRlc3QiLCJ0ZXh0Q29udGVudCIsInJlbW92ZUNoaWxkIiwiY3JlYXRlSW50ZXJuYWxXYWxrZXIiLCJjb250ZXh0IiwiY3VycmVudE5vZGUiLCJ1bmRlZmluZWQiLCJuZXh0U2libGluZyIsImNyZWF0ZUV4dGVybmFsV2Fsa2VyIiwiY3JlYXRlVHJlZVdhbGtlciIsIlNIT1dfRUxFTUVOVCIsIlNIT1dfVEVYVCIsImNyZWF0ZVdhbGtlciIsIndpbmRvdyIsIlNoYWR5RE9NIiwiaW5Vc2UiLCJjb250YWluZXIiLCJjb21waWxlIiwicmF3UGFydHMiLCJpc1NWRyIsImlubmVySFRNTCIsImNoaWxkcmVuIiwic3ZnUm9vdCIsImZpcnN0Q2hpbGQiLCJjb21waWxlV2Fsa2VyIiwiY29tcGlsZUluZGV4Iiwibm9kZVR5cGUiLCJOb2RlIiwiVEVYVF9OT0RFIiwidGV4dCIsInJlc3VsdHMiLCJwbGFjZWhvbGRlciIsImJlZm9yZSIsIm5leHQiLCJwdXNoIiwiZXF1YWwiLCJyZXNvbHZlVmFsdWUiLCJFTEVNRU5UX05PREUiLCJhdHRyaWJ1dGVzIiwiYXR0ciIsInZhbHVlIiwidHJpbSIsIm5hbWUiLCJwcm9wZXJ0eU5hbWUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJwYXJ0aWFsTmFtZSIsImhvc3QiLCJ0YXJnZXQiLCJhdHRyVmFsdWUiLCJkYXRhIiwiZGF0YU1hcCIsInNldEF0dHJpYnV0ZSIsImFyZ3MiLCJ0eXBlIiwiaW1wb3J0Tm9kZSIsInJlbmRlcldhbGtlciIsImNsb25lZFBhcnRzIiwicmVuZGVySW5kZXgiLCJjdXJyZW50UGFydCIsInNoaWZ0IiwibWFya2VycyIsIk9iamVjdCIsImFzc2lnbiIsImluZGV4T2YiLCJjdXN0b21FbGVtZW50cyIsIkVycm9yIiwiY2hpbGRMaXN0Iiwic3RhcnROb2RlIiwiZW5kTm9kZSIsInByZXZpb3VzQ2hpbGQiLCJjaGlsZCIsImZuIiwibGFzdEFyZ3MiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUVBOztBQUNBOzs7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0EsSUFBSTtBQUFFQSxFQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWUMs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QjtBQUNBbUIsUUFBQUEsU0FBUyxDQUFDckcsT0FBVixDQUFrQixVQUFDeUcsS0FBRCxFQUFXO0FBQzNCdkIsVUFBQUEsTUFBTSxDQUFDNUUsVUFBUCxDQUFrQkMsWUFBbEIsQ0FBK0JrRyxLQUEvQixFQUFzQ0QsYUFBYSxDQUFDOUQsV0FBcEQ7QUFDQThELFVBQUFBLGFBQWEsR0FBR0MsS0FBaEI7QUFDRCxTQUhEO0FBSUQsT0FORCxNQU1PO0FBQ0x2QixRQUFBQSxNQUFNLENBQUN4RixXQUFQLENBQW1Ca0MsUUFBbkI7QUFDRDtBQUNGOztBQUVEd0QsSUFBQUEsSUFBSSxDQUFDVyxPQUFMLENBQWEvRixPQUFiLENBQXFCLGdCQUFhaUIsS0FBYixFQUF1QjtBQUFBO0FBQUEsVUFBckJnQixJQUFxQjtBQUFBLFVBQWZ5RSxFQUFlOztBQUMxQyxVQUFJdEIsSUFBSSxDQUFDdUIsUUFBTCxJQUFpQnZCLElBQUksQ0FBQ3VCLFFBQUwsQ0FBYzFGLEtBQWQsTUFBeUJzRSxJQUFJLENBQUN0RSxLQUFELENBQWxELEVBQTJEO0FBQzNEeUYsTUFBQUEsRUFBRSxDQUFDekIsSUFBRCxFQUFPaEQsSUFBUCxFQUFhc0QsSUFBSSxDQUFDdEUsS0FBRCxDQUFqQixFQUEwQm1FLElBQUksQ0FBQ3VCLFFBQUwsR0FBZ0J2QixJQUFJLENBQUN1QixRQUFMLENBQWMxRixLQUFkLENBQWhCLEdBQXVDd0IsU0FBakUsQ0FBRjtBQUNELEtBSEQ7QUFLQTJDLElBQUFBLElBQUksQ0FBQ3VCLFFBQUwsR0FBZ0JwQixJQUFoQjtBQUNELEdBaEVEO0FBaUVEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3RyaW5naWZ5RWxlbWVudCwgc2hhZHlDU1MsIElTX0lFIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgZGF0YU1hcCwgcmVtb3ZlVGVtcGxhdGUgfSBmcm9tICcuL3V0aWxzJztcblxuaW1wb3J0IHJlc29sdmVWYWx1ZSBmcm9tICcuL3Jlc29sdmVycy92YWx1ZSc7XG5pbXBvcnQgcmVzb2x2ZVByb3BlcnR5IGZyb20gJy4vcmVzb2x2ZXJzL3Byb3BlcnR5JztcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnRyeSB7IHByb2Nlc3MuZW52Lk5PREVfRU5WIH0gY2F0Y2goZSkgeyB2YXIgcHJvY2VzcyA9IHsgZW52OiB7IE5PREVfRU5WOiAncHJvZHVjdGlvbicgfSB9OyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuY29uc3QgVElNRVNUQU1QID0gRGF0ZS5ub3coKTtcblxuZXhwb3J0IGNvbnN0IGdldFBsYWNlaG9sZGVyID0gKGlkID0gMCkgPT4gYHt7aC0ke1RJTUVTVEFNUH0tJHtpZH19fWA7XG5cbmNvbnN0IFBMQUNFSE9MREVSX1JFR0VYUF9URVhUID0gZ2V0UGxhY2Vob2xkZXIoJyhcXFxcZCspJyk7XG5jb25zdCBQTEFDRUhPTERFUl9SRUdFWFBfRVFVQUwgPSBuZXcgUmVnRXhwKGBeJHtQTEFDRUhPTERFUl9SRUdFWFBfVEVYVH0kYCk7XG5jb25zdCBQTEFDRUhPTERFUl9SRUdFWFBfQUxMID0gbmV3IFJlZ0V4cChQTEFDRUhPTERFUl9SRUdFWFBfVEVYVCwgJ2cnKTtcblxuY29uc3QgQVRUUl9QUkVGSVggPSBgLS0ke1RJTUVTVEFNUH0tLWA7XG5jb25zdCBBVFRSX1JFR0VYUCA9IG5ldyBSZWdFeHAoQVRUUl9QUkVGSVgsICdnJyk7XG5cbmNvbnN0IHByZXBhcmVkVGVtcGxhdGVzID0gbmV3IFdlYWtNYXAoKTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIGFwcGx5U2hhZHlDU1ModGVtcGxhdGUsIHRhZ05hbWUpIHtcbiAgaWYgKCF0YWdOYW1lKSByZXR1cm4gdGVtcGxhdGU7XG5cbiAgcmV0dXJuIHNoYWR5Q1NTKChzaGFkeSkgPT4ge1xuICAgIGxldCBtYXAgPSBwcmVwYXJlZFRlbXBsYXRlcy5nZXQodGVtcGxhdGUpO1xuICAgIGlmICghbWFwKSB7XG4gICAgICBtYXAgPSBuZXcgTWFwKCk7XG4gICAgICBwcmVwYXJlZFRlbXBsYXRlcy5zZXQodGVtcGxhdGUsIG1hcCk7XG4gICAgfVxuXG4gICAgbGV0IGNsb25lID0gbWFwLmdldCh0YWdOYW1lKTtcblxuICAgIGlmICghY2xvbmUpIHtcbiAgICAgIGNsb25lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKTtcbiAgICAgIGNsb25lLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuXG4gICAgICBtYXAuc2V0KHRhZ05hbWUsIGNsb25lKTtcblxuICAgICAgY29uc3Qgc3R5bGVzID0gY2xvbmUuY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCdzdHlsZScpO1xuXG4gICAgICBBcnJheS5mcm9tKHN0eWxlcykuZm9yRWFjaCgoc3R5bGUpID0+IHtcbiAgICAgICAgY29uc3QgY291bnQgPSBzdHlsZS5jaGlsZE5vZGVzLmxlbmd0aCArIDE7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkgKz0gMSkge1xuICAgICAgICAgIHN0eWxlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGdldFBsYWNlaG9sZGVyKCkpLCBzdHlsZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBzaGFkeS5wcmVwYXJlVGVtcGxhdGUoY2xvbmUsIHRhZ05hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuICAgIHJldHVybiBjbG9uZTtcbiAgfSwgdGVtcGxhdGUpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTaWduYXR1cmUocGFydHMsIHN0eWxlcykge1xuICBsZXQgc2lnbmF0dXJlID0gcGFydHMucmVkdWNlKChhY2MsIHBhcnQsIGluZGV4KSA9PiB7XG4gICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gcGFydDtcbiAgICB9XG5cbiAgICBpZiAocGFydHMuc2xpY2UoaW5kZXgpLmpvaW4oJycpLm1hdGNoKC9eXFxzKjxcXC9cXHMqKHRhYmxlfHRyfHRoZWFkfHRib2R5fHRmb290fGNvbGdyb3VwKT4vKSkge1xuICAgICAgcmV0dXJuIGAke2FjY308IS0tJHtnZXRQbGFjZWhvbGRlcihpbmRleCAtIDEpfS0tPiR7cGFydH1gO1xuICAgIH1cbiAgICByZXR1cm4gYWNjICsgZ2V0UGxhY2Vob2xkZXIoaW5kZXggLSAxKSArIHBhcnQ7XG4gIH0sICcnKTtcblxuICBpZiAoc3R5bGVzKSB7XG4gICAgc2lnbmF0dXJlICs9IGA8c3R5bGU+XFxuJHtzdHlsZXMuam9pbignXFxuLyotLS0tLS0qL1xcbicpfVxcbjwvc3R5bGU+YDtcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoSVNfSUUpIHtcbiAgICByZXR1cm4gc2lnbmF0dXJlLnJlcGxhY2UoXG4gICAgICAvc3R5bGVcXHMqPVxccyooW1wiXVteXCJdK1tcIl18WyddW14nXStbJ118W15cXHNcIic8Pi9dKykvZyxcbiAgICAgIG1hdGNoID0+IGAke0FUVFJfUFJFRklYfSR7bWF0Y2h9YCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcGVydHlOYW1lKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xccyo9XFxzKlsnXCJdKiQvZywgJycpLnNwbGl0KCcgJykucG9wKCk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VDb21tZW50cyhmcmFnbWVudCkge1xuICBjb25zdCBpdGVyYXRvciA9IGRvY3VtZW50LmNyZWF0ZU5vZGVJdGVyYXRvcihmcmFnbWVudCwgTm9kZUZpbHRlci5TSE9XX0NPTU1FTlQsIG51bGwsIGZhbHNlKTtcbiAgbGV0IG5vZGU7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25kLWFzc2lnblxuICB3aGlsZSAobm9kZSA9IGl0ZXJhdG9yLm5leHROb2RlKCkpIHtcbiAgICBpZiAoUExBQ0VIT0xERVJfUkVHRVhQX0VRVUFMLnRlc3Qobm9kZS50ZXh0Q29udGVudCkpIHtcbiAgICAgIG5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobm9kZS50ZXh0Q29udGVudCksIG5vZGUpO1xuICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW50ZXJuYWxXYWxrZXIoY29udGV4dCkge1xuICBsZXQgbm9kZTtcblxuICByZXR1cm4ge1xuICAgIGdldCBjdXJyZW50Tm9kZSgpIHsgcmV0dXJuIG5vZGU7IH0sXG4gICAgbmV4dE5vZGUoKSB7XG4gICAgICBpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vZGUgPSBjb250ZXh0LmNoaWxkTm9kZXNbMF07XG4gICAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGROb2Rlc1swXTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5uZXh0U2libGluZykge1xuICAgICAgICBub2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUubmV4dFNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhIW5vZGU7XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXh0ZXJuYWxXYWxrZXIoY29udGV4dCkge1xuICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihcbiAgICBjb250ZXh0LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQgfCBOb2RlRmlsdGVyLlNIT1dfVEVYVCxcbiAgICBudWxsLFxuICAgIGZhbHNlLFxuICApO1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuY29uc3QgY3JlYXRlV2Fsa2VyID0gdHlwZW9mIHdpbmRvdy5TaGFkeURPTSA9PT0gJ29iamVjdCcgJiYgd2luZG93LlNoYWR5RE9NLmluVXNlID8gY3JlYXRlSW50ZXJuYWxXYWxrZXIgOiBjcmVhdGVFeHRlcm5hbFdhbGtlcjtcblxuY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZShyYXdQYXJ0cywgaXNTVkcsIHN0eWxlcykge1xuICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gIGNvbnN0IHBhcnRzID0gW107XG5cbiAgbGV0IHNpZ25hdHVyZSA9IGNyZWF0ZVNpZ25hdHVyZShyYXdQYXJ0cywgc3R5bGVzKTtcbiAgaWYgKGlzU1ZHKSBzaWduYXR1cmUgPSBgPHN2Zz4ke3NpZ25hdHVyZX08L3N2Zz5gO1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoSVNfSUUpIHtcbiAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBzaWduYXR1cmU7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLmlubmVySFRNTCA9IGA8dGVtcGxhdGU+JHtzaWduYXR1cmV9PC90ZW1wbGF0ZT5gO1xuICAgIHRlbXBsYXRlLmNvbnRlbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyLmNoaWxkcmVuWzBdLmNvbnRlbnQpO1xuICB9XG5cbiAgaWYgKGlzU1ZHKSB7XG4gICAgY29uc3Qgc3ZnUm9vdCA9IHRlbXBsYXRlLmNvbnRlbnQuZmlyc3RDaGlsZDtcbiAgICB0ZW1wbGF0ZS5jb250ZW50LnJlbW92ZUNoaWxkKHN2Z1Jvb3QpO1xuICAgIEFycmF5LmZyb20oc3ZnUm9vdC5jaGlsZE5vZGVzKS5mb3JFYWNoKG5vZGUgPT4gdGVtcGxhdGUuY29udGVudC5hcHBlbmRDaGlsZChub2RlKSk7XG4gIH1cblxuICByZXBsYWNlQ29tbWVudHModGVtcGxhdGUuY29udGVudCk7XG5cbiAgY29uc3QgY29tcGlsZVdhbGtlciA9IGNyZWF0ZVdhbGtlcih0ZW1wbGF0ZS5jb250ZW50KTtcbiAgbGV0IGNvbXBpbGVJbmRleCA9IDA7XG5cbiAgd2hpbGUgKGNvbXBpbGVXYWxrZXIubmV4dE5vZGUoKSkge1xuICAgIGNvbnN0IG5vZGUgPSBjb21waWxlV2Fsa2VyLmN1cnJlbnROb2RlO1xuXG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zdCB0ZXh0ID0gbm9kZS50ZXh0Q29udGVudDtcblxuICAgICAgaWYgKCF0ZXh0Lm1hdGNoKFBMQUNFSE9MREVSX1JFR0VYUF9FUVVBTCkpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IHRleHQubWF0Y2goUExBQ0VIT0xERVJfUkVHRVhQX0FMTCk7XG4gICAgICAgIGlmIChyZXN1bHRzKSB7XG4gICAgICAgICAgbGV0IGN1cnJlbnROb2RlID0gbm9kZTtcbiAgICAgICAgICByZXN1bHRzXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIHBsYWNlaG9sZGVyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IFtiZWZvcmUsIG5leHRdID0gYWNjLnBvcCgpLnNwbGl0KHBsYWNlaG9sZGVyKTtcbiAgICAgICAgICAgICAgaWYgKGJlZm9yZSkgYWNjLnB1c2goYmVmb3JlKTtcbiAgICAgICAgICAgICAgYWNjLnB1c2gocGxhY2Vob2xkZXIpO1xuICAgICAgICAgICAgICBpZiAobmV4dCkgYWNjLnB1c2gobmV4dCk7XG4gICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCBbdGV4dF0pXG4gICAgICAgICAgICAuZm9yRWFjaCgocGFydCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudE5vZGUudGV4dENvbnRlbnQgPSBwYXJ0O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50Tm9kZVxuICAgICAgICAgICAgICAgICAgLmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShwYXJ0KSwgY3VycmVudE5vZGUubmV4dFNpYmxpbmcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBlcXVhbCA9IG5vZGUudGV4dENvbnRlbnQubWF0Y2goUExBQ0VIT0xERVJfUkVHRVhQX0VRVUFMKTtcbiAgICAgIGlmIChlcXVhbCkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoIUlTX0lFKSBub2RlLnRleHRDb250ZW50ID0gJyc7XG4gICAgICAgIHBhcnRzW2VxdWFsWzFdXSA9IFtjb21waWxlSW5kZXgsIHJlc29sdmVWYWx1ZV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb25lbHktaWZcbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICBBcnJheS5mcm9tKG5vZGUuYXR0cmlidXRlcykuZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXR0ci52YWx1ZS50cmltKCk7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICBjb25zdCBuYW1lID0gSVNfSUUgPyBhdHRyLm5hbWUucmVwbGFjZShBVFRSX1BSRUZJWCwgJycpIDogYXR0ci5uYW1lO1xuICAgICAgICAgIGNvbnN0IGVxdWFsID0gdmFsdWUubWF0Y2goUExBQ0VIT0xERVJfUkVHRVhQX0VRVUFMKTtcbiAgICAgICAgICBpZiAoZXF1YWwpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IGdldFByb3BlcnR5TmFtZShyYXdQYXJ0c1tlcXVhbFsxXV0pO1xuICAgICAgICAgICAgcGFydHNbZXF1YWxbMV1dID0gW2NvbXBpbGVJbmRleCwgcmVzb2x2ZVByb3BlcnR5KG5hbWUsIHByb3BlcnR5TmFtZSwgaXNTVkcpXTtcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHIubmFtZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSB2YWx1ZS5tYXRjaChQTEFDRUhPTERFUl9SRUdFWFBfQUxMKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHRzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcnRpYWxOYW1lID0gYGF0dHJfXyR7bmFtZX1gO1xuXG4gICAgICAgICAgICAgIHJlc3VsdHMuZm9yRWFjaCgocGxhY2Vob2xkZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgWywgaWRdID0gcGxhY2Vob2xkZXIubWF0Y2goUExBQ0VIT0xERVJfUkVHRVhQX0VRVUFMKTtcbiAgICAgICAgICAgICAgICBwYXJ0c1tpZF0gPSBbY29tcGlsZUluZGV4LCAoaG9zdCwgdGFyZ2V0LCBhdHRyVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBkYXRhTWFwLmdldCh0YXJnZXQsIHt9KTtcbiAgICAgICAgICAgICAgICAgIGRhdGFbcGFydGlhbE5hbWVdID0gKGRhdGFbcGFydGlhbE5hbWVdIHx8IHZhbHVlKS5yZXBsYWNlKHBsYWNlaG9sZGVyLCBhdHRyVmFsdWUgPT0gbnVsbCA/ICcnIDogYXR0clZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgaWYgKChyZXN1bHRzLmxlbmd0aCA9PT0gMSkgfHwgKGluZGV4ICsgMSA9PT0gcmVzdWx0cy5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUobmFtZSwgZGF0YVtwYXJ0aWFsTmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICBkYXRhW3BhcnRpYWxOYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgYXR0ci52YWx1ZSA9ICcnO1xuXG4gICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICAgIGlmIChJU19JRSAmJiBuYW1lICE9PSBhdHRyLm5hbWUpIHtcbiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShhdHRyLm5hbWUpO1xuICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsICcnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tcGlsZUluZGV4ICs9IDE7XG4gIH1cblxuICByZXR1cm4gKGhvc3QsIHRhcmdldCwgYXJncykgPT4ge1xuICAgIGNvbnN0IGRhdGEgPSBkYXRhTWFwLmdldCh0YXJnZXQsIHsgdHlwZTogJ2Z1bmN0aW9uJyB9KTtcblxuICAgIGlmICh0ZW1wbGF0ZSAhPT0gZGF0YS50ZW1wbGF0ZSkge1xuICAgICAgaWYgKGRhdGEudGVtcGxhdGUpIHJlbW92ZVRlbXBsYXRlKHRhcmdldCk7XG5cbiAgICAgIGNvbnN0IGZyYWdtZW50ID0gZG9jdW1lbnQuaW1wb3J0Tm9kZShhcHBseVNoYWR5Q1NTKHRlbXBsYXRlLCBob3N0LnRhZ05hbWUpLmNvbnRlbnQsIHRydWUpO1xuXG4gICAgICBjb25zdCByZW5kZXJXYWxrZXIgPSBjcmVhdGVXYWxrZXIoZnJhZ21lbnQpO1xuICAgICAgY29uc3QgY2xvbmVkUGFydHMgPSBwYXJ0cy5zbGljZSgwKTtcblxuICAgICAgbGV0IHJlbmRlckluZGV4ID0gMDtcbiAgICAgIGxldCBjdXJyZW50UGFydCA9IGNsb25lZFBhcnRzLnNoaWZ0KCk7XG5cbiAgICAgIGNvbnN0IG1hcmtlcnMgPSBbXTtcblxuICAgICAgT2JqZWN0LmFzc2lnbihkYXRhLCB7IHRlbXBsYXRlLCBtYXJrZXJzIH0pO1xuXG4gICAgICB3aGlsZSAocmVuZGVyV2Fsa2VyLm5leHROb2RlKCkpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHJlbmRlcldhbGtlci5jdXJyZW50Tm9kZTtcblxuICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgIGlmIChQTEFDRUhPTERFUl9SRUdFWFBfRVFVQUwudGVzdChub2RlLnRleHRDb250ZW50KSkge1xuICAgICAgICAgICAgbm9kZS50ZXh0Q29udGVudCA9ICcnO1xuICAgICAgICAgIH0gZWxzZSBpZiAoSVNfSUUpIHtcbiAgICAgICAgICAgIG5vZGUudGV4dENvbnRlbnQgPSBub2RlLnRleHRDb250ZW50LnJlcGxhY2UoQVRUUl9SRUdFWFAsICcnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBub2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIGlmIChub2RlLnRhZ05hbWUuaW5kZXhPZignLScpID4gLTEgJiYgIWN1c3RvbUVsZW1lbnRzLmdldChub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKGBNaXNzaW5nICcke3N0cmluZ2lmeUVsZW1lbnQobm9kZSl9JyBlbGVtZW50IGRlZmluaXRpb24gaW4gJyR7c3RyaW5naWZ5RWxlbWVudChob3N0KX0nYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKGN1cnJlbnRQYXJ0ICYmIGN1cnJlbnRQYXJ0WzBdID09PSByZW5kZXJJbmRleCkge1xuICAgICAgICAgIG1hcmtlcnMucHVzaChbbm9kZSwgY3VycmVudFBhcnRbMV1dKTtcbiAgICAgICAgICBjdXJyZW50UGFydCA9IGNsb25lZFBhcnRzLnNoaWZ0KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJJbmRleCArPSAxO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjaGlsZExpc3QgPSBBcnJheS5mcm9tKGZyYWdtZW50LmNoaWxkTm9kZXMpO1xuXG4gICAgICBkYXRhLnN0YXJ0Tm9kZSA9IGNoaWxkTGlzdFswXTtcbiAgICAgIGRhdGEuZW5kTm9kZSA9IGNoaWxkTGlzdFtjaGlsZExpc3QubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmICh0YXJnZXQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICAgIGxldCBwcmV2aW91c0NoaWxkID0gdGFyZ2V0O1xuICAgICAgICBjaGlsZExpc3QuZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgICB0YXJnZXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2hpbGQsIHByZXZpb3VzQ2hpbGQubmV4dFNpYmxpbmcpO1xuICAgICAgICAgIHByZXZpb3VzQ2hpbGQgPSBjaGlsZDtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXQuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRhdGEubWFya2Vycy5mb3JFYWNoKChbbm9kZSwgZm5dLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGRhdGEubGFzdEFyZ3MgJiYgZGF0YS5sYXN0QXJnc1tpbmRleF0gPT09IGFyZ3NbaW5kZXhdKSByZXR1cm47XG4gICAgICBmbihob3N0LCBub2RlLCBhcmdzW2luZGV4XSwgZGF0YS5sYXN0QXJncyA/IGRhdGEubGFzdEFyZ3NbaW5kZXhdIDogdW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIGRhdGEubGFzdEFyZ3MgPSBhcmdzO1xuICB9O1xufVxuIl19
{
"name": "hybrids",
"version": "2.0.0",
"version": "2.0.1",
"description": "UI library for creating Web Components",

@@ -32,14 +32,14 @@ "main": "lib/index.js",

"devDependencies": {
"@babel/cli": "^7.2.0",
"@babel/core": "^7.2.2",
"@babel/preset-env": "^7.2.0",
"babel-loader": "^8.0.4",
"babel-plugin-istanbul": "^5.1.0",
"coveralls": "^3.0.2",
"eslint": "^5.10.0",
"@babel/cli": "^7.2.3",
"@babel/core": "^7.3.4",
"@babel/preset-env": "^7.3.4",
"babel-loader": "^8.0.5",
"babel-plugin-istanbul": "^5.1.1",
"coveralls": "^3.0.3",
"eslint": "^5.15.0",
"eslint-config-airbnb-base": "^13.1.0",
"eslint-loader": "^2.1.1",
"eslint-plugin-import": "^2.14.0",
"eslint-loader": "^2.1.2",
"eslint-plugin-import": "^2.16.0",
"jasmine-core": "^3.3.0",
"karma": "^3.1.4",
"karma": "^4.0.1",
"karma-chrome-launcher": "^2.0.0",

@@ -53,14 +53,14 @@ "karma-coverage": "^1.1.1",

"karma-webpack": "^3.0.5",
"standard-version": "^4.4.0",
"webpack": "^4.27.1",
"webpack-cli": "^3.1.2"
"standard-version": "^5.0.1",
"webpack": "^4.29.6",
"webpack-cli": "^3.2.3"
},
"dependencies": {
"@webcomponents/custom-elements": "^1.2.1",
"@webcomponents/shadycss": "^1.7.1",
"@webcomponents/shadydom": "^1.3.1",
"@webcomponents/shadycss": "^1.9.0",
"@webcomponents/shadydom": "^1.5.0",
"@webcomponents/template": "^1.4.0",
"@webcomponents/webcomponents-platform": "^1.0.0",
"core-js": "^2.6.1"
"core-js": "^2.6.5"
}
}

@@ -7,3 +7,3 @@ <h1>

[![npm version](https://img.shields.io/npm/v/hybrids.svg?style=flat)](https://www.npmjs.com/package/hybrids)
[![bundle size](https://img.shields.io/bundlephobia/minzip/hybrids.svg?label=minzip)](https://bundlephobia.com/result?p=hybrids@1.4.2)
[![bundle size](https://img.shields.io/bundlephobia/minzip/hybrids.svg?label=minzip)](https://bundlephobia.com/result?p=hybrids)
[![build status](https://img.shields.io/travis/hybridsjs/hybrids.svg?style=flat)](https://travis-ci.org/hybridsjs/hybrids)

@@ -84,10 +84,2 @@ [![coverage status](https://img.shields.io/coveralls/github/hybridsjs/hybrids.svg?style=flat)](https://coveralls.io/github/hybridsjs/hybrids?branch=master)

### Live Examples
- [&lt;simple-counter&gt;](https://stackblitz.com/edit/hybrids-simple-counter?file=simple-counter.js) - a button with counter controlled by own state
- [&lt;redux-counter&gt;](https://stackblitz.com/edit/hybrids-redux-counter?file=redux-counter.js) - Redux library for state management
- [&lt;react-counter&gt;](https://stackblitz.com/edit/hybrids-react-counter?file=react-counter.js) - render factory and React library for rendering in shadow DOM
- [&lt;app-todos&gt;](https://stackblitz.com/edit/hybrids-parent-factory?file=index.js) - todo list using parent factory for state management
- [&lt;tab-group&gt;](https://stackblitz.com/edit/hybrids-children-factory?file=index.js) - switching tabs using children factory
### Articles

@@ -98,2 +90,7 @@

#### Core Concepts Series
* [From classes to plain objects and pure functions](https://dev.to/smalluban/from-classes-to-plain-objects-and-pure-functions-2gip)
* [Say goodbye to lifecycle methods, and focus on productive code](https://dev.to/smalluban/how-to-say-goodbye-to-lifecycle-methods-and-focus-on-productive-code-175)
### Videos

@@ -103,3 +100,12 @@

* [Hybrids - Web Components with Simple and Functional API](https://youtu.be/ni0d34Yrugk) (PL, WarsawJS Meetup #46)
### Live Examples
- [&lt;simple-counter&gt;](https://stackblitz.com/edit/hybrids-simple-counter?file=simple-counter.js) - a button with counter controlled by own state
- [&lt;redux-counter&gt;](https://stackblitz.com/edit/hybrids-redux-counter?file=redux-counter.js) - Redux library for state management
- [&lt;react-counter&gt;](https://stackblitz.com/edit/hybrids-react-counter?file=react-counter.js) - render factory and React library for rendering in shadow DOM
- [&lt;app-todos&gt;](https://stackblitz.com/edit/hybrids-parent-factory?file=index.js) - todo list using parent factory for state management
- [&lt;tab-group&gt;](https://stackblitz.com/edit/hybrids-children-factory?file=index.js) - switching tabs using children factory
- [&lt;async-user&gt;](https://stackblitz.com/edit/hybrids-async-user?file=async-user.js) - async data in the template
## Browser Support

@@ -106,0 +112,0 @@

@@ -62,3 +62,4 @@ import { stringifyElement, shadyCSS, IS_IE } from '../utils';

}
if (parts.slice(index).join('').match(/\s*<\/\s*(table|tr|thead|tbody|tfoot|colgroup)>/)) {
if (parts.slice(index).join('').match(/^\s*<\/\s*(table|tr|thead|tbody|tfoot|colgroup)>/)) {
return `${acc}<!--${getPlaceholder(index - 1)}-->${part}`;

@@ -65,0 +66,0 @@ }

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc