valyrian.js 6.0.6 → 6.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +5 -4
- package/dist/index.js +5 -4
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/lib/index.ts +5 -4
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -87,7 +87,8 @@ var reservedProps = {
|
|
|
87
87
|
"v-for": true,
|
|
88
88
|
"v-show": true,
|
|
89
89
|
"v-class": true,
|
|
90
|
-
"v-html": true
|
|
90
|
+
"v-html": true,
|
|
91
|
+
"v-model": true
|
|
91
92
|
};
|
|
92
93
|
var eventListenerNames = {};
|
|
93
94
|
var onCleanupList = [];
|
|
@@ -438,7 +439,7 @@ var directives = {
|
|
|
438
439
|
"v-model": ([model, property, event], vnode, oldVnode) => {
|
|
439
440
|
let value;
|
|
440
441
|
let handler;
|
|
441
|
-
if (vnode.
|
|
442
|
+
if (vnode.tag === "input") {
|
|
442
443
|
event = event || "oninput";
|
|
443
444
|
switch (vnode.props.type) {
|
|
444
445
|
case "checkbox": {
|
|
@@ -477,7 +478,7 @@ var directives = {
|
|
|
477
478
|
setAttribute("value", model[property], vnode, oldVnode);
|
|
478
479
|
}
|
|
479
480
|
}
|
|
480
|
-
} else if (vnode.
|
|
481
|
+
} else if (vnode.tag === "select") {
|
|
481
482
|
event = event || "onclick";
|
|
482
483
|
if (vnode.props.multiple) {
|
|
483
484
|
handler = (e) => {
|
|
@@ -508,7 +509,7 @@ var directives = {
|
|
|
508
509
|
}
|
|
509
510
|
});
|
|
510
511
|
}
|
|
511
|
-
} else if (vnode.
|
|
512
|
+
} else if (vnode.tag === "textarea") {
|
|
512
513
|
event = event || "oninput";
|
|
513
514
|
vnode.children = [model[property]];
|
|
514
515
|
}
|
package/dist/index.js
CHANGED
|
@@ -60,7 +60,8 @@ var reservedProps = {
|
|
|
60
60
|
"v-for": true,
|
|
61
61
|
"v-show": true,
|
|
62
62
|
"v-class": true,
|
|
63
|
-
"v-html": true
|
|
63
|
+
"v-html": true,
|
|
64
|
+
"v-model": true
|
|
64
65
|
};
|
|
65
66
|
var eventListenerNames = {};
|
|
66
67
|
var onCleanupList = [];
|
|
@@ -411,7 +412,7 @@ var directives = {
|
|
|
411
412
|
"v-model": ([model, property, event], vnode, oldVnode) => {
|
|
412
413
|
let value;
|
|
413
414
|
let handler;
|
|
414
|
-
if (vnode.
|
|
415
|
+
if (vnode.tag === "input") {
|
|
415
416
|
event = event || "oninput";
|
|
416
417
|
switch (vnode.props.type) {
|
|
417
418
|
case "checkbox": {
|
|
@@ -450,7 +451,7 @@ var directives = {
|
|
|
450
451
|
setAttribute("value", model[property], vnode, oldVnode);
|
|
451
452
|
}
|
|
452
453
|
}
|
|
453
|
-
} else if (vnode.
|
|
454
|
+
} else if (vnode.tag === "select") {
|
|
454
455
|
event = event || "onclick";
|
|
455
456
|
if (vnode.props.multiple) {
|
|
456
457
|
handler = (e) => {
|
|
@@ -481,7 +482,7 @@ var directives = {
|
|
|
481
482
|
}
|
|
482
483
|
});
|
|
483
484
|
}
|
|
484
|
-
} else if (vnode.
|
|
485
|
+
} else if (vnode.tag === "textarea") {
|
|
485
486
|
event = event || "oninput";
|
|
486
487
|
vnode.children = [model[property]];
|
|
487
488
|
}
|
package/dist/index.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{var e="__component__",o="#text",n=Boolean("undefined"!=typeof process&&process.versions&&process.versions.node),t=void 0,r=function(e,o,n){this.props=o,this.children=n,this.tag=e};function i(e){return"function"==typeof e||"object"==typeof e&&null!==e&&"view"in e}function d(o){return o instanceof r&&o.tag===e}function p(e,o=!1){return o?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e)}function l(e){if(3===e.nodeType){let n=G(o,{},[]);return n.nodeValue=e.nodeValue,n.dom=e,n}if(1===e.nodeType){let o=[];for(let n=0;n<e.childNodes.length;n++){let t=l(e.childNodes[n]);t&&o.push(t)}let n={};[].forEach.call(e.attributes,e=>n[e.nodeName]=e.nodeValue);let t=G(e.tagName.toLowerCase(),n,...o);return t.dom=e,t}}var s=e=>{let o=p("div");return o.innerHTML=e.trim(),[].map.call(o.childNodes,e=>l(e))},a={key:!0,state:!0,oncreate:!0,onupdate:!0,onremove:!0,shouldupdate:!0,"v-once":!0,"v-if":!0,"v-unless":!0,"v-for":!0,"v-show":!0,"v-class":!0,"v-html":!0},u={},c=[],m=[],f=[],h=[],v={};function g(e){let o=e.target,n=`v-on${e.type}`;for(;o;){if(o[n])return o[n](e,o),void(e.defaultPrevented||y());o=o.parentNode}}function V(e){for(let o=0;o<e.length;o++)e[o]();e=[]}function y(){if(G.component&&G.mainVnode){c.length&&V(c);let e=G.mainVnode;if(G.mainVnode=new r(G.mainVnode.tag,G.mainVnode.props,[G.component]),G.mainVnode.dom=e.dom,_(G.mainVnode,e),e=null,!1===G.isMounted?(m.length&&V(m),G.isMounted=!0):f.length&&V(f),n)return G.mainVnode.dom.innerHTML}}function w(){if(G.isMounted&&G.mainVnode&&G.component){c.length&&V(c),h.length&&V(h);let e=G.mainVnode;if(G.mainVnode=new r(G.mainVnode.tag,G.mainVnode.props,[]),G.mainVnode.dom=e.dom,G.mainVnode.isSVG=e.isSVG,_(G.mainVnode,e),e=null,G.component=null,G.isMounted=!1,n)return G.mainVnode.dom.innerHTML}}var N=new r("__empty__",{},[]);function C(e){for(let n=0;n<e.children.length;n++)e.children[n].tag!==o&&C(e.children[n]);e.props.onremove&&e.props.onremove(e)}function x(e,o,n,t){return a[e]?b[e]?b[e](n.props[e],n,t):void 0:"function"==typeof o?(e in u==!1&&(u[e]=!0,G.container.addEventListener(e.slice(2),g)),void(n.dom[`v-${e}`]=o)):void(e in n.dom&&!1===n.isSVG?n.dom[e]!=o&&(n.dom[e]=o):t&&t.props[e]===o||(!1===o?n.dom.removeAttribute(e):n.dom.setAttribute(e,o)))}function k(e,o,n,t){n.props[e]=o,x(e,o,n,t)}function M(e,o){for(let n in e.props)if(!1===x(n,e.props[n],e,o))return;if(o)for(let n in o.props)n in e.props==!1&&"function"!=typeof o.props[n]&&n in a==!1&&(n in o.dom&&!1===e.isSVG?o.dom[n]=null:o.dom.removeAttribute(n))}function _(n,i=N){v.vnode=n,v.oldVnode=i===N?t:i;let d=n.children,l=i.children;for(let i=0;i<d.length;i++){let p=d[i];if(p instanceof r){if(p.tag!==o){if(p.tag===e){let e=p.component;v.component=e;let o=("view"in e?e.view:e).call(e,p.props,...p.children);d.splice(i--,1,o);continue}p.isSVG=n.isSVG||"svg"===p.tag}}else Array.isArray(p)?d.splice(i--,1,...p):null===p||p===t?d.splice(i--,1):(d[i]=new r(o,{},[]),d[i].nodeValue=p)}let s=l.length,a=d.length;if(0!==a)if(s&&"key"in d[0].props&&"key"in l[0].props){let e={};for(let o=0;o<s;o++)e[l[o].props.key]=o;let o={};for(let e=0;e<a;e++)o[d[e].props.key]=e;for(let r=0;r<a;r++){let i=d[r],s=l[e[i.props.key]],a=!0;s?(i.dom=s.dom,"v-once"in i.props||i.props.shouldupdate&&!1===i.props.shouldupdate(i,s)?(i.children=s.children,a=!1):(M(i,s),G.isMounted?i.props.onupdate&&i.props.onupdate(i,s):i.props.oncreate&&i.props.oncreate(i))):(i.dom=p(i.tag,i.isSVG),M(i),i.props.oncreate&&i.props.oncreate(i)),n.dom.childNodes[r]===t?n.dom.appendChild(i.dom):n.dom.childNodes[r]!==i.dom&&(l[r]&&o[l[r].props.key]===t&&C(l[r]),n.dom.replaceChild(i.dom,n.dom.childNodes[r])),a&&_(i,s)}for(let e=a;e<s;e++)if(o[l[e].props.key]===t){let o=l[e];C(o),o.dom.parentNode&&o.dom.parentNode.removeChild(o.dom)}}else{for(let e=0;e<a;e++){let t=d[e];if(e<s){let r=l[e];if(t.tag===o){if(r.tag===o){t.dom=r.dom,t.dom.nodeValue!=t.nodeValue&&(t.dom.nodeValue=t.nodeValue);continue}t.dom=document.createTextNode(t.nodeValue),C(r),n.dom.replaceChild(t.dom,r.dom);continue}if(r.tag===t.tag){if(t.dom=r.dom,t.props["v-once"]||t.props.shouldupdate&&!1===t.props.shouldupdate(t,r)){t.children=r.children;continue}M(t,r),G.isMounted?t.props.onupdate&&t.props.onupdate(t,r):t.props.oncreate&&t.props.oncreate(t),_(t,r);continue}t.dom=p(t.tag,t.isSVG),M(t),r.tag!==o&&C(r),t.props.oncreate&&t.props.oncreate(t),n.dom.replaceChild(t.dom,r.dom),_(t,N)}else t.tag!==o?(t.dom=p(t.tag,t.isSVG),M(t),n.dom.appendChild(t.dom),t.props.oncreate&&t.props.oncreate(t),_(t,N)):(t.dom=document.createTextNode(t.nodeValue),n.dom.appendChild(t.dom))}for(let e=a;e<s;e++){let n=l[e];n.tag!==o&&C(n),n.dom.parentNode&&n.dom.parentNode.removeChild(n.dom)}}else{for(let e=0;e<s;e++)l[e].tag!==o&&C(l[e]);n.dom.textContent=""}}function S(e){return(n,t,r)=>{if(e?n:!n){let e=document.createTextNode("");return r&&r.dom&&r.dom.parentNode&&(r.tag!==o&&C(r),r.dom.parentNode.replaceChild(e,r.dom)),t.tag=o,t.children=[],t.props={},t.dom=e,!1}}}var b={"v-if":S(!1),"v-unless":S(!0),"v-for":(e,o)=>{o.children=e.map(o.children[0])},"v-show":(e,o)=>{o.dom.style.display=e?"":"none"},"v-class":(e,o)=>{for(let n in e)o.dom.classList.toggle(n,e[n])},"v-html":(e,o)=>{o.children=[s(e)]},"v-model":([e,o,n],t,r)=>{let i,d;if("input"===t.
|
|
1
|
+
(()=>{var e="__component__",o="#text",n=Boolean("undefined"!=typeof process&&process.versions&&process.versions.node),t=void 0,r=function(e,o,n){this.props=o,this.children=n,this.tag=e};function i(e){return"function"==typeof e||"object"==typeof e&&null!==e&&"view"in e}function d(o){return o instanceof r&&o.tag===e}function p(e,o=!1){return o?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e)}function l(e){if(3===e.nodeType){let n=G(o,{},[]);return n.nodeValue=e.nodeValue,n.dom=e,n}if(1===e.nodeType){let o=[];for(let n=0;n<e.childNodes.length;n++){let t=l(e.childNodes[n]);t&&o.push(t)}let n={};[].forEach.call(e.attributes,e=>n[e.nodeName]=e.nodeValue);let t=G(e.tagName.toLowerCase(),n,...o);return t.dom=e,t}}var s=e=>{let o=p("div");return o.innerHTML=e.trim(),[].map.call(o.childNodes,e=>l(e))},a={key:!0,state:!0,oncreate:!0,onupdate:!0,onremove:!0,shouldupdate:!0,"v-once":!0,"v-if":!0,"v-unless":!0,"v-for":!0,"v-show":!0,"v-class":!0,"v-html":!0,"v-model":!0},u={},c=[],m=[],f=[],h=[],v={};function g(e){let o=e.target,n=`v-on${e.type}`;for(;o;){if(o[n])return o[n](e,o),void(e.defaultPrevented||y());o=o.parentNode}}function V(e){for(let o=0;o<e.length;o++)e[o]();e=[]}function y(){if(G.component&&G.mainVnode){c.length&&V(c);let e=G.mainVnode;if(G.mainVnode=new r(G.mainVnode.tag,G.mainVnode.props,[G.component]),G.mainVnode.dom=e.dom,_(G.mainVnode,e),e=null,!1===G.isMounted?(m.length&&V(m),G.isMounted=!0):f.length&&V(f),n)return G.mainVnode.dom.innerHTML}}function w(){if(G.isMounted&&G.mainVnode&&G.component){c.length&&V(c),h.length&&V(h);let e=G.mainVnode;if(G.mainVnode=new r(G.mainVnode.tag,G.mainVnode.props,[]),G.mainVnode.dom=e.dom,G.mainVnode.isSVG=e.isSVG,_(G.mainVnode,e),e=null,G.component=null,G.isMounted=!1,n)return G.mainVnode.dom.innerHTML}}var N=new r("__empty__",{},[]);function C(e){for(let n=0;n<e.children.length;n++)e.children[n].tag!==o&&C(e.children[n]);e.props.onremove&&e.props.onremove(e)}function x(e,o,n,t){return a[e]?b[e]?b[e](n.props[e],n,t):void 0:"function"==typeof o?(e in u==!1&&(u[e]=!0,G.container.addEventListener(e.slice(2),g)),void(n.dom[`v-${e}`]=o)):void(e in n.dom&&!1===n.isSVG?n.dom[e]!=o&&(n.dom[e]=o):t&&t.props[e]===o||(!1===o?n.dom.removeAttribute(e):n.dom.setAttribute(e,o)))}function k(e,o,n,t){n.props[e]=o,x(e,o,n,t)}function M(e,o){for(let n in e.props)if(!1===x(n,e.props[n],e,o))return;if(o)for(let n in o.props)n in e.props==!1&&"function"!=typeof o.props[n]&&n in a==!1&&(n in o.dom&&!1===e.isSVG?o.dom[n]=null:o.dom.removeAttribute(n))}function _(n,i=N){v.vnode=n,v.oldVnode=i===N?t:i;let d=n.children,l=i.children;for(let i=0;i<d.length;i++){let p=d[i];if(p instanceof r){if(p.tag!==o){if(p.tag===e){let e=p.component;v.component=e;let o=("view"in e?e.view:e).call(e,p.props,...p.children);d.splice(i--,1,o);continue}p.isSVG=n.isSVG||"svg"===p.tag}}else Array.isArray(p)?d.splice(i--,1,...p):null===p||p===t?d.splice(i--,1):(d[i]=new r(o,{},[]),d[i].nodeValue=p)}let s=l.length,a=d.length;if(0!==a)if(s&&"key"in d[0].props&&"key"in l[0].props){let e={};for(let o=0;o<s;o++)e[l[o].props.key]=o;let o={};for(let e=0;e<a;e++)o[d[e].props.key]=e;for(let r=0;r<a;r++){let i=d[r],s=l[e[i.props.key]],a=!0;s?(i.dom=s.dom,"v-once"in i.props||i.props.shouldupdate&&!1===i.props.shouldupdate(i,s)?(i.children=s.children,a=!1):(M(i,s),G.isMounted?i.props.onupdate&&i.props.onupdate(i,s):i.props.oncreate&&i.props.oncreate(i))):(i.dom=p(i.tag,i.isSVG),M(i),i.props.oncreate&&i.props.oncreate(i)),n.dom.childNodes[r]===t?n.dom.appendChild(i.dom):n.dom.childNodes[r]!==i.dom&&(l[r]&&o[l[r].props.key]===t&&C(l[r]),n.dom.replaceChild(i.dom,n.dom.childNodes[r])),a&&_(i,s)}for(let e=a;e<s;e++)if(o[l[e].props.key]===t){let o=l[e];C(o),o.dom.parentNode&&o.dom.parentNode.removeChild(o.dom)}}else{for(let e=0;e<a;e++){let t=d[e];if(e<s){let r=l[e];if(t.tag===o){if(r.tag===o){t.dom=r.dom,t.dom.nodeValue!=t.nodeValue&&(t.dom.nodeValue=t.nodeValue);continue}t.dom=document.createTextNode(t.nodeValue),C(r),n.dom.replaceChild(t.dom,r.dom);continue}if(r.tag===t.tag){if(t.dom=r.dom,t.props["v-once"]||t.props.shouldupdate&&!1===t.props.shouldupdate(t,r)){t.children=r.children;continue}M(t,r),G.isMounted?t.props.onupdate&&t.props.onupdate(t,r):t.props.oncreate&&t.props.oncreate(t),_(t,r);continue}t.dom=p(t.tag,t.isSVG),M(t),r.tag!==o&&C(r),t.props.oncreate&&t.props.oncreate(t),n.dom.replaceChild(t.dom,r.dom),_(t,N)}else t.tag!==o?(t.dom=p(t.tag,t.isSVG),M(t),n.dom.appendChild(t.dom),t.props.oncreate&&t.props.oncreate(t),_(t,N)):(t.dom=document.createTextNode(t.nodeValue),n.dom.appendChild(t.dom))}for(let e=a;e<s;e++){let n=l[e];n.tag!==o&&C(n),n.dom.parentNode&&n.dom.parentNode.removeChild(n.dom)}}else{for(let e=0;e<s;e++)l[e].tag!==o&&C(l[e]);n.dom.textContent=""}}function S(e){return(n,t,r)=>{if(e?n:!n){let e=document.createTextNode("");return r&&r.dom&&r.dom.parentNode&&(r.tag!==o&&C(r),r.dom.parentNode.replaceChild(e,r.dom)),t.tag=o,t.children=[],t.props={},t.dom=e,!1}}}var b={"v-if":S(!1),"v-unless":S(!0),"v-for":(e,o)=>{o.children=e.map(o.children[0])},"v-show":(e,o)=>{o.dom.style.display=e?"":"none"},"v-class":(e,o)=>{for(let n in e)o.dom.classList.toggle(n,e[n])},"v-html":(e,o)=>{o.children=[s(e)]},"v-model":([e,o,n],t,r)=>{let i,d;if("input"===t.tag)switch(n=n||"oninput",t.props.type){case"checkbox":Array.isArray(e[o])?(d=n=>{let t=n.target.value,r=e[o].indexOf(t);-1===r?e[o].push(t):e[o].splice(r,1)},i=-1!==e[o].indexOf(t.dom.value)):"value"in t.props?(d=()=>{e[o]===t.props.value?e[o]=null:e[o]=t.props.value},i=e[o]===t.props.value):(d=()=>e[o]=!e[o],i=e[o]),k("checked",i,t,r);break;case"radio":k("checked",e[o]===t.dom.value,t,r);break;default:k("value",e[o],t,r)}else"select"===t.tag?(n=n||"onclick",t.props.multiple?(d=n=>{let t=n.target.value;if(n.ctrlKey){let n=e[o].indexOf(t);-1===n?e[o].push(t):e[o].splice(n,1)}else e[o].splice(0,e[o].length),e[o].push(t)},t.children.forEach(n=>{if("option"===n.tag){let t="value"in n.props?n.props.value:n.children.join("").trim();n.props.selected=-1!==e[o].indexOf(t)}})):t.children.forEach(n=>{if("option"===n.tag){let t="value"in n.props?n.props.value:n.children.join("").trim();n.props.selected=t===e[o]}})):"textarea"===t.tag&&(n=n||"oninput",t.children=[e[o]]);t.props[n]||(d||(d=n=>e[o]=n.target.value),k(n,d,t,r))}},A=new Map;var G=function(e,o,...n){if("string"==typeof e)return new r(e,o||{},n);const t=new r("__component__",o||{},n);return t.component=e,t};G.fragment=(e,...o)=>o,G.current=v,G.directives=b,G.reservedProps=a,G.isVnode=function(e){return e instanceof r},G.isComponent=i,G.isVnodeComponent=d,G.isMounted=!1,G.isNodeJs=n,G.trust=s,G.onCleanup=function(e){-1===c.indexOf(e)&&c.push(e)},G.onUnmount=function(e){-1===h.indexOf(e)&&h.push(e)},G.onMount=function(e){-1===m.indexOf(e)&&m.push(e)},G.onUpdate=function(e){-1===f.indexOf(e)&&f.push(e)},G.mount=function(e,o){let t,r=null;if(r=n?"string"==typeof e?p("svg"===e?"svg":"div","svg"===e):e:"string"==typeof e?document.querySelectorAll(e)[0]:e,!r)throw new Error("Container not found");if(d(o))t=o;else{if(!i(o))throw new Error("Component must be a Valyrian Component or a Vnode component");t=G(o,{})}return G.isMounted&&w(),G.component=t,G.container=r,G.mainVnode=l(r),y()},G.unmount=w,G.update=y,G.setAttribute=k,G.directive=function(e,o){let n=`v-${e}`;b[n]=o,a[n]=!0},G.use=function(e,o){if(A.has(e))return A.get(e);let n=e(G,o);return A.set(e,n),n};var E={default:G};"undefined"!=typeof module?module.exports=E:self.Valyrian=E})();
|
package/dist/index.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9pbmRleC50cyJdLCJuYW1lcyI6WyJDb21wb25lbnRTdHJpbmciLCJUZXh0U3RyaW5nIiwiaXNOb2RlSnMiLCJCb29sZWFuIiwicHJvY2VzcyIsInZlcnNpb25zIiwibm9kZSIsIlVuZCIsIlZub2RlIiwidGFnIiwicHJvcHMiLCJjaGlsZHJlbiIsInRoaXMiLCJpc0NvbXBvbmVudCIsImNvbXBvbmVudCIsImlzVm5vZGVDb21wb25lbnQiLCJ2bm9kZSIsImNyZWF0ZURvbUVsZW1lbnQiLCJpc1NWRyIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudE5TIiwiY3JlYXRlRWxlbWVudCIsImRvbVRvVm5vZGUiLCJkb20iLCJub2RlVHlwZSIsInYiLCJub2RlVmFsdWUiLCJpIiwiY2hpbGROb2RlcyIsImxlbmd0aCIsImNoaWxkIiwicHVzaCIsImZvckVhY2giLCJjYWxsIiwiYXR0cmlidXRlcyIsInByb3AiLCJub2RlTmFtZSIsInRhZ05hbWUiLCJ0b0xvd2VyQ2FzZSIsInRydXN0IiwiaHRtbFN0cmluZyIsImRpdiIsImlubmVySFRNTCIsInRyaW0iLCJtYXAiLCJpdGVtIiwicmVzZXJ2ZWRQcm9wcyIsImtleSIsInN0YXRlIiwib25jcmVhdGUiLCJvbnVwZGF0ZSIsIm9ucmVtb3ZlIiwic2hvdWxkdXBkYXRlIiwiZXZlbnRMaXN0ZW5lck5hbWVzIiwib25DbGVhbnVwTGlzdCIsIm9uTW91bnRMaXN0Iiwib25VcGRhdGVMaXN0Iiwib25Vbm1vdW50TGlzdCIsImN1cnJlbnQiLCJldmVudExpc3RlbmVyIiwiZSIsInRhcmdldCIsIm5hbWUiLCJ0eXBlIiwiZGVmYXVsdFByZXZlbnRlZCIsInVwZGF0ZSIsInBhcmVudE5vZGUiLCJjYWxsQ2FsbGJhY2tMaXN0IiwibGlzdCIsIm1haW5Wbm9kZSIsIm9sZFZub2RlIiwicGF0Y2giLCJpc01vdW50ZWQiLCJ1bm1vdW50IiwiZW1wdHlWbm9kZSIsInNoYXJlZFNldEF0dHJpYnV0ZSIsInZhbHVlIiwiZGlyZWN0aXZlcyIsImNvbnRhaW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJzbGljZSIsInJlbW92ZUF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZXMiLCJuZXdWbm9kZSIsIm5ld1RyZWUiLCJvbGRUcmVlIiwiY2hpbGRWbm9kZSIsInJlc3VsdCIsInZpZXciLCJzcGxpY2UiLCJBcnJheSIsImlzQXJyYXkiLCJvbGRUcmVlTGVuZ3RoIiwibmV3VHJlZUxlbmd0aCIsIm9sZEtleWVkTGlzdCIsIm5ld0tleWVkTGlzdCIsIm9sZENoaWxkVm5vZGUiLCJzaG91bGRQYXRjaCIsImFwcGVuZENoaWxkIiwicmVwbGFjZUNoaWxkIiwicmVtb3ZlQ2hpbGQiLCJuZXdDaGlsZFZub2RlIiwiY3JlYXRlVGV4dE5vZGUiLCJ0ZXh0Q29udGVudCIsImhpZGVEaXJlY3RpdmUiLCJ0ZXN0IiwiYm9vbCIsIm5ld2RvbSIsInNldCIsInN0eWxlIiwiZGlzcGxheSIsImNsYXNzZXMiLCJjbGFzc0xpc3QiLCJ0b2dnbGUiLCJodG1sIiwibW9kZWwiLCJwcm9wZXJ0eSIsImV2ZW50IiwiaGFuZGxlciIsInZhbCIsImlkeCIsImluZGV4T2YiLCJtdWx0aXBsZSIsImN0cmxLZXkiLCJ2YWx1ZTIiLCJqb2luIiwic2VsZWN0ZWQiLCJwbHVnaW5zIiwiTWFwIiwidGFnT3JDb21wb25lbnQiLCJmcmFnbWVudCIsImlzVm5vZGUiLCJvYmplY3QiLCJvbkNsZWFudXAiLCJjYWxsYmFjayIsIm9uVW5tb3VudCIsIm9uTW91bnQiLCJvblVwZGF0ZSIsIm1vdW50Iiwidm5vZGVDb21wb25lbnQiLCJhcHBDb250YWluZXIiLCJxdWVyeVNlbGVjdG9yQWxsIiwiRXJyb3IiLCJkaXJlY3RpdmUiLCJkaXJlY3RpdmUyIiwiZnVsbE5hbWUiLCJ1c2UiLCJwbHVnaW4iLCJvcHRpb25zIiwiaGFzIiwiZ2V0Il0sIm1hcHBpbmdzIjoiTUFxQkEsSUFBTUEsRUFBa0IsZ0JBQ2xCQyxFQUFhLFFBQ2JDLEVBQVdDLFFBQTJCLG9CQUFa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Q29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSAqL1xuLyogZXNsaW50LWRpc2FibGUgc29uYXJqcy9jb2duaXRpdmUtY29tcGxleGl0eSAqL1xuLyoqKiBWbm9kZSAqKiovXG5cbmltcG9ydCB7XG4gIENoaWxkcmVuLFxuICBDdXJyZW50LFxuICBEaXJlY3RpdmUsXG4gIERpcmVjdGl2ZXMsXG4gIERvbUVsZW1lbnQsXG4gIElWbm9kZSxcbiAgUGx1Z2luLFxuICBQcm9wcyxcbiAgUmVzZXJ2ZWRQcm9wcyxcbiAgVmFseXJpYW4sXG4gIFZhbHlyaWFuQ29tcG9uZW50LFxuICBWbm9kZUNvbXBvbmVudCxcbiAgVm5vZGVXaXRoRG9tXG59IGZyb20gXCIuL2ludGVyZmFjZXNcIjtcblxuLyoqKiBDb25zdGFudHMgKioqL1xuY29uc3QgQ29tcG9uZW50U3RyaW5nID0gXCJfX2NvbXBvbmVudF9fXCI7XG5jb25zdCBUZXh0U3RyaW5nID0gXCIjdGV4dFwiO1xuY29uc3QgaXNOb2RlSnMgPSBCb29sZWFuKHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MudmVyc2lvbnMgJiYgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlKTtcbmNvbnN0IFVuZCA9IHVuZGVmaW5lZDtcblxuLyoqKiBWbm9kZSAqKiovXG5cbmNvbnN0IFZub2RlID0gZnVuY3Rpb24gVm5vZGUodGhpczogSVZub2RlLCB0YWc6IHN0cmluZywgcHJvcHM6IFByb3BzLCBjaGlsZHJlbjogQ2hpbGRyZW4pIHtcbiAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIHRoaXMudGFnID0gdGFnO1xufSBhcyB1bmtub3duIGFzIElWbm9kZTtcblxuZnVuY3Rpb24gaXNWbm9kZShvYmplY3Q/OiB1bmtub3duIHwgSVZub2RlKTogb2JqZWN0IGlzIElWbm9kZSB7XG4gIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBWbm9kZTtcbn1cblxuZnVuY3Rpb24gaXNDb21wb25lbnQoY29tcG9uZW50PzogdW5rbm93biB8IFZhbHlyaWFuQ29tcG9uZW50KTogY29tcG9uZW50IGlzIFZhbHlyaWFuQ29tcG9uZW50IHtcbiAgcmV0dXJuIHR5cGVvZiBjb21wb25lbnQgPT09IFwiZnVuY3Rpb25cIiB8fCAodHlwZW9mIGNvbXBvbmVudCA9PT0gXCJvYmplY3RcIiAmJiBjb21wb25lbnQgIT09IG51bGwgJiYgXCJ2aWV3XCIgaW4gY29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gaXNWbm9kZUNvbXBvbmVudCh2bm9kZT86IHVua25vd24gfCBWbm9kZUNvbXBvbmVudCk6IHZub2RlIGlzIFZub2RlQ29tcG9uZW50IHtcbiAgcmV0dXJuIHZub2RlIGluc3RhbmNlb2YgVm5vZGUgJiYgdm5vZGUudGFnID09PSBDb21wb25lbnRTdHJpbmc7XG59XG5cbi8qKiogVXRpbCAqKiovXG5cbmZ1bmN0aW9uIGNyZWF0ZURvbUVsZW1lbnQodGFnOiBzdHJpbmcsIGlzU1ZHOiBib29sZWFuID0gZmFsc2UpIHtcbiAgcmV0dXJuIGlzU1ZHID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdGFnKSA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcbn1cblxuZnVuY3Rpb24gZG9tVG9Wbm9kZShkb206IERvbUVsZW1lbnQpOiB2b2lkIHwgVm5vZGVXaXRoRG9tIHtcbiAgaWYgKGRvbS5ub2RlVHlwZSA9PT0gMykge1xuICAgIGxldCB2bm9kZSA9IHYoVGV4dFN0cmluZywge30sIFtdKTtcbiAgICB2bm9kZS5ub2RlVmFsdWUgPSBkb20ubm9kZVZhbHVlIGFzIHN0cmluZztcbiAgICB2bm9kZS5kb20gPSBkb207XG4gICAgcmV0dXJuIHZub2RlIGFzIFZub2RlV2l0aERvbTtcbiAgfVxuXG4gIGlmIChkb20ubm9kZVR5cGUgPT09IDEpIHtcbiAgICBsZXQgY2hpbGRyZW4gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRvbS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgY2hpbGQgPSBkb21Ub1Zub2RlKGRvbS5jaGlsZE5vZGVzW2ldIGFzIERvbUVsZW1lbnQpO1xuICAgICAgaWYgKGNoaWxkKSB7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBwcm9wczogUHJvcHMgPSB7fTtcbiAgICBbXS5mb3JFYWNoLmNhbGwoZG9tLmF0dHJpYnV0ZXMsIChwcm9wOiBBdHRyKSA9PiAocHJvcHNbcHJvcC5ub2RlTmFtZV0gPSBwcm9wLm5vZGVWYWx1ZSkpO1xuXG4gICAgbGV0IHZub2RlID0gdihkb20udGFnTmFtZS50b0xvd2VyQ2FzZSgpLCBwcm9wcywgLi4uY2hpbGRyZW4pO1xuICAgIHZub2RlLmRvbSA9IGRvbTtcbiAgICByZXR1cm4gdm5vZGUgYXMgVm5vZGVXaXRoRG9tO1xuICB9XG59XG5cbmNvbnN0IHRydXN0ID0gKGh0bWxTdHJpbmc6IHN0cmluZyk6IENoaWxkcmVuID0+IHtcbiAgbGV0IGRpdiA9IGNyZWF0ZURvbUVsZW1lbnQoXCJkaXZcIik7XG4gIGRpdi5pbm5lckhUTUwgPSBodG1sU3RyaW5nLnRyaW0oKTtcblxuICByZXR1cm4gW10ubWFwLmNhbGwoZGl2LmNoaWxkTm9kZXMsIChpdGVtKSA9PiBkb21Ub1Zub2RlKGl0ZW0pKSBhcyBDaGlsZHJlbjtcbn07XG5cbmNvbnN0IHJlc2VydmVkUHJvcHM6IFJlc2VydmVkUHJvcHMgPSB7XG4gIGtleTogdHJ1ZSxcbiAgc3RhdGU6IHRydWUsXG4gIG9uY3JlYXRlOiB0cnVlLFxuICBvbnVwZGF0ZTogdHJ1ZSxcbiAgb25yZW1vdmU6IHRydWUsXG4gIHNob3VsZHVwZGF0ZTogdHJ1ZSxcbiAgXCJ2LW9uY2VcIjogdHJ1ZSxcblxuICAvLyBCdWlsdCBpbiBkaXJlY3RpdmVzXG4gIFwidi1pZlwiOiB0cnVlLFxuICBcInYtdW5sZXNzXCI6IHRydWUsXG4gIFwidi1mb3JcIjogdHJ1ZSxcbiAgXCJ2LXNob3dcIjogdHJ1ZSxcbiAgXCJ2LWNsYXNzXCI6IHRydWUsXG4gIFwidi1odG1sXCI6IHRydWVcbn07XG5cbi8qKiogTW91bnQgKioqL1xuXG5jb25zdCBldmVudExpc3RlbmVyTmFtZXM6IFJlY29yZDxzdHJpbmcsIHRydWU+ID0ge307XG5sZXQgb25DbGVhbnVwTGlzdDogRnVuY3Rpb25bXSA9IFtdO1xubGV0IG9uTW91bnRMaXN0OiBGdW5jdGlvbltdID0gW107XG5sZXQgb25VcGRhdGVMaXN0OiBGdW5jdGlvbltdID0gW107XG5sZXQgb25Vbm1vdW50TGlzdDogRnVuY3Rpb25bXSA9IFtdO1xuY29uc3QgY3VycmVudDogQ3VycmVudCA9IHt9O1xuZnVuY3Rpb24gZXZlbnRMaXN0ZW5lcihlOiBFdmVudCkge1xuICBsZXQgZG9tID0gZS50YXJnZXQgYXMgRG9tRWxlbWVudDtcbiAgbGV0IG5hbWUgPSBgdi1vbiR7ZS50eXBlfWA7XG4gIHdoaWxlIChkb20pIHtcbiAgICBpZiAoZG9tW25hbWVdKSB7XG4gICAgICBkb21bbmFtZV0oZSwgZG9tKTtcbiAgICAgIGlmICghZS5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgIHVwZGF0ZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkb20gPSBkb20ucGFyZW50Tm9kZSBhcyBEb21FbGVtZW50O1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uQ2xlYW51cChjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcbiAgaWYgKG9uQ2xlYW51cExpc3QuaW5kZXhPZihjYWxsYmFjaykgPT09IC0xKSB7XG4gICAgb25DbGVhbnVwTGlzdC5wdXNoKGNhbGxiYWNrKTtcbiAgfVxufVxuZnVuY3Rpb24gb25Vbm1vdW50KGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICBpZiAob25Vbm1vdW50TGlzdC5pbmRleE9mKGNhbGxiYWNrKSA9PT0gLTEpIHtcbiAgICBvblVubW91bnRMaXN0LnB1c2goY2FsbGJhY2spO1xuICB9XG59XG5mdW5jdGlvbiBvbk1vdW50KGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICBpZiAob25Nb3VudExpc3QuaW5kZXhPZihjYWxsYmFjaykgPT09IC0xKSB7XG4gICAgb25Nb3VudExpc3QucHVzaChjYWxsYmFjayk7XG4gIH1cbn1cbmZ1bmN0aW9uIG9uVXBkYXRlKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICBpZiAob25VcGRhdGVMaXN0LmluZGV4T2YoY2FsbGJhY2spID09PSAtMSkge1xuICAgIG9uVXBkYXRlTGlzdC5wdXNoKGNhbGxiYWNrKTtcbiAgfVxufVxuXG4vKlxuICAqIE1vdW50cyBhIGNvbXBvbmVudCB0byB0aGUgRE9NXG4gIG1vdW50KCcjYXBwJywgKCkgPT4gPGRpdj5IZWxsbyB3b3JsZDwvZGl2Pik7IC8vIEFwcCBpcyBhIEZ1bmN0aW9uYWwgQ29tcG9uZW50XG4gIG1vdW50KCcjYXBwJywgeyB2aWV3OiAoKSA9PiA8ZGl2PkhlbGxvIHdvcmxkPC9kaXY+IH0pOyAvLyBBcHAgaXMgYSBQT0pPIGNvbXBvbmVudCB3aXRoIGEgdmlldyBtZXRob2RcbiAgbW91bnQoJyNhcHAnLCBjbGFzc0luc3RhbmNlKTsgLy8gQXBwIGlzIGEgY2xhc3MgaW5zdGFuY2Ugd2l0aCBhIHZpZXcgbWV0aG9kXG4gIG1vdW50KCcjYXBwJywgPEFwcD48ZGl2PkhlbGxvIHdvcmxkPC9kaXY+PC9BcHA+KTsgLy8gQXBwIGlzIGEgVm5vZGUgY29tcG9uZW50IChWbm9kZSB3aXRoIHRhZyBfX2NvbXBvbmVudF9fKVxuKi9cblxuZnVuY3Rpb24gbW91bnQoY29udGFpbmVyOiBEb21FbGVtZW50IHwgc3RyaW5nLCBjb21wb25lbnQ6IFZhbHlyaWFuQ29tcG9uZW50IHwgSVZub2RlKTogdm9pZCB8IHN0cmluZyB7XG4gIGxldCBhcHBDb250YWluZXIgPSBudWxsO1xuXG4gIGlmIChpc05vZGVKcykge1xuICAgIGFwcENvbnRhaW5lciA9IHR5cGVvZiBjb250YWluZXIgPT09IFwic3RyaW5nXCIgPyBjcmVhdGVEb21FbGVtZW50KGNvbnRhaW5lciA9PT0gXCJzdmdcIiA/IFwic3ZnXCIgOiBcImRpdlwiLCBjb250YWluZXIgPT09IFwic3ZnXCIpIDogY29udGFpbmVyO1xuICB9IGVsc2Uge1xuICAgIGFwcENvbnRhaW5lciA9IHR5cGVvZiBjb250YWluZXIgPT09IFwic3RyaW5nXCIgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGNvbnRhaW5lcilbMF0gOiBjb250YWluZXI7XG4gIH1cblxuICBpZiAoIWFwcENvbnRhaW5lcikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvbnRhaW5lciBub3QgZm91bmRcIik7XG4gIH1cblxuICBsZXQgdm5vZGVDb21wb25lbnQ6IFZub2RlQ29tcG9uZW50IHwgSVZub2RlO1xuXG4gIGlmIChpc1Zub2RlQ29tcG9uZW50KGNvbXBvbmVudCkpIHtcbiAgICB2bm9kZUNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgfSBlbHNlIGlmIChpc0NvbXBvbmVudChjb21wb25lbnQpKSB7XG4gICAgdm5vZGVDb21wb25lbnQgPSB2KGNvbXBvbmVudCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvbXBvbmVudCBtdXN0IGJlIGEgVmFseXJpYW4gQ29tcG9uZW50IG9yIGEgVm5vZGUgY29tcG9uZW50XCIpO1xuICB9XG5cbiAgaWYgKHYuaXNNb3VudGVkKSB7XG4gICAgdW5tb3VudCgpO1xuICB9XG5cbiAgdi5jb21wb25lbnQgPSB2bm9kZUNvbXBvbmVudCBhcyBWbm9kZUNvbXBvbmVudDtcbiAgdi5jb250YWluZXIgPSBhcHBDb250YWluZXI7XG4gIHYubWFpblZub2RlID0gZG9tVG9Wbm9kZShhcHBDb250YWluZXIpIGFzIFZub2RlV2l0aERvbTtcblxuICAvLyB1cGRhdGVcbiAgcmV0dXJuIHVwZGF0ZSgpO1xufVxuXG5mdW5jdGlvbiBjYWxsQ2FsbGJhY2tMaXN0KGxpc3Q6IEZ1bmN0aW9uW10pOiB2b2lkIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgbGlzdFtpXSgpO1xuICB9XG4gIGxpc3QgPSBbXTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlKCk6IHZvaWQgfCBzdHJpbmcge1xuICBpZiAodi5jb21wb25lbnQgJiYgdi5tYWluVm5vZGUpIHtcbiAgICBvbkNsZWFudXBMaXN0Lmxlbmd0aCAmJiBjYWxsQ2FsbGJhY2tMaXN0KG9uQ2xlYW51cExpc3QpO1xuICAgIGxldCBvbGRWbm9kZTogVm5vZGVXaXRoRG9tIHwgbnVsbCA9IHYubWFpblZub2RlIGFzIFZub2RlV2l0aERvbTtcbiAgICB2Lm1haW5Wbm9kZSA9IG5ldyBWbm9kZSh2Lm1haW5Wbm9kZS50YWcsIHYubWFpblZub2RlLnByb3BzLCBbdi5jb21wb25lbnRdKSBhcyBWbm9kZVdpdGhEb207XG4gICAgdi5tYWluVm5vZGUuZG9tID0gb2xkVm5vZGUuZG9tO1xuICAgIHBhdGNoKHYubWFpblZub2RlLCBvbGRWbm9kZSk7XG4gICAgb2xkVm5vZGUgPSBudWxsO1xuICAgIGlmICh2LmlzTW91bnRlZCA9PT0gZmFsc2UpIHtcbiAgICAgIG9uTW91bnRMaXN0Lmxlbmd0aCAmJiBjYWxsQ2FsbGJhY2tMaXN0KG9uTW91bnRMaXN0KTtcbiAgICAgIHYuaXNNb3VudGVkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgb25VcGRhdGVMaXN0Lmxlbmd0aCAmJiBjYWxsQ2FsbGJhY2tMaXN0KG9uVXBkYXRlTGlzdCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTm9kZUpzKSB7XG4gICAgICByZXR1cm4gdi5tYWluVm5vZGUuZG9tLmlubmVySFRNTDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5tb3VudCgpOiB2b2lkIHwgc3RyaW5nIHtcbiAgaWYgKHYuaXNNb3VudGVkICYmIHYubWFpblZub2RlICYmIHYuY29tcG9uZW50KSB7XG4gICAgb25DbGVhbnVwTGlzdC5sZW5ndGggJiYgY2FsbENhbGxiYWNrTGlzdChvbkNsZWFudXBMaXN0KTtcbiAgICBvblVubW91bnRMaXN0Lmxlbmd0aCAmJiBjYWxsQ2FsbGJhY2tMaXN0KG9uVW5tb3VudExpc3QpO1xuICAgIGxldCBvbGRWbm9kZTogVm5vZGVXaXRoRG9tIHwgbnVsbCA9IHYubWFpblZub2RlIGFzIFZub2RlV2l0aERvbTtcbiAgICB2Lm1haW5Wbm9kZSA9IG5ldyBWbm9kZSh2Lm1haW5Wbm9kZS50YWcsIHYubWFpblZub2RlLnByb3BzLCBbXSkgYXMgVm5vZGVXaXRoRG9tO1xuICAgIHYubWFpblZub2RlLmRvbSA9IG9sZFZub2RlLmRvbTtcbiAgICB2Lm1haW5Wbm9kZS5pc1NWRyA9IG9sZFZub2RlLmlzU1ZHO1xuICAgIHBhdGNoKHYubWFpblZub2RlLCBvbGRWbm9kZSk7XG4gICAgb2xkVm5vZGUgPSBudWxsO1xuICAgIHYuY29tcG9uZW50ID0gbnVsbDtcbiAgICB2LmlzTW91bnRlZCA9IGZhbHNlO1xuICAgIGlmIChpc05vZGVKcykge1xuICAgICAgcmV0dXJuIHYubWFpblZub2RlLmRvbS5pbm5lckhUTUw7XG4gICAgfVxuICB9XG59XG5cbmxldCBlbXB0eVZub2RlID0gbmV3IFZub2RlKFwiX19lbXB0eV9fXCIsIHt9LCBbXSk7XG5cbmZ1bmN0aW9uIG9ucmVtb3ZlKHZub2RlOiBJVm5vZGUpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2bm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgIHZub2RlLmNoaWxkcmVuW2ldLnRhZyAhPT0gVGV4dFN0cmluZyAmJiBvbnJlbW92ZSh2bm9kZS5jaGlsZHJlbltpXSk7XG4gIH1cblxuICB2bm9kZS5wcm9wcy5vbnJlbW92ZSAmJiB2bm9kZS5wcm9wcy5vbnJlbW92ZSh2bm9kZSk7XG59XG5cbmZ1bmN0aW9uIHNoYXJlZFNldEF0dHJpYnV0ZShwcm9wOiBzdHJpbmcsIHZhbHVlOiBhbnksIHZub2RlOiBWbm9kZVdpdGhEb20sIG9sZFZub2RlPzogVm5vZGVXaXRoRG9tKTogdm9pZCB8IGJvb2xlYW4ge1xuICAvLyBJdCBpcyBhIHJlc2VydmVkIHByb3BcbiAgaWYgKHJlc2VydmVkUHJvcHNbcHJvcF0pIHtcbiAgICAvLyBJZiBpdCBpcyBhIGRpcmVjdGl2ZSBuYW1lIGNhbGwgdGhlIGRpcmVjdGl2ZVxuICAgIGlmIChkaXJlY3RpdmVzW3Byb3BdKSB7XG4gICAgICByZXR1cm4gZGlyZWN0aXZlc1twcm9wXSh2bm9kZS5wcm9wc1twcm9wXSwgdm5vZGUsIG9sZFZub2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBJdCBpcyBub3QgYSByZXNlcnZlZCBwcm9wIHNvIHdlIGFkZCBpdCB0byB0aGUgZG9tXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGlmIChwcm9wIGluIGV2ZW50TGlzdGVuZXJOYW1lcyA9PT0gZmFsc2UpIHtcbiAgICAgIGV2ZW50TGlzdGVuZXJOYW1lc1twcm9wXSA9IHRydWU7XG4gICAgICAodi5jb250YWluZXIgYXMgRG9tRWxlbWVudCkuYWRkRXZlbnRMaXN0ZW5lcihwcm9wLnNsaWNlKDIpLCBldmVudExpc3RlbmVyKTtcbiAgICB9XG4gICAgdm5vZGUuZG9tW2B2LSR7cHJvcH1gXSA9IHZhbHVlO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwcm9wIGluIHZub2RlLmRvbSAmJiB2bm9kZS5pc1NWRyA9PT0gZmFsc2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgaWYgKHZub2RlLmRvbVtwcm9wXSAhPSB2YWx1ZSkge1xuICAgICAgdm5vZGUuZG9tW3Byb3BdID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFVzZSBzZXQgYXR0cmlidXRlXG4gIGlmICghb2xkVm5vZGUgfHwgb2xkVm5vZGUucHJvcHNbcHJvcF0gIT09IHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgdm5vZGUuZG9tLnJlbW92ZUF0dHJpYnV0ZShwcm9wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm5vZGUuZG9tLnNldEF0dHJpYnV0ZShwcm9wLCB2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIHZub2RlOiBWbm9kZVdpdGhEb20sIG9sZFZub2RlPzogVm5vZGVXaXRoRG9tKSB7XG4gIHZub2RlLnByb3BzW25hbWVdID0gdmFsdWU7XG5cbiAgc2hhcmVkU2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlLCB2bm9kZSwgb2xkVm5vZGUpO1xufVxuXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzKHZub2RlOiBWbm9kZVdpdGhEb20sIG9sZFZub2RlPzogVm5vZGVXaXRoRG9tKSB7XG4gIGZvciAobGV0IHByb3AgaW4gdm5vZGUucHJvcHMpIHtcbiAgICBpZiAoc2hhcmVkU2V0QXR0cmlidXRlKHByb3AsIHZub2RlLnByb3BzW3Byb3BdLCB2bm9kZSwgb2xkVm5vZGUpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvbGRWbm9kZSkge1xuICAgIGZvciAobGV0IHByb3AgaW4gb2xkVm5vZGUucHJvcHMpIHtcbiAgICAgIGlmIChwcm9wIGluIHZub2RlLnByb3BzID09PSBmYWxzZSAmJiB0eXBlb2Ygb2xkVm5vZGUucHJvcHNbcHJvcF0gIT09IFwiZnVuY3Rpb25cIiAmJiBwcm9wIGluIHJlc2VydmVkUHJvcHMgPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChwcm9wIGluIG9sZFZub2RlLmRvbSAmJiB2bm9kZS5pc1NWRyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBvbGRWbm9kZS5kb21bcHJvcF0gPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9sZFZub2RlLmRvbS5yZW1vdmVBdHRyaWJ1dGUocHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmZ1bmN0aW9uIHBhdGNoKG5ld1Zub2RlOiBWbm9kZVdpdGhEb20sIG9sZFZub2RlOiBWbm9kZVdpdGhEb20gfCBJVm5vZGUgPSBlbXB0eVZub2RlKSB7XG4gIGN1cnJlbnQudm5vZGUgPSBuZXdWbm9kZTtcbiAgY3VycmVudC5vbGRWbm9kZSA9IG9sZFZub2RlID09PSBlbXB0eVZub2RlID8gVW5kIDogKG9sZFZub2RlIGFzIFZub2RlV2l0aERvbSk7XG4gIGxldCBuZXdUcmVlID0gbmV3Vm5vZGUuY2hpbGRyZW47XG4gIGxldCBvbGRUcmVlID0gb2xkVm5vZGUuY2hpbGRyZW47XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdUcmVlLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGNoaWxkVm5vZGUgPSBuZXdUcmVlW2ldO1xuICAgIGlmIChjaGlsZFZub2RlIGluc3RhbmNlb2YgVm5vZGUpIHtcbiAgICAgIGlmIChjaGlsZFZub2RlLnRhZyAhPT0gVGV4dFN0cmluZykge1xuICAgICAgICBpZiAoY2hpbGRWbm9kZS50YWcgPT09IENvbXBvbmVudFN0cmluZykge1xuICAgICAgICAgIGxldCBjb21wb25lbnQgPSBjaGlsZFZub2RlLmNvbXBvbmVudCBhcyBWYWx5cmlhbkNvbXBvbmVudDtcbiAgICAgICAgICBjdXJyZW50LmNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICAgICAgICBsZXQgcmVzdWx0ID0gKFwidmlld1wiIGluIGNvbXBvbmVudCA/IGNvbXBvbmVudC52aWV3IDogY29tcG9uZW50KS5jYWxsKGNvbXBvbmVudCwgY2hpbGRWbm9kZS5wcm9wcywgLi4uY2hpbGRWbm9kZS5jaGlsZHJlbik7XG5cbiAgICAgICAgICBuZXdUcmVlLnNwbGljZShpLS0sIDEsIHJlc3VsdCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRWbm9kZS5pc1NWRyA9IG5ld1Zub2RlLmlzU1ZHIHx8IGNoaWxkVm5vZGUudGFnID09PSBcInN2Z1wiO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjaGlsZFZub2RlKSkge1xuICAgICAgbmV3VHJlZS5zcGxpY2UoaS0tLCAxLCAuLi5jaGlsZFZub2RlKTtcbiAgICB9IGVsc2UgaWYgKGNoaWxkVm5vZGUgPT09IG51bGwgfHwgY2hpbGRWbm9kZSA9PT0gVW5kKSB7XG4gICAgICBuZXdUcmVlLnNwbGljZShpLS0sIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdUcmVlW2ldID0gbmV3IFZub2RlKFRleHRTdHJpbmcsIHt9LCBbXSk7XG4gICAgICBuZXdUcmVlW2ldLm5vZGVWYWx1ZSA9IGNoaWxkVm5vZGU7XG4gICAgfVxuICB9XG5cbiAgbGV0IG9sZFRyZWVMZW5ndGggPSBvbGRUcmVlLmxlbmd0aDtcbiAgbGV0IG5ld1RyZWVMZW5ndGggPSBuZXdUcmVlLmxlbmd0aDtcblxuICAvLyBJZiBuZXcgdHJlZSBpcyBlbXB0eSwgcmVtb3ZlIGFsbCBvbGQgbm9kZXNcbiAgaWYgKG5ld1RyZWVMZW5ndGggPT09IDApIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9sZFRyZWVMZW5ndGg7IGkrKykge1xuICAgICAgb2xkVHJlZVtpXS50YWcgIT09IFRleHRTdHJpbmcgJiYgb25yZW1vdmUob2xkVHJlZVtpXSk7XG4gICAgfVxuXG4gICAgbmV3Vm5vZGUuZG9tLnRleHRDb250ZW50ID0gXCJcIjtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBJZiB0aGUgdHJlZSBpcyBrZXllZCBsaXN0IGFuZCBpcyBub3QgZmlyc3QgcmVuZGVyIGFuZCBvbGQgdHJlZSBpcyBrZXllZCBsaXN0IHRvb1xuICBpZiAob2xkVHJlZUxlbmd0aCAmJiBcImtleVwiIGluIG5ld1RyZWVbMF0ucHJvcHMgJiYgXCJrZXlcIiBpbiBvbGRUcmVlWzBdLnByb3BzKSB7XG4gICAgbGV0IG9sZEtleWVkTGlzdDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2xkVHJlZUxlbmd0aDsgaSsrKSB7XG4gICAgICBvbGRLZXllZExpc3Rbb2xkVHJlZVtpXS5wcm9wcy5rZXldID0gaTtcbiAgICB9XG5cbiAgICBsZXQgbmV3S2V5ZWRMaXN0OiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdUcmVlTGVuZ3RoOyBpKyspIHtcbiAgICAgIG5ld0tleWVkTGlzdFtuZXdUcmVlW2ldLnByb3BzLmtleV0gPSBpO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3VHJlZUxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgY2hpbGRWbm9kZSA9IG5ld1RyZWVbaV07XG4gICAgICBsZXQgb2xkQ2hpbGRWbm9kZSA9IG9sZFRyZWVbb2xkS2V5ZWRMaXN0W2NoaWxkVm5vZGUucHJvcHMua2V5XV07XG4gICAgICBsZXQgc2hvdWxkUGF0Y2ggPSB0cnVlO1xuXG4gICAgICBpZiAob2xkQ2hpbGRWbm9kZSkge1xuICAgICAgICBjaGlsZFZub2RlLmRvbSA9IG9sZENoaWxkVm5vZGUuZG9tO1xuICAgICAgICBpZiAoXCJ2LW9uY2VcIiBpbiBjaGlsZFZub2RlLnByb3BzIHx8IChjaGlsZFZub2RlLnByb3BzLnNob3VsZHVwZGF0ZSAmJiBjaGlsZFZub2RlLnByb3BzLnNob3VsZHVwZGF0ZShjaGlsZFZub2RlLCBvbGRDaGlsZFZub2RlKSA9PT0gZmFsc2UpKSB7XG4gICAgICAgICAgLy8gc2tpcCB0aGlzIHBhdGNoXG4gICAgICAgICAgY2hpbGRWbm9kZS5jaGlsZHJlbiA9IG9sZENoaWxkVm5vZGUuY2hpbGRyZW47XG4gICAgICAgICAgc2hvdWxkUGF0Y2ggPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRBdHRyaWJ1dGVzKGNoaWxkVm5vZGUsIG9sZENoaWxkVm5vZGUpO1xuICAgICAgICAgIGlmICh2LmlzTW91bnRlZCkge1xuICAgICAgICAgICAgY2hpbGRWbm9kZS5wcm9wcy5vbnVwZGF0ZSAmJiBjaGlsZFZub2RlLnByb3BzLm9udXBkYXRlKGNoaWxkVm5vZGUsIG9sZENoaWxkVm5vZGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlICYmIGNoaWxkVm5vZGUucHJvcHMub25jcmVhdGUoY2hpbGRWbm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZFZub2RlLmRvbSA9IGNyZWF0ZURvbUVsZW1lbnQoY2hpbGRWbm9kZS50YWcsIGNoaWxkVm5vZGUuaXNTVkcpO1xuICAgICAgICBzZXRBdHRyaWJ1dGVzKGNoaWxkVm5vZGUpO1xuICAgICAgICBjaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlICYmIGNoaWxkVm5vZGUucHJvcHMub25jcmVhdGUoY2hpbGRWbm9kZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdWbm9kZS5kb20uY2hpbGROb2Rlc1tpXSA9PT0gVW5kKSB7XG4gICAgICAgIG5ld1Zub2RlLmRvbS5hcHBlbmRDaGlsZChjaGlsZFZub2RlLmRvbSk7XG4gICAgICB9IGVsc2UgaWYgKG5ld1Zub2RlLmRvbS5jaGlsZE5vZGVzW2ldICE9PSBjaGlsZFZub2RlLmRvbSkge1xuICAgICAgICBvbGRUcmVlW2ldICYmIG5ld0tleWVkTGlzdFtvbGRUcmVlW2ldLnByb3BzLmtleV0gPT09IFVuZCAmJiBvbnJlbW92ZShvbGRUcmVlW2ldKTtcbiAgICAgICAgbmV3Vm5vZGUuZG9tLnJlcGxhY2VDaGlsZChjaGlsZFZub2RlLmRvbSwgbmV3Vm5vZGUuZG9tLmNoaWxkTm9kZXNbaV0pO1xuICAgICAgfVxuXG4gICAgICBzaG91bGRQYXRjaCAmJiBwYXRjaChjaGlsZFZub2RlLCBvbGRDaGlsZFZub2RlKTtcbiAgICB9XG5cbiAgICAvLyBGb3IgdGhlIHJlc3Qgb2YgdGhlIGNoaWxkcmVuLCB3ZSBzaG91bGQgcmVtb3ZlIHRoZW1cbiAgICBmb3IgKGxldCBpID0gbmV3VHJlZUxlbmd0aDsgaSA8IG9sZFRyZWVMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG5ld0tleWVkTGlzdFtvbGRUcmVlW2ldLnByb3BzLmtleV0gPT09IFVuZCkge1xuICAgICAgICBsZXQgb2xkQ2hpbGRWbm9kZSA9IG9sZFRyZWVbaV07XG4gICAgICAgIG9ucmVtb3ZlKG9sZENoaWxkVm5vZGUpO1xuICAgICAgICBvbGRDaGlsZFZub2RlLmRvbS5wYXJlbnROb2RlICYmIG9sZENoaWxkVm5vZGUuZG9tLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQob2xkQ2hpbGRWbm9kZS5kb20pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIG5ldyB0cmVlIGFuZCBvbGQgdHJlZSBoYXZlIG1vcmUgdGhhbiBvbmUgY2hpbGQsIHdlIHNob3VsZCB1cGRhdGUgdGhlIGRvbVxuICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld1RyZWVMZW5ndGg7IGkrKykge1xuICAgIGxldCBuZXdDaGlsZFZub2RlID0gbmV3VHJlZVtpXTtcblxuICAgIC8vIE9sZCBjaGlsZCBleGlzdHNcbiAgICBpZiAoaSA8IG9sZFRyZWVMZW5ndGgpIHtcbiAgICAgIGxldCBvbGRDaGlsZFZub2RlID0gb2xkVHJlZVtpXTtcbiAgICAgIC8vIE5ldyBjaGlsZCBpcyBhIHRleHQgbm9kZVxuICAgICAgaWYgKG5ld0NoaWxkVm5vZGUudGFnID09PSBUZXh0U3RyaW5nKSB7XG4gICAgICAgIC8vIE9sZCBjaGlsZCBpcyBhIHRleHQgbm9kZVxuICAgICAgICBpZiAob2xkQ2hpbGRWbm9kZS50YWcgPT09IFRleHRTdHJpbmcpIHtcbiAgICAgICAgICBuZXdDaGlsZFZub2RlLmRvbSA9IG9sZENoaWxkVm5vZGUuZG9tO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICAgICAgICBpZiAobmV3Q2hpbGRWbm9kZS5kb20ubm9kZVZhbHVlICE9IG5ld0NoaWxkVm5vZGUubm9kZVZhbHVlKSB7XG4gICAgICAgICAgICBuZXdDaGlsZFZub2RlLmRvbS5ub2RlVmFsdWUgPSBuZXdDaGlsZFZub2RlLm5vZGVWYWx1ZSBhcyBzdHJpbmc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT2xkIGNoaWxkIGlzIGEgbm9ybWFsIG5vZGVcbiAgICAgICAgbmV3Q2hpbGRWbm9kZS5kb20gPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuZXdDaGlsZFZub2RlLm5vZGVWYWx1ZSBhcyBzdHJpbmcpIGFzIHVua25vd24gYXMgRG9tRWxlbWVudDtcbiAgICAgICAgb25yZW1vdmUob2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgIG5ld1Zub2RlLmRvbS5yZXBsYWNlQ2hpbGQobmV3Q2hpbGRWbm9kZS5kb20sIG9sZENoaWxkVm5vZGUuZG9tKTtcblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gTmV3IGNoaWxkIGlzIGEgbm9ybWFsIG5vZGVcbiAgICAgIC8vIE9sZCBjaGlsZCBpcyB0aGUgc2FtZSB0eXBlIGFzIG5ldyBjaGlsZFxuICAgICAgaWYgKG9sZENoaWxkVm5vZGUudGFnID09PSBuZXdDaGlsZFZub2RlLnRhZykge1xuICAgICAgICBuZXdDaGlsZFZub2RlLmRvbSA9IG9sZENoaWxkVm5vZGUuZG9tO1xuICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgdi1vbmNlIGRpcmVjdGl2ZSBvciBhIHNob3VsZHVwZGF0ZSBtZXRob2QgdGhhdCByZXR1cm5zIGZhbHNlLCB3ZSBza2lwIHRoZSB1cGRhdGVcbiAgICAgICAgaWYgKG5ld0NoaWxkVm5vZGUucHJvcHNbXCJ2LW9uY2VcIl0gfHwgKG5ld0NoaWxkVm5vZGUucHJvcHMuc2hvdWxkdXBkYXRlICYmIG5ld0NoaWxkVm5vZGUucHJvcHMuc2hvdWxkdXBkYXRlKG5ld0NoaWxkVm5vZGUsIG9sZENoaWxkVm5vZGUpID09PSBmYWxzZSkpIHtcbiAgICAgICAgICBuZXdDaGlsZFZub2RlLmNoaWxkcmVuID0gb2xkQ2hpbGRWbm9kZS5jaGlsZHJlbjtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdlIHVwZGF0ZSB0aGUgZG9tIGVsZW1lbnRcbiAgICAgICAgc2V0QXR0cmlidXRlcyhuZXdDaGlsZFZub2RlLCBvbGRDaGlsZFZub2RlKTtcbiAgICAgICAgaWYgKHYuaXNNb3VudGVkKSB7XG4gICAgICAgICAgbmV3Q2hpbGRWbm9kZS5wcm9wcy5vbnVwZGF0ZSAmJiBuZXdDaGlsZFZub2RlLnByb3BzLm9udXBkYXRlKG5ld0NoaWxkVm5vZGUsIG9sZENoaWxkVm5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0NoaWxkVm5vZGUucHJvcHMub25jcmVhdGUgJiYgbmV3Q2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZShuZXdDaGlsZFZub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhdGNoKG5ld0NoaWxkVm5vZGUsIG9sZENoaWxkVm5vZGUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gT2xkIGNoaWxkIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBuZXcgY2hpbGRcbiAgICAgIG5ld0NoaWxkVm5vZGUuZG9tID0gY3JlYXRlRG9tRWxlbWVudChuZXdDaGlsZFZub2RlLnRhZywgbmV3Q2hpbGRWbm9kZS5pc1NWRyk7XG4gICAgICBzZXRBdHRyaWJ1dGVzKG5ld0NoaWxkVm5vZGUpO1xuICAgICAgb2xkQ2hpbGRWbm9kZS50YWcgIT09IFRleHRTdHJpbmcgJiYgb25yZW1vdmUob2xkQ2hpbGRWbm9kZSk7XG4gICAgICBuZXdDaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlICYmIG5ld0NoaWxkVm5vZGUucHJvcHMub25jcmVhdGUobmV3Q2hpbGRWbm9kZSk7XG4gICAgICBuZXdWbm9kZS5kb20ucmVwbGFjZUNoaWxkKG5ld0NoaWxkVm5vZGUuZG9tLCBvbGRDaGlsZFZub2RlLmRvbSk7XG4gICAgICBwYXRjaChuZXdDaGlsZFZub2RlLCBlbXB0eVZub2RlKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIE9sZCBjaGlsZCBkb2VzIG5vdCBleGlzdHNcbiAgICAvLyBOZXcgY2hpbGQgaXMgYSB0ZXh0IG5vZGVcbiAgICBpZiAobmV3Q2hpbGRWbm9kZS50YWcgPT09IFRleHRTdHJpbmcpIHtcbiAgICAgIG5ld0NoaWxkVm5vZGUuZG9tID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobmV3Q2hpbGRWbm9kZS5ub2RlVmFsdWUgYXMgc3RyaW5nKSBhcyB1bmtub3duIGFzIERvbUVsZW1lbnQ7XG4gICAgICBuZXdWbm9kZS5kb20uYXBwZW5kQ2hpbGQobmV3Q2hpbGRWbm9kZS5kb20pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gTmV3IGNoaWxkIGlzIGEgbm9ybWFsIG5vZGVcbiAgICBuZXdDaGlsZFZub2RlLmRvbSA9IGNyZWF0ZURvbUVsZW1lbnQobmV3Q2hpbGRWbm9kZS50YWcsIG5ld0NoaWxkVm5vZGUuaXNTVkcpO1xuICAgIHNldEF0dHJpYnV0ZXMobmV3Q2hpbGRWbm9kZSk7XG4gICAgbmV3Vm5vZGUuZG9tLmFwcGVuZENoaWxkKG5ld0NoaWxkVm5vZGUuZG9tKTtcbiAgICBuZXdDaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlICYmIG5ld0NoaWxkVm5vZGUucHJvcHMub25jcmVhdGUobmV3Q2hpbGRWbm9kZSk7XG4gICAgcGF0Y2gobmV3Q2hpbGRWbm9kZSwgZW1wdHlWbm9kZSk7XG4gIH1cblxuICAvLyBGb3IgdGhlIHJlc3Qgb2YgdGhlIGNoaWxkcmVuLCB3ZSBzaG91bGQgcmVtb3ZlIHRoZW1cbiAgZm9yIChsZXQgaSA9IG5ld1RyZWVMZW5ndGg7IGkgPCBvbGRUcmVlTGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgb2xkQ2hpbGRWbm9kZSA9IG9sZFRyZWVbaV07XG4gICAgb2xkQ2hpbGRWbm9kZS50YWcgIT09IFRleHRTdHJpbmcgJiYgb25yZW1vdmUob2xkQ2hpbGRWbm9kZSk7XG4gICAgb2xkQ2hpbGRWbm9kZS5kb20ucGFyZW50Tm9kZSAmJiBvbGRDaGlsZFZub2RlLmRvbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG9sZENoaWxkVm5vZGUuZG9tKTtcbiAgfVxufVxuXG4vKioqIERpcmVjdGl2ZXMgKioqL1xuXG5mdW5jdGlvbiBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBkaXJlY3RpdmU6IERpcmVjdGl2ZSkge1xuICBsZXQgZnVsbE5hbWUgPSBgdi0ke25hbWV9YDtcbiAgZGlyZWN0aXZlc1tmdWxsTmFtZV0gPSBkaXJlY3RpdmU7XG4gIHJlc2VydmVkUHJvcHNbZnVsbE5hbWVdID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaGlkZURpcmVjdGl2ZSh0ZXN0OiBib29sZWFuKTogRGlyZWN0aXZlIHtcbiAgcmV0dXJuIChib29sOiBib29sZWFuLCB2bm9kZTogSVZub2RlLCBvbGRWbm9kZT86IElWbm9kZSkgPT4ge1xuICAgIGxldCB2YWx1ZSA9IHRlc3QgPyBib29sIDogIWJvb2w7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBsZXQgbmV3ZG9tID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIik7XG4gICAgICBpZiAob2xkVm5vZGUgJiYgb2xkVm5vZGUuZG9tICYmIG9sZFZub2RlLmRvbS5wYXJlbnROb2RlKSB7XG4gICAgICAgIG9sZFZub2RlLnRhZyAhPT0gVGV4dFN0cmluZyAmJiBvbnJlbW92ZShvbGRWbm9kZSk7XG4gICAgICAgIG9sZFZub2RlLmRvbS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuZXdkb20sIG9sZFZub2RlLmRvbSk7XG4gICAgICB9XG4gICAgICB2bm9kZS50YWcgPSBUZXh0U3RyaW5nO1xuICAgICAgdm5vZGUuY2hpbGRyZW4gPSBbXTtcbiAgICAgIHZub2RlLnByb3BzID0ge307XG4gICAgICB2bm9kZS5kb20gPSBuZXdkb20gYXMgdW5rbm93biBhcyBEb21FbGVtZW50O1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcbn1cblxuY29uc3QgZGlyZWN0aXZlczogRGlyZWN0aXZlcyA9IHtcbiAgXCJ2LWlmXCI6IGhpZGVEaXJlY3RpdmUoZmFsc2UpLFxuICBcInYtdW5sZXNzXCI6IGhpZGVEaXJlY3RpdmUodHJ1ZSksXG4gIFwidi1mb3JcIjogKHNldDogdW5rbm93bltdLCB2bm9kZTogVm5vZGVXaXRoRG9tKSA9PiB7XG4gICAgdm5vZGUuY2hpbGRyZW4gPSBzZXQubWFwKHZub2RlLmNoaWxkcmVuWzBdKTtcbiAgfSxcbiAgXCJ2LXNob3dcIjogKGJvb2w6IGJvb2xlYW4sIHZub2RlOiBWbm9kZVdpdGhEb20pID0+IHtcbiAgICAodm5vZGUuZG9tIGFzIHVua25vd24gYXMgeyBzdHlsZTogeyBkaXNwbGF5OiBzdHJpbmcgfSB9KS5zdHlsZS5kaXNwbGF5ID0gYm9vbCA/IFwiXCIgOiBcIm5vbmVcIjtcbiAgfSxcbiAgXCJ2LWNsYXNzXCI6IChjbGFzc2VzOiB7IFt4OiBzdHJpbmddOiBib29sZWFuIH0sIHZub2RlOiBWbm9kZVdpdGhEb20pID0+IHtcbiAgICBmb3IgKGxldCBuYW1lIGluIGNsYXNzZXMpIHtcbiAgICAgICh2bm9kZS5kb20gYXMgRG9tRWxlbWVudCkuY2xhc3NMaXN0LnRvZ2dsZShuYW1lLCBjbGFzc2VzW25hbWVdKTtcbiAgICB9XG4gIH0sXG4gIFwidi1odG1sXCI6IChodG1sOiBzdHJpbmcsIHZub2RlOiBWbm9kZVdpdGhEb20pID0+IHtcbiAgICB2bm9kZS5jaGlsZHJlbiA9IFt0cnVzdChodG1sKV07XG4gIH0sXG4gIFwidi1tb2RlbFwiOiAoW21vZGVsLCBwcm9wZXJ0eSwgZXZlbnRdOiBhbnlbXSwgdm5vZGU6IFZub2RlV2l0aERvbSwgb2xkVm5vZGU/OiBWbm9kZVdpdGhEb20pID0+IHtcbiAgICBsZXQgdmFsdWU7XG4gICAgbGV0IGhhbmRsZXI7XG4gICAgaWYgKHZub2RlLm5hbWUgPT09IFwiaW5wdXRcIikge1xuICAgICAgZXZlbnQgPSBldmVudCB8fCBcIm9uaW5wdXRcIjtcbiAgICAgIHN3aXRjaCAodm5vZGUucHJvcHMudHlwZSkge1xuICAgICAgICBjYXNlIFwiY2hlY2tib3hcIjoge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1vZGVsW3Byb3BlcnR5XSkpIHtcbiAgICAgICAgICAgIGhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgbGV0IHZhbCA9IChlLnRhcmdldCBhcyBEb21FbGVtZW50ICYgUmVjb3JkPHN0cmluZywgYW55PikudmFsdWU7XG4gICAgICAgICAgICAgIGxldCBpZHggPSBtb2RlbFtwcm9wZXJ0eV0uaW5kZXhPZih2YWwpO1xuICAgICAgICAgICAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XS5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldLnNwbGljZShpZHgsIDEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFsdWUgPSBtb2RlbFtwcm9wZXJ0eV0uaW5kZXhPZih2bm9kZS5kb20udmFsdWUpICE9PSAtMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFwidmFsdWVcIiBpbiB2bm9kZS5wcm9wcykge1xuICAgICAgICAgICAgaGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG1vZGVsW3Byb3BlcnR5XSA9PT0gdm5vZGUucHJvcHMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0gPSBudWxsO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XSA9IHZub2RlLnByb3BzLnZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFsdWUgPSBtb2RlbFtwcm9wZXJ0eV0gPT09IHZub2RlLnByb3BzLnZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoYW5kbGVyID0gKCkgPT4gKG1vZGVsW3Byb3BlcnR5XSA9ICFtb2RlbFtwcm9wZXJ0eV0pO1xuICAgICAgICAgICAgdmFsdWUgPSBtb2RlbFtwcm9wZXJ0eV07XG4gICAgICAgICAgfVxuICAgICAgICAgIHNldEF0dHJpYnV0ZShcImNoZWNrZWRcIiwgdmFsdWUsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInJhZGlvXCI6IHtcbiAgICAgICAgICBzZXRBdHRyaWJ1dGUoXCJjaGVja2VkXCIsIG1vZGVsW3Byb3BlcnR5XSA9PT0gdm5vZGUuZG9tLnZhbHVlLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBzZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCBtb2RlbFtwcm9wZXJ0eV0sIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZub2RlLm5hbWUgPT09IFwic2VsZWN0XCIpIHtcbiAgICAgIGV2ZW50ID0gZXZlbnQgfHwgXCJvbmNsaWNrXCI7XG4gICAgICBpZiAodm5vZGUucHJvcHMubXVsdGlwbGUpIHtcbiAgICAgICAgaGFuZGxlciA9IChlOiBFdmVudCAmIFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHtcbiAgICAgICAgICBsZXQgdmFsID0gKGUudGFyZ2V0IGFzIERvbUVsZW1lbnQgJiBSZWNvcmQ8c3RyaW5nLCBhbnk+KS52YWx1ZTtcbiAgICAgICAgICBpZiAoZS5jdHJsS2V5KSB7XG4gICAgICAgICAgICBsZXQgaWR4ID0gbW9kZWxbcHJvcGVydHldLmluZGV4T2YodmFsKTtcbiAgICAgICAgICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XS5wdXNoKHZhbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0uc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XS5zcGxpY2UoMCwgbW9kZWxbcHJvcGVydHldLmxlbmd0aCk7XG4gICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0ucHVzaCh2YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdm5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IElWbm9kZSkgPT4ge1xuICAgICAgICAgIGlmIChjaGlsZC50YWcgPT09IFwib3B0aW9uXCIpIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IFwidmFsdWVcIiBpbiBjaGlsZC5wcm9wcyA/IGNoaWxkLnByb3BzLnZhbHVlIDogY2hpbGQuY2hpbGRyZW4uam9pbihcIlwiKS50cmltKCk7XG4gICAgICAgICAgICBjaGlsZC5wcm9wcy5zZWxlY3RlZCA9IG1vZGVsW3Byb3BlcnR5XS5pbmRleE9mKHZhbHVlKSAhPT0gLTE7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBJVm5vZGUpID0+IHtcbiAgICAgICAgICBpZiAoY2hpbGQudGFnID09PSBcIm9wdGlvblwiKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBcInZhbHVlXCIgaW4gY2hpbGQucHJvcHMgPyBjaGlsZC5wcm9wcy52YWx1ZSA6IGNoaWxkLmNoaWxkcmVuLmpvaW4oXCJcIikudHJpbSgpO1xuICAgICAgICAgICAgY2hpbGQucHJvcHMuc2VsZWN0ZWQgPSB2YWx1ZSA9PT0gbW9kZWxbcHJvcGVydHldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2bm9kZS5uYW1lID09PSBcInRleHRhcmVhXCIpIHtcbiAgICAgIGV2ZW50ID0gZXZlbnQgfHwgXCJvbmlucHV0XCI7XG4gICAgICB2bm9kZS5jaGlsZHJlbiA9IFttb2RlbFtwcm9wZXJ0eV1dO1xuICAgIH1cblxuICAgIGlmICghdm5vZGUucHJvcHNbZXZlbnRdKSB7XG4gICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgaGFuZGxlciA9IChlOiBFdmVudCkgPT4gKG1vZGVsW3Byb3BlcnR5XSA9IChlLnRhcmdldCBhcyBEb21FbGVtZW50ICYgUmVjb3JkPHN0cmluZywgYW55PikudmFsdWUpO1xuICAgICAgfVxuICAgICAgc2V0QXR0cmlidXRlKGV2ZW50LCBoYW5kbGVyLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqKiBQbHVnaW5zICoqKi9cbmNvbnN0IHBsdWdpbnMgPSBuZXcgTWFwPFBsdWdpbiwgYW55PigpO1xuXG5mdW5jdGlvbiB1c2UocGx1Z2luOiBQbHVnaW4sIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sLCBhbnk+KTogdm9pZCB8IGFueSB7XG4gIGlmIChwbHVnaW5zLmhhcyhwbHVnaW4pKSB7XG4gICAgcmV0dXJuIHBsdWdpbnMuZ2V0KHBsdWdpbik7XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gcGx1Z2luKHYsIG9wdGlvbnMpO1xuICBwbHVnaW5zLnNldChwbHVnaW4sIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiogSHlwZXJzY3JpcHQgKioqL1xuXG5jb25zdCB2OiBWYWx5cmlhbiA9IGZ1bmN0aW9uIHYodGFnT3JDb21wb25lbnQ6IHN0cmluZyB8IFZhbHlyaWFuQ29tcG9uZW50LCBwcm9wczogUHJvcHMsIC4uLmNoaWxkcmVuOiBDaGlsZHJlbik6IElWbm9kZSB8IFZub2RlQ29tcG9uZW50IHtcbiAgaWYgKHR5cGVvZiB0YWdPckNvbXBvbmVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBuZXcgVm5vZGUodGFnT3JDb21wb25lbnQsIHByb3BzIHx8IHt9LCBjaGlsZHJlbik7XG4gIH1cblxuICBjb25zdCB2bm9kZSA9IG5ldyBWbm9kZShcIl9fY29tcG9uZW50X19cIiwgcHJvcHMgfHwge30sIGNoaWxkcmVuKTtcbiAgdm5vZGUuY29tcG9uZW50ID0gdGFnT3JDb21wb25lbnQ7XG4gIHJldHVybiB2bm9kZSBhcyBWbm9kZUNvbXBvbmVudDtcbn07XG5cbnYuZnJhZ21lbnQgPSAocHJvcHM6IFByb3BzLCAuLi5jaGlsZHJlbjogQ2hpbGRyZW4pOiBDaGlsZHJlbiA9PiB7XG4gIHJldHVybiBjaGlsZHJlbjtcbn07XG5cbi8qKiogViBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzICoqKi9cbi8vIFRoaXMgaXMgaW50ZW5kZWQgdG8gbWFrZSB0aGUgcHJvcGVydGllcyBhbmQgbWV0aG9kcyBhdmFpbGFibGUgZm9yIHBsdWdpbnNcbnYuY3VycmVudCA9IGN1cnJlbnQ7XG5cbnYuZGlyZWN0aXZlcyA9IGRpcmVjdGl2ZXM7XG5cbnYucmVzZXJ2ZWRQcm9wcyA9IHJlc2VydmVkUHJvcHM7XG5cbnYuaXNWbm9kZSA9IGlzVm5vZGU7XG52LmlzQ29tcG9uZW50ID0gaXNDb21wb25lbnQ7XG52LmlzVm5vZGVDb21wb25lbnQgPSBpc1Zub2RlQ29tcG9uZW50O1xuXG52LmlzTW91bnRlZCA9IGZhbHNlO1xudi5pc05vZGVKcyA9IGlzTm9kZUpzO1xudi50cnVzdCA9IHRydXN0O1xuXG52Lm9uQ2xlYW51cCA9IG9uQ2xlYW51cDtcbnYub25Vbm1vdW50ID0gb25Vbm1vdW50O1xudi5vbk1vdW50ID0gb25Nb3VudDtcbnYub25VcGRhdGUgPSBvblVwZGF0ZTtcblxudi5tb3VudCA9IG1vdW50O1xudi51bm1vdW50ID0gdW5tb3VudDtcbnYudXBkYXRlID0gdXBkYXRlO1xuXG52LnNldEF0dHJpYnV0ZSA9IHNldEF0dHJpYnV0ZTtcbnYuZGlyZWN0aXZlID0gZGlyZWN0aXZlO1xudi51c2UgPSB1c2U7XG5cbmV4cG9ydCBkZWZhdWx0IHY7XG4iXX0=
|
|
1
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9pbmRleC50cyJdLCJuYW1lcyI6WyJDb21wb25lbnRTdHJpbmciLCJUZXh0U3RyaW5nIiwiaXNOb2RlSnMiLCJCb29sZWFuIiwicHJvY2VzcyIsInZlcnNpb25zIiwibm9kZSIsIlVuZCIsIlZub2RlIiwidGFnIiwicHJvcHMiLCJjaGlsZHJlbiIsInRoaXMiLCJpc0NvbXBvbmVudCIsImNvbXBvbmVudCIsImlzVm5vZGVDb21wb25lbnQiLCJ2bm9kZSIsImNyZWF0ZURvbUVsZW1lbnQiLCJpc1NWRyIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudE5TIiwiY3JlYXRlRWxlbWVudCIsImRvbVRvVm5vZGUiLCJkb20iLCJub2RlVHlwZSIsInYiLCJub2RlVmFsdWUiLCJpIiwiY2hpbGROb2RlcyIsImxlbmd0aCIsImNoaWxkIiwicHVzaCIsImZvckVhY2giLCJjYWxsIiwiYXR0cmlidXRlcyIsInByb3AiLCJub2RlTmFtZSIsInRhZ05hbWUiLCJ0b0xvd2VyQ2FzZSIsInRydXN0IiwiaHRtbFN0cmluZyIsImRpdiIsImlubmVySFRNTCIsInRyaW0iLCJtYXAiLCJpdGVtIiwicmVzZXJ2ZWRQcm9wcyIsImtleSIsInN0YXRlIiwib25jcmVhdGUiLCJvbnVwZGF0ZSIsIm9ucmVtb3ZlIiwic2hvdWxkdXBkYXRlIiwiZXZlbnRMaXN0ZW5lck5hbWVzIiwib25DbGVhbnVwTGlzdCIsIm9uTW91bnRMaXN0Iiwib25VcGRhdGVMaXN0Iiwib25Vbm1vdW50TGlzdCIsImN1cnJlbnQiLCJldmVudExpc3RlbmVyIiwiZSIsInRhcmdldCIsIm5hbWUiLCJ0eXBlIiwiZGVmYXVsdFByZXZlbnRlZCIsInVwZGF0ZSIsInBhcmVudE5vZGUiLCJjYWxsQ2FsbGJhY2tMaXN0IiwibGlzdCIsIm1haW5Wbm9kZSIsIm9sZFZub2RlIiwicGF0Y2giLCJpc01vdW50ZWQiLCJ1bm1vdW50IiwiZW1wdHlWbm9kZSIsInNoYXJlZFNldEF0dHJpYnV0ZSIsInZhbHVlIiwiZGlyZWN0aXZlcyIsImNvbnRhaW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJzbGljZSIsInJlbW92ZUF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZXMiLCJuZXdWbm9kZSIsIm5ld1RyZWUiLCJvbGRUcmVlIiwiY2hpbGRWbm9kZSIsInJlc3VsdCIsInZpZXciLCJzcGxpY2UiLCJBcnJheSIsImlzQXJyYXkiLCJvbGRUcmVlTGVuZ3RoIiwibmV3VHJlZUxlbmd0aCIsIm9sZEtleWVkTGlzdCIsIm5ld0tleWVkTGlzdCIsIm9sZENoaWxkVm5vZGUiLCJzaG91bGRQYXRjaCIsImFwcGVuZENoaWxkIiwicmVwbGFjZUNoaWxkIiwicmVtb3ZlQ2hpbGQiLCJuZXdDaGlsZFZub2RlIiwiY3JlYXRlVGV4dE5vZGUiLCJ0ZXh0Q29udGVudCIsImhpZGVEaXJlY3RpdmUiLCJ0ZXN0IiwiYm9vbCIsIm5ld2RvbSIsInNldCIsInN0eWxlIiwiZGlzcGxheSIsImNsYXNzZXMiLCJjbGFzc0xpc3QiLCJ0b2dnbGUiLCJodG1sIiwibW9kZWwiLCJwcm9wZXJ0eSIsImV2ZW50IiwiaGFuZGxlciIsInZhbCIsImlkeCIsImluZGV4T2YiLCJtdWx0aXBsZSIsImN0cmxLZXkiLCJ2YWx1ZTIiLCJqb2luIiwic2VsZWN0ZWQiLCJwbHVnaW5zIiwiTWFwIiwidGFnT3JDb21wb25lbnQiLCJmcmFnbWVudCIsImlzVm5vZGUiLCJvYmplY3QiLCJvbkNsZWFudXAiLCJjYWxsYmFjayIsIm9uVW5tb3VudCIsIm9uTW91bnQiLCJvblVwZGF0ZSIsIm1vdW50Iiwidm5vZGVDb21wb25lbnQiLCJhcHBDb250YWluZXIiLCJxdWVyeVNlbGVjdG9yQWxsIiwiRXJyb3IiLCJkaXJlY3RpdmUiLCJkaXJlY3RpdmUyIiwiZnVsbE5hbWUiLCJ1c2UiLCJwbHVnaW4iLCJvcHRpb25zIiwiaGFzIiwiZ2V0Il0sIm1hcHBpbmdzIjoiTUFxQkEsSUFBTUEsRUFBa0IsZ0JBQ2xCQyxFQUFhLFFBQ2JDLEVBQVdDLFFBQTJCLG9CQUFaQyxTQUEyQkEsUUFBUUMsVUFBWUQsUUFBUUMsU0FBU0MsTUFDMUZDLE9BQU0sRUFJTkMsRUFBUSxTQUE2QkMsRUFBYUMsRUFBY0MsR0FDcEVDLEtBQUtGLE1BQVFBLEVBQ2JFLEtBQUtELFNBQVdBLEVBQ2hCQyxLQUFLSCxJQUFNQSxHQU9iLFNBQUFJLEVBQXFCQyxHQUNuQixNQUE0QixtQkFBZEEsR0FBa0QsaUJBQWRBLEdBQXdDLE9BQWRBLEdBQXNCLFNBQVVBLEVBRzlHLFNBQUFDLEVBQTBCQyxHQUN4QixPQUFPQSxhQUFpQlIsR0FBU1EsRUFBTVAsTUFBUVQsRUFLakQsU0FBQWlCLEVBQTBCUixFQUFhUyxHQUFpQixHQUN0RCxPQUFPQSxFQUFRQyxTQUFTQyxnQkFBZ0IsNkJBQThCWCxHQUFPVSxTQUFTRSxjQUFjWixHQUd0RyxTQUFBYSxFQUFvQkMsR0FDbEIsR0FBcUIsSUFBakJBLEVBQUlDLFNBQWdCLENBQ3RCLElBQUlSLEVBQVFTLEVBQUV4QixFQUFZLEdBQUksSUFHOUIsT0FGQWUsRUFBTVUsVUFBWUgsRUFBSUcsVUFDdEJWLEVBQU1PLElBQU1BLEVBQ0xQLEVBR1QsR0FBcUIsSUFBakJPLEVBQUlDLFNBQWdCLENBQ3RCLElBQUliLEVBQVcsR0FDZixJQUFBLElBQVNnQixFQUFJLEVBQUdBLEVBQUlKLEVBQUlLLFdBQVdDLE9BQVFGLElBQUssQ0FDOUMsSUFBSUcsRUFBUVIsRUFBV0MsRUFBSUssV0FBV0QsSUFDbENHLEdBQ0ZuQixFQUFTb0IsS0FBS0QsR0FJbEIsSUFBSXBCLEVBQWUsR0FDbkIsR0FBR3NCLFFBQVFDLEtBQUtWLEVBQUlXLFdBQWFDLEdBQWdCekIsRUFBTXlCLEVBQUtDLFVBQVlELEVBQUtULFdBRTdFLElBQUlWLEVBQVFTLEVBQUVGLEVBQUljLFFBQVFDLGNBQWU1QixLQUFVQyxHQUVuRCxPQURBSyxFQUFNTyxJQUFNQSxFQUNMUCxHQUlYLElBQU11QixFQUFTQyxJQUNiLElBQUlDLEVBQU14QixFQUFpQixPQUczQixPQUZBd0IsRUFBSUMsVUFBWUYsRUFBV0csT0FFcEIsR0FBR0MsSUFBSVgsS0FBS1EsRUFBSWIsV0FBYWlCLEdBQVN2QixFQUFXdUIsS0FHcERDLEVBQStCLENBQ25DQyxLQUFLLEVBQ0xDLE9BQU8sRUFDUEMsVUFBVSxFQUNWQyxVQUFVLEVBQ1ZDLFVBQVUsRUFDVkMsY0FBYyxFQUNkLFVBQVUsRUFHVixRQUFRLEVBQ1IsWUFBWSxFQUNaLFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFVBQVUsRUFDVixXQUFXLEdBS1BDLEVBQTJDLEdBQzdDQyxFQUE0QixHQUM1QkMsRUFBMEIsR0FDMUJDLEVBQTJCLEdBQzNCQyxFQUE0QixHQUMxQkMsRUFBbUIsR0FDekIsU0FBQUMsRUFBdUJDLEdBQ3JCLElBQUlyQyxFQUFNcUMsRUFBRUMsT0FDUkMsRUFBTyxPQUFPRixFQUFFRyxPQUNwQixLQUFPeEMsR0FBSyxDQUNWLEdBQUlBLEVBQUl1QyxHQUtOLE9BSkF2QyxFQUFJdUMsR0FBTUYsRUFBR3JDLFFBQ1JxQyxFQUFFSSxrQkFDTEMsS0FJSjFDLEVBQU1BLEVBQUkyQyxZQW9FZCxTQUFBQyxFQUEwQkMsR0FDeEIsSUFBQSxJQUFTekMsRUFBSSxFQUFHQSxFQUFJeUMsRUFBS3ZDLE9BQVFGLElBQy9CeUMsRUFBS3pDLEtBRVB5QyxFQUFPLEdBR1QsU0FBQUgsSUFDRSxHQUFJeEMsRUFBRVgsV0FBYVcsRUFBRTRDLFVBQVcsQ0FDOUJmLEVBQWN6QixRQUFVc0MsRUFBaUJiLEdBQ3pDLElBQUlnQixFQUFnQzdDLEVBQUU0QyxVQVl0QyxHQVhBNUMsRUFBRTRDLFVBQVksSUFBSTdELEVBQU1pQixFQUFFNEMsVUFBVTVELElBQUtnQixFQUFFNEMsVUFBVTNELE1BQU8sQ0FBQ2UsRUFBRVgsWUFDL0RXLEVBQUU0QyxVQUFVOUMsSUFBTStDLEVBQVMvQyxJQUMzQmdELEVBQU05QyxFQUFFNEMsVUFBV0MsR0FDbkJBLEVBQVcsTUFDUyxJQUFoQjdDLEVBQUUrQyxXQUNKakIsRUFBWTFCLFFBQVVzQyxFQUFpQlosR0FDdkM5QixFQUFFK0MsV0FBWSxHQUVkaEIsRUFBYTNCLFFBQVVzQyxFQUFpQlgsR0FHdEN0RCxFQUNGLE9BQU91QixFQUFFNEMsVUFBVTlDLElBQUltQixXQUs3QixTQUFBK0IsSUFDRSxHQUFJaEQsRUFBRStDLFdBQWEvQyxFQUFFNEMsV0FBYTVDLEVBQUVYLFVBQVcsQ0FDN0N3QyxFQUFjekIsUUFBVXNDLEVBQWlCYixHQUN6Q0csRUFBYzVCLFFBQVVzQyxFQUFpQlYsR0FDekMsSUFBSWEsRUFBZ0M3QyxFQUFFNEMsVUFRdEMsR0FQQTVDLEVBQUU0QyxVQUFZLElBQUk3RCxFQUFNaUIsRUFBRTRDLFVBQVU1RCxJQUFLZ0IsRUFBRTRDLFVBQVUzRCxNQUFPLElBQzVEZSxFQUFFNEMsVUFBVTlDLElBQU0rQyxFQUFTL0MsSUFDM0JFLEVBQUU0QyxVQUFVbkQsTUFBUW9ELEVBQVNwRCxNQUM3QnFELEVBQU05QyxFQUFFNEMsVUFBV0MsR0FDbkJBLEVBQVcsS0FDWDdDLEVBQUVYLFVBQVksS0FDZFcsRUFBRStDLFdBQVksRUFDVnRFLEVBQ0YsT0FBT3VCLEVBQUU0QyxVQUFVOUMsSUFBSW1CLFdBSzdCLElBQUlnQyxFQUFhLElBQUlsRSxFQUFNLFlBQWEsR0FBSSxJQUU1QyxTQUFBMkMsRUFBa0JuQyxHQUNoQixJQUFBLElBQVNXLEVBQUksRUFBR0EsRUFBSVgsRUFBTUwsU0FBU2tCLE9BQVFGLElBQ3pDWCxFQUFNTCxTQUFTZ0IsR0FBR2xCLE1BQVFSLEdBQWNrRCxFQUFTbkMsRUFBTUwsU0FBU2dCLElBR2xFWCxFQUFNTixNQUFNeUMsVUFBWW5DLEVBQU1OLE1BQU15QyxTQUFTbkMsR0FHL0MsU0FBQTJELEVBQTRCeEMsRUFBY3lDLEVBQVk1RCxFQUFxQnNELEdBRXpFLE9BQUl4QixFQUFjWCxHQUVaMEMsRUFBVzFDLEdBQ04wQyxFQUFXMUMsR0FBTW5CLEVBQU1OLE1BQU15QixHQUFPbkIsRUFBT3NELFFBR3BELEVBSW1CLG1CQUFWTSxHQUNMekMsS0FBUWtCLElBQXVCLElBQ2pDQSxFQUFtQmxCLElBQVEsRUFDMUJWLEVBQUVxRCxVQUF5QkMsaUJBQWlCNUMsRUFBSzZDLE1BQU0sR0FBSXJCLFNBRTlEM0MsRUFBTU8sSUFBSSxLQUFLWSxLQUFVeUMsU0FJdkJ6QyxLQUFRbkIsRUFBTU8sTUFBdUIsSUFBaEJQLEVBQU1FLE1BRXpCRixFQUFNTyxJQUFJWSxJQUFTeUMsSUFDckI1RCxFQUFNTyxJQUFJWSxHQUFReUMsR0FNakJOLEdBQVlBLEVBQVM1RCxNQUFNeUIsS0FBVXlDLEtBQzFCLElBQVZBLEVBQ0Y1RCxFQUFNTyxJQUFJMEQsZ0JBQWdCOUMsR0FFMUJuQixFQUFNTyxJQUFJMkQsYUFBYS9DLEVBQU15QyxLQUtuQyxTQUFBTSxFQUFzQnBCLEVBQWNjLEVBQVk1RCxFQUFxQnNELEdBQ25FdEQsRUFBTU4sTUFBTW9ELEdBQVFjLEVBRXBCRCxFQUFtQmIsRUFBTWMsRUFBTzVELEVBQU9zRCxHQUd6QyxTQUFBYSxFQUF1Qm5FLEVBQXFCc0QsR0FDMUMsSUFBQSxJQUFTbkMsS0FBUW5CLEVBQU1OLE1BQ3JCLElBQXFFLElBQWpFaUUsRUFBbUJ4QyxFQUFNbkIsRUFBTU4sTUFBTXlCLEdBQU9uQixFQUFPc0QsR0FDckQsT0FJSixHQUFJQSxFQUNGLElBQUEsSUFBU25DLEtBQVFtQyxFQUFTNUQsTUFDcEJ5QixLQUFRbkIsRUFBTU4sUUFBVSxHQUF5QyxtQkFBekI0RCxFQUFTNUQsTUFBTXlCLElBQXdCQSxLQUFRVyxJQUFrQixJQUN2R1gsS0FBUW1DLEVBQVMvQyxNQUF1QixJQUFoQlAsRUFBTUUsTUFDaENvRCxFQUFTL0MsSUFBSVksR0FBUSxLQUVyQm1DLEVBQVMvQyxJQUFJMEQsZ0JBQWdCOUMsSUFRdkMsU0FBQW9DLEVBQWVhLEVBQXdCZCxFQUFrQ0ksR0FDdkVoQixFQUFRMUMsTUFBUW9FLEVBQ2hCMUIsRUFBUVksU0FBV0EsSUFBYUksRUFBYW5FLEVBQU8rRCxFQUNwRCxJQUFJZSxFQUFVRCxFQUFTekUsU0FDbkIyRSxFQUFVaEIsRUFBUzNELFNBRXZCLElBQUEsSUFBU2dCLEVBQUksRUFBR0EsRUFBSTBELEVBQVF4RCxPQUFRRixJQUFLLENBQ3ZDLElBQUk0RCxFQUFhRixFQUFRMUQsR0FDekIsR0FBSTRELGFBQXNCL0UsR0FDeEIsR0FBSStFLEVBQVc5RSxNQUFRUixFQUFZLENBQ2pDLEdBQUlzRixFQUFXOUUsTUFBUVQsRUFBaUIsQ0FDdEMsSUFBSWMsRUFBWXlFLEVBQVd6RSxVQUMzQjRDLEVBQVE1QyxVQUFZQSxFQUNwQixJQUFJMEUsR0FBVSxTQUFVMUUsRUFBWUEsRUFBVTJFLEtBQU8zRSxHQUFXbUIsS0FBS25CLEVBQVd5RSxFQUFXN0UsU0FBVTZFLEVBQVc1RSxVQUVoSDBFLEVBQVFLLE9BQU8vRCxJQUFLLEVBQUc2RCxHQUN2QixTQUVGRCxFQUFXckUsTUFBUWtFLEVBQVNsRSxPQUE0QixRQUFuQnFFLEVBQVc5RSxVQUV6Q2tGLE1BQU1DLFFBQVFMLEdBQ3ZCRixFQUFRSyxPQUFPL0QsSUFBSyxLQUFNNEQsR0FDRixPQUFmQSxHQUF1QkEsSUFBZWhGLEVBQy9DOEUsRUFBUUssT0FBTy9ELElBQUssSUFFcEIwRCxFQUFRMUQsR0FBSyxJQUFJbkIsRUFBTVAsRUFBWSxHQUFJLElBQ3ZDb0YsRUFBUTFELEdBQUdELFVBQVk2RCxHQUkzQixJQUFJTSxFQUFnQlAsRUFBUXpELE9BQ3hCaUUsRUFBZ0JULEVBQVF4RCxPQUc1QixHQUFzQixJQUFsQmlFLEVBVUosR0FBSUQsR0FBaUIsUUFBU1IsRUFBUSxHQUFHM0UsT0FBUyxRQUFTNEUsRUFBUSxHQUFHNUUsTUFBdEUsQ0FDRSxJQUFJcUYsRUFBMEMsR0FDOUMsSUFBQSxJQUFTcEUsRUFBSSxFQUFHQSxFQUFJa0UsRUFBZWxFLElBQ2pDb0UsRUFBYVQsRUFBUTNELEdBQUdqQixNQUFNcUMsS0FBT3BCLEVBR3ZDLElBQUlxRSxFQUEwQyxHQUM5QyxJQUFBLElBQVNyRSxFQUFJLEVBQUdBLEVBQUltRSxFQUFlbkUsSUFDakNxRSxFQUFhWCxFQUFRMUQsR0FBR2pCLE1BQU1xQyxLQUFPcEIsRUFHdkMsSUFBQSxJQUFTQSxFQUFJLEVBQUdBLEVBQUltRSxFQUFlbkUsSUFBSyxDQUN0QyxJQUFJNEQsRUFBYUYsRUFBUTFELEdBQ3JCc0UsRUFBZ0JYLEVBQVFTLEVBQWFSLEVBQVc3RSxNQUFNcUMsTUFDdERtRCxHQUFjLEVBRWRELEdBQ0ZWLEVBQVdoRSxJQUFNMEUsRUFBYzFFLElBQzNCLFdBQVlnRSxFQUFXN0UsT0FBVTZFLEVBQVc3RSxNQUFNMEMsZUFBNkUsSUFBN0RtQyxFQUFXN0UsTUFBTTBDLGFBQWFtQyxFQUFZVSxJQUU5R1YsRUFBVzVFLFNBQVdzRixFQUFjdEYsU0FDcEN1RixHQUFjLElBRWRmLEVBQWNJLEVBQVlVLEdBQ3RCeEUsRUFBRStDLFVBQ0plLEVBQVc3RSxNQUFNd0MsVUFBWXFDLEVBQVc3RSxNQUFNd0MsU0FBU3FDLEVBQVlVLEdBRW5FVixFQUFXN0UsTUFBTXVDLFVBQVlzQyxFQUFXN0UsTUFBTXVDLFNBQVNzQyxNQUkzREEsRUFBV2hFLElBQU1OLEVBQWlCc0UsRUFBVzlFLElBQUs4RSxFQUFXckUsT0FDN0RpRSxFQUFjSSxHQUNkQSxFQUFXN0UsTUFBTXVDLFVBQVlzQyxFQUFXN0UsTUFBTXVDLFNBQVNzQyxJQUdyREgsRUFBUzdELElBQUlLLFdBQVdELEtBQU9wQixFQUNqQzZFLEVBQVM3RCxJQUFJNEUsWUFBWVosRUFBV2hFLEtBQzNCNkQsRUFBUzdELElBQUlLLFdBQVdELEtBQU80RCxFQUFXaEUsTUFDbkQrRCxFQUFRM0QsSUFBTXFFLEVBQWFWLEVBQVEzRCxHQUFHakIsTUFBTXFDLE9BQVN4QyxHQUFPNEMsRUFBU21DLEVBQVEzRCxJQUM3RXlELEVBQVM3RCxJQUFJNkUsYUFBYWIsRUFBV2hFLElBQUs2RCxFQUFTN0QsSUFBSUssV0FBV0QsS0FHcEV1RSxHQUFlM0IsRUFBTWdCLEVBQVlVLEdBSW5DLElBQUEsSUFBU3RFLEVBQUltRSxFQUFlbkUsRUFBSWtFLEVBQWVsRSxJQUM3QyxHQUFJcUUsRUFBYVYsRUFBUTNELEdBQUdqQixNQUFNcUMsT0FBU3hDLEVBQUssQ0FDOUMsSUFBSTBGLEVBQWdCWCxFQUFRM0QsR0FDNUJ3QixFQUFTOEMsR0FDVEEsRUFBYzFFLElBQUkyQyxZQUFjK0IsRUFBYzFFLElBQUkyQyxXQUFXbUMsWUFBWUosRUFBYzFFLFVBbkQ3RixDQTJEQSxJQUFBLElBQVNJLEVBQUksRUFBR0EsRUFBSW1FLEVBQWVuRSxJQUFLLENBQ3RDLElBQUkyRSxFQUFnQmpCLEVBQVExRCxHQUc1QixHQUFJQSxFQUFJa0UsRUFBUixDQUNFLElBQUlJLEVBQWdCWCxFQUFRM0QsR0FFNUIsR0FBSTJFLEVBQWM3RixNQUFRUixFQUFZLENBRXBDLEdBQUlnRyxFQUFjeEYsTUFBUVIsRUFBWSxDQUNwQ3FHLEVBQWMvRSxJQUFNMEUsRUFBYzFFLElBRTlCK0UsRUFBYy9FLElBQUlHLFdBQWE0RSxFQUFjNUUsWUFDL0M0RSxFQUFjL0UsSUFBSUcsVUFBWTRFLEVBQWM1RSxXQUU5QyxTQUlGNEUsRUFBYy9FLElBQU1KLFNBQVNvRixlQUFlRCxFQUFjNUUsV0FDMUR5QixFQUFTOEMsR0FDVGIsRUFBUzdELElBQUk2RSxhQUFhRSxFQUFjL0UsSUFBSzBFLEVBQWMxRSxLQUUzRCxTQUtGLEdBQUkwRSxFQUFjeEYsTUFBUTZGLEVBQWM3RixJQUFLLENBRzNDLEdBRkE2RixFQUFjL0UsSUFBTTBFLEVBQWMxRSxJQUU5QitFLEVBQWM1RixNQUFNLFdBQWM0RixFQUFjNUYsTUFBTTBDLGVBQW1GLElBQW5Fa0QsRUFBYzVGLE1BQU0wQyxhQUFha0QsRUFBZUwsR0FBMkIsQ0FDbkpLLEVBQWMzRixTQUFXc0YsRUFBY3RGLFNBQ3ZDLFNBSUZ3RSxFQUFjbUIsRUFBZUwsR0FDekJ4RSxFQUFFK0MsVUFDSjhCLEVBQWM1RixNQUFNd0MsVUFBWW9ELEVBQWM1RixNQUFNd0MsU0FBU29ELEVBQWVMLEdBRTVFSyxFQUFjNUYsTUFBTXVDLFVBQVlxRCxFQUFjNUYsTUFBTXVDLFNBQVNxRCxHQUcvRC9CLEVBQU0rQixFQUFlTCxHQUNyQixTQUlGSyxFQUFjL0UsSUFBTU4sRUFBaUJxRixFQUFjN0YsSUFBSzZGLEVBQWNwRixPQUN0RWlFLEVBQWNtQixHQUNkTCxFQUFjeEYsTUFBUVIsR0FBY2tELEVBQVM4QyxHQUM3Q0ssRUFBYzVGLE1BQU11QyxVQUFZcUQsRUFBYzVGLE1BQU11QyxTQUFTcUQsR0FDN0RsQixFQUFTN0QsSUFBSTZFLGFBQWFFLEVBQWMvRSxJQUFLMEUsRUFBYzFFLEtBQzNEZ0QsRUFBTStCLEVBQWU1QixRQU1uQjRCLEVBQWM3RixNQUFRUixHQU8xQnFHLEVBQWMvRSxJQUFNTixFQUFpQnFGLEVBQWM3RixJQUFLNkYsRUFBY3BGLE9BQ3RFaUUsRUFBY21CLEdBQ2RsQixFQUFTN0QsSUFBSTRFLFlBQVlHLEVBQWMvRSxLQUN2QytFLEVBQWM1RixNQUFNdUMsVUFBWXFELEVBQWM1RixNQUFNdUMsU0FBU3FELEdBQzdEL0IsRUFBTStCLEVBQWU1QixLQVZuQjRCLEVBQWMvRSxJQUFNSixTQUFTb0YsZUFBZUQsRUFBYzVFLFdBQzFEMEQsRUFBUzdELElBQUk0RSxZQUFZRyxFQUFjL0UsTUFhM0MsSUFBQSxJQUFTSSxFQUFJbUUsRUFBZW5FLEVBQUlrRSxFQUFlbEUsSUFBSyxDQUNsRCxJQUFJc0UsRUFBZ0JYLEVBQVEzRCxHQUM1QnNFLEVBQWN4RixNQUFRUixHQUFja0QsRUFBUzhDLEdBQzdDQSxFQUFjMUUsSUFBSTJDLFlBQWMrQixFQUFjMUUsSUFBSTJDLFdBQVdtQyxZQUFZSixFQUFjMUUsVUFuSnpGLENBQ0UsSUFBQSxJQUFTSSxFQUFJLEVBQUdBLEVBQUlrRSxFQUFlbEUsSUFDakMyRCxFQUFRM0QsR0FBR2xCLE1BQVFSLEdBQWNrRCxFQUFTbUMsRUFBUTNELElBR3BEeUQsRUFBUzdELElBQUlpRixZQUFjLElBMEovQixTQUFBQyxFQUF1QkMsR0FDckIsTUFBTyxDQUFDQyxFQUFlM0YsRUFBZXNELEtBRXBDLEdBRFlvQyxFQUFPQyxHQUFRQSxFQUNoQixDQUNULElBQUlDLEVBQVN6RixTQUFTb0YsZUFBZSxJQVNyQyxPQVJJakMsR0FBWUEsRUFBUy9DLEtBQU8rQyxFQUFTL0MsSUFBSTJDLGFBQzNDSSxFQUFTN0QsTUFBUVIsR0FBY2tELEVBQVNtQixHQUN4Q0EsRUFBUy9DLElBQUkyQyxXQUFXa0MsYUFBYVEsRUFBUXRDLEVBQVMvQyxNQUV4RFAsRUFBTVAsSUFBTVIsRUFDWmUsRUFBTUwsU0FBVyxHQUNqQkssRUFBTU4sTUFBUSxHQUNkTSxFQUFNTyxJQUFNcUYsR0FDTCxJQUtiLElBQU0vQixFQUF5QixDQUM3QixPQUFRNEIsR0FBYyxHQUN0QixXQUFZQSxHQUFjLEdBQzFCLFFBQVMsQ0FBQ0ksRUFBZ0I3RixLQUN4QkEsRUFBTUwsU0FBV2tHLEVBQUlqRSxJQUFJNUIsRUFBTUwsU0FBUyxLQUUxQyxTQUFVLENBQUNnRyxFQUFlM0YsS0FDdkJBLEVBQU1PLElBQWtEdUYsTUFBTUMsUUFBVUosRUFBTyxHQUFLLFFBRXZGLFVBQVcsQ0FBQ0ssRUFBbUNoRyxLQUM3QyxJQUFBLElBQVM4QyxLQUFRa0QsRUFDZGhHLEVBQU1PLElBQW1CMEYsVUFBVUMsT0FBT3BELEVBQU1rRCxFQUFRbEQsS0FHN0QsU0FBVSxDQUFDcUQsRUFBY25HLEtBQ3ZCQSxFQUFNTCxTQUFXLENBQUM0QixFQUFNNEUsS0FFMUIsVUFBVyxFQUFFQyxFQUFPQyxFQUFVQyxHQUFldEcsRUFBcUJzRCxLQUNoRSxJQUFJTSxFQUNBMkMsRUFDSixHQUFrQixVQUFkdkcsRUFBTVAsSUFFUixPQURBNkcsRUFBUUEsR0FBUyxVQUNUdEcsRUFBTU4sTUFBTXFELE1BQUEsSUFDYixXQUNDNEIsTUFBTUMsUUFBUXdCLEVBQU1DLEtBQ3RCRSxFQUFXM0QsSUFDVCxJQUFJNEQsRUFBTzVELEVBQUVDLE9BQTRDZSxNQUNyRDZDLEVBQU1MLEVBQU1DLEdBQVVLLFFBQVFGLElBQ3RCLElBQVJDLEVBQ0ZMLEVBQU1DLEdBQVV0RixLQUFLeUYsR0FFckJKLEVBQU1DLEdBQVUzQixPQUFPK0IsRUFBSyxJQUdoQzdDLEdBQXFELElBQTdDd0MsRUFBTUMsR0FBVUssUUFBUTFHLEVBQU1PLElBQUlxRCxRQUNqQyxVQUFXNUQsRUFBTU4sT0FDMUI2RyxFQUFVLEtBQ0pILEVBQU1DLEtBQWNyRyxFQUFNTixNQUFNa0UsTUFDbEN3QyxFQUFNQyxHQUFZLEtBRWxCRCxFQUFNQyxHQUFZckcsRUFBTU4sTUFBTWtFLE9BR2xDQSxFQUFRd0MsRUFBTUMsS0FBY3JHLEVBQU1OLE1BQU1rRSxRQUV4QzJDLEVBQVUsSUFBT0gsRUFBTUMsSUFBYUQsRUFBTUMsR0FDMUN6QyxFQUFRd0MsRUFBTUMsSUFFaEJuQyxFQUFhLFVBQVdOLEVBQU81RCxFQUFPc0QsR0FDdEMsTUFBQSxJQUVHLFFBQ0hZLEVBQWEsVUFBV2tDLEVBQU1DLEtBQWNyRyxFQUFNTyxJQUFJcUQsTUFBTzVELEVBQU9zRCxHQUNwRSxNQUFBLFFBR0FZLEVBQWEsUUFBU2tDLEVBQU1DLEdBQVdyRyxFQUFPc0QsT0FHM0IsV0FBZHRELEVBQU1QLEtBQ2Y2RyxFQUFRQSxHQUFTLFVBQ2J0RyxFQUFNTixNQUFNaUgsVUFDZEosRUFBVzNELElBQ1QsSUFBSTRELEVBQU81RCxFQUFFQyxPQUE0Q2UsTUFDekQsR0FBSWhCLEVBQUVnRSxRQUFTLENBQ2IsSUFBSUgsRUFBTUwsRUFBTUMsR0FBVUssUUFBUUYsSUFDdEIsSUFBUkMsRUFDRkwsRUFBTUMsR0FBVXRGLEtBQUt5RixHQUVyQkosRUFBTUMsR0FBVTNCLE9BQU8rQixFQUFLLFFBRzlCTCxFQUFNQyxHQUFVM0IsT0FBTyxFQUFHMEIsRUFBTUMsR0FBVXhGLFFBQzFDdUYsRUFBTUMsR0FBVXRGLEtBQUt5RixJQUd6QnhHLEVBQU1MLFNBQVNxQixRQUFTRixJQUN0QixHQUFrQixXQUFkQSxFQUFNckIsSUFBa0IsQ0FDMUIsSUFBSW9ILEVBQVEsVUFBVy9GLEVBQU1wQixNQUFRb0IsRUFBTXBCLE1BQU1rRSxNQUFROUMsRUFBTW5CLFNBQVNtSCxLQUFLLElBQUluRixPQUNqRmIsRUFBTXBCLE1BQU1xSCxVQUE4QyxJQUFuQ1gsRUFBTUMsR0FBVUssUUFBUUcsT0FJbkQ3RyxFQUFNTCxTQUFTcUIsUUFBU0YsSUFDdEIsR0FBa0IsV0FBZEEsRUFBTXJCLElBQWtCLENBQzFCLElBQUlvSCxFQUFRLFVBQVcvRixFQUFNcEIsTUFBUW9CLEVBQU1wQixNQUFNa0UsTUFBUTlDLEVBQU1uQixTQUFTbUgsS0FBSyxJQUFJbkYsT0FDakZiLEVBQU1wQixNQUFNcUgsU0FBV0YsSUFBVVQsRUFBTUMsT0FJdEIsYUFBZHJHLEVBQU1QLE1BQ2Y2RyxFQUFRQSxHQUFTLFVBQ2pCdEcsRUFBTUwsU0FBVyxDQUFDeUcsRUFBTUMsS0FHckJyRyxFQUFNTixNQUFNNEcsS0FDVkMsSUFDSEEsRUFBVzNELEdBQWN3RCxFQUFNQyxHQUFhekQsRUFBRUMsT0FBNENlLE9BRTVGTSxFQUFhb0MsRUFBT0MsRUFBU3ZHLEVBQU9zRCxNQU1wQzBELEVBQVUsSUFBSUMsSUFjcEIsSUFBTXhHLEVBQWMsU0FBV3lHLEVBQTRDeEgsS0FBaUJDLEdBQzFGLEdBQThCLGlCQUFuQnVILEVBQ1QsT0FBTyxJQUFJMUgsRUFBTTBILEVBQWdCeEgsR0FBUyxHQUFJQyxHQUdoRCxNQUFNSyxFQUFRLElBQUlSLEVBQU0sZ0JBQWlCRSxHQUFTLEdBQUlDLEdBRXRELE9BREFLLEVBQU1GLFVBQVlvSCxFQUNYbEgsR0FHVFMsRUFBRTBHLFNBQVcsQ0FBQ3pILEtBQWlCQyxJQUN0QkEsRUFLVGMsRUFBRWlDLFFBQVVBLEVBRVpqQyxFQUFFb0QsV0FBYUEsRUFFZnBELEVBQUVxQixjQUFnQkEsRUFFbEJyQixFQUFFMkcsUUF2bkJGLFNBQWlCQyxHQUNmLE9BQU9BLGFBQWtCN0gsR0F1bkIzQmlCLEVBQUVaLFlBQWNBLEVBQ2hCWSxFQUFFVixpQkFBbUJBLEVBRXJCVSxFQUFFK0MsV0FBWSxFQUNkL0MsRUFBRXZCLFNBQVdBLEVBQ2J1QixFQUFFYyxNQUFRQSxFQUVWZCxFQUFFNkcsVUFsaUJGLFNBQW1CQyxJQUN1QixJQUFwQ2pGLEVBQWNvRSxRQUFRYSxJQUN4QmpGLEVBQWN2QixLQUFLd0csSUFpaUJ2QjlHLEVBQUUrRyxVQTloQkYsU0FBbUJELElBQ3VCLElBQXBDOUUsRUFBY2lFLFFBQVFhLElBQ3hCOUUsRUFBYzFCLEtBQUt3RyxJQTZoQnZCOUcsRUFBRWdILFFBMWhCRixTQUFpQkYsSUFDdUIsSUFBbENoRixFQUFZbUUsUUFBUWEsSUFDdEJoRixFQUFZeEIsS0FBS3dHLElBeWhCckI5RyxFQUFFaUgsU0F0aEJGLFNBQWtCSCxJQUN1QixJQUFuQy9FLEVBQWFrRSxRQUFRYSxJQUN2Qi9FLEVBQWF6QixLQUFLd0csSUFzaEJ0QjlHLEVBQUVrSCxNQTFnQkYsU0FBZTdELEVBQWdDaEUsR0FDN0MsSUFZSThILEVBWkFDLEVBQWUsS0FRbkIsR0FMRUEsRUFERTNJLEVBQ2tDLGlCQUFkNEUsRUFBeUI3RCxFQUErQixRQUFkNkQsRUFBc0IsTUFBUSxNQUFxQixRQUFkQSxHQUF1QkEsRUFFeEYsaUJBQWRBLEVBQXlCM0QsU0FBUzJILGlCQUFpQmhFLEdBQVcsR0FBS0EsR0FHdEYrRCxFQUNILE1BQU0sSUFBSUUsTUFBTSx1QkFLbEIsR0FBSWhJLEVBQWlCRCxHQUNuQjhILEVBQWlCOUgsTUFBQSxDQUFBLElBQ1JELEVBQVlDLEdBR3JCLE1BQU0sSUFBSWlJLE1BQU0sK0RBRmhCSCxFQUFpQm5ILEVBQUVYLEVBQVcsSUFjaEMsT0FUSVcsRUFBRStDLFdBQ0pDLElBR0ZoRCxFQUFFWCxVQUFZOEgsRUFDZG5ILEVBQUVxRCxVQUFZK0QsRUFDZHBILEVBQUU0QyxVQUFZL0MsRUFBV3VILEdBR2xCNUUsS0EyZVR4QyxFQUFFZ0QsUUFBVUEsRUFDWmhELEVBQUV3QyxPQUFTQSxFQUVYeEMsRUFBRXlELGFBQWVBLEVBQ2pCekQsRUFBRXVILFVBdkxGLFNBQW1CbEYsRUFBY21GLEdBQy9CLElBQUlDLEVBQVcsS0FBS3BGLElBQ3BCZSxFQUFXcUUsR0FBWUQsRUFDdkJuRyxFQUFjb0csSUFBWSxHQXFMNUJ6SCxFQUFFMEgsSUFyREYsU0FBYUMsRUFBZ0JDLEdBQzNCLEdBQUlyQixFQUFRc0IsSUFBSUYsR0FDZCxPQUFPcEIsRUFBUXVCLElBQUlILEdBR3JCLElBQUk1RCxFQUFTNEQsRUFBTzNILEVBQUc0SCxHQUV2QixPQURBckIsRUFBUW5CLElBQUl1QyxFQUFRNUQsR0FDYkEsR0FnRFQsZUFBZS9EIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbi8qIGVzbGludC1kaXNhYmxlIHNvbmFyanMvY29nbml0aXZlLWNvbXBsZXhpdHkgKi9cbi8qKiogVm5vZGUgKioqL1xuXG5pbXBvcnQge1xuICBDaGlsZHJlbixcbiAgQ3VycmVudCxcbiAgRGlyZWN0aXZlLFxuICBEaXJlY3RpdmVzLFxuICBEb21FbGVtZW50LFxuICBJVm5vZGUsXG4gIFBsdWdpbixcbiAgUHJvcHMsXG4gIFJlc2VydmVkUHJvcHMsXG4gIFZhbHlyaWFuLFxuICBWYWx5cmlhbkNvbXBvbmVudCxcbiAgVm5vZGVDb21wb25lbnQsXG4gIFZub2RlV2l0aERvbVxufSBmcm9tIFwiLi9pbnRlcmZhY2VzXCI7XG5cbi8qKiogQ29uc3RhbnRzICoqKi9cbmNvbnN0IENvbXBvbmVudFN0cmluZyA9IFwiX19jb21wb25lbnRfX1wiO1xuY29uc3QgVGV4dFN0cmluZyA9IFwiI3RleHRcIjtcbmNvbnN0IGlzTm9kZUpzID0gQm9vbGVhbih0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLnZlcnNpb25zICYmIHByb2Nlc3MudmVyc2lvbnMubm9kZSk7XG5jb25zdCBVbmQgPSB1bmRlZmluZWQ7XG5cbi8qKiogVm5vZGUgKioqL1xuXG5jb25zdCBWbm9kZSA9IGZ1bmN0aW9uIFZub2RlKHRoaXM6IElWbm9kZSwgdGFnOiBzdHJpbmcsIHByb3BzOiBQcm9wcywgY2hpbGRyZW46IENoaWxkcmVuKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB0aGlzLnRhZyA9IHRhZztcbn0gYXMgdW5rbm93biBhcyBJVm5vZGU7XG5cbmZ1bmN0aW9uIGlzVm5vZGUob2JqZWN0PzogdW5rbm93biB8IElWbm9kZSk6IG9iamVjdCBpcyBJVm5vZGUge1xuICByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgVm5vZGU7XG59XG5cbmZ1bmN0aW9uIGlzQ29tcG9uZW50KGNvbXBvbmVudD86IHVua25vd24gfCBWYWx5cmlhbkNvbXBvbmVudCk6IGNvbXBvbmVudCBpcyBWYWx5cmlhbkNvbXBvbmVudCB7XG4gIHJldHVybiB0eXBlb2YgY29tcG9uZW50ID09PSBcImZ1bmN0aW9uXCIgfHwgKHR5cGVvZiBjb21wb25lbnQgPT09IFwib2JqZWN0XCIgJiYgY29tcG9uZW50ICE9PSBudWxsICYmIFwidmlld1wiIGluIGNvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGlzVm5vZGVDb21wb25lbnQodm5vZGU/OiB1bmtub3duIHwgVm5vZGVDb21wb25lbnQpOiB2bm9kZSBpcyBWbm9kZUNvbXBvbmVudCB7XG4gIHJldHVybiB2bm9kZSBpbnN0YW5jZW9mIFZub2RlICYmIHZub2RlLnRhZyA9PT0gQ29tcG9uZW50U3RyaW5nO1xufVxuXG4vKioqIFV0aWwgKioqL1xuXG5mdW5jdGlvbiBjcmVhdGVEb21FbGVtZW50KHRhZzogc3RyaW5nLCBpc1NWRzogYm9vbGVhbiA9IGZhbHNlKSB7XG4gIHJldHVybiBpc1NWRyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHRhZykgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG59XG5cbmZ1bmN0aW9uIGRvbVRvVm5vZGUoZG9tOiBEb21FbGVtZW50KTogdm9pZCB8IFZub2RlV2l0aERvbSB7XG4gIGlmIChkb20ubm9kZVR5cGUgPT09IDMpIHtcbiAgICBsZXQgdm5vZGUgPSB2KFRleHRTdHJpbmcsIHt9LCBbXSk7XG4gICAgdm5vZGUubm9kZVZhbHVlID0gZG9tLm5vZGVWYWx1ZSBhcyBzdHJpbmc7XG4gICAgdm5vZGUuZG9tID0gZG9tO1xuICAgIHJldHVybiB2bm9kZSBhcyBWbm9kZVdpdGhEb207XG4gIH1cblxuICBpZiAoZG9tLm5vZGVUeXBlID09PSAxKSB7XG4gICAgbGV0IGNoaWxkcmVuID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb20uY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGNoaWxkID0gZG9tVG9Wbm9kZShkb20uY2hpbGROb2Rlc1tpXSBhcyBEb21FbGVtZW50KTtcbiAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcHJvcHM6IFByb3BzID0ge307XG4gICAgW10uZm9yRWFjaC5jYWxsKGRvbS5hdHRyaWJ1dGVzLCAocHJvcDogQXR0cikgPT4gKHByb3BzW3Byb3Aubm9kZU5hbWVdID0gcHJvcC5ub2RlVmFsdWUpKTtcblxuICAgIGxldCB2bm9kZSA9IHYoZG9tLnRhZ05hbWUudG9Mb3dlckNhc2UoKSwgcHJvcHMsIC4uLmNoaWxkcmVuKTtcbiAgICB2bm9kZS5kb20gPSBkb207XG4gICAgcmV0dXJuIHZub2RlIGFzIFZub2RlV2l0aERvbTtcbiAgfVxufVxuXG5jb25zdCB0cnVzdCA9IChodG1sU3RyaW5nOiBzdHJpbmcpOiBDaGlsZHJlbiA9PiB7XG4gIGxldCBkaXYgPSBjcmVhdGVEb21FbGVtZW50KFwiZGl2XCIpO1xuICBkaXYuaW5uZXJIVE1MID0gaHRtbFN0cmluZy50cmltKCk7XG5cbiAgcmV0dXJuIFtdLm1hcC5jYWxsKGRpdi5jaGlsZE5vZGVzLCAoaXRlbSkgPT4gZG9tVG9Wbm9kZShpdGVtKSkgYXMgQ2hpbGRyZW47XG59O1xuXG5jb25zdCByZXNlcnZlZFByb3BzOiBSZXNlcnZlZFByb3BzID0ge1xuICBrZXk6IHRydWUsXG4gIHN0YXRlOiB0cnVlLFxuICBvbmNyZWF0ZTogdHJ1ZSxcbiAgb251cGRhdGU6IHRydWUsXG4gIG9ucmVtb3ZlOiB0cnVlLFxuICBzaG91bGR1cGRhdGU6IHRydWUsXG4gIFwidi1vbmNlXCI6IHRydWUsXG5cbiAgLy8gQnVpbHQgaW4gZGlyZWN0aXZlc1xuICBcInYtaWZcIjogdHJ1ZSxcbiAgXCJ2LXVubGVzc1wiOiB0cnVlLFxuICBcInYtZm9yXCI6IHRydWUsXG4gIFwidi1zaG93XCI6IHRydWUsXG4gIFwidi1jbGFzc1wiOiB0cnVlLFxuICBcInYtaHRtbFwiOiB0cnVlLFxuICBcInYtbW9kZWxcIjogdHJ1ZVxufTtcblxuLyoqKiBNb3VudCAqKiovXG5cbmNvbnN0IGV2ZW50TGlzdGVuZXJOYW1lczogUmVjb3JkPHN0cmluZywgdHJ1ZT4gPSB7fTtcbmxldCBvbkNsZWFudXBMaXN0OiBGdW5jdGlvbltdID0gW107XG5sZXQgb25Nb3VudExpc3Q6IEZ1bmN0aW9uW10gPSBbXTtcbmxldCBvblVwZGF0ZUxpc3Q6IEZ1bmN0aW9uW10gPSBbXTtcbmxldCBvblVubW91bnRMaXN0OiBGdW5jdGlvbltdID0gW107XG5jb25zdCBjdXJyZW50OiBDdXJyZW50ID0ge307XG5mdW5jdGlvbiBldmVudExpc3RlbmVyKGU6IEV2ZW50KSB7XG4gIGxldCBkb20gPSBlLnRhcmdldCBhcyBEb21FbGVtZW50O1xuICBsZXQgbmFtZSA9IGB2LW9uJHtlLnR5cGV9YDtcbiAgd2hpbGUgKGRvbSkge1xuICAgIGlmIChkb21bbmFtZV0pIHtcbiAgICAgIGRvbVtuYW1lXShlLCBkb20pO1xuICAgICAgaWYgKCFlLmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgdXBkYXRlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGRvbSA9IGRvbS5wYXJlbnROb2RlIGFzIERvbUVsZW1lbnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25DbGVhbnVwKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICBpZiAob25DbGVhbnVwTGlzdC5pbmRleE9mKGNhbGxiYWNrKSA9PT0gLTEpIHtcbiAgICBvbkNsZWFudXBMaXN0LnB1c2goY2FsbGJhY2spO1xuICB9XG59XG5mdW5jdGlvbiBvblVubW91bnQoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gIGlmIChvblVubW91bnRMaXN0LmluZGV4T2YoY2FsbGJhY2spID09PSAtMSkge1xuICAgIG9uVW5tb3VudExpc3QucHVzaChjYWxsYmFjayk7XG4gIH1cbn1cbmZ1bmN0aW9uIG9uTW91bnQoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gIGlmIChvbk1vdW50TGlzdC5pbmRleE9mKGNhbGxiYWNrKSA9PT0gLTEpIHtcbiAgICBvbk1vdW50TGlzdC5wdXNoKGNhbGxiYWNrKTtcbiAgfVxufVxuZnVuY3Rpb24gb25VcGRhdGUoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gIGlmIChvblVwZGF0ZUxpc3QuaW5kZXhPZihjYWxsYmFjaykgPT09IC0xKSB7XG4gICAgb25VcGRhdGVMaXN0LnB1c2goY2FsbGJhY2spO1xuICB9XG59XG5cbi8qXG4gICogTW91bnRzIGEgY29tcG9uZW50IHRvIHRoZSBET01cbiAgbW91bnQoJyNhcHAnLCAoKSA9PiA8ZGl2PkhlbGxvIHdvcmxkPC9kaXY+KTsgLy8gQXBwIGlzIGEgRnVuY3Rpb25hbCBDb21wb25lbnRcbiAgbW91bnQoJyNhcHAnLCB7IHZpZXc6ICgpID0+IDxkaXY+SGVsbG8gd29ybGQ8L2Rpdj4gfSk7IC8vIEFwcCBpcyBhIFBPSk8gY29tcG9uZW50IHdpdGggYSB2aWV3IG1ldGhvZFxuICBtb3VudCgnI2FwcCcsIGNsYXNzSW5zdGFuY2UpOyAvLyBBcHAgaXMgYSBjbGFzcyBpbnN0YW5jZSB3aXRoIGEgdmlldyBtZXRob2RcbiAgbW91bnQoJyNhcHAnLCA8QXBwPjxkaXY+SGVsbG8gd29ybGQ8L2Rpdj48L0FwcD4pOyAvLyBBcHAgaXMgYSBWbm9kZSBjb21wb25lbnQgKFZub2RlIHdpdGggdGFnIF9fY29tcG9uZW50X18pXG4qL1xuXG5mdW5jdGlvbiBtb3VudChjb250YWluZXI6IERvbUVsZW1lbnQgfCBzdHJpbmcsIGNvbXBvbmVudDogVmFseXJpYW5Db21wb25lbnQgfCBJVm5vZGUpOiB2b2lkIHwgc3RyaW5nIHtcbiAgbGV0IGFwcENvbnRhaW5lciA9IG51bGw7XG5cbiAgaWYgKGlzTm9kZUpzKSB7XG4gICAgYXBwQ29udGFpbmVyID0gdHlwZW9mIGNvbnRhaW5lciA9PT0gXCJzdHJpbmdcIiA/IGNyZWF0ZURvbUVsZW1lbnQoY29udGFpbmVyID09PSBcInN2Z1wiID8gXCJzdmdcIiA6IFwiZGl2XCIsIGNvbnRhaW5lciA9PT0gXCJzdmdcIikgOiBjb250YWluZXI7XG4gIH0gZWxzZSB7XG4gICAgYXBwQ29udGFpbmVyID0gdHlwZW9mIGNvbnRhaW5lciA9PT0gXCJzdHJpbmdcIiA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoY29udGFpbmVyKVswXSA6IGNvbnRhaW5lcjtcbiAgfVxuXG4gIGlmICghYXBwQ29udGFpbmVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ29udGFpbmVyIG5vdCBmb3VuZFwiKTtcbiAgfVxuXG4gIGxldCB2bm9kZUNvbXBvbmVudDogVm5vZGVDb21wb25lbnQgfCBJVm5vZGU7XG5cbiAgaWYgKGlzVm5vZGVDb21wb25lbnQoY29tcG9uZW50KSkge1xuICAgIHZub2RlQ29tcG9uZW50ID0gY29tcG9uZW50O1xuICB9IGVsc2UgaWYgKGlzQ29tcG9uZW50KGNvbXBvbmVudCkpIHtcbiAgICB2bm9kZUNvbXBvbmVudCA9IHYoY29tcG9uZW50LCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ29tcG9uZW50IG11c3QgYmUgYSBWYWx5cmlhbiBDb21wb25lbnQgb3IgYSBWbm9kZSBjb21wb25lbnRcIik7XG4gIH1cblxuICBpZiAodi5pc01vdW50ZWQpIHtcbiAgICB1bm1vdW50KCk7XG4gIH1cblxuICB2LmNvbXBvbmVudCA9IHZub2RlQ29tcG9uZW50IGFzIFZub2RlQ29tcG9uZW50O1xuICB2LmNvbnRhaW5lciA9IGFwcENvbnRhaW5lcjtcbiAgdi5tYWluVm5vZGUgPSBkb21Ub1Zub2RlKGFwcENvbnRhaW5lcikgYXMgVm5vZGVXaXRoRG9tO1xuXG4gIC8vIHVwZGF0ZVxuICByZXR1cm4gdXBkYXRlKCk7XG59XG5cbmZ1bmN0aW9uIGNhbGxDYWxsYmFja0xpc3QobGlzdDogRnVuY3Rpb25bXSk6IHZvaWQge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBsaXN0W2ldKCk7XG4gIH1cbiAgbGlzdCA9IFtdO1xufVxuXG5mdW5jdGlvbiB1cGRhdGUoKTogdm9pZCB8IHN0cmluZyB7XG4gIGlmICh2LmNvbXBvbmVudCAmJiB2Lm1haW5Wbm9kZSkge1xuICAgIG9uQ2xlYW51cExpc3QubGVuZ3RoICYmIGNhbGxDYWxsYmFja0xpc3Qob25DbGVhbnVwTGlzdCk7XG4gICAgbGV0IG9sZFZub2RlOiBWbm9kZVdpdGhEb20gfCBudWxsID0gdi5tYWluVm5vZGUgYXMgVm5vZGVXaXRoRG9tO1xuICAgIHYubWFpblZub2RlID0gbmV3IFZub2RlKHYubWFpblZub2RlLnRhZywgdi5tYWluVm5vZGUucHJvcHMsIFt2LmNvbXBvbmVudF0pIGFzIFZub2RlV2l0aERvbTtcbiAgICB2Lm1haW5Wbm9kZS5kb20gPSBvbGRWbm9kZS5kb207XG4gICAgcGF0Y2godi5tYWluVm5vZGUsIG9sZFZub2RlKTtcbiAgICBvbGRWbm9kZSA9IG51bGw7XG4gICAgaWYgKHYuaXNNb3VudGVkID09PSBmYWxzZSkge1xuICAgICAgb25Nb3VudExpc3QubGVuZ3RoICYmIGNhbGxDYWxsYmFja0xpc3Qob25Nb3VudExpc3QpO1xuICAgICAgdi5pc01vdW50ZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBvblVwZGF0ZUxpc3QubGVuZ3RoICYmIGNhbGxDYWxsYmFja0xpc3Qob25VcGRhdGVMaXN0KTtcbiAgICB9XG5cbiAgICBpZiAoaXNOb2RlSnMpIHtcbiAgICAgIHJldHVybiB2Lm1haW5Wbm9kZS5kb20uaW5uZXJIVE1MO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1bm1vdW50KCk6IHZvaWQgfCBzdHJpbmcge1xuICBpZiAodi5pc01vdW50ZWQgJiYgdi5tYWluVm5vZGUgJiYgdi5jb21wb25lbnQpIHtcbiAgICBvbkNsZWFudXBMaXN0Lmxlbmd0aCAmJiBjYWxsQ2FsbGJhY2tMaXN0KG9uQ2xlYW51cExpc3QpO1xuICAgIG9uVW5tb3VudExpc3QubGVuZ3RoICYmIGNhbGxDYWxsYmFja0xpc3Qob25Vbm1vdW50TGlzdCk7XG4gICAgbGV0IG9sZFZub2RlOiBWbm9kZVdpdGhEb20gfCBudWxsID0gdi5tYWluVm5vZGUgYXMgVm5vZGVXaXRoRG9tO1xuICAgIHYubWFpblZub2RlID0gbmV3IFZub2RlKHYubWFpblZub2RlLnRhZywgdi5tYWluVm5vZGUucHJvcHMsIFtdKSBhcyBWbm9kZVdpdGhEb207XG4gICAgdi5tYWluVm5vZGUuZG9tID0gb2xkVm5vZGUuZG9tO1xuICAgIHYubWFpblZub2RlLmlzU1ZHID0gb2xkVm5vZGUuaXNTVkc7XG4gICAgcGF0Y2godi5tYWluVm5vZGUsIG9sZFZub2RlKTtcbiAgICBvbGRWbm9kZSA9IG51bGw7XG4gICAgdi5jb21wb25lbnQgPSBudWxsO1xuICAgIHYuaXNNb3VudGVkID0gZmFsc2U7XG4gICAgaWYgKGlzTm9kZUpzKSB7XG4gICAgICByZXR1cm4gdi5tYWluVm5vZGUuZG9tLmlubmVySFRNTDtcbiAgICB9XG4gIH1cbn1cblxubGV0IGVtcHR5Vm5vZGUgPSBuZXcgVm5vZGUoXCJfX2VtcHR5X19cIiwge30sIFtdKTtcblxuZnVuY3Rpb24gb25yZW1vdmUodm5vZGU6IElWbm9kZSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHZub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgdm5vZGUuY2hpbGRyZW5baV0udGFnICE9PSBUZXh0U3RyaW5nICYmIG9ucmVtb3ZlKHZub2RlLmNoaWxkcmVuW2ldKTtcbiAgfVxuXG4gIHZub2RlLnByb3BzLm9ucmVtb3ZlICYmIHZub2RlLnByb3BzLm9ucmVtb3ZlKHZub2RlKTtcbn1cblxuZnVuY3Rpb24gc2hhcmVkU2V0QXR0cmlidXRlKHByb3A6IHN0cmluZywgdmFsdWU6IGFueSwgdm5vZGU6IFZub2RlV2l0aERvbSwgb2xkVm5vZGU/OiBWbm9kZVdpdGhEb20pOiB2b2lkIHwgYm9vbGVhbiB7XG4gIC8vIEl0IGlzIGEgcmVzZXJ2ZWQgcHJvcFxuICBpZiAocmVzZXJ2ZWRQcm9wc1twcm9wXSkge1xuICAgIC8vIElmIGl0IGlzIGEgZGlyZWN0aXZlIG5hbWUgY2FsbCB0aGUgZGlyZWN0aXZlXG4gICAgaWYgKGRpcmVjdGl2ZXNbcHJvcF0pIHtcbiAgICAgIHJldHVybiBkaXJlY3RpdmVzW3Byb3BdKHZub2RlLnByb3BzW3Byb3BdLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEl0IGlzIG5vdCBhIHJlc2VydmVkIHByb3Agc28gd2UgYWRkIGl0IHRvIHRoZSBkb21cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgaWYgKHByb3AgaW4gZXZlbnRMaXN0ZW5lck5hbWVzID09PSBmYWxzZSkge1xuICAgICAgZXZlbnRMaXN0ZW5lck5hbWVzW3Byb3BdID0gdHJ1ZTtcbiAgICAgICh2LmNvbnRhaW5lciBhcyBEb21FbGVtZW50KS5hZGRFdmVudExpc3RlbmVyKHByb3Auc2xpY2UoMiksIGV2ZW50TGlzdGVuZXIpO1xuICAgIH1cbiAgICB2bm9kZS5kb21bYHYtJHtwcm9wfWBdID0gdmFsdWU7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHByb3AgaW4gdm5vZGUuZG9tICYmIHZub2RlLmlzU1ZHID09PSBmYWxzZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICBpZiAodm5vZGUuZG9tW3Byb3BdICE9IHZhbHVlKSB7XG4gICAgICB2bm9kZS5kb21bcHJvcF0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gVXNlIHNldCBhdHRyaWJ1dGVcbiAgaWYgKCFvbGRWbm9kZSB8fCBvbGRWbm9kZS5wcm9wc1twcm9wXSAhPT0gdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICB2bm9kZS5kb20ucmVtb3ZlQXR0cmlidXRlKHByb3ApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2bm9kZS5kb20uc2V0QXR0cmlidXRlKHByb3AsIHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0QXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgdm5vZGU6IFZub2RlV2l0aERvbSwgb2xkVm5vZGU/OiBWbm9kZVdpdGhEb20pIHtcbiAgdm5vZGUucHJvcHNbbmFtZV0gPSB2YWx1ZTtcblxuICBzaGFyZWRTZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUsIHZub2RlLCBvbGRWbm9kZSk7XG59XG5cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZXModm5vZGU6IFZub2RlV2l0aERvbSwgb2xkVm5vZGU/OiBWbm9kZVdpdGhEb20pIHtcbiAgZm9yIChsZXQgcHJvcCBpbiB2bm9kZS5wcm9wcykge1xuICAgIGlmIChzaGFyZWRTZXRBdHRyaWJ1dGUocHJvcCwgdm5vZGUucHJvcHNbcHJvcF0sIHZub2RlLCBvbGRWbm9kZSkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKG9sZFZub2RlKSB7XG4gICAgZm9yIChsZXQgcHJvcCBpbiBvbGRWbm9kZS5wcm9wcykge1xuICAgICAgaWYgKHByb3AgaW4gdm5vZGUucHJvcHMgPT09IGZhbHNlICYmIHR5cGVvZiBvbGRWbm9kZS5wcm9wc1twcm9wXSAhPT0gXCJmdW5jdGlvblwiICYmIHByb3AgaW4gcmVzZXJ2ZWRQcm9wcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHByb3AgaW4gb2xkVm5vZGUuZG9tICYmIHZub2RlLmlzU1ZHID09PSBmYWxzZSkge1xuICAgICAgICAgIG9sZFZub2RlLmRvbVtwcm9wXSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2xkVm5vZGUuZG9tLnJlbW92ZUF0dHJpYnV0ZShwcm9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gcGF0Y2gobmV3Vm5vZGU6IFZub2RlV2l0aERvbSwgb2xkVm5vZGU6IFZub2RlV2l0aERvbSB8IElWbm9kZSA9IGVtcHR5Vm5vZGUpIHtcbiAgY3VycmVudC52bm9kZSA9IG5ld1Zub2RlO1xuICBjdXJyZW50Lm9sZFZub2RlID0gb2xkVm5vZGUgPT09IGVtcHR5Vm5vZGUgPyBVbmQgOiAob2xkVm5vZGUgYXMgVm5vZGVXaXRoRG9tKTtcbiAgbGV0IG5ld1RyZWUgPSBuZXdWbm9kZS5jaGlsZHJlbjtcbiAgbGV0IG9sZFRyZWUgPSBvbGRWbm9kZS5jaGlsZHJlbjtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld1RyZWUubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgY2hpbGRWbm9kZSA9IG5ld1RyZWVbaV07XG4gICAgaWYgKGNoaWxkVm5vZGUgaW5zdGFuY2VvZiBWbm9kZSkge1xuICAgICAgaWYgKGNoaWxkVm5vZGUudGFnICE9PSBUZXh0U3RyaW5nKSB7XG4gICAgICAgIGlmIChjaGlsZFZub2RlLnRhZyA9PT0gQ29tcG9uZW50U3RyaW5nKSB7XG4gICAgICAgICAgbGV0IGNvbXBvbmVudCA9IGNoaWxkVm5vZGUuY29tcG9uZW50IGFzIFZhbHlyaWFuQ29tcG9uZW50O1xuICAgICAgICAgIGN1cnJlbnQuY29tcG9uZW50ID0gY29tcG9uZW50O1xuICAgICAgICAgIGxldCByZXN1bHQgPSAoXCJ2aWV3XCIgaW4gY29tcG9uZW50ID8gY29tcG9uZW50LnZpZXcgOiBjb21wb25lbnQpLmNhbGwoY29tcG9uZW50LCBjaGlsZFZub2RlLnByb3BzLCAuLi5jaGlsZFZub2RlLmNoaWxkcmVuKTtcblxuICAgICAgICAgIG5ld1RyZWUuc3BsaWNlKGktLSwgMSwgcmVzdWx0KTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjaGlsZFZub2RlLmlzU1ZHID0gbmV3Vm5vZGUuaXNTVkcgfHwgY2hpbGRWbm9kZS50YWcgPT09IFwic3ZnXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNoaWxkVm5vZGUpKSB7XG4gICAgICBuZXdUcmVlLnNwbGljZShpLS0sIDEsIC4uLmNoaWxkVm5vZGUpO1xuICAgIH0gZWxzZSBpZiAoY2hpbGRWbm9kZSA9PT0gbnVsbCB8fCBjaGlsZFZub2RlID09PSBVbmQpIHtcbiAgICAgIG5ld1RyZWUuc3BsaWNlKGktLSwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1RyZWVbaV0gPSBuZXcgVm5vZGUoVGV4dFN0cmluZywge30sIFtdKTtcbiAgICAgIG5ld1RyZWVbaV0ubm9kZVZhbHVlID0gY2hpbGRWbm9kZTtcbiAgICB9XG4gIH1cblxuICBsZXQgb2xkVHJlZUxlbmd0aCA9IG9sZFRyZWUubGVuZ3RoO1xuICBsZXQgbmV3VHJlZUxlbmd0aCA9IG5ld1RyZWUubGVuZ3RoO1xuXG4gIC8vIElmIG5ldyB0cmVlIGlzIGVtcHR5LCByZW1vdmUgYWxsIG9sZCBub2Rlc1xuICBpZiAobmV3VHJlZUxlbmd0aCA9PT0gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2xkVHJlZUxlbmd0aDsgaSsrKSB7XG4gICAgICBvbGRUcmVlW2ldLnRhZyAhPT0gVGV4dFN0cmluZyAmJiBvbnJlbW92ZShvbGRUcmVlW2ldKTtcbiAgICB9XG5cbiAgICBuZXdWbm9kZS5kb20udGV4dENvbnRlbnQgPSBcIlwiO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHRoZSB0cmVlIGlzIGtleWVkIGxpc3QgYW5kIGlzIG5vdCBmaXJzdCByZW5kZXIgYW5kIG9sZCB0cmVlIGlzIGtleWVkIGxpc3QgdG9vXG4gIGlmIChvbGRUcmVlTGVuZ3RoICYmIFwia2V5XCIgaW4gbmV3VHJlZVswXS5wcm9wcyAmJiBcImtleVwiIGluIG9sZFRyZWVbMF0ucHJvcHMpIHtcbiAgICBsZXQgb2xkS2V5ZWRMaXN0OiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvbGRUcmVlTGVuZ3RoOyBpKyspIHtcbiAgICAgIG9sZEtleWVkTGlzdFtvbGRUcmVlW2ldLnByb3BzLmtleV0gPSBpO1xuICAgIH1cblxuICAgIGxldCBuZXdLZXllZExpc3Q6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld1RyZWVMZW5ndGg7IGkrKykge1xuICAgICAgbmV3S2V5ZWRMaXN0W25ld1RyZWVbaV0ucHJvcHMua2V5XSA9IGk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdUcmVlTGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjaGlsZFZub2RlID0gbmV3VHJlZVtpXTtcbiAgICAgIGxldCBvbGRDaGlsZFZub2RlID0gb2xkVHJlZVtvbGRLZXllZExpc3RbY2hpbGRWbm9kZS5wcm9wcy5rZXldXTtcbiAgICAgIGxldCBzaG91bGRQYXRjaCA9IHRydWU7XG5cbiAgICAgIGlmIChvbGRDaGlsZFZub2RlKSB7XG4gICAgICAgIGNoaWxkVm5vZGUuZG9tID0gb2xkQ2hpbGRWbm9kZS5kb207XG4gICAgICAgIGlmIChcInYtb25jZVwiIGluIGNoaWxkVm5vZGUucHJvcHMgfHwgKGNoaWxkVm5vZGUucHJvcHMuc2hvdWxkdXBkYXRlICYmIGNoaWxkVm5vZGUucHJvcHMuc2hvdWxkdXBkYXRlKGNoaWxkVm5vZGUsIG9sZENoaWxkVm5vZGUpID09PSBmYWxzZSkpIHtcbiAgICAgICAgICAvLyBza2lwIHRoaXMgcGF0Y2hcbiAgICAgICAgICBjaGlsZFZub2RlLmNoaWxkcmVuID0gb2xkQ2hpbGRWbm9kZS5jaGlsZHJlbjtcbiAgICAgICAgICBzaG91bGRQYXRjaCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldEF0dHJpYnV0ZXMoY2hpbGRWbm9kZSwgb2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgICAgaWYgKHYuaXNNb3VudGVkKSB7XG4gICAgICAgICAgICBjaGlsZFZub2RlLnByb3BzLm9udXBkYXRlICYmIGNoaWxkVm5vZGUucHJvcHMub251cGRhdGUoY2hpbGRWbm9kZSwgb2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNoaWxkVm5vZGUucHJvcHMub25jcmVhdGUgJiYgY2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZShjaGlsZFZub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkVm5vZGUuZG9tID0gY3JlYXRlRG9tRWxlbWVudChjaGlsZFZub2RlLnRhZywgY2hpbGRWbm9kZS5pc1NWRyk7XG4gICAgICAgIHNldEF0dHJpYnV0ZXMoY2hpbGRWbm9kZSk7XG4gICAgICAgIGNoaWxkVm5vZGUucHJvcHMub25jcmVhdGUgJiYgY2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZShjaGlsZFZub2RlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1Zub2RlLmRvbS5jaGlsZE5vZGVzW2ldID09PSBVbmQpIHtcbiAgICAgICAgbmV3Vm5vZGUuZG9tLmFwcGVuZENoaWxkKGNoaWxkVm5vZGUuZG9tKTtcbiAgICAgIH0gZWxzZSBpZiAobmV3Vm5vZGUuZG9tLmNoaWxkTm9kZXNbaV0gIT09IGNoaWxkVm5vZGUuZG9tKSB7XG4gICAgICAgIG9sZFRyZWVbaV0gJiYgbmV3S2V5ZWRMaXN0W29sZFRyZWVbaV0ucHJvcHMua2V5XSA9PT0gVW5kICYmIG9ucmVtb3ZlKG9sZFRyZWVbaV0pO1xuICAgICAgICBuZXdWbm9kZS5kb20ucmVwbGFjZUNoaWxkKGNoaWxkVm5vZGUuZG9tLCBuZXdWbm9kZS5kb20uY2hpbGROb2Rlc1tpXSk7XG4gICAgICB9XG5cbiAgICAgIHNob3VsZFBhdGNoICYmIHBhdGNoKGNoaWxkVm5vZGUsIG9sZENoaWxkVm5vZGUpO1xuICAgIH1cblxuICAgIC8vIEZvciB0aGUgcmVzdCBvZiB0aGUgY2hpbGRyZW4sIHdlIHNob3VsZCByZW1vdmUgdGhlbVxuICAgIGZvciAobGV0IGkgPSBuZXdUcmVlTGVuZ3RoOyBpIDwgb2xkVHJlZUxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobmV3S2V5ZWRMaXN0W29sZFRyZWVbaV0ucHJvcHMua2V5XSA9PT0gVW5kKSB7XG4gICAgICAgIGxldCBvbGRDaGlsZFZub2RlID0gb2xkVHJlZVtpXTtcbiAgICAgICAgb25yZW1vdmUob2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgIG9sZENoaWxkVm5vZGUuZG9tLnBhcmVudE5vZGUgJiYgb2xkQ2hpbGRWbm9kZS5kb20ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvbGRDaGlsZFZub2RlLmRvbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gSWYgbmV3IHRyZWUgYW5kIG9sZCB0cmVlIGhhdmUgbW9yZSB0aGFuIG9uZSBjaGlsZCwgd2Ugc2hvdWxkIHVwZGF0ZSB0aGUgZG9tXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3VHJlZUxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IG5ld0NoaWxkVm5vZGUgPSBuZXdUcmVlW2ldO1xuXG4gICAgLy8gT2xkIGNoaWxkIGV4aXN0c1xuICAgIGlmIChpIDwgb2xkVHJlZUxlbmd0aCkge1xuICAgICAgbGV0IG9sZENoaWxkVm5vZGUgPSBvbGRUcmVlW2ldO1xuICAgICAgLy8gTmV3IGNoaWxkIGlzIGEgdGV4dCBub2RlXG4gICAgICBpZiAobmV3Q2hpbGRWbm9kZS50YWcgPT09IFRleHRTdHJpbmcpIHtcbiAgICAgICAgLy8gT2xkIGNoaWxkIGlzIGEgdGV4dCBub2RlXG4gICAgICAgIGlmIChvbGRDaGlsZFZub2RlLnRhZyA9PT0gVGV4dFN0cmluZykge1xuICAgICAgICAgIG5ld0NoaWxkVm5vZGUuZG9tID0gb2xkQ2hpbGRWbm9kZS5kb207XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuICAgICAgICAgIGlmIChuZXdDaGlsZFZub2RlLmRvbS5ub2RlVmFsdWUgIT0gbmV3Q2hpbGRWbm9kZS5ub2RlVmFsdWUpIHtcbiAgICAgICAgICAgIG5ld0NoaWxkVm5vZGUuZG9tLm5vZGVWYWx1ZSA9IG5ld0NoaWxkVm5vZGUubm9kZVZhbHVlIGFzIHN0cmluZztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbGQgY2hpbGQgaXMgYSBub3JtYWwgbm9kZVxuICAgICAgICBuZXdDaGlsZFZub2RlLmRvbSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5ld0NoaWxkVm5vZGUubm9kZVZhbHVlIGFzIHN0cmluZykgYXMgdW5rbm93biBhcyBEb21FbGVtZW50O1xuICAgICAgICBvbnJlbW92ZShvbGRDaGlsZFZub2RlKTtcbiAgICAgICAgbmV3Vm5vZGUuZG9tLnJlcGxhY2VDaGlsZChuZXdDaGlsZFZub2RlLmRvbSwgb2xkQ2hpbGRWbm9kZS5kb20pO1xuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBOZXcgY2hpbGQgaXMgYSBub3JtYWwgbm9kZVxuICAgICAgLy8gT2xkIGNoaWxkIGlzIHRoZSBzYW1lIHR5cGUgYXMgbmV3IGNoaWxkXG4gICAgICBpZiAob2xkQ2hpbGRWbm9kZS50YWcgPT09IG5ld0NoaWxkVm5vZGUudGFnKSB7XG4gICAgICAgIG5ld0NoaWxkVm5vZGUuZG9tID0gb2xkQ2hpbGRWbm9kZS5kb207XG4gICAgICAgIC8vIElmIHdlIGhhdmUgYSB2LW9uY2UgZGlyZWN0aXZlIG9yIGEgc2hvdWxkdXBkYXRlIG1ldGhvZCB0aGF0IHJldHVybnMgZmFsc2UsIHdlIHNraXAgdGhlIHVwZGF0ZVxuICAgICAgICBpZiAobmV3Q2hpbGRWbm9kZS5wcm9wc1tcInYtb25jZVwiXSB8fCAobmV3Q2hpbGRWbm9kZS5wcm9wcy5zaG91bGR1cGRhdGUgJiYgbmV3Q2hpbGRWbm9kZS5wcm9wcy5zaG91bGR1cGRhdGUobmV3Q2hpbGRWbm9kZSwgb2xkQ2hpbGRWbm9kZSkgPT09IGZhbHNlKSkge1xuICAgICAgICAgIG5ld0NoaWxkVm5vZGUuY2hpbGRyZW4gPSBvbGRDaGlsZFZub2RlLmNoaWxkcmVuO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2UgdXBkYXRlIHRoZSBkb20gZWxlbWVudFxuICAgICAgICBzZXRBdHRyaWJ1dGVzKG5ld0NoaWxkVm5vZGUsIG9sZENoaWxkVm5vZGUpO1xuICAgICAgICBpZiAodi5pc01vdW50ZWQpIHtcbiAgICAgICAgICBuZXdDaGlsZFZub2RlLnByb3BzLm9udXBkYXRlICYmIG5ld0NoaWxkVm5vZGUucHJvcHMub251cGRhdGUobmV3Q2hpbGRWbm9kZSwgb2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3Q2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZSAmJiBuZXdDaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlKG5ld0NoaWxkVm5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGF0Y2gobmV3Q2hpbGRWbm9kZSwgb2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBPbGQgY2hpbGQgaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIG5ldyBjaGlsZFxuICAgICAgbmV3Q2hpbGRWbm9kZS5kb20gPSBjcmVhdGVEb21FbGVtZW50KG5ld0NoaWxkVm5vZGUudGFnLCBuZXdDaGlsZFZub2RlLmlzU1ZHKTtcbiAgICAgIHNldEF0dHJpYnV0ZXMobmV3Q2hpbGRWbm9kZSk7XG4gICAgICBvbGRDaGlsZFZub2RlLnRhZyAhPT0gVGV4dFN0cmluZyAmJiBvbnJlbW92ZShvbGRDaGlsZFZub2RlKTtcbiAgICAgIG5ld0NoaWxkVm5vZGUucHJvcHMub25jcmVhdGUgJiYgbmV3Q2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZShuZXdDaGlsZFZub2RlKTtcbiAgICAgIG5ld1Zub2RlLmRvbS5yZXBsYWNlQ2hpbGQobmV3Q2hpbGRWbm9kZS5kb20sIG9sZENoaWxkVm5vZGUuZG9tKTtcbiAgICAgIHBhdGNoKG5ld0NoaWxkVm5vZGUsIGVtcHR5Vm5vZGUpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gT2xkIGNoaWxkIGRvZXMgbm90IGV4aXN0c1xuICAgIC8vIE5ldyBjaGlsZCBpcyBhIHRleHQgbm9kZVxuICAgIGlmIChuZXdDaGlsZFZub2RlLnRhZyA9PT0gVGV4dFN0cmluZykge1xuICAgICAgbmV3Q2hpbGRWbm9kZS5kb20gPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuZXdDaGlsZFZub2RlLm5vZGVWYWx1ZSBhcyBzdHJpbmcpIGFzIHVua25vd24gYXMgRG9tRWxlbWVudDtcbiAgICAgIG5ld1Zub2RlLmRvbS5hcHBlbmRDaGlsZChuZXdDaGlsZFZub2RlLmRvbSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBOZXcgY2hpbGQgaXMgYSBub3JtYWwgbm9kZVxuICAgIG5ld0NoaWxkVm5vZGUuZG9tID0gY3JlYXRlRG9tRWxlbWVudChuZXdDaGlsZFZub2RlLnRhZywgbmV3Q2hpbGRWbm9kZS5pc1NWRyk7XG4gICAgc2V0QXR0cmlidXRlcyhuZXdDaGlsZFZub2RlKTtcbiAgICBuZXdWbm9kZS5kb20uYXBwZW5kQ2hpbGQobmV3Q2hpbGRWbm9kZS5kb20pO1xuICAgIG5ld0NoaWxkVm5vZGUucHJvcHMub25jcmVhdGUgJiYgbmV3Q2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZShuZXdDaGlsZFZub2RlKTtcbiAgICBwYXRjaChuZXdDaGlsZFZub2RlLCBlbXB0eVZub2RlKTtcbiAgfVxuXG4gIC8vIEZvciB0aGUgcmVzdCBvZiB0aGUgY2hpbGRyZW4sIHdlIHNob3VsZCByZW1vdmUgdGhlbVxuICBmb3IgKGxldCBpID0gbmV3VHJlZUxlbmd0aDsgaSA8IG9sZFRyZWVMZW5ndGg7IGkrKykge1xuICAgIGxldCBvbGRDaGlsZFZub2RlID0gb2xkVHJlZVtpXTtcbiAgICBvbGRDaGlsZFZub2RlLnRhZyAhPT0gVGV4dFN0cmluZyAmJiBvbnJlbW92ZShvbGRDaGlsZFZub2RlKTtcbiAgICBvbGRDaGlsZFZub2RlLmRvbS5wYXJlbnROb2RlICYmIG9sZENoaWxkVm5vZGUuZG9tLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQob2xkQ2hpbGRWbm9kZS5kb20pO1xuICB9XG59XG5cbi8qKiogRGlyZWN0aXZlcyAqKiovXG5cbmZ1bmN0aW9uIGRpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIGRpcmVjdGl2ZTogRGlyZWN0aXZlKSB7XG4gIGxldCBmdWxsTmFtZSA9IGB2LSR7bmFtZX1gO1xuICBkaXJlY3RpdmVzW2Z1bGxOYW1lXSA9IGRpcmVjdGl2ZTtcbiAgcmVzZXJ2ZWRQcm9wc1tmdWxsTmFtZV0gPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBoaWRlRGlyZWN0aXZlKHRlc3Q6IGJvb2xlYW4pOiBEaXJlY3RpdmUge1xuICByZXR1cm4gKGJvb2w6IGJvb2xlYW4sIHZub2RlOiBJVm5vZGUsIG9sZFZub2RlPzogSVZub2RlKSA9PiB7XG4gICAgbGV0IHZhbHVlID0gdGVzdCA/IGJvb2wgOiAhYm9vbDtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGxldCBuZXdkb20gPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKTtcbiAgICAgIGlmIChvbGRWbm9kZSAmJiBvbGRWbm9kZS5kb20gJiYgb2xkVm5vZGUuZG9tLnBhcmVudE5vZGUpIHtcbiAgICAgICAgb2xkVm5vZGUudGFnICE9PSBUZXh0U3RyaW5nICYmIG9ucmVtb3ZlKG9sZFZub2RlKTtcbiAgICAgICAgb2xkVm5vZGUuZG9tLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG5ld2RvbSwgb2xkVm5vZGUuZG9tKTtcbiAgICAgIH1cbiAgICAgIHZub2RlLnRhZyA9IFRleHRTdHJpbmc7XG4gICAgICB2bm9kZS5jaGlsZHJlbiA9IFtdO1xuICAgICAgdm5vZGUucHJvcHMgPSB7fTtcbiAgICAgIHZub2RlLmRvbSA9IG5ld2RvbSBhcyB1bmtub3duIGFzIERvbUVsZW1lbnQ7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xufVxuXG5jb25zdCBkaXJlY3RpdmVzOiBEaXJlY3RpdmVzID0ge1xuICBcInYtaWZcIjogaGlkZURpcmVjdGl2ZShmYWxzZSksXG4gIFwidi11bmxlc3NcIjogaGlkZURpcmVjdGl2ZSh0cnVlKSxcbiAgXCJ2LWZvclwiOiAoc2V0OiB1bmtub3duW10sIHZub2RlOiBWbm9kZVdpdGhEb20pID0+IHtcbiAgICB2bm9kZS5jaGlsZHJlbiA9IHNldC5tYXAodm5vZGUuY2hpbGRyZW5bMF0pO1xuICB9LFxuICBcInYtc2hvd1wiOiAoYm9vbDogYm9vbGVhbiwgdm5vZGU6IFZub2RlV2l0aERvbSkgPT4ge1xuICAgICh2bm9kZS5kb20gYXMgdW5rbm93biBhcyB7IHN0eWxlOiB7IGRpc3BsYXk6IHN0cmluZyB9IH0pLnN0eWxlLmRpc3BsYXkgPSBib29sID8gXCJcIiA6IFwibm9uZVwiO1xuICB9LFxuICBcInYtY2xhc3NcIjogKGNsYXNzZXM6IHsgW3g6IHN0cmluZ106IGJvb2xlYW4gfSwgdm5vZGU6IFZub2RlV2l0aERvbSkgPT4ge1xuICAgIGZvciAobGV0IG5hbWUgaW4gY2xhc3Nlcykge1xuICAgICAgKHZub2RlLmRvbSBhcyBEb21FbGVtZW50KS5jbGFzc0xpc3QudG9nZ2xlKG5hbWUsIGNsYXNzZXNbbmFtZV0pO1xuICAgIH1cbiAgfSxcbiAgXCJ2LWh0bWxcIjogKGh0bWw6IHN0cmluZywgdm5vZGU6IFZub2RlV2l0aERvbSkgPT4ge1xuICAgIHZub2RlLmNoaWxkcmVuID0gW3RydXN0KGh0bWwpXTtcbiAgfSxcbiAgXCJ2LW1vZGVsXCI6IChbbW9kZWwsIHByb3BlcnR5LCBldmVudF06IGFueVtdLCB2bm9kZTogVm5vZGVXaXRoRG9tLCBvbGRWbm9kZT86IFZub2RlV2l0aERvbSkgPT4ge1xuICAgIGxldCB2YWx1ZTtcbiAgICBsZXQgaGFuZGxlcjtcbiAgICBpZiAodm5vZGUudGFnID09PSBcImlucHV0XCIpIHtcbiAgICAgIGV2ZW50ID0gZXZlbnQgfHwgXCJvbmlucHV0XCI7XG4gICAgICBzd2l0Y2ggKHZub2RlLnByb3BzLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImNoZWNrYm94XCI6IHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtb2RlbFtwcm9wZXJ0eV0pKSB7XG4gICAgICAgICAgICBoYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIGxldCB2YWwgPSAoZS50YXJnZXQgYXMgRG9tRWxlbWVudCAmIFJlY29yZDxzdHJpbmcsIGFueT4pLnZhbHVlO1xuICAgICAgICAgICAgICBsZXQgaWR4ID0gbW9kZWxbcHJvcGVydHldLmluZGV4T2YodmFsKTtcbiAgICAgICAgICAgICAgaWYgKGlkeCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0ucHVzaCh2YWwpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XS5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhbHVlID0gbW9kZWxbcHJvcGVydHldLmluZGV4T2Yodm5vZGUuZG9tLnZhbHVlKSAhPT0gLTE7XG4gICAgICAgICAgfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gdm5vZGUucHJvcHMpIHtcbiAgICAgICAgICAgIGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChtb2RlbFtwcm9wZXJ0eV0gPT09IHZub2RlLnByb3BzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldID0gbnVsbDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0gPSB2bm9kZS5wcm9wcy52YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhbHVlID0gbW9kZWxbcHJvcGVydHldID09PSB2bm9kZS5wcm9wcy52YWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGFuZGxlciA9ICgpID0+IChtb2RlbFtwcm9wZXJ0eV0gPSAhbW9kZWxbcHJvcGVydHldKTtcbiAgICAgICAgICAgIHZhbHVlID0gbW9kZWxbcHJvcGVydHldO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRBdHRyaWJ1dGUoXCJjaGVja2VkXCIsIHZhbHVlLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJyYWRpb1wiOiB7XG4gICAgICAgICAgc2V0QXR0cmlidXRlKFwiY2hlY2tlZFwiLCBtb2RlbFtwcm9wZXJ0eV0gPT09IHZub2RlLmRvbS52YWx1ZSwgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgc2V0QXR0cmlidXRlKFwidmFsdWVcIiwgbW9kZWxbcHJvcGVydHldLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2bm9kZS50YWcgPT09IFwic2VsZWN0XCIpIHtcbiAgICAgIGV2ZW50ID0gZXZlbnQgfHwgXCJvbmNsaWNrXCI7XG4gICAgICBpZiAodm5vZGUucHJvcHMubXVsdGlwbGUpIHtcbiAgICAgICAgaGFuZGxlciA9IChlOiBFdmVudCAmIFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHtcbiAgICAgICAgICBsZXQgdmFsID0gKGUudGFyZ2V0IGFzIERvbUVsZW1lbnQgJiBSZWNvcmQ8c3RyaW5nLCBhbnk+KS52YWx1ZTtcbiAgICAgICAgICBpZiAoZS5jdHJsS2V5KSB7XG4gICAgICAgICAgICBsZXQgaWR4ID0gbW9kZWxbcHJvcGVydHldLmluZGV4T2YodmFsKTtcbiAgICAgICAgICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XS5wdXNoKHZhbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0uc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XS5zcGxpY2UoMCwgbW9kZWxbcHJvcGVydHldLmxlbmd0aCk7XG4gICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0ucHVzaCh2YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdm5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IElWbm9kZSkgPT4ge1xuICAgICAgICAgIGlmIChjaGlsZC50YWcgPT09IFwib3B0aW9uXCIpIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IFwidmFsdWVcIiBpbiBjaGlsZC5wcm9wcyA/IGNoaWxkLnByb3BzLnZhbHVlIDogY2hpbGQuY2hpbGRyZW4uam9pbihcIlwiKS50cmltKCk7XG4gICAgICAgICAgICBjaGlsZC5wcm9wcy5zZWxlY3RlZCA9IG1vZGVsW3Byb3BlcnR5XS5pbmRleE9mKHZhbHVlKSAhPT0gLTE7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBJVm5vZGUpID0+IHtcbiAgICAgICAgICBpZiAoY2hpbGQudGFnID09PSBcIm9wdGlvblwiKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBcInZhbHVlXCIgaW4gY2hpbGQucHJvcHMgPyBjaGlsZC5wcm9wcy52YWx1ZSA6IGNoaWxkLmNoaWxkcmVuLmpvaW4oXCJcIikudHJpbSgpO1xuICAgICAgICAgICAgY2hpbGQucHJvcHMuc2VsZWN0ZWQgPSB2YWx1ZSA9PT0gbW9kZWxbcHJvcGVydHldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2bm9kZS50YWcgPT09IFwidGV4dGFyZWFcIikge1xuICAgICAgZXZlbnQgPSBldmVudCB8fCBcIm9uaW5wdXRcIjtcbiAgICAgIHZub2RlLmNoaWxkcmVuID0gW21vZGVsW3Byb3BlcnR5XV07XG4gICAgfVxuXG4gICAgaWYgKCF2bm9kZS5wcm9wc1tldmVudF0pIHtcbiAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICBoYW5kbGVyID0gKGU6IEV2ZW50KSA9PiAobW9kZWxbcHJvcGVydHldID0gKGUudGFyZ2V0IGFzIERvbUVsZW1lbnQgJiBSZWNvcmQ8c3RyaW5nLCBhbnk+KS52YWx1ZSk7XG4gICAgICB9XG4gICAgICBzZXRBdHRyaWJ1dGUoZXZlbnQsIGhhbmRsZXIsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgfVxuICB9XG59O1xuXG4vKioqIFBsdWdpbnMgKioqL1xuY29uc3QgcGx1Z2lucyA9IG5ldyBNYXA8UGx1Z2luLCBhbnk+KCk7XG5cbmZ1bmN0aW9uIHVzZShwbHVnaW46IFBsdWdpbiwgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wsIGFueT4pOiB2b2lkIHwgYW55IHtcbiAgaWYgKHBsdWdpbnMuaGFzKHBsdWdpbikpIHtcbiAgICByZXR1cm4gcGx1Z2lucy5nZXQocGx1Z2luKTtcbiAgfVxuXG4gIGxldCByZXN1bHQgPSBwbHVnaW4odiwgb3B0aW9ucyk7XG4gIHBsdWdpbnMuc2V0KHBsdWdpbiwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqKiBIeXBlcnNjcmlwdCAqKiovXG5cbmNvbnN0IHY6IFZhbHlyaWFuID0gZnVuY3Rpb24gdih0YWdPckNvbXBvbmVudDogc3RyaW5nIHwgVmFseXJpYW5Db21wb25lbnQsIHByb3BzOiBQcm9wcywgLi4uY2hpbGRyZW46IENoaWxkcmVuKTogSVZub2RlIHwgVm5vZGVDb21wb25lbnQge1xuICBpZiAodHlwZW9mIHRhZ09yQ29tcG9uZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIG5ldyBWbm9kZSh0YWdPckNvbXBvbmVudCwgcHJvcHMgfHwge30sIGNoaWxkcmVuKTtcbiAgfVxuXG4gIGNvbnN0IHZub2RlID0gbmV3IFZub2RlKFwiX19jb21wb25lbnRfX1wiLCBwcm9wcyB8fCB7fSwgY2hpbGRyZW4pO1xuICB2bm9kZS5jb21wb25lbnQgPSB0YWdPckNvbXBvbmVudDtcbiAgcmV0dXJuIHZub2RlIGFzIFZub2RlQ29tcG9uZW50O1xufTtcblxudi5mcmFnbWVudCA9IChwcm9wczogUHJvcHMsIC4uLmNoaWxkcmVuOiBDaGlsZHJlbik6IENoaWxkcmVuID0+IHtcbiAgcmV0dXJuIGNoaWxkcmVuO1xufTtcblxuLyoqKiBWIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgKioqL1xuLy8gVGhpcyBpcyBpbnRlbmRlZCB0byBtYWtlIHRoZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIGF2YWlsYWJsZSBmb3IgcGx1Z2luc1xudi5jdXJyZW50ID0gY3VycmVudDtcblxudi5kaXJlY3RpdmVzID0gZGlyZWN0aXZlcztcblxudi5yZXNlcnZlZFByb3BzID0gcmVzZXJ2ZWRQcm9wcztcblxudi5pc1Zub2RlID0gaXNWbm9kZTtcbnYuaXNDb21wb25lbnQgPSBpc0NvbXBvbmVudDtcbnYuaXNWbm9kZUNvbXBvbmVudCA9IGlzVm5vZGVDb21wb25lbnQ7XG5cbnYuaXNNb3VudGVkID0gZmFsc2U7XG52LmlzTm9kZUpzID0gaXNOb2RlSnM7XG52LnRydXN0ID0gdHJ1c3Q7XG5cbnYub25DbGVhbnVwID0gb25DbGVhbnVwO1xudi5vblVubW91bnQgPSBvblVubW91bnQ7XG52Lm9uTW91bnQgPSBvbk1vdW50O1xudi5vblVwZGF0ZSA9IG9uVXBkYXRlO1xuXG52Lm1vdW50ID0gbW91bnQ7XG52LnVubW91bnQgPSB1bm1vdW50O1xudi51cGRhdGUgPSB1cGRhdGU7XG5cbnYuc2V0QXR0cmlidXRlID0gc2V0QXR0cmlidXRlO1xudi5kaXJlY3RpdmUgPSBkaXJlY3RpdmU7XG52LnVzZSA9IHVzZTtcblxuZXhwb3J0IGRlZmF1bHQgdjtcbiJdfQ==
|
package/lib/index.ts
CHANGED
|
@@ -98,7 +98,8 @@ const reservedProps: ReservedProps = {
|
|
|
98
98
|
"v-for": true,
|
|
99
99
|
"v-show": true,
|
|
100
100
|
"v-class": true,
|
|
101
|
-
"v-html": true
|
|
101
|
+
"v-html": true,
|
|
102
|
+
"v-model": true
|
|
102
103
|
};
|
|
103
104
|
|
|
104
105
|
/*** Mount ***/
|
|
@@ -541,7 +542,7 @@ const directives: Directives = {
|
|
|
541
542
|
"v-model": ([model, property, event]: any[], vnode: VnodeWithDom, oldVnode?: VnodeWithDom) => {
|
|
542
543
|
let value;
|
|
543
544
|
let handler;
|
|
544
|
-
if (vnode.
|
|
545
|
+
if (vnode.tag === "input") {
|
|
545
546
|
event = event || "oninput";
|
|
546
547
|
switch (vnode.props.type) {
|
|
547
548
|
case "checkbox": {
|
|
@@ -580,7 +581,7 @@ const directives: Directives = {
|
|
|
580
581
|
setAttribute("value", model[property], vnode, oldVnode);
|
|
581
582
|
}
|
|
582
583
|
}
|
|
583
|
-
} else if (vnode.
|
|
584
|
+
} else if (vnode.tag === "select") {
|
|
584
585
|
event = event || "onclick";
|
|
585
586
|
if (vnode.props.multiple) {
|
|
586
587
|
handler = (e: Event & Record<string, any>) => {
|
|
@@ -611,7 +612,7 @@ const directives: Directives = {
|
|
|
611
612
|
}
|
|
612
613
|
});
|
|
613
614
|
}
|
|
614
|
-
} else if (vnode.
|
|
615
|
+
} else if (vnode.tag === "textarea") {
|
|
615
616
|
event = event || "oninput";
|
|
616
617
|
vnode.children = [model[property]];
|
|
617
618
|
}
|
package/package.json
CHANGED