"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),d=require("react"),oe=require("use-async-effect"),z=require("react-hook-form"),J=require("intl-date"),ue=require("react-detect-click-outside"),ce=require("@hookform/resolvers/yup"),ee=require("react-select"),te=require("react-select-async-paginate"),de=e=>e!=null&&typeof e=="object"&&!Array.isArray(e)&&!(e instanceof String)&&!(e instanceof Number)&&!(e instanceof Boolean)&&!(e instanceof Date)&&!(e instanceof File),Q=(e,r=0)=>Array.from({length:e},(l,n)=>n+r),fe=(e,r,l)=>e.filter(n=>r.find(s=>l(n,s))!==void 0),me=(e,r)=>de(e)?r in e:!1,Y=(e,r)=>e.split(".").reduce((l,n)=>l&&me(l,n)?l[n]:null,r),N=(e,r)=>{const l=Object.keys,n=typeof e;return e&&r&&n==="object"&&n===typeof r?l(e).length===l(r).length&&l(e).every(s=>N(e[s],r[s])):e===r},he=(e,r,l,n,o,s,a)=>{const[b,h]=d.useState(!1),m=d.useRef(0),[u,c]=d.useState(null),[i,g]=d.useState(0),[S,R]=d.useState([]);return oe(async()=>{h(!0);const T=new Date().getTime();m.current=T;try{const C=await e(r,l,n,o,s);if(m.current!==T){console.debug(`ignoring former response from requestId=${T} because the current requestId=${m.current}`);return}if(isNaN(C.totalPages)||!C.items||!Array.isArray(C.items))throw Error("Something went wrong in your page fetcher");c(null),g(C.totalPages),R(C.items)}catch(C){c(C),g(0),R([])}a&&a(l,n,o),h(!1)},[r,l,n,o,s]),{isLoading:b,error:u,totalPages:i,data:S}},Z=2,ge=(e,r,l)=>{const n=Math.floor(Z/2),o=re.length-1-Z,a=r>l-n-1&&r{const n=e===0?1:0;e!==0&&e!==1&&(e=0),lr-n&&(l=r-n);const o=[];for(let m=e;mge(o,u,s)).map(m=>({number:m,isActive:m===l,render:(e===0?m+1:m)+"",internal:m===l?"*"+m:m+""})),h=[];for(let m=0;m{const{pages:o,isFirstPage:s,isLastPage:a}=be(e,r,l),b=h=>{h.number!==void 0&&h.number!==l&&n(h.number)};return t.jsx("nav",{children:t.jsxs("ul",{className:"pagination justify-content-center",children:[t.jsx("li",{className:`page-item ${s||o.length==0?"disabled":""}`,onClick:()=>!s&&o.length>0&&n(l-1),children:t.jsx("button",{className:"page-link","aria-label":"Previous",children:"«"})}),o.map((h,m)=>t.jsx("li",{onClick:u=>b(h),className:`page-item ${h.isActive?"active":""} ${h.number===void 0?"disabled":""}`,children:t.jsx("button",{className:"page-link",children:h.render})},m)),t.jsx("li",{className:`page-item ${a?"disabled":""}`,onClick:()=>!a&&n(l+1),children:t.jsx("button",{className:"page-link","aria-label":"Next",children:"»"})})]})})},Se=({pageFetcher:e,columns:r,search:l,pageSize:n=10,noDataLabel:o="No Data",errorLabel:s="Error",defaultPageNumber:a,defaultSortKey:b,defaultSortDir:h,onChange:m})=>{const[u,c]=d.useState(a||0),[i,g]=d.useState(b),[S,R]=d.useState(h),[T,C]=d.useState(l);d.useEffect(()=>{C(l),c(0)},[l]);const{isLoading:p,error:L,totalPages:$,data:D}=he(e,n,u,i,S,T,m),E=v=>u*n+(v+1),w=v=>{if(v.sortKey===void 0){if(typeof v.value=="function")return v.sortKey;if(v.value!=="#")return v.value}return v.sortKey},q=v=>{let y="rru-data-table__th";const A=w(v);return A&&(A===i?y+=" rru-data-table__th--sortable rru-data-table__th--sortable-"+S:y+=" rru-data-table__th--sortable"),y},P=v=>{const y=w(v);y&&(y!==i?(g(y),R("asc")):R(S==="asc"?"desc":"asc"),c(0))};return t.jsxs("div",{children:[t.jsxs("table",{className:"table table-striped rru-data-table",children:[t.jsx("thead",{children:t.jsx("tr",{children:r.map((v,y)=>t.jsx("th",{className:q(v),onClick:()=>P(v),children:v.label},y))})}),t.jsxs("tbody",{children:[t.jsx("tr",{className:`rru-data-table__loading-bar-tr--${p?"visible":"hidden"}`,children:t.jsx("td",{colSpan:r.length,className:"rru-data-table__loading-bar-td",children:t.jsx("div",{className:"rru-data-table__loading-bar"})})}),L&&t.jsx("tr",{children:t.jsx("td",{colSpan:r.length,className:"text-center",children:s})}),D.length===0&&!L&&t.jsx("tr",{children:t.jsx("td",{colSpan:r.length,className:"text-center",children:o})}),(D||[]).map((v,y)=>t.jsx("tr",{children:r.map((A,G)=>t.jsx("td",{children:typeof A.value=="function"?A.value(v):A.value==="#"?E(y):Y(A.value,v)},G))},y))]})]}),t.jsx(xe,{base:0,totalPages:$,currentPage:u,onChangePage:c})]})},B=e=>e.error?t.jsx("div",{className:"invalid-feedback d-block",children:e.error.message}):null,I=e=>{const{label:r,requiredAsterisk:l,children:n}=e;return r?t.jsxs("label",{className:`form-label ${l?"rru-form-label--required-asterisk":""}`,children:[r,n]}):null},O=(e,r)=>{const l=z.useFormContext(),n=z.useFormState({name:e}),o=d.useRef(!1),[s,a]=d.useState(!1),b=z.useWatch({name:e});e&&e.split(".").filter(g=>/\d+/.test(g)).length>0&&console.error(`Field name "${e}" cannot include a numeric part. Try to prefix the numeric part with some string.`),d.useEffect(()=>{o.current&&r&&r(b)},[b,r,o]);const h=g=>{if(o.current){console.error("Trying to register an already registered field. This will be ignored.",e);return}const S=l.formState.defaultValues?Y(e,l.formState.defaultValues):void 0;o.current=!0,g(S),console.debug("registered",e,S)},m=()=>{if(!o.current){console.error("Trying to unregister an already unregistered field. This will be ignored.",e);return}l.unregister(e),o.current=!1,console.debug("unregistered",e)},u=()=>{if(!o.current){console.error("Trying to mark a field as touched while the field has not been registered yet. This will be ignored.",e);return}s||(a(!0),l.trigger(e))},c=g=>{if(!o.current){console.error("Trying to set the value for a field that has not been registered yet. This will be ignored.",e,g);return}l.setValue(e,g,{shouldValidate:s||i})},i=Y(e,n.errors);return{register:h,unregister:m,setValue:c,error:i,onBlur:u}},ve=e=>{const[r,l]=d.useState(!1),n=O(e.name,s=>{N(s,r)||l(s)}),o=s=>{n.setValue(s),l(s),e.onChange&&e.onChange(s)};return d.useEffect(()=>(n.register(s=>{o(!!s)}),()=>n.unregister()),[]),t.jsxs("div",{className:"form-group","data-field-name":e.name,"data-field-value":r,children:[t.jsx("div",{className:`form-check ${e.isSwitch?"form-switch":""}`,role:"checkbox","aria-checked":r,children:t.jsx(I,{label:e.label,children:t.jsx("input",{name:e.name,checked:r,onChange:s=>o(s.target.checked),onBlur:n.onBlur,type:"checkbox",className:"form-check-input "+(n.error?"is-invalid":""),disabled:e.disabled})})}),t.jsx(B,{error:n.error})]})},X=(e,r,l)=>{const n=J.IntlDate.of(e,r,l,1),o=n.minusDays(n.getDayOfWeek()-1),s=[o];for(let a=1;a<42;a++)s.push(o.plusDays(a));return s},je=/([0-9]{4})-([0-9]{2})-([0-9]{2})/,ye=/([0-9]{4})-([0-9]{2})-([0-9]{2})(T| {1})([0-9]{2}):([0-9]{2}):([0-9]{2})(.([0-9]+))?/,Ce=e=>{const[r,l]=d.useState(!1),[n,o]=d.useState(null),s=O(e.name,f=>{N(f,n)||o(f)}),a=()=>e.calendarType||"gregorian",b=d.useRef(null),h=ue.useDetectClickOutside({onTriggered:f=>{f.target!=b.current&&A()}}),m=J.IntlDate.today(),[u,c]=d.useState(X(a(),m.getYear(a()),m.getMonth(a()))),[i,g]=d.useState(!1),[S,R]=d.useState(0),[T,C]=d.useState(0),[p,L]=d.useState(0),[$,D]=d.useState(m.getYear(a())),[E,w]=d.useState(m.getMonth(a())),[q,P]=d.useState(null),v=()=>e.mode?e.mode:"datetime",y=f=>{if(e.getDateConfig)return e.getDateConfig(f.toString(a()))},A=()=>{g(!1),s.onBlur()},G=()=>{E===1?(D($-1),w(12)):w(E-1)},ae=()=>{E===12?(D($+1),w(1)):w(E+1)},se=f=>{var x;(x=y(f))!=null&&x.disabled||(P(f),A())},V=f=>{f.target.select()},M=(f,x,j,_)=>{let k=parseInt(f);isNaN(k)?k=null:kj&&(k=j),k&&_(k)},K=(f,x)=>{f.key==="Enter"&&!(x==="time"&&q)&&(f.stopPropagation(),f.preventDefault())},le=()=>{const f=a()==="gregorian"?1901:1318;$(s.register(f=>{try{if(f){let x=f.match(v()==="datetime"?ye:je);if(x){const j=J.IntlDate.of(a(),parseInt(x[1]),parseInt(x[2]),parseInt(x[3]));D(j.getYear(a())),w(j.getMonth(a())),P(j),M(x[5],0,23,R),M(x[6],0,59,C),M(x[7],0,59,L)}}else D(m.getYear(a())),w(m.getMonth(a()))}catch{}l(!0)}),()=>s.unregister()),[e.calendarType]),d.useEffect(()=>{c(X(a(),$,E))},[$,E]),d.useEffect(()=>{let f=null;if(q&&(f=q.format(a(),"yyyy-MM-dd"),v()==="datetime")){const x=S.toString().padStart(2,"0"),j=T.toString().padStart(2,"0"),_=p.toString().padStart(2,"0");f+=` ${x}:${j}:${_}`}o(f),s.setValue(f),e.onChange&&r&&!i&&e.onChange(f)},[q,S,T,p,i]);const ie=f=>{const x=y(f);let j="rru-date-input__day";return f.getMonth(a())!=E&&(j+=" rru-date-input__day--not-same-month"),f.isEqual(m)&&(j+=" rru-date-input__day--today"),q&&f.isEqual(q)&&(j+=" rru-date-input__day--selected"),x!=null&&x.disabled&&(j+=" rru-date-input__day--disabled"),x!=null&&x.className&&(j+=" "+x.className),j};return u?t.jsxs("div",{className:"form-group","data-field-name":e.name,"data-field-value":n,children:[t.jsx(I,{label:e.label,requiredAsterisk:e.requiredAsterisk}),t.jsxs("div",{className:"rru-date-input",children:[t.jsxs("div",{className:"rru-date-input__input-wrapper",children:[t.jsx("input",{ref:b,dir:"ltr",type:"text",autoComplete:"off",name:e.name,disabled:e.disabled,value:n||"",onChange:f=>{},onClick:f=>g(!0),className:`rru-date-input__input form-control ${s.error?"is-invalid":""}`}),!e.disabled&&n!==null&&t.jsx("button",{onClick:()=>P(null),className:"rru-date-input__clear-button",children:"⨯"})]}),t.jsx("div",{ref:h,className:`rru-date-input__popup rru-date-input__popup--${i?"visible":"hidden"}`,children:t.jsxs("div",{className:"rru-date-input__container",children:[t.jsxs("div",{className:"rru-date-input__header",children:[t.jsx("div",{className:"rru-date-input__month-button",onClick:G,children:"<"}),t.jsx("input",{type:"text",className:"rru-date-input__date-part-input",onClick:V,onKeyDown:f=>K(f,"date"),value:$,onChange:f=>M(f.target.value,1,2300,D),onBlur:le}),t.jsx("input",{type:"text",className:"rru-date-input__date-part-input",onClick:V,onKeyDown:f=>K(f,"date"),value:E,onChange:f=>M(f.target.value,1,12,w)}),t.jsx("div",{className:"rru-date-input__month-button",onClick:ae,children:">"})]}),t.jsx("div",{className:"rru-date-input__body",children:t.jsx("table",{children:t.jsx("tbody",{children:Q(6).map(f=>t.jsx("tr",{children:Q(7).map(x=>{var k;const j=f*7+x,_=u[j];return t.jsx("td",{children:t.jsx("div",{"data-date":_.toString(a()),className:ie(_),style:(k=y(_))==null?void 0:k.style,onClick:Me=>se(_),children:_.getDay(a())})},`d${_.toString(a())}`)})},`r${f}`))})})}),v()==="datetime"&&t.jsxs("div",{className:"rru-date-input__footer",children:[t.jsx("input",{type:"text",className:"rru-date-input__time-part-input",onClick:V,onKeyDown:f=>K(f,"time"),value:S.toString().padStart(2,"0"),onChange:f=>M(f.target.value,0,23,R)})," : ",t.jsx("input",{type:"text",className:"rru-date-input__time-part-input",onClick:V,onKeyDown:f=>K(f,"time"),value:T.toString().padStart(2,"0"),onChange:f=>M(f.target.value,0,59,C)})," : ",t.jsx("input",{type:"text",className:"rru-date-input__time-part-input",onClick:V,onKeyDown:f=>K(f,"time"),value:p.toString().padStart(2,"0"),onChange:f=>M(f.target.value,0,59,L)})]})]})})]}),t.jsx(B,{error:s.error})]}):null},Ne=e=>{const[r,l]=d.useState(null),n=O(e.name,a=>{N(a,r)||l(a)});d.useEffect(()=>(n.register(a=>{o(a!==void 0?a:null)}),()=>n.unregister()),[]);const o=a=>{a&&a instanceof FileList&&(a=a[0]),n.setValue(a),l(a),e.onChange&&e.onChange(a)},s=()=>{let a=r?r.name:e.chooseFileLabel??"Choose File";return a==null||a.trim()===""?" ":a};return t.jsxs("div",{className:"form-group","data-field-name":e.name,"data-field-value":r,children:[t.jsx(I,{label:e.label,requiredAsterisk:e.requiredAsterisk}),t.jsxs("label",{style:{display:"block"},children:[t.jsx("div",{className:`form-control rru-file-input__file-name-label ${n.error?"is-invalid":""}`,children:s()}),t.jsx("input",{"aria-label":"Upload",type:"file",className:`form-control rru-file-input__actual-input ${n.error?"is-invalid":""}`,name:e.name,onChange:a=>o(a.target.files),onBlur:n.onBlur,disabled:e.disabled,accept:e.accept})]}),t.jsx(B,{error:n.error})]})},_e=e=>{let r={defaultValues:e.initialValues};e.yupValidationSchema&&(r={...r,resolver:ce.yupResolver(e.yupValidationSchema)});const l=z.useForm(r);e.context&&e.context.$(l);const n=(o,s)=>{var h,m,u,c,i;(process.env.JEST_WORKER_ID!==void 0||((i=(c=(u=(m=(h=s==null?void 0:s.nativeEvent)==null?void 0:h.submitter)==null?void 0:m.attributes)==null?void 0:u.type)==null?void 0:c.value)==null?void 0:i.toLowerCase())==="submit")&&e.onSubmit(o)};return t.jsx(z.FormProvider,{...l,children:t.jsx("form",{onSubmit:l.handleSubmit(n),id:e.id,children:e.children})})},U=e=>e.options!==void 0,F=(e,r)=>{let l=[];return e.forEach(o=>{U(o)?l=l.concat(o.options):l.push(o)}),fe(l,r,(o,s)=>o.value+""==s+"")},H=(e,r)=>{const l=F(e,[r]);return l.length===1?l[0]:null},ne=e=>async(r,l,n)=>{const s=n.page;console.debug("loading more options","search",r,"page",s);let a;if(!r)a=e;else{const m=r.toLowerCase();a=e.filter(u=>"options"in u?u.options.filter(c=>(c.label+"").toLowerCase().includes(m)).length>0:(u.label+"").toLowerCase().includes(m))}const b=Math.ceil(a.length/30)>s;return{options:a.slice((s-1)*30,s*30),hasMore:b,additional:{page:s+1}}},ke=e=>{const[r,l]=d.useState(null),n=O(e.name,i=>{N(i,r)||l(i)}),[o,s]=d.useState(!1),[a,b]=d.useState([]),h=i=>{b(i),n.setValue(i.map(g=>g.value)),e.onChange&&e.onChange(i.map(g=>g.value))};d.useEffect(()=>(n.register(i=>{const g=F(e.options,i||[]);h(g),s(!0)}),()=>n.unregister()),[]),d.useEffect(()=>{if(o){const i=F(e.options,a.map(g=>g.value));h(i)}},[e.options]);const m=(i,g)=>{let S;g?S=a.concat([i]):S=a.filter(R=>R.value!==i.value),h(S)},u=i=>a.includes(i),c=i=>{const g=`checkbox_${e.name}_${i.value}`;return t.jsx("div",{className:`form-check ${e.inline?"form-check-inline":""}`,role:"checkbox","aria-checked":u(i),children:t.jsx(I,{label:i.label,children:t.jsx("input",{name:e.name,value:i.value,checked:u(i),onChange:S=>m(i,S.target.checked),onBlur:n.onBlur,type:"checkbox",className:`form-check-input ${n.error?"is-invalid":""}`,disabled:e.disabled})})},g)};return t.jsxs("div",{className:"form-group","data-field-name":e.name,"data-field-value":r,children:[t.jsx(I,{label:e.label,requiredAsterisk:e.requiredAsterisk}),t.jsx("div",{children:e.options.map(i=>{var g;return U(i)?t.jsxs("div",{className:"rru-form-grouped-options-container",children:[t.jsx("label",{className:"rru-form-grouped-options-label",children:i.label}),i.options.map(S=>c(S))]},(g=i.label)==null?void 0:g.toString()):c(i)})}),t.jsx(B,{error:n.error})]})},Ie=e=>{const[r,l]=d.useState(null),n=O(e.name,u=>{N(u,r)||(l(u),N(u,a.map(c=>c.value))||setTimeout(()=>{const c=F(e.options,u||[]);h(c)},0))}),[o,s]=d.useState(!1),[a,b]=d.useState([]),h=u=>{b(u),n.setValue(u.map(c=>c.value)),e.onChange&&e.onChange(u.map(c=>c.value))};d.useEffect(()=>(n.register(u=>{const c=F(e.options,u||[]);h(c),s(!0)}),()=>n.unregister()),[]),d.useEffect(()=>{if(o){const u=F(e.options,a.map(c=>c.value));h(u)}},[e.options]);const m=(u,c)=>n.error&&!c.menuIsOpen?{...u,borderColor:"var(--bs-danger) !important"}:u;return t.jsxs("div",{className:"form-group","data-field-name":e.name,"data-field-value":r,children:[t.jsx(I,{label:e.label,requiredAsterisk:e.requiredAsterisk}),t.jsx(te.AsyncPaginate,{name:e.name,isMulti:!0,placeholder:e.placeholder||"",value:a,onChange:u=>h(u),loadOptions:ne(e.options),additional:{page:1},filterOption:ee.createFilter({ignoreAccents:!1}),onBlur:n.onBlur,isDisabled:e.disabled,styles:{control:m}}),t.jsx(B,{error:n.error})]})},Re=e=>{const[r,l]=d.useState(null),n=O(e.name,c=>{N(c,r)||l(c)}),[o,s]=d.useState(!1),[a,b]=d.useState(null),h=c=>{b(c),n.setValue(c?c.value:null),e.onChange&&e.onChange(c?c.value:null)};d.useEffect(()=>(n.register(c=>{const i=H(e.options,c);h(i),s(!0)}),()=>n.unregister()),[]),d.useEffect(()=>{if(o){const c=a?H(e.options,a.value):null;h(c)}},[e.options]);const m=c=>a?a.value===c.value:!1,u=c=>{const i=`radio_${e.name}_${c.value}`;return t.jsx("div",{className:`form-check ${e.inline?"form-check-inline":""}`,role:"radio","aria-checked":m(c),children:t.jsx(I,{label:c.label,children:t.jsx("input",{name:e.name,value:c.value,checked:m(c),onChange:g=>h(c),onBlur:n.onBlur,type:"radio",className:`form-check-input ${n.error?"is-invalid":""}`,disabled:e.disabled})})},i)};return t.jsxs("div",{className:"form-group","data-field-name":e.name,"data-field-value":r,children:[t.jsx(I,{label:e.label,requiredAsterisk:e.requiredAsterisk}),t.jsx("div",{children:e.options.map(c=>{var i;return U(c)?t.jsxs("div",{className:"rru-form-grouped-options-container",children:[t.jsx("label",{className:"rru-form-grouped-options-label",children:c.label}),c.options.map(g=>u(g))]},(i=c.label)==null?void 0:i.toString()):u(c)})}),t.jsx(B,{error:n.error})]})},Ee=e=>{const[r,l]=d.useState(null),n=O(e.name,u=>{N(u,r)||(l(u),N(u,a==null?void 0:a.value)||setTimeout(()=>{const c=H(e.options,u);h(c)},0))}),[o,s]=d.useState(!1),[a,b]=d.useState(null),h=u=>{b(u),n.setValue(u?u.value:null),e.onChange&&e.onChange(u?u.value:null)};d.useEffect(()=>(n.register(u=>{const c=H(e.options,u);h(c),s(!0)}),()=>n.unregister()),[]),d.useEffect(()=>{if(o){const u=a?H(e.options,a.value):null;h(u)}},[e.options]);const m=(u,c)=>n.error&&!c.menuIsOpen?{...u,borderColor:"var(--bs-danger) !important"}:u;return t.jsxs("div",{className:"form-group","data-field-name":e.name,"data-field-value":r,children:[t.jsx(I,{label:e.label,requiredAsterisk:e.requiredAsterisk}),t.jsx(te.AsyncPaginate,{name:e.name,isMulti:!1,isClearable:!0,placeholder:e.placeholder||"",value:a,onChange:u=>h(u),loadOptions:ne(e.options),additional:{page:1},filterOption:ee.createFilter({ignoreAccents:!1}),onBlur:n.onBlur,isDisabled:e.disabled,styles:{control:m}}),t.jsx(B,{error:n.error})]})},we=e=>{const[r,l]=d.useState(null),n=O(e.name,s=>{N(s,r)||l(s)}),o=s=>{n.setValue(s),l(s),e.onChange&&e.onChange(s)};return d.useEffect(()=>(n.register(s=>{o(s===void 0?null:s)}),()=>n.unregister()),[]),t.jsxs("div",{className:"form-group","data-field-name":e.name,"data-field-value":r,children:[t.jsx(I,{label:e.label,requiredAsterisk:e.requiredAsterisk}),t.jsx("input",{name:e.name,value:r||"",onChange:s=>o(s.target.value),onBlur:n.onBlur,type:e.isPassword?"password":"text",className:`form-control ${n.error?"is-invalid":""}`,disabled:e.disabled,dir:e.dir||"auto",placeholder:e.placeholder,maxLength:e.maxLength,autoComplete:e.autoComplete,list:e.list}),t.jsx(B,{error:n.error})]})},Ae=e=>{const[r,l]=d.useState(null),n=O(e.name,s=>{N(s,r)||l(s)}),o=s=>{n.setValue(s),l(s),e.onChange&&e.onChange(s)};return d.useEffect(()=>(n.register(s=>{o(s===void 0?null:s)}),()=>n.unregister()),[]),t.jsxs("div",{className:"form-group","data-field-name":e.name,"data-field-value":r,children:[t.jsx(I,{label:e.label,requiredAsterisk:e.requiredAsterisk}),t.jsx("textarea",{name:e.name,value:r||"",onChange:s=>o(s.target.value),onBlur:n.onBlur,className:`form-control ${n.error?"is-invalid":""}`,disabled:e.disabled,dir:e.dir||"auto",placeholder:e.placeholder,maxLength:e.maxLength,autoComplete:e.autoComplete,rows:e.rows,cols:e.cols,wrap:e.wrap}),t.jsx(B,{error:n.error})]})},Te=()=>{const[e,r]=d.useState(null),l=a=>{console.debug("setting form context"),r(a)},n=()=>e==null?(console.error("FormContext has not been set yet. Cannot get values."),{}):e.getValues();return{$:l,getFieldsValues:n,getFieldValue:a=>Y(a,n()),setFieldValue:(a,b)=>{if(e==null){console.error("FormContext has not been set yet. Cannot set values.");return}e.setValue(a,b)}}},De=e=>{const[r]=d.useState(new Date().getTime()),l=()=>{const o=document.getElementById(`modal-close-${r}`);o&&o.click()},n=o=>{if(o)return typeof o=="function"?o(l):o};return t.jsxs(t.Fragment,{children:[t.jsx("button",{name:e.name,disabled:e.disabled,className:e.className,style:e.style,type:"button","data-bs-toggle":"modal","data-bs-target":`#modal-${r}`,children:e.children}),t.jsx("div",{className:"modal fade",id:`modal-${r}`,tabIndex:-1,"aria-hidden":"true",children:t.jsx("div",{className:"modal-dialog modal-dialog-centered modal-dialog-scrollable",children:t.jsxs("div",{className:"modal-content",children:[t.jsxs("div",{className:"modal-header",children:[t.jsx("h5",{className:"modal-title",children:e.modalTitle}),t.jsx("button",{id:`modal-close-${r}`,type:"button",className:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"})]}),t.jsx("div",{className:"modal-body",children:n(e.modalBody)})]})})})]})},W="Could not find the StepsWizardContext. Make sure your component is a descendant of a RruStepsWizard",Be={currentStepNumber:0,currentStepLabel:void 0,currentStepInputData:void 0,goToStep:(e,r)=>{throw W},nextStep:e=>{throw W},previousStep:e=>{throw W},firstStep:e=>{throw W},lastStep:e=>{throw W}},re=d.createContext(Be),Oe=()=>d.useContext(re),$e=re.Provider,qe=e=>{const[r,l]=d.useState(1),[n,o]=d.useState(),s=Array.isArray(e.children)?e.children:e.children?[e.children]:[],a=i=>e.getStepLabel&&typeof e.getStepLabel=="function"?e.getStepLabel(i):void 0,b=()=>s.map((i,g)=>({number:g+1,label:a(g+1),component:i})),h=(i,g)=>{i<1?i=1:i>b().length&&(i=b().length),o(g),l(i)},m={currentStepNumber:r,currentStepLabel:a(r),currentStepInputData:n,goToStep:(i,g)=>h(i,g),nextStep:i=>h(r+1,i),previousStep:i=>h(r-1,i),firstStep:i=>h(1,i),lastStep:i=>h(b().length,i)},u=(i,g)=>{let S=g;return i===r?S+=` ${g}--current`:ie.renderHeader?e.renderHeader(b()):t.jsx("div",{className:"rru-steps-wizard__header",children:b().map((i,g)=>t.jsxs("div",{className:u(i.number,"rru-steps-wizard__step"),children:[t.jsx("div",{className:u(i.number,"rru-steps-wizard__step-number"),children:i.number}),t.jsx("div",{className:u(i.number,"rru-steps-wizard__step-label"),children:i.label})]},g))});return t.jsx($e,{value:m,children:t.jsxs("div",{className:"rru-steps-wizard",children:[c(),t.jsx("div",{className:"rru-steps-wizard__body",children:b().map((i,g)=>i.number===r?s[g]:null)})]})})};exports.RruCheckboxInput=ve;exports.RruDataTable=Se;exports.RruDateTimeInput=Ce;exports.RruFileInput=Ne;exports.RruForm=_e;exports.RruModalButton=De;exports.RruMultiCheckboxInput=ke;exports.RruMultiSelectInput=Ie;exports.RruRadioInput=Re;exports.RruSelectInput=Ee;exports.RruStepsWizard=qe;exports.RruTextInput=we;exports.RruTextareaInput=Ae;exports.useRruForm=Te;exports.useRruStepsWizardContext=Oe; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtcmljaC11aS5janMiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy91dGlscy50cyIsIi4uL3NyYy9kYXRhLXRhYmxlL2hvb2tzL3VzZURhdGFTb3VyY2UudHMiLCIuLi9zcmMvZGF0YS10YWJsZS9wYWdpbmF0aW9uL3VzZVBhZ2luYXRpb24udHMiLCIuLi9zcmMvZGF0YS10YWJsZS9wYWdpbmF0aW9uL1BhZ2luYXRpb25WaWV3LnRzeCIsIi4uL3NyYy9kYXRhLXRhYmxlL1JydURhdGFUYWJsZS50c3giLCIuLi9zcmMvZm9ybS9FcnJvck1lc3NhZ2UvRXJyb3JNZXNzYWdlLnRzeCIsIi4uL3NyYy9mb3JtL0xhYmVsL0xhYmVsLnRzeCIsIi4uL3NyYy9mb3JtL2hvb2tzL3VzZUZpZWxkLnRzIiwiLi4vc3JjL2Zvcm0vUnJ1Q2hlY2tib3hJbnB1dC9ScnVDaGVja2JveElucHV0LnRzeCIsIi4uL3NyYy9mb3JtL1JydURhdGVUaW1lSW5wdXQvdXRpbHMvZ2VuZXJhdGVTaXhXZWVrc0NhbGVuZGFyLnRzIiwiLi4vc3JjL2Zvcm0vUnJ1RGF0ZVRpbWVJbnB1dC9ScnVEYXRlVGltZUlucHV0LnRzeCIsIi4uL3NyYy9mb3JtL1JydUZpbGVJbnB1dC9ScnVGaWxlSW5wdXQudHN4IiwiLi4vc3JjL2Zvcm0vUnJ1Rm9ybS9ScnVGb3JtLnRzeCIsIi4uL3NyYy9mb3JtL3V0aWxzL29wdGlvbnMtdXRpbHMudHMiLCIuLi9zcmMvZm9ybS9ScnVNdWx0aUNoZWNrYm94SW5wdXQvUnJ1TXVsdGlDaGVja2JveElucHV0LnRzeCIsIi4uL3NyYy9mb3JtL1JydU11bHRpU2VsZWN0SW5wdXQvUnJ1TXVsdGlTZWxlY3RJbnB1dC50c3giLCIuLi9zcmMvZm9ybS9ScnVSYWRpb0lucHV0L1JydVJhZGlvSW5wdXQudHN4IiwiLi4vc3JjL2Zvcm0vUnJ1U2VsZWN0SW5wdXQvUnJ1U2VsZWN0SW5wdXQudHN4IiwiLi4vc3JjL2Zvcm0vUnJ1VGV4dElucHV0L1JydVRleHRJbnB1dC50c3giLCIuLi9zcmMvZm9ybS9ScnVUZXh0YXJlYUlucHV0L1JydVRleHRhcmVhSW5wdXQudHN4IiwiLi4vc3JjL2Zvcm0vaG9va3MvdXNlUnJ1Rm9ybS50cyIsIi4uL3NyYy9tb2RhbC1idXR0b24vUnJ1TW9kYWxCdXR0b24udHN4IiwiLi4vc3JjL3N0ZXBzLXdpemFyZC9ob29rcy91c2VScnVTdGVwc1dpemFyZENvbnRleHQudHMiLCIuLi9zcmMvc3RlcHMtd2l6YXJkL1JydVN0ZXBzV2l6YXJkLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjAgS2hhbGlkIEguIEFsaGFyaXNpXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmNvbnN0IGlzT2JqZWN0ID0gKHZhbDogYW55KTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiAoXG4gICAgdmFsICE9IG51bGwgJiZcbiAgICB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJlxuICAgICFBcnJheS5pc0FycmF5KHZhbCkgJiZcbiAgICAhKHZhbCBpbnN0YW5jZW9mIFN0cmluZykgJiZcbiAgICAhKHZhbCBpbnN0YW5jZW9mIE51bWJlcikgJiZcbiAgICAhKHZhbCBpbnN0YW5jZW9mIEJvb2xlYW4pICYmXG4gICAgISh2YWwgaW5zdGFuY2VvZiBEYXRlKSAmJlxuICAgICEodmFsIGluc3RhbmNlb2YgRmlsZSlcbiAgKTtcbn07XG5cbmNvbnN0IGlzQXJyYXkgPSAodmFsOiBhbnkpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIHZhbCAhPSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIEFycmF5LmlzQXJyYXkodmFsKTtcbn07XG5cbmNvbnN0IHJhbmdlID0gKGZyb206IG51bWJlciwgdG86IG51bWJlcikgPT4ge1xuICByZXR1cm4gcmFuZ2VPZlNpemUodG8gLSBmcm9tICsgMSwgZnJvbSk7XG59O1xuXG5jb25zdCByYW5nZU9mU2l6ZSA9IChzaXplOiBudW1iZXIsIHN0YXJ0QXQ6IG51bWJlciA9IDApID0+IHtcbiAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IHNpemUgfSwgKHgsIGkpID0+IGkgKyBzdGFydEF0KTtcbn07XG5cbi8qKlxuICogUmV0YWlucyBvbmx5IHRoZSBlbGVtZW50cyBpbiB0aGUgZmlyc3QgYXJyYXkgdGhhdCBhcmUgY29udGFpbmVkIGluIHRoZSBzZWNvbmQgYXJyYXkuXG4gKiBJbiBvdGhlciB3b3JkcywgcmVtb3ZlcyBmcm9tIHRoZSBmaXJzdCBhcnJheSBhbGwgb2YgaXRzIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCBjb250YWluZWQgaW4gdGhlIHNlY29uZCBhcnJheS5cbiAqIFRoaXMgbWV0aG9kIGRvZXMgbm90IG11dGF0ZSBpdHMgaW5wdXQgYXJyYXlzLlxuICpcbiAqIEBwYXJhbSBmaXJzdEFycmF5XG4gKiBAcGFyYW0gc2Vjb25kQXJyYXlcbiAqIEBwYXJhbSBjb21wYXJhdG9yXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCByZXRhaW5BbGwgPSA8VDEsIFQyPihmaXJzdEFycmF5OiBUMVtdLCBzZWNvbmRBcnJheTogVDJbXSwgY29tcGFyYXRvcjogKG9iajE6IFQxLCBvYmoyOiBUMikgPT4gYm9vbGVhbikgPT4ge1xuICByZXR1cm4gZmlyc3RBcnJheS5maWx0ZXIoKG9iajE6IFQxKSA9PiB7XG4gICAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gc2Vjb25kQXJyYXkuZmluZCgob2JqMjogVDIpID0+IGNvbXBhcmF0b3Iob2JqMSwgb2JqMikpO1xuICAgIC8vIGRvbid0IHNpbXBsaWZ5IHRvIHJldHVybiBzZWFyY2hSZXN1bHQgYmVjYXVzZSBzZWFyY2hSZXN1bHQgY291bGQgYmUgMCAobnVtYmVyKSB3aGljaCBpcyBmYWxzeVxuICAgIHJldHVybiBzZWFyY2hSZXN1bHQgIT09IHVuZGVmaW5lZDtcbiAgfSk7XG59O1xuXG5jb25zdCBpc09iaktleSA9IDxUIGV4dGVuZHMgb2JqZWN0PihvYmo6IFQsIGtleTogYW55KToga2V5IGlzIGtleW9mIFQgPT4ge1xuICBpZiAoaXNPYmplY3Qob2JqKSkge1xuICAgIHJldHVybiBrZXkgaW4gb2JqO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmNvbnN0IHJlc29sdmVPYmplY3RBdHRyaWJ1dGUgPSAocGF0aDogc3RyaW5nLCBvYmo6IG9iamVjdCk6IGFueSA9PiB7XG4gIHJldHVybiBwYXRoXG4gICAgLnNwbGl0KCcuJylcbiAgICAucmVkdWNlKChwcmV2OiBvYmplY3QgfCBudWxsLCBjdXJyOiBzdHJpbmcpID0+IChwcmV2ICYmIGlzT2JqS2V5KHByZXYsIGN1cnIpID8gcHJldltjdXJyXSA6IG51bGwpLCBvYmopO1xufTtcblxuY29uc3QgZGVlcEVxdWFsID0gKHg6IGFueSwgeTogYW55KTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IG9rID0gT2JqZWN0LmtleXMsXG4gICAgdHggPSB0eXBlb2YgeCxcbiAgICB0eSA9IHR5cGVvZiB5O1xuXG4gIHJldHVybiB4ICYmIHkgJiYgdHggPT09ICdvYmplY3QnICYmIHR4ID09PSB0eVxuICAgID8gb2soeCkubGVuZ3RoID09PSBvayh5KS5sZW5ndGggJiYgb2soeCkuZXZlcnkoKGtleSkgPT4gZGVlcEVxdWFsKHhba2V5XSwgeVtrZXldKSlcbiAgICA6IHggPT09IHk7XG59O1xuXG5leHBvcnQgeyBkZWVwRXF1YWwsIGlzQXJyYXksIGlzT2JqS2V5LCBpc09iamVjdCwgcmFuZ2UsIHJhbmdlT2ZTaXplLCByZXNvbHZlT2JqZWN0QXR0cmlidXRlLCByZXRhaW5BbGwgfTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMiBLaGFsaWQgSC4gQWxoYXJpc2lcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VBc3luY0VmZmVjdCBmcm9tICd1c2UtYXN5bmMtZWZmZWN0JztcbmltcG9ydCBDaGFuZ2VDYWxsYmFjayBmcm9tICcuLi90eXBlcy9DaGFuZ2VDYWxsYmFjayc7XG5pbXBvcnQgUGFnZUZldGNoZXIgZnJvbSAnLi4vdHlwZXMvUGFnZUZldGNoZXInO1xuaW1wb3J0IFNvcnREaXIgZnJvbSAnLi4vdHlwZXMvU29ydERpcic7XG5cbmNvbnN0IHVzZURhdGFTb3VyY2UgPSAoXG4gIHBhZ2VGZXRjaGVyOiBQYWdlRmV0Y2hlcixcbiAgcGFnZVNpemU6IG51bWJlcixcbiAgcGFnZU51bWJlcjogbnVtYmVyLFxuICBzb3J0S2V5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHNvcnREaXI6IFNvcnREaXIsXG4gIHNlYXJjaDogYW55LFxuICBvbkNoYW5nZT86IENoYW5nZUNhbGxiYWNrXG4pID0+IHtcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgcmVxdWVzdElkID0gdXNlUmVmKDApO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbdG90YWxQYWdlcywgc2V0VG90YWxQYWdlc10gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2RhdGEsIHNldERhdGFdID0gdXNlU3RhdGU8YW55W10+KFtdKTtcblxuICB1c2VBc3luY0VmZmVjdChhc3luYyAoKSA9PiB7XG4gICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuXG4gICAgY29uc3QgcmVxSWQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICByZXF1ZXN0SWQuY3VycmVudCA9IHJlcUlkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCBwYWdlRmV0Y2hlcihwYWdlU2l6ZSwgcGFnZU51bWJlciwgc29ydEtleSwgc29ydERpciwgc2VhcmNoKTtcblxuICAgICAgaWYgKHJlcXVlc3RJZC5jdXJyZW50ICE9PSByZXFJZCkge1xuICAgICAgICBjb25zb2xlLmRlYnVnKFxuICAgICAgICAgIGBpZ25vcmluZyBmb3JtZXIgcmVzcG9uc2UgZnJvbSByZXF1ZXN0SWQ9JHtyZXFJZH0gYmVjYXVzZSB0aGUgY3VycmVudCByZXF1ZXN0SWQ9JHtyZXF1ZXN0SWQuY3VycmVudH1gXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTmFOKGJvZHkudG90YWxQYWdlcykgfHwgIWJvZHkuaXRlbXMgfHwgIUFycmF5LmlzQXJyYXkoYm9keS5pdGVtcykpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ1NvbWV0aGluZyB3ZW50IHdyb25nIGluIHlvdXIgcGFnZSBmZXRjaGVyJyk7XG4gICAgICB9XG5cbiAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgc2V0VG90YWxQYWdlcyhib2R5LnRvdGFsUGFnZXMpO1xuICAgICAgc2V0RGF0YShib2R5Lml0ZW1zKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHNldEVycm9yKGUpO1xuICAgICAgc2V0VG90YWxQYWdlcygwKTtcbiAgICAgIHNldERhdGEoW10pO1xuICAgIH1cblxuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgb25DaGFuZ2UocGFnZU51bWJlciwgc29ydEtleSwgc29ydERpcik7XG4gICAgfVxuXG4gICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgfSwgW3BhZ2VTaXplLCBwYWdlTnVtYmVyLCBzb3J0S2V5LCBzb3J0RGlyLCBzZWFyY2hdKTtcblxuICByZXR1cm4ge1xuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgIGVycm9yOiBlcnJvcixcbiAgICB0b3RhbFBhZ2VzOiB0b3RhbFBhZ2VzLFxuICAgIGRhdGE6IGRhdGEsXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCB1c2VEYXRhU291cmNlO1xuIiwiLypcbiAqIENvcHlyaWdodCAyMDIwIEtoYWxpZCBILiBBbGhhcmlzaVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgUGFnaW5hdGlvbiBmcm9tICcuL3R5cGVzL1BhZ2luYXRpb24nO1xuaW1wb3J0IFBhZ2luYXRpb25QYWdlIGZyb20gJy4vdHlwZXMvUGFnaW5hdGlvblBhZ2UnO1xuXG5jb25zdCBNSU5fUEFHRVNfUEVSX0JMT0NLID0gMjtcblxuLyoqXG4gKiBOb3RlIHRoYXQgdGhlIHBhcmFtZXRlciBpcyB0aGUgcGFnZSBpbmRleCBub3QgdGhlIHBhZ2UgbnVtYmVyLlxuICogQHBhcmFtIGluZGV4IFRoZSBwYWdlIGluZGV4LiBaZXJvIGJhc2VkXG4gKi9cbmNvbnN0IGlzUGFnZUluZGV4VmlzaWJsZSA9IChhcnJheTogcmVhZG9ubHkgbnVtYmVyW10sIGluZGV4OiBudW1iZXIsIGN1cnJlbnRQYWdlSW5kZXg6IG51bWJlcik6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBwYWdlc09uRWFjaFNpZGVPZlRoZUFjdGl2ZVBhZ2UgPSBNYXRoLmZsb29yKE1JTl9QQUdFU19QRVJfQkxPQ0sgLyAyKTtcblxuICBjb25zdCBpc0luU3RhcnRCbG9jayA9IGluZGV4IDwgTUlOX1BBR0VTX1BFUl9CTE9DSztcbiAgY29uc3QgaXNJbkVuZEJsb2NrID0gaW5kZXggPiBhcnJheS5sZW5ndGggLSAxIC0gTUlOX1BBR0VTX1BFUl9CTE9DSztcbiAgY29uc3QgaXNJbk1pZGRsZUJsb2NrID1cbiAgICBpbmRleCA+IGN1cnJlbnRQYWdlSW5kZXggLSBwYWdlc09uRWFjaFNpZGVPZlRoZUFjdGl2ZVBhZ2UgLSAxICYmXG4gICAgaW5kZXggPCBjdXJyZW50UGFnZUluZGV4ICsgcGFnZXNPbkVhY2hTaWRlT2ZUaGVBY3RpdmVQYWdlICsgMTtcblxuICByZXR1cm4gaXNJblN0YXJ0QmxvY2sgfHwgaXNJbkVuZEJsb2NrIHx8IGlzSW5NaWRkbGVCbG9jaztcbn07XG5cbmNvbnN0IHVzZVBhZ2luYXRpb24gPSAoYmFzZTogbnVtYmVyLCB0b3RhbFBhZ2VzOiBudW1iZXIsIGN1cnJlbnRQYWdlOiBudW1iZXIpOiBQYWdpbmF0aW9uID0+IHtcbiAgLy8gdmFsaWRhdGUgYmFzZVxuICBjb25zdCBuQmFzZSA9IGJhc2UgPT09IDAgPyAxIDogMDtcbiAgaWYgKGJhc2UgIT09IDAgJiYgYmFzZSAhPT0gMSkge1xuICAgIGJhc2UgPSAwO1xuICB9XG5cbiAgLy8gdmFsaWRhdGUgY3VycmVudCBwYWdlXG4gIGlmIChjdXJyZW50UGFnZSA8IGJhc2UpIHtcbiAgICBjdXJyZW50UGFnZSA9IGJhc2U7XG4gIH1cbiAgaWYgKGN1cnJlbnRQYWdlID4gdG90YWxQYWdlcyAtIG5CYXNlKSB7XG4gICAgY3VycmVudFBhZ2UgPSB0b3RhbFBhZ2VzIC0gbkJhc2U7XG4gIH1cblxuICAvLyBnZW5lcmF0ZSBwYWdlIG51bWJlcnNcbiAgY29uc3QgbnVtYmVyczogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IGJhc2U7IGkgPCB0b3RhbFBhZ2VzICsgYmFzZTsgaSsrKSB7XG4gICAgbnVtYmVycy5wdXNoKGkpO1xuICB9XG5cbiAgLy8gZmlsdGVyIHBhZ2UgbnVtYmVyc1xuICBjb25zdCBjdXJyZW50UGFnZUluZGV4ID0gY3VycmVudFBhZ2UgLSBiYXNlO1xuICBjb25zdCBmaWx0ZXJlZDogbnVtYmVyW10gPSBudW1iZXJzLmZpbHRlcigobiwgaSkgPT4gaXNQYWdlSW5kZXhWaXNpYmxlKG51bWJlcnMsIGksIGN1cnJlbnRQYWdlSW5kZXgpKTtcblxuICAvLyBtYXAgdG8gUGFnaW5hdGlvblBhZ2VcbiAgY29uc3QgbWFwcGVkOiBQYWdpbmF0aW9uUGFnZVtdID0gZmlsdGVyZWQubWFwKChuKSA9PiAoe1xuICAgIG51bWJlcjogbixcbiAgICBpc0FjdGl2ZTogbiA9PT0gY3VycmVudFBhZ2UsXG4gICAgcmVuZGVyOiAoYmFzZSA9PT0gMCA/IG4gKyAxIDogbikgKyAnJyxcbiAgICBpbnRlcm5hbDogbiA9PT0gY3VycmVudFBhZ2UgPyAnKicgKyBuIDogbiArICcnLFxuICB9KSk7XG5cbiAgLy8gYWRkICcuLi4nIGJldHdlZW4gYmxvY2tzXG4gIGNvbnN0IHBhZ2VzOiBQYWdpbmF0aW9uUGFnZVtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWFwcGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY3VyciA9IG1hcHBlZFtpXTtcbiAgICBjb25zdCBuZXh0ID0gbWFwcGVkW2kgKyAxXTtcblxuICAgIHBhZ2VzLnB1c2goY3Vycik7XG5cbiAgICBpZiAobmV4dCAmJiBjdXJyLm51bWJlciAmJiBjdXJyLm51bWJlciArIDEgIT09IG5leHQubnVtYmVyKSB7XG4gICAgICBwYWdlcy5wdXNoKHtcbiAgICAgICAgbnVtYmVyOiB1bmRlZmluZWQsXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcbiAgICAgICAgcmVuZGVyOiAnLi4uJyxcbiAgICAgICAgaW50ZXJuYWw6ICcuLi4nLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYWdlczogcGFnZXMsXG4gICAgaXNGaXJzdFBhZ2U6IGN1cnJlbnRQYWdlID09PSBiYXNlLFxuICAgIGlzTGFzdFBhZ2U6IGN1cnJlbnRQYWdlID09PSB0b3RhbFBhZ2VzIC0gbkJhc2UsXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCB1c2VQYWdpbmF0aW9uO1xuIiwiaW1wb3J0IFBhZ2luYXRpb25QYWdlIGZyb20gJy4vdHlwZXMvUGFnaW5hdGlvblBhZ2UnO1xuLypcbiAqIENvcHlyaWdodCAyMDIwIEtoYWxpZCBILiBBbGhhcmlzaVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgUGFnaW5hdGlvblZpZXdQcm9wcyBmcm9tICcuL3R5cGVzL1BhZ2luYXRpb25WaWV3UHJvcHMnO1xuaW1wb3J0IHVzZVBhZ2luYXRpb24gZnJvbSAnLi91c2VQYWdpbmF0aW9uJztcblxuY29uc3QgUGFnaW5hdGlvblZpZXcgPSAoeyBiYXNlLCB0b3RhbFBhZ2VzLCBjdXJyZW50UGFnZSwgb25DaGFuZ2VQYWdlIH06IFBhZ2luYXRpb25WaWV3UHJvcHMpID0+IHtcbiAgY29uc3QgeyBwYWdlcywgaXNGaXJzdFBhZ2UsIGlzTGFzdFBhZ2UgfSA9IHVzZVBhZ2luYXRpb24oYmFzZSwgdG90YWxQYWdlcywgY3VycmVudFBhZ2UpO1xuXG4gIGNvbnN0IG9uQ2xpY2tQYWdlID0gKHBhZ2U6IFBhZ2luYXRpb25QYWdlKSA9PiB7XG4gICAgaWYgKHBhZ2UubnVtYmVyICE9PSB1bmRlZmluZWQgJiYgcGFnZS5udW1iZXIgIT09IGN1cnJlbnRQYWdlKSB7XG4gICAgICBvbkNoYW5nZVBhZ2UocGFnZS5udW1iZXIpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxuYXY+XG4gICAgICA8dWwgY2xhc3NOYW1lPSdwYWdpbmF0aW9uIGp1c3RpZnktY29udGVudC1jZW50ZXInPlxuICAgICAgICA8bGlcbiAgICAgICAgICBjbGFzc05hbWU9e2BwYWdlLWl0ZW0gJHtpc0ZpcnN0UGFnZSB8fCBwYWdlcy5sZW5ndGggPT0gMCA/ICdkaXNhYmxlZCcgOiAnJ31gfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+ICFpc0ZpcnN0UGFnZSAmJiBwYWdlcy5sZW5ndGggPiAwICYmIG9uQ2hhbmdlUGFnZShjdXJyZW50UGFnZSAtIDEpfT5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT0ncGFnZS1saW5rJyBhcmlhLWxhYmVsPSdQcmV2aW91cyc+XG4gICAgICAgICAgICAmbGFxdW87XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbGk+XG5cbiAgICAgICAge3BhZ2VzLm1hcCgocCwgaW5kZXgpID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBvbkNsaWNrUGFnZShwKX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcGFnZS1pdGVtICR7cC5pc0FjdGl2ZSA/ICdhY3RpdmUnIDogJyd9ICR7cC5udW1iZXIgPT09IHVuZGVmaW5lZCA/ICdkaXNhYmxlZCcgOiAnJ31gfT5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9J3BhZ2UtbGluayc+e3AucmVuZGVyfTwvYnV0dG9uPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cblxuICAgICAgICA8bGlcbiAgICAgICAgICBjbGFzc05hbWU9e2BwYWdlLWl0ZW0gJHtpc0xhc3RQYWdlID8gJ2Rpc2FibGVkJyA6ICcnfWB9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gIWlzTGFzdFBhZ2UgJiYgb25DaGFuZ2VQYWdlKGN1cnJlbnRQYWdlICsgMSl9PlxuICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPSdwYWdlLWxpbmsnIGFyaWEtbGFiZWw9J05leHQnPlxuICAgICAgICAgICAgJnJhcXVvO1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICA8L25hdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFBhZ2luYXRpb25WaWV3O1xuIiwiLypcbiAqIENvcHlyaWdodCAyMDIwIEtoYWxpZCBILiBBbGhhcmlzaVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBGQywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlc29sdmVPYmplY3RBdHRyaWJ1dGUgfSBmcm9tICcuLi91dGlscy91dGlscyc7XG5pbXBvcnQgdXNlRGF0YVNvdXJjZSBmcm9tICcuL2hvb2tzL3VzZURhdGFTb3VyY2UnO1xuaW1wb3J0IFBhZ2luYXRpb25WaWV3IGZyb20gJy4vcGFnaW5hdGlvbi9QYWdpbmF0aW9uVmlldyc7XG5pbXBvcnQgJy4vc3R5bGUuY3NzJztcbmltcG9ydCBScnVEYXRhVGFibGVQcm9wcyBmcm9tICcuL3R5cGVzL1JydURhdGFUYWJsZVByb3BzJztcbmltcG9ydCBTb3J0RGlyIGZyb20gJy4vdHlwZXMvU29ydERpcic7XG5pbXBvcnQgVGFibGVDb2x1bW4gZnJvbSAnLi90eXBlcy9UYWJsZUNvbHVtbic7XG5cbmNvbnN0IFJydURhdGFUYWJsZTogRkM8UnJ1RGF0YVRhYmxlUHJvcHM+ID0gKHtcbiAgcGFnZUZldGNoZXIsXG4gIGNvbHVtbnMsXG4gIHNlYXJjaCxcbiAgcGFnZVNpemUgPSAxMCxcbiAgbm9EYXRhTGFiZWwgPSAnTm8gRGF0YScsXG4gIGVycm9yTGFiZWwgPSAnRXJyb3InLFxuXG4gIC8vIHN0YXRlIHByb3BzXG4gIGRlZmF1bHRQYWdlTnVtYmVyLFxuICBkZWZhdWx0U29ydEtleSxcbiAgZGVmYXVsdFNvcnREaXIsXG4gIG9uQ2hhbmdlLFxufTogUnJ1RGF0YVRhYmxlUHJvcHMpID0+IHtcbiAgY29uc3QgW2N1cnJlbnRQYWdlLCBzZXRDdXJyZW50UGFnZV0gPSB1c2VTdGF0ZShkZWZhdWx0UGFnZU51bWJlciB8fCAwKTtcbiAgY29uc3QgW3NvcnRLZXksIHNldFNvcnRLZXldID0gdXNlU3RhdGUoZGVmYXVsdFNvcnRLZXkpO1xuICBjb25zdCBbc29ydERpciwgc2V0U29ydERpcl0gPSB1c2VTdGF0ZTxTb3J0RGlyPihkZWZhdWx0U29ydERpcik7XG4gIGNvbnN0IFtzZWFyY2hQYXJhbXMsIHNldFNlYXJjaFBhcmFtc10gPSB1c2VTdGF0ZTxhbnk+KHNlYXJjaCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRTZWFyY2hQYXJhbXMoc2VhcmNoKTtcbiAgICBzZXRDdXJyZW50UGFnZSgwKTtcbiAgfSwgW3NlYXJjaF0pO1xuXG4gIGNvbnN0IHsgaXNMb2FkaW5nLCBlcnJvciwgdG90YWxQYWdlcywgZGF0YSB9ID0gdXNlRGF0YVNvdXJjZShcbiAgICBwYWdlRmV0Y2hlcixcbiAgICBwYWdlU2l6ZSxcbiAgICBjdXJyZW50UGFnZSxcbiAgICBzb3J0S2V5LFxuICAgIHNvcnREaXIsXG4gICAgc2VhcmNoUGFyYW1zLFxuICAgIG9uQ2hhbmdlXG4gICk7XG5cbiAgY29uc3QgZ2V0U2VyaWFsTm8gPSAoaW5kZXg6IG51bWJlcikgPT4gY3VycmVudFBhZ2UgKiBwYWdlU2l6ZSArIChpbmRleCArIDEpO1xuXG4gIGNvbnN0IGdldFNvcnRLZXkgPSAoY29sOiBUYWJsZUNvbHVtbikgPT4ge1xuICAgIGlmIChjb2wuc29ydEtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbC52YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gY29sLnNvcnRLZXk7XG4gICAgICB9IGVsc2UgaWYgKGNvbC52YWx1ZSAhPT0gJyMnKSB7XG4gICAgICAgIHJldHVybiBjb2wudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2wuc29ydEtleTtcbiAgfTtcblxuICBjb25zdCBnZXRUaENsYXNzTmFtZSA9IChjb2w6IFRhYmxlQ29sdW1uKSA9PiB7XG4gICAgbGV0IHJlc3VsdCA9ICdycnUtZGF0YS10YWJsZV9fdGgnO1xuICAgIGNvbnN0IGtleSA9IGdldFNvcnRLZXkoY29sKTtcbiAgICBpZiAoa2V5KSB7XG4gICAgICBpZiAoa2V5ID09PSBzb3J0S2V5KSB7XG4gICAgICAgIHJlc3VsdCArPSAnIHJydS1kYXRhLXRhYmxlX190aC0tc29ydGFibGUgcnJ1LWRhdGEtdGFibGVfX3RoLS1zb3J0YWJsZS0nICsgc29ydERpcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCArPSAnIHJydS1kYXRhLXRhYmxlX190aC0tc29ydGFibGUnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIGNvbnN0IG9uU29ydCA9IChjb2w6IFRhYmxlQ29sdW1uKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gZ2V0U29ydEtleShjb2wpO1xuICAgIGlmIChrZXkpIHtcbiAgICAgIGlmIChrZXkgIT09IHNvcnRLZXkpIHtcbiAgICAgICAgc2V0U29ydEtleShrZXkpO1xuICAgICAgICBzZXRTb3J0RGlyKCdhc2MnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFNvcnREaXIoc29ydERpciA9PT0gJ2FzYycgPyAnZGVzYycgOiAnYXNjJyk7XG4gICAgICB9XG4gICAgICBzZXRDdXJyZW50UGFnZSgwKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2PlxuICAgICAgPHRhYmxlIGNsYXNzTmFtZT0ndGFibGUgdGFibGUtc3RyaXBlZCBycnUtZGF0YS10YWJsZSc+XG4gICAgICAgIDx0aGVhZD5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICB7Y29sdW1ucy5tYXAoKGNvbCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgPHRoIGtleT17aW5kZXh9IGNsYXNzTmFtZT17Z2V0VGhDbGFzc05hbWUoY29sKX0gb25DbGljaz17KCkgPT4gb25Tb3J0KGNvbCl9PlxuICAgICAgICAgICAgICAgIHtjb2wubGFiZWx9XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPHRyIGNsYXNzTmFtZT17YHJydS1kYXRhLXRhYmxlX19sb2FkaW5nLWJhci10ci0tJHtpc0xvYWRpbmcgPyAndmlzaWJsZScgOiAnaGlkZGVuJ31gfT5cbiAgICAgICAgICAgIDx0ZCBjb2xTcGFuPXtjb2x1bW5zLmxlbmd0aH0gY2xhc3NOYW1lPSdycnUtZGF0YS10YWJsZV9fbG9hZGluZy1iYXItdGQnPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncnJ1LWRhdGEtdGFibGVfX2xvYWRpbmctYmFyJz48L2Rpdj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICB7ZXJyb3IgJiYgKFxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQgY29sU3Bhbj17Y29sdW1ucy5sZW5ndGh9IGNsYXNzTmFtZT0ndGV4dC1jZW50ZXInPlxuICAgICAgICAgICAgICAgIHtlcnJvckxhYmVsfVxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtkYXRhLmxlbmd0aCA9PT0gMCAmJiAhZXJyb3IgJiYgKFxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQgY29sU3Bhbj17Y29sdW1ucy5sZW5ndGh9IGNsYXNzTmFtZT0ndGV4dC1jZW50ZXInPlxuICAgICAgICAgICAgICAgIHtub0RhdGFMYWJlbH1cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIHsoZGF0YSB8fCBbXSkubWFwKChyb3csIGkpID0+IChcbiAgICAgICAgICAgIDx0ciBrZXk9e2l9PlxuICAgICAgICAgICAgICB7Y29sdW1ucy5tYXAoKGNvbCwgaikgPT4gKFxuICAgICAgICAgICAgICAgIDx0ZCBrZXk9e2p9PlxuICAgICAgICAgICAgICAgICAge3R5cGVvZiBjb2wudmFsdWUgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICAgICAgPyBjb2wudmFsdWUocm93KVxuICAgICAgICAgICAgICAgICAgICA6IGNvbC52YWx1ZSA9PT0gJyMnXG4gICAgICAgICAgICAgICAgICAgICAgPyBnZXRTZXJpYWxObyhpKVxuICAgICAgICAgICAgICAgICAgICAgIDogcmVzb2x2ZU9iamVjdEF0dHJpYnV0ZShjb2wudmFsdWUsIHJvdyl9XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICAgIDxQYWdpbmF0aW9uVmlldyBiYXNlPXswfSB0b3RhbFBhZ2VzPXt0b3RhbFBhZ2VzfSBjdXJyZW50UGFnZT17Y3VycmVudFBhZ2V9IG9uQ2hhbmdlUGFnZT17c2V0Q3VycmVudFBhZ2V9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBScnVEYXRhVGFibGU7XG4iLCIvKlxuICogQ29weXJpZ2h0IDIwMjAgS2hhbGlkIEguIEFsaGFyaXNpXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEZDIH0gZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yTWVzc2FnZVByb3BzIHtcbiAgZXJyb3I6IGFueTtcbn1cblxuY29uc3QgRXJyb3JNZXNzYWdlOiBGQzxFcnJvck1lc3NhZ2VQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgcmV0dXJuIHByb3BzLmVycm9yID8gPGRpdiBjbGFzc05hbWU9J2ludmFsaWQtZmVlZGJhY2sgZC1ibG9jayc+e3Byb3BzLmVycm9yLm1lc3NhZ2V9PC9kaXY+IDogbnVsbDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVycm9yTWVzc2FnZTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMCBLaGFsaWQgSC4gQWxoYXJpc2lcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgRkMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgJy4vc3R5bGUuY3NzJztcblxuZXhwb3J0IHR5cGUgTGFiZWxQcm9wcyA9IHtcbiAgLyoqICAqL1xuICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTtcblxuICAvKiogICovXG4gIHJlcXVpcmVkQXN0ZXJpc2s/OiBib29sZWFuO1xuXG4gIC8qKiAgKi9cbiAgY2hpbGRyZW4/OiBKU1guRWxlbWVudDtcbn07XG5cbmNvbnN0IExhYmVsOiBGQzxMYWJlbFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGxhYmVsLCByZXF1aXJlZEFzdGVyaXNrLCBjaGlsZHJlbiB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIGxhYmVsID8gKFxuICAgIDxsYWJlbCBjbGFzc05hbWU9e2Bmb3JtLWxhYmVsICR7cmVxdWlyZWRBc3RlcmlzayA/ICdycnUtZm9ybS1sYWJlbC0tcmVxdWlyZWQtYXN0ZXJpc2snIDogJyd9YH0+XG4gICAgICB7bGFiZWx9XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9sYWJlbD5cbiAgKSA6IG51bGw7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBMYWJlbDtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMiBLaGFsaWQgSC4gQWxoYXJpc2lcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRm9ybUNvbnRleHQsIHVzZUZvcm1TdGF0ZSwgdXNlV2F0Y2ggfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHsgcmVzb2x2ZU9iamVjdEF0dHJpYnV0ZSB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWxzJztcblxuLyoqXG4gKiBAcGFyYW0gb25Qcm9ncmFtbWF0aWNWYWx1ZSBTaG91bGQgY2hlY2sgaWYgdGhlIHByb3ZpZGVkIHNlcmlhbGl6ZWQgdmFsdWUgZG9lcyBub3RcbiAqIG1hdGNoIHRoZSBjdXJyZW50IGRlc2VyaWFsaXplZCB2YWx1ZSBiZWZvcmUgdXBkYXRpbmcgdGhlIGZvcm1Db250ZXh0LCBvdGhlcndpc2UgeW91IHdvdWxkIGVuZCB1cCBpbiBhbiBpbmZpbml0ZSByZS1yZW5kZXJcbiAqL1xuZXhwb3J0IGNvbnN0IHVzZUZpZWxkID0gKG5hbWU6IHN0cmluZywgb25Qcm9ncmFtbWF0aWNWYWx1ZT86IChzZXJpYWxpemVkVmFsdWU6IGFueSkgPT4gdm9pZCkgPT4ge1xuICBjb25zdCBmb3JtQ29udGV4dCA9IHVzZUZvcm1Db250ZXh0KCk7XG4gIGNvbnN0IGZvcm1TdGF0ZSA9IHVzZUZvcm1TdGF0ZSh7IG5hbWU6IG5hbWUgfSk7XG4gIGNvbnN0IGlzUmVnaXN0ZXJlZCA9IHVzZVJlZjxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtpc1RvdWNoZWQsIHNldElzVG91Y2hlZF0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IHdhdGNoUmVzdWx0ID0gdXNlV2F0Y2goeyBuYW1lOiBuYW1lIH0pO1xuXG4gIGlmIChuYW1lICYmIG5hbWUuc3BsaXQoJy4nKS5maWx0ZXIoKHApID0+IC9cXGQrLy50ZXN0KHApKS5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGBGaWVsZCBuYW1lIFwiJHtuYW1lfVwiIGNhbm5vdCBpbmNsdWRlIGEgbnVtZXJpYyBwYXJ0LiBUcnkgdG8gcHJlZml4IHRoZSBudW1lcmljIHBhcnQgd2l0aCBzb21lIHN0cmluZy5gXG4gICAgKTtcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzUmVnaXN0ZXJlZC5jdXJyZW50ICYmIG9uUHJvZ3JhbW1hdGljVmFsdWUpIHtcbiAgICAgIG9uUHJvZ3JhbW1hdGljVmFsdWUod2F0Y2hSZXN1bHQpO1xuICAgIH1cbiAgfSwgW3dhdGNoUmVzdWx0LCBvblByb2dyYW1tYXRpY1ZhbHVlLCBpc1JlZ2lzdGVyZWRdKTtcblxuICBjb25zdCByZWdpc3RlciA9IChvblJlZ2lzdGVyOiAoaW5pdGlhbFZhbHVlOiBhbnkpID0+IHZvaWQpID0+IHtcbiAgICBpZiAoaXNSZWdpc3RlcmVkLmN1cnJlbnQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RyeWluZyB0byByZWdpc3RlciBhbiBhbHJlYWR5IHJlZ2lzdGVyZWQgZmllbGQuIFRoaXMgd2lsbCBiZSBpZ25vcmVkLicsIG5hbWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9IGZvcm1Db250ZXh0LmZvcm1TdGF0ZS5kZWZhdWx0VmFsdWVzXG4gICAgICA/IHJlc29sdmVPYmplY3RBdHRyaWJ1dGUobmFtZSwgZm9ybUNvbnRleHQuZm9ybVN0YXRlLmRlZmF1bHRWYWx1ZXMpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIC8vIG9yZGVyIGhlcmUgaXMgdmVyeSBpbXBvcnRhbnQsIHRvIGFsbG93IHRoZSBvblJlZ2lzdGVyIGhhbmRsZXIgdG8gYmUgYWJsZSB0byBleGVjdXRlIHNldFZhbHVlLlxuICAgIC8vIGFsc28gdGhpcyBpcyB3aHkgd2UgdXNlZCByZWYgaGVyZSBpbnN0ZWFkIG9mIHN0YXRlXG4gICAgaXNSZWdpc3RlcmVkLmN1cnJlbnQgPSB0cnVlO1xuICAgIG9uUmVnaXN0ZXIoaW5pdGlhbFZhbHVlKTtcbiAgICBjb25zb2xlLmRlYnVnKCdyZWdpc3RlcmVkJywgbmFtZSwgaW5pdGlhbFZhbHVlKTtcbiAgfTtcblxuICBjb25zdCB1bnJlZ2lzdGVyID0gKCkgPT4ge1xuICAgIGlmICghaXNSZWdpc3RlcmVkLmN1cnJlbnQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RyeWluZyB0byB1bnJlZ2lzdGVyIGFuIGFscmVhZHkgdW5yZWdpc3RlcmVkIGZpZWxkLiBUaGlzIHdpbGwgYmUgaWdub3JlZC4nLCBuYW1lKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3JtQ29udGV4dC51bnJlZ2lzdGVyKG5hbWUpO1xuICAgIGlzUmVnaXN0ZXJlZC5jdXJyZW50ID0gZmFsc2U7XG4gICAgY29uc29sZS5kZWJ1ZygndW5yZWdpc3RlcmVkJywgbmFtZSk7XG4gIH07XG5cbiAgY29uc3QgbWFya1RvdWNoZWQgPSAoKSA9PiB7XG4gICAgaWYgKCFpc1JlZ2lzdGVyZWQuY3VycmVudCkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ1RyeWluZyB0byBtYXJrIGEgZmllbGQgYXMgdG91Y2hlZCB3aGlsZSB0aGUgZmllbGQgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQgeWV0LiBUaGlzIHdpbGwgYmUgaWdub3JlZC4nLFxuICAgICAgICBuYW1lXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghaXNUb3VjaGVkKSB7XG4gICAgICBzZXRJc1RvdWNoZWQodHJ1ZSk7XG4gICAgICBmb3JtQ29udGV4dC50cmlnZ2VyKG5hbWUpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBzZXRWYWx1ZSA9ICh2YWx1ZTogYW55KSA9PiB7XG4gICAgaWYgKCFpc1JlZ2lzdGVyZWQuY3VycmVudCkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ1RyeWluZyB0byBzZXQgdGhlIHZhbHVlIGZvciBhIGZpZWxkIHRoYXQgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQgeWV0LiBUaGlzIHdpbGwgYmUgaWdub3JlZC4nLFxuICAgICAgICBuYW1lLFxuICAgICAgICB2YWx1ZVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3JtQ29udGV4dC5zZXRWYWx1ZShuYW1lLCB2YWx1ZSwge1xuICAgICAgc2hvdWxkVmFsaWRhdGU6IGlzVG91Y2hlZCB8fCBlcnJvcixcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogZG9uJ3QgdXNlIGBmb3JtQ29udGV4dC5nZXRGaWVsZFN0YXRlKG5hbWUpLmVycm9yYCBhcyB0aGUgZXJyb3Igd2lsbCBub3QgYmUgdXBkYXRlZCB1bnRpbCB0aGUgbmV4dCB1cGRhdGU7XG4gICAqIGRlbGF5aW5nIHRoZSBlcnJvciBtZXNzYWdlLCBhbHNvIGRlbGF5aW5nIHRoZSBjbGVhcmFuY2Ugb2YgdGhlIGVycm9yIG1lc3NhZ2VcbiAgICovXG4gIGNvbnN0IGVycm9yID0gcmVzb2x2ZU9iamVjdEF0dHJpYnV0ZShuYW1lLCBmb3JtU3RhdGUuZXJyb3JzKTtcblxuICByZXR1cm4ge1xuICAgIHJlZ2lzdGVyOiByZWdpc3RlcixcbiAgICB1bnJlZ2lzdGVyOiB1bnJlZ2lzdGVyLFxuICAgIHNldFZhbHVlOiBzZXRWYWx1ZSxcbiAgICBlcnJvcjogZXJyb3IsXG4gICAgb25CbHVyOiBtYXJrVG91Y2hlZCxcbiAgfTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IDIwMjAgS2hhbGlkIEguIEFsaGFyaXNpXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEZDLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZGVlcEVxdWFsIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IEVycm9yTWVzc2FnZSBmcm9tICcuLi9FcnJvck1lc3NhZ2UvRXJyb3JNZXNzYWdlJztcbmltcG9ydCBMYWJlbCBmcm9tICcuLi9MYWJlbC9MYWJlbCc7XG5pbXBvcnQgeyB1c2VGaWVsZCB9IGZyb20gJy4uL2hvb2tzL3VzZUZpZWxkJztcbmltcG9ydCBScnVDaGVja2JveElucHV0UHJvcHMgZnJvbSAnLi90eXBlcy9ScnVDaGVja2JveElucHV0UHJvcHMnO1xuXG5jb25zdCBScnVDaGVja2JveElucHV0OiBGQzxScnVDaGVja2JveElucHV0UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNvbnN0IGZpZWxkID0gdXNlRmllbGQocHJvcHMubmFtZSwgKHNlcmlhbGl6ZWRWYWx1ZSkgPT4ge1xuICAgIGlmICghZGVlcEVxdWFsKHNlcmlhbGl6ZWRWYWx1ZSwgdmFsdWUpKSB7XG4gICAgICBzZXRWYWx1ZShzZXJpYWxpemVkVmFsdWUpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qgc2V0TmV3VmFsdWUgPSAodmFsOiBib29sZWFuKSA9PiB7XG4gICAgZmllbGQuc2V0VmFsdWUodmFsKTtcbiAgICBzZXRWYWx1ZSh2YWwpO1xuXG4gICAgaWYgKHByb3BzLm9uQ2hhbmdlKSB7XG4gICAgICBwcm9wcy5vbkNoYW5nZSh2YWwpO1xuICAgIH1cbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGZpZWxkLnJlZ2lzdGVyKChpbml0aWFsVmFsdWUpID0+IHtcbiAgICAgIHNldE5ld1ZhbHVlKEJvb2xlYW4oaW5pdGlhbFZhbHVlKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gKCkgPT4gZmllbGQudW5yZWdpc3RlcigpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT0nZm9ybS1ncm91cCcgZGF0YS1maWVsZC1uYW1lPXtwcm9wcy5uYW1lfSBkYXRhLWZpZWxkLXZhbHVlPXt2YWx1ZX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YGZvcm0tY2hlY2sgJHtwcm9wcy5pc1N3aXRjaCA/ICdmb3JtLXN3aXRjaCcgOiAnJ31gfSByb2xlPSdjaGVja2JveCcgYXJpYS1jaGVja2VkPXt2YWx1ZX0+XG4gICAgICAgIDxMYWJlbCBsYWJlbD17cHJvcHMubGFiZWx9PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgbmFtZT17cHJvcHMubmFtZX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e3ZhbHVlfVxuICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXROZXdWYWx1ZShlLnRhcmdldC5jaGVja2VkKX1cbiAgICAgICAgICAgIG9uQmx1cj17ZmllbGQub25CbHVyfVxuICAgICAgICAgICAgdHlwZT0nY2hlY2tib3gnXG4gICAgICAgICAgICBjbGFzc05hbWU9eydmb3JtLWNoZWNrLWlucHV0ICcgKyAoZmllbGQuZXJyb3IgPyAnaXMtaW52YWxpZCcgOiAnJyl9XG4gICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuZGlzYWJsZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9MYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICAgPEVycm9yTWVzc2FnZSBlcnJvcj17ZmllbGQuZXJyb3J9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBScnVDaGVja2JveElucHV0O1xuIiwiLypcbiAqIENvcHlyaWdodCAyMDIwIEtoYWxpZCBILiBBbGhhcmlzaVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBDYWxlbmRhclR5cGUsIEludGxEYXRlIH0gZnJvbSAnaW50bC1kYXRlJztcblxuY29uc3QgZ2VuZXJhdGVTaXhXZWVrc0NhbGVuZGFyID0gKGNhbGVuZGFyVHlwZTogQ2FsZW5kYXJUeXBlLCB5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIpOiBJbnRsRGF0ZVtdID0+IHtcbiAgY29uc3QgZmlyc3REYXlPZk1vbnRoRGF0ZSA9IEludGxEYXRlLm9mKGNhbGVuZGFyVHlwZSwgeWVhciwgbW9udGgsIDEpO1xuICBjb25zdCBmaXJzdERheU9mVGhlVmlzaWJsZUNhbGVuZGFyID0gZmlyc3REYXlPZk1vbnRoRGF0ZS5taW51c0RheXMoZmlyc3REYXlPZk1vbnRoRGF0ZS5nZXREYXlPZldlZWsoKSAtIDEpO1xuXG4gIGNvbnN0IHJlc3VsdDogSW50bERhdGVbXSA9IFtmaXJzdERheU9mVGhlVmlzaWJsZUNhbGVuZGFyXTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCA0MjsgaSsrKSB7XG4gICAgLy8gNiByb3dzIG9mIDcgZGF5cyBlYWNoID0gNDIgZGF5c1xuICAgIHJlc3VsdC5wdXNoKGZpcnN0RGF5T2ZUaGVWaXNpYmxlQ2FsZW5kYXIucGx1c0RheXMoaSkpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGdlbmVyYXRlU2l4V2Vla3NDYWxlbmRhcjtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMCBLaGFsaWQgSC4gQWxoYXJpc2lcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgSW50bERhdGUgfSBmcm9tICdpbnRsLWRhdGUnO1xuaW1wb3J0IHsgRkMsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZURldGVjdENsaWNrT3V0c2lkZSB9IGZyb20gJ3JlYWN0LWRldGVjdC1jbGljay1vdXRzaWRlJztcbmltcG9ydCB7IGRlZXBFcXVhbCwgcmFuZ2VPZlNpemUgfSBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5pbXBvcnQgRXJyb3JNZXNzYWdlIGZyb20gJy4uL0Vycm9yTWVzc2FnZS9FcnJvck1lc3NhZ2UnO1xuaW1wb3J0IExhYmVsIGZyb20gJy4uL0xhYmVsL0xhYmVsJztcbmltcG9ydCB7IHVzZUZpZWxkIH0gZnJvbSAnLi4vaG9va3MvdXNlRmllbGQnO1xuaW1wb3J0ICcuL3N0eWxlLmNzcyc7XG5pbXBvcnQgUnJ1RGF0ZVRpbWVJbnB1dENhbGVuZGFyVHlwZSBmcm9tICcuL3R5cGVzL1JydURhdGVUaW1lSW5wdXRDYWxlbmRhclR5cGUnO1xuaW1wb3J0IFJydURhdGVUaW1lSW5wdXREYXRlQ29uZmlnIGZyb20gJy4vdHlwZXMvUnJ1RGF0ZVRpbWVJbnB1dERhdGVDb25maWcnO1xuaW1wb3J0IFJydURhdGVUaW1lSW5wdXRNb2RlIGZyb20gJy4vdHlwZXMvUnJ1RGF0ZVRpbWVJbnB1dE1vZGUnO1xuaW1wb3J0IFJydURhdGVUaW1lSW5wdXRQcm9wcyBmcm9tICcuL3R5cGVzL1JydURhdGVUaW1lSW5wdXRQcm9wcyc7XG5pbXBvcnQgZ2VuZXJhdGVTaXhXZWVrc0NhbGVuZGFyIGZyb20gJy4vdXRpbHMvZ2VuZXJhdGVTaXhXZWVrc0NhbGVuZGFyJztcblxuY29uc3QgSVNPODYwMV9EQVRFID0gLyhbMC05XXs0fSktKFswLTldezJ9KS0oWzAtOV17Mn0pLztcbmNvbnN0IElTTzg2MDFfREFURVRJTUUgPSAvKFswLTldezR9KS0oWzAtOV17Mn0pLShbMC05XXsyfSkoVHwgezF9KShbMC05XXsyfSk6KFswLTldezJ9KTooWzAtOV17Mn0pKC4oWzAtOV0rKSk/LztcblxuY29uc3QgUnJ1RGF0ZVRpbWVJbnB1dDogRkM8UnJ1RGF0ZVRpbWVJbnB1dFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCBbaXNJbml0aWFsaXplZCwgc2V0SXNJbml0aWFsaXplZF0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgZmllbGQgPSB1c2VGaWVsZChwcm9wcy5uYW1lLCAoc2VyaWFsaXplZFZhbHVlKSA9PiB7XG4gICAgaWYgKCFkZWVwRXF1YWwoc2VyaWFsaXplZFZhbHVlLCB2YWx1ZSkpIHtcbiAgICAgIHNldFZhbHVlKHNlcmlhbGl6ZWRWYWx1ZSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBnZXRDYWxlbmRhclR5cGUgPSAoKTogUnJ1RGF0ZVRpbWVJbnB1dENhbGVuZGFyVHlwZSA9PiB7XG4gICAgcmV0dXJuIHByb3BzLmNhbGVuZGFyVHlwZSB8fCAnZ3JlZ29yaWFuJztcbiAgfTtcblxuICAvLyBoYW5kbGUgcG9wdXAgY2xpY2sgb3V0c2lkZSB0byBkaXNtaXNzXG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBwb3B1cFJlZiA9IHVzZURldGVjdENsaWNrT3V0c2lkZSh7XG4gICAgb25UcmlnZ2VyZWQ6IChlKSA9PiB7XG4gICAgICBpZiAoZS50YXJnZXQgIT0gaW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICBjbG9zZVBvcHVwKCk7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgdG9kYXkgPSBJbnRsRGF0ZS50b2RheSgpO1xuICBjb25zdCBbY2FsZW5kYXIsIHNldENhbGVuZGFyXSA9IHVzZVN0YXRlPEludGxEYXRlW10+KFxuICAgIGdlbmVyYXRlU2l4V2Vla3NDYWxlbmRhcihnZXRDYWxlbmRhclR5cGUoKSwgdG9kYXkuZ2V0WWVhcihnZXRDYWxlbmRhclR5cGUoKSksIHRvZGF5LmdldE1vbnRoKGdldENhbGVuZGFyVHlwZSgpKSlcbiAgKTtcbiAgY29uc3QgW2lzUG9wdXBTaG93biwgc2V0SXNQb3B1cFNob3duXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcblxuICBjb25zdCBbaG91ciwgc2V0SG91cl0gPSB1c2VTdGF0ZTxudW1iZXI+KDApO1xuICBjb25zdCBbbWludXRlLCBzZXRNaW51dGVdID0gdXNlU3RhdGU8bnVtYmVyPigwKTtcbiAgY29uc3QgW3NlY29uZCwgc2V0U2Vjb25kXSA9IHVzZVN0YXRlPG51bWJlcj4oMCk7XG5cbiAgY29uc3QgW3llYXIsIHNldFllYXJdID0gdXNlU3RhdGU8bnVtYmVyPih0b2RheS5nZXRZZWFyKGdldENhbGVuZGFyVHlwZSgpKSk7XG4gIGNvbnN0IFttb250aCwgc2V0TW9udGhdID0gdXNlU3RhdGU8bnVtYmVyPih0b2RheS5nZXRNb250aChnZXRDYWxlbmRhclR5cGUoKSkpO1xuICBjb25zdCBbaW50bERhdGUsIHNldEludGxEYXRlXSA9IHVzZVN0YXRlPEludGxEYXRlIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgZ2V0TW9kZSA9ICgpOiBScnVEYXRlVGltZUlucHV0TW9kZSA9PiB7XG4gICAgcmV0dXJuIHByb3BzLm1vZGUgPyBwcm9wcy5tb2RlIDogJ2RhdGV0aW1lJztcbiAgfTtcblxuICBjb25zdCBnZXREYXRlQ29uZmlnID0gKGRhdGU6IEludGxEYXRlKTogUnJ1RGF0ZVRpbWVJbnB1dERhdGVDb25maWcgfCB1bmRlZmluZWQgfCBudWxsIHwgdm9pZCA9PiB7XG4gICAgaWYgKHByb3BzLmdldERhdGVDb25maWcpIHtcbiAgICAgIHJldHVybiBwcm9wcy5nZXREYXRlQ29uZmlnKGRhdGUudG9TdHJpbmcoZ2V0Q2FsZW5kYXJUeXBlKCkpKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY2xvc2VQb3B1cCA9ICgpID0+IHtcbiAgICBzZXRJc1BvcHVwU2hvd24oZmFsc2UpO1xuICAgIGZpZWxkLm9uQmx1cigpO1xuICB9O1xuXG4gIGNvbnN0IHByZXZpb3VzTW9udGggPSAoKSA9PiB7XG4gICAgaWYgKG1vbnRoID09PSAxKSB7XG4gICAgICBzZXRZZWFyKHllYXIgLSAxKTtcbiAgICAgIHNldE1vbnRoKDEyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0TW9udGgobW9udGggLSAxKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgbmV4dE1vbnRoID0gKCkgPT4ge1xuICAgIGlmIChtb250aCA9PT0gMTIpIHtcbiAgICAgIHNldFllYXIoeWVhciArIDEpO1xuICAgICAgc2V0TW9udGgoMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldE1vbnRoKG1vbnRoICsgMSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9uU2VsZWN0RGF0ZSA9IChkYXRlOiBJbnRsRGF0ZSkgPT4ge1xuICAgIGlmIChnZXREYXRlQ29uZmlnKGRhdGUpPy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRJbnRsRGF0ZShkYXRlKTtcbiAgICAgIGNsb3NlUG9wdXAoKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgc2VsZWN0QWxsVGV4dEluSW5wdXQgPSAoZTogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpbnB1dC5zZWxlY3QoKTtcbiAgfTtcblxuICBjb25zdCBvbkludGVnZXJJbnB1dENoYW5nZSA9ICh2YWw6IHN0cmluZywgbWluOiBudW1iZXIsIG1heDogbnVtYmVyLCBjaGFuZ2VTdGF0ZUZ1bmN0aW9uOiAodmFsOiBudW1iZXIpID0+IHZvaWQpID0+IHtcbiAgICBsZXQgdmFsdWU6IG51bWJlciB8IG51bGwgPSBwYXJzZUludCh2YWwpO1xuICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIDwgbWluKSB7XG4gICAgICB2YWx1ZSA9IG1pbjtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID4gbWF4KSB7XG4gICAgICB2YWx1ZSA9IG1heDtcbiAgICB9XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjaGFuZ2VTdGF0ZUZ1bmN0aW9uKHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb25JbnRlZ2VySW5wdXRLZXlEb3duID0gKGU6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4sIGlucHV0UGFydFR5cGU6ICdkYXRlJyB8ICd0aW1lJykgPT4ge1xuICAgIGNvbnN0IGlzRW50ZXIgPSBlLmtleSA9PT0gJ0VudGVyJztcbiAgICBjb25zdCBzaG91bGRIaWRlUG9wdXAgPSBpbnB1dFBhcnRUeXBlID09PSAndGltZScgJiYgaW50bERhdGU7XG4gICAgaWYgKGlzRW50ZXIgJiYgIXNob3VsZEhpZGVQb3B1cCkge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb25ZZWFyQmx1ciA9ICgpID0+IHtcbiAgICBjb25zdCBNSU5fWUVBUiA9IGdldENhbGVuZGFyVHlwZSgpID09PSAnZ3JlZ29yaWFuJyA/IDE5MDEgOiAxMzE4O1xuICAgIGlmICh5ZWFyIDwgTUlOX1lFQVIpIHtcbiAgICAgIHNldFllYXIoTUlOX1lFQVIpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogaW5pdFxuICAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmaWVsZC5yZWdpc3RlcigoaW5pdGlhbFZhbHVlKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgICAgbGV0IG1hdGNoZXM6IHN0cmluZ1tdIHwgbnVsbCA9IGluaXRpYWxWYWx1ZS5tYXRjaChnZXRNb2RlKCkgPT09ICdkYXRldGltZScgPyBJU084NjAxX0RBVEVUSU1FIDogSVNPODYwMV9EQVRFKTtcbiAgICAgICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IEludGxEYXRlLm9mKFxuICAgICAgICAgICAgICBnZXRDYWxlbmRhclR5cGUoKSxcbiAgICAgICAgICAgICAgcGFyc2VJbnQobWF0Y2hlc1sxXSksXG4gICAgICAgICAgICAgIHBhcnNlSW50KG1hdGNoZXNbMl0pLFxuICAgICAgICAgICAgICBwYXJzZUludChtYXRjaGVzWzNdKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHNldFllYXIoZGF0ZS5nZXRZZWFyKGdldENhbGVuZGFyVHlwZSgpKSk7XG4gICAgICAgICAgICBzZXRNb250aChkYXRlLmdldE1vbnRoKGdldENhbGVuZGFyVHlwZSgpKSk7XG4gICAgICAgICAgICBzZXRJbnRsRGF0ZShkYXRlKTtcbiAgICAgICAgICAgIG9uSW50ZWdlcklucHV0Q2hhbmdlKG1hdGNoZXNbNV0sIDAsIDIzLCBzZXRIb3VyKTtcbiAgICAgICAgICAgIG9uSW50ZWdlcklucHV0Q2hhbmdlKG1hdGNoZXNbNl0sIDAsIDU5LCBzZXRNaW51dGUpO1xuICAgICAgICAgICAgb25JbnRlZ2VySW5wdXRDaGFuZ2UobWF0Y2hlc1s3XSwgMCwgNTksIHNldFNlY29uZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICBzZXRZZWFyKHRvZGF5LmdldFllYXIoZ2V0Q2FsZW5kYXJUeXBlKCkpKTtcbiAgICAgICAgICBzZXRNb250aCh0b2RheS5nZXRNb250aChnZXRDYWxlbmRhclR5cGUoKSkpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgc2V0SXNJbml0aWFsaXplZCh0cnVlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoKSA9PiBmaWVsZC51bnJlZ2lzdGVyKCk7XG4gIH0sIFtwcm9wcy5jYWxlbmRhclR5cGVdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldENhbGVuZGFyKGdlbmVyYXRlU2l4V2Vla3NDYWxlbmRhcihnZXRDYWxlbmRhclR5cGUoKSwgeWVhciwgbW9udGgpKTtcbiAgfSwgW3llYXIsIG1vbnRoXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgbmV3VmFsdWUgPSBudWxsO1xuICAgIGlmIChpbnRsRGF0ZSkge1xuICAgICAgbmV3VmFsdWUgPSBpbnRsRGF0ZS5mb3JtYXQoZ2V0Q2FsZW5kYXJUeXBlKCksICd5eXl5LU1NLWRkJyk7XG4gICAgICBpZiAoZ2V0TW9kZSgpID09PSAnZGF0ZXRpbWUnKSB7XG4gICAgICAgIGNvbnN0IGggPSBob3VyLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgY29uc3QgbSA9IG1pbnV0ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICAgIGNvbnN0IHMgPSBzZWNvbmQudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICBuZXdWYWx1ZSArPSBgICR7aH06JHttfToke3N9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgZmllbGQuc2V0VmFsdWUobmV3VmFsdWUpO1xuXG4gICAgaWYgKHByb3BzLm9uQ2hhbmdlICYmIGlzSW5pdGlhbGl6ZWQgJiYgIWlzUG9wdXBTaG93bikge1xuICAgICAgcHJvcHMub25DaGFuZ2UobmV3VmFsdWUpO1xuICAgIH1cbiAgfSwgW2ludGxEYXRlLCBob3VyLCBtaW51dGUsIHNlY29uZCwgaXNQb3B1cFNob3duXSk7XG5cbiAgY29uc3QgZ2V0RGF5Q2xhc3NOYW1lID0gKHRhcmdldERhdGU6IEludGxEYXRlKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBkYXRlQ29uZmlnID0gZ2V0RGF0ZUNvbmZpZyh0YXJnZXREYXRlKTtcbiAgICBsZXQgY2xhc3NOYW1lID0gJ3JydS1kYXRlLWlucHV0X19kYXknO1xuICAgIGlmICh0YXJnZXREYXRlLmdldE1vbnRoKGdldENhbGVuZGFyVHlwZSgpKSAhPSBtb250aCkge1xuICAgICAgY2xhc3NOYW1lICs9ICcgcnJ1LWRhdGUtaW5wdXRfX2RheS0tbm90LXNhbWUtbW9udGgnO1xuICAgIH1cbiAgICBpZiAodGFyZ2V0RGF0ZS5pc0VxdWFsKHRvZGF5KSkge1xuICAgICAgY2xhc3NOYW1lICs9ICcgcnJ1LWRhdGUtaW5wdXRfX2RheS0tdG9kYXknO1xuICAgIH1cbiAgICBpZiAoaW50bERhdGUgJiYgdGFyZ2V0RGF0ZS5pc0VxdWFsKGludGxEYXRlKSkge1xuICAgICAgY2xhc3NOYW1lICs9ICcgcnJ1LWRhdGUtaW5wdXRfX2RheS0tc2VsZWN0ZWQnO1xuICAgIH1cbiAgICBpZiAoZGF0ZUNvbmZpZz8uZGlzYWJsZWQpIHtcbiAgICAgIGNsYXNzTmFtZSArPSAnIHJydS1kYXRlLWlucHV0X19kYXktLWRpc2FibGVkJztcbiAgICB9XG4gICAgaWYgKGRhdGVDb25maWc/LmNsYXNzTmFtZSkge1xuICAgICAgY2xhc3NOYW1lICs9ICcgJyArIGRhdGVDb25maWcuY2xhc3NOYW1lO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3NOYW1lO1xuICB9O1xuXG4gIGlmICghY2FsZW5kYXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9J2Zvcm0tZ3JvdXAnIGRhdGEtZmllbGQtbmFtZT17cHJvcHMubmFtZX0gZGF0YS1maWVsZC12YWx1ZT17dmFsdWV9PlxuICAgICAgPExhYmVsIGxhYmVsPXtwcm9wcy5sYWJlbH0gcmVxdWlyZWRBc3Rlcmlzaz17cHJvcHMucmVxdWlyZWRBc3Rlcmlza30+PC9MYWJlbD5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9J3JydS1kYXRlLWlucHV0Jz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JydS1kYXRlLWlucHV0X19pbnB1dC13cmFwcGVyJz5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgICAgICBkaXI9J2x0cidcbiAgICAgICAgICAgIHR5cGU9J3RleHQnXG4gICAgICAgICAgICBhdXRvQ29tcGxldGU9J29mZidcbiAgICAgICAgICAgIG5hbWU9e3Byb3BzLm5hbWV9XG4gICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuZGlzYWJsZWR9XG4gICAgICAgICAgICB2YWx1ZT17dmFsdWUgfHwgJyd9XG4gICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHt9fVxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHNldElzUG9wdXBTaG93bih0cnVlKX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17YHJydS1kYXRlLWlucHV0X19pbnB1dCBmb3JtLWNvbnRyb2wgJHtmaWVsZC5lcnJvciA/ICdpcy1pbnZhbGlkJyA6ICcnfWB9XG4gICAgICAgICAgLz5cblxuICAgICAgICAgIHshcHJvcHMuZGlzYWJsZWQgJiYgdmFsdWUgIT09IG51bGwgJiYgKFxuICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiBzZXRJbnRsRGF0ZShudWxsKX0gY2xhc3NOYW1lPSdycnUtZGF0ZS1pbnB1dF9fY2xlYXItYnV0dG9uJz5cbiAgICAgICAgICAgICAg4qivXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgcmVmPXtwb3B1cFJlZn1cbiAgICAgICAgICBjbGFzc05hbWU9e2BycnUtZGF0ZS1pbnB1dF9fcG9wdXAgcnJ1LWRhdGUtaW5wdXRfX3BvcHVwLS0ke2lzUG9wdXBTaG93biA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nfWB9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdycnUtZGF0ZS1pbnB1dF9fY29udGFpbmVyJz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdycnUtZGF0ZS1pbnB1dF9faGVhZGVyJz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JydS1kYXRlLWlucHV0X19tb250aC1idXR0b24nIG9uQ2xpY2s9e3ByZXZpb3VzTW9udGh9PlxuICAgICAgICAgICAgICAgIHsnPCd9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPSd0ZXh0J1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0ncnJ1LWRhdGUtaW5wdXRfX2RhdGUtcGFydC1pbnB1dCdcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtzZWxlY3RBbGxUZXh0SW5JbnB1dH1cbiAgICAgICAgICAgICAgICBvbktleURvd249eyhlKSA9PiBvbkludGVnZXJJbnB1dEtleURvd24oZSwgJ2RhdGUnKX1cbiAgICAgICAgICAgICAgICB2YWx1ZT17eWVhcn1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IG9uSW50ZWdlcklucHV0Q2hhbmdlKGUudGFyZ2V0LnZhbHVlLCAxLCAyMzAwLCBzZXRZZWFyKX1cbiAgICAgICAgICAgICAgICBvbkJsdXI9e29uWWVhckJsdXJ9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9J3RleHQnXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPSdycnUtZGF0ZS1pbnB1dF9fZGF0ZS1wYXJ0LWlucHV0J1xuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3NlbGVjdEFsbFRleHRJbklucHV0fVxuICAgICAgICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IG9uSW50ZWdlcklucHV0S2V5RG93bihlLCAnZGF0ZScpfVxuICAgICAgICAgICAgICAgIHZhbHVlPXttb250aH1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IG9uSW50ZWdlcklucHV0Q2hhbmdlKGUudGFyZ2V0LnZhbHVlLCAxLCAxMiwgc2V0TW9udGgpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncnJ1LWRhdGUtaW5wdXRfX21vbnRoLWJ1dHRvbicgb25DbGljaz17bmV4dE1vbnRofT5cbiAgICAgICAgICAgICAgICB7Jz4nfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncnJ1LWRhdGUtaW5wdXRfX2JvZHknPlxuICAgICAgICAgICAgICA8dGFibGU+XG4gICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAge3JhbmdlT2ZTaXplKDYpLm1hcCgoaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8dHIga2V5PXtgciR7aX1gfT5cbiAgICAgICAgICAgICAgICAgICAgICB7cmFuZ2VPZlNpemUoNykubWFwKChqKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGkgKiA3ICsgajtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBjYWxlbmRhcltpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQga2V5PXtgZCR7ZGF0ZS50b1N0cmluZyhnZXRDYWxlbmRhclR5cGUoKSl9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1kYXRlPXtkYXRlLnRvU3RyaW5nKGdldENhbGVuZGFyVHlwZSgpKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0RGF5Q2xhc3NOYW1lKGRhdGUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e2dldERhdGVDb25maWcoZGF0ZSk/LnN0eWxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IG9uU2VsZWN0RGF0ZShkYXRlKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZGF0ZS5nZXREYXkoZ2V0Q2FsZW5kYXJUeXBlKCkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAge2dldE1vZGUoKSA9PT0gJ2RhdGV0aW1lJyAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdycnUtZGF0ZS1pbnB1dF9fZm9vdGVyJz5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9J3RleHQnXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9J3JydS1kYXRlLWlucHV0X190aW1lLXBhcnQtaW5wdXQnXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXtzZWxlY3RBbGxUZXh0SW5JbnB1dH1cbiAgICAgICAgICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IG9uSW50ZWdlcklucHV0S2V5RG93bihlLCAndGltZScpfVxuICAgICAgICAgICAgICAgICAgdmFsdWU9e2hvdXIudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBvbkludGVnZXJJbnB1dENoYW5nZShlLnRhcmdldC52YWx1ZSwgMCwgMjMsIHNldEhvdXIpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgeycgOiAnfVxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT0ndGV4dCdcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0ncnJ1LWRhdGUtaW5wdXRfX3RpbWUtcGFydC1pbnB1dCdcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3NlbGVjdEFsbFRleHRJbklucHV0fVxuICAgICAgICAgICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4gb25JbnRlZ2VySW5wdXRLZXlEb3duKGUsICd0aW1lJyl9XG4gICAgICAgICAgICAgICAgICB2YWx1ZT17bWludXRlLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gb25JbnRlZ2VySW5wdXRDaGFuZ2UoZS50YXJnZXQudmFsdWUsIDAsIDU5LCBzZXRNaW51dGUpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgeycgOiAnfVxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT0ndGV4dCdcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0ncnJ1LWRhdGUtaW5wdXRfX3RpbWUtcGFydC1pbnB1dCdcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3NlbGVjdEFsbFRleHRJbklucHV0fVxuICAgICAgICAgICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4gb25JbnRlZ2VySW5wdXRLZXlEb3duKGUsICd0aW1lJyl9XG4gICAgICAgICAgICAgICAgICB2YWx1ZT17c2Vjb25kLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gb25JbnRlZ2VySW5wdXRDaGFuZ2UoZS50YXJnZXQudmFsdWUsIDAsIDU5LCBzZXRTZWNvbmQpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxFcnJvck1lc3NhZ2UgZXJyb3I9e2ZpZWxkLmVycm9yfSAvPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUnJ1RGF0ZVRpbWVJbnB1dDtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMCBLaGFsaWQgSC4gQWxoYXJpc2lcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgRkMsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBkZWVwRXF1YWwgfSBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5pbXBvcnQgRXJyb3JNZXNzYWdlIGZyb20gJy4uL0Vycm9yTWVzc2FnZS9FcnJvck1lc3NhZ2UnO1xuaW1wb3J0IExhYmVsIGZyb20gJy4uL0xhYmVsL0xhYmVsJztcbmltcG9ydCB7IHVzZUZpZWxkIH0gZnJvbSAnLi4vaG9va3MvdXNlRmllbGQnO1xuaW1wb3J0ICcuL3N0eWxlLmNzcyc7XG5pbXBvcnQgUnJ1RmlsZUlucHV0UHJvcHMgZnJvbSAnLi90eXBlcy9ScnVGaWxlSW5wdXRQcm9wcyc7XG5cbmNvbnN0IFJydUZpbGVJbnB1dDogRkM8UnJ1RmlsZUlucHV0UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlU3RhdGU8YW55PihudWxsKTtcblxuICBjb25zdCBmaWVsZCA9IHVzZUZpZWxkKHByb3BzLm5hbWUsIChzZXJpYWxpemVkVmFsdWUpID0+IHtcbiAgICBpZiAoIWRlZXBFcXVhbChzZXJpYWxpemVkVmFsdWUsIHZhbHVlKSkge1xuICAgICAgc2V0VmFsdWUoc2VyaWFsaXplZFZhbHVlKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGluaXRcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmaWVsZC5yZWdpc3RlcigoaW5pdGlhbFZhbHVlKSA9PiB7XG4gICAgICBzZXROZXdWYWx1ZShpbml0aWFsVmFsdWUgIT09IHVuZGVmaW5lZCA/IGluaXRpYWxWYWx1ZSA6IG51bGwpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuICgpID0+IGZpZWxkLnVucmVnaXN0ZXIoKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IHNldE5ld1ZhbHVlID0gKG5ld1ZhbHVlOiBhbnkpID0+IHtcbiAgICBpZiAobmV3VmFsdWUgJiYgbmV3VmFsdWUgaW5zdGFuY2VvZiBGaWxlTGlzdCkge1xuICAgICAgbmV3VmFsdWUgPSBuZXdWYWx1ZVswXTtcbiAgICB9XG5cbiAgICBmaWVsZC5zZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgc2V0VmFsdWUobmV3VmFsdWUpO1xuXG4gICAgaWYgKHByb3BzLm9uQ2hhbmdlKSB7XG4gICAgICBwcm9wcy5vbkNoYW5nZShuZXdWYWx1ZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGdldExhYmVsID0gKCkgPT4ge1xuICAgIGxldCBsYWJlbCA9IHZhbHVlID8gdmFsdWUubmFtZSA6IHByb3BzLmNob29zZUZpbGVMYWJlbCA/PyAnQ2hvb3NlIEZpbGUnO1xuICAgIHJldHVybiBsYWJlbCA9PT0gdW5kZWZpbmVkIHx8IGxhYmVsID09PSBudWxsIHx8IGxhYmVsLnRyaW0oKSA9PT0gJycgPyAn4oCBJyA6IGxhYmVsO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9J2Zvcm0tZ3JvdXAnIGRhdGEtZmllbGQtbmFtZT17cHJvcHMubmFtZX0gZGF0YS1maWVsZC12YWx1ZT17dmFsdWV9PlxuICAgICAgPExhYmVsIGxhYmVsPXtwcm9wcy5sYWJlbH0gcmVxdWlyZWRBc3Rlcmlzaz17cHJvcHMucmVxdWlyZWRBc3Rlcmlza30+PC9MYWJlbD5cbiAgICAgIDxsYWJlbCBzdHlsZT17eyBkaXNwbGF5OiAnYmxvY2snIH19PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YGZvcm0tY29udHJvbCBycnUtZmlsZS1pbnB1dF9fZmlsZS1uYW1lLWxhYmVsICR7ZmllbGQuZXJyb3IgPyAnaXMtaW52YWxpZCcgOiAnJ31gfT5cbiAgICAgICAgICB7Z2V0TGFiZWwoKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGFyaWEtbGFiZWw9J1VwbG9hZCdcbiAgICAgICAgICB0eXBlPSdmaWxlJ1xuICAgICAgICAgIGNsYXNzTmFtZT17YGZvcm0tY29udHJvbCBycnUtZmlsZS1pbnB1dF9fYWN0dWFsLWlucHV0ICR7ZmllbGQuZXJyb3IgPyAnaXMtaW52YWxpZCcgOiAnJ31gfVxuICAgICAgICAgIG5hbWU9e3Byb3BzLm5hbWV9XG4gICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXROZXdWYWx1ZShlLnRhcmdldC5maWxlcyl9XG4gICAgICAgICAgb25CbHVyPXtmaWVsZC5vbkJsdXJ9XG4gICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLmRpc2FibGVkfVxuICAgICAgICAgIGFjY2VwdD17cHJvcHMuYWNjZXB0fVxuICAgICAgICAvPlxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxFcnJvck1lc3NhZ2UgZXJyb3I9e2ZpZWxkLmVycm9yfSAvPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUnJ1RmlsZUlucHV0O1xuIiwiLypcbiAqIENvcHlyaWdodCAyMDIwIEtoYWxpZCBILiBBbGhhcmlzaVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vLyBAdHMtZXhwZWN0LWVycm9yIG5vIGRlY2xhcmF0aW9uIGZpbGVcbmltcG9ydCB7IHl1cFJlc29sdmVyIH0gZnJvbSAnQGhvb2tmb3JtL3Jlc29sdmVycy95dXAnO1xuaW1wb3J0IHsgRkMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBGb3JtUHJvdmlkZXIsIHVzZUZvcm0gfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0ICcuL3N0eWxlLmNzcyc7XG5pbXBvcnQgUnJ1Rm9ybVByb3BzIGZyb20gJy4vdHlwZXMvUnJ1Rm9ybVByb3BzJztcblxuY29uc3QgUnJ1Rm9ybTogRkM8UnJ1Rm9ybVByb3BzPiA9IChwcm9wcykgPT4ge1xuICBsZXQgY29uZmlnOiBhbnkgPSB7XG4gICAgZGVmYXVsdFZhbHVlczogcHJvcHMuaW5pdGlhbFZhbHVlcyxcbiAgfTtcblxuICBpZiAocHJvcHMueXVwVmFsaWRhdGlvblNjaGVtYSkge1xuICAgIGNvbmZpZyA9IHtcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIHJlc29sdmVyOiB5dXBSZXNvbHZlcihwcm9wcy55dXBWYWxpZGF0aW9uU2NoZW1hKSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgZm9ybSA9IHVzZUZvcm0oY29uZmlnKTtcblxuICBpZiAocHJvcHMuY29udGV4dCkge1xuICAgIHByb3BzLmNvbnRleHQuJChmb3JtKTtcbiAgfVxuXG4gIGNvbnN0IG9uU3VibWl0ID0gKGZvcm1WYWx1ZXNPYmplY3Q6IGFueSwgZXZlbnQ6IGFueSkgPT4ge1xuICAgIC8vIHRoaXMgZml4ZXMgd2hlbiBidXR0b25zIHdpdGggdHlwZSAhPSBzdWJtaXQgd291bGQgY2F1c2UgdGhlIGZvcm0gdG8gc3VibWl0LFxuICAgIC8vIHRoaXMgYXBwZWFycyB0byBiZSBhIGJ1ZyBpbiByZWFjdC1ob29rLWZvcm0sIHJlbW92ZSB3aGVuIGZpeGVkXG4gICAgLy8gYW5vdGhlciBub3RlIGlzIHRoYXQgY2xpY2tpbmcgc3VibWl0IGJ1dHRvbnMgaW4gSmVzdCB0cmlnZ2Vyc1xuICAgIC8vIGEgY2xpY2sgZXZlbnQgd2hlcmUgdGhlIHN1Ym1pdHRlciBpcyB1bmRlZmluZWQgc28gd2UgY2Fubm90IHJlYWxseSB0ZWxsXG4gICAgY29uc3QgaXNUZXN0ID0gcHJvY2Vzcy5lbnYuSkVTVF9XT1JLRVJfSUQgIT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpc1N1Ym1pdEJ1dHRvbiA9IGlzVGVzdCB8fCBldmVudD8ubmF0aXZlRXZlbnQ/LnN1Ym1pdHRlcj8uYXR0cmlidXRlcz8udHlwZT8udmFsdWU/LnRvTG93ZXJDYXNlKCkgPT09ICdzdWJtaXQnO1xuXG4gICAgaWYgKGlzU3VibWl0QnV0dG9uKSB7XG4gICAgICBwcm9wcy5vblN1Ym1pdChmb3JtVmFsdWVzT2JqZWN0KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8Rm9ybVByb3ZpZGVyIHsuLi5mb3JtfT5cbiAgICAgIDxmb3JtIG9uU3VibWl0PXtmb3JtLmhhbmRsZVN1Ym1pdChvblN1Ym1pdCl9IGlkPXtwcm9wcy5pZH0+XG4gICAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICAgIDwvZm9ybT5cbiAgICA8L0Zvcm1Qcm92aWRlcj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJydUZvcm07XG4iLCIvKlxuICogQ29weXJpZ2h0IDIwMjIgS2hhbGlkIEguIEFsaGFyaXNpXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IHJldGFpbkFsbCB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWxzJztcbmltcG9ydCBScnVPcHRpb24gZnJvbSAnLi4vdHlwZXMvUnJ1T3B0aW9uJztcbmltcG9ydCBScnVPcHRpb25zR3JvdXAgZnJvbSAnLi4vdHlwZXMvUnJ1T3B0aW9uc0dyb3VwJztcbmltcG9ydCBScnVPcHRpb25zUHJvcFR5cGUgZnJvbSAnLi4vdHlwZXMvUnJ1T3B0aW9uc1Byb3BUeXBlJztcblxudHlwZSBBZGRpdGlvbmFsVHlwZSA9IHtcbiAgcGFnZTogbnVtYmVyO1xufTtcblxuY29uc3QgaXNPcHRpb25zR3JvdXAgPSAob3B0aW9uOiBScnVPcHRpb24gfCBScnVPcHRpb25zR3JvdXApOiBvcHRpb24gaXMgUnJ1T3B0aW9uc0dyb3VwID0+IHtcbiAgcmV0dXJuIChvcHRpb24gYXMgUnJ1T3B0aW9uc0dyb3VwKS5vcHRpb25zICE9PSB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBmaW5kT3B0aW9ucyA9IChvcHRpb25zUHJvcDogUnJ1T3B0aW9uc1Byb3BUeXBlLCBvcHRpb25zVmFsdWVzOiBzdHJpbmdbXSk6IFJydU9wdGlvbltdID0+IHtcbiAgLy8gZmxhdHRlbiBvcHRpb25zUHJvcFxuICBsZXQgZmxhdE9wdGlvbnM6IFJydU9wdGlvbltdID0gW107XG4gIG9wdGlvbnNQcm9wLmZvckVhY2goKG9wdCkgPT4ge1xuICAgIGlmIChpc09wdGlvbnNHcm91cChvcHQpKSB7XG4gICAgICBmbGF0T3B0aW9ucyA9IGZsYXRPcHRpb25zLmNvbmNhdChvcHQub3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZsYXRPcHRpb25zLnB1c2gob3B0KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGZpbmRcbiAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gcmV0YWluQWxsKGZsYXRPcHRpb25zLCBvcHRpb25zVmFsdWVzLCAob3B0LCB2YWwpID0+IG9wdC52YWx1ZSArICcnID09PSB2YWwgKyAnJyk7XG5cbiAgLy8gcmV0dXJuXG4gIHJldHVybiBzZWFyY2hSZXN1bHQ7XG59O1xuXG5jb25zdCBmaW5kT3B0aW9uID0gKG9wdGlvbnNQcm9wOiBScnVPcHRpb25zUHJvcFR5cGUsIG9wdGlvblZhbHVlOiBzdHJpbmcpOiBScnVPcHRpb24gfCBudWxsID0+IHtcbiAgLy8gZmluZFxuICBjb25zdCBzZWFyY2hSZXN1bHQgPSBmaW5kT3B0aW9ucyhvcHRpb25zUHJvcCwgW29wdGlvblZhbHVlXSk7XG5cbiAgLy8gcmV0dXJuXG4gIHJldHVybiBzZWFyY2hSZXN1bHQubGVuZ3RoID09PSAxID8gc2VhcmNoUmVzdWx0WzBdIDogbnVsbDtcbn07XG5cbi8qKlxuICogY3VzdG9tIG9wdGlvbnMgbG9hZGVyIHRvIGJlIHVzZWQgd2l0aCByZWFjdC1zZWxlY3QtYXN5bmMtcGFnaW5hdGVcbiAqIHRoaXMgc29sdmVzIHBlcmZvcm1hbmNlIGlzc3VlcyB3aXRoIGxhcmdlIG9wdGlvbiBsaXN0c1xuICovXG5jb25zdCBsb2FkUGFnZU9wdGlvbnMgPSAoYWxsT3B0aW9uczogUnJ1T3B0aW9uc1Byb3BUeXBlKSA9PiB7XG4gIHJldHVybiBhc3luYyAoc2VhcmNoOiBzdHJpbmcsIHByZXZPcHRpb25zOiBScnVPcHRpb25zUHJvcFR5cGUsIGFkZGl0aW9uYWw6IEFkZGl0aW9uYWxUeXBlKSA9PiB7XG4gICAgY29uc3QgUEFHRV9TSVpFID0gMzA7XG4gICAgY29uc3QgcGFnZSA9IGFkZGl0aW9uYWwucGFnZTtcblxuICAgIGNvbnNvbGUuZGVidWcoJ2xvYWRpbmcgbW9yZSBvcHRpb25zJywgJ3NlYXJjaCcsIHNlYXJjaCwgJ3BhZ2UnLCBwYWdlKTtcblxuICAgIC8vIHNlYXJjaFxuICAgIGxldCBmaWx0ZXJlZE9wdGlvbnM6IFJydU9wdGlvbnNQcm9wVHlwZTtcbiAgICBpZiAoIXNlYXJjaCkge1xuICAgICAgZmlsdGVyZWRPcHRpb25zID0gYWxsT3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VhcmNoTG93ZXIgPSBzZWFyY2gudG9Mb3dlckNhc2UoKTtcbiAgICAgIGZpbHRlcmVkT3B0aW9ucyA9IGFsbE9wdGlvbnMuZmlsdGVyKChvcHQpID0+IHtcbiAgICAgICAgaWYgKCdvcHRpb25zJyBpbiBvcHQpIHtcbiAgICAgICAgICByZXR1cm4gb3B0Lm9wdGlvbnMuZmlsdGVyKChpbm5lck9wdCkgPT4gKGlubmVyT3B0LmxhYmVsICsgJycpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoTG93ZXIpKS5sZW5ndGggPiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAob3B0LmxhYmVsICsgJycpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoTG93ZXIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBoYXNNb3JlID0gTWF0aC5jZWlsKGZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLyBQQUdFX1NJWkUpID4gcGFnZTtcbiAgICBjb25zdCBzbGljZWRPcHRpb25zID0gZmlsdGVyZWRPcHRpb25zLnNsaWNlKChwYWdlIC0gMSkgKiBQQUdFX1NJWkUsIHBhZ2UgKiBQQUdFX1NJWkUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGlvbnM6IHNsaWNlZE9wdGlvbnMsXG4gICAgICBoYXNNb3JlLFxuXG4gICAgICBhZGRpdGlvbmFsOiB7XG4gICAgICAgIHBhZ2U6IHBhZ2UgKyAxLFxuICAgICAgfSxcbiAgICB9O1xuICB9O1xufTtcblxuZXhwb3J0IHsgZmluZE9wdGlvbiwgZmluZE9wdGlvbnMsIGlzT3B0aW9uc0dyb3VwLCBsb2FkUGFnZU9wdGlvbnMgfTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMCBLaGFsaWQgSC4gQWxoYXJpc2lcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgRkMsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBkZWVwRXF1YWwgfSBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5pbXBvcnQgRXJyb3JNZXNzYWdlIGZyb20gJy4uL0Vycm9yTWVzc2FnZS9FcnJvck1lc3NhZ2UnO1xuaW1wb3J0IExhYmVsIGZyb20gJy4uL0xhYmVsL0xhYmVsJztcbmltcG9ydCB7IHVzZUZpZWxkIH0gZnJvbSAnLi4vaG9va3MvdXNlRmllbGQnO1xuaW1wb3J0IFJydU9wdGlvbiBmcm9tICcuLi90eXBlcy9ScnVPcHRpb24nO1xuaW1wb3J0IHsgZmluZE9wdGlvbnMsIGlzT3B0aW9uc0dyb3VwIH0gZnJvbSAnLi4vdXRpbHMvb3B0aW9ucy11dGlscyc7XG5pbXBvcnQgUnJ1TXVsdGlDaGVja2JveElucHV0UHJvcHMgZnJvbSAnLi90eXBlcy9ScnVNdWx0aUNoZWNrYm94SW5wdXRQcm9wcyc7XG5cbmNvbnN0IFJydU11bHRpQ2hlY2tib3hJbnB1dDogRkM8UnJ1TXVsdGlDaGVja2JveElucHV0UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgZmllbGQgPSB1c2VGaWVsZChwcm9wcy5uYW1lLCAoc2VyaWFsaXplZFZhbHVlKSA9PiB7XG4gICAgaWYgKCFkZWVwRXF1YWwoc2VyaWFsaXplZFZhbHVlLCB2YWx1ZSkpIHtcbiAgICAgIHNldFZhbHVlKHNlcmlhbGl6ZWRWYWx1ZSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBbaGFzQmVlbkluaXRpYWxpemVkLCBzZXRIYXNCZWVuSW5pdGlhbGl6ZWRdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuICBjb25zdCBbc2VsZWN0ZWRPcHRpb25zLCBzZXRTZWxlY3RlZE9wdGlvbnNdID0gdXNlU3RhdGU8cmVhZG9ubHkgUnJ1T3B0aW9uW10+KFtdKTtcblxuICBjb25zdCBvblNlbGVjdENoYW5nZSA9IChvcHRpb25zOiByZWFkb25seSBScnVPcHRpb25bXSkgPT4ge1xuICAgIHNldFNlbGVjdGVkT3B0aW9ucyhvcHRpb25zKTtcbiAgICBmaWVsZC5zZXRWYWx1ZShvcHRpb25zLm1hcCgob3B0KSA9PiBvcHQudmFsdWUpKTtcblxuICAgIGlmIChwcm9wcy5vbkNoYW5nZSkge1xuICAgICAgcHJvcHMub25DaGFuZ2Uob3B0aW9ucy5tYXAoKG9wdCkgPT4gb3B0LnZhbHVlKSk7XG4gICAgfVxuICB9O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZmllbGQucmVnaXN0ZXIoKGluaXRpYWxWYWx1ZSkgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IGZpbmRPcHRpb25zKHByb3BzLm9wdGlvbnMsIGluaXRpYWxWYWx1ZSB8fCBbXSk7XG4gICAgICBvblNlbGVjdENoYW5nZShvcHRpb25zKTtcbiAgICAgIHNldEhhc0JlZW5Jbml0aWFsaXplZCh0cnVlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoKSA9PiBmaWVsZC51bnJlZ2lzdGVyKCk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChoYXNCZWVuSW5pdGlhbGl6ZWQpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBmaW5kT3B0aW9ucyhcbiAgICAgICAgcHJvcHMub3B0aW9ucyxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zLm1hcCgob3B0KSA9PiBvcHQudmFsdWUpXG4gICAgICApO1xuICAgICAgb25TZWxlY3RDaGFuZ2Uob3B0aW9ucyk7XG4gICAgfVxuICB9LCBbcHJvcHMub3B0aW9uc10pO1xuXG4gIGNvbnN0IG9uQ2hhbmdlID0gKG9wdGlvbjogUnJ1T3B0aW9uLCBpc0NoZWNrZWQ6IGJvb2xlYW4pID0+IHtcbiAgICBsZXQgbmV3U2VsZWN0ZWRPcHRpb25zO1xuICAgIGlmIChpc0NoZWNrZWQpIHtcbiAgICAgIG5ld1NlbGVjdGVkT3B0aW9ucyA9IHNlbGVjdGVkT3B0aW9ucy5jb25jYXQoW29wdGlvbl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTZWxlY3RlZE9wdGlvbnMgPSBzZWxlY3RlZE9wdGlvbnMuZmlsdGVyKChvcHQpID0+IG9wdC52YWx1ZSAhPT0gb3B0aW9uLnZhbHVlKTtcbiAgICB9XG4gICAgb25TZWxlY3RDaGFuZ2UobmV3U2VsZWN0ZWRPcHRpb25zKTtcbiAgfTtcblxuICBjb25zdCBpc0NoZWNrZWQgPSAob3B0aW9uOiBScnVPcHRpb24pOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gc2VsZWN0ZWRPcHRpb25zLmluY2x1ZGVzKG9wdGlvbik7XG4gIH07XG5cbiAgY29uc3QgcmVuZGVyQ2hlY2tCb3ggPSAob3B0aW9uOiBScnVPcHRpb24pID0+IHtcbiAgICBjb25zdCBrZXkgPSBgY2hlY2tib3hfJHtwcm9wcy5uYW1lfV8ke29wdGlvbi52YWx1ZX1gO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBjbGFzc05hbWU9e2Bmb3JtLWNoZWNrICR7cHJvcHMuaW5saW5lID8gJ2Zvcm0tY2hlY2staW5saW5lJyA6ICcnfWB9XG4gICAgICAgIHJvbGU9J2NoZWNrYm94J1xuICAgICAgICBhcmlhLWNoZWNrZWQ9e2lzQ2hlY2tlZChvcHRpb24pfT5cbiAgICAgICAgPExhYmVsIGxhYmVsPXtvcHRpb24ubGFiZWx9PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgbmFtZT17cHJvcHMubmFtZX1cbiAgICAgICAgICAgIHZhbHVlPXtvcHRpb24udmFsdWV9XG4gICAgICAgICAgICBjaGVja2VkPXtpc0NoZWNrZWQob3B0aW9uKX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gb25DaGFuZ2Uob3B0aW9uLCBlLnRhcmdldC5jaGVja2VkKX1cbiAgICAgICAgICAgIG9uQmx1cj17ZmllbGQub25CbHVyfVxuICAgICAgICAgICAgdHlwZT0nY2hlY2tib3gnXG4gICAgICAgICAgICBjbGFzc05hbWU9e2Bmb3JtLWNoZWNrLWlucHV0ICR7ZmllbGQuZXJyb3IgPyAnaXMtaW52YWxpZCcgOiAnJ31gfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLmRpc2FibGVkfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvTGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9J2Zvcm0tZ3JvdXAnIGRhdGEtZmllbGQtbmFtZT17cHJvcHMubmFtZX0gZGF0YS1maWVsZC12YWx1ZT17dmFsdWV9PlxuICAgICAgPExhYmVsIGxhYmVsPXtwcm9wcy5sYWJlbH0gcmVxdWlyZWRBc3Rlcmlzaz17cHJvcHMucmVxdWlyZWRBc3Rlcmlza30+PC9MYWJlbD5cbiAgICAgIDxkaXY+XG4gICAgICAgIHtwcm9wcy5vcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgaWYgKGlzT3B0aW9uc0dyb3VwKG9wdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXYga2V5PXtvcHRpb24ubGFiZWw/LnRvU3RyaW5nKCl9IGNsYXNzTmFtZT0ncnJ1LWZvcm0tZ3JvdXBlZC1vcHRpb25zLWNvbnRhaW5lcic+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT0ncnJ1LWZvcm0tZ3JvdXBlZC1vcHRpb25zLWxhYmVsJz57b3B0aW9uLmxhYmVsfTwvbGFiZWw+XG4gICAgICAgICAgICAgICAge29wdGlvbi5vcHRpb25zLm1hcCgob3B0KSA9PiByZW5kZXJDaGVja0JveChvcHQpKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyQ2hlY2tCb3gob3B0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pfVxuICAgICAgPC9kaXY+XG4gICAgICA8RXJyb3JNZXNzYWdlIGVycm9yPXtmaWVsZC5lcnJvcn0gLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJydU11bHRpQ2hlY2tib3hJbnB1dDtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMCBLaGFsaWQgSC4gQWxoYXJpc2lcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgRkMsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjcmVhdGVGaWx0ZXIgfSBmcm9tICdyZWFjdC1zZWxlY3QnO1xuaW1wb3J0IHsgQXN5bmNQYWdpbmF0ZSB9IGZyb20gJ3JlYWN0LXNlbGVjdC1hc3luYy1wYWdpbmF0ZSc7XG5pbXBvcnQgeyBkZWVwRXF1YWwgfSBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5pbXBvcnQgRXJyb3JNZXNzYWdlIGZyb20gJy4uL0Vycm9yTWVzc2FnZS9FcnJvck1lc3NhZ2UnO1xuaW1wb3J0IExhYmVsIGZyb20gJy4uL0xhYmVsL0xhYmVsJztcbmltcG9ydCB7IHVzZUZpZWxkIH0gZnJvbSAnLi4vaG9va3MvdXNlRmllbGQnO1xuaW1wb3J0IFJydU9wdGlvbiBmcm9tICcuLi90eXBlcy9ScnVPcHRpb24nO1xuaW1wb3J0IHsgZmluZE9wdGlvbnMsIGxvYWRQYWdlT3B0aW9ucyB9IGZyb20gJy4uL3V0aWxzL29wdGlvbnMtdXRpbHMnO1xuaW1wb3J0IFJydU11bHRpU2VsZWN0SW5wdXRQcm9wcyBmcm9tICcuL3R5cGVzL1JydU11bHRpU2VsZWN0SW5wdXRQcm9wcyc7XG5cbmNvbnN0IFJydU11bHRpU2VsZWN0SW5wdXQ6IEZDPFJydU11bHRpU2VsZWN0SW5wdXRQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICBjb25zdCBmaWVsZCA9IHVzZUZpZWxkKHByb3BzLm5hbWUsIChzZXJpYWxpemVkVmFsdWUpID0+IHtcbiAgICBpZiAoIWRlZXBFcXVhbChzZXJpYWxpemVkVmFsdWUsIHZhbHVlKSkge1xuICAgICAgc2V0VmFsdWUoc2VyaWFsaXplZFZhbHVlKTtcblxuICAgICAgaWYgKCFkZWVwRXF1YWwoc2VyaWFsaXplZFZhbHVlLCBzZWxlY3RlZE9wdGlvbnMubWFwKG8gPT4gby52YWx1ZSkpKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBmaW5kT3B0aW9ucyhwcm9wcy5vcHRpb25zLCBzZXJpYWxpemVkVmFsdWUgfHwgW10pO1xuICAgICAgICAgIG9uU2VsZWN0Q2hhbmdlKG9wdGlvbnMpO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IFtoYXNCZWVuSW5pdGlhbGl6ZWQsIHNldEhhc0JlZW5Jbml0aWFsaXplZF0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbnMsIHNldFNlbGVjdGVkT3B0aW9uc10gPSB1c2VTdGF0ZTxyZWFkb25seSBScnVPcHRpb25bXT4oW10pO1xuXG4gIGNvbnN0IG9uU2VsZWN0Q2hhbmdlID0gKG9wdGlvbnM6IHJlYWRvbmx5IFJydU9wdGlvbltdKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRPcHRpb25zKG9wdGlvbnMpO1xuICAgIGZpZWxkLnNldFZhbHVlKG9wdGlvbnMubWFwKChvcHQpID0+IG9wdC52YWx1ZSkpO1xuXG4gICAgaWYgKHByb3BzLm9uQ2hhbmdlKSB7XG4gICAgICBwcm9wcy5vbkNoYW5nZShvcHRpb25zLm1hcCgob3B0KSA9PiBvcHQudmFsdWUpKTtcbiAgICB9XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmaWVsZC5yZWdpc3RlcigoaW5pdGlhbFZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25zID0gZmluZE9wdGlvbnMocHJvcHMub3B0aW9ucywgaW5pdGlhbFZhbHVlIHx8IFtdKTtcbiAgICAgIG9uU2VsZWN0Q2hhbmdlKG9wdGlvbnMpO1xuICAgICAgc2V0SGFzQmVlbkluaXRpYWxpemVkKHRydWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuICgpID0+IGZpZWxkLnVucmVnaXN0ZXIoKTtcbiAgfSwgW10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGhhc0JlZW5Jbml0aWFsaXplZCkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IGZpbmRPcHRpb25zKFxuICAgICAgICBwcm9wcy5vcHRpb25zLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMubWFwKChvcHQpID0+IG9wdC52YWx1ZSlcbiAgICAgICk7XG4gICAgICBvblNlbGVjdENoYW5nZShvcHRpb25zKTtcbiAgICB9XG4gIH0sIFtwcm9wcy5vcHRpb25zXSk7XG5cbiAgY29uc3QgZ2V0UmVhY3RTZWxlY3RDb250cm9sU3R5bGUgPSAocHJvdmlkZWQ6IGFueSwgc3RhdGU6IGFueSkgPT4ge1xuICAgIGlmIChmaWVsZC5lcnJvciAmJiAhc3RhdGUubWVudUlzT3Blbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucHJvdmlkZWQsXG4gICAgICAgIGJvcmRlckNvbG9yOiAndmFyKC0tYnMtZGFuZ2VyKSAhaW1wb3J0YW50JyxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwcm92aWRlZDtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT0nZm9ybS1ncm91cCcgZGF0YS1maWVsZC1uYW1lPXtwcm9wcy5uYW1lfSBkYXRhLWZpZWxkLXZhbHVlPXt2YWx1ZX0+XG4gICAgICA8TGFiZWwgbGFiZWw9e3Byb3BzLmxhYmVsfSByZXF1aXJlZEFzdGVyaXNrPXtwcm9wcy5yZXF1aXJlZEFzdGVyaXNrfT48L0xhYmVsPlxuICAgICAgPEFzeW5jUGFnaW5hdGVcbiAgICAgICAgbmFtZT17cHJvcHMubmFtZX1cbiAgICAgICAgaXNNdWx0aT17dHJ1ZX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e3Byb3BzLnBsYWNlaG9sZGVyIHx8ICcnfVxuICAgICAgICB2YWx1ZT17c2VsZWN0ZWRPcHRpb25zfVxuICAgICAgICBvbkNoYW5nZT17KG9wdGlvbnMpID0+IG9uU2VsZWN0Q2hhbmdlKG9wdGlvbnMpfVxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGxvYWRPcHRpb25zPXtsb2FkUGFnZU9wdGlvbnMocHJvcHMub3B0aW9ucyl9XG4gICAgICAgIGFkZGl0aW9uYWw9e3sgcGFnZTogMSB9fVxuICAgICAgICBmaWx0ZXJPcHRpb249e2NyZWF0ZUZpbHRlcih7IGlnbm9yZUFjY2VudHM6IGZhbHNlIH0pfVxuICAgICAgICBvbkJsdXI9e2ZpZWxkLm9uQmx1cn1cbiAgICAgICAgaXNEaXNhYmxlZD17cHJvcHMuZGlzYWJsZWR9XG4gICAgICAgIHN0eWxlcz17eyBjb250cm9sOiBnZXRSZWFjdFNlbGVjdENvbnRyb2xTdHlsZSB9fVxuICAgICAgLz5cbiAgICAgIDxFcnJvck1lc3NhZ2UgZXJyb3I9e2ZpZWxkLmVycm9yfSAvPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUnJ1TXVsdGlTZWxlY3RJbnB1dDtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMCBLaGFsaWQgSC4gQWxoYXJpc2lcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgRkMsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBkZWVwRXF1YWwgfSBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5pbXBvcnQgRXJyb3JNZXNzYWdlIGZyb20gJy4uL0Vycm9yTWVzc2FnZS9FcnJvck1lc3NhZ2UnO1xuaW1wb3J0IExhYmVsIGZyb20gJy4uL0xhYmVsL0xhYmVsJztcbmltcG9ydCB7IHVzZUZpZWxkIH0gZnJvbSAnLi4vaG9va3MvdXNlRmllbGQnO1xuaW1wb3J0IFJydU9wdGlvbiBmcm9tICcuLi90eXBlcy9ScnVPcHRpb24nO1xuaW1wb3J0IHsgZmluZE9wdGlvbiwgaXNPcHRpb25zR3JvdXAgfSBmcm9tICcuLi91dGlscy9vcHRpb25zLXV0aWxzJztcbmltcG9ydCBScnVSYWRpb0lucHV0UHJvcHMgZnJvbSAnLi90eXBlcy9ScnVSYWRpb0lucHV0UHJvcHMnO1xuXG5jb25zdCBScnVSYWRpb0lucHV0OiBGQzxScnVSYWRpb0lucHV0UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgZmllbGQgPSB1c2VGaWVsZChwcm9wcy5uYW1lLCAoc2VyaWFsaXplZFZhbHVlKSA9PiB7XG4gICAgaWYgKCFkZWVwRXF1YWwoc2VyaWFsaXplZFZhbHVlLCB2YWx1ZSkpIHtcbiAgICAgIHNldFZhbHVlKHNlcmlhbGl6ZWRWYWx1ZSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBbaGFzQmVlbkluaXRpYWxpemVkLCBzZXRIYXNCZWVuSW5pdGlhbGl6ZWRdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuICBjb25zdCBbc2VsZWN0ZWRPcHRpb24sIHNldFNlbGVjdGVkT3B0aW9uXSA9IHVzZVN0YXRlPFJydU9wdGlvbiB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IG9uU2VsZWN0Q2hhbmdlID0gKG9wdGlvbjogUnJ1T3B0aW9uIHwgbnVsbCkgPT4ge1xuICAgIHNldFNlbGVjdGVkT3B0aW9uKG9wdGlvbik7XG4gICAgZmllbGQuc2V0VmFsdWUob3B0aW9uID8gb3B0aW9uLnZhbHVlIDogbnVsbCk7XG5cbiAgICBpZiAocHJvcHMub25DaGFuZ2UpIHtcbiAgICAgIHByb3BzLm9uQ2hhbmdlKG9wdGlvbiA/IG9wdGlvbi52YWx1ZSA6IG51bGwpO1xuICAgIH1cbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGZpZWxkLnJlZ2lzdGVyKChpbml0aWFsVmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IGZpbmRPcHRpb24ocHJvcHMub3B0aW9ucywgaW5pdGlhbFZhbHVlKTtcbiAgICAgIG9uU2VsZWN0Q2hhbmdlKG9wdGlvbik7XG4gICAgICBzZXRIYXNCZWVuSW5pdGlhbGl6ZWQodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gKCkgPT4gZmllbGQudW5yZWdpc3RlcigpO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaGFzQmVlbkluaXRpYWxpemVkKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSBzZWxlY3RlZE9wdGlvbiA/IGZpbmRPcHRpb24ocHJvcHMub3B0aW9ucywgc2VsZWN0ZWRPcHRpb24udmFsdWUpIDogbnVsbDtcbiAgICAgIG9uU2VsZWN0Q2hhbmdlKG9wdGlvbik7XG4gICAgfVxuICB9LCBbcHJvcHMub3B0aW9uc10pO1xuXG4gIGNvbnN0IGlzQ2hlY2tlZCA9IChvcHRpb246IFJydU9wdGlvbik6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiBzZWxlY3RlZE9wdGlvbiA/IHNlbGVjdGVkT3B0aW9uLnZhbHVlID09PSBvcHRpb24udmFsdWUgOiBmYWxzZTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJSYWRpbyA9IChvcHRpb246IFJydU9wdGlvbikgPT4ge1xuICAgIGNvbnN0IGtleSA9IGByYWRpb18ke3Byb3BzLm5hbWV9XyR7b3B0aW9uLnZhbHVlfWA7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGNsYXNzTmFtZT17YGZvcm0tY2hlY2sgJHtwcm9wcy5pbmxpbmUgPyAnZm9ybS1jaGVjay1pbmxpbmUnIDogJyd9YH1cbiAgICAgICAgcm9sZT0ncmFkaW8nXG4gICAgICAgIGFyaWEtY2hlY2tlZD17aXNDaGVja2VkKG9wdGlvbil9PlxuICAgICAgICA8TGFiZWwgbGFiZWw9e29wdGlvbi5sYWJlbH0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBuYW1lPXtwcm9wcy5uYW1lfVxuICAgICAgICAgICAgdmFsdWU9e29wdGlvbi52YWx1ZX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZChvcHRpb24pfVxuICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBvblNlbGVjdENoYW5nZShvcHRpb24pfVxuICAgICAgICAgICAgb25CbHVyPXtmaWVsZC5vbkJsdXJ9XG4gICAgICAgICAgICB0eXBlPSdyYWRpbydcbiAgICAgICAgICAgIGNsYXNzTmFtZT17YGZvcm0tY2hlY2staW5wdXQgJHtmaWVsZC5lcnJvciA/ICdpcy1pbnZhbGlkJyA6ICcnfWB9XG4gICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuZGlzYWJsZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9MYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT0nZm9ybS1ncm91cCcgZGF0YS1maWVsZC1uYW1lPXtwcm9wcy5uYW1lfSBkYXRhLWZpZWxkLXZhbHVlPXt2YWx1ZX0+XG4gICAgICA8TGFiZWwgbGFiZWw9e3Byb3BzLmxhYmVsfSByZXF1aXJlZEFzdGVyaXNrPXtwcm9wcy5yZXF1aXJlZEFzdGVyaXNrfT48L0xhYmVsPlxuICAgICAgPGRpdj5cbiAgICAgICAge3Byb3BzLm9wdGlvbnMubWFwKChvcHRpb24pID0+IHtcbiAgICAgICAgICBpZiAoaXNPcHRpb25zR3JvdXAob3B0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdiBrZXk9e29wdGlvbi5sYWJlbD8udG9TdHJpbmcoKX0gY2xhc3NOYW1lPSdycnUtZm9ybS1ncm91cGVkLW9wdGlvbnMtY29udGFpbmVyJz5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPSdycnUtZm9ybS1ncm91cGVkLW9wdGlvbnMtbGFiZWwnPntvcHRpb24ubGFiZWx9PC9sYWJlbD5cbiAgICAgICAgICAgICAgICB7b3B0aW9uLm9wdGlvbnMubWFwKChvcHQpID0+IHJlbmRlclJhZGlvKG9wdCkpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZW5kZXJSYWRpbyhvcHRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxFcnJvck1lc3NhZ2UgZXJyb3I9e2ZpZWxkLmVycm9yfSAvPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUnJ1UmFkaW9JbnB1dDtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMCBLaGFsaWQgSC4gQWxoYXJpc2lcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgRkMsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjcmVhdGVGaWx0ZXIgfSBmcm9tICdyZWFjdC1zZWxlY3QnO1xuaW1wb3J0IHsgQXN5bmNQYWdpbmF0ZSB9IGZyb20gJ3JlYWN0LXNlbGVjdC1hc3luYy1wYWdpbmF0ZSc7XG5pbXBvcnQgeyBkZWVwRXF1YWwgfSBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5pbXBvcnQgRXJyb3JNZXNzYWdlIGZyb20gJy4uL0Vycm9yTWVzc2FnZS9FcnJvck1lc3NhZ2UnO1xuaW1wb3J0IExhYmVsIGZyb20gJy4uL0xhYmVsL0xhYmVsJztcbmltcG9ydCB7IHVzZUZpZWxkIH0gZnJvbSAnLi4vaG9va3MvdXNlRmllbGQnO1xuaW1wb3J0IFJydU9wdGlvbiBmcm9tICcuLi90eXBlcy9ScnVPcHRpb24nO1xuaW1wb3J0IHsgZmluZE9wdGlvbiwgbG9hZFBhZ2VPcHRpb25zIH0gZnJvbSAnLi4vdXRpbHMvb3B0aW9ucy11dGlscyc7XG5pbXBvcnQgUnJ1U2VsZWN0SW5wdXRQcm9wcyBmcm9tICcuL3R5cGVzL1JydVNlbGVjdElucHV0UHJvcHMnO1xuXG5jb25zdCBScnVTZWxlY3RJbnB1dDogRkM8UnJ1U2VsZWN0SW5wdXRQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICBjb25zdCBmaWVsZCA9IHVzZUZpZWxkKHByb3BzLm5hbWUsIChzZXJpYWxpemVkVmFsdWUpID0+IHtcbiAgICBpZiAoIWRlZXBFcXVhbChzZXJpYWxpemVkVmFsdWUsIHZhbHVlKSkge1xuICAgICAgc2V0VmFsdWUoc2VyaWFsaXplZFZhbHVlKTtcblxuICAgICAgaWYgKCFkZWVwRXF1YWwoc2VyaWFsaXplZFZhbHVlLCBzZWxlY3RlZE9wdGlvbj8udmFsdWUpKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IGZpbmRPcHRpb24ocHJvcHMub3B0aW9ucywgc2VyaWFsaXplZFZhbHVlKTtcbiAgICAgICAgICBvblNlbGVjdENoYW5nZShvcHRpb24pO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IFtoYXNCZWVuSW5pdGlhbGl6ZWQsIHNldEhhc0JlZW5Jbml0aWFsaXplZF0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbiwgc2V0U2VsZWN0ZWRPcHRpb25dID0gdXNlU3RhdGU8UnJ1T3B0aW9uIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3Qgb25TZWxlY3RDaGFuZ2UgPSAob3B0aW9uOiBScnVPcHRpb24gfCBudWxsKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRPcHRpb24ob3B0aW9uKTtcbiAgICBmaWVsZC5zZXRWYWx1ZShvcHRpb24gPyBvcHRpb24udmFsdWUgOiBudWxsKTtcblxuICAgIGlmIChwcm9wcy5vbkNoYW5nZSkge1xuICAgICAgcHJvcHMub25DaGFuZ2Uob3B0aW9uID8gb3B0aW9uLnZhbHVlIDogbnVsbCk7XG4gICAgfVxuICB9O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZmllbGQucmVnaXN0ZXIoKGluaXRpYWxWYWx1ZSkgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9uID0gZmluZE9wdGlvbihwcm9wcy5vcHRpb25zLCBpbml0aWFsVmFsdWUpO1xuICAgICAgb25TZWxlY3RDaGFuZ2Uob3B0aW9uKTtcbiAgICAgIHNldEhhc0JlZW5Jbml0aWFsaXplZCh0cnVlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoKSA9PiBmaWVsZC51bnJlZ2lzdGVyKCk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChoYXNCZWVuSW5pdGlhbGl6ZWQpIHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IHNlbGVjdGVkT3B0aW9uID8gZmluZE9wdGlvbihwcm9wcy5vcHRpb25zLCBzZWxlY3RlZE9wdGlvbi52YWx1ZSkgOiBudWxsO1xuICAgICAgb25TZWxlY3RDaGFuZ2Uob3B0aW9uKTtcbiAgICB9XG4gIH0sIFtwcm9wcy5vcHRpb25zXSk7XG5cbiAgY29uc3QgZ2V0UmVhY3RTZWxlY3RDb250cm9sU3R5bGUgPSAocHJvdmlkZWQ6IGFueSwgc3RhdGU6IGFueSkgPT4ge1xuICAgIGlmIChmaWVsZC5lcnJvciAmJiAhc3RhdGUubWVudUlzT3Blbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucHJvdmlkZWQsXG4gICAgICAgIGJvcmRlckNvbG9yOiAndmFyKC0tYnMtZGFuZ2VyKSAhaW1wb3J0YW50JyxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwcm92aWRlZDtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT0nZm9ybS1ncm91cCcgZGF0YS1maWVsZC1uYW1lPXtwcm9wcy5uYW1lfSBkYXRhLWZpZWxkLXZhbHVlPXt2YWx1ZX0+XG4gICAgICA8TGFiZWwgbGFiZWw9e3Byb3BzLmxhYmVsfSByZXF1aXJlZEFzdGVyaXNrPXtwcm9wcy5yZXF1aXJlZEFzdGVyaXNrfT48L0xhYmVsPlxuICAgICAgPEFzeW5jUGFnaW5hdGVcbiAgICAgICAgbmFtZT17cHJvcHMubmFtZX1cbiAgICAgICAgaXNNdWx0aT17ZmFsc2V9XG4gICAgICAgIGlzQ2xlYXJhYmxlPXt0cnVlfVxuICAgICAgICBwbGFjZWhvbGRlcj17cHJvcHMucGxhY2Vob2xkZXIgfHwgJyd9XG4gICAgICAgIHZhbHVlPXtzZWxlY3RlZE9wdGlvbn1cbiAgICAgICAgb25DaGFuZ2U9eyhvcHRpb24pID0+IG9uU2VsZWN0Q2hhbmdlKG9wdGlvbil9XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgbG9hZE9wdGlvbnM9e2xvYWRQYWdlT3B0aW9ucyhwcm9wcy5vcHRpb25zKX1cbiAgICAgICAgYWRkaXRpb25hbD17eyBwYWdlOiAxIH19XG4gICAgICAgIGZpbHRlck9wdGlvbj17Y3JlYXRlRmlsdGVyKHsgaWdub3JlQWNjZW50czogZmFsc2UgfSl9XG4gICAgICAgIG9uQmx1cj17ZmllbGQub25CbHVyfVxuICAgICAgICBpc0Rpc2FibGVkPXtwcm9wcy5kaXNhYmxlZH1cbiAgICAgICAgc3R5bGVzPXt7IGNvbnRyb2w6IGdldFJlYWN0U2VsZWN0Q29udHJvbFN0eWxlIH19XG4gICAgICAvPlxuICAgICAgPEVycm9yTWVzc2FnZSBlcnJvcj17ZmllbGQuZXJyb3J9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBScnVTZWxlY3RJbnB1dDtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMCBLaGFsaWQgSC4gQWxoYXJpc2lcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgRkMsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBkZWVwRXF1YWwgfSBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5pbXBvcnQgRXJyb3JNZXNzYWdlIGZyb20gJy4uL0Vycm9yTWVzc2FnZS9FcnJvck1lc3NhZ2UnO1xuaW1wb3J0IExhYmVsIGZyb20gJy4uL0xhYmVsL0xhYmVsJztcbmltcG9ydCB7IHVzZUZpZWxkIH0gZnJvbSAnLi4vaG9va3MvdXNlRmllbGQnO1xuaW1wb3J0IFJydVRleHRJbnB1dFByb3BzIGZyb20gJy4vdHlwZXMvUnJ1VGV4dElucHV0UHJvcHMnO1xuXG5jb25zdCBScnVUZXh0SW5wdXQ6IEZDPFJydVRleHRJbnB1dFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCBbdmFsdWUsIHNldFZhbHVlXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGZpZWxkID0gdXNlRmllbGQocHJvcHMubmFtZSwgKHNlcmlhbGl6ZWRWYWx1ZSkgPT4ge1xuICAgIGlmICghZGVlcEVxdWFsKHNlcmlhbGl6ZWRWYWx1ZSwgdmFsdWUpKSB7XG4gICAgICBzZXRWYWx1ZShzZXJpYWxpemVkVmFsdWUpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qgc2V0TmV3VmFsdWUgPSAodmFsOiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gICAgZmllbGQuc2V0VmFsdWUodmFsKTtcbiAgICBzZXRWYWx1ZSh2YWwpO1xuXG4gICAgaWYgKHByb3BzLm9uQ2hhbmdlKSB7XG4gICAgICBwcm9wcy5vbkNoYW5nZSh2YWwpO1xuICAgIH1cbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGZpZWxkLnJlZ2lzdGVyKChpbml0aWFsVmFsdWUpID0+IHtcbiAgICAgIHNldE5ld1ZhbHVlKGluaXRpYWxWYWx1ZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGluaXRpYWxWYWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gKCkgPT4gZmllbGQudW5yZWdpc3RlcigpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT0nZm9ybS1ncm91cCcgZGF0YS1maWVsZC1uYW1lPXtwcm9wcy5uYW1lfSBkYXRhLWZpZWxkLXZhbHVlPXt2YWx1ZX0+XG4gICAgICA8TGFiZWwgbGFiZWw9e3Byb3BzLmxhYmVsfSByZXF1aXJlZEFzdGVyaXNrPXtwcm9wcy5yZXF1aXJlZEFzdGVyaXNrfT48L0xhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIG5hbWU9e3Byb3BzLm5hbWV9XG4gICAgICAgIHZhbHVlPXt2YWx1ZSB8fCAnJ31cbiAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXROZXdWYWx1ZShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgIG9uQmx1cj17ZmllbGQub25CbHVyfVxuICAgICAgICB0eXBlPXtwcm9wcy5pc1Bhc3N3b3JkID8gJ3Bhc3N3b3JkJyA6ICd0ZXh0J31cbiAgICAgICAgY2xhc3NOYW1lPXtgZm9ybS1jb250cm9sICR7ZmllbGQuZXJyb3IgPyAnaXMtaW52YWxpZCcgOiAnJ31gfVxuICAgICAgICBkaXNhYmxlZD17cHJvcHMuZGlzYWJsZWR9XG4gICAgICAgIGRpcj17cHJvcHMuZGlyIHx8ICdhdXRvJ31cbiAgICAgICAgcGxhY2Vob2xkZXI9e3Byb3BzLnBsYWNlaG9sZGVyfVxuICAgICAgICBtYXhMZW5ndGg9e3Byb3BzLm1heExlbmd0aH1cbiAgICAgICAgYXV0b0NvbXBsZXRlPXtwcm9wcy5hdXRvQ29tcGxldGV9XG4gICAgICAgIGxpc3Q9e3Byb3BzLmxpc3R9XG4gICAgICAvPlxuICAgICAgPEVycm9yTWVzc2FnZSBlcnJvcj17ZmllbGQuZXJyb3J9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBScnVUZXh0SW5wdXQ7XG4iLCIvKlxuICogQ29weXJpZ2h0IDIwMjAgS2hhbGlkIEguIEFsaGFyaXNpXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEZDLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZGVlcEVxdWFsIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IEVycm9yTWVzc2FnZSBmcm9tICcuLi9FcnJvck1lc3NhZ2UvRXJyb3JNZXNzYWdlJztcbmltcG9ydCBMYWJlbCBmcm9tICcuLi9MYWJlbC9MYWJlbCc7XG5pbXBvcnQgeyB1c2VGaWVsZCB9IGZyb20gJy4uL2hvb2tzL3VzZUZpZWxkJztcbmltcG9ydCBScnVUZXh0YXJlYUlucHV0UHJvcHMgZnJvbSAnLi90eXBlcy9ScnVUZXh0YXJlYUlucHV0UHJvcHMnO1xuXG5jb25zdCBScnVUZXh0YXJlYUlucHV0OiBGQzxScnVUZXh0YXJlYUlucHV0UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgZmllbGQgPSB1c2VGaWVsZChwcm9wcy5uYW1lLCAoc2VyaWFsaXplZFZhbHVlKSA9PiB7XG4gICAgaWYgKCFkZWVwRXF1YWwoc2VyaWFsaXplZFZhbHVlLCB2YWx1ZSkpIHtcbiAgICAgIHNldFZhbHVlKHNlcmlhbGl6ZWRWYWx1ZSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBzZXROZXdWYWx1ZSA9ICh2YWw6IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICBmaWVsZC5zZXRWYWx1ZSh2YWwpO1xuICAgIHNldFZhbHVlKHZhbCk7XG5cbiAgICBpZiAocHJvcHMub25DaGFuZ2UpIHtcbiAgICAgIHByb3BzLm9uQ2hhbmdlKHZhbCk7XG4gICAgfVxuICB9O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZmllbGQucmVnaXN0ZXIoKGluaXRpYWxWYWx1ZSkgPT4ge1xuICAgICAgc2V0TmV3VmFsdWUoaW5pdGlhbFZhbHVlID09PSB1bmRlZmluZWQgPyBudWxsIDogaW5pdGlhbFZhbHVlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoKSA9PiBmaWVsZC51bnJlZ2lzdGVyKCk7XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPSdmb3JtLWdyb3VwJyBkYXRhLWZpZWxkLW5hbWU9e3Byb3BzLm5hbWV9IGRhdGEtZmllbGQtdmFsdWU9e3ZhbHVlfT5cbiAgICAgIDxMYWJlbCBsYWJlbD17cHJvcHMubGFiZWx9IHJlcXVpcmVkQXN0ZXJpc2s9e3Byb3BzLnJlcXVpcmVkQXN0ZXJpc2t9PjwvTGFiZWw+XG4gICAgICA8dGV4dGFyZWFcbiAgICAgICAgbmFtZT17cHJvcHMubmFtZX1cbiAgICAgICAgdmFsdWU9e3ZhbHVlIHx8ICcnfVxuICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldE5ld1ZhbHVlKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgb25CbHVyPXtmaWVsZC5vbkJsdXJ9XG4gICAgICAgIGNsYXNzTmFtZT17YGZvcm0tY29udHJvbCAke2ZpZWxkLmVycm9yID8gJ2lzLWludmFsaWQnIDogJyd9YH1cbiAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLmRpc2FibGVkfVxuICAgICAgICBkaXI9e3Byb3BzLmRpciB8fCAnYXV0byd9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwcm9wcy5wbGFjZWhvbGRlcn1cbiAgICAgICAgbWF4TGVuZ3RoPXtwcm9wcy5tYXhMZW5ndGh9XG4gICAgICAgIGF1dG9Db21wbGV0ZT17cHJvcHMuYXV0b0NvbXBsZXRlfVxuICAgICAgICByb3dzPXtwcm9wcy5yb3dzfVxuICAgICAgICBjb2xzPXtwcm9wcy5jb2xzfVxuICAgICAgICB3cmFwPXtwcm9wcy53cmFwfVxuICAgICAgLz5cbiAgICAgIDxFcnJvck1lc3NhZ2UgZXJyb3I9e2ZpZWxkLmVycm9yfSAvPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUnJ1VGV4dGFyZWFJbnB1dDtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMiBLaGFsaWQgSC4gQWxoYXJpc2lcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBVc2VGb3JtUmV0dXJuIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IHJlc29sdmVPYmplY3RBdHRyaWJ1dGUgfSBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5cbmV4cG9ydCB0eXBlIFVzZVJydUZvcm1SZXR1cm4gPSB7XG4gICQ6IChjb250ZXh0OiBVc2VGb3JtUmV0dXJuKSA9PiB2b2lkO1xuICBnZXRGaWVsZHNWYWx1ZXM6ICgpID0+IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGdldEZpZWxkVmFsdWU6IChmaWVsZE5hbWU6IHN0cmluZykgPT4gYW55O1xuICBzZXRGaWVsZFZhbHVlOiAoZmllbGROYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlUnJ1Rm9ybSA9ICgpOiBVc2VScnVGb3JtUmV0dXJuID0+IHtcbiAgY29uc3QgW2Zvcm1Db250ZXh0LCBzZXRGb3JtQ29udGV4dF0gPSB1c2VTdGF0ZTxVc2VGb3JtUmV0dXJuIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgJCA9IChjb250ZXh0OiBVc2VGb3JtUmV0dXJuKSA9PiB7XG4gICAgY29uc29sZS5kZWJ1Zygnc2V0dGluZyBmb3JtIGNvbnRleHQnKTtcbiAgICBzZXRGb3JtQ29udGV4dChjb250ZXh0KTtcbiAgfTtcblxuICBjb25zdCBnZXRGaWVsZHNWYWx1ZXMgPSAoKSA9PiB7XG4gICAgaWYgKGZvcm1Db250ZXh0ID09IG51bGwpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Zvcm1Db250ZXh0IGhhcyBub3QgYmVlbiBzZXQgeWV0LiBDYW5ub3QgZ2V0IHZhbHVlcy4nKTtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybUNvbnRleHQuZ2V0VmFsdWVzKCk7XG4gIH07XG5cbiAgY29uc3QgZ2V0RmllbGRWYWx1ZSA9IChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiByZXNvbHZlT2JqZWN0QXR0cmlidXRlKGZpZWxkTmFtZSwgZ2V0RmllbGRzVmFsdWVzKCkpO1xuICB9O1xuXG4gIGNvbnN0IHNldEZpZWxkVmFsdWUgPSAoZmllbGROYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcbiAgICBpZiAoZm9ybUNvbnRleHQgPT0gbnVsbCkge1xuICAgICAgY29uc29sZS5lcnJvcignRm9ybUNvbnRleHQgaGFzIG5vdCBiZWVuIHNldCB5ZXQuIENhbm5vdCBzZXQgdmFsdWVzLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3JtQ29udGV4dC5zZXRWYWx1ZShmaWVsZE5hbWUsIHZhbHVlKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgICQ6ICQsXG4gICAgZ2V0RmllbGRzVmFsdWVzOiBnZXRGaWVsZHNWYWx1ZXMsXG4gICAgZ2V0RmllbGRWYWx1ZTogZ2V0RmllbGRWYWx1ZSxcbiAgICBzZXRGaWVsZFZhbHVlOiBzZXRGaWVsZFZhbHVlLFxuICB9O1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMCBLaGFsaWQgSC4gQWxoYXJpc2lcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgRkMsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJydU1vZGFsQnV0dG9uUHJvcHMgZnJvbSAnLi90eXBlcy9ScnVNb2RhbEJ1dHRvblByb3BzJztcblxuLyoqXG4gKiBBIGJ1dHRvbiB0aGF0IHNob3dzIGEgbW9kYWwgd2hlbiBjbGlja2VkLlxuICovXG5jb25zdCBScnVNb2RhbEJ1dHRvbjogRkM8UnJ1TW9kYWxCdXR0b25Qcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgW2lkXSA9IHVzZVN0YXRlKG5ldyBEYXRlKCkuZ2V0VGltZSgpKTtcblxuICBjb25zdCBjbG9zZU1vZGFsID0gKCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYG1vZGFsLWNsb3NlLSR7aWR9YCk7XG4gICAgaWYgKG1vZGFsKSB7XG4gICAgICBtb2RhbC5jbGljaygpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCByZW5kZXJNb2RhbEJvZHkgPSAoXG4gICAgbW9kYWxCb2R5PzogUmVhY3QuUmVhY3ROb2RlIHwgKChjbG9zZU1vZGFsOiAoKSA9PiB2b2lkKSA9PiBSZWFjdC5SZWFjdE5vZGUpXG4gICk6IFJlYWN0LlJlYWN0Tm9kZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKG1vZGFsQm9keSkge1xuICAgICAgaWYgKHR5cGVvZiBtb2RhbEJvZHkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG1vZGFsQm9keShjbG9zZU1vZGFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBtb2RhbEJvZHk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxidXR0b25cbiAgICAgICAgbmFtZT17cHJvcHMubmFtZX1cbiAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLmRpc2FibGVkfVxuICAgICAgICBjbGFzc05hbWU9e3Byb3BzLmNsYXNzTmFtZX1cbiAgICAgICAgc3R5bGU9e3Byb3BzLnN0eWxlfVxuICAgICAgICB0eXBlPSdidXR0b24nXG4gICAgICAgIGRhdGEtYnMtdG9nZ2xlPSdtb2RhbCdcbiAgICAgICAgZGF0YS1icy10YXJnZXQ9e2AjbW9kYWwtJHtpZH1gfT5cbiAgICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPSdtb2RhbCBmYWRlJyBpZD17YG1vZGFsLSR7aWR9YH0gdGFiSW5kZXg9ey0xfSBhcmlhLWhpZGRlbj0ndHJ1ZSc+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtb2RhbC1kaWFsb2cgbW9kYWwtZGlhbG9nLWNlbnRlcmVkIG1vZGFsLWRpYWxvZy1zY3JvbGxhYmxlJz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbW9kYWwtY29udGVudCc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbW9kYWwtaGVhZGVyJz5cbiAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT0nbW9kYWwtdGl0bGUnPntwcm9wcy5tb2RhbFRpdGxlfTwvaDU+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBpZD17YG1vZGFsLWNsb3NlLSR7aWR9YH1cbiAgICAgICAgICAgICAgICB0eXBlPSdidXR0b24nXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPSdidG4tY2xvc2UnXG4gICAgICAgICAgICAgICAgZGF0YS1icy1kaXNtaXNzPSdtb2RhbCdcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPSdDbG9zZSc+PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtb2RhbC1ib2R5Jz57cmVuZGVyTW9kYWxCb2R5KHByb3BzLm1vZGFsQm9keSl9PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC8+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBScnVNb2RhbEJ1dHRvbjtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMiBLaGFsaWQgSC4gQWxoYXJpc2lcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBScnVTdGVwc1dpemFyZENvbnRleHRUeXBlIGZyb20gJy4uL3R5cGVzL1JydVN0ZXBzV2l6YXJkQ29udGV4dFR5cGUnO1xuXG5jb25zdCBub0NvbnRleHRFcnJvck1lc3NhZ2UgPVxuICAnQ291bGQgbm90IGZpbmQgdGhlIFN0ZXBzV2l6YXJkQ29udGV4dC4gTWFrZSBzdXJlIHlvdXIgY29tcG9uZW50IGlzIGEgZGVzY2VuZGFudCBvZiBhIFJydVN0ZXBzV2l6YXJkJztcbmNvbnN0IGRlZmF1bHRDb250ZXh0VmFsdWU6IFJydVN0ZXBzV2l6YXJkQ29udGV4dFR5cGUgPSB7XG4gIGN1cnJlbnRTdGVwTnVtYmVyOiAwLFxuICBjdXJyZW50U3RlcExhYmVsOiB1bmRlZmluZWQsXG4gIGN1cnJlbnRTdGVwSW5wdXREYXRhOiB1bmRlZmluZWQsXG4gIGdvVG9TdGVwOiAoc3RlcE51bWJlcjogbnVtYmVyLCBkYXRhPzogYW55KSA9PiB7XG4gICAgdGhyb3cgbm9Db250ZXh0RXJyb3JNZXNzYWdlO1xuICB9LFxuICBuZXh0U3RlcDogKGRhdGE/OiBhbnkpID0+IHtcbiAgICB0aHJvdyBub0NvbnRleHRFcnJvck1lc3NhZ2U7XG4gIH0sXG4gIHByZXZpb3VzU3RlcDogKGRhdGE/OiBhbnkpID0+IHtcbiAgICB0aHJvdyBub0NvbnRleHRFcnJvck1lc3NhZ2U7XG4gIH0sXG4gIGZpcnN0U3RlcDogKGRhdGE/OiBhbnkpID0+IHtcbiAgICB0aHJvdyBub0NvbnRleHRFcnJvck1lc3NhZ2U7XG4gIH0sXG4gIGxhc3RTdGVwOiAoZGF0YT86IGFueSkgPT4ge1xuICAgIHRocm93IG5vQ29udGV4dEVycm9yTWVzc2FnZTtcbiAgfSxcbn07XG5cbmNvbnN0IGNvbnRleHQgPSBjcmVhdGVDb250ZXh0PFJydVN0ZXBzV2l6YXJkQ29udGV4dFR5cGU+KGRlZmF1bHRDb250ZXh0VmFsdWUpO1xuXG5jb25zdCB1c2VScnVTdGVwc1dpemFyZENvbnRleHQgPSAoKTogUnJ1U3RlcHNXaXphcmRDb250ZXh0VHlwZSA9PiB7XG4gIHJldHVybiB1c2VDb250ZXh0KGNvbnRleHQpO1xufTtcblxuY29uc3QgUnJ1U3RlcHNXaXphcmRDb250ZXh0UHJvdmlkZXIgPSBjb250ZXh0LlByb3ZpZGVyO1xuXG5leHBvcnQgZGVmYXVsdCB1c2VScnVTdGVwc1dpemFyZENvbnRleHQ7XG5leHBvcnQgeyBScnVTdGVwc1dpemFyZENvbnRleHRQcm92aWRlciB9O1xuIiwiLypcbiAqIENvcHlyaWdodCAyMDIwIEtoYWxpZCBILiBBbGhhcmlzaVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBGQywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBScnVTdGVwc1dpemFyZENvbnRleHRQcm92aWRlciB9IGZyb20gJy4vaG9va3MvdXNlUnJ1U3RlcHNXaXphcmRDb250ZXh0JztcbmltcG9ydCAnLi9zdHlsZS5jc3MnO1xuaW1wb3J0IFJydVN0ZXBzV2l6YXJkQ29udGV4dFR5cGUgZnJvbSAnLi90eXBlcy9ScnVTdGVwc1dpemFyZENvbnRleHRUeXBlJztcbmltcG9ydCBScnVTdGVwc1dpemFyZFByb3BzIGZyb20gJy4vdHlwZXMvUnJ1U3RlcHNXaXphcmRQcm9wcyc7XG5pbXBvcnQgUnJ1U3RlcHNXaXphcmRTdGVwIGZyb20gJy4vdHlwZXMvUnJ1U3RlcHNXaXphcmRTdGVwJztcblxuLyoqXG4gKiBBIHN0ZXBzIHdpemFyZC4gUmVuZGVyIGFueSBudW1iZXIgb2YgY2hpbGQgY29tcG9uZW50cyBhbmQgdGhleSB3aWxsIGJlIHRyZWF0ZWQgYXMgc3RlcHMgb2YgdGhpcyB3aXphcmQuXG4gKi9cbmNvbnN0IFJydVN0ZXBzV2l6YXJkOiBGQzxScnVTdGVwc1dpemFyZFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCBbY3VycmVudFN0ZXBOdW1iZXIsIHNldEN1cnJlbnRTdGVwTnVtYmVyXSA9IHVzZVN0YXRlKDEpO1xuICBjb25zdCBbc3RlcElucHV0RGF0YSwgc2V0U3RlcElucHV0RGF0YV0gPSB1c2VTdGF0ZTxhbnk+KCk7XG5cbiAgY29uc3Qgc3RlcHNDb21wb25lbnRzID0gQXJyYXkuaXNBcnJheShwcm9wcy5jaGlsZHJlbikgPyBwcm9wcy5jaGlsZHJlbiA6IHByb3BzLmNoaWxkcmVuID8gW3Byb3BzLmNoaWxkcmVuXSA6IFtdO1xuXG4gIGNvbnN0IGdldFN0ZXBMYWJlbCA9IChudW1iZXI6IG51bWJlcik6IFJlYWN0LlJlYWN0Tm9kZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgcmV0dXJuIHByb3BzLmdldFN0ZXBMYWJlbCAmJiB0eXBlb2YgcHJvcHMuZ2V0U3RlcExhYmVsID09PSAnZnVuY3Rpb24nID8gcHJvcHMuZ2V0U3RlcExhYmVsKG51bWJlcikgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgY29uc3QgZ2V0U3RlcHMgPSAoKTogcmVhZG9ubHkgUnJ1U3RlcHNXaXphcmRTdGVwW10gPT4ge1xuICAgIHJldHVybiBzdGVwc0NvbXBvbmVudHMubWFwKChjb21wb25lbnQsIGluZGV4KSA9PiAoe1xuICAgICAgbnVtYmVyOiBpbmRleCArIDEsXG4gICAgICBsYWJlbDogZ2V0U3RlcExhYmVsKGluZGV4ICsgMSksXG4gICAgICBjb21wb25lbnQ6IGNvbXBvbmVudCxcbiAgICB9KSk7XG4gIH07XG5cbiAgY29uc3QgZ29Ub1N0ZXAgPSAoc3RlcE51bWJlcjogbnVtYmVyLCBkYXRhPzogYW55KSA9PiB7XG4gICAgaWYgKHN0ZXBOdW1iZXIgPCAxKSB7XG4gICAgICBzdGVwTnVtYmVyID0gMTtcbiAgICB9IGVsc2UgaWYgKHN0ZXBOdW1iZXIgPiBnZXRTdGVwcygpLmxlbmd0aCkge1xuICAgICAgc3RlcE51bWJlciA9IGdldFN0ZXBzKCkubGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIGNhbGwgb3JkZXIgaXMgY3JpdGljYWxcbiAgICBzZXRTdGVwSW5wdXREYXRhKGRhdGEpO1xuICAgIHNldEN1cnJlbnRTdGVwTnVtYmVyKHN0ZXBOdW1iZXIpO1xuICB9O1xuXG4gIGNvbnN0IFJydVN0ZXBzV2l6YXJkQ29udGV4dFZhbHVlOiBScnVTdGVwc1dpemFyZENvbnRleHRUeXBlID0ge1xuICAgIGN1cnJlbnRTdGVwTnVtYmVyOiBjdXJyZW50U3RlcE51bWJlcixcbiAgICBjdXJyZW50U3RlcExhYmVsOiBnZXRTdGVwTGFiZWwoY3VycmVudFN0ZXBOdW1iZXIpLFxuICAgIGN1cnJlbnRTdGVwSW5wdXREYXRhOiBzdGVwSW5wdXREYXRhLFxuICAgIGdvVG9TdGVwOiAoc3RlcE51bWJlcjogbnVtYmVyLCBkYXRhPzogYW55KSA9PiBnb1RvU3RlcChzdGVwTnVtYmVyLCBkYXRhKSxcbiAgICBuZXh0U3RlcDogKGRhdGE/OiBhbnkpID0+IGdvVG9TdGVwKGN1cnJlbnRTdGVwTnVtYmVyICsgMSwgZGF0YSksXG4gICAgcHJldmlvdXNTdGVwOiAoZGF0YT86IGFueSkgPT4gZ29Ub1N0ZXAoY3VycmVudFN0ZXBOdW1iZXIgLSAxLCBkYXRhKSxcbiAgICBmaXJzdFN0ZXA6IChkYXRhPzogYW55KSA9PiBnb1RvU3RlcCgxLCBkYXRhKSxcbiAgICBsYXN0U3RlcDogKGRhdGE/OiBhbnkpID0+IGdvVG9TdGVwKGdldFN0ZXBzKCkubGVuZ3RoLCBkYXRhKSxcbiAgfTtcblxuICBjb25zdCBnZXRDbGFzc05hbWUgPSAoc3RlcE51bWJlcjogbnVtYmVyLCBiYXNlQ2xhc3NOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIGxldCByZXN1bHQgPSBiYXNlQ2xhc3NOYW1lO1xuICAgIGlmIChzdGVwTnVtYmVyID09PSBjdXJyZW50U3RlcE51bWJlcikge1xuICAgICAgcmVzdWx0ICs9IGAgJHtiYXNlQ2xhc3NOYW1lfS0tY3VycmVudGA7XG4gICAgfSBlbHNlIGlmIChzdGVwTnVtYmVyIDwgY3VycmVudFN0ZXBOdW1iZXIpIHtcbiAgICAgIHJlc3VsdCArPSBgICR7YmFzZUNsYXNzTmFtZX0tLWRvbmVgO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIGNvbnN0IGhlYWRlciA9ICgpID0+IHtcbiAgICBpZiAocHJvcHMucmVuZGVySGVhZGVyKSB7XG4gICAgICByZXR1cm4gcHJvcHMucmVuZGVySGVhZGVyKGdldFN0ZXBzKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncnJ1LXN0ZXBzLXdpemFyZF9faGVhZGVyJz5cbiAgICAgICAgICB7Z2V0U3RlcHMoKS5tYXAoKHN0ZXAsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8ZGl2IGtleT17aW5kZXh9IGNsYXNzTmFtZT17Z2V0Q2xhc3NOYW1lKHN0ZXAubnVtYmVyLCAncnJ1LXN0ZXBzLXdpemFyZF9fc3RlcCcpfT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0Q2xhc3NOYW1lKHN0ZXAubnVtYmVyLCAncnJ1LXN0ZXBzLXdpemFyZF9fc3RlcC1udW1iZXInKX0+e3N0ZXAubnVtYmVyfTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRDbGFzc05hbWUoc3RlcC5udW1iZXIsICdycnUtc3RlcHMtd2l6YXJkX19zdGVwLWxhYmVsJyl9PntzdGVwLmxhYmVsfTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8UnJ1U3RlcHNXaXphcmRDb250ZXh0UHJvdmlkZXIgdmFsdWU9e1JydVN0ZXBzV2l6YXJkQ29udGV4dFZhbHVlfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPSdycnUtc3RlcHMtd2l6YXJkJz5cbiAgICAgICAge2hlYWRlcigpfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncnJ1LXN0ZXBzLXdpemFyZF9fYm9keSc+XG4gICAgICAgICAge2dldFN0ZXBzKCkubWFwKChzdGVwLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKHN0ZXAubnVtYmVyID09PSBjdXJyZW50U3RlcE51bWJlcikge1xuICAgICAgICAgICAgICByZXR1cm4gc3RlcHNDb21wb25lbnRzW2luZGV4XTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvUnJ1U3RlcHNXaXphcmRDb250ZXh0UHJvdmlkZXI+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBScnVTdGVwc1dpemFyZDtcbiJdLCJuYW1lcyI6WyJpc09iamVjdCIsInZhbCIsInJhbmdlT2ZTaXplIiwic2l6ZSIsInN0YXJ0QXQiLCJ4IiwiaSIsInJldGFpbkFsbCIsImZpcnN0QXJyYXkiLCJzZWNvbmRBcnJheSIsImNvbXBhcmF0b3IiLCJvYmoxIiwib2JqMiIsImlzT2JqS2V5Iiwib2JqIiwia2V5IiwicmVzb2x2ZU9iamVjdEF0dHJpYnV0ZSIsInBhdGgiLCJwcmV2IiwiY3VyciIsImRlZXBFcXVhbCIsInkiLCJvayIsInR4IiwidXNlRGF0YVNvdXJjZSIsInBhZ2VGZXRjaGVyIiwicGFnZVNpemUiLCJwYWdlTnVtYmVyIiwic29ydEtleSIsInNvcnREaXIiLCJzZWFyY2giLCJvbkNoYW5nZSIsImlzTG9hZGluZyIsInNldElzTG9hZGluZyIsInVzZVN0YXRlIiwicmVxdWVzdElkIiwidXNlUmVmIiwiZXJyb3IiLCJzZXRFcnJvciIsInRvdGFsUGFnZXMiLCJzZXRUb3RhbFBhZ2VzIiwiZGF0YSIsInNldERhdGEiLCJ1c2VBc3luY0VmZmVjdCIsInJlcUlkIiwiYm9keSIsImUiLCJNSU5fUEFHRVNfUEVSX0JMT0NLIiwiaXNQYWdlSW5kZXhWaXNpYmxlIiwiYXJyYXkiLCJpbmRleCIsImN1cnJlbnRQYWdlSW5kZXgiLCJwYWdlc09uRWFjaFNpZGVPZlRoZUFjdGl2ZVBhZ2UiLCJpc0luU3RhcnRCbG9jayIsImlzSW5FbmRCbG9jayIsImlzSW5NaWRkbGVCbG9jayIsInVzZVBhZ2luYXRpb24iLCJiYXNlIiwiY3VycmVudFBhZ2UiLCJuQmFzZSIsIm51bWJlcnMiLCJtYXBwZWQiLCJuIiwicGFnZXMiLCJuZXh0IiwiUGFnaW5hdGlvblZpZXciLCJvbkNoYW5nZVBhZ2UiLCJpc0ZpcnN0UGFnZSIsImlzTGFzdFBhZ2UiLCJvbkNsaWNrUGFnZSIsInBhZ2UiLCJqc3giLCJqc3hzIiwicCIsIlJydURhdGFUYWJsZSIsImNvbHVtbnMiLCJub0RhdGFMYWJlbCIsImVycm9yTGFiZWwiLCJkZWZhdWx0UGFnZU51bWJlciIsImRlZmF1bHRTb3J0S2V5IiwiZGVmYXVsdFNvcnREaXIiLCJzZXRDdXJyZW50UGFnZSIsInNldFNvcnRLZXkiLCJzZXRTb3J0RGlyIiwic2VhcmNoUGFyYW1zIiwic2V0U2VhcmNoUGFyYW1zIiwidXNlRWZmZWN0IiwiZ2V0U2VyaWFsTm8iLCJnZXRTb3J0S2V5IiwiY29sIiwiZ2V0VGhDbGFzc05hbWUiLCJyZXN1bHQiLCJvblNvcnQiLCJyb3ciLCJqIiwiRXJyb3JNZXNzYWdlIiwicHJvcHMiLCJMYWJlbCIsImxhYmVsIiwicmVxdWlyZWRBc3RlcmlzayIsImNoaWxkcmVuIiwidXNlRmllbGQiLCJuYW1lIiwib25Qcm9ncmFtbWF0aWNWYWx1ZSIsImZvcm1Db250ZXh0IiwidXNlRm9ybUNvbnRleHQiLCJmb3JtU3RhdGUiLCJ1c2VGb3JtU3RhdGUiLCJpc1JlZ2lzdGVyZWQiLCJpc1RvdWNoZWQiLCJzZXRJc1RvdWNoZWQiLCJ3YXRjaFJlc3VsdCIsInVzZVdhdGNoIiwicmVnaXN0ZXIiLCJvblJlZ2lzdGVyIiwiaW5pdGlhbFZhbHVlIiwidW5yZWdpc3RlciIsIm1hcmtUb3VjaGVkIiwic2V0VmFsdWUiLCJ2YWx1ZSIsIlJydUNoZWNrYm94SW5wdXQiLCJmaWVsZCIsInNlcmlhbGl6ZWRWYWx1ZSIsInNldE5ld1ZhbHVlIiwiZ2VuZXJhdGVTaXhXZWVrc0NhbGVuZGFyIiwiY2FsZW5kYXJUeXBlIiwieWVhciIsIm1vbnRoIiwiZmlyc3REYXlPZk1vbnRoRGF0ZSIsIkludGxEYXRlIiwiZmlyc3REYXlPZlRoZVZpc2libGVDYWxlbmRhciIsIklTTzg2MDFfREFURSIsIklTTzg2MDFfREFURVRJTUUiLCJScnVEYXRlVGltZUlucHV0IiwiaXNJbml0aWFsaXplZCIsInNldElzSW5pdGlhbGl6ZWQiLCJnZXRDYWxlbmRhclR5cGUiLCJpbnB1dFJlZiIsInBvcHVwUmVmIiwidXNlRGV0ZWN0Q2xpY2tPdXRzaWRlIiwiY2xvc2VQb3B1cCIsInRvZGF5IiwiY2FsZW5kYXIiLCJzZXRDYWxlbmRhciIsImlzUG9wdXBTaG93biIsInNldElzUG9wdXBTaG93biIsImhvdXIiLCJzZXRIb3VyIiwibWludXRlIiwic2V0TWludXRlIiwic2Vjb25kIiwic2V0U2Vjb25kIiwic2V0WWVhciIsInNldE1vbnRoIiwiaW50bERhdGUiLCJzZXRJbnRsRGF0ZSIsImdldE1vZGUiLCJnZXREYXRlQ29uZmlnIiwiZGF0ZSIsInByZXZpb3VzTW9udGgiLCJuZXh0TW9udGgiLCJvblNlbGVjdERhdGUiLCJfYSIsInNlbGVjdEFsbFRleHRJbklucHV0Iiwib25JbnRlZ2VySW5wdXRDaGFuZ2UiLCJtaW4iLCJtYXgiLCJjaGFuZ2VTdGF0ZUZ1bmN0aW9uIiwib25JbnRlZ2VySW5wdXRLZXlEb3duIiwiaW5wdXRQYXJ0VHlwZSIsIm9uWWVhckJsdXIiLCJNSU5fWUVBUiIsIm1hdGNoZXMiLCJuZXdWYWx1ZSIsImgiLCJtIiwicyIsImdldERheUNsYXNzTmFtZSIsInRhcmdldERhdGUiLCJkYXRlQ29uZmlnIiwiY2xhc3NOYW1lIiwiUnJ1RmlsZUlucHV0IiwiZ2V0TGFiZWwiLCJScnVGb3JtIiwiY29uZmlnIiwieXVwUmVzb2x2ZXIiLCJmb3JtIiwidXNlRm9ybSIsIm9uU3VibWl0IiwiZm9ybVZhbHVlc09iamVjdCIsImV2ZW50IiwiX2UiLCJfZCIsIl9jIiwiX2IiLCJGb3JtUHJvdmlkZXIiLCJpc09wdGlvbnNHcm91cCIsIm9wdGlvbiIsImZpbmRPcHRpb25zIiwib3B0aW9uc1Byb3AiLCJvcHRpb25zVmFsdWVzIiwiZmxhdE9wdGlvbnMiLCJvcHQiLCJmaW5kT3B0aW9uIiwib3B0aW9uVmFsdWUiLCJzZWFyY2hSZXN1bHQiLCJsb2FkUGFnZU9wdGlvbnMiLCJhbGxPcHRpb25zIiwicHJldk9wdGlvbnMiLCJhZGRpdGlvbmFsIiwiZmlsdGVyZWRPcHRpb25zIiwic2VhcmNoTG93ZXIiLCJpbm5lck9wdCIsImhhc01vcmUiLCJScnVNdWx0aUNoZWNrYm94SW5wdXQiLCJoYXNCZWVuSW5pdGlhbGl6ZWQiLCJzZXRIYXNCZWVuSW5pdGlhbGl6ZWQiLCJzZWxlY3RlZE9wdGlvbnMiLCJzZXRTZWxlY3RlZE9wdGlvbnMiLCJvblNlbGVjdENoYW5nZSIsIm9wdGlvbnMiLCJpc0NoZWNrZWQiLCJuZXdTZWxlY3RlZE9wdGlvbnMiLCJyZW5kZXJDaGVja0JveCIsIlJydU11bHRpU2VsZWN0SW5wdXQiLCJvIiwiZ2V0UmVhY3RTZWxlY3RDb250cm9sU3R5bGUiLCJwcm92aWRlZCIsInN0YXRlIiwiQXN5bmNQYWdpbmF0ZSIsImNyZWF0ZUZpbHRlciIsIlJydVJhZGlvSW5wdXQiLCJzZWxlY3RlZE9wdGlvbiIsInNldFNlbGVjdGVkT3B0aW9uIiwicmVuZGVyUmFkaW8iLCJScnVTZWxlY3RJbnB1dCIsIlJydVRleHRJbnB1dCIsIlJydVRleHRhcmVhSW5wdXQiLCJ1c2VScnVGb3JtIiwic2V0Rm9ybUNvbnRleHQiLCIkIiwiY29udGV4dCIsImdldEZpZWxkc1ZhbHVlcyIsImZpZWxkTmFtZSIsIlJydU1vZGFsQnV0dG9uIiwiaWQiLCJjbG9zZU1vZGFsIiwibW9kYWwiLCJyZW5kZXJNb2RhbEJvZHkiLCJtb2RhbEJvZHkiLCJGcmFnbWVudCIsIm5vQ29udGV4dEVycm9yTWVzc2FnZSIsImRlZmF1bHRDb250ZXh0VmFsdWUiLCJzdGVwTnVtYmVyIiwiY3JlYXRlQ29udGV4dCIsInVzZVJydVN0ZXBzV2l6YXJkQ29udGV4dCIsInVzZUNvbnRleHQiLCJScnVTdGVwc1dpemFyZENvbnRleHRQcm92aWRlciIsIlJydVN0ZXBzV2l6YXJkIiwiY3VycmVudFN0ZXBOdW1iZXIiLCJzZXRDdXJyZW50U3RlcE51bWJlciIsInN0ZXBJbnB1dERhdGEiLCJzZXRTdGVwSW5wdXREYXRhIiwic3RlcHNDb21wb25lbnRzIiwiZ2V0U3RlcExhYmVsIiwibnVtYmVyIiwiZ2V0U3RlcHMiLCJjb21wb25lbnQiLCJnb1RvU3RlcCIsIlJydVN0ZXBzV2l6YXJkQ29udGV4dFZhbHVlIiwiZ2V0Q2xhc3NOYW1lIiwiYmFzZUNsYXNzTmFtZSIsImhlYWRlciIsInN0ZXAiXSwibWFwcGluZ3MiOiIrV0FnQk1BLEdBQVlDLEdBRWRBLEdBQU8sTUFDUCxPQUFPQSxHQUFRLFVBQ2YsQ0FBQyxNQUFNLFFBQVFBLENBQUcsR0FDbEIsRUFBRUEsYUFBZSxTQUNqQixFQUFFQSxhQUFlLFNBQ2pCLEVBQUVBLGFBQWUsVUFDakIsRUFBRUEsYUFBZSxPQUNqQixFQUFFQSxhQUFlLE1BWWZDLEVBQWMsQ0FBQ0MsRUFBY0MsRUFBa0IsSUFDNUMsTUFBTSxLQUFLLENBQUUsT0FBUUQsQ0FBQSxFQUFRLENBQUNFLEVBQUdDLElBQU1BLEVBQUlGLENBQU8sRUFhckRHLEdBQVksQ0FBU0MsRUFBa0JDLEVBQW1CQyxJQUN2REYsRUFBVyxPQUFRRyxHQUNIRixFQUFZLEtBQU1HLEdBQWFGLEVBQVdDLEVBQU1DLENBQUksQ0FBQyxJQUVsRCxNQUN6QixFQUdHQyxHQUFXLENBQW1CQyxFQUFRQyxJQUN0Q2YsR0FBU2MsQ0FBRyxFQUNQQyxLQUFPRCxFQUVULEdBR0hFLEVBQXlCLENBQUNDLEVBQWNILElBQ3JDRyxFQUNKLE1BQU0sR0FBRyxFQUNULE9BQU8sQ0FBQ0MsRUFBcUJDLElBQWtCRCxHQUFRTCxHQUFTSyxFQUFNQyxDQUFJLEVBQUlELEVBQUtDLENBQUksRUFBSSxLQUFPTCxDQUFHLEVBR3BHTSxFQUFZLENBQUNmLEVBQVFnQixJQUFvQixDQUM3QyxNQUFNQyxFQUFLLE9BQU8sS0FDaEJDLEVBQUssT0FBT2xCLEVBR2QsT0FBT0EsR0FBS2dCLEdB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