@mattilsynet/design 1.3.9 → 1.3.10

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.
@@ -1,22 +1,22 @@
1
- var mtds=function($){"use strict";var Et=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",pn=Et&&/android/i.test(navigator.userAgent),ee;Et&&/^Mac/i.test(((ee=navigator.userAgentData)==null?void 0:ee.platform)||navigator.platform);var hn=`${pn?"data":"aria"}-labelledby`,$t=":host(:not([hidden])) { display: block }",Z=typeof HTMLElement>"u"?class{}:HTMLElement;function S(t,e,o){var n;return o===void 0?(n=t.getAttribute(e))!=null?n:null:(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}var oe=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},mn=(t,...e)=>oe("add",t,e),bn=(t,...e)=>oe("remove",t,e),tt=(t,e)=>t.attachShadow({mode:"open"}).append(ae("slot"),ae("style",e)),et=new WeakMap,ne=(t,e)=>{if(e===void 0)return et.get(t);try{et.get(t).disconnect(),et.delete(t)}catch{}if(e){const o=new MutationObserver(n=>t.handleEvent({type:"mutation",detail:n}));o.observe(t,e),et.set(t,o)}},vn=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},ie=t=>{var e;const o=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return o instanceof Document||o instanceof ShadowRoot?o:document},_n=0,se=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++_n).toString(32)}`),t.id):"",ae=(t,e,o)=>{const n=document.createElement(t);return e&&(n.textContent=e),n},ot={define:(t,e)=>!Et||window.customElements.get(t)||window.customElements.define(t,e)},nt="aria-controls",U="aria-selected",re=class extends Z{constructor(){super(),tt(this,$t)}get tabList(){return it("u-tablist",this)[0]||null}get selectedIndex(){return st(this.tabs)}set selectedIndex(t){xt(this.tabs[t])}get tabs(){return it("u-tab",this)}get panels(){return it("u-tabpanel",this)}},le=class extends Z{constructor(){super(),tt(this,$t)}connectedCallback(){S(this,"role","tablist"),mn(this,"click,keydown",this),ne(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){bn(this,"click,keydown",this),ne(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s?.setAttribute(U,"true")}const{key:e}=t,o=[...this.tabs],n=o.findIndex(s=>s.contains(t.target));let i=n;if(!(t.defaultPrevented||n===-1)&&(t.type==="click"&&xt(o[n]),t.type==="keydown"&&!vn(t))){if(e==="ArrowDown"||e==="ArrowRight")i=(n+1)%o.length;else if(e==="ArrowUp"||e==="ArrowLeft")i=(n||o.length)-1;else if(e==="End")i=o.length-1;else if(e==="Home")i=0;else if(e==="Tab")i=st(o);else return;setTimeout(()=>{o[n].tabIndex=-1,o[i].tabIndex=0}),e!=="Tab"&&(t.preventDefault(),o[i].focus())}}get tabsElement(){return this.closest("u-tabs")}get tabs(){return this.querySelectorAll("u-tab")}get selectedIndex(){return st(this.tabs)}set selectedIndex(t){xt(this.tabs[t])}},St=!1,ce=class extends Z{static get observedAttributes(){return["id",U,nt]}constructor(){super(),tt(this,":host(:not([hidden])) { cursor: pointer; display: inline-block }")}connectedCallback(){S(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!St&&this.selected&&this.tabList){St=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=it("u-tabpanel",this.tabsElement||this),o=Tt(this,e[t.indexOf(this)]);o&&S(o,hn,se(this)),t.forEach((n,i)=>{const s=Tt(n,e[i]);n.tabIndex=n===this?0:-1,S(n,U,`${n===this}`),s&&(s.hidden=s!==o),s&&S(n,nt,s.id)}),St=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return t?.nodeName==="U-TABLIST"?t:null}get selected(){return S(this,U)==="true"}set selected(t){S(this,U,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return Tt(this)}},de=class extends Z{static get observedAttributes(){return["hidden"]}constructor(){super(),tt(this,$t)}connectedCallback(){S(this,"role","tabpanel"),this.hidden=st(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){this.hidden||gn(this.firstChild)?S(this,"tabindex",null):this.tabIndex=0}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${nt}="${this.id}"]`;return ie(this).querySelectorAll(t)}},it=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),Tt=(t,e)=>{const o=S(t,nt)||se(e),n=ie(t).getElementById(o);return n?.nodeName==="U-TABPANEL"?n:null},st=t=>[...t].findIndex(e=>S(e,U)==="true"),xt=t=>t&&S(t,"aria-selected","true"),gn=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');ot.define("u-tabs",re),ot.define("u-tablist",le),ot.define("u-tab",ce),ot.define("u-tabpanel",de);var yn=Object.defineProperty,ue=Object.getOwnPropertySymbols,wn=Object.prototype.hasOwnProperty,En=Object.prototype.propertyIsEnumerable,fe=(t,e,o)=>e in t?yn(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,$n=(t,e)=>{for(var o in e||(e={}))wn.call(e,o)&&fe(t,o,e[o]);if(ue)for(var o of ue(e))En.call(e,o)&&fe(t,o,e[o]);return t},j=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",pe=j&&/android/i.test(navigator.userAgent),Sn=j&&/firefox/i.test(navigator.userAgent),Tn=j&&/iPad|iPhone|iPod/.test(navigator.userAgent),he;j&&/^Mac/i.test(((he=navigator.userAgentData)==null?void 0:he.platform)||navigator.platform);var xn="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",Cn=typeof HTMLElement>"u"?class{}:HTMLElement;function f(t,e,o){return o===void 0?t.getAttribute(e):(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}var me=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},at=(t,...e)=>me("add",t,e),kn=(t,...e)=>me("remove",t,e),rt=new WeakMap,Ct=(t,e)=>{if(e===void 0)return rt.get(t);try{rt.get(t).disconnect(),rt.delete(t)}catch{}if(e){const o=new MutationObserver(n=>t.handleEvent({type:"mutation",detail:n}));o.observe(t,e),rt.set(t,o)}},In=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},Ln=t=>{var e;const o=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return o instanceof Document||o instanceof ShadowRoot?o:document},An=0,Mn=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++An).toString(32)}`),t.id):"",lt=(t,e,o)=>{const n=document.createElement(t);if(e&&(n.textContent=e),o)for(const[i,s]of Object.entries(o))f(n,i,s);return n},On={define:(t,e)=>!j||window.customElements.get(t)||window.customElements.define(t,e)},D,Pn=0,kt=t=>{D||(D=lt("div"),D.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",f(D,"aria-live","assertive")),D.isConnected||document.body.append(D),t&&(D.textContent=`${t}${Pn++%2?" ":""}`)},be=(t,e,o="")=>{var n,i;const s={bubbles:!0,composed:!0,data:e,inputType:o},a=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(n=Object.getOwnPropertyDescriptor(a,"value"))==null?void 0:n.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},It=!1,Lt=t=>(t?.type==="mouseup"&&(It=!1),t?.type==="mousedown"&&(It=!0,at(document,"mouseup",Lt,{once:!0})),It),ve="beforeinput,blur,focus,click,input,keydown,mousedown",_e={once:!0,passive:!0},Dn=Sn&&!pe,Nn=pe||Tn,ct="false",dt={added:"Added",empty:"No selected",found:"Navigate left to find %d selected",invalid:"Invalid value",of:"of",remove:"Press to remove",removed:"Removed"},ut=class extends Cn{constructor(){super(),this._itemText="",this._speak="",this._texts=$n({},dt),this._value="",this.attachShadow({mode:"open"}).append(lt("slot"),lt("style",`:host(:not([hidden])) { display: block; cursor: pointer; -webkit-tap-highlight-color: rgba(0, 0, 0, 0) } /* Must be display block in Safari to allow focus inside */
1
+ var mtds=function($){"use strict";var Et=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",pn=Et&&/android/i.test(navigator.userAgent),oe;Et&&/^Mac/i.test(((oe=navigator.userAgentData)==null?void 0:oe.platform)||navigator.platform);var hn=`${pn?"data":"aria"}-labelledby`,$t=":host(:not([hidden])) { display: block }",Z=typeof HTMLElement>"u"?class{}:HTMLElement;function S(t,e,o){var n;return o===void 0?(n=t.getAttribute(e))!=null?n:null:(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}var ne=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},mn=(t,...e)=>ne("add",t,e),bn=(t,...e)=>ne("remove",t,e),tt=(t,e)=>t.attachShadow({mode:"open"}).append(re("slot"),re("style",e)),et=new WeakMap,ie=(t,e)=>{if(e===void 0)return et.get(t);try{et.get(t).disconnect(),et.delete(t)}catch{}if(e){const o=new MutationObserver(n=>t.handleEvent({type:"mutation",detail:n}));o.observe(t,e),et.set(t,o)}},vn=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},se=t=>{var e;const o=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return o instanceof Document||o instanceof ShadowRoot?o:document},_n=0,ae=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++_n).toString(32)}`),t.id):"",re=(t,e,o)=>{const n=document.createElement(t);return e&&(n.textContent=e),n},ot={define:(t,e)=>!Et||window.customElements.get(t)||window.customElements.define(t,e)},nt="aria-controls",U="aria-selected",le=class extends Z{constructor(){super(),tt(this,$t)}get tabList(){return it("u-tablist",this)[0]||null}get selectedIndex(){return st(this.tabs)}set selectedIndex(t){xt(this.tabs[t])}get tabs(){return it("u-tab",this)}get panels(){return it("u-tabpanel",this)}},ce=class extends Z{constructor(){super(),tt(this,$t)}connectedCallback(){S(this,"role","tablist"),mn(this,"click,keydown",this),ie(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){bn(this,"click,keydown",this),ie(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s?.setAttribute(U,"true")}const{key:e}=t,o=[...this.tabs],n=o.findIndex(s=>s.contains(t.target));let i=n;if(!(t.defaultPrevented||n===-1)&&(t.type==="click"&&xt(o[n]),t.type==="keydown"&&!vn(t))){if(e==="ArrowDown"||e==="ArrowRight")i=(n+1)%o.length;else if(e==="ArrowUp"||e==="ArrowLeft")i=(n||o.length)-1;else if(e==="End")i=o.length-1;else if(e==="Home")i=0;else if(e==="Tab")i=st(o);else return;setTimeout(()=>{o[n].tabIndex=-1,o[i].tabIndex=0}),e!=="Tab"&&(t.preventDefault(),o[i].focus())}}get tabsElement(){return this.closest("u-tabs")}get tabs(){return this.querySelectorAll("u-tab")}get selectedIndex(){return st(this.tabs)}set selectedIndex(t){xt(this.tabs[t])}},St=!1,de=class extends Z{static get observedAttributes(){return["id",U,nt]}constructor(){super(),tt(this,":host(:not([hidden])) { cursor: pointer; display: inline-block }")}connectedCallback(){S(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!St&&this.selected&&this.tabList){St=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=it("u-tabpanel",this.tabsElement||this),o=Tt(this,e[t.indexOf(this)]);o&&S(o,hn,ae(this)),t.forEach((n,i)=>{const s=Tt(n,e[i]);n.tabIndex=n===this?0:-1,S(n,U,`${n===this}`),s&&(s.hidden=s!==o),s&&S(n,nt,s.id)}),St=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return t?.nodeName==="U-TABLIST"?t:null}get selected(){return S(this,U)==="true"}set selected(t){S(this,U,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return Tt(this)}},ue=class extends Z{static get observedAttributes(){return["hidden"]}constructor(){super(),tt(this,$t)}connectedCallback(){S(this,"role","tabpanel"),this.hidden=st(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){this.hidden||gn(this.firstChild)?S(this,"tabindex",null):this.tabIndex=0}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${nt}="${this.id}"]`;return se(this).querySelectorAll(t)}},it=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),Tt=(t,e)=>{const o=S(t,nt)||ae(e),n=se(t).getElementById(o);return n?.nodeName==="U-TABPANEL"?n:null},st=t=>[...t].findIndex(e=>S(e,U)==="true"),xt=t=>t&&S(t,"aria-selected","true"),gn=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');ot.define("u-tabs",le),ot.define("u-tablist",ce),ot.define("u-tab",de),ot.define("u-tabpanel",ue);var yn=Object.defineProperty,fe=Object.getOwnPropertySymbols,wn=Object.prototype.hasOwnProperty,En=Object.prototype.propertyIsEnumerable,pe=(t,e,o)=>e in t?yn(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,$n=(t,e)=>{for(var o in e||(e={}))wn.call(e,o)&&pe(t,o,e[o]);if(fe)for(var o of fe(e))En.call(e,o)&&pe(t,o,e[o]);return t},Y=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",he=Y&&/android/i.test(navigator.userAgent),Sn=Y&&/firefox/i.test(navigator.userAgent),Tn=Y&&/iPad|iPhone|iPod/.test(navigator.userAgent),me;Y&&/^Mac/i.test(((me=navigator.userAgentData)==null?void 0:me.platform)||navigator.platform);var xn="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",Cn=typeof HTMLElement>"u"?class{}:HTMLElement;function f(t,e,o){return o===void 0?t.getAttribute(e):(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}var be=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},at=(t,...e)=>be("add",t,e),kn=(t,...e)=>be("remove",t,e),rt=new WeakMap,Ct=(t,e)=>{if(e===void 0)return rt.get(t);try{rt.get(t).disconnect(),rt.delete(t)}catch{}if(e){const o=new MutationObserver(n=>t.handleEvent({type:"mutation",detail:n}));o.observe(t,e),rt.set(t,o)}},In=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},Ln=t=>{var e;const o=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return o instanceof Document||o instanceof ShadowRoot?o:document},An=0,Mn=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++An).toString(32)}`),t.id):"",lt=(t,e,o)=>{const n=document.createElement(t);if(e&&(n.textContent=e),o)for(const[i,s]of Object.entries(o))f(n,i,s);return n},On={define:(t,e)=>!Y||window.customElements.get(t)||window.customElements.define(t,e)},D,Pn=0,kt=t=>{D||(D=lt("div"),D.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",f(D,"aria-live","assertive")),D.isConnected||document.body.append(D),t&&(D.textContent=`${t}${Pn++%2?" ":""}`)},ve=(t,e,o="")=>{var n,i;const s={bubbles:!0,composed:!0,data:e,inputType:o},a=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(n=Object.getOwnPropertyDescriptor(a,"value"))==null?void 0:n.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},It=!1,Lt=t=>(t?.type==="mouseup"&&(It=!1),t?.type==="mousedown"&&(It=!0,at(document,"mouseup",Lt,{once:!0})),It),_e="beforeinput,blur,focus,click,input,keydown,mousedown",ge={once:!0,passive:!0},Dn=Sn&&!he,Nn=he||Tn,ct="false",dt={added:"Added",empty:"No selected",found:"Navigate left to find %d selected",invalid:"Invalid value",of:"of",remove:"Press to remove",removed:"Removed"},ut=class extends Cn{constructor(){super(),this._item="",this._speak="",this._texts=$n({},dt),this._value="",this.attachShadow({mode:"open"}).append(lt("slot"),lt("style",`:host(:not([hidden])) { display: block; cursor: pointer; -webkit-tap-highlight-color: rgba(0, 0, 0, 0) } /* Must be display block in Safari to allow focus inside */
2
2
  :host(:not([data-multiple])) ::slotted(data),
3
3
  :host([data-multiple="false"]) ::slotted(data) { display: none } /* Hide data if not multiple */
4
4
  ::slotted(input[inputmode="none"]) { outline: none } /* Hide temporary foucs outline flash */
5
5
  ::slotted(del) { text-decoration: none }
6
6
  ::slotted(data:not([hidden])) { display: inline-block; pointer-events: none }
7
7
  ::slotted(data)::after { content: '\\00D7'; content: '\\00D7' / ''; padding-inline: .5ch; pointer-events: auto }
8
- ::slotted(data:focus) { ${xn} }`))}static get observedAttributes(){return Object.keys(dt).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=Ln(this),at(this,ve,this,!0),Ct(this,{attributeFilter:["value"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(ft,0,this),setTimeout(pt,0,this)}attributeChangedCallback(t,e,o){const n=t.split("data-sr-")[1];dt[n]&&(this._texts[n]=o||dt[n])}disconnectedCallback(){Ct(this,!1),kn(this,ve,this,!0),this._items=this._clear=this._focus=this._control=void 0,this._list=this._options=this._root=void 0}handleEvent(t){const e=t.target;t.type==="beforeinput"&&(this._value=e?.value||""),t.type==="blur"&&Rn(this),t.type==="click"&&Un(this,t),t.type==="focus"&&Hn(this,t),t.type==="input"&&qn(this,t),t.type==="keydown"&&Fn(this,t),t.type==="mousedown"&&Lt(t),t.type==="mutation"&&ft(this,t)}get multiple(){var t;return((t=f(this,"data-multiple"))!=null?t:ct)!==ct}set multiple(t){f(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=f(this,"data-creatable"))!=null?t:ct)!==ct}set creatable(t){f(this,"data-creatable",t?"":null)}get control(){var t;return(t=this._control)!=null&&t.isConnected||(this._control=this.querySelector("input")),this._control}get list(){var t;return(t=this._list)!=null&&t.isConnected||(this._list=this.querySelector("u-datalist,datalist")),this._list}get clear(){var t;return(t=this._clear)!=null&&t.isConnected||(this._clear=this.querySelector("del")),this._clear}get items(){return this._items||(this._items=this.getElementsByTagName("data")),this._items}get options(){var t,e;if(!this._options){const o=((t=this.list)==null?void 0:t.nodeName)==="U-DATALIST"?"u-option":"option";this._options=(e=this.list)==null?void 0:e.getElementsByTagName(o)}return this._options}get values(){return[...this.items].map(({value:t})=>t)}},O=t=>{var e;return((e=t?.textContent)==null?void 0:e.trim())||""},At=t=>t instanceof HTMLDataElement,ft=(t,e)=>{var o,n;const{_focus:i,_texts:s,items:a,control:r,list:d,multiple:l}=t;let h=`${O((o=r?.labels)==null?void 0:o[0])}, ${l?a.length?s.found.replace("%d",`${a.length}`):s.empty:""}`;const u=[];for(const{addedNodes:_,removedNodes:I}of e?.detail||[]){for(const m of _)At(m)&&u.unshift(m);for(const m of I)At(m)&&u.push(m)}const T=l?u.length===1:u[0]===i;if(i&&r&&T){const _=f(r,"inputmode"),I=At(i)?r:i;t._speak=`${s[u[0].isConnected?"added":"removed"]} ${O(u[0])}, `,(Nn||i===r)&&kt(t._speak),r!==I&&(f(r,"aria-expanded",null),f(r,"inputmode","none"),h=" ",r.focus()),setTimeout(()=>{var m;f(r,"aria-expanded","true"),f(r,"inputmode",_),(m=I?.focus)==null||m.call(I),t._speak="",Dn?at(t,"blur",()=>ft(t),_e):setTimeout(ft,100,t)},100)}let w=0;const k=t.querySelector("select");for(const _ of a){const I=k?.options[w],m=O(_),A=_.value||m,te=`${t._speak}${m}, ${s.remove}, ${++w} ${s.of} ${a.length}`;f(_,"role","button"),f(_,"value",A),f(_,"tabindex","-1"),f(_,"aria-label",te),I?Object.assign(I,{textContent:m,value:A}):k?.appendChild(new Option(m,A,!0,!0))}k&&f(k,"multiple",l?"":null);for(const _ of[...k?.options||[]].slice(w))_.remove();!l&&w>1&&console.warn("u-combobox: Multiple <data> found in single mode."),d&&f(d,"aria-multiselectable",`${l}`),r&&f(r,"list",Mn(d)),r&&f(r,"aria-label",`${t._speak}${h}`);const J=O(a[0]);J!==t._itemText&&pt(t,!1),t._itemText=J,ge(t),ye(t),(n=Ct(t))==null||n.takeRecords()},ge=t=>{var e;t.clear&&f(t.clear,"role","button"),t.clear&&(t.clear.hidden=!((e=t.control)!=null&&e.value))},ye=t=>{var e;const{_speak:o,options:n=[],values:i}=t;for(const s of n){const a=(e=f(s,"value"))!=null?e:O(s);f(s,"aria-label",o?`${o}${O(s)}`:null),f(s,"selected",i.includes(a)?"":null)}},pt=(t,e=!0)=>{const{multiple:o,control:n,items:i}=t,s=O(i[0]);if(!(o||!n||s===n.value)){if(e)return be(n,s,"insertText");n.value=s}},Mt=(t,e=!0)=>{var o;const{_texts:n,options:i=[],creatable:s,control:a,items:r,multiple:d}=t,l=((o=a?.value)==null?void 0:o.trim())||"",h=l.toLowerCase()||null;let u=[...i].find(w=>(f(w,"label")||O(w)).trim().toLowerCase()===h);const T={bubbles:!0,cancelable:!0,detail:u};if(t.dispatchEvent(new CustomEvent("beforematch",T))||(u=[...i].find(w=>w.selected)),e)return ye(t),u?q(t,u,!1):s&&l?q(t,{value:l},!1):(!d&&r[0]?q(t,r[0]):pt(t),kt(n.invalid));for(const w of i)w.selected=w===u},q=(t,e,o=!0)=>{const{control:n,items:i,multiple:s}=t,a=lt("data",e.label||e.value,{value:e.value}),r=[...i].find(h=>h.value===e.value),d={bubbles:!0,cancelable:!0,detail:r||a};if(r&&!o)return pt(t);if(t.dispatchEvent(new CustomEvent("beforechange",d))){if(!s)for(const h of[...i])h.remove();r?r.remove():n?.insertAdjacentElement("beforebegin",a),t.dispatchEvent(new CustomEvent("afterchange",d))}},Hn=(t,{target:e})=>{e instanceof HTMLElement&&(t._focus=e),kt()},Rn=t=>Lt()||setTimeout(Bn,0,t),Bn=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(t.multiple||Mt(t),t._focus=void 0)},Un=(t,e)=>{const{clientX:o,clientY:n,target:i}=e,{clear:s,control:a,items:r}=t;if(s?.contains(i))return a&&be(a,"","deleteContentBackward"),a?.focus();for(const d of r){const{top:l,right:h,bottom:u,left:T}=d.getBoundingClientRect();if(d.contains(i))return q(t,d);if(n>=l&&n<=u&&o>=T&&o<=h)return d.focus()}i===t&&a?.focus()},qn=(t,e)=>{var o;const{options:n=[],control:i,multiple:s}=t,a=((o=i?.value)==null?void 0:o.trim())||"";if(e instanceof InputEvent?!e.inputType||e.inputType==="insertReplacementText":!!a){e.stopImmediatePropagation(),i&&(i.value=t._value);for(const d of n)if(d.value&&d.value===a)return q(t,d,s)}else s||Mt(t,!1);ge(t)},Fn=(t,e)=>{var o;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;const{clear:n,control:i,items:s}=t,{key:a,repeat:r,target:d}=e,l=i&&i===d,h=l&&i?.selectionEnd;let u=l?s.length:[...s].indexOf(d);if(l&&a==="Tab"&&n&&!n.hidden&&(e.preventDefault(),n.tabIndex=-1,n.focus(),at(n,"blur",()=>f(n,"tabindex",null),_e)),!(!l&&In(e)||u===-1)){if(a==="ArrowRight"&&!l)u+=1;else if(a==="ArrowLeft"&&!h)u-=1;else if(a==="Enter"&&l){const T=f(i,"form");return f(i,"form","#"),requestAnimationFrame(()=>f(i,"form",T)),Mt(t)}else if((a==="Backspace"||a==="Delete")&&!h){if(e.preventDefault(),!r&&s[u])return q(t,s[u]);l&&(u-=1)}else return l||i?.focus();e.preventDefault(),(o=s[Math.max(0,u)]||i)==null||o.focus()}};On.define("u-combobox",ut);const Vn="1.3.9",E={capture:!0,passive:!0},K=typeof window<"u"&&typeof document<"u";function Yn(t,e){let o;return(...n)=>{clearTimeout(o),o=setTimeout(()=>t(...n),e)}}function c(t,e,o){return o===void 0?t.getAttribute(e)??null:(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}let jn=0;const Kn=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function Ot(t){return t.id||(t.id=`${Kn}${++jn}`),t.id}const Wn=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,e[`${t}EventListener`](...o)},b=(t,...e)=>Wn("add",t,e),W=K?document.createElement("div"):null,ht=new Map,Xn=()=>{for(const[t,e]of ht)e()};W&&(W.style.cssText="position:absolute;padding:1px;top:0;left:0px",b(window,"load,resize,scroll",Xn,E));const F={top:0,right:1,bottom:2,left:3};function P(t,e,o,n){const i=F[o]??Number(o)??F.bottom;if(e===!1||!e.isConnected||!t.isConnected)return ht.delete(t);W?.isConnected||document.body.append(W||""),ht.has(t)||ht.set(t,()=>P(t,e,i,n));const s=e instanceof HTMLElement,{offsetWidth:a,offsetHeight:r}=t,d=s?e.offsetWidth:e.clientWidth,l=s?e.offsetHeight:e.clientHeight,{width:h,height:u,left:T,top:w}=e.getBoundingClientRect(),k=window.visualViewport?.width||window.innerWidth,J=window.visualViewport?.height||window.innerHeight,_=window.pageXOffset||document.documentElement.scrollLeft,I=window.pageYOffset||document.documentElement.scrollTop,m=Math.round(T-(d-h)/2),A=Math.round(w-(l-u)/2),te=Math.min(Math.max(10,m-(a-d)/2),k-a-10),as=Math.min(Math.max(10,A-(r-l)/2),J-r-10),rs=m-a>0,ls=m+d+a<k,cs=A-r>0,ds=A+l+r<J,un=i===F.top||i===F.bottom,us=i===F.right&&(n||ls)||!rs,fn=i===F.bottom&&(n||ds)||!cs,fs=Math.round(un?te:us?m+d:m-a),ps=Math.round(un?fn?A+l:A-r:as);t.style.position="absolute",t.style.left=`${fs+_}px`,t.style.top=`${ps+I}px`,W?.style.setProperty("translate",`0px ${Math.round(fn?_+A+l+r+30:0)}px`)}function we(t){let e=0;const o=()=>setTimeout(n,200),n=()=>{t([],i),i.takeRecords(),e=0},i=new MutationObserver(()=>{e||(e=requestAnimationFrame(o))});return i}const Pt=new WeakMap,V=(t,e,o)=>{const n=t.getElementsByClassName(e),i=Pt.get(t)||[];i.length||(Pt.set(t,i),we((s,a)=>{if(t.isConnected&&i?.length)for(const r of i)r();else a?.disconnect(),Pt.delete(t)}).observe(t,{attributeFilter:["class","hidden"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>o(n))},x=t=>{if(!K)return;const e=()=>requestAnimationFrame(t);document.readyState==="complete"?e():b(window,"load",e)},Dt=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),Ee="mattilsynet.matomo.cloud";let Nt=!0;function Gn(t,e={}){if(K){if(window._paq||(window._paq=[],window._paq.push(["HeatmapSessionRecording::disable"]),window._paq.push(["enableLinkTracking"]),window._paq.push(["setTrackerUrl",`https://${Ee}/matomo.php`]),document.querySelector('script[src*="matomo.js"]')||document.head.append(Object.assign(document.createElement("script"),{async:!0,src:`https://cdn.matomo.cloud/${Ee}/matomo.js`}))),t==="init"){const{matomoId:o,enabled:n=!0}=e;Nt=n,window._paq.push(["setSiteId",o])}if(Nt==="debug")return console.info(`Analytics: "${t}"`,e);if(!(Nt===!1||window.location.hostname==="localhost"))if(t==="pageview"){const{url:o,title:n}=e;window._paq.push(["setCustomUrl",o||location.href]),window._paq.push(["setDocumentTitle",n||document.title]),window._paq.push(["trackPageView"])}else if(t==="event"){const{category:o,action:n,name:i,value:s}=e,a=["trackEvent",o,n,i,s];window._paq.push(a.filter(r=>r!==void 0))}else if(t==="search"){const{query:o,category:n=!1,results:i=!1}=e;window._paq.push(["trackSiteSearch",o,n,i])}else t==="matomo"&&window._paq.push(e)}}const zn=(t,e,o=Number.POSITIVE_INFINITY)=>{const n=(o-1)/2,i=Math.max(Math.min(t-Math.floor(n),e-o+1),1),s=Math.min(Math.max(t+Math.ceil(n),o),e),a=Array.from({length:s+1-i},(r,d)=>d+i);return o>4&&i>1&&a.splice(0,2,1,0),o>3&&s<e&&a.splice(-2,2,0,e),a},Qn=({current:t=1,total:e=10,show:o=7})=>({prev:t>1?t-1:0,next:t<e?t+1:0,pages:zn(t,e,o).map((n,i)=>({current:n===t&&"page",key:`key-${n}-${i}`,page:n}))}),$e="_alert_1bf95_1 _ds-alert_uxa1f_1",Se="_app_1bf95_1",Te="_sticky_1bf95_1",xe="_avatar_1bf95_1 _ds-avatar_uxa1f_1",Ce="_badge_1bf95_1",ke="_breadcrumbs_1bf95_1 _ds-breadcrumbs_uxa1f_1",Ie="_button_1bf95_1 _ds-button_uxa1f_1",Le="_card_1bf95_1",Ae="_group_1bf95_1",Me="_chip_1bf95_1 _ds-chip_uxa1f_1",Oe="_details_1bf95_1 _ds-details_uxa1f_1",Pe="_dialog_1bf95_1 _ds-dialog_uxa1f_1",De="_divider_1bf95_1",Ne="_errorsummary_1bf95_1 _ds-error-summary_uxa1f_1",He="__errorsummary_1bf95_1",Re="_field_1bf95_1 _ds-field_uxa1f_1",Be="__datalist_1bf95_1",Ue="_affixes_1bf95_1 _ds-field-affixes_uxa1f_1",qe="_fieldset_1bf95_1 _ds-fieldset_uxa1f_1",Fe="_heading_1bf95_1 _ds-heading_uxa1f_1",Ve="_ingress_1bf95_1",Ye="_muted_1bf95_1",je="_info_1bf95_1",Ke="_prose_1bf95_1",We="_helptext_1bf95_1 _ds-focus_uxa1f_1",Xe="_input_1bf95_1 _ds-input_uxa1f_1",Ge="_grid_1bf95_1",ze="_flex_1bf95_1",Qe="_link_1bf95_1",Je="_logo_1bf95_1",Ze="_pagination_1bf95_1 _ds-pagination_uxa1f_1",to="_popover_1bf95_1",eo="_progress_1bf95_1",oo="__indeterminate_1bf95_1",no="_skeleton_1bf95_1 _ds-skeleton_uxa1f_1",io="__skeleton_1bf95_1",so="_spinner_1bf95_1",ao="_steps_1bf95_1",ro="_table_1bf95_1 _ds-table_uxa1f_1",lo="__scrollShadow_1bf95_1",co="_tabs_1bf95_1 _ds-tabs_uxa1f_1",uo="__scrollMask_1bf95_1",fo="_tag_1bf95_1 _ds-tag_uxa1f_1",po="_togglegroup_1bf95_1",ho="__tooltip_1bf95_1",mo="_validation_1bf95_1 _ds-validation-message_uxa1f_1",bo="_body_1bf95_153",vo="__checked_1bf95_1",v={alert:$e,app:Se,sticky:Te,avatar:xe,badge:Ce,breadcrumbs:ke,button:Ie,card:Le,group:Ae,chip:Me,details:Oe,dialog:Pe,divider:De,errorsummary:Ne,_errorsummary:He,field:Re,_datalist:Be,affixes:Ue,fieldset:qe,heading:Fe,ingress:Ve,muted:Ye,info:je,prose:Ke,helptext:We,input:Xe,grid:Ge,flex:ze,link:Qe,logo:Je,pagination:Ze,popover:to,progress:eo,_indeterminate:oo,skeleton:no,_skeleton:io,spinner:so,steps:ao,table:ro,_scrollShadow:lo,tabs:co,_scrollMask:uo,tag:fo,togglegroup:po,_tooltip:ho,validation:mo,body:bo,_checked:vo},Jn=Object.freeze(Object.defineProperty({__proto__:null,_checked:vo,_datalist:Be,_errorsummary:He,_indeterminate:oo,_scrollMask:uo,_scrollShadow:lo,_skeleton:io,_tooltip:ho,affixes:Ue,alert:$e,app:Se,avatar:xe,badge:Ce,body:bo,breadcrumbs:ke,button:Ie,card:Le,chip:Me,default:v,details:Oe,dialog:Pe,divider:De,errorsummary:Ne,field:Re,fieldset:qe,flex:ze,grid:Ge,group:Ae,heading:Fe,helptext:We,info:je,ingress:Ve,input:Xe,link:Qe,logo:Je,muted:Ye,pagination:Ze,popover:to,progress:eo,prose:Ke,skeleton:no,spinner:so,steps:ao,sticky:Te,table:ro,tabs:co,tag:fo,togglegroup:po,validation:mo},Symbol.toStringTag,{value:"Module"}));typeof window<"u"&&window.CSSStyleSheet&&document.adoptedStyleSheets&&(()=>{const t="--mtds-app-expanded",e=new CSSStyleSheet,o=()=>!window.localStorage.getItem(t)?.includes("false");document.adoptedStyleSheets.push(e),window.mtdsToggleAppExpanded=n=>{try{const i=n??!o();e.replaceSync?.(`:root { ${t}: var(${t}--${i})}`),window.localStorage.setItem(t,i)}catch{}},window.mtdsToggleAppExpanded(o())})();const _o=v.app.split(" ")[0],Zn=v.sticky.split(" ")[0],ti='[data-command="toggle-app-expanded"]',go=`.${_o} > dialog,.${_o} dialog ~ main`,yo=t=>{document.startViewTransition?document.startViewTransition(t):t()},wo=t=>yo(()=>window.mtdsToggleAppExpanded?.(t));function ei({target:t,defaultPrevented:e}){if(!(e||!(t instanceof HTMLButtonElement)||!t.matches(ti))){if(getComputedStyle(t).position==="sticky")return wo();yo(()=>{const o=document.querySelector(go);o?.setAttribute("data-closedby","any"),o?.showModal()})}}function oi(){document.querySelector(go)?.close()}let Ht=0,Y,M=0,g,Rt=0,mt=0,Bt=!1,Ut=0,N=0;function ni([t]){g=t,Eo()}function Eo(){if(!g?.isConnected)return;const t=window.scrollY,e=t<N;N=t,e!==Y&&(Ht=(g.parentElement?.getBoundingClientRect().top||0)+N,Y=e,Rt=g.offsetHeight,mt=g.getBoundingClientRect().top+N,Bt=g.offsetHeight<=window.innerHeight,Ut=window.innerHeight),!(M===-1&&Bt)&&(M!==-1&&(Bt||Y&&N<=mt)?(g.style.setProperty("--pos","sticky"),g.style.setProperty("--top","0px"),M=-1):M===-1&&!Y?(g.style.setProperty("--pos","relative"),g.style.setProperty("--top",`${Math.max(0,N-Ht)}px`),M=0):M!==1&&!Y&&N+Ut>=mt+Rt?(g.style.setProperty("--pos","sticky"),g.style.setProperty("--top",`${Ut-Rt}px`),M=1):M===1&&Y&&(g.style.setProperty("--pos","relative"),g.style.setProperty("--top",`${mt-Ht}px`),M=0))}x(()=>{V(document.documentElement,Zn,ni),b(document,"click",ei,E),b(window,"resize",Yn(oi,100),E),b(window,"scroll",Eo,E)});const ii=v.breadcrumbs.split(" ")[0];function si(t){for(const e of t)e.querySelectorAll("li a").forEach((o,n,{length:i})=>{c(o,"aria-current",n===i-1?"page":null)})}x(()=>V(document.documentElement,ii,si));const ai=v.dialog.split(" ")[0],ri=K?document.getElementsByClassName(ai):[],li=()=>{for(const t of ri)t.isConnected&&t.showModal&&t.close&&(t.matches('[open]:not([data-modal="false"]):not(:modal)')?(c(t,"open",null),t.showModal()):t.matches(":modal:not([open])")&&(c(t,"open",""),t.close()))},ci=({clientX:t,clientY:e,target:o})=>{if(o instanceof HTMLDialogElement&&c(o,"data-closedby")==="any"){const{top:n,right:i,bottom:s,left:a}=o.getBoundingClientRect();n<=e&&e<=s&&a<=t&&t<=i||o.close()}else o instanceof Element&&o.closest('button[data-command="close"]')&&o?.closest("dialog")?.close()};x(()=>{b(document,"click",ci,E),we(li).observe(document.documentElement,{attributeFilter:["open"],attributes:!0,childList:!0,subtree:!0})});function di(t){if(t.animationName!==v._errorsummary)return;const e=t.target?.firstElementChild;e instanceof HTMLHeadingElement&&(c(e,"tabindex","-1"),e.focus())}x(()=>b(document,"animationend",di,E));var ui=Object.defineProperty,$o=Object.getOwnPropertySymbols,fi=Object.prototype.hasOwnProperty,pi=Object.prototype.propertyIsEnumerable,So=(t,e,o)=>e in t?ui(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,hi=(t,e)=>{for(var o in e||(e={}))fi.call(e,o)&&So(t,o,e[o]);if($o)for(var o of $o(e))pi.call(e,o)&&So(t,o,e[o]);return t},X=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",bt=X&&/android/i.test(navigator.userAgent),qt=X&&/iPad|iPhone|iPod/.test(navigator.userAgent),To;X&&/^Mac/i.test(((To=navigator.userAgentData)==null?void 0:To.platform)||navigator.platform);var mi=`${bt?"data":"aria"}-labelledby`,bi=":host(:not([hidden])) { display: block }",vi="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",xo=typeof HTMLElement>"u"?class{}:HTMLElement;function p(t,e,o){return o===void 0?t.getAttribute(e):(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}var Co=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},G=(t,...e)=>Co("add",t,e),vt=(t,...e)=>Co("remove",t,e),_i=(t,e)=>t.attachShadow({mode:"open"}).append(Yt("slot"),Yt("style",e)),_t=new WeakMap,Ft=(t,e)=>{if(e===void 0)return _t.get(t);try{_t.get(t).disconnect(),_t.delete(t)}catch{}if(e){const o=new MutationObserver(n=>t.handleEvent({type:"mutation",detail:n}));o.observe(t,e),_t.set(t,o)}},ko=t=>{var e;const o=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return o instanceof Document||o instanceof ShadowRoot?o:document},gi=0,Vt=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++gi).toString(32)}`),t.id):"",Yt=(t,e,o)=>{const n=document.createElement(t);return e&&(n.textContent=e),n},Io={define:(t,e)=>!X||window.customElements.get(t)||window.customElements.define(t,e)},H,yi=0,Lo=t=>{H||(H=Yt("div"),H.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",p(H,"aria-live","assertive")),H.isConnected||document.body.append(H),t&&(H.textContent=`${t}${yi++%2?" ":""}`)},wi=(t,e,o="")=>{var n,i;const s={bubbles:!0,composed:!0,data:e,inputType:o},a=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(n=Object.getOwnPropertyDescriptor(a,"value"))==null?void 0:n.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},jt=!1,Kt=t=>(t?.type==="mouseup"&&(jt=!1),t?.type==="mousedown"&&(jt=!0,G(document,"mouseup",Kt,{once:!0})),jt),Wt="disabled",z="selected",Ei=class extends xo{static get observedAttributes(){return[Wt,z]}connectedCallback(){qt||(this.tabIndex=-1),this.hasAttribute("role")||p(this,"role","option"),this.attributeChangedCallback()}attributeChangedCallback(){p(this,"aria-disabled",`${this.disabled}`),p(this,"aria-selected",`${this.selected}`)}get defaultSelected(){return this[z]}set defaultSelected(t){this[z]=t}get disabled(){return p(this,Wt)!==null}set disabled(t){p(this,Wt,t?"":null)}get form(){return this.closest("form")}get index(){var t;return[...((t=this.parentElement)==null?void 0:t.options)||[this]].indexOf(this)}get label(){var t;return(t=p(this,"label"))!=null?t:this.text}set label(t){p(this,"label",t)}get selected(){return p(this,z)!==null}set selected(t){p(this,z,t?"":null)}get text(){var t;return((t=this.textContent)==null?void 0:t.trim())||""}set text(t){this.textContent=t}get value(){var t;return(t=p(this,"value"))!=null?t:this.text}set value(t){p(this,"value",t)}};Io.define("u-option",Ei);var Ao,Mo=0,$i=qt||bt,Oo="click,focusout,input,keydown,mousedown,mouseup",Po="focus,focusin,blur,focusout",gt={singular:"%d hit",plural:"%d hits"},Do=class extends xo{constructor(){super(),this._texts=hi({},gt),this._value="",_i(this,`${bi}
8
+ ::slotted(data:focus) { ${xn} }`))}static get observedAttributes(){return Object.keys(dt).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=Ln(this),at(this,_e,this,!0),Ct(this,{attributeFilter:["value","id"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(ft,0,this),setTimeout(pt,0,this)}attributeChangedCallback(t,e,o){const n=t.split("data-sr-")[1];dt[n]&&(this._texts[n]=o||dt[n])}disconnectedCallback(){Ct(this,!1),kn(this,_e,this,!0),this._items=this._clear=this._focus=this._control=void 0,this._list=this._options=this._root=void 0}handleEvent(t){const e=t.target;t.type==="beforeinput"&&(this._value=e?.value||""),t.type==="blur"&&Rn(this),t.type==="click"&&Un(this,t),t.type==="focus"&&Hn(this,t),t.type==="input"&&jn(this,t),t.type==="keydown"&&qn(this,t),t.type==="mousedown"&&Lt(t),t.type==="mutation"&&ft(this,t)}get multiple(){var t;return((t=f(this,"data-multiple"))!=null?t:ct)!==ct}set multiple(t){f(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=f(this,"data-creatable"))!=null?t:ct)!==ct}set creatable(t){f(this,"data-creatable",t?"":null)}get control(){var t;return(t=this._control)!=null&&t.isConnected||(this._control=this.querySelector("input")),this._control}get list(){var t;return(t=this._list)!=null&&t.isConnected||(this._list=this.querySelector("u-datalist,datalist")),this._list}get clear(){var t;return(t=this._clear)!=null&&t.isConnected||(this._clear=this.querySelector("del")),this._clear}get items(){return this._items||(this._items=this.getElementsByTagName("data")),this._items}get options(){var t,e;if(!this._options){const o=((t=this.list)==null?void 0:t.nodeName)==="U-DATALIST"?"u-option":"option";this._options=(e=this.list)==null?void 0:e.getElementsByTagName(o)}return this._options}get values(){return[...this.items].map(({value:t})=>t)}},O=t=>{var e;return((e=t?.textContent)==null?void 0:e.trim())||""},At=t=>t instanceof HTMLDataElement,ft=(t,e)=>{var o,n;const{_focus:i,_texts:s,items:a,control:r,list:d,multiple:l}=t;let h=`${O((o=r?.labels)==null?void 0:o[0])}, ${l?a.length?s.found.replace("%d",`${a.length}`):s.empty:""}`;const u=[];for(const{addedNodes:_,removedNodes:I}of e?.detail||[]){for(const m of _)At(m)&&u.unshift(m);for(const m of I)At(m)&&u.push(m)}const T=l?u.length===1:u[0]===i;if(i&&r&&T){const _=f(r,"inputmode"),I=At(i)?r:i;t._speak=`${s[u[0].isConnected?"added":"removed"]} ${O(u[0])}, `,(Nn||i===r)&&kt(t._speak),r!==I&&(f(r,"aria-expanded",null),f(r,"inputmode","none"),h=" ",r.focus()),setTimeout(()=>{var m;f(r,"aria-expanded","true"),f(r,"inputmode",_),(m=I?.focus)==null||m.call(I),t._speak="",Dn?at(t,"blur",()=>ft(t),ge):setTimeout(ft,100,t)},100)}let w=0;const k=t.querySelector("select");for(const _ of a){const I=k?.options[w],m=O(_),A=_.value||m,ee=`${t._speak}${m}, ${s.remove}, ${++w} ${s.of} ${a.length}`;f(_,"role","button"),f(_,"value",A),f(_,"tabindex","-1"),f(_,"aria-label",ee),I?Object.assign(I,{textContent:m,value:A}):k?.appendChild(new Option(m,A,!0,!0))}k&&f(k,"multiple",l?"":null);for(const _ of[...k?.options||[]].slice(w))_.remove();!l&&w>1&&console.warn("u-combobox: Multiple <data> found in single mode."),d&&f(d,"aria-multiselectable",`${l}`),r&&f(r,"list",Mn(d)),r&&f(r,"aria-label",`${t._speak}${h}`);const J=O(a[0]);J!==t._item&&pt(t),t._item=J,ye(t),we(t),(n=Ct(t))==null||n.takeRecords()},ye=t=>{var e;t.clear&&f(t.clear,"role","button"),t.clear&&(t.clear.hidden=!((e=t.control)!=null&&e.value))},we=t=>{var e;const{_speak:o,options:n=[],values:i}=t;for(const s of n){const a=(e=f(s,"value"))!=null?e:O(s);f(s,"aria-label",o?`${o}${O(s)}`:null),f(s,"selected",i.includes(a)?"":null)}},pt=t=>{const{multiple:e,control:o,items:n}=t,i=O(n[0]);!e&&o&&i!==o.value&&ve(o,i,i?"insertText":"deleteContent")},Mt=(t,e=!0)=>{var o;const{_texts:n,options:i=[],creatable:s,control:a,items:r,multiple:d}=t,l=((o=a?.value)==null?void 0:o.trim())||"",h=l.toLowerCase()||null;let u=[...i].find(w=>(f(w,"label")||O(w)).trim().toLowerCase()===h);const T={bubbles:!0,cancelable:!0,detail:u};if(t.dispatchEvent(new CustomEvent("beforematch",T))||(u=[...i].find(w=>w.selected)),e)return we(t),u?j(t,u,!1):s&&l?j(t,{value:l},!1):(!d&&!l&&r[0]?j(t,r[0]):pt(t),kt(n.invalid));for(const w of i)w.selected=w===u},j=(t,e,o=!0)=>{const{control:n,items:i,multiple:s}=t,a=lt("data",e.label||e.value,{value:e.value}),r=[...i].find(h=>h.value===e.value),d={bubbles:!0,cancelable:!0,detail:r||a};if(r&&!o)return pt(t);if(t.dispatchEvent(new CustomEvent("beforechange",d))){if(!s)for(const h of[...i])h.remove();r?r.remove():n?.insertAdjacentElement("beforebegin",a),t.dispatchEvent(new CustomEvent("afterchange",d))}},Hn=(t,{target:e})=>{e instanceof HTMLElement&&(t._focus=e),kt()},Rn=t=>Lt()||setTimeout(Bn,0,t),Bn=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(t.multiple||Mt(t),t._focus=void 0)},Un=(t,e)=>{const{clientX:o,clientY:n,target:i}=e,{clear:s,control:a,items:r}=t;if(s?.contains(i))return a&&ve(a,"","deleteContentBackward"),a?.focus();for(const d of r){const{top:l,right:h,bottom:u,left:T}=d.getBoundingClientRect();if(d.contains(i))return j(t,d);if(n>=l&&n<=u&&o>=T&&o<=h)return d.focus()}i===t&&a?.focus()},jn=(t,e)=>{var o;const{options:n=[],control:i,multiple:s}=t,a=((o=i?.value)==null?void 0:o.trim())||"";if(e instanceof InputEvent?!e.inputType||e.inputType==="insertReplacementText":!!a){e.stopImmediatePropagation(),i&&(i.value=t._value);for(const d of n)if(d.value&&d.value===a)return j(t,d,s)}else s||Mt(t,!1);ye(t)},qn=(t,e)=>{var o;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;const{clear:n,control:i,items:s}=t,{key:a,repeat:r,target:d}=e,l=i&&i===d,h=l&&i?.selectionEnd;let u=l?s.length:[...s].indexOf(d);if(l&&a==="Tab"&&n&&!n.hidden&&(e.preventDefault(),n.tabIndex=-1,n.focus(),at(n,"blur",()=>f(n,"tabindex",null),ge)),!(!l&&In(e)||u===-1)){if(a==="ArrowRight"&&!l)u+=1;else if(a==="ArrowLeft"&&!h)u-=1;else if(a==="Enter"&&l){const T=f(i,"form");return f(i,"form","#"),requestAnimationFrame(()=>f(i,"form",T)),Mt(t)}else if((a==="Backspace"||a==="Delete")&&!h){if(e.preventDefault(),!r&&s[u])return j(t,s[u]);l&&(u-=1)}else return l||i?.focus();e.preventDefault(),(o=s[Math.max(0,u)]||i)==null||o.focus()}};On.define("u-combobox",ut);const Fn="1.3.10",E={capture:!0,passive:!0},K=typeof window<"u"&&typeof document<"u";function Vn(t,e){let o;return(...n)=>{clearTimeout(o),o=setTimeout(()=>t(...n),e)}}function c(t,e,o){return o===void 0?t.getAttribute(e)??null:(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}let Yn=0;const Kn=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function Ot(t){return t.id||(t.id=`${Kn}${++Yn}`),t.id}const Wn=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,e[`${t}EventListener`](...o)},b=(t,...e)=>Wn("add",t,e),W=K?document.createElement("div"):null,ht=new Map,Xn=()=>{for(const[t,e]of ht)e()};W&&(W.style.cssText="position:absolute;padding:1px;top:0;left:0px",b(window,"load,resize,scroll",Xn,E));const q={top:0,right:1,bottom:2,left:3};function P(t,e,o,n){const i=q[o]??Number(o)??q.bottom;if(e===!1||!e.isConnected||!t.isConnected)return ht.delete(t);W?.isConnected||document.body.append(W||""),ht.has(t)||ht.set(t,()=>P(t,e,i,n));const s=e instanceof HTMLElement,{offsetWidth:a,offsetHeight:r}=t,d=s?e.offsetWidth:e.clientWidth,l=s?e.offsetHeight:e.clientHeight,{width:h,height:u,left:T,top:w}=e.getBoundingClientRect(),k=window.visualViewport?.width||window.innerWidth,J=window.visualViewport?.height||window.innerHeight,_=window.pageXOffset||document.documentElement.scrollLeft,I=window.pageYOffset||document.documentElement.scrollTop,m=Math.round(T-(d-h)/2),A=Math.round(w-(l-u)/2),ee=Math.min(Math.max(10,m-(a-d)/2),k-a-10),as=Math.min(Math.max(10,A-(r-l)/2),J-r-10),rs=m-a>0,ls=m+d+a<k,cs=A-r>0,ds=A+l+r<J,un=i===q.top||i===q.bottom,us=i===q.right&&(n||ls)||!rs,fn=i===q.bottom&&(n||ds)||!cs,fs=Math.round(un?ee:us?m+d:m-a),ps=Math.round(un?fn?A+l:A-r:as);t.style.position="absolute",t.style.left=`${fs+_}px`,t.style.top=`${ps+I}px`,W?.style.setProperty("translate",`0px ${Math.round(fn?_+A+l+r+30:0)}px`)}function Ee(t){let e=0;const o=()=>setTimeout(n,200),n=()=>{t([],i),i.takeRecords(),e=0},i=new MutationObserver(()=>{e||(e=requestAnimationFrame(o))});return i}const Pt=new WeakMap,F=(t,e,o)=>{const n=t.getElementsByClassName(e),i=Pt.get(t)||[];i.length||(Pt.set(t,i),Ee((s,a)=>{if(t.isConnected&&i?.length)for(const r of i)r();else a?.disconnect(),Pt.delete(t)}).observe(t,{attributeFilter:["class","hidden"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>o(n))},x=t=>{if(!K)return;const e=()=>requestAnimationFrame(t);document.readyState==="complete"?e():b(window,"load",e)},Dt=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),$e="mattilsynet.matomo.cloud";let Nt=!0;function Gn(t,e={}){if(K){if(window._paq||(window._paq=[],window._paq.push(["HeatmapSessionRecording::disable"]),window._paq.push(["enableLinkTracking"]),window._paq.push(["setTrackerUrl",`https://${$e}/matomo.php`]),document.querySelector('script[src*="matomo.js"]')||document.head.append(Object.assign(document.createElement("script"),{async:!0,src:`https://cdn.matomo.cloud/${$e}/matomo.js`}))),t==="init"){const{matomoId:o,enabled:n=!0}=e;Nt=n,window._paq.push(["setSiteId",o])}if(Nt==="debug")return console.info(`Analytics: "${t}"`,e);if(!(Nt===!1||window.location.hostname==="localhost"))if(t==="pageview"){const{url:o,title:n}=e;window._paq.push(["setCustomUrl",o||location.href]),window._paq.push(["setDocumentTitle",n||document.title]),window._paq.push(["trackPageView"])}else if(t==="event"){const{category:o,action:n,name:i,value:s}=e,a=["trackEvent",o,n,i,s];window._paq.push(a.filter(r=>r!==void 0))}else if(t==="search"){const{query:o,category:n=!1,results:i=!1}=e;window._paq.push(["trackSiteSearch",o,n,i])}else t==="matomo"&&window._paq.push(e)}}const zn=(t,e,o=Number.POSITIVE_INFINITY)=>{const n=(o-1)/2,i=Math.max(Math.min(t-Math.floor(n),e-o+1),1),s=Math.min(Math.max(t+Math.ceil(n),o),e),a=Array.from({length:s+1-i},(r,d)=>d+i);return o>4&&i>1&&a.splice(0,2,1,0),o>3&&s<e&&a.splice(-2,2,0,e),a},Qn=({current:t=1,total:e=10,show:o=7})=>({prev:t>1?t-1:0,next:t<e?t+1:0,pages:zn(t,e,o).map((n,i)=>({current:n===t&&"page",key:`key-${n}-${i}`,page:n}))}),Se="_alert_1bf95_1 _ds-alert_1frj0_1",Te="_app_1bf95_1",xe="_sticky_1bf95_1",Ce="_avatar_1bf95_1 _ds-avatar_1frj0_1",ke="_badge_1bf95_1",Ie="_breadcrumbs_1bf95_1 _ds-breadcrumbs_1frj0_1",Le="_button_1bf95_1 _ds-button_1frj0_1",Ae="_card_1bf95_1",Me="_group_1bf95_1",Oe="_chip_1bf95_1 _ds-chip_1frj0_1",Pe="_details_1bf95_1 _ds-details_1frj0_1",De="_dialog_1bf95_1 _ds-dialog_1frj0_1",Ne="_divider_1bf95_1",He="_errorsummary_1bf95_1 _ds-error-summary_1frj0_1",Re="__errorsummary_1bf95_1",Be="_field_1bf95_1 _ds-field_1frj0_1",Ue="__datalist_1bf95_1",je="_affixes_1bf95_1 _ds-field-affixes_1frj0_1",qe="_fieldset_1bf95_1 _ds-fieldset_1frj0_1",Fe="_heading_1bf95_1 _ds-heading_1frj0_1",Ve="_ingress_1bf95_1",Ye="_muted_1bf95_1",Ke="_info_1bf95_1",We="_prose_1bf95_1",Xe="_helptext_1bf95_1 _ds-focus_1frj0_1",Ge="_input_1bf95_1 _ds-input_1frj0_1",ze="_grid_1bf95_1",Qe="_flex_1bf95_1",Je="_link_1bf95_1",Ze="_logo_1bf95_1",to="_pagination_1bf95_1 _ds-pagination_1frj0_1",eo="_popover_1bf95_1",oo="_progress_1bf95_1",no="__indeterminate_1bf95_1",io="_skeleton_1bf95_1 _ds-skeleton_1frj0_1",so="__skeleton_1bf95_1",ao="_spinner_1bf95_1",ro="_steps_1bf95_1",lo="_table_1bf95_1 _ds-table_1frj0_1",co="__scrollShadow_1bf95_1",uo="_tabs_1bf95_1 _ds-tabs_1frj0_1",fo="__scrollMask_1bf95_1",po="_tag_1bf95_1 _ds-tag_1frj0_1",ho="_togglegroup_1bf95_1",mo="__tooltip_1bf95_1",bo="_validation_1bf95_1 _ds-validation-message_1frj0_1",vo="_body_1bf95_153",_o="__checked_1bf95_1",v={alert:Se,app:Te,sticky:xe,avatar:Ce,badge:ke,breadcrumbs:Ie,button:Le,card:Ae,group:Me,chip:Oe,details:Pe,dialog:De,divider:Ne,errorsummary:He,_errorsummary:Re,field:Be,_datalist:Ue,affixes:je,fieldset:qe,heading:Fe,ingress:Ve,muted:Ye,info:Ke,prose:We,helptext:Xe,input:Ge,grid:ze,flex:Qe,link:Je,logo:Ze,pagination:to,popover:eo,progress:oo,_indeterminate:no,skeleton:io,_skeleton:so,spinner:ao,steps:ro,table:lo,_scrollShadow:co,tabs:uo,_scrollMask:fo,tag:po,togglegroup:ho,_tooltip:mo,validation:bo,body:vo,_checked:_o},Jn=Object.freeze(Object.defineProperty({__proto__:null,_checked:_o,_datalist:Ue,_errorsummary:Re,_indeterminate:no,_scrollMask:fo,_scrollShadow:co,_skeleton:so,_tooltip:mo,affixes:je,alert:Se,app:Te,avatar:Ce,badge:ke,body:vo,breadcrumbs:Ie,button:Le,card:Ae,chip:Oe,default:v,details:Pe,dialog:De,divider:Ne,errorsummary:He,field:Be,fieldset:qe,flex:Qe,grid:ze,group:Me,heading:Fe,helptext:Xe,info:Ke,ingress:Ve,input:Ge,link:Je,logo:Ze,muted:Ye,pagination:to,popover:eo,progress:oo,prose:We,skeleton:io,spinner:ao,steps:ro,sticky:xe,table:lo,tabs:uo,tag:po,togglegroup:ho,validation:bo},Symbol.toStringTag,{value:"Module"}));typeof window<"u"&&window.CSSStyleSheet&&document.adoptedStyleSheets&&(()=>{const t="--mtds-app-expanded",e=new CSSStyleSheet,o=()=>!window.localStorage.getItem(t)?.includes("false");document.adoptedStyleSheets.push(e),window.mtdsToggleAppExpanded=n=>{try{const i=n??!o();e.replaceSync?.(`:root { ${t}: var(${t}--${i})}`),window.localStorage.setItem(t,i)}catch{}},window.mtdsToggleAppExpanded(o())})();const go=v.app.split(" ")[0],Zn=v.sticky.split(" ")[0],ti='[data-command="toggle-app-expanded"]',yo=`.${go} > dialog,.${go} dialog ~ main`,wo=t=>{document.startViewTransition?document.startViewTransition(t):t()},Eo=t=>wo(()=>window.mtdsToggleAppExpanded?.(t));function ei({target:t,defaultPrevented:e}){if(!(e||!(t instanceof HTMLButtonElement)||!t.matches(ti))){if(getComputedStyle(t).position==="sticky")return Eo();wo(()=>{const o=document.querySelector(yo);o?.setAttribute("data-closedby","any"),o?.showModal()})}}function oi(){document.querySelector(yo)?.close()}let Ht=0,V,M=0,g,Rt=0,mt=0,Bt=!1,Ut=0,N=0;function ni([t]){g=t,$o()}function $o(){if(!g?.isConnected)return;const t=window.scrollY,e=t<N;N=t,e!==V&&(Ht=(g.parentElement?.getBoundingClientRect().top||0)+N,V=e,Rt=g.offsetHeight,mt=g.getBoundingClientRect().top+N,Bt=g.offsetHeight<=window.innerHeight,Ut=window.innerHeight),!(M===-1&&Bt)&&(M!==-1&&(Bt||V&&N<=mt)?(g.style.setProperty("--pos","sticky"),g.style.setProperty("--top","0px"),M=-1):M===-1&&!V?(g.style.setProperty("--pos","relative"),g.style.setProperty("--top",`${Math.max(0,N-Ht)}px`),M=0):M!==1&&!V&&N+Ut>=mt+Rt?(g.style.setProperty("--pos","sticky"),g.style.setProperty("--top",`${Ut-Rt}px`),M=1):M===1&&V&&(g.style.setProperty("--pos","relative"),g.style.setProperty("--top",`${mt-Ht}px`),M=0))}x(()=>{F(document.documentElement,Zn,ni),b(document,"click",ei,E),b(window,"resize",Vn(oi,100),E),b(window,"scroll",$o,E)});const ii=v.breadcrumbs.split(" ")[0];function si(t){for(const e of t)e.querySelectorAll("li a").forEach((o,n,{length:i})=>{c(o,"aria-current",n===i-1?"page":null)})}x(()=>F(document.documentElement,ii,si));const ai=v.dialog.split(" ")[0],ri=K?document.getElementsByClassName(ai):[],li=()=>{for(const t of ri)t.isConnected&&t.showModal&&t.close&&(t.matches('[open]:not([data-modal="false"]):not(:modal)')?(c(t,"open",null),t.showModal()):t.matches(":modal:not([open])")&&(c(t,"open",""),t.close()))},ci=({clientX:t,clientY:e,target:o})=>{if(o instanceof HTMLDialogElement&&c(o,"data-closedby")==="any"){const{top:n,right:i,bottom:s,left:a}=o.getBoundingClientRect();n<=e&&e<=s&&a<=t&&t<=i||o.close()}else o instanceof Element&&o.closest('button[data-command="close"]')&&o?.closest("dialog")?.close()};x(()=>{b(document,"click",ci,E),Ee(li).observe(document.documentElement,{attributeFilter:["open"],attributes:!0,childList:!0,subtree:!0})});function di(t){if(t.animationName!==v._errorsummary)return;const e=t.target?.firstElementChild;e instanceof HTMLHeadingElement&&(c(e,"tabindex","-1"),e.focus())}x(()=>b(document,"animationend",di,E));var ui=Object.defineProperty,So=Object.getOwnPropertySymbols,fi=Object.prototype.hasOwnProperty,pi=Object.prototype.propertyIsEnumerable,To=(t,e,o)=>e in t?ui(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,hi=(t,e)=>{for(var o in e||(e={}))fi.call(e,o)&&To(t,o,e[o]);if(So)for(var o of So(e))pi.call(e,o)&&To(t,o,e[o]);return t},X=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",bt=X&&/android/i.test(navigator.userAgent),jt=X&&/iPad|iPhone|iPod/.test(navigator.userAgent),xo;X&&/^Mac/i.test(((xo=navigator.userAgentData)==null?void 0:xo.platform)||navigator.platform);var mi=`${bt?"data":"aria"}-labelledby`,bi=":host(:not([hidden])) { display: block }",vi="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",Co=typeof HTMLElement>"u"?class{}:HTMLElement;function p(t,e,o){return o===void 0?t.getAttribute(e):(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}var ko=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},G=(t,...e)=>ko("add",t,e),vt=(t,...e)=>ko("remove",t,e),_i=(t,e)=>t.attachShadow({mode:"open"}).append(Vt("slot"),Vt("style",e)),_t=new WeakMap,qt=(t,e)=>{if(e===void 0)return _t.get(t);try{_t.get(t).disconnect(),_t.delete(t)}catch{}if(e){const o=new MutationObserver(n=>t.handleEvent({type:"mutation",detail:n}));o.observe(t,e),_t.set(t,o)}},Io=t=>{var e;const o=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return o instanceof Document||o instanceof ShadowRoot?o:document},gi=0,Ft=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++gi).toString(32)}`),t.id):"",Vt=(t,e,o)=>{const n=document.createElement(t);return e&&(n.textContent=e),n},Lo={define:(t,e)=>!X||window.customElements.get(t)||window.customElements.define(t,e)},H,yi=0,Ao=t=>{H||(H=Vt("div"),H.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",p(H,"aria-live","assertive")),H.isConnected||document.body.append(H),t&&(H.textContent=`${t}${yi++%2?" ":""}`)},wi=(t,e,o="")=>{var n,i;const s={bubbles:!0,composed:!0,data:e,inputType:o},a=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(n=Object.getOwnPropertyDescriptor(a,"value"))==null?void 0:n.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},Yt=!1,Kt=t=>(t?.type==="mouseup"&&(Yt=!1),t?.type==="mousedown"&&(Yt=!0,G(document,"mouseup",Kt,{once:!0})),Yt),Wt="disabled",z="selected",Ei=class extends Co{static get observedAttributes(){return[Wt,z]}connectedCallback(){jt||(this.tabIndex=-1),this.hasAttribute("role")||p(this,"role","option"),this.attributeChangedCallback()}attributeChangedCallback(){p(this,"aria-disabled",`${this.disabled}`),p(this,"aria-selected",`${this.selected}`)}get defaultSelected(){return this[z]}set defaultSelected(t){this[z]=t}get disabled(){return p(this,Wt)!==null}set disabled(t){p(this,Wt,t?"":null)}get form(){return this.closest("form")}get index(){var t;return[...((t=this.parentElement)==null?void 0:t.options)||[this]].indexOf(this)}get label(){var t;return(t=p(this,"label"))!=null?t:this.text}set label(t){p(this,"label",t)}get selected(){return p(this,z)!==null}set selected(t){p(this,z,t?"":null)}get text(){var t;return((t=this.textContent)==null?void 0:t.trim())||""}set text(t){this.textContent=t}get value(){var t;return(t=p(this,"value"))!=null?t:this.text}set value(t){p(this,"value",t)}};Lo.define("u-option",Ei);var Mo,Oo=0,$i=jt||bt,Po="click,focusout,input,keydown,mousedown,mouseup",Do="focus,focusin,blur,focusout",gt={singular:"%d hit",plural:"%d hits"},No=class extends Co{constructor(){super(),this._texts=hi({},gt),this._value="",_i(this,`${bi}
9
9
  ::slotted(u-option) { display: block; cursor: pointer }
10
10
  ::slotted(u-option:focus) { ${vi} }
11
11
  ::slotted(u-option[aria-hidden="true"]),
12
12
  ::slotted(u-option[disabled]),
13
- ::slotted(u-option[hidden]) { display: none !important }`)}static get observedAttributes(){return["id",...Object.keys(gt).map(t=>`data-sr-${t}`)]}connectedCallback(){this.hidden=!0,this._root=ko(this),p(this,"role","listbox"),p(this,"tabindex","-1"),G(this._root,"focusin",this),G(this._root,"focus",this,!0),Ft(this,{attributeFilter:["disabled","hidden","label","value"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){vt(this._root||this,"focus",this,!0),vt(this._root||this,"focusin",this),Ft(this,!1),Xt(this),this._root=void 0}attributeChangedCallback(t,e,o){const n=t?.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(gt[n])this._texts[n]=o||gt[n];else if(this._root)for(const s of this._root.querySelectorAll(i))No(this,s)}handleEvent(t){const{target:e,type:o}=t;t.defaultPrevented||(o==="click"&&xi(this,t),(o==="focus"||o==="focusin")&&Si(this,t),(o==="blur"||o==="focusout")&&Ti(this,t),o==="keydown"&&Ci(this,t),o==="mousedown"&&this.contains(e)&&Kt(t),(o==="mutation"||o==="input")&&(clearTimeout(Mo),Mo=setTimeout(Ro,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},Q=(t,e)=>{var o,n;t.hidden===e&&(t.hidden=!e,(o=Ft(t))==null||o.takeRecords(),t._input&&No(t,t._input,e),t.popover&&((n=t._input)!=null&&n.isConnected)&&(p(t._input,"popovertarget",Vt(t)),p(t,"popover","manual"),t.togglePopover(e)),e&&Ro(t))},Xt=t=>{t._input&&(vt(t._input||t,Po,t),vt(t._root||t,Oo,t),Q(t,!1),t._input=void 0)},No=(t,e,o=!1)=>{G(e,Po,t,!0),p(e,"aria-autocomplete","list"),p(e,"aria-controls",Vt(t)),p(e,"aria-expanded",`${$i?o:"true"}`),p(e,"autocomplete","off"),p(e,"role","combobox")},Si=(t,e)=>{var o;const n=e.target instanceof HTMLInputElement;n&&e.isTrusted&&e.stopImmediatePropagation(),t._input!==e.target&&n&&e.target.list===t&&(t._input&&Xt(t),t._input=e.target,t._input.dispatchEvent(new FocusEvent("focus")),t._input.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),p(t,mi,Vt((o=t._input.labels)==null?void 0:o[0])),G(t._root||t,Oo,t),Q(t,!0),Lo())},Ti=(t,e)=>{!bt&&!Kt()&&t._input&&setTimeout(Ho,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},Ho=t=>{var e;const o=((e=t._root)==null?void 0:e.activeElement)||null,n=t._input;n&&n!==o&&!t.contains(o)&&(n.dispatchEvent(new FocusEvent("blur",{relatedTarget:o})),n.dispatchEvent(new FocusEvent("focusout",{bubbles:!0,relatedTarget:o})),Xt(t))},xi=(t,{target:e})=>{var o;if(!t._input||t._input===e)return Q(t,!0);for(const n of t.options)if(n.contains(e))return p(t,"aria-multiselectable")!=="true"&&((o=t._input)==null||o.focus(),Q(t,!1)),wi(t._input,n.value);bt&&Ho(t)},Ci=(t,e)=>{var o;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey||e.key==="Tab")return;Q(t,e.key!=="Escape");const{key:n,target:i}=e,s=[...t.options].filter(d=>p(d,"aria-hidden")!=="true"&&d.offsetHeight),a=s.indexOf(i);let r=-1;if(n==="ArrowDown"&&(r=(a+1)%s.length),n==="ArrowUp"&&(r=(~a?a:s.length)-1),~a&&((n==="Home"||n==="PageUp")&&(r=0),(n==="End"||n==="PageDown")&&(r=s.length-1),n==="Enter"))return s[a].click(),e.preventDefault();if(s[r])for(const d of s)d.tabIndex=-1;s[r]&&e.preventDefault(),(o=s[r]||t._input)==null||o.focus()},Ro=(t,e)=>{const{_texts:o,_root:n,_input:i,options:s}=t,a=i?.value.toLowerCase().trim()||"",r=!t.hasAttribute("data-nofilter"),d=[],l=[];for(const u of s)(u.disabled||u.hidden||r&&!u.label.toLowerCase().includes(a)?d:l).push(u);for(const u of d)p(u,"aria-hidden","true");for(const u of l)p(u,"aria-hidden","false");const h=l.length;clearTimeout(Ao),e?.type==="input"&&a!==t._value&&(Ao=setTimeout(()=>{const u=`${!h&&t.innerText.trim()||`${o[h===1?"singular":"plural"]}`.replace("%d",`${h}`)}`;!t.hidden&&n?.activeElement===i&&Lo(u),t._value=a},1e3)),qt&&l.forEach((u,T)=>p(u,"title",`${T+1}/${h}`))};X&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return ko(this).getElementById(p(this,"list")||"")}}),Io.define("u-datalist",Do);const Gt=v.field.split(" ")[0],Bo=v.validation.split(" "),ki=Bo[0],C=(t,e)=>t.getPropertyValue(`--mtds-text-${e}`)?.slice(1,-1)||"";function Uo(t,e){for(const o of t)if(o.isConnected){const n=[],i=[],s=[];let a=null,r=null,d=!0;for(const l of o.getElementsByTagName("*"))l instanceof HTMLLabelElement?n.push(l):l instanceof ut?a=l:Dt(l)&&!l.hidden?r=l:l.hasAttribute("data-description")?i.push(l):l.classList.contains(ki)?(d=c(l,"data-color")==="success"||!l.clientHeight,s.push(l),i.unshift(l)):l instanceof HTMLParagraphElement&&(i.some(h=>h.contains(l))||i.push(l));if(r){for(const l of n)l.htmlFor=Ot(r);if(e&&c(o,"data-validation")==="form"){d=r.matches(":valid");for(const l of s)c(l,"hidden",d?"":null)}Ii(a),Fo(r),qo(r),c(r,"aria-describedby",i.map(Ot).join(" ")||null),c(r,"aria-invalid",`${!d}`)}}}function qo(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function Ii(t){if(!t?.list||t.list?.hasAttribute("popover"))return;const e=window.getComputedStyle(t);c(t,"data-sr-added",C(e,"combobox-added")),c(t,"data-sr-empty",C(e,"combobox-empty")),c(t,"data-sr-found",C(e,"combobox-found")),c(t,"data-sr-invalid",C(e,"combobox-invalid")),c(t,"data-sr-of",C(e,"combobox-of")),c(t,"data-sr-remove",C(e,"combobox-remove")),c(t,"data-sr-removed",C(e,"combobox-removed")),c(t.list,"data-sr-plural",C(e,"datalist-plural")),c(t.list,"data-sr-singular",C(e,"datalist-singular")),c(t.list,"popover","manual")}function Fo(t){const e=t?.nextElementSibling,o=e&&c(e,"data-count");if(e&&o){const n=Number(o)-t.value.length,i=n<0,s=c(e,"aria-live")==="polite",a=window.getComputedStyle(e||t),r=C(a,"count-over"),d=C(a,"count-under");if(s!==i){c(e,"aria-live",i?"polite":"off");for(const l of Bo)e.classList.toggle(l,i)}e.textContent=(i?r:d).replace("%d",`${Math.abs(n)}`)}}function Li({target:t,newState:e}){if(t instanceof Do){const n=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?P(t,!1):n&&(t.style.width=`${n.clientWidth}px`,P(t,n,c(t,"data-position")??"bottom",!0))}}function Ai({target:t}){Dt(t)&&(Fo(t),qo(t))}function Mi(t){const e=t.target?.closest?.(`.${Gt}`);t.type==="invalid"&&e&&t.preventDefault(),Uo(document.getElementsByClassName(Gt),!0)}function Oi({target:t}){const e=t instanceof ut&&t.list;e&&!e?.hidden&&setTimeout(()=>P(e,t,2,!0),10)}x(()=>{V(document.documentElement,Gt,Uo),b(document,"beforechange",Oi,E),b(document,"input",Ai,E),b(document,"invalid,submit",Mi,!0),b(document,"toggle",Li,E)});const Pi=v.fieldset.split(" ")[0],Di=v.validation.split(" ")[0],Vo="aria-describedby",Ni="aria-invalid";function Hi(t){requestAnimationFrame(()=>{for(const e of t)if(e.isConnected){const o=[];let n=null,i=!0;for(const s of e.getElementsByTagName("*"))s.classList.contains(Di)?(i=c(s,"data-color")==="success"||!s.clientHeight,n=Ot(s)):Dt(s)&&o.push(s);for(const s of o){const a=c(s,Vo)?.replace(n||"#","");c(s,Vo,`${n||""} ${a||""}`.trim()),c(s,Ni,`${!i}`)}}})}x(()=>V(document.documentElement,Pi,Hi));const Ri=v.logo.split(" ")[0];function Bi([t]){if(t?.isConnected&&t?.firstElementChild instanceof SVGSVGElement){for(const r of document.head.querySelectorAll("link[rel~='icon']"))r.setAttribute("rel","disabled");const e=t.firstElementChild,o=t?.hasAttribute("data-env"),n=window.getComputedStyle(e),i=n.getPropertyValue("color"),s=n.getPropertyValue("--mtds-logo-color"),a=e.outerHTML.replace(/\n+/g," ").replace(/(fill|width|height|xmlns)="[^"]+"/gi,"").replace("<svg",`<svg width="40" height="40" fill="${i}"`);document.head.appendChild(Object.assign(document.createElement("link"),{href:`data:image/svg+xml,${encodeURIComponent(`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 55 55'><rect fill='${o?"none":s}' width='51' height='51' x='2' y='2' stroke='${i}' stroke-dasharray='0.09 6.38' stroke-linecap='round' stroke-opacity='${o?.6:0}' stroke-width='2.3' rx='25.5'/><g transform="translate(7.5 7.5)">${a}</g></svg>`)}`,rel:"icon"}))}}x(()=>V(document.documentElement,Ri,Bi));const Yo=v.popover.split(" ")[0];let zt=0;function Ui({target:t,newState:e}){if(t instanceof HTMLElement&&t.classList.contains(Yo)){const o=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?(zt-=1,P(t,!1)):o&&(zt+=1,P(t,o,c(t,"data-position")||"bottom"))}}function qi({target:t}){const e=zt&&t?.closest?.("a,[popovertargetaction]");if(e){const o=c(e,"popovertargetaction")||"toggle",n=o==="show"||(o==="hide"?!1:void 0),s=(document.getElementById(c(e,"popovertarget")||"")||e).closest(`.${Yo}`);s?.isConnected&&s?.togglePopover&&s.togglePopover(n)}}x(()=>{b(document,"toggle",Ui,E),b(document,"click",qi)});const Fi=v.table.split(" ")[0];function Vi(t){for(const e of t){const o=[];c(e,"role","table"),e.caption&&c(e.caption,"role","caption");for(const n of[e.tHead,e.tFoot,...e.tBodies])if(n){c(n,"role","rowgroup");const i=n.nodeName==="TBODY";for(const s of n.rows){c(s,"role","row");for(const a of s.cells)i?c(a,"data-th",o[a.cellIndex]||":empty"):o.push(a.innerText.trim()),a.nodeName==="TD"?c(a,"role","cell"):(c(a,"role",i?"rowheader":"columnheader"),c(a,"scope",i?"row":"col"))}}}}x(()=>V(document.documentElement,Fi,Vi));const Yi=`.${v.togglegroup.split(" ")[0]}`;function ji(t){const{key:e,target:o}=t,n=o instanceof HTMLInputElement&&o.closest(Yi);if(n&&(e==="Enter"&&o.click(),e?.startsWith("Arrow"))){t.preventDefault();const i=n.getElementsByTagName("input"),s=[...i].indexOf(o),a=e.match(/Arrow(Right|Down)/)?1:-1;i[(i.length+s+a)%i.length]?.focus()}}x(()=>b(document,"keydown",ji));const jo="aria-describedby",Ko="Escape",yt="aria-labelledby",Ki="--mtds-tooltip-position",Wi=300,L=K?Object.assign(document.createElement("div"),{className:v._tooltip,id:"mtds-tooltip",popover:"manual"}):null;let R=null,Wo=Number.NEGATIVE_INFINITY,Xo=0;function Qt({target:t,type:e,key:o}){if(e==="keydown"&&o!==Ko)return;const n=Wo+Wi-Date.now();clearTimeout(Xo),Xo=setTimeout(Xi,Math.max(n,0),o===Ko?null:t)}function Xi(t){if(Wo=Date.now(),!L||t===L)return;L?.isConnected||document.body.append(L);let e=t?.closest?.("[data-tooltip]")||null;if(e===R)return;const o=e&&c(e,"data-tooltip")||"",n=e&&c(e,"data-tooltip-position")||window.getComputedStyle(e||document.body).getPropertyValue(Ki)?.trim()||"top";(!o||o==="false"||o==="true"||n==="none")&&(e=null),e&&(L.textContent=o);const s=R&&c(R,yt)===L?.id,a=(e instanceof HTMLElement?e.innerText:e?.textContent)?.trim()||e?.hasAttribute(yt)||e?.hasAttribute("aria-label");R?.removeAttribute(s?yt:jo),P(L,!1),R=e,R&&c(R,a?jo:yt,L?.id),L.togglePopover(!!e),P(L,e||!1,n)}x(()=>{b(document,"blur,focus,mouseout,mouseover",Qt,E),b(window,"keydown",Qt,E),b(window,"blur",Qt,E)});var Go=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",zo;Go&&/^Mac/i.test(((zo=navigator.userAgentData)==null?void 0:zo.platform)||navigator.platform);var Gi=":host(:not([hidden])) { display: block }",Qo=typeof HTMLElement>"u"?class{}:HTMLElement;function B(t,e,o){var n;return o===void 0?(n=t.getAttribute(e))!=null?n:null:(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}var Jo=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},Zo=(t,...e)=>Jo("add",t,e),tn=(t,...e)=>Jo("remove",t,e),zi=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},Qi=t=>{var e;const o=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return o instanceof Document||o instanceof ShadowRoot?o:document},Jt=(t,e,o)=>{const n=document.createElement(t);if(e&&(n.textContent=e),o)for(const[i,s]of Object.entries(o))B(n,i,s);return n},en={define:(t,e)=>!Go||window.customElements.get(t)||window.customElements.define(t,e)},Ji=class extends Qo{constructor(){super(),this._content=null,this.attachShadow({mode:"open"}).append(Jt("slot",null,{name:"summary"}),Jt("slot",null,{part:"details-content"}),Jt("style",`${Gi}
13
+ ::slotted(u-option[hidden]) { display: none !important }`)}static get observedAttributes(){return["id",...Object.keys(gt).map(t=>`data-sr-${t}`)]}connectedCallback(){this.hidden=!0,this._root=Io(this),p(this,"role","listbox"),p(this,"tabindex","-1"),G(this._root,"focusin",this),G(this._root,"focus",this,!0),qt(this,{attributeFilter:["disabled","hidden","label","value"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){vt(this._root||this,"focus",this,!0),vt(this._root||this,"focusin",this),qt(this,!1),Xt(this),this._root=void 0}attributeChangedCallback(t,e,o){const n=t?.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(gt[n])this._texts[n]=o||gt[n];else if(this._root){this._input&&Gt(this,this._input);for(const s of this._root.querySelectorAll(i))Gt(this,s)}}handleEvent(t){const{target:e,type:o}=t;t.defaultPrevented||(o==="click"&&xi(this,t),(o==="focus"||o==="focusin")&&Si(this,t),(o==="blur"||o==="focusout")&&Ti(this,t),o==="keydown"&&Ci(this,t),o==="mousedown"&&this.contains(e)&&Kt(t),(o==="mutation"||o==="input")&&(clearTimeout(Oo),Oo=setTimeout(Ro,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},Q=(t,e)=>{var o,n;t.hidden===e&&(t.hidden=!e,(o=qt(t))==null||o.takeRecords(),t._input&&Gt(t,t._input,e),t.popover&&((n=t._input)!=null&&n.isConnected)&&(p(t,"popover","manual"),t.togglePopover(e)),e&&Ro(t))},Xt=t=>{t._input&&(vt(t._input||t,Do,t),vt(t._root||t,Po,t),Q(t,!1),t._input=void 0)},Gt=(t,e,o=!1)=>{t.popover&&p(e,"popovertarget",Ft(t)),G(e,Do,t,!0),p(e,"aria-autocomplete","list"),p(e,"aria-controls",Ft(t)),p(e,"aria-expanded",`${$i?o:"true"}`),p(e,"autocomplete","off"),p(e,"role","combobox")},Si=(t,e)=>{var o;const n=e.target instanceof HTMLInputElement;n&&e.isTrusted&&e.stopImmediatePropagation(),t._input!==e.target&&n&&e.target.list===t&&(t._input&&Xt(t),t._input=e.target,t._input.dispatchEvent(new FocusEvent("focus")),t._input.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),p(t,mi,Ft((o=t._input.labels)==null?void 0:o[0])),G(t._root||t,Po,t),Q(t,!0),Ao())},Ti=(t,e)=>{!bt&&!Kt()&&t._input&&setTimeout(Ho,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},Ho=t=>{var e;const o=((e=t._root)==null?void 0:e.activeElement)||null,n=t._input;n&&n!==o&&!t.contains(o)&&(n.dispatchEvent(new FocusEvent("blur",{relatedTarget:o})),n.dispatchEvent(new FocusEvent("focusout",{bubbles:!0,relatedTarget:o})),Xt(t))},xi=(t,{target:e})=>{var o;if(!t._input||t._input===e)return Q(t,!0);for(const n of t.options)if(n.contains(e))return p(t,"aria-multiselectable")!=="true"&&((o=t._input)==null||o.focus(),Q(t,!1)),wi(t._input,n.value);bt&&Ho(t)},Ci=(t,e)=>{var o;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey||e.key==="Tab")return;Q(t,e.key!=="Escape");const{key:n,target:i}=e,s=[...t.options].filter(d=>p(d,"aria-hidden")!=="true"&&d.offsetHeight),a=s.indexOf(i);let r=-1;if(n==="ArrowDown"&&(r=(a+1)%s.length),n==="ArrowUp"&&(r=(~a?a:s.length)-1),~a&&((n==="Home"||n==="PageUp")&&(r=0),(n==="End"||n==="PageDown")&&(r=s.length-1),n==="Enter"))return s[a].click(),e.preventDefault();if(s[r])for(const d of s)d.tabIndex=-1;s[r]&&e.preventDefault(),(o=s[r]||t._input)==null||o.focus()},Ro=(t,e)=>{const{_texts:o,_root:n,_input:i,options:s}=t,a=i?.value.toLowerCase().trim()||"",r=!t.hasAttribute("data-nofilter"),d=[],l=[];for(const u of s)(u.disabled||u.hidden||r&&!u.label.toLowerCase().includes(a)?d:l).push(u);for(const u of d)p(u,"aria-hidden","true");for(const u of l)p(u,"aria-hidden","false");const h=l.length;clearTimeout(Mo),e?.type==="input"&&a!==t._value&&(Mo=setTimeout(()=>{const u=`${!h&&t.innerText.trim()||`${o[h===1?"singular":"plural"]}`.replace("%d",`${h}`)}`;!t.hidden&&n?.activeElement===i&&Ao(u),t._value=a},1e3)),jt&&l.forEach((u,T)=>p(u,"title",`${T+1}/${h}`))};X&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return Io(this).getElementById(p(this,"list")||"")}}),Lo.define("u-datalist",No);const zt=v.field.split(" ")[0],Bo=v.validation.split(" "),ki=Bo[0],C=(t,e)=>t.getPropertyValue(`--mtds-text-${e}`)?.slice(1,-1)||"";function Uo(t,e){for(const o of t)if(o.isConnected){const n=[],i=[],s=[];let a=null,r=null,d=!0;for(const l of o.getElementsByTagName("*"))l instanceof HTMLLabelElement?n.push(l):l instanceof ut?a=l:Dt(l)&&!l.hidden?r=l:l.hasAttribute("data-description")?i.push(l):l.classList.contains(ki)?(d=c(l,"data-color")==="success"||!l.clientHeight,s.push(l),i.unshift(l)):l instanceof HTMLParagraphElement&&(i.some(h=>h.contains(l))||i.push(l));if(r){for(const l of n)l.htmlFor=Ot(r);if(e&&c(o,"data-validation")==="form"){d=r.matches(":valid");for(const l of s)c(l,"hidden",d?"":null)}Ii(a),qo(r),jo(r),c(r,"aria-describedby",i.map(Ot).join(" ")||null),c(r,"aria-invalid",`${!d}`)}}}function jo(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function Ii(t){if(!t?.list||t.list?.hasAttribute("popover"))return;const e=window.getComputedStyle(t);c(t,"data-sr-added",C(e,"combobox-added")),c(t,"data-sr-empty",C(e,"combobox-empty")),c(t,"data-sr-found",C(e,"combobox-found")),c(t,"data-sr-invalid",C(e,"combobox-invalid")),c(t,"data-sr-of",C(e,"combobox-of")),c(t,"data-sr-remove",C(e,"combobox-remove")),c(t,"data-sr-removed",C(e,"combobox-removed")),c(t.list,"data-sr-plural",C(e,"datalist-plural")),c(t.list,"data-sr-singular",C(e,"datalist-singular")),c(t.list,"popover","manual")}function qo(t){const e=t?.nextElementSibling,o=e&&c(e,"data-count");if(e&&o){const n=Number(o)-t.value.length,i=n<0,s=c(e,"aria-live")==="polite",a=window.getComputedStyle(e||t),r=C(a,"count-over"),d=C(a,"count-under");if(s!==i){c(e,"aria-live",i?"polite":"off");for(const l of Bo)e.classList.toggle(l,i)}e.textContent=(i?r:d).replace("%d",`${Math.abs(n)}`)}}function Li({target:t,newState:e}){if(t instanceof No){const n=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?P(t,!1):n&&(t.style.width=`${n.clientWidth}px`,P(t,n,c(t,"data-position")??"bottom",!0))}}function Ai({target:t}){Dt(t)&&(qo(t),jo(t))}function Mi(t){const e=t.target?.closest?.(`.${zt}`);t.type==="invalid"&&e&&t.preventDefault(),Uo(document.getElementsByClassName(zt),!0)}function Oi({target:t}){const e=t instanceof ut&&t.list;e&&!e?.hidden&&setTimeout(()=>P(e,t,2,!0),10)}x(()=>{F(document.documentElement,zt,Uo),b(document,"beforechange",Oi,E),b(document,"input",Ai,E),b(document,"invalid,submit",Mi,!0),b(document,"toggle",Li,E)});const Pi=v.fieldset.split(" ")[0],Di=v.validation.split(" ")[0],Fo="aria-describedby",Ni="aria-invalid";function Hi(t){requestAnimationFrame(()=>{for(const e of t)if(e.isConnected){const o=[];let n=null,i=!0;for(const s of e.getElementsByTagName("*"))s.classList.contains(Di)?(i=c(s,"data-color")==="success"||!s.clientHeight,n=Ot(s)):Dt(s)&&o.push(s);for(const s of o){const a=c(s,Fo)?.replace(n||"#","");c(s,Fo,`${n||""} ${a||""}`.trim()),c(s,Ni,`${!i}`)}}})}x(()=>F(document.documentElement,Pi,Hi));const Ri=v.logo.split(" ")[0];function Bi([t]){if(t?.isConnected&&t?.firstElementChild instanceof SVGSVGElement){for(const r of document.head.querySelectorAll("link[rel~='icon']"))r.setAttribute("rel","disabled");const e=t.firstElementChild,o=t?.hasAttribute("data-env"),n=window.getComputedStyle(e),i=n.getPropertyValue("color"),s=n.getPropertyValue("--mtds-logo-color"),a=e.outerHTML.replace(/\n+/g," ").replace(/(fill|width|height|xmlns)="[^"]+"/gi,"").replace("<svg",`<svg width="40" height="40" fill="${i}"`);document.head.appendChild(Object.assign(document.createElement("link"),{href:`data:image/svg+xml,${encodeURIComponent(`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 55 55'><rect fill='${o?"none":s}' width='51' height='51' x='2' y='2' stroke='${i}' stroke-dasharray='0.09 6.38' stroke-linecap='round' stroke-opacity='${o?.6:0}' stroke-width='2.3' rx='25.5'/><g transform="translate(7.5 7.5)">${a}</g></svg>`)}`,rel:"icon"}))}}x(()=>F(document.documentElement,Ri,Bi));const Vo=v.popover.split(" ")[0];let Qt=0;function Ui({target:t,newState:e}){if(t instanceof HTMLElement&&t.classList.contains(Vo)){const o=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?(Qt-=1,P(t,!1)):o&&(Qt+=1,P(t,o,c(t,"data-position")||"bottom"))}}function ji({target:t}){const e=Qt&&t?.closest?.("a,[popovertargetaction]");if(e){const o=c(e,"popovertargetaction")||"toggle",n=o==="show"||(o==="hide"?!1:void 0),s=(document.getElementById(c(e,"popovertarget")||"")||e).closest(`.${Vo}`);s?.isConnected&&s?.togglePopover&&s.togglePopover(n)}}x(()=>{b(document,"toggle",Ui,E),b(document,"click",ji)});const qi=v.table.split(" ")[0];function Fi(t){for(const e of t){const o=[];c(e,"role","table"),e.caption&&c(e.caption,"role","caption");for(const n of[e.tHead,e.tFoot,...e.tBodies])if(n){c(n,"role","rowgroup");const i=n.nodeName==="TBODY";for(const s of n.rows){c(s,"role","row");for(const a of s.cells)i?c(a,"data-th",o[a.cellIndex]||":empty"):o.push(a.innerText.trim()),a.nodeName==="TD"?c(a,"role","cell"):(c(a,"role",i?"rowheader":"columnheader"),c(a,"scope",i?"row":"col"))}}}}x(()=>F(document.documentElement,qi,Fi));const Vi=`.${v.togglegroup.split(" ")[0]}`;function Yi(t){const{key:e,target:o}=t,n=o instanceof HTMLInputElement&&o.closest(Vi);if(n&&(e==="Enter"&&o.click(),e?.startsWith("Arrow"))){t.preventDefault();const i=n.getElementsByTagName("input"),s=[...i].indexOf(o),a=e.match(/Arrow(Right|Down)/)?1:-1;i[(i.length+s+a)%i.length]?.focus()}}x(()=>b(document,"keydown",Yi));const Yo="aria-describedby",Ko="Escape",yt="aria-labelledby",Ki="--mtds-tooltip-position",Wi=300,L=K?Object.assign(document.createElement("div"),{className:v._tooltip,id:"mtds-tooltip",popover:"manual"}):null;let R=null,Wo=Number.NEGATIVE_INFINITY,Xo=0;function Jt({target:t,type:e,key:o}){if(e==="keydown"&&o!==Ko)return;const n=Wo+Wi-Date.now();clearTimeout(Xo),Xo=setTimeout(Xi,Math.max(n,0),o===Ko?null:t)}function Xi(t){if(Wo=Date.now(),!L||t===L)return;L?.isConnected||document.body.append(L);let e=t?.closest?.("[data-tooltip]")||null;if(e===R)return;const o=e&&c(e,"data-tooltip")||"",n=e&&c(e,"data-tooltip-position")||window.getComputedStyle(e||document.body).getPropertyValue(Ki)?.trim()||"top";(!o||o==="false"||o==="true"||n==="none")&&(e=null),e&&(L.textContent=o);const s=R&&c(R,yt)===L?.id,a=(e instanceof HTMLElement?e.innerText:e?.textContent)?.trim()||e?.hasAttribute(yt)||e?.hasAttribute("aria-label");R?.removeAttribute(s?yt:Yo),P(L,!1),R=e,R&&c(R,a?Yo:yt,L?.id),L.togglePopover(!!e),P(L,e||!1,n)}x(()=>{b(document,"blur,focus,mouseout,mouseover",Jt,E),b(window,"keydown",Jt,E),b(window,"blur",Jt,E)});var Go=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",zo;Go&&/^Mac/i.test(((zo=navigator.userAgentData)==null?void 0:zo.platform)||navigator.platform);var Gi=":host(:not([hidden])) { display: block }",Qo=typeof HTMLElement>"u"?class{}:HTMLElement;function B(t,e,o){var n;return o===void 0?(n=t.getAttribute(e))!=null?n:null:(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}var Jo=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},Zo=(t,...e)=>Jo("add",t,e),tn=(t,...e)=>Jo("remove",t,e),zi=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},Qi=t=>{var e;const o=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return o instanceof Document||o instanceof ShadowRoot?o:document},Zt=(t,e,o)=>{const n=document.createElement(t);if(e&&(n.textContent=e),o)for(const[i,s]of Object.entries(o))B(n,i,s);return n},en={define:(t,e)=>!Go||window.customElements.get(t)||window.customElements.define(t,e)},Ji=class extends Qo{constructor(){super(),this._content=null,this.attachShadow({mode:"open"}).append(Zt("slot",null,{name:"summary"}),Zt("slot",null,{part:"details-content"}),Zt("style",`${Gi}
14
14
  ::slotted(u-summary) { cursor: pointer; display: block }
15
15
  ::slotted(u-summary)::before { content: ''; display: inline-block; vertical-align: middle; margin-inline: .05em .3125em; border-block: .3125em solid transparent; border-inline-start: .5em solid }
16
16
  ::slotted(u-summary[aria-expanded="true"])::before { rotate: 90deg }
17
- :host > [part="details-content"]:not([hidden=""]) { display: block }`))}static get observedAttributes(){return["open"]}connectedCallback(){var t;this._content=(t=this.shadowRoot)==null?void 0:t.children[1],Zo(this._content,"beforematch",this),Zo(this,"click,keydown",this),this.attributeChangedCallback()}disconnectedCallback(){this._content&&tn(this._content,"beforematch",this),tn(this,"click,keydown",this),this._content=null}attributeChangedCallback(t,e,o){const n="onbeforematch"in this?"until-found":!0,i=this.open;for(const s of this.children)s.nodeName==="U-SUMMARY"&&B(s,"aria-expanded",`${i}`);if(this._content&&(B(this._content,"aria-hidden",`${!i}`),this._content.hidden=i?!1:n),i&&this.name){const s=Qi(this).querySelectorAll(`${this.nodeName}[name="${this.name}"]`);for(const a of s)a!==this&&(a.open=!1)}t==="open"&&e===null!=(o===null)&&this.dispatchEvent(new Event("toggle"))}handleEvent(t){const e=this.querySelector(":scope > u-summary"),o=e?.contains(t.target);t.defaultPrevented||(t.type==="beforematch"&&(this.open=!0),o&&t.type==="keydown"&&zi(t),o&&t.type==="click"&&(this.open=!this.open))}get open(){return this.hasAttribute("open")}set open(t){B(this,"open",t?"":null)}get name(){return B(this,"name")||""}set name(t){B(this,"name",t)}},Zi=class extends Qo{connectedCallback(){B(this,"role","button"),this.slot="summary",this.tabIndex=0}};en.define("u-details",Ji),en.define("u-summary",Zi);var wt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",on=wt&&/firefox/i.test(navigator.userAgent),ts=wt&&/iPad|iPhone|iPod/.test(navigator.userAgent),nn;wt&&/^Mac/i.test(((nn=navigator.userAgentData)==null?void 0:nn.platform)||navigator.platform);var es=typeof HTMLElement>"u"?class{}:HTMLElement;function y(t,e,o){var n;return o===void 0?(n=t.getAttribute(e))!=null?n:null:(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}var sn=t=>{var e;const o=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return o instanceof Document||o instanceof ShadowRoot?o:document},os=0,ns=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++os).toString(32)}`),t.id):"",an=(t,e,o)=>{const n=document.createElement(t);if(e&&(n.textContent=e),o)for(const[i,s]of Object.entries(o))y(n,i,s);return n},is={define:(t,e)=>!wt||window.customElements.get(t)||window.customElements.define(t,e)},ss=t=>{var e;const o=sn(t),n=y(t,"aria-label")||"";return[...(((e=y(t,"aria-labelledby"))==null?void 0:e.trim().split(/\s+/))||[]).map(s=>o?.querySelector(`[id="${s}"]`)),...Array.from(t.labels||[])].reduce((s,a)=>{var r;return s||((r=a?.innerText)==null?void 0:r.trim())||""},n)},Zt=!1,rn=class extends es{static get observedAttributes(){return["aria-label","aria-labelledby","value","max"]}constructor(){super(),this.attachShadow({mode:"open"}).append(an("slot",null,{hidden:""}),an("style",`:host(:not([hidden])) { box-sizing: border-box; border: 1px solid; display: inline-block; height: .5em; width: 10em; overflow: hidden }
17
+ :host > [part="details-content"]:not([hidden=""]) { display: block }`))}static get observedAttributes(){return["open"]}connectedCallback(){var t;this._content=(t=this.shadowRoot)==null?void 0:t.children[1],Zo(this._content,"beforematch",this),Zo(this,"click,keydown",this),this.attributeChangedCallback()}disconnectedCallback(){this._content&&tn(this._content,"beforematch",this),tn(this,"click,keydown",this),this._content=null}attributeChangedCallback(t,e,o){const n="onbeforematch"in this?"until-found":!0,i=this.open;for(const s of this.children)s.nodeName==="U-SUMMARY"&&B(s,"aria-expanded",`${i}`);if(this._content&&(B(this._content,"aria-hidden",`${!i}`),this._content.hidden=i?!1:n),i&&this.name){const s=Qi(this).querySelectorAll(`${this.nodeName}[name="${this.name}"]`);for(const a of s)a!==this&&(a.open=!1)}t==="open"&&e===null!=(o===null)&&this.dispatchEvent(new Event("toggle"))}handleEvent(t){const e=this.querySelector(":scope > u-summary"),o=e?.contains(t.target);t.defaultPrevented||(t.type==="beforematch"&&(this.open=!0),o&&t.type==="keydown"&&zi(t),o&&t.type==="click"&&(this.open=!this.open))}get open(){return this.hasAttribute("open")}set open(t){B(this,"open",t?"":null)}get name(){return B(this,"name")||""}set name(t){B(this,"name",t)}},Zi=class extends Qo{connectedCallback(){B(this,"role","button"),this.slot="summary",this.tabIndex=0}};en.define("u-details",Ji),en.define("u-summary",Zi);var wt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",on=wt&&/firefox/i.test(navigator.userAgent),ts=wt&&/iPad|iPhone|iPod/.test(navigator.userAgent),nn;wt&&/^Mac/i.test(((nn=navigator.userAgentData)==null?void 0:nn.platform)||navigator.platform);var es=typeof HTMLElement>"u"?class{}:HTMLElement;function y(t,e,o){var n;return o===void 0?(n=t.getAttribute(e))!=null?n:null:(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}var sn=t=>{var e;const o=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return o instanceof Document||o instanceof ShadowRoot?o:document},os=0,ns=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++os).toString(32)}`),t.id):"",an=(t,e,o)=>{const n=document.createElement(t);if(e&&(n.textContent=e),o)for(const[i,s]of Object.entries(o))y(n,i,s);return n},is={define:(t,e)=>!wt||window.customElements.get(t)||window.customElements.define(t,e)},ss=t=>{var e;const o=sn(t),n=y(t,"aria-label")||"";return[...(((e=y(t,"aria-labelledby"))==null?void 0:e.trim().split(/\s+/))||[]).map(s=>o?.querySelector(`[id="${s}"]`)),...Array.from(t.labels||[])].reduce((s,a)=>{var r;return s||((r=a?.innerText)==null?void 0:r.trim())||""},n)},te=!1,rn=class extends es{static get observedAttributes(){return["aria-label","aria-labelledby","value","max"]}constructor(){super(),this.attachShadow({mode:"open"}).append(an("slot",null,{hidden:""}),an("style",`:host(:not([hidden])) { box-sizing: border-box; border: 1px solid; display: inline-block; height: .5em; width: 10em; overflow: hidden }
18
18
  :host::before { content: ''; display: block; height: 100%; background: currentColor; width: var(--percentage, 0%); transition: width .2s }
19
19
  :host(:not([value])) { background: linear-gradient(90deg,currentColor 25%, transparent 50%, currentColor 75%) 50%/400% }
20
20
  @media (prefers-reduced-motion: no-preference) { :host { animation: indeterminate 2s linear infinite } }
21
- @keyframes indeterminate { from { background-position-x: 100% } to { background-position-x: 0 } }`))}connectedCallback(){this.attributeChangedCallback()}attributeChangedCallback(){if(Zt)return;Zt=!0;const t=ts||on,e=Math.max(0,Math.round(this.position*100));this.style.setProperty("--percentage",`${e}%`);let o=ss(this);if(t&&(o=`${o.replace(/\d+%$/,"")} ${e}%`),on)for(const n of this.labels)y(n,"aria-label",o);y(this,"aria-busy",`${this.position===-1}`),y(this,"aria-label",o.trim()),y(this,"aria-labelledby",null),y(this,"aria-valuemax","100"),y(this,"aria-valuemin","0"),y(this,"aria-valuenow",`${e}`),y(this,"role",t?"img":"progressbar"),Zt=!1}get labels(){const t=this.closest("label:not([for])"),e=ns(this);return t&&(t.htmlFor=e),sn(this).querySelectorAll(`label[for="${e}"]`)}get position(){return this.value===null?-1:Math.min(this.value/this.max,1)}get value(){return cn(this,"value")}set value(t){dn(this,"value",t)}get max(){return cn(this,"max")||1}set max(t){dn(this,"max",t)}};rn.formAssociated=!0;var ln=t=>!Number.isNaN(Number.parseFloat(`${t}`))&&Number.isFinite(Number(t)),cn=(t,e)=>{const o=y(t,e);return ln(o)?Math.max(0,Number.parseFloat(o)):null},dn=(t,e,o)=>{if(o===null||ln(o))y(t,e,`${o}`);else throw new Error(`Failed to set non-numeric '${y}': '${o}'`)};return is.define("u-progress",rn),$.UHTMLComboboxElement=ut,$.UHTMLTabElement=ce,$.UHTMLTabListElement=le,$.UHTMLTabPanelElement=de,$.UHTMLTabsElement=re,$.analytics=Gn,$.pagination=Qn,$.styles=Jn,$.toggleAppExpanded=wo,$.version=Vn,Object.defineProperty($,Symbol.toStringTag,{value:"Module"}),$}({});
22
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWNvbWJvYm94L2Rpc3QvdS1jb21ib2JveC5qcyIsIi4uL2Rlc2lnbnN5c3RlbS91dGlscy50cyIsIi4uL2Rlc2lnbnN5c3RlbS9hbmFseXRpY3MvYW5hbHl0aWNzLnRzIiwiLi4vZGVzaWduc3lzdGVtL3BhZ2luYXRpb24vcGFnaW5hdGlvbi1oZWxwZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC10b2dnbGUuanMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9icmVhZGNydW1icy9icmVhZGNydW1icy1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9kaWFsb2cvZGlhbG9nLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2Vycm9yc3VtbWFyeS9lcnJvcnN1bW1hcnktb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kYXRhbGlzdC9kaXN0L3UtZGF0YWxpc3QuanMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGQvZmllbGQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGRzZXQvZmllbGRzZXQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vbG9nby9sb2dvLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3BvcG92ZXIvcG9wb3Zlci1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90YWJsZS90YWJsZS1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b2dnbGVncm91cC90b2dnbGVncm91cC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b29sdGlwL3Rvb2x0aXAtb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kZXRhaWxzL2Rpc3QvdS1kZXRhaWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtcHJvZ3Jlc3MvZGlzdC91LXByb2dyZXNzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFNBRkVfTEFCRUxMRURCWSA9IGAke0lTX0FORFJPSUQgPyBcImRhdGFcIiA6IFwiYXJpYVwifS1sYWJlbGxlZGJ5YDtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgLy8gVW5uYW1lZCBzbG90IGRvZXMgYXV0b21hdGljYWxseSByZW5kZXIgYWxsIHRvcCBlbGVtZW50IG5vZGVzXG4gIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBjc3MpXG4pO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xuXG4vLyB1LXRhYnMudHNcbnZhciBBUklBX0NPTlRST0xTID0gXCJhcmlhLWNvbnRyb2xzXCI7XG52YXIgQVJJQV9TRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xudmFyIFVIVE1MVGFic0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgRElTUExBWV9CTE9DSyk7XG4gIH1cbiAgZ2V0IHRhYkxpc3QoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFibGlzdFwiLCB0aGlzKVswXSB8fCBudWxsO1xuICB9XG4gIGdldCBzZWxlY3RlZEluZGV4KCkge1xuICAgIHJldHVybiBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicyk7XG4gIH1cbiAgc2V0IHNlbGVjdGVkSW5kZXgoaW5kZXgpIHtcbiAgICBzZXRTZWxlY3RlZCh0aGlzLnRhYnNbaW5kZXhdKTtcbiAgfVxuICBnZXQgdGFicygpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJcIiwgdGhpcyk7XG4gIH1cbiAgZ2V0IHBhbmVscygpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJwYW5lbFwiLCB0aGlzKTtcbiAgfVxufTtcbnZhciBVSFRNTFRhYkxpc3RFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFibGlzdFwiKTtcbiAgICBvbih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCkgdGhpcy5oYW5kbGVFdmVudCgpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG9mZih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LnR5cGUgPT09IFwibXV0YXRpb25cIikge1xuICAgICAgY29uc3QgdGFiID0gdGhpcy50YWJzW01hdGgubWF4KHRoaXMuc2VsZWN0ZWRJbmRleCwgMCldO1xuICAgICAgcmV0dXJuIHRhYiA9PSBudWxsID8gdm9pZCAwIDogdGFiLnNldEF0dHJpYnV0ZShBUklBX1NFTEVDVEVELCBcInRydWVcIik7XG4gICAgfVxuICAgIGNvbnN0IHsga2V5IH0gPSBldmVudDtcbiAgICBjb25zdCB0YWJzID0gWy4uLnRoaXMudGFic107XG4gICAgY29uc3QgcHJldiA9IHRhYnMuZmluZEluZGV4KCh0YWIpID0+IHRhYi5jb250YWlucyhldmVudC50YXJnZXQpKTtcbiAgICBsZXQgbmV4dCA9IHByZXY7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgcHJldiA9PT0gLTEpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSBzZXRTZWxlY3RlZCh0YWJzW3ByZXZdKTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIgJiYgIWFzQnV0dG9uKGV2ZW50KSkge1xuICAgICAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIiB8fCBrZXkgPT09IFwiQXJyb3dSaWdodFwiKVxuICAgICAgICBuZXh0ID0gKHByZXYgKyAxKSAlIHRhYnMubGVuZ3RoO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93VXBcIiB8fCBrZXkgPT09IFwiQXJyb3dMZWZ0XCIpXG4gICAgICAgIG5leHQgPSAocHJldiB8fCB0YWJzLmxlbmd0aCkgLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkVuZFwiKSBuZXh0ID0gdGFicy5sZW5ndGggLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkhvbWVcIikgbmV4dCA9IDA7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiVGFiXCIpIG5leHQgPSBnZXRTZWxlY3RlZEluZGV4KHRhYnMpO1xuICAgICAgZWxzZSByZXR1cm47XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGFic1twcmV2XS50YWJJbmRleCA9IC0xO1xuICAgICAgICB0YWJzW25leHRdLnRhYkluZGV4ID0gMDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGtleSAhPT0gXCJUYWJcIikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0YWJzW25leHRdLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldCB0YWJzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwidS10YWJzXCIpO1xuICB9XG4gIGdldCB0YWJzKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWRJbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpO1xuICB9XG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4KSB7XG4gICAgc2V0U2VsZWN0ZWQodGhpcy50YWJzW2luZGV4XSk7XG4gIH1cbn07XG52YXIgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xudmFyIFVIVE1MVGFiRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImlkXCIsIEFSSUFfU0VMRUNURUQsIEFSSUFfQ09OVFJPTFNdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUoXG4gICAgICB0aGlzLFxuICAgICAgXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jayB9XCJcbiAgICApO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFiXCIpO1xuICAgIHRoaXMudGFiSW5kZXggPSB0aGlzLnNlbGVjdGVkID8gMCA6IC0xO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoIVNLSVBfQVRUUl9DSEFOR0UgJiYgdGhpcy5zZWxlY3RlZCAmJiB0aGlzLnRhYkxpc3QpIHtcbiAgICAgIFNLSVBfQVRUUl9DSEFOR0UgPSB0cnVlO1xuICAgICAgY29uc3QgdGFicyA9IFsuLi50aGlzLnRhYkxpc3QucXVlcnlTZWxlY3RvckFsbChcInUtdGFiXCIpXTtcbiAgICAgIGNvbnN0IHBhbmVscyA9IHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFicGFuZWxcIiwgdGhpcy50YWJzRWxlbWVudCB8fCB0aGlzKTtcbiAgICAgIGNvbnN0IG5leHRQYW5lbCA9IGdldFBhbmVsKHRoaXMsIHBhbmVsc1t0YWJzLmluZGV4T2YodGhpcyldKTtcbiAgICAgIGlmIChuZXh0UGFuZWwpIGF0dHIobmV4dFBhbmVsLCBTQUZFX0xBQkVMTEVEQlksIHVzZUlkKHRoaXMpKTtcbiAgICAgIHRhYnMuZm9yRWFjaCgodGFiLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBwYW5lbCA9IGdldFBhbmVsKHRhYiwgcGFuZWxzW2luZGV4XSk7XG4gICAgICAgIHRhYi50YWJJbmRleCA9IHRhYiA9PT0gdGhpcyA/IDAgOiAtMTtcbiAgICAgICAgYXR0cih0YWIsIEFSSUFfU0VMRUNURUQsIGAke3RhYiA9PT0gdGhpc31gKTtcbiAgICAgICAgaWYgKHBhbmVsKSBwYW5lbC5oaWRkZW4gPSBwYW5lbCAhPT0gbmV4dFBhbmVsO1xuICAgICAgICBpZiAocGFuZWwpIGF0dHIodGFiLCBBUklBX0NPTlRST0xTLCBwYW5lbC5pZCk7XG4gICAgICB9KTtcbiAgICAgIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYkxpc3QoKSB7XG4gICAgY29uc3QgdGFibGlzdCA9IHRoaXMucGFyZW50RWxlbWVudDtcbiAgICByZXR1cm4gKHRhYmxpc3QgPT0gbnVsbCA/IHZvaWQgMCA6IHRhYmxpc3Qubm9kZU5hbWUpID09PSBcIlUtVEFCTElTVFwiID8gdGFibGlzdCA6IG51bGw7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIEFSSUFfU0VMRUNURUQpID09PSBcInRydWVcIjtcbiAgfVxuICBzZXQgc2VsZWN0ZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIEFSSUFfU0VMRUNURUQsIGAkeyEhdmFsdWV9YCk7XG4gIH1cbiAgLyoqIFJldHJpZXZlcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiBhbiB0YWIgaW4gYSB0YWJsaXN0LiAqL1xuICBnZXQgaW5kZXgoKSB7XG4gICAgY29uc3QgdGFiTGlzdCA9IHRoaXMudGFiTGlzdDtcbiAgICByZXR1cm4gdGFiTGlzdCA/IFsuLi50YWJMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKV0uaW5kZXhPZih0aGlzKSA6IDA7XG4gIH1cbiAgZ2V0IHBhbmVsKCkge1xuICAgIHJldHVybiBnZXRQYW5lbCh0aGlzKTtcbiAgfVxufTtcbnZhciBVSFRNTFRhYlBhbmVsRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImhpZGRlblwiXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFicGFuZWxcIik7XG4gICAgdGhpcy5oaWRkZW4gPSBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicykgPT09IC0xO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLmhpZGRlbiB8fCBpc0ZvY3VzYWJsZSh0aGlzLmZpcnN0Q2hpbGQpKVxuICAgICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIG51bGwpO1xuICAgIGVsc2UgdGhpcy50YWJJbmRleCA9IDA7XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgY29uc3QgY3NzID0gYHUtdGFiWyR7QVJJQV9DT05UUk9MU309XCIke3RoaXMuaWR9XCJdYDtcbiAgICByZXR1cm4gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKGNzcyk7XG4gIH1cbn07XG52YXIgcXVlcnlXaXRob3V0TmVzdGVkID0gKHRhZywgc2VsZikgPT4gc2VsZi5xdWVyeVNlbGVjdG9yQWxsKGAke3RhZ306bm90KDpzY29wZSB1LXRhYnBhbmVsICR7dGFnfSlgKTtcbnZhciBnZXRQYW5lbCA9ICh0YWIsIHBhbmVsKSA9PiB7XG4gIGNvbnN0IGlkMiA9IGF0dHIodGFiLCBBUklBX0NPTlRST0xTKSB8fCB1c2VJZChwYW5lbCk7XG4gIGNvbnN0IGVsID0gZ2V0Um9vdCh0YWIpLmdldEVsZW1lbnRCeUlkKGlkMik7XG4gIHJldHVybiAoZWwgPT0gbnVsbCA/IHZvaWQgMCA6IGVsLm5vZGVOYW1lKSA9PT0gXCJVLVRBQlBBTkVMXCIgPyBlbCA6IG51bGw7XG59O1xudmFyIGdldFNlbGVjdGVkSW5kZXggPSAodGFicykgPT4gWy4uLnRhYnNdLmZpbmRJbmRleCgodGFiKSA9PiBhdHRyKHRhYiwgQVJJQV9TRUxFQ1RFRCkgPT09IFwidHJ1ZVwiKTtcbnZhciBzZXRTZWxlY3RlZCA9ICh0YWIpID0+IHRhYiAmJiBhdHRyKHRhYiwgXCJhcmlhLXNlbGVjdGVkXCIsIFwidHJ1ZVwiKTtcbnZhciBpc0ZvY3VzYWJsZSA9IChlbCkgPT4gZWwgaW5zdGFuY2VvZiBFbGVtZW50ICYmICFlbC5tYXRjaGVzKCc6ZGlzYWJsZWQsW3RhYmluZGV4Xj1cIi1cIl0nKSAmJiBlbC5tYXRjaGVzKFxuICBgW2NvbnRlbnRlZGl0YWJsZV0sW2NvbnRyb2xzXSxbaHJlZl0sW3RhYmluZGV4XSxpbnB1dDpub3QoW3R5cGU9XCJoaWRkZW5cIl0pLHNlbGVjdCx0ZXh0YXJlYSxidXR0b24sc3VtbWFyeSxpZnJhbWVgXG4pO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJzXCIsIFVIVE1MVGFic0VsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJsaXN0XCIsIFVIVE1MVGFiTGlzdEVsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJcIiwgVUhUTUxUYWJFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtdGFicGFuZWxcIiwgVUhUTUxUYWJQYW5lbEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTFRhYkVsZW1lbnQsIFVIVE1MVGFiTGlzdEVsZW1lbnQsIFVIVE1MVGFiUGFuZWxFbGVtZW50LCBVSFRNTFRhYnNFbGVtZW50IH07XG4iLCJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5cbi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfRklSRUZPWCA9IElTX0JST1dTRVIgJiYgL2ZpcmVmb3gvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIEZPQ1VTX09VVExJTkUgPSBcIm91dGxpbmU6IDFweCBkb3R0ZWQ7IG91dGxpbmU6IDVweCBhdXRvIEhpZ2hsaWdodDsgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yXCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2JzZXJ2ZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgbXV0YXRpb25PYnNlcnZlciA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHJldHVybiBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpO1xuICB0cnkge1xuICAgIG9ic2VydmVycy5nZXQoZWxlbWVudCkuZGlzY29ubmVjdCgpO1xuICAgIG9ic2VydmVycy5kZWxldGUoZWxlbWVudCk7XG4gIH0gY2F0Y2ggKF9lcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0MiwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dDIpIGVsLnRleHRDb250ZW50ID0gdGV4dDI7XG4gIGlmIChhdHRycykgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJzKSkgYXR0cihlbCwga2V5LCB2YWwpO1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcbnZhciBMSVZFO1xudmFyIExJVkVfU1JfRklYID0gMDtcbnZhciBzcGVhayA9ICh0ZXh0MikgPT4ge1xuICBpZiAoIUxJVkUpIHtcbiAgICBMSVZFID0gY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBMSVZFLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmZpeGVkO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwXCI7XG4gICAgYXR0cihMSVZFLCBcImFyaWEtbGl2ZVwiLCBcImFzc2VydGl2ZVwiKTtcbiAgfVxuICBpZiAoIUxJVkUuaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKExJVkUpO1xuICBpZiAodGV4dDIpIExJVkUudGV4dENvbnRlbnQgPSBgJHt0ZXh0Mn0ke0xJVkVfU1JfRklYKysgJSAyID8gXCJcXHhBMFwiIDogXCJcIn1gO1xufTtcbnZhciBzZXRWYWx1ZSA9IChpbnB1dCwgZGF0YSwgdHlwZSA9IFwiXCIpID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSwgZGF0YSwgaW5wdXRUeXBlOiB0eXBlIH07XG4gIGNvbnN0IHByb3RvID0gSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGU7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJiZWZvcmVpbnB1dFwiLCBldmVudCkpO1xuICAoX2IgPSAoX2EyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgXCJ2YWx1ZVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5zZXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKGlucHV0LCBkYXRhKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImlucHV0XCIsIGV2ZW50KSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiY2hhbmdlXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG59O1xudmFyIElTX1BSRVNTID0gZmFsc2U7XG52YXIgaXNNb3VzZURvd24gPSAoZXZlbnQpID0+IHtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2V1cFwiKSBJU19QUkVTUyA9IGZhbHNlO1xuICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gXCJtb3VzZWRvd25cIikge1xuICAgIElTX1BSRVNTID0gdHJ1ZTtcbiAgICBvbihkb2N1bWVudCwgXCJtb3VzZXVwXCIsIGlzTW91c2VEb3duLCB7IG9uY2U6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIElTX1BSRVNTO1xufTtcblxuLy8gdS1jb21ib2JveC50c1xudmFyIEVWRU5UUyA9IFwiYmVmb3JlaW5wdXQsYmx1cixmb2N1cyxjbGljayxpbnB1dCxrZXlkb3duLG1vdXNlZG93blwiO1xudmFyIEVWRU5UX09OQ0UgPSB7IG9uY2U6IHRydWUsIHBhc3NpdmU6IHRydWUgfTtcbnZhciBJU19GSVJFRk9YX0RFU0tUT1AgPSBJU19GSVJFRk9YICYmICFJU19BTkRST0lEO1xudmFyIElTX01PQklMRSA9IElTX0FORFJPSUQgfHwgSVNfSU9TO1xudmFyIEZBTFNFID0gXCJmYWxzZVwiO1xudmFyIFRFWFRTID0ge1xuICBhZGRlZDogXCJBZGRlZFwiLFxuICBlbXB0eTogXCJObyBzZWxlY3RlZFwiLFxuICBmb3VuZDogXCJOYXZpZ2F0ZSBsZWZ0IHRvIGZpbmQgJWQgc2VsZWN0ZWRcIixcbiAgaW52YWxpZDogXCJJbnZhbGlkIHZhbHVlXCIsXG4gIG9mOiBcIm9mXCIsXG4gIHJlbW92ZTogXCJQcmVzcyB0byByZW1vdmVcIixcbiAgcmVtb3ZlZDogXCJSZW1vdmVkXCJcbn07XG52YXIgVUhUTUxDb21ib2JveEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5faXRlbVRleHQgPSBcIlwiO1xuICAgIC8vIExvY2FsbHkgc3RvcmUgaXRlbSB0ZXh0IHRvIGNvbXBhcmUgY2hhbmdlIGluIHNpbmdsZSBtb2RlXG4gICAgdGhpcy5fc3BlYWsgPSBcIlwiO1xuICAgIHRoaXMuX3RleHRzID0gX19zcHJlYWRWYWx1ZXMoe30sIFRFWFRTKTtcbiAgICB0aGlzLl92YWx1ZSA9IFwiXCI7XG4gICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgICAgIC8vIENvbnRlbnQgc2xvdFxuICAgICAgY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2s7IGN1cnNvcjogcG9pbnRlcjsgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApIH0gLyogTXVzdCBiZSBkaXNwbGF5IGJsb2NrIGluIFNhZmFyaSB0byBhbGxvdyBmb2N1cyBpbnNpZGUgKi9cblx0XHRcdFx0Omhvc3QoOm5vdChbZGF0YS1tdWx0aXBsZV0pKSA6OnNsb3R0ZWQoZGF0YSksXG5cdFx0XHRcdDpob3N0KFtkYXRhLW11bHRpcGxlPVwiZmFsc2VcIl0pIDo6c2xvdHRlZChkYXRhKSB7IGRpc3BsYXk6IG5vbmUgfSAvKiBIaWRlIGRhdGEgaWYgbm90IG11bHRpcGxlICovXG5cdFx0XHRcdDo6c2xvdHRlZChpbnB1dFtpbnB1dG1vZGU9XCJub25lXCJdKSB7IG91dGxpbmU6IG5vbmUgfSAvKiBIaWRlIHRlbXBvcmFyeSBmb3VjcyBvdXRsaW5lIGZsYXNoICovXG5cdFx0XHRcdDo6c2xvdHRlZChkZWwpIHsgdGV4dC1kZWNvcmF0aW9uOiBub25lIH1cblx0XHRcdFx0OjpzbG90dGVkKGRhdGE6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBvaW50ZXItZXZlbnRzOiBub25lIH1cbiAgICAgICAgOjpzbG90dGVkKGRhdGEpOjphZnRlciB7IGNvbnRlbnQ6ICdcXFxcMDBENyc7IGNvbnRlbnQ6ICdcXFxcMDBENycgLyAnJzsgcGFkZGluZy1pbmxpbmU6IC41Y2g7IHBvaW50ZXItZXZlbnRzOiBhdXRvIH1cbiAgICAgICAgOjpzbG90dGVkKGRhdGE6Zm9jdXMpIHsgJHtGT0NVU19PVVRMSU5FfSB9YFxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgLy8gTG9jYWxseSBzdG9yZSB2YWx1ZSB0byBzdG9yZSB2YWx1ZSBiZWZvcmUgaW5wdXQtY2xpY2tcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKFRFWFRTKS5tYXAoKGtleSkgPT4gYGRhdGEtc3ItJHtrZXl9YCk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5fcm9vdCA9IGdldFJvb3QodGhpcyk7XG4gICAgb24odGhpcywgRVZFTlRTLCB0aGlzLCB0cnVlKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHtcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogW1widmFsdWVcIl0sXG4gICAgICAvLyBSZXNwb25kIHRvIGNoYW5nZXMgaW4gPGRhdGE+IHZhbHVlLFxuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgICAvLyBSZXNwb25kIHRvIGNoYW5nZXMgaW4gPGRhdGE+IHRleHRDb250ZW50XG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgfSk7XG4gICAgc2V0VGltZW91dChyZW5kZXIsIDAsIHRoaXMpO1xuICAgIHNldFRpbWVvdXQoc3luY0lucHV0VmFsdWUsIDAsIHRoaXMpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBfLCB2YWwpIHtcbiAgICBjb25zdCB0ZXh0MiA9IHByb3Auc3BsaXQoXCJkYXRhLXNyLVwiKVsxXTtcbiAgICBpZiAoVEVYVFNbdGV4dDJdKSB0aGlzLl90ZXh0c1t0ZXh0Ml0gPSB2YWwgfHwgVEVYVFNbdGV4dDJdO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgZmFsc2UpO1xuICAgIG9mZih0aGlzLCBFVkVOVFMsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5fY2xlYXIgPSB0aGlzLl9mb2N1cyA9IHRoaXMuX2NvbnRyb2wgPSB2b2lkIDA7XG4gICAgdGhpcy5fbGlzdCA9IHRoaXMuX29wdGlvbnMgPSB0aGlzLl9yb290ID0gdm9pZCAwO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJlZm9yZWlucHV0XCIpIHRoaXMuX3ZhbHVlID0gKHRhcmdldCA9PSBudWxsID8gdm9pZCAwIDogdGFyZ2V0LnZhbHVlKSB8fCBcIlwiO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJsdXJcIikgb25CbHVyKHRoaXMpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImNsaWNrXCIpIG9uQ2xpY2sodGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImZvY3VzXCIpIG9uRm9jdXModGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImlucHV0XCIpIG9uSW5wdXQodGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgb25LZXlEb3duKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgaXNNb3VzZURvd24oZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcIm11dGF0aW9uXCIpIHJlbmRlcih0aGlzLCBldmVudCk7XG4gIH1cbiAgZ2V0IG11bHRpcGxlKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gYXR0cih0aGlzLCBcImRhdGEtbXVsdGlwbGVcIikpICE9IG51bGwgPyBfYTIgOiBGQUxTRSkgIT09IEZBTFNFO1xuICB9XG4gIHNldCBtdWx0aXBsZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJkYXRhLW11bHRpcGxlXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBjcmVhdGFibGUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKChfYTIgPSBhdHRyKHRoaXMsIFwiZGF0YS1jcmVhdGFibGVcIikpICE9IG51bGwgPyBfYTIgOiBGQUxTRSkgIT09IEZBTFNFO1xuICB9XG4gIHNldCBjcmVhdGFibGUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwiZGF0YS1jcmVhdGFibGVcIiwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgZ2V0IGNvbnRyb2woKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpXG4gICAgICB0aGlzLl9jb250cm9sID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIik7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2w7XG4gIH1cbiAgZ2V0IGxpc3QoKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fbGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpXG4gICAgICB0aGlzLl9saXN0ID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwidS1kYXRhbGlzdCxkYXRhbGlzdFwiKTtcbiAgICByZXR1cm4gdGhpcy5fbGlzdDtcbiAgfVxuICBnZXQgY2xlYXIoKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fY2xlYXIpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuaXNDb25uZWN0ZWQpKSB0aGlzLl9jbGVhciA9IHRoaXMucXVlcnlTZWxlY3RvcihcImRlbFwiKTtcbiAgICByZXR1cm4gdGhpcy5fY2xlYXI7XG4gIH1cbiAgZ2V0IGl0ZW1zKCkge1xuICAgIGlmICghdGhpcy5faXRlbXMpIHRoaXMuX2l0ZW1zID0gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZShcImRhdGFcIik7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICB9XG4gIGdldCBvcHRpb25zKCkge1xuICAgIHZhciBfYTIsIF9iO1xuICAgIGlmICghdGhpcy5fb3B0aW9ucykge1xuICAgICAgY29uc3QgdGFnID0gKChfYTIgPSB0aGlzLmxpc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIubm9kZU5hbWUpID09PSBcIlUtREFUQUxJU1RcIiA/IFwidS1vcHRpb25cIiA6IFwib3B0aW9uXCI7XG4gICAgICB0aGlzLl9vcHRpb25zID0gKF9iID0gdGhpcy5saXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cbiAgZ2V0IHZhbHVlcygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuaXRlbXNdLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSk7XG4gIH1cbn07XG52YXIgdGV4dCA9IChlbCkgPT4ge1xuICB2YXIgX2EyO1xuICByZXR1cm4gKChfYTIgPSBlbCA9PSBudWxsID8gdm9pZCAwIDogZWwudGV4dENvbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xufTtcbnZhciBpc0RhdGEgPSAoZWwpID0+IGVsIGluc3RhbmNlb2YgSFRNTERhdGFFbGVtZW50O1xudmFyIHJlbmRlciA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgY29uc3QgeyBfZm9jdXMsIF90ZXh0cywgaXRlbXMsIGNvbnRyb2wsIGxpc3QsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBsZXQgbGFiZWwgPSBgJHt0ZXh0KChfYTIgPSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmxhYmVscykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMlswXSl9LCAke211bHRpcGxlID8gaXRlbXMubGVuZ3RoID8gX3RleHRzLmZvdW5kLnJlcGxhY2UoXCIlZFwiLCBgJHtpdGVtcy5sZW5ndGh9YCkgOiBfdGV4dHMuZW1wdHkgOiBcIlwifWA7XG4gIGNvbnN0IGVkaXRzID0gW107XG4gIGZvciAoY29uc3QgeyBhZGRlZE5vZGVzLCByZW1vdmVkTm9kZXMgfSBvZiAoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LmRldGFpbCkgfHwgW10pIHtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIGFkZGVkTm9kZXMpIGlmIChpc0RhdGEoZWwpKSBlZGl0cy51bnNoaWZ0KGVsKTtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIHJlbW92ZWROb2RlcykgaWYgKGlzRGF0YShlbCkpIGVkaXRzLnB1c2goZWwpO1xuICB9XG4gIGNvbnN0IHNob3VsZEFubm91bmNlID0gbXVsdGlwbGUgPyBlZGl0cy5sZW5ndGggPT09IDEgOiBlZGl0c1swXSA9PT0gX2ZvY3VzO1xuICBpZiAoX2ZvY3VzICYmIGNvbnRyb2wgJiYgc2hvdWxkQW5ub3VuY2UpIHtcbiAgICBjb25zdCBpbnB1dE1vZGUgPSBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIpO1xuICAgIGNvbnN0IG5leHRGb2N1cyA9IGlzRGF0YShfZm9jdXMpID8gY29udHJvbCA6IF9mb2N1cztcbiAgICBzZWxmLl9zcGVhayA9IGAke190ZXh0c1tlZGl0c1swXS5pc0Nvbm5lY3RlZCA/IFwiYWRkZWRcIiA6IFwicmVtb3ZlZFwiXX0gJHt0ZXh0KGVkaXRzWzBdKX0sIGA7XG4gICAgaWYgKElTX01PQklMRSB8fCBfZm9jdXMgPT09IGNvbnRyb2wpIHNwZWFrKHNlbGYuX3NwZWFrKTtcbiAgICBpZiAoY29udHJvbCAhPT0gbmV4dEZvY3VzKSB7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiLCBudWxsKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgXCJub25lXCIpO1xuICAgICAgbGFiZWwgPSBcIlxceEEwXCI7XG4gICAgICBjb250cm9sLmZvY3VzKCk7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdmFyIF9hMztcbiAgICAgIGF0dHIoY29udHJvbCwgXCJhcmlhLWV4cGFuZGVkXCIsIFwidHJ1ZVwiKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgaW5wdXRNb2RlKTtcbiAgICAgIChfYTMgPSBuZXh0Rm9jdXMgPT0gbnVsbCA/IHZvaWQgMCA6IG5leHRGb2N1cy5mb2N1cykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMy5jYWxsKG5leHRGb2N1cyk7XG4gICAgICBzZWxmLl9zcGVhayA9IFwiXCI7XG4gICAgICBpZiAoSVNfRklSRUZPWF9ERVNLVE9QKSBvbihzZWxmLCBcImJsdXJcIiwgKCkgPT4gcmVuZGVyKHNlbGYpLCBFVkVOVF9PTkNFKTtcbiAgICAgIGVsc2Ugc2V0VGltZW91dChyZW5kZXIsIDEwMCwgc2VsZik7XG4gICAgfSwgMTAwKTtcbiAgfVxuICBsZXQgaWR4ID0gMDtcbiAgY29uc3Qgc2VsZWN0ID0gc2VsZi5xdWVyeVNlbGVjdG9yKFwic2VsZWN0XCIpO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBjb25zdCBvcHRpb24gPSBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5vcHRpb25zW2lkeF07XG4gICAgY29uc3QgbGFiZWwyID0gdGV4dChpdGVtKTtcbiAgICBjb25zdCB2YWx1ZSA9IGl0ZW0udmFsdWUgfHwgbGFiZWwyO1xuICAgIGNvbnN0IGFyaWEgPSBgJHtzZWxmLl9zcGVha30ke2xhYmVsMn0sICR7X3RleHRzLnJlbW92ZX0sICR7KytpZHh9ICR7X3RleHRzLm9mfSAke2l0ZW1zLmxlbmd0aH1gO1xuICAgIGF0dHIoaXRlbSwgXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuICAgIGF0dHIoaXRlbSwgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gICAgYXR0cihpdGVtLCBcInRhYmluZGV4XCIsIFwiLTFcIik7XG4gICAgYXR0cihpdGVtLCBcImFyaWEtbGFiZWxcIiwgYXJpYSk7XG4gICAgaWYgKG9wdGlvbikgT2JqZWN0LmFzc2lnbihvcHRpb24sIHsgdGV4dENvbnRlbnQ6IGxhYmVsMiwgdmFsdWUgfSk7XG4gICAgZWxzZSBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5hcHBlbmRDaGlsZChuZXcgT3B0aW9uKGxhYmVsMiwgdmFsdWUsIHRydWUsIHRydWUpKTtcbiAgfVxuICBpZiAoc2VsZWN0KSBhdHRyKHNlbGVjdCwgXCJtdWx0aXBsZVwiLCBtdWx0aXBsZSA/IFwiXCIgOiBudWxsKTtcbiAgZm9yIChjb25zdCBvcHQgb2YgWy4uLihzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5vcHRpb25zKSB8fCBbXV0uc2xpY2UoaWR4KSkgb3B0LnJlbW92ZSgpO1xuICBpZiAoIW11bHRpcGxlICYmIGlkeCA+IDEpXG4gICAgY29uc29sZS53YXJuKFwidS1jb21ib2JveDogTXVsdGlwbGUgPGRhdGE+IGZvdW5kIGluIHNpbmdsZSBtb2RlLlwiKTtcbiAgaWYgKGxpc3QpIGF0dHIobGlzdCwgXCJhcmlhLW11bHRpc2VsZWN0YWJsZVwiLCBgJHttdWx0aXBsZX1gKTtcbiAgaWYgKGNvbnRyb2wpIGF0dHIoY29udHJvbCwgXCJsaXN0XCIsIHVzZUlkKGxpc3QpKTtcbiAgaWYgKGNvbnRyb2wpIGF0dHIoY29udHJvbCwgXCJhcmlhLWxhYmVsXCIsIGAke3NlbGYuX3NwZWFrfSR7bGFiZWx9YCk7XG4gIGNvbnN0IGl0ZW1UZXh0ID0gdGV4dChpdGVtc1swXSk7XG4gIGlmIChpdGVtVGV4dCAhPT0gc2VsZi5faXRlbVRleHQpIHN5bmNJbnB1dFZhbHVlKHNlbGYsIGZhbHNlKTtcbiAgc2VsZi5faXRlbVRleHQgPSBpdGVtVGV4dDtcbiAgc3luY0NsZWFyV2l0aElucHV0KHNlbGYpO1xuICBzeW5jT3B0aW9uc1dpdGhJdGVtcyhzZWxmKTtcbiAgKF9iID0gbXV0YXRpb25PYnNlcnZlcihzZWxmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLnRha2VSZWNvcmRzKCk7XG59O1xudmFyIHN5bmNDbGVhcldpdGhJbnB1dCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChzZWxmLmNsZWFyKSBhdHRyKHNlbGYuY2xlYXIsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgaWYgKHNlbGYuY2xlYXIpIHNlbGYuY2xlYXIuaGlkZGVuID0gISgoX2EyID0gc2VsZi5jb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnZhbHVlKTtcbn07XG52YXIgc3luY09wdGlvbnNXaXRoSXRlbXMgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IF9zcGVhaywgb3B0aW9ucyA9IFtdLCB2YWx1ZXMgfSA9IHNlbGY7XG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IChfYTIgPSBhdHRyKG9wdCwgXCJ2YWx1ZVwiKSkgIT0gbnVsbCA/IF9hMiA6IHRleHQob3B0KTtcbiAgICBhdHRyKG9wdCwgXCJhcmlhLWxhYmVsXCIsIF9zcGVhayA/IGAke19zcGVha30ke3RleHQob3B0KX1gIDogbnVsbCk7XG4gICAgYXR0cihvcHQsIFwic2VsZWN0ZWRcIiwgdmFsdWVzLmluY2x1ZGVzKHZhbHVlKSA/IFwiXCIgOiBudWxsKTtcbiAgfVxufTtcbnZhciBzeW5jSW5wdXRWYWx1ZSA9IChzZWxmLCB3aXRoRXZlbnQgPSB0cnVlKSA9PiB7XG4gIGNvbnN0IHsgbXVsdGlwbGUsIGNvbnRyb2wsIGl0ZW1zIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9IHRleHQoaXRlbXNbMF0pO1xuICBpZiAobXVsdGlwbGUgfHwgIWNvbnRyb2wgfHwgdmFsdWUgPT09IGNvbnRyb2wudmFsdWUpIHJldHVybjtcbiAgaWYgKHdpdGhFdmVudCkgcmV0dXJuIHNldFZhbHVlKGNvbnRyb2wsIHZhbHVlLCBcImluc2VydFRleHRcIik7XG4gIGNvbnRyb2wudmFsdWUgPSB2YWx1ZTtcbn07XG52YXIgZGlzcGF0Y2hNYXRjaCA9IChzZWxmLCBjaGFuZ2UgPSB0cnVlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgX3RleHRzLCBvcHRpb25zID0gW10sIGNyZWF0YWJsZSwgY29udHJvbCwgaXRlbXMsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9ICgoX2EyID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IHF1ZXJ5ID0gdmFsdWUudG9Mb3dlckNhc2UoKSB8fCBudWxsO1xuICBsZXQgbWF0Y2ggPSBbLi4ub3B0aW9uc10uZmluZChcbiAgICAob3B0KSA9PiAoYXR0cihvcHQsIFwibGFiZWxcIikgfHwgdGV4dChvcHQpKS50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gcXVlcnlcbiAgKTtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIGRldGFpbDogbWF0Y2ggfTtcbiAgaWYgKCFzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiYmVmb3JlbWF0Y2hcIiwgZXZlbnQpKSlcbiAgICBtYXRjaCA9IFsuLi5vcHRpb25zXS5maW5kKChvKSA9PiBvLnNlbGVjdGVkKTtcbiAgaWYgKGNoYW5nZSkge1xuICAgIHN5bmNPcHRpb25zV2l0aEl0ZW1zKHNlbGYpO1xuICAgIGlmIChtYXRjaCkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIG1hdGNoLCBmYWxzZSk7XG4gICAgaWYgKGNyZWF0YWJsZSAmJiB2YWx1ZSkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIHsgdmFsdWUgfSwgZmFsc2UpO1xuICAgIGlmICghbXVsdGlwbGUgJiYgaXRlbXNbMF0pIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW1zWzBdKTtcbiAgICBlbHNlIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICAgIHJldHVybiBzcGVhayhfdGV4dHMuaW52YWxpZCk7XG4gIH1cbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykgb3B0LnNlbGVjdGVkID0gb3B0ID09PSBtYXRjaDtcbn07XG52YXIgZGlzcGF0Y2hDaGFuZ2UgPSAoc2VsZiwgaXRlbSwgcmVtb3ZhYmxlID0gdHJ1ZSkgPT4ge1xuICBjb25zdCB7IGNvbnRyb2wsIGl0ZW1zLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgYWRkID0gY3JlYXRlRWxlbWVudChcImRhdGFcIiwgaXRlbS5sYWJlbCB8fCBpdGVtLnZhbHVlLCB7XG4gICAgdmFsdWU6IGl0ZW0udmFsdWVcbiAgfSk7XG4gIGNvbnN0IHJlbW92ZSA9IFsuLi5pdGVtc10uZmluZCgoaSkgPT4gaS52YWx1ZSA9PT0gaXRlbS52YWx1ZSk7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IHJlbW92ZSB8fCBhZGQgfTtcbiAgY29uc3Qgc2tpcCA9IHJlbW92ZSAmJiAhcmVtb3ZhYmxlO1xuICBpZiAoc2tpcCkgcmV0dXJuIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICBpZiAoc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImJlZm9yZWNoYW5nZVwiLCBldmVudCkpKSB7XG4gICAgaWYgKCFtdWx0aXBsZSkgZm9yIChjb25zdCBpdGVtMiBvZiBbLi4uaXRlbXNdKSBpdGVtMi5yZW1vdmUoKTtcbiAgICBpZiAocmVtb3ZlKSByZW1vdmUucmVtb3ZlKCk7XG4gICAgZWxzZSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmluc2VydEFkamFjZW50RWxlbWVudChcImJlZm9yZWJlZ2luXCIsIGFkZCk7XG4gICAgc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImFmdGVyY2hhbmdlXCIsIGV2ZW50KSk7XG4gIH1cbn07XG52YXIgb25Gb2N1cyA9IChzZWxmLCB7IHRhcmdldCB9KSA9PiB7XG4gIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgc2VsZi5fZm9jdXMgPSB0YXJnZXQ7XG4gIHNwZWFrKCk7XG59O1xudmFyIG9uQmx1ciA9IChzZWxmKSA9PiBpc01vdXNlRG93bigpIHx8IHNldFRpbWVvdXQob25CbHVycmVkLCAwLCBzZWxmKTtcbnZhciBvbkJsdXJyZWQgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoIXNlbGYuX2ZvY3VzIHx8IHNlbGYuY29udGFpbnMoKF9hMiA9IHNlbGYuX3Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuYWN0aXZlRWxlbWVudCkpIHJldHVybjtcbiAgaWYgKCFzZWxmLm11bHRpcGxlKSBkaXNwYXRjaE1hdGNoKHNlbGYpO1xuICBzZWxmLl9mb2N1cyA9IHZvaWQgMDtcbn07XG52YXIgb25DbGljayA9IChzZWxmLCBldmVudCkgPT4ge1xuICBjb25zdCB7IGNsaWVudFg6IHgsIGNsaWVudFk6IHksIHRhcmdldCB9ID0gZXZlbnQ7XG4gIGNvbnN0IHsgY2xlYXIsIGNvbnRyb2wsIGl0ZW1zIH0gPSBzZWxmO1xuICBpZiAoY2xlYXIgPT0gbnVsbCA/IHZvaWQgMCA6IGNsZWFyLmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICBpZiAoY29udHJvbCkgc2V0VmFsdWUoY29udHJvbCwgXCJcIiwgXCJkZWxldGVDb250ZW50QmFja3dhcmRcIik7XG4gICAgcmV0dXJuIGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuZm9jdXMoKTtcbiAgfVxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBjb25zdCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCB9ID0gaXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBpZiAoaXRlbS5jb250YWlucyh0YXJnZXQpKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgaXRlbSk7XG4gICAgaWYgKHkgPj0gdG9wICYmIHkgPD0gYm90dG9tICYmIHggPj0gbGVmdCAmJiB4IDw9IHJpZ2h0KSByZXR1cm4gaXRlbS5mb2N1cygpO1xuICB9XG4gIGlmICh0YXJnZXQgPT09IHNlbGYpIGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuZm9jdXMoKTtcbn07XG52YXIgb25JbnB1dCA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IG9wdGlvbnMgPSBbXSwgY29udHJvbCwgbXVsdGlwbGUgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gKChfYTIgPSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKSkgfHwgXCJcIjtcbiAgY29uc3QgaXNDbGljayA9IGV2ZW50IGluc3RhbmNlb2YgSW5wdXRFdmVudCA/ICFldmVudC5pbnB1dFR5cGUgfHwgZXZlbnQuaW5wdXRUeXBlID09PSBcImluc2VydFJlcGxhY2VtZW50VGV4dFwiIDogISF2YWx1ZTtcbiAgaWYgKGlzQ2xpY2spIHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoY29udHJvbCkgY29udHJvbC52YWx1ZSA9IHNlbGYuX3ZhbHVlO1xuICAgIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpXG4gICAgICBpZiAob3B0LnZhbHVlICYmIG9wdC52YWx1ZSA9PT0gdmFsdWUpXG4gICAgICAgIHJldHVybiBkaXNwYXRjaENoYW5nZShzZWxmLCBvcHQsIG11bHRpcGxlKTtcbiAgfSBlbHNlIGlmICghbXVsdGlwbGUpIGRpc3BhdGNoTWF0Y2goc2VsZiwgZmFsc2UpO1xuICBzeW5jQ2xlYXJXaXRoSW5wdXQoc2VsZik7XG59O1xudmFyIG9uS2V5RG93biA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSkgcmV0dXJuO1xuICBjb25zdCB7IGNsZWFyLCBjb250cm9sLCBpdGVtcyB9ID0gc2VsZjtcbiAgY29uc3QgeyBrZXksIHJlcGVhdCwgdGFyZ2V0IH0gPSBldmVudDtcbiAgY29uc3QgaXNDb250cm9sID0gY29udHJvbCAmJiBjb250cm9sID09PSB0YXJnZXQ7XG4gIGNvbnN0IGluVGV4dCA9IGlzQ29udHJvbCAmJiAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5zZWxlY3Rpb25FbmQpO1xuICBsZXQgaW5kZXggPSBpc0NvbnRyb2wgPyBpdGVtcy5sZW5ndGggOiBbLi4uaXRlbXNdLmluZGV4T2YodGFyZ2V0KTtcbiAgaWYgKGlzQ29udHJvbCAmJiBrZXkgPT09IFwiVGFiXCIgJiYgY2xlYXIgJiYgIWNsZWFyLmhpZGRlbikge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY2xlYXIudGFiSW5kZXggPSAtMTtcbiAgICBjbGVhci5mb2N1cygpO1xuICAgIG9uKGNsZWFyLCBcImJsdXJcIiwgKCkgPT4gYXR0cihjbGVhciwgXCJ0YWJpbmRleFwiLCBudWxsKSwgRVZFTlRfT05DRSk7XG4gIH1cbiAgaWYgKCFpc0NvbnRyb2wgJiYgYXNCdXR0b24oZXZlbnQpIHx8IGluZGV4ID09PSAtMSkgcmV0dXJuO1xuICBpZiAoa2V5ID09PSBcIkFycm93UmlnaHRcIiAmJiAhaXNDb250cm9sKSBpbmRleCArPSAxO1xuICBlbHNlIGlmIChrZXkgPT09IFwiQXJyb3dMZWZ0XCIgJiYgIWluVGV4dCkgaW5kZXggLT0gMTtcbiAgZWxzZSBpZiAoa2V5ID09PSBcIkVudGVyXCIgJiYgaXNDb250cm9sKSB7XG4gICAgY29uc3QgZm9ybSA9IGF0dHIoY29udHJvbCwgXCJmb3JtXCIpO1xuICAgIGF0dHIoY29udHJvbCwgXCJmb3JtXCIsIFwiI1wiKTtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gYXR0cihjb250cm9sLCBcImZvcm1cIiwgZm9ybSkpO1xuICAgIHJldHVybiBkaXNwYXRjaE1hdGNoKHNlbGYpO1xuICB9IGVsc2UgaWYgKChrZXkgPT09IFwiQmFja3NwYWNlXCIgfHwga2V5ID09PSBcIkRlbGV0ZVwiKSAmJiAhaW5UZXh0KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoIXJlcGVhdCAmJiBpdGVtc1tpbmRleF0pIHJldHVybiBkaXNwYXRjaENoYW5nZShzZWxmLCBpdGVtc1tpbmRleF0pO1xuICAgIGlmIChpc0NvbnRyb2wpIGluZGV4IC09IDE7XG4gIH0gZWxzZSByZXR1cm4gaXNDb250cm9sIHx8IChjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmZvY3VzKCkpO1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAoX2EyID0gaXRlbXNbTWF0aC5tYXgoMCwgaW5kZXgpXSB8fCBjb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKCk7XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1jb21ib2JveFwiLCBVSFRNTENvbWJvYm94RWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MQ29tYm9ib3hFbGVtZW50IH07XG4iLCJpbXBvcnQgeyBjbHN4IH0gZnJvbSBcImNsc3hcIjtcblxuZXhwb3J0IGNvbnN0IFFVSUNLX0VWRU5UID0geyBjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH07XG5leHBvcnQgY29uc3QgSVNfQlJPV1NFUiA9XG5cdHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiO1xuXG4vLyBUT0RPOiBEb2N1bWVudGF0aW9uIGZvciBwcmV0dHlOdW1iZXJcbmxldCBJTlRMX05VTTogSW50bC5OdW1iZXJGb3JtYXQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcHJldHR5TnVtYmVyKG51bWJlcjogbnVtYmVyIHwgc3RyaW5nKSB7XG5cdGlmICghSU5UTF9OVU0pXG5cdFx0SU5UTF9OVU0gPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXG5cdFx0XHQoSVNfQlJPV1NFUiAmJiBhdHRyKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgXCJsYW5nXCIpKSB8fCBcIm5vXCIsXG5cdFx0KTtcblx0cmV0dXJuIElOVExfTlVNLmZvcm1hdChOdW1iZXIobnVtYmVyKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWJvdW5jZTxUIGV4dGVuZHMgdW5rbm93bltdPihcblx0Y2FsbGJhY2s6ICguLi5hcmdzOiBUKSA9PiB2b2lkLFxuXHRkZWxheTogbnVtYmVyLFxuKSB7XG5cdGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG5cblx0cmV0dXJuICguLi5hcmdzOiBUKSA9PiB7XG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0XHR0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gY2FsbGJhY2soLi4uYXJncyksIGRlbGF5KTtcblx0fTtcbn1cblxuLyoqXG4gKiBhdHRyXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IGdldCwgc2V0IGFuZCByZW1vdmUgYXR0cmlidXRlc1xuICogQHBhcmFtIGVsIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIG5hbWUgVGhlIGF0dHJpYnV0ZSBuYW1lIHRvIGdldCwgc2V0IG9yIHJlbW92ZSwgb3IgYSBvYmplY3QgdG8gc2V0IG11bHRpcGxlIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB2YWx1ZSBBIHZhbGlkIGF0dHJpYnV0ZSB2YWx1ZSBvciBudWxsIHRvIHJlbW92ZSBhdHRyaWJ1dGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dHIoXG5cdGVsOiBFbGVtZW50LFxuXHRuYW1lOiBzdHJpbmcsXG5cdHZhbHVlPzogc3RyaW5nIHwgbnVsbCxcbik6IHN0cmluZyB8IG51bGwge1xuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKSA/PyBudWxsOyAvLyBGYWxsYmFjayB0byBudWxsIG9ubHkgaWYgZWwgaXMgdW5kZWZpbmVkXG5cdGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHRlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuXHRyZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiB1c2VJZFxuICogQHJldHVybiBBIGdlbmVyYXRlZCB1bmlxdWUgSURcbiAqL1xubGV0IGlkID0gMDtcbmNvbnN0IFVVSUQgPSBgJHtEYXRlLm5vdygpLnRvU3RyaW5nKDM2KX0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDUpfWA7XG5leHBvcnQgZnVuY3Rpb24gdXNlSWQoZWw6IEVsZW1lbnQpIHtcblx0aWYgKCFlbC5pZCkgZWwuaWQgPSBgJHtVVUlEfSR7KytpZH1gO1xuXHRyZXR1cm4gZWwuaWQ7XG59XG5cbi8vIEludGVybmFsIGhlbHBlciBmb3Igb24gLyBvZmZcbmNvbnN0IGV2ZW50cyA9IChcblx0YWN0aW9uOiBcImFkZFwiIHwgXCJyZW1vdmVcIixcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0cmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj4sXG4pOiB2b2lkID0+IHtcblx0Zm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG5cdFx0cmVzdFswXSA9IHR5cGU7XG5cdFx0ZWxlbWVudFtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdKC4uLnJlc3QpO1xuXHR9XG59O1xuXG4vKipcbiAqIG9uXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9uID0gKFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHQuLi5yZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPlxuKTogdm9pZCA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG5cbi8qKlxuICogb2ZmXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9mZiA9IChcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Li4ucmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj5cbik6IHZvaWQgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xuXG4vKipcbiAqIFNjcm9sbGVyIHRhcmdlcyBoZWxwaW5nIGFuY2hvclBvc2l0aW9uXG4gKi9cbmNvbnN0IFNDUk9MTEVSID0gSVNfQlJPV1NFUiA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikgOiBudWxsOyAvLyBVc2VkIHRvIGVuc3VyZSB3ZSBoYXZlIHNjcm9sbGFiaWxpdHkgdW5kZXJcbmNvbnN0IFRBUkdFVFMgPSBuZXcgTWFwPEVsZW1lbnQsICgpID0+IHZvaWQ+KCk7IC8vIFN0b3JlIGN1cnJlbnQgb3BlbiBwb3BwZXJzIGFuZCB0aGVpciB1cGRhdGUgZnVuY3Rpb25zXG5jb25zdCBUQVJHRVRTX1VQREFURSA9ICgpID0+IHtcblx0Zm9yIChjb25zdCBbXywgdXBkYXRlXSBvZiBUQVJHRVRTKSB1cGRhdGUoKTtcbn07XG5cbmlmIChTQ1JPTExFUikge1xuXHRTQ1JPTExFUi5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZTtwYWRkaW5nOjFweDt0b3A6MDtsZWZ0OjBweFwiO1xuXHRvbih3aW5kb3csIFwibG9hZCxyZXNpemUsc2Nyb2xsXCIsIFRBUkdFVFNfVVBEQVRFLCBRVUlDS19FVkVOVCk7XG59XG5cbi8qKlxuICogYW5jaG9yUG9zaXRpb25cbiAqIEBwYXJhbSB0YXJnZXQgVGhlIEVsZW1lbnQgdG8gcG9zaXRpb25cbiAqIEBwYXJhbSBhbmNob3IgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIGFuY2hvclxuICovXG5jb25zdCBQT1NJVElPTiA9IHsgdG9wOiAwLCByaWdodDogMSwgYm90dG9tOiAyLCBsZWZ0OiAzIH07IC8vIFNwZWVkIHVwIGJ5IHVzaW5nIGEgY29uc3QgbWFwXG5cbmV4cG9ydCB0eXBlIEFuY2hvclBvc2l0aW9uID0ga2V5b2YgdHlwZW9mIFBPU0lUSU9OO1xuXG5leHBvcnQgZnVuY3Rpb24gYW5jaG9yUG9zaXRpb24oXG5cdHRhcmdldDogSFRNTEVsZW1lbnQsXG5cdGFuY2hvcjogRWxlbWVudCB8IGZhbHNlLFxuXHRwbGFjZT86IHN0cmluZyB8IG51bWJlcixcblx0Zm9yY2U/OiBib29sZWFuLFxuKSB7XG5cdGNvbnN0IHBvc2l0aW9uID1cblx0XHRQT1NJVElPTltwbGFjZSBhcyBrZXlvZiB0eXBlb2YgUE9TSVRJT05dID8/XG5cdFx0TnVtYmVyKHBsYWNlKSA/P1xuXHRcdFBPU0lUSU9OLmJvdHRvbTtcblxuXHRpZiAoYW5jaG9yID09PSBmYWxzZSB8fCAhYW5jaG9yLmlzQ29ubmVjdGVkIHx8ICF0YXJnZXQuaXNDb25uZWN0ZWQpXG5cdFx0cmV0dXJuIFRBUkdFVFMuZGVsZXRlKHRhcmdldCk7IC8vIFN0b3Agd2F0Y2hpbmcgaWYgYW5jaG9yIGlzIHJlbW92ZWQgZnJvbSBET01cblx0aWYgKCFTQ1JPTExFUj8uaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKFNDUk9MTEVSIHx8IFwiXCIpOyAvLyBFbnN1cmUgd2UgaGF2ZSB0aGUgc2Nyb2xsZXJcblx0aWYgKCFUQVJHRVRTLmhhcyh0YXJnZXQpKVxuXHRcdFRBUkdFVFMuc2V0KHRhcmdldCwgKCkgPT4gYW5jaG9yUG9zaXRpb24odGFyZ2V0LCBhbmNob3IsIHBvc2l0aW9uLCBmb3JjZSkpO1xuXG5cdGNvbnN0IGlzSFRNTEFuY2hvciA9IGFuY2hvciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OyAvLyBTVkcgb3IgWE1MIGVsZW1lbnRzIGRvZXMgbm90IGhhdmUgb2Zmc2V0V2lkdGggb3Igb2Zmc2V0SGVpZ2h0XG5cdGNvbnN0IHsgb2Zmc2V0V2lkdGg6IHRhcmdldFcsIG9mZnNldEhlaWdodDogdGFyZ2V0SCB9ID0gdGFyZ2V0O1xuXHRjb25zdCBhbmNob3JXID0gaXNIVE1MQW5jaG9yID8gYW5jaG9yLm9mZnNldFdpZHRoIDogYW5jaG9yLmNsaWVudFdpZHRoO1xuXHRjb25zdCBhbmNob3JIID0gaXNIVE1MQW5jaG9yID8gYW5jaG9yLm9mZnNldEhlaWdodCA6IGFuY2hvci5jbGllbnRIZWlnaHQ7XG5cdGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wIH0gPSBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0Ly8gR2V0IHZpc3VhbCB2aWV3cG9ydCBpbmZvXG5cdGNvbnN0IHZpZXdXID0gd2luZG93LnZpc3VhbFZpZXdwb3J0Py53aWR0aCB8fCB3aW5kb3cuaW5uZXJXaWR0aDtcblx0Y29uc3Qgdmlld0ggPSB3aW5kb3cudmlzdWFsVmlld3BvcnQ/LmhlaWdodCB8fCB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdGNvbnN0IHNjcm9sbFggPSB3aW5kb3cucGFnZVhPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7XG5cdGNvbnN0IHNjcm9sbFkgPSB3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcblxuXHRjb25zdCBhbmNob3JYID0gTWF0aC5yb3VuZChsZWZ0IC0gKGFuY2hvclcgLSB3aWR0aCkgLyAyKTsgLy8gQ29ycmVjdCBmb3IgQ1NTIHRyYW5zZm9ybSBzY2FsZVxuXHRjb25zdCBhbmNob3JZID0gTWF0aC5yb3VuZCh0b3AgLSAoYW5jaG9ySCAtIGhlaWdodCkgLyAyKTsgLy8gQ29ycmVjdCBmb3IgQ1NTIHRyYW5zZm9ybSBzY2FsZVxuXHRjb25zdCBjZW50ZXJYID0gTWF0aC5taW4oXG5cdFx0TWF0aC5tYXgoMTAsIGFuY2hvclggLSAodGFyZ2V0VyAtIGFuY2hvclcpIC8gMiksXG5cdFx0dmlld1cgLSB0YXJnZXRXIC0gMTAsXG5cdCk7XG5cdGNvbnN0IGNlbnRlclkgPSBNYXRoLm1pbihcblx0XHRNYXRoLm1heCgxMCwgYW5jaG9yWSAtICh0YXJnZXRIIC0gYW5jaG9ySCkgLyAyKSxcblx0XHR2aWV3SCAtIHRhcmdldEggLSAxMCxcblx0KTtcblxuXHQvLyBVc2UgdmlzdWFsIHZpZXdwb3J0IGRpbWVuc2lvbnMgZm9yIHNwYWNlIGNhbGN1bGF0aW9uc1xuXHRjb25zdCBoYXNTcGFjZUxlZnQgPSBhbmNob3JYIC0gdGFyZ2V0VyA+IDA7XG5cdGNvbnN0IGhhc1NwYWNlUmlnaHQgPSBhbmNob3JYICsgYW5jaG9yVyArIHRhcmdldFcgPCB2aWV3Vztcblx0Y29uc3QgaGFzU3BhY2VPdmVyID0gYW5jaG9yWSAtIHRhcmdldEggPiAwO1xuXHRjb25zdCBoYXNTcGFjZVVuZGVyID0gYW5jaG9yWSArIGFuY2hvckggKyB0YXJnZXRIIDwgdmlld0g7XG5cblx0Y29uc3QgaXNWZXJ0aWNhbCA9IHBvc2l0aW9uID09PSBQT1NJVElPTi50b3AgfHwgcG9zaXRpb24gPT09IFBPU0lUSU9OLmJvdHRvbTtcblx0Y29uc3QgaXNSaWdodCA9XG5cdFx0KHBvc2l0aW9uID09PSBQT1NJVElPTi5yaWdodCAmJiAoZm9yY2UgfHwgaGFzU3BhY2VSaWdodCkpIHx8ICFoYXNTcGFjZUxlZnQ7IC8vIEFsd2F5cyBwb3NpdGlvbiByaWdodCB3aGVuIG5vIGhhc1NwYWNlTGVmdCwgYXMgbm8gT1Mgc2Nyb2xscyBmdXJ0aGVyIGxlZnQgdGhhbiAwXG5cdGNvbnN0IGlzVW5kZXIgPVxuXHRcdChwb3NpdGlvbiA9PT0gUE9TSVRJT04uYm90dG9tICYmIChmb3JjZSB8fCBoYXNTcGFjZVVuZGVyKSkgfHwgIWhhc1NwYWNlT3ZlcjsgLy8gQWx3YXlzIHBvc2l0aW9uIHVuZGVyIHdoZW4gbm8gaGFzU3BhY2VPdmVyLCBhcyBubyBPUyBzY3JvbGxzIGZ1cnRoZXIgdXAgdGhhbiAwXG5cblx0Ly8gQ2FsY3VsYXRlIHBvc2l0aW9ucyBpbiB2aWV3cG9ydCBjb29yZGluYXRlc1xuXHRjb25zdCB2aWV3WCA9IE1hdGgucm91bmQoXG5cdFx0aXNWZXJ0aWNhbCA/IGNlbnRlclggOiBpc1JpZ2h0ID8gYW5jaG9yWCArIGFuY2hvclcgOiBhbmNob3JYIC0gdGFyZ2V0Vyxcblx0KTtcblx0Y29uc3Qgdmlld1kgPSBNYXRoLnJvdW5kKFxuXHRcdGlzVmVydGljYWwgPyAoaXNVbmRlciA/IGFuY2hvclkgKyBhbmNob3JIIDogYW5jaG9yWSAtIHRhcmdldEgpIDogY2VudGVyWSxcblx0KTtcblxuXHQvLyBVc2UgYWJzb2x1dGUgcG9zaXRpb25pbmdcblx0dGFyZ2V0LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuXHR0YXJnZXQuc3R5bGUubGVmdCA9IGAke3ZpZXdYICsgc2Nyb2xsWH1weGA7XG5cdHRhcmdldC5zdHlsZS50b3AgPSBgJHt2aWV3WSArIHNjcm9sbFl9cHhgO1xuXG5cdFNDUk9MTEVSPy5zdHlsZS5zZXRQcm9wZXJ0eShcblx0XHRcInRyYW5zbGF0ZVwiLFxuXHRcdGAwcHggJHtNYXRoLnJvdW5kKGlzVW5kZXIgPyBzY3JvbGxYICsgYW5jaG9yWSArIGFuY2hvckggKyB0YXJnZXRIICsgMzAgOiAwKX1weGAsXG5cdCk7XG59XG5cbi8qKlxuICogU3BlZWQgdXAgTXV0YXRpb25PYnNlcnZlciBieSBkZWJvdW5jaW5nIGFuZCBvbmx5IHJ1bm5pbmcgd2hlbiBwYWdlIGlzIHZpc2libGVcbiAqIEByZXR1cm4gbmV3IE11dGFpb25PYnNlcnZlclxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjazogTXV0YXRpb25DYWxsYmFjaykge1xuXHRsZXQgcXVldWUgPSAwO1xuXG5cdGNvbnN0IG9uRnJhbWUgPSAoKSA9PiBzZXRUaW1lb3V0KG9uVGltZXIsIDIwMCk7IC8vIFVzZSBib3RoIHJlcXVlc3RBbmltYXRpb25GcmFtZSBhbmQgc2V0VGltZW91dCB0byBkZWJvdW5jZSBhbmQgb25seSBydW4gd2hlbiB2aXNpYmxlXG5cdGNvbnN0IG9uVGltZXIgPSAoKSA9PiB7XG5cdFx0Y2FsbGJhY2soW10sIG9ic2VydmVyKTtcblx0XHRvYnNlcnZlci50YWtlUmVjb3JkcygpOyAvLyBDbGVhciByZWNvcmRzIHRvIGF2b2lkIHJ1bm5pbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcblx0XHRxdWV1ZSA9IDA7XG5cdH07XG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdGlmICghcXVldWUpIHF1ZXVlID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKG9uRnJhbWUpO1xuXHR9KTtcblxuXHRyZXR1cm4gb2JzZXJ2ZXI7XG59XG5cbi8qKlxuICogb25NdXRhdGlvblxuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBvYnNlcnZlIG11dGF0aW9ucyBvbiBhIHNwZWNpZmljIGNsYXNzIG5hbWVcbiAqIEBwYXJhbSBlbCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSBjbGFzc05hbWUgVGhlIGNsYXNzIG5hbWUgdG8gb2JzZXJ2ZVxuICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBydW4gd2hlbiBtdXRhdGlvbnMgYXJlIGRldGVjdGVkXG4gKi9cbmNvbnN0IE1VVEFUT1JTID0gbmV3IFdlYWtNYXA8RWxlbWVudCwgQXJyYXk8KCkgPT4gdm9pZD4+KCk7XG5leHBvcnQgY29uc3Qgb25NdXRhdGlvbiA9IDxUIGV4dGVuZHMgRWxlbWVudD4oXG5cdGVsOiBFbGVtZW50LFxuXHRjbGFzc05hbWU6IHN0cmluZyxcblx0Y2FsbGJhY2s6IChlbGVtczogSFRNTENvbGxlY3Rpb25PZjxUPikgPT4gdm9pZCxcbikgPT4ge1xuXHRjb25zdCBlbGVtcyA9IGVsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcblx0Y29uc3QgbXV0YXRvciA9IE1VVEFUT1JTLmdldChlbCkgfHwgW107XG5cblx0aWYgKCFtdXRhdG9yLmxlbmd0aCkge1xuXHRcdE1VVEFUT1JTLnNldChlbCwgbXV0YXRvcik7XG5cdFx0Y3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcigoXywgb2JzZXJ2ZXIpID0+IHtcblx0XHRcdGlmIChlbC5pc0Nvbm5lY3RlZCAmJiBtdXRhdG9yPy5sZW5ndGgpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBjYWxsYmFjayBvZiBtdXRhdG9yKSBjYWxsYmFjaygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0TVVUQVRPUlMuZGVsZXRlKGVsKTtcblx0XHRcdH1cblx0XHR9KS5vYnNlcnZlKGVsLCB7XG5cdFx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFtcImNsYXNzXCIsIFwiaGlkZGVuXCJdLFxuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRcdHN1YnRyZWU6IHRydWUsXG5cdFx0fSk7XG5cdH1cblx0bXV0YXRvci5wdXNoKCgpID0+IGNhbGxiYWNrKGVsZW1zIGFzIEhUTUxDb2xsZWN0aW9uT2Y8VD4pKTtcbn07XG5cbi8qKlxuICogb25Mb2FkZWRcbiAqIEBkZXNjcmlwdGlvbiBSdW5zIGEgY2FsbGJhY2sgd2hlbiB3aW5kb3cgaXMgbG9hZGVkIGluIGJyb3dzZXJcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcnVuIHdoZW4gdGhlIHBhZ2UgaXMgcmVhZHlcbiAqL1xuZXhwb3J0IGNvbnN0IG9uTG9hZGVkID0gKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB7XG5cdGlmICghSVNfQlJPV1NFUikgcmV0dXJuO1xuXHRjb25zdCBydW4gPSAoKSA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spOyAvLyBFbnN1cmUgd2UgcnVuIGFmdGVyIGFsbCBvdGhlciBsb2FkIGV2ZW50c1xuXHRpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSBydW4oKTtcblx0ZWxzZSBvbih3aW5kb3csIFwibG9hZFwiLCBydW4pO1xufTtcblxuLyoqXG4gKiBpc0lucHV0TGlrZVxuICogQGRlc2NyaXB0aW9uIENoZWNrIGlmIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKiBAcGFyYW0gZWwgVGhlIGVsZW1lbnQgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKi9cbmV4cG9ydCBjb25zdCBpc0lucHV0TGlrZSA9IChlbDogdW5rbm93bik6IGVsIGlzIEhUTUxJbnB1dEVsZW1lbnQgPT5cblx0ZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcInZhbGlkaXR5XCIgaW4gZWwgJiZcblx0IShlbCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KTtcblxuLyoqXG4gKiB0b0N1c3RvbUVsZW1lbnRQcm9wc1xuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBjb252ZXJ0IHByb3BzIHRvIGN1c3RvbSBlbGVtZW50IGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSBwcm9wcyBUaGUgcHJvcHMgdG8gY29udmVydFxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBwcm9wc1xuICovXG5leHBvcnQgY29uc3QgdG9DdXN0b21FbGVtZW50UHJvcHMgPSAoXG5cdHsgY2xhc3NOYW1lLCBoaWRkZW4sIG9wZW4sIC4uLnJlc3QgfTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdGtsYXNzPzogc3RyaW5nLFxuKSA9PiB7XG5cdHJlc3Quc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nID0gdHJ1ZTsgLy8gTWFrZSBOZXh0LmpzIGhhcHB5XG5cdHJlc3QuY2xhc3MgPSBjbHN4KGtsYXNzLCBjbGFzc05hbWUgfHwgXCJcIikgfHwgdW5kZWZpbmVkOyAvLyBVc2UgY2xhc3MgaW5zdGVhZCBvZiBjbGFzc05hbWVcblx0aWYgKGhpZGRlbikgcmVzdC5oaWRkZW4gPSB0cnVlOyAvLyBFbnN1cmUgYm9vbGVhbiBwcm9wIGJlaGF2aW91clxuXHRpZiAob3BlbikgcmVzdC5vcGVuID0gdHJ1ZTsgLy8gRW5zdXJlIGJvb2xlYW4gcHJvcCBiZWhhdmlvdXJcblx0cmV0dXJuIHJlc3Q7XG59O1xuIiwiaW1wb3J0IHsgSVNfQlJPV1NFUiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBNQVRPTU8gPSBcIm1hdHRpbHN5bmV0Lm1hdG9tby5jbG91ZFwiO1xubGV0IEVOQUJMRUQ6IEFuYWx5dGljc0FjdGlvbnNbXCJpbml0XCJdW1wiZW5hYmxlZFwiXSA9IHRydWU7XG5cbnR5cGUgTWF0b21vID0gKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4pW107XG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBXaW5kb3cge1xuXHRcdF9wYXE/OiBNYXRvbW9bXTtcblx0XHRfbXRtPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPltdO1xuXHR9XG59XG5cbi8vIHdpbmRvdy5fcGFxID0gd2luZG93Ll9wYXEgfHwgW107XG4vLyB3aW5kb3cuX210bSA9IHdpbmRvdy5fbXRtIHx8IFtdO1xuXG4vLyB3aW5kb3cuX3BhcS5wdXNoKFtcInNldEN1c3RvbVVybFwiLCBgJHtkb2N1bWVudC5sb2NhdGlvbi5ocmVmfSZlaXJpa2BdKTtcbi8vIHdpbmRvdy5fcGFxLnB1c2goW1wic2V0RG9jdW1lbnRUaXRsZVwiLCBcIkVpcmlrIDNcIl0pO1xuLy8gd2luZG93Ll9tdG0ucHVzaCh7XG4vLyBcdGV2ZW50OiBcIm10bS5TdGFydFwiLFxuLy8gXHRcIm10bS5zdGFydFRpbWVcIjogbmV3IERhdGUoKS5nZXRUaW1lKCksXG4vLyBcdGN1c3RvbVRpdGxlOiBcIkVpcmlrIDFcIixcbi8vIFx0Y3VzdG9tVXJsOiBgJHtkb2N1bWVudC5sb2NhdGlvbi5ocmVmfSZlaXJpa2AsXG4vLyB9KTtcblxuLy8gd2luZG93Ll9tdG0ucHVzaCh7XG4vLyBcdGV2ZW50OiBcIm10bS5QYWdlVmlld1wiLFxuLy8gXHRjdXN0b21UaXRsZTogXCJFaXJpayAyXCIsXG4vLyBcdGN1c3RvbVVybDogYCR7ZG9jdW1lbnQubG9jYXRpb24uaHJlZn0mZWlyaWtgLFxuLy8gfSk7XG5cbi8vIGNvbnN0IGNvbnRhaW5lcklkID0gXCJBOXV0S2szT1wiO1xuXG4vLyBkb2N1bWVudC5oZWFkLmFwcGVuZChcbi8vIFx0T2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpLCB7XG4vLyBcdFx0c3JjOiBgaHR0cHM6Ly9jZG4ubWF0b21vLmNsb3VkL21hdHRpbHN5bmV0Lm1hdG9tby5jbG91ZC9jb250YWluZXJfJHtjb250YWluZXJJZH0uanNgLFxuLy8gXHRcdGFzeW5jOiB0cnVlLFxuLy8gXHRcdG9ubG9hZDogKCkgPT4gY29uc29sZS5sb2cod2luZG93Ll9wYXEpLFxuLy8gXHR9KSxcbi8vICk7XG5cbmV4cG9ydCB0eXBlIEFuYWx5dGljc0FjdGlvbnMgPSB7XG5cdGluaXQ6IHtcblx0XHRtYXRvbW9JZDogbnVtYmVyIHwgc3RyaW5nO1xuXHRcdGVuYWJsZWQ/OiBib29sZWFuIHwgXCJkZWJ1Z1wiO1xuXHR9O1xuXHRwYWdldmlldzoge1xuXHRcdHVybD86IHN0cmluZztcblx0XHR0aXRsZT86IHN0cmluZztcblx0fTtcblx0ZXZlbnQ6IHtcblx0XHRjYXRlZ29yeTogc3RyaW5nO1xuXHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdG5hbWU/OiBzdHJpbmc7XG5cdFx0dmFsdWU/OiBudW1iZXI7XG5cdH07XG5cdHNlYXJjaDoge1xuXHRcdHF1ZXJ5OiBzdHJpbmc7XG5cdFx0Y2F0ZWdvcnk/OiBzdHJpbmc7XG5cdFx0cmVzdWx0cz86IG51bWJlcjtcblx0fTtcblx0bWF0b21vOiBNYXRvbW87XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYW5hbHl0aWNzPEFjdGlvbiBleHRlbmRzIGtleW9mIEFuYWx5dGljc0FjdGlvbnM+KFxuXHRhY3Rpb246IEFjdGlvbixcblx0YXJncyA9IHt9IGFzIEFuYWx5dGljc0FjdGlvbnNbQWN0aW9uXSxcbikge1xuXHRpZiAoIUlTX0JST1dTRVIpIHJldHVybjtcblx0aWYgKCF3aW5kb3cuX3BhcSkge1xuXHRcdHdpbmRvdy5fcGFxID0gW107XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJIZWF0bWFwU2Vzc2lvblJlY29yZGluZzo6ZGlzYWJsZVwiXSk7IC8vIERpc2FibGUgaGVhdG1hcHMgYnkgZGVmYXVsdCBhcyB0aGlzIHJlcXVpcmUgY29va2llc1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wiZW5hYmxlTGlua1RyYWNraW5nXCJdKTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldFRyYWNrZXJVcmxcIiwgYGh0dHBzOi8vJHtNQVRPTU99L21hdG9tby5waHBgXSk7XG5cdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignc2NyaXB0W3NyYyo9XCJtYXRvbW8uanNcIl0nKSB8fFxuXHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmQoXG5cdFx0XHRcdE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSwge1xuXHRcdFx0XHRcdGFzeW5jOiB0cnVlLFxuXHRcdFx0XHRcdHNyYzogYGh0dHBzOi8vY2RuLm1hdG9tby5jbG91ZC8ke01BVE9NT30vbWF0b21vLmpzYCxcblx0XHRcdFx0fSksXG5cdFx0XHQpO1xuXHR9XG5cdGlmIChhY3Rpb24gPT09IFwiaW5pdFwiKSB7XG5cdFx0Y29uc3QgeyBtYXRvbW9JZCwgZW5hYmxlZCA9IHRydWUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcImluaXRcIl07XG5cdFx0RU5BQkxFRCA9IGVuYWJsZWQ7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRTaXRlSWRcIiwgbWF0b21vSWRdKTtcblx0fVxuXG5cdGlmIChFTkFCTEVEID09PSBcImRlYnVnXCIpIHJldHVybiBjb25zb2xlLmluZm8oYEFuYWx5dGljczogXCIke2FjdGlvbn1cImAsIGFyZ3MpO1xuXHRpZiAoRU5BQkxFRCA9PT0gZmFsc2UgfHwgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lID09PSBcImxvY2FsaG9zdFwiKSByZXR1cm47XG5cblx0aWYgKGFjdGlvbiA9PT0gXCJwYWdldmlld1wiKSB7XG5cdFx0Y29uc3QgeyB1cmwsIHRpdGxlIH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJwYWdldmlld1wiXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldEN1c3RvbVVybFwiLCB1cmwgfHwgbG9jYXRpb24uaHJlZl0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0RG9jdW1lbnRUaXRsZVwiLCB0aXRsZSB8fCBkb2N1bWVudC50aXRsZV0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1widHJhY2tQYWdlVmlld1wiXSk7XG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcImV2ZW50XCIpIHtcblx0XHRjb25zdCB7IGNhdGVnb3J5LCBhY3Rpb24sIG5hbWUsIHZhbHVlIH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJldmVudFwiXTtcblx0XHRjb25zdCBldmVudCA9IFtcInRyYWNrRXZlbnRcIiwgY2F0ZWdvcnksIGFjdGlvbiwgbmFtZSwgdmFsdWVdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goZXZlbnQuZmlsdGVyKCh2KSA9PiB2ICE9PSB1bmRlZmluZWQpKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwic2VhcmNoXCIpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRxdWVyeSxcblx0XHRcdGNhdGVnb3J5ID0gZmFsc2UsXG5cdFx0XHRyZXN1bHRzID0gZmFsc2UsXG5cdFx0fSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcInNlYXJjaFwiXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInRyYWNrU2l0ZVNlYXJjaFwiLCBxdWVyeSwgY2F0ZWdvcnksIHJlc3VsdHNdKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwibWF0b21vXCIpIHtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcIm1hdG9tb1wiXSk7XG5cdH1cbn1cbiIsImNvbnN0IGdldFN0ZXBzID0gKFxuXHRub3c6IG51bWJlcixcblx0bWF4OiBudW1iZXIsXG5cdHNob3cgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXG4pID0+IHtcblx0Y29uc3Qgb2Zmc2V0ID0gKHNob3cgLSAxKSAvIDI7XG5cdGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoTWF0aC5taW4obm93IC0gTWF0aC5mbG9vcihvZmZzZXQpLCBtYXggLSBzaG93ICsgMSksIDEpO1xuXHRjb25zdCBlbmQgPSBNYXRoLm1pbihNYXRoLm1heChub3cgKyBNYXRoLmNlaWwob2Zmc2V0KSwgc2hvdyksIG1heCk7XG5cdGNvbnN0IHBhZ2VzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogZW5kICsgMSAtIHN0YXJ0IH0sIChfLCBpKSA9PiBpICsgc3RhcnQpO1xuXG5cdGlmIChzaG93ID4gNCAmJiBzdGFydCA+IDEpIHBhZ2VzLnNwbGljZSgwLCAyLCAxLCAwKTtcblx0aWYgKHNob3cgPiAzICYmIGVuZCA8IG1heCkgcGFnZXMuc3BsaWNlKC0yLCAyLCAwLCBtYXgpO1xuXHRyZXR1cm4gcGFnZXM7XG59O1xuXG5leHBvcnQgY29uc3QgcGFnaW5hdGlvbiA9ICh7IGN1cnJlbnQgPSAxLCB0b3RhbCA9IDEwLCBzaG93ID0gNyB9KSA9PiAoe1xuXHRwcmV2OiBjdXJyZW50ID4gMSA/IGN1cnJlbnQgLSAxIDogMCxcblx0bmV4dDogY3VycmVudCA8IHRvdGFsID8gY3VycmVudCArIDEgOiAwLFxuXHRwYWdlczogZ2V0U3RlcHMoY3VycmVudCwgdG90YWwsIHNob3cpLm1hcCgocGFnZSwgaW5kZXgpID0+ICh7XG5cdFx0Y3VycmVudDogcGFnZSA9PT0gY3VycmVudCAmJiAoXCJwYWdlXCIgYXMgY29uc3QpLFxuXHRcdGtleTogYGtleS0ke3BhZ2V9LSR7aW5kZXh9YCxcblx0XHRwYWdlLFxuXHR9KSksXG59KTtcbiIsImlmIChcblx0dHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHR3aW5kb3cuQ1NTU3R5bGVTaGVldCAmJlxuXHRkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHNcbilcblx0KCgpID0+IHtcblx0XHRjb25zdCBrZXkgPSBcIi0tbXRkcy1hcHAtZXhwYW5kZWRcIjtcblx0XHRjb25zdCBzaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cdFx0Y29uc3QgcHJldiA9ICgpID0+ICF3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KT8uaW5jbHVkZXMoXCJmYWxzZVwiKTtcblxuXHRcdGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5wdXNoKHNoZWV0KTtcblx0XHR3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkID0gKGZvcmNlKSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBuZXh0ID0gZm9yY2UgPz8gIXByZXYoKTtcblx0XHRcdFx0c2hlZXQucmVwbGFjZVN5bmM/LihgOnJvb3QgeyAke2tleX06IHZhcigke2tleX0tLSR7bmV4dH0pfWApO1xuXHRcdFx0XHR3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBuZXh0KTtcblx0XHRcdH0gY2F0Y2ggKF9lcnIpIHt9IC8vIGxvY2FsU3RvcmFnZSBpcyBmdWxsIG9yIHJlcGxhY2VTeW5jIGlzIG5vdCBzdXBwb3J0ZWRcblx0XHR9O1xuXG5cdFx0Ly8gU2V0IGFuZCBzdG9yZSBpbml0aWFsIHN0YXRlXG5cdFx0d2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZChwcmV2KCkpO1xuXHR9KSgpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGRlYm91bmNlLCBvbiwgb25Mb2FkZWQsIG9uTXV0YXRpb24sIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgXCIuL2FwcC10b2dnbGVcIjtcblxuY29uc3QgQ1NTX0FQUCA9IHN0eWxlcy5hcHAuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1NUSUNLWSA9IHN0eWxlcy5zdGlja3kuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1RPR0dMRSA9ICdbZGF0YS1jb21tYW5kPVwidG9nZ2xlLWFwcC1leHBhbmRlZFwiXSc7XG5jb25zdCBDU1NfU0lERUJBUiA9IGAuJHtDU1NfQVBQfSA+IGRpYWxvZywuJHtDU1NfQVBQfSBkaWFsb2cgfiBtYWluYDtcblxuY29uc3QgdXNlVHJhbnNpdGlvbiA9IChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4ge1xuXHRpZiAoIWRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24pIGNhbGxiYWNrKCk7XG5cdGVsc2UgZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbihjYWxsYmFjayk7XG59O1xuXG5leHBvcnQgY29uc3QgdG9nZ2xlQXBwRXhwYW5kZWQgPSAoZm9yY2U/OiBib29sZWFuKSA9PlxuXHQvLyBAdHMtZXhwZWN0LWVycm9yIHdpbmRvdy5tdGRzQXBwVG9nZ2xlIGNvbWVzIGZyb20gYXBwLXRvZ2dsZS5qc1xuXHR1c2VUcmFuc2l0aW9uKCgpID0+IHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQ/Lihmb3JjZSkpO1xuXG5mdW5jdGlvbiBoYW5kbGVUb2dnbGVDbGljayh7IHRhcmdldDogZWwsIGRlZmF1bHRQcmV2ZW50ZWQ6IHN0b3AgfTogRXZlbnQpIHtcblx0aWYgKHN0b3AgfHwgIShlbCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KSB8fCAhZWwubWF0Y2hlcyhDU1NfVE9HR0xFKSlcblx0XHRyZXR1cm47XG5cdGlmIChnZXRDb21wdXRlZFN0eWxlKGVsKS5wb3NpdGlvbiA9PT0gXCJzdGlja3lcIikgcmV0dXJuIHRvZ2dsZUFwcEV4cGFuZGVkKCk7XG5cdHVzZVRyYW5zaXRpb24oKCkgPT4ge1xuXHRcdGNvbnN0IHNpZGViYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaWFsb2dFbGVtZW50PihDU1NfU0lERUJBUik7XG5cdFx0c2lkZWJhcj8uc2V0QXR0cmlidXRlKFwiZGF0YS1jbG9zZWRieVwiLCBcImFueVwiKTsgLy8gQWxsb3cgY2xvc2luZyBieSBjbGlja2luZyBvdXRzaWRlXG5cdFx0c2lkZWJhcj8uc2hvd01vZGFsKCk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVSZXNpemUoKSB7XG5cdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpYWxvZ0VsZW1lbnQ+KENTU19TSURFQkFSKT8uY2xvc2UoKTtcbn1cblxuLy8gU2Nyb2xsIHN0YXRlXG5sZXQgTUlOX1kgPSAwOyAvLyBPZmZzZXQgdG8gYXZvaWQgc2Nyb2xsIGp1bXAgd2hlbiBzdGlja3kgaXMgc2V0IHRvIHJlbGF0aXZlXG5sZXQgU0NST0xMX1VQOiBib29sZWFuO1xubGV0IFNUSUNLID0gMDsgLy8gLTEgPSBzdGljayB0b3AsIDAgPSByZWxhdGl2ZSwgMSA9IHN0aWNrIGJvdHRvbVxubGV0IFNUSUNLX0VMOiBIVE1MRWxlbWVudDtcbmxldCBTVElDS19IID0gMDtcbmxldCBTVElDS19ZID0gMDtcbmxldCBTVFVDSyA9IGZhbHNlOyAvLyBVc2VkIHRvIGZpZ3VyZSBpZiBuYXYgaXMgbGFyZ2VyIHRoYW4gdmlld3BvcnRcbmxldCBXSU5fSCA9IDA7XG5sZXQgV0lOX1kgPSAwO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihbc3RpY2t5XTogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0U1RJQ0tfRUwgPSBzdGlja3k7XG5cdGhhbmRsZVNjcm9sbCgpOyAvLyBSdW4gb24gY29ubmVjdFxufVxuXG5mdW5jdGlvbiBoYW5kbGVTY3JvbGwoKSB7XG5cdGlmICghU1RJQ0tfRUw/LmlzQ29ubmVjdGVkKSByZXR1cm47XG5cdGNvbnN0IE5FWFRfWSA9IHdpbmRvdy5zY3JvbGxZO1xuXHRjb25zdCBORVhUX1VQID0gTkVYVF9ZIDwgV0lOX1k7XG5cdFdJTl9ZID0gTkVYVF9ZO1xuXG5cdC8vIE9ubHkgY2FsY3VsYXRlIGlmIHNjcm9sbCBkaXJlY3Rpb24gaGFzIGNoYW5nZWRcblx0aWYgKE5FWFRfVVAgIT09IFNDUk9MTF9VUCkge1xuXHRcdE1JTl9ZID0gKFNUSUNLX0VMLnBhcmVudEVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCB8fCAwKSArIFdJTl9ZO1xuXHRcdFNDUk9MTF9VUCA9IE5FWFRfVVA7XG5cdFx0U1RJQ0tfSCA9IFNUSUNLX0VMLm9mZnNldEhlaWdodDtcblx0XHRTVElDS19ZID0gU1RJQ0tfRUwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgV0lOX1k7XG5cdFx0U1RVQ0sgPSBTVElDS19FTC5vZmZzZXRIZWlnaHQgPD0gd2luZG93LmlubmVySGVpZ2h0O1xuXHRcdFdJTl9IID0gd2luZG93LmlubmVySGVpZ2h0O1xuXHR9XG5cblx0aWYgKFNUSUNLID09PSAtMSAmJiBTVFVDSykgcmV0dXJuOyAvLyBBbGx3YXlzIHN0aWNreSB3aGVuIHNpZGViYXIgaXMgc21hbGxlciB0aGFuIHZpZXdwb3J0XG5cdGlmIChTVElDSyAhPT0gLTEgJiYgKFNUVUNLIHx8IChTQ1JPTExfVVAgJiYgV0lOX1kgPD0gU1RJQ0tfWSkpKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInN0aWNreVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIFwiMHB4XCIpO1xuXHRcdFNUSUNLID0gLTE7IC8vIE5vdCBzdGlja2luZyB0byB0b3AgYW5kIHNpZGViYXIgaXMgc21hbGxlciB0aGFuIHZpZXdwb3J0IG9yIHNjcm9sbGluZyB1cFxuXHR9IGVsc2UgaWYgKFNUSUNLID09PSAtMSAmJiAhU0NST0xMX1VQKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInJlbGF0aXZlXCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7TWF0aC5tYXgoMCwgV0lOX1kgLSBNSU5fWSl9cHhgKTtcblx0XHRTVElDSyA9IDA7IC8vIFN0aWNraW5nIHRvIHRvcCBhbmQgc2Nyb2xsaW5nIGRvd25cblx0fSBlbHNlIGlmIChTVElDSyAhPT0gMSAmJiAhU0NST0xMX1VQICYmIFdJTl9ZICsgV0lOX0ggPj0gU1RJQ0tfWSArIFNUSUNLX0gpIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwic3RpY2t5XCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7V0lOX0ggLSBTVElDS19IfXB4YCk7XG5cdFx0U1RJQ0sgPSAxOyAvLyBOb3Qgc3RpY2tpbmcgdG8gYm90dG9tIGFuZCBzY3JvbGxpbmcgZG93blxuXHR9IGVsc2UgaWYgKFNUSUNLID09PSAxICYmIFNDUk9MTF9VUCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJyZWxhdGl2ZVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke1NUSUNLX1kgLSBNSU5fWX1weGApO1xuXHRcdFNUSUNLID0gMDsgLy8gU3RpY2tpbmcgdG8gYm90dG9tIGFuZCBzY3JvbGxpbmcgdXBcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfU1RJQ0tZLCBoYW5kbGVNdXRhdGlvbik7XG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZVRvZ2dsZUNsaWNrLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJyZXNpemVcIiwgZGVib3VuY2UoaGFuZGxlUmVzaXplLCAxMDApLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJzY3JvbGxcIiwgaGFuZGxlU2Nyb2xsLCBRVUlDS19FVkVOVCk7XG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfQlJFQURDUlVNQlMgPSBzdHlsZXMuYnJlYWRjcnVtYnMuc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihicmVhZGNydW1iczogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0Zm9yIChjb25zdCBicmVhZGN1bWJzIG9mIGJyZWFkY3J1bWJzKVxuXHRcdGJyZWFkY3VtYnMucXVlcnlTZWxlY3RvckFsbChcImxpIGFcIikuZm9yRWFjaCgoY3J1bWIsIGluZGV4LCB7IGxlbmd0aCB9KSA9PiB7XG5cdFx0XHRhdHRyKGNydW1iLCBcImFyaWEtY3VycmVudFwiLCBpbmRleCA9PT0gbGVuZ3RoIC0gMSA/IFwicGFnZVwiIDogbnVsbCk7XG5cdFx0fSk7XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfQlJFQURDUlVNQlMsIGhhbmRsZU11dGF0aW9uKSxcbik7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0YXR0cixcblx0Y3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcixcblx0SVNfQlJPV1NFUixcblx0b24sXG5cdG9uTG9hZGVkLFxuXHRRVUlDS19FVkVOVCxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19ESUFMT0cgPSBzdHlsZXMuZGlhbG9nLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IERJQUxPR1MgPSBJU19CUk9XU0VSXG5cdD8gKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG5cdFx0XHRDU1NfRElBTE9HLFxuXHRcdCkgYXMgSFRNTENvbGxlY3Rpb25PZjxIVE1MRGlhbG9nRWxlbWVudD4pXG5cdDogW107XG5cbmNvbnN0IGhhbmRsZU1vZGFsID0gKCkgPT4ge1xuXHRmb3IgKGNvbnN0IGRpYWxvZyBvZiBESUFMT0dTKVxuXHRcdGlmIChkaWFsb2cuaXNDb25uZWN0ZWQgJiYgZGlhbG9nLnNob3dNb2RhbCAmJiBkaWFsb2cuY2xvc2UpIHtcblx0XHRcdGlmIChkaWFsb2cubWF0Y2hlcygnW29wZW5dOm5vdChbZGF0YS1tb2RhbD1cImZhbHNlXCJdKTpub3QoOm1vZGFsKScpKSB7XG5cdFx0XHRcdGF0dHIoZGlhbG9nLCBcIm9wZW5cIiwgbnVsbCk7IC8vIFVzaW5nIGF0dHJpYnV0ZSBpbnN0ZWFkIG9mIC5jbG9zZSB0byBhdm9pZCBgY2xvc2VgIGV2ZW50XG5cdFx0XHRcdGRpYWxvZy5zaG93TW9kYWwoKTtcblx0XHRcdH0gZWxzZSBpZiAoZGlhbG9nLm1hdGNoZXMoXCI6bW9kYWw6bm90KFtvcGVuXSlcIikpIHtcblx0XHRcdFx0YXR0cihkaWFsb2csIFwib3BlblwiLCBcIlwiKTsgLy8gU2V0IGFzIG9wZW5cblx0XHRcdFx0ZGlhbG9nLmNsb3NlKCk7IC8vIFNvIHdlIGNvcnJlY2x0eSBjYW4gY2FsbCAuY2xvc2UsIHJlbW92aW5nIDxkaWFsb2c+IGZyb20gI3RvcC1sYXllclxuXHRcdFx0fVxuXHRcdH1cbn07XG5cbmNvbnN0IGhhbmRsZUNsaWNrID0gKHsgY2xpZW50WDogeCwgY2xpZW50WTogeSwgdGFyZ2V0OiBlbCB9OiBNb3VzZUV2ZW50KSA9PiB7XG5cdGlmIChlbCBpbnN0YW5jZW9mIEhUTUxEaWFsb2dFbGVtZW50ICYmIGF0dHIoZWwsIFwiZGF0YS1jbG9zZWRieVwiKSA9PT0gXCJhbnlcIikge1xuXHRcdGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRjb25zdCBpc0luc2lkZSA9IHRvcCA8PSB5ICYmIHkgPD0gYm90dG9tICYmIGxlZnQgPD0geCAmJiB4IDw9IHJpZ2h0O1xuXG5cdFx0aWYgKCFpc0luc2lkZSkgZWwuY2xvc2UoKTtcblx0fSBlbHNlIGlmIChcblx0XHRlbCBpbnN0YW5jZW9mIEVsZW1lbnQgJiZcblx0XHRlbC5jbG9zZXN0KCdidXR0b25bZGF0YS1jb21tYW5kPVwiY2xvc2VcIl0nKVxuXHQpIHtcblx0XHRlbD8uY2xvc2VzdChcImRpYWxvZ1wiKT8uY2xvc2UoKTtcblx0fVxufTtcblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVDbGljayBhcyBFdmVudExpc3RlbmVyLCBRVUlDS19FVkVOVCk7XG5cdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoaGFuZGxlTW9kYWwpLm9ic2VydmUoXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXHRcdHtcblx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogW1wib3BlblwiXSxcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdH0sXG5cdCk7XG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbiwgb25Mb2FkZWQsIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmZ1bmN0aW9uIGhhbmRsZUluamVjdChldmVudDogRXZlbnQgJiB7IGFuaW1hdGlvbk5hbWU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSAhPT0gc3R5bGVzLl9lcnJvcnN1bW1hcnkpIHJldHVybjtcblx0Y29uc3QgZmlyc3QgPSAoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpPy5maXJzdEVsZW1lbnRDaGlsZDtcblxuXHRpZiAoZmlyc3QgaW5zdGFuY2VvZiBIVE1MSGVhZGluZ0VsZW1lbnQpIHtcblx0XHRhdHRyKGZpcnN0LCBcInRhYmluZGV4XCIsIFwiLTFcIik7XG5cdFx0Zmlyc3QuZm9jdXMoKTsgLy8gQXV0b2ZvY3VzIGZpcnN0IGhlYWRpbmdcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiBvbihkb2N1bWVudCwgXCJhbmltYXRpb25lbmRcIiwgaGFuZGxlSW5qZWN0LCBRVUlDS19FVkVOVCkpO1xuIiwidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuXG4vLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfQU5EUk9JRCA9IElTX0JST1dTRVIgJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFNBRkVfTEFCRUxMRURCWSA9IGAke0lTX0FORFJPSUQgPyBcImRhdGFcIiA6IFwiYXJpYVwifS1sYWJlbGxlZGJ5YDtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgRk9DVVNfT1VUTElORSA9IFwib3V0bGluZTogMXB4IGRvdHRlZDsgb3V0bGluZTogNXB4IGF1dG8gSGlnaGxpZ2h0OyBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3JcIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgLy8gVW5uYW1lZCBzbG90IGRvZXMgYXV0b21hdGljYWxseSByZW5kZXIgYWxsIHRvcCBlbGVtZW50IG5vZGVzXG4gIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBjc3MpXG4pO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChfZXJyKSB7XG4gIH1cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgKGRldGFpbCkgPT4gZWxlbWVudC5oYW5kbGVFdmVudCh7IHR5cGU6IFwibXV0YXRpb25cIiwgZGV0YWlsIH0pXG4gICAgKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIG9ic2VydmVycy5zZXQoZWxlbWVudCwgb2JzZXJ2ZXIpO1xuICB9XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcbnZhciBMSVZFO1xudmFyIExJVkVfU1JfRklYID0gMDtcbnZhciBzcGVhayA9ICh0ZXh0KSA9PiB7XG4gIGlmICghTElWRSkge1xuICAgIExJVkUgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIExJVkUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246Zml4ZWQ7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXBcIjtcbiAgICBhdHRyKExJVkUsIFwiYXJpYS1saXZlXCIsIFwiYXNzZXJ0aXZlXCIpO1xuICB9XG4gIGlmICghTElWRS5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmQoTElWRSk7XG4gIGlmICh0ZXh0KSBMSVZFLnRleHRDb250ZW50ID0gYCR7dGV4dH0ke0xJVkVfU1JfRklYKysgJSAyID8gXCJcXHhBMFwiIDogXCJcIn1gO1xufTtcbnZhciBzZXRWYWx1ZSA9IChpbnB1dCwgZGF0YSwgdHlwZSA9IFwiXCIpID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSwgZGF0YSwgaW5wdXRUeXBlOiB0eXBlIH07XG4gIGNvbnN0IHByb3RvID0gSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGU7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJiZWZvcmVpbnB1dFwiLCBldmVudCkpO1xuICAoX2IgPSAoX2EyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgXCJ2YWx1ZVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5zZXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKGlucHV0LCBkYXRhKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImlucHV0XCIsIGV2ZW50KSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiY2hhbmdlXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG59O1xudmFyIElTX1BSRVNTID0gZmFsc2U7XG52YXIgaXNNb3VzZURvd24gPSAoZXZlbnQpID0+IHtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2V1cFwiKSBJU19QUkVTUyA9IGZhbHNlO1xuICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gXCJtb3VzZWRvd25cIikge1xuICAgIElTX1BSRVNTID0gdHJ1ZTtcbiAgICBvbihkb2N1bWVudCwgXCJtb3VzZXVwXCIsIGlzTW91c2VEb3duLCB7IG9uY2U6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIElTX1BSRVNTO1xufTtcblxuLy8gdS1vcHRpb24udHNcbnZhciBESVNBQkxFRCA9IFwiZGlzYWJsZWRcIjtcbnZhciBTRUxFQ1RFRCA9IFwic2VsZWN0ZWRcIjtcbnZhciBVSFRNTE9wdGlvbkVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbRElTQUJMRUQsIFNFTEVDVEVEXTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoIUlTX0lPUykgdGhpcy50YWJJbmRleCA9IC0xO1xuICAgIGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoXCJyb2xlXCIpKSBhdHRyKHRoaXMsIFwicm9sZVwiLCBcIm9wdGlvblwiKTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1kaXNhYmxlZFwiLCBgJHt0aGlzLmRpc2FibGVkfWApO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXNlbGVjdGVkXCIsIGAke3RoaXMuc2VsZWN0ZWR9YCk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHdoZXRoZXIgdGhlIG9wdGlvbiBpbiB0aGUgbGlzdCBib3ggaXMgdGhlIGRlZmF1bHQgaXRlbS4gKi9cbiAgZ2V0IGRlZmF1bHRTZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpc1tTRUxFQ1RFRF07XG4gIH1cbiAgc2V0IGRlZmF1bHRTZWxlY3RlZCh2YWx1ZSkge1xuICAgIHRoaXNbU0VMRUNURURdID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGRpc2FibGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIERJU0FCTEVEKSAhPT0gbnVsbDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIERJU0FCTEVELCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICAvKiogUmV0cmlldmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBmb3JtIHRoYXQgdGhlIG9iamVjdCBpcyBlbWJlZGRlZCBpbi4gKi9cbiAgZ2V0IGZvcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdChcImZvcm1cIik7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSBvcmRpbmFsIHBvc2l0aW9uIG9mIGFuIG9wdGlvbiBpbiBhIGxpc3QgYm94LiAqL1xuICBnZXQgaW5kZXgoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uKChfYTIgPSB0aGlzLnBhcmVudEVsZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIub3B0aW9ucykgfHwgW3RoaXNdXG4gICAgXS5pbmRleE9mKHRoaXMpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyBhIHZhbHVlIHRoYXQgeW91IGNhbiB1c2UgdG8gaW1wbGVtZW50IHlvdXIgb3duIGxhYmVsIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBvYmplY3QuICovXG4gIGdldCBsYWJlbCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoX2EyID0gYXR0cih0aGlzLCBcImxhYmVsXCIpKSAhPSBudWxsID8gX2EyIDogdGhpcy50ZXh0O1xuICB9XG4gIHNldCBsYWJlbCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJsYWJlbFwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIFNFTEVDVEVEKSAhPT0gbnVsbDtcbiAgfVxuICBzZXQgc2VsZWN0ZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFNFTEVDVEVELCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIHRleHQgc3RyaW5nIHNwZWNpZmllZCBieSB0aGUgb3B0aW9uIHRhZy4gKi9cbiAgZ2V0IHRleHQoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKChfYTIgPSB0aGlzLnRleHRDb250ZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKSkgfHwgXCJcIjtcbiAgfVxuICBzZXQgdGV4dCh0ZXh0KSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHRleHQ7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSB2YWx1ZSB3aGljaCBpcyByZXR1cm5lZCB0byB0aGUgc2VydmVyIHdoZW4gdGhlIGZvcm0gY29udHJvbCBpcyBzdWJtaXR0ZWQuICovXG4gIGdldCB2YWx1ZSgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoX2EyID0gYXR0cih0aGlzLCBcInZhbHVlXCIpKSAhPSBudWxsID8gX2EyIDogdGhpcy50ZXh0O1xuICB9XG4gIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gIH1cbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LW9wdGlvblwiLCBVSFRNTE9wdGlvbkVsZW1lbnQpO1xuXG4vLyB1LWRhdGFsaXN0LnRzXG52YXIgTElWRV9USU1FUjtcbnZhciBJTlBVVF9ERUJPVU5DRSA9IDA7XG52YXIgSVNfTU9CSUxFID0gSVNfSU9TIHx8IElTX0FORFJPSUQ7XG52YXIgRVZFTlRTID0gXCJjbGljayxmb2N1c291dCxpbnB1dCxrZXlkb3duLG1vdXNlZG93bixtb3VzZXVwXCI7XG52YXIgRVZFTlRTX0lOUFVUID0gXCJmb2N1cyxmb2N1c2luLGJsdXIsZm9jdXNvdXRcIjtcbnZhciBURVhUUyA9IHtcbiAgc2luZ3VsYXI6IFwiJWQgaGl0XCIsXG4gIHBsdXJhbDogXCIlZCBoaXRzXCJcbn07XG52YXIgVUhUTUxEYXRhTGlzdEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fdGV4dHMgPSBfX3NwcmVhZFZhbHVlcyh7fSwgVEVYVFMpO1xuICAgIHRoaXMuX3ZhbHVlID0gXCJcIjtcbiAgICBhdHRhY2hTdHlsZShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtESVNQTEFZX0JMT0NLfVxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uKSB7IGRpc3BsYXk6IGJsb2NrOyBjdXJzb3I6IHBvaW50ZXIgfVxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uOmZvY3VzKSB7ICR7Rk9DVVNfT1VUTElORX0gfVxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uW2FyaWEtaGlkZGVuPVwidHJ1ZVwiXSksXG5cdFx0XHQ6OnNsb3R0ZWQodS1vcHRpb25bZGlzYWJsZWRdKSxcblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvbltoaWRkZW5dKSB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudCB9YFxuICAgICk7XG4gIH1cbiAgLy8gVXNlZCB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IGFubm91bmNlbWVudHNcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImlkXCIsIC4uLk9iamVjdC5rZXlzKFRFWFRTKS5tYXAoKGtleSkgPT4gYGRhdGEtc3ItJHtrZXl9YCldO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuaGlkZGVuID0gdHJ1ZTtcbiAgICB0aGlzLl9yb290ID0gZ2V0Um9vdCh0aGlzKTtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcImxpc3Rib3hcIik7XG4gICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIFwiLTFcIik7XG4gICAgb24odGhpcy5fcm9vdCwgXCJmb2N1c2luXCIsIHRoaXMpO1xuICAgIG9uKHRoaXMuX3Jvb3QsIFwiZm9jdXNcIiwgdGhpcywgdHJ1ZSk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7XG4gICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFtcImRpc2FibGVkXCIsIFwiaGlkZGVuXCIsIFwibGFiZWxcIiwgXCJ2YWx1ZVwiXSxcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxuICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgc3VidHJlZTogdHJ1ZVxuICAgIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgb2ZmKHRoaXMuX3Jvb3QgfHwgdGhpcywgXCJmb2N1c1wiLCB0aGlzLCB0cnVlKTtcbiAgICBvZmYodGhpcy5fcm9vdCB8fCB0aGlzLCBcImZvY3VzaW5cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gICAgZGlzY29ubmVjdElucHV0KHRoaXMpO1xuICAgIHRoaXMuX3Jvb3QgPSB2b2lkIDA7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIF9wcmV2LCBuZXh0KSB7XG4gICAgY29uc3QgdGV4dCA9IHByb3AgPT0gbnVsbCA/IHZvaWQgMCA6IHByb3Auc3BsaXQoXCJkYXRhLXNyLVwiKVsxXTtcbiAgICBjb25zdCBjc3MgPSBgaW5wdXRbbGlzdD1cIiR7dGhpcy5pZH1cIl1gO1xuICAgIGlmIChURVhUU1t0ZXh0XSkgdGhpcy5fdGV4dHNbdGV4dF0gPSBuZXh0IHx8IFRFWFRTW3RleHRdO1xuICAgIGVsc2UgaWYgKHRoaXMuX3Jvb3QpXG4gICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIHRoaXMuX3Jvb3QucXVlcnlTZWxlY3RvckFsbChjc3MpKVxuICAgICAgICBzZXR1cElucHV0KHRoaXMsIGlucHV0KTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHsgdGFyZ2V0LCB0eXBlIH0gPSBldmVudDtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmICh0eXBlID09PSBcImNsaWNrXCIpIG9uQ2xpY2sodGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImZvY3VzXCIgfHwgdHlwZSA9PT0gXCJmb2N1c2luXCIpIG9uRm9jdXModGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImJsdXJcIiB8fCB0eXBlID09PSBcImZvY3Vzb3V0XCIpIG9uQmx1cih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwia2V5ZG93blwiKSBvbktleURvd24odGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiICYmIHRoaXMuY29udGFpbnModGFyZ2V0KSlcbiAgICAgIGlzTW91c2VEb3duKGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJtdXRhdGlvblwiIHx8IHR5cGUgPT09IFwiaW5wdXRcIikge1xuICAgICAgY2xlYXJUaW1lb3V0KElOUFVUX0RFQk9VTkNFKTtcbiAgICAgIElOUFVUX0RFQk9VTkNFID0gc2V0VGltZW91dChvbklucHV0LCAwLCB0aGlzLCBldmVudCk7XG4gICAgfVxuICB9XG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidS1vcHRpb25cIik7XG4gIH1cbn07XG52YXIgc2V0RXhwYW5kZWQgPSAoc2VsZiwgb3BlbikgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgaWYgKHNlbGYuaGlkZGVuICE9PSBvcGVuKSByZXR1cm47XG4gIHNlbGYuaGlkZGVuID0gIW9wZW47XG4gIChfYTIgPSBtdXRhdGlvbk9ic2VydmVyKHNlbGYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRha2VSZWNvcmRzKCk7XG4gIGlmIChzZWxmLl9pbnB1dCkgc2V0dXBJbnB1dChzZWxmLCBzZWxmLl9pbnB1dCwgb3Blbik7XG4gIGlmIChzZWxmLnBvcG92ZXIgJiYgKChfYiA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuaXNDb25uZWN0ZWQpKSB7XG4gICAgYXR0cihzZWxmLl9pbnB1dCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKHNlbGYpKTtcbiAgICBhdHRyKHNlbGYsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcbiAgICBzZWxmLnRvZ2dsZVBvcG92ZXIob3Blbik7XG4gIH1cbiAgaWYgKG9wZW4pIG9uSW5wdXQoc2VsZik7XG59O1xudmFyIGRpc2Nvbm5lY3RJbnB1dCA9IChzZWxmKSA9PiB7XG4gIGlmICghc2VsZi5faW5wdXQpIHJldHVybjtcbiAgb2ZmKHNlbGYuX2lucHV0IHx8IHNlbGYsIEVWRU5UU19JTlBVVCwgc2VsZik7XG4gIG9mZihzZWxmLl9yb290IHx8IHNlbGYsIEVWRU5UUywgc2VsZik7XG4gIHNldEV4cGFuZGVkKHNlbGYsIGZhbHNlKTtcbiAgc2VsZi5faW5wdXQgPSB2b2lkIDA7XG59O1xudmFyIHNldHVwSW5wdXQgPSAoc2VsZiwgaW5wdXQsIG9wZW4gPSBmYWxzZSkgPT4ge1xuICBvbihpbnB1dCwgRVZFTlRTX0lOUFVULCBzZWxmLCB0cnVlKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWF1dG9jb21wbGV0ZVwiLCBcImxpc3RcIik7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1jb250cm9sc1wiLCB1c2VJZChzZWxmKSk7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1leHBhbmRlZFwiLCBgJHtJU19NT0JJTEUgPyBvcGVuIDogXCJ0cnVlXCJ9YCk7XG4gIGF0dHIoaW5wdXQsIFwiYXV0b2NvbXBsZXRlXCIsIFwib2ZmXCIpO1xuICBhdHRyKGlucHV0LCBcInJvbGVcIiwgXCJjb21ib2JveFwiKTtcbn07XG52YXIgb25Gb2N1cyA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCBpc0lucHV0ID0gZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudDtcbiAgaWYgKGlzSW5wdXQgJiYgZXZlbnQuaXNUcnVzdGVkKSBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgaWYgKHNlbGYuX2lucHV0ICE9PSBldmVudC50YXJnZXQgJiYgaXNJbnB1dCAmJiBldmVudC50YXJnZXQubGlzdCA9PT0gc2VsZikge1xuICAgIGlmIChzZWxmLl9pbnB1dCkgZGlzY29ubmVjdElucHV0KHNlbGYpO1xuICAgIHNlbGYuX2lucHV0ID0gZXZlbnQudGFyZ2V0O1xuICAgIHNlbGYuX2lucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJmb2N1c1wiKSk7XG4gICAgc2VsZi5faW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImZvY3VzaW5cIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICBhdHRyKHNlbGYsIFNBRkVfTEFCRUxMRURCWSwgdXNlSWQoKF9hMiA9IHNlbGYuX2lucHV0LmxhYmVscykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMlswXSkpO1xuICAgIG9uKHNlbGYuX3Jvb3QgfHwgc2VsZiwgRVZFTlRTLCBzZWxmKTtcbiAgICBzZXRFeHBhbmRlZChzZWxmLCB0cnVlKTtcbiAgICBzcGVhaygpO1xuICB9XG59O1xudmFyIG9uQmx1ciA9IChzZWxmLCBldmVudCkgPT4ge1xuICBpZiAoIUlTX0FORFJPSUQgJiYgIWlzTW91c2VEb3duKCkgJiYgc2VsZi5faW5wdXQpXG4gICAgc2V0VGltZW91dChvbkJsdXJyZWQsIDAsIHNlbGYpO1xuICBpZiAoZXZlbnQudGFyZ2V0ID09PSBzZWxmLl9pbnB1dCAmJiBldmVudC5pc1RydXN0ZWQpXG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59O1xudmFyIG9uQmx1cnJlZCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSAoKF9hMiA9IHNlbGYuX3Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuYWN0aXZlRWxlbWVudCkgfHwgbnVsbDtcbiAgY29uc3QgaW5wdXQgPSBzZWxmLl9pbnB1dDtcbiAgaWYgKGlucHV0ICYmIGlucHV0ICE9PSByZWxhdGVkVGFyZ2V0ICYmICFzZWxmLmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImJsdXJcIiwgeyByZWxhdGVkVGFyZ2V0IH0pKTtcbiAgICBpbnB1dC5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEZvY3VzRXZlbnQoXCJmb2N1c291dFwiLCB7IGJ1YmJsZXM6IHRydWUsIHJlbGF0ZWRUYXJnZXQgfSlcbiAgICApO1xuICAgIGRpc2Nvbm5lY3RJbnB1dChzZWxmKTtcbiAgfVxufTtcbnZhciBvbkNsaWNrID0gKHNlbGYsIHsgdGFyZ2V0IH0pID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKCFzZWxmLl9pbnB1dCB8fCBzZWxmLl9pbnB1dCA9PT0gdGFyZ2V0KSByZXR1cm4gc2V0RXhwYW5kZWQoc2VsZiwgdHJ1ZSk7XG4gIGZvciAoY29uc3Qgb3B0IG9mIHNlbGYub3B0aW9ucylcbiAgICBpZiAob3B0LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgIGlmIChhdHRyKHNlbGYsIFwiYXJpYS1tdWx0aXNlbGVjdGFibGVcIikgIT09IFwidHJ1ZVwiKSB7XG4gICAgICAgIChfYTIgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xuICAgICAgICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2V0VmFsdWUoc2VsZi5faW5wdXQsIG9wdC52YWx1ZSk7XG4gICAgfVxuICBpZiAoSVNfQU5EUk9JRCkgb25CbHVycmVkKHNlbGYpO1xufTtcbnZhciBvbktleURvd24gPSAoc2VsZiwgZSkgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoZS5hbHRLZXkgfHwgZS5jdHJsS2V5IHx8IGUubWV0YUtleSB8fCBlLnNoaWZ0S2V5IHx8IGUua2V5ID09PSBcIlRhYlwiKVxuICAgIHJldHVybjtcbiAgc2V0RXhwYW5kZWQoc2VsZiwgZS5rZXkgIT09IFwiRXNjYXBlXCIpO1xuICBjb25zdCB7IGtleSwgdGFyZ2V0IH0gPSBlO1xuICBjb25zdCBvcHRpb25zID0gWy4uLnNlbGYub3B0aW9uc10uZmlsdGVyKFxuICAgIChlbCkgPT4gYXR0cihlbCwgXCJhcmlhLWhpZGRlblwiKSAhPT0gXCJ0cnVlXCIgJiYgZWwub2Zmc2V0SGVpZ2h0XG4gICk7XG4gIGNvbnN0IHByZXYgPSBvcHRpb25zLmluZGV4T2YodGFyZ2V0KTtcbiAgbGV0IG5leHQgPSAtMTtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIikgbmV4dCA9IChwcmV2ICsgMSkgJSBvcHRpb25zLmxlbmd0aDtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd1VwXCIpIG5leHQgPSAofnByZXYgPyBwcmV2IDogb3B0aW9ucy5sZW5ndGgpIC0gMTtcbiAgaWYgKH5wcmV2KSB7XG4gICAgaWYgKGtleSA9PT0gXCJIb21lXCIgfHwga2V5ID09PSBcIlBhZ2VVcFwiKSBuZXh0ID0gMDtcbiAgICBpZiAoa2V5ID09PSBcIkVuZFwiIHx8IGtleSA9PT0gXCJQYWdlRG93blwiKSBuZXh0ID0gb3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIGlmIChrZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgb3B0aW9uc1twcmV2XS5jbGljaygpO1xuICAgICAgcmV0dXJuIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbiAgaWYgKG9wdGlvbnNbbmV4dF0pIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIG9wdGlvbi50YWJJbmRleCA9IC0xO1xuICBpZiAob3B0aW9uc1tuZXh0XSkgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAoX2EyID0gb3B0aW9uc1tuZXh0XSB8fCBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xufTtcbnZhciBvbklucHV0ID0gKHNlbGYsIGUpID0+IHtcbiAgY29uc3QgeyBfdGV4dHMsIF9yb290LCBfaW5wdXQsIG9wdGlvbnMgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gKF9pbnB1dCA9PSBudWxsID8gdm9pZCAwIDogX2lucHV0LnZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBmaWx0ZXIgPSAhc2VsZi5oYXNBdHRyaWJ1dGUoXCJkYXRhLW5vZmlsdGVyXCIpO1xuICBjb25zdCBoaWRkZW4gPSBbXTtcbiAgY29uc3QgdmlzaWJsZSA9IFtdO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKSB7XG4gICAgY29uc3QgaGlkZSA9IG9wdC5kaXNhYmxlZCB8fCBvcHQuaGlkZGVuIHx8IGZpbHRlciAmJiAhb3B0LmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModmFsdWUpO1xuICAgIChoaWRlID8gaGlkZGVuIDogdmlzaWJsZSkucHVzaChvcHQpO1xuICB9XG4gIGZvciAoY29uc3Qgb3B0IG9mIGhpZGRlbikgYXR0cihvcHQsIFwiYXJpYS1oaWRkZW5cIiwgXCJ0cnVlXCIpO1xuICBmb3IgKGNvbnN0IG9wdCBvZiB2aXNpYmxlKSBhdHRyKG9wdCwgXCJhcmlhLWhpZGRlblwiLCBcImZhbHNlXCIpO1xuICBjb25zdCB0b3RhbCA9IHZpc2libGUubGVuZ3RoO1xuICBjbGVhclRpbWVvdXQoTElWRV9USU1FUik7XG4gIGlmICgoZSA9PSBudWxsID8gdm9pZCAwIDogZS50eXBlKSA9PT0gXCJpbnB1dFwiICYmIHZhbHVlICE9PSBzZWxmLl92YWx1ZSlcbiAgICBMSVZFX1RJTUVSID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gYCR7IXRvdGFsICYmIHNlbGYuaW5uZXJUZXh0LnRyaW0oKSB8fCBgJHtfdGV4dHNbdG90YWwgPT09IDEgPyBcInNpbmd1bGFyXCIgOiBcInBsdXJhbFwiXX1gLnJlcGxhY2UoXCIlZFwiLCBgJHt0b3RhbH1gKX1gO1xuICAgICAgaWYgKCFzZWxmLmhpZGRlbiAmJiAoX3Jvb3QgPT0gbnVsbCA/IHZvaWQgMCA6IF9yb290LmFjdGl2ZUVsZW1lbnQpID09PSBfaW5wdXQpIHNwZWFrKHRleHQpO1xuICAgICAgc2VsZi5fdmFsdWUgPSB2YWx1ZTtcbiAgICB9LCAxZTMpO1xuICBpZiAoSVNfSU9TKVxuICAgIHZpc2libGUuZm9yRWFjaCgob3B0LCBpZHgpID0+IGF0dHIob3B0LCBcInRpdGxlXCIsIGAke2lkeCArIDF9LyR7dG90YWx9YCkpO1xufTtcbmlmIChJU19CUk9XU0VSKVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwibGlzdFwiLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGdldFJvb3QodGhpcykuZ2V0RWxlbWVudEJ5SWQoYXR0cih0aGlzLCBcImxpc3RcIikgfHwgXCJcIik7XG4gICAgfVxuICB9KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtZGF0YWxpc3RcIiwgVUhUTUxEYXRhTGlzdEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTERhdGFMaXN0RWxlbWVudCB9O1xuIiwiaW1wb3J0IHsgVUhUTUxDb21ib2JveEVsZW1lbnQgfSBmcm9tIFwiQHUtZWxlbWVudHMvdS1jb21ib2JveFwiO1xuaW1wb3J0IHsgVUhUTUxEYXRhTGlzdEVsZW1lbnQgfSBmcm9tIFwiQHUtZWxlbWVudHMvdS1kYXRhbGlzdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdGFuY2hvclBvc2l0aW9uLFxuXHRhdHRyLFxuXHRpc0lucHV0TGlrZSxcblx0b24sXG5cdG9uTG9hZGVkLFxuXHRvbk11dGF0aW9uLFxuXHRRVUlDS19FVkVOVCxcblx0dXNlSWQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRklFTEQgPSBzdHlsZXMuZmllbGQuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1ZBTElEQVRJT05TID0gc3R5bGVzLnZhbGlkYXRpb24uc3BsaXQoXCIgXCIpO1xuY29uc3QgQ1NTX1ZBTElEQVRJT04gPSBDU1NfVkFMSURBVElPTlNbMF07XG5cbmNvbnN0IGdldFRleHQgPSAoc3R5bGU6IENTU1N0eWxlRGVjbGFyYXRpb24sIGtleTogc3RyaW5nKSA9PlxuXHRzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGAtLW10ZHMtdGV4dC0ke2tleX1gKT8uc2xpY2UoMSwgLTEpIHx8IFwiXCI7IC8vIHNsaWNlIHRvIHRyaW0gcXVvdGVzXG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKGZpZWxkczogSFRNTENvbGxlY3Rpb25PZjxFbGVtZW50PiwgdmFsaWRhdGU/OiBib29sZWFuKSB7XG5cdGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKVxuXHRcdGlmIChmaWVsZC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0Y29uc3QgbGFiZWxzOiBIVE1MTGFiZWxFbGVtZW50W10gPSBbXTtcblx0XHRcdGNvbnN0IGRlc2NzOiBFbGVtZW50W10gPSBbXTtcblx0XHRcdGNvbnN0IHZhbGlkczogRWxlbWVudFtdID0gW107XG5cdFx0XHRsZXQgY29tYm9ib3g6IFVIVE1MQ29tYm9ib3hFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdFx0XHRsZXQgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblx0XHRcdGxldCB2YWxpZCA9IHRydWU7XG5cblx0XHRcdGZvciAoY29uc3QgZWwgb2YgZmllbGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpKSB7XG5cdFx0XHRcdGlmIChlbCBpbnN0YW5jZW9mIEhUTUxMYWJlbEVsZW1lbnQpIGxhYmVscy5wdXNoKGVsKTtcblx0XHRcdFx0ZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBVSFRNTENvbWJvYm94RWxlbWVudCkgY29tYm9ib3ggPSBlbDtcblx0XHRcdFx0ZWxzZSBpZiAoaXNJbnB1dExpa2UoZWwpICYmICFlbC5oaWRkZW4pIGlucHV0ID0gZWw7XG5cdFx0XHRcdGVsc2UgaWYgKGVsLmhhc0F0dHJpYnV0ZShcImRhdGEtZGVzY3JpcHRpb25cIikpIGRlc2NzLnB1c2goZWwpO1xuXHRcdFx0XHRlbHNlIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1ZBTElEQVRJT04pKSB7XG5cdFx0XHRcdFx0dmFsaWQgPSBhdHRyKGVsLCBcImRhdGEtY29sb3JcIikgPT09IFwic3VjY2Vzc1wiIHx8ICFlbC5jbGllbnRIZWlnaHQ7IC8vIE9ubHkgc2V0IGludmFsaWQgaWYgVmFsaWRhdGlvbiBpcyB2aXNpYmxlXG5cdFx0XHRcdFx0dmFsaWRzLnB1c2goZWwpO1xuXHRcdFx0XHRcdGRlc2NzLnVuc2hpZnQoZWwpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgSFRNTFBhcmFncmFwaEVsZW1lbnQpXG5cdFx0XHRcdFx0ZGVzY3Muc29tZSgoZGVzYykgPT4gZGVzYy5jb250YWlucyhlbCkpIHx8IGRlc2NzLnB1c2goZWwpOyAvLyBPbmx5IGFkZCBpZiBub3QgYWxyZWFkeSBpbnNpZGUgZGVzY3JpcHRpb25cblx0XHRcdH1cblxuXHRcdFx0aWYgKGlucHV0KSB7XG5cdFx0XHRcdGZvciAoY29uc3QgbGFiZWwgb2YgbGFiZWxzKSBsYWJlbC5odG1sRm9yID0gdXNlSWQoaW5wdXQpO1xuXHRcdFx0XHRpZiAodmFsaWRhdGUgJiYgYXR0cihmaWVsZCwgXCJkYXRhLXZhbGlkYXRpb25cIikgPT09IFwiZm9ybVwiKSB7XG5cdFx0XHRcdFx0dmFsaWQgPSBpbnB1dC5tYXRjaGVzKFwiOnZhbGlkXCIpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgZWwgb2YgdmFsaWRzKSBhdHRyKGVsLCBcImhpZGRlblwiLCB2YWxpZCA/IFwiXCIgOiBudWxsKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZW5kZXJDb21ib2JveChjb21ib2JveCk7XG5cdFx0XHRcdHJlbmRlckNvdW50ZXIoaW5wdXQpO1xuXHRcdFx0XHRyZW5kZXJUZXh0YXJlYVNpemUoaW5wdXQpO1xuXHRcdFx0XHRhdHRyKGlucHV0LCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgZGVzY3MubWFwKHVzZUlkKS5qb2luKFwiIFwiKSB8fCBudWxsKTsgLy8gUmVtb3ZlIGlmIGVtcHR5XG5cdFx0XHRcdGF0dHIoaW5wdXQsIFwiYXJpYS1pbnZhbGlkXCIsIGAkeyF2YWxpZH1gKTtcblx0XHRcdH1cblx0XHR9XG59XG5cbi8vIGlPUyBkb2VzIG5vdCBzdXBwb3J0IGZpZWxkLXNpemluZzogY29udGVudCwgc28gd2UgbmVlZCB0byBtYW51YWxseSByZXNpemVcbmZ1bmN0aW9uIHJlbmRlclRleHRhcmVhU2l6ZSh0ZXh0YXJlYTogRWxlbWVudCkge1xuXHRpZiAodGV4dGFyZWEgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG5cdFx0dGV4dGFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXCItLW10ZHMtdGV4dGFyZWEtaGVpZ2h0XCIsIFwiYXV0b1wiKTtcblx0XHR0ZXh0YXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcblx0XHRcdFwiLS1tdGRzLXRleHRhcmVhLWhlaWdodFwiLFxuXHRcdFx0YCR7dGV4dGFyZWEuc2Nyb2xsSGVpZ2h0fXB4YCxcblx0XHQpO1xuXHR9XG59XG5cbi8vIFNldHVwIHRyYW5zbGF0aW9ucyBmcm9tIENTUyBjdXN0b20gcHJvcGVydGllc1xuZnVuY3Rpb24gcmVuZGVyQ29tYm9ib3goZWw6IFVIVE1MQ29tYm9ib3hFbGVtZW50IHwgbnVsbCkge1xuXHRpZiAoIWVsPy5saXN0IHx8IGVsLmxpc3Q/Lmhhc0F0dHJpYnV0ZShcInBvcG92ZXJcIikpIHJldHVybjtcblx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG5cdGF0dHIoZWwsIFwiZGF0YS1zci1hZGRlZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWFkZGVkXCIpKTtcblx0YXR0cihlbCwgXCJkYXRhLXNyLWVtcHR5XCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtZW1wdHlcIikpO1xuXHRhdHRyKGVsLCBcImRhdGEtc3ItZm91bmRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1mb3VuZFwiKSk7XG5cdGF0dHIoZWwsIFwiZGF0YS1zci1pbnZhbGlkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtaW52YWxpZFwiKSk7XG5cdGF0dHIoZWwsIFwiZGF0YS1zci1vZlwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LW9mXCIpKTtcblx0YXR0cihlbCwgXCJkYXRhLXNyLXJlbW92ZVwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LXJlbW92ZVwiKSk7XG5cdGF0dHIoZWwsIFwiZGF0YS1zci1yZW1vdmVkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtcmVtb3ZlZFwiKSk7XG5cdGF0dHIoZWwubGlzdCwgXCJkYXRhLXNyLXBsdXJhbFwiLCBnZXRUZXh0KHN0eWxlLCBcImRhdGFsaXN0LXBsdXJhbFwiKSk7XG5cdGF0dHIoZWwubGlzdCwgXCJkYXRhLXNyLXNpbmd1bGFyXCIsIGdldFRleHQoc3R5bGUsIFwiZGF0YWxpc3Qtc2luZ3VsYXJcIikpO1xuXHRhdHRyKGVsLmxpc3QsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyQ291bnRlcihpbnB1dDogSFRNTElucHV0RWxlbWVudCkge1xuXHRjb25zdCBlbCA9IGlucHV0Py5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdGNvbnN0IGxpbWl0ID0gZWwgJiYgYXR0cihlbCwgXCJkYXRhLWNvdW50XCIpO1xuXG5cdGlmIChlbCAmJiBsaW1pdCkge1xuXHRcdGNvbnN0IHJlbWFpbmRlciA9IE51bWJlcihsaW1pdCkgLSBpbnB1dC52YWx1ZS5sZW5ndGg7XG5cdFx0Y29uc3QgbmV4dEludmFsaWQgPSByZW1haW5kZXIgPCAwO1xuXHRcdGNvbnN0IHByZXZJbnZhbGlkID0gYXR0cihlbCwgXCJhcmlhLWxpdmVcIikgPT09IFwicG9saXRlXCI7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCB8fCBpbnB1dCk7XG5cdFx0Y29uc3Qgb3ZlciA9IGdldFRleHQoc3R5bGUsIFwiY291bnQtb3ZlclwiKTtcblx0XHRjb25zdCB1bmRlciA9IGdldFRleHQoc3R5bGUsIFwiY291bnQtdW5kZXJcIik7XG5cblx0XHRpZiAocHJldkludmFsaWQgIT09IG5leHRJbnZhbGlkKSB7XG5cdFx0XHRhdHRyKGVsLCBcImFyaWEtbGl2ZVwiLCBuZXh0SW52YWxpZCA/IFwicG9saXRlXCIgOiBcIm9mZlwiKTtcblx0XHRcdGZvciAoY29uc3QgY3NzIG9mIENTU19WQUxJREFUSU9OUykgZWwuY2xhc3NMaXN0LnRvZ2dsZShjc3MsIG5leHRJbnZhbGlkKTtcblx0XHR9XG5cdFx0ZWwudGV4dENvbnRlbnQgPSAobmV4dEludmFsaWQgPyBvdmVyIDogdW5kZXIpLnJlcGxhY2UoXG5cdFx0XHRcIiVkXCIsXG5cdFx0XHRgJHtNYXRoLmFicyhyZW1haW5kZXIpfWAsXG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBoYW5kbGVUb2dnbGUoeyB0YXJnZXQ6IGVsLCBuZXdTdGF0ZSB9OiBFdmVudCAmIHsgbmV3U3RhdGU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBVSFRNTERhdGFMaXN0RWxlbWVudCkge1xuXHRcdGNvbnN0IHJvb3QgPSBlbC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QgfCBudWxsO1xuXHRcdGNvbnN0IGFuY2hvciA9IHJvb3Q/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxuXHRcdFx0YFtwb3BvdmVydGFyZ2V0PVwiJHtlbC5pZH1cIl1gLFxuXHRcdCk7XG5cblx0XHRpZiAobmV3U3RhdGUgPT09IFwiY2xvc2VkXCIpIGFuY2hvclBvc2l0aW9uKGVsLCBmYWxzZSk7XG5cdFx0ZWxzZSBpZiAoYW5jaG9yKSB7XG5cdFx0XHRlbC5zdHlsZS53aWR0aCA9IGAke2FuY2hvci5jbGllbnRXaWR0aH1weGA7XG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgYW5jaG9yLCBhdHRyKGVsLCBcImRhdGEtcG9zaXRpb25cIikgPz8gXCJib3R0b21cIiwgdHJ1ZSk7XG5cdFx0fVxuXHR9XG59XG4vLyBVcGRhdGUgd2hlbiB0eXBpbmdcbmZ1bmN0aW9uIGhhbmRsZUlucHV0KHsgdGFyZ2V0IH06IEV2ZW50KSB7XG5cdGlmIChpc0lucHV0TGlrZSh0YXJnZXQpKSB7XG5cdFx0cmVuZGVyQ291bnRlcih0YXJnZXQpO1xuXHRcdHJlbmRlclRleHRhcmVhU2l6ZSh0YXJnZXQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVZhbGRpYXRpb24oZXZlbnQ6IEV2ZW50KSB7XG5cdGNvbnN0IGZpZWxkID0gKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKGAuJHtDU1NfRklFTER9YCk7XG5cblx0aWYgKGV2ZW50LnR5cGUgPT09IFwiaW52YWxpZFwiICYmIGZpZWxkKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBQcmV2ZW50IGJyb3dzZXJzIGZyb20gc2hvd2luZyBkZWZhdWx0IHZhbGlkYXRpb24gYnViYmxlc1xuXHRoYW5kbGVNdXRhdGlvbihkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKENTU19GSUVMRCksIHRydWUpOyAvLyBVcGRhdGUgc3RhdGVcbn1cblxuLy8gUG9zaXRpb24gY29tYm9ib3ggd2hlbiBjaGFuZ2luZyBjb250ZW50XG5mdW5jdGlvbiBoYW5kbGVCZWZvcmVDaGFuZ2UoeyB0YXJnZXQ6IGVsIH06IEV2ZW50KSB7XG5cdGNvbnN0IGxpc3QgPSBlbCBpbnN0YW5jZW9mIFVIVE1MQ29tYm9ib3hFbGVtZW50ICYmIGVsLmxpc3Q7XG5cdGlmIChsaXN0ICYmICFsaXN0Py5oaWRkZW4pXG5cdFx0c2V0VGltZW91dCgoKSA9PiBhbmNob3JQb3NpdGlvbihsaXN0LCBlbCwgMiwgdHJ1ZSksIDEwKTsgLy8gUmVwb3NpdGlvbiBsaXN0IGlmIG5vdCBoaWRkZW5cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX0ZJRUxELCBoYW5kbGVNdXRhdGlvbik7XG5cdG9uKGRvY3VtZW50LCBcImJlZm9yZWNoYW5nZVwiLCBoYW5kbGVCZWZvcmVDaGFuZ2UsIFFVSUNLX0VWRU5UKTtcblx0b24oZG9jdW1lbnQsIFwiaW5wdXRcIiwgaGFuZGxlSW5wdXQsIFFVSUNLX0VWRU5UKTtcblx0b24oZG9jdW1lbnQsIFwiaW52YWxpZCxzdWJtaXRcIiwgaGFuZGxlVmFsZGlhdGlvbiwgdHJ1ZSk7IC8vIFVzZSBjYXB0dXJlIGFzIGludmFsaWQgYW5kIHN1Ym1pdCBkb2VzIG5vdCBidWJibGVcblx0b24oZG9jdW1lbnQsIFwidG9nZ2xlXCIsIGhhbmRsZVRvZ2dsZSwgUVVJQ0tfRVZFTlQpOyAvLyBVc2UgY2FwdHVyZSBzaW5jZSB0b2dnbGUgZG9lcyBub3QgYnViYmxlXG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBpc0lucHV0TGlrZSwgb25Mb2FkZWQsIG9uTXV0YXRpb24sIHVzZUlkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19GSUVMRFNFVCA9IHN0eWxlcy5maWVsZHNldC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVkFMSURBVElPTiA9IHN0eWxlcy52YWxpZGF0aW9uLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IEFSSUFfREVTQyA9IFwiYXJpYS1kZXNjcmliZWRieVwiO1xuY29uc3QgQVJJQV9JTlZBTElEID0gXCJhcmlhLWludmFsaWRcIjtcblxuLy8gVXNpbmcgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHRvIGVuc3VyZSBpdCBydW5zIGFmdGVyIGZpZWxkLW9ic2VydmVyXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihmaWVsZHNldHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4pIHtcblx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRmb3IgKGNvbnN0IGZpZWxkc2V0IG9mIGZpZWxkc2V0cylcblx0XHRcdGlmIChmaWVsZHNldC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0XHRjb25zdCBpbnB1dHM6IEhUTUxJbnB1dEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0XHRsZXQgdmFsaWRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdFx0XHRcdGxldCB2YWxpZCA9IHRydWU7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBlbCBvZiBmaWVsZHNldC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikpIHtcblx0XHRcdFx0XHRpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkge1xuXHRcdFx0XHRcdFx0dmFsaWQgPSBhdHRyKGVsLCBcImRhdGEtY29sb3JcIikgPT09IFwic3VjY2Vzc1wiIHx8ICFlbC5jbGllbnRIZWlnaHQ7IC8vIE9ubHkgc2V0IGludmFsaWQgaWYgVmFsaWRhdGlvbiBpcyB2aXNpYmxlXG5cdFx0XHRcdFx0XHR2YWxpZElkID0gdXNlSWQoZWwpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoaXNJbnB1dExpa2UoZWwpKSBpbnB1dHMucHVzaChlbCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykge1xuXHRcdFx0XHRcdGNvbnN0IGRlc2MgPSBhdHRyKGlucHV0LCBBUklBX0RFU0MpPy5yZXBsYWNlKHZhbGlkSWQgfHwgXCIjXCIsIFwiXCIpO1xuXG5cdFx0XHRcdFx0YXR0cihpbnB1dCwgQVJJQV9ERVNDLCBgJHt2YWxpZElkIHx8IFwiXCJ9ICR7ZGVzYyB8fCBcIlwifWAudHJpbSgpKTtcblx0XHRcdFx0XHRhdHRyKGlucHV0LCBBUklBX0lOVkFMSUQsIGAkeyF2YWxpZH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRFNFVCwgaGFuZGxlTXV0YXRpb24pLFxuKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfTE9HTyA9IHN0eWxlcy5sb2dvLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oW2xvZ29dOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRpZiAobG9nbz8uaXNDb25uZWN0ZWQgJiYgbG9nbz8uZmlyc3RFbGVtZW50Q2hpbGQgaW5zdGFuY2VvZiBTVkdTVkdFbGVtZW50KSB7XG5cdFx0Zm9yIChjb25zdCBpY29uIG9mIGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvckFsbChcImxpbmtbcmVsfj0naWNvbiddXCIpKVxuXHRcdFx0aWNvbi5zZXRBdHRyaWJ1dGUoXCJyZWxcIiwgXCJkaXNhYmxlZFwiKTsgLy8gRGlzYWJsZSBwcmV2aW91cyBpY29uIChidXQgbm90IHJlbW92ZSBpcyBhcyB0aGlzIG1ha2VzIE5leHQuanMgc2FkKVxuXG5cdFx0Y29uc3Qgc3ZnID0gbG9nby5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRjb25zdCBpc0RvdCA9IGxvZ28/Lmhhc0F0dHJpYnV0ZShcImRhdGEtZW52XCIpO1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoc3ZnKTtcblx0XHRjb25zdCB0ZXh0ID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcImNvbG9yXCIpO1xuXHRcdGNvbnN0IGJhY2sgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1tdGRzLWxvZ28tY29sb3JcIik7XG5cdFx0Y29uc3QgaWNvbiA9IHN2Zy5vdXRlckhUTUxcblx0XHRcdC5yZXBsYWNlKC9cXG4rL2csIFwiIFwiKSAvLyBQcmV2ZW50IGxpbmUgYnJlYWtzXG5cdFx0XHQucmVwbGFjZSgvKGZpbGx8d2lkdGh8aGVpZ2h0fHhtbG5zKT1cIlteXCJdK1wiL2dpLCBcIlwiKVxuXHRcdFx0LnJlcGxhY2UoXCI8c3ZnXCIsIGA8c3ZnIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIGZpbGw9XCIke3RleHR9XCJgKTtcblxuXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoXG5cdFx0XHRPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpLCB7XG5cdFx0XHRcdGhyZWY6IGBkYXRhOmltYWdlL3N2Zyt4bWwsJHtlbmNvZGVVUklDb21wb25lbnQoYDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNTUgNTUnPjxyZWN0IGZpbGw9JyR7aXNEb3QgPyBcIm5vbmVcIiA6IGJhY2t9JyB3aWR0aD0nNTEnIGhlaWdodD0nNTEnIHg9JzInIHk9JzInIHN0cm9rZT0nJHt0ZXh0fScgc3Ryb2tlLWRhc2hhcnJheT0nMC4wOSA2LjM4JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1vcGFjaXR5PScke2lzRG90ID8gMC42IDogMH0nIHN0cm9rZS13aWR0aD0nMi4zJyByeD0nMjUuNScvPjxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg3LjUgNy41KVwiPiR7aWNvbn08L2c+PC9zdmc+YCl9YCxcblx0XHRcdFx0cmVsOiBcImljb25cIixcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19MT0dPLCBoYW5kbGVNdXRhdGlvbikpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFFVSUNLX0VWRU5ULCBhbmNob3JQb3NpdGlvbiwgYXR0ciwgb24sIG9uTG9hZGVkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19QT1BPVkVSID0gc3R5bGVzLnBvcG92ZXIuc3BsaXQoXCIgXCIpWzBdO1xubGV0IE9QRU5fUE9QT1ZFUlMgPSAwOyAvLyBTcGVlZCB1cCBieSBvbmx5IGNoZWNraW5nIGNsaWNrcyBpZiB3ZSBoYXZlIG9wZW4gcG9wb3ZlcnNcblxuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlKHsgdGFyZ2V0OiBlbCwgbmV3U3RhdGUgfTogRXZlbnQgJiB7IG5ld1N0YXRlPzogc3RyaW5nIH0pIHtcblx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19QT1BPVkVSKSkge1xuXHRcdGNvbnN0IGFuY2hvciA9IChlbC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QpPy5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50Pihcblx0XHRcdGBbcG9wb3ZlcnRhcmdldD1cIiR7ZWwuaWR9XCJdYCxcblx0XHQpO1xuXG5cdFx0aWYgKG5ld1N0YXRlID09PSBcImNsb3NlZFwiKSB7XG5cdFx0XHRPUEVOX1BPUE9WRVJTIC09IDE7XG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgZmFsc2UpO1xuXHRcdH0gZWxzZSBpZiAoYW5jaG9yKSB7XG5cdFx0XHRPUEVOX1BPUE9WRVJTICs9IDE7XG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgYW5jaG9yLCBhdHRyKGVsLCBcImRhdGEtcG9zaXRpb25cIikgfHwgXCJib3R0b21cIik7XG5cdFx0fVxuXHR9XG59XG5cbi8vIFBvbHlmaWxsIHBvcG92ZXJ0YXJnZXQgZm9yIDxhPiAobm90IHN1cHBvcnRlZCBieSBuYXRpdmUpXG4vLyBhbmQgYXV0b21hdGljYWxseSBhc3N1bWUgcG9wb3ZlcnRhcmdldCBpcyB0aGUgY2xvc2VzdCBwYXJlbnQgcG9wb3ZlclxuLy8gYnV0IHJlc3BlY3QgdGhlIHBvcG92ZXJ0YXJnZXQgYW5kIHBvcG92ZXJ0YXJnZXRhY3Rpb24gYXR0cmlidXRlXG5mdW5jdGlvbiBoYW5kbGVMaW5rQ2xpY2soeyB0YXJnZXQgfTogRXZlbnQpIHtcblx0Y29uc3QgY2xvc2UgPVxuXHRcdE9QRU5fUE9QT1ZFUlMgJiYgKHRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKFwiYSxbcG9wb3ZlcnRhcmdldGFjdGlvbl1cIik7XG5cblx0aWYgKGNsb3NlKSB7XG5cdFx0Y29uc3QgYWN0aW9uID0gYXR0cihjbG9zZSwgXCJwb3BvdmVydGFyZ2V0YWN0aW9uXCIpIHx8IFwidG9nZ2xlXCI7XG5cdFx0Y29uc3Qgb3BlbiA9IGFjdGlvbiA9PT0gXCJzaG93XCIgfHwgKGFjdGlvbiA9PT0gXCJoaWRlXCIgPyBmYWxzZSA6IHVuZGVmaW5lZCk7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXR0cihjbG9zZSwgXCJwb3BvdmVydGFyZ2V0XCIpIHx8IFwiXCIpO1xuXHRcdGNvbnN0IHBvcG92ZXIgPSAodGFyZ2V0IHx8IGNsb3NlKS5jbG9zZXN0PEhUTUxFbGVtZW50PihgLiR7Q1NTX1BPUE9WRVJ9YCk7XG5cblx0XHQvLyBQb3BvdmVyIGNhbiBiZSBkaXNjb25uZXRlZCBieSBjbGljayBoYW5kbGVyIGRlZXBlciBkb3duIGluIHRoZSBET00gdGhyZWUgYmVmb3JlIHJlYWNoaW5nIGRvY3VtZW50XG5cdFx0aWYgKHBvcG92ZXI/LmlzQ29ubmVjdGVkICYmIHBvcG92ZXI/LnRvZ2dsZVBvcG92ZXIpXG5cdFx0XHRwb3BvdmVyLnRvZ2dsZVBvcG92ZXIob3Blbik7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJ0b2dnbGVcIiwgaGFuZGxlVG9nZ2xlLCBRVUlDS19FVkVOVCk7IC8vIFVzZSBjYXB0dXJlIHNpbmNlIHRvZ2dsZSBkb2VzIG5vdCBidWJibGVcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlTGlua0NsaWNrKTsgLy8gQWxsb3cgYDxhPmAgdG8gdXNlIGBwb3BvdmVydGFyZ2V0YCBhcyB3ZWxsXG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfVEFCTEUgPSBzdHlsZXMudGFibGUuc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbih0YWJsZXM6IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTFRhYmxlRWxlbWVudD4pIHtcblx0Zm9yIChjb25zdCB0YWJsZSBvZiB0YWJsZXMpIHtcblx0XHRjb25zdCB0aHM6IHN0cmluZ1tdID0gW107IC8vIEFkZCBkYXRhLXRoPVwiXCIgdG8gZWFjaCBjZWxsIHRvIHN1cHBvcnQgZGF0YS1tb2JpbGUgZGVzaWduc1xuXG5cdFx0YXR0cih0YWJsZSwgXCJyb2xlXCIsIFwidGFibGVcIik7IC8vIEFkZCBoZWxwaW5nIHJvbGU9XCJcIiB0byBlbnN1cmUgc2NyZWVuIHJlYWRlcnMgdW5kZXJzdGFuZCB0aGUgdGFibGUgcmVnYXJkbGVzcyBvZiBDU1MgZGlzcGxheVxuXHRcdGlmICh0YWJsZS5jYXB0aW9uKSBhdHRyKHRhYmxlLmNhcHRpb24sIFwicm9sZVwiLCBcImNhcHRpb25cIik7XG5cdFx0Zm9yIChjb25zdCBncm91cCBvZiBbdGFibGUudEhlYWQsIHRhYmxlLnRGb290LCAuLi50YWJsZS50Qm9kaWVzXSlcblx0XHRcdGlmIChncm91cCkge1xuXHRcdFx0XHRhdHRyKGdyb3VwLCBcInJvbGVcIiwgXCJyb3dncm91cFwiKTtcblx0XHRcdFx0Y29uc3QgaXNUYm9keSA9IGdyb3VwLm5vZGVOYW1lID09PSBcIlRCT0RZXCI7XG5cblx0XHRcdFx0Zm9yIChjb25zdCByb3cgb2YgZ3JvdXAucm93cykge1xuXHRcdFx0XHRcdGF0dHIocm93LCBcInJvbGVcIiwgXCJyb3dcIik7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjZWxsIG9mIHJvdy5jZWxscykge1xuXHRcdFx0XHRcdFx0aWYgKGlzVGJvZHkpIGF0dHIoY2VsbCwgXCJkYXRhLXRoXCIsIHRoc1tjZWxsLmNlbGxJbmRleF0gfHwgXCI6ZW1wdHlcIik7XG5cdFx0XHRcdFx0XHRlbHNlIHRocy5wdXNoKGNlbGwuaW5uZXJUZXh0LnRyaW0oKSk7IC8vIFVzaW5nIGlubmVyVGV4dCB0byBvbmx5IGluY2x1ZGUgdmlzaWJsZSB0ZXh0XG5cdFx0XHRcdFx0XHRpZiAoY2VsbC5ub2RlTmFtZSA9PT0gXCJURFwiKSBhdHRyKGNlbGwsIFwicm9sZVwiLCBcImNlbGxcIik7XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0YXR0cihjZWxsLCBcInJvbGVcIiwgaXNUYm9keSA/IFwicm93aGVhZGVyXCIgOiBcImNvbHVtbmhlYWRlclwiKTtcblx0XHRcdFx0XHRcdFx0YXR0cihjZWxsLCBcInNjb3BlXCIsIGlzVGJvZHkgPyBcInJvd1wiIDogXCJjb2xcIik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19UQUJMRSwgaGFuZGxlTXV0YXRpb24pKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBvbiwgb25Mb2FkZWQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1RPR0dMRUdST1VQID0gYC4ke3N0eWxlcy50b2dnbGVncm91cC5zcGxpdChcIiBcIilbMF19YDtcblxuLy8gUHJldmVudCBicm93c2VycyBmcm9tIHNob3dpbmcgZGVmYXVsdCB2YWxpZGF0aW9uIGJ1YmJsZXNcbmZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQ6IEV2ZW50ICYgUGFydGlhbDxLZXlib2FyZEV2ZW50Pikge1xuXHRjb25zdCB7IGtleSwgdGFyZ2V0OiBlbCB9ID0gZXZlbnQ7XG5cdGNvbnN0IGdyb3VwID0gZWwgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIGVsLmNsb3Nlc3QoQ1NTX1RPR0dMRUdST1VQKTtcblxuXHRpZiAoIWdyb3VwKSByZXR1cm47XG5cdGlmIChrZXkgPT09IFwiRW50ZXJcIikgZWwuY2xpY2soKTtcblx0aWYgKGtleT8uc3RhcnRzV2l0aChcIkFycm93XCIpKSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRjb25zdCBpbnB1dHMgPSBncm91cC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpO1xuXHRcdGNvbnN0IGluZGV4ID0gWy4uLmlucHV0c10uaW5kZXhPZihlbCk7XG5cdFx0Y29uc3QgbW92ZSA9IGtleS5tYXRjaCgvQXJyb3coUmlnaHR8RG93bikvKSA/IDEgOiAtMTtcblx0XHRpbnB1dHNbKGlucHV0cy5sZW5ndGggKyBpbmRleCArIG1vdmUpICUgaW5wdXRzLmxlbmd0aF0/LmZvY3VzKCk7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb24oZG9jdW1lbnQsIFwia2V5ZG93blwiLCBoYW5kbGVLZXlEb3duKSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0YW5jaG9yUG9zaXRpb24sXG5cdGF0dHIsXG5cdElTX0JST1dTRVIsXG5cdG9uLFxuXHRvbkxvYWRlZCxcblx0UVVJQ0tfRVZFTlQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBERVNDUklCRURCWSA9IFwiYXJpYS1kZXNjcmliZWRieVwiO1xuY29uc3QgRVNDID0gXCJFc2NhcGVcIjtcbmNvbnN0IExBQkVMTEVEQlkgPSBcImFyaWEtbGFiZWxsZWRieVwiO1xuY29uc3QgUE9TSVRJT05fQ1NTX1BST1BFUlRZID0gXCItLW10ZHMtdG9vbHRpcC1wb3NpdGlvblwiO1xuY29uc3QgVEhST1RUTEVfREVMQVkgPSAzMDA7XG5jb25zdCBUT09MVElQID0gSVNfQlJPV1NFUlxuXHQ/IE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwge1xuXHRcdFx0Y2xhc3NOYW1lOiBzdHlsZXMuX3Rvb2x0aXAsXG5cdFx0XHRpZDogXCJtdGRzLXRvb2x0aXBcIixcblx0XHRcdHBvcG92ZXI6IFwibWFudWFsXCIsXG5cdFx0fSlcblx0OiBudWxsOyAvLyBDcmVhdGUgYSBkdW1teSBlbGVtZW50IHRvIGF2b2lkIG51bGwgY2hlY2tzXG5cbmxldCBBTkNIT1I6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbmxldCBMQVNUX0NBTEwgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5sZXQgVEhST1RUTEU6IG51bWJlciB8IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+ID0gMDtcblxuZnVuY3Rpb24gaGFuZGxlTW92ZSh7IHRhcmdldCwgdHlwZSwga2V5IH06IEV2ZW50ICYgeyBrZXk/OiBzdHJpbmcgfSkge1xuXHRpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIgJiYga2V5ICE9PSBFU0MpIHJldHVybjsgLy8gQWxsb3cgRVNDIGRpc21pc3MgdG8gZm9sbG93IGh0dHBzOi8vd3d3LnczLm9yZy9XQUkvQVJJQS9hcGcvcGF0dGVybnMvdG9vbHRpcC9cblx0Y29uc3Qgd2FpdCA9IExBU1RfQ0FMTCArIFRIUk9UVExFX0RFTEFZIC0gRGF0ZS5ub3coKTtcblx0Y2xlYXJUaW1lb3V0KFRIUk9UVExFKTtcblx0VEhST1RUTEUgPSBzZXRUaW1lb3V0KFxuXHRcdGhhbmRsZU1vdmVUaHJvdHRsZWQsXG5cdFx0TWF0aC5tYXgod2FpdCwgMCksXG5cdFx0a2V5ID09PSBFU0MgPyBudWxsIDogdGFyZ2V0LFxuXHQpO1xufVxuXG4vLyBVc2luZyBhIHRocm90dGxlZCBmdW5jdGlvbiB0byBhdm9pZCBwZXJmb3JtYW5jZSBpc3N1ZXNcbmZ1bmN0aW9uIGhhbmRsZU1vdmVUaHJvdHRsZWQodGFyZ2V0OiBFbGVtZW50IHwgbnVsbCkge1xuXHRMQVNUX0NBTEwgPSBEYXRlLm5vdygpO1xuXG5cdC8vIEJ1aWxkIGFuZCBhcHBlbmQgdG9vbHRpcCBpZiBub3QgZXhpc3Rpbmdcblx0aWYgKCFUT09MVElQIHx8IHRhcmdldCA9PT0gVE9PTFRJUCkgcmV0dXJuOyAvLyBBbGxvdyB0b29sdGlwIHRvIGJlIGhvdmVyZWQsIGZvbGxvd2luZyBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIxLyNjb250ZW50LW9uLWhvdmVyLW9yLWZvY3VzXG5cdGlmICghVE9PTFRJUD8uaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKFRPT0xUSVApOyAvLyBFbnN1cmUgY29ubmVjdGVkXG5cdGxldCBhbmNob3IgPSB0YXJnZXQ/LmNsb3Nlc3Q/LjxFbGVtZW50PihcIltkYXRhLXRvb2x0aXBdXCIpIHx8IG51bGw7XG5cblx0Ly8gTm8gbmVlZCB0byB1cGRhdGVcblx0aWYgKGFuY2hvciA9PT0gQU5DSE9SKSByZXR1cm47XG5cblx0Y29uc3QgY29udGVudCA9IChhbmNob3IgJiYgYXR0cihhbmNob3IsIFwiZGF0YS10b29sdGlwXCIpKSB8fCBcIlwiO1xuXHRjb25zdCBwb3NpdGlvbiA9XG5cdFx0KGFuY2hvciAmJiBhdHRyKGFuY2hvciwgXCJkYXRhLXRvb2x0aXAtcG9zaXRpb25cIikpIHx8XG5cdFx0d2luZG93XG5cdFx0XHQuZ2V0Q29tcHV0ZWRTdHlsZShhbmNob3IgfHwgZG9jdW1lbnQuYm9keSlcblx0XHRcdC5nZXRQcm9wZXJ0eVZhbHVlKFBPU0lUSU9OX0NTU19QUk9QRVJUWSlcblx0XHRcdD8udHJpbSgpIHx8XG5cdFx0XCJ0b3BcIjtcblxuXHRjb25zdCBpc0hpZGRlbiA9XG5cdFx0IWNvbnRlbnQgfHxcblx0XHRjb250ZW50ID09PSBcImZhbHNlXCIgfHxcblx0XHRjb250ZW50ID09PSBcInRydWVcIiB8fFxuXHRcdHBvc2l0aW9uID09PSBcIm5vbmVcIjtcblxuXHRpZiAoaXNIaWRkZW4pIGFuY2hvciA9IG51bGw7IC8vIERvIG5vdCBzaG93IHRvb2x0aXAgaWYgYm9vbGlzaCB2YWx1ZVxuXHRpZiAoYW5jaG9yKSBUT09MVElQLnRleHRDb250ZW50ID0gY29udGVudDsgLy8gT25seSB1cGRhdGUgY29udGVudCBpZiBuZXcgYW5jaG9yXG5cblx0Y29uc3QgaGFkTGFiZWwgPSBBTkNIT1IgJiYgYXR0cihBTkNIT1IsIExBQkVMTEVEQlkpID09PSBUT09MVElQPy5pZDtcblx0Y29uc3QgaGFzTGFiZWwgPVxuXHRcdChhbmNob3IgaW5zdGFuY2VvZiBIVE1MRWxlbWVudFxuXHRcdFx0PyBhbmNob3IuaW5uZXJUZXh0XG5cdFx0XHQ6IGFuY2hvcj8udGV4dENvbnRlbnRcblx0XHQpPy50cmltKCkgfHxcblx0XHRhbmNob3I/Lmhhc0F0dHJpYnV0ZShMQUJFTExFREJZKSB8fFxuXHRcdGFuY2hvcj8uaGFzQXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKTtcblxuXHRBTkNIT1I/LnJlbW92ZUF0dHJpYnV0ZShoYWRMYWJlbCA/IExBQkVMTEVEQlkgOiBERVNDUklCRURCWSk7IC8vIFVubGluayBwcmV2aW91cyBhbmNob3Jcblx0YW5jaG9yUG9zaXRpb24oVE9PTFRJUCwgZmFsc2UpOyAvLyBSZXNldCBhbmNob3IgcG9zaXRpb25cblxuXHRBTkNIT1IgPSBhbmNob3I7IC8vIFN0b3JlIG5ldyBhbmNob3IgLSBtaWdodCBiZSBudWxsIGlmIG5vIG5ldyBhbmNob3Jcblx0aWYgKEFOQ0hPUikgYXR0cihBTkNIT1IsIGhhc0xhYmVsID8gREVTQ1JJQkVEQlkgOiBMQUJFTExFREJZLCBUT09MVElQPy5pZCk7IC8vIFVzZSB0b29sdGlwIGFzIGRlc2NyaXB0aW9uIGlmIGFsbHJlYWR5IGhhcyBsYWJlbFxuXHRUT09MVElQLnRvZ2dsZVBvcG92ZXIoISFhbmNob3IpO1xuXHRhbmNob3JQb3NpdGlvbihUT09MVElQLCBhbmNob3IgfHwgZmFsc2UsIHBvc2l0aW9uKTtcbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJibHVyLGZvY3VzLG1vdXNlb3V0LG1vdXNlb3ZlclwiLCBoYW5kbGVNb3ZlLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJrZXlkb3duXCIsIGhhbmRsZU1vdmUsIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcImJsdXJcIiwgaGFuZGxlTW92ZSwgUVVJQ0tfRVZFTlQpO1xufSk7XG4iLCIvLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgX2EyO1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIChfYTIgPSBlbC5nZXRBdHRyaWJ1dGUobmFtZSkpICE9IG51bGwgPyBfYTIgOiBudWxsO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIGFzQnV0dG9uID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGlzQ2xpY2sgPSBcImtleVwiIGluIGV2ZW50ICYmIChldmVudC5rZXkgPT09IFwiIFwiIHx8IGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKTtcbiAgaWYgKGlzQ2xpY2spIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGlmIChpc0NsaWNrICYmIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBldmVudC50YXJnZXQuY2xpY2soKTtcbiAgcmV0dXJuIGlzQ2xpY2s7XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIGlmIChhdHRycykgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJzKSkgYXR0cihlbCwga2V5LCB2YWwpO1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcblxuLy8gdS1kZXRhaWxzLnRzXG52YXIgVUhUTUxEZXRhaWxzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvLyBVc2luZyB1bmRlcnNjb3JlIGluc3RlYWQgb2YgcHJpdmF0ZSBmaWVsZHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgdGhpcy5fY29udGVudCA9IG51bGw7XG4gICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiLCBudWxsLCB7IG5hbWU6IFwic3VtbWFyeVwiIH0pLFxuICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBwYXJ0OiBcImRldGFpbHMtY29udGVudFwiIH0pLFxuICAgICAgY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgJHtESVNQTEFZX0JMT0NLfVxuICAgICAgICA6OnNsb3R0ZWQodS1zdW1tYXJ5KSB7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogYmxvY2sgfVxuXHRcdFx0XHQ6OnNsb3R0ZWQodS1zdW1tYXJ5KTo6YmVmb3JlIHsgY29udGVudDogJyc7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgbWFyZ2luLWlubGluZTogLjA1ZW0gLjMxMjVlbTsgYm9yZGVyLWJsb2NrOiAuMzEyNWVtIHNvbGlkIHRyYW5zcGFyZW50OyBib3JkZXItaW5saW5lLXN0YXJ0OiAuNWVtIHNvbGlkIH1cblx0XHRcdFx0OjpzbG90dGVkKHUtc3VtbWFyeVthcmlhLWV4cGFuZGVkPVwidHJ1ZVwiXSk6OmJlZm9yZSB7IHJvdGF0ZTogOTBkZWcgfVxuXHRcdFx0XHQ6aG9zdCA+IFtwYXJ0PVwiZGV0YWlscy1jb250ZW50XCJdOm5vdChbaGlkZGVuPVwiXCJdKSB7IGRpc3BsYXk6IGJsb2NrIH1gXG4gICAgICApXG4gICAgKTtcbiAgfVxuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wib3BlblwiXTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB2YXIgX2EyO1xuICAgIHRoaXMuX2NvbnRlbnQgPSAoX2EyID0gdGhpcy5zaGFkb3dSb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNoaWxkcmVuWzFdO1xuICAgIG9uKHRoaXMuX2NvbnRlbnQsIFwiYmVmb3JlbWF0Y2hcIiwgdGhpcyk7XG4gICAgb24odGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMuX2NvbnRlbnQpIG9mZih0aGlzLl9jb250ZW50LCBcImJlZm9yZW1hdGNoXCIsIHRoaXMpO1xuICAgIG9mZih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgdGhpcy5fY29udGVudCA9IG51bGw7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIHByZXYsIG5leHQpIHtcbiAgICBjb25zdCBoaWRlID0gXCJvbmJlZm9yZW1hdGNoXCIgaW4gdGhpcyA/IFwidW50aWwtZm91bmRcIiA6IHRydWU7XG4gICAgY29uc3Qgb3BlbiA9IHRoaXMub3BlbjtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIHRoaXMuY2hpbGRyZW4pXG4gICAgICBpZiAoZWwubm9kZU5hbWUgPT09IFwiVS1TVU1NQVJZXCIpIGF0dHIoZWwsIFwiYXJpYS1leHBhbmRlZFwiLCBgJHtvcGVufWApO1xuICAgIGlmICh0aGlzLl9jb250ZW50KSB7XG4gICAgICBhdHRyKHRoaXMuX2NvbnRlbnQsIFwiYXJpYS1oaWRkZW5cIiwgYCR7IW9wZW59YCk7XG4gICAgICB0aGlzLl9jb250ZW50LmhpZGRlbiA9IG9wZW4gPyBmYWxzZSA6IGhpZGU7XG4gICAgfVxuICAgIGlmIChvcGVuICYmIHRoaXMubmFtZSkge1xuICAgICAgY29uc3QgdURldGFpbHNMaXN0ID0gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgJHt0aGlzLm5vZGVOYW1lfVtuYW1lPVwiJHt0aGlzLm5hbWV9XCJdYFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgdURldGFpbHMgb2YgdURldGFpbHNMaXN0KVxuICAgICAgICBpZiAodURldGFpbHMgIT09IHRoaXMpIHVEZXRhaWxzLm9wZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHByb3AgPT09IFwib3BlblwiICYmIHByZXYgPT09IG51bGwgIT09IChuZXh0ID09PSBudWxsKSlcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJ0b2dnbGVcIikpO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3Qgc3VtbWFyeSA9IHRoaXMucXVlcnlTZWxlY3RvcihcIjpzY29wZSA+IHUtc3VtbWFyeVwiKTtcbiAgICBjb25zdCBpc1N1bW1hcnkgPSBzdW1tYXJ5ID09IG51bGwgPyB2b2lkIDAgOiBzdW1tYXJ5LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJiZWZvcmVtYXRjaFwiKSB0aGlzLm9wZW4gPSB0cnVlO1xuICAgIGlmIChpc1N1bW1hcnkgJiYgZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIGFzQnV0dG9uKGV2ZW50KTtcbiAgICBpZiAoaXNTdW1tYXJ5ICYmIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikgdGhpcy5vcGVuID0gIXRoaXMub3BlbjtcbiAgfVxuICBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJvcGVuXCIpO1xuICB9XG4gIHNldCBvcGVuKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcIm9wZW5cIiwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgXCJuYW1lXCIpIHx8IFwiXCI7XG4gIH1cbiAgc2V0IG5hbWUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwibmFtZVwiLCB2YWx1ZSk7XG4gIH1cbn07XG52YXIgVUhUTUxTdW1tYXJ5RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJidXR0b25cIik7XG4gICAgdGhpcy5zbG90ID0gXCJzdW1tYXJ5XCI7XG4gICAgdGhpcy50YWJJbmRleCA9IDA7XG4gIH1cbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LWRldGFpbHNcIiwgVUhUTUxEZXRhaWxzRWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXN1bW1hcnlcIiwgVUhUTUxTdW1tYXJ5RWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MRGV0YWlsc0VsZW1lbnQsIFVIVE1MU3VtbWFyeUVsZW1lbnQgfTtcbiIsIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19GSVJFRk9YID0gSVNfQlJPV1NFUiAmJiAvZmlyZWZveC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfSU9TID0gSVNfQlJPV1NFUiAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZ2V0TGFiZWwgPSAoZWwpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9IGdldFJvb3QoZWwpO1xuICBjb25zdCBsYWJlbCA9IGF0dHIoZWwsIFwiYXJpYS1sYWJlbFwiKSB8fCBcIlwiO1xuICBjb25zdCBsYWJlbHMgPSAoKF9hMiA9IGF0dHIoZWwsIFwiYXJpYS1sYWJlbGxlZGJ5XCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKS5zcGxpdCgvXFxzKy8pKSB8fCBbXTtcbiAgcmV0dXJuIFtcbiAgICAuLi5sYWJlbHMubWFwKChpZDIpID0+IHJvb3QgPT0gbnVsbCA/IHZvaWQgMCA6IHJvb3QucXVlcnlTZWxlY3RvcihgW2lkPVwiJHtpZDJ9XCJdYCkpLFxuICAgIC8vIEdldCBhbGwgbGFiZWxsZWRieSBlbGVtZW50c1xuICAgIC4uLkFycmF5LmZyb20oZWwubGFiZWxzIHx8IFtdKVxuICAgIC8vIEdldCBhbGwgPGxhYmVsPiBlbGVtZW50c1xuICBdLnJlZHVjZSgoYWNjLCBlbDIpID0+IHtcbiAgICB2YXIgX2EzO1xuICAgIHJldHVybiBhY2MgfHwgKChfYTMgPSBlbDIgPT0gbnVsbCA/IHZvaWQgMCA6IGVsMi5pbm5lclRleHQpID09IG51bGwgPyB2b2lkIDAgOiBfYTMudHJpbSgpKSB8fCBcIlwiO1xuICB9LCBsYWJlbCk7XG59O1xuXG4vLyB1LXByb2dyZXNzLnRzXG52YXIgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xudmFyIFVIVE1MUHJvZ3Jlc3NFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiYXJpYS1sYWJlbFwiLCBcImFyaWEtbGFiZWxsZWRieVwiLCBcInZhbHVlXCIsIFwibWF4XCJdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiLCBudWxsLCB7IGhpZGRlbjogXCJcIiB9KSxcbiAgICAgIC8vIFNsb3QgaGlkaW5nIGNvbnRlbnQgYWxsb3dzIGxlZ2FjeSBicm93c2VyIHRvIGRpc3BsYXkgZmFsbGJhY2sgdGV4dFxuICAgICAgY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgYm9yZGVyOiAxcHggc29saWQ7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgaGVpZ2h0OiAuNWVtOyB3aWR0aDogMTBlbTsgb3ZlcmZsb3c6IGhpZGRlbiB9XG4gICAgICAgIDpob3N0OjpiZWZvcmUgeyBjb250ZW50OiAnJzsgZGlzcGxheTogYmxvY2s7IGhlaWdodDogMTAwJTsgYmFja2dyb3VuZDogY3VycmVudENvbG9yOyB3aWR0aDogdmFyKC0tcGVyY2VudGFnZSwgMCUpOyB0cmFuc2l0aW9uOiB3aWR0aCAuMnMgfVxuICAgICAgICA6aG9zdCg6bm90KFt2YWx1ZV0pKSB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZyxjdXJyZW50Q29sb3IgMjUlLCB0cmFuc3BhcmVudCA1MCUsIGN1cnJlbnRDb2xvciA3NSUpIDUwJS80MDAlIH1cbiAgICAgICAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiBuby1wcmVmZXJlbmNlKSB7IDpob3N0IHsgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlIDJzIGxpbmVhciBpbmZpbml0ZSB9ICB9XG4gICAgICAgIEBrZXlmcmFtZXMgaW5kZXRlcm1pbmF0ZSB7IGZyb20geyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IDEwMCUgfSB0byB7IGJhY2tncm91bmQtcG9zaXRpb24teDogMCB9IH1gXG4gICAgICApXG4gICAgKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoU0tJUF9BVFRSX0NIQU5HRSkgcmV0dXJuO1xuICAgIFNLSVBfQVRUUl9DSEFOR0UgPSB0cnVlO1xuICAgIGNvbnN0IHJvbGVJbWFnZSA9IElTX0lPUyB8fCBJU19GSVJFRk9YO1xuICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKHRoaXMucG9zaXRpb24gKiAxMDApKTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wZXJjZW50YWdlXCIsIGAke3BlcmNlbnRhZ2V9JWApO1xuICAgIGxldCBsYWJlbCA9IGdldExhYmVsKHRoaXMpO1xuICAgIGlmIChyb2xlSW1hZ2UpIGxhYmVsID0gYCR7bGFiZWwucmVwbGFjZSgvXFxkKyUkLywgXCJcIil9ICR7cGVyY2VudGFnZX0lYDtcbiAgICBpZiAoSVNfRklSRUZPWCkgZm9yIChjb25zdCBlbCBvZiB0aGlzLmxhYmVscykgYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIsIGxhYmVsKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1idXN5XCIsIGAke3RoaXMucG9zaXRpb24gPT09IC0xfWApO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWxhYmVsXCIsIGxhYmVsLnRyaW0oKSk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtbGFiZWxsZWRieVwiLCBudWxsKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW1heFwiLCBcIjEwMFwiKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW1pblwiLCBcIjBcIik7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVub3dcIiwgYCR7cGVyY2VudGFnZX1gKTtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCByb2xlSW1hZ2UgPyBcImltZ1wiIDogXCJwcm9ncmVzc2JhclwiKTtcbiAgICBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG4gIH1cbiAgZ2V0IGxhYmVscygpIHtcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuY2xvc2VzdChcImxhYmVsOm5vdChbZm9yXSlcIik7XG4gICAgY29uc3QgaWQyID0gdXNlSWQodGhpcyk7XG4gICAgaWYgKGxhYmVsKSBsYWJlbC5odG1sRm9yID0gaWQyO1xuICAgIGNvbnN0IGVsID0gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYGxhYmVsW2Zvcj1cIiR7aWQyfVwiXWBcbiAgICApO1xuICAgIHJldHVybiBlbDtcbiAgfVxuICBnZXQgcG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUgPT09IG51bGwgPyAtMSA6IE1hdGgubWluKHRoaXMudmFsdWUgLyB0aGlzLm1heCwgMSk7XG4gIH1cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiBnZXROdW1iZXIodGhpcywgXCJ2YWx1ZVwiKTtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICBzZXROdW1iZXIodGhpcywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IG1heCgpIHtcbiAgICByZXR1cm4gZ2V0TnVtYmVyKHRoaXMsIFwibWF4XCIpIHx8IDE7XG4gIH1cbiAgc2V0IG1heChtYXgpIHtcbiAgICBzZXROdW1iZXIodGhpcywgXCJtYXhcIiwgbWF4KTtcbiAgfVxufTtcbi8vIFByZXZlbnQgQ2hyb21lIERldlRvb2xzIHdhcm5pbmcgYWJvdXQgPGxhYmVsIGZvcj1cIlwiPiBwb2ludGluZyB0byA8dS1wcm9ncmVzcz5cblVIVE1MUHJvZ3Jlc3NFbGVtZW50LmZvcm1Bc3NvY2lhdGVkID0gdHJ1ZTtcbnZhciBpc051bWVyaWMgPSAodmFsdWUpID0+ICFOdW1iZXIuaXNOYU4oTnVtYmVyLnBhcnNlRmxvYXQoYCR7dmFsdWV9YCkpICYmIE51bWJlci5pc0Zpbml0ZShOdW1iZXIodmFsdWUpKTtcbnZhciBnZXROdW1iZXIgPSAoZWwsIGtleSkgPT4ge1xuICBjb25zdCB2YWx1ZSA9IGF0dHIoZWwsIGtleSk7XG4gIHJldHVybiBpc051bWVyaWModmFsdWUpID8gTWF0aC5tYXgoMCwgTnVtYmVyLnBhcnNlRmxvYXQodmFsdWUpKSA6IG51bGw7XG59O1xudmFyIHNldE51bWJlciA9IChlbCwga2V5LCB2YWwpID0+IHtcbiAgaWYgKHZhbCA9PT0gbnVsbCB8fCBpc051bWVyaWModmFsKSkgYXR0cihlbCwga2V5LCBgJHt2YWx9YCk7XG4gIGVsc2UgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2V0IG5vbi1udW1lcmljICcke2F0dHJ9JzogJyR7dmFsfSdgKTtcbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXByb2dyZXNzXCIsIFVIVE1MUHJvZ3Jlc3NFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxQcm9ncmVzc0VsZW1lbnQgfTtcbiJdLCJuYW1lcyI6WyJJU19CUk9XU0VSIiwiSVNfQU5EUk9JRCIsIl9hIiwiSVNfQlJPV1NFUiQ1IiwiU0FGRV9MQUJFTExFREJZIiwiRElTUExBWV9CTE9DSyIsIlVIVE1MRWxlbWVudCIsImF0dHIiLCJlbCIsIm5hbWUiLCJ2YWx1ZSIsIl9hMiIsImV2ZW50cyIsImFjdGlvbiIsImVsZW1lbnQiLCJyZXN0IiwidHlwZSIsIm9uIiwib2ZmIiwiYXR0YWNoU3R5bGUiLCJjc3MiLCJjcmVhdGVFbGVtZW50Iiwib2JzZXJ2ZXJzIiwibXV0YXRpb25PYnNlcnZlciIsIm9wdGlvbnMiLCJvYnNlcnZlciIsImRldGFpbCIsImFzQnV0dG9uIiwiZXZlbnQiLCJpc0NsaWNrIiwiZ2V0Um9vdCIsIm5vZGUiLCJyb290IiwiaWQiLCJ1c2VJZCIsInRhZ05hbWUiLCJ0ZXh0IiwiYXR0cnMiLCJjdXN0b21FbGVtZW50cyIsImluc3RhbmNlIiwiQVJJQV9DT05UUk9MUyIsIkFSSUFfU0VMRUNURUQiLCJVSFRNTFRhYnNFbGVtZW50IiwicXVlcnlXaXRob3V0TmVzdGVkIiwiZ2V0U2VsZWN0ZWRJbmRleCIsImluZGV4Iiwic2V0U2VsZWN0ZWQiLCJVSFRNTFRhYkxpc3RFbGVtZW50IiwidGFiIiwia2V5IiwidGFicyIsInByZXYiLCJuZXh0IiwiU0tJUF9BVFRSX0NIQU5HRSIsIlVIVE1MVGFiRWxlbWVudCIsInBhbmVscyIsIm5leHRQYW5lbCIsImdldFBhbmVsIiwicGFuZWwiLCJ0YWJsaXN0IiwidGFiTGlzdCIsIlVIVE1MVGFiUGFuZWxFbGVtZW50IiwiaXNGb2N1c2FibGUiLCJ0YWciLCJzZWxmIiwiaWQyIiwiX19kZWZQcm9wIiwiX19nZXRPd25Qcm9wU3ltYm9scyIsIl9faGFzT3duUHJvcCIsIl9fcHJvcElzRW51bSIsIl9fZGVmTm9ybWFsUHJvcCIsIm9iaiIsIl9fc3ByZWFkVmFsdWVzIiwiYSIsImIiLCJwcm9wIiwiSVNfRklSRUZPWCIsIklTX0lPUyIsIklTX0JST1dTRVIkNCIsIkZPQ1VTX09VVExJTkUiLCJ0ZXh0MiIsInZhbCIsIkxJVkUiLCJMSVZFX1NSX0ZJWCIsInNwZWFrIiwic2V0VmFsdWUiLCJpbnB1dCIsImRhdGEiLCJfYiIsInByb3RvIiwiSVNfUFJFU1MiLCJpc01vdXNlRG93biIsIkVWRU5UUyIsIkVWRU5UX09OQ0UiLCJJU19GSVJFRk9YX0RFU0tUT1AiLCJJU19NT0JJTEUiLCJGQUxTRSIsIlRFWFRTIiwiVUhUTUxDb21ib2JveEVsZW1lbnQiLCJyZW5kZXIiLCJzeW5jSW5wdXRWYWx1ZSIsIl8iLCJ0YXJnZXQiLCJvbkJsdXIiLCJvbkNsaWNrIiwib25Gb2N1cyIsIm9uSW5wdXQiLCJvbktleURvd24iLCJpc0RhdGEiLCJfZm9jdXMiLCJfdGV4dHMiLCJpdGVtcyIsImNvbnRyb2wiLCJsaXN0IiwibXVsdGlwbGUiLCJsYWJlbCIsImVkaXRzIiwiYWRkZWROb2RlcyIsInJlbW92ZWROb2RlcyIsInNob3VsZEFubm91bmNlIiwiaW5wdXRNb2RlIiwibmV4dEZvY3VzIiwiX2EzIiwiaWR4Iiwic2VsZWN0IiwiaXRlbSIsIm9wdGlvbiIsImxhYmVsMiIsImFyaWEiLCJvcHQiLCJpdGVtVGV4dCIsInN5bmNDbGVhcldpdGhJbnB1dCIsInN5bmNPcHRpb25zV2l0aEl0ZW1zIiwiX3NwZWFrIiwidmFsdWVzIiwid2l0aEV2ZW50IiwiZGlzcGF0Y2hNYXRjaCIsImNoYW5nZSIsImNyZWF0YWJsZSIsInF1ZXJ5IiwibWF0Y2giLCJvIiwiZGlzcGF0Y2hDaGFuZ2UiLCJyZW1vdmFibGUiLCJhZGQiLCJyZW1vdmUiLCJpIiwiaXRlbTIiLCJvbkJsdXJyZWQiLCJ4IiwieSIsImNsZWFyIiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0IiwicmVwZWF0IiwiaXNDb250cm9sIiwiaW5UZXh0IiwiZm9ybSIsIlFVSUNLX0VWRU5UIiwiZGVib3VuY2UiLCJjYWxsYmFjayIsImRlbGF5IiwidGltZXIiLCJhcmdzIiwiVVVJRCIsIlNDUk9MTEVSIiwiVEFSR0VUUyIsIlRBUkdFVFNfVVBEQVRFIiwidXBkYXRlIiwiUE9TSVRJT04iLCJhbmNob3JQb3NpdGlvbiIsImFuY2hvciIsInBsYWNlIiwiZm9yY2UiLCJwb3NpdGlvbiIsImlzSFRNTEFuY2hvciIsInRhcmdldFciLCJ0YXJnZXRIIiwiYW5jaG9yVyIsImFuY2hvckgiLCJ3aWR0aCIsImhlaWdodCIsInZpZXdXIiwidmlld0giLCJzY3JvbGxYIiwic2Nyb2xsWSIsImFuY2hvclgiLCJhbmNob3JZIiwiY2VudGVyWCIsImNlbnRlclkiLCJoYXNTcGFjZUxlZnQiLCJoYXNTcGFjZVJpZ2h0IiwiaGFzU3BhY2VPdmVyIiwiaGFzU3BhY2VVbmRlciIsImlzVmVydGljYWwiLCJpc1JpZ2h0IiwiaXNVbmRlciIsInZpZXdYIiwidmlld1kiLCJjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyIiwicXVldWUiLCJvbkZyYW1lIiwib25UaW1lciIsIk1VVEFUT1JTIiwib25NdXRhdGlvbiIsImNsYXNzTmFtZSIsImVsZW1zIiwibXV0YXRvciIsIm9uTG9hZGVkIiwicnVuIiwiaXNJbnB1dExpa2UiLCJNQVRPTU8iLCJFTkFCTEVEIiwiYW5hbHl0aWNzIiwibWF0b21vSWQiLCJlbmFibGVkIiwidXJsIiwidGl0bGUiLCJjYXRlZ29yeSIsInYiLCJyZXN1bHRzIiwiZ2V0U3RlcHMiLCJub3ciLCJtYXgiLCJzaG93Iiwib2Zmc2V0Iiwic3RhcnQiLCJlbmQiLCJwYWdlcyIsInBhZ2luYXRpb24iLCJjdXJyZW50IiwidG90YWwiLCJwYWdlIiwic2hlZXQiLCJDU1NfQVBQIiwic3R5bGVzIiwiQ1NTX1NUSUNLWSIsIkNTU19UT0dHTEUiLCJDU1NfU0lERUJBUiIsInVzZVRyYW5zaXRpb24iLCJ0b2dnbGVBcHBFeHBhbmRlZCIsImhhbmRsZVRvZ2dsZUNsaWNrIiwic3RvcCIsInNpZGViYXIiLCJoYW5kbGVSZXNpemUiLCJNSU5fWSIsIlNDUk9MTF9VUCIsIlNUSUNLIiwiU1RJQ0tfRUwiLCJTVElDS19IIiwiU1RJQ0tfWSIsIlNUVUNLIiwiV0lOX0giLCJXSU5fWSIsImhhbmRsZU11dGF0aW9uIiwic3RpY2t5IiwiaGFuZGxlU2Nyb2xsIiwiTkVYVF9ZIiwiTkVYVF9VUCIsIkNTU19CUkVBRENSVU1CUyIsImJyZWFkY3J1bWJzIiwiYnJlYWRjdW1icyIsImNydW1iIiwibGVuZ3RoIiwiQ1NTX0RJQUxPRyIsIkRJQUxPR1MiLCJoYW5kbGVNb2RhbCIsImRpYWxvZyIsImhhbmRsZUNsaWNrIiwiaGFuZGxlSW5qZWN0IiwiZmlyc3QiLCJJU19CUk9XU0VSJDIiLCJESVNBQkxFRCIsIlNFTEVDVEVEIiwiVUhUTUxPcHRpb25FbGVtZW50IiwiTElWRV9USU1FUiIsIklOUFVUX0RFQk9VTkNFIiwiRVZFTlRTX0lOUFVUIiwiVUhUTUxEYXRhTGlzdEVsZW1lbnQiLCJkaXNjb25uZWN0SW5wdXQiLCJfcHJldiIsInNldHVwSW5wdXQiLCJzZXRFeHBhbmRlZCIsIm9wZW4iLCJpc0lucHV0IiwicmVsYXRlZFRhcmdldCIsIl9yb290IiwiX2lucHV0IiwiZmlsdGVyIiwiaGlkZGVuIiwidmlzaWJsZSIsIkNTU19GSUVMRCIsIkNTU19WQUxJREFUSU9OUyIsIkNTU19WQUxJREFUSU9OIiwiZ2V0VGV4dCIsInN0eWxlIiwiZmllbGRzIiwidmFsaWRhdGUiLCJmaWVsZCIsImxhYmVscyIsImRlc2NzIiwidmFsaWRzIiwiY29tYm9ib3giLCJ2YWxpZCIsImRlc2MiLCJyZW5kZXJDb21ib2JveCIsInJlbmRlckNvdW50ZXIiLCJyZW5kZXJUZXh0YXJlYVNpemUiLCJ0ZXh0YXJlYSIsImxpbWl0IiwicmVtYWluZGVyIiwibmV4dEludmFsaWQiLCJwcmV2SW52YWxpZCIsIm92ZXIiLCJ1bmRlciIsImhhbmRsZVRvZ2dsZSIsIm5ld1N0YXRlIiwiaGFuZGxlSW5wdXQiLCJoYW5kbGVWYWxkaWF0aW9uIiwiaGFuZGxlQmVmb3JlQ2hhbmdlIiwiQ1NTX0ZJRUxEU0VUIiwiQVJJQV9ERVNDIiwiQVJJQV9JTlZBTElEIiwiZmllbGRzZXRzIiwiZmllbGRzZXQiLCJpbnB1dHMiLCJ2YWxpZElkIiwiQ1NTX0xPR08iLCJsb2dvIiwiaWNvbiIsInN2ZyIsImlzRG90IiwiYmFjayIsIkNTU19QT1BPVkVSIiwiT1BFTl9QT1BPVkVSUyIsImhhbmRsZUxpbmtDbGljayIsImNsb3NlIiwicG9wb3ZlciIsIkNTU19UQUJMRSIsInRhYmxlcyIsInRhYmxlIiwidGhzIiwiZ3JvdXAiLCJpc1Rib2R5Iiwicm93IiwiY2VsbCIsIkNTU19UT0dHTEVHUk9VUCIsImhhbmRsZUtleURvd24iLCJtb3ZlIiwiREVTQ1JJQkVEQlkiLCJFU0MiLCJMQUJFTExFREJZIiwiUE9TSVRJT05fQ1NTX1BST1BFUlRZIiwiVEhST1RUTEVfREVMQVkiLCJUT09MVElQIiwiQU5DSE9SIiwiTEFTVF9DQUxMIiwiVEhST1RUTEUiLCJoYW5kbGVNb3ZlIiwid2FpdCIsImhhbmRsZU1vdmVUaHJvdHRsZWQiLCJjb250ZW50IiwiaGFkTGFiZWwiLCJoYXNMYWJlbCIsIklTX0JST1dTRVIkMSIsIlVIVE1MRGV0YWlsc0VsZW1lbnQiLCJoaWRlIiwidURldGFpbHNMaXN0IiwidURldGFpbHMiLCJzdW1tYXJ5IiwiaXNTdW1tYXJ5IiwiVUhUTUxTdW1tYXJ5RWxlbWVudCIsImdldExhYmVsIiwiYWNjIiwiZWwyIiwiVUhUTUxQcm9ncmVzc0VsZW1lbnQiLCJyb2xlSW1hZ2UiLCJwZXJj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WUFBYSxHQUFHLEtBQUssV0FBYSxFQUFFLEVBQUUsRUFDakRBLEVBQUssS0FBTSxhQUFjNEcsRUFBTSxLQUFJLENBQUUsRUFDckM1RyxFQUFLLEtBQU0sa0JBQW1CLElBQUksRUFDbENBLEVBQUssS0FBTSxnQkFBaUIsS0FBSyxFQUNqQ0EsRUFBSyxLQUFNLGdCQUFpQixHQUFHLEVBQy9CQSxFQUFLLEtBQU0sZ0JBQWlCLEdBQUdvWCxDQUFVLEVBQUUsRUFDM0NwWCxFQUFLLEtBQU0sT0FBUW1YLEVBQVksTUFBUSxhQUFhLEVBQ3BEclUsR0FBbUIsRUFDdkIsQ0FDRSxJQUFJLFFBQVMsQ0FDWCxNQUFNOEQsRUFBUSxLQUFLLFFBQVEsa0JBQWtCLEVBQ3ZDbEQsRUFBTS9CLEdBQU0sSUFBSSxFQUN0QixPQUFJaUYsSUFBT0EsRUFBTSxRQUFVbEQsR0FDaEJuQyxHQUFRLElBQUksRUFBRSxpQkFDdkIsY0FBY21DLENBQUcsSUFDbEIsQ0FFTCxDQUNFLElBQUksVUFBVyxDQUNiLE9BQU8sS0FBSyxRQUFVLEtBQU8sR0FBSyxLQUFLLElBQUksS0FBSyxNQUFRLEtBQUssSUFBSyxDQUFDLENBQ3ZFLENBQ0UsSUFBSSxPQUFRLENBQ1YsT0FBTzJULEdBQVUsS0FBTSxPQUFPLENBQ2xDLENBQ0UsSUFBSSxNQUFNbFgsRUFBTyxDQUNmbVgsR0FBVSxLQUFNLFFBQVNuWCxDQUFLLENBQ2xDLENBQ0UsSUFBSSxLQUFNLENBQ1IsT0FBT2tYLEdBQVUsS0FBTSxLQUFLLEdBQUssQ0FDckMsQ0FDRSxJQUFJLElBQUkzSixFQUFLLENBQ1g0SixHQUFVLEtBQU0sTUFBTzVKLENBQUcsQ0FDOUIsQ0FDQSxFQUVBd0osR0FBcUIsZUFBaUIsR0FDdEMsSUFBSUssR0FBYXBYLEdBQVUsQ0FBQyxPQUFPLE1BQU0sT0FBTyxXQUFXLEdBQUdBLENBQUssRUFBRSxDQUFDLEdBQUssT0FBTyxTQUFTLE9BQU9BLENBQUssQ0FBQyxFQUNwR2tYLEdBQVksQ0FBQ3BYLEVBQUl5QyxJQUFRLENBQzNCLE1BQU12QyxFQUFRSCxFQUFLQyxFQUFJeUMsQ0FBRyxFQUMxQixPQUFPNlUsR0FBVXBYLENBQUssRUFBSSxLQUFLLElBQUksRUFBRyxPQUFPLFdBQVdBLENBQUssQ0FBQyxFQUFJLElBQ3BFLEVBQ0ltWCxHQUFZLENBQUNyWCxFQUFJeUMsRUFBS2dDLElBQVEsQ0FDaEMsR0FBSUEsSUFBUSxNQUFRNlMsR0FBVTdTLENBQUcsRUFBRzFFLEVBQUtDLEVBQUl5QyxFQUFLLEdBQUdnQyxDQUFHLEVBQUUsTUFDckQsT0FBTSxJQUFJLE1BQU0sOEJBQThCMUUsQ0FBSSxPQUFPMEUsQ0FBRyxHQUFHLENBQ3RFLEVBQ0EsT0FBQTNDLEdBQWUsT0FBTyxhQUFjbVYsRUFBb0IiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDEwLDE4LDE5XX0=
21
+ @keyframes indeterminate { from { background-position-x: 100% } to { background-position-x: 0 } }`))}connectedCallback(){this.attributeChangedCallback()}attributeChangedCallback(){if(te)return;te=!0;const t=ts||on,e=Math.max(0,Math.round(this.position*100));this.style.setProperty("--percentage",`${e}%`);let o=ss(this);if(t&&(o=`${o.replace(/\d+%$/,"")} ${e}%`),on)for(const n of this.labels)y(n,"aria-label",o);y(this,"aria-busy",`${this.position===-1}`),y(this,"aria-label",o.trim()),y(this,"aria-labelledby",null),y(this,"aria-valuemax","100"),y(this,"aria-valuemin","0"),y(this,"aria-valuenow",`${e}`),y(this,"role",t?"img":"progressbar"),te=!1}get labels(){const t=this.closest("label:not([for])"),e=ns(this);return t&&(t.htmlFor=e),sn(this).querySelectorAll(`label[for="${e}"]`)}get position(){return this.value===null?-1:Math.min(this.value/this.max,1)}get value(){return cn(this,"value")}set value(t){dn(this,"value",t)}get max(){return cn(this,"max")||1}set max(t){dn(this,"max",t)}};rn.formAssociated=!0;var ln=t=>!Number.isNaN(Number.parseFloat(`${t}`))&&Number.isFinite(Number(t)),cn=(t,e)=>{const o=y(t,e);return ln(o)?Math.max(0,Number.parseFloat(o)):null},dn=(t,e,o)=>{if(o===null||ln(o))y(t,e,`${o}`);else throw new Error(`Failed to set non-numeric '${y}': '${o}'`)};return is.define("u-progress",rn),$.UHTMLComboboxElement=ut,$.UHTMLTabElement=de,$.UHTMLTabListElement=ce,$.UHTMLTabPanelElement=ue,$.UHTMLTabsElement=le,$.analytics=Gn,$.pagination=Qn,$.styles=Jn,$.toggleAppExpanded=Eo,$.version=Fn,Object.defineProperty($,Symbol.toStringTag,{value:"Module"}),$}({});
22
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWNvbWJvYm94L2Rpc3QvdS1jb21ib2JveC5qcyIsIi4uL2Rlc2lnbnN5c3RlbS91dGlscy50cyIsIi4uL2Rlc2lnbnN5c3RlbS9hbmFseXRpY3MvYW5hbHl0aWNzLnRzIiwiLi4vZGVzaWduc3lzdGVtL3BhZ2luYXRpb24vcGFnaW5hdGlvbi1oZWxwZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC10b2dnbGUuanMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9icmVhZGNydW1icy9icmVhZGNydW1icy1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9kaWFsb2cvZGlhbG9nLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2Vycm9yc3VtbWFyeS9lcnJvcnN1bW1hcnktb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kYXRhbGlzdC9kaXN0L3UtZGF0YWxpc3QuanMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGQvZmllbGQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGRzZXQvZmllbGRzZXQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vbG9nby9sb2dvLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3BvcG92ZXIvcG9wb3Zlci1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90YWJsZS90YWJsZS1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b2dnbGVncm91cC90b2dnbGVncm91cC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b29sdGlwL3Rvb2x0aXAtb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kZXRhaWxzL2Rpc3QvdS1kZXRhaWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtcHJvZ3Jlc3MvZGlzdC91LXByb2dyZXNzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFNBRkVfTEFCRUxMRURCWSA9IGAke0lTX0FORFJPSUQgPyBcImRhdGFcIiA6IFwiYXJpYVwifS1sYWJlbGxlZGJ5YDtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgLy8gVW5uYW1lZCBzbG90IGRvZXMgYXV0b21hdGljYWxseSByZW5kZXIgYWxsIHRvcCBlbGVtZW50IG5vZGVzXG4gIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBjc3MpXG4pO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xuXG4vLyB1LXRhYnMudHNcbnZhciBBUklBX0NPTlRST0xTID0gXCJhcmlhLWNvbnRyb2xzXCI7XG52YXIgQVJJQV9TRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xudmFyIFVIVE1MVGFic0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgRElTUExBWV9CTE9DSyk7XG4gIH1cbiAgZ2V0IHRhYkxpc3QoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFibGlzdFwiLCB0aGlzKVswXSB8fCBudWxsO1xuICB9XG4gIGdldCBzZWxlY3RlZEluZGV4KCkge1xuICAgIHJldHVybiBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicyk7XG4gIH1cbiAgc2V0IHNlbGVjdGVkSW5kZXgoaW5kZXgpIHtcbiAgICBzZXRTZWxlY3RlZCh0aGlzLnRhYnNbaW5kZXhdKTtcbiAgfVxuICBnZXQgdGFicygpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJcIiwgdGhpcyk7XG4gIH1cbiAgZ2V0IHBhbmVscygpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJwYW5lbFwiLCB0aGlzKTtcbiAgfVxufTtcbnZhciBVSFRNTFRhYkxpc3RFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFibGlzdFwiKTtcbiAgICBvbih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCkgdGhpcy5oYW5kbGVFdmVudCgpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG9mZih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LnR5cGUgPT09IFwibXV0YXRpb25cIikge1xuICAgICAgY29uc3QgdGFiID0gdGhpcy50YWJzW01hdGgubWF4KHRoaXMuc2VsZWN0ZWRJbmRleCwgMCldO1xuICAgICAgcmV0dXJuIHRhYiA9PSBudWxsID8gdm9pZCAwIDogdGFiLnNldEF0dHJpYnV0ZShBUklBX1NFTEVDVEVELCBcInRydWVcIik7XG4gICAgfVxuICAgIGNvbnN0IHsga2V5IH0gPSBldmVudDtcbiAgICBjb25zdCB0YWJzID0gWy4uLnRoaXMudGFic107XG4gICAgY29uc3QgcHJldiA9IHRhYnMuZmluZEluZGV4KCh0YWIpID0+IHRhYi5jb250YWlucyhldmVudC50YXJnZXQpKTtcbiAgICBsZXQgbmV4dCA9IHByZXY7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgcHJldiA9PT0gLTEpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSBzZXRTZWxlY3RlZCh0YWJzW3ByZXZdKTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIgJiYgIWFzQnV0dG9uKGV2ZW50KSkge1xuICAgICAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIiB8fCBrZXkgPT09IFwiQXJyb3dSaWdodFwiKVxuICAgICAgICBuZXh0ID0gKHByZXYgKyAxKSAlIHRhYnMubGVuZ3RoO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93VXBcIiB8fCBrZXkgPT09IFwiQXJyb3dMZWZ0XCIpXG4gICAgICAgIG5leHQgPSAocHJldiB8fCB0YWJzLmxlbmd0aCkgLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkVuZFwiKSBuZXh0ID0gdGFicy5sZW5ndGggLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkhvbWVcIikgbmV4dCA9IDA7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiVGFiXCIpIG5leHQgPSBnZXRTZWxlY3RlZEluZGV4KHRhYnMpO1xuICAgICAgZWxzZSByZXR1cm47XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGFic1twcmV2XS50YWJJbmRleCA9IC0xO1xuICAgICAgICB0YWJzW25leHRdLnRhYkluZGV4ID0gMDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGtleSAhPT0gXCJUYWJcIikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0YWJzW25leHRdLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldCB0YWJzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwidS10YWJzXCIpO1xuICB9XG4gIGdldCB0YWJzKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWRJbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpO1xuICB9XG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4KSB7XG4gICAgc2V0U2VsZWN0ZWQodGhpcy50YWJzW2luZGV4XSk7XG4gIH1cbn07XG52YXIgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xudmFyIFVIVE1MVGFiRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImlkXCIsIEFSSUFfU0VMRUNURUQsIEFSSUFfQ09OVFJPTFNdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUoXG4gICAgICB0aGlzLFxuICAgICAgXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jayB9XCJcbiAgICApO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFiXCIpO1xuICAgIHRoaXMudGFiSW5kZXggPSB0aGlzLnNlbGVjdGVkID8gMCA6IC0xO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoIVNLSVBfQVRUUl9DSEFOR0UgJiYgdGhpcy5zZWxlY3RlZCAmJiB0aGlzLnRhYkxpc3QpIHtcbiAgICAgIFNLSVBfQVRUUl9DSEFOR0UgPSB0cnVlO1xuICAgICAgY29uc3QgdGFicyA9IFsuLi50aGlzLnRhYkxpc3QucXVlcnlTZWxlY3RvckFsbChcInUtdGFiXCIpXTtcbiAgICAgIGNvbnN0IHBhbmVscyA9IHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFicGFuZWxcIiwgdGhpcy50YWJzRWxlbWVudCB8fCB0aGlzKTtcbiAgICAgIGNvbnN0IG5leHRQYW5lbCA9IGdldFBhbmVsKHRoaXMsIHBhbmVsc1t0YWJzLmluZGV4T2YodGhpcyldKTtcbiAgICAgIGlmIChuZXh0UGFuZWwpIGF0dHIobmV4dFBhbmVsLCBTQUZFX0xBQkVMTEVEQlksIHVzZUlkKHRoaXMpKTtcbiAgICAgIHRhYnMuZm9yRWFjaCgodGFiLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBwYW5lbCA9IGdldFBhbmVsKHRhYiwgcGFuZWxzW2luZGV4XSk7XG4gICAgICAgIHRhYi50YWJJbmRleCA9IHRhYiA9PT0gdGhpcyA/IDAgOiAtMTtcbiAgICAgICAgYXR0cih0YWIsIEFSSUFfU0VMRUNURUQsIGAke3RhYiA9PT0gdGhpc31gKTtcbiAgICAgICAgaWYgKHBhbmVsKSBwYW5lbC5oaWRkZW4gPSBwYW5lbCAhPT0gbmV4dFBhbmVsO1xuICAgICAgICBpZiAocGFuZWwpIGF0dHIodGFiLCBBUklBX0NPTlRST0xTLCBwYW5lbC5pZCk7XG4gICAgICB9KTtcbiAgICAgIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYkxpc3QoKSB7XG4gICAgY29uc3QgdGFibGlzdCA9IHRoaXMucGFyZW50RWxlbWVudDtcbiAgICByZXR1cm4gKHRhYmxpc3QgPT0gbnVsbCA/IHZvaWQgMCA6IHRhYmxpc3Qubm9kZU5hbWUpID09PSBcIlUtVEFCTElTVFwiID8gdGFibGlzdCA6IG51bGw7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIEFSSUFfU0VMRUNURUQpID09PSBcInRydWVcIjtcbiAgfVxuICBzZXQgc2VsZWN0ZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIEFSSUFfU0VMRUNURUQsIGAkeyEhdmFsdWV9YCk7XG4gIH1cbiAgLyoqIFJldHJpZXZlcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiBhbiB0YWIgaW4gYSB0YWJsaXN0LiAqL1xuICBnZXQgaW5kZXgoKSB7XG4gICAgY29uc3QgdGFiTGlzdCA9IHRoaXMudGFiTGlzdDtcbiAgICByZXR1cm4gdGFiTGlzdCA/IFsuLi50YWJMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKV0uaW5kZXhPZih0aGlzKSA6IDA7XG4gIH1cbiAgZ2V0IHBhbmVsKCkge1xuICAgIHJldHVybiBnZXRQYW5lbCh0aGlzKTtcbiAgfVxufTtcbnZhciBVSFRNTFRhYlBhbmVsRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImhpZGRlblwiXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFicGFuZWxcIik7XG4gICAgdGhpcy5oaWRkZW4gPSBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicykgPT09IC0xO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLmhpZGRlbiB8fCBpc0ZvY3VzYWJsZSh0aGlzLmZpcnN0Q2hpbGQpKVxuICAgICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIG51bGwpO1xuICAgIGVsc2UgdGhpcy50YWJJbmRleCA9IDA7XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgY29uc3QgY3NzID0gYHUtdGFiWyR7QVJJQV9DT05UUk9MU309XCIke3RoaXMuaWR9XCJdYDtcbiAgICByZXR1cm4gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKGNzcyk7XG4gIH1cbn07XG52YXIgcXVlcnlXaXRob3V0TmVzdGVkID0gKHRhZywgc2VsZikgPT4gc2VsZi5xdWVyeVNlbGVjdG9yQWxsKGAke3RhZ306bm90KDpzY29wZSB1LXRhYnBhbmVsICR7dGFnfSlgKTtcbnZhciBnZXRQYW5lbCA9ICh0YWIsIHBhbmVsKSA9PiB7XG4gIGNvbnN0IGlkMiA9IGF0dHIodGFiLCBBUklBX0NPTlRST0xTKSB8fCB1c2VJZChwYW5lbCk7XG4gIGNvbnN0IGVsID0gZ2V0Um9vdCh0YWIpLmdldEVsZW1lbnRCeUlkKGlkMik7XG4gIHJldHVybiAoZWwgPT0gbnVsbCA/IHZvaWQgMCA6IGVsLm5vZGVOYW1lKSA9PT0gXCJVLVRBQlBBTkVMXCIgPyBlbCA6IG51bGw7XG59O1xudmFyIGdldFNlbGVjdGVkSW5kZXggPSAodGFicykgPT4gWy4uLnRhYnNdLmZpbmRJbmRleCgodGFiKSA9PiBhdHRyKHRhYiwgQVJJQV9TRUxFQ1RFRCkgPT09IFwidHJ1ZVwiKTtcbnZhciBzZXRTZWxlY3RlZCA9ICh0YWIpID0+IHRhYiAmJiBhdHRyKHRhYiwgXCJhcmlhLXNlbGVjdGVkXCIsIFwidHJ1ZVwiKTtcbnZhciBpc0ZvY3VzYWJsZSA9IChlbCkgPT4gZWwgaW5zdGFuY2VvZiBFbGVtZW50ICYmICFlbC5tYXRjaGVzKCc6ZGlzYWJsZWQsW3RhYmluZGV4Xj1cIi1cIl0nKSAmJiBlbC5tYXRjaGVzKFxuICBgW2NvbnRlbnRlZGl0YWJsZV0sW2NvbnRyb2xzXSxbaHJlZl0sW3RhYmluZGV4XSxpbnB1dDpub3QoW3R5cGU9XCJoaWRkZW5cIl0pLHNlbGVjdCx0ZXh0YXJlYSxidXR0b24sc3VtbWFyeSxpZnJhbWVgXG4pO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJzXCIsIFVIVE1MVGFic0VsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJsaXN0XCIsIFVIVE1MVGFiTGlzdEVsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJcIiwgVUhUTUxUYWJFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtdGFicGFuZWxcIiwgVUhUTUxUYWJQYW5lbEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTFRhYkVsZW1lbnQsIFVIVE1MVGFiTGlzdEVsZW1lbnQsIFVIVE1MVGFiUGFuZWxFbGVtZW50LCBVSFRNTFRhYnNFbGVtZW50IH07XG4iLCJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5cbi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfRklSRUZPWCA9IElTX0JST1dTRVIgJiYgL2ZpcmVmb3gvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIEZPQ1VTX09VVExJTkUgPSBcIm91dGxpbmU6IDFweCBkb3R0ZWQ7IG91dGxpbmU6IDVweCBhdXRvIEhpZ2hsaWdodDsgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yXCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2JzZXJ2ZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgbXV0YXRpb25PYnNlcnZlciA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHJldHVybiBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpO1xuICB0cnkge1xuICAgIG9ic2VydmVycy5nZXQoZWxlbWVudCkuZGlzY29ubmVjdCgpO1xuICAgIG9ic2VydmVycy5kZWxldGUoZWxlbWVudCk7XG4gIH0gY2F0Y2ggKF9lcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0MiwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dDIpIGVsLnRleHRDb250ZW50ID0gdGV4dDI7XG4gIGlmIChhdHRycykgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJzKSkgYXR0cihlbCwga2V5LCB2YWwpO1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcbnZhciBMSVZFO1xudmFyIExJVkVfU1JfRklYID0gMDtcbnZhciBzcGVhayA9ICh0ZXh0MikgPT4ge1xuICBpZiAoIUxJVkUpIHtcbiAgICBMSVZFID0gY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBMSVZFLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmZpeGVkO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwXCI7XG4gICAgYXR0cihMSVZFLCBcImFyaWEtbGl2ZVwiLCBcImFzc2VydGl2ZVwiKTtcbiAgfVxuICBpZiAoIUxJVkUuaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKExJVkUpO1xuICBpZiAodGV4dDIpIExJVkUudGV4dENvbnRlbnQgPSBgJHt0ZXh0Mn0ke0xJVkVfU1JfRklYKysgJSAyID8gXCJcXHhBMFwiIDogXCJcIn1gO1xufTtcbnZhciBzZXRWYWx1ZSA9IChpbnB1dCwgZGF0YSwgdHlwZSA9IFwiXCIpID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSwgZGF0YSwgaW5wdXRUeXBlOiB0eXBlIH07XG4gIGNvbnN0IHByb3RvID0gSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGU7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJiZWZvcmVpbnB1dFwiLCBldmVudCkpO1xuICAoX2IgPSAoX2EyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgXCJ2YWx1ZVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5zZXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKGlucHV0LCBkYXRhKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImlucHV0XCIsIGV2ZW50KSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiY2hhbmdlXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG59O1xudmFyIElTX1BSRVNTID0gZmFsc2U7XG52YXIgaXNNb3VzZURvd24gPSAoZXZlbnQpID0+IHtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2V1cFwiKSBJU19QUkVTUyA9IGZhbHNlO1xuICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gXCJtb3VzZWRvd25cIikge1xuICAgIElTX1BSRVNTID0gdHJ1ZTtcbiAgICBvbihkb2N1bWVudCwgXCJtb3VzZXVwXCIsIGlzTW91c2VEb3duLCB7IG9uY2U6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIElTX1BSRVNTO1xufTtcblxuLy8gdS1jb21ib2JveC50c1xudmFyIEVWRU5UUyA9IFwiYmVmb3JlaW5wdXQsYmx1cixmb2N1cyxjbGljayxpbnB1dCxrZXlkb3duLG1vdXNlZG93blwiO1xudmFyIEVWRU5UX09OQ0UgPSB7IG9uY2U6IHRydWUsIHBhc3NpdmU6IHRydWUgfTtcbnZhciBJU19GSVJFRk9YX0RFU0tUT1AgPSBJU19GSVJFRk9YICYmICFJU19BTkRST0lEO1xudmFyIElTX01PQklMRSA9IElTX0FORFJPSUQgfHwgSVNfSU9TO1xudmFyIEZBTFNFID0gXCJmYWxzZVwiO1xudmFyIFRFWFRTID0ge1xuICBhZGRlZDogXCJBZGRlZFwiLFxuICBlbXB0eTogXCJObyBzZWxlY3RlZFwiLFxuICBmb3VuZDogXCJOYXZpZ2F0ZSBsZWZ0IHRvIGZpbmQgJWQgc2VsZWN0ZWRcIixcbiAgaW52YWxpZDogXCJJbnZhbGlkIHZhbHVlXCIsXG4gIG9mOiBcIm9mXCIsXG4gIHJlbW92ZTogXCJQcmVzcyB0byByZW1vdmVcIixcbiAgcmVtb3ZlZDogXCJSZW1vdmVkXCJcbn07XG52YXIgVUhUTUxDb21ib2JveEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5faXRlbSA9IFwiXCI7XG4gICAgdGhpcy5fc3BlYWsgPSBcIlwiO1xuICAgIHRoaXMuX3RleHRzID0gX19zcHJlYWRWYWx1ZXMoe30sIFRFWFRTKTtcbiAgICB0aGlzLl92YWx1ZSA9IFwiXCI7XG4gICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgICAgIC8vIENvbnRlbnQgc2xvdFxuICAgICAgY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2s7IGN1cnNvcjogcG9pbnRlcjsgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApIH0gLyogTXVzdCBiZSBkaXNwbGF5IGJsb2NrIGluIFNhZmFyaSB0byBhbGxvdyBmb2N1cyBpbnNpZGUgKi9cblx0XHRcdFx0Omhvc3QoOm5vdChbZGF0YS1tdWx0aXBsZV0pKSA6OnNsb3R0ZWQoZGF0YSksXG5cdFx0XHRcdDpob3N0KFtkYXRhLW11bHRpcGxlPVwiZmFsc2VcIl0pIDo6c2xvdHRlZChkYXRhKSB7IGRpc3BsYXk6IG5vbmUgfSAvKiBIaWRlIGRhdGEgaWYgbm90IG11bHRpcGxlICovXG5cdFx0XHRcdDo6c2xvdHRlZChpbnB1dFtpbnB1dG1vZGU9XCJub25lXCJdKSB7IG91dGxpbmU6IG5vbmUgfSAvKiBIaWRlIHRlbXBvcmFyeSBmb3VjcyBvdXRsaW5lIGZsYXNoICovXG5cdFx0XHRcdDo6c2xvdHRlZChkZWwpIHsgdGV4dC1kZWNvcmF0aW9uOiBub25lIH1cblx0XHRcdFx0OjpzbG90dGVkKGRhdGE6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBvaW50ZXItZXZlbnRzOiBub25lIH1cbiAgICAgICAgOjpzbG90dGVkKGRhdGEpOjphZnRlciB7IGNvbnRlbnQ6ICdcXFxcMDBENyc7IGNvbnRlbnQ6ICdcXFxcMDBENycgLyAnJzsgcGFkZGluZy1pbmxpbmU6IC41Y2g7IHBvaW50ZXItZXZlbnRzOiBhdXRvIH1cbiAgICAgICAgOjpzbG90dGVkKGRhdGE6Zm9jdXMpIHsgJHtGT0NVU19PVVRMSU5FfSB9YFxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgLy8gTG9jYWxseSBzdG9yZSB2YWx1ZSB0byBzdG9yZSB2YWx1ZSBiZWZvcmUgaW5wdXQtY2xpY2tcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKFRFWFRTKS5tYXAoKGtleSkgPT4gYGRhdGEtc3ItJHtrZXl9YCk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5fcm9vdCA9IGdldFJvb3QodGhpcyk7XG4gICAgb24odGhpcywgRVZFTlRTLCB0aGlzLCB0cnVlKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHtcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogW1widmFsdWVcIiwgXCJpZFwiXSxcbiAgICAgIC8vIFJlc3BvbmQgdG8gY2hhbmdlcyBpbiA8ZGF0YT4gdmFsdWUgb3IgY2hhbmdlIG9mIGlkIGZvciA8ZGF0YWxpc3Q+IHRvIHJlY29ubmVjdCB3aXRoIGlucHV0XG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgIC8vIFJlc3BvbmQgdG8gY2hhbmdlcyBpbiA8ZGF0YT4gdGV4dENvbnRlbnRcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9KTtcbiAgICBzZXRUaW1lb3V0KHJlbmRlciwgMCwgdGhpcyk7XG4gICAgc2V0VGltZW91dChzeW5jSW5wdXRWYWx1ZSwgMCwgdGhpcyk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIF8sIHZhbCkge1xuICAgIGNvbnN0IHRleHQyID0gcHJvcC5zcGxpdChcImRhdGEtc3ItXCIpWzFdO1xuICAgIGlmIChURVhUU1t0ZXh0Ml0pIHRoaXMuX3RleHRzW3RleHQyXSA9IHZhbCB8fCBURVhUU1t0ZXh0Ml07XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gICAgb2ZmKHRoaXMsIEVWRU5UUywgdGhpcywgdHJ1ZSk7XG4gICAgdGhpcy5faXRlbXMgPSB0aGlzLl9jbGVhciA9IHRoaXMuX2ZvY3VzID0gdGhpcy5fY29udHJvbCA9IHZvaWQgMDtcbiAgICB0aGlzLl9saXN0ID0gdGhpcy5fb3B0aW9ucyA9IHRoaXMuX3Jvb3QgPSB2b2lkIDA7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmVmb3JlaW5wdXRcIikgdGhpcy5fdmFsdWUgPSAodGFyZ2V0ID09IG51bGwgPyB2b2lkIDAgOiB0YXJnZXQudmFsdWUpIHx8IFwiXCI7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmx1clwiKSBvbkJsdXIodGhpcyk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikgb25DbGljayh0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiZm9jdXNcIikgb25Gb2N1cyh0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiaW5wdXRcIikgb25JbnB1dCh0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwia2V5ZG93blwiKSBvbktleURvd24odGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcIm1vdXNlZG93blwiKSBpc01vdXNlRG93bihldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwibXV0YXRpb25cIikgcmVuZGVyKHRoaXMsIGV2ZW50KTtcbiAgfVxuICBnZXQgbXVsdGlwbGUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKChfYTIgPSBhdHRyKHRoaXMsIFwiZGF0YS1tdWx0aXBsZVwiKSkgIT0gbnVsbCA/IF9hMiA6IEZBTFNFKSAhPT0gRkFMU0U7XG4gIH1cbiAgc2V0IG11bHRpcGxlKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcImRhdGEtbXVsdGlwbGVcIiwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgZ2V0IGNyZWF0YWJsZSgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoKF9hMiA9IGF0dHIodGhpcywgXCJkYXRhLWNyZWF0YWJsZVwiKSkgIT0gbnVsbCA/IF9hMiA6IEZBTFNFKSAhPT0gRkFMU0U7XG4gIH1cbiAgc2V0IGNyZWF0YWJsZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJkYXRhLWNyZWF0YWJsZVwiLCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBnZXQgY29udHJvbCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIGlmICghKChfYTIgPSB0aGlzLl9jb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmlzQ29ubmVjdGVkKSlcbiAgICAgIHRoaXMuX2NvbnRyb2wgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFwiKTtcbiAgICByZXR1cm4gdGhpcy5fY29udHJvbDtcbiAgfVxuICBnZXQgbGlzdCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIGlmICghKChfYTIgPSB0aGlzLl9saXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmlzQ29ubmVjdGVkKSlcbiAgICAgIHRoaXMuX2xpc3QgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJ1LWRhdGFsaXN0LGRhdGFsaXN0XCIpO1xuICAgIHJldHVybiB0aGlzLl9saXN0O1xuICB9XG4gIGdldCBjbGVhcigpIHtcbiAgICB2YXIgX2EyO1xuICAgIGlmICghKChfYTIgPSB0aGlzLl9jbGVhcikgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpIHRoaXMuX2NsZWFyID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwiZGVsXCIpO1xuICAgIHJldHVybiB0aGlzLl9jbGVhcjtcbiAgfVxuICBnZXQgaXRlbXMoKSB7XG4gICAgaWYgKCF0aGlzLl9pdGVtcykgdGhpcy5faXRlbXMgPSB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiZGF0YVwiKTtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgdmFyIF9hMiwgX2I7XG4gICAgaWYgKCF0aGlzLl9vcHRpb25zKSB7XG4gICAgICBjb25zdCB0YWcgPSAoKF9hMiA9IHRoaXMubGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5ub2RlTmFtZSkgPT09IFwiVS1EQVRBTElTVFwiID8gXCJ1LW9wdGlvblwiIDogXCJvcHRpb25cIjtcbiAgICAgIHRoaXMuX29wdGlvbnMgPSAoX2IgPSB0aGlzLmxpc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYi5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgfVxuICBnZXQgdmFsdWVzKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5pdGVtc10ubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKTtcbiAgfVxufTtcbnZhciB0ZXh0ID0gKGVsKSA9PiB7XG4gIHZhciBfYTI7XG4gIHJldHVybiAoKF9hMiA9IGVsID09IG51bGwgPyB2b2lkIDAgOiBlbC50ZXh0Q29udGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG59O1xudmFyIGlzRGF0YSA9IChlbCkgPT4gZWwgaW5zdGFuY2VvZiBIVE1MRGF0YUVsZW1lbnQ7XG52YXIgcmVuZGVyID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTIsIF9iO1xuICBjb25zdCB7IF9mb2N1cywgX3RleHRzLCBpdGVtcywgY29udHJvbCwgbGlzdCwgbXVsdGlwbGUgfSA9IHNlbGY7XG4gIGxldCBsYWJlbCA9IGAke3RleHQoKF9hMiA9IGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wubGFiZWxzKSA9PSBudWxsID8gdm9pZCAwIDogX2EyWzBdKX0sICR7bXVsdGlwbGUgPyBpdGVtcy5sZW5ndGggPyBfdGV4dHMuZm91bmQucmVwbGFjZShcIiVkXCIsIGAke2l0ZW1zLmxlbmd0aH1gKSA6IF90ZXh0cy5lbXB0eSA6IFwiXCJ9YDtcbiAgY29uc3QgZWRpdHMgPSBbXTtcbiAgZm9yIChjb25zdCB7IGFkZGVkTm9kZXMsIHJlbW92ZWROb2RlcyB9IG9mIChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQuZGV0YWlsKSB8fCBbXSkge1xuICAgIGZvciAoY29uc3QgZWwgb2YgYWRkZWROb2RlcykgaWYgKGlzRGF0YShlbCkpIGVkaXRzLnVuc2hpZnQoZWwpO1xuICAgIGZvciAoY29uc3QgZWwgb2YgcmVtb3ZlZE5vZGVzKSBpZiAoaXNEYXRhKGVsKSkgZWRpdHMucHVzaChlbCk7XG4gIH1cbiAgY29uc3Qgc2hvdWxkQW5ub3VuY2UgPSBtdWx0aXBsZSA/IGVkaXRzLmxlbmd0aCA9PT0gMSA6IGVkaXRzWzBdID09PSBfZm9jdXM7XG4gIGlmIChfZm9jdXMgJiYgY29udHJvbCAmJiBzaG91bGRBbm5vdW5jZSkge1xuICAgIGNvbnN0IGlucHV0TW9kZSA9IGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIik7XG4gICAgY29uc3QgbmV4dEZvY3VzID0gaXNEYXRhKF9mb2N1cykgPyBjb250cm9sIDogX2ZvY3VzO1xuICAgIHNlbGYuX3NwZWFrID0gYCR7X3RleHRzW2VkaXRzWzBdLmlzQ29ubmVjdGVkID8gXCJhZGRlZFwiIDogXCJyZW1vdmVkXCJdfSAke3RleHQoZWRpdHNbMF0pfSwgYDtcbiAgICBpZiAoSVNfTU9CSUxFIHx8IF9mb2N1cyA9PT0gY29udHJvbCkgc3BlYWsoc2VsZi5fc3BlYWspO1xuICAgIGlmIChjb250cm9sICE9PSBuZXh0Rm9jdXMpIHtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJhcmlhLWV4cGFuZGVkXCIsIG51bGwpO1xuICAgICAgYXR0cihjb250cm9sLCBcImlucHV0bW9kZVwiLCBcIm5vbmVcIik7XG4gICAgICBsYWJlbCA9IFwiXFx4QTBcIjtcbiAgICAgIGNvbnRyb2wuZm9jdXMoKTtcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB2YXIgX2EzO1xuICAgICAgYXR0cihjb250cm9sLCBcImFyaWEtZXhwYW5kZWRcIiwgXCJ0cnVlXCIpO1xuICAgICAgYXR0cihjb250cm9sLCBcImlucHV0bW9kZVwiLCBpbnB1dE1vZGUpO1xuICAgICAgKF9hMyA9IG5leHRGb2N1cyA9PSBudWxsID8gdm9pZCAwIDogbmV4dEZvY3VzLmZvY3VzKSA9PSBudWxsID8gdm9pZCAwIDogX2EzLmNhbGwobmV4dEZvY3VzKTtcbiAgICAgIHNlbGYuX3NwZWFrID0gXCJcIjtcbiAgICAgIGlmIChJU19GSVJFRk9YX0RFU0tUT1ApIG9uKHNlbGYsIFwiYmx1clwiLCAoKSA9PiByZW5kZXIoc2VsZiksIEVWRU5UX09OQ0UpO1xuICAgICAgZWxzZSBzZXRUaW1lb3V0KHJlbmRlciwgMTAwLCBzZWxmKTtcbiAgICB9LCAxMDApO1xuICB9XG4gIGxldCBpZHggPSAwO1xuICBjb25zdCBzZWxlY3QgPSBzZWxmLnF1ZXJ5U2VsZWN0b3IoXCJzZWxlY3RcIik7XG4gIGZvciAoY29uc3QgaXRlbTIgb2YgaXRlbXMpIHtcbiAgICBjb25zdCBvcHRpb24gPSBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5vcHRpb25zW2lkeF07XG4gICAgY29uc3QgbGFiZWwyID0gdGV4dChpdGVtMik7XG4gICAgY29uc3QgdmFsdWUgPSBpdGVtMi52YWx1ZSB8fCBsYWJlbDI7XG4gICAgY29uc3QgYXJpYSA9IGAke3NlbGYuX3NwZWFrfSR7bGFiZWwyfSwgJHtfdGV4dHMucmVtb3ZlfSwgJHsrK2lkeH0gJHtfdGV4dHMub2Z9ICR7aXRlbXMubGVuZ3RofWA7XG4gICAgYXR0cihpdGVtMiwgXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuICAgIGF0dHIoaXRlbTIsIFwidmFsdWVcIiwgdmFsdWUpO1xuICAgIGF0dHIoaXRlbTIsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcbiAgICBhdHRyKGl0ZW0yLCBcImFyaWEtbGFiZWxcIiwgYXJpYSk7XG4gICAgaWYgKG9wdGlvbikgT2JqZWN0LmFzc2lnbihvcHRpb24sIHsgdGV4dENvbnRlbnQ6IGxhYmVsMiwgdmFsdWUgfSk7XG4gICAgZWxzZSBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5hcHBlbmRDaGlsZChuZXcgT3B0aW9uKGxhYmVsMiwgdmFsdWUsIHRydWUsIHRydWUpKTtcbiAgfVxuICBpZiAoc2VsZWN0KSBhdHRyKHNlbGVjdCwgXCJtdWx0aXBsZVwiLCBtdWx0aXBsZSA/IFwiXCIgOiBudWxsKTtcbiAgZm9yIChjb25zdCBvcHQgb2YgWy4uLihzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5vcHRpb25zKSB8fCBbXV0uc2xpY2UoaWR4KSkgb3B0LnJlbW92ZSgpO1xuICBpZiAoIW11bHRpcGxlICYmIGlkeCA+IDEpXG4gICAgY29uc29sZS53YXJuKFwidS1jb21ib2JveDogTXVsdGlwbGUgPGRhdGE+IGZvdW5kIGluIHNpbmdsZSBtb2RlLlwiKTtcbiAgaWYgKGxpc3QpIGF0dHIobGlzdCwgXCJhcmlhLW11bHRpc2VsZWN0YWJsZVwiLCBgJHttdWx0aXBsZX1gKTtcbiAgaWYgKGNvbnRyb2wpIGF0dHIoY29udHJvbCwgXCJsaXN0XCIsIHVzZUlkKGxpc3QpKTtcbiAgaWYgKGNvbnRyb2wpIGF0dHIoY29udHJvbCwgXCJhcmlhLWxhYmVsXCIsIGAke3NlbGYuX3NwZWFrfSR7bGFiZWx9YCk7XG4gIGNvbnN0IGl0ZW0gPSB0ZXh0KGl0ZW1zWzBdKTtcbiAgaWYgKGl0ZW0gIT09IHNlbGYuX2l0ZW0pIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICBzZWxmLl9pdGVtID0gaXRlbTtcbiAgc3luY0NsZWFyV2l0aElucHV0KHNlbGYpO1xuICBzeW5jT3B0aW9uc1dpdGhJdGVtcyhzZWxmKTtcbiAgKF9iID0gbXV0YXRpb25PYnNlcnZlcihzZWxmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLnRha2VSZWNvcmRzKCk7XG59O1xudmFyIHN5bmNDbGVhcldpdGhJbnB1dCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChzZWxmLmNsZWFyKSBhdHRyKHNlbGYuY2xlYXIsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgaWYgKHNlbGYuY2xlYXIpIHNlbGYuY2xlYXIuaGlkZGVuID0gISgoX2EyID0gc2VsZi5jb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnZhbHVlKTtcbn07XG52YXIgc3luY09wdGlvbnNXaXRoSXRlbXMgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IF9zcGVhaywgb3B0aW9ucyA9IFtdLCB2YWx1ZXMgfSA9IHNlbGY7XG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IChfYTIgPSBhdHRyKG9wdCwgXCJ2YWx1ZVwiKSkgIT0gbnVsbCA/IF9hMiA6IHRleHQob3B0KTtcbiAgICBhdHRyKG9wdCwgXCJhcmlhLWxhYmVsXCIsIF9zcGVhayA/IGAke19zcGVha30ke3RleHQob3B0KX1gIDogbnVsbCk7XG4gICAgYXR0cihvcHQsIFwic2VsZWN0ZWRcIiwgdmFsdWVzLmluY2x1ZGVzKHZhbHVlKSA/IFwiXCIgOiBudWxsKTtcbiAgfVxufTtcbnZhciBzeW5jSW5wdXRWYWx1ZSA9IChzZWxmKSA9PiB7XG4gIGNvbnN0IHsgbXVsdGlwbGUsIGNvbnRyb2wsIGl0ZW1zIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9IHRleHQoaXRlbXNbMF0pO1xuICBpZiAoIW11bHRpcGxlICYmIGNvbnRyb2wgJiYgdmFsdWUgIT09IGNvbnRyb2wudmFsdWUpXG4gICAgc2V0VmFsdWUoY29udHJvbCwgdmFsdWUsIHZhbHVlID8gXCJpbnNlcnRUZXh0XCIgOiBcImRlbGV0ZUNvbnRlbnRcIik7XG59O1xudmFyIGRpc3BhdGNoTWF0Y2ggPSAoc2VsZiwgY2hhbmdlID0gdHJ1ZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IF90ZXh0cywgb3B0aW9ucyA9IFtdLCBjcmVhdGFibGUsIGNvbnRyb2wsIGl0ZW1zLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgdmFsdWUgPSAoKF9hMiA9IGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBxdWVyeSA9IHZhbHVlLnRvTG93ZXJDYXNlKCkgfHwgbnVsbDtcbiAgbGV0IG1hdGNoID0gWy4uLm9wdGlvbnNdLmZpbmQoXG4gICAgKG9wdCkgPT4gKGF0dHIob3B0LCBcImxhYmVsXCIpIHx8IHRleHQob3B0KSkudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09IHF1ZXJ5XG4gICk7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IG1hdGNoIH07XG4gIGlmICghc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImJlZm9yZW1hdGNoXCIsIGV2ZW50KSkpXG4gICAgbWF0Y2ggPSBbLi4ub3B0aW9uc10uZmluZCgobykgPT4gby5zZWxlY3RlZCk7XG4gIGlmIChjaGFuZ2UpIHtcbiAgICBzeW5jT3B0aW9uc1dpdGhJdGVtcyhzZWxmKTtcbiAgICBpZiAobWF0Y2gpIHJldHVybiBkaXNwYXRjaENoYW5nZShzZWxmLCBtYXRjaCwgZmFsc2UpO1xuICAgIGlmIChjcmVhdGFibGUgJiYgdmFsdWUpIHJldHVybiBkaXNwYXRjaENoYW5nZShzZWxmLCB7IHZhbHVlIH0sIGZhbHNlKTtcbiAgICBpZiAoIW11bHRpcGxlICYmICF2YWx1ZSAmJiBpdGVtc1swXSkgZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgaXRlbXNbMF0pO1xuICAgIGVsc2Ugc3luY0lucHV0VmFsdWUoc2VsZik7XG4gICAgcmV0dXJuIHNwZWFrKF90ZXh0cy5pbnZhbGlkKTtcbiAgfVxuICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKSBvcHQuc2VsZWN0ZWQgPSBvcHQgPT09IG1hdGNoO1xufTtcbnZhciBkaXNwYXRjaENoYW5nZSA9IChzZWxmLCBpdGVtLCByZW1vdmFibGUgPSB0cnVlKSA9PiB7XG4gIGNvbnN0IHsgY29udHJvbCwgaXRlbXMsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCBhZGQgPSBjcmVhdGVFbGVtZW50KFwiZGF0YVwiLCBpdGVtLmxhYmVsIHx8IGl0ZW0udmFsdWUsIHtcbiAgICB2YWx1ZTogaXRlbS52YWx1ZVxuICB9KTtcbiAgY29uc3QgcmVtb3ZlID0gWy4uLml0ZW1zXS5maW5kKChpKSA9PiBpLnZhbHVlID09PSBpdGVtLnZhbHVlKTtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIGRldGFpbDogcmVtb3ZlIHx8IGFkZCB9O1xuICBjb25zdCBza2lwID0gcmVtb3ZlICYmICFyZW1vdmFibGU7XG4gIGlmIChza2lwKSByZXR1cm4gc3luY0lucHV0VmFsdWUoc2VsZik7XG4gIGlmIChzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiYmVmb3JlY2hhbmdlXCIsIGV2ZW50KSkpIHtcbiAgICBpZiAoIW11bHRpcGxlKSBmb3IgKGNvbnN0IGl0ZW0yIG9mIFsuLi5pdGVtc10pIGl0ZW0yLnJlbW92ZSgpO1xuICAgIGlmIChyZW1vdmUpIHJlbW92ZS5yZW1vdmUoKTtcbiAgICBlbHNlIGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYmVmb3JlYmVnaW5cIiwgYWRkKTtcbiAgICBzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiYWZ0ZXJjaGFuZ2VcIiwgZXZlbnQpKTtcbiAgfVxufTtcbnZhciBvbkZvY3VzID0gKHNlbGYsIHsgdGFyZ2V0IH0pID0+IHtcbiAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBzZWxmLl9mb2N1cyA9IHRhcmdldDtcbiAgc3BlYWsoKTtcbn07XG52YXIgb25CbHVyID0gKHNlbGYpID0+IGlzTW91c2VEb3duKCkgfHwgc2V0VGltZW91dChvbkJsdXJyZWQsIDAsIHNlbGYpO1xudmFyIG9uQmx1cnJlZCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmICghc2VsZi5fZm9jdXMgfHwgc2VsZi5jb250YWlucygoX2EyID0gc2VsZi5fcm9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5hY3RpdmVFbGVtZW50KSkgcmV0dXJuO1xuICBpZiAoIXNlbGYubXVsdGlwbGUpIGRpc3BhdGNoTWF0Y2goc2VsZik7XG4gIHNlbGYuX2ZvY3VzID0gdm9pZCAwO1xufTtcbnZhciBvbkNsaWNrID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIGNvbnN0IHsgY2xpZW50WDogeCwgY2xpZW50WTogeSwgdGFyZ2V0IH0gPSBldmVudDtcbiAgY29uc3QgeyBjbGVhciwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGlmIChjbGVhciA9PSBudWxsID8gdm9pZCAwIDogY2xlYXIuY29udGFpbnModGFyZ2V0KSkge1xuICAgIGlmIChjb250cm9sKSBzZXRWYWx1ZShjb250cm9sLCBcIlwiLCBcImRlbGV0ZUNvbnRlbnRCYWNrd2FyZFwiKTtcbiAgICByZXR1cm4gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpO1xuICB9XG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSBpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChpdGVtLmNvbnRhaW5zKHRhcmdldCkpIHJldHVybiBkaXNwYXRjaENoYW5nZShzZWxmLCBpdGVtKTtcbiAgICBpZiAoeSA+PSB0b3AgJiYgeSA8PSBib3R0b20gJiYgeCA+PSBsZWZ0ICYmIHggPD0gcmlnaHQpIHJldHVybiBpdGVtLmZvY3VzKCk7XG4gIH1cbiAgaWYgKHRhcmdldCA9PT0gc2VsZikgY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpO1xufTtcbnZhciBvbklucHV0ID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgb3B0aW9ucyA9IFtdLCBjb250cm9sLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgdmFsdWUgPSAoKF9hMiA9IGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBpc0NsaWNrID0gZXZlbnQgaW5zdGFuY2VvZiBJbnB1dEV2ZW50ID8gIWV2ZW50LmlucHV0VHlwZSB8fCBldmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0XCIgOiAhIXZhbHVlO1xuICBpZiAoaXNDbGljaykge1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIGlmIChjb250cm9sKSBjb250cm9sLnZhbHVlID0gc2VsZi5fdmFsdWU7XG4gICAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucylcbiAgICAgIGlmIChvcHQudmFsdWUgJiYgb3B0LnZhbHVlID09PSB2YWx1ZSlcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIG9wdCwgbXVsdGlwbGUpO1xuICB9IGVsc2UgaWYgKCFtdWx0aXBsZSkgZGlzcGF0Y2hNYXRjaChzZWxmLCBmYWxzZSk7XG4gIHN5bmNDbGVhcldpdGhJbnB1dChzZWxmKTtcbn07XG52YXIgb25LZXlEb3duID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LnNoaWZ0S2V5KSByZXR1cm47XG4gIGNvbnN0IHsgY2xlYXIsIGNvbnRyb2wsIGl0ZW1zIH0gPSBzZWxmO1xuICBjb25zdCB7IGtleSwgcmVwZWF0LCB0YXJnZXQgfSA9IGV2ZW50O1xuICBjb25zdCBpc0NvbnRyb2wgPSBjb250cm9sICYmIGNvbnRyb2wgPT09IHRhcmdldDtcbiAgY29uc3QgaW5UZXh0ID0gaXNDb250cm9sICYmIChjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLnNlbGVjdGlvbkVuZCk7XG4gIGxldCBpbmRleCA9IGlzQ29udHJvbCA/IGl0ZW1zLmxlbmd0aCA6IFsuLi5pdGVtc10uaW5kZXhPZih0YXJnZXQpO1xuICBpZiAoaXNDb250cm9sICYmIGtleSA9PT0gXCJUYWJcIiAmJiBjbGVhciAmJiAhY2xlYXIuaGlkZGVuKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjbGVhci50YWJJbmRleCA9IC0xO1xuICAgIGNsZWFyLmZvY3VzKCk7XG4gICAgb24oY2xlYXIsIFwiYmx1clwiLCAoKSA9PiBhdHRyKGNsZWFyLCBcInRhYmluZGV4XCIsIG51bGwpLCBFVkVOVF9PTkNFKTtcbiAgfVxuICBpZiAoIWlzQ29udHJvbCAmJiBhc0J1dHRvbihldmVudCkgfHwgaW5kZXggPT09IC0xKSByZXR1cm47XG4gIGlmIChrZXkgPT09IFwiQXJyb3dSaWdodFwiICYmICFpc0NvbnRyb2wpIGluZGV4ICs9IDE7XG4gIGVsc2UgaWYgKGtleSA9PT0gXCJBcnJvd0xlZnRcIiAmJiAhaW5UZXh0KSBpbmRleCAtPSAxO1xuICBlbHNlIGlmIChrZXkgPT09IFwiRW50ZXJcIiAmJiBpc0NvbnRyb2wpIHtcbiAgICBjb25zdCBmb3JtID0gYXR0cihjb250cm9sLCBcImZvcm1cIik7XG4gICAgYXR0cihjb250cm9sLCBcImZvcm1cIiwgXCIjXCIpO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiLCBmb3JtKSk7XG4gICAgcmV0dXJuIGRpc3BhdGNoTWF0Y2goc2VsZik7XG4gIH0gZWxzZSBpZiAoKGtleSA9PT0gXCJCYWNrc3BhY2VcIiB8fCBrZXkgPT09IFwiRGVsZXRlXCIpICYmICFpblRleHQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghcmVwZWF0ICYmIGl0ZW1zW2luZGV4XSkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW1zW2luZGV4XSk7XG4gICAgaWYgKGlzQ29udHJvbCkgaW5kZXggLT0gMTtcbiAgfSBlbHNlIHJldHVybiBpc0NvbnRyb2wgfHwgKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuZm9jdXMoKSk7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIChfYTIgPSBpdGVtc1tNYXRoLm1heCgwLCBpbmRleCldIHx8IGNvbnRyb2wpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZm9jdXMoKTtcbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LWNvbWJvYm94XCIsIFVIVE1MQ29tYm9ib3hFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxDb21ib2JveEVsZW1lbnQgfTtcbiIsImltcG9ydCB7IGNsc3ggfSBmcm9tIFwiY2xzeFwiO1xuXG5leHBvcnQgY29uc3QgUVVJQ0tfRVZFTlQgPSB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IHRydWUgfTtcbmV4cG9ydCBjb25zdCBJU19CUk9XU0VSID1cblx0dHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCI7XG5cbi8vIFRPRE86IERvY3VtZW50YXRpb24gZm9yIHByZXR0eU51bWJlclxubGV0IElOVExfTlVNOiBJbnRsLk51bWJlckZvcm1hdCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBwcmV0dHlOdW1iZXIobnVtYmVyOiBudW1iZXIgfCBzdHJpbmcpIHtcblx0aWYgKCFJTlRMX05VTSlcblx0XHRJTlRMX05VTSA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChcblx0XHRcdChJU19CUk9XU0VSICYmIGF0dHIoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBcImxhbmdcIikpIHx8IFwibm9cIixcblx0XHQpO1xuXHRyZXR1cm4gSU5UTF9OVU0uZm9ybWF0KE51bWJlcihudW1iZXIpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlYm91bmNlPFQgZXh0ZW5kcyB1bmtub3duW10+KFxuXHRjYWxsYmFjazogKC4uLmFyZ3M6IFQpID0+IHZvaWQsXG5cdGRlbGF5OiBudW1iZXIsXG4pIHtcblx0bGV0IHRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcblxuXHRyZXR1cm4gKC4uLmFyZ3M6IFQpID0+IHtcblx0XHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRcdHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBjYWxsYmFjayguLi5hcmdzKSwgZGVsYXkpO1xuXHR9O1xufVxuXG4vKipcbiAqIGF0dHJcbiAqIEBkZXNjcmlwdGlvbiBVdGlsaXR5IHRvIHF1aWNrbHkgZ2V0LCBzZXQgYW5kIHJlbW92ZSBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0gZWwgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gbmFtZSBUaGUgYXR0cmlidXRlIG5hbWUgdG8gZ2V0LCBzZXQgb3IgcmVtb3ZlLCBvciBhIG9iamVjdCB0byBzZXQgbXVsdGlwbGUgYXR0cmlidXRlc1xuICogQHBhcmFtIHZhbHVlIEEgdmFsaWQgYXR0cmlidXRlIHZhbHVlIG9yIG51bGwgdG8gcmVtb3ZlIGF0dHJpYnV0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0cihcblx0ZWw6IEVsZW1lbnQsXG5cdG5hbWU6IHN0cmluZyxcblx0dmFsdWU/OiBzdHJpbmcgfCBudWxsLFxuKTogc3RyaW5nIHwgbnVsbCB7XG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpID8/IG51bGw7IC8vIEZhbGxiYWNrIHRvIG51bGwgb25seSBpZiBlbCBpcyB1bmRlZmluZWRcblx0aWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG5cdHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIHVzZUlkXG4gKiBAcmV0dXJuIEEgZ2VuZXJhdGVkIHVuaXF1ZSBJRFxuICovXG5sZXQgaWQgPSAwO1xuY29uc3QgVVVJRCA9IGAke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgNSl9YDtcbmV4cG9ydCBmdW5jdGlvbiB1c2VJZChlbDogRWxlbWVudCkge1xuXHRpZiAoIWVsLmlkKSBlbC5pZCA9IGAke1VVSUR9JHsrK2lkfWA7XG5cdHJldHVybiBlbC5pZDtcbn1cblxuLy8gSW50ZXJuYWwgaGVscGVyIGZvciBvbiAvIG9mZlxuY29uc3QgZXZlbnRzID0gKFxuXHRhY3Rpb246IFwiYWRkXCIgfCBcInJlbW92ZVwiLFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHRyZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPixcbik6IHZvaWQgPT4ge1xuXHRmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcblx0XHRyZXN0WzBdID0gdHlwZTtcblx0XHRlbGVtZW50W2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0oLi4ucmVzdCk7XG5cdH1cbn07XG5cbi8qKlxuICogb25cbiAqIEBwYXJhbSBlbGVtZW50IFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIHR5cGVzIEEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBldmVudCB0eXBlc1xuICogQHBhcmFtIGxpc3RlbmVyIEFuIGV2ZW50IGxpc3RlbmVyIGZ1bmN0aW9uIG9yIGxpc3RlbmVyIG9iamVjdFxuICovXG5leHBvcnQgY29uc3Qgb24gPSAoXG5cdGVsZW1lbnQ6IE5vZGUgfCBXaW5kb3csXG5cdC4uLnJlc3Q6IFBhcmFtZXRlcnM8dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI+XG4pOiB2b2lkID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcblxuLyoqXG4gKiBvZmZcbiAqIEBwYXJhbSBlbGVtZW50IFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIHR5cGVzIEEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBldmVudCB0eXBlc1xuICogQHBhcmFtIGxpc3RlbmVyIEFuIGV2ZW50IGxpc3RlbmVyIGZ1bmN0aW9uIG9yIGxpc3RlbmVyIG9iamVjdFxuICovXG5leHBvcnQgY29uc3Qgb2ZmID0gKFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHQuLi5yZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPlxuKTogdm9pZCA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG5cbi8qKlxuICogU2Nyb2xsZXIgdGFyZ2VzIGhlbHBpbmcgYW5jaG9yUG9zaXRpb25cbiAqL1xuY29uc3QgU0NST0xMRVIgPSBJU19CUk9XU0VSID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSA6IG51bGw7IC8vIFVzZWQgdG8gZW5zdXJlIHdlIGhhdmUgc2Nyb2xsYWJpbGl0eSB1bmRlclxuY29uc3QgVEFSR0VUUyA9IG5ldyBNYXA8RWxlbWVudCwgKCkgPT4gdm9pZD4oKTsgLy8gU3RvcmUgY3VycmVudCBvcGVuIHBvcHBlcnMgYW5kIHRoZWlyIHVwZGF0ZSBmdW5jdGlvbnNcbmNvbnN0IFRBUkdFVFNfVVBEQVRFID0gKCkgPT4ge1xuXHRmb3IgKGNvbnN0IFtfLCB1cGRhdGVdIG9mIFRBUkdFVFMpIHVwZGF0ZSgpO1xufTtcblxuaWYgKFNDUk9MTEVSKSB7XG5cdFNDUk9MTEVSLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO3BhZGRpbmc6MXB4O3RvcDowO2xlZnQ6MHB4XCI7XG5cdG9uKHdpbmRvdywgXCJsb2FkLHJlc2l6ZSxzY3JvbGxcIiwgVEFSR0VUU19VUERBVEUsIFFVSUNLX0VWRU5UKTtcbn1cblxuLyoqXG4gKiBhbmNob3JQb3NpdGlvblxuICogQHBhcmFtIHRhcmdldCBUaGUgRWxlbWVudCB0byBwb3NpdGlvblxuICogQHBhcmFtIGFuY2hvciBUaGUgRWxlbWVudCB0byB1c2UgYXMgYW5jaG9yXG4gKi9cbmNvbnN0IFBPU0lUSU9OID0geyB0b3A6IDAsIHJpZ2h0OiAxLCBib3R0b206IDIsIGxlZnQ6IDMgfTsgLy8gU3BlZWQgdXAgYnkgdXNpbmcgYSBjb25zdCBtYXBcblxuZXhwb3J0IHR5cGUgQW5jaG9yUG9zaXRpb24gPSBrZXlvZiB0eXBlb2YgUE9TSVRJT047XG5cbmV4cG9ydCBmdW5jdGlvbiBhbmNob3JQb3NpdGlvbihcblx0dGFyZ2V0OiBIVE1MRWxlbWVudCxcblx0YW5jaG9yOiBFbGVtZW50IHwgZmFsc2UsXG5cdHBsYWNlPzogc3RyaW5nIHwgbnVtYmVyLFxuXHRmb3JjZT86IGJvb2xlYW4sXG4pIHtcblx0Y29uc3QgcG9zaXRpb24gPVxuXHRcdFBPU0lUSU9OW3BsYWNlIGFzIGtleW9mIHR5cGVvZiBQT1NJVElPTl0gPz9cblx0XHROdW1iZXIocGxhY2UpID8/XG5cdFx0UE9TSVRJT04uYm90dG9tO1xuXG5cdGlmIChhbmNob3IgPT09IGZhbHNlIHx8ICFhbmNob3IuaXNDb25uZWN0ZWQgfHwgIXRhcmdldC5pc0Nvbm5lY3RlZClcblx0XHRyZXR1cm4gVEFSR0VUUy5kZWxldGUodGFyZ2V0KTsgLy8gU3RvcCB3YXRjaGluZyBpZiBhbmNob3IgaXMgcmVtb3ZlZCBmcm9tIERPTVxuXHRpZiAoIVNDUk9MTEVSPy5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmQoU0NST0xMRVIgfHwgXCJcIik7IC8vIEVuc3VyZSB3ZSBoYXZlIHRoZSBzY3JvbGxlclxuXHRpZiAoIVRBUkdFVFMuaGFzKHRhcmdldCkpXG5cdFx0VEFSR0VUUy5zZXQodGFyZ2V0LCAoKSA9PiBhbmNob3JQb3NpdGlvbih0YXJnZXQsIGFuY2hvciwgcG9zaXRpb24sIGZvcmNlKSk7XG5cblx0Y29uc3QgaXNIVE1MQW5jaG9yID0gYW5jaG9yIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7IC8vIFNWRyBvciBYTUwgZWxlbWVudHMgZG9lcyBub3QgaGF2ZSBvZmZzZXRXaWR0aCBvciBvZmZzZXRIZWlnaHRcblx0Y29uc3QgeyBvZmZzZXRXaWR0aDogdGFyZ2V0Vywgb2Zmc2V0SGVpZ2h0OiB0YXJnZXRIIH0gPSB0YXJnZXQ7XG5cdGNvbnN0IGFuY2hvclcgPSBpc0hUTUxBbmNob3IgPyBhbmNob3Iub2Zmc2V0V2lkdGggOiBhbmNob3IuY2xpZW50V2lkdGg7XG5cdGNvbnN0IGFuY2hvckggPSBpc0hUTUxBbmNob3IgPyBhbmNob3Iub2Zmc2V0SGVpZ2h0IDogYW5jaG9yLmNsaWVudEhlaWdodDtcblx0Y29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBsZWZ0LCB0b3AgfSA9IGFuY2hvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHQvLyBHZXQgdmlzdWFsIHZpZXdwb3J0IGluZm9cblx0Y29uc3Qgdmlld1cgPSB3aW5kb3cudmlzdWFsVmlld3BvcnQ/LndpZHRoIHx8IHdpbmRvdy5pbm5lcldpZHRoO1xuXHRjb25zdCB2aWV3SCA9IHdpbmRvdy52aXN1YWxWaWV3cG9ydD8uaGVpZ2h0IHx8IHdpbmRvdy5pbm5lckhlaWdodDtcblx0Y29uc3Qgc2Nyb2xsWCA9IHdpbmRvdy5wYWdlWE9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDtcblx0Y29uc3Qgc2Nyb2xsWSA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuXG5cdGNvbnN0IGFuY2hvclggPSBNYXRoLnJvdW5kKGxlZnQgLSAoYW5jaG9yVyAtIHdpZHRoKSAvIDIpOyAvLyBDb3JyZWN0IGZvciBDU1MgdHJhbnNmb3JtIHNjYWxlXG5cdGNvbnN0IGFuY2hvclkgPSBNYXRoLnJvdW5kKHRvcCAtIChhbmNob3JIIC0gaGVpZ2h0KSAvIDIpOyAvLyBDb3JyZWN0IGZvciBDU1MgdHJhbnNmb3JtIHNjYWxlXG5cdGNvbnN0IGNlbnRlclggPSBNYXRoLm1pbihcblx0XHRNYXRoLm1heCgxMCwgYW5jaG9yWCAtICh0YXJnZXRXIC0gYW5jaG9yVykgLyAyKSxcblx0XHR2aWV3VyAtIHRhcmdldFcgLSAxMCxcblx0KTtcblx0Y29uc3QgY2VudGVyWSA9IE1hdGgubWluKFxuXHRcdE1hdGgubWF4KDEwLCBhbmNob3JZIC0gKHRhcmdldEggLSBhbmNob3JIKSAvIDIpLFxuXHRcdHZpZXdIIC0gdGFyZ2V0SCAtIDEwLFxuXHQpO1xuXG5cdC8vIFVzZSB2aXN1YWwgdmlld3BvcnQgZGltZW5zaW9ucyBmb3Igc3BhY2UgY2FsY3VsYXRpb25zXG5cdGNvbnN0IGhhc1NwYWNlTGVmdCA9IGFuY2hvclggLSB0YXJnZXRXID4gMDtcblx0Y29uc3QgaGFzU3BhY2VSaWdodCA9IGFuY2hvclggKyBhbmNob3JXICsgdGFyZ2V0VyA8IHZpZXdXO1xuXHRjb25zdCBoYXNTcGFjZU92ZXIgPSBhbmNob3JZIC0gdGFyZ2V0SCA+IDA7XG5cdGNvbnN0IGhhc1NwYWNlVW5kZXIgPSBhbmNob3JZICsgYW5jaG9ySCArIHRhcmdldEggPCB2aWV3SDtcblxuXHRjb25zdCBpc1ZlcnRpY2FsID0gcG9zaXRpb24gPT09IFBPU0lUSU9OLnRvcCB8fCBwb3NpdGlvbiA9PT0gUE9TSVRJT04uYm90dG9tO1xuXHRjb25zdCBpc1JpZ2h0ID1cblx0XHQocG9zaXRpb24gPT09IFBPU0lUSU9OLnJpZ2h0ICYmIChmb3JjZSB8fCBoYXNTcGFjZVJpZ2h0KSkgfHwgIWhhc1NwYWNlTGVmdDsgLy8gQWx3YXlzIHBvc2l0aW9uIHJpZ2h0IHdoZW4gbm8gaGFzU3BhY2VMZWZ0LCBhcyBubyBPUyBzY3JvbGxzIGZ1cnRoZXIgbGVmdCB0aGFuIDBcblx0Y29uc3QgaXNVbmRlciA9XG5cdFx0KHBvc2l0aW9uID09PSBQT1NJVElPTi5ib3R0b20gJiYgKGZvcmNlIHx8IGhhc1NwYWNlVW5kZXIpKSB8fCAhaGFzU3BhY2VPdmVyOyAvLyBBbHdheXMgcG9zaXRpb24gdW5kZXIgd2hlbiBubyBoYXNTcGFjZU92ZXIsIGFzIG5vIE9TIHNjcm9sbHMgZnVydGhlciB1cCB0aGFuIDBcblxuXHQvLyBDYWxjdWxhdGUgcG9zaXRpb25zIGluIHZpZXdwb3J0IGNvb3JkaW5hdGVzXG5cdGNvbnN0IHZpZXdYID0gTWF0aC5yb3VuZChcblx0XHRpc1ZlcnRpY2FsID8gY2VudGVyWCA6IGlzUmlnaHQgPyBhbmNob3JYICsgYW5jaG9yVyA6IGFuY2hvclggLSB0YXJnZXRXLFxuXHQpO1xuXHRjb25zdCB2aWV3WSA9IE1hdGgucm91bmQoXG5cdFx0aXNWZXJ0aWNhbCA/IChpc1VuZGVyID8gYW5jaG9yWSArIGFuY2hvckggOiBhbmNob3JZIC0gdGFyZ2V0SCkgOiBjZW50ZXJZLFxuXHQpO1xuXG5cdC8vIFVzZSBhYnNvbHV0ZSBwb3NpdGlvbmluZ1xuXHR0YXJnZXQuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cdHRhcmdldC5zdHlsZS5sZWZ0ID0gYCR7dmlld1ggKyBzY3JvbGxYfXB4YDtcblx0dGFyZ2V0LnN0eWxlLnRvcCA9IGAke3ZpZXdZICsgc2Nyb2xsWX1weGA7XG5cblx0U0NST0xMRVI/LnN0eWxlLnNldFByb3BlcnR5KFxuXHRcdFwidHJhbnNsYXRlXCIsXG5cdFx0YDBweCAke01hdGgucm91bmQoaXNVbmRlciA/IHNjcm9sbFggKyBhbmNob3JZICsgYW5jaG9ySCArIHRhcmdldEggKyAzMCA6IDApfXB4YCxcblx0KTtcbn1cblxuLyoqXG4gKiBTcGVlZCB1cCBNdXRhdGlvbk9ic2VydmVyIGJ5IGRlYm91bmNpbmcgYW5kIG9ubHkgcnVubmluZyB3aGVuIHBhZ2UgaXMgdmlzaWJsZVxuICogQHJldHVybiBuZXcgTXV0YWlvbk9ic2VydmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrOiBNdXRhdGlvbkNhbGxiYWNrKSB7XG5cdGxldCBxdWV1ZSA9IDA7XG5cblx0Y29uc3Qgb25GcmFtZSA9ICgpID0+IHNldFRpbWVvdXQob25UaW1lciwgMjAwKTsgLy8gVXNlIGJvdGggcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGFuZCBzZXRUaW1lb3V0IHRvIGRlYm91bmNlIGFuZCBvbmx5IHJ1biB3aGVuIHZpc2libGVcblx0Y29uc3Qgb25UaW1lciA9ICgpID0+IHtcblx0XHRjYWxsYmFjayhbXSwgb2JzZXJ2ZXIpO1xuXHRcdG9ic2VydmVyLnRha2VSZWNvcmRzKCk7IC8vIENsZWFyIHJlY29yZHMgdG8gYXZvaWQgcnVubmluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuXHRcdHF1ZXVlID0gMDtcblx0fTtcblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG5cdFx0aWYgKCFxdWV1ZSkgcXVldWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUob25GcmFtZSk7XG5cdH0pO1xuXG5cdHJldHVybiBvYnNlcnZlcjtcbn1cblxuLyoqXG4gKiBvbk11dGF0aW9uXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IG9ic2VydmUgbXV0YXRpb25zIG9uIGEgc3BlY2lmaWMgY2xhc3MgbmFtZVxuICogQHBhcmFtIGVsIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIGNsYXNzTmFtZSBUaGUgY2xhc3MgbmFtZSB0byBvYnNlcnZlXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIHJ1biB3aGVuIG11dGF0aW9ucyBhcmUgZGV0ZWN0ZWRcbiAqL1xuY29uc3QgTVVUQVRPUlMgPSBuZXcgV2Vha01hcDxFbGVtZW50LCBBcnJheTwoKSA9PiB2b2lkPj4oKTtcbmV4cG9ydCBjb25zdCBvbk11dGF0aW9uID0gPFQgZXh0ZW5kcyBFbGVtZW50Pihcblx0ZWw6IEVsZW1lbnQsXG5cdGNsYXNzTmFtZTogc3RyaW5nLFxuXHRjYWxsYmFjazogKGVsZW1zOiBIVE1MQ29sbGVjdGlvbk9mPFQ+KSA9PiB2b2lkLFxuKSA9PiB7XG5cdGNvbnN0IGVsZW1zID0gZWwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWUpO1xuXHRjb25zdCBtdXRhdG9yID0gTVVUQVRPUlMuZ2V0KGVsKSB8fCBbXTtcblxuXHRpZiAoIW11dGF0b3IubGVuZ3RoKSB7XG5cdFx0TVVUQVRPUlMuc2V0KGVsLCBtdXRhdG9yKTtcblx0XHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKChfLCBvYnNlcnZlcikgPT4ge1xuXHRcdFx0aWYgKGVsLmlzQ29ubmVjdGVkICYmIG11dGF0b3I/Lmxlbmd0aCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIG11dGF0b3IpIGNhbGxiYWNrKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRNVVRBVE9SUy5kZWxldGUoZWwpO1xuXHRcdFx0fVxuXHRcdH0pLm9ic2VydmUoZWwsIHtcblx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogW1wiY2xhc3NcIiwgXCJoaWRkZW5cIl0sXG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdFx0c3VidHJlZTogdHJ1ZSxcblx0XHR9KTtcblx0fVxuXHRtdXRhdG9yLnB1c2goKCkgPT4gY2FsbGJhY2soZWxlbXMgYXMgSFRNTENvbGxlY3Rpb25PZjxUPikpO1xufTtcblxuLyoqXG4gKiBvbkxvYWRlZFxuICogQGRlc2NyaXB0aW9uIFJ1bnMgYSBjYWxsYmFjayB3aGVuIHdpbmRvdyBpcyBsb2FkZWQgaW4gYnJvd3NlclxuICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBydW4gd2hlbiB0aGUgcGFnZSBpcyByZWFkeVxuICovXG5leHBvcnQgY29uc3Qgb25Mb2FkZWQgPSAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHtcblx0aWYgKCFJU19CUk9XU0VSKSByZXR1cm47XG5cdGNvbnN0IHJ1biA9ICgpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjayk7IC8vIEVuc3VyZSB3ZSBydW4gYWZ0ZXIgYWxsIG90aGVyIGxvYWQgZXZlbnRzXG5cdGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHJ1bigpO1xuXHRlbHNlIG9uKHdpbmRvdywgXCJsb2FkXCIsIHJ1bik7XG59O1xuXG4vKipcbiAqIGlzSW5wdXRMaWtlXG4gKiBAZGVzY3JpcHRpb24gQ2hlY2sgaWYgZWxlbWVudCBpcyBhbiBpbnB1dCBsaWtlIGVsZW1lbnRcbiAqIEBwYXJhbSBlbCBUaGUgZWxlbWVudCB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyBhbiBpbnB1dCBsaWtlIGVsZW1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IGlzSW5wdXRMaWtlID0gKGVsOiB1bmtub3duKTogZWwgaXMgSFRNTElucHV0RWxlbWVudCA9PlxuXHRlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG5cdFwidmFsaWRpdHlcIiBpbiBlbCAmJlxuXHQhKGVsIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpO1xuXG4vKipcbiAqIHRvQ3VzdG9tRWxlbWVudFByb3BzXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IGNvbnZlcnQgcHJvcHMgdG8gY3VzdG9tIGVsZW1lbnQgYXR0cmlidXRlc1xuICogQHBhcmFtIHByb3BzIFRoZSBwcm9wcyB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIHByb3BzXG4gKi9cbmV4cG9ydCBjb25zdCB0b0N1c3RvbUVsZW1lbnRQcm9wcyA9IChcblx0eyBjbGFzc05hbWUsIGhpZGRlbiwgb3BlbiwgLi4ucmVzdCB9OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0a2xhc3M/OiBzdHJpbmcsXG4pID0+IHtcblx0cmVzdC5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcgPSB0cnVlOyAvLyBNYWtlIE5leHQuanMgaGFwcHlcblx0cmVzdC5jbGFzcyA9IGNsc3goa2xhc3MsIGNsYXNzTmFtZSB8fCBcIlwiKSB8fCB1bmRlZmluZWQ7IC8vIFVzZSBjbGFzcyBpbnN0ZWFkIG9mIGNsYXNzTmFtZVxuXHRpZiAoaGlkZGVuKSByZXN0LmhpZGRlbiA9IHRydWU7IC8vIEVuc3VyZSBib29sZWFuIHByb3AgYmVoYXZpb3VyXG5cdGlmIChvcGVuKSByZXN0Lm9wZW4gPSB0cnVlOyAvLyBFbnN1cmUgYm9vbGVhbiBwcm9wIGJlaGF2aW91clxuXHRyZXR1cm4gcmVzdDtcbn07XG4iLCJpbXBvcnQgeyBJU19CUk9XU0VSIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IE1BVE9NTyA9IFwibWF0dGlsc3luZXQubWF0b21vLmNsb3VkXCI7XG5sZXQgRU5BQkxFRDogQW5hbHl0aWNzQWN0aW9uc1tcImluaXRcIl1bXCJlbmFibGVkXCJdID0gdHJ1ZTtcblxudHlwZSBNYXRvbW8gPSAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbilbXTtcbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIFdpbmRvdyB7XG5cdFx0X3BhcT86IE1hdG9tb1tdO1xuXHRcdF9tdG0/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+W107XG5cdH1cbn1cblxuLy8gd2luZG93Ll9wYXEgPSB3aW5kb3cuX3BhcSB8fCBbXTtcbi8vIHdpbmRvdy5fbXRtID0gd2luZG93Ll9tdG0gfHwgW107XG5cbi8vIHdpbmRvdy5fcGFxLnB1c2goW1wic2V0Q3VzdG9tVXJsXCIsIGAke2RvY3VtZW50LmxvY2F0aW9uLmhyZWZ9JmVpcmlrYF0pO1xuLy8gd2luZG93Ll9wYXEucHVzaChbXCJzZXREb2N1bWVudFRpdGxlXCIsIFwiRWlyaWsgM1wiXSk7XG4vLyB3aW5kb3cuX210bS5wdXNoKHtcbi8vIFx0ZXZlbnQ6IFwibXRtLlN0YXJ0XCIsXG4vLyBcdFwibXRtLnN0YXJ0VGltZVwiOiBuZXcgRGF0ZSgpLmdldFRpbWUoKSxcbi8vIFx0Y3VzdG9tVGl0bGU6IFwiRWlyaWsgMVwiLFxuLy8gXHRjdXN0b21Vcmw6IGAke2RvY3VtZW50LmxvY2F0aW9uLmhyZWZ9JmVpcmlrYCxcbi8vIH0pO1xuXG4vLyB3aW5kb3cuX210bS5wdXNoKHtcbi8vIFx0ZXZlbnQ6IFwibXRtLlBhZ2VWaWV3XCIsXG4vLyBcdGN1c3RvbVRpdGxlOiBcIkVpcmlrIDJcIixcbi8vIFx0Y3VzdG9tVXJsOiBgJHtkb2N1bWVudC5sb2NhdGlvbi5ocmVmfSZlaXJpa2AsXG4vLyB9KTtcblxuLy8gY29uc3QgY29udGFpbmVySWQgPSBcIkE5dXRLazNPXCI7XG5cbi8vIGRvY3VtZW50LmhlYWQuYXBwZW5kKFxuLy8gXHRPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIiksIHtcbi8vIFx0XHRzcmM6IGBodHRwczovL2Nkbi5tYXRvbW8uY2xvdWQvbWF0dGlsc3luZXQubWF0b21vLmNsb3VkL2NvbnRhaW5lcl8ke2NvbnRhaW5lcklkfS5qc2AsXG4vLyBcdFx0YXN5bmM6IHRydWUsXG4vLyBcdFx0b25sb2FkOiAoKSA9PiBjb25zb2xlLmxvZyh3aW5kb3cuX3BhcSksXG4vLyBcdH0pLFxuLy8gKTtcblxuZXhwb3J0IHR5cGUgQW5hbHl0aWNzQWN0aW9ucyA9IHtcblx0aW5pdDoge1xuXHRcdG1hdG9tb0lkOiBudW1iZXIgfCBzdHJpbmc7XG5cdFx0ZW5hYmxlZD86IGJvb2xlYW4gfCBcImRlYnVnXCI7XG5cdH07XG5cdHBhZ2V2aWV3OiB7XG5cdFx0dXJsPzogc3RyaW5nO1xuXHRcdHRpdGxlPzogc3RyaW5nO1xuXHR9O1xuXHRldmVudDoge1xuXHRcdGNhdGVnb3J5OiBzdHJpbmc7XG5cdFx0YWN0aW9uOiBzdHJpbmc7XG5cdFx0bmFtZT86IHN0cmluZztcblx0XHR2YWx1ZT86IG51bWJlcjtcblx0fTtcblx0c2VhcmNoOiB7XG5cdFx0cXVlcnk6IHN0cmluZztcblx0XHRjYXRlZ29yeT86IHN0cmluZztcblx0XHRyZXN1bHRzPzogbnVtYmVyO1xuXHR9O1xuXHRtYXRvbW86IE1hdG9tbztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhbmFseXRpY3M8QWN0aW9uIGV4dGVuZHMga2V5b2YgQW5hbHl0aWNzQWN0aW9ucz4oXG5cdGFjdGlvbjogQWN0aW9uLFxuXHRhcmdzID0ge30gYXMgQW5hbHl0aWNzQWN0aW9uc1tBY3Rpb25dLFxuKSB7XG5cdGlmICghSVNfQlJPV1NFUikgcmV0dXJuO1xuXHRpZiAoIXdpbmRvdy5fcGFxKSB7XG5cdFx0d2luZG93Ll9wYXEgPSBbXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcIkhlYXRtYXBTZXNzaW9uUmVjb3JkaW5nOjpkaXNhYmxlXCJdKTsgLy8gRGlzYWJsZSBoZWF0bWFwcyBieSBkZWZhdWx0IGFzIHRoaXMgcmVxdWlyZSBjb29raWVzXG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJlbmFibGVMaW5rVHJhY2tpbmdcIl0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0VHJhY2tlclVybFwiLCBgaHR0cHM6Ly8ke01BVE9NT30vbWF0b21vLnBocGBdKTtcblx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzY3JpcHRbc3JjKj1cIm1hdG9tby5qc1wiXScpIHx8XG5cdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZChcblx0XHRcdFx0T2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpLCB7XG5cdFx0XHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRcdFx0c3JjOiBgaHR0cHM6Ly9jZG4ubWF0b21vLmNsb3VkLyR7TUFUT01PfS9tYXRvbW8uanNgLFxuXHRcdFx0XHR9KSxcblx0XHRcdCk7XG5cdH1cblx0aWYgKGFjdGlvbiA9PT0gXCJpbml0XCIpIHtcblx0XHRjb25zdCB7IG1hdG9tb0lkLCBlbmFibGVkID0gdHJ1ZSB9ID0gYXJncyBhcyBBbmFseXRpY3NBY3Rpb25zW1wiaW5pdFwiXTtcblx0XHRFTkFCTEVEID0gZW5hYmxlZDtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldFNpdGVJZFwiLCBtYXRvbW9JZF0pO1xuXHR9XG5cblx0aWYgKEVOQUJMRUQgPT09IFwiZGVidWdcIikgcmV0dXJuIGNvbnNvbGUuaW5mbyhgQW5hbHl0aWNzOiBcIiR7YWN0aW9ufVwiYCwgYXJncyk7XG5cdGlmIChFTkFCTEVEID09PSBmYWxzZSB8fCB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgPT09IFwibG9jYWxob3N0XCIpIHJldHVybjtcblxuXHRpZiAoYWN0aW9uID09PSBcInBhZ2V2aWV3XCIpIHtcblx0XHRjb25zdCB7IHVybCwgdGl0bGUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcInBhZ2V2aWV3XCJdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0Q3VzdG9tVXJsXCIsIHVybCB8fCBsb2NhdGlvbi5ocmVmXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXREb2N1bWVudFRpdGxlXCIsIHRpdGxlIHx8IGRvY3VtZW50LnRpdGxlXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJ0cmFja1BhZ2VWaWV3XCJdKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwiZXZlbnRcIikge1xuXHRcdGNvbnN0IHsgY2F0ZWdvcnksIGFjdGlvbiwgbmFtZSwgdmFsdWUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcImV2ZW50XCJdO1xuXHRcdGNvbnN0IGV2ZW50ID0gW1widHJhY2tFdmVudFwiLCBjYXRlZ29yeSwgYWN0aW9uLCBuYW1lLCB2YWx1ZV07XG5cdFx0d2luZG93Ll9wYXEucHVzaChldmVudC5maWx0ZXIoKHYpID0+IHYgIT09IHVuZGVmaW5lZCkpO1xuXHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJzZWFyY2hcIikge1xuXHRcdGNvbnN0IHtcblx0XHRcdHF1ZXJ5LFxuXHRcdFx0Y2F0ZWdvcnkgPSBmYWxzZSxcblx0XHRcdHJlc3VsdHMgPSBmYWxzZSxcblx0XHR9ID0gYXJncyBhcyBBbmFseXRpY3NBY3Rpb25zW1wic2VhcmNoXCJdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1widHJhY2tTaXRlU2VhcmNoXCIsIHF1ZXJ5LCBjYXRlZ29yeSwgcmVzdWx0c10pO1xuXHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJtYXRvbW9cIikge1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goYXJncyBhcyBBbmFseXRpY3NBY3Rpb25zW1wibWF0b21vXCJdKTtcblx0fVxufVxuIiwiY29uc3QgZ2V0U3RlcHMgPSAoXG5cdG5vdzogbnVtYmVyLFxuXHRtYXg6IG51bWJlcixcblx0c2hvdyA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbikgPT4ge1xuXHRjb25zdCBvZmZzZXQgPSAoc2hvdyAtIDEpIC8gMjtcblx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1heChNYXRoLm1pbihub3cgLSBNYXRoLmZsb29yKG9mZnNldCksIG1heCAtIHNob3cgKyAxKSwgMSk7XG5cdGNvbnN0IGVuZCA9IE1hdGgubWluKE1hdGgubWF4KG5vdyArIE1hdGguY2VpbChvZmZzZXQpLCBzaG93KSwgbWF4KTtcblx0Y29uc3QgcGFnZXMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBlbmQgKyAxIC0gc3RhcnQgfSwgKF8sIGkpID0+IGkgKyBzdGFydCk7XG5cblx0aWYgKHNob3cgPiA0ICYmIHN0YXJ0ID4gMSkgcGFnZXMuc3BsaWNlKDAsIDIsIDEsIDApO1xuXHRpZiAoc2hvdyA+IDMgJiYgZW5kIDwgbWF4KSBwYWdlcy5zcGxpY2UoLTIsIDIsIDAsIG1heCk7XG5cdHJldHVybiBwYWdlcztcbn07XG5cbmV4cG9ydCBjb25zdCBwYWdpbmF0aW9uID0gKHsgY3VycmVudCA9IDEsIHRvdGFsID0gMTAsIHNob3cgPSA3IH0pID0+ICh7XG5cdHByZXY6IGN1cnJlbnQgPiAxID8gY3VycmVudCAtIDEgOiAwLFxuXHRuZXh0OiBjdXJyZW50IDwgdG90YWwgPyBjdXJyZW50ICsgMSA6IDAsXG5cdHBhZ2VzOiBnZXRTdGVwcyhjdXJyZW50LCB0b3RhbCwgc2hvdykubWFwKChwYWdlLCBpbmRleCkgPT4gKHtcblx0XHRjdXJyZW50OiBwYWdlID09PSBjdXJyZW50ICYmIChcInBhZ2VcIiBhcyBjb25zdCksXG5cdFx0a2V5OiBga2V5LSR7cGFnZX0tJHtpbmRleH1gLFxuXHRcdHBhZ2UsXG5cdH0pKSxcbn0pO1xuIiwiaWYgKFxuXHR0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdHdpbmRvdy5DU1NTdHlsZVNoZWV0ICYmXG5cdGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0c1xuKVxuXHQoKCkgPT4ge1xuXHRcdGNvbnN0IGtleSA9IFwiLS1tdGRzLWFwcC1leHBhbmRlZFwiO1xuXHRcdGNvbnN0IHNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblx0XHRjb25zdCBwcmV2ID0gKCkgPT4gIXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpPy5pbmNsdWRlcyhcImZhbHNlXCIpO1xuXG5cdFx0ZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzLnB1c2goc2hlZXQpO1xuXHRcdHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQgPSAoZm9yY2UpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IG5leHQgPSBmb3JjZSA/PyAhcHJldigpO1xuXHRcdFx0XHRzaGVldC5yZXBsYWNlU3luYz8uKGA6cm9vdCB7ICR7a2V5fTogdmFyKCR7a2V5fS0tJHtuZXh0fSl9YCk7XG5cdFx0XHRcdHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIG5leHQpO1xuXHRcdFx0fSBjYXRjaCAoX2Vycikge30gLy8gbG9jYWxTdG9yYWdlIGlzIGZ1bGwgb3IgcmVwbGFjZVN5bmMgaXMgbm90IHN1cHBvcnRlZFxuXHRcdH07XG5cblx0XHQvLyBTZXQgYW5kIHN0b3JlIGluaXRpYWwgc3RhdGVcblx0XHR3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkKHByZXYoKSk7XG5cdH0pKCk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgZGVib3VuY2UsIG9uLCBvbkxvYWRlZCwgb25NdXRhdGlvbiwgUVVJQ0tfRVZFTlQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCBcIi4vYXBwLXRvZ2dsZVwiO1xuXG5jb25zdCBDU1NfQVBQID0gc3R5bGVzLmFwcC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfU1RJQ0tZID0gc3R5bGVzLnN0aWNreS5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVE9HR0xFID0gJ1tkYXRhLWNvbW1hbmQ9XCJ0b2dnbGUtYXBwLWV4cGFuZGVkXCJdJztcbmNvbnN0IENTU19TSURFQkFSID0gYC4ke0NTU19BUFB9ID4gZGlhbG9nLC4ke0NTU19BUFB9IGRpYWxvZyB+IG1haW5gO1xuXG5jb25zdCB1c2VUcmFuc2l0aW9uID0gKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB7XG5cdGlmICghZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbikgY2FsbGJhY2soKTtcblx0ZWxzZSBkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydCBjb25zdCB0b2dnbGVBcHBFeHBhbmRlZCA9IChmb3JjZT86IGJvb2xlYW4pID0+XG5cdC8vIEB0cy1leHBlY3QtZXJyb3Igd2luZG93Lm10ZHNBcHBUb2dnbGUgY29tZXMgZnJvbSBhcHAtdG9nZ2xlLmpzXG5cdHVzZVRyYW5zaXRpb24oKCkgPT4gd2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZD8uKGZvcmNlKSk7XG5cbmZ1bmN0aW9uIGhhbmRsZVRvZ2dsZUNsaWNrKHsgdGFyZ2V0OiBlbCwgZGVmYXVsdFByZXZlbnRlZDogc3RvcCB9OiBFdmVudCkge1xuXHRpZiAoc3RvcCB8fCAhKGVsIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpIHx8ICFlbC5tYXRjaGVzKENTU19UT0dHTEUpKVxuXHRcdHJldHVybjtcblx0aWYgKGdldENvbXB1dGVkU3R5bGUoZWwpLnBvc2l0aW9uID09PSBcInN0aWNreVwiKSByZXR1cm4gdG9nZ2xlQXBwRXhwYW5kZWQoKTtcblx0dXNlVHJhbnNpdGlvbigoKSA9PiB7XG5cdFx0Y29uc3Qgc2lkZWJhciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpYWxvZ0VsZW1lbnQ+KENTU19TSURFQkFSKTtcblx0XHRzaWRlYmFyPy5zZXRBdHRyaWJ1dGUoXCJkYXRhLWNsb3NlZGJ5XCIsIFwiYW55XCIpOyAvLyBBbGxvdyBjbG9zaW5nIGJ5IGNsaWNraW5nIG91dHNpZGVcblx0XHRzaWRlYmFyPy5zaG93TW9kYWwoKTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVJlc2l6ZSgpIHtcblx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGlhbG9nRWxlbWVudD4oQ1NTX1NJREVCQVIpPy5jbG9zZSgpO1xufVxuXG4vLyBTY3JvbGwgc3RhdGVcbmxldCBNSU5fWSA9IDA7IC8vIE9mZnNldCB0byBhdm9pZCBzY3JvbGwganVtcCB3aGVuIHN0aWNreSBpcyBzZXQgdG8gcmVsYXRpdmVcbmxldCBTQ1JPTExfVVA6IGJvb2xlYW47XG5sZXQgU1RJQ0sgPSAwOyAvLyAtMSA9IHN0aWNrIHRvcCwgMCA9IHJlbGF0aXZlLCAxID0gc3RpY2sgYm90dG9tXG5sZXQgU1RJQ0tfRUw6IEhUTUxFbGVtZW50O1xubGV0IFNUSUNLX0ggPSAwO1xubGV0IFNUSUNLX1kgPSAwO1xubGV0IFNUVUNLID0gZmFsc2U7IC8vIFVzZWQgdG8gZmlndXJlIGlmIG5hdiBpcyBsYXJnZXIgdGhhbiB2aWV3cG9ydFxubGV0IFdJTl9IID0gMDtcbmxldCBXSU5fWSA9IDA7XG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKFtzdGlja3ldOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRTVElDS19FTCA9IHN0aWNreTtcblx0aGFuZGxlU2Nyb2xsKCk7IC8vIFJ1biBvbiBjb25uZWN0XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVNjcm9sbCgpIHtcblx0aWYgKCFTVElDS19FTD8uaXNDb25uZWN0ZWQpIHJldHVybjtcblx0Y29uc3QgTkVYVF9ZID0gd2luZG93LnNjcm9sbFk7XG5cdGNvbnN0IE5FWFRfVVAgPSBORVhUX1kgPCBXSU5fWTtcblx0V0lOX1kgPSBORVhUX1k7XG5cblx0Ly8gT25seSBjYWxjdWxhdGUgaWYgc2Nyb2xsIGRpcmVjdGlvbiBoYXMgY2hhbmdlZFxuXHRpZiAoTkVYVF9VUCAhPT0gU0NST0xMX1VQKSB7XG5cdFx0TUlOX1kgPSAoU1RJQ0tfRUwucGFyZW50RWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIHx8IDApICsgV0lOX1k7XG5cdFx0U0NST0xMX1VQID0gTkVYVF9VUDtcblx0XHRTVElDS19IID0gU1RJQ0tfRUwub2Zmc2V0SGVpZ2h0O1xuXHRcdFNUSUNLX1kgPSBTVElDS19FTC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyBXSU5fWTtcblx0XHRTVFVDSyA9IFNUSUNLX0VMLm9mZnNldEhlaWdodCA8PSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdFx0V0lOX0ggPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdH1cblxuXHRpZiAoU1RJQ0sgPT09IC0xICYmIFNUVUNLKSByZXR1cm47IC8vIEFsbHdheXMgc3RpY2t5IHdoZW4gc2lkZWJhciBpcyBzbWFsbGVyIHRoYW4gdmlld3BvcnRcblx0aWYgKFNUSUNLICE9PSAtMSAmJiAoU1RVQ0sgfHwgKFNDUk9MTF9VUCAmJiBXSU5fWSA8PSBTVElDS19ZKSkpIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwic3RpY2t5XCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgXCIwcHhcIik7XG5cdFx0U1RJQ0sgPSAtMTsgLy8gTm90IHN0aWNraW5nIHRvIHRvcCBhbmQgc2lkZWJhciBpcyBzbWFsbGVyIHRoYW4gdmlld3BvcnQgb3Igc2Nyb2xsaW5nIHVwXG5cdH0gZWxzZSBpZiAoU1RJQ0sgPT09IC0xICYmICFTQ1JPTExfVVApIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwicmVsYXRpdmVcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBgJHtNYXRoLm1heCgwLCBXSU5fWSAtIE1JTl9ZKX1weGApO1xuXHRcdFNUSUNLID0gMDsgLy8gU3RpY2tpbmcgdG8gdG9wIGFuZCBzY3JvbGxpbmcgZG93blxuXHR9IGVsc2UgaWYgKFNUSUNLICE9PSAxICYmICFTQ1JPTExfVVAgJiYgV0lOX1kgKyBXSU5fSCA+PSBTVElDS19ZICsgU1RJQ0tfSCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJzdGlja3lcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBgJHtXSU5fSCAtIFNUSUNLX0h9cHhgKTtcblx0XHRTVElDSyA9IDE7IC8vIE5vdCBzdGlja2luZyB0byBib3R0b20gYW5kIHNjcm9sbGluZyBkb3duXG5cdH0gZWxzZSBpZiAoU1RJQ0sgPT09IDEgJiYgU0NST0xMX1VQKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInJlbGF0aXZlXCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7U1RJQ0tfWSAtIE1JTl9ZfXB4YCk7XG5cdFx0U1RJQ0sgPSAwOyAvLyBTdGlja2luZyB0byBib3R0b20gYW5kIHNjcm9sbGluZyB1cFxuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19TVElDS1ksIGhhbmRsZU11dGF0aW9uKTtcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlVG9nZ2xlQ2xpY2ssIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcInJlc2l6ZVwiLCBkZWJvdW5jZShoYW5kbGVSZXNpemUsIDEwMCksIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcInNjcm9sbFwiLCBoYW5kbGVTY3JvbGwsIFFVSUNLX0VWRU5UKTtcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19CUkVBRENSVU1CUyA9IHN0eWxlcy5icmVhZGNydW1icy5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKGJyZWFkY3J1bWJzOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRmb3IgKGNvbnN0IGJyZWFkY3VtYnMgb2YgYnJlYWRjcnVtYnMpXG5cdFx0YnJlYWRjdW1icy5xdWVyeVNlbGVjdG9yQWxsKFwibGkgYVwiKS5mb3JFYWNoKChjcnVtYiwgaW5kZXgsIHsgbGVuZ3RoIH0pID0+IHtcblx0XHRcdGF0dHIoY3J1bWIsIFwiYXJpYS1jdXJyZW50XCIsIGluZGV4ID09PSBsZW5ndGggLSAxID8gXCJwYWdlXCIgOiBudWxsKTtcblx0XHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19CUkVBRENSVU1CUywgaGFuZGxlTXV0YXRpb24pLFxuKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRhdHRyLFxuXHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyLFxuXHRJU19CUk9XU0VSLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdFFVSUNLX0VWRU5ULFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0RJQUxPRyA9IHN0eWxlcy5kaWFsb2cuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgRElBTE9HUyA9IElTX0JST1dTRVJcblx0PyAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcblx0XHRcdENTU19ESUFMT0csXG5cdFx0KSBhcyBIVE1MQ29sbGVjdGlvbk9mPEhUTUxEaWFsb2dFbGVtZW50Pilcblx0OiBbXTtcblxuY29uc3QgaGFuZGxlTW9kYWwgPSAoKSA9PiB7XG5cdGZvciAoY29uc3QgZGlhbG9nIG9mIERJQUxPR1MpXG5cdFx0aWYgKGRpYWxvZy5pc0Nvbm5lY3RlZCAmJiBkaWFsb2cuc2hvd01vZGFsICYmIGRpYWxvZy5jbG9zZSkge1xuXHRcdFx0aWYgKGRpYWxvZy5tYXRjaGVzKCdbb3Blbl06bm90KFtkYXRhLW1vZGFsPVwiZmFsc2VcIl0pOm5vdCg6bW9kYWwpJykpIHtcblx0XHRcdFx0YXR0cihkaWFsb2csIFwib3BlblwiLCBudWxsKTsgLy8gVXNpbmcgYXR0cmlidXRlIGluc3RlYWQgb2YgLmNsb3NlIHRvIGF2b2lkIGBjbG9zZWAgZXZlbnRcblx0XHRcdFx0ZGlhbG9nLnNob3dNb2RhbCgpO1xuXHRcdFx0fSBlbHNlIGlmIChkaWFsb2cubWF0Y2hlcyhcIjptb2RhbDpub3QoW29wZW5dKVwiKSkge1xuXHRcdFx0XHRhdHRyKGRpYWxvZywgXCJvcGVuXCIsIFwiXCIpOyAvLyBTZXQgYXMgb3BlblxuXHRcdFx0XHRkaWFsb2cuY2xvc2UoKTsgLy8gU28gd2UgY29ycmVjbHR5IGNhbiBjYWxsIC5jbG9zZSwgcmVtb3ZpbmcgPGRpYWxvZz4gZnJvbSAjdG9wLWxheWVyXG5cdFx0XHR9XG5cdFx0fVxufTtcblxuY29uc3QgaGFuZGxlQ2xpY2sgPSAoeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5LCB0YXJnZXQ6IGVsIH06IE1vdXNlRXZlbnQpID0+IHtcblx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTERpYWxvZ0VsZW1lbnQgJiYgYXR0cihlbCwgXCJkYXRhLWNsb3NlZGJ5XCIpID09PSBcImFueVwiKSB7XG5cdFx0Y29uc3QgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQgfSA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdGNvbnN0IGlzSW5zaWRlID0gdG9wIDw9IHkgJiYgeSA8PSBib3R0b20gJiYgbGVmdCA8PSB4ICYmIHggPD0gcmlnaHQ7XG5cblx0XHRpZiAoIWlzSW5zaWRlKSBlbC5jbG9zZSgpO1xuXHR9IGVsc2UgaWYgKFxuXHRcdGVsIGluc3RhbmNlb2YgRWxlbWVudCAmJlxuXHRcdGVsLmNsb3Nlc3QoJ2J1dHRvbltkYXRhLWNvbW1hbmQ9XCJjbG9zZVwiXScpXG5cdCkge1xuXHRcdGVsPy5jbG9zZXN0KFwiZGlhbG9nXCIpPy5jbG9zZSgpO1xuXHR9XG59O1xuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZUNsaWNrIGFzIEV2ZW50TGlzdGVuZXIsIFFVSUNLX0VWRU5UKTtcblx0Y3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcihoYW5kbGVNb2RhbCkub2JzZXJ2ZShcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG5cdFx0e1xuXHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbXCJvcGVuXCJdLFxuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRcdHN1YnRyZWU6IHRydWUsXG5cdFx0fSxcblx0KTtcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIG9uLCBvbkxvYWRlZCwgUVVJQ0tfRVZFTlQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZnVuY3Rpb24gaGFuZGxlSW5qZWN0KGV2ZW50OiBFdmVudCAmIHsgYW5pbWF0aW9uTmFtZT86IHN0cmluZyB9KSB7XG5cdGlmIChldmVudC5hbmltYXRpb25OYW1lICE9PSBzdHlsZXMuX2Vycm9yc3VtbWFyeSkgcmV0dXJuO1xuXHRjb25zdCBmaXJzdCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCk/LmZpcnN0RWxlbWVudENoaWxkO1xuXG5cdGlmIChmaXJzdCBpbnN0YW5jZW9mIEhUTUxIZWFkaW5nRWxlbWVudCkge1xuXHRcdGF0dHIoZmlyc3QsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcblx0XHRmaXJzdC5mb2N1cygpOyAvLyBBdXRvZm9jdXMgZmlyc3QgaGVhZGluZ1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uKGRvY3VtZW50LCBcImFuaW1hdGlvbmVuZFwiLCBoYW5kbGVJbmplY3QsIFFVSUNLX0VWRU5UKSk7XG4iLCJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5cbi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfSU9TID0gSVNfQlJPV1NFUiAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgU0FGRV9MQUJFTExFREJZID0gYCR7SVNfQU5EUk9JRCA/IFwiZGF0YVwiIDogXCJhcmlhXCJ9LWxhYmVsbGVkYnlgO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBGT0NVU19PVVRMSU5FID0gXCJvdXRsaW5lOiAxcHggZG90dGVkOyBvdXRsaW5lOiA1cHggYXV0byBIaWdobGlnaHQ7IG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvclwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIGF0dGFjaFN0eWxlID0gKGVsZW1lbnQsIGNzcykgPT4gZWxlbWVudC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAvLyBVbm5hbWVkIHNsb3QgZG9lcyBhdXRvbWF0aWNhbGx5IHJlbmRlciBhbGwgdG9wIGVsZW1lbnQgbm9kZXNcbiAgY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIGNzcylcbik7XG52YXIgb2JzZXJ2ZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgbXV0YXRpb25PYnNlcnZlciA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHJldHVybiBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpO1xuICB0cnkge1xuICAgIG9ic2VydmVycy5nZXQoZWxlbWVudCkuZGlzY29ubmVjdCgpO1xuICAgIG9ic2VydmVycy5kZWxldGUoZWxlbWVudCk7XG4gIH0gY2F0Y2ggKF9lcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIExJVkU7XG52YXIgTElWRV9TUl9GSVggPSAwO1xudmFyIHNwZWFrID0gKHRleHQpID0+IHtcbiAgaWYgKCFMSVZFKSB7XG4gICAgTElWRSA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgTElWRS5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjpmaXhlZDtvdmVyZmxvdzpoaWRkZW47d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcFwiO1xuICAgIGF0dHIoTElWRSwgXCJhcmlhLWxpdmVcIiwgXCJhc3NlcnRpdmVcIik7XG4gIH1cbiAgaWYgKCFMSVZFLmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZChMSVZFKTtcbiAgaWYgKHRleHQpIExJVkUudGV4dENvbnRlbnQgPSBgJHt0ZXh0fSR7TElWRV9TUl9GSVgrKyAlIDIgPyBcIlxceEEwXCIgOiBcIlwifWA7XG59O1xudmFyIHNldFZhbHVlID0gKGlucHV0LCBkYXRhLCB0eXBlID0gXCJcIikgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlLCBkYXRhLCBpbnB1dFR5cGU6IHR5cGUgfTtcbiAgY29uc3QgcHJvdG8gPSBIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImJlZm9yZWlucHV0XCIsIGV2ZW50KSk7XG4gIChfYiA9IChfYTIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBcInZhbHVlXCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwoaW5wdXQsIGRhdGEpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiaW5wdXRcIiwgZXZlbnQpKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJjaGFuZ2VcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbn07XG52YXIgSVNfUFJFU1MgPSBmYWxzZTtcbnZhciBpc01vdXNlRG93biA9IChldmVudCkgPT4ge1xuICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gXCJtb3VzZXVwXCIpIElTX1BSRVNTID0gZmFsc2U7XG4gIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSBcIm1vdXNlZG93blwiKSB7XG4gICAgSVNfUFJFU1MgPSB0cnVlO1xuICAgIG9uKGRvY3VtZW50LCBcIm1vdXNldXBcIiwgaXNNb3VzZURvd24sIHsgb25jZTogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gSVNfUFJFU1M7XG59O1xuXG4vLyB1LW9wdGlvbi50c1xudmFyIERJU0FCTEVEID0gXCJkaXNhYmxlZFwiO1xudmFyIFNFTEVDVEVEID0gXCJzZWxlY3RlZFwiO1xudmFyIFVIVE1MT3B0aW9uRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtESVNBQkxFRCwgU0VMRUNURURdO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICghSVNfSU9TKSB0aGlzLnRhYkluZGV4ID0gLTE7XG4gICAgaWYgKCF0aGlzLmhhc0F0dHJpYnV0ZShcInJvbGVcIikpIGF0dHIodGhpcywgXCJyb2xlXCIsIFwib3B0aW9uXCIpO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWRpc2FibGVkXCIsIGAke3RoaXMuZGlzYWJsZWR9YCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtc2VsZWN0ZWRcIiwgYCR7dGhpcy5zZWxlY3RlZH1gKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgd2hldGhlciB0aGUgb3B0aW9uIGluIHRoZSBsaXN0IGJveCBpcyB0aGUgZGVmYXVsdCBpdGVtLiAqL1xuICBnZXQgZGVmYXVsdFNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzW1NFTEVDVEVEXTtcbiAgfVxuICBzZXQgZGVmYXVsdFNlbGVjdGVkKHZhbHVlKSB7XG4gICAgdGhpc1tTRUxFQ1RFRF0gPSB2YWx1ZTtcbiAgfVxuICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgRElTQUJMRUQpICE9PSBudWxsO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgRElTQUJMRUQsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIC8qKiBSZXRyaWV2ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGZvcm0gdGhhdCB0aGUgb2JqZWN0IGlzIGVtYmVkZGVkIGluLiAqL1xuICBnZXQgZm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwiZm9ybVwiKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIG9yZGluYWwgcG9zaXRpb24gb2YgYW4gb3B0aW9uIGluIGEgbGlzdCBib3guICovXG4gIGdldCBpbmRleCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiBbXG4gICAgICAuLi4oKF9hMiA9IHRoaXMucGFyZW50RWxlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5vcHRpb25zKSB8fCBbdGhpc11cbiAgICBdLmluZGV4T2YodGhpcyk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIGEgdmFsdWUgdGhhdCB5b3UgY2FuIHVzZSB0byBpbXBsZW1lbnQgeW91ciBvd24gbGFiZWwgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIG9iamVjdC4gKi9cbiAgZ2V0IGxhYmVsKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIChfYTIgPSBhdHRyKHRoaXMsIFwibGFiZWxcIikpICE9IG51bGwgPyBfYTIgOiB0aGlzLnRleHQ7XG4gIH1cbiAgc2V0IGxhYmVsKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcImxhYmVsXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgU0VMRUNURUQpICE9PSBudWxsO1xuICB9XG4gIHNldCBzZWxlY3RlZCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgU0VMRUNURUQsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgdGV4dCBzdHJpbmcgc3BlY2lmaWVkIGJ5IHRoZSBvcHRpb24gdGFnLiAqL1xuICBnZXQgdGV4dCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoKF9hMiA9IHRoaXMudGV4dENvbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICB9XG4gIHNldCB0ZXh0KHRleHQpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdGV4dDtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIHZhbHVlIHdoaWNoIGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIgd2hlbiB0aGUgZm9ybSBjb250cm9sIGlzIHN1Ym1pdHRlZC4gKi9cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIChfYTIgPSBhdHRyKHRoaXMsIFwidmFsdWVcIikpICE9IG51bGwgPyBfYTIgOiB0aGlzLnRleHQ7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgfVxufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtb3B0aW9uXCIsIFVIVE1MT3B0aW9uRWxlbWVudCk7XG5cbi8vIHUtZGF0YWxpc3QudHNcbnZhciBMSVZFX1RJTUVSO1xudmFyIElOUFVUX0RFQk9VTkNFID0gMDtcbnZhciBJU19NT0JJTEUgPSBJU19JT1MgfHwgSVNfQU5EUk9JRDtcbnZhciBFVkVOVFMgPSBcImNsaWNrLGZvY3Vzb3V0LGlucHV0LGtleWRvd24sbW91c2Vkb3duLG1vdXNldXBcIjtcbnZhciBFVkVOVFNfSU5QVVQgPSBcImZvY3VzLGZvY3VzaW4sYmx1cixmb2N1c291dFwiO1xudmFyIFRFWFRTID0ge1xuICBzaW5ndWxhcjogXCIlZCBoaXRcIixcbiAgcGx1cmFsOiBcIiVkIGhpdHNcIlxufTtcbnZhciBVSFRNTERhdGFMaXN0RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl90ZXh0cyA9IF9fc3ByZWFkVmFsdWVzKHt9LCBURVhUUyk7XG4gICAgdGhpcy5fdmFsdWUgPSBcIlwiO1xuICAgIGF0dGFjaFN0eWxlKFxuICAgICAgdGhpcyxcbiAgICAgIGAke0RJU1BMQVlfQkxPQ0t9XG5cdFx0XHQ6OnNsb3R0ZWQodS1vcHRpb24pIHsgZGlzcGxheTogYmxvY2s7IGN1cnNvcjogcG9pbnRlciB9XG5cdFx0XHQ6OnNsb3R0ZWQodS1vcHRpb246Zm9jdXMpIHsgJHtGT0NVU19PVVRMSU5FfSB9XG5cdFx0XHQ6OnNsb3R0ZWQodS1vcHRpb25bYXJpYS1oaWRkZW49XCJ0cnVlXCJdKSxcblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvbltkaXNhYmxlZF0pLFxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uW2hpZGRlbl0pIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50IH1gXG4gICAgKTtcbiAgfVxuICAvLyBVc2VkIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgYW5ub3VuY2VtZW50c1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiaWRcIiwgLi4uT2JqZWN0LmtleXMoVEVYVFMpLm1hcCgoa2V5KSA9PiBgZGF0YS1zci0ke2tleX1gKV07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuX3Jvb3QgPSBnZXRSb290KHRoaXMpO1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwibGlzdGJveFwiKTtcbiAgICBhdHRyKHRoaXMsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcbiAgICBvbih0aGlzLl9yb290LCBcImZvY3VzaW5cIiwgdGhpcyk7XG4gICAgb24odGhpcy5fcm9vdCwgXCJmb2N1c1wiLCB0aGlzLCB0cnVlKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHtcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogW1wiZGlzYWJsZWRcIiwgXCJoaWRkZW5cIiwgXCJsYWJlbFwiLCBcInZhbHVlXCJdLFxuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpKTtcbiAgfVxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBvZmYodGhpcy5fcm9vdCB8fCB0aGlzLCBcImZvY3VzXCIsIHRoaXMsIHRydWUpO1xuICAgIG9mZih0aGlzLl9yb290IHx8IHRoaXMsIFwiZm9jdXNpblwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIGZhbHNlKTtcbiAgICBkaXNjb25uZWN0SW5wdXQodGhpcyk7XG4gICAgdGhpcy5fcm9vdCA9IHZvaWQgMDtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socHJvcCwgX3ByZXYsIG5leHQpIHtcbiAgICBjb25zdCB0ZXh0ID0gcHJvcCA9PSBudWxsID8gdm9pZCAwIDogcHJvcC5zcGxpdChcImRhdGEtc3ItXCIpWzFdO1xuICAgIGNvbnN0IGNzcyA9IGBpbnB1dFtsaXN0PVwiJHt0aGlzLmlkfVwiXWA7XG4gICAgaWYgKFRFWFRTW3RleHRdKSB0aGlzLl90ZXh0c1t0ZXh0XSA9IG5leHQgfHwgVEVYVFNbdGV4dF07XG4gICAgZWxzZSBpZiAodGhpcy5fcm9vdCkge1xuICAgICAgaWYgKHRoaXMuX2lucHV0KSBzZXR1cElucHV0KHRoaXMsIHRoaXMuX2lucHV0KTtcbiAgICAgIGZvciAoY29uc3QgaW5wdXQgb2YgdGhpcy5fcm9vdC5xdWVyeVNlbGVjdG9yQWxsKGNzcykpXG4gICAgICAgIHNldHVwSW5wdXQodGhpcywgaW5wdXQpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHsgdGFyZ2V0LCB0eXBlIH0gPSBldmVudDtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmICh0eXBlID09PSBcImNsaWNrXCIpIG9uQ2xpY2sodGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImZvY3VzXCIgfHwgdHlwZSA9PT0gXCJmb2N1c2luXCIpIG9uRm9jdXModGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImJsdXJcIiB8fCB0eXBlID09PSBcImZvY3Vzb3V0XCIpIG9uQmx1cih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwia2V5ZG93blwiKSBvbktleURvd24odGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiICYmIHRoaXMuY29udGFpbnModGFyZ2V0KSlcbiAgICAgIGlzTW91c2VEb3duKGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJtdXRhdGlvblwiIHx8IHR5cGUgPT09IFwiaW5wdXRcIikge1xuICAgICAgY2xlYXJUaW1lb3V0KElOUFVUX0RFQk9VTkNFKTtcbiAgICAgIElOUFVUX0RFQk9VTkNFID0gc2V0VGltZW91dChvbklucHV0LCAwLCB0aGlzLCBldmVudCk7XG4gICAgfVxuICB9XG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidS1vcHRpb25cIik7XG4gIH1cbn07XG52YXIgc2V0RXhwYW5kZWQgPSAoc2VsZiwgb3BlbikgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgaWYgKHNlbGYuaGlkZGVuICE9PSBvcGVuKSByZXR1cm47XG4gIHNlbGYuaGlkZGVuID0gIW9wZW47XG4gIChfYTIgPSBtdXRhdGlvbk9ic2VydmVyKHNlbGYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRha2VSZWNvcmRzKCk7XG4gIGlmIChzZWxmLl9pbnB1dCkgc2V0dXBJbnB1dChzZWxmLCBzZWxmLl9pbnB1dCwgb3Blbik7XG4gIGlmIChzZWxmLnBvcG92ZXIgJiYgKChfYiA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuaXNDb25uZWN0ZWQpKSB7XG4gICAgYXR0cihzZWxmLCBcInBvcG92ZXJcIiwgXCJtYW51YWxcIik7XG4gICAgc2VsZi50b2dnbGVQb3BvdmVyKG9wZW4pO1xuICB9XG4gIGlmIChvcGVuKSBvbklucHV0KHNlbGYpO1xufTtcbnZhciBkaXNjb25uZWN0SW5wdXQgPSAoc2VsZikgPT4ge1xuICBpZiAoIXNlbGYuX2lucHV0KSByZXR1cm47XG4gIG9mZihzZWxmLl9pbnB1dCB8fCBzZWxmLCBFVkVOVFNfSU5QVVQsIHNlbGYpO1xuICBvZmYoc2VsZi5fcm9vdCB8fCBzZWxmLCBFVkVOVFMsIHNlbGYpO1xuICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gIHNlbGYuX2lucHV0ID0gdm9pZCAwO1xufTtcbnZhciBzZXR1cElucHV0ID0gKHNlbGYsIGlucHV0LCBvcGVuID0gZmFsc2UpID0+IHtcbiAgaWYgKHNlbGYucG9wb3ZlcikgYXR0cihpbnB1dCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKHNlbGYpKTtcbiAgb24oaW5wdXQsIEVWRU5UU19JTlBVVCwgc2VsZiwgdHJ1ZSk7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1hdXRvY29tcGxldGVcIiwgXCJsaXN0XCIpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtY29udHJvbHNcIiwgdXNlSWQoc2VsZikpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7SVNfTU9CSUxFID8gb3BlbiA6IFwidHJ1ZVwifWApO1xuICBhdHRyKGlucHV0LCBcImF1dG9jb21wbGV0ZVwiLCBcIm9mZlwiKTtcbiAgYXR0cihpbnB1dCwgXCJyb2xlXCIsIFwiY29tYm9ib3hcIik7XG59O1xudmFyIG9uRm9jdXMgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgaXNJbnB1dCA9IGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQ7XG4gIGlmIChpc0lucHV0ICYmIGV2ZW50LmlzVHJ1c3RlZCkgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gIGlmIChzZWxmLl9pbnB1dCAhPT0gZXZlbnQudGFyZ2V0ICYmIGlzSW5wdXQgJiYgZXZlbnQudGFyZ2V0Lmxpc3QgPT09IHNlbGYpIHtcbiAgICBpZiAoc2VsZi5faW5wdXQpIGRpc2Nvbm5lY3RJbnB1dChzZWxmKTtcbiAgICBzZWxmLl9pbnB1dCA9IGV2ZW50LnRhcmdldDtcbiAgICBzZWxmLl9pbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNcIikpO1xuICAgIHNlbGYuX2lucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJmb2N1c2luXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgYXR0cihzZWxmLCBTQUZFX0xBQkVMTEVEQlksIHVzZUlkKChfYTIgPSBzZWxmLl9pbnB1dC5sYWJlbHMpID09IG51bGwgPyB2b2lkIDAgOiBfYTJbMF0pKTtcbiAgICBvbihzZWxmLl9yb290IHx8IHNlbGYsIEVWRU5UUywgc2VsZik7XG4gICAgc2V0RXhwYW5kZWQoc2VsZiwgdHJ1ZSk7XG4gICAgc3BlYWsoKTtcbiAgfVxufTtcbnZhciBvbkJsdXIgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgaWYgKCFJU19BTkRST0lEICYmICFpc01vdXNlRG93bigpICYmIHNlbGYuX2lucHV0KVxuICAgIHNldFRpbWVvdXQob25CbHVycmVkLCAwLCBzZWxmKTtcbiAgaWYgKGV2ZW50LnRhcmdldCA9PT0gc2VsZi5faW5wdXQgJiYgZXZlbnQuaXNUcnVzdGVkKVxuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufTtcbnZhciBvbkJsdXJyZWQgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByZWxhdGVkVGFyZ2V0ID0gKChfYTIgPSBzZWxmLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmFjdGl2ZUVsZW1lbnQpIHx8IG51bGw7XG4gIGNvbnN0IGlucHV0ID0gc2VsZi5faW5wdXQ7XG4gIGlmIChpbnB1dCAmJiBpbnB1dCAhPT0gcmVsYXRlZFRhcmdldCAmJiAhc2VsZi5jb250YWlucyhyZWxhdGVkVGFyZ2V0KSkge1xuICAgIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJibHVyXCIsIHsgcmVsYXRlZFRhcmdldCB9KSk7XG4gICAgaW5wdXQuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNvdXRcIiwgeyBidWJibGVzOiB0cnVlLCByZWxhdGVkVGFyZ2V0IH0pXG4gICAgKTtcbiAgICBkaXNjb25uZWN0SW5wdXQoc2VsZik7XG4gIH1cbn07XG52YXIgb25DbGljayA9IChzZWxmLCB7IHRhcmdldCB9KSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmICghc2VsZi5faW5wdXQgfHwgc2VsZi5faW5wdXQgPT09IHRhcmdldCkgcmV0dXJuIHNldEV4cGFuZGVkKHNlbGYsIHRydWUpO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBzZWxmLm9wdGlvbnMpXG4gICAgaWYgKG9wdC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICBpZiAoYXR0cihzZWxmLCBcImFyaWEtbXVsdGlzZWxlY3RhYmxlXCIpICE9PSBcInRydWVcIikge1xuICAgICAgICAoX2EyID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZm9jdXMoKTtcbiAgICAgICAgc2V0RXhwYW5kZWQoc2VsZiwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNldFZhbHVlKHNlbGYuX2lucHV0LCBvcHQudmFsdWUpO1xuICAgIH1cbiAgaWYgKElTX0FORFJPSUQpIG9uQmx1cnJlZChzZWxmKTtcbn07XG52YXIgb25LZXlEb3duID0gKHNlbGYsIGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKGUuYWx0S2V5IHx8IGUuY3RybEtleSB8fCBlLm1ldGFLZXkgfHwgZS5zaGlmdEtleSB8fCBlLmtleSA9PT0gXCJUYWJcIilcbiAgICByZXR1cm47XG4gIHNldEV4cGFuZGVkKHNlbGYsIGUua2V5ICE9PSBcIkVzY2FwZVwiKTtcbiAgY29uc3QgeyBrZXksIHRhcmdldCB9ID0gZTtcbiAgY29uc3Qgb3B0aW9ucyA9IFsuLi5zZWxmLm9wdGlvbnNdLmZpbHRlcihcbiAgICAoZWwpID0+IGF0dHIoZWwsIFwiYXJpYS1oaWRkZW5cIikgIT09IFwidHJ1ZVwiICYmIGVsLm9mZnNldEhlaWdodFxuICApO1xuICBjb25zdCBwcmV2ID0gb3B0aW9ucy5pbmRleE9mKHRhcmdldCk7XG4gIGxldCBuZXh0ID0gLTE7XG4gIGlmIChrZXkgPT09IFwiQXJyb3dEb3duXCIpIG5leHQgPSAocHJldiArIDEpICUgb3B0aW9ucy5sZW5ndGg7XG4gIGlmIChrZXkgPT09IFwiQXJyb3dVcFwiKSBuZXh0ID0gKH5wcmV2ID8gcHJldiA6IG9wdGlvbnMubGVuZ3RoKSAtIDE7XG4gIGlmICh+cHJldikge1xuICAgIGlmIChrZXkgPT09IFwiSG9tZVwiIHx8IGtleSA9PT0gXCJQYWdlVXBcIikgbmV4dCA9IDA7XG4gICAgaWYgKGtleSA9PT0gXCJFbmRcIiB8fCBrZXkgPT09IFwiUGFnZURvd25cIikgbmV4dCA9IG9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICBpZiAoa2V5ID09PSBcIkVudGVyXCIpIHtcbiAgICAgIG9wdGlvbnNbcHJldl0uY2xpY2soKTtcbiAgICAgIHJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG4gIGlmIChvcHRpb25zW25leHRdKSBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSBvcHRpb24udGFiSW5kZXggPSAtMTtcbiAgaWYgKG9wdGlvbnNbbmV4dF0pIGUucHJldmVudERlZmF1bHQoKTtcbiAgKF9hMiA9IG9wdGlvbnNbbmV4dF0gfHwgc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZm9jdXMoKTtcbn07XG52YXIgb25JbnB1dCA9IChzZWxmLCBlKSA9PiB7XG4gIGNvbnN0IHsgX3RleHRzLCBfcm9vdCwgX2lucHV0LCBvcHRpb25zIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9IChfaW5wdXQgPT0gbnVsbCA/IHZvaWQgMCA6IF9pbnB1dC52YWx1ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKSkgfHwgXCJcIjtcbiAgY29uc3QgZmlsdGVyID0gIXNlbGYuaGFzQXR0cmlidXRlKFwiZGF0YS1ub2ZpbHRlclwiKTtcbiAgY29uc3QgaGlkZGVuID0gW107XG4gIGNvbnN0IHZpc2libGUgPSBbXTtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGNvbnN0IGhpZGUgPSBvcHQuZGlzYWJsZWQgfHwgb3B0LmhpZGRlbiB8fCBmaWx0ZXIgJiYgIW9wdC5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHZhbHVlKTtcbiAgICAoaGlkZSA/IGhpZGRlbiA6IHZpc2libGUpLnB1c2gob3B0KTtcbiAgfVxuICBmb3IgKGNvbnN0IG9wdCBvZiBoaWRkZW4pIGF0dHIob3B0LCBcImFyaWEtaGlkZGVuXCIsIFwidHJ1ZVwiKTtcbiAgZm9yIChjb25zdCBvcHQgb2YgdmlzaWJsZSkgYXR0cihvcHQsIFwiYXJpYS1oaWRkZW5cIiwgXCJmYWxzZVwiKTtcbiAgY29uc3QgdG90YWwgPSB2aXNpYmxlLmxlbmd0aDtcbiAgY2xlYXJUaW1lb3V0KExJVkVfVElNRVIpO1xuICBpZiAoKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUudHlwZSkgPT09IFwiaW5wdXRcIiAmJiB2YWx1ZSAhPT0gc2VsZi5fdmFsdWUpXG4gICAgTElWRV9USU1FUiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IGAkeyF0b3RhbCAmJiBzZWxmLmlubmVyVGV4dC50cmltKCkgfHwgYCR7X3RleHRzW3RvdGFsID09PSAxID8gXCJzaW5ndWxhclwiIDogXCJwbHVyYWxcIl19YC5yZXBsYWNlKFwiJWRcIiwgYCR7dG90YWx9YCl9YDtcbiAgICAgIGlmICghc2VsZi5oaWRkZW4gJiYgKF9yb290ID09IG51bGwgPyB2b2lkIDAgOiBfcm9vdC5hY3RpdmVFbGVtZW50KSA9PT0gX2lucHV0KSBzcGVhayh0ZXh0KTtcbiAgICAgIHNlbGYuX3ZhbHVlID0gdmFsdWU7XG4gICAgfSwgMWUzKTtcbiAgaWYgKElTX0lPUylcbiAgICB2aXNpYmxlLmZvckVhY2goKG9wdCwgaWR4KSA9PiBhdHRyKG9wdCwgXCJ0aXRsZVwiLCBgJHtpZHggKyAxfS8ke3RvdGFsfWApKTtcbn07XG5pZiAoSVNfQlJPV1NFUilcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcImxpc3RcIiwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBnZXRSb290KHRoaXMpLmdldEVsZW1lbnRCeUlkKGF0dHIodGhpcywgXCJsaXN0XCIpIHx8IFwiXCIpO1xuICAgIH1cbiAgfSk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LWRhdGFsaXN0XCIsIFVIVE1MRGF0YUxpc3RFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxEYXRhTGlzdEVsZW1lbnQgfTtcbiIsImltcG9ydCB7IFVIVE1MQ29tYm9ib3hFbGVtZW50IH0gZnJvbSBcIkB1LWVsZW1lbnRzL3UtY29tYm9ib3hcIjtcbmltcG9ydCB7IFVIVE1MRGF0YUxpc3RFbGVtZW50IH0gZnJvbSBcIkB1LWVsZW1lbnRzL3UtZGF0YWxpc3RcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRhbmNob3JQb3NpdGlvbixcblx0YXR0cixcblx0aXNJbnB1dExpa2UsXG5cdG9uLFxuXHRvbkxvYWRlZCxcblx0b25NdXRhdGlvbixcblx0UVVJQ0tfRVZFTlQsXG5cdHVzZUlkLFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0ZJRUxEID0gc3R5bGVzLmZpZWxkLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19WQUxJREFUSU9OUyA9IHN0eWxlcy52YWxpZGF0aW9uLnNwbGl0KFwiIFwiKTtcbmNvbnN0IENTU19WQUxJREFUSU9OID0gQ1NTX1ZBTElEQVRJT05TWzBdO1xuXG5jb25zdCBnZXRUZXh0ID0gKHN0eWxlOiBDU1NTdHlsZURlY2xhcmF0aW9uLCBrZXk6IHN0cmluZykgPT5cblx0c3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShgLS1tdGRzLXRleHQtJHtrZXl9YCk/LnNsaWNlKDEsIC0xKSB8fCBcIlwiOyAvLyBzbGljZSB0byB0cmltIHF1b3Rlc1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihmaWVsZHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4sIHZhbGlkYXRlPzogYm9vbGVhbikge1xuXHRmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcylcblx0XHRpZiAoZmllbGQuaXNDb25uZWN0ZWQpIHtcblx0XHRcdGNvbnN0IGxhYmVsczogSFRNTExhYmVsRWxlbWVudFtdID0gW107XG5cdFx0XHRjb25zdCBkZXNjczogRWxlbWVudFtdID0gW107XG5cdFx0XHRjb25zdCB2YWxpZHM6IEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0bGV0IGNvbWJvYm94OiBVSFRNTENvbWJvYm94RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXHRcdFx0bGV0IGlucHV0OiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdFx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGVsIG9mIGZpZWxkLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSkge1xuXHRcdFx0XHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MTGFiZWxFbGVtZW50KSBsYWJlbHMucHVzaChlbCk7XG5cdFx0XHRcdGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgVUhUTUxDb21ib2JveEVsZW1lbnQpIGNvbWJvYm94ID0gZWw7XG5cdFx0XHRcdGVsc2UgaWYgKGlzSW5wdXRMaWtlKGVsKSAmJiAhZWwuaGlkZGVuKSBpbnB1dCA9IGVsO1xuXHRcdFx0XHRlbHNlIGlmIChlbC5oYXNBdHRyaWJ1dGUoXCJkYXRhLWRlc2NyaXB0aW9uXCIpKSBkZXNjcy5wdXNoKGVsKTtcblx0XHRcdFx0ZWxzZSBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkge1xuXHRcdFx0XHRcdHZhbGlkID0gYXR0cihlbCwgXCJkYXRhLWNvbG9yXCIpID09PSBcInN1Y2Nlc3NcIiB8fCAhZWwuY2xpZW50SGVpZ2h0OyAvLyBPbmx5IHNldCBpbnZhbGlkIGlmIFZhbGlkYXRpb24gaXMgdmlzaWJsZVxuXHRcdFx0XHRcdHZhbGlkcy5wdXNoKGVsKTtcblx0XHRcdFx0XHRkZXNjcy51bnNoaWZ0KGVsKTtcblx0XHRcdFx0fSBlbHNlIGlmIChlbCBpbnN0YW5jZW9mIEhUTUxQYXJhZ3JhcGhFbGVtZW50KVxuXHRcdFx0XHRcdGRlc2NzLnNvbWUoKGRlc2MpID0+IGRlc2MuY29udGFpbnMoZWwpKSB8fCBkZXNjcy5wdXNoKGVsKTsgLy8gT25seSBhZGQgaWYgbm90IGFscmVhZHkgaW5zaWRlIGRlc2NyaXB0aW9uXG5cdFx0XHR9XG5cblx0XHRcdGlmIChpbnB1dCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGxhYmVsIG9mIGxhYmVscykgbGFiZWwuaHRtbEZvciA9IHVzZUlkKGlucHV0KTtcblx0XHRcdFx0aWYgKHZhbGlkYXRlICYmIGF0dHIoZmllbGQsIFwiZGF0YS12YWxpZGF0aW9uXCIpID09PSBcImZvcm1cIikge1xuXHRcdFx0XHRcdHZhbGlkID0gaW5wdXQubWF0Y2hlcyhcIjp2YWxpZFwiKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGVsIG9mIHZhbGlkcykgYXR0cihlbCwgXCJoaWRkZW5cIiwgdmFsaWQgPyBcIlwiIDogbnVsbCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVuZGVyQ29tYm9ib3goY29tYm9ib3gpO1xuXHRcdFx0XHRyZW5kZXJDb3VudGVyKGlucHV0KTtcblx0XHRcdFx0cmVuZGVyVGV4dGFyZWFTaXplKGlucHV0KTtcblx0XHRcdFx0YXR0cihpbnB1dCwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIGRlc2NzLm1hcCh1c2VJZCkuam9pbihcIiBcIikgfHwgbnVsbCk7IC8vIFJlbW92ZSBpZiBlbXB0eVxuXHRcdFx0XHRhdHRyKGlucHV0LCBcImFyaWEtaW52YWxpZFwiLCBgJHshdmFsaWR9YCk7XG5cdFx0XHR9XG5cdFx0fVxufVxuXG4vLyBpT1MgZG9lcyBub3Qgc3VwcG9ydCBmaWVsZC1zaXppbmc6IGNvbnRlbnQsIHNvIHdlIG5lZWQgdG8gbWFudWFsbHkgcmVzaXplXG5mdW5jdGlvbiByZW5kZXJUZXh0YXJlYVNpemUodGV4dGFyZWE6IEVsZW1lbnQpIHtcblx0aWYgKHRleHRhcmVhIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuXHRcdHRleHRhcmVhLnN0eWxlLnNldFByb3BlcnR5KFwiLS1tdGRzLXRleHRhcmVhLWhlaWdodFwiLCBcImF1dG9cIik7XG5cdFx0dGV4dGFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG5cdFx0XHRcIi0tbXRkcy10ZXh0YXJlYS1oZWlnaHRcIixcblx0XHRcdGAke3RleHRhcmVhLnNjcm9sbEhlaWdodH1weGAsXG5cdFx0KTtcblx0fVxufVxuXG4vLyBTZXR1cCB0cmFuc2xhdGlvbnMgZnJvbSBDU1MgY3VzdG9tIHByb3BlcnRpZXNcbmZ1bmN0aW9uIHJlbmRlckNvbWJvYm94KGVsOiBVSFRNTENvbWJvYm94RWxlbWVudCB8IG51bGwpIHtcblx0aWYgKCFlbD8ubGlzdCB8fCBlbC5saXN0Py5oYXNBdHRyaWJ1dGUoXCJwb3BvdmVyXCIpKSByZXR1cm47XG5cdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpO1xuXHRhdHRyKGVsLCBcImRhdGEtc3ItYWRkZWRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1hZGRlZFwiKSk7XG5cdGF0dHIoZWwsIFwiZGF0YS1zci1lbXB0eVwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWVtcHR5XCIpKTtcblx0YXR0cihlbCwgXCJkYXRhLXNyLWZvdW5kXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtZm91bmRcIikpO1xuXHRhdHRyKGVsLCBcImRhdGEtc3ItaW52YWxpZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWludmFsaWRcIikpO1xuXHRhdHRyKGVsLCBcImRhdGEtc3Itb2ZcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1vZlwiKSk7XG5cdGF0dHIoZWwsIFwiZGF0YS1zci1yZW1vdmVcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1yZW1vdmVcIikpO1xuXHRhdHRyKGVsLCBcImRhdGEtc3ItcmVtb3ZlZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LXJlbW92ZWRcIikpO1xuXHRhdHRyKGVsLmxpc3QsIFwiZGF0YS1zci1wbHVyYWxcIiwgZ2V0VGV4dChzdHlsZSwgXCJkYXRhbGlzdC1wbHVyYWxcIikpO1xuXHRhdHRyKGVsLmxpc3QsIFwiZGF0YS1zci1zaW5ndWxhclwiLCBnZXRUZXh0KHN0eWxlLCBcImRhdGFsaXN0LXNpbmd1bGFyXCIpKTtcblx0YXR0cihlbC5saXN0LCBcInBvcG92ZXJcIiwgXCJtYW51YWxcIik7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckNvdW50ZXIoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0Y29uc3QgZWwgPSBpbnB1dD8ubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRjb25zdCBsaW1pdCA9IGVsICYmIGF0dHIoZWwsIFwiZGF0YS1jb3VudFwiKTtcblxuXHRpZiAoZWwgJiYgbGltaXQpIHtcblx0XHRjb25zdCByZW1haW5kZXIgPSBOdW1iZXIobGltaXQpIC0gaW5wdXQudmFsdWUubGVuZ3RoO1xuXHRcdGNvbnN0IG5leHRJbnZhbGlkID0gcmVtYWluZGVyIDwgMDtcblx0XHRjb25zdCBwcmV2SW52YWxpZCA9IGF0dHIoZWwsIFwiYXJpYS1saXZlXCIpID09PSBcInBvbGl0ZVwiO1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwgfHwgaW5wdXQpO1xuXHRcdGNvbnN0IG92ZXIgPSBnZXRUZXh0KHN0eWxlLCBcImNvdW50LW92ZXJcIik7XG5cdFx0Y29uc3QgdW5kZXIgPSBnZXRUZXh0KHN0eWxlLCBcImNvdW50LXVuZGVyXCIpO1xuXG5cdFx0aWYgKHByZXZJbnZhbGlkICE9PSBuZXh0SW52YWxpZCkge1xuXHRcdFx0YXR0cihlbCwgXCJhcmlhLWxpdmVcIiwgbmV4dEludmFsaWQgPyBcInBvbGl0ZVwiIDogXCJvZmZcIik7XG5cdFx0XHRmb3IgKGNvbnN0IGNzcyBvZiBDU1NfVkFMSURBVElPTlMpIGVsLmNsYXNzTGlzdC50b2dnbGUoY3NzLCBuZXh0SW52YWxpZCk7XG5cdFx0fVxuXHRcdGVsLnRleHRDb250ZW50ID0gKG5leHRJbnZhbGlkID8gb3ZlciA6IHVuZGVyKS5yZXBsYWNlKFxuXHRcdFx0XCIlZFwiLFxuXHRcdFx0YCR7TWF0aC5hYnMocmVtYWluZGVyKX1gLFxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlKHsgdGFyZ2V0OiBlbCwgbmV3U3RhdGUgfTogRXZlbnQgJiB7IG5ld1N0YXRlPzogc3RyaW5nIH0pIHtcblx0aWYgKGVsIGluc3RhbmNlb2YgVUhUTUxEYXRhTGlzdEVsZW1lbnQpIHtcblx0XHRjb25zdCByb290ID0gZWwuZ2V0Um9vdE5vZGUoKSBhcyBTaGFkb3dSb290IHwgbnVsbDtcblx0XHRjb25zdCBhbmNob3IgPSByb290Py5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50Pihcblx0XHRcdGBbcG9wb3ZlcnRhcmdldD1cIiR7ZWwuaWR9XCJdYCxcblx0XHQpO1xuXG5cdFx0aWYgKG5ld1N0YXRlID09PSBcImNsb3NlZFwiKSBhbmNob3JQb3NpdGlvbihlbCwgZmFsc2UpO1xuXHRcdGVsc2UgaWYgKGFuY2hvcikge1xuXHRcdFx0ZWwuc3R5bGUud2lkdGggPSBgJHthbmNob3IuY2xpZW50V2lkdGh9cHhgO1xuXHRcdFx0YW5jaG9yUG9zaXRpb24oZWwsIGFuY2hvciwgYXR0cihlbCwgXCJkYXRhLXBvc2l0aW9uXCIpID8/IFwiYm90dG9tXCIsIHRydWUpO1xuXHRcdH1cblx0fVxufVxuLy8gVXBkYXRlIHdoZW4gdHlwaW5nXG5mdW5jdGlvbiBoYW5kbGVJbnB1dCh7IHRhcmdldCB9OiBFdmVudCkge1xuXHRpZiAoaXNJbnB1dExpa2UodGFyZ2V0KSkge1xuXHRcdHJlbmRlckNvdW50ZXIodGFyZ2V0KTtcblx0XHRyZW5kZXJUZXh0YXJlYVNpemUodGFyZ2V0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBoYW5kbGVWYWxkaWF0aW9uKGV2ZW50OiBFdmVudCkge1xuXHRjb25zdCBmaWVsZCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihgLiR7Q1NTX0ZJRUxEfWApO1xuXG5cdGlmIChldmVudC50eXBlID09PSBcImludmFsaWRcIiAmJiBmaWVsZCkgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gUHJldmVudCBicm93c2VycyBmcm9tIHNob3dpbmcgZGVmYXVsdCB2YWxpZGF0aW9uIGJ1YmJsZXNcblx0aGFuZGxlTXV0YXRpb24oZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShDU1NfRklFTEQpLCB0cnVlKTsgLy8gVXBkYXRlIHN0YXRlXG59XG5cbi8vIFBvc2l0aW9uIGNvbWJvYm94IHdoZW4gY2hhbmdpbmcgY29udGVudFxuZnVuY3Rpb24gaGFuZGxlQmVmb3JlQ2hhbmdlKHsgdGFyZ2V0OiBlbCB9OiBFdmVudCkge1xuXHRjb25zdCBsaXN0ID0gZWwgaW5zdGFuY2VvZiBVSFRNTENvbWJvYm94RWxlbWVudCAmJiBlbC5saXN0O1xuXHRpZiAobGlzdCAmJiAhbGlzdD8uaGlkZGVuKVxuXHRcdHNldFRpbWVvdXQoKCkgPT4gYW5jaG9yUG9zaXRpb24obGlzdCwgZWwsIDIsIHRydWUpLCAxMCk7IC8vIFJlcG9zaXRpb24gbGlzdCBpZiBub3QgaGlkZGVuXG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRCwgaGFuZGxlTXV0YXRpb24pO1xuXHRvbihkb2N1bWVudCwgXCJiZWZvcmVjaGFuZ2VcIiwgaGFuZGxlQmVmb3JlQ2hhbmdlLCBRVUlDS19FVkVOVCk7XG5cdG9uKGRvY3VtZW50LCBcImlucHV0XCIsIGhhbmRsZUlucHV0LCBRVUlDS19FVkVOVCk7XG5cdG9uKGRvY3VtZW50LCBcImludmFsaWQsc3VibWl0XCIsIGhhbmRsZVZhbGRpYXRpb24sIHRydWUpOyAvLyBVc2UgY2FwdHVyZSBhcyBpbnZhbGlkIGFuZCBzdWJtaXQgZG9lcyBub3QgYnViYmxlXG5cdG9uKGRvY3VtZW50LCBcInRvZ2dsZVwiLCBoYW5kbGVUb2dnbGUsIFFVSUNLX0VWRU5UKTsgLy8gVXNlIGNhcHR1cmUgc2luY2UgdG9nZ2xlIGRvZXMgbm90IGJ1YmJsZVxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgaXNJbnB1dExpa2UsIG9uTG9hZGVkLCBvbk11dGF0aW9uLCB1c2VJZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRklFTERTRVQgPSBzdHlsZXMuZmllbGRzZXQuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1ZBTElEQVRJT04gPSBzdHlsZXMudmFsaWRhdGlvbi5zcGxpdChcIiBcIilbMF07XG5jb25zdCBBUklBX0RFU0MgPSBcImFyaWEtZGVzY3JpYmVkYnlcIjtcbmNvbnN0IEFSSUFfSU5WQUxJRCA9IFwiYXJpYS1pbnZhbGlkXCI7XG5cbi8vIFVzaW5nIHJlcXVlc3RBbmltYXRpb25GcmFtZSB0byBlbnN1cmUgaXQgcnVucyBhZnRlciBmaWVsZC1vYnNlcnZlclxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oZmllbGRzZXRzOiBIVE1MQ29sbGVjdGlvbk9mPEVsZW1lbnQ+KSB7XG5cdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBmaWVsZHNldCBvZiBmaWVsZHNldHMpXG5cdFx0XHRpZiAoZmllbGRzZXQuaXNDb25uZWN0ZWQpIHtcblx0XHRcdFx0Y29uc3QgaW5wdXRzOiBIVE1MSW5wdXRFbGVtZW50W10gPSBbXTtcblx0XHRcdFx0bGV0IHZhbGlkSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXHRcdFx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgZWwgb2YgZmllbGRzZXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpKSB7XG5cdFx0XHRcdFx0aWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhDU1NfVkFMSURBVElPTikpIHtcblx0XHRcdFx0XHRcdHZhbGlkID0gYXR0cihlbCwgXCJkYXRhLWNvbG9yXCIpID09PSBcInN1Y2Nlc3NcIiB8fCAhZWwuY2xpZW50SGVpZ2h0OyAvLyBPbmx5IHNldCBpbnZhbGlkIGlmIFZhbGlkYXRpb24gaXMgdmlzaWJsZVxuXHRcdFx0XHRcdFx0dmFsaWRJZCA9IHVzZUlkKGVsKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGlzSW5wdXRMaWtlKGVsKSkgaW5wdXRzLnB1c2goZWwpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCBpbnB1dCBvZiBpbnB1dHMpIHtcblx0XHRcdFx0XHRjb25zdCBkZXNjID0gYXR0cihpbnB1dCwgQVJJQV9ERVNDKT8ucmVwbGFjZSh2YWxpZElkIHx8IFwiI1wiLCBcIlwiKTtcblxuXHRcdFx0XHRcdGF0dHIoaW5wdXQsIEFSSUFfREVTQywgYCR7dmFsaWRJZCB8fCBcIlwifSAke2Rlc2MgfHwgXCJcIn1gLnRyaW0oKSk7XG5cdFx0XHRcdFx0YXR0cihpbnB1dCwgQVJJQV9JTlZBTElELCBgJHshdmFsaWR9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0fSk7XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfRklFTERTRVQsIGhhbmRsZU11dGF0aW9uKSxcbik7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0xPR08gPSBzdHlsZXMubG9nby5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKFtsb2dvXTogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0aWYgKGxvZ28/LmlzQ29ubmVjdGVkICYmIGxvZ28/LmZpcnN0RWxlbWVudENoaWxkIGluc3RhbmNlb2YgU1ZHU1ZHRWxlbWVudCkge1xuXHRcdGZvciAoY29uc3QgaWNvbiBvZiBkb2N1bWVudC5oZWFkLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaW5rW3JlbH49J2ljb24nXVwiKSlcblx0XHRcdGljb24uc2V0QXR0cmlidXRlKFwicmVsXCIsIFwiZGlzYWJsZWRcIik7IC8vIERpc2FibGUgcHJldmlvdXMgaWNvbiAoYnV0IG5vdCByZW1vdmUgaXMgYXMgdGhpcyBtYWtlcyBOZXh0LmpzIHNhZClcblxuXHRcdGNvbnN0IHN2ZyA9IGxvZ28uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0Y29uc3QgaXNEb3QgPSBsb2dvPy5oYXNBdHRyaWJ1dGUoXCJkYXRhLWVudlwiKTtcblx0XHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHN2Zyk7XG5cdFx0Y29uc3QgdGV4dCA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJjb2xvclwiKTtcblx0XHRjb25zdCBiYWNrID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIi0tbXRkcy1sb2dvLWNvbG9yXCIpO1xuXHRcdGNvbnN0IGljb24gPSBzdmcub3V0ZXJIVE1MXG5cdFx0XHQucmVwbGFjZSgvXFxuKy9nLCBcIiBcIikgLy8gUHJldmVudCBsaW5lIGJyZWFrc1xuXHRcdFx0LnJlcGxhY2UoLyhmaWxsfHdpZHRofGhlaWdodHx4bWxucyk9XCJbXlwiXStcIi9naSwgXCJcIilcblx0XHRcdC5yZXBsYWNlKFwiPHN2Z1wiLCBgPHN2ZyB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiBmaWxsPVwiJHt0ZXh0fVwiYCk7XG5cblx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFxuXHRcdFx0T2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKSwge1xuXHRcdFx0XHRocmVmOiBgZGF0YTppbWFnZS9zdmcreG1sLCR7ZW5jb2RlVVJJQ29tcG9uZW50KGA8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDU1IDU1Jz48cmVjdCBmaWxsPScke2lzRG90ID8gXCJub25lXCIgOiBiYWNrfScgd2lkdGg9JzUxJyBoZWlnaHQ9JzUxJyB4PScyJyB5PScyJyBzdHJva2U9JyR7dGV4dH0nIHN0cm9rZS1kYXNoYXJyYXk9JzAuMDkgNi4zOCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2Utb3BhY2l0eT0nJHtpc0RvdCA/IDAuNiA6IDB9JyBzdHJva2Utd2lkdGg9JzIuMycgcng9JzI1LjUnLz48ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNy41IDcuNSlcIj4ke2ljb259PC9nPjwvc3ZnPmApfWAsXG5cdFx0XHRcdHJlbDogXCJpY29uXCIsXG5cdFx0XHR9KSxcblx0XHQpO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfTE9HTywgaGFuZGxlTXV0YXRpb24pKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBRVUlDS19FVkVOVCwgYW5jaG9yUG9zaXRpb24sIGF0dHIsIG9uLCBvbkxvYWRlZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfUE9QT1ZFUiA9IHN0eWxlcy5wb3BvdmVyLnNwbGl0KFwiIFwiKVswXTtcbmxldCBPUEVOX1BPUE9WRVJTID0gMDsgLy8gU3BlZWQgdXAgYnkgb25seSBjaGVja2luZyBjbGlja3MgaWYgd2UgaGF2ZSBvcGVuIHBvcG92ZXJzXG5cbmZ1bmN0aW9uIGhhbmRsZVRvZ2dsZSh7IHRhcmdldDogZWwsIG5ld1N0YXRlIH06IEV2ZW50ICYgeyBuZXdTdGF0ZT86IHN0cmluZyB9KSB7XG5cdGlmIChlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGVsLmNsYXNzTGlzdC5jb250YWlucyhDU1NfUE9QT1ZFUikpIHtcblx0XHRjb25zdCBhbmNob3IgPSAoZWwuZ2V0Um9vdE5vZGUoKSBhcyBTaGFkb3dSb290KT8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG5cdFx0XHRgW3BvcG92ZXJ0YXJnZXQ9XCIke2VsLmlkfVwiXWAsXG5cdFx0KTtcblxuXHRcdGlmIChuZXdTdGF0ZSA9PT0gXCJjbG9zZWRcIikge1xuXHRcdFx0T1BFTl9QT1BPVkVSUyAtPSAxO1xuXHRcdFx0YW5jaG9yUG9zaXRpb24oZWwsIGZhbHNlKTtcblx0XHR9IGVsc2UgaWYgKGFuY2hvcikge1xuXHRcdFx0T1BFTl9QT1BPVkVSUyArPSAxO1xuXHRcdFx0YW5jaG9yUG9zaXRpb24oZWwsIGFuY2hvciwgYXR0cihlbCwgXCJkYXRhLXBvc2l0aW9uXCIpIHx8IFwiYm90dG9tXCIpO1xuXHRcdH1cblx0fVxufVxuXG4vLyBQb2x5ZmlsbCBwb3BvdmVydGFyZ2V0IGZvciA8YT4gKG5vdCBzdXBwb3J0ZWQgYnkgbmF0aXZlKVxuLy8gYW5kIGF1dG9tYXRpY2FsbHkgYXNzdW1lIHBvcG92ZXJ0YXJnZXQgaXMgdGhlIGNsb3Nlc3QgcGFyZW50IHBvcG92ZXJcbi8vIGJ1dCByZXNwZWN0IHRoZSBwb3BvdmVydGFyZ2V0IGFuZCBwb3BvdmVydGFyZ2V0YWN0aW9uIGF0dHJpYnV0ZVxuZnVuY3Rpb24gaGFuZGxlTGlua0NsaWNrKHsgdGFyZ2V0IH06IEV2ZW50KSB7XG5cdGNvbnN0IGNsb3NlID1cblx0XHRPUEVOX1BPUE9WRVJTICYmICh0YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihcImEsW3BvcG92ZXJ0YXJnZXRhY3Rpb25dXCIpO1xuXG5cdGlmIChjbG9zZSkge1xuXHRcdGNvbnN0IGFjdGlvbiA9IGF0dHIoY2xvc2UsIFwicG9wb3ZlcnRhcmdldGFjdGlvblwiKSB8fCBcInRvZ2dsZVwiO1xuXHRcdGNvbnN0IG9wZW4gPSBhY3Rpb24gPT09IFwic2hvd1wiIHx8IChhY3Rpb24gPT09IFwiaGlkZVwiID8gZmFsc2UgOiB1bmRlZmluZWQpO1xuXHRcdGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGF0dHIoY2xvc2UsIFwicG9wb3ZlcnRhcmdldFwiKSB8fCBcIlwiKTtcblx0XHRjb25zdCBwb3BvdmVyID0gKHRhcmdldCB8fCBjbG9zZSkuY2xvc2VzdDxIVE1MRWxlbWVudD4oYC4ke0NTU19QT1BPVkVSfWApO1xuXG5cdFx0Ly8gUG9wb3ZlciBjYW4gYmUgZGlzY29ubmV0ZWQgYnkgY2xpY2sgaGFuZGxlciBkZWVwZXIgZG93biBpbiB0aGUgRE9NIHRocmVlIGJlZm9yZSByZWFjaGluZyBkb2N1bWVudFxuXHRcdGlmIChwb3BvdmVyPy5pc0Nvbm5lY3RlZCAmJiBwb3BvdmVyPy50b2dnbGVQb3BvdmVyKVxuXHRcdFx0cG9wb3Zlci50b2dnbGVQb3BvdmVyKG9wZW4pO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwidG9nZ2xlXCIsIGhhbmRsZVRvZ2dsZSwgUVVJQ0tfRVZFTlQpOyAvLyBVc2UgY2FwdHVyZSBzaW5jZSB0b2dnbGUgZG9lcyBub3QgYnViYmxlXG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZUxpbmtDbGljayk7IC8vIEFsbG93IGA8YT5gIHRvIHVzZSBgcG9wb3ZlcnRhcmdldGAgYXMgd2VsbFxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1RBQkxFID0gc3R5bGVzLnRhYmxlLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24odGFibGVzOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxUYWJsZUVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgdGFibGUgb2YgdGFibGVzKSB7XG5cdFx0Y29uc3QgdGhzOiBzdHJpbmdbXSA9IFtdOyAvLyBBZGQgZGF0YS10aD1cIlwiIHRvIGVhY2ggY2VsbCB0byBzdXBwb3J0IGRhdGEtbW9iaWxlIGRlc2lnbnNcblxuXHRcdGF0dHIodGFibGUsIFwicm9sZVwiLCBcInRhYmxlXCIpOyAvLyBBZGQgaGVscGluZyByb2xlPVwiXCIgdG8gZW5zdXJlIHNjcmVlbiByZWFkZXJzIHVuZGVyc3RhbmQgdGhlIHRhYmxlIHJlZ2FyZGxlc3Mgb2YgQ1NTIGRpc3BsYXlcblx0XHRpZiAodGFibGUuY2FwdGlvbikgYXR0cih0YWJsZS5jYXB0aW9uLCBcInJvbGVcIiwgXCJjYXB0aW9uXCIpO1xuXHRcdGZvciAoY29uc3QgZ3JvdXAgb2YgW3RhYmxlLnRIZWFkLCB0YWJsZS50Rm9vdCwgLi4udGFibGUudEJvZGllc10pXG5cdFx0XHRpZiAoZ3JvdXApIHtcblx0XHRcdFx0YXR0cihncm91cCwgXCJyb2xlXCIsIFwicm93Z3JvdXBcIik7XG5cdFx0XHRcdGNvbnN0IGlzVGJvZHkgPSBncm91cC5ub2RlTmFtZSA9PT0gXCJUQk9EWVwiO1xuXG5cdFx0XHRcdGZvciAoY29uc3Qgcm93IG9mIGdyb3VwLnJvd3MpIHtcblx0XHRcdFx0XHRhdHRyKHJvdywgXCJyb2xlXCIsIFwicm93XCIpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgY2VsbCBvZiByb3cuY2VsbHMpIHtcblx0XHRcdFx0XHRcdGlmIChpc1Rib2R5KSBhdHRyKGNlbGwsIFwiZGF0YS10aFwiLCB0aHNbY2VsbC5jZWxsSW5kZXhdIHx8IFwiOmVtcHR5XCIpO1xuXHRcdFx0XHRcdFx0ZWxzZSB0aHMucHVzaChjZWxsLmlubmVyVGV4dC50cmltKCkpOyAvLyBVc2luZyBpbm5lclRleHQgdG8gb25seSBpbmNsdWRlIHZpc2libGUgdGV4dFxuXHRcdFx0XHRcdFx0aWYgKGNlbGwubm9kZU5hbWUgPT09IFwiVERcIikgYXR0cihjZWxsLCBcInJvbGVcIiwgXCJjZWxsXCIpO1xuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGF0dHIoY2VsbCwgXCJyb2xlXCIsIGlzVGJvZHkgPyBcInJvd2hlYWRlclwiIDogXCJjb2x1bW5oZWFkZXJcIik7XG5cdFx0XHRcdFx0XHRcdGF0dHIoY2VsbCwgXCJzY29wZVwiLCBpc1Rib2R5ID8gXCJyb3dcIiA6IFwiY29sXCIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfVEFCTEUsIGhhbmRsZU11dGF0aW9uKSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgb24sIG9uTG9hZGVkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19UT0dHTEVHUk9VUCA9IGAuJHtzdHlsZXMudG9nZ2xlZ3JvdXAuc3BsaXQoXCIgXCIpWzBdfWA7XG5cbi8vIFByZXZlbnQgYnJvd3NlcnMgZnJvbSBzaG93aW5nIGRlZmF1bHQgdmFsaWRhdGlvbiBidWJibGVzXG5mdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50OiBFdmVudCAmIFBhcnRpYWw8S2V5Ym9hcmRFdmVudD4pIHtcblx0Y29uc3QgeyBrZXksIHRhcmdldDogZWwgfSA9IGV2ZW50O1xuXHRjb25zdCBncm91cCA9IGVsIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiBlbC5jbG9zZXN0KENTU19UT0dHTEVHUk9VUCk7XG5cblx0aWYgKCFncm91cCkgcmV0dXJuO1xuXHRpZiAoa2V5ID09PSBcIkVudGVyXCIpIGVsLmNsaWNrKCk7XG5cdGlmIChrZXk/LnN0YXJ0c1dpdGgoXCJBcnJvd1wiKSkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0Y29uc3QgaW5wdXRzID0gZ3JvdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKTtcblx0XHRjb25zdCBpbmRleCA9IFsuLi5pbnB1dHNdLmluZGV4T2YoZWwpO1xuXHRcdGNvbnN0IG1vdmUgPSBrZXkubWF0Y2goL0Fycm93KFJpZ2h0fERvd24pLykgPyAxIDogLTE7XG5cdFx0aW5wdXRzWyhpbnB1dHMubGVuZ3RoICsgaW5kZXggKyBtb3ZlKSAlIGlucHV0cy5sZW5ndGhdPy5mb2N1cygpO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uKGRvY3VtZW50LCBcImtleWRvd25cIiwgaGFuZGxlS2V5RG93bikpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdGFuY2hvclBvc2l0aW9uLFxuXHRhdHRyLFxuXHRJU19CUk9XU0VSLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdFFVSUNLX0VWRU5ULFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgREVTQ1JJQkVEQlkgPSBcImFyaWEtZGVzY3JpYmVkYnlcIjtcbmNvbnN0IEVTQyA9IFwiRXNjYXBlXCI7XG5jb25zdCBMQUJFTExFREJZID0gXCJhcmlhLWxhYmVsbGVkYnlcIjtcbmNvbnN0IFBPU0lUSU9OX0NTU19QUk9QRVJUWSA9IFwiLS1tdGRzLXRvb2x0aXAtcG9zaXRpb25cIjtcbmNvbnN0IFRIUk9UVExFX0RFTEFZID0gMzAwO1xuY29uc3QgVE9PTFRJUCA9IElTX0JST1dTRVJcblx0PyBPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIHtcblx0XHRcdGNsYXNzTmFtZTogc3R5bGVzLl90b29sdGlwLFxuXHRcdFx0aWQ6IFwibXRkcy10b29sdGlwXCIsXG5cdFx0XHRwb3BvdmVyOiBcIm1hbnVhbFwiLFxuXHRcdH0pXG5cdDogbnVsbDsgLy8gQ3JlYXRlIGEgZHVtbXkgZWxlbWVudCB0byBhdm9pZCBudWxsIGNoZWNrc1xuXG5sZXQgQU5DSE9SOiBFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5sZXQgTEFTVF9DQUxMID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xubGV0IFRIUk9UVExFOiBudW1iZXIgfCBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiA9IDA7XG5cbmZ1bmN0aW9uIGhhbmRsZU1vdmUoeyB0YXJnZXQsIHR5cGUsIGtleSB9OiBFdmVudCAmIHsga2V5Pzogc3RyaW5nIH0pIHtcblx0aWYgKHR5cGUgPT09IFwia2V5ZG93blwiICYmIGtleSAhPT0gRVNDKSByZXR1cm47IC8vIEFsbG93IEVTQyBkaXNtaXNzIHRvIGZvbGxvdyBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL3BhdHRlcm5zL3Rvb2x0aXAvXG5cdGNvbnN0IHdhaXQgPSBMQVNUX0NBTEwgKyBUSFJPVFRMRV9ERUxBWSAtIERhdGUubm93KCk7XG5cdGNsZWFyVGltZW91dChUSFJPVFRMRSk7XG5cdFRIUk9UVExFID0gc2V0VGltZW91dChcblx0XHRoYW5kbGVNb3ZlVGhyb3R0bGVkLFxuXHRcdE1hdGgubWF4KHdhaXQsIDApLFxuXHRcdGtleSA9PT0gRVNDID8gbnVsbCA6IHRhcmdldCxcblx0KTtcbn1cblxuLy8gVXNpbmcgYSB0aHJvdHRsZWQgZnVuY3Rpb24gdG8gYXZvaWQgcGVyZm9ybWFuY2UgaXNzdWVzXG5mdW5jdGlvbiBoYW5kbGVNb3ZlVGhyb3R0bGVkKHRhcmdldDogRWxlbWVudCB8IG51bGwpIHtcblx0TEFTVF9DQUxMID0gRGF0ZS5ub3coKTtcblxuXHQvLyBCdWlsZCBhbmQgYXBwZW5kIHRvb2x0aXAgaWYgbm90IGV4aXN0aW5nXG5cdGlmICghVE9PTFRJUCB8fCB0YXJnZXQgPT09IFRPT0xUSVApIHJldHVybjsgLy8gQWxsb3cgdG9vbHRpcCB0byBiZSBob3ZlcmVkLCBmb2xsb3dpbmcgaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMS8jY29udGVudC1vbi1ob3Zlci1vci1mb2N1c1xuXHRpZiAoIVRPT0xUSVA/LmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZChUT09MVElQKTsgLy8gRW5zdXJlIGNvbm5lY3RlZFxuXHRsZXQgYW5jaG9yID0gdGFyZ2V0Py5jbG9zZXN0Py48RWxlbWVudD4oXCJbZGF0YS10b29sdGlwXVwiKSB8fCBudWxsO1xuXG5cdC8vIE5vIG5lZWQgdG8gdXBkYXRlXG5cdGlmIChhbmNob3IgPT09IEFOQ0hPUikgcmV0dXJuO1xuXG5cdGNvbnN0IGNvbnRlbnQgPSAoYW5jaG9yICYmIGF0dHIoYW5jaG9yLCBcImRhdGEtdG9vbHRpcFwiKSkgfHwgXCJcIjtcblx0Y29uc3QgcG9zaXRpb24gPVxuXHRcdChhbmNob3IgJiYgYXR0cihhbmNob3IsIFwiZGF0YS10b29sdGlwLXBvc2l0aW9uXCIpKSB8fFxuXHRcdHdpbmRvd1xuXHRcdFx0LmdldENvbXB1dGVkU3R5bGUoYW5jaG9yIHx8IGRvY3VtZW50LmJvZHkpXG5cdFx0XHQuZ2V0UHJvcGVydHlWYWx1ZShQT1NJVElPTl9DU1NfUFJPUEVSVFkpXG5cdFx0XHQ/LnRyaW0oKSB8fFxuXHRcdFwidG9wXCI7XG5cblx0Y29uc3QgaXNIaWRkZW4gPVxuXHRcdCFjb250ZW50IHx8XG5cdFx0Y29udGVudCA9PT0gXCJmYWxzZVwiIHx8XG5cdFx0Y29udGVudCA9PT0gXCJ0cnVlXCIgfHxcblx0XHRwb3NpdGlvbiA9PT0gXCJub25lXCI7XG5cblx0aWYgKGlzSGlkZGVuKSBhbmNob3IgPSBudWxsOyAvLyBEbyBub3Qgc2hvdyB0b29sdGlwIGlmIGJvb2xpc2ggdmFsdWVcblx0aWYgKGFuY2hvcikgVE9PTFRJUC50ZXh0Q29udGVudCA9IGNvbnRlbnQ7IC8vIE9ubHkgdXBkYXRlIGNvbnRlbnQgaWYgbmV3IGFuY2hvclxuXG5cdGNvbnN0IGhhZExhYmVsID0gQU5DSE9SICYmIGF0dHIoQU5DSE9SLCBMQUJFTExFREJZKSA9PT0gVE9PTFRJUD8uaWQ7XG5cdGNvbnN0IGhhc0xhYmVsID1cblx0XHQoYW5jaG9yIGluc3RhbmNlb2YgSFRNTEVsZW1lbnRcblx0XHRcdD8gYW5jaG9yLmlubmVyVGV4dFxuXHRcdFx0OiBhbmNob3I/LnRleHRDb250ZW50XG5cdFx0KT8udHJpbSgpIHx8XG5cdFx0YW5jaG9yPy5oYXNBdHRyaWJ1dGUoTEFCRUxMRURCWSkgfHxcblx0XHRhbmNob3I/Lmhhc0F0dHJpYnV0ZShcImFyaWEtbGFiZWxcIik7XG5cblx0QU5DSE9SPy5yZW1vdmVBdHRyaWJ1dGUoaGFkTGFiZWwgPyBMQUJFTExFREJZIDogREVTQ1JJQkVEQlkpOyAvLyBVbmxpbmsgcHJldmlvdXMgYW5jaG9yXG5cdGFuY2hvclBvc2l0aW9uKFRPT0xUSVAsIGZhbHNlKTsgLy8gUmVzZXQgYW5jaG9yIHBvc2l0aW9uXG5cblx0QU5DSE9SID0gYW5jaG9yOyAvLyBTdG9yZSBuZXcgYW5jaG9yIC0gbWlnaHQgYmUgbnVsbCBpZiBubyBuZXcgYW5jaG9yXG5cdGlmIChBTkNIT1IpIGF0dHIoQU5DSE9SLCBoYXNMYWJlbCA/IERFU0NSSUJFREJZIDogTEFCRUxMRURCWSwgVE9PTFRJUD8uaWQpOyAvLyBVc2UgdG9vbHRpcCBhcyBkZXNjcmlwdGlvbiBpZiBhbGxyZWFkeSBoYXMgbGFiZWxcblx0VE9PTFRJUC50b2dnbGVQb3BvdmVyKCEhYW5jaG9yKTtcblx0YW5jaG9yUG9zaXRpb24oVE9PTFRJUCwgYW5jaG9yIHx8IGZhbHNlLCBwb3NpdGlvbik7XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwiYmx1cixmb2N1cyxtb3VzZW91dCxtb3VzZW92ZXJcIiwgaGFuZGxlTW92ZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwia2V5ZG93blwiLCBoYW5kbGVNb3ZlLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJibHVyXCIsIGhhbmRsZU1vdmUsIFFVSUNLX0VWRU5UKTtcbn0pO1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG5cbi8vIHUtZGV0YWlscy50c1xudmFyIFVIVE1MRGV0YWlsc0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgLy8gVXNpbmcgdW5kZXJzY29yZSBpbnN0ZWFkIG9mIHByaXZhdGUgZmllbGRzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgIHRoaXMuX2NvbnRlbnQgPSBudWxsO1xuICAgIHRoaXMuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBuYW1lOiBcInN1bW1hcnlcIiB9KSxcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIsIG51bGwsIHsgcGFydDogXCJkZXRhaWxzLWNvbnRlbnRcIiB9KSxcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYCR7RElTUExBWV9CTE9DS31cbiAgICAgICAgOjpzbG90dGVkKHUtc3VtbWFyeSkgeyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGJsb2NrIH1cblx0XHRcdFx0OjpzbG90dGVkKHUtc3VtbWFyeSk6OmJlZm9yZSB7IGNvbnRlbnQ6ICcnOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IG1hcmdpbi1pbmxpbmU6IC4wNWVtIC4zMTI1ZW07IGJvcmRlci1ibG9jazogLjMxMjVlbSBzb2xpZCB0cmFuc3BhcmVudDsgYm9yZGVyLWlubGluZS1zdGFydDogLjVlbSBzb2xpZCB9XG5cdFx0XHRcdDo6c2xvdHRlZCh1LXN1bW1hcnlbYXJpYS1leHBhbmRlZD1cInRydWVcIl0pOjpiZWZvcmUgeyByb3RhdGU6IDkwZGVnIH1cblx0XHRcdFx0Omhvc3QgPiBbcGFydD1cImRldGFpbHMtY29udGVudFwiXTpub3QoW2hpZGRlbj1cIlwiXSkgeyBkaXNwbGF5OiBibG9jayB9YFxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcIm9wZW5cIl07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdmFyIF9hMjtcbiAgICB0aGlzLl9jb250ZW50ID0gKF9hMiA9IHRoaXMuc2hhZG93Um9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jaGlsZHJlblsxXTtcbiAgICBvbih0aGlzLl9jb250ZW50LCBcImJlZm9yZW1hdGNoXCIsIHRoaXMpO1xuICAgIG9uKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLl9jb250ZW50KSBvZmYodGhpcy5fY29udGVudCwgXCJiZWZvcmVtYXRjaFwiLCB0aGlzKTtcbiAgICBvZmYodGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIHRoaXMuX2NvbnRlbnQgPSBudWxsO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBwcmV2LCBuZXh0KSB7XG4gICAgY29uc3QgaGlkZSA9IFwib25iZWZvcmVtYXRjaFwiIGluIHRoaXMgPyBcInVudGlsLWZvdW5kXCIgOiB0cnVlO1xuICAgIGNvbnN0IG9wZW4gPSB0aGlzLm9wZW47XG4gICAgZm9yIChjb25zdCBlbCBvZiB0aGlzLmNoaWxkcmVuKVxuICAgICAgaWYgKGVsLm5vZGVOYW1lID09PSBcIlUtU1VNTUFSWVwiKSBhdHRyKGVsLCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7b3Blbn1gKTtcbiAgICBpZiAodGhpcy5fY29udGVudCkge1xuICAgICAgYXR0cih0aGlzLl9jb250ZW50LCBcImFyaWEtaGlkZGVuXCIsIGAkeyFvcGVufWApO1xuICAgICAgdGhpcy5fY29udGVudC5oaWRkZW4gPSBvcGVuID8gZmFsc2UgOiBoaWRlO1xuICAgIH1cbiAgICBpZiAob3BlbiAmJiB0aGlzLm5hbWUpIHtcbiAgICAgIGNvbnN0IHVEZXRhaWxzTGlzdCA9IGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYCR7dGhpcy5ub2RlTmFtZX1bbmFtZT1cIiR7dGhpcy5uYW1lfVwiXWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IHVEZXRhaWxzIG9mIHVEZXRhaWxzTGlzdClcbiAgICAgICAgaWYgKHVEZXRhaWxzICE9PSB0aGlzKSB1RGV0YWlscy5vcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChwcm9wID09PSBcIm9wZW5cIiAmJiBwcmV2ID09PSBudWxsICE9PSAobmV4dCA9PT0gbnVsbCkpXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwidG9nZ2xlXCIpKTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHN1bW1hcnkgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCI6c2NvcGUgPiB1LXN1bW1hcnlcIik7XG4gICAgY29uc3QgaXNTdW1tYXJ5ID0gc3VtbWFyeSA9PSBudWxsID8gdm9pZCAwIDogc3VtbWFyeS5jb250YWlucyhldmVudC50YXJnZXQpO1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmVmb3JlbWF0Y2hcIikgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICBpZiAoaXNTdW1tYXJ5ICYmIGV2ZW50LnR5cGUgPT09IFwia2V5ZG93blwiKSBhc0J1dHRvbihldmVudCk7XG4gICAgaWYgKGlzU3VtbWFyeSAmJiBldmVudC50eXBlID09PSBcImNsaWNrXCIpIHRoaXMub3BlbiA9ICF0aGlzLm9wZW47XG4gIH1cbiAgZ2V0IG9wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwib3BlblwiKTtcbiAgfVxuICBzZXQgb3Blbih2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJvcGVuXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIFwibmFtZVwiKSB8fCBcIlwiO1xuICB9XG4gIHNldCBuYW1lKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcIm5hbWVcIiwgdmFsdWUpO1xuICB9XG59O1xudmFyIFVIVE1MU3VtbWFyeUVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuICAgIHRoaXMuc2xvdCA9IFwic3VtbWFyeVwiO1xuICAgIHRoaXMudGFiSW5kZXggPSAwO1xuICB9XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1kZXRhaWxzXCIsIFVIVE1MRGV0YWlsc0VsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1zdW1tYXJ5XCIsIFVIVE1MU3VtbWFyeUVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTERldGFpbHNFbGVtZW50LCBVSFRNTFN1bW1hcnlFbGVtZW50IH07XG4iLCIvLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfRklSRUZPWCA9IElTX0JST1dTRVIgJiYgL2ZpcmVmb3gvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBfYTI7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gKF9hMiA9IGVsLmdldEF0dHJpYnV0ZShuYW1lKSkgIT0gbnVsbCA/IF9hMiA6IG51bGw7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIGdldExhYmVsID0gKGVsKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSBnZXRSb290KGVsKTtcbiAgY29uc3QgbGFiZWwgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIikgfHwgXCJcIjtcbiAgY29uc3QgbGFiZWxzID0gKChfYTIgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxsZWRieVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkuc3BsaXQoL1xccysvKSkgfHwgW107XG4gIHJldHVybiBbXG4gICAgLi4ubGFiZWxzLm1hcCgoaWQyKSA9PiByb290ID09IG51bGwgPyB2b2lkIDAgOiByb290LnF1ZXJ5U2VsZWN0b3IoYFtpZD1cIiR7aWQyfVwiXWApKSxcbiAgICAvLyBHZXQgYWxsIGxhYmVsbGVkYnkgZWxlbWVudHNcbiAgICAuLi5BcnJheS5mcm9tKGVsLmxhYmVscyB8fCBbXSlcbiAgICAvLyBHZXQgYWxsIDxsYWJlbD4gZWxlbWVudHNcbiAgXS5yZWR1Y2UoKGFjYywgZWwyKSA9PiB7XG4gICAgdmFyIF9hMztcbiAgICByZXR1cm4gYWNjIHx8ICgoX2EzID0gZWwyID09IG51bGwgPyB2b2lkIDAgOiBlbDIuaW5uZXJUZXh0KSA9PSBudWxsID8gdm9pZCAwIDogX2EzLnRyaW0oKSkgfHwgXCJcIjtcbiAgfSwgbGFiZWwpO1xufTtcblxuLy8gdS1wcm9ncmVzcy50c1xudmFyIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbnZhciBVSFRNTFByb2dyZXNzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWxhYmVsbGVkYnlcIiwgXCJ2YWx1ZVwiLCBcIm1heFwiXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBoaWRkZW46IFwiXCIgfSksXG4gICAgICAvLyBTbG90IGhpZGluZyBjb250ZW50IGFsbG93cyBsZWdhY3kgYnJvd3NlciB0byBkaXNwbGF5IGZhbGxiYWNrIHRleHRcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYDpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGJvcmRlcjogMXB4IHNvbGlkOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGhlaWdodDogLjVlbTsgd2lkdGg6IDEwZW07IG92ZXJmbG93OiBoaWRkZW4gfVxuICAgICAgICA6aG9zdDo6YmVmb3JlIHsgY29udGVudDogJyc7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDEwMCU7IGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsgd2lkdGg6IHZhcigtLXBlcmNlbnRhZ2UsIDAlKTsgdHJhbnNpdGlvbjogd2lkdGggLjJzIH1cbiAgICAgICAgOmhvc3QoOm5vdChbdmFsdWVdKSkgeyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsY3VycmVudENvbG9yIDI1JSwgdHJhbnNwYXJlbnQgNTAlLCBjdXJyZW50Q29sb3IgNzUlKSA1MCUvNDAwJSB9XG4gICAgICAgIEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSkgeyA6aG9zdCB7IGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZSAycyBsaW5lYXIgaW5maW5pdGUgfSAgfVxuICAgICAgICBAa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUgeyBmcm9tIHsgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAxMDAlIH0gdG8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IDAgfSB9YFxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgaWYgKFNLSVBfQVRUUl9DSEFOR0UpIHJldHVybjtcbiAgICBTS0lQX0FUVFJfQ0hBTkdFID0gdHJ1ZTtcbiAgICBjb25zdCByb2xlSW1hZ2UgPSBJU19JT1MgfHwgSVNfRklSRUZPWDtcbiAgICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCh0aGlzLnBvc2l0aW9uICogMTAwKSk7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcGVyY2VudGFnZVwiLCBgJHtwZXJjZW50YWdlfSVgKTtcbiAgICBsZXQgbGFiZWwgPSBnZXRMYWJlbCh0aGlzKTtcbiAgICBpZiAocm9sZUltYWdlKSBsYWJlbCA9IGAke2xhYmVsLnJlcGxhY2UoL1xcZCslJC8sIFwiXCIpfSAke3BlcmNlbnRhZ2V9JWA7XG4gICAgaWYgKElTX0ZJUkVGT1gpIGZvciAoY29uc3QgZWwgb2YgdGhpcy5sYWJlbHMpIGF0dHIoZWwsIFwiYXJpYS1sYWJlbFwiLCBsYWJlbCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtYnVzeVwiLCBgJHt0aGlzLnBvc2l0aW9uID09PSAtMX1gKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1sYWJlbFwiLCBsYWJlbC50cmltKCkpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWxhYmVsbGVkYnlcIiwgbnVsbCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVtYXhcIiwgXCIxMDBcIik7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVtaW5cIiwgXCIwXCIpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXZhbHVlbm93XCIsIGAke3BlcmNlbnRhZ2V9YCk7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgcm9sZUltYWdlID8gXCJpbWdcIiA6IFwicHJvZ3Jlc3NiYXJcIik7XG4gICAgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xuICB9XG4gIGdldCBsYWJlbHMoKSB7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLmNsb3Nlc3QoXCJsYWJlbDpub3QoW2Zvcl0pXCIpO1xuICAgIGNvbnN0IGlkMiA9IHVzZUlkKHRoaXMpO1xuICAgIGlmIChsYWJlbCkgbGFiZWwuaHRtbEZvciA9IGlkMjtcbiAgICBjb25zdCBlbCA9IGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGBsYWJlbFtmb3I9XCIke2lkMn1cIl1gXG4gICAgKTtcbiAgICByZXR1cm4gZWw7XG4gIH1cbiAgZ2V0IHBvc2l0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlID09PSBudWxsID8gLTEgOiBNYXRoLm1pbih0aGlzLnZhbHVlIC8gdGhpcy5tYXgsIDEpO1xuICB9XG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0TnVtYmVyKHRoaXMsIFwidmFsdWVcIik7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgc2V0TnVtYmVyKHRoaXMsIFwidmFsdWVcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBtYXgoKSB7XG4gICAgcmV0dXJuIGdldE51bWJlcih0aGlzLCBcIm1heFwiKSB8fCAxO1xuICB9XG4gIHNldCBtYXgobWF4KSB7XG4gICAgc2V0TnVtYmVyKHRoaXMsIFwibWF4XCIsIG1heCk7XG4gIH1cbn07XG4vLyBQcmV2ZW50IENocm9tZSBEZXZUb29scyB3YXJuaW5nIGFib3V0IDxsYWJlbCBmb3I9XCJcIj4gcG9pbnRpbmcgdG8gPHUtcHJvZ3Jlc3M+XG5VSFRNTFByb2dyZXNzRWxlbWVudC5mb3JtQXNzb2NpYXRlZCA9IHRydWU7XG52YXIgaXNOdW1lcmljID0gKHZhbHVlKSA9PiAhTnVtYmVyLmlzTmFOKE51bWJlci5wYXJzZUZsb2F0KGAke3ZhbHVlfWApKSAmJiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKHZhbHVlKSk7XG52YXIgZ2V0TnVtYmVyID0gKGVsLCBrZXkpID0+IHtcbiAgY29uc3QgdmFsdWUgPSBhdHRyKGVsLCBrZXkpO1xuICByZXR1cm4gaXNOdW1lcmljKHZhbHVlKSA/IE1hdGgubWF4KDAsIE51bWJlci5wYXJzZUZsb2F0KHZhbHVlKSkgOiBudWxsO1xufTtcbnZhciBzZXROdW1iZXIgPSAoZWwsIGtleSwgdmFsKSA9PiB7XG4gIGlmICh2YWwgPT09IG51bGwgfHwgaXNOdW1lcmljKHZhbCkpIGF0dHIoZWwsIGtleSwgYCR7dmFsfWApO1xuICBlbHNlIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNldCBub24tbnVtZXJpYyAnJHthdHRyfSc6ICcke3ZhbH0nYCk7XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1wcm9ncmVzc1wiLCBVSFRNTFByb2dyZXNzRWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MUHJvZ3Jlc3NFbGVtZW50IH07XG4iXSwibmFtZXMiOlsiSVNfQlJPV1NFUiIsIklTX0FORFJPSUQiLCJfYSIsIklTX0JST1dTRVIkNSIsIlNBRkVfTEFCRUxMRURCWSIsIkRJU1BMQVlfQkxPQ0siLCJVSFRNTEVsZW1lbnQiLCJhdHRyIiwiZWwiLCJuYW1lIiwidmFsdWUiLCJfYTIiLCJldmVudHMiLCJhY3Rpb24iLCJlbGVtZW50IiwicmVzdCIsInR5cGUiLCJvbiIsIm9mZiIsImF0dGFjaFN0eWxlIiwiY3NzIiwiY3JlYXRlRWxlbWVudCIsIm9ic2VydmVycyIsIm11dGF0aW9uT2JzZXJ2ZXIiLCJvcHRpb25zIiwib2JzZXJ2ZXIiLCJkZXRhaWwiLCJhc0J1dHRvbiIsImV2ZW50IiwiaXNDbGljayIsImdldFJvb3QiLCJub2RlIiwicm9vdCIsImlkIiwidXNlSWQiLCJ0YWdOYW1lIiwidGV4dCIsImF0dHJzIiwiY3VzdG9tRWxlbWVudHMiLCJpbnN0YW5jZSIsIkFSSUFfQ09OVFJPTFMiLCJBUklBX1NFTEVDVEVEIiwiVUhUTUxUYWJzRWxlbWVudCIsInF1ZXJ5V2l0aG91dE5lc3RlZCIsImdldFNlbGVjdGVkSW5kZXgiLCJpbmRleCIsInNldFNlbGVjdGVkIiwiVUhUTUxUYWJMaXN0RWxlbWVudCIsInRhYiIsImtleSIsInRhYnMiLCJwcmV2IiwibmV4dCIsIlNLSVBfQVRUUl9DSEFOR0UiLCJVSFRNTFRhYkVsZW1lbnQiLCJwYW5lbHMiLCJuZXh0UGFuZWwiLCJnZXRQYW5lbCIsInBhbmVsIiwidGFibGlzdCIsInRhYkxpc3QiLCJVSFRNTFRhYlBhbmVsRWxlbWVudCIsImlzRm9jdXNhYmxlIiwidGFnIiwic2VsZiIsImlkMiIsIl9fZGVmUHJvcCIsIl9fZ2V0T3duUHJvcFN5bWJvbHMiLCJfX2hhc093blByb3AiLCJfX3Byb3BJc0VudW0iLCJfX2RlZk5vcm1hbFByb3AiLCJvYmoiLCJfX3NwcmVhZFZhbHVlcyIsImEiLCJiIiwicHJvcCIsIklTX0ZJUkVGT1giLCJJU19JT1MiLCJJU19CUk9XU0VSJDQiLCJGT0NVU19PVVRMSU5FIiwidGV4dDIiLCJ2YWwiLCJMSVZFIiwiTElWRV9TUl9GSVgiLCJzcGVhayIsInNldFZhbHVlIiwiaW5wdXQiLCJkYXRhIiwiX2IiLCJwcm90byIsIklTX1BSRVNTIiwiaXNNb3VzZURvd24iLCJFVkVOVFMiLCJFVkVOVF9PTkNFIiwiSVNfRklSRUZPWF9ERVNLVE9QIiwiSVNfTU9CSUxFIiwiRkFMU0UiLCJURVhUUyIsIlVIVE1MQ29tYm9ib3hFbGVtZW50IiwicmVuZGVyIiwic3luY0lucHV0VmFsdWUiLCJfIiwidGFyZ2V0Iiwib25CbHVyIiwib25DbGljayIsIm9uRm9jdXMiLCJvbklucHV0Iiwib25LZXlEb3duIiwiaXNEYXRhIiwiX2ZvY3VzIiwiX3RleHRzIiwiaXRlbXMiLCJjb250cm9sIiwibGlzdCIsIm11bHRpcGxlIiwibGFiZWwiLCJlZGl0cyIsImFkZGVkTm9kZXMiLCJyZW1vdmVkTm9kZXMiLCJzaG91bGRBbm5vdW5jZSIsImlucHV0TW9kZSIsIm5leHRGb2N1cyIsIl9hMyIsImlkeCIsInNlbGVjdCIsIml0ZW0yIiwib3B0aW9uIiwibGFiZWwyIiwiYXJpYSIsIm9wdCIsIml0ZW0iLCJzeW5jQ2xlYXJXaXRoSW5wdXQiLCJzeW5jT3B0aW9uc1dpdGhJdGVtcyIsIl9zcGVhayIsInZhbHVlcyIsImRpc3BhdGNoTWF0Y2giLCJjaGFuZ2UiLCJjcmVhdGFibGUiLCJxdWVyeSIsIm1hdGNoIiwibyIsImRpc3BhdGNoQ2hhbmdlIiwicmVtb3ZhYmxlIiwiYWRkIiwicmVtb3ZlIiwiaSIsIm9uQmx1cnJlZCIsIngiLCJ5IiwiY2xlYXIiLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiLCJyZXBlYXQiLCJpc0NvbnRyb2wiLCJpblRleHQiLCJmb3JtIiwiUVVJQ0tfRVZFTlQiLCJkZWJvdW5jZSIsImNhbGxiYWNrIiwiZGVsYXkiLCJ0aW1lciIsImFyZ3MiLCJVVUlEIiwiU0NST0xMRVIiLCJUQVJHRVRTIiwiVEFSR0VUU19VUERBVEUiLCJ1cGRhdGUiLCJQT1NJVElPTiIsImFuY2hvclBvc2l0aW9uIiwiYW5jaG9yIiwicGxhY2UiLCJmb3JjZSIsInBvc2l0aW9uIiwiaXNIVE1MQW5jaG9yIiwidGFyZ2V0VyIsInRhcmdldEgiLCJhbmNob3JXIiwiYW5jaG9ySCIsIndpZHRoIiwiaGVpZ2h0Iiwidmlld1ciLCJ2aWV3SCIsInNjcm9sbFgiLCJzY3JvbGxZIiwiYW5jaG9yWCIsImFuY2hvclkiLCJjZW50ZXJYIiwiY2VudGVyWSIsImhhc1NwYWNlTGVmdCIsImhhc1NwYWNlUmlnaHQiLCJoYXNTcGFjZU92ZXIiLCJoYXNTcGFjZVVuZGVyIiwiaXNWZXJ0aWNhbCIsImlzUmlnaHQiLCJpc1VuZGVyIiwidmlld1giLCJ2aWV3WSIsImNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIiLCJxdWV1ZSIsIm9uRnJhbWUiLCJvblRpbWVyIiwiTVVUQVRPUlMiLCJvbk11dGF0aW9uIiwiY2xhc3NOYW1lIiwiZWxlbXMiLCJtdXRhdG9yIiwib25Mb2FkZWQiLCJydW4iLCJpc0lucHV0TGlrZSIsIk1BVE9NTyIsIkVOQUJMRUQiLCJhbmFseXRpY3MiLCJtYXRvbW9JZCIsImVuYWJsZWQiLCJ1cmwiLCJ0aXRsZSIsImNhdGVnb3J5IiwidiIsInJlc3VsdHMiLCJnZXRTdGVwcyIsIm5vdyIsIm1heCIsInNob3ciLCJvZmZzZXQiLCJzdGFydCIsImVuZCIsInBhZ2VzIiwicGFnaW5hdGlvbiIsImN1cnJlbnQiLCJ0b3RhbCIsInBhZ2UiLCJzaGVldCIsIkNTU19BUFAiLCJzdHlsZXMiLCJDU1NfU1RJQ0tZIiwiQ1NTX1RPR0dMRSIsIkNTU19TSURFQkFSIiwidXNlVHJhbnNpdGlvbiIsInRvZ2dsZUFwcEV4cGFuZGVkIiwiaGFuZGxlVG9nZ2xlQ2xpY2siLCJzdG9wIiwic2lkZWJhciIsImhhbmRsZVJlc2l6ZSIsIk1JTl9ZIiwiU0NST0xMX1VQIiwiU1RJQ0siLCJTVElDS19FTCIsIlNUSUNLX0giLCJTVElDS19ZIiwiU1RVQ0siLCJXSU5fSCIsIldJTl9ZIiwiaGFuZGxlTXV0YXRpb24iLCJzdGlja3kiLCJoYW5kbGVTY3JvbGwiLCJORVhUX1kiLCJORVhUX1VQIiwiQ1NTX0JSRUFEQ1JVTUJTIiwiYnJlYWRjcnVtYnMiLCJicmVhZGN1bWJzIiwiY3J1bWIiLCJsZW5ndGgiLCJDU1NfRElBTE9HIiwiRElBTE9HUyIsImhhbmRsZU1vZGFsIiwiZGlhbG9nIiwiaGFuZGxlQ2xpY2siLCJoYW5kbGVJbmplY3QiLCJmaXJzdCIsIklTX0JST1dTRVIkMiIsIkRJU0FCTEVEIiwiU0VMRUNURUQiLCJVSFRNTE9wdGlvbkVsZW1lbnQiLCJMSVZFX1RJTUVSIiwiSU5QVVRfREVCT1VOQ0UiLCJFVkVOVFNfSU5QVVQiLCJVSFRNTERhdGFMaXN0RWxlbWVudCIsImRpc2Nvbm5lY3RJbnB1dCIsIl9wcmV2Iiwic2V0dXBJbnB1dCIsInNldEV4cGFuZGVkIiwib3BlbiIsImlzSW5wdXQiLCJyZWxhdGVkVGFyZ2V0IiwiX3Jvb3QiLCJfaW5wdXQiLCJmaWx0ZXIiLCJoaWRkZW4iLCJ2aXNpYmxlIiwiQ1NTX0ZJRUxEIiwiQ1NTX1ZBTElEQVRJT05TIiwiQ1NTX1ZBTElEQVRJT04iLCJnZXRUZXh0Iiwic3R5bGUiLCJmaWVsZHMiLCJ2YWxpZGF0ZSIsImZpZWxkIiwibGFiZWxzIiwiZGVzY3MiLCJ2YWxpZHMiLCJjb21ib2JveCIsInZhbGlkIiwiZGVzYyIsInJlbmRlckNvbWJvYm94IiwicmVuZGVyQ291bnRlciIsInJlbmRlclRleHRhcmVhU2l6ZSIsInRleHRhcmVhIiwibGltaXQiLCJyZW1haW5kZXIiLCJuZXh0SW52YWxpZCIsInByZXZJbnZhbGlkIiwib3ZlciIsInVuZGVyIiwiaGFuZGxlVG9nZ2xlIiwibmV3U3RhdGUiLCJoYW5kbGVJbnB1dCIsImhhbmRsZVZhbGRpYXRpb24iLCJoYW5kbGVCZWZvcmVDaGFuZ2UiLCJDU1NfRklFTERTRVQiLCJBUklBX0RFU0MiLCJBUklBX0lOVkFMSUQiLCJmaWVsZHNldHMiLCJmaWVsZHNldCIsImlucHV0cyIsInZhbGlkSWQiLCJDU1NfTE9HTyIsImxvZ28iLCJpY29uIiwic3ZnIiwiaXNEb3QiLCJiYWNrIiwiQ1NTX1BPUE9WRVIiLCJPUEVOX1BPUE9WRVJTIiwiaGFuZGxlTGlua0NsaWNrIiwiY2xvc2UiLCJwb3BvdmVyIiwiQ1NTX1RBQkxFIiwidGFibGVzIiwidGFibGUiLCJ0aHMiLCJncm91cCIsImlzVGJvZHkiLCJyb3ciLCJjZWxsIiwiQ1NTX1RPR0dMRUdST1VQIiwiaGFuZGxlS2V5RG93biIsIm1vdmUiLCJERVNDUklCRURCWSIsIkVTQyIsIkxBQkVMTEVEQlkiLCJQT1NJVElPTl9DU1NfUFJPUEVSVFkiLCJUSFJPVFRMRV9ERUxBWSIsIlRPT0xUSVAiLCJBTkNIT1IiLCJMQVNUX0NBTEwiLCJUSFJPVFRMRSIsImhhbmRsZU1vdmUiLCJ3YWl0IiwiaGFuZGxlTW92ZVRocm90dGxlZCIsImNvbnRlbnQiLCJoYWRMYWJlbCIsImhhc0xhYmVsIiwiSVNfQlJPV1NFUiQxIiwiVUhUTUxEZXRhaWxzRWxlbWVudCIsImhpZGUiLCJ1RGV0YWlsc0xpc3QiLCJ1RGV0YWlscyIsInN1bW1hcnkiLCJpc1N1bW1hcnkiLCJVSFRNTFN1bW1hcnlFbGVtZW50IiwiZ2V0TGFiZWwiLCJhY2MiLCJlbDIiLCJVSFRNTFByb2dyZXNzRWxlbWVudCIsInJvbGVJbWFnZSIsInBlcmNlbnRhZ2UiLCJn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WUFBYSxHQUFHLEtBQUssV0FBYSxFQUFFLEVBQUUsRUFDakRBLEVBQUssS0FBTSxhQUFjNEcsRUFBTSxLQUFJLENBQUUsRUFDckM1RyxFQUFLLEtBQU0sa0JBQW1CLElBQUksRUFDbENBLEVBQUssS0FBTSxnQkFBaUIsS0FBSyxFQUNqQ0EsRUFBSyxLQUFNLGdCQUFpQixHQUFHLEVBQy9CQSxFQUFLLEtBQU0sZ0JBQWlCLEdBQUdrWCxDQUFVLEVBQUUsRUFDM0NsWCxFQUFLLEtBQU0sT0FBUWlYLEVBQVksTUFBUSxhQUFhLEVBQ3BEblUsR0FBbUIsRUFDdkIsQ0FDRSxJQUFJLFFBQVMsQ0FDWCxNQUFNOEQsRUFBUSxLQUFLLFFBQVEsa0JBQWtCLEVBQ3ZDbEQsRUFBTS9CLEdBQU0sSUFBSSxFQUN0QixPQUFJaUYsSUFBT0EsRUFBTSxRQUFVbEQsR0FDaEJuQyxHQUFRLElBQUksRUFBRSxpQkFDdkIsY0FBY21DLENBQUcsSUFDbEIsQ0FFTCxDQUNFLElBQUksVUFBVyxDQUNiLE9BQU8sS0FBSyxRQUFVLEtBQU8sR0FBSyxLQUFLLElBQUksS0FBSyxNQUFRLEtBQUssSUFBSyxDQUFDLENBQ3ZFLENBQ0UsSUFBSSxPQUFRLENBQ1YsT0FBT3lULEdBQVUsS0FBTSxPQUFPLENBQ2xDLENBQ0UsSUFBSSxNQUFNaFgsRUFBTyxDQUNmaVgsR0FBVSxLQUFNLFFBQVNqWCxDQUFLLENBQ2xDLENBQ0UsSUFBSSxLQUFNLENBQ1IsT0FBT2dYLEdBQVUsS0FBTSxLQUFLLEdBQUssQ0FDckMsQ0FDRSxJQUFJLElBQUkzSixFQUFLLENBQ1g0SixHQUFVLEtBQU0sTUFBTzVKLENBQUcsQ0FDOUIsQ0FDQSxFQUVBd0osR0FBcUIsZUFBaUIsR0FDdEMsSUFBSUssR0FBYWxYLEdBQVUsQ0FBQyxPQUFPLE1BQU0sT0FBTyxXQUFXLEdBQUdBLENBQUssRUFBRSxDQUFDLEdBQUssT0FBTyxTQUFTLE9BQU9BLENBQUssQ0FBQyxFQUNwR2dYLEdBQVksQ0FBQ2xYLEVBQUl5QyxJQUFRLENBQzNCLE1BQU12QyxFQUFRSCxFQUFLQyxFQUFJeUMsQ0FBRyxFQUMxQixPQUFPMlUsR0FBVWxYLENBQUssRUFBSSxLQUFLLElBQUksRUFBRyxPQUFPLFdBQVdBLENBQUssQ0FBQyxFQUFJLElBQ3BFLEVBQ0lpWCxHQUFZLENBQUNuWCxFQUFJeUMsRUFBS2dDLElBQVEsQ0FDaEMsR0FBSUEsSUFBUSxNQUFRMlMsR0FBVTNTLENBQUcsRUFBRzFFLEVBQUtDLEVBQUl5QyxFQUFLLEdBQUdnQyxDQUFHLEVBQUUsTUFDckQsT0FBTSxJQUFJLE1BQU0sOEJBQThCMUUsQ0FBSSxPQUFPMEUsQ0FBRyxHQUFHLENBQ3RFLEVBQ0EsT0FBQTNDLEdBQWUsT0FBTyxhQUFjaVYsRUFBb0IiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDEwLDE4LDE5XX0=