"use strict";(self.webpackChunksrsrfl_react=self.webpackChunksrsrfl_react||[]).push([[806],{538:(e,t,n)=>{n.d(t,{A:()=>b});var r=n(8587),o=n(8168),a=n(6540),i=n(4164),l=n(5659),s=n(771),c=n(1848);const d=e=>{let t;return t=e<1?5.11916*e**2:4.5*Math.log(e+1)+2,(t/100).toFixed(2)};var u=n(5669),p=n(8413),f=n(1609);function h(e){return(0,f.Ay)("MuiPaper",e)}(0,p.A)("MuiPaper",["root","rounded","outlined","elevation","elevation0","elevation1","elevation2","elevation3","elevation4","elevation5","elevation6","elevation7","elevation8","elevation9","elevation10","elevation11","elevation12","elevation13","elevation14","elevation15","elevation16","elevation17","elevation18","elevation19","elevation20","elevation21","elevation22","elevation23","elevation24"]);var m=n(4848);const v=["className","component","elevation","square","variant"],A=(0,c.Ay)("div",{name:"MuiPaper",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[n.variant],!n.square&&t.rounded,"elevation"===n.variant&&t[`elevation${n.elevation}`]]}})((({theme:e,ownerState:t})=>{var n;return(0,o.A)({backgroundColor:(e.vars||e).palette.background.paper,color:(e.vars||e).palette.text.primary,transition:e.transitions.create("box-shadow")},!t.square&&{borderRadius:e.shape.borderRadius},"outlined"===t.variant&&{border:`1px solid ${(e.vars||e).palette.divider}`},"elevation"===t.variant&&(0,o.A)({boxShadow:(e.vars||e).shadows[t.elevation]},!e.vars&&"dark"===e.palette.mode&&{backgroundImage:`linear-gradient(${(0,s.X4)("#fff",d(t.elevation))}, ${(0,s.X4)("#fff",d(t.elevation))})`},e.vars&&{backgroundImage:null==(n=e.vars.overlays)?void 0:n[t.elevation]}))})),b=a.forwardRef((function(e,t){const n=(0,u.b)({props:e,name:"MuiPaper"}),{className:a,component:s="div",elevation:c=1,square:d=!1,variant:p="elevation"}=n,f=(0,r.A)(n,v),b=(0,o.A)({},n,{component:s,elevation:c,square:d,variant:p}),g=(e=>{const{square:t,elevation:n,variant:r,classes:o}=e,a={root:["root",r,!t&&"rounded","elevation"===r&&`elevation${n}`]};return(0,l.A)(a,h,o)})(b);return(0,m.jsx)(A,(0,o.A)({as:s,ownerState:b,className:(0,i.A)(g.root,a),ref:t},f))}))},5406:(e,t,n)=>{n.d(t,{IJ:()=>N,Ay:()=>E});var r=n(8168),o=n(8587),a=n(6540),i=n(4164),l=n(5659),s=n(9329),c=n(2197),d=n(1848),u=n(5669);const p=n(4705).A;var f=n(6248);const h=n(4877).A;var m=n(6852),v=n(7467),A=n(3025),b=n(538),g=n(8413),y=n(1609);function x(e){return(0,y.Ay)("MuiPopover",e)}(0,g.A)("MuiPopover",["root","paper"]);var w=n(4848);const S=["onEntering"],R=["action","anchorEl","anchorOrigin","anchorPosition","anchorReference","children","className","container","elevation","marginThreshold","open","PaperProps","slots","slotProps","transformOrigin","TransitionComponent","transitionDuration","TransitionProps","disableScrollLock"],P=["slotProps"];function k(e,t){let n=0;return"number"==typeof t?n=t:"center"===t?n=e.height/2:"bottom"===t&&(n=e.height),n}function O(e,t){let n=0;return"number"==typeof t?n=t:"center"===t?n=e.width/2:"right"===t&&(n=e.width),n}function C(e){return[e.horizontal,e.vertical].map((e=>"number"==typeof e?`${e}px`:e)).join(" ")}function I(e){return"function"==typeof e?e():e}const M=(0,d.Ay)(A.A,{name:"MuiPopover",slot:"Root",overridesResolver:(e,t)=>t.root})({}),N=(0,d.Ay)(b.A,{name:"MuiPopover",slot:"Paper",overridesResolver:(e,t)=>t.paper})({position:"absolute",overflowY:"auto",overflowX:"hidden",minWidth:16,minHeight:16,maxWidth:"calc(100% - 32px)",maxHeight:"calc(100% - 32px)",outline:0}),E=a.forwardRef((function(e,t){var n,d,A;const b=(0,u.b)({props:e,name:"MuiPopover"}),{action:g,anchorEl:y,anchorOrigin:E={vertical:"top",horizontal:"left"},anchorPosition:F,anchorReference:$="anchorEl",children:T,className:W,container:j,elevation:z=8,marginThreshold:B=16,open:L,PaperProps:D={},slots:H,slotProps:V,transformOrigin:q={vertical:"top",horizontal:"left"},TransitionComponent:U=v.A,transitionDuration:G="auto",TransitionProps:{onEntering:K}={},disableScrollLock:_=!1}=b,J=(0,o.A)(b.TransitionProps,S),X=(0,o.A)(b,R),Y=null!=(n=null==V?void 0:V.paper)?n:D,Z=a.useRef(),Q=(0,m.A)(Z,Y.ref),ee=(0,r.A)({},b,{anchorOrigin:E,anchorReference:$,elevation:z,marginThreshold:B,externalPaperSlotProps:Y,transformOrigin:q,TransitionComponent:U,transitionDuration:G,TransitionProps:J}),te=(e=>{const{classes:t}=e;return(0,l.A)({root:["root"],paper:["paper"]},x,t)})(ee),ne=a.useCallback((()=>{if("anchorPosition"===$)return F;const e=I(y),t=(e&&1===e.nodeType?e:(0,f.A)(Z.current).body).getBoundingClientRect();return{top:t.top+k(t,E.vertical),left:t.left+O(t,E.horizontal)}}),[y,E.horizontal,E.vertical,F,$]),re=a.useCallback((e=>({vertical:k(e,q.vertical),horizontal:O(e,q.horizontal)})),[q.horizontal,q.vertical]),oe=a.useCallback((e=>{const t={width:e.offsetWidth,height:e.offsetHeight},n=re(t);if("none"===$)return{top:null,left:null,transformOrigin:C(n)};const r=ne();let o=r.top-n.vertical,a=r.left-n.horizontal;const i=o+t.height,l=a+t.width,s=h(I(y)),c=s.innerHeight-B,d=s.innerWidth-B;if(null!==B&&oc){const e=i-c;o-=e,n.vertical+=e}if(null!==B&&ad){const e=l-d;a-=e,n.horizontal+=e}return{top:`${Math.round(o)}px`,left:`${Math.round(a)}px`,transformOrigin:C(n)}}),[y,$,ne,re,B]),[ae,ie]=a.useState(L),le=a.useCallback((()=>{const e=Z.current;if(!e)return;const t=oe(e);null!==t.top&&(e.style.top=t.top),null!==t.left&&(e.style.left=t.left),e.style.transformOrigin=t.transformOrigin,ie(!0)}),[oe]);a.useEffect((()=>(_&&window.addEventListener("scroll",le),()=>window.removeEventListener("scroll",le))),[y,_,le]),a.useEffect((()=>{L&&le()})),a.useImperativeHandle(g,(()=>L?{updatePosition:()=>{le()}}:null),[L,le]),a.useEffect((()=>{if(!L)return;const e=p((()=>{le()})),t=h(y);return t.addEventListener("resize",e),()=>{e.clear(),t.removeEventListener("resize",e)}}),[y,L,le]);let se=G;"auto"!==G||U.muiSupportAuto||(se=void 0);const ce=j||(y?(0,f.A)(I(y)).body:void 0),de=null!=(d=null==H?void 0:H.root)?d:M,ue=null!=(A=null==H?void 0:H.paper)?A:N,pe=(0,s.A)({elementType:ue,externalSlotProps:(0,r.A)({},Y,{style:ae?Y.style:(0,r.A)({},Y.style,{opacity:0})}),additionalProps:{elevation:z,ref:Q},ownerState:ee,className:(0,i.A)(te.paper,null==Y?void 0:Y.className)}),fe=(0,s.A)({elementType:de,externalSlotProps:(null==V?void 0:V.root)||{},externalForwardedProps:X,additionalProps:{ref:t,slotProps:{backdrop:{invisible:!0}},container:ce,open:L},ownerState:ee,className:(0,i.A)(te.root,W)}),{slotProps:he}=fe,me=(0,o.A)(fe,P);return(0,w.jsx)(de,(0,r.A)({},me,!(0,c.A)(de)&&{slotProps:he,disableScrollLock:_},{children:(0,w.jsx)(U,(0,r.A)({appear:!0,in:L,onEntering:(e,t)=>{K&&K(e,t),le()},onExited:()=>{ie(!1)},timeout:se},J,{children:(0,w.jsx)(ue,(0,r.A)({},pe,{children:T}))}))}))}))},5061:(e,t,n)=>{n.d(t,{A:()=>c});var r=n(6540),o=n(961),a=n(1523),i=n(1529),l=n(7365),s=n(4848);const c=r.forwardRef((function(e,t){const{children:n,container:c,disablePortal:d=!1}=e,[u,p]=r.useState(null),f=(0,a.A)(r.isValidElement(n)?n.ref:null,t);if((0,i.A)((()=>{d||p(function(e){return"function"==typeof e?e():e}(c)||document.body)}),[c,d]),(0,i.A)((()=>{if(u&&!d)return(0,l.A)(t,u),()=>{(0,l.A)(t,null)}}),[t,u,d]),d){if(r.isValidElement(n)){const e={ref:f};return r.cloneElement(n,e)}return(0,s.jsx)(r.Fragment,{children:n})}return(0,s.jsx)(r.Fragment,{children:u?o.createPortal(n,u):u})}))},815:(e,t,n)=>{n.d(t,{A:()=>i});var r=n(7163),o=n(1848),a=n(5669);const i=(0,r.A)({createStyledComponent:(0,o.Ay)("div",{name:"MuiStack",slot:"Root",overridesResolver:(e,t)=>t.root}),useThemeProps:e=>(0,a.b)({props:e,name:"MuiStack"})})},1896:(e,t,n)=>{n.d(t,{A:()=>Oe});var r,o=n(8168),a=n(8587),i=n(6540),l=n(4164),s=n(5659),c=n(4661),d=n(1848),u=n(5669),p=n(1881),f=n(2335),h=n(9770),m=n(4848);const v=["children","classes","className","label","notched"],A=(0,d.Ay)("fieldset",{shouldForwardProp:h.A})({textAlign:"left",position:"absolute",bottom:0,right:0,top:-5,left:0,margin:0,padding:"0 8px",pointerEvents:"none",borderRadius:"inherit",borderStyle:"solid",borderWidth:1,overflow:"hidden",minWidth:"0%"}),b=(0,d.Ay)("legend",{shouldForwardProp:h.A})((({ownerState:e,theme:t})=>(0,o.A)({float:"unset",width:"auto",overflow:"hidden"},!e.withLabel&&{padding:0,lineHeight:"11px",transition:t.transitions.create("width",{duration:150,easing:t.transitions.easing.easeOut})},e.withLabel&&(0,o.A)({display:"block",padding:0,height:11,fontSize:"0.75em",visibility:"hidden",maxWidth:.01,transition:t.transitions.create("max-width",{duration:50,easing:t.transitions.easing.easeOut}),whiteSpace:"nowrap","& > span":{paddingLeft:5,paddingRight:5,display:"inline-block",opacity:0,visibility:"visible"}},e.notched&&{maxWidth:"100%",transition:t.transitions.create("max-width",{duration:100,easing:t.transitions.easing.easeOut,delay:50})}))));var g=n(9716),y=n(8086),x=n(8413),w=n(1609),S=n(1175);function R(e){return(0,w.Ay)("MuiOutlinedInput",e)}const P=(0,o.A)({},S.A,(0,x.A)("MuiOutlinedInput",["root","notchedOutline","input"]));var k=n(627);const O=["components","fullWidth","inputComponent","label","multiline","notched","slots","type"],C=(0,d.Ay)(k.Sh,{shouldForwardProp:e=>(0,h.A)(e)||"classes"===e,name:"MuiOutlinedInput",slot:"Root",overridesResolver:k.WC})((({theme:e,ownerState:t})=>{const n="light"===e.palette.mode?"rgba(0, 0, 0, 0.23)":"rgba(255, 255, 255, 0.23)";return(0,o.A)({position:"relative",borderRadius:(e.vars||e).shape.borderRadius,[`&:hover .${P.notchedOutline}`]:{borderColor:(e.vars||e).palette.text.primary},"@media (hover: none)":{[`&:hover .${P.notchedOutline}`]:{borderColor:e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / 0.23)`:n}},[`&.${P.focused} .${P.notchedOutline}`]:{borderColor:(e.vars||e).palette[t.color].main,borderWidth:2},[`&.${P.error} .${P.notchedOutline}`]:{borderColor:(e.vars||e).palette.error.main},[`&.${P.disabled} .${P.notchedOutline}`]:{borderColor:(e.vars||e).palette.action.disabled}},t.startAdornment&&{paddingLeft:14},t.endAdornment&&{paddingRight:14},t.multiline&&(0,o.A)({padding:"16.5px 14px"},"small"===t.size&&{padding:"8.5px 14px"}))})),I=(0,d.Ay)((function(e){const{className:t,label:n,notched:i}=e,l=(0,a.A)(e,v),s=null!=n&&""!==n,c=(0,o.A)({},e,{notched:i,withLabel:s});return(0,m.jsx)(A,(0,o.A)({"aria-hidden":!0,className:t,ownerState:c},l,{children:(0,m.jsx)(b,{ownerState:c,children:s?(0,m.jsx)("span",{children:n}):r||(r=(0,m.jsx)("span",{className:"notranslate",children:"​"}))})}))}),{name:"MuiOutlinedInput",slot:"NotchedOutline",overridesResolver:(e,t)=>t.notchedOutline})((({theme:e})=>{const t="light"===e.palette.mode?"rgba(0, 0, 0, 0.23)":"rgba(255, 255, 255, 0.23)";return{borderColor:e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / 0.23)`:t}})),M=(0,d.Ay)(k.f3,{name:"MuiOutlinedInput",slot:"Input",overridesResolver:k.Oj})((({theme:e,ownerState:t})=>(0,o.A)({padding:"16.5px 14px"},!e.vars&&{"&:-webkit-autofill":{WebkitBoxShadow:"light"===e.palette.mode?null:"0 0 0 100px #266798 inset",WebkitTextFillColor:"light"===e.palette.mode?null:"#fff",caretColor:"light"===e.palette.mode?null:"#fff",borderRadius:"inherit"}},e.vars&&{"&:-webkit-autofill":{borderRadius:"inherit"},[e.getColorSchemeSelector("dark")]:{"&:-webkit-autofill":{WebkitBoxShadow:"0 0 0 100px #266798 inset",WebkitTextFillColor:"#fff",caretColor:"#fff"}}},"small"===t.size&&{padding:"8.5px 14px"},t.multiline&&{padding:0},t.startAdornment&&{paddingLeft:0},t.endAdornment&&{paddingRight:0}))),N=i.forwardRef((function(e,t){var n,r,l,c,d;const p=(0,u.b)({props:e,name:"MuiOutlinedInput"}),{components:f={},fullWidth:h=!1,inputComponent:v="input",label:A,multiline:b=!1,notched:x,slots:w={},type:S="text"}=p,P=(0,a.A)(p,O),N=(e=>{const{classes:t}=e,n=(0,s.A)({root:["root"],notchedOutline:["notchedOutline"],input:["input"]},R,t);return(0,o.A)({},t,n)})(p),E=(0,g.A)(),F=(0,y.A)({props:p,muiFormControl:E,states:["color","disabled","error","focused","hiddenLabel","size","required"]}),$=(0,o.A)({},p,{color:F.color||"primary",disabled:F.disabled,error:F.error,focused:F.focused,formControl:E,fullWidth:h,hiddenLabel:F.hiddenLabel,multiline:b,size:F.size,type:S}),T=null!=(n=null!=(r=w.root)?r:f.Root)?n:C,W=null!=(l=null!=(c=w.input)?c:f.Input)?l:M;return(0,m.jsx)(k.Ay,(0,o.A)({slots:{root:T,input:W},renderSuffix:e=>(0,m.jsx)(I,{ownerState:$,className:N.notchedOutline,label:null!=A&&""!==A&&F.required?d||(d=(0,m.jsxs)(i.Fragment,{children:[A," ","*"]})):A,notched:void 0!==x?x:Boolean(e.startAdornment||e.filled||e.focused)}),fullWidth:h,inputComponent:v,multiline:b,ref:t,type:S},P,{classes:(0,o.A)({},N,{notchedOutline:null})}))}));N.muiName="Input";const E=N;var F=n(4433),$=n(779),T=n(6347),W=n(1317),j=n(9453),z=(n(4363),n(6248)),B=n(8466),L=n(5734);function D(e){return(0,w.Ay)("MuiNativeSelect",e)}const H=(0,x.A)("MuiNativeSelect",["root","select","multiple","filled","outlined","standard","disabled","icon","iconOpen","iconFilled","iconOutlined","iconStandard","nativeInput","error"]),V=["className","disabled","error","IconComponent","inputRef","variant"],q=({ownerState:e,theme:t})=>(0,o.A)({MozAppearance:"none",WebkitAppearance:"none",userSelect:"none",borderRadius:0,cursor:"pointer","&:focus":(0,o.A)({},t.vars?{backgroundColor:`rgba(${t.vars.palette.common.onBackgroundChannel} / 0.05)`}:{backgroundColor:"light"===t.palette.mode?"rgba(0, 0, 0, 0.05)":"rgba(255, 255, 255, 0.05)"},{borderRadius:0}),"&::-ms-expand":{display:"none"},[`&.${H.disabled}`]:{cursor:"default"},"&[multiple]":{height:"auto"},"&:not([multiple]) option, &:not([multiple]) optgroup":{backgroundColor:(t.vars||t).palette.background.paper},"&&&":{paddingRight:24,minWidth:16}},"filled"===e.variant&&{"&&&":{paddingRight:32}},"outlined"===e.variant&&{borderRadius:(t.vars||t).shape.borderRadius,"&:focus":{borderRadius:(t.vars||t).shape.borderRadius},"&&&":{paddingRight:32}}),U=(0,d.Ay)("select",{name:"MuiNativeSelect",slot:"Select",shouldForwardProp:h.A,overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.select,t[n.variant],n.error&&t.error,{[`&.${H.multiple}`]:t.multiple}]}})(q),G=({ownerState:e,theme:t})=>(0,o.A)({position:"absolute",right:0,top:"calc(50% - .5em)",pointerEvents:"none",color:(t.vars||t).palette.action.active,[`&.${H.disabled}`]:{color:(t.vars||t).palette.action.disabled}},e.open&&{transform:"rotate(180deg)"},"filled"===e.variant&&{right:7},"outlined"===e.variant&&{right:7}),K=(0,d.Ay)("svg",{name:"MuiNativeSelect",slot:"Icon",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.icon,n.variant&&t[`icon${(0,B.A)(n.variant)}`],n.open&&t.iconOpen]}})(G),_=i.forwardRef((function(e,t){const{className:n,disabled:r,error:c,IconComponent:d,inputRef:u,variant:p="standard"}=e,f=(0,a.A)(e,V),h=(0,o.A)({},e,{disabled:r,variant:p,error:c}),v=(e=>{const{classes:t,variant:n,disabled:r,multiple:o,open:a,error:i}=e,l={select:["select",n,r&&"disabled",o&&"multiple",i&&"error"],icon:["icon",`icon${(0,B.A)(n)}`,a&&"iconOpen",r&&"disabled"]};return(0,s.A)(l,D,t)})(h);return(0,m.jsxs)(i.Fragment,{children:[(0,m.jsx)(U,(0,o.A)({ownerState:h,className:(0,l.A)(v.select,n),disabled:r,ref:u||t},f)),e.multiple?null:(0,m.jsx)(K,{as:d,ownerState:h,className:v.icon})]})}));var J=n(2891),X=n(4438),Y=n(6852),Z=n(1159);function Q(e){return(0,w.Ay)("MuiSelect",e)}const ee=(0,x.A)("MuiSelect",["root","select","multiple","filled","outlined","standard","disabled","focused","icon","iconOpen","iconFilled","iconOutlined","iconStandard","nativeInput","error"]);var te;const ne=["aria-describedby","aria-label","autoFocus","autoWidth","children","className","defaultOpen","defaultValue","disabled","displayEmpty","error","IconComponent","inputRef","labelId","MenuProps","multiple","name","onBlur","onChange","onClose","onFocus","onOpen","open","readOnly","renderValue","SelectDisplayProps","tabIndex","type","value","variant"],re=(0,d.Ay)("div",{name:"MuiSelect",slot:"Select",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[{[`&.${ee.select}`]:t.select},{[`&.${ee.select}`]:t[n.variant]},{[`&.${ee.error}`]:t.error},{[`&.${ee.multiple}`]:t.multiple}]}})(q,{[`&.${ee.select}`]:{height:"auto",minHeight:"1.4375em",textOverflow:"ellipsis",whiteSpace:"nowrap",overflow:"hidden"}}),oe=(0,d.Ay)("svg",{name:"MuiSelect",slot:"Icon",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.icon,n.variant&&t[`icon${(0,B.A)(n.variant)}`],n.open&&t.iconOpen]}})(G),ae=(0,d.Ay)("input",{shouldForwardProp:e=>(0,X.A)(e)&&"classes"!==e,name:"MuiSelect",slot:"NativeInput",overridesResolver:(e,t)=>t.nativeInput})({bottom:0,left:0,position:"absolute",opacity:0,pointerEvents:"none",width:"100%",boxSizing:"border-box"});function ie(e,t){return"object"==typeof t&&null!==t?e===t:String(e)===String(t)}function le(e){return null==e||"string"==typeof e&&!e.trim()}const se=i.forwardRef((function(e,t){var n;const{"aria-describedby":r,"aria-label":d,autoFocus:u,autoWidth:p,children:f,className:h,defaultOpen:v,defaultValue:A,disabled:b,displayEmpty:g,error:y=!1,IconComponent:x,inputRef:w,labelId:S,MenuProps:R={},multiple:P,name:k,onBlur:O,onChange:C,onClose:I,onFocus:M,onOpen:N,open:E,readOnly:F,renderValue:$,SelectDisplayProps:T={},tabIndex:W,value:D,variant:H="standard"}=e,V=(0,a.A)(e,ne),[q,U]=(0,Z.A)({controlled:D,default:A,name:"Select"}),[G,K]=(0,Z.A)({controlled:E,default:v,name:"Select"}),_=i.useRef(null),X=i.useRef(null),[ee,se]=i.useState(null),{current:ce}=i.useRef(null!=E),[de,ue]=i.useState(),pe=(0,Y.A)(t,w),fe=i.useCallback((e=>{X.current=e,e&&se(e)}),[]),he=null==ee?void 0:ee.parentNode;i.useImperativeHandle(pe,(()=>({focus:()=>{X.current.focus()},node:_.current,value:q})),[q]),i.useEffect((()=>{v&&G&&ee&&!ce&&(ue(p?null:he.clientWidth),X.current.focus())}),[ee,p]),i.useEffect((()=>{u&&X.current.focus()}),[u]),i.useEffect((()=>{if(!S)return;const e=(0,z.A)(X.current).getElementById(S);if(e){const t=()=>{getSelection().isCollapsed&&X.current.focus()};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}}),[S]);const me=(e,t)=>{e?N&&N(t):I&&I(t),ce||(ue(p?null:he.clientWidth),K(e))},ve=i.Children.toArray(f),Ae=e=>t=>{let n;if(t.currentTarget.hasAttribute("tabindex")){if(P){n=Array.isArray(q)?q.slice():[];const t=q.indexOf(e.props.value);-1===t?n.push(e.props.value):n.splice(t,1)}else n=e.props.value;if(e.props.onClick&&e.props.onClick(t),q!==n&&(U(n),C)){const r=t.nativeEvent||t,o=new r.constructor(r.type,r);Object.defineProperty(o,"target",{writable:!0,value:{value:n,name:k}}),C(o,e)}P||me(!1,t)}},be=null!==ee&&G;let ge,ye;delete V["aria-invalid"];const xe=[];let we=!1,Se=!1;((0,J.lq)({value:q})||g)&&($?ge=$(q):we=!0);const Re=ve.map((e=>{if(!i.isValidElement(e))return null;let t;if(P){if(!Array.isArray(q))throw new Error((0,j.A)(2));t=q.some((t=>ie(t,e.props.value))),t&&we&&xe.push(e.props.children)}else t=ie(q,e.props.value),t&&we&&(ye=e.props.children);return t&&(Se=!0),i.cloneElement(e,{"aria-selected":t?"true":"false",onClick:Ae(e),onKeyUp:t=>{" "===t.key&&t.preventDefault(),e.props.onKeyUp&&e.props.onKeyUp(t)},role:"option",selected:t,value:void 0,"data-value":e.props.value})}));we&&(ge=P?0===xe.length?null:xe.reduce(((e,t,n)=>(e.push(t),n{const{classes:t,variant:n,disabled:r,multiple:o,open:a,error:i}=e,l={select:["select",n,r&&"disabled",o&&"multiple",i&&"error"],icon:["icon",`icon${(0,B.A)(n)}`,a&&"iconOpen",r&&"disabled"],nativeInput:["nativeInput"]};return(0,s.A)(l,Q,t)})(Ce),Me=(0,o.A)({},R.PaperProps,null==(n=R.slotProps)?void 0:n.paper),Ne=(0,c.A)();return(0,m.jsxs)(i.Fragment,{children:[(0,m.jsx)(re,(0,o.A)({ref:fe,tabIndex:Pe,role:"combobox","aria-controls":Ne,"aria-disabled":b?"true":void 0,"aria-expanded":be?"true":"false","aria-haspopup":"listbox","aria-label":d,"aria-labelledby":[S,Oe].filter(Boolean).join(" ")||void 0,"aria-describedby":r,onKeyDown:e=>{F||-1!==[" ","ArrowUp","ArrowDown","Enter"].indexOf(e.key)&&(e.preventDefault(),me(!0,e))},onMouseDown:b||F?null:e=>{0===e.button&&(e.preventDefault(),X.current.focus(),me(!0,e))},onBlur:e=>{!be&&O&&(Object.defineProperty(e,"target",{writable:!0,value:{value:q,name:k}}),O(e))},onFocus:M},T,{ownerState:Ce,className:(0,l.A)(T.className,Ie.select,h),id:Oe,children:le(ge)?te||(te=(0,m.jsx)("span",{className:"notranslate",children:"​"})):ge})),(0,m.jsx)(ae,(0,o.A)({"aria-invalid":y,value:Array.isArray(q)?q.join(","):q,name:k,ref:_,"aria-hidden":!0,onChange:e=>{const t=ve.find((t=>t.props.value===e.target.value));void 0!==t&&(U(t.props.value),C&&C(e,t))},tabIndex:-1,disabled:b,className:Ie.nativeInput,autoFocus:u,ownerState:Ce},V)),(0,m.jsx)(oe,{as:x,className:Ie.icon,ownerState:Ce}),(0,m.jsx)(L.A,(0,o.A)({id:`menu-${k||""}`,anchorEl:he,open:be,onClose:e=>{me(!1,e)},anchorOrigin:{vertical:"bottom",horizontal:"center"},transformOrigin:{vertical:"top",horizontal:"center"}},R,{MenuListProps:(0,o.A)({"aria-labelledby":S,role:"listbox","aria-multiselectable":P?"true":void 0,disableListWrap:!0,id:Ne},R.MenuListProps),slotProps:(0,o.A)({},R.slotProps,{paper:(0,o.A)({},Me,{style:(0,o.A)({minWidth:ke},null!=Me?Me.style:null)})}),children:Re}))]})}));function ce(e){return(0,w.Ay)("MuiSvgIcon",e)}(0,x.A)("MuiSvgIcon",["root","colorPrimary","colorSecondary","colorAction","colorError","colorDisabled","fontSizeInherit","fontSizeSmall","fontSizeMedium","fontSizeLarge"]);const de=["children","className","color","component","fontSize","htmlColor","inheritViewBox","titleAccess","viewBox"],ue=(0,d.Ay)("svg",{name:"MuiSvgIcon",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,"inherit"!==n.color&&t[`color${(0,B.A)(n.color)}`],t[`fontSize${(0,B.A)(n.fontSize)}`]]}})((({theme:e,ownerState:t})=>{var n,r,o,a,i,l,s,c,d,u,p,f,h;return{userSelect:"none",width:"1em",height:"1em",display:"inline-block",fill:t.hasSvgAsChild?void 0:"currentColor",flexShrink:0,transition:null==(n=e.transitions)||null==(r=n.create)?void 0:r.call(n,"fill",{duration:null==(o=e.transitions)||null==(o=o.duration)?void 0:o.shorter}),fontSize:{inherit:"inherit",small:(null==(a=e.typography)||null==(i=a.pxToRem)?void 0:i.call(a,20))||"1.25rem",medium:(null==(l=e.typography)||null==(s=l.pxToRem)?void 0:s.call(l,24))||"1.5rem",large:(null==(c=e.typography)||null==(d=c.pxToRem)?void 0:d.call(c,35))||"2.1875rem"}[t.fontSize],color:null!=(u=null==(p=(e.vars||e).palette)||null==(p=p[t.color])?void 0:p.main)?u:{action:null==(f=(e.vars||e).palette)||null==(f=f.action)?void 0:f.active,disabled:null==(h=(e.vars||e).palette)||null==(h=h.action)?void 0:h.disabled,inherit:void 0}[t.color]}})),pe=i.forwardRef((function(e,t){const n=(0,u.b)({props:e,name:"MuiSvgIcon"}),{children:r,className:c,color:d="inherit",component:p="svg",fontSize:f="medium",htmlColor:h,inheritViewBox:v=!1,titleAccess:A,viewBox:b="0 0 24 24"}=n,g=(0,a.A)(n,de),y=i.isValidElement(r)&&"svg"===r.type,x=(0,o.A)({},n,{color:d,component:p,fontSize:f,instanceFontSize:e.fontSize,inheritViewBox:v,viewBox:b,hasSvgAsChild:y}),w={};v||(w.viewBox=b);const S=(e=>{const{color:t,fontSize:n,classes:r}=e,o={root:["root","inherit"!==t&&`color${(0,B.A)(t)}`,`fontSize${(0,B.A)(n)}`]};return(0,s.A)(o,ce,r)})(x);return(0,m.jsxs)(ue,(0,o.A)({as:p,className:(0,l.A)(S.root,c),focusable:"false",color:h,"aria-hidden":!A||void 0,role:A?"img":void 0,ref:t},w,g,y&&r.props,{ownerState:x,children:[y?r.props.children:r,A?(0,m.jsx)("title",{children:A}):null]}))}));pe.muiName="SvgIcon";const fe=pe,he=function(e){function t(t,n){return(0,m.jsx)(fe,(0,o.A)({"data-testid":"ArrowDropDownIcon",ref:n},t,{children:e}))}return t.muiName=fe.muiName,i.memo(i.forwardRef(t))}((0,m.jsx)("path",{d:"M7 10l5 5 5-5z"})),me=["autoWidth","children","classes","className","defaultOpen","displayEmpty","IconComponent","id","input","inputProps","label","labelId","MenuProps","multiple","native","onClose","onOpen","open","renderValue","SelectDisplayProps","variant"],ve=["root"],Ae={name:"MuiSelect",overridesResolver:(e,t)=>t.root,shouldForwardProp:e=>(0,h.A)(e)&&"variant"!==e,slot:"Root"},be=(0,d.Ay)(p.A,Ae)(""),ge=(0,d.Ay)(E,Ae)(""),ye=(0,d.Ay)(f.A,Ae)(""),xe=i.forwardRef((function(e,t){const n=(0,u.b)({name:"MuiSelect",props:e}),{autoWidth:r=!1,children:s,classes:c={},className:d,defaultOpen:p=!1,displayEmpty:f=!1,IconComponent:h=he,id:v,input:A,inputProps:b,label:x,labelId:w,MenuProps:S,multiple:R=!1,native:P=!1,onClose:k,onOpen:O,open:C,renderValue:I,SelectDisplayProps:M,variant:N="outlined"}=n,E=(0,a.A)(n,me),F=P?_:se,$=(0,g.A)(),T=(0,y.A)({props:n,muiFormControl:$,states:["variant","error"]}),j=T.variant||N,z=(0,o.A)({},n,{variant:j,classes:c}),B=(e=>{const{classes:t}=e;return t})(z),L=(0,a.A)(B,ve),D=A||{standard:(0,m.jsx)(be,{ownerState:z}),outlined:(0,m.jsx)(ge,{label:x,ownerState:z}),filled:(0,m.jsx)(ye,{ownerState:z})}[j],H=(0,Y.A)(t,D.ref);return(0,m.jsx)(i.Fragment,{children:i.cloneElement(D,(0,o.A)({inputComponent:F,inputProps:(0,o.A)({children:s,error:T.error,IconComponent:h,variant:j,type:void 0,multiple:R},P?{id:v}:{autoWidth:r,defaultOpen:p,displayEmpty:f,labelId:w,MenuProps:S,onClose:k,onOpen:O,open:C,renderValue:I,SelectDisplayProps:(0,o.A)({id:v},M)},b,{classes:b?(0,W.A)(L,b.classes):L},A?A.props.inputProps:{})},(R&&P||f)&&"outlined"===j?{notched:!0}:{},{ref:H,className:(0,l.A)(D.props.className,d,B.root)},!A&&{variant:j},E))})}));xe.muiName="Select";const we=xe;function Se(e){return(0,w.Ay)("MuiTextField",e)}(0,x.A)("MuiTextField",["root"]);const Re=["autoComplete","autoFocus","children","className","color","defaultValue","disabled","error","FormHelperTextProps","fullWidth","helperText","id","InputLabelProps","inputProps","InputProps","inputRef","label","maxRows","minRows","multiline","name","onBlur","onChange","onFocus","placeholder","required","rows","select","SelectProps","type","value","variant"],Pe={standard:p.A,filled:f.A,outlined:E},ke=(0,d.Ay)($.A,{name:"MuiTextField",slot:"Root",overridesResolver:(e,t)=>t.root})({}),Oe=i.forwardRef((function(e,t){const n=(0,u.b)({props:e,name:"MuiTextField"}),{autoComplete:r,autoFocus:i=!1,children:d,className:p,color:f="primary",defaultValue:h,disabled:v=!1,error:A=!1,FormHelperTextProps:b,fullWidth:g=!1,helperText:y,id:x,InputLabelProps:w,inputProps:S,InputProps:R,inputRef:P,label:k,maxRows:O,minRows:C,multiline:I=!1,name:M,onBlur:N,onChange:E,onFocus:$,placeholder:W,required:j=!1,rows:z,select:B=!1,SelectProps:L,type:D,value:H,variant:V="outlined"}=n,q=(0,a.A)(n,Re),U=(0,o.A)({},n,{autoFocus:i,color:f,disabled:v,error:A,fullWidth:g,multiline:I,required:j,select:B,variant:V}),G=(e=>{const{classes:t}=e;return(0,s.A)({root:["root"]},Se,t)})(U),K={};"outlined"===V&&(w&&void 0!==w.shrink&&(K.notched=w.shrink),K.label=k),B&&(L&&L.native||(K.id=void 0),K["aria-describedby"]=void 0);const _=(0,c.A)(x),J=y&&_?`${_}-helper-text`:void 0,X=k&&_?`${_}-label`:void 0,Y=Pe[V],Z=(0,m.jsx)(Y,(0,o.A)({"aria-describedby":J,autoComplete:r,autoFocus:i,defaultValue:h,fullWidth:g,multiline:I,name:M,rows:z,maxRows:O,minRows:C,type:D,value:H,id:_,inputRef:P,onBlur:N,onChange:E,onFocus:$,placeholder:W,inputProps:S},K,R));return(0,m.jsxs)(ke,(0,o.A)({className:(0,l.A)(G.root,p),disabled:v,error:A,fullWidth:g,ref:t,required:j,color:f,variant:V,ownerState:U},q,{children:[null!=k&&""!==k&&(0,m.jsx)(F.A,(0,o.A)({htmlFor:_,id:X},w,{children:k})),B?(0,m.jsx)(we,(0,o.A)({"aria-describedby":J,id:_,labelId:X,value:H,input:Z},L,{children:d})):Z,y&&(0,m.jsx)(T.A,(0,o.A)({id:J},b,{children:y}))]}))}))},3561:(e,t,n)=>{n.d(t,{A:()=>h});var r=n(8168),o=n(8587),a=n(6540),i=n(1523),l=n(4877),s=n(1529),c=n(4705),d=n(4848);const u=["onChange","maxRows","minRows","style","value"];function p(e){return parseInt(e,10)||0}const f={visibility:"hidden",position:"absolute",overflow:"hidden",height:0,top:0,left:0,transform:"translateZ(0)"},h=a.forwardRef((function(e,t){const{onChange:n,maxRows:h,minRows:m=1,style:v,value:A}=e,b=(0,o.A)(e,u),{current:g}=a.useRef(null!=A),y=a.useRef(null),x=(0,i.A)(t,y),w=a.useRef(null),S=a.useRef(null),R=a.useCallback((()=>{const t=y.current,n=(0,l.A)(t).getComputedStyle(t);if("0px"===n.width)return{outerHeightStyle:0,overflowing:!1};const r=S.current;r.style.width=n.width,r.value=t.value||e.placeholder||"x","\n"===r.value.slice(-1)&&(r.value+=" ");const o=n.boxSizing,a=p(n.paddingBottom)+p(n.paddingTop),i=p(n.borderBottomWidth)+p(n.borderTopWidth),s=r.scrollHeight;r.value="x";const c=r.scrollHeight;let d=s;return m&&(d=Math.max(Number(m)*c,d)),h&&(d=Math.min(Number(h)*c,d)),d=Math.max(d,c),{outerHeightStyle:d+("border-box"===o?a+i:0),overflowing:Math.abs(d-s)<=1}}),[h,m,e.placeholder]),P=a.useCallback((()=>{const e=R();if(null==(t=e)||0===Object.keys(t).length||0===t.outerHeightStyle&&!t.overflowing)return;var t;const n=e.outerHeightStyle,r=y.current;w.current!==n&&(w.current=n,r.style.height=`${n}px`),r.style.overflow=e.overflowing?"hidden":""}),[R]);return(0,s.A)((()=>{const e=()=>{P()};const t=(0,c.A)(e),n=y.current,r=(0,l.A)(n);let o;return r.addEventListener("resize",t),"undefined"!=typeof ResizeObserver&&(o=new ResizeObserver(e),o.observe(n)),()=>{t.clear(),cancelAnimationFrame(undefined),r.removeEventListener("resize",t),o&&o.disconnect()}}),[R,P]),(0,s.A)((()=>{P()})),(0,d.jsxs)(a.Fragment,{children:[(0,d.jsx)("textarea",(0,r.A)({value:A,onChange:e=>{g||P(),n&&n(e)},ref:x,rows:m,style:v},b)),(0,d.jsx)("textarea",{"aria-hidden":!0,className:e.className,readOnly:!0,ref:S,tabIndex:-1,style:(0,r.A)({},f,v,{paddingTop:0,paddingBottom:0})})]})}))},8532:(e,t,n)=>{n.d(t,{A:()=>v});var r=n(8587),o=n(8168),a=n(6540),i=n(4164),l=n(5659),s=n(5669),c=n(1848),d=n(8413),u=n(1609);function p(e){return(0,u.Ay)("MuiToolbar",e)}(0,d.A)("MuiToolbar",["root","gutters","regular","dense"]);var f=n(4848);const h=["className","component","disableGutters","variant"],m=(0,c.Ay)("div",{name:"MuiToolbar",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,!n.disableGutters&&t.gutters,t[n.variant]]}})((({theme:e,ownerState:t})=>(0,o.A)({position:"relative",display:"flex",alignItems:"center"},!t.disableGutters&&{paddingLeft:e.spacing(2),paddingRight:e.spacing(2),[e.breakpoints.up("sm")]:{paddingLeft:e.spacing(3),paddingRight:e.spacing(3)}},"dense"===t.variant&&{minHeight:48})),(({theme:e,ownerState:t})=>"regular"===t.variant&&e.mixins.toolbar)),v=a.forwardRef((function(e,t){const n=(0,s.b)({props:e,name:"MuiToolbar"}),{className:a,component:c="div",disableGutters:d=!1,variant:u="regular"}=n,v=(0,r.A)(n,h),A=(0,o.A)({},n,{component:c,disableGutters:d,variant:u}),b=(e=>{const{classes:t,disableGutters:n,variant:r}=e,o={root:["root",!n&&"gutters",r]};return(0,l.A)(o,p,t)})(A);return(0,f.jsx)(m,(0,o.A)({as:c,className:(0,i.A)(b.root,a),ref:t,ownerState:A},v))}))},4073:(e,t,n)=>{n.d(t,{A:()=>y});var r=n(8587),o=n(8168),a=n(6540),i=n(4164),l=n(9599),s=n(5659),c=n(1848),d=n(5669),u=n(8466),p=n(8413),f=n(1609);function h(e){return(0,f.Ay)("MuiTypography",e)}(0,p.A)("MuiTypography",["root","h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","inherit","button","caption","overline","alignLeft","alignRight","alignCenter","alignJustify","noWrap","gutterBottom","paragraph"]);var m=n(4848);const v=["align","className","component","gutterBottom","noWrap","paragraph","variant","variantMapping"],A=(0,c.Ay)("span",{name:"MuiTypography",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,n.variant&&t[n.variant],"inherit"!==n.align&&t[`align${(0,u.A)(n.align)}`],n.noWrap&&t.noWrap,n.gutterBottom&&t.gutterBottom,n.paragraph&&t.paragraph]}})((({theme:e,ownerState:t})=>(0,o.A)({margin:0},"inherit"===t.variant&&{font:"inherit"},"inherit"!==t.variant&&e.typography[t.variant],"inherit"!==t.align&&{textAlign:t.align},t.noWrap&&{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},t.gutterBottom&&{marginBottom:"0.35em"},t.paragraph&&{marginBottom:16}))),b={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",subtitle1:"h6",subtitle2:"h6",body1:"p",body2:"p",inherit:"p"},g={primary:"primary.main",textPrimary:"text.primary",secondary:"secondary.main",textSecondary:"text.secondary",error:"error.main"},y=a.forwardRef((function(e,t){const n=(0,d.b)({props:e,name:"MuiTypography"}),a=(e=>g[e]||e)(n.color),c=(0,l.A)((0,o.A)({},n,{color:a})),{align:p="inherit",className:f,component:y,gutterBottom:x=!1,noWrap:w=!1,paragraph:S=!1,variant:R="body1",variantMapping:P=b}=c,k=(0,r.A)(c,v),O=(0,o.A)({},c,{align:p,color:a,className:f,component:y,gutterBottom:x,noWrap:w,paragraph:S,variant:R,variantMapping:P}),C=y||(S?"p":P[R]||b[R])||"span",I=(e=>{const{align:t,gutterBottom:n,noWrap:r,paragraph:o,variant:a,classes:i}=e,l={root:["root",a,"inherit"!==e.align&&`align${(0,u.A)(t)}`,n&&"gutterBottom",r&&"noWrap",o&&"paragraph"]};return(0,s.A)(l,h,i)})(O);return(0,m.jsx)(A,(0,o.A)({as:C,ref:t,ownerState:O,className:(0,i.A)(I.root,f)},k))}))},3524:(e,t,n)=>{n.d(t,{A:()=>d});var r=n(6540),o=n(1523),a=n(2325),i=n(4848);const l=["input","select","textarea","a[href]","button","[tabindex]","audio[controls]","video[controls]",'[contenteditable]:not([contenteditable="false"])'].join(",");function s(e){const t=[],n=[];return Array.from(e.querySelectorAll(l)).forEach(((e,r)=>{const o=function(e){const t=parseInt(e.getAttribute("tabindex")||"",10);return Number.isNaN(t)?"true"===e.contentEditable||("AUDIO"===e.nodeName||"VIDEO"===e.nodeName||"DETAILS"===e.nodeName)&&null===e.getAttribute("tabindex")?0:e.tabIndex:t}(e);-1!==o&&function(e){return!(e.disabled||"INPUT"===e.tagName&&"hidden"===e.type||function(e){if("INPUT"!==e.tagName||"radio"!==e.type)return!1;if(!e.name)return!1;const t=t=>e.ownerDocument.querySelector(`input[type="radio"]${t}`);let n=t(`[name="${e.name}"]:checked`);return n||(n=t(`[name="${e.name}"]`)),n!==e}(e))}(e)&&(0===o?t.push(e):n.push({documentOrder:r,tabIndex:o,node:e}))})),n.sort(((e,t)=>e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex)).map((e=>e.node)).concat(t)}function c(){return!0}const d=function(e){const{children:t,disableAutoFocus:n=!1,disableEnforceFocus:l=!1,disableRestoreFocus:d=!1,getTabbable:u=s,isEnabled:p=c,open:f}=e,h=r.useRef(!1),m=r.useRef(null),v=r.useRef(null),A=r.useRef(null),b=r.useRef(null),g=r.useRef(!1),y=r.useRef(null),x=(0,o.A)(t.ref,y),w=r.useRef(null);r.useEffect((()=>{f&&y.current&&(g.current=!n)}),[n,f]),r.useEffect((()=>{if(!f||!y.current)return;const e=(0,a.A)(y.current);return y.current.contains(e.activeElement)||(y.current.hasAttribute("tabIndex")||y.current.setAttribute("tabIndex","-1"),g.current&&y.current.focus()),()=>{d||(A.current&&A.current.focus&&(h.current=!0,A.current.focus()),A.current=null)}}),[f]),r.useEffect((()=>{if(!f||!y.current)return;const e=(0,a.A)(y.current),t=t=>{w.current=t,!l&&p()&&"Tab"===t.key&&e.activeElement===y.current&&t.shiftKey&&(h.current=!0,v.current&&v.current.focus())},n=()=>{const t=y.current;if(null===t)return;if(!e.hasFocus()||!p()||h.current)return void(h.current=!1);if(t.contains(e.activeElement))return;if(l&&e.activeElement!==m.current&&e.activeElement!==v.current)return;if(e.activeElement!==b.current)b.current=null;else if(null!==b.current)return;if(!g.current)return;let n=[];if(e.activeElement!==m.current&&e.activeElement!==v.current||(n=u(y.current)),n.length>0){var r,o;const e=Boolean((null==(r=w.current)?void 0:r.shiftKey)&&"Tab"===(null==(o=w.current)?void 0:o.key)),t=n[0],a=n[n.length-1];"string"!=typeof t&&"string"!=typeof a&&(e?a.focus():t.focus())}else t.focus()};e.addEventListener("focusin",n),e.addEventListener("keydown",t,!0);const r=setInterval((()=>{e.activeElement&&"BODY"===e.activeElement.tagName&&n()}),50);return()=>{clearInterval(r),e.removeEventListener("focusin",n),e.removeEventListener("keydown",t,!0)}}),[n,l,d,p,f,u]);const S=e=>{null===A.current&&(A.current=e.relatedTarget),g.current=!0};return(0,i.jsxs)(r.Fragment,{children:[(0,i.jsx)("div",{tabIndex:f?0:-1,onFocus:S,ref:m,"data-testid":"sentinelStart"}),r.cloneElement(t,{ref:x,onFocus:e=>{null===A.current&&(A.current=e.relatedTarget),g.current=!0,b.current=e.target;const n=t.props.onFocus;n&&n(e)}}),(0,i.jsx)("div",{tabIndex:f?0:-1,onFocus:S,ref:v,"data-testid":"sentinelEnd"})]})}},2363:(e,t,n)=>{n.d(t,{A:()=>c});var r=n(8168),o=n(8587),a=(n(6540),n(4572)),i=n(8312),l=n(4848);const s=["theme"];function c(e){let{theme:t}=e,n=(0,o.A)(e,s);const c=t[i.A];return(0,l.jsx)(a.A,(0,r.A)({},n,{themeId:c?i.A:void 0,theme:c||t}))}},6544:(e,t,n)=>{n.d(t,{A:()=>E});var r=n(8168),o=n(8587),a=n(9453),i=n(1317),l=n(4188),s=n(3571),c=n(8749),d=n(771);const u={black:"#000",white:"#fff"},p={50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#f5f5f5",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161"},f={50:"#f3e5f5",100:"#e1bee7",200:"#ce93d8",300:"#ba68c8",400:"#ab47bc",500:"#9c27b0",600:"#8e24aa",700:"#7b1fa2",800:"#6a1b9a",900:"#4a148c",A100:"#ea80fc",A200:"#e040fb",A400:"#d500f9",A700:"#aa00ff"},h={50:"#ffebee",100:"#ffcdd2",200:"#ef9a9a",300:"#e57373",400:"#ef5350",500:"#f44336",600:"#e53935",700:"#d32f2f",800:"#c62828",900:"#b71c1c",A100:"#ff8a80",A200:"#ff5252",A400:"#ff1744",A700:"#d50000"},m={50:"#fff3e0",100:"#ffe0b2",200:"#ffcc80",300:"#ffb74d",400:"#ffa726",500:"#ff9800",600:"#fb8c00",700:"#f57c00",800:"#ef6c00",900:"#e65100",A100:"#ffd180",A200:"#ffab40",A400:"#ff9100",A700:"#ff6d00"},v={50:"#e3f2fd",100:"#bbdefb",200:"#90caf9",300:"#64b5f6",400:"#42a5f5",500:"#2196f3",600:"#1e88e5",700:"#1976d2",800:"#1565c0",900:"#0d47a1",A100:"#82b1ff",A200:"#448aff",A400:"#2979ff",A700:"#2962ff"},A={50:"#e1f5fe",100:"#b3e5fc",200:"#81d4fa",300:"#4fc3f7",400:"#29b6f6",500:"#03a9f4",600:"#039be5",700:"#0288d1",800:"#0277bd",900:"#01579b",A100:"#80d8ff",A200:"#40c4ff",A400:"#00b0ff",A700:"#0091ea"},b={50:"#e8f5e9",100:"#c8e6c9",200:"#a5d6a7",300:"#81c784",400:"#66bb6a",500:"#4caf50",600:"#43a047",700:"#388e3c",800:"#2e7d32",900:"#1b5e20",A100:"#b9f6ca",A200:"#69f0ae",A400:"#00e676",A700:"#00c853"},g=["mode","contrastThreshold","tonalOffset"],y={text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.38)"},divider:"rgba(0, 0, 0, 0.12)",background:{paper:u.white,default:u.white},action:{active:"rgba(0, 0, 0, 0.54)",hover:"rgba(0, 0, 0, 0.04)",hoverOpacity:.04,selected:"rgba(0, 0, 0, 0.08)",selectedOpacity:.08,disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(0, 0, 0, 0.12)",disabledOpacity:.38,focus:"rgba(0, 0, 0, 0.12)",focusOpacity:.12,activatedOpacity:.12}},x={text:{primary:u.white,secondary:"rgba(255, 255, 255, 0.7)",disabled:"rgba(255, 255, 255, 0.5)",icon:"rgba(255, 255, 255, 0.5)"},divider:"rgba(255, 255, 255, 0.12)",background:{paper:"#121212",default:"#121212"},action:{active:u.white,hover:"rgba(255, 255, 255, 0.08)",hoverOpacity:.08,selected:"rgba(255, 255, 255, 0.16)",selectedOpacity:.16,disabled:"rgba(255, 255, 255, 0.3)",disabledBackground:"rgba(255, 255, 255, 0.12)",disabledOpacity:.38,focus:"rgba(255, 255, 255, 0.12)",focusOpacity:.12,activatedOpacity:.24}};function w(e,t,n,r){const o=r.light||r,a=r.dark||1.5*r;e[t]||(e.hasOwnProperty(n)?e[t]=e[n]:"light"===t?e.light=(0,d.a)(e.main,o):"dark"===t&&(e.dark=(0,d.e$)(e.main,a)))}const S=["fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem"],R={textTransform:"uppercase"},P='"Roboto", "Helvetica", "Arial", sans-serif';function k(e,t){const n="function"==typeof t?t(e):t,{fontFamily:a=P,fontSize:l=14,fontWeightLight:s=300,fontWeightRegular:c=400,fontWeightMedium:d=500,fontWeightBold:u=700,htmlFontSize:p=16,allVariants:f,pxToRem:h}=n,m=(0,o.A)(n,S),v=l/14,A=h||(e=>e/p*v+"rem"),b=(e,t,n,o,i)=>{return(0,r.A)({fontFamily:a,fontWeight:e,fontSize:A(t),lineHeight:n},a===P?{letterSpacing:(l=o/t,Math.round(1e5*l)/1e5+"em")}:{},i,f);var l},g={h1:b(s,96,1.167,-1.5),h2:b(s,60,1.2,-.5),h3:b(c,48,1.167,0),h4:b(c,34,1.235,.25),h5:b(c,24,1.334,0),h6:b(d,20,1.6,.15),subtitle1:b(c,16,1.75,.15),subtitle2:b(d,14,1.57,.1),body1:b(c,16,1.5,.15),body2:b(c,14,1.43,.15),button:b(d,14,1.75,.4,R),caption:b(c,12,1.66,.4),overline:b(c,12,2.66,1,R),inherit:{fontFamily:"inherit",fontWeight:"inherit",fontSize:"inherit",lineHeight:"inherit",letterSpacing:"inherit"}};return(0,i.A)((0,r.A)({htmlFontSize:p,pxToRem:A,fontFamily:a,fontSize:l,fontWeightLight:s,fontWeightRegular:c,fontWeightMedium:d,fontWeightBold:u},g),m,{clone:!1})}function O(...e){return[`${e[0]}px ${e[1]}px ${e[2]}px ${e[3]}px rgba(0,0,0,0.2)`,`${e[4]}px ${e[5]}px ${e[6]}px ${e[7]}px rgba(0,0,0,0.14)`,`${e[8]}px ${e[9]}px ${e[10]}px ${e[11]}px rgba(0,0,0,0.12)`].join(",")}const C=["none",O(0,2,1,-1,0,1,1,0,0,1,3,0),O(0,3,1,-2,0,2,2,0,0,1,5,0),O(0,3,3,-2,0,3,4,0,0,1,8,0),O(0,2,4,-1,0,4,5,0,0,1,10,0),O(0,3,5,-1,0,5,8,0,0,1,14,0),O(0,3,5,-1,0,6,10,0,0,1,18,0),O(0,4,5,-2,0,7,10,1,0,2,16,1),O(0,5,5,-3,0,8,10,1,0,3,14,2),O(0,5,6,-3,0,9,12,1,0,3,16,2),O(0,6,6,-3,0,10,14,1,0,4,18,3),O(0,6,7,-4,0,11,15,1,0,4,20,3),O(0,7,8,-4,0,12,17,2,0,5,22,4),O(0,7,8,-4,0,13,19,2,0,5,24,4),O(0,7,9,-4,0,14,21,2,0,5,26,4),O(0,8,9,-5,0,15,22,2,0,6,28,5),O(0,8,10,-5,0,16,24,2,0,6,30,5),O(0,8,11,-5,0,17,26,2,0,6,32,5),O(0,9,11,-5,0,18,28,2,0,7,34,6),O(0,9,12,-6,0,19,29,2,0,7,36,6),O(0,10,13,-6,0,20,31,3,0,8,38,7),O(0,10,13,-6,0,21,33,3,0,8,40,7),O(0,10,14,-6,0,22,35,3,0,8,42,7),O(0,11,14,-7,0,23,36,3,0,9,44,8),O(0,11,15,-7,0,24,38,3,0,9,46,8)];var I=n(7091);const M={mobileStepper:1e3,fab:1050,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500},N=["breakpoints","mixins","spacing","palette","transitions","typography","shape"];const E=function(e={},...t){const{mixins:n={},palette:S={},transitions:R={},typography:P={}}=e,O=(0,o.A)(e,N);if(e.vars)throw new Error((0,a.A)(18));const E=function(e){const{mode:t="light",contrastThreshold:n=3,tonalOffset:l=.2}=e,s=(0,o.A)(e,g),c=e.primary||function(e="light"){return"dark"===e?{main:v[200],light:v[50],dark:v[400]}:{main:v[700],light:v[400],dark:v[800]}}(t),S=e.secondary||function(e="light"){return"dark"===e?{main:f[200],light:f[50],dark:f[400]}:{main:f[500],light:f[300],dark:f[700]}}(t),R=e.error||function(e="light"){return"dark"===e?{main:h[500],light:h[300],dark:h[700]}:{main:h[700],light:h[400],dark:h[800]}}(t),P=e.info||function(e="light"){return"dark"===e?{main:A[400],light:A[300],dark:A[700]}:{main:A[700],light:A[500],dark:A[900]}}(t),k=e.success||function(e="light"){return"dark"===e?{main:b[400],light:b[300],dark:b[700]}:{main:b[800],light:b[500],dark:b[900]}}(t),O=e.warning||function(e="light"){return"dark"===e?{main:m[400],light:m[300],dark:m[700]}:{main:"#ed6c02",light:m[500],dark:m[900]}}(t);function C(e){return(0,d.eM)(e,x.text.primary)>=n?x.text.primary:y.text.primary}const I=({color:e,name:t,mainShade:n=500,lightShade:o=300,darkShade:i=700})=>{if(!(e=(0,r.A)({},e)).main&&e[n]&&(e.main=e[n]),!e.hasOwnProperty("main"))throw new Error((0,a.A)(11,t?` (${t})`:"",n));if("string"!=typeof e.main)throw new Error((0,a.A)(12,t?` (${t})`:"",JSON.stringify(e.main)));return w(e,"light",o,l),w(e,"dark",i,l),e.contrastText||(e.contrastText=C(e.main)),e},M={dark:x,light:y};return(0,i.A)((0,r.A)({common:(0,r.A)({},u),mode:t,primary:I({color:c,name:"primary"}),secondary:I({color:S,name:"secondary",mainShade:"A400",lightShade:"A200",darkShade:"A700"}),error:I({color:R,name:"error"}),warning:I({color:O,name:"warning"}),info:I({color:P,name:"info"}),success:I({color:k,name:"success"}),grey:p,contrastThreshold:n,getContrastText:C,augmentColor:I,tonalOffset:l},M[t]),s)}(S),F=(0,c.A)(e);let $=(0,i.A)(F,{mixins:(T=F.breakpoints,W=n,(0,r.A)({toolbar:{minHeight:56,[T.up("xs")]:{"@media (orientation: landscape)":{minHeight:48}},[T.up("sm")]:{minHeight:64}}},W)),palette:E,shadows:C.slice(),typography:k(E,P),transitions:(0,I.Ay)(R),zIndex:(0,r.A)({},M)});var T,W;return $=(0,i.A)($,O),$=t.reduce(((e,t)=>(0,i.A)(e,t)),$),$.unstable_sxConfig=(0,r.A)({},l.A,null==O?void 0:O.unstable_sxConfig),$.unstable_sx=function(e){return(0,s.A)({sx:e,theme:this})},$}},7091:(e,t,n)=>{n.d(t,{Ay:()=>d,p0:()=>l});var r=n(8587),o=n(8168);const a=["duration","easing","delay"],i={easeInOut:"cubic-bezier(0.4, 0, 0.2, 1)",easeOut:"cubic-bezier(0.0, 0, 0.2, 1)",easeIn:"cubic-bezier(0.4, 0, 1, 1)",sharp:"cubic-bezier(0.4, 0, 0.6, 1)"},l={shortest:150,shorter:200,short:250,standard:300,complex:375,enteringScreen:225,leavingScreen:195};function s(e){return`${Math.round(e)}ms`}function c(e){if(!e)return 0;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}function d(e){const t=(0,o.A)({},i,e.easing),n=(0,o.A)({},l,e.duration);return(0,o.A)({getAutoHeightDuration:c,create:(e=["all"],o={})=>{const{duration:i=n.standard,easing:l=t.easeInOut,delay:c=0}=o;return(0,r.A)(o,a),(Array.isArray(e)?e:[e]).map((e=>`${e} ${"string"==typeof i?i:s(i)} ${l} ${"string"==typeof c?c:s(c)}`)).join(",")}},e,{easing:t,duration:n})}},2765:(e,t,n)=>{n.d(t,{A:()=>r});const r=(0,n(6544).A)()},8312:(e,t,n)=>{n.d(t,{A:()=>r});const r="$$material"},9770:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(4438);const o=e=>(0,r.A)(e)&&"classes"!==e},4438:(e,t,n)=>{n.d(t,{A:()=>r});const r=function(e){return"ownerState"!==e&&"theme"!==e&&"sx"!==e&&"as"!==e}},1848:(e,t,n)=>{n.d(t,{Ay:()=>l});var r=n(6461),o=n(2765),a=n(8312),i=n(9770);const l=(0,r.Ay)({themeId:a.A,defaultTheme:o.A,rootShouldForwardProp:i.A})},4675:(e,t,n)=>{n.d(t,{A:()=>i}),n(6540);var r=n(2858),o=n(2765),a=n(8312);function i(){const e=(0,r.A)(o.A);return e[a.A]||e}},5186:(e,t,n)=>{n.d(t,{c:()=>o,q:()=>r});const r=e=>e.scrollTop;function o(e,t){var n,r;const{timeout:o,easing:a,style:i={}}=e;return{duration:null!=(n=i.transitionDuration)?n:"number"==typeof o?o:o[t.mode]||0,easing:null!=(r=i.transitionTimingFunction)?r:"object"==typeof a?a[t.mode]:a,delay:i.transitionDelay}}},8466:(e,t,n)=>{n.d(t,{A:()=>r});const r=n(3967).A},7167:(e,t,n)=>{n.d(t,{A:()=>r});const r=n(3205).A},6767:(e,t,n)=>{n.d(t,{A:()=>r});const r=n(8473).A},6248:(e,t,n)=>{n.d(t,{A:()=>r});const r=n(2325).A},1159:(e,t,n)=>{n.d(t,{A:()=>r});const r=n(2501).A},2778:(e,t,n)=>{n.d(t,{A:()=>r});const r=n(1529).A},3034:(e,t,n)=>{n.d(t,{A:()=>r});const r=n(1547).A},6852:(e,t,n)=>{n.d(t,{A:()=>r});const r=n(1523).A},8851:(e,t,n)=>{n.d(t,{A:()=>r});const r=n(3313).A},6025:(e,t,n)=>{n.d(t,{A:()=>p});var r=n(8168),o=n(8587),a=n(1523),i=n(2879),l=n(6677),s=n(2505);const c=["className","elementType","ownerState","externalForwardedProps","getSlotOwnerState","internalForwardedProps"],d=["component","slots","slotProps"],u=["component"];function p(e,t){const{className:n,elementType:p,ownerState:f,externalForwardedProps:h,getSlotOwnerState:m,internalForwardedProps:v}=t,A=(0,o.A)(t,c),{component:b,slots:g={[e]:void 0},slotProps:y={[e]:void 0}}=h,x=(0,o.A)(h,d),w=g[e]||p,S=(0,l.A)(y[e],f),R=(0,s.A)((0,r.A)({className:n},A,{externalForwardedProps:"root"===e?x:void 0,externalSlotProps:S})),{props:{component:P},internalRef:k}=R,O=(0,o.A)(R.props,u),C=(0,a.A)(k,null==S?void 0:S.ref,t.ref),I=m?m(O):{},M=(0,r.A)({},f,I),N="root"===e?P||b:P,E=(0,i.A)(w,(0,r.A)({},"root"===e&&!b&&!g[e]&&v,"root"!==e&&!g[e]&&v,O,N&&{as:N},{ref:C}),M);return Object.keys(I).forEach((e=>{delete E[e]})),[w,E]}}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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RyxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxHQUFJLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxHQUFJLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxHQUFJLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxHQUFJLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxHQUFJLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEksY0NObHlDLE1BVUEsRUFWZSxDQUNiRSxjQUFlLElBQ2ZDLElBQUssS0FDTEMsVUFBVyxLQUNYQyxPQUFRLEtBQ1JDLE9BQVEsS0FDUkMsTUFBTyxLQUNQQyxTQUFVLEtBQ1ZDLFFBQVMsTUNQTCxFQUFZLENBQUMsY0FBZSxTQUFVLFVBQVcsVUFBVyxjQUFlLGFBQWMsU0FxRi9GLFFBMUVBLFNBQXFCQyxFQUFVLENBQUMsS0FBTUMsR0FDcEMsTUFDSXBKLE9BQVFxSixFQUFjLENBQUMsRUFDdkJ2bkIsUUFBU3duQixFQUFlLENBQUMsRUFDekJqbkIsWUFBYWtuQixFQUFtQixDQUFDLEVBQ2pDdlAsV0FBWXdQLEVBQWtCLENBQUMsR0FDN0JMLEVBQ0ovbEIsR0FBUSxPQUE4QitsQixFQUFTLEdBQ2pELEdBQUlBLEVBQVF0bkIsS0FDVixNQUFNLElBQUltVixPQUNjLE9BQXVCLEtBRWpELE1BQU1sVixFSnNKTyxTQUF1QkEsR0FDcEMsTUFBTSxLQUNGZSxFQUFPLFFBQU8sa0JBQ2Q0bUIsRUFBb0IsRUFBQyxZQUNyQnpDLEVBQWMsSUFDWmxsQixFQUNKc0IsR0FBUSxPQUE4QnRCLEVBQVNoQixHQUMzQ3FCLEVBQVVMLEVBQVFLLFNBNUYxQixTQUEyQlUsRUFBTyxTQUNoQyxNQUFhLFNBQVRBLEVBQ0ssQ0FDTGdMLEtBQU0sRUFBSyxLQUNYc1ksTUFBTyxFQUFLLElBQ1pRLEtBQU0sRUFBSyxNQUdSLENBQ0w5WSxLQUFNLEVBQUssS0FDWHNZLE1BQU8sRUFBSyxLQUNaUSxLQUFNLEVBQUssS0FFZixDQStFcUMrQyxDQUFrQjdtQixHQUMvQzBlLEVBQVl6ZixFQUFReWYsV0EvRTVCLFNBQTZCMWUsRUFBTyxTQUNsQyxNQUFhLFNBQVRBLEVBQ0ssQ0FDTGdMLEtBQU0sRUFBTyxLQUNic1ksTUFBTyxFQUFPLElBQ2RRLEtBQU0sRUFBTyxNQUdWLENBQ0w5WSxLQUFNLEVBQU8sS0FDYnNZLE1BQU8sRUFBTyxLQUNkUSxLQUFNLEVBQU8sS0FFakIsQ0FrRXlDZ0QsQ0FBb0I5bUIsR0FDckRpTCxFQUFRaE0sRUFBUWdNLE9BbEV4QixTQUF5QmpMLEVBQU8sU0FDOUIsTUFBYSxTQUFUQSxFQUNLLENBQ0xnTCxLQUFNLEVBQUksS0FDVnNZLE1BQU8sRUFBSSxLQUNYUSxLQUFNLEVBQUksTUFHUCxDQUNMOVksS0FBTSxFQUFJLEtBQ1ZzWSxNQUFPLEVBQUksS0FDWFEsS0FBTSxFQUFJLEtBRWQsQ0FxRGlDaUQsQ0FBZ0IvbUIsR0FDekNnbkIsRUFBTy9uQixFQUFRK25CLE1BckR2QixTQUF3QmhuQixFQUFPLFNBQzdCLE1BQWEsU0FBVEEsRUFDSyxDQUNMZ0wsS0FBTSxFQUFVLEtBQ2hCc1ksTUFBTyxFQUFVLEtBQ2pCUSxLQUFNLEVBQVUsTUFHYixDQUNMOVksS0FBTSxFQUFVLEtBQ2hCc1ksTUFBTyxFQUFVLEtBQ2pCUSxLQUFNLEVBQVUsS0FFcEIsQ0F3QytCbUQsQ0FBZWpuQixHQUN0Q2tuQixFQUFVam9CLEVBQVFpb0IsU0F4QzFCLFNBQTJCbG5CLEVBQU8sU0FDaEMsTUFBYSxTQUFUQSxFQUNLLENBQ0xnTCxLQUFNLEVBQU0sS0FDWnNZLE1BQU8sRUFBTSxLQUNiUSxLQUFNLEVBQU0sTUFHVCxDQUNMOVksS0FBTSxFQUFNLEtBQ1pzWSxNQUFPLEVBQU0sS0FDYlEsS0FBTSxFQUFNLEtBRWhCLENBMkJxQ3FELENBQWtCbm5CLEdBQy9Db25CLEVBQVVub0IsRUFBUW1vQixTQTNCMUIsU0FBMkJwbkIsRUFBTyxTQUNoQyxNQUFhLFNBQVRBLEVBQ0ssQ0FDTGdMLEtBQU0sRUFBTyxLQUNic1ksTUFBTyxFQUFPLEtBQ2RRLEtBQU0sRUFBTyxNQUdWLENBQ0w5WSxLQUFNLFVBRU5zWSxNQUFPLEVBQU8sS0FDZFEsS0FBTSxFQUFPLEtBRWpCLENBYXFDdUQsQ0FBa0JybkIsR0FLckQsU0FBU3NuQixFQUFnQnBvQixHQVF2QixPQVBxQixRQUFpQkEsRUFBWTRrQixFQUFLemtCLEtBQUtDLFVBQVlzbkIsRUFBb0I5QyxFQUFLemtCLEtBQUtDLFFBQVVna0IsRUFBTWprQixLQUFLQyxPQVE3SCxDQUNBLE1BQU1pb0IsRUFBZSxFQUNuQm5vQixRQUNBaEIsT0FDQW9wQixZQUFZLElBQ1pDLGFBQWEsSUFDYkMsWUFBWSxRQU1aLEtBSkF0b0IsR0FBUSxPQUFTLENBQUMsRUFBR0EsSUFDVjRMLE1BQVE1TCxFQUFNb29CLEtBQ3ZCcG9CLEVBQU00TCxLQUFPNUwsRUFBTW9vQixLQUVoQnBvQixFQUFNa2xCLGVBQWUsUUFDeEIsTUFBTSxJQUFJblEsT0FDc0UsT0FBdUIsR0FBSS9WLEVBQU8sS0FBS0EsS0FBVSxHQUFJb3BCLElBRXZJLEdBQTBCLGlCQUFmcG9CLEVBQU00TCxLQUNmLE1BQU0sSUFBSW1KLE9BYVAsT0FBdUIsR0FBSS9WLEVBQU8sS0FBS0EsS0FBVSxHQUFJdXBCLEtBQUtDLFVBQVV4b0IsRUFBTTRMLFFBTy9FLE9BTEErWSxFQUFlM2tCLEVBQU8sUUFBU3FvQixFQUFZdEQsR0FDM0NKLEVBQWUza0IsRUFBTyxPQUFRc29CLEVBQVd2RCxHQUNwQy9rQixFQUFNeW9CLGVBQ1R6b0IsRUFBTXlvQixhQUFlUCxFQUFnQmxvQixFQUFNNEwsT0FFdEM1TCxDQUFLLEVBRVIwb0IsRUFBUSxDQUNaaEUsT0FDQVIsU0E0REYsT0FyRHNCLEVBQUFwSyxFQUFBLElBQVUsT0FBUyxDQUV2Q3JPLFFBQVEsT0FBUyxDQUFDLEVBQUcsR0FHckI3SyxPQUVBVixRQUFTaW9CLEVBQWEsQ0FDcEJub0IsTUFBT0UsRUFDUGxCLEtBQU0sWUFHUnNnQixVQUFXNkksRUFBYSxDQUN0Qm5vQixNQUFPc2YsRUFDUHRnQixLQUFNLFlBQ05vcEIsVUFBVyxPQUNYQyxXQUFZLE9BQ1pDLFVBQVcsU0FHYnpjLE1BQU9zYyxFQUFhLENBQ2xCbm9CLE1BQU82TCxFQUNQN00sS0FBTSxVQUdSZ3BCLFFBQVNHLEVBQWEsQ0FDcEJub0IsTUFBT2dvQixFQUNQaHBCLEtBQU0sWUFHUjRvQixLQUFNTyxFQUFhLENBQ2pCbm9CLE1BQU80bkIsRUFDUDVvQixLQUFNLFNBR1I4b0IsUUFBU0ssRUFBYSxDQUNwQm5vQixNQUFPOG5CLEVBQ1A5b0IsS0FBTSxZQUdSMnBCLEtBQUksRUFHSm5CLG9CQUVBVSxrQkFFQUMsZUFJQXBELGVBQ0MyRCxFQUFNOW5CLElBQVFPLEVBRW5CLENJdFJrQnluQixDQUFjdkIsR0FDeEJ3QixHQUFjLE9BQWtCM0IsR0FDdEMsSUFBSTRCLEdBQVcsRUFBQWhQLEVBQUEsR0FBVStPLEVBQWEsQ0FDcEM5SyxRQzVCaUNGLEVENEJaZ0wsRUFBWWhMLFlDNUJhRSxFRDRCQXFKLEdDM0J6QyxPQUFTLENBQ2RwSixRQUFTLENBQ1A1YSxVQUFXLEdBQ1gsQ0FBQ3lhLEVBQVlDLEdBQUcsT0FBUSxDQUN0QixrQ0FBbUMsQ0FDakMxYSxVQUFXLEtBR2YsQ0FBQ3lhLEVBQVlDLEdBQUcsT0FBUSxDQUN0QjFhLFVBQVcsTUFHZDJhLElEZ0JEbGUsVUFFQWMsUUFBUyxFQUFRa1QsUUFDakJrRSxXQUFZdU4sRUFBaUJ6bEIsRUFBUzBuQixHQUN0Q25uQixhQUFhLEVBQUEyb0IsRUFBQSxJQUFrQnpCLEdBQy9CMEIsUUFBUSxPQUFTLENBQUMsRUFBRyxLQ2xDVixJQUFzQm5MLEVBQWFFLEVEMkVoRCxPQXZDQStLLEdBQVcsRUFBQWhQLEVBQUEsR0FBVWdQLEVBQVUzbkIsR0FDL0IybkIsRUFBVzNCLEVBQUs1UixRQUFPLENBQUMwVCxFQUFLQyxLQUFhLEVBQUFwUCxFQUFBLEdBQVVtUCxFQUFLQyxJQUFXSixHQStCcEVBLEVBQVNLLG1CQUFvQixPQUFTLENBQUMsRUFBR0MsRUFBQSxFQUEwQixNQUFUam9CLE9BQWdCLEVBQVNBLEVBQU1nb0IsbUJBQzFGTCxFQUFTTyxZQUFjLFNBQVlucUIsR0FDakMsT0FBTyxFQUFBb3FCLEVBQUEsR0FBZ0IsQ0FDckJDLEdBQUlycUIsRUFDSk8sTUFBTytwQixNQUVYLEVBQ09WLENBQ1QsQyxvRUUzRUEsTUFBTWpxQixFQUFZLENBQUMsV0FBWSxTQUFVLFNBRzVCMkwsRUFBUyxDQUVwQmlmLFVBQVcsK0JBR1hoZixRQUFTLCtCQUVUaWYsT0FBUSw2QkFFUkMsTUFBTyxnQ0FLSXBmLEVBQVcsQ0FDdEJxZixTQUFVLElBQ1ZoUyxRQUFTLElBQ1RpUyxNQUFPLElBRVBsUSxTQUFVLElBRVZtUSxRQUFTLElBRVRDLGVBQWdCLElBRWhCQyxjQUFlLEtBRWpCLFNBQVNDLEVBQVNDLEdBQ2hCLE1BQU8sR0FBRzVyQixLQUFLc0ksTUFBTXNqQixNQUN2QixDQUNBLFNBQVNDLEVBQXNCbG9CLEdBQzdCLElBQUtBLEVBQ0gsT0FBTyxFQUVULE1BQU1tb0IsRUFBV25vQixFQUFTLEdBRzFCLE9BQU8zRCxLQUFLc0ksTUFBbUQsSUFBNUMsRUFBSSxHQUFLd2pCLEdBQVksSUFBT0EsRUFBVyxHQUM1RCxDQUNlLFNBQVNyQixFQUFrQnNCLEdBQ3hDLE1BQU1DLEdBQWUsT0FBUyxDQUFDLEVBQUc5ZixFQUFRNmYsRUFBaUI3ZixRQUNyRCtmLEdBQWlCLE9BQVMsQ0FBQyxFQUFHaGdCLEVBQVU4ZixFQUFpQjlmLFVBa0MvRCxPQUFPLE9BQVMsQ0FDZDRmLHdCQUNBOXBCLE9BbkNhLENBQUNuQixFQUFRLENBQUMsT0FBUWdvQixFQUFVLENBQUMsS0FDMUMsTUFDSTNjLFNBQVVpZ0IsRUFBaUJELEVBQWU1USxTQUMxQ25QLE9BQVFpZ0IsRUFBZUgsRUFBYWIsVUFBUyxNQUM3Q3hlLEVBQVEsR0FDTmljLEVBMEJOLE9BekJVLE9BQThCQSxFQUFTcm9CLElBeUJ6QzhVLE1BQU1DLFFBQVExVSxHQUFTQSxFQUFRLENBQUNBLElBQVFxRCxLQUFJbW9CLEdBQWdCLEdBQUdBLEtBQTBDLGlCQUFuQkYsRUFBOEJBLEVBQWlCUCxFQUFTTyxNQUFtQkMsS0FBaUMsaUJBQVZ4ZixFQUFxQkEsRUFBUWdmLEVBQVNoZixPQUFVeEksS0FBSyxJQUFJLEdBS3hQNG5CLEVBQWtCLENBQ25CN2YsT0FBUThmLEVBQ1IvZixTQUFVZ2dCLEdBRWQsQyxrQ0NwRkEsTUFDQSxHQURxQixFLFFBQUEsSSxrQ0NIckIsb0IsZ0RDQ0EsTUFDQSxFQUQ4QmpmLElBQVEsT0FBc0JBLElBQWtCLFlBQVRBLEMsa0NDR3JFLFFBSEEsU0FBK0JBLEdBQzdCLE1BQWdCLGVBQVRBLEdBQWtDLFVBQVRBLEdBQTZCLE9BQVRBLEdBQTBCLE9BQVRBLENBQ3ZFLEMsK0VDS0EsTUFLQSxHQUxlLFFBQWEsQ0FDMUJxWSxRQUFTLElBQ1RnSCxhQUFZLElBQ1poaEIsc0JBQXFCLEssNEVDTFIsU0FBU2loQixJQUN0QixNQUFNbnJCLEdBQVEsT0FBZSxLQUs3QixPQUFPQSxFQUFNLE1BQWFBLENBQzVCLEMsMENDYk8sTUFBTW9yQixFQUFTcFksR0FBUUEsRUFBS3FZLFVBQzVCLFNBQVNDLEVBQW1CN3JCLEVBQU9nb0IsR0FDeEMsSUFBSThELEVBQXVCQyxFQUMzQixNQUFNLFFBQ0pwaUIsRUFBTyxPQUNQMkIsRUFBTSxNQUNOdkQsRUFBUSxDQUFDLEdBQ1AvSCxFQUNKLE1BQU8sQ0FDTHFMLFNBQWdFLE9BQXJEeWdCLEVBQXdCL2pCLEVBQU14QyxvQkFBOEJ1bUIsRUFBMkMsaUJBQVpuaUIsRUFBdUJBLEVBQVVBLEVBQVFxZSxFQUFRdG1CLE9BQVMsRUFDaEs0SixPQUFvRSxPQUEzRHlnQixFQUF3QmhrQixFQUFNaWtCLDBCQUFvQ0QsRUFBMEMsaUJBQVh6Z0IsRUFBc0JBLEVBQU8wYyxFQUFRdG1CLE1BQVE0SixFQUN2SlMsTUFBT2hFLEVBQU1ra0IsZ0JBRWpCLEMsa0NDWkEsUSxRQUF5QixDLGtDQ0F6QixRLFFBQStCLEMsa0NDQS9CLFEsUUFBMkIsQyxrQ0NBM0IsUSxRQUE0QixDLGtDQ0U1QixRLFFBQTRCLEMsa0NDQTVCLFEsUUFBZ0MsQyxrQ0NBaEMsUSxRQUErQixDLGtDQ0EvQixRLFFBQXlCLEMsa0NDQXpCLFEsUUFBZ0MsQyxrR0NDaEMsTUFBTXRzQixFQUFZLENBQUMsWUFBYSxjQUFlLGFBQWMseUJBQTBCLG9CQUFxQiwwQkFDMUc4QyxFQUFhLENBQUMsWUFBYSxRQUFTLGFBQ3BDQyxFQUFhLENBQUMsYUFtQkQsU0FBU3dwQixFQU94QnBzQixFQUFNcXNCLEdBQ0osTUFBTSxVQUNGcHFCLEVBQ0E2RyxZQUFhd2pCLEVBQWtCLFdBQy9CbHNCLEVBQVUsdUJBQ1YrSSxFQUFzQixrQkFDdEJvakIsRUFBaUIsdUJBQ2pCQyxHQUNFSCxFQUNKSSxHQUFxQixPQUE4QkosRUFBWXhzQixJQUU3RHFDLFVBQVd3cUIsRUFBYSxNQUN4QnJxQixFQUFRLENBQ04sQ0FBQ3JDLFFBQU95SSxHQUNULFVBQ0RuRCxFQUFZLENBQ1YsQ0FBQ3RGLFFBQU95SSxJQUVSVSxFQUNKaEgsR0FBUSxPQUE4QmdILEVBQXdCeEcsR0FDMURtRyxFQUFjekcsRUFBTXJDLElBQVNzc0IsRUFJN0JLLEdBQTBCLE9BQXNCcm5CLEVBQVV0RixHQUFPSSxHQUNqRXdzQixHQUFrQixRQUFlLE9BQVMsQ0FDNUMzcUIsYUFDQ3dxQixFQUFvQixDQUNyQnRqQix1QkFBaUMsU0FBVG5KLEVBQWtCbUMsT0FBUXNHLEVBQ2xETSxrQkFBbUI0akIsTUFHbkJ6c0IsT0FDRWdDLFVBQVcycUIsR0FDWixZQUNEQyxHQUNFRixFQUNKRyxHQUFjLE9BQThCSCxFQUFnQjFzQixNQUFPMEMsR0FDL0RaLEdBQU0sT0FBVzhxQixFQUF3QyxNQUEzQkgsT0FBa0MsRUFBU0EsRUFBd0IzcUIsSUFBS3FxQixFQUFXcnFCLEtBQ2pIZ3JCLEVBQWlCVCxFQUFvQkEsRUFBa0JRLEdBQWUsQ0FBQyxFQUN2RUUsR0FBa0IsT0FBUyxDQUFDLEVBQUc3c0IsRUFBWTRzQixHQUMzQ0UsRUFBeUIsU0FBVGx0QixFQUFrQjZzQixHQUFpQkgsRUFBZ0JHLEVBQ25FM3NCLEdBQVEsT0FBaUI0SSxHQUFhLE9BQVMsQ0FBQyxFQUFZLFNBQVQ5SSxJQUFvQjBzQixJQUFrQnJxQixFQUFNckMsSUFBU3dzQixFQUFpQyxTQUFUeHNCLElBQW9CcUMsRUFBTXJDLElBQVN3c0IsRUFBd0JPLEVBQWFHLEdBQWlCLENBQzdOMXFCLEdBQUkwcUIsR0FDSCxDQUNEbHJCLFFBQ0VpckIsR0FJSixPQUhBM1gsT0FBT3lJLEtBQUtpUCxHQUFnQjlMLFNBQVFpTSxXQUMzQmp0QixFQUFNaXRCLEVBQVMsSUFFakIsQ0FBQ3JrQixFQUFhNUksRUFDdkIsQyIsInNvdXJjZXMiOlsid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9nZXRPdmVybGF5QWxwaGEuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUGFwZXIvcGFwZXJDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1BhcGVyL1BhcGVyLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2RlYm91bmNlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL293bmVyV2luZG93LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1BvcG92ZXIvcG9wb3ZlckNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUG9wb3Zlci9Qb3BvdmVyLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1BvcnRhbC9Qb3J0YWwuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU3RhY2svU3RhY2suanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvT3V0bGluZWRJbnB1dC9Ob3RjaGVkT3V0bGluZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9PdXRsaW5lZElucHV0L291dGxpbmVkSW5wdXRDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL091dGxpbmVkSW5wdXQvT3V0bGluZWRJbnB1dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9OYXRpdmVTZWxlY3QvbmF0aXZlU2VsZWN0Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9OYXRpdmVTZWxlY3QvTmF0aXZlU2VsZWN0SW5wdXQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU2VsZWN0L3NlbGVjdENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU2VsZWN0L1NlbGVjdElucHV0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1N2Z0ljb24vc3ZnSWNvbkNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU3ZnSWNvbi9TdmdJY29uLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2ludGVybmFsL3N2Zy1pY29ucy9BcnJvd0Ryb3BEb3duLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2NyZWF0ZVN2Z0ljb24uanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU2VsZWN0L1NlbGVjdC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9UZXh0RmllbGQvdGV4dEZpZWxkQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9UZXh0RmllbGQvVGV4dEZpZWxkLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1RleHRhcmVhQXV0b3NpemUvVGV4dGFyZWFBdXRvc2l6ZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Ub29sYmFyL3Rvb2xiYXJDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1Rvb2xiYXIvVG9vbGJhci5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9UeXBvZ3JhcGh5L3R5cG9ncmFwaHlDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1R5cG9ncmFwaHkvVHlwb2dyYXBoeS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9VbnN0YWJsZV9UcmFwRm9jdXMvRm9jdXNUcmFwLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9UaGVtZVByb3ZpZGVyLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9jb21tb24uanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2dyZXkuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL3B1cnBsZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvcmVkLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9vcmFuZ2UuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2JsdWUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2xpZ2h0Qmx1ZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvZ3JlZW4uanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2NyZWF0ZVBhbGV0dGUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2NyZWF0ZVR5cG9ncmFwaHkuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3NoYWRvd3MuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3pJbmRleC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlVGhlbWUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2NyZWF0ZU1peGlucy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlVHJhbnNpdGlvbnMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2RlZmF1bHRUaGVtZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvaWRlbnRpZmllci5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvcm9vdFNob3VsZEZvcndhcmRQcm9wLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9zbG90U2hvdWxkRm9yd2FyZFByb3AuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3N0eWxlZC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvdXNlVGhlbWUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdHJhbnNpdGlvbnMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvY2FwaXRhbGl6ZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9nZXRTY3JvbGxiYXJTaXplLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2lzTXVpRWxlbWVudC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9vd25lckRvY3VtZW50LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3VzZUNvbnRyb2xsZWQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlRW5oYW5jZWRFZmZlY3QuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlRXZlbnRDYWxsYmFjay5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VGb3JrUmVmLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3VzZUlzRm9jdXNWaXNpYmxlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3VzZVNsb3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL21hdGVyaWFsLWNvbXBvbmVudHMvbWF0ZXJpYWwtY29tcG9uZW50cy1pb3MvYmxvYi9iY2EzNjEwNzQwNTU5NGQ1YjdiMTYyNjVhNWIwZWQ2OThmODVhNWVlL2NvbXBvbmVudHMvRWxldmF0aW9uL3NyYy9VSUNvbG9yJTJCTWF0ZXJpYWxFbGV2YXRpb24ubSNMNjFcbmNvbnN0IGdldE92ZXJsYXlBbHBoYSA9IGVsZXZhdGlvbiA9PiB7XG4gIGxldCBhbHBoYVZhbHVlO1xuICBpZiAoZWxldmF0aW9uIDwgMSkge1xuICAgIGFscGhhVmFsdWUgPSA1LjExOTE2ICogZWxldmF0aW9uICoqIDI7XG4gIH0gZWxzZSB7XG4gICAgYWxwaGFWYWx1ZSA9IDQuNSAqIE1hdGgubG9nKGVsZXZhdGlvbiArIDEpICsgMjtcbiAgfVxuICByZXR1cm4gKGFscGhhVmFsdWUgLyAxMDApLnRvRml4ZWQoMik7XG59O1xuZXhwb3J0IGRlZmF1bHQgZ2V0T3ZlcmxheUFscGhhOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFwZXJVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVBhcGVyJywgc2xvdCk7XG59XG5jb25zdCBwYXBlckNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlQYXBlcicsIFsncm9vdCcsICdyb3VuZGVkJywgJ291dGxpbmVkJywgJ2VsZXZhdGlvbicsICdlbGV2YXRpb24wJywgJ2VsZXZhdGlvbjEnLCAnZWxldmF0aW9uMicsICdlbGV2YXRpb24zJywgJ2VsZXZhdGlvbjQnLCAnZWxldmF0aW9uNScsICdlbGV2YXRpb242JywgJ2VsZXZhdGlvbjcnLCAnZWxldmF0aW9uOCcsICdlbGV2YXRpb245JywgJ2VsZXZhdGlvbjEwJywgJ2VsZXZhdGlvbjExJywgJ2VsZXZhdGlvbjEyJywgJ2VsZXZhdGlvbjEzJywgJ2VsZXZhdGlvbjE0JywgJ2VsZXZhdGlvbjE1JywgJ2VsZXZhdGlvbjE2JywgJ2VsZXZhdGlvbjE3JywgJ2VsZXZhdGlvbjE4JywgJ2VsZXZhdGlvbjE5JywgJ2VsZXZhdGlvbjIwJywgJ2VsZXZhdGlvbjIxJywgJ2VsZXZhdGlvbjIyJywgJ2VsZXZhdGlvbjIzJywgJ2VsZXZhdGlvbjI0J10pO1xuZXhwb3J0IGRlZmF1bHQgcGFwZXJDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImVsZXZhdGlvblwiLCBcInNxdWFyZVwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgaW50ZWdlclByb3BUeXBlIGZyb20gJ0BtdWkvdXRpbHMvaW50ZWdlclByb3BUeXBlJztcbmltcG9ydCBjaGFpblByb3BUeXBlcyBmcm9tICdAbXVpL3V0aWxzL2NoYWluUHJvcFR5cGVzJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IGFscGhhIH0gZnJvbSAnQG11aS9zeXN0ZW0vY29sb3JNYW5pcHVsYXRvcic7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IGdldE92ZXJsYXlBbHBoYSBmcm9tICcuLi9zdHlsZXMvZ2V0T3ZlcmxheUFscGhhJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWUnO1xuaW1wb3J0IHsgZ2V0UGFwZXJVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3BhcGVyQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIHNxdWFyZSxcbiAgICBlbGV2YXRpb24sXG4gICAgdmFyaWFudCxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCB2YXJpYW50LCAhc3F1YXJlICYmICdyb3VuZGVkJywgdmFyaWFudCA9PT0gJ2VsZXZhdGlvbicgJiYgYGVsZXZhdGlvbiR7ZWxldmF0aW9ufWBdXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0UGFwZXJVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IFBhcGVyUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpUGFwZXInLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF0sICFvd25lclN0YXRlLnNxdWFyZSAmJiBzdHlsZXMucm91bmRlZCwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZWxldmF0aW9uJyAmJiBzdHlsZXNbYGVsZXZhdGlvbiR7b3duZXJTdGF0ZS5lbGV2YXRpb259YF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICB2YXIgX3RoZW1lJHZhcnMkb3ZlcmxheXM7XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5iYWNrZ3JvdW5kLnBhcGVyLFxuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnByaW1hcnksXG4gICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdib3gtc2hhZG93JylcbiAgfSwgIW93bmVyU3RhdGUuc3F1YXJlICYmIHtcbiAgICBib3JkZXJSYWRpdXM6IHRoZW1lLnNoYXBlLmJvcmRlclJhZGl1c1xuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICAgIGJvcmRlcjogYDFweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmRpdmlkZXJ9YFxuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdlbGV2YXRpb24nICYmIF9leHRlbmRzKHtcbiAgICBib3hTaGFkb3c6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFkb3dzW293bmVyU3RhdGUuZWxldmF0aW9uXVxuICB9LCAhdGhlbWUudmFycyAmJiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdkYXJrJyAmJiB7XG4gICAgYmFja2dyb3VuZEltYWdlOiBgbGluZWFyLWdyYWRpZW50KCR7YWxwaGEoJyNmZmYnLCBnZXRPdmVybGF5QWxwaGEob3duZXJTdGF0ZS5lbGV2YXRpb24pKX0sICR7YWxwaGEoJyNmZmYnLCBnZXRPdmVybGF5QWxwaGEob3duZXJTdGF0ZS5lbGV2YXRpb24pKX0pYFxuICB9LCB0aGVtZS52YXJzICYmIHtcbiAgICBiYWNrZ3JvdW5kSW1hZ2U6IChfdGhlbWUkdmFycyRvdmVybGF5cyA9IHRoZW1lLnZhcnMub3ZlcmxheXMpID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdmFycyRvdmVybGF5c1tvd25lclN0YXRlLmVsZXZhdGlvbl1cbiAgfSkpO1xufSk7XG5jb25zdCBQYXBlciA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFBhcGVyKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVBhcGVyJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ2RpdicsXG4gICAgICBlbGV2YXRpb24gPSAxLFxuICAgICAgc3F1YXJlID0gZmFsc2UsXG4gICAgICB2YXJpYW50ID0gJ2VsZXZhdGlvbidcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbXBvbmVudCxcbiAgICBlbGV2YXRpb24sXG4gICAgc3F1YXJlLFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gICAgaWYgKHRoZW1lLnNoYWRvd3NbZWxldmF0aW9uXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgZWxldmF0aW9uIHByb3ZpZGVkIDxQYXBlciBlbGV2YXRpb249eyR7ZWxldmF0aW9ufX0+IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHRoZW1lLmAsIGBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgXFxgdGhlbWUuc2hhZG93c1ske2VsZXZhdGlvbn1dXFxgIGlzIGRlZmluZWQuYF0uam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUGFwZXJSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IGNvbXBvbmVudCxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gUGFwZXIucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFNoYWRvdyBkZXB0aCwgY29ycmVzcG9uZHMgdG8gYGRwYCBpbiB0aGUgc3BlYy5cbiAgICogSXQgYWNjZXB0cyB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNCBpbmNsdXNpdmUuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIGVsZXZhdGlvbjogY2hhaW5Qcm9wVHlwZXMoaW50ZWdlclByb3BUeXBlLCBwcm9wcyA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZWxldmF0aW9uLFxuICAgICAgdmFyaWFudFxuICAgIH0gPSBwcm9wcztcbiAgICBpZiAoZWxldmF0aW9uID4gMCAmJiB2YXJpYW50ID09PSAnb3V0bGluZWQnKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKGBNVUk6IENvbWJpbmluZyBcXGBlbGV2YXRpb249eyR7ZWxldmF0aW9ufX1cXGAgd2l0aCBcXGB2YXJpYW50PVwiJHt2YXJpYW50fVwiXFxgIGhhcyBubyBlZmZlY3QuIEVpdGhlciB1c2UgXFxgZWxldmF0aW9uPXswfVxcYCBvciB1c2UgYSBkaWZmZXJlbnQgXFxgdmFyaWFudFxcYC5gKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCByb3VuZGVkIGNvcm5lcnMgYXJlIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc3F1YXJlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgJ2VsZXZhdGlvbidcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnZWxldmF0aW9uJywgJ291dGxpbmVkJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBQYXBlcjsiLCJpbXBvcnQgZGVib3VuY2UgZnJvbSAnQG11aS91dGlscy9kZWJvdW5jZSc7XG5leHBvcnQgZGVmYXVsdCBkZWJvdW5jZTsiLCJpbXBvcnQgb3duZXJXaW5kb3cgZnJvbSAnQG11aS91dGlscy9vd25lcldpbmRvdyc7XG5leHBvcnQgZGVmYXVsdCBvd25lcldpbmRvdzsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBvcG92ZXJVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVBvcG92ZXInLCBzbG90KTtcbn1cbmNvbnN0IHBvcG92ZXJDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpUG9wb3ZlcicsIFsncm9vdCcsICdwYXBlciddKTtcbmV4cG9ydCBkZWZhdWx0IHBvcG92ZXJDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm9uRW50ZXJpbmdcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJhY3Rpb25cIiwgXCJhbmNob3JFbFwiLCBcImFuY2hvck9yaWdpblwiLCBcImFuY2hvclBvc2l0aW9uXCIsIFwiYW5jaG9yUmVmZXJlbmNlXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb250YWluZXJcIiwgXCJlbGV2YXRpb25cIiwgXCJtYXJnaW5UaHJlc2hvbGRcIiwgXCJvcGVuXCIsIFwiUGFwZXJQcm9wc1wiLCBcInNsb3RzXCIsIFwic2xvdFByb3BzXCIsIFwidHJhbnNmb3JtT3JpZ2luXCIsIFwiVHJhbnNpdGlvbkNvbXBvbmVudFwiLCBcInRyYW5zaXRpb25EdXJhdGlvblwiLCBcIlRyYW5zaXRpb25Qcm9wc1wiLCBcImRpc2FibGVTY3JvbGxMb2NrXCJdLFxuICBfZXhjbHVkZWQzID0gW1wic2xvdFByb3BzXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IEhUTUxFbGVtZW50VHlwZSBmcm9tICdAbXVpL3V0aWxzL0hUTUxFbGVtZW50VHlwZSc7XG5pbXBvcnQgcmVmVHlwZSBmcm9tICdAbXVpL3V0aWxzL3JlZlR5cGUnO1xuaW1wb3J0IGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmIGZyb20gJ0BtdWkvdXRpbHMvZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYnO1xuaW1wb3J0IGludGVnZXJQcm9wVHlwZSBmcm9tICdAbXVpL3V0aWxzL2ludGVnZXJQcm9wVHlwZSc7XG5pbXBvcnQgY2hhaW5Qcm9wVHlwZXMgZnJvbSAnQG11aS91dGlscy9jaGFpblByb3BUeXBlcyc7XG5pbXBvcnQgdXNlU2xvdFByb3BzIGZyb20gJ0BtdWkvdXRpbHMvdXNlU2xvdFByb3BzJztcbmltcG9ydCBpc0hvc3RDb21wb25lbnQgZnJvbSAnQG11aS91dGlscy9pc0hvc3RDb21wb25lbnQnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBkZWJvdW5jZSBmcm9tICcuLi91dGlscy9kZWJvdW5jZSc7XG5pbXBvcnQgb3duZXJEb2N1bWVudCBmcm9tICcuLi91dGlscy9vd25lckRvY3VtZW50JztcbmltcG9ydCBvd25lcldpbmRvdyBmcm9tICcuLi91dGlscy9vd25lcldpbmRvdyc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCBHcm93IGZyb20gJy4uL0dyb3cnO1xuaW1wb3J0IE1vZGFsIGZyb20gJy4uL01vZGFsJztcbmltcG9ydCBQYXBlckJhc2UgZnJvbSAnLi4vUGFwZXInO1xuaW1wb3J0IHsgZ2V0UG9wb3ZlclV0aWxpdHlDbGFzcyB9IGZyb20gJy4vcG9wb3ZlckNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBmdW5jdGlvbiBnZXRPZmZzZXRUb3AocmVjdCwgdmVydGljYWwpIHtcbiAgbGV0IG9mZnNldCA9IDA7XG4gIGlmICh0eXBlb2YgdmVydGljYWwgPT09ICdudW1iZXInKSB7XG4gICAgb2Zmc2V0ID0gdmVydGljYWw7XG4gIH0gZWxzZSBpZiAodmVydGljYWwgPT09ICdjZW50ZXInKSB7XG4gICAgb2Zmc2V0ID0gcmVjdC5oZWlnaHQgLyAyO1xuICB9IGVsc2UgaWYgKHZlcnRpY2FsID09PSAnYm90dG9tJykge1xuICAgIG9mZnNldCA9IHJlY3QuaGVpZ2h0O1xuICB9XG4gIHJldHVybiBvZmZzZXQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0T2Zmc2V0TGVmdChyZWN0LCBob3Jpem9udGFsKSB7XG4gIGxldCBvZmZzZXQgPSAwO1xuICBpZiAodHlwZW9mIGhvcml6b250YWwgPT09ICdudW1iZXInKSB7XG4gICAgb2Zmc2V0ID0gaG9yaXpvbnRhbDtcbiAgfSBlbHNlIGlmIChob3Jpem9udGFsID09PSAnY2VudGVyJykge1xuICAgIG9mZnNldCA9IHJlY3Qud2lkdGggLyAyO1xuICB9IGVsc2UgaWYgKGhvcml6b250YWwgPT09ICdyaWdodCcpIHtcbiAgICBvZmZzZXQgPSByZWN0LndpZHRoO1xuICB9XG4gIHJldHVybiBvZmZzZXQ7XG59XG5mdW5jdGlvbiBnZXRUcmFuc2Zvcm1PcmlnaW5WYWx1ZSh0cmFuc2Zvcm1PcmlnaW4pIHtcbiAgcmV0dXJuIFt0cmFuc2Zvcm1PcmlnaW4uaG9yaXpvbnRhbCwgdHJhbnNmb3JtT3JpZ2luLnZlcnRpY2FsXS5tYXAobiA9PiB0eXBlb2YgbiA9PT0gJ251bWJlcicgPyBgJHtufXB4YCA6IG4pLmpvaW4oJyAnKTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVBbmNob3JFbChhbmNob3JFbCkge1xuICByZXR1cm4gdHlwZW9mIGFuY2hvckVsID09PSAnZnVuY3Rpb24nID8gYW5jaG9yRWwoKSA6IGFuY2hvckVsO1xufVxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCddLFxuICAgIHBhcGVyOiBbJ3BhcGVyJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRQb3BvdmVyVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5leHBvcnQgY29uc3QgUG9wb3ZlclJvb3QgPSBzdHlsZWQoTW9kYWwsIHtcbiAgbmFtZTogJ011aVBvcG92ZXInLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnJvb3Rcbn0pKHt9KTtcbmV4cG9ydCBjb25zdCBQb3BvdmVyUGFwZXIgPSBzdHlsZWQoUGFwZXJCYXNlLCB7XG4gIG5hbWU6ICdNdWlQb3BvdmVyJyxcbiAgc2xvdDogJ1BhcGVyJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucGFwZXJcbn0pKHtcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIG92ZXJmbG93WTogJ2F1dG8nLFxuICBvdmVyZmxvd1g6ICdoaWRkZW4nLFxuICAvLyBTbyB3ZSBzZWUgdGhlIHBvcG92ZXIgd2hlbiBpdCdzIGVtcHR5LlxuICAvLyBJdCdzIG1vc3QgbGlrZWx5IG9uIGlzc3VlIG9uIHVzZXJsYW5kLlxuICBtaW5XaWR0aDogMTYsXG4gIG1pbkhlaWdodDogMTYsXG4gIG1heFdpZHRoOiAnY2FsYygxMDAlIC0gMzJweCknLFxuICBtYXhIZWlnaHQ6ICdjYWxjKDEwMCUgLSAzMnB4KScsXG4gIC8vIFdlIGRpc2FibGUgdGhlIGZvY3VzIHJpbmcgZm9yIG1vdXNlLCB0b3VjaCBhbmQga2V5Ym9hcmQgdXNlcnMuXG4gIG91dGxpbmU6IDBcbn0pO1xuY29uc3QgUG9wb3ZlciA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFBvcG92ZXIoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfc2xvdFByb3BzJHBhcGVyLCBfc2xvdHMkcm9vdCwgX3Nsb3RzJHBhcGVyO1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVBvcG92ZXInXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhY3Rpb24sXG4gICAgICBhbmNob3JFbCxcbiAgICAgIGFuY2hvck9yaWdpbiA9IHtcbiAgICAgICAgdmVydGljYWw6ICd0b3AnLFxuICAgICAgICBob3Jpem9udGFsOiAnbGVmdCdcbiAgICAgIH0sXG4gICAgICBhbmNob3JQb3NpdGlvbixcbiAgICAgIGFuY2hvclJlZmVyZW5jZSA9ICdhbmNob3JFbCcsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyUHJvcCxcbiAgICAgIGVsZXZhdGlvbiA9IDgsXG4gICAgICBtYXJnaW5UaHJlc2hvbGQgPSAxNixcbiAgICAgIG9wZW4sXG4gICAgICBQYXBlclByb3BzOiBQYXBlclByb3BzUHJvcCA9IHt9LFxuICAgICAgc2xvdHMsXG4gICAgICBzbG90UHJvcHMsXG4gICAgICB0cmFuc2Zvcm1PcmlnaW4gPSB7XG4gICAgICAgIHZlcnRpY2FsOiAndG9wJyxcbiAgICAgICAgaG9yaXpvbnRhbDogJ2xlZnQnXG4gICAgICB9LFxuICAgICAgVHJhbnNpdGlvbkNvbXBvbmVudCA9IEdyb3csXG4gICAgICB0cmFuc2l0aW9uRHVyYXRpb246IHRyYW5zaXRpb25EdXJhdGlvblByb3AgPSAnYXV0bycsXG4gICAgICBUcmFuc2l0aW9uUHJvcHM6IHtcbiAgICAgICAgb25FbnRlcmluZ1xuICAgICAgfSA9IHt9LFxuICAgICAgZGlzYWJsZVNjcm9sbExvY2sgPSBmYWxzZVxuICAgIH0gPSBwcm9wcyxcbiAgICBUcmFuc2l0aW9uUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcy5UcmFuc2l0aW9uUHJvcHMsIF9leGNsdWRlZCksXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkMik7XG4gIGNvbnN0IGV4dGVybmFsUGFwZXJTbG90UHJvcHMgPSAoX3Nsb3RQcm9wcyRwYXBlciA9IHNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogc2xvdFByb3BzLnBhcGVyKSAhPSBudWxsID8gX3Nsb3RQcm9wcyRwYXBlciA6IFBhcGVyUHJvcHNQcm9wO1xuICBjb25zdCBwYXBlclJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICBjb25zdCBoYW5kbGVQYXBlclJlZiA9IHVzZUZvcmtSZWYocGFwZXJSZWYsIGV4dGVybmFsUGFwZXJTbG90UHJvcHMucmVmKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGFuY2hvck9yaWdpbixcbiAgICBhbmNob3JSZWZlcmVuY2UsXG4gICAgZWxldmF0aW9uLFxuICAgIG1hcmdpblRocmVzaG9sZCxcbiAgICBleHRlcm5hbFBhcGVyU2xvdFByb3BzLFxuICAgIHRyYW5zZm9ybU9yaWdpbixcbiAgICBUcmFuc2l0aW9uQ29tcG9uZW50LFxuICAgIHRyYW5zaXRpb25EdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uUHJvcCxcbiAgICBUcmFuc2l0aW9uUHJvcHNcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcblxuICAvLyBSZXR1cm5zIHRoZSB0b3AvbGVmdCBvZmZzZXQgb2YgdGhlIHBvc2l0aW9uXG4gIC8vIHRvIGF0dGFjaCB0byBvbiB0aGUgYW5jaG9yIGVsZW1lbnQgKG9yIGJvZHkgaWYgbm9uZSBpcyBwcm92aWRlZClcbiAgY29uc3QgZ2V0QW5jaG9yT2Zmc2V0ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChhbmNob3JSZWZlcmVuY2UgPT09ICdhbmNob3JQb3NpdGlvbicpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICghYW5jaG9yUG9zaXRpb24pIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IFlvdSBuZWVkIHRvIHByb3ZpZGUgYSBgYW5jaG9yUG9zaXRpb25gIHByb3Agd2hlbiB1c2luZyAnICsgJzxQb3BvdmVyIGFuY2hvclJlZmVyZW5jZT1cImFuY2hvclBvc2l0aW9uXCIgLz4uJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhbmNob3JQb3NpdGlvbjtcbiAgICB9XG4gICAgY29uc3QgcmVzb2x2ZWRBbmNob3JFbCA9IHJlc29sdmVBbmNob3JFbChhbmNob3JFbCk7XG5cbiAgICAvLyBJZiBhbiBhbmNob3IgZWxlbWVudCB3YXNuJ3QgcHJvdmlkZWQsIGp1c3QgdXNlIHRoZSBwYXJlbnQgYm9keSBlbGVtZW50IG9mIHRoaXMgUG9wb3ZlclxuICAgIGNvbnN0IGFuY2hvckVsZW1lbnQgPSByZXNvbHZlZEFuY2hvckVsICYmIHJlc29sdmVkQW5jaG9yRWwubm9kZVR5cGUgPT09IDEgPyByZXNvbHZlZEFuY2hvckVsIDogb3duZXJEb2N1bWVudChwYXBlclJlZi5jdXJyZW50KS5ib2R5O1xuICAgIGNvbnN0IGFuY2hvclJlY3QgPSBhbmNob3JFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zdCBib3ggPSBhbmNob3JFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAndGVzdCcgJiYgYm94LnRvcCA9PT0gMCAmJiBib3gubGVmdCA9PT0gMCAmJiBib3gucmlnaHQgPT09IDAgJiYgYm94LmJvdHRvbSA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLndhcm4oWydNVUk6IFRoZSBgYW5jaG9yRWxgIHByb3AgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudCBpcyBpbnZhbGlkLicsICdUaGUgYW5jaG9yIGVsZW1lbnQgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIGRvY3VtZW50IGxheW91dC4nLCBcIk1ha2Ugc3VyZSB0aGUgZWxlbWVudCBpcyBwcmVzZW50IGluIHRoZSBkb2N1bWVudCBvciB0aGF0IGl0J3Mgbm90IGRpc3BsYXkgbm9uZS5cIl0uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdG9wOiBhbmNob3JSZWN0LnRvcCArIGdldE9mZnNldFRvcChhbmNob3JSZWN0LCBhbmNob3JPcmlnaW4udmVydGljYWwpLFxuICAgICAgbGVmdDogYW5jaG9yUmVjdC5sZWZ0ICsgZ2V0T2Zmc2V0TGVmdChhbmNob3JSZWN0LCBhbmNob3JPcmlnaW4uaG9yaXpvbnRhbClcbiAgICB9O1xuICB9LCBbYW5jaG9yRWwsIGFuY2hvck9yaWdpbi5ob3Jpem9udGFsLCBhbmNob3JPcmlnaW4udmVydGljYWwsIGFuY2hvclBvc2l0aW9uLCBhbmNob3JSZWZlcmVuY2VdKTtcblxuICAvLyBSZXR1cm5zIHRoZSBiYXNlIHRyYW5zZm9ybSBvcmlnaW4gdXNpbmcgdGhlIGVsZW1lbnRcbiAgY29uc3QgZ2V0VHJhbnNmb3JtT3JpZ2luID0gUmVhY3QudXNlQ2FsbGJhY2soZWxlbVJlY3QgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICB2ZXJ0aWNhbDogZ2V0T2Zmc2V0VG9wKGVsZW1SZWN0LCB0cmFuc2Zvcm1PcmlnaW4udmVydGljYWwpLFxuICAgICAgaG9yaXpvbnRhbDogZ2V0T2Zmc2V0TGVmdChlbGVtUmVjdCwgdHJhbnNmb3JtT3JpZ2luLmhvcml6b250YWwpXG4gICAgfTtcbiAgfSwgW3RyYW5zZm9ybU9yaWdpbi5ob3Jpem9udGFsLCB0cmFuc2Zvcm1PcmlnaW4udmVydGljYWxdKTtcbiAgY29uc3QgZ2V0UG9zaXRpb25pbmdTdHlsZSA9IFJlYWN0LnVzZUNhbGxiYWNrKGVsZW1lbnQgPT4ge1xuICAgIGNvbnN0IGVsZW1SZWN0ID0ge1xuICAgICAgd2lkdGg6IGVsZW1lbnQub2Zmc2V0V2lkdGgsXG4gICAgICBoZWlnaHQ6IGVsZW1lbnQub2Zmc2V0SGVpZ2h0XG4gICAgfTtcblxuICAgIC8vIEdldCB0aGUgdHJhbnNmb3JtIG9yaWdpbiBwb2ludCBvbiB0aGUgZWxlbWVudCBpdHNlbGZcbiAgICBjb25zdCBlbGVtVHJhbnNmb3JtT3JpZ2luID0gZ2V0VHJhbnNmb3JtT3JpZ2luKGVsZW1SZWN0KTtcbiAgICBpZiAoYW5jaG9yUmVmZXJlbmNlID09PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvcDogbnVsbCxcbiAgICAgICAgbGVmdDogbnVsbCxcbiAgICAgICAgdHJhbnNmb3JtT3JpZ2luOiBnZXRUcmFuc2Zvcm1PcmlnaW5WYWx1ZShlbGVtVHJhbnNmb3JtT3JpZ2luKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIG9mZnNldCBvZiB0aGUgYW5jaG9yaW5nIGVsZW1lbnRcbiAgICBjb25zdCBhbmNob3JPZmZzZXQgPSBnZXRBbmNob3JPZmZzZXQoKTtcblxuICAgIC8vIENhbGN1bGF0ZSBlbGVtZW50IHBvc2l0aW9uaW5nXG4gICAgbGV0IHRvcCA9IGFuY2hvck9mZnNldC50b3AgLSBlbGVtVHJhbnNmb3JtT3JpZ2luLnZlcnRpY2FsO1xuICAgIGxldCBsZWZ0ID0gYW5jaG9yT2Zmc2V0LmxlZnQgLSBlbGVtVHJhbnNmb3JtT3JpZ2luLmhvcml6b250YWw7XG4gICAgY29uc3QgYm90dG9tID0gdG9wICsgZWxlbVJlY3QuaGVpZ2h0O1xuICAgIGNvbnN0IHJpZ2h0ID0gbGVmdCArIGVsZW1SZWN0LndpZHRoO1xuXG4gICAgLy8gVXNlIHRoZSBwYXJlbnQgd2luZG93IG9mIHRoZSBhbmNob3JFbCBpZiBwcm92aWRlZFxuICAgIGNvbnN0IGNvbnRhaW5lcldpbmRvdyA9IG93bmVyV2luZG93KHJlc29sdmVBbmNob3JFbChhbmNob3JFbCkpO1xuXG4gICAgLy8gV2luZG93IHRocmVzaG9sZHMgdGFraW5nIHJlcXVpcmVkIG1hcmdpbiBpbnRvIGFjY291bnRcbiAgICBjb25zdCBoZWlnaHRUaHJlc2hvbGQgPSBjb250YWluZXJXaW5kb3cuaW5uZXJIZWlnaHQgLSBtYXJnaW5UaHJlc2hvbGQ7XG4gICAgY29uc3Qgd2lkdGhUaHJlc2hvbGQgPSBjb250YWluZXJXaW5kb3cuaW5uZXJXaWR0aCAtIG1hcmdpblRocmVzaG9sZDtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB2ZXJ0aWNhbCBheGlzIG5lZWRzIHNoaWZ0aW5nXG4gICAgaWYgKG1hcmdpblRocmVzaG9sZCAhPT0gbnVsbCAmJiB0b3AgPCBtYXJnaW5UaHJlc2hvbGQpIHtcbiAgICAgIGNvbnN0IGRpZmYgPSB0b3AgLSBtYXJnaW5UaHJlc2hvbGQ7XG4gICAgICB0b3AgLT0gZGlmZjtcbiAgICAgIGVsZW1UcmFuc2Zvcm1PcmlnaW4udmVydGljYWwgKz0gZGlmZjtcbiAgICB9IGVsc2UgaWYgKG1hcmdpblRocmVzaG9sZCAhPT0gbnVsbCAmJiBib3R0b20gPiBoZWlnaHRUaHJlc2hvbGQpIHtcbiAgICAgIGNvbnN0IGRpZmYgPSBib3R0b20gLSBoZWlnaHRUaHJlc2hvbGQ7XG4gICAgICB0b3AgLT0gZGlmZjtcbiAgICAgIGVsZW1UcmFuc2Zvcm1PcmlnaW4udmVydGljYWwgKz0gZGlmZjtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChlbGVtUmVjdC5oZWlnaHQgPiBoZWlnaHRUaHJlc2hvbGQgJiYgZWxlbVJlY3QuaGVpZ2h0ICYmIGhlaWdodFRocmVzaG9sZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBUaGUgcG9wb3ZlciBjb21wb25lbnQgaXMgdG9vIHRhbGwuJywgYFNvbWUgcGFydCBvZiBpdCBjYW4gbm90IGJlIHNlZW4gb24gdGhlIHNjcmVlbiAoJHtlbGVtUmVjdC5oZWlnaHQgLSBoZWlnaHRUaHJlc2hvbGR9cHgpLmAsICdQbGVhc2UgY29uc2lkZXIgYWRkaW5nIGEgYG1heC1oZWlnaHRgIHRvIGltcHJvdmUgdGhlIHVzZXItZXhwZXJpZW5jZS4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGhvcml6b250YWwgYXhpcyBuZWVkcyBzaGlmdGluZ1xuICAgIGlmIChtYXJnaW5UaHJlc2hvbGQgIT09IG51bGwgJiYgbGVmdCA8IG1hcmdpblRocmVzaG9sZCkge1xuICAgICAgY29uc3QgZGlmZiA9IGxlZnQgLSBtYXJnaW5UaHJlc2hvbGQ7XG4gICAgICBsZWZ0IC09IGRpZmY7XG4gICAgICBlbGVtVHJhbnNmb3JtT3JpZ2luLmhvcml6b250YWwgKz0gZGlmZjtcbiAgICB9IGVsc2UgaWYgKHJpZ2h0ID4gd2lkdGhUaHJlc2hvbGQpIHtcbiAgICAgIGNvbnN0IGRpZmYgPSByaWdodCAtIHdpZHRoVGhyZXNob2xkO1xuICAgICAgbGVmdCAtPSBkaWZmO1xuICAgICAgZWxlbVRyYW5zZm9ybU9yaWdpbi5ob3Jpem9udGFsICs9IGRpZmY7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0b3A6IGAke01hdGgucm91bmQodG9wKX1weGAsXG4gICAgICBsZWZ0OiBgJHtNYXRoLnJvdW5kKGxlZnQpfXB4YCxcbiAgICAgIHRyYW5zZm9ybU9yaWdpbjogZ2V0VHJhbnNmb3JtT3JpZ2luVmFsdWUoZWxlbVRyYW5zZm9ybU9yaWdpbilcbiAgICB9O1xuICB9LCBbYW5jaG9yRWwsIGFuY2hvclJlZmVyZW5jZSwgZ2V0QW5jaG9yT2Zmc2V0LCBnZXRUcmFuc2Zvcm1PcmlnaW4sIG1hcmdpblRocmVzaG9sZF0pO1xuICBjb25zdCBbaXNQb3NpdGlvbmVkLCBzZXRJc1Bvc2l0aW9uZWRdID0gUmVhY3QudXNlU3RhdGUob3Blbik7XG4gIGNvbnN0IHNldFBvc2l0aW9uaW5nU3R5bGVzID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBwYXBlclJlZi5jdXJyZW50O1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwb3NpdGlvbmluZyA9IGdldFBvc2l0aW9uaW5nU3R5bGUoZWxlbWVudCk7XG4gICAgaWYgKHBvc2l0aW9uaW5nLnRvcCAhPT0gbnVsbCkge1xuICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBwb3NpdGlvbmluZy50b3A7XG4gICAgfVxuICAgIGlmIChwb3NpdGlvbmluZy5sZWZ0ICE9PSBudWxsKSB7XG4gICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBwb3NpdGlvbmluZy5sZWZ0O1xuICAgIH1cbiAgICBlbGVtZW50LnN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9IHBvc2l0aW9uaW5nLnRyYW5zZm9ybU9yaWdpbjtcbiAgICBzZXRJc1Bvc2l0aW9uZWQodHJ1ZSk7XG4gIH0sIFtnZXRQb3NpdGlvbmluZ1N0eWxlXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRpc2FibGVTY3JvbGxMb2NrKSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgc2V0UG9zaXRpb25pbmdTdHlsZXMpO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHNldFBvc2l0aW9uaW5nU3R5bGVzKTtcbiAgfSwgW2FuY2hvckVsLCBkaXNhYmxlU2Nyb2xsTG9jaywgc2V0UG9zaXRpb25pbmdTdHlsZXNdKTtcbiAgY29uc3QgaGFuZGxlRW50ZXJpbmcgPSAoZWxlbWVudCwgaXNBcHBlYXJpbmcpID0+IHtcbiAgICBpZiAob25FbnRlcmluZykge1xuICAgICAgb25FbnRlcmluZyhlbGVtZW50LCBpc0FwcGVhcmluZyk7XG4gICAgfVxuICAgIHNldFBvc2l0aW9uaW5nU3R5bGVzKCk7XG4gIH07XG4gIGNvbnN0IGhhbmRsZUV4aXRlZCA9ICgpID0+IHtcbiAgICBzZXRJc1Bvc2l0aW9uZWQoZmFsc2UpO1xuICB9O1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcGVuKSB7XG4gICAgICBzZXRQb3NpdGlvbmluZ1N0eWxlcygpO1xuICAgIH1cbiAgfSk7XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUoYWN0aW9uLCAoKSA9PiBvcGVuID8ge1xuICAgIHVwZGF0ZVBvc2l0aW9uOiAoKSA9PiB7XG4gICAgICBzZXRQb3NpdGlvbmluZ1N0eWxlcygpO1xuICAgIH1cbiAgfSA6IG51bGwsIFtvcGVuLCBzZXRQb3NpdGlvbmluZ1N0eWxlc10pO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghb3Blbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgaGFuZGxlUmVzaXplID0gZGVib3VuY2UoKCkgPT4ge1xuICAgICAgc2V0UG9zaXRpb25pbmdTdHlsZXMoKTtcbiAgICB9KTtcbiAgICBjb25zdCBjb250YWluZXJXaW5kb3cgPSBvd25lcldpbmRvdyhhbmNob3JFbCk7XG4gICAgY29udGFpbmVyV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGhhbmRsZVJlc2l6ZS5jbGVhcigpO1xuICAgICAgY29udGFpbmVyV2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7XG4gICAgfTtcbiAgfSwgW2FuY2hvckVsLCBvcGVuLCBzZXRQb3NpdGlvbmluZ1N0eWxlc10pO1xuICBsZXQgdHJhbnNpdGlvbkR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uUHJvcDtcbiAgaWYgKHRyYW5zaXRpb25EdXJhdGlvblByb3AgPT09ICdhdXRvJyAmJiAhVHJhbnNpdGlvbkNvbXBvbmVudC5tdWlTdXBwb3J0QXV0bykge1xuICAgIHRyYW5zaXRpb25EdXJhdGlvbiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIElmIHRoZSBjb250YWluZXIgcHJvcCBpcyBwcm92aWRlZCwgdXNlIHRoYXRcbiAgLy8gSWYgdGhlIGFuY2hvckVsIHByb3AgaXMgcHJvdmlkZWQsIHVzZSBpdHMgcGFyZW50IGJvZHkgZWxlbWVudCBhcyB0aGUgY29udGFpbmVyXG4gIC8vIElmIG5laXRoZXIgYXJlIHByb3ZpZGVkIGxldCB0aGUgTW9kYWwgdGFrZSBjYXJlIG9mIGNob29zaW5nIHRoZSBjb250YWluZXJcbiAgY29uc3QgY29udGFpbmVyID0gY29udGFpbmVyUHJvcCB8fCAoYW5jaG9yRWwgPyBvd25lckRvY3VtZW50KHJlc29sdmVBbmNob3JFbChhbmNob3JFbCkpLmJvZHkgOiB1bmRlZmluZWQpO1xuICBjb25zdCBSb290U2xvdCA9IChfc2xvdHMkcm9vdCA9IHNsb3RzID09IG51bGwgPyB2b2lkIDAgOiBzbG90cy5yb290KSAhPSBudWxsID8gX3Nsb3RzJHJvb3QgOiBQb3BvdmVyUm9vdDtcbiAgY29uc3QgUGFwZXJTbG90ID0gKF9zbG90cyRwYXBlciA9IHNsb3RzID09IG51bGwgPyB2b2lkIDAgOiBzbG90cy5wYXBlcikgIT0gbnVsbCA/IF9zbG90cyRwYXBlciA6IFBvcG92ZXJQYXBlcjtcbiAgY29uc3QgcGFwZXJQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgZWxlbWVudFR5cGU6IFBhcGVyU2xvdCxcbiAgICBleHRlcm5hbFNsb3RQcm9wczogX2V4dGVuZHMoe30sIGV4dGVybmFsUGFwZXJTbG90UHJvcHMsIHtcbiAgICAgIHN0eWxlOiBpc1Bvc2l0aW9uZWQgPyBleHRlcm5hbFBhcGVyU2xvdFByb3BzLnN0eWxlIDogX2V4dGVuZHMoe30sIGV4dGVybmFsUGFwZXJTbG90UHJvcHMuc3R5bGUsIHtcbiAgICAgICAgb3BhY2l0eTogMFxuICAgICAgfSlcbiAgICB9KSxcbiAgICBhZGRpdGlvbmFsUHJvcHM6IHtcbiAgICAgIGVsZXZhdGlvbixcbiAgICAgIHJlZjogaGFuZGxlUGFwZXJSZWZcbiAgICB9LFxuICAgIG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucGFwZXIsIGV4dGVybmFsUGFwZXJTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGV4dGVybmFsUGFwZXJTbG90UHJvcHMuY2xhc3NOYW1lKVxuICB9KTtcbiAgY29uc3QgX3VzZVNsb3RQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgICBlbGVtZW50VHlwZTogUm9vdFNsb3QsXG4gICAgICBleHRlcm5hbFNsb3RQcm9wczogKHNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogc2xvdFByb3BzLnJvb3QpIHx8IHt9LFxuICAgICAgZXh0ZXJuYWxGb3J3YXJkZWRQcm9wczogb3RoZXIsXG4gICAgICBhZGRpdGlvbmFsUHJvcHM6IHtcbiAgICAgICAgcmVmLFxuICAgICAgICBzbG90UHJvcHM6IHtcbiAgICAgICAgICBiYWNrZHJvcDoge1xuICAgICAgICAgICAgaW52aXNpYmxlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb250YWluZXIsXG4gICAgICAgIG9wZW5cbiAgICAgIH0sXG4gICAgICBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICAgIH0pLFxuICAgIHtcbiAgICAgIHNsb3RQcm9wczogcm9vdFNsb3RQcm9wc1Byb3BcbiAgICB9ID0gX3VzZVNsb3RQcm9wcyxcbiAgICByb290UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdXNlU2xvdFByb3BzLCBfZXhjbHVkZWQzKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFJvb3RTbG90LCBfZXh0ZW5kcyh7fSwgcm9vdFByb3BzLCAhaXNIb3N0Q29tcG9uZW50KFJvb3RTbG90KSAmJiB7XG4gICAgc2xvdFByb3BzOiByb290U2xvdFByb3BzUHJvcCxcbiAgICBkaXNhYmxlU2Nyb2xsTG9ja1xuICB9LCB7XG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFRyYW5zaXRpb25Db21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIGFwcGVhcjogdHJ1ZSxcbiAgICAgIGluOiBvcGVuLFxuICAgICAgb25FbnRlcmluZzogaGFuZGxlRW50ZXJpbmcsXG4gICAgICBvbkV4aXRlZDogaGFuZGxlRXhpdGVkLFxuICAgICAgdGltZW91dDogdHJhbnNpdGlvbkR1cmF0aW9uXG4gICAgfSwgVHJhbnNpdGlvblByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goUGFwZXJTbG90LCBfZXh0ZW5kcyh7fSwgcGFwZXJQcm9wcywge1xuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgIH0pKVxuICAgIH0pKVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFBvcG92ZXIucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogQSByZWYgZm9yIGltcGVyYXRpdmUgYWN0aW9ucy5cbiAgICogSXQgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgdXBkYXRlUG9zaXRpb24oKSBhY3Rpb24uXG4gICAqL1xuICBhY3Rpb246IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBBbiBIVE1MIGVsZW1lbnQsIFtQb3BvdmVyVmlydHVhbEVsZW1lbnRdKC9tYXRlcmlhbC11aS9yZWFjdC1wb3BvdmVyLyN2aXJ0dWFsLWVsZW1lbnQpLFxuICAgKiBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBlaXRoZXIuXG4gICAqIEl0J3MgdXNlZCB0byBzZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBwb3BvdmVyLlxuICAgKi9cbiAgYW5jaG9yRWw6IGNoYWluUHJvcFR5cGVzKFByb3BUeXBlcy5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSwgcHJvcHMgPT4ge1xuICAgIGlmIChwcm9wcy5vcGVuICYmICghcHJvcHMuYW5jaG9yUmVmZXJlbmNlIHx8IHByb3BzLmFuY2hvclJlZmVyZW5jZSA9PT0gJ2FuY2hvckVsJykpIHtcbiAgICAgIGNvbnN0IHJlc29sdmVkQW5jaG9yRWwgPSByZXNvbHZlQW5jaG9yRWwocHJvcHMuYW5jaG9yRWwpO1xuICAgICAgaWYgKHJlc29sdmVkQW5jaG9yRWwgJiYgcmVzb2x2ZWRBbmNob3JFbC5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgICBjb25zdCBib3ggPSByZXNvbHZlZEFuY2hvckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JyAmJiBib3gudG9wID09PSAwICYmIGJveC5sZWZ0ID09PSAwICYmIGJveC5yaWdodCA9PT0gMCAmJiBib3guYm90dG9tID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihbJ01VSTogVGhlIGBhbmNob3JFbGAgcHJvcCBwcm92aWRlZCB0byB0aGUgY29tcG9uZW50IGlzIGludmFsaWQuJywgJ1RoZSBhbmNob3IgZWxlbWVudCBzaG91bGQgYmUgcGFydCBvZiB0aGUgZG9jdW1lbnQgbGF5b3V0LicsIFwiTWFrZSBzdXJlIHRoZSBlbGVtZW50IGlzIHByZXNlbnQgaW4gdGhlIGRvY3VtZW50IG9yIHRoYXQgaXQncyBub3QgZGlzcGxheSBub25lLlwiXS5qb2luKCdcXG4nKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoWydNVUk6IFRoZSBgYW5jaG9yRWxgIHByb3AgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudCBpcyBpbnZhbGlkLicsIGBJdCBzaG91bGQgYmUgYW4gRWxlbWVudCBvciBQb3BvdmVyVmlydHVhbEVsZW1lbnQgaW5zdGFuY2UgYnV0IGl0J3MgXFxgJHtyZXNvbHZlZEFuY2hvckVsfVxcYCBpbnN0ZWFkLmBdLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pLFxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgcG9pbnQgb24gdGhlIGFuY2hvciB3aGVyZSB0aGUgcG9wb3ZlcidzXG4gICAqIGBhbmNob3JFbGAgd2lsbCBhdHRhY2ggdG8uIFRoaXMgaXMgbm90IHVzZWQgd2hlbiB0aGVcbiAgICogYW5jaG9yUmVmZXJlbmNlIGlzICdhbmNob3JQb3NpdGlvbicuXG4gICAqXG4gICAqIE9wdGlvbnM6XG4gICAqIHZlcnRpY2FsOiBbdG9wLCBjZW50ZXIsIGJvdHRvbV07XG4gICAqIGhvcml6b250YWw6IFtsZWZ0LCBjZW50ZXIsIHJpZ2h0XS5cbiAgICogQGRlZmF1bHQge1xuICAgKiAgIHZlcnRpY2FsOiAndG9wJyxcbiAgICogICBob3Jpem9udGFsOiAnbGVmdCcsXG4gICAqIH1cbiAgICovXG4gIGFuY2hvck9yaWdpbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBob3Jpem9udGFsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydjZW50ZXInLCAnbGVmdCcsICdyaWdodCddKSwgUHJvcFR5cGVzLm51bWJlcl0pLmlzUmVxdWlyZWQsXG4gICAgdmVydGljYWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2JvdHRvbScsICdjZW50ZXInLCAndG9wJ10pLCBQcm9wVHlwZXMubnVtYmVyXSkuaXNSZXF1aXJlZFxuICB9KSxcbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIHBvc2l0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgcG9wb3Zlci5cbiAgICogVGhlIGNvb3JkaW5hdGVzIGFyZSByZWxhdGl2ZSB0byB0aGUgYXBwbGljYXRpb24ncyBjbGllbnQgYXJlYS5cbiAgICovXG4gIGFuY2hvclBvc2l0aW9uOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGxlZnQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICB0b3A6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZFxuICB9KSxcbiAgLyoqXG4gICAqIFRoaXMgZGV0ZXJtaW5lcyB3aGljaCBhbmNob3IgcHJvcCB0byByZWZlciB0byB3aGVuIHNldHRpbmdcbiAgICogdGhlIHBvc2l0aW9uIG9mIHRoZSBwb3BvdmVyLlxuICAgKiBAZGVmYXVsdCAnYW5jaG9yRWwnXG4gICAqL1xuICBhbmNob3JSZWZlcmVuY2U6IFByb3BUeXBlcy5vbmVPZihbJ2FuY2hvckVsJywgJ2FuY2hvclBvc2l0aW9uJywgJ25vbmUnXSksXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEFuIEhUTUwgZWxlbWVudCwgY29tcG9uZW50IGluc3RhbmNlLCBvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgZWl0aGVyLlxuICAgKiBUaGUgYGNvbnRhaW5lcmAgd2lsbCBwYXNzZWQgdG8gdGhlIE1vZGFsIGNvbXBvbmVudC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgaXQgdXNlcyB0aGUgYm9keSBvZiB0aGUgYW5jaG9yRWwncyB0b3AtbGV2ZWwgZG9jdW1lbnQgb2JqZWN0LFxuICAgKiBzbyBpdCdzIHNpbXBseSBgZG9jdW1lbnQuYm9keWAgbW9zdCBvZiB0aGUgdGltZS5cbiAgICovXG4gIGNvbnRhaW5lcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtIVE1MRWxlbWVudFR5cGUsIFByb3BUeXBlcy5mdW5jXSksXG4gIC8qKlxuICAgKiBEaXNhYmxlIHRoZSBzY3JvbGwgbG9jayBiZWhhdmlvci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVTY3JvbGxMb2NrOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBlbGV2YXRpb24gb2YgdGhlIHBvcG92ZXIuXG4gICAqIEBkZWZhdWx0IDhcbiAgICovXG4gIGVsZXZhdGlvbjogaW50ZWdlclByb3BUeXBlLFxuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyBjbG9zZSB0byB0aGUgZWRnZSBvZiB0aGUgd2luZG93IHRoZSBwb3BvdmVyIGNhbiBhcHBlYXIuXG4gICAqIElmIG51bGwsIHRoZSBwb3BvdmVyIHdpbGwgbm90IGJlIGNvbnN0cmFpbmVkIGJ5IHRoZSB3aW5kb3cuXG4gICAqIEBkZWZhdWx0IDE2XG4gICAqL1xuICBtYXJnaW5UaHJlc2hvbGQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgY2xvc2VkLlxuICAgKiBUaGUgYHJlYXNvbmAgcGFyYW1ldGVyIGNhbiBvcHRpb25hbGx5IGJlIHVzZWQgdG8gY29udHJvbCB0aGUgcmVzcG9uc2UgdG8gYG9uQ2xvc2VgLlxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BQYXBlcmBdKC9tYXRlcmlhbC11aS9hcGkvcGFwZXIvKSBlbGVtZW50LlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIGBzbG90UHJvcHMucGFwZXJgIGFuZCB3aWxsIGJlIG92ZXJyaWRlbiBieSBpdCBpZiBib3RoIGFyZSB1c2VkLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHNsb3RQcm9wcy5wYXBlcmAgaW5zdGVhZC5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIFBhcGVyUHJvcHM6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLnNoYXBlKHtcbiAgICBjb21wb25lbnQ6IGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcGFwZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBwYXBlcjogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIHBvaW50IG9uIHRoZSBwb3BvdmVyIHdoaWNoXG4gICAqIHdpbGwgYXR0YWNoIHRvIHRoZSBhbmNob3IncyBvcmlnaW4uXG4gICAqXG4gICAqIE9wdGlvbnM6XG4gICAqIHZlcnRpY2FsOiBbdG9wLCBjZW50ZXIsIGJvdHRvbSwgeChweCldO1xuICAgKiBob3Jpem9udGFsOiBbbGVmdCwgY2VudGVyLCByaWdodCwgeChweCldLlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgdmVydGljYWw6ICd0b3AnLFxuICAgKiAgIGhvcml6b250YWw6ICdsZWZ0JyxcbiAgICogfVxuICAgKi9cbiAgdHJhbnNmb3JtT3JpZ2luOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGhvcml6b250YWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2NlbnRlcicsICdsZWZ0JywgJ3JpZ2h0J10pLCBQcm9wVHlwZXMubnVtYmVyXSkuaXNSZXF1aXJlZCxcbiAgICB2ZXJ0aWNhbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYm90dG9tJywgJ2NlbnRlcicsICd0b3AnXSksIFByb3BUeXBlcy5udW1iZXJdKS5pc1JlcXVpcmVkXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgdHJhbnNpdGlvbi5cbiAgICogW0ZvbGxvdyB0aGlzIGd1aWRlXSgvbWF0ZXJpYWwtdWkvdHJhbnNpdGlvbnMvI3RyYW5zaXRpb25jb21wb25lbnQtcHJvcCkgdG8gbGVhcm4gbW9yZSBhYm91dCB0aGUgcmVxdWlyZW1lbnRzIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgR3Jvd1xuICAgKi9cbiAgVHJhbnNpdGlvbkNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogU2V0IHRvICdhdXRvJyB0byBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZSB0cmFuc2l0aW9uIHRpbWUgYmFzZWQgb24gaGVpZ2h0LlxuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIHRyYW5zaXRpb25EdXJhdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcHBlYXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZW50ZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZXhpdDogUHJvcFR5cGVzLm51bWJlclxuICB9KV0pLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgdHJhbnNpdGlvbiBlbGVtZW50LlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgZWxlbWVudCBpcyBiYXNlZCBvbiB0aGlzIFtgVHJhbnNpdGlvbmBdKGh0dHBzOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdHJhbnNpdGlvbi8pIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIFRyYW5zaXRpb25Qcm9wczogUHJvcFR5cGVzLm9iamVjdFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFBvcG92ZXI7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGV4YWN0UHJvcCwgSFRNTEVsZW1lbnRUeXBlLCB1bnN0YWJsZV91c2VFbmhhbmNlZEVmZmVjdCBhcyB1c2VFbmhhbmNlZEVmZmVjdCwgdW5zdGFibGVfdXNlRm9ya1JlZiBhcyB1c2VGb3JrUmVmLCB1bnN0YWJsZV9zZXRSZWYgYXMgc2V0UmVmIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gZ2V0Q29udGFpbmVyKGNvbnRhaW5lcikge1xuICByZXR1cm4gdHlwZW9mIGNvbnRhaW5lciA9PT0gJ2Z1bmN0aW9uJyA/IGNvbnRhaW5lcigpIDogY29udGFpbmVyO1xufVxuXG4vKipcbiAqIFBvcnRhbHMgcHJvdmlkZSBhIGZpcnN0LWNsYXNzIHdheSB0byByZW5kZXIgY2hpbGRyZW4gaW50byBhIERPTSBub2RlXG4gKiB0aGF0IGV4aXN0cyBvdXRzaWRlIHRoZSBET00gaGllcmFyY2h5IG9mIHRoZSBwYXJlbnQgY29tcG9uZW50LlxuICpcbiAqIERlbW9zOlxuICpcbiAqIC0gW1BvcnRhbF0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL3JlYWN0LXBvcnRhbC8pXG4gKlxuICogQVBJOlxuICpcbiAqIC0gW1BvcnRhbCBBUEldKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9hcGkvcG9ydGFsLylcbiAqL1xuY29uc3QgUG9ydGFsID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gUG9ydGFsKHByb3BzLCBmb3J3YXJkZWRSZWYpIHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGNvbnRhaW5lcixcbiAgICBkaXNhYmxlUG9ydGFsID0gZmFsc2VcbiAgfSA9IHByb3BzO1xuICBjb25zdCBbbW91bnROb2RlLCBzZXRNb3VudE5vZGVdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgVE9ETyB1cHN0cmVhbSBmaXhcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZiggLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSA/IGNoaWxkcmVuLnJlZiA6IG51bGwsIGZvcndhcmRlZFJlZik7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWRpc2FibGVQb3J0YWwpIHtcbiAgICAgIHNldE1vdW50Tm9kZShnZXRDb250YWluZXIoY29udGFpbmVyKSB8fCBkb2N1bWVudC5ib2R5KTtcbiAgICB9XG4gIH0sIFtjb250YWluZXIsIGRpc2FibGVQb3J0YWxdKTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtb3VudE5vZGUgJiYgIWRpc2FibGVQb3J0YWwpIHtcbiAgICAgIHNldFJlZihmb3J3YXJkZWRSZWYsIG1vdW50Tm9kZSk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBzZXRSZWYoZm9yd2FyZGVkUmVmLCBudWxsKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtmb3J3YXJkZWRSZWYsIG1vdW50Tm9kZSwgZGlzYWJsZVBvcnRhbF0pO1xuICBpZiAoZGlzYWJsZVBvcnRhbCkge1xuICAgIGlmICggLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuICAgICAgY29uc3QgbmV3UHJvcHMgPSB7XG4gICAgICAgIHJlZjogaGFuZGxlUmVmXG4gICAgICB9O1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIG5ld1Byb3BzKTtcbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFJlYWN0LkZyYWdtZW50LCB7XG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogbW91bnROb2RlID8gLyojX19QVVJFX18qL1JlYWN0RE9NLmNyZWF0ZVBvcnRhbChjaGlsZHJlbiwgbW91bnROb2RlKSA6IG1vdW50Tm9kZVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gUG9ydGFsLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgVHlwZVNjcmlwdCB0eXBlcyBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFRoZSBjaGlsZHJlbiB0byByZW5kZXIgaW50byB0aGUgYGNvbnRhaW5lcmAuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBBbiBIVE1MIGVsZW1lbnQgb3IgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG9uZS5cbiAgICogVGhlIGBjb250YWluZXJgIHdpbGwgaGF2ZSB0aGUgcG9ydGFsIGNoaWxkcmVuIGFwcGVuZGVkIHRvIGl0LlxuICAgKlxuICAgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhIGNhbGxiYWNrLCB3aGljaCBpcyBjYWxsZWQgaW4gYSBSZWFjdCBsYXlvdXQgZWZmZWN0LlxuICAgKiBUaGlzIGxldHMgeW91IHNldCB0aGUgY29udGFpbmVyIGZyb20gYSByZWYsIGFuZCBhbHNvIG1ha2VzIHNlcnZlci1zaWRlIHJlbmRlcmluZyBwb3NzaWJsZS5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgaXQgdXNlcyB0aGUgYm9keSBvZiB0aGUgdG9wLWxldmVsIGRvY3VtZW50IG9iamVjdCxcbiAgICogc28gaXQncyBzaW1wbHkgYGRvY3VtZW50LmJvZHlgIG1vc3Qgb2YgdGhlIHRpbWUuXG4gICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbSFRNTEVsZW1lbnRUeXBlLCBQcm9wVHlwZXMuZnVuY10pLFxuICAvKipcbiAgICogVGhlIGBjaGlsZHJlbmAgd2lsbCBiZSB1bmRlciB0aGUgRE9NIGhpZXJhcmNoeSBvZiB0aGUgcGFyZW50IGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVQb3J0YWw6IFByb3BUeXBlcy5ib29sXG59IDogdm9pZCAwO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIFBvcnRhbFsncHJvcFR5cGVzJyArICcnXSA9IGV4YWN0UHJvcChQb3J0YWwucHJvcFR5cGVzKTtcbn1cbmV4cG9ydCBkZWZhdWx0IFBvcnRhbDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVTdGFjayB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5jb25zdCBTdGFjayA9IGNyZWF0ZVN0YWNrKHtcbiAgY3JlYXRlU3R5bGVkQ29tcG9uZW50OiBzdHlsZWQoJ2RpdicsIHtcbiAgICBuYW1lOiAnTXVpU3RhY2snLFxuICAgIHNsb3Q6ICdSb290JyxcbiAgICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG4gIH0pLFxuICB1c2VUaGVtZVByb3BzOiBpblByb3BzID0+IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVN0YWNrJ1xuICB9KVxufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBTdGFjay5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBgZmxleC1kaXJlY3Rpb25gIHN0eWxlIHByb3BlcnR5LlxuICAgKiBJdCBpcyBhcHBsaWVkIGZvciBhbGwgc2NyZWVuIHNpemVzLlxuICAgKiBAZGVmYXVsdCAnY29sdW1uJ1xuICAgKi9cbiAgZGlyZWN0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydjb2x1bW4tcmV2ZXJzZScsICdjb2x1bW4nLCAncm93LXJldmVyc2UnLCAncm93J10pLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2YoWydjb2x1bW4tcmV2ZXJzZScsICdjb2x1bW4nLCAncm93LXJldmVyc2UnLCAncm93J10pKSwgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogQWRkIGFuIGVsZW1lbnQgYmV0d2VlbiBlYWNoIGNoaWxkLlxuICAgKi9cbiAgZGl2aWRlcjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBzcGFjZSBiZXR3ZWVuIGltbWVkaWF0ZSBjaGlsZHJlbi5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgc3BhY2luZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wLCB3aGljaCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBDU1MgZmxleGJveCBgZ2FwYCBpcyB1c2VkIGluc3RlYWQgb2YgYXBwbHlpbmcgYG1hcmdpbmAgdG8gY2hpbGRyZW4uXG4gICAqXG4gICAqIFdoaWxlIENTUyBgZ2FwYCByZW1vdmVzIHRoZSBba25vd24gbGltaXRhdGlvbnNdKGh0dHBzOi8vbXVpLmNvbS9qb3ktdWkvcmVhY3Qtc3RhY2svI2xpbWl0YXRpb25zKSxcbiAgICogaXQgaXMgbm90IGZ1bGx5IHN1cHBvcnRlZCBpbiBzb21lIGJyb3dzZXJzLiBXZSByZWNvbW1lbmQgY2hlY2tpbmcgaHR0cHM6Ly9jYW5pdXNlLmNvbS8/c2VhcmNoPWZsZXglMjBnYXAgYmVmb3JlIHVzaW5nIHRoaXMgZmxhZy5cbiAgICpcbiAgICogVG8gZW5hYmxlIHRoaXMgZmxhZyBnbG9iYWxseSwgZm9sbG93IHRoZSBbdGhlbWUncyBkZWZhdWx0IHByb3BzXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi90aGVtZS1jb21wb25lbnRzLyNkZWZhdWx0LXByb3BzKSBjb25maWd1cmF0aW9uLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgdXNlRmxleEdhcDogUHJvcFR5cGVzLmJvb2xcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBTdGFjazsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG52YXIgX3NwYW47XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzZXNcIiwgXCJjbGFzc05hbWVcIiwgXCJsYWJlbFwiLCBcIm5vdGNoZWRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBOb3RjaGVkT3V0bGluZVJvb3QgPSBzdHlsZWQoJ2ZpZWxkc2V0Jywge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcm9vdFNob3VsZEZvcndhcmRQcm9wXG59KSh7XG4gIHRleHRBbGlnbjogJ2xlZnQnLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgYm90dG9tOiAwLFxuICByaWdodDogMCxcbiAgdG9wOiAtNSxcbiAgbGVmdDogMCxcbiAgbWFyZ2luOiAwLFxuICBwYWRkaW5nOiAnMCA4cHgnLFxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIGJvcmRlclJhZGl1czogJ2luaGVyaXQnLFxuICBib3JkZXJTdHlsZTogJ3NvbGlkJyxcbiAgYm9yZGVyV2lkdGg6IDEsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgbWluV2lkdGg6ICcwJSdcbn0pO1xuY29uc3QgTm90Y2hlZE91dGxpbmVMZWdlbmQgPSBzdHlsZWQoJ2xlZ2VuZCcsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHJvb3RTaG91bGRGb3J3YXJkUHJvcFxufSkoKHtcbiAgb3duZXJTdGF0ZSxcbiAgdGhlbWVcbn0pID0+IF9leHRlbmRzKHtcbiAgZmxvYXQ6ICd1bnNldCcsXG4gIC8vIEZpeCBjb25mbGljdCB3aXRoIGJvb3RzdHJhcFxuICB3aWR0aDogJ2F1dG8nLFxuICAvLyBGaXggY29uZmxpY3Qgd2l0aCBib290c3RyYXBcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nXG59LCAhb3duZXJTdGF0ZS53aXRoTGFiZWwgJiYge1xuICBwYWRkaW5nOiAwLFxuICBsaW5lSGVpZ2h0OiAnMTFweCcsXG4gIC8vIHN5bmMgd2l0aCBgaGVpZ2h0YCBpbiBgbGVnZW5kYCBzdHlsZXNcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd3aWR0aCcsIHtcbiAgICBkdXJhdGlvbjogMTUwLFxuICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VPdXRcbiAgfSlcbn0sIG93bmVyU3RhdGUud2l0aExhYmVsICYmIF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgLy8gRml4IGNvbmZsaWN0IHdpdGggbm9ybWFsaXplLmNzcyBhbmQgc2FuaXRpemUuY3NzXG4gIHBhZGRpbmc6IDAsXG4gIGhlaWdodDogMTEsXG4gIC8vIHN5bmMgd2l0aCBgbGluZUhlaWdodGAgaW4gYGxlZ2VuZGAgc3R5bGVzXG4gIGZvbnRTaXplOiAnMC43NWVtJyxcbiAgdmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gIG1heFdpZHRoOiAwLjAxLFxuICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ21heC13aWR0aCcsIHtcbiAgICBkdXJhdGlvbjogNTAsXG4gICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICB9KSxcbiAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICcmID4gc3Bhbic6IHtcbiAgICBwYWRkaW5nTGVmdDogNSxcbiAgICBwYWRkaW5nUmlnaHQ6IDUsXG4gICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgb3BhY2l0eTogMCxcbiAgICB2aXNpYmlsaXR5OiAndmlzaWJsZSdcbiAgfVxufSwgb3duZXJTdGF0ZS5ub3RjaGVkICYmIHtcbiAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdtYXgtd2lkdGgnLCB7XG4gICAgZHVyYXRpb246IDEwMCxcbiAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0LFxuICAgIGRlbGF5OiA1MFxuICB9KVxufSkpKTtcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBOb3RjaGVkT3V0bGluZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICBsYWJlbCxcbiAgICAgIG5vdGNoZWRcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgd2l0aExhYmVsID0gbGFiZWwgIT0gbnVsbCAmJiBsYWJlbCAhPT0gJyc7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBub3RjaGVkLFxuICAgIHdpdGhMYWJlbFxuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KE5vdGNoZWRPdXRsaW5lUm9vdCwgX2V4dGVuZHMoe1xuICAgIFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSxcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KE5vdGNoZWRPdXRsaW5lTGVnZW5kLCB7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2hpbGRyZW46IHdpdGhMYWJlbCA/IC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgICAgIGNoaWxkcmVuOiBsYWJlbFxuICAgICAgfSkgOiAvLyBub3RyYW5zbGF0ZSBuZWVkZWQgd2hpbGUgR29vZ2xlIFRyYW5zbGF0ZSB3aWxsIG5vdCBmaXggemVyby13aWR0aCBzcGFjZSBpc3N1ZVxuICAgICAgX3NwYW4gfHwgKF9zcGFuID0gLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcIm5vdHJhbnNsYXRlXCIsXG4gICAgICAgIGNoaWxkcmVuOiBcIlxcdTIwMEJcIlxuICAgICAgfSkpXG4gICAgfSlcbiAgfSkpO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTm90Y2hlZE91dGxpbmUucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgbGFiZWwuXG4gICAqL1xuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBvdXRsaW5lIGlzIG5vdGNoZWQgdG8gYWNjb21tb2RhdGUgdGhlIGxhYmVsLlxuICAgKi9cbiAgbm90Y2hlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0XG59IDogdm9pZCAwOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmltcG9ydCB7IGlucHV0QmFzZUNsYXNzZXMgfSBmcm9tICcuLi9JbnB1dEJhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE91dGxpbmVkSW5wdXRVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aU91dGxpbmVkSW5wdXQnLCBzbG90KTtcbn1cbmNvbnN0IG91dGxpbmVkSW5wdXRDbGFzc2VzID0gX2V4dGVuZHMoe30sIGlucHV0QmFzZUNsYXNzZXMsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aU91dGxpbmVkSW5wdXQnLCBbJ3Jvb3QnLCAnbm90Y2hlZE91dGxpbmUnLCAnaW5wdXQnXSkpO1xuZXhwb3J0IGRlZmF1bHQgb3V0bGluZWRJbnB1dENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY29tcG9uZW50c1wiLCBcImZ1bGxXaWR0aFwiLCBcImlucHV0Q29tcG9uZW50XCIsIFwibGFiZWxcIiwgXCJtdWx0aWxpbmVcIiwgXCJub3RjaGVkXCIsIFwic2xvdHNcIiwgXCJ0eXBlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCByZWZUeXBlIGZyb20gJ0BtdWkvdXRpbHMvcmVmVHlwZSc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgTm90Y2hlZE91dGxpbmUgZnJvbSAnLi9Ob3RjaGVkT3V0bGluZSc7XG5pbXBvcnQgdXNlRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wnO1xuaW1wb3J0IGZvcm1Db250cm9sU3RhdGUgZnJvbSAnLi4vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZSc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IG91dGxpbmVkSW5wdXRDbGFzc2VzLCB7IGdldE91dGxpbmVkSW5wdXRVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL291dGxpbmVkSW5wdXRDbGFzc2VzJztcbmltcG9ydCBJbnB1dEJhc2UsIHsgcm9vdE92ZXJyaWRlc1Jlc29sdmVyIGFzIGlucHV0QmFzZVJvb3RPdmVycmlkZXNSZXNvbHZlciwgaW5wdXRPdmVycmlkZXNSZXNvbHZlciBhcyBpbnB1dEJhc2VJbnB1dE92ZXJyaWRlc1Jlc29sdmVyLCBJbnB1dEJhc2VSb290LCBJbnB1dEJhc2VDb21wb25lbnQgYXMgSW5wdXRCYXNlSW5wdXQgfSBmcm9tICcuLi9JbnB1dEJhc2UvSW5wdXRCYXNlJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290J10sXG4gICAgbm90Y2hlZE91dGxpbmU6IFsnbm90Y2hlZE91dGxpbmUnXSxcbiAgICBpbnB1dDogWydpbnB1dCddXG4gIH07XG4gIGNvbnN0IGNvbXBvc2VkQ2xhc3NlcyA9IGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRPdXRsaW5lZElucHV0VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcbmNvbnN0IE91dGxpbmVkSW5wdXRSb290ID0gc3R5bGVkKElucHV0QmFzZVJvb3QsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aU91dGxpbmVkSW5wdXQnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiBpbnB1dEJhc2VSb290T3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIGNvbnN0IGJvcmRlckNvbG9yID0gdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gJ3JnYmEoMCwgMCwgMCwgMC4yMyknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMyknO1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIGJvcmRlclJhZGl1czogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYXBlLmJvcmRlclJhZGl1cyxcbiAgICBbYCY6aG92ZXIgLiR7b3V0bGluZWRJbnB1dENsYXNzZXMubm90Y2hlZE91dGxpbmV9YF06IHtcbiAgICAgIGJvcmRlckNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnByaW1hcnlcbiAgICB9LFxuICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgW2AmOmhvdmVyIC4ke291dGxpbmVkSW5wdXRDbGFzc2VzLm5vdGNoZWRPdXRsaW5lfWBdOiB7XG4gICAgICAgIGJvcmRlckNvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUuY29tbW9uLm9uQmFja2dyb3VuZENoYW5uZWx9IC8gMC4yMylgIDogYm9yZGVyQ29sb3JcbiAgICAgIH1cbiAgICB9LFxuICAgIFtgJi4ke291dGxpbmVkSW5wdXRDbGFzc2VzLmZvY3VzZWR9IC4ke291dGxpbmVkSW5wdXRDbGFzc2VzLm5vdGNoZWRPdXRsaW5lfWBdOiB7XG4gICAgICBib3JkZXJDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbixcbiAgICAgIGJvcmRlcldpZHRoOiAyXG4gICAgfSxcbiAgICBbYCYuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5lcnJvcn0gLiR7b3V0bGluZWRJbnB1dENsYXNzZXMubm90Y2hlZE91dGxpbmV9YF06IHtcbiAgICAgIGJvcmRlckNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5lcnJvci5tYWluXG4gICAgfSxcbiAgICBbYCYuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5kaXNhYmxlZH0gLiR7b3V0bGluZWRJbnB1dENsYXNzZXMubm90Y2hlZE91dGxpbmV9YF06IHtcbiAgICAgIGJvcmRlckNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRcbiAgICB9XG4gIH0sIG93bmVyU3RhdGUuc3RhcnRBZG9ybm1lbnQgJiYge1xuICAgIHBhZGRpbmdMZWZ0OiAxNFxuICB9LCBvd25lclN0YXRlLmVuZEFkb3JubWVudCAmJiB7XG4gICAgcGFkZGluZ1JpZ2h0OiAxNFxuICB9LCBvd25lclN0YXRlLm11bHRpbGluZSAmJiBfZXh0ZW5kcyh7XG4gICAgcGFkZGluZzogJzE2LjVweCAxNHB4J1xuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICAgIHBhZGRpbmc6ICc4LjVweCAxNHB4J1xuICB9KSk7XG59KTtcbmNvbnN0IE5vdGNoZWRPdXRsaW5lUm9vdCA9IHN0eWxlZChOb3RjaGVkT3V0bGluZSwge1xuICBuYW1lOiAnTXVpT3V0bGluZWRJbnB1dCcsXG4gIHNsb3Q6ICdOb3RjaGVkT3V0bGluZScsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLm5vdGNoZWRPdXRsaW5lXG59KSgoe1xuICB0aGVtZVxufSkgPT4ge1xuICBjb25zdCBib3JkZXJDb2xvciA9IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/ICdyZ2JhKDAsIDAsIDAsIDAuMjMpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjMpJztcbiAgcmV0dXJuIHtcbiAgICBib3JkZXJDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLmNvbW1vbi5vbkJhY2tncm91bmRDaGFubmVsfSAvIDAuMjMpYCA6IGJvcmRlckNvbG9yXG4gIH07XG59KTtcbmNvbnN0IE91dGxpbmVkSW5wdXRJbnB1dCA9IHN0eWxlZChJbnB1dEJhc2VJbnB1dCwge1xuICBuYW1lOiAnTXVpT3V0bGluZWRJbnB1dCcsXG4gIHNsb3Q6ICdJbnB1dCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiBpbnB1dEJhc2VJbnB1dE92ZXJyaWRlc1Jlc29sdmVyXG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBwYWRkaW5nOiAnMTYuNXB4IDE0cHgnXG59LCAhdGhlbWUudmFycyAmJiB7XG4gICcmOi13ZWJraXQtYXV0b2ZpbGwnOiB7XG4gICAgV2Via2l0Qm94U2hhZG93OiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyBudWxsIDogJzAgMCAwIDEwMHB4ICMyNjY3OTggaW5zZXQnLFxuICAgIFdlYmtpdFRleHRGaWxsQ29sb3I6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IG51bGwgOiAnI2ZmZicsXG4gICAgY2FyZXRDb2xvcjogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gbnVsbCA6ICcjZmZmJyxcbiAgICBib3JkZXJSYWRpdXM6ICdpbmhlcml0J1xuICB9XG59LCB0aGVtZS52YXJzICYmIHtcbiAgJyY6LXdlYmtpdC1hdXRvZmlsbCc6IHtcbiAgICBib3JkZXJSYWRpdXM6ICdpbmhlcml0J1xuICB9LFxuICBbdGhlbWUuZ2V0Q29sb3JTY2hlbWVTZWxlY3RvcignZGFyaycpXToge1xuICAgICcmOi13ZWJraXQtYXV0b2ZpbGwnOiB7XG4gICAgICBXZWJraXRCb3hTaGFkb3c6ICcwIDAgMCAxMDBweCAjMjY2Nzk4IGluc2V0JyxcbiAgICAgIFdlYmtpdFRleHRGaWxsQ29sb3I6ICcjZmZmJyxcbiAgICAgIGNhcmV0Q29sb3I6ICcjZmZmJ1xuICAgIH1cbiAgfVxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgcGFkZGluZzogJzguNXB4IDE0cHgnXG59LCBvd25lclN0YXRlLm11bHRpbGluZSAmJiB7XG4gIHBhZGRpbmc6IDBcbn0sIG93bmVyU3RhdGUuc3RhcnRBZG9ybm1lbnQgJiYge1xuICBwYWRkaW5nTGVmdDogMFxufSwgb3duZXJTdGF0ZS5lbmRBZG9ybm1lbnQgJiYge1xuICBwYWRkaW5nUmlnaHQ6IDBcbn0pKTtcbmNvbnN0IE91dGxpbmVkSW5wdXQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBPdXRsaW5lZElucHV0KGluUHJvcHMsIHJlZikge1xuICB2YXIgX3JlZiwgX3Nsb3RzJHJvb3QsIF9yZWYyLCBfc2xvdHMkaW5wdXQsIF9SZWFjdCRGcmFnbWVudDtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlPdXRsaW5lZElucHV0J1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY29tcG9uZW50cyA9IHt9LFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICBpbnB1dENvbXBvbmVudCA9ICdpbnB1dCcsXG4gICAgICBsYWJlbCxcbiAgICAgIG11bHRpbGluZSA9IGZhbHNlLFxuICAgICAgbm90Y2hlZCxcbiAgICAgIHNsb3RzID0ge30sXG4gICAgICB0eXBlID0gJ3RleHQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhwcm9wcyk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgZmNzID0gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gICAgcHJvcHMsXG4gICAgbXVpRm9ybUNvbnRyb2wsXG4gICAgc3RhdGVzOiBbJ2NvbG9yJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2ZvY3VzZWQnLCAnaGlkZGVuTGFiZWwnLCAnc2l6ZScsICdyZXF1aXJlZCddXG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3I6IGZjcy5jb2xvciB8fCAncHJpbWFyeScsXG4gICAgZGlzYWJsZWQ6IGZjcy5kaXNhYmxlZCxcbiAgICBlcnJvcjogZmNzLmVycm9yLFxuICAgIGZvY3VzZWQ6IGZjcy5mb2N1c2VkLFxuICAgIGZvcm1Db250cm9sOiBtdWlGb3JtQ29udHJvbCxcbiAgICBmdWxsV2lkdGgsXG4gICAgaGlkZGVuTGFiZWw6IGZjcy5oaWRkZW5MYWJlbCxcbiAgICBtdWx0aWxpbmUsXG4gICAgc2l6ZTogZmNzLnNpemUsXG4gICAgdHlwZVxuICB9KTtcbiAgY29uc3QgUm9vdFNsb3QgPSAoX3JlZiA9IChfc2xvdHMkcm9vdCA9IHNsb3RzLnJvb3QpICE9IG51bGwgPyBfc2xvdHMkcm9vdCA6IGNvbXBvbmVudHMuUm9vdCkgIT0gbnVsbCA/IF9yZWYgOiBPdXRsaW5lZElucHV0Um9vdDtcbiAgY29uc3QgSW5wdXRTbG90ID0gKF9yZWYyID0gKF9zbG90cyRpbnB1dCA9IHNsb3RzLmlucHV0KSAhPSBudWxsID8gX3Nsb3RzJGlucHV0IDogY29tcG9uZW50cy5JbnB1dCkgIT0gbnVsbCA/IF9yZWYyIDogT3V0bGluZWRJbnB1dElucHV0O1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goSW5wdXRCYXNlLCBfZXh0ZW5kcyh7XG4gICAgc2xvdHM6IHtcbiAgICAgIHJvb3Q6IFJvb3RTbG90LFxuICAgICAgaW5wdXQ6IElucHV0U2xvdFxuICAgIH0sXG4gICAgcmVuZGVyU3VmZml4OiBzdGF0ZSA9PiAvKiNfX1BVUkVfXyovX2pzeChOb3RjaGVkT3V0bGluZVJvb3QsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMubm90Y2hlZE91dGxpbmUsXG4gICAgICBsYWJlbDogbGFiZWwgIT0gbnVsbCAmJiBsYWJlbCAhPT0gJycgJiYgZmNzLnJlcXVpcmVkID8gX1JlYWN0JEZyYWdtZW50IHx8IChfUmVhY3QkRnJhZ21lbnQgPSAvKiNfX1BVUkVfXyovX2pzeHMoUmVhY3QuRnJhZ21lbnQsIHtcbiAgICAgICAgY2hpbGRyZW46IFtsYWJlbCwgXCJcXHUyMDA5XCIsICcqJ11cbiAgICAgIH0pKSA6IGxhYmVsLFxuICAgICAgbm90Y2hlZDogdHlwZW9mIG5vdGNoZWQgIT09ICd1bmRlZmluZWQnID8gbm90Y2hlZCA6IEJvb2xlYW4oc3RhdGUuc3RhcnRBZG9ybm1lbnQgfHwgc3RhdGUuZmlsbGVkIHx8IHN0YXRlLmZvY3VzZWQpXG4gICAgfSksXG4gICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgaW5wdXRDb21wb25lbnQ6IGlucHV0Q29tcG9uZW50LFxuICAgIG11bHRpbGluZTogbXVsdGlsaW5lLFxuICAgIHJlZjogcmVmLFxuICAgIHR5cGU6IHR5cGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjbGFzc2VzOiBfZXh0ZW5kcyh7fSwgY2xhc3Nlcywge1xuICAgICAgbm90Y2hlZE91dGxpbmU6IG51bGxcbiAgICB9KVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE91dGxpbmVkSW5wdXQucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhpcyBwcm9wIGhlbHBzIHVzZXJzIHRvIGZpbGwgZm9ybXMgZmFzdGVyLCBlc3BlY2lhbGx5IG9uIG1vYmlsZSBkZXZpY2VzLlxuICAgKiBUaGUgbmFtZSBjYW4gYmUgY29uZnVzaW5nLCBhcyBpdCdzIG1vcmUgbGlrZSBhbiBhdXRvZmlsbC5cbiAgICogWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IGl0IFtmb2xsb3dpbmcgdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2F1dG9maWxsKS5cbiAgICovXG4gIGF1dG9Db21wbGV0ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdwcmltYXJ5J2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90c2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90c2AgcHJvcCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBJbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogRW5kIGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgZW5kQWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCBpbmRpY2F0ZSBhbiBlcnJvci5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCB0YWtlIHVwIHRoZSBmdWxsIHdpZHRoIG9mIGl0cyBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ2lucHV0J1xuICAgKi9cbiAgaW5wdXRDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFtBdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjQXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogVGhlIGxhYmVsIG9mIHRoZSBgaW5wdXRgLiBJdCBpcyBvbmx5IHVzZWQgZm9yIGxheW91dC4gVGhlIGFjdHVhbCBsYWJlbGxpbmdcbiAgICogaXMgaGFuZGxlZCBieSBgSW5wdXRMYWJlbGAuXG4gICAqL1xuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nLiBUaGlzIGlzIG5vcm1hbGx5IG9idGFpbmVkIHZpYSBjb250ZXh0IGZyb21cbiAgICogRm9ybUNvbnRyb2wuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdub25lJ2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdub25lJ10pLFxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1heFJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIE1pbmltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtaW5Sb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgW1RleHRhcmVhQXV0b3NpemVdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0YXJlYS1hdXRvc2l6ZS8pIGVsZW1lbnQgaXMgcmVuZGVyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtdWx0aWxpbmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBvdXRsaW5lIGlzIG5vdGNoZWQgdG8gYWNjb21tb2RhdGUgdGhlIGxhYmVsLlxuICAgKi9cbiAgbm90Y2hlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LkNoYW5nZUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBIVE1MSW5wdXRFbGVtZW50Pn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKHN0cmluZykuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgc2hvcnQgaGludCBkaXNwbGF5ZWQgaW4gdGhlIGBpbnB1dGAgYmVmb3JlIHRoZSB1c2VyIGVudGVycyBhIHZhbHVlLlxuICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJdCBwcmV2ZW50cyB0aGUgdXNlciBmcm9tIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGRcbiAgICogKG5vdCBmcm9tIGludGVyYWN0aW5nIHdpdGggdGhlIGZpZWxkKS5cbiAgICovXG4gIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyByZXF1aXJlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgcm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBTdGFydCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIHN0YXJ0QWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC4gSXQgc2hvdWxkIGJlIFthIHZhbGlkIEhUTUw1IGlucHV0IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNGb3JtXyUzQ2lucHV0JTNFX3R5cGVzKS5cbiAgICogQGRlZmF1bHQgJ3RleHQnXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQsIHJlcXVpcmVkIGZvciBhIGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5PdXRsaW5lZElucHV0Lm11aU5hbWUgPSAnSW5wdXQnO1xuZXhwb3J0IGRlZmF1bHQgT3V0bGluZWRJbnB1dDsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5hdGl2ZVNlbGVjdFV0aWxpdHlDbGFzc2VzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlOYXRpdmVTZWxlY3QnLCBzbG90KTtcbn1cbmNvbnN0IG5hdGl2ZVNlbGVjdENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlOYXRpdmVTZWxlY3QnLCBbJ3Jvb3QnLCAnc2VsZWN0JywgJ211bHRpcGxlJywgJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCcsICdkaXNhYmxlZCcsICdpY29uJywgJ2ljb25PcGVuJywgJ2ljb25GaWxsZWQnLCAnaWNvbk91dGxpbmVkJywgJ2ljb25TdGFuZGFyZCcsICduYXRpdmVJbnB1dCcsICdlcnJvciddKTtcbmV4cG9ydCBkZWZhdWx0IG5hdGl2ZVNlbGVjdENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcIkljb25Db21wb25lbnRcIiwgXCJpbnB1dFJlZlwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgcmVmVHlwZSBmcm9tICdAbXVpL3V0aWxzL3JlZlR5cGUnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgbmF0aXZlU2VsZWN0Q2xhc3NlcywgeyBnZXROYXRpdmVTZWxlY3RVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vbmF0aXZlU2VsZWN0Q2xhc3Nlcyc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIHZhcmlhbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgbXVsdGlwbGUsXG4gICAgb3BlbixcbiAgICBlcnJvclxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgc2VsZWN0OiBbJ3NlbGVjdCcsIHZhcmlhbnQsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIG11bHRpcGxlICYmICdtdWx0aXBsZScsIGVycm9yICYmICdlcnJvciddLFxuICAgIGljb246IFsnaWNvbicsIGBpY29uJHtjYXBpdGFsaXplKHZhcmlhbnQpfWAsIG9wZW4gJiYgJ2ljb25PcGVuJywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXROYXRpdmVTZWxlY3RVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG59O1xuZXhwb3J0IGNvbnN0IG5hdGl2ZVNlbGVjdFNlbGVjdFN0eWxlcyA9ICh7XG4gIG93bmVyU3RhdGUsXG4gIHRoZW1lXG59KSA9PiBfZXh0ZW5kcyh7XG4gIE1vekFwcGVhcmFuY2U6ICdub25lJyxcbiAgLy8gUmVzZXRcbiAgV2Via2l0QXBwZWFyYW5jZTogJ25vbmUnLFxuICAvLyBSZXNldFxuICAvLyBXaGVuIGludGVyYWN0aW5nIHF1aWNrbHksIHRoZSB0ZXh0IGNhbiBlbmQgdXAgc2VsZWN0ZWQuXG4gIC8vIE5hdGl2ZSBzZWxlY3QgY2FuJ3QgYmUgc2VsZWN0ZWQgZWl0aGVyLlxuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIGJvcmRlclJhZGl1czogMCxcbiAgLy8gUmVzZXRcbiAgY3Vyc29yOiAncG9pbnRlcicsXG4gICcmOmZvY3VzJzogX2V4dGVuZHMoe30sIHRoZW1lLnZhcnMgPyB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5jb21tb24ub25CYWNrZ3JvdW5kQ2hhbm5lbH0gLyAwLjA1KWBcbiAgfSA6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/ICdyZ2JhKDAsIDAsIDAsIDAuMDUpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpJ1xuICB9LCB7XG4gICAgYm9yZGVyUmFkaXVzOiAwIC8vIFJlc2V0IENocm9tZSBzdHlsZVxuICB9KSxcbiAgLy8gUmVtb3ZlIElFMTEgYXJyb3dcbiAgJyY6Oi1tcy1leHBhbmQnOiB7XG4gICAgZGlzcGxheTogJ25vbmUnXG4gIH0sXG4gIFtgJi4ke25hdGl2ZVNlbGVjdENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjdXJzb3I6ICdkZWZhdWx0J1xuICB9LFxuICAnJlttdWx0aXBsZV0nOiB7XG4gICAgaGVpZ2h0OiAnYXV0bydcbiAgfSxcbiAgJyY6bm90KFttdWx0aXBsZV0pIG9wdGlvbiwgJjpub3QoW211bHRpcGxlXSkgb3B0Z3JvdXAnOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5iYWNrZ3JvdW5kLnBhcGVyXG4gIH0sXG4gIC8vIEJ1bXAgc3BlY2lmaWNpdHkgdG8gYWxsb3cgZXh0ZW5kaW5nIGN1c3RvbSBpbnB1dHNcbiAgJyYmJic6IHtcbiAgICBwYWRkaW5nUmlnaHQ6IDI0LFxuICAgIG1pbldpZHRoOiAxNiAvLyBTbyBpdCBkb2Vzbid0IGNvbGxhcHNlLlxuICB9XG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdmaWxsZWQnICYmIHtcbiAgJyYmJic6IHtcbiAgICBwYWRkaW5nUmlnaHQ6IDMyXG4gIH1cbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiB7XG4gIGJvcmRlclJhZGl1czogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYXBlLmJvcmRlclJhZGl1cyxcbiAgJyY6Zm9jdXMnOiB7XG4gICAgYm9yZGVyUmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzIC8vIFJlc2V0IHRoZSByZXNldCBmb3IgQ2hyb21lIHN0eWxlXG4gIH0sXG4gICcmJiYnOiB7XG4gICAgcGFkZGluZ1JpZ2h0OiAzMlxuICB9XG59KTtcbmNvbnN0IE5hdGl2ZVNlbGVjdFNlbGVjdCA9IHN0eWxlZCgnc2VsZWN0Jywge1xuICBuYW1lOiAnTXVpTmF0aXZlU2VsZWN0JyxcbiAgc2xvdDogJ1NlbGVjdCcsXG4gIHNob3VsZEZvcndhcmRQcm9wOiByb290U2hvdWxkRm9yd2FyZFByb3AsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMuc2VsZWN0LCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XSwgb3duZXJTdGF0ZS5lcnJvciAmJiBzdHlsZXMuZXJyb3IsIHtcbiAgICAgIFtgJi4ke25hdGl2ZVNlbGVjdENsYXNzZXMubXVsdGlwbGV9YF06IHN0eWxlcy5tdWx0aXBsZVxuICAgIH1dO1xuICB9XG59KShuYXRpdmVTZWxlY3RTZWxlY3RTdHlsZXMpO1xuZXhwb3J0IGNvbnN0IG5hdGl2ZVNlbGVjdEljb25TdHlsZXMgPSAoe1xuICBvd25lclN0YXRlLFxuICB0aGVtZVxufSkgPT4gX2V4dGVuZHMoe1xuICAvLyBXZSB1c2UgYSBwb3NpdGlvbiBhYnNvbHV0ZSBvdmVyIGEgZmxleGJveCBpbiBvcmRlciB0byBmb3J3YXJkIHRoZSBwb2ludGVyIGV2ZW50c1xuICAvLyB0byB0aGUgaW5wdXQgYW5kIHRvIHN1cHBvcnQgd3JhcHBpbmcgdGFncy4uXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICByaWdodDogMCxcbiAgdG9wOiAnY2FsYyg1MCUgLSAuNWVtKScsXG4gIC8vIENlbnRlciB2ZXJ0aWNhbGx5LCBoZWlnaHQgaXMgMWVtXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgLy8gRG9uJ3QgYmxvY2sgcG9pbnRlciBldmVudHMgb24gdGhlIHNlbGVjdCB1bmRlciB0aGUgaWNvbi5cbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5hY3RpdmUsXG4gIFtgJi4ke25hdGl2ZVNlbGVjdENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkXG4gIH1cbn0sIG93bmVyU3RhdGUub3BlbiAmJiB7XG4gIHRyYW5zZm9ybTogJ3JvdGF0ZSgxODBkZWcpJ1xufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZmlsbGVkJyAmJiB7XG4gIHJpZ2h0OiA3XG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICByaWdodDogN1xufSk7XG5jb25zdCBOYXRpdmVTZWxlY3RJY29uID0gc3R5bGVkKCdzdmcnLCB7XG4gIG5hbWU6ICdNdWlOYXRpdmVTZWxlY3QnLFxuICBzbG90OiAnSWNvbicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMuaWNvbiwgb3duZXJTdGF0ZS52YXJpYW50ICYmIHN0eWxlc1tgaWNvbiR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnZhcmlhbnQpfWBdLCBvd25lclN0YXRlLm9wZW4gJiYgc3R5bGVzLmljb25PcGVuXTtcbiAgfVxufSkobmF0aXZlU2VsZWN0SWNvblN0eWxlcyk7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgTmF0aXZlU2VsZWN0SW5wdXQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBOYXRpdmVTZWxlY3RJbnB1dChwcm9wcywgcmVmKSB7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZXJyb3IsXG4gICAgICBJY29uQ29tcG9uZW50LFxuICAgICAgaW5wdXRSZWYsXG4gICAgICB2YXJpYW50ID0gJ3N0YW5kYXJkJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZGlzYWJsZWQsXG4gICAgdmFyaWFudCxcbiAgICBlcnJvclxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IFsvKiNfX1BVUkVfXyovX2pzeChOYXRpdmVTZWxlY3RTZWxlY3QsIF9leHRlbmRzKHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5zZWxlY3QsIGNsYXNzTmFtZSksXG4gICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICByZWY6IGlucHV0UmVmIHx8IHJlZlxuICAgIH0sIG90aGVyKSksIHByb3BzLm11bHRpcGxlID8gbnVsbCA6IC8qI19fUFVSRV9fKi9fanN4KE5hdGl2ZVNlbGVjdEljb24sIHtcbiAgICAgIGFzOiBJY29uQ29tcG9uZW50LFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5pY29uXG4gICAgfSldXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBOYXRpdmVTZWxlY3RJbnB1dC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uIGVsZW1lbnRzIHRvIHBvcHVsYXRlIHRoZSBzZWxlY3Qgd2l0aC5cbiAgICogQ2FuIGJlIHNvbWUgYDxvcHRpb24+YCBlbGVtZW50cy5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgQ1NTIGNsYXNzIG5hbWUgb2YgdGhlIHNlbGVjdCBlbGVtZW50LlxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgc2VsZWN0IGlzIGRpc2FibGVkLlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYHNlbGVjdCBpbnB1dGAgd2lsbCBpbmRpY2F0ZSBhbiBlcnJvci5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBpY29uIHRoYXQgZGlzcGxheXMgdGhlIGFycm93LlxuICAgKi9cbiAgSWNvbkNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBVc2UgdGhhdCBwcm9wIHRvIHBhc3MgYSByZWYgdG8gdGhlIG5hdGl2ZSBzZWxlY3QgZWxlbWVudC5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgbXVsdGlwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBzZWxlY3RgIG9yIGhpZGRlbiBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiBhIG1lbnUgaXRlbSBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChzdHJpbmcpLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIGlucHV0IHZhbHVlLlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydzdGFuZGFyZCcsICdvdXRsaW5lZCcsICdmaWxsZWQnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBOYXRpdmVTZWxlY3RJbnB1dDsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdFV0aWxpdHlDbGFzc2VzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlTZWxlY3QnLCBzbG90KTtcbn1cbmNvbnN0IHNlbGVjdENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlTZWxlY3QnLCBbJ3Jvb3QnLCAnc2VsZWN0JywgJ211bHRpcGxlJywgJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCcsICdkaXNhYmxlZCcsICdmb2N1c2VkJywgJ2ljb24nLCAnaWNvbk9wZW4nLCAnaWNvbkZpbGxlZCcsICdpY29uT3V0bGluZWQnLCAnaWNvblN0YW5kYXJkJywgJ25hdGl2ZUlucHV0JywgJ2Vycm9yJ10pO1xuZXhwb3J0IGRlZmF1bHQgc2VsZWN0Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSBmcm9tIFwiQG11aS91dGlscy9mb3JtYXRNdWlFcnJvck1lc3NhZ2VcIjtcbnZhciBfc3BhbjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFyaWEtZGVzY3JpYmVkYnlcIiwgXCJhcmlhLWxhYmVsXCIsIFwiYXV0b0ZvY3VzXCIsIFwiYXV0b1dpZHRoXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJkZWZhdWx0T3BlblwiLCBcImRlZmF1bHRWYWx1ZVwiLCBcImRpc2FibGVkXCIsIFwiZGlzcGxheUVtcHR5XCIsIFwiZXJyb3JcIiwgXCJJY29uQ29tcG9uZW50XCIsIFwiaW5wdXRSZWZcIiwgXCJsYWJlbElkXCIsIFwiTWVudVByb3BzXCIsIFwibXVsdGlwbGVcIiwgXCJuYW1lXCIsIFwib25CbHVyXCIsIFwib25DaGFuZ2VcIiwgXCJvbkNsb3NlXCIsIFwib25Gb2N1c1wiLCBcIm9uT3BlblwiLCBcIm9wZW5cIiwgXCJyZWFkT25seVwiLCBcInJlbmRlclZhbHVlXCIsIFwiU2VsZWN0RGlzcGxheVByb3BzXCIsIFwidGFiSW5kZXhcIiwgXCJ0eXBlXCIsIFwidmFsdWVcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNGcmFnbWVudCB9IGZyb20gJ3JlYWN0LWlzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB1c2VJZCBmcm9tICdAbXVpL3V0aWxzL3VzZUlkJztcbmltcG9ydCByZWZUeXBlIGZyb20gJ0BtdWkvdXRpbHMvcmVmVHlwZSc7XG5pbXBvcnQgb3duZXJEb2N1bWVudCBmcm9tICcuLi91dGlscy9vd25lckRvY3VtZW50JztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IE1lbnUgZnJvbSAnLi4vTWVudS9NZW51JztcbmltcG9ydCB7IG5hdGl2ZVNlbGVjdFNlbGVjdFN0eWxlcywgbmF0aXZlU2VsZWN0SWNvblN0eWxlcyB9IGZyb20gJy4uL05hdGl2ZVNlbGVjdC9OYXRpdmVTZWxlY3RJbnB1dCc7XG5pbXBvcnQgeyBpc0ZpbGxlZCB9IGZyb20gJy4uL0lucHV0QmFzZS91dGlscyc7XG5pbXBvcnQgc3R5bGVkLCB7IHNsb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgdXNlQ29udHJvbGxlZCBmcm9tICcuLi91dGlscy91c2VDb250cm9sbGVkJztcbmltcG9ydCBzZWxlY3RDbGFzc2VzLCB7IGdldFNlbGVjdFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9zZWxlY3RDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBTZWxlY3RTZWxlY3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aVNlbGVjdCcsXG4gIHNsb3Q6ICdTZWxlY3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbXG4gICAgLy8gV2luIHNwZWNpZmljaXR5IG92ZXIgdGhlIGlucHV0IGJhc2VcbiAgICB7XG4gICAgICBbYCYuJHtzZWxlY3RDbGFzc2VzLnNlbGVjdH1gXTogc3R5bGVzLnNlbGVjdFxuICAgIH0sIHtcbiAgICAgIFtgJi4ke3NlbGVjdENsYXNzZXMuc2VsZWN0fWBdOiBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XVxuICAgIH0sIHtcbiAgICAgIFtgJi4ke3NlbGVjdENsYXNzZXMuZXJyb3J9YF06IHN0eWxlcy5lcnJvclxuICAgIH0sIHtcbiAgICAgIFtgJi4ke3NlbGVjdENsYXNzZXMubXVsdGlwbGV9YF06IHN0eWxlcy5tdWx0aXBsZVxuICAgIH1dO1xuICB9XG59KShuYXRpdmVTZWxlY3RTZWxlY3RTdHlsZXMsIHtcbiAgLy8gV2luIHNwZWNpZmljaXR5IG92ZXIgdGhlIGlucHV0IGJhc2VcbiAgW2AmLiR7c2VsZWN0Q2xhc3Nlcy5zZWxlY3R9YF06IHtcbiAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAvLyBSZXNldHMgZm9yIG11bHRpcGxlIHNlbGVjdCB3aXRoIGNoaXBzXG4gICAgbWluSGVpZ2h0OiAnMS40Mzc1ZW0nLFxuICAgIC8vIFJlcXVpcmVkIGZvciBzZWxlY3RcXHRleHQtZmllbGQgaGVpZ2h0IGNvbnNpc3RlbmN5XG4gICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICB9XG59KTtcbmNvbnN0IFNlbGVjdEljb24gPSBzdHlsZWQoJ3N2ZycsIHtcbiAgbmFtZTogJ011aVNlbGVjdCcsXG4gIHNsb3Q6ICdJY29uJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5pY29uLCBvd25lclN0YXRlLnZhcmlhbnQgJiYgc3R5bGVzW2BpY29uJHtjYXBpdGFsaXplKG93bmVyU3RhdGUudmFyaWFudCl9YF0sIG93bmVyU3RhdGUub3BlbiAmJiBzdHlsZXMuaWNvbk9wZW5dO1xuICB9XG59KShuYXRpdmVTZWxlY3RJY29uU3R5bGVzKTtcbmNvbnN0IFNlbGVjdE5hdGl2ZUlucHV0ID0gc3R5bGVkKCdpbnB1dCcsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gc2xvdFNob3VsZEZvcndhcmRQcm9wKHByb3ApICYmIHByb3AgIT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aVNlbGVjdCcsXG4gIHNsb3Q6ICdOYXRpdmVJbnB1dCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLm5hdGl2ZUlucHV0XG59KSh7XG4gIGJvdHRvbTogMCxcbiAgbGVmdDogMCxcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIG9wYWNpdHk6IDAsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgd2lkdGg6ICcxMDAlJyxcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCdcbn0pO1xuZnVuY3Rpb24gYXJlRXF1YWxWYWx1ZXMoYSwgYikge1xuICBpZiAodHlwZW9mIGIgPT09ICdvYmplY3QnICYmIGIgIT09IG51bGwpIHtcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgfVxuXG4gIC8vIFRoZSB2YWx1ZSBjb3VsZCBiZSBhIG51bWJlciwgdGhlIERPTSB3aWxsIHN0cmluZ2lmeSBpdCBhbnl3YXkuXG4gIHJldHVybiBTdHJpbmcoYSkgPT09IFN0cmluZyhiKTtcbn1cbmZ1bmN0aW9uIGlzRW1wdHkoZGlzcGxheSkge1xuICByZXR1cm4gZGlzcGxheSA9PSBudWxsIHx8IHR5cGVvZiBkaXNwbGF5ID09PSAnc3RyaW5nJyAmJiAhZGlzcGxheS50cmltKCk7XG59XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICB2YXJpYW50LFxuICAgIGRpc2FibGVkLFxuICAgIG11bHRpcGxlLFxuICAgIG9wZW4sXG4gICAgZXJyb3JcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHNlbGVjdDogWydzZWxlY3QnLCB2YXJpYW50LCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBtdWx0aXBsZSAmJiAnbXVsdGlwbGUnLCBlcnJvciAmJiAnZXJyb3InXSxcbiAgICBpY29uOiBbJ2ljb24nLCBgaWNvbiR7Y2FwaXRhbGl6ZSh2YXJpYW50KX1gLCBvcGVuICYmICdpY29uT3BlbicsIGRpc2FibGVkICYmICdkaXNhYmxlZCddLFxuICAgIG5hdGl2ZUlucHV0OiBbJ25hdGl2ZUlucHV0J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRTZWxlY3RVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG59O1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IFNlbGVjdElucHV0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gU2VsZWN0SW5wdXQocHJvcHMsIHJlZikge1xuICB2YXIgX01lbnVQcm9wcyRzbG90UHJvcHM7XG4gIGNvbnN0IHtcbiAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogYXJpYURlc2NyaWJlZGJ5LFxuICAgICAgJ2FyaWEtbGFiZWwnOiBhcmlhTGFiZWwsXG4gICAgICBhdXRvRm9jdXMsXG4gICAgICBhdXRvV2lkdGgsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRlZmF1bHRPcGVuLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBkaXNwbGF5RW1wdHksXG4gICAgICBlcnJvciA9IGZhbHNlLFxuICAgICAgSWNvbkNvbXBvbmVudCxcbiAgICAgIGlucHV0UmVmOiBpbnB1dFJlZlByb3AsXG4gICAgICBsYWJlbElkLFxuICAgICAgTWVudVByb3BzID0ge30sXG4gICAgICBtdWx0aXBsZSxcbiAgICAgIG5hbWUsXG4gICAgICBvbkJsdXIsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG9uQ2xvc2UsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25PcGVuLFxuICAgICAgb3Blbjogb3BlblByb3AsXG4gICAgICByZWFkT25seSxcbiAgICAgIHJlbmRlclZhbHVlLFxuICAgICAgU2VsZWN0RGlzcGxheVByb3BzID0ge30sXG4gICAgICB0YWJJbmRleDogdGFiSW5kZXhQcm9wXG4gICAgICAvLyBjYXRjaGluZyBgdHlwZWAgZnJvbSBJbnB1dCB3aGljaCBtYWtlcyBubyBzZW5zZSBmb3IgU2VsZWN0SW5wdXRcbiAgICAgICxcblxuICAgICAgdmFsdWU6IHZhbHVlUHJvcCxcbiAgICAgIHZhcmlhbnQgPSAnc3RhbmRhcmQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVTdGF0ZV0gPSB1c2VDb250cm9sbGVkKHtcbiAgICBjb250cm9sbGVkOiB2YWx1ZVByb3AsXG4gICAgZGVmYXVsdDogZGVmYXVsdFZhbHVlLFxuICAgIG5hbWU6ICdTZWxlY3QnXG4gIH0pO1xuICBjb25zdCBbb3BlblN0YXRlLCBzZXRPcGVuU3RhdGVdID0gdXNlQ29udHJvbGxlZCh7XG4gICAgY29udHJvbGxlZDogb3BlblByb3AsXG4gICAgZGVmYXVsdDogZGVmYXVsdE9wZW4sXG4gICAgbmFtZTogJ1NlbGVjdCdcbiAgfSk7XG4gIGNvbnN0IGlucHV0UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBkaXNwbGF5UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBbZGlzcGxheU5vZGUsIHNldERpc3BsYXlOb2RlXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCB7XG4gICAgY3VycmVudDogaXNPcGVuQ29udHJvbGxlZFxuICB9ID0gUmVhY3QudXNlUmVmKG9wZW5Qcm9wICE9IG51bGwpO1xuICBjb25zdCBbbWVudU1pbldpZHRoU3RhdGUsIHNldE1lbnVNaW5XaWR0aFN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlKCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYocmVmLCBpbnB1dFJlZlByb3ApO1xuICBjb25zdCBoYW5kbGVEaXNwbGF5UmVmID0gUmVhY3QudXNlQ2FsbGJhY2sobm9kZSA9PiB7XG4gICAgZGlzcGxheVJlZi5jdXJyZW50ID0gbm9kZTtcbiAgICBpZiAobm9kZSkge1xuICAgICAgc2V0RGlzcGxheU5vZGUobm9kZSk7XG4gICAgfVxuICB9LCBbXSk7XG4gIGNvbnN0IGFuY2hvckVsZW1lbnQgPSBkaXNwbGF5Tm9kZSA9PSBudWxsID8gdm9pZCAwIDogZGlzcGxheU5vZGUucGFyZW50Tm9kZTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShoYW5kbGVSZWYsICgpID0+ICh7XG4gICAgZm9jdXM6ICgpID0+IHtcbiAgICAgIGRpc3BsYXlSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH0sXG4gICAgbm9kZTogaW5wdXRSZWYuY3VycmVudCxcbiAgICB2YWx1ZVxuICB9KSwgW3ZhbHVlXSk7XG5cbiAgLy8gUmVzaXplIG1lbnUgb24gYGRlZmF1bHRPcGVuYCBhdXRvbWF0aWMgdG9nZ2xlLlxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkZWZhdWx0T3BlbiAmJiBvcGVuU3RhdGUgJiYgZGlzcGxheU5vZGUgJiYgIWlzT3BlbkNvbnRyb2xsZWQpIHtcbiAgICAgIHNldE1lbnVNaW5XaWR0aFN0YXRlKGF1dG9XaWR0aCA/IG51bGwgOiBhbmNob3JFbGVtZW50LmNsaWVudFdpZHRoKTtcbiAgICAgIGRpc3BsYXlSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtkaXNwbGF5Tm9kZSwgYXV0b1dpZHRoXSk7XG4gIC8vIGBpc09wZW5Db250cm9sbGVkYCBpcyBpZ25vcmVkIGJlY2F1c2UgdGhlIGNvbXBvbmVudCBzaG91bGQgbmV2ZXIgc3dpdGNoIGJldHdlZW4gY29udHJvbGxlZCBhbmQgdW5jb250cm9sbGVkIG1vZGVzLlxuICAvLyBgZGVmYXVsdE9wZW5gIGFuZCBgb3BlblN0YXRlYCBhcmUgaWdub3JlZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBjYWxsYmFja3MuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGF1dG9Gb2N1cykge1xuICAgICAgZGlzcGxheVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICB9LCBbYXV0b0ZvY3VzXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFsYWJlbElkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBsYWJlbCA9IG93bmVyRG9jdW1lbnQoZGlzcGxheVJlZi5jdXJyZW50KS5nZXRFbGVtZW50QnlJZChsYWJlbElkKTtcbiAgICBpZiAobGFiZWwpIHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgIGlmIChnZXRTZWxlY3Rpb24oKS5pc0NvbGxhcHNlZCkge1xuICAgICAgICAgIGRpc3BsYXlSZWYuY3VycmVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgbGFiZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVyKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGxhYmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlcik7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9LCBbbGFiZWxJZF0pO1xuICBjb25zdCB1cGRhdGUgPSAob3BlbiwgZXZlbnQpID0+IHtcbiAgICBpZiAob3Blbikge1xuICAgICAgaWYgKG9uT3Blbikge1xuICAgICAgICBvbk9wZW4oZXZlbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob25DbG9zZSkge1xuICAgICAgb25DbG9zZShldmVudCk7XG4gICAgfVxuICAgIGlmICghaXNPcGVuQ29udHJvbGxlZCkge1xuICAgICAgc2V0TWVudU1pbldpZHRoU3RhdGUoYXV0b1dpZHRoID8gbnVsbCA6IGFuY2hvckVsZW1lbnQuY2xpZW50V2lkdGgpO1xuICAgICAgc2V0T3BlblN0YXRlKG9wZW4pO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlTW91c2VEb3duID0gZXZlbnQgPT4ge1xuICAgIC8vIElnbm9yZSBldmVyeXRoaW5nIGJ1dCBsZWZ0LWNsaWNrXG4gICAgaWYgKGV2ZW50LmJ1dHRvbiAhPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBIaWphY2sgdGhlIGRlZmF1bHQgZm9jdXMgYmVoYXZpb3IuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBkaXNwbGF5UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB1cGRhdGUodHJ1ZSwgZXZlbnQpO1xuICB9O1xuICBjb25zdCBoYW5kbGVDbG9zZSA9IGV2ZW50ID0+IHtcbiAgICB1cGRhdGUoZmFsc2UsIGV2ZW50KTtcbiAgfTtcbiAgY29uc3QgY2hpbGRyZW5BcnJheSA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pO1xuXG4gIC8vIFN1cHBvcnQgYXV0b2ZpbGwuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IGV2ZW50ID0+IHtcbiAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuQXJyYXkuZmluZChjaGlsZEl0ZW0gPT4gY2hpbGRJdGVtLnByb3BzLnZhbHVlID09PSBldmVudC50YXJnZXQudmFsdWUpO1xuICAgIGlmIChjaGlsZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFZhbHVlU3RhdGUoY2hpbGQucHJvcHMudmFsdWUpO1xuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgb25DaGFuZ2UoZXZlbnQsIGNoaWxkKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUl0ZW1DbGljayA9IGNoaWxkID0+IGV2ZW50ID0+IHtcbiAgICBsZXQgbmV3VmFsdWU7XG5cbiAgICAvLyBXZSB1c2UgdGhlIHRhYmluZGV4IGF0dHJpYnV0ZSB0byBzaWduYWwgdGhlIGF2YWlsYWJsZSBvcHRpb25zLlxuICAgIGlmICghZXZlbnQuY3VycmVudFRhcmdldC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICBuZXdWYWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUuc2xpY2UoKSA6IFtdO1xuICAgICAgY29uc3QgaXRlbUluZGV4ID0gdmFsdWUuaW5kZXhPZihjaGlsZC5wcm9wcy52YWx1ZSk7XG4gICAgICBpZiAoaXRlbUluZGV4ID09PSAtMSkge1xuICAgICAgICBuZXdWYWx1ZS5wdXNoKGNoaWxkLnByb3BzLnZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1ZhbHVlLnNwbGljZShpdGVtSW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdWYWx1ZSA9IGNoaWxkLnByb3BzLnZhbHVlO1xuICAgIH1cbiAgICBpZiAoY2hpbGQucHJvcHMub25DbGljaykge1xuICAgICAgY2hpbGQucHJvcHMub25DbGljayhldmVudCk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgIHNldFZhbHVlU3RhdGUobmV3VmFsdWUpO1xuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIC8vIFJlZGVmaW5lIHRhcmdldCB0byBhbGxvdyBuYW1lIGFuZCB2YWx1ZSB0byBiZSByZWFkLlxuICAgICAgICAvLyBUaGlzIGFsbG93cyBzZWFtbGVzcyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBtb3N0IHBvcHVsYXIgZm9ybSBsaWJyYXJpZXMuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvaXNzdWVzLzEzNDg1I2lzc3VlY29tbWVudC02NzYwNDg0OTJcbiAgICAgICAgLy8gQ2xvbmUgdGhlIGV2ZW50IHRvIG5vdCBvdmVycmlkZSBgdGFyZ2V0YCBvZiB0aGUgb3JpZ2luYWwgZXZlbnQuXG4gICAgICAgIGNvbnN0IG5hdGl2ZUV2ZW50ID0gZXZlbnQubmF0aXZlRXZlbnQgfHwgZXZlbnQ7XG4gICAgICAgIGNvbnN0IGNsb25lZEV2ZW50ID0gbmV3IG5hdGl2ZUV2ZW50LmNvbnN0cnVjdG9yKG5hdGl2ZUV2ZW50LnR5cGUsIG5hdGl2ZUV2ZW50KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNsb25lZEV2ZW50LCAndGFyZ2V0Jywge1xuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB2YWx1ZTogbmV3VmFsdWUsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgb25DaGFuZ2UoY2xvbmVkRXZlbnQsIGNoaWxkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFtdWx0aXBsZSkge1xuICAgICAgdXBkYXRlKGZhbHNlLCBldmVudCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gZXZlbnQgPT4ge1xuICAgIGlmICghcmVhZE9ubHkpIHtcbiAgICAgIGNvbnN0IHZhbGlkS2V5cyA9IFsnICcsICdBcnJvd1VwJywgJ0Fycm93RG93bicsXG4gICAgICAvLyBUaGUgbmF0aXZlIHNlbGVjdCBkb2Vzbid0IHJlc3BvbmQgdG8gZW50ZXIgb24gbWFjT1MsIGJ1dCBpdCdzIHJlY29tbWVuZGVkIGJ5XG4gICAgICAvLyBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL3BhdHRlcm5zL2NvbWJvYm94L2V4YW1wbGVzL2NvbWJvYm94LXNlbGVjdC1vbmx5L1xuICAgICAgJ0VudGVyJ107XG4gICAgICBpZiAodmFsaWRLZXlzLmluZGV4T2YoZXZlbnQua2V5KSAhPT0gLTEpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdXBkYXRlKHRydWUsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IG9wZW4gPSBkaXNwbGF5Tm9kZSAhPT0gbnVsbCAmJiBvcGVuU3RhdGU7XG4gIGNvbnN0IGhhbmRsZUJsdXIgPSBldmVudCA9PiB7XG4gICAgLy8gaWYgb3BlbiBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25cbiAgICBpZiAoIW9wZW4gJiYgb25CbHVyKSB7XG4gICAgICAvLyBQcmVhY3Qgc3VwcG9ydCwgdGFyZ2V0IGlzIHJlYWQgb25seSBwcm9wZXJ0eSBvbiBhIG5hdGl2ZSBldmVudC5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldmVudCwgJ3RhcmdldCcsIHtcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgbmFtZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIG9uQmx1cihldmVudCk7XG4gICAgfVxuICB9O1xuICBkZWxldGUgb3RoZXJbJ2FyaWEtaW52YWxpZCddO1xuICBsZXQgZGlzcGxheTtcbiAgbGV0IGRpc3BsYXlTaW5nbGU7XG4gIGNvbnN0IGRpc3BsYXlNdWx0aXBsZSA9IFtdO1xuICBsZXQgY29tcHV0ZURpc3BsYXkgPSBmYWxzZTtcbiAgbGV0IGZvdW5kTWF0Y2ggPSBmYWxzZTtcblxuICAvLyBObyBuZWVkIHRvIGRpc3BsYXkgYW55IHZhbHVlIGlmIHRoZSBmaWVsZCBpcyBlbXB0eS5cbiAgaWYgKGlzRmlsbGVkKHtcbiAgICB2YWx1ZVxuICB9KSB8fCBkaXNwbGF5RW1wdHkpIHtcbiAgICBpZiAocmVuZGVyVmFsdWUpIHtcbiAgICAgIGRpc3BsYXkgPSByZW5kZXJWYWx1ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXB1dGVEaXNwbGF5ID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgY29uc3QgaXRlbXMgPSBjaGlsZHJlbkFycmF5Lm1hcChjaGlsZCA9PiB7XG4gICAgaWYgKCEgLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoaXNGcmFnbWVudChjaGlsZCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbXCJNVUk6IFRoZSBTZWxlY3QgY29tcG9uZW50IGRvZXNuJ3QgYWNjZXB0IGEgRnJhZ21lbnQgYXMgYSBjaGlsZC5cIiwgJ0NvbnNpZGVyIHByb3ZpZGluZyBhbiBhcnJheSBpbnN0ZWFkLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHNlbGVjdGVkO1xuICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogVGhlIFxcYHZhbHVlXFxgIHByb3AgbXVzdCBiZSBhbiBhcnJheSB3aGVuIHVzaW5nIHRoZSBcXGBTZWxlY3RcXGAgY29tcG9uZW50IHdpdGggXFxgbXVsdGlwbGVcXGAuYCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMikpO1xuICAgICAgfVxuICAgICAgc2VsZWN0ZWQgPSB2YWx1ZS5zb21lKHYgPT4gYXJlRXF1YWxWYWx1ZXModiwgY2hpbGQucHJvcHMudmFsdWUpKTtcbiAgICAgIGlmIChzZWxlY3RlZCAmJiBjb21wdXRlRGlzcGxheSkge1xuICAgICAgICBkaXNwbGF5TXVsdGlwbGUucHVzaChjaGlsZC5wcm9wcy5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGVjdGVkID0gYXJlRXF1YWxWYWx1ZXModmFsdWUsIGNoaWxkLnByb3BzLnZhbHVlKTtcbiAgICAgIGlmIChzZWxlY3RlZCAmJiBjb21wdXRlRGlzcGxheSkge1xuICAgICAgICBkaXNwbGF5U2luZ2xlID0gY2hpbGQucHJvcHMuY2hpbGRyZW47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgZm91bmRNYXRjaCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAnYXJpYS1zZWxlY3RlZCc6IHNlbGVjdGVkID8gJ3RydWUnIDogJ2ZhbHNlJyxcbiAgICAgIG9uQ2xpY2s6IGhhbmRsZUl0ZW1DbGljayhjaGlsZCksXG4gICAgICBvbktleVVwOiBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICcgJykge1xuICAgICAgICAgIC8vIG90aGVyd2lzZSBvdXIgTWVudUl0ZW1zIGRpc3BhdGNoZXMgYSBjbGljayBldmVudFxuICAgICAgICAgIC8vIGl0J3Mgbm90IGJlaGF2aW9yIG9mIHRoZSBuYXRpdmUgPG9wdGlvbj4gYW5kIGNhdXNlc1xuICAgICAgICAgIC8vIHRoZSBzZWxlY3QgdG8gY2xvc2UgaW1tZWRpYXRlbHkgc2luY2Ugd2Ugb3BlbiBvbiBzcGFjZSBrZXlkb3duXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hpbGQucHJvcHMub25LZXlVcCkge1xuICAgICAgICAgIGNoaWxkLnByb3BzLm9uS2V5VXAoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcm9sZTogJ29wdGlvbicsXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAvLyBUaGUgdmFsdWUgaXMgbW9zdCBsaWtlbHkgbm90IGEgdmFsaWQgSFRNTCBhdHRyaWJ1dGUuXG4gICAgICAnZGF0YS12YWx1ZSc6IGNoaWxkLnByb3BzLnZhbHVlIC8vIEluc3RlYWQsIHdlIHByb3ZpZGUgaXQgYXMgYSBkYXRhIGF0dHJpYnV0ZS5cbiAgICB9KTtcbiAgfSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICghZm91bmRNYXRjaCAmJiAhbXVsdGlwbGUgJiYgdmFsdWUgIT09ICcnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGNoaWxkcmVuQXJyYXkubWFwKGNoaWxkID0+IGNoaWxkLnByb3BzLnZhbHVlKTtcbiAgICAgICAgY29uc29sZS53YXJuKFtgTVVJOiBZb3UgaGF2ZSBwcm92aWRlZCBhbiBvdXQtb2YtcmFuZ2UgdmFsdWUgXFxgJHt2YWx1ZX1cXGAgZm9yIHRoZSBzZWxlY3QgJHtuYW1lID8gYChuYW1lPVwiJHtuYW1lfVwiKSBgIDogJyd9Y29tcG9uZW50LmAsIFwiQ29uc2lkZXIgcHJvdmlkaW5nIGEgdmFsdWUgdGhhdCBtYXRjaGVzIG9uZSBvZiB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgb3IgJycuXCIsIGBUaGUgYXZhaWxhYmxlIHZhbHVlcyBhcmUgJHt2YWx1ZXMuZmlsdGVyKHggPT4geCAhPSBudWxsKS5tYXAoeCA9PiBgXFxgJHt4fVxcYGApLmpvaW4oJywgJykgfHwgJ1wiXCInfS5gXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfSwgW2ZvdW5kTWF0Y2gsIGNoaWxkcmVuQXJyYXksIG11bHRpcGxlLCBuYW1lLCB2YWx1ZV0pO1xuICB9XG4gIGlmIChjb21wdXRlRGlzcGxheSkge1xuICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgaWYgKGRpc3BsYXlNdWx0aXBsZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGlzcGxheSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXNwbGF5ID0gZGlzcGxheU11bHRpcGxlLnJlZHVjZSgob3V0cHV0LCBjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICBvdXRwdXQucHVzaChjaGlsZCk7XG4gICAgICAgICAgaWYgKGluZGV4IDwgZGlzcGxheU11bHRpcGxlLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKCcsICcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9LCBbXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpc3BsYXkgPSBkaXNwbGF5U2luZ2xlO1xuICAgIH1cbiAgfVxuXG4gIC8vIEF2b2lkIHBlcmZvcm1pbmcgYSBsYXlvdXQgY29tcHV0YXRpb24gaW4gdGhlIHJlbmRlciBtZXRob2QuXG4gIGxldCBtZW51TWluV2lkdGggPSBtZW51TWluV2lkdGhTdGF0ZTtcbiAgaWYgKCFhdXRvV2lkdGggJiYgaXNPcGVuQ29udHJvbGxlZCAmJiBkaXNwbGF5Tm9kZSkge1xuICAgIG1lbnVNaW5XaWR0aCA9IGFuY2hvckVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIH1cbiAgbGV0IHRhYkluZGV4O1xuICBpZiAodHlwZW9mIHRhYkluZGV4UHJvcCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0YWJJbmRleCA9IHRhYkluZGV4UHJvcDtcbiAgfSBlbHNlIHtcbiAgICB0YWJJbmRleCA9IGRpc2FibGVkID8gbnVsbCA6IDA7XG4gIH1cbiAgY29uc3QgYnV0dG9uSWQgPSBTZWxlY3REaXNwbGF5UHJvcHMuaWQgfHwgKG5hbWUgPyBgbXVpLWNvbXBvbmVudC1zZWxlY3QtJHtuYW1lfWAgOiB1bmRlZmluZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgdmFyaWFudCxcbiAgICB2YWx1ZSxcbiAgICBvcGVuLFxuICAgIGVycm9yXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IHBhcGVyUHJvcHMgPSBfZXh0ZW5kcyh7fSwgTWVudVByb3BzLlBhcGVyUHJvcHMsIChfTWVudVByb3BzJHNsb3RQcm9wcyA9IE1lbnVQcm9wcy5zbG90UHJvcHMpID09IG51bGwgPyB2b2lkIDAgOiBfTWVudVByb3BzJHNsb3RQcm9wcy5wYXBlcik7XG4gIGNvbnN0IGxpc3Rib3hJZCA9IHVzZUlkKCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9fanN4KFNlbGVjdFNlbGVjdCwgX2V4dGVuZHMoe1xuICAgICAgcmVmOiBoYW5kbGVEaXNwbGF5UmVmLFxuICAgICAgdGFiSW5kZXg6IHRhYkluZGV4LFxuICAgICAgcm9sZTogXCJjb21ib2JveFwiLFxuICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IGxpc3Rib3hJZCxcbiAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkaXNhYmxlZCA/ICd0cnVlJyA6IHVuZGVmaW5lZCxcbiAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBvcGVuID8gJ3RydWUnIDogJ2ZhbHNlJyxcbiAgICAgIFwiYXJpYS1oYXNwb3B1cFwiOiBcImxpc3Rib3hcIixcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwsXG4gICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBbbGFiZWxJZCwgYnV0dG9uSWRdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJykgfHwgdW5kZWZpbmVkLFxuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGFyaWFEZXNjcmliZWRieSxcbiAgICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICAgIG9uTW91c2VEb3duOiBkaXNhYmxlZCB8fCByZWFkT25seSA/IG51bGwgOiBoYW5kbGVNb3VzZURvd24sXG4gICAgICBvbkJsdXI6IGhhbmRsZUJsdXIsXG4gICAgICBvbkZvY3VzOiBvbkZvY3VzXG4gICAgfSwgU2VsZWN0RGlzcGxheVByb3BzLCB7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KFNlbGVjdERpc3BsYXlQcm9wcy5jbGFzc05hbWUsIGNsYXNzZXMuc2VsZWN0LCBjbGFzc05hbWUpXG4gICAgICAvLyBUaGUgaWQgaXMgcmVxdWlyZWQgZm9yIHByb3BlciBhMTF5XG4gICAgICAsXG4gICAgICBpZDogYnV0dG9uSWQsXG4gICAgICBjaGlsZHJlbjogaXNFbXB0eShkaXNwbGF5KSA/IC8vIG5vdHJhbnNsYXRlIG5lZWRlZCB3aGlsZSBHb29nbGUgVHJhbnNsYXRlIHdpbGwgbm90IGZpeCB6ZXJvLXdpZHRoIHNwYWNlIGlzc3VlXG4gICAgICBfc3BhbiB8fCAoX3NwYW4gPSAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwibm90cmFuc2xhdGVcIixcbiAgICAgICAgY2hpbGRyZW46IFwiXFx1MjAwQlwiXG4gICAgICB9KSkgOiBkaXNwbGF5XG4gICAgfSkpLCAvKiNfX1BVUkVfXyovX2pzeChTZWxlY3ROYXRpdmVJbnB1dCwgX2V4dGVuZHMoe1xuICAgICAgXCJhcmlhLWludmFsaWRcIjogZXJyb3IsXG4gICAgICB2YWx1ZTogQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5qb2luKCcsJykgOiB2YWx1ZSxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICByZWY6IGlucHV0UmVmLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlLFxuICAgICAgb25DaGFuZ2U6IGhhbmRsZUNoYW5nZSxcbiAgICAgIHRhYkluZGV4OiAtMSxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5uYXRpdmVJbnB1dCxcbiAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0sIG90aGVyKSksIC8qI19fUFVSRV9fKi9fanN4KFNlbGVjdEljb24sIHtcbiAgICAgIGFzOiBJY29uQ29tcG9uZW50LFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmljb24sXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSksIC8qI19fUFVSRV9fKi9fanN4KE1lbnUsIF9leHRlbmRzKHtcbiAgICAgIGlkOiBgbWVudS0ke25hbWUgfHwgJyd9YCxcbiAgICAgIGFuY2hvckVsOiBhbmNob3JFbGVtZW50LFxuICAgICAgb3Blbjogb3BlbixcbiAgICAgIG9uQ2xvc2U6IGhhbmRsZUNsb3NlLFxuICAgICAgYW5jaG9yT3JpZ2luOiB7XG4gICAgICAgIHZlcnRpY2FsOiAnYm90dG9tJyxcbiAgICAgICAgaG9yaXpvbnRhbDogJ2NlbnRlcidcbiAgICAgIH0sXG4gICAgICB0cmFuc2Zvcm1PcmlnaW46IHtcbiAgICAgICAgdmVydGljYWw6ICd0b3AnLFxuICAgICAgICBob3Jpem9udGFsOiAnY2VudGVyJ1xuICAgICAgfVxuICAgIH0sIE1lbnVQcm9wcywge1xuICAgICAgTWVudUxpc3RQcm9wczogX2V4dGVuZHMoe1xuICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogbGFiZWxJZCxcbiAgICAgICAgcm9sZTogJ2xpc3Rib3gnLFxuICAgICAgICAnYXJpYS1tdWx0aXNlbGVjdGFibGUnOiBtdWx0aXBsZSA/ICd0cnVlJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgZGlzYWJsZUxpc3RXcmFwOiB0cnVlLFxuICAgICAgICBpZDogbGlzdGJveElkXG4gICAgICB9LCBNZW51UHJvcHMuTWVudUxpc3RQcm9wcyksXG4gICAgICBzbG90UHJvcHM6IF9leHRlbmRzKHt9LCBNZW51UHJvcHMuc2xvdFByb3BzLCB7XG4gICAgICAgIHBhcGVyOiBfZXh0ZW5kcyh7fSwgcGFwZXJQcm9wcywge1xuICAgICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBtaW5XaWR0aDogbWVudU1pbldpZHRoXG4gICAgICAgICAgfSwgcGFwZXJQcm9wcyAhPSBudWxsID8gcGFwZXJQcm9wcy5zdHlsZSA6IG51bGwpXG4gICAgICAgIH0pXG4gICAgICB9KSxcbiAgICAgIGNoaWxkcmVuOiBpdGVtc1xuICAgIH0pKV1cbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFNlbGVjdElucHV0LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gICdhcmlhLWRlc2NyaWJlZGJ5JzogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gICdhcmlhLWxhYmVsJzogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB3aWR0aCBvZiB0aGUgcG9wb3ZlciB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2V0IGFjY29yZGluZyB0byB0aGUgaXRlbXMgaW5zaWRlIHRoZVxuICAgKiBtZW51LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBhdCBsZWFzdCB0aGUgd2lkdGggb2YgdGhlIHNlbGVjdCBpbnB1dC5cbiAgICovXG4gIGF1dG9XaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uIGVsZW1lbnRzIHRvIHBvcHVsYXRlIHRoZSBzZWxlY3Qgd2l0aC5cbiAgICogQ2FuIGJlIHNvbWUgYDxNZW51SXRlbT5gIGVsZW1lbnRzLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBDU1MgY2xhc3MgbmFtZSBvZiB0aGUgc2VsZWN0IGVsZW1lbnQuXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgdG9nZ2xlZCBvbiBtb3VudC4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBvcGVuIHN0YXRlIGlzIG5vdCBjb250cm9sbGVkLlxuICAgKiBZb3UgY2FuIG9ubHkgdXNlIGl0IHdoZW4gdGhlIGBuYXRpdmVgIHByb3AgaXMgYGZhbHNlYCAoZGVmYXVsdCkuXG4gICAqL1xuICBkZWZhdWx0T3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHNlbGVjdCBpcyBkaXNhYmxlZC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHNlbGVjdGVkIGl0ZW0gaXMgZGlzcGxheWVkIGV2ZW4gaWYgaXRzIHZhbHVlIGlzIGVtcHR5LlxuICAgKi9cbiAgZGlzcGxheUVtcHR5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBzZWxlY3QgaW5wdXRgIHdpbGwgaW5kaWNhdGUgYW4gZXJyb3IuXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0aGF0IGRpc3BsYXlzIHRoZSBhcnJvdy5cbiAgICovXG4gIEljb25Db21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogSW1wZXJhdGl2ZSBoYW5kbGUgaW1wbGVtZW50aW5nIGB7IHZhbHVlOiBULCBub2RlOiBIVE1MRWxlbWVudCwgZm9jdXMoKTogdm9pZCB9YFxuICAgKiBFcXVpdmFsZW50IHRvIGByZWZgXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiBhbiBlbGVtZW50IHRoYXQgYWN0cyBhcyBhbiBhZGRpdGlvbmFsIGxhYmVsLiBUaGUgU2VsZWN0IHdpbGxcbiAgICogYmUgbGFiZWxsZWQgYnkgdGhlIGFkZGl0aW9uYWwgbGFiZWwgYW5kIHRoZSBzZWxlY3RlZCB2YWx1ZS5cbiAgICovXG4gIGxhYmVsSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYE1lbnVgXSgvbWF0ZXJpYWwtdWkvYXBpL21lbnUvKSBlbGVtZW50LlxuICAgKi9cbiAgTWVudVByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogSWYgYHRydWVgLCBgdmFsdWVgIG11c3QgYmUgYW4gYXJyYXkgYW5kIHRoZSBtZW51IHdpbGwgc3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb25zLlxuICAgKi9cbiAgbXVsdGlwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBzZWxlY3RgIG9yIGhpZGRlbiBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gYSBtZW51IGl0ZW0gaXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoYW55KS5cbiAgICogQHBhcmFtIHtvYmplY3R9IFtjaGlsZF0gVGhlIHJlYWN0IGVsZW1lbnQgdGhhdCB3YXMgc2VsZWN0ZWQuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgY2xvc2VkLlxuICAgKiBVc2UgaW4gY29udHJvbGxlZCBtb2RlIChzZWUgb3BlbikuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgb3BlbmVkLlxuICAgKiBVc2UgaW4gY29udHJvbGxlZCBtb2RlIChzZWUgb3BlbikuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIG9uT3BlbjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgc2VsZWN0ZWQgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZSBUaGUgYHZhbHVlYCBwcm92aWRlZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyB7UmVhY3ROb2RlfVxuICAgKi9cbiAgcmVuZGVyVmFsdWU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgY2xpY2thYmxlIGRpdiBlbGVtZW50LlxuICAgKi9cbiAgU2VsZWN0RGlzcGxheVByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdGFiSW5kZXg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgdmFsdWUuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ3N0YW5kYXJkJywgJ291dGxpbmVkJywgJ2ZpbGxlZCddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFNlbGVjdElucHV0OyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpU3ZnSWNvbicsIHNsb3QpO1xufVxuY29uc3Qgc3ZnSWNvbkNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlTdmdJY29uJywgWydyb290JywgJ2NvbG9yUHJpbWFyeScsICdjb2xvclNlY29uZGFyeScsICdjb2xvckFjdGlvbicsICdjb2xvckVycm9yJywgJ2NvbG9yRGlzYWJsZWQnLCAnZm9udFNpemVJbmhlcml0JywgJ2ZvbnRTaXplU21hbGwnLCAnZm9udFNpemVNZWRpdW0nLCAnZm9udFNpemVMYXJnZSddKTtcbmV4cG9ydCBkZWZhdWx0IHN2Z0ljb25DbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRcIiwgXCJmb250U2l6ZVwiLCBcImh0bWxDb2xvclwiLCBcImluaGVyaXRWaWV3Qm94XCIsIFwidGl0bGVBY2Nlc3NcIiwgXCJ2aWV3Qm94XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyB9IGZyb20gJy4vc3ZnSWNvbkNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb2xvcixcbiAgICBmb250U2l6ZSxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBjb2xvciAhPT0gJ2luaGVyaXQnICYmIGBjb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YCwgYGZvbnRTaXplJHtjYXBpdGFsaXplKGZvbnRTaXplKX1gXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFN2Z0ljb25VdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IFN2Z0ljb25Sb290ID0gc3R5bGVkKCdzdmcnLCB7XG4gIG5hbWU6ICdNdWlTdmdJY29uJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiBzdHlsZXNbYGNvbG9yJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuY29sb3IpfWBdLCBzdHlsZXNbYGZvbnRTaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuZm9udFNpemUpfWBdXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgdmFyIF90aGVtZSR0cmFuc2l0aW9ucywgX3RoZW1lJHRyYW5zaXRpb25zJGNyLCBfdGhlbWUkdHJhbnNpdGlvbnMyLCBfdGhlbWUkdHlwb2dyYXBoeSwgX3RoZW1lJHR5cG9ncmFwaHkkcHhULCBfdGhlbWUkdHlwb2dyYXBoeTIsIF90aGVtZSR0eXBvZ3JhcGh5MiRweCwgX3RoZW1lJHR5cG9ncmFwaHkzLCBfdGhlbWUkdHlwb2dyYXBoeTMkcHgsIF9wYWxldHRlJG93bmVyU3RhdGUkYywgX3BhbGV0dGUsIF9wYWxldHRlMiwgX3BhbGV0dGUzO1xuICByZXR1cm4ge1xuICAgIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgICB3aWR0aDogJzFlbScsXG4gICAgaGVpZ2h0OiAnMWVtJyxcbiAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAvLyB0aGUgPHN2Zz4gd2lsbCBkZWZpbmUgdGhlIHByb3BlcnR5IHRoYXQgaGFzIGBjdXJyZW50Q29sb3JgXG4gICAgLy8gZm9yIGV4YW1wbGUgaGVyb2ljb25zIHVzZXMgZmlsbD1cIm5vbmVcIiBhbmQgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICBmaWxsOiBvd25lclN0YXRlLmhhc1N2Z0FzQ2hpbGQgPyB1bmRlZmluZWQgOiAnY3VycmVudENvbG9yJyxcbiAgICBmbGV4U2hyaW5rOiAwLFxuICAgIHRyYW5zaXRpb246IChfdGhlbWUkdHJhbnNpdGlvbnMgPSB0aGVtZS50cmFuc2l0aW9ucykgPT0gbnVsbCB8fCAoX3RoZW1lJHRyYW5zaXRpb25zJGNyID0gX3RoZW1lJHRyYW5zaXRpb25zLmNyZWF0ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0cmFuc2l0aW9ucyRjci5jYWxsKF90aGVtZSR0cmFuc2l0aW9ucywgJ2ZpbGwnLCB7XG4gICAgICBkdXJhdGlvbjogKF90aGVtZSR0cmFuc2l0aW9uczIgPSB0aGVtZS50cmFuc2l0aW9ucykgPT0gbnVsbCB8fCAoX3RoZW1lJHRyYW5zaXRpb25zMiA9IF90aGVtZSR0cmFuc2l0aW9uczIuZHVyYXRpb24pID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHJhbnNpdGlvbnMyLnNob3J0ZXJcbiAgICB9KSxcbiAgICBmb250U2l6ZToge1xuICAgICAgaW5oZXJpdDogJ2luaGVyaXQnLFxuICAgICAgc21hbGw6ICgoX3RoZW1lJHR5cG9ncmFwaHkgPSB0aGVtZS50eXBvZ3JhcGh5KSA9PSBudWxsIHx8IChfdGhlbWUkdHlwb2dyYXBoeSRweFQgPSBfdGhlbWUkdHlwb2dyYXBoeS5weFRvUmVtKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHR5cG9ncmFwaHkkcHhULmNhbGwoX3RoZW1lJHR5cG9ncmFwaHksIDIwKSkgfHwgJzEuMjVyZW0nLFxuICAgICAgbWVkaXVtOiAoKF90aGVtZSR0eXBvZ3JhcGh5MiA9IHRoZW1lLnR5cG9ncmFwaHkpID09IG51bGwgfHwgKF90aGVtZSR0eXBvZ3JhcGh5MiRweCA9IF90aGVtZSR0eXBvZ3JhcGh5Mi5weFRvUmVtKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHR5cG9ncmFwaHkyJHB4LmNhbGwoX3RoZW1lJHR5cG9ncmFwaHkyLCAyNCkpIHx8ICcxLjVyZW0nLFxuICAgICAgbGFyZ2U6ICgoX3RoZW1lJHR5cG9ncmFwaHkzID0gdGhlbWUudHlwb2dyYXBoeSkgPT0gbnVsbCB8fCAoX3RoZW1lJHR5cG9ncmFwaHkzJHB4ID0gX3RoZW1lJHR5cG9ncmFwaHkzLnB4VG9SZW0pID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHlwb2dyYXBoeTMkcHguY2FsbChfdGhlbWUkdHlwb2dyYXBoeTMsIDM1KSkgfHwgJzIuMTg3NXJlbSdcbiAgICB9W293bmVyU3RhdGUuZm9udFNpemVdLFxuICAgIC8vIFRPRE8gdjUgZGVwcmVjYXRlLCB2NiByZW1vdmUgZm9yIHN4XG4gICAgY29sb3I6IChfcGFsZXR0ZSRvd25lclN0YXRlJGMgPSAoX3BhbGV0dGUgPSAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZSkgPT0gbnVsbCB8fCAoX3BhbGV0dGUgPSBfcGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYWxldHRlLm1haW4pICE9IG51bGwgPyBfcGFsZXR0ZSRvd25lclN0YXRlJGMgOiB7XG4gICAgICBhY3Rpb246IChfcGFsZXR0ZTIgPSAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZSkgPT0gbnVsbCB8fCAoX3BhbGV0dGUyID0gX3BhbGV0dGUyLmFjdGlvbikgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYWxldHRlMi5hY3RpdmUsXG4gICAgICBkaXNhYmxlZDogKF9wYWxldHRlMyA9ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlKSA9PSBudWxsIHx8IChfcGFsZXR0ZTMgPSBfcGFsZXR0ZTMuYWN0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogX3BhbGV0dGUzLmRpc2FibGVkLFxuICAgICAgaW5oZXJpdDogdW5kZWZpbmVkXG4gICAgfVtvd25lclN0YXRlLmNvbG9yXVxuICB9O1xufSk7XG5jb25zdCBTdmdJY29uID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gU3ZnSWNvbihpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlTdmdJY29uJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb2xvciA9ICdpbmhlcml0JyxcbiAgICAgIGNvbXBvbmVudCA9ICdzdmcnLFxuICAgICAgZm9udFNpemUgPSAnbWVkaXVtJyxcbiAgICAgIGh0bWxDb2xvcixcbiAgICAgIGluaGVyaXRWaWV3Qm94ID0gZmFsc2UsXG4gICAgICB0aXRsZUFjY2VzcyxcbiAgICAgIHZpZXdCb3ggPSAnMCAwIDI0IDI0J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBoYXNTdmdBc0NoaWxkID0gLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJiBjaGlsZHJlbi50eXBlID09PSAnc3ZnJztcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIGNvbXBvbmVudCxcbiAgICBmb250U2l6ZSxcbiAgICBpbnN0YW5jZUZvbnRTaXplOiBpblByb3BzLmZvbnRTaXplLFxuICAgIGluaGVyaXRWaWV3Qm94LFxuICAgIHZpZXdCb3gsXG4gICAgaGFzU3ZnQXNDaGlsZFxuICB9KTtcbiAgY29uc3QgbW9yZSA9IHt9O1xuICBpZiAoIWluaGVyaXRWaWV3Qm94KSB7XG4gICAgbW9yZS52aWV3Qm94ID0gdmlld0JveDtcbiAgfVxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoU3ZnSWNvblJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgZm9jdXNhYmxlOiBcImZhbHNlXCIsXG4gICAgY29sb3I6IGh0bWxDb2xvcixcbiAgICBcImFyaWEtaGlkZGVuXCI6IHRpdGxlQWNjZXNzID8gdW5kZWZpbmVkIDogdHJ1ZSxcbiAgICByb2xlOiB0aXRsZUFjY2VzcyA/ICdpbWcnIDogdW5kZWZpbmVkLFxuICAgIHJlZjogcmVmXG4gIH0sIG1vcmUsIG90aGVyLCBoYXNTdmdBc0NoaWxkICYmIGNoaWxkcmVuLnByb3BzLCB7XG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjaGlsZHJlbjogW2hhc1N2Z0FzQ2hpbGQgPyBjaGlsZHJlbi5wcm9wcy5jaGlsZHJlbiA6IGNoaWxkcmVuLCB0aXRsZUFjY2VzcyA/IC8qI19fUFVSRV9fKi9fanN4KFwidGl0bGVcIiwge1xuICAgICAgY2hpbGRyZW46IHRpdGxlQWNjZXNzXG4gICAgfSkgOiBudWxsXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFN2Z0ljb24ucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogTm9kZSBwYXNzZWQgaW50byB0aGUgU1ZHIGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogWW91IGNhbiB1c2UgdGhlIGBodG1sQ29sb3JgIHByb3AgdG8gYXBwbHkgYSBjb2xvciBhdHRyaWJ1dGUgdG8gdGhlIFNWRyBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCAnaW5oZXJpdCdcbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2luaGVyaXQnLCAnYWN0aW9uJywgJ2Rpc2FibGVkJywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFRoZSBmb250U2l6ZSBhcHBsaWVkIHRvIHRoZSBpY29uLiBEZWZhdWx0cyB0byAyNHB4LCBidXQgY2FuIGJlIGNvbmZpZ3VyZSB0byBpbmhlcml0IGZvbnQgc2l6ZS5cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICovXG4gIGZvbnRTaXplOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2luaGVyaXQnLCAnbGFyZ2UnLCAnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBBcHBsaWVzIGEgY29sb3IgYXR0cmlidXRlIHRvIHRoZSBTVkcgZWxlbWVudC5cbiAgICovXG4gIGh0bWxDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJvb3Qgbm9kZSB3aWxsIGluaGVyaXQgdGhlIGN1c3RvbSBgY29tcG9uZW50YCdzIHZpZXdCb3ggYW5kIHRoZSBgdmlld0JveGBcbiAgICogcHJvcCB3aWxsIGJlIGlnbm9yZWQuXG4gICAqIFVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIHJlZmVyZW5jZSBhIGN1c3RvbSBgY29tcG9uZW50YCBhbmQgaGF2ZSBgU3ZnSWNvbmAgcGFzcyB0aGF0XG4gICAqIGBjb21wb25lbnRgJ3Mgdmlld0JveCB0byB0aGUgcm9vdCBub2RlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaW5oZXJpdFZpZXdCb3g6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNoYXBlLXJlbmRlcmluZyBhdHRyaWJ1dGUuIFRoZSBiZWhhdmlvciBvZiB0aGUgZGlmZmVyZW50IG9wdGlvbnMgaXMgZGVzY3JpYmVkIG9uIHRoZVxuICAgKiBbTUROIFdlYiBEb2NzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TVkcvQXR0cmlidXRlL3NoYXBlLXJlbmRlcmluZykuXG4gICAqIElmIHlvdSBhcmUgaGF2aW5nIGlzc3VlcyB3aXRoIGJsdXJyeSBpY29ucyB5b3Ugc2hvdWxkIGludmVzdGlnYXRlIHRoaXMgcHJvcC5cbiAgICovXG4gIHNoYXBlUmVuZGVyaW5nOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogUHJvdmlkZXMgYSBodW1hbi1yZWFkYWJsZSB0aXRsZSBmb3IgdGhlIGVsZW1lbnQgdGhhdCBjb250YWlucyBpdC5cbiAgICogaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy1hY2Nlc3MvI0VxdWl2YWxlbnRcbiAgICovXG4gIHRpdGxlQWNjZXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQWxsb3dzIHlvdSB0byByZWRlZmluZSB3aGF0IHRoZSBjb29yZGluYXRlcyB3aXRob3V0IHVuaXRzIG1lYW4gaW5zaWRlIGFuIFNWRyBlbGVtZW50LlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIFNWRyBlbGVtZW50IGlzIDUwMCAod2lkdGgpIGJ5IDIwMCAoaGVpZ2h0KSxcbiAgICogYW5kIHlvdSBwYXNzIHZpZXdCb3g9XCIwIDAgNTAgMjBcIixcbiAgICogdGhpcyBtZWFucyB0aGF0IHRoZSBjb29yZGluYXRlcyBpbnNpZGUgdGhlIFNWRyB3aWxsIGdvIGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lciAoMCwwKVxuICAgKiB0byBib3R0b20gcmlnaHQgKDUwLDIwKSBhbmQgZWFjaCB1bml0IHdpbGwgYmUgd29ydGggMTBweC5cbiAgICogQGRlZmF1bHQgJzAgMCAyNCAyNCdcbiAgICovXG4gIHZpZXdCb3g6IFByb3BUeXBlcy5zdHJpbmdcbn0gOiB2b2lkIDA7XG5TdmdJY29uLm11aU5hbWUgPSAnU3ZnSWNvbic7XG5leHBvcnQgZGVmYXVsdCBTdmdJY29uOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZVN2Z0ljb24gZnJvbSAnLi4vLi4vdXRpbHMvY3JlYXRlU3ZnSWNvbic7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVN2Z0ljb24oIC8qI19fUFVSRV9fKi9fanN4KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTcgMTBsNSA1IDUtNXpcIlxufSksICdBcnJvd0Ryb3BEb3duJyk7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTdmdJY29uIGZyb20gJy4uL1N2Z0ljb24nO1xuXG4vKipcbiAqIFByaXZhdGUgbW9kdWxlIHJlc2VydmVkIGZvciBAbXVpIHBhY2thZ2VzLlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU3ZnSWNvbihwYXRoLCBkaXNwbGF5TmFtZSkge1xuICBmdW5jdGlvbiBDb21wb25lbnQocHJvcHMsIHJlZikge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChTdmdJY29uLCBfZXh0ZW5kcyh7XG4gICAgICBcImRhdGEtdGVzdGlkXCI6IGAke2Rpc3BsYXlOYW1lfUljb25gLFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBwcm9wcywge1xuICAgICAgY2hpbGRyZW46IHBhdGhcbiAgICB9KSk7XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBOZWVkIHRvIHNldCBgZGlzcGxheU5hbWVgIG9uIHRoZSBpbm5lciBjb21wb25lbnQgZm9yIFJlYWN0Lm1lbW8uXG4gICAgLy8gUmVhY3QgcHJpb3IgdG8gMTYuMTQgaWdub3JlcyBgZGlzcGxheU5hbWVgIG9uIHRoZSB3cmFwcGVyLlxuICAgIENvbXBvbmVudC5kaXNwbGF5TmFtZSA9IGAke2Rpc3BsYXlOYW1lfUljb25gO1xuICB9XG4gIENvbXBvbmVudC5tdWlOYW1lID0gU3ZnSWNvbi5tdWlOYW1lO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0Lm1lbW8oIC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKENvbXBvbmVudCkpO1xufSIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImF1dG9XaWR0aFwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3Nlc1wiLCBcImNsYXNzTmFtZVwiLCBcImRlZmF1bHRPcGVuXCIsIFwiZGlzcGxheUVtcHR5XCIsIFwiSWNvbkNvbXBvbmVudFwiLCBcImlkXCIsIFwiaW5wdXRcIiwgXCJpbnB1dFByb3BzXCIsIFwibGFiZWxcIiwgXCJsYWJlbElkXCIsIFwiTWVudVByb3BzXCIsIFwibXVsdGlwbGVcIiwgXCJuYXRpdmVcIiwgXCJvbkNsb3NlXCIsIFwib25PcGVuXCIsIFwib3BlblwiLCBcInJlbmRlclZhbHVlXCIsIFwiU2VsZWN0RGlzcGxheVByb3BzXCIsIFwidmFyaWFudFwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcInJvb3RcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBTZWxlY3RJbnB1dCBmcm9tICcuL1NlbGVjdElucHV0JztcbmltcG9ydCBmb3JtQ29udHJvbFN0YXRlIGZyb20gJy4uL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sU3RhdGUnO1xuaW1wb3J0IHVzZUZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sJztcbmltcG9ydCBBcnJvd0Ryb3BEb3duSWNvbiBmcm9tICcuLi9pbnRlcm5hbC9zdmctaWNvbnMvQXJyb3dEcm9wRG93bic7XG5pbXBvcnQgSW5wdXQgZnJvbSAnLi4vSW5wdXQnO1xuaW1wb3J0IE5hdGl2ZVNlbGVjdElucHV0IGZyb20gJy4uL05hdGl2ZVNlbGVjdC9OYXRpdmVTZWxlY3RJbnB1dCc7XG5pbXBvcnQgRmlsbGVkSW5wdXQgZnJvbSAnLi4vRmlsbGVkSW5wdXQnO1xuaW1wb3J0IE91dGxpbmVkSW5wdXQgZnJvbSAnLi4vT3V0bGluZWRJbnB1dCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIHJldHVybiBjbGFzc2VzO1xufTtcbmNvbnN0IHN0eWxlZFJvb3RDb25maWcgPSB7XG4gIG5hbWU6ICdNdWlTZWxlY3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290LFxuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgJiYgcHJvcCAhPT0gJ3ZhcmlhbnQnLFxuICBzbG90OiAnUm9vdCdcbn07XG5jb25zdCBTdHlsZWRJbnB1dCA9IHN0eWxlZChJbnB1dCwgc3R5bGVkUm9vdENvbmZpZykoJycpO1xuY29uc3QgU3R5bGVkT3V0bGluZWRJbnB1dCA9IHN0eWxlZChPdXRsaW5lZElucHV0LCBzdHlsZWRSb290Q29uZmlnKSgnJyk7XG5jb25zdCBTdHlsZWRGaWxsZWRJbnB1dCA9IHN0eWxlZChGaWxsZWRJbnB1dCwgc3R5bGVkUm9vdENvbmZpZykoJycpO1xuY29uc3QgU2VsZWN0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gU2VsZWN0KGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgbmFtZTogJ011aVNlbGVjdCcsXG4gICAgcHJvcHM6IGluUHJvcHNcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGF1dG9XaWR0aCA9IGZhbHNlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc2VzOiBjbGFzc2VzUHJvcCA9IHt9LFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgZGVmYXVsdE9wZW4gPSBmYWxzZSxcbiAgICAgIGRpc3BsYXlFbXB0eSA9IGZhbHNlLFxuICAgICAgSWNvbkNvbXBvbmVudCA9IEFycm93RHJvcERvd25JY29uLFxuICAgICAgaWQsXG4gICAgICBpbnB1dCxcbiAgICAgIGlucHV0UHJvcHMsXG4gICAgICBsYWJlbCxcbiAgICAgIGxhYmVsSWQsXG4gICAgICBNZW51UHJvcHMsXG4gICAgICBtdWx0aXBsZSA9IGZhbHNlLFxuICAgICAgbmF0aXZlID0gZmFsc2UsXG4gICAgICBvbkNsb3NlLFxuICAgICAgb25PcGVuLFxuICAgICAgb3BlbixcbiAgICAgIHJlbmRlclZhbHVlLFxuICAgICAgU2VsZWN0RGlzcGxheVByb3BzLFxuICAgICAgdmFyaWFudDogdmFyaWFudFByb3AgPSAnb3V0bGluZWQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGlucHV0Q29tcG9uZW50ID0gbmF0aXZlID8gTmF0aXZlU2VsZWN0SW5wdXQgOiBTZWxlY3RJbnB1dDtcbiAgY29uc3QgbXVpRm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbCgpO1xuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsndmFyaWFudCcsICdlcnJvciddXG4gIH0pO1xuICBjb25zdCB2YXJpYW50ID0gZmNzLnZhcmlhbnQgfHwgdmFyaWFudFByb3A7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICB2YXJpYW50LFxuICAgIGNsYXNzZXM6IGNsYXNzZXNQcm9wXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IHJlc3RPZkNsYXNzZXMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShjbGFzc2VzLCBfZXhjbHVkZWQyKTtcbiAgY29uc3QgSW5wdXRDb21wb25lbnQgPSBpbnB1dCB8fCB7XG4gICAgc3RhbmRhcmQ6IC8qI19fUFVSRV9fKi9fanN4KFN0eWxlZElucHV0LCB7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSksXG4gICAgb3V0bGluZWQ6IC8qI19fUFVSRV9fKi9fanN4KFN0eWxlZE91dGxpbmVkSW5wdXQsIHtcbiAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgICB9KSxcbiAgICBmaWxsZWQ6IC8qI19fUFVSRV9fKi9fanN4KFN0eWxlZEZpbGxlZElucHV0LCB7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSlcbiAgfVt2YXJpYW50XTtcbiAgY29uc3QgaW5wdXRDb21wb25lbnRSZWYgPSB1c2VGb3JrUmVmKHJlZiwgSW5wdXRDb21wb25lbnQucmVmKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoSW5wdXRDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIC8vIE1vc3Qgb2YgdGhlIGxvZ2ljIGlzIGltcGxlbWVudGVkIGluIGBTZWxlY3RJbnB1dGAuXG4gICAgICAvLyBUaGUgYFNlbGVjdGAgY29tcG9uZW50IGlzIGEgc2ltcGxlIEFQSSB3cmFwcGVyIHRvIGV4cG9zZSBzb21ldGhpbmcgYmV0dGVyIHRvIHBsYXkgd2l0aC5cbiAgICAgIGlucHV0Q29tcG9uZW50LFxuICAgICAgaW5wdXRQcm9wczogX2V4dGVuZHMoe1xuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgZXJyb3I6IGZjcy5lcnJvcixcbiAgICAgICAgSWNvbkNvbXBvbmVudCxcbiAgICAgICAgdmFyaWFudCxcbiAgICAgICAgdHlwZTogdW5kZWZpbmVkLFxuICAgICAgICAvLyBXZSByZW5kZXIgYSBzZWxlY3QuIFdlIGNhbiBpZ25vcmUgdGhlIHR5cGUgcHJvdmlkZWQgYnkgdGhlIGBJbnB1dGAuXG4gICAgICAgIG11bHRpcGxlXG4gICAgICB9LCBuYXRpdmUgPyB7XG4gICAgICAgIGlkXG4gICAgICB9IDoge1xuICAgICAgICBhdXRvV2lkdGgsXG4gICAgICAgIGRlZmF1bHRPcGVuLFxuICAgICAgICBkaXNwbGF5RW1wdHksXG4gICAgICAgIGxhYmVsSWQsXG4gICAgICAgIE1lbnVQcm9wcyxcbiAgICAgICAgb25DbG9zZSxcbiAgICAgICAgb25PcGVuLFxuICAgICAgICBvcGVuLFxuICAgICAgICByZW5kZXJWYWx1ZSxcbiAgICAgICAgU2VsZWN0RGlzcGxheVByb3BzOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgaWRcbiAgICAgICAgfSwgU2VsZWN0RGlzcGxheVByb3BzKVxuICAgICAgfSwgaW5wdXRQcm9wcywge1xuICAgICAgICBjbGFzc2VzOiBpbnB1dFByb3BzID8gZGVlcG1lcmdlKHJlc3RPZkNsYXNzZXMsIGlucHV0UHJvcHMuY2xhc3NlcykgOiByZXN0T2ZDbGFzc2VzXG4gICAgICB9LCBpbnB1dCA/IGlucHV0LnByb3BzLmlucHV0UHJvcHMgOiB7fSlcbiAgICB9LCAobXVsdGlwbGUgJiYgbmF0aXZlIHx8IGRpc3BsYXlFbXB0eSkgJiYgdmFyaWFudCA9PT0gJ291dGxpbmVkJyA/IHtcbiAgICAgIG5vdGNoZWQ6IHRydWVcbiAgICB9IDoge30sIHtcbiAgICAgIHJlZjogaW5wdXRDb21wb25lbnRSZWYsXG4gICAgICBjbGFzc05hbWU6IGNsc3goSW5wdXRDb21wb25lbnQucHJvcHMuY2xhc3NOYW1lLCBjbGFzc05hbWUsIGNsYXNzZXMucm9vdClcbiAgICB9LCAhaW5wdXQgJiYge1xuICAgICAgdmFyaWFudFxuICAgIH0sIG90aGVyKSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFNlbGVjdC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB3aWR0aCBvZiB0aGUgcG9wb3ZlciB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2V0IGFjY29yZGluZyB0byB0aGUgaXRlbXMgaW5zaWRlIHRoZVxuICAgKiBtZW51LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBhdCBsZWFzdCB0aGUgd2lkdGggb2YgdGhlIHNlbGVjdCBpbnB1dC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGF1dG9XaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uIGVsZW1lbnRzIHRvIHBvcHVsYXRlIHRoZSBzZWxlY3Qgd2l0aC5cbiAgICogQ2FuIGJlIHNvbWUgYE1lbnVJdGVtYCB3aGVuIGBuYXRpdmVgIGlzIGZhbHNlIGFuZCBgb3B0aW9uYCB3aGVuIGBuYXRpdmVgIGlzIHRydWUuXG4gICAqXG4gICAqIOKaoO+4j1RoZSBgTWVudUl0ZW1gIGVsZW1lbnRzICoqbXVzdCoqIGJlIGRpcmVjdCBkZXNjZW5kYW50cyB3aGVuIGBuYXRpdmVgIGlzIGZhbHNlLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBpbml0aWFsbHkgb3Blbi4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBvcGVuIHN0YXRlIGlzIG5vdCBjb250cm9sbGVkIChpLmUuIHRoZSBgb3BlbmAgcHJvcCBpcyBub3QgZGVmaW5lZCkuXG4gICAqIFlvdSBjYW4gb25seSB1c2UgaXQgd2hlbiB0aGUgYG5hdGl2ZWAgcHJvcCBpcyBgZmFsc2VgIChkZWZhdWx0KS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlZmF1bHRPcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIHZhbHVlIGlzIGRpc3BsYXllZCBldmVuIGlmIG5vIGl0ZW1zIGFyZSBzZWxlY3RlZC5cbiAgICpcbiAgICogSW4gb3JkZXIgdG8gZGlzcGxheSBhIG1lYW5pbmdmdWwgdmFsdWUsIGEgZnVuY3Rpb24gY2FuIGJlIHBhc3NlZCB0byB0aGUgYHJlbmRlclZhbHVlYCBwcm9wIHdoaWNoXG4gICAqIHJldHVybnMgdGhlIHZhbHVlIHRvIGJlIGRpc3BsYXllZCB3aGVuIG5vIGl0ZW1zIGFyZSBzZWxlY3RlZC5cbiAgICpcbiAgICog4pqg77iPIFdoZW4gdXNpbmcgdGhpcyBwcm9wLCBtYWtlIHN1cmUgdGhlIGxhYmVsIGRvZXNuJ3Qgb3ZlcmxhcCB3aXRoIHRoZSBlbXB0eSBkaXNwbGF5ZWQgdmFsdWUuXG4gICAqIFRoZSBsYWJlbCBzaG91bGQgZWl0aGVyIGJlIGhpZGRlbiBvciBmb3JjZWQgdG8gYSBzaHJ1bmsgc3RhdGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNwbGF5RW1wdHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGljb24gdGhhdCBkaXNwbGF5cyB0aGUgYXJyb3cuXG4gICAqIEBkZWZhdWx0IEFycm93RHJvcERvd25JY29uXG4gICAqL1xuICBJY29uQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBUaGUgYGlkYCBvZiB0aGUgd3JhcHBlciBlbGVtZW50IG9yIHRoZSBgc2VsZWN0YCBlbGVtZW50IHdoZW4gYG5hdGl2ZWAuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEFuIGBJbnB1dGAgZWxlbWVudDsgZG9lcyBub3QgaGF2ZSB0byBiZSBhIG1hdGVyaWFsLXVpIHNwZWNpZmljIGBJbnB1dGAuXG4gICAqL1xuICBpbnB1dDogUHJvcFR5cGVzLmVsZW1lbnQsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogV2hlbiBgbmF0aXZlYCBpcyBgdHJ1ZWAsIHRoZSBhdHRyaWJ1dGVzIGFyZSBhcHBsaWVkIG9uIHRoZSBgc2VsZWN0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFNlZSBbT3V0bGluZWRJbnB1dCNsYWJlbF0oL21hdGVyaWFsLXVpL2FwaS9vdXRsaW5lZC1pbnB1dC8jcHJvcHMpXG4gICAqL1xuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgYW4gZWxlbWVudCB0aGF0IGFjdHMgYXMgYW4gYWRkaXRpb25hbCBsYWJlbC4gVGhlIFNlbGVjdCB3aWxsXG4gICAqIGJlIGxhYmVsbGVkIGJ5IHRoZSBhZGRpdGlvbmFsIGxhYmVsIGFuZCB0aGUgc2VsZWN0ZWQgdmFsdWUuXG4gICAqL1xuICBsYWJlbElkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BNZW51YF0oL21hdGVyaWFsLXVpL2FwaS9tZW51LykgZWxlbWVudC5cbiAgICovXG4gIE1lbnVQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYHZhbHVlYCBtdXN0IGJlIGFuIGFycmF5IGFuZCB0aGUgbWVudSB3aWxsIHN1cHBvcnQgbXVsdGlwbGUgc2VsZWN0aW9ucy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB1c2VzIGEgbmF0aXZlIGBzZWxlY3RgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBuYXRpdmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiBhIG1lbnUgaXRlbSBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHtTZWxlY3RDaGFuZ2VFdmVudDxWYWx1ZT59IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChhbnkpLlxuICAgKiAqKldhcm5pbmcqKjogVGhpcyBpcyBhIGdlbmVyaWMgZXZlbnQsIG5vdCBhIGNoYW5nZSBldmVudCwgdW5sZXNzIHRoZSBjaGFuZ2UgZXZlbnQgaXMgY2F1c2VkIGJ5IGJyb3dzZXIgYXV0b2ZpbGwuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbY2hpbGRdIFRoZSByZWFjdCBlbGVtZW50IHRoYXQgd2FzIHNlbGVjdGVkIHdoZW4gYG5hdGl2ZWAgaXMgYGZhbHNlYCAoZGVmYXVsdCkuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgY2xvc2VkLlxuICAgKiBVc2UgaXQgaW4gZWl0aGVyIGNvbnRyb2xsZWQgKHNlZSB0aGUgYG9wZW5gIHByb3ApLCBvciB1bmNvbnRyb2xsZWQgbW9kZSAodG8gZGV0ZWN0IHdoZW4gdGhlIFNlbGVjdCBjb2xsYXBzZXMpLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBvcGVuZWQuXG4gICAqIFVzZSBpdCBpbiBlaXRoZXIgY29udHJvbGxlZCAoc2VlIHRoZSBgb3BlbmAgcHJvcCksIG9yIHVuY29udHJvbGxlZCBtb2RlICh0byBkZXRlY3Qgd2hlbiB0aGUgU2VsZWN0IGV4cGFuZHMpLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqL1xuICBvbk9wZW46IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKiBZb3UgY2FuIG9ubHkgdXNlIGl0IHdoZW4gdGhlIGBuYXRpdmVgIHByb3AgaXMgYGZhbHNlYCAoZGVmYXVsdCkuXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgc2VsZWN0ZWQgdmFsdWUuXG4gICAqIFlvdSBjYW4gb25seSB1c2UgaXQgd2hlbiB0aGUgYG5hdGl2ZWAgcHJvcCBpcyBgZmFsc2VgIChkZWZhdWx0KS5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IHZhbHVlIFRoZSBgdmFsdWVgIHByb3ZpZGVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIHtSZWFjdE5vZGV9XG4gICAqL1xuICByZW5kZXJWYWx1ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBjbGlja2FibGUgZGl2IGVsZW1lbnQuXG4gICAqL1xuICBTZWxlY3REaXNwbGF5UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgYGlucHV0YCB2YWx1ZS4gUHJvdmlkaW5nIGFuIGVtcHR5IHN0cmluZyB3aWxsIHNlbGVjdCBubyBvcHRpb25zLlxuICAgKiBTZXQgdG8gYW4gZW1wdHkgc3RyaW5nIGAnJ2AgaWYgeW91IGRvbid0IHdhbnQgYW55IG9mIHRoZSBhdmFpbGFibGUgb3B0aW9ucyB0byBiZSBzZWxlY3RlZC5cbiAgICpcbiAgICogSWYgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCBpdCBtdXN0IGhhdmUgcmVmZXJlbmNlIGVxdWFsaXR5IHdpdGggdGhlIG9wdGlvbiBpbiBvcmRlciB0byBiZSBzZWxlY3RlZC5cbiAgICogSWYgdGhlIHZhbHVlIGlzIG5vdCBhbiBvYmplY3QsIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gbXVzdCBtYXRjaCB3aXRoIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9wdGlvbiBpbiBvcmRlciB0byBiZSBzZWxlY3RlZC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWycnXSksIFByb3BUeXBlcy5hbnldKSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgJ291dGxpbmVkJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJ10pXG59IDogdm9pZCAwO1xuU2VsZWN0Lm11aU5hbWUgPSAnU2VsZWN0JztcbmV4cG9ydCBkZWZhdWx0IFNlbGVjdDsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRGaWVsZFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpVGV4dEZpZWxkJywgc2xvdCk7XG59XG5jb25zdCB0ZXh0RmllbGRDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpVGV4dEZpZWxkJywgWydyb290J10pO1xuZXhwb3J0IGRlZmF1bHQgdGV4dEZpZWxkQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhdXRvQ29tcGxldGVcIiwgXCJhdXRvRm9jdXNcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcIkZvcm1IZWxwZXJUZXh0UHJvcHNcIiwgXCJmdWxsV2lkdGhcIiwgXCJoZWxwZXJUZXh0XCIsIFwiaWRcIiwgXCJJbnB1dExhYmVsUHJvcHNcIiwgXCJpbnB1dFByb3BzXCIsIFwiSW5wdXRQcm9wc1wiLCBcImlucHV0UmVmXCIsIFwibGFiZWxcIiwgXCJtYXhSb3dzXCIsIFwibWluUm93c1wiLCBcIm11bHRpbGluZVwiLCBcIm5hbWVcIiwgXCJvbkJsdXJcIiwgXCJvbkNoYW5nZVwiLCBcIm9uRm9jdXNcIiwgXCJwbGFjZWhvbGRlclwiLCBcInJlcXVpcmVkXCIsIFwicm93c1wiLCBcInNlbGVjdFwiLCBcIlNlbGVjdFByb3BzXCIsIFwidHlwZVwiLCBcInZhbHVlXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB1c2VJZCBmcm9tICdAbXVpL3V0aWxzL3VzZUlkJztcbmltcG9ydCByZWZUeXBlIGZyb20gJ0BtdWkvdXRpbHMvcmVmVHlwZSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IElucHV0IGZyb20gJy4uL0lucHV0JztcbmltcG9ydCBGaWxsZWRJbnB1dCBmcm9tICcuLi9GaWxsZWRJbnB1dCc7XG5pbXBvcnQgT3V0bGluZWRJbnB1dCBmcm9tICcuLi9PdXRsaW5lZElucHV0JztcbmltcG9ydCBJbnB1dExhYmVsIGZyb20gJy4uL0lucHV0TGFiZWwnO1xuaW1wb3J0IEZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sJztcbmltcG9ydCBGb3JtSGVscGVyVGV4dCBmcm9tICcuLi9Gb3JtSGVscGVyVGV4dCc7XG5pbXBvcnQgU2VsZWN0IGZyb20gJy4uL1NlbGVjdCc7XG5pbXBvcnQgeyBnZXRUZXh0RmllbGRVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3RleHRGaWVsZENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHZhcmlhbnRDb21wb25lbnQgPSB7XG4gIHN0YW5kYXJkOiBJbnB1dCxcbiAgZmlsbGVkOiBGaWxsZWRJbnB1dCxcbiAgb3V0bGluZWQ6IE91dGxpbmVkSW5wdXRcbn07XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRUZXh0RmllbGRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IFRleHRGaWVsZFJvb3QgPSBzdHlsZWQoRm9ybUNvbnRyb2wsIHtcbiAgbmFtZTogJ011aVRleHRGaWVsZCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoe30pO1xuXG4vKipcbiAqIFRoZSBgVGV4dEZpZWxkYCBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIgZm9yIHRoZSBtb3N0IGNvbW1vbiBjYXNlcyAoODAlKS5cbiAqIEl0IGNhbm5vdCBiZSBhbGwgdGhpbmdzIHRvIGFsbCBwZW9wbGUsIG90aGVyd2lzZSB0aGUgQVBJIHdvdWxkIGdyb3cgb3V0IG9mIGNvbnRyb2wuXG4gKlxuICogIyMgQWR2YW5jZWQgQ29uZmlndXJhdGlvblxuICpcbiAqIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhhdCB0aGUgdGV4dCBmaWVsZCBpcyBhIHNpbXBsZSBhYnN0cmFjdGlvblxuICogb24gdG9wIG9mIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czpcbiAqXG4gKiAtIFtGb3JtQ29udHJvbF0oL21hdGVyaWFsLXVpL2FwaS9mb3JtLWNvbnRyb2wvKVxuICogLSBbSW5wdXRMYWJlbF0oL21hdGVyaWFsLXVpL2FwaS9pbnB1dC1sYWJlbC8pXG4gKiAtIFtGaWxsZWRJbnB1dF0oL21hdGVyaWFsLXVpL2FwaS9maWxsZWQtaW5wdXQvKVxuICogLSBbT3V0bGluZWRJbnB1dF0oL21hdGVyaWFsLXVpL2FwaS9vdXRsaW5lZC1pbnB1dC8pXG4gKiAtIFtJbnB1dF0oL21hdGVyaWFsLXVpL2FwaS9pbnB1dC8pXG4gKiAtIFtGb3JtSGVscGVyVGV4dF0oL21hdGVyaWFsLXVpL2FwaS9mb3JtLWhlbHBlci10ZXh0LylcbiAqXG4gKiBJZiB5b3Ugd2lzaCB0byBhbHRlciB0aGUgcHJvcHMgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LCB5b3UgY2FuIGRvIHNvIGFzIGZvbGxvd3M6XG4gKlxuICogYGBganN4XG4gKiBjb25zdCBpbnB1dFByb3BzID0ge1xuICogICBzdGVwOiAzMDAsXG4gKiB9O1xuICpcbiAqIHJldHVybiA8VGV4dEZpZWxkIGlkPVwidGltZVwiIHR5cGU9XCJ0aW1lXCIgaW5wdXRQcm9wcz17aW5wdXRQcm9wc30gLz47XG4gKiBgYGBcbiAqXG4gKiBGb3IgYWR2YW5jZWQgY2FzZXMsIHBsZWFzZSBsb29rIGF0IHRoZSBzb3VyY2Ugb2YgVGV4dEZpZWxkIGJ5IGNsaWNraW5nIG9uIHRoZVxuICogXCJFZGl0IHRoaXMgcGFnZVwiIGJ1dHRvbiBhYm92ZS4gQ29uc2lkZXIgZWl0aGVyOlxuICpcbiAqIC0gdXNpbmcgdGhlIHVwcGVyIGNhc2UgcHJvcHMgZm9yIHBhc3NpbmcgdmFsdWVzIGRpcmVjdGx5IHRvIHRoZSBjb21wb25lbnRzXG4gKiAtIHVzaW5nIHRoZSB1bmRlcmx5aW5nIGNvbXBvbmVudHMgZGlyZWN0bHkgYXMgc2hvd24gaW4gdGhlIGRlbW9zXG4gKi9cbmNvbnN0IFRleHRGaWVsZCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFRleHRGaWVsZChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlUZXh0RmllbGQnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhdXRvQ29tcGxldGUsXG4gICAgICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgICAgZXJyb3IgPSBmYWxzZSxcbiAgICAgIEZvcm1IZWxwZXJUZXh0UHJvcHMsXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIGhlbHBlclRleHQsXG4gICAgICBpZDogaWRPdmVycmlkZSxcbiAgICAgIElucHV0TGFiZWxQcm9wcyxcbiAgICAgIGlucHV0UHJvcHMsXG4gICAgICBJbnB1dFByb3BzLFxuICAgICAgaW5wdXRSZWYsXG4gICAgICBsYWJlbCxcbiAgICAgIG1heFJvd3MsXG4gICAgICBtaW5Sb3dzLFxuICAgICAgbXVsdGlsaW5lID0gZmFsc2UsXG4gICAgICBuYW1lLFxuICAgICAgb25CbHVyLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICBvbkZvY3VzLFxuICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICByZXF1aXJlZCA9IGZhbHNlLFxuICAgICAgcm93cyxcbiAgICAgIHNlbGVjdCA9IGZhbHNlLFxuICAgICAgU2VsZWN0UHJvcHMsXG4gICAgICB0eXBlLFxuICAgICAgdmFsdWUsXG4gICAgICB2YXJpYW50ID0gJ291dGxpbmVkJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgYXV0b0ZvY3VzLFxuICAgIGNvbG9yLFxuICAgIGRpc2FibGVkLFxuICAgIGVycm9yLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBtdWx0aWxpbmUsXG4gICAgcmVxdWlyZWQsXG4gICAgc2VsZWN0LFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoc2VsZWN0ICYmICFjaGlsZHJlbikge1xuICAgICAgY29uc29sZS5lcnJvcignTVVJOiBgY2hpbGRyZW5gIG11c3QgYmUgcGFzc2VkIHdoZW4gdXNpbmcgdGhlIGBUZXh0RmllbGRgIGNvbXBvbmVudCB3aXRoIGBzZWxlY3RgLicpO1xuICAgIH1cbiAgfVxuICBjb25zdCBJbnB1dE1vcmUgPSB7fTtcbiAgaWYgKHZhcmlhbnQgPT09ICdvdXRsaW5lZCcpIHtcbiAgICBpZiAoSW5wdXRMYWJlbFByb3BzICYmIHR5cGVvZiBJbnB1dExhYmVsUHJvcHMuc2hyaW5rICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgSW5wdXRNb3JlLm5vdGNoZWQgPSBJbnB1dExhYmVsUHJvcHMuc2hyaW5rO1xuICAgIH1cbiAgICBJbnB1dE1vcmUubGFiZWwgPSBsYWJlbDtcbiAgfVxuICBpZiAoc2VsZWN0KSB7XG4gICAgLy8gdW5zZXQgZGVmYXVsdHMgZnJvbSB0ZXh0Ym94IGlucHV0c1xuICAgIGlmICghU2VsZWN0UHJvcHMgfHwgIVNlbGVjdFByb3BzLm5hdGl2ZSkge1xuICAgICAgSW5wdXRNb3JlLmlkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBJbnB1dE1vcmVbJ2FyaWEtZGVzY3JpYmVkYnknXSA9IHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBpZCA9IHVzZUlkKGlkT3ZlcnJpZGUpO1xuICBjb25zdCBoZWxwZXJUZXh0SWQgPSBoZWxwZXJUZXh0ICYmIGlkID8gYCR7aWR9LWhlbHBlci10ZXh0YCA6IHVuZGVmaW5lZDtcbiAgY29uc3QgaW5wdXRMYWJlbElkID0gbGFiZWwgJiYgaWQgPyBgJHtpZH0tbGFiZWxgIDogdW5kZWZpbmVkO1xuICBjb25zdCBJbnB1dENvbXBvbmVudCA9IHZhcmlhbnRDb21wb25lbnRbdmFyaWFudF07XG4gIGNvbnN0IElucHV0RWxlbWVudCA9IC8qI19fUFVSRV9fKi9fanN4KElucHV0Q29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGhlbHBlclRleHRJZCxcbiAgICBhdXRvQ29tcGxldGU6IGF1dG9Db21wbGV0ZSxcbiAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyxcbiAgICBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSxcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICBtdWx0aWxpbmU6IG11bHRpbGluZSxcbiAgICBuYW1lOiBuYW1lLFxuICAgIHJvd3M6IHJvd3MsXG4gICAgbWF4Um93czogbWF4Um93cyxcbiAgICBtaW5Sb3dzOiBtaW5Sb3dzLFxuICAgIHR5cGU6IHR5cGUsXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIGlkOiBpZCxcbiAgICBpbnB1dFJlZjogaW5wdXRSZWYsXG4gICAgb25CbHVyOiBvbkJsdXIsXG4gICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgIG9uRm9jdXM6IG9uRm9jdXMsXG4gICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLFxuICAgIGlucHV0UHJvcHM6IGlucHV0UHJvcHNcbiAgfSwgSW5wdXRNb3JlLCBJbnB1dFByb3BzKSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoVGV4dEZpZWxkUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIGVycm9yOiBlcnJvcixcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICByZWY6IHJlZixcbiAgICByZXF1aXJlZDogcmVxdWlyZWQsXG4gICAgY29sb3I6IGNvbG9yLFxuICAgIHZhcmlhbnQ6IHZhcmlhbnQsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBbbGFiZWwgIT0gbnVsbCAmJiBsYWJlbCAhPT0gJycgJiYgLyojX19QVVJFX18qL19qc3goSW5wdXRMYWJlbCwgX2V4dGVuZHMoe1xuICAgICAgaHRtbEZvcjogaWQsXG4gICAgICBpZDogaW5wdXRMYWJlbElkXG4gICAgfSwgSW5wdXRMYWJlbFByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogbGFiZWxcbiAgICB9KSksIHNlbGVjdCA/IC8qI19fUFVSRV9fKi9fanN4KFNlbGVjdCwgX2V4dGVuZHMoe1xuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGhlbHBlclRleHRJZCxcbiAgICAgIGlkOiBpZCxcbiAgICAgIGxhYmVsSWQ6IGlucHV0TGFiZWxJZCxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGlucHV0OiBJbnB1dEVsZW1lbnRcbiAgICB9LCBTZWxlY3RQcm9wcywge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpIDogSW5wdXRFbGVtZW50LCBoZWxwZXJUZXh0ICYmIC8qI19fUFVSRV9fKi9fanN4KEZvcm1IZWxwZXJUZXh0LCBfZXh0ZW5kcyh7XG4gICAgICBpZDogaGVscGVyVGV4dElkXG4gICAgfSwgRm9ybUhlbHBlclRleHRQcm9wcywge1xuICAgICAgY2hpbGRyZW46IGhlbHBlclRleHRcbiAgICB9KSldXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVGV4dEZpZWxkLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBoZWxwcyB1c2VycyB0byBmaWxsIGZvcm1zIGZhc3RlciwgZXNwZWNpYWxseSBvbiBtb2JpbGUgZGV2aWNlcy5cbiAgICogVGhlIG5hbWUgY2FuIGJlIGNvbmZ1c2luZywgYXMgaXQncyBtb3JlIGxpa2UgYW4gYXV0b2ZpbGwuXG4gICAqIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91dCBpdCBbZm9sbG93aW5nIHRoZSBzcGVjaWZpY2F0aW9uXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNhdXRvZmlsbCkuXG4gICAqL1xuICBhdXRvQ29tcGxldGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgZm9jdXNlZCBkdXJpbmcgdGhlIGZpcnN0IG1vdW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBAZGVmYXVsdCAncHJpbWFyeSdcbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGRpc3BsYXllZCBpbiBhbiBlcnJvciBzdGF0ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgRm9ybUhlbHBlclRleHRgXSgvbWF0ZXJpYWwtdWkvYXBpL2Zvcm0taGVscGVyLXRleHQvKSBlbGVtZW50LlxuICAgKi9cbiAgRm9ybUhlbHBlclRleHRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGlucHV0IHdpbGwgdGFrZSB1cCB0aGUgZnVsbCB3aWR0aCBvZiBpdHMgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBoZWxwZXIgdGV4dCBjb250ZW50LlxuICAgKi9cbiAgaGVscGVyVGV4dDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogVXNlIHRoaXMgcHJvcCB0byBtYWtlIGBsYWJlbGAgYW5kIGBoZWxwZXJUZXh0YCBhY2Nlc3NpYmxlIGZvciBzY3JlZW4gcmVhZGVycy5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BJbnB1dExhYmVsYF0oL21hdGVyaWFsLXVpL2FwaS9pbnB1dC1sYWJlbC8pIGVsZW1lbnQuXG4gICAqIFBvaW50ZXIgZXZlbnRzIGxpa2UgYG9uQ2xpY2tgIGFyZSBlbmFibGVkIGlmIGFuZCBvbmx5IGlmIGBzaHJpbmtgIGlzIGB0cnVlYC5cbiAgICovXG4gIElucHV0TGFiZWxQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFtBdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjQXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIElucHV0IGVsZW1lbnQuXG4gICAqIEl0IHdpbGwgYmUgYSBbYEZpbGxlZElucHV0YF0oL21hdGVyaWFsLXVpL2FwaS9maWxsZWQtaW5wdXQvKSxcbiAgICogW2BPdXRsaW5lZElucHV0YF0oL21hdGVyaWFsLXVpL2FwaS9vdXRsaW5lZC1pbnB1dC8pIG9yIFtgSW5wdXRgXSgvbWF0ZXJpYWwtdWkvYXBpL2lucHV0LylcbiAgICogY29tcG9uZW50IGRlcGVuZGluZyBvbiB0aGUgYHZhcmlhbnRgIHByb3AgdmFsdWUuXG4gICAqL1xuICBJbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBUaGUgbGFiZWwgY29udGVudC5cbiAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAgb3IgYG5vcm1hbGAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcgb2YgdGhpcyBhbmQgY29udGFpbmVkIGNvbXBvbmVudHMuXG4gICAqIEBkZWZhdWx0ICdub25lJ1xuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdub25lJywgJ25vcm1hbCddKSxcbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtYXhSb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWluUm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIGB0ZXh0YXJlYWAgZWxlbWVudCBpcyByZW5kZXJlZCBpbnN0ZWFkIG9mIGFuIGlucHV0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbXVsdGlsaW5lOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE5hbWUgYXR0cmlidXRlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIHNob3J0IGhpbnQgZGlzcGxheWVkIGluIHRoZSBgaW5wdXRgIGJlZm9yZSB0aGUgdXNlciBlbnRlcnMgYSB2YWx1ZS5cbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgZGlzcGxheWVkIGFzIHJlcXVpcmVkIGFuZCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICByb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBSZW5kZXIgYSBbYFNlbGVjdGBdKC9tYXRlcmlhbC11aS9hcGkvc2VsZWN0LykgZWxlbWVudCB3aGlsZSBwYXNzaW5nIHRoZSBJbnB1dCBlbGVtZW50IHRvIGBTZWxlY3RgIGFzIGBpbnB1dGAgcGFyYW1ldGVyLlxuICAgKiBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgeW91IG11c3QgcGFzcyB0aGUgb3B0aW9ucyBvZiB0aGUgc2VsZWN0IGFzIGNoaWxkcmVuLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc2VsZWN0OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgU2VsZWN0YF0oL21hdGVyaWFsLXVpL2FwaS9zZWxlY3QvKSBlbGVtZW50LlxuICAgKi9cbiAgU2VsZWN0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC4gSXQgc2hvdWxkIGJlIFthIHZhbGlkIEhUTUw1IGlucHV0IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNGb3JtXyUzQ2lucHV0JTNFX3R5cGVzKS5cbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LCByZXF1aXJlZCBmb3IgYSBjb250cm9sbGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKiBAZGVmYXVsdCAnb3V0bGluZWQnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydmaWxsZWQnLCAnb3V0bGluZWQnLCAnc3RhbmRhcmQnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBUZXh0RmllbGQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wib25DaGFuZ2VcIiwgXCJtYXhSb3dzXCIsIFwibWluUm93c1wiLCBcInN0eWxlXCIsIFwidmFsdWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgdW5zdGFibGVfZGVib3VuY2UgYXMgZGVib3VuY2UsIHVuc3RhYmxlX3VzZUZvcmtSZWYgYXMgdXNlRm9ya1JlZiwgdW5zdGFibGVfdXNlRW5oYW5jZWRFZmZlY3QgYXMgdXNlRW5oYW5jZWRFZmZlY3QsIHVuc3RhYmxlX293bmVyV2luZG93IGFzIG93bmVyV2luZG93IH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gZ2V0U3R5bGVWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKSB8fCAwO1xufVxuY29uc3Qgc3R5bGVzID0ge1xuICBzaGFkb3c6IHtcbiAgICAvLyBWaXNpYmlsaXR5IG5lZWRlZCB0byBoaWRlIHRoZSBleHRyYSB0ZXh0IGFyZWEgb24gaVBhZHNcbiAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAvLyBSZW1vdmUgZnJvbSB0aGUgY29udGVudCBmbG93XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgLy8gSWdub3JlIHRoZSBzY3JvbGxiYXIgd2lkdGhcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgaGVpZ2h0OiAwLFxuICAgIHRvcDogMCxcbiAgICBsZWZ0OiAwLFxuICAgIC8vIENyZWF0ZSBhIG5ldyBsYXllciwgaW5jcmVhc2UgdGhlIGlzb2xhdGlvbiBvZiB0aGUgY29tcHV0ZWQgdmFsdWVzXG4gICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWigwKSdcbiAgfVxufTtcbmZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7XG4gIHJldHVybiBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgfHwgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDAgfHwgb2JqLm91dGVySGVpZ2h0U3R5bGUgPT09IDAgJiYgIW9iai5vdmVyZmxvd2luZztcbn1cblxuLyoqXG4gKlxuICogRGVtb3M6XG4gKlxuICogLSBbVGV4dGFyZWEgQXV0b3NpemVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9yZWFjdC10ZXh0YXJlYS1hdXRvc2l6ZS8pXG4gKlxuICogQVBJOlxuICpcbiAqIC0gW1RleHRhcmVhQXV0b3NpemUgQVBJXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvYXBpL3RleHRhcmVhLWF1dG9zaXplLylcbiAqL1xuY29uc3QgVGV4dGFyZWFBdXRvc2l6ZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFRleHRhcmVhQXV0b3NpemUocHJvcHMsIGZvcndhcmRlZFJlZikge1xuICBjb25zdCB7XG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG1heFJvd3MsXG4gICAgICBtaW5Sb3dzID0gMSxcbiAgICAgIHN0eWxlLFxuICAgICAgdmFsdWVcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qge1xuICAgIGN1cnJlbnQ6IGlzQ29udHJvbGxlZFxuICB9ID0gUmVhY3QudXNlUmVmKHZhbHVlICE9IG51bGwpO1xuICBjb25zdCBpbnB1dFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihmb3J3YXJkZWRSZWYsIGlucHV0UmVmKTtcbiAgY29uc3QgaGVpZ2h0UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBzaGFkb3dSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGNhbGN1bGF0ZVRleHRhcmVhU3R5bGVzID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gaW5wdXRSZWYuY3VycmVudDtcbiAgICBjb25zdCBjb250YWluZXJXaW5kb3cgPSBvd25lcldpbmRvdyhpbnB1dCk7XG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IGNvbnRhaW5lcldpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGlucHV0KTtcblxuICAgIC8vIElmIGlucHV0J3Mgd2lkdGggaXMgc2hydW5rIGFuZCBpdCdzIG5vdCB2aXNpYmxlLCBkb24ndCBzeW5jIGhlaWdodC5cbiAgICBpZiAoY29tcHV0ZWRTdHlsZS53aWR0aCA9PT0gJzBweCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dGVySGVpZ2h0U3R5bGU6IDAsXG4gICAgICAgIG92ZXJmbG93aW5nOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgaW5wdXRTaGFsbG93ID0gc2hhZG93UmVmLmN1cnJlbnQ7XG4gICAgaW5wdXRTaGFsbG93LnN0eWxlLndpZHRoID0gY29tcHV0ZWRTdHlsZS53aWR0aDtcbiAgICBpbnB1dFNoYWxsb3cudmFsdWUgPSBpbnB1dC52YWx1ZSB8fCBwcm9wcy5wbGFjZWhvbGRlciB8fCAneCc7XG4gICAgaWYgKGlucHV0U2hhbGxvdy52YWx1ZS5zbGljZSgtMSkgPT09ICdcXG4nKSB7XG4gICAgICAvLyBDZXJ0YWluIGZvbnRzIHdoaWNoIG92ZXJmbG93IHRoZSBsaW5lIGhlaWdodCB3aWxsIGNhdXNlIHRoZSB0ZXh0YXJlYVxuICAgICAgLy8gdG8gcmVwb3J0IGEgZGlmZmVyZW50IHNjcm9sbEhlaWdodCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgbGFzdCBsaW5lXG4gICAgICAvLyBpcyBlbXB0eS4gTWFrZSBpdCBub24tZW1wdHkgdG8gYXZvaWQgdGhpcyBpc3N1ZS5cbiAgICAgIGlucHV0U2hhbGxvdy52YWx1ZSArPSAnICc7XG4gICAgfVxuICAgIGNvbnN0IGJveFNpemluZyA9IGNvbXB1dGVkU3R5bGUuYm94U2l6aW5nO1xuICAgIGNvbnN0IHBhZGRpbmcgPSBnZXRTdHlsZVZhbHVlKGNvbXB1dGVkU3R5bGUucGFkZGluZ0JvdHRvbSkgKyBnZXRTdHlsZVZhbHVlKGNvbXB1dGVkU3R5bGUucGFkZGluZ1RvcCk7XG4gICAgY29uc3QgYm9yZGVyID0gZ2V0U3R5bGVWYWx1ZShjb21wdXRlZFN0eWxlLmJvcmRlckJvdHRvbVdpZHRoKSArIGdldFN0eWxlVmFsdWUoY29tcHV0ZWRTdHlsZS5ib3JkZXJUb3BXaWR0aCk7XG5cbiAgICAvLyBUaGUgaGVpZ2h0IG9mIHRoZSBpbm5lciBjb250ZW50XG4gICAgY29uc3QgaW5uZXJIZWlnaHQgPSBpbnB1dFNoYWxsb3cuc2Nyb2xsSGVpZ2h0O1xuXG4gICAgLy8gTWVhc3VyZSBoZWlnaHQgb2YgYSB0ZXh0YXJlYSB3aXRoIGEgc2luZ2xlIHJvd1xuICAgIGlucHV0U2hhbGxvdy52YWx1ZSA9ICd4JztcbiAgICBjb25zdCBzaW5nbGVSb3dIZWlnaHQgPSBpbnB1dFNoYWxsb3cuc2Nyb2xsSGVpZ2h0O1xuXG4gICAgLy8gVGhlIGhlaWdodCBvZiB0aGUgb3V0ZXIgY29udGVudFxuICAgIGxldCBvdXRlckhlaWdodCA9IGlubmVySGVpZ2h0O1xuICAgIGlmIChtaW5Sb3dzKSB7XG4gICAgICBvdXRlckhlaWdodCA9IE1hdGgubWF4KE51bWJlcihtaW5Sb3dzKSAqIHNpbmdsZVJvd0hlaWdodCwgb3V0ZXJIZWlnaHQpO1xuICAgIH1cbiAgICBpZiAobWF4Um93cykge1xuICAgICAgb3V0ZXJIZWlnaHQgPSBNYXRoLm1pbihOdW1iZXIobWF4Um93cykgKiBzaW5nbGVSb3dIZWlnaHQsIG91dGVySGVpZ2h0KTtcbiAgICB9XG4gICAgb3V0ZXJIZWlnaHQgPSBNYXRoLm1heChvdXRlckhlaWdodCwgc2luZ2xlUm93SGVpZ2h0KTtcblxuICAgIC8vIFRha2UgdGhlIGJveCBzaXppbmcgaW50byBhY2NvdW50IGZvciBhcHBseWluZyB0aGlzIHZhbHVlIGFzIGEgc3R5bGUuXG4gICAgY29uc3Qgb3V0ZXJIZWlnaHRTdHlsZSA9IG91dGVySGVpZ2h0ICsgKGJveFNpemluZyA9PT0gJ2JvcmRlci1ib3gnID8gcGFkZGluZyArIGJvcmRlciA6IDApO1xuICAgIGNvbnN0IG92ZXJmbG93aW5nID0gTWF0aC5hYnMob3V0ZXJIZWlnaHQgLSBpbm5lckhlaWdodCkgPD0gMTtcbiAgICByZXR1cm4ge1xuICAgICAgb3V0ZXJIZWlnaHRTdHlsZSxcbiAgICAgIG92ZXJmbG93aW5nXG4gICAgfTtcbiAgfSwgW21heFJvd3MsIG1pblJvd3MsIHByb3BzLnBsYWNlaG9sZGVyXSk7XG4gIGNvbnN0IHN5bmNIZWlnaHQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgdGV4dGFyZWFTdHlsZXMgPSBjYWxjdWxhdGVUZXh0YXJlYVN0eWxlcygpO1xuICAgIGlmIChpc0VtcHR5KHRleHRhcmVhU3R5bGVzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvdXRlckhlaWdodFN0eWxlID0gdGV4dGFyZWFTdHlsZXMub3V0ZXJIZWlnaHRTdHlsZTtcbiAgICBjb25zdCBpbnB1dCA9IGlucHV0UmVmLmN1cnJlbnQ7XG4gICAgaWYgKGhlaWdodFJlZi5jdXJyZW50ICE9PSBvdXRlckhlaWdodFN0eWxlKSB7XG4gICAgICBoZWlnaHRSZWYuY3VycmVudCA9IG91dGVySGVpZ2h0U3R5bGU7XG4gICAgICBpbnB1dC5zdHlsZS5oZWlnaHQgPSBgJHtvdXRlckhlaWdodFN0eWxlfXB4YDtcbiAgICB9XG4gICAgaW5wdXQuc3R5bGUub3ZlcmZsb3cgPSB0ZXh0YXJlYVN0eWxlcy5vdmVyZmxvd2luZyA/ICdoaWRkZW4nIDogJyc7XG4gIH0sIFtjYWxjdWxhdGVUZXh0YXJlYVN0eWxlc10pO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlUmVzaXplID0gKCkgPT4ge1xuICAgICAgc3luY0hlaWdodCgpO1xuICAgIH07XG4gICAgLy8gV29ya2Fyb3VuZCBhIFwiUmVzaXplT2JzZXJ2ZXIgbG9vcCBjb21wbGV0ZWQgd2l0aCB1bmRlbGl2ZXJlZCBub3RpZmljYXRpb25zXCIgZXJyb3JcbiAgICAvLyBpbiB0ZXN0LlxuICAgIC8vIE5vdGUgdGhhdCB3ZSBtaWdodCBuZWVkIHRvIHVzZSB0aGlzIGxvZ2ljIGluIHByb2R1Y3Rpb24gcGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL3Jlc2l6ZS1vYnNlcnZlci9pc3N1ZXMvMzhcbiAgICAvLyBBbHNvIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbXVpL211aS14L2lzc3Vlcy84NzMzXG4gICAgbGV0IHJBRjtcbiAgICBjb25zdCByQUZIYW5kbGVSZXNpemUgPSAoKSA9PiB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyQUYpO1xuICAgICAgckFGID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgaGFuZGxlUmVzaXplKCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGRlYm91bmNlSGFuZGxlUmVzaXplID0gZGVib3VuY2UoaGFuZGxlUmVzaXplKTtcbiAgICBjb25zdCBpbnB1dCA9IGlucHV0UmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgY29udGFpbmVyV2luZG93ID0gb3duZXJXaW5kb3coaW5wdXQpO1xuICAgIGNvbnRhaW5lcldpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBkZWJvdW5jZUhhbmRsZVJlc2l6ZSk7XG4gICAgbGV0IHJlc2l6ZU9ic2VydmVyO1xuICAgIGlmICh0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnID8gckFGSGFuZGxlUmVzaXplIDogaGFuZGxlUmVzaXplKTtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUoaW5wdXQpO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZGVib3VuY2VIYW5kbGVSZXNpemUuY2xlYXIoKTtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJBRik7XG4gICAgICBjb250YWluZXJXaW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZGVib3VuY2VIYW5kbGVSZXNpemUpO1xuICAgICAgaWYgKHJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgIHJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbY2FsY3VsYXRlVGV4dGFyZWFTdHlsZXMsIHN5bmNIZWlnaHRdKTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIHN5bmNIZWlnaHQoKTtcbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IGV2ZW50ID0+IHtcbiAgICBpZiAoIWlzQ29udHJvbGxlZCkge1xuICAgICAgc3luY0hlaWdodCgpO1xuICAgIH1cbiAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgIG9uQ2hhbmdlKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9fanN4KFwidGV4dGFyZWFcIiwgX2V4dGVuZHMoe1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgb25DaGFuZ2U6IGhhbmRsZUNoYW5nZSxcbiAgICAgIHJlZjogaGFuZGxlUmVmXG4gICAgICAvLyBBcHBseSB0aGUgcm93cyBwcm9wIHRvIGdldCBhIFwiY29ycmVjdFwiIGZpcnN0IFNTUiBwYWludFxuICAgICAgLFxuICAgICAgcm93czogbWluUm93cyxcbiAgICAgIHN0eWxlOiBzdHlsZVxuICAgIH0sIG90aGVyKSksIC8qI19fUFVSRV9fKi9fanN4KFwidGV4dGFyZWFcIiwge1xuICAgICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlLFxuICAgICAgY2xhc3NOYW1lOiBwcm9wcy5jbGFzc05hbWUsXG4gICAgICByZWFkT25seTogdHJ1ZSxcbiAgICAgIHJlZjogc2hhZG93UmVmLFxuICAgICAgdGFiSW5kZXg6IC0xLFxuICAgICAgc3R5bGU6IF9leHRlbmRzKHt9LCBzdHlsZXMuc2hhZG93LCBzdHlsZSwge1xuICAgICAgICBwYWRkaW5nVG9wOiAwLFxuICAgICAgICBwYWRkaW5nQm90dG9tOiAwXG4gICAgICB9KVxuICAgIH0pXVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVGV4dGFyZWFBdXRvc2l6ZS5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIFR5cGVTY3JpcHQgdHlwZXMgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkuXG4gICAqL1xuICBtYXhSb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIG1pblJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFRleHRhcmVhQXV0b3NpemU7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRUb29sYmFyVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUb29sYmFyJywgc2xvdCk7XG59XG5jb25zdCB0b29sYmFyQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVRvb2xiYXInLCBbJ3Jvb3QnLCAnZ3V0dGVycycsICdyZWd1bGFyJywgJ2RlbnNlJ10pO1xuZXhwb3J0IGRlZmF1bHQgdG9vbGJhckNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZGlzYWJsZUd1dHRlcnNcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGdldFRvb2xiYXJVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3Rvb2xiYXJDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlR3V0dGVycyxcbiAgICB2YXJpYW50XG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCAhZGlzYWJsZUd1dHRlcnMgJiYgJ2d1dHRlcnMnLCB2YXJpYW50XVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFRvb2xiYXJVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IFRvb2xiYXJSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlUb29sYmFyJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsICFvd25lclN0YXRlLmRpc2FibGVHdXR0ZXJzICYmIHN0eWxlcy5ndXR0ZXJzLCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInXG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlR3V0dGVycyAmJiB7XG4gIHBhZGRpbmdMZWZ0OiB0aGVtZS5zcGFjaW5nKDIpLFxuICBwYWRkaW5nUmlnaHQ6IHRoZW1lLnNwYWNpbmcoMiksXG4gIFt0aGVtZS5icmVha3BvaW50cy51cCgnc20nKV06IHtcbiAgICBwYWRkaW5nTGVmdDogdGhlbWUuc3BhY2luZygzKSxcbiAgICBwYWRkaW5nUmlnaHQ6IHRoZW1lLnNwYWNpbmcoMylcbiAgfVxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZGVuc2UnICYmIHtcbiAgbWluSGVpZ2h0OiA0OFxufSksICh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdyZWd1bGFyJyAmJiB0aGVtZS5taXhpbnMudG9vbGJhcik7XG5jb25zdCBUb29sYmFyID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gVG9vbGJhcihpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlUb29sYmFyJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ2RpdicsXG4gICAgICBkaXNhYmxlR3V0dGVycyA9IGZhbHNlLFxuICAgICAgdmFyaWFudCA9ICdyZWd1bGFyJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29tcG9uZW50LFxuICAgIGRpc2FibGVHdXR0ZXJzLFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFRvb2xiYXJSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IGNvbXBvbmVudCxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIHJlZjogcmVmLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVG9vbGJhci5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGUgVG9vbGJhciBjaGlsZHJlbiwgdXN1YWxseSBhIG1peHR1cmUgb2YgYEljb25CdXR0b25gLCBgQnV0dG9uYCBhbmQgYFR5cG9ncmFwaHlgLlxuICAgKiBUaGUgVG9vbGJhciBpcyBhIGZsZXggY29udGFpbmVyLCBhbGxvd2luZyBmbGV4IGl0ZW0gcHJvcGVydGllcyB0byBiZSB1c2VkIHRvIGxheSBvdXQgdGhlIGNoaWxkcmVuLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBkaXNhYmxlcyBndXR0ZXIgcGFkZGluZy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVHdXR0ZXJzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgJ3JlZ3VsYXInXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ3JlZ3VsYXInXSksIFByb3BUeXBlcy5zdHJpbmddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFRvb2xiYXI7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUeXBvZ3JhcGh5Jywgc2xvdCk7XG59XG5jb25zdCB0eXBvZ3JhcGh5Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVR5cG9ncmFwaHknLCBbJ3Jvb3QnLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnc3VidGl0bGUxJywgJ3N1YnRpdGxlMicsICdib2R5MScsICdib2R5MicsICdpbmhlcml0JywgJ2J1dHRvbicsICdjYXB0aW9uJywgJ292ZXJsaW5lJywgJ2FsaWduTGVmdCcsICdhbGlnblJpZ2h0JywgJ2FsaWduQ2VudGVyJywgJ2FsaWduSnVzdGlmeScsICdub1dyYXAnLCAnZ3V0dGVyQm90dG9tJywgJ3BhcmFncmFwaCddKTtcbmV4cG9ydCBkZWZhdWx0IHR5cG9ncmFwaHlDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFsaWduXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZ3V0dGVyQm90dG9tXCIsIFwibm9XcmFwXCIsIFwicGFyYWdyYXBoXCIsIFwidmFyaWFudFwiLCBcInZhcmlhbnRNYXBwaW5nXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgZXh0ZW5kU3hQcm9wIH0gZnJvbSAnQG11aS9zeXN0ZW0vc3R5bGVGdW5jdGlvblN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB7IGdldFR5cG9ncmFwaHlVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3R5cG9ncmFwaHlDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgYWxpZ24sXG4gICAgZ3V0dGVyQm90dG9tLFxuICAgIG5vV3JhcCxcbiAgICBwYXJhZ3JhcGgsXG4gICAgdmFyaWFudCxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCB2YXJpYW50LCBvd25lclN0YXRlLmFsaWduICE9PSAnaW5oZXJpdCcgJiYgYGFsaWduJHtjYXBpdGFsaXplKGFsaWduKX1gLCBndXR0ZXJCb3R0b20gJiYgJ2d1dHRlckJvdHRvbScsIG5vV3JhcCAmJiAnbm9XcmFwJywgcGFyYWdyYXBoICYmICdwYXJhZ3JhcGgnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFR5cG9ncmFwaHlVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBUeXBvZ3JhcGh5Um9vdCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aVR5cG9ncmFwaHknLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS52YXJpYW50ICYmIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdLCBvd25lclN0YXRlLmFsaWduICE9PSAnaW5oZXJpdCcgJiYgc3R5bGVzW2BhbGlnbiR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmFsaWduKX1gXSwgb3duZXJTdGF0ZS5ub1dyYXAgJiYgc3R5bGVzLm5vV3JhcCwgb3duZXJTdGF0ZS5ndXR0ZXJCb3R0b20gJiYgc3R5bGVzLmd1dHRlckJvdHRvbSwgb3duZXJTdGF0ZS5wYXJhZ3JhcGggJiYgc3R5bGVzLnBhcmFncmFwaF07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIG1hcmdpbjogMFxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnaW5oZXJpdCcgJiYge1xuICAvLyBTb21lIGVsZW1lbnRzLCBsaWtlIDxidXR0b24+IG9uIENocm9tZSBoYXZlIGRlZmF1bHQgZm9udCB0aGF0IGRvZXNuJ3QgaW5oZXJpdCwgcmVzZXQgdGhpcy5cbiAgZm9udDogJ2luaGVyaXQnXG59LCBvd25lclN0YXRlLnZhcmlhbnQgIT09ICdpbmhlcml0JyAmJiB0aGVtZS50eXBvZ3JhcGh5W293bmVyU3RhdGUudmFyaWFudF0sIG93bmVyU3RhdGUuYWxpZ24gIT09ICdpbmhlcml0JyAmJiB7XG4gIHRleHRBbGlnbjogb3duZXJTdGF0ZS5hbGlnblxufSwgb3duZXJTdGF0ZS5ub1dyYXAgJiYge1xuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgd2hpdGVTcGFjZTogJ25vd3JhcCdcbn0sIG93bmVyU3RhdGUuZ3V0dGVyQm90dG9tICYmIHtcbiAgbWFyZ2luQm90dG9tOiAnMC4zNWVtJ1xufSwgb3duZXJTdGF0ZS5wYXJhZ3JhcGggJiYge1xuICBtYXJnaW5Cb3R0b206IDE2XG59KSk7XG5jb25zdCBkZWZhdWx0VmFyaWFudE1hcHBpbmcgPSB7XG4gIGgxOiAnaDEnLFxuICBoMjogJ2gyJyxcbiAgaDM6ICdoMycsXG4gIGg0OiAnaDQnLFxuICBoNTogJ2g1JyxcbiAgaDY6ICdoNicsXG4gIHN1YnRpdGxlMTogJ2g2JyxcbiAgc3VidGl0bGUyOiAnaDYnLFxuICBib2R5MTogJ3AnLFxuICBib2R5MjogJ3AnLFxuICBpbmhlcml0OiAncCdcbn07XG5cbi8vIFRPRE8gdjY6IGRlcHJlY2F0ZSB0aGVzZSBjb2xvciB2YWx1ZXMgaW4gdjUueCBhbmQgcmVtb3ZlIHRoZSB0cmFuc2Zvcm1hdGlvbiBpbiB2NlxuY29uc3QgY29sb3JUcmFuc2Zvcm1hdGlvbnMgPSB7XG4gIHByaW1hcnk6ICdwcmltYXJ5Lm1haW4nLFxuICB0ZXh0UHJpbWFyeTogJ3RleHQucHJpbWFyeScsXG4gIHNlY29uZGFyeTogJ3NlY29uZGFyeS5tYWluJyxcbiAgdGV4dFNlY29uZGFyeTogJ3RleHQuc2Vjb25kYXJ5JyxcbiAgZXJyb3I6ICdlcnJvci5tYWluJ1xufTtcbmNvbnN0IHRyYW5zZm9ybURlcHJlY2F0ZWRDb2xvcnMgPSBjb2xvciA9PiB7XG4gIHJldHVybiBjb2xvclRyYW5zZm9ybWF0aW9uc1tjb2xvcl0gfHwgY29sb3I7XG59O1xuY29uc3QgVHlwb2dyYXBoeSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFR5cG9ncmFwaHkoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHRoZW1lUHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlUeXBvZ3JhcGh5J1xuICB9KTtcbiAgY29uc3QgY29sb3IgPSB0cmFuc2Zvcm1EZXByZWNhdGVkQ29sb3JzKHRoZW1lUHJvcHMuY29sb3IpO1xuICBjb25zdCBwcm9wcyA9IGV4dGVuZFN4UHJvcChfZXh0ZW5kcyh7fSwgdGhlbWVQcm9wcywge1xuICAgIGNvbG9yXG4gIH0pKTtcbiAgY29uc3Qge1xuICAgICAgYWxpZ24gPSAnaW5oZXJpdCcsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQsXG4gICAgICBndXR0ZXJCb3R0b20gPSBmYWxzZSxcbiAgICAgIG5vV3JhcCA9IGZhbHNlLFxuICAgICAgcGFyYWdyYXBoID0gZmFsc2UsXG4gICAgICB2YXJpYW50ID0gJ2JvZHkxJyxcbiAgICAgIHZhcmlhbnRNYXBwaW5nID0gZGVmYXVsdFZhcmlhbnRNYXBwaW5nXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBhbGlnbixcbiAgICBjb2xvcixcbiAgICBjbGFzc05hbWUsXG4gICAgY29tcG9uZW50LFxuICAgIGd1dHRlckJvdHRvbSxcbiAgICBub1dyYXAsXG4gICAgcGFyYWdyYXBoLFxuICAgIHZhcmlhbnQsXG4gICAgdmFyaWFudE1hcHBpbmdcbiAgfSk7XG4gIGNvbnN0IENvbXBvbmVudCA9IGNvbXBvbmVudCB8fCAocGFyYWdyYXBoID8gJ3AnIDogdmFyaWFudE1hcHBpbmdbdmFyaWFudF0gfHwgZGVmYXVsdFZhcmlhbnRNYXBwaW5nW3ZhcmlhbnRdKSB8fCAnc3Bhbic7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFR5cG9ncmFwaHlSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IENvbXBvbmVudCxcbiAgICByZWY6IHJlZixcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSlcbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVHlwb2dyYXBoeS5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRleHQtYWxpZ24gb24gdGhlIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ2luaGVyaXQnXG4gICAqL1xuICBhbGlnbjogUHJvcFR5cGVzLm9uZU9mKFsnY2VudGVyJywgJ2luaGVyaXQnLCAnanVzdGlmeScsICdsZWZ0JywgJ3JpZ2h0J10pLFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRleHQgd2lsbCBoYXZlIGEgYm90dG9tIG1hcmdpbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGd1dHRlckJvdHRvbTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0ZXh0IHdpbGwgbm90IHdyYXAsIGJ1dCBpbnN0ZWFkIHdpbGwgdHJ1bmNhdGUgd2l0aCBhIHRleHQgb3ZlcmZsb3cgZWxsaXBzaXMuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0ZXh0IG92ZXJmbG93IGNhbiBvbmx5IGhhcHBlbiB3aXRoIGJsb2NrIG9yIGlubGluZS1ibG9jayBsZXZlbCBlbGVtZW50c1xuICAgKiAodGhlIGVsZW1lbnQgbmVlZHMgdG8gaGF2ZSBhIHdpZHRoIGluIG9yZGVyIHRvIG92ZXJmbG93KS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG5vV3JhcDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBlbGVtZW50IHdpbGwgYmUgYSBwYXJhZ3JhcGggZWxlbWVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHBhcmFncmFwaDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSB0aGVtZSB0eXBvZ3JhcGh5IHN0eWxlcy5cbiAgICogQGRlZmF1bHQgJ2JvZHkxJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydib2R5MScsICdib2R5MicsICdidXR0b24nLCAnY2FwdGlvbicsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdpbmhlcml0JywgJ292ZXJsaW5lJywgJ3N1YnRpdGxlMScsICdzdWJ0aXRsZTInXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgbWFwcyB0aGUgdmFyaWFudCBwcm9wIHRvIGEgcmFuZ2Ugb2YgZGlmZmVyZW50IEhUTUwgZWxlbWVudCB0eXBlcy5cbiAgICogRm9yIGluc3RhbmNlLCBzdWJ0aXRsZTEgdG8gYDxoNj5gLlxuICAgKiBJZiB5b3Ugd2lzaCB0byBjaGFuZ2UgdGhhdCBtYXBwaW5nLCB5b3UgY2FuIHByb3ZpZGUgeW91ciBvd24uXG4gICAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIHRoZSBgY29tcG9uZW50YCBwcm9wLlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgaDE6ICdoMScsXG4gICAqICAgaDI6ICdoMicsXG4gICAqICAgaDM6ICdoMycsXG4gICAqICAgaDQ6ICdoNCcsXG4gICAqICAgaDU6ICdoNScsXG4gICAqICAgaDY6ICdoNicsXG4gICAqICAgc3VidGl0bGUxOiAnaDYnLFxuICAgKiAgIHN1YnRpdGxlMjogJ2g2JyxcbiAgICogICBib2R5MTogJ3AnLFxuICAgKiAgIGJvZHkyOiAncCcsXG4gICAqICAgaW5oZXJpdDogJ3AnLFxuICAgKiB9XG4gICAqL1xuICB2YXJpYW50TWFwcGluZzogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub2JqZWN0XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgVHlwb2dyYXBoeTsiLCIndXNlIGNsaWVudCc7XG5cbi8qIGVzbGludC1kaXNhYmxlIGNvbnNpc3RlbnQtcmV0dXJuLCBqc3gtYTExeS9uby1ub25pbnRlcmFjdGl2ZS10YWJpbmRleCAqL1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGV4YWN0UHJvcCwgZWxlbWVudEFjY2VwdGluZ1JlZiwgdW5zdGFibGVfdXNlRm9ya1JlZiBhcyB1c2VGb3JrUmVmLCB1bnN0YWJsZV9vd25lckRvY3VtZW50IGFzIG93bmVyRG9jdW1lbnQgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG4vLyBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZm9jdXMtdHJhcC90YWJiYWJsZVxuY29uc3QgY2FuZGlkYXRlc1NlbGVjdG9yID0gWydpbnB1dCcsICdzZWxlY3QnLCAndGV4dGFyZWEnLCAnYVtocmVmXScsICdidXR0b24nLCAnW3RhYmluZGV4XScsICdhdWRpb1tjb250cm9sc10nLCAndmlkZW9bY29udHJvbHNdJywgJ1tjb250ZW50ZWRpdGFibGVdOm5vdChbY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl0pJ10uam9pbignLCcpO1xuZnVuY3Rpb24gZ2V0VGFiSW5kZXgobm9kZSkge1xuICBjb25zdCB0YWJpbmRleEF0dHIgPSBwYXJzZUludChub2RlLmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKSB8fCAnJywgMTApO1xuICBpZiAoIU51bWJlci5pc05hTih0YWJpbmRleEF0dHIpKSB7XG4gICAgcmV0dXJuIHRhYmluZGV4QXR0cjtcbiAgfVxuXG4gIC8vIEJyb3dzZXJzIGRvIG5vdCByZXR1cm4gYHRhYkluZGV4YCBjb3JyZWN0bHkgZm9yIGNvbnRlbnRFZGl0YWJsZSBub2RlcztcbiAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NjYxMTA4JnE9Y29udGVudGVkaXRhYmxlJTIwdGFiaW5kZXgmY2FuPTJcbiAgLy8gc28gaWYgdGhleSBkb24ndCBoYXZlIGEgdGFiaW5kZXggYXR0cmlidXRlIHNwZWNpZmljYWxseSBzZXQsIGFzc3VtZSBpdCdzIDAuXG4gIC8vIGluIENocm9tZSwgPGRldGFpbHMvPiwgPGF1ZGlvIGNvbnRyb2xzLz4gYW5kIDx2aWRlbyBjb250cm9scy8+IGVsZW1lbnRzIGdldCBhIGRlZmF1bHRcbiAgLy8gIGB0YWJJbmRleGAgb2YgLTEgd2hlbiB0aGUgJ3RhYmluZGV4JyBhdHRyaWJ1dGUgaXNuJ3Qgc3BlY2lmaWVkIGluIHRoZSBET00sXG4gIC8vICB5ZXQgdGhleSBhcmUgc3RpbGwgcGFydCBvZiB0aGUgcmVndWxhciB0YWIgb3JkZXI7IGluIEZGLCB0aGV5IGdldCBhIGRlZmF1bHRcbiAgLy8gIGB0YWJJbmRleGAgb2YgMDsgc2luY2UgQ2hyb21lIHN0aWxsIHB1dHMgdGhvc2UgZWxlbWVudHMgaW4gdGhlIHJlZ3VsYXIgdGFiXG4gIC8vICBvcmRlciwgY29uc2lkZXIgdGhlaXIgdGFiIGluZGV4IHRvIGJlIDAuXG4gIGlmIChub2RlLmNvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnIHx8IChub2RlLm5vZGVOYW1lID09PSAnQVVESU8nIHx8IG5vZGUubm9kZU5hbWUgPT09ICdWSURFTycgfHwgbm9kZS5ub2RlTmFtZSA9PT0gJ0RFVEFJTFMnKSAmJiBub2RlLmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIHJldHVybiBub2RlLnRhYkluZGV4O1xufVxuZnVuY3Rpb24gaXNOb25UYWJiYWJsZVJhZGlvKG5vZGUpIHtcbiAgaWYgKG5vZGUudGFnTmFtZSAhPT0gJ0lOUFVUJyB8fCBub2RlLnR5cGUgIT09ICdyYWRpbycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCFub2RlLm5hbWUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZ2V0UmFkaW8gPSBzZWxlY3RvciA9PiBub2RlLm93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihgaW5wdXRbdHlwZT1cInJhZGlvXCJdJHtzZWxlY3Rvcn1gKTtcbiAgbGV0IHJvdmluZyA9IGdldFJhZGlvKGBbbmFtZT1cIiR7bm9kZS5uYW1lfVwiXTpjaGVja2VkYCk7XG4gIGlmICghcm92aW5nKSB7XG4gICAgcm92aW5nID0gZ2V0UmFkaW8oYFtuYW1lPVwiJHtub2RlLm5hbWV9XCJdYCk7XG4gIH1cbiAgcmV0dXJuIHJvdmluZyAhPT0gbm9kZTtcbn1cbmZ1bmN0aW9uIGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUobm9kZSkge1xuICBpZiAobm9kZS5kaXNhYmxlZCB8fCBub2RlLnRhZ05hbWUgPT09ICdJTlBVVCcgJiYgbm9kZS50eXBlID09PSAnaGlkZGVuJyB8fCBpc05vblRhYmJhYmxlUmFkaW8obm9kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBkZWZhdWx0R2V0VGFiYmFibGUocm9vdCkge1xuICBjb25zdCByZWd1bGFyVGFiTm9kZXMgPSBbXTtcbiAgY29uc3Qgb3JkZXJlZFRhYk5vZGVzID0gW107XG4gIEFycmF5LmZyb20ocm9vdC5xdWVyeVNlbGVjdG9yQWxsKGNhbmRpZGF0ZXNTZWxlY3RvcikpLmZvckVhY2goKG5vZGUsIGkpID0+IHtcbiAgICBjb25zdCBub2RlVGFiSW5kZXggPSBnZXRUYWJJbmRleChub2RlKTtcbiAgICBpZiAobm9kZVRhYkluZGV4ID09PSAtMSB8fCAhaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZShub2RlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobm9kZVRhYkluZGV4ID09PSAwKSB7XG4gICAgICByZWd1bGFyVGFiTm9kZXMucHVzaChub2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3JkZXJlZFRhYk5vZGVzLnB1c2goe1xuICAgICAgICBkb2N1bWVudE9yZGVyOiBpLFxuICAgICAgICB0YWJJbmRleDogbm9kZVRhYkluZGV4LFxuICAgICAgICBub2RlOiBub2RlXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb3JkZXJlZFRhYk5vZGVzLnNvcnQoKGEsIGIpID0+IGEudGFiSW5kZXggPT09IGIudGFiSW5kZXggPyBhLmRvY3VtZW50T3JkZXIgLSBiLmRvY3VtZW50T3JkZXIgOiBhLnRhYkluZGV4IC0gYi50YWJJbmRleCkubWFwKGEgPT4gYS5ub2RlKS5jb25jYXQocmVndWxhclRhYk5vZGVzKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRJc0VuYWJsZWQoKSB7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmZ1bmN0aW9uIEZvY3VzVHJhcChwcm9wcykge1xuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgZGlzYWJsZUF1dG9Gb2N1cyA9IGZhbHNlLFxuICAgIGRpc2FibGVFbmZvcmNlRm9jdXMgPSBmYWxzZSxcbiAgICBkaXNhYmxlUmVzdG9yZUZvY3VzID0gZmFsc2UsXG4gICAgZ2V0VGFiYmFibGUgPSBkZWZhdWx0R2V0VGFiYmFibGUsXG4gICAgaXNFbmFibGVkID0gZGVmYXVsdElzRW5hYmxlZCxcbiAgICBvcGVuXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgaWdub3JlTmV4dEVuZm9yY2VGb2N1cyA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNlbnRpbmVsU3RhcnQgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IHNlbnRpbmVsRW5kID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBub2RlVG9SZXN0b3JlID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCByZWFjdEZvY3VzRXZlbnRUYXJnZXQgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIC8vIFRoaXMgdmFyaWFibGUgaXMgdXNlZnVsIHdoZW4gZGlzYWJsZUF1dG9Gb2N1cyBpcyB0cnVlLlxuICAvLyBJdCB3YWl0cyBmb3IgdGhlIGFjdGl2ZSBlbGVtZW50IHRvIG1vdmUgaW50byB0aGUgY29tcG9uZW50IHRvIGFjdGl2YXRlLlxuICBjb25zdCBhY3RpdmF0ZWQgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBjb25zdCByb290UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIFRPRE8gdXBzdHJlYW0gZml4XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYoY2hpbGRyZW4ucmVmLCByb290UmVmKTtcbiAgY29uc3QgbGFzdEtleWRvd24gPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gV2UgbWlnaHQgcmVuZGVyIGFuIGVtcHR5IGNoaWxkLlxuICAgIGlmICghb3BlbiB8fCAhcm9vdFJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGFjdGl2YXRlZC5jdXJyZW50ID0gIWRpc2FibGVBdXRvRm9jdXM7XG4gIH0sIFtkaXNhYmxlQXV0b0ZvY3VzLCBvcGVuXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gV2UgbWlnaHQgcmVuZGVyIGFuIGVtcHR5IGNoaWxkLlxuICAgIGlmICghb3BlbiB8fCAhcm9vdFJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRvYyA9IG93bmVyRG9jdW1lbnQocm9vdFJlZi5jdXJyZW50KTtcbiAgICBpZiAoIXJvb3RSZWYuY3VycmVudC5jb250YWlucyhkb2MuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgIGlmICghcm9vdFJlZi5jdXJyZW50Lmhhc0F0dHJpYnV0ZSgndGFiSW5kZXgnKSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFRoZSBtb2RhbCBjb250ZW50IG5vZGUgZG9lcyBub3QgYWNjZXB0IGZvY3VzLicsICdGb3IgdGhlIGJlbmVmaXQgb2YgYXNzaXN0aXZlIHRlY2hub2xvZ2llcywgJyArICd0aGUgdGFiSW5kZXggb2YgdGhlIG5vZGUgaXMgYmVpbmcgc2V0IHRvIFwiLTFcIi4nXS5qb2luKCdcXG4nKSk7XG4gICAgICAgIH1cbiAgICAgICAgcm9vdFJlZi5jdXJyZW50LnNldEF0dHJpYnV0ZSgndGFiSW5kZXgnLCAnLTEnKTtcbiAgICAgIH1cbiAgICAgIGlmIChhY3RpdmF0ZWQuY3VycmVudCkge1xuICAgICAgICByb290UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIC8vIHJlc3RvcmVMYXN0Rm9jdXMoKVxuICAgICAgaWYgKCFkaXNhYmxlUmVzdG9yZUZvY3VzKSB7XG4gICAgICAgIC8vIEluIElFMTEgaXQgaXMgcG9zc2libGUgZm9yIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgdG8gYmUgbnVsbCByZXN1bHRpbmdcbiAgICAgICAgLy8gaW4gbm9kZVRvUmVzdG9yZS5jdXJyZW50IGJlaW5nIG51bGwuXG4gICAgICAgIC8vIE5vdCBhbGwgZWxlbWVudHMgaW4gSUUxMSBoYXZlIGEgZm9jdXMgbWV0aG9kLlxuICAgICAgICAvLyBPbmNlIElFMTEgc3VwcG9ydCBpcyBkcm9wcGVkIHRoZSBmb2N1cygpIGNhbGwgY2FuIGJlIHVuY29uZGl0aW9uYWwuXG4gICAgICAgIGlmIChub2RlVG9SZXN0b3JlLmN1cnJlbnQgJiYgbm9kZVRvUmVzdG9yZS5jdXJyZW50LmZvY3VzKSB7XG4gICAgICAgICAgaWdub3JlTmV4dEVuZm9yY2VGb2N1cy5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICBub2RlVG9SZXN0b3JlLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBub2RlVG9SZXN0b3JlLmN1cnJlbnQgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG4gICAgLy8gTWlzc2luZyBgZGlzYWJsZVJlc3RvcmVGb2N1c2Agd2hpY2ggaXMgZmluZS5cbiAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGNoYW5naW5nIHRoYXQgcHJvcCBvbiBhbiBvcGVuIEZvY3VzVHJhcFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW29wZW5dKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBXZSBtaWdodCByZW5kZXIgYW4gZW1wdHkgY2hpbGQuXG4gICAgaWYgKCFvcGVuIHx8ICFyb290UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZG9jID0gb3duZXJEb2N1bWVudChyb290UmVmLmN1cnJlbnQpO1xuICAgIGNvbnN0IGxvb3BGb2N1cyA9IG5hdGl2ZUV2ZW50ID0+IHtcbiAgICAgIGxhc3RLZXlkb3duLmN1cnJlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgIGlmIChkaXNhYmxlRW5mb3JjZUZvY3VzIHx8ICFpc0VuYWJsZWQoKSB8fCBuYXRpdmVFdmVudC5rZXkgIT09ICdUYWInKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gTWFrZSBzdXJlIHRoZSBuZXh0IHRhYiBzdGFydHMgZnJvbSB0aGUgcmlnaHQgcGxhY2UuXG4gICAgICAvLyBkb2MuYWN0aXZlRWxlbWVudCByZWZlcnMgdG8gdGhlIG9yaWdpbi5cbiAgICAgIGlmIChkb2MuYWN0aXZlRWxlbWVudCA9PT0gcm9vdFJlZi5jdXJyZW50ICYmIG5hdGl2ZUV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gaWdub3JlIHRoZSBuZXh0IGNvbnRhaW4gYXNcbiAgICAgICAgLy8gaXQgd2lsbCB0cnkgdG8gbW92ZSB0aGUgZm9jdXMgYmFjayB0byB0aGUgcm9vdFJlZiBlbGVtZW50LlxuICAgICAgICBpZ25vcmVOZXh0RW5mb3JjZUZvY3VzLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICBpZiAoc2VudGluZWxFbmQuY3VycmVudCkge1xuICAgICAgICAgIHNlbnRpbmVsRW5kLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgY29udGFpbiA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHJvb3RFbGVtZW50ID0gcm9vdFJlZi5jdXJyZW50O1xuXG4gICAgICAvLyBDbGVhbnVwIGZ1bmN0aW9ucyBhcmUgZXhlY3V0ZWQgbGF6aWx5IGluIFJlYWN0IDE3LlxuICAgICAgLy8gQ29udGFpbiBjYW4gYmUgY2FsbGVkIGJldHdlZW4gdGhlIGNvbXBvbmVudCBiZWluZyB1bm1vdW50ZWQgYW5kIGl0cyBjbGVhbnVwIGZ1bmN0aW9uIGJlaW5nIHJ1bi5cbiAgICAgIGlmIChyb290RWxlbWVudCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIWRvYy5oYXNGb2N1cygpIHx8ICFpc0VuYWJsZWQoKSB8fCBpZ25vcmVOZXh0RW5mb3JjZUZvY3VzLmN1cnJlbnQpIHtcbiAgICAgICAgaWdub3JlTmV4dEVuZm9yY2VGb2N1cy5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGZvY3VzIGlzIGFscmVhZHkgaW5zaWRlXG4gICAgICBpZiAocm9vdEVsZW1lbnQuY29udGFpbnMoZG9jLmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGRpc2FibGVFbmZvcmNlRm9jdXMgaXMgc2V0IGFuZCB0aGUgZm9jdXMgaXMgb3V0c2lkZSBvZiB0aGUgZm9jdXMgdHJhcCAoYW5kIHNlbnRpbmVsIG5vZGVzKVxuICAgICAgaWYgKGRpc2FibGVFbmZvcmNlRm9jdXMgJiYgZG9jLmFjdGl2ZUVsZW1lbnQgIT09IHNlbnRpbmVsU3RhcnQuY3VycmVudCAmJiBkb2MuYWN0aXZlRWxlbWVudCAhPT0gc2VudGluZWxFbmQuY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHRoZSBmb2N1cyBldmVudCBpcyBub3QgY29taW5nIGZyb20gaW5zaWRlIHRoZSBjaGlsZHJlbidzIHJlYWN0IHRyZWUsIHJlc2V0IHRoZSByZWZzXG4gICAgICBpZiAoZG9jLmFjdGl2ZUVsZW1lbnQgIT09IHJlYWN0Rm9jdXNFdmVudFRhcmdldC5jdXJyZW50KSB7XG4gICAgICAgIHJlYWN0Rm9jdXNFdmVudFRhcmdldC5jdXJyZW50ID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAocmVhY3RGb2N1c0V2ZW50VGFyZ2V0LmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFhY3RpdmF0ZWQuY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgdGFiYmFibGUgPSBbXTtcbiAgICAgIGlmIChkb2MuYWN0aXZlRWxlbWVudCA9PT0gc2VudGluZWxTdGFydC5jdXJyZW50IHx8IGRvYy5hY3RpdmVFbGVtZW50ID09PSBzZW50aW5lbEVuZC5jdXJyZW50KSB7XG4gICAgICAgIHRhYmJhYmxlID0gZ2V0VGFiYmFibGUocm9vdFJlZi5jdXJyZW50KTtcbiAgICAgIH1cblxuICAgICAgLy8gb25lIG9mIHRoZSBzZW50aW5lbCBub2RlcyB3YXMgZm9jdXNlZCwgc28gbW92ZSB0aGUgZm9jdXNcbiAgICAgIC8vIHRvIHRoZSBmaXJzdC9sYXN0IHRhYmJhYmxlIGVsZW1lbnQgaW5zaWRlIHRoZSBmb2N1cyB0cmFwXG4gICAgICBpZiAodGFiYmFibGUubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgX2xhc3RLZXlkb3duJGN1cnJlbnQsIF9sYXN0S2V5ZG93biRjdXJyZW50MjtcbiAgICAgICAgY29uc3QgaXNTaGlmdFRhYiA9IEJvb2xlYW4oKChfbGFzdEtleWRvd24kY3VycmVudCA9IGxhc3RLZXlkb3duLmN1cnJlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbGFzdEtleWRvd24kY3VycmVudC5zaGlmdEtleSkgJiYgKChfbGFzdEtleWRvd24kY3VycmVudDIgPSBsYXN0S2V5ZG93bi5jdXJyZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2xhc3RLZXlkb3duJGN1cnJlbnQyLmtleSkgPT09ICdUYWInKTtcbiAgICAgICAgY29uc3QgZm9jdXNOZXh0ID0gdGFiYmFibGVbMF07XG4gICAgICAgIGNvbnN0IGZvY3VzUHJldmlvdXMgPSB0YWJiYWJsZVt0YWJiYWJsZS5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHR5cGVvZiBmb2N1c05leHQgIT09ICdzdHJpbmcnICYmIHR5cGVvZiBmb2N1c1ByZXZpb3VzICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmIChpc1NoaWZ0VGFiKSB7XG4gICAgICAgICAgICBmb2N1c1ByZXZpb3VzLmZvY3VzKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvY3VzTmV4dC5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBubyB0YWJiYWJsZSBlbGVtZW50cyBpbiB0aGUgdHJhcCBmb2N1cyBvciB0aGUgZm9jdXMgd2FzIG91dHNpZGUgb2YgdGhlIGZvY3VzIHRyYXBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3RFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIGNvbnRhaW4pO1xuICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgbG9vcEZvY3VzLCB0cnVlKTtcblxuICAgIC8vIFdpdGggRWRnZSwgU2FmYXJpIGFuZCBGaXJlZm94LCBubyBmb2N1cyByZWxhdGVkIGV2ZW50cyBhcmUgZmlyZWQgd2hlbiB0aGUgZm9jdXNlZCBhcmVhIHN0b3BzIGJlaW5nIGEgZm9jdXNlZCBhcmVhLlxuICAgIC8vIGZvciBleGFtcGxlIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTU1OTU2MS5cbiAgICAvLyBJbnN0ZWFkLCB3ZSBjYW4gbG9vayBpZiB0aGUgYWN0aXZlIGVsZW1lbnQgd2FzIHJlc3RvcmVkIG9uIHRoZSBCT0RZIGVsZW1lbnQuXG4gICAgLy9cbiAgICAvLyBUaGUgd2hhdHdnIHNwZWMgZGVmaW5lcyBob3cgdGhlIGJyb3dzZXIgc2hvdWxkIGJlaGF2ZSBidXQgZG9lcyBub3QgZXhwbGljaXRseSBtZW50aW9uIGFueSBldmVudHM6XG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW50ZXJhY3Rpb24uaHRtbCNmb2N1cy1maXh1cC1ydWxlLlxuICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgaWYgKGRvYy5hY3RpdmVFbGVtZW50ICYmIGRvYy5hY3RpdmVFbGVtZW50LnRhZ05hbWUgPT09ICdCT0RZJykge1xuICAgICAgICBjb250YWluKCk7XG4gICAgICB9XG4gICAgfSwgNTApO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c2luJywgY29udGFpbik7XG4gICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGxvb3BGb2N1cywgdHJ1ZSk7XG4gICAgfTtcbiAgfSwgW2Rpc2FibGVBdXRvRm9jdXMsIGRpc2FibGVFbmZvcmNlRm9jdXMsIGRpc2FibGVSZXN0b3JlRm9jdXMsIGlzRW5hYmxlZCwgb3BlbiwgZ2V0VGFiYmFibGVdKTtcbiAgY29uc3Qgb25Gb2N1cyA9IGV2ZW50ID0+IHtcbiAgICBpZiAobm9kZVRvUmVzdG9yZS5jdXJyZW50ID09PSBudWxsKSB7XG4gICAgICBub2RlVG9SZXN0b3JlLmN1cnJlbnQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgIH1cbiAgICBhY3RpdmF0ZWQuY3VycmVudCA9IHRydWU7XG4gICAgcmVhY3RGb2N1c0V2ZW50VGFyZ2V0LmN1cnJlbnQgPSBldmVudC50YXJnZXQ7XG4gICAgY29uc3QgY2hpbGRyZW5Qcm9wc0hhbmRsZXIgPSBjaGlsZHJlbi5wcm9wcy5vbkZvY3VzO1xuICAgIGlmIChjaGlsZHJlblByb3BzSGFuZGxlcikge1xuICAgICAgY2hpbGRyZW5Qcm9wc0hhbmRsZXIoZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlRm9jdXNTZW50aW5lbCA9IGV2ZW50ID0+IHtcbiAgICBpZiAobm9kZVRvUmVzdG9yZS5jdXJyZW50ID09PSBudWxsKSB7XG4gICAgICBub2RlVG9SZXN0b3JlLmN1cnJlbnQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgIH1cbiAgICBhY3RpdmF0ZWQuY3VycmVudCA9IHRydWU7XG4gIH07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9fanN4KFwiZGl2XCIsIHtcbiAgICAgIHRhYkluZGV4OiBvcGVuID8gMCA6IC0xLFxuICAgICAgb25Gb2N1czogaGFuZGxlRm9jdXNTZW50aW5lbCxcbiAgICAgIHJlZjogc2VudGluZWxTdGFydCxcbiAgICAgIFwiZGF0YS10ZXN0aWRcIjogXCJzZW50aW5lbFN0YXJ0XCJcbiAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgcmVmOiBoYW5kbGVSZWYsXG4gICAgICBvbkZvY3VzXG4gICAgfSksIC8qI19fUFVSRV9fKi9fanN4KFwiZGl2XCIsIHtcbiAgICAgIHRhYkluZGV4OiBvcGVuID8gMCA6IC0xLFxuICAgICAgb25Gb2N1czogaGFuZGxlRm9jdXNTZW50aW5lbCxcbiAgICAgIHJlZjogc2VudGluZWxFbmQsXG4gICAgICBcImRhdGEtdGVzdGlkXCI6IFwic2VudGluZWxFbmRcIlxuICAgIH0pXVxuICB9KTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEZvY3VzVHJhcC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIFR5cGVTY3JpcHQgdHlwZXMgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBBIHNpbmdsZSBjaGlsZCBjb250ZW50IGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogZWxlbWVudEFjY2VwdGluZ1JlZixcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGZvY3VzIHRyYXAgd2lsbCBub3QgYXV0b21hdGljYWxseSBzaGlmdCBmb2N1cyB0byBpdHNlbGYgd2hlbiBpdCBvcGVucywgYW5kXG4gICAqIHJlcGxhY2UgaXQgdG8gdGhlIGxhc3QgZm9jdXNlZCBlbGVtZW50IHdoZW4gaXQgY2xvc2VzLlxuICAgKiBUaGlzIGFsc28gd29ya3MgY29ycmVjdGx5IHdpdGggYW55IGZvY3VzIHRyYXAgY2hpbGRyZW4gdGhhdCBoYXZlIHRoZSBgZGlzYWJsZUF1dG9Gb2N1c2AgcHJvcC5cbiAgICpcbiAgICogR2VuZXJhbGx5IHRoaXMgc2hvdWxkIG5ldmVyIGJlIHNldCB0byBgdHJ1ZWAgYXMgaXQgbWFrZXMgdGhlIGZvY3VzIHRyYXAgbGVzc1xuICAgKiBhY2Nlc3NpYmxlIHRvIGFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMsIGxpa2Ugc2NyZWVuIHJlYWRlcnMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlQXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGZvY3VzIHRyYXAgd2lsbCBub3QgcHJldmVudCBmb2N1cyBmcm9tIGxlYXZpbmcgdGhlIGZvY3VzIHRyYXAgd2hpbGUgb3Blbi5cbiAgICpcbiAgICogR2VuZXJhbGx5IHRoaXMgc2hvdWxkIG5ldmVyIGJlIHNldCB0byBgdHJ1ZWAgYXMgaXQgbWFrZXMgdGhlIGZvY3VzIHRyYXAgbGVzc1xuICAgKiBhY2Nlc3NpYmxlIHRvIGFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMsIGxpa2Ugc2NyZWVuIHJlYWRlcnMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlRW5mb3JjZUZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGZvY3VzIHRyYXAgd2lsbCBub3QgcmVzdG9yZSBmb2N1cyB0byBwcmV2aW91c2x5IGZvY3VzZWQgZWxlbWVudCBvbmNlXG4gICAqIGZvY3VzIHRyYXAgaXMgaGlkZGVuIG9yIHVubW91bnRlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVSZXN0b3JlRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSBvZiBvcmRlcmVkIHRhYmJhYmxlIG5vZGVzIChpLmUuIGluIHRhYiBvcmRlcikgd2l0aGluIHRoZSByb290LlxuICAgKiBGb3IgaW5zdGFuY2UsIHlvdSBjYW4gcHJvdmlkZSB0aGUgXCJ0YWJiYWJsZVwiIG5wbSBkZXBlbmRlbmN5LlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByb290XG4gICAqL1xuICBnZXRUYWJiYWJsZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgZXh0ZW5kcyB0aGUgYG9wZW5gIHByb3AuXG4gICAqIEl0IGFsbG93cyB0byB0b2dnbGUgdGhlIG9wZW4gc3RhdGUgd2l0aG91dCBoYXZpbmcgdG8gd2FpdCBmb3IgYSByZXJlbmRlciB3aGVuIGNoYW5naW5nIHRoZSBgb3BlbmAgcHJvcC5cbiAgICogVGhpcyBwcm9wIHNob3VsZCBiZSBtZW1vaXplZC5cbiAgICogSXQgY2FuIGJlIHVzZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSBmb2N1cyB0cmFwIG1vdW50ZWQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICogQGRlZmF1bHQgZnVuY3Rpb24gZGVmYXVsdElzRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICogICByZXR1cm4gdHJ1ZTtcbiAgICogfVxuICAgKi9cbiAgaXNFbmFibGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgZm9jdXMgaXMgbG9ja2VkLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZFxufSA6IHZvaWQgMDtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBGb2N1c1RyYXBbJ3Byb3BUeXBlcycgKyAnJ10gPSBleGFjdFByb3AoRm9jdXNUcmFwLnByb3BUeXBlcyk7XG59XG5leHBvcnQgZGVmYXVsdCBGb2N1c1RyYXA7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1widGhlbWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgVGhlbWVQcm92aWRlciBhcyBTeXN0ZW1UaGVtZVByb3ZpZGVyIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IFRIRU1FX0lEIGZyb20gJy4vaWRlbnRpZmllcic7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVGhlbWVQcm92aWRlcihfcmVmKSB7XG4gIGxldCB7XG4gICAgICB0aGVtZTogdGhlbWVJbnB1dFxuICAgIH0gPSBfcmVmLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgc2NvcGVkVGhlbWUgPSB0aGVtZUlucHV0W1RIRU1FX0lEXTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFN5c3RlbVRoZW1lUHJvdmlkZXIsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIHRoZW1lSWQ6IHNjb3BlZFRoZW1lID8gVEhFTUVfSUQgOiB1bmRlZmluZWQsXG4gICAgdGhlbWU6IHNjb3BlZFRoZW1lIHx8IHRoZW1lSW5wdXRcbiAgfSkpO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVGhlbWVQcm92aWRlci5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBZb3VyIGNvbXBvbmVudCB0cmVlLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogQSB0aGVtZSBvYmplY3QuIFlvdSBjYW4gcHJvdmlkZSBhIGZ1bmN0aW9uIHRvIGV4dGVuZCB0aGUgb3V0ZXIgdGhlbWUuXG4gICAqL1xuICB0aGVtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmZ1bmNdKS5pc1JlcXVpcmVkXG59IDogdm9pZCAwOyIsImNvbnN0IGNvbW1vbiA9IHtcbiAgYmxhY2s6ICcjMDAwJyxcbiAgd2hpdGU6ICcjZmZmJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1vbjsiLCJjb25zdCBncmV5ID0ge1xuICA1MDogJyNmYWZhZmEnLFxuICAxMDA6ICcjZjVmNWY1JyxcbiAgMjAwOiAnI2VlZWVlZScsXG4gIDMwMDogJyNlMGUwZTAnLFxuICA0MDA6ICcjYmRiZGJkJyxcbiAgNTAwOiAnIzllOWU5ZScsXG4gIDYwMDogJyM3NTc1NzUnLFxuICA3MDA6ICcjNjE2MTYxJyxcbiAgODAwOiAnIzQyNDI0MicsXG4gIDkwMDogJyMyMTIxMjEnLFxuICBBMTAwOiAnI2Y1ZjVmNScsXG4gIEEyMDA6ICcjZWVlZWVlJyxcbiAgQTQwMDogJyNiZGJkYmQnLFxuICBBNzAwOiAnIzYxNjE2MSdcbn07XG5leHBvcnQgZGVmYXVsdCBncmV5OyIsImNvbnN0IHB1cnBsZSA9IHtcbiAgNTA6ICcjZjNlNWY1JyxcbiAgMTAwOiAnI2UxYmVlNycsXG4gIDIwMDogJyNjZTkzZDgnLFxuICAzMDA6ICcjYmE2OGM4JyxcbiAgNDAwOiAnI2FiNDdiYycsXG4gIDUwMDogJyM5YzI3YjAnLFxuICA2MDA6ICcjOGUyNGFhJyxcbiAgNzAwOiAnIzdiMWZhMicsXG4gIDgwMDogJyM2YTFiOWEnLFxuICA5MDA6ICcjNGExNDhjJyxcbiAgQTEwMDogJyNlYTgwZmMnLFxuICBBMjAwOiAnI2UwNDBmYicsXG4gIEE0MDA6ICcjZDUwMGY5JyxcbiAgQTcwMDogJyNhYTAwZmYnXG59O1xuZXhwb3J0IGRlZmF1bHQgcHVycGxlOyIsImNvbnN0IHJlZCA9IHtcbiAgNTA6ICcjZmZlYmVlJyxcbiAgMTAwOiAnI2ZmY2RkMicsXG4gIDIwMDogJyNlZjlhOWEnLFxuICAzMDA6ICcjZTU3MzczJyxcbiAgNDAwOiAnI2VmNTM1MCcsXG4gIDUwMDogJyNmNDQzMzYnLFxuICA2MDA6ICcjZTUzOTM1JyxcbiAgNzAwOiAnI2QzMmYyZicsXG4gIDgwMDogJyNjNjI4MjgnLFxuICA5MDA6ICcjYjcxYzFjJyxcbiAgQTEwMDogJyNmZjhhODAnLFxuICBBMjAwOiAnI2ZmNTI1MicsXG4gIEE0MDA6ICcjZmYxNzQ0JyxcbiAgQTcwMDogJyNkNTAwMDAnXG59O1xuZXhwb3J0IGRlZmF1bHQgcmVkOyIsImNvbnN0IG9yYW5nZSA9IHtcbiAgNTA6ICcjZmZmM2UwJyxcbiAgMTAwOiAnI2ZmZTBiMicsXG4gIDIwMDogJyNmZmNjODAnLFxuICAzMDA6ICcjZmZiNzRkJyxcbiAgNDAwOiAnI2ZmYTcyNicsXG4gIDUwMDogJyNmZjk4MDAnLFxuICA2MDA6ICcjZmI4YzAwJyxcbiAgNzAwOiAnI2Y1N2MwMCcsXG4gIDgwMDogJyNlZjZjMDAnLFxuICA5MDA6ICcjZTY1MTAwJyxcbiAgQTEwMDogJyNmZmQxODAnLFxuICBBMjAwOiAnI2ZmYWI0MCcsXG4gIEE0MDA6ICcjZmY5MTAwJyxcbiAgQTcwMDogJyNmZjZkMDAnXG59O1xuZXhwb3J0IGRlZmF1bHQgb3JhbmdlOyIsImNvbnN0IGJsdWUgPSB7XG4gIDUwOiAnI2UzZjJmZCcsXG4gIDEwMDogJyNiYmRlZmInLFxuICAyMDA6ICcjOTBjYWY5JyxcbiAgMzAwOiAnIzY0YjVmNicsXG4gIDQwMDogJyM0MmE1ZjUnLFxuICA1MDA6ICcjMjE5NmYzJyxcbiAgNjAwOiAnIzFlODhlNScsXG4gIDcwMDogJyMxOTc2ZDInLFxuICA4MDA6ICcjMTU2NWMwJyxcbiAgOTAwOiAnIzBkNDdhMScsXG4gIEExMDA6ICcjODJiMWZmJyxcbiAgQTIwMDogJyM0NDhhZmYnLFxuICBBNDAwOiAnIzI5NzlmZicsXG4gIEE3MDA6ICcjMjk2MmZmJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGJsdWU7IiwiY29uc3QgbGlnaHRCbHVlID0ge1xuICA1MDogJyNlMWY1ZmUnLFxuICAxMDA6ICcjYjNlNWZjJyxcbiAgMjAwOiAnIzgxZDRmYScsXG4gIDMwMDogJyM0ZmMzZjcnLFxuICA0MDA6ICcjMjliNmY2JyxcbiAgNTAwOiAnIzAzYTlmNCcsXG4gIDYwMDogJyMwMzliZTUnLFxuICA3MDA6ICcjMDI4OGQxJyxcbiAgODAwOiAnIzAyNzdiZCcsXG4gIDkwMDogJyMwMTU3OWInLFxuICBBMTAwOiAnIzgwZDhmZicsXG4gIEEyMDA6ICcjNDBjNGZmJyxcbiAgQTQwMDogJyMwMGIwZmYnLFxuICBBNzAwOiAnIzAwOTFlYSdcbn07XG5leHBvcnQgZGVmYXVsdCBsaWdodEJsdWU7IiwiY29uc3QgZ3JlZW4gPSB7XG4gIDUwOiAnI2U4ZjVlOScsXG4gIDEwMDogJyNjOGU2YzknLFxuICAyMDA6ICcjYTVkNmE3JyxcbiAgMzAwOiAnIzgxYzc4NCcsXG4gIDQwMDogJyM2NmJiNmEnLFxuICA1MDA6ICcjNGNhZjUwJyxcbiAgNjAwOiAnIzQzYTA0NycsXG4gIDcwMDogJyMzODhlM2MnLFxuICA4MDA6ICcjMmU3ZDMyJyxcbiAgOTAwOiAnIzFiNWUyMCcsXG4gIEExMDA6ICcjYjlmNmNhJyxcbiAgQTIwMDogJyM2OWYwYWUnLFxuICBBNDAwOiAnIzAwZTY3NicsXG4gIEE3MDA6ICcjMDBjODUzJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGdyZWVuOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSBmcm9tIFwiQG11aS91dGlscy9mb3JtYXRNdWlFcnJvck1lc3NhZ2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm1vZGVcIiwgXCJjb250cmFzdFRocmVzaG9sZFwiLCBcInRvbmFsT2Zmc2V0XCJdO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5pbXBvcnQgeyBkYXJrZW4sIGdldENvbnRyYXN0UmF0aW8sIGxpZ2h0ZW4gfSBmcm9tICdAbXVpL3N5c3RlbS9jb2xvck1hbmlwdWxhdG9yJztcbmltcG9ydCBjb21tb24gZnJvbSAnLi4vY29sb3JzL2NvbW1vbic7XG5pbXBvcnQgZ3JleSBmcm9tICcuLi9jb2xvcnMvZ3JleSc7XG5pbXBvcnQgcHVycGxlIGZyb20gJy4uL2NvbG9ycy9wdXJwbGUnO1xuaW1wb3J0IHJlZCBmcm9tICcuLi9jb2xvcnMvcmVkJztcbmltcG9ydCBvcmFuZ2UgZnJvbSAnLi4vY29sb3JzL29yYW5nZSc7XG5pbXBvcnQgYmx1ZSBmcm9tICcuLi9jb2xvcnMvYmx1ZSc7XG5pbXBvcnQgbGlnaHRCbHVlIGZyb20gJy4uL2NvbG9ycy9saWdodEJsdWUnO1xuaW1wb3J0IGdyZWVuIGZyb20gJy4uL2NvbG9ycy9ncmVlbic7XG5leHBvcnQgY29uc3QgbGlnaHQgPSB7XG4gIC8vIFRoZSBjb2xvcnMgdXNlZCB0byBzdHlsZSB0aGUgdGV4dC5cbiAgdGV4dDoge1xuICAgIC8vIFRoZSBtb3N0IGltcG9ydGFudCB0ZXh0LlxuICAgIHByaW1hcnk6ICdyZ2JhKDAsIDAsIDAsIDAuODcpJyxcbiAgICAvLyBTZWNvbmRhcnkgdGV4dC5cbiAgICBzZWNvbmRhcnk6ICdyZ2JhKDAsIDAsIDAsIDAuNiknLFxuICAgIC8vIERpc2FibGVkIHRleHQgaGF2ZSBldmVuIGxvd2VyIHZpc3VhbCBwcm9taW5lbmNlLlxuICAgIGRpc2FibGVkOiAncmdiYSgwLCAwLCAwLCAwLjM4KSdcbiAgfSxcbiAgLy8gVGhlIGNvbG9yIHVzZWQgdG8gZGl2aWRlIGRpZmZlcmVudCBlbGVtZW50cy5cbiAgZGl2aWRlcjogJ3JnYmEoMCwgMCwgMCwgMC4xMiknLFxuICAvLyBUaGUgYmFja2dyb3VuZCBjb2xvcnMgdXNlZCB0byBzdHlsZSB0aGUgc3VyZmFjZXMuXG4gIC8vIENvbnNpc3RlbmN5IGJldHdlZW4gdGhlc2UgdmFsdWVzIGlzIGltcG9ydGFudC5cbiAgYmFja2dyb3VuZDoge1xuICAgIHBhcGVyOiBjb21tb24ud2hpdGUsXG4gICAgZGVmYXVsdDogY29tbW9uLndoaXRlXG4gIH0sXG4gIC8vIFRoZSBjb2xvcnMgdXNlZCB0byBzdHlsZSB0aGUgYWN0aW9uIGVsZW1lbnRzLlxuICBhY3Rpb246IHtcbiAgICAvLyBUaGUgY29sb3Igb2YgYW4gYWN0aXZlIGFjdGlvbiBsaWtlIGFuIGljb24gYnV0dG9uLlxuICAgIGFjdGl2ZTogJ3JnYmEoMCwgMCwgMCwgMC41NCknLFxuICAgIC8vIFRoZSBjb2xvciBvZiBhbiBob3ZlcmVkIGFjdGlvbi5cbiAgICBob3ZlcjogJ3JnYmEoMCwgMCwgMCwgMC4wNCknLFxuICAgIGhvdmVyT3BhY2l0eTogMC4wNCxcbiAgICAvLyBUaGUgY29sb3Igb2YgYSBzZWxlY3RlZCBhY3Rpb24uXG4gICAgc2VsZWN0ZWQ6ICdyZ2JhKDAsIDAsIDAsIDAuMDgpJyxcbiAgICBzZWxlY3RlZE9wYWNpdHk6IDAuMDgsXG4gICAgLy8gVGhlIGNvbG9yIG9mIGEgZGlzYWJsZWQgYWN0aW9uLlxuICAgIGRpc2FibGVkOiAncmdiYSgwLCAwLCAwLCAwLjI2KScsXG4gICAgLy8gVGhlIGJhY2tncm91bmQgY29sb3Igb2YgYSBkaXNhYmxlZCBhY3Rpb24uXG4gICAgZGlzYWJsZWRCYWNrZ3JvdW5kOiAncmdiYSgwLCAwLCAwLCAwLjEyKScsXG4gICAgZGlzYWJsZWRPcGFjaXR5OiAwLjM4LFxuICAgIGZvY3VzOiAncmdiYSgwLCAwLCAwLCAwLjEyKScsXG4gICAgZm9jdXNPcGFjaXR5OiAwLjEyLFxuICAgIGFjdGl2YXRlZE9wYWNpdHk6IDAuMTJcbiAgfVxufTtcbmV4cG9ydCBjb25zdCBkYXJrID0ge1xuICB0ZXh0OiB7XG4gICAgcHJpbWFyeTogY29tbW9uLndoaXRlLFxuICAgIHNlY29uZGFyeTogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC43KScsXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSknLFxuICAgIGljb246ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSknXG4gIH0sXG4gIGRpdmlkZXI6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpJyxcbiAgYmFja2dyb3VuZDoge1xuICAgIHBhcGVyOiAnIzEyMTIxMicsXG4gICAgZGVmYXVsdDogJyMxMjEyMTInXG4gIH0sXG4gIGFjdGlvbjoge1xuICAgIGFjdGl2ZTogY29tbW9uLndoaXRlLFxuICAgIGhvdmVyOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KScsXG4gICAgaG92ZXJPcGFjaXR5OiAwLjA4LFxuICAgIHNlbGVjdGVkOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KScsXG4gICAgc2VsZWN0ZWRPcGFjaXR5OiAwLjE2LFxuICAgIGRpc2FibGVkOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpJyxcbiAgICBkaXNhYmxlZEJhY2tncm91bmQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpJyxcbiAgICBkaXNhYmxlZE9wYWNpdHk6IDAuMzgsXG4gICAgZm9jdXM6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpJyxcbiAgICBmb2N1c09wYWNpdHk6IDAuMTIsXG4gICAgYWN0aXZhdGVkT3BhY2l0eTogMC4yNFxuICB9XG59O1xuZnVuY3Rpb24gYWRkTGlnaHRPckRhcmsoaW50ZW50LCBkaXJlY3Rpb24sIHNoYWRlLCB0b25hbE9mZnNldCkge1xuICBjb25zdCB0b25hbE9mZnNldExpZ2h0ID0gdG9uYWxPZmZzZXQubGlnaHQgfHwgdG9uYWxPZmZzZXQ7XG4gIGNvbnN0IHRvbmFsT2Zmc2V0RGFyayA9IHRvbmFsT2Zmc2V0LmRhcmsgfHwgdG9uYWxPZmZzZXQgKiAxLjU7XG4gIGlmICghaW50ZW50W2RpcmVjdGlvbl0pIHtcbiAgICBpZiAoaW50ZW50Lmhhc093blByb3BlcnR5KHNoYWRlKSkge1xuICAgICAgaW50ZW50W2RpcmVjdGlvbl0gPSBpbnRlbnRbc2hhZGVdO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnbGlnaHQnKSB7XG4gICAgICBpbnRlbnQubGlnaHQgPSBsaWdodGVuKGludGVudC5tYWluLCB0b25hbE9mZnNldExpZ2h0KTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2RhcmsnKSB7XG4gICAgICBpbnRlbnQuZGFyayA9IGRhcmtlbihpbnRlbnQubWFpbiwgdG9uYWxPZmZzZXREYXJrKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRQcmltYXJ5KG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogYmx1ZVsyMDBdLFxuICAgICAgbGlnaHQ6IGJsdWVbNTBdLFxuICAgICAgZGFyazogYmx1ZVs0MDBdXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1haW46IGJsdWVbNzAwXSxcbiAgICBsaWdodDogYmx1ZVs0MDBdLFxuICAgIGRhcms6IGJsdWVbODAwXVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFNlY29uZGFyeShtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IHB1cnBsZVsyMDBdLFxuICAgICAgbGlnaHQ6IHB1cnBsZVs1MF0sXG4gICAgICBkYXJrOiBwdXJwbGVbNDAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBwdXJwbGVbNTAwXSxcbiAgICBsaWdodDogcHVycGxlWzMwMF0sXG4gICAgZGFyazogcHVycGxlWzcwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRFcnJvcihtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IHJlZFs1MDBdLFxuICAgICAgbGlnaHQ6IHJlZFszMDBdLFxuICAgICAgZGFyazogcmVkWzcwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogcmVkWzcwMF0sXG4gICAgbGlnaHQ6IHJlZFs0MDBdLFxuICAgIGRhcms6IHJlZFs4MDBdXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0SW5mbyhtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IGxpZ2h0Qmx1ZVs0MDBdLFxuICAgICAgbGlnaHQ6IGxpZ2h0Qmx1ZVszMDBdLFxuICAgICAgZGFyazogbGlnaHRCbHVlWzcwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogbGlnaHRCbHVlWzcwMF0sXG4gICAgbGlnaHQ6IGxpZ2h0Qmx1ZVs1MDBdLFxuICAgIGRhcms6IGxpZ2h0Qmx1ZVs5MDBdXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0U3VjY2Vzcyhtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IGdyZWVuWzQwMF0sXG4gICAgICBsaWdodDogZ3JlZW5bMzAwXSxcbiAgICAgIGRhcms6IGdyZWVuWzcwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogZ3JlZW5bODAwXSxcbiAgICBsaWdodDogZ3JlZW5bNTAwXSxcbiAgICBkYXJrOiBncmVlbls5MDBdXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0V2FybmluZyhtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IG9yYW5nZVs0MDBdLFxuICAgICAgbGlnaHQ6IG9yYW5nZVszMDBdLFxuICAgICAgZGFyazogb3JhbmdlWzcwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogJyNlZDZjMDInLFxuICAgIC8vIGNsb3Nlc3QgdG8gb3JhbmdlWzgwMF0gdGhhdCBwYXNzIDM6MS5cbiAgICBsaWdodDogb3JhbmdlWzUwMF0sXG4gICAgZGFyazogb3JhbmdlWzkwMF1cbiAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVBhbGV0dGUocGFsZXR0ZSkge1xuICBjb25zdCB7XG4gICAgICBtb2RlID0gJ2xpZ2h0JyxcbiAgICAgIGNvbnRyYXN0VGhyZXNob2xkID0gMyxcbiAgICAgIHRvbmFsT2Zmc2V0ID0gMC4yXG4gICAgfSA9IHBhbGV0dGUsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwYWxldHRlLCBfZXhjbHVkZWQpO1xuICBjb25zdCBwcmltYXJ5ID0gcGFsZXR0ZS5wcmltYXJ5IHx8IGdldERlZmF1bHRQcmltYXJ5KG1vZGUpO1xuICBjb25zdCBzZWNvbmRhcnkgPSBwYWxldHRlLnNlY29uZGFyeSB8fCBnZXREZWZhdWx0U2Vjb25kYXJ5KG1vZGUpO1xuICBjb25zdCBlcnJvciA9IHBhbGV0dGUuZXJyb3IgfHwgZ2V0RGVmYXVsdEVycm9yKG1vZGUpO1xuICBjb25zdCBpbmZvID0gcGFsZXR0ZS5pbmZvIHx8IGdldERlZmF1bHRJbmZvKG1vZGUpO1xuICBjb25zdCBzdWNjZXNzID0gcGFsZXR0ZS5zdWNjZXNzIHx8IGdldERlZmF1bHRTdWNjZXNzKG1vZGUpO1xuICBjb25zdCB3YXJuaW5nID0gcGFsZXR0ZS53YXJuaW5nIHx8IGdldERlZmF1bHRXYXJuaW5nKG1vZGUpO1xuXG4gIC8vIFVzZSB0aGUgc2FtZSBsb2dpYyBhc1xuICAvLyBCb290c3RyYXA6IGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iLzFkNmUzNzEwZGQ0NDdkZTFhMjAwZjI5ZThmYTUyMWY4YTA5MDhmNzAvc2Nzcy9fZnVuY3Rpb25zLnNjc3MjTDU5XG4gIC8vIGFuZCBtYXRlcmlhbC1jb21wb25lbnRzLXdlYiBodHRwczovL2dpdGh1Yi5jb20vbWF0ZXJpYWwtY29tcG9uZW50cy9tYXRlcmlhbC1jb21wb25lbnRzLXdlYi9ibG9iL2FjNDZiODg2M2M0ZGFiOWZjMjJjNGM2NjJkYzZiZDFiNjVkZDY1MmYvcGFja2FnZXMvbWRjLXRoZW1lL19mdW5jdGlvbnMuc2NzcyNMNTRcbiAgZnVuY3Rpb24gZ2V0Q29udHJhc3RUZXh0KGJhY2tncm91bmQpIHtcbiAgICBjb25zdCBjb250cmFzdFRleHQgPSBnZXRDb250cmFzdFJhdGlvKGJhY2tncm91bmQsIGRhcmsudGV4dC5wcmltYXJ5KSA+PSBjb250cmFzdFRocmVzaG9sZCA/IGRhcmsudGV4dC5wcmltYXJ5IDogbGlnaHQudGV4dC5wcmltYXJ5O1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zdCBjb250cmFzdCA9IGdldENvbnRyYXN0UmF0aW8oYmFja2dyb3VuZCwgY29udHJhc3RUZXh0KTtcbiAgICAgIGlmIChjb250cmFzdCA8IDMpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIGNvbnRyYXN0IHJhdGlvIG9mICR7Y29udHJhc3R9OjEgZm9yICR7Y29udHJhc3RUZXh0fSBvbiAke2JhY2tncm91bmR9YCwgJ2ZhbGxzIGJlbG93IHRoZSBXQ0FHIHJlY29tbWVuZGVkIGFic29sdXRlIG1pbmltdW0gY29udHJhc3QgcmF0aW8gb2YgMzoxLicsICdodHRwczovL3d3dy53My5vcmcvVFIvMjAwOC9SRUMtV0NBRzIwLTIwMDgxMjExLyN2aXN1YWwtYXVkaW8tY29udHJhc3QtY29udHJhc3QnXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb250cmFzdFRleHQ7XG4gIH1cbiAgY29uc3QgYXVnbWVudENvbG9yID0gKHtcbiAgICBjb2xvcixcbiAgICBuYW1lLFxuICAgIG1haW5TaGFkZSA9IDUwMCxcbiAgICBsaWdodFNoYWRlID0gMzAwLFxuICAgIGRhcmtTaGFkZSA9IDcwMFxuICB9KSA9PiB7XG4gICAgY29sb3IgPSBfZXh0ZW5kcyh7fSwgY29sb3IpO1xuICAgIGlmICghY29sb3IubWFpbiAmJiBjb2xvclttYWluU2hhZGVdKSB7XG4gICAgICBjb2xvci5tYWluID0gY29sb3JbbWFpblNoYWRlXTtcbiAgICB9XG4gICAgaWYgKCFjb2xvci5oYXNPd25Qcm9wZXJ0eSgnbWFpbicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogVGhlIGNvbG9yJHtuYW1lID8gYCAoJHtuYW1lfSlgIDogJyd9IHByb3ZpZGVkIHRvIGF1Z21lbnRDb2xvcihjb2xvcikgaXMgaW52YWxpZC5cblRoZSBjb2xvciBvYmplY3QgbmVlZHMgdG8gaGF2ZSBhIFxcYG1haW5cXGAgcHJvcGVydHkgb3IgYSBcXGAke21haW5TaGFkZX1cXGAgcHJvcGVydHkuYCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMTEsIG5hbWUgPyBgICgke25hbWV9KWAgOiAnJywgbWFpblNoYWRlKSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29sb3IubWFpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBUaGUgY29sb3Ike25hbWUgPyBgICgke25hbWV9KWAgOiAnJ30gcHJvdmlkZWQgdG8gYXVnbWVudENvbG9yKGNvbG9yKSBpcyBpbnZhbGlkLlxuXFxgY29sb3IubWFpblxcYCBzaG91bGQgYmUgYSBzdHJpbmcsIGJ1dCBcXGAke0pTT04uc3RyaW5naWZ5KGNvbG9yLm1haW4pfVxcYCB3YXMgcHJvdmlkZWQgaW5zdGVhZC5cblxuRGlkIHlvdSBpbnRlbmQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGFwcHJvYWNoZXM/XG5cbmltcG9ydCB7IGdyZWVuIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWwvY29sb3JzXCI7XG5cbmNvbnN0IHRoZW1lMSA9IGNyZWF0ZVRoZW1lKHsgcGFsZXR0ZToge1xuICBwcmltYXJ5OiBncmVlbixcbn0gfSk7XG5cbmNvbnN0IHRoZW1lMiA9IGNyZWF0ZVRoZW1lKHsgcGFsZXR0ZToge1xuICBwcmltYXJ5OiB7IG1haW46IGdyZWVuWzUwMF0gfSxcbn0gfSk7YCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMTIsIG5hbWUgPyBgICgke25hbWV9KWAgOiAnJywgSlNPTi5zdHJpbmdpZnkoY29sb3IubWFpbikpKTtcbiAgICB9XG4gICAgYWRkTGlnaHRPckRhcmsoY29sb3IsICdsaWdodCcsIGxpZ2h0U2hhZGUsIHRvbmFsT2Zmc2V0KTtcbiAgICBhZGRMaWdodE9yRGFyayhjb2xvciwgJ2RhcmsnLCBkYXJrU2hhZGUsIHRvbmFsT2Zmc2V0KTtcbiAgICBpZiAoIWNvbG9yLmNvbnRyYXN0VGV4dCkge1xuICAgICAgY29sb3IuY29udHJhc3RUZXh0ID0gZ2V0Q29udHJhc3RUZXh0KGNvbG9yLm1haW4pO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3I7XG4gIH07XG4gIGNvbnN0IG1vZGVzID0ge1xuICAgIGRhcmssXG4gICAgbGlnaHRcbiAgfTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoIW1vZGVzW21vZGVdKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFRoZSBwYWxldHRlIG1vZGUgXFxgJHttb2RlfVxcYCBpcyBub3Qgc3VwcG9ydGVkLmApO1xuICAgIH1cbiAgfVxuICBjb25zdCBwYWxldHRlT3V0cHV0ID0gZGVlcG1lcmdlKF9leHRlbmRzKHtcbiAgICAvLyBBIGNvbGxlY3Rpb24gb2YgY29tbW9uIGNvbG9ycy5cbiAgICBjb21tb246IF9leHRlbmRzKHt9LCBjb21tb24pLFxuICAgIC8vIHByZXZlbnQgbXV0YWJsZSBvYmplY3QuXG4gICAgLy8gVGhlIHBhbGV0dGUgbW9kZSwgY2FuIGJlIGxpZ2h0IG9yIGRhcmsuXG4gICAgbW9kZSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IHByaW1hcnkgaW50ZXJmYWNlIGVsZW1lbnRzIGZvciBhIHVzZXIuXG4gICAgcHJpbWFyeTogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBwcmltYXJ5LFxuICAgICAgbmFtZTogJ3ByaW1hcnknXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHJlcHJlc2VudCBzZWNvbmRhcnkgaW50ZXJmYWNlIGVsZW1lbnRzIGZvciBhIHVzZXIuXG4gICAgc2Vjb25kYXJ5OiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHNlY29uZGFyeSxcbiAgICAgIG5hbWU6ICdzZWNvbmRhcnknLFxuICAgICAgbWFpblNoYWRlOiAnQTQwMCcsXG4gICAgICBsaWdodFNoYWRlOiAnQTIwMCcsXG4gICAgICBkYXJrU2hhZGU6ICdBNzAwJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byByZXByZXNlbnQgaW50ZXJmYWNlIGVsZW1lbnRzIHRoYXQgdGhlIHVzZXIgc2hvdWxkIGJlIG1hZGUgYXdhcmUgb2YuXG4gICAgZXJyb3I6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogZXJyb3IsXG4gICAgICBuYW1lOiAnZXJyb3InXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHJlcHJlc2VudCBwb3RlbnRpYWxseSBkYW5nZXJvdXMgYWN0aW9ucyBvciBpbXBvcnRhbnQgbWVzc2FnZXMuXG4gICAgd2FybmluZzogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiB3YXJuaW5nLFxuICAgICAgbmFtZTogJ3dhcm5pbmcnXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHByZXNlbnQgaW5mb3JtYXRpb24gdG8gdGhlIHVzZXIgdGhhdCBpcyBuZXV0cmFsIGFuZCBub3QgbmVjZXNzYXJpbHkgaW1wb3J0YW50LlxuICAgIGluZm86IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogaW5mbyxcbiAgICAgIG5hbWU6ICdpbmZvJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIGFuIGFjdGlvbiB0aGF0IHVzZXIgdHJpZ2dlcmVkLlxuICAgIHN1Y2Nlc3M6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogc3VjY2VzcyxcbiAgICAgIG5hbWU6ICdzdWNjZXNzJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBncmV5IGNvbG9ycy5cbiAgICBncmV5LFxuICAgIC8vIFVzZWQgYnkgYGdldENvbnRyYXN0VGV4dCgpYCB0byBtYXhpbWl6ZSB0aGUgY29udHJhc3QgYmV0d2VlblxuICAgIC8vIHRoZSBiYWNrZ3JvdW5kIGFuZCB0aGUgdGV4dC5cbiAgICBjb250cmFzdFRocmVzaG9sZCxcbiAgICAvLyBUYWtlcyBhIGJhY2tncm91bmQgY29sb3IgYW5kIHJldHVybnMgdGhlIHRleHQgY29sb3IgdGhhdCBtYXhpbWl6ZXMgdGhlIGNvbnRyYXN0LlxuICAgIGdldENvbnRyYXN0VGV4dCxcbiAgICAvLyBHZW5lcmF0ZSBhIHJpY2ggY29sb3Igb2JqZWN0LlxuICAgIGF1Z21lbnRDb2xvcixcbiAgICAvLyBVc2VkIGJ5IHRoZSBmdW5jdGlvbnMgYmVsb3cgdG8gc2hpZnQgYSBjb2xvcidzIGx1bWluYW5jZSBieSBhcHByb3hpbWF0ZWx5XG4gICAgLy8gdHdvIGluZGV4ZXMgd2l0aGluIGl0cyB0b25hbCBwYWxldHRlLlxuICAgIC8vIEUuZy4sIHNoaWZ0IGZyb20gUmVkIDUwMCB0byBSZWQgMzAwIG9yIFJlZCA3MDAuXG4gICAgdG9uYWxPZmZzZXRcbiAgfSwgbW9kZXNbbW9kZV0pLCBvdGhlcik7XG4gIHJldHVybiBwYWxldHRlT3V0cHV0O1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJmb250RmFtaWx5XCIsIFwiZm9udFNpemVcIiwgXCJmb250V2VpZ2h0TGlnaHRcIiwgXCJmb250V2VpZ2h0UmVndWxhclwiLCBcImZvbnRXZWlnaHRNZWRpdW1cIiwgXCJmb250V2VpZ2h0Qm9sZFwiLCBcImh0bWxGb250U2l6ZVwiLCBcImFsbFZhcmlhbnRzXCIsIFwicHhUb1JlbVwiXTtcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuZnVuY3Rpb24gcm91bmQodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiAxZTUpIC8gMWU1O1xufVxuY29uc3QgY2FzZUFsbENhcHMgPSB7XG4gIHRleHRUcmFuc2Zvcm06ICd1cHBlcmNhc2UnXG59O1xuY29uc3QgZGVmYXVsdEZvbnRGYW1pbHkgPSAnXCJSb2JvdG9cIiwgXCJIZWx2ZXRpY2FcIiwgXCJBcmlhbFwiLCBzYW5zLXNlcmlmJztcblxuLyoqXG4gKiBAc2VlIEBsaW5re2h0dHBzOi8vbTIubWF0ZXJpYWwuaW8vZGVzaWduL3R5cG9ncmFwaHkvdGhlLXR5cGUtc3lzdGVtLmh0bWx9XG4gKiBAc2VlIEBsaW5re2h0dHBzOi8vbTIubWF0ZXJpYWwuaW8vZGVzaWduL3R5cG9ncmFwaHkvdW5kZXJzdGFuZGluZy10eXBvZ3JhcGh5Lmh0bWx9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVR5cG9ncmFwaHkocGFsZXR0ZSwgdHlwb2dyYXBoeSkge1xuICBjb25zdCBfcmVmID0gdHlwZW9mIHR5cG9ncmFwaHkgPT09ICdmdW5jdGlvbicgPyB0eXBvZ3JhcGh5KHBhbGV0dGUpIDogdHlwb2dyYXBoeSxcbiAgICB7XG4gICAgICBmb250RmFtaWx5ID0gZGVmYXVsdEZvbnRGYW1pbHksXG4gICAgICAvLyBUaGUgZGVmYXVsdCBmb250IHNpemUgb2YgdGhlIE1hdGVyaWFsIFNwZWNpZmljYXRpb24uXG4gICAgICBmb250U2l6ZSA9IDE0LFxuICAgICAgLy8gcHhcbiAgICAgIGZvbnRXZWlnaHRMaWdodCA9IDMwMCxcbiAgICAgIGZvbnRXZWlnaHRSZWd1bGFyID0gNDAwLFxuICAgICAgZm9udFdlaWdodE1lZGl1bSA9IDUwMCxcbiAgICAgIGZvbnRXZWlnaHRCb2xkID0gNzAwLFxuICAgICAgLy8gVGVsbCBNVUkgd2hhdCdzIHRoZSBmb250LXNpemUgb24gdGhlIGh0bWwgZWxlbWVudC5cbiAgICAgIC8vIDE2cHggaXMgdGhlIGRlZmF1bHQgZm9udC1zaXplIHVzZWQgYnkgYnJvd3NlcnMuXG4gICAgICBodG1sRm9udFNpemUgPSAxNixcbiAgICAgIC8vIEFwcGx5IHRoZSBDU1MgcHJvcGVydGllcyB0byBhbGwgdGhlIHZhcmlhbnRzLlxuICAgICAgYWxsVmFyaWFudHMsXG4gICAgICBweFRvUmVtOiBweFRvUmVtMlxuICAgIH0gPSBfcmVmLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodHlwZW9mIGZvbnRTaXplICE9PSAnbnVtYmVyJykge1xuICAgICAgY29uc29sZS5lcnJvcignTVVJOiBgZm9udFNpemVgIGlzIHJlcXVpcmVkIHRvIGJlIGEgbnVtYmVyLicpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGh0bWxGb250U2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogYGh0bWxGb250U2l6ZWAgaXMgcmVxdWlyZWQgdG8gYmUgYSBudW1iZXIuJyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGNvZWYgPSBmb250U2l6ZSAvIDE0O1xuICBjb25zdCBweFRvUmVtID0gcHhUb1JlbTIgfHwgKHNpemUgPT4gYCR7c2l6ZSAvIGh0bWxGb250U2l6ZSAqIGNvZWZ9cmVtYCk7XG4gIGNvbnN0IGJ1aWxkVmFyaWFudCA9IChmb250V2VpZ2h0LCBzaXplLCBsaW5lSGVpZ2h0LCBsZXR0ZXJTcGFjaW5nLCBjYXNpbmcpID0+IF9leHRlbmRzKHtcbiAgICBmb250RmFtaWx5LFxuICAgIGZvbnRXZWlnaHQsXG4gICAgZm9udFNpemU6IHB4VG9SZW0oc2l6ZSksXG4gICAgLy8gVW5pdGxlc3MgZm9sbG93aW5nIGh0dHBzOi8vbWV5ZXJ3ZWIuY29tL2VyaWMvdGhvdWdodHMvMjAwNi8wMi8wOC91bml0bGVzcy1saW5lLWhlaWdodHMvXG4gICAgbGluZUhlaWdodFxuICB9LCBmb250RmFtaWx5ID09PSBkZWZhdWx0Rm9udEZhbWlseSA/IHtcbiAgICBsZXR0ZXJTcGFjaW5nOiBgJHtyb3VuZChsZXR0ZXJTcGFjaW5nIC8gc2l6ZSl9ZW1gXG4gIH0gOiB7fSwgY2FzaW5nLCBhbGxWYXJpYW50cyk7XG4gIGNvbnN0IHZhcmlhbnRzID0ge1xuICAgIGgxOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodExpZ2h0LCA5NiwgMS4xNjcsIC0xLjUpLFxuICAgIGgyOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodExpZ2h0LCA2MCwgMS4yLCAtMC41KSxcbiAgICBoMzogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCA0OCwgMS4xNjcsIDApLFxuICAgIGg0OiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDM0LCAxLjIzNSwgMC4yNSksXG4gICAgaDU6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMjQsIDEuMzM0LCAwKSxcbiAgICBoNjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRNZWRpdW0sIDIwLCAxLjYsIDAuMTUpLFxuICAgIHN1YnRpdGxlMTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxNiwgMS43NSwgMC4xNSksXG4gICAgc3VidGl0bGUyOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodE1lZGl1bSwgMTQsIDEuNTcsIDAuMSksXG4gICAgYm9keTE6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTYsIDEuNSwgMC4xNSksXG4gICAgYm9keTI6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTQsIDEuNDMsIDAuMTUpLFxuICAgIGJ1dHRvbjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRNZWRpdW0sIDE0LCAxLjc1LCAwLjQsIGNhc2VBbGxDYXBzKSxcbiAgICBjYXB0aW9uOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDEyLCAxLjY2LCAwLjQpLFxuICAgIG92ZXJsaW5lOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDEyLCAyLjY2LCAxLCBjYXNlQWxsQ2FwcyksXG4gICAgLy8gVE9ETyB2NjogUmVtb3ZlIGhhbmRsaW5nIG9mICdpbmhlcml0JyB2YXJpYW50IGZyb20gdGhlIHRoZW1lIGFzIGl0IGlzIGFscmVhZHkgaGFuZGxlZCBpbiBNYXRlcmlhbCBVSSdzIFR5cG9ncmFwaHkgY29tcG9uZW50LiBBbHNvLCByZW1lbWJlciB0byByZW1vdmUgdGhlIGFzc29jaWF0ZWQgdHlwZXMuXG4gICAgaW5oZXJpdDoge1xuICAgICAgZm9udEZhbWlseTogJ2luaGVyaXQnLFxuICAgICAgZm9udFdlaWdodDogJ2luaGVyaXQnLFxuICAgICAgZm9udFNpemU6ICdpbmhlcml0JyxcbiAgICAgIGxpbmVIZWlnaHQ6ICdpbmhlcml0JyxcbiAgICAgIGxldHRlclNwYWNpbmc6ICdpbmhlcml0J1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGRlZXBtZXJnZShfZXh0ZW5kcyh7XG4gICAgaHRtbEZvbnRTaXplLFxuICAgIHB4VG9SZW0sXG4gICAgZm9udEZhbWlseSxcbiAgICBmb250U2l6ZSxcbiAgICBmb250V2VpZ2h0TGlnaHQsXG4gICAgZm9udFdlaWdodFJlZ3VsYXIsXG4gICAgZm9udFdlaWdodE1lZGl1bSxcbiAgICBmb250V2VpZ2h0Qm9sZFxuICB9LCB2YXJpYW50cyksIG90aGVyLCB7XG4gICAgY2xvbmU6IGZhbHNlIC8vIE5vIG5lZWQgdG8gY2xvbmUgZGVlcFxuICB9KTtcbn0iLCJjb25zdCBzaGFkb3dLZXlVbWJyYU9wYWNpdHkgPSAwLjI7XG5jb25zdCBzaGFkb3dLZXlQZW51bWJyYU9wYWNpdHkgPSAwLjE0O1xuY29uc3Qgc2hhZG93QW1iaWVudFNoYWRvd09wYWNpdHkgPSAwLjEyO1xuZnVuY3Rpb24gY3JlYXRlU2hhZG93KC4uLnB4KSB7XG4gIHJldHVybiBbYCR7cHhbMF19cHggJHtweFsxXX1weCAke3B4WzJdfXB4ICR7cHhbM119cHggcmdiYSgwLDAsMCwke3NoYWRvd0tleVVtYnJhT3BhY2l0eX0pYCwgYCR7cHhbNF19cHggJHtweFs1XX1weCAke3B4WzZdfXB4ICR7cHhbN119cHggcmdiYSgwLDAsMCwke3NoYWRvd0tleVBlbnVtYnJhT3BhY2l0eX0pYCwgYCR7cHhbOF19cHggJHtweFs5XX1weCAke3B4WzEwXX1weCAke3B4WzExXX1weCByZ2JhKDAsMCwwLCR7c2hhZG93QW1iaWVudFNoYWRvd09wYWNpdHl9KWBdLmpvaW4oJywnKTtcbn1cblxuLy8gVmFsdWVzIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hdGVyaWFsLWNvbXBvbmVudHMvbWF0ZXJpYWwtY29tcG9uZW50cy13ZWIvYmxvYi9iZTg3NDdmOTQ1NzQ2NjljYjVlN2FkZDFhN2M1NGZhNDFhODljZWM3L3BhY2thZ2VzL21kYy1lbGV2YXRpb24vX3ZhcmlhYmxlcy5zY3NzXG5jb25zdCBzaGFkb3dzID0gWydub25lJywgY3JlYXRlU2hhZG93KDAsIDIsIDEsIC0xLCAwLCAxLCAxLCAwLCAwLCAxLCAzLCAwKSwgY3JlYXRlU2hhZG93KDAsIDMsIDEsIC0yLCAwLCAyLCAyLCAwLCAwLCAxLCA1LCAwKSwgY3JlYXRlU2hhZG93KDAsIDMsIDMsIC0yLCAwLCAzLCA0LCAwLCAwLCAxLCA4LCAwKSwgY3JlYXRlU2hhZG93KDAsIDIsIDQsIC0xLCAwLCA0LCA1LCAwLCAwLCAxLCAxMCwgMCksIGNyZWF0ZVNoYWRvdygwLCAzLCA1LCAtMSwgMCwgNSwgOCwgMCwgMCwgMSwgMTQsIDApLCBjcmVhdGVTaGFkb3coMCwgMywgNSwgLTEsIDAsIDYsIDEwLCAwLCAwLCAxLCAxOCwgMCksIGNyZWF0ZVNoYWRvdygwLCA0LCA1LCAtMiwgMCwgNywgMTAsIDEsIDAsIDIsIDE2LCAxKSwgY3JlYXRlU2hhZG93KDAsIDUsIDUsIC0zLCAwLCA4LCAxMCwgMSwgMCwgMywgMTQsIDIpLCBjcmVhdGVTaGFkb3coMCwgNSwgNiwgLTMsIDAsIDksIDEyLCAxLCAwLCAzLCAxNiwgMiksIGNyZWF0ZVNoYWRvdygwLCA2LCA2LCAtMywgMCwgMTAsIDE0LCAxLCAwLCA0LCAxOCwgMyksIGNyZWF0ZVNoYWRvdygwLCA2LCA3LCAtNCwgMCwgMTEsIDE1LCAxLCAwLCA0LCAyMCwgMyksIGNyZWF0ZVNoYWRvdygwLCA3LCA4LCAtNCwgMCwgMTIsIDE3LCAyLCAwLCA1LCAyMiwgNCksIGNyZWF0ZVNoYWRvdygwLCA3LCA4LCAtNCwgMCwgMTMsIDE5LCAyLCAwLCA1LCAyNCwgNCksIGNyZWF0ZVNoYWRvdygwLCA3LCA5LCAtNCwgMCwgMTQsIDIxLCAyLCAwLCA1LCAyNiwgNCksIGNyZWF0ZVNoYWRvdygwLCA4LCA5LCAtNSwgMCwgMTUsIDIyLCAyLCAwLCA2LCAyOCwgNSksIGNyZWF0ZVNoYWRvdygwLCA4LCAxMCwgLTUsIDAsIDE2LCAyNCwgMiwgMCwgNiwgMzAsIDUpLCBjcmVhdGVTaGFkb3coMCwgOCwgMTEsIC01LCAwLCAxNywgMjYsIDIsIDAsIDYsIDMyLCA1KSwgY3JlYXRlU2hhZG93KDAsIDksIDExLCAtNSwgMCwgMTgsIDI4LCAyLCAwLCA3LCAzNCwgNiksIGNyZWF0ZVNoYWRvdygwLCA5LCAxMiwgLTYsIDAsIDE5LCAyOSwgMiwgMCwgNywgMzYsIDYpLCBjcmVhdGVTaGFkb3coMCwgMTAsIDEzLCAtNiwgMCwgMjAsIDMxLCAzLCAwLCA4LCAzOCwgNyksIGNyZWF0ZVNoYWRvdygwLCAxMCwgMTMsIC02LCAwLCAyMSwgMzMsIDMsIDAsIDgsIDQwLCA3KSwgY3JlYXRlU2hhZG93KDAsIDEwLCAxNCwgLTYsIDAsIDIyLCAzNSwgMywgMCwgOCwgNDIsIDcpLCBjcmVhdGVTaGFkb3coMCwgMTEsIDE0LCAtNywgMCwgMjMsIDM2LCAzLCAwLCA5LCA0NCwgOCksIGNyZWF0ZVNoYWRvdygwLCAxMSwgMTUsIC03LCAwLCAyNCwgMzgsIDMsIDAsIDksIDQ2LCA4KV07XG5leHBvcnQgZGVmYXVsdCBzaGFkb3dzOyIsIi8vIFdlIG5lZWQgdG8gY2VudHJhbGl6ZSB0aGUgekluZGV4IGRlZmluaXRpb25zIGFzIHRoZXkgd29ya1xuLy8gbGlrZSBnbG9iYWwgdmFsdWVzIGluIHRoZSBicm93c2VyLlxuY29uc3QgekluZGV4ID0ge1xuICBtb2JpbGVTdGVwcGVyOiAxMDAwLFxuICBmYWI6IDEwNTAsXG4gIHNwZWVkRGlhbDogMTA1MCxcbiAgYXBwQmFyOiAxMTAwLFxuICBkcmF3ZXI6IDEyMDAsXG4gIG1vZGFsOiAxMzAwLFxuICBzbmFja2JhcjogMTQwMCxcbiAgdG9vbHRpcDogMTUwMFxufTtcbmV4cG9ydCBkZWZhdWx0IHpJbmRleDsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UgZnJvbSBcIkBtdWkvdXRpbHMvZm9ybWF0TXVpRXJyb3JNZXNzYWdlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJicmVha3BvaW50c1wiLCBcIm1peGluc1wiLCBcInNwYWNpbmdcIiwgXCJwYWxldHRlXCIsIFwidHJhbnNpdGlvbnNcIiwgXCJ0eXBvZ3JhcGh5XCIsIFwic2hhcGVcIl07XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBzdHlsZUZ1bmN0aW9uU3gsIHsgdW5zdGFibGVfZGVmYXVsdFN4Q29uZmlnIGFzIGRlZmF1bHRTeENvbmZpZyB9IGZyb20gJ0BtdWkvc3lzdGVtL3N0eWxlRnVuY3Rpb25TeCc7XG5pbXBvcnQgc3lzdGVtQ3JlYXRlVGhlbWUgZnJvbSAnQG11aS9zeXN0ZW0vY3JlYXRlVGhlbWUnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuaW1wb3J0IGNyZWF0ZU1peGlucyBmcm9tICcuL2NyZWF0ZU1peGlucyc7XG5pbXBvcnQgY3JlYXRlUGFsZXR0ZSBmcm9tICcuL2NyZWF0ZVBhbGV0dGUnO1xuaW1wb3J0IGNyZWF0ZVR5cG9ncmFwaHkgZnJvbSAnLi9jcmVhdGVUeXBvZ3JhcGh5JztcbmltcG9ydCBzaGFkb3dzIGZyb20gJy4vc2hhZG93cyc7XG5pbXBvcnQgY3JlYXRlVHJhbnNpdGlvbnMgZnJvbSAnLi9jcmVhdGVUcmFuc2l0aW9ucyc7XG5pbXBvcnQgekluZGV4IGZyb20gJy4vekluZGV4JztcbmZ1bmN0aW9uIGNyZWF0ZVRoZW1lKG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICBjb25zdCB7XG4gICAgICBtaXhpbnM6IG1peGluc0lucHV0ID0ge30sXG4gICAgICBwYWxldHRlOiBwYWxldHRlSW5wdXQgPSB7fSxcbiAgICAgIHRyYW5zaXRpb25zOiB0cmFuc2l0aW9uc0lucHV0ID0ge30sXG4gICAgICB0eXBvZ3JhcGh5OiB0eXBvZ3JhcGh5SW5wdXQgPSB7fVxuICAgIH0gPSBvcHRpb25zLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uob3B0aW9ucywgX2V4Y2x1ZGVkKTtcbiAgaWYgKG9wdGlvbnMudmFycykge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBcXGB2YXJzXFxgIGlzIGEgcHJpdmF0ZSBmaWVsZCB1c2VkIGZvciBDU1MgdmFyaWFibGVzIHN1cHBvcnQuXG5QbGVhc2UgdXNlIGFub3RoZXIgbmFtZS5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxOCkpO1xuICB9XG4gIGNvbnN0IHBhbGV0dGUgPSBjcmVhdGVQYWxldHRlKHBhbGV0dGVJbnB1dCk7XG4gIGNvbnN0IHN5c3RlbVRoZW1lID0gc3lzdGVtQ3JlYXRlVGhlbWUob3B0aW9ucyk7XG4gIGxldCBtdWlUaGVtZSA9IGRlZXBtZXJnZShzeXN0ZW1UaGVtZSwge1xuICAgIG1peGluczogY3JlYXRlTWl4aW5zKHN5c3RlbVRoZW1lLmJyZWFrcG9pbnRzLCBtaXhpbnNJbnB1dCksXG4gICAgcGFsZXR0ZSxcbiAgICAvLyBEb24ndCB1c2UgWy4uLnNoYWRvd3NdIHVudGlsIHlvdSd2ZSB2ZXJpZmllZCBpdHMgdHJhbnNwaWxlZCBjb2RlIGlzIG5vdCBpbnZva2luZyB0aGUgaXRlcmF0b3IgcHJvdG9jb2wuXG4gICAgc2hhZG93czogc2hhZG93cy5zbGljZSgpLFxuICAgIHR5cG9ncmFwaHk6IGNyZWF0ZVR5cG9ncmFwaHkocGFsZXR0ZSwgdHlwb2dyYXBoeUlucHV0KSxcbiAgICB0cmFuc2l0aW9uczogY3JlYXRlVHJhbnNpdGlvbnModHJhbnNpdGlvbnNJbnB1dCksXG4gICAgekluZGV4OiBfZXh0ZW5kcyh7fSwgekluZGV4KVxuICB9KTtcbiAgbXVpVGhlbWUgPSBkZWVwbWVyZ2UobXVpVGhlbWUsIG90aGVyKTtcbiAgbXVpVGhlbWUgPSBhcmdzLnJlZHVjZSgoYWNjLCBhcmd1bWVudCkgPT4gZGVlcG1lcmdlKGFjYywgYXJndW1lbnQpLCBtdWlUaGVtZSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gVE9ETyB2NjogUmVmYWN0b3IgdG8gdXNlIGdsb2JhbFN0YXRlQ2xhc3Nlc01hcHBpbmcgZnJvbSBAbXVpL3V0aWxzIG9uY2UgYHJlYWRPbmx5YCBzdGF0ZSBjbGFzcyBpcyB1c2VkIGluIFJhdGluZyBjb21wb25lbnQuXG4gICAgY29uc3Qgc3RhdGVDbGFzc2VzID0gWydhY3RpdmUnLCAnY2hlY2tlZCcsICdjb21wbGV0ZWQnLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnZXhwYW5kZWQnLCAnZm9jdXNlZCcsICdmb2N1c1Zpc2libGUnLCAncmVxdWlyZWQnLCAnc2VsZWN0ZWQnXTtcbiAgICBjb25zdCB0cmF2ZXJzZSA9IChub2RlLCBjb21wb25lbnQpID0+IHtcbiAgICAgIGxldCBrZXk7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBndWFyZC1mb3ItaW4sIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICBmb3IgKGtleSBpbiBub2RlKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gbm9kZVtrZXldO1xuICAgICAgICBpZiAoc3RhdGVDbGFzc2VzLmluZGV4T2Yoa2V5KSAhPT0gLTEgJiYgT2JqZWN0LmtleXMoY2hpbGQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVDbGFzcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzKCcnLCBrZXkpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYCR7Y29tcG9uZW50fVxcYCBjb21wb25lbnQgaW5jcmVhc2VzIGAgKyBgdGhlIENTUyBzcGVjaWZpY2l0eSBvZiB0aGUgXFxgJHtrZXl9XFxgIGludGVybmFsIHN0YXRlLmAsICdZb3UgY2FuIG5vdCBvdmVycmlkZSBpdCBsaWtlIHRoaXM6ICcsIEpTT04uc3RyaW5naWZ5KG5vZGUsIG51bGwsIDIpLCAnJywgYEluc3RlYWQsIHlvdSBuZWVkIHRvIHVzZSB0aGUgJyYuJHtzdGF0ZUNsYXNzfScgc3ludGF4OmAsIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgcm9vdDoge1xuICAgICAgICAgICAgICAgIFtgJi4ke3N0YXRlQ2xhc3N9YF06IGNoaWxkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIG51bGwsIDIpLCAnJywgJ2h0dHBzOi8vbXVpLmNvbS9yL3N0YXRlLWNsYXNzZXMtZ3VpZGUnXS5qb2luKCdcXG4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFJlbW92ZSB0aGUgc3R5bGUgdG8gcHJldmVudCBnbG9iYWwgY29uZmxpY3RzLlxuICAgICAgICAgIG5vZGVba2V5XSA9IHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBPYmplY3Qua2V5cyhtdWlUaGVtZS5jb21wb25lbnRzKS5mb3JFYWNoKGNvbXBvbmVudCA9PiB7XG4gICAgICBjb25zdCBzdHlsZU92ZXJyaWRlcyA9IG11aVRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50XS5zdHlsZU92ZXJyaWRlcztcbiAgICAgIGlmIChzdHlsZU92ZXJyaWRlcyAmJiBjb21wb25lbnQuaW5kZXhPZignTXVpJykgPT09IDApIHtcbiAgICAgICAgdHJhdmVyc2Uoc3R5bGVPdmVycmlkZXMsIGNvbXBvbmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgbXVpVGhlbWUudW5zdGFibGVfc3hDb25maWcgPSBfZXh0ZW5kcyh7fSwgZGVmYXVsdFN4Q29uZmlnLCBvdGhlciA9PSBudWxsID8gdm9pZCAwIDogb3RoZXIudW5zdGFibGVfc3hDb25maWcpO1xuICBtdWlUaGVtZS51bnN0YWJsZV9zeCA9IGZ1bmN0aW9uIHN4KHByb3BzKSB7XG4gICAgcmV0dXJuIHN0eWxlRnVuY3Rpb25TeCh7XG4gICAgICBzeDogcHJvcHMsXG4gICAgICB0aGVtZTogdGhpc1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4gbXVpVGhlbWU7XG59XG5sZXQgd2FybmVkT25jZSA9IGZhbHNlO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU11aVRoZW1lKC4uLmFyZ3MpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoIXdhcm5lZE9uY2UpIHtcbiAgICAgIHdhcm5lZE9uY2UgPSB0cnVlO1xuICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogdGhlIGNyZWF0ZU11aVRoZW1lIGZ1bmN0aW9uIHdhcyByZW5hbWVkIHRvIGNyZWF0ZVRoZW1lLicsICcnLCBcIllvdSBzaG91bGQgdXNlIGBpbXBvcnQgeyBjcmVhdGVUaGVtZSB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJ2BcIl0uam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlVGhlbWUoLi4uYXJncyk7XG59XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVUaGVtZTsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZU1peGlucyhicmVha3BvaW50cywgbWl4aW5zKSB7XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgdG9vbGJhcjoge1xuICAgICAgbWluSGVpZ2h0OiA1NixcbiAgICAgIFticmVha3BvaW50cy51cCgneHMnKV06IHtcbiAgICAgICAgJ0BtZWRpYSAob3JpZW50YXRpb246IGxhbmRzY2FwZSknOiB7XG4gICAgICAgICAgbWluSGVpZ2h0OiA0OFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW2JyZWFrcG9pbnRzLnVwKCdzbScpXToge1xuICAgICAgICBtaW5IZWlnaHQ6IDY0XG4gICAgICB9XG4gICAgfVxuICB9LCBtaXhpbnMpO1xufSIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJkdXJhdGlvblwiLCBcImVhc2luZ1wiLCBcImRlbGF5XCJdO1xuLy8gRm9sbG93IGh0dHBzOi8vbWF0ZXJpYWwuZ29vZ2xlLmNvbS9tb3Rpb24vZHVyYXRpb24tZWFzaW5nLmh0bWwjZHVyYXRpb24tZWFzaW5nLW5hdHVyYWwtZWFzaW5nLWN1cnZlc1xuLy8gdG8gbGVhcm4gdGhlIGNvbnRleHQgaW4gd2hpY2ggZWFjaCBlYXNpbmcgc2hvdWxkIGJlIHVzZWQuXG5leHBvcnQgY29uc3QgZWFzaW5nID0ge1xuICAvLyBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBlYXNpbmcgY3VydmUuXG4gIGVhc2VJbk91dDogJ2N1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSknLFxuICAvLyBPYmplY3RzIGVudGVyIHRoZSBzY3JlZW4gYXQgZnVsbCB2ZWxvY2l0eSBmcm9tIG9mZi1zY3JlZW4gYW5kXG4gIC8vIHNsb3dseSBkZWNlbGVyYXRlIHRvIGEgcmVzdGluZyBwb2ludC5cbiAgZWFzZU91dDogJ2N1YmljLWJlemllcigwLjAsIDAsIDAuMiwgMSknLFxuICAvLyBPYmplY3RzIGxlYXZlIHRoZSBzY3JlZW4gYXQgZnVsbCB2ZWxvY2l0eS4gVGhleSBkbyBub3QgZGVjZWxlcmF0ZSB3aGVuIG9mZi1zY3JlZW4uXG4gIGVhc2VJbjogJ2N1YmljLWJlemllcigwLjQsIDAsIDEsIDEpJyxcbiAgLy8gVGhlIHNoYXJwIGN1cnZlIGlzIHVzZWQgYnkgb2JqZWN0cyB0aGF0IG1heSByZXR1cm4gdG8gdGhlIHNjcmVlbiBhdCBhbnkgdGltZS5cbiAgc2hhcnA6ICdjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpJ1xufTtcblxuLy8gRm9sbG93IGh0dHBzOi8vbTIubWF0ZXJpYWwuaW8vZ3VpZGVsaW5lcy9tb3Rpb24vZHVyYXRpb24tZWFzaW5nLmh0bWwjZHVyYXRpb24tZWFzaW5nLWNvbW1vbi1kdXJhdGlvbnNcbi8vIHRvIGxlYXJuIHdoZW4gdXNlIHdoYXQgdGltaW5nXG5leHBvcnQgY29uc3QgZHVyYXRpb24gPSB7XG4gIHNob3J0ZXN0OiAxNTAsXG4gIHNob3J0ZXI6IDIwMCxcbiAgc2hvcnQ6IDI1MCxcbiAgLy8gbW9zdCBiYXNpYyByZWNvbW1lbmRlZCB0aW1pbmdcbiAgc3RhbmRhcmQ6IDMwMCxcbiAgLy8gdGhpcyBpcyB0byBiZSB1c2VkIGluIGNvbXBsZXggYW5pbWF0aW9uc1xuICBjb21wbGV4OiAzNzUsXG4gIC8vIHJlY29tbWVuZGVkIHdoZW4gc29tZXRoaW5nIGlzIGVudGVyaW5nIHNjcmVlblxuICBlbnRlcmluZ1NjcmVlbjogMjI1LFxuICAvLyByZWNvbW1lbmRlZCB3aGVuIHNvbWV0aGluZyBpcyBsZWF2aW5nIHNjcmVlblxuICBsZWF2aW5nU2NyZWVuOiAxOTVcbn07XG5mdW5jdGlvbiBmb3JtYXRNcyhtaWxsaXNlY29uZHMpIHtcbiAgcmV0dXJuIGAke01hdGgucm91bmQobWlsbGlzZWNvbmRzKX1tc2A7XG59XG5mdW5jdGlvbiBnZXRBdXRvSGVpZ2h0RHVyYXRpb24oaGVpZ2h0KSB7XG4gIGlmICghaGVpZ2h0KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgY29uc3QgY29uc3RhbnQgPSBoZWlnaHQgLyAzNjtcblxuICAvLyBodHRwczovL3d3dy53b2xmcmFtYWxwaGEuY29tL2lucHV0Lz9pPSg0KyUyQisxNSsqKyh4KyUyRiszNispKyoqKzAuMjUrJTJCKyh4KyUyRiszNikrJTJGKzUpKyorMTBcbiAgcmV0dXJuIE1hdGgucm91bmQoKDQgKyAxNSAqIGNvbnN0YW50ICoqIDAuMjUgKyBjb25zdGFudCAvIDUpICogMTApO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlVHJhbnNpdGlvbnMoaW5wdXRUcmFuc2l0aW9ucykge1xuICBjb25zdCBtZXJnZWRFYXNpbmcgPSBfZXh0ZW5kcyh7fSwgZWFzaW5nLCBpbnB1dFRyYW5zaXRpb25zLmVhc2luZyk7XG4gIGNvbnN0IG1lcmdlZER1cmF0aW9uID0gX2V4dGVuZHMoe30sIGR1cmF0aW9uLCBpbnB1dFRyYW5zaXRpb25zLmR1cmF0aW9uKTtcbiAgY29uc3QgY3JlYXRlID0gKHByb3BzID0gWydhbGwnXSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb25PcHRpb24gPSBtZXJnZWREdXJhdGlvbi5zdGFuZGFyZCxcbiAgICAgICAgZWFzaW5nOiBlYXNpbmdPcHRpb24gPSBtZXJnZWRFYXNpbmcuZWFzZUluT3V0LFxuICAgICAgICBkZWxheSA9IDBcbiAgICAgIH0gPSBvcHRpb25zLFxuICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShvcHRpb25zLCBfZXhjbHVkZWQpO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zdCBpc1N0cmluZyA9IHZhbHVlID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG4gICAgICAvLyBJRTExIHN1cHBvcnQsIHJlcGxhY2Ugd2l0aCBOdW1iZXIuaXNOYU5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHNcbiAgICAgIGNvbnN0IGlzTnVtYmVyID0gdmFsdWUgPT4gIWlzTmFOKHBhcnNlRmxvYXQodmFsdWUpKTtcbiAgICAgIGlmICghaXNTdHJpbmcocHJvcHMpICYmICFBcnJheS5pc0FycmF5KHByb3BzKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IEFyZ3VtZW50IFwicHJvcHNcIiBtdXN0IGJlIGEgc3RyaW5nIG9yIEFycmF5LicpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc051bWJlcihkdXJhdGlvbk9wdGlvbikgJiYgIWlzU3RyaW5nKGR1cmF0aW9uT3B0aW9uKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IEFyZ3VtZW50IFwiZHVyYXRpb25cIiBtdXN0IGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nIGJ1dCBmb3VuZCAke2R1cmF0aW9uT3B0aW9ufS5gKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNTdHJpbmcoZWFzaW5nT3B0aW9uKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IEFyZ3VtZW50IFwiZWFzaW5nXCIgbXVzdCBiZSBhIHN0cmluZy4nKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNOdW1iZXIoZGVsYXkpICYmICFpc1N0cmluZyhkZWxheSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTVVJOiBBcmd1bWVudCBcImRlbGF5XCIgbXVzdCBiZSBhIG51bWJlciBvciBhIHN0cmluZy4nKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogU2Vjb25nIGFyZ3VtZW50IG9mIHRyYW5zaXRpb24uY3JlYXRlIG11c3QgYmUgYW4gb2JqZWN0LicsIFwiQXJndW1lbnRzIHNob3VsZCBiZSBlaXRoZXIgYGNyZWF0ZSgncHJvcDEnLCBvcHRpb25zKWAgb3IgYGNyZWF0ZShbJ3Byb3AxJywgJ3Byb3AyJ10sIG9wdGlvbnMpYFwiXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LmtleXMob3RoZXIpLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFVucmVjb2duaXplZCBhcmd1bWVudChzKSBbJHtPYmplY3Qua2V5cyhvdGhlcikuam9pbignLCcpfV0uYCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoQXJyYXkuaXNBcnJheShwcm9wcykgPyBwcm9wcyA6IFtwcm9wc10pLm1hcChhbmltYXRlZFByb3AgPT4gYCR7YW5pbWF0ZWRQcm9wfSAke3R5cGVvZiBkdXJhdGlvbk9wdGlvbiA9PT0gJ3N0cmluZycgPyBkdXJhdGlvbk9wdGlvbiA6IGZvcm1hdE1zKGR1cmF0aW9uT3B0aW9uKX0gJHtlYXNpbmdPcHRpb259ICR7dHlwZW9mIGRlbGF5ID09PSAnc3RyaW5nJyA/IGRlbGF5IDogZm9ybWF0TXMoZGVsYXkpfWApLmpvaW4oJywnKTtcbiAgfTtcbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBnZXRBdXRvSGVpZ2h0RHVyYXRpb24sXG4gICAgY3JlYXRlXG4gIH0sIGlucHV0VHJhbnNpdGlvbnMsIHtcbiAgICBlYXNpbmc6IG1lcmdlZEVhc2luZyxcbiAgICBkdXJhdGlvbjogbWVyZ2VkRHVyYXRpb25cbiAgfSk7XG59IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgY3JlYXRlVGhlbWUgZnJvbSAnLi9jcmVhdGVUaGVtZSc7XG5jb25zdCBkZWZhdWx0VGhlbWUgPSBjcmVhdGVUaGVtZSgpO1xuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdFRoZW1lOyIsImV4cG9ydCBkZWZhdWx0ICckJG1hdGVyaWFsJzsiLCJpbXBvcnQgc2xvdFNob3VsZEZvcndhcmRQcm9wIGZyb20gJy4vc2xvdFNob3VsZEZvcndhcmRQcm9wJztcbmNvbnN0IHJvb3RTaG91bGRGb3J3YXJkUHJvcCA9IHByb3AgPT4gc2xvdFNob3VsZEZvcndhcmRQcm9wKHByb3ApICYmIHByb3AgIT09ICdjbGFzc2VzJztcbmV4cG9ydCBkZWZhdWx0IHJvb3RTaG91bGRGb3J3YXJkUHJvcDsiLCIvLyBjb3BpZWQgZnJvbSBAbXVpL3N5c3RlbS9jcmVhdGVTdHlsZWRcbmZ1bmN0aW9uIHNsb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB7XG4gIHJldHVybiBwcm9wICE9PSAnb3duZXJTdGF0ZScgJiYgcHJvcCAhPT0gJ3RoZW1lJyAmJiBwcm9wICE9PSAnc3gnICYmIHByb3AgIT09ICdhcyc7XG59XG5leHBvcnQgZGVmYXVsdCBzbG90U2hvdWxkRm9yd2FyZFByb3A7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgY3JlYXRlU3R5bGVkIGZyb20gJ0BtdWkvc3lzdGVtL2NyZWF0ZVN0eWxlZCc7XG5pbXBvcnQgZGVmYXVsdFRoZW1lIGZyb20gJy4vZGVmYXVsdFRoZW1lJztcbmltcG9ydCBUSEVNRV9JRCBmcm9tICcuL2lkZW50aWZpZXInO1xuaW1wb3J0IHJvb3RTaG91bGRGb3J3YXJkUHJvcCBmcm9tICcuL3Jvb3RTaG91bGRGb3J3YXJkUHJvcCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNsb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4vc2xvdFNob3VsZEZvcndhcmRQcm9wJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi9yb290U2hvdWxkRm9yd2FyZFByb3AnO1xuY29uc3Qgc3R5bGVkID0gY3JlYXRlU3R5bGVkKHtcbiAgdGhlbWVJZDogVEhFTUVfSUQsXG4gIGRlZmF1bHRUaGVtZSxcbiAgcm9vdFNob3VsZEZvcndhcmRQcm9wXG59KTtcbmV4cG9ydCBkZWZhdWx0IHN0eWxlZDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRoZW1lIGFzIHVzZVRoZW1lU3lzdGVtIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IGRlZmF1bHRUaGVtZSBmcm9tICcuL2RlZmF1bHRUaGVtZSc7XG5pbXBvcnQgVEhFTUVfSUQgZnJvbSAnLi9pZGVudGlmaWVyJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lU3lzdGVtKGRlZmF1bHRUaGVtZSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgUmVhY3QudXNlRGVidWdWYWx1ZSh0aGVtZSk7XG4gIH1cbiAgcmV0dXJuIHRoZW1lW1RIRU1FX0lEXSB8fCB0aGVtZTtcbn0iLCJleHBvcnQgY29uc3QgcmVmbG93ID0gbm9kZSA9PiBub2RlLnNjcm9sbFRvcDtcbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFuc2l0aW9uUHJvcHMocHJvcHMsIG9wdGlvbnMpIHtcbiAgdmFyIF9zdHlsZSR0cmFuc2l0aW9uRHVyYSwgX3N0eWxlJHRyYW5zaXRpb25UaW1pO1xuICBjb25zdCB7XG4gICAgdGltZW91dCxcbiAgICBlYXNpbmcsXG4gICAgc3R5bGUgPSB7fVxuICB9ID0gcHJvcHM7XG4gIHJldHVybiB7XG4gICAgZHVyYXRpb246IChfc3R5bGUkdHJhbnNpdGlvbkR1cmEgPSBzdHlsZS50cmFuc2l0aW9uRHVyYXRpb24pICE9IG51bGwgPyBfc3R5bGUkdHJhbnNpdGlvbkR1cmEgOiB0eXBlb2YgdGltZW91dCA9PT0gJ251bWJlcicgPyB0aW1lb3V0IDogdGltZW91dFtvcHRpb25zLm1vZGVdIHx8IDAsXG4gICAgZWFzaW5nOiAoX3N0eWxlJHRyYW5zaXRpb25UaW1pID0gc3R5bGUudHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKSAhPSBudWxsID8gX3N0eWxlJHRyYW5zaXRpb25UaW1pIDogdHlwZW9mIGVhc2luZyA9PT0gJ29iamVjdCcgPyBlYXNpbmdbb3B0aW9ucy5tb2RlXSA6IGVhc2luZyxcbiAgICBkZWxheTogc3R5bGUudHJhbnNpdGlvbkRlbGF5XG4gIH07XG59IiwiaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnQG11aS91dGlscy9jYXBpdGFsaXplJztcbmV4cG9ydCBkZWZhdWx0IGNhcGl0YWxpemU7IiwiaW1wb3J0IGdldFNjcm9sbGJhclNpemUgZnJvbSAnQG11aS91dGlscy9nZXRTY3JvbGxiYXJTaXplJztcbmV4cG9ydCBkZWZhdWx0IGdldFNjcm9sbGJhclNpemU7IiwiaW1wb3J0IGlzTXVpRWxlbWVudCBmcm9tICdAbXVpL3V0aWxzL2lzTXVpRWxlbWVudCc7XG5leHBvcnQgZGVmYXVsdCBpc011aUVsZW1lbnQ7IiwiaW1wb3J0IG93bmVyRG9jdW1lbnQgZnJvbSAnQG11aS91dGlscy9vd25lckRvY3VtZW50JztcbmV4cG9ydCBkZWZhdWx0IG93bmVyRG9jdW1lbnQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlQ29udHJvbGxlZCBmcm9tICdAbXVpL3V0aWxzL3VzZUNvbnRyb2xsZWQnO1xuZXhwb3J0IGRlZmF1bHQgdXNlQ29udHJvbGxlZDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB1c2VFbmhhbmNlZEVmZmVjdCBmcm9tICdAbXVpL3V0aWxzL3VzZUVuaGFuY2VkRWZmZWN0JztcbmV4cG9ydCBkZWZhdWx0IHVzZUVuaGFuY2VkRWZmZWN0OyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnQG11aS91dGlscy91c2VFdmVudENhbGxiYWNrJztcbmV4cG9ydCBkZWZhdWx0IHVzZUV2ZW50Q2FsbGJhY2s7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICdAbXVpL3V0aWxzL3VzZUZvcmtSZWYnO1xuZXhwb3J0IGRlZmF1bHQgdXNlRm9ya1JlZjsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB1c2VJc0ZvY3VzVmlzaWJsZSBmcm9tICdAbXVpL3V0aWxzL3VzZUlzRm9jdXNWaXNpYmxlJztcbmV4cG9ydCBkZWZhdWx0IHVzZUlzRm9jdXNWaXNpYmxlOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImVsZW1lbnRUeXBlXCIsIFwib3duZXJTdGF0ZVwiLCBcImV4dGVybmFsRm9yd2FyZGVkUHJvcHNcIiwgXCJnZXRTbG90T3duZXJTdGF0ZVwiLCBcImludGVybmFsRm9yd2FyZGVkUHJvcHNcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJjb21wb25lbnRcIiwgXCJzbG90c1wiLCBcInNsb3RQcm9wc1wiXSxcbiAgX2V4Y2x1ZGVkMyA9IFtcImNvbXBvbmVudFwiXTtcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJ0BtdWkvdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgYXBwZW5kT3duZXJTdGF0ZSBmcm9tICdAbXVpL3V0aWxzL2FwcGVuZE93bmVyU3RhdGUnO1xuaW1wb3J0IHJlc29sdmVDb21wb25lbnRQcm9wcyBmcm9tICdAbXVpL3V0aWxzL3Jlc29sdmVDb21wb25lbnRQcm9wcyc7XG5pbXBvcnQgbWVyZ2VTbG90UHJvcHMgZnJvbSAnQG11aS91dGlscy9tZXJnZVNsb3RQcm9wcyc7XG4vKipcbiAqIEFuIGludGVybmFsIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIE1hdGVyaWFsIFVJIHNsb3QuXG4gKlxuICogVGhpcyBpcyBhbiBhZHZhbmNlZCB2ZXJzaW9uIG9mIEJhc2UgVUkgYHVzZVNsb3RQcm9wc2AgYmVjYXVzZSBNYXRlcmlhbCBVSSBhbGxvd3MgbGVhZiBjb21wb25lbnQgdG8gYmUgY3VzdG9taXplZCB2aWEgYGNvbXBvbmVudGAgcHJvcFxuICogd2hpbGUgQmFzZSBVSSBkb2VzIG5vdCBuZWVkIHRvIHN1cHBvcnQgbGVhZiBjb21wb25lbnQgY3VzdG9taXphdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZTogbmFtZSBvZiB0aGUgc2xvdFxuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIHtbU2xvdCwgc2xvdFByb3BzXX0gVGhlIHNsb3QncyBSZWFjdCBjb21wb25lbnQgYW5kIHRoZSBzbG90J3MgcHJvcHNcbiAqXG4gKiBOb3RlOiB0aGUgcmV0dXJuZWQgc2xvdCdzIHByb3BzXG4gKiAtIHdpbGwgbmV2ZXIgY29udGFpbiBgY29tcG9uZW50YCBwcm9wLlxuICogLSBtaWdodCBjb250YWluIGBhc2AgcHJvcC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlU2xvdChcbi8qKlxuICogVGhlIHNsb3QncyBuYW1lLiBBbGwgTWF0ZXJpYWwgVUkgY29tcG9uZW50cyBzaG91bGQgaGF2ZSBgcm9vdGAgc2xvdC5cbiAqXG4gKiBJZiB0aGUgbmFtZSBpcyBgcm9vdGAsIHRoZSBsb2dpYyBiZWhhdmVzIGRpZmZlcmVudGx5IGZyb20gb3RoZXIgc2xvdHMsXG4gKiBlLmcuIHRoZSBgZXh0ZXJuYWxGb3J3YXJkZWRQcm9wc2AgYXJlIHNwcmVhZCB0byBgcm9vdGAgc2xvdCBidXQgbm90IG90aGVyIHNsb3RzLlxuICovXG5uYW1lLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGVsZW1lbnRUeXBlOiBpbml0aWFsRWxlbWVudFR5cGUsXG4gICAgICBvd25lclN0YXRlLFxuICAgICAgZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcyxcbiAgICAgIGdldFNsb3RPd25lclN0YXRlLFxuICAgICAgaW50ZXJuYWxGb3J3YXJkZWRQcm9wc1xuICAgIH0gPSBwYXJhbWV0ZXJzLFxuICAgIHVzZVNsb3RQcm9wc1BhcmFtcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHBhcmFtZXRlcnMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHtcbiAgICAgIGNvbXBvbmVudDogcm9vdENvbXBvbmVudCxcbiAgICAgIHNsb3RzID0ge1xuICAgICAgICBbbmFtZV06IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIHNsb3RQcm9wcyA9IHtcbiAgICAgICAgW25hbWVdOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9ID0gZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGV4dGVybmFsRm9yd2FyZGVkUHJvcHMsIF9leGNsdWRlZDIpO1xuICBjb25zdCBlbGVtZW50VHlwZSA9IHNsb3RzW25hbWVdIHx8IGluaXRpYWxFbGVtZW50VHlwZTtcblxuICAvLyBgc2xvdFByb3BzW25hbWVdYCBjYW4gYmUgYSBjYWxsYmFjayB0aGF0IHJlY2VpdmVzIHRoZSBjb21wb25lbnQncyBvd25lclN0YXRlLlxuICAvLyBgcmVzb2x2ZWRDb21wb25lbnRzUHJvcHNgIGlzIGFsd2F5cyBhIHBsYWluIG9iamVjdC5cbiAgY29uc3QgcmVzb2x2ZWRDb21wb25lbnRzUHJvcHMgPSByZXNvbHZlQ29tcG9uZW50UHJvcHMoc2xvdFByb3BzW25hbWVdLCBvd25lclN0YXRlKTtcbiAgY29uc3QgX21lcmdlU2xvdFByb3BzID0gbWVyZ2VTbG90UHJvcHMoX2V4dGVuZHMoe1xuICAgICAgY2xhc3NOYW1lXG4gICAgfSwgdXNlU2xvdFByb3BzUGFyYW1zLCB7XG4gICAgICBleHRlcm5hbEZvcndhcmRlZFByb3BzOiBuYW1lID09PSAncm9vdCcgPyBvdGhlciA6IHVuZGVmaW5lZCxcbiAgICAgIGV4dGVybmFsU2xvdFByb3BzOiByZXNvbHZlZENvbXBvbmVudHNQcm9wc1xuICAgIH0pKSxcbiAgICB7XG4gICAgICBwcm9wczoge1xuICAgICAgICBjb21wb25lbnQ6IHNsb3RDb21wb25lbnRcbiAgICAgIH0sXG4gICAgICBpbnRlcm5hbFJlZlxuICAgIH0gPSBfbWVyZ2VTbG90UHJvcHMsXG4gICAgbWVyZ2VkUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfbWVyZ2VTbG90UHJvcHMucHJvcHMsIF9leGNsdWRlZDMpO1xuICBjb25zdCByZWYgPSB1c2VGb3JrUmVmKGludGVybmFsUmVmLCByZXNvbHZlZENvbXBvbmVudHNQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogcmVzb2x2ZWRDb21wb25lbnRzUHJvcHMucmVmLCBwYXJhbWV0ZXJzLnJlZik7XG4gIGNvbnN0IHNsb3RPd25lclN0YXRlID0gZ2V0U2xvdE93bmVyU3RhdGUgPyBnZXRTbG90T3duZXJTdGF0ZShtZXJnZWRQcm9wcykgOiB7fTtcbiAgY29uc3QgZmluYWxPd25lclN0YXRlID0gX2V4dGVuZHMoe30sIG93bmVyU3RhdGUsIHNsb3RPd25lclN0YXRlKTtcbiAgY29uc3QgTGVhZkNvbXBvbmVudCA9IG5hbWUgPT09ICdyb290JyA/IHNsb3RDb21wb25lbnQgfHwgcm9vdENvbXBvbmVudCA6IHNsb3RDb21wb25lbnQ7XG4gIGNvbnN0IHByb3BzID0gYXBwZW5kT3duZXJTdGF0ZShlbGVtZW50VHlwZSwgX2V4dGVuZHMoe30sIG5hbWUgPT09ICdyb290JyAmJiAhcm9vdENvbXBvbmVudCAmJiAhc2xvdHNbbmFtZV0gJiYgaW50ZXJuYWxGb3J3YXJkZWRQcm9wcywgbmFtZSAhPT0gJ3Jvb3QnICYmICFzbG90c1tuYW1lXSAmJiBpbnRlcm5hbEZvcndhcmRlZFByb3BzLCBtZXJnZWRQcm9wcywgTGVhZkNvbXBvbmVudCAmJiB7XG4gICAgYXM6IExlYWZDb21wb25lbnRcbiAgfSwge1xuICAgIHJlZlxuICB9KSwgZmluYWxPd25lclN0YXRlKTtcbiAgT2JqZWN0LmtleXMoc2xvdE93bmVyU3RhdGUpLmZvckVhY2gocHJvcE5hbWUgPT4ge1xuICAgIGRlbGV0ZSBwcm9wc1twcm9wTmFtZV07XG4gIH0pO1xuICByZXR1cm4gW2VsZW1lbnRUeXBlLCBwcm9wc107XG59Il0sIm5hbWVzIjpbImVsZXZhdGlvbiIsImFscGhhVmFsdWUiLCJNYXRoIiwibG9nIiwidG9GaXhlZCIsImdldFBhcGVyVXRpbGl0eUNsYXNzIiwic2xvdCIsImdlbmVyYXRlVXRpbGl0eUNsYXNzIiwiZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyIsIl9leGNsdWRlZCIsIlBhcGVyUm9vdCIsInN0eWxlZCIsIm5hbWUiLCJvdmVycmlkZXNSZXNvbHZlciIsInByb3BzIiwic3R5bGVzIiwib3duZXJTdGF0ZSIsInJvb3QiLCJ2YXJpYW50Iiwic3F1YXJlIiwicm91bmRlZCIsInRoZW1lIiwiX3RoZW1lJHZhcnMkb3ZlcmxheXMiLCJiYWNrZ3JvdW5kQ29sb3IiLCJ2YXJzIiwicGFsZXR0ZSIsImJhY2tncm91bmQiLCJwYXBlciIsImNvbG9yIiwidGV4dCIsInByaW1hcnkiLCJ0cmFuc2l0aW9uIiwidHJhbnNpdGlvbnMiLCJjcmVhdGUiLCJib3JkZXJSYWRpdXMiLCJzaGFwZSIsImJvcmRlciIsImRpdmlkZXIiLCJib3hTaGFkb3ciLCJzaGFkb3dzIiwibW9kZSIsImJhY2tncm91bmRJbWFnZSIsIm92ZXJsYXlzIiwiaW5Qcm9wcyIsInJlZiIsImNsYXNzTmFtZSIsImNvbXBvbmVudCIsIm90aGVyIiwiY2xhc3NlcyIsInNsb3RzIiwiY29tcG9zZUNsYXNzZXMiLCJ1c2VVdGlsaXR5Q2xhc3NlcyIsImFzIiwiY2xzeCIsImdldFBvcG92ZXJVdGlsaXR5Q2xhc3MiLCJfZXhjbHVkZWQyIiwiX2V4Y2x1ZGVkMyIsImdldE9mZnNldFRvcCIsInJlY3QiLCJ2ZXJ0aWNhbCIsIm9mZnNldCIsImhlaWdodCIsImdldE9mZnNldExlZnQiLCJob3Jpem9udGFsIiwid2lkdGgiLCJnZXRUcmFuc2Zvcm1PcmlnaW5WYWx1ZSIsInRyYW5zZm9ybU9yaWdpbiIsIm1hcCIsIm4iLCJqb2luIiwicmVzb2x2ZUFuY2hvckVsIiwiYW5jaG9yRWwiLCJQb3BvdmVyUm9vdCIsIk1vZGFsIiwiUG9wb3ZlclBhcGVyIiwiUGFwZXIiLCJwb3NpdGlvbiIsIm92ZXJmbG93WSIsIm92ZXJmbG93WCIsIm1pbldpZHRoIiwibWluSGVpZ2h0IiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJvdXRsaW5lIiwiX3Nsb3RQcm9wcyRwYXBlciIsIl9zbG90cyRyb290IiwiX3Nsb3RzJHBhcGVyIiwiYWN0aW9uIiwiYW5jaG9yT3JpZ2luIiwiYW5jaG9yUG9zaXRpb24iLCJhbmNob3JSZWZlcmVuY2UiLCJjaGlsZHJlbiIsImNvbnRhaW5lciIsImNvbnRhaW5lclByb3AiLCJtYXJnaW5UaHJlc2hvbGQiLCJvcGVuIiwiUGFwZXJQcm9wcyIsIlBhcGVyUHJvcHNQcm9wIiwic2xvdFByb3BzIiwiVHJhbnNpdGlvbkNvbXBvbmVudCIsIkdyb3ciLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJ0cmFuc2l0aW9uRHVyYXRpb25Qcm9wIiwiVHJhbnNpdGlvblByb3BzIiwib25FbnRlcmluZyIsImRpc2FibGVTY3JvbGxMb2NrIiwiZXh0ZXJuYWxQYXBlclNsb3RQcm9wcyIsInBhcGVyUmVmIiwiaGFuZGxlUGFwZXJSZWYiLCJ1c2VGb3JrUmVmIiwiZ2V0QW5jaG9yT2Zmc2V0IiwicmVzb2x2ZWRBbmNob3JFbCIsImFuY2hvclJlY3QiLCJub2RlVHlwZSIsIm93bmVyRG9jdW1lbnQiLCJjdXJyZW50IiwiYm9keSIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInRvcCIsImxlZnQiLCJnZXRUcmFuc2Zvcm1PcmlnaW4iLCJlbGVtUmVjdCIsImdldFBvc2l0aW9uaW5nU3R5bGUiLCJlbGVtZW50Iiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJlbGVtVHJhbnNmb3JtT3JpZ2luIiwiYW5jaG9yT2Zmc2V0IiwiYm90dG9tIiwicmlnaHQiLCJjb250YWluZXJXaW5kb3ciLCJoZWlnaHRUaHJlc2hvbGQiLCJpbm5lckhlaWdodCIsIndpZHRoVGhyZXNob2xkIiwiaW5uZXJXaWR0aCIsImRpZmYiLCJyb3VuZCIsImlzUG9zaXRpb25lZCIsInNldElzUG9zaXRpb25lZCIsInNldFBvc2l0aW9uaW5nU3R5bGVzIiwicG9zaXRpb25pbmciLCJzdHlsZSIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidXBkYXRlUG9zaXRpb24iLCJoYW5kbGVSZXNpemUiLCJjbGVhciIsIm11aVN1cHBvcnRBdXRvIiwidW5kZWZpbmVkIiwiUm9vdFNsb3QiLCJQYXBlclNsb3QiLCJwYXBlclByb3BzIiwidXNlU2xvdFByb3BzIiwiZWxlbWVudFR5cGUiLCJleHRlcm5hbFNsb3RQcm9wcyIsIm9wYWNpdHkiLCJhZGRpdGlvbmFsUHJvcHMiLCJfdXNlU2xvdFByb3BzIiwiZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcyIsImJhY2tkcm9wIiwiaW52aXNpYmxlIiwicm9vdFNsb3RQcm9wc1Byb3AiLCJyb290UHJvcHMiLCJpc0hvc3RDb21wb25lbnQiLCJhcHBlYXIiLCJpbiIsImlzQXBwZWFyaW5nIiwib25FeGl0ZWQiLCJ0aW1lb3V0IiwiZm9yd2FyZGVkUmVmIiwiZGlzYWJsZVBvcnRhbCIsIm1vdW50Tm9kZSIsInNldE1vdW50Tm9kZSIsImhhbmRsZVJlZiIsImdldENvbnRhaW5lciIsImRvY3VtZW50IiwibmV3UHJvcHMiLCJjcmVhdGVTdHlsZWRDb21wb25lbnQiLCJ1c2VUaGVtZVByb3BzIiwiX3NwYW4iLCJOb3RjaGVkT3V0bGluZVJvb3QiLCJzaG91bGRGb3J3YXJkUHJvcCIsInJvb3RTaG91bGRGb3J3YXJkUHJvcCIsInRleHRBbGlnbiIsIm1hcmdpbiIsInBhZGRpbmciLCJwb2ludGVyRXZlbnRzIiwiYm9yZGVyU3R5bGUiLCJib3JkZXJXaWR0aCIsIm92ZXJmbG93IiwiTm90Y2hlZE91dGxpbmVMZWdlbmQiLCJmbG9hdCIsIndpdGhMYWJlbCIsImxpbmVIZWlnaHQiLCJkdXJhdGlvbiIsImVhc2luZyIsImVhc2VPdXQiLCJkaXNwbGF5IiwiZm9udFNpemUiLCJ2aXNpYmlsaXR5Iiwid2hpdGVTcGFjZSIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0Iiwibm90Y2hlZCIsImRlbGF5IiwiZ2V0T3V0bGluZWRJbnB1dFV0aWxpdHlDbGFzcyIsImlucHV0QmFzZUNsYXNzZXMiLCJPdXRsaW5lZElucHV0Um9vdCIsIklucHV0QmFzZSIsInByb3AiLCJib3JkZXJDb2xvciIsIm5vdGNoZWRPdXRsaW5lIiwiY29tbW9uIiwib25CYWNrZ3JvdW5kQ2hhbm5lbCIsImZvY3VzZWQiLCJtYWluIiwiZXJyb3IiLCJkaXNhYmxlZCIsInN0YXJ0QWRvcm5tZW50IiwiZW5kQWRvcm5tZW50IiwibXVsdGlsaW5lIiwic2l6ZSIsImxhYmVsIiwiT3V0bGluZWRJbnB1dElucHV0IiwiV2Via2l0Qm94U2hhZG93IiwiV2Via2l0VGV4dEZpbGxDb2xvciIsImNhcmV0Q29sb3IiLCJnZXRDb2xvclNjaGVtZVNlbGVjdG9yIiwiT3V0bGluZWRJbnB1dCIsIl9yZWYiLCJfcmVmMiIsIl9zbG90cyRpbnB1dCIsIl9SZWFjdCRGcmFnbWVudCIsImNvbXBvbmVudHMiLCJmdWxsV2lkdGgiLCJpbnB1dENvbXBvbmVudCIsInR5cGUiLCJjb21wb3NlZENsYXNzZXMiLCJpbnB1dCIsIm11aUZvcm1Db250cm9sIiwidXNlRm9ybUNvbnRyb2wiLCJmY3MiLCJmb3JtQ29udHJvbFN0YXRlIiwic3RhdGVzIiwiZm9ybUNvbnRyb2wiLCJoaWRkZW5MYWJlbCIsIlJvb3QiLCJJbnB1dFNsb3QiLCJJbnB1dCIsInJlbmRlclN1ZmZpeCIsInN0YXRlIiwicmVxdWlyZWQiLCJCb29sZWFuIiwiZmlsbGVkIiwibXVpTmFtZSIsImdldE5hdGl2ZVNlbGVjdFV0aWxpdHlDbGFzc2VzIiwibmF0aXZlU2VsZWN0U2VsZWN0U3R5bGVzIiwiTW96QXBwZWFyYW5jZSIsIldlYmtpdEFwcGVhcmFuY2UiLCJ1c2VyU2VsZWN0IiwiY3Vyc29yIiwiTmF0aXZlU2VsZWN0U2VsZWN0Iiwic2VsZWN0IiwibXVsdGlwbGUiLCJuYXRpdmVTZWxlY3RJY29uU3R5bGVzIiwiYWN0aXZlIiwidHJhbnNmb3JtIiwiTmF0aXZlU2VsZWN0SWNvbiIsImljb24iLCJjYXBpdGFsaXplIiwiaWNvbk9wZW4iLCJJY29uQ29tcG9uZW50IiwiaW5wdXRSZWYiLCJnZXRTZWxlY3RVdGlsaXR5Q2xhc3NlcyIsIlNlbGVjdFNlbGVjdCIsInRleHRPdmVyZmxvdyIsIlNlbGVjdEljb24iLCJTZWxlY3ROYXRpdmVJbnB1dCIsInNsb3RTaG91bGRGb3J3YXJkUHJvcCIsIm5hdGl2ZUlucHV0IiwiYm94U2l6aW5nIiwiYXJlRXF1YWxWYWx1ZXMiLCJhIiwiYiIsIlN0cmluZyIsImlzRW1wdHkiLCJ0cmltIiwiX01lbnVQcm9wcyRzbG90UHJvcHMiLCJhcmlhRGVzY3JpYmVkYnkiLCJhcmlhTGFiZWwiLCJhdXRvRm9jdXMiLCJhdXRvV2lkdGgiLCJkZWZhdWx0T3BlbiIsImRlZmF1bHRWYWx1ZSIsImRpc3BsYXlFbXB0eSIsImlucHV0UmVmUHJvcCIsImxhYmVsSWQiLCJNZW51UHJvcHMiLCJvbkJsdXIiLCJvbkNoYW5nZSIsIm9uQ2xvc2UiLCJvbkZvY3VzIiwib25PcGVuIiwib3BlblByb3AiLCJyZWFkT25seSIsInJlbmRlclZhbHVlIiwiU2VsZWN0RGlzcGxheVByb3BzIiwidGFiSW5kZXgiLCJ0YWJJbmRleFByb3AiLCJ2YWx1ZSIsInZhbHVlUHJvcCIsInNldFZhbHVlU3RhdGUiLCJ1c2VDb250cm9sbGVkIiwiY29udHJvbGxlZCIsImRlZmF1bHQiLCJvcGVuU3RhdGUiLCJzZXRPcGVuU3RhdGUiLCJkaXNwbGF5UmVmIiwiZGlzcGxheU5vZGUiLCJzZXREaXNwbGF5Tm9kZSIsImlzT3BlbkNvbnRyb2xsZWQiLCJtZW51TWluV2lkdGhTdGF0ZSIsInNldE1lbnVNaW5XaWR0aFN0YXRlIiwiaGFuZGxlRGlzcGxheVJlZiIsIm5vZGUiLCJhbmNob3JFbGVtZW50IiwicGFyZW50Tm9kZSIsImZvY3VzIiwiY2xpZW50V2lkdGgiLCJnZXRFbGVtZW50QnlJZCIsImhhbmRsZXIiLCJnZXRTZWxlY3Rpb24iLCJpc0NvbGxhcHNlZCIsInVwZGF0ZSIsImV2ZW50IiwiY2hpbGRyZW5BcnJheSIsInRvQXJyYXkiLCJoYW5kbGVJdGVtQ2xpY2siLCJjaGlsZCIsIm5ld1ZhbHVlIiwiY3VycmVudFRhcmdldCIsImhhc0F0dHJpYnV0ZSIsIkFycmF5IiwiaXNBcnJheSIsInNsaWNlIiwiaXRlbUluZGV4IiwiaW5kZXhPZiIsInB1c2giLCJzcGxpY2UiLCJvbkNsaWNrIiwibmF0aXZlRXZlbnQiLCJjbG9uZWRFdmVudCIsImNvbnN0cnVjdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ3cml0YWJsZSIsImRpc3BsYXlTaW5nbGUiLCJkaXNwbGF5TXVsdGlwbGUiLCJjb21wdXRlRGlzcGxheSIsImZvdW5kTWF0Y2giLCJpdGVtcyIsInNlbGVjdGVkIiwiRXJyb3IiLCJzb21lIiwidiIsIm9uS2V5VXAiLCJrZXkiLCJwcmV2ZW50RGVmYXVsdCIsInJvbGUiLCJsZW5ndGgiLCJyZWR1Y2UiLCJvdXRwdXQiLCJpbmRleCIsIm1lbnVNaW5XaWR0aCIsImJ1dHRvbklkIiwiaWQiLCJsaXN0Ym94SWQiLCJ1c2VJZCIsImZpbHRlciIsIm9uS2V5RG93biIsIm9uTW91c2VEb3duIiwiYnV0dG9uIiwiZmluZCIsImNoaWxkSXRlbSIsInRhcmdldCIsIk1lbnUiLCJNZW51TGlzdFByb3BzIiwiZGlzYWJsZUxpc3RXcmFwIiwiZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyIsIlN2Z0ljb25Sb290IiwiX3RoZW1lJHRyYW5zaXRpb25zIiwiX3RoZW1lJHRyYW5zaXRpb25zJGNyIiwiX3RoZW1lJHRyYW5zaXRpb25zMiIsIl90aGVtZSR0eXBvZ3JhcGh5IiwiX3RoZW1lJHR5cG9ncmFwaHkkcHhUIiwiX3RoZW1lJHR5cG9ncmFwaHkyIiwiX3RoZW1lJHR5cG9ncmFwaHkyJHB4IiwiX3RoZW1lJHR5cG9ncmFwaHkzIiwiX3RoZW1lJHR5cG9ncmFwaHkzJHB4IiwiX3BhbGV0dGUkb3duZXJTdGF0ZSRjIiwiX3BhbGV0dGUiLCJfcGFsZXR0ZTIiLCJfcGFsZXR0ZTMiLCJmaWxsIiwiaGFzU3ZnQXNDaGlsZCIsImZsZXhTaHJpbmsiLCJjYWxsIiwic2hvcnRlciIsImluaGVyaXQiLCJzbWFsbCIsInR5cG9ncmFwaHkiLCJweFRvUmVtIiwibWVkaXVtIiwibGFyZ2UiLCJTdmdJY29uIiwiaHRtbENvbG9yIiwiaW5oZXJpdFZpZXdCb3giLCJ0aXRsZUFjY2VzcyIsInZpZXdCb3giLCJpbnN0YW5jZUZvbnRTaXplIiwibW9yZSIsImZvY3VzYWJsZSIsInBhdGgiLCJDb21wb25lbnQiLCJkIiwic3R5bGVkUm9vdENvbmZpZyIsIlN0eWxlZElucHV0IiwiU3R5bGVkT3V0bGluZWRJbnB1dCIsIlN0eWxlZEZpbGxlZElucHV0IiwiRmlsbGVkSW5wdXQiLCJTZWxlY3QiLCJjbGFzc2VzUHJvcCIsIkFycm93RHJvcERvd24iLCJpbnB1dFByb3BzIiwibmF0aXZlIiwidmFyaWFudFByb3AiLCJyZXN0T2ZDbGFzc2VzIiwiSW5wdXRDb21wb25lbnQiLCJzdGFuZGFyZCIsIm91dGxpbmVkIiwiaW5wdXRDb21wb25lbnRSZWYiLCJkZWVwbWVyZ2UiLCJnZXRUZXh0RmllbGRVdGlsaXR5Q2xhc3MiLCJ2YXJpYW50Q29tcG9uZW50IiwiVGV4dEZpZWxkUm9vdCIsIkZvcm1Db250cm9sIiwiYXV0b0NvbXBsZXRlIiwiRm9ybUhlbHBlclRleHRQcm9wcyIsImhlbHBlclRleHQiLCJpZE92ZXJyaWRlIiwiSW5wdXRMYWJlbFByb3BzIiwiSW5wdXRQcm9wcyIsIm1heFJvd3MiLCJtaW5Sb3dzIiwicGxhY2Vob2xkZXIiLCJyb3dzIiwiU2VsZWN0UHJvcHMiLCJJbnB1dE1vcmUiLCJzaHJpbmsiLCJoZWxwZXJUZXh0SWQiLCJpbnB1dExhYmVsSWQiLCJJbnB1dEVsZW1lbnQiLCJJbnB1dExhYmVsIiwiaHRtbEZvciIsIkZvcm1IZWxwZXJUZXh0IiwiZ2V0U3R5bGVWYWx1ZSIsInBhcnNlSW50IiwiaXNDb250cm9sbGVkIiwiaGVpZ2h0UmVmIiwic2hhZG93UmVmIiwiY2FsY3VsYXRlVGV4dGFyZWFTdHlsZXMiLCJjb21wdXRlZFN0eWxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsIm91dGVySGVpZ2h0U3R5bGUiLCJvdmVyZmxvd2luZyIsImlucHV0U2hhbGxvdyIsInBhZGRpbmdCb3R0b20iLCJwYWRkaW5nVG9wIiwiYm9yZGVyQm90dG9tV2lkdGgiLCJib3JkZXJUb3BXaWR0aCIsInNjcm9sbEhlaWdodCIsInNpbmdsZVJvd0hlaWdodCIsIm91dGVySGVpZ2h0IiwibWF4IiwiTnVtYmVyIiwibWluIiwiYWJzIiwic3luY0hlaWdodCIsInRleHRhcmVhU3R5bGVzIiwib2JqIiwia2V5cyIsImRlYm91bmNlSGFuZGxlUmVzaXplIiwicmVzaXplT2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsIm9ic2VydmUiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsInJBRiIsImRpc2Nvbm5lY3QiLCJnZXRUb29sYmFyVXRpbGl0eUNsYXNzIiwiVG9vbGJhclJvb3QiLCJkaXNhYmxlR3V0dGVycyIsImd1dHRlcnMiLCJhbGlnbkl0ZW1zIiwic3BhY2luZyIsImJyZWFrcG9pbnRzIiwidXAiLCJtaXhpbnMiLCJ0b29sYmFyIiwiZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcyIsIlR5cG9ncmFwaHlSb290IiwiYWxpZ24iLCJub1dyYXAiLCJndXR0ZXJCb3R0b20iLCJwYXJhZ3JhcGgiLCJmb250IiwibWFyZ2luQm90dG9tIiwiZGVmYXVsdFZhcmlhbnRNYXBwaW5nIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2Iiwic3VidGl0bGUxIiwic3VidGl0bGUyIiwiYm9keTEiLCJib2R5MiIsImNvbG9yVHJhbnNmb3JtYXRpb25zIiwidGV4dFByaW1hcnkiLCJzZWNvbmRhcnkiLCJ0ZXh0U2Vjb25kYXJ5IiwidGhlbWVQcm9wcyIsInRyYW5zZm9ybURlcHJlY2F0ZWRDb2xvcnMiLCJleHRlbmRTeFByb3AiLCJ2YXJpYW50TWFwcGluZyIsImNhbmRpZGF0ZXNTZWxlY3RvciIsImRlZmF1bHRHZXRUYWJiYWJsZSIsInJlZ3VsYXJUYWJOb2RlcyIsIm9yZGVyZWRUYWJOb2RlcyIsImZyb20iLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsImkiLCJub2RlVGFiSW5kZXgiLCJ0YWJpbmRleEF0dHIiLCJnZXRBdHRyaWJ1dGUiLCJpc05hTiIsImNvbnRlbnRFZGl0YWJsZSIsIm5vZGVOYW1lIiwiZ2V0VGFiSW5kZXgiLCJ0YWdOYW1lIiwiZ2V0UmFkaW8iLCJzZWxlY3RvciIsInF1ZXJ5U2VsZWN0b3IiLCJyb3ZpbmciLCJpc05vblRhYmJhYmxlUmFkaW8iLCJpc05vZGVNYXRjaGluZ1NlbGVjdG9yRm9jdXNhYmxlIiwiZG9jdW1lbnRPcmRlciIsInNvcnQiLCJjb25jYXQiLCJkZWZhdWx0SXNFbmFibGVkIiwiZGlzYWJsZUF1dG9Gb2N1cyIsImRpc2FibGVFbmZvcmNlRm9jdXMiLCJkaXNhYmxlUmVzdG9yZUZvY3VzIiwiZ2V0VGFiYmFibGUiLCJpc0VuYWJsZWQiLCJpZ25vcmVOZXh0RW5mb3JjZUZvY3VzIiwic2VudGluZWxTdGFydCIsInNlbnRpbmVsRW5kIiwibm9kZVRvUmVzdG9yZSIsInJlYWN0Rm9jdXNFdmVudFRhcmdldCIsImFjdGl2YXRlZCIsInJvb3RSZWYiLCJsYXN0S2V5ZG93biIsImRvYyIsImNvbnRhaW5zIiwiYWN0aXZlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsImxvb3BGb2N1cyIsInNoaWZ0S2V5IiwiY29udGFpbiIsInJvb3RFbGVtZW50IiwiaGFzRm9jdXMiLCJ0YWJiYWJsZSIsIl9sYXN0S2V5ZG93biRjdXJyZW50IiwiX2xhc3RLZXlkb3duJGN1cnJlbnQyIiwiaXNTaGlmdFRhYiIsImZvY3VzTmV4dCIsImZvY3VzUHJldmlvdXMiLCJpbnRlcnZhbCIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsImhhbmRsZUZvY3VzU2VudGluZWwiLCJyZWxhdGVkVGFyZ2V0IiwiY2hpbGRyZW5Qcm9wc0hhbmRsZXIiLCJUaGVtZVByb3ZpZGVyIiwidGhlbWVJbnB1dCIsInNjb3BlZFRoZW1lIiwidGhlbWVJZCIsImJsYWNrIiwid2hpdGUiLCJBMTAwIiwiQTIwMCIsIkE0MDAiLCJBNzAwIiwibGlnaHQiLCJob3ZlciIsImhvdmVyT3BhY2l0eSIsInNlbGVjdGVkT3BhY2l0eSIsImRpc2FibGVkQmFja2dyb3VuZCIsImRpc2FibGVkT3BhY2l0eSIsImZvY3VzT3BhY2l0eSIsImFjdGl2YXRlZE9wYWNpdHkiLCJkYXJrIiwiYWRkTGlnaHRPckRhcmsiLCJpbnRlbnQiLCJkaXJlY3Rpb24iLCJzaGFkZSIsInRvbmFsT2Zmc2V0IiwidG9uYWxPZmZzZXRMaWdodCIsInRvbmFsT2Zmc2V0RGFyayIsImhhc093blByb3BlcnR5IiwiY2FzZUFsbENhcHMiLCJ0ZXh0VHJhbnNmb3JtIiwiZGVmYXVsdEZvbnRGYW1pbHkiLCJjcmVhdGVUeXBvZ3JhcGh5IiwiZm9udEZhbWlseSIsImZvbnRXZWlnaHRMaWdodCIsImZvbnRXZWlnaHRSZWd1bGFyIiwiZm9udFdlaWdodE1lZGl1bSIsImZvbnRXZWlnaHRCb2xkIiwiaHRtbEZvbnRTaXplIiwiYWxsVmFyaWFudHMiLCJweFRvUmVtMiIsImNvZWYiLCJidWlsZFZhcmlhbnQiLCJmb250V2VpZ2h0IiwibGV0dGVyU3BhY2luZyIsImNhc2luZyIsInZhcmlhbnRzIiwiY2FwdGlvbiIsIm92ZXJsaW5lIiwiY2xvbmUiLCJjcmVhdGVTaGFkb3ciLCJweCIsIm1vYmlsZVN0ZXBwZXIiLCJmYWIiLCJzcGVlZERpYWwiLCJhcHBCYXIiLCJkcmF3ZXIiLCJtb2RhbCIsInNuYWNrYmFyIiwidG9vbHRpcCIsIm9wdGlvbnMiLCJhcmdzIiwibWl4aW5zSW5wdXQiLCJwYWxldHRlSW5wdXQiLCJ0cmFuc2l0aW9uc0lucHV0IiwidHlwb2dyYXBoeUlucHV0IiwiY29udHJhc3RUaHJlc2hvbGQiLCJnZXREZWZhdWx0UHJpbWFyeSIsImdldERlZmF1bHRTZWNvbmRhcnkiLCJnZXREZWZhdWx0RXJyb3IiLCJpbmZvIiwiZ2V0RGVmYXVsdEluZm8iLCJzdWNjZXNzIiwiZ2V0RGVmYXVsdFN1Y2Nlc3MiLCJ3YXJuaW5nIiwiZ2V0RGVmYXVsdFdhcm5pbmciLCJnZXRDb250cmFzdFRleHQiLCJhdWdtZW50Q29sb3IiLCJtYWluU2hhZGUiLCJsaWdodFNoYWRlIiwiZGFya1NoYWRlIiwiSlNPTiIsInN0cmluZ2lmeSIsImNvbnRyYXN0VGV4dCIsIm1vZGVzIiwiZ3JleSIsImNyZWF0ZVBhbGV0dGUiLCJzeXN0ZW1UaGVtZSIsIm11aVRoZW1lIiwiY3JlYXRlVHJhbnNpdGlvbnMiLCJ6SW5kZXgiLCJhY2MiLCJhcmd1bWVudCIsInVuc3RhYmxlX3N4Q29uZmlnIiwiZGVmYXVsdFN4Q29uZmlnIiwidW5zdGFibGVfc3giLCJzdHlsZUZ1bmN0aW9uU3giLCJzeCIsInRoaXMiLCJlYXNlSW5PdXQiLCJlYXNlSW4iLCJzaGFycCIsInNob3J0ZXN0Iiwic2hvcnQiLCJjb21wbGV4IiwiZW50ZXJpbmdTY3JlZW4iLCJsZWF2aW5nU2NyZWVuIiwiZm9ybWF0TXMiLCJtaWxsaXNlY29uZHMiLCJnZXRBdXRvSGVpZ2h0RHVyYXRpb24iLCJjb25zdGFudCIsImlucHV0VHJhbnNpdGlvbnMiLCJtZXJnZWRFYXNpbmciLCJtZXJnZWREdXJhdGlvbiIsImR1cmF0aW9uT3B0aW9uIiwiZWFzaW5nT3B0aW9uIiwiYW5pbWF0ZWRQcm9wIiwiZGVmYXVsdFRoZW1lIiwidXNlVGhlbWUiLCJyZWZsb3ciLCJzY3JvbGxUb3AiLCJnZXRUcmFuc2l0aW9uUHJvcHMiLCJfc3R5bGUkdHJhbnNpdGlvbkR1cmEiLCJfc3R5bGUkdHJhbnNpdGlvblRpbWkiLCJ0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24iLCJ0cmFuc2l0aW9uRGVsYXkiLCJ1c2VTbG90IiwicGFyYW1ldGVycyIsImluaXRpYWxFbGVtZW50VHlwZSIsImdldFNsb3RPd25lclN0YXRlIiwiaW50ZXJuYWxGb3J3YXJkZWRQcm9wcyIsInVzZVNsb3RQcm9wc1BhcmFtcyIsInJvb3RDb21wb25lbnQiLCJyZXNvbHZlZENvbXBvbmVudHNQcm9wcyIsIl9tZXJnZVNsb3RQcm9wcyIsInNsb3RDb21wb25lbnQiLCJpbnRlcm5hbFJlZiIsIm1lcmdlZFByb3BzIiwic2xvdE93bmVyU3RhdGUiLCJmaW5hbE93bmVyU3RhdGUiLCJMZWFmQ29tcG9uZW50IiwicHJvcE5hbWUiXSwic291cmNlUm9vdCI6IiJ9