@mattilsynet/design 2.1.1 → 2.1.3

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.
Files changed (86) hide show
  1. package/mtds/alert/alert.js.map +1 -1
  2. package/mtds/analytics/analytics.js.map +1 -1
  3. package/mtds/app/app-observer.js +5 -5
  4. package/mtds/app/app-observer.js.map +1 -1
  5. package/mtds/app/app-toggle.js.map +1 -1
  6. package/mtds/app/app-toggle2.js.map +1 -1
  7. package/mtds/app/app.js.map +1 -1
  8. package/mtds/avatar/avatar.js.map +1 -1
  9. package/mtds/badge/badge.js.map +1 -1
  10. package/mtds/breadcrumbs/breadcrumbs-observer.js +8 -4
  11. package/mtds/breadcrumbs/breadcrumbs-observer.js.map +1 -1
  12. package/mtds/breadcrumbs/breadcrumbs.js.map +1 -1
  13. package/mtds/button/button.js.map +1 -1
  14. package/mtds/card/card.js.map +1 -1
  15. package/mtds/chip/chip.js.map +1 -1
  16. package/mtds/details/details.js.map +1 -1
  17. package/mtds/dialog/dialog-observer.js +7 -3
  18. package/mtds/dialog/dialog-observer.js.map +1 -1
  19. package/mtds/dialog/dialog.js.map +1 -1
  20. package/mtds/dialog/dialog.stories.d.ts +1 -0
  21. package/mtds/divider/divider.js.map +1 -1
  22. package/mtds/errorsummary/errorsummary-observer.js +6 -4
  23. package/mtds/errorsummary/errorsummary-observer.js.map +1 -1
  24. package/mtds/errorsummary/errorsummary.js.map +1 -1
  25. package/mtds/external/@floating-ui/core/dist/floating-ui.core.js +342 -0
  26. package/mtds/external/@floating-ui/core/dist/floating-ui.core.js.map +1 -0
  27. package/mtds/external/@floating-ui/dom/dist/floating-ui.dom.js +397 -0
  28. package/mtds/external/@floating-ui/dom/dist/floating-ui.dom.js.map +1 -0
  29. package/mtds/external/@floating-ui/utils/dist/floating-ui.utils.dom.js +137 -0
  30. package/mtds/external/@floating-ui/utils/dist/floating-ui.utils.dom.js.map +1 -0
  31. package/mtds/external/@floating-ui/utils/dist/floating-ui.utils.js +130 -0
  32. package/mtds/external/@floating-ui/utils/dist/floating-ui.utils.js.map +1 -0
  33. package/mtds/external/@u-elements/u-combobox/dist/u-combobox.js.map +1 -1
  34. package/mtds/external/@u-elements/u-datalist/dist/u-datalist.js.map +1 -1
  35. package/mtds/external/@u-elements/u-details/dist/u-details.js +27 -28
  36. package/mtds/external/@u-elements/u-details/dist/u-details.js.map +1 -1
  37. package/mtds/external/@u-elements/u-progress/dist/u-progress.js.map +1 -1
  38. package/mtds/external/@u-elements/u-tabs/dist/u-tabs.js.map +1 -1
  39. package/mtds/field/field-observer.js +54 -48
  40. package/mtds/field/field-observer.js.map +1 -1
  41. package/mtds/field/field.d.ts +3 -3
  42. package/mtds/field/field.js.map +1 -1
  43. package/mtds/fieldset/fieldset-observer.js +4 -4
  44. package/mtds/fieldset/fieldset-observer.js.map +1 -1
  45. package/mtds/fieldset/fieldset.js.map +1 -1
  46. package/mtds/helptext/helptext.js.map +1 -1
  47. package/mtds/index.iife.js +7 -7
  48. package/mtds/input/input.js.map +1 -1
  49. package/mtds/layout/layout.js.map +1 -1
  50. package/mtds/link/link.js.map +1 -1
  51. package/mtds/logo/logo-observer.js +4 -2
  52. package/mtds/logo/logo-observer.js.map +1 -1
  53. package/mtds/logo/logo.js.map +1 -1
  54. package/mtds/package.json.js +1 -1
  55. package/mtds/pagination/pagination-helper.js.map +1 -1
  56. package/mtds/pagination/pagination.js.map +1 -1
  57. package/mtds/popover/popover-observer.js +21 -14
  58. package/mtds/popover/popover-observer.js.map +1 -1
  59. package/mtds/popover/popover.d.ts +2 -2
  60. package/mtds/popover/popover.js.map +1 -1
  61. package/mtds/progress/progress.js.map +1 -1
  62. package/mtds/skeleton/skeleton.js.map +1 -1
  63. package/mtds/spinner/spinner.js.map +1 -1
  64. package/mtds/steps/steps.js.map +1 -1
  65. package/mtds/styles.css +1 -1
  66. package/mtds/styles.json +20 -20
  67. package/mtds/styles.module.css.js +86 -84
  68. package/mtds/styles.module.css.js.map +1 -1
  69. package/mtds/table/table-observer.js +10 -8
  70. package/mtds/table/table-observer.js.map +1 -1
  71. package/mtds/table/table.js.map +1 -1
  72. package/mtds/tabs/tabs.js.map +1 -1
  73. package/mtds/tag/tag.js.map +1 -1
  74. package/mtds/tailwind.css +1 -0
  75. package/mtds/togglegroup/togglegroup-observer.js +8 -8
  76. package/mtds/togglegroup/togglegroup-observer.js.map +1 -1
  77. package/mtds/togglegroup/togglegroup.js.map +1 -1
  78. package/mtds/tooltip/tooltip-observer.js +14 -10
  79. package/mtds/tooltip/tooltip-observer.js.map +1 -1
  80. package/mtds/typography/typography.js.map +1 -1
  81. package/mtds/utils.d.ts +2 -14
  82. package/mtds/utils.js +60 -71
  83. package/mtds/utils.js.map +1 -1
  84. package/mtds/validation/validation.js.map +1 -1
  85. package/package.json +13 -12
  86. package/mtds/toast/toast-observer.d.ts +0 -2
@@ -1,22 +1,22 @@
1
- var mtds=function(T){"use strict";var En=Object.defineProperty,re=Object.getOwnPropertySymbols,Sn=Object.prototype.hasOwnProperty,$n=Object.prototype.propertyIsEnumerable,le=(t,e,o)=>e in t?En(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,Tn=(t,e)=>{for(var o in e||(e={}))Sn.call(e,o)&&le(t,o,e[o]);if(re)for(var o of re(e))$n.call(e,o)&&le(t,o,e[o]);return t},K=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",ce=K&&/android/i.test(navigator.userAgent),xn=K&&/firefox/i.test(navigator.userAgent),Cn=K&&/iPad|iPhone|iPod/.test(navigator.userAgent),de;K&&/^Mac/i.test(((de=navigator.userAgentData)==null?void 0:de.platform)||navigator.platform);var kn="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",In=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 ue=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},ot=(t,...e)=>ue("add",t,e),An=(t,...e)=>ue("remove",t,e),nt=new WeakMap,Ct=(t,e)=>{if(e===void 0)return nt.get(t);try{nt.get(t).disconnect(),nt.delete(t)}catch{}if(e){const o=new MutationObserver(n=>t.handleEvent({type:"mutation",detail:n}));o.observe(t,e),nt.set(t,o)}},Ln=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},Mn=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},On=0,Pn=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++On).toString(32)}`),t.id):"",it=(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},Dn={define:(t,e)=>!K||window.customElements.get(t)||window.customElements.define(t,e)},N,Nn=0,kt=t=>{N||(N=it("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}${Nn++%2?" ":""}`)},pe=(t,e,o="")=>{var n,i;const s={bubbles:!0,composed:!0,data:e,inputType:o},a=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(n=Object.getOwnPropertyDescriptor(a,"value"))==null?void 0:n.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},It=!1,At=t=>(t?.type==="mouseup"&&(It=!1),t?.type==="mousedown"&&(It=!0,ot(document,"mouseup",At,{once:!0})),It),fe="beforeinput,blur,focus,click,input,keydown,mousedown",me={once:!0,passive:!0},Hn=xn&&!ce,Rn=ce||Cn,st="false",at={added:"Added",empty:"No selected",found:"Navigate left to find %d selected",invalid:"Invalid value",of:"of",remove:"Press to remove",removed:"Removed"},rt=class extends In{constructor(){super(),this._item="",this._speak="",this._texts=Tn({},at),this._value="",this.attachShadow({mode:"open"}).append(it("slot"),it("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 */
1
+ var mtds=function(I){"use strict";var Oi=Object.defineProperty,tn=Object.getOwnPropertySymbols,Mi=Object.prototype.hasOwnProperty,Ri=Object.prototype.propertyIsEnumerable,en=(t,e,n)=>e in t?Oi(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,Di=(t,e)=>{for(var n in e||(e={}))Mi.call(e,n)&&en(t,n,e[n]);if(tn)for(var n of tn(e))Ri.call(e,n)&&en(t,n,e[n]);return t},vt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",nn=vt&&/android/i.test(navigator.userAgent),Pi=vt&&/firefox/i.test(navigator.userAgent),Ni=vt&&/iPad|iPhone|iPod/.test(navigator.userAgent),on;vt&&/^Mac/i.test(((on=navigator.userAgentData)==null?void 0:on.platform)||navigator.platform);var Hi="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",Bi=typeof HTMLElement>"u"?class{}:HTMLElement;function y(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 sn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Lt=(t,...e)=>sn("add",t,e),Fi=(t,...e)=>sn("remove",t,e),It=new WeakMap,le=(t,e)=>{if(e===void 0)return It.get(t);try{It.get(t).disconnect(),It.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),It.set(t,n)}},Ui=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},Vi=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},qi=0,Wi=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++qi).toString(32)}`),t.id):"",Ot=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))y(o,i,s);return o},ji={define:(t,e)=>!vt||window.customElements.get(t)||window.customElements.define(t,e)},J,Yi=0,ce=t=>{J||(J=Ot("div"),J.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",y(J,"aria-live","assertive")),J.isConnected||document.body.append(J),t&&(J.textContent=`${t}${Yi++%2?" ":""}`)},rn=(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}))},ue=!1,de=t=>(t?.type==="mouseup"&&(ue=!1),t?.type==="mousedown"&&(ue=!0,Lt(document,"mouseup",de,{once:!0})),ue),an="beforeinput,blur,focus,click,input,keydown,mousedown",ln={once:!0,passive:!0},Ki=Pi&&!nn,zi=nn||Ni,Mt="false",Rt={added:"Added",empty:"No selected",found:"Navigate left to find %d selected",invalid:"Invalid value",of:"of",remove:"Press to remove",removed:"Removed"},fe=class extends Bi{constructor(){super(),this._item="",this._speak="",this._texts=Di({},Rt),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
7
  ::slotted(data)::after { content: '\\00D7'; content: '\\00D7' / ''; padding-inline: .5ch; pointer-events: auto; cursor: pointer }
8
- ::slotted(data:focus) { ${kn} }`))}static get observedAttributes(){return Object.keys(at).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=Mn(this),ot(this,fe,this,!0),Ct(this,{attributeFilter:["value","id"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(lt,0,this),setTimeout(ct,0,this)}attributeChangedCallback(t,e,o){const n=t.split("data-sr-")[1];at[n]&&(this._texts[n]=o||at[n])}disconnectedCallback(){Ct(this,!1),An(this,fe,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;Mt(this)||(t.type==="beforeinput"&&(this._value=e?.value||""),t.type==="blur"&&Un(this),t.type==="click"&&Fn(this,t),t.type==="focus"&&Bn(this,t),t.type==="input"&&Vn(this,t),t.type==="keydown"&&Wn(this,t),t.type==="mousedown"&&At(t),t.type==="mutation"&&lt(this,t))}get multiple(){var t;return((t=f(this,"data-multiple"))!=null?t:st)!==st}set multiple(t){f(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=f(this,"data-creatable"))!=null?t:st)!==st}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)}},M=t=>{var e;return((e=t?.textContent)==null?void 0:e.trim())||""},Lt=t=>t instanceof HTMLDataElement,Mt=({control:t})=>t?.disabled||t?.readOnly||!1,lt=(t,e)=>{var o,n;const{_focus:i,_texts:s,items:a,control:r,list:u,multiple:c}=t;let p=`${M((o=r?.labels)==null?void 0:o[0])}${c?`, ${a.length?s.found.replace("%d",`${a.length}`):s.empty}`:""}`;const d=[];for(const{addedNodes:S,removedNodes:$}of e?.detail||[]){for(const _ of S)Lt(_)&&d.unshift(_);for(const _ of $)Lt(_)&&d.push(_)}const v=c?d.length===1:d[0]===i;if(i&&r&&v){const S=f(r,"aria-expanded"),$=f(r,"inputmode"),_=Lt(i)?r:i,D=!d[0].isConnected;t._speak=`${s[D?"removed":"added"]} ${M(d[0])}, `,(Rn||i===r)&&kt(t._speak),r!==_&&(f(r,"aria-expanded",null),f(r,"inputmode","none"),p=" ",r.focus()),setTimeout(()=>{var Y;f(r,"aria-expanded",S),f(r,"inputmode",D?"none":$),(Y=_?.focus)==null||Y.call(_),f(r,"inputmode",$),t._speak="",Hn?ot(t,"blur",()=>lt(t),me):setTimeout(lt,100,t)},100)}let h=0;const A=t.querySelector("select"),xt=Mt(t)?"":`${s.remove}, `;for(const S of a){const $=A?.options[h],_=M(S),D=S.value||_,Y=`${t._speak}${_}, ${xt}${++h} ${s.of} ${a.length}`;f(S,"role","button"),f(S,"value",D),f(S,"tabindex","-1"),f(S,"aria-label",Y),$?Object.assign($,{textContent:_,value:D}):A?.appendChild(new Option(_,D,!0,!0))}A&&f(A,"multiple",c?"":null);for(const S of[...A?.options||[]].slice(h))S.remove();!c&&h>1&&console.warn("u-combobox: Multiple <data> found in single mode."),u&&f(u,"aria-multiselectable",`${c}`),r&&f(r,"list",Pn(u)),r&&f(r,"aria-label",`${t._speak}${p}`);const et=M(a[0]);et!==t._item&&ct(t),t._item=et,he(t),ve(t),(n=Ct(t))==null||n.takeRecords()},he=t=>{var e;t.clear&&f(t.clear,"role","button"),t.clear&&(t.clear.hidden=!((e=t.control)!=null&&e.value)||Mt(t))},ve=t=>{var e;const{_speak:o,options:n=[],values:i}=t;for(const s of n){const a=(e=f(s,"value"))!=null?e:M(s);f(s,"aria-label",o?`${o}${M(s)}`:null),f(s,"selected",i.includes(a)?"":null)}},ct=t=>{const{multiple:e,control:o,items:n}=t,i=M(n[0]);!e&&o&&i!==o.value&&pe(o,i,i?"insertText":"deleteContent")},Ot=(t,e=!0)=>{var o;const{_texts:n,options:i=[],creatable:s,control:a,items:r,multiple:u}=t,c=((o=a?.value)==null?void 0:o.trim())||"",p=c.toLowerCase()||null;let d=[...i].find(h=>(f(h,"label")||M(h)).trim().toLowerCase()===p);const v={bubbles:!0,cancelable:!0,detail:d};if(t.dispatchEvent(new CustomEvent("comboboxbeforematch",v))||(d=[...i].find(h=>h.selected)),e)return ve(t),d?U(t,d,!1):s&&c?U(t,{value:c},!1):(!u&&!c&&r[0]?U(t,r[0]):ct(t),kt(n.invalid));for(const h of i)h.selected=h===d},U=(t,e,o=!0)=>{const{control:n,items:i,multiple:s}=t,a=it("data",e.label||e.value,{value:e.value}),r=[...i].find(p=>p.value===e.value),u={bubbles:!0,cancelable:!0,detail:r||a};if(r&&!o)return ct(t);if(t.dispatchEvent(new CustomEvent("comboboxbeforeselect",u))){if(!s)for(const p of[...i])p.remove();r?r.remove():n?.insertAdjacentElement("beforebegin",a),t.dispatchEvent(new CustomEvent("comboboxafterselect",u))}},Bn=(t,{target:e})=>{e instanceof HTMLElement&&(t._focus=e),kt()},Un=t=>At()||setTimeout(qn,0,t),qn=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(t.multiple||Ot(t),t._focus=void 0)},Fn=(t,e)=>{const{clientX:o,clientY:n,target:i}=e,{clear:s,control:a,items:r}=t;if(s?.contains(i))return a&&pe(a,"","deleteContentBackward"),a?.focus();for(const u of r){const{top:c,right:p,bottom:d,left:v}=u.getBoundingClientRect();if(u.contains(i))return U(t,u);if(n>=c&&n<=d&&o>=v&&o<=p)return u.focus()}i===t&&a?.focus()},Vn=(t,e)=>{var o;const{options:n=[],control:i,multiple:s}=t,a=((o=i?.value)==null?void 0:o.trim())||"";if(e instanceof InputEvent?!e.inputType||e.inputType==="insertReplacementText":!!a){e.stopImmediatePropagation(),i&&(i.value=t._value);for(const u of n)if(u.value&&u.value===a)return U(t,u,s)}else s||Ot(t,!1);he(t)},Wn=(t,e)=>{var o;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;const{clear:n,control:i,items:s}=t,{key:a,repeat:r,target:u}=e,c=i&&i===u,p=c&&i?.selectionEnd;let d=c?s.length:[...s].indexOf(u);if(c&&a==="Tab"&&n&&!n.hidden&&(e.preventDefault(),n.tabIndex=-1,n.focus(),ot(n,"blur",()=>f(n,"tabindex",null),me)),!(!c&&Ln(e)||d===-1)){if(a==="ArrowRight"&&!c)d+=1;else if(a==="ArrowLeft"&&!p)d-=1;else if(a==="Enter"&&c){const v=f(i,"form");return f(i,"form","#"),requestAnimationFrame(()=>f(i,"form",v)),Ot(t)}else if((a==="Backspace"||a==="Delete")&&!p){if(e.preventDefault(),!r&&s[d])return U(t,s[d]);c&&(d-=1)}else return c||i?.focus();e.preventDefault(),(o=s[Math.max(0,d)]||i)==null||o.focus()}};Dn.define("u-combobox",rt);var Pt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Yn=Pt&&/android/i.test(navigator.userAgent),_e;Pt&&/^Mac/i.test(((_e=navigator.userAgentData)==null?void 0:_e.platform)||navigator.platform);var Kn=`${Yn?"data":"aria"}-labelledby`,Dt=":host(:not([hidden])) { display: block }",dt=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 be=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},jn=(t,...e)=>be("add",t,e),Xn=(t,...e)=>be("remove",t,e),ut=(t,e)=>t.attachShadow({mode:"open"}).append(Ee("slot"),Ee("style",e)),pt=new WeakMap,ge=(t,e)=>{if(e===void 0)return pt.get(t);try{pt.get(t).disconnect(),pt.delete(t)}catch{}if(e){const o=new MutationObserver(n=>t.handleEvent({type:"mutation",detail:n}));o.observe(t,e),pt.set(t,o)}},Gn=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},ye=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},zn=0,we=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++zn).toString(32)}`),t.id):"",Ee=(t,e,o)=>{const n=document.createElement(t);return e&&(n.textContent=e),n},ft={define:(t,e)=>!Pt||window.customElements.get(t)||window.customElements.define(t,e)},mt="aria-controls",q="aria-selected",Se=class extends dt{constructor(){super(),ut(this,Dt)}get tabList(){return ht("u-tablist",this)[0]||null}get selectedIndex(){return vt(this.tabs)}set selectedIndex(t){Rt(this.tabs[t])}get tabs(){return ht("u-tab",this)}get panels(){return ht("u-tabpanel",this)}},$e=class extends dt{constructor(){super(),ut(this,Dt)}connectedCallback(){x(this,"role","tablist"),jn(this,"click,keydown",this),ge(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){Xn(this,"click,keydown",this),ge(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"&&Rt(o[n]),t.type==="keydown"&&!Gn(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=vt(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 vt(this.tabs)}set selectedIndex(t){Rt(this.tabs[t])}},Nt=!1,Te=class extends dt{static get observedAttributes(){return["id",q,mt]}constructor(){super(),ut(this,":host(:not([hidden])) { cursor: pointer; display: inline-block }")}connectedCallback(){x(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!Nt&&this.selected&&this.tabList){Nt=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=ht("u-tabpanel",this.tabsElement||this),o=Ht(this,e[t.indexOf(this)]);o&&x(o,Kn,we(this)),t.forEach((n,i)=>{const s=Ht(n,e[i]);n.tabIndex=n===this?0:-1,x(n,q,`${n===this}`),s&&(s.hidden=s!==o),s&&x(n,mt,s.id)}),Nt=!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 Ht(this)}},xe=class extends dt{static get observedAttributes(){return["hidden"]}constructor(){super(),ut(this,Dt)}connectedCallback(){x(this,"role","tabpanel"),this.hidden=vt(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){this.hidden||Qn(this.firstChild)?x(this,"tabindex",null):this.tabIndex=0}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${mt}="${this.id}"]`;return ye(this).querySelectorAll(t)}},ht=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),Ht=(t,e)=>{const o=x(t,mt)||we(e),n=ye(t).getElementById(o);return n?.nodeName==="U-TABPANEL"?n:null},vt=t=>[...t].findIndex(e=>x(e,q)==="true"),Rt=t=>t&&x(t,"aria-selected","true"),Qn=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');ft.define("u-tabs",Se),ft.define("u-tablist",$e),ft.define("u-tab",Te),ft.define("u-tabpanel",xe);const Jn="2.1.1",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",Pe="_card_1run0_1",De="_group_1run0_1",Ne="_chip_1run0_1 _ds-chip_im5h3_1",He="_details_1run0_1 _ds-details_im5h3_1",Re="_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",We="_affixes_1run0_1 _ds-field-affixes_im5h3_1",Ye="_fieldset_1run0_1 _ds-fieldset_im5h3_1",Ke="_heading_1run0_1 _ds-heading_im5h3_1",je="_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",ao="__indeterminate_1run0_1",ro="_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",b={alert:Ce,app:ke,sticky:Ie,avatar:Ae,badge:Le,breadcrumbs:Me,button:Oe,card:Pe,group:De,chip:Ne,details:He,dialog:Re,divider:Be,errorsummary:Ue,_errorsummary:qe,field:Fe,_datalist:Ve,affixes:We,fieldset:Ye,heading:Ke,ingress:je,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:ao,skeleton:ro,_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},Zn=Object.freeze(Object.defineProperty({__proto__:null,_checked:wo,_datalist:Ve,_errorsummary:qe,_indeterminate:ao,_scrollMask:ho,_scrollShadow:fo,_skeleton:lo,_tooltip:bo,affixes:We,alert:Ce,app:ke,avatar:Ae,badge:Le,body:yo,breadcrumbs:Me,button:Oe,card:Pe,chip:Ne,default:b,details:He,dialog:Re,divider:Be,errorsummary:Ue,field:Fe,fieldset:Ye,flex:to,grid:Ze,group:De,heading:Ke,helptext:Qe,info:Ge,ingress:je,input:Je,link:eo,logo:oo,muted:Xe,pagination:no,popover:io,progress:so,prose:ze,skeleton:ro,spinner:co,steps:uo,sticky:Ie,table:po,tabs:mo,tag:vo,togglegroup:_o,validation:go},Symbol.toStringTag,{value:"Module"})),y={capture:!0,passive:!0},j=typeof window<"u"&&typeof document<"u";function ti(t,e){let o;return(...n)=>{clearTimeout(o),o=setTimeout(()=>t(...n),e)}}function l(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 ei=0;const oi=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function _t(t){return t.id||(t.id=`${oi}${++ei}`),t.id}const Eo=(t,e,[...o])=>{for(const n of o[0].split(","))o[0]=n,e[`${t}EventListener`](...o)},g=(t,...e)=>{X&&(t===window||t===document)&&X.push(()=>ni(t,...e)),Eo("add",t,e)},ni=(t,...e)=>Eo("remove",t,e);let X=null;const C=t=>{if(!j)return;window._mtdsUnbindEvents||(window._mtdsUnbindEvents=new Map);const e=()=>requestAnimationFrame(()=>{const o=String(t).replace(/(\n|\s)/g,"");window._mtdsUnbindEvents?.get(o)?.forEach(n=>n()),X=[],t(),window._mtdsUnbindEvents?.set(o,X?.slice(0)),X=null});document.readyState==="complete"?e():g(window,"load",e)},G=j?document.createElement("div"):null,bt=new Map,ii=()=>{for(const[t,e]of bt)e()};G&&(G.style.cssText="position:absolute;padding:1px;top:0;left:0px",g(window,"load,resize,scroll",ii,y));const F={top:0,right:1,bottom:2,left:3};function O(t,e,o,n){const i=F[o]??Number(o)??F.bottom;if(e===!1||!e.isConnected||!t.isConnected)return bt.delete(t);G?.isConnected||document.body.append(G||""),bt.has(t)||bt.set(t,()=>O(t,e,i,n));const{offsetWidth:s,offsetHeight:a}=t,{width:r,height:u,left:c,top:p}=e.getBoundingClientRect(),d=e instanceof HTMLElement,v=d?e.offsetWidth:e.clientWidth,h=d?e.offsetHeight:e.clientHeight,A=window.visualViewport?.width||window.innerWidth,xt=window.visualViewport?.height||window.innerHeight,et=window.pageXOffset||document.documentElement.scrollLeft,S=window.pageYOffset||document.documentElement.scrollTop,$=Math.round(c-(v-r)/2),_=Math.round(p-(h-u)/2),D=Math.min(Math.max(10,$-(s-v)/2),A-s-10),Y=Math.min(Math.max(10,_-(a-h)/2),xt-a-10),Ss=$-s>0,$s=$+v+s<A,Ts=_-a>0,xs=_+h+a<xt,yn=i===F.top||i===F.bottom,Cs=i===F.right&&(n||$s)||!Ss,wn=i===F.bottom&&(n||xs)||!Ts,ks=Math.round(yn?D:Cs?$+v:$-s),Is=Math.round(yn?wn?_+h:_-a:Y);t.style.position="absolute",t.style.left=`${ks+et}px`,t.style.top=`${Is+S}px`,G?.style.setProperty("translate",`0px ${Math.round(wn?et+_+h+a+30:0)}px`)}function So(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 Bt=new WeakMap,V=(t,e,o)=>{const n=t.getElementsByClassName(e),i=Bt.get(t)||[];i.length||(Bt.set(t,i),So((s,a)=>{if(t.isConnected&&i?.length)for(const r of i)r();else a?.disconnect(),Bt.delete(t)}).observe(t,{attributeFilter:["class","hidden"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>o(n))},Ut=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),si=`.${b.breadcrumbs.split(" ")[0]}`,ai=`.${b.chip.split(" ")[0]}`,ri=`.${b.helptext.split(" ")[0]}`,li=`.${b.pagination.split(" ")[0]}`,ci='summary,u-summary,a,button,[role="tab"],[role="button"]',di="click,toggle,submit,change",qt="mattilsynet.matomo.cloud";function $o(t,e={}){if(j){if(window._paq||(window._paq=[],window._paq.push(["HeatmapSessionRecording::disable"]),window._paq.push(["enableLinkTracking"]),window._paq.push(["setTrackerUrl",`https://${qt}/matomo.php`])),window._mtm||(window._mtm=window._mtm||[],window._mtm.push({"mtm.startTime":Date.now(),event:"mtm.Start"})),t==="init"){window._mtdsTracking={enabled:window.location.hostname!=="localhost",...window._mtdsTracking,...e};const{enabled:o,matomoId:n,matomoTagManagerId:i}=window._mtdsTracking;if(n&&window._paq.push(["setSiteId",n]),o){const s=i?`https://cdn.matomo.cloud/${qt}/container_${i}.js`:`https://cdn.matomo.cloud/${qt}/matomo.js`;document.querySelector(`script[src="${s}"]`)||document.head.append(Object.assign(document.createElement("script"),{async:!0,src:s}))}}if(window._mtdsTracking?.enabled!==!1){if(window._mtdsTracking?.enabled==="debug")return console.info(`analytics("${t}", `,e,")");if(t==="pageview"){const{url:o,title:n}=e;window._paq.push(["setCustomUrl",o||location.href]),window._paq.push(["setDocumentTitle",n||document.title]),window._paq.push(["trackPageView"])}else if(t==="event"){const{category:o,action:n,name:i,value:s}=e,a=["trackEvent",o,n,i,s];let r=location.href;window._paq.push([function(){r=this.getCurrentUrl()}]),window._paq.push(["setCustomUrl",r.split("#")[0]]),window._paq.push(a.filter(u=>u!==void 0)),window._paq.push(["setCustomUrl",r])}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 ui=t=>window._mtdsTracking?.enabled&&setTimeout(pi,0,t),pi=({type:t,target:e})=>{const o=t==="click"?e?.closest?.(ci):e;if(!(o instanceof Element)||l(o,"data-analytics")==="ignore")return;let n="click",i="Button",s=To(o)||hi(o)||l(o,"data-tooltip")||"";if(t==="submit")i="Form",n="submit",s=s||document.title;else if(t==="toggle"){if(!o.matches("dialog:modal"))return;i="Dialog",n="open"}else if(t==="change"){const a=l(o,"type"),r=a==="checkbox"||a==="radio"?o.closest("fieldset"):null;i="Form",n="change",s=To(r||o)||z(r?.querySelector("legend"))||z(o?.labels?.[0])}else if(l(o,"role")==="tab")i="Tab",n="navigate";else if(l(o,"popovertarget")){if(!fi(o)?.matches(":popover-open"))return;i=o.closest(ri)?"HelpText":"Popover",n="open"}else if(o.nodeName.endsWith("SUMMARY")){if(!o.parentElement.open)return;i="Details",n="open"}else if(l(o,"data-command")==="toggle-app-expanded"){const a=mi(o,"--mtds-tooltip-position")==="none";i="Sidebar",n=a?"expand":"minimize",s=a&&l(o,"data-tooltip")||z(o)}else if(o.closest(si))i="Breadcrumbs",n="navigate";else if(o.closest(li))i="Pagintation",n="navigate";else if(o.closest(ai))i="Chip",n=o.hasAttribute("data-removable")?"remove":"click";else if(o.closest("th[aria-sort]"))i="Table",n="sort";else if(o instanceof HTMLAnchorElement)i="Link",n=o.protocol==="mailto:"?"email":"navigate",o.hasAttribute("download")?n="download":o.hash&&o.href.startsWith(location.href.split("#")[0])&&(n="anchor");else if(o.hasAttribute("aria-expanded")){if(l(o,"aria-expanded")!=="true")return;i="Expand",n="open"}$o("event",{category:l(o,"data-analytics-category")??i,action:l(o,"data-analytics-action")??n,name:l(o,"data-analytics-name")??s})},z=t=>t?.textContent?.trim()||"",To=t=>t&&l(t,"aria-label")||"",fi=t=>document.getElementById(l(t,"popovertarget")||""),mi=(t,e)=>window.getComputedStyle(t).getPropertyValue(e)?.trim(),hi=t=>{const e=z(t),o=z(t.querySelector("h1,h2,h3,h4,h5,h6"));return e.startsWith(o)&&o||e.slice(0,100).trim()};C(()=>g(document,di,ui,y)),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 xo=b.app.split(" ")[0],vi=b.sticky.split(" ")[0],_i='[data-command="toggle-app-expanded"]',Ft=`.${xo} > dialog,.${xo} dialog ~ main`,Co=t=>{document.startViewTransition?document.startViewTransition(t):t()},ko=t=>Co(()=>window.mtdsToggleAppExpanded?.(t));function bi({target:t,defaultPrevented:e}){const o=t?.closest?.("a");if(o?.closest("dialog")&&o?.closest(Ft))return Io();if(e||!(t instanceof HTMLButtonElement)||!t.matches(_i))return;getComputedStyle(t).position==="sticky"?ko():Co(()=>{const i=document.querySelector(Ft);i?.setAttribute("data-closedby","any"),i?.showModal()})}function Io(){document.querySelector(Ft)?.close()}let Vt=0,W,L=0,w,Wt=0,gt=0,Yt=!1,Kt=0,H=0;function gi([t]){w=t,Ao()}function Ao(){if(!w?.isConnected)return;const t=window.scrollY,e=t<H;H=t,e!==W&&(Vt=(w.parentElement?.getBoundingClientRect().top||0)+H,W=e,Wt=w.offsetHeight,gt=w.getBoundingClientRect().top+H,Yt=w.offsetHeight<=window.innerHeight,Kt=window.innerHeight),!(L===-1&&Yt)&&(L!==-1&&(Yt||W&&H<=gt)?(w.style.setProperty("--pos","sticky"),w.style.setProperty("--top","0px"),L=-1):L===-1&&!W?(w.style.setProperty("--pos","relative"),w.style.setProperty("--top",`${Math.max(0,H-Vt)}px`),L=0):L!==1&&!W&&H+Kt>=gt+Wt?(w.style.setProperty("--pos","sticky"),w.style.setProperty("--top",`${Kt-Wt}px`),L=1):L===1&&W&&(w.style.setProperty("--pos","relative"),w.style.setProperty("--top",`${gt-Vt}px`),L=0))}C(()=>{V(document.documentElement,vi,gi),g(document,"click",bi,y),g(window,"resize",ti(Io,100),y),g(window,"scroll",Ao,y)});const yi=(t,e,o=Number.POSITIVE_INFINITY)=>{const n=(o-1)/2,i=Math.max(Math.min(t-Math.floor(n),e-o+1),1),s=Math.min(Math.max(t+Math.ceil(n),o),e),a=Array.from({length:s+1-i},(r,u)=>u+i);return o>4&&i>1&&a.splice(0,2,1,0),o>3&&s<e&&a.splice(-2,2,0,e),a},wi=({current:t=1,total:e=10,show:o=7})=>({prev:t>1?t-1:0,next:t<e?t+1:0,pages:yi(t,e,o).map((n,i)=>({current:n===t&&"page",key:`key-${n}-${i}`,page:n}))}),Ei=b.breadcrumbs.split(" ")[0];function Si(t){for(const e of t)e.querySelectorAll("li a").forEach((o,n,{length:i})=>{l(o,"aria-current",n===i-1?"page":null)})}C(()=>V(document.documentElement,Ei,Si));const $i=b.dialog.split(" ")[0],Ti=j?document.getElementsByClassName($i):[],xi=()=>{for(const t of Ti)t.isConnected&&t.showModal&&t.close&&(t.matches('[open]:not([data-modal="false"]):not(:modal)')?(l(t,"open",null),t.showModal()):t.matches(":modal:not([open])")&&(l(t,"open",""),t.close()))},Ci=({clientX:t,clientY:e,target:o})=>{if(o instanceof HTMLDialogElement&&l(o,"data-closedby")==="any"){const{top:s,right:a,bottom:r,left:u}=o.getBoundingClientRect();if(!(s<=e&&e<=r&&u<=t&&t<=a))return o.close()}const n=o?.closest?.("dialog");n&&o?.closest?.('[data-command="close"]')&&n.close()};C(()=>{g(document,"click",Ci,y),So(xi).observe(document.documentElement,{attributeFilter:["open"],attributes:!0,childList:!0,subtree:!0})});function ki(t){if(t.animationName!==b._errorsummary)return;const e=t.target?.firstElementChild;e instanceof HTMLHeadingElement&&(l(e,"tabindex","-1"),e.focus())}C(()=>g(document,"animationend",ki,y));var Ii=Object.defineProperty,Lo=Object.getOwnPropertySymbols,Ai=Object.prototype.hasOwnProperty,Li=Object.prototype.propertyIsEnumerable,Mo=(t,e,o)=>e in t?Ii(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,Mi=(t,e)=>{for(var o in e||(e={}))Ai.call(e,o)&&Mo(t,o,e[o]);if(Lo)for(var o of Lo(e))Li.call(e,o)&&Mo(t,o,e[o]);return t},Q=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",yt=Q&&/android/i.test(navigator.userAgent),jt=Q&&/iPad|iPhone|iPod/.test(navigator.userAgent),Oo;Q&&/^Mac/i.test(((Oo=navigator.userAgentData)==null?void 0:Oo.platform)||navigator.platform);var Oi=`${yt?"data":"aria"}-labelledby`,Pi=":host(:not([hidden])) { display: block }",Di="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",Po=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 Do=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},J=(t,...e)=>Do("add",t,e),wt=(t,...e)=>Do("remove",t,e),Ni=(t,e)=>t.attachShadow({mode:"open"}).append(zt("slot"),zt("style",e)),Et=new WeakMap,Xt=(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)}},No=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},Hi=0,Gt=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++Hi).toString(32)}`),t.id):"",zt=(t,e,o)=>{const n=document.createElement(t);return e&&(n.textContent=e),n},Ho={define:(t,e)=>!Q||window.customElements.get(t)||window.customElements.define(t,e)},R,Ri=0,Ro=t=>{R||(R=zt("div"),R.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",m(R,"aria-live","assertive")),R.isConnected||document.body.append(R),t&&(R.textContent=`${t}${Ri++%2?" ":""}`)},Bi=(t,e,o="")=>{var n,i;const s={bubbles:!0,composed:!0,data:e,inputType:o},a=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(n=Object.getOwnPropertyDescriptor(a,"value"))==null?void 0:n.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},Qt=!1,Jt=t=>(t?.type==="mouseup"&&(Qt=!1),t?.type==="mousedown"&&(Qt=!0,J(document,"mouseup",Jt,{once:!0})),Qt),Zt="disabled",Z="selected",Ui=class extends Po{static get observedAttributes(){return[Zt,Z]}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[Z]}set defaultSelected(t){this[Z]=t}get disabled(){return m(this,Zt)!==null}set disabled(t){m(this,Zt,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,Z)!==null}set selected(t){m(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=m(this,"value"))!=null?t:this.text}set value(t){m(this,"value",t)}};Ho.define("u-option",Ui);var Bo,Uo=0,qi=jt||yt,qo="click,focusout,input,keydown,mousedown,mouseup",Fo="focus,focusin,blur,focusout",St={singular:"%d hit",plural:"%d hits"},Vo=class extends Po{constructor(){super(),this._texts=Mi({},St),this._value="",Ni(this,`${Pi}
8
+ ::slotted(data:focus) { ${Hi} }`))}static get observedAttributes(){return Object.keys(Rt).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=Vi(this),Lt(this,an,this,!0),le(this,{attributeFilter:["value","id"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(Dt,0,this),setTimeout(Pt,0,this)}attributeChangedCallback(t,e,n){const o=t.split("data-sr-")[1];Rt[o]&&(this._texts[o]=n||Rt[o])}disconnectedCallback(){le(this,!1),Fi(this,an,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;me(this)||(t.type==="beforeinput"&&(this._value=e?.value||""),t.type==="blur"&&Gi(this),t.type==="click"&&Ji(this,t),t.type==="focus"&&Xi(this,t),t.type==="input"&&Zi(this,t),t.type==="keydown"&&ts(this,t),t.type==="mousedown"&&de(t),t.type==="mutation"&&Dt(this,t))}get multiple(){var t;return((t=y(this,"data-multiple"))!=null?t:Mt)!==Mt}set multiple(t){y(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=y(this,"data-creatable"))!=null?t:Mt)!==Mt}set creatable(t){y(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)}},Y=t=>{var e;return((e=t?.textContent)==null?void 0:e.trim())||""},pe=t=>t instanceof HTMLDataElement,me=({control:t})=>t?.disabled||t?.readOnly||!1,Dt=(t,e)=>{var n,o;const{_focus:i,_texts:s,items:r,control:a,list:c,multiple:l}=t;let d=`${Y((n=a?.labels)==null?void 0:n[0])}${l?`, ${r.length?s.found.replace("%d",`${r.length}`):s.empty}`:""}`;const u=[];for(const{addedNodes:h,removedNodes:b}of e?.detail||[]){for(const v of h)pe(v)&&u.unshift(v);for(const v of b)pe(v)&&u.push(v)}const m=l?u.length===1:u[0]===i;if(i&&a&&m){const h=y(a,"aria-expanded"),b=y(a,"inputmode"),v=pe(i)?a:i,S=!u[0].isConnected;t._speak=`${s[S?"removed":"added"]} ${Y(u[0])}, `,(zi||i===a)&&ce(t._speak),a!==v&&(y(a,"aria-expanded",null),y(a,"inputmode","none"),d=" ",a.focus()),setTimeout(()=>{var E;y(a,"aria-expanded",h),y(a,"inputmode",S?"none":b),(E=v?.focus)==null||E.call(v),y(a,"inputmode",b),t._speak="",Ki?Lt(t,"blur",()=>Dt(t),ln):setTimeout(Dt,100,t)},100)}let f=0;const g=t.querySelector("select"),_=me(t)?"":`${s.remove}, `;for(const h of r){const b=g?.options[f],v=Y(h),S=h.value||v,E=`${t._speak}${v}, ${_}${++f} ${s.of} ${r.length}`;y(h,"role","button"),y(h,"value",S),y(h,"tabindex","-1"),y(h,"aria-label",E),b?Object.assign(b,{textContent:v,value:S}):g?.appendChild(new Option(v,S,!0,!0))}g&&y(g,"multiple",l?"":null);for(const h of[...g?.options||[]].slice(f))h.remove();!l&&f>1&&console.warn("u-combobox: Multiple <data> found in single mode."),c&&y(c,"aria-multiselectable",`${l}`),a&&y(a,"list",Wi(c)),a&&y(a,"aria-label",`${t._speak}${d}`);const w=Y(r[0]);w!==t._item&&Pt(t),t._item=w,cn(t),un(t),(o=le(t))==null||o.takeRecords()},cn=t=>{var e;t.clear&&y(t.clear,"role","button"),t.clear&&(t.clear.hidden=!((e=t.control)!=null&&e.value)||me(t))},un=t=>{var e;const{_speak:n,options:o=[],values:i}=t;for(const s of o){const r=(e=y(s,"value"))!=null?e:Y(s);y(s,"aria-label",n?`${n}${Y(s)}`:null),y(s,"selected",i.includes(r)?"":null)}},Pt=t=>{const{multiple:e,control:n,items:o}=t,i=Y(o[0]);!e&&n&&i!==n.value&&rn(n,i,i?"insertText":"deleteContent")},he=(t,e=!0)=>{var n;const{_texts:o,options:i=[],creatable:s,control:r,items:a,multiple:c}=t,l=((n=r?.value)==null?void 0:n.trim())||"",d=l.toLowerCase()||null;let u=[...i].find(f=>(y(f,"label")||Y(f)).trim().toLowerCase()===d);const m={bubbles:!0,cancelable:!0,detail:u};if(t.dispatchEvent(new CustomEvent("comboboxbeforematch",m))||(u=[...i].find(f=>f.selected)),e)return un(t),u?ct(t,u,!1):s&&l?ct(t,{value:l},!1):(!c&&!l&&a[0]?ct(t,a[0]):Pt(t),ce(o.invalid));for(const f of i)f.selected=f===u},ct=(t,e,n=!0)=>{const{control:o,items:i,multiple:s}=t,r=Ot("data",e.label||e.value,{value:e.value}),a=[...i].find(d=>d.value===e.value),c={bubbles:!0,cancelable:!0,detail:a||r};if(a&&!n)return Pt(t);if(t.dispatchEvent(new CustomEvent("comboboxbeforeselect",c))){if(!s)for(const d of[...i])d.remove();a?a.remove():o?.insertAdjacentElement("beforebegin",r),t.dispatchEvent(new CustomEvent("comboboxafterselect",c))}},Xi=(t,{target:e})=>{e instanceof HTMLElement&&(t._focus=e),ce()},Gi=t=>de()||setTimeout(Qi,0,t),Qi=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(t.multiple||he(t),t._focus=void 0)},Ji=(t,e)=>{const{clientX:n,clientY:o,target:i}=e,{clear:s,control:r,items:a}=t;if(s?.contains(i))return r&&rn(r,"","deleteContentBackward"),r?.focus();for(const c of a){const{top:l,right:d,bottom:u,left:m}=c.getBoundingClientRect();if(c.contains(i))return ct(t,c);if(o>=l&&o<=u&&n>=m&&n<=d)return c.focus()}i===t&&r?.focus()},Zi=(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 c of o)if(c.value&&c.value===r)return ct(t,c,s)}else s||he(t,!1);cn(t)},ts=(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:c}=e,l=i&&i===c,d=l&&i?.selectionEnd;let u=l?s.length:[...s].indexOf(c);if(l&&r==="Tab"&&o&&!o.hidden&&(e.preventDefault(),o.tabIndex=-1,o.focus(),Lt(o,"blur",()=>y(o,"tabindex",null),ln)),!(!l&&Ui(e)||u===-1)){if(r==="ArrowRight"&&!l)u+=1;else if(r==="ArrowLeft"&&!d)u-=1;else if(r==="Enter"&&l){const m=y(i,"form");return y(i,"form","#"),requestAnimationFrame(()=>y(i,"form",m)),he(t)}else if((r==="Backspace"||r==="Delete")&&!d){if(e.preventDefault(),!a&&s[u])return ct(t,s[u]);l&&(u-=1)}else return l||i?.focus();e.preventDefault(),(n=s[Math.max(0,u)]||i)==null||n.focus()}};ji.define("u-combobox",fe);var ge=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",es=ge&&/android/i.test(navigator.userAgent),dn;ge&&/^Mac/i.test(((dn=navigator.userAgentData)==null?void 0:dn.platform)||navigator.platform);var ns=`${es?"data":"aria"}-labelledby`,ve=":host(:not([hidden])) { display: block }",Nt=typeof HTMLElement>"u"?class{}:HTMLElement;function O(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 fn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},os=(t,...e)=>fn("add",t,e),is=(t,...e)=>fn("remove",t,e),Ht=(t,e)=>t.attachShadow({mode:"open"}).append(gn("slot"),gn("style",e)),Bt=new WeakMap,pn=(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)}},ss=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},mn=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},rs=0,hn=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++rs).toString(32)}`),t.id):"",gn=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},Ft={define:(t,e)=>!ge||window.customElements.get(t)||window.customElements.define(t,e)},Ut="aria-controls",ut="aria-selected",vn=class extends Nt{constructor(){super(),Ht(this,ve)}get tabList(){return Vt("u-tablist",this)[0]||null}get selectedIndex(){return qt(this.tabs)}set selectedIndex(t){we(this.tabs[t])}get tabs(){return Vt("u-tab",this)}get panels(){return Vt("u-tabpanel",this)}},bn=class extends Nt{constructor(){super(),Ht(this,ve)}connectedCallback(){O(this,"role","tablist"),os(this,"click,keydown",this),pn(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){is(this,"click,keydown",this),pn(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s?.setAttribute(ut,"true")}const{key:e}=t,n=[...this.tabs],o=n.findIndex(s=>s.contains(t.target));let i=o;if(!(t.defaultPrevented||o===-1)&&(t.type==="click"&&we(n[o]),t.type==="keydown"&&!ss(t))){if(e==="ArrowDown"||e==="ArrowRight")i=(o+1)%n.length;else if(e==="ArrowUp"||e==="ArrowLeft")i=(o||n.length)-1;else if(e==="End")i=n.length-1;else if(e==="Home")i=0;else if(e==="Tab")i=qt(n);else return;setTimeout(()=>{n[o].tabIndex=-1,n[i].tabIndex=0}),e!=="Tab"&&(t.preventDefault(),n[i].focus())}}get tabsElement(){return this.closest("u-tabs")}get tabs(){return this.querySelectorAll("u-tab")}get selectedIndex(){return qt(this.tabs)}set selectedIndex(t){we(this.tabs[t])}},be=!1,_n=class extends Nt{static get observedAttributes(){return["id",ut,Ut]}constructor(){super(),Ht(this,":host(:not([hidden])) { cursor: pointer; display: inline-block }")}connectedCallback(){O(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!be&&this.selected&&this.tabList){be=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=Vt("u-tabpanel",this.tabsElement||this),n=_e(this,e[t.indexOf(this)]);n&&O(n,ns,hn(this)),t.forEach((o,i)=>{const s=_e(o,e[i]);o.tabIndex=o===this?0:-1,O(o,ut,`${o===this}`),s&&(s.hidden=s!==n),s&&O(o,Ut,s.id)}),be=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return t?.nodeName==="U-TABLIST"?t:null}get selected(){return O(this,ut)==="true"}set selected(t){O(this,ut,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return _e(this)}},wn=class extends Nt{static get observedAttributes(){return["hidden"]}constructor(){super(),Ht(this,ve)}connectedCallback(){O(this,"role","tabpanel"),this.hidden=qt(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){this.hidden||as(this.firstChild)?O(this,"tabindex",null):this.tabIndex=0}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${Ut}="${this.id}"]`;return mn(this).querySelectorAll(t)}},Vt=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),_e=(t,e)=>{const n=O(t,Ut)||hn(e),o=mn(t).getElementById(n);return o?.nodeName==="U-TABPANEL"?o:null},qt=t=>[...t].findIndex(e=>O(e,ut)==="true"),we=t=>t&&O(t,"aria-selected","true"),as=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');Ft.define("u-tabs",vn),Ft.define("u-tablist",bn),Ft.define("u-tab",_n),Ft.define("u-tabpanel",wn);const ls="2.1.3",yn="_alert_1run0_1 _ds-alert_wy3tx_1",xn="_app_1run0_1",En="_sticky_1run0_1",Sn="_avatar_1run0_1 _ds-avatar_wy3tx_1",Tn="_badge_1run0_1",Cn="_breadcrumbs_1run0_1 _ds-breadcrumbs_wy3tx_1",$n="_button_1run0_1 _ds-button_wy3tx_1",An="_card_1run0_1",kn="_group_1run0_1",Ln="_chip_1run0_1 _ds-chip_wy3tx_1",In="_details_1run0_1 _ds-details_wy3tx_1",On="_dialog_1run0_1 _ds-dialog_wy3tx_1",Mn="__drawer_1run0_1",Rn="_divider_1run0_1",Dn="_errorsummary_1run0_1 _ds-error-summary_wy3tx_1",Pn="__errorsummary_1run0_1",Nn="_field_1run0_1 _ds-field_wy3tx_1",Hn="__datalist_1run0_1",Bn="_affixes_1run0_1 _ds-field-affixes_wy3tx_1",Fn="_fieldset_1run0_1 _ds-fieldset_wy3tx_1",Un="_heading_1run0_1 _ds-heading_wy3tx_1",Vn="_ingress_1run0_1",qn="_muted_1run0_1",Wn="_info_1run0_1",jn="_prose_1run0_1",Yn="_helptext_1run0_1 _ds-focus_wy3tx_1",Kn="_input_1run0_1 _ds-input_wy3tx_1",zn="_grid_1run0_1",Xn="_flex_1run0_1",Gn="_link_1run0_1",Qn="_logo_1run0_1",Jn="_pagination_1run0_1 _ds-pagination_wy3tx_1",Zn="_popover_1run0_1",to="_progress_1run0_1",eo="__indeterminate_1run0_1",no="_skeleton_1run0_1 _ds-skeleton_wy3tx_1",oo="__skeleton_1run0_1",io="_spinner_1run0_1",so="_steps_1run0_1",ro="_table_1run0_1 _ds-table_wy3tx_1",ao="__scrollShadow_1run0_1",lo="_tabs_1run0_1 _ds-tabs_wy3tx_1",co="__scrollMask_1run0_1",uo="_tag_1run0_1 _ds-tag_wy3tx_1",fo="_togglegroup_1run0_1",po="__tooltip_1run0_1",mo="_validation_1run0_1 _ds-validation-message_wy3tx_1",ho="_body_1run0_153",go="__checked_1run0_1",T={alert:yn,app:xn,sticky:En,avatar:Sn,badge:Tn,breadcrumbs:Cn,button:$n,card:An,group:kn,chip:Ln,details:In,dialog:On,_drawer:Mn,divider:Rn,errorsummary:Dn,_errorsummary:Pn,field:Nn,_datalist:Hn,affixes:Bn,fieldset:Fn,heading:Un,ingress:Vn,muted:qn,info:Wn,prose:jn,helptext:Yn,input:Kn,grid:zn,flex:Xn,link:Gn,logo:Qn,pagination:Jn,popover:Zn,progress:to,_indeterminate:eo,skeleton:no,_skeleton:oo,spinner:io,steps:so,table:ro,_scrollShadow:ao,tabs:lo,_scrollMask:co,tag:uo,togglegroup:fo,_tooltip:po,validation:mo,body:ho,_checked:go},cs=Object.freeze(Object.defineProperty({__proto__:null,_checked:go,_datalist:Hn,_drawer:Mn,_errorsummary:Pn,_indeterminate:eo,_scrollMask:co,_scrollShadow:ao,_skeleton:oo,_tooltip:po,affixes:Bn,alert:yn,app:xn,avatar:Sn,badge:Tn,body:ho,breadcrumbs:Cn,button:$n,card:An,chip:Ln,default:T,details:In,dialog:On,divider:Rn,errorsummary:Dn,field:Nn,fieldset:Fn,flex:Xn,grid:zn,group:kn,heading:Un,helptext:Yn,info:Wn,ingress:Vn,input:Kn,link:Gn,logo:Qn,muted:qn,pagination:Jn,popover:Zn,progress:to,prose:jn,skeleton:no,spinner:io,steps:so,sticky:En,table:ro,tabs:lo,tag:uo,togglegroup:fo,validation:mo},Symbol.toStringTag,{value:"Module"})),dt=Math.min,k=Math.max,Wt=Math.round,jt=Math.floor,F=t=>({x:t,y:t}),us={left:"right",right:"left",bottom:"top",top:"bottom"},ds={start:"end",end:"start"};function vo(t,e,n){return k(t,dt(e,n))}function Yt(t,e){return typeof t=="function"?t(e):t}function Z(t){return t.split("-")[0]}function Kt(t){return t.split("-")[1]}function bo(t){return t==="x"?"y":"x"}function _o(t){return t==="y"?"height":"width"}const fs=new Set(["top","bottom"]);function K(t){return fs.has(Z(t))?"y":"x"}function wo(t){return bo(K(t))}function ps(t,e,n){n===void 0&&(n=!1);const o=Kt(t),i=wo(t),s=_o(i);let r=i==="x"?o===(n?"end":"start")?"right":"left":o==="start"?"bottom":"top";return e.reference[s]>e.floating[s]&&(r=zt(r)),[r,zt(r)]}function ms(t){const e=zt(t);return[ye(t),e,ye(e)]}function ye(t){return t.replace(/start|end/g,e=>ds[e])}const yo=["left","right"],xo=["right","left"],hs=["top","bottom"],gs=["bottom","top"];function vs(t,e,n){switch(t){case"top":case"bottom":return n?e?xo:yo:e?yo:xo;case"left":case"right":return e?hs:gs;default:return[]}}function bs(t,e,n,o){const i=Kt(t);let s=vs(Z(t),n==="start",o);return i&&(s=s.map(r=>r+"-"+i),e&&(s=s.concat(s.map(ye)))),s}function zt(t){return t.replace(/left|right|bottom|top/g,e=>us[e])}function _s(t){return{top:0,right:0,bottom:0,left:0,...t}}function ws(t){return typeof t!="number"?_s(t):{top:t,right:t,bottom:t,left:t}}function Xt(t){const{x:e,y:n,width:o,height:i}=t;return{width:o,height:i,top:n,left:e,right:e+o,bottom:n+i,x:e,y:n}}function Eo(t,e,n){let{reference:o,floating:i}=t;const s=K(e),r=wo(e),a=_o(r),c=Z(e),l=s==="y",d=o.x+o.width/2-i.width/2,u=o.y+o.height/2-i.height/2,m=o[a]/2-i[a]/2;let f;switch(c){case"top":f={x:d,y:o.y-i.height};break;case"bottom":f={x:d,y:o.y+o.height};break;case"right":f={x:o.x+o.width,y:u};break;case"left":f={x:o.x-i.width,y:u};break;default:f={x:o.x,y:o.y}}switch(Kt(e)){case"start":f[r]-=m*(n&&l?-1:1);break;case"end":f[r]+=m*(n&&l?-1:1);break}return f}const ys=async(t,e,n)=>{const{placement:o="bottom",strategy:i="absolute",middleware:s=[],platform:r}=n,a=s.filter(Boolean),c=await(r.isRTL==null?void 0:r.isRTL(e));let l=await r.getElementRects({reference:t,floating:e,strategy:i}),{x:d,y:u}=Eo(l,o,c),m=o,f={},g=0;for(let _=0;_<a.length;_++){const{name:w,fn:h}=a[_],{x:b,y:v,data:S,reset:E}=await h({x:d,y:u,initialPlacement:o,placement:m,strategy:i,middlewareData:f,rects:l,platform:r,elements:{reference:t,floating:e}});d=b??d,u=v??u,f={...f,[w]:{...f[w],...S}},E&&g<=50&&(g++,typeof E=="object"&&(E.placement&&(m=E.placement),E.rects&&(l=E.rects===!0?await r.getElementRects({reference:t,floating:e,strategy:i}):E.rects),{x:d,y:u}=Eo(l,m,c)),_=-1)}return{x:d,y:u,placement:m,strategy:i,middlewareData:f}};async function xe(t,e){var n;e===void 0&&(e={});const{x:o,y:i,platform:s,rects:r,elements:a,strategy:c}=t,{boundary:l="clippingAncestors",rootBoundary:d="viewport",elementContext:u="floating",altBoundary:m=!1,padding:f=0}=Yt(e,t),g=ws(f),w=a[m?u==="floating"?"reference":"floating":u],h=Xt(await s.getClippingRect({element:(n=await(s.isElement==null?void 0:s.isElement(w)))==null||n?w:w.contextElement||await(s.getDocumentElement==null?void 0:s.getDocumentElement(a.floating)),boundary:l,rootBoundary:d,strategy:c})),b=u==="floating"?{x:o,y:i,width:r.floating.width,height:r.floating.height}:r.reference,v=await(s.getOffsetParent==null?void 0:s.getOffsetParent(a.floating)),S=await(s.isElement==null?void 0:s.isElement(v))?await(s.getScale==null?void 0:s.getScale(v))||{x:1,y:1}:{x:1,y:1},E=Xt(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:a,rect:b,offsetParent:v,strategy:c}):b);return{top:(h.top-E.top+g.top)/S.y,bottom:(E.bottom-h.bottom+g.bottom)/S.y,left:(h.left-E.left+g.left)/S.x,right:(E.right-h.right+g.right)/S.x}}const xs=function(t){return t===void 0&&(t={}),{name:"flip",options:t,async fn(e){var n,o;const{placement:i,middlewareData:s,rects:r,initialPlacement:a,platform:c,elements:l}=e,{mainAxis:d=!0,crossAxis:u=!0,fallbackPlacements:m,fallbackStrategy:f="bestFit",fallbackAxisSideDirection:g="none",flipAlignment:_=!0,...w}=Yt(t,e);if((n=s.arrow)!=null&&n.alignmentOffset)return{};const h=Z(i),b=K(a),v=Z(a)===a,S=await(c.isRTL==null?void 0:c.isRTL(l.floating)),E=m||(v||!_?[zt(a)]:ms(a)),it=g!=="none";!m&&it&&E.push(...bs(a,_,g,S));const q=[a,...E],st=await xe(e,w),rt=[];let j=((o=s.flip)==null?void 0:o.overflows)||[];if(d&&rt.push(st[h]),u){const at=ps(i,r,S);rt.push(st[at[0]],st[at[1]])}if(j=[...j,{placement:i,overflows:rt}],!rt.every(at=>at<=0)){var Ct,$t;const at=(((Ct=s.flip)==null?void 0:Ct.index)||0)+1,Ze=q[at];if(Ze&&(!(u==="alignment"?b!==K(Ze):!1)||j.every(B=>K(B.placement)===b?B.overflows[0]>0:!0)))return{data:{index:at,overflows:j},reset:{placement:Ze}};let kt=($t=j.filter(lt=>lt.overflows[0]<=0).sort((lt,B)=>lt.overflows[1]-B.overflows[1])[0])==null?void 0:$t.placement;if(!kt)switch(f){case"bestFit":{var At;const lt=(At=j.filter(B=>{if(it){const Q=K(B.placement);return Q===b||Q==="y"}return!0}).map(B=>[B.placement,B.overflows.filter(Q=>Q>0).reduce((Q,ya)=>Q+ya,0)]).sort((B,Q)=>B[1]-Q[1])[0])==null?void 0:At[0];lt&&(kt=lt);break}case"initialPlacement":kt=a;break}if(i!==kt)return{reset:{placement:kt}}}return{}}}},Es=function(t){return t===void 0&&(t={}),{name:"shift",options:t,async fn(e){const{x:n,y:o,placement:i}=e,{mainAxis:s=!0,crossAxis:r=!1,limiter:a={fn:w=>{let{x:h,y:b}=w;return{x:h,y:b}}},...c}=Yt(t,e),l={x:n,y:o},d=await xe(e,c),u=K(Z(i)),m=bo(u);let f=l[m],g=l[u];if(s){const w=m==="y"?"top":"left",h=m==="y"?"bottom":"right",b=f+d[w],v=f-d[h];f=vo(b,f,v)}if(r){const w=u==="y"?"top":"left",h=u==="y"?"bottom":"right",b=g+d[w],v=g-d[h];g=vo(b,g,v)}const _=a.fn({...e,[m]:f,[u]:g});return{..._,data:{x:_.x-n,y:_.y-o,enabled:{[m]:s,[u]:r}}}}}},Ss=function(t){return t===void 0&&(t={}),{name:"size",options:t,async fn(e){var n,o;const{placement:i,rects:s,platform:r,elements:a}=e,{apply:c=()=>{},...l}=Yt(t,e),d=await xe(e,l),u=Z(i),m=Kt(i),f=K(i)==="y",{width:g,height:_}=s.floating;let w,h;u==="top"||u==="bottom"?(w=u,h=m===(await(r.isRTL==null?void 0:r.isRTL(a.floating))?"start":"end")?"left":"right"):(h=u,w=m==="end"?"top":"bottom");const b=_-d.top-d.bottom,v=g-d.left-d.right,S=dt(_-d[w],b),E=dt(g-d[h],v),it=!e.middlewareData.shift;let q=S,st=E;if((n=e.middlewareData.shift)!=null&&n.enabled.x&&(st=v),(o=e.middlewareData.shift)!=null&&o.enabled.y&&(q=b),it&&!m){const j=k(d.left,0),Ct=k(d.right,0),$t=k(d.top,0),At=k(d.bottom,0);f?st=g-2*(j!==0||Ct!==0?j+Ct:k(d.left,d.right)):q=_-2*($t!==0||At!==0?$t+At:k(d.top,d.bottom))}await c({...e,availableWidth:st,availableHeight:q});const rt=await r.getDimensions(a.floating);return g!==rt.width||_!==rt.height?{reset:{rects:!0}}:{}}}};function Gt(){return typeof window<"u"}function ft(t){return So(t)?(t.nodeName||"").toLowerCase():"#document"}function L(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function U(t){var e;return(e=(So(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function So(t){return Gt()?t instanceof Node||t instanceof L(t).Node:!1}function D(t){return Gt()?t instanceof Element||t instanceof L(t).Element:!1}function V(t){return Gt()?t instanceof HTMLElement||t instanceof L(t).HTMLElement:!1}function To(t){return!Gt()||typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof L(t).ShadowRoot}const Ts=new Set(["inline","contents"]);function bt(t){const{overflow:e,overflowX:n,overflowY:o,display:i}=P(t);return/auto|scroll|overlay|hidden|clip/.test(e+o+n)&&!Ts.has(i)}const Cs=new Set(["table","td","th"]);function $s(t){return Cs.has(ft(t))}const As=[":popover-open",":modal"];function Qt(t){return As.some(e=>{try{return t.matches(e)}catch{return!1}})}const ks=["transform","translate","scale","rotate","perspective"],Ls=["transform","translate","scale","rotate","perspective","filter"],Is=["paint","layout","strict","content"];function Ee(t){const e=Se(),n=D(t)?P(t):t;return ks.some(o=>n[o]?n[o]!=="none":!1)||(n.containerType?n.containerType!=="normal":!1)||!e&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!e&&(n.filter?n.filter!=="none":!1)||Ls.some(o=>(n.willChange||"").includes(o))||Is.some(o=>(n.contain||"").includes(o))}function Os(t){let e=z(t);for(;V(e)&&!pt(e);){if(Ee(e))return e;if(Qt(e))return null;e=z(e)}return null}function Se(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const Ms=new Set(["html","body","#document"]);function pt(t){return Ms.has(ft(t))}function P(t){return L(t).getComputedStyle(t)}function Jt(t){return D(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function z(t){if(ft(t)==="html")return t;const e=t.assignedSlot||t.parentNode||To(t)&&t.host||U(t);return To(e)?e.host:e}function Co(t){const e=z(t);return pt(e)?t.ownerDocument?t.ownerDocument.body:t.body:V(e)&&bt(e)?e:Co(e)}function _t(t,e,n){var o;e===void 0&&(e=[]),n===void 0&&(n=!0);const i=Co(t),s=i===((o=t.ownerDocument)==null?void 0:o.body),r=L(i);if(s){const a=Te(r);return e.concat(r,r.visualViewport||[],bt(i)?i:[],a&&n?_t(a):[])}return e.concat(i,_t(i,[],n))}function Te(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}function $o(t){const e=P(t);let n=parseFloat(e.width)||0,o=parseFloat(e.height)||0;const i=V(t),s=i?t.offsetWidth:n,r=i?t.offsetHeight:o,a=Wt(n)!==s||Wt(o)!==r;return a&&(n=s,o=r),{width:n,height:o,$:a}}function Ce(t){return D(t)?t:t.contextElement}function mt(t){const e=Ce(t);if(!V(e))return F(1);const n=e.getBoundingClientRect(),{width:o,height:i,$:s}=$o(e);let r=(s?Wt(n.width):n.width)/o,a=(s?Wt(n.height):n.height)/i;return(!r||!Number.isFinite(r))&&(r=1),(!a||!Number.isFinite(a))&&(a=1),{x:r,y:a}}const Rs=F(0);function Ao(t){const e=L(t);return!Se()||!e.visualViewport?Rs:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function Ds(t,e,n){return e===void 0&&(e=!1),!n||e&&n!==L(t)?!1:e}function tt(t,e,n,o){e===void 0&&(e=!1),n===void 0&&(n=!1);const i=t.getBoundingClientRect(),s=Ce(t);let r=F(1);e&&(o?D(o)&&(r=mt(o)):r=mt(t));const a=Ds(s,n,o)?Ao(s):F(0);let c=(i.left+a.x)/r.x,l=(i.top+a.y)/r.y,d=i.width/r.x,u=i.height/r.y;if(s){const m=L(s),f=o&&D(o)?L(o):o;let g=m,_=Te(g);for(;_&&o&&f!==g;){const w=mt(_),h=_.getBoundingClientRect(),b=P(_),v=h.left+(_.clientLeft+parseFloat(b.paddingLeft))*w.x,S=h.top+(_.clientTop+parseFloat(b.paddingTop))*w.y;c*=w.x,l*=w.y,d*=w.x,u*=w.y,c+=v,l+=S,g=L(_),_=Te(g)}}return Xt({width:d,height:u,x:c,y:l})}function $e(t,e){const n=Jt(t).scrollLeft;return e?e.left+n:tt(U(t)).left+n}function ko(t,e,n){n===void 0&&(n=!1);const o=t.getBoundingClientRect(),i=o.left+e.scrollLeft-(n?0:$e(t,o)),s=o.top+e.scrollTop;return{x:i,y:s}}function Ps(t){let{elements:e,rect:n,offsetParent:o,strategy:i}=t;const s=i==="fixed",r=U(o),a=e?Qt(e.floating):!1;if(o===r||a&&s)return n;let c={scrollLeft:0,scrollTop:0},l=F(1);const d=F(0),u=V(o);if((u||!u&&!s)&&((ft(o)!=="body"||bt(r))&&(c=Jt(o)),V(o))){const f=tt(o);l=mt(o),d.x=f.x+o.clientLeft,d.y=f.y+o.clientTop}const m=r&&!u&&!s?ko(r,c,!0):F(0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+d.x+m.x,y:n.y*l.y-c.scrollTop*l.y+d.y+m.y}}function Ns(t){return Array.from(t.getClientRects())}function Hs(t){const e=U(t),n=Jt(t),o=t.ownerDocument.body,i=k(e.scrollWidth,e.clientWidth,o.scrollWidth,o.clientWidth),s=k(e.scrollHeight,e.clientHeight,o.scrollHeight,o.clientHeight);let r=-n.scrollLeft+$e(t);const a=-n.scrollTop;return P(o).direction==="rtl"&&(r+=k(e.clientWidth,o.clientWidth)-i),{width:i,height:s,x:r,y:a}}function Bs(t,e){const n=L(t),o=U(t),i=n.visualViewport;let s=o.clientWidth,r=o.clientHeight,a=0,c=0;if(i){s=i.width,r=i.height;const l=Se();(!l||l&&e==="fixed")&&(a=i.offsetLeft,c=i.offsetTop)}return{width:s,height:r,x:a,y:c}}const Fs=new Set(["absolute","fixed"]);function Us(t,e){const n=tt(t,!0,e==="fixed"),o=n.top+t.clientTop,i=n.left+t.clientLeft,s=V(t)?mt(t):F(1),r=t.clientWidth*s.x,a=t.clientHeight*s.y,c=i*s.x,l=o*s.y;return{width:r,height:a,x:c,y:l}}function Lo(t,e,n){let o;if(e==="viewport")o=Bs(t,n);else if(e==="document")o=Hs(U(t));else if(D(e))o=Us(e,n);else{const i=Ao(t);o={x:e.x-i.x,y:e.y-i.y,width:e.width,height:e.height}}return Xt(o)}function Io(t,e){const n=z(t);return n===e||!D(n)||pt(n)?!1:P(n).position==="fixed"||Io(n,e)}function Vs(t,e){const n=e.get(t);if(n)return n;let o=_t(t,[],!1).filter(a=>D(a)&&ft(a)!=="body"),i=null;const s=P(t).position==="fixed";let r=s?z(t):t;for(;D(r)&&!pt(r);){const a=P(r),c=Ee(r);!c&&a.position==="fixed"&&(i=null),(s?!c&&!i:!c&&a.position==="static"&&!!i&&Fs.has(i.position)||bt(r)&&!c&&Io(t,r))?o=o.filter(d=>d!==r):i=a,r=z(r)}return e.set(t,o),o}function qs(t){let{element:e,boundary:n,rootBoundary:o,strategy:i}=t;const r=[...n==="clippingAncestors"?Qt(e)?[]:Vs(e,this._c):[].concat(n),o],a=r[0],c=r.reduce((l,d)=>{const u=Lo(e,d,i);return l.top=k(u.top,l.top),l.right=dt(u.right,l.right),l.bottom=dt(u.bottom,l.bottom),l.left=k(u.left,l.left),l},Lo(e,a,i));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function Ws(t){const{width:e,height:n}=$o(t);return{width:e,height:n}}function js(t,e,n){const o=V(e),i=U(e),s=n==="fixed",r=tt(t,!0,s,e);let a={scrollLeft:0,scrollTop:0};const c=F(0);function l(){c.x=$e(i)}if(o||!o&&!s)if((ft(e)!=="body"||bt(i))&&(a=Jt(e)),o){const f=tt(e,!0,s,e);c.x=f.x+e.clientLeft,c.y=f.y+e.clientTop}else i&&l();s&&!o&&i&&l();const d=i&&!o&&!s?ko(i,a):F(0),u=r.left+a.scrollLeft-c.x-d.x,m=r.top+a.scrollTop-c.y-d.y;return{x:u,y:m,width:r.width,height:r.height}}function Ae(t){return P(t).position==="static"}function Oo(t,e){if(!V(t)||P(t).position==="fixed")return null;if(e)return e(t);let n=t.offsetParent;return U(t)===n&&(n=n.ownerDocument.body),n}function Mo(t,e){const n=L(t);if(Qt(t))return n;if(!V(t)){let i=z(t);for(;i&&!pt(i);){if(D(i)&&!Ae(i))return i;i=z(i)}return n}let o=Oo(t,e);for(;o&&$s(o)&&Ae(o);)o=Oo(o,e);return o&&pt(o)&&Ae(o)&&!Ee(o)?n:o||Os(t)||n}const Ys=async function(t){const e=this.getOffsetParent||Mo,n=this.getDimensions,o=await n(t.floating);return{reference:js(t.reference,await e(t.floating),t.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function Ks(t){return P(t).direction==="rtl"}const zs={convertOffsetParentRelativeRectToViewportRelativeRect:Ps,getDocumentElement:U,getClippingRect:qs,getOffsetParent:Mo,getElementRects:Ys,getClientRects:Ns,getDimensions:Ws,getScale:mt,isElement:D,isRTL:Ks};function Ro(t,e){return t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height}function Xs(t,e){let n=null,o;const i=U(t);function s(){var a;clearTimeout(o),(a=n)==null||a.disconnect(),n=null}function r(a,c){a===void 0&&(a=!1),c===void 0&&(c=1),s();const l=t.getBoundingClientRect(),{left:d,top:u,width:m,height:f}=l;if(a||e(),!m||!f)return;const g=jt(u),_=jt(i.clientWidth-(d+m)),w=jt(i.clientHeight-(u+f)),h=jt(d),v={rootMargin:-g+"px "+-_+"px "+-w+"px "+-h+"px",threshold:k(0,dt(1,c))||1};let S=!0;function E(it){const q=it[0].intersectionRatio;if(q!==c){if(!S)return r();q?r(!1,q):o=setTimeout(()=>{r(!1,1e-7)},1e3)}q===1&&!Ro(l,t.getBoundingClientRect())&&r(),S=!1}try{n=new IntersectionObserver(E,{...v,root:i.ownerDocument})}catch{n=new IntersectionObserver(E,v)}n.observe(t)}return r(!0),s}function Gs(t,e,n,o){o===void 0&&(o={});const{ancestorScroll:i=!0,ancestorResize:s=!0,elementResize:r=typeof ResizeObserver=="function",layoutShift:a=typeof IntersectionObserver=="function",animationFrame:c=!1}=o,l=Ce(t),d=i||s?[...l?_t(l):[],..._t(e)]:[];d.forEach(h=>{i&&h.addEventListener("scroll",n,{passive:!0}),s&&h.addEventListener("resize",n)});const u=l&&a?Xs(l,n):null;let m=-1,f=null;r&&(f=new ResizeObserver(h=>{let[b]=h;b&&b.target===l&&f&&(f.unobserve(e),cancelAnimationFrame(m),m=requestAnimationFrame(()=>{var v;(v=f)==null||v.observe(e)})),n()}),l&&!c&&f.observe(l),f.observe(e));let g,_=c?tt(t):null;c&&w();function w(){const h=tt(t);_&&!Ro(_,h)&&n(),_=h,g=requestAnimationFrame(w)}return n(),()=>{var h;d.forEach(b=>{i&&b.removeEventListener("scroll",n),s&&b.removeEventListener("resize",n)}),u?.(),(h=f)==null||h.disconnect(),f=null,c&&cancelAnimationFrame(g)}}const ke=Es,Le=xs,Qs=Ss,Js=(t,e,n)=>{const o=new Map,i={platform:zs,...n},s={...i.platform,_c:o};return ys(t,e,{...i,platform:s})},M={capture:!0,passive:!0},Zt=typeof window<"u"&&typeof document<"u";function Zs(t,e){let n;return(...o)=>{clearTimeout(n),n=setTimeout(()=>t(...o),e)}}function p(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 tr=0;const er=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function te(t){return t.id||(t.id=`${er}${++tr}`),t.id}const Do=(t,e,[...n])=>{for(const o of n[0].split(","))n[0]=o,e[`${t}EventListener`](...n)},C=(t,...e)=>{wt&&(t===window||t===document)&&wt.push(()=>nr(t,...e)),Do("add",t,e)},nr=(t,...e)=>Do("remove",t,e);let wt=null;const R=t=>{if(!Zt)return;window._mtdsUnbindEvents||(window._mtdsUnbindEvents=new Map);const e=()=>requestAnimationFrame(()=>{const n=String(t).replace(/(\n|\s)/g,"");window._mtdsUnbindEvents?.get(n)?.forEach(o=>{o()}),wt=[],t(),window._mtdsUnbindEvents?.set(n,wt?.slice(0)),wt=null});document.readyState==="complete"?e():C(window,"load",e)},Ie=new WeakMap;function et(t,e,n){Ie.get(t)?.(),Ie.delete(t),e&&Ie.set(t,Gs(e,t,()=>{if(!t.isConnected||!e.isConnected||t.hidden)return et(t,!1);Js(e,t,n).then(({x:o,y:i})=>{t.style.left=`${o}px`,t.style.top=`${i}px`})}))}function Po(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 Oe=new WeakMap,ht=(t,e,n)=>{const o=t.getElementsByClassName(e),i=Oe.get(t)||[];i.length||(Oe.set(t,i),Po((s,r)=>{if(t.isConnected&&i?.length)for(const a of i)a();else r?.disconnect(),Oe.delete(t)}).observe(t,{attributeFilter:["class","hidden"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>n(o))},Me=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),or=`.${T.breadcrumbs.split(" ")[0]}`,ir=`.${T.chip.split(" ")[0]}`,sr=`.${T.helptext.split(" ")[0]}`,rr=`.${T.pagination.split(" ")[0]}`,ar='summary,u-summary,a,button,[role="tab"],[role="button"]',lr="click,toggle,submit,change",Re="mattilsynet.matomo.cloud";function No(t,e={}){if(Zt){if(window._paq||(window._paq=[],window._paq.push(["HeatmapSessionRecording::disable"]),window._paq.push(["enableLinkTracking"]),window._paq.push(["setTrackerUrl",`https://${Re}/matomo.php`])),window._mtm||(window._mtm=window._mtm||[],window._mtm.push({"mtm.startTime":Date.now(),event:"mtm.Start"})),t==="init"){window._mtdsTracking={enabled:window.location.hostname!=="localhost",...window._mtdsTracking,...e};const{enabled:n,matomoId:o,matomoTagManagerId:i}=window._mtdsTracking;if(o&&window._paq.push(["setSiteId",o]),n){const s=i?`https://cdn.matomo.cloud/${Re}/container_${i}.js`:`https://cdn.matomo.cloud/${Re}/matomo.js`;document.querySelector(`script[src="${s}"]`)||document.head.append(Object.assign(document.createElement("script"),{async:!0,src:s}))}}if(window._mtdsTracking?.enabled!==!1){if(window._mtdsTracking?.enabled==="debug")return console.info(`analytics("${t}", `,e,")");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];let a=location.href;window._paq.push([function(){a=this.getCurrentUrl()}]),window._paq.push(["setCustomUrl",a.split("#")[0]]),window._paq.push(r.filter(c=>c!==void 0)),window._paq.push(["setCustomUrl",a])}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 cr=t=>window._mtdsTracking?.enabled&&setTimeout(ur,0,t),ur=({type:t,target:e})=>{const n=t==="click"?e?.closest?.(ar):e;if(!(n instanceof Element)||p(n,"data-analytics")==="ignore")return;let o="click",i="Button",s=Ho(n)||pr(n)||p(n,"data-tooltip")||"";if(t==="submit")i="Form",o="submit",s=s||document.title;else if(t==="toggle"){if(!n.matches("dialog:modal"))return;i="Dialog",o="open"}else if(t==="change"){const r=p(n,"type"),a=r==="checkbox"||r==="radio"?n.closest("fieldset"):null;i="Form",o="change",s=Ho(a||n)||yt(a?.querySelector("legend"))||yt(n?.labels?.[0])}else if(p(n,"role")==="tab")i="Tab",o="navigate";else if(p(n,"popovertarget")){if(!dr(n)?.matches(":popover-open"))return;i=n.closest(sr)?"HelpText":"Popover",o="open"}else if(n.nodeName.endsWith("SUMMARY")){if(!n.parentElement.open)return;i="Details",o="open"}else if(p(n,"data-command")==="toggle-app-expanded"){const r=fr(n,"--mtds-tooltip-position")==="none";i="Sidebar",o=r?"expand":"minimize",s=r&&p(n,"data-tooltip")||yt(n)}else if(n.closest(or))i="Breadcrumbs",o="navigate";else if(n.closest(rr))i="Pagintation",o="navigate";else if(n.closest(ir))i="Chip",o=n.hasAttribute("data-removable")?"remove":"click";else if(n.closest("th[aria-sort]"))i="Table",o="sort";else if(n instanceof HTMLAnchorElement)i="Link",o=n.protocol==="mailto:"?"email":"navigate",n.hasAttribute("download")?o="download":n.hash&&n.href.startsWith(location.href.split("#")[0])&&(o="anchor");else if(n.hasAttribute("aria-expanded")){if(p(n,"aria-expanded")!=="true")return;i="Expand",o="open"}No("event",{category:p(n,"data-analytics-category")??i,action:p(n,"data-analytics-action")??o,name:p(n,"data-analytics-name")??s})},yt=t=>t?.textContent?.trim()||"",Ho=t=>t&&p(t,"aria-label")||"",dr=t=>document.getElementById(p(t,"popovertarget")||""),fr=(t,e)=>window.getComputedStyle(t).getPropertyValue(e)?.trim(),pr=t=>{const e=yt(t),n=yt(t.querySelector("h1,h2,h3,h4,h5,h6"));return e.startsWith(n)&&n||e.slice(0,100).trim()};R(()=>C(document,lr,cr,M)),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 Bo=T.app.split(" ")[0],mr=T.sticky.split(" ")[0],hr='[data-command="toggle-app-expanded"]',De=`.${Bo} > dialog,.${Bo} dialog ~ main`,Fo=t=>{document.startViewTransition?document.startViewTransition(t):t()},Uo=t=>Fo(()=>window.mtdsToggleAppExpanded?.(t));function gr({target:t,defaultPrevented:e}){const n=t?.closest?.("a");if(n?.closest("dialog")&&n?.closest(De))return Vo();if(e||!(t instanceof HTMLButtonElement)||!t.matches(hr))return;getComputedStyle(t).position==="sticky"?Uo():Fo(()=>{const i=document.querySelector(De);i?.setAttribute("data-closedby","any"),i?.showModal()})}function Vo(){document.querySelector(De)?.close()}let Pe=0,gt,W=0,$,Ne=0,ee=0,He=!1,Be=0,nt=0;function vr([t]){$=t,qo()}function qo(){if(!$?.isConnected)return;const t=window.scrollY,e=t<nt;nt=t,e!==gt&&(Pe=($.parentElement?.getBoundingClientRect().top||0)+nt,gt=e,Ne=$.offsetHeight,ee=$.getBoundingClientRect().top+nt,He=$.offsetHeight<=window.innerHeight,Be=window.innerHeight),!(W===-1&&He)&&(W!==-1&&(He||gt&&nt<=ee)?($.style.setProperty("--pos","sticky"),$.style.setProperty("--top","0px"),W=-1):W===-1&&!gt?($.style.setProperty("--pos","relative"),$.style.setProperty("--top",`${Math.max(0,nt-Pe)}px`),W=0):W!==1&&!gt&&nt+Be>=ee+Ne?($.style.setProperty("--pos","sticky"),$.style.setProperty("--top",`${Be-Ne}px`),W=1):W===1&&gt&&($.style.setProperty("--pos","relative"),$.style.setProperty("--top",`${ee-Pe}px`),W=0))}R(()=>{ht(document.documentElement,mr,vr),C(document,"click",gr,M),C(window,"resize",Zs(Vo,100),M),C(window,"scroll",qo,M)});const br=(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,c)=>c+i);return n>4&&i>1&&r.splice(0,2,1,0),n>3&&s<e&&r.splice(-2,2,0,e),r},_r=({current:t=1,total:e=10,show:n=7})=>({prev:t>1?t-1:0,next:t<e?t+1:0,pages:br(t,e,n).map((o,i)=>({current:o===t&&"page",key:`key-${o}-${i}`,page:o}))}),wr=T.breadcrumbs.split(" ")[0];function yr(t){for(const e of t)e.querySelectorAll("li a").forEach((n,o,{length:i})=>{p(n,"aria-current",o===i-1?"page":null)})}R(()=>ht(document.documentElement,wr,yr));const xr=T.dialog.split(" ")[0],Er=Zt?document.getElementsByClassName(xr):[],Sr=()=>{for(const t of Er)t.isConnected&&t.showModal&&t.close&&(t.matches('[open]:not([data-modal="false"]):not(:modal)')?(p(t,"open",null),t.showModal()):t.matches(":modal:not([open])")&&(p(t,"open",""),t.close()))},Tr=({clientX:t,clientY:e,target:n})=>{if(n instanceof HTMLDialogElement&&p(n,"data-closedby")==="any"){const{top:s,right:r,bottom:a,left:c}=n.getBoundingClientRect();if(!(s<=e&&e<=a&&c<=t&&t<=r))return n.close()}const o=n?.closest?.("dialog");o&&n?.closest?.('[data-command="close"]')&&o.close()};R(()=>{C(document,"click",Tr,M),Po(Sr).observe(document.documentElement,{attributeFilter:["open"],attributes:!0,childList:!0,subtree:!0})});function Cr(t){if(t.animationName!==T._errorsummary)return;const e=t.target?.firstElementChild;e instanceof HTMLHeadingElement&&(p(e,"tabindex","-1"),e.focus())}R(()=>C(document,"animationend",Cr,M));var $r=Object.defineProperty,Wo=Object.getOwnPropertySymbols,Ar=Object.prototype.hasOwnProperty,kr=Object.prototype.propertyIsEnumerable,jo=(t,e,n)=>e in t?$r(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,Lr=(t,e)=>{for(var n in e||(e={}))Ar.call(e,n)&&jo(t,n,e[n]);if(Wo)for(var n of Wo(e))kr.call(e,n)&&jo(t,n,e[n]);return t},xt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",ne=xt&&/android/i.test(navigator.userAgent),Fe=xt&&/iPad|iPhone|iPod/.test(navigator.userAgent),Yo;xt&&/^Mac/i.test(((Yo=navigator.userAgentData)==null?void 0:Yo.platform)||navigator.platform);var Ir=`${ne?"data":"aria"}-labelledby`,Or=":host(:not([hidden])) { display: block }",Mr="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",Ko=typeof HTMLElement>"u"?class{}:HTMLElement;function x(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 zo=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Et=(t,...e)=>zo("add",t,e),oe=(t,...e)=>zo("remove",t,e),Rr=(t,e)=>t.attachShadow({mode:"open"}).append(qe("slot"),qe("style",e)),ie=new WeakMap,Ue=(t,e)=>{if(e===void 0)return ie.get(t);try{ie.get(t).disconnect(),ie.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),ie.set(t,n)}},Xo=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},Dr=0,Ve=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++Dr).toString(32)}`),t.id):"",qe=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},Go={define:(t,e)=>!xt||window.customElements.get(t)||window.customElements.define(t,e)},ot,Pr=0,Qo=t=>{ot||(ot=qe("div"),ot.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",x(ot,"aria-live","assertive")),ot.isConnected||document.body.append(ot),t&&(ot.textContent=`${t}${Pr++%2?" ":""}`)},Nr=(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}))},We=!1,je=t=>(t?.type==="mouseup"&&(We=!1),t?.type==="mousedown"&&(We=!0,Et(document,"mouseup",je,{once:!0})),We),Ye="disabled",St="selected",Hr=class extends Ko{static get observedAttributes(){return[Ye,St]}connectedCallback(){Fe||(this.tabIndex=-1),this.hasAttribute("role")||x(this,"role","option"),this.attributeChangedCallback()}attributeChangedCallback(){x(this,"aria-disabled",`${this.disabled}`),x(this,"aria-selected",`${this.selected}`)}get defaultSelected(){return this[St]}set defaultSelected(t){this[St]=t}get disabled(){return x(this,Ye)!==null}set disabled(t){x(this,Ye,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=x(this,"label"))!=null?t:this.text}set label(t){x(this,"label",t)}get selected(){return x(this,St)!==null}set selected(t){x(this,St,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=x(this,"value"))!=null?t:this.text}set value(t){x(this,"value",t)}};Go.define("u-option",Hr);var Jo,Zo=0,Br=Fe||ne,ti="click,focusout,input,keydown,mousedown,mouseup",ei="focus,focusin,blur,focusout",se={singular:"%d hit",plural:"%d hits"},ni=class extends Ko{constructor(){super(),this._texts=Lr({},se),this._value="",Rr(this,`${Or}
9
9
  ::slotted(u-option) { display: block; cursor: pointer }
10
- ::slotted(u-option:focus) { ${Di} }
10
+ ::slotted(u-option:focus) { ${Mr} }
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(St).map(t=>`data-sr-${t}`)]}connectedCallback(){this.hidden=!0,this._root=No(this),m(this,"role","listbox"),m(this,"tabindex","-1"),J(this._root,"focusin",this),J(this._root,"focus",this,!0),Xt(this,{attributeFilter:["disabled","hidden","label","value"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){wt(this._root||this,"focus",this,!0),wt(this._root||this,"focusin",this),Xt(this,!1),te(this),this._root=void 0}attributeChangedCallback(t,e,o){const n=t?.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(St[n])this._texts[n]=o||St[n];else if(this._root){this._input&&ee(this,this._input);for(const s of this._root.querySelectorAll(i))ee(this,s)}}handleEvent(t){const{target:e,type:o}=t;t.defaultPrevented||(o==="click"&&Wi(this,t),(o==="focus"||o==="focusin")&&Fi(this,t),(o==="blur"||o==="focusout")&&Vi(this,t),o==="keydown"&&Yi(this,t),o==="mousedown"&&this.contains(e)&&Jt(t),(o==="mutation"||o==="input")&&(clearTimeout(Uo),Uo=setTimeout(Ko,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},Wo=t=>t?.disabled||t?.readOnly||!1,tt=(t,e)=>{var o,n,i;if(t.hidden!==e)return;t.hidden=Wo(t?._input)||!e,(o=Xt(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&&ee(t,t._input,e),s&&m(t,"popover","manual"),s&&t.togglePopover(e),e&&Ko(t)},te=t=>{t._input&&(wt(t._input||t,Fo,t),wt(t._root||t,qo,t),tt(t,!1),t._input=void 0)},ee=(t,e,o=!1)=>{t.popover&&m(e,"popovertarget",Gt(t)),J(e,Fo,t,!0),m(e,"aria-autocomplete","list"),m(e,"aria-controls",Gt(t)),m(e,"aria-expanded",`${!qi||o}`),m(e,"autocomplete","off"),m(e,"role",Wo(e)?null:"combobox")},Fi=(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&&te(t),t._input=e.target,t._input.dispatchEvent(new FocusEvent("focus")),t._input.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),m(t,Oi,Gt((o=t._input.labels)==null?void 0:o[0])),J(t._root||t,qo,t),tt(t,m(t._input,"inputmode")!=="none"),Ro())},Vi=(t,e)=>{!yt&&!Jt()&&t._input&&setTimeout(Yo,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},Yo=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})),te(t))},Wi=(t,{target:e})=>{var o;if(!t._input||t._input===e)return tt(t,!0);for(const n of t.options)if(n.contains(e))return m(t,"aria-multiselectable")!=="true"&&((o=t._input)==null||o.focus(),tt(t,!1)),Bi(t._input,n.value);yt&&Yo(t)},Yi=(t,e)=>{var o;const{key:n,target:i,altKey:s,ctrlKey:a,shiftKey:r,metaKey:u}=e,c=n==="Escape"||n==="Esc";if(s||a||u||r||n==="Tab")return;c&&!t.hidden&&e?.preventDefault(),tt(t,!c);const p=[...t.options].filter(h=>m(h,"aria-hidden")!=="true"&&h.offsetHeight),d=p.indexOf(i);let v=-1;if(n==="ArrowDown"&&(v=(d+1)%p.length),n==="ArrowUp"&&(v=(~d?d:p.length)-1),~d&&((n==="Home"||n==="PageUp")&&(v=0),(n==="End"||n==="PageDown")&&(v=p.length-1),n==="Enter"))return p[d].click(),e.preventDefault();if(p[v])for(const h of p)h.tabIndex=-1;p[v]&&e.preventDefault(),(o=p[v]||t._input)==null||o.focus(),!p[v]&&n==="ArrowUp"&&setTimeout(()=>{var h;return(h=t._input)==null?void 0:h.setSelectionRange(999,999)})},Ko=(t,e)=>{const{_texts:o,_root:n,_input:i,options:s}=t,a=i?.value.toLowerCase().trim()||"",r=!t.hasAttribute("data-nofilter"),u=[],c=[];for(const d of s)(d.disabled||d.hidden||r&&!d.label.toLowerCase().includes(a)?u:c).push(d);for(const d of u)m(d,"aria-hidden","true");for(const d of c)m(d,"aria-hidden","false");const p=c.length;clearTimeout(Bo),e?.type==="input"&&a!==t._value&&(Bo=setTimeout(()=>{const d=`${!p&&t.innerText.trim()||`${o[p===1?"singular":"plural"]}`.replace("%d",`${p}`)}`;!t.hidden&&n?.activeElement===i&&Ro(d),t._value=a},1e3)),jt&&c.forEach((d,v)=>m(d,"title",`${v+1}/${p}`))};Q&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return No(this).getElementById(m(this,"list")||"")}}),Ho.define("u-datalist",Vo);const oe=b.field.split(" ")[0],jo=b.validation.split(" "),Ki=jo[0],k=(t,e)=>t.getPropertyValue(`--mtds-text-${e}`)?.slice(1,-1)||"";function Xo(t,e){for(const o of t)if(o.isConnected){const n=[],i=[],s=[];let a=null,r=null,u=!0;for(const c of o.getElementsByTagName("*"))c instanceof HTMLLabelElement?n.push(c):c instanceof rt?a=c:Ut(c)&&!c.hidden?r=c:c.hasAttribute("data-description")?i.push(c):c.classList.contains(Ki)?(u=l(c,"data-color")==="success"||!c.clientHeight,s.push(c),i.unshift(c)):c instanceof HTMLParagraphElement&&(i.some(p=>p.contains(c))||i.push(c));if(r){for(const c of n)c.htmlFor=_t(r);if(e&&l(o,"data-validation")==="form"){u=r.matches(":valid");for(const c of s)l(c,"hidden",u?"":null)}ji(a),zo(r),Go(r),l(r,"aria-describedby",i.map(_t).join(" ")||null),l(r,"aria-invalid",`${!u}`)}}}function Go(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function ji(t){const{control:e,list:o}=t||{};if(t&&o&&!t.hasAttribute("data-sr-added")){const n=window.getComputedStyle(t);l(t,"data-sr-added",k(n,"combobox-added")),l(t,"data-sr-empty",k(n,"combobox-empty")),l(t,"data-sr-found",k(n,"combobox-found")),l(t,"data-sr-invalid",k(n,"combobox-invalid")),l(t,"data-sr-of",k(n,"combobox-of")),l(t,"data-sr-remove",k(n,"combobox-remove")),l(t,"data-sr-removed",k(n,"combobox-removed")),l(o,"data-sr-plural",k(n,"datalist-plural")),l(o,"data-sr-singular",k(n,"datalist-singular"))}o&&e&&!o.hasAttribute("popover")&&(l(o,"popover","manual"),l(e,"popovertarget",_t(o)))}function zo(t){const e=t?.nextElementSibling,o=e&&l(e,"data-count");if(e&&o){const n=Number(o)-t.value.length,i=n<0,s=l(e,"aria-live")==="polite",a=window.getComputedStyle(e||t),r=k(a,"count-over"),u=k(a,"count-under");if(s!==i){l(e,"aria-live",i?"polite":"off");for(const c of jo)e.classList.toggle(c,i)}e.textContent=(i?r:u).replace("%d",`${Math.abs(n)}`)}}function Xi({target:t,newState:e}){if(t instanceof Vo){const n=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?O(t,!1):n&&(t.style.width=`${n.clientWidth}px`,O(t,n,l(t,"data-position")??"bottom",!0))}}function Gi(t){Ut(t.target)&&(zo(t.target),Go(t.target),Qo(t))}function zi(t){const e=t.target?.closest?.(`.${oe}`);t.type==="invalid"&&e&&t.preventDefault(),Xo(document.getElementsByClassName(oe),!0)}function Qo({target:t}){const e=(t instanceof rt||t instanceof HTMLInputElement)&&t.list;if(e&&!e?.hidden){const o=l(e,"data-position")??"bottom";setTimeout(()=>O(e,t,o,!0),10)}}C(()=>{V(document.documentElement,oe,Xo),g(document,"comboboxbeforeselect",Qo,y),g(document,"input",Gi,y),g(document,"invalid,submit",zi,!0),g(document,"toggle",Xi,y)});const Qi=b.fieldset.split(" ")[0],Ji=b.validation.split(" ")[0],Jo="aria-describedby",Zi="aria-invalid";function ts(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(Ji)?(i=l(s,"data-color")==="success"||!s.clientHeight,n=_t(s)):Ut(s)&&o.push(s);for(const s of o){const a=l(s,Jo)?.replace(n||"#","");l(s,Jo,`${n||""} ${a||""}`.trim()),l(s,Zi,`${!i}`)}}})}C(()=>V(document.documentElement,Qi,ts));const es=b.logo.split(" ")[0];function os([t]){if(t?.isConnected&&t?.firstElementChild instanceof SVGSVGElement){for(const r of document.head.querySelectorAll("link[rel~='icon']"))r.setAttribute("rel","disabled");const e=t.firstElementChild,o=t?.hasAttribute("data-env"),n=window.getComputedStyle(e),i=n.getPropertyValue("color"),s=n.getPropertyValue("--mtds-logo-color"),a=e.outerHTML.replace(/\n+/g," ").replace(/(fill|width|height|xmlns)="[^"]+"/gi,"").replace("<svg",`<svg width="40" height="40" fill="${i}"`);document.head.appendChild(Object.assign(document.createElement("link"),{href:`data:image/svg+xml,${encodeURIComponent(`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 55 55'><rect fill='${o?"none":s}' width='51' height='51' x='2' y='2' stroke='${i}' stroke-dasharray='0.09 6.38' stroke-linecap='round' stroke-opacity='${o?.6:0}' stroke-width='2.3' rx='25.5'/><g transform="translate(7.5 7.5)">${a}</g></svg>`)}`,rel:"icon"}))}}C(()=>V(document.documentElement,es,os));const Zo=b.popover.split(" ")[0];let ne=0;function ns({target:t,newState:e}){if(t instanceof HTMLElement&&t.classList.contains(Zo)){const o=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?(ne-=1,O(t,!1)):o&&(ne+=1,O(t,o,l(t,"data-position")||"bottom"))}}function is({target:t}){const e=ne&&t?.closest?.("a,[popovertargetaction]");if(e){const o=l(e,"popovertargetaction")||"toggle",n=o==="show"||(o==="hide"?!1:void 0),s=(document.getElementById(l(e,"popovertarget")||"")||e).closest(`.${Zo}`);s?.isConnected&&s?.togglePopover&&s.togglePopover(n)}}C(()=>{g(document,"toggle",ns,y),g(document,"click",is)});const ss=b.table.split(" ")[0];function as(t){for(const e of t){const o=[];l(e,"role","table"),e.caption&&l(e.caption,"role","caption");for(const n of[e.tHead,e.tFoot,...e.tBodies])if(n){l(n,"role","rowgroup");const i=n.nodeName==="TBODY";for(const s of n.rows){l(s,"role","row");for(const a of s.cells)i?l(a,"data-th",o[a.cellIndex]||":empty"):o.push(a.innerText.trim()),a.nodeName==="TD"?l(a,"role","cell"):(l(a,"role",i?"rowheader":"columnheader"),l(a,"scope",i?"row":"col"))}}}}C(()=>V(document.documentElement,ss,as));const rs=`.${b.togglegroup.split(" ")[0]}`;function ls(t){const{key:e,target:o}=t,n=o instanceof HTMLInputElement&&o.closest(rs);if(n&&(e==="Enter"&&o.click(),e?.startsWith("Arrow"))){t.preventDefault();const i=n.getElementsByTagName("input"),s=[...i].indexOf(o),a=e.match(/Arrow(Right|Down)/)?1:-1;i[(i.length+s+a)%i.length]?.focus()}}C(()=>g(document,"keydown",ls));const tn="aria-describedby",en="Escape",$t="aria-labelledby",cs="--mtds-tooltip-position",ds=300,I=j?Object.assign(document.createElement("div"),{className:b._tooltip,id:"mtds-tooltip",popover:"manual"}):null;let P=null,on=Number.NEGATIVE_INFINITY,nn=0;function ie({target:t,type:e,key:o}){if(e==="keydown"&&o!==en)return;const n=on+ds-Date.now();clearTimeout(nn),nn=setTimeout(us,Math.max(n,0),o===en?null:t)}function us(t){if(on=Date.now(),!I||t===I)return;I?.isConnected||document.body.append(I);let e=t?.closest?.("[data-tooltip]")||null;if(e===P)return;const o=e&&l(e,"data-tooltip")||"",n=e&&l(e,"data-tooltip-position")||window.getComputedStyle(e||document.body).getPropertyValue(cs)?.trim()||"top";(!o||o==="false"||o==="true"||n==="none")&&(e=null),e&&(I.textContent=o);const s=P&&l(P,$t)===I?.id,a=(e instanceof HTMLElement?e.innerText:e?.textContent)?.trim()||e?.hasAttribute($t)||e?.hasAttribute("aria-label");P?.removeAttribute(s?$t:tn),O(I,!1),P=e,P&&l(P,a?tn:$t,I?.id),P&&I.hidePopover(),I.togglePopover(!!e),O(I,e||!1,n)}C(()=>{g(document,"blur,focus,mouseout,mouseover",ie,y),g(window,"keydown",ie,y),g(window,"blur",ie,y)});var sn=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",an;sn&&/^Mac/i.test(((an=navigator.userAgentData)==null?void 0:an.platform)||navigator.platform);var ps=":host(:not([hidden])) { display: block }",rn=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 ln=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},cn=(t,...e)=>ln("add",t,e),dn=(t,...e)=>ln("remove",t,e),fs=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},ms=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},se=(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},un={define:(t,e)=>!sn||window.customElements.get(t)||window.customElements.define(t,e)},hs=class extends rn{constructor(){super(),this._content=null,this.attachShadow({mode:"open"}).append(se("slot",null,{name:"summary"}),se("slot",null,{part:"details-content"}),se("style",`${ps}
13
+ ::slotted(u-option[hidden]) { display: none !important }`)}static get observedAttributes(){return["id",...Object.keys(se).map(t=>`data-sr-${t}`)]}connectedCallback(){this.hidden=!0,this._root=Xo(this),x(this,"role","listbox"),x(this,"tabindex","-1"),Et(this._root,"focusin",this),Et(this._root,"focus",this,!0),Ue(this,{attributeFilter:["disabled","hidden","label","value"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){oe(this._root||this,"focus",this,!0),oe(this._root||this,"focusin",this),Ue(this,!1),Ke(this),this._root=void 0}attributeChangedCallback(t,e,n){const o=t?.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(se[o])this._texts[o]=n||se[o];else if(this._root){this._input&&ze(this,this._input);for(const s of this._root.querySelectorAll(i))ze(this,s)}}handleEvent(t){const{target:e,type:n}=t;t.defaultPrevented||(n==="click"&&Vr(this,t),(n==="focus"||n==="focusin")&&Fr(this,t),(n==="blur"||n==="focusout")&&Ur(this,t),n==="keydown"&&qr(this,t),n==="mousedown"&&this.contains(e)&&je(t),(n==="mutation"||n==="input")&&(clearTimeout(Zo),Zo=setTimeout(si,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},oi=t=>t?.disabled||t?.readOnly||!1,Tt=(t,e)=>{var n,o,i;if(t.hidden!==e)return;t.hidden=oi(t?._input)||!e,(n=Ue(t))==null||n.takeRecords();const s=t.isConnected&&t.popover&&((o=t._input)==null?void 0:o.isConnected)&&((i=t._input)==null?void 0:i.popoverTargetElement)===t;t._input&&ze(t,t._input,e),s&&x(t,"popover","manual"),s&&t.togglePopover(e),e&&si(t)},Ke=t=>{t._input&&(oe(t._input||t,ei,t),oe(t._root||t,ti,t),Tt(t,!1),t._input=void 0)},ze=(t,e,n=!1)=>{t.popover&&x(e,"popovertarget",Ve(t)),Et(e,ei,t,!0),x(e,"aria-autocomplete","list"),x(e,"aria-controls",Ve(t)),x(e,"aria-expanded",`${!Br||n}`),x(e,"autocomplete","off"),x(e,"role",oi(e)?null:"combobox")},Fr=(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&&Ke(t),t._input=e.target,t._input.dispatchEvent(new FocusEvent("focus")),t._input.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),x(t,Ir,Ve((n=t._input.labels)==null?void 0:n[0])),Et(t._root||t,ti,t),Tt(t,x(t._input,"inputmode")!=="none"),Qo())},Ur=(t,e)=>{!ne&&!je()&&t._input&&setTimeout(ii,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},ii=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})),Ke(t))},Vr=(t,{target:e})=>{var n;if(!t._input||t._input===e)return Tt(t,!0);for(const o of t.options)if(o.contains(e))return x(t,"aria-multiselectable")!=="true"&&((n=t._input)==null||n.focus(),Tt(t,!1)),Nr(t._input,o.value);ne&&ii(t)},qr=(t,e)=>{var n;const{key:o,target:i,altKey:s,ctrlKey:r,shiftKey:a,metaKey:c}=e,l=o==="Escape"||o==="Esc";if(s||r||c||a||o==="Tab")return;l&&!t.hidden&&e?.preventDefault(),Tt(t,!l);const d=[...t.options].filter(f=>x(f,"aria-hidden")!=="true"&&f.offsetHeight),u=d.indexOf(i);let m=-1;if(o==="ArrowDown"&&(m=(u+1)%d.length),o==="ArrowUp"&&(m=(~u?u:d.length)-1),~u&&((o==="Home"||o==="PageUp")&&(m=0),(o==="End"||o==="PageDown")&&(m=d.length-1),o==="Enter"))return d[u].click(),e.preventDefault();if(d[m])for(const f of d)f.tabIndex=-1;d[m]&&e.preventDefault(),(n=d[m]||t._input)==null||n.focus(),!d[m]&&o==="ArrowUp"&&setTimeout(()=>{var f;return(f=t._input)==null?void 0:f.setSelectionRange(999,999)})},si=(t,e)=>{const{_texts:n,_root:o,_input:i,options:s}=t,r=i?.value.toLowerCase().trim()||"",a=!t.hasAttribute("data-nofilter"),c=[],l=[];for(const u of s)(u.disabled||u.hidden||a&&!u.label.toLowerCase().includes(r)?c:l).push(u);for(const u of c)x(u,"aria-hidden","true");for(const u of l)x(u,"aria-hidden","false");const d=l.length;clearTimeout(Jo),e?.type==="input"&&r!==t._value&&(Jo=setTimeout(()=>{const u=`${!d&&t.innerText.trim()||`${n[d===1?"singular":"plural"]}`.replace("%d",`${d}`)}`;!t.hidden&&o?.activeElement===i&&Qo(u),t._value=r},1e3)),Fe&&l.forEach((u,m)=>x(u,"title",`${m+1}/${d}`))};xt&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return Xo(this).getElementById(x(this,"list")||"")}}),Go.define("u-datalist",ni);const Xe=T.field.split(" ")[0],ri=T.validation.split(" "),Wr=ri[0],N=(t,e)=>t.getPropertyValue(`--mtds-text-${e}`)?.slice(1,-1)||"";function ai(t,e){for(const n of t)if(n.isConnected){const o=[],i=[],s=[];let r=null,a=null,c=!0;for(const l of n.getElementsByTagName("*"))l instanceof HTMLLabelElement?o.push(l):l instanceof fe?r=l:Me(l)&&!l.hidden?a=l:l.hasAttribute("data-description")?i.push(l):l.classList.contains(Wr)?(c=p(l,"data-color")==="success"||!l.clientHeight,s.push(l),i.unshift(l)):l instanceof HTMLParagraphElement&&(i.some(d=>d.contains(l))||i.push(l));if(a){for(const l of o)l.htmlFor=te(a);if(e&&p(n,"data-validation")==="form"){c=a.matches(":valid");for(const l of s)p(l,"hidden",c?"":null)}jr(r),ci(a),li(a),p(a,"aria-describedby",i.map(te).join(" ")||null),p(a,"aria-invalid",`${!c}`)}}}function li(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function jr(t){const{control:e,list:n}=t||{};if(t&&n&&!t.hasAttribute("data-sr-added")){const o=window.getComputedStyle(t);p(t,"data-sr-added",N(o,"combobox-added")),p(t,"data-sr-empty",N(o,"combobox-empty")),p(t,"data-sr-found",N(o,"combobox-found")),p(t,"data-sr-invalid",N(o,"combobox-invalid")),p(t,"data-sr-of",N(o,"combobox-of")),p(t,"data-sr-remove",N(o,"combobox-remove")),p(t,"data-sr-removed",N(o,"combobox-removed")),p(n,"data-sr-plural",N(o,"datalist-plural")),p(n,"data-sr-singular",N(o,"datalist-singular"))}n&&e&&!n.hasAttribute("popover")&&(p(n,"popover","manual"),p(e,"popovertarget",te(n)))}function ci(t){const e=t?.nextElementSibling,n=e&&p(e,"data-count");if(e&&n){const o=Number(n)-t.value.length,i=o<0,s=p(e,"aria-live")==="polite",r=window.getComputedStyle(e||t),a=N(r,"count-over"),c=N(r,"count-under");if(s!==i){p(e,"aria-live",i?"polite":"off");for(const l of ri)e.classList.toggle(l,i)}e.textContent=(i?a:c).replace("%d",`${Math.abs(o)}`)}}function Yr(t){if(t.target instanceof ni){const e=t.target,o=e.getRootNode()?.querySelector(`[popovertarget="${e.id}"]`);t.newState==="closed"?et(e,!1):o&&et(e,o,{placement:p(e,"data-position")??"bottom",middleware:[Le(),ke(),Qs({padding:10,apply({availableHeight:i}){e.style.width=`${o.offsetWidth}px`,e.style.maxHeight=`${Math.max(50,i)}px`}})]})}}function Kr(t){Me(t.target)&&(ci(t.target),li(t.target))}function zr(t){const e=t.target?.closest?.(`.${Xe}`);t.type==="invalid"&&e&&t.preventDefault(),ai(document.getElementsByClassName(Xe),!0)}R(()=>{ht(document.documentElement,Xe,ai),C(document,"input",Kr,M),C(document,"invalid,submit",zr,!0),C(document,"toggle",Yr,M)});const Xr=T.fieldset.split(" ")[0],Gr=T.validation.split(" ")[0],ui="aria-describedby",Qr="aria-invalid";function Jr(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(Gr)?(i=p(s,"data-color")==="success"||!s.clientHeight,o=te(s)):Me(s)&&n.push(s);for(const s of n){const r=p(s,ui)?.replace(o||"#","");p(s,ui,`${o||""} ${r||""}`.trim()),p(s,Qr,`${!i}`)}}})}R(()=>ht(document.documentElement,Xr,Jr));const Zr=T.logo.split(" ")[0];function ta([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"}))}}R(()=>ht(document.documentElement,Zr,ta));const di=T.popover.split(" ")[0];let fi=0;function ea({target:t,newState:e}){if(t instanceof HTMLElement&&t.classList.contains(di)){const n=e==="closed",o=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);fi+=n?-1:1,n?et(t,!1):o&&et(t,o,{placement:p(t,"data-position")||"bottom",middleware:[Le(),ke({padding:10})]})}}function na({target:t}){const e=fi&&t?.closest?.("a,[popovertargetaction]");if(e){const n=p(e,"popovertargetaction")||"toggle",o=n==="show"||(n==="hide"?!1:void 0),s=(document.getElementById(p(e,"popovertarget")||"")||e).closest(`.${di}`);s?.isConnected&&s?.togglePopover&&s.togglePopover(o)}}R(()=>{C(document,"toggle",ea,M),C(document,"click",na)});const oa=T.table.split(" ")[0];function ia(t){for(const e of t){const n=[];p(e,"role","table"),e.caption&&p(e.caption,"role","caption");for(const o of[e.tHead,e.tFoot,...e.tBodies])if(o){p(o,"role","rowgroup");const i=o.nodeName==="TBODY";for(const s of o.rows){p(s,"role","row");for(const r of s.cells)i?p(r,"data-th",n[r.cellIndex]||":empty"):n.push(r.innerText.trim()),r.nodeName==="TD"?p(r,"role","cell"):(p(r,"role",i?"rowheader":"columnheader"),p(r,"scope",i?"row":"col"))}}}}R(()=>ht(document.documentElement,oa,ia));const sa=`.${T.togglegroup.split(" ")[0]}`;function ra(t){const{key:e,target:n}=t,o=n instanceof HTMLInputElement&&n.closest(sa);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()}}R(()=>C(document,"keydown",ra));const pi="aria-describedby",mi="Escape",re="aria-labelledby",aa="--mtds-tooltip-position",la=300,H=Zt?Object.assign(document.createElement("div"),{className:T._tooltip,id:"mtds-tooltip",popover:"manual"}):null;let X=null,hi=Number.NEGATIVE_INFINITY,gi=0;function Ge({target:t,type:e,key:n}){if(e==="keydown"&&n!==mi)return;const o=hi+la-Date.now();clearTimeout(gi),gi=setTimeout(ca,Math.max(o,0),n===mi?null:t)}function ca(t){if(hi=Date.now(),!H||t===H)return;H?.isConnected||document.body.append(H);let e=t?.closest?.("[data-tooltip]")||null;if(e===X)return;const n=e&&p(e,"data-tooltip")||"",o=e&&p(e,"data-tooltip-position")||window.getComputedStyle(e||document.body).getPropertyValue(aa)?.trim()||"top";(!n||n==="false"||n==="true"||o==="none")&&(e=null),e&&(H.textContent=n);const s=X&&p(X,re)===H?.id,r=(e instanceof HTMLElement?e.innerText:e?.textContent)?.trim()||e?.hasAttribute(re)||e?.hasAttribute("aria-label");X?.removeAttribute(s?re:pi),et(H,!1),X=e,X&&p(X,r?pi:re,H?.id),X&&H.hidePopover(),H.togglePopover(!!e),et(H,e||!1,{placement:o,middleware:[Le(),ke({padding:10})]})}R(()=>{C(document,"blur,focus,mouseout,mouseover",Ge,M),C(window,"keydown",Ge,M),C(window,"blur",Ge,M)});var vi=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",bi;vi&&/^Mac/i.test(((bi=navigator.userAgentData)==null?void 0:bi.platform)||navigator.platform);var ua=":host(:not([hidden])) { display: block }",_i=typeof HTMLElement>"u"?class{}:HTMLElement;function G(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 wi=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},yi=(t,...e)=>wi("add",t,e),xi=(t,...e)=>wi("remove",t,e),da=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},fa=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},Qe=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))G(o,i,s);return o},Ei={define:(t,e)=>!vi||window.customElements.get(t)||window.customElements.define(t,e)},pa=class extends _i{constructor(){super(),this._content=null,this.attachShadow({mode:"open"}).append(Qe("slot",null,{name:"summary"}),Qe("slot",null,{part:"details-content"}),Qe("style",`${ua}
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],cn(this._content,"beforematch",this),cn(this,"click,keydown",this),this.attributeChangedCallback()}disconnectedCallback(){this._content&&dn(this._content,"beforematch",this),dn(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=ms(this).querySelectorAll(`${this.nodeName}[name="${this.name}"]`);for(const a of s)a!==this&&(a.open=!1)}t==="open"&&e===null!=(o===null)&&this.dispatchEvent(new Event("toggle"))}handleEvent(t){const e=this.querySelector(":scope > u-summary"),o=e?.contains(t.target);t.defaultPrevented||(t.type==="beforematch"&&(this.open=!0),o&&t.type==="keydown"&&fs(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)}},vs=class extends rn{connectedCallback(){B(this,"role","button"),this.slot="summary",this.tabIndex=0}};un.define("u-details",hs),un.define("u-summary",vs);var Tt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",pn=Tt&&/firefox/i.test(navigator.userAgent),_s=Tt&&/iPad|iPhone|iPod/.test(navigator.userAgent),fn;Tt&&/^Mac/i.test(((fn=navigator.userAgentData)==null?void 0:fn.platform)||navigator.platform);var bs=typeof HTMLElement>"u"?class{}:HTMLElement;function E(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 mn=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},gs=0,ys=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++gs).toString(32)}`),t.id):"",hn=(t,e,o)=>{const n=document.createElement(t);if(e&&(n.textContent=e),o)for(const[i,s]of Object.entries(o))E(n,i,s);return n},ws={define:(t,e)=>!Tt||window.customElements.get(t)||window.customElements.define(t,e)},Es=t=>{var e;const o=mn(t),n=E(t,"aria-label")||"";return[...(((e=E(t,"aria-labelledby"))==null?void 0:e.trim().split(/\s+/))||[]).map(s=>o?.querySelector(`[id="${s}"]`)),...Array.from(t.labels||[])].reduce((s,a)=>{var r;return s||((r=a?.innerText)==null?void 0:r.trim())||""},n)},ae=!1,vn=class extends bs{static get observedAttributes(){return["aria-label","aria-labelledby","value","max"]}constructor(){super(),this.attachShadow({mode:"open"}).append(hn("slot",null,{hidden:""}),hn("style",`:host(:not([hidden])) { box-sizing: border-box; border: 1px solid; display: inline-block; height: .5em; width: 10em; overflow: hidden }
17
+ :host > [part="details-content"]:not([hidden=""]) { display: block }`))}static get observedAttributes(){return["open"]}connectedCallback(){var t;this._content=(t=this.shadowRoot)==null?void 0:t.children[1],G(this,"role","group"),yi(this._content,"beforematch",this),yi(this,"click,keydown",this),this.attributeChangedCallback()}disconnectedCallback(){this._content&&xi(this._content,"beforematch",this),xi(this,"click,keydown",this),this._content=null}attributeChangedCallback(t,e,n){const o="onbeforematch"in this?"until-found":!0,i=this.open;for(const s of this.children)s.nodeName==="U-SUMMARY"&&G(s,"aria-expanded",`${i}`);if(this._content&&(G(this._content,"aria-hidden",`${!i}`),this._content.hidden=i?!1:o),i&&this.name){const s=fa(this).querySelectorAll(`${this.nodeName}[name="${this.name}"]`);for(const r of s)r!==this&&(r.open=!1)}t==="open"&&e===null!=(n===null)&&this.dispatchEvent(new Event("toggle"))}handleEvent(t){const e=this.querySelector(":scope > u-summary"),n=e?.contains(t.target);t.defaultPrevented||(t.type==="beforematch"&&(this.open=!0),n&&t.type==="keydown"&&da(t),n&&t.type==="click"&&(this.open=!this.open))}get open(){return this.hasAttribute("open")}set open(t){G(this,"open",t?"":null)}get name(){return G(this,"name")||""}set name(t){G(this,"name",t)}},ma=class extends _i{connectedCallback(){G(this,"role","button"),this.slot="summary",this.tabIndex=0}};Ei.define("u-details",pa),Ei.define("u-summary",ma);var ae=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Si=ae&&/firefox/i.test(navigator.userAgent),ha=ae&&/iPad|iPhone|iPod/.test(navigator.userAgent),Ti;ae&&/^Mac/i.test(((Ti=navigator.userAgentData)==null?void 0:Ti.platform)||navigator.platform);var ga=typeof HTMLElement>"u"?class{}:HTMLElement;function A(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 Ci=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},va=0,ba=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++va).toString(32)}`),t.id):"",$i=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))A(o,i,s);return o},_a={define:(t,e)=>!ae||window.customElements.get(t)||window.customElements.define(t,e)},wa=t=>{var e;const n=Ci(t),o=A(t,"aria-label")||"";return[...(((e=A(t,"aria-labelledby"))==null?void 0:e.trim().split(/\s+/))||[]).map(s=>n?.querySelector(`[id="${s}"]`)),...Array.from(t.labels||[])].reduce((s,r)=>{var a;return s||((a=r?.innerText)==null?void 0:a.trim())||""},o)},Je=!1,Ai=class extends ga{static get observedAttributes(){return["aria-label","aria-labelledby","value","max"]}constructor(){super(),this.attachShadow({mode:"open"}).append($i("slot",null,{hidden:""}),$i("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(ae)return;ae=!0;const t=_s||pn,e=Math.max(0,Math.round(this.position*100));this.style.setProperty("--percentage",`${e}%`);let o=Es(this);if(t&&(o=`${o.replace(/\d+%$/,"")} ${e}%`),pn)for(const n of this.labels)E(n,"aria-label",o);E(this,"aria-busy",`${this.position===-1}`),E(this,"aria-label",o.trim()),E(this,"aria-labelledby",null),E(this,"aria-valuemax","100"),E(this,"aria-valuemin","0"),E(this,"aria-valuenow",`${e}`),E(this,"role",t?"img":"progressbar"),ae=!1}get labels(){const t=this.closest("label:not([for])"),e=ys(this);return t&&(t.htmlFor=e),mn(this).querySelectorAll(`label[for="${e}"]`)}get position(){return this.value===null?-1:Math.min(this.value/this.max,1)}get value(){return bn(this,"value")}set value(t){gn(this,"value",t)}get max(){return bn(this,"max")||1}set max(t){gn(this,"max",t)}};vn.formAssociated=!0;var _n=t=>!Number.isNaN(Number.parseFloat(`${t}`))&&Number.isFinite(Number(t)),bn=(t,e)=>{const o=E(t,e);return _n(o)?Math.max(0,Number.parseFloat(o)):null},gn=(t,e,o)=>{if(o===null||_n(o))E(t,e,`${o}`);else throw new Error(`Failed to set non-numeric '${E}': '${o}'`)};return ws.define("u-progress",vn),T.UHTMLComboboxElement=rt,T.UHTMLTabElement=Te,T.UHTMLTabListElement=$e,T.UHTMLTabPanelElement=xe,T.UHTMLTabsElement=Se,T.analytics=$o,T.pagination=wi,T.styles=Zn,T.toggleAppExpanded=ko,T.version=Jn,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/PyBudWxsOyAvLyBGYWxsYmFjayB0byBudWxsIG9ubHkgaWYgZWwgaXMgdW5kZWZpbmVkXG5cdGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHRlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuXHRyZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiB1c2VJZFxuICogQHJldHVybiBBIGdlbmVyYXRlZCB1bmlxdWUgSURcbiAqL1xubGV0IGlkID0gMDtcbmNvbnN0IFVVSUQgPSBgJHtEYXRlLm5vdygpLnRvU3RyaW5nKDM2KX0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDUpfWA7XG5leHBvcnQgZnVuY3Rpb24gdXNlSWQoZWw6IEVsZW1lbnQpIHtcblx0aWYgKCFlbC5pZCkgZWwuaWQgPSBgJHtVVUlEfSR7KytpZH1gO1xuXHRyZXR1cm4gZWwuaWQ7XG59XG5cbi8vIEludGVybmFsIGhlbHBlciBmb3Igb24gLyBvZmZcbmNvbnN0IGV2ZW50cyA9IChcblx0YWN0aW9uOiBcImFkZFwiIHwgXCJyZW1vdmVcIixcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Wy4uLnJlc3RdOiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPiwgLy8gU3ByZWF0IHRvIG1ha2UgYSBjb3B5IG9mIHRoZSBhcnJheVxuKTogdm9pZCA9PiB7XG5cdGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuXHRcdHJlc3RbMF0gPSB0eXBlO1xuXHRcdGVsZW1lbnRbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXSguLi5yZXN0KTtcblx0fVxufTtcblxuLyoqXG4gKiBvblxuICogQHBhcmFtIGVsZW1lbnQgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gdHlwZXMgQSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGV2ZW50IHR5cGVzXG4gKiBAcGFyYW0gbGlzdGVuZXIgQW4gZXZlbnQgbGlzdGVuZXIgZnVuY3Rpb24gb3IgbGlzdGVuZXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBvbiA9IChcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Li4ucmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj5cbik6IHZvaWQgPT4ge1xuXHRpZiAoVU5CSU5EICYmIChlbGVtZW50ID09PSB3aW5kb3cgfHwgZWxlbWVudCA9PT0gZG9jdW1lbnQpKVxuXHRcdFVOQklORC5wdXNoKCgpID0+IG9mZihlbGVtZW50LCAuLi5yZXN0KSk7XG5cdGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbn07XG5cbi8qKlxuICogb2ZmXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9mZiA9IChcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Li4ucmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj5cbik6IHZvaWQgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBXaW5kb3cge1xuXHRcdF9tdGRzVW5iaW5kRXZlbnRzPzogTWFwPHN0cmluZywgQXJyYXk8KCkgPT4gdm9pZD4+O1xuXHR9XG59XG5cbi8qKlxuICogb25Mb2FkZWRcbiAqIEBkZXNjcmlwdGlvbiBSdW5zIGEgY2FsbGJhY2sgd2hlbiB3aW5kb3cgaXMgbG9hZGVkIGluIGJyb3dzZXIsIGFuZCBlbnN1cmVzIGV2ZW50cyBhcmUgdW5ib3VuZCBpZiBob3QgcmVsb2FkaW5nXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIHJ1biB3aGVuIHRoZSBwYWdlIGlzIHJlYWR5XG4gKi9cbmxldCBVTkJJTkQ6IEFycmF5PCgpID0+IHZvaWQ+IHwgbnVsbCA9IG51bGw7XG5leHBvcnQgY29uc3Qgb25Mb2FkZWQgPSAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHtcblx0aWYgKCFJU19CUk9XU0VSKSByZXR1cm47XG5cdGlmICghd2luZG93Ll9tdGRzVW5iaW5kRXZlbnRzKSB3aW5kb3cuX210ZHNVbmJpbmRFdmVudHMgPSBuZXcgTWFwKCk7XG5cblx0Y29uc3QgcnVuID0gKCkgPT5cblx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0Y29uc3Qga2V5ID0gU3RyaW5nKGNhbGxiYWNrKS5yZXBsYWNlKC8oXFxufFxccykvZywgXCJcIik7XG5cdFx0XHR3aW5kb3cuX210ZHNVbmJpbmRFdmVudHM/LmdldChrZXkpPy5mb3JFYWNoKCh1bmJpbmQpID0+IHVuYmluZCgpKTsgLy8gVW5iaW5kIHByZXZpb3VzIGV2ZW50c1xuXHRcdFx0VU5CSU5EID0gW107IC8vIFByZXBhcmUgdG8gbGlzdGVuIGZvciBuZXdseSBib3VuZCBldmVudHNcblx0XHRcdGNhbGxiYWNrKCk7IC8vIFJ1biBiaW5kaW5nXG5cdFx0XHR3aW5kb3cuX210ZHNVbmJpbmRFdmVudHM/LnNldChrZXksIFVOQklORD8uc2xpY2UoMCkpOyAvLyBTdG9yZSBmb3IgbGF0ZXIgdW5iaW5kaW5nXG5cdFx0XHRVTkJJTkQgPSBudWxsOyAvLyBTdG9wIGxpc3RlbmluZyBmb3IgbmV3bHkgYm91bmQgZXZlbnRzXG5cdFx0fSk7XG5cblx0aWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikgcnVuKCk7XG5cdGVsc2Ugb24od2luZG93LCBcImxvYWRcIiwgcnVuKTtcbn07XG5cbi8qKlxuICogU2Nyb2xsZXIgdGFyZ2VzIGhlbHBpbmcgYW5jaG9yUG9zaXRpb25cbiAqL1xuY29uc3QgU0NST0xMRVIgPSBJU19CUk9XU0VSID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSA6IG51bGw7IC8vIFVzZWQgdG8gZW5zdXJlIHdlIGhhdmUgc2Nyb2xsYWJpbGl0eSB1bmRlclxuY29uc3QgVEFSR0VUUyA9IG5ldyBNYXA8RWxlbWVudCwgKCkgPT4gdm9pZD4oKTsgLy8gU3RvcmUgY3VycmVudCBvcGVuIHBvcHBlcnMgYW5kIHRoZWlyIHVwZGF0ZSBmdW5jdGlvbnNcbmNvbnN0IFRBUkdFVFNfVVBEQVRFID0gKCkgPT4ge1xuXHRmb3IgKGNvbnN0IFtfLCB1cGRhdGVdIG9mIFRBUkdFVFMpIHVwZGF0ZSgpO1xufTtcblxuaWYgKFNDUk9MTEVSKSB7XG5cdFNDUk9MTEVSLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO3BhZGRpbmc6MXB4O3RvcDowO2xlZnQ6MHB4XCI7XG5cdG9uKHdpbmRvdywgXCJsb2FkLHJlc2l6ZSxzY3JvbGxcIiwgVEFSR0VUU19VUERBVEUsIFFVSUNLX0VWRU5UKTtcbn1cblxuLyoqXG4gKiBhbmNob3JQb3NpdGlvblxuICogQHBhcmFtIHRhcmdldCBUaGUgRWxlbWVudCB0byBwb3NpdGlvblxuICogQHBhcmFtIGFuY2hvciBUaGUgRWxlbWVudCB0byB1c2UgYXMgYW5jaG9yXG4gKi9cbmNvbnN0IFBPU0lUSU9OID0geyB0b3A6IDAsIHJpZ2h0OiAxLCBib3R0b206IDIsIGxlZnQ6IDMgfTsgLy8gU3BlZWQgdXAgYnkgdXNpbmcgYSBjb25zdCBtYXBcblxuZXhwb3J0IHR5cGUgQW5jaG9yUG9zaXRpb24gPSBrZXlvZiB0eXBlb2YgUE9TSVRJT047XG5cbmV4cG9ydCBmdW5jdGlvbiBhbmNob3JQb3NpdGlvbihcblx0dGFyZ2V0OiBIVE1MRWxlbWVudCxcblx0YW5jaG9yOiBFbGVtZW50IHwgZmFsc2UsXG5cdHBsYWNlPzogc3RyaW5nIHwgbnVtYmVyLFxuXHRmb3JjZT86IGJvb2xlYW4sXG4pIHtcblx0Y29uc3QgcG9zaXRpb24gPVxuXHRcdFBPU0lUSU9OW3BsYWNlIGFzIGtleW9mIHR5cGVvZiBQT1NJVElPTl0gPz9cblx0XHROdW1iZXIocGxhY2UpID8/XG5cdFx0UE9TSVRJT04uYm90dG9tO1xuXG5cdGlmIChhbmNob3IgPT09IGZhbHNlIHx8ICFhbmNob3IuaXNDb25uZWN0ZWQgfHwgIXRhcmdldC5pc0Nvbm5lY3RlZClcblx0XHRyZXR1cm4gVEFSR0VUUy5kZWxldGUodGFyZ2V0KTsgLy8gU3RvcCB3YXRjaGluZyBpZiBhbmNob3IgaXMgcmVtb3ZlZCBmcm9tIERPTVxuXHRpZiAoIVNDUk9MTEVSPy5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmQoU0NST0xMRVIgfHwgXCJcIik7IC8vIEVuc3VyZSB3ZSBoYXZlIHRoZSBzY3JvbGxlclxuXHRpZiAoIVRBUkdFVFMuaGFzKHRhcmdldCkpXG5cdFx0VEFSR0VUUy5zZXQodGFyZ2V0LCAoKSA9PiBhbmNob3JQb3NpdGlvbih0YXJnZXQsIGFuY2hvciwgcG9zaXRpb24sIGZvcmNlKSk7XG5cblx0Y29uc3QgeyBvZmZzZXRXaWR0aDogdGFyZ2V0Vywgb2Zmc2V0SGVpZ2h0OiB0YXJnZXRIIH0gPSB0YXJnZXQ7XG5cdGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wIH0gPSBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdGNvbnN0IGlzSFRNTEFuY2hvciA9IGFuY2hvciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OyAvLyBTVkcgb3IgWE1MIGVsZW1lbnRzIGRvZXMgbm90IGhhdmUgb2Zmc2V0V2lkdGggb3Igb2Zmc2V0SGVpZ2h0XG5cdGNvbnN0IGFuY2hvclcgPSBpc0hUTUxBbmNob3IgPyBhbmNob3Iub2Zmc2V0V2lkdGggOiBhbmNob3IuY2xpZW50V2lkdGg7XG5cdGNvbnN0IGFuY2hvckggPSBpc0hUTUxBbmNob3IgPyBhbmNob3Iub2Zmc2V0SGVpZ2h0IDogYW5jaG9yLmNsaWVudEhlaWdodDtcblxuXHQvLyBHZXQgdmlzdWFsIHZpZXdwb3J0IGluZm9cblx0Y29uc3Qgdmlld1cgPSB3aW5kb3cudmlzdWFsVmlld3BvcnQ/LndpZHRoIHx8IHdpbmRvdy5pbm5lcldpZHRoO1xuXHRjb25zdCB2aWV3SCA9IHdpbmRvdy52aXN1YWxWaWV3cG9ydD8uaGVpZ2h0IHx8IHdpbmRvdy5pbm5lckhlaWdodDtcblx0Y29uc3Qgc2Nyb2xsWCA9IHdpbmRvdy5wYWdlWE9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDtcblx0Y29uc3Qgc2Nyb2xsWSA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuXG5cdGNvbnN0IGFuY2hvclggPSBNYXRoLnJvdW5kKGxlZnQgLSAoYW5jaG9yVyAtIHdpZHRoKSAvIDIpOyAvLyBDb3JyZWN0IGZvciBDU1MgdHJhbnNmb3JtIHNjYWxlXG5cdGNvbnN0IGFuY2hvclkgPSBNYXRoLnJvdW5kKHRvcCAtIChhbmNob3JIIC0gaGVpZ2h0KSAvIDIpOyAvLyBDb3JyZWN0IGZvciBDU1MgdHJhbnNmb3JtIHNjYWxlXG5cdGNvbnN0IGNlbnRlclggPSBNYXRoLm1pbihcblx0XHRNYXRoLm1heCgxMCwgYW5jaG9yWCAtICh0YXJnZXRXIC0gYW5jaG9yVykgLyAyKSxcblx0XHR2aWV3VyAtIHRhcmdldFcgLSAxMCxcblx0KTtcblx0Y29uc3QgY2VudGVyWSA9IE1hdGgubWluKFxuXHRcdE1hdGgubWF4KDEwLCBhbmNob3JZIC0gKHRhcmdldEggLSBhbmNob3JIKSAvIDIpLFxuXHRcdHZpZXdIIC0gdGFyZ2V0SCAtIDEwLFxuXHQpO1xuXG5cdC8vIFVzZSB2aXN1YWwgdmlld3BvcnQgZGltZW5zaW9ucyBmb3Igc3BhY2UgY2FsY3VsYXRpb25zXG5cdGNvbnN0IGhhc1NwYWNlTGVmdCA9IGFuY2hvclggLSB0YXJnZXRXID4gMDtcblx0Y29uc3QgaGFzU3BhY2VSaWdodCA9IGFuY2hvclggKyBhbmNob3JXICsgdGFyZ2V0VyA8IHZpZXdXO1xuXHRjb25zdCBoYXNTcGFjZU92ZXIgPSBhbmNob3JZIC0gdGFyZ2V0SCA+IDA7XG5cdGNvbnN0IGhhc1NwYWNlVW5kZXIgPSBhbmNob3JZICsgYW5jaG9ySCArIHRhcmdldEggPCB2aWV3SDtcblxuXHRjb25zdCBpc1ZlcnRpY2FsID0gcG9zaXRpb24gPT09IFBPU0lUSU9OLnRvcCB8fCBwb3NpdGlvbiA9PT0gUE9TSVRJT04uYm90dG9tO1xuXHRjb25zdCBpc1JpZ2h0ID1cblx0XHQocG9zaXRpb24gPT09IFBPU0lUSU9OLnJpZ2h0ICYmIChmb3JjZSB8fCBoYXNTcGFjZVJpZ2h0KSkgfHwgIWhhc1NwYWNlTGVmdDsgLy8gQWx3YXlzIHBvc2l0aW9uIHJpZ2h0IHdoZW4gbm8gaGFzU3BhY2VMZWZ0LCBhcyBubyBPUyBzY3JvbGxzIGZ1cnRoZXIgbGVmdCB0aGFuIDBcblx0Y29uc3QgaXNVbmRlciA9XG5cdFx0KHBvc2l0aW9uID09PSBQT1NJVElPTi5ib3R0b20gJiYgKGZvcmNlIHx8IGhhc1NwYWNlVW5kZXIpKSB8fCAhaGFzU3BhY2VPdmVyOyAvLyBBbHdheXMgcG9zaXRpb24gdW5kZXIgd2hlbiBubyBoYXNTcGFjZU92ZXIsIGFzIG5vIE9TIHNjcm9sbHMgZnVydGhlciB1cCB0aGFuIDBcblxuXHQvLyBDYWxjdWxhdGUgcG9zaXRpb25zIGluIHZpZXdwb3J0IGNvb3JkaW5hdGVzXG5cdGNvbnN0IHZpZXdYID0gTWF0aC5yb3VuZChcblx0XHRpc1ZlcnRpY2FsID8gY2VudGVyWCA6IGlzUmlnaHQgPyBhbmNob3JYICsgYW5jaG9yVyA6IGFuY2hvclggLSB0YXJnZXRXLFxuXHQpO1xuXHRjb25zdCB2aWV3WSA9IE1hdGgucm91bmQoXG5cdFx0aXNWZXJ0aWNhbCA/IChpc1VuZGVyID8gYW5jaG9yWSArIGFuY2hvckggOiBhbmNob3JZIC0gdGFyZ2V0SCkgOiBjZW50ZXJZLFxuXHQpO1xuXG5cdC8vIFVzZSBhYnNvbHV0ZSBwb3NpdGlvbmluZ1xuXHR0YXJnZXQuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cdHRhcmdldC5zdHlsZS5sZWZ0ID0gYCR7dmlld1ggKyBzY3JvbGxYfXB4YDtcblx0dGFyZ2V0LnN0eWxlLnRvcCA9IGAke3ZpZXdZICsgc2Nyb2xsWX1weGA7XG5cblx0U0NST0xMRVI/LnN0eWxlLnNldFByb3BlcnR5KFxuXHRcdFwidHJhbnNsYXRlXCIsXG5cdFx0YDBweCAke01hdGgucm91bmQoaXNVbmRlciA/IHNjcm9sbFggKyBhbmNob3JZICsgYW5jaG9ySCArIHRhcmdldEggKyAzMCA6IDApfXB4YCxcblx0KTtcbn1cblxuLyoqXG4gKiBTcGVlZCB1cCBNdXRhdGlvbk9ic2VydmVyIGJ5IGRlYm91bmNpbmcgYW5kIG9ubHkgcnVubmluZyB3aGVuIHBhZ2UgaXMgdmlzaWJsZVxuICogQHJldHVybiBuZXcgTXV0YWlvbk9ic2VydmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrOiBNdXRhdGlvbkNhbGxiYWNrKSB7XG5cdGxldCBxdWV1ZSA9IDA7XG5cblx0Y29uc3Qgb25GcmFtZSA9ICgpID0+IHNldFRpbWVvdXQob25UaW1lciwgMjAwKTsgLy8gVXNlIGJvdGggcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGFuZCBzZXRUaW1lb3V0IHRvIGRlYm91bmNlIGFuZCBvbmx5IHJ1biB3aGVuIHZpc2libGVcblx0Y29uc3Qgb25UaW1lciA9ICgpID0+IHtcblx0XHRjYWxsYmFjayhbXSwgb2JzZXJ2ZXIpO1xuXHRcdG9ic2VydmVyLnRha2VSZWNvcmRzKCk7IC8vIENsZWFyIHJlY29yZHMgdG8gYXZvaWQgcnVubmluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuXHRcdHF1ZXVlID0gMDtcblx0fTtcblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG5cdFx0aWYgKCFxdWV1ZSkgcXVldWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUob25GcmFtZSk7XG5cdH0pO1xuXG5cdHJldHVybiBvYnNlcnZlcjtcbn1cblxuLyoqXG4gKiBvbk11dGF0aW9uXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IG9ic2VydmUgbXV0YXRpb25zIG9uIGEgc3BlY2lmaWMgY2xhc3MgbmFtZVxuICogQHBhcmFtIGVsIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIGNsYXNzTmFtZSBUaGUgY2xhc3MgbmFtZSB0byBvYnNlcnZlXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIHJ1biB3aGVuIG11dGF0aW9ucyBhcmUgZGV0ZWN0ZWRcbiAqL1xuY29uc3QgTVVUQVRPUlMgPSBuZXcgV2Vha01hcDxFbGVtZW50LCBBcnJheTwoKSA9PiB2b2lkPj4oKTtcbmV4cG9ydCBjb25zdCBvbk11dGF0aW9uID0gPFQgZXh0ZW5kcyBFbGVtZW50Pihcblx0ZWw6IEVsZW1lbnQsXG5cdGNsYXNzTmFtZTogc3RyaW5nLFxuXHRjYWxsYmFjazogKGVsZW1zOiBIVE1MQ29sbGVjdGlvbk9mPFQ+KSA9PiB2b2lkLFxuKSA9PiB7XG5cdGNvbnN0IGVsZW1zID0gZWwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWUpO1xuXHRjb25zdCBtdXRhdG9yID0gTVVUQVRPUlMuZ2V0KGVsKSB8fCBbXTtcblxuXHRpZiAoIW11dGF0b3IubGVuZ3RoKSB7XG5cdFx0TVVUQVRPUlMuc2V0KGVsLCBtdXRhdG9yKTtcblx0XHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKChfLCBvYnNlcnZlcikgPT4ge1xuXHRcdFx0aWYgKGVsLmlzQ29ubmVjdGVkICYmIG11dGF0b3I/Lmxlbmd0aCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIG11dGF0b3IpIGNhbGxiYWNrKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRNVVRBVE9SUy5kZWxldGUoZWwpO1xuXHRcdFx0fVxuXHRcdH0pLm9ic2VydmUoZWwsIHtcblx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogW1wiY2xhc3NcIiwgXCJoaWRkZW5cIl0sXG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdFx0c3VidHJlZTogdHJ1ZSxcblx0XHR9KTtcblx0fVxuXHRtdXRhdG9yLnB1c2goKCkgPT4gY2FsbGJhY2soZWxlbXMgYXMgSFRNTENvbGxlY3Rpb25PZjxUPikpO1xufTtcblxuLyoqXG4gKiBpc0lucHV0TGlrZVxuICogQGRlc2NyaXB0aW9uIENoZWNrIGlmIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKiBAcGFyYW0gZWwgVGhlIGVsZW1lbnQgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKi9cbmV4cG9ydCBjb25zdCBpc0lucHV0TGlrZSA9IChlbDogdW5rbm93bik6IGVsIGlzIEhUTUxJbnB1dEVsZW1lbnQgPT5cblx0ZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcInZhbGlkaXR5XCIgaW4gZWwgJiZcblx0IShlbCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KTtcblxuLyoqXG4gKiB0b0N1c3RvbUVsZW1lbnRQcm9wc1xuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBjb252ZXJ0IHByb3BzIHRvIGN1c3RvbSBlbGVtZW50IGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSBwcm9wcyBUaGUgcHJvcHMgdG8gY29udmVydFxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBwcm9wc1xuICovXG5jb25zdCBTRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xuZXhwb3J0IGNvbnN0IHRvQ3VzdG9tRWxlbWVudFByb3BzID0gKFxuXHR7IGNsYXNzTmFtZSwgaGlkZGVuLCBvcGVuLCAuLi5yZXN0IH06IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRrbGFzcz86IHN0cmluZyxcbikgPT4ge1xuXHRyZXN0LnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyA9IHRydWU7IC8vIE1ha2UgTmV4dC5qcyBoYXBweVxuXHRpZiAocmVzdFtTRUxFQ1RFRF0gIT09IHVuZGVmaW5lZClcblx0XHRyZXN0W1NFTEVDVEVEXSA9IGAkeyhyZXN0W1NFTEVDVEVEXSB8fCBcImZhbHNlXCIpICE9PSBcImZhbHNlXCJ9YDsgLy8gRW5zdXJlIGFyaWEtc2VsZWN0ZWQgYm9vbGVhbiBpcyBzdHJpbmdcblx0aWYgKGNsYXNzTmFtZSB8fCBrbGFzcykgcmVzdC5jbGFzcyA9IGNsc3goa2xhc3MsIGNsYXNzTmFtZSB8fCBcIlwiKTsgLy8gVXNlIGNsYXNzIGluc3RlYWQgb2YgY2xhc3NOYW1lXG5cdGlmIChoaWRkZW4pIHJlc3QuaGlkZGVuID0gdHJ1ZTsgLy8gRW5zdXJlIGJvb2xlYW4gcHJvcCBiZWhhdmlvdXJcblx0aWYgKG9wZW4pIHJlc3Qub3BlbiA9IHRydWU7IC8vIEVuc3VyZSBib29sZWFuIHByb3AgYmVoYXZpb3VyXG5cdHJldHVybiByZXN0O1xufTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBJU19CUk9XU0VSLCBvbiwgb25Mb2FkZWQsIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19CUkVBRENSVU1CUyA9IGAuJHtzdHlsZXMuYnJlYWRjcnVtYnMuc3BsaXQoXCIgXCIpWzBdfWA7XG5jb25zdCBDU1NfQ0hJUCA9IGAuJHtzdHlsZXMuY2hpcC5zcGxpdChcIiBcIilbMF19YDtcbmNvbnN0IENTU19IRUxQVEVYVCA9IGAuJHtzdHlsZXMuaGVscHRleHQuc3BsaXQoXCIgXCIpWzBdfWA7XG5jb25zdCBDU1NfUEFHSU5BVElPTiA9IGAuJHtzdHlsZXMucGFnaW5hdGlvbi5zcGxpdChcIiBcIilbMF19YDtcbmNvbnN0IENMSUNLUyA9IGBzdW1tYXJ5LHUtc3VtbWFyeSxhLGJ1dHRvbixbcm9sZT1cInRhYlwiXSxbcm9sZT1cImJ1dHRvblwiXWA7XG5jb25zdCBFVkVOVFMgPSBcImNsaWNrLHRvZ2dsZSxzdWJtaXQsY2hhbmdlXCI7XG5jb25zdCBNQVRPTU8gPSBcIm1hdHRpbHN5bmV0Lm1hdG9tby5jbG91ZFwiO1xuXG50eXBlIE1hdG9tbyA9IChcblx0fCBzdHJpbmdcblx0fCBudW1iZXJcblx0fCBib29sZWFuXG5cdHwgKCh0aGlzOiBSZWNvcmQ8c3RyaW5nLCA8VD4oKSA9PiBUPikgPT4gdm9pZClcbilbXTtcbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIFdpbmRvdyB7XG5cdFx0X3BhcT86IE1hdG9tb1tdO1xuXHRcdF9tdG0/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+W107XG5cdFx0X210ZHNUcmFja2luZz86IEFuYWx5dGljc0FjdGlvbnNbXCJpbml0XCJdO1xuXHRcdF9tdGRzVW50cmFjaz86ICgpID0+IHZvaWQ7XG5cdH1cbn1cblxuZXhwb3J0IHR5cGUgQW5hbHl0aWNzQWN0aW9ucyA9IHtcblx0aW5pdDoge1xuXHRcdGVuYWJsZWQ/OiBib29sZWFuIHwgXCJkZWJ1Z1wiO1xuXHR9ICYgKFxuXHRcdHwge1xuXHRcdFx0XHRtYXRvbW9JZDogbnVtYmVyIHwgc3RyaW5nO1xuXHRcdFx0XHRtYXRvbW9UYWdNYW5hZ2VySWQ/OiBuZXZlcjtcblx0XHQgIH1cblx0XHR8IHtcblx0XHRcdFx0bWF0b21vSWQ/OiBuZXZlcjtcblx0XHRcdFx0bWF0b21vVGFnTWFuYWdlcklkOiBzdHJpbmc7XG5cdFx0ICB9XG5cdCk7XG5cdHBhZ2V2aWV3OiB7XG5cdFx0dXJsPzogc3RyaW5nO1xuXHRcdHRpdGxlPzogc3RyaW5nO1xuXHR9O1xuXHRldmVudDoge1xuXHRcdGNhdGVnb3J5OiBzdHJpbmc7XG5cdFx0YWN0aW9uOiBzdHJpbmc7XG5cdFx0bmFtZT86IHN0cmluZztcblx0XHR2YWx1ZT86IG51bWJlcjtcblx0fTtcblx0c2VhcmNoOiB7XG5cdFx0cXVlcnk6IHN0cmluZztcblx0XHRjYXRlZ29yeT86IHN0cmluZztcblx0XHRyZXN1bHRzPzogbnVtYmVyO1xuXHR9O1xuXHRtYXRvbW86IE1hdG9tbztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhbmFseXRpY3M8QWN0aW9uIGV4dGVuZHMga2V5b2YgQW5hbHl0aWNzQWN0aW9ucz4oXG5cdGFjdGlvbjogQWN0aW9uLFxuXHRhcmdzID0ge30gYXMgQW5hbHl0aWNzQWN0aW9uc1tBY3Rpb25dLFxuKSB7XG5cdGlmICghSVNfQlJPV1NFUikgcmV0dXJuO1xuXHRpZiAoIXdpbmRvdy5fcGFxKSB7XG5cdFx0d2luZG93Ll9wYXEgPSBbXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcIkhlYXRtYXBTZXNzaW9uUmVjb3JkaW5nOjpkaXNhYmxlXCJdKTsgLy8gRGlzYWJsZSBoZWF0bWFwcyBieSBkZWZhdWx0IGFzIHRoaXMgcmVxdWlyZSBjb29raWVzXG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJlbmFibGVMaW5rVHJhY2tpbmdcIl0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0VHJhY2tlclVybFwiLCBgaHR0cHM6Ly8ke01BVE9NT30vbWF0b21vLnBocGBdKTtcblx0fVxuXHRpZiAoIXdpbmRvdy5fbXRtKSB7XG5cdFx0d2luZG93Ll9tdG0gPSB3aW5kb3cuX210bSB8fCBbXTsgLy8gUHJlcGFyZSBNYXRvbW8gVGFnIE1hbmFnZXJcblx0XHR3aW5kb3cuX210bS5wdXNoKHsgXCJtdG0uc3RhcnRUaW1lXCI6IERhdGUubm93KCksIGV2ZW50OiBcIm10bS5TdGFydFwiIH0pO1xuXHR9XG5cblx0aWYgKGFjdGlvbiA9PT0gXCJpbml0XCIpIHtcblx0XHR3aW5kb3cuX210ZHNUcmFja2luZyA9IHtcblx0XHRcdGVuYWJsZWQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSAhPT0gXCJsb2NhbGhvc3RcIixcblx0XHRcdC4uLndpbmRvdy5fbXRkc1RyYWNraW5nLFxuXHRcdFx0Li4uYXJncyxcblx0XHR9IGFzIEFuYWx5dGljc0FjdGlvbnNbXCJpbml0XCJdO1xuXHRcdGNvbnN0IHsgZW5hYmxlZCwgbWF0b21vSWQsIG1hdG9tb1RhZ01hbmFnZXJJZCB9ID0gd2luZG93Ll9tdGRzVHJhY2tpbmc7XG5cblx0XHRpZiAobWF0b21vSWQpIHdpbmRvdy5fcGFxLnB1c2goW1wic2V0U2l0ZUlkXCIsIG1hdG9tb0lkXSk7XG5cdFx0aWYgKGVuYWJsZWQpIHtcblx0XHRcdGNvbnN0IHNyYyA9IG1hdG9tb1RhZ01hbmFnZXJJZFxuXHRcdFx0XHQ/IGBodHRwczovL2Nkbi5tYXRvbW8uY2xvdWQvJHtNQVRPTU99L2NvbnRhaW5lcl8ke21hdG9tb1RhZ01hbmFnZXJJZH0uanNgXG5cdFx0XHRcdDogYGh0dHBzOi8vY2RuLm1hdG9tby5jbG91ZC8ke01BVE9NT30vbWF0b21vLmpzYDtcblx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHNjcmlwdFtzcmM9XCIke3NyY31cIl1gKSB8fFxuXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZChcblx0XHRcdFx0XHRPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIiksIHtcblx0XHRcdFx0XHRcdGFzeW5jOiB0cnVlLFxuXHRcdFx0XHRcdFx0c3JjLFxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdGlmICh3aW5kb3cuX210ZHNUcmFja2luZz8uZW5hYmxlZCA9PT0gZmFsc2UpIHJldHVybjtcblx0aWYgKHdpbmRvdy5fbXRkc1RyYWNraW5nPy5lbmFibGVkID09PSBcImRlYnVnXCIpXG5cdFx0cmV0dXJuIGNvbnNvbGUuaW5mbyhgYW5hbHl0aWNzKFwiJHthY3Rpb259XCIsIGAsIGFyZ3MsIFwiKVwiKTtcblxuXHRpZiAoYWN0aW9uID09PSBcInBhZ2V2aWV3XCIpIHtcblx0XHRjb25zdCB7IHVybCwgdGl0bGUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcInBhZ2V2aWV3XCJdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0Q3VzdG9tVXJsXCIsIHVybCB8fCBsb2NhdGlvbi5ocmVmXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXREb2N1bWVudFRpdGxlXCIsIHRpdGxlIHx8IGRvY3VtZW50LnRpdGxlXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJ0cmFja1BhZ2VWaWV3XCJdKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwiZXZlbnRcIikge1xuXHRcdGNvbnN0IHsgY2F0ZWdvcnksIGFjdGlvbiwgbmFtZSwgdmFsdWUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcImV2ZW50XCJdO1xuXHRcdGNvbnN0IGV2ZW50ID0gW1widHJhY2tFdmVudFwiLCBjYXRlZ29yeSwgYWN0aW9uLCBuYW1lLCB2YWx1ZV07XG5cblx0XHQvLyBXZSBkbyBub3Qgd2FudCB0byB0cmFjayBldmVudHMgd2l0aCBoYXNoIGluIFVSTCBhcyB0aGlzIGNhdXNlcyBoYXJkLXRvLXJlYWQgZGF0YSxcblx0XHQvLyBzbyB0ZW1wb3JhcmlseSByZW1vdmUgdGhlIGhhc2ggcGFydCwgYW5kIGFkZCBpdCBiYWNrIGFmdGVyIHRoZSBldmVudCBpcyBwdXNoZWRcblx0XHRsZXQgdXJsID0gbG9jYXRpb24uaHJlZjtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcblx0XHRcdGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dXJsID0gdGhpcy5nZXRDdXJyZW50VXJsPHN0cmluZz4oKTtcblx0XHRcdH0sXG5cdFx0XSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRDdXN0b21VcmxcIiwgdXJsLnNwbGl0KFwiI1wiKVswXV0pOyAvLyBTa2lwIGhhc2ggcGFydCBvZiBVUkxcblx0XHR3aW5kb3cuX3BhcS5wdXNoKGV2ZW50LmZpbHRlcigodikgPT4gdiAhPT0gdW5kZWZpbmVkKSk7IC8vIFB1c2ggZXZlbnRcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldEN1c3RvbVVybFwiLCB1cmxdKTsgLy8gUmV2ZXJydCB0byBvcmlnaW5hbCBVUkwgd2l0aCBoYXNoXG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcInNlYXJjaFwiKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0cXVlcnksXG5cdFx0XHRjYXRlZ29yeSA9IGZhbHNlLFxuXHRcdFx0cmVzdWx0cyA9IGZhbHNlLFxuXHRcdH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJzZWFyY2hcIl07XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJ0cmFja1NpdGVTZWFyY2hcIiwgcXVlcnksIGNhdGVnb3J5LCByZXN1bHRzXSk7XG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcIm1hdG9tb1wiKSB7XG5cdFx0d2luZG93Ll9wYXEucHVzaChhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJtYXRvbW9cIl0pO1xuXHR9XG59XG5cbmNvbnN0IGhhbmRsZVRyYWNrID0gKGV2ZW50OiBFdmVudCkgPT5cblx0d2luZG93Ll9tdGRzVHJhY2tpbmc/LmVuYWJsZWQgJiYgc2V0VGltZW91dChwcm9jZXNzVHJhY2ssIDAsIGV2ZW50KTsgLy8gTGV0IG90aGVyIGV2ZW50cyBwcm9jZXNzIGZpcnN0XG5cbmNvbnN0IHByb2Nlc3NUcmFjayA9ICh7IHR5cGUsIHRhcmdldCB9OiBFdmVudCkgPT4ge1xuXHRjb25zdCBlbCA9IHR5cGUgPT09IFwiY2xpY2tcIiA/ICh0YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihDTElDS1MpIDogdGFyZ2V0O1xuXHRpZiAoIShlbCBpbnN0YW5jZW9mIEVsZW1lbnQpIHx8IGF0dHIoZWwsIFwiZGF0YS1hbmFseXRpY3NcIikgPT09IFwiaWdub3JlXCIpXG5cdFx0cmV0dXJuO1xuXG5cdGxldCBhY3Rpb24gPSBcImNsaWNrXCI7XG5cdGxldCBjYXRlZ29yeSA9IFwiQnV0dG9uXCI7XG5cdGxldCBuYW1lID0gbGFiZWwoZWwpIHx8IGhlYWRpbmcoZWwpIHx8IGF0dHIoZWwsIFwiZGF0YS10b29sdGlwXCIpIHx8IFwiXCI7XG5cblx0aWYgKHR5cGUgPT09IFwic3VibWl0XCIpIHtcblx0XHRjYXRlZ29yeSA9IFwiRm9ybVwiO1xuXHRcdGFjdGlvbiA9IFwic3VibWl0XCI7XG5cdFx0bmFtZSA9IG5hbWUgfHwgZG9jdW1lbnQudGl0bGU7XG5cdH0gZWxzZSBpZiAodHlwZSA9PT0gXCJ0b2dnbGVcIikge1xuXHRcdGlmICghZWwubWF0Y2hlcyhcImRpYWxvZzptb2RhbFwiKSkgcmV0dXJuOyAvLyBTa2lwIG5vbi1tb2RhbCBkaWFsb2dzXG5cdFx0Y2F0ZWdvcnkgPSBcIkRpYWxvZ1wiO1xuXHRcdGFjdGlvbiA9IFwib3BlblwiO1xuXHR9IGVsc2UgaWYgKHR5cGUgPT09IFwiY2hhbmdlXCIpIHtcblx0XHRjb25zdCB0eXBlID0gYXR0cihlbCwgXCJ0eXBlXCIpO1xuXHRcdGNvbnN0IGdyb3VwID1cblx0XHRcdHR5cGUgPT09IFwiY2hlY2tib3hcIiB8fCB0eXBlID09PSBcInJhZGlvXCIgPyBlbC5jbG9zZXN0KFwiZmllbGRzZXRcIikgOiBudWxsO1xuXG5cdFx0Y2F0ZWdvcnkgPSBcIkZvcm1cIjtcblx0XHRhY3Rpb24gPSBcImNoYW5nZVwiO1xuXHRcdG5hbWUgPVxuXHRcdFx0bGFiZWwoZ3JvdXAgfHwgZWwpIHx8XG5cdFx0XHR0ZXh0KGdyb3VwPy5xdWVyeVNlbGVjdG9yKFwibGVnZW5kXCIpKSB8fFxuXHRcdFx0dGV4dCgoZWwgYXMgSFRNTElucHV0RWxlbWVudCk/LmxhYmVscz8uWzBdKTtcblx0fSBlbHNlIGlmIChhdHRyKGVsLCBcInJvbGVcIikgPT09IFwidGFiXCIpIHtcblx0XHRjYXRlZ29yeSA9IFwiVGFiXCI7XG5cdFx0YWN0aW9uID0gXCJuYXZpZ2F0ZVwiO1xuXHR9IGVsc2UgaWYgKGF0dHIoZWwsIFwicG9wb3ZlcnRhcmdldFwiKSkge1xuXHRcdGlmICghcG9wb3ZlcihlbCk/Lm1hdGNoZXMoXCI6cG9wb3Zlci1vcGVuXCIpKSByZXR1cm47IC8vIFNraXAgaWYgbm90IG9wZW5cblx0XHRjYXRlZ29yeSA9IGVsLmNsb3Nlc3QoQ1NTX0hFTFBURVhUKSA/IFwiSGVscFRleHRcIiA6IFwiUG9wb3ZlclwiO1xuXHRcdGFjdGlvbiA9IFwib3BlblwiO1xuXHR9IGVsc2UgaWYgKGVsLm5vZGVOYW1lLmVuZHNXaXRoKFwiU1VNTUFSWVwiKSkge1xuXHRcdGlmICghKGVsLnBhcmVudEVsZW1lbnQgYXMgSFRNTERldGFpbHNFbGVtZW50KS5vcGVuKSByZXR1cm47IC8vIFNraXAgaWYgbm90IG9wZW5cblx0XHRjYXRlZ29yeSA9IFwiRGV0YWlsc1wiO1xuXHRcdGFjdGlvbiA9IFwib3BlblwiO1xuXHR9IGVsc2UgaWYgKGF0dHIoZWwsIFwiZGF0YS1jb21tYW5kXCIpID09PSBcInRvZ2dsZS1hcHAtZXhwYW5kZWRcIikge1xuXHRcdGNvbnN0IG9wZW4gPSBzdHlsZShlbCwgXCItLW10ZHMtdG9vbHRpcC1wb3NpdGlvblwiKSA9PT0gXCJub25lXCI7XG5cdFx0Y2F0ZWdvcnkgPSBcIlNpZGViYXJcIjtcblx0XHRhY3Rpb24gPSBvcGVuID8gXCJleHBhbmRcIiA6IFwibWluaW1pemVcIjtcblx0XHRuYW1lID0gKG9wZW4gJiYgYXR0cihlbCwgXCJkYXRhLXRvb2x0aXBcIikpIHx8IHRleHQoZWwpO1xuXHR9IGVsc2UgaWYgKGVsLmNsb3Nlc3QoQ1NTX0JSRUFEQ1JVTUJTKSkge1xuXHRcdGNhdGVnb3J5ID0gXCJCcmVhZGNydW1ic1wiO1xuXHRcdGFjdGlvbiA9IFwibmF2aWdhdGVcIjtcblx0fSBlbHNlIGlmIChlbC5jbG9zZXN0KENTU19QQUdJTkFUSU9OKSkge1xuXHRcdGNhdGVnb3J5ID0gXCJQYWdpbnRhdGlvblwiO1xuXHRcdGFjdGlvbiA9IFwibmF2aWdhdGVcIjtcblx0fSBlbHNlIGlmIChlbC5jbG9zZXN0KENTU19DSElQKSkge1xuXHRcdGNhdGVnb3J5ID0gXCJDaGlwXCI7XG5cdFx0YWN0aW9uID0gZWwuaGFzQXR0cmlidXRlKFwiZGF0YS1yZW1vdmFibGVcIikgPyBcInJlbW92ZVwiIDogXCJjbGlja1wiO1xuXHR9IGVsc2UgaWYgKGVsLmNsb3Nlc3QoXCJ0aFthcmlhLXNvcnRdXCIpKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIlRhYmxlXCI7XG5cdFx0YWN0aW9uID0gXCJzb3J0XCI7XG5cdH0gZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBIVE1MQW5jaG9yRWxlbWVudCkge1xuXHRcdGNhdGVnb3J5ID0gXCJMaW5rXCI7XG5cdFx0YWN0aW9uID0gZWwucHJvdG9jb2wgPT09IFwibWFpbHRvOlwiID8gXCJlbWFpbFwiIDogXCJuYXZpZ2F0ZVwiO1xuXHRcdGlmIChlbC5oYXNBdHRyaWJ1dGUoXCJkb3dubG9hZFwiKSkgYWN0aW9uID0gXCJkb3dubG9hZFwiO1xuXHRcdGVsc2UgaWYgKGVsLmhhc2ggJiYgZWwuaHJlZi5zdGFydHNXaXRoKGxvY2F0aW9uLmhyZWYuc3BsaXQoXCIjXCIpWzBdKSlcblx0XHRcdGFjdGlvbiA9IFwiYW5jaG9yXCI7IC8vIE9ubHkgdHJhY2sgYXMgYW5jaG9yIGlmIHNhbWUgcGFnZVxuXHR9IGVsc2UgaWYgKGVsLmhhc0F0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIikpIHtcblx0XHRpZiAoYXR0cihlbCwgXCJhcmlhLWV4cGFuZGVkXCIpICE9PSBcInRydWVcIikgcmV0dXJuOyAvLyBTa2lwIGlmIG5vdCBvcGVuXG5cdFx0Y2F0ZWdvcnkgPSBcIkV4cGFuZFwiO1xuXHRcdGFjdGlvbiA9IFwib3BlblwiO1xuXHR9XG5cblx0Ly8gUmVzcGVjdCBhdHRyaWJ1dGVzIGFuZCBzZW5kXG5cdGFuYWx5dGljcyhcImV2ZW50XCIsIHtcblx0XHRjYXRlZ29yeTogYXR0cihlbCwgXCJkYXRhLWFuYWx5dGljcy1jYXRlZ29yeVwiKSA/PyBjYXRlZ29yeSxcblx0XHRhY3Rpb246IGF0dHIoZWwsIFwiZGF0YS1hbmFseXRpY3MtYWN0aW9uXCIpID8/IGFjdGlvbixcblx0XHRuYW1lOiBhdHRyKGVsLCBcImRhdGEtYW5hbHl0aWNzLW5hbWVcIikgPz8gbmFtZSxcblx0fSk7XG59O1xuXG4vLyBVdGlsaXRpZXNcbmNvbnN0IHRleHQgPSAoZWw/OiBFbGVtZW50IHwgbnVsbCkgPT4gZWw/LnRleHRDb250ZW50Py50cmltKCkgfHwgXCJcIjtcbmNvbnN0IGxhYmVsID0gKGVsPzogRWxlbWVudCB8IG51bGwpID0+IChlbCAmJiBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIikpIHx8IFwiXCI7XG5jb25zdCBwb3BvdmVyID0gKGVsOiBFbGVtZW50KSA9PlxuXHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhdHRyKGVsLCBcInBvcG92ZXJ0YXJnZXRcIikgfHwgXCJcIik7XG5jb25zdCBzdHlsZSA9IChlbDogRWxlbWVudCwga2V5OiBzdHJpbmcpID0+XG5cdHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKS5nZXRQcm9wZXJ0eVZhbHVlKGtleSk/LnRyaW0oKTtcbmNvbnN0IGhlYWRpbmcgPSAoZWw6IEVsZW1lbnQpID0+IHtcblx0Y29uc3QgYm9keSA9IHRleHQoZWwpO1xuXHRjb25zdCBoZWFkID0gdGV4dChlbC5xdWVyeVNlbGVjdG9yKFwiaDEsaDIsaDMsaDQsaDUsaDZcIikpOyAvLyBOb3RlOiBoZWFkIG1pZ2h0IGJlIGVtcHR5IHN0cmluZyAnJ1xuXHRyZXR1cm4gKGJvZHkuc3RhcnRzV2l0aChoZWFkKSAmJiBoZWFkKSB8fCBib2R5LnNsaWNlKDAsIDEwMCkudHJpbSgpOyAvLyBMaW1pdCB0byAxMDAgY2hhcmFjdGVyc1xufTtcblxub25Mb2FkZWQoKCkgPT4gb24oZG9jdW1lbnQsIEVWRU5UUywgaGFuZGxlVHJhY2ssIFFVSUNLX0VWRU5UKSk7XG4iLCJpZiAoXG5cdHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0d2luZG93LkNTU1N0eWxlU2hlZXQgJiZcblx0ZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzXG4pXG5cdCgoKSA9PiB7XG5cdFx0Y29uc3Qga2V5ID0gXCItLW10ZHMtYXBwLWV4cGFuZGVkXCI7XG5cdFx0Y29uc3Qgc2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXHRcdGNvbnN0IHByZXYgPSAoKSA9PiAhd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk/LmluY2x1ZGVzKFwiZmFsc2VcIik7XG5cblx0XHRkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMucHVzaChzaGVldCk7XG5cdFx0d2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZCA9IChmb3JjZSkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgbmV4dCA9IGZvcmNlID8/ICFwcmV2KCk7XG5cdFx0XHRcdHNoZWV0LnJlcGxhY2VTeW5jPy4oYDpyb290IHsgJHtrZXl9OiB2YXIoJHtrZXl9LS0ke25leHR9KX1gKTtcblx0XHRcdFx0d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgbmV4dCk7XG5cdFx0XHR9IGNhdGNoIChfZXJyKSB7fSAvLyBsb2NhbFN0b3JhZ2UgaXMgZnVsbCBvciByZXBsYWNlU3luYyBpcyBub3Qgc3VwcG9ydGVkXG5cdFx0fTtcblxuXHRcdC8vIFNldCBhbmQgc3RvcmUgaW5pdGlhbCBzdGF0ZVxuXHRcdHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQocHJldigpKTtcblx0fSkoKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBkZWJvdW5jZSwgb24sIG9uTG9hZGVkLCBvbk11dGF0aW9uLCBRVUlDS19FVkVOVCB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IFwiLi9hcHAtdG9nZ2xlXCI7XG5cbmNvbnN0IENTU19BUFAgPSBzdHlsZXMuYXBwLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19TVElDS1kgPSBzdHlsZXMuc3RpY2t5LnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19UT0dHTEUgPSAnW2RhdGEtY29tbWFuZD1cInRvZ2dsZS1hcHAtZXhwYW5kZWRcIl0nO1xuY29uc3QgQ1NTX1NJREVCQVIgPSBgLiR7Q1NTX0FQUH0gPiBkaWFsb2csLiR7Q1NTX0FQUH0gZGlhbG9nIH4gbWFpbmA7XG5cbmNvbnN0IHVzZVRyYW5zaXRpb24gPSAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHtcblx0aWYgKCFkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKSBjYWxsYmFjaygpO1xuXHRlbHNlIGRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24oY2FsbGJhY2spO1xufTtcblxuZXhwb3J0IGNvbnN0IHRvZ2dsZUFwcEV4cGFuZGVkID0gKGZvcmNlPzogYm9vbGVhbikgPT5cblx0Ly8gQHRzLWV4cGVjdC1lcnJvciB3aW5kb3cubXRkc0FwcFRvZ2dsZSBjb21lcyBmcm9tIGFwcC10b2dnbGUuanNcblx0dXNlVHJhbnNpdGlvbigoKSA9PiB3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkPy4oZm9yY2UpKTtcblxuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlQ2xpY2soeyB0YXJnZXQ6IGVsLCBkZWZhdWx0UHJldmVudGVkOiBzdG9wIH06IEV2ZW50KSB7XG5cdGNvbnN0IGxpbmsgPSAoZWwgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihcImFcIik7XG5cdGlmIChsaW5rPy5jbG9zZXN0KFwiZGlhbG9nXCIpICYmIGxpbms/LmNsb3Nlc3QoQ1NTX1NJREVCQVIpKVxuXHRcdHJldHVybiBjbG9zZVNpZGViYXIoKTsgLy8gQ2xvc2Ugc2lkZWJhciBpZiBsaW5rIGlzIGNsaWNrZWQgaW5zaWRlIHNpZGViYXJcblxuXHRpZiAoc3RvcCB8fCAhKGVsIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpIHx8ICFlbC5tYXRjaGVzKENTU19UT0dHTEUpKVxuXHRcdHJldHVybjtcblx0Y29uc3QgaXNEZXNrdG9wID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCkucG9zaXRpb24gPT09IFwic3RpY2t5XCI7XG5cblx0aWYgKGlzRGVza3RvcCkgdG9nZ2xlQXBwRXhwYW5kZWQoKTtcblx0ZWxzZVxuXHRcdHVzZVRyYW5zaXRpb24oKCkgPT4ge1xuXHRcdFx0Y29uc3Qgc2lkZWJhciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpYWxvZ0VsZW1lbnQ+KENTU19TSURFQkFSKTtcblx0XHRcdHNpZGViYXI/LnNldEF0dHJpYnV0ZShcImRhdGEtY2xvc2VkYnlcIiwgXCJhbnlcIik7IC8vIEFsbG93IGNsb3NpbmcgYnkgY2xpY2tpbmcgb3V0c2lkZVxuXHRcdFx0c2lkZWJhcj8uc2hvd01vZGFsKCk7XG5cdFx0fSk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlU2lkZWJhcigpIHtcblx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGlhbG9nRWxlbWVudD4oQ1NTX1NJREVCQVIpPy5jbG9zZSgpO1xufVxuXG4vLyBTY3JvbGwgc3RhdGVcbmxldCBNSU5fWSA9IDA7IC8vIE9mZnNldCB0byBhdm9pZCBzY3JvbGwganVtcCB3aGVuIHN0aWNreSBpcyBzZXQgdG8gcmVsYXRpdmVcbmxldCBTQ1JPTExfVVA6IGJvb2xlYW47XG5sZXQgU1RJQ0sgPSAwOyAvLyAtMSA9IHN0aWNrIHRvcCwgMCA9IHJlbGF0aXZlLCAxID0gc3RpY2sgYm90dG9tXG5sZXQgU1RJQ0tfRUw6IEhUTUxFbGVtZW50O1xubGV0IFNUSUNLX0ggPSAwO1xubGV0IFNUSUNLX1kgPSAwO1xubGV0IFNUVUNLID0gZmFsc2U7IC8vIFVzZWQgdG8gZmlndXJlIGlmIG5hdiBpcyBsYXJnZXIgdGhhbiB2aWV3cG9ydFxubGV0IFdJTl9IID0gMDtcbmxldCBXSU5fWSA9IDA7XG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKFtzdGlja3ldOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRTVElDS19FTCA9IHN0aWNreTtcblx0aGFuZGxlU2Nyb2xsKCk7IC8vIFJ1biBvbiBjb25uZWN0XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVNjcm9sbCgpIHtcblx0aWYgKCFTVElDS19FTD8uaXNDb25uZWN0ZWQpIHJldHVybjtcblx0Y29uc3QgTkVYVF9ZID0gd2luZG93LnNjcm9sbFk7XG5cdGNvbnN0IE5FWFRfVVAgPSBORVhUX1kgPCBXSU5fWTtcblx0V0lOX1kgPSBORVhUX1k7XG5cblx0Ly8gT25seSBjYWxjdWxhdGUgaWYgc2Nyb2xsIGRpcmVjdGlvbiBoYXMgY2hhbmdlZFxuXHRpZiAoTkVYVF9VUCAhPT0gU0NST0xMX1VQKSB7XG5cdFx0TUlOX1kgPSAoU1RJQ0tfRUwucGFyZW50RWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIHx8IDApICsgV0lOX1k7XG5cdFx0U0NST0xMX1VQID0gTkVYVF9VUDtcblx0XHRTVElDS19IID0gU1RJQ0tfRUwub2Zmc2V0SGVpZ2h0O1xuXHRcdFNUSUNLX1kgPSBTVElDS19FTC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyBXSU5fWTtcblx0XHRTVFVDSyA9IFNUSUNLX0VMLm9mZnNldEhlaWdodCA8PSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdFx0V0lOX0ggPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdH1cblxuXHRpZiAoU1RJQ0sgPT09IC0xICYmIFNUVUNLKSByZXR1cm47IC8vIEFsbHdheXMgc3RpY2t5IHdoZW4gc2lkZWJhciBpcyBzbWFsbGVyIHRoYW4gdmlld3BvcnRcblx0aWYgKFNUSUNLICE9PSAtMSAmJiAoU1RVQ0sgfHwgKFNDUk9MTF9VUCAmJiBXSU5fWSA8PSBTVElDS19ZKSkpIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwic3RpY2t5XCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgXCIwcHhcIik7XG5cdFx0U1RJQ0sgPSAtMTsgLy8gTm90IHN0aWNraW5nIHRvIHRvcCBhbmQgc2lkZWJhciBpcyBzbWFsbGVyIHRoYW4gdmlld3BvcnQgb3Igc2Nyb2xsaW5nIHVwXG5cdH0gZWxzZSBpZiAoU1RJQ0sgPT09IC0xICYmICFTQ1JPTExfVVApIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwicmVsYXRpdmVcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBgJHtNYXRoLm1heCgwLCBXSU5fWSAtIE1JTl9ZKX1weGApO1xuXHRcdFNUSUNLID0gMDsgLy8gU3RpY2tpbmcgdG8gdG9wIGFuZCBzY3JvbGxpbmcgZG93blxuXHR9IGVsc2UgaWYgKFNUSUNLICE9PSAxICYmICFTQ1JPTExfVVAgJiYgV0lOX1kgKyBXSU5fSCA+PSBTVElDS19ZICsgU1RJQ0tfSCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJzdGlja3lcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBgJHtXSU5fSCAtIFNUSUNLX0h9cHhgKTtcblx0XHRTVElDSyA9IDE7IC8vIE5vdCBzdGlja2luZyB0byBib3R0b20gYW5kIHNjcm9sbGluZyBkb3duXG5cdH0gZWxzZSBpZiAoU1RJQ0sgPT09IDEgJiYgU0NST0xMX1VQKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInJlbGF0aXZlXCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7U1RJQ0tfWSAtIE1JTl9ZfXB4YCk7XG5cdFx0U1RJQ0sgPSAwOyAvLyBTdGlja2luZyB0byBib3R0b20gYW5kIHNjcm9sbGluZyB1cFxuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19TVElDS1ksIGhhbmRsZU11dGF0aW9uKTtcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlVG9nZ2xlQ2xpY2ssIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcInJlc2l6ZVwiLCBkZWJvdW5jZShjbG9zZVNpZGViYXIsIDEwMCksIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcInNjcm9sbFwiLCBoYW5kbGVTY3JvbGwsIFFVSUNLX0VWRU5UKTtcbn0pO1xuIiwiY29uc3QgZ2V0U3RlcHMgPSAoXG5cdG5vdzogbnVtYmVyLFxuXHRtYXg6IG51bWJlcixcblx0c2hvdyA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbikgPT4ge1xuXHRjb25zdCBvZmZzZXQgPSAoc2hvdyAtIDEpIC8gMjtcblx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1heChNYXRoLm1pbihub3cgLSBNYXRoLmZsb29yKG9mZnNldCksIG1heCAtIHNob3cgKyAxKSwgMSk7XG5cdGNvbnN0IGVuZCA9IE1hdGgubWluKE1hdGgubWF4KG5vdyArIE1hdGguY2VpbChvZmZzZXQpLCBzaG93KSwgbWF4KTtcblx0Y29uc3QgcGFnZXMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBlbmQgKyAxIC0gc3RhcnQgfSwgKF8sIGkpID0+IGkgKyBzdGFydCk7XG5cblx0aWYgKHNob3cgPiA0ICYmIHN0YXJ0ID4gMSkgcGFnZXMuc3BsaWNlKDAsIDIsIDEsIDApO1xuXHRpZiAoc2hvdyA+IDMgJiYgZW5kIDwgbWF4KSBwYWdlcy5zcGxpY2UoLTIsIDIsIDAsIG1heCk7XG5cdHJldHVybiBwYWdlcztcbn07XG5cbmV4cG9ydCBjb25zdCBwYWdpbmF0aW9uID0gKHsgY3VycmVudCA9IDEsIHRvdGFsID0gMTAsIHNob3cgPSA3IH0pID0+ICh7XG5cdHByZXY6IGN1cnJlbnQgPiAxID8gY3VycmVudCAtIDEgOiAwLFxuXHRuZXh0OiBjdXJyZW50IDwgdG90YWwgPyBjdXJyZW50ICsgMSA6IDAsXG5cdHBhZ2VzOiBnZXRTdGVwcyhjdXJyZW50LCB0b3RhbCwgc2hvdykubWFwKChwYWdlLCBpbmRleCkgPT4gKHtcblx0XHRjdXJyZW50OiBwYWdlID09PSBjdXJyZW50ICYmIChcInBhZ2VcIiBhcyBjb25zdCksXG5cdFx0a2V5OiBga2V5LSR7cGFnZX0tJHtpbmRleH1gLFxuXHRcdHBhZ2UsXG5cdH0pKSxcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19CUkVBRENSVU1CUyA9IHN0eWxlcy5icmVhZGNydW1icy5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKGJyZWFkY3J1bWJzOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRmb3IgKGNvbnN0IGJyZWFkY3VtYnMgb2YgYnJlYWRjcnVtYnMpXG5cdFx0YnJlYWRjdW1icy5xdWVyeVNlbGVjdG9yQWxsKFwibGkgYVwiKS5mb3JFYWNoKChjcnVtYiwgaW5kZXgsIHsgbGVuZ3RoIH0pID0+IHtcblx0XHRcdGF0dHIoY3J1bWIsIFwiYXJpYS1jdXJyZW50XCIsIGluZGV4ID09PSBsZW5ndGggLSAxID8gXCJwYWdlXCIgOiBudWxsKTtcblx0XHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19CUkVBRENSVU1CUywgaGFuZGxlTXV0YXRpb24pLFxuKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRhdHRyLFxuXHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyLFxuXHRJU19CUk9XU0VSLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdFFVSUNLX0VWRU5ULFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0RJQUxPRyA9IHN0eWxlcy5kaWFsb2cuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgRElBTE9HUyA9IElTX0JST1dTRVJcblx0PyAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcblx0XHRcdENTU19ESUFMT0csXG5cdFx0KSBhcyBIVE1MQ29sbGVjdGlvbk9mPEhUTUxEaWFsb2dFbGVtZW50Pilcblx0OiBbXTtcblxuY29uc3QgaGFuZGxlTW9kYWwgPSAoKSA9PiB7XG5cdGZvciAoY29uc3QgZGlhbG9nIG9mIERJQUxPR1MpXG5cdFx0aWYgKGRpYWxvZy5pc0Nvbm5lY3RlZCAmJiBkaWFsb2cuc2hvd01vZGFsICYmIGRpYWxvZy5jbG9zZSkge1xuXHRcdFx0aWYgKGRpYWxvZy5tYXRjaGVzKCdbb3Blbl06bm90KFtkYXRhLW1vZGFsPVwiZmFsc2VcIl0pOm5vdCg6bW9kYWwpJykpIHtcblx0XHRcdFx0YXR0cihkaWFsb2csIFwib3BlblwiLCBudWxsKTsgLy8gVXNpbmcgYXR0cmlidXRlIGluc3RlYWQgb2YgLmNsb3NlIHRvIGF2b2lkIGBjbG9zZWAgZXZlbnRcblx0XHRcdFx0ZGlhbG9nLnNob3dNb2RhbCgpO1xuXHRcdFx0fSBlbHNlIGlmIChkaWFsb2cubWF0Y2hlcyhcIjptb2RhbDpub3QoW29wZW5dKVwiKSkge1xuXHRcdFx0XHRhdHRyKGRpYWxvZywgXCJvcGVuXCIsIFwiXCIpOyAvLyBTZXQgYXMgb3BlblxuXHRcdFx0XHRkaWFsb2cuY2xvc2UoKTsgLy8gU28gd2UgY29ycmVjbHR5IGNhbiBjYWxsIC5jbG9zZSwgcmVtb3ZpbmcgPGRpYWxvZz4gZnJvbSAjdG9wLWxheWVyXG5cdFx0XHR9XG5cdFx0fVxufTtcblxuY29uc3QgaGFuZGxlQ2xpY2sgPSAoeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5LCB0YXJnZXQ6IGVsIH06IE1vdXNlRXZlbnQpID0+IHtcblx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTERpYWxvZ0VsZW1lbnQgJiYgYXR0cihlbCwgXCJkYXRhLWNsb3NlZGJ5XCIpID09PSBcImFueVwiKSB7XG5cdFx0Y29uc3QgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQgfSA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdGNvbnN0IGlzSW5zaWRlID0gdG9wIDw9IHkgJiYgeSA8PSBib3R0b20gJiYgbGVmdCA8PSB4ICYmIHggPD0gcmlnaHQ7XG5cdFx0aWYgKCFpc0luc2lkZSkgcmV0dXJuIGVsLmNsb3NlKCk7XG5cdH1cblx0Y29uc3QgZGlhbG9nID0gKGVsIGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oXCJkaWFsb2dcIik7XG5cdGNvbnN0IGNsb3NlID0gZGlhbG9nICYmIChlbCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKCdbZGF0YS1jb21tYW5kPVwiY2xvc2VcIl0nKTtcblx0aWYgKGNsb3NlKSBkaWFsb2cuY2xvc2UoKTtcbn07XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlQ2xpY2sgYXMgRXZlbnRMaXN0ZW5lciwgUVVJQ0tfRVZFTlQpO1xuXHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKGhhbmRsZU1vZGFsKS5vYnNlcnZlKFxuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0XHR7XG5cdFx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFtcIm9wZW5cIl0sXG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdFx0c3VidHJlZTogdHJ1ZSxcblx0XHR9LFxuXHQpO1xufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb24sIG9uTG9hZGVkLCBRVUlDS19FVkVOVCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5mdW5jdGlvbiBoYW5kbGVJbmplY3QoZXZlbnQ6IEV2ZW50ICYgeyBhbmltYXRpb25OYW1lPzogc3RyaW5nIH0pIHtcblx0aWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgIT09IHN0eWxlcy5fZXJyb3JzdW1tYXJ5KSByZXR1cm47XG5cdGNvbnN0IGZpcnN0ID0gKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KT8uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cblx0aWYgKGZpcnN0IGluc3RhbmNlb2YgSFRNTEhlYWRpbmdFbGVtZW50KSB7XG5cdFx0YXR0cihmaXJzdCwgXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuXHRcdGZpcnN0LmZvY3VzKCk7IC8vIEF1dG9mb2N1cyBmaXJzdCBoZWFkaW5nXG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb24oZG9jdW1lbnQsIFwiYW5pbWF0aW9uZW5kXCIsIGhhbmRsZUluamVjdCwgUVVJQ0tfRVZFTlQpKTtcbiIsInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcblxuLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0FORFJPSUQgPSBJU19CUk9XU0VSICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBTQUZFX0xBQkVMTEVEQlkgPSBgJHtJU19BTkRST0lEID8gXCJkYXRhXCIgOiBcImFyaWFcIn0tbGFiZWxsZWRieWA7XG52YXIgRElTUExBWV9CTE9DSyA9IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2sgfVwiO1xudmFyIEZPQ1VTX09VVExJTkUgPSBcIm91dGxpbmU6IDFweCBkb3R0ZWQ7IG91dGxpbmU6IDVweCBhdXRvIEhpZ2hsaWdodDsgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yXCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgYXR0YWNoU3R5bGUgPSAoZWxlbWVudCwgY3NzKSA9PiBlbGVtZW50LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgY3JlYXRlRWxlbWVudChcInNsb3RcIiksXG4gIC8vIFVubmFtZWQgc2xvdCBkb2VzIGF1dG9tYXRpY2FsbHkgcmVuZGVyIGFsbCB0b3AgZWxlbWVudCBub2Rlc1xuICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgY3NzKVxuKTtcbnZhciBvYnNlcnZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBtdXRhdGlvbk9ic2VydmVyID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgcmV0dXJuIG9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gIHRyeSB7XG4gICAgb2JzZXJ2ZXJzLmdldChlbGVtZW50KS5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgfSBjYXRjaCAoX2Vycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgTElWRTtcbnZhciBMSVZFX1NSX0ZJWCA9IDA7XG52YXIgc3BlYWsgPSAodGV4dCkgPT4ge1xuICBpZiAoIUxJVkUpIHtcbiAgICBMSVZFID0gY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBMSVZFLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmZpeGVkO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwXCI7XG4gICAgYXR0cihMSVZFLCBcImFyaWEtbGl2ZVwiLCBcImFzc2VydGl2ZVwiKTtcbiAgfVxuICBpZiAoIUxJVkUuaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKExJVkUpO1xuICBpZiAodGV4dCkgTElWRS50ZXh0Q29udGVudCA9IGAke3RleHR9JHtMSVZFX1NSX0ZJWCsrICUgMiA/IFwiXFx4QTBcIiA6IFwiXCJ9YDtcbn07XG52YXIgc2V0VmFsdWUgPSAoaW5wdXQsIGRhdGEsIHR5cGUgPSBcIlwiKSA9PiB7XG4gIHZhciBfYTIsIF9iO1xuICBjb25zdCBldmVudCA9IHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUsIGRhdGEsIGlucHV0VHlwZTogdHlwZSB9O1xuICBjb25zdCBwcm90byA9IEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiYmVmb3JlaW5wdXRcIiwgZXZlbnQpKTtcbiAgKF9iID0gKF9hMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIFwidmFsdWVcIikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChpbnB1dCwgZGF0YSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJpbnB1dFwiLCBldmVudCkpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImNoYW5nZVwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xufTtcbnZhciBJU19QUkVTUyA9IGZhbHNlO1xudmFyIGlzTW91c2VEb3duID0gKGV2ZW50KSA9PiB7XG4gIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSBcIm1vdXNldXBcIikgSVNfUFJFU1MgPSBmYWxzZTtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2Vkb3duXCIpIHtcbiAgICBJU19QUkVTUyA9IHRydWU7XG4gICAgb24oZG9jdW1lbnQsIFwibW91c2V1cFwiLCBpc01vdXNlRG93biwgeyBvbmNlOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiBJU19QUkVTUztcbn07XG5cbi8vIHUtb3B0aW9uLnRzXG52YXIgRElTQUJMRUQgPSBcImRpc2FibGVkXCI7XG52YXIgU0VMRUNURUQgPSBcInNlbGVjdGVkXCI7XG52YXIgVUhUTUxPcHRpb25FbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW0RJU0FCTEVELCBTRUxFQ1RFRF07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKCFJU19JT1MpIHRoaXMudGFiSW5kZXggPSAtMTtcbiAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKFwicm9sZVwiKSkgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJvcHRpb25cIik7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtZGlzYWJsZWRcIiwgYCR7dGhpcy5kaXNhYmxlZH1gKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1zZWxlY3RlZFwiLCBgJHt0aGlzLnNlbGVjdGVkfWApO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB3aGV0aGVyIHRoZSBvcHRpb24gaW4gdGhlIGxpc3QgYm94IGlzIHRoZSBkZWZhdWx0IGl0ZW0uICovXG4gIGdldCBkZWZhdWx0U2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXNbU0VMRUNURURdO1xuICB9XG4gIHNldCBkZWZhdWx0U2VsZWN0ZWQodmFsdWUpIHtcbiAgICB0aGlzW1NFTEVDVEVEXSA9IHZhbHVlO1xuICB9XG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBESVNBQkxFRCkgIT09IG51bGw7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBESVNBQkxFRCwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgLyoqIFJldHJpZXZlcyBhIHJlZmVyZW5jZSB0byB0aGUgZm9ybSB0aGF0IHRoZSBvYmplY3QgaXMgZW1iZWRkZWQgaW4uICovXG4gIGdldCBmb3JtKCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJmb3JtXCIpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiBhbiBvcHRpb24gaW4gYSBsaXN0IGJveC4gKi9cbiAgZ2V0IGluZGV4KCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLigoX2EyID0gdGhpcy5wYXJlbnRFbGVtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLm9wdGlvbnMpIHx8IFt0aGlzXVxuICAgIF0uaW5kZXhPZih0aGlzKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgYSB2YWx1ZSB0aGF0IHlvdSBjYW4gdXNlIHRvIGltcGxlbWVudCB5b3VyIG93biBsYWJlbCBmdW5jdGlvbmFsaXR5IGZvciB0aGUgb2JqZWN0LiAqL1xuICBnZXQgbGFiZWwoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKF9hMiA9IGF0dHIodGhpcywgXCJsYWJlbFwiKSkgIT0gbnVsbCA/IF9hMiA6IHRoaXMudGV4dDtcbiAgfVxuICBzZXQgbGFiZWwodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwibGFiZWxcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBTRUxFQ1RFRCkgIT09IG51bGw7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBTRUxFQ1RFRCwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSB0ZXh0IHN0cmluZyBzcGVjaWZpZWQgYnkgdGhlIG9wdGlvbiB0YWcuICovXG4gIGdldCB0ZXh0KCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gdGhpcy50ZXh0Q29udGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIH1cbiAgc2V0IHRleHQodGV4dCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB0ZXh0O1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgdmFsdWUgd2hpY2ggaXMgcmV0dXJuZWQgdG8gdGhlIHNlcnZlciB3aGVuIHRoZSBmb3JtIGNvbnRyb2wgaXMgc3VibWl0dGVkLiAqL1xuICBnZXQgdmFsdWUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKF9hMiA9IGF0dHIodGhpcywgXCJ2YWx1ZVwiKSkgIT0gbnVsbCA/IF9hMiA6IHRoaXMudGV4dDtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwidmFsdWVcIiwgdmFsdWUpO1xuICB9XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1vcHRpb25cIiwgVUhUTUxPcHRpb25FbGVtZW50KTtcblxuLy8gdS1kYXRhbGlzdC50c1xudmFyIExJVkVfVElNRVI7XG52YXIgSU5QVVRfREVCT1VOQ0UgPSAwO1xudmFyIElTX01PQklMRSA9IElTX0lPUyB8fCBJU19BTkRST0lEO1xudmFyIEVWRU5UUyA9IFwiY2xpY2ssZm9jdXNvdXQsaW5wdXQsa2V5ZG93bixtb3VzZWRvd24sbW91c2V1cFwiO1xudmFyIEVWRU5UU19JTlBVVCA9IFwiZm9jdXMsZm9jdXNpbixibHVyLGZvY3Vzb3V0XCI7XG52YXIgVEVYVFMgPSB7XG4gIHNpbmd1bGFyOiBcIiVkIGhpdFwiLFxuICBwbHVyYWw6IFwiJWQgaGl0c1wiXG59O1xudmFyIFVIVE1MRGF0YUxpc3RFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3RleHRzID0gX19zcHJlYWRWYWx1ZXMoe30sIFRFWFRTKTtcbiAgICB0aGlzLl92YWx1ZSA9IFwiXCI7XG4gICAgYXR0YWNoU3R5bGUoXG4gICAgICB0aGlzLFxuICAgICAgYCR7RElTUExBWV9CTE9DS31cblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvbikgeyBkaXNwbGF5OiBibG9jazsgY3Vyc29yOiBwb2ludGVyIH1cblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvbjpmb2N1cykgeyAke0ZPQ1VTX09VVExJTkV9IH1cblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvblthcmlhLWhpZGRlbj1cInRydWVcIl0pLFxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uW2Rpc2FibGVkXSksXG5cdFx0XHQ6OnNsb3R0ZWQodS1vcHRpb25baGlkZGVuXSkgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQgfWBcbiAgICApO1xuICB9XG4gIC8vIFVzZWQgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBhbm5vdW5jZW1lbnRzXG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJpZFwiLCAuLi5PYmplY3Qua2V5cyhURVhUUykubWFwKChrZXkpID0+IGBkYXRhLXNyLSR7a2V5fWApXTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLmhpZGRlbiA9IHRydWU7XG4gICAgdGhpcy5fcm9vdCA9IGdldFJvb3QodGhpcyk7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJsaXN0Ym94XCIpO1xuICAgIGF0dHIodGhpcywgXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuICAgIG9uKHRoaXMuX3Jvb3QsIFwiZm9jdXNpblwiLCB0aGlzKTtcbiAgICBvbih0aGlzLl9yb290LCBcImZvY3VzXCIsIHRoaXMsIHRydWUpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywge1xuICAgICAgYXR0cmlidXRlRmlsdGVyOiBbXCJkaXNhYmxlZFwiLCBcImhpZGRlblwiLCBcImxhYmVsXCIsIFwidmFsdWVcIl0sXG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG9mZih0aGlzLl9yb290IHx8IHRoaXMsIFwiZm9jdXNcIiwgdGhpcywgdHJ1ZSk7XG4gICAgb2ZmKHRoaXMuX3Jvb3QgfHwgdGhpcywgXCJmb2N1c2luXCIsIHRoaXMpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgZmFsc2UpO1xuICAgIGRpc2Nvbm5lY3RJbnB1dCh0aGlzKTtcbiAgICB0aGlzLl9yb290ID0gdm9pZCAwO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBfcHJldiwgbmV4dCkge1xuICAgIGNvbnN0IHRleHQgPSBwcm9wID09IG51bGwgPyB2b2lkIDAgOiBwcm9wLnNwbGl0KFwiZGF0YS1zci1cIilbMV07XG4gICAgY29uc3QgY3NzID0gYGlucHV0W2xpc3Q9XCIke3RoaXMuaWR9XCJdYDtcbiAgICBpZiAoVEVYVFNbdGV4dF0pIHRoaXMuX3RleHRzW3RleHRdID0gbmV4dCB8fCBURVhUU1t0ZXh0XTtcbiAgICBlbHNlIGlmICh0aGlzLl9yb290KSB7XG4gICAgICBpZiAodGhpcy5faW5wdXQpIHNldHVwSW5wdXQodGhpcywgdGhpcy5faW5wdXQpO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiB0aGlzLl9yb290LnF1ZXJ5U2VsZWN0b3JBbGwoY3NzKSlcbiAgICAgICAgc2V0dXBJbnB1dCh0aGlzLCBpbnB1dCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3QgeyB0YXJnZXQsIHR5cGUgfSA9IGV2ZW50O1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKHR5cGUgPT09IFwiY2xpY2tcIikgb25DbGljayh0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwiZm9jdXNcIiB8fCB0eXBlID09PSBcImZvY3VzaW5cIikgb25Gb2N1cyh0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwiYmx1clwiIHx8IHR5cGUgPT09IFwiZm9jdXNvdXRcIikgb25CbHVyKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIG9uS2V5RG93bih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgdGhpcy5jb250YWlucyh0YXJnZXQpKVxuICAgICAgaXNNb3VzZURvd24oZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcIm11dGF0aW9uXCIgfHwgdHlwZSA9PT0gXCJpbnB1dFwiKSB7XG4gICAgICBjbGVhclRpbWVvdXQoSU5QVVRfREVCT1VOQ0UpO1xuICAgICAgSU5QVVRfREVCT1VOQ0UgPSBzZXRUaW1lb3V0KG9uSW5wdXQsIDAsIHRoaXMsIGV2ZW50KTtcbiAgICB9XG4gIH1cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ1LW9wdGlvblwiKTtcbiAgfVxufTtcbnZhciBpc0Rpc2FibGVkID0gKGlucHV0KSA9PiAoaW5wdXQgPT0gbnVsbCA/IHZvaWQgMCA6IGlucHV0LmRpc2FibGVkKSB8fCAoaW5wdXQgPT0gbnVsbCA/IHZvaWQgMCA6IGlucHV0LnJlYWRPbmx5KSB8fCBmYWxzZTtcbnZhciBzZXRFeHBhbmRlZCA9IChzZWxmLCBvcGVuKSA9PiB7XG4gIHZhciBfYTIsIF9iLCBfYztcbiAgaWYgKHNlbGYuaGlkZGVuICE9PSBvcGVuKSByZXR1cm47XG4gIHNlbGYuaGlkZGVuID0gaXNEaXNhYmxlZChzZWxmID09IG51bGwgPyB2b2lkIDAgOiBzZWxmLl9pbnB1dCkgfHwgIW9wZW47XG4gIChfYTIgPSBtdXRhdGlvbk9ic2VydmVyKHNlbGYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRha2VSZWNvcmRzKCk7XG4gIGNvbnN0IGlzUG9wb3ZlciA9IHNlbGYuaXNDb25uZWN0ZWQgJiYgc2VsZi5wb3BvdmVyICYmICgoX2IgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmlzQ29ubmVjdGVkKSAmJiAoKF9jID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYy5wb3BvdmVyVGFyZ2V0RWxlbWVudCkgPT09IHNlbGY7XG4gIGlmIChzZWxmLl9pbnB1dCkgc2V0dXBJbnB1dChzZWxmLCBzZWxmLl9pbnB1dCwgb3Blbik7XG4gIGlmIChpc1BvcG92ZXIpIGF0dHIoc2VsZiwgXCJwb3BvdmVyXCIsIFwibWFudWFsXCIpO1xuICBpZiAoaXNQb3BvdmVyKSBzZWxmLnRvZ2dsZVBvcG92ZXIob3Blbik7XG4gIGlmIChvcGVuKSBvbklucHV0KHNlbGYpO1xufTtcbnZhciBkaXNjb25uZWN0SW5wdXQgPSAoc2VsZikgPT4ge1xuICBpZiAoIXNlbGYuX2lucHV0KSByZXR1cm47XG4gIG9mZihzZWxmLl9pbnB1dCB8fCBzZWxmLCBFVkVOVFNfSU5QVVQsIHNlbGYpO1xuICBvZmYoc2VsZi5fcm9vdCB8fCBzZWxmLCBFVkVOVFMsIHNlbGYpO1xuICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gIHNlbGYuX2lucHV0ID0gdm9pZCAwO1xufTtcbnZhciBzZXR1cElucHV0ID0gKHNlbGYsIGlucHV0LCBvcGVuID0gZmFsc2UpID0+IHtcbiAgaWYgKHNlbGYucG9wb3ZlcikgYXR0cihpbnB1dCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKHNlbGYpKTtcbiAgb24oaW5wdXQsIEVWRU5UU19JTlBVVCwgc2VsZiwgdHJ1ZSk7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1hdXRvY29tcGxldGVcIiwgXCJsaXN0XCIpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtY29udHJvbHNcIiwgdXNlSWQoc2VsZikpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7IUlTX01PQklMRSB8fCBvcGVufWApO1xuICBhdHRyKGlucHV0LCBcImF1dG9jb21wbGV0ZVwiLCBcIm9mZlwiKTtcbiAgYXR0cihpbnB1dCwgXCJyb2xlXCIsIGlzRGlzYWJsZWQoaW5wdXQpID8gbnVsbCA6IFwiY29tYm9ib3hcIik7XG59O1xudmFyIG9uRm9jdXMgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgaXNJbnB1dCA9IGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQ7XG4gIGlmIChpc0lucHV0ICYmIGV2ZW50LmlzVHJ1c3RlZCkgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gIGlmIChzZWxmLl9pbnB1dCAhPT0gZXZlbnQudGFyZ2V0ICYmIGlzSW5wdXQgJiYgZXZlbnQudGFyZ2V0Lmxpc3QgPT09IHNlbGYpIHtcbiAgICBpZiAoc2VsZi5faW5wdXQpIGRpc2Nvbm5lY3RJbnB1dChzZWxmKTtcbiAgICBzZWxmLl9pbnB1dCA9IGV2ZW50LnRhcmdldDtcbiAgICBzZWxmLl9pbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNcIikpO1xuICAgIHNlbGYuX2lucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJmb2N1c2luXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgYXR0cihzZWxmLCBTQUZFX0xBQkVMTEVEQlksIHVzZUlkKChfYTIgPSBzZWxmLl9pbnB1dC5sYWJlbHMpID09IG51bGwgPyB2b2lkIDAgOiBfYTJbMF0pKTtcbiAgICBvbihzZWxmLl9yb290IHx8IHNlbGYsIEVWRU5UUywgc2VsZik7XG4gICAgc2V0RXhwYW5kZWQoc2VsZiwgYXR0cihzZWxmLl9pbnB1dCwgXCJpbnB1dG1vZGVcIikgIT09IFwibm9uZVwiKTtcbiAgICBzcGVhaygpO1xuICB9XG59O1xudmFyIG9uQmx1ciA9IChzZWxmLCBldmVudCkgPT4ge1xuICBpZiAoIUlTX0FORFJPSUQgJiYgIWlzTW91c2VEb3duKCkgJiYgc2VsZi5faW5wdXQpXG4gICAgc2V0VGltZW91dChvbkJsdXJyZWQsIDAsIHNlbGYpO1xuICBpZiAoZXZlbnQudGFyZ2V0ID09PSBzZWxmLl9pbnB1dCAmJiBldmVudC5pc1RydXN0ZWQpXG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59O1xudmFyIG9uQmx1cnJlZCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSAoKF9hMiA9IHNlbGYuX3Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuYWN0aXZlRWxlbWVudCkgfHwgbnVsbDtcbiAgY29uc3QgaW5wdXQgPSBzZWxmLl9pbnB1dDtcbiAgaWYgKGlucHV0ICYmIGlucHV0ICE9PSByZWxhdGVkVGFyZ2V0ICYmICFzZWxmLmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImJsdXJcIiwgeyByZWxhdGVkVGFyZ2V0IH0pKTtcbiAgICBpbnB1dC5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEZvY3VzRXZlbnQoXCJmb2N1c291dFwiLCB7IGJ1YmJsZXM6IHRydWUsIHJlbGF0ZWRUYXJnZXQgfSlcbiAgICApO1xuICAgIGRpc2Nvbm5lY3RJbnB1dChzZWxmKTtcbiAgfVxufTtcbnZhciBvbkNsaWNrID0gKHNlbGYsIHsgdGFyZ2V0IH0pID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKCFzZWxmLl9pbnB1dCB8fCBzZWxmLl9pbnB1dCA9PT0gdGFyZ2V0KSByZXR1cm4gc2V0RXhwYW5kZWQoc2VsZiwgdHJ1ZSk7XG4gIGZvciAoY29uc3Qgb3B0IG9mIHNlbGYub3B0aW9ucylcbiAgICBpZiAob3B0LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgIGlmIChhdHRyKHNlbGYsIFwiYXJpYS1tdWx0aXNlbGVjdGFibGVcIikgIT09IFwidHJ1ZVwiKSB7XG4gICAgICAgIChfYTIgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xuICAgICAgICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2V0VmFsdWUoc2VsZi5faW5wdXQsIG9wdC52YWx1ZSk7XG4gICAgfVxuICBpZiAoSVNfQU5EUk9JRCkgb25CbHVycmVkKHNlbGYpO1xufTtcbnZhciBvbktleURvd24gPSAoc2VsZiwgZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IGtleSwgdGFyZ2V0LCBhbHRLZXksIGN0cmxLZXksIHNoaWZ0S2V5LCBtZXRhS2V5IH0gPSBlO1xuICBjb25zdCBpc0VzY2FwZSA9IGtleSA9PT0gXCJFc2NhcGVcIiB8fCBrZXkgPT09IFwiRXNjXCI7XG4gIGlmIChhbHRLZXkgfHwgY3RybEtleSB8fCBtZXRhS2V5IHx8IHNoaWZ0S2V5IHx8IGtleSA9PT0gXCJUYWJcIikgcmV0dXJuO1xuICBpZiAoaXNFc2NhcGUgJiYgIXNlbGYuaGlkZGVuKSBlID09IG51bGwgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gIHNldEV4cGFuZGVkKHNlbGYsICFpc0VzY2FwZSk7XG4gIGNvbnN0IG9wdGlvbnMgPSBbLi4uc2VsZi5vcHRpb25zXS5maWx0ZXIoXG4gICAgKGVsKSA9PiBhdHRyKGVsLCBcImFyaWEtaGlkZGVuXCIpICE9PSBcInRydWVcIiAmJiBlbC5vZmZzZXRIZWlnaHRcbiAgKTtcbiAgY29uc3QgcHJldiA9IG9wdGlvbnMuaW5kZXhPZih0YXJnZXQpO1xuICBsZXQgbmV4dCA9IC0xO1xuICBpZiAoa2V5ID09PSBcIkFycm93RG93blwiKSBuZXh0ID0gKHByZXYgKyAxKSAlIG9wdGlvbnMubGVuZ3RoO1xuICBpZiAoa2V5ID09PSBcIkFycm93VXBcIikgbmV4dCA9ICh+cHJldiA/IHByZXYgOiBvcHRpb25zLmxlbmd0aCkgLSAxO1xuICBpZiAofnByZXYpIHtcbiAgICBpZiAoa2V5ID09PSBcIkhvbWVcIiB8fCBrZXkgPT09IFwiUGFnZVVwXCIpIG5leHQgPSAwO1xuICAgIGlmIChrZXkgPT09IFwiRW5kXCIgfHwga2V5ID09PSBcIlBhZ2VEb3duXCIpIG5leHQgPSBvcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgaWYgKGtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICBvcHRpb25zW3ByZXZdLmNsaWNrKCk7XG4gICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuICBpZiAob3B0aW9uc1tuZXh0XSkgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykgb3B0aW9uLnRhYkluZGV4ID0gLTE7XG4gIGlmIChvcHRpb25zW25leHRdKSBlLnByZXZlbnREZWZhdWx0KCk7XG4gIChfYTIgPSBvcHRpb25zW25leHRdIHx8IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKCk7XG4gIGlmICghb3B0aW9uc1tuZXh0XSAmJiBrZXkgPT09IFwiQXJyb3dVcFwiKVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdmFyIF9hMztcbiAgICAgIHJldHVybiAoX2EzID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTMuc2V0U2VsZWN0aW9uUmFuZ2UoOTk5LCA5OTkpO1xuICAgIH0pO1xufTtcbnZhciBvbklucHV0ID0gKHNlbGYsIGUpID0+IHtcbiAgY29uc3QgeyBfdGV4dHMsIF9yb290LCBfaW5wdXQsIG9wdGlvbnMgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gKF9pbnB1dCA9PSBudWxsID8gdm9pZCAwIDogX2lucHV0LnZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBmaWx0ZXIgPSAhc2VsZi5oYXNBdHRyaWJ1dGUoXCJkYXRhLW5vZmlsdGVyXCIpO1xuICBjb25zdCBoaWRkZW4gPSBbXTtcbiAgY29uc3QgdmlzaWJsZSA9IFtdO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKSB7XG4gICAgY29uc3QgaGlkZSA9IG9wdC5kaXNhYmxlZCB8fCBvcHQuaGlkZGVuIHx8IGZpbHRlciAmJiAhb3B0LmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModmFsdWUpO1xuICAgIChoaWRlID8gaGlkZGVuIDogdmlzaWJsZSkucHVzaChvcHQpO1xuICB9XG4gIGZvciAoY29uc3Qgb3B0IG9mIGhpZGRlbikgYXR0cihvcHQsIFwiYXJpYS1oaWRkZW5cIiwgXCJ0cnVlXCIpO1xuICBmb3IgKGNvbnN0IG9wdCBvZiB2aXNpYmxlKSBhdHRyKG9wdCwgXCJhcmlhLWhpZGRlblwiLCBcImZhbHNlXCIpO1xuICBjb25zdCB0b3RhbCA9IHZpc2libGUubGVuZ3RoO1xuICBjbGVhclRpbWVvdXQoTElWRV9USU1FUik7XG4gIGlmICgoZSA9PSBudWxsID8gdm9pZCAwIDogZS50eXBlKSA9PT0gXCJpbnB1dFwiICYmIHZhbHVlICE9PSBzZWxmLl92YWx1ZSlcbiAgICBMSVZFX1RJTUVSID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gYCR7IXRvdGFsICYmIHNlbGYuaW5uZXJUZXh0LnRyaW0oKSB8fCBgJHtfdGV4dHNbdG90YWwgPT09IDEgPyBcInNpbmd1bGFyXCIgOiBcInBsdXJhbFwiXX1gLnJlcGxhY2UoXCIlZFwiLCBgJHt0b3RhbH1gKX1gO1xuICAgICAgaWYgKCFzZWxmLmhpZGRlbiAmJiAoX3Jvb3QgPT0gbnVsbCA/IHZvaWQgMCA6IF9yb290LmFjdGl2ZUVsZW1lbnQpID09PSBfaW5wdXQpIHNwZWFrKHRleHQpO1xuICAgICAgc2VsZi5fdmFsdWUgPSB2YWx1ZTtcbiAgICB9LCAxZTMpO1xuICBpZiAoSVNfSU9TKVxuICAgIHZpc2libGUuZm9yRWFjaCgob3B0LCBpZHgpID0+IGF0dHIob3B0LCBcInRpdGxlXCIsIGAke2lkeCArIDF9LyR7dG90YWx9YCkpO1xufTtcbmlmIChJU19CUk9XU0VSKVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwibGlzdFwiLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGdldFJvb3QodGhpcykuZ2V0RWxlbWVudEJ5SWQoYXR0cih0aGlzLCBcImxpc3RcIikgfHwgXCJcIik7XG4gICAgfVxuICB9KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtZGF0YWxpc3RcIiwgVUhUTUxEYXRhTGlzdEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTERhdGFMaXN0RWxlbWVudCB9O1xuIiwiaW1wb3J0IHsgVUhUTUxDb21ib2JveEVsZW1lbnQgfSBmcm9tIFwiQHUtZWxlbWVudHMvdS1jb21ib2JveFwiO1xuaW1wb3J0IHsgVUhUTUxEYXRhTGlzdEVsZW1lbnQgfSBmcm9tIFwiQHUtZWxlbWVudHMvdS1kYXRhbGlzdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdGFuY2hvclBvc2l0aW9uLFxuXHRhdHRyLFxuXHRpc0lucHV0TGlrZSxcblx0b24sXG5cdG9uTG9hZGVkLFxuXHRvbk11dGF0aW9uLFxuXHRRVUlDS19FVkVOVCxcblx0dXNlSWQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRklFTEQgPSBzdHlsZXMuZmllbGQuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1ZBTElEQVRJT05TID0gc3R5bGVzLnZhbGlkYXRpb24uc3BsaXQoXCIgXCIpO1xuY29uc3QgQ1NTX1ZBTElEQVRJT04gPSBDU1NfVkFMSURBVElPTlNbMF07XG5cbmNvbnN0IGdldFRleHQgPSAoc3R5bGU6IENTU1N0eWxlRGVjbGFyYXRpb24sIGtleTogc3RyaW5nKSA9PlxuXHRzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGAtLW10ZHMtdGV4dC0ke2tleX1gKT8uc2xpY2UoMSwgLTEpIHx8IFwiXCI7IC8vIHNsaWNlIHRvIHRyaW0gcXVvdGVzXG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKGZpZWxkczogSFRNTENvbGxlY3Rpb25PZjxFbGVtZW50PiwgdmFsaWRhdGU/OiBib29sZWFuKSB7XG5cdGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKVxuXHRcdGlmIChmaWVsZC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0Y29uc3QgbGFiZWxzOiBIVE1MTGFiZWxFbGVtZW50W10gPSBbXTtcblx0XHRcdGNvbnN0IGRlc2NzOiBFbGVtZW50W10gPSBbXTtcblx0XHRcdGNvbnN0IHZhbGlkczogRWxlbWVudFtdID0gW107XG5cdFx0XHRsZXQgY29tYm9ib3g6IFVIVE1MQ29tYm9ib3hFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdFx0XHRsZXQgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblx0XHRcdGxldCB2YWxpZCA9IHRydWU7XG5cblx0XHRcdGZvciAoY29uc3QgZWwgb2YgZmllbGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpKSB7XG5cdFx0XHRcdGlmIChlbCBpbnN0YW5jZW9mIEhUTUxMYWJlbEVsZW1lbnQpIGxhYmVscy5wdXNoKGVsKTtcblx0XHRcdFx0ZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBVSFRNTENvbWJvYm94RWxlbWVudCkgY29tYm9ib3ggPSBlbDtcblx0XHRcdFx0ZWxzZSBpZiAoaXNJbnB1dExpa2UoZWwpICYmICFlbC5oaWRkZW4pIGlucHV0ID0gZWw7XG5cdFx0XHRcdGVsc2UgaWYgKGVsLmhhc0F0dHJpYnV0ZShcImRhdGEtZGVzY3JpcHRpb25cIikpIGRlc2NzLnB1c2goZWwpO1xuXHRcdFx0XHRlbHNlIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1ZBTElEQVRJT04pKSB7XG5cdFx0XHRcdFx0dmFsaWQgPSBhdHRyKGVsLCBcImRhdGEtY29sb3JcIikgPT09IFwic3VjY2Vzc1wiIHx8ICFlbC5jbGllbnRIZWlnaHQ7IC8vIE9ubHkgc2V0IGludmFsaWQgaWYgVmFsaWRhdGlvbiBpcyB2aXNpYmxlXG5cdFx0XHRcdFx0dmFsaWRzLnB1c2goZWwpO1xuXHRcdFx0XHRcdGRlc2NzLnVuc2hpZnQoZWwpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgSFRNTFBhcmFncmFwaEVsZW1lbnQpXG5cdFx0XHRcdFx0ZGVzY3Muc29tZSgoZGVzYykgPT4gZGVzYy5jb250YWlucyhlbCkpIHx8IGRlc2NzLnB1c2goZWwpOyAvLyBPbmx5IGFkZCBpZiBub3QgYWxyZWFkeSBpbnNpZGUgZGVzY3JpcHRpb25cblx0XHRcdH1cblxuXHRcdFx0aWYgKGlucHV0KSB7XG5cdFx0XHRcdGZvciAoY29uc3QgbGFiZWwgb2YgbGFiZWxzKSBsYWJlbC5odG1sRm9yID0gdXNlSWQoaW5wdXQpO1xuXHRcdFx0XHRpZiAodmFsaWRhdGUgJiYgYXR0cihmaWVsZCwgXCJkYXRhLXZhbGlkYXRpb25cIikgPT09IFwiZm9ybVwiKSB7XG5cdFx0XHRcdFx0dmFsaWQgPSBpbnB1dC5tYXRjaGVzKFwiOnZhbGlkXCIpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgZWwgb2YgdmFsaWRzKSBhdHRyKGVsLCBcImhpZGRlblwiLCB2YWxpZCA/IFwiXCIgOiBudWxsKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZW5kZXJDb21ib2JveChjb21ib2JveCk7XG5cdFx0XHRcdHJlbmRlckNvdW50ZXIoaW5wdXQpO1xuXHRcdFx0XHRyZW5kZXJUZXh0YXJlYVNpemUoaW5wdXQpO1xuXHRcdFx0XHRhdHRyKGlucHV0LCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgZGVzY3MubWFwKHVzZUlkKS5qb2luKFwiIFwiKSB8fCBudWxsKTsgLy8gUmVtb3ZlIGlmIGVtcHR5XG5cdFx0XHRcdGF0dHIoaW5wdXQsIFwiYXJpYS1pbnZhbGlkXCIsIGAkeyF2YWxpZH1gKTtcblx0XHRcdH1cblx0XHR9XG59XG5cbi8vIGlPUyBkb2VzIG5vdCBzdXBwb3J0IGZpZWxkLXNpemluZzogY29udGVudCwgc28gd2UgbmVlZCB0byBtYW51YWxseSByZXNpemVcbmZ1bmN0aW9uIHJlbmRlclRleHRhcmVhU2l6ZSh0ZXh0YXJlYTogRWxlbWVudCkge1xuXHRpZiAodGV4dGFyZWEgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG5cdFx0dGV4dGFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXCItLW10ZHMtdGV4dGFyZWEtaGVpZ2h0XCIsIFwiYXV0b1wiKTtcblx0XHR0ZXh0YXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcblx0XHRcdFwiLS1tdGRzLXRleHRhcmVhLWhlaWdodFwiLFxuXHRcdFx0YCR7dGV4dGFyZWEuc2Nyb2xsSGVpZ2h0fXB4YCxcblx0XHQpO1xuXHR9XG59XG5cbi8vIFNldHVwIHRyYW5zbGF0aW9ucyBmcm9tIENTUyBjdXN0b20gcHJvcGVydGllc1xuZnVuY3Rpb24gcmVuZGVyQ29tYm9ib3goZWw6IFVIVE1MQ29tYm9ib3hFbGVtZW50IHwgbnVsbCkge1xuXHRjb25zdCB7IGNvbnRyb2wsIGxpc3QgfSA9IGVsIHx8IHt9O1xuXG5cdGlmIChlbCAmJiBsaXN0ICYmICFlbC5oYXNBdHRyaWJ1dGUoXCJkYXRhLXNyLWFkZGVkXCIpKSB7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLWFkZGVkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtYWRkZWRcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1lbXB0eVwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWVtcHR5XCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3ItZm91bmRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1mb3VuZFwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLWludmFsaWRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1pbnZhbGlkXCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3Itb2ZcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1vZlwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLXJlbW92ZVwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LXJlbW92ZVwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLXJlbW92ZWRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1yZW1vdmVkXCIpKTtcblx0XHRhdHRyKGxpc3QsIFwiZGF0YS1zci1wbHVyYWxcIiwgZ2V0VGV4dChzdHlsZSwgXCJkYXRhbGlzdC1wbHVyYWxcIikpO1xuXHRcdGF0dHIobGlzdCwgXCJkYXRhLXNyLXNpbmd1bGFyXCIsIGdldFRleHQoc3R5bGUsIFwiZGF0YWxpc3Qtc2luZ3VsYXJcIikpO1xuXHR9XG5cdGlmIChsaXN0ICYmIGNvbnRyb2wgJiYgIWxpc3QuaGFzQXR0cmlidXRlKFwicG9wb3ZlclwiKSkge1xuXHRcdGF0dHIobGlzdCwgXCJwb3BvdmVyXCIsIFwibWFudWFsXCIpO1xuXHRcdGF0dHIoY29udHJvbCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKGxpc3QpKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW5kZXJDb3VudGVyKGlucHV0OiBIVE1MSW5wdXRFbGVtZW50KSB7XG5cdGNvbnN0IGVsID0gaW5wdXQ/Lm5leHRFbGVtZW50U2libGluZztcblx0Y29uc3QgbGltaXQgPSBlbCAmJiBhdHRyKGVsLCBcImRhdGEtY291bnRcIik7XG5cblx0aWYgKGVsICYmIGxpbWl0KSB7XG5cdFx0Y29uc3QgcmVtYWluZGVyID0gTnVtYmVyKGxpbWl0KSAtIGlucHV0LnZhbHVlLmxlbmd0aDtcblx0XHRjb25zdCBuZXh0SW52YWxpZCA9IHJlbWFpbmRlciA8IDA7XG5cdFx0Y29uc3QgcHJldkludmFsaWQgPSBhdHRyKGVsLCBcImFyaWEtbGl2ZVwiKSA9PT0gXCJwb2xpdGVcIjtcblx0XHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsIHx8IGlucHV0KTtcblx0XHRjb25zdCBvdmVyID0gZ2V0VGV4dChzdHlsZSwgXCJjb3VudC1vdmVyXCIpO1xuXHRcdGNvbnN0IHVuZGVyID0gZ2V0VGV4dChzdHlsZSwgXCJjb3VudC11bmRlclwiKTtcblxuXHRcdGlmIChwcmV2SW52YWxpZCAhPT0gbmV4dEludmFsaWQpIHtcblx0XHRcdGF0dHIoZWwsIFwiYXJpYS1saXZlXCIsIG5leHRJbnZhbGlkID8gXCJwb2xpdGVcIiA6IFwib2ZmXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBjc3Mgb2YgQ1NTX1ZBTElEQVRJT05TKSBlbC5jbGFzc0xpc3QudG9nZ2xlKGNzcywgbmV4dEludmFsaWQpO1xuXHRcdH1cblx0XHRlbC50ZXh0Q29udGVudCA9IChuZXh0SW52YWxpZCA/IG92ZXIgOiB1bmRlcikucmVwbGFjZShcblx0XHRcdFwiJWRcIixcblx0XHRcdGAke01hdGguYWJzKHJlbWFpbmRlcil9YCxcblx0XHQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRvZ2dsZSh7IHRhcmdldDogZWwsIG5ld1N0YXRlIH06IEV2ZW50ICYgeyBuZXdTdGF0ZT86IHN0cmluZyB9KSB7XG5cdGlmIChlbCBpbnN0YW5jZW9mIFVIVE1MRGF0YUxpc3RFbGVtZW50KSB7XG5cdFx0Y29uc3Qgcm9vdCA9IGVsLmdldFJvb3ROb2RlKCkgYXMgU2hhZG93Um9vdCB8IG51bGw7XG5cdFx0Y29uc3QgYW5jaG9yID0gcm9vdD8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG5cdFx0XHRgW3BvcG92ZXJ0YXJnZXQ9XCIke2VsLmlkfVwiXWAsXG5cdFx0KTtcblxuXHRcdGlmIChuZXdTdGF0ZSA9PT0gXCJjbG9zZWRcIikgYW5jaG9yUG9zaXRpb24oZWwsIGZhbHNlKTtcblx0XHRlbHNlIGlmIChhbmNob3IpIHtcblx0XHRcdGVsLnN0eWxlLndpZHRoID0gYCR7YW5jaG9yLmNsaWVudFdpZHRofXB4YDtcblx0XHRcdGFuY2hvclBvc2l0aW9uKGVsLCBhbmNob3IsIGF0dHIoZWwsIFwiZGF0YS1wb3NpdGlvblwiKSA/PyBcImJvdHRvbVwiLCB0cnVlKTtcblx0XHR9XG5cdH1cbn1cbi8vIFVwZGF0ZSB3aGVuIHR5cGluZ1xuZnVuY3Rpb24gaGFuZGxlSW5wdXQoZXZlbnQ6IEV2ZW50KSB7XG5cdGlmIChpc0lucHV0TGlrZShldmVudC50YXJnZXQpKSB7XG5cdFx0cmVuZGVyQ291bnRlcihldmVudC50YXJnZXQpO1xuXHRcdHJlbmRlclRleHRhcmVhU2l6ZShldmVudC50YXJnZXQpO1xuXHRcdGhhbmRsZURhdGFsaXN0UG9zaXRpb24oZXZlbnQpOyAvLyBSZXBvc2l0aW9uIGxpc3QgZGF0YWxpc3QgLy8gVE9ETyBFbmhhbmNlIGJ5IHVzaW5nIHN0eWxlLmJvdHRvbT9cblx0fVxufVxuXG5mdW5jdGlvbiBoYW5kbGVWYWxkaWF0aW9uKGV2ZW50OiBFdmVudCkge1xuXHRjb25zdCBmaWVsZCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihgLiR7Q1NTX0ZJRUxEfWApO1xuXG5cdGlmIChldmVudC50eXBlID09PSBcImludmFsaWRcIiAmJiBmaWVsZCkgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gUHJldmVudCBicm93c2VycyBmcm9tIHNob3dpbmcgZGVmYXVsdCB2YWxpZGF0aW9uIGJ1YmJsZXNcblx0aGFuZGxlTXV0YXRpb24oZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShDU1NfRklFTEQpLCB0cnVlKTsgLy8gVXBkYXRlIHN0YXRlXG59XG5cbi8vIFBvc2l0aW9uIGNvbWJvYm94IHdoZW4gY2hhbmdpbmcgY29udGVudFxuZnVuY3Rpb24gaGFuZGxlRGF0YWxpc3RQb3NpdGlvbih7IHRhcmdldDogZWwgfTogRXZlbnQpIHtcblx0Y29uc3QgbGlzdCA9XG5cdFx0KGVsIGluc3RhbmNlb2YgVUhUTUxDb21ib2JveEVsZW1lbnQgfHwgZWwgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSAmJlxuXHRcdGVsLmxpc3Q7XG5cdGlmIChsaXN0ICYmICFsaXN0Py5oaWRkZW4pIHtcblx0XHRjb25zdCBwb3NpdGlvbiA9IGF0dHIobGlzdCwgXCJkYXRhLXBvc2l0aW9uXCIpID8/IFwiYm90dG9tXCI7XG5cdFx0c2V0VGltZW91dCgoKSA9PiBhbmNob3JQb3NpdGlvbihsaXN0LCBlbCwgcG9zaXRpb24sIHRydWUpLCAxMCk7IC8vIFJlcG9zaXRpb24gbGlzdCBpZiBub3QgaGlkZGVuXG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX0ZJRUxELCBoYW5kbGVNdXRhdGlvbik7XG5cdG9uKGRvY3VtZW50LCBcImNvbWJvYm94YmVmb3Jlc2VsZWN0XCIsIGhhbmRsZURhdGFsaXN0UG9zaXRpb24sIFFVSUNLX0VWRU5UKTtcblx0b24oZG9jdW1lbnQsIFwiaW5wdXRcIiwgaGFuZGxlSW5wdXQsIFFVSUNLX0VWRU5UKTtcblx0b24oZG9jdW1lbnQsIFwiaW52YWxpZCxzdWJtaXRcIiwgaGFuZGxlVmFsZGlhdGlvbiwgdHJ1ZSk7IC8vIFVzZSBjYXB0dXJlIGFzIGludmFsaWQgYW5kIHN1Ym1pdCBkb2VzIG5vdCBidWJibGVcblx0b24oZG9jdW1lbnQsIFwidG9nZ2xlXCIsIGhhbmRsZVRvZ2dsZSwgUVVJQ0tfRVZFTlQpOyAvLyBVc2UgY2FwdHVyZSBzaW5jZSB0b2dnbGUgZG9lcyBub3QgYnViYmxlXG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBpc0lucHV0TGlrZSwgb25Mb2FkZWQsIG9uTXV0YXRpb24sIHVzZUlkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19GSUVMRFNFVCA9IHN0eWxlcy5maWVsZHNldC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVkFMSURBVElPTiA9IHN0eWxlcy52YWxpZGF0aW9uLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IEFSSUFfREVTQyA9IFwiYXJpYS1kZXNjcmliZWRieVwiO1xuY29uc3QgQVJJQV9JTlZBTElEID0gXCJhcmlhLWludmFsaWRcIjtcblxuLy8gVXNpbmcgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHRvIGVuc3VyZSBpdCBydW5zIGFmdGVyIGZpZWxkLW9ic2VydmVyXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihmaWVsZHNldHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4pIHtcblx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRmb3IgKGNvbnN0IGZpZWxkc2V0IG9mIGZpZWxkc2V0cylcblx0XHRcdGlmIChmaWVsZHNldC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0XHRjb25zdCBpbnB1dHM6IEhUTUxJbnB1dEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0XHRsZXQgdmFsaWRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdFx0XHRcdGxldCB2YWxpZCA9IHRydWU7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBlbCBvZiBmaWVsZHNldC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikpIHtcblx0XHRcdFx0XHRpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkge1xuXHRcdFx0XHRcdFx0dmFsaWQgPSBhdHRyKGVsLCBcImRhdGEtY29sb3JcIikgPT09IFwic3VjY2Vzc1wiIHx8ICFlbC5jbGllbnRIZWlnaHQ7IC8vIE9ubHkgc2V0IGludmFsaWQgaWYgVmFsaWRhdGlvbiBpcyB2aXNpYmxlXG5cdFx0XHRcdFx0XHR2YWxpZElkID0gdXNlSWQoZWwpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoaXNJbnB1dExpa2UoZWwpKSBpbnB1dHMucHVzaChlbCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykge1xuXHRcdFx0XHRcdGNvbnN0IGRlc2MgPSBhdHRyKGlucHV0LCBBUklBX0RFU0MpPy5yZXBsYWNlKHZhbGlkSWQgfHwgXCIjXCIsIFwiXCIpO1xuXG5cdFx0XHRcdFx0YXR0cihpbnB1dCwgQVJJQV9ERVNDLCBgJHt2YWxpZElkIHx8IFwiXCJ9ICR7ZGVzYyB8fCBcIlwifWAudHJpbSgpKTtcblx0XHRcdFx0XHRhdHRyKGlucHV0LCBBUklBX0lOVkFMSUQsIGAkeyF2YWxpZH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRFNFVCwgaGFuZGxlTXV0YXRpb24pLFxuKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfTE9HTyA9IHN0eWxlcy5sb2dvLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oW2xvZ29dOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRpZiAobG9nbz8uaXNDb25uZWN0ZWQgJiYgbG9nbz8uZmlyc3RFbGVtZW50Q2hpbGQgaW5zdGFuY2VvZiBTVkdTVkdFbGVtZW50KSB7XG5cdFx0Zm9yIChjb25zdCBpY29uIG9mIGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvckFsbChcImxpbmtbcmVsfj0naWNvbiddXCIpKVxuXHRcdFx0aWNvbi5zZXRBdHRyaWJ1dGUoXCJyZWxcIiwgXCJkaXNhYmxlZFwiKTsgLy8gRGlzYWJsZSBwcmV2aW91cyBpY29uIChidXQgbm90IHJlbW92ZSBpcyBhcyB0aGlzIG1ha2VzIE5leHQuanMgc2FkKVxuXG5cdFx0Y29uc3Qgc3ZnID0gbG9nby5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRjb25zdCBpc0RvdCA9IGxvZ28/Lmhhc0F0dHJpYnV0ZShcImRhdGEtZW52XCIpO1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoc3ZnKTtcblx0XHRjb25zdCB0ZXh0ID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcImNvbG9yXCIpO1xuXHRcdGNvbnN0IGJhY2sgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1tdGRzLWxvZ28tY29sb3JcIik7XG5cdFx0Y29uc3QgaWNvbiA9IHN2Zy5vdXRlckhUTUxcblx0XHRcdC5yZXBsYWNlKC9cXG4rL2csIFwiIFwiKSAvLyBQcmV2ZW50IGxpbmUgYnJlYWtzXG5cdFx0XHQucmVwbGFjZSgvKGZpbGx8d2lkdGh8aGVpZ2h0fHhtbG5zKT1cIlteXCJdK1wiL2dpLCBcIlwiKVxuXHRcdFx0LnJlcGxhY2UoXCI8c3ZnXCIsIGA8c3ZnIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIGZpbGw9XCIke3RleHR9XCJgKTtcblxuXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoXG5cdFx0XHRPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpLCB7XG5cdFx0XHRcdGhyZWY6IGBkYXRhOmltYWdlL3N2Zyt4bWwsJHtlbmNvZGVVUklDb21wb25lbnQoYDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNTUgNTUnPjxyZWN0IGZpbGw9JyR7aXNEb3QgPyBcIm5vbmVcIiA6IGJhY2t9JyB3aWR0aD0nNTEnIGhlaWdodD0nNTEnIHg9JzInIHk9JzInIHN0cm9rZT0nJHt0ZXh0fScgc3Ryb2tlLWRhc2hhcnJheT0nMC4wOSA2LjM4JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1vcGFjaXR5PScke2lzRG90ID8gMC42IDogMH0nIHN0cm9rZS13aWR0aD0nMi4zJyByeD0nMjUuNScvPjxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg3LjUgNy41KVwiPiR7aWNvbn08L2c+PC9zdmc+YCl9YCxcblx0XHRcdFx0cmVsOiBcImljb25cIixcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19MT0dPLCBoYW5kbGVNdXRhdGlvbikpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGFuY2hvclBvc2l0aW9uLCBhdHRyLCBvbiwgb25Mb2FkZWQsIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19QT1BPVkVSID0gc3R5bGVzLnBvcG92ZXIuc3BsaXQoXCIgXCIpWzBdO1xubGV0IE9QRU5fUE9QT1ZFUlMgPSAwOyAvLyBTcGVlZCB1cCBieSBvbmx5IGNoZWNraW5nIGNsaWNrcyBpZiB3ZSBoYXZlIG9wZW4gcG9wb3ZlcnNcblxuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlKHsgdGFyZ2V0OiBlbCwgbmV3U3RhdGUgfTogRXZlbnQgJiB7IG5ld1N0YXRlPzogc3RyaW5nIH0pIHtcblx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19QT1BPVkVSKSkge1xuXHRcdGNvbnN0IGFuY2hvciA9IChlbC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QpPy5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50Pihcblx0XHRcdGBbcG9wb3ZlcnRhcmdldD1cIiR7ZWwuaWR9XCJdYCxcblx0XHQpO1xuXG5cdFx0aWYgKG5ld1N0YXRlID09PSBcImNsb3NlZFwiKSB7XG5cdFx0XHRPUEVOX1BPUE9WRVJTIC09IDE7XG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgZmFsc2UpO1xuXHRcdH0gZWxzZSBpZiAoYW5jaG9yKSB7XG5cdFx0XHRPUEVOX1BPUE9WRVJTICs9IDE7XG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgYW5jaG9yLCBhdHRyKGVsLCBcImRhdGEtcG9zaXRpb25cIikgfHwgXCJib3R0b21cIik7XG5cdFx0fVxuXHR9XG59XG5cbi8vIFBvbHlmaWxsIHBvcG92ZXJ0YXJnZXQgZm9yIDxhPiAobm90IHN1cHBvcnRlZCBieSBuYXRpdmUpXG4vLyBhbmQgYXV0b21hdGljYWxseSBhc3N1bWUgcG9wb3ZlcnRhcmdldCBpcyB0aGUgY2xvc2VzdCBwYXJlbnQgcG9wb3ZlclxuLy8gYnV0IHJlc3BlY3QgdGhlIHBvcG92ZXJ0YXJnZXQgYW5kIHBvcG92ZXJ0YXJnZXRhY3Rpb24gYXR0cmlidXRlXG5mdW5jdGlvbiBoYW5kbGVMaW5rQ2xpY2soeyB0YXJnZXQgfTogRXZlbnQpIHtcblx0Y29uc3QgY2xvc2UgPVxuXHRcdE9QRU5fUE9QT1ZFUlMgJiYgKHRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKFwiYSxbcG9wb3ZlcnRhcmdldGFjdGlvbl1cIik7XG5cblx0aWYgKGNsb3NlKSB7XG5cdFx0Y29uc3QgYWN0aW9uID0gYXR0cihjbG9zZSwgXCJwb3BvdmVydGFyZ2V0YWN0aW9uXCIpIHx8IFwidG9nZ2xlXCI7XG5cdFx0Y29uc3Qgb3BlbiA9IGFjdGlvbiA9PT0gXCJzaG93XCIgfHwgKGFjdGlvbiA9PT0gXCJoaWRlXCIgPyBmYWxzZSA6IHVuZGVmaW5lZCk7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXR0cihjbG9zZSwgXCJwb3BvdmVydGFyZ2V0XCIpIHx8IFwiXCIpO1xuXHRcdGNvbnN0IHBvcG92ZXIgPSAodGFyZ2V0IHx8IGNsb3NlKS5jbG9zZXN0PEhUTUxFbGVtZW50PihgLiR7Q1NTX1BPUE9WRVJ9YCk7XG5cblx0XHQvLyBQb3BvdmVyIGNhbiBiZSBkaXNjb25uZXRlZCBieSBjbGljayBoYW5kbGVyIGRlZXBlciBkb3duIGluIHRoZSBET00gdGhyZWUgYmVmb3JlIHJlYWNoaW5nIGRvY3VtZW50XG5cdFx0aWYgKHBvcG92ZXI/LmlzQ29ubmVjdGVkICYmIHBvcG92ZXI/LnRvZ2dsZVBvcG92ZXIpXG5cdFx0XHRwb3BvdmVyLnRvZ2dsZVBvcG92ZXIob3Blbik7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJ0b2dnbGVcIiwgaGFuZGxlVG9nZ2xlLCBRVUlDS19FVkVOVCk7IC8vIFVzZSBjYXB0dXJlIHNpbmNlIHRvZ2dsZSBkb2VzIG5vdCBidWJibGVcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlTGlua0NsaWNrKTsgLy8gQWxsb3cgYDxhPmAgdG8gdXNlIGBwb3BvdmVydGFyZ2V0YCBhcyB3ZWxsXG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfVEFCTEUgPSBzdHlsZXMudGFibGUuc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbih0YWJsZXM6IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTFRhYmxlRWxlbWVudD4pIHtcblx0Zm9yIChjb25zdCB0YWJsZSBvZiB0YWJsZXMpIHtcblx0XHRjb25zdCB0aHM6IHN0cmluZ1tdID0gW107IC8vIEFkZCBkYXRhLXRoPVwiXCIgdG8gZWFjaCBjZWxsIHRvIHN1cHBvcnQgZGF0YS1tb2JpbGUgZGVzaWduc1xuXG5cdFx0YXR0cih0YWJsZSwgXCJyb2xlXCIsIFwidGFibGVcIik7IC8vIEFkZCBoZWxwaW5nIHJvbGU9XCJcIiB0byBlbnN1cmUgc2NyZWVuIHJlYWRlcnMgdW5kZXJzdGFuZCB0aGUgdGFibGUgcmVnYXJkbGVzcyBvZiBDU1MgZGlzcGxheVxuXHRcdGlmICh0YWJsZS5jYXB0aW9uKSBhdHRyKHRhYmxlLmNhcHRpb24sIFwicm9sZVwiLCBcImNhcHRpb25cIik7XG5cdFx0Zm9yIChjb25zdCBncm91cCBvZiBbdGFibGUudEhlYWQsIHRhYmxlLnRGb290LCAuLi50YWJsZS50Qm9kaWVzXSlcblx0XHRcdGlmIChncm91cCkge1xuXHRcdFx0XHRhdHRyKGdyb3VwLCBcInJvbGVcIiwgXCJyb3dncm91cFwiKTtcblx0XHRcdFx0Y29uc3QgaXNUYm9keSA9IGdyb3VwLm5vZGVOYW1lID09PSBcIlRCT0RZXCI7XG5cblx0XHRcdFx0Zm9yIChjb25zdCByb3cgb2YgZ3JvdXAucm93cykge1xuXHRcdFx0XHRcdGF0dHIocm93LCBcInJvbGVcIiwgXCJyb3dcIik7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjZWxsIG9mIHJvdy5jZWxscykge1xuXHRcdFx0XHRcdFx0aWYgKGlzVGJvZHkpIGF0dHIoY2VsbCwgXCJkYXRhLXRoXCIsIHRoc1tjZWxsLmNlbGxJbmRleF0gfHwgXCI6ZW1wdHlcIik7XG5cdFx0XHRcdFx0XHRlbHNlIHRocy5wdXNoKGNlbGwuaW5uZXJUZXh0LnRyaW0oKSk7IC8vIFVzaW5nIGlubmVyVGV4dCB0byBvbmx5IGluY2x1ZGUgdmlzaWJsZSB0ZXh0XG5cdFx0XHRcdFx0XHRpZiAoY2VsbC5ub2RlTmFtZSA9PT0gXCJURFwiKSBhdHRyKGNlbGwsIFwicm9sZVwiLCBcImNlbGxcIik7XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0YXR0cihjZWxsLCBcInJvbGVcIiwgaXNUYm9keSA/IFwicm93aGVhZGVyXCIgOiBcImNvbHVtbmhlYWRlclwiKTtcblx0XHRcdFx0XHRcdFx0YXR0cihjZWxsLCBcInNjb3BlXCIsIGlzVGJvZHkgPyBcInJvd1wiIDogXCJjb2xcIik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19UQUJMRSwgaGFuZGxlTXV0YXRpb24pKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBvbiwgb25Mb2FkZWQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1RPR0dMRUdST1VQID0gYC4ke3N0eWxlcy50b2dnbGVncm91cC5zcGxpdChcIiBcIilbMF19YDtcblxuLy8gUHJldmVudCBicm93c2VycyBmcm9tIHNob3dpbmcgZGVmYXVsdCB2YWxpZGF0aW9uIGJ1YmJsZXNcbmZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQ6IEV2ZW50ICYgUGFydGlhbDxLZXlib2FyZEV2ZW50Pikge1xuXHRjb25zdCB7IGtleSwgdGFyZ2V0OiBlbCB9ID0gZXZlbnQ7XG5cdGNvbnN0IGdyb3VwID0gZWwgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIGVsLmNsb3Nlc3QoQ1NTX1RPR0dMRUdST1VQKTtcblxuXHRpZiAoIWdyb3VwKSByZXR1cm47XG5cdGlmIChrZXkgPT09IFwiRW50ZXJcIikgZWwuY2xpY2soKTtcblx0aWYgKGtleT8uc3RhcnRzV2l0aChcIkFycm93XCIpKSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRjb25zdCBpbnB1dHMgPSBncm91cC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpO1xuXHRcdGNvbnN0IGluZGV4ID0gWy4uLmlucHV0c10uaW5kZXhPZihlbCk7XG5cdFx0Y29uc3QgbW92ZSA9IGtleS5tYXRjaCgvQXJyb3coUmlnaHR8RG93bikvKSA/IDEgOiAtMTtcblx0XHRpbnB1dHNbKGlucHV0cy5sZW5ndGggKyBpbmRleCArIG1vdmUpICUgaW5wdXRzLmxlbmd0aF0/LmZvY3VzKCk7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb24oZG9jdW1lbnQsIFwia2V5ZG93blwiLCBoYW5kbGVLZXlEb3duKSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0YW5jaG9yUG9zaXRpb24sXG5cdGF0dHIsXG5cdElTX0JST1dTRVIsXG5cdG9uLFxuXHRvbkxvYWRlZCxcblx0UVVJQ0tfRVZFTlQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBERVNDUklCRURCWSA9IFwiYXJpYS1kZXNjcmliZWRieVwiO1xuY29uc3QgRVNDID0gXCJFc2NhcGVcIjtcbmNvbnN0IExBQkVMTEVEQlkgPSBcImFyaWEtbGFiZWxsZWRieVwiO1xuY29uc3QgUE9TSVRJT05fQ1NTX1BST1BFUlRZID0gXCItLW10ZHMtdG9vbHRpcC1wb3NpdGlvblwiO1xuY29uc3QgVEhST1RUTEVfREVMQVkgPSAzMDA7XG5jb25zdCBUT09MVElQID0gSVNfQlJPV1NFUlxuXHQ/IE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwge1xuXHRcdFx0Y2xhc3NOYW1lOiBzdHlsZXMuX3Rvb2x0aXAsXG5cdFx0XHRpZDogXCJtdGRzLXRvb2x0aXBcIixcblx0XHRcdHBvcG92ZXI6IFwibWFudWFsXCIsXG5cdFx0fSlcblx0OiBudWxsOyAvLyBDcmVhdGUgYSBkdW1teSBlbGVtZW50IHRvIGF2b2lkIG51bGwgY2hlY2tzXG5cbmxldCBBTkNIT1I6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbmxldCBMQVNUX0NBTEwgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5sZXQgVEhST1RUTEU6IG51bWJlciB8IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+ID0gMDtcblxuZnVuY3Rpb24gaGFuZGxlTW92ZSh7IHRhcmdldCwgdHlwZSwga2V5IH06IEV2ZW50ICYgeyBrZXk/OiBzdHJpbmcgfSkge1xuXHRpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIgJiYga2V5ICE9PSBFU0MpIHJldHVybjsgLy8gQWxsb3cgRVNDIGRpc21pc3MgdG8gZm9sbG93IGh0dHBzOi8vd3d3LnczLm9yZy9XQUkvQVJJQS9hcGcvcGF0dGVybnMvdG9vbHRpcC9cblx0Y29uc3Qgd2FpdCA9IExBU1RfQ0FMTCArIFRIUk9UVExFX0RFTEFZIC0gRGF0ZS5ub3coKTtcblx0Y2xlYXJUaW1lb3V0KFRIUk9UVExFKTtcblx0VEhST1RUTEUgPSBzZXRUaW1lb3V0KFxuXHRcdGhhbmRsZU1vdmVUaHJvdHRsZWQsXG5cdFx0TWF0aC5tYXgod2FpdCwgMCksXG5cdFx0a2V5ID09PSBFU0MgPyBudWxsIDogdGFyZ2V0LFxuXHQpO1xufVxuXG4vLyBVc2luZyBhIHRocm90dGxlZCBmdW5jdGlvbiB0byBhdm9pZCBwZXJmb3JtYW5jZSBpc3N1ZXNcbmZ1bmN0aW9uIGhhbmRsZU1vdmVUaHJvdHRsZWQodGFyZ2V0OiBFbGVtZW50IHwgbnVsbCkge1xuXHRMQVNUX0NBTEwgPSBEYXRlLm5vdygpO1xuXG5cdC8vIEJ1aWxkIGFuZCBhcHBlbmQgdG9vbHRpcCBpZiBub3QgZXhpc3Rpbmdcblx0aWYgKCFUT09MVElQIHx8IHRhcmdldCA9PT0gVE9PTFRJUCkgcmV0dXJuOyAvLyBBbGxvdyB0b29sdGlwIHRvIGJlIGhvdmVyZWQsIGZvbGxvd2luZyBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIxLyNjb250ZW50LW9uLWhvdmVyLW9yLWZvY3VzXG5cdGlmICghVE9PTFRJUD8uaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKFRPT0xUSVApOyAvLyBFbnN1cmUgY29ubmVjdGVkXG5cdGxldCBhbmNob3IgPSB0YXJnZXQ/LmNsb3Nlc3Q/LjxFbGVtZW50PihcIltkYXRhLXRvb2x0aXBdXCIpIHx8IG51bGw7XG5cblx0Ly8gTm8gbmVlZCB0byB1cGRhdGVcblx0aWYgKGFuY2hvciA9PT0gQU5DSE9SKSByZXR1cm47XG5cblx0Y29uc3QgY29udGVudCA9IChhbmNob3IgJiYgYXR0cihhbmNob3IsIFwiZGF0YS10b29sdGlwXCIpKSB8fCBcIlwiO1xuXHRjb25zdCBwb3NpdGlvbiA9XG5cdFx0KGFuY2hvciAmJiBhdHRyKGFuY2hvciwgXCJkYXRhLXRvb2x0aXAtcG9zaXRpb25cIikpIHx8XG5cdFx0d2luZG93XG5cdFx0XHQuZ2V0Q29tcHV0ZWRTdHlsZShhbmNob3IgfHwgZG9jdW1lbnQuYm9keSlcblx0XHRcdC5nZXRQcm9wZXJ0eVZhbHVlKFBPU0lUSU9OX0NTU19QUk9QRVJUWSlcblx0XHRcdD8udHJpbSgpIHx8XG5cdFx0XCJ0b3BcIjtcblxuXHRjb25zdCBpc0hpZGRlbiA9XG5cdFx0IWNvbnRlbnQgfHxcblx0XHRjb250ZW50ID09PSBcImZhbHNlXCIgfHxcblx0XHRjb250ZW50ID09PSBcInRydWVcIiB8fFxuXHRcdHBvc2l0aW9uID09PSBcIm5vbmVcIjtcblxuXHRpZiAoaXNIaWRkZW4pIGFuY2hvciA9IG51bGw7IC8vIERvIG5vdCBzaG93IHRvb2x0aXAgaWYgYm9vbGlzaCB2YWx1ZVxuXHRpZiAoYW5jaG9yKSBUT09MVElQLnRleHRDb250ZW50ID0gY29udGVudDsgLy8gT25seSB1cGRhdGUgY29udGVudCBpZiBuZXcgYW5jaG9yXG5cblx0Y29uc3QgaGFkTGFiZWwgPSBBTkNIT1IgJiYgYXR0cihBTkNIT1IsIExBQkVMTEVEQlkpID09PSBUT09MVElQPy5pZDtcblx0Y29uc3QgaGFzTGFiZWwgPVxuXHRcdChhbmNob3IgaW5zdGFuY2VvZiBIVE1MRWxlbWVudFxuXHRcdFx0PyBhbmNob3IuaW5uZXJUZXh0XG5cdFx0XHQ6IGFuY2hvcj8udGV4dENvbnRlbnRcblx0XHQpPy50cmltKCkgfHxcblx0XHRhbmNob3I/Lmhhc0F0dHJpYnV0ZShMQUJFTExFREJZKSB8fFxuXHRcdGFuY2hvcj8uaGFzQXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKTtcblxuXHRBTkNIT1I/LnJlbW92ZUF0dHJpYnV0ZShoYWRMYWJlbCA/IExBQkVMTEVEQlkgOiBERVNDUklCRURCWSk7IC8vIFVubGluayBwcmV2aW91cyBhbmNob3Jcblx0YW5jaG9yUG9zaXRpb24oVE9PTFRJUCwgZmFsc2UpOyAvLyBSZXNldCBhbmNob3IgcG9zaXRpb25cblxuXHRBTkNIT1IgPSBhbmNob3I7IC8vIFN0b3JlIG5ldyBhbmNob3IgLSBtaWdodCBiZSBudWxsIGlmIG5vIG5ldyBhbmNob3Jcblx0aWYgKEFOQ0hPUikgYXR0cihBTkNIT1IsIGhhc0xhYmVsID8gREVTQ1JJQkVEQlkgOiBMQUJFTExFREJZLCBUT09MVElQPy5pZCk7IC8vIFVzZSB0b29sdGlwIGFzIGRlc2NyaXB0aW9uIGlmIGFsbHJlYWR5IGhhcyBsYWJlbFxuXHRpZiAoQU5DSE9SKSBUT09MVElQLmhpZGVQb3BvdmVyKCk7IC8vIEhpZGUgdG9vbHRpcCBzbyBpdCBjYW4gYmUgcGxhY2VkIG9uIHRvcC1sYXllciBvbiBuZXh0IHNob3dcblx0VE9PTFRJUC50b2dnbGVQb3BvdmVyKCEhYW5jaG9yKTtcblx0YW5jaG9yUG9zaXRpb24oVE9PTFRJUCwgYW5jaG9yIHx8IGZhbHNlLCBwb3NpdGlvbik7XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwiYmx1cixmb2N1cyxtb3VzZW91dCxtb3VzZW92ZXJcIiwgaGFuZGxlTW92ZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwia2V5ZG93blwiLCBoYW5kbGVNb3ZlLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJibHVyXCIsIGhhbmRsZU1vdmUsIFFVSUNLX0VWRU5UKTtcbn0pO1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG5cbi8vIHUtZGV0YWlscy50c1xudmFyIFVIVE1MRGV0YWlsc0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgLy8gVXNpbmcgdW5kZXJzY29yZSBpbnN0ZWFkIG9mIHByaXZhdGUgZmllbGRzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgIHRoaXMuX2NvbnRlbnQgPSBudWxsO1xuICAgIHRoaXMuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBuYW1lOiBcInN1bW1hcnlcIiB9KSxcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIsIG51bGwsIHsgcGFydDogXCJkZXRhaWxzLWNvbnRlbnRcIiB9KSxcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYCR7RElTUExBWV9CTE9DS31cbiAgICAgICAgOjpzbG90dGVkKHUtc3VtbWFyeSkgeyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGJsb2NrIH1cblx0XHRcdFx0OjpzbG90dGVkKHUtc3VtbWFyeSk6OmJlZm9yZSB7IGNvbnRlbnQ6ICcnOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IG1hcmdpbi1pbmxpbmU6IC4wNWVtIC4zMTI1ZW07IGJvcmRlci1ibG9jazogLjMxMjVlbSBzb2xpZCB0cmFuc3BhcmVudDsgYm9yZGVyLWlubGluZS1zdGFydDogLjVlbSBzb2xpZCB9XG5cdFx0XHRcdDo6c2xvdHRlZCh1LXN1bW1hcnlbYXJpYS1leHBhbmRlZD1cInRydWVcIl0pOjpiZWZvcmUgeyByb3RhdGU6IDkwZGVnIH1cblx0XHRcdFx0Omhvc3QgPiBbcGFydD1cImRldGFpbHMtY29udGVudFwiXTpub3QoW2hpZGRlbj1cIlwiXSkgeyBkaXNwbGF5OiBibG9jayB9YFxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcIm9wZW5cIl07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdmFyIF9hMjtcbiAgICB0aGlzLl9jb250ZW50ID0gKF9hMiA9IHRoaXMuc2hhZG93Um9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jaGlsZHJlblsxXTtcbiAgICBvbih0aGlzLl9jb250ZW50LCBcImJlZm9yZW1hdGNoXCIsIHRoaXMpO1xuICAgIG9uKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLl9jb250ZW50KSBvZmYodGhpcy5fY29udGVudCwgXCJiZWZvcmVtYXRjaFwiLCB0aGlzKTtcbiAgICBvZmYodGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIHRoaXMuX2NvbnRlbnQgPSBudWxsO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBwcmV2LCBuZXh0KSB7XG4gICAgY29uc3QgaGlkZSA9IFwib25iZWZvcmVtYXRjaFwiIGluIHRoaXMgPyBcInVudGlsLWZvdW5kXCIgOiB0cnVlO1xuICAgIGNvbnN0IG9wZW4gPSB0aGlzLm9wZW47XG4gICAgZm9yIChjb25zdCBlbCBvZiB0aGlzLmNoaWxkcmVuKVxuICAgICAgaWYgKGVsLm5vZGVOYW1lID09PSBcIlUtU1VNTUFSWVwiKSBhdHRyKGVsLCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7b3Blbn1gKTtcbiAgICBpZiAodGhpcy5fY29udGVudCkge1xuICAgICAgYXR0cih0aGlzLl9jb250ZW50LCBcImFyaWEtaGlkZGVuXCIsIGAkeyFvcGVufWApO1xuICAgICAgdGhpcy5fY29udGVudC5oaWRkZW4gPSBvcGVuID8gZmFsc2UgOiBoaWRlO1xuICAgIH1cbiAgICBpZiAob3BlbiAmJiB0aGlzLm5hbWUpIHtcbiAgICAgIGNvbnN0IHVEZXRhaWxzTGlzdCA9IGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYCR7dGhpcy5ub2RlTmFtZX1bbmFtZT1cIiR7dGhpcy5uYW1lfVwiXWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IHVEZXRhaWxzIG9mIHVEZXRhaWxzTGlzdClcbiAgICAgICAgaWYgKHVEZXRhaWxzICE9PSB0aGlzKSB1RGV0YWlscy5vcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChwcm9wID09PSBcIm9wZW5cIiAmJiBwcmV2ID09PSBudWxsICE9PSAobmV4dCA9PT0gbnVsbCkpXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwidG9nZ2xlXCIpKTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHN1bW1hcnkgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCI6c2NvcGUgPiB1LXN1bW1hcnlcIik7XG4gICAgY29uc3QgaXNTdW1tYXJ5ID0gc3VtbWFyeSA9PSBudWxsID8gdm9pZCAwIDogc3VtbWFyeS5jb250YWlucyhldmVudC50YXJnZXQpO1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmVmb3JlbWF0Y2hcIikgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICBpZiAoaXNTdW1tYXJ5ICYmIGV2ZW50LnR5cGUgPT09IFwia2V5ZG93blwiKSBhc0J1dHRvbihldmVudCk7XG4gICAgaWYgKGlzU3VtbWFyeSAmJiBldmVudC50eXBlID09PSBcImNsaWNrXCIpIHRoaXMub3BlbiA9ICF0aGlzLm9wZW47XG4gIH1cbiAgZ2V0IG9wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwib3BlblwiKTtcbiAgfVxuICBzZXQgb3Blbih2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJvcGVuXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIFwibmFtZVwiKSB8fCBcIlwiO1xuICB9XG4gIHNldCBuYW1lKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcIm5hbWVcIiwgdmFsdWUpO1xuICB9XG59O1xudmFyIFVIVE1MU3VtbWFyeUVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuICAgIHRoaXMuc2xvdCA9IFwic3VtbWFyeVwiO1xuICAgIHRoaXMudGFiSW5kZXggPSAwO1xuICB9XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1kZXRhaWxzXCIsIFVIVE1MRGV0YWlsc0VsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1zdW1tYXJ5XCIsIFVIVE1MU3VtbWFyeUVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTERldGFpbHNFbGVtZW50LCBVSFRNTFN1bW1hcnlFbGVtZW50IH07XG4iLCIvLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfRklSRUZPWCA9IElTX0JST1dTRVIgJiYgL2ZpcmVmb3gvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBfYTI7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gKF9hMiA9IGVsLmdldEF0dHJpYnV0ZShuYW1lKSkgIT0gbnVsbCA/IF9hMiA6IG51bGw7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIGdldExhYmVsID0gKGVsKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSBnZXRSb290KGVsKTtcbiAgY29uc3QgbGFiZWwgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIikgfHwgXCJcIjtcbiAgY29uc3QgbGFiZWxzID0gKChfYTIgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxsZWRieVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkuc3BsaXQoL1xccysvKSkgfHwgW107XG4gIHJldHVybiBbXG4gICAgLi4ubGFiZWxzLm1hcCgoaWQyKSA9PiByb290ID09IG51bGwgPyB2b2lkIDAgOiByb290LnF1ZXJ5U2VsZWN0b3IoYFtpZD1cIiR7aWQyfVwiXWApKSxcbiAgICAvLyBHZXQgYWxsIGxhYmVsbGVkYnkgZWxlbWVudHNcbiAgICAuLi5BcnJheS5mcm9tKGVsLmxhYmVscyB8fCBbXSlcbiAgICAvLyBHZXQgYWxsIDxsYWJlbD4gZWxlbWVudHNcbiAgXS5yZWR1Y2UoKGFjYywgZWwyKSA9PiB7XG4gICAgdmFyIF9hMztcbiAgICByZXR1cm4gYWNjIHx8ICgoX2EzID0gZWwyID09IG51bGwgPyB2b2lkIDAgOiBlbDIuaW5uZXJUZXh0KSA9PSBudWxsID8gdm9pZCAwIDogX2EzLnRyaW0oKSkgfHwgXCJcIjtcbiAgfSwgbGFiZWwpO1xufTtcblxuLy8gdS1wcm9ncmVzcy50c1xudmFyIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbnZhciBVSFRNTFByb2dyZXNzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWxhYmVsbGVkYnlcIiwgXCJ2YWx1ZVwiLCBcIm1heFwiXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBoaWRkZW46IFwiXCIgfSksXG4gICAgICAvLyBTbG90IGhpZGluZyBjb250ZW50IGFsbG93cyBsZWdhY3kgYnJvd3NlciB0byBkaXNwbGF5IGZhbGxiYWNrIHRleHRcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYDpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGJvcmRlcjogMXB4IHNvbGlkOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGhlaWdodDogLjVlbTsgd2lkdGg6IDEwZW07IG92ZXJmbG93OiBoaWRkZW4gfVxuICAgICAgICA6aG9zdDo6YmVmb3JlIHsgY29udGVudDogJyc7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDEwMCU7IGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsgd2lkdGg6IHZhcigtLXBlcmNlbnRhZ2UsIDAlKTsgdHJhbnNpdGlvbjogd2lkdGggLjJzIH1cbiAgICAgICAgOmhvc3QoOm5vdChbdmFsdWVdKSkgeyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsY3VycmVudENvbG9yIDI1JSwgdHJhbnNwYXJlbnQgNTAlLCBjdXJyZW50Q29sb3IgNzUlKSA1MCUvNDAwJSB9XG4gICAgICAgIEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSkgeyA6aG9zdCB7IGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZSAycyBsaW5lYXIgaW5maW5pdGUgfSAgfVxuICAgICAgICBAa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUgeyBmcm9tIHsgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAxMDAlIH0gdG8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IDAgfSB9YFxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgaWYgKFNLSVBfQVRUUl9DSEFOR0UpIHJldHVybjtcbiAgICBTS0lQX0FUVFJfQ0hBTkdFID0gdHJ1ZTtcbiAgICBjb25zdCByb2xlSW1hZ2UgPSBJU19JT1MgfHwgSVNfRklSRUZPWDtcbiAgICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCh0aGlzLnBvc2l0aW9uICogMTAwKSk7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcGVyY2VudGFnZVwiLCBgJHtwZXJjZW50YWdlfSVgKTtcbiAgICBsZXQgbGFiZWwgPSBnZXRMYWJlbCh0aGlzKTtcbiAgICBpZiAocm9sZUltYWdlKSBsYWJlbCA9IGAke2xhYmVsLnJlcGxhY2UoL1xcZCslJC8sIFwiXCIpfSAke3BlcmNlbnRhZ2V9JWA7XG4gICAgaWYgKElTX0ZJUkVGT1gpIGZvciAoY29uc3QgZWwgb2YgdGhpcy5sYWJlbHMpIGF0dHIoZWwsIFwiYXJpYS1sYWJlbFwiLCBsYWJlbCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtYnVzeVwiLCBgJHt0aGlzLnBvc2l0aW9uID09PSAtMX1gKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1sYWJlbFwiLCBsYWJlbC50cmltKCkpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWxhYmVsbGVkYnlcIiwgbnVsbCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVtYXhcIiwgXCIxMDBcIik7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVtaW5cIiwgXCIwXCIpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXZhbHVlbm93XCIsIGAke3BlcmNlbnRhZ2V9YCk7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgcm9sZUltYWdlID8gXCJpbWdcIiA6IFwicHJvZ3Jlc3NiYXJcIik7XG4gICAgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xuICB9XG4gIGdldCBsYWJlbHMoKSB7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLmNsb3Nlc3QoXCJsYWJlbDpub3QoW2Zvcl0pXCIpO1xuICAgIGNvbnN0IGlkMiA9IHVzZUlkKHRoaXMpO1xuICAgIGlmIChsYWJlbCkgbGFiZWwuaHRtbEZvciA9IGlkMjtcbiAgICBjb25zdCBlbCA9IGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGBsYWJlbFtmb3I9XCIke2lkMn1cIl1gXG4gICAgKTtcbiAgICByZXR1cm4gZWw7XG4gIH1cbiAgZ2V0IHBvc2l0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlID09PSBudWxsID8gLTEgOiBNYXRoLm1pbih0aGlzLnZhbHVlIC8gdGhpcy5tYXgsIDEpO1xuICB9XG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0TnVtYmVyKHRoaXMsIFwidmFsdWVcIik7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgc2V0TnVtYmVyKHRoaXMsIFwidmFsdWVcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBtYXgoKSB7XG4gICAgcmV0dXJuIGdldE51bWJlcih0aGlzLCBcIm1heFwiKSB8fCAxO1xuICB9XG4gIHNldCBtYXgobWF4KSB7XG4gICAgc2V0TnVtYmVyKHRoaXMsIFwibWF4XCIsIG1heCk7XG4gIH1cbn07XG4vLyBQcmV2ZW50IENocm9tZSBEZXZUb29scyB3YXJuaW5nIGFib3V0IDxsYWJlbCBmb3I9XCJcIj4gcG9pbnRpbmcgdG8gPHUtcHJvZ3Jlc3M+XG5VSFRNTFByb2dyZXNzRWxlbWVudC5mb3JtQXNzb2NpYXRlZCA9IHRydWU7XG52YXIgaXNOdW1lcmljID0gKHZhbHVlKSA9PiAhTnVtYmVyLmlzTmFOKE51bWJlci5wYXJzZUZsb2F0KGAke3ZhbHVlfWApKSAmJiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKHZhbHVlKSk7XG52YXIgZ2V0TnVtYmVyID0gKGVsLCBrZXkpID0+IHtcbiAgY29uc3QgdmFsdWUgPSBhdHRyKGVsLCBrZXkpO1xuICByZXR1cm4gaXNOdW1lcmljKHZhbHVlKSA/IE1hdGgubWF4KDAsIE51bWJlci5wYXJzZUZsb2F0KHZhbHVlKSkgOiBudWxsO1xufTtcbnZhciBzZXROdW1iZXIgPSAoZWwsIGtleSwgdmFsKSA9PiB7XG4gIGlmICh2YWwgPT09IG51bGwgfHwgaXNOdW1lcmljKHZhbCkpIGF0dHIoZWwsIGtleSwgYCR7dmFsfWApO1xuICBlbHNlIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNldCBub24tbnVtZXJpYyAnJHthdHRyfSc6ICcke3ZhbH0nYCk7XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1wcm9ncmVzc1wiLCBVSFRNTFByb2dyZXNzRWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MUHJvZ3Jlc3NFbGVtZW50IH07XG4iXSwibmFtZXMiOlsiX19kZWZQcm9wIiwiX19nZXRPd25Qcm9wU3ltYm9scyIsIl9faGFzT3duUHJvcCIsIl9fcHJvcElzRW51bSIsIl9fZGVmTm9ybWFsUHJvcCIsIm9iaiIsImtleSIsInZhbHVlIiwiX19zcHJlYWRWYWx1ZXMiLCJhIiwiYiIsInByb3AiLCJJU19CUk9XU0VSIiwiSVNfQU5EUk9JRCIsIklTX0ZJUkVGT1giLCJJU19JT1MiLCJfYSIsIklTX0JST1dTRVIkNSIsIkZPQ1VTX09VVExJTkUiLCJVSFRNTEVsZW1lbnQiLCJhdHRyIiwiZWwiLCJuYW1lIiwiZXZlbnRzIiwiYWN0aW9uIiwiZWxlbWVudCIsInJlc3QiLCJ0eXBlIiwib24iLCJvZmYiLCJvYnNlcnZlcnMiLCJtdXRhdGlvbk9ic2VydmVyIiwib3B0aW9ucyIsIm9ic2VydmVyIiwiZGV0YWlsIiwiYXNCdXR0b24iLCJldmVudCIsImlzQ2xpY2siLCJnZXRSb290Iiwibm9kZSIsIl9hMiIsInJvb3QiLCJpZCIsInVzZUlkIiwiY3JlYXRlRWxlbWVudCIsInRhZ05hbWUiLCJ0ZXh0MiIsImF0dHJzIiwidmFsIiwiY3VzdG9tRWxlbWVudHMiLCJpbnN0YW5jZSIsIkxJVkUiLCJMSVZFX1NSX0ZJWCIsInNwZWFrIiwic2V0VmFsdWUiLCJpbnB1dCIsImRhdGEiLCJfYiIsInByb3RvIiwiSVNfUFJFU1MiLCJpc01vdXNlRG93biIsIkVWRU5UUyIsIkVWRU5UX09OQ0UiLCJJU19GSVJFRk9YX0RFU0tUT1AiLCJJU19NT0JJTEUiLCJGQUxTRSIsIlRFWFRTIiwiVUhUTUxDb21ib2JveEVsZW1lbnQiLCJyZW5kZXIiLCJzeW5jSW5wdXRWYWx1ZSIsIl8iLCJ0YXJnZXQiLCJpc0Rpc2FibGVkIiwib25CbHVyIiwib25DbGljayIsIm9uRm9jdXMiLCJvbklucHV0Iiwib25LZXlEb3duIiwidGFnIiwidGV4dCIsImlzRGF0YSIsImNvbnRyb2wiLCJzZWxmIiwiX2ZvY3VzIiwiX3RleHRzIiwiaXRlbXMiLCJsaXN0IiwibXVsdGlwbGUiLCJsYWJlbCIsImVkaXRzIiwiYWRkZWROb2RlcyIsInJlbW92ZWROb2RlcyIsInNob3VsZEFubm91bmNlIiwiYXJpYUV4cGFuZGVkIiwiaW5wdXRNb2RlIiwibmV4dEZvY3VzIiwiaXNSZW1vdmUiLCJfYTMiLCJpZHgiLCJzZWxlY3QiLCJyZW1vdmUiLCJpdGVtMiIsIm9wdGlvbiIsImxhYmVsMiIsImFyaWEiLCJvcHQiLCJpdGVtIiwic3luY0NsZWFyV2l0aElucHV0Iiwic3luY09wdGlvbnNXaXRoSXRlbXMiLCJfc3BlYWsiLCJ2YWx1ZXMiLCJkaXNwYXRjaE1hdGNoIiwiY2hhbmdlIiwiY3JlYXRhYmxlIiwicXVlcnkiLCJtYXRjaCIsIm8iLCJkaXNwYXRjaENoYW5nZSIsInJlbW92YWJsZSIsImFkZCIsImkiLCJvbkJsdXJyZWQiLCJ4IiwieSIsImNsZWFyIiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0IiwicmVwZWF0IiwiaXNDb250cm9sIiwiaW5UZXh0IiwiaW5kZXgiLCJmb3JtIiwiSVNfQlJPV1NFUiQ0IiwiU0FGRV9MQUJFTExFREJZIiwiRElTUExBWV9CTE9DSyIsImF0dGFjaFN0eWxlIiwiY3NzIiwiQVJJQV9DT05UUk9MUyIsIkFSSUFfU0VMRUNURUQiLCJVSFRNTFRhYnNFbGVtZW50IiwicXVlcnlXaXRob3V0TmVzdGVkIiwiZ2V0U2VsZWN0ZWRJbmRleCIsInNldFNlbGVjdGVkIiwiVUhUTUxUYWJMaXN0RWxlbWVudCIsInRhYiIsInRhYnMiLCJwcmV2IiwibmV4dCIsIlNLSVBfQVRUUl9DSEFOR0UiLCJVSFRNTFRhYkVsZW1lbnQiLCJwYW5lbHMiLCJuZXh0UGFuZWwiLCJnZXRQYW5lbCIsInBhbmVsIiwidGFibGlzdCIsInRhYkxpc3QiLCJVSFRNTFRhYlBhbmVsRWxlbWVudCIsImlzRm9jdXNhYmxlIiwiaWQyIiwiUVVJQ0tfRVZFTlQiLCJkZWJvdW5jZSIsImNhbGxiYWNrIiwiZGVsYXkiLCJ0aW1lciIsImFyZ3MiLCJVVUlEIiwiVU5CSU5EIiwib25Mb2FkZWQiLCJydW4iLCJ1bmJpbmQiLCJTQ1JPTExFUiIsIlRBUkdFVFMiLCJUQVJHRVRTX1VQREFURSIsInVwZGF0ZSIsIlBPU0lUSU9OIiwiYW5jaG9yUG9zaXRpb24iLCJhbmNob3IiLCJwbGFjZSIsImZvcmNlIiwicG9zaXRpb24iLCJ0YXJnZXRXIiwidGFyZ2V0SCIsIndpZHRoIiwiaGVpZ2h0IiwiaXNIVE1MQW5jaG9yIiwiYW5jaG9yVyIsImFuY2hvckgiLCJ2aWV3VyIsInZpZXdIIiwic2Nyb2xsWCIsInNjcm9sbFkiLCJhbmNob3JYIiwiYW5jaG9yWSIsImNlbnRlclgiLCJjZW50ZXJZIiwiaGFzU3BhY2VMZWZ0IiwiaGFzU3BhY2VSaWdodCIsImhhc1NwYWNlT3ZlciIsImhhc1NwYWNlVW5kZXIiLCJpc1ZlcnRpY2FsIiwiaXNSaWdodCIsImlzVW5kZXIiLCJ2aWV3WCIsInZpZXdZIiwiY3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlciIsInF1ZXVlIiwib25GcmFtZSIsIm9uVGltZXIiLCJNVVRBVE9SUyIsIm9uTXV0YXRpb24iLCJjbGFzc05hbWUiLCJlbGVtcyIsIm11dGF0b3IiLCJpc0lucHV0TGlrZSIsIkNTU19CUkVBRENSVU1CUyIsInN0eWxlcyIsIkNTU19DSElQIiwiQ1NTX0hFTFBURVhUIiwiQ1NTX1BBR0lOQVRJT04iLCJDTElDS1MiLCJNQVRPTU8iLCJhbmFseXRpY3MiLCJlbmFibGVkIiwibWF0b21vSWQiLCJtYXRvbW9UYWdNYW5hZ2VySWQiLCJzcmMiLCJ1cmwiLCJ0aXRsZSIsImNhdGVnb3J5IiwidiIsInJlc3VsdHMiLCJoYW5kbGVUcmFjayIsInByb2Nlc3NUcmFjayIsImhlYWRpbmciLCJncm91cCIsInBvcG92ZXIiLCJvcGVuIiwic3R5bGUiLCJib2R5IiwiaGVhZCIsInNoZWV0IiwiQ1NTX0FQUCIsIkNTU19TVElDS1kiLCJDU1NfVE9HR0xFIiwiQ1NTX1NJREVCQVIiLCJ1c2VUcmFuc2l0aW9uIiwidG9nZ2xlQXBwRXhwYW5kZWQiLCJoYW5kbGVUb2dnbGVDbGljayIsInN0b3AiLCJsaW5rIiwiY2xvc2VTaWRlYmFyIiwic2lkZWJhciIsIk1JTl9ZIiwiU0NST0xMX1VQIiwiU1RJQ0siLCJTVElDS19FTCIsIlNUSUNLX0giLCJTVElDS19ZIiwiU1RVQ0siLCJXSU5fSCIsIldJTl9ZIiwiaGFuZGxlTXV0YXRpb24iLCJzdGlja3kiLCJoYW5kbGVTY3JvbGwiLCJORVhUX1kiLCJORVhUX1VQIiwiZ2V0U3RlcHMiLCJub3ciLCJtYXgiLCJzaG93Iiwib2Zmc2V0Iiwic3RhcnQiLCJlbmQiLCJwYWdlcyIsInBhZ2luYXRpb24iLCJjdXJyZW50IiwidG90YWwiLCJwYWdlIiwiYnJlYWRjcnVtYnMiLCJicmVhZGN1bWJzIiwiY3J1bWIiLCJsZW5ndGgiLCJDU1NfRElBTE9HIiwiRElBTE9HUyIsImhhbmRsZU1vZGFsIiwiZGlhbG9nIiwiaGFuZGxlQ2xpY2siLCJoYW5kbGVJbmplY3QiLCJmaXJzdCIsIklTX0JST1dTRVIkMiIsIkRJU0FCTEVEIiwiU0VMRUNURUQiLCJVSFRNTE9wdGlvbkVsZW1lbnQiLCJMSVZFX1RJTUVSIiwiSU5QVVRfREVCT1VOQ0UiLCJFVkVOVFNfSU5QVVQiLCJVSFRNTERhdGFMaXN0RWxlbWVudCIsImRpc2Nvbm5lY3RJbnB1dCIsIl9wcmV2Iiwic2V0dXBJbnB1dCIsInNldEV4cGFuZGVkIiwiX2MiLCJpc1BvcG92ZXIiLCJpc0lucHV0IiwicmVsYXRlZFRhcmdldCIsImFsdEtleSIsImN0cmxLZXkiLCJzaGlmdEtleSIsIm1ldGFLZXkiLCJpc0VzY2FwZSIsIl9yb290IiwiX2lucHV0IiwiZmlsdGVyIiwiaGlkZGVuIiwidmlzaWJsZSIsIkNTU19GSUVMRCIsIkNTU19WQUxJREFUSU9OUyIsIkNTU19WQUxJREFUSU9OIiwiZ2V0VGV4dCIsImZpZWxkcyIsInZhbGlkYXRlIiwiZmllbGQiLCJsYWJlbHMiLCJkZXNjcyIsInZhbGlkcyIsImNvbWJvYm94IiwidmFsaWQiLCJkZXNjIiwicmVuZGVyQ29tYm9ib3giLCJyZW5kZXJDb3VudGVyIiwicmVuZGVyVGV4dGFyZWFTaXplIiwidGV4dGFyZWEiLCJsaW1pdCIsInJlbWFpbmRlciIsIm5leHRJbnZhbGlkIiwicHJldkludmFsaWQiLCJvdmVyIiwidW5kZXIiLCJoYW5kbGVUb2dnbGUiLCJuZXdTdGF0ZSIsImhhbmRsZUlucHV0IiwiaGFuZGxlRGF0YWxpc3RQb3NpdGlvbiIsImhhbmRsZVZhbGRpYXRpb24iLCJDU1NfRklFTERTRVQiLCJBUklBX0RFU0MiLCJBUklBX0lOVkFMSUQiLCJmaWVsZHNldHMiLCJmaWVsZHNldCIsImlucHV0cyIsInZhbGlkSWQiLCJDU1NfTE9HTyIsImxvZ28iLCJpY29uIiwic3ZnIiwiaXNEb3QiLCJiYWNrIiwiQ1NTX1BPUE9WRVIiLCJPUEVOX1BPUE9WRVJTIiwiaGFuZGxlTGlua0NsaWNrIiwiY2xvc2UiLCJDU1NfVEFCTEUiLCJ0YWJsZXMiLCJ0YWJsZSIsInRocyIsImlzVGJvZHkiLCJyb3ciLCJjZWxsIiwiQ1NTX1RPR0dMRUdST1VQIiwiaGFuZGxlS2V5RG93biIsIm1vdmUiLCJERVNDUklCRURCWSIsIkVTQyIsIkxBQkVMTEVEQlkiLCJQT1NJVElPTl9DU1NfUFJPUEVSVFkiLCJUSFJPVFRMRV9ERUxBWSIsIlRPT0xUSVAiLCJBTkNIT1IiLCJMQVNUX0NBTEwiLCJUSFJPVFRMRSIsImhhbmRsZU1vdmUiLCJ3YWl0IiwiaGFuZGxlTW92ZVRocm90dGxlZCIsImNvbnRlbnQiLCJoYWRMYWJlbCIsImhhc0xhYmVsIiwiSVNfQlJPV1NFUiQxIiwiVUhUTUxEZXRhaWxzRWxlbWVudCIsImhpZGUiLCJ1RGV0YWlsc0xpc3QiLCJ1RGV0YWlscyIsInN1bW1hcnkiLCJpc1N1bW1hcnkiLCJVSFRNTFN1bW1hcnlFbGVtZW50IiwiZ2V0TGFiZWwiLCJhY2MiLCJlbDIiLCJVSFRNTFByb2dyZXNzRWxlbWVudCIsInJvbGVJbWFnZSIsInBlcmNlbnRhZ2UiLCJnZXROdW1iZXIiLCJzZXROdW1iZXIiLCJpc051bWVyaWMiXSwibWFwcGluZ3MiOiJrQ0FBQSxJQUFJQSxHQUFZLE9BQU8sZUFDbkJDLEdBQXNCLE9BQU8sc0JBQzdCQyxHQUFl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S0FBTSxnQkFBaUIsR0FBRzRYLENBQVUsRUFBRSxFQUMzQzVYLEVBQUssS0FBTSxPQUFRMlgsRUFBWSxNQUFRLGFBQWEsRUFDcER6UCxHQUFtQixFQUN2QixDQUNFLElBQUksUUFBUyxDQUNYLE1BQU05RCxFQUFRLEtBQUssUUFBUSxrQkFBa0IsRUFDdkN3RSxFQUFNckgsR0FBTSxJQUFJLEVBQ3RCLE9BQUk2QyxJQUFPQSxFQUFNLFFBQVV3RSxHQUNoQjFILEdBQVEsSUFBSSxFQUFFLGlCQUN2QixjQUFjMEgsQ0FBRyxJQUNsQixDQUVMLENBQ0UsSUFBSSxVQUFXLENBQ2IsT0FBTyxLQUFLLFFBQVUsS0FBTyxHQUFLLEtBQUssSUFBSSxLQUFLLE1BQVEsS0FBSyxJQUFLLENBQUMsQ0FDdkUsQ0FDRSxJQUFJLE9BQVEsQ0FDVixPQUFPaVAsR0FBVSxLQUFNLE9BQU8sQ0FDbEMsQ0FDRSxJQUFJLE1BQU0xWSxFQUFPLENBQ2YyWSxHQUFVLEtBQU0sUUFBUzNZLENBQUssQ0FDbEMsQ0FDRSxJQUFJLEtBQU0sQ0FDUixPQUFPMFksR0FBVSxLQUFNLEtBQUssR0FBSyxDQUNyQyxDQUNFLElBQUksSUFBSW5JLEVBQUssQ0FDWG9JLEdBQVUsS0FBTSxNQUFPcEksQ0FBRyxDQUM5QixDQUNBLEVBRUFnSSxHQUFxQixlQUFpQixHQUN0QyxJQUFJSyxHQUFhNVksR0FBVSxDQUFDLE9BQU8sTUFBTSxPQUFPLFdBQVcsR0FBR0EsQ0FBSyxFQUFFLENBQUMsR0FBSyxPQUFPLFNBQVMsT0FBT0EsQ0FBSyxDQUFDLEVBQ3BHMFksR0FBWSxDQUFDNVgsRUFBSWYsSUFBUSxDQUMzQixNQUFNQyxFQUFRYSxFQUFLQyxFQUFJZixDQUFHLEVBQzFCLE9BQU82WSxHQUFVNVksQ0FBSyxFQUFJLEtBQUssSUFBSSxFQUFHLE9BQU8sV0FBV0EsQ0FBSyxDQUFDLEVBQUksSUFDcEUsRUFDSTJZLEdBQVksQ0FBQzdYLEVBQUlmLEVBQUswQyxJQUFRLENBQ2hDLEdBQUlBLElBQVEsTUFBUW1XLEdBQVVuVyxDQUFHLEVBQUc1QixFQUFLQyxFQUFJZixFQUFLLEdBQUcwQyxDQUFHLEVBQUUsTUFDckQsT0FBTSxJQUFJLE1BQU0sOEJBQThCNUIsQ0FBSSxPQUFPNEIsQ0FBRyxHQUFHLENBQ3RFLEVBQ0EsT0FBQUMsR0FBZSxPQUFPLGFBQWM2VixFQUFvQiIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEsMTAsMTgsMTldfQ==
21
+ @keyframes indeterminate { from { background-position-x: 100% } to { background-position-x: 0 } }`))}connectedCallback(){this.attributeChangedCallback()}attributeChangedCallback(){if(Je)return;Je=!0;const t=ha||Si,e=Math.max(0,Math.round(this.position*100));this.style.setProperty("--percentage",`${e}%`);let n=wa(this);if(t&&(n=`${n.replace(/\d+%$/,"")} ${e}%`),Si)for(const o of this.labels)A(o,"aria-label",n);A(this,"aria-busy",`${this.position===-1}`),A(this,"aria-label",n.trim()),A(this,"aria-labelledby",null),A(this,"aria-valuemax","100"),A(this,"aria-valuemin","0"),A(this,"aria-valuenow",`${e}`),A(this,"role",t?"img":"progressbar"),Je=!1}get labels(){const t=this.closest("label:not([for])"),e=ba(this);return t&&(t.htmlFor=e),Ci(this).querySelectorAll(`label[for="${e}"]`)}get position(){return this.value===null?-1:Math.min(this.value/this.max,1)}get value(){return Li(this,"value")}set value(t){Ii(this,"value",t)}get max(){return Li(this,"max")||1}set max(t){Ii(this,"max",t)}};Ai.formAssociated=!0;var ki=t=>!Number.isNaN(Number.parseFloat(`${t}`))&&Number.isFinite(Number(t)),Li=(t,e)=>{const n=A(t,e);return ki(n)?Math.max(0,Number.parseFloat(n)):null},Ii=(t,e,n)=>{if(n===null||ki(n))A(t,e,`${n}`);else throw new Error(`Failed to set non-numeric '${A}': '${n}'`)};return _a.define("u-progress",Ai),I.UHTMLComboboxElement=fe,I.UHTMLTabElement=_n,I.UHTMLTabListElement=bn,I.UHTMLTabPanelElement=wn,I.UHTMLTabsElement=vn,I.analytics=No,I.pagination=_r,I.styles=cs,I.toggleAppExpanded=Uo,I.version=ls,Object.defineProperty(I,Symbol.toStringTag,{value:"Module"}),I}({});
22
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtY29tYm9ib3gvZGlzdC91LWNvbWJvYm94LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5tanMiLCIuLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2NvcmUvZGlzdC9mbG9hdGluZy11aS5jb3JlLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5kb20ubWpzIiwiLi4vbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS9kb20vZGlzdC9mbG9hdGluZy11aS5kb20ubWpzIiwiLi4vZGVzaWduc3lzdGVtL3V0aWxzLnRzIiwiLi4vZGVzaWduc3lzdGVtL2FuYWx5dGljcy9hbmFseXRpY3MudHMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC10b2dnbGUuanMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9wYWdpbmF0aW9uL3BhZ2luYXRpb24taGVscGVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWJzLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2RpYWxvZy9kaWFsb2ctb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZXJyb3JzdW1tYXJ5L2Vycm9yc3VtbWFyeS1vYnNlcnZlci50cyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWRhdGFsaXN0L2Rpc3QvdS1kYXRhbGlzdC5qcyIsIi4uL2Rlc2lnbnN5c3RlbS9maWVsZC9maWVsZC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9maWVsZHNldC9maWVsZHNldC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9sb2dvL2xvZ28tb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vcG9wb3Zlci9wb3BvdmVyLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3RhYmxlL3RhYmxlLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3RvZ2dsZWdyb3VwL3RvZ2dsZWdyb3VwLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3Rvb2x0aXAvdG9vbHRpcC1vYnNlcnZlci50cyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWRldGFpbHMvZGlzdC91LWRldGFpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1wcm9ncmVzcy9kaXN0L3UtcHJvZ3Jlc3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuXG4vLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfQU5EUk9JRCA9IElTX0JST1dTRVIgJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0ZJUkVGT1ggPSBJU19CUk9XU0VSICYmIC9maXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBGT0NVU19PVVRMSU5FID0gXCJvdXRsaW5lOiAxcHggZG90dGVkOyBvdXRsaW5lOiA1cHggYXV0byBIaWdobGlnaHQ7IG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvclwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChfZXJyKSB7XG4gIH1cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgKGRldGFpbCkgPT4gZWxlbWVudC5oYW5kbGVFdmVudCh7IHR5cGU6IFwibXV0YXRpb25cIiwgZGV0YWlsIH0pXG4gICAgKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIG9ic2VydmVycy5zZXQoZWxlbWVudCwgb2JzZXJ2ZXIpO1xuICB9XG59O1xudmFyIGFzQnV0dG9uID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGlzQ2xpY2sgPSBcImtleVwiIGluIGV2ZW50ICYmIChldmVudC5rZXkgPT09IFwiIFwiIHx8IGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKTtcbiAgaWYgKGlzQ2xpY2spIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGlmIChpc0NsaWNrICYmIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBldmVudC50YXJnZXQuY2xpY2soKTtcbiAgcmV0dXJuIGlzQ2xpY2s7XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dDIsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQyKSBlbC50ZXh0Q29udGVudCA9IHRleHQyO1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgTElWRTtcbnZhciBMSVZFX1NSX0ZJWCA9IDA7XG52YXIgc3BlYWsgPSAodGV4dDIpID0+IHtcbiAgaWYgKCFMSVZFKSB7XG4gICAgTElWRSA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgTElWRS5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjpmaXhlZDtvdmVyZmxvdzpoaWRkZW47d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcFwiO1xuICAgIGF0dHIoTElWRSwgXCJhcmlhLWxpdmVcIiwgXCJhc3NlcnRpdmVcIik7XG4gIH1cbiAgaWYgKCFMSVZFLmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZChMSVZFKTtcbiAgaWYgKHRleHQyKSBMSVZFLnRleHRDb250ZW50ID0gYCR7dGV4dDJ9JHtMSVZFX1NSX0ZJWCsrICUgMiA/IFwiXFx4QTBcIiA6IFwiXCJ9YDtcbn07XG52YXIgc2V0VmFsdWUgPSAoaW5wdXQsIGRhdGEsIHR5cGUgPSBcIlwiKSA9PiB7XG4gIHZhciBfYTIsIF9iO1xuICBjb25zdCBldmVudCA9IHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUsIGRhdGEsIGlucHV0VHlwZTogdHlwZSB9O1xuICBjb25zdCBwcm90byA9IEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiYmVmb3JlaW5wdXRcIiwgZXZlbnQpKTtcbiAgKF9iID0gKF9hMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIFwidmFsdWVcIikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChpbnB1dCwgZGF0YSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJpbnB1dFwiLCBldmVudCkpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImNoYW5nZVwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xufTtcbnZhciBJU19QUkVTUyA9IGZhbHNlO1xudmFyIGlzTW91c2VEb3duID0gKGV2ZW50KSA9PiB7XG4gIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSBcIm1vdXNldXBcIikgSVNfUFJFU1MgPSBmYWxzZTtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2Vkb3duXCIpIHtcbiAgICBJU19QUkVTUyA9IHRydWU7XG4gICAgb24oZG9jdW1lbnQsIFwibW91c2V1cFwiLCBpc01vdXNlRG93biwgeyBvbmNlOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiBJU19QUkVTUztcbn07XG5cbi8vIHUtY29tYm9ib3gudHNcbnZhciBFVkVOVFMgPSBcImJlZm9yZWlucHV0LGJsdXIsZm9jdXMsY2xpY2ssaW5wdXQsa2V5ZG93bixtb3VzZWRvd25cIjtcbnZhciBFVkVOVF9PTkNFID0geyBvbmNlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH07XG52YXIgSVNfRklSRUZPWF9ERVNLVE9QID0gSVNfRklSRUZPWCAmJiAhSVNfQU5EUk9JRDtcbnZhciBJU19NT0JJTEUgPSBJU19BTkRST0lEIHx8IElTX0lPUztcbnZhciBGQUxTRSA9IFwiZmFsc2VcIjtcbnZhciBURVhUUyA9IHtcbiAgYWRkZWQ6IFwiQWRkZWRcIixcbiAgZW1wdHk6IFwiTm8gc2VsZWN0ZWRcIixcbiAgZm91bmQ6IFwiTmF2aWdhdGUgbGVmdCB0byBmaW5kICVkIHNlbGVjdGVkXCIsXG4gIGludmFsaWQ6IFwiSW52YWxpZCB2YWx1ZVwiLFxuICBvZjogXCJvZlwiLFxuICByZW1vdmU6IFwiUHJlc3MgdG8gcmVtb3ZlXCIsXG4gIHJlbW92ZWQ6IFwiUmVtb3ZlZFwiXG59O1xudmFyIFVIVE1MQ29tYm9ib3hFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2l0ZW0gPSBcIlwiO1xuICAgIHRoaXMuX3NwZWFrID0gXCJcIjtcbiAgICB0aGlzLl90ZXh0cyA9IF9fc3ByZWFkVmFsdWVzKHt9LCBURVhUUyk7XG4gICAgdGhpcy5fdmFsdWUgPSBcIlwiO1xuICAgIHRoaXMuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiksXG4gICAgICAvLyBDb250ZW50IHNsb3RcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYDpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrOyAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCkgfSAvKiBNdXN0IGJlIGRpc3BsYXkgYmxvY2sgaW4gU2FmYXJpIHRvIGFsbG93IGZvY3VzIGluc2lkZSAqL1xuXHRcdFx0XHQ6aG9zdCg6bm90KFtkYXRhLW11bHRpcGxlXSkpIDo6c2xvdHRlZChkYXRhKSxcblx0XHRcdFx0Omhvc3QoW2RhdGEtbXVsdGlwbGU9XCJmYWxzZVwiXSkgOjpzbG90dGVkKGRhdGEpIHsgZGlzcGxheTogbm9uZSB9IC8qIEhpZGUgZGF0YSBpZiBub3QgbXVsdGlwbGUgKi9cblx0XHRcdFx0OjpzbG90dGVkKGlucHV0W2lucHV0bW9kZT1cIm5vbmVcIl0pIHsgb3V0bGluZTogbm9uZSB9IC8qIEhpZGUgdGVtcG9yYXJ5IGZvdWNzIG91dGxpbmUgZmxhc2ggKi9cblx0XHRcdFx0OjpzbG90dGVkKGRlbCkgeyB0ZXh0LWRlY29yYXRpb246IG5vbmUgfVxuXHRcdFx0XHQ6OnNsb3R0ZWQoZGF0YTpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcG9pbnRlci1ldmVudHM6IG5vbmUgfVxuICAgICAgICA6OnNsb3R0ZWQoZGF0YSk6OmFmdGVyIHsgY29udGVudDogJ1xcXFwwMEQ3JzsgY29udGVudDogJ1xcXFwwMEQ3JyAvICcnOyBwYWRkaW5nLWlubGluZTogLjVjaDsgcG9pbnRlci1ldmVudHM6IGF1dG87IGN1cnNvcjogcG9pbnRlciB9XG4gICAgICAgIDo6c2xvdHRlZChkYXRhOmZvY3VzKSB7ICR7Rk9DVVNfT1VUTElORX0gfWBcbiAgICAgIClcbiAgICApO1xuICB9XG4gIC8vIExvY2FsbHkgc3RvcmUgdmFsdWUgdG8gc3RvcmUgdmFsdWUgYmVmb3JlIGlucHV0LWNsaWNrXG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhURVhUUykubWFwKChrZXkpID0+IGBkYXRhLXNyLSR7a2V5fWApO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuX3Jvb3QgPSBnZXRSb290KHRoaXMpO1xuICAgIG9uKHRoaXMsIEVWRU5UUywgdGhpcywgdHJ1ZSk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7XG4gICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFtcInZhbHVlXCIsIFwiaWRcIl0sXG4gICAgICAvLyBSZXNwb25kIHRvIGNoYW5nZXMgaW4gPGRhdGE+IHZhbHVlIG9yIGNoYW5nZSBvZiBpZCBmb3IgPGRhdGFsaXN0PiB0byByZWNvbm5lY3Qgd2l0aCBpbnB1dFxuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgICAvLyBSZXNwb25kIHRvIGNoYW5nZXMgaW4gPGRhdGE+IHRleHRDb250ZW50XG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgfSk7XG4gICAgc2V0VGltZW91dChyZW5kZXIsIDAsIHRoaXMpO1xuICAgIHNldFRpbWVvdXQoc3luY0lucHV0VmFsdWUsIDAsIHRoaXMpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBfLCB2YWwpIHtcbiAgICBjb25zdCB0ZXh0MiA9IHByb3Auc3BsaXQoXCJkYXRhLXNyLVwiKVsxXTtcbiAgICBpZiAoVEVYVFNbdGV4dDJdKSB0aGlzLl90ZXh0c1t0ZXh0Ml0gPSB2YWwgfHwgVEVYVFNbdGV4dDJdO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgZmFsc2UpO1xuICAgIG9mZih0aGlzLCBFVkVOVFMsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5fY2xlYXIgPSB0aGlzLl9mb2N1cyA9IHRoaXMuX2NvbnRyb2wgPSB2b2lkIDA7XG4gICAgdGhpcy5fbGlzdCA9IHRoaXMuX29wdGlvbnMgPSB0aGlzLl9yb290ID0gdm9pZCAwO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMpKSByZXR1cm47XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmVmb3JlaW5wdXRcIikgdGhpcy5fdmFsdWUgPSAodGFyZ2V0ID09IG51bGwgPyB2b2lkIDAgOiB0YXJnZXQudmFsdWUpIHx8IFwiXCI7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmx1clwiKSBvbkJsdXIodGhpcyk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikgb25DbGljayh0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiZm9jdXNcIikgb25Gb2N1cyh0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiaW5wdXRcIikgb25JbnB1dCh0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwia2V5ZG93blwiKSBvbktleURvd24odGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcIm1vdXNlZG93blwiKSBpc01vdXNlRG93bihldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwibXV0YXRpb25cIikgcmVuZGVyKHRoaXMsIGV2ZW50KTtcbiAgfVxuICBnZXQgbXVsdGlwbGUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKChfYTIgPSBhdHRyKHRoaXMsIFwiZGF0YS1tdWx0aXBsZVwiKSkgIT0gbnVsbCA/IF9hMiA6IEZBTFNFKSAhPT0gRkFMU0U7XG4gIH1cbiAgc2V0IG11bHRpcGxlKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcImRhdGEtbXVsdGlwbGVcIiwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgZ2V0IGNyZWF0YWJsZSgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoKF9hMiA9IGF0dHIodGhpcywgXCJkYXRhLWNyZWF0YWJsZVwiKSkgIT0gbnVsbCA/IF9hMiA6IEZBTFNFKSAhPT0gRkFMU0U7XG4gIH1cbiAgc2V0IGNyZWF0YWJsZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJkYXRhLWNyZWF0YWJsZVwiLCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBnZXQgY29udHJvbCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIGlmICghKChfYTIgPSB0aGlzLl9jb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmlzQ29ubmVjdGVkKSlcbiAgICAgIHRoaXMuX2NvbnRyb2wgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFwiKTtcbiAgICByZXR1cm4gdGhpcy5fY29udHJvbDtcbiAgfVxuICBnZXQgbGlzdCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIGlmICghKChfYTIgPSB0aGlzLl9saXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmlzQ29ubmVjdGVkKSlcbiAgICAgIHRoaXMuX2xpc3QgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJ1LWRhdGFsaXN0LGRhdGFsaXN0XCIpO1xuICAgIHJldHVybiB0aGlzLl9saXN0O1xuICB9XG4gIGdldCBjbGVhcigpIHtcbiAgICB2YXIgX2EyO1xuICAgIGlmICghKChfYTIgPSB0aGlzLl9jbGVhcikgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpIHRoaXMuX2NsZWFyID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwiZGVsXCIpO1xuICAgIHJldHVybiB0aGlzLl9jbGVhcjtcbiAgfVxuICBnZXQgaXRlbXMoKSB7XG4gICAgaWYgKCF0aGlzLl9pdGVtcykgdGhpcy5faXRlbXMgPSB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiZGF0YVwiKTtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgdmFyIF9hMiwgX2I7XG4gICAgaWYgKCF0aGlzLl9vcHRpb25zKSB7XG4gICAgICBjb25zdCB0YWcgPSAoKF9hMiA9IHRoaXMubGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5ub2RlTmFtZSkgPT09IFwiVS1EQVRBTElTVFwiID8gXCJ1LW9wdGlvblwiIDogXCJvcHRpb25cIjtcbiAgICAgIHRoaXMuX29wdGlvbnMgPSAoX2IgPSB0aGlzLmxpc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYi5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgfVxuICBnZXQgdmFsdWVzKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5pdGVtc10ubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKTtcbiAgfVxufTtcbnZhciB0ZXh0ID0gKGVsKSA9PiB7XG4gIHZhciBfYTI7XG4gIHJldHVybiAoKF9hMiA9IGVsID09IG51bGwgPyB2b2lkIDAgOiBlbC50ZXh0Q29udGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG59O1xudmFyIGlzRGF0YSA9IChlbCkgPT4gZWwgaW5zdGFuY2VvZiBIVE1MRGF0YUVsZW1lbnQ7XG52YXIgaXNEaXNhYmxlZCA9ICh7IGNvbnRyb2wgfSkgPT4gKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuZGlzYWJsZWQpIHx8IChjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLnJlYWRPbmx5KSB8fCBmYWxzZTtcbnZhciByZW5kZXIgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGNvbnN0IHsgX2ZvY3VzLCBfdGV4dHMsIGl0ZW1zLCBjb250cm9sLCBsaXN0LCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgbGV0IGxhYmVsID0gYCR7dGV4dCgoX2EyID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5sYWJlbHMpID09IG51bGwgPyB2b2lkIDAgOiBfYTJbMF0pfSR7bXVsdGlwbGUgPyBgLCAke2l0ZW1zLmxlbmd0aCA/IF90ZXh0cy5mb3VuZC5yZXBsYWNlKFwiJWRcIiwgYCR7aXRlbXMubGVuZ3RofWApIDogX3RleHRzLmVtcHR5fWAgOiBcIlwifWA7XG4gIGNvbnN0IGVkaXRzID0gW107XG4gIGZvciAoY29uc3QgeyBhZGRlZE5vZGVzLCByZW1vdmVkTm9kZXMgfSBvZiAoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LmRldGFpbCkgfHwgW10pIHtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIGFkZGVkTm9kZXMpIGlmIChpc0RhdGEoZWwpKSBlZGl0cy51bnNoaWZ0KGVsKTtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIHJlbW92ZWROb2RlcykgaWYgKGlzRGF0YShlbCkpIGVkaXRzLnB1c2goZWwpO1xuICB9XG4gIGNvbnN0IHNob3VsZEFubm91bmNlID0gbXVsdGlwbGUgPyBlZGl0cy5sZW5ndGggPT09IDEgOiBlZGl0c1swXSA9PT0gX2ZvY3VzO1xuICBpZiAoX2ZvY3VzICYmIGNvbnRyb2wgJiYgc2hvdWxkQW5ub3VuY2UpIHtcbiAgICBjb25zdCBhcmlhRXhwYW5kZWQgPSBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiKTtcbiAgICBjb25zdCBpbnB1dE1vZGUgPSBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIpO1xuICAgIGNvbnN0IG5leHRGb2N1cyA9IGlzRGF0YShfZm9jdXMpID8gY29udHJvbCA6IF9mb2N1cztcbiAgICBjb25zdCBpc1JlbW92ZSA9ICFlZGl0c1swXS5pc0Nvbm5lY3RlZDtcbiAgICBzZWxmLl9zcGVhayA9IGAke190ZXh0c1tpc1JlbW92ZSA/IFwicmVtb3ZlZFwiIDogXCJhZGRlZFwiXX0gJHt0ZXh0KGVkaXRzWzBdKX0sIGA7XG4gICAgaWYgKElTX01PQklMRSB8fCBfZm9jdXMgPT09IGNvbnRyb2wpIHNwZWFrKHNlbGYuX3NwZWFrKTtcbiAgICBpZiAoY29udHJvbCAhPT0gbmV4dEZvY3VzKSB7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiLCBudWxsKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgXCJub25lXCIpO1xuICAgICAgbGFiZWwgPSBcIlxceEEwXCI7XG4gICAgICBjb250cm9sLmZvY3VzKCk7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdmFyIF9hMztcbiAgICAgIGF0dHIoY29udHJvbCwgXCJhcmlhLWV4cGFuZGVkXCIsIGFyaWFFeHBhbmRlZCk7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIsIGlzUmVtb3ZlID8gXCJub25lXCIgOiBpbnB1dE1vZGUpO1xuICAgICAgKF9hMyA9IG5leHRGb2N1cyA9PSBudWxsID8gdm9pZCAwIDogbmV4dEZvY3VzLmZvY3VzKSA9PSBudWxsID8gdm9pZCAwIDogX2EzLmNhbGwobmV4dEZvY3VzKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgaW5wdXRNb2RlKTtcbiAgICAgIHNlbGYuX3NwZWFrID0gXCJcIjtcbiAgICAgIGlmIChJU19GSVJFRk9YX0RFU0tUT1ApIG9uKHNlbGYsIFwiYmx1clwiLCAoKSA9PiByZW5kZXIoc2VsZiksIEVWRU5UX09OQ0UpO1xuICAgICAgZWxzZSBzZXRUaW1lb3V0KHJlbmRlciwgMTAwLCBzZWxmKTtcbiAgICB9LCAxMDApO1xuICB9XG4gIGxldCBpZHggPSAwO1xuICBjb25zdCBzZWxlY3QgPSBzZWxmLnF1ZXJ5U2VsZWN0b3IoXCJzZWxlY3RcIik7XG4gIGNvbnN0IHJlbW92ZSA9IGlzRGlzYWJsZWQoc2VsZikgPyBcIlwiIDogYCR7X3RleHRzLnJlbW92ZX0sIGA7XG4gIGZvciAoY29uc3QgaXRlbTIgb2YgaXRlbXMpIHtcbiAgICBjb25zdCBvcHRpb24gPSBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5vcHRpb25zW2lkeF07XG4gICAgY29uc3QgbGFiZWwyID0gdGV4dChpdGVtMik7XG4gICAgY29uc3QgdmFsdWUgPSBpdGVtMi52YWx1ZSB8fCBsYWJlbDI7XG4gICAgY29uc3QgYXJpYSA9IGAke3NlbGYuX3NwZWFrfSR7bGFiZWwyfSwgJHtyZW1vdmV9JHsrK2lkeH0gJHtfdGV4dHMub2Z9ICR7aXRlbXMubGVuZ3RofWA7XG4gICAgYXR0cihpdGVtMiwgXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuICAgIGF0dHIoaXRlbTIsIFwidmFsdWVcIiwgdmFsdWUpO1xuICAgIGF0dHIoaXRlbTIsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcbiAgICBhdHRyKGl0ZW0yLCBcImFyaWEtbGFiZWxcIiwgYXJpYSk7XG4gICAgaWYgKG9wdGlvbikgT2JqZWN0LmFzc2lnbihvcHRpb24sIHsgdGV4dENvbnRlbnQ6IGxhYmVsMiwgdmFsdWUgfSk7XG4gICAgZWxzZSBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5hcHBlbmRDaGlsZChuZXcgT3B0aW9uKGxhYmVsMiwgdmFsdWUsIHRydWUsIHRydWUpKTtcbiAgfVxuICBpZiAoc2VsZWN0KSBhdHRyKHNlbGVjdCwgXCJtdWx0aXBsZVwiLCBtdWx0aXBsZSA/IFwiXCIgOiBudWxsKTtcbiAgZm9yIChjb25zdCBvcHQgb2YgWy4uLihzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5vcHRpb25zKSB8fCBbXV0uc2xpY2UoaWR4KSkgb3B0LnJlbW92ZSgpO1xuICBpZiAoIW11bHRpcGxlICYmIGlkeCA+IDEpXG4gICAgY29uc29sZS53YXJuKFwidS1jb21ib2JveDogTXVsdGlwbGUgPGRhdGE+IGZvdW5kIGluIHNpbmdsZSBtb2RlLlwiKTtcbiAgaWYgKGxpc3QpIGF0dHIobGlzdCwgXCJhcmlhLW11bHRpc2VsZWN0YWJsZVwiLCBgJHttdWx0aXBsZX1gKTtcbiAgaWYgKGNvbnRyb2wpIGF0dHIoY29udHJvbCwgXCJsaXN0XCIsIHVzZUlkKGxpc3QpKTtcbiAgaWYgKGNvbnRyb2wpIGF0dHIoY29udHJvbCwgXCJhcmlhLWxhYmVsXCIsIGAke3NlbGYuX3NwZWFrfSR7bGFiZWx9YCk7XG4gIGNvbnN0IGl0ZW0gPSB0ZXh0KGl0ZW1zWzBdKTtcbiAgaWYgKGl0ZW0gIT09IHNlbGYuX2l0ZW0pIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICBzZWxmLl9pdGVtID0gaXRlbTtcbiAgc3luY0NsZWFyV2l0aElucHV0KHNlbGYpO1xuICBzeW5jT3B0aW9uc1dpdGhJdGVtcyhzZWxmKTtcbiAgKF9iID0gbXV0YXRpb25PYnNlcnZlcihzZWxmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLnRha2VSZWNvcmRzKCk7XG59O1xudmFyIHN5bmNDbGVhcldpdGhJbnB1dCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChzZWxmLmNsZWFyKSBhdHRyKHNlbGYuY2xlYXIsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgaWYgKHNlbGYuY2xlYXIpIHNlbGYuY2xlYXIuaGlkZGVuID0gISgoX2EyID0gc2VsZi5jb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnZhbHVlKSB8fCBpc0Rpc2FibGVkKHNlbGYpO1xufTtcbnZhciBzeW5jT3B0aW9uc1dpdGhJdGVtcyA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgX3NwZWFrLCBvcHRpb25zID0gW10sIHZhbHVlcyB9ID0gc2VsZjtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gKF9hMiA9IGF0dHIob3B0LCBcInZhbHVlXCIpKSAhPSBudWxsID8gX2EyIDogdGV4dChvcHQpO1xuICAgIGF0dHIob3B0LCBcImFyaWEtbGFiZWxcIiwgX3NwZWFrID8gYCR7X3NwZWFrfSR7dGV4dChvcHQpfWAgOiBudWxsKTtcbiAgICBhdHRyKG9wdCwgXCJzZWxlY3RlZFwiLCB2YWx1ZXMuaW5jbHVkZXModmFsdWUpID8gXCJcIiA6IG51bGwpO1xuICB9XG59O1xudmFyIHN5bmNJbnB1dFZhbHVlID0gKHNlbGYpID0+IHtcbiAgY29uc3QgeyBtdWx0aXBsZSwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gdGV4dChpdGVtc1swXSk7XG4gIGlmICghbXVsdGlwbGUgJiYgY29udHJvbCAmJiB2YWx1ZSAhPT0gY29udHJvbC52YWx1ZSlcbiAgICBzZXRWYWx1ZShjb250cm9sLCB2YWx1ZSwgdmFsdWUgPyBcImluc2VydFRleHRcIiA6IFwiZGVsZXRlQ29udGVudFwiKTtcbn07XG52YXIgZGlzcGF0Y2hNYXRjaCA9IChzZWxmLCBjaGFuZ2UgPSB0cnVlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgX3RleHRzLCBvcHRpb25zID0gW10sIGNyZWF0YWJsZSwgY29udHJvbCwgaXRlbXMsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9ICgoX2EyID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IHF1ZXJ5ID0gdmFsdWUudG9Mb3dlckNhc2UoKSB8fCBudWxsO1xuICBsZXQgbWF0Y2ggPSBbLi4ub3B0aW9uc10uZmluZChcbiAgICAob3B0KSA9PiAoYXR0cihvcHQsIFwibGFiZWxcIikgfHwgdGV4dChvcHQpKS50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gcXVlcnlcbiAgKTtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIGRldGFpbDogbWF0Y2ggfTtcbiAgaWYgKCFzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiY29tYm9ib3hiZWZvcmVtYXRjaFwiLCBldmVudCkpKVxuICAgIG1hdGNoID0gWy4uLm9wdGlvbnNdLmZpbmQoKG8pID0+IG8uc2VsZWN0ZWQpO1xuICBpZiAoY2hhbmdlKSB7XG4gICAgc3luY09wdGlvbnNXaXRoSXRlbXMoc2VsZik7XG4gICAgaWYgKG1hdGNoKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgbWF0Y2gsIGZhbHNlKTtcbiAgICBpZiAoY3JlYXRhYmxlICYmIHZhbHVlKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgeyB2YWx1ZSB9LCBmYWxzZSk7XG4gICAgaWYgKCFtdWx0aXBsZSAmJiAhdmFsdWUgJiYgaXRlbXNbMF0pIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW1zWzBdKTtcbiAgICBlbHNlIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICAgIHJldHVybiBzcGVhayhfdGV4dHMuaW52YWxpZCk7XG4gIH1cbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykgb3B0LnNlbGVjdGVkID0gb3B0ID09PSBtYXRjaDtcbn07XG52YXIgZGlzcGF0Y2hDaGFuZ2UgPSAoc2VsZiwgaXRlbSwgcmVtb3ZhYmxlID0gdHJ1ZSkgPT4ge1xuICBjb25zdCB7IGNvbnRyb2wsIGl0ZW1zLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgYWRkID0gY3JlYXRlRWxlbWVudChcImRhdGFcIiwgaXRlbS5sYWJlbCB8fCBpdGVtLnZhbHVlLCB7XG4gICAgdmFsdWU6IGl0ZW0udmFsdWVcbiAgfSk7XG4gIGNvbnN0IHJlbW92ZSA9IFsuLi5pdGVtc10uZmluZCgoaSkgPT4gaS52YWx1ZSA9PT0gaXRlbS52YWx1ZSk7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IHJlbW92ZSB8fCBhZGQgfTtcbiAgY29uc3Qgc2tpcCA9IHJlbW92ZSAmJiAhcmVtb3ZhYmxlO1xuICBpZiAoc2tpcCkgcmV0dXJuIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICBpZiAoc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImNvbWJvYm94YmVmb3Jlc2VsZWN0XCIsIGV2ZW50KSkpIHtcbiAgICBpZiAoIW11bHRpcGxlKSBmb3IgKGNvbnN0IGl0ZW0yIG9mIFsuLi5pdGVtc10pIGl0ZW0yLnJlbW92ZSgpO1xuICAgIGlmIChyZW1vdmUpIHJlbW92ZS5yZW1vdmUoKTtcbiAgICBlbHNlIGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYmVmb3JlYmVnaW5cIiwgYWRkKTtcbiAgICBzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiY29tYm9ib3hhZnRlcnNlbGVjdFwiLCBldmVudCkpO1xuICB9XG59O1xudmFyIG9uRm9jdXMgPSAoc2VsZiwgeyB0YXJnZXQgfSkgPT4ge1xuICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHNlbGYuX2ZvY3VzID0gdGFyZ2V0O1xuICBzcGVhaygpO1xufTtcbnZhciBvbkJsdXIgPSAoc2VsZikgPT4gaXNNb3VzZURvd24oKSB8fCBzZXRUaW1lb3V0KG9uQmx1cnJlZCwgMCwgc2VsZik7XG52YXIgb25CbHVycmVkID0gKHNlbGYpID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKCFzZWxmLl9mb2N1cyB8fCBzZWxmLmNvbnRhaW5zKChfYTIgPSBzZWxmLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmFjdGl2ZUVsZW1lbnQpKSByZXR1cm47XG4gIGlmICghc2VsZi5tdWx0aXBsZSkgZGlzcGF0Y2hNYXRjaChzZWxmKTtcbiAgc2VsZi5fZm9jdXMgPSB2b2lkIDA7XG59O1xudmFyIG9uQ2xpY2sgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgY29uc3QgeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5LCB0YXJnZXQgfSA9IGV2ZW50O1xuICBjb25zdCB7IGNsZWFyLCBjb250cm9sLCBpdGVtcyB9ID0gc2VsZjtcbiAgaWYgKGNsZWFyID09IG51bGwgPyB2b2lkIDAgOiBjbGVhci5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgaWYgKGNvbnRyb2wpIHNldFZhbHVlKGNvbnRyb2wsIFwiXCIsIFwiZGVsZXRlQ29udGVudEJhY2t3YXJkXCIpO1xuICAgIHJldHVybiBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmZvY3VzKCk7XG4gIH1cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQgfSA9IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKGl0ZW0uY29udGFpbnModGFyZ2V0KSkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW0pO1xuICAgIGlmICh5ID49IHRvcCAmJiB5IDw9IGJvdHRvbSAmJiB4ID49IGxlZnQgJiYgeCA8PSByaWdodCkgcmV0dXJuIGl0ZW0uZm9jdXMoKTtcbiAgfVxuICBpZiAodGFyZ2V0ID09PSBzZWxmKSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmZvY3VzKCk7XG59O1xudmFyIG9uSW5wdXQgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgeyBvcHRpb25zID0gW10sIGNvbnRyb2wsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9ICgoX2EyID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IGlzQ2xpY2sgPSBldmVudCBpbnN0YW5jZW9mIElucHV0RXZlbnQgPyAhZXZlbnQuaW5wdXRUeXBlIHx8IGV2ZW50LmlucHV0VHlwZSA9PT0gXCJpbnNlcnRSZXBsYWNlbWVudFRleHRcIiA6ICEhdmFsdWU7XG4gIGlmIChpc0NsaWNrKSB7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGNvbnRyb2wpIGNvbnRyb2wudmFsdWUgPSBzZWxmLl92YWx1ZTtcbiAgICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKVxuICAgICAgaWYgKG9wdC52YWx1ZSAmJiBvcHQudmFsdWUgPT09IHZhbHVlKVxuICAgICAgICByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgb3B0LCBtdWx0aXBsZSk7XG4gIH0gZWxzZSBpZiAoIW11bHRpcGxlKSBkaXNwYXRjaE1hdGNoKHNlbGYsIGZhbHNlKTtcbiAgc3luY0NsZWFyV2l0aElucHV0KHNlbGYpO1xufTtcbnZhciBvbktleURvd24gPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkpIHJldHVybjtcbiAgY29uc3QgeyBjbGVhciwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGNvbnN0IHsga2V5LCByZXBlYXQsIHRhcmdldCB9ID0gZXZlbnQ7XG4gIGNvbnN0IGlzQ29udHJvbCA9IGNvbnRyb2wgJiYgY29udHJvbCA9PT0gdGFyZ2V0O1xuICBjb25zdCBpblRleHQgPSBpc0NvbnRyb2wgJiYgKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuc2VsZWN0aW9uRW5kKTtcbiAgbGV0IGluZGV4ID0gaXNDb250cm9sID8gaXRlbXMubGVuZ3RoIDogWy4uLml0ZW1zXS5pbmRleE9mKHRhcmdldCk7XG4gIGlmIChpc0NvbnRyb2wgJiYga2V5ID09PSBcIlRhYlwiICYmIGNsZWFyICYmICFjbGVhci5oaWRkZW4pIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNsZWFyLnRhYkluZGV4ID0gLTE7XG4gICAgY2xlYXIuZm9jdXMoKTtcbiAgICBvbihjbGVhciwgXCJibHVyXCIsICgpID0+IGF0dHIoY2xlYXIsIFwidGFiaW5kZXhcIiwgbnVsbCksIEVWRU5UX09OQ0UpO1xuICB9XG4gIGlmICghaXNDb250cm9sICYmIGFzQnV0dG9uKGV2ZW50KSB8fCBpbmRleCA9PT0gLTEpIHJldHVybjtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd1JpZ2h0XCIgJiYgIWlzQ29udHJvbCkgaW5kZXggKz0gMTtcbiAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93TGVmdFwiICYmICFpblRleHQpIGluZGV4IC09IDE7XG4gIGVsc2UgaWYgKGtleSA9PT0gXCJFbnRlclwiICYmIGlzQ29udHJvbCkge1xuICAgIGNvbnN0IGZvcm0gPSBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiKTtcbiAgICBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiLCBcIiNcIik7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IGF0dHIoY29udHJvbCwgXCJmb3JtXCIsIGZvcm0pKTtcbiAgICByZXR1cm4gZGlzcGF0Y2hNYXRjaChzZWxmKTtcbiAgfSBlbHNlIGlmICgoa2V5ID09PSBcIkJhY2tzcGFjZVwiIHx8IGtleSA9PT0gXCJEZWxldGVcIikgJiYgIWluVGV4dCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCFyZXBlYXQgJiYgaXRlbXNbaW5kZXhdKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgaXRlbXNbaW5kZXhdKTtcbiAgICBpZiAoaXNDb250cm9sKSBpbmRleCAtPSAxO1xuICB9IGVsc2UgcmV0dXJuIGlzQ29udHJvbCB8fCAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpKTtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgKF9hMiA9IGl0ZW1zW01hdGgubWF4KDAsIGluZGV4KV0gfHwgY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtY29tYm9ib3hcIiwgVUhUTUxDb21ib2JveEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTENvbWJvYm94RWxlbWVudCB9O1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0FORFJPSUQgPSBJU19CUk9XU0VSICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgU0FGRV9MQUJFTExFREJZID0gYCR7SVNfQU5EUk9JRCA/IFwiZGF0YVwiIDogXCJhcmlhXCJ9LWxhYmVsbGVkYnlgO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgX2EyO1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIChfYTIgPSBlbC5nZXRBdHRyaWJ1dGUobmFtZSkpICE9IG51bGwgPyBfYTIgOiBudWxsO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIGF0dGFjaFN0eWxlID0gKGVsZW1lbnQsIGNzcykgPT4gZWxlbWVudC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAvLyBVbm5hbWVkIHNsb3QgZG9lcyBhdXRvbWF0aWNhbGx5IHJlbmRlciBhbGwgdG9wIGVsZW1lbnQgbm9kZXNcbiAgY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIGNzcylcbik7XG52YXIgb2JzZXJ2ZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgbXV0YXRpb25PYnNlcnZlciA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHJldHVybiBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpO1xuICB0cnkge1xuICAgIG9ic2VydmVycy5nZXQoZWxlbWVudCkuZGlzY29ubmVjdCgpO1xuICAgIG9ic2VydmVycy5kZWxldGUoZWxlbWVudCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG5cbi8vIHUtdGFicy50c1xudmFyIEFSSUFfQ09OVFJPTFMgPSBcImFyaWEtY29udHJvbHNcIjtcbnZhciBBUklBX1NFTEVDVEVEID0gXCJhcmlhLXNlbGVjdGVkXCI7XG52YXIgVUhUTUxUYWJzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBESVNQTEFZX0JMT0NLKTtcbiAgfVxuICBnZXQgdGFiTGlzdCgpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJsaXN0XCIsIHRoaXMpWzBdIHx8IG51bGw7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldFNlbGVjdGVkSW5kZXgodGhpcy50YWJzKTtcbiAgfVxuICBzZXQgc2VsZWN0ZWRJbmRleChpbmRleCkge1xuICAgIHNldFNlbGVjdGVkKHRoaXMudGFic1tpbmRleF0pO1xuICB9XG4gIGdldCB0YWJzKCkge1xuICAgIHJldHVybiBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYlwiLCB0aGlzKTtcbiAgfVxuICBnZXQgcGFuZWxzKCkge1xuICAgIHJldHVybiBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYnBhbmVsXCIsIHRoaXMpO1xuICB9XG59O1xudmFyIFVIVE1MVGFiTGlzdEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgRElTUExBWV9CTE9DSyk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJ0YWJsaXN0XCIpO1xuICAgIG9uKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuICAgIGlmICh0aGlzLnRhYnMubGVuZ3RoKSB0aGlzLmhhbmRsZUV2ZW50KCk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgb2ZmKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIGZhbHNlKTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGlmICghZXZlbnQgfHwgZXZlbnQudHlwZSA9PT0gXCJtdXRhdGlvblwiKSB7XG4gICAgICBjb25zdCB0YWIgPSB0aGlzLnRhYnNbTWF0aC5tYXgodGhpcy5zZWxlY3RlZEluZGV4LCAwKV07XG4gICAgICByZXR1cm4gdGFiID09IG51bGwgPyB2b2lkIDAgOiB0YWIuc2V0QXR0cmlidXRlKEFSSUFfU0VMRUNURUQsIFwidHJ1ZVwiKTtcbiAgICB9XG4gICAgY29uc3QgeyBrZXkgfSA9IGV2ZW50O1xuICAgIGNvbnN0IHRhYnMgPSBbLi4udGhpcy50YWJzXTtcbiAgICBjb25zdCBwcmV2ID0gdGFicy5maW5kSW5kZXgoKHRhYikgPT4gdGFiLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpO1xuICAgIGxldCBuZXh0ID0gcHJldjtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCBwcmV2ID09PSAtMSkgcmV0dXJuO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImNsaWNrXCIpIHNldFNlbGVjdGVkKHRhYnNbcHJldl0pO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIiAmJiAhYXNCdXR0b24oZXZlbnQpKSB7XG4gICAgICBpZiAoa2V5ID09PSBcIkFycm93RG93blwiIHx8IGtleSA9PT0gXCJBcnJvd1JpZ2h0XCIpXG4gICAgICAgIG5leHQgPSAocHJldiArIDEpICUgdGFicy5sZW5ndGg7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiQXJyb3dVcFwiIHx8IGtleSA9PT0gXCJBcnJvd0xlZnRcIilcbiAgICAgICAgbmV4dCA9IChwcmV2IHx8IHRhYnMubGVuZ3RoKSAtIDE7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiRW5kXCIpIG5leHQgPSB0YWJzLmxlbmd0aCAtIDE7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiSG9tZVwiKSBuZXh0ID0gMDtcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJUYWJcIikgbmV4dCA9IGdldFNlbGVjdGVkSW5kZXgodGFicyk7XG4gICAgICBlbHNlIHJldHVybjtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0YWJzW3ByZXZdLnRhYkluZGV4ID0gLTE7XG4gICAgICAgIHRhYnNbbmV4dF0udGFiSW5kZXggPSAwO1xuICAgICAgfSk7XG4gICAgICBpZiAoa2V5ICE9PSBcIlRhYlwiKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRhYnNbbmV4dF0uZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChcInUtdGFiXCIpO1xuICB9XG4gIGdldCBzZWxlY3RlZEluZGV4KCkge1xuICAgIHJldHVybiBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicyk7XG4gIH1cbiAgc2V0IHNlbGVjdGVkSW5kZXgoaW5kZXgpIHtcbiAgICBzZXRTZWxlY3RlZCh0aGlzLnRhYnNbaW5kZXhdKTtcbiAgfVxufTtcbnZhciBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG52YXIgVUhUTUxUYWJFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiaWRcIiwgQVJJQV9TRUxFQ1RFRCwgQVJJQV9DT05UUk9MU107XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZShcbiAgICAgIHRoaXMsXG4gICAgICBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogaW5saW5lLWJsb2NrIH1cIlxuICAgICk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJ0YWJcIik7XG4gICAgdGhpcy50YWJJbmRleCA9IHRoaXMuc2VsZWN0ZWQgPyAwIDogLTE7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGlmICghU0tJUF9BVFRSX0NIQU5HRSAmJiB0aGlzLnNlbGVjdGVkICYmIHRoaXMudGFiTGlzdCkge1xuICAgICAgU0tJUF9BVFRSX0NIQU5HRSA9IHRydWU7XG4gICAgICBjb25zdCB0YWJzID0gWy4uLnRoaXMudGFiTGlzdC5xdWVyeVNlbGVjdG9yQWxsKFwidS10YWJcIildO1xuICAgICAgY29uc3QgcGFuZWxzID0gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJwYW5lbFwiLCB0aGlzLnRhYnNFbGVtZW50IHx8IHRoaXMpO1xuICAgICAgY29uc3QgbmV4dFBhbmVsID0gZ2V0UGFuZWwodGhpcywgcGFuZWxzW3RhYnMuaW5kZXhPZih0aGlzKV0pO1xuICAgICAgaWYgKG5leHRQYW5lbCkgYXR0cihuZXh0UGFuZWwsIFNBRkVfTEFCRUxMRURCWSwgdXNlSWQodGhpcykpO1xuICAgICAgdGFicy5mb3JFYWNoKCh0YWIsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhbmVsID0gZ2V0UGFuZWwodGFiLCBwYW5lbHNbaW5kZXhdKTtcbiAgICAgICAgdGFiLnRhYkluZGV4ID0gdGFiID09PSB0aGlzID8gMCA6IC0xO1xuICAgICAgICBhdHRyKHRhYiwgQVJJQV9TRUxFQ1RFRCwgYCR7dGFiID09PSB0aGlzfWApO1xuICAgICAgICBpZiAocGFuZWwpIHBhbmVsLmhpZGRlbiA9IHBhbmVsICE9PSBuZXh0UGFuZWw7XG4gICAgICAgIGlmIChwYW5lbCkgYXR0cih0YWIsIEFSSUFfQ09OVFJPTFMsIHBhbmVsLmlkKTtcbiAgICAgIH0pO1xuICAgICAgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBnZXQgdGFic0VsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdChcInUtdGFic1wiKTtcbiAgfVxuICBnZXQgdGFiTGlzdCgpIHtcbiAgICBjb25zdCB0YWJsaXN0ID0gdGhpcy5wYXJlbnRFbGVtZW50O1xuICAgIHJldHVybiAodGFibGlzdCA9PSBudWxsID8gdm9pZCAwIDogdGFibGlzdC5ub2RlTmFtZSkgPT09IFwiVS1UQUJMSVNUXCIgPyB0YWJsaXN0IDogbnVsbDtcbiAgfVxuICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgQVJJQV9TRUxFQ1RFRCkgPT09IFwidHJ1ZVwiO1xuICB9XG4gIHNldCBzZWxlY3RlZCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgQVJJQV9TRUxFQ1RFRCwgYCR7ISF2YWx1ZX1gKTtcbiAgfVxuICAvKiogUmV0cmlldmVzIHRoZSBvcmRpbmFsIHBvc2l0aW9uIG9mIGFuIHRhYiBpbiBhIHRhYmxpc3QuICovXG4gIGdldCBpbmRleCgpIHtcbiAgICBjb25zdCB0YWJMaXN0ID0gdGhpcy50YWJMaXN0O1xuICAgIHJldHVybiB0YWJMaXN0ID8gWy4uLnRhYkxpc3QucXVlcnlTZWxlY3RvckFsbChcInUtdGFiXCIpXS5pbmRleE9mKHRoaXMpIDogMDtcbiAgfVxuICBnZXQgcGFuZWwoKSB7XG4gICAgcmV0dXJuIGdldFBhbmVsKHRoaXMpO1xuICB9XG59O1xudmFyIFVIVE1MVGFiUGFuZWxFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiaGlkZGVuXCJdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgRElTUExBWV9CTE9DSyk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJ0YWJwYW5lbFwiKTtcbiAgICB0aGlzLmhpZGRlbiA9IGdldFNlbGVjdGVkSW5kZXgodGhpcy50YWJzKSA9PT0gLTE7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMuaGlkZGVuIHx8IGlzRm9jdXNhYmxlKHRoaXMuZmlyc3RDaGlsZCkpXG4gICAgICBhdHRyKHRoaXMsIFwidGFiaW5kZXhcIiwgbnVsbCk7XG4gICAgZWxzZSB0aGlzLnRhYkluZGV4ID0gMDtcbiAgfVxuICBnZXQgdGFic0VsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdChcInUtdGFic1wiKTtcbiAgfVxuICBnZXQgdGFicygpIHtcbiAgICBjb25zdCBjc3MgPSBgdS10YWJbJHtBUklBX0NPTlRST0xTfT1cIiR7dGhpcy5pZH1cIl1gO1xuICAgIHJldHVybiBnZXRSb290KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoY3NzKTtcbiAgfVxufTtcbnZhciBxdWVyeVdpdGhvdXROZXN0ZWQgPSAodGFnLCBzZWxmKSA9PiBzZWxmLnF1ZXJ5U2VsZWN0b3JBbGwoYCR7dGFnfTpub3QoOnNjb3BlIHUtdGFicGFuZWwgJHt0YWd9KWApO1xudmFyIGdldFBhbmVsID0gKHRhYiwgcGFuZWwpID0+IHtcbiAgY29uc3QgaWQyID0gYXR0cih0YWIsIEFSSUFfQ09OVFJPTFMpIHx8IHVzZUlkKHBhbmVsKTtcbiAgY29uc3QgZWwgPSBnZXRSb290KHRhYikuZ2V0RWxlbWVudEJ5SWQoaWQyKTtcbiAgcmV0dXJuIChlbCA9PSBudWxsID8gdm9pZCAwIDogZWwubm9kZU5hbWUpID09PSBcIlUtVEFCUEFORUxcIiA/IGVsIDogbnVsbDtcbn07XG52YXIgZ2V0U2VsZWN0ZWRJbmRleCA9ICh0YWJzKSA9PiBbLi4udGFic10uZmluZEluZGV4KCh0YWIpID0+IGF0dHIodGFiLCBBUklBX1NFTEVDVEVEKSA9PT0gXCJ0cnVlXCIpO1xudmFyIHNldFNlbGVjdGVkID0gKHRhYikgPT4gdGFiICYmIGF0dHIodGFiLCBcImFyaWEtc2VsZWN0ZWRcIiwgXCJ0cnVlXCIpO1xudmFyIGlzRm9jdXNhYmxlID0gKGVsKSA9PiBlbCBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgIWVsLm1hdGNoZXMoJzpkaXNhYmxlZCxbdGFiaW5kZXhePVwiLVwiXScpICYmIGVsLm1hdGNoZXMoXG4gIGBbY29udGVudGVkaXRhYmxlXSxbY29udHJvbHNdLFtocmVmXSxbdGFiaW5kZXhdLGlucHV0Om5vdChbdHlwZT1cImhpZGRlblwiXSksc2VsZWN0LHRleHRhcmVhLGJ1dHRvbixzdW1tYXJ5LGlmcmFtZWBcbik7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYnNcIiwgVUhUTUxUYWJzRWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYmxpc3RcIiwgVUhUTUxUYWJMaXN0RWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYlwiLCBVSFRNTFRhYkVsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJwYW5lbFwiLCBVSFRNTFRhYlBhbmVsRWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MVGFiRWxlbWVudCwgVUhUTUxUYWJMaXN0RWxlbWVudCwgVUhUTUxUYWJQYW5lbEVsZW1lbnQsIFVIVE1MVGFic0VsZW1lbnQgfTtcbiIsIi8qKlxuICogQ3VzdG9tIHBvc2l0aW9uaW5nIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3ZpcnR1YWwtZWxlbWVudHNcbiAqL1xuXG5jb25zdCBzaWRlcyA9IFsndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J107XG5jb25zdCBhbGlnbm1lbnRzID0gWydzdGFydCcsICdlbmQnXTtcbmNvbnN0IHBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovc2lkZXMucmVkdWNlKChhY2MsIHNpZGUpID0+IGFjYy5jb25jYXQoc2lkZSwgc2lkZSArIFwiLVwiICsgYWxpZ25tZW50c1swXSwgc2lkZSArIFwiLVwiICsgYWxpZ25tZW50c1sxXSksIFtdKTtcbmNvbnN0IG1pbiA9IE1hdGgubWluO1xuY29uc3QgbWF4ID0gTWF0aC5tYXg7XG5jb25zdCByb3VuZCA9IE1hdGgucm91bmQ7XG5jb25zdCBmbG9vciA9IE1hdGguZmxvb3I7XG5jb25zdCBjcmVhdGVDb29yZHMgPSB2ID0+ICh7XG4gIHg6IHYsXG4gIHk6IHZcbn0pO1xuY29uc3Qgb3Bwb3NpdGVTaWRlTWFwID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuY29uc3Qgb3Bwb3NpdGVBbGlnbm1lbnRNYXAgPSB7XG4gIHN0YXJ0OiAnZW5kJyxcbiAgZW5kOiAnc3RhcnQnXG59O1xuZnVuY3Rpb24gY2xhbXAoc3RhcnQsIHZhbHVlLCBlbmQpIHtcbiAgcmV0dXJuIG1heChzdGFydCwgbWluKHZhbHVlLCBlbmQpKTtcbn1cbmZ1bmN0aW9uIGV2YWx1YXRlKHZhbHVlLCBwYXJhbSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gdmFsdWUocGFyYW0pIDogdmFsdWU7XG59XG5mdW5jdGlvbiBnZXRTaWRlKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59XG5mdW5jdGlvbiBnZXRBeGlzTGVuZ3RoKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbn1cbmNvbnN0IHlBeGlzU2lkZXMgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ3RvcCcsICdib3R0b20nXSk7XG5mdW5jdGlvbiBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHlBeGlzU2lkZXMuaGFzKGdldFNpZGUocGxhY2VtZW50KSkgPyAneScgOiAneCc7XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCkge1xuICByZXR1cm4gZ2V0T3Bwb3NpdGVBeGlzKGdldFNpZGVBeGlzKHBsYWNlbWVudCkpO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50U2lkZXMocGxhY2VtZW50LCByZWN0cywgcnRsKSB7XG4gIGlmIChydGwgPT09IHZvaWQgMCkge1xuICAgIHJ0bCA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnRBeGlzID0gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpO1xuICBjb25zdCBsZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGFsaWdubWVudEF4aXMpO1xuICBsZXQgbWFpbkFsaWdubWVudFNpZGUgPSBhbGlnbm1lbnRBeGlzID09PSAneCcgPyBhbGlnbm1lbnQgPT09IChydGwgPyAnZW5kJyA6ICdzdGFydCcpID8gJ3JpZ2h0JyA6ICdsZWZ0JyA6IGFsaWdubWVudCA9PT0gJ3N0YXJ0JyA/ICdib3R0b20nIDogJ3RvcCc7XG4gIGlmIChyZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSA+IHJlY3RzLmZsb2F0aW5nW2xlbmd0aF0pIHtcbiAgICBtYWluQWxpZ25tZW50U2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5BbGlnbm1lbnRTaWRlKTtcbiAgfVxuICByZXR1cm4gW21haW5BbGlnbm1lbnRTaWRlLCBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluQWxpZ25tZW50U2lkZSldO1xufVxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRQbGFjZW1lbnRzKHBsYWNlbWVudCkge1xuICBjb25zdCBvcHBvc2l0ZVBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHJldHVybiBbZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSwgb3Bwb3NpdGVQbGFjZW1lbnQsIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KG9wcG9zaXRlUGxhY2VtZW50KV07XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9zdGFydHxlbmQvZywgYWxpZ25tZW50ID0+IG9wcG9zaXRlQWxpZ25tZW50TWFwW2FsaWdubWVudF0pO1xufVxuY29uc3QgbHJQbGFjZW1lbnQgPSBbJ2xlZnQnLCAncmlnaHQnXTtcbmNvbnN0IHJsUGxhY2VtZW50ID0gWydyaWdodCcsICdsZWZ0J107XG5jb25zdCB0YlBsYWNlbWVudCA9IFsndG9wJywgJ2JvdHRvbSddO1xuY29uc3QgYnRQbGFjZW1lbnQgPSBbJ2JvdHRvbScsICd0b3AnXTtcbmZ1bmN0aW9uIGdldFNpZGVMaXN0KHNpZGUsIGlzU3RhcnQsIHJ0bCkge1xuICBzd2l0Y2ggKHNpZGUpIHtcbiAgICBjYXNlICd0b3AnOlxuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICBpZiAocnRsKSByZXR1cm4gaXNTdGFydCA/IHJsUGxhY2VtZW50IDogbHJQbGFjZW1lbnQ7XG4gICAgICByZXR1cm4gaXNTdGFydCA/IGxyUGxhY2VtZW50IDogcmxQbGFjZW1lbnQ7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuIGlzU3RhcnQgPyB0YlBsYWNlbWVudCA6IGJ0UGxhY2VtZW50O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gW107XG4gIH1cbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMocGxhY2VtZW50LCBmbGlwQWxpZ25tZW50LCBkaXJlY3Rpb24sIHJ0bCkge1xuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgbGV0IGxpc3QgPSBnZXRTaWRlTGlzdChnZXRTaWRlKHBsYWNlbWVudCksIGRpcmVjdGlvbiA9PT0gJ3N0YXJ0JywgcnRsKTtcbiAgaWYgKGFsaWdubWVudCkge1xuICAgIGxpc3QgPSBsaXN0Lm1hcChzaWRlID0+IHNpZGUgKyBcIi1cIiArIGFsaWdubWVudCk7XG4gICAgaWYgKGZsaXBBbGlnbm1lbnQpIHtcbiAgICAgIGxpc3QgPSBsaXN0LmNvbmNhdChsaXN0Lm1hcChnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbGlzdDtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLCBzaWRlID0+IG9wcG9zaXRlU2lkZU1hcFtzaWRlXSk7XG59XG5mdW5jdGlvbiBleHBhbmRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgLi4ucGFkZGluZ1xuICB9O1xufVxuZnVuY3Rpb24gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKSB7XG4gIHJldHVybiB0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBleHBhbmRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpIDoge1xuICAgIHRvcDogcGFkZGluZyxcbiAgICByaWdodDogcGFkZGluZyxcbiAgICBib3R0b206IHBhZGRpbmcsXG4gICAgbGVmdDogcGFkZGluZ1xuICB9O1xufVxuZnVuY3Rpb24gcmVjdFRvQ2xpZW50UmVjdChyZWN0KSB7XG4gIGNvbnN0IHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH0gPSByZWN0O1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB0b3A6IHksXG4gICAgbGVmdDogeCxcbiAgICByaWdodDogeCArIHdpZHRoLFxuICAgIGJvdHRvbTogeSArIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuZXhwb3J0IHsgYWxpZ25tZW50cywgY2xhbXAsIGNyZWF0ZUNvb3JkcywgZXZhbHVhdGUsIGV4cGFuZFBhZGRpbmdPYmplY3QsIGZsb29yLCBnZXRBbGlnbm1lbnQsIGdldEFsaWdubWVudEF4aXMsIGdldEFsaWdubWVudFNpZGVzLCBnZXRBeGlzTGVuZ3RoLCBnZXRFeHBhbmRlZFBsYWNlbWVudHMsIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50LCBnZXRPcHBvc2l0ZUF4aXMsIGdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMsIGdldE9wcG9zaXRlUGxhY2VtZW50LCBnZXRQYWRkaW5nT2JqZWN0LCBnZXRTaWRlLCBnZXRTaWRlQXhpcywgbWF4LCBtaW4sIHBsYWNlbWVudHMsIHJlY3RUb0NsaWVudFJlY3QsIHJvdW5kLCBzaWRlcyB9O1xuIiwiaW1wb3J0IHsgZ2V0U2lkZUF4aXMsIGdldEFsaWdubWVudEF4aXMsIGdldEF4aXNMZW5ndGgsIGdldFNpZGUsIGdldEFsaWdubWVudCwgZXZhbHVhdGUsIGdldFBhZGRpbmdPYmplY3QsIHJlY3RUb0NsaWVudFJlY3QsIG1pbiwgY2xhbXAsIHBsYWNlbWVudHMsIGdldEFsaWdubWVudFNpZGVzLCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQsIGdldEV4cGFuZGVkUGxhY2VtZW50cywgZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cywgc2lkZXMsIG1heCwgZ2V0T3Bwb3NpdGVBeGlzIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcbmV4cG9ydCB7IHJlY3RUb0NsaWVudFJlY3QgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMnO1xuXG5mdW5jdGlvbiBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChfcmVmLCBwbGFjZW1lbnQsIHJ0bCkge1xuICBsZXQge1xuICAgIHJlZmVyZW5jZSxcbiAgICBmbG9hdGluZ1xuICB9ID0gX3JlZjtcbiAgY29uc3Qgc2lkZUF4aXMgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnRBeGlzID0gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbkxlbmd0aCA9IGdldEF4aXNMZW5ndGgoYWxpZ25tZW50QXhpcyk7XG4gIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gIGNvbnN0IGlzVmVydGljYWwgPSBzaWRlQXhpcyA9PT0gJ3knO1xuICBjb25zdCBjb21tb25YID0gcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGggLyAyIC0gZmxvYXRpbmcud2lkdGggLyAyO1xuICBjb25zdCBjb21tb25ZID0gcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0IC8gMiAtIGZsb2F0aW5nLmhlaWdodCAvIDI7XG4gIGNvbnN0IGNvbW1vbkFsaWduID0gcmVmZXJlbmNlW2FsaWduTGVuZ3RoXSAvIDIgLSBmbG9hdGluZ1thbGlnbkxlbmd0aF0gLyAyO1xuICBsZXQgY29vcmRzO1xuICBzd2l0Y2ggKHNpZGUpIHtcbiAgICBjYXNlICd0b3AnOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSAtIGZsb2F0aW5nLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggLSBmbG9hdGluZy53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54LFxuICAgICAgICB5OiByZWZlcmVuY2UueVxuICAgICAgfTtcbiAgfVxuICBzd2l0Y2ggKGdldEFsaWdubWVudChwbGFjZW1lbnQpKSB7XG4gICAgY2FzZSAnc3RhcnQnOlxuICAgICAgY29vcmRzW2FsaWdubWVudEF4aXNdIC09IGNvbW1vbkFsaWduICogKHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2VuZCc6XG4gICAgICBjb29yZHNbYWxpZ25tZW50QXhpc10gKz0gY29tbW9uQWxpZ24gKiAocnRsICYmIGlzVmVydGljYWwgPyAtMSA6IDEpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGNvb3Jkcztcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgYHhgIGFuZCBgeWAgY29vcmRpbmF0ZXMgdGhhdCB3aWxsIHBsYWNlIHRoZSBmbG9hdGluZyBlbGVtZW50XG4gKiBuZXh0IHRvIGEgZ2l2ZW4gcmVmZXJlbmNlIGVsZW1lbnQuXG4gKlxuICogVGhpcyBleHBvcnQgZG9lcyBub3QgaGF2ZSBhbnkgYHBsYXRmb3JtYCBpbnRlcmZhY2UgbG9naWMuIFlvdSB3aWxsIG5lZWQgdG9cbiAqIHdyaXRlIG9uZSBmb3IgdGhlIHBsYXRmb3JtIHlvdSBhcmUgdXNpbmcgRmxvYXRpbmcgVUkgd2l0aC5cbiAqL1xuY29uc3QgY29tcHV0ZVBvc2l0aW9uID0gYXN5bmMgKHJlZmVyZW5jZSwgZmxvYXRpbmcsIGNvbmZpZykgPT4ge1xuICBjb25zdCB7XG4gICAgcGxhY2VtZW50ID0gJ2JvdHRvbScsXG4gICAgc3RyYXRlZ3kgPSAnYWJzb2x1dGUnLFxuICAgIG1pZGRsZXdhcmUgPSBbXSxcbiAgICBwbGF0Zm9ybVxuICB9ID0gY29uZmlnO1xuICBjb25zdCB2YWxpZE1pZGRsZXdhcmUgPSBtaWRkbGV3YXJlLmZpbHRlcihCb29sZWFuKTtcbiAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChmbG9hdGluZykpO1xuICBsZXQgcmVjdHMgPSBhd2FpdCBwbGF0Zm9ybS5nZXRFbGVtZW50UmVjdHMoe1xuICAgIHJlZmVyZW5jZSxcbiAgICBmbG9hdGluZyxcbiAgICBzdHJhdGVneVxuICB9KTtcbiAgbGV0IHtcbiAgICB4LFxuICAgIHlcbiAgfSA9IGNvbXB1dGVDb29yZHNGcm9tUGxhY2VtZW50KHJlY3RzLCBwbGFjZW1lbnQsIHJ0bCk7XG4gIGxldCBzdGF0ZWZ1bFBsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgbGV0IG1pZGRsZXdhcmVEYXRhID0ge307XG4gIGxldCByZXNldENvdW50ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWxpZE1pZGRsZXdhcmUubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB7XG4gICAgICBuYW1lLFxuICAgICAgZm5cbiAgICB9ID0gdmFsaWRNaWRkbGV3YXJlW2ldO1xuICAgIGNvbnN0IHtcbiAgICAgIHg6IG5leHRYLFxuICAgICAgeTogbmV4dFksXG4gICAgICBkYXRhLFxuICAgICAgcmVzZXRcbiAgICB9ID0gYXdhaXQgZm4oe1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBpbml0aWFsUGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQ6IHN0YXRlZnVsUGxhY2VtZW50LFxuICAgICAgc3RyYXRlZ3ksXG4gICAgICBtaWRkbGV3YXJlRGF0YSxcbiAgICAgIHJlY3RzLFxuICAgICAgcGxhdGZvcm0sXG4gICAgICBlbGVtZW50czoge1xuICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgIGZsb2F0aW5nXG4gICAgICB9XG4gICAgfSk7XG4gICAgeCA9IG5leHRYICE9IG51bGwgPyBuZXh0WCA6IHg7XG4gICAgeSA9IG5leHRZICE9IG51bGwgPyBuZXh0WSA6IHk7XG4gICAgbWlkZGxld2FyZURhdGEgPSB7XG4gICAgICAuLi5taWRkbGV3YXJlRGF0YSxcbiAgICAgIFtuYW1lXToge1xuICAgICAgICAuLi5taWRkbGV3YXJlRGF0YVtuYW1lXSxcbiAgICAgICAgLi4uZGF0YVxuICAgICAgfVxuICAgIH07XG4gICAgaWYgKHJlc2V0ICYmIHJlc2V0Q291bnQgPD0gNTApIHtcbiAgICAgIHJlc2V0Q291bnQrKztcbiAgICAgIGlmICh0eXBlb2YgcmVzZXQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChyZXNldC5wbGFjZW1lbnQpIHtcbiAgICAgICAgICBzdGF0ZWZ1bFBsYWNlbWVudCA9IHJlc2V0LnBsYWNlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzZXQucmVjdHMpIHtcbiAgICAgICAgICByZWN0cyA9IHJlc2V0LnJlY3RzID09PSB0cnVlID8gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICAgICAgICAgIHJlZmVyZW5jZSxcbiAgICAgICAgICAgIGZsb2F0aW5nLFxuICAgICAgICAgICAgc3RyYXRlZ3lcbiAgICAgICAgICB9KSA6IHJlc2V0LnJlY3RzO1xuICAgICAgICB9XG4gICAgICAgICh7XG4gICAgICAgICAgeCxcbiAgICAgICAgICB5XG4gICAgICAgIH0gPSBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChyZWN0cywgc3RhdGVmdWxQbGFjZW1lbnQsIHJ0bCkpO1xuICAgICAgfVxuICAgICAgaSA9IC0xO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICBwbGFjZW1lbnQ6IHN0YXRlZnVsUGxhY2VtZW50LFxuICAgIHN0cmF0ZWd5LFxuICAgIG1pZGRsZXdhcmVEYXRhXG4gIH07XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHdpdGggYW4gb2JqZWN0IG9mIG92ZXJmbG93IHNpZGUgb2Zmc2V0cyB0aGF0IGRldGVybWluZSBob3cgbXVjaCB0aGVcbiAqIGVsZW1lbnQgaXMgb3ZlcmZsb3dpbmcgYSBnaXZlbiBjbGlwcGluZyBib3VuZGFyeSBvbiBlYWNoIHNpZGUuXG4gKiAtIHBvc2l0aXZlID0gb3ZlcmZsb3dpbmcgdGhlIGJvdW5kYXJ5IGJ5IHRoYXQgbnVtYmVyIG9mIHBpeGVsc1xuICogLSBuZWdhdGl2ZSA9IGhvdyBtYW55IHBpeGVscyBsZWZ0IGJlZm9yZSBpdCB3aWxsIG92ZXJmbG93XG4gKiAtIDAgPSBsaWVzIGZsdXNoIHdpdGggdGhlIGJvdW5kYXJ5XG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZGV0ZWN0T3ZlcmZsb3dcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9hd2FpdCRwbGF0Zm9ybSRpc0VsZTtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBjb25zdCB7XG4gICAgeCxcbiAgICB5LFxuICAgIHBsYXRmb3JtLFxuICAgIHJlY3RzLFxuICAgIGVsZW1lbnRzLFxuICAgIHN0cmF0ZWd5XG4gIH0gPSBzdGF0ZTtcbiAgY29uc3Qge1xuICAgIGJvdW5kYXJ5ID0gJ2NsaXBwaW5nQW5jZXN0b3JzJyxcbiAgICByb290Qm91bmRhcnkgPSAndmlld3BvcnQnLFxuICAgIGVsZW1lbnRDb250ZXh0ID0gJ2Zsb2F0aW5nJyxcbiAgICBhbHRCb3VuZGFyeSA9IGZhbHNlLFxuICAgIHBhZGRpbmcgPSAwXG4gIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gIGNvbnN0IHBhZGRpbmdPYmplY3QgPSBnZXRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpO1xuICBjb25zdCBhbHRDb250ZXh0ID0gZWxlbWVudENvbnRleHQgPT09ICdmbG9hdGluZycgPyAncmVmZXJlbmNlJyA6ICdmbG9hdGluZyc7XG4gIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIGNvbnN0IGNsaXBwaW5nQ2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3QoYXdhaXQgcGxhdGZvcm0uZ2V0Q2xpcHBpbmdSZWN0KHtcbiAgICBlbGVtZW50OiAoKF9hd2FpdCRwbGF0Zm9ybSRpc0VsZSA9IGF3YWl0IChwbGF0Zm9ybS5pc0VsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzRWxlbWVudChlbGVtZW50KSkpICE9IG51bGwgPyBfYXdhaXQkcGxhdGZvcm0kaXNFbGUgOiB0cnVlKSA/IGVsZW1lbnQgOiBlbGVtZW50LmNvbnRleHRFbGVtZW50IHx8IChhd2FpdCAocGxhdGZvcm0uZ2V0RG9jdW1lbnRFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudHMuZmxvYXRpbmcpKSksXG4gICAgYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5LFxuICAgIHN0cmF0ZWd5XG4gIH0pKTtcbiAgY29uc3QgcmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSAnZmxvYXRpbmcnID8ge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aDogcmVjdHMuZmxvYXRpbmcud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0cy5mbG9hdGluZy5oZWlnaHRcbiAgfSA6IHJlY3RzLnJlZmVyZW5jZTtcbiAgY29uc3Qgb2Zmc2V0UGFyZW50ID0gYXdhaXQgKHBsYXRmb3JtLmdldE9mZnNldFBhcmVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gIGNvbnN0IG9mZnNldFNjYWxlID0gKGF3YWl0IChwbGF0Zm9ybS5pc0VsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzRWxlbWVudChvZmZzZXRQYXJlbnQpKSkgPyAoYXdhaXQgKHBsYXRmb3JtLmdldFNjYWxlID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXRTY2FsZShvZmZzZXRQYXJlbnQpKSkgfHwge1xuICAgIHg6IDEsXG4gICAgeTogMVxuICB9IDoge1xuICAgIHg6IDEsXG4gICAgeTogMVxuICB9O1xuICBjb25zdCBlbGVtZW50Q2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3QocGxhdGZvcm0uY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QgPyBhd2FpdCBwbGF0Zm9ybS5jb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCh7XG4gICAgZWxlbWVudHMsXG4gICAgcmVjdCxcbiAgICBvZmZzZXRQYXJlbnQsXG4gICAgc3RyYXRlZ3lcbiAgfSkgOiByZWN0KTtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IChjbGlwcGluZ0NsaWVudFJlY3QudG9wIC0gZWxlbWVudENsaWVudFJlY3QudG9wICsgcGFkZGluZ09iamVjdC50b3ApIC8gb2Zmc2V0U2NhbGUueSxcbiAgICBib3R0b206IChlbGVtZW50Q2xpZW50UmVjdC5ib3R0b20gLSBjbGlwcGluZ0NsaWVudFJlY3QuYm90dG9tICsgcGFkZGluZ09iamVjdC5ib3R0b20pIC8gb2Zmc2V0U2NhbGUueSxcbiAgICBsZWZ0OiAoY2xpcHBpbmdDbGllbnRSZWN0LmxlZnQgLSBlbGVtZW50Q2xpZW50UmVjdC5sZWZ0ICsgcGFkZGluZ09iamVjdC5sZWZ0KSAvIG9mZnNldFNjYWxlLngsXG4gICAgcmlnaHQ6IChlbGVtZW50Q2xpZW50UmVjdC5yaWdodCAtIGNsaXBwaW5nQ2xpZW50UmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHQpIC8gb2Zmc2V0U2NhbGUueFxuICB9O1xufVxuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdG8gcG9zaXRpb24gYW4gaW5uZXIgZWxlbWVudCBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBzbyB0aGF0IGl0XG4gKiBhcHBlYXJzIGNlbnRlcmVkIHRvIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hcnJvd1xuICovXG5jb25zdCBhcnJvdyA9IG9wdGlvbnMgPT4gKHtcbiAgbmFtZTogJ2Fycm93JyxcbiAgb3B0aW9ucyxcbiAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICBjb25zdCB7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHBsYWNlbWVudCxcbiAgICAgIHJlY3RzLFxuICAgICAgcGxhdGZvcm0sXG4gICAgICBlbGVtZW50cyxcbiAgICAgIG1pZGRsZXdhcmVEYXRhXG4gICAgfSA9IHN0YXRlO1xuICAgIC8vIFNpbmNlIGBlbGVtZW50YCBpcyByZXF1aXJlZCwgd2UgZG9uJ3QgUGFydGlhbDw+IHRoZSB0eXBlLlxuICAgIGNvbnN0IHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBwYWRkaW5nID0gMFxuICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSkgfHwge307XG4gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcbiAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICB4LFxuICAgICAgeVxuICAgIH07XG4gICAgY29uc3QgYXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgICBjb25zdCBsZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGF4aXMpO1xuICAgIGNvbnN0IGFycm93RGltZW5zaW9ucyA9IGF3YWl0IHBsYXRmb3JtLmdldERpbWVuc2lvbnMoZWxlbWVudCk7XG4gICAgY29uc3QgaXNZQXhpcyA9IGF4aXMgPT09ICd5JztcbiAgICBjb25zdCBtaW5Qcm9wID0gaXNZQXhpcyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgIGNvbnN0IG1heFByb3AgPSBpc1lBeGlzID8gJ2JvdHRvbScgOiAncmlnaHQnO1xuICAgIGNvbnN0IGNsaWVudFByb3AgPSBpc1lBeGlzID8gJ2NsaWVudEhlaWdodCcgOiAnY2xpZW50V2lkdGgnO1xuICAgIGNvbnN0IGVuZERpZmYgPSByZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSArIHJlY3RzLnJlZmVyZW5jZVtheGlzXSAtIGNvb3Jkc1theGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbmd0aF07XG4gICAgY29uc3Qgc3RhcnREaWZmID0gY29vcmRzW2F4aXNdIC0gcmVjdHMucmVmZXJlbmNlW2F4aXNdO1xuICAgIGNvbnN0IGFycm93T2Zmc2V0UGFyZW50ID0gYXdhaXQgKHBsYXRmb3JtLmdldE9mZnNldFBhcmVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpKTtcbiAgICBsZXQgY2xpZW50U2l6ZSA9IGFycm93T2Zmc2V0UGFyZW50ID8gYXJyb3dPZmZzZXRQYXJlbnRbY2xpZW50UHJvcF0gOiAwO1xuXG4gICAgLy8gRE9NIHBsYXRmb3JtIGNhbiByZXR1cm4gYHdpbmRvd2AgYXMgdGhlIGBvZmZzZXRQYXJlbnRgLlxuICAgIGlmICghY2xpZW50U2l6ZSB8fCAhKGF3YWl0IChwbGF0Zm9ybS5pc0VsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzRWxlbWVudChhcnJvd09mZnNldFBhcmVudCkpKSkge1xuICAgICAgY2xpZW50U2l6ZSA9IGVsZW1lbnRzLmZsb2F0aW5nW2NsaWVudFByb3BdIHx8IHJlY3RzLmZsb2F0aW5nW2xlbmd0aF07XG4gICAgfVxuICAgIGNvbnN0IGNlbnRlclRvUmVmZXJlbmNlID0gZW5kRGlmZiAvIDIgLSBzdGFydERpZmYgLyAyO1xuXG4gICAgLy8gSWYgdGhlIHBhZGRpbmcgaXMgbGFyZ2UgZW5vdWdoIHRoYXQgaXQgY2F1c2VzIHRoZSBhcnJvdyB0byBubyBsb25nZXIgYmVcbiAgICAvLyBjZW50ZXJlZCwgbW9kaWZ5IHRoZSBwYWRkaW5nIHNvIHRoYXQgaXQgaXMgY2VudGVyZWQuXG4gICAgY29uc3QgbGFyZ2VzdFBvc3NpYmxlUGFkZGluZyA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLyAyIC0gMTtcbiAgICBjb25zdCBtaW5QYWRkaW5nID0gbWluKHBhZGRpbmdPYmplY3RbbWluUHJvcF0sIGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcpO1xuICAgIGNvbnN0IG1heFBhZGRpbmcgPSBtaW4ocGFkZGluZ09iamVjdFttYXhQcm9wXSwgbGFyZ2VzdFBvc3NpYmxlUGFkZGluZyk7XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFycm93IGRvZXNuJ3Qgb3ZlcmZsb3cgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaWYgdGhlIGNlbnRlclxuICAgIC8vIHBvaW50IGlzIG91dHNpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQncyBib3VuZHMuXG4gICAgY29uc3QgbWluJDEgPSBtaW5QYWRkaW5nO1xuICAgIGNvbnN0IG1heCA9IGNsaWVudFNpemUgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAtIG1heFBhZGRpbmc7XG4gICAgY29uc3QgY2VudGVyID0gY2xpZW50U2l6ZSAvIDIgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgKyBjZW50ZXJUb1JlZmVyZW5jZTtcbiAgICBjb25zdCBvZmZzZXQgPSBjbGFtcChtaW4kMSwgY2VudGVyLCBtYXgpO1xuXG4gICAgLy8gSWYgdGhlIHJlZmVyZW5jZSBpcyBzbWFsbCBlbm91Z2ggdGhhdCB0aGUgYXJyb3cncyBwYWRkaW5nIGNhdXNlcyBpdCB0b1xuICAgIC8vIHRvIHBvaW50IHRvIG5vdGhpbmcgZm9yIGFuIGFsaWduZWQgcGxhY2VtZW50LCBhZGp1c3QgdGhlIG9mZnNldCBvZiB0aGVcbiAgICAvLyBmbG9hdGluZyBlbGVtZW50IGl0c2VsZi4gVG8gZW5zdXJlIGBzaGlmdCgpYCBjb250aW51ZXMgdG8gdGFrZSBhY3Rpb24sXG4gICAgLy8gYSBzaW5nbGUgcmVzZXQgaXMgcGVyZm9ybWVkIHdoZW4gdGhpcyBpcyB0cnVlLlxuICAgIGNvbnN0IHNob3VsZEFkZE9mZnNldCA9ICFtaWRkbGV3YXJlRGF0YS5hcnJvdyAmJiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSAhPSBudWxsICYmIGNlbnRlciAhPT0gb2Zmc2V0ICYmIHJlY3RzLnJlZmVyZW5jZVtsZW5ndGhdIC8gMiAtIChjZW50ZXIgPCBtaW4kMSA/IG1pblBhZGRpbmcgOiBtYXhQYWRkaW5nKSAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiA8IDA7XG4gICAgY29uc3QgYWxpZ25tZW50T2Zmc2V0ID0gc2hvdWxkQWRkT2Zmc2V0ID8gY2VudGVyIDwgbWluJDEgPyBjZW50ZXIgLSBtaW4kMSA6IGNlbnRlciAtIG1heCA6IDA7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtheGlzXTogY29vcmRzW2F4aXNdICsgYWxpZ25tZW50T2Zmc2V0LFxuICAgICAgZGF0YToge1xuICAgICAgICBbYXhpc106IG9mZnNldCxcbiAgICAgICAgY2VudGVyT2Zmc2V0OiBjZW50ZXIgLSBvZmZzZXQgLSBhbGlnbm1lbnRPZmZzZXQsXG4gICAgICAgIC4uLihzaG91bGRBZGRPZmZzZXQgJiYge1xuICAgICAgICAgIGFsaWdubWVudE9mZnNldFxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIHJlc2V0OiBzaG91bGRBZGRPZmZzZXRcbiAgICB9O1xuICB9XG59KTtcblxuZnVuY3Rpb24gZ2V0UGxhY2VtZW50TGlzdChhbGlnbm1lbnQsIGF1dG9BbGlnbm1lbnQsIGFsbG93ZWRQbGFjZW1lbnRzKSB7XG4gIGNvbnN0IGFsbG93ZWRQbGFjZW1lbnRzU29ydGVkQnlBbGlnbm1lbnQgPSBhbGlnbm1lbnQgPyBbLi4uYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSA9PT0gYWxpZ25tZW50KSwgLi4uYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSAhPT0gYWxpZ25tZW50KV0gOiBhbGxvd2VkUGxhY2VtZW50cy5maWx0ZXIocGxhY2VtZW50ID0+IGdldFNpZGUocGxhY2VtZW50KSA9PT0gcGxhY2VtZW50KTtcbiAgcmV0dXJuIGFsbG93ZWRQbGFjZW1lbnRzU29ydGVkQnlBbGlnbm1lbnQuZmlsdGVyKHBsYWNlbWVudCA9PiB7XG4gICAgaWYgKGFsaWdubWVudCkge1xuICAgICAgcmV0dXJuIGdldEFsaWdubWVudChwbGFjZW1lbnQpID09PSBhbGlnbm1lbnQgfHwgKGF1dG9BbGlnbm1lbnQgPyBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChwbGFjZW1lbnQpICE9PSBwbGFjZW1lbnQgOiBmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcbn1cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IGNob29zaW5nIHRoZSBwbGFjZW1lbnRcbiAqIHRoYXQgaGFzIHRoZSBtb3N0IHNwYWNlIGF2YWlsYWJsZSBhdXRvbWF0aWNhbGx5LCB3aXRob3V0IG5lZWRpbmcgdG8gc3BlY2lmeSBhXG4gKiBwcmVmZXJyZWQgcGxhY2VtZW50LiBBbHRlcm5hdGl2ZSB0byBgZmxpcGAuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXV0b1BsYWNlbWVudFxuICovXG5jb25zdCBhdXRvUGxhY2VtZW50ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdhdXRvUGxhY2VtZW50JyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJGF1dG9QLCBfbWlkZGxld2FyZURhdGEkYXV0b1AyLCBfcGxhY2VtZW50c1RoYXRGaXRPbkU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJlY3RzLFxuICAgICAgICBtaWRkbGV3YXJlRGF0YSxcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgZWxlbWVudHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY3Jvc3NBeGlzID0gZmFsc2UsXG4gICAgICAgIGFsaWdubWVudCxcbiAgICAgICAgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLFxuICAgICAgICBhdXRvQWxpZ25tZW50ID0gdHJ1ZSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgcGxhY2VtZW50cyQxID0gYWxpZ25tZW50ICE9PSB1bmRlZmluZWQgfHwgYWxsb3dlZFBsYWNlbWVudHMgPT09IHBsYWNlbWVudHMgPyBnZXRQbGFjZW1lbnRMaXN0KGFsaWdubWVudCB8fCBudWxsLCBhdXRvQWxpZ25tZW50LCBhbGxvd2VkUGxhY2VtZW50cykgOiBhbGxvd2VkUGxhY2VtZW50cztcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBjdXJyZW50SW5kZXggPSAoKF9taWRkbGV3YXJlRGF0YSRhdXRvUCA9IG1pZGRsZXdhcmVEYXRhLmF1dG9QbGFjZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkYXV0b1AuaW5kZXgpIHx8IDA7XG4gICAgICBjb25zdCBjdXJyZW50UGxhY2VtZW50ID0gcGxhY2VtZW50cyQxW2N1cnJlbnRJbmRleF07XG4gICAgICBpZiAoY3VycmVudFBsYWNlbWVudCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFsaWdubWVudFNpZGVzID0gZ2V0QWxpZ25tZW50U2lkZXMoY3VycmVudFBsYWNlbWVudCwgcmVjdHMsIGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZWxlbWVudHMuZmxvYXRpbmcpKSk7XG5cbiAgICAgIC8vIE1ha2UgYGNvbXB1dGVDb29yZHNgIHN0YXJ0IGZyb20gdGhlIHJpZ2h0IHBsYWNlLlxuICAgICAgaWYgKHBsYWNlbWVudCAhPT0gY3VycmVudFBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudHMkMVswXVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnRPdmVyZmxvd3MgPSBbb3ZlcmZsb3dbZ2V0U2lkZShjdXJyZW50UGxhY2VtZW50KV0sIG92ZXJmbG93W2FsaWdubWVudFNpZGVzWzBdXSwgb3ZlcmZsb3dbYWxpZ25tZW50U2lkZXNbMV1dXTtcbiAgICAgIGNvbnN0IGFsbE92ZXJmbG93cyA9IFsuLi4oKChfbWlkZGxld2FyZURhdGEkYXV0b1AyID0gbWlkZGxld2FyZURhdGEuYXV0b1BsYWNlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRhdXRvUDIub3ZlcmZsb3dzKSB8fCBbXSksIHtcbiAgICAgICAgcGxhY2VtZW50OiBjdXJyZW50UGxhY2VtZW50LFxuICAgICAgICBvdmVyZmxvd3M6IGN1cnJlbnRPdmVyZmxvd3NcbiAgICAgIH1dO1xuICAgICAgY29uc3QgbmV4dFBsYWNlbWVudCA9IHBsYWNlbWVudHMkMVtjdXJyZW50SW5kZXggKyAxXTtcblxuICAgICAgLy8gVGhlcmUgYXJlIG1vcmUgcGxhY2VtZW50cyB0byBjaGVjay5cbiAgICAgIGlmIChuZXh0UGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5kZXg6IGN1cnJlbnRJbmRleCArIDEsXG4gICAgICAgICAgICBvdmVyZmxvd3M6IGFsbE92ZXJmbG93c1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogbmV4dFBsYWNlbWVudFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZSA9IGFsbE92ZXJmbG93cy5tYXAoZCA9PiB7XG4gICAgICAgIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChkLnBsYWNlbWVudCk7XG4gICAgICAgIHJldHVybiBbZC5wbGFjZW1lbnQsIGFsaWdubWVudCAmJiBjcm9zc0F4aXMgP1xuICAgICAgICAvLyBDaGVjayBhbG9uZyB0aGUgbWFpbkF4aXMgYW5kIG1haW4gY3Jvc3NBeGlzIHNpZGUuXG4gICAgICAgIGQub3ZlcmZsb3dzLnNsaWNlKDAsIDIpLnJlZHVjZSgoYWNjLCB2KSA9PiBhY2MgKyB2LCAwKSA6XG4gICAgICAgIC8vIENoZWNrIG9ubHkgdGhlIG1haW5BeGlzLlxuICAgICAgICBkLm92ZXJmbG93c1swXSwgZC5vdmVyZmxvd3NdO1xuICAgICAgfSkuc29ydCgoYSwgYikgPT4gYVsxXSAtIGJbMV0pO1xuICAgICAgY29uc3QgcGxhY2VtZW50c1RoYXRGaXRPbkVhY2hTaWRlID0gcGxhY2VtZW50c1NvcnRlZEJ5TW9zdFNwYWNlLmZpbHRlcihkID0+IGRbMl0uc2xpY2UoMCxcbiAgICAgIC8vIEFsaWduZWQgcGxhY2VtZW50cyBzaG91bGQgbm90IGNoZWNrIHRoZWlyIG9wcG9zaXRlIGNyb3NzQXhpc1xuICAgICAgLy8gc2lkZS5cbiAgICAgIGdldEFsaWdubWVudChkWzBdKSA/IDIgOiAzKS5ldmVyeSh2ID0+IHYgPD0gMCkpO1xuICAgICAgY29uc3QgcmVzZXRQbGFjZW1lbnQgPSAoKF9wbGFjZW1lbnRzVGhhdEZpdE9uRSA9IHBsYWNlbWVudHNUaGF0Rml0T25FYWNoU2lkZVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9wbGFjZW1lbnRzVGhhdEZpdE9uRVswXSkgfHwgcGxhY2VtZW50c1NvcnRlZEJ5TW9zdFNwYWNlWzBdWzBdO1xuICAgICAgaWYgKHJlc2V0UGxhY2VtZW50ICE9PSBwbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBpbmRleDogY3VycmVudEluZGV4ICsgMSxcbiAgICAgICAgICAgIG92ZXJmbG93czogYWxsT3ZlcmZsb3dzXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiByZXNldFBsYWNlbWVudFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBmbGlwcGluZyB0aGUgYHBsYWNlbWVudGBcbiAqIGluIG9yZGVyIHRvIGtlZXAgaXQgaW4gdmlldyB3aGVuIHRoZSBwcmVmZXJyZWQgcGxhY2VtZW50KHMpIHdpbGwgb3ZlcmZsb3cgdGhlXG4gKiBjbGlwcGluZyBib3VuZGFyeS4gQWx0ZXJuYXRpdmUgdG8gYGF1dG9QbGFjZW1lbnRgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2ZsaXBcbiAqL1xuY29uc3QgZmxpcCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnZmxpcCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRhcnJvdywgX21pZGRsZXdhcmVEYXRhJGZsaXA7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBpbml0aWFsUGxhY2VtZW50LFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgZWxlbWVudHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFpbkF4aXM6IGNoZWNrTWFpbkF4aXMgPSB0cnVlLFxuICAgICAgICBjcm9zc0F4aXM6IGNoZWNrQ3Jvc3NBeGlzID0gdHJ1ZSxcbiAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzOiBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICAgIGZhbGxiYWNrU3RyYXRlZ3kgPSAnYmVzdEZpdCcsXG4gICAgICAgIGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24gPSAnbm9uZScsXG4gICAgICAgIGZsaXBBbGlnbm1lbnQgPSB0cnVlLFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG5cbiAgICAgIC8vIElmIGEgcmVzZXQgYnkgdGhlIGFycm93IHdhcyBjYXVzZWQgZHVlIHRvIGFuIGFsaWdubWVudCBvZmZzZXQgYmVpbmdcbiAgICAgIC8vIGFkZGVkLCB3ZSBzaG91bGQgc2tpcCBhbnkgbG9naWMgbm93IHNpbmNlIGBmbGlwKClgIGhhcyBhbHJlYWR5IGRvbmUgaXRzXG4gICAgICAvLyB3b3JrLlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8yNTQ5I2lzc3VlY29tbWVudC0xNzE5NjAxNjQzXG4gICAgICBpZiAoKF9taWRkbGV3YXJlRGF0YSRhcnJvdyA9IG1pZGRsZXdhcmVEYXRhLmFycm93KSAhPSBudWxsICYmIF9taWRkbGV3YXJlRGF0YSRhcnJvdy5hbGlnbm1lbnRPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGluaXRpYWxTaWRlQXhpcyA9IGdldFNpZGVBeGlzKGluaXRpYWxQbGFjZW1lbnQpO1xuICAgICAgY29uc3QgaXNCYXNlUGxhY2VtZW50ID0gZ2V0U2lkZShpbml0aWFsUGxhY2VtZW50KSA9PT0gaW5pdGlhbFBsYWNlbWVudDtcbiAgICAgIGNvbnN0IHJ0bCA9IGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZWxlbWVudHMuZmxvYXRpbmcpKTtcbiAgICAgIGNvbnN0IGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwQWxpZ25tZW50ID8gW2dldE9wcG9zaXRlUGxhY2VtZW50KGluaXRpYWxQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkUGxhY2VtZW50cyhpbml0aWFsUGxhY2VtZW50KSk7XG4gICAgICBjb25zdCBoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uID0gZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiAhPT0gJ25vbmUnO1xuICAgICAgaWYgKCFzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgJiYgaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbikge1xuICAgICAgICBmYWxsYmFja1BsYWNlbWVudHMucHVzaCguLi5nZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzKGluaXRpYWxQbGFjZW1lbnQsIGZsaXBBbGlnbm1lbnQsIGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24sIHJ0bCkpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGxhY2VtZW50cyA9IFtpbml0aWFsUGxhY2VtZW50LCAuLi5mYWxsYmFja1BsYWNlbWVudHNdO1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zKTtcbiAgICAgIGNvbnN0IG92ZXJmbG93cyA9IFtdO1xuICAgICAgbGV0IG92ZXJmbG93c0RhdGEgPSAoKF9taWRkbGV3YXJlRGF0YSRmbGlwID0gbWlkZGxld2FyZURhdGEuZmxpcCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRmbGlwLm92ZXJmbG93cykgfHwgW107XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBvdmVyZmxvd3MucHVzaChvdmVyZmxvd1tzaWRlXSk7XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgY29uc3Qgc2lkZXMgPSBnZXRBbGlnbm1lbnRTaWRlcyhwbGFjZW1lbnQsIHJlY3RzLCBydGwpO1xuICAgICAgICBvdmVyZmxvd3MucHVzaChvdmVyZmxvd1tzaWRlc1swXV0sIG92ZXJmbG93W3NpZGVzWzFdXSk7XG4gICAgICB9XG4gICAgICBvdmVyZmxvd3NEYXRhID0gWy4uLm92ZXJmbG93c0RhdGEsIHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBvdmVyZmxvd3NcbiAgICAgIH1dO1xuXG4gICAgICAvLyBPbmUgb3IgbW9yZSBzaWRlcyBpcyBvdmVyZmxvd2luZy5cbiAgICAgIGlmICghb3ZlcmZsb3dzLmV2ZXJ5KHNpZGUgPT4gc2lkZSA8PSAwKSkge1xuICAgICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJGZsaXAyLCBfb3ZlcmZsb3dzRGF0YSRmaWx0ZXI7XG4gICAgICAgIGNvbnN0IG5leHRJbmRleCA9ICgoKF9taWRkbGV3YXJlRGF0YSRmbGlwMiA9IG1pZGRsZXdhcmVEYXRhLmZsaXApID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkZmxpcDIuaW5kZXgpIHx8IDApICsgMTtcbiAgICAgICAgY29uc3QgbmV4dFBsYWNlbWVudCA9IHBsYWNlbWVudHNbbmV4dEluZGV4XTtcbiAgICAgICAgaWYgKG5leHRQbGFjZW1lbnQpIHtcbiAgICAgICAgICBjb25zdCBpZ25vcmVDcm9zc0F4aXNPdmVyZmxvdyA9IGNoZWNrQ3Jvc3NBeGlzID09PSAnYWxpZ25tZW50JyA/IGluaXRpYWxTaWRlQXhpcyAhPT0gZ2V0U2lkZUF4aXMobmV4dFBsYWNlbWVudCkgOiBmYWxzZTtcbiAgICAgICAgICBpZiAoIWlnbm9yZUNyb3NzQXhpc092ZXJmbG93IHx8XG4gICAgICAgICAgLy8gV2UgbGVhdmUgdGhlIGN1cnJlbnQgbWFpbiBheGlzIG9ubHkgaWYgZXZlcnkgcGxhY2VtZW50IG9uIHRoYXQgYXhpc1xuICAgICAgICAgIC8vIG92ZXJmbG93cyB0aGUgbWFpbiBheGlzLlxuICAgICAgICAgIG92ZXJmbG93c0RhdGEuZXZlcnkoZCA9PiBnZXRTaWRlQXhpcyhkLnBsYWNlbWVudCkgPT09IGluaXRpYWxTaWRlQXhpcyA/IGQub3ZlcmZsb3dzWzBdID4gMCA6IHRydWUpKSB7XG4gICAgICAgICAgICAvLyBUcnkgbmV4dCBwbGFjZW1lbnQgYW5kIHJlLXJ1biB0aGUgbGlmZWN5Y2xlLlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGluZGV4OiBuZXh0SW5kZXgsXG4gICAgICAgICAgICAgICAgb3ZlcmZsb3dzOiBvdmVyZmxvd3NEYXRhXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICAgICAgcGxhY2VtZW50OiBuZXh0UGxhY2VtZW50XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmlyc3QsIGZpbmQgdGhlIGNhbmRpZGF0ZXMgdGhhdCBmaXQgb24gdGhlIG1haW5BeGlzIHNpZGUgb2Ygb3ZlcmZsb3csXG4gICAgICAgIC8vIHRoZW4gZmluZCB0aGUgcGxhY2VtZW50IHRoYXQgZml0cyB0aGUgYmVzdCBvbiB0aGUgbWFpbiBjcm9zc0F4aXMgc2lkZS5cbiAgICAgICAgbGV0IHJlc2V0UGxhY2VtZW50ID0gKF9vdmVyZmxvd3NEYXRhJGZpbHRlciA9IG92ZXJmbG93c0RhdGEuZmlsdGVyKGQgPT4gZC5vdmVyZmxvd3NbMF0gPD0gMCkuc29ydCgoYSwgYikgPT4gYS5vdmVyZmxvd3NbMV0gLSBiLm92ZXJmbG93c1sxXSlbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIucGxhY2VtZW50O1xuXG4gICAgICAgIC8vIE90aGVyd2lzZSBmYWxsYmFjay5cbiAgICAgICAgaWYgKCFyZXNldFBsYWNlbWVudCkge1xuICAgICAgICAgIHN3aXRjaCAoZmFsbGJhY2tTdHJhdGVneSkge1xuICAgICAgICAgICAgY2FzZSAnYmVzdEZpdCc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgX292ZXJmbG93c0RhdGEkZmlsdGVyMjtcbiAgICAgICAgICAgICAgICBjb25zdCBwbGFjZW1lbnQgPSAoX292ZXJmbG93c0RhdGEkZmlsdGVyMiA9IG92ZXJmbG93c0RhdGEuZmlsdGVyKGQgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGhhc0ZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFNpZGVBeGlzID0gZ2V0U2lkZUF4aXMoZC5wbGFjZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFNpZGVBeGlzID09PSBpbml0aWFsU2lkZUF4aXMgfHxcbiAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgYmlhcyB0byB0aGUgYHlgIHNpZGUgYXhpcyBkdWUgdG8gaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgICAgICAvLyByZWFkaW5nIGRpcmVjdGlvbnMgZmF2b3JpbmcgZ3JlYXRlciB3aWR0aC5cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNpZGVBeGlzID09PSAneSc7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KS5tYXAoZCA9PiBbZC5wbGFjZW1lbnQsIGQub3ZlcmZsb3dzLmZpbHRlcihvdmVyZmxvdyA9PiBvdmVyZmxvdyA+IDApLnJlZHVjZSgoYWNjLCBvdmVyZmxvdykgPT4gYWNjICsgb3ZlcmZsb3csIDApXSkuc29ydCgoYSwgYikgPT4gYVsxXSAtIGJbMV0pWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX292ZXJmbG93c0RhdGEkZmlsdGVyMlswXTtcbiAgICAgICAgICAgICAgICBpZiAocGxhY2VtZW50KSB7XG4gICAgICAgICAgICAgICAgICByZXNldFBsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2luaXRpYWxQbGFjZW1lbnQnOlxuICAgICAgICAgICAgICByZXNldFBsYWNlbWVudCA9IGluaXRpYWxQbGFjZW1lbnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocGxhY2VtZW50ICE9PSByZXNldFBsYWNlbWVudCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgICBwbGFjZW1lbnQ6IHJlc2V0UGxhY2VtZW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0KSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiBvdmVyZmxvdy50b3AgLSByZWN0LmhlaWdodCxcbiAgICByaWdodDogb3ZlcmZsb3cucmlnaHQgLSByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogb3ZlcmZsb3cuYm90dG9tIC0gcmVjdC5oZWlnaHQsXG4gICAgbGVmdDogb3ZlcmZsb3cubGVmdCAtIHJlY3Qud2lkdGhcbiAgfTtcbn1cbmZ1bmN0aW9uIGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvdmVyZmxvdykge1xuICByZXR1cm4gc2lkZXMuc29tZShzaWRlID0+IG92ZXJmbG93W3NpZGVdID49IDApO1xufVxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2hpZGUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcmVjdHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc3RyYXRlZ3kgPSAncmVmZXJlbmNlSGlkZGVuJyxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgc3dpdGNoIChzdHJhdGVneSkge1xuICAgICAgICBjYXNlICdyZWZlcmVuY2VIaWRkZW4nOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgICAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zLFxuICAgICAgICAgICAgICBlbGVtZW50Q29udGV4dDogJ3JlZmVyZW5jZSdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0cy5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhpZGRlbk9mZnNldHM6IG9mZnNldHMsXG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlSGlkZGVuOiBpc0FueVNpZGVGdWxseUNsaXBwZWQob2Zmc2V0cylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2VzY2FwZWQnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgICAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zLFxuICAgICAgICAgICAgICBhbHRCb3VuZGFyeTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3RzLmZsb2F0aW5nKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBlc2NhcGVkT2Zmc2V0czogb2Zmc2V0cyxcbiAgICAgICAgICAgICAgICBlc2NhcGVkOiBpc0FueVNpZGVGdWxseUNsaXBwZWQob2Zmc2V0cylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ1JlY3QocmVjdHMpIHtcbiAgY29uc3QgbWluWCA9IG1pbiguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LmxlZnQpKTtcbiAgY29uc3QgbWluWSA9IG1pbiguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LnRvcCkpO1xuICBjb25zdCBtYXhYID0gbWF4KC4uLnJlY3RzLm1hcChyZWN0ID0+IHJlY3QucmlnaHQpKTtcbiAgY29uc3QgbWF4WSA9IG1heCguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LmJvdHRvbSkpO1xuICByZXR1cm4ge1xuICAgIHg6IG1pblgsXG4gICAgeTogbWluWSxcbiAgICB3aWR0aDogbWF4WCAtIG1pblgsXG4gICAgaGVpZ2h0OiBtYXhZIC0gbWluWVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0UmVjdHNCeUxpbmUocmVjdHMpIHtcbiAgY29uc3Qgc29ydGVkUmVjdHMgPSByZWN0cy5zbGljZSgpLnNvcnQoKGEsIGIpID0+IGEueSAtIGIueSk7XG4gIGNvbnN0IGdyb3VwcyA9IFtdO1xuICBsZXQgcHJldlJlY3QgPSBudWxsO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZFJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcmVjdCA9IHNvcnRlZFJlY3RzW2ldO1xuICAgIGlmICghcHJldlJlY3QgfHwgcmVjdC55IC0gcHJldlJlY3QueSA+IHByZXZSZWN0LmhlaWdodCAvIDIpIHtcbiAgICAgIGdyb3Vwcy5wdXNoKFtyZWN0XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdyb3Vwc1tncm91cHMubGVuZ3RoIC0gMV0ucHVzaChyZWN0KTtcbiAgICB9XG4gICAgcHJldlJlY3QgPSByZWN0O1xuICB9XG4gIHJldHVybiBncm91cHMubWFwKHJlY3QgPT4gcmVjdFRvQ2xpZW50UmVjdChnZXRCb3VuZGluZ1JlY3QocmVjdCkpKTtcbn1cbi8qKlxuICogUHJvdmlkZXMgaW1wcm92ZWQgcG9zaXRpb25pbmcgZm9yIGlubGluZSByZWZlcmVuY2UgZWxlbWVudHMgdGhhdCBjYW4gc3BhblxuICogb3ZlciBtdWx0aXBsZSBsaW5lcywgc3VjaCBhcyBoeXBlcmxpbmtzIG9yIHJhbmdlIHNlbGVjdGlvbnMuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaW5saW5lXG4gKi9cbmNvbnN0IGlubGluZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnaW5saW5lJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgZWxlbWVudHMsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgc3RyYXRlZ3lcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIC8vIEEgTW91c2VFdmVudCdzIGNsaWVudHtYLFl9IGNvb3JkcyBjYW4gYmUgdXAgdG8gMiBwaXhlbHMgb2ZmIGFcbiAgICAgIC8vIENsaWVudFJlY3QncyBib3VuZHMsIGRlc3BpdGUgdGhlIGV2ZW50IGxpc3RlbmVyIGJlaW5nIHRyaWdnZXJlZC4gQVxuICAgICAgLy8gcGFkZGluZyBvZiAyIHNlZW1zIHRvIGhhbmRsZSB0aGlzIGlzc3VlLlxuICAgICAgY29uc3Qge1xuICAgICAgICBwYWRkaW5nID0gMixcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IG5hdGl2ZUNsaWVudFJlY3RzID0gQXJyYXkuZnJvbSgoYXdhaXQgKHBsYXRmb3JtLmdldENsaWVudFJlY3RzID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXRDbGllbnRSZWN0cyhlbGVtZW50cy5yZWZlcmVuY2UpKSkgfHwgW10pO1xuICAgICAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRSZWN0c0J5TGluZShuYXRpdmVDbGllbnRSZWN0cyk7XG4gICAgICBjb25zdCBmYWxsYmFjayA9IHJlY3RUb0NsaWVudFJlY3QoZ2V0Qm91bmRpbmdSZWN0KG5hdGl2ZUNsaWVudFJlY3RzKSk7XG4gICAgICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcbiAgICAgIGZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIHR3byByZWN0cyBhbmQgdGhleSBhcmUgZGlzam9pbmVkLlxuICAgICAgICBpZiAoY2xpZW50UmVjdHMubGVuZ3RoID09PSAyICYmIGNsaWVudFJlY3RzWzBdLmxlZnQgPiBjbGllbnRSZWN0c1sxXS5yaWdodCAmJiB4ICE9IG51bGwgJiYgeSAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gRmluZCB0aGUgZmlyc3QgcmVjdCBpbiB3aGljaCB0aGUgcG9pbnQgaXMgZnVsbHkgaW5zaWRlLlxuICAgICAgICAgIHJldHVybiBjbGllbnRSZWN0cy5maW5kKHJlY3QgPT4geCA+IHJlY3QubGVmdCAtIHBhZGRpbmdPYmplY3QubGVmdCAmJiB4IDwgcmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHQgJiYgeSA+IHJlY3QudG9wIC0gcGFkZGluZ09iamVjdC50b3AgJiYgeSA8IHJlY3QuYm90dG9tICsgcGFkZGluZ09iamVjdC5ib3R0b20pIHx8IGZhbGxiYWNrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlcmUgYXJlIDIgb3IgbW9yZSBjb25uZWN0ZWQgcmVjdHMuXG4gICAgICAgIGlmIChjbGllbnRSZWN0cy5sZW5ndGggPj0gMikge1xuICAgICAgICAgIGlmIChnZXRTaWRlQXhpcyhwbGFjZW1lbnQpID09PSAneScpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0UmVjdCA9IGNsaWVudFJlY3RzWzBdO1xuICAgICAgICAgICAgY29uc3QgbGFzdFJlY3QgPSBjbGllbnRSZWN0c1tjbGllbnRSZWN0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGNvbnN0IGlzVG9wID0gZ2V0U2lkZShwbGFjZW1lbnQpID09PSAndG9wJztcbiAgICAgICAgICAgIGNvbnN0IHRvcCA9IGZpcnN0UmVjdC50b3A7XG4gICAgICAgICAgICBjb25zdCBib3R0b20gPSBsYXN0UmVjdC5ib3R0b207XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gaXNUb3AgPyBmaXJzdFJlY3QubGVmdCA6IGxhc3RSZWN0LmxlZnQ7XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IGlzVG9wID8gZmlyc3RSZWN0LnJpZ2h0IDogbGFzdFJlY3QucmlnaHQ7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHJpZ2h0IC0gbGVmdDtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGJvdHRvbSAtIHRvcDtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgICAgYm90dG9tLFxuICAgICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgICByaWdodCxcbiAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgeDogbGVmdCxcbiAgICAgICAgICAgICAgeTogdG9wXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBpc0xlZnRTaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpID09PSAnbGVmdCc7XG4gICAgICAgICAgY29uc3QgbWF4UmlnaHQgPSBtYXgoLi4uY2xpZW50UmVjdHMubWFwKHJlY3QgPT4gcmVjdC5yaWdodCkpO1xuICAgICAgICAgIGNvbnN0IG1pbkxlZnQgPSBtaW4oLi4uY2xpZW50UmVjdHMubWFwKHJlY3QgPT4gcmVjdC5sZWZ0KSk7XG4gICAgICAgICAgY29uc3QgbWVhc3VyZVJlY3RzID0gY2xpZW50UmVjdHMuZmlsdGVyKHJlY3QgPT4gaXNMZWZ0U2lkZSA/IHJlY3QubGVmdCA9PT0gbWluTGVmdCA6IHJlY3QucmlnaHQgPT09IG1heFJpZ2h0KTtcbiAgICAgICAgICBjb25zdCB0b3AgPSBtZWFzdXJlUmVjdHNbMF0udG9wO1xuICAgICAgICAgIGNvbnN0IGJvdHRvbSA9IG1lYXN1cmVSZWN0c1ttZWFzdXJlUmVjdHMubGVuZ3RoIC0gMV0uYm90dG9tO1xuICAgICAgICAgIGNvbnN0IGxlZnQgPSBtaW5MZWZ0O1xuICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gbWF4UmlnaHQ7XG4gICAgICAgICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgICAgICAgY29uc3QgaGVpZ2h0ID0gYm90dG9tIC0gdG9wO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICBib3R0b20sXG4gICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHg6IGxlZnQsXG4gICAgICAgICAgICB5OiB0b3BcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxsYmFjaztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc2V0UmVjdHMgPSBhd2FpdCBwbGF0Zm9ybS5nZXRFbGVtZW50UmVjdHMoe1xuICAgICAgICByZWZlcmVuY2U6IHtcbiAgICAgICAgICBnZXRCb3VuZGluZ0NsaWVudFJlY3RcbiAgICAgICAgfSxcbiAgICAgICAgZmxvYXRpbmc6IGVsZW1lbnRzLmZsb2F0aW5nLFxuICAgICAgICBzdHJhdGVneVxuICAgICAgfSk7XG4gICAgICBpZiAocmVjdHMucmVmZXJlbmNlLnggIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLnggfHwgcmVjdHMucmVmZXJlbmNlLnkgIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLnkgfHwgcmVjdHMucmVmZXJlbmNlLndpZHRoICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS53aWR0aCB8fCByZWN0cy5yZWZlcmVuY2UuaGVpZ2h0ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcmVjdHM6IHJlc2V0UmVjdHNcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuY29uc3Qgb3JpZ2luU2lkZXMgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ2xlZnQnLCAndG9wJ10pO1xuXG4vLyBGb3IgdHlwZSBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSwgdGhlIGBPZmZzZXRPcHRpb25zYCB0eXBlIHdhcyBhbHNvXG4vLyBEZXJpdmFibGUuXG5cbmFzeW5jIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZVRvQ29vcmRzKHN0YXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IHtcbiAgICBwbGFjZW1lbnQsXG4gICAgcGxhdGZvcm0sXG4gICAgZWxlbWVudHNcbiAgfSA9IHN0YXRlO1xuICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICBjb25zdCBpc1ZlcnRpY2FsID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KSA9PT0gJ3knO1xuICBjb25zdCBtYWluQXhpc011bHRpID0gb3JpZ2luU2lkZXMuaGFzKHNpZGUpID8gLTEgOiAxO1xuICBjb25zdCBjcm9zc0F4aXNNdWx0aSA9IHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxO1xuICBjb25zdCByYXdWYWx1ZSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gIGxldCB7XG4gICAgbWFpbkF4aXMsXG4gICAgY3Jvc3NBeGlzLFxuICAgIGFsaWdubWVudEF4aXNcbiAgfSA9IHR5cGVvZiByYXdWYWx1ZSA9PT0gJ251bWJlcicgPyB7XG4gICAgbWFpbkF4aXM6IHJhd1ZhbHVlLFxuICAgIGNyb3NzQXhpczogMCxcbiAgICBhbGlnbm1lbnRBeGlzOiBudWxsXG4gIH0gOiB7XG4gICAgbWFpbkF4aXM6IHJhd1ZhbHVlLm1haW5BeGlzIHx8IDAsXG4gICAgY3Jvc3NBeGlzOiByYXdWYWx1ZS5jcm9zc0F4aXMgfHwgMCxcbiAgICBhbGlnbm1lbnRBeGlzOiByYXdWYWx1ZS5hbGlnbm1lbnRBeGlzXG4gIH07XG4gIGlmIChhbGlnbm1lbnQgJiYgdHlwZW9mIGFsaWdubWVudEF4aXMgPT09ICdudW1iZXInKSB7XG4gICAgY3Jvc3NBeGlzID0gYWxpZ25tZW50ID09PSAnZW5kJyA/IGFsaWdubWVudEF4aXMgKiAtMSA6IGFsaWdubWVudEF4aXM7XG4gIH1cbiAgcmV0dXJuIGlzVmVydGljYWwgPyB7XG4gICAgeDogY3Jvc3NBeGlzICogY3Jvc3NBeGlzTXVsdGksXG4gICAgeTogbWFpbkF4aXMgKiBtYWluQXhpc011bHRpXG4gIH0gOiB7XG4gICAgeDogbWFpbkF4aXMgKiBtYWluQXhpc011bHRpLFxuICAgIHk6IGNyb3NzQXhpcyAqIGNyb3NzQXhpc011bHRpXG4gIH07XG59XG5cbi8qKlxuICogTW9kaWZpZXMgdGhlIHBsYWNlbWVudCBieSB0cmFuc2xhdGluZyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGVcbiAqIHNwZWNpZmllZCBheGVzLlxuICogQSBudW1iZXIgKHNob3J0aGFuZCBmb3IgYG1haW5BeGlzYCBvciBkaXN0YW5jZSksIG9yIGFuIGF4ZXMgY29uZmlndXJhdGlvblxuICogb2JqZWN0IG1heSBiZSBwYXNzZWQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvb2Zmc2V0XG4gKi9cbmNvbnN0IG9mZnNldCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0gMDtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdvZmZzZXQnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkb2Zmc2UsIF9taWRkbGV3YXJlRGF0YSRhcnJvdztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBtaWRkbGV3YXJlRGF0YVxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3QgZGlmZkNvb3JkcyA9IGF3YWl0IGNvbnZlcnRWYWx1ZVRvQ29vcmRzKHN0YXRlLCBvcHRpb25zKTtcblxuICAgICAgLy8gSWYgdGhlIHBsYWNlbWVudCBpcyB0aGUgc2FtZSBhbmQgdGhlIGFycm93IGNhdXNlZCBhbiBhbGlnbm1lbnQgb2Zmc2V0XG4gICAgICAvLyB0aGVuIHdlIGRvbid0IG5lZWQgdG8gY2hhbmdlIHRoZSBwb3NpdGlvbmluZyBjb29yZGluYXRlcy5cbiAgICAgIGlmIChwbGFjZW1lbnQgPT09ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlID0gbWlkZGxld2FyZURhdGEub2Zmc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJG9mZnNlLnBsYWNlbWVudCkgJiYgKF9taWRkbGV3YXJlRGF0YSRhcnJvdyA9IG1pZGRsZXdhcmVEYXRhLmFycm93KSAhPSBudWxsICYmIF9taWRkbGV3YXJlRGF0YSRhcnJvdy5hbGlnbm1lbnRPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogeCArIGRpZmZDb29yZHMueCxcbiAgICAgICAgeTogeSArIGRpZmZDb29yZHMueSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIC4uLmRpZmZDb29yZHMsXG4gICAgICAgICAgcGxhY2VtZW50XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdzaGlmdCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBwbGFjZW1lbnRcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFpbkF4aXM6IGNoZWNrTWFpbkF4aXMgPSB0cnVlLFxuICAgICAgICBjcm9zc0F4aXM6IGNoZWNrQ3Jvc3NBeGlzID0gZmFsc2UsXG4gICAgICAgIGxpbWl0ZXIgPSB7XG4gICAgICAgICAgZm46IF9yZWYgPT4ge1xuICAgICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgeVxuICAgICAgICAgICAgfSA9IF9yZWY7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICB5XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9O1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zKTtcbiAgICAgIGNvbnN0IGNyb3NzQXhpcyA9IGdldFNpZGVBeGlzKGdldFNpZGUocGxhY2VtZW50KSk7XG4gICAgICBjb25zdCBtYWluQXhpcyA9IGdldE9wcG9zaXRlQXhpcyhjcm9zc0F4aXMpO1xuICAgICAgbGV0IG1haW5BeGlzQ29vcmQgPSBjb29yZHNbbWFpbkF4aXNdO1xuICAgICAgbGV0IGNyb3NzQXhpc0Nvb3JkID0gY29vcmRzW2Nyb3NzQXhpc107XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBjb25zdCBtaW5TaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgICAgICBjb25zdCBtYXhTaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICAgICAgY29uc3QgbWluID0gbWFpbkF4aXNDb29yZCArIG92ZXJmbG93W21pblNpZGVdO1xuICAgICAgICBjb25zdCBtYXggPSBtYWluQXhpc0Nvb3JkIC0gb3ZlcmZsb3dbbWF4U2lkZV07XG4gICAgICAgIG1haW5BeGlzQ29vcmQgPSBjbGFtcChtaW4sIG1haW5BeGlzQ29vcmQsIG1heCk7XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgY29uc3QgbWluU2lkZSA9IGNyb3NzQXhpcyA9PT0gJ3knID8gJ3RvcCcgOiAnbGVmdCc7XG4gICAgICAgIGNvbnN0IG1heFNpZGUgPSBjcm9zc0F4aXMgPT09ICd5JyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICAgICAgY29uc3QgbWluID0gY3Jvc3NBeGlzQ29vcmQgKyBvdmVyZmxvd1ttaW5TaWRlXTtcbiAgICAgICAgY29uc3QgbWF4ID0gY3Jvc3NBeGlzQ29vcmQgLSBvdmVyZmxvd1ttYXhTaWRlXTtcbiAgICAgICAgY3Jvc3NBeGlzQ29vcmQgPSBjbGFtcChtaW4sIGNyb3NzQXhpc0Nvb3JkLCBtYXgpO1xuICAgICAgfVxuICAgICAgY29uc3QgbGltaXRlZENvb3JkcyA9IGxpbWl0ZXIuZm4oe1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgW21haW5BeGlzXTogbWFpbkF4aXNDb29yZCxcbiAgICAgICAgW2Nyb3NzQXhpc106IGNyb3NzQXhpc0Nvb3JkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmxpbWl0ZWRDb29yZHMsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB4OiBsaW1pdGVkQ29vcmRzLnggLSB4LFxuICAgICAgICAgIHk6IGxpbWl0ZWRDb29yZHMueSAtIHksXG4gICAgICAgICAgZW5hYmxlZDoge1xuICAgICAgICAgICAgW21haW5BeGlzXTogY2hlY2tNYWluQXhpcyxcbiAgICAgICAgICAgIFtjcm9zc0F4aXNdOiBjaGVja0Nyb3NzQXhpc1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuLyoqXG4gKiBCdWlsdC1pbiBgbGltaXRlcmAgdGhhdCB3aWxsIHN0b3AgYHNoaWZ0KClgIGF0IGEgY2VydGFpbiBwb2ludC5cbiAqL1xuY29uc3QgbGltaXRTaGlmdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBvcHRpb25zLFxuICAgIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG9mZnNldCA9IDAsXG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IHRydWVcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH07XG4gICAgICBjb25zdCBjcm9zc0F4aXMgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgbWFpbkF4aXMgPSBnZXRPcHBvc2l0ZUF4aXMoY3Jvc3NBeGlzKTtcbiAgICAgIGxldCBtYWluQXhpc0Nvb3JkID0gY29vcmRzW21haW5BeGlzXTtcbiAgICAgIGxldCBjcm9zc0F4aXNDb29yZCA9IGNvb3Jkc1tjcm9zc0F4aXNdO1xuICAgICAgY29uc3QgcmF3T2Zmc2V0ID0gZXZhbHVhdGUob2Zmc2V0LCBzdGF0ZSk7XG4gICAgICBjb25zdCBjb21wdXRlZE9mZnNldCA9IHR5cGVvZiByYXdPZmZzZXQgPT09ICdudW1iZXInID8ge1xuICAgICAgICBtYWluQXhpczogcmF3T2Zmc2V0LFxuICAgICAgICBjcm9zc0F4aXM6IDBcbiAgICAgIH0gOiB7XG4gICAgICAgIG1haW5BeGlzOiAwLFxuICAgICAgICBjcm9zc0F4aXM6IDAsXG4gICAgICAgIC4uLnJhd09mZnNldFxuICAgICAgfTtcbiAgICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICAgIGNvbnN0IGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgICAgIGNvbnN0IGxpbWl0TWluID0gcmVjdHMucmVmZXJlbmNlW21haW5BeGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbl0gKyBjb21wdXRlZE9mZnNldC5tYWluQXhpcztcbiAgICAgICAgY29uc3QgbGltaXRNYXggPSByZWN0cy5yZWZlcmVuY2VbbWFpbkF4aXNdICsgcmVjdHMucmVmZXJlbmNlW2xlbl0gLSBjb21wdXRlZE9mZnNldC5tYWluQXhpcztcbiAgICAgICAgaWYgKG1haW5BeGlzQ29vcmQgPCBsaW1pdE1pbikge1xuICAgICAgICAgIG1haW5BeGlzQ29vcmQgPSBsaW1pdE1pbjtcbiAgICAgICAgfSBlbHNlIGlmIChtYWluQXhpc0Nvb3JkID4gbGltaXRNYXgpIHtcbiAgICAgICAgICBtYWluQXhpc0Nvb3JkID0gbGltaXRNYXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaGVja0Nyb3NzQXhpcykge1xuICAgICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJG9mZnNlLCBfbWlkZGxld2FyZURhdGEkb2Zmc2UyO1xuICAgICAgICBjb25zdCBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgICAgICBjb25zdCBpc09yaWdpblNpZGUgPSBvcmlnaW5TaWRlcy5oYXMoZ2V0U2lkZShwbGFjZW1lbnQpKTtcbiAgICAgICAgY29uc3QgbGltaXRNaW4gPSByZWN0cy5yZWZlcmVuY2VbY3Jvc3NBeGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbl0gKyAoaXNPcmlnaW5TaWRlID8gKChfbWlkZGxld2FyZURhdGEkb2Zmc2UgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2VbY3Jvc3NBeGlzXSkgfHwgMCA6IDApICsgKGlzT3JpZ2luU2lkZSA/IDAgOiBjb21wdXRlZE9mZnNldC5jcm9zc0F4aXMpO1xuICAgICAgICBjb25zdCBsaW1pdE1heCA9IHJlY3RzLnJlZmVyZW5jZVtjcm9zc0F4aXNdICsgcmVjdHMucmVmZXJlbmNlW2xlbl0gKyAoaXNPcmlnaW5TaWRlID8gMCA6ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlMiA9IG1pZGRsZXdhcmVEYXRhLm9mZnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRvZmZzZTJbY3Jvc3NBeGlzXSkgfHwgMCkgLSAoaXNPcmlnaW5TaWRlID8gY29tcHV0ZWRPZmZzZXQuY3Jvc3NBeGlzIDogMCk7XG4gICAgICAgIGlmIChjcm9zc0F4aXNDb29yZCA8IGxpbWl0TWluKSB7XG4gICAgICAgICAgY3Jvc3NBeGlzQ29vcmQgPSBsaW1pdE1pbjtcbiAgICAgICAgfSBlbHNlIGlmIChjcm9zc0F4aXNDb29yZCA+IGxpbWl0TWF4KSB7XG4gICAgICAgICAgY3Jvc3NBeGlzQ29vcmQgPSBsaW1pdE1heDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW21haW5BeGlzXTogbWFpbkF4aXNDb29yZCxcbiAgICAgICAgW2Nyb3NzQXhpc106IGNyb3NzQXhpc0Nvb3JkXG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IOKAlFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnc2l6ZScsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YSwgX3N0YXRlJG1pZGRsZXdhcmVEYXRhMjtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICByZWN0cyxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGFwcGx5ID0gKCkgPT4ge30sXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBpc1lBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KSA9PT0gJ3knO1xuICAgICAgY29uc3Qge1xuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgICB9ID0gcmVjdHMuZmxvYXRpbmc7XG4gICAgICBsZXQgaGVpZ2h0U2lkZTtcbiAgICAgIGxldCB3aWR0aFNpZGU7XG4gICAgICBpZiAoc2lkZSA9PT0gJ3RvcCcgfHwgc2lkZSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgaGVpZ2h0U2lkZSA9IHNpZGU7XG4gICAgICAgIHdpZHRoU2lkZSA9IGFsaWdubWVudCA9PT0gKChhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSkpID8gJ3N0YXJ0JyA6ICdlbmQnKSA/ICdsZWZ0JyA6ICdyaWdodCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aWR0aFNpZGUgPSBzaWRlO1xuICAgICAgICBoZWlnaHRTaWRlID0gYWxpZ25tZW50ID09PSAnZW5kJyA/ICd0b3AnIDogJ2JvdHRvbSc7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQgPSBoZWlnaHQgLSBvdmVyZmxvdy50b3AgLSBvdmVyZmxvdy5ib3R0b207XG4gICAgICBjb25zdCBtYXhpbXVtQ2xpcHBpbmdXaWR0aCA9IHdpZHRoIC0gb3ZlcmZsb3cubGVmdCAtIG92ZXJmbG93LnJpZ2h0O1xuICAgICAgY29uc3Qgb3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQgPSBtaW4oaGVpZ2h0IC0gb3ZlcmZsb3dbaGVpZ2h0U2lkZV0sIG1heGltdW1DbGlwcGluZ0hlaWdodCk7XG4gICAgICBjb25zdCBvdmVyZmxvd0F2YWlsYWJsZVdpZHRoID0gbWluKHdpZHRoIC0gb3ZlcmZsb3dbd2lkdGhTaWRlXSwgbWF4aW11bUNsaXBwaW5nV2lkdGgpO1xuICAgICAgY29uc3Qgbm9TaGlmdCA9ICFzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdDtcbiAgICAgIGxldCBhdmFpbGFibGVIZWlnaHQgPSBvdmVyZmxvd0F2YWlsYWJsZUhlaWdodDtcbiAgICAgIGxldCBhdmFpbGFibGVXaWR0aCA9IG92ZXJmbG93QXZhaWxhYmxlV2lkdGg7XG4gICAgICBpZiAoKF9zdGF0ZSRtaWRkbGV3YXJlRGF0YSA9IHN0YXRlLm1pZGRsZXdhcmVEYXRhLnNoaWZ0KSAhPSBudWxsICYmIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YS5lbmFibGVkLngpIHtcbiAgICAgICAgYXZhaWxhYmxlV2lkdGggPSBtYXhpbXVtQ2xpcHBpbmdXaWR0aDtcbiAgICAgIH1cbiAgICAgIGlmICgoX3N0YXRlJG1pZGRsZXdhcmVEYXRhMiA9IHN0YXRlLm1pZGRsZXdhcmVEYXRhLnNoaWZ0KSAhPSBudWxsICYmIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTIuZW5hYmxlZC55KSB7XG4gICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IG1heGltdW1DbGlwcGluZ0hlaWdodDtcbiAgICAgIH1cbiAgICAgIGlmIChub1NoaWZ0ICYmICFhbGlnbm1lbnQpIHtcbiAgICAgICAgY29uc3QgeE1pbiA9IG1heChvdmVyZmxvdy5sZWZ0LCAwKTtcbiAgICAgICAgY29uc3QgeE1heCA9IG1heChvdmVyZmxvdy5yaWdodCwgMCk7XG4gICAgICAgIGNvbnN0IHlNaW4gPSBtYXgob3ZlcmZsb3cudG9wLCAwKTtcbiAgICAgICAgY29uc3QgeU1heCA9IG1heChvdmVyZmxvdy5ib3R0b20sIDApO1xuICAgICAgICBpZiAoaXNZQXhpcykge1xuICAgICAgICAgIGF2YWlsYWJsZVdpZHRoID0gd2lkdGggLSAyICogKHhNaW4gIT09IDAgfHwgeE1heCAhPT0gMCA/IHhNaW4gKyB4TWF4IDogbWF4KG92ZXJmbG93LmxlZnQsIG92ZXJmbG93LnJpZ2h0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXZhaWxhYmxlSGVpZ2h0ID0gaGVpZ2h0IC0gMiAqICh5TWluICE9PSAwIHx8IHlNYXggIT09IDAgPyB5TWluICsgeU1heCA6IG1heChvdmVyZmxvdy50b3AsIG92ZXJmbG93LmJvdHRvbSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCBhcHBseSh7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBhdmFpbGFibGVXaWR0aCxcbiAgICAgICAgYXZhaWxhYmxlSGVpZ2h0XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5leHREaW1lbnNpb25zID0gYXdhaXQgcGxhdGZvcm0uZ2V0RGltZW5zaW9ucyhlbGVtZW50cy5mbG9hdGluZyk7XG4gICAgICBpZiAod2lkdGggIT09IG5leHREaW1lbnNpb25zLndpZHRoIHx8IGhlaWdodCAhPT0gbmV4dERpbWVuc2lvbnMuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHJlY3RzOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBjb21wdXRlUG9zaXRpb24sIGRldGVjdE92ZXJmbG93LCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgc2hpZnQsIHNpemUgfTtcbiIsImZ1bmN0aW9uIGhhc1dpbmRvdygpIHtcbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xufVxuZnVuY3Rpb24gZ2V0Tm9kZU5hbWUobm9kZSkge1xuICBpZiAoaXNOb2RlKG5vZGUpKSB7XG4gICAgcmV0dXJuIChub2RlLm5vZGVOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICB9XG4gIC8vIE1vY2tlZCBub2RlcyBpbiB0ZXN0aW5nIGVudmlyb25tZW50cyBtYXkgbm90IGJlIGluc3RhbmNlcyBvZiBOb2RlLiBCeVxuICAvLyByZXR1cm5pbmcgYCNkb2N1bWVudGAgYW4gaW5maW5pdGUgbG9vcCB3b24ndCBvY2N1ci5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8yMzE3XG4gIHJldHVybiAnI2RvY3VtZW50Jztcbn1cbmZ1bmN0aW9uIGdldFdpbmRvdyhub2RlKSB7XG4gIHZhciBfbm9kZSRvd25lckRvY3VtZW50O1xuICByZXR1cm4gKG5vZGUgPT0gbnVsbCB8fCAoX25vZGUkb3duZXJEb2N1bWVudCA9IG5vZGUub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9ub2RlJG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpIHx8IHdpbmRvdztcbn1cbmZ1bmN0aW9uIGdldERvY3VtZW50RWxlbWVudChub2RlKSB7XG4gIHZhciBfcmVmO1xuICByZXR1cm4gKF9yZWYgPSAoaXNOb2RlKG5vZGUpID8gbm9kZS5vd25lckRvY3VtZW50IDogbm9kZS5kb2N1bWVudCkgfHwgd2luZG93LmRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX3JlZi5kb2N1bWVudEVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc05vZGUodmFsdWUpIHtcbiAgaWYgKCFoYXNXaW5kb3coKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBOb2RlIHx8IHZhbHVlIGluc3RhbmNlb2YgZ2V0V2luZG93KHZhbHVlKS5Ob2RlO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRWxlbWVudCB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQodmFsdWUpIHtcbiAgaWYgKCFoYXNXaW5kb3coKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuSFRNTEVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc1NoYWRvd1Jvb3QodmFsdWUpIHtcbiAgaWYgKCFoYXNXaW5kb3coKSB8fCB0eXBlb2YgU2hhZG93Um9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgU2hhZG93Um9vdCB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuU2hhZG93Um9vdDtcbn1cbmNvbnN0IGludmFsaWRPdmVyZmxvd0Rpc3BsYXlWYWx1ZXMgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ2lubGluZScsICdjb250ZW50cyddKTtcbmZ1bmN0aW9uIGlzT3ZlcmZsb3dFbGVtZW50KGVsZW1lbnQpIHtcbiAgY29uc3Qge1xuICAgIG92ZXJmbG93LFxuICAgIG92ZXJmbG93WCxcbiAgICBvdmVyZmxvd1ksXG4gICAgZGlzcGxheVxuICB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgcmV0dXJuIC9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbnxjbGlwLy50ZXN0KG92ZXJmbG93ICsgb3ZlcmZsb3dZICsgb3ZlcmZsb3dYKSAmJiAhaW52YWxpZE92ZXJmbG93RGlzcGxheVZhbHVlcy5oYXMoZGlzcGxheSk7XG59XG5jb25zdCB0YWJsZUVsZW1lbnRzID0gLyojX19QVVJFX18qL25ldyBTZXQoWyd0YWJsZScsICd0ZCcsICd0aCddKTtcbmZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIHRhYmxlRWxlbWVudHMuaGFzKGdldE5vZGVOYW1lKGVsZW1lbnQpKTtcbn1cbmNvbnN0IHRvcExheWVyU2VsZWN0b3JzID0gWyc6cG9wb3Zlci1vcGVuJywgJzptb2RhbCddO1xuZnVuY3Rpb24gaXNUb3BMYXllcihlbGVtZW50KSB7XG4gIHJldHVybiB0b3BMYXllclNlbGVjdG9ycy5zb21lKHNlbGVjdG9yID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQubWF0Y2hlcyhzZWxlY3Rvcik7XG4gICAgfSBjYXRjaCAoX2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xufVxuY29uc3QgdHJhbnNmb3JtUHJvcGVydGllcyA9IFsndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZScsICdzY2FsZScsICdyb3RhdGUnLCAncGVyc3BlY3RpdmUnXTtcbmNvbnN0IHdpbGxDaGFuZ2VWYWx1ZXMgPSBbJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUnLCAnc2NhbGUnLCAncm90YXRlJywgJ3BlcnNwZWN0aXZlJywgJ2ZpbHRlciddO1xuY29uc3QgY29udGFpblZhbHVlcyA9IFsncGFpbnQnLCAnbGF5b3V0JywgJ3N0cmljdCcsICdjb250ZW50J107XG5mdW5jdGlvbiBpc0NvbnRhaW5pbmdCbG9jayhlbGVtZW50T3JDc3MpIHtcbiAgY29uc3Qgd2Via2l0ID0gaXNXZWJLaXQoKTtcbiAgY29uc3QgY3NzID0gaXNFbGVtZW50KGVsZW1lbnRPckNzcykgPyBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnRPckNzcykgOiBlbGVtZW50T3JDc3M7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy10cmFuc2Zvcm1zLTIvI2luZGl2aWR1YWwtdHJhbnNmb3Jtc1xuICByZXR1cm4gdHJhbnNmb3JtUHJvcGVydGllcy5zb21lKHZhbHVlID0+IGNzc1t2YWx1ZV0gPyBjc3NbdmFsdWVdICE9PSAnbm9uZScgOiBmYWxzZSkgfHwgKGNzcy5jb250YWluZXJUeXBlID8gY3NzLmNvbnRhaW5lclR5cGUgIT09ICdub3JtYWwnIDogZmFsc2UpIHx8ICF3ZWJraXQgJiYgKGNzcy5iYWNrZHJvcEZpbHRlciA/IGNzcy5iYWNrZHJvcEZpbHRlciAhPT0gJ25vbmUnIDogZmFsc2UpIHx8ICF3ZWJraXQgJiYgKGNzcy5maWx0ZXIgPyBjc3MuZmlsdGVyICE9PSAnbm9uZScgOiBmYWxzZSkgfHwgd2lsbENoYW5nZVZhbHVlcy5zb21lKHZhbHVlID0+IChjc3Mud2lsbENoYW5nZSB8fCAnJykuaW5jbHVkZXModmFsdWUpKSB8fCBjb250YWluVmFsdWVzLnNvbWUodmFsdWUgPT4gKGNzcy5jb250YWluIHx8ICcnKS5pbmNsdWRlcyh2YWx1ZSkpO1xufVxuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHtcbiAgbGV0IGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmICFpc0xhc3RUcmF2ZXJzYWJsZU5vZGUoY3VycmVudE5vZGUpKSB7XG4gICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrKGN1cnJlbnROb2RlKSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSBpZiAoaXNUb3BMYXllcihjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoY3VycmVudE5vZGUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gaXNXZWJLaXQoKSB7XG4gIGlmICh0eXBlb2YgQ1NTID09PSAndW5kZWZpbmVkJyB8fCAhQ1NTLnN1cHBvcnRzKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBDU1Muc3VwcG9ydHMoJy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyJywgJ25vbmUnKTtcbn1cbmNvbnN0IGxhc3RUcmF2ZXJzYWJsZU5vZGVOYW1lcyA9IC8qI19fUFVSRV9fKi9uZXcgU2V0KFsnaHRtbCcsICdib2R5JywgJyNkb2N1bWVudCddKTtcbmZ1bmN0aW9uIGlzTGFzdFRyYXZlcnNhYmxlTm9kZShub2RlKSB7XG4gIHJldHVybiBsYXN0VHJhdmVyc2FibGVOb2RlTmFtZXMuaGFzKGdldE5vZGVOYW1lKG5vZGUpKTtcbn1cbmZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0V2luZG93KGVsZW1lbnQpLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59XG5mdW5jdGlvbiBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpIHtcbiAgaWYgKGlzRWxlbWVudChlbGVtZW50KSkge1xuICAgIHJldHVybiB7XG4gICAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbExlZnQsXG4gICAgICBzY3JvbGxUb3A6IGVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsWCxcbiAgICBzY3JvbGxUb3A6IGVsZW1lbnQuc2Nyb2xsWVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShub2RlKSB7XG4gIGlmIChnZXROb2RlTmFtZShub2RlKSA9PT0gJ2h0bWwnKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID1cbiAgLy8gU3RlcCBpbnRvIHRoZSBzaGFkb3cgRE9NIG9mIHRoZSBwYXJlbnQgb2YgYSBzbG90dGVkIG5vZGUuXG4gIG5vZGUuYXNzaWduZWRTbG90IHx8XG4gIC8vIERPTSBFbGVtZW50IGRldGVjdGVkLlxuICBub2RlLnBhcmVudE5vZGUgfHxcbiAgLy8gU2hhZG93Um9vdCBkZXRlY3RlZC5cbiAgaXNTaGFkb3dSb290KG5vZGUpICYmIG5vZGUuaG9zdCB8fFxuICAvLyBGYWxsYmFjay5cbiAgZ2V0RG9jdW1lbnRFbGVtZW50KG5vZGUpO1xuICByZXR1cm4gaXNTaGFkb3dSb290KHJlc3VsdCkgPyByZXN1bHQuaG9zdCA6IHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKG5vZGUpIHtcbiAgY29uc3QgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUobm9kZSk7XG4gIGlmIChpc0xhc3RUcmF2ZXJzYWJsZU5vZGUocGFyZW50Tm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZS5vd25lckRvY3VtZW50ID8gbm9kZS5vd25lckRvY3VtZW50LmJvZHkgOiBub2RlLmJvZHk7XG4gIH1cbiAgaWYgKGlzSFRNTEVsZW1lbnQocGFyZW50Tm9kZSkgJiYgaXNPdmVyZmxvd0VsZW1lbnQocGFyZW50Tm9kZSkpIHtcbiAgICByZXR1cm4gcGFyZW50Tm9kZTtcbiAgfVxuICByZXR1cm4gZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3IocGFyZW50Tm9kZSk7XG59XG5mdW5jdGlvbiBnZXRPdmVyZmxvd0FuY2VzdG9ycyhub2RlLCBsaXN0LCB0cmF2ZXJzZUlmcmFtZXMpIHtcbiAgdmFyIF9ub2RlJG93bmVyRG9jdW1lbnQyO1xuICBpZiAobGlzdCA9PT0gdm9pZCAwKSB7XG4gICAgbGlzdCA9IFtdO1xuICB9XG4gIGlmICh0cmF2ZXJzZUlmcmFtZXMgPT09IHZvaWQgMCkge1xuICAgIHRyYXZlcnNlSWZyYW1lcyA9IHRydWU7XG4gIH1cbiAgY29uc3Qgc2Nyb2xsYWJsZUFuY2VzdG9yID0gZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3Iobm9kZSk7XG4gIGNvbnN0IGlzQm9keSA9IHNjcm9sbGFibGVBbmNlc3RvciA9PT0gKChfbm9kZSRvd25lckRvY3VtZW50MiA9IG5vZGUub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9ub2RlJG93bmVyRG9jdW1lbnQyLmJvZHkpO1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coc2Nyb2xsYWJsZUFuY2VzdG9yKTtcbiAgaWYgKGlzQm9keSkge1xuICAgIGNvbnN0IGZyYW1lRWxlbWVudCA9IGdldEZyYW1lRWxlbWVudCh3aW4pO1xuICAgIHJldHVybiBsaXN0LmNvbmNhdCh3aW4sIHdpbi52aXN1YWxWaWV3cG9ydCB8fCBbXSwgaXNPdmVyZmxvd0VsZW1lbnQoc2Nyb2xsYWJsZUFuY2VzdG9yKSA/IHNjcm9sbGFibGVBbmNlc3RvciA6IFtdLCBmcmFtZUVsZW1lbnQgJiYgdHJhdmVyc2VJZnJhbWVzID8gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoZnJhbWVFbGVtZW50KSA6IFtdKTtcbiAgfVxuICByZXR1cm4gbGlzdC5jb25jYXQoc2Nyb2xsYWJsZUFuY2VzdG9yLCBnZXRPdmVyZmxvd0FuY2VzdG9ycyhzY3JvbGxhYmxlQW5jZXN0b3IsIFtdLCB0cmF2ZXJzZUlmcmFtZXMpKTtcbn1cbmZ1bmN0aW9uIGdldEZyYW1lRWxlbWVudCh3aW4pIHtcbiAgcmV0dXJuIHdpbi5wYXJlbnQgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHdpbi5wYXJlbnQpID8gd2luLmZyYW1lRWxlbWVudCA6IG51bGw7XG59XG5cbmV4cG9ydCB7IGdldENvbXB1dGVkU3R5bGUsIGdldENvbnRhaW5pbmdCbG9jaywgZ2V0RG9jdW1lbnRFbGVtZW50LCBnZXRGcmFtZUVsZW1lbnQsIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yLCBnZXROb2RlTmFtZSwgZ2V0Tm9kZVNjcm9sbCwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMsIGdldFBhcmVudE5vZGUsIGdldFdpbmRvdywgaXNDb250YWluaW5nQmxvY2ssIGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCwgaXNMYXN0VHJhdmVyc2FibGVOb2RlLCBpc05vZGUsIGlzT3ZlcmZsb3dFbGVtZW50LCBpc1NoYWRvd1Jvb3QsIGlzVGFibGVFbGVtZW50LCBpc1RvcExheWVyLCBpc1dlYktpdCB9O1xuIiwiaW1wb3J0IHsgcmVjdFRvQ2xpZW50UmVjdCwgYXJyb3cgYXMgYXJyb3ckMSwgYXV0b1BsYWNlbWVudCBhcyBhdXRvUGxhY2VtZW50JDEsIGRldGVjdE92ZXJmbG93IGFzIGRldGVjdE92ZXJmbG93JDEsIGZsaXAgYXMgZmxpcCQxLCBoaWRlIGFzIGhpZGUkMSwgaW5saW5lIGFzIGlubGluZSQxLCBsaW1pdFNoaWZ0IGFzIGxpbWl0U2hpZnQkMSwgb2Zmc2V0IGFzIG9mZnNldCQxLCBzaGlmdCBhcyBzaGlmdCQxLCBzaXplIGFzIHNpemUkMSwgY29tcHV0ZVBvc2l0aW9uIGFzIGNvbXB1dGVQb3NpdGlvbiQxIH0gZnJvbSAnQGZsb2F0aW5nLXVpL2NvcmUnO1xuaW1wb3J0IHsgcm91bmQsIGNyZWF0ZUNvb3JkcywgbWF4LCBtaW4sIGZsb29yIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcbmltcG9ydCB7IGdldENvbXB1dGVkU3R5bGUsIGlzSFRNTEVsZW1lbnQsIGlzRWxlbWVudCwgZ2V0V2luZG93LCBpc1dlYktpdCwgZ2V0RnJhbWVFbGVtZW50LCBnZXROb2RlU2Nyb2xsLCBnZXREb2N1bWVudEVsZW1lbnQsIGlzVG9wTGF5ZXIsIGdldE5vZGVOYW1lLCBpc092ZXJmbG93RWxlbWVudCwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMsIGdldFBhcmVudE5vZGUsIGlzTGFzdFRyYXZlcnNhYmxlTm9kZSwgaXNDb250YWluaW5nQmxvY2ssIGlzVGFibGVFbGVtZW50LCBnZXRDb250YWluaW5nQmxvY2sgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcbmV4cG9ydCB7IGdldE92ZXJmbG93QW5jZXN0b3JzIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzL2RvbSc7XG5cbmZ1bmN0aW9uIGdldENzc0RpbWVuc2lvbnMoZWxlbWVudCkge1xuICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAvLyBJbiB0ZXN0aW5nIGVudmlyb25tZW50cywgdGhlIGB3aWR0aGAgYW5kIGBoZWlnaHRgIHByb3BlcnRpZXMgYXJlIGVtcHR5XG4gIC8vIHN0cmluZ3MgZm9yIFNWRyBlbGVtZW50cywgcmV0dXJuaW5nIE5hTi4gRmFsbGJhY2sgdG8gYDBgIGluIHRoaXMgY2FzZS5cbiAgbGV0IHdpZHRoID0gcGFyc2VGbG9hdChjc3Mud2lkdGgpIHx8IDA7XG4gIGxldCBoZWlnaHQgPSBwYXJzZUZsb2F0KGNzcy5oZWlnaHQpIHx8IDA7XG4gIGNvbnN0IGhhc09mZnNldCA9IGlzSFRNTEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IG9mZnNldFdpZHRoID0gaGFzT2Zmc2V0ID8gZWxlbWVudC5vZmZzZXRXaWR0aCA6IHdpZHRoO1xuICBjb25zdCBvZmZzZXRIZWlnaHQgPSBoYXNPZmZzZXQgPyBlbGVtZW50Lm9mZnNldEhlaWdodCA6IGhlaWdodDtcbiAgY29uc3Qgc2hvdWxkRmFsbGJhY2sgPSByb3VuZCh3aWR0aCkgIT09IG9mZnNldFdpZHRoIHx8IHJvdW5kKGhlaWdodCkgIT09IG9mZnNldEhlaWdodDtcbiAgaWYgKHNob3VsZEZhbGxiYWNrKSB7XG4gICAgd2lkdGggPSBvZmZzZXRXaWR0aDtcbiAgICBoZWlnaHQgPSBvZmZzZXRIZWlnaHQ7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgJDogc2hvdWxkRmFsbGJhY2tcbiAgfTtcbn1cblxuZnVuY3Rpb24gdW53cmFwRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiAhaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudC5jb250ZXh0RWxlbWVudCA6IGVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGdldFNjYWxlKGVsZW1lbnQpIHtcbiAgY29uc3QgZG9tRWxlbWVudCA9IHVud3JhcEVsZW1lbnQoZWxlbWVudCk7XG4gIGlmICghaXNIVE1MRWxlbWVudChkb21FbGVtZW50KSkge1xuICAgIHJldHVybiBjcmVhdGVDb29yZHMoMSk7XG4gIH1cbiAgY29uc3QgcmVjdCA9IGRvbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgJFxuICB9ID0gZ2V0Q3NzRGltZW5zaW9ucyhkb21FbGVtZW50KTtcbiAgbGV0IHggPSAoJCA/IHJvdW5kKHJlY3Qud2lkdGgpIDogcmVjdC53aWR0aCkgLyB3aWR0aDtcbiAgbGV0IHkgPSAoJCA/IHJvdW5kKHJlY3QuaGVpZ2h0KSA6IHJlY3QuaGVpZ2h0KSAvIGhlaWdodDtcblxuICAvLyAwLCBOYU4sIG9yIEluZmluaXR5IHNob3VsZCBhbHdheXMgZmFsbGJhY2sgdG8gMS5cblxuICBpZiAoIXggfHwgIU51bWJlci5pc0Zpbml0ZSh4KSkge1xuICAgIHggPSAxO1xuICB9XG4gIGlmICgheSB8fCAhTnVtYmVyLmlzRmluaXRlKHkpKSB7XG4gICAgeSA9IDE7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuY29uc3Qgbm9PZmZzZXRzID0gLyojX19QVVJFX18qL2NyZWF0ZUNvb3JkcygwKTtcbmZ1bmN0aW9uIGdldFZpc3VhbE9mZnNldHMoZWxlbWVudCkge1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIGlmICghaXNXZWJLaXQoKSB8fCAhd2luLnZpc3VhbFZpZXdwb3J0KSB7XG4gICAgcmV0dXJuIG5vT2Zmc2V0cztcbiAgfVxuICByZXR1cm4ge1xuICAgIHg6IHdpbi52aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0LFxuICAgIHk6IHdpbi52aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3BcbiAgfTtcbn1cbmZ1bmN0aW9uIHNob3VsZEFkZFZpc3VhbE9mZnNldHMoZWxlbWVudCwgaXNGaXhlZCwgZmxvYXRpbmdPZmZzZXRQYXJlbnQpIHtcbiAgaWYgKGlzRml4ZWQgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWQgPSBmYWxzZTtcbiAgfVxuICBpZiAoIWZsb2F0aW5nT2Zmc2V0UGFyZW50IHx8IGlzRml4ZWQgJiYgZmxvYXRpbmdPZmZzZXRQYXJlbnQgIT09IGdldFdpbmRvdyhlbGVtZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gaXNGaXhlZDtcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGluY2x1ZGVTY2FsZSwgaXNGaXhlZFN0cmF0ZWd5LCBvZmZzZXRQYXJlbnQpIHtcbiAgaWYgKGluY2x1ZGVTY2FsZSA9PT0gdm9pZCAwKSB7XG4gICAgaW5jbHVkZVNjYWxlID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzRml4ZWRTdHJhdGVneSA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZFN0cmF0ZWd5ID0gZmFsc2U7XG4gIH1cbiAgY29uc3QgY2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IGRvbUVsZW1lbnQgPSB1bndyYXBFbGVtZW50KGVsZW1lbnQpO1xuICBsZXQgc2NhbGUgPSBjcmVhdGVDb29yZHMoMSk7XG4gIGlmIChpbmNsdWRlU2NhbGUpIHtcbiAgICBpZiAob2Zmc2V0UGFyZW50KSB7XG4gICAgICBpZiAoaXNFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgICAgc2NhbGUgPSBnZXRTY2FsZShvZmZzZXRQYXJlbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzY2FsZSA9IGdldFNjYWxlKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuICBjb25zdCB2aXN1YWxPZmZzZXRzID0gc2hvdWxkQWRkVmlzdWFsT2Zmc2V0cyhkb21FbGVtZW50LCBpc0ZpeGVkU3RyYXRlZ3ksIG9mZnNldFBhcmVudCkgPyBnZXRWaXN1YWxPZmZzZXRzKGRvbUVsZW1lbnQpIDogY3JlYXRlQ29vcmRzKDApO1xuICBsZXQgeCA9IChjbGllbnRSZWN0LmxlZnQgKyB2aXN1YWxPZmZzZXRzLngpIC8gc2NhbGUueDtcbiAgbGV0IHkgPSAoY2xpZW50UmVjdC50b3AgKyB2aXN1YWxPZmZzZXRzLnkpIC8gc2NhbGUueTtcbiAgbGV0IHdpZHRoID0gY2xpZW50UmVjdC53aWR0aCAvIHNjYWxlLng7XG4gIGxldCBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodCAvIHNjYWxlLnk7XG4gIGlmIChkb21FbGVtZW50KSB7XG4gICAgY29uc3Qgd2luID0gZ2V0V2luZG93KGRvbUVsZW1lbnQpO1xuICAgIGNvbnN0IG9mZnNldFdpbiA9IG9mZnNldFBhcmVudCAmJiBpc0VsZW1lbnQob2Zmc2V0UGFyZW50KSA/IGdldFdpbmRvdyhvZmZzZXRQYXJlbnQpIDogb2Zmc2V0UGFyZW50O1xuICAgIGxldCBjdXJyZW50V2luID0gd2luO1xuICAgIGxldCBjdXJyZW50SUZyYW1lID0gZ2V0RnJhbWVFbGVtZW50KGN1cnJlbnRXaW4pO1xuICAgIHdoaWxlIChjdXJyZW50SUZyYW1lICYmIG9mZnNldFBhcmVudCAmJiBvZmZzZXRXaW4gIT09IGN1cnJlbnRXaW4pIHtcbiAgICAgIGNvbnN0IGlmcmFtZVNjYWxlID0gZ2V0U2NhbGUoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBpZnJhbWVSZWN0ID0gY3VycmVudElGcmFtZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBsZWZ0ID0gaWZyYW1lUmVjdC5sZWZ0ICsgKGN1cnJlbnRJRnJhbWUuY2xpZW50TGVmdCArIHBhcnNlRmxvYXQoY3NzLnBhZGRpbmdMZWZ0KSkgKiBpZnJhbWVTY2FsZS54O1xuICAgICAgY29uc3QgdG9wID0gaWZyYW1lUmVjdC50b3AgKyAoY3VycmVudElGcmFtZS5jbGllbnRUb3AgKyBwYXJzZUZsb2F0KGNzcy5wYWRkaW5nVG9wKSkgKiBpZnJhbWVTY2FsZS55O1xuICAgICAgeCAqPSBpZnJhbWVTY2FsZS54O1xuICAgICAgeSAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgd2lkdGggKj0gaWZyYW1lU2NhbGUueDtcbiAgICAgIGhlaWdodCAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgeCArPSBsZWZ0O1xuICAgICAgeSArPSB0b3A7XG4gICAgICBjdXJyZW50V2luID0gZ2V0V2luZG93KGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3Qoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfSk7XG59XG5cbi8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbi8vIGluY29ycmVjdCBmb3IgUlRMLlxuZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50LCByZWN0KSB7XG4gIGNvbnN0IGxlZnRTY3JvbGwgPSBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG4gIGlmICghcmVjdCkge1xuICAgIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgbGVmdFNjcm9sbDtcbiAgfVxuICByZXR1cm4gcmVjdC5sZWZ0ICsgbGVmdFNjcm9sbDtcbn1cblxuZnVuY3Rpb24gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCwgaWdub3JlU2Nyb2xsYmFyWCkge1xuICBpZiAoaWdub3JlU2Nyb2xsYmFyWCA9PT0gdm9pZCAwKSB7XG4gICAgaWdub3JlU2Nyb2xsYmFyWCA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGh0bWxSZWN0ID0gZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB4ID0gaHRtbFJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gKGlnbm9yZVNjcm9sbGJhclggPyAwIDpcbiAgLy8gUlRMIDxib2R5PiBzY3JvbGxiYXIuXG4gIGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50LCBodG1sUmVjdCkpO1xuICBjb25zdCB5ID0gaHRtbFJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcDtcbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QoX3JlZikge1xuICBsZXQge1xuICAgIGVsZW1lbnRzLFxuICAgIHJlY3QsXG4gICAgb2Zmc2V0UGFyZW50LFxuICAgIHN0cmF0ZWd5XG4gIH0gPSBfcmVmO1xuICBjb25zdCBpc0ZpeGVkID0gc3RyYXRlZ3kgPT09ICdmaXhlZCc7XG4gIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCB0b3BMYXllciA9IGVsZW1lbnRzID8gaXNUb3BMYXllcihlbGVtZW50cy5mbG9hdGluZykgOiBmYWxzZTtcbiAgaWYgKG9mZnNldFBhcmVudCA9PT0gZG9jdW1lbnRFbGVtZW50IHx8IHRvcExheWVyICYmIGlzRml4ZWQpIHtcbiAgICByZXR1cm4gcmVjdDtcbiAgfVxuICBsZXQgc2Nyb2xsID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH07XG4gIGxldCBzY2FsZSA9IGNyZWF0ZUNvb3JkcygxKTtcbiAgY29uc3Qgb2Zmc2V0cyA9IGNyZWF0ZUNvb3JkcygwKTtcbiAgY29uc3QgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG4gICAgaWYgKGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgY29uc3Qgb2Zmc2V0UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQpO1xuICAgICAgc2NhbGUgPSBnZXRTY2FsZShvZmZzZXRQYXJlbnQpO1xuICAgICAgb2Zmc2V0cy54ID0gb2Zmc2V0UmVjdC54ICsgb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgPSBvZmZzZXRSZWN0LnkgKyBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH1cbiAgfVxuICBjb25zdCBodG1sT2Zmc2V0ID0gZG9jdW1lbnRFbGVtZW50ICYmICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCA/IGdldEhUTUxPZmZzZXQoZG9jdW1lbnRFbGVtZW50LCBzY3JvbGwsIHRydWUpIDogY3JlYXRlQ29vcmRzKDApO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiByZWN0LndpZHRoICogc2NhbGUueCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0ICogc2NhbGUueSxcbiAgICB4OiByZWN0LnggKiBzY2FsZS54IC0gc2Nyb2xsLnNjcm9sbExlZnQgKiBzY2FsZS54ICsgb2Zmc2V0cy54ICsgaHRtbE9mZnNldC54LFxuICAgIHk6IHJlY3QueSAqIHNjYWxlLnkgLSBzY3JvbGwuc2Nyb2xsVG9wICogc2NhbGUueSArIG9mZnNldHMueSArIGh0bWxPZmZzZXQueVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0cyhlbGVtZW50KSB7XG4gIHJldHVybiBBcnJheS5mcm9tKGVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKSk7XG59XG5cbi8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGUuXG5mdW5jdGlvbiBnZXREb2N1bWVudFJlY3QoZWxlbWVudCkge1xuICBjb25zdCBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpO1xuICBjb25zdCBib2R5ID0gZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHk7XG4gIGNvbnN0IHdpZHRoID0gbWF4KGh0bWwuc2Nyb2xsV2lkdGgsIGh0bWwuY2xpZW50V2lkdGgsIGJvZHkuc2Nyb2xsV2lkdGgsIGJvZHkuY2xpZW50V2lkdGgpO1xuICBjb25zdCBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5LnNjcm9sbEhlaWdodCwgYm9keS5jbGllbnRIZWlnaHQpO1xuICBsZXQgeCA9IC1zY3JvbGwuc2Nyb2xsTGVmdCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCk7XG4gIGNvbnN0IHkgPSAtc2Nyb2xsLnNjcm9sbFRvcDtcbiAgaWYgKGdldENvbXB1dGVkU3R5bGUoYm9keSkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgIHggKz0gbWF4KGh0bWwuY2xpZW50V2lkdGgsIGJvZHkuY2xpZW50V2lkdGgpIC0gd2lkdGg7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIGNvbnN0IGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IHZpc3VhbFZpZXdwb3J0ID0gd2luLnZpc3VhbFZpZXdwb3J0O1xuICBsZXQgd2lkdGggPSBodG1sLmNsaWVudFdpZHRoO1xuICBsZXQgaGVpZ2h0ID0gaHRtbC5jbGllbnRIZWlnaHQ7XG4gIGxldCB4ID0gMDtcbiAgbGV0IHkgPSAwO1xuICBpZiAodmlzdWFsVmlld3BvcnQpIHtcbiAgICB3aWR0aCA9IHZpc3VhbFZpZXdwb3J0LndpZHRoO1xuICAgIGhlaWdodCA9IHZpc3VhbFZpZXdwb3J0LmhlaWdodDtcbiAgICBjb25zdCB2aXN1YWxWaWV3cG9ydEJhc2VkID0gaXNXZWJLaXQoKTtcbiAgICBpZiAoIXZpc3VhbFZpZXdwb3J0QmFzZWQgfHwgdmlzdWFsVmlld3BvcnRCYXNlZCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuY29uc3QgYWJzb2x1dGVPckZpeGVkID0gLyojX19QVVJFX18qL25ldyBTZXQoWydhYnNvbHV0ZScsICdmaXhlZCddKTtcbi8vIFJldHVybnMgdGhlIGlubmVyIGNsaWVudCByZWN0LCBzdWJ0cmFjdGluZyBzY3JvbGxiYXJzIGlmIHByZXNlbnQuXG5mdW5jdGlvbiBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICBjb25zdCBjbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHRydWUsIHN0cmF0ZWd5ID09PSAnZml4ZWQnKTtcbiAgY29uc3QgdG9wID0gY2xpZW50UmVjdC50b3AgKyBlbGVtZW50LmNsaWVudFRvcDtcbiAgY29uc3QgbGVmdCA9IGNsaWVudFJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50TGVmdDtcbiAgY29uc3Qgc2NhbGUgPSBpc0hUTUxFbGVtZW50KGVsZW1lbnQpID8gZ2V0U2NhbGUoZWxlbWVudCkgOiBjcmVhdGVDb29yZHMoMSk7XG4gIGNvbnN0IHdpZHRoID0gZWxlbWVudC5jbGllbnRXaWR0aCAqIHNjYWxlLng7XG4gIGNvbnN0IGhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0ICogc2NhbGUueTtcbiAgY29uc3QgeCA9IGxlZnQgKiBzY2FsZS54O1xuICBjb25zdCB5ID0gdG9wICogc2NhbGUueTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpIHtcbiAgbGV0IHJlY3Q7XG4gIGlmIChjbGlwcGluZ0FuY2VzdG9yID09PSAndmlld3BvcnQnKSB7XG4gICAgcmVjdCA9IGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSk7XG4gIH0gZWxzZSBpZiAoY2xpcHBpbmdBbmNlc3RvciA9PT0gJ2RvY3VtZW50Jykge1xuICAgIHJlY3QgPSBnZXREb2N1bWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKTtcbiAgfSBlbHNlIGlmIChpc0VsZW1lbnQoY2xpcHBpbmdBbmNlc3RvcikpIHtcbiAgICByZWN0ID0gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHZpc3VhbE9mZnNldHMgPSBnZXRWaXN1YWxPZmZzZXRzKGVsZW1lbnQpO1xuICAgIHJlY3QgPSB7XG4gICAgICB4OiBjbGlwcGluZ0FuY2VzdG9yLnggLSB2aXN1YWxPZmZzZXRzLngsXG4gICAgICB5OiBjbGlwcGluZ0FuY2VzdG9yLnkgLSB2aXN1YWxPZmZzZXRzLnksXG4gICAgICB3aWR0aDogY2xpcHBpbmdBbmNlc3Rvci53aWR0aCxcbiAgICAgIGhlaWdodDogY2xpcHBpbmdBbmNlc3Rvci5oZWlnaHRcbiAgICB9O1xuICB9XG4gIHJldHVybiByZWN0VG9DbGllbnRSZWN0KHJlY3QpO1xufVxuZnVuY3Rpb24gaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKGVsZW1lbnQsIHN0b3BOb2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICBpZiAocGFyZW50Tm9kZSA9PT0gc3RvcE5vZGUgfHwgIWlzRWxlbWVudChwYXJlbnROb2RlKSB8fCBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUocGFyZW50Tm9kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUocGFyZW50Tm9kZSkucG9zaXRpb24gPT09ICdmaXhlZCcgfHwgaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKHBhcmVudE5vZGUsIHN0b3BOb2RlKTtcbn1cblxuLy8gQSBcImNsaXBwaW5nIGFuY2VzdG9yXCIgaXMgYW4gYG92ZXJmbG93YCBlbGVtZW50IHdpdGggdGhlIGNoYXJhY3RlcmlzdGljIG9mXG4vLyBjbGlwcGluZyAob3IgaGlkaW5nKSBjaGlsZCBlbGVtZW50cy4gVGhpcyByZXR1cm5zIGFsbCBjbGlwcGluZyBhbmNlc3RvcnNcbi8vIG9mIHRoZSBnaXZlbiBlbGVtZW50IHVwIHRoZSB0cmVlLlxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzKGVsZW1lbnQsIGNhY2hlKSB7XG4gIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGNhY2hlLmdldChlbGVtZW50KTtcbiAgaWYgKGNhY2hlZFJlc3VsdCkge1xuICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gIH1cbiAgbGV0IHJlc3VsdCA9IGdldE92ZXJmbG93QW5jZXN0b3JzKGVsZW1lbnQsIFtdLCBmYWxzZSkuZmlsdGVyKGVsID0+IGlzRWxlbWVudChlbCkgJiYgZ2V0Tm9kZU5hbWUoZWwpICE9PSAnYm9keScpO1xuICBsZXQgY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgPSBudWxsO1xuICBjb25zdCBlbGVtZW50SXNGaXhlZCA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCc7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgd2hpbGUgKGlzRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShjdXJyZW50Tm9kZSkpIHtcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50Tm9kZSk7XG4gICAgY29uc3QgY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgPSBpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSk7XG4gICAgaWYgKCFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBjb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICBjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA9IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHNob3VsZERyb3BDdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmICFjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA6ICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBjb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAnc3RhdGljJyAmJiAhIWN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlICYmIGFic29sdXRlT3JGaXhlZC5oYXMoY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUucG9zaXRpb24pIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKGVsZW1lbnQsIGN1cnJlbnROb2RlKTtcbiAgICBpZiAoc2hvdWxkRHJvcEN1cnJlbnROb2RlKSB7XG4gICAgICAvLyBEcm9wIG5vbi1jb250YWluaW5nIGJsb2Nrcy5cbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoYW5jZXN0b3IgPT4gYW5jZXN0b3IgIT09IGN1cnJlbnROb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVjb3JkIGxhc3QgY29udGFpbmluZyBibG9jayBmb3IgbmV4dCBpdGVyYXRpb24uXG4gICAgICBjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA9IGNvbXB1dGVkU3R5bGU7XG4gICAgfVxuICAgIGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShjdXJyZW50Tm9kZSk7XG4gIH1cbiAgY2FjaGUuc2V0KGVsZW1lbnQsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIEdldHMgdGhlIG1heGltdW0gYXJlYSB0aGF0IHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gZHVlIHRvIGFueSBudW1iZXIgb2Zcbi8vIGNsaXBwaW5nIGFuY2VzdG9ycy5cbmZ1bmN0aW9uIGdldENsaXBwaW5nUmVjdChfcmVmKSB7XG4gIGxldCB7XG4gICAgZWxlbWVudCxcbiAgICBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnksXG4gICAgc3RyYXRlZ3lcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGVsZW1lbnRDbGlwcGluZ0FuY2VzdG9ycyA9IGJvdW5kYXJ5ID09PSAnY2xpcHBpbmdBbmNlc3RvcnMnID8gaXNUb3BMYXllcihlbGVtZW50KSA/IFtdIDogZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzKGVsZW1lbnQsIHRoaXMuX2MpIDogW10uY29uY2F0KGJvdW5kYXJ5KTtcbiAgY29uc3QgY2xpcHBpbmdBbmNlc3RvcnMgPSBbLi4uZWxlbWVudENsaXBwaW5nQW5jZXN0b3JzLCByb290Qm91bmRhcnldO1xuICBjb25zdCBmaXJzdENsaXBwaW5nQW5jZXN0b3IgPSBjbGlwcGluZ0FuY2VzdG9yc1swXTtcbiAgY29uc3QgY2xpcHBpbmdSZWN0ID0gY2xpcHBpbmdBbmNlc3RvcnMucmVkdWNlKChhY2NSZWN0LCBjbGlwcGluZ0FuY2VzdG9yKSA9PiB7XG4gICAgY29uc3QgcmVjdCA9IGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSk7XG4gICAgYWNjUmVjdC50b3AgPSBtYXgocmVjdC50b3AsIGFjY1JlY3QudG9wKTtcbiAgICBhY2NSZWN0LnJpZ2h0ID0gbWluKHJlY3QucmlnaHQsIGFjY1JlY3QucmlnaHQpO1xuICAgIGFjY1JlY3QuYm90dG9tID0gbWluKHJlY3QuYm90dG9tLCBhY2NSZWN0LmJvdHRvbSk7XG4gICAgYWNjUmVjdC5sZWZ0ID0gbWF4KHJlY3QubGVmdCwgYWNjUmVjdC5sZWZ0KTtcbiAgICByZXR1cm4gYWNjUmVjdDtcbiAgfSwgZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGZpcnN0Q2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpKTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogY2xpcHBpbmdSZWN0LnJpZ2h0IC0gY2xpcHBpbmdSZWN0LmxlZnQsXG4gICAgaGVpZ2h0OiBjbGlwcGluZ1JlY3QuYm90dG9tIC0gY2xpcHBpbmdSZWN0LnRvcCxcbiAgICB4OiBjbGlwcGluZ1JlY3QubGVmdCxcbiAgICB5OiBjbGlwcGluZ1JlY3QudG9wXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldERpbWVuc2lvbnMoZWxlbWVudCkge1xuICBjb25zdCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH0gPSBnZXRDc3NEaW1lbnNpb25zKGVsZW1lbnQpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRSZWN0UmVsYXRpdmVUb09mZnNldFBhcmVudChlbGVtZW50LCBvZmZzZXRQYXJlbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgY29uc3QgaXNGaXhlZCA9IHN0cmF0ZWd5ID09PSAnZml4ZWQnO1xuICBjb25zdCByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHRydWUsIGlzRml4ZWQsIG9mZnNldFBhcmVudCk7XG4gIGxldCBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgY29uc3Qgb2Zmc2V0cyA9IGNyZWF0ZUNvb3JkcygwKTtcblxuICAvLyBJZiB0aGUgPGJvZHk+IHNjcm9sbGJhciBhcHBlYXJzIG9uIHRoZSBsZWZ0IChlLmcuIFJUTCBzeXN0ZW1zKS4gVXNlXG4gIC8vIEZpcmVmb3ggd2l0aCBsYXlvdXQuc2Nyb2xsYmFyLnNpZGUgPSAzIGluIGFib3V0OmNvbmZpZyB0byB0ZXN0IHRoaXMuXG4gIGZ1bmN0aW9uIHNldExlZnRSVExTY3JvbGxiYXJPZmZzZXQoKSB7XG4gICAgb2Zmc2V0cy54ID0gZ2V0V2luZG93U2Nyb2xsQmFyWChkb2N1bWVudEVsZW1lbnQpO1xuICB9XG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG4gICAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50KSB7XG4gICAgICBjb25zdCBvZmZzZXRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCwgdHJ1ZSwgaXNGaXhlZCwgb2Zmc2V0UGFyZW50KTtcbiAgICAgIG9mZnNldHMueCA9IG9mZnNldFJlY3QueCArIG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ID0gb2Zmc2V0UmVjdC55ICsgb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudCkge1xuICAgICAgc2V0TGVmdFJUTFNjcm9sbGJhck9mZnNldCgpO1xuICAgIH1cbiAgfVxuICBpZiAoaXNGaXhlZCAmJiAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgc2V0TGVmdFJUTFNjcm9sbGJhck9mZnNldCgpO1xuICB9XG4gIGNvbnN0IGh0bWxPZmZzZXQgPSBkb2N1bWVudEVsZW1lbnQgJiYgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkID8gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCkgOiBjcmVhdGVDb29yZHMoMCk7XG4gIGNvbnN0IHggPSByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueCAtIGh0bWxPZmZzZXQueDtcbiAgY29uc3QgeSA9IHJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcCAtIG9mZnNldHMueSAtIGh0bWxPZmZzZXQueTtcbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1N0YXRpY1Bvc2l0aW9uZWQoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYyc7XG59XG5cbmZ1bmN0aW9uIGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpIHtcbiAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAocG9seWZpbGwpIHtcbiAgICByZXR1cm4gcG9seWZpbGwoZWxlbWVudCk7XG4gIH1cbiAgbGV0IHJhd09mZnNldFBhcmVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXG4gIC8vIEZpcmVmb3ggcmV0dXJucyB0aGUgPGh0bWw+IGVsZW1lbnQgYXMgdGhlIG9mZnNldFBhcmVudCBpZiBpdCdzIG5vbi1zdGF0aWMsXG4gIC8vIHdoaWxlIENocm9tZSBhbmQgU2FmYXJpIHJldHVybiB0aGUgPGJvZHk+IGVsZW1lbnQuIFRoZSA8Ym9keT4gZWxlbWVudCBtdXN0XG4gIC8vIGJlIHVzZWQgdG8gcGVyZm9ybSB0aGUgY29ycmVjdCBjYWxjdWxhdGlvbnMgZXZlbiBpZiB0aGUgPGh0bWw+IGVsZW1lbnQgaXNcbiAgLy8gbm9uLXN0YXRpYy5cbiAgaWYgKGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSA9PT0gcmF3T2Zmc2V0UGFyZW50KSB7XG4gICAgcmF3T2Zmc2V0UGFyZW50ID0gcmF3T2Zmc2V0UGFyZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuICByZXR1cm4gcmF3T2Zmc2V0UGFyZW50O1xufVxuXG4vLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgaWYgKGlzVG9wTGF5ZXIoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIGxldCBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICAgIHdoaWxlIChzdmdPZmZzZXRQYXJlbnQgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICBpZiAoaXNFbGVtZW50KHN2Z09mZnNldFBhcmVudCkgJiYgIWlzU3RhdGljUG9zaXRpb25lZChzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHJldHVybiBzdmdPZmZzZXRQYXJlbnQ7XG4gICAgICB9XG4gICAgICBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKHN2Z09mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIHJldHVybiB3aW47XG4gIH1cbiAgbGV0IG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpO1xuICB3aGlsZSAob2Zmc2V0UGFyZW50ICYmIGlzVGFibGVFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCwgcG9seWZpbGwpO1xuICB9XG4gIGlmIChvZmZzZXRQYXJlbnQgJiYgaXNMYXN0VHJhdmVyc2FibGVOb2RlKG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkgJiYgIWlzQ29udGFpbmluZ0Jsb2NrKG9mZnNldFBhcmVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbjtcbn1cblxuY29uc3QgZ2V0RWxlbWVudFJlY3RzID0gYXN5bmMgZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgZ2V0T2Zmc2V0UGFyZW50Rm4gPSB0aGlzLmdldE9mZnNldFBhcmVudCB8fCBnZXRPZmZzZXRQYXJlbnQ7XG4gIGNvbnN0IGdldERpbWVuc2lvbnNGbiA9IHRoaXMuZ2V0RGltZW5zaW9ucztcbiAgY29uc3QgZmxvYXRpbmdEaW1lbnNpb25zID0gYXdhaXQgZ2V0RGltZW5zaW9uc0ZuKGRhdGEuZmxvYXRpbmcpO1xuICByZXR1cm4ge1xuICAgIHJlZmVyZW5jZTogZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQoZGF0YS5yZWZlcmVuY2UsIGF3YWl0IGdldE9mZnNldFBhcmVudEZuKGRhdGEuZmxvYXRpbmcpLCBkYXRhLnN0cmF0ZWd5KSxcbiAgICBmbG9hdGluZzoge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDAsXG4gICAgICB3aWR0aDogZmxvYXRpbmdEaW1lbnNpb25zLndpZHRoLFxuICAgICAgaGVpZ2h0OiBmbG9hdGluZ0RpbWVuc2lvbnMuaGVpZ2h0XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNSVEwoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5kaXJlY3Rpb24gPT09ICdydGwnO1xufVxuXG5jb25zdCBwbGF0Zm9ybSA9IHtcbiAgY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QsXG4gIGdldERvY3VtZW50RWxlbWVudCxcbiAgZ2V0Q2xpcHBpbmdSZWN0LFxuICBnZXRPZmZzZXRQYXJlbnQsXG4gIGdldEVsZW1lbnRSZWN0cyxcbiAgZ2V0Q2xpZW50UmVjdHMsXG4gIGdldERpbWVuc2lvbnMsXG4gIGdldFNjYWxlLFxuICBpc0VsZW1lbnQsXG4gIGlzUlRMXG59O1xuXG5mdW5jdGlvbiByZWN0c0FyZUVxdWFsKGEsIGIpIHtcbiAgcmV0dXJuIGEueCA9PT0gYi54ICYmIGEueSA9PT0gYi55ICYmIGEud2lkdGggPT09IGIud2lkdGggJiYgYS5oZWlnaHQgPT09IGIuaGVpZ2h0O1xufVxuXG4vLyBodHRwczovL3NhbXRob3IuYXUvMjAyMS9vYnNlcnZpbmctZG9tL1xuZnVuY3Rpb24gb2JzZXJ2ZU1vdmUoZWxlbWVudCwgb25Nb3ZlKSB7XG4gIGxldCBpbyA9IG51bGw7XG4gIGxldCB0aW1lb3V0SWQ7XG4gIGNvbnN0IHJvb3QgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgdmFyIF9pbztcbiAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAoX2lvID0gaW8pID09IG51bGwgfHwgX2lvLmRpc2Nvbm5lY3QoKTtcbiAgICBpbyA9IG51bGw7XG4gIH1cbiAgZnVuY3Rpb24gcmVmcmVzaChza2lwLCB0aHJlc2hvbGQpIHtcbiAgICBpZiAoc2tpcCA9PT0gdm9pZCAwKSB7XG4gICAgICBza2lwID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aHJlc2hvbGQgPT09IHZvaWQgMCkge1xuICAgICAgdGhyZXNob2xkID0gMTtcbiAgICB9XG4gICAgY2xlYW51cCgpO1xuICAgIGNvbnN0IGVsZW1lbnRSZWN0Rm9yUm9vdE1hcmdpbiA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qge1xuICAgICAgbGVmdCxcbiAgICAgIHRvcCxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0XG4gICAgfSA9IGVsZW1lbnRSZWN0Rm9yUm9vdE1hcmdpbjtcbiAgICBpZiAoIXNraXApIHtcbiAgICAgIG9uTW92ZSgpO1xuICAgIH1cbiAgICBpZiAoIXdpZHRoIHx8ICFoZWlnaHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5zZXRUb3AgPSBmbG9vcih0b3ApO1xuICAgIGNvbnN0IGluc2V0UmlnaHQgPSBmbG9vcihyb290LmNsaWVudFdpZHRoIC0gKGxlZnQgKyB3aWR0aCkpO1xuICAgIGNvbnN0IGluc2V0Qm90dG9tID0gZmxvb3Iocm9vdC5jbGllbnRIZWlnaHQgLSAodG9wICsgaGVpZ2h0KSk7XG4gICAgY29uc3QgaW5zZXRMZWZ0ID0gZmxvb3IobGVmdCk7XG4gICAgY29uc3Qgcm9vdE1hcmdpbiA9IC1pbnNldFRvcCArIFwicHggXCIgKyAtaW5zZXRSaWdodCArIFwicHggXCIgKyAtaW5zZXRCb3R0b20gKyBcInB4IFwiICsgLWluc2V0TGVmdCArIFwicHhcIjtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcm9vdE1hcmdpbixcbiAgICAgIHRocmVzaG9sZDogbWF4KDAsIG1pbigxLCB0aHJlc2hvbGQpKSB8fCAxXG4gICAgfTtcbiAgICBsZXQgaXNGaXJzdFVwZGF0ZSA9IHRydWU7XG4gICAgZnVuY3Rpb24gaGFuZGxlT2JzZXJ2ZShlbnRyaWVzKSB7XG4gICAgICBjb25zdCByYXRpbyA9IGVudHJpZXNbMF0uaW50ZXJzZWN0aW9uUmF0aW87XG4gICAgICBpZiAocmF0aW8gIT09IHRocmVzaG9sZCkge1xuICAgICAgICBpZiAoIWlzRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgICByZXR1cm4gcmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmF0aW8pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgcmVmZXJlbmNlIGlzIGNsaXBwZWQsIHRoZSByYXRpbyBpcyAwLiBUaHJvdHRsZSB0aGUgcmVmcmVzaFxuICAgICAgICAgIC8vIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCBvZiB1cGRhdGVzLlxuICAgICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgcmVmcmVzaChmYWxzZSwgMWUtNyk7XG4gICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVmcmVzaChmYWxzZSwgcmF0aW8pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmF0aW8gPT09IDEgJiYgIXJlY3RzQXJlRXF1YWwoZWxlbWVudFJlY3RGb3JSb290TWFyZ2luLCBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSkge1xuICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgZXZlbiB0aG91Z2ggdGhlIHJhdGlvIGlzIHJlcG9ydGVkIGFzIDEsIHRoZVxuICAgICAgICAvLyBlbGVtZW50IGlzIG5vdCBhY3R1YWxseSBmdWxseSB3aXRoaW4gdGhlIEludGVyc2VjdGlvbk9ic2VydmVyJ3Mgcm9vdFxuICAgICAgICAvLyBhcmVhIGFueW1vcmUuIFRoaXMgY2FuIGhhcHBlbiB1bmRlciBwZXJmb3JtYW5jZSBjb25zdHJhaW50cy4gVGhpcyBtYXlcbiAgICAgICAgLy8gYmUgYSBidWcgaW4gdGhlIGJyb3dzZXIncyBJbnRlcnNlY3Rpb25PYnNlcnZlciBpbXBsZW1lbnRhdGlvbi4gVG9cbiAgICAgICAgLy8gd29yayBhcm91bmQgdGhpcywgd2UgY29tcGFyZSB0aGUgZWxlbWVudCdzIGJvdW5kaW5nIHJlY3Qgbm93IHdpdGhcbiAgICAgICAgLy8gd2hhdCBpdCB3YXMgYXQgdGhlIHRpbWUgd2UgY3JlYXRlZCB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuIElmIHRoZXlcbiAgICAgICAgLy8gYXJlIG5vdCBlcXVhbCB0aGVuIHRoZSBlbGVtZW50IG1vdmVkLCBzbyB3ZSByZWZyZXNoLlxuICAgICAgICByZWZyZXNoKCk7XG4gICAgICB9XG4gICAgICBpc0ZpcnN0VXBkYXRlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gT2xkZXIgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCBhIGBkb2N1bWVudGAgYXMgdGhlIHJvb3QgYW5kIHdpbGwgdGhyb3cgYW5cbiAgICAvLyBlcnJvci5cbiAgICB0cnkge1xuICAgICAgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaGFuZGxlT2JzZXJ2ZSwge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAvLyBIYW5kbGUgPGlmcmFtZT5zXG4gICAgICAgIHJvb3Q6IHJvb3Qub3duZXJEb2N1bWVudFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoX2UpIHtcbiAgICAgIGlvID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGhhbmRsZU9ic2VydmUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpby5vYnNlcnZlKGVsZW1lbnQpO1xuICB9XG4gIHJlZnJlc2godHJ1ZSk7XG4gIHJldHVybiBjbGVhbnVwO1xufVxuXG4vKipcbiAqIEF1dG9tYXRpY2FsbHkgdXBkYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgd2hlbiBuZWNlc3NhcnkuXG4gKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgZmxvYXRpbmcgZWxlbWVudCBpcyBtb3VudGVkIG9uIHRoZSBET00gb3JcbiAqIHZpc2libGUgb24gdGhlIHNjcmVlbi5cbiAqIEByZXR1cm5zIGNsZWFudXAgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgaW52b2tlZCB3aGVuIHRoZSBmbG9hdGluZyBlbGVtZW50IGlzXG4gKiByZW1vdmVkIGZyb20gdGhlIERPTSBvciBoaWRkZW4gZnJvbSB0aGUgc2NyZWVuLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9VcGRhdGVcbiAqL1xuZnVuY3Rpb24gYXV0b1VwZGF0ZShyZWZlcmVuY2UsIGZsb2F0aW5nLCB1cGRhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBjb25zdCB7XG4gICAgYW5jZXN0b3JTY3JvbGwgPSB0cnVlLFxuICAgIGFuY2VzdG9yUmVzaXplID0gdHJ1ZSxcbiAgICBlbGVtZW50UmVzaXplID0gdHlwZW9mIFJlc2l6ZU9ic2VydmVyID09PSAnZnVuY3Rpb24nLFxuICAgIGxheW91dFNoaWZ0ID0gdHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyID09PSAnZnVuY3Rpb24nLFxuICAgIGFuaW1hdGlvbkZyYW1lID0gZmFsc2VcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJlZmVyZW5jZUVsID0gdW53cmFwRWxlbWVudChyZWZlcmVuY2UpO1xuICBjb25zdCBhbmNlc3RvcnMgPSBhbmNlc3RvclNjcm9sbCB8fCBhbmNlc3RvclJlc2l6ZSA/IFsuLi4ocmVmZXJlbmNlRWwgPyBnZXRPdmVyZmxvd0FuY2VzdG9ycyhyZWZlcmVuY2VFbCkgOiBbXSksIC4uLmdldE92ZXJmbG93QW5jZXN0b3JzKGZsb2F0aW5nKV0gOiBbXTtcbiAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgIGFuY2VzdG9yU2Nyb2xsICYmIGFuY2VzdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHVwZGF0ZSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZVxuICAgIH0pO1xuICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gIH0pO1xuICBjb25zdCBjbGVhbnVwSW8gPSByZWZlcmVuY2VFbCAmJiBsYXlvdXRTaGlmdCA/IG9ic2VydmVNb3ZlKHJlZmVyZW5jZUVsLCB1cGRhdGUpIDogbnVsbDtcbiAgbGV0IHJlb2JzZXJ2ZUZyYW1lID0gLTE7XG4gIGxldCByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gIGlmIChlbGVtZW50UmVzaXplKSB7XG4gICAgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoX3JlZiA9PiB7XG4gICAgICBsZXQgW2ZpcnN0RW50cnldID0gX3JlZjtcbiAgICAgIGlmIChmaXJzdEVudHJ5ICYmIGZpcnN0RW50cnkudGFyZ2V0ID09PSByZWZlcmVuY2VFbCAmJiByZXNpemVPYnNlcnZlcikge1xuICAgICAgICAvLyBQcmV2ZW50IHVwZGF0ZSBsb29wcyB3aGVuIHVzaW5nIHRoZSBgc2l6ZWAgbWlkZGxld2FyZS5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8xNzQwXG4gICAgICAgIHJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZShmbG9hdGluZyk7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJlb2JzZXJ2ZUZyYW1lKTtcbiAgICAgICAgcmVvYnNlcnZlRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIHZhciBfcmVzaXplT2JzZXJ2ZXI7XG4gICAgICAgICAgKF9yZXNpemVPYnNlcnZlciA9IHJlc2l6ZU9ic2VydmVyKSA9PSBudWxsIHx8IF9yZXNpemVPYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB1cGRhdGUoKTtcbiAgICB9KTtcbiAgICBpZiAocmVmZXJlbmNlRWwgJiYgIWFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHJlZmVyZW5jZUVsKTtcbiAgICB9XG4gICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShmbG9hdGluZyk7XG4gIH1cbiAgbGV0IGZyYW1lSWQ7XG4gIGxldCBwcmV2UmVmUmVjdCA9IGFuaW1hdGlvbkZyYW1lID8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHJlZmVyZW5jZSkgOiBudWxsO1xuICBpZiAoYW5pbWF0aW9uRnJhbWUpIHtcbiAgICBmcmFtZUxvb3AoKTtcbiAgfVxuICBmdW5jdGlvbiBmcmFtZUxvb3AoKSB7XG4gICAgY29uc3QgbmV4dFJlZlJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKTtcbiAgICBpZiAocHJldlJlZlJlY3QgJiYgIXJlY3RzQXJlRXF1YWwocHJldlJlZlJlY3QsIG5leHRSZWZSZWN0KSkge1xuICAgICAgdXBkYXRlKCk7XG4gICAgfVxuICAgIHByZXZSZWZSZWN0ID0gbmV4dFJlZlJlY3Q7XG4gICAgZnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShmcmFtZUxvb3ApO1xuICB9XG4gIHVwZGF0ZSgpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIHZhciBfcmVzaXplT2JzZXJ2ZXIyO1xuICAgIGFuY2VzdG9ycy5mb3JFYWNoKGFuY2VzdG9yID0+IHtcbiAgICAgIGFuY2VzdG9yU2Nyb2xsICYmIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHVwZGF0ZSk7XG4gICAgICBhbmNlc3RvclJlc2l6ZSAmJiBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGUpO1xuICAgIH0pO1xuICAgIGNsZWFudXBJbyA9PSBudWxsIHx8IGNsZWFudXBJbygpO1xuICAgIChfcmVzaXplT2JzZXJ2ZXIyID0gcmVzaXplT2JzZXJ2ZXIpID09IG51bGwgfHwgX3Jlc2l6ZU9ic2VydmVyMi5kaXNjb25uZWN0KCk7XG4gICAgcmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xuICAgIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoZnJhbWVJZCk7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHdpdGggYW4gb2JqZWN0IG9mIG92ZXJmbG93IHNpZGUgb2Zmc2V0cyB0aGF0IGRldGVybWluZSBob3cgbXVjaCB0aGVcbiAqIGVsZW1lbnQgaXMgb3ZlcmZsb3dpbmcgYSBnaXZlbiBjbGlwcGluZyBib3VuZGFyeSBvbiBlYWNoIHNpZGUuXG4gKiAtIHBvc2l0aXZlID0gb3ZlcmZsb3dpbmcgdGhlIGJvdW5kYXJ5IGJ5IHRoYXQgbnVtYmVyIG9mIHBpeGVsc1xuICogLSBuZWdhdGl2ZSA9IGhvdyBtYW55IHBpeGVscyBsZWZ0IGJlZm9yZSBpdCB3aWxsIG92ZXJmbG93XG4gKiAtIDAgPSBsaWVzIGZsdXNoIHdpdGggdGhlIGJvdW5kYXJ5XG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZGV0ZWN0T3ZlcmZsb3dcbiAqL1xuY29uc3QgZGV0ZWN0T3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyQxO1xuXG4vKipcbiAqIE1vZGlmaWVzIHRoZSBwbGFjZW1lbnQgYnkgdHJhbnNsYXRpbmcgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYWxvbmcgdGhlXG4gKiBzcGVjaWZpZWQgYXhlcy5cbiAqIEEgbnVtYmVyIChzaG9ydGhhbmQgZm9yIGBtYWluQXhpc2Agb3IgZGlzdGFuY2UpLCBvciBhbiBheGVzIGNvbmZpZ3VyYXRpb25cbiAqIG9iamVjdCBtYXkgYmUgcGFzc2VkLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL29mZnNldFxuICovXG5jb25zdCBvZmZzZXQgPSBvZmZzZXQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgY2hvb3NpbmcgdGhlIHBsYWNlbWVudFxuICogdGhhdCBoYXMgdGhlIG1vc3Qgc3BhY2UgYXZhaWxhYmxlIGF1dG9tYXRpY2FsbHksIHdpdGhvdXQgbmVlZGluZyB0byBzcGVjaWZ5IGFcbiAqIHByZWZlcnJlZCBwbGFjZW1lbnQuIEFsdGVybmF0aXZlIHRvIGBmbGlwYC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hdXRvUGxhY2VtZW50XG4gKi9cbmNvbnN0IGF1dG9QbGFjZW1lbnQgPSBhdXRvUGxhY2VtZW50JDE7XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IHNoaWZ0aW5nIGl0IGluIG9yZGVyIHRvXG4gKiBrZWVwIGl0IGluIHZpZXcgd2hlbiBpdCB3aWxsIG92ZXJmbG93IHRoZSBjbGlwcGluZyBib3VuZGFyeS5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaGlmdFxuICovXG5jb25zdCBzaGlmdCA9IHNoaWZ0JDE7XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IGZsaXBwaW5nIHRoZSBgcGxhY2VtZW50YFxuICogaW4gb3JkZXIgdG8ga2VlcCBpdCBpbiB2aWV3IHdoZW4gdGhlIHByZWZlcnJlZCBwbGFjZW1lbnQocykgd2lsbCBvdmVyZmxvdyB0aGVcbiAqIGNsaXBwaW5nIGJvdW5kYXJ5LiBBbHRlcm5hdGl2ZSB0byBgYXV0b1BsYWNlbWVudGAuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZmxpcFxuICovXG5jb25zdCBmbGlwID0gZmxpcCQxO1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdGhhdCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCDigJRcbiAqIGZvciBpbnN0YW5jZSwgcHJldmVudCBpdCBmcm9tIG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyBib3VuZGFyeSBvciBtYXRjaCB0aGVcbiAqIHdpZHRoIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaXplXG4gKi9cbmNvbnN0IHNpemUgPSBzaXplJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBoaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50IGluIGFwcGxpY2FibGUgc2l0dWF0aW9ucywgc3VjaCBhc1xuICogd2hlbiBpdCBpcyBub3QgaW4gdGhlIHNhbWUgY2xpcHBpbmcgY29udGV4dCBhcyB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaGlkZVxuICovXG5jb25zdCBoaWRlID0gaGlkZSQxO1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdG8gcG9zaXRpb24gYW4gaW5uZXIgZWxlbWVudCBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBzbyB0aGF0IGl0XG4gKiBhcHBlYXJzIGNlbnRlcmVkIHRvIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hcnJvd1xuICovXG5jb25zdCBhcnJvdyA9IGFycm93JDE7XG5cbi8qKlxuICogUHJvdmlkZXMgaW1wcm92ZWQgcG9zaXRpb25pbmcgZm9yIGlubGluZSByZWZlcmVuY2UgZWxlbWVudHMgdGhhdCBjYW4gc3BhblxuICogb3ZlciBtdWx0aXBsZSBsaW5lcywgc3VjaCBhcyBoeXBlcmxpbmtzIG9yIHJhbmdlIHNlbGVjdGlvbnMuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaW5saW5lXG4gKi9cbmNvbnN0IGlubGluZSA9IGlubGluZSQxO1xuXG4vKipcbiAqIEJ1aWx0LWluIGBsaW1pdGVyYCB0aGF0IHdpbGwgc3RvcCBgc2hpZnQoKWAgYXQgYSBjZXJ0YWluIHBvaW50LlxuICovXG5jb25zdCBsaW1pdFNoaWZ0ID0gbGltaXRTaGlmdCQxO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBgeGAgYW5kIGB5YCBjb29yZGluYXRlcyB0aGF0IHdpbGwgcGxhY2UgdGhlIGZsb2F0aW5nIGVsZW1lbnRcbiAqIG5leHQgdG8gYSBnaXZlbiByZWZlcmVuY2UgZWxlbWVudC5cbiAqL1xuY29uc3QgY29tcHV0ZVBvc2l0aW9uID0gKHJlZmVyZW5jZSwgZmxvYXRpbmcsIG9wdGlvbnMpID0+IHtcbiAgLy8gVGhpcyBjYWNoZXMgdGhlIGV4cGVuc2l2ZSBgZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzYCBmdW5jdGlvbiBzbyB0aGF0XG4gIC8vIG11bHRpcGxlIGxpZmVjeWNsZSByZXNldHMgcmUtdXNlIHRoZSBzYW1lIHJlc3VsdC4gSXQgb25seSBsaXZlcyBmb3IgYVxuICAvLyBzaW5nbGUgY2FsbC4gSWYgb3RoZXIgZnVuY3Rpb25zIGJlY29tZSBleHBlbnNpdmUsIHdlIGNhbiBhZGQgdGhlbSBhcyB3ZWxsLlxuICBjb25zdCBjYWNoZSA9IG5ldyBNYXAoKTtcbiAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IHtcbiAgICBwbGF0Zm9ybSxcbiAgICAuLi5vcHRpb25zXG4gIH07XG4gIGNvbnN0IHBsYXRmb3JtV2l0aENhY2hlID0ge1xuICAgIC4uLm1lcmdlZE9wdGlvbnMucGxhdGZvcm0sXG4gICAgX2M6IGNhY2hlXG4gIH07XG4gIHJldHVybiBjb21wdXRlUG9zaXRpb24kMShyZWZlcmVuY2UsIGZsb2F0aW5nLCB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucyxcbiAgICBwbGF0Zm9ybTogcGxhdGZvcm1XaXRoQ2FjaGVcbiAgfSk7XG59O1xuXG5leHBvcnQgeyBhcnJvdywgYXV0b1BsYWNlbWVudCwgYXV0b1VwZGF0ZSwgY29tcHV0ZVBvc2l0aW9uLCBkZXRlY3RPdmVyZmxvdywgZmxpcCwgaGlkZSwgaW5saW5lLCBsaW1pdFNoaWZ0LCBvZmZzZXQsIHBsYXRmb3JtLCBzaGlmdCwgc2l6ZSB9O1xuIiwiaW1wb3J0IHsgYXV0b1VwZGF0ZSwgY29tcHV0ZVBvc2l0aW9uIH0gZnJvbSBcIkBmbG9hdGluZy11aS9kb21cIjtcblxuZXhwb3J0IGNvbnN0IFFVSUNLX0VWRU5UID0geyBjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH07XG5leHBvcnQgY29uc3QgSVNfQlJPV1NFUiA9XG5cdHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiO1xuXG4vLyBUT0RPOiBEb2N1bWVudGF0aW9uIGZvciBwcmV0dHlOdW1iZXJcbmxldCBJTlRMX05VTTogSW50bC5OdW1iZXJGb3JtYXQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcHJldHR5TnVtYmVyKG51bWJlcjogbnVtYmVyIHwgc3RyaW5nKSB7XG5cdGlmICghSU5UTF9OVU0pXG5cdFx0SU5UTF9OVU0gPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXG5cdFx0XHQoSVNfQlJPV1NFUiAmJiBhdHRyKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgXCJsYW5nXCIpKSB8fCBcIm5vXCIsXG5cdFx0KTtcblx0cmV0dXJuIElOVExfTlVNLmZvcm1hdChOdW1iZXIobnVtYmVyKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWJvdW5jZTxUIGV4dGVuZHMgdW5rbm93bltdPihcblx0Y2FsbGJhY2s6ICguLi5hcmdzOiBUKSA9PiB2b2lkLFxuXHRkZWxheTogbnVtYmVyLFxuKSB7XG5cdGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG5cblx0cmV0dXJuICguLi5hcmdzOiBUKSA9PiB7XG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0XHR0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gY2FsbGJhY2soLi4uYXJncyksIGRlbGF5KTtcblx0fTtcbn1cblxuLyoqXG4gKiBhdHRyXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IGdldCwgc2V0IGFuZCByZW1vdmUgYXR0cmlidXRlc1xuICogQHBhcmFtIGVsIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIG5hbWUgVGhlIGF0dHJpYnV0ZSBuYW1lIHRvIGdldCwgc2V0IG9yIHJlbW92ZSwgb3IgYSBvYmplY3QgdG8gc2V0IG11bHRpcGxlIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB2YWx1ZSBBIHZhbGlkIGF0dHJpYnV0ZSB2YWx1ZSBvciBudWxsIHRvIHJlbW92ZSBhdHRyaWJ1dGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dHIoXG5cdGVsOiBFbGVtZW50LFxuXHRuYW1lOiBzdHJpbmcsXG5cdHZhbHVlPzogc3RyaW5nIHwgbnVsbCxcbik6IHN0cmluZyB8IG51bGwge1xuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKSA/PyBudWxsOyAvLyBGYWxsYmFjayB0byBudWxsIG9ubHkgaWYgZWwgaXMgdW5kZWZpbmVkXG5cdGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHRlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuXHRyZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiB1c2VJZFxuICogQHJldHVybiBBIGdlbmVyYXRlZCB1bmlxdWUgSURcbiAqL1xubGV0IGlkID0gMDtcbmNvbnN0IFVVSUQgPSBgJHtEYXRlLm5vdygpLnRvU3RyaW5nKDM2KX0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDUpfWA7XG5leHBvcnQgZnVuY3Rpb24gdXNlSWQoZWw6IEVsZW1lbnQpIHtcblx0aWYgKCFlbC5pZCkgZWwuaWQgPSBgJHtVVUlEfSR7KytpZH1gO1xuXHRyZXR1cm4gZWwuaWQ7XG59XG5cbi8vIEludGVybmFsIGhlbHBlciBmb3Igb24gLyBvZmZcbmNvbnN0IGV2ZW50cyA9IChcblx0YWN0aW9uOiBcImFkZFwiIHwgXCJyZW1vdmVcIixcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Wy4uLnJlc3RdOiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPiwgLy8gU3ByZWF0IHRvIG1ha2UgYSBjb3B5IG9mIHRoZSBhcnJheVxuKTogdm9pZCA9PiB7XG5cdGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuXHRcdHJlc3RbMF0gPSB0eXBlO1xuXHRcdGVsZW1lbnRbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXSguLi5yZXN0KTtcblx0fVxufTtcblxuLyoqXG4gKiBvblxuICogQHBhcmFtIGVsZW1lbnQgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gdHlwZXMgQSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGV2ZW50IHR5cGVzXG4gKiBAcGFyYW0gbGlzdGVuZXIgQW4gZXZlbnQgbGlzdGVuZXIgZnVuY3Rpb24gb3IgbGlzdGVuZXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBvbiA9IChcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Li4ucmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj5cbik6IHZvaWQgPT4ge1xuXHRpZiAoVU5CSU5EICYmIChlbGVtZW50ID09PSB3aW5kb3cgfHwgZWxlbWVudCA9PT0gZG9jdW1lbnQpKVxuXHRcdFVOQklORC5wdXNoKCgpID0+IG9mZihlbGVtZW50LCAuLi5yZXN0KSk7XG5cdGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbn07XG5cbi8qKlxuICogb2ZmXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9mZiA9IChcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Li4ucmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj5cbik6IHZvaWQgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBXaW5kb3cge1xuXHRcdF9tdGRzVW5iaW5kRXZlbnRzPzogTWFwPHN0cmluZywgQXJyYXk8KCkgPT4gdm9pZD4+O1xuXHR9XG59XG5cbi8qKlxuICogb25Mb2FkZWRcbiAqIEBkZXNjcmlwdGlvbiBSdW5zIGEgY2FsbGJhY2sgd2hlbiB3aW5kb3cgaXMgbG9hZGVkIGluIGJyb3dzZXIsIGFuZCBlbnN1cmVzIGV2ZW50cyBhcmUgdW5ib3VuZCBpZiBob3QgcmVsb2FkaW5nXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIHJ1biB3aGVuIHRoZSBwYWdlIGlzIHJlYWR5XG4gKi9cbmxldCBVTkJJTkQ6IEFycmF5PCgpID0+IHZvaWQ+IHwgbnVsbCA9IG51bGw7XG5leHBvcnQgY29uc3Qgb25Mb2FkZWQgPSAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHtcblx0aWYgKCFJU19CUk9XU0VSKSByZXR1cm47XG5cdGlmICghd2luZG93Ll9tdGRzVW5iaW5kRXZlbnRzKSB3aW5kb3cuX210ZHNVbmJpbmRFdmVudHMgPSBuZXcgTWFwKCk7XG5cblx0Y29uc3QgcnVuID0gKCkgPT5cblx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0Y29uc3Qga2V5ID0gU3RyaW5nKGNhbGxiYWNrKS5yZXBsYWNlKC8oXFxufFxccykvZywgXCJcIik7XG5cdFx0XHR3aW5kb3cuX210ZHNVbmJpbmRFdmVudHM/LmdldChrZXkpPy5mb3JFYWNoKCh1bmJpbmQpID0+IHtcblx0XHRcdFx0dW5iaW5kKCk7IC8vIFVuYmluZCBwcmV2aW91cyBldmVudHNcblx0XHRcdH0pO1xuXHRcdFx0VU5CSU5EID0gW107IC8vIFByZXBhcmUgdG8gbGlzdGVuIGZvciBuZXdseSBib3VuZCBldmVudHNcblx0XHRcdGNhbGxiYWNrKCk7IC8vIFJ1biBiaW5kaW5nXG5cdFx0XHR3aW5kb3cuX210ZHNVbmJpbmRFdmVudHM/LnNldChrZXksIFVOQklORD8uc2xpY2UoMCkpOyAvLyBTdG9yZSBmb3IgbGF0ZXIgdW5iaW5kaW5nXG5cdFx0XHRVTkJJTkQgPSBudWxsOyAvLyBTdG9wIGxpc3RlbmluZyBmb3IgbmV3bHkgYm91bmQgZXZlbnRzXG5cdFx0fSk7XG5cblx0aWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikgcnVuKCk7XG5cdGVsc2Ugb24od2luZG93LCBcImxvYWRcIiwgcnVuKTtcbn07XG5cbmNvbnN0IEFOQ0hPUkVEID0gbmV3IFdlYWtNYXA8RWxlbWVudCwgUmV0dXJuVHlwZTx0eXBlb2YgYXV0b1VwZGF0ZT4+KCk7XG5leHBvcnQgZnVuY3Rpb24gYW5jaG9yUG9zaXRpb24oXG5cdHRhcmdldDogSFRNTEVsZW1lbnQsXG5cdGFuY2hvcjogZmFsc2UgfCBFbGVtZW50LFxuXHRvcHRpb25zPzogUGFyYW1ldGVyczx0eXBlb2YgY29tcHV0ZVBvc2l0aW9uPlsyXSxcbikge1xuXHRBTkNIT1JFRC5nZXQodGFyZ2V0KT8uKCk7IC8vIFVuYmluZCBwcmV2aW91cyBhbmNob3IgcG9zaXRpb25cblx0QU5DSE9SRUQuZGVsZXRlKHRhcmdldCk7XG5cblx0aWYgKGFuY2hvcilcblx0XHRBTkNIT1JFRC5zZXQoXG5cdFx0XHR0YXJnZXQsXG5cdFx0XHRhdXRvVXBkYXRlKGFuY2hvciwgdGFyZ2V0LCAoKSA9PiB7XG5cdFx0XHRcdGlmICghdGFyZ2V0LmlzQ29ubmVjdGVkIHx8ICFhbmNob3IuaXNDb25uZWN0ZWQgfHwgdGFyZ2V0LmhpZGRlbilcblx0XHRcdFx0XHRyZXR1cm4gYW5jaG9yUG9zaXRpb24odGFyZ2V0LCBmYWxzZSk7XG5cdFx0XHRcdGNvbXB1dGVQb3NpdGlvbihhbmNob3IsIHRhcmdldCwgb3B0aW9ucykudGhlbigoeyB4LCB5IH0pID0+IHtcblx0XHRcdFx0XHR0YXJnZXQuc3R5bGUubGVmdCA9IGAke3h9cHhgO1xuXHRcdFx0XHRcdHRhcmdldC5zdHlsZS50b3AgPSBgJHt5fXB4YDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KSxcblx0XHQpO1xufVxuXG4vKipcbiAqIFNwZWVkIHVwIE11dGF0aW9uT2JzZXJ2ZXIgYnkgZGVib3VuY2luZyBhbmQgb25seSBydW5uaW5nIHdoZW4gcGFnZSBpcyB2aXNpYmxlXG4gKiBAcmV0dXJuIG5ldyBNdXRhaW9uT2JzZXJ2ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2s6IE11dGF0aW9uQ2FsbGJhY2spIHtcblx0bGV0IHF1ZXVlID0gMDtcblxuXHRjb25zdCBvbkZyYW1lID0gKCkgPT4gc2V0VGltZW91dChvblRpbWVyLCAyMDApOyAvLyBVc2UgYm90aCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgYW5kIHNldFRpbWVvdXQgdG8gZGVib3VuY2UgYW5kIG9ubHkgcnVuIHdoZW4gdmlzaWJsZVxuXHRjb25zdCBvblRpbWVyID0gKCkgPT4ge1xuXHRcdGNhbGxiYWNrKFtdLCBvYnNlcnZlcik7XG5cdFx0b2JzZXJ2ZXIudGFrZVJlY29yZHMoKTsgLy8gQ2xlYXIgcmVjb3JkcyB0byBhdm9pZCBydW5uaW5nIGNhbGxiYWNrIG11bHRpcGxlIHRpbWVzXG5cdFx0cXVldWUgPSAwO1xuXHR9O1xuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcblx0XHRpZiAoIXF1ZXVlKSBxdWV1ZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShvbkZyYW1lKTtcblx0fSk7XG5cblx0cmV0dXJuIG9ic2VydmVyO1xufVxuXG4vKipcbiAqIG9uTXV0YXRpb25cbiAqIEBkZXNjcmlwdGlvbiBVdGlsaXR5IHRvIHF1aWNrbHkgb2JzZXJ2ZSBtdXRhdGlvbnMgb24gYSBzcGVjaWZpYyBjbGFzcyBuYW1lXG4gKiBAcGFyYW0gZWwgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gY2xhc3NOYW1lIFRoZSBjbGFzcyBuYW1lIHRvIG9ic2VydmVcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcnVuIHdoZW4gbXV0YXRpb25zIGFyZSBkZXRlY3RlZFxuICovXG5jb25zdCBNVVRBVE9SUyA9IG5ldyBXZWFrTWFwPEVsZW1lbnQsIEFycmF5PCgpID0+IHZvaWQ+PigpO1xuZXhwb3J0IGNvbnN0IG9uTXV0YXRpb24gPSA8VCBleHRlbmRzIEVsZW1lbnQ+KFxuXHRlbDogRWxlbWVudCxcblx0Y2xhc3NOYW1lOiBzdHJpbmcsXG5cdGNhbGxiYWNrOiAoZWxlbXM6IEhUTUxDb2xsZWN0aW9uT2Y8VD4pID0+IHZvaWQsXG4pID0+IHtcblx0Y29uc3QgZWxlbXMgPSBlbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSk7XG5cdGNvbnN0IG11dGF0b3IgPSBNVVRBVE9SUy5nZXQoZWwpIHx8IFtdO1xuXG5cdGlmICghbXV0YXRvci5sZW5ndGgpIHtcblx0XHRNVVRBVE9SUy5zZXQoZWwsIG11dGF0b3IpO1xuXHRcdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoKF8sIG9ic2VydmVyKSA9PiB7XG5cdFx0XHRpZiAoZWwuaXNDb25uZWN0ZWQgJiYgbXV0YXRvcj8ubGVuZ3RoKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgY2FsbGJhY2sgb2YgbXV0YXRvcikgY2FsbGJhY2soKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdE1VVEFUT1JTLmRlbGV0ZShlbCk7XG5cdFx0XHR9XG5cdFx0fSkub2JzZXJ2ZShlbCwge1xuXHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbXCJjbGFzc1wiLCBcImhpZGRlblwiXSxcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdH0pO1xuXHR9XG5cdG11dGF0b3IucHVzaCgoKSA9PiBjYWxsYmFjayhlbGVtcyBhcyBIVE1MQ29sbGVjdGlvbk9mPFQ+KSk7XG59O1xuXG4vKipcbiAqIGlzSW5wdXRMaWtlXG4gKiBAZGVzY3JpcHRpb24gQ2hlY2sgaWYgZWxlbWVudCBpcyBhbiBpbnB1dCBsaWtlIGVsZW1lbnRcbiAqIEBwYXJhbSBlbCBUaGUgZWxlbWVudCB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyBhbiBpbnB1dCBsaWtlIGVsZW1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IGlzSW5wdXRMaWtlID0gKGVsOiB1bmtub3duKTogZWwgaXMgSFRNTElucHV0RWxlbWVudCA9PlxuXHRlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG5cdFwidmFsaWRpdHlcIiBpbiBlbCAmJlxuXHQhKGVsIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpO1xuXG4vKipcbiAqIHRvQ3VzdG9tRWxlbWVudFByb3BzXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IGNvbnZlcnQgcHJvcHMgdG8gY3VzdG9tIGVsZW1lbnQgYXR0cmlidXRlc1xuICogQHBhcmFtIHByb3BzIFRoZSBwcm9wcyB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIHByb3BzXG4gKi9cbmNvbnN0IFNFTEVDVEVEID0gXCJhcmlhLXNlbGVjdGVkXCI7XG5leHBvcnQgY29uc3QgdG9DdXN0b21FbGVtZW50UHJvcHMgPSAoXG5cdHsgY2xhc3NOYW1lLCBoaWRkZW4sIG9wZW4sIC4uLnJlc3QgfTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdGtsYXNzPzogc3RyaW5nLFxuKSA9PiB7XG5cdHJlc3Quc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nID0gdHJ1ZTsgLy8gTWFrZSBOZXh0LmpzIGhhcHB5XG5cdGlmIChyZXN0W1NFTEVDVEVEXSAhPT0gdW5kZWZpbmVkKVxuXHRcdHJlc3RbU0VMRUNURURdID0gYCR7KHJlc3RbU0VMRUNURURdIHx8IFwiZmFsc2VcIikgIT09IFwiZmFsc2VcIn1gOyAvLyBFbnN1cmUgYXJpYS1zZWxlY3RlZCBib29sZWFuIGlzIHN0cmluZ1xuXHRpZiAoY2xhc3NOYW1lIHx8IGtsYXNzKSByZXN0LmNsYXNzID0gYCR7a2xhc3N9ICR7Y2xhc3NOYW1lfWAudHJpbSgpOyAvLyBVc2UgY2xhc3MgaW5zdGVhZCBvZiBjbGFzc05hbWVcblx0aWYgKGhpZGRlbikgcmVzdC5oaWRkZW4gPSB0cnVlOyAvLyBFbnN1cmUgYm9vbGVhbiBwcm9wIGJlaGF2aW91clxuXHRpZiAob3BlbikgcmVzdC5vcGVuID0gdHJ1ZTsgLy8gRW5zdXJlIGJvb2xlYW4gcHJvcCBiZWhhdmlvdXJcblx0cmV0dXJuIHJlc3Q7XG59O1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIElTX0JST1dTRVIsIG9uLCBvbkxvYWRlZCwgUVVJQ0tfRVZFTlQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0JSRUFEQ1JVTUJTID0gYC4ke3N0eWxlcy5icmVhZGNydW1icy5zcGxpdChcIiBcIilbMF19YDtcbmNvbnN0IENTU19DSElQID0gYC4ke3N0eWxlcy5jaGlwLnNwbGl0KFwiIFwiKVswXX1gO1xuY29uc3QgQ1NTX0hFTFBURVhUID0gYC4ke3N0eWxlcy5oZWxwdGV4dC5zcGxpdChcIiBcIilbMF19YDtcbmNvbnN0IENTU19QQUdJTkFUSU9OID0gYC4ke3N0eWxlcy5wYWdpbmF0aW9uLnNwbGl0KFwiIFwiKVswXX1gO1xuY29uc3QgQ0xJQ0tTID0gYHN1bW1hcnksdS1zdW1tYXJ5LGEsYnV0dG9uLFtyb2xlPVwidGFiXCJdLFtyb2xlPVwiYnV0dG9uXCJdYDtcbmNvbnN0IEVWRU5UUyA9IFwiY2xpY2ssdG9nZ2xlLHN1Ym1pdCxjaGFuZ2VcIjtcbmNvbnN0IE1BVE9NTyA9IFwibWF0dGlsc3luZXQubWF0b21vLmNsb3VkXCI7XG5cbnR5cGUgTWF0b21vID0gKFxuXHR8IHN0cmluZ1xuXHR8IG51bWJlclxuXHR8IGJvb2xlYW5cblx0fCAoKHRoaXM6IFJlY29yZDxzdHJpbmcsIDxUPigpID0+IFQ+KSA9PiB2b2lkKVxuKVtdO1xuZGVjbGFyZSBnbG9iYWwge1xuXHRpbnRlcmZhY2UgV2luZG93IHtcblx0XHRfcGFxPzogTWF0b21vW107XG5cdFx0X210bT86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj5bXTtcblx0XHRfbXRkc1RyYWNraW5nPzogQW5hbHl0aWNzQWN0aW9uc1tcImluaXRcIl07XG5cdFx0X210ZHNVbnRyYWNrPzogKCkgPT4gdm9pZDtcblx0fVxufVxuXG5leHBvcnQgdHlwZSBBbmFseXRpY3NBY3Rpb25zID0ge1xuXHRpbml0OiB7XG5cdFx0ZW5hYmxlZD86IGJvb2xlYW4gfCBcImRlYnVnXCI7XG5cdH0gJiAoXG5cdFx0fCB7XG5cdFx0XHRcdG1hdG9tb0lkOiBudW1iZXIgfCBzdHJpbmc7XG5cdFx0XHRcdG1hdG9tb1RhZ01hbmFnZXJJZD86IG5ldmVyO1xuXHRcdCAgfVxuXHRcdHwge1xuXHRcdFx0XHRtYXRvbW9JZD86IG5ldmVyO1xuXHRcdFx0XHRtYXRvbW9UYWdNYW5hZ2VySWQ6IHN0cmluZztcblx0XHQgIH1cblx0KTtcblx0cGFnZXZpZXc6IHtcblx0XHR1cmw/OiBzdHJpbmc7XG5cdFx0dGl0bGU/OiBzdHJpbmc7XG5cdH07XG5cdGV2ZW50OiB7XG5cdFx0Y2F0ZWdvcnk6IHN0cmluZztcblx0XHRhY3Rpb246IHN0cmluZztcblx0XHRuYW1lPzogc3RyaW5nO1xuXHRcdHZhbHVlPzogbnVtYmVyO1xuXHR9O1xuXHRzZWFyY2g6IHtcblx0XHRxdWVyeTogc3RyaW5nO1xuXHRcdGNhdGVnb3J5Pzogc3RyaW5nO1xuXHRcdHJlc3VsdHM/OiBudW1iZXI7XG5cdH07XG5cdG1hdG9tbzogTWF0b21vO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFuYWx5dGljczxBY3Rpb24gZXh0ZW5kcyBrZXlvZiBBbmFseXRpY3NBY3Rpb25zPihcblx0YWN0aW9uOiBBY3Rpb24sXG5cdGFyZ3MgPSB7fSBhcyBBbmFseXRpY3NBY3Rpb25zW0FjdGlvbl0sXG4pIHtcblx0aWYgKCFJU19CUk9XU0VSKSByZXR1cm47XG5cdGlmICghd2luZG93Ll9wYXEpIHtcblx0XHR3aW5kb3cuX3BhcSA9IFtdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wiSGVhdG1hcFNlc3Npb25SZWNvcmRpbmc6OmRpc2FibGVcIl0pOyAvLyBEaXNhYmxlIGhlYXRtYXBzIGJ5IGRlZmF1bHQgYXMgdGhpcyByZXF1aXJlIGNvb2tpZXNcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcImVuYWJsZUxpbmtUcmFja2luZ1wiXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRUcmFja2VyVXJsXCIsIGBodHRwczovLyR7TUFUT01PfS9tYXRvbW8ucGhwYF0pO1xuXHR9XG5cdGlmICghd2luZG93Ll9tdG0pIHtcblx0XHR3aW5kb3cuX210bSA9IHdpbmRvdy5fbXRtIHx8IFtdOyAvLyBQcmVwYXJlIE1hdG9tbyBUYWcgTWFuYWdlclxuXHRcdHdpbmRvdy5fbXRtLnB1c2goeyBcIm10bS5zdGFydFRpbWVcIjogRGF0ZS5ub3coKSwgZXZlbnQ6IFwibXRtLlN0YXJ0XCIgfSk7XG5cdH1cblxuXHRpZiAoYWN0aW9uID09PSBcImluaXRcIikge1xuXHRcdHdpbmRvdy5fbXRkc1RyYWNraW5nID0ge1xuXHRcdFx0ZW5hYmxlZDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICE9PSBcImxvY2FsaG9zdFwiLFxuXHRcdFx0Li4ud2luZG93Ll9tdGRzVHJhY2tpbmcsXG5cdFx0XHQuLi5hcmdzLFxuXHRcdH0gYXMgQW5hbHl0aWNzQWN0aW9uc1tcImluaXRcIl07XG5cdFx0Y29uc3QgeyBlbmFibGVkLCBtYXRvbW9JZCwgbWF0b21vVGFnTWFuYWdlcklkIH0gPSB3aW5kb3cuX210ZHNUcmFja2luZztcblxuXHRcdGlmIChtYXRvbW9JZCkgd2luZG93Ll9wYXEucHVzaChbXCJzZXRTaXRlSWRcIiwgbWF0b21vSWRdKTtcblx0XHRpZiAoZW5hYmxlZCkge1xuXHRcdFx0Y29uc3Qgc3JjID0gbWF0b21vVGFnTWFuYWdlcklkXG5cdFx0XHRcdD8gYGh0dHBzOi8vY2RuLm1hdG9tby5jbG91ZC8ke01BVE9NT30vY29udGFpbmVyXyR7bWF0b21vVGFnTWFuYWdlcklkfS5qc2Bcblx0XHRcdFx0OiBgaHR0cHM6Ly9jZG4ubWF0b21vLmNsb3VkLyR7TUFUT01PfS9tYXRvbW8uanNgO1xuXHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihgc2NyaXB0W3NyYz1cIiR7c3JjfVwiXWApIHx8XG5cdFx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kKFxuXHRcdFx0XHRcdE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSwge1xuXHRcdFx0XHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRcdFx0XHRzcmMsXG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHdpbmRvdy5fbXRkc1RyYWNraW5nPy5lbmFibGVkID09PSBmYWxzZSkgcmV0dXJuO1xuXHRpZiAod2luZG93Ll9tdGRzVHJhY2tpbmc/LmVuYWJsZWQgPT09IFwiZGVidWdcIilcblx0XHRyZXR1cm4gY29uc29sZS5pbmZvKGBhbmFseXRpY3MoXCIke2FjdGlvbn1cIiwgYCwgYXJncywgXCIpXCIpO1xuXG5cdGlmIChhY3Rpb24gPT09IFwicGFnZXZpZXdcIikge1xuXHRcdGNvbnN0IHsgdXJsLCB0aXRsZSB9ID0gYXJncyBhcyBBbmFseXRpY3NBY3Rpb25zW1wicGFnZXZpZXdcIl07XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRDdXN0b21VcmxcIiwgdXJsIHx8IGxvY2F0aW9uLmhyZWZdKTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldERvY3VtZW50VGl0bGVcIiwgdGl0bGUgfHwgZG9jdW1lbnQudGl0bGVdKTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInRyYWNrUGFnZVZpZXdcIl0pO1xuXHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJldmVudFwiKSB7XG5cdFx0Y29uc3QgeyBjYXRlZ29yeSwgYWN0aW9uLCBuYW1lLCB2YWx1ZSB9ID0gYXJncyBhcyBBbmFseXRpY3NBY3Rpb25zW1wiZXZlbnRcIl07XG5cdFx0Y29uc3QgZXZlbnQgPSBbXCJ0cmFja0V2ZW50XCIsIGNhdGVnb3J5LCBhY3Rpb24sIG5hbWUsIHZhbHVlXTtcblxuXHRcdC8vIFdlIGRvIG5vdCB3YW50IHRvIHRyYWNrIGV2ZW50cyB3aXRoIGhhc2ggaW4gVVJMIGFzIHRoaXMgY2F1c2VzIGhhcmQtdG8tcmVhZCBkYXRhLFxuXHRcdC8vIHNvIHRlbXBvcmFyaWx5IHJlbW92ZSB0aGUgaGFzaCBwYXJ0LCBhbmQgYWRkIGl0IGJhY2sgYWZ0ZXIgdGhlIGV2ZW50IGlzIHB1c2hlZFxuXHRcdGxldCB1cmwgPSBsb2NhdGlvbi5ocmVmO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1xuXHRcdFx0ZnVuY3Rpb24gKCkge1xuXHRcdFx0XHR1cmwgPSB0aGlzLmdldEN1cnJlbnRVcmw8c3RyaW5nPigpO1xuXHRcdFx0fSxcblx0XHRdKTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldEN1c3RvbVVybFwiLCB1cmwuc3BsaXQoXCIjXCIpWzBdXSk7IC8vIFNraXAgaGFzaCBwYXJ0IG9mIFVSTFxuXHRcdHdpbmRvdy5fcGFxLnB1c2goZXZlbnQuZmlsdGVyKCh2KSA9PiB2ICE9PSB1bmRlZmluZWQpKTsgLy8gUHVzaCBldmVudFxuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0Q3VzdG9tVXJsXCIsIHVybF0pOyAvLyBSZXZlcnJ0IHRvIG9yaWdpbmFsIFVSTCB3aXRoIGhhc2hcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwic2VhcmNoXCIpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRxdWVyeSxcblx0XHRcdGNhdGVnb3J5ID0gZmFsc2UsXG5cdFx0XHRyZXN1bHRzID0gZmFsc2UsXG5cdFx0fSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcInNlYXJjaFwiXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInRyYWNrU2l0ZVNlYXJjaFwiLCBxdWVyeSwgY2F0ZWdvcnksIHJlc3VsdHNdKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwibWF0b21vXCIpIHtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcIm1hdG9tb1wiXSk7XG5cdH1cbn1cblxuY29uc3QgaGFuZGxlVHJhY2sgPSAoZXZlbnQ6IEV2ZW50KSA9PlxuXHR3aW5kb3cuX210ZHNUcmFja2luZz8uZW5hYmxlZCAmJiBzZXRUaW1lb3V0KHByb2Nlc3NUcmFjaywgMCwgZXZlbnQpOyAvLyBMZXQgb3RoZXIgZXZlbnRzIHByb2Nlc3MgZmlyc3RcblxuY29uc3QgcHJvY2Vzc1RyYWNrID0gKHsgdHlwZSwgdGFyZ2V0IH06IEV2ZW50KSA9PiB7XG5cdGNvbnN0IGVsID0gdHlwZSA9PT0gXCJjbGlja1wiID8gKHRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKENMSUNLUykgOiB0YXJnZXQ7XG5cdGlmICghKGVsIGluc3RhbmNlb2YgRWxlbWVudCkgfHwgYXR0cihlbCwgXCJkYXRhLWFuYWx5dGljc1wiKSA9PT0gXCJpZ25vcmVcIilcblx0XHRyZXR1cm47XG5cblx0bGV0IGFjdGlvbiA9IFwiY2xpY2tcIjtcblx0bGV0IGNhdGVnb3J5ID0gXCJCdXR0b25cIjtcblx0bGV0IG5hbWUgPSBsYWJlbChlbCkgfHwgaGVhZGluZyhlbCkgfHwgYXR0cihlbCwgXCJkYXRhLXRvb2x0aXBcIikgfHwgXCJcIjtcblxuXHRpZiAodHlwZSA9PT0gXCJzdWJtaXRcIikge1xuXHRcdGNhdGVnb3J5ID0gXCJGb3JtXCI7XG5cdFx0YWN0aW9uID0gXCJzdWJtaXRcIjtcblx0XHRuYW1lID0gbmFtZSB8fCBkb2N1bWVudC50aXRsZTtcblx0fSBlbHNlIGlmICh0eXBlID09PSBcInRvZ2dsZVwiKSB7XG5cdFx0aWYgKCFlbC5tYXRjaGVzKFwiZGlhbG9nOm1vZGFsXCIpKSByZXR1cm47IC8vIFNraXAgbm9uLW1vZGFsIGRpYWxvZ3Ncblx0XHRjYXRlZ29yeSA9IFwiRGlhbG9nXCI7XG5cdFx0YWN0aW9uID0gXCJvcGVuXCI7XG5cdH0gZWxzZSBpZiAodHlwZSA9PT0gXCJjaGFuZ2VcIikge1xuXHRcdGNvbnN0IHR5cGUgPSBhdHRyKGVsLCBcInR5cGVcIik7XG5cdFx0Y29uc3QgZ3JvdXAgPVxuXHRcdFx0dHlwZSA9PT0gXCJjaGVja2JveFwiIHx8IHR5cGUgPT09IFwicmFkaW9cIiA/IGVsLmNsb3Nlc3QoXCJmaWVsZHNldFwiKSA6IG51bGw7XG5cblx0XHRjYXRlZ29yeSA9IFwiRm9ybVwiO1xuXHRcdGFjdGlvbiA9IFwiY2hhbmdlXCI7XG5cdFx0bmFtZSA9XG5cdFx0XHRsYWJlbChncm91cCB8fCBlbCkgfHxcblx0XHRcdHRleHQoZ3JvdXA/LnF1ZXJ5U2VsZWN0b3IoXCJsZWdlbmRcIikpIHx8XG5cdFx0XHR0ZXh0KChlbCBhcyBIVE1MSW5wdXRFbGVtZW50KT8ubGFiZWxzPy5bMF0pO1xuXHR9IGVsc2UgaWYgKGF0dHIoZWwsIFwicm9sZVwiKSA9PT0gXCJ0YWJcIikge1xuXHRcdGNhdGVnb3J5ID0gXCJUYWJcIjtcblx0XHRhY3Rpb24gPSBcIm5hdmlnYXRlXCI7XG5cdH0gZWxzZSBpZiAoYXR0cihlbCwgXCJwb3BvdmVydGFyZ2V0XCIpKSB7XG5cdFx0aWYgKCFwb3BvdmVyKGVsKT8ubWF0Y2hlcyhcIjpwb3BvdmVyLW9wZW5cIikpIHJldHVybjsgLy8gU2tpcCBpZiBub3Qgb3BlblxuXHRcdGNhdGVnb3J5ID0gZWwuY2xvc2VzdChDU1NfSEVMUFRFWFQpID8gXCJIZWxwVGV4dFwiIDogXCJQb3BvdmVyXCI7XG5cdFx0YWN0aW9uID0gXCJvcGVuXCI7XG5cdH0gZWxzZSBpZiAoZWwubm9kZU5hbWUuZW5kc1dpdGgoXCJTVU1NQVJZXCIpKSB7XG5cdFx0aWYgKCEoZWwucGFyZW50RWxlbWVudCBhcyBIVE1MRGV0YWlsc0VsZW1lbnQpLm9wZW4pIHJldHVybjsgLy8gU2tpcCBpZiBub3Qgb3BlblxuXHRcdGNhdGVnb3J5ID0gXCJEZXRhaWxzXCI7XG5cdFx0YWN0aW9uID0gXCJvcGVuXCI7XG5cdH0gZWxzZSBpZiAoYXR0cihlbCwgXCJkYXRhLWNvbW1hbmRcIikgPT09IFwidG9nZ2xlLWFwcC1leHBhbmRlZFwiKSB7XG5cdFx0Y29uc3Qgb3BlbiA9IHN0eWxlKGVsLCBcIi0tbXRkcy10b29sdGlwLXBvc2l0aW9uXCIpID09PSBcIm5vbmVcIjtcblx0XHRjYXRlZ29yeSA9IFwiU2lkZWJhclwiO1xuXHRcdGFjdGlvbiA9IG9wZW4gPyBcImV4cGFuZFwiIDogXCJtaW5pbWl6ZVwiO1xuXHRcdG5hbWUgPSAob3BlbiAmJiBhdHRyKGVsLCBcImRhdGEtdG9vbHRpcFwiKSkgfHwgdGV4dChlbCk7XG5cdH0gZWxzZSBpZiAoZWwuY2xvc2VzdChDU1NfQlJFQURDUlVNQlMpKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkJyZWFkY3J1bWJzXCI7XG5cdFx0YWN0aW9uID0gXCJuYXZpZ2F0ZVwiO1xuXHR9IGVsc2UgaWYgKGVsLmNsb3Nlc3QoQ1NTX1BBR0lOQVRJT04pKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIlBhZ2ludGF0aW9uXCI7XG5cdFx0YWN0aW9uID0gXCJuYXZpZ2F0ZVwiO1xuXHR9IGVsc2UgaWYgKGVsLmNsb3Nlc3QoQ1NTX0NISVApKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkNoaXBcIjtcblx0XHRhY3Rpb24gPSBlbC5oYXNBdHRyaWJ1dGUoXCJkYXRhLXJlbW92YWJsZVwiKSA/IFwicmVtb3ZlXCIgOiBcImNsaWNrXCI7XG5cdH0gZWxzZSBpZiAoZWwuY2xvc2VzdChcInRoW2FyaWEtc29ydF1cIikpIHtcblx0XHRjYXRlZ29yeSA9IFwiVGFibGVcIjtcblx0XHRhY3Rpb24gPSBcInNvcnRcIjtcblx0fSBlbHNlIGlmIChlbCBpbnN0YW5jZW9mIEhUTUxBbmNob3JFbGVtZW50KSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkxpbmtcIjtcblx0XHRhY3Rpb24gPSBlbC5wcm90b2NvbCA9PT0gXCJtYWlsdG86XCIgPyBcImVtYWlsXCIgOiBcIm5hdmlnYXRlXCI7XG5cdFx0aWYgKGVsLmhhc0F0dHJpYnV0ZShcImRvd25sb2FkXCIpKSBhY3Rpb24gPSBcImRvd25sb2FkXCI7XG5cdFx0ZWxzZSBpZiAoZWwuaGFzaCAmJiBlbC5ocmVmLnN0YXJ0c1dpdGgobG9jYXRpb24uaHJlZi5zcGxpdChcIiNcIilbMF0pKVxuXHRcdFx0YWN0aW9uID0gXCJhbmNob3JcIjsgLy8gT25seSB0cmFjayBhcyBhbmNob3IgaWYgc2FtZSBwYWdlXG5cdH0gZWxzZSBpZiAoZWwuaGFzQXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiKSkge1xuXHRcdGlmIChhdHRyKGVsLCBcImFyaWEtZXhwYW5kZWRcIikgIT09IFwidHJ1ZVwiKSByZXR1cm47IC8vIFNraXAgaWYgbm90IG9wZW5cblx0XHRjYXRlZ29yeSA9IFwiRXhwYW5kXCI7XG5cdFx0YWN0aW9uID0gXCJvcGVuXCI7XG5cdH1cblxuXHQvLyBSZXNwZWN0IGF0dHJpYnV0ZXMgYW5kIHNlbmRcblx0YW5hbHl0aWNzKFwiZXZlbnRcIiwge1xuXHRcdGNhdGVnb3J5OiBhdHRyKGVsLCBcImRhdGEtYW5hbHl0aWNzLWNhdGVnb3J5XCIpID8/IGNhdGVnb3J5LFxuXHRcdGFjdGlvbjogYXR0cihlbCwgXCJkYXRhLWFuYWx5dGljcy1hY3Rpb25cIikgPz8gYWN0aW9uLFxuXHRcdG5hbWU6IGF0dHIoZWwsIFwiZGF0YS1hbmFseXRpY3MtbmFtZVwiKSA/PyBuYW1lLFxuXHR9KTtcbn07XG5cbi8vIFV0aWxpdGllc1xuY29uc3QgdGV4dCA9IChlbD86IEVsZW1lbnQgfCBudWxsKSA9PiBlbD8udGV4dENvbnRlbnQ/LnRyaW0oKSB8fCBcIlwiO1xuY29uc3QgbGFiZWwgPSAoZWw/OiBFbGVtZW50IHwgbnVsbCkgPT4gKGVsICYmIGF0dHIoZWwsIFwiYXJpYS1sYWJlbFwiKSkgfHwgXCJcIjtcbmNvbnN0IHBvcG92ZXIgPSAoZWw6IEVsZW1lbnQpID0+XG5cdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGF0dHIoZWwsIFwicG9wb3ZlcnRhcmdldFwiKSB8fCBcIlwiKTtcbmNvbnN0IHN0eWxlID0gKGVsOiBFbGVtZW50LCBrZXk6IHN0cmluZykgPT5cblx0d2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLmdldFByb3BlcnR5VmFsdWUoa2V5KT8udHJpbSgpO1xuY29uc3QgaGVhZGluZyA9IChlbDogRWxlbWVudCkgPT4ge1xuXHRjb25zdCBib2R5ID0gdGV4dChlbCk7XG5cdGNvbnN0IGhlYWQgPSB0ZXh0KGVsLnF1ZXJ5U2VsZWN0b3IoXCJoMSxoMixoMyxoNCxoNSxoNlwiKSk7IC8vIE5vdGU6IGhlYWQgbWlnaHQgYmUgZW1wdHkgc3RyaW5nICcnXG5cdHJldHVybiAoYm9keS5zdGFydHNXaXRoKGhlYWQpICYmIGhlYWQpIHx8IGJvZHkuc2xpY2UoMCwgMTAwKS50cmltKCk7IC8vIExpbWl0IHRvIDEwMCBjaGFyYWN0ZXJzXG59O1xuXG5vbkxvYWRlZCgoKSA9PiBvbihkb2N1bWVudCwgRVZFTlRTLCBoYW5kbGVUcmFjaywgUVVJQ0tfRVZFTlQpKTtcbiIsImlmIChcblx0dHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHR3aW5kb3cuQ1NTU3R5bGVTaGVldCAmJlxuXHRkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHNcbilcblx0KCgpID0+IHtcblx0XHRjb25zdCBrZXkgPSBcIi0tbXRkcy1hcHAtZXhwYW5kZWRcIjtcblx0XHRjb25zdCBzaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cdFx0Y29uc3QgcHJldiA9ICgpID0+ICF3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KT8uaW5jbHVkZXMoXCJmYWxzZVwiKTtcblxuXHRcdGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5wdXNoKHNoZWV0KTtcblx0XHR3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkID0gKGZvcmNlKSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBuZXh0ID0gZm9yY2UgPz8gIXByZXYoKTtcblx0XHRcdFx0c2hlZXQucmVwbGFjZVN5bmM/LihgOnJvb3QgeyAke2tleX06IHZhcigke2tleX0tLSR7bmV4dH0pfWApO1xuXHRcdFx0XHR3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBuZXh0KTtcblx0XHRcdH0gY2F0Y2ggKF9lcnIpIHt9IC8vIGxvY2FsU3RvcmFnZSBpcyBmdWxsIG9yIHJlcGxhY2VTeW5jIGlzIG5vdCBzdXBwb3J0ZWRcblx0XHR9O1xuXG5cdFx0Ly8gU2V0IGFuZCBzdG9yZSBpbml0aWFsIHN0YXRlXG5cdFx0d2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZChwcmV2KCkpO1xuXHR9KSgpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGRlYm91bmNlLCBvbiwgb25Mb2FkZWQsIG9uTXV0YXRpb24sIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgXCIuL2FwcC10b2dnbGVcIjtcblxuY29uc3QgQ1NTX0FQUCA9IHN0eWxlcy5hcHAuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1NUSUNLWSA9IHN0eWxlcy5zdGlja3kuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1RPR0dMRSA9ICdbZGF0YS1jb21tYW5kPVwidG9nZ2xlLWFwcC1leHBhbmRlZFwiXSc7XG5jb25zdCBDU1NfU0lERUJBUiA9IGAuJHtDU1NfQVBQfSA+IGRpYWxvZywuJHtDU1NfQVBQfSBkaWFsb2cgfiBtYWluYDtcblxuY29uc3QgdXNlVHJhbnNpdGlvbiA9IChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4ge1xuXHRpZiAoIWRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24pIGNhbGxiYWNrKCk7XG5cdGVsc2UgZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbihjYWxsYmFjayk7XG59O1xuXG5leHBvcnQgY29uc3QgdG9nZ2xlQXBwRXhwYW5kZWQgPSAoZm9yY2U/OiBib29sZWFuKSA9PlxuXHQvLyBAdHMtZXhwZWN0LWVycm9yIHdpbmRvdy5tdGRzQXBwVG9nZ2xlIGNvbWVzIGZyb20gYXBwLXRvZ2dsZS5qc1xuXHR1c2VUcmFuc2l0aW9uKCgpID0+IHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQ/Lihmb3JjZSkpO1xuXG5mdW5jdGlvbiBoYW5kbGVBcHBUb2dnbGVDbGljayh7IHRhcmdldDogZWwsIGRlZmF1bHRQcmV2ZW50ZWQ6IHN0b3AgfTogRXZlbnQpIHtcblx0Y29uc3QgbGluayA9IChlbCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKFwiYVwiKTtcblx0aWYgKGxpbms/LmNsb3Nlc3QoXCJkaWFsb2dcIikgJiYgbGluaz8uY2xvc2VzdChDU1NfU0lERUJBUikpXG5cdFx0cmV0dXJuIGNsb3NlU2lkZWJhcigpOyAvLyBDbG9zZSBzaWRlYmFyIGlmIGxpbmsgaXMgY2xpY2tlZCBpbnNpZGUgc2lkZWJhclxuXG5cdGlmIChzdG9wIHx8ICEoZWwgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCkgfHwgIWVsLm1hdGNoZXMoQ1NTX1RPR0dMRSkpXG5cdFx0cmV0dXJuO1xuXHRjb25zdCBpc0Rlc2t0b3AgPSBnZXRDb21wdXRlZFN0eWxlKGVsKS5wb3NpdGlvbiA9PT0gXCJzdGlja3lcIjtcblxuXHRpZiAoaXNEZXNrdG9wKSB0b2dnbGVBcHBFeHBhbmRlZCgpO1xuXHRlbHNlXG5cdFx0dXNlVHJhbnNpdGlvbigoKSA9PiB7XG5cdFx0XHRjb25zdCBzaWRlYmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGlhbG9nRWxlbWVudD4oQ1NTX1NJREVCQVIpO1xuXHRcdFx0c2lkZWJhcj8uc2V0QXR0cmlidXRlKFwiZGF0YS1jbG9zZWRieVwiLCBcImFueVwiKTsgLy8gQWxsb3cgY2xvc2luZyBieSBjbGlja2luZyBvdXRzaWRlXG5cdFx0XHRzaWRlYmFyPy5zaG93TW9kYWwoKTtcblx0XHR9KTtcbn1cblxuZnVuY3Rpb24gY2xvc2VTaWRlYmFyKCkge1xuXHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaWFsb2dFbGVtZW50PihDU1NfU0lERUJBUik/LmNsb3NlKCk7XG59XG5cbi8vIFNjcm9sbCBzdGF0ZVxubGV0IE1JTl9ZID0gMDsgLy8gT2Zmc2V0IHRvIGF2b2lkIHNjcm9sbCBqdW1wIHdoZW4gc3RpY2t5IGlzIHNldCB0byByZWxhdGl2ZVxubGV0IFNDUk9MTF9VUDogYm9vbGVhbjtcbmxldCBTVElDSyA9IDA7IC8vIC0xID0gc3RpY2sgdG9wLCAwID0gcmVsYXRpdmUsIDEgPSBzdGljayBib3R0b21cbmxldCBTVElDS19FTDogSFRNTEVsZW1lbnQ7XG5sZXQgU1RJQ0tfSCA9IDA7XG5sZXQgU1RJQ0tfWSA9IDA7XG5sZXQgU1RVQ0sgPSBmYWxzZTsgLy8gVXNlZCB0byBmaWd1cmUgaWYgbmF2IGlzIGxhcmdlciB0aGFuIHZpZXdwb3J0XG5sZXQgV0lOX0ggPSAwO1xubGV0IFdJTl9ZID0gMDtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oW3N0aWNreV06IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdFNUSUNLX0VMID0gc3RpY2t5O1xuXHRoYW5kbGVBcHBTY3JvbGwoKTsgLy8gUnVuIG9uIGNvbm5lY3Rcbn1cblxuZnVuY3Rpb24gaGFuZGxlQXBwU2Nyb2xsKCkge1xuXHRpZiAoIVNUSUNLX0VMPy5pc0Nvbm5lY3RlZCkgcmV0dXJuO1xuXHRjb25zdCBORVhUX1kgPSB3aW5kb3cuc2Nyb2xsWTtcblx0Y29uc3QgTkVYVF9VUCA9IE5FWFRfWSA8IFdJTl9ZO1xuXHRXSU5fWSA9IE5FWFRfWTtcblxuXHQvLyBPbmx5IGNhbGN1bGF0ZSBpZiBzY3JvbGwgZGlyZWN0aW9uIGhhcyBjaGFuZ2VkXG5cdGlmIChORVhUX1VQICE9PSBTQ1JPTExfVVApIHtcblx0XHRNSU5fWSA9IChTVElDS19FTC5wYXJlbnRFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgfHwgMCkgKyBXSU5fWTtcblx0XHRTQ1JPTExfVVAgPSBORVhUX1VQO1xuXHRcdFNUSUNLX0ggPSBTVElDS19FTC5vZmZzZXRIZWlnaHQ7XG5cdFx0U1RJQ0tfWSA9IFNUSUNLX0VMLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIFdJTl9ZO1xuXHRcdFNUVUNLID0gU1RJQ0tfRUwub2Zmc2V0SGVpZ2h0IDw9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0XHRXSU5fSCA9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0fVxuXG5cdGlmIChTVElDSyA9PT0gLTEgJiYgU1RVQ0spIHJldHVybjsgLy8gQWxsd2F5cyBzdGlja3kgd2hlbiBzaWRlYmFyIGlzIHNtYWxsZXIgdGhhbiB2aWV3cG9ydFxuXHRpZiAoU1RJQ0sgIT09IC0xICYmIChTVFVDSyB8fCAoU0NST0xMX1VQICYmIFdJTl9ZIDw9IFNUSUNLX1kpKSkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJzdGlja3lcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBcIjBweFwiKTtcblx0XHRTVElDSyA9IC0xOyAvLyBOb3Qgc3RpY2tpbmcgdG8gdG9wIGFuZCBzaWRlYmFyIGlzIHNtYWxsZXIgdGhhbiB2aWV3cG9ydCBvciBzY3JvbGxpbmcgdXBcblx0fSBlbHNlIGlmIChTVElDSyA9PT0gLTEgJiYgIVNDUk9MTF9VUCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJyZWxhdGl2ZVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke01hdGgubWF4KDAsIFdJTl9ZIC0gTUlOX1kpfXB4YCk7XG5cdFx0U1RJQ0sgPSAwOyAvLyBTdGlja2luZyB0byB0b3AgYW5kIHNjcm9sbGluZyBkb3duXG5cdH0gZWxzZSBpZiAoU1RJQ0sgIT09IDEgJiYgIVNDUk9MTF9VUCAmJiBXSU5fWSArIFdJTl9IID49IFNUSUNLX1kgKyBTVElDS19IKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInN0aWNreVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke1dJTl9IIC0gU1RJQ0tfSH1weGApO1xuXHRcdFNUSUNLID0gMTsgLy8gTm90IHN0aWNraW5nIHRvIGJvdHRvbSBhbmQgc2Nyb2xsaW5nIGRvd25cblx0fSBlbHNlIGlmIChTVElDSyA9PT0gMSAmJiBTQ1JPTExfVVApIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwicmVsYXRpdmVcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBgJHtTVElDS19ZIC0gTUlOX1l9cHhgKTtcblx0XHRTVElDSyA9IDA7IC8vIFN0aWNraW5nIHRvIGJvdHRvbSBhbmQgc2Nyb2xsaW5nIHVwXG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX1NUSUNLWSwgaGFuZGxlTXV0YXRpb24pO1xuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVBcHBUb2dnbGVDbGljaywgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwicmVzaXplXCIsIGRlYm91bmNlKGNsb3NlU2lkZWJhciwgMTAwKSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwic2Nyb2xsXCIsIGhhbmRsZUFwcFNjcm9sbCwgUVVJQ0tfRVZFTlQpO1xufSk7XG4iLCJjb25zdCBnZXRTdGVwcyA9IChcblx0bm93OiBudW1iZXIsXG5cdG1heDogbnVtYmVyLFxuXHRzaG93ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuKSA9PiB7XG5cdGNvbnN0IG9mZnNldCA9IChzaG93IC0gMSkgLyAyO1xuXHRjb25zdCBzdGFydCA9IE1hdGgubWF4KE1hdGgubWluKG5vdyAtIE1hdGguZmxvb3Iob2Zmc2V0KSwgbWF4IC0gc2hvdyArIDEpLCAxKTtcblx0Y29uc3QgZW5kID0gTWF0aC5taW4oTWF0aC5tYXgobm93ICsgTWF0aC5jZWlsKG9mZnNldCksIHNob3cpLCBtYXgpO1xuXHRjb25zdCBwYWdlcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGVuZCArIDEgLSBzdGFydCB9LCAoXywgaSkgPT4gaSArIHN0YXJ0KTtcblxuXHRpZiAoc2hvdyA+IDQgJiYgc3RhcnQgPiAxKSBwYWdlcy5zcGxpY2UoMCwgMiwgMSwgMCk7XG5cdGlmIChzaG93ID4gMyAmJiBlbmQgPCBtYXgpIHBhZ2VzLnNwbGljZSgtMiwgMiwgMCwgbWF4KTtcblx0cmV0dXJuIHBhZ2VzO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhZ2luYXRpb24gPSAoeyBjdXJyZW50ID0gMSwgdG90YWwgPSAxMCwgc2hvdyA9IDcgfSkgPT4gKHtcblx0cHJldjogY3VycmVudCA+IDEgPyBjdXJyZW50IC0gMSA6IDAsXG5cdG5leHQ6IGN1cnJlbnQgPCB0b3RhbCA/IGN1cnJlbnQgKyAxIDogMCxcblx0cGFnZXM6IGdldFN0ZXBzKGN1cnJlbnQsIHRvdGFsLCBzaG93KS5tYXAoKHBhZ2UsIGluZGV4KSA9PiAoe1xuXHRcdGN1cnJlbnQ6IHBhZ2UgPT09IGN1cnJlbnQgJiYgKFwicGFnZVwiIGFzIGNvbnN0KSxcblx0XHRrZXk6IGBrZXktJHtwYWdlfS0ke2luZGV4fWAsXG5cdFx0cGFnZSxcblx0fSkpLFxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0JSRUFEQ1JVTUJTID0gc3R5bGVzLmJyZWFkY3J1bWJzLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlQnJlYWRjcnVtYnNNdXRhdGlvbihicmVhZGNydW1iczogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0Zm9yIChjb25zdCBicmVhZGN1bWJzIG9mIGJyZWFkY3J1bWJzKVxuXHRcdGJyZWFkY3VtYnMucXVlcnlTZWxlY3RvckFsbChcImxpIGFcIikuZm9yRWFjaCgoY3J1bWIsIGluZGV4LCB7IGxlbmd0aCB9KSA9PiB7XG5cdFx0XHRhdHRyKGNydW1iLCBcImFyaWEtY3VycmVudFwiLCBpbmRleCA9PT0gbGVuZ3RoIC0gMSA/IFwicGFnZVwiIDogbnVsbCk7XG5cdFx0fSk7XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXHRcdENTU19CUkVBRENSVU1CUyxcblx0XHRoYW5kbGVCcmVhZGNydW1ic011dGF0aW9uLFxuXHQpLFxuKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRhdHRyLFxuXHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyLFxuXHRJU19CUk9XU0VSLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdFFVSUNLX0VWRU5ULFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0RJQUxPRyA9IHN0eWxlcy5kaWFsb2cuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgRElBTE9HUyA9IElTX0JST1dTRVJcblx0PyAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcblx0XHRcdENTU19ESUFMT0csXG5cdFx0KSBhcyBIVE1MQ29sbGVjdGlvbk9mPEhUTUxEaWFsb2dFbGVtZW50Pilcblx0OiBbXTtcblxuY29uc3QgaGFuZGxlTW9kYWwgPSAoKSA9PiB7XG5cdGZvciAoY29uc3QgZGlhbG9nIG9mIERJQUxPR1MpXG5cdFx0aWYgKGRpYWxvZy5pc0Nvbm5lY3RlZCAmJiBkaWFsb2cuc2hvd01vZGFsICYmIGRpYWxvZy5jbG9zZSkge1xuXHRcdFx0aWYgKGRpYWxvZy5tYXRjaGVzKCdbb3Blbl06bm90KFtkYXRhLW1vZGFsPVwiZmFsc2VcIl0pOm5vdCg6bW9kYWwpJykpIHtcblx0XHRcdFx0YXR0cihkaWFsb2csIFwib3BlblwiLCBudWxsKTsgLy8gVXNpbmcgYXR0cmlidXRlIGluc3RlYWQgb2YgLmNsb3NlIHRvIGF2b2lkIGBjbG9zZWAgZXZlbnRcblx0XHRcdFx0ZGlhbG9nLnNob3dNb2RhbCgpO1xuXHRcdFx0fSBlbHNlIGlmIChkaWFsb2cubWF0Y2hlcyhcIjptb2RhbDpub3QoW29wZW5dKVwiKSkge1xuXHRcdFx0XHRhdHRyKGRpYWxvZywgXCJvcGVuXCIsIFwiXCIpOyAvLyBTZXQgYXMgb3BlblxuXHRcdFx0XHRkaWFsb2cuY2xvc2UoKTsgLy8gU28gd2UgY29ycmVjbHR5IGNhbiBjYWxsIC5jbG9zZSwgcmVtb3ZpbmcgPGRpYWxvZz4gZnJvbSAjdG9wLWxheWVyXG5cdFx0XHR9XG5cdFx0fVxufTtcblxuY29uc3QgaGFuZGxlRGlhbG9nQ2xpY2sgPSAoe1xuXHRjbGllbnRYOiB4LFxuXHRjbGllbnRZOiB5LFxuXHR0YXJnZXQ6IGVsLFxufTogTW91c2VFdmVudCkgPT4ge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MRGlhbG9nRWxlbWVudCAmJiBhdHRyKGVsLCBcImRhdGEtY2xvc2VkYnlcIikgPT09IFwiYW55XCIpIHtcblx0XHRjb25zdCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCB9ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0Y29uc3QgaXNJbnNpZGUgPSB0b3AgPD0geSAmJiB5IDw9IGJvdHRvbSAmJiBsZWZ0IDw9IHggJiYgeCA8PSByaWdodDtcblx0XHRpZiAoIWlzSW5zaWRlKSByZXR1cm4gZWwuY2xvc2UoKTtcblx0fVxuXHRjb25zdCBkaWFsb2cgPSAoZWwgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihcImRpYWxvZ1wiKTtcblx0Y29uc3QgY2xvc2UgPSBkaWFsb2cgJiYgKGVsIGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oJ1tkYXRhLWNvbW1hbmQ9XCJjbG9zZVwiXScpO1xuXHRpZiAoY2xvc2UpIGRpYWxvZy5jbG9zZSgpO1xufTtcblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVEaWFsb2dDbGljayBhcyBFdmVudExpc3RlbmVyLCBRVUlDS19FVkVOVCk7XG5cdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoaGFuZGxlTW9kYWwpLm9ic2VydmUoXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXHRcdHtcblx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogW1wib3BlblwiXSxcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdH0sXG5cdCk7XG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbiwgb25Mb2FkZWQsIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmZ1bmN0aW9uIGhhbmRsZUVycm9zdW1tYXJ5SW5qZWN0KGV2ZW50OiBFdmVudCAmIHsgYW5pbWF0aW9uTmFtZT86IHN0cmluZyB9KSB7XG5cdGlmIChldmVudC5hbmltYXRpb25OYW1lICE9PSBzdHlsZXMuX2Vycm9yc3VtbWFyeSkgcmV0dXJuO1xuXHRjb25zdCBmaXJzdCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCk/LmZpcnN0RWxlbWVudENoaWxkO1xuXG5cdGlmIChmaXJzdCBpbnN0YW5jZW9mIEhUTUxIZWFkaW5nRWxlbWVudCkge1xuXHRcdGF0dHIoZmlyc3QsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcblx0XHRmaXJzdC5mb2N1cygpOyAvLyBBdXRvZm9jdXMgZmlyc3QgaGVhZGluZ1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uKGRvY3VtZW50LCBcImFuaW1hdGlvbmVuZFwiLCBoYW5kbGVFcnJvc3VtbWFyeUluamVjdCwgUVVJQ0tfRVZFTlQpLFxuKTtcbiIsInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcblxuLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0FORFJPSUQgPSBJU19CUk9XU0VSICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBTQUZFX0xBQkVMTEVEQlkgPSBgJHtJU19BTkRST0lEID8gXCJkYXRhXCIgOiBcImFyaWFcIn0tbGFiZWxsZWRieWA7XG52YXIgRElTUExBWV9CTE9DSyA9IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2sgfVwiO1xudmFyIEZPQ1VTX09VVExJTkUgPSBcIm91dGxpbmU6IDFweCBkb3R0ZWQ7IG91dGxpbmU6IDVweCBhdXRvIEhpZ2hsaWdodDsgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yXCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgYXR0YWNoU3R5bGUgPSAoZWxlbWVudCwgY3NzKSA9PiBlbGVtZW50LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgY3JlYXRlRWxlbWVudChcInNsb3RcIiksXG4gIC8vIFVubmFtZWQgc2xvdCBkb2VzIGF1dG9tYXRpY2FsbHkgcmVuZGVyIGFsbCB0b3AgZWxlbWVudCBub2Rlc1xuICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgY3NzKVxuKTtcbnZhciBvYnNlcnZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBtdXRhdGlvbk9ic2VydmVyID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgcmV0dXJuIG9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gIHRyeSB7XG4gICAgb2JzZXJ2ZXJzLmdldChlbGVtZW50KS5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgfSBjYXRjaCAoX2Vycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgTElWRTtcbnZhciBMSVZFX1NSX0ZJWCA9IDA7XG52YXIgc3BlYWsgPSAodGV4dCkgPT4ge1xuICBpZiAoIUxJVkUpIHtcbiAgICBMSVZFID0gY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBMSVZFLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmZpeGVkO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwXCI7XG4gICAgYXR0cihMSVZFLCBcImFyaWEtbGl2ZVwiLCBcImFzc2VydGl2ZVwiKTtcbiAgfVxuICBpZiAoIUxJVkUuaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKExJVkUpO1xuICBpZiAodGV4dCkgTElWRS50ZXh0Q29udGVudCA9IGAke3RleHR9JHtMSVZFX1NSX0ZJWCsrICUgMiA/IFwiXFx4QTBcIiA6IFwiXCJ9YDtcbn07XG52YXIgc2V0VmFsdWUgPSAoaW5wdXQsIGRhdGEsIHR5cGUgPSBcIlwiKSA9PiB7XG4gIHZhciBfYTIsIF9iO1xuICBjb25zdCBldmVudCA9IHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUsIGRhdGEsIGlucHV0VHlwZTogdHlwZSB9O1xuICBjb25zdCBwcm90byA9IEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiYmVmb3JlaW5wdXRcIiwgZXZlbnQpKTtcbiAgKF9iID0gKF9hMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIFwidmFsdWVcIikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChpbnB1dCwgZGF0YSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJpbnB1dFwiLCBldmVudCkpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImNoYW5nZVwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xufTtcbnZhciBJU19QUkVTUyA9IGZhbHNlO1xudmFyIGlzTW91c2VEb3duID0gKGV2ZW50KSA9PiB7XG4gIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSBcIm1vdXNldXBcIikgSVNfUFJFU1MgPSBmYWxzZTtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2Vkb3duXCIpIHtcbiAgICBJU19QUkVTUyA9IHRydWU7XG4gICAgb24oZG9jdW1lbnQsIFwibW91c2V1cFwiLCBpc01vdXNlRG93biwgeyBvbmNlOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiBJU19QUkVTUztcbn07XG5cbi8vIHUtb3B0aW9uLnRzXG52YXIgRElTQUJMRUQgPSBcImRpc2FibGVkXCI7XG52YXIgU0VMRUNURUQgPSBcInNlbGVjdGVkXCI7XG52YXIgVUhUTUxPcHRpb25FbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW0RJU0FCTEVELCBTRUxFQ1RFRF07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKCFJU19JT1MpIHRoaXMudGFiSW5kZXggPSAtMTtcbiAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKFwicm9sZVwiKSkgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJvcHRpb25cIik7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtZGlzYWJsZWRcIiwgYCR7dGhpcy5kaXNhYmxlZH1gKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1zZWxlY3RlZFwiLCBgJHt0aGlzLnNlbGVjdGVkfWApO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB3aGV0aGVyIHRoZSBvcHRpb24gaW4gdGhlIGxpc3QgYm94IGlzIHRoZSBkZWZhdWx0IGl0ZW0uICovXG4gIGdldCBkZWZhdWx0U2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXNbU0VMRUNURURdO1xuICB9XG4gIHNldCBkZWZhdWx0U2VsZWN0ZWQodmFsdWUpIHtcbiAgICB0aGlzW1NFTEVDVEVEXSA9IHZhbHVlO1xuICB9XG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBESVNBQkxFRCkgIT09IG51bGw7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBESVNBQkxFRCwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgLyoqIFJldHJpZXZlcyBhIHJlZmVyZW5jZSB0byB0aGUgZm9ybSB0aGF0IHRoZSBvYmplY3QgaXMgZW1iZWRkZWQgaW4uICovXG4gIGdldCBmb3JtKCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJmb3JtXCIpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiBhbiBvcHRpb24gaW4gYSBsaXN0IGJveC4gKi9cbiAgZ2V0IGluZGV4KCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLigoX2EyID0gdGhpcy5wYXJlbnRFbGVtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLm9wdGlvbnMpIHx8IFt0aGlzXVxuICAgIF0uaW5kZXhPZih0aGlzKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgYSB2YWx1ZSB0aGF0IHlvdSBjYW4gdXNlIHRvIGltcGxlbWVudCB5b3VyIG93biBsYWJlbCBmdW5jdGlvbmFsaXR5IGZvciB0aGUgb2JqZWN0LiAqL1xuICBnZXQgbGFiZWwoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKF9hMiA9IGF0dHIodGhpcywgXCJsYWJlbFwiKSkgIT0gbnVsbCA/IF9hMiA6IHRoaXMudGV4dDtcbiAgfVxuICBzZXQgbGFiZWwodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwibGFiZWxcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBTRUxFQ1RFRCkgIT09IG51bGw7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBTRUxFQ1RFRCwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSB0ZXh0IHN0cmluZyBzcGVjaWZpZWQgYnkgdGhlIG9wdGlvbiB0YWcuICovXG4gIGdldCB0ZXh0KCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gdGhpcy50ZXh0Q29udGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIH1cbiAgc2V0IHRleHQodGV4dCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB0ZXh0O1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgdmFsdWUgd2hpY2ggaXMgcmV0dXJuZWQgdG8gdGhlIHNlcnZlciB3aGVuIHRoZSBmb3JtIGNvbnRyb2wgaXMgc3VibWl0dGVkLiAqL1xuICBnZXQgdmFsdWUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKF9hMiA9IGF0dHIodGhpcywgXCJ2YWx1ZVwiKSkgIT0gbnVsbCA/IF9hMiA6IHRoaXMudGV4dDtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwidmFsdWVcIiwgdmFsdWUpO1xuICB9XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1vcHRpb25cIiwgVUhUTUxPcHRpb25FbGVtZW50KTtcblxuLy8gdS1kYXRhbGlzdC50c1xudmFyIExJVkVfVElNRVI7XG52YXIgSU5QVVRfREVCT1VOQ0UgPSAwO1xudmFyIElTX01PQklMRSA9IElTX0lPUyB8fCBJU19BTkRST0lEO1xudmFyIEVWRU5UUyA9IFwiY2xpY2ssZm9jdXNvdXQsaW5wdXQsa2V5ZG93bixtb3VzZWRvd24sbW91c2V1cFwiO1xudmFyIEVWRU5UU19JTlBVVCA9IFwiZm9jdXMsZm9jdXNpbixibHVyLGZvY3Vzb3V0XCI7XG52YXIgVEVYVFMgPSB7XG4gIHNpbmd1bGFyOiBcIiVkIGhpdFwiLFxuICBwbHVyYWw6IFwiJWQgaGl0c1wiXG59O1xudmFyIFVIVE1MRGF0YUxpc3RFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3RleHRzID0gX19zcHJlYWRWYWx1ZXMoe30sIFRFWFRTKTtcbiAgICB0aGlzLl92YWx1ZSA9IFwiXCI7XG4gICAgYXR0YWNoU3R5bGUoXG4gICAgICB0aGlzLFxuICAgICAgYCR7RElTUExBWV9CTE9DS31cblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvbikgeyBkaXNwbGF5OiBibG9jazsgY3Vyc29yOiBwb2ludGVyIH1cblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvbjpmb2N1cykgeyAke0ZPQ1VTX09VVExJTkV9IH1cblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvblthcmlhLWhpZGRlbj1cInRydWVcIl0pLFxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uW2Rpc2FibGVkXSksXG5cdFx0XHQ6OnNsb3R0ZWQodS1vcHRpb25baGlkZGVuXSkgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQgfWBcbiAgICApO1xuICB9XG4gIC8vIFVzZWQgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBhbm5vdW5jZW1lbnRzXG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJpZFwiLCAuLi5PYmplY3Qua2V5cyhURVhUUykubWFwKChrZXkpID0+IGBkYXRhLXNyLSR7a2V5fWApXTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLmhpZGRlbiA9IHRydWU7XG4gICAgdGhpcy5fcm9vdCA9IGdldFJvb3QodGhpcyk7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJsaXN0Ym94XCIpO1xuICAgIGF0dHIodGhpcywgXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuICAgIG9uKHRoaXMuX3Jvb3QsIFwiZm9jdXNpblwiLCB0aGlzKTtcbiAgICBvbih0aGlzLl9yb290LCBcImZvY3VzXCIsIHRoaXMsIHRydWUpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywge1xuICAgICAgYXR0cmlidXRlRmlsdGVyOiBbXCJkaXNhYmxlZFwiLCBcImhpZGRlblwiLCBcImxhYmVsXCIsIFwidmFsdWVcIl0sXG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG9mZih0aGlzLl9yb290IHx8IHRoaXMsIFwiZm9jdXNcIiwgdGhpcywgdHJ1ZSk7XG4gICAgb2ZmKHRoaXMuX3Jvb3QgfHwgdGhpcywgXCJmb2N1c2luXCIsIHRoaXMpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgZmFsc2UpO1xuICAgIGRpc2Nvbm5lY3RJbnB1dCh0aGlzKTtcbiAgICB0aGlzLl9yb290ID0gdm9pZCAwO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBfcHJldiwgbmV4dCkge1xuICAgIGNvbnN0IHRleHQgPSBwcm9wID09IG51bGwgPyB2b2lkIDAgOiBwcm9wLnNwbGl0KFwiZGF0YS1zci1cIilbMV07XG4gICAgY29uc3QgY3NzID0gYGlucHV0W2xpc3Q9XCIke3RoaXMuaWR9XCJdYDtcbiAgICBpZiAoVEVYVFNbdGV4dF0pIHRoaXMuX3RleHRzW3RleHRdID0gbmV4dCB8fCBURVhUU1t0ZXh0XTtcbiAgICBlbHNlIGlmICh0aGlzLl9yb290KSB7XG4gICAgICBpZiAodGhpcy5faW5wdXQpIHNldHVwSW5wdXQodGhpcywgdGhpcy5faW5wdXQpO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiB0aGlzLl9yb290LnF1ZXJ5U2VsZWN0b3JBbGwoY3NzKSlcbiAgICAgICAgc2V0dXBJbnB1dCh0aGlzLCBpbnB1dCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3QgeyB0YXJnZXQsIHR5cGUgfSA9IGV2ZW50O1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKHR5cGUgPT09IFwiY2xpY2tcIikgb25DbGljayh0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwiZm9jdXNcIiB8fCB0eXBlID09PSBcImZvY3VzaW5cIikgb25Gb2N1cyh0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwiYmx1clwiIHx8IHR5cGUgPT09IFwiZm9jdXNvdXRcIikgb25CbHVyKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIG9uS2V5RG93bih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgdGhpcy5jb250YWlucyh0YXJnZXQpKVxuICAgICAgaXNNb3VzZURvd24oZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcIm11dGF0aW9uXCIgfHwgdHlwZSA9PT0gXCJpbnB1dFwiKSB7XG4gICAgICBjbGVhclRpbWVvdXQoSU5QVVRfREVCT1VOQ0UpO1xuICAgICAgSU5QVVRfREVCT1VOQ0UgPSBzZXRUaW1lb3V0KG9uSW5wdXQsIDAsIHRoaXMsIGV2ZW50KTtcbiAgICB9XG4gIH1cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ1LW9wdGlvblwiKTtcbiAgfVxufTtcbnZhciBpc0Rpc2FibGVkID0gKGlucHV0KSA9PiAoaW5wdXQgPT0gbnVsbCA/IHZvaWQgMCA6IGlucHV0LmRpc2FibGVkKSB8fCAoaW5wdXQgPT0gbnVsbCA/IHZvaWQgMCA6IGlucHV0LnJlYWRPbmx5KSB8fCBmYWxzZTtcbnZhciBzZXRFeHBhbmRlZCA9IChzZWxmLCBvcGVuKSA9PiB7XG4gIHZhciBfYTIsIF9iLCBfYztcbiAgaWYgKHNlbGYuaGlkZGVuICE9PSBvcGVuKSByZXR1cm47XG4gIHNlbGYuaGlkZGVuID0gaXNEaXNhYmxlZChzZWxmID09IG51bGwgPyB2b2lkIDAgOiBzZWxmLl9pbnB1dCkgfHwgIW9wZW47XG4gIChfYTIgPSBtdXRhdGlvbk9ic2VydmVyKHNlbGYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRha2VSZWNvcmRzKCk7XG4gIGNvbnN0IGlzUG9wb3ZlciA9IHNlbGYuaXNDb25uZWN0ZWQgJiYgc2VsZi5wb3BvdmVyICYmICgoX2IgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmlzQ29ubmVjdGVkKSAmJiAoKF9jID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYy5wb3BvdmVyVGFyZ2V0RWxlbWVudCkgPT09IHNlbGY7XG4gIGlmIChzZWxmLl9pbnB1dCkgc2V0dXBJbnB1dChzZWxmLCBzZWxmLl9pbnB1dCwgb3Blbik7XG4gIGlmIChpc1BvcG92ZXIpIGF0dHIoc2VsZiwgXCJwb3BvdmVyXCIsIFwibWFudWFsXCIpO1xuICBpZiAoaXNQb3BvdmVyKSBzZWxmLnRvZ2dsZVBvcG92ZXIob3Blbik7XG4gIGlmIChvcGVuKSBvbklucHV0KHNlbGYpO1xufTtcbnZhciBkaXNjb25uZWN0SW5wdXQgPSAoc2VsZikgPT4ge1xuICBpZiAoIXNlbGYuX2lucHV0KSByZXR1cm47XG4gIG9mZihzZWxmLl9pbnB1dCB8fCBzZWxmLCBFVkVOVFNfSU5QVVQsIHNlbGYpO1xuICBvZmYoc2VsZi5fcm9vdCB8fCBzZWxmLCBFVkVOVFMsIHNlbGYpO1xuICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gIHNlbGYuX2lucHV0ID0gdm9pZCAwO1xufTtcbnZhciBzZXR1cElucHV0ID0gKHNlbGYsIGlucHV0LCBvcGVuID0gZmFsc2UpID0+IHtcbiAgaWYgKHNlbGYucG9wb3ZlcikgYXR0cihpbnB1dCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKHNlbGYpKTtcbiAgb24oaW5wdXQsIEVWRU5UU19JTlBVVCwgc2VsZiwgdHJ1ZSk7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1hdXRvY29tcGxldGVcIiwgXCJsaXN0XCIpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtY29udHJvbHNcIiwgdXNlSWQoc2VsZikpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7IUlTX01PQklMRSB8fCBvcGVufWApO1xuICBhdHRyKGlucHV0LCBcImF1dG9jb21wbGV0ZVwiLCBcIm9mZlwiKTtcbiAgYXR0cihpbnB1dCwgXCJyb2xlXCIsIGlzRGlzYWJsZWQoaW5wdXQpID8gbnVsbCA6IFwiY29tYm9ib3hcIik7XG59O1xudmFyIG9uRm9jdXMgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgaXNJbnB1dCA9IGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQ7XG4gIGlmIChpc0lucHV0ICYmIGV2ZW50LmlzVHJ1c3RlZCkgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gIGlmIChzZWxmLl9pbnB1dCAhPT0gZXZlbnQudGFyZ2V0ICYmIGlzSW5wdXQgJiYgZXZlbnQudGFyZ2V0Lmxpc3QgPT09IHNlbGYpIHtcbiAgICBpZiAoc2VsZi5faW5wdXQpIGRpc2Nvbm5lY3RJbnB1dChzZWxmKTtcbiAgICBzZWxmLl9pbnB1dCA9IGV2ZW50LnRhcmdldDtcbiAgICBzZWxmLl9pbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNcIikpO1xuICAgIHNlbGYuX2lucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJmb2N1c2luXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgYXR0cihzZWxmLCBTQUZFX0xBQkVMTEVEQlksIHVzZUlkKChfYTIgPSBzZWxmLl9pbnB1dC5sYWJlbHMpID09IG51bGwgPyB2b2lkIDAgOiBfYTJbMF0pKTtcbiAgICBvbihzZWxmLl9yb290IHx8IHNlbGYsIEVWRU5UUywgc2VsZik7XG4gICAgc2V0RXhwYW5kZWQoc2VsZiwgYXR0cihzZWxmLl9pbnB1dCwgXCJpbnB1dG1vZGVcIikgIT09IFwibm9uZVwiKTtcbiAgICBzcGVhaygpO1xuICB9XG59O1xudmFyIG9uQmx1ciA9IChzZWxmLCBldmVudCkgPT4ge1xuICBpZiAoIUlTX0FORFJPSUQgJiYgIWlzTW91c2VEb3duKCkgJiYgc2VsZi5faW5wdXQpXG4gICAgc2V0VGltZW91dChvbkJsdXJyZWQsIDAsIHNlbGYpO1xuICBpZiAoZXZlbnQudGFyZ2V0ID09PSBzZWxmLl9pbnB1dCAmJiBldmVudC5pc1RydXN0ZWQpXG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59O1xudmFyIG9uQmx1cnJlZCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSAoKF9hMiA9IHNlbGYuX3Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuYWN0aXZlRWxlbWVudCkgfHwgbnVsbDtcbiAgY29uc3QgaW5wdXQgPSBzZWxmLl9pbnB1dDtcbiAgaWYgKGlucHV0ICYmIGlucHV0ICE9PSByZWxhdGVkVGFyZ2V0ICYmICFzZWxmLmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImJsdXJcIiwgeyByZWxhdGVkVGFyZ2V0IH0pKTtcbiAgICBpbnB1dC5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEZvY3VzRXZlbnQoXCJmb2N1c291dFwiLCB7IGJ1YmJsZXM6IHRydWUsIHJlbGF0ZWRUYXJnZXQgfSlcbiAgICApO1xuICAgIGRpc2Nvbm5lY3RJbnB1dChzZWxmKTtcbiAgfVxufTtcbnZhciBvbkNsaWNrID0gKHNlbGYsIHsgdGFyZ2V0IH0pID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKCFzZWxmLl9pbnB1dCB8fCBzZWxmLl9pbnB1dCA9PT0gdGFyZ2V0KSByZXR1cm4gc2V0RXhwYW5kZWQoc2VsZiwgdHJ1ZSk7XG4gIGZvciAoY29uc3Qgb3B0IG9mIHNlbGYub3B0aW9ucylcbiAgICBpZiAob3B0LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgIGlmIChhdHRyKHNlbGYsIFwiYXJpYS1tdWx0aXNlbGVjdGFibGVcIikgIT09IFwidHJ1ZVwiKSB7XG4gICAgICAgIChfYTIgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xuICAgICAgICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2V0VmFsdWUoc2VsZi5faW5wdXQsIG9wdC52YWx1ZSk7XG4gICAgfVxuICBpZiAoSVNfQU5EUk9JRCkgb25CbHVycmVkKHNlbGYpO1xufTtcbnZhciBvbktleURvd24gPSAoc2VsZiwgZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IGtleSwgdGFyZ2V0LCBhbHRLZXksIGN0cmxLZXksIHNoaWZ0S2V5LCBtZXRhS2V5IH0gPSBlO1xuICBjb25zdCBpc0VzY2FwZSA9IGtleSA9PT0gXCJFc2NhcGVcIiB8fCBrZXkgPT09IFwiRXNjXCI7XG4gIGlmIChhbHRLZXkgfHwgY3RybEtleSB8fCBtZXRhS2V5IHx8IHNoaWZ0S2V5IHx8IGtleSA9PT0gXCJUYWJcIikgcmV0dXJuO1xuICBpZiAoaXNFc2NhcGUgJiYgIXNlbGYuaGlkZGVuKSBlID09IG51bGwgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gIHNldEV4cGFuZGVkKHNlbGYsICFpc0VzY2FwZSk7XG4gIGNvbnN0IG9wdGlvbnMgPSBbLi4uc2VsZi5vcHRpb25zXS5maWx0ZXIoXG4gICAgKGVsKSA9PiBhdHRyKGVsLCBcImFyaWEtaGlkZGVuXCIpICE9PSBcInRydWVcIiAmJiBlbC5vZmZzZXRIZWlnaHRcbiAgKTtcbiAgY29uc3QgcHJldiA9IG9wdGlvbnMuaW5kZXhPZih0YXJnZXQpO1xuICBsZXQgbmV4dCA9IC0xO1xuICBpZiAoa2V5ID09PSBcIkFycm93RG93blwiKSBuZXh0ID0gKHByZXYgKyAxKSAlIG9wdGlvbnMubGVuZ3RoO1xuICBpZiAoa2V5ID09PSBcIkFycm93VXBcIikgbmV4dCA9ICh+cHJldiA/IHByZXYgOiBvcHRpb25zLmxlbmd0aCkgLSAxO1xuICBpZiAofnByZXYpIHtcbiAgICBpZiAoa2V5ID09PSBcIkhvbWVcIiB8fCBrZXkgPT09IFwiUGFnZVVwXCIpIG5leHQgPSAwO1xuICAgIGlmIChrZXkgPT09IFwiRW5kXCIgfHwga2V5ID09PSBcIlBhZ2VEb3duXCIpIG5leHQgPSBvcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgaWYgKGtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICBvcHRpb25zW3ByZXZdLmNsaWNrKCk7XG4gICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuICBpZiAob3B0aW9uc1tuZXh0XSkgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykgb3B0aW9uLnRhYkluZGV4ID0gLTE7XG4gIGlmIChvcHRpb25zW25leHRdKSBlLnByZXZlbnREZWZhdWx0KCk7XG4gIChfYTIgPSBvcHRpb25zW25leHRdIHx8IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKCk7XG4gIGlmICghb3B0aW9uc1tuZXh0XSAmJiBrZXkgPT09IFwiQXJyb3dVcFwiKVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdmFyIF9hMztcbiAgICAgIHJldHVybiAoX2EzID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTMuc2V0U2VsZWN0aW9uUmFuZ2UoOTk5LCA5OTkpO1xuICAgIH0pO1xufTtcbnZhciBvbklucHV0ID0gKHNlbGYsIGUpID0+IHtcbiAgY29uc3QgeyBfdGV4dHMsIF9yb290LCBfaW5wdXQsIG9wdGlvbnMgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gKF9pbnB1dCA9PSBudWxsID8gdm9pZCAwIDogX2lucHV0LnZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBmaWx0ZXIgPSAhc2VsZi5oYXNBdHRyaWJ1dGUoXCJkYXRhLW5vZmlsdGVyXCIpO1xuICBjb25zdCBoaWRkZW4gPSBbXTtcbiAgY29uc3QgdmlzaWJsZSA9IFtdO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKSB7XG4gICAgY29uc3QgaGlkZSA9IG9wdC5kaXNhYmxlZCB8fCBvcHQuaGlkZGVuIHx8IGZpbHRlciAmJiAhb3B0LmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModmFsdWUpO1xuICAgIChoaWRlID8gaGlkZGVuIDogdmlzaWJsZSkucHVzaChvcHQpO1xuICB9XG4gIGZvciAoY29uc3Qgb3B0IG9mIGhpZGRlbikgYXR0cihvcHQsIFwiYXJpYS1oaWRkZW5cIiwgXCJ0cnVlXCIpO1xuICBmb3IgKGNvbnN0IG9wdCBvZiB2aXNpYmxlKSBhdHRyKG9wdCwgXCJhcmlhLWhpZGRlblwiLCBcImZhbHNlXCIpO1xuICBjb25zdCB0b3RhbCA9IHZpc2libGUubGVuZ3RoO1xuICBjbGVhclRpbWVvdXQoTElWRV9USU1FUik7XG4gIGlmICgoZSA9PSBudWxsID8gdm9pZCAwIDogZS50eXBlKSA9PT0gXCJpbnB1dFwiICYmIHZhbHVlICE9PSBzZWxmLl92YWx1ZSlcbiAgICBMSVZFX1RJTUVSID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gYCR7IXRvdGFsICYmIHNlbGYuaW5uZXJUZXh0LnRyaW0oKSB8fCBgJHtfdGV4dHNbdG90YWwgPT09IDEgPyBcInNpbmd1bGFyXCIgOiBcInBsdXJhbFwiXX1gLnJlcGxhY2UoXCIlZFwiLCBgJHt0b3RhbH1gKX1gO1xuICAgICAgaWYgKCFzZWxmLmhpZGRlbiAmJiAoX3Jvb3QgPT0gbnVsbCA/IHZvaWQgMCA6IF9yb290LmFjdGl2ZUVsZW1lbnQpID09PSBfaW5wdXQpIHNwZWFrKHRleHQpO1xuICAgICAgc2VsZi5fdmFsdWUgPSB2YWx1ZTtcbiAgICB9LCAxZTMpO1xuICBpZiAoSVNfSU9TKVxuICAgIHZpc2libGUuZm9yRWFjaCgob3B0LCBpZHgpID0+IGF0dHIob3B0LCBcInRpdGxlXCIsIGAke2lkeCArIDF9LyR7dG90YWx9YCkpO1xufTtcbmlmIChJU19CUk9XU0VSKVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwibGlzdFwiLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGdldFJvb3QodGhpcykuZ2V0RWxlbWVudEJ5SWQoYXR0cih0aGlzLCBcImxpc3RcIikgfHwgXCJcIik7XG4gICAgfVxuICB9KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtZGF0YWxpc3RcIiwgVUhUTUxEYXRhTGlzdEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTERhdGFMaXN0RWxlbWVudCB9O1xuIiwiaW1wb3J0IHsgZmxpcCwgdHlwZSBQbGFjZW1lbnQsIHNoaWZ0LCBzaXplIH0gZnJvbSBcIkBmbG9hdGluZy11aS9kb21cIjtcbmltcG9ydCB7IFVIVE1MQ29tYm9ib3hFbGVtZW50IH0gZnJvbSBcIkB1LWVsZW1lbnRzL3UtY29tYm9ib3hcIjtcbmltcG9ydCB7IFVIVE1MRGF0YUxpc3RFbGVtZW50IH0gZnJvbSBcIkB1LWVsZW1lbnRzL3UtZGF0YWxpc3RcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRhbmNob3JQb3NpdGlvbixcblx0YXR0cixcblx0aXNJbnB1dExpa2UsXG5cdG9uLFxuXHRvbkxvYWRlZCxcblx0b25NdXRhdGlvbixcblx0UVVJQ0tfRVZFTlQsXG5cdHVzZUlkLFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0ZJRUxEID0gc3R5bGVzLmZpZWxkLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19WQUxJREFUSU9OUyA9IHN0eWxlcy52YWxpZGF0aW9uLnNwbGl0KFwiIFwiKTtcbmNvbnN0IENTU19WQUxJREFUSU9OID0gQ1NTX1ZBTElEQVRJT05TWzBdO1xuXG5jb25zdCBnZXRUZXh0ID0gKHN0eWxlOiBDU1NTdHlsZURlY2xhcmF0aW9uLCBrZXk6IHN0cmluZykgPT5cblx0c3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShgLS1tdGRzLXRleHQtJHtrZXl9YCk/LnNsaWNlKDEsIC0xKSB8fCBcIlwiOyAvLyBzbGljZSB0byB0cmltIHF1b3Rlc1xuXG5mdW5jdGlvbiBoYW5kbGVGaWVsZE11dGF0aW9uKFxuXHRmaWVsZHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4sXG5cdHZhbGlkYXRlPzogYm9vbGVhbixcbikge1xuXHRmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcylcblx0XHRpZiAoZmllbGQuaXNDb25uZWN0ZWQpIHtcblx0XHRcdGNvbnN0IGxhYmVsczogSFRNTExhYmVsRWxlbWVudFtdID0gW107XG5cdFx0XHRjb25zdCBkZXNjczogRWxlbWVudFtdID0gW107XG5cdFx0XHRjb25zdCB2YWxpZHM6IEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0bGV0IGNvbWJvYm94OiBVSFRNTENvbWJvYm94RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXHRcdFx0bGV0IGlucHV0OiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdFx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGVsIG9mIGZpZWxkLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSkge1xuXHRcdFx0XHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MTGFiZWxFbGVtZW50KSBsYWJlbHMucHVzaChlbCk7XG5cdFx0XHRcdGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgVUhUTUxDb21ib2JveEVsZW1lbnQpIGNvbWJvYm94ID0gZWw7XG5cdFx0XHRcdGVsc2UgaWYgKGlzSW5wdXRMaWtlKGVsKSAmJiAhZWwuaGlkZGVuKSBpbnB1dCA9IGVsO1xuXHRcdFx0XHRlbHNlIGlmIChlbC5oYXNBdHRyaWJ1dGUoXCJkYXRhLWRlc2NyaXB0aW9uXCIpKSBkZXNjcy5wdXNoKGVsKTtcblx0XHRcdFx0ZWxzZSBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkge1xuXHRcdFx0XHRcdHZhbGlkID0gYXR0cihlbCwgXCJkYXRhLWNvbG9yXCIpID09PSBcInN1Y2Nlc3NcIiB8fCAhZWwuY2xpZW50SGVpZ2h0OyAvLyBPbmx5IHNldCBpbnZhbGlkIGlmIFZhbGlkYXRpb24gaXMgdmlzaWJsZVxuXHRcdFx0XHRcdHZhbGlkcy5wdXNoKGVsKTtcblx0XHRcdFx0XHRkZXNjcy51bnNoaWZ0KGVsKTtcblx0XHRcdFx0fSBlbHNlIGlmIChlbCBpbnN0YW5jZW9mIEhUTUxQYXJhZ3JhcGhFbGVtZW50KVxuXHRcdFx0XHRcdGRlc2NzLnNvbWUoKGRlc2MpID0+IGRlc2MuY29udGFpbnMoZWwpKSB8fCBkZXNjcy5wdXNoKGVsKTsgLy8gT25seSBhZGQgaWYgbm90IGFscmVhZHkgaW5zaWRlIGRlc2NyaXB0aW9uXG5cdFx0XHR9XG5cblx0XHRcdGlmIChpbnB1dCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGxhYmVsIG9mIGxhYmVscykgbGFiZWwuaHRtbEZvciA9IHVzZUlkKGlucHV0KTtcblx0XHRcdFx0aWYgKHZhbGlkYXRlICYmIGF0dHIoZmllbGQsIFwiZGF0YS12YWxpZGF0aW9uXCIpID09PSBcImZvcm1cIikge1xuXHRcdFx0XHRcdHZhbGlkID0gaW5wdXQubWF0Y2hlcyhcIjp2YWxpZFwiKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGVsIG9mIHZhbGlkcykgYXR0cihlbCwgXCJoaWRkZW5cIiwgdmFsaWQgPyBcIlwiIDogbnVsbCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVuZGVyQ29tYm9ib3goY29tYm9ib3gpO1xuXHRcdFx0XHRyZW5kZXJDb3VudGVyKGlucHV0KTtcblx0XHRcdFx0cmVuZGVyVGV4dGFyZWFTaXplKGlucHV0KTtcblx0XHRcdFx0YXR0cihpbnB1dCwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIGRlc2NzLm1hcCh1c2VJZCkuam9pbihcIiBcIikgfHwgbnVsbCk7IC8vIFJlbW92ZSBpZiBlbXB0eVxuXHRcdFx0XHRhdHRyKGlucHV0LCBcImFyaWEtaW52YWxpZFwiLCBgJHshdmFsaWR9YCk7XG5cdFx0XHR9XG5cdFx0fVxufVxuXG4vLyBpT1MgZG9lcyBub3Qgc3VwcG9ydCBmaWVsZC1zaXppbmc6IGNvbnRlbnQsIHNvIHdlIG5lZWQgdG8gbWFudWFsbHkgcmVzaXplXG5mdW5jdGlvbiByZW5kZXJUZXh0YXJlYVNpemUodGV4dGFyZWE6IEVsZW1lbnQpIHtcblx0aWYgKHRleHRhcmVhIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuXHRcdHRleHRhcmVhLnN0eWxlLnNldFByb3BlcnR5KFwiLS1tdGRzLXRleHRhcmVhLWhlaWdodFwiLCBcImF1dG9cIik7XG5cdFx0dGV4dGFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG5cdFx0XHRcIi0tbXRkcy10ZXh0YXJlYS1oZWlnaHRcIixcblx0XHRcdGAke3RleHRhcmVhLnNjcm9sbEhlaWdodH1weGAsXG5cdFx0KTtcblx0fVxufVxuXG4vLyBTZXR1cCB0cmFuc2xhdGlvbnMgZnJvbSBDU1MgY3VzdG9tIHByb3BlcnRpZXNcbmZ1bmN0aW9uIHJlbmRlckNvbWJvYm94KGVsOiBVSFRNTENvbWJvYm94RWxlbWVudCB8IG51bGwpIHtcblx0Y29uc3QgeyBjb250cm9sLCBsaXN0IH0gPSBlbCB8fCB7fTtcblxuXHRpZiAoZWwgJiYgbGlzdCAmJiAhZWwuaGFzQXR0cmlidXRlKFwiZGF0YS1zci1hZGRlZFwiKSkge1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1hZGRlZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWFkZGVkXCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3ItZW1wdHlcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1lbXB0eVwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLWZvdW5kXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtZm91bmRcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1pbnZhbGlkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtaW52YWxpZFwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLW9mXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtb2ZcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1yZW1vdmVcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1yZW1vdmVcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1yZW1vdmVkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtcmVtb3ZlZFwiKSk7XG5cdFx0YXR0cihsaXN0LCBcImRhdGEtc3ItcGx1cmFsXCIsIGdldFRleHQoc3R5bGUsIFwiZGF0YWxpc3QtcGx1cmFsXCIpKTtcblx0XHRhdHRyKGxpc3QsIFwiZGF0YS1zci1zaW5ndWxhclwiLCBnZXRUZXh0KHN0eWxlLCBcImRhdGFsaXN0LXNpbmd1bGFyXCIpKTtcblx0fVxuXHRpZiAobGlzdCAmJiBjb250cm9sICYmICFsaXN0Lmhhc0F0dHJpYnV0ZShcInBvcG92ZXJcIikpIHtcblx0XHRhdHRyKGxpc3QsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcblx0XHRhdHRyKGNvbnRyb2wsIFwicG9wb3ZlcnRhcmdldFwiLCB1c2VJZChsaXN0KSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyQ291bnRlcihpbnB1dDogSFRNTElucHV0RWxlbWVudCkge1xuXHRjb25zdCBlbCA9IGlucHV0Py5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdGNvbnN0IGxpbWl0ID0gZWwgJiYgYXR0cihlbCwgXCJkYXRhLWNvdW50XCIpO1xuXG5cdGlmIChlbCAmJiBsaW1pdCkge1xuXHRcdGNvbnN0IHJlbWFpbmRlciA9IE51bWJlcihsaW1pdCkgLSBpbnB1dC52YWx1ZS5sZW5ndGg7XG5cdFx0Y29uc3QgbmV4dEludmFsaWQgPSByZW1haW5kZXIgPCAwO1xuXHRcdGNvbnN0IHByZXZJbnZhbGlkID0gYXR0cihlbCwgXCJhcmlhLWxpdmVcIikgPT09IFwicG9saXRlXCI7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCB8fCBpbnB1dCk7XG5cdFx0Y29uc3Qgb3ZlciA9IGdldFRleHQoc3R5bGUsIFwiY291bnQtb3ZlclwiKTtcblx0XHRjb25zdCB1bmRlciA9IGdldFRleHQoc3R5bGUsIFwiY291bnQtdW5kZXJcIik7XG5cblx0XHRpZiAocHJldkludmFsaWQgIT09IG5leHRJbnZhbGlkKSB7XG5cdFx0XHRhdHRyKGVsLCBcImFyaWEtbGl2ZVwiLCBuZXh0SW52YWxpZCA/IFwicG9saXRlXCIgOiBcIm9mZlwiKTtcblx0XHRcdGZvciAoY29uc3QgY3NzIG9mIENTU19WQUxJREFUSU9OUykgZWwuY2xhc3NMaXN0LnRvZ2dsZShjc3MsIG5leHRJbnZhbGlkKTtcblx0XHR9XG5cdFx0ZWwudGV4dENvbnRlbnQgPSAobmV4dEludmFsaWQgPyBvdmVyIDogdW5kZXIpLnJlcGxhY2UoXG5cdFx0XHRcIiVkXCIsXG5cdFx0XHRgJHtNYXRoLmFicyhyZW1haW5kZXIpfWAsXG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBoYW5kbGVGaWVsZFRvZ2dsZShldmVudDogRXZlbnQgJiB7IG5ld1N0YXRlPzogc3RyaW5nIH0pIHtcblx0aWYgKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIFVIVE1MRGF0YUxpc3RFbGVtZW50KSB7XG5cdFx0Y29uc3QgbGlzdCA9IGV2ZW50LnRhcmdldDtcblx0XHRjb25zdCByb290ID0gbGlzdC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QgfCBudWxsO1xuXHRcdGNvbnN0IGFuY2hvciA9IHJvb3Q/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxuXHRcdFx0YFtwb3BvdmVydGFyZ2V0PVwiJHtsaXN0LmlkfVwiXWAsXG5cdFx0KTtcblxuXHRcdGlmIChldmVudC5uZXdTdGF0ZSA9PT0gXCJjbG9zZWRcIikgYW5jaG9yUG9zaXRpb24obGlzdCwgZmFsc2UpO1xuXHRcdGVsc2UgaWYgKGFuY2hvcilcblx0XHRcdGFuY2hvclBvc2l0aW9uKGxpc3QsIGFuY2hvciwge1xuXHRcdFx0XHRwbGFjZW1lbnQ6IChhdHRyKGxpc3QsIFwiZGF0YS1wb3NpdGlvblwiKSA/PyBcImJvdHRvbVwiKSBhcyBQbGFjZW1lbnQsXG5cdFx0XHRcdG1pZGRsZXdhcmU6IFtcblx0XHRcdFx0XHRmbGlwKCksXG5cdFx0XHRcdFx0c2hpZnQoKSxcblx0XHRcdFx0XHRzaXplKHtcblx0XHRcdFx0XHRcdHBhZGRpbmc6IDEwLFxuXHRcdFx0XHRcdFx0YXBwbHkoeyBhdmFpbGFibGVIZWlnaHQgfSkge1xuXHRcdFx0XHRcdFx0XHRsaXN0LnN0eWxlLndpZHRoID0gYCR7YW5jaG9yLm9mZnNldFdpZHRofXB4YDtcblx0XHRcdFx0XHRcdFx0bGlzdC5zdHlsZS5tYXhIZWlnaHQgPSBgJHtNYXRoLm1heCg1MCwgYXZhaWxhYmxlSGVpZ2h0KX1weGA7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRdLFxuXHRcdFx0fSk7XG5cdH1cbn1cbi8vIFVwZGF0ZSB3aGVuIHR5cGluZ1xuZnVuY3Rpb24gaGFuZGxlRmllbGRJbnB1dChldmVudDogRXZlbnQpIHtcblx0aWYgKGlzSW5wdXRMaWtlKGV2ZW50LnRhcmdldCkpIHtcblx0XHRyZW5kZXJDb3VudGVyKGV2ZW50LnRhcmdldCk7XG5cdFx0cmVuZGVyVGV4dGFyZWFTaXplKGV2ZW50LnRhcmdldCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRmllbGRWYWxkaWF0aW9uKGV2ZW50OiBFdmVudCkge1xuXHRjb25zdCBmaWVsZCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihgLiR7Q1NTX0ZJRUxEfWApO1xuXHRpZiAoZXZlbnQudHlwZSA9PT0gXCJpbnZhbGlkXCIgJiYgZmllbGQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIFByZXZlbnQgYnJvd3NlcnMgZnJvbSBzaG93aW5nIGRlZmF1bHQgdmFsaWRhdGlvbiBidWJibGVzXG5cdGhhbmRsZUZpZWxkTXV0YXRpb24oZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShDU1NfRklFTEQpLCB0cnVlKTsgLy8gVXBkYXRlIHN0YXRlXG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRCwgaGFuZGxlRmllbGRNdXRhdGlvbik7XG5cdG9uKGRvY3VtZW50LCBcImlucHV0XCIsIGhhbmRsZUZpZWxkSW5wdXQsIFFVSUNLX0VWRU5UKTtcblx0b24oZG9jdW1lbnQsIFwiaW52YWxpZCxzdWJtaXRcIiwgaGFuZGxlRmllbGRWYWxkaWF0aW9uLCB0cnVlKTsgLy8gVXNlIGNhcHR1cmUgYXMgaW52YWxpZCBhbmQgc3VibWl0IGRvZXMgbm90IGJ1YmJsZVxuXHRvbihkb2N1bWVudCwgXCJ0b2dnbGVcIiwgaGFuZGxlRmllbGRUb2dnbGUsIFFVSUNLX0VWRU5UKTsgLy8gVXNlIGNhcHR1cmUgc2luY2UgdG9nZ2xlIGRvZXMgbm90IGJ1YmJsZVxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgaXNJbnB1dExpa2UsIG9uTG9hZGVkLCBvbk11dGF0aW9uLCB1c2VJZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRklFTERTRVQgPSBzdHlsZXMuZmllbGRzZXQuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1ZBTElEQVRJT04gPSBzdHlsZXMudmFsaWRhdGlvbi5zcGxpdChcIiBcIilbMF07XG5jb25zdCBBUklBX0RFU0MgPSBcImFyaWEtZGVzY3JpYmVkYnlcIjtcbmNvbnN0IEFSSUFfSU5WQUxJRCA9IFwiYXJpYS1pbnZhbGlkXCI7XG5cbi8vIFVzaW5nIHJlcXVlc3RBbmltYXRpb25GcmFtZSB0byBlbnN1cmUgaXQgcnVucyBhZnRlciBmaWVsZC1vYnNlcnZlclxuZnVuY3Rpb24gaGFuZGxlRmllbGRzZXRNdXRhdGlvbihmaWVsZHNldHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4pIHtcblx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRmb3IgKGNvbnN0IGZpZWxkc2V0IG9mIGZpZWxkc2V0cylcblx0XHRcdGlmIChmaWVsZHNldC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0XHRjb25zdCBpbnB1dHM6IEhUTUxJbnB1dEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0XHRsZXQgdmFsaWRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdFx0XHRcdGxldCB2YWxpZCA9IHRydWU7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBlbCBvZiBmaWVsZHNldC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikpIHtcblx0XHRcdFx0XHRpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkge1xuXHRcdFx0XHRcdFx0dmFsaWQgPSBhdHRyKGVsLCBcImRhdGEtY29sb3JcIikgPT09IFwic3VjY2Vzc1wiIHx8ICFlbC5jbGllbnRIZWlnaHQ7IC8vIE9ubHkgc2V0IGludmFsaWQgaWYgVmFsaWRhdGlvbiBpcyB2aXNpYmxlXG5cdFx0XHRcdFx0XHR2YWxpZElkID0gdXNlSWQoZWwpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoaXNJbnB1dExpa2UoZWwpKSBpbnB1dHMucHVzaChlbCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykge1xuXHRcdFx0XHRcdGNvbnN0IGRlc2MgPSBhdHRyKGlucHV0LCBBUklBX0RFU0MpPy5yZXBsYWNlKHZhbGlkSWQgfHwgXCIjXCIsIFwiXCIpO1xuXG5cdFx0XHRcdFx0YXR0cihpbnB1dCwgQVJJQV9ERVNDLCBgJHt2YWxpZElkIHx8IFwiXCJ9ICR7ZGVzYyB8fCBcIlwifWAudHJpbSgpKTtcblx0XHRcdFx0XHRhdHRyKGlucHV0LCBBUklBX0lOVkFMSUQsIGAkeyF2YWxpZH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRFNFVCwgaGFuZGxlRmllbGRzZXRNdXRhdGlvbiksXG4pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19MT0dPID0gc3R5bGVzLmxvZ28uc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVMb2dvTXV0YXRpb24oW2xvZ29dOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRpZiAobG9nbz8uaXNDb25uZWN0ZWQgJiYgbG9nbz8uZmlyc3RFbGVtZW50Q2hpbGQgaW5zdGFuY2VvZiBTVkdTVkdFbGVtZW50KSB7XG5cdFx0Zm9yIChjb25zdCBpY29uIG9mIGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvckFsbChcImxpbmtbcmVsfj0naWNvbiddXCIpKVxuXHRcdFx0aWNvbi5zZXRBdHRyaWJ1dGUoXCJyZWxcIiwgXCJkaXNhYmxlZFwiKTsgLy8gRGlzYWJsZSBwcmV2aW91cyBpY29uIChidXQgbm90IHJlbW92ZSBpcyBhcyB0aGlzIG1ha2VzIE5leHQuanMgc2FkKVxuXG5cdFx0Y29uc3Qgc3ZnID0gbG9nby5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRjb25zdCBpc0RvdCA9IGxvZ28/Lmhhc0F0dHJpYnV0ZShcImRhdGEtZW52XCIpO1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoc3ZnKTtcblx0XHRjb25zdCB0ZXh0ID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcImNvbG9yXCIpO1xuXHRcdGNvbnN0IGJhY2sgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1tdGRzLWxvZ28tY29sb3JcIik7XG5cdFx0Y29uc3QgaWNvbiA9IHN2Zy5vdXRlckhUTUxcblx0XHRcdC5yZXBsYWNlKC9cXG4rL2csIFwiIFwiKSAvLyBQcmV2ZW50IGxpbmUgYnJlYWtzXG5cdFx0XHQucmVwbGFjZSgvKGZpbGx8d2lkdGh8aGVpZ2h0fHhtbG5zKT1cIlteXCJdK1wiL2dpLCBcIlwiKVxuXHRcdFx0LnJlcGxhY2UoXCI8c3ZnXCIsIGA8c3ZnIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIGZpbGw9XCIke3RleHR9XCJgKTtcblxuXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoXG5cdFx0XHRPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpLCB7XG5cdFx0XHRcdGhyZWY6IGBkYXRhOmltYWdlL3N2Zyt4bWwsJHtlbmNvZGVVUklDb21wb25lbnQoYDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNTUgNTUnPjxyZWN0IGZpbGw9JyR7aXNEb3QgPyBcIm5vbmVcIiA6IGJhY2t9JyB3aWR0aD0nNTEnIGhlaWdodD0nNTEnIHg9JzInIHk9JzInIHN0cm9rZT0nJHt0ZXh0fScgc3Ryb2tlLWRhc2hhcnJheT0nMC4wOSA2LjM4JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1vcGFjaXR5PScke2lzRG90ID8gMC42IDogMH0nIHN0cm9rZS13aWR0aD0nMi4zJyByeD0nMjUuNScvPjxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg3LjUgNy41KVwiPiR7aWNvbn08L2c+PC9zdmc+YCl9YCxcblx0XHRcdFx0cmVsOiBcImljb25cIixcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19MT0dPLCBoYW5kbGVMb2dvTXV0YXRpb24pLFxuKTtcbiIsImltcG9ydCB7IGZsaXAsIHR5cGUgUGxhY2VtZW50LCBzaGlmdCB9IGZyb20gXCJAZmxvYXRpbmctdWkvZG9tXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYW5jaG9yUG9zaXRpb24sIGF0dHIsIG9uLCBvbkxvYWRlZCwgUVVJQ0tfRVZFTlQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1BPUE9WRVIgPSBzdHlsZXMucG9wb3Zlci5zcGxpdChcIiBcIilbMF07XG5sZXQgT1BFTl9QT1BPVkVSUyA9IDA7IC8vIFNwZWVkIHVwIGJ5IG9ubHkgY2hlY2tpbmcgY2xpY2tzIGlmIHdlIGhhdmUgb3BlbiBwb3BvdmVyc1xuXG5mdW5jdGlvbiBoYW5kbGVQb3BvdmVyVG9nZ2xlKHtcblx0dGFyZ2V0OiBlbCxcblx0bmV3U3RhdGUsXG59OiBFdmVudCAmIHsgbmV3U3RhdGU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1BPUE9WRVIpKSB7XG5cdFx0Y29uc3QgaXNDbG9zaW5nID0gbmV3U3RhdGUgPT09IFwiY2xvc2VkXCI7XG5cdFx0Y29uc3QgYW5jaG9yID0gKGVsLmdldFJvb3ROb2RlKCkgYXMgU2hhZG93Um9vdCk/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxuXHRcdFx0YFtwb3BvdmVydGFyZ2V0PVwiJHtlbC5pZH1cIl1gLFxuXHRcdCk7XG5cblx0XHRPUEVOX1BPUE9WRVJTICs9IGlzQ2xvc2luZyA/IC0xIDogMTtcblx0XHRpZiAoaXNDbG9zaW5nKSBhbmNob3JQb3NpdGlvbihlbCwgZmFsc2UpO1xuXHRcdGVsc2UgaWYgKGFuY2hvcilcblx0XHRcdGFuY2hvclBvc2l0aW9uKGVsLCBhbmNob3IsIHtcblx0XHRcdFx0cGxhY2VtZW50OiAoYXR0cihlbCwgXCJkYXRhLXBvc2l0aW9uXCIpIHx8IFwiYm90dG9tXCIpIGFzIFBsYWNlbWVudCxcblx0XHRcdFx0bWlkZGxld2FyZTogW2ZsaXAoKSwgc2hpZnQoeyBwYWRkaW5nOiAxMCB9KV0sXG5cdFx0XHR9KTtcblx0fVxufVxuXG4vLyBQb2x5ZmlsbCBwb3BvdmVydGFyZ2V0IGZvciA8YT4gKG5vdCBzdXBwb3J0ZWQgYnkgbmF0aXZlKVxuLy8gYW5kIGF1dG9tYXRpY2FsbHkgYXNzdW1lIHBvcG92ZXJ0YXJnZXQgaXMgdGhlIGNsb3Nlc3QgcGFyZW50IHBvcG92ZXJcbi8vIGJ1dCByZXNwZWN0IHRoZSBwb3BvdmVydGFyZ2V0IGFuZCBwb3BvdmVydGFyZ2V0YWN0aW9uIGF0dHJpYnV0ZVxuZnVuY3Rpb24gaGFuZGxlUG9wb3ZlckxpbmtDbGljayh7IHRhcmdldCB9OiBFdmVudCkge1xuXHRjb25zdCBjbG9zZSA9XG5cdFx0T1BFTl9QT1BPVkVSUyAmJiAodGFyZ2V0IGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oXCJhLFtwb3BvdmVydGFyZ2V0YWN0aW9uXVwiKTtcblxuXHRpZiAoY2xvc2UpIHtcblx0XHRjb25zdCBhY3Rpb24gPSBhdHRyKGNsb3NlLCBcInBvcG92ZXJ0YXJnZXRhY3Rpb25cIikgfHwgXCJ0b2dnbGVcIjtcblx0XHRjb25zdCBvcGVuID0gYWN0aW9uID09PSBcInNob3dcIiB8fCAoYWN0aW9uID09PSBcImhpZGVcIiA/IGZhbHNlIDogdW5kZWZpbmVkKTtcblx0XHRjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhdHRyKGNsb3NlLCBcInBvcG92ZXJ0YXJnZXRcIikgfHwgXCJcIik7XG5cdFx0Y29uc3QgcG9wb3ZlciA9ICh0YXJnZXQgfHwgY2xvc2UpLmNsb3Nlc3Q8SFRNTEVsZW1lbnQ+KGAuJHtDU1NfUE9QT1ZFUn1gKTtcblxuXHRcdC8vIFBvcG92ZXIgY2FuIGJlIGRpc2Nvbm5ldGVkIGJ5IGNsaWNrIGhhbmRsZXIgZGVlcGVyIGRvd24gaW4gdGhlIERPTSB0aHJlZSBiZWZvcmUgcmVhY2hpbmcgZG9jdW1lbnRcblx0XHRpZiAocG9wb3Zlcj8uaXNDb25uZWN0ZWQgJiYgcG9wb3Zlcj8udG9nZ2xlUG9wb3Zlcilcblx0XHRcdHBvcG92ZXIudG9nZ2xlUG9wb3ZlcihvcGVuKTtcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uKGRvY3VtZW50LCBcInRvZ2dsZVwiLCBoYW5kbGVQb3BvdmVyVG9nZ2xlLCBRVUlDS19FVkVOVCk7IC8vIFVzZSBjYXB0dXJlIHNpbmNlIHRvZ2dsZSBkb2VzIG5vdCBidWJibGVcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlUG9wb3ZlckxpbmtDbGljayk7IC8vIEFsbG93IGA8YT5gIHRvIHVzZSBgcG9wb3ZlcnRhcmdldGAgYXMgd2VsbFxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1RBQkxFID0gc3R5bGVzLnRhYmxlLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlVGFibGVNdXRhdGlvbih0YWJsZXM6IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTFRhYmxlRWxlbWVudD4pIHtcblx0Zm9yIChjb25zdCB0YWJsZSBvZiB0YWJsZXMpIHtcblx0XHRjb25zdCB0aHM6IHN0cmluZ1tdID0gW107IC8vIEFkZCBkYXRhLXRoPVwiXCIgdG8gZWFjaCBjZWxsIHRvIHN1cHBvcnQgZGF0YS1tb2JpbGUgZGVzaWduc1xuXG5cdFx0YXR0cih0YWJsZSwgXCJyb2xlXCIsIFwidGFibGVcIik7IC8vIEFkZCBoZWxwaW5nIHJvbGU9XCJcIiB0byBlbnN1cmUgc2NyZWVuIHJlYWRlcnMgdW5kZXJzdGFuZCB0aGUgdGFibGUgcmVnYXJkbGVzcyBvZiBDU1MgZGlzcGxheVxuXHRcdGlmICh0YWJsZS5jYXB0aW9uKSBhdHRyKHRhYmxlLmNhcHRpb24sIFwicm9sZVwiLCBcImNhcHRpb25cIik7XG5cdFx0Zm9yIChjb25zdCBncm91cCBvZiBbdGFibGUudEhlYWQsIHRhYmxlLnRGb290LCAuLi50YWJsZS50Qm9kaWVzXSlcblx0XHRcdGlmIChncm91cCkge1xuXHRcdFx0XHRhdHRyKGdyb3VwLCBcInJvbGVcIiwgXCJyb3dncm91cFwiKTtcblx0XHRcdFx0Y29uc3QgaXNUYm9keSA9IGdyb3VwLm5vZGVOYW1lID09PSBcIlRCT0RZXCI7XG5cblx0XHRcdFx0Zm9yIChjb25zdCByb3cgb2YgZ3JvdXAucm93cykge1xuXHRcdFx0XHRcdGF0dHIocm93LCBcInJvbGVcIiwgXCJyb3dcIik7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjZWxsIG9mIHJvdy5jZWxscykge1xuXHRcdFx0XHRcdFx0aWYgKGlzVGJvZHkpIGF0dHIoY2VsbCwgXCJkYXRhLXRoXCIsIHRoc1tjZWxsLmNlbGxJbmRleF0gfHwgXCI6ZW1wdHlcIik7XG5cdFx0XHRcdFx0XHRlbHNlIHRocy5wdXNoKGNlbGwuaW5uZXJUZXh0LnRyaW0oKSk7IC8vIFVzaW5nIGlubmVyVGV4dCB0byBvbmx5IGluY2x1ZGUgdmlzaWJsZSB0ZXh0XG5cdFx0XHRcdFx0XHRpZiAoY2VsbC5ub2RlTmFtZSA9PT0gXCJURFwiKSBhdHRyKGNlbGwsIFwicm9sZVwiLCBcImNlbGxcIik7XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0YXR0cihjZWxsLCBcInJvbGVcIiwgaXNUYm9keSA/IFwicm93aGVhZGVyXCIgOiBcImNvbHVtbmhlYWRlclwiKTtcblx0XHRcdFx0XHRcdFx0YXR0cihjZWxsLCBcInNjb3BlXCIsIGlzVGJvZHkgPyBcInJvd1wiIDogXCJjb2xcIik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19UQUJMRSwgaGFuZGxlVGFibGVNdXRhdGlvbiksXG4pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IG9uLCBvbkxvYWRlZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfVE9HR0xFR1JPVVAgPSBgLiR7c3R5bGVzLnRvZ2dsZWdyb3VwLnNwbGl0KFwiIFwiKVswXX1gO1xuXG4vLyBQcmV2ZW50IGJyb3dzZXJzIGZyb20gc2hvd2luZyBkZWZhdWx0IHZhbGlkYXRpb24gYnViYmxlc1xuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlZ3JvdXBLZXlkb3duKGV2ZW50OiBFdmVudCAmIFBhcnRpYWw8S2V5Ym9hcmRFdmVudD4pIHtcblx0Y29uc3QgeyBrZXksIHRhcmdldDogZWwgfSA9IGV2ZW50O1xuXHRjb25zdCBncm91cCA9IGVsIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiBlbC5jbG9zZXN0KENTU19UT0dHTEVHUk9VUCk7XG5cblx0aWYgKCFncm91cCkgcmV0dXJuO1xuXHRpZiAoa2V5ID09PSBcIkVudGVyXCIpIGVsLmNsaWNrKCk7XG5cdGlmIChrZXk/LnN0YXJ0c1dpdGgoXCJBcnJvd1wiKSkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0Y29uc3QgaW5wdXRzID0gZ3JvdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKTtcblx0XHRjb25zdCBpbmRleCA9IFsuLi5pbnB1dHNdLmluZGV4T2YoZWwpO1xuXHRcdGNvbnN0IG1vdmUgPSBrZXkubWF0Y2goL0Fycm93KFJpZ2h0fERvd24pLykgPyAxIDogLTE7XG5cdFx0aW5wdXRzWyhpbnB1dHMubGVuZ3RoICsgaW5kZXggKyBtb3ZlKSAlIGlucHV0cy5sZW5ndGhdPy5mb2N1cygpO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uKGRvY3VtZW50LCBcImtleWRvd25cIiwgaGFuZGxlVG9nZ2xlZ3JvdXBLZXlkb3duKSk7XG4iLCJpbXBvcnQgeyBmbGlwLCB0eXBlIFBsYWNlbWVudCwgc2hpZnQgfSBmcm9tIFwiQGZsb2F0aW5nLXVpL2RvbVwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdGFuY2hvclBvc2l0aW9uLFxuXHRhdHRyLFxuXHRJU19CUk9XU0VSLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdFFVSUNLX0VWRU5ULFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgREVTQ1JJQkVEQlkgPSBcImFyaWEtZGVzY3JpYmVkYnlcIjtcbmNvbnN0IEVTQyA9IFwiRXNjYXBlXCI7XG5jb25zdCBMQUJFTExFREJZID0gXCJhcmlhLWxhYmVsbGVkYnlcIjtcbmNvbnN0IFBPU0lUSU9OX0NTU19QUk9QRVJUWSA9IFwiLS1tdGRzLXRvb2x0aXAtcG9zaXRpb25cIjtcbmNvbnN0IFRIUk9UVExFX0RFTEFZID0gMzAwO1xuY29uc3QgVE9PTFRJUCA9IElTX0JST1dTRVJcblx0PyBPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIHtcblx0XHRcdGNsYXNzTmFtZTogc3R5bGVzLl90b29sdGlwLFxuXHRcdFx0aWQ6IFwibXRkcy10b29sdGlwXCIsXG5cdFx0XHRwb3BvdmVyOiBcIm1hbnVhbFwiLFxuXHRcdH0pXG5cdDogbnVsbDsgLy8gQ3JlYXRlIGEgZHVtbXkgZWxlbWVudCB0byBhdm9pZCBudWxsIGNoZWNrc1xuXG5sZXQgQU5DSE9SOiBFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5sZXQgTEFTVF9DQUxMID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xubGV0IFRIUk9UVExFOiBudW1iZXIgfCBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiA9IDA7XG5cbmZ1bmN0aW9uIGhhbmRsZVRvb2x0aXBNb3ZlKHsgdGFyZ2V0LCB0eXBlLCBrZXkgfTogRXZlbnQgJiB7IGtleT86IHN0cmluZyB9KSB7XG5cdGlmICh0eXBlID09PSBcImtleWRvd25cIiAmJiBrZXkgIT09IEVTQykgcmV0dXJuOyAvLyBBbGxvdyBFU0MgZGlzbWlzcyB0byBmb2xsb3cgaHR0cHM6Ly93d3cudzMub3JnL1dBSS9BUklBL2FwZy9wYXR0ZXJucy90b29sdGlwL1xuXHRjb25zdCB3YWl0ID0gTEFTVF9DQUxMICsgVEhST1RUTEVfREVMQVkgLSBEYXRlLm5vdygpO1xuXHRjbGVhclRpbWVvdXQoVEhST1RUTEUpO1xuXHRUSFJPVFRMRSA9IHNldFRpbWVvdXQoXG5cdFx0aGFuZGxlVG9vbHRpcE1vdmVUaHJvdHRsZWQsXG5cdFx0TWF0aC5tYXgod2FpdCwgMCksXG5cdFx0a2V5ID09PSBFU0MgPyBudWxsIDogdGFyZ2V0LFxuXHQpO1xufVxuXG4vLyBVc2luZyBhIHRocm90dGxlZCBmdW5jdGlvbiB0byBhdm9pZCBwZXJmb3JtYW5jZSBpc3N1ZXNcbmZ1bmN0aW9uIGhhbmRsZVRvb2x0aXBNb3ZlVGhyb3R0bGVkKHRhcmdldDogRWxlbWVudCB8IG51bGwpIHtcblx0TEFTVF9DQUxMID0gRGF0ZS5ub3coKTtcblxuXHQvLyBCdWlsZCBhbmQgYXBwZW5kIHRvb2x0aXAgaWYgbm90IGV4aXN0aW5nXG5cdGlmICghVE9PTFRJUCB8fCB0YXJnZXQgPT09IFRPT0xUSVApIHJldHVybjsgLy8gQWxsb3cgdG9vbHRpcCB0byBiZSBob3ZlcmVkLCBmb2xsb3dpbmcgaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMS8jY29udGVudC1vbi1ob3Zlci1vci1mb2N1c1xuXHRpZiAoIVRPT0xUSVA/LmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZChUT09MVElQKTsgLy8gRW5zdXJlIGNvbm5lY3RlZFxuXHRsZXQgYW5jaG9yID0gdGFyZ2V0Py5jbG9zZXN0Py48RWxlbWVudD4oXCJbZGF0YS10b29sdGlwXVwiKSB8fCBudWxsO1xuXG5cdC8vIE5vIG5lZWQgdG8gdXBkYXRlXG5cdGlmIChhbmNob3IgPT09IEFOQ0hPUikgcmV0dXJuO1xuXG5cdGNvbnN0IGNvbnRlbnQgPSAoYW5jaG9yICYmIGF0dHIoYW5jaG9yLCBcImRhdGEtdG9vbHRpcFwiKSkgfHwgXCJcIjtcblx0Y29uc3QgcG9zaXRpb24gPVxuXHRcdChhbmNob3IgJiYgYXR0cihhbmNob3IsIFwiZGF0YS10b29sdGlwLXBvc2l0aW9uXCIpKSB8fFxuXHRcdHdpbmRvd1xuXHRcdFx0LmdldENvbXB1dGVkU3R5bGUoYW5jaG9yIHx8IGRvY3VtZW50LmJvZHkpXG5cdFx0XHQuZ2V0UHJvcGVydHlWYWx1ZShQT1NJVElPTl9DU1NfUFJPUEVSVFkpXG5cdFx0XHQ/LnRyaW0oKSB8fFxuXHRcdFwidG9wXCI7XG5cblx0Y29uc3QgaXNIaWRkZW4gPVxuXHRcdCFjb250ZW50IHx8XG5cdFx0Y29udGVudCA9PT0gXCJmYWxzZVwiIHx8XG5cdFx0Y29udGVudCA9PT0gXCJ0cnVlXCIgfHxcblx0XHRwb3NpdGlvbiA9PT0gXCJub25lXCI7XG5cblx0aWYgKGlzSGlkZGVuKSBhbmNob3IgPSBudWxsOyAvLyBEbyBub3Qgc2hvdyB0b29sdGlwIGlmIGJvb2xpc2ggdmFsdWVcblx0aWYgKGFuY2hvcikgVE9PTFRJUC50ZXh0Q29udGVudCA9IGNvbnRlbnQ7IC8vIE9ubHkgdXBkYXRlIGNvbnRlbnQgaWYgbmV3IGFuY2hvclxuXG5cdGNvbnN0IGhhZExhYmVsID0gQU5DSE9SICYmIGF0dHIoQU5DSE9SLCBMQUJFTExFREJZKSA9PT0gVE9PTFRJUD8uaWQ7XG5cdGNvbnN0IGhhc0xhYmVsID1cblx0XHQoYW5jaG9yIGluc3RhbmNlb2YgSFRNTEVsZW1lbnRcblx0XHRcdD8gYW5jaG9yLmlubmVyVGV4dFxuXHRcdFx0OiBhbmNob3I/LnRleHRDb250ZW50XG5cdFx0KT8udHJpbSgpIHx8XG5cdFx0YW5jaG9yPy5oYXNBdHRyaWJ1dGUoTEFCRUxMRURCWSkgfHxcblx0XHRhbmNob3I/Lmhhc0F0dHJpYnV0ZShcImFyaWEtbGFiZWxcIik7XG5cblx0QU5DSE9SPy5yZW1vdmVBdHRyaWJ1dGUoaGFkTGFiZWwgPyBMQUJFTExFREJZIDogREVTQ1JJQkVEQlkpOyAvLyBVbmxpbmsgcHJldmlvdXMgYW5jaG9yXG5cdGFuY2hvclBvc2l0aW9uKFRPT0xUSVAsIGZhbHNlKTsgLy8gUmVzZXQgYW5jaG9yIHBvc2l0aW9uXG5cblx0QU5DSE9SID0gYW5jaG9yOyAvLyBTdG9yZSBuZXcgYW5jaG9yIC0gbWlnaHQgYmUgbnVsbCBpZiBubyBuZXcgYW5jaG9yXG5cdGlmIChBTkNIT1IpIGF0dHIoQU5DSE9SLCBoYXNMYWJlbCA/IERFU0NSSUJFREJZIDogTEFCRUxMRURCWSwgVE9PTFRJUD8uaWQpOyAvLyBVc2UgdG9vbHRpcCBhcyBkZXNjcmlwdGlvbiBpZiBhbGxyZWFkeSBoYXMgbGFiZWxcblx0aWYgKEFOQ0hPUikgVE9PTFRJUC5oaWRlUG9wb3ZlcigpOyAvLyBIaWRlIHRvb2x0aXAgc28gaXQgY2FuIGJlIHBsYWNlZCBvbiB0b3AtbGF5ZXIgb24gbmV4dCBzaG93XG5cdFRPT0xUSVAudG9nZ2xlUG9wb3ZlcighIWFuY2hvcik7XG5cdGFuY2hvclBvc2l0aW9uKFRPT0xUSVAsIGFuY2hvciB8fCBmYWxzZSwge1xuXHRcdHBsYWNlbWVudDogcG9zaXRpb24gYXMgUGxhY2VtZW50LFxuXHRcdG1pZGRsZXdhcmU6IFtmbGlwKCksIHNoaWZ0KHsgcGFkZGluZzogMTAgfSldLFxuXHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJibHVyLGZvY3VzLG1vdXNlb3V0LG1vdXNlb3ZlclwiLCBoYW5kbGVUb29sdGlwTW92ZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwia2V5ZG93blwiLCBoYW5kbGVUb29sdGlwTW92ZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwiYmx1clwiLCBoYW5kbGVUb29sdGlwTW92ZSwgUVVJQ0tfRVZFTlQpO1xufSk7XG4iLCIvLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG5cbi8vIHUtZGV0YWlscy50c1xudmFyIFVIVE1MRGV0YWlsc0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgLy8gVXNpbmcgdW5kZXJzY29yZSBpbnN0ZWFkIG9mIHByaXZhdGUgZmllbGRzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgIHRoaXMuX2NvbnRlbnQgPSBudWxsO1xuICAgIHRoaXMuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBuYW1lOiBcInN1bW1hcnlcIiB9KSxcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIsIG51bGwsIHsgcGFydDogXCJkZXRhaWxzLWNvbnRlbnRcIiB9KSxcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYCR7RElTUExBWV9CTE9DS31cbiAgICAgICAgOjpzbG90dGVkKHUtc3VtbWFyeSkgeyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGJsb2NrIH1cblx0XHRcdFx0OjpzbG90dGVkKHUtc3VtbWFyeSk6OmJlZm9yZSB7IGNvbnRlbnQ6ICcnOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IG1hcmdpbi1pbmxpbmU6IC4wNWVtIC4zMTI1ZW07IGJvcmRlci1ibG9jazogLjMxMjVlbSBzb2xpZCB0cmFuc3BhcmVudDsgYm9yZGVyLWlubGluZS1zdGFydDogLjVlbSBzb2xpZCB9XG5cdFx0XHRcdDo6c2xvdHRlZCh1LXN1bW1hcnlbYXJpYS1leHBhbmRlZD1cInRydWVcIl0pOjpiZWZvcmUgeyByb3RhdGU6IDkwZGVnIH1cblx0XHRcdFx0Omhvc3QgPiBbcGFydD1cImRldGFpbHMtY29udGVudFwiXTpub3QoW2hpZGRlbj1cIlwiXSkgeyBkaXNwbGF5OiBibG9jayB9YFxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcIm9wZW5cIl07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdmFyIF9hMjtcbiAgICB0aGlzLl9jb250ZW50ID0gKF9hMiA9IHRoaXMuc2hhZG93Um9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jaGlsZHJlblsxXTtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcImdyb3VwXCIpO1xuICAgIG9uKHRoaXMuX2NvbnRlbnQsIFwiYmVmb3JlbWF0Y2hcIiwgdGhpcyk7XG4gICAgb24odGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMuX2NvbnRlbnQpIG9mZih0aGlzLl9jb250ZW50LCBcImJlZm9yZW1hdGNoXCIsIHRoaXMpO1xuICAgIG9mZih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgdGhpcy5fY29udGVudCA9IG51bGw7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIHByZXYsIG5leHQpIHtcbiAgICBjb25zdCBoaWRlID0gXCJvbmJlZm9yZW1hdGNoXCIgaW4gdGhpcyA/IFwidW50aWwtZm91bmRcIiA6IHRydWU7XG4gICAgY29uc3Qgb3BlbiA9IHRoaXMub3BlbjtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIHRoaXMuY2hpbGRyZW4pXG4gICAgICBpZiAoZWwubm9kZU5hbWUgPT09IFwiVS1TVU1NQVJZXCIpIGF0dHIoZWwsIFwiYXJpYS1leHBhbmRlZFwiLCBgJHtvcGVufWApO1xuICAgIGlmICh0aGlzLl9jb250ZW50KSB7XG4gICAgICBhdHRyKHRoaXMuX2NvbnRlbnQsIFwiYXJpYS1oaWRkZW5cIiwgYCR7IW9wZW59YCk7XG4gICAgICB0aGlzLl9jb250ZW50LmhpZGRlbiA9IG9wZW4gPyBmYWxzZSA6IGhpZGU7XG4gICAgfVxuICAgIGlmIChvcGVuICYmIHRoaXMubmFtZSkge1xuICAgICAgY29uc3QgdURldGFpbHNMaXN0ID0gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgJHt0aGlzLm5vZGVOYW1lfVtuYW1lPVwiJHt0aGlzLm5hbWV9XCJdYFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgdURldGFpbHMgb2YgdURldGFpbHNMaXN0KVxuICAgICAgICBpZiAodURldGFpbHMgIT09IHRoaXMpIHVEZXRhaWxzLm9wZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHByb3AgPT09IFwib3BlblwiICYmIHByZXYgPT09IG51bGwgIT09IChuZXh0ID09PSBudWxsKSlcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJ0b2dnbGVcIikpO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3Qgc3VtbWFyeSA9IHRoaXMucXVlcnlTZWxlY3RvcihcIjpzY29wZSA+IHUtc3VtbWFyeVwiKTtcbiAgICBjb25zdCBpc1N1bW1hcnkgPSBzdW1tYXJ5ID09IG51bGwgPyB2b2lkIDAgOiBzdW1tYXJ5LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJiZWZvcmVtYXRjaFwiKSB0aGlzLm9wZW4gPSB0cnVlO1xuICAgIGlmIChpc1N1bW1hcnkgJiYgZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIGFzQnV0dG9uKGV2ZW50KTtcbiAgICBpZiAoaXNTdW1tYXJ5ICYmIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikgdGhpcy5vcGVuID0gIXRoaXMub3BlbjtcbiAgfVxuICBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJvcGVuXCIpO1xuICB9XG4gIHNldCBvcGVuKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcIm9wZW5cIiwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgXCJuYW1lXCIpIHx8IFwiXCI7XG4gIH1cbiAgc2V0IG5hbWUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwibmFtZVwiLCB2YWx1ZSk7XG4gIH1cbn07XG52YXIgVUhUTUxTdW1tYXJ5RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJidXR0b25cIik7XG4gICAgdGhpcy5zbG90ID0gXCJzdW1tYXJ5XCI7XG4gICAgdGhpcy50YWJJbmRleCA9IDA7XG4gIH1cbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LWRldGFpbHNcIiwgVUhUTUxEZXRhaWxzRWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXN1bW1hcnlcIiwgVUhUTUxTdW1tYXJ5RWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MRGV0YWlsc0VsZW1lbnQsIFVIVE1MU3VtbWFyeUVsZW1lbnQgfTtcbiIsIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19GSVJFRk9YID0gSVNfQlJPV1NFUiAmJiAvZmlyZWZveC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfSU9TID0gSVNfQlJPV1NFUiAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZ2V0TGFiZWwgPSAoZWwpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9IGdldFJvb3QoZWwpO1xuICBjb25zdCBsYWJlbCA9IGF0dHIoZWwsIFwiYXJpYS1sYWJlbFwiKSB8fCBcIlwiO1xuICBjb25zdCBsYWJlbHMgPSAoKF9hMiA9IGF0dHIoZWwsIFwiYXJpYS1sYWJlbGxlZGJ5XCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKS5zcGxpdCgvXFxzKy8pKSB8fCBbXTtcbiAgcmV0dXJuIFtcbiAgICAuLi5sYWJlbHMubWFwKChpZDIpID0+IHJvb3QgPT0gbnVsbCA/IHZvaWQgMCA6IHJvb3QucXVlcnlTZWxlY3RvcihgW2lkPVwiJHtpZDJ9XCJdYCkpLFxuICAgIC8vIEdldCBhbGwgbGFiZWxsZWRieSBlbGVtZW50c1xuICAgIC4uLkFycmF5LmZyb20oZWwubGFiZWxzIHx8IFtdKVxuICAgIC8vIEdldCBhbGwgPGxhYmVsPiBlbGVtZW50c1xuICBdLnJlZHVjZSgoYWNjLCBlbDIpID0+IHtcbiAgICB2YXIgX2EzO1xuICAgIHJldHVybiBhY2MgfHwgKChfYTMgPSBlbDIgPT0gbnVsbCA/IHZvaWQgMCA6IGVsMi5pbm5lclRleHQpID09IG51bGwgPyB2b2lkIDAgOiBfYTMudHJpbSgpKSB8fCBcIlwiO1xuICB9LCBsYWJlbCk7XG59O1xuXG4vLyB1LXByb2dyZXNzLnRzXG52YXIgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xudmFyIFVIVE1MUHJvZ3Jlc3NFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiYXJpYS1sYWJlbFwiLCBcImFyaWEtbGFiZWxsZWRieVwiLCBcInZhbHVlXCIsIFwibWF4XCJdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiLCBudWxsLCB7IGhpZGRlbjogXCJcIiB9KSxcbiAgICAgIC8vIFNsb3QgaGlkaW5nIGNvbnRlbnQgYWxsb3dzIGxlZ2FjeSBicm93c2VyIHRvIGRpc3BsYXkgZmFsbGJhY2sgdGV4dFxuICAgICAgY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgYm9yZGVyOiAxcHggc29saWQ7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgaGVpZ2h0OiAuNWVtOyB3aWR0aDogMTBlbTsgb3ZlcmZsb3c6IGhpZGRlbiB9XG4gICAgICAgIDpob3N0OjpiZWZvcmUgeyBjb250ZW50OiAnJzsgZGlzcGxheTogYmxvY2s7IGhlaWdodDogMTAwJTsgYmFja2dyb3VuZDogY3VycmVudENvbG9yOyB3aWR0aDogdmFyKC0tcGVyY2VudGFnZSwgMCUpOyB0cmFuc2l0aW9uOiB3aWR0aCAuMnMgfVxuICAgICAgICA6aG9zdCg6bm90KFt2YWx1ZV0pKSB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZyxjdXJyZW50Q29sb3IgMjUlLCB0cmFuc3BhcmVudCA1MCUsIGN1cnJlbnRDb2xvciA3NSUpIDUwJS80MDAlIH1cbiAgICAgICAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiBuby1wcmVmZXJlbmNlKSB7IDpob3N0IHsgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlIDJzIGxpbmVhciBpbmZpbml0ZSB9ICB9XG4gICAgICAgIEBrZXlmcmFtZXMgaW5kZXRlcm1pbmF0ZSB7IGZyb20geyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IDEwMCUgfSB0byB7IGJhY2tncm91bmQtcG9zaXRpb24teDogMCB9IH1gXG4gICAgICApXG4gICAgKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoU0tJUF9BVFRSX0NIQU5HRSkgcmV0dXJuO1xuICAgIFNLSVBfQVRUUl9DSEFOR0UgPSB0cnVlO1xuICAgIGNvbnN0IHJvbGVJbWFnZSA9IElTX0lPUyB8fCBJU19GSVJFRk9YO1xuICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKHRoaXMucG9zaXRpb24gKiAxMDApKTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wZXJjZW50YWdlXCIsIGAke3BlcmNlbnRhZ2V9JWApO1xuICAgIGxldCBsYWJlbCA9IGdldExhYmVsKHRoaXMpO1xuICAgIGlmIChyb2xlSW1hZ2UpIGxhYmVsID0gYCR7bGFiZWwucmVwbGFjZSgvXFxkKyUkLywgXCJcIil9ICR7cGVyY2VudGFnZX0lYDtcbiAgICBpZiAoSVNfRklSRUZPWCkgZm9yIChjb25zdCBlbCBvZiB0aGlzLmxhYmVscykgYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIsIGxhYmVsKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1idXN5XCIsIGAke3RoaXMucG9zaXRpb24gPT09IC0xfWApO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWxhYmVsXCIsIGxhYmVsLnRyaW0oKSk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtbGFiZWxsZWRieVwiLCBudWxsKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW1heFwiLCBcIjEwMFwiKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW1pblwiLCBcIjBcIik7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVub3dcIiwgYCR7cGVyY2VudGFnZX1gKTtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCByb2xlSW1hZ2UgPyBcImltZ1wiIDogXCJwcm9ncmVzc2JhclwiKTtcbiAgICBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG4gIH1cbiAgZ2V0IGxhYmVscygpIHtcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuY2xvc2VzdChcImxhYmVsOm5vdChbZm9yXSlcIik7XG4gICAgY29uc3QgaWQyID0gdXNlSWQodGhpcyk7XG4gICAgaWYgKGxhYmVsKSBsYWJlbC5odG1sRm9yID0gaWQyO1xuICAgIGNvbnN0IGVsID0gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYGxhYmVsW2Zvcj1cIiR7aWQyfVwiXWBcbiAgICApO1xuICAgIHJldHVybiBlbDtcbiAgfVxuICBnZXQgcG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUgPT09IG51bGwgPyAtMSA6IE1hdGgubWluKHRoaXMudmFsdWUgLyB0aGlzLm1heCwgMSk7XG4gIH1cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiBnZXROdW1iZXIodGhpcywgXCJ2YWx1ZVwiKTtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICBzZXROdW1iZXIodGhpcywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IG1heCgpIHtcbiAgICByZXR1cm4gZ2V0TnVtYmVyKHRoaXMsIFwibWF4XCIpIHx8IDE7XG4gIH1cbiAgc2V0IG1heChtYXgpIHtcbiAgICBzZXROdW1iZXIodGhpcywgXCJtYXhcIiwgbWF4KTtcbiAgfVxufTtcbi8vIFByZXZlbnQgQ2hyb21lIERldlRvb2xzIHdhcm5pbmcgYWJvdXQgPGxhYmVsIGZvcj1cIlwiPiBwb2ludGluZyB0byA8dS1wcm9ncmVzcz5cblVIVE1MUHJvZ3Jlc3NFbGVtZW50LmZvcm1Bc3NvY2lhdGVkID0gdHJ1ZTtcbnZhciBpc051bWVyaWMgPSAodmFsdWUpID0+ICFOdW1iZXIuaXNOYU4oTnVtYmVyLnBhcnNlRmxvYXQoYCR7dmFsdWV9YCkpICYmIE51bWJlci5pc0Zpbml0ZShOdW1iZXIodmFsdWUpKTtcbnZhciBnZXROdW1iZXIgPSAoZWwsIGtleSkgPT4ge1xuICBjb25zdCB2YWx1ZSA9IGF0dHIoZWwsIGtleSk7XG4gIHJldHVybiBpc051bWVyaWModmFsdWUpID8gTWF0aC5tYXgoMCwgTnVtYmVyLnBhcnNlRmxvYXQodmFsdWUpKSA6IG51bGw7XG59O1xudmFyIHNldE51bWJlciA9IChlbCwga2V5LCB2YWwpID0+IHtcbiAgaWYgKHZhbCA9PT0gbnVsbCB8fCBpc051bWVyaWModmFsKSkgYXR0cihlbCwga2V5LCBgJHt2YWx9YCk7XG4gIGVsc2UgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2V0IG5vbi1udW1lcmljICcke2F0dHJ9JzogJyR7dmFsfSdgKTtcbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXByb2dyZXNzXCIsIFVIVE1MUHJvZ3Jlc3NFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxQcm9ncmVzc0VsZW1lbnQgfTtcbiJdLCJuYW1lcyI6WyJfX2RlZlByb3AiLCJfX2dldE93blByb3BTeW1ib2xzIiwiX19oYXNPd25Qcm9wIiwiX19wcm9wSXNFbnVtIiwiX19kZWZOb3JtYWxQcm9wIiwib2JqIiwia2V5IiwidmFsdWUiLCJfX3NwcmVhZFZhbHVlcyIsImEiLCJiIiwicHJvcCIsIklTX0JST1dTRVIiLCJJU19BTkRST0lEIiwiSVNfRklSRUZPWCIsIklTX0lPUyIsIl9hIiwiRk9DVVNfT1VUTElORSIsIlVIVE1MRWxlbWVudCIsImF0dHIiLCJlbCIsIm5hbWUiLCJldmVudHMiLCJhY3Rpb24iLCJlbGVtZW50IiwicmVzdCIsInR5cGUiLCJvbiIsIm9mZiIsIm9ic2VydmVycyIsIm11dGF0aW9uT2JzZXJ2ZXIiLCJvcHRpb25zIiwib2JzZXJ2ZXIiLCJkZXRhaWwiLCJhc0J1dHRvbiIsImV2ZW50IiwiaXNDbGljayIsImdldFJvb3QiLCJub2RlIiwiX2EyIiwicm9vdCIsImlkIiwidXNlSWQiLCJjcmVhdGVFbGVtZW50IiwidGFnTmFtZSIsInRleHQyIiwiYXR0cnMiLCJ2YWwiLCJjdXN0b21FbGVtZW50cyIsImluc3RhbmNlIiwiTElWRSIsIkxJVkVfU1JfRklYIiwic3BlYWsiLCJzZXRWYWx1ZSIsImlucHV0IiwiZGF0YSIsIl9iIiwicHJvdG8iLCJJU19QUkVTUyIsImlzTW91c2VEb3duIiwiRVZFTlRTIiwiRVZFTlRfT05DRSIsIklTX0ZJUkVGT1hfREVTS1RPUCIsIklTX01PQklMRSIsIkZBTFNFIiwiVEVYVFMiLCJVSFRNTENvbWJvYm94RWxlbWVudCIsInJlbmRlciIsInN5bmNJbnB1dFZhbHVlIiwiXyIsInRhcmdldCIsImlzRGlzYWJsZWQiLCJvbkJsdXIiLCJvbkNsaWNrIiwib25Gb2N1cyIsIm9uSW5wdXQiLCJvbktleURvd24iLCJ0YWciLCJ0ZXh0IiwiaXNEYXRhIiwiY29udHJvbCIsInNlbGYiLCJfZm9jdXMiLCJfdGV4dHMiLCJpdGVtcyIsImxpc3QiLCJtdWx0aXBsZSIsImxhYmVsIiwiZWRpdHMiLCJhZGRlZE5vZGVzIiwicmVtb3ZlZE5vZGVzIiwic2hvdWxkQW5ub3VuY2UiLCJhcmlhRXhwYW5kZWQiLCJpbnB1dE1vZGUiLCJuZXh0Rm9jdXMiLCJpc1JlbW92ZSIsIl9hMyIsImlkeCIsInNlbGVjdCIsInJlbW92ZSIsIml0ZW0yIiwib3B0aW9uIiwibGFiZWwyIiwiYXJpYSIsIm9wdCIsIml0ZW0iLCJzeW5jQ2xlYXJXaXRoSW5wdXQiLCJzeW5jT3B0aW9uc1dpdGhJdGVtcyIsIl9zcGVhayIsInZhbHVlcyIsImRpc3BhdGNoTWF0Y2giLCJjaGFuZ2UiLCJjcmVhdGFibGUiLCJxdWVyeSIsIm1hdGNoIiwibyIsImRpc3BhdGNoQ2hhbmdlIiwicmVtb3ZhYmxlIiwiYWRkIiwiaSIsIm9uQmx1cnJlZCIsIngiLCJ5IiwiY2xlYXIiLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiLCJyZXBlYXQiLCJpc0NvbnRyb2wiLCJpblRleHQiLCJpbmRleCIsImZvcm0iLCJTQUZFX0xBQkVMTEVEQlkiLCJESVNQTEFZX0JMT0NLIiwiYXR0YWNoU3R5bGUiLCJjc3MiLCJBUklBX0NPTlRST0xTIiwiQVJJQV9TRUxFQ1RFRCIsIlVIVE1MVGFic0VsZW1lbnQiLCJxdWVyeVdpdGhvdXROZXN0ZWQiLCJnZXRTZWxlY3RlZEluZGV4Iiwic2V0U2VsZWN0ZWQiLCJVSFRNTFRhYkxpc3RFbGVtZW50IiwidGFiIiwidGFicyIsInByZXYiLCJuZXh0IiwiU0tJUF9BVFRSX0NIQU5HRSIsIlVIVE1MVGFiRWxlbWVudCIsInBhbmVscyIsIm5leHRQYW5lbCIsImdldFBhbmVsIiwicGFuZWwiLCJ0YWJsaXN0IiwidGFiTGlzdCIsIlVIVE1MVGFiUGFuZWxFbGVtZW50IiwiaXNGb2N1c2FibGUiLCJpZDIiLCJtaW4iLCJtYXgiLCJyb3VuZCIsImZsb29yIiwiY3JlYXRlQ29vcmRzIiwidiIsIm9wcG9zaXRlU2lkZU1hcCIsIm9wcG9zaXRlQWxpZ25tZW50TWFwIiwiY2xhbXAiLCJzdGFydCIsImVuZCIsImV2YWx1YXRlIiwicGFyYW0iLCJnZXRTaWRlIiwicGxhY2VtZW50IiwiZ2V0QWxpZ25tZW50IiwiZ2V0T3Bwb3NpdGVBeGlzIiwiYXhpcyIsImdldEF4aXNMZW5ndGgiLCJ5QXhpc1NpZGVzIiwiZ2V0U2lkZUF4aXMiLCJnZXRBbGlnbm1lbnRBeGlzIiwiZ2V0QWxpZ25tZW50U2lkZXMiLCJyZWN0cyIsInJ0bCIsImFsaWdubWVudCIsImFsaWdubWVudEF4aXMiLCJsZW5ndGgiLCJtYWluQWxpZ25tZW50U2lkZSIsImdldE9wcG9zaXRlUGxhY2VtZW50IiwiZ2V0RXhwYW5kZWRQbGFjZW1lbnRzIiwib3Bwb3NpdGVQbGFjZW1lbnQiLCJnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCIsImxyUGxhY2VtZW50IiwicmxQbGFjZW1lbnQiLCJ0YlBsYWNlbWVudCIsImJ0UGxhY2VtZW50IiwiZ2V0U2lkZUxpc3QiLCJzaWRlIiwiaXNTdGFydCIsImdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMiLCJmbGlwQWxpZ25tZW50IiwiZGlyZWN0aW9uIiwiZXhwYW5kUGFkZGluZ09iamVjdCIsInBhZGRpbmciLCJnZXRQYWRkaW5nT2JqZWN0IiwicmVjdFRvQ2xpZW50UmVjdCIsInJlY3QiLCJ3aWR0aCIsImhlaWdodCIsImNvbXB1dGVDb29yZHNGcm9tUGxhY2VtZW50IiwiX3JlZiIsInJlZmVyZW5jZSIsImZsb2F0aW5nIiwic2lkZUF4aXMiLCJhbGlnbkxlbmd0aCIsImlzVmVydGljYWwiLCJjb21tb25YIiwiY29tbW9uWSIsImNvbW1vbkFsaWduIiwiY29vcmRzIiwiY29tcHV0ZVBvc2l0aW9uIiwiY29uZmlnIiwic3RyYXRlZ3kiLCJtaWRkbGV3YXJlIiwicGxhdGZvcm0iLCJ2YWxpZE1pZGRsZXdhcmUiLCJzdGF0ZWZ1bFBsYWNlbWVudCIsIm1pZGRsZXdhcmVEYXRhIiwicmVzZXRDb3VudCIsImZuIiwibmV4dFgiLCJuZXh0WSIsInJlc2V0IiwiZGV0ZWN0T3ZlcmZsb3ciLCJzdGF0ZSIsIl9hd2FpdCRwbGF0Zm9ybSRpc0VsZSIsImVsZW1lbnRzIiwiYm91bmRhcnkiLCJyb290Qm91bmRhcnkiLCJlbGVtZW50Q29udGV4dCIsImFsdEJvdW5kYXJ5IiwicGFkZGluZ09iamVjdCIsImNsaXBwaW5nQ2xpZW50UmVjdCIsIm9mZnNldFBhcmVudCIsIm9mZnNldFNjYWxlIiwiZWxlbWVudENsaWVudFJlY3QiLCJmbGlwIiwiX21pZGRsZXdhcmVEYXRhJGFycm93IiwiX21pZGRsZXdhcmVEYXRhJGZsaXAiLCJpbml0aWFsUGxhY2VtZW50IiwiY2hlY2tNYWluQXhpcyIsImNoZWNrQ3Jvc3NBeGlzIiwic3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIiwiZmFsbGJhY2tTdHJhdGVneSIsImZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24iLCJkZXRlY3RPdmVyZmxvd09wdGlvbnMiLCJpbml0aWFsU2lkZUF4aXMiLCJpc0Jhc2VQbGFjZW1lbnQiLCJmYWxsYmFja1BsYWNlbWVudHMiLCJoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uIiwicGxhY2VtZW50cyIsIm92ZXJmbG93Iiwib3ZlcmZsb3dzIiwib3ZlcmZsb3dzRGF0YSIsInNpZGVzIiwiX21pZGRsZXdhcmVEYXRhJGZsaXAyIiwiX292ZXJmbG93c0RhdGEkZmlsdGVyIiwibmV4dEluZGV4IiwibmV4dFBsYWNlbWVudCIsImQiLCJyZXNldFBsYWNlbWVudCIsIl9vdmVyZmxvd3NEYXRhJGZpbHRlcjIiLCJjdXJyZW50U2lkZUF4aXMiLCJhY2MiLCJzaGlmdCIsImxpbWl0ZXIiLCJjcm9zc0F4aXMiLCJtYWluQXhpcyIsIm1haW5BeGlzQ29vcmQiLCJjcm9zc0F4aXNDb29yZCIsIm1pblNpZGUiLCJtYXhTaWRlIiwibGltaXRlZENvb3JkcyIsInNpemUiLCJfc3RhdGUkbWlkZGxld2FyZURhdGEiLCJfc3RhdGUkbWlkZGxld2FyZURhdGEyIiwiYXBwbHkiLCJpc1lBeGlzIiwiaGVpZ2h0U2lkZSIsIndpZHRoU2lkZSIsIm1heGltdW1DbGlwcGluZ0hlaWdodCIsIm1heGltdW1DbGlwcGluZ1dpZHRoIiwib3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQiLCJvdmVyZmxvd0F2YWlsYWJsZVdpZHRoIiwibm9TaGlmdCIsImF2YWlsYWJsZUhlaWdodCIsImF2YWlsYWJsZVdpZHRoIiwieE1pbiIsInhNYXgiLCJ5TWluIiwieU1heCIsIm5leHREaW1lbnNpb25zIiwiaGFzV2luZG93IiwiZ2V0Tm9kZU5hbWUiLCJpc05vZGUiLCJnZXRXaW5kb3ciLCJfbm9kZSRvd25lckRvY3VtZW50IiwiZ2V0RG9jdW1lbnRFbGVtZW50IiwiaXNFbGVtZW50IiwiaXNIVE1MRWxlbWVudCIsImlzU2hhZG93Um9vdCIsImludmFsaWRPdmVyZmxvd0Rpc3BsYXlWYWx1ZXMiLCJpc092ZXJmbG93RWxlbWVudCIsIm92ZXJmbG93WCIsIm92ZXJmbG93WSIsImRpc3BsYXkiLCJnZXRDb21wdXRlZFN0eWxlIiwidGFibGVFbGVtZW50cyIsImlzVGFibGVFbGVtZW50IiwidG9wTGF5ZXJTZWxlY3RvcnMiLCJpc1RvcExheWVyIiwic2VsZWN0b3IiLCJ0cmFuc2Zvcm1Qcm9wZXJ0aWVzIiwid2lsbENoYW5nZVZhbHVlcyIsImNvbnRhaW5WYWx1ZXMiLCJpc0NvbnRhaW5pbmdCbG9jayIsImVsZW1lbnRPckNzcyIsIndlYmtpdCIsImlzV2ViS2l0IiwiZ2V0Q29udGFpbmluZ0Jsb2NrIiwiY3VycmVudE5vZGUiLCJnZXRQYXJlbnROb2RlIiwiaXNMYXN0VHJhdmVyc2FibGVOb2RlIiwibGFzdFRyYXZlcnNhYmxlTm9kZU5hbWVzIiwiZ2V0Tm9kZVNjcm9sbCIsInJlc3VsdCIsImdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yIiwicGFyZW50Tm9kZSIsImdldE92ZXJmbG93QW5jZXN0b3JzIiwidHJhdmVyc2VJZnJhbWVzIiwiX25vZGUkb3duZXJEb2N1bWVudDIiLCJzY3JvbGxhYmxlQW5jZXN0b3IiLCJpc0JvZHkiLCJ3aW4iLCJmcmFtZUVsZW1lbnQiLCJnZXRGcmFtZUVsZW1lbnQiLCJnZXRDc3NEaW1lbnNpb25zIiwiaGFzT2Zmc2V0Iiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJzaG91bGRGYWxsYmFjayIsInVud3JhcEVsZW1lbnQiLCJnZXRTY2FsZSIsImRvbUVsZW1lbnQiLCIkIiwibm9PZmZzZXRzIiwiZ2V0VmlzdWFsT2Zmc2V0cyIsInNob3VsZEFkZFZpc3VhbE9mZnNldHMiLCJpc0ZpeGVkIiwiZmxvYXRpbmdPZmZzZXRQYXJlbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJpbmNsdWRlU2NhbGUiLCJpc0ZpeGVkU3RyYXRlZ3kiLCJjbGllbnRSZWN0Iiwic2NhbGUiLCJ2aXN1YWxPZmZzZXRzIiwib2Zmc2V0V2luIiwiY3VycmVudFdpbiIsImN1cnJlbnRJRnJhbWUiLCJpZnJhbWVTY2FsZSIsImlmcmFtZVJlY3QiLCJnZXRXaW5kb3dTY3JvbGxCYXJYIiwibGVmdFNjcm9sbCIsImdldEhUTUxPZmZzZXQiLCJkb2N1bWVudEVsZW1lbnQiLCJzY3JvbGwiLCJpZ25vcmVTY3JvbGxiYXJYIiwiaHRtbFJlY3QiLCJjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCIsInRvcExheWVyIiwib2Zmc2V0cyIsImlzT2Zmc2V0UGFyZW50QW5FbGVtZW50Iiwib2Zmc2V0UmVjdCIsImh0bWxPZmZzZXQiLCJnZXRDbGllbnRSZWN0cyIsImdldERvY3VtZW50UmVjdCIsImh0bWwiLCJib2R5IiwiZ2V0Vmlld3BvcnRSZWN0IiwidmlzdWFsVmlld3BvcnQiLCJ2aXN1YWxWaWV3cG9ydEJhc2VkIiwiYWJzb2x1dGVPckZpeGVkIiwiZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QiLCJnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IiLCJjbGlwcGluZ0FuY2VzdG9yIiwiaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yIiwic3RvcE5vZGUiLCJnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnMiLCJjYWNoZSIsImNhY2hlZFJlc3VsdCIsImN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlIiwiZWxlbWVudElzRml4ZWQiLCJjb21wdXRlZFN0eWxlIiwiY3VycmVudE5vZGVJc0NvbnRhaW5pbmciLCJhbmNlc3RvciIsImdldENsaXBwaW5nUmVjdCIsImNsaXBwaW5nQW5jZXN0b3JzIiwiZmlyc3RDbGlwcGluZ0FuY2VzdG9yIiwiY2xpcHBpbmdSZWN0IiwiYWNjUmVjdCIsImdldERpbWVuc2lvbnMiLCJnZXRSZWN0UmVsYXRpdmVUb09mZnNldFBhcmVudCIsInNldExlZnRSVExTY3JvbGxiYXJPZmZzZXQiLCJpc1N0YXRpY1Bvc2l0aW9uZWQiLCJnZXRUcnVlT2Zmc2V0UGFyZW50IiwicG9seWZpbGwiLCJyYXdPZmZzZXRQYXJlbnQiLCJnZXRPZmZzZXRQYXJlbnQiLCJzdmdPZmZzZXRQYXJlbnQiLCJnZXRFbGVtZW50UmVjdHMiLCJnZXRPZmZzZXRQYXJlbnRGbiIsImdldERpbWVuc2lvbnNGbiIsImZsb2F0aW5nRGltZW5zaW9ucyIsImlzUlRMIiwicmVjdHNBcmVFcXVhbCIsIm9ic2VydmVNb3ZlIiwib25Nb3ZlIiwiaW8iLCJ0aW1lb3V0SWQiLCJjbGVhbnVwIiwiX2lvIiwicmVmcmVzaCIsInNraXAiLCJ0aHJlc2hvbGQiLCJlbGVtZW50UmVjdEZvclJvb3RNYXJnaW4iLCJpbnNldFRvcCIsImluc2V0UmlnaHQiLCJpbnNldEJvdHRvbSIsImluc2V0TGVmdCIsImlzRmlyc3RVcGRhdGUiLCJoYW5kbGVPYnNlcnZlIiwiZW50cmllcyIsInJhdGlvIiwiYXV0b1VwZGF0ZSIsInVwZGF0ZSIsImFuY2VzdG9yU2Nyb2xsIiwiYW5jZXN0b3JSZXNpemUiLCJlbGVtZW50UmVzaXplIiwibGF5b3V0U2hpZnQiLCJhbmltYXRpb25GcmFtZSIsInJlZmVyZW5jZUVsIiwiYW5jZXN0b3JzIiwiY2xlYW51cElvIiwicmVvYnNlcnZlRnJhbWUiLCJyZXNpemVPYnNlcnZlciIsImZpcnN0RW50cnkiLCJfcmVzaXplT2JzZXJ2ZXIiLCJmcmFtZUlkIiwicHJldlJlZlJlY3QiLCJmcmFtZUxvb3AiLCJuZXh0UmVmUmVjdCIsIl9yZXNpemVPYnNlcnZlcjIiLCJzaGlmdCQxIiwiZmxpcCQxIiwic2l6ZSQxIiwibWVyZ2VkT3B0aW9ucyIsInBsYXRmb3JtV2l0aENhY2hlIiwiY29tcHV0ZVBvc2l0aW9uJDEiLCJRVUlDS19FVkVOVCIsImRlYm91bmNlIiwiY2FsbGJhY2siLCJkZWxheSIsInRpbWVyIiwiYXJncyIsIlVVSUQiLCJVTkJJTkQiLCJvbkxvYWRlZCIsInJ1biIsInVuYmluZCIsIkFOQ0hPUkVEIiwiYW5jaG9yUG9zaXRpb24iLCJhbmNob3IiLCJjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyIiwicXVldWUiLCJvbkZyYW1lIiwib25UaW1lciIsIk1VVEFUT1JTIiwib25NdXRhdGlvbiIsImNsYXNzTmFtZSIsImVsZW1zIiwibXV0YXRvciIsImlzSW5wdXRMaWtlIiwiQ1NTX0JSRUFEQ1JVTUJTIiwic3R5bGVzIiwiQ1NTX0NISVAiLCJDU1NfSEVMUFRFWFQiLCJDU1NfUEFHSU5BVElPTiIsIkNMSUNLUyIsIk1BVE9NTyIsImFuYWx5dGljcyIsImVuYWJsZWQiLCJtYXRvbW9JZCIsIm1hdG9tb1RhZ01hbmFnZXJJZCIsInNyYyIsInVybCIsInRpdGxlIiwiY2F0ZWdvcnkiLCJyZXN1bHRzIiwiaGFuZGxlVHJhY2siLCJwcm9jZXNzVHJhY2siLCJoZWFkaW5nIiwiZ3JvdXAiLCJwb3BvdmVyIiwib3BlbiIsInN0eWxlIiwiaGVhZCIsInNoZWV0IiwiZm9yY2UiLCJDU1NfQVBQIiwiQ1NTX1NUSUNLWSIsIkNTU19UT0dHTEUiLCJDU1NfU0lERUJBUiIsInVzZVRyYW5zaXRpb24iLCJ0b2dnbGVBcHBFeHBhbmRlZCIsImhhbmRsZUFwcFRvZ2dsZUNsaWNrIiwic3RvcCIsImxpbmsiLCJjbG9zZVNpZGViYXIiLCJzaWRlYmFyIiwiTUlOX1kiLCJTQ1JPTExfVVAiLCJTVElDSyIsIlNUSUNLX0VMIiwiU1RJQ0tfSCIsIlNUSUNLX1kiLCJTVFVDSyIsIldJTl9IIiwiV0lOX1kiLCJoYW5kbGVNdXRhdGlvbiIsInN0aWNreSIsImhhbmRsZUFwcFNjcm9sbCIsIk5FWFRfWSIsIk5FWFRfVVAiLCJnZXRTdGVwcyIsIm5vdyIsInNob3ciLCJvZmZzZXQiLCJwYWdlcyIsInBhZ2luYXRpb24iLCJjdXJyZW50IiwidG90YWwiLCJwYWdlIiwiaGFuZGxlQnJlYWRjcnVtYnNNdXRhdGlvbiIsImJyZWFkY3J1bWJzIiwiYnJlYWRjdW1icyIsImNydW1iIiwiQ1NTX0RJQUxPRyIsIkRJQUxPR1MiLCJoYW5kbGVNb2RhbCIsImRpYWxvZyIsImhhbmRsZURpYWxvZ0NsaWNrIiwiaGFuZGxlRXJyb3N1bW1hcnlJbmplY3QiLCJmaXJzdCIsIkRJU0FCTEVEIiwiU0VMRUNURUQiLCJVSFRNTE9wdGlvbkVsZW1lbnQiLCJMSVZFX1RJTUVSIiwiSU5QVVRfREVCT1VOQ0UiLCJFVkVOVFNfSU5QVVQiLCJVSFRNTERhdGFMaXN0RWxlbWVudCIsImRpc2Nvbm5lY3RJbnB1dCIsIl9wcmV2Iiwic2V0dXBJbnB1dCIsInNldEV4cGFuZGVkIiwiX2MiLCJpc1BvcG92ZXIiLCJpc0lucHV0IiwicmVsYXRlZFRhcmdldCIsImFsdEtleSIsImN0cmxLZXkiLCJzaGlmdEtleSIsIm1ldGFLZXkiLCJpc0VzY2FwZSIsIl9yb290IiwiX2lucHV0IiwiZmlsdGVyIiwiaGlkZGVuIiwidmlzaWJsZSIsIkNTU19GSUVMRCIsIkNTU19WQUxJREFUSU9OUyIsIkNTU19WQUxJREFUSU9OIiwiZ2V0VGV4dCIsImhhbmRsZUZpZWxkTXV0YXRpb24iLCJmaWVsZHMiLCJ2YWxpZGF0ZSIsImZpZWxkIiwibGFiZWxzIiwiZGVzY3MiLCJ2YWxpZHMiLCJjb21ib2JveCIsInZhbGlkIiwiZGVzYyIsInJlbmRlckNvbWJvYm94IiwicmVuZGVyQ291bnRlciIsInJlbmRlclRleHRhcmVhU2l6ZSIsInRleHRhcmVhIiwibGltaXQiLCJyZW1haW5kZXIiLCJuZXh0SW52YWxpZCIsInByZXZJbnZhbGlkIiwib3ZlciIsInVuZGVyIiwiaGFuZGxlRmllbGRUb2dnbGUiLCJoYW5kbGVGaWVsZElucHV0IiwiaGFuZGxlRmllbGRWYWxkaWF0aW9uIiwiQ1NTX0ZJRUxEU0VUIiwiQVJJQV9ERVNDIiwiQVJJQV9JTlZBTElEIiwiaGFuZGxlRmllbGRzZXRNdXRhdGlvbiIsImZpZWxkc2V0cyIsImZpZWxkc2V0IiwiaW5wdXRzIiwidmFsaWRJZCIsIkNTU19MT0dPIiwiaGFuZGxlTG9nb011dGF0aW9uIiwibG9nbyIsImljb24iLCJzdmciLCJpc0RvdCIsImJhY2siLCJDU1NfUE9QT1ZFUiIsIk9QRU5fUE9QT1ZFUlMiLCJoYW5kbGVQb3BvdmVyVG9nZ2xlIiwibmV3U3RhdGUiLCJpc0Nsb3NpbmciLCJoYW5kbGVQb3BvdmVyTGlua0NsaWNrIiwiY2xvc2UiLCJDU1NfVEFCTEUiLCJoYW5kbGVUYWJsZU11dGF0aW9uIiwidGFibGVzIiwidGFibGUiLCJ0aHMiLCJpc1Rib2R5Iiwicm93IiwiY2VsbCIsIkNTU19UT0dHTEVHUk9VUCIsImhhbmRsZVRvZ2dsZWdyb3VwS2V5ZG93biIsIm1vdmUiLCJERVNDUklCRURCWSIsIkVTQyIsIkxBQkVMTEVEQlkiLCJQT1NJVElPTl9DU1NfUFJPUEVSVFkiLCJUSFJPVFRMRV9ERUxBWSIsIlRPT0xUSVAiLCJBTkNIT1IiLCJMQVNUX0NBTEwiLCJUSFJPVFRMRSIsImhhbmRsZVRvb2x0aXBNb3ZlIiwid2FpdCIsImhhbmRsZVRvb2x0aXBNb3ZlVGhyb3R0bGVkIiwiY29udGVudCIsInBvc2l0aW9uIiwiaGFkTGFiZWwiLCJoYXNMYWJlbCIsIlVIVE1MRGV0YWlsc0VsZW1lbnQiLCJoaWRlIiwidURldGFpbHNMaXN0IiwidURldGFpbHMiLCJzdW1tYXJ5IiwiaXNTdW1tYXJ5IiwiVUhUTUxTdW1tYXJ5RWxlbWVudCIsImdldExhYmVsIiwiZWwyIiwiVUhUTUxQcm9ncmVzc0VsZW1lbnQiLCJyb2xlSW1hZ2UiLCJwZXJjZW50YWdlIiwiZ2V0TnVtYmVyIiwic2V0TnVtYmVyIiwiaXNOdW1lcmljIl0sIm1hcHBpbmdzIjoia0NBQUEsSUFBSUEsR0FBWSxPQUFPLGVBQ25CQyxHQUFzQixPQUFPLHNCQUM3QkMsR0FBZSxPQUFPLFVBQVUsZUFDaENDLEdBQWUsT0FBTyxVQUFVLHFCQUNoQ0MsR0FBa0IsQ0FBQ0MsRUFBS0MsRUFBS0MsSUFBVUQsS0FBT0QsRUFBTUwsR0FBVUssRUFBS0MsRUFBSyxDQUFFLFdBQVks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