@mattilsynet/design 1.3.12 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/mtds/alert/alert.js.map +1 -1
- package/mtds/analytics/analytics.js +7 -7
- package/mtds/analytics/analytics.js.map +1 -1
- package/mtds/app/app-observer.js +29 -27
- package/mtds/app/app-observer.js.map +1 -1
- package/mtds/app/app-toggle.js +26 -10
- package/mtds/app/app-toggle.js.map +1 -1
- package/mtds/app/app-toggle2.js +10 -26
- package/mtds/app/app-toggle2.js.map +1 -1
- package/mtds/app/app.js +1 -1
- package/mtds/app/app.js.map +1 -1
- package/mtds/avatar/avatar.js.map +1 -1
- package/mtds/breadcrumbs/breadcrumbs.js.map +1 -1
- package/mtds/button/button.js.map +1 -1
- package/mtds/card/card.js.map +1 -1
- package/mtds/chip/chip.js.map +1 -1
- package/mtds/dialog/dialog-observer.js +15 -11
- package/mtds/dialog/dialog-observer.js.map +1 -1
- package/mtds/external/@u-elements/u-combobox/dist/u-combobox.js +93 -93
- package/mtds/external/@u-elements/u-combobox/dist/u-combobox.js.map +1 -1
- package/mtds/external/@u-elements/u-datalist/dist/u-datalist.js +98 -92
- package/mtds/external/@u-elements/u-datalist/dist/u-datalist.js.map +1 -1
- package/mtds/field/field-observer.js +45 -37
- package/mtds/field/field-observer.js.map +1 -1
- package/mtds/field/field.d.ts +13 -40
- package/mtds/field/field.js +95 -81
- package/mtds/field/field.js.map +1 -1
- package/mtds/field/field.stories.d.ts +16 -61
- package/mtds/index.d.ts +2 -2
- package/mtds/index.iife.js +8 -8
- package/mtds/index.js +11 -11
- package/mtds/logo/logo.js.map +1 -1
- package/mtds/package.json.js +1 -1
- package/mtds/pagination/pagination.d.ts +18 -2
- package/mtds/pagination/pagination.js +68 -12
- package/mtds/pagination/pagination.js.map +1 -1
- package/mtds/pagination/pagination.stories.d.ts +38 -0
- package/mtds/popover/popover-observer.js.map +1 -1
- package/mtds/popover/popover.js.map +1 -1
- package/mtds/skeleton/skeleton.js.map +1 -1
- package/mtds/styles.css +1 -1
- package/mtds/tag/tag.js.map +1 -1
- package/mtds/tooltip/tooltip-observer.js +14 -14
- package/mtds/tooltip/tooltip-observer.js.map +1 -1
- package/mtds/typography/typography.js.map +1 -1
- package/mtds/utils.d.ts +0 -6
- package/mtds/utils.js +51 -51
- package/mtds/utils.js.map +1 -1
- package/package.json +15 -15
package/mtds/index.iife.js
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
var mtds=function(
|
|
1
|
+
var mtds=function(T){"use strict";var _n=Object.defineProperty,se=Object.getOwnPropertySymbols,bn=Object.prototype.hasOwnProperty,gn=Object.prototype.propertyIsEnumerable,re=(t,e,o)=>e in t?_n(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,yn=(t,e)=>{for(var o in e||(e={}))bn.call(e,o)&&re(t,o,e[o]);if(se)for(var o of se(e))gn.call(e,o)&&re(t,o,e[o]);return t},K=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",ae=K&&/android/i.test(navigator.userAgent),wn=K&&/firefox/i.test(navigator.userAgent),En=K&&/iPad|iPhone|iPod/.test(navigator.userAgent),le;K&&/^Mac/i.test(((le=navigator.userAgentData)==null?void 0:le.platform)||navigator.platform);var $n="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",Sn=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 ce=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},tt=(t,...e)=>ce("add",t,e),Tn=(t,...e)=>ce("remove",t,e),et=new WeakMap,Tt=(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)}},xn=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},Cn=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},kn=0,In=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++kn).toString(32)}`),t.id):"",ot=(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},An={define:(t,e)=>!K||window.customElements.get(t)||window.customElements.define(t,e)},N,Ln=0,xt=t=>{N||(N=ot("div"),N.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",f(N,"aria-live","assertive")),N.isConnected||document.body.append(N),t&&(N.textContent=`${t}${Ln++%2?" ":""}`)},de=(t,e,o="")=>{var n,i;const s={bubbles:!0,composed:!0,data:e,inputType:o},r=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(n=Object.getOwnPropertyDescriptor(r,"value"))==null?void 0:n.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},Ct=!1,kt=t=>(t?.type==="mouseup"&&(Ct=!1),t?.type==="mousedown"&&(Ct=!0,tt(document,"mouseup",kt,{once:!0})),Ct),ue="beforeinput,blur,focus,click,input,keydown,mousedown",pe={once:!0,passive:!0},Mn=wn&&!ae,On=ae||En,nt="false",it={added:"Added",empty:"No selected",found:"Navigate left to find %d selected",invalid:"Invalid value",of:"of",remove:"Press to remove",removed:"Removed"},st=class extends Sn{constructor(){super(),this._item="",this._speak="",this._texts=yn({},it),this._value="",this.attachShadow({mode:"open"}).append(ot("slot"),ot("style",`:host(:not([hidden])) { display: block; -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
|
-
::slotted(data)::after { content: '\\00D7'; content: '\\00D7' / ''; padding-inline: .5ch; pointer-events: auto }
|
|
8
|
-
::slotted(data:focus) { ${xo} }`))}static get observedAttributes(){return Object.keys(dt).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=Lo(this),rt(this,be,this,!0),Ct(this,{attributeFilter:["value","id"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(pt,0,this),setTimeout(ft,0,this)}attributeChangedCallback(t,e,n){const o=t.split("data-sr-")[1];dt[o]&&(this._texts[o]=n||dt[o])}disconnectedCallback(){Ct(this,!1),ko(this,be,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"&&Ro(this),t.type==="click"&&Uo(this,t),t.type==="focus"&&Ho(this,t),t.type==="input"&&qo(this,t),t.type==="keydown"&&Fo(this,t),t.type==="mousedown"&&Lt(t),t.type==="mutation"&&pt(this,t)}get multiple(){var t;return((t=p(this,"data-multiple"))!=null?t:ct)!==ct}set multiple(t){p(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=p(this,"data-creatable"))!=null?t:ct)!==ct}set creatable(t){p(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 n=((t=this.list)==null?void 0:t.nodeName)==="U-DATALIST"?"u-option":"option";this._options=(e=this.list)==null?void 0:e.getElementsByTagName(n)}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,pt=(t,e)=>{var n,o;const{_focus:i,_texts:s,items:r,control:a,list:d,multiple:l}=t;let h=`${O((n=a?.labels)==null?void 0:n[0])}, ${l?r.length?s.found.replace("%d",`${r.length}`):s.empty:""}`;const u=[];for(const{addedNodes:b,removedNodes:I}of e?.detail||[]){for(const m of b)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&&a&&T){const b=p(a,"inputmode"),I=At(i)?a:i;t._speak=`${s[u[0].isConnected?"added":"removed"]} ${O(u[0])}, `,(No||i===a)&&kt(t._speak),a!==I&&(p(a,"aria-expanded",null),p(a,"inputmode","none"),h=" ",a.focus()),setTimeout(()=>{var m;p(a,"aria-expanded","true"),p(a,"inputmode",b),(m=I?.focus)==null||m.call(I),t._speak="",Do?rt(t,"blur",()=>pt(t),ge):setTimeout(pt,100,t)},100)}let w=0;const k=t.querySelector("select");for(const b of r){const I=k?.options[w],m=O(b),A=b.value||m,ee=`${t._speak}${m}, ${s.remove}, ${++w} ${s.of} ${r.length}`;p(b,"role","button"),p(b,"value",A),p(b,"tabindex","-1"),p(b,"aria-label",ee),I?Object.assign(I,{textContent:m,value:A}):k?.appendChild(new Option(m,A,!0,!0))}k&&p(k,"multiple",l?"":null);for(const b of[...k?.options||[]].slice(w))b.remove();!l&&w>1&&console.warn("u-combobox: Multiple <data> found in single mode."),d&&p(d,"aria-multiselectable",`${l}`),a&&p(a,"list",Mo(d)),a&&p(a,"aria-label",`${t._speak}${h}`);const J=O(r[0]);J!==t._item&&ft(t),t._item=J,ye(t),we(t),(o=Ct(t))==null||o.takeRecords()},ye=t=>{var e;t.clear&&p(t.clear,"role","button"),t.clear&&(t.clear.hidden=!((e=t.control)!=null&&e.value))},we=t=>{var e;const{_speak:n,options:o=[],values:i}=t;for(const s of o){const r=(e=p(s,"value"))!=null?e:O(s);p(s,"aria-label",n?`${n}${O(s)}`:null),p(s,"selected",i.includes(r)?"":null)}},ft=t=>{const{multiple:e,control:n,items:o}=t,i=O(o[0]);!e&&n&&i!==n.value&&_e(n,i,i?"insertText":"deleteContent")},Mt=(t,e=!0)=>{var n;const{_texts:o,options:i=[],creatable:s,control:r,items:a,multiple:d}=t,l=((n=r?.value)==null?void 0:n.trim())||"",h=l.toLowerCase()||null;let u=[...i].find(w=>(p(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?q(t,u,!1):s&&l?q(t,{value:l},!1):(!d&&!l&&a[0]?q(t,a[0]):ft(t),kt(o.invalid));for(const w of i)w.selected=w===u},q=(t,e,n=!0)=>{const{control:o,items:i,multiple:s}=t,r=lt("data",e.label||e.value,{value:e.value}),a=[...i].find(h=>h.value===e.value),d={bubbles:!0,cancelable:!0,detail:a||r};if(a&&!n)return ft(t);if(t.dispatchEvent(new CustomEvent("beforechange",d))){if(!s)for(const h of[...i])h.remove();a?a.remove():o?.insertAdjacentElement("beforebegin",r),t.dispatchEvent(new CustomEvent("afterchange",d))}},Ho=(t,{target:e})=>{e instanceof HTMLElement&&(t._focus=e),kt()},Ro=t=>Lt()||setTimeout(Bo,0,t),Bo=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(t.multiple||Mt(t),t._focus=void 0)},Uo=(t,e)=>{const{clientX:n,clientY:o,target:i}=e,{clear:s,control:r,items:a}=t;if(s?.contains(i))return r&&_e(r,"","deleteContentBackward"),r?.focus();for(const d of a){const{top:l,right:h,bottom:u,left:T}=d.getBoundingClientRect();if(d.contains(i))return q(t,d);if(o>=l&&o<=u&&n>=T&&n<=h)return d.focus()}i===t&&r?.focus()},qo=(t,e)=>{var n;const{options:o=[],control:i,multiple:s}=t,r=((n=i?.value)==null?void 0:n.trim())||"";if(e instanceof InputEvent?!e.inputType||e.inputType==="insertReplacementText":!!r){e.stopImmediatePropagation(),i&&(i.value=t._value);for(const d of o)if(d.value&&d.value===r)return q(t,d,s)}else s||Mt(t,!1);ye(t)},Fo=(t,e)=>{var n;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;const{clear:o,control:i,items:s}=t,{key:r,repeat:a,target:d}=e,l=i&&i===d,h=l&&i?.selectionEnd;let u=l?s.length:[...s].indexOf(d);if(l&&r==="Tab"&&o&&!o.hidden&&(e.preventDefault(),o.tabIndex=-1,o.focus(),rt(o,"blur",()=>p(o,"tabindex",null),ge)),!(!l&&Io(e)||u===-1)){if(r==="ArrowRight"&&!l)u+=1;else if(r==="ArrowLeft"&&!h)u-=1;else if(r==="Enter"&&l){const T=p(i,"form");return p(i,"form","#"),requestAnimationFrame(()=>p(i,"form",T)),Mt(t)}else if((r==="Backspace"||r==="Delete")&&!h){if(e.preventDefault(),!a&&s[u])return q(t,s[u]);l&&(u-=1)}else return l||i?.focus();e.preventDefault(),(n=s[Math.max(0,u)]||i)==null||n.focus()}};Oo.define("u-combobox",ut);const Vo="1.3.12",E={capture:!0,passive:!0},K=typeof window<"u"&&typeof document<"u";function Yo(t,e){let n;return(...o)=>{clearTimeout(n),n=setTimeout(()=>t(...o),e)}}function c(t,e,n){return n===void 0?t.getAttribute(e)??null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}let jo=0;const Ko=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function Ot(t){return t.id||(t.id=`${Ko}${++jo}`),t.id}const Wo=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,e[`${t}EventListener`](...n)},v=(t,...e)=>Wo("add",t,e),W=K?document.createElement("div"):null,ht=new Map,Xo=()=>{for(const[t,e]of ht)e()};W&&(W.style.cssText="position:absolute;padding:1px;top:0;left:0px",v(window,"load,resize,scroll",Xo,E));const F={top:0,right:1,bottom:2,left:3};function P(t,e,n,o){const i=F[n]??Number(n)??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,o));const s=e instanceof HTMLElement,{offsetWidth:r,offsetHeight:a}=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,b=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-(r-d)/2),k-r-10),rs=Math.min(Math.max(10,A-(a-l)/2),J-a-10),as=m-r>0,ls=m+d+r<k,cs=A-a>0,ds=A+l+a<J,uo=i===F.top||i===F.bottom,us=i===F.right&&(o||ls)||!as,po=i===F.bottom&&(o||ds)||!cs,ps=Math.round(uo?ee:us?m+d:m-r),fs=Math.round(uo?po?A+l:A-a:rs);t.style.position="absolute",t.style.left=`${ps+b}px`,t.style.top=`${fs+I}px`,W?.style.setProperty("translate",`0px ${Math.round(po?b+A+l+a+30:0)}px`)}function Ee(t){let e=0;const n=()=>setTimeout(o,200),o=()=>{t([],i),i.takeRecords(),e=0},i=new MutationObserver(()=>{e||(e=requestAnimationFrame(n))});return i}const Pt=new WeakMap,V=(t,e,n)=>{const o=t.getElementsByClassName(e),i=Pt.get(t)||[];i.length||(Pt.set(t,i),Ee((s,r)=>{if(t.isConnected&&i?.length)for(const a of i)a();else r?.disconnect(),Pt.delete(t)}).observe(t,{attributeFilter:["class","hidden"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>n(o))},x=t=>{if(!K)return;const e=()=>requestAnimationFrame(t);document.readyState==="complete"?e():v(window,"load",e)},Dt=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),$e="mattilsynet.matomo.cloud";let Nt=!0;function Go(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:n,enabled:o}=e;Nt=o??window.location.hostname==="localhost",window._paq.push(["setSiteId",n])}if(Nt==="debug")return console.info(`Analytics: "${t}"`,e);if(Nt!==!1)if(t==="pageview"){const{url:n,title:o}=e;window._paq.push(["setCustomUrl",n||location.href]),window._paq.push(["setDocumentTitle",o||document.title]),window._paq.push(["trackPageView"])}else if(t==="event"){const{category:n,action:o,name:i,value:s}=e,r=["trackEvent",n,o,i,s];window._paq.push(r.filter(a=>a!==void 0))}else if(t==="search"){const{query:n,category:o=!1,results:i=!1}=e;window._paq.push(["trackSiteSearch",n,o,i])}else t==="matomo"&&window._paq.push(e)}}const zo=(t,e,n=Number.POSITIVE_INFINITY)=>{const o=(n-1)/2,i=Math.max(Math.min(t-Math.floor(o),e-n+1),1),s=Math.min(Math.max(t+Math.ceil(o),n),e),r=Array.from({length:s+1-i},(a,d)=>d+i);return n>4&&i>1&&r.splice(0,2,1,0),n>3&&s<e&&r.splice(-2,2,0,e),r},Qo=({current:t=1,total:e=10,show:n=7})=>({prev:t>1?t-1:0,next:t<e?t+1:0,pages:zo(t,e,n).map((o,i)=>({current:o===t&&"page",key:`key-${o}-${i}`,page:o}))}),Se="_alert_1run0_1 _ds-alert_im5h3_1",Te="_app_1run0_1",xe="_sticky_1run0_1",Ce="_avatar_1run0_1 _ds-avatar_im5h3_1",ke="_badge_1run0_1",Ie="_breadcrumbs_1run0_1 _ds-breadcrumbs_im5h3_1",Le="_button_1run0_1 _ds-button_im5h3_1",Ae="_card_1run0_1",Me="_group_1run0_1",Oe="_chip_1run0_1 _ds-chip_im5h3_1",Pe="_details_1run0_1 _ds-details_im5h3_1",De="_dialog_1run0_1 _ds-dialog_im5h3_1",Ne="_divider_1run0_1",He="_errorsummary_1run0_1 _ds-error-summary_im5h3_1",Re="__errorsummary_1run0_1",Be="_field_1run0_1 _ds-field_im5h3_1",Ue="__datalist_1run0_1",qe="_affixes_1run0_1 _ds-field-affixes_im5h3_1",Fe="_fieldset_1run0_1 _ds-fieldset_im5h3_1",Ve="_heading_1run0_1 _ds-heading_im5h3_1",Ye="_ingress_1run0_1",je="_muted_1run0_1",Ke="_info_1run0_1",We="_prose_1run0_1",Xe="_helptext_1run0_1 _ds-focus_im5h3_1",Ge="_input_1run0_1 _ds-input_im5h3_1",ze="_grid_1run0_1",Qe="_flex_1run0_1",Je="_link_1run0_1",Ze="_logo_1run0_1",tn="_pagination_1run0_1 _ds-pagination_im5h3_1",en="_popover_1run0_1",nn="_progress_1run0_1",on="__indeterminate_1run0_1",sn="_skeleton_1run0_1 _ds-skeleton_im5h3_1",rn="__skeleton_1run0_1",an="_spinner_1run0_1",ln="_steps_1run0_1",cn="_table_1run0_1 _ds-table_im5h3_1",dn="__scrollShadow_1run0_1",un="_tabs_1run0_1 _ds-tabs_im5h3_1",pn="__scrollMask_1run0_1",fn="_tag_1run0_1 _ds-tag_im5h3_1",hn="_togglegroup_1run0_1",mn="__tooltip_1run0_1",vn="_validation_1run0_1 _ds-validation-message_im5h3_1",_n="_body_1run0_153",bn="__checked_1run0_1",_={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:qe,fieldset:Fe,heading:Ve,ingress:Ye,muted:je,info:Ke,prose:We,helptext:Xe,input:Ge,grid:ze,flex:Qe,link:Je,logo:Ze,pagination:tn,popover:en,progress:nn,_indeterminate:on,skeleton:sn,_skeleton:rn,spinner:an,steps:ln,table:cn,_scrollShadow:dn,tabs:un,_scrollMask:pn,tag:fn,togglegroup:hn,_tooltip:mn,validation:vn,body:_n,_checked:bn},Jo=Object.freeze(Object.defineProperty({__proto__:null,_checked:bn,_datalist:Ue,_errorsummary:Re,_indeterminate:on,_scrollMask:pn,_scrollShadow:dn,_skeleton:rn,_tooltip:mn,affixes:qe,alert:Se,app:Te,avatar:Ce,badge:ke,body:_n,breadcrumbs:Ie,button:Le,card:Ae,chip:Oe,default:_,details:Pe,dialog:De,divider:Ne,errorsummary:He,field:Be,fieldset:Fe,flex:Qe,grid:ze,group:Me,heading:Ve,helptext:Xe,info:Ke,ingress:Ye,input:Ge,link:Je,logo:Ze,muted:je,pagination:tn,popover:en,progress:nn,prose:We,skeleton:sn,spinner:an,steps:ln,sticky:xe,table:cn,tabs:un,tag:fn,togglegroup:hn,validation:vn},Symbol.toStringTag,{value:"Module"}));typeof window<"u"&&window.CSSStyleSheet&&document.adoptedStyleSheets&&(()=>{const t="--mtds-app-expanded",e=new CSSStyleSheet,n=()=>!window.localStorage.getItem(t)?.includes("false");document.adoptedStyleSheets.push(e),window.mtdsToggleAppExpanded=o=>{try{const i=o??!n();e.replaceSync?.(`:root { ${t}: var(${t}--${i})}`),window.localStorage.setItem(t,i)}catch{}},window.mtdsToggleAppExpanded(n())})();const gn=_.app.split(" ")[0],Zo=_.sticky.split(" ")[0],ti='[data-command="toggle-app-expanded"]',yn=`.${gn} > dialog,.${gn} dialog ~ main`,wn=t=>{document.startViewTransition?document.startViewTransition(t):t()},En=t=>wn(()=>window.mtdsToggleAppExpanded?.(t));function ei({target:t,defaultPrevented:e}){if(!(e||!(t instanceof HTMLButtonElement)||!t.matches(ti))){if(getComputedStyle(t).position==="sticky")return En();wn(()=>{const n=document.querySelector(yn);n?.setAttribute("data-closedby","any"),n?.showModal()})}}function ni(){document.querySelector(yn)?.close()}let Ht=0,Y,M=0,g,Rt=0,mt=0,Bt=!1,Ut=0,N=0;function oi([t]){g=t,$n()}function $n(){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,Zo,oi),v(document,"click",ei,E),v(window,"resize",Yo(ni,100),E),v(window,"scroll",$n,E)});const ii=_.breadcrumbs.split(" ")[0];function si(t){for(const e of t)e.querySelectorAll("li a").forEach((n,o,{length:i})=>{c(n,"aria-current",o===i-1?"page":null)})}x(()=>V(document.documentElement,ii,si));const ri=_.dialog.split(" ")[0],ai=K?document.getElementsByClassName(ri):[],li=()=>{for(const t of ai)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:n})=>{if(n instanceof HTMLDialogElement&&c(n,"data-closedby")==="any"){const{top:o,right:i,bottom:s,left:r}=n.getBoundingClientRect();o<=e&&e<=s&&r<=t&&t<=i||n.close()}else n instanceof Element&&n.closest('button[data-command="close"]')&&n?.closest("dialog")?.close()};x(()=>{v(document,"click",ci,E),Ee(li).observe(document.documentElement,{attributeFilter:["open"],attributes:!0,childList:!0,subtree:!0})});function di(t){if(t.animationName!==_._errorsummary)return;const e=t.target?.firstElementChild;e instanceof HTMLHeadingElement&&(c(e,"tabindex","-1"),e.focus())}x(()=>v(document,"animationend",di,E));var ui=Object.defineProperty,Sn=Object.getOwnPropertySymbols,pi=Object.prototype.hasOwnProperty,fi=Object.prototype.propertyIsEnumerable,Tn=(t,e,n)=>e in t?ui(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,hi=(t,e)=>{for(var n in e||(e={}))pi.call(e,n)&&Tn(t,n,e[n]);if(Sn)for(var n of Sn(e))fi.call(e,n)&&Tn(t,n,e[n]);return t},X=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",vt=X&&/android/i.test(navigator.userAgent),qt=X&&/iPad|iPhone|iPod/.test(navigator.userAgent),xn;X&&/^Mac/i.test(((xn=navigator.userAgentData)==null?void 0:xn.platform)||navigator.platform);var mi=`${vt?"data":"aria"}-labelledby`,vi=":host(:not([hidden])) { display: block }",_i="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",Cn=typeof HTMLElement>"u"?class{}:HTMLElement;function f(t,e,n){return n===void 0?t.getAttribute(e):(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var kn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},G=(t,...e)=>kn("add",t,e),_t=(t,...e)=>kn("remove",t,e),bi=(t,e)=>t.attachShadow({mode:"open"}).append(Yt("slot"),Yt("style",e)),bt=new WeakMap,Ft=(t,e)=>{if(e===void 0)return bt.get(t);try{bt.get(t).disconnect(),bt.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),bt.set(t,n)}},In=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},gi=0,Vt=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++gi).toString(32)}`),t.id):"",Yt=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},Ln={define:(t,e)=>!X||window.customElements.get(t)||window.customElements.define(t,e)},H,yi=0,An=t=>{H||(H=Yt("div"),H.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",f(H,"aria-live","assertive")),H.isConnected||document.body.append(H),t&&(H.textContent=`${t}${yi++%2?" ":""}`)},wi=(t,e,n="")=>{var o,i;const s={bubbles:!0,composed:!0,data:e,inputType:n},r=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(o=Object.getOwnPropertyDescriptor(r,"value"))==null?void 0:o.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 Cn{static get observedAttributes(){return[Wt,z]}connectedCallback(){qt||(this.tabIndex=-1),this.hasAttribute("role")||f(this,"role","option"),this.attributeChangedCallback()}attributeChangedCallback(){f(this,"aria-disabled",`${this.disabled}`),f(this,"aria-selected",`${this.selected}`)}get defaultSelected(){return this[z]}set defaultSelected(t){this[z]=t}get disabled(){return f(this,Wt)!==null}set disabled(t){f(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=f(this,"label"))!=null?t:this.text}set label(t){f(this,"label",t)}get selected(){return f(this,z)!==null}set selected(t){f(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=f(this,"value"))!=null?t:this.text}set value(t){f(this,"value",t)}};Ln.define("u-option",Ei);var Mn,On=0,$i=qt||vt,Pn="click,focusout,input,keydown,mousedown,mouseup",Dn="focus,focusin,blur,focusout",gt={singular:"%d hit",plural:"%d hits"},Nn=class extends Cn{constructor(){super(),this._texts=hi({},gt),this._value="",bi(this,`${vi}
|
|
7
|
+
::slotted(data)::after { content: '\\00D7'; content: '\\00D7' / ''; padding-inline: .5ch; pointer-events: auto; cursor: pointer }
|
|
8
|
+
::slotted(data:focus) { ${$n} }`))}static get observedAttributes(){return Object.keys(it).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=Cn(this),tt(this,ue,this,!0),Tt(this,{attributeFilter:["value","id"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(rt,0,this),setTimeout(at,0,this)}attributeChangedCallback(t,e,o){const n=t.split("data-sr-")[1];it[n]&&(this._texts[n]=o||it[n])}disconnectedCallback(){Tt(this,!1),Tn(this,ue,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;At(this)||(t.type==="beforeinput"&&(this._value=e?.value||""),t.type==="blur"&&Pn(this),t.type==="click"&&Rn(this,t),t.type==="focus"&&Dn(this,t),t.type==="input"&&Hn(this,t),t.type==="keydown"&&Bn(this,t),t.type==="mousedown"&&kt(t),t.type==="mutation"&&rt(this,t))}get multiple(){var t;return((t=f(this,"data-multiple"))!=null?t:nt)!==nt}set multiple(t){f(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=f(this,"data-creatable"))!=null?t:nt)!==nt}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())||""},It=t=>t instanceof HTMLDataElement,At=({control:t})=>t?.disabled||t?.readOnly||!1,rt=(t,e)=>{var o,n;const{_focus:i,_texts:s,items:r,control:a,list:u,multiple:l}=t;let p=`${O((o=a?.labels)==null?void 0:o[0])}${l?`, ${r.length?s.found.replace("%d",`${r.length}`):s.empty}`:""}`;const d=[];for(const{addedNodes:E,removedNodes:S}of e?.detail||[]){for(const v of E)It(v)&&d.unshift(v);for(const v of S)It(v)&&d.push(v)}const _=l?d.length===1:d[0]===i;if(i&&a&&_){const E=f(a,"aria-expanded"),S=f(a,"inputmode"),v=It(i)?a:i,P=!d[0].isConnected;t._speak=`${s[P?"removed":"added"]} ${O(d[0])}, `,(On||i===a)&&xt(t._speak),a!==v&&(f(a,"aria-expanded",null),f(a,"inputmode","none"),p=" ",a.focus()),setTimeout(()=>{var j;f(a,"aria-expanded",E),f(a,"inputmode",P?"none":S),(j=v?.focus)==null||j.call(v),f(a,"inputmode",S),t._speak="",Mn?tt(t,"blur",()=>rt(t),pe):setTimeout(rt,100,t)},100)}let h=0;const A=t.querySelector("select"),St=At(t)?"":`${s.remove}, `;for(const E of r){const S=A?.options[h],v=O(E),P=E.value||v,j=`${t._speak}${v}, ${St}${++h} ${s.of} ${r.length}`;f(E,"role","button"),f(E,"value",P),f(E,"tabindex","-1"),f(E,"aria-label",j),S?Object.assign(S,{textContent:v,value:P}):A?.appendChild(new Option(v,P,!0,!0))}A&&f(A,"multiple",l?"":null);for(const E of[...A?.options||[]].slice(h))E.remove();!l&&h>1&&console.warn("u-combobox: Multiple <data> found in single mode."),u&&f(u,"aria-multiselectable",`${l}`),a&&f(a,"list",In(u)),a&&f(a,"aria-label",`${t._speak}${p}`);const Z=O(r[0]);Z!==t._item&&at(t),t._item=Z,fe(t),me(t),(n=Tt(t))==null||n.takeRecords()},fe=t=>{var e;t.clear&&f(t.clear,"role","button"),t.clear&&(t.clear.hidden=!((e=t.control)!=null&&e.value)||At(t))},me=t=>{var e;const{_speak:o,options:n=[],values:i}=t;for(const s of n){const r=(e=f(s,"value"))!=null?e:O(s);f(s,"aria-label",o?`${o}${O(s)}`:null),f(s,"selected",i.includes(r)?"":null)}},at=t=>{const{multiple:e,control:o,items:n}=t,i=O(n[0]);!e&&o&&i!==o.value&&de(o,i,i?"insertText":"deleteContent")},Lt=(t,e=!0)=>{var o;const{_texts:n,options:i=[],creatable:s,control:r,items:a,multiple:u}=t,l=((o=r?.value)==null?void 0:o.trim())||"",p=l.toLowerCase()||null;let d=[...i].find(h=>(f(h,"label")||O(h)).trim().toLowerCase()===p);const _={bubbles:!0,cancelable:!0,detail:d};if(t.dispatchEvent(new CustomEvent("comboboxbeforematch",_))||(d=[...i].find(h=>h.selected)),e)return me(t),d?U(t,d,!1):s&&l?U(t,{value:l},!1):(!u&&!l&&a[0]?U(t,a[0]):at(t),xt(n.invalid));for(const h of i)h.selected=h===d},U=(t,e,o=!0)=>{const{control:n,items:i,multiple:s}=t,r=ot("data",e.label||e.value,{value:e.value}),a=[...i].find(p=>p.value===e.value),u={bubbles:!0,cancelable:!0,detail:a||r};if(a&&!o)return at(t);if(t.dispatchEvent(new CustomEvent("comboboxbeforeselect",u))){if(!s)for(const p of[...i])p.remove();a?a.remove():n?.insertAdjacentElement("beforebegin",r),t.dispatchEvent(new CustomEvent("comboboxafterselect",u))}},Dn=(t,{target:e})=>{e instanceof HTMLElement&&(t._focus=e),xt()},Pn=t=>kt()||setTimeout(Nn,0,t),Nn=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(t.multiple||Lt(t),t._focus=void 0)},Rn=(t,e)=>{const{clientX:o,clientY:n,target:i}=e,{clear:s,control:r,items:a}=t;if(s?.contains(i))return r&&de(r,"","deleteContentBackward"),r?.focus();for(const u of a){const{top:l,right:p,bottom:d,left:_}=u.getBoundingClientRect();if(u.contains(i))return U(t,u);if(n>=l&&n<=d&&o>=_&&o<=p)return u.focus()}i===t&&r?.focus()},Hn=(t,e)=>{var o;const{options:n=[],control:i,multiple:s}=t,r=((o=i?.value)==null?void 0:o.trim())||"";if(e instanceof InputEvent?!e.inputType||e.inputType==="insertReplacementText":!!r){e.stopImmediatePropagation(),i&&(i.value=t._value);for(const u of n)if(u.value&&u.value===r)return U(t,u,s)}else s||Lt(t,!1);fe(t)},Bn=(t,e)=>{var o;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;const{clear:n,control:i,items:s}=t,{key:r,repeat:a,target:u}=e,l=i&&i===u,p=l&&i?.selectionEnd;let d=l?s.length:[...s].indexOf(u);if(l&&r==="Tab"&&n&&!n.hidden&&(e.preventDefault(),n.tabIndex=-1,n.focus(),tt(n,"blur",()=>f(n,"tabindex",null),pe)),!(!l&&xn(e)||d===-1)){if(r==="ArrowRight"&&!l)d+=1;else if(r==="ArrowLeft"&&!p)d-=1;else if(r==="Enter"&&l){const _=f(i,"form");return f(i,"form","#"),requestAnimationFrame(()=>f(i,"form",_)),Lt(t)}else if((r==="Backspace"||r==="Delete")&&!p){if(e.preventDefault(),!a&&s[d])return U(t,s[d]);l&&(d-=1)}else return l||i?.focus();e.preventDefault(),(o=s[Math.max(0,d)]||i)==null||o.focus()}};An.define("u-combobox",st);var Mt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Un=Mt&&/android/i.test(navigator.userAgent),he;Mt&&/^Mac/i.test(((he=navigator.userAgentData)==null?void 0:he.platform)||navigator.platform);var qn=`${Un?"data":"aria"}-labelledby`,Ot=":host(:not([hidden])) { display: block }",lt=typeof HTMLElement>"u"?class{}:HTMLElement;function x(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 ve=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},Fn=(t,...e)=>ve("add",t,e),Vn=(t,...e)=>ve("remove",t,e),ct=(t,e)=>t.attachShadow({mode:"open"}).append(ye("slot"),ye("style",e)),dt=new WeakMap,_e=(t,e)=>{if(e===void 0)return dt.get(t);try{dt.get(t).disconnect(),dt.delete(t)}catch{}if(e){const o=new MutationObserver(n=>t.handleEvent({type:"mutation",detail:n}));o.observe(t,e),dt.set(t,o)}},Yn=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},be=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},jn=0,ge=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++jn).toString(32)}`),t.id):"",ye=(t,e,o)=>{const n=document.createElement(t);return e&&(n.textContent=e),n},ut={define:(t,e)=>!Mt||window.customElements.get(t)||window.customElements.define(t,e)},pt="aria-controls",q="aria-selected",we=class extends lt{constructor(){super(),ct(this,Ot)}get tabList(){return ft("u-tablist",this)[0]||null}get selectedIndex(){return mt(this.tabs)}set selectedIndex(t){Nt(this.tabs[t])}get tabs(){return ft("u-tab",this)}get panels(){return ft("u-tabpanel",this)}},Ee=class extends lt{constructor(){super(),ct(this,Ot)}connectedCallback(){x(this,"role","tablist"),Fn(this,"click,keydown",this),_e(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){Vn(this,"click,keydown",this),_e(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s?.setAttribute(q,"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"&&Nt(o[n]),t.type==="keydown"&&!Yn(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=mt(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 mt(this.tabs)}set selectedIndex(t){Nt(this.tabs[t])}},Dt=!1,$e=class extends lt{static get observedAttributes(){return["id",q,pt]}constructor(){super(),ct(this,":host(:not([hidden])) { cursor: pointer; display: inline-block }")}connectedCallback(){x(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!Dt&&this.selected&&this.tabList){Dt=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=ft("u-tabpanel",this.tabsElement||this),o=Pt(this,e[t.indexOf(this)]);o&&x(o,qn,ge(this)),t.forEach((n,i)=>{const s=Pt(n,e[i]);n.tabIndex=n===this?0:-1,x(n,q,`${n===this}`),s&&(s.hidden=s!==o),s&&x(n,pt,s.id)}),Dt=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return t?.nodeName==="U-TABLIST"?t:null}get selected(){return x(this,q)==="true"}set selected(t){x(this,q,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return Pt(this)}},Se=class extends lt{static get observedAttributes(){return["hidden"]}constructor(){super(),ct(this,Ot)}connectedCallback(){x(this,"role","tabpanel"),this.hidden=mt(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){this.hidden||Kn(this.firstChild)?x(this,"tabindex",null):this.tabIndex=0}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${pt}="${this.id}"]`;return be(this).querySelectorAll(t)}},ft=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),Pt=(t,e)=>{const o=x(t,pt)||ge(e),n=be(t).getElementById(o);return n?.nodeName==="U-TABPANEL"?n:null},mt=t=>[...t].findIndex(e=>x(e,q)==="true"),Nt=t=>t&&x(t,"aria-selected","true"),Kn=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');ut.define("u-tabs",we),ut.define("u-tablist",Ee),ut.define("u-tab",$e),ut.define("u-tabpanel",Se);const Wn="2.0.0",$={capture:!0,passive:!0},W=typeof window<"u"&&typeof document<"u";function Xn(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 Gn=0;const zn=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function ht(t){return t.id||(t.id=`${zn}${++Gn}`),t.id}const Qn=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,e[`${t}EventListener`](...o)},b=(t,...e)=>Qn("add",t,e),X=W?document.createElement("div"):null,vt=new Map,Jn=()=>{for(const[t,e]of vt)e()};X&&(X.style.cssText="position:absolute;padding:1px;top:0;left:0px",b(window,"load,resize,scroll",Jn,$));const F={top:0,right:1,bottom:2,left:3};function L(t,e,o,n){const i=F[o]??Number(o)??F.bottom;if(e===!1||!e.isConnected||!t.isConnected)return vt.delete(t);X?.isConnected||document.body.append(X||""),vt.has(t)||vt.set(t,()=>L(t,e,i,n));const s=e instanceof HTMLElement,{offsetWidth:r,offsetHeight:a}=t,u=s?e.offsetWidth:e.clientWidth,l=s?e.offsetHeight:e.clientHeight,{width:p,height:d,left:_,top:h}=e.getBoundingClientRect(),A=window.visualViewport?.width||window.innerWidth,St=window.visualViewport?.height||window.innerHeight,Z=window.pageXOffset||document.documentElement.scrollLeft,E=window.pageYOffset||document.documentElement.scrollTop,S=Math.round(_-(u-p)/2),v=Math.round(h-(l-d)/2),P=Math.min(Math.max(10,S-(r-u)/2),A-r-10),j=Math.min(Math.max(10,v-(a-l)/2),St-a-10),cs=S-r>0,ds=S+u+r<A,us=v-a>0,ps=v+l+a<St,hn=i===F.top||i===F.bottom,fs=i===F.right&&(n||ds)||!cs,vn=i===F.bottom&&(n||ps)||!us,ms=Math.round(hn?P:fs?S+u:S-r),hs=Math.round(hn?vn?v+l:v-a:j);t.style.position="absolute",t.style.left=`${ms+Z}px`,t.style.top=`${hs+E}px`,X?.style.setProperty("translate",`0px ${Math.round(vn?Z+v+l+a+30:0)}px`)}function Te(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 Rt=new WeakMap,V=(t,e,o)=>{const n=t.getElementsByClassName(e),i=Rt.get(t)||[];i.length||(Rt.set(t,i),Te((s,r)=>{if(t.isConnected&&i?.length)for(const a of i)a();else r?.disconnect(),Rt.delete(t)}).observe(t,{attributeFilter:["class","hidden"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>o(n))},C=t=>{if(!W)return;const e=()=>requestAnimationFrame(t);document.readyState==="complete"?e():b(window,"load",e)},Ht=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),xe="mattilsynet.matomo.cloud";let Bt=!0;function Zn(t,e={}){if(W){if(window._paq||(window._paq=[],window._paq.push(["HeatmapSessionRecording::disable"]),window._paq.push(["enableLinkTracking"]),window._paq.push(["setTrackerUrl",`https://${xe}/matomo.php`])),t==="init"){const{matomoId:o,enabled:n}=e;Bt=n??window.location.hostname==="localhost",window._paq.push(["setSiteId",o]),document.querySelector('script[src*="matomo.js"]')||document.head.append(Object.assign(document.createElement("script"),{async:!0,src:`https://cdn.matomo.cloud/${xe}/matomo.js`}))}if(Bt==="debug")return console.info(`Analytics: "${t}"`,e);if(Bt!==!1)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,r=["trackEvent",o,n,i,s];window._paq.push(r.filter(a=>a!==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 Ce="_alert_1run0_1 _ds-alert_im5h3_1",ke="_app_1run0_1",Ie="_sticky_1run0_1",Ae="_avatar_1run0_1 _ds-avatar_im5h3_1",Le="_badge_1run0_1",Me="_breadcrumbs_1run0_1 _ds-breadcrumbs_im5h3_1",Oe="_button_1run0_1 _ds-button_im5h3_1",De="_card_1run0_1",Pe="_group_1run0_1",Ne="_chip_1run0_1 _ds-chip_im5h3_1",Re="_details_1run0_1 _ds-details_im5h3_1",He="_dialog_1run0_1 _ds-dialog_im5h3_1",Be="_divider_1run0_1",Ue="_errorsummary_1run0_1 _ds-error-summary_im5h3_1",qe="__errorsummary_1run0_1",Fe="_field_1run0_1 _ds-field_im5h3_1",Ve="__datalist_1run0_1",Ye="_affixes_1run0_1 _ds-field-affixes_im5h3_1",je="_fieldset_1run0_1 _ds-fieldset_im5h3_1",Ke="_heading_1run0_1 _ds-heading_im5h3_1",We="_ingress_1run0_1",Xe="_muted_1run0_1",Ge="_info_1run0_1",ze="_prose_1run0_1",Qe="_helptext_1run0_1 _ds-focus_im5h3_1",Je="_input_1run0_1 _ds-input_im5h3_1",Ze="_grid_1run0_1",to="_flex_1run0_1",eo="_link_1run0_1",oo="_logo_1run0_1",no="_pagination_1run0_1 _ds-pagination_im5h3_1",io="_popover_1run0_1",so="_progress_1run0_1",ro="__indeterminate_1run0_1",ao="_skeleton_1run0_1 _ds-skeleton_im5h3_1",lo="__skeleton_1run0_1",co="_spinner_1run0_1",uo="_steps_1run0_1",po="_table_1run0_1 _ds-table_im5h3_1",fo="__scrollShadow_1run0_1",mo="_tabs_1run0_1 _ds-tabs_im5h3_1",ho="__scrollMask_1run0_1",vo="_tag_1run0_1 _ds-tag_im5h3_1",_o="_togglegroup_1run0_1",bo="__tooltip_1run0_1",go="_validation_1run0_1 _ds-validation-message_im5h3_1",yo="_body_1run0_153",wo="__checked_1run0_1",g={alert:Ce,app:ke,sticky:Ie,avatar:Ae,badge:Le,breadcrumbs:Me,button:Oe,card:De,group:Pe,chip:Ne,details:Re,dialog:He,divider:Be,errorsummary:Ue,_errorsummary:qe,field:Fe,_datalist:Ve,affixes:Ye,fieldset:je,heading:Ke,ingress:We,muted:Xe,info:Ge,prose:ze,helptext:Qe,input:Je,grid:Ze,flex:to,link:eo,logo:oo,pagination:no,popover:io,progress:so,_indeterminate:ro,skeleton:ao,_skeleton:lo,spinner:co,steps:uo,table:po,_scrollShadow:fo,tabs:mo,_scrollMask:ho,tag:vo,togglegroup:_o,_tooltip:bo,validation:go,body:yo,_checked:wo},ti=Object.freeze(Object.defineProperty({__proto__:null,_checked:wo,_datalist:Ve,_errorsummary:qe,_indeterminate:ro,_scrollMask:ho,_scrollShadow:fo,_skeleton:lo,_tooltip:bo,affixes:Ye,alert:Ce,app:ke,avatar:Ae,badge:Le,body:yo,breadcrumbs:Me,button:Oe,card:De,chip:Ne,default:g,details:Re,dialog:He,divider:Be,errorsummary:Ue,field:Fe,fieldset:je,flex:to,grid:Ze,group:Pe,heading:Ke,helptext:Qe,info:Ge,ingress:We,input:Je,link:eo,logo:oo,muted:Xe,pagination:no,popover:io,progress:so,prose:ze,skeleton:ao,spinner:co,steps:uo,sticky:Ie,table:po,tabs:mo,tag:vo,togglegroup:_o,validation:go},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 Eo=g.app.split(" ")[0],ei=g.sticky.split(" ")[0],oi='[data-command="toggle-app-expanded"]',Ut=`.${Eo} > dialog,.${Eo} dialog ~ main`,$o=t=>{document.startViewTransition?document.startViewTransition(t):t()},So=t=>$o(()=>window.mtdsToggleAppExpanded?.(t));function ni({target:t,defaultPrevented:e}){const o=t?.closest?.("a");if(o?.closest("dialog")&&o?.closest(Ut))return To();if(e||!(t instanceof HTMLButtonElement)||!t.matches(oi))return;getComputedStyle(t).position==="sticky"?So():$o(()=>{const i=document.querySelector(Ut);i?.setAttribute("data-closedby","any"),i?.showModal()})}function To(){document.querySelector(Ut)?.close()}let qt=0,Y,M=0,y,Ft=0,_t=0,Vt=!1,Yt=0,R=0;function ii([t]){y=t,xo()}function xo(){if(!y?.isConnected)return;const t=window.scrollY,e=t<R;R=t,e!==Y&&(qt=(y.parentElement?.getBoundingClientRect().top||0)+R,Y=e,Ft=y.offsetHeight,_t=y.getBoundingClientRect().top+R,Vt=y.offsetHeight<=window.innerHeight,Yt=window.innerHeight),!(M===-1&&Vt)&&(M!==-1&&(Vt||Y&&R<=_t)?(y.style.setProperty("--pos","sticky"),y.style.setProperty("--top","0px"),M=-1):M===-1&&!Y?(y.style.setProperty("--pos","relative"),y.style.setProperty("--top",`${Math.max(0,R-qt)}px`),M=0):M!==1&&!Y&&R+Yt>=_t+Ft?(y.style.setProperty("--pos","sticky"),y.style.setProperty("--top",`${Yt-Ft}px`),M=1):M===1&&Y&&(y.style.setProperty("--pos","relative"),y.style.setProperty("--top",`${_t-qt}px`),M=0))}C(()=>{V(document.documentElement,ei,ii),b(document,"click",ni,$),b(window,"resize",Xn(To,100),$),b(window,"scroll",xo,$)});const si=(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),r=Array.from({length:s+1-i},(a,u)=>u+i);return o>4&&i>1&&r.splice(0,2,1,0),o>3&&s<e&&r.splice(-2,2,0,e),r},ri=({current:t=1,total:e=10,show:o=7})=>({prev:t>1?t-1:0,next:t<e?t+1:0,pages:si(t,e,o).map((n,i)=>({current:n===t&&"page",key:`key-${n}-${i}`,page:n}))}),ai=g.breadcrumbs.split(" ")[0];function li(t){for(const e of t)e.querySelectorAll("li a").forEach((o,n,{length:i})=>{c(o,"aria-current",n===i-1?"page":null)})}C(()=>V(document.documentElement,ai,li));const ci=g.dialog.split(" ")[0],di=W?document.getElementsByClassName(ci):[],ui=()=>{for(const t of di)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()))},pi=({clientX:t,clientY:e,target:o})=>{const n=o?.closest?.("dialog");if(n){if(o.closest('[data-command="close"]'))return n.close();if(c(n,"data-closedby")==="any"){const{top:i,right:s,bottom:r,left:a}=n.getBoundingClientRect();i<=e&&e<=r&&a<=t&&t<=s||n.close()}}};C(()=>{b(document,"click",pi,$),Te(ui).observe(document.documentElement,{attributeFilter:["open"],attributes:!0,childList:!0,subtree:!0})});function fi(t){if(t.animationName!==g._errorsummary)return;const e=t.target?.firstElementChild;e instanceof HTMLHeadingElement&&(c(e,"tabindex","-1"),e.focus())}C(()=>b(document,"animationend",fi,$));var mi=Object.defineProperty,Co=Object.getOwnPropertySymbols,hi=Object.prototype.hasOwnProperty,vi=Object.prototype.propertyIsEnumerable,ko=(t,e,o)=>e in t?mi(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,_i=(t,e)=>{for(var o in e||(e={}))hi.call(e,o)&&ko(t,o,e[o]);if(Co)for(var o of Co(e))vi.call(e,o)&&ko(t,o,e[o]);return t},G=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",bt=G&&/android/i.test(navigator.userAgent),jt=G&&/iPad|iPhone|iPod/.test(navigator.userAgent),Io;G&&/^Mac/i.test(((Io=navigator.userAgentData)==null?void 0:Io.platform)||navigator.platform);var bi=`${bt?"data":"aria"}-labelledby`,gi=":host(:not([hidden])) { display: block }",yi="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",Ao=typeof HTMLElement>"u"?class{}:HTMLElement;function m(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 Lo=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},z=(t,...e)=>Lo("add",t,e),gt=(t,...e)=>Lo("remove",t,e),wi=(t,e)=>t.attachShadow({mode:"open"}).append(Xt("slot"),Xt("style",e)),yt=new WeakMap,Kt=(t,e)=>{if(e===void 0)return yt.get(t);try{yt.get(t).disconnect(),yt.delete(t)}catch{}if(e){const o=new MutationObserver(n=>t.handleEvent({type:"mutation",detail:n}));o.observe(t,e),yt.set(t,o)}},Mo=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},Ei=0,Wt=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++Ei).toString(32)}`),t.id):"",Xt=(t,e,o)=>{const n=document.createElement(t);return e&&(n.textContent=e),n},Oo={define:(t,e)=>!G||window.customElements.get(t)||window.customElements.define(t,e)},H,$i=0,Do=t=>{H||(H=Xt("div"),H.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",m(H,"aria-live","assertive")),H.isConnected||document.body.append(H),t&&(H.textContent=`${t}${$i++%2?" ":""}`)},Si=(t,e,o="")=>{var n,i;const s={bubbles:!0,composed:!0,data:e,inputType:o},r=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(n=Object.getOwnPropertyDescriptor(r,"value"))==null?void 0:n.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},Gt=!1,zt=t=>(t?.type==="mouseup"&&(Gt=!1),t?.type==="mousedown"&&(Gt=!0,z(document,"mouseup",zt,{once:!0})),Gt),Qt="disabled",Q="selected",Ti=class extends Ao{static get observedAttributes(){return[Qt,Q]}connectedCallback(){jt||(this.tabIndex=-1),this.hasAttribute("role")||m(this,"role","option"),this.attributeChangedCallback()}attributeChangedCallback(){m(this,"aria-disabled",`${this.disabled}`),m(this,"aria-selected",`${this.selected}`)}get defaultSelected(){return this[Q]}set defaultSelected(t){this[Q]=t}get disabled(){return m(this,Qt)!==null}set disabled(t){m(this,Qt,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=m(this,"label"))!=null?t:this.text}set label(t){m(this,"label",t)}get selected(){return m(this,Q)!==null}set selected(t){m(this,Q,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=m(this,"value"))!=null?t:this.text}set value(t){m(this,"value",t)}};Oo.define("u-option",Ti);var Po,No=0,xi=jt||bt,Ro="click,focusout,input,keydown,mousedown,mouseup",Ho="focus,focusin,blur,focusout",wt={singular:"%d hit",plural:"%d hits"},Bo=class extends Ao{constructor(){super(),this._texts=_i({},wt),this._value="",wi(this,`${gi}
|
|
9
9
|
::slotted(u-option) { display: block; cursor: pointer }
|
|
10
|
-
::slotted(u-option:focus) { ${
|
|
10
|
+
::slotted(u-option:focus) { ${yi} }
|
|
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=In(this),f(this,"role","listbox"),f(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(){_t(this._root||this,"focus",this,!0),_t(this._root||this,"focusin",this),Ft(this,!1),Xt(this),this._root=void 0}attributeChangedCallback(t,e,n){const o=t?.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(gt[o])this._texts[o]=n||gt[o];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:n}=t;t.defaultPrevented||(n==="click"&&xi(this,t),(n==="focus"||n==="focusin")&&Si(this,t),(n==="blur"||n==="focusout")&&Ti(this,t),n==="keydown"&&Ci(this,t),n==="mousedown"&&this.contains(e)&&Kt(t),(n==="mutation"||n==="input")&&(clearTimeout(On),On=setTimeout(Rn,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},Q=(t,e)=>{var n,o;t.hidden===e&&(t.hidden=!e,(n=Ft(t))==null||n.takeRecords(),t._input&&Gt(t,t._input,e),t.popover&&((o=t._input)!=null&&o.isConnected)&&(f(t,"popover","manual"),t.togglePopover(e)),e&&Rn(t))},Xt=t=>{t._input&&(_t(t._input||t,Dn,t),_t(t._root||t,Pn,t),Q(t,!1),t._input=void 0)},Gt=(t,e,n=!1)=>{t.popover&&f(e,"popovertarget",Vt(t)),G(e,Dn,t,!0),f(e,"aria-autocomplete","list"),f(e,"aria-controls",Vt(t)),f(e,"aria-expanded",`${$i?n:"true"}`),f(e,"autocomplete","off"),f(e,"role","combobox")},Si=(t,e)=>{var n;const o=e.target instanceof HTMLInputElement;o&&e.isTrusted&&e.stopImmediatePropagation(),t._input!==e.target&&o&&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})),f(t,mi,Vt((n=t._input.labels)==null?void 0:n[0])),G(t._root||t,Pn,t),Q(t,!0),An())},Ti=(t,e)=>{!vt&&!Kt()&&t._input&&setTimeout(Hn,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},Hn=t=>{var e;const n=((e=t._root)==null?void 0:e.activeElement)||null,o=t._input;o&&o!==n&&!t.contains(n)&&(o.dispatchEvent(new FocusEvent("blur",{relatedTarget:n})),o.dispatchEvent(new FocusEvent("focusout",{bubbles:!0,relatedTarget:n})),Xt(t))},xi=(t,{target:e})=>{var n;if(!t._input||t._input===e)return Q(t,!0);for(const o of t.options)if(o.contains(e))return f(t,"aria-multiselectable")!=="true"&&((n=t._input)==null||n.focus(),Q(t,!1)),wi(t._input,o.value);vt&&Hn(t)},Ci=(t,e)=>{var n;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey||e.key==="Tab")return;Q(t,e.key!=="Escape");const{key:o,target:i}=e,s=[...t.options].filter(d=>f(d,"aria-hidden")!=="true"&&d.offsetHeight),r=s.indexOf(i);let a=-1;if(o==="ArrowDown"&&(a=(r+1)%s.length),o==="ArrowUp"&&(a=(~r?r:s.length)-1),~r&&((o==="Home"||o==="PageUp")&&(a=0),(o==="End"||o==="PageDown")&&(a=s.length-1),o==="Enter"))return s[r].click(),e.preventDefault();if(s[a])for(const d of s)d.tabIndex=-1;s[a]&&e.preventDefault(),(n=s[a]||t._input)==null||n.focus()},Rn=(t,e)=>{const{_texts:n,_root:o,_input:i,options:s}=t,r=i?.value.toLowerCase().trim()||"",a=!t.hasAttribute("data-nofilter"),d=[],l=[];for(const u of s)(u.disabled||u.hidden||a&&!u.label.toLowerCase().includes(r)?d:l).push(u);for(const u of d)f(u,"aria-hidden","true");for(const u of l)f(u,"aria-hidden","false");const h=l.length;clearTimeout(Mn),e?.type==="input"&&r!==t._value&&(Mn=setTimeout(()=>{const u=`${!h&&t.innerText.trim()||`${n[h===1?"singular":"plural"]}`.replace("%d",`${h}`)}`;!t.hidden&&o?.activeElement===i&&An(u),t._value=r},1e3)),qt&&l.forEach((u,T)=>f(u,"title",`${T+1}/${h}`))};X&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return In(this).getElementById(f(this,"list")||"")}}),Ln.define("u-datalist",Nn);const zt=_.field.split(" ")[0],Bn=_.validation.split(" "),ki=Bn[0],C=(t,e)=>t.getPropertyValue(`--mtds-text-${e}`)?.slice(1,-1)||"";function Un(t,e){for(const n of t)if(n.isConnected){const o=[],i=[],s=[];let r=null,a=null,d=!0;for(const l of n.getElementsByTagName("*"))l instanceof HTMLLabelElement?o.push(l):l instanceof ut?r=l:Dt(l)&&!l.hidden?a=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(a){for(const l of o)l.htmlFor=Ot(a);if(e&&c(n,"data-validation")==="form"){d=a.matches(":valid");for(const l of s)c(l,"hidden",d?"":null)}Ii(r),Fn(a),qn(a),c(a,"aria-describedby",i.map(Ot).join(" ")||null),c(a,"aria-invalid",`${!d}`)}}}function qn(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 Fn(t){const e=t?.nextElementSibling,n=e&&c(e,"data-count");if(e&&n){const o=Number(n)-t.value.length,i=o<0,s=c(e,"aria-live")==="polite",r=window.getComputedStyle(e||t),a=C(r,"count-over"),d=C(r,"count-under");if(s!==i){c(e,"aria-live",i?"polite":"off");for(const l of Bn)e.classList.toggle(l,i)}e.textContent=(i?a:d).replace("%d",`${Math.abs(o)}`)}}function Li({target:t,newState:e}){if(t instanceof Nn){const o=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?P(t,!1):o&&(t.style.width=`${o.clientWidth}px`,P(t,o,c(t,"data-position")??"bottom",!0))}}function Ai({target:t}){Dt(t)&&(Fn(t),qn(t))}function Mi(t){const e=t.target?.closest?.(`.${zt}`);t.type==="invalid"&&e&&t.preventDefault(),Un(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(()=>{V(document.documentElement,zt,Un),v(document,"beforechange",Oi,E),v(document,"input",Ai,E),v(document,"invalid,submit",Mi,!0),v(document,"toggle",Li,E)});const Pi=_.fieldset.split(" ")[0],Di=_.validation.split(" ")[0],Vn="aria-describedby",Ni="aria-invalid";function Hi(t){requestAnimationFrame(()=>{for(const e of t)if(e.isConnected){const n=[];let o=null,i=!0;for(const s of e.getElementsByTagName("*"))s.classList.contains(Di)?(i=c(s,"data-color")==="success"||!s.clientHeight,o=Ot(s)):Dt(s)&&n.push(s);for(const s of n){const r=c(s,Vn)?.replace(o||"#","");c(s,Vn,`${o||""} ${r||""}`.trim()),c(s,Ni,`${!i}`)}}})}x(()=>V(document.documentElement,Pi,Hi));const Ri=_.logo.split(" ")[0];function Bi([t]){if(t?.isConnected&&t?.firstElementChild instanceof SVGSVGElement){for(const a of document.head.querySelectorAll("link[rel~='icon']"))a.setAttribute("rel","disabled");const e=t.firstElementChild,n=t?.hasAttribute("data-env"),o=window.getComputedStyle(e),i=o.getPropertyValue("color"),s=o.getPropertyValue("--mtds-logo-color"),r=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='${n?"none":s}' width='51' height='51' x='2' y='2' stroke='${i}' stroke-dasharray='0.09 6.38' stroke-linecap='round' stroke-opacity='${n?.6:0}' stroke-width='2.3' rx='25.5'/><g transform="translate(7.5 7.5)">${r}</g></svg>`)}`,rel:"icon"}))}}x(()=>V(document.documentElement,Ri,Bi));const Yn=_.popover.split(" ")[0];let Qt=0;function Ui({target:t,newState:e}){if(t instanceof HTMLElement&&t.classList.contains(Yn)){const n=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?(Qt-=1,P(t,!1)):n&&(Qt+=1,P(t,n,c(t,"data-position")||"bottom"))}}function qi({target:t}){const e=Qt&&t?.closest?.("a,[popovertargetaction]");if(e){const n=c(e,"popovertargetaction")||"toggle",o=n==="show"||(n==="hide"?!1:void 0),s=(document.getElementById(c(e,"popovertarget")||"")||e).closest(`.${Yn}`);s?.isConnected&&s?.togglePopover&&s.togglePopover(o)}}x(()=>{v(document,"toggle",Ui,E),v(document,"click",qi)});const Fi=_.table.split(" ")[0];function Vi(t){for(const e of t){const n=[];c(e,"role","table"),e.caption&&c(e.caption,"role","caption");for(const o of[e.tHead,e.tFoot,...e.tBodies])if(o){c(o,"role","rowgroup");const i=o.nodeName==="TBODY";for(const s of o.rows){c(s,"role","row");for(const r of s.cells)i?c(r,"data-th",n[r.cellIndex]||":empty"):n.push(r.innerText.trim()),r.nodeName==="TD"?c(r,"role","cell"):(c(r,"role",i?"rowheader":"columnheader"),c(r,"scope",i?"row":"col"))}}}}x(()=>V(document.documentElement,Fi,Vi));const Yi=`.${_.togglegroup.split(" ")[0]}`;function ji(t){const{key:e,target:n}=t,o=n instanceof HTMLInputElement&&n.closest(Yi);if(o&&(e==="Enter"&&n.click(),e?.startsWith("Arrow"))){t.preventDefault();const i=o.getElementsByTagName("input"),s=[...i].indexOf(n),r=e.match(/Arrow(Right|Down)/)?1:-1;i[(i.length+s+r)%i.length]?.focus()}}x(()=>v(document,"keydown",ji));const jn="aria-describedby",Kn="Escape",yt="aria-labelledby",Ki="--mtds-tooltip-position",Wi=300,L=K?Object.assign(document.createElement("div"),{className:_._tooltip,id:"mtds-tooltip",popover:"manual"}):null;let R=null,Wn=Number.NEGATIVE_INFINITY,Xn=0;function Jt({target:t,type:e,key:n}){if(e==="keydown"&&n!==Kn)return;const o=Wn+Wi-Date.now();clearTimeout(Xn),Xn=setTimeout(Xi,Math.max(o,0),n===Kn?null:t)}function Xi(t){if(Wn=Date.now(),!L||t===L)return;L?.isConnected||document.body.append(L);let e=t?.closest?.("[data-tooltip]")||null;if(e===R)return;const n=e&&c(e,"data-tooltip")||"",o=e&&c(e,"data-tooltip-position")||window.getComputedStyle(e||document.body).getPropertyValue(Ki)?.trim()||"top";(!n||n==="false"||n==="true"||o==="none")&&(e=null),e&&(L.textContent=n);const s=R&&c(R,yt)===L?.id,r=(e instanceof HTMLElement?e.innerText:e?.textContent)?.trim()||e?.hasAttribute(yt)||e?.hasAttribute("aria-label");R?.removeAttribute(s?yt:jn),P(L,!1),R=e,R&&c(R,r?jn:yt,L?.id),L.togglePopover(!!e),P(L,e||!1,o)}x(()=>{v(document,"blur,focus,mouseout,mouseover",Jt,E),v(window,"keydown",Jt,E),v(window,"blur",Jt,E)});var Gn=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",zn;Gn&&/^Mac/i.test(((zn=navigator.userAgentData)==null?void 0:zn.platform)||navigator.platform);var Gi=":host(:not([hidden])) { display: block }",Qn=typeof HTMLElement>"u"?class{}:HTMLElement;function B(t,e,n){var o;return n===void 0?(o=t.getAttribute(e))!=null?o:null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var Jn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Zn=(t,...e)=>Jn("add",t,e),to=(t,...e)=>Jn("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 n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},Zt=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))B(o,i,s);return o},eo={define:(t,e)=>!Gn||window.customElements.get(t)||window.customElements.define(t,e)},Ji=class extends Qn{constructor(){super(),this._content=null,this.attachShadow({mode:"open"}).append(Zt("slot",null,{name:"summary"}),Zt("slot",null,{part:"details-content"}),Zt("style",`${Gi}
|
|
13
|
+
::slotted(u-option[hidden]) { display: none !important }`)}static get observedAttributes(){return["id",...Object.keys(wt).map(t=>`data-sr-${t}`)]}connectedCallback(){this.hidden=!0,this._root=Mo(this),m(this,"role","listbox"),m(this,"tabindex","-1"),z(this._root,"focusin",this),z(this._root,"focus",this,!0),Kt(this,{attributeFilter:["disabled","hidden","label","value"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){gt(this._root||this,"focus",this,!0),gt(this._root||this,"focusin",this),Kt(this,!1),Jt(this),this._root=void 0}attributeChangedCallback(t,e,o){const n=t?.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(wt[n])this._texts[n]=o||wt[n];else if(this._root){this._input&&Zt(this,this._input);for(const s of this._root.querySelectorAll(i))Zt(this,s)}}handleEvent(t){const{target:e,type:o}=t;t.defaultPrevented||(o==="click"&&Ii(this,t),(o==="focus"||o==="focusin")&&Ci(this,t),(o==="blur"||o==="focusout")&&ki(this,t),o==="keydown"&&Ai(this,t),o==="mousedown"&&this.contains(e)&&zt(t),(o==="mutation"||o==="input")&&(clearTimeout(No),No=setTimeout(Fo,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},Uo=t=>t?.disabled||t?.readOnly||!1,J=(t,e)=>{var o,n,i;if(t.hidden!==e)return;t.hidden=Uo(t?._input)||!e,(o=Kt(t))==null||o.takeRecords();const s=t.isConnected&&t.popover&&((n=t._input)==null?void 0:n.isConnected)&&((i=t._input)==null?void 0:i.popoverTargetElement)===t;t._input&&Zt(t,t._input,e),s&&m(t,"popover","manual"),s&&t.togglePopover(e),e&&Fo(t)},Jt=t=>{t._input&&(gt(t._input||t,Ho,t),gt(t._root||t,Ro,t),J(t,!1),t._input=void 0)},Zt=(t,e,o=!1)=>{t.popover&&m(e,"popovertarget",Wt(t)),z(e,Ho,t,!0),m(e,"aria-autocomplete","list"),m(e,"aria-controls",Wt(t)),m(e,"aria-expanded",`${!xi||o}`),m(e,"autocomplete","off"),m(e,"role",Uo(e)?null:"combobox")},Ci=(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&&Jt(t),t._input=e.target,t._input.dispatchEvent(new FocusEvent("focus")),t._input.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),m(t,bi,Wt((o=t._input.labels)==null?void 0:o[0])),z(t._root||t,Ro,t),J(t,m(t._input,"inputmode")!=="none"),Do())},ki=(t,e)=>{!bt&&!zt()&&t._input&&setTimeout(qo,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},qo=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})),Jt(t))},Ii=(t,{target:e})=>{var o;if(!t._input||t._input===e)return J(t,!0);for(const n of t.options)if(n.contains(e))return m(t,"aria-multiselectable")!=="true"&&((o=t._input)==null||o.focus(),J(t,!1)),Si(t._input,n.value);bt&&qo(t)},Ai=(t,e)=>{var o;const{key:n,target:i,altKey:s,ctrlKey:r,shiftKey:a,metaKey:u}=e,l=n==="Escape"||n==="Esc";if(s||r||u||a||n==="Tab")return;l&&!t.hidden&&e?.preventDefault(),J(t,!l);const p=[...t.options].filter(h=>m(h,"aria-hidden")!=="true"&&h.offsetHeight),d=p.indexOf(i);let _=-1;if(n==="ArrowDown"&&(_=(d+1)%p.length),n==="ArrowUp"&&(_=(~d?d:p.length)-1),~d&&((n==="Home"||n==="PageUp")&&(_=0),(n==="End"||n==="PageDown")&&(_=p.length-1),n==="Enter"))return p[d].click(),e.preventDefault();if(p[_])for(const h of p)h.tabIndex=-1;p[_]&&e.preventDefault(),(o=p[_]||t._input)==null||o.focus(),!p[_]&&n==="ArrowUp"&&setTimeout(()=>{var h;return(h=t._input)==null?void 0:h.setSelectionRange(999,999)})},Fo=(t,e)=>{const{_texts:o,_root:n,_input:i,options:s}=t,r=i?.value.toLowerCase().trim()||"",a=!t.hasAttribute("data-nofilter"),u=[],l=[];for(const d of s)(d.disabled||d.hidden||a&&!d.label.toLowerCase().includes(r)?u:l).push(d);for(const d of u)m(d,"aria-hidden","true");for(const d of l)m(d,"aria-hidden","false");const p=l.length;clearTimeout(Po),e?.type==="input"&&r!==t._value&&(Po=setTimeout(()=>{const d=`${!p&&t.innerText.trim()||`${o[p===1?"singular":"plural"]}`.replace("%d",`${p}`)}`;!t.hidden&&n?.activeElement===i&&Do(d),t._value=r},1e3)),jt&&l.forEach((d,_)=>m(d,"title",`${_+1}/${p}`))};G&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return Mo(this).getElementById(m(this,"list")||"")}}),Oo.define("u-datalist",Bo);const te=g.field.split(" ")[0],Vo=g.validation.split(" "),Li=Vo[0],k=(t,e)=>t.getPropertyValue(`--mtds-text-${e}`)?.slice(1,-1)||"";function Yo(t,e){for(const o of t)if(o.isConnected){const n=[],i=[],s=[];let r=null,a=null,u=!0;for(const l of o.getElementsByTagName("*"))l instanceof HTMLLabelElement?n.push(l):l instanceof st?r=l:Ht(l)&&!l.hidden?a=l:l.hasAttribute("data-description")?i.push(l):l.classList.contains(Li)?(u=c(l,"data-color")==="success"||!l.clientHeight,s.push(l),i.unshift(l)):l instanceof HTMLParagraphElement&&(i.some(p=>p.contains(l))||i.push(l));if(a){for(const l of n)l.htmlFor=ht(a);if(e&&c(o,"data-validation")==="form"){u=a.matches(":valid");for(const l of s)c(l,"hidden",u?"":null)}Mi(r),Ko(a),jo(a),c(a,"aria-describedby",i.map(ht).join(" ")||null),c(a,"aria-invalid",`${!u}`)}}}function jo(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function Mi(t){const{control:e,list:o}=t||{};if(t&&o&&e&&!t.hasAttribute("data-sr-added")){const n=window.getComputedStyle(t);c(t,"data-sr-added",k(n,"combobox-added")),c(t,"data-sr-empty",k(n,"combobox-empty")),c(t,"data-sr-found",k(n,"combobox-found")),c(t,"data-sr-invalid",k(n,"combobox-invalid")),c(t,"data-sr-of",k(n,"combobox-of")),c(t,"data-sr-remove",k(n,"combobox-remove")),c(t,"data-sr-removed",k(n,"combobox-removed")),c(o,"data-sr-plural",k(n,"datalist-plural")),c(o,"data-sr-singular",k(n,"datalist-singular")),c(o,"popover","manual"),c(e,"popovertarget",ht(o))}}function Ko(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",r=window.getComputedStyle(e||t),a=k(r,"count-over"),u=k(r,"count-under");if(s!==i){c(e,"aria-live",i?"polite":"off");for(const l of Vo)e.classList.toggle(l,i)}e.textContent=(i?a:u).replace("%d",`${Math.abs(n)}`)}}function Oi({target:t,newState:e}){if(t instanceof Bo){const n=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?L(t,!1):n&&(t.style.width=`${n.clientWidth}px`,L(t,n,c(t,"data-position")??"bottom",!0))}}function Di({target:t}){if(Ht(t)){Ko(t),jo(t);const e=t.hasAttribute("list")&&t.list;e&&setTimeout(()=>{L(e,t,c(e,"data-position")??"bottom",!0)},10)}}function Pi(t){const e=t.target?.closest?.(`.${te}`);t.type==="invalid"&&e&&t.preventDefault(),Yo(document.getElementsByClassName(te),!0)}function Ni({target:t}){const e=t instanceof st&&t.list;e&&!e?.hidden&&setTimeout(()=>L(e,t,2,!0),10)}C(()=>{V(document.documentElement,te,Yo),b(document,"comboboxbeforeselect",Ni,$),b(document,"input",Di,$),b(document,"invalid,submit",Pi,!0),b(document,"toggle",Oi,$)});const Ri=g.fieldset.split(" ")[0],Hi=g.validation.split(" ")[0],Wo="aria-describedby",Bi="aria-invalid";function Ui(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(Hi)?(i=c(s,"data-color")==="success"||!s.clientHeight,n=ht(s)):Ht(s)&&o.push(s);for(const s of o){const r=c(s,Wo)?.replace(n||"#","");c(s,Wo,`${n||""} ${r||""}`.trim()),c(s,Bi,`${!i}`)}}})}C(()=>V(document.documentElement,Ri,Ui));const qi=g.logo.split(" ")[0];function Fi([t]){if(t?.isConnected&&t?.firstElementChild instanceof SVGSVGElement){for(const a of document.head.querySelectorAll("link[rel~='icon']"))a.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"),r=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)">${r}</g></svg>`)}`,rel:"icon"}))}}C(()=>V(document.documentElement,qi,Fi));const Xo=g.popover.split(" ")[0];let ee=0;function Vi({target:t,newState:e}){if(t instanceof HTMLElement&&t.classList.contains(Xo)){const o=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?(ee-=1,L(t,!1)):o&&(ee+=1,L(t,o,c(t,"data-position")||"bottom"))}}function Yi({target:t}){const e=ee&&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(`.${Xo}`);s?.isConnected&&s?.togglePopover&&s.togglePopover(n)}}C(()=>{b(document,"toggle",Vi,$),b(document,"click",Yi)});const ji=g.table.split(" ")[0];function Ki(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 r of s.cells)i?c(r,"data-th",o[r.cellIndex]||":empty"):o.push(r.innerText.trim()),r.nodeName==="TD"?c(r,"role","cell"):(c(r,"role",i?"rowheader":"columnheader"),c(r,"scope",i?"row":"col"))}}}}C(()=>V(document.documentElement,ji,Ki));const Wi=`.${g.togglegroup.split(" ")[0]}`;function Xi(t){const{key:e,target:o}=t,n=o instanceof HTMLInputElement&&o.closest(Wi);if(n&&(e==="Enter"&&o.click(),e?.startsWith("Arrow"))){t.preventDefault();const i=n.getElementsByTagName("input"),s=[...i].indexOf(o),r=e.match(/Arrow(Right|Down)/)?1:-1;i[(i.length+s+r)%i.length]?.focus()}}C(()=>b(document,"keydown",Xi));const Go="aria-describedby",zo="Escape",Et="aria-labelledby",Gi="--mtds-tooltip-position",zi=300,I=W?Object.assign(document.createElement("div"),{className:g._tooltip,id:"mtds-tooltip",popover:"manual"}):null;let D=null,Qo=Number.NEGATIVE_INFINITY,Jo=0;function oe({target:t,type:e,key:o}){if(e==="keydown"&&o!==zo)return;const n=Qo+zi-Date.now();clearTimeout(Jo),Jo=setTimeout(Qi,Math.max(n,0),o===zo?null:t)}function Qi(t){if(Qo=Date.now(),!I||t===I)return;I?.isConnected||document.body.append(I);let e=t?.closest?.("[data-tooltip]")||null;if(e===D)return;const o=e&&c(e,"data-tooltip")||"",n=e&&c(e,"data-tooltip-position")||window.getComputedStyle(e||document.body).getPropertyValue(Gi)?.trim()||"top";(!o||o==="false"||o==="true"||n==="none")&&(e=null),e&&(I.textContent=o);const s=D&&c(D,Et)===I?.id,r=(e instanceof HTMLElement?e.innerText:e?.textContent)?.trim()||e?.hasAttribute(Et)||e?.hasAttribute("aria-label");D?.removeAttribute(s?Et:Go),L(I,!1),D=e,D&&c(D,r?Go:Et,I?.id),D&&I.hidePopover(),I.togglePopover(!!e),L(I,e||!1,n)}C(()=>{b(document,"blur,focus,mouseout,mouseover",oe,$),b(window,"keydown",oe,$),b(window,"blur",oe,$)});var Zo=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",tn;Zo&&/^Mac/i.test(((tn=navigator.userAgentData)==null?void 0:tn.platform)||navigator.platform);var Ji=":host(:not([hidden])) { display: block }",en=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 on=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},nn=(t,...e)=>on("add",t,e),sn=(t,...e)=>on("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},ts=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},ne=(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},rn={define:(t,e)=>!Zo||window.customElements.get(t)||window.customElements.define(t,e)},es=class extends en{constructor(){super(),this._content=null,this.attachShadow({mode:"open"}).append(ne("slot",null,{name:"summary"}),ne("slot",null,{part:"details-content"}),ne("style",`${Ji}
|
|
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],
|
|
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],nn(this._content,"beforematch",this),nn(this,"click,keydown",this),this.attributeChangedCallback()}disconnectedCallback(){this._content&&sn(this._content,"beforematch",this),sn(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=ts(this).querySelectorAll(`${this.nodeName}[name="${this.name}"]`);for(const r of s)r!==this&&(r.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)}},os=class extends en{connectedCallback(){B(this,"role","button"),this.slot="summary",this.tabIndex=0}};rn.define("u-details",es),rn.define("u-summary",os);var $t=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",an=$t&&/firefox/i.test(navigator.userAgent),ns=$t&&/iPad|iPhone|iPod/.test(navigator.userAgent),ln;$t&&/^Mac/i.test(((ln=navigator.userAgentData)==null?void 0:ln.platform)||navigator.platform);var is=typeof HTMLElement>"u"?class{}:HTMLElement;function w(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 cn=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},ss=0,rs=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++ss).toString(32)}`),t.id):"",dn=(t,e,o)=>{const n=document.createElement(t);if(e&&(n.textContent=e),o)for(const[i,s]of Object.entries(o))w(n,i,s);return n},as={define:(t,e)=>!$t||window.customElements.get(t)||window.customElements.define(t,e)},ls=t=>{var e;const o=cn(t),n=w(t,"aria-label")||"";return[...(((e=w(t,"aria-labelledby"))==null?void 0:e.trim().split(/\s+/))||[]).map(s=>o?.querySelector(`[id="${s}"]`)),...Array.from(t.labels||[])].reduce((s,r)=>{var a;return s||((a=r?.innerText)==null?void 0:a.trim())||""},n)},ie=!1,un=class extends is{static get observedAttributes(){return["aria-label","aria-labelledby","value","max"]}constructor(){super(),this.attachShadow({mode:"open"}).append(dn("slot",null,{hidden:""}),dn("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(
|
|
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+IHtcblx0cmVzdC5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcgPSB0cnVlOyAvLyBNYWtlIE5leHQuanMgaGFwcHlcblx0aWYgKGNsYXNzTmFtZSB8fCBrbGFzcykgcmVzdC5jbGFzcyA9IGNsc3goa2xhc3MsIGNsYXNzTmFtZSB8fCBcIlwiKTsgLy8gVXNlIGNsYXNzIGluc3RlYWQgb2YgY2xhc3NOYW1lXG5cdGlmIChoaWRkZW4pIHJlc3QuaGlkZGVuID0gdHJ1ZTsgLy8gRW5zdXJlIGJvb2xlYW4gcHJvcCBiZWhhdmlvdXJcblx0aWYgKG9wZW4pIHJlc3Qub3BlbiA9IHRydWU7IC8vIEVuc3VyZSBib29sZWFuIHByb3AgYmVoYXZpb3VyXG5cdHJldHVybiByZXN0O1xufTtcbiIsImltcG9ydCB7IElTX0JST1dTRVIgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgTUFUT01PID0gXCJtYXR0aWxzeW5ldC5tYXRvbW8uY2xvdWRcIjtcbmxldCBFTkFCTEVEOiBBbmFseXRpY3NBY3Rpb25zW1wiaW5pdFwiXVtcImVuYWJsZWRcIl0gPSB0cnVlO1xuXG50eXBlIE1hdG9tbyA9IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuKVtdO1xuZGVjbGFyZSBnbG9iYWwge1xuXHRpbnRlcmZhY2UgV2luZG93IHtcblx0XHRfcGFxPzogTWF0b21vW107XG5cdFx0X210bT86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj5bXTtcblx0fVxufVxuXG4vLyB3aW5kb3cuX3BhcSA9IHdpbmRvdy5fcGFxIHx8IFtdO1xuLy8gd2luZG93Ll9tdG0gPSB3aW5kb3cuX210bSB8fCBbXTtcblxuLy8gd2luZG93Ll9wYXEucHVzaChbXCJzZXRDdXN0b21VcmxcIiwgYCR7ZG9jdW1lbnQubG9jYXRpb24uaHJlZn0mZWlyaWtgXSk7XG4vLyB3aW5kb3cuX3BhcS5wdXNoKFtcInNldERvY3VtZW50VGl0bGVcIiwgXCJFaXJpayAzXCJdKTtcbi8vIHdpbmRvdy5fbXRtLnB1c2goe1xuLy8gXHRldmVudDogXCJtdG0uU3RhcnRcIixcbi8vIFx0XCJtdG0uc3RhcnRUaW1lXCI6IG5ldyBEYXRlKCkuZ2V0VGltZSgpLFxuLy8gXHRjdXN0b21UaXRsZTogXCJFaXJpayAxXCIsXG4vLyBcdGN1c3RvbVVybDogYCR7ZG9jdW1lbnQubG9jYXRpb24uaHJlZn0mZWlyaWtgLFxuLy8gfSk7XG5cbi8vIHdpbmRvdy5fbXRtLnB1c2goe1xuLy8gXHRldmVudDogXCJtdG0uUGFnZVZpZXdcIixcbi8vIFx0Y3VzdG9tVGl0bGU6IFwiRWlyaWsgMlwiLFxuLy8gXHRjdXN0b21Vcmw6IGAke2RvY3VtZW50LmxvY2F0aW9uLmhyZWZ9JmVpcmlrYCxcbi8vIH0pO1xuXG4vLyBjb25zdCBjb250YWluZXJJZCA9IFwiQTl1dEtrM09cIjtcblxuLy8gZG9jdW1lbnQuaGVhZC5hcHBlbmQoXG4vLyBcdE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSwge1xuLy8gXHRcdHNyYzogYGh0dHBzOi8vY2RuLm1hdG9tby5jbG91ZC9tYXR0aWxzeW5ldC5tYXRvbW8uY2xvdWQvY29udGFpbmVyXyR7Y29udGFpbmVySWR9LmpzYCxcbi8vIFx0XHRhc3luYzogdHJ1ZSxcbi8vIFx0XHRvbmxvYWQ6ICgpID0+IGNvbnNvbGUubG9nKHdpbmRvdy5fcGFxKSxcbi8vIFx0fSksXG4vLyApO1xuXG5leHBvcnQgdHlwZSBBbmFseXRpY3NBY3Rpb25zID0ge1xuXHRpbml0OiB7XG5cdFx0bWF0b21vSWQ6IG51bWJlciB8IHN0cmluZztcblx0XHRlbmFibGVkPzogYm9vbGVhbiB8IFwiZGVidWdcIjtcblx0fTtcblx0cGFnZXZpZXc6IHtcblx0XHR1cmw/OiBzdHJpbmc7XG5cdFx0dGl0bGU/OiBzdHJpbmc7XG5cdH07XG5cdGV2ZW50OiB7XG5cdFx0Y2F0ZWdvcnk6IHN0cmluZztcblx0XHRhY3Rpb246IHN0cmluZztcblx0XHRuYW1lPzogc3RyaW5nO1xuXHRcdHZhbHVlPzogbnVtYmVyO1xuXHR9O1xuXHRzZWFyY2g6IHtcblx0XHRxdWVyeTogc3RyaW5nO1xuXHRcdGNhdGVnb3J5Pzogc3RyaW5nO1xuXHRcdHJlc3VsdHM/OiBudW1iZXI7XG5cdH07XG5cdG1hdG9tbzogTWF0b21vO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFuYWx5dGljczxBY3Rpb24gZXh0ZW5kcyBrZXlvZiBBbmFseXRpY3NBY3Rpb25zPihcblx0YWN0aW9uOiBBY3Rpb24sXG5cdGFyZ3MgPSB7fSBhcyBBbmFseXRpY3NBY3Rpb25zW0FjdGlvbl0sXG4pIHtcblx0aWYgKCFJU19CUk9XU0VSKSByZXR1cm47XG5cdGlmICghd2luZG93Ll9wYXEpIHtcblx0XHR3aW5kb3cuX3BhcSA9IFtdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wiSGVhdG1hcFNlc3Npb25SZWNvcmRpbmc6OmRpc2FibGVcIl0pOyAvLyBEaXNhYmxlIGhlYXRtYXBzIGJ5IGRlZmF1bHQgYXMgdGhpcyByZXF1aXJlIGNvb2tpZXNcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcImVuYWJsZUxpbmtUcmFja2luZ1wiXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRUcmFja2VyVXJsXCIsIGBodHRwczovLyR7TUFUT01PfS9tYXRvbW8ucGhwYF0pO1xuXHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3NjcmlwdFtzcmMqPVwibWF0b21vLmpzXCJdJykgfHxcblx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kKFxuXHRcdFx0XHRPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIiksIHtcblx0XHRcdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdFx0XHRzcmM6IGBodHRwczovL2Nkbi5tYXRvbW8uY2xvdWQvJHtNQVRPTU99L21hdG9tby5qc2AsXG5cdFx0XHRcdH0pLFxuXHRcdFx0KTtcblx0fVxuXHRpZiAoYWN0aW9uID09PSBcImluaXRcIikge1xuXHRcdGNvbnN0IHsgbWF0b21vSWQsIGVuYWJsZWQgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcImluaXRcIl07XG5cdFx0RU5BQkxFRCA9IGVuYWJsZWQgPz8gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lID09PSBcImxvY2FsaG9zdFwiO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0U2l0ZUlkXCIsIG1hdG9tb0lkXSk7XG5cdH1cblxuXHRpZiAoRU5BQkxFRCA9PT0gXCJkZWJ1Z1wiKSByZXR1cm4gY29uc29sZS5pbmZvKGBBbmFseXRpY3M6IFwiJHthY3Rpb259XCJgLCBhcmdzKTtcblx0aWYgKEVOQUJMRUQgPT09IGZhbHNlKSByZXR1cm47XG5cblx0aWYgKGFjdGlvbiA9PT0gXCJwYWdldmlld1wiKSB7XG5cdFx0Y29uc3QgeyB1cmwsIHRpdGxlIH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJwYWdldmlld1wiXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldEN1c3RvbVVybFwiLCB1cmwgfHwgbG9jYXRpb24uaHJlZl0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0RG9jdW1lbnRUaXRsZVwiLCB0aXRsZSB8fCBkb2N1bWVudC50aXRsZV0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1widHJhY2tQYWdlVmlld1wiXSk7XG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcImV2ZW50XCIpIHtcblx0XHRjb25zdCB7IGNhdGVnb3J5LCBhY3Rpb24sIG5hbWUsIHZhbHVlIH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJldmVudFwiXTtcblx0XHRjb25zdCBldmVudCA9IFtcInRyYWNrRXZlbnRcIiwgY2F0ZWdvcnksIGFjdGlvbiwgbmFtZSwgdmFsdWVdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goZXZlbnQuZmlsdGVyKCh2KSA9PiB2ICE9PSB1bmRlZmluZWQpKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwic2VhcmNoXCIpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRxdWVyeSxcblx0XHRcdGNhdGVnb3J5ID0gZmFsc2UsXG5cdFx0XHRyZXN1bHRzID0gZmFsc2UsXG5cdFx0fSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcInNlYXJjaFwiXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInRyYWNrU2l0ZVNlYXJjaFwiLCBxdWVyeSwgY2F0ZWdvcnksIHJlc3VsdHNdKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwibWF0b21vXCIpIHtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcIm1hdG9tb1wiXSk7XG5cdH1cbn1cbiIsImNvbnN0IGdldFN0ZXBzID0gKFxuXHRub3c6IG51bWJlcixcblx0bWF4OiBudW1iZXIsXG5cdHNob3cgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXG4pID0+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/IHZvaWQgMCA6IHByb3Auc3BsaXQoXCJkYXRhLXNyLVwiKVsxXTtcbiAgICBjb25zdCBjc3MgPSBgaW5wdXRbbGlzdD1cIiR7dGhpcy5pZH1cIl1gO1xuICAgIGlmIChURVhUU1t0ZXh0XSkgdGhpcy5fdGV4dHNbdGV4dF0gPSBuZXh0IHx8IFRFWFRTW3RleHRdO1xuICAgIGVsc2UgaWYgKHRoaXMuX3Jvb3QpIHtcbiAgICAgIGlmICh0aGlzLl9pbnB1dCkgc2V0dXBJbnB1dCh0aGlzLCB0aGlzLl9pbnB1dCk7XG4gICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIHRoaXMuX3Jvb3QucXVlcnlTZWxlY3RvckFsbChjc3MpKVxuICAgICAgICBzZXR1cElucHV0KHRoaXMsIGlucHV0KTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCB7IHRhcmdldCwgdHlwZSB9ID0gZXZlbnQ7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICBpZiAodHlwZSA9PT0gXCJjbGlja1wiKSBvbkNsaWNrKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJmb2N1c1wiIHx8IHR5cGUgPT09IFwiZm9jdXNpblwiKSBvbkZvY3VzKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJibHVyXCIgfHwgdHlwZSA9PT0gXCJmb2N1c291dFwiKSBvbkJsdXIodGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgb25LZXlEb3duKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiB0aGlzLmNvbnRhaW5zKHRhcmdldCkpXG4gICAgICBpc01vdXNlRG93bihldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwibXV0YXRpb25cIiB8fCB0eXBlID09PSBcImlucHV0XCIpIHtcbiAgICAgIGNsZWFyVGltZW91dChJTlBVVF9ERUJPVU5DRSk7XG4gICAgICBJTlBVVF9ERUJPVU5DRSA9IHNldFRpbWVvdXQob25JbnB1dCwgMCwgdGhpcywgZXZlbnQpO1xuICAgIH1cbiAgfVxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZShcInUtb3B0aW9uXCIpO1xuICB9XG59O1xudmFyIHNldEV4cGFuZGVkID0gKHNlbGYsIG9wZW4pID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGlmIChzZWxmLmhpZGRlbiAhPT0gb3BlbikgcmV0dXJuO1xuICBzZWxmLmhpZGRlbiA9ICFvcGVuO1xuICAoX2EyID0gbXV0YXRpb25PYnNlcnZlcihzZWxmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50YWtlUmVjb3JkcygpO1xuICBpZiAoc2VsZi5faW5wdXQpIHNldHVwSW5wdXQoc2VsZiwgc2VsZi5faW5wdXQsIG9wZW4pO1xuICBpZiAoc2VsZi5wb3BvdmVyICYmICgoX2IgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmlzQ29ubmVjdGVkKSkge1xuICAgIGF0dHIoc2VsZiwgXCJwb3BvdmVyXCIsIFwibWFudWFsXCIpO1xuICAgIHNlbGYudG9nZ2xlUG9wb3ZlcihvcGVuKTtcbiAgfVxuICBpZiAob3Blbikgb25JbnB1dChzZWxmKTtcbn07XG52YXIgZGlzY29ubmVjdElucHV0ID0gKHNlbGYpID0+IHtcbiAgaWYgKCFzZWxmLl9pbnB1dCkgcmV0dXJuO1xuICBvZmYoc2VsZi5faW5wdXQgfHwgc2VsZiwgRVZFTlRTX0lOUFVULCBzZWxmKTtcbiAgb2ZmKHNlbGYuX3Jvb3QgfHwgc2VsZiwgRVZFTlRTLCBzZWxmKTtcbiAgc2V0RXhwYW5kZWQoc2VsZiwgZmFsc2UpO1xuICBzZWxmLl9pbnB1dCA9IHZvaWQgMDtcbn07XG52YXIgc2V0dXBJbnB1dCA9IChzZWxmLCBpbnB1dCwgb3BlbiA9IGZhbHNlKSA9PiB7XG4gIGlmIChzZWxmLnBvcG92ZXIpIGF0dHIoaW5wdXQsIFwicG9wb3ZlcnRhcmdldFwiLCB1c2VJZChzZWxmKSk7XG4gIG9uKGlucHV0LCBFVkVOVFNfSU5QVVQsIHNlbGYsIHRydWUpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtYXV0b2NvbXBsZXRlXCIsIFwibGlzdFwiKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWNvbnRyb2xzXCIsIHVzZUlkKHNlbGYpKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWV4cGFuZGVkXCIsIGAke0lTX01PQklMRSA/IG9wZW4gOiBcInRydWVcIn1gKTtcbiAgYXR0cihpbnB1dCwgXCJhdXRvY29tcGxldGVcIiwgXCJvZmZcIik7XG4gIGF0dHIoaW5wdXQsIFwicm9sZVwiLCBcImNvbWJvYm94XCIpO1xufTtcbnZhciBvbkZvY3VzID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IGlzSW5wdXQgPSBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50O1xuICBpZiAoaXNJbnB1dCAmJiBldmVudC5pc1RydXN0ZWQpIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICBpZiAoc2VsZi5faW5wdXQgIT09IGV2ZW50LnRhcmdldCAmJiBpc0lucHV0ICYmIGV2ZW50LnRhcmdldC5saXN0ID09PSBzZWxmKSB7XG4gICAgaWYgKHNlbGYuX2lucHV0KSBkaXNjb25uZWN0SW5wdXQoc2VsZik7XG4gICAgc2VsZi5faW5wdXQgPSBldmVudC50YXJnZXQ7XG4gICAgc2VsZi5faW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImZvY3VzXCIpKTtcbiAgICBzZWxmLl9pbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNpblwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgIGF0dHIoc2VsZiwgU0FGRV9MQUJFTExFREJZLCB1c2VJZCgoX2EyID0gc2VsZi5faW5wdXQubGFiZWxzKSA9PSBudWxsID8gdm9pZCAwIDogX2EyWzBdKSk7XG4gICAgb24oc2VsZi5fcm9vdCB8fCBzZWxmLCBFVkVOVFMsIHNlbGYpO1xuICAgIHNldEV4cGFuZGVkKHNlbGYsIHRydWUpO1xuICAgIHNwZWFrKCk7XG4gIH1cbn07XG52YXIgb25CbHVyID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIGlmICghSVNfQU5EUk9JRCAmJiAhaXNNb3VzZURvd24oKSAmJiBzZWxmLl9pbnB1dClcbiAgICBzZXRUaW1lb3V0KG9uQmx1cnJlZCwgMCwgc2VsZik7XG4gIGlmIChldmVudC50YXJnZXQgPT09IHNlbGYuX2lucHV0ICYmIGV2ZW50LmlzVHJ1c3RlZClcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbn07XG52YXIgb25CbHVycmVkID0gKHNlbGYpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgcmVsYXRlZFRhcmdldCA9ICgoX2EyID0gc2VsZi5fcm9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5hY3RpdmVFbGVtZW50KSB8fCBudWxsO1xuICBjb25zdCBpbnB1dCA9IHNlbGYuX2lucHV0O1xuICBpZiAoaW5wdXQgJiYgaW5wdXQgIT09IHJlbGF0ZWRUYXJnZXQgJiYgIXNlbGYuY29udGFpbnMocmVsYXRlZFRhcmdldCkpIHtcbiAgICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBGb2N1c0V2ZW50KFwiYmx1clwiLCB7IHJlbGF0ZWRUYXJnZXQgfSkpO1xuICAgIGlucHV0LmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgRm9jdXNFdmVudChcImZvY3Vzb3V0XCIsIHsgYnViYmxlczogdHJ1ZSwgcmVsYXRlZFRhcmdldCB9KVxuICAgICk7XG4gICAgZGlzY29ubmVjdElucHV0KHNlbGYpO1xuICB9XG59O1xudmFyIG9uQ2xpY2sgPSAoc2VsZiwgeyB0YXJnZXQgfSkgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoIXNlbGYuX2lucHV0IHx8IHNlbGYuX2lucHV0ID09PSB0YXJnZXQpIHJldHVybiBzZXRFeHBhbmRlZChzZWxmLCB0cnVlKTtcbiAgZm9yIChjb25zdCBvcHQgb2Ygc2VsZi5vcHRpb25zKVxuICAgIGlmIChvcHQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgaWYgKGF0dHIoc2VsZiwgXCJhcmlhLW11bHRpc2VsZWN0YWJsZVwiKSAhPT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgKF9hMiA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKCk7XG4gICAgICAgIHNldEV4cGFuZGVkKHNlbGYsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXRWYWx1ZShzZWxmLl9pbnB1dCwgb3B0LnZhbHVlKTtcbiAgICB9XG4gIGlmIChJU19BTkRST0lEKSBvbkJsdXJyZWQoc2VsZik7XG59O1xudmFyIG9uS2V5RG93biA9IChzZWxmLCBlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChlLmFsdEtleSB8fCBlLmN0cmxLZXkgfHwgZS5tZXRhS2V5IHx8IGUuc2hpZnRLZXkgfHwgZS5rZXkgPT09IFwiVGFiXCIpXG4gICAgcmV0dXJuO1xuICBzZXRFeHBhbmRlZChzZWxmLCBlLmtleSAhPT0gXCJFc2NhcGVcIik7XG4gIGNvbnN0IHsga2V5LCB0YXJnZXQgfSA9IGU7XG4gIGNvbnN0IG9wdGlvbnMgPSBbLi4uc2VsZi5vcHRpb25zXS5maWx0ZXIoXG4gICAgKGVsKSA9PiBhdHRyKGVsLCBcImFyaWEtaGlkZGVuXCIpICE9PSBcInRydWVcIiAmJiBlbC5vZmZzZXRIZWlnaHRcbiAgKTtcbiAgY29uc3QgcHJldiA9IG9wdGlvbnMuaW5kZXhPZih0YXJnZXQpO1xuICBsZXQgbmV4dCA9IC0xO1xuICBpZiAoa2V5ID09PSBcIkFycm93RG93blwiKSBuZXh0ID0gKHByZXYgKyAxKSAlIG9wdGlvbnMubGVuZ3RoO1xuICBpZiAoa2V5ID09PSBcIkFycm93VXBcIikgbmV4dCA9ICh+cHJldiA/IHByZXYgOiBvcHRpb25zLmxlbmd0aCkgLSAxO1xuICBpZiAofnByZXYpIHtcbiAgICBpZiAoa2V5ID09PSBcIkhvbWVcIiB8fCBrZXkgPT09IFwiUGFnZVVwXCIpIG5leHQgPSAwO1xuICAgIGlmIChrZXkgPT09IFwiRW5kXCIgfHwga2V5ID09PSBcIlBhZ2VEb3duXCIpIG5leHQgPSBvcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgaWYgKGtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICBvcHRpb25zW3ByZXZdLmNsaWNrKCk7XG4gICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuICBpZiAob3B0aW9uc1tuZXh0XSkgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykgb3B0aW9uLnRhYkluZGV4ID0gLTE7XG4gIGlmIChvcHRpb25zW25leHRdKSBlLnByZXZlbnREZWZhdWx0KCk7XG4gIChfYTIgPSBvcHRpb25zW25leHRdIHx8IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKCk7XG59O1xudmFyIG9uSW5wdXQgPSAoc2VsZiwgZSkgPT4ge1xuICBjb25zdCB7IF90ZXh0cywgX3Jvb3QsIF9pbnB1dCwgb3B0aW9ucyB9ID0gc2VsZjtcbiAgY29uc3QgdmFsdWUgPSAoX2lucHV0ID09IG51bGwgPyB2b2lkIDAgOiBfaW5wdXQudmFsdWUudG9Mb3dlckNhc2UoKS50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IGZpbHRlciA9ICFzZWxmLmhhc0F0dHJpYnV0ZShcImRhdGEtbm9maWx0ZXJcIik7XG4gIGNvbnN0IGhpZGRlbiA9IFtdO1xuICBjb25zdCB2aXNpYmxlID0gW107XG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIHtcbiAgICBjb25zdCBoaWRlID0gb3B0LmRpc2FibGVkIHx8IG9wdC5oaWRkZW4gfHwgZmlsdGVyICYmICFvcHQubGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh2YWx1ZSk7XG4gICAgKGhpZGUgPyBoaWRkZW4gOiB2aXNpYmxlKS5wdXNoKG9wdCk7XG4gIH1cbiAgZm9yIChjb25zdCBvcHQgb2YgaGlkZGVuKSBhdHRyKG9wdCwgXCJhcmlhLWhpZGRlblwiLCBcInRydWVcIik7XG4gIGZvciAoY29uc3Qgb3B0IG9mIHZpc2libGUpIGF0dHIob3B0LCBcImFyaWEtaGlkZGVuXCIsIFwiZmFsc2VcIik7XG4gIGNvbnN0IHRvdGFsID0gdmlzaWJsZS5sZW5ndGg7XG4gIGNsZWFyVGltZW91dChMSVZFX1RJTUVSKTtcbiAgaWYgKChlID09IG51bGwgPyB2b2lkIDAgOiBlLnR5cGUpID09PSBcImlucHV0XCIgJiYgdmFsdWUgIT09IHNlbGYuX3ZhbHVlKVxuICAgIExJVkVfVElNRVIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSBgJHshdG90YWwgJiYgc2VsZi5pbm5lclRleHQudHJpbSgpIHx8IGAke190ZXh0c1t0b3RhbCA9PT0gMSA/IFwic2luZ3VsYXJcIiA6IFwicGx1cmFsXCJdfWAucmVwbGFjZShcIiVkXCIsIGAke3RvdGFsfWApfWA7XG4gICAgICBpZiAoIXNlbGYuaGlkZGVuICYmIChfcm9vdCA9PSBudWxsID8gdm9pZCAwIDogX3Jvb3QuYWN0aXZlRWxlbWVudCkgPT09IF9pbnB1dCkgc3BlYWsodGV4dCk7XG4gICAgICBzZWxmLl92YWx1ZSA9IHZhbHVlO1xuICAgIH0sIDFlMyk7XG4gIGlmIChJU19JT1MpXG4gICAgdmlzaWJsZS5mb3JFYWNoKChvcHQsIGlkeCkgPT4gYXR0cihvcHQsIFwidGl0bGVcIiwgYCR7aWR4ICsgMX0vJHt0b3RhbH1gKSk7XG59O1xuaWYgKElTX0JST1dTRVIpXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgXCJsaXN0XCIsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gZ2V0Um9vdCh0aGlzKS5nZXRFbGVtZW50QnlJZChhdHRyKHRoaXMsIFwibGlzdFwiKSB8fCBcIlwiKTtcbiAgICB9XG4gIH0pO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1kYXRhbGlzdFwiLCBVSFRNTERhdGFMaXN0RWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MRGF0YUxpc3RFbGVtZW50IH07XG4iLCJpbXBvcnQgeyBVSFRNTENvbWJvYm94RWxlbWVudCB9IGZyb20gXCJAdS1lbGVtZW50cy91LWNvbWJvYm94XCI7XG5pbXBvcnQgeyBVSFRNTERhdGFMaXN0RWxlbWVudCB9IGZyb20gXCJAdS1lbGVtZW50cy91LWRhdGFsaXN0XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0YW5jaG9yUG9zaXRpb24sXG5cdGF0dHIsXG5cdGlzSW5wdXRMaWtlLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdG9uTXV0YXRpb24sXG5cdFFVSUNLX0VWRU5ULFxuXHR1c2VJZCxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19GSUVMRCA9IHN0eWxlcy5maWVsZC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVkFMSURBVElPTlMgPSBzdHlsZXMudmFsaWRhdGlvbi5zcGxpdChcIiBcIik7XG5jb25zdCBDU1NfVkFMSURBVElPTiA9IENTU19WQUxJREFUSU9OU1swXTtcblxuY29uc3QgZ2V0VGV4dCA9IChzdHlsZTogQ1NTU3R5bGVEZWNsYXJhdGlvbiwga2V5OiBzdHJpbmcpID0+XG5cdHN0eWxlLmdldFByb3BlcnR5VmFsdWUoYC0tbXRkcy10ZXh0LSR7a2V5fWApPy5zbGljZSgxLCAtMSkgfHwgXCJcIjsgLy8gc2xpY2UgdG8gdHJpbSBxdW90ZXNcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oZmllbGRzOiBIVE1MQ29sbGVjdGlvbk9mPEVsZW1lbnQ+LCB2YWxpZGF0ZT86IGJvb2xlYW4pIHtcblx0Zm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpXG5cdFx0aWYgKGZpZWxkLmlzQ29ubmVjdGVkKSB7XG5cdFx0XHRjb25zdCBsYWJlbHM6IEhUTUxMYWJlbEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0Y29uc3QgZGVzY3M6IEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0Y29uc3QgdmFsaWRzOiBFbGVtZW50W10gPSBbXTtcblx0XHRcdGxldCBjb21ib2JveDogVUhUTUxDb21ib2JveEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblx0XHRcdGxldCBpbnB1dDogSFRNTElucHV0RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXHRcdFx0bGV0IHZhbGlkID0gdHJ1ZTtcblxuXHRcdFx0Zm9yIChjb25zdCBlbCBvZiBmaWVsZC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikpIHtcblx0XHRcdFx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTExhYmVsRWxlbWVudCkgbGFiZWxzLnB1c2goZWwpO1xuXHRcdFx0XHRlbHNlIGlmIChlbCBpbnN0YW5jZW9mIFVIVE1MQ29tYm9ib3hFbGVtZW50KSBjb21ib2JveCA9IGVsO1xuXHRcdFx0XHRlbHNlIGlmIChpc0lucHV0TGlrZShlbCkgJiYgIWVsLmhpZGRlbikgaW5wdXQgPSBlbDtcblx0XHRcdFx0ZWxzZSBpZiAoZWwuaGFzQXR0cmlidXRlKFwiZGF0YS1kZXNjcmlwdGlvblwiKSkgZGVzY3MucHVzaChlbCk7XG5cdFx0XHRcdGVsc2UgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhDU1NfVkFMSURBVElPTikpIHtcblx0XHRcdFx0XHR2YWxpZCA9IGF0dHIoZWwsIFwiZGF0YS1jb2xvclwiKSA9PT0gXCJzdWNjZXNzXCIgfHwgIWVsLmNsaWVudEhlaWdodDsgLy8gT25seSBzZXQgaW52YWxpZCBpZiBWYWxpZGF0aW9uIGlzIHZpc2libGVcblx0XHRcdFx0XHR2YWxpZHMucHVzaChlbCk7XG5cdFx0XHRcdFx0ZGVzY3MudW5zaGlmdChlbCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBIVE1MUGFyYWdyYXBoRWxlbWVudClcblx0XHRcdFx0XHRkZXNjcy5zb21lKChkZXNjKSA9PiBkZXNjLmNvbnRhaW5zKGVsKSkgfHwgZGVzY3MucHVzaChlbCk7IC8vIE9ubHkgYWRkIGlmIG5vdCBhbHJlYWR5IGluc2lkZSBkZXNjcmlwdGlvblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaW5wdXQpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBsYWJlbCBvZiBsYWJlbHMpIGxhYmVsLmh0bWxGb3IgPSB1c2VJZChpbnB1dCk7XG5cdFx0XHRcdGlmICh2YWxpZGF0ZSAmJiBhdHRyKGZpZWxkLCBcImRhdGEtdmFsaWRhdGlvblwiKSA9PT0gXCJmb3JtXCIpIHtcblx0XHRcdFx0XHR2YWxpZCA9IGlucHV0Lm1hdGNoZXMoXCI6dmFsaWRcIik7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBlbCBvZiB2YWxpZHMpIGF0dHIoZWwsIFwiaGlkZGVuXCIsIHZhbGlkID8gXCJcIiA6IG51bGwpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlbmRlckNvbWJvYm94KGNvbWJvYm94KTtcblx0XHRcdFx0cmVuZGVyQ291bnRlcihpbnB1dCk7XG5cdFx0XHRcdHJlbmRlclRleHRhcmVhU2l6ZShpbnB1dCk7XG5cdFx0XHRcdGF0dHIoaW5wdXQsIFwiYXJpYS1kZXNjcmliZWRieVwiLCBkZXNjcy5tYXAodXNlSWQpLmpvaW4oXCIgXCIpIHx8IG51bGwpOyAvLyBSZW1vdmUgaWYgZW1wdHlcblx0XHRcdFx0YXR0cihpbnB1dCwgXCJhcmlhLWludmFsaWRcIiwgYCR7IXZhbGlkfWApO1xuXHRcdFx0fVxuXHRcdH1cbn1cblxuLy8gaU9TIGRvZXMgbm90IHN1cHBvcnQgZmllbGQtc2l6aW5nOiBjb250ZW50LCBzbyB3ZSBuZWVkIHRvIG1hbnVhbGx5IHJlc2l6ZVxuZnVuY3Rpb24gcmVuZGVyVGV4dGFyZWFTaXplKHRleHRhcmVhOiBFbGVtZW50KSB7XG5cdGlmICh0ZXh0YXJlYSBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcblx0XHR0ZXh0YXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tbXRkcy10ZXh0YXJlYS1oZWlnaHRcIiwgXCJhdXRvXCIpO1xuXHRcdHRleHRhcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuXHRcdFx0XCItLW10ZHMtdGV4dGFyZWEtaGVpZ2h0XCIsXG5cdFx0XHRgJHt0ZXh0YXJlYS5zY3JvbGxIZWlnaHR9cHhgLFxuXHRcdCk7XG5cdH1cbn1cblxuLy8gU2V0dXAgdHJhbnNsYXRpb25zIGZyb20gQ1NTIGN1c3RvbSBwcm9wZXJ0aWVzXG5mdW5jdGlvbiByZW5kZXJDb21ib2JveChlbDogVUhUTUxDb21ib2JveEVsZW1lbnQgfCBudWxsKSB7XG5cdGlmICghZWw/Lmxpc3QgfHwgZWwubGlzdD8uaGFzQXR0cmlidXRlKFwicG9wb3ZlclwiKSkgcmV0dXJuO1xuXHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKTtcblx0YXR0cihlbCwgXCJkYXRhLXNyLWFkZGVkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtYWRkZWRcIikpO1xuXHRhdHRyKGVsLCBcImRhdGEtc3ItZW1wdHlcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1lbXB0eVwiKSk7XG5cdGF0dHIoZWwsIFwiZGF0YS1zci1mb3VuZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWZvdW5kXCIpKTtcblx0YXR0cihlbCwgXCJkYXRhLXNyLWludmFsaWRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1pbnZhbGlkXCIpKTtcblx0YXR0cihlbCwgXCJkYXRhLXNyLW9mXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtb2ZcIikpO1xuXHRhdHRyKGVsLCBcImRhdGEtc3ItcmVtb3ZlXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtcmVtb3ZlXCIpKTtcblx0YXR0cihlbCwgXCJkYXRhLXNyLXJlbW92ZWRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1yZW1vdmVkXCIpKTtcblx0YXR0cihlbC5saXN0LCBcImRhdGEtc3ItcGx1cmFsXCIsIGdldFRleHQoc3R5bGUsIFwiZGF0YWxpc3QtcGx1cmFsXCIpKTtcblx0YXR0cihlbC5saXN0LCBcImRhdGEtc3Itc2luZ3VsYXJcIiwgZ2V0VGV4dChzdHlsZSwgXCJkYXRhbGlzdC1zaW5ndWxhclwiKSk7XG5cdGF0dHIoZWwubGlzdCwgXCJwb3BvdmVyXCIsIFwibWFudWFsXCIpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJDb3VudGVyKGlucHV0OiBIVE1MSW5wdXRFbGVtZW50KSB7XG5cdGNvbnN0IGVsID0gaW5wdXQ/Lm5leHRFbGVtZW50U2libGluZztcblx0Y29uc3QgbGltaXQgPSBlbCAmJiBhdHRyKGVsLCBcImRhdGEtY291bnRcIik7XG5cblx0aWYgKGVsICYmIGxpbWl0KSB7XG5cdFx0Y29uc3QgcmVtYWluZGVyID0gTnVtYmVyKGxpbWl0KSAtIGlucHV0LnZhbHVlLmxlbmd0aDtcblx0XHRjb25zdCBuZXh0SW52YWxpZCA9IHJlbWFpbmRlciA8IDA7XG5cdFx0Y29uc3QgcHJldkludmFsaWQgPSBhdHRyKGVsLCBcImFyaWEtbGl2ZVwiKSA9PT0gXCJwb2xpdGVcIjtcblx0XHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsIHx8IGlucHV0KTtcblx0XHRjb25zdCBvdmVyID0gZ2V0VGV4dChzdHlsZSwgXCJjb3VudC1vdmVyXCIpO1xuXHRcdGNvbnN0IHVuZGVyID0gZ2V0VGV4dChzdHlsZSwgXCJjb3VudC11bmRlclwiKTtcblxuXHRcdGlmIChwcmV2SW52YWxpZCAhPT0gbmV4dEludmFsaWQpIHtcblx0XHRcdGF0dHIoZWwsIFwiYXJpYS1saXZlXCIsIG5leHRJbnZhbGlkID8gXCJwb2xpdGVcIiA6IFwib2ZmXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBjc3Mgb2YgQ1NTX1ZBTElEQVRJT05TKSBlbC5jbGFzc0xpc3QudG9nZ2xlKGNzcywgbmV4dEludmFsaWQpO1xuXHRcdH1cblx0XHRlbC50ZXh0Q29udGVudCA9IChuZXh0SW52YWxpZCA/IG92ZXIgOiB1bmRlcikucmVwbGFjZShcblx0XHRcdFwiJWRcIixcblx0XHRcdGAke01hdGguYWJzKHJlbWFpbmRlcil9YCxcblx0XHQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRvZ2dsZSh7IHRhcmdldDogZWwsIG5ld1N0YXRlIH06IEV2ZW50ICYgeyBuZXdTdGF0ZT86IHN0cmluZyB9KSB7XG5cdGlmIChlbCBpbnN0YW5jZW9mIFVIVE1MRGF0YUxpc3RFbGVtZW50KSB7XG5cdFx0Y29uc3Qgcm9vdCA9IGVsLmdldFJvb3ROb2RlKCkgYXMgU2hhZG93Um9vdCB8IG51bGw7XG5cdFx0Y29uc3QgYW5jaG9yID0gcm9vdD8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG5cdFx0XHRgW3BvcG92ZXJ0YXJnZXQ9XCIke2VsLmlkfVwiXWAsXG5cdFx0KTtcblxuXHRcdGlmIChuZXdTdGF0ZSA9PT0gXCJjbG9zZWRcIikgYW5jaG9yUG9zaXRpb24oZWwsIGZhbHNlKTtcblx0XHRlbHNlIGlmIChhbmNob3IpIHtcblx0XHRcdGVsLnN0eWxlLndpZHRoID0gYCR7YW5jaG9yLmNsaWVudFdpZHRofXB4YDtcblx0XHRcdGFuY2hvclBvc2l0aW9uKGVsLCBhbmNob3IsIGF0dHIoZWwsIFwiZGF0YS1wb3NpdGlvblwiKSA/PyBcImJvdHRvbVwiLCB0cnVlKTtcblx0XHR9XG5cdH1cbn1cbi8vIFVwZGF0ZSB3aGVuIHR5cGluZ1xuZnVuY3Rpb24gaGFuZGxlSW5wdXQoeyB0YXJnZXQgfTogRXZlbnQpIHtcblx0aWYgKGlzSW5wdXRMaWtlKHRhcmdldCkpIHtcblx0XHRyZW5kZXJDb3VudGVyKHRhcmdldCk7XG5cdFx0cmVuZGVyVGV4dGFyZWFTaXplKHRhcmdldCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlVmFsZGlhdGlvbihldmVudDogRXZlbnQpIHtcblx0Y29uc3QgZmllbGQgPSAoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oYC4ke0NTU19GSUVMRH1gKTtcblxuXHRpZiAoZXZlbnQudHlwZSA9PT0gXCJpbnZhbGlkXCIgJiYgZmllbGQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIFByZXZlbnQgYnJvd3NlcnMgZnJvbSBzaG93aW5nIGRlZmF1bHQgdmFsaWRhdGlvbiBidWJibGVzXG5cdGhhbmRsZU11dGF0aW9uKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoQ1NTX0ZJRUxEKSwgdHJ1ZSk7IC8vIFVwZGF0ZSBzdGF0ZVxufVxuXG4vLyBQb3NpdGlvbiBjb21ib2JveCB3aGVuIGNoYW5naW5nIGNvbnRlbnRcbmZ1bmN0aW9uIGhhbmRsZUJlZm9yZUNoYW5nZSh7IHRhcmdldDogZWwgfTogRXZlbnQpIHtcblx0Y29uc3QgbGlzdCA9IGVsIGluc3RhbmNlb2YgVUhUTUxDb21ib2JveEVsZW1lbnQgJiYgZWwubGlzdDtcblx0aWYgKGxpc3QgJiYgIWxpc3Q/LmhpZGRlbilcblx0XHRzZXRUaW1lb3V0KCgpID0+IGFuY2hvclBvc2l0aW9uKGxpc3QsIGVsLCAyLCB0cnVlKSwgMTApOyAvLyBSZXBvc2l0aW9uIGxpc3QgaWYgbm90IGhpZGRlblxufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfRklFTEQsIGhhbmRsZU11dGF0aW9uKTtcblx0b24oZG9jdW1lbnQsIFwiYmVmb3JlY2hhbmdlXCIsIGhhbmRsZUJlZm9yZUNoYW5nZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbihkb2N1bWVudCwgXCJpbnB1dFwiLCBoYW5kbGVJbnB1dCwgUVVJQ0tfRVZFTlQpO1xuXHRvbihkb2N1bWVudCwgXCJpbnZhbGlkLHN1Ym1pdFwiLCBoYW5kbGVWYWxkaWF0aW9uLCB0cnVlKTsgLy8gVXNlIGNhcHR1cmUgYXMgaW52YWxpZCBhbmQgc3VibWl0IGRvZXMgbm90IGJ1YmJsZVxuXHRvbihkb2N1bWVudCwgXCJ0b2dnbGVcIiwgaGFuZGxlVG9nZ2xlLCBRVUlDS19FVkVOVCk7IC8vIFVzZSBjYXB0dXJlIHNpbmNlIHRvZ2dsZSBkb2VzIG5vdCBidWJibGVcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIGlzSW5wdXRMaWtlLCBvbkxvYWRlZCwgb25NdXRhdGlvbiwgdXNlSWQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0ZJRUxEU0VUID0gc3R5bGVzLmZpZWxkc2V0LnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19WQUxJREFUSU9OID0gc3R5bGVzLnZhbGlkYXRpb24uc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQVJJQV9ERVNDID0gXCJhcmlhLWRlc2NyaWJlZGJ5XCI7XG5jb25zdCBBUklBX0lOVkFMSUQgPSBcImFyaWEtaW52YWxpZFwiO1xuXG4vLyBVc2luZyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgdG8gZW5zdXJlIGl0IHJ1bnMgYWZ0ZXIgZmllbGQtb2JzZXJ2ZXJcbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKGZpZWxkc2V0czogSFRNTENvbGxlY3Rpb25PZjxFbGVtZW50Pikge1xuXHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdGZvciAoY29uc3QgZmllbGRzZXQgb2YgZmllbGRzZXRzKVxuXHRcdFx0aWYgKGZpZWxkc2V0LmlzQ29ubmVjdGVkKSB7XG5cdFx0XHRcdGNvbnN0IGlucHV0czogSFRNTElucHV0RWxlbWVudFtdID0gW107XG5cdFx0XHRcdGxldCB2YWxpZElkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblx0XHRcdFx0bGV0IHZhbGlkID0gdHJ1ZTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGVsIG9mIGZpZWxkc2V0LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSkge1xuXHRcdFx0XHRcdGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1ZBTElEQVRJT04pKSB7XG5cdFx0XHRcdFx0XHR2YWxpZCA9IGF0dHIoZWwsIFwiZGF0YS1jb2xvclwiKSA9PT0gXCJzdWNjZXNzXCIgfHwgIWVsLmNsaWVudEhlaWdodDsgLy8gT25seSBzZXQgaW52YWxpZCBpZiBWYWxpZGF0aW9uIGlzIHZpc2libGVcblx0XHRcdFx0XHRcdHZhbGlkSWQgPSB1c2VJZChlbCk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChpc0lucHV0TGlrZShlbCkpIGlucHV0cy5wdXNoKGVsKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAoY29uc3QgaW5wdXQgb2YgaW5wdXRzKSB7XG5cdFx0XHRcdFx0Y29uc3QgZGVzYyA9IGF0dHIoaW5wdXQsIEFSSUFfREVTQyk/LnJlcGxhY2UodmFsaWRJZCB8fCBcIiNcIiwgXCJcIik7XG5cblx0XHRcdFx0XHRhdHRyKGlucHV0LCBBUklBX0RFU0MsIGAke3ZhbGlkSWQgfHwgXCJcIn0gJHtkZXNjIHx8IFwiXCJ9YC50cmltKCkpO1xuXHRcdFx0XHRcdGF0dHIoaW5wdXQsIEFSSUFfSU5WQUxJRCwgYCR7IXZhbGlkfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdH0pO1xufVxuXG5vbkxvYWRlZCgoKSA9PlxuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX0ZJRUxEU0VULCBoYW5kbGVNdXRhdGlvbiksXG4pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19MT0dPID0gc3R5bGVzLmxvZ28uc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihbbG9nb106IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdGlmIChsb2dvPy5pc0Nvbm5lY3RlZCAmJiBsb2dvPy5maXJzdEVsZW1lbnRDaGlsZCBpbnN0YW5jZW9mIFNWR1NWR0VsZW1lbnQpIHtcblx0XHRmb3IgKGNvbnN0IGljb24gb2YgZG9jdW1lbnQuaGVhZC5xdWVyeVNlbGVjdG9yQWxsKFwibGlua1tyZWx+PSdpY29uJ11cIikpXG5cdFx0XHRpY29uLnNldEF0dHJpYnV0ZShcInJlbFwiLCBcImRpc2FibGVkXCIpOyAvLyBEaXNhYmxlIHByZXZpb3VzIGljb24gKGJ1dCBub3QgcmVtb3ZlIGlzIGFzIHRoaXMgbWFrZXMgTmV4dC5qcyBzYWQpXG5cblx0XHRjb25zdCBzdmcgPSBsb2dvLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdGNvbnN0IGlzRG90ID0gbG9nbz8uaGFzQXR0cmlidXRlKFwiZGF0YS1lbnZcIik7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzdmcpO1xuXHRcdGNvbnN0IHRleHQgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sb3JcIik7XG5cdFx0Y29uc3QgYmFjayA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCItLW10ZHMtbG9nby1jb2xvclwiKTtcblx0XHRjb25zdCBpY29uID0gc3ZnLm91dGVySFRNTFxuXHRcdFx0LnJlcGxhY2UoL1xcbisvZywgXCIgXCIpIC8vIFByZXZlbnQgbGluZSBicmVha3Ncblx0XHRcdC5yZXBsYWNlKC8oZmlsbHx3aWR0aHxoZWlnaHR8eG1sbnMpPVwiW15cIl0rXCIvZ2ksIFwiXCIpXG5cdFx0XHQucmVwbGFjZShcIjxzdmdcIiwgYDxzdmcgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgZmlsbD1cIiR7dGV4dH1cImApO1xuXG5cdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChcblx0XHRcdE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIiksIHtcblx0XHRcdFx0aHJlZjogYGRhdGE6aW1hZ2Uvc3ZnK3htbCwke2VuY29kZVVSSUNvbXBvbmVudChgPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA1NSA1NSc+PHJlY3QgZmlsbD0nJHtpc0RvdCA/IFwibm9uZVwiIDogYmFja30nIHdpZHRoPSc1MScgaGVpZ2h0PSc1MScgeD0nMicgeT0nMicgc3Ryb2tlPScke3RleHR9JyBzdHJva2UtZGFzaGFycmF5PScwLjA5IDYuMzgnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLW9wYWNpdHk9JyR7aXNEb3QgPyAwLjYgOiAwfScgc3Ryb2tlLXdpZHRoPScyLjMnIHJ4PScyNS41Jy8+PGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDcuNSA3LjUpXCI+JHtpY29ufTwvZz48L3N2Zz5gKX1gLFxuXHRcdFx0XHRyZWw6IFwiaWNvblwiLFxuXHRcdFx0fSksXG5cdFx0KTtcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiBvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX0xPR08sIGhhbmRsZU11dGF0aW9uKSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgUVVJQ0tfRVZFTlQsIGFuY2hvclBvc2l0aW9uLCBhdHRyLCBvbiwgb25Mb2FkZWQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1BPUE9WRVIgPSBzdHlsZXMucG9wb3Zlci5zcGxpdChcIiBcIilbMF07XG5sZXQgT1BFTl9QT1BPVkVSUyA9IDA7IC8vIFNwZWVkIHVwIGJ5IG9ubHkgY2hlY2tpbmcgY2xpY2tzIGlmIHdlIGhhdmUgb3BlbiBwb3BvdmVyc1xuXG5mdW5jdGlvbiBoYW5kbGVUb2dnbGUoeyB0YXJnZXQ6IGVsLCBuZXdTdGF0ZSB9OiBFdmVudCAmIHsgbmV3U3RhdGU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1BPUE9WRVIpKSB7XG5cdFx0Y29uc3QgYW5jaG9yID0gKGVsLmdldFJvb3ROb2RlKCkgYXMgU2hhZG93Um9vdCk/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxuXHRcdFx0YFtwb3BvdmVydGFyZ2V0PVwiJHtlbC5pZH1cIl1gLFxuXHRcdCk7XG5cblx0XHRpZiAobmV3U3RhdGUgPT09IFwiY2xvc2VkXCIpIHtcblx0XHRcdE9QRU5fUE9QT1ZFUlMgLT0gMTtcblx0XHRcdGFuY2hvclBvc2l0aW9uKGVsLCBmYWxzZSk7XG5cdFx0fSBlbHNlIGlmIChhbmNob3IpIHtcblx0XHRcdE9QRU5fUE9QT1ZFUlMgKz0gMTtcblx0XHRcdGFuY2hvclBvc2l0aW9uKGVsLCBhbmNob3IsIGF0dHIoZWwsIFwiZGF0YS1wb3NpdGlvblwiKSB8fCBcImJvdHRvbVwiKTtcblx0XHR9XG5cdH1cbn1cblxuLy8gUG9seWZpbGwgcG9wb3ZlcnRhcmdldCBmb3IgPGE+IChub3Qgc3VwcG9ydGVkIGJ5IG5hdGl2ZSlcbi8vIGFuZCBhdXRvbWF0aWNhbGx5IGFzc3VtZSBwb3BvdmVydGFyZ2V0IGlzIHRoZSBjbG9zZXN0IHBhcmVudCBwb3BvdmVyXG4vLyBidXQgcmVzcGVjdCB0aGUgcG9wb3ZlcnRhcmdldCBhbmQgcG9wb3ZlcnRhcmdldGFjdGlvbiBhdHRyaWJ1dGVcbmZ1bmN0aW9uIGhhbmRsZUxpbmtDbGljayh7IHRhcmdldCB9OiBFdmVudCkge1xuXHRjb25zdCBjbG9zZSA9XG5cdFx0T1BFTl9QT1BPVkVSUyAmJiAodGFyZ2V0IGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oXCJhLFtwb3BvdmVydGFyZ2V0YWN0aW9uXVwiKTtcblxuXHRpZiAoY2xvc2UpIHtcblx0XHRjb25zdCBhY3Rpb24gPSBhdHRyKGNsb3NlLCBcInBvcG92ZXJ0YXJnZXRhY3Rpb25cIikgfHwgXCJ0b2dnbGVcIjtcblx0XHRjb25zdCBvcGVuID0gYWN0aW9uID09PSBcInNob3dcIiB8fCAoYWN0aW9uID09PSBcImhpZGVcIiA/IGZhbHNlIDogdW5kZWZpbmVkKTtcblx0XHRjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhdHRyKGNsb3NlLCBcInBvcG92ZXJ0YXJnZXRcIikgfHwgXCJcIik7XG5cdFx0Y29uc3QgcG9wb3ZlciA9ICh0YXJnZXQgfHwgY2xvc2UpLmNsb3Nlc3Q8SFRNTEVsZW1lbnQ+KGAuJHtDU1NfUE9QT1ZFUn1gKTtcblxuXHRcdC8vIFBvcG92ZXIgY2FuIGJlIGRpc2Nvbm5ldGVkIGJ5IGNsaWNrIGhhbmRsZXIgZGVlcGVyIGRvd24gaW4gdGhlIERPTSB0aHJlZSBiZWZvcmUgcmVhY2hpbmcgZG9jdW1lbnRcblx0XHRpZiAocG9wb3Zlcj8uaXNDb25uZWN0ZWQgJiYgcG9wb3Zlcj8udG9nZ2xlUG9wb3Zlcilcblx0XHRcdHBvcG92ZXIudG9nZ2xlUG9wb3ZlcihvcGVuKTtcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uKGRvY3VtZW50LCBcInRvZ2dsZVwiLCBoYW5kbGVUb2dnbGUsIFFVSUNLX0VWRU5UKTsgLy8gVXNlIGNhcHR1cmUgc2luY2UgdG9nZ2xlIGRvZXMgbm90IGJ1YmJsZVxuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVMaW5rQ2xpY2spOyAvLyBBbGxvdyBgPGE+YCB0byB1c2UgYHBvcG92ZXJ0YXJnZXRgIGFzIHdlbGxcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19UQUJMRSA9IHN0eWxlcy50YWJsZS5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKHRhYmxlczogSFRNTENvbGxlY3Rpb25PZjxIVE1MVGFibGVFbGVtZW50Pikge1xuXHRmb3IgKGNvbnN0IHRhYmxlIG9mIHRhYmxlcykge1xuXHRcdGNvbnN0IHRoczogc3RyaW5nW10gPSBbXTsgLy8gQWRkIGRhdGEtdGg9XCJcIiB0byBlYWNoIGNlbGwgdG8gc3VwcG9ydCBkYXRhLW1vYmlsZSBkZXNpZ25zXG5cblx0XHRhdHRyKHRhYmxlLCBcInJvbGVcIiwgXCJ0YWJsZVwiKTsgLy8gQWRkIGhlbHBpbmcgcm9sZT1cIlwiIHRvIGVuc3VyZSBzY3JlZW4gcmVhZGVycyB1bmRlcnN0YW5kIHRoZSB0YWJsZSByZWdhcmRsZXNzIG9mIENTUyBkaXNwbGF5XG5cdFx0aWYgKHRhYmxlLmNhcHRpb24pIGF0dHIodGFibGUuY2FwdGlvbiwgXCJyb2xlXCIsIFwiY2FwdGlvblwiKTtcblx0XHRmb3IgKGNvbnN0IGdyb3VwIG9mIFt0YWJsZS50SGVhZCwgdGFibGUudEZvb3QsIC4uLnRhYmxlLnRCb2RpZXNdKVxuXHRcdFx0aWYgKGdyb3VwKSB7XG5cdFx0XHRcdGF0dHIoZ3JvdXAsIFwicm9sZVwiLCBcInJvd2dyb3VwXCIpO1xuXHRcdFx0XHRjb25zdCBpc1Rib2R5ID0gZ3JvdXAubm9kZU5hbWUgPT09IFwiVEJPRFlcIjtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHJvdyBvZiBncm91cC5yb3dzKSB7XG5cdFx0XHRcdFx0YXR0cihyb3csIFwicm9sZVwiLCBcInJvd1wiKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGNlbGwgb2Ygcm93LmNlbGxzKSB7XG5cdFx0XHRcdFx0XHRpZiAoaXNUYm9keSkgYXR0cihjZWxsLCBcImRhdGEtdGhcIiwgdGhzW2NlbGwuY2VsbEluZGV4XSB8fCBcIjplbXB0eVwiKTtcblx0XHRcdFx0XHRcdGVsc2UgdGhzLnB1c2goY2VsbC5pbm5lclRleHQudHJpbSgpKTsgLy8gVXNpbmcgaW5uZXJUZXh0IHRvIG9ubHkgaW5jbHVkZSB2aXNpYmxlIHRleHRcblx0XHRcdFx0XHRcdGlmIChjZWxsLm5vZGVOYW1lID09PSBcIlREXCIpIGF0dHIoY2VsbCwgXCJyb2xlXCIsIFwiY2VsbFwiKTtcblx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhdHRyKGNlbGwsIFwicm9sZVwiLCBpc1Rib2R5ID8gXCJyb3doZWFkZXJcIiA6IFwiY29sdW1uaGVhZGVyXCIpO1xuXHRcdFx0XHRcdFx0XHRhdHRyKGNlbGwsIFwic2NvcGVcIiwgaXNUYm9keSA/IFwicm93XCIgOiBcImNvbFwiKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiBvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX1RBQkxFLCBoYW5kbGVNdXRhdGlvbikpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IG9uLCBvbkxvYWRlZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfVE9HR0xFR1JPVVAgPSBgLiR7c3R5bGVzLnRvZ2dsZWdyb3VwLnNwbGl0KFwiIFwiKVswXX1gO1xuXG4vLyBQcmV2ZW50IGJyb3dzZXJzIGZyb20gc2hvd2luZyBkZWZhdWx0IHZhbGlkYXRpb24gYnViYmxlc1xuZnVuY3Rpb24gaGFuZGxlS2V5RG93bihldmVudDogRXZlbnQgJiBQYXJ0aWFsPEtleWJvYXJkRXZlbnQ+KSB7XG5cdGNvbnN0IHsga2V5LCB0YXJnZXQ6IGVsIH0gPSBldmVudDtcblx0Y29uc3QgZ3JvdXAgPSBlbCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgZWwuY2xvc2VzdChDU1NfVE9HR0xFR1JPVVApO1xuXG5cdGlmICghZ3JvdXApIHJldHVybjtcblx0aWYgKGtleSA9PT0gXCJFbnRlclwiKSBlbC5jbGljaygpO1xuXHRpZiAoa2V5Py5zdGFydHNXaXRoKFwiQXJyb3dcIikpIHtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGNvbnN0IGlucHV0cyA9IGdyb3VwLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIik7XG5cdFx0Y29uc3QgaW5kZXggPSBbLi4uaW5wdXRzXS5pbmRleE9mKGVsKTtcblx0XHRjb25zdCBtb3ZlID0ga2V5Lm1hdGNoKC9BcnJvdyhSaWdodHxEb3duKS8pID8gMSA6IC0xO1xuXHRcdGlucHV0c1soaW5wdXRzLmxlbmd0aCArIGluZGV4ICsgbW92ZSkgJSBpbnB1dHMubGVuZ3RoXT8uZm9jdXMoKTtcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiBvbihkb2N1bWVudCwgXCJrZXlkb3duXCIsIGhhbmRsZUtleURvd24pKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRhbmNob3JQb3NpdGlvbixcblx0YXR0cixcblx0SVNfQlJPV1NFUixcblx0b24sXG5cdG9uTG9hZGVkLFxuXHRRVUlDS19FVkVOVCxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IERFU0NSSUJFREJZID0gXCJhcmlhLWRlc2NyaWJlZGJ5XCI7XG5jb25zdCBFU0MgPSBcIkVzY2FwZVwiO1xuY29uc3QgTEFCRUxMRURCWSA9IFwiYXJpYS1sYWJlbGxlZGJ5XCI7XG5jb25zdCBQT1NJVElPTl9DU1NfUFJPUEVSVFkgPSBcIi0tbXRkcy10b29sdGlwLXBvc2l0aW9uXCI7XG5jb25zdCBUSFJPVFRMRV9ERUxBWSA9IDMwMDtcbmNvbnN0IFRPT0xUSVAgPSBJU19CUk9XU0VSXG5cdD8gT2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCB7XG5cdFx0XHRjbGFzc05hbWU6IHN0eWxlcy5fdG9vbHRpcCxcblx0XHRcdGlkOiBcIm10ZHMtdG9vbHRpcFwiLFxuXHRcdFx0cG9wb3ZlcjogXCJtYW51YWxcIixcblx0XHR9KVxuXHQ6IG51bGw7IC8vIENyZWF0ZSBhIGR1bW15IGVsZW1lbnQgdG8gYXZvaWQgbnVsbCBjaGVja3NcblxubGV0IEFOQ0hPUjogRWxlbWVudCB8IG51bGwgPSBudWxsO1xubGV0IExBU1RfQ0FMTCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbmxldCBUSFJPVFRMRTogbnVtYmVyIHwgUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gPSAwO1xuXG5mdW5jdGlvbiBoYW5kbGVNb3ZlKHsgdGFyZ2V0LCB0eXBlLCBrZXkgfTogRXZlbnQgJiB7IGtleT86IHN0cmluZyB9KSB7XG5cdGlmICh0eXBlID09PSBcImtleWRvd25cIiAmJiBrZXkgIT09IEVTQykgcmV0dXJuOyAvLyBBbGxvdyBFU0MgZGlzbWlzcyB0byBmb2xsb3cgaHR0cHM6Ly93d3cudzMub3JnL1dBSS9BUklBL2FwZy9wYXR0ZXJucy90b29sdGlwL1xuXHRjb25zdCB3YWl0ID0gTEFTVF9DQUxMICsgVEhST1RUTEVfREVMQVkgLSBEYXRlLm5vdygpO1xuXHRjbGVhclRpbWVvdXQoVEhST1RUTEUpO1xuXHRUSFJPVFRMRSA9IHNldFRpbWVvdXQoXG5cdFx0aGFuZGxlTW92ZVRocm90dGxlZCxcblx0XHRNYXRoLm1heCh3YWl0LCAwKSxcblx0XHRrZXkgPT09IEVTQyA/IG51bGwgOiB0YXJnZXQsXG5cdCk7XG59XG5cbi8vIFVzaW5nIGEgdGhyb3R0bGVkIGZ1bmN0aW9uIHRvIGF2b2lkIHBlcmZvcm1hbmNlIGlzc3Vlc1xuZnVuY3Rpb24gaGFuZGxlTW92ZVRocm90dGxlZCh0YXJnZXQ6IEVsZW1lbnQgfCBudWxsKSB7XG5cdExBU1RfQ0FMTCA9IERhdGUubm93KCk7XG5cblx0Ly8gQnVpbGQgYW5kIGFwcGVuZCB0b29sdGlwIGlmIG5vdCBleGlzdGluZ1xuXHRpZiAoIVRPT0xUSVAgfHwgdGFyZ2V0ID09PSBUT09MVElQKSByZXR1cm47IC8vIEFsbG93IHRvb2x0aXAgdG8gYmUgaG92ZXJlZCwgZm9sbG93aW5nIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjEvI2NvbnRlbnQtb24taG92ZXItb3ItZm9jdXNcblx0aWYgKCFUT09MVElQPy5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmQoVE9PTFRJUCk7IC8vIEVuc3VyZSBjb25uZWN0ZWRcblx0bGV0IGFuY2hvciA9IHRhcmdldD8uY2xvc2VzdD8uPEVsZW1lbnQ+KFwiW2RhdGEtdG9vbHRpcF1cIikgfHwgbnVsbDtcblxuXHQvLyBObyBuZWVkIHRvIHVwZGF0ZVxuXHRpZiAoYW5jaG9yID09PSBBTkNIT1IpIHJldHVybjtcblxuXHRjb25zdCBjb250ZW50ID0gKGFuY2hvciAmJiBhdHRyKGFuY2hvciwgXCJkYXRhLXRvb2x0aXBcIikpIHx8IFwiXCI7XG5cdGNvbnN0IHBvc2l0aW9uID1cblx0XHQoYW5jaG9yICYmIGF0dHIoYW5jaG9yLCBcImRhdGEtdG9vbHRpcC1wb3NpdGlvblwiKSkgfHxcblx0XHR3aW5kb3dcblx0XHRcdC5nZXRDb21wdXRlZFN0eWxlKGFuY2hvciB8fCBkb2N1bWVudC5ib2R5KVxuXHRcdFx0LmdldFByb3BlcnR5VmFsdWUoUE9TSVRJT05fQ1NTX1BST1BFUlRZKVxuXHRcdFx0Py50cmltKCkgfHxcblx0XHRcInRvcFwiO1xuXG5cdGNvbnN0IGlzSGlkZGVuID1cblx0XHQhY29udGVudCB8fFxuXHRcdGNvbnRlbnQgPT09IFwiZmFsc2VcIiB8fFxuXHRcdGNvbnRlbnQgPT09IFwidHJ1ZVwiIHx8XG5cdFx0cG9zaXRpb24gPT09IFwibm9uZVwiO1xuXG5cdGlmIChpc0hpZGRlbikgYW5jaG9yID0gbnVsbDsgLy8gRG8gbm90IHNob3cgdG9vbHRpcCBpZiBib29saXNoIHZhbHVlXG5cdGlmIChhbmNob3IpIFRPT0xUSVAudGV4dENvbnRlbnQgPSBjb250ZW50OyAvLyBPbmx5IHVwZGF0ZSBjb250ZW50IGlmIG5ldyBhbmNob3JcblxuXHRjb25zdCBoYWRMYWJlbCA9IEFOQ0hPUiAmJiBhdHRyKEFOQ0hPUiwgTEFCRUxMRURCWSkgPT09IFRPT0xUSVA/LmlkO1xuXHRjb25zdCBoYXNMYWJlbCA9XG5cdFx0KGFuY2hvciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50XG5cdFx0XHQ/IGFuY2hvci5pbm5lclRleHRcblx0XHRcdDogYW5jaG9yPy50ZXh0Q29udGVudFxuXHRcdCk/LnRyaW0oKSB8fFxuXHRcdGFuY2hvcj8uaGFzQXR0cmlidXRlKExBQkVMTEVEQlkpIHx8XG5cdFx0YW5jaG9yPy5oYXNBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIpO1xuXG5cdEFOQ0hPUj8ucmVtb3ZlQXR0cmlidXRlKGhhZExhYmVsID8gTEFCRUxMRURCWSA6IERFU0NSSUJFREJZKTsgLy8gVW5saW5rIHByZXZpb3VzIGFuY2hvclxuXHRhbmNob3JQb3NpdGlvbihUT09MVElQLCBmYWxzZSk7IC8vIFJlc2V0IGFuY2hvciBwb3NpdGlvblxuXG5cdEFOQ0hPUiA9IGFuY2hvcjsgLy8gU3RvcmUgbmV3IGFuY2hvciAtIG1pZ2h0IGJlIG51bGwgaWYgbm8gbmV3IGFuY2hvclxuXHRpZiAoQU5DSE9SKSBhdHRyKEFOQ0hPUiwgaGFzTGFiZWwgPyBERVNDUklCRURCWSA6IExBQkVMTEVEQlksIFRPT0xUSVA/LmlkKTsgLy8gVXNlIHRvb2x0aXAgYXMgZGVzY3JpcHRpb24gaWYgYWxscmVhZHkgaGFzIGxhYmVsXG5cdFRPT0xUSVAudG9nZ2xlUG9wb3ZlcighIWFuY2hvcik7XG5cdGFuY2hvclBvc2l0aW9uKFRPT0xUSVAsIGFuY2hvciB8fCBmYWxzZSwgcG9zaXRpb24pO1xufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uKGRvY3VtZW50LCBcImJsdXIsZm9jdXMsbW91c2VvdXQsbW91c2VvdmVyXCIsIGhhbmRsZU1vdmUsIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcImtleWRvd25cIiwgaGFuZGxlTW92ZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwiYmx1clwiLCBoYW5kbGVNb3ZlLCBRVUlDS19FVkVOVCk7XG59KTtcbiIsIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgRElTUExBWV9CTE9DSyA9IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2sgfVwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBfYTI7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gKF9hMiA9IGVsLmdldEF0dHJpYnV0ZShuYW1lKSkgIT0gbnVsbCA/IF9hMiA6IG51bGw7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xuXG4vLyB1LWRldGFpbHMudHNcbnZhciBVSFRNTERldGFpbHNFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIFVzaW5nIHVuZGVyc2NvcmUgaW5zdGVhZCBvZiBwcml2YXRlIGZpZWxkcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICB0aGlzLl9jb250ZW50ID0gbnVsbDtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIsIG51bGwsIHsgbmFtZTogXCJzdW1tYXJ5XCIgfSksXG4gICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiLCBudWxsLCB7IHBhcnQ6IFwiZGV0YWlscy1jb250ZW50XCIgfSksXG4gICAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGAke0RJU1BMQVlfQkxPQ0t9XG4gICAgICAgIDo6c2xvdHRlZCh1LXN1bW1hcnkpIHsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBibG9jayB9XG5cdFx0XHRcdDo6c2xvdHRlZCh1LXN1bW1hcnkpOjpiZWZvcmUgeyBjb250ZW50OiAnJzsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBtYXJnaW4taW5saW5lOiAuMDVlbSAuMzEyNWVtOyBib3JkZXItYmxvY2s6IC4zMTI1ZW0gc29saWQgdHJhbnNwYXJlbnQ7IGJvcmRlci1pbmxpbmUtc3RhcnQ6IC41ZW0gc29saWQgfVxuXHRcdFx0XHQ6OnNsb3R0ZWQodS1zdW1tYXJ5W2FyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJdKTo6YmVmb3JlIHsgcm90YXRlOiA5MGRlZyB9XG5cdFx0XHRcdDpob3N0ID4gW3BhcnQ9XCJkZXRhaWxzLWNvbnRlbnRcIl06bm90KFtoaWRkZW49XCJcIl0pIHsgZGlzcGxheTogYmxvY2sgfWBcbiAgICAgIClcbiAgICApO1xuICB9XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJvcGVuXCJdO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHZhciBfYTI7XG4gICAgdGhpcy5fY29udGVudCA9IChfYTIgPSB0aGlzLnNoYWRvd1Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2hpbGRyZW5bMV07XG4gICAgb24odGhpcy5fY29udGVudCwgXCJiZWZvcmVtYXRjaFwiLCB0aGlzKTtcbiAgICBvbih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBpZiAodGhpcy5fY29udGVudCkgb2ZmKHRoaXMuX2NvbnRlbnQsIFwiYmVmb3JlbWF0Y2hcIiwgdGhpcyk7XG4gICAgb2ZmKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICB0aGlzLl9jb250ZW50ID0gbnVsbDtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socHJvcCwgcHJldiwgbmV4dCkge1xuICAgIGNvbnN0IGhpZGUgPSBcIm9uYmVmb3JlbWF0Y2hcIiBpbiB0aGlzID8gXCJ1bnRpbC1mb3VuZFwiIDogdHJ1ZTtcbiAgICBjb25zdCBvcGVuID0gdGhpcy5vcGVuO1xuICAgIGZvciAoY29uc3QgZWwgb2YgdGhpcy5jaGlsZHJlbilcbiAgICAgIGlmIChlbC5ub2RlTmFtZSA9PT0gXCJVLVNVTU1BUllcIikgYXR0cihlbCwgXCJhcmlhLWV4cGFuZGVkXCIsIGAke29wZW59YCk7XG4gICAgaWYgKHRoaXMuX2NvbnRlbnQpIHtcbiAgICAgIGF0dHIodGhpcy5fY29udGVudCwgXCJhcmlhLWhpZGRlblwiLCBgJHshb3Blbn1gKTtcbiAgICAgIHRoaXMuX2NvbnRlbnQuaGlkZGVuID0gb3BlbiA/IGZhbHNlIDogaGlkZTtcbiAgICB9XG4gICAgaWYgKG9wZW4gJiYgdGhpcy5uYW1lKSB7XG4gICAgICBjb25zdCB1RGV0YWlsc0xpc3QgPSBnZXRSb290KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAke3RoaXMubm9kZU5hbWV9W25hbWU9XCIke3RoaXMubmFtZX1cIl1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCB1RGV0YWlscyBvZiB1RGV0YWlsc0xpc3QpXG4gICAgICAgIGlmICh1RGV0YWlscyAhPT0gdGhpcykgdURldGFpbHMub3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAocHJvcCA9PT0gXCJvcGVuXCIgJiYgcHJldiA9PT0gbnVsbCAhPT0gKG5leHQgPT09IG51bGwpKVxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInRvZ2dsZVwiKSk7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwiOnNjb3BlID4gdS1zdW1tYXJ5XCIpO1xuICAgIGNvbnN0IGlzU3VtbWFyeSA9IHN1bW1hcnkgPT0gbnVsbCA/IHZvaWQgMCA6IHN1bW1hcnkuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJlZm9yZW1hdGNoXCIpIHRoaXMub3BlbiA9IHRydWU7XG4gICAgaWYgKGlzU3VtbWFyeSAmJiBldmVudC50eXBlID09PSBcImtleWRvd25cIikgYXNCdXR0b24oZXZlbnQpO1xuICAgIGlmIChpc1N1bW1hcnkgJiYgZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSB0aGlzLm9wZW4gPSAhdGhpcy5vcGVuO1xuICB9XG4gIGdldCBvcGVuKCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcIm9wZW5cIik7XG4gIH1cbiAgc2V0IG9wZW4odmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwib3BlblwiLCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBcIm5hbWVcIikgfHwgXCJcIjtcbiAgfVxuICBzZXQgbmFtZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJuYW1lXCIsIHZhbHVlKTtcbiAgfVxufTtcbnZhciBVSFRNTFN1bW1hcnlFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgICB0aGlzLnNsb3QgPSBcInN1bW1hcnlcIjtcbiAgICB0aGlzLnRhYkluZGV4ID0gMDtcbiAgfVxufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtZGV0YWlsc1wiLCBVSFRNTERldGFpbHNFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtc3VtbWFyeVwiLCBVSFRNTFN1bW1hcnlFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxEZXRhaWxzRWxlbWVudCwgVUhUTUxTdW1tYXJ5RWxlbWVudCB9O1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0ZJUkVGT1ggPSBJU19CUk9XU0VSICYmIC9maXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgX2EyO1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIChfYTIgPSBlbC5nZXRBdHRyaWJ1dGUobmFtZSkpICE9IG51bGwgPyBfYTIgOiBudWxsO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIGlmIChhdHRycykgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJzKSkgYXR0cihlbCwga2V5LCB2YWwpO1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcbnZhciBnZXRMYWJlbCA9IChlbCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gZ2V0Um9vdChlbCk7XG4gIGNvbnN0IGxhYmVsID0gYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIpIHx8IFwiXCI7XG4gIGNvbnN0IGxhYmVscyA9ICgoX2EyID0gYXR0cihlbCwgXCJhcmlhLWxhYmVsbGVkYnlcIikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpLnNwbGl0KC9cXHMrLykpIHx8IFtdO1xuICByZXR1cm4gW1xuICAgIC4uLmxhYmVscy5tYXAoKGlkMikgPT4gcm9vdCA9PSBudWxsID8gdm9pZCAwIDogcm9vdC5xdWVyeVNlbGVjdG9yKGBbaWQ9XCIke2lkMn1cIl1gKSksXG4gICAgLy8gR2V0IGFsbCBsYWJlbGxlZGJ5IGVsZW1lbnRzXG4gICAgLi4uQXJyYXkuZnJvbShlbC5sYWJlbHMgfHwgW10pXG4gICAgLy8gR2V0IGFsbCA8bGFiZWw+IGVsZW1lbnRzXG4gIF0ucmVkdWNlKChhY2MsIGVsMikgPT4ge1xuICAgIHZhciBfYTM7XG4gICAgcmV0dXJuIGFjYyB8fCAoKF9hMyA9IGVsMiA9PSBudWxsID8gdm9pZCAwIDogZWwyLmlubmVyVGV4dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMy50cmltKCkpIHx8IFwiXCI7XG4gIH0sIGxhYmVsKTtcbn07XG5cbi8vIHUtcHJvZ3Jlc3MudHNcbnZhciBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG52YXIgVUhUTUxQcm9ncmVzc0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1sYWJlbGxlZGJ5XCIsIFwidmFsdWVcIiwgXCJtYXhcIl07XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIsIG51bGwsIHsgaGlkZGVuOiBcIlwiIH0pLFxuICAgICAgLy8gU2xvdCBoaWRpbmcgY29udGVudCBhbGxvd3MgbGVnYWN5IGJyb3dzZXIgdG8gZGlzcGxheSBmYWxsYmFjayB0ZXh0XG4gICAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGA6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBib3JkZXI6IDFweCBzb2xpZDsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBoZWlnaHQ6IC41ZW07IHdpZHRoOiAxMGVtOyBvdmVyZmxvdzogaGlkZGVuIH1cbiAgICAgICAgOmhvc3Q6OmJlZm9yZSB7IGNvbnRlbnQ6ICcnOyBkaXNwbGF5OiBibG9jazsgaGVpZ2h0OiAxMDAlOyBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7IHdpZHRoOiB2YXIoLS1wZXJjZW50YWdlLCAwJSk7IHRyYW5zaXRpb246IHdpZHRoIC4ycyB9XG4gICAgICAgIDpob3N0KDpub3QoW3ZhbHVlXSkpIHsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLGN1cnJlbnRDb2xvciAyNSUsIHRyYW5zcGFyZW50IDUwJSwgY3VycmVudENvbG9yIDc1JSkgNTAlLzQwMCUgfVxuICAgICAgICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IG5vLXByZWZlcmVuY2UpIHsgOmhvc3QgeyBhbmltYXRpb246IGluZGV0ZXJtaW5hdGUgMnMgbGluZWFyIGluZmluaXRlIH0gIH1cbiAgICAgICAgQGtleWZyYW1lcyBpbmRldGVybWluYXRlIHsgZnJvbSB7IGJhY2tncm91bmQtcG9zaXRpb24teDogMTAwJSB9IHRvIHsgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAwIH0gfWBcbiAgICAgIClcbiAgICApO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGlmIChTS0lQX0FUVFJfQ0hBTkdFKSByZXR1cm47XG4gICAgU0tJUF9BVFRSX0NIQU5HRSA9IHRydWU7XG4gICAgY29uc3Qgcm9sZUltYWdlID0gSVNfSU9TIHx8IElTX0ZJUkVGT1g7XG4gICAgY29uc3QgcGVyY2VudGFnZSA9IE1hdGgubWF4KDAsIE1hdGgucm91bmQodGhpcy5wb3NpdGlvbiAqIDEwMCkpO1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBlcmNlbnRhZ2VcIiwgYCR7cGVyY2VudGFnZX0lYCk7XG4gICAgbGV0IGxhYmVsID0gZ2V0TGFiZWwodGhpcyk7XG4gICAgaWYgKHJvbGVJbWFnZSkgbGFiZWwgPSBgJHtsYWJlbC5yZXBsYWNlKC9cXGQrJSQvLCBcIlwiKX0gJHtwZXJjZW50YWdlfSVgO1xuICAgIGlmIChJU19GSVJFRk9YKSBmb3IgKGNvbnN0IGVsIG9mIHRoaXMubGFiZWxzKSBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIiwgbGFiZWwpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWJ1c3lcIiwgYCR7dGhpcy5wb3NpdGlvbiA9PT0gLTF9YCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtbGFiZWxcIiwgbGFiZWwudHJpbSgpKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1sYWJlbGxlZGJ5XCIsIG51bGwpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXZhbHVlbWF4XCIsIFwiMTAwXCIpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXZhbHVlbWluXCIsIFwiMFwiKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW5vd1wiLCBgJHtwZXJjZW50YWdlfWApO1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIHJvbGVJbWFnZSA/IFwiaW1nXCIgOiBcInByb2dyZXNzYmFyXCIpO1xuICAgIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbiAgfVxuICBnZXQgbGFiZWxzKCkge1xuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5jbG9zZXN0KFwibGFiZWw6bm90KFtmb3JdKVwiKTtcbiAgICBjb25zdCBpZDIgPSB1c2VJZCh0aGlzKTtcbiAgICBpZiAobGFiZWwpIGxhYmVsLmh0bWxGb3IgPSBpZDI7XG4gICAgY29uc3QgZWwgPSBnZXRSb290KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgbGFiZWxbZm9yPVwiJHtpZDJ9XCJdYFxuICAgICk7XG4gICAgcmV0dXJuIGVsO1xuICB9XG4gIGdldCBwb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZSA9PT0gbnVsbCA/IC0xIDogTWF0aC5taW4odGhpcy52YWx1ZSAvIHRoaXMubWF4LCAxKTtcbiAgfVxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIGdldE51bWJlcih0aGlzLCBcInZhbHVlXCIpO1xuICB9XG4gIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgIHNldE51bWJlcih0aGlzLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbWF4KCkge1xuICAgIHJldHVybiBnZXROdW1iZXIodGhpcywgXCJtYXhcIikgfHwgMTtcbiAgfVxuICBzZXQgbWF4KG1heCkge1xuICAgIHNldE51bWJlcih0aGlzLCBcIm1heFwiLCBtYXgpO1xuICB9XG59O1xuLy8gUHJldmVudCBDaHJvbWUgRGV2VG9vbHMgd2FybmluZyBhYm91dCA8bGFiZWwgZm9yPVwiXCI+IHBvaW50aW5nIHRvIDx1LXByb2dyZXNzPlxuVUhUTUxQcm9ncmVzc0VsZW1lbnQuZm9ybUFzc29jaWF0ZWQgPSB0cnVlO1xudmFyIGlzTnVtZXJpYyA9ICh2YWx1ZSkgPT4gIU51bWJlci5pc05hTihOdW1iZXIucGFyc2VGbG9hdChgJHt2YWx1ZX1gKSkgJiYgTnVtYmVyLmlzRmluaXRlKE51bWJlcih2YWx1ZSkpO1xudmFyIGdldE51bWJlciA9IChlbCwga2V5KSA9PiB7XG4gIGNvbnN0IHZhbHVlID0gYXR0cihlbCwga2V5KTtcbiAgcmV0dXJuIGlzTnVtZXJpYyh2YWx1ZSkgPyBNYXRoLm1heCgwLCBOdW1iZXIucGFyc2VGbG9hdCh2YWx1ZSkpIDogbnVsbDtcbn07XG52YXIgc2V0TnVtYmVyID0gKGVsLCBrZXksIHZhbCkgPT4ge1xuICBpZiAodmFsID09PSBudWxsIHx8IGlzTnVtZXJpYyh2YWwpKSBhdHRyKGVsLCBrZXksIGAke3ZhbH1gKTtcbiAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBzZXQgbm9uLW51bWVyaWMgJyR7YXR0cn0nOiAnJHt2YWx9J2ApO1xufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtcHJvZ3Jlc3NcIiwgVUhUTUxQcm9ncmVzc0VsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTFByb2dyZXNzRWxlbWVudCB9O1xuIl0sIm5hbWVzIjpbIklTX0JST1dTRVIiLCJJU19BTkRST0lEIiwiX2EiLCJJU19CUk9XU0VSJDUiLCJTQUZFX0xBQkVMTEVEQlkiLCJESVNQTEFZX0JMT0NLIiwiVUhUTUxFbGVtZW50IiwiYXR0ciIsImVsIiwibmFtZSIsInZhbHVlIiwiX2EyIiwiZXZlbnRzIiwiYWN0aW9uIiwiZWxlbWVudCIsInJlc3QiLCJ0eXBlIiwib24iLCJvZmYiLCJhdHRhY2hTdHlsZSIsImNzcyIsImNyZWF0ZUVsZW1lbnQiLCJvYnNlcnZlcnMiLCJtdXRhdGlvbk9ic2VydmVyIiwib3B0aW9ucyIsIm9ic2VydmVyIiwiZGV0YWlsIiwiYXNCdXR0b24iLCJldmVudCIsImlzQ2xpY2siLCJnZXRSb290Iiwibm9kZSIsInJvb3QiLCJpZCIsInVzZUlkIiwidGFnTmFtZSIsInRleHQiLCJhdHRycyIsImN1c3RvbUVsZW1lbnRzIiwiaW5zdGFuY2UiLCJBUklBX0NPTlRST0xTIiwiQVJJQV9TRUxFQ1RFRCIsIlVIVE1MVGFic0VsZW1lbnQiLCJxdWVyeVdpdGhvdXROZXN0ZWQiLCJnZXRTZWxlY3RlZEluZGV4IiwiaW5kZXgiLCJzZXRTZWxlY3RlZCIsIlVIVE1MVGFiTGlzdEVsZW1lbnQiLCJ0YWIiLCJrZXkiLCJ0YWJzIiwicHJldiIsIm5leHQiLCJTS0lQX0FUVFJfQ0hBTkdFIiwiVUhUTUxUYWJFbGVtZW50IiwicGFuZWxzIiwibmV4dFBhbmVsIiwiZ2V0UGFuZWwiLCJwYW5lbCIsInRhYmxpc3QiLCJ0YWJMaXN0IiwiVUhUTUxUYWJQYW5lbEVsZW1lbnQiLCJpc0ZvY3VzYWJsZSIsInRhZyIsInNlbGYiLCJpZDIiLCJfX2RlZlByb3AiLCJfX2dldE93blByb3BTeW1ib2xzIiwiX19oYXNPd25Qcm9wIiwiX19wcm9wSXNFbnVtIiwiX19kZWZOb3JtYWxQcm9wIiwib2JqIiwiX19zcHJlYWRWYWx1ZXMiLCJhIiwiYiIsInByb3AiLCJJU19GSVJFRk9YIiwiSVNfSU9TIiwiSVNfQlJPV1NFUiQ0IiwiRk9DVVNfT1VUTElORSIsInRleHQyIiwidmFsIiwiTElWRSIsIkxJVkVfU1JfRklYIiwic3BlYWsiLCJzZXRWYWx1ZSIsImlucHV0IiwiZGF0YSIsIl9iIiwicHJvdG8iLCJJU19QUkVTUyIsImlzTW91c2VEb3duIiwiRVZFTlRTIiwiRVZFTlRfT05DRSIsIklTX0ZJUkVGT1hfREVTS1RPUCIsIklTX01PQklMRSIsIkZBTFNFIiwiVEVYVFMiLCJVSFRNTENvbWJvYm94RWxlbWVudCIsInJlbmRlciIsInN5bmNJbnB1dFZhbHVlIiwiXyIsInRhcmdldCIsIm9uQmx1ciIsIm9uQ2xpY2siLCJvbkZvY3VzIiwib25JbnB1dCIsIm9uS2V5RG93biIsImlzRGF0YSIsIl9mb2N1cyIsIl90ZXh0cyIsIml0ZW1zIiwiY29udHJvbCIsImxpc3QiLCJtdWx0aXBsZSIsImxhYmVsIiwiZWRpdHMiLCJhZGRlZE5vZGVzIiwicmVtb3ZlZE5vZGVzIiwic2hvdWxkQW5ub3VuY2UiLCJpbnB1dE1vZGUiLCJuZXh0Rm9jdXMiLCJfYTMiLCJpZHgiLCJzZWxlY3QiLCJpdGVtMiIsIm9wdGlvbiIsImxhYmVsMiIsImFyaWEiLCJvcHQiLCJpdGVtIiwic3luY0NsZWFyV2l0aElucHV0Iiwic3luY09wdGlvbnNXaXRoSXRlbXMiLCJfc3BlYWsiLCJ2YWx1ZXMiLCJkaXNwYXRjaE1hdGNoIiwiY2hhbmdlIiwiY3JlYXRhYmxlIiwicXVlcnkiLCJtYXRjaCIsIm8iLCJkaXNwYXRjaENoYW5nZSIsInJlbW92YWJsZSIsImFkZCIsInJlbW92ZSIsImkiLCJvbkJsdXJyZWQiLCJ4IiwieSIsImNsZWFyIiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0IiwicmVwZWF0IiwiaXNDb250cm9sIiwiaW5UZXh0IiwiZm9ybSIsIlFVSUNLX0VWRU5UIiwiZGVib3VuY2UiLCJjYWxsYmFjayIsImRlbGF5IiwidGltZXIiLCJhcmdzIiwiVVVJRCIsIlNDUk9MTEVSIiwiVEFSR0VUUyIsIlRBUkdFVFNfVVBEQVRFIiwidXBkYXRlIiwiUE9TSVRJT04iLCJhbmNob3JQb3NpdGlvbiIsImFuY2hvciIsInBsYWNlIiwiZm9yY2UiLCJwb3NpdGlvbiIsImlzSFRNTEFuY2hvciIsInRhcmdldFciLCJ0YXJnZXRIIiwiYW5jaG9yVyIsImFuY2hvckgiLCJ3aWR0aCIsImhlaWdodCIsInZpZXdXIiwidmlld0giLCJzY3JvbGxYIiwic2Nyb2xsWSIsImFuY2hvclgiLCJhbmNob3JZIiwiY2VudGVyWCIsImNlbnRlclkiLCJoYXNTcGFjZUxlZnQiLCJoYXNTcGFjZVJpZ2h0IiwiaGFzU3BhY2VPdmVyIiwiaGFzU3BhY2VVbmRlciIsImlzVmVydGljYWwiLCJpc1JpZ2h0IiwiaXNVbmRlciIsInZpZXdYIiwidmlld1kiLCJjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyIiwicXVldWUiLCJvbkZyYW1lIiwib25UaW1lciIsIk1VVEFUT1JTIiwib25NdXRhdGlvbiIsImNsYXNzTmFtZSIsImVsZW1zIiwibXV0YXRvciIsIm9uTG9hZGVkIiwicnVuIiwiaXNJbnB1dExpa2UiLCJNQVRPTU8iLCJFTkFCTEVEIiwiYW5hbHl0aWNzIiwibWF0b21vSWQiLCJlbmFibGVkIiwidXJsIiwidGl0bGUiLCJjYXRlZ29yeSIsInYiLCJyZXN1bHRzIiwiZ2V0U3RlcHMiLCJub3ciLCJtYXgiLCJzaG93Iiwib2Zmc2V0Iiwic3RhcnQiLCJlbmQiLCJwYWdlcyIsInBhZ2luYXRpb24iLCJjdXJyZW50IiwidG90YWwiLCJwYWdlIiwic2hlZXQiLCJDU1NfQVBQIiwic3R5bGVzIiwiQ1NTX1NUSUNLWSIsIkNTU19UT0dHTEUiLCJDU1NfU0lERUJBUiIsInVzZVRyYW5zaXRpb24iLCJ0b2dnbGVBcHBFeHBhbmRlZCIsImhhbmRsZVRvZ2dsZUNsaWNrIiwic3RvcCIsInNpZGViYXIiLCJoYW5kbGVSZXNpemUiLCJNSU5fWSIsIlNDUk9MTF9VUCIsIlNUSUNLIiwiU1RJQ0tfRUwiLCJTVElDS19IIiwiU1RJQ0tfWSIsIlNUVUNLIiwiV0lOX0giLCJXSU5fWSIsImhhbmRsZU11dGF0aW9uIiwic3RpY2t5IiwiaGFuZGxlU2Nyb2xsIiwiTkVYVF9ZIiwiTkVYVF9VUCIsIkNTU19CUkVBRENSVU1CUyIsImJyZWFkY3J1bWJzIiwiYnJlYWRjdW1icyIsImNydW1iIiwibGVuZ3RoIiwiQ1NTX0RJQUxPRyIsIkRJQUxPR1MiLCJoYW5kbGVNb2RhbCIsImRpYWxvZyIsImhhbmRsZUNsaWNrIiwiaGFuZGxlSW5qZWN0IiwiZmlyc3QiLCJJU19CUk9XU0VSJDIiLCJESVNBQkxFRCIsIlNFTEVDVEVEIiwiVUhUTUxPcHRpb25FbGVtZW50IiwiTElWRV9USU1FUiIsIklOUFVUX0RFQk9VTkNFIiwiRVZFTlRTX0lOUFVUIiwiVUhUTUxEYXRhTGlzdEVsZW1lbnQiLCJkaXNjb25uZWN0SW5wdXQiLCJfcHJldiIsInNldHVwSW5wdXQiLCJzZXRFeHBhbmRlZCIsIm9wZW4iLCJpc0lucHV0IiwicmVsYXRlZFRhcmdldCIsIl9yb290IiwiX2lucHV0IiwiZmlsdGVyIiwiaGlkZGVuIiwidmlzaWJsZSIsIkNTU19GSUVMRCIsIkNTU19WQUxJREFUSU9OUyIsIkNTU19WQUxJREFUSU9OIiwiZ2V0VGV4dCIsInN0eWxlIiwiZmllbGRzIiwidmFsaWRhdGUiLCJmaWVsZCIsImxhYmVscyIsImRlc2NzIiwidmFsaWRzIiwiY29tYm9ib3giLCJ2YWxpZCIsImRlc2MiLCJyZW5kZXJDb21ib2JveCIsInJlbmRlckNvdW50ZXIiLCJyZW5kZXJUZXh0YXJlYVNpemUiLCJ0ZXh0YXJlYSIsImxpbWl0IiwicmVtYWluZGVyIiwibmV4dEludmFsaWQiLCJwcmV2SW52YWxpZCIsIm92ZXIiLCJ1bmRlciIsImhhbmRsZVRvZ2dsZSIsIm5ld1N0YXRlIiwiaGFuZGxlSW5wdXQiLCJoYW5kbGVWYWxkaWF0aW9uIiwiaGFuZGxlQmVmb3JlQ2hhbmdlIiwiQ1NTX0ZJRUxEU0VUIiwiQVJJQV9ERVNDIiwiQVJJQV9JTlZBTElEIiwiZmllbGRzZXRzIiwiZmllbGRzZXQiLCJpbnB1dHMiLCJ2YWxpZElkIiwiQ1NTX0xPR08iLCJsb2dvIiwiaWNvbiIsInN2ZyIsImlzRG90IiwiYmFjayIsIkNTU19QT1BPVkVSIiwiT1BFTl9QT1BPVkVSUyIsImhhbmRsZUxpbmtDbGljayIsImNsb3NlIiwicG9wb3ZlciIsIkNTU19UQUJMRSIsInRhYmxlcyIsInRhYmxlIiwidGhzIiwiZ3JvdXAiLCJpc1Rib2R5Iiwicm93IiwiY2VsbCIsIkNTU19UT0dHTEVHUk9VUCIsImhhbmRsZUtleURvd24iLCJtb3ZlIiwiREVTQ1JJQkVEQlkiLCJFU0MiLCJMQUJFTExFREJZIiwiUE9TSVRJT05fQ1NTX1BST1BFUlRZIiwiVEhST1RUTEVfREVMQVkiLCJUT09MVElQIiwiQU5DSE9SIiwiTEFTVF9DQUxMIiwiVEhST1RUTEUiLCJoYW5kbGVNb3ZlIiwid2FpdCIsImhhbmRsZU1vdmVUaHJvdHRsZWQiLCJjb250ZW50IiwiaGFkTGFiZWwiLCJoYXNMYWJlbCIsIklTX0JST1dTRVIkMSIsIlVIVE1MRGV0YWlsc0VsZW1lbnQiLCJoaWRlIiwidURldGFpbHNMaXN0IiwidURldGFpbHMiLCJzdW1tYXJ5IiwiaXNTdW1tYXJ5IiwiVUhUTUxTdW1tYXJ5RWxlbWVudCIsImdldExhYmVsIiwiYWNjIiwiZWwyIiwiVUhUTUxQcm9ncmVzc0VsZW1lbnQiLCJyb2xlSW1hZ2UiLCJwZXJjZW50YWdl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R0FBRyxLQUFLLFdBQWEsRUFBRSxFQUFFLEVBQ2pEQSxFQUFLLEtBQU0sYUFBYzRHLEVBQU0sS0FBSSxDQUFFLEVBQ3JDNUcsRUFBSyxLQUFNLGtCQUFtQixJQUFJLEVBQ2xDQSxFQUFLLEtBQU0sZ0JBQWlCLEtBQUssRUFDakNBLEVBQUssS0FBTSxnQkFBaUIsR0FBRyxFQUMvQkEsRUFBSyxLQUFNLGdCQUFpQixHQUFHa1gsQ0FBVSxFQUFFLEVBQzNDbFgsRUFBSyxLQUFNLE9BQVFpWCxFQUFZLE1BQVEsYUFBYSxFQUNwRG5VLEdBQW1CLEVBQ3ZCLENBQ0UsSUFBSSxRQUFTLENBQ1gsTUFBTThELEVBQVEsS0FBSyxRQUFRLGtCQUFrQixFQUN2Q2xELEVBQU0vQixHQUFNLElBQUksRUFDdEIsT0FBSWlGLElBQU9BLEVBQU0sUUFBVWxELEdBQ2hCbkMsR0FBUSxJQUFJLEVBQUUsaUJBQ3ZCLGNBQWNtQyxDQUFHLElBQ2xCLENBRUwsQ0FDRSxJQUFJLFVBQVcsQ0FDYixPQUFPLEtBQUssUUFBVSxLQUFPLEdBQUssS0FBSyxJQUFJLEtBQUssTUFBUSxLQUFLLElBQUssQ0FBQyxDQUN2RSxDQUNFLElBQUksT0FBUSxDQUNWLE9BQU95VCxHQUFVLEtBQU0sT0FBTyxDQUNsQyxDQUNFLElBQUksTUFBTWhYLEVBQU8sQ0FDZmlYLEdBQVUsS0FBTSxRQUFTalgsQ0FBSyxDQUNsQyxDQUNFLElBQUksS0FBTSxDQUNSLE9BQU9nWCxHQUFVLEtBQU0sS0FBSyxHQUFLLENBQ3JDLENBQ0UsSUFBSSxJQUFJM0osRUFBSyxDQUNYNEosR0FBVSxLQUFNLE1BQU81SixDQUFHLENBQzlCLENBQ0EsRUFFQXdKLEdBQXFCLGVBQWlCLEdBQ3RDLElBQUlLLEdBQWFsWCxHQUFVLENBQUMsT0FBTyxNQUFNLE9BQU8sV0FBVyxHQUFHQSxDQUFLLEVBQUUsQ0FBQyxHQUFLLE9BQU8sU0FBUyxPQUFPQSxDQUFLLENBQUMsRUFDcEdnWCxHQUFZLENBQUNsWCxFQUFJeUMsSUFBUSxDQUMzQixNQUFNdkMsRUFBUUgsRUFBS0MsRUFBSXlDLENBQUcsRUFDMUIsT0FBTzJVLEdBQVVsWCxDQUFLLEVBQUksS0FBSyxJQUFJLEVBQUcsT0FBTyxXQUFXQSxDQUFLLENBQUMsRUFBSSxJQUNwRSxFQUNJaVgsR0FBWSxDQUFDblgsRUFBSXlDLEVBQUtnQyxJQUFRLENBQ2hDLEdBQUlBLElBQVEsTUFBUTJTLEdBQVUzUyxDQUFHLEVBQUcxRSxFQUFLQyxFQUFJeUMsRUFBSyxHQUFHZ0MsQ0FBRyxFQUFFLE1BQ3JELE9BQU0sSUFBSSxNQUFNLDhCQUE4QjFFLENBQUksT0FBTzBFLENBQUcsR0FBRyxDQUN0RSxFQUNBLE9BQUEzQyxHQUFlLE9BQU8sYUFBY2lWLEVBQW9CIiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwxMCwxOCwxOV19
|
|
21
|
+
@keyframes indeterminate { from { background-position-x: 100% } to { background-position-x: 0 } }`))}connectedCallback(){this.attributeChangedCallback()}attributeChangedCallback(){if(ie)return;ie=!0;const t=ns||an,e=Math.max(0,Math.round(this.position*100));this.style.setProperty("--percentage",`${e}%`);let o=ls(this);if(t&&(o=`${o.replace(/\d+%$/,"")} ${e}%`),an)for(const n of this.labels)w(n,"aria-label",o);w(this,"aria-busy",`${this.position===-1}`),w(this,"aria-label",o.trim()),w(this,"aria-labelledby",null),w(this,"aria-valuemax","100"),w(this,"aria-valuemin","0"),w(this,"aria-valuenow",`${e}`),w(this,"role",t?"img":"progressbar"),ie=!1}get labels(){const t=this.closest("label:not([for])"),e=rs(this);return t&&(t.htmlFor=e),cn(this).querySelectorAll(`label[for="${e}"]`)}get position(){return this.value===null?-1:Math.min(this.value/this.max,1)}get value(){return fn(this,"value")}set value(t){mn(this,"value",t)}get max(){return fn(this,"max")||1}set max(t){mn(this,"max",t)}};un.formAssociated=!0;var pn=t=>!Number.isNaN(Number.parseFloat(`${t}`))&&Number.isFinite(Number(t)),fn=(t,e)=>{const o=w(t,e);return pn(o)?Math.max(0,Number.parseFloat(o)):null},mn=(t,e,o)=>{if(o===null||pn(o))w(t,e,`${o}`);else throw new Error(`Failed to set non-numeric '${w}': '${o}'`)};return as.define("u-progress",un),T.UHTMLComboboxElement=st,T.UHTMLTabElement=$e,T.UHTMLTabListElement=Ee,T.UHTMLTabPanelElement=Se,T.UHTMLTabsElement=we,T.analytics=Zn,T.pagination=ri,T.styles=ti,T.toggleAppExpanded=So,T.version=Wn,Object.defineProperty(T,Symbol.toStringTag,{value:"Module"}),T}({});
|
|
22
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtY29tYm9ib3gvZGlzdC91LWNvbWJvYm94LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL2Rlc2lnbnN5c3RlbS91dGlscy50cyIsIi4uL2Rlc2lnbnN5c3RlbS9hbmFseXRpY3MvYW5hbHl0aWNzLnRzIiwiLi4vZGVzaWduc3lzdGVtL2FwcC9hcHAtdG9nZ2xlLmpzIiwiLi4vZGVzaWduc3lzdGVtL2FwcC9hcHAtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vcGFnaW5hdGlvbi9wYWdpbmF0aW9uLWhlbHBlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9icmVhZGNydW1icy9icmVhZGNydW1icy1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9kaWFsb2cvZGlhbG9nLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2Vycm9yc3VtbWFyeS9lcnJvcnN1bW1hcnktb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kYXRhbGlzdC9kaXN0L3UtZGF0YWxpc3QuanMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGQvZmllbGQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGRzZXQvZmllbGRzZXQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vbG9nby9sb2dvLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3BvcG92ZXIvcG9wb3Zlci1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90YWJsZS90YWJsZS1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b2dnbGVncm91cC90b2dnbGVncm91cC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b29sdGlwL3Rvb2x0aXAtb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kZXRhaWxzL2Rpc3QvdS1kZXRhaWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtcHJvZ3Jlc3MvZGlzdC91LXByb2dyZXNzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcblxuLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0FORFJPSUQgPSBJU19CUk9XU0VSICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19GSVJFRk9YID0gSVNfQlJPV1NFUiAmJiAvZmlyZWZveC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfSU9TID0gSVNfQlJPV1NFUiAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgRk9DVVNfT1VUTElORSA9IFwib3V0bGluZTogMXB4IGRvdHRlZDsgb3V0bGluZTogNXB4IGF1dG8gSGlnaGxpZ2h0OyBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3JcIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvYnNlcnZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBtdXRhdGlvbk9ic2VydmVyID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgcmV0dXJuIG9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gIHRyeSB7XG4gICAgb2JzZXJ2ZXJzLmdldChlbGVtZW50KS5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgfSBjYXRjaCAoX2Vycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQyLCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0MikgZWwudGV4dENvbnRlbnQgPSB0ZXh0MjtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIExJVkU7XG52YXIgTElWRV9TUl9GSVggPSAwO1xudmFyIHNwZWFrID0gKHRleHQyKSA9PiB7XG4gIGlmICghTElWRSkge1xuICAgIExJVkUgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIExJVkUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246Zml4ZWQ7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXBcIjtcbiAgICBhdHRyKExJVkUsIFwiYXJpYS1saXZlXCIsIFwiYXNzZXJ0aXZlXCIpO1xuICB9XG4gIGlmICghTElWRS5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmQoTElWRSk7XG4gIGlmICh0ZXh0MikgTElWRS50ZXh0Q29udGVudCA9IGAke3RleHQyfSR7TElWRV9TUl9GSVgrKyAlIDIgPyBcIlxceEEwXCIgOiBcIlwifWA7XG59O1xudmFyIHNldFZhbHVlID0gKGlucHV0LCBkYXRhLCB0eXBlID0gXCJcIikgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlLCBkYXRhLCBpbnB1dFR5cGU6IHR5cGUgfTtcbiAgY29uc3QgcHJvdG8gPSBIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImJlZm9yZWlucHV0XCIsIGV2ZW50KSk7XG4gIChfYiA9IChfYTIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBcInZhbHVlXCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwoaW5wdXQsIGRhdGEpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiaW5wdXRcIiwgZXZlbnQpKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJjaGFuZ2VcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbn07XG52YXIgSVNfUFJFU1MgPSBmYWxzZTtcbnZhciBpc01vdXNlRG93biA9IChldmVudCkgPT4ge1xuICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gXCJtb3VzZXVwXCIpIElTX1BSRVNTID0gZmFsc2U7XG4gIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSBcIm1vdXNlZG93blwiKSB7XG4gICAgSVNfUFJFU1MgPSB0cnVlO1xuICAgIG9uKGRvY3VtZW50LCBcIm1vdXNldXBcIiwgaXNNb3VzZURvd24sIHsgb25jZTogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gSVNfUFJFU1M7XG59O1xuXG4vLyB1LWNvbWJvYm94LnRzXG52YXIgRVZFTlRTID0gXCJiZWZvcmVpbnB1dCxibHVyLGZvY3VzLGNsaWNrLGlucHV0LGtleWRvd24sbW91c2Vkb3duXCI7XG52YXIgRVZFTlRfT05DRSA9IHsgb25jZTogdHJ1ZSwgcGFzc2l2ZTogdHJ1ZSB9O1xudmFyIElTX0ZJUkVGT1hfREVTS1RPUCA9IElTX0ZJUkVGT1ggJiYgIUlTX0FORFJPSUQ7XG52YXIgSVNfTU9CSUxFID0gSVNfQU5EUk9JRCB8fCBJU19JT1M7XG52YXIgRkFMU0UgPSBcImZhbHNlXCI7XG52YXIgVEVYVFMgPSB7XG4gIGFkZGVkOiBcIkFkZGVkXCIsXG4gIGVtcHR5OiBcIk5vIHNlbGVjdGVkXCIsXG4gIGZvdW5kOiBcIk5hdmlnYXRlIGxlZnQgdG8gZmluZCAlZCBzZWxlY3RlZFwiLFxuICBpbnZhbGlkOiBcIkludmFsaWQgdmFsdWVcIixcbiAgb2Y6IFwib2ZcIixcbiAgcmVtb3ZlOiBcIlByZXNzIHRvIHJlbW92ZVwiLFxuICByZW1vdmVkOiBcIlJlbW92ZWRcIlxufTtcbnZhciBVSFRNTENvbWJvYm94RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9pdGVtID0gXCJcIjtcbiAgICB0aGlzLl9zcGVhayA9IFwiXCI7XG4gICAgdGhpcy5fdGV4dHMgPSBfX3NwcmVhZFZhbHVlcyh7fSwgVEVYVFMpO1xuICAgIHRoaXMuX3ZhbHVlID0gXCJcIjtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAgICAgLy8gQ29udGVudCBzbG90XG4gICAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGA6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jazsgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApIH0gLyogTXVzdCBiZSBkaXNwbGF5IGJsb2NrIGluIFNhZmFyaSB0byBhbGxvdyBmb2N1cyBpbnNpZGUgKi9cblx0XHRcdFx0Omhvc3QoOm5vdChbZGF0YS1tdWx0aXBsZV0pKSA6OnNsb3R0ZWQoZGF0YSksXG5cdFx0XHRcdDpob3N0KFtkYXRhLW11bHRpcGxlPVwiZmFsc2VcIl0pIDo6c2xvdHRlZChkYXRhKSB7IGRpc3BsYXk6IG5vbmUgfSAvKiBIaWRlIGRhdGEgaWYgbm90IG11bHRpcGxlICovXG5cdFx0XHRcdDo6c2xvdHRlZChpbnB1dFtpbnB1dG1vZGU9XCJub25lXCJdKSB7IG91dGxpbmU6IG5vbmUgfSAvKiBIaWRlIHRlbXBvcmFyeSBmb3VjcyBvdXRsaW5lIGZsYXNoICovXG5cdFx0XHRcdDo6c2xvdHRlZChkZWwpIHsgdGV4dC1kZWNvcmF0aW9uOiBub25lIH1cblx0XHRcdFx0OjpzbG90dGVkKGRhdGE6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBvaW50ZXItZXZlbnRzOiBub25lIH1cbiAgICAgICAgOjpzbG90dGVkKGRhdGEpOjphZnRlciB7IGNvbnRlbnQ6ICdcXFxcMDBENyc7IGNvbnRlbnQ6ICdcXFxcMDBENycgLyAnJzsgcGFkZGluZy1pbmxpbmU6IC41Y2g7IHBvaW50ZXItZXZlbnRzOiBhdXRvOyBjdXJzb3I6IHBvaW50ZXIgfVxuICAgICAgICA6OnNsb3R0ZWQoZGF0YTpmb2N1cykgeyAke0ZPQ1VTX09VVExJTkV9IH1gXG4gICAgICApXG4gICAgKTtcbiAgfVxuICAvLyBMb2NhbGx5IHN0b3JlIHZhbHVlIHRvIHN0b3JlIHZhbHVlIGJlZm9yZSBpbnB1dC1jbGlja1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoVEVYVFMpLm1hcCgoa2V5KSA9PiBgZGF0YS1zci0ke2tleX1gKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLl9yb290ID0gZ2V0Um9vdCh0aGlzKTtcbiAgICBvbih0aGlzLCBFVkVOVFMsIHRoaXMsIHRydWUpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywge1xuICAgICAgYXR0cmlidXRlRmlsdGVyOiBbXCJ2YWx1ZVwiLCBcImlkXCJdLFxuICAgICAgLy8gUmVzcG9uZCB0byBjaGFuZ2VzIGluIDxkYXRhPiB2YWx1ZSBvciBjaGFuZ2Ugb2YgaWQgZm9yIDxkYXRhbGlzdD4gdG8gcmVjb25uZWN0IHdpdGggaW5wdXRcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxuICAgICAgLy8gUmVzcG9uZCB0byBjaGFuZ2VzIGluIDxkYXRhPiB0ZXh0Q29udGVudFxuICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgc3VidHJlZTogdHJ1ZVxuICAgIH0pO1xuICAgIHNldFRpbWVvdXQocmVuZGVyLCAwLCB0aGlzKTtcbiAgICBzZXRUaW1lb3V0KHN5bmNJbnB1dFZhbHVlLCAwLCB0aGlzKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socHJvcCwgXywgdmFsKSB7XG4gICAgY29uc3QgdGV4dDIgPSBwcm9wLnNwbGl0KFwiZGF0YS1zci1cIilbMV07XG4gICAgaWYgKFRFWFRTW3RleHQyXSkgdGhpcy5fdGV4dHNbdGV4dDJdID0gdmFsIHx8IFRFWFRTW3RleHQyXTtcbiAgfVxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIGZhbHNlKTtcbiAgICBvZmYodGhpcywgRVZFTlRTLCB0aGlzLCB0cnVlKTtcbiAgICB0aGlzLl9pdGVtcyA9IHRoaXMuX2NsZWFyID0gdGhpcy5fZm9jdXMgPSB0aGlzLl9jb250cm9sID0gdm9pZCAwO1xuICAgIHRoaXMuX2xpc3QgPSB0aGlzLl9vcHRpb25zID0gdGhpcy5fcm9vdCA9IHZvaWQgMDtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkgcmV0dXJuO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJlZm9yZWlucHV0XCIpIHRoaXMuX3ZhbHVlID0gKHRhcmdldCA9PSBudWxsID8gdm9pZCAwIDogdGFyZ2V0LnZhbHVlKSB8fCBcIlwiO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJsdXJcIikgb25CbHVyKHRoaXMpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImNsaWNrXCIpIG9uQ2xpY2sodGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImZvY3VzXCIpIG9uRm9jdXModGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImlucHV0XCIpIG9uSW5wdXQodGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgb25LZXlEb3duKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgaXNNb3VzZURvd24oZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcIm11dGF0aW9uXCIpIHJlbmRlcih0aGlzLCBldmVudCk7XG4gIH1cbiAgZ2V0IG11bHRpcGxlKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gYXR0cih0aGlzLCBcImRhdGEtbXVsdGlwbGVcIikpICE9IG51bGwgPyBfYTIgOiBGQUxTRSkgIT09IEZBTFNFO1xuICB9XG4gIHNldCBtdWx0aXBsZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJkYXRhLW11bHRpcGxlXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBjcmVhdGFibGUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKChfYTIgPSBhdHRyKHRoaXMsIFwiZGF0YS1jcmVhdGFibGVcIikpICE9IG51bGwgPyBfYTIgOiBGQUxTRSkgIT09IEZBTFNFO1xuICB9XG4gIHNldCBjcmVhdGFibGUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwiZGF0YS1jcmVhdGFibGVcIiwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgZ2V0IGNvbnRyb2woKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpXG4gICAgICB0aGlzLl9jb250cm9sID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIik7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2w7XG4gIH1cbiAgZ2V0IGxpc3QoKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fbGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpXG4gICAgICB0aGlzLl9saXN0ID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwidS1kYXRhbGlzdCxkYXRhbGlzdFwiKTtcbiAgICByZXR1cm4gdGhpcy5fbGlzdDtcbiAgfVxuICBnZXQgY2xlYXIoKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fY2xlYXIpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuaXNDb25uZWN0ZWQpKSB0aGlzLl9jbGVhciA9IHRoaXMucXVlcnlTZWxlY3RvcihcImRlbFwiKTtcbiAgICByZXR1cm4gdGhpcy5fY2xlYXI7XG4gIH1cbiAgZ2V0IGl0ZW1zKCkge1xuICAgIGlmICghdGhpcy5faXRlbXMpIHRoaXMuX2l0ZW1zID0gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZShcImRhdGFcIik7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICB9XG4gIGdldCBvcHRpb25zKCkge1xuICAgIHZhciBfYTIsIF9iO1xuICAgIGlmICghdGhpcy5fb3B0aW9ucykge1xuICAgICAgY29uc3QgdGFnID0gKChfYTIgPSB0aGlzLmxpc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIubm9kZU5hbWUpID09PSBcIlUtREFUQUxJU1RcIiA/IFwidS1vcHRpb25cIiA6IFwib3B0aW9uXCI7XG4gICAgICB0aGlzLl9vcHRpb25zID0gKF9iID0gdGhpcy5saXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cbiAgZ2V0IHZhbHVlcygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuaXRlbXNdLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSk7XG4gIH1cbn07XG52YXIgdGV4dCA9IChlbCkgPT4ge1xuICB2YXIgX2EyO1xuICByZXR1cm4gKChfYTIgPSBlbCA9PSBudWxsID8gdm9pZCAwIDogZWwudGV4dENvbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xufTtcbnZhciBpc0RhdGEgPSAoZWwpID0+IGVsIGluc3RhbmNlb2YgSFRNTERhdGFFbGVtZW50O1xudmFyIGlzRGlzYWJsZWQgPSAoeyBjb250cm9sIH0pID0+IChjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmRpc2FibGVkKSB8fCAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5yZWFkT25seSkgfHwgZmFsc2U7XG52YXIgcmVuZGVyID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTIsIF9iO1xuICBjb25zdCB7IF9mb2N1cywgX3RleHRzLCBpdGVtcywgY29udHJvbCwgbGlzdCwgbXVsdGlwbGUgfSA9IHNlbGY7XG4gIGxldCBsYWJlbCA9IGAke3RleHQoKF9hMiA9IGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wubGFiZWxzKSA9PSBudWxsID8gdm9pZCAwIDogX2EyWzBdKX0ke211bHRpcGxlID8gYCwgJHtpdGVtcy5sZW5ndGggPyBfdGV4dHMuZm91bmQucmVwbGFjZShcIiVkXCIsIGAke2l0ZW1zLmxlbmd0aH1gKSA6IF90ZXh0cy5lbXB0eX1gIDogXCJcIn1gO1xuICBjb25zdCBlZGl0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHsgYWRkZWROb2RlcywgcmVtb3ZlZE5vZGVzIH0gb2YgKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC5kZXRhaWwpIHx8IFtdKSB7XG4gICAgZm9yIChjb25zdCBlbCBvZiBhZGRlZE5vZGVzKSBpZiAoaXNEYXRhKGVsKSkgZWRpdHMudW5zaGlmdChlbCk7XG4gICAgZm9yIChjb25zdCBlbCBvZiByZW1vdmVkTm9kZXMpIGlmIChpc0RhdGEoZWwpKSBlZGl0cy5wdXNoKGVsKTtcbiAgfVxuICBjb25zdCBzaG91bGRBbm5vdW5jZSA9IG11bHRpcGxlID8gZWRpdHMubGVuZ3RoID09PSAxIDogZWRpdHNbMF0gPT09IF9mb2N1cztcbiAgaWYgKF9mb2N1cyAmJiBjb250cm9sICYmIHNob3VsZEFubm91bmNlKSB7XG4gICAgY29uc3QgYXJpYUV4cGFuZGVkID0gYXR0cihjb250cm9sLCBcImFyaWEtZXhwYW5kZWRcIik7XG4gICAgY29uc3QgaW5wdXRNb2RlID0gYXR0cihjb250cm9sLCBcImlucHV0bW9kZVwiKTtcbiAgICBjb25zdCBuZXh0Rm9jdXMgPSBpc0RhdGEoX2ZvY3VzKSA/IGNvbnRyb2wgOiBfZm9jdXM7XG4gICAgY29uc3QgaXNSZW1vdmUgPSAhZWRpdHNbMF0uaXNDb25uZWN0ZWQ7XG4gICAgc2VsZi5fc3BlYWsgPSBgJHtfdGV4dHNbaXNSZW1vdmUgPyBcInJlbW92ZWRcIiA6IFwiYWRkZWRcIl19ICR7dGV4dChlZGl0c1swXSl9LCBgO1xuICAgIGlmIChJU19NT0JJTEUgfHwgX2ZvY3VzID09PSBjb250cm9sKSBzcGVhayhzZWxmLl9zcGVhayk7XG4gICAgaWYgKGNvbnRyb2wgIT09IG5leHRGb2N1cykge1xuICAgICAgYXR0cihjb250cm9sLCBcImFyaWEtZXhwYW5kZWRcIiwgbnVsbCk7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIsIFwibm9uZVwiKTtcbiAgICAgIGxhYmVsID0gXCJcXHhBMFwiO1xuICAgICAgY29udHJvbC5mb2N1cygpO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHZhciBfYTM7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiLCBhcmlhRXhwYW5kZWQpO1xuICAgICAgYXR0cihjb250cm9sLCBcImlucHV0bW9kZVwiLCBpc1JlbW92ZSA/IFwibm9uZVwiIDogaW5wdXRNb2RlKTtcbiAgICAgIChfYTMgPSBuZXh0Rm9jdXMgPT0gbnVsbCA/IHZvaWQgMCA6IG5leHRGb2N1cy5mb2N1cykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMy5jYWxsKG5leHRGb2N1cyk7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIsIGlucHV0TW9kZSk7XG4gICAgICBzZWxmLl9zcGVhayA9IFwiXCI7XG4gICAgICBpZiAoSVNfRklSRUZPWF9ERVNLVE9QKSBvbihzZWxmLCBcImJsdXJcIiwgKCkgPT4gcmVuZGVyKHNlbGYpLCBFVkVOVF9PTkNFKTtcbiAgICAgIGVsc2Ugc2V0VGltZW91dChyZW5kZXIsIDEwMCwgc2VsZik7XG4gICAgfSwgMTAwKTtcbiAgfVxuICBsZXQgaWR4ID0gMDtcbiAgY29uc3Qgc2VsZWN0ID0gc2VsZi5xdWVyeVNlbGVjdG9yKFwic2VsZWN0XCIpO1xuICBjb25zdCByZW1vdmUgPSBpc0Rpc2FibGVkKHNlbGYpID8gXCJcIiA6IGAke190ZXh0cy5yZW1vdmV9LCBgO1xuICBmb3IgKGNvbnN0IGl0ZW0yIG9mIGl0ZW1zKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gc2VsZWN0ID09IG51bGwgPyB2b2lkIDAgOiBzZWxlY3Qub3B0aW9uc1tpZHhdO1xuICAgIGNvbnN0IGxhYmVsMiA9IHRleHQoaXRlbTIpO1xuICAgIGNvbnN0IHZhbHVlID0gaXRlbTIudmFsdWUgfHwgbGFiZWwyO1xuICAgIGNvbnN0IGFyaWEgPSBgJHtzZWxmLl9zcGVha30ke2xhYmVsMn0sICR7cmVtb3ZlfSR7KytpZHh9ICR7X3RleHRzLm9mfSAke2l0ZW1zLmxlbmd0aH1gO1xuICAgIGF0dHIoaXRlbTIsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgICBhdHRyKGl0ZW0yLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgICBhdHRyKGl0ZW0yLCBcInRhYmluZGV4XCIsIFwiLTFcIik7XG4gICAgYXR0cihpdGVtMiwgXCJhcmlhLWxhYmVsXCIsIGFyaWEpO1xuICAgIGlmIChvcHRpb24pIE9iamVjdC5hc3NpZ24ob3B0aW9uLCB7IHRleHRDb250ZW50OiBsYWJlbDIsIHZhbHVlIH0pO1xuICAgIGVsc2Ugc2VsZWN0ID09IG51bGwgPyB2b2lkIDAgOiBzZWxlY3QuYXBwZW5kQ2hpbGQobmV3IE9wdGlvbihsYWJlbDIsIHZhbHVlLCB0cnVlLCB0cnVlKSk7XG4gIH1cbiAgaWYgKHNlbGVjdCkgYXR0cihzZWxlY3QsIFwibXVsdGlwbGVcIiwgbXVsdGlwbGUgPyBcIlwiIDogbnVsbCk7XG4gIGZvciAoY29uc3Qgb3B0IG9mIFsuLi4oc2VsZWN0ID09IG51bGwgPyB2b2lkIDAgOiBzZWxlY3Qub3B0aW9ucykgfHwgW11dLnNsaWNlKGlkeCkpIG9wdC5yZW1vdmUoKTtcbiAgaWYgKCFtdWx0aXBsZSAmJiBpZHggPiAxKVxuICAgIGNvbnNvbGUud2FybihcInUtY29tYm9ib3g6IE11bHRpcGxlIDxkYXRhPiBmb3VuZCBpbiBzaW5nbGUgbW9kZS5cIik7XG4gIGlmIChsaXN0KSBhdHRyKGxpc3QsIFwiYXJpYS1tdWx0aXNlbGVjdGFibGVcIiwgYCR7bXVsdGlwbGV9YCk7XG4gIGlmIChjb250cm9sKSBhdHRyKGNvbnRyb2wsIFwibGlzdFwiLCB1c2VJZChsaXN0KSk7XG4gIGlmIChjb250cm9sKSBhdHRyKGNvbnRyb2wsIFwiYXJpYS1sYWJlbFwiLCBgJHtzZWxmLl9zcGVha30ke2xhYmVsfWApO1xuICBjb25zdCBpdGVtID0gdGV4dChpdGVtc1swXSk7XG4gIGlmIChpdGVtICE9PSBzZWxmLl9pdGVtKSBzeW5jSW5wdXRWYWx1ZShzZWxmKTtcbiAgc2VsZi5faXRlbSA9IGl0ZW07XG4gIHN5bmNDbGVhcldpdGhJbnB1dChzZWxmKTtcbiAgc3luY09wdGlvbnNXaXRoSXRlbXMoc2VsZik7XG4gIChfYiA9IG11dGF0aW9uT2JzZXJ2ZXIoc2VsZikpID09IG51bGwgPyB2b2lkIDAgOiBfYi50YWtlUmVjb3JkcygpO1xufTtcbnZhciBzeW5jQ2xlYXJXaXRoSW5wdXQgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoc2VsZi5jbGVhcikgYXR0cihzZWxmLmNsZWFyLCBcInJvbGVcIiwgXCJidXR0b25cIik7XG4gIGlmIChzZWxmLmNsZWFyKSBzZWxmLmNsZWFyLmhpZGRlbiA9ICEoKF9hMiA9IHNlbGYuY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi52YWx1ZSkgfHwgaXNEaXNhYmxlZChzZWxmKTtcbn07XG52YXIgc3luY09wdGlvbnNXaXRoSXRlbXMgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IF9zcGVhaywgb3B0aW9ucyA9IFtdLCB2YWx1ZXMgfSA9IHNlbGY7XG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IChfYTIgPSBhdHRyKG9wdCwgXCJ2YWx1ZVwiKSkgIT0gbnVsbCA/IF9hMiA6IHRleHQob3B0KTtcbiAgICBhdHRyKG9wdCwgXCJhcmlhLWxhYmVsXCIsIF9zcGVhayA/IGAke19zcGVha30ke3RleHQob3B0KX1gIDogbnVsbCk7XG4gICAgYXR0cihvcHQsIFwic2VsZWN0ZWRcIiwgdmFsdWVzLmluY2x1ZGVzKHZhbHVlKSA/IFwiXCIgOiBudWxsKTtcbiAgfVxufTtcbnZhciBzeW5jSW5wdXRWYWx1ZSA9IChzZWxmKSA9PiB7XG4gIGNvbnN0IHsgbXVsdGlwbGUsIGNvbnRyb2wsIGl0ZW1zIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9IHRleHQoaXRlbXNbMF0pO1xuICBpZiAoIW11bHRpcGxlICYmIGNvbnRyb2wgJiYgdmFsdWUgIT09IGNvbnRyb2wudmFsdWUpXG4gICAgc2V0VmFsdWUoY29udHJvbCwgdmFsdWUsIHZhbHVlID8gXCJpbnNlcnRUZXh0XCIgOiBcImRlbGV0ZUNvbnRlbnRcIik7XG59O1xudmFyIGRpc3BhdGNoTWF0Y2ggPSAoc2VsZiwgY2hhbmdlID0gdHJ1ZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IF90ZXh0cywgb3B0aW9ucyA9IFtdLCBjcmVhdGFibGUsIGNvbnRyb2wsIGl0ZW1zLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgdmFsdWUgPSAoKF9hMiA9IGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBxdWVyeSA9IHZhbHVlLnRvTG93ZXJDYXNlKCkgfHwgbnVsbDtcbiAgbGV0IG1hdGNoID0gWy4uLm9wdGlvbnNdLmZpbmQoXG4gICAgKG9wdCkgPT4gKGF0dHIob3B0LCBcImxhYmVsXCIpIHx8IHRleHQob3B0KSkudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09IHF1ZXJ5XG4gICk7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IG1hdGNoIH07XG4gIGlmICghc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImNvbWJvYm94YmVmb3JlbWF0Y2hcIiwgZXZlbnQpKSlcbiAgICBtYXRjaCA9IFsuLi5vcHRpb25zXS5maW5kKChvKSA9PiBvLnNlbGVjdGVkKTtcbiAgaWYgKGNoYW5nZSkge1xuICAgIHN5bmNPcHRpb25zV2l0aEl0ZW1zKHNlbGYpO1xuICAgIGlmIChtYXRjaCkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIG1hdGNoLCBmYWxzZSk7XG4gICAgaWYgKGNyZWF0YWJsZSAmJiB2YWx1ZSkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIHsgdmFsdWUgfSwgZmFsc2UpO1xuICAgIGlmICghbXVsdGlwbGUgJiYgIXZhbHVlICYmIGl0ZW1zWzBdKSBkaXNwYXRjaENoYW5nZShzZWxmLCBpdGVtc1swXSk7XG4gICAgZWxzZSBzeW5jSW5wdXRWYWx1ZShzZWxmKTtcbiAgICByZXR1cm4gc3BlYWsoX3RleHRzLmludmFsaWQpO1xuICB9XG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIG9wdC5zZWxlY3RlZCA9IG9wdCA9PT0gbWF0Y2g7XG59O1xudmFyIGRpc3BhdGNoQ2hhbmdlID0gKHNlbGYsIGl0ZW0sIHJlbW92YWJsZSA9IHRydWUpID0+IHtcbiAgY29uc3QgeyBjb250cm9sLCBpdGVtcywgbXVsdGlwbGUgfSA9IHNlbGY7XG4gIGNvbnN0IGFkZCA9IGNyZWF0ZUVsZW1lbnQoXCJkYXRhXCIsIGl0ZW0ubGFiZWwgfHwgaXRlbS52YWx1ZSwge1xuICAgIHZhbHVlOiBpdGVtLnZhbHVlXG4gIH0pO1xuICBjb25zdCByZW1vdmUgPSBbLi4uaXRlbXNdLmZpbmQoKGkpID0+IGkudmFsdWUgPT09IGl0ZW0udmFsdWUpO1xuICBjb25zdCBldmVudCA9IHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSwgZGV0YWlsOiByZW1vdmUgfHwgYWRkIH07XG4gIGNvbnN0IHNraXAgPSByZW1vdmUgJiYgIXJlbW92YWJsZTtcbiAgaWYgKHNraXApIHJldHVybiBzeW5jSW5wdXRWYWx1ZShzZWxmKTtcbiAgaWYgKHNlbGYuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoXCJjb21ib2JveGJlZm9yZXNlbGVjdFwiLCBldmVudCkpKSB7XG4gICAgaWYgKCFtdWx0aXBsZSkgZm9yIChjb25zdCBpdGVtMiBvZiBbLi4uaXRlbXNdKSBpdGVtMi5yZW1vdmUoKTtcbiAgICBpZiAocmVtb3ZlKSByZW1vdmUucmVtb3ZlKCk7XG4gICAgZWxzZSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmluc2VydEFkamFjZW50RWxlbWVudChcImJlZm9yZWJlZ2luXCIsIGFkZCk7XG4gICAgc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImNvbWJvYm94YWZ0ZXJzZWxlY3RcIiwgZXZlbnQpKTtcbiAgfVxufTtcbnZhciBvbkZvY3VzID0gKHNlbGYsIHsgdGFyZ2V0IH0pID0+IHtcbiAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBzZWxmLl9mb2N1cyA9IHRhcmdldDtcbiAgc3BlYWsoKTtcbn07XG52YXIgb25CbHVyID0gKHNlbGYpID0+IGlzTW91c2VEb3duKCkgfHwgc2V0VGltZW91dChvbkJsdXJyZWQsIDAsIHNlbGYpO1xudmFyIG9uQmx1cnJlZCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmICghc2VsZi5fZm9jdXMgfHwgc2VsZi5jb250YWlucygoX2EyID0gc2VsZi5fcm9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5hY3RpdmVFbGVtZW50KSkgcmV0dXJuO1xuICBpZiAoIXNlbGYubXVsdGlwbGUpIGRpc3BhdGNoTWF0Y2goc2VsZik7XG4gIHNlbGYuX2ZvY3VzID0gdm9pZCAwO1xufTtcbnZhciBvbkNsaWNrID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIGNvbnN0IHsgY2xpZW50WDogeCwgY2xpZW50WTogeSwgdGFyZ2V0IH0gPSBldmVudDtcbiAgY29uc3QgeyBjbGVhciwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGlmIChjbGVhciA9PSBudWxsID8gdm9pZCAwIDogY2xlYXIuY29udGFpbnModGFyZ2V0KSkge1xuICAgIGlmIChjb250cm9sKSBzZXRWYWx1ZShjb250cm9sLCBcIlwiLCBcImRlbGV0ZUNvbnRlbnRCYWNrd2FyZFwiKTtcbiAgICByZXR1cm4gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpO1xuICB9XG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSBpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChpdGVtLmNvbnRhaW5zKHRhcmdldCkpIHJldHVybiBkaXNwYXRjaENoYW5nZShzZWxmLCBpdGVtKTtcbiAgICBpZiAoeSA+PSB0b3AgJiYgeSA8PSBib3R0b20gJiYgeCA+PSBsZWZ0ICYmIHggPD0gcmlnaHQpIHJldHVybiBpdGVtLmZvY3VzKCk7XG4gIH1cbiAgaWYgKHRhcmdldCA9PT0gc2VsZikgY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpO1xufTtcbnZhciBvbklucHV0ID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgb3B0aW9ucyA9IFtdLCBjb250cm9sLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgdmFsdWUgPSAoKF9hMiA9IGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBpc0NsaWNrID0gZXZlbnQgaW5zdGFuY2VvZiBJbnB1dEV2ZW50ID8gIWV2ZW50LmlucHV0VHlwZSB8fCBldmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0XCIgOiAhIXZhbHVlO1xuICBpZiAoaXNDbGljaykge1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIGlmIChjb250cm9sKSBjb250cm9sLnZhbHVlID0gc2VsZi5fdmFsdWU7XG4gICAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucylcbiAgICAgIGlmIChvcHQudmFsdWUgJiYgb3B0LnZhbHVlID09PSB2YWx1ZSlcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIG9wdCwgbXVsdGlwbGUpO1xuICB9IGVsc2UgaWYgKCFtdWx0aXBsZSkgZGlzcGF0Y2hNYXRjaChzZWxmLCBmYWxzZSk7XG4gIHN5bmNDbGVhcldpdGhJbnB1dChzZWxmKTtcbn07XG52YXIgb25LZXlEb3duID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LnNoaWZ0S2V5KSByZXR1cm47XG4gIGNvbnN0IHsgY2xlYXIsIGNvbnRyb2wsIGl0ZW1zIH0gPSBzZWxmO1xuICBjb25zdCB7IGtleSwgcmVwZWF0LCB0YXJnZXQgfSA9IGV2ZW50O1xuICBjb25zdCBpc0NvbnRyb2wgPSBjb250cm9sICYmIGNvbnRyb2wgPT09IHRhcmdldDtcbiAgY29uc3QgaW5UZXh0ID0gaXNDb250cm9sICYmIChjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLnNlbGVjdGlvbkVuZCk7XG4gIGxldCBpbmRleCA9IGlzQ29udHJvbCA/IGl0ZW1zLmxlbmd0aCA6IFsuLi5pdGVtc10uaW5kZXhPZih0YXJnZXQpO1xuICBpZiAoaXNDb250cm9sICYmIGtleSA9PT0gXCJUYWJcIiAmJiBjbGVhciAmJiAhY2xlYXIuaGlkZGVuKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjbGVhci50YWJJbmRleCA9IC0xO1xuICAgIGNsZWFyLmZvY3VzKCk7XG4gICAgb24oY2xlYXIsIFwiYmx1clwiLCAoKSA9PiBhdHRyKGNsZWFyLCBcInRhYmluZGV4XCIsIG51bGwpLCBFVkVOVF9PTkNFKTtcbiAgfVxuICBpZiAoIWlzQ29udHJvbCAmJiBhc0J1dHRvbihldmVudCkgfHwgaW5kZXggPT09IC0xKSByZXR1cm47XG4gIGlmIChrZXkgPT09IFwiQXJyb3dSaWdodFwiICYmICFpc0NvbnRyb2wpIGluZGV4ICs9IDE7XG4gIGVsc2UgaWYgKGtleSA9PT0gXCJBcnJvd0xlZnRcIiAmJiAhaW5UZXh0KSBpbmRleCAtPSAxO1xuICBlbHNlIGlmIChrZXkgPT09IFwiRW50ZXJcIiAmJiBpc0NvbnRyb2wpIHtcbiAgICBjb25zdCBmb3JtID0gYXR0cihjb250cm9sLCBcImZvcm1cIik7XG4gICAgYXR0cihjb250cm9sLCBcImZvcm1cIiwgXCIjXCIpO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiLCBmb3JtKSk7XG4gICAgcmV0dXJuIGRpc3BhdGNoTWF0Y2goc2VsZik7XG4gIH0gZWxzZSBpZiAoKGtleSA9PT0gXCJCYWNrc3BhY2VcIiB8fCBrZXkgPT09IFwiRGVsZXRlXCIpICYmICFpblRleHQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghcmVwZWF0ICYmIGl0ZW1zW2luZGV4XSkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW1zW2luZGV4XSk7XG4gICAgaWYgKGlzQ29udHJvbCkgaW5kZXggLT0gMTtcbiAgfSBlbHNlIHJldHVybiBpc0NvbnRyb2wgfHwgKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuZm9jdXMoKSk7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIChfYTIgPSBpdGVtc1tNYXRoLm1heCgwLCBpbmRleCldIHx8IGNvbnRyb2wpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZm9jdXMoKTtcbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LWNvbWJvYm94XCIsIFVIVE1MQ29tYm9ib3hFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxDb21ib2JveEVsZW1lbnQgfTtcbiIsIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFNBRkVfTEFCRUxMRURCWSA9IGAke0lTX0FORFJPSUQgPyBcImRhdGFcIiA6IFwiYXJpYVwifS1sYWJlbGxlZGJ5YDtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgLy8gVW5uYW1lZCBzbG90IGRvZXMgYXV0b21hdGljYWxseSByZW5kZXIgYWxsIHRvcCBlbGVtZW50IG5vZGVzXG4gIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBjc3MpXG4pO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xuXG4vLyB1LXRhYnMudHNcbnZhciBBUklBX0NPTlRST0xTID0gXCJhcmlhLWNvbnRyb2xzXCI7XG52YXIgQVJJQV9TRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xudmFyIFVIVE1MVGFic0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgRElTUExBWV9CTE9DSyk7XG4gIH1cbiAgZ2V0IHRhYkxpc3QoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFibGlzdFwiLCB0aGlzKVswXSB8fCBudWxsO1xuICB9XG4gIGdldCBzZWxlY3RlZEluZGV4KCkge1xuICAgIHJldHVybiBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicyk7XG4gIH1cbiAgc2V0IHNlbGVjdGVkSW5kZXgoaW5kZXgpIHtcbiAgICBzZXRTZWxlY3RlZCh0aGlzLnRhYnNbaW5kZXhdKTtcbiAgfVxuICBnZXQgdGFicygpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJcIiwgdGhpcyk7XG4gIH1cbiAgZ2V0IHBhbmVscygpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJwYW5lbFwiLCB0aGlzKTtcbiAgfVxufTtcbnZhciBVSFRNTFRhYkxpc3RFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFibGlzdFwiKTtcbiAgICBvbih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCkgdGhpcy5oYW5kbGVFdmVudCgpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG9mZih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LnR5cGUgPT09IFwibXV0YXRpb25cIikge1xuICAgICAgY29uc3QgdGFiID0gdGhpcy50YWJzW01hdGgubWF4KHRoaXMuc2VsZWN0ZWRJbmRleCwgMCldO1xuICAgICAgcmV0dXJuIHRhYiA9PSBudWxsID8gdm9pZCAwIDogdGFiLnNldEF0dHJpYnV0ZShBUklBX1NFTEVDVEVELCBcInRydWVcIik7XG4gICAgfVxuICAgIGNvbnN0IHsga2V5IH0gPSBldmVudDtcbiAgICBjb25zdCB0YWJzID0gWy4uLnRoaXMudGFic107XG4gICAgY29uc3QgcHJldiA9IHRhYnMuZmluZEluZGV4KCh0YWIpID0+IHRhYi5jb250YWlucyhldmVudC50YXJnZXQpKTtcbiAgICBsZXQgbmV4dCA9IHByZXY7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgcHJldiA9PT0gLTEpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSBzZXRTZWxlY3RlZCh0YWJzW3ByZXZdKTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIgJiYgIWFzQnV0dG9uKGV2ZW50KSkge1xuICAgICAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIiB8fCBrZXkgPT09IFwiQXJyb3dSaWdodFwiKVxuICAgICAgICBuZXh0ID0gKHByZXYgKyAxKSAlIHRhYnMubGVuZ3RoO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93VXBcIiB8fCBrZXkgPT09IFwiQXJyb3dMZWZ0XCIpXG4gICAgICAgIG5leHQgPSAocHJldiB8fCB0YWJzLmxlbmd0aCkgLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkVuZFwiKSBuZXh0ID0gdGFicy5sZW5ndGggLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkhvbWVcIikgbmV4dCA9IDA7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiVGFiXCIpIG5leHQgPSBnZXRTZWxlY3RlZEluZGV4KHRhYnMpO1xuICAgICAgZWxzZSByZXR1cm47XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGFic1twcmV2XS50YWJJbmRleCA9IC0xO1xuICAgICAgICB0YWJzW25leHRdLnRhYkluZGV4ID0gMDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGtleSAhPT0gXCJUYWJcIikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0YWJzW25leHRdLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldCB0YWJzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwidS10YWJzXCIpO1xuICB9XG4gIGdldCB0YWJzKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWRJbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpO1xuICB9XG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4KSB7XG4gICAgc2V0U2VsZWN0ZWQodGhpcy50YWJzW2luZGV4XSk7XG4gIH1cbn07XG52YXIgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xudmFyIFVIVE1MVGFiRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImlkXCIsIEFSSUFfU0VMRUNURUQsIEFSSUFfQ09OVFJPTFNdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUoXG4gICAgICB0aGlzLFxuICAgICAgXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jayB9XCJcbiAgICApO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFiXCIpO1xuICAgIHRoaXMudGFiSW5kZXggPSB0aGlzLnNlbGVjdGVkID8gMCA6IC0xO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoIVNLSVBfQVRUUl9DSEFOR0UgJiYgdGhpcy5zZWxlY3RlZCAmJiB0aGlzLnRhYkxpc3QpIHtcbiAgICAgIFNLSVBfQVRUUl9DSEFOR0UgPSB0cnVlO1xuICAgICAgY29uc3QgdGFicyA9IFsuLi50aGlzLnRhYkxpc3QucXVlcnlTZWxlY3RvckFsbChcInUtdGFiXCIpXTtcbiAgICAgIGNvbnN0IHBhbmVscyA9IHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFicGFuZWxcIiwgdGhpcy50YWJzRWxlbWVudCB8fCB0aGlzKTtcbiAgICAgIGNvbnN0IG5leHRQYW5lbCA9IGdldFBhbmVsKHRoaXMsIHBhbmVsc1t0YWJzLmluZGV4T2YodGhpcyldKTtcbiAgICAgIGlmIChuZXh0UGFuZWwpIGF0dHIobmV4dFBhbmVsLCBTQUZFX0xBQkVMTEVEQlksIHVzZUlkKHRoaXMpKTtcbiAgICAgIHRhYnMuZm9yRWFjaCgodGFiLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBwYW5lbCA9IGdldFBhbmVsKHRhYiwgcGFuZWxzW2luZGV4XSk7XG4gICAgICAgIHRhYi50YWJJbmRleCA9IHRhYiA9PT0gdGhpcyA/IDAgOiAtMTtcbiAgICAgICAgYXR0cih0YWIsIEFSSUFfU0VMRUNURUQsIGAke3RhYiA9PT0gdGhpc31gKTtcbiAgICAgICAgaWYgKHBhbmVsKSBwYW5lbC5oaWRkZW4gPSBwYW5lbCAhPT0gbmV4dFBhbmVsO1xuICAgICAgICBpZiAocGFuZWwpIGF0dHIodGFiLCBBUklBX0NPTlRST0xTLCBwYW5lbC5pZCk7XG4gICAgICB9KTtcbiAgICAgIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYkxpc3QoKSB7XG4gICAgY29uc3QgdGFibGlzdCA9IHRoaXMucGFyZW50RWxlbWVudDtcbiAgICByZXR1cm4gKHRhYmxpc3QgPT0gbnVsbCA/IHZvaWQgMCA6IHRhYmxpc3Qubm9kZU5hbWUpID09PSBcIlUtVEFCTElTVFwiID8gdGFibGlzdCA6IG51bGw7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIEFSSUFfU0VMRUNURUQpID09PSBcInRydWVcIjtcbiAgfVxuICBzZXQgc2VsZWN0ZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIEFSSUFfU0VMRUNURUQsIGAkeyEhdmFsdWV9YCk7XG4gIH1cbiAgLyoqIFJldHJpZXZlcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiBhbiB0YWIgaW4gYSB0YWJsaXN0LiAqL1xuICBnZXQgaW5kZXgoKSB7XG4gICAgY29uc3QgdGFiTGlzdCA9IHRoaXMudGFiTGlzdDtcbiAgICByZXR1cm4gdGFiTGlzdCA/IFsuLi50YWJMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKV0uaW5kZXhPZih0aGlzKSA6IDA7XG4gIH1cbiAgZ2V0IHBhbmVsKCkge1xuICAgIHJldHVybiBnZXRQYW5lbCh0aGlzKTtcbiAgfVxufTtcbnZhciBVSFRNTFRhYlBhbmVsRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImhpZGRlblwiXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFicGFuZWxcIik7XG4gICAgdGhpcy5oaWRkZW4gPSBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicykgPT09IC0xO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLmhpZGRlbiB8fCBpc0ZvY3VzYWJsZSh0aGlzLmZpcnN0Q2hpbGQpKVxuICAgICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIG51bGwpO1xuICAgIGVsc2UgdGhpcy50YWJJbmRleCA9IDA7XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgY29uc3QgY3NzID0gYHUtdGFiWyR7QVJJQV9DT05UUk9MU309XCIke3RoaXMuaWR9XCJdYDtcbiAgICByZXR1cm4gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKGNzcyk7XG4gIH1cbn07XG52YXIgcXVlcnlXaXRob3V0TmVzdGVkID0gKHRhZywgc2VsZikgPT4gc2VsZi5xdWVyeVNlbGVjdG9yQWxsKGAke3RhZ306bm90KDpzY29wZSB1LXRhYnBhbmVsICR7dGFnfSlgKTtcbnZhciBnZXRQYW5lbCA9ICh0YWIsIHBhbmVsKSA9PiB7XG4gIGNvbnN0IGlkMiA9IGF0dHIodGFiLCBBUklBX0NPTlRST0xTKSB8fCB1c2VJZChwYW5lbCk7XG4gIGNvbnN0IGVsID0gZ2V0Um9vdCh0YWIpLmdldEVsZW1lbnRCeUlkKGlkMik7XG4gIHJldHVybiAoZWwgPT0gbnVsbCA/IHZvaWQgMCA6IGVsLm5vZGVOYW1lKSA9PT0gXCJVLVRBQlBBTkVMXCIgPyBlbCA6IG51bGw7XG59O1xudmFyIGdldFNlbGVjdGVkSW5kZXggPSAodGFicykgPT4gWy4uLnRhYnNdLmZpbmRJbmRleCgodGFiKSA9PiBhdHRyKHRhYiwgQVJJQV9TRUxFQ1RFRCkgPT09IFwidHJ1ZVwiKTtcbnZhciBzZXRTZWxlY3RlZCA9ICh0YWIpID0+IHRhYiAmJiBhdHRyKHRhYiwgXCJhcmlhLXNlbGVjdGVkXCIsIFwidHJ1ZVwiKTtcbnZhciBpc0ZvY3VzYWJsZSA9IChlbCkgPT4gZWwgaW5zdGFuY2VvZiBFbGVtZW50ICYmICFlbC5tYXRjaGVzKCc6ZGlzYWJsZWQsW3RhYmluZGV4Xj1cIi1cIl0nKSAmJiBlbC5tYXRjaGVzKFxuICBgW2NvbnRlbnRlZGl0YWJsZV0sW2NvbnRyb2xzXSxbaHJlZl0sW3RhYmluZGV4XSxpbnB1dDpub3QoW3R5cGU9XCJoaWRkZW5cIl0pLHNlbGVjdCx0ZXh0YXJlYSxidXR0b24sc3VtbWFyeSxpZnJhbWVgXG4pO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJzXCIsIFVIVE1MVGFic0VsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJsaXN0XCIsIFVIVE1MVGFiTGlzdEVsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJcIiwgVUhUTUxUYWJFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtdGFicGFuZWxcIiwgVUhUTUxUYWJQYW5lbEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTFRhYkVsZW1lbnQsIFVIVE1MVGFiTGlzdEVsZW1lbnQsIFVIVE1MVGFiUGFuZWxFbGVtZW50LCBVSFRNTFRhYnNFbGVtZW50IH07XG4iLCJpbXBvcnQgeyBjbHN4IH0gZnJvbSBcImNsc3hcIjtcblxuZXhwb3J0IGNvbnN0IFFVSUNLX0VWRU5UID0geyBjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH07XG5leHBvcnQgY29uc3QgSVNfQlJPV1NFUiA9XG5cdHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiO1xuXG4vLyBUT0RPOiBEb2N1bWVudGF0aW9uIGZvciBwcmV0dHlOdW1iZXJcbmxldCBJTlRMX05VTTogSW50bC5OdW1iZXJGb3JtYXQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcHJldHR5TnVtYmVyKG51bWJlcjogbnVtYmVyIHwgc3RyaW5nKSB7XG5cdGlmICghSU5UTF9OVU0pXG5cdFx0SU5UTF9OVU0gPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXG5cdFx0XHQoSVNfQlJPV1NFUiAmJiBhdHRyKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgXCJsYW5nXCIpKSB8fCBcIm5vXCIsXG5cdFx0KTtcblx0cmV0dXJuIElOVExfTlVNLmZvcm1hdChOdW1iZXIobnVtYmVyKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWJvdW5jZTxUIGV4dGVuZHMgdW5rbm93bltdPihcblx0Y2FsbGJhY2s6ICguLi5hcmdzOiBUKSA9PiB2b2lkLFxuXHRkZWxheTogbnVtYmVyLFxuKSB7XG5cdGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG5cblx0cmV0dXJuICguLi5hcmdzOiBUKSA9PiB7XG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0XHR0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gY2FsbGJhY2soLi4uYXJncyksIGRlbGF5KTtcblx0fTtcbn1cblxuLyoqXG4gKiBhdHRyXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IGdldCwgc2V0IGFuZCByZW1vdmUgYXR0cmlidXRlc1xuICogQHBhcmFtIGVsIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIG5hbWUgVGhlIGF0dHJpYnV0ZSBuYW1lIHRvIGdldCwgc2V0IG9yIHJlbW92ZSwgb3IgYSBvYmplY3QgdG8gc2V0IG11bHRpcGxlIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB2YWx1ZSBBIHZhbGlkIGF0dHJpYnV0ZSB2YWx1ZSBvciBudWxsIHRvIHJlbW92ZSBhdHRyaWJ1dGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dHIoXG5cdGVsOiBFbGVtZW50LFxuXHRuYW1lOiBzdHJpbmcsXG5cdHZhbHVlPzogc3RyaW5nIHwgbnVsbCxcbik6IHN0cmluZyB8IG51bGwge1xuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKSA/PyBudWxsOyAvLyBGYWxsYmFjayB0byBudWxsIG9ubHkgaWYgZWwgaXMgdW5kZWZpbmVkXG5cdGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHRlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuXHRyZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiB1c2VJZFxuICogQHJldHVybiBBIGdlbmVyYXRlZCB1bmlxdWUgSURcbiAqL1xubGV0IGlkID0gMDtcbmNvbnN0IFVVSUQgPSBgJHtEYXRlLm5vdygpLnRvU3RyaW5nKDM2KX0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDUpfWA7XG5leHBvcnQgZnVuY3Rpb24gdXNlSWQoZWw6IEVsZW1lbnQpIHtcblx0aWYgKCFlbC5pZCkgZWwuaWQgPSBgJHtVVUlEfSR7KytpZH1gO1xuXHRyZXR1cm4gZWwuaWQ7XG59XG5cbi8vIEludGVybmFsIGhlbHBlciBmb3Igb24gLyBvZmZcbmNvbnN0IGV2ZW50cyA9IChcblx0YWN0aW9uOiBcImFkZFwiIHwgXCJyZW1vdmVcIixcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0cmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj4sXG4pOiB2b2lkID0+IHtcblx0Zm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG5cdFx0cmVzdFswXSA9IHR5cGU7XG5cdFx0ZWxlbWVudFtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdKC4uLnJlc3QpO1xuXHR9XG59O1xuXG4vKipcbiAqIG9uXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9uID0gKFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHQuLi5yZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPlxuKTogdm9pZCA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG5cbi8qKlxuICogb2ZmXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9mZiA9IChcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Li4ucmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj5cbik6IHZvaWQgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xuXG4vKipcbiAqIFNjcm9sbGVyIHRhcmdlcyBoZWxwaW5nIGFuY2hvclBvc2l0aW9uXG4gKi9cbmNvbnN0IFNDUk9MTEVSID0gSVNfQlJPV1NFUiA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikgOiBudWxsOyAvLyBVc2VkIHRvIGVuc3VyZSB3ZSBoYXZlIHNjcm9sbGFiaWxpdHkgdW5kZXJcbmNvbnN0IFRBUkdFVFMgPSBuZXcgTWFwPEVsZW1lbnQsICgpID0+IHZvaWQ+KCk7IC8vIFN0b3JlIGN1cnJlbnQgb3BlbiBwb3BwZXJzIGFuZCB0aGVpciB1cGRhdGUgZnVuY3Rpb25zXG5jb25zdCBUQVJHRVRTX1VQREFURSA9ICgpID0+IHtcblx0Zm9yIChjb25zdCBbXywgdXBkYXRlXSBvZiBUQVJHRVRTKSB1cGRhdGUoKTtcbn07XG5cbmlmIChTQ1JPTExFUikge1xuXHRTQ1JPTExFUi5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZTtwYWRkaW5nOjFweDt0b3A6MDtsZWZ0OjBweFwiO1xuXHRvbih3aW5kb3csIFwibG9hZCxyZXNpemUsc2Nyb2xsXCIsIFRBUkdFVFNfVVBEQVRFLCBRVUlDS19FVkVOVCk7XG59XG5cbi8qKlxuICogYW5jaG9yUG9zaXRpb25cbiAqIEBwYXJhbSB0YXJnZXQgVGhlIEVsZW1lbnQgdG8gcG9zaXRpb25cbiAqIEBwYXJhbSBhbmNob3IgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIGFuY2hvclxuICovXG5jb25zdCBQT1NJVElPTiA9IHsgdG9wOiAwLCByaWdodDogMSwgYm90dG9tOiAyLCBsZWZ0OiAzIH07IC8vIFNwZWVkIHVwIGJ5IHVzaW5nIGEgY29uc3QgbWFwXG5cbmV4cG9ydCB0eXBlIEFuY2hvclBvc2l0aW9uID0ga2V5b2YgdHlwZW9mIFBPU0lUSU9OO1xuXG5leHBvcnQgZnVuY3Rpb24gYW5jaG9yUG9zaXRpb24oXG5cdHRhcmdldDogSFRNTEVsZW1lbnQsXG5cdGFuY2hvcjogRWxlbWVudCB8IGZhbHNlLFxuXHRwbGFjZT86IHN0cmluZyB8IG51bWJlcixcblx0Zm9yY2U/OiBib29sZWFuLFxuKSB7XG5cdGNvbnN0IHBvc2l0aW9uID1cblx0XHRQT1NJVElPTltwbGFjZSBhcyBrZXlvZiB0eXBlb2YgUE9TSVRJT05dID8/XG5cdFx0TnVtYmVyKHBsYWNlKSA/P1xuXHRcdFBPU0lUSU9OLmJvdHRvbTtcblxuXHRpZiAoYW5jaG9yID09PSBmYWxzZSB8fCAhYW5jaG9yLmlzQ29ubmVjdGVkIHx8ICF0YXJnZXQuaXNDb25uZWN0ZWQpXG5cdFx0cmV0dXJuIFRBUkdFVFMuZGVsZXRlKHRhcmdldCk7IC8vIFN0b3Agd2F0Y2hpbmcgaWYgYW5jaG9yIGlzIHJlbW92ZWQgZnJvbSBET01cblx0aWYgKCFTQ1JPTExFUj8uaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKFNDUk9MTEVSIHx8IFwiXCIpOyAvLyBFbnN1cmUgd2UgaGF2ZSB0aGUgc2Nyb2xsZXJcblx0aWYgKCFUQVJHRVRTLmhhcyh0YXJnZXQpKVxuXHRcdFRBUkdFVFMuc2V0KHRhcmdldCwgKCkgPT4gYW5jaG9yUG9zaXRpb24odGFyZ2V0LCBhbmNob3IsIHBvc2l0aW9uLCBmb3JjZSkpO1xuXG5cdGNvbnN0IGlzSFRNTEFuY2hvciA9IGFuY2hvciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OyAvLyBTVkcgb3IgWE1MIGVsZW1lbnRzIGRvZXMgbm90IGhhdmUgb2Zmc2V0V2lkdGggb3Igb2Zmc2V0SGVpZ2h0XG5cdGNvbnN0IHsgb2Zmc2V0V2lkdGg6IHRhcmdldFcsIG9mZnNldEhlaWdodDogdGFyZ2V0SCB9ID0gdGFyZ2V0O1xuXHRjb25zdCBhbmNob3JXID0gaXNIVE1MQW5jaG9yID8gYW5jaG9yLm9mZnNldFdpZHRoIDogYW5jaG9yLmNsaWVudFdpZHRoO1xuXHRjb25zdCBhbmNob3JIID0gaXNIVE1MQW5jaG9yID8gYW5jaG9yLm9mZnNldEhlaWdodCA6IGFuY2hvci5jbGllbnRIZWlnaHQ7XG5cdGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wIH0gPSBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0Ly8gR2V0IHZpc3VhbCB2aWV3cG9ydCBpbmZvXG5cdGNvbnN0IHZpZXdXID0gd2luZG93LnZpc3VhbFZpZXdwb3J0Py53aWR0aCB8fCB3aW5kb3cuaW5uZXJXaWR0aDtcblx0Y29uc3Qgdmlld0ggPSB3aW5kb3cudmlzdWFsVmlld3BvcnQ/LmhlaWdodCB8fCB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdGNvbnN0IHNjcm9sbFggPSB3aW5kb3cucGFnZVhPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7XG5cdGNvbnN0IHNjcm9sbFkgPSB3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcblxuXHRjb25zdCBhbmNob3JYID0gTWF0aC5yb3VuZChsZWZ0IC0gKGFuY2hvclcgLSB3aWR0aCkgLyAyKTsgLy8gQ29ycmVjdCBmb3IgQ1NTIHRyYW5zZm9ybSBzY2FsZVxuXHRjb25zdCBhbmNob3JZID0gTWF0aC5yb3VuZCh0b3AgLSAoYW5jaG9ySCAtIGhlaWdodCkgLyAyKTsgLy8gQ29ycmVjdCBmb3IgQ1NTIHRyYW5zZm9ybSBzY2FsZVxuXHRjb25zdCBjZW50ZXJYID0gTWF0aC5taW4oXG5cdFx0TWF0aC5tYXgoMTAsIGFuY2hvclggLSAodGFyZ2V0VyAtIGFuY2hvclcpIC8gMiksXG5cdFx0dmlld1cgLSB0YXJnZXRXIC0gMTAsXG5cdCk7XG5cdGNvbnN0IGNlbnRlclkgPSBNYXRoLm1pbihcblx0XHRNYXRoLm1heCgxMCwgYW5jaG9yWSAtICh0YXJnZXRIIC0gYW5jaG9ySCkgLyAyKSxcblx0XHR2aWV3SCAtIHRhcmdldEggLSAxMCxcblx0KTtcblxuXHQvLyBVc2UgdmlzdWFsIHZpZXdwb3J0IGRpbWVuc2lvbnMgZm9yIHNwYWNlIGNhbGN1bGF0aW9uc1xuXHRjb25zdCBoYXNTcGFjZUxlZnQgPSBhbmNob3JYIC0gdGFyZ2V0VyA+IDA7XG5cdGNvbnN0IGhhc1NwYWNlUmlnaHQgPSBhbmNob3JYICsgYW5jaG9yVyArIHRhcmdldFcgPCB2aWV3Vztcblx0Y29uc3QgaGFzU3BhY2VPdmVyID0gYW5jaG9yWSAtIHRhcmdldEggPiAwO1xuXHRjb25zdCBoYXNTcGFjZVVuZGVyID0gYW5jaG9yWSArIGFuY2hvckggKyB0YXJnZXRIIDwgdmlld0g7XG5cblx0Y29uc3QgaXNWZXJ0aWNhbCA9IHBvc2l0aW9uID09PSBQT1NJVElPTi50b3AgfHwgcG9zaXRpb24gPT09IFBPU0lUSU9OLmJvdHRvbTtcblx0Y29uc3QgaXNSaWdodCA9XG5cdFx0KHBvc2l0aW9uID09PSBQT1NJVElPTi5yaWdodCAmJiAoZm9yY2UgfHwgaGFzU3BhY2VSaWdodCkpIHx8ICFoYXNTcGFjZUxlZnQ7IC8vIEFsd2F5cyBwb3NpdGlvbiByaWdodCB3aGVuIG5vIGhhc1NwYWNlTGVmdCwgYXMgbm8gT1Mgc2Nyb2xscyBmdXJ0aGVyIGxlZnQgdGhhbiAwXG5cdGNvbnN0IGlzVW5kZXIgPVxuXHRcdChwb3NpdGlvbiA9PT0gUE9TSVRJT04uYm90dG9tICYmIChmb3JjZSB8fCBoYXNTcGFjZVVuZGVyKSkgfHwgIWhhc1NwYWNlT3ZlcjsgLy8gQWx3YXlzIHBvc2l0aW9uIHVuZGVyIHdoZW4gbm8gaGFzU3BhY2VPdmVyLCBhcyBubyBPUyBzY3JvbGxzIGZ1cnRoZXIgdXAgdGhhbiAwXG5cblx0Ly8gQ2FsY3VsYXRlIHBvc2l0aW9ucyBpbiB2aWV3cG9ydCBjb29yZGluYXRlc1xuXHRjb25zdCB2aWV3WCA9IE1hdGgucm91bmQoXG5cdFx0aXNWZXJ0aWNhbCA/IGNlbnRlclggOiBpc1JpZ2h0ID8gYW5jaG9yWCArIGFuY2hvclcgOiBhbmNob3JYIC0gdGFyZ2V0Vyxcblx0KTtcblx0Y29uc3Qgdmlld1kgPSBNYXRoLnJvdW5kKFxuXHRcdGlzVmVydGljYWwgPyAoaXNVbmRlciA/IGFuY2hvclkgKyBhbmNob3JIIDogYW5jaG9yWSAtIHRhcmdldEgpIDogY2VudGVyWSxcblx0KTtcblxuXHQvLyBVc2UgYWJzb2x1dGUgcG9zaXRpb25pbmdcblx0dGFyZ2V0LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuXHR0YXJnZXQuc3R5bGUubGVmdCA9IGAke3ZpZXdYICsgc2Nyb2xsWH1weGA7XG5cdHRhcmdldC5zdHlsZS50b3AgPSBgJHt2aWV3WSArIHNjcm9sbFl9cHhgO1xuXG5cdFNDUk9MTEVSPy5zdHlsZS5zZXRQcm9wZXJ0eShcblx0XHRcInRyYW5zbGF0ZVwiLFxuXHRcdGAwcHggJHtNYXRoLnJvdW5kKGlzVW5kZXIgPyBzY3JvbGxYICsgYW5jaG9yWSArIGFuY2hvckggKyB0YXJnZXRIICsgMzAgOiAwKX1weGAsXG5cdCk7XG59XG5cbi8qKlxuICogU3BlZWQgdXAgTXV0YXRpb25PYnNlcnZlciBieSBkZWJvdW5jaW5nIGFuZCBvbmx5IHJ1bm5pbmcgd2hlbiBwYWdlIGlzIHZpc2libGVcbiAqIEByZXR1cm4gbmV3IE11dGFpb25PYnNlcnZlclxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjazogTXV0YXRpb25DYWxsYmFjaykge1xuXHRsZXQgcXVldWUgPSAwO1xuXG5cdGNvbnN0IG9uRnJhbWUgPSAoKSA9PiBzZXRUaW1lb3V0KG9uVGltZXIsIDIwMCk7IC8vIFVzZSBib3RoIHJlcXVlc3RBbmltYXRpb25GcmFtZSBhbmQgc2V0VGltZW91dCB0byBkZWJvdW5jZSBhbmQgb25seSBydW4gd2hlbiB2aXNpYmxlXG5cdGNvbnN0IG9uVGltZXIgPSAoKSA9PiB7XG5cdFx0Y2FsbGJhY2soW10sIG9ic2VydmVyKTtcblx0XHRvYnNlcnZlci50YWtlUmVjb3JkcygpOyAvLyBDbGVhciByZWNvcmRzIHRvIGF2b2lkIHJ1bm5pbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcblx0XHRxdWV1ZSA9IDA7XG5cdH07XG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdGlmICghcXVldWUpIHF1ZXVlID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKG9uRnJhbWUpO1xuXHR9KTtcblxuXHRyZXR1cm4gb2JzZXJ2ZXI7XG59XG5cbi8qKlxuICogb25NdXRhdGlvblxuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBvYnNlcnZlIG11dGF0aW9ucyBvbiBhIHNwZWNpZmljIGNsYXNzIG5hbWVcbiAqIEBwYXJhbSBlbCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSBjbGFzc05hbWUgVGhlIGNsYXNzIG5hbWUgdG8gb2JzZXJ2ZVxuICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBydW4gd2hlbiBtdXRhdGlvbnMgYXJlIGRldGVjdGVkXG4gKi9cbmNvbnN0IE1VVEFUT1JTID0gbmV3IFdlYWtNYXA8RWxlbWVudCwgQXJyYXk8KCkgPT4gdm9pZD4+KCk7XG5leHBvcnQgY29uc3Qgb25NdXRhdGlvbiA9IDxUIGV4dGVuZHMgRWxlbWVudD4oXG5cdGVsOiBFbGVtZW50LFxuXHRjbGFzc05hbWU6IHN0cmluZyxcblx0Y2FsbGJhY2s6IChlbGVtczogSFRNTENvbGxlY3Rpb25PZjxUPikgPT4gdm9pZCxcbikgPT4ge1xuXHRjb25zdCBlbGVtcyA9IGVsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcblx0Y29uc3QgbXV0YXRvciA9IE1VVEFUT1JTLmdldChlbCkgfHwgW107XG5cblx0aWYgKCFtdXRhdG9yLmxlbmd0aCkge1xuXHRcdE1VVEFUT1JTLnNldChlbCwgbXV0YXRvcik7XG5cdFx0Y3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcigoXywgb2JzZXJ2ZXIpID0+IHtcblx0XHRcdGlmIChlbC5pc0Nvbm5lY3RlZCAmJiBtdXRhdG9yPy5sZW5ndGgpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBjYWxsYmFjayBvZiBtdXRhdG9yKSBjYWxsYmFjaygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0TVVUQVRPUlMuZGVsZXRlKGVsKTtcblx0XHRcdH1cblx0XHR9KS5vYnNlcnZlKGVsLCB7XG5cdFx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFtcImNsYXNzXCIsIFwiaGlkZGVuXCJdLFxuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRcdHN1YnRyZWU6IHRydWUsXG5cdFx0fSk7XG5cdH1cblx0bXV0YXRvci5wdXNoKCgpID0+IGNhbGxiYWNrKGVsZW1zIGFzIEhUTUxDb2xsZWN0aW9uT2Y8VD4pKTtcbn07XG5cbi8qKlxuICogb25Mb2FkZWRcbiAqIEBkZXNjcmlwdGlvbiBSdW5zIGEgY2FsbGJhY2sgd2hlbiB3aW5kb3cgaXMgbG9hZGVkIGluIGJyb3dzZXJcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcnVuIHdoZW4gdGhlIHBhZ2UgaXMgcmVhZHlcbiAqL1xuZXhwb3J0IGNvbnN0IG9uTG9hZGVkID0gKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB7XG5cdGlmICghSVNfQlJPV1NFUikgcmV0dXJuO1xuXHRjb25zdCBydW4gPSAoKSA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spOyAvLyBFbnN1cmUgd2UgcnVuIGFmdGVyIGFsbCBvdGhlciBsb2FkIGV2ZW50c1xuXHRpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSBydW4oKTtcblx0ZWxzZSBvbih3aW5kb3csIFwibG9hZFwiLCBydW4pO1xufTtcblxuLyoqXG4gKiBpc0lucHV0TGlrZVxuICogQGRlc2NyaXB0aW9uIENoZWNrIGlmIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKiBAcGFyYW0gZWwgVGhlIGVsZW1lbnQgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKi9cbmV4cG9ydCBjb25zdCBpc0lucHV0TGlrZSA9IChlbDogdW5rbm93bik6IGVsIGlzIEhUTUxJbnB1dEVsZW1lbnQgPT5cblx0ZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcInZhbGlkaXR5XCIgaW4gZWwgJiZcblx0IShlbCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KTtcblxuLyoqXG4gKiB0b0N1c3RvbUVsZW1lbnRQcm9wc1xuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBjb252ZXJ0IHByb3BzIHRvIGN1c3RvbSBlbGVtZW50IGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSBwcm9wcyBUaGUgcHJvcHMgdG8gY29udmVydFxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBwcm9wc1xuICovXG5jb25zdCBTRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xuZXhwb3J0IGNvbnN0IHRvQ3VzdG9tRWxlbWVudFByb3BzID0gKFxuXHR7IGNsYXNzTmFtZSwgaGlkZGVuLCBvcGVuLCAuLi5yZXN0IH06IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRrbGFzcz86IHN0cmluZyxcbikgPT4ge1xuXHRyZXN0LnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyA9IHRydWU7IC8vIE1ha2UgTmV4dC5qcyBoYXBweVxuXHRpZiAocmVzdFtTRUxFQ1RFRF0gIT09IHVuZGVmaW5lZClcblx0XHRyZXN0W1NFTEVDVEVEXSA9IGAkeyhyZXN0W1NFTEVDVEVEXSB8fCBcImZhbHNlXCIpICE9PSBcImZhbHNlXCJ9YDsgLy8gRW5zdXJlIGFyaWEtc2VsZWN0ZWQgYm9vbGVhbiBpcyBzdHJpbmdcblx0aWYgKGNsYXNzTmFtZSB8fCBrbGFzcykgcmVzdC5jbGFzcyA9IGNsc3goa2xhc3MsIGNsYXNzTmFtZSB8fCBcIlwiKTsgLy8gVXNlIGNsYXNzIGluc3RlYWQgb2YgY2xhc3NOYW1lXG5cdGlmIChoaWRkZW4pIHJlc3QuaGlkZGVuID0gdHJ1ZTsgLy8gRW5zdXJlIGJvb2xlYW4gcHJvcCBiZWhhdmlvdXJcblx0aWYgKG9wZW4pIHJlc3Qub3BlbiA9IHRydWU7IC8vIEVuc3VyZSBib29sZWFuIHByb3AgYmVoYXZpb3VyXG5cdHJldHVybiByZXN0O1xufTtcbiIsImltcG9ydCB7IElTX0JST1dTRVIgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgTUFUT01PID0gXCJtYXR0aWxzeW5ldC5tYXRvbW8uY2xvdWRcIjtcbmxldCBFTkFCTEVEOiBBbmFseXRpY3NBY3Rpb25zW1wiaW5pdFwiXVtcImVuYWJsZWRcIl0gPSB0cnVlO1xuXG50eXBlIE1hdG9tbyA9IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuKVtdO1xuZGVjbGFyZSBnbG9iYWwge1xuXHRpbnRlcmZhY2UgV2luZG93IHtcblx0XHRfcGFxPzogTWF0b21vW107XG5cdFx0X210bT86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj5bXTtcblx0fVxufVxuXG4vLyB3aW5kb3cuX3BhcSA9IHdpbmRvdy5fcGFxIHx8IFtdO1xuLy8gd2luZG93Ll9tdG0gPSB3aW5kb3cuX210bSB8fCBbXTtcblxuLy8gd2luZG93Ll9wYXEucHVzaChbXCJzZXRDdXN0b21VcmxcIiwgYCR7ZG9jdW1lbnQubG9jYXRpb24uaHJlZn0mZWlyaWtgXSk7XG4vLyB3aW5kb3cuX3BhcS5wdXNoKFtcInNldERvY3VtZW50VGl0bGVcIiwgXCJFaXJpayAzXCJdKTtcbi8vIHdpbmRvdy5fbXRtLnB1c2goe1xuLy8gXHRldmVudDogXCJtdG0uU3RhcnRcIixcbi8vIFx0XCJtdG0uc3RhcnRUaW1lXCI6IG5ldyBEYXRlKCkuZ2V0VGltZSgpLFxuLy8gXHRjdXN0b21UaXRsZTogXCJFaXJpayAxXCIsXG4vLyBcdGN1c3RvbVVybDogYCR7ZG9jdW1lbnQubG9jYXRpb24uaHJlZn0mZWlyaWtgLFxuLy8gfSk7XG5cbi8vIHdpbmRvdy5fbXRtLnB1c2goe1xuLy8gXHRldmVudDogXCJtdG0uUGFnZVZpZXdcIixcbi8vIFx0Y3VzdG9tVGl0bGU6IFwiRWlyaWsgMlwiLFxuLy8gXHRjdXN0b21Vcmw6IGAke2RvY3VtZW50LmxvY2F0aW9uLmhyZWZ9JmVpcmlrYCxcbi8vIH0pO1xuXG4vLyBjb25zdCBjb250YWluZXJJZCA9IFwiQTl1dEtrM09cIjtcblxuLy8gZG9jdW1lbnQuaGVhZC5hcHBlbmQoXG4vLyBcdE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSwge1xuLy8gXHRcdHNyYzogYGh0dHBzOi8vY2RuLm1hdG9tby5jbG91ZC9tYXR0aWxzeW5ldC5tYXRvbW8uY2xvdWQvY29udGFpbmVyXyR7Y29udGFpbmVySWR9LmpzYCxcbi8vIFx0XHRhc3luYzogdHJ1ZSxcbi8vIFx0XHRvbmxvYWQ6ICgpID0+IGNvbnNvbGUubG9nKHdpbmRvdy5fcGFxKSxcbi8vIFx0fSksXG4vLyApO1xuXG5leHBvcnQgdHlwZSBBbmFseXRpY3NBY3Rpb25zID0ge1xuXHRpbml0OiB7XG5cdFx0bWF0b21vSWQ6IG51bWJlciB8IHN0cmluZztcblx0XHRlbmFibGVkPzogYm9vbGVhbiB8IFwiZGVidWdcIjtcblx0fTtcblx0cGFnZXZpZXc6IHtcblx0XHR1cmw/OiBzdHJpbmc7XG5cdFx0dGl0bGU/OiBzdHJpbmc7XG5cdH07XG5cdGV2ZW50OiB7XG5cdFx0Y2F0ZWdvcnk6IHN0cmluZztcblx0XHRhY3Rpb246IHN0cmluZztcblx0XHRuYW1lPzogc3RyaW5nO1xuXHRcdHZhbHVlPzogbnVtYmVyO1xuXHR9O1xuXHRzZWFyY2g6IHtcblx0XHRxdWVyeTogc3RyaW5nO1xuXHRcdGNhdGVnb3J5Pzogc3RyaW5nO1xuXHRcdHJlc3VsdHM/OiBudW1iZXI7XG5cdH07XG5cdG1hdG9tbzogTWF0b21vO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFuYWx5dGljczxBY3Rpb24gZXh0ZW5kcyBrZXlvZiBBbmFseXRpY3NBY3Rpb25zPihcblx0YWN0aW9uOiBBY3Rpb24sXG5cdGFyZ3MgPSB7fSBhcyBBbmFseXRpY3NBY3Rpb25zW0FjdGlvbl0sXG4pIHtcblx0aWYgKCFJU19CUk9XU0VSKSByZXR1cm47XG5cdGlmICghd2luZG93Ll9wYXEpIHtcblx0XHR3aW5kb3cuX3BhcSA9IFtdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wiSGVhdG1hcFNlc3Npb25SZWNvcmRpbmc6OmRpc2FibGVcIl0pOyAvLyBEaXNhYmxlIGhlYXRtYXBzIGJ5IGRlZmF1bHQgYXMgdGhpcyByZXF1aXJlIGNvb2tpZXNcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcImVuYWJsZUxpbmtUcmFja2luZ1wiXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRUcmFja2VyVXJsXCIsIGBodHRwczovLyR7TUFUT01PfS9tYXRvbW8ucGhwYF0pO1xuXHR9XG5cdGlmIChhY3Rpb24gPT09IFwiaW5pdFwiKSB7XG5cdFx0Y29uc3QgeyBtYXRvbW9JZCwgZW5hYmxlZCB9ID0gYXJncyBhcyBBbmFseXRpY3NBY3Rpb25zW1wiaW5pdFwiXTtcblx0XHRFTkFCTEVEID0gZW5hYmxlZCA/PyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgPT09IFwibG9jYWxob3N0XCI7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRTaXRlSWRcIiwgbWF0b21vSWRdKTtcblx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzY3JpcHRbc3JjKj1cIm1hdG9tby5qc1wiXScpIHx8XG5cdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZChcblx0XHRcdFx0T2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpLCB7XG5cdFx0XHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRcdFx0c3JjOiBgaHR0cHM6Ly9jZG4ubWF0b21vLmNsb3VkLyR7TUFUT01PfS9tYXRvbW8uanNgLFxuXHRcdFx0XHR9KSxcblx0XHRcdCk7XG5cdH1cblxuXHRpZiAoRU5BQkxFRCA9PT0gXCJkZWJ1Z1wiKSByZXR1cm4gY29uc29sZS5pbmZvKGBBbmFseXRpY3M6IFwiJHthY3Rpb259XCJgLCBhcmdzKTtcblx0aWYgKEVOQUJMRUQgPT09IGZhbHNlKSByZXR1cm47XG5cblx0aWYgKGFjdGlvbiA9PT0gXCJwYWdldmlld1wiKSB7XG5cdFx0Y29uc3QgeyB1cmwsIHRpdGxlIH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJwYWdldmlld1wiXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldEN1c3RvbVVybFwiLCB1cmwgfHwgbG9jYXRpb24uaHJlZl0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0RG9jdW1lbnRUaXRsZVwiLCB0aXRsZSB8fCBkb2N1bWVudC50aXRsZV0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1widHJhY2tQYWdlVmlld1wiXSk7XG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcImV2ZW50XCIpIHtcblx0XHRjb25zdCB7IGNhdGVnb3J5LCBhY3Rpb24sIG5hbWUsIHZhbHVlIH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJldmVudFwiXTtcblx0XHRjb25zdCBldmVudCA9IFtcInRyYWNrRXZlbnRcIiwgY2F0ZWdvcnksIGFjdGlvbiwgbmFtZSwgdmFsdWVdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goZXZlbnQuZmlsdGVyKCh2KSA9PiB2ICE9PSB1bmRlZmluZWQpKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwic2VhcmNoXCIpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRxdWVyeSxcblx0XHRcdGNhdGVnb3J5ID0gZmFsc2UsXG5cdFx0XHRyZXN1bHRzID0gZmFsc2UsXG5cdFx0fSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcInNlYXJjaFwiXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInRyYWNrU2l0ZVNlYXJjaFwiLCBxdWVyeSwgY2F0ZWdvcnksIHJlc3VsdHNdKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwibWF0b21vXCIpIHtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcIm1hdG9tb1wiXSk7XG5cdH1cbn1cbiIsImlmIChcblx0dHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHR3aW5kb3cuQ1NTU3R5bGVTaGVldCAmJlxuXHRkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHNcbilcblx0KCgpID0+IHtcblx0XHRjb25zdCBrZXkgPSBcIi0tbXRkcy1hcHAtZXhwYW5kZWRcIjtcblx0XHRjb25zdCBzaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cdFx0Y29uc3QgcHJldiA9ICgpID0+ICF3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KT8uaW5jbHVkZXMoXCJmYWxzZVwiKTtcblxuXHRcdGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5wdXNoKHNoZWV0KTtcblx0XHR3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkID0gKGZvcmNlKSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBuZXh0ID0gZm9yY2UgPz8gIXByZXYoKTtcblx0XHRcdFx0c2hlZXQucmVwbGFjZVN5bmM/LihgOnJvb3QgeyAke2tleX06IHZhcigke2tleX0tLSR7bmV4dH0pfWApO1xuXHRcdFx0XHR3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBuZXh0KTtcblx0XHRcdH0gY2F0Y2ggKF9lcnIpIHt9IC8vIGxvY2FsU3RvcmFnZSBpcyBmdWxsIG9yIHJlcGxhY2VTeW5jIGlzIG5vdCBzdXBwb3J0ZWRcblx0XHR9O1xuXG5cdFx0Ly8gU2V0IGFuZCBzdG9yZSBpbml0aWFsIHN0YXRlXG5cdFx0d2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZChwcmV2KCkpO1xuXHR9KSgpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGRlYm91bmNlLCBvbiwgb25Mb2FkZWQsIG9uTXV0YXRpb24sIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgXCIuL2FwcC10b2dnbGVcIjtcblxuY29uc3QgQ1NTX0FQUCA9IHN0eWxlcy5hcHAuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1NUSUNLWSA9IHN0eWxlcy5zdGlja3kuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1RPR0dMRSA9ICdbZGF0YS1jb21tYW5kPVwidG9nZ2xlLWFwcC1leHBhbmRlZFwiXSc7XG5jb25zdCBDU1NfU0lERUJBUiA9IGAuJHtDU1NfQVBQfSA+IGRpYWxvZywuJHtDU1NfQVBQfSBkaWFsb2cgfiBtYWluYDtcblxuY29uc3QgdXNlVHJhbnNpdGlvbiA9IChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4ge1xuXHRpZiAoIWRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24pIGNhbGxiYWNrKCk7XG5cdGVsc2UgZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbihjYWxsYmFjayk7XG59O1xuXG5leHBvcnQgY29uc3QgdG9nZ2xlQXBwRXhwYW5kZWQgPSAoZm9yY2U/OiBib29sZWFuKSA9PlxuXHQvLyBAdHMtZXhwZWN0LWVycm9yIHdpbmRvdy5tdGRzQXBwVG9nZ2xlIGNvbWVzIGZyb20gYXBwLXRvZ2dsZS5qc1xuXHR1c2VUcmFuc2l0aW9uKCgpID0+IHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQ/Lihmb3JjZSkpO1xuXG5mdW5jdGlvbiBoYW5kbGVUb2dnbGVDbGljayh7IHRhcmdldDogZWwsIGRlZmF1bHRQcmV2ZW50ZWQ6IHN0b3AgfTogRXZlbnQpIHtcblx0Y29uc3QgbGluayA9IChlbCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKFwiYVwiKTtcblx0aWYgKGxpbms/LmNsb3Nlc3QoXCJkaWFsb2dcIikgJiYgbGluaz8uY2xvc2VzdChDU1NfU0lERUJBUikpXG5cdFx0cmV0dXJuIGNsb3NlU2lkZWJhcigpOyAvLyBDbG9zZSBzaWRlYmFyIGlmIGxpbmsgaXMgY2xpY2tlZCBpbnNpZGUgc2lkZWJhclxuXG5cdGlmIChzdG9wIHx8ICEoZWwgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCkgfHwgIWVsLm1hdGNoZXMoQ1NTX1RPR0dMRSkpXG5cdFx0cmV0dXJuO1xuXHRjb25zdCBpc0Rlc2t0b3AgPSBnZXRDb21wdXRlZFN0eWxlKGVsKS5wb3NpdGlvbiA9PT0gXCJzdGlja3lcIjtcblxuXHRpZiAoaXNEZXNrdG9wKSB0b2dnbGVBcHBFeHBhbmRlZCgpO1xuXHRlbHNlXG5cdFx0dXNlVHJhbnNpdGlvbigoKSA9PiB7XG5cdFx0XHRjb25zdCBzaWRlYmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGlhbG9nRWxlbWVudD4oQ1NTX1NJREVCQVIpO1xuXHRcdFx0c2lkZWJhcj8uc2V0QXR0cmlidXRlKFwiZGF0YS1jbG9zZWRieVwiLCBcImFueVwiKTsgLy8gQWxsb3cgY2xvc2luZyBieSBjbGlja2luZyBvdXRzaWRlXG5cdFx0XHRzaWRlYmFyPy5zaG93TW9kYWwoKTtcblx0XHR9KTtcbn1cblxuZnVuY3Rpb24gY2xvc2VTaWRlYmFyKCkge1xuXHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaWFsb2dFbGVtZW50PihDU1NfU0lERUJBUik/LmNsb3NlKCk7XG59XG5cbi8vIFNjcm9sbCBzdGF0ZVxubGV0IE1JTl9ZID0gMDsgLy8gT2Zmc2V0IHRvIGF2b2lkIHNjcm9sbCBqdW1wIHdoZW4gc3RpY2t5IGlzIHNldCB0byByZWxhdGl2ZVxubGV0IFNDUk9MTF9VUDogYm9vbGVhbjtcbmxldCBTVElDSyA9IDA7IC8vIC0xID0gc3RpY2sgdG9wLCAwID0gcmVsYXRpdmUsIDEgPSBzdGljayBib3R0b21cbmxldCBTVElDS19FTDogSFRNTEVsZW1lbnQ7XG5sZXQgU1RJQ0tfSCA9IDA7XG5sZXQgU1RJQ0tfWSA9IDA7XG5sZXQgU1RVQ0sgPSBmYWxzZTsgLy8gVXNlZCB0byBmaWd1cmUgaWYgbmF2IGlzIGxhcmdlciB0aGFuIHZpZXdwb3J0XG5sZXQgV0lOX0ggPSAwO1xubGV0IFdJTl9ZID0gMDtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oW3N0aWNreV06IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdFNUSUNLX0VMID0gc3RpY2t5O1xuXHRoYW5kbGVTY3JvbGwoKTsgLy8gUnVuIG9uIGNvbm5lY3Rcbn1cblxuZnVuY3Rpb24gaGFuZGxlU2Nyb2xsKCkge1xuXHRpZiAoIVNUSUNLX0VMPy5pc0Nvbm5lY3RlZCkgcmV0dXJuO1xuXHRjb25zdCBORVhUX1kgPSB3aW5kb3cuc2Nyb2xsWTtcblx0Y29uc3QgTkVYVF9VUCA9IE5FWFRfWSA8IFdJTl9ZO1xuXHRXSU5fWSA9IE5FWFRfWTtcblxuXHQvLyBPbmx5IGNhbGN1bGF0ZSBpZiBzY3JvbGwgZGlyZWN0aW9uIGhhcyBjaGFuZ2VkXG5cdGlmIChORVhUX1VQICE9PSBTQ1JPTExfVVApIHtcblx0XHRNSU5fWSA9IChTVElDS19FTC5wYXJlbnRFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgfHwgMCkgKyBXSU5fWTtcblx0XHRTQ1JPTExfVVAgPSBORVhUX1VQO1xuXHRcdFNUSUNLX0ggPSBTVElDS19FTC5vZmZzZXRIZWlnaHQ7XG5cdFx0U1RJQ0tfWSA9IFNUSUNLX0VMLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIFdJTl9ZO1xuXHRcdFNUVUNLID0gU1RJQ0tfRUwub2Zmc2V0SGVpZ2h0IDw9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0XHRXSU5fSCA9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0fVxuXG5cdGlmIChTVElDSyA9PT0gLTEgJiYgU1RVQ0spIHJldHVybjsgLy8gQWxsd2F5cyBzdGlja3kgd2hlbiBzaWRlYmFyIGlzIHNtYWxsZXIgdGhhbiB2aWV3cG9ydFxuXHRpZiAoU1RJQ0sgIT09IC0xICYmIChTVFVDSyB8fCAoU0NST0xMX1VQICYmIFdJTl9ZIDw9IFNUSUNLX1kpKSkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJzdGlja3lcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBcIjBweFwiKTtcblx0XHRTVElDSyA9IC0xOyAvLyBOb3Qgc3RpY2tpbmcgdG8gdG9wIGFuZCBzaWRlYmFyIGlzIHNtYWxsZXIgdGhhbiB2aWV3cG9ydCBvciBzY3JvbGxpbmcgdXBcblx0fSBlbHNlIGlmIChTVElDSyA9PT0gLTEgJiYgIVNDUk9MTF9VUCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJyZWxhdGl2ZVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke01hdGgubWF4KDAsIFdJTl9ZIC0gTUlOX1kpfXB4YCk7XG5cdFx0U1RJQ0sgPSAwOyAvLyBTdGlja2luZyB0byB0b3AgYW5kIHNjcm9sbGluZyBkb3duXG5cdH0gZWxzZSBpZiAoU1RJQ0sgIT09IDEgJiYgIVNDUk9MTF9VUCAmJiBXSU5fWSArIFdJTl9IID49IFNUSUNLX1kgKyBTVElDS19IKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInN0aWNreVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke1dJTl9IIC0gU1RJQ0tfSH1weGApO1xuXHRcdFNUSUNLID0gMTsgLy8gTm90IHN0aWNraW5nIHRvIGJvdHRvbSBhbmQgc2Nyb2xsaW5nIGRvd25cblx0fSBlbHNlIGlmIChTVElDSyA9PT0gMSAmJiBTQ1JPTExfVVApIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwicmVsYXRpdmVcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBgJHtTVElDS19ZIC0gTUlOX1l9cHhgKTtcblx0XHRTVElDSyA9IDA7IC8vIFN0aWNraW5nIHRvIGJvdHRvbSBhbmQgc2Nyb2xsaW5nIHVwXG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX1NUSUNLWSwgaGFuZGxlTXV0YXRpb24pO1xuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVUb2dnbGVDbGljaywgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwicmVzaXplXCIsIGRlYm91bmNlKGNsb3NlU2lkZWJhciwgMTAwKSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwic2Nyb2xsXCIsIGhhbmRsZVNjcm9sbCwgUVVJQ0tfRVZFTlQpO1xufSk7XG4iLCJjb25zdCBnZXRTdGVwcyA9IChcblx0bm93OiBudW1iZXIsXG5cdG1heDogbnVtYmVyLFxuXHRzaG93ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuKSA9PiB7XG5cdGNvbnN0IG9mZnNldCA9IChzaG93IC0gMSkgLyAyO1xuXHRjb25zdCBzdGFydCA9IE1hdGgubWF4KE1hdGgubWluKG5vdyAtIE1hdGguZmxvb3Iob2Zmc2V0KSwgbWF4IC0gc2hvdyArIDEpLCAxKTtcblx0Y29uc3QgZW5kID0gTWF0aC5taW4oTWF0aC5tYXgobm93ICsgTWF0aC5jZWlsKG9mZnNldCksIHNob3cpLCBtYXgpO1xuXHRjb25zdCBwYWdlcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGVuZCArIDEgLSBzdGFydCB9LCAoXywgaSkgPT4gaSArIHN0YXJ0KTtcblxuXHRpZiAoc2hvdyA+IDQgJiYgc3RhcnQgPiAxKSBwYWdlcy5zcGxpY2UoMCwgMiwgMSwgMCk7XG5cdGlmIChzaG93ID4gMyAmJiBlbmQgPCBtYXgpIHBhZ2VzLnNwbGljZSgtMiwgMiwgMCwgbWF4KTtcblx0cmV0dXJuIHBhZ2VzO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhZ2luYXRpb24gPSAoeyBjdXJyZW50ID0gMSwgdG90YWwgPSAxMCwgc2hvdyA9IDcgfSkgPT4gKHtcblx0cHJldjogY3VycmVudCA+IDEgPyBjdXJyZW50IC0gMSA6IDAsXG5cdG5leHQ6IGN1cnJlbnQgPCB0b3RhbCA/IGN1cnJlbnQgKyAxIDogMCxcblx0cGFnZXM6IGdldFN0ZXBzKGN1cnJlbnQsIHRvdGFsLCBzaG93KS5tYXAoKHBhZ2UsIGluZGV4KSA9PiAoe1xuXHRcdGN1cnJlbnQ6IHBhZ2UgPT09IGN1cnJlbnQgJiYgKFwicGFnZVwiIGFzIGNvbnN0KSxcblx0XHRrZXk6IGBrZXktJHtwYWdlfS0ke2luZGV4fWAsXG5cdFx0cGFnZSxcblx0fSkpLFxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0JSRUFEQ1JVTUJTID0gc3R5bGVzLmJyZWFkY3J1bWJzLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oYnJlYWRjcnVtYnM6IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgYnJlYWRjdW1icyBvZiBicmVhZGNydW1icylcblx0XHRicmVhZGN1bWJzLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaSBhXCIpLmZvckVhY2goKGNydW1iLCBpbmRleCwgeyBsZW5ndGggfSkgPT4ge1xuXHRcdFx0YXR0cihjcnVtYiwgXCJhcmlhLWN1cnJlbnRcIiwgaW5kZXggPT09IGxlbmd0aCAtIDEgPyBcInBhZ2VcIiA6IG51bGwpO1xuXHRcdH0pO1xufVxuXG5vbkxvYWRlZCgoKSA9PlxuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX0JSRUFEQ1JVTUJTLCBoYW5kbGVNdXRhdGlvbiksXG4pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdGF0dHIsXG5cdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIsXG5cdElTX0JST1dTRVIsXG5cdG9uLFxuXHRvbkxvYWRlZCxcblx0UVVJQ0tfRVZFTlQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRElBTE9HID0gc3R5bGVzLmRpYWxvZy5zcGxpdChcIiBcIilbMF07XG5jb25zdCBESUFMT0dTID0gSVNfQlJPV1NFUlxuXHQ/IChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuXHRcdFx0Q1NTX0RJQUxPRyxcblx0XHQpIGFzIEhUTUxDb2xsZWN0aW9uT2Y8SFRNTERpYWxvZ0VsZW1lbnQ+KVxuXHQ6IFtdO1xuXG5jb25zdCBoYW5kbGVNb2RhbCA9ICgpID0+IHtcblx0Zm9yIChjb25zdCBkaWFsb2cgb2YgRElBTE9HUylcblx0XHRpZiAoZGlhbG9nLmlzQ29ubmVjdGVkICYmIGRpYWxvZy5zaG93TW9kYWwgJiYgZGlhbG9nLmNsb3NlKSB7XG5cdFx0XHRpZiAoZGlhbG9nLm1hdGNoZXMoJ1tvcGVuXTpub3QoW2RhdGEtbW9kYWw9XCJmYWxzZVwiXSk6bm90KDptb2RhbCknKSkge1xuXHRcdFx0XHRhdHRyKGRpYWxvZywgXCJvcGVuXCIsIG51bGwpOyAvLyBVc2luZyBhdHRyaWJ1dGUgaW5zdGVhZCBvZiAuY2xvc2UgdG8gYXZvaWQgYGNsb3NlYCBldmVudFxuXHRcdFx0XHRkaWFsb2cuc2hvd01vZGFsKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGRpYWxvZy5tYXRjaGVzKFwiOm1vZGFsOm5vdChbb3Blbl0pXCIpKSB7XG5cdFx0XHRcdGF0dHIoZGlhbG9nLCBcIm9wZW5cIiwgXCJcIik7IC8vIFNldCBhcyBvcGVuXG5cdFx0XHRcdGRpYWxvZy5jbG9zZSgpOyAvLyBTbyB3ZSBjb3JyZWNsdHkgY2FuIGNhbGwgLmNsb3NlLCByZW1vdmluZyA8ZGlhbG9nPiBmcm9tICN0b3AtbGF5ZXJcblx0XHRcdH1cblx0XHR9XG59O1xuXG5jb25zdCBoYW5kbGVDbGljayA9ICh7IGNsaWVudFg6IHgsIGNsaWVudFk6IHksIHRhcmdldDogZWwgfTogTW91c2VFdmVudCkgPT4ge1xuXHRjb25zdCBkaWFsb2cgPSAoZWwgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihcImRpYWxvZ1wiKTtcblxuXHRpZiAoIWRpYWxvZykgcmV0dXJuO1xuXHRpZiAoKGVsIGFzIEVsZW1lbnQpLmNsb3Nlc3QoJ1tkYXRhLWNvbW1hbmQ9XCJjbG9zZVwiXScpKSByZXR1cm4gZGlhbG9nLmNsb3NlKCk7XG5cdGlmIChhdHRyKGRpYWxvZywgXCJkYXRhLWNsb3NlZGJ5XCIpID09PSBcImFueVwiKSB7XG5cdFx0Y29uc3QgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQgfSA9IGRpYWxvZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRjb25zdCBpc0luc2lkZSA9IHRvcCA8PSB5ICYmIHkgPD0gYm90dG9tICYmIGxlZnQgPD0geCAmJiB4IDw9IHJpZ2h0O1xuXHRcdGlmICghaXNJbnNpZGUpIGRpYWxvZy5jbG9zZSgpO1xuXHR9XG59O1xuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZUNsaWNrIGFzIEV2ZW50TGlzdGVuZXIsIFFVSUNLX0VWRU5UKTtcblx0Y3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcihoYW5kbGVNb2RhbCkub2JzZXJ2ZShcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG5cdFx0e1xuXHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbXCJvcGVuXCJdLFxuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRcdHN1YnRyZWU6IHRydWUsXG5cdFx0fSxcblx0KTtcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIG9uLCBvbkxvYWRlZCwgUVVJQ0tfRVZFTlQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZnVuY3Rpb24gaGFuZGxlSW5qZWN0KGV2ZW50OiBFdmVudCAmIHsgYW5pbWF0aW9uTmFtZT86IHN0cmluZyB9KSB7XG5cdGlmIChldmVudC5hbmltYXRpb25OYW1lICE9PSBzdHlsZXMuX2Vycm9yc3VtbWFyeSkgcmV0dXJuO1xuXHRjb25zdCBmaXJzdCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCk/LmZpcnN0RWxlbWVudENoaWxkO1xuXG5cdGlmIChmaXJzdCBpbnN0YW5jZW9mIEhUTUxIZWFkaW5nRWxlbWVudCkge1xuXHRcdGF0dHIoZmlyc3QsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcblx0XHRmaXJzdC5mb2N1cygpOyAvLyBBdXRvZm9jdXMgZmlyc3QgaGVhZGluZ1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uKGRvY3VtZW50LCBcImFuaW1hdGlvbmVuZFwiLCBoYW5kbGVJbmplY3QsIFFVSUNLX0VWRU5UKSk7XG4iLCJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5cbi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfSU9TID0gSVNfQlJPV1NFUiAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgU0FGRV9MQUJFTExFREJZID0gYCR7SVNfQU5EUk9JRCA/IFwiZGF0YVwiIDogXCJhcmlhXCJ9LWxhYmVsbGVkYnlgO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBGT0NVU19PVVRMSU5FID0gXCJvdXRsaW5lOiAxcHggZG90dGVkOyBvdXRsaW5lOiA1cHggYXV0byBIaWdobGlnaHQ7IG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvclwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIGF0dGFjaFN0eWxlID0gKGVsZW1lbnQsIGNzcykgPT4gZWxlbWVudC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAvLyBVbm5hbWVkIHNsb3QgZG9lcyBhdXRvbWF0aWNhbGx5IHJlbmRlciBhbGwgdG9wIGVsZW1lbnQgbm9kZXNcbiAgY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIGNzcylcbik7XG52YXIgb2JzZXJ2ZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgbXV0YXRpb25PYnNlcnZlciA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHJldHVybiBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpO1xuICB0cnkge1xuICAgIG9ic2VydmVycy5nZXQoZWxlbWVudCkuZGlzY29ubmVjdCgpO1xuICAgIG9ic2VydmVycy5kZWxldGUoZWxlbWVudCk7XG4gIH0gY2F0Y2ggKF9lcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIExJVkU7XG52YXIgTElWRV9TUl9GSVggPSAwO1xudmFyIHNwZWFrID0gKHRleHQpID0+IHtcbiAgaWYgKCFMSVZFKSB7XG4gICAgTElWRSA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgTElWRS5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjpmaXhlZDtvdmVyZmxvdzpoaWRkZW47d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcFwiO1xuICAgIGF0dHIoTElWRSwgXCJhcmlhLWxpdmVcIiwgXCJhc3NlcnRpdmVcIik7XG4gIH1cbiAgaWYgKCFMSVZFLmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZChMSVZFKTtcbiAgaWYgKHRleHQpIExJVkUudGV4dENvbnRlbnQgPSBgJHt0ZXh0fSR7TElWRV9TUl9GSVgrKyAlIDIgPyBcIlxceEEwXCIgOiBcIlwifWA7XG59O1xudmFyIHNldFZhbHVlID0gKGlucHV0LCBkYXRhLCB0eXBlID0gXCJcIikgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlLCBkYXRhLCBpbnB1dFR5cGU6IHR5cGUgfTtcbiAgY29uc3QgcHJvdG8gPSBIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImJlZm9yZWlucHV0XCIsIGV2ZW50KSk7XG4gIChfYiA9IChfYTIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBcInZhbHVlXCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwoaW5wdXQsIGRhdGEpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiaW5wdXRcIiwgZXZlbnQpKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJjaGFuZ2VcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbn07XG52YXIgSVNfUFJFU1MgPSBmYWxzZTtcbnZhciBpc01vdXNlRG93biA9IChldmVudCkgPT4ge1xuICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gXCJtb3VzZXVwXCIpIElTX1BSRVNTID0gZmFsc2U7XG4gIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSBcIm1vdXNlZG93blwiKSB7XG4gICAgSVNfUFJFU1MgPSB0cnVlO1xuICAgIG9uKGRvY3VtZW50LCBcIm1vdXNldXBcIiwgaXNNb3VzZURvd24sIHsgb25jZTogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gSVNfUFJFU1M7XG59O1xuXG4vLyB1LW9wdGlvbi50c1xudmFyIERJU0FCTEVEID0gXCJkaXNhYmxlZFwiO1xudmFyIFNFTEVDVEVEID0gXCJzZWxlY3RlZFwiO1xudmFyIFVIVE1MT3B0aW9uRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtESVNBQkxFRCwgU0VMRUNURURdO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICghSVNfSU9TKSB0aGlzLnRhYkluZGV4ID0gLTE7XG4gICAgaWYgKCF0aGlzLmhhc0F0dHJpYnV0ZShcInJvbGVcIikpIGF0dHIodGhpcywgXCJyb2xlXCIsIFwib3B0aW9uXCIpO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWRpc2FibGVkXCIsIGAke3RoaXMuZGlzYWJsZWR9YCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtc2VsZWN0ZWRcIiwgYCR7dGhpcy5zZWxlY3RlZH1gKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgd2hldGhlciB0aGUgb3B0aW9uIGluIHRoZSBsaXN0IGJveCBpcyB0aGUgZGVmYXVsdCBpdGVtLiAqL1xuICBnZXQgZGVmYXVsdFNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzW1NFTEVDVEVEXTtcbiAgfVxuICBzZXQgZGVmYXVsdFNlbGVjdGVkKHZhbHVlKSB7XG4gICAgdGhpc1tTRUxFQ1RFRF0gPSB2YWx1ZTtcbiAgfVxuICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgRElTQUJMRUQpICE9PSBudWxsO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgRElTQUJMRUQsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIC8qKiBSZXRyaWV2ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGZvcm0gdGhhdCB0aGUgb2JqZWN0IGlzIGVtYmVkZGVkIGluLiAqL1xuICBnZXQgZm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwiZm9ybVwiKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIG9yZGluYWwgcG9zaXRpb24gb2YgYW4gb3B0aW9uIGluIGEgbGlzdCBib3guICovXG4gIGdldCBpbmRleCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiBbXG4gICAgICAuLi4oKF9hMiA9IHRoaXMucGFyZW50RWxlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5vcHRpb25zKSB8fCBbdGhpc11cbiAgICBdLmluZGV4T2YodGhpcyk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIGEgdmFsdWUgdGhhdCB5b3UgY2FuIHVzZSB0byBpbXBsZW1lbnQgeW91ciBvd24gbGFiZWwgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIG9iamVjdC4gKi9cbiAgZ2V0IGxhYmVsKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIChfYTIgPSBhdHRyKHRoaXMsIFwibGFiZWxcIikpICE9IG51bGwgPyBfYTIgOiB0aGlzLnRleHQ7XG4gIH1cbiAgc2V0IGxhYmVsKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcImxhYmVsXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgU0VMRUNURUQpICE9PSBudWxsO1xuICB9XG4gIHNldCBzZWxlY3RlZCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgU0VMRUNURUQsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgdGV4dCBzdHJpbmcgc3BlY2lmaWVkIGJ5IHRoZSBvcHRpb24gdGFnLiAqL1xuICBnZXQgdGV4dCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoKF9hMiA9IHRoaXMudGV4dENvbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICB9XG4gIHNldCB0ZXh0KHRleHQpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdGV4dDtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIHZhbHVlIHdoaWNoIGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIgd2hlbiB0aGUgZm9ybSBjb250cm9sIGlzIHN1Ym1pdHRlZC4gKi9cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIChfYTIgPSBhdHRyKHRoaXMsIFwidmFsdWVcIikpICE9IG51bGwgPyBfYTIgOiB0aGlzLnRleHQ7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgfVxufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtb3B0aW9uXCIsIFVIVE1MT3B0aW9uRWxlbWVudCk7XG5cbi8vIHUtZGF0YWxpc3QudHNcbnZhciBMSVZFX1RJTUVSO1xudmFyIElOUFVUX0RFQk9VTkNFID0gMDtcbnZhciBJU19NT0JJTEUgPSBJU19JT1MgfHwgSVNfQU5EUk9JRDtcbnZhciBFVkVOVFMgPSBcImNsaWNrLGZvY3Vzb3V0LGlucHV0LGtleWRvd24sbW91c2Vkb3duLG1vdXNldXBcIjtcbnZhciBFVkVOVFNfSU5QVVQgPSBcImZvY3VzLGZvY3VzaW4sYmx1cixmb2N1c291dFwiO1xudmFyIFRFWFRTID0ge1xuICBzaW5ndWxhcjogXCIlZCBoaXRcIixcbiAgcGx1cmFsOiBcIiVkIGhpdHNcIlxufTtcbnZhciBVSFRNTERhdGFMaXN0RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl90ZXh0cyA9IF9fc3ByZWFkVmFsdWVzKHt9LCBURVhUUyk7XG4gICAgdGhpcy5fdmFsdWUgPSBcIlwiO1xuICAgIGF0dGFjaFN0eWxlKFxuICAgICAgdGhpcyxcbiAgICAgIGAke0RJU1BMQVlfQkxPQ0t9XG5cdFx0XHQ6OnNsb3R0ZWQodS1vcHRpb24pIHsgZGlzcGxheTogYmxvY2s7IGN1cnNvcjogcG9pbnRlciB9XG5cdFx0XHQ6OnNsb3R0ZWQodS1vcHRpb246Zm9jdXMpIHsgJHtGT0NVU19PVVRMSU5FfSB9XG5cdFx0XHQ6OnNsb3R0ZWQodS1vcHRpb25bYXJpYS1oaWRkZW49XCJ0cnVlXCJdKSxcblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvbltkaXNhYmxlZF0pLFxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uW2hpZGRlbl0pIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50IH1gXG4gICAgKTtcbiAgfVxuICAvLyBVc2VkIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgYW5ub3VuY2VtZW50c1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiaWRcIiwgLi4uT2JqZWN0LmtleXMoVEVYVFMpLm1hcCgoa2V5KSA9PiBgZGF0YS1zci0ke2tleX1gKV07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuX3Jvb3QgPSBnZXRSb290KHRoaXMpO1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwibGlzdGJveFwiKTtcbiAgICBhdHRyKHRoaXMsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcbiAgICBvbih0aGlzLl9yb290LCBcImZvY3VzaW5cIiwgdGhpcyk7XG4gICAgb24odGhpcy5fcm9vdCwgXCJmb2N1c1wiLCB0aGlzLCB0cnVlKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHtcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogW1wiZGlzYWJsZWRcIiwgXCJoaWRkZW5cIiwgXCJsYWJlbFwiLCBcInZhbHVlXCJdLFxuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpKTtcbiAgfVxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBvZmYodGhpcy5fcm9vdCB8fCB0aGlzLCBcImZvY3VzXCIsIHRoaXMsIHRydWUpO1xuICAgIG9mZih0aGlzLl9yb290IHx8IHRoaXMsIFwiZm9jdXNpblwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIGZhbHNlKTtcbiAgICBkaXNjb25uZWN0SW5wdXQodGhpcyk7XG4gICAgdGhpcy5fcm9vdCA9IHZvaWQgMDtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socHJvcCwgX3ByZXYsIG5leHQpIHtcbiAgICBjb25zdCB0ZXh0ID0gcHJvcCA9PSBudWxsID8gdm9pZCAwIDogcHJvcC5zcGxpdChcImRhdGEtc3ItXCIpWzFdO1xuICAgIGNvbnN0IGNzcyA9IGBpbnB1dFtsaXN0PVwiJHt0aGlzLmlkfVwiXWA7XG4gICAgaWYgKFRFWFRTW3RleHRdKSB0aGlzLl90ZXh0c1t0ZXh0XSA9IG5leHQgfHwgVEVYVFNbdGV4dF07XG4gICAgZWxzZSBpZiAodGhpcy5fcm9vdCkge1xuICAgICAgaWYgKHRoaXMuX2lucHV0KSBzZXR1cElucHV0KHRoaXMsIHRoaXMuX2lucHV0KTtcbiAgICAgIGZvciAoY29uc3QgaW5wdXQgb2YgdGhpcy5fcm9vdC5xdWVyeVNlbGVjdG9yQWxsKGNzcykpXG4gICAgICAgIHNldHVwSW5wdXQodGhpcywgaW5wdXQpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHsgdGFyZ2V0LCB0eXBlIH0gPSBldmVudDtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmICh0eXBlID09PSBcImNsaWNrXCIpIG9uQ2xpY2sodGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImZvY3VzXCIgfHwgdHlwZSA9PT0gXCJmb2N1c2luXCIpIG9uRm9jdXModGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImJsdXJcIiB8fCB0eXBlID09PSBcImZvY3Vzb3V0XCIpIG9uQmx1cih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwia2V5ZG93blwiKSBvbktleURvd24odGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiICYmIHRoaXMuY29udGFpbnModGFyZ2V0KSlcbiAgICAgIGlzTW91c2VEb3duKGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJtdXRhdGlvblwiIHx8IHR5cGUgPT09IFwiaW5wdXRcIikge1xuICAgICAgY2xlYXJUaW1lb3V0KElOUFVUX0RFQk9VTkNFKTtcbiAgICAgIElOUFVUX0RFQk9VTkNFID0gc2V0VGltZW91dChvbklucHV0LCAwLCB0aGlzLCBldmVudCk7XG4gICAgfVxuICB9XG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidS1vcHRpb25cIik7XG4gIH1cbn07XG52YXIgaXNEaXNhYmxlZCA9IChpbnB1dCkgPT4gKGlucHV0ID09IG51bGwgPyB2b2lkIDAgOiBpbnB1dC5kaXNhYmxlZCkgfHwgKGlucHV0ID09IG51bGwgPyB2b2lkIDAgOiBpbnB1dC5yZWFkT25seSkgfHwgZmFsc2U7XG52YXIgc2V0RXhwYW5kZWQgPSAoc2VsZiwgb3BlbikgPT4ge1xuICB2YXIgX2EyLCBfYiwgX2M7XG4gIGlmIChzZWxmLmhpZGRlbiAhPT0gb3BlbikgcmV0dXJuO1xuICBzZWxmLmhpZGRlbiA9IGlzRGlzYWJsZWQoc2VsZiA9PSBudWxsID8gdm9pZCAwIDogc2VsZi5faW5wdXQpIHx8ICFvcGVuO1xuICAoX2EyID0gbXV0YXRpb25PYnNlcnZlcihzZWxmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50YWtlUmVjb3JkcygpO1xuICBjb25zdCBpc1BvcG92ZXIgPSBzZWxmLmlzQ29ubmVjdGVkICYmIHNlbGYucG9wb3ZlciAmJiAoKF9iID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5pc0Nvbm5lY3RlZCkgJiYgKChfYyA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2MucG9wb3ZlclRhcmdldEVsZW1lbnQpID09PSBzZWxmO1xuICBpZiAoc2VsZi5faW5wdXQpIHNldHVwSW5wdXQoc2VsZiwgc2VsZi5faW5wdXQsIG9wZW4pO1xuICBpZiAoaXNQb3BvdmVyKSBhdHRyKHNlbGYsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcbiAgaWYgKGlzUG9wb3Zlcikgc2VsZi50b2dnbGVQb3BvdmVyKG9wZW4pO1xuICBpZiAob3Blbikgb25JbnB1dChzZWxmKTtcbn07XG52YXIgZGlzY29ubmVjdElucHV0ID0gKHNlbGYpID0+IHtcbiAgaWYgKCFzZWxmLl9pbnB1dCkgcmV0dXJuO1xuICBvZmYoc2VsZi5faW5wdXQgfHwgc2VsZiwgRVZFTlRTX0lOUFVULCBzZWxmKTtcbiAgb2ZmKHNlbGYuX3Jvb3QgfHwgc2VsZiwgRVZFTlRTLCBzZWxmKTtcbiAgc2V0RXhwYW5kZWQoc2VsZiwgZmFsc2UpO1xuICBzZWxmLl9pbnB1dCA9IHZvaWQgMDtcbn07XG52YXIgc2V0dXBJbnB1dCA9IChzZWxmLCBpbnB1dCwgb3BlbiA9IGZhbHNlKSA9PiB7XG4gIGlmIChzZWxmLnBvcG92ZXIpIGF0dHIoaW5wdXQsIFwicG9wb3ZlcnRhcmdldFwiLCB1c2VJZChzZWxmKSk7XG4gIG9uKGlucHV0LCBFVkVOVFNfSU5QVVQsIHNlbGYsIHRydWUpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtYXV0b2NvbXBsZXRlXCIsIFwibGlzdFwiKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWNvbnRyb2xzXCIsIHVzZUlkKHNlbGYpKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWV4cGFuZGVkXCIsIGAkeyFJU19NT0JJTEUgfHwgb3Blbn1gKTtcbiAgYXR0cihpbnB1dCwgXCJhdXRvY29tcGxldGVcIiwgXCJvZmZcIik7XG4gIGF0dHIoaW5wdXQsIFwicm9sZVwiLCBpc0Rpc2FibGVkKGlucHV0KSA/IG51bGwgOiBcImNvbWJvYm94XCIpO1xufTtcbnZhciBvbkZvY3VzID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IGlzSW5wdXQgPSBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50O1xuICBpZiAoaXNJbnB1dCAmJiBldmVudC5pc1RydXN0ZWQpIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICBpZiAoc2VsZi5faW5wdXQgIT09IGV2ZW50LnRhcmdldCAmJiBpc0lucHV0ICYmIGV2ZW50LnRhcmdldC5saXN0ID09PSBzZWxmKSB7XG4gICAgaWYgKHNlbGYuX2lucHV0KSBkaXNjb25uZWN0SW5wdXQoc2VsZik7XG4gICAgc2VsZi5faW5wdXQgPSBldmVudC50YXJnZXQ7XG4gICAgc2VsZi5faW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImZvY3VzXCIpKTtcbiAgICBzZWxmLl9pbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNpblwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgIGF0dHIoc2VsZiwgU0FGRV9MQUJFTExFREJZLCB1c2VJZCgoX2EyID0gc2VsZi5faW5wdXQubGFiZWxzKSA9PSBudWxsID8gdm9pZCAwIDogX2EyWzBdKSk7XG4gICAgb24oc2VsZi5fcm9vdCB8fCBzZWxmLCBFVkVOVFMsIHNlbGYpO1xuICAgIHNldEV4cGFuZGVkKHNlbGYsIGF0dHIoc2VsZi5faW5wdXQsIFwiaW5wdXRtb2RlXCIpICE9PSBcIm5vbmVcIik7XG4gICAgc3BlYWsoKTtcbiAgfVxufTtcbnZhciBvbkJsdXIgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgaWYgKCFJU19BTkRST0lEICYmICFpc01vdXNlRG93bigpICYmIHNlbGYuX2lucHV0KVxuICAgIHNldFRpbWVvdXQob25CbHVycmVkLCAwLCBzZWxmKTtcbiAgaWYgKGV2ZW50LnRhcmdldCA9PT0gc2VsZi5faW5wdXQgJiYgZXZlbnQuaXNUcnVzdGVkKVxuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufTtcbnZhciBvbkJsdXJyZWQgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByZWxhdGVkVGFyZ2V0ID0gKChfYTIgPSBzZWxmLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmFjdGl2ZUVsZW1lbnQpIHx8IG51bGw7XG4gIGNvbnN0IGlucHV0ID0gc2VsZi5faW5wdXQ7XG4gIGlmIChpbnB1dCAmJiBpbnB1dCAhPT0gcmVsYXRlZFRhcmdldCAmJiAhc2VsZi5jb250YWlucyhyZWxhdGVkVGFyZ2V0KSkge1xuICAgIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJibHVyXCIsIHsgcmVsYXRlZFRhcmdldCB9KSk7XG4gICAgaW5wdXQuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNvdXRcIiwgeyBidWJibGVzOiB0cnVlLCByZWxhdGVkVGFyZ2V0IH0pXG4gICAgKTtcbiAgICBkaXNjb25uZWN0SW5wdXQoc2VsZik7XG4gIH1cbn07XG52YXIgb25DbGljayA9IChzZWxmLCB7IHRhcmdldCB9KSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmICghc2VsZi5faW5wdXQgfHwgc2VsZi5faW5wdXQgPT09IHRhcmdldCkgcmV0dXJuIHNldEV4cGFuZGVkKHNlbGYsIHRydWUpO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBzZWxmLm9wdGlvbnMpXG4gICAgaWYgKG9wdC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICBpZiAoYXR0cihzZWxmLCBcImFyaWEtbXVsdGlzZWxlY3RhYmxlXCIpICE9PSBcInRydWVcIikge1xuICAgICAgICAoX2EyID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZm9jdXMoKTtcbiAgICAgICAgc2V0RXhwYW5kZWQoc2VsZiwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNldFZhbHVlKHNlbGYuX2lucHV0LCBvcHQudmFsdWUpO1xuICAgIH1cbiAgaWYgKElTX0FORFJPSUQpIG9uQmx1cnJlZChzZWxmKTtcbn07XG52YXIgb25LZXlEb3duID0gKHNlbGYsIGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgeyBrZXksIHRhcmdldCwgYWx0S2V5LCBjdHJsS2V5LCBzaGlmdEtleSwgbWV0YUtleSB9ID0gZTtcbiAgY29uc3QgaXNFc2NhcGUgPSBrZXkgPT09IFwiRXNjYXBlXCIgfHwga2V5ID09PSBcIkVzY1wiO1xuICBpZiAoYWx0S2V5IHx8IGN0cmxLZXkgfHwgbWV0YUtleSB8fCBzaGlmdEtleSB8fCBrZXkgPT09IFwiVGFiXCIpIHJldHVybjtcbiAgaWYgKGlzRXNjYXBlICYmICFzZWxmLmhpZGRlbikgZSA9PSBudWxsID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICBzZXRFeHBhbmRlZChzZWxmLCAhaXNFc2NhcGUpO1xuICBjb25zdCBvcHRpb25zID0gWy4uLnNlbGYub3B0aW9uc10uZmlsdGVyKFxuICAgIChlbCkgPT4gYXR0cihlbCwgXCJhcmlhLWhpZGRlblwiKSAhPT0gXCJ0cnVlXCIgJiYgZWwub2Zmc2V0SGVpZ2h0XG4gICk7XG4gIGNvbnN0IHByZXYgPSBvcHRpb25zLmluZGV4T2YodGFyZ2V0KTtcbiAgbGV0IG5leHQgPSAtMTtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIikgbmV4dCA9IChwcmV2ICsgMSkgJSBvcHRpb25zLmxlbmd0aDtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd1VwXCIpIG5leHQgPSAofnByZXYgPyBwcmV2IDogb3B0aW9ucy5sZW5ndGgpIC0gMTtcbiAgaWYgKH5wcmV2KSB7XG4gICAgaWYgKGtleSA9PT0gXCJIb21lXCIgfHwga2V5ID09PSBcIlBhZ2VVcFwiKSBuZXh0ID0gMDtcbiAgICBpZiAoa2V5ID09PSBcIkVuZFwiIHx8IGtleSA9PT0gXCJQYWdlRG93blwiKSBuZXh0ID0gb3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIGlmIChrZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgb3B0aW9uc1twcmV2XS5jbGljaygpO1xuICAgICAgcmV0dXJuIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbiAgaWYgKG9wdGlvbnNbbmV4dF0pIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIG9wdGlvbi50YWJJbmRleCA9IC0xO1xuICBpZiAob3B0aW9uc1tuZXh0XSkgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAoX2EyID0gb3B0aW9uc1tuZXh0XSB8fCBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xuICBpZiAoIW9wdGlvbnNbbmV4dF0gJiYga2V5ID09PSBcIkFycm93VXBcIilcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHZhciBfYTM7XG4gICAgICByZXR1cm4gKF9hMyA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2EzLnNldFNlbGVjdGlvblJhbmdlKDk5OSwgOTk5KTtcbiAgICB9KTtcbn07XG52YXIgb25JbnB1dCA9IChzZWxmLCBlKSA9PiB7XG4gIGNvbnN0IHsgX3RleHRzLCBfcm9vdCwgX2lucHV0LCBvcHRpb25zIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9IChfaW5wdXQgPT0gbnVsbCA/IHZvaWQgMCA6IF9pbnB1dC52YWx1ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKSkgfHwgXCJcIjtcbiAgY29uc3QgZmlsdGVyID0gIXNlbGYuaGFzQXR0cmlidXRlKFwiZGF0YS1ub2ZpbHRlclwiKTtcbiAgY29uc3QgaGlkZGVuID0gW107XG4gIGNvbnN0IHZpc2libGUgPSBbXTtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGNvbnN0IGhpZGUgPSBvcHQuZGlzYWJsZWQgfHwgb3B0LmhpZGRlbiB8fCBmaWx0ZXIgJiYgIW9wdC5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHZhbHVlKTtcbiAgICAoaGlkZSA/IGhpZGRlbiA6IHZpc2libGUpLnB1c2gob3B0KTtcbiAgfVxuICBmb3IgKGNvbnN0IG9wdCBvZiBoaWRkZW4pIGF0dHIob3B0LCBcImFyaWEtaGlkZGVuXCIsIFwidHJ1ZVwiKTtcbiAgZm9yIChjb25zdCBvcHQgb2YgdmlzaWJsZSkgYXR0cihvcHQsIFwiYXJpYS1oaWRkZW5cIiwgXCJmYWxzZVwiKTtcbiAgY29uc3QgdG90YWwgPSB2aXNpYmxlLmxlbmd0aDtcbiAgY2xlYXJUaW1lb3V0KExJVkVfVElNRVIpO1xuICBpZiAoKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUudHlwZSkgPT09IFwiaW5wdXRcIiAmJiB2YWx1ZSAhPT0gc2VsZi5fdmFsdWUpXG4gICAgTElWRV9USU1FUiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IGAkeyF0b3RhbCAmJiBzZWxmLmlubmVyVGV4dC50cmltKCkgfHwgYCR7X3RleHRzW3RvdGFsID09PSAxID8gXCJzaW5ndWxhclwiIDogXCJwbHVyYWxcIl19YC5yZXBsYWNlKFwiJWRcIiwgYCR7dG90YWx9YCl9YDtcbiAgICAgIGlmICghc2VsZi5oaWRkZW4gJiYgKF9yb290ID09IG51bGwgPyB2b2lkIDAgOiBfcm9vdC5hY3RpdmVFbGVtZW50KSA9PT0gX2lucHV0KSBzcGVhayh0ZXh0KTtcbiAgICAgIHNlbGYuX3ZhbHVlID0gdmFsdWU7XG4gICAgfSwgMWUzKTtcbiAgaWYgKElTX0lPUylcbiAgICB2aXNpYmxlLmZvckVhY2goKG9wdCwgaWR4KSA9PiBhdHRyKG9wdCwgXCJ0aXRsZVwiLCBgJHtpZHggKyAxfS8ke3RvdGFsfWApKTtcbn07XG5pZiAoSVNfQlJPV1NFUilcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcImxpc3RcIiwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBnZXRSb290KHRoaXMpLmdldEVsZW1lbnRCeUlkKGF0dHIodGhpcywgXCJsaXN0XCIpIHx8IFwiXCIpO1xuICAgIH1cbiAgfSk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LWRhdGFsaXN0XCIsIFVIVE1MRGF0YUxpc3RFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxEYXRhTGlzdEVsZW1lbnQgfTtcbiIsImltcG9ydCB7IFVIVE1MQ29tYm9ib3hFbGVtZW50IH0gZnJvbSBcIkB1LWVsZW1lbnRzL3UtY29tYm9ib3hcIjtcbmltcG9ydCB7IFVIVE1MRGF0YUxpc3RFbGVtZW50IH0gZnJvbSBcIkB1LWVsZW1lbnRzL3UtZGF0YWxpc3RcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRhbmNob3JQb3NpdGlvbixcblx0YXR0cixcblx0aXNJbnB1dExpa2UsXG5cdG9uLFxuXHRvbkxvYWRlZCxcblx0b25NdXRhdGlvbixcblx0UVVJQ0tfRVZFTlQsXG5cdHVzZUlkLFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0ZJRUxEID0gc3R5bGVzLmZpZWxkLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19WQUxJREFUSU9OUyA9IHN0eWxlcy52YWxpZGF0aW9uLnNwbGl0KFwiIFwiKTtcbmNvbnN0IENTU19WQUxJREFUSU9OID0gQ1NTX1ZBTElEQVRJT05TWzBdO1xuXG5jb25zdCBnZXRUZXh0ID0gKHN0eWxlOiBDU1NTdHlsZURlY2xhcmF0aW9uLCBrZXk6IHN0cmluZykgPT5cblx0c3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShgLS1tdGRzLXRleHQtJHtrZXl9YCk/LnNsaWNlKDEsIC0xKSB8fCBcIlwiOyAvLyBzbGljZSB0byB0cmltIHF1b3Rlc1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihmaWVsZHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4sIHZhbGlkYXRlPzogYm9vbGVhbikge1xuXHRmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcylcblx0XHRpZiAoZmllbGQuaXNDb25uZWN0ZWQpIHtcblx0XHRcdGNvbnN0IGxhYmVsczogSFRNTExhYmVsRWxlbWVudFtdID0gW107XG5cdFx0XHRjb25zdCBkZXNjczogRWxlbWVudFtdID0gW107XG5cdFx0XHRjb25zdCB2YWxpZHM6IEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0bGV0IGNvbWJvYm94OiBVSFRNTENvbWJvYm94RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXHRcdFx0bGV0IGlucHV0OiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdFx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGVsIG9mIGZpZWxkLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSkge1xuXHRcdFx0XHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MTGFiZWxFbGVtZW50KSBsYWJlbHMucHVzaChlbCk7XG5cdFx0XHRcdGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgVUhUTUxDb21ib2JveEVsZW1lbnQpIGNvbWJvYm94ID0gZWw7XG5cdFx0XHRcdGVsc2UgaWYgKGlzSW5wdXRMaWtlKGVsKSAmJiAhZWwuaGlkZGVuKSBpbnB1dCA9IGVsO1xuXHRcdFx0XHRlbHNlIGlmIChlbC5oYXNBdHRyaWJ1dGUoXCJkYXRhLWRlc2NyaXB0aW9uXCIpKSBkZXNjcy5wdXNoKGVsKTtcblx0XHRcdFx0ZWxzZSBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkge1xuXHRcdFx0XHRcdHZhbGlkID0gYXR0cihlbCwgXCJkYXRhLWNvbG9yXCIpID09PSBcInN1Y2Nlc3NcIiB8fCAhZWwuY2xpZW50SGVpZ2h0OyAvLyBPbmx5IHNldCBpbnZhbGlkIGlmIFZhbGlkYXRpb24gaXMgdmlzaWJsZVxuXHRcdFx0XHRcdHZhbGlkcy5wdXNoKGVsKTtcblx0XHRcdFx0XHRkZXNjcy51bnNoaWZ0KGVsKTtcblx0XHRcdFx0fSBlbHNlIGlmIChlbCBpbnN0YW5jZW9mIEhUTUxQYXJhZ3JhcGhFbGVtZW50KVxuXHRcdFx0XHRcdGRlc2NzLnNvbWUoKGRlc2MpID0+IGRlc2MuY29udGFpbnMoZWwpKSB8fCBkZXNjcy5wdXNoKGVsKTsgLy8gT25seSBhZGQgaWYgbm90IGFscmVhZHkgaW5zaWRlIGRlc2NyaXB0aW9uXG5cdFx0XHR9XG5cblx0XHRcdGlmIChpbnB1dCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGxhYmVsIG9mIGxhYmVscykgbGFiZWwuaHRtbEZvciA9IHVzZUlkKGlucHV0KTtcblx0XHRcdFx0aWYgKHZhbGlkYXRlICYmIGF0dHIoZmllbGQsIFwiZGF0YS12YWxpZGF0aW9uXCIpID09PSBcImZvcm1cIikge1xuXHRcdFx0XHRcdHZhbGlkID0gaW5wdXQubWF0Y2hlcyhcIjp2YWxpZFwiKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGVsIG9mIHZhbGlkcykgYXR0cihlbCwgXCJoaWRkZW5cIiwgdmFsaWQgPyBcIlwiIDogbnVsbCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVuZGVyQ29tYm9ib3goY29tYm9ib3gpO1xuXHRcdFx0XHRyZW5kZXJDb3VudGVyKGlucHV0KTtcblx0XHRcdFx0cmVuZGVyVGV4dGFyZWFTaXplKGlucHV0KTtcblx0XHRcdFx0YXR0cihpbnB1dCwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIGRlc2NzLm1hcCh1c2VJZCkuam9pbihcIiBcIikgfHwgbnVsbCk7IC8vIFJlbW92ZSBpZiBlbXB0eVxuXHRcdFx0XHRhdHRyKGlucHV0LCBcImFyaWEtaW52YWxpZFwiLCBgJHshdmFsaWR9YCk7XG5cdFx0XHR9XG5cdFx0fVxufVxuXG4vLyBpT1MgZG9lcyBub3Qgc3VwcG9ydCBmaWVsZC1zaXppbmc6IGNvbnRlbnQsIHNvIHdlIG5lZWQgdG8gbWFudWFsbHkgcmVzaXplXG5mdW5jdGlvbiByZW5kZXJUZXh0YXJlYVNpemUodGV4dGFyZWE6IEVsZW1lbnQpIHtcblx0aWYgKHRleHRhcmVhIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuXHRcdHRleHRhcmVhLnN0eWxlLnNldFByb3BlcnR5KFwiLS1tdGRzLXRleHRhcmVhLWhlaWdodFwiLCBcImF1dG9cIik7XG5cdFx0dGV4dGFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG5cdFx0XHRcIi0tbXRkcy10ZXh0YXJlYS1oZWlnaHRcIixcblx0XHRcdGAke3RleHRhcmVhLnNjcm9sbEhlaWdodH1weGAsXG5cdFx0KTtcblx0fVxufVxuXG4vLyBTZXR1cCB0cmFuc2xhdGlvbnMgZnJvbSBDU1MgY3VzdG9tIHByb3BlcnRpZXNcbmZ1bmN0aW9uIHJlbmRlckNvbWJvYm94KGVsOiBVSFRNTENvbWJvYm94RWxlbWVudCB8IG51bGwpIHtcblx0Y29uc3QgeyBjb250cm9sLCBsaXN0IH0gPSBlbCB8fCB7fTtcblxuXHRpZiAoZWwgJiYgbGlzdCAmJiBjb250cm9sICYmICFlbC5oYXNBdHRyaWJ1dGUoXCJkYXRhLXNyLWFkZGVkXCIpKSB7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLWFkZGVkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtYWRkZWRcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1lbXB0eVwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWVtcHR5XCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3ItZm91bmRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1mb3VuZFwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLWludmFsaWRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1pbnZhbGlkXCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3Itb2ZcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1vZlwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLXJlbW92ZVwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LXJlbW92ZVwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLXJlbW92ZWRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1yZW1vdmVkXCIpKTtcblx0XHRhdHRyKGxpc3QsIFwiZGF0YS1zci1wbHVyYWxcIiwgZ2V0VGV4dChzdHlsZSwgXCJkYXRhbGlzdC1wbHVyYWxcIikpO1xuXHRcdGF0dHIobGlzdCwgXCJkYXRhLXNyLXNpbmd1bGFyXCIsIGdldFRleHQoc3R5bGUsIFwiZGF0YWxpc3Qtc2luZ3VsYXJcIikpO1xuXHRcdGF0dHIobGlzdCwgXCJwb3BvdmVyXCIsIFwibWFudWFsXCIpO1xuXHRcdGF0dHIoY29udHJvbCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKGxpc3QpKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW5kZXJDb3VudGVyKGlucHV0OiBIVE1MSW5wdXRFbGVtZW50KSB7XG5cdGNvbnN0IGVsID0gaW5wdXQ/Lm5leHRFbGVtZW50U2libGluZztcblx0Y29uc3QgbGltaXQgPSBlbCAmJiBhdHRyKGVsLCBcImRhdGEtY291bnRcIik7XG5cblx0aWYgKGVsICYmIGxpbWl0KSB7XG5cdFx0Y29uc3QgcmVtYWluZGVyID0gTnVtYmVyKGxpbWl0KSAtIGlucHV0LnZhbHVlLmxlbmd0aDtcblx0XHRjb25zdCBuZXh0SW52YWxpZCA9IHJlbWFpbmRlciA8IDA7XG5cdFx0Y29uc3QgcHJldkludmFsaWQgPSBhdHRyKGVsLCBcImFyaWEtbGl2ZVwiKSA9PT0gXCJwb2xpdGVcIjtcblx0XHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsIHx8IGlucHV0KTtcblx0XHRjb25zdCBvdmVyID0gZ2V0VGV4dChzdHlsZSwgXCJjb3VudC1vdmVyXCIpO1xuXHRcdGNvbnN0IHVuZGVyID0gZ2V0VGV4dChzdHlsZSwgXCJjb3VudC11bmRlclwiKTtcblxuXHRcdGlmIChwcmV2SW52YWxpZCAhPT0gbmV4dEludmFsaWQpIHtcblx0XHRcdGF0dHIoZWwsIFwiYXJpYS1saXZlXCIsIG5leHRJbnZhbGlkID8gXCJwb2xpdGVcIiA6IFwib2ZmXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBjc3Mgb2YgQ1NTX1ZBTElEQVRJT05TKSBlbC5jbGFzc0xpc3QudG9nZ2xlKGNzcywgbmV4dEludmFsaWQpO1xuXHRcdH1cblx0XHRlbC50ZXh0Q29udGVudCA9IChuZXh0SW52YWxpZCA/IG92ZXIgOiB1bmRlcikucmVwbGFjZShcblx0XHRcdFwiJWRcIixcblx0XHRcdGAke01hdGguYWJzKHJlbWFpbmRlcil9YCxcblx0XHQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRvZ2dsZSh7IHRhcmdldDogZWwsIG5ld1N0YXRlIH06IEV2ZW50ICYgeyBuZXdTdGF0ZT86IHN0cmluZyB9KSB7XG5cdGlmIChlbCBpbnN0YW5jZW9mIFVIVE1MRGF0YUxpc3RFbGVtZW50KSB7XG5cdFx0Y29uc3Qgcm9vdCA9IGVsLmdldFJvb3ROb2RlKCkgYXMgU2hhZG93Um9vdCB8IG51bGw7XG5cdFx0Y29uc3QgYW5jaG9yID0gcm9vdD8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG5cdFx0XHRgW3BvcG92ZXJ0YXJnZXQ9XCIke2VsLmlkfVwiXWAsXG5cdFx0KTtcblxuXHRcdGlmIChuZXdTdGF0ZSA9PT0gXCJjbG9zZWRcIikgYW5jaG9yUG9zaXRpb24oZWwsIGZhbHNlKTtcblx0XHRlbHNlIGlmIChhbmNob3IpIHtcblx0XHRcdGVsLnN0eWxlLndpZHRoID0gYCR7YW5jaG9yLmNsaWVudFdpZHRofXB4YDtcblx0XHRcdGFuY2hvclBvc2l0aW9uKGVsLCBhbmNob3IsIGF0dHIoZWwsIFwiZGF0YS1wb3NpdGlvblwiKSA/PyBcImJvdHRvbVwiLCB0cnVlKTtcblx0XHR9XG5cdH1cbn1cbi8vIFVwZGF0ZSB3aGVuIHR5cGluZ1xuZnVuY3Rpb24gaGFuZGxlSW5wdXQoeyB0YXJnZXQ6IGVsIH06IEV2ZW50KSB7XG5cdGlmIChpc0lucHV0TGlrZShlbCkpIHtcblx0XHRyZW5kZXJDb3VudGVyKGVsKTtcblx0XHRyZW5kZXJUZXh0YXJlYVNpemUoZWwpO1xuXG5cdFx0Ly8gUmVwb3NpdGlvbiBsaXN0IGRhdGFsaXN0IC8vIFRPRE8gRW5oYW5jZSBieSB1c2luZyBzdHlsZS5ib3R0b20/XG5cdFx0Y29uc3QgbGlzdCA9IGVsLmhhc0F0dHJpYnV0ZShcImxpc3RcIikgJiYgZWwubGlzdDtcblx0XHRpZiAobGlzdClcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRhbmNob3JQb3NpdGlvbihsaXN0LCBlbCwgYXR0cihsaXN0LCBcImRhdGEtcG9zaXRpb25cIikgPz8gXCJib3R0b21cIiwgdHJ1ZSk7XG5cdFx0XHR9LCAxMCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlVmFsZGlhdGlvbihldmVudDogRXZlbnQpIHtcblx0Y29uc3QgZmllbGQgPSAoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oYC4ke0NTU19GSUVMRH1gKTtcblxuXHRpZiAoZXZlbnQudHlwZSA9PT0gXCJpbnZhbGlkXCIgJiYgZmllbGQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIFByZXZlbnQgYnJvd3NlcnMgZnJvbSBzaG93aW5nIGRlZmF1bHQgdmFsaWRhdGlvbiBidWJibGVzXG5cdGhhbmRsZU11dGF0aW9uKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoQ1NTX0ZJRUxEKSwgdHJ1ZSk7IC8vIFVwZGF0ZSBzdGF0ZVxufVxuXG4vLyBQb3NpdGlvbiBjb21ib2JveCB3aGVuIGNoYW5naW5nIGNvbnRlbnRcbmZ1bmN0aW9uIGhhbmRsZVNlbGVjdCh7IHRhcmdldDogZWwgfTogRXZlbnQpIHtcblx0Y29uc3QgbGlzdCA9IGVsIGluc3RhbmNlb2YgVUhUTUxDb21ib2JveEVsZW1lbnQgJiYgZWwubGlzdDtcblx0aWYgKGxpc3QgJiYgIWxpc3Q/LmhpZGRlbilcblx0XHRzZXRUaW1lb3V0KCgpID0+IGFuY2hvclBvc2l0aW9uKGxpc3QsIGVsLCAyLCB0cnVlKSwgMTApOyAvLyBSZXBvc2l0aW9uIGxpc3QgaWYgbm90IGhpZGRlblxufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfRklFTEQsIGhhbmRsZU11dGF0aW9uKTtcblx0b24oZG9jdW1lbnQsIFwiY29tYm9ib3hiZWZvcmVzZWxlY3RcIiwgaGFuZGxlU2VsZWN0LCBRVUlDS19FVkVOVCk7XG5cdG9uKGRvY3VtZW50LCBcImlucHV0XCIsIGhhbmRsZUlucHV0LCBRVUlDS19FVkVOVCk7XG5cdG9uKGRvY3VtZW50LCBcImludmFsaWQsc3VibWl0XCIsIGhhbmRsZVZhbGRpYXRpb24sIHRydWUpOyAvLyBVc2UgY2FwdHVyZSBhcyBpbnZhbGlkIGFuZCBzdWJtaXQgZG9lcyBub3QgYnViYmxlXG5cdG9uKGRvY3VtZW50LCBcInRvZ2dsZVwiLCBoYW5kbGVUb2dnbGUsIFFVSUNLX0VWRU5UKTsgLy8gVXNlIGNhcHR1cmUgc2luY2UgdG9nZ2xlIGRvZXMgbm90IGJ1YmJsZVxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgaXNJbnB1dExpa2UsIG9uTG9hZGVkLCBvbk11dGF0aW9uLCB1c2VJZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRklFTERTRVQgPSBzdHlsZXMuZmllbGRzZXQuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1ZBTElEQVRJT04gPSBzdHlsZXMudmFsaWRhdGlvbi5zcGxpdChcIiBcIilbMF07XG5jb25zdCBBUklBX0RFU0MgPSBcImFyaWEtZGVzY3JpYmVkYnlcIjtcbmNvbnN0IEFSSUFfSU5WQUxJRCA9IFwiYXJpYS1pbnZhbGlkXCI7XG5cbi8vIFVzaW5nIHJlcXVlc3RBbmltYXRpb25GcmFtZSB0byBlbnN1cmUgaXQgcnVucyBhZnRlciBmaWVsZC1vYnNlcnZlclxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oZmllbGRzZXRzOiBIVE1MQ29sbGVjdGlvbk9mPEVsZW1lbnQ+KSB7XG5cdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBmaWVsZHNldCBvZiBmaWVsZHNldHMpXG5cdFx0XHRpZiAoZmllbGRzZXQuaXNDb25uZWN0ZWQpIHtcblx0XHRcdFx0Y29uc3QgaW5wdXRzOiBIVE1MSW5wdXRFbGVtZW50W10gPSBbXTtcblx0XHRcdFx0bGV0IHZhbGlkSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXHRcdFx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgZWwgb2YgZmllbGRzZXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpKSB7XG5cdFx0XHRcdFx0aWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhDU1NfVkFMSURBVElPTikpIHtcblx0XHRcdFx0XHRcdHZhbGlkID0gYXR0cihlbCwgXCJkYXRhLWNvbG9yXCIpID09PSBcInN1Y2Nlc3NcIiB8fCAhZWwuY2xpZW50SGVpZ2h0OyAvLyBPbmx5IHNldCBpbnZhbGlkIGlmIFZhbGlkYXRpb24gaXMgdmlzaWJsZVxuXHRcdFx0XHRcdFx0dmFsaWRJZCA9IHVzZUlkKGVsKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGlzSW5wdXRMaWtlKGVsKSkgaW5wdXRzLnB1c2goZWwpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCBpbnB1dCBvZiBpbnB1dHMpIHtcblx0XHRcdFx0XHRjb25zdCBkZXNjID0gYXR0cihpbnB1dCwgQVJJQV9ERVNDKT8ucmVwbGFjZSh2YWxpZElkIHx8IFwiI1wiLCBcIlwiKTtcblxuXHRcdFx0XHRcdGF0dHIoaW5wdXQsIEFSSUFfREVTQywgYCR7dmFsaWRJZCB8fCBcIlwifSAke2Rlc2MgfHwgXCJcIn1gLnRyaW0oKSk7XG5cdFx0XHRcdFx0YXR0cihpbnB1dCwgQVJJQV9JTlZBTElELCBgJHshdmFsaWR9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0fSk7XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfRklFTERTRVQsIGhhbmRsZU11dGF0aW9uKSxcbik7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0xPR08gPSBzdHlsZXMubG9nby5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKFtsb2dvXTogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0aWYgKGxvZ28/LmlzQ29ubmVjdGVkICYmIGxvZ28/LmZpcnN0RWxlbWVudENoaWxkIGluc3RhbmNlb2YgU1ZHU1ZHRWxlbWVudCkge1xuXHRcdGZvciAoY29uc3QgaWNvbiBvZiBkb2N1bWVudC5oZWFkLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaW5rW3JlbH49J2ljb24nXVwiKSlcblx0XHRcdGljb24uc2V0QXR0cmlidXRlKFwicmVsXCIsIFwiZGlzYWJsZWRcIik7IC8vIERpc2FibGUgcHJldmlvdXMgaWNvbiAoYnV0IG5vdCByZW1vdmUgaXMgYXMgdGhpcyBtYWtlcyBOZXh0LmpzIHNhZClcblxuXHRcdGNvbnN0IHN2ZyA9IGxvZ28uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0Y29uc3QgaXNEb3QgPSBsb2dvPy5oYXNBdHRyaWJ1dGUoXCJkYXRhLWVudlwiKTtcblx0XHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHN2Zyk7XG5cdFx0Y29uc3QgdGV4dCA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJjb2xvclwiKTtcblx0XHRjb25zdCBiYWNrID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIi0tbXRkcy1sb2dvLWNvbG9yXCIpO1xuXHRcdGNvbnN0IGljb24gPSBzdmcub3V0ZXJIVE1MXG5cdFx0XHQucmVwbGFjZSgvXFxuKy9nLCBcIiBcIikgLy8gUHJldmVudCBsaW5lIGJyZWFrc1xuXHRcdFx0LnJlcGxhY2UoLyhmaWxsfHdpZHRofGhlaWdodHx4bWxucyk9XCJbXlwiXStcIi9naSwgXCJcIilcblx0XHRcdC5yZXBsYWNlKFwiPHN2Z1wiLCBgPHN2ZyB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiBmaWxsPVwiJHt0ZXh0fVwiYCk7XG5cblx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFxuXHRcdFx0T2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKSwge1xuXHRcdFx0XHRocmVmOiBgZGF0YTppbWFnZS9zdmcreG1sLCR7ZW5jb2RlVVJJQ29tcG9uZW50KGA8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDU1IDU1Jz48cmVjdCBmaWxsPScke2lzRG90ID8gXCJub25lXCIgOiBiYWNrfScgd2lkdGg9JzUxJyBoZWlnaHQ9JzUxJyB4PScyJyB5PScyJyBzdHJva2U9JyR7dGV4dH0nIHN0cm9rZS1kYXNoYXJyYXk9JzAuMDkgNi4zOCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2Utb3BhY2l0eT0nJHtpc0RvdCA/IDAuNiA6IDB9JyBzdHJva2Utd2lkdGg9JzIuMycgcng9JzI1LjUnLz48ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNy41IDcuNSlcIj4ke2ljb259PC9nPjwvc3ZnPmApfWAsXG5cdFx0XHRcdHJlbDogXCJpY29uXCIsXG5cdFx0XHR9KSxcblx0XHQpO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfTE9HTywgaGFuZGxlTXV0YXRpb24pKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhbmNob3JQb3NpdGlvbiwgYXR0ciwgb24sIG9uTG9hZGVkLCBRVUlDS19FVkVOVCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfUE9QT1ZFUiA9IHN0eWxlcy5wb3BvdmVyLnNwbGl0KFwiIFwiKVswXTtcbmxldCBPUEVOX1BPUE9WRVJTID0gMDsgLy8gU3BlZWQgdXAgYnkgb25seSBjaGVja2luZyBjbGlja3MgaWYgd2UgaGF2ZSBvcGVuIHBvcG92ZXJzXG5cbmZ1bmN0aW9uIGhhbmRsZVRvZ2dsZSh7IHRhcmdldDogZWwsIG5ld1N0YXRlIH06IEV2ZW50ICYgeyBuZXdTdGF0ZT86IHN0cmluZyB9KSB7XG5cdGlmIChlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGVsLmNsYXNzTGlzdC5jb250YWlucyhDU1NfUE9QT1ZFUikpIHtcblx0XHRjb25zdCBhbmNob3IgPSAoZWwuZ2V0Um9vdE5vZGUoKSBhcyBTaGFkb3dSb290KT8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG5cdFx0XHRgW3BvcG92ZXJ0YXJnZXQ9XCIke2VsLmlkfVwiXWAsXG5cdFx0KTtcblxuXHRcdGlmIChuZXdTdGF0ZSA9PT0gXCJjbG9zZWRcIikge1xuXHRcdFx0T1BFTl9QT1BPVkVSUyAtPSAxO1xuXHRcdFx0YW5jaG9yUG9zaXRpb24oZWwsIGZhbHNlKTtcblx0XHR9IGVsc2UgaWYgKGFuY2hvcikge1xuXHRcdFx0T1BFTl9QT1BPVkVSUyArPSAxO1xuXHRcdFx0YW5jaG9yUG9zaXRpb24oZWwsIGFuY2hvciwgYXR0cihlbCwgXCJkYXRhLXBvc2l0aW9uXCIpIHx8IFwiYm90dG9tXCIpO1xuXHRcdH1cblx0fVxufVxuXG4vLyBQb2x5ZmlsbCBwb3BvdmVydGFyZ2V0IGZvciA8YT4gKG5vdCBzdXBwb3J0ZWQgYnkgbmF0aXZlKVxuLy8gYW5kIGF1dG9tYXRpY2FsbHkgYXNzdW1lIHBvcG92ZXJ0YXJnZXQgaXMgdGhlIGNsb3Nlc3QgcGFyZW50IHBvcG92ZXJcbi8vIGJ1dCByZXNwZWN0IHRoZSBwb3BvdmVydGFyZ2V0IGFuZCBwb3BvdmVydGFyZ2V0YWN0aW9uIGF0dHJpYnV0ZVxuZnVuY3Rpb24gaGFuZGxlTGlua0NsaWNrKHsgdGFyZ2V0IH06IEV2ZW50KSB7XG5cdGNvbnN0IGNsb3NlID1cblx0XHRPUEVOX1BPUE9WRVJTICYmICh0YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihcImEsW3BvcG92ZXJ0YXJnZXRhY3Rpb25dXCIpO1xuXG5cdGlmIChjbG9zZSkge1xuXHRcdGNvbnN0IGFjdGlvbiA9IGF0dHIoY2xvc2UsIFwicG9wb3ZlcnRhcmdldGFjdGlvblwiKSB8fCBcInRvZ2dsZVwiO1xuXHRcdGNvbnN0IG9wZW4gPSBhY3Rpb24gPT09IFwic2hvd1wiIHx8IChhY3Rpb24gPT09IFwiaGlkZVwiID8gZmFsc2UgOiB1bmRlZmluZWQpO1xuXHRcdGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGF0dHIoY2xvc2UsIFwicG9wb3ZlcnRhcmdldFwiKSB8fCBcIlwiKTtcblx0XHRjb25zdCBwb3BvdmVyID0gKHRhcmdldCB8fCBjbG9zZSkuY2xvc2VzdDxIVE1MRWxlbWVudD4oYC4ke0NTU19QT1BPVkVSfWApO1xuXG5cdFx0Ly8gUG9wb3ZlciBjYW4gYmUgZGlzY29ubmV0ZWQgYnkgY2xpY2sgaGFuZGxlciBkZWVwZXIgZG93biBpbiB0aGUgRE9NIHRocmVlIGJlZm9yZSByZWFjaGluZyBkb2N1bWVudFxuXHRcdGlmIChwb3BvdmVyPy5pc0Nvbm5lY3RlZCAmJiBwb3BvdmVyPy50b2dnbGVQb3BvdmVyKVxuXHRcdFx0cG9wb3Zlci50b2dnbGVQb3BvdmVyKG9wZW4pO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwidG9nZ2xlXCIsIGhhbmRsZVRvZ2dsZSwgUVVJQ0tfRVZFTlQpOyAvLyBVc2UgY2FwdHVyZSBzaW5jZSB0b2dnbGUgZG9lcyBub3QgYnViYmxlXG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZUxpbmtDbGljayk7IC8vIEFsbG93IGA8YT5gIHRvIHVzZSBgcG9wb3ZlcnRhcmdldGAgYXMgd2VsbFxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1RBQkxFID0gc3R5bGVzLnRhYmxlLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24odGFibGVzOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxUYWJsZUVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgdGFibGUgb2YgdGFibGVzKSB7XG5cdFx0Y29uc3QgdGhzOiBzdHJpbmdbXSA9IFtdOyAvLyBBZGQgZGF0YS10aD1cIlwiIHRvIGVhY2ggY2VsbCB0byBzdXBwb3J0IGRhdGEtbW9iaWxlIGRlc2lnbnNcblxuXHRcdGF0dHIodGFibGUsIFwicm9sZVwiLCBcInRhYmxlXCIpOyAvLyBBZGQgaGVscGluZyByb2xlPVwiXCIgdG8gZW5zdXJlIHNjcmVlbiByZWFkZXJzIHVuZGVyc3RhbmQgdGhlIHRhYmxlIHJlZ2FyZGxlc3Mgb2YgQ1NTIGRpc3BsYXlcblx0XHRpZiAodGFibGUuY2FwdGlvbikgYXR0cih0YWJsZS5jYXB0aW9uLCBcInJvbGVcIiwgXCJjYXB0aW9uXCIpO1xuXHRcdGZvciAoY29uc3QgZ3JvdXAgb2YgW3RhYmxlLnRIZWFkLCB0YWJsZS50Rm9vdCwgLi4udGFibGUudEJvZGllc10pXG5cdFx0XHRpZiAoZ3JvdXApIHtcblx0XHRcdFx0YXR0cihncm91cCwgXCJyb2xlXCIsIFwicm93Z3JvdXBcIik7XG5cdFx0XHRcdGNvbnN0IGlzVGJvZHkgPSBncm91cC5ub2RlTmFtZSA9PT0gXCJUQk9EWVwiO1xuXG5cdFx0XHRcdGZvciAoY29uc3Qgcm93IG9mIGdyb3VwLnJvd3MpIHtcblx0XHRcdFx0XHRhdHRyKHJvdywgXCJyb2xlXCIsIFwicm93XCIpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgY2VsbCBvZiByb3cuY2VsbHMpIHtcblx0XHRcdFx0XHRcdGlmIChpc1Rib2R5KSBhdHRyKGNlbGwsIFwiZGF0YS10aFwiLCB0aHNbY2VsbC5jZWxsSW5kZXhdIHx8IFwiOmVtcHR5XCIpO1xuXHRcdFx0XHRcdFx0ZWxzZSB0aHMucHVzaChjZWxsLmlubmVyVGV4dC50cmltKCkpOyAvLyBVc2luZyBpbm5lclRleHQgdG8gb25seSBpbmNsdWRlIHZpc2libGUgdGV4dFxuXHRcdFx0XHRcdFx0aWYgKGNlbGwubm9kZU5hbWUgPT09IFwiVERcIikgYXR0cihjZWxsLCBcInJvbGVcIiwgXCJjZWxsXCIpO1xuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGF0dHIoY2VsbCwgXCJyb2xlXCIsIGlzVGJvZHkgPyBcInJvd2hlYWRlclwiIDogXCJjb2x1bW5oZWFkZXJcIik7XG5cdFx0XHRcdFx0XHRcdGF0dHIoY2VsbCwgXCJzY29wZVwiLCBpc1Rib2R5ID8gXCJyb3dcIiA6IFwiY29sXCIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfVEFCTEUsIGhhbmRsZU11dGF0aW9uKSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgb24sIG9uTG9hZGVkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19UT0dHTEVHUk9VUCA9IGAuJHtzdHlsZXMudG9nZ2xlZ3JvdXAuc3BsaXQoXCIgXCIpWzBdfWA7XG5cbi8vIFByZXZlbnQgYnJvd3NlcnMgZnJvbSBzaG93aW5nIGRlZmF1bHQgdmFsaWRhdGlvbiBidWJibGVzXG5mdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50OiBFdmVudCAmIFBhcnRpYWw8S2V5Ym9hcmRFdmVudD4pIHtcblx0Y29uc3QgeyBrZXksIHRhcmdldDogZWwgfSA9IGV2ZW50O1xuXHRjb25zdCBncm91cCA9IGVsIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiBlbC5jbG9zZXN0KENTU19UT0dHTEVHUk9VUCk7XG5cblx0aWYgKCFncm91cCkgcmV0dXJuO1xuXHRpZiAoa2V5ID09PSBcIkVudGVyXCIpIGVsLmNsaWNrKCk7XG5cdGlmIChrZXk/LnN0YXJ0c1dpdGgoXCJBcnJvd1wiKSkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0Y29uc3QgaW5wdXRzID0gZ3JvdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKTtcblx0XHRjb25zdCBpbmRleCA9IFsuLi5pbnB1dHNdLmluZGV4T2YoZWwpO1xuXHRcdGNvbnN0IG1vdmUgPSBrZXkubWF0Y2goL0Fycm93KFJpZ2h0fERvd24pLykgPyAxIDogLTE7XG5cdFx0aW5wdXRzWyhpbnB1dHMubGVuZ3RoICsgaW5kZXggKyBtb3ZlKSAlIGlucHV0cy5sZW5ndGhdPy5mb2N1cygpO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uKGRvY3VtZW50LCBcImtleWRvd25cIiwgaGFuZGxlS2V5RG93bikpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdGFuY2hvclBvc2l0aW9uLFxuXHRhdHRyLFxuXHRJU19CUk9XU0VSLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdFFVSUNLX0VWRU5ULFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgREVTQ1JJQkVEQlkgPSBcImFyaWEtZGVzY3JpYmVkYnlcIjtcbmNvbnN0IEVTQyA9IFwiRXNjYXBlXCI7XG5jb25zdCBMQUJFTExFREJZID0gXCJhcmlhLWxhYmVsbGVkYnlcIjtcbmNvbnN0IFBPU0lUSU9OX0NTU19QUk9QRVJUWSA9IFwiLS1tdGRzLXRvb2x0aXAtcG9zaXRpb25cIjtcbmNvbnN0IFRIUk9UVExFX0RFTEFZID0gMzAwO1xuY29uc3QgVE9PTFRJUCA9IElTX0JST1dTRVJcblx0PyBPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIHtcblx0XHRcdGNsYXNzTmFtZTogc3R5bGVzLl90b29sdGlwLFxuXHRcdFx0aWQ6IFwibXRkcy10b29sdGlwXCIsXG5cdFx0XHRwb3BvdmVyOiBcIm1hbnVhbFwiLFxuXHRcdH0pXG5cdDogbnVsbDsgLy8gQ3JlYXRlIGEgZHVtbXkgZWxlbWVudCB0byBhdm9pZCBudWxsIGNoZWNrc1xuXG5sZXQgQU5DSE9SOiBFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5sZXQgTEFTVF9DQUxMID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xubGV0IFRIUk9UVExFOiBudW1iZXIgfCBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiA9IDA7XG5cbmZ1bmN0aW9uIGhhbmRsZU1vdmUoeyB0YXJnZXQsIHR5cGUsIGtleSB9OiBFdmVudCAmIHsga2V5Pzogc3RyaW5nIH0pIHtcblx0aWYgKHR5cGUgPT09IFwia2V5ZG93blwiICYmIGtleSAhPT0gRVNDKSByZXR1cm47IC8vIEFsbG93IEVTQyBkaXNtaXNzIHRvIGZvbGxvdyBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL3BhdHRlcm5zL3Rvb2x0aXAvXG5cdGNvbnN0IHdhaXQgPSBMQVNUX0NBTEwgKyBUSFJPVFRMRV9ERUxBWSAtIERhdGUubm93KCk7XG5cdGNsZWFyVGltZW91dChUSFJPVFRMRSk7XG5cdFRIUk9UVExFID0gc2V0VGltZW91dChcblx0XHRoYW5kbGVNb3ZlVGhyb3R0bGVkLFxuXHRcdE1hdGgubWF4KHdhaXQsIDApLFxuXHRcdGtleSA9PT0gRVNDID8gbnVsbCA6IHRhcmdldCxcblx0KTtcbn1cblxuLy8gVXNpbmcgYSB0aHJvdHRsZWQgZnVuY3Rpb24gdG8gYXZvaWQgcGVyZm9ybWFuY2UgaXNzdWVzXG5mdW5jdGlvbiBoYW5kbGVNb3ZlVGhyb3R0bGVkKHRhcmdldDogRWxlbWVudCB8IG51bGwpIHtcblx0TEFTVF9DQUxMID0gRGF0ZS5ub3coKTtcblxuXHQvLyBCdWlsZCBhbmQgYXBwZW5kIHRvb2x0aXAgaWYgbm90IGV4aXN0aW5nXG5cdGlmICghVE9PTFRJUCB8fCB0YXJnZXQgPT09IFRPT0xUSVApIHJldHVybjsgLy8gQWxsb3cgdG9vbHRpcCB0byBiZSBob3ZlcmVkLCBmb2xsb3dpbmcgaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMS8jY29udGVudC1vbi1ob3Zlci1vci1mb2N1c1xuXHRpZiAoIVRPT0xUSVA/LmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZChUT09MVElQKTsgLy8gRW5zdXJlIGNvbm5lY3RlZFxuXHRsZXQgYW5jaG9yID0gdGFyZ2V0Py5jbG9zZXN0Py48RWxlbWVudD4oXCJbZGF0YS10b29sdGlwXVwiKSB8fCBudWxsO1xuXG5cdC8vIE5vIG5lZWQgdG8gdXBkYXRlXG5cdGlmIChhbmNob3IgPT09IEFOQ0hPUikgcmV0dXJuO1xuXG5cdGNvbnN0IGNvbnRlbnQgPSAoYW5jaG9yICYmIGF0dHIoYW5jaG9yLCBcImRhdGEtdG9vbHRpcFwiKSkgfHwgXCJcIjtcblx0Y29uc3QgcG9zaXRpb24gPVxuXHRcdChhbmNob3IgJiYgYXR0cihhbmNob3IsIFwiZGF0YS10b29sdGlwLXBvc2l0aW9uXCIpKSB8fFxuXHRcdHdpbmRvd1xuXHRcdFx0LmdldENvbXB1dGVkU3R5bGUoYW5jaG9yIHx8IGRvY3VtZW50LmJvZHkpXG5cdFx0XHQuZ2V0UHJvcGVydHlWYWx1ZShQT1NJVElPTl9DU1NfUFJPUEVSVFkpXG5cdFx0XHQ/LnRyaW0oKSB8fFxuXHRcdFwidG9wXCI7XG5cblx0Y29uc3QgaXNIaWRkZW4gPVxuXHRcdCFjb250ZW50IHx8XG5cdFx0Y29udGVudCA9PT0gXCJmYWxzZVwiIHx8XG5cdFx0Y29udGVudCA9PT0gXCJ0cnVlXCIgfHxcblx0XHRwb3NpdGlvbiA9PT0gXCJub25lXCI7XG5cblx0aWYgKGlzSGlkZGVuKSBhbmNob3IgPSBudWxsOyAvLyBEbyBub3Qgc2hvdyB0b29sdGlwIGlmIGJvb2xpc2ggdmFsdWVcblx0aWYgKGFuY2hvcikgVE9PTFRJUC50ZXh0Q29udGVudCA9IGNvbnRlbnQ7IC8vIE9ubHkgdXBkYXRlIGNvbnRlbnQgaWYgbmV3IGFuY2hvclxuXG5cdGNvbnN0IGhhZExhYmVsID0gQU5DSE9SICYmIGF0dHIoQU5DSE9SLCBMQUJFTExFREJZKSA9PT0gVE9PTFRJUD8uaWQ7XG5cdGNvbnN0IGhhc0xhYmVsID1cblx0XHQoYW5jaG9yIGluc3RhbmNlb2YgSFRNTEVsZW1lbnRcblx0XHRcdD8gYW5jaG9yLmlubmVyVGV4dFxuXHRcdFx0OiBhbmNob3I/LnRleHRDb250ZW50XG5cdFx0KT8udHJpbSgpIHx8XG5cdFx0YW5jaG9yPy5oYXNBdHRyaWJ1dGUoTEFCRUxMRURCWSkgfHxcblx0XHRhbmNob3I/Lmhhc0F0dHJpYnV0ZShcImFyaWEtbGFiZWxcIik7XG5cblx0QU5DSE9SPy5yZW1vdmVBdHRyaWJ1dGUoaGFkTGFiZWwgPyBMQUJFTExFREJZIDogREVTQ1JJQkVEQlkpOyAvLyBVbmxpbmsgcHJldmlvdXMgYW5jaG9yXG5cdGFuY2hvclBvc2l0aW9uKFRPT0xUSVAsIGZhbHNlKTsgLy8gUmVzZXQgYW5jaG9yIHBvc2l0aW9uXG5cblx0QU5DSE9SID0gYW5jaG9yOyAvLyBTdG9yZSBuZXcgYW5jaG9yIC0gbWlnaHQgYmUgbnVsbCBpZiBubyBuZXcgYW5jaG9yXG5cdGlmIChBTkNIT1IpIGF0dHIoQU5DSE9SLCBoYXNMYWJlbCA/IERFU0NSSUJFREJZIDogTEFCRUxMRURCWSwgVE9PTFRJUD8uaWQpOyAvLyBVc2UgdG9vbHRpcCBhcyBkZXNjcmlwdGlvbiBpZiBhbGxyZWFkeSBoYXMgbGFiZWxcblx0aWYgKEFOQ0hPUikgVE9PTFRJUC5oaWRlUG9wb3ZlcigpOyAvLyBIaWRlIHRvb2x0aXAgc28gaXQgY2FuIGJlIHBsYWNlZCBvbiB0b3AtbGF5ZXIgb24gbmV4dCBzaG93XG5cdFRPT0xUSVAudG9nZ2xlUG9wb3ZlcighIWFuY2hvcik7XG5cdGFuY2hvclBvc2l0aW9uKFRPT0xUSVAsIGFuY2hvciB8fCBmYWxzZSwgcG9zaXRpb24pO1xufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uKGRvY3VtZW50LCBcImJsdXIsZm9jdXMsbW91c2VvdXQsbW91c2VvdmVyXCIsIGhhbmRsZU1vdmUsIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcImtleWRvd25cIiwgaGFuZGxlTW92ZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwiYmx1clwiLCBoYW5kbGVNb3ZlLCBRVUlDS19FVkVOVCk7XG59KTtcbiIsIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgRElTUExBWV9CTE9DSyA9IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2sgfVwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBfYTI7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gKF9hMiA9IGVsLmdldEF0dHJpYnV0ZShuYW1lKSkgIT0gbnVsbCA/IF9hMiA6IG51bGw7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xuXG4vLyB1LWRldGFpbHMudHNcbnZhciBVSFRNTERldGFpbHNFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIFVzaW5nIHVuZGVyc2NvcmUgaW5zdGVhZCBvZiBwcml2YXRlIGZpZWxkcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICB0aGlzLl9jb250ZW50ID0gbnVsbDtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIsIG51bGwsIHsgbmFtZTogXCJzdW1tYXJ5XCIgfSksXG4gICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiLCBudWxsLCB7IHBhcnQ6IFwiZGV0YWlscy1jb250ZW50XCIgfSksXG4gICAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGAke0RJU1BMQVlfQkxPQ0t9XG4gICAgICAgIDo6c2xvdHRlZCh1LXN1bW1hcnkpIHsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBibG9jayB9XG5cdFx0XHRcdDo6c2xvdHRlZCh1LXN1bW1hcnkpOjpiZWZvcmUgeyBjb250ZW50OiAnJzsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBtYXJnaW4taW5saW5lOiAuMDVlbSAuMzEyNWVtOyBib3JkZXItYmxvY2s6IC4zMTI1ZW0gc29saWQgdHJhbnNwYXJlbnQ7IGJvcmRlci1pbmxpbmUtc3RhcnQ6IC41ZW0gc29saWQgfVxuXHRcdFx0XHQ6OnNsb3R0ZWQodS1zdW1tYXJ5W2FyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJdKTo6YmVmb3JlIHsgcm90YXRlOiA5MGRlZyB9XG5cdFx0XHRcdDpob3N0ID4gW3BhcnQ9XCJkZXRhaWxzLWNvbnRlbnRcIl06bm90KFtoaWRkZW49XCJcIl0pIHsgZGlzcGxheTogYmxvY2sgfWBcbiAgICAgIClcbiAgICApO1xuICB9XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJvcGVuXCJdO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHZhciBfYTI7XG4gICAgdGhpcy5fY29udGVudCA9IChfYTIgPSB0aGlzLnNoYWRvd1Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2hpbGRyZW5bMV07XG4gICAgb24odGhpcy5fY29udGVudCwgXCJiZWZvcmVtYXRjaFwiLCB0aGlzKTtcbiAgICBvbih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBpZiAodGhpcy5fY29udGVudCkgb2ZmKHRoaXMuX2NvbnRlbnQsIFwiYmVmb3JlbWF0Y2hcIiwgdGhpcyk7XG4gICAgb2ZmKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICB0aGlzLl9jb250ZW50ID0gbnVsbDtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socHJvcCwgcHJldiwgbmV4dCkge1xuICAgIGNvbnN0IGhpZGUgPSBcIm9uYmVmb3JlbWF0Y2hcIiBpbiB0aGlzID8gXCJ1bnRpbC1mb3VuZFwiIDogdHJ1ZTtcbiAgICBjb25zdCBvcGVuID0gdGhpcy5vcGVuO1xuICAgIGZvciAoY29uc3QgZWwgb2YgdGhpcy5jaGlsZHJlbilcbiAgICAgIGlmIChlbC5ub2RlTmFtZSA9PT0gXCJVLVNVTU1BUllcIikgYXR0cihlbCwgXCJhcmlhLWV4cGFuZGVkXCIsIGAke29wZW59YCk7XG4gICAgaWYgKHRoaXMuX2NvbnRlbnQpIHtcbiAgICAgIGF0dHIodGhpcy5fY29udGVudCwgXCJhcmlhLWhpZGRlblwiLCBgJHshb3Blbn1gKTtcbiAgICAgIHRoaXMuX2NvbnRlbnQuaGlkZGVuID0gb3BlbiA/IGZhbHNlIDogaGlkZTtcbiAgICB9XG4gICAgaWYgKG9wZW4gJiYgdGhpcy5uYW1lKSB7XG4gICAgICBjb25zdCB1RGV0YWlsc0xpc3QgPSBnZXRSb290KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAke3RoaXMubm9kZU5hbWV9W25hbWU9XCIke3RoaXMubmFtZX1cIl1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCB1RGV0YWlscyBvZiB1RGV0YWlsc0xpc3QpXG4gICAgICAgIGlmICh1RGV0YWlscyAhPT0gdGhpcykgdURldGFpbHMub3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAocHJvcCA9PT0gXCJvcGVuXCIgJiYgcHJldiA9PT0gbnVsbCAhPT0gKG5leHQgPT09IG51bGwpKVxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInRvZ2dsZVwiKSk7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwiOnNjb3BlID4gdS1zdW1tYXJ5XCIpO1xuICAgIGNvbnN0IGlzU3VtbWFyeSA9IHN1bW1hcnkgPT0gbnVsbCA/IHZvaWQgMCA6IHN1bW1hcnkuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJlZm9yZW1hdGNoXCIpIHRoaXMub3BlbiA9IHRydWU7XG4gICAgaWYgKGlzU3VtbWFyeSAmJiBldmVudC50eXBlID09PSBcImtleWRvd25cIikgYXNCdXR0b24oZXZlbnQpO1xuICAgIGlmIChpc1N1bW1hcnkgJiYgZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSB0aGlzLm9wZW4gPSAhdGhpcy5vcGVuO1xuICB9XG4gIGdldCBvcGVuKCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcIm9wZW5cIik7XG4gIH1cbiAgc2V0IG9wZW4odmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwib3BlblwiLCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBcIm5hbWVcIikgfHwgXCJcIjtcbiAgfVxuICBzZXQgbmFtZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJuYW1lXCIsIHZhbHVlKTtcbiAgfVxufTtcbnZhciBVSFRNTFN1bW1hcnlFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgICB0aGlzLnNsb3QgPSBcInN1bW1hcnlcIjtcbiAgICB0aGlzLnRhYkluZGV4ID0gMDtcbiAgfVxufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtZGV0YWlsc1wiLCBVSFRNTERldGFpbHNFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtc3VtbWFyeVwiLCBVSFRNTFN1bW1hcnlFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxEZXRhaWxzRWxlbWVudCwgVUhUTUxTdW1tYXJ5RWxlbWVudCB9O1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0ZJUkVGT1ggPSBJU19CUk9XU0VSICYmIC9maXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgX2EyO1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIChfYTIgPSBlbC5nZXRBdHRyaWJ1dGUobmFtZSkpICE9IG51bGwgPyBfYTIgOiBudWxsO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIGlmIChhdHRycykgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJzKSkgYXR0cihlbCwga2V5LCB2YWwpO1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcbnZhciBnZXRMYWJlbCA9IChlbCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gZ2V0Um9vdChlbCk7XG4gIGNvbnN0IGxhYmVsID0gYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIpIHx8IFwiXCI7XG4gIGNvbnN0IGxhYmVscyA9ICgoX2EyID0gYXR0cihlbCwgXCJhcmlhLWxhYmVsbGVkYnlcIikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpLnNwbGl0KC9cXHMrLykpIHx8IFtdO1xuICByZXR1cm4gW1xuICAgIC4uLmxhYmVscy5tYXAoKGlkMikgPT4gcm9vdCA9PSBudWxsID8gdm9pZCAwIDogcm9vdC5xdWVyeVNlbGVjdG9yKGBbaWQ9XCIke2lkMn1cIl1gKSksXG4gICAgLy8gR2V0IGFsbCBsYWJlbGxlZGJ5IGVsZW1lbnRzXG4gICAgLi4uQXJyYXkuZnJvbShlbC5sYWJlbHMgfHwgW10pXG4gICAgLy8gR2V0IGFsbCA8bGFiZWw+IGVsZW1lbnRzXG4gIF0ucmVkdWNlKChhY2MsIGVsMikgPT4ge1xuICAgIHZhciBfYTM7XG4gICAgcmV0dXJuIGFjYyB8fCAoKF9hMyA9IGVsMiA9PSBudWxsID8gdm9pZCAwIDogZWwyLmlubmVyVGV4dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMy50cmltKCkpIHx8IFwiXCI7XG4gIH0sIGxhYmVsKTtcbn07XG5cbi8vIHUtcHJvZ3Jlc3MudHNcbnZhciBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG52YXIgVUhUTUxQcm9ncmVzc0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1sYWJlbGxlZGJ5XCIsIFwidmFsdWVcIiwgXCJtYXhcIl07XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIsIG51bGwsIHsgaGlkZGVuOiBcIlwiIH0pLFxuICAgICAgLy8gU2xvdCBoaWRpbmcgY29udGVudCBhbGxvd3MgbGVnYWN5IGJyb3dzZXIgdG8gZGlzcGxheSBmYWxsYmFjayB0ZXh0XG4gICAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGA6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBib3JkZXI6IDFweCBzb2xpZDsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBoZWlnaHQ6IC41ZW07IHdpZHRoOiAxMGVtOyBvdmVyZmxvdzogaGlkZGVuIH1cbiAgICAgICAgOmhvc3Q6OmJlZm9yZSB7IGNvbnRlbnQ6ICcnOyBkaXNwbGF5OiBibG9jazsgaGVpZ2h0OiAxMDAlOyBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7IHdpZHRoOiB2YXIoLS1wZXJjZW50YWdlLCAwJSk7IHRyYW5zaXRpb246IHdpZHRoIC4ycyB9XG4gICAgICAgIDpob3N0KDpub3QoW3ZhbHVlXSkpIHsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLGN1cnJlbnRDb2xvciAyNSUsIHRyYW5zcGFyZW50IDUwJSwgY3VycmVudENvbG9yIDc1JSkgNTAlLzQwMCUgfVxuICAgICAgICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IG5vLXByZWZlcmVuY2UpIHsgOmhvc3QgeyBhbmltYXRpb246IGluZGV0ZXJtaW5hdGUgMnMgbGluZWFyIGluZmluaXRlIH0gIH1cbiAgICAgICAgQGtleWZyYW1lcyBpbmRldGVybWluYXRlIHsgZnJvbSB7IGJhY2tncm91bmQtcG9zaXRpb24teDogMTAwJSB9IHRvIHsgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAwIH0gfWBcbiAgICAgIClcbiAgICApO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGlmIChTS0lQX0FUVFJfQ0hBTkdFKSByZXR1cm47XG4gICAgU0tJUF9BVFRSX0NIQU5HRSA9IHRydWU7XG4gICAgY29uc3Qgcm9sZUltYWdlID0gSVNfSU9TIHx8IElTX0ZJUkVGT1g7XG4gICAgY29uc3QgcGVyY2VudGFnZSA9IE1hdGgubWF4KDAsIE1hdGgucm91bmQodGhpcy5wb3NpdGlvbiAqIDEwMCkpO1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBlcmNlbnRhZ2VcIiwgYCR7cGVyY2VudGFnZX0lYCk7XG4gICAgbGV0IGxhYmVsID0gZ2V0TGFiZWwodGhpcyk7XG4gICAgaWYgKHJvbGVJbWFnZSkgbGFiZWwgPSBgJHtsYWJlbC5yZXBsYWNlKC9cXGQrJSQvLCBcIlwiKX0gJHtwZXJjZW50YWdlfSVgO1xuICAgIGlmIChJU19GSVJFRk9YKSBmb3IgKGNvbnN0IGVsIG9mIHRoaXMubGFiZWxzKSBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIiwgbGFiZWwpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWJ1c3lcIiwgYCR7dGhpcy5wb3NpdGlvbiA9PT0gLTF9YCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtbGFiZWxcIiwgbGFiZWwudHJpbSgpKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1sYWJlbGxlZGJ5XCIsIG51bGwpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXZhbHVlbWF4XCIsIFwiMTAwXCIpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXZhbHVlbWluXCIsIFwiMFwiKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW5vd1wiLCBgJHtwZXJjZW50YWdlfWApO1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIHJvbGVJbWFnZSA/IFwiaW1nXCIgOiBcInByb2dyZXNzYmFyXCIpO1xuICAgIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbiAgfVxuICBnZXQgbGFiZWxzKCkge1xuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5jbG9zZXN0KFwibGFiZWw6bm90KFtmb3JdKVwiKTtcbiAgICBjb25zdCBpZDIgPSB1c2VJZCh0aGlzKTtcbiAgICBpZiAobGFiZWwpIGxhYmVsLmh0bWxGb3IgPSBpZDI7XG4gICAgY29uc3QgZWwgPSBnZXRSb290KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgbGFiZWxbZm9yPVwiJHtpZDJ9XCJdYFxuICAgICk7XG4gICAgcmV0dXJuIGVsO1xuICB9XG4gIGdldCBwb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZSA9PT0gbnVsbCA/IC0xIDogTWF0aC5taW4odGhpcy52YWx1ZSAvIHRoaXMubWF4LCAxKTtcbiAgfVxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIGdldE51bWJlcih0aGlzLCBcInZhbHVlXCIpO1xuICB9XG4gIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgIHNldE51bWJlcih0aGlzLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbWF4KCkge1xuICAgIHJldHVybiBnZXROdW1iZXIodGhpcywgXCJtYXhcIikgfHwgMTtcbiAgfVxuICBzZXQgbWF4KG1heCkge1xuICAgIHNldE51bWJlcih0aGlzLCBcIm1heFwiLCBtYXgpO1xuICB9XG59O1xuLy8gUHJldmVudCBDaHJvbWUgRGV2VG9vbHMgd2FybmluZyBhYm91dCA8bGFiZWwgZm9yPVwiXCI+IHBvaW50aW5nIHRvIDx1LXByb2dyZXNzPlxuVUhUTUxQcm9ncmVzc0VsZW1lbnQuZm9ybUFzc29jaWF0ZWQgPSB0cnVlO1xudmFyIGlzTnVtZXJpYyA9ICh2YWx1ZSkgPT4gIU51bWJlci5pc05hTihOdW1iZXIucGFyc2VGbG9hdChgJHt2YWx1ZX1gKSkgJiYgTnVtYmVyLmlzRmluaXRlKE51bWJlcih2YWx1ZSkpO1xudmFyIGdldE51bWJlciA9IChlbCwga2V5KSA9PiB7XG4gIGNvbnN0IHZhbHVlID0gYXR0cihlbCwga2V5KTtcbiAgcmV0dXJuIGlzTnVtZXJpYyh2YWx1ZSkgPyBNYXRoLm1heCgwLCBOdW1iZXIucGFyc2VGbG9hdCh2YWx1ZSkpIDogbnVsbDtcbn07XG52YXIgc2V0TnVtYmVyID0gKGVsLCBrZXksIHZhbCkgPT4ge1xuICBpZiAodmFsID09PSBudWxsIHx8IGlzTnVtZXJpYyh2YWwpKSBhdHRyKGVsLCBrZXksIGAke3ZhbH1gKTtcbiAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBzZXQgbm9uLW51bWVyaWMgJyR7YXR0cn0nOiAnJHt2YWx9J2ApO1xufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtcHJvZ3Jlc3NcIiwgVUhUTUxQcm9ncmVzc0VsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTFByb2dyZXNzRWxlbWVudCB9O1xuIl0sIm5hbWVzIjpbIl9fZGVmUHJvcCIsIl9fZ2V0T3duUHJvcFN5bWJvbHMiLCJfX2hhc093blByb3AiLCJfX3Byb3BJc0VudW0iLCJfX2RlZk5vcm1hbFByb3AiLCJvYmoiLCJrZXkiLCJ2YWx1ZSIsIl9fc3ByZWFkVmFsdWVzIiwiYSIsImIiLCJwcm9wIiwiSVNfQlJPV1NFUiIsIklTX0FORFJPSUQiLCJJU19GSVJFRk9YIiwiSVNfSU9TIiwiX2EiLCJJU19CUk9XU0VSJDUiLCJGT0NVU19PVVRMSU5FIiwiVUhUTUxFbGVtZW50IiwiYXR0ciIsImVsIiwibmFtZSIsImV2ZW50cyIsImFjdGlvbiIsImVsZW1lbnQiLCJyZXN0IiwidHlwZSIsIm9uIiwib2ZmIiwib2JzZXJ2ZXJzIiwibXV0YXRpb25PYnNlcnZlciIsIm9wdGlvbnMiLCJvYnNlcnZlciIsImRldGFpbCIsImFzQnV0dG9uIiwiZXZlbnQiLCJpc0NsaWNrIiwiZ2V0Um9vdCIsIm5vZGUiLCJfYTIiLCJyb290IiwiaWQiLCJ1c2VJZCIsImNyZWF0ZUVsZW1lbnQiLCJ0YWdOYW1lIiwidGV4dDIiLCJhdHRycyIsInZhbCIsImN1c3RvbUVsZW1lbnRzIiwiaW5zdGFuY2UiLCJMSVZFIiwiTElWRV9TUl9GSVgiLCJzcGVhayIsInNldFZhbHVlIiwiaW5wdXQiLCJkYXRhIiwiX2IiLCJwcm90byIsIklTX1BSRVNTIiwiaXNNb3VzZURvd24iLCJFVkVOVFMiLCJFVkVOVF9PTkNFIiwiSVNfRklSRUZPWF9ERVNLVE9QIiwiSVNfTU9CSUxFIiwiRkFMU0UiLCJURVhUUyIsIlVIVE1MQ29tYm9ib3hFbGVtZW50IiwicmVuZGVyIiwic3luY0lucHV0VmFsdWUiLCJfIiwidGFyZ2V0IiwiaXNEaXNhYmxlZCIsIm9uQmx1ciIsIm9uQ2xpY2siLCJvbkZvY3VzIiwib25JbnB1dCIsIm9uS2V5RG93biIsInRhZyIsInRleHQiLCJpc0RhdGEiLCJjb250cm9sIiwic2VsZiIsIl9mb2N1cyIsIl90ZXh0cyIsIml0ZW1zIiwibGlzdCIsIm11bHRpcGxlIiwibGFiZWwiLCJlZGl0cyIsImFkZGVkTm9kZXMiLCJyZW1vdmVkTm9kZXMiLCJzaG91bGRBbm5vdW5jZSIsImFyaWFFeHBhbmRlZCIsImlucHV0TW9kZSIsIm5leHRGb2N1cyIsImlzUmVtb3ZlIiwiX2EzIiwiaWR4Iiwic2VsZWN0IiwicmVtb3ZlIiwiaXRlbTIiLCJvcHRpb24iLCJsYWJlbDIiLCJhcmlhIiwib3B0IiwiaXRlbSIsInN5bmNDbGVhcldpdGhJbnB1dCIsInN5bmNPcHRpb25zV2l0aEl0ZW1zIiwiX3NwZWFrIiwidmFsdWVzIiwiZGlzcGF0Y2hNYXRjaCIsImNoYW5nZSIsImNyZWF0YWJsZSIsInF1ZXJ5IiwibWF0Y2giLCJvIiwiZGlzcGF0Y2hDaGFuZ2UiLCJyZW1vdmFibGUiLCJhZGQiLCJpIiwib25CbHVycmVkIiwieCIsInkiLCJjbGVhciIsInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCIsInJlcGVhdCIsImlzQ29udHJvbCIsImluVGV4dCIsImluZGV4IiwiZm9ybSIsIklTX0JST1dTRVIkNCIsIlNBRkVfTEFCRUxMRURCWSIsIkRJU1BMQVlfQkxPQ0siLCJhdHRhY2hTdHlsZSIsImNzcyIsIkFSSUFfQ09OVFJPTFMiLCJBUklBX1NFTEVDVEVEIiwiVUhUTUxUYWJzRWxlbWVudCIsInF1ZXJ5V2l0aG91dE5lc3RlZCIsImdldFNlbGVjdGVkSW5kZXgiLCJzZXRTZWxlY3RlZCIsIlVIVE1MVGFiTGlzdEVsZW1lbnQiLCJ0YWIiLCJ0YWJzIiwicHJldiIsIm5leHQiLCJTS0lQX0FUVFJfQ0hBTkdFIiwiVUhUTUxUYWJFbGVtZW50IiwicGFuZWxzIiwibmV4dFBhbmVsIiwiZ2V0UGFuZWwiLCJwYW5lbCIsInRhYmxpc3QiLCJ0YWJMaXN0IiwiVUhUTUxUYWJQYW5lbEVsZW1lbnQiLCJpc0ZvY3VzYWJsZSIsImlkMiIsIlFVSUNLX0VWRU5UIiwiZGVib3VuY2UiLCJjYWxsYmFjayIsImRlbGF5IiwidGltZXIiLCJhcmdzIiwiVVVJRCIsIlNDUk9MTEVSIiwiVEFSR0VUUyIsIlRBUkdFVFNfVVBEQVRFIiwidXBkYXRlIiwiUE9TSVRJT04iLCJhbmNob3JQb3NpdGlvbiIsImFuY2hvciIsInBsYWNlIiwiZm9yY2UiLCJwb3NpdGlvbiIsImlzSFRNTEFuY2hvciIsInRhcmdldFciLCJ0YXJnZXRIIiwiYW5jaG9yVyIsImFuY2hvckgiLCJ3aWR0aCIsImhlaWdodCIsInZpZXdXIiwidmlld0giLCJzY3JvbGxYIiwic2Nyb2xsWSIsImFuY2hvclgiLCJhbmNob3JZIiwiY2VudGVyWCIsImNlbnRlclkiLCJoYXNTcGFjZUxlZnQiLCJoYXNTcGFjZVJpZ2h0IiwiaGFzU3BhY2VPdmVyIiwiaGFzU3BhY2VVbmRlciIsImlzVmVydGljYWwiLCJpc1JpZ2h0IiwiaXNVbmRlciIsInZpZXdYIiwidmlld1kiLCJjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyIiwicXVldWUiLCJvbkZyYW1lIiwib25UaW1lciIsIk1VVEFUT1JTIiwib25NdXRhdGlvbiIsImNsYXNzTmFtZSIsImVsZW1zIiwibXV0YXRvciIsIm9uTG9hZGVkIiwicnVuIiwiaXNJbnB1dExpa2UiLCJNQVRPTU8iLCJFTkFCTEVEIiwiYW5hbHl0aWNzIiwibWF0b21vSWQiLCJlbmFibGVkIiwidXJsIiwidGl0bGUiLCJjYXRlZ29yeSIsInYiLCJyZXN1bHRzIiwic2hlZXQiLCJDU1NfQVBQIiwic3R5bGVzIiwiQ1NTX1NUSUNLWSIsIkNTU19UT0dHTEUiLCJDU1NfU0lERUJBUiIsInVzZVRyYW5zaXRpb24iLCJ0b2dnbGVBcHBFeHBhbmRlZCIsImhhbmRsZVRvZ2dsZUNsaWNrIiwic3RvcCIsImxpbmsiLCJjbG9zZVNpZGViYXIiLCJzaWRlYmFyIiwiTUlOX1kiLCJTQ1JPTExfVVAiLCJTVElDSyIsIlNUSUNLX0VMIiwiU1RJQ0tfSCIsIlNUSUNLX1kiLCJTVFVDSyIsIldJTl9IIiwiV0lOX1kiLCJoYW5kbGVNdXRhdGlvbiIsInN0aWNreSIsImhhbmRsZVNjcm9sbCIsIk5FWFRfWSIsIk5FWFRfVVAiLCJnZXRTdGVwcyIsIm5vdyIsIm1heCIsInNob3ciLCJvZmZzZXQiLCJzdGFydCIsImVuZCIsInBhZ2VzIiwicGFnaW5hdGlvbiIsImN1cnJlbnQiLCJ0b3RhbCIsInBhZ2UiLCJDU1NfQlJFQURDUlVNQlMiLCJicmVhZGNydW1icyIsImJyZWFkY3VtYnMiLCJjcnVtYiIsImxlbmd0aCIsIkNTU19ESUFMT0ciLCJESUFMT0dTIiwiaGFuZGxlTW9kYWwiLCJkaWFsb2ciLCJoYW5kbGVDbGljayIsImhhbmRsZUluamVjdCIsImZpcnN0IiwiSVNfQlJPV1NFUiQyIiwiRElTQUJMRUQiLCJTRUxFQ1RFRCIsIlVIVE1MT3B0aW9uRWxlbWVudCIsIkxJVkVfVElNRVIiLCJJTlBVVF9ERUJPVU5DRSIsIkVWRU5UU19JTlBVVCIsIlVIVE1MRGF0YUxpc3RFbGVtZW50IiwiZGlzY29ubmVjdElucHV0IiwiX3ByZXYiLCJzZXR1cElucHV0Iiwic2V0RXhwYW5kZWQiLCJvcGVuIiwiX2MiLCJpc1BvcG92ZXIiLCJpc0lucHV0IiwicmVsYXRlZFRhcmdldCIsImFsdEtleSIsImN0cmxLZXkiLCJzaGlmdEtleSIsIm1ldGFLZXkiLCJpc0VzY2FwZSIsIl9yb290IiwiX2lucHV0IiwiZmlsdGVyIiwiaGlkZGVuIiwidmlzaWJsZSIsIkNTU19GSUVMRCIsIkNTU19WQUxJREFUSU9OUyIsIkNTU19WQUxJREFUSU9OIiwiZ2V0VGV4dCIsInN0eWxlIiwiZmllbGRzIiwidmFsaWRhdGUiLCJmaWVsZCIsImxhYmVscyIsImRlc2NzIiwidmFsaWRzIiwiY29tYm9ib3giLCJ2YWxpZCIsImRlc2MiLCJyZW5kZXJDb21ib2JveCIsInJlbmRlckNvdW50ZXIiLCJyZW5kZXJUZXh0YXJlYVNpemUiLCJ0ZXh0YXJlYSIsImxpbWl0IiwicmVtYWluZGVyIiwibmV4dEludmFsaWQiLCJwcmV2SW52YWxpZCIsIm92ZXIiLCJ1bmRlciIsImhhbmRsZVRvZ2dsZSIsIm5ld1N0YXRlIiwiaGFuZGxlSW5wdXQiLCJoYW5kbGVWYWxkaWF0aW9uIiwiaGFuZGxlU2VsZWN0IiwiQ1NTX0ZJRUxEU0VUIiwiQVJJQV9ERVNDIiwiQVJJQV9JTlZBTElEIiwiZmllbGRzZXRzIiwiZmllbGRzZXQiLCJpbnB1dHMiLCJ2YWxpZElkIiwiQ1NTX0xPR08iLCJsb2dvIiwiaWNvbiIsInN2ZyIsImlzRG90IiwiYmFjayIsIkNTU19QT1BPVkVSIiwiT1BFTl9QT1BPVkVSUyIsImhhbmRsZUxpbmtDbGljayIsImNsb3NlIiwicG9wb3ZlciIsIkNTU19UQUJMRSIsInRhYmxlcyIsInRhYmxlIiwidGhzIiwiZ3JvdXAiLCJpc1Rib2R5Iiwicm93IiwiY2VsbCIsIkNTU19UT0dHTEVHUk9VUCIsImhhbmRsZUtleURvd24iLCJtb3ZlIiwiREVTQ1JJQkVEQlkiLCJFU0MiLCJMQUJFTExFREJZIiwiUE9TSVRJT05fQ1NTX1BST1BFUlRZIiwiVEhST1RUTEVfREVMQVkiLCJUT09MVElQIiwiQU5DSE9SIiwiTEFTVF9DQUxMIiwiVEhST1RUTEUiLCJoYW5kbGVNb3ZlIiwid2FpdCIsImhhbmRsZU1vdmVUaHJvdHRsZWQiLCJjb250ZW50IiwiaGFkTGFiZWwiLCJoYXNMYWJlbCIsIklTX0JST1dTRVIkMSIsIlVIVE1MRGV0YWlsc0VsZW1lbnQiLCJoaWRlIiwidURldGFpbHNMaXN0IiwidURldGFpbHMiLCJzdW1tYXJ5IiwiaXNTdW1tYXJ5IiwiVUhUTUxTdW1tYXJ5RWxlbWVudCIsImdldExhYmVsIiwiYWNjIiwiZWwyIiwiVUhUTUxQcm9ncmVzc0VsZW1lbnQiLCJyb2xlSW1hZ2UiLCJwZXJjZW50YWdlIiwiZ2V0TnVtYmVyIiwic2V0TnVtYmVyIiwiaXNOdW1lcmljIl0sIm1hcHBpbmdzIjoia0NBQUEsSUFBSUEsR0FBWSxPQUFPLGVBQ25CQyxHQUFzQixPQUFPLHNCQUM3QkMsR0FBZSxPQUFPLFVBQVUsZUFDaENDLEdBQWUsT0FBTyxVQUFVLHFCQUNoQ0MsR0FBa0IsQ0FBQ0MsRUFBS0MsRUFBS0MsSUFBVUQsS0FBT0QsRUFBTUwsR0FBVUssRUFBS0MsRUFBSyxDQUFFLFdBQVksR0FBTSxhQUFjLEdBQU0sU0FBVSxHQUFNLE1BQUFDLENBQUssQ0FBRSxFQUFJRixFQUFJQyxDQUFHLEVBQUlDLEVBQ3RKQyxHQUFpQixDQUFDQyxFQUFHQyxJQUFNLENBQzdCLFFBQVNDLEtBQVFELElBQU1BLEVBQUksQ0FBQSxHQUNyQlIsR0FBYSxLQUFLUSxFQUFHQyxDQUFJLEdBQzNCUCxHQUFnQkssRUFBR0UsRUFBTUQsRUFBRUMsQ0FBSSxDQUFDLEVBQ3BDLEdBQUlWLEdBQ0YsUUFBU1UsS0FBUVYsR0FBb0JTLENBQUMsRUFDaENQLEdBQWEsS0FBS08sRUFBR0MsQ0FBSSxHQUMzQlAsR0FBZ0JLLEVBQUdFLEVBQU1ELEVBQUVDLENBQUksQ0FBQyxFQUV0QyxPQUFPRixDQUNULEVB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
|