/*! For license information please see 373.5e19d5c8.js.LICENSE.txt */ "use strict";(self.webpackChunksrsrfl_react=self.webpackChunksrsrfl_react||[]).push([[373],{4970:(e,t,r)=>{r.d(t,{Z:()=>ae});var n=r(7462),o=r(3366),a=r(7294),i=r(512),l=r(4780),s=r(2996),c=r(948),u=r(1657),d=r(3981),p=r(6723),f=r(3031),m=r(7666),h=r(6446),g=r(3460),v=r(9766),b=r(6535),Z=(r(9864),r(8038)),y=r(8216),x=r(1217),S=r(5961),w=r(5108),P=r(1705);const A=r(9032).Z;var k=r(1588),R=r(4867);function O(e){return(0,R.Z)("MuiSelect",e)}const M=(0,k.Z)("MuiSelect",["root","select","multiple","filled","outlined","standard","disabled","focused","icon","iconOpen","iconFilled","iconOutlined","iconStandard","nativeInput","error"]);var C,I=r(5893);const F=["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"],$=(0,c.ZP)("div",{name:"MuiSelect",slot:"Select",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[{[`&.${M.select}`]:t.select},{[`&.${M.select}`]:t[r.variant]},{[`&.${M.error}`]:t.error},{[`&.${M.multiple}`]:t.multiple}]}})(S.wU,{[`&.${M.select}`]:{height:"auto",minHeight:"1.4375em",textOverflow:"ellipsis",whiteSpace:"nowrap",overflow:"hidden"}}),W=(0,c.ZP)("svg",{name:"MuiSelect",slot:"Icon",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[t.icon,r.variant&&t[`icon${(0,y.Z)(r.variant)}`],r.open&&t.iconOpen]}})(S.SJ),T=(0,c.ZP)("input",{shouldForwardProp:e=>(0,c.Dz)(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 j(e,t){return"object"==typeof t&&null!==t?e===t:String(e)===String(t)}function z(e){return null==e||"string"==typeof e&&!e.trim()}const B=a.forwardRef((function(e,t){var r;const{"aria-describedby":c,"aria-label":u,autoFocus:d,autoWidth:p,children:f,className:m,defaultOpen:h,defaultValue:g,disabled:v,displayEmpty:S,error:k=!1,IconComponent:R,inputRef:M,labelId:B,MenuProps:N={},multiple:E,name:D,onBlur:_,onChange:V,onClose:L,onFocus:H,onOpen:G,open:U,readOnly:q,renderValue:K,SelectDisplayProps:J={},tabIndex:Q,value:X,variant:Y="standard"}=e,ee=(0,o.Z)(e,F),[te,re]=A({controlled:X,default:g,name:"Select"}),[ne,oe]=A({controlled:U,default:h,name:"Select"}),ae=a.useRef(null),ie=a.useRef(null),[le,se]=a.useState(null),{current:ce}=a.useRef(null!=U),[ue,de]=a.useState(),pe=(0,P.Z)(t,M),fe=a.useCallback((e=>{ie.current=e,e&&se(e)}),[]),me=null==le?void 0:le.parentNode;a.useImperativeHandle(pe,(()=>({focus:()=>{ie.current.focus()},node:ae.current,value:te})),[te]),a.useEffect((()=>{h&&ne&&le&&!ce&&(de(p?null:me.clientWidth),ie.current.focus())}),[le,p]),a.useEffect((()=>{d&&ie.current.focus()}),[d]),a.useEffect((()=>{if(!B)return;const e=(0,Z.Z)(ie.current).getElementById(B);if(e){const t=()=>{getSelection().isCollapsed&&ie.current.focus()};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}}),[B]);const he=(e,t)=>{e?G&&G(t):L&&L(t),ce||(de(p?null:me.clientWidth),oe(e))},ge=a.Children.toArray(f),ve=e=>t=>{let r;if(t.currentTarget.hasAttribute("tabindex")){if(E){r=Array.isArray(te)?te.slice():[];const t=te.indexOf(e.props.value);-1===t?r.push(e.props.value):r.splice(t,1)}else r=e.props.value;if(e.props.onClick&&e.props.onClick(t),te!==r&&(re(r),V)){const n=t.nativeEvent||t,o=new n.constructor(n.type,n);Object.defineProperty(o,"target",{writable:!0,value:{value:r,name:D}}),V(o,e)}E||he(!1,t)}},be=null!==le&≠let Ze,ye;delete ee["aria-invalid"];const xe=[];let Se=!1,we=!1;((0,w.vd)({value:te})||S)&&(K?Ze=K(te):Se=!0);const Pe=ge.map((e=>{if(!a.isValidElement(e))return null;let t;if(E){if(!Array.isArray(te))throw new Error((0,b.Z)(2));t=te.some((t=>j(t,e.props.value))),t&&Se&&xe.push(e.props.children)}else t=j(te,e.props.value),t&&Se&&(ye=e.props.children);return t&&(we=!0),a.cloneElement(e,{"aria-selected":t?"true":"false",onClick:ve(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})}));Se&&(Ze=E?0===xe.length?null:xe.reduce(((e,t,r)=>(e.push(t),r{const{classes:t,variant:r,disabled:n,multiple:o,open:a,error:i}=e,s={select:["select",r,n&&"disabled",o&&"multiple",i&&"error"],icon:["icon",`icon${(0,y.Z)(r)}`,a&&"iconOpen",n&&"disabled"],nativeInput:["nativeInput"]};return(0,l.Z)(s,O,t)})(Oe),Ce=(0,n.Z)({},N.PaperProps,null==(r=N.slotProps)?void 0:r.paper),Ie=(0,s.Z)();return(0,I.jsxs)(a.Fragment,{children:[(0,I.jsx)($,(0,n.Z)({ref:fe,tabIndex:Ae,role:"combobox","aria-controls":Ie,"aria-disabled":v?"true":void 0,"aria-expanded":be?"true":"false","aria-haspopup":"listbox","aria-label":u,"aria-labelledby":[B,Re].filter(Boolean).join(" ")||void 0,"aria-describedby":c,onKeyDown:e=>{q||-1!==[" ","ArrowUp","ArrowDown","Enter"].indexOf(e.key)&&(e.preventDefault(),he(!0,e))},onMouseDown:v||q?null:e=>{0===e.button&&(e.preventDefault(),ie.current.focus(),he(!0,e))},onBlur:e=>{!be&&_&&(Object.defineProperty(e,"target",{writable:!0,value:{value:te,name:D}}),_(e))},onFocus:H},J,{ownerState:Oe,className:(0,i.Z)(J.className,Me.select,m),id:Re,children:z(Ze)?C||(C=(0,I.jsx)("span",{className:"notranslate",children:"​"})):Ze})),(0,I.jsx)(T,(0,n.Z)({"aria-invalid":k,value:Array.isArray(te)?te.join(","):te,name:D,ref:ae,"aria-hidden":!0,onChange:e=>{const t=ge.find((t=>t.props.value===e.target.value));void 0!==t&&(re(t.props.value),V&&V(e,t))},tabIndex:-1,disabled:v,className:Me.nativeInput,autoFocus:d,ownerState:Oe},ee)),(0,I.jsx)(W,{as:R,className:Me.icon,ownerState:Oe}),(0,I.jsx)(x.Z,(0,n.Z)({id:`menu-${D||""}`,anchorEl:me,open:be,onClose:e=>{he(!1,e)},anchorOrigin:{vertical:"bottom",horizontal:"center"},transformOrigin:{vertical:"top",horizontal:"center"}},N,{MenuListProps:(0,n.Z)({"aria-labelledby":B,role:"listbox","aria-multiselectable":E?"true":void 0,disableListWrap:!0,id:Ie},N.MenuListProps),slotProps:(0,n.Z)({},N.slotProps,{paper:(0,n.Z)({},Ce,{style:(0,n.Z)({minWidth:ke},null!=Ce?Ce.style:null)})}),children:Pe}))]})}));var N=r(5704),E=r(4423);function D(e){return(0,R.Z)("MuiSvgIcon",e)}(0,k.Z)("MuiSvgIcon",["root","colorPrimary","colorSecondary","colorAction","colorError","colorDisabled","fontSizeInherit","fontSizeSmall","fontSizeMedium","fontSizeLarge"]);const _=["children","className","color","component","fontSize","htmlColor","inheritViewBox","titleAccess","viewBox"],V=(0,c.ZP)("svg",{name:"MuiSvgIcon",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[t.root,"inherit"!==r.color&&t[`color${(0,y.Z)(r.color)}`],t[`fontSize${(0,y.Z)(r.fontSize)}`]]}})((({theme:e,ownerState:t})=>{var r,n,o,a,i,l,s,c,u,d,p,f,m;return{userSelect:"none",width:"1em",height:"1em",display:"inline-block",fill:t.hasSvgAsChild?void 0:"currentColor",flexShrink:0,transition:null==(r=e.transitions)||null==(n=r.create)?void 0:n.call(r,"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==(u=c.pxToRem)?void 0:u.call(c,35))||"2.1875rem"}[t.fontSize],color:null!=(d=null==(p=(e.vars||e).palette)||null==(p=p[t.color])?void 0:p.main)?d:{action:null==(f=(e.vars||e).palette)||null==(f=f.action)?void 0:f.active,disabled:null==(m=(e.vars||e).palette)||null==(m=m.action)?void 0:m.disabled,inherit:void 0}[t.color]}})),L=a.forwardRef((function(e,t){const r=(0,u.Z)({props:e,name:"MuiSvgIcon"}),{children:s,className:c,color:d="inherit",component:p="svg",fontSize:f="medium",htmlColor:m,inheritViewBox:h=!1,titleAccess:g,viewBox:v="0 0 24 24"}=r,b=(0,o.Z)(r,_),Z=a.isValidElement(s)&&"svg"===s.type,x=(0,n.Z)({},r,{color:d,component:p,fontSize:f,instanceFontSize:e.fontSize,inheritViewBox:h,viewBox:v,hasSvgAsChild:Z}),S={};h||(S.viewBox=v);const w=(e=>{const{color:t,fontSize:r,classes:n}=e,o={root:["root","inherit"!==t&&`color${(0,y.Z)(t)}`,`fontSize${(0,y.Z)(r)}`]};return(0,l.Z)(o,D,n)})(x);return(0,I.jsxs)(V,(0,n.Z)({as:p,className:(0,i.Z)(w.root,c),focusable:"false",color:m,"aria-hidden":!g||void 0,role:g?"img":void 0,ref:t},S,b,Z&&s.props,{ownerState:x,children:[Z?s.props.children:s,g?(0,I.jsx)("title",{children:g}):null]}))}));L.muiName="SvgIcon";const H=L,G=function(e,t){function r(t,r){return(0,I.jsx)(H,(0,n.Z)({"data-testid":"ArrowDropDownIcon",ref:r},t,{children:e}))}return r.muiName=H.muiName,a.memo(a.forwardRef(r))}((0,I.jsx)("path",{d:"M7 10l5 5 5-5z"})),U=["autoWidth","children","classes","className","defaultOpen","displayEmpty","IconComponent","id","input","inputProps","label","labelId","MenuProps","multiple","native","onClose","onOpen","open","renderValue","SelectDisplayProps","variant"],q=["root"],K={name:"MuiSelect",overridesResolver:(e,t)=>t.root,shouldForwardProp:e=>(0,c.FO)(e)&&"variant"!==e,slot:"Root"},J=(0,c.ZP)(d.Z,K)(""),Q=(0,c.ZP)(f.Z,K)(""),X=(0,c.ZP)(p.Z,K)(""),Y=a.forwardRef((function(e,t){const r=(0,u.Z)({name:"MuiSelect",props:e}),{autoWidth:l=!1,children:s,classes:c={},className:d,defaultOpen:p=!1,displayEmpty:f=!1,IconComponent:m=G,id:h,input:g,inputProps:b,label:Z,labelId:y,MenuProps:x,multiple:w=!1,native:A=!1,onClose:k,onOpen:R,open:O,renderValue:M,SelectDisplayProps:C,variant:F="outlined"}=r,$=(0,o.Z)(r,U),W=A?S.ZP:B,T=(0,E.Z)(),j=(0,N.Z)({props:r,muiFormControl:T,states:["variant","error"]}),z=j.variant||F,D=(0,n.Z)({},r,{variant:z,classes:c}),_=(e=>{const{classes:t}=e;return t})(D),V=(0,o.Z)(_,q),L=g||{standard:(0,I.jsx)(J,{ownerState:D}),outlined:(0,I.jsx)(Q,{label:Z,ownerState:D}),filled:(0,I.jsx)(X,{ownerState:D})}[z],H=(0,P.Z)(t,L.ref);return(0,I.jsx)(a.Fragment,{children:a.cloneElement(L,(0,n.Z)({inputComponent:W,inputProps:(0,n.Z)({children:s,error:j.error,IconComponent:m,variant:z,type:void 0,multiple:w},A?{id:h}:{autoWidth:l,defaultOpen:p,displayEmpty:f,labelId:y,MenuProps:x,onClose:k,onOpen:R,open:O,renderValue:M,SelectDisplayProps:(0,n.Z)({id:h},C)},b,{classes:b?(0,v.Z)(V,b.classes):V},g?g.props.inputProps:{})},w&&A&&"outlined"===z?{notched:!0}:{},{ref:H,className:(0,i.Z)(L.props.className,d,_.root)},!g&&{variant:z},$))})}));Y.muiName="Select";const ee=Y;function te(e){return(0,R.Z)("MuiTextField",e)}(0,k.Z)("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"],ne={standard:d.Z,filled:p.Z,outlined:f.Z},oe=(0,c.ZP)(h.Z,{name:"MuiTextField",slot:"Root",overridesResolver:(e,t)=>t.root})({}),ae=a.forwardRef((function(e,t){const r=(0,u.Z)({props:e,name:"MuiTextField"}),{autoComplete:a,autoFocus:c=!1,children:d,className:p,color:f="primary",defaultValue:h,disabled:v=!1,error:b=!1,FormHelperTextProps:Z,fullWidth:y=!1,helperText:x,id:S,InputLabelProps:w,inputProps:P,InputProps:A,inputRef:k,label:R,maxRows:O,minRows:M,multiline:C=!1,name:F,onBlur:$,onChange:W,onFocus:T,placeholder:j,required:z=!1,rows:B,select:N=!1,SelectProps:E,type:D,value:_,variant:V="outlined"}=r,L=(0,o.Z)(r,re),H=(0,n.Z)({},r,{autoFocus:c,color:f,disabled:v,error:b,fullWidth:y,multiline:C,required:z,select:N,variant:V}),G=(e=>{const{classes:t}=e;return(0,l.Z)({root:["root"]},te,t)})(H),U={};"outlined"===V&&(w&&void 0!==w.shrink&&(U.notched=w.shrink),U.label=R),N&&(E&&E.native||(U.id=void 0),U["aria-describedby"]=void 0);const q=(0,s.Z)(S),K=x&&q?`${q}-helper-text`:void 0,J=R&&q?`${q}-label`:void 0,Q=ne[V],X=(0,I.jsx)(Q,(0,n.Z)({"aria-describedby":K,autoComplete:a,autoFocus:c,defaultValue:h,fullWidth:y,multiline:C,name:F,rows:B,maxRows:O,minRows:M,type:D,value:_,id:q,inputRef:k,onBlur:$,onChange:W,onFocus:T,placeholder:j,inputProps:P},U,A));return(0,I.jsxs)(oe,(0,n.Z)({className:(0,i.Z)(G.root,p),disabled:v,error:b,fullWidth:y,ref:t,required:z,color:f,variant:V,ownerState:H},L,{children:[null!=R&&""!==R&&(0,I.jsx)(m.Z,(0,n.Z)({htmlFor:q,id:J},w,{children:R})),N?(0,I.jsx)(ee,(0,n.Z)({"aria-describedby":K,id:q,labelId:J,value:_,input:X},E,{children:d})):X,x&&(0,I.jsx)(g.Z,(0,n.Z)({id:K},Z,{children:x}))]}))}))},4386:(e,t,r)=>{r.d(t,{Z:()=>g});var n=r(3366),o=r(7462),a=r(7294),i=r(512),l=r(4780),s=r(1657),c=r(948),u=r(1588),d=r(4867);function p(e){return(0,d.Z)("MuiToolbar",e)}(0,u.Z)("MuiToolbar",["root","gutters","regular","dense"]);var f=r(5893);const m=["className","component","disableGutters","variant"],h=(0,c.ZP)("div",{name:"MuiToolbar",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[t.root,!r.disableGutters&&t.gutters,t[r.variant]]}})((({theme:e,ownerState:t})=>(0,o.Z)({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)),g=a.forwardRef((function(e,t){const r=(0,s.Z)({props:e,name:"MuiToolbar"}),{className:a,component:c="div",disableGutters:u=!1,variant:d="regular"}=r,g=(0,n.Z)(r,m),v=(0,o.Z)({},r,{component:c,disableGutters:u,variant:d}),b=(e=>{const{classes:t,disableGutters:r,variant:n}=e,o={root:["root",!r&&"gutters",n]};return(0,l.Z)(o,p,t)})(v);return(0,f.jsx)(h,(0,o.Z)({as:c,className:(0,i.Z)(b.root,a),ref:t,ownerState:v},g))}))},2658:(e,t,r)=>{r.d(t,{Z:()=>y});var n=r(3366),o=r(7462),a=r(7294),i=r(512),l=r(9707),s=r(4780),c=r(948),u=r(1657),d=r(8216),p=r(1588),f=r(4867);function m(e){return(0,f.Z)("MuiTypography",e)}(0,p.Z)("MuiTypography",["root","h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","inherit","button","caption","overline","alignLeft","alignRight","alignCenter","alignJustify","noWrap","gutterBottom","paragraph"]);var h=r(5893);const g=["align","className","component","gutterBottom","noWrap","paragraph","variant","variantMapping"],v=(0,c.ZP)("span",{name:"MuiTypography",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[t.root,r.variant&&t[r.variant],"inherit"!==r.align&&t[`align${(0,d.Z)(r.align)}`],r.noWrap&&t.noWrap,r.gutterBottom&&t.gutterBottom,r.paragraph&&t.paragraph]}})((({theme:e,ownerState:t})=>(0,o.Z)({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"},Z={primary:"primary.main",textPrimary:"text.primary",secondary:"secondary.main",textSecondary:"text.secondary",error:"error.main"},y=a.forwardRef((function(e,t){const r=(0,u.Z)({props:e,name:"MuiTypography"}),a=(e=>Z[e]||e)(r.color),c=(0,l.Z)((0,o.Z)({},r,{color:a})),{align:p="inherit",className:f,component:y,gutterBottom:x=!1,noWrap:S=!1,paragraph:w=!1,variant:P="body1",variantMapping:A=b}=c,k=(0,n.Z)(c,g),R=(0,o.Z)({},c,{align:p,color:a,className:f,component:y,gutterBottom:x,noWrap:S,paragraph:w,variant:P,variantMapping:A}),O=y||(w?"p":A[P]||b[P])||"span",M=(e=>{const{align:t,gutterBottom:r,noWrap:n,paragraph:o,variant:a,classes:i}=e,l={root:["root",a,"inherit"!==e.align&&`align${(0,d.Z)(t)}`,r&&"gutterBottom",n&&"noWrap",o&&"paragraph"]};return(0,s.Z)(l,m,i)})(R);return(0,h.jsx)(v,(0,o.Z)({as:O,ref:t,ownerState:R,className:(0,i.Z)(M.root,f)},k))}))},2233:(e,t,r)=>{r.d(t,{Z:()=>c});var n=r(7462),o=r(3366),a=(r(7294),r(1817)),i=r(606),l=r(5893);const s=["theme"];function c(e){let{theme:t}=e,r=(0,o.Z)(e,s);const c=t[i.Z];return(0,l.jsx)(a.Z,(0,n.Z)({},r,{themeId:c?i.Z:void 0,theme:c||t}))}},9617:(e,t,r)=>{r.d(t,{Z:()=>z});var n=r(7462),o=r(3366),a=r(6535),i=r(9766),l=r(6268),s=r(8010),c=r(6523),u=r(1796);const d={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"},m={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"},h={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"},g={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"},v={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"},Z=["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:d.white,default:d.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:d.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:d.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 S(e,t,r,n){const o=n.light||n,a=n.dark||1.5*n;e[t]||(e.hasOwnProperty(r)?e[t]=e[r]:"light"===t?e.light=(0,u.$n)(e.main,o):"dark"===t&&(e.dark=(0,u._j)(e.main,a)))}const w=["fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem"],P={textTransform:"uppercase"},A='"Roboto", "Helvetica", "Arial", sans-serif';function k(e,t){const r="function"==typeof t?t(e):t,{fontFamily:a=A,fontSize:l=14,fontWeightLight:s=300,fontWeightRegular:c=400,fontWeightMedium:u=500,fontWeightBold:d=700,htmlFontSize:p=16,allVariants:f,pxToRem:m}=r,h=(0,o.Z)(r,w),g=l/14,v=m||(e=>e/p*g+"rem"),b=(e,t,r,o,i)=>{return(0,n.Z)({fontFamily:a,fontWeight:e,fontSize:v(t),lineHeight:r},a===A?{letterSpacing:(l=o/t,Math.round(1e5*l)/1e5+"em")}:{},i,f);var l},Z={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(u,20,1.6,.15),subtitle1:b(c,16,1.75,.15),subtitle2:b(u,14,1.57,.1),body1:b(c,16,1.5,.15),body2:b(c,14,1.43,.15),button:b(u,14,1.75,.4,P),caption:b(c,12,1.66,.4),overline:b(c,12,2.66,1,P),inherit:{fontFamily:"inherit",fontWeight:"inherit",fontSize:"inherit",lineHeight:"inherit",letterSpacing:"inherit"}};return(0,i.Z)((0,n.Z)({htmlFontSize:p,pxToRem:v,fontFamily:a,fontSize:l,fontWeightLight:s,fontWeightRegular:c,fontWeightMedium:u,fontWeightBold:d},Z),h,{clone:!1})}function R(...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 O=["none",R(0,2,1,-1,0,1,1,0,0,1,3,0),R(0,3,1,-2,0,2,2,0,0,1,5,0),R(0,3,3,-2,0,3,4,0,0,1,8,0),R(0,2,4,-1,0,4,5,0,0,1,10,0),R(0,3,5,-1,0,5,8,0,0,1,14,0),R(0,3,5,-1,0,6,10,0,0,1,18,0),R(0,4,5,-2,0,7,10,1,0,2,16,1),R(0,5,5,-3,0,8,10,1,0,3,14,2),R(0,5,6,-3,0,9,12,1,0,3,16,2),R(0,6,6,-3,0,10,14,1,0,4,18,3),R(0,6,7,-4,0,11,15,1,0,4,20,3),R(0,7,8,-4,0,12,17,2,0,5,22,4),R(0,7,8,-4,0,13,19,2,0,5,24,4),R(0,7,9,-4,0,14,21,2,0,5,26,4),R(0,8,9,-5,0,15,22,2,0,6,28,5),R(0,8,10,-5,0,16,24,2,0,6,30,5),R(0,8,11,-5,0,17,26,2,0,6,32,5),R(0,9,11,-5,0,18,28,2,0,7,34,6),R(0,9,12,-6,0,19,29,2,0,7,36,6),R(0,10,13,-6,0,20,31,3,0,8,38,7),R(0,10,13,-6,0,21,33,3,0,8,40,7),R(0,10,14,-6,0,22,35,3,0,8,42,7),R(0,11,14,-7,0,23,36,3,0,9,44,8),R(0,11,15,-7,0,24,38,3,0,9,46,8)],M=["duration","easing","delay"],C={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)"},I={shortest:150,shorter:200,short:250,standard:300,complex:375,enteringScreen:225,leavingScreen:195};function F(e){return`${Math.round(e)}ms`}function $(e){if(!e)return 0;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}function W(e){const t=(0,n.Z)({},C,e.easing),r=(0,n.Z)({},I,e.duration);return(0,n.Z)({getAutoHeightDuration:$,create:(e=["all"],n={})=>{const{duration:a=r.standard,easing:i=t.easeInOut,delay:l=0}=n;return(0,o.Z)(n,M),(Array.isArray(e)?e:[e]).map((e=>`${e} ${"string"==typeof a?a:F(a)} ${i} ${"string"==typeof l?l:F(l)}`)).join(",")}},e,{easing:t,duration:r})}const T={mobileStepper:1e3,fab:1050,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500},j=["breakpoints","mixins","spacing","palette","transitions","typography","shape"];const z=function(e={},...t){const{mixins:r={},palette:w={},transitions:P={},typography:A={}}=e,R=(0,o.Z)(e,j);if(e.vars)throw new Error((0,a.Z)(18));const M=function(e){const{mode:t="light",contrastThreshold:r=3,tonalOffset:l=.2}=e,s=(0,o.Z)(e,Z),c=e.primary||function(e="light"){return"dark"===e?{main:g[200],light:g[50],dark:g[400]}:{main:g[700],light:g[400],dark:g[800]}}(t),w=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),P=e.error||function(e="light"){return"dark"===e?{main:m[500],light:m[300],dark:m[700]}:{main:m[700],light:m[400],dark:m[800]}}(t),A=e.info||function(e="light"){return"dark"===e?{main:v[400],light:v[300],dark:v[700]}:{main:v[700],light:v[500],dark:v[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),R=e.warning||function(e="light"){return"dark"===e?{main:h[400],light:h[300],dark:h[700]}:{main:"#ed6c02",light:h[500],dark:h[900]}}(t);function O(e){return(0,u.mi)(e,x.text.primary)>=r?x.text.primary:y.text.primary}const M=({color:e,name:t,mainShade:r=500,lightShade:o=300,darkShade:i=700})=>{if(!(e=(0,n.Z)({},e)).main&&e[r]&&(e.main=e[r]),!e.hasOwnProperty("main"))throw new Error((0,a.Z)(11,t?` (${t})`:"",r));if("string"!=typeof e.main)throw new Error((0,a.Z)(12,t?` (${t})`:"",JSON.stringify(e.main)));return S(e,"light",o,l),S(e,"dark",i,l),e.contrastText||(e.contrastText=O(e.main)),e},C={dark:x,light:y};return(0,i.Z)((0,n.Z)({common:(0,n.Z)({},d),mode:t,primary:M({color:c,name:"primary"}),secondary:M({color:w,name:"secondary",mainShade:"A400",lightShade:"A200",darkShade:"A700"}),error:M({color:P,name:"error"}),warning:M({color:R,name:"warning"}),info:M({color:A,name:"info"}),success:M({color:k,name:"success"}),grey:p,contrastThreshold:r,getContrastText:O,augmentColor:M,tonalOffset:l},C[t]),s)}(w),C=(0,l.Z)(e);let I=(0,i.Z)(C,{mixins:(F=C.breakpoints,$=r,(0,n.Z)({toolbar:{minHeight:56,[F.up("xs")]:{"@media (orientation: landscape)":{minHeight:48}},[F.up("sm")]:{minHeight:64}}},$)),palette:M,shadows:O.slice(),typography:k(M,A),transitions:W(P),zIndex:(0,n.Z)({},T)});var F,$;return I=(0,i.Z)(I,R),I=t.reduce(((e,t)=>(0,i.Z)(e,t)),I),I.unstable_sxConfig=(0,n.Z)({},s.Z,null==R?void 0:R.unstable_sxConfig),I.unstable_sx=function(e){return(0,c.Z)({sx:e,theme:this})},I}},247:(e,t,r)=>{r.d(t,{Z:()=>n});const n=(0,r(9617).Z)()},2029:(e,t,r)=>{r.d(t,{Z:()=>n});const n=e=>{let t;return t=e<1?5.11916*e**2:4.5*Math.log(e+1)+2,(t/100).toFixed(2)}},606:(e,t,r)=>{r.d(t,{Z:()=>n});const n="$$material"},948:(e,t,r)=>{r.d(t,{Dz:()=>l,FO:()=>i,ZP:()=>s});var n=r(2807),o=r(247),a=r(606);const i=e=>(0,n.x9)(e)&&"classes"!==e,l=n.x9,s=(0,n.ZP)({themeId:a.Z,defaultTheme:o.Z,rootShouldForwardProp:i})},2734:(e,t,r)=>{r.d(t,{Z:()=>i}),r(7294);var n=r(6682),o=r(247),a=r(606);function i(){const e=(0,n.Z)(o.Z);return e[a.Z]||e}},1657:(e,t,r)=>{r.d(t,{Z:()=>i});var n=r(7333),o=r(247),a=r(606);function i({props:e,name:t}){return(0,n.Z)({props:e,name:t,defaultTheme:o.Z,themeId:a.Z})}},577:(e,t,r)=>{r.d(t,{C:()=>o,n:()=>n});const n=e=>e.scrollTop;function o(e,t){var r,n;const{timeout:o,easing:a,style:i={}}=e;return{duration:null!=(r=i.transitionDuration)?r:"number"==typeof o?o:o[t.mode]||0,easing:null!=(n=i.transitionTimingFunction)?n:"object"==typeof a?a[t.mode]:a,delay:i.transitionDelay}}},8216:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r(4142).Z},7144:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r(9336).Z},256:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r(5806).Z},6798:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r(8719).Z},8038:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r(2690).Z},5340:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r(4161).Z},8974:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r(3546).Z},2068:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r(9948).Z},1705:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r(3703).Z},9674:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r(9962).Z},5971:(e,t,r)=>{r.d(t,{Z:()=>c});var n=r(7462),o=r(7294),a=r(4819),i=r(6760);const l="function"==typeof Symbol&&Symbol.for?Symbol.for("mui.nested"):"__THEME_NESTED__";var s=r(5893);const c=function(e){const{children:t,theme:r}=e,c=(0,i.Z)(),u=o.useMemo((()=>{const e=null===c?r:function(e,t){return"function"==typeof t?t(e):(0,n.Z)({},e,t)}(c,r);return null!=e&&(e[l]=null!==c),e}),[r,c]);return(0,s.jsx)(a.Z.Provider,{value:u,children:t})}},4819:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r(7294).createContext(null)},6760:(e,t,r)=>{r.d(t,{Z:()=>a});var n=r(7294),o=r(4819);function a(){return n.useContext(o.Z)}},1234:(e,t,r)=>{r.d(t,{Z:()=>a}),r(7294);var n=r(917),o=r(5893);function a(e){const{styles:t,defaultTheme:r={}}=e,a="function"==typeof t?e=>{return t(null==(n=e)||0===Object.keys(n).length?r:e);var n}:t;return(0,o.jsx)(n.xB,{styles:a})}},8883:(e,t,r)=>{r.d(t,{Co:()=>a,ZP:()=>o});var n=r(932);function o(e,t){return(0,n.Z)(e,t)}const a=(e,t)=>{Array.isArray(e.__emotion_styles)&&(e.__emotion_styles=t(e.__emotion_styles))}}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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LENBQ25CMlQsT0FBTyxHQUVYLENDdEZBLFNBQVNDLEtBQWdCQyxHQUN2QixNQUFPLENBQUMsR0FBR0EsRUFBRyxRQUFRQSxFQUFHLFFBQVFBLEVBQUcsUUFBUUEsRUFBRyx1QkFBNkMsR0FBR0EsRUFBRyxRQUFRQSxFQUFHLFFBQVFBLEVBQUcsUUFBUUEsRUFBRyx3QkFBZ0QsR0FBR0EsRUFBRyxRQUFRQSxFQUFHLFFBQVFBLEVBQUcsU0FBU0EsRUFBRywwQkFBbUR0TyxLQUFLLElBQ3JSLENBR0EsTUFDQSxFQURnQixDQUFDLE9BQVFxTyxFQUFhLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJQSxFQUFhLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJQSxFQUFhLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJQSxFQUFhLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxJQUFLLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxJQUFLLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxJQUFLLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxJQUFLLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsR0FBSSxJQUFLLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsR0FBSSxJQUFLLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsR0FBSSxJQUFLLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsR0FBSSxJQUFLLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsR0FBSSxJQUFLLEVBQUcsRUFBRyxHQUFJ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RUFDV0EsRUFBV0MsSUFRMUIsT0FBUyxDQUFDLEVBQUdBLEVBQVlELEVBQ2xDLENBbUJzREUsQ0FBcUJELEVBQVlELEdBSW5GLE9BSGMsTUFBVmxWLElBQ0ZBLEVBQU9xVixHQUF5QixPQUFmRixHQUVablYsQ0FBTSxHQUNaLENBQUNrVixFQUFZQyxJQUNoQixPQUFvQixTQUFLRyxFQUFBLEVBQWFDLFNBQVUsQ0FDOUMvWixNQUFPaUgsRUFDUHZJLFNBQVVBLEdBRWQsbUNDN0NBLGdCQUprQyxjQUFvQiwrRENDdkMsU0FBU29hLElBTXRCLE9BTGMsYUFBaUIsSUFNakMsa0VDQWUsU0FBU2tCLEVBQWEvZCxHQUNuQyxNQUFNLE9BQ0pDLEVBQU0sYUFDTjJjLEVBQWUsQ0FBQyxHQUNkNWMsRUFDRWdlLEVBQWlDLG1CQUFYL2QsRUFBd0JzVSxJQUFjdFUsU0FQM0RnZSxPQURRQSxFQVFrRTFKLElBUFQsSUFBNUJwTixPQUFPK1csS0FBS0QsR0FBSzVWLE9BT2tDdVUsRUFBZXJJLEdBUmhILElBQWlCMEosQ0FRMkcsRUFBRWhlLEVBQzVILE9BQW9CLFNBQUssS0FBUSxDQUMvQkEsT0FBUStkLEdBRVosMERDUGUsU0FBU25lLEVBQU9zZSxFQUFLbEYsR0FhbEMsT0Fac0IsT0FBU2tGLEVBQUtsRixFQWF0QyxDQUdPLE1BQU1tRixFQUF5QixDQUFDRCxFQUFLRSxLQUd0QzlYLE1BQU1DLFFBQVEyWCxFQUFJRyxvQkFDcEJILEVBQUlHLGlCQUFtQkQsRUFBVUYsRUFBSUcsa0JBQ3ZDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlQ29udHJvbGxlZC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9TZWxlY3Qvc2VsZWN0Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9TZWxlY3QvU2VsZWN0SW5wdXQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU3ZnSWNvbi9zdmdJY29uQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9TdmdJY29uL1N2Z0ljb24uanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvaW50ZXJuYWwvc3ZnLWljb25zL0Fycm93RHJvcERvd24uanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvY3JlYXRlU3ZnSWNvbi5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9TZWxlY3QvU2VsZWN0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1RleHRGaWVsZC90ZXh0RmllbGRDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1RleHRGaWVsZC9UZXh0RmllbGQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVG9vbGJhci90b29sYmFyQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Ub29sYmFyL1Rvb2xiYXIuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVHlwb2dyYXBoeS90eXBvZ3JhcGh5Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9UeXBvZ3JhcGh5L1R5cG9ncmFwaHkuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL1RoZW1lUHJvdmlkZXIuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2NvbW1vbi5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvZ3JleS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvcHVycGxlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9yZWQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL29yYW5nZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvYmx1ZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvbGlnaHRCbHVlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9ncmVlbi5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlUGFsZXR0ZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlVHlwb2dyYXBoeS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvc2hhZG93cy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlVHJhbnNpdGlvbnMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3pJbmRleC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlVGhlbWUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2NyZWF0ZU1peGlucy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvZGVmYXVsdFRoZW1lLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9nZXRPdmVybGF5QWxwaGEuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2lkZW50aWZpZXIuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3N0eWxlZC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvdXNlVGhlbWUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3VzZVRoZW1lUHJvcHMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdHJhbnNpdGlvbnMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvY2FwaXRhbGl6ZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9kZWJvdW5jZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9nZXRTY3JvbGxiYXJTaXplLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2lzTXVpRWxlbWVudC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9vd25lckRvY3VtZW50LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL293bmVyV2luZG93LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3VzZUVuaGFuY2VkRWZmZWN0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3VzZUV2ZW50Q2FsbGJhY2suanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlRm9ya1JlZi5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VJc0ZvY3VzVmlzaWJsZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9wcml2YXRlLXRoZW1pbmcvVGhlbWVQcm92aWRlci9uZXN0ZWQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvcHJpdmF0ZS10aGVtaW5nL1RoZW1lUHJvdmlkZXIvVGhlbWVQcm92aWRlci5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9wcml2YXRlLXRoZW1pbmcvdXNlVGhlbWUvVGhlbWVDb250ZXh0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3ByaXZhdGUtdGhlbWluZy91c2VUaGVtZS91c2VUaGVtZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9zdHlsZWQtZW5naW5lL0dsb2JhbFN0eWxlcy9HbG9iYWxTdHlsZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3R5bGVkLWVuZ2luZS9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHVuc3RhYmxlX3VzZUNvbnRyb2xsZWQgYXMgdXNlQ29udHJvbGxlZCB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgdXNlQ29udHJvbGxlZDsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdFV0aWxpdHlDbGFzc2VzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlTZWxlY3QnLCBzbG90KTtcbn1cbmNvbnN0IHNlbGVjdENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlTZWxlY3QnLCBbJ3Jvb3QnLCAnc2VsZWN0JywgJ211bHRpcGxlJywgJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCcsICdkaXNhYmxlZCcsICdmb2N1c2VkJywgJ2ljb24nLCAnaWNvbk9wZW4nLCAnaWNvbkZpbGxlZCcsICdpY29uT3V0bGluZWQnLCAnaWNvblN0YW5kYXJkJywgJ25hdGl2ZUlucHV0JywgJ2Vycm9yJ10pO1xuZXhwb3J0IGRlZmF1bHQgc2VsZWN0Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSBmcm9tIFwiQG11aS91dGlscy9mb3JtYXRNdWlFcnJvck1lc3NhZ2VcIjtcbnZhciBfc3BhbjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFyaWEtZGVzY3JpYmVkYnlcIiwgXCJhcmlhLWxhYmVsXCIsIFwiYXV0b0ZvY3VzXCIsIFwiYXV0b1dpZHRoXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJkZWZhdWx0T3BlblwiLCBcImRlZmF1bHRWYWx1ZVwiLCBcImRpc2FibGVkXCIsIFwiZGlzcGxheUVtcHR5XCIsIFwiZXJyb3JcIiwgXCJJY29uQ29tcG9uZW50XCIsIFwiaW5wdXRSZWZcIiwgXCJsYWJlbElkXCIsIFwiTWVudVByb3BzXCIsIFwibXVsdGlwbGVcIiwgXCJuYW1lXCIsIFwib25CbHVyXCIsIFwib25DaGFuZ2VcIiwgXCJvbkNsb3NlXCIsIFwib25Gb2N1c1wiLCBcIm9uT3BlblwiLCBcIm9wZW5cIiwgXCJyZWFkT25seVwiLCBcInJlbmRlclZhbHVlXCIsIFwiU2VsZWN0RGlzcGxheVByb3BzXCIsIFwidGFiSW5kZXhcIiwgXCJ0eXBlXCIsIFwidmFsdWVcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNGcmFnbWVudCB9IGZyb20gJ3JlYWN0LWlzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IHJlZlR5cGUsIHVuc3RhYmxlX3VzZUlkIGFzIHVzZUlkIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgb3duZXJEb2N1bWVudCBmcm9tICcuLi91dGlscy9vd25lckRvY3VtZW50JztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IE1lbnUgZnJvbSAnLi4vTWVudS9NZW51JztcbmltcG9ydCB7IG5hdGl2ZVNlbGVjdFNlbGVjdFN0eWxlcywgbmF0aXZlU2VsZWN0SWNvblN0eWxlcyB9IGZyb20gJy4uL05hdGl2ZVNlbGVjdC9OYXRpdmVTZWxlY3RJbnB1dCc7XG5pbXBvcnQgeyBpc0ZpbGxlZCB9IGZyb20gJy4uL0lucHV0QmFzZS91dGlscyc7XG5pbXBvcnQgc3R5bGVkLCB7IHNsb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgdXNlQ29udHJvbGxlZCBmcm9tICcuLi91dGlscy91c2VDb250cm9sbGVkJztcbmltcG9ydCBzZWxlY3RDbGFzc2VzLCB7IGdldFNlbGVjdFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9zZWxlY3RDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBTZWxlY3RTZWxlY3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aVNlbGVjdCcsXG4gIHNsb3Q6ICdTZWxlY3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbXG4gICAgLy8gV2luIHNwZWNpZmljaXR5IG92ZXIgdGhlIGlucHV0IGJhc2VcbiAgICB7XG4gICAgICBbYCYuJHtzZWxlY3RDbGFzc2VzLnNlbGVjdH1gXTogc3R5bGVzLnNlbGVjdFxuICAgIH0sIHtcbiAgICAgIFtgJi4ke3NlbGVjdENsYXNzZXMuc2VsZWN0fWBdOiBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XVxuICAgIH0sIHtcbiAgICAgIFtgJi4ke3NlbGVjdENsYXNzZXMuZXJyb3J9YF06IHN0eWxlcy5lcnJvclxuICAgIH0sIHtcbiAgICAgIFtgJi4ke3NlbGVjdENsYXNzZXMubXVsdGlwbGV9YF06IHN0eWxlcy5tdWx0aXBsZVxuICAgIH1dO1xuICB9XG59KShuYXRpdmVTZWxlY3RTZWxlY3RTdHlsZXMsIHtcbiAgLy8gV2luIHNwZWNpZmljaXR5IG92ZXIgdGhlIGlucHV0IGJhc2VcbiAgW2AmLiR7c2VsZWN0Q2xhc3Nlcy5zZWxlY3R9YF06IHtcbiAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAvLyBSZXNldHMgZm9yIG11bHRpcGxlIHNlbGVjdCB3aXRoIGNoaXBzXG4gICAgbWluSGVpZ2h0OiAnMS40Mzc1ZW0nLFxuICAgIC8vIFJlcXVpcmVkIGZvciBzZWxlY3RcXHRleHQtZmllbGQgaGVpZ2h0IGNvbnNpc3RlbmN5XG4gICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICB9XG59KTtcbmNvbnN0IFNlbGVjdEljb24gPSBzdHlsZWQoJ3N2ZycsIHtcbiAgbmFtZTogJ011aVNlbGVjdCcsXG4gIHNsb3Q6ICdJY29uJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5pY29uLCBvd25lclN0YXRlLnZhcmlhbnQgJiYgc3R5bGVzW2BpY29uJHtjYXBpdGFsaXplKG93bmVyU3RhdGUudmFyaWFudCl9YF0sIG93bmVyU3RhdGUub3BlbiAmJiBzdHlsZXMuaWNvbk9wZW5dO1xuICB9XG59KShuYXRpdmVTZWxlY3RJY29uU3R5bGVzKTtcbmNvbnN0IFNlbGVjdE5hdGl2ZUlucHV0ID0gc3R5bGVkKCdpbnB1dCcsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gc2xvdFNob3VsZEZvcndhcmRQcm9wKHByb3ApICYmIHByb3AgIT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aVNlbGVjdCcsXG4gIHNsb3Q6ICdOYXRpdmVJbnB1dCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLm5hdGl2ZUlucHV0XG59KSh7XG4gIGJvdHRvbTogMCxcbiAgbGVmdDogMCxcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIG9wYWNpdHk6IDAsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgd2lkdGg6ICcxMDAlJyxcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCdcbn0pO1xuZnVuY3Rpb24gYXJlRXF1YWxWYWx1ZXMoYSwgYikge1xuICBpZiAodHlwZW9mIGIgPT09ICdvYmplY3QnICYmIGIgIT09IG51bGwpIHtcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgfVxuXG4gIC8vIFRoZSB2YWx1ZSBjb3VsZCBiZSBhIG51bWJlciwgdGhlIERPTSB3aWxsIHN0cmluZ2lmeSBpdCBhbnl3YXkuXG4gIHJldHVybiBTdHJpbmcoYSkgPT09IFN0cmluZyhiKTtcbn1cbmZ1bmN0aW9uIGlzRW1wdHkoZGlzcGxheSkge1xuICByZXR1cm4gZGlzcGxheSA9PSBudWxsIHx8IHR5cGVvZiBkaXNwbGF5ID09PSAnc3RyaW5nJyAmJiAhZGlzcGxheS50cmltKCk7XG59XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICB2YXJpYW50LFxuICAgIGRpc2FibGVkLFxuICAgIG11bHRpcGxlLFxuICAgIG9wZW4sXG4gICAgZXJyb3JcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHNlbGVjdDogWydzZWxlY3QnLCB2YXJpYW50LCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBtdWx0aXBsZSAmJiAnbXVsdGlwbGUnLCBlcnJvciAmJiAnZXJyb3InXSxcbiAgICBpY29uOiBbJ2ljb24nLCBgaWNvbiR7Y2FwaXRhbGl6ZSh2YXJpYW50KX1gLCBvcGVuICYmICdpY29uT3BlbicsIGRpc2FibGVkICYmICdkaXNhYmxlZCddLFxuICAgIG5hdGl2ZUlucHV0OiBbJ25hdGl2ZUlucHV0J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRTZWxlY3RVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG59O1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IFNlbGVjdElucHV0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gU2VsZWN0SW5wdXQocHJvcHMsIHJlZikge1xuICB2YXIgX01lbnVQcm9wcyRzbG90UHJvcHM7XG4gIGNvbnN0IHtcbiAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogYXJpYURlc2NyaWJlZGJ5LFxuICAgICAgJ2FyaWEtbGFiZWwnOiBhcmlhTGFiZWwsXG4gICAgICBhdXRvRm9jdXMsXG4gICAgICBhdXRvV2lkdGgsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRlZmF1bHRPcGVuLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBkaXNwbGF5RW1wdHksXG4gICAgICBlcnJvciA9IGZhbHNlLFxuICAgICAgSWNvbkNvbXBvbmVudCxcbiAgICAgIGlucHV0UmVmOiBpbnB1dFJlZlByb3AsXG4gICAgICBsYWJlbElkLFxuICAgICAgTWVudVByb3BzID0ge30sXG4gICAgICBtdWx0aXBsZSxcbiAgICAgIG5hbWUsXG4gICAgICBvbkJsdXIsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG9uQ2xvc2UsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25PcGVuLFxuICAgICAgb3Blbjogb3BlblByb3AsXG4gICAgICByZWFkT25seSxcbiAgICAgIHJlbmRlclZhbHVlLFxuICAgICAgU2VsZWN0RGlzcGxheVByb3BzID0ge30sXG4gICAgICB0YWJJbmRleDogdGFiSW5kZXhQcm9wXG4gICAgICAvLyBjYXRjaGluZyBgdHlwZWAgZnJvbSBJbnB1dCB3aGljaCBtYWtlcyBubyBzZW5zZSBmb3IgU2VsZWN0SW5wdXRcbiAgICAgICxcblxuICAgICAgdmFsdWU6IHZhbHVlUHJvcCxcbiAgICAgIHZhcmlhbnQgPSAnc3RhbmRhcmQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVTdGF0ZV0gPSB1c2VDb250cm9sbGVkKHtcbiAgICBjb250cm9sbGVkOiB2YWx1ZVByb3AsXG4gICAgZGVmYXVsdDogZGVmYXVsdFZhbHVlLFxuICAgIG5hbWU6ICdTZWxlY3QnXG4gIH0pO1xuICBjb25zdCBbb3BlblN0YXRlLCBzZXRPcGVuU3RhdGVdID0gdXNlQ29udHJvbGxlZCh7XG4gICAgY29udHJvbGxlZDogb3BlblByb3AsXG4gICAgZGVmYXVsdDogZGVmYXVsdE9wZW4sXG4gICAgbmFtZTogJ1NlbGVjdCdcbiAgfSk7XG4gIGNvbnN0IGlucHV0UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBkaXNwbGF5UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBbZGlzcGxheU5vZGUsIHNldERpc3BsYXlOb2RlXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCB7XG4gICAgY3VycmVudDogaXNPcGVuQ29udHJvbGxlZFxuICB9ID0gUmVhY3QudXNlUmVmKG9wZW5Qcm9wICE9IG51bGwpO1xuICBjb25zdCBbbWVudU1pbldpZHRoU3RhdGUsIHNldE1lbnVNaW5XaWR0aFN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlKCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYocmVmLCBpbnB1dFJlZlByb3ApO1xuICBjb25zdCBoYW5kbGVEaXNwbGF5UmVmID0gUmVhY3QudXNlQ2FsbGJhY2sobm9kZSA9PiB7XG4gICAgZGlzcGxheVJlZi5jdXJyZW50ID0gbm9kZTtcbiAgICBpZiAobm9kZSkge1xuICAgICAgc2V0RGlzcGxheU5vZGUobm9kZSk7XG4gICAgfVxuICB9LCBbXSk7XG4gIGNvbnN0IGFuY2hvckVsZW1lbnQgPSBkaXNwbGF5Tm9kZSA9PSBudWxsID8gdm9pZCAwIDogZGlzcGxheU5vZGUucGFyZW50Tm9kZTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShoYW5kbGVSZWYsICgpID0+ICh7XG4gICAgZm9jdXM6ICgpID0+IHtcbiAgICAgIGRpc3BsYXlSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH0sXG4gICAgbm9kZTogaW5wdXRSZWYuY3VycmVudCxcbiAgICB2YWx1ZVxuICB9KSwgW3ZhbHVlXSk7XG5cbiAgLy8gUmVzaXplIG1lbnUgb24gYGRlZmF1bHRPcGVuYCBhdXRvbWF0aWMgdG9nZ2xlLlxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkZWZhdWx0T3BlbiAmJiBvcGVuU3RhdGUgJiYgZGlzcGxheU5vZGUgJiYgIWlzT3BlbkNvbnRyb2xsZWQpIHtcbiAgICAgIHNldE1lbnVNaW5XaWR0aFN0YXRlKGF1dG9XaWR0aCA/IG51bGwgOiBhbmNob3JFbGVtZW50LmNsaWVudFdpZHRoKTtcbiAgICAgIGRpc3BsYXlSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtkaXNwbGF5Tm9kZSwgYXV0b1dpZHRoXSk7XG4gIC8vIGBpc09wZW5Db250cm9sbGVkYCBpcyBpZ25vcmVkIGJlY2F1c2UgdGhlIGNvbXBvbmVudCBzaG91bGQgbmV2ZXIgc3dpdGNoIGJldHdlZW4gY29udHJvbGxlZCBhbmQgdW5jb250cm9sbGVkIG1vZGVzLlxuICAvLyBgZGVmYXVsdE9wZW5gIGFuZCBgb3BlblN0YXRlYCBhcmUgaWdub3JlZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBjYWxsYmFja3MuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGF1dG9Gb2N1cykge1xuICAgICAgZGlzcGxheVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICB9LCBbYXV0b0ZvY3VzXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFsYWJlbElkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBsYWJlbCA9IG93bmVyRG9jdW1lbnQoZGlzcGxheVJlZi5jdXJyZW50KS5nZXRFbGVtZW50QnlJZChsYWJlbElkKTtcbiAgICBpZiAobGFiZWwpIHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgIGlmIChnZXRTZWxlY3Rpb24oKS5pc0NvbGxhcHNlZCkge1xuICAgICAgICAgIGRpc3BsYXlSZWYuY3VycmVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgbGFiZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVyKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGxhYmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlcik7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9LCBbbGFiZWxJZF0pO1xuICBjb25zdCB1cGRhdGUgPSAob3BlbiwgZXZlbnQpID0+IHtcbiAgICBpZiAob3Blbikge1xuICAgICAgaWYgKG9uT3Blbikge1xuICAgICAgICBvbk9wZW4oZXZlbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob25DbG9zZSkge1xuICAgICAgb25DbG9zZShldmVudCk7XG4gICAgfVxuICAgIGlmICghaXNPcGVuQ29udHJvbGxlZCkge1xuICAgICAgc2V0TWVudU1pbldpZHRoU3RhdGUoYXV0b1dpZHRoID8gbnVsbCA6IGFuY2hvckVsZW1lbnQuY2xpZW50V2lkdGgpO1xuICAgICAgc2V0T3BlblN0YXRlKG9wZW4pO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlTW91c2VEb3duID0gZXZlbnQgPT4ge1xuICAgIC8vIElnbm9yZSBldmVyeXRoaW5nIGJ1dCBsZWZ0LWNsaWNrXG4gICAgaWYgKGV2ZW50LmJ1dHRvbiAhPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBIaWphY2sgdGhlIGRlZmF1bHQgZm9jdXMgYmVoYXZpb3IuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBkaXNwbGF5UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB1cGRhdGUodHJ1ZSwgZXZlbnQpO1xuICB9O1xuICBjb25zdCBoYW5kbGVDbG9zZSA9IGV2ZW50ID0+IHtcbiAgICB1cGRhdGUoZmFsc2UsIGV2ZW50KTtcbiAgfTtcbiAgY29uc3QgY2hpbGRyZW5BcnJheSA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pO1xuXG4gIC8vIFN1cHBvcnQgYXV0b2ZpbGwuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IGV2ZW50ID0+IHtcbiAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuQXJyYXkuZmluZChjaGlsZEl0ZW0gPT4gY2hpbGRJdGVtLnByb3BzLnZhbHVlID09PSBldmVudC50YXJnZXQudmFsdWUpO1xuICAgIGlmIChjaGlsZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFZhbHVlU3RhdGUoY2hpbGQucHJvcHMudmFsdWUpO1xuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgb25DaGFuZ2UoZXZlbnQsIGNoaWxkKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUl0ZW1DbGljayA9IGNoaWxkID0+IGV2ZW50ID0+IHtcbiAgICBsZXQgbmV3VmFsdWU7XG5cbiAgICAvLyBXZSB1c2UgdGhlIHRhYmluZGV4IGF0dHJpYnV0ZSB0byBzaWduYWwgdGhlIGF2YWlsYWJsZSBvcHRpb25zLlxuICAgIGlmICghZXZlbnQuY3VycmVudFRhcmdldC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICBuZXdWYWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUuc2xpY2UoKSA6IFtdO1xuICAgICAgY29uc3QgaXRlbUluZGV4ID0gdmFsdWUuaW5kZXhPZihjaGlsZC5wcm9wcy52YWx1ZSk7XG4gICAgICBpZiAoaXRlbUluZGV4ID09PSAtMSkge1xuICAgICAgICBuZXdWYWx1ZS5wdXNoKGNoaWxkLnByb3BzLnZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1ZhbHVlLnNwbGljZShpdGVtSW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdWYWx1ZSA9IGNoaWxkLnByb3BzLnZhbHVlO1xuICAgIH1cbiAgICBpZiAoY2hpbGQucHJvcHMub25DbGljaykge1xuICAgICAgY2hpbGQucHJvcHMub25DbGljayhldmVudCk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgIHNldFZhbHVlU3RhdGUobmV3VmFsdWUpO1xuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIC8vIFJlZGVmaW5lIHRhcmdldCB0byBhbGxvdyBuYW1lIGFuZCB2YWx1ZSB0byBiZSByZWFkLlxuICAgICAgICAvLyBUaGlzIGFsbG93cyBzZWFtbGVzcyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBtb3N0IHBvcHVsYXIgZm9ybSBsaWJyYXJpZXMuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvaXNzdWVzLzEzNDg1I2lzc3VlY29tbWVudC02NzYwNDg0OTJcbiAgICAgICAgLy8gQ2xvbmUgdGhlIGV2ZW50IHRvIG5vdCBvdmVycmlkZSBgdGFyZ2V0YCBvZiB0aGUgb3JpZ2luYWwgZXZlbnQuXG4gICAgICAgIGNvbnN0IG5hdGl2ZUV2ZW50ID0gZXZlbnQubmF0aXZlRXZlbnQgfHwgZXZlbnQ7XG4gICAgICAgIGNvbnN0IGNsb25lZEV2ZW50ID0gbmV3IG5hdGl2ZUV2ZW50LmNvbnN0cnVjdG9yKG5hdGl2ZUV2ZW50LnR5cGUsIG5hdGl2ZUV2ZW50KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNsb25lZEV2ZW50LCAndGFyZ2V0Jywge1xuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB2YWx1ZTogbmV3VmFsdWUsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgb25DaGFuZ2UoY2xvbmVkRXZlbnQsIGNoaWxkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFtdWx0aXBsZSkge1xuICAgICAgdXBkYXRlKGZhbHNlLCBldmVudCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gZXZlbnQgPT4ge1xuICAgIGlmICghcmVhZE9ubHkpIHtcbiAgICAgIGNvbnN0IHZhbGlkS2V5cyA9IFsnICcsICdBcnJvd1VwJywgJ0Fycm93RG93bicsXG4gICAgICAvLyBUaGUgbmF0aXZlIHNlbGVjdCBkb2Vzbid0IHJlc3BvbmQgdG8gZW50ZXIgb24gbWFjT1MsIGJ1dCBpdCdzIHJlY29tbWVuZGVkIGJ5XG4gICAgICAvLyBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL3BhdHRlcm5zL2NvbWJvYm94L2V4YW1wbGVzL2NvbWJvYm94LXNlbGVjdC1vbmx5L1xuICAgICAgJ0VudGVyJ107XG4gICAgICBpZiAodmFsaWRLZXlzLmluZGV4T2YoZXZlbnQua2V5KSAhPT0gLTEpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdXBkYXRlKHRydWUsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IG9wZW4gPSBkaXNwbGF5Tm9kZSAhPT0gbnVsbCAmJiBvcGVuU3RhdGU7XG4gIGNvbnN0IGhhbmRsZUJsdXIgPSBldmVudCA9PiB7XG4gICAgLy8gaWYgb3BlbiBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25cbiAgICBpZiAoIW9wZW4gJiYgb25CbHVyKSB7XG4gICAgICAvLyBQcmVhY3Qgc3VwcG9ydCwgdGFyZ2V0IGlzIHJlYWQgb25seSBwcm9wZXJ0eSBvbiBhIG5hdGl2ZSBldmVudC5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldmVudCwgJ3RhcmdldCcsIHtcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgbmFtZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIG9uQmx1cihldmVudCk7XG4gICAgfVxuICB9O1xuICBkZWxldGUgb3RoZXJbJ2FyaWEtaW52YWxpZCddO1xuICBsZXQgZGlzcGxheTtcbiAgbGV0IGRpc3BsYXlTaW5nbGU7XG4gIGNvbnN0IGRpc3BsYXlNdWx0aXBsZSA9IFtdO1xuICBsZXQgY29tcHV0ZURpc3BsYXkgPSBmYWxzZTtcbiAgbGV0IGZvdW5kTWF0Y2ggPSBmYWxzZTtcblxuICAvLyBObyBuZWVkIHRvIGRpc3BsYXkgYW55IHZhbHVlIGlmIHRoZSBmaWVsZCBpcyBlbXB0eS5cbiAgaWYgKGlzRmlsbGVkKHtcbiAgICB2YWx1ZVxuICB9KSB8fCBkaXNwbGF5RW1wdHkpIHtcbiAgICBpZiAocmVuZGVyVmFsdWUpIHtcbiAgICAgIGRpc3BsYXkgPSByZW5kZXJWYWx1ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXB1dGVEaXNwbGF5ID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgY29uc3QgaXRlbXMgPSBjaGlsZHJlbkFycmF5Lm1hcChjaGlsZCA9PiB7XG4gICAgaWYgKCEgLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoaXNGcmFnbWVudChjaGlsZCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbXCJNVUk6IFRoZSBTZWxlY3QgY29tcG9uZW50IGRvZXNuJ3QgYWNjZXB0IGEgRnJhZ21lbnQgYXMgYSBjaGlsZC5cIiwgJ0NvbnNpZGVyIHByb3ZpZGluZyBhbiBhcnJheSBpbnN0ZWFkLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHNlbGVjdGVkO1xuICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogVGhlIFxcYHZhbHVlXFxgIHByb3AgbXVzdCBiZSBhbiBhcnJheSB3aGVuIHVzaW5nIHRoZSBcXGBTZWxlY3RcXGAgY29tcG9uZW50IHdpdGggXFxgbXVsdGlwbGVcXGAuYCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMikpO1xuICAgICAgfVxuICAgICAgc2VsZWN0ZWQgPSB2YWx1ZS5zb21lKHYgPT4gYXJlRXF1YWxWYWx1ZXModiwgY2hpbGQucHJvcHMudmFsdWUpKTtcbiAgICAgIGlmIChzZWxlY3RlZCAmJiBjb21wdXRlRGlzcGxheSkge1xuICAgICAgICBkaXNwbGF5TXVsdGlwbGUucHVzaChjaGlsZC5wcm9wcy5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGVjdGVkID0gYXJlRXF1YWxWYWx1ZXModmFsdWUsIGNoaWxkLnByb3BzLnZhbHVlKTtcbiAgICAgIGlmIChzZWxlY3RlZCAmJiBjb21wdXRlRGlzcGxheSkge1xuICAgICAgICBkaXNwbGF5U2luZ2xlID0gY2hpbGQucHJvcHMuY2hpbGRyZW47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgZm91bmRNYXRjaCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAnYXJpYS1zZWxlY3RlZCc6IHNlbGVjdGVkID8gJ3RydWUnIDogJ2ZhbHNlJyxcbiAgICAgIG9uQ2xpY2s6IGhhbmRsZUl0ZW1DbGljayhjaGlsZCksXG4gICAgICBvbktleVVwOiBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICcgJykge1xuICAgICAgICAgIC8vIG90aGVyd2lzZSBvdXIgTWVudUl0ZW1zIGRpc3BhdGNoZXMgYSBjbGljayBldmVudFxuICAgICAgICAgIC8vIGl0J3Mgbm90IGJlaGF2aW9yIG9mIHRoZSBuYXRpdmUgPG9wdGlvbj4gYW5kIGNhdXNlc1xuICAgICAgICAgIC8vIHRoZSBzZWxlY3QgdG8gY2xvc2UgaW1tZWRpYXRlbHkgc2luY2Ugd2Ugb3BlbiBvbiBzcGFjZSBrZXlkb3duXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hpbGQucHJvcHMub25LZXlVcCkge1xuICAgICAgICAgIGNoaWxkLnByb3BzLm9uS2V5VXAoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcm9sZTogJ29wdGlvbicsXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAvLyBUaGUgdmFsdWUgaXMgbW9zdCBsaWtlbHkgbm90IGEgdmFsaWQgSFRNTCBhdHRyaWJ1dGUuXG4gICAgICAnZGF0YS12YWx1ZSc6IGNoaWxkLnByb3BzLnZhbHVlIC8vIEluc3RlYWQsIHdlIHByb3ZpZGUgaXQgYXMgYSBkYXRhIGF0dHJpYnV0ZS5cbiAgICB9KTtcbiAgfSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICghZm91bmRNYXRjaCAmJiAhbXVsdGlwbGUgJiYgdmFsdWUgIT09ICcnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGNoaWxkcmVuQXJyYXkubWFwKGNoaWxkID0+IGNoaWxkLnByb3BzLnZhbHVlKTtcbiAgICAgICAgY29uc29sZS53YXJuKFtgTVVJOiBZb3UgaGF2ZSBwcm92aWRlZCBhbiBvdXQtb2YtcmFuZ2UgdmFsdWUgXFxgJHt2YWx1ZX1cXGAgZm9yIHRoZSBzZWxlY3QgJHtuYW1lID8gYChuYW1lPVwiJHtuYW1lfVwiKSBgIDogJyd9Y29tcG9uZW50LmAsIFwiQ29uc2lkZXIgcHJvdmlkaW5nIGEgdmFsdWUgdGhhdCBtYXRjaGVzIG9uZSBvZiB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgb3IgJycuXCIsIGBUaGUgYXZhaWxhYmxlIHZhbHVlcyBhcmUgJHt2YWx1ZXMuZmlsdGVyKHggPT4geCAhPSBudWxsKS5tYXAoeCA9PiBgXFxgJHt4fVxcYGApLmpvaW4oJywgJykgfHwgJ1wiXCInfS5gXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfSwgW2ZvdW5kTWF0Y2gsIGNoaWxkcmVuQXJyYXksIG11bHRpcGxlLCBuYW1lLCB2YWx1ZV0pO1xuICB9XG4gIGlmIChjb21wdXRlRGlzcGxheSkge1xuICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgaWYgKGRpc3BsYXlNdWx0aXBsZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGlzcGxheSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXNwbGF5ID0gZGlzcGxheU11bHRpcGxlLnJlZHVjZSgob3V0cHV0LCBjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICBvdXRwdXQucHVzaChjaGlsZCk7XG4gICAgICAgICAgaWYgKGluZGV4IDwgZGlzcGxheU11bHRpcGxlLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKCcsICcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9LCBbXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpc3BsYXkgPSBkaXNwbGF5U2luZ2xlO1xuICAgIH1cbiAgfVxuXG4gIC8vIEF2b2lkIHBlcmZvcm1pbmcgYSBsYXlvdXQgY29tcHV0YXRpb24gaW4gdGhlIHJlbmRlciBtZXRob2QuXG4gIGxldCBtZW51TWluV2lkdGggPSBtZW51TWluV2lkdGhTdGF0ZTtcbiAgaWYgKCFhdXRvV2lkdGggJiYgaXNPcGVuQ29udHJvbGxlZCAmJiBkaXNwbGF5Tm9kZSkge1xuICAgIG1lbnVNaW5XaWR0aCA9IGFuY2hvckVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIH1cbiAgbGV0IHRhYkluZGV4O1xuICBpZiAodHlwZW9mIHRhYkluZGV4UHJvcCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0YWJJbmRleCA9IHRhYkluZGV4UHJvcDtcbiAgfSBlbHNlIHtcbiAgICB0YWJJbmRleCA9IGRpc2FibGVkID8gbnVsbCA6IDA7XG4gIH1cbiAgY29uc3QgYnV0dG9uSWQgPSBTZWxlY3REaXNwbGF5UHJvcHMuaWQgfHwgKG5hbWUgPyBgbXVpLWNvbXBvbmVudC1zZWxlY3QtJHtuYW1lfWAgOiB1bmRlZmluZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgdmFyaWFudCxcbiAgICB2YWx1ZSxcbiAgICBvcGVuLFxuICAgIGVycm9yXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IHBhcGVyUHJvcHMgPSBfZXh0ZW5kcyh7fSwgTWVudVByb3BzLlBhcGVyUHJvcHMsIChfTWVudVByb3BzJHNsb3RQcm9wcyA9IE1lbnVQcm9wcy5zbG90UHJvcHMpID09IG51bGwgPyB2b2lkIDAgOiBfTWVudVByb3BzJHNsb3RQcm9wcy5wYXBlcik7XG4gIGNvbnN0IGxpc3Rib3hJZCA9IHVzZUlkKCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9fanN4KFNlbGVjdFNlbGVjdCwgX2V4dGVuZHMoe1xuICAgICAgcmVmOiBoYW5kbGVEaXNwbGF5UmVmLFxuICAgICAgdGFiSW5kZXg6IHRhYkluZGV4LFxuICAgICAgcm9sZTogXCJjb21ib2JveFwiLFxuICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IGxpc3Rib3hJZCxcbiAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkaXNhYmxlZCA/ICd0cnVlJyA6IHVuZGVmaW5lZCxcbiAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBvcGVuID8gJ3RydWUnIDogJ2ZhbHNlJyxcbiAgICAgIFwiYXJpYS1oYXNwb3B1cFwiOiBcImxpc3Rib3hcIixcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwsXG4gICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBbbGFiZWxJZCwgYnV0dG9uSWRdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJykgfHwgdW5kZWZpbmVkLFxuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGFyaWFEZXNjcmliZWRieSxcbiAgICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICAgIG9uTW91c2VEb3duOiBkaXNhYmxlZCB8fCByZWFkT25seSA/IG51bGwgOiBoYW5kbGVNb3VzZURvd24sXG4gICAgICBvbkJsdXI6IGhhbmRsZUJsdXIsXG4gICAgICBvbkZvY3VzOiBvbkZvY3VzXG4gICAgfSwgU2VsZWN0RGlzcGxheVByb3BzLCB7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KFNlbGVjdERpc3BsYXlQcm9wcy5jbGFzc05hbWUsIGNsYXNzZXMuc2VsZWN0LCBjbGFzc05hbWUpXG4gICAgICAvLyBUaGUgaWQgaXMgcmVxdWlyZWQgZm9yIHByb3BlciBhMTF5XG4gICAgICAsXG4gICAgICBpZDogYnV0dG9uSWQsXG4gICAgICBjaGlsZHJlbjogaXNFbXB0eShkaXNwbGF5KSA/IC8vIG5vdHJhbnNsYXRlIG5lZWRlZCB3aGlsZSBHb29nbGUgVHJhbnNsYXRlIHdpbGwgbm90IGZpeCB6ZXJvLXdpZHRoIHNwYWNlIGlzc3VlXG4gICAgICBfc3BhbiB8fCAoX3NwYW4gPSAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwibm90cmFuc2xhdGVcIixcbiAgICAgICAgY2hpbGRyZW46IFwiXFx1MjAwQlwiXG4gICAgICB9KSkgOiBkaXNwbGF5XG4gICAgfSkpLCAvKiNfX1BVUkVfXyovX2pzeChTZWxlY3ROYXRpdmVJbnB1dCwgX2V4dGVuZHMoe1xuICAgICAgXCJhcmlhLWludmFsaWRcIjogZXJyb3IsXG4gICAgICB2YWx1ZTogQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5qb2luKCcsJykgOiB2YWx1ZSxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICByZWY6IGlucHV0UmVmLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlLFxuICAgICAgb25DaGFuZ2U6IGhhbmRsZUNoYW5nZSxcbiAgICAgIHRhYkluZGV4OiAtMSxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5uYXRpdmVJbnB1dCxcbiAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0sIG90aGVyKSksIC8qI19fUFVSRV9fKi9fanN4KFNlbGVjdEljb24sIHtcbiAgICAgIGFzOiBJY29uQ29tcG9uZW50LFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmljb24sXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSksIC8qI19fUFVSRV9fKi9fanN4KE1lbnUsIF9leHRlbmRzKHtcbiAgICAgIGlkOiBgbWVudS0ke25hbWUgfHwgJyd9YCxcbiAgICAgIGFuY2hvckVsOiBhbmNob3JFbGVtZW50LFxuICAgICAgb3Blbjogb3BlbixcbiAgICAgIG9uQ2xvc2U6IGhhbmRsZUNsb3NlLFxuICAgICAgYW5jaG9yT3JpZ2luOiB7XG4gICAgICAgIHZlcnRpY2FsOiAnYm90dG9tJyxcbiAgICAgICAgaG9yaXpvbnRhbDogJ2NlbnRlcidcbiAgICAgIH0sXG4gICAgICB0cmFuc2Zvcm1PcmlnaW46IHtcbiAgICAgICAgdmVydGljYWw6ICd0b3AnLFxuICAgICAgICBob3Jpem9udGFsOiAnY2VudGVyJ1xuICAgICAgfVxuICAgIH0sIE1lbnVQcm9wcywge1xuICAgICAgTWVudUxpc3RQcm9wczogX2V4dGVuZHMoe1xuICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogbGFiZWxJZCxcbiAgICAgICAgcm9sZTogJ2xpc3Rib3gnLFxuICAgICAgICAnYXJpYS1tdWx0aXNlbGVjdGFibGUnOiBtdWx0aXBsZSA/ICd0cnVlJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgZGlzYWJsZUxpc3RXcmFwOiB0cnVlLFxuICAgICAgICBpZDogbGlzdGJveElkXG4gICAgICB9LCBNZW51UHJvcHMuTWVudUxpc3RQcm9wcyksXG4gICAgICBzbG90UHJvcHM6IF9leHRlbmRzKHt9LCBNZW51UHJvcHMuc2xvdFByb3BzLCB7XG4gICAgICAgIHBhcGVyOiBfZXh0ZW5kcyh7fSwgcGFwZXJQcm9wcywge1xuICAgICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBtaW5XaWR0aDogbWVudU1pbldpZHRoXG4gICAgICAgICAgfSwgcGFwZXJQcm9wcyAhPSBudWxsID8gcGFwZXJQcm9wcy5zdHlsZSA6IG51bGwpXG4gICAgICAgIH0pXG4gICAgICB9KSxcbiAgICAgIGNoaWxkcmVuOiBpdGVtc1xuICAgIH0pKV1cbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFNlbGVjdElucHV0LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gICdhcmlhLWRlc2NyaWJlZGJ5JzogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gICdhcmlhLWxhYmVsJzogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB3aWR0aCBvZiB0aGUgcG9wb3ZlciB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2V0IGFjY29yZGluZyB0byB0aGUgaXRlbXMgaW5zaWRlIHRoZVxuICAgKiBtZW51LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBhdCBsZWFzdCB0aGUgd2lkdGggb2YgdGhlIHNlbGVjdCBpbnB1dC5cbiAgICovXG4gIGF1dG9XaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uIGVsZW1lbnRzIHRvIHBvcHVsYXRlIHRoZSBzZWxlY3Qgd2l0aC5cbiAgICogQ2FuIGJlIHNvbWUgYDxNZW51SXRlbT5gIGVsZW1lbnRzLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBTZWUgW0NTUyBBUEldKCNjc3MpIGJlbG93IGZvciBtb3JlIGRldGFpbHMuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIENTUyBjbGFzcyBuYW1lIG9mIHRoZSBzZWxlY3QgZWxlbWVudC5cbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyB0b2dnbGVkIG9uIG1vdW50LiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IG9wZW4gc3RhdGUgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqIFlvdSBjYW4gb25seSB1c2UgaXQgd2hlbiB0aGUgYG5hdGl2ZWAgcHJvcCBpcyBgZmFsc2VgIChkZWZhdWx0KS5cbiAgICovXG4gIGRlZmF1bHRPcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgc2VsZWN0IGlzIGRpc2FibGVkLlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgc2VsZWN0ZWQgaXRlbSBpcyBkaXNwbGF5ZWQgZXZlbiBpZiBpdHMgdmFsdWUgaXMgZW1wdHkuXG4gICAqL1xuICBkaXNwbGF5RW1wdHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYHNlbGVjdCBpbnB1dGAgd2lsbCBpbmRpY2F0ZSBhbiBlcnJvci5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBpY29uIHRoYXQgZGlzcGxheXMgdGhlIGFycm93LlxuICAgKi9cbiAgSWNvbkNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBJbXBlcmF0aXZlIGhhbmRsZSBpbXBsZW1lbnRpbmcgYHsgdmFsdWU6IFQsIG5vZGU6IEhUTUxFbGVtZW50LCBmb2N1cygpOiB2b2lkIH1gXG4gICAqIEVxdWl2YWxlbnQgdG8gYHJlZmBcbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogVGhlIElEIG9mIGFuIGVsZW1lbnQgdGhhdCBhY3RzIGFzIGFuIGFkZGl0aW9uYWwgbGFiZWwuIFRoZSBTZWxlY3Qgd2lsbFxuICAgKiBiZSBsYWJlbGxlZCBieSB0aGUgYWRkaXRpb25hbCBsYWJlbCBhbmQgdGhlIHNlbGVjdGVkIHZhbHVlLlxuICAgKi9cbiAgbGFiZWxJZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgTWVudWBdKC9tYXRlcmlhbC11aS9hcGkvbWVudS8pIGVsZW1lbnQuXG4gICAqL1xuICBNZW51UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGB2YWx1ZWAgbXVzdCBiZSBhbiBhcnJheSBhbmQgdGhlIG1lbnUgd2lsbCBzdXBwb3J0IG11bHRpcGxlIHNlbGVjdGlvbnMuXG4gICAqL1xuICBtdWx0aXBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYHNlbGVjdGAgb3IgaGlkZGVuIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiBhIG1lbnUgaXRlbSBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChhbnkpLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2NoaWxkXSBUaGUgcmVhY3QgZWxlbWVudCB0aGF0IHdhcyBzZWxlY3RlZC5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqIFVzZSBpbiBjb250cm9sbGVkIG1vZGUgKHNlZSBvcGVuKS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBvcGVuZWQuXG4gICAqIFVzZSBpbiBjb250cm9sbGVkIG1vZGUgKHNlZSBvcGVuKS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKi9cbiAgb25PcGVuOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBzaG93bi5cbiAgICovXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogUmVuZGVyIHRoZSBzZWxlY3RlZCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IHZhbHVlIFRoZSBgdmFsdWVgIHByb3ZpZGVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIHtSZWFjdE5vZGV9XG4gICAqL1xuICByZW5kZXJWYWx1ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBjbGlja2FibGUgZGl2IGVsZW1lbnQuXG4gICAqL1xuICBTZWxlY3REaXNwbGF5UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB0YWJJbmRleDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIFRoZSBpbnB1dCB2YWx1ZS5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnc3RhbmRhcmQnLCAnb3V0bGluZWQnLCAnZmlsbGVkJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgU2VsZWN0SW5wdXQ7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRTdmdJY29uVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlTdmdJY29uJywgc2xvdCk7XG59XG5jb25zdCBzdmdJY29uQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVN2Z0ljb24nLCBbJ3Jvb3QnLCAnY29sb3JQcmltYXJ5JywgJ2NvbG9yU2Vjb25kYXJ5JywgJ2NvbG9yQWN0aW9uJywgJ2NvbG9yRXJyb3InLCAnY29sb3JEaXNhYmxlZCcsICdmb250U2l6ZUluaGVyaXQnLCAnZm9udFNpemVTbWFsbCcsICdmb250U2l6ZU1lZGl1bScsICdmb250U2l6ZUxhcmdlJ10pO1xuZXhwb3J0IGRlZmF1bHQgc3ZnSWNvbkNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImZvbnRTaXplXCIsIFwiaHRtbENvbG9yXCIsIFwiaW5oZXJpdFZpZXdCb3hcIiwgXCJ0aXRsZUFjY2Vzc1wiLCBcInZpZXdCb3hcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBnZXRTdmdJY29uVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9zdmdJY29uQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNvbG9yLFxuICAgIGZvbnRTaXplLFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGNvbG9yICE9PSAnaW5oZXJpdCcgJiYgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBgZm9udFNpemUke2NhcGl0YWxpemUoZm9udFNpemUpfWBdXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgU3ZnSWNvblJvb3QgPSBzdHlsZWQoJ3N2ZycsIHtcbiAgbmFtZTogJ011aVN2Z0ljb24nLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHN0eWxlc1tgY29sb3Ike2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF0sIHN0eWxlc1tgZm9udFNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5mb250U2l6ZSl9YF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICB2YXIgX3RoZW1lJHRyYW5zaXRpb25zLCBfdGhlbWUkdHJhbnNpdGlvbnMkY3IsIF90aGVtZSR0cmFuc2l0aW9uczIsIF90aGVtZSR0eXBvZ3JhcGh5LCBfdGhlbWUkdHlwb2dyYXBoeSRweFQsIF90aGVtZSR0eXBvZ3JhcGh5MiwgX3RoZW1lJHR5cG9ncmFwaHkyJHB4LCBfdGhlbWUkdHlwb2dyYXBoeTMsIF90aGVtZSR0eXBvZ3JhcGh5MyRweCwgX3BhbGV0dGUkb3duZXJTdGF0ZSRjLCBfcGFsZXR0ZSwgX3BhbGV0dGUyLCBfcGFsZXR0ZTM7XG4gIHJldHVybiB7XG4gICAgdXNlclNlbGVjdDogJ25vbmUnLFxuICAgIHdpZHRoOiAnMWVtJyxcbiAgICBoZWlnaHQ6ICcxZW0nLFxuICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgIC8vIHRoZSA8c3ZnPiB3aWxsIGRlZmluZSB0aGUgcHJvcGVydHkgdGhhdCBoYXMgYGN1cnJlbnRDb2xvcmBcbiAgICAvLyBlLmcuIGhlcm9pY29ucyB1c2VzIGZpbGw9XCJub25lXCIgYW5kIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgZmlsbDogb3duZXJTdGF0ZS5oYXNTdmdBc0NoaWxkID8gdW5kZWZpbmVkIDogJ2N1cnJlbnRDb2xvcicsXG4gICAgZmxleFNocmluazogMCxcbiAgICB0cmFuc2l0aW9uOiAoX3RoZW1lJHRyYW5zaXRpb25zID0gdGhlbWUudHJhbnNpdGlvbnMpID09IG51bGwgfHwgKF90aGVtZSR0cmFuc2l0aW9ucyRjciA9IF90aGVtZSR0cmFuc2l0aW9ucy5jcmVhdGUpID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHJhbnNpdGlvbnMkY3IuY2FsbChfdGhlbWUkdHJhbnNpdGlvbnMsICdmaWxsJywge1xuICAgICAgZHVyYXRpb246IChfdGhlbWUkdHJhbnNpdGlvbnMyID0gdGhlbWUudHJhbnNpdGlvbnMpID09IG51bGwgfHwgKF90aGVtZSR0cmFuc2l0aW9uczIgPSBfdGhlbWUkdHJhbnNpdGlvbnMyLmR1cmF0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHRyYW5zaXRpb25zMi5zaG9ydGVyXG4gICAgfSksXG4gICAgZm9udFNpemU6IHtcbiAgICAgIGluaGVyaXQ6ICdpbmhlcml0JyxcbiAgICAgIHNtYWxsOiAoKF90aGVtZSR0eXBvZ3JhcGh5ID0gdGhlbWUudHlwb2dyYXBoeSkgPT0gbnVsbCB8fCAoX3RoZW1lJHR5cG9ncmFwaHkkcHhUID0gX3RoZW1lJHR5cG9ncmFwaHkucHhUb1JlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0eXBvZ3JhcGh5JHB4VC5jYWxsKF90aGVtZSR0eXBvZ3JhcGh5LCAyMCkpIHx8ICcxLjI1cmVtJyxcbiAgICAgIG1lZGl1bTogKChfdGhlbWUkdHlwb2dyYXBoeTIgPSB0aGVtZS50eXBvZ3JhcGh5KSA9PSBudWxsIHx8IChfdGhlbWUkdHlwb2dyYXBoeTIkcHggPSBfdGhlbWUkdHlwb2dyYXBoeTIucHhUb1JlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0eXBvZ3JhcGh5MiRweC5jYWxsKF90aGVtZSR0eXBvZ3JhcGh5MiwgMjQpKSB8fCAnMS41cmVtJyxcbiAgICAgIGxhcmdlOiAoKF90aGVtZSR0eXBvZ3JhcGh5MyA9IHRoZW1lLnR5cG9ncmFwaHkpID09IG51bGwgfHwgKF90aGVtZSR0eXBvZ3JhcGh5MyRweCA9IF90aGVtZSR0eXBvZ3JhcGh5My5weFRvUmVtKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHR5cG9ncmFwaHkzJHB4LmNhbGwoX3RoZW1lJHR5cG9ncmFwaHkzLCAzNSkpIHx8ICcyLjE4NzVyZW0nXG4gICAgfVtvd25lclN0YXRlLmZvbnRTaXplXSxcbiAgICAvLyBUT0RPIHY1IGRlcHJlY2F0ZSwgdjYgcmVtb3ZlIGZvciBzeFxuICAgIGNvbG9yOiAoX3BhbGV0dGUkb3duZXJTdGF0ZSRjID0gKF9wYWxldHRlID0gKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUpID09IG51bGwgfHwgKF9wYWxldHRlID0gX3BhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0pID09IG51bGwgPyB2b2lkIDAgOiBfcGFsZXR0ZS5tYWluKSAhPSBudWxsID8gX3BhbGV0dGUkb3duZXJTdGF0ZSRjIDoge1xuICAgICAgYWN0aW9uOiAoX3BhbGV0dGUyID0gKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUpID09IG51bGwgfHwgKF9wYWxldHRlMiA9IF9wYWxldHRlMi5hY3Rpb24pID09IG51bGwgPyB2b2lkIDAgOiBfcGFsZXR0ZTIuYWN0aXZlLFxuICAgICAgZGlzYWJsZWQ6IChfcGFsZXR0ZTMgPSAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZSkgPT0gbnVsbCB8fCAoX3BhbGV0dGUzID0gX3BhbGV0dGUzLmFjdGlvbikgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYWxldHRlMy5kaXNhYmxlZCxcbiAgICAgIGluaGVyaXQ6IHVuZGVmaW5lZFxuICAgIH1bb3duZXJTdGF0ZS5jb2xvcl1cbiAgfTtcbn0pO1xuY29uc3QgU3ZnSWNvbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFN2Z0ljb24oaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVN2Z0ljb24nXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gJ2luaGVyaXQnLFxuICAgICAgY29tcG9uZW50ID0gJ3N2ZycsXG4gICAgICBmb250U2l6ZSA9ICdtZWRpdW0nLFxuICAgICAgaHRtbENvbG9yLFxuICAgICAgaW5oZXJpdFZpZXdCb3ggPSBmYWxzZSxcbiAgICAgIHRpdGxlQWNjZXNzLFxuICAgICAgdmlld0JveCA9ICcwIDAgMjQgMjQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGhhc1N2Z0FzQ2hpbGQgPSAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmIGNoaWxkcmVuLnR5cGUgPT09ICdzdmcnO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3IsXG4gICAgY29tcG9uZW50LFxuICAgIGZvbnRTaXplLFxuICAgIGluc3RhbmNlRm9udFNpemU6IGluUHJvcHMuZm9udFNpemUsXG4gICAgaW5oZXJpdFZpZXdCb3gsXG4gICAgdmlld0JveCxcbiAgICBoYXNTdmdBc0NoaWxkXG4gIH0pO1xuICBjb25zdCBtb3JlID0ge307XG4gIGlmICghaW5oZXJpdFZpZXdCb3gpIHtcbiAgICBtb3JlLnZpZXdCb3ggPSB2aWV3Qm94O1xuICB9XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhTdmdJY29uUm9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBjb21wb25lbnQsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBmb2N1c2FibGU6IFwiZmFsc2VcIixcbiAgICBjb2xvcjogaHRtbENvbG9yLFxuICAgIFwiYXJpYS1oaWRkZW5cIjogdGl0bGVBY2Nlc3MgPyB1bmRlZmluZWQgOiB0cnVlLFxuICAgIHJvbGU6IHRpdGxlQWNjZXNzID8gJ2ltZycgOiB1bmRlZmluZWQsXG4gICAgcmVmOiByZWZcbiAgfSwgbW9yZSwgb3RoZXIsIGhhc1N2Z0FzQ2hpbGQgJiYgY2hpbGRyZW4ucHJvcHMsIHtcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNoaWxkcmVuOiBbaGFzU3ZnQXNDaGlsZCA/IGNoaWxkcmVuLnByb3BzLmNoaWxkcmVuIDogY2hpbGRyZW4sIHRpdGxlQWNjZXNzID8gLyojX19QVVJFX18qL19qc3goXCJ0aXRsZVwiLCB7XG4gICAgICBjaGlsZHJlbjogdGl0bGVBY2Nlc3NcbiAgICB9KSA6IG51bGxdXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU3ZnSWNvbi5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBOb2RlIHBhc3NlZCBpbnRvIHRoZSBTVkcgZWxlbWVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBZb3UgY2FuIHVzZSB0aGUgYGh0bWxDb2xvcmAgcHJvcCB0byBhcHBseSBhIGNvbG9yIGF0dHJpYnV0ZSB0byB0aGUgU1ZHIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0ICdpbmhlcml0J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdhY3Rpb24nLCAnZGlzYWJsZWQnLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogVGhlIGZvbnRTaXplIGFwcGxpZWQgdG8gdGhlIGljb24uIERlZmF1bHRzIHRvIDI0cHgsIGJ1dCBjYW4gYmUgY29uZmlndXJlIHRvIGluaGVyaXQgZm9udCBzaXplLlxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgZm9udFNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdsYXJnZScsICdtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIEFwcGxpZXMgYSBjb2xvciBhdHRyaWJ1dGUgdG8gdGhlIFNWRyBlbGVtZW50LlxuICAgKi9cbiAgaHRtbENvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcm9vdCBub2RlIHdpbGwgaW5oZXJpdCB0aGUgY3VzdG9tIGBjb21wb25lbnRgJ3Mgdmlld0JveCBhbmQgdGhlIGB2aWV3Qm94YFxuICAgKiBwcm9wIHdpbGwgYmUgaWdub3JlZC5cbiAgICogVXNlZnVsIHdoZW4geW91IHdhbnQgdG8gcmVmZXJlbmNlIGEgY3VzdG9tIGBjb21wb25lbnRgIGFuZCBoYXZlIGBTdmdJY29uYCBwYXNzIHRoYXRcbiAgICogYGNvbXBvbmVudGAncyB2aWV3Qm94IHRvIHRoZSByb290IG5vZGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpbmhlcml0Vmlld0JveDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc2hhcGUtcmVuZGVyaW5nIGF0dHJpYnV0ZS4gVGhlIGJlaGF2aW9yIG9mIHRoZSBkaWZmZXJlbnQgb3B0aW9ucyBpcyBkZXNjcmliZWQgb24gdGhlXG4gICAqIFtNRE4gV2ViIERvY3NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1NWRy9BdHRyaWJ1dGUvc2hhcGUtcmVuZGVyaW5nKS5cbiAgICogSWYgeW91IGFyZSBoYXZpbmcgaXNzdWVzIHdpdGggYmx1cnJ5IGljb25zIHlvdSBzaG91bGQgaW52ZXN0aWdhdGUgdGhpcyBwcm9wLlxuICAgKi9cbiAgc2hhcGVSZW5kZXJpbmc6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBQcm92aWRlcyBhIGh1bWFuLXJlYWRhYmxlIHRpdGxlIGZvciB0aGUgZWxlbWVudCB0aGF0IGNvbnRhaW5zIGl0LlxuICAgKiBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHLWFjY2Vzcy8jRXF1aXZhbGVudFxuICAgKi9cbiAgdGl0bGVBY2Nlc3M6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBBbGxvd3MgeW91IHRvIHJlZGVmaW5lIHdoYXQgdGhlIGNvb3JkaW5hdGVzIHdpdGhvdXQgdW5pdHMgbWVhbiBpbnNpZGUgYW4gU1ZHIGVsZW1lbnQuXG4gICAqIEZvciBleGFtcGxlLCBpZiB0aGUgU1ZHIGVsZW1lbnQgaXMgNTAwICh3aWR0aCkgYnkgMjAwIChoZWlnaHQpLFxuICAgKiBhbmQgeW91IHBhc3Mgdmlld0JveD1cIjAgMCA1MCAyMFwiLFxuICAgKiB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvb3JkaW5hdGVzIGluc2lkZSB0aGUgU1ZHIHdpbGwgZ28gZnJvbSB0aGUgdG9wIGxlZnQgY29ybmVyICgwLDApXG4gICAqIHRvIGJvdHRvbSByaWdodCAoNTAsMjApIGFuZCBlYWNoIHVuaXQgd2lsbCBiZSB3b3J0aCAxMHB4LlxuICAgKiBAZGVmYXVsdCAnMCAwIDI0IDI0J1xuICAgKi9cbiAgdmlld0JveDogUHJvcFR5cGVzLnN0cmluZ1xufSA6IHZvaWQgMDtcblN2Z0ljb24ubXVpTmFtZSA9ICdTdmdJY29uJztcbmV4cG9ydCBkZWZhdWx0IFN2Z0ljb247IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlU3ZnSWNvbiBmcm9tICcuLi8uLi91dGlscy9jcmVhdGVTdmdJY29uJztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU3ZnSWNvbiggLyojX19QVVJFX18qL19qc3goXCJwYXRoXCIsIHtcbiAgZDogXCJNNyAxMGw1IDUgNS01elwiXG59KSwgJ0Fycm93RHJvcERvd24nKTsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFN2Z0ljb24gZnJvbSAnLi4vU3ZnSWNvbic7XG5cbi8qKlxuICogUHJpdmF0ZSBtb2R1bGUgcmVzZXJ2ZWQgZm9yIEBtdWkgcGFja2FnZXMuXG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVTdmdJY29uKHBhdGgsIGRpc3BsYXlOYW1lKSB7XG4gIGZ1bmN0aW9uIENvbXBvbmVudChwcm9wcywgcmVmKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFN2Z0ljb24sIF9leHRlbmRzKHtcbiAgICAgIFwiZGF0YS10ZXN0aWRcIjogYCR7ZGlzcGxheU5hbWV9SWNvbmAsXG4gICAgICByZWY6IHJlZlxuICAgIH0sIHByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogcGF0aFxuICAgIH0pKTtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIE5lZWQgdG8gc2V0IGBkaXNwbGF5TmFtZWAgb24gdGhlIGlubmVyIGNvbXBvbmVudCBmb3IgUmVhY3QubWVtby5cbiAgICAvLyBSZWFjdCBwcmlvciB0byAxNi4xNCBpZ25vcmVzIGBkaXNwbGF5TmFtZWAgb24gdGhlIHdyYXBwZXIuXG4gICAgQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gYCR7ZGlzcGxheU5hbWV9SWNvbmA7XG4gIH1cbiAgQ29tcG9uZW50Lm11aU5hbWUgPSBTdmdJY29uLm11aU5hbWU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QubWVtbyggLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoQ29tcG9uZW50KSk7XG59IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYXV0b1dpZHRoXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc2VzXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGVmYXVsdE9wZW5cIiwgXCJkaXNwbGF5RW1wdHlcIiwgXCJJY29uQ29tcG9uZW50XCIsIFwiaWRcIiwgXCJpbnB1dFwiLCBcImlucHV0UHJvcHNcIiwgXCJsYWJlbFwiLCBcImxhYmVsSWRcIiwgXCJNZW51UHJvcHNcIiwgXCJtdWx0aXBsZVwiLCBcIm5hdGl2ZVwiLCBcIm9uQ2xvc2VcIiwgXCJvbk9wZW5cIiwgXCJvcGVuXCIsIFwicmVuZGVyVmFsdWVcIiwgXCJTZWxlY3REaXNwbGF5UHJvcHNcIiwgXCJ2YXJpYW50XCJdLFxuICBfZXhjbHVkZWQyID0gW1wicm9vdFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IGRlZXBtZXJnZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IFNlbGVjdElucHV0IGZyb20gJy4vU2VsZWN0SW5wdXQnO1xuaW1wb3J0IGZvcm1Db250cm9sU3RhdGUgZnJvbSAnLi4vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZSc7XG5pbXBvcnQgdXNlRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wnO1xuaW1wb3J0IEFycm93RHJvcERvd25JY29uIGZyb20gJy4uL2ludGVybmFsL3N2Zy1pY29ucy9BcnJvd0Ryb3BEb3duJztcbmltcG9ydCBJbnB1dCBmcm9tICcuLi9JbnB1dCc7XG5pbXBvcnQgTmF0aXZlU2VsZWN0SW5wdXQgZnJvbSAnLi4vTmF0aXZlU2VsZWN0L05hdGl2ZVNlbGVjdElucHV0JztcbmltcG9ydCBGaWxsZWRJbnB1dCBmcm9tICcuLi9GaWxsZWRJbnB1dCc7XG5pbXBvcnQgT3V0bGluZWRJbnB1dCBmcm9tICcuLi9PdXRsaW5lZElucHV0JztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgcmV0dXJuIGNsYXNzZXM7XG59O1xuY29uc3Qgc3R5bGVkUm9vdENvbmZpZyA9IHtcbiAgbmFtZTogJ011aVNlbGVjdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnJvb3QsXG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSAmJiBwcm9wICE9PSAndmFyaWFudCcsXG4gIHNsb3Q6ICdSb290J1xufTtcbmNvbnN0IFN0eWxlZElucHV0ID0gc3R5bGVkKElucHV0LCBzdHlsZWRSb290Q29uZmlnKSgnJyk7XG5jb25zdCBTdHlsZWRPdXRsaW5lZElucHV0ID0gc3R5bGVkKE91dGxpbmVkSW5wdXQsIHN0eWxlZFJvb3RDb25maWcpKCcnKTtcbmNvbnN0IFN0eWxlZEZpbGxlZElucHV0ID0gc3R5bGVkKEZpbGxlZElucHV0LCBzdHlsZWRSb290Q29uZmlnKSgnJyk7XG5jb25zdCBTZWxlY3QgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBTZWxlY3QoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgbmFtZTogJ011aVNlbGVjdCcsXG4gICAgcHJvcHM6IGluUHJvcHNcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGF1dG9XaWR0aCA9IGZhbHNlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc2VzOiBjbGFzc2VzUHJvcCA9IHt9LFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgZGVmYXVsdE9wZW4gPSBmYWxzZSxcbiAgICAgIGRpc3BsYXlFbXB0eSA9IGZhbHNlLFxuICAgICAgSWNvbkNvbXBvbmVudCA9IEFycm93RHJvcERvd25JY29uLFxuICAgICAgaWQsXG4gICAgICBpbnB1dCxcbiAgICAgIGlucHV0UHJvcHMsXG4gICAgICBsYWJlbCxcbiAgICAgIGxhYmVsSWQsXG4gICAgICBNZW51UHJvcHMsXG4gICAgICBtdWx0aXBsZSA9IGZhbHNlLFxuICAgICAgbmF0aXZlID0gZmFsc2UsXG4gICAgICBvbkNsb3NlLFxuICAgICAgb25PcGVuLFxuICAgICAgb3BlbixcbiAgICAgIHJlbmRlclZhbHVlLFxuICAgICAgU2VsZWN0RGlzcGxheVByb3BzLFxuICAgICAgdmFyaWFudDogdmFyaWFudFByb3AgPSAnb3V0bGluZWQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGlucHV0Q29tcG9uZW50ID0gbmF0aXZlID8gTmF0aXZlU2VsZWN0SW5wdXQgOiBTZWxlY3RJbnB1dDtcbiAgY29uc3QgbXVpRm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbCgpO1xuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsndmFyaWFudCcsICdlcnJvciddXG4gIH0pO1xuICBjb25zdCB2YXJpYW50ID0gZmNzLnZhcmlhbnQgfHwgdmFyaWFudFByb3A7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICB2YXJpYW50LFxuICAgIGNsYXNzZXM6IGNsYXNzZXNQcm9wXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IHJlc3RPZkNsYXNzZXMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShjbGFzc2VzLCBfZXhjbHVkZWQyKTtcbiAgY29uc3QgSW5wdXRDb21wb25lbnQgPSBpbnB1dCB8fCB7XG4gICAgc3RhbmRhcmQ6IC8qI19fUFVSRV9fKi9fanN4KFN0eWxlZElucHV0LCB7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSksXG4gICAgb3V0bGluZWQ6IC8qI19fUFVSRV9fKi9fanN4KFN0eWxlZE91dGxpbmVkSW5wdXQsIHtcbiAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgICB9KSxcbiAgICBmaWxsZWQ6IC8qI19fUFVSRV9fKi9fanN4KFN0eWxlZEZpbGxlZElucHV0LCB7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSlcbiAgfVt2YXJpYW50XTtcbiAgY29uc3QgaW5wdXRDb21wb25lbnRSZWYgPSB1c2VGb3JrUmVmKHJlZiwgSW5wdXRDb21wb25lbnQucmVmKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoSW5wdXRDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIC8vIE1vc3Qgb2YgdGhlIGxvZ2ljIGlzIGltcGxlbWVudGVkIGluIGBTZWxlY3RJbnB1dGAuXG4gICAgICAvLyBUaGUgYFNlbGVjdGAgY29tcG9uZW50IGlzIGEgc2ltcGxlIEFQSSB3cmFwcGVyIHRvIGV4cG9zZSBzb21ldGhpbmcgYmV0dGVyIHRvIHBsYXkgd2l0aC5cbiAgICAgIGlucHV0Q29tcG9uZW50LFxuICAgICAgaW5wdXRQcm9wczogX2V4dGVuZHMoe1xuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgZXJyb3I6IGZjcy5lcnJvcixcbiAgICAgICAgSWNvbkNvbXBvbmVudCxcbiAgICAgICAgdmFyaWFudCxcbiAgICAgICAgdHlwZTogdW5kZWZpbmVkLFxuICAgICAgICAvLyBXZSByZW5kZXIgYSBzZWxlY3QuIFdlIGNhbiBpZ25vcmUgdGhlIHR5cGUgcHJvdmlkZWQgYnkgdGhlIGBJbnB1dGAuXG4gICAgICAgIG11bHRpcGxlXG4gICAgICB9LCBuYXRpdmUgPyB7XG4gICAgICAgIGlkXG4gICAgICB9IDoge1xuICAgICAgICBhdXRvV2lkdGgsXG4gICAgICAgIGRlZmF1bHRPcGVuLFxuICAgICAgICBkaXNwbGF5RW1wdHksXG4gICAgICAgIGxhYmVsSWQsXG4gICAgICAgIE1lbnVQcm9wcyxcbiAgICAgICAgb25DbG9zZSxcbiAgICAgICAgb25PcGVuLFxuICAgICAgICBvcGVuLFxuICAgICAgICByZW5kZXJWYWx1ZSxcbiAgICAgICAgU2VsZWN0RGlzcGxheVByb3BzOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgaWRcbiAgICAgICAgfSwgU2VsZWN0RGlzcGxheVByb3BzKVxuICAgICAgfSwgaW5wdXRQcm9wcywge1xuICAgICAgICBjbGFzc2VzOiBpbnB1dFByb3BzID8gZGVlcG1lcmdlKHJlc3RPZkNsYXNzZXMsIGlucHV0UHJvcHMuY2xhc3NlcykgOiByZXN0T2ZDbGFzc2VzXG4gICAgICB9LCBpbnB1dCA/IGlucHV0LnByb3BzLmlucHV0UHJvcHMgOiB7fSlcbiAgICB9LCBtdWx0aXBsZSAmJiBuYXRpdmUgJiYgdmFyaWFudCA9PT0gJ291dGxpbmVkJyA/IHtcbiAgICAgIG5vdGNoZWQ6IHRydWVcbiAgICB9IDoge30sIHtcbiAgICAgIHJlZjogaW5wdXRDb21wb25lbnRSZWYsXG4gICAgICBjbGFzc05hbWU6IGNsc3goSW5wdXRDb21wb25lbnQucHJvcHMuY2xhc3NOYW1lLCBjbGFzc05hbWUsIGNsYXNzZXMucm9vdClcbiAgICB9LCAhaW5wdXQgJiYge1xuICAgICAgdmFyaWFudFxuICAgIH0sIG90aGVyKSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFNlbGVjdC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB3aWR0aCBvZiB0aGUgcG9wb3ZlciB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2V0IGFjY29yZGluZyB0byB0aGUgaXRlbXMgaW5zaWRlIHRoZVxuICAgKiBtZW51LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBhdCBsZWFzdCB0aGUgd2lkdGggb2YgdGhlIHNlbGVjdCBpbnB1dC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGF1dG9XaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uIGVsZW1lbnRzIHRvIHBvcHVsYXRlIHRoZSBzZWxlY3Qgd2l0aC5cbiAgICogQ2FuIGJlIHNvbWUgYE1lbnVJdGVtYCB3aGVuIGBuYXRpdmVgIGlzIGZhbHNlIGFuZCBgb3B0aW9uYCB3aGVuIGBuYXRpdmVgIGlzIHRydWUuXG4gICAqXG4gICAqIOKaoO+4j1RoZSBgTWVudUl0ZW1gIGVsZW1lbnRzICoqbXVzdCoqIGJlIGRpcmVjdCBkZXNjZW5kYW50cyB3aGVuIGBuYXRpdmVgIGlzIGZhbHNlLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBpbml0aWFsbHkgb3Blbi4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBvcGVuIHN0YXRlIGlzIG5vdCBjb250cm9sbGVkIChpLmUuIHRoZSBgb3BlbmAgcHJvcCBpcyBub3QgZGVmaW5lZCkuXG4gICAqIFlvdSBjYW4gb25seSB1c2UgaXQgd2hlbiB0aGUgYG5hdGl2ZWAgcHJvcCBpcyBgZmFsc2VgIChkZWZhdWx0KS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlZmF1bHRPcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIHZhbHVlIGlzIGRpc3BsYXllZCBldmVuIGlmIG5vIGl0ZW1zIGFyZSBzZWxlY3RlZC5cbiAgICpcbiAgICogSW4gb3JkZXIgdG8gZGlzcGxheSBhIG1lYW5pbmdmdWwgdmFsdWUsIGEgZnVuY3Rpb24gY2FuIGJlIHBhc3NlZCB0byB0aGUgYHJlbmRlclZhbHVlYCBwcm9wIHdoaWNoXG4gICAqIHJldHVybnMgdGhlIHZhbHVlIHRvIGJlIGRpc3BsYXllZCB3aGVuIG5vIGl0ZW1zIGFyZSBzZWxlY3RlZC5cbiAgICpcbiAgICog4pqg77iPIFdoZW4gdXNpbmcgdGhpcyBwcm9wLCBtYWtlIHN1cmUgdGhlIGxhYmVsIGRvZXNuJ3Qgb3ZlcmxhcCB3aXRoIHRoZSBlbXB0eSBkaXNwbGF5ZWQgdmFsdWUuXG4gICAqIFRoZSBsYWJlbCBzaG91bGQgZWl0aGVyIGJlIGhpZGRlbiBvciBmb3JjZWQgdG8gYSBzaHJ1bmsgc3RhdGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNwbGF5RW1wdHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGljb24gdGhhdCBkaXNwbGF5cyB0aGUgYXJyb3cuXG4gICAqIEBkZWZhdWx0IEFycm93RHJvcERvd25JY29uXG4gICAqL1xuICBJY29uQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBUaGUgYGlkYCBvZiB0aGUgd3JhcHBlciBlbGVtZW50IG9yIHRoZSBgc2VsZWN0YCBlbGVtZW50IHdoZW4gYG5hdGl2ZWAuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEFuIGBJbnB1dGAgZWxlbWVudDsgZG9lcyBub3QgaGF2ZSB0byBiZSBhIG1hdGVyaWFsLXVpIHNwZWNpZmljIGBJbnB1dGAuXG4gICAqL1xuICBpbnB1dDogUHJvcFR5cGVzLmVsZW1lbnQsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogV2hlbiBgbmF0aXZlYCBpcyBgdHJ1ZWAsIHRoZSBhdHRyaWJ1dGVzIGFyZSBhcHBsaWVkIG9uIHRoZSBgc2VsZWN0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFNlZSBbT3V0bGluZWRJbnB1dCNsYWJlbF0oL21hdGVyaWFsLXVpL2FwaS9vdXRsaW5lZC1pbnB1dC8jcHJvcHMpXG4gICAqL1xuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgYW4gZWxlbWVudCB0aGF0IGFjdHMgYXMgYW4gYWRkaXRpb25hbCBsYWJlbC4gVGhlIFNlbGVjdCB3aWxsXG4gICAqIGJlIGxhYmVsbGVkIGJ5IHRoZSBhZGRpdGlvbmFsIGxhYmVsIGFuZCB0aGUgc2VsZWN0ZWQgdmFsdWUuXG4gICAqL1xuICBsYWJlbElkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BNZW51YF0oL21hdGVyaWFsLXVpL2FwaS9tZW51LykgZWxlbWVudC5cbiAgICovXG4gIE1lbnVQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYHZhbHVlYCBtdXN0IGJlIGFuIGFycmF5IGFuZCB0aGUgbWVudSB3aWxsIHN1cHBvcnQgbXVsdGlwbGUgc2VsZWN0aW9ucy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB1c2VzIGEgbmF0aXZlIGBzZWxlY3RgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBuYXRpdmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiBhIG1lbnUgaXRlbSBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHtTZWxlY3RDaGFuZ2VFdmVudDxWYWx1ZT59IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChhbnkpLlxuICAgKiAqKldhcm5pbmcqKjogVGhpcyBpcyBhIGdlbmVyaWMgZXZlbnQsIG5vdCBhIGNoYW5nZSBldmVudCwgdW5sZXNzIHRoZSBjaGFuZ2UgZXZlbnQgaXMgY2F1c2VkIGJ5IGJyb3dzZXIgYXV0b2ZpbGwuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbY2hpbGRdIFRoZSByZWFjdCBlbGVtZW50IHRoYXQgd2FzIHNlbGVjdGVkIHdoZW4gYG5hdGl2ZWAgaXMgYGZhbHNlYCAoZGVmYXVsdCkuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgY2xvc2VkLlxuICAgKiBVc2UgaXQgaW4gZWl0aGVyIGNvbnRyb2xsZWQgKHNlZSB0aGUgYG9wZW5gIHByb3ApLCBvciB1bmNvbnRyb2xsZWQgbW9kZSAodG8gZGV0ZWN0IHdoZW4gdGhlIFNlbGVjdCBjb2xsYXBzZXMpLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBvcGVuZWQuXG4gICAqIFVzZSBpdCBpbiBlaXRoZXIgY29udHJvbGxlZCAoc2VlIHRoZSBgb3BlbmAgcHJvcCksIG9yIHVuY29udHJvbGxlZCBtb2RlICh0byBkZXRlY3Qgd2hlbiB0aGUgU2VsZWN0IGV4cGFuZHMpLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqL1xuICBvbk9wZW46IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKiBZb3UgY2FuIG9ubHkgdXNlIGl0IHdoZW4gdGhlIGBuYXRpdmVgIHByb3AgaXMgYGZhbHNlYCAoZGVmYXVsdCkuXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgc2VsZWN0ZWQgdmFsdWUuXG4gICAqIFlvdSBjYW4gb25seSB1c2UgaXQgd2hlbiB0aGUgYG5hdGl2ZWAgcHJvcCBpcyBgZmFsc2VgIChkZWZhdWx0KS5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IHZhbHVlIFRoZSBgdmFsdWVgIHByb3ZpZGVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIHtSZWFjdE5vZGV9XG4gICAqL1xuICByZW5kZXJWYWx1ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBjbGlja2FibGUgZGl2IGVsZW1lbnQuXG4gICAqL1xuICBTZWxlY3REaXNwbGF5UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgYGlucHV0YCB2YWx1ZS4gUHJvdmlkaW5nIGFuIGVtcHR5IHN0cmluZyB3aWxsIHNlbGVjdCBubyBvcHRpb25zLlxuICAgKiBTZXQgdG8gYW4gZW1wdHkgc3RyaW5nIGAnJ2AgaWYgeW91IGRvbid0IHdhbnQgYW55IG9mIHRoZSBhdmFpbGFibGUgb3B0aW9ucyB0byBiZSBzZWxlY3RlZC5cbiAgICpcbiAgICogSWYgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCBpdCBtdXN0IGhhdmUgcmVmZXJlbmNlIGVxdWFsaXR5IHdpdGggdGhlIG9wdGlvbiBpbiBvcmRlciB0byBiZSBzZWxlY3RlZC5cbiAgICogSWYgdGhlIHZhbHVlIGlzIG5vdCBhbiBvYmplY3QsIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gbXVzdCBtYXRjaCB3aXRoIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9wdGlvbiBpbiBvcmRlciB0byBiZSBzZWxlY3RlZC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWycnXSksIFByb3BUeXBlcy5hbnldKSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgJ291dGxpbmVkJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJ10pXG59IDogdm9pZCAwO1xuU2VsZWN0Lm11aU5hbWUgPSAnU2VsZWN0JztcbmV4cG9ydCBkZWZhdWx0IFNlbGVjdDsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRGaWVsZFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpVGV4dEZpZWxkJywgc2xvdCk7XG59XG5jb25zdCB0ZXh0RmllbGRDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpVGV4dEZpZWxkJywgWydyb290J10pO1xuZXhwb3J0IGRlZmF1bHQgdGV4dEZpZWxkQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhdXRvQ29tcGxldGVcIiwgXCJhdXRvRm9jdXNcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcIkZvcm1IZWxwZXJUZXh0UHJvcHNcIiwgXCJmdWxsV2lkdGhcIiwgXCJoZWxwZXJUZXh0XCIsIFwiaWRcIiwgXCJJbnB1dExhYmVsUHJvcHNcIiwgXCJpbnB1dFByb3BzXCIsIFwiSW5wdXRQcm9wc1wiLCBcImlucHV0UmVmXCIsIFwibGFiZWxcIiwgXCJtYXhSb3dzXCIsIFwibWluUm93c1wiLCBcIm11bHRpbGluZVwiLCBcIm5hbWVcIiwgXCJvbkJsdXJcIiwgXCJvbkNoYW5nZVwiLCBcIm9uRm9jdXNcIiwgXCJwbGFjZWhvbGRlclwiLCBcInJlcXVpcmVkXCIsIFwicm93c1wiLCBcInNlbGVjdFwiLCBcIlNlbGVjdFByb3BzXCIsIFwidHlwZVwiLCBcInZhbHVlXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IHJlZlR5cGUsIHVuc3RhYmxlX3VzZUlkIGFzIHVzZUlkIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IElucHV0IGZyb20gJy4uL0lucHV0JztcbmltcG9ydCBGaWxsZWRJbnB1dCBmcm9tICcuLi9GaWxsZWRJbnB1dCc7XG5pbXBvcnQgT3V0bGluZWRJbnB1dCBmcm9tICcuLi9PdXRsaW5lZElucHV0JztcbmltcG9ydCBJbnB1dExhYmVsIGZyb20gJy4uL0lucHV0TGFiZWwnO1xuaW1wb3J0IEZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sJztcbmltcG9ydCBGb3JtSGVscGVyVGV4dCBmcm9tICcuLi9Gb3JtSGVscGVyVGV4dCc7XG5pbXBvcnQgU2VsZWN0IGZyb20gJy4uL1NlbGVjdCc7XG5pbXBvcnQgeyBnZXRUZXh0RmllbGRVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3RleHRGaWVsZENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHZhcmlhbnRDb21wb25lbnQgPSB7XG4gIHN0YW5kYXJkOiBJbnB1dCxcbiAgZmlsbGVkOiBGaWxsZWRJbnB1dCxcbiAgb3V0bGluZWQ6IE91dGxpbmVkSW5wdXRcbn07XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRUZXh0RmllbGRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IFRleHRGaWVsZFJvb3QgPSBzdHlsZWQoRm9ybUNvbnRyb2wsIHtcbiAgbmFtZTogJ011aVRleHRGaWVsZCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoe30pO1xuXG4vKipcbiAqIFRoZSBgVGV4dEZpZWxkYCBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIgZm9yIHRoZSBtb3N0IGNvbW1vbiBjYXNlcyAoODAlKS5cbiAqIEl0IGNhbm5vdCBiZSBhbGwgdGhpbmdzIHRvIGFsbCBwZW9wbGUsIG90aGVyd2lzZSB0aGUgQVBJIHdvdWxkIGdyb3cgb3V0IG9mIGNvbnRyb2wuXG4gKlxuICogIyMgQWR2YW5jZWQgQ29uZmlndXJhdGlvblxuICpcbiAqIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhhdCB0aGUgdGV4dCBmaWVsZCBpcyBhIHNpbXBsZSBhYnN0cmFjdGlvblxuICogb24gdG9wIG9mIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czpcbiAqXG4gKiAtIFtGb3JtQ29udHJvbF0oL21hdGVyaWFsLXVpL2FwaS9mb3JtLWNvbnRyb2wvKVxuICogLSBbSW5wdXRMYWJlbF0oL21hdGVyaWFsLXVpL2FwaS9pbnB1dC1sYWJlbC8pXG4gKiAtIFtGaWxsZWRJbnB1dF0oL21hdGVyaWFsLXVpL2FwaS9maWxsZWQtaW5wdXQvKVxuICogLSBbT3V0bGluZWRJbnB1dF0oL21hdGVyaWFsLXVpL2FwaS9vdXRsaW5lZC1pbnB1dC8pXG4gKiAtIFtJbnB1dF0oL21hdGVyaWFsLXVpL2FwaS9pbnB1dC8pXG4gKiAtIFtGb3JtSGVscGVyVGV4dF0oL21hdGVyaWFsLXVpL2FwaS9mb3JtLWhlbHBlci10ZXh0LylcbiAqXG4gKiBJZiB5b3Ugd2lzaCB0byBhbHRlciB0aGUgcHJvcHMgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LCB5b3UgY2FuIGRvIHNvIGFzIGZvbGxvd3M6XG4gKlxuICogYGBganN4XG4gKiBjb25zdCBpbnB1dFByb3BzID0ge1xuICogICBzdGVwOiAzMDAsXG4gKiB9O1xuICpcbiAqIHJldHVybiA8VGV4dEZpZWxkIGlkPVwidGltZVwiIHR5cGU9XCJ0aW1lXCIgaW5wdXRQcm9wcz17aW5wdXRQcm9wc30gLz47XG4gKiBgYGBcbiAqXG4gKiBGb3IgYWR2YW5jZWQgY2FzZXMsIHBsZWFzZSBsb29rIGF0IHRoZSBzb3VyY2Ugb2YgVGV4dEZpZWxkIGJ5IGNsaWNraW5nIG9uIHRoZVxuICogXCJFZGl0IHRoaXMgcGFnZVwiIGJ1dHRvbiBhYm92ZS4gQ29uc2lkZXIgZWl0aGVyOlxuICpcbiAqIC0gdXNpbmcgdGhlIHVwcGVyIGNhc2UgcHJvcHMgZm9yIHBhc3NpbmcgdmFsdWVzIGRpcmVjdGx5IHRvIHRoZSBjb21wb25lbnRzXG4gKiAtIHVzaW5nIHRoZSB1bmRlcmx5aW5nIGNvbXBvbmVudHMgZGlyZWN0bHkgYXMgc2hvd24gaW4gdGhlIGRlbW9zXG4gKi9cbmNvbnN0IFRleHRGaWVsZCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFRleHRGaWVsZChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpVGV4dEZpZWxkJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgYXV0b0NvbXBsZXRlLFxuICAgICAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgIGVycm9yID0gZmFsc2UsXG4gICAgICBGb3JtSGVscGVyVGV4dFByb3BzLFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICBoZWxwZXJUZXh0LFxuICAgICAgaWQ6IGlkT3ZlcnJpZGUsXG4gICAgICBJbnB1dExhYmVsUHJvcHMsXG4gICAgICBpbnB1dFByb3BzLFxuICAgICAgSW5wdXRQcm9wcyxcbiAgICAgIGlucHV0UmVmLFxuICAgICAgbGFiZWwsXG4gICAgICBtYXhSb3dzLFxuICAgICAgbWluUm93cyxcbiAgICAgIG11bHRpbGluZSA9IGZhbHNlLFxuICAgICAgbmFtZSxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgICAgIHJvd3MsXG4gICAgICBzZWxlY3QgPSBmYWxzZSxcbiAgICAgIFNlbGVjdFByb3BzLFxuICAgICAgdHlwZSxcbiAgICAgIHZhbHVlLFxuICAgICAgdmFyaWFudCA9ICdvdXRsaW5lZCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGF1dG9Gb2N1cyxcbiAgICBjb2xvcixcbiAgICBkaXNhYmxlZCxcbiAgICBlcnJvcixcbiAgICBmdWxsV2lkdGgsXG4gICAgbXVsdGlsaW5lLFxuICAgIHJlcXVpcmVkLFxuICAgIHNlbGVjdCxcbiAgICB2YXJpYW50XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHNlbGVjdCAmJiAhY2hpbGRyZW4pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogYGNoaWxkcmVuYCBtdXN0IGJlIHBhc3NlZCB3aGVuIHVzaW5nIHRoZSBgVGV4dEZpZWxkYCBjb21wb25lbnQgd2l0aCBgc2VsZWN0YC4nKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgSW5wdXRNb3JlID0ge307XG4gIGlmICh2YXJpYW50ID09PSAnb3V0bGluZWQnKSB7XG4gICAgaWYgKElucHV0TGFiZWxQcm9wcyAmJiB0eXBlb2YgSW5wdXRMYWJlbFByb3BzLnNocmluayAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIElucHV0TW9yZS5ub3RjaGVkID0gSW5wdXRMYWJlbFByb3BzLnNocmluaztcbiAgICB9XG4gICAgSW5wdXRNb3JlLmxhYmVsID0gbGFiZWw7XG4gIH1cbiAgaWYgKHNlbGVjdCkge1xuICAgIC8vIHVuc2V0IGRlZmF1bHRzIGZyb20gdGV4dGJveCBpbnB1dHNcbiAgICBpZiAoIVNlbGVjdFByb3BzIHx8ICFTZWxlY3RQcm9wcy5uYXRpdmUpIHtcbiAgICAgIElucHV0TW9yZS5pZCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgSW5wdXRNb3JlWydhcmlhLWRlc2NyaWJlZGJ5J10gPSB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgaWQgPSB1c2VJZChpZE92ZXJyaWRlKTtcbiAgY29uc3QgaGVscGVyVGV4dElkID0gaGVscGVyVGV4dCAmJiBpZCA/IGAke2lkfS1oZWxwZXItdGV4dGAgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGlucHV0TGFiZWxJZCA9IGxhYmVsICYmIGlkID8gYCR7aWR9LWxhYmVsYCA6IHVuZGVmaW5lZDtcbiAgY29uc3QgSW5wdXRDb21wb25lbnQgPSB2YXJpYW50Q29tcG9uZW50W3ZhcmlhbnRdO1xuICBjb25zdCBJbnB1dEVsZW1lbnQgPSAvKiNfX1BVUkVfXyovX2pzeChJbnB1dENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBoZWxwZXJUZXh0SWQsXG4gICAgYXV0b0NvbXBsZXRlOiBhdXRvQ29tcGxldGUsXG4gICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgbXVsdGlsaW5lOiBtdWx0aWxpbmUsXG4gICAgbmFtZTogbmFtZSxcbiAgICByb3dzOiByb3dzLFxuICAgIG1heFJvd3M6IG1heFJvd3MsXG4gICAgbWluUm93czogbWluUm93cyxcbiAgICB0eXBlOiB0eXBlLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBpZDogaWQsXG4gICAgaW5wdXRSZWY6IGlucHV0UmVmLFxuICAgIG9uQmx1cjogb25CbHVyLFxuICAgIG9uQ2hhbmdlOiBvbkNoYW5nZSxcbiAgICBvbkZvY3VzOiBvbkZvY3VzLFxuICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcixcbiAgICBpbnB1dFByb3BzOiBpbnB1dFByb3BzXG4gIH0sIElucHV0TW9yZSwgSW5wdXRQcm9wcykpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFRleHRGaWVsZFJvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBlcnJvcjogZXJyb3IsXG4gICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgcmVmOiByZWYsXG4gICAgcmVxdWlyZWQ6IHJlcXVpcmVkLFxuICAgIGNvbG9yOiBjb2xvcixcbiAgICB2YXJpYW50OiB2YXJpYW50LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogW2xhYmVsICE9IG51bGwgJiYgbGFiZWwgIT09ICcnICYmIC8qI19fUFVSRV9fKi9fanN4KElucHV0TGFiZWwsIF9leHRlbmRzKHtcbiAgICAgIGh0bWxGb3I6IGlkLFxuICAgICAgaWQ6IGlucHV0TGFiZWxJZFxuICAgIH0sIElucHV0TGFiZWxQcm9wcywge1xuICAgICAgY2hpbGRyZW46IGxhYmVsXG4gICAgfSkpLCBzZWxlY3QgPyAvKiNfX1BVUkVfXyovX2pzeChTZWxlY3QsIF9leHRlbmRzKHtcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBoZWxwZXJUZXh0SWQsXG4gICAgICBpZDogaWQsXG4gICAgICBsYWJlbElkOiBpbnB1dExhYmVsSWQsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBpbnB1dDogSW5wdXRFbGVtZW50XG4gICAgfSwgU2VsZWN0UHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pKSA6IElucHV0RWxlbWVudCwgaGVscGVyVGV4dCAmJiAvKiNfX1BVUkVfXyovX2pzeChGb3JtSGVscGVyVGV4dCwgX2V4dGVuZHMoe1xuICAgICAgaWQ6IGhlbHBlclRleHRJZFxuICAgIH0sIEZvcm1IZWxwZXJUZXh0UHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBoZWxwZXJUZXh0XG4gICAgfSkpXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRleHRGaWVsZC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgaGVscHMgdXNlcnMgdG8gZmlsbCBmb3JtcyBmYXN0ZXIsIGVzcGVjaWFsbHkgb24gbW9iaWxlIGRldmljZXMuXG4gICAqIFRoZSBuYW1lIGNhbiBiZSBjb25mdXNpbmcsIGFzIGl0J3MgbW9yZSBsaWtlIGFuIGF1dG9maWxsLlxuICAgKiBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgaXQgW2ZvbGxvd2luZyB0aGUgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybS1jb250cm9sLWluZnJhc3RydWN0dXJlLmh0bWwjYXV0b2ZpbGwpLlxuICAgKi9cbiAgYXV0b0NvbXBsZXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeScsICdlcnJvcicsICdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBkaXNwbGF5ZWQgaW4gYW4gZXJyb3Igc3RhdGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYEZvcm1IZWxwZXJUZXh0YF0oL21hdGVyaWFsLXVpL2FwaS9mb3JtLWhlbHBlci10ZXh0LykgZWxlbWVudC5cbiAgICovXG4gIEZvcm1IZWxwZXJUZXh0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBpbnB1dCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaGVscGVyIHRleHQgY29udGVudC5cbiAgICovXG4gIGhlbHBlclRleHQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIFVzZSB0aGlzIHByb3AgdG8gbWFrZSBgbGFiZWxgIGFuZCBgaGVscGVyVGV4dGAgYWNjZXNzaWJsZSBmb3Igc2NyZWVuIHJlYWRlcnMuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgSW5wdXRMYWJlbGBdKC9tYXRlcmlhbC11aS9hcGkvaW5wdXQtbGFiZWwvKSBlbGVtZW50LlxuICAgKiBQb2ludGVyIGV2ZW50cyBsaWtlIGBvbkNsaWNrYCBhcmUgZW5hYmxlZCBpZiBhbmQgb25seSBpZiBgc2hyaW5rYCBpcyBgdHJ1ZWAuXG4gICAqL1xuICBJbnB1dExhYmVsUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBJbnB1dCBlbGVtZW50LlxuICAgKiBJdCB3aWxsIGJlIGEgW2BGaWxsZWRJbnB1dGBdKC9tYXRlcmlhbC11aS9hcGkvZmlsbGVkLWlucHV0LyksXG4gICAqIFtgT3V0bGluZWRJbnB1dGBdKC9tYXRlcmlhbC11aS9hcGkvb3V0bGluZWQtaW5wdXQvKSBvciBbYElucHV0YF0oL21hdGVyaWFsLXVpL2FwaS9pbnB1dC8pXG4gICAqIGNvbXBvbmVudCBkZXBlbmRpbmcgb24gdGhlIGB2YXJpYW50YCBwcm9wIHZhbHVlLlxuICAgKi9cbiAgSW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogVGhlIGxhYmVsIGNvbnRlbnQuXG4gICAqL1xuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgIG9yIGBub3JtYWxgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nIG9mIHRoaXMgYW5kIGNvbnRhaW5lZCBjb21wb25lbnRzLlxuICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAnbm9uZScsICdub3JtYWwnXSksXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1pblJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSBgdGV4dGFyZWFgIGVsZW1lbnQgaXMgcmVuZGVyZWQgaW5zdGVhZCBvZiBhbiBpbnB1dC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpbGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKHN0cmluZykuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBzaG9ydCBoaW50IGRpc3BsYXllZCBpbiB0aGUgYGlucHV0YCBiZWZvcmUgdGhlIHVzZXIgZW50ZXJzIGEgdmFsdWUuXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGRpc3BsYXllZCBhcyByZXF1aXJlZCBhbmQgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyByZXF1aXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgcm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogUmVuZGVyIGEgW2BTZWxlY3RgXSgvbWF0ZXJpYWwtdWkvYXBpL3NlbGVjdC8pIGVsZW1lbnQgd2hpbGUgcGFzc2luZyB0aGUgSW5wdXQgZWxlbWVudCB0byBgU2VsZWN0YCBhcyBgaW5wdXRgIHBhcmFtZXRlci5cbiAgICogSWYgdGhpcyBvcHRpb24gaXMgc2V0IHlvdSBtdXN0IHBhc3MgdGhlIG9wdGlvbnMgb2YgdGhlIHNlbGVjdCBhcyBjaGlsZHJlbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHNlbGVjdDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYFNlbGVjdGBdKC9tYXRlcmlhbC11aS9hcGkvc2VsZWN0LykgZWxlbWVudC5cbiAgICovXG4gIFNlbGVjdFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuIEl0IHNob3VsZCBiZSBbYSB2YWxpZCBIVE1MNSBpbnB1dCB0eXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjRm9ybV8lM0NpbnB1dCUzRV90eXBlcykuXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudCwgcmVxdWlyZWQgZm9yIGEgY29udHJvbGxlZCBjb21wb25lbnQuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgJ291dGxpbmVkJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgVGV4dEZpZWxkOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9vbGJhclV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpVG9vbGJhcicsIHNsb3QpO1xufVxuY29uc3QgdG9vbGJhckNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlUb29sYmFyJywgWydyb290JywgJ2d1dHRlcnMnLCAncmVndWxhcicsICdkZW5zZSddKTtcbmV4cG9ydCBkZWZhdWx0IHRvb2xiYXJDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVHdXR0ZXJzXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBnZXRUb29sYmFyVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi90b29sYmFyQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZGlzYWJsZUd1dHRlcnMsXG4gICAgdmFyaWFudFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgIWRpc2FibGVHdXR0ZXJzICYmICdndXR0ZXJzJywgdmFyaWFudF1cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRUb29sYmFyVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBUb29sYmFyUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpVG9vbGJhcicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCAhb3duZXJTdGF0ZS5kaXNhYmxlR3V0dGVycyAmJiBzdHlsZXMuZ3V0dGVycywgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJ1xufSwgIW93bmVyU3RhdGUuZGlzYWJsZUd1dHRlcnMgJiYge1xuICBwYWRkaW5nTGVmdDogdGhlbWUuc3BhY2luZygyKSxcbiAgcGFkZGluZ1JpZ2h0OiB0aGVtZS5zcGFjaW5nKDIpLFxuICBbdGhlbWUuYnJlYWtwb2ludHMudXAoJ3NtJyldOiB7XG4gICAgcGFkZGluZ0xlZnQ6IHRoZW1lLnNwYWNpbmcoMyksXG4gICAgcGFkZGluZ1JpZ2h0OiB0aGVtZS5zcGFjaW5nKDMpXG4gIH1cbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2RlbnNlJyAmJiB7XG4gIG1pbkhlaWdodDogNDhcbn0pLCAoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gb3duZXJTdGF0ZS52YXJpYW50ID09PSAncmVndWxhcicgJiYgdGhlbWUubWl4aW5zLnRvb2xiYXIpO1xuY29uc3QgVG9vbGJhciA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFRvb2xiYXIoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVRvb2xiYXInXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICAgIGRpc2FibGVHdXR0ZXJzID0gZmFsc2UsXG4gICAgICB2YXJpYW50ID0gJ3JlZ3VsYXInXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb21wb25lbnQsXG4gICAgZGlzYWJsZUd1dHRlcnMsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVG9vbGJhclJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgcmVmOiByZWYsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUb29sYmFyLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBUb29sYmFyIGNoaWxkcmVuLCB1c3VhbGx5IGEgbWl4dHVyZSBvZiBgSWNvbkJ1dHRvbmAsIGBCdXR0b25gIGFuZCBgVHlwb2dyYXBoeWAuXG4gICAqIFRoZSBUb29sYmFyIGlzIGEgZmxleCBjb250YWluZXIsIGFsbG93aW5nIGZsZXggaXRlbSBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgdG8gbGF5IG91dCB0aGUgY2hpbGRyZW4uXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGRpc2FibGVzIGd1dHRlciBwYWRkaW5nLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUd1dHRlcnM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKiBAZGVmYXVsdCAncmVndWxhcidcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAncmVndWxhciddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgVG9vbGJhcjsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cG9ncmFwaHlVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVR5cG9ncmFwaHknLCBzbG90KTtcbn1cbmNvbnN0IHR5cG9ncmFwaHlDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpVHlwb2dyYXBoeScsIFsncm9vdCcsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdzdWJ0aXRsZTEnLCAnc3VidGl0bGUyJywgJ2JvZHkxJywgJ2JvZHkyJywgJ2luaGVyaXQnLCAnYnV0dG9uJywgJ2NhcHRpb24nLCAnb3ZlcmxpbmUnLCAnYWxpZ25MZWZ0JywgJ2FsaWduUmlnaHQnLCAnYWxpZ25DZW50ZXInLCAnYWxpZ25KdXN0aWZ5JywgJ25vV3JhcCcsICdndXR0ZXJCb3R0b20nLCAncGFyYWdyYXBoJ10pO1xuZXhwb3J0IGRlZmF1bHQgdHlwb2dyYXBoeUNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWxpZ25cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJndXR0ZXJCb3R0b21cIiwgXCJub1dyYXBcIiwgXCJwYXJhZ3JhcGhcIiwgXCJ2YXJpYW50XCIsIFwidmFyaWFudE1hcHBpbmdcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9leHRlbmRTeFByb3AgYXMgZXh0ZW5kU3hQcm9wIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHsgZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vdHlwb2dyYXBoeUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhbGlnbixcbiAgICBndXR0ZXJCb3R0b20sXG4gICAgbm9XcmFwLFxuICAgIHBhcmFncmFwaCxcbiAgICB2YXJpYW50LFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIHZhcmlhbnQsIG93bmVyU3RhdGUuYWxpZ24gIT09ICdpbmhlcml0JyAmJiBgYWxpZ24ke2NhcGl0YWxpemUoYWxpZ24pfWAsIGd1dHRlckJvdHRvbSAmJiAnZ3V0dGVyQm90dG9tJywgbm9XcmFwICYmICdub1dyYXAnLCBwYXJhZ3JhcGggJiYgJ3BhcmFncmFwaCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuZXhwb3J0IGNvbnN0IFR5cG9ncmFwaHlSb290ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpVHlwb2dyYXBoeScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLnZhcmlhbnQgJiYgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF0sIG93bmVyU3RhdGUuYWxpZ24gIT09ICdpbmhlcml0JyAmJiBzdHlsZXNbYGFsaWduJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuYWxpZ24pfWBdLCBvd25lclN0YXRlLm5vV3JhcCAmJiBzdHlsZXMubm9XcmFwLCBvd25lclN0YXRlLmd1dHRlckJvdHRvbSAmJiBzdHlsZXMuZ3V0dGVyQm90dG9tLCBvd25lclN0YXRlLnBhcmFncmFwaCAmJiBzdHlsZXMucGFyYWdyYXBoXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgbWFyZ2luOiAwXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdpbmhlcml0JyAmJiB7XG4gIC8vIFNvbWUgZWxlbWVudHMsIGxpa2UgPGJ1dHRvbj4gb24gQ2hyb21lIGhhdmUgZGVmYXVsdCBmb250IHRoYXQgZG9lc24ndCBpbmhlcml0LCByZXNldCB0aGlzLlxuICBmb250OiAnaW5oZXJpdCdcbn0sIG93bmVyU3RhdGUudmFyaWFudCAhPT0gJ2luaGVyaXQnICYmIHRoZW1lLnR5cG9ncmFwaHlbb3duZXJTdGF0ZS52YXJpYW50XSwgb3duZXJTdGF0ZS5hbGlnbiAhPT0gJ2luaGVyaXQnICYmIHtcbiAgdGV4dEFsaWduOiBvd25lclN0YXRlLmFsaWduXG59LCBvd25lclN0YXRlLm5vV3JhcCAmJiB7XG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICB3aGl0ZVNwYWNlOiAnbm93cmFwJ1xufSwgb3duZXJTdGF0ZS5ndXR0ZXJCb3R0b20gJiYge1xuICBtYXJnaW5Cb3R0b206ICcwLjM1ZW0nXG59LCBvd25lclN0YXRlLnBhcmFncmFwaCAmJiB7XG4gIG1hcmdpbkJvdHRvbTogMTZcbn0pKTtcbmNvbnN0IGRlZmF1bHRWYXJpYW50TWFwcGluZyA9IHtcbiAgaDE6ICdoMScsXG4gIGgyOiAnaDInLFxuICBoMzogJ2gzJyxcbiAgaDQ6ICdoNCcsXG4gIGg1OiAnaDUnLFxuICBoNjogJ2g2JyxcbiAgc3VidGl0bGUxOiAnaDYnLFxuICBzdWJ0aXRsZTI6ICdoNicsXG4gIGJvZHkxOiAncCcsXG4gIGJvZHkyOiAncCcsXG4gIGluaGVyaXQ6ICdwJ1xufTtcblxuLy8gVE9ETyB2NjogZGVwcmVjYXRlIHRoZXNlIGNvbG9yIHZhbHVlcyBpbiB2NS54IGFuZCByZW1vdmUgdGhlIHRyYW5zZm9ybWF0aW9uIGluIHY2XG5jb25zdCBjb2xvclRyYW5zZm9ybWF0aW9ucyA9IHtcbiAgcHJpbWFyeTogJ3ByaW1hcnkubWFpbicsXG4gIHRleHRQcmltYXJ5OiAndGV4dC5wcmltYXJ5JyxcbiAgc2Vjb25kYXJ5OiAnc2Vjb25kYXJ5Lm1haW4nLFxuICB0ZXh0U2Vjb25kYXJ5OiAndGV4dC5zZWNvbmRhcnknLFxuICBlcnJvcjogJ2Vycm9yLm1haW4nXG59O1xuY29uc3QgdHJhbnNmb3JtRGVwcmVjYXRlZENvbG9ycyA9IGNvbG9yID0+IHtcbiAgcmV0dXJuIGNvbG9yVHJhbnNmb3JtYXRpb25zW2NvbG9yXSB8fCBjb2xvcjtcbn07XG5jb25zdCBUeXBvZ3JhcGh5ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gVHlwb2dyYXBoeShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgdGhlbWVQcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlUeXBvZ3JhcGh5J1xuICB9KTtcbiAgY29uc3QgY29sb3IgPSB0cmFuc2Zvcm1EZXByZWNhdGVkQ29sb3JzKHRoZW1lUHJvcHMuY29sb3IpO1xuICBjb25zdCBwcm9wcyA9IGV4dGVuZFN4UHJvcChfZXh0ZW5kcyh7fSwgdGhlbWVQcm9wcywge1xuICAgIGNvbG9yXG4gIH0pKTtcbiAgY29uc3Qge1xuICAgICAgYWxpZ24gPSAnaW5oZXJpdCcsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQsXG4gICAgICBndXR0ZXJCb3R0b20gPSBmYWxzZSxcbiAgICAgIG5vV3JhcCA9IGZhbHNlLFxuICAgICAgcGFyYWdyYXBoID0gZmFsc2UsXG4gICAgICB2YXJpYW50ID0gJ2JvZHkxJyxcbiAgICAgIHZhcmlhbnRNYXBwaW5nID0gZGVmYXVsdFZhcmlhbnRNYXBwaW5nXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBhbGlnbixcbiAgICBjb2xvcixcbiAgICBjbGFzc05hbWUsXG4gICAgY29tcG9uZW50LFxuICAgIGd1dHRlckJvdHRvbSxcbiAgICBub1dyYXAsXG4gICAgcGFyYWdyYXBoLFxuICAgIHZhcmlhbnQsXG4gICAgdmFyaWFudE1hcHBpbmdcbiAgfSk7XG4gIGNvbnN0IENvbXBvbmVudCA9IGNvbXBvbmVudCB8fCAocGFyYWdyYXBoID8gJ3AnIDogdmFyaWFudE1hcHBpbmdbdmFyaWFudF0gfHwgZGVmYXVsdFZhcmlhbnRNYXBwaW5nW3ZhcmlhbnRdKSB8fCAnc3Bhbic7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFR5cG9ncmFwaHlSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IENvbXBvbmVudCxcbiAgICByZWY6IHJlZixcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSlcbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVHlwb2dyYXBoeS5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRleHQtYWxpZ24gb24gdGhlIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ2luaGVyaXQnXG4gICAqL1xuICBhbGlnbjogUHJvcFR5cGVzLm9uZU9mKFsnY2VudGVyJywgJ2luaGVyaXQnLCAnanVzdGlmeScsICdsZWZ0JywgJ3JpZ2h0J10pLFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRleHQgd2lsbCBoYXZlIGEgYm90dG9tIG1hcmdpbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGd1dHRlckJvdHRvbTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0ZXh0IHdpbGwgbm90IHdyYXAsIGJ1dCBpbnN0ZWFkIHdpbGwgdHJ1bmNhdGUgd2l0aCBhIHRleHQgb3ZlcmZsb3cgZWxsaXBzaXMuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0ZXh0IG92ZXJmbG93IGNhbiBvbmx5IGhhcHBlbiB3aXRoIGJsb2NrIG9yIGlubGluZS1ibG9jayBsZXZlbCBlbGVtZW50c1xuICAgKiAodGhlIGVsZW1lbnQgbmVlZHMgdG8gaGF2ZSBhIHdpZHRoIGluIG9yZGVyIHRvIG92ZXJmbG93KS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG5vV3JhcDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBlbGVtZW50IHdpbGwgYmUgYSBwYXJhZ3JhcGggZWxlbWVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHBhcmFncmFwaDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSB0aGVtZSB0eXBvZ3JhcGh5IHN0eWxlcy5cbiAgICogQGRlZmF1bHQgJ2JvZHkxJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydib2R5MScsICdib2R5MicsICdidXR0b24nLCAnY2FwdGlvbicsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdpbmhlcml0JywgJ292ZXJsaW5lJywgJ3N1YnRpdGxlMScsICdzdWJ0aXRsZTInXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgbWFwcyB0aGUgdmFyaWFudCBwcm9wIHRvIGEgcmFuZ2Ugb2YgZGlmZmVyZW50IEhUTUwgZWxlbWVudCB0eXBlcy5cbiAgICogRm9yIGluc3RhbmNlLCBzdWJ0aXRsZTEgdG8gYDxoNj5gLlxuICAgKiBJZiB5b3Ugd2lzaCB0byBjaGFuZ2UgdGhhdCBtYXBwaW5nLCB5b3UgY2FuIHByb3ZpZGUgeW91ciBvd24uXG4gICAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIHRoZSBgY29tcG9uZW50YCBwcm9wLlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgaDE6ICdoMScsXG4gICAqICAgaDI6ICdoMicsXG4gICAqICAgaDM6ICdoMycsXG4gICAqICAgaDQ6ICdoNCcsXG4gICAqICAgaDU6ICdoNScsXG4gICAqICAgaDY6ICdoNicsXG4gICAqICAgc3VidGl0bGUxOiAnaDYnLFxuICAgKiAgIHN1YnRpdGxlMjogJ2g2JyxcbiAgICogICBib2R5MTogJ3AnLFxuICAgKiAgIGJvZHkyOiAncCcsXG4gICAqICAgaW5oZXJpdDogJ3AnLFxuICAgKiB9XG4gICAqL1xuICB2YXJpYW50TWFwcGluZzogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub2JqZWN0XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgVHlwb2dyYXBoeTsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJ0aGVtZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBUaGVtZVByb3ZpZGVyIGFzIFN5c3RlbVRoZW1lUHJvdmlkZXIgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgVEhFTUVfSUQgZnJvbSAnLi9pZGVudGlmaWVyJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUaGVtZVByb3ZpZGVyKF9yZWYpIHtcbiAgbGV0IHtcbiAgICAgIHRoZW1lOiB0aGVtZUlucHV0XG4gICAgfSA9IF9yZWYsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfcmVmLCBfZXhjbHVkZWQpO1xuICBjb25zdCBzY29wZWRUaGVtZSA9IHRoZW1lSW5wdXRbVEhFTUVfSURdO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goU3lzdGVtVGhlbWVQcm92aWRlciwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgdGhlbWVJZDogc2NvcGVkVGhlbWUgPyBUSEVNRV9JRCA6IHVuZGVmaW5lZCxcbiAgICB0aGVtZTogc2NvcGVkVGhlbWUgfHwgdGhlbWVJbnB1dFxuICB9KSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUaGVtZVByb3ZpZGVyLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFlvdXIgY29tcG9uZW50IHRyZWUuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBBIHRoZW1lIG9iamVjdC4gWW91IGNhbiBwcm92aWRlIGEgZnVuY3Rpb24gdG8gZXh0ZW5kIHRoZSBvdXRlciB0aGVtZS5cbiAgICovXG4gIHRoZW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pLmlzUmVxdWlyZWRcbn0gOiB2b2lkIDA7IiwiY29uc3QgY29tbW9uID0ge1xuICBibGFjazogJyMwMDAnLFxuICB3aGl0ZTogJyNmZmYnXG59O1xuZXhwb3J0IGRlZmF1bHQgY29tbW9uOyIsImNvbnN0IGdyZXkgPSB7XG4gIDUwOiAnI2ZhZmFmYScsXG4gIDEwMDogJyNmNWY1ZjUnLFxuICAyMDA6ICcjZWVlZWVlJyxcbiAgMzAwOiAnI2UwZTBlMCcsXG4gIDQwMDogJyNiZGJkYmQnLFxuICA1MDA6ICcjOWU5ZTllJyxcbiAgNjAwOiAnIzc1NzU3NScsXG4gIDcwMDogJyM2MTYxNjEnLFxuICA4MDA6ICcjNDI0MjQyJyxcbiAgOTAwOiAnIzIxMjEyMScsXG4gIEExMDA6ICcjZjVmNWY1JyxcbiAgQTIwMDogJyNlZWVlZWUnLFxuICBBNDAwOiAnI2JkYmRiZCcsXG4gIEE3MDA6ICcjNjE2MTYxJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGdyZXk7IiwiY29uc3QgcHVycGxlID0ge1xuICA1MDogJyNmM2U1ZjUnLFxuICAxMDA6ICcjZTFiZWU3JyxcbiAgMjAwOiAnI2NlOTNkOCcsXG4gIDMwMDogJyNiYTY4YzgnLFxuICA0MDA6ICcjYWI0N2JjJyxcbiAgNTAwOiAnIzljMjdiMCcsXG4gIDYwMDogJyM4ZTI0YWEnLFxuICA3MDA6ICcjN2IxZmEyJyxcbiAgODAwOiAnIzZhMWI5YScsXG4gIDkwMDogJyM0YTE0OGMnLFxuICBBMTAwOiAnI2VhODBmYycsXG4gIEEyMDA6ICcjZTA0MGZiJyxcbiAgQTQwMDogJyNkNTAwZjknLFxuICBBNzAwOiAnI2FhMDBmZidcbn07XG5leHBvcnQgZGVmYXVsdCBwdXJwbGU7IiwiY29uc3QgcmVkID0ge1xuICA1MDogJyNmZmViZWUnLFxuICAxMDA6ICcjZmZjZGQyJyxcbiAgMjAwOiAnI2VmOWE5YScsXG4gIDMwMDogJyNlNTczNzMnLFxuICA0MDA6ICcjZWY1MzUwJyxcbiAgNTAwOiAnI2Y0NDMzNicsXG4gIDYwMDogJyNlNTM5MzUnLFxuICA3MDA6ICcjZDMyZjJmJyxcbiAgODAwOiAnI2M2MjgyOCcsXG4gIDkwMDogJyNiNzFjMWMnLFxuICBBMTAwOiAnI2ZmOGE4MCcsXG4gIEEyMDA6ICcjZmY1MjUyJyxcbiAgQTQwMDogJyNmZjE3NDQnLFxuICBBNzAwOiAnI2Q1MDAwMCdcbn07XG5leHBvcnQgZGVmYXVsdCByZWQ7IiwiY29uc3Qgb3JhbmdlID0ge1xuICA1MDogJyNmZmYzZTAnLFxuICAxMDA6ICcjZmZlMGIyJyxcbiAgMjAwOiAnI2ZmY2M4MCcsXG4gIDMwMDogJyNmZmI3NGQnLFxuICA0MDA6ICcjZmZhNzI2JyxcbiAgNTAwOiAnI2ZmOTgwMCcsXG4gIDYwMDogJyNmYjhjMDAnLFxuICA3MDA6ICcjZjU3YzAwJyxcbiAgODAwOiAnI2VmNmMwMCcsXG4gIDkwMDogJyNlNjUxMDAnLFxuICBBMTAwOiAnI2ZmZDE4MCcsXG4gIEEyMDA6ICcjZmZhYjQwJyxcbiAgQTQwMDogJyNmZjkxMDAnLFxuICBBNzAwOiAnI2ZmNmQwMCdcbn07XG5leHBvcnQgZGVmYXVsdCBvcmFuZ2U7IiwiY29uc3QgYmx1ZSA9IHtcbiAgNTA6ICcjZTNmMmZkJyxcbiAgMTAwOiAnI2JiZGVmYicsXG4gIDIwMDogJyM5MGNhZjknLFxuICAzMDA6ICcjNjRiNWY2JyxcbiAgNDAwOiAnIzQyYTVmNScsXG4gIDUwMDogJyMyMTk2ZjMnLFxuICA2MDA6ICcjMWU4OGU1JyxcbiAgNzAwOiAnIzE5NzZkMicsXG4gIDgwMDogJyMxNTY1YzAnLFxuICA5MDA6ICcjMGQ0N2ExJyxcbiAgQTEwMDogJyM4MmIxZmYnLFxuICBBMjAwOiAnIzQ0OGFmZicsXG4gIEE0MDA6ICcjMjk3OWZmJyxcbiAgQTcwMDogJyMyOTYyZmYnXG59O1xuZXhwb3J0IGRlZmF1bHQgYmx1ZTsiLCJjb25zdCBsaWdodEJsdWUgPSB7XG4gIDUwOiAnI2UxZjVmZScsXG4gIDEwMDogJyNiM2U1ZmMnLFxuICAyMDA6ICcjODFkNGZhJyxcbiAgMzAwOiAnIzRmYzNmNycsXG4gIDQwMDogJyMyOWI2ZjYnLFxuICA1MDA6ICcjMDNhOWY0JyxcbiAgNjAwOiAnIzAzOWJlNScsXG4gIDcwMDogJyMwMjg4ZDEnLFxuICA4MDA6ICcjMDI3N2JkJyxcbiAgOTAwOiAnIzAxNTc5YicsXG4gIEExMDA6ICcjODBkOGZmJyxcbiAgQTIwMDogJyM0MGM0ZmYnLFxuICBBNDAwOiAnIzAwYjBmZicsXG4gIEE3MDA6ICcjMDA5MWVhJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGxpZ2h0Qmx1ZTsiLCJjb25zdCBncmVlbiA9IHtcbiAgNTA6ICcjZThmNWU5JyxcbiAgMTAwOiAnI2M4ZTZjOScsXG4gIDIwMDogJyNhNWQ2YTcnLFxuICAzMDA6ICcjODFjNzg0JyxcbiAgNDAwOiAnIzY2YmI2YScsXG4gIDUwMDogJyM0Y2FmNTAnLFxuICA2MDA6ICcjNDNhMDQ3JyxcbiAgNzAwOiAnIzM4OGUzYycsXG4gIDgwMDogJyMyZTdkMzInLFxuICA5MDA6ICcjMWI1ZTIwJyxcbiAgQTEwMDogJyNiOWY2Y2EnLFxuICBBMjAwOiAnIzY5ZjBhZScsXG4gIEE0MDA6ICcjMDBlNjc2JyxcbiAgQTcwMDogJyMwMGM4NTMnXG59O1xuZXhwb3J0IGRlZmF1bHQgZ3JlZW47IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlIGZyb20gXCJAbXVpL3V0aWxzL2Zvcm1hdE11aUVycm9yTWVzc2FnZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wibW9kZVwiLCBcImNvbnRyYXN0VGhyZXNob2xkXCIsIFwidG9uYWxPZmZzZXRcIl07XG5pbXBvcnQgeyBkZWVwbWVyZ2UgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IGRhcmtlbiwgZ2V0Q29udHJhc3RSYXRpbywgbGlnaHRlbiB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBjb21tb24gZnJvbSAnLi4vY29sb3JzL2NvbW1vbic7XG5pbXBvcnQgZ3JleSBmcm9tICcuLi9jb2xvcnMvZ3JleSc7XG5pbXBvcnQgcHVycGxlIGZyb20gJy4uL2NvbG9ycy9wdXJwbGUnO1xuaW1wb3J0IHJlZCBmcm9tICcuLi9jb2xvcnMvcmVkJztcbmltcG9ydCBvcmFuZ2UgZnJvbSAnLi4vY29sb3JzL29yYW5nZSc7XG5pbXBvcnQgYmx1ZSBmcm9tICcuLi9jb2xvcnMvYmx1ZSc7XG5pbXBvcnQgbGlnaHRCbHVlIGZyb20gJy4uL2NvbG9ycy9saWdodEJsdWUnO1xuaW1wb3J0IGdyZWVuIGZyb20gJy4uL2NvbG9ycy9ncmVlbic7XG5leHBvcnQgY29uc3QgbGlnaHQgPSB7XG4gIC8vIFRoZSBjb2xvcnMgdXNlZCB0byBzdHlsZSB0aGUgdGV4dC5cbiAgdGV4dDoge1xuICAgIC8vIFRoZSBtb3N0IGltcG9ydGFudCB0ZXh0LlxuICAgIHByaW1hcnk6ICdyZ2JhKDAsIDAsIDAsIDAuODcpJyxcbiAgICAvLyBTZWNvbmRhcnkgdGV4dC5cbiAgICBzZWNvbmRhcnk6ICdyZ2JhKDAsIDAsIDAsIDAuNiknLFxuICAgIC8vIERpc2FibGVkIHRleHQgaGF2ZSBldmVuIGxvd2VyIHZpc3VhbCBwcm9taW5lbmNlLlxuICAgIGRpc2FibGVkOiAncmdiYSgwLCAwLCAwLCAwLjM4KSdcbiAgfSxcbiAgLy8gVGhlIGNvbG9yIHVzZWQgdG8gZGl2aWRlIGRpZmZlcmVudCBlbGVtZW50cy5cbiAgZGl2aWRlcjogJ3JnYmEoMCwgMCwgMCwgMC4xMiknLFxuICAvLyBUaGUgYmFja2dyb3VuZCBjb2xvcnMgdXNlZCB0byBzdHlsZSB0aGUgc3VyZmFjZXMuXG4gIC8vIENvbnNpc3RlbmN5IGJldHdlZW4gdGhlc2UgdmFsdWVzIGlzIGltcG9ydGFudC5cbiAgYmFja2dyb3VuZDoge1xuICAgIHBhcGVyOiBjb21tb24ud2hpdGUsXG4gICAgZGVmYXVsdDogY29tbW9uLndoaXRlXG4gIH0sXG4gIC8vIFRoZSBjb2xvcnMgdXNlZCB0byBzdHlsZSB0aGUgYWN0aW9uIGVsZW1lbnRzLlxuICBhY3Rpb246IHtcbiAgICAvLyBUaGUgY29sb3Igb2YgYW4gYWN0aXZlIGFjdGlvbiBsaWtlIGFuIGljb24gYnV0dG9uLlxuICAgIGFjdGl2ZTogJ3JnYmEoMCwgMCwgMCwgMC41NCknLFxuICAgIC8vIFRoZSBjb2xvciBvZiBhbiBob3ZlcmVkIGFjdGlvbi5cbiAgICBob3ZlcjogJ3JnYmEoMCwgMCwgMCwgMC4wNCknLFxuICAgIGhvdmVyT3BhY2l0eTogMC4wNCxcbiAgICAvLyBUaGUgY29sb3Igb2YgYSBzZWxlY3RlZCBhY3Rpb24uXG4gICAgc2VsZWN0ZWQ6ICdyZ2JhKDAsIDAsIDAsIDAuMDgpJyxcbiAgICBzZWxlY3RlZE9wYWNpdHk6IDAuMDgsXG4gICAgLy8gVGhlIGNvbG9yIG9mIGEgZGlzYWJsZWQgYWN0aW9uLlxuICAgIGRpc2FibGVkOiAncmdiYSgwLCAwLCAwLCAwLjI2KScsXG4gICAgLy8gVGhlIGJhY2tncm91bmQgY29sb3Igb2YgYSBkaXNhYmxlZCBhY3Rpb24uXG4gICAgZGlzYWJsZWRCYWNrZ3JvdW5kOiAncmdiYSgwLCAwLCAwLCAwLjEyKScsXG4gICAgZGlzYWJsZWRPcGFjaXR5OiAwLjM4LFxuICAgIGZvY3VzOiAncmdiYSgwLCAwLCAwLCAwLjEyKScsXG4gICAgZm9jdXNPcGFjaXR5OiAwLjEyLFxuICAgIGFjdGl2YXRlZE9wYWNpdHk6IDAuMTJcbiAgfVxufTtcbmV4cG9ydCBjb25zdCBkYXJrID0ge1xuICB0ZXh0OiB7XG4gICAgcHJpbWFyeTogY29tbW9uLndoaXRlLFxuICAgIHNlY29uZGFyeTogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC43KScsXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSknLFxuICAgIGljb246ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSknXG4gIH0sXG4gIGRpdmlkZXI6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpJyxcbiAgYmFja2dyb3VuZDoge1xuICAgIHBhcGVyOiAnIzEyMTIxMicsXG4gICAgZGVmYXVsdDogJyMxMjEyMTInXG4gIH0sXG4gIGFjdGlvbjoge1xuICAgIGFjdGl2ZTogY29tbW9uLndoaXRlLFxuICAgIGhvdmVyOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KScsXG4gICAgaG92ZXJPcGFjaXR5OiAwLjA4LFxuICAgIHNlbGVjdGVkOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KScsXG4gICAgc2VsZWN0ZWRPcGFjaXR5OiAwLjE2LFxuICAgIGRpc2FibGVkOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpJyxcbiAgICBkaXNhYmxlZEJhY2tncm91bmQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpJyxcbiAgICBkaXNhYmxlZE9wYWNpdHk6IDAuMzgsXG4gICAgZm9jdXM6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpJyxcbiAgICBmb2N1c09wYWNpdHk6IDAuMTIsXG4gICAgYWN0aXZhdGVkT3BhY2l0eTogMC4yNFxuICB9XG59O1xuZnVuY3Rpb24gYWRkTGlnaHRPckRhcmsoaW50ZW50LCBkaXJlY3Rpb24sIHNoYWRlLCB0b25hbE9mZnNldCkge1xuICBjb25zdCB0b25hbE9mZnNldExpZ2h0ID0gdG9uYWxPZmZzZXQubGlnaHQgfHwgdG9uYWxPZmZzZXQ7XG4gIGNvbnN0IHRvbmFsT2Zmc2V0RGFyayA9IHRvbmFsT2Zmc2V0LmRhcmsgfHwgdG9uYWxPZmZzZXQgKiAxLjU7XG4gIGlmICghaW50ZW50W2RpcmVjdGlvbl0pIHtcbiAgICBpZiAoaW50ZW50Lmhhc093blByb3BlcnR5KHNoYWRlKSkge1xuICAgICAgaW50ZW50W2RpcmVjdGlvbl0gPSBpbnRlbnRbc2hhZGVdO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnbGlnaHQnKSB7XG4gICAgICBpbnRlbnQubGlnaHQgPSBsaWdodGVuKGludGVudC5tYWluLCB0b25hbE9mZnNldExpZ2h0KTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2RhcmsnKSB7XG4gICAgICBpbnRlbnQuZGFyayA9IGRhcmtlbihpbnRlbnQubWFpbiwgdG9uYWxPZmZzZXREYXJrKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRQcmltYXJ5KG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogYmx1ZVsyMDBdLFxuICAgICAgbGlnaHQ6IGJsdWVbNTBdLFxuICAgICAgZGFyazogYmx1ZVs0MDBdXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1haW46IGJsdWVbNzAwXSxcbiAgICBsaWdodDogYmx1ZVs0MDBdLFxuICAgIGRhcms6IGJsdWVbODAwXVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFNlY29uZGFyeShtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IHB1cnBsZVsyMDBdLFxuICAgICAgbGlnaHQ6IHB1cnBsZVs1MF0sXG4gICAgICBkYXJrOiBwdXJwbGVbNDAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBwdXJwbGVbNTAwXSxcbiAgICBsaWdodDogcHVycGxlWzMwMF0sXG4gICAgZGFyazogcHVycGxlWzcwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRFcnJvcihtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IHJlZFs1MDBdLFxuICAgICAgbGlnaHQ6IHJlZFszMDBdLFxuICAgICAgZGFyazogcmVkWzcwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogcmVkWzcwMF0sXG4gICAgbGlnaHQ6IHJlZFs0MDBdLFxuICAgIGRhcms6IHJlZFs4MDBdXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0SW5mbyhtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IGxpZ2h0Qmx1ZVs0MDBdLFxuICAgICAgbGlnaHQ6IGxpZ2h0Qmx1ZVszMDBdLFxuICAgICAgZGFyazogbGlnaHRCbHVlWzcwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogbGlnaHRCbHVlWzcwMF0sXG4gICAgbGlnaHQ6IGxpZ2h0Qmx1ZVs1MDBdLFxuICAgIGRhcms6IGxpZ2h0Qmx1ZVs5MDBdXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0U3VjY2Vzcyhtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IGdyZWVuWzQwMF0sXG4gICAgICBsaWdodDogZ3JlZW5bMzAwXSxcbiAgICAgIGRhcms6IGdyZWVuWzcwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogZ3JlZW5bODAwXSxcbiAgICBsaWdodDogZ3JlZW5bNTAwXSxcbiAgICBkYXJrOiBncmVlbls5MDBdXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0V2FybmluZyhtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IG9yYW5nZVs0MDBdLFxuICAgICAgbGlnaHQ6IG9yYW5nZVszMDBdLFxuICAgICAgZGFyazogb3JhbmdlWzcwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogJyNlZDZjMDInLFxuICAgIC8vIGNsb3Nlc3QgdG8gb3JhbmdlWzgwMF0gdGhhdCBwYXNzIDM6MS5cbiAgICBsaWdodDogb3JhbmdlWzUwMF0sXG4gICAgZGFyazogb3JhbmdlWzkwMF1cbiAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVBhbGV0dGUocGFsZXR0ZSkge1xuICBjb25zdCB7XG4gICAgICBtb2RlID0gJ2xpZ2h0JyxcbiAgICAgIGNvbnRyYXN0VGhyZXNob2xkID0gMyxcbiAgICAgIHRvbmFsT2Zmc2V0ID0gMC4yXG4gICAgfSA9IHBhbGV0dGUsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwYWxldHRlLCBfZXhjbHVkZWQpO1xuICBjb25zdCBwcmltYXJ5ID0gcGFsZXR0ZS5wcmltYXJ5IHx8IGdldERlZmF1bHRQcmltYXJ5KG1vZGUpO1xuICBjb25zdCBzZWNvbmRhcnkgPSBwYWxldHRlLnNlY29uZGFyeSB8fCBnZXREZWZhdWx0U2Vjb25kYXJ5KG1vZGUpO1xuICBjb25zdCBlcnJvciA9IHBhbGV0dGUuZXJyb3IgfHwgZ2V0RGVmYXVsdEVycm9yKG1vZGUpO1xuICBjb25zdCBpbmZvID0gcGFsZXR0ZS5pbmZvIHx8IGdldERlZmF1bHRJbmZvKG1vZGUpO1xuICBjb25zdCBzdWNjZXNzID0gcGFsZXR0ZS5zdWNjZXNzIHx8IGdldERlZmF1bHRTdWNjZXNzKG1vZGUpO1xuICBjb25zdCB3YXJuaW5nID0gcGFsZXR0ZS53YXJuaW5nIHx8IGdldERlZmF1bHRXYXJuaW5nKG1vZGUpO1xuXG4gIC8vIFVzZSB0aGUgc2FtZSBsb2dpYyBhc1xuICAvLyBCb290c3RyYXA6IGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iLzFkNmUzNzEwZGQ0NDdkZTFhMjAwZjI5ZThmYTUyMWY4YTA5MDhmNzAvc2Nzcy9fZnVuY3Rpb25zLnNjc3MjTDU5XG4gIC8vIGFuZCBtYXRlcmlhbC1jb21wb25lbnRzLXdlYiBodHRwczovL2dpdGh1Yi5jb20vbWF0ZXJpYWwtY29tcG9uZW50cy9tYXRlcmlhbC1jb21wb25lbnRzLXdlYi9ibG9iL2FjNDZiODg2M2M0ZGFiOWZjMjJjNGM2NjJkYzZiZDFiNjVkZDY1MmYvcGFja2FnZXMvbWRjLXRoZW1lL19mdW5jdGlvbnMuc2NzcyNMNTRcbiAgZnVuY3Rpb24gZ2V0Q29udHJhc3RUZXh0KGJhY2tncm91bmQpIHtcbiAgICBjb25zdCBjb250cmFzdFRleHQgPSBnZXRDb250cmFzdFJhdGlvKGJhY2tncm91bmQsIGRhcmsudGV4dC5wcmltYXJ5KSA+PSBjb250cmFzdFRocmVzaG9sZCA/IGRhcmsudGV4dC5wcmltYXJ5IDogbGlnaHQudGV4dC5wcmltYXJ5O1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zdCBjb250cmFzdCA9IGdldENvbnRyYXN0UmF0aW8oYmFja2dyb3VuZCwgY29udHJhc3RUZXh0KTtcbiAgICAgIGlmIChjb250cmFzdCA8IDMpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIGNvbnRyYXN0IHJhdGlvIG9mICR7Y29udHJhc3R9OjEgZm9yICR7Y29udHJhc3RUZXh0fSBvbiAke2JhY2tncm91bmR9YCwgJ2ZhbGxzIGJlbG93IHRoZSBXQ0FHIHJlY29tbWVuZGVkIGFic29sdXRlIG1pbmltdW0gY29udHJhc3QgcmF0aW8gb2YgMzoxLicsICdodHRwczovL3d3dy53My5vcmcvVFIvMjAwOC9SRUMtV0NBRzIwLTIwMDgxMjExLyN2aXN1YWwtYXVkaW8tY29udHJhc3QtY29udHJhc3QnXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb250cmFzdFRleHQ7XG4gIH1cbiAgY29uc3QgYXVnbWVudENvbG9yID0gKHtcbiAgICBjb2xvcixcbiAgICBuYW1lLFxuICAgIG1haW5TaGFkZSA9IDUwMCxcbiAgICBsaWdodFNoYWRlID0gMzAwLFxuICAgIGRhcmtTaGFkZSA9IDcwMFxuICB9KSA9PiB7XG4gICAgY29sb3IgPSBfZXh0ZW5kcyh7fSwgY29sb3IpO1xuICAgIGlmICghY29sb3IubWFpbiAmJiBjb2xvclttYWluU2hhZGVdKSB7XG4gICAgICBjb2xvci5tYWluID0gY29sb3JbbWFpblNoYWRlXTtcbiAgICB9XG4gICAgaWYgKCFjb2xvci5oYXNPd25Qcm9wZXJ0eSgnbWFpbicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogVGhlIGNvbG9yJHtuYW1lID8gYCAoJHtuYW1lfSlgIDogJyd9IHByb3ZpZGVkIHRvIGF1Z21lbnRDb2xvcihjb2xvcikgaXMgaW52YWxpZC5cblRoZSBjb2xvciBvYmplY3QgbmVlZHMgdG8gaGF2ZSBhIFxcYG1haW5cXGAgcHJvcGVydHkgb3IgYSBcXGAke21haW5TaGFkZX1cXGAgcHJvcGVydHkuYCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMTEsIG5hbWUgPyBgICgke25hbWV9KWAgOiAnJywgbWFpblNoYWRlKSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29sb3IubWFpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBUaGUgY29sb3Ike25hbWUgPyBgICgke25hbWV9KWAgOiAnJ30gcHJvdmlkZWQgdG8gYXVnbWVudENvbG9yKGNvbG9yKSBpcyBpbnZhbGlkLlxuXFxgY29sb3IubWFpblxcYCBzaG91bGQgYmUgYSBzdHJpbmcsIGJ1dCBcXGAke0pTT04uc3RyaW5naWZ5KGNvbG9yLm1haW4pfVxcYCB3YXMgcHJvdmlkZWQgaW5zdGVhZC5cblxuRGlkIHlvdSBpbnRlbmQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGFwcHJvYWNoZXM/XG5cbmltcG9ydCB7IGdyZWVuIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWwvY29sb3JzXCI7XG5cbmNvbnN0IHRoZW1lMSA9IGNyZWF0ZVRoZW1lKHsgcGFsZXR0ZToge1xuICBwcmltYXJ5OiBncmVlbixcbn0gfSk7XG5cbmNvbnN0IHRoZW1lMiA9IGNyZWF0ZVRoZW1lKHsgcGFsZXR0ZToge1xuICBwcmltYXJ5OiB7IG1haW46IGdyZWVuWzUwMF0gfSxcbn0gfSk7YCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMTIsIG5hbWUgPyBgICgke25hbWV9KWAgOiAnJywgSlNPTi5zdHJpbmdpZnkoY29sb3IubWFpbikpKTtcbiAgICB9XG4gICAgYWRkTGlnaHRPckRhcmsoY29sb3IsICdsaWdodCcsIGxpZ2h0U2hhZGUsIHRvbmFsT2Zmc2V0KTtcbiAgICBhZGRMaWdodE9yRGFyayhjb2xvciwgJ2RhcmsnLCBkYXJrU2hhZGUsIHRvbmFsT2Zmc2V0KTtcbiAgICBpZiAoIWNvbG9yLmNvbnRyYXN0VGV4dCkge1xuICAgICAgY29sb3IuY29udHJhc3RUZXh0ID0gZ2V0Q29udHJhc3RUZXh0KGNvbG9yLm1haW4pO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3I7XG4gIH07XG4gIGNvbnN0IG1vZGVzID0ge1xuICAgIGRhcmssXG4gICAgbGlnaHRcbiAgfTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoIW1vZGVzW21vZGVdKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFRoZSBwYWxldHRlIG1vZGUgXFxgJHttb2RlfVxcYCBpcyBub3Qgc3VwcG9ydGVkLmApO1xuICAgIH1cbiAgfVxuICBjb25zdCBwYWxldHRlT3V0cHV0ID0gZGVlcG1lcmdlKF9leHRlbmRzKHtcbiAgICAvLyBBIGNvbGxlY3Rpb24gb2YgY29tbW9uIGNvbG9ycy5cbiAgICBjb21tb246IF9leHRlbmRzKHt9LCBjb21tb24pLFxuICAgIC8vIHByZXZlbnQgbXV0YWJsZSBvYmplY3QuXG4gICAgLy8gVGhlIHBhbGV0dGUgbW9kZSwgY2FuIGJlIGxpZ2h0IG9yIGRhcmsuXG4gICAgbW9kZSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IHByaW1hcnkgaW50ZXJmYWNlIGVsZW1lbnRzIGZvciBhIHVzZXIuXG4gICAgcHJpbWFyeTogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBwcmltYXJ5LFxuICAgICAgbmFtZTogJ3ByaW1hcnknXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHJlcHJlc2VudCBzZWNvbmRhcnkgaW50ZXJmYWNlIGVsZW1lbnRzIGZvciBhIHVzZXIuXG4gICAgc2Vjb25kYXJ5OiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHNlY29uZGFyeSxcbiAgICAgIG5hbWU6ICdzZWNvbmRhcnknLFxuICAgICAgbWFpblNoYWRlOiAnQTQwMCcsXG4gICAgICBsaWdodFNoYWRlOiAnQTIwMCcsXG4gICAgICBkYXJrU2hhZGU6ICdBNzAwJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byByZXByZXNlbnQgaW50ZXJmYWNlIGVsZW1lbnRzIHRoYXQgdGhlIHVzZXIgc2hvdWxkIGJlIG1hZGUgYXdhcmUgb2YuXG4gICAgZXJyb3I6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogZXJyb3IsXG4gICAgICBuYW1lOiAnZXJyb3InXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHJlcHJlc2VudCBwb3RlbnRpYWxseSBkYW5nZXJvdXMgYWN0aW9ucyBvciBpbXBvcnRhbnQgbWVzc2FnZXMuXG4gICAgd2FybmluZzogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiB3YXJuaW5nLFxuICAgICAgbmFtZTogJ3dhcm5pbmcnXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHByZXNlbnQgaW5mb3JtYXRpb24gdG8gdGhlIHVzZXIgdGhhdCBpcyBuZXV0cmFsIGFuZCBub3QgbmVjZXNzYXJpbHkgaW1wb3J0YW50LlxuICAgIGluZm86IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogaW5mbyxcbiAgICAgIG5hbWU6ICdpbmZvJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIGFuIGFjdGlvbiB0aGF0IHVzZXIgdHJpZ2dlcmVkLlxuICAgIHN1Y2Nlc3M6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogc3VjY2VzcyxcbiAgICAgIG5hbWU6ICdzdWNjZXNzJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBncmV5IGNvbG9ycy5cbiAgICBncmV5LFxuICAgIC8vIFVzZWQgYnkgYGdldENvbnRyYXN0VGV4dCgpYCB0byBtYXhpbWl6ZSB0aGUgY29udHJhc3QgYmV0d2VlblxuICAgIC8vIHRoZSBiYWNrZ3JvdW5kIGFuZCB0aGUgdGV4dC5cbiAgICBjb250cmFzdFRocmVzaG9sZCxcbiAgICAvLyBUYWtlcyBhIGJhY2tncm91bmQgY29sb3IgYW5kIHJldHVybnMgdGhlIHRleHQgY29sb3IgdGhhdCBtYXhpbWl6ZXMgdGhlIGNvbnRyYXN0LlxuICAgIGdldENvbnRyYXN0VGV4dCxcbiAgICAvLyBHZW5lcmF0ZSBhIHJpY2ggY29sb3Igb2JqZWN0LlxuICAgIGF1Z21lbnRDb2xvcixcbiAgICAvLyBVc2VkIGJ5IHRoZSBmdW5jdGlvbnMgYmVsb3cgdG8gc2hpZnQgYSBjb2xvcidzIGx1bWluYW5jZSBieSBhcHByb3hpbWF0ZWx5XG4gICAgLy8gdHdvIGluZGV4ZXMgd2l0aGluIGl0cyB0b25hbCBwYWxldHRlLlxuICAgIC8vIEUuZy4sIHNoaWZ0IGZyb20gUmVkIDUwMCB0byBSZWQgMzAwIG9yIFJlZCA3MDAuXG4gICAgdG9uYWxPZmZzZXRcbiAgfSwgbW9kZXNbbW9kZV0pLCBvdGhlcik7XG4gIHJldHVybiBwYWxldHRlT3V0cHV0O1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJmb250RmFtaWx5XCIsIFwiZm9udFNpemVcIiwgXCJmb250V2VpZ2h0TGlnaHRcIiwgXCJmb250V2VpZ2h0UmVndWxhclwiLCBcImZvbnRXZWlnaHRNZWRpdW1cIiwgXCJmb250V2VpZ2h0Qm9sZFwiLCBcImh0bWxGb250U2l6ZVwiLCBcImFsbFZhcmlhbnRzXCIsIFwicHhUb1JlbVwiXTtcbmltcG9ydCB7IGRlZXBtZXJnZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZnVuY3Rpb24gcm91bmQodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiAxZTUpIC8gMWU1O1xufVxuY29uc3QgY2FzZUFsbENhcHMgPSB7XG4gIHRleHRUcmFuc2Zvcm06ICd1cHBlcmNhc2UnXG59O1xuY29uc3QgZGVmYXVsdEZvbnRGYW1pbHkgPSAnXCJSb2JvdG9cIiwgXCJIZWx2ZXRpY2FcIiwgXCJBcmlhbFwiLCBzYW5zLXNlcmlmJztcblxuLyoqXG4gKiBAc2VlIEBsaW5re2h0dHBzOi8vbTIubWF0ZXJpYWwuaW8vZGVzaWduL3R5cG9ncmFwaHkvdGhlLXR5cGUtc3lzdGVtLmh0bWx9XG4gKiBAc2VlIEBsaW5re2h0dHBzOi8vbTIubWF0ZXJpYWwuaW8vZGVzaWduL3R5cG9ncmFwaHkvdW5kZXJzdGFuZGluZy10eXBvZ3JhcGh5Lmh0bWx9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVR5cG9ncmFwaHkocGFsZXR0ZSwgdHlwb2dyYXBoeSkge1xuICBjb25zdCBfcmVmID0gdHlwZW9mIHR5cG9ncmFwaHkgPT09ICdmdW5jdGlvbicgPyB0eXBvZ3JhcGh5KHBhbGV0dGUpIDogdHlwb2dyYXBoeSxcbiAgICB7XG4gICAgICBmb250RmFtaWx5ID0gZGVmYXVsdEZvbnRGYW1pbHksXG4gICAgICAvLyBUaGUgZGVmYXVsdCBmb250IHNpemUgb2YgdGhlIE1hdGVyaWFsIFNwZWNpZmljYXRpb24uXG4gICAgICBmb250U2l6ZSA9IDE0LFxuICAgICAgLy8gcHhcbiAgICAgIGZvbnRXZWlnaHRMaWdodCA9IDMwMCxcbiAgICAgIGZvbnRXZWlnaHRSZWd1bGFyID0gNDAwLFxuICAgICAgZm9udFdlaWdodE1lZGl1bSA9IDUwMCxcbiAgICAgIGZvbnRXZWlnaHRCb2xkID0gNzAwLFxuICAgICAgLy8gVGVsbCBNVUkgd2hhdCdzIHRoZSBmb250LXNpemUgb24gdGhlIGh0bWwgZWxlbWVudC5cbiAgICAgIC8vIDE2cHggaXMgdGhlIGRlZmF1bHQgZm9udC1zaXplIHVzZWQgYnkgYnJvd3NlcnMuXG4gICAgICBodG1sRm9udFNpemUgPSAxNixcbiAgICAgIC8vIEFwcGx5IHRoZSBDU1MgcHJvcGVydGllcyB0byBhbGwgdGhlIHZhcmlhbnRzLlxuICAgICAgYWxsVmFyaWFudHMsXG4gICAgICBweFRvUmVtOiBweFRvUmVtMlxuICAgIH0gPSBfcmVmLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodHlwZW9mIGZvbnRTaXplICE9PSAnbnVtYmVyJykge1xuICAgICAgY29uc29sZS5lcnJvcignTVVJOiBgZm9udFNpemVgIGlzIHJlcXVpcmVkIHRvIGJlIGEgbnVtYmVyLicpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGh0bWxGb250U2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogYGh0bWxGb250U2l6ZWAgaXMgcmVxdWlyZWQgdG8gYmUgYSBudW1iZXIuJyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGNvZWYgPSBmb250U2l6ZSAvIDE0O1xuICBjb25zdCBweFRvUmVtID0gcHhUb1JlbTIgfHwgKHNpemUgPT4gYCR7c2l6ZSAvIGh0bWxGb250U2l6ZSAqIGNvZWZ9cmVtYCk7XG4gIGNvbnN0IGJ1aWxkVmFyaWFudCA9IChmb250V2VpZ2h0LCBzaXplLCBsaW5lSGVpZ2h0LCBsZXR0ZXJTcGFjaW5nLCBjYXNpbmcpID0+IF9leHRlbmRzKHtcbiAgICBmb250RmFtaWx5LFxuICAgIGZvbnRXZWlnaHQsXG4gICAgZm9udFNpemU6IHB4VG9SZW0oc2l6ZSksXG4gICAgLy8gVW5pdGxlc3MgZm9sbG93aW5nIGh0dHBzOi8vbWV5ZXJ3ZWIuY29tL2VyaWMvdGhvdWdodHMvMjAwNi8wMi8wOC91bml0bGVzcy1saW5lLWhlaWdodHMvXG4gICAgbGluZUhlaWdodFxuICB9LCBmb250RmFtaWx5ID09PSBkZWZhdWx0Rm9udEZhbWlseSA/IHtcbiAgICBsZXR0ZXJTcGFjaW5nOiBgJHtyb3VuZChsZXR0ZXJTcGFjaW5nIC8gc2l6ZSl9ZW1gXG4gIH0gOiB7fSwgY2FzaW5nLCBhbGxWYXJpYW50cyk7XG4gIGNvbnN0IHZhcmlhbnRzID0ge1xuICAgIGgxOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodExpZ2h0LCA5NiwgMS4xNjcsIC0xLjUpLFxuICAgIGgyOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodExpZ2h0LCA2MCwgMS4yLCAtMC41KSxcbiAgICBoMzogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCA0OCwgMS4xNjcsIDApLFxuICAgIGg0OiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDM0LCAxLjIzNSwgMC4yNSksXG4gICAgaDU6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMjQsIDEuMzM0LCAwKSxcbiAgICBoNjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRNZWRpdW0sIDIwLCAxLjYsIDAuMTUpLFxuICAgIHN1YnRpdGxlMTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxNiwgMS43NSwgMC4xNSksXG4gICAgc3VidGl0bGUyOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodE1lZGl1bSwgMTQsIDEuNTcsIDAuMSksXG4gICAgYm9keTE6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTYsIDEuNSwgMC4xNSksXG4gICAgYm9keTI6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTQsIDEuNDMsIDAuMTUpLFxuICAgIGJ1dHRvbjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRNZWRpdW0sIDE0LCAxLjc1LCAwLjQsIGNhc2VBbGxDYXBzKSxcbiAgICBjYXB0aW9uOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDEyLCAxLjY2LCAwLjQpLFxuICAgIG92ZXJsaW5lOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDEyLCAyLjY2LCAxLCBjYXNlQWxsQ2FwcyksXG4gICAgLy8gVE9ETyB2NjogUmVtb3ZlIGhhbmRsaW5nIG9mICdpbmhlcml0JyB2YXJpYW50IGZyb20gdGhlIHRoZW1lIGFzIGl0IGlzIGFscmVhZHkgaGFuZGxlZCBpbiBNYXRlcmlhbCBVSSdzIFR5cG9ncmFwaHkgY29tcG9uZW50LiBBbHNvLCByZW1lbWJlciB0byByZW1vdmUgdGhlIGFzc29jaWF0ZWQgdHlwZXMuXG4gICAgaW5oZXJpdDoge1xuICAgICAgZm9udEZhbWlseTogJ2luaGVyaXQnLFxuICAgICAgZm9udFdlaWdodDogJ2luaGVyaXQnLFxuICAgICAgZm9udFNpemU6ICdpbmhlcml0JyxcbiAgICAgIGxpbmVIZWlnaHQ6ICdpbmhlcml0JyxcbiAgICAgIGxldHRlclNwYWNpbmc6ICdpbmhlcml0J1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGRlZXBtZXJnZShfZXh0ZW5kcyh7XG4gICAgaHRtbEZvbnRTaXplLFxuICAgIHB4VG9SZW0sXG4gICAgZm9udEZhbWlseSxcbiAgICBmb250U2l6ZSxcbiAgICBmb250V2VpZ2h0TGlnaHQsXG4gICAgZm9udFdlaWdodFJlZ3VsYXIsXG4gICAgZm9udFdlaWdodE1lZGl1bSxcbiAgICBmb250V2VpZ2h0Qm9sZFxuICB9LCB2YXJpYW50cyksIG90aGVyLCB7XG4gICAgY2xvbmU6IGZhbHNlIC8vIE5vIG5lZWQgdG8gY2xvbmUgZGVlcFxuICB9KTtcbn0iLCJjb25zdCBzaGFkb3dLZXlVbWJyYU9wYWNpdHkgPSAwLjI7XG5jb25zdCBzaGFkb3dLZXlQZW51bWJyYU9wYWNpdHkgPSAwLjE0O1xuY29uc3Qgc2hhZG93QW1iaWVudFNoYWRvd09wYWNpdHkgPSAwLjEyO1xuZnVuY3Rpb24gY3JlYXRlU2hhZG93KC4uLnB4KSB7XG4gIHJldHVybiBbYCR7cHhbMF19cHggJHtweFsxXX1weCAke3B4WzJdfXB4ICR7cHhbM119cHggcmdiYSgwLDAsMCwke3NoYWRvd0tleVVtYnJhT3BhY2l0eX0pYCwgYCR7cHhbNF19cHggJHtweFs1XX1weCAke3B4WzZdfXB4ICR7cHhbN119cHggcmdiYSgwLDAsMCwke3NoYWRvd0tleVBlbnVtYnJhT3BhY2l0eX0pYCwgYCR7cHhbOF19cHggJHtweFs5XX1weCAke3B4WzEwXX1weCAke3B4WzExXX1weCByZ2JhKDAsMCwwLCR7c2hhZG93QW1iaWVudFNoYWRvd09wYWNpdHl9KWBdLmpvaW4oJywnKTtcbn1cblxuLy8gVmFsdWVzIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hdGVyaWFsLWNvbXBvbmVudHMvbWF0ZXJpYWwtY29tcG9uZW50cy13ZWIvYmxvYi9iZTg3NDdmOTQ1NzQ2NjljYjVlN2FkZDFhN2M1NGZhNDFhODljZWM3L3BhY2thZ2VzL21kYy1lbGV2YXRpb24vX3ZhcmlhYmxlcy5zY3NzXG5jb25zdCBzaGFkb3dzID0gWydub25lJywgY3JlYXRlU2hhZG93KDAsIDIsIDEsIC0xLCAwLCAxLCAxLCAwLCAwLCAxLCAzLCAwKSwgY3JlYXRlU2hhZG93KDAsIDMsIDEsIC0yLCAwLCAyLCAyLCAwLCAwLCAxLCA1LCAwKSwgY3JlYXRlU2hhZG93KDAsIDMsIDMsIC0yLCAwLCAzLCA0LCAwLCAwLCAxLCA4LCAwKSwgY3JlYXRlU2hhZG93KDAsIDIsIDQsIC0xLCAwLCA0LCA1LCAwLCAwLCAxLCAxMCwgMCksIGNyZWF0ZVNoYWRvdygwLCAzLCA1LCAtMSwgMCwgNSwgOCwgMCwgMCwgMSwgMTQsIDApLCBjcmVhdGVTaGFkb3coMCwgMywgNSwgLTEsIDAsIDYsIDEwLCAwLCAwLCAxLCAxOCwgMCksIGNyZWF0ZVNoYWRvdygwLCA0LCA1LCAtMiwgMCwgNywgMTAsIDEsIDAsIDIsIDE2LCAxKSwgY3JlYXRlU2hhZG93KDAsIDUsIDUsIC0zLCAwLCA4LCAxMCwgMSwgMCwgMywgMTQsIDIpLCBjcmVhdGVTaGFkb3coMCwgNSwgNiwgLTMsIDAsIDksIDEyLCAxLCAwLCAzLCAxNiwgMiksIGNyZWF0ZVNoYWRvdygwLCA2LCA2LCAtMywgMCwgMTAsIDE0LCAxLCAwLCA0LCAxOCwgMyksIGNyZWF0ZVNoYWRvdygwLCA2LCA3LCAtNCwgMCwgMTEsIDE1LCAxLCAwLCA0LCAyMCwgMyksIGNyZWF0ZVNoYWRvdygwLCA3LCA4LCAtNCwgMCwgMTIsIDE3LCAyLCAwLCA1LCAyMiwgNCksIGNyZWF0ZVNoYWRvdygwLCA3LCA4LCAtNCwgMCwgMTMsIDE5LCAyLCAwLCA1LCAyNCwgNCksIGNyZWF0ZVNoYWRvdygwLCA3LCA5LCAtNCwgMCwgMTQsIDIxLCAyLCAwLCA1LCAyNiwgNCksIGNyZWF0ZVNoYWRvdygwLCA4LCA5LCAtNSwgMCwgMTUsIDIyLCAyLCAwLCA2LCAyOCwgNSksIGNyZWF0ZVNoYWRvdygwLCA4LCAxMCwgLTUsIDAsIDE2LCAyNCwgMiwgMCwgNiwgMzAsIDUpLCBjcmVhdGVTaGFkb3coMCwgOCwgMTEsIC01LCAwLCAxNywgMjYsIDIsIDAsIDYsIDMyLCA1KSwgY3JlYXRlU2hhZG93KDAsIDksIDExLCAtNSwgMCwgMTgsIDI4LCAyLCAwLCA3LCAzNCwgNiksIGNyZWF0ZVNoYWRvdygwLCA5LCAxMiwgLTYsIDAsIDE5LCAyOSwgMiwgMCwgNywgMzYsIDYpLCBjcmVhdGVTaGFkb3coMCwgMTAsIDEzLCAtNiwgMCwgMjAsIDMxLCAzLCAwLCA4LCAzOCwgNyksIGNyZWF0ZVNoYWRvdygwLCAxMCwgMTMsIC02LCAwLCAyMSwgMzMsIDMsIDAsIDgsIDQwLCA3KSwgY3JlYXRlU2hhZG93KDAsIDEwLCAxNCwgLTYsIDAsIDIyLCAzNSwgMywgMCwgOCwgNDIsIDcpLCBjcmVhdGVTaGFkb3coMCwgMTEsIDE0LCAtNywgMCwgMjMsIDM2LCAzLCAwLCA5LCA0NCwgOCksIGNyZWF0ZVNoYWRvdygwLCAxMSwgMTUsIC03LCAwLCAyNCwgMzgsIDMsIDAsIDksIDQ2LCA4KV07XG5leHBvcnQgZGVmYXVsdCBzaGFkb3dzOyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJkdXJhdGlvblwiLCBcImVhc2luZ1wiLCBcImRlbGF5XCJdO1xuLy8gRm9sbG93IGh0dHBzOi8vbWF0ZXJpYWwuZ29vZ2xlLmNvbS9tb3Rpb24vZHVyYXRpb24tZWFzaW5nLmh0bWwjZHVyYXRpb24tZWFzaW5nLW5hdHVyYWwtZWFzaW5nLWN1cnZlc1xuLy8gdG8gbGVhcm4gdGhlIGNvbnRleHQgaW4gd2hpY2ggZWFjaCBlYXNpbmcgc2hvdWxkIGJlIHVzZWQuXG5leHBvcnQgY29uc3QgZWFzaW5nID0ge1xuICAvLyBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBlYXNpbmcgY3VydmUuXG4gIGVhc2VJbk91dDogJ2N1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSknLFxuICAvLyBPYmplY3RzIGVudGVyIHRoZSBzY3JlZW4gYXQgZnVsbCB2ZWxvY2l0eSBmcm9tIG9mZi1zY3JlZW4gYW5kXG4gIC8vIHNsb3dseSBkZWNlbGVyYXRlIHRvIGEgcmVzdGluZyBwb2ludC5cbiAgZWFzZU91dDogJ2N1YmljLWJlemllcigwLjAsIDAsIDAuMiwgMSknLFxuICAvLyBPYmplY3RzIGxlYXZlIHRoZSBzY3JlZW4gYXQgZnVsbCB2ZWxvY2l0eS4gVGhleSBkbyBub3QgZGVjZWxlcmF0ZSB3aGVuIG9mZi1zY3JlZW4uXG4gIGVhc2VJbjogJ2N1YmljLWJlemllcigwLjQsIDAsIDEsIDEpJyxcbiAgLy8gVGhlIHNoYXJwIGN1cnZlIGlzIHVzZWQgYnkgb2JqZWN0cyB0aGF0IG1heSByZXR1cm4gdG8gdGhlIHNjcmVlbiBhdCBhbnkgdGltZS5cbiAgc2hhcnA6ICdjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpJ1xufTtcblxuLy8gRm9sbG93IGh0dHBzOi8vbTIubWF0ZXJpYWwuaW8vZ3VpZGVsaW5lcy9tb3Rpb24vZHVyYXRpb24tZWFzaW5nLmh0bWwjZHVyYXRpb24tZWFzaW5nLWNvbW1vbi1kdXJhdGlvbnNcbi8vIHRvIGxlYXJuIHdoZW4gdXNlIHdoYXQgdGltaW5nXG5leHBvcnQgY29uc3QgZHVyYXRpb24gPSB7XG4gIHNob3J0ZXN0OiAxNTAsXG4gIHNob3J0ZXI6IDIwMCxcbiAgc2hvcnQ6IDI1MCxcbiAgLy8gbW9zdCBiYXNpYyByZWNvbW1lbmRlZCB0aW1pbmdcbiAgc3RhbmRhcmQ6IDMwMCxcbiAgLy8gdGhpcyBpcyB0byBiZSB1c2VkIGluIGNvbXBsZXggYW5pbWF0aW9uc1xuICBjb21wbGV4OiAzNzUsXG4gIC8vIHJlY29tbWVuZGVkIHdoZW4gc29tZXRoaW5nIGlzIGVudGVyaW5nIHNjcmVlblxuICBlbnRlcmluZ1NjcmVlbjogMjI1LFxuICAvLyByZWNvbW1lbmRlZCB3aGVuIHNvbWV0aGluZyBpcyBsZWF2aW5nIHNjcmVlblxuICBsZWF2aW5nU2NyZWVuOiAxOTVcbn07XG5mdW5jdGlvbiBmb3JtYXRNcyhtaWxsaXNlY29uZHMpIHtcbiAgcmV0dXJuIGAke01hdGgucm91bmQobWlsbGlzZWNvbmRzKX1tc2A7XG59XG5mdW5jdGlvbiBnZXRBdXRvSGVpZ2h0RHVyYXRpb24oaGVpZ2h0KSB7XG4gIGlmICghaGVpZ2h0KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgY29uc3QgY29uc3RhbnQgPSBoZWlnaHQgLyAzNjtcblxuICAvLyBodHRwczovL3d3dy53b2xmcmFtYWxwaGEuY29tL2lucHV0Lz9pPSg0KyUyQisxNSsqKyh4KyUyRiszNispKyoqKzAuMjUrJTJCKyh4KyUyRiszNikrJTJGKzUpKyorMTBcbiAgcmV0dXJuIE1hdGgucm91bmQoKDQgKyAxNSAqIGNvbnN0YW50ICoqIDAuMjUgKyBjb25zdGFudCAvIDUpICogMTApO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlVHJhbnNpdGlvbnMoaW5wdXRUcmFuc2l0aW9ucykge1xuICBjb25zdCBtZXJnZWRFYXNpbmcgPSBfZXh0ZW5kcyh7fSwgZWFzaW5nLCBpbnB1dFRyYW5zaXRpb25zLmVhc2luZyk7XG4gIGNvbnN0IG1lcmdlZER1cmF0aW9uID0gX2V4dGVuZHMoe30sIGR1cmF0aW9uLCBpbnB1dFRyYW5zaXRpb25zLmR1cmF0aW9uKTtcbiAgY29uc3QgY3JlYXRlID0gKHByb3BzID0gWydhbGwnXSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb25PcHRpb24gPSBtZXJnZWREdXJhdGlvbi5zdGFuZGFyZCxcbiAgICAgICAgZWFzaW5nOiBlYXNpbmdPcHRpb24gPSBtZXJnZWRFYXNpbmcuZWFzZUluT3V0LFxuICAgICAgICBkZWxheSA9IDBcbiAgICAgIH0gPSBvcHRpb25zLFxuICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShvcHRpb25zLCBfZXhjbHVkZWQpO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zdCBpc1N0cmluZyA9IHZhbHVlID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG4gICAgICAvLyBJRTExIHN1cHBvcnQsIHJlcGxhY2Ugd2l0aCBOdW1iZXIuaXNOYU5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHNcbiAgICAgIGNvbnN0IGlzTnVtYmVyID0gdmFsdWUgPT4gIWlzTmFOKHBhcnNlRmxvYXQodmFsdWUpKTtcbiAgICAgIGlmICghaXNTdHJpbmcocHJvcHMpICYmICFBcnJheS5pc0FycmF5KHByb3BzKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IEFyZ3VtZW50IFwicHJvcHNcIiBtdXN0IGJlIGEgc3RyaW5nIG9yIEFycmF5LicpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc051bWJlcihkdXJhdGlvbk9wdGlvbikgJiYgIWlzU3RyaW5nKGR1cmF0aW9uT3B0aW9uKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IEFyZ3VtZW50IFwiZHVyYXRpb25cIiBtdXN0IGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nIGJ1dCBmb3VuZCAke2R1cmF0aW9uT3B0aW9ufS5gKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNTdHJpbmcoZWFzaW5nT3B0aW9uKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IEFyZ3VtZW50IFwiZWFzaW5nXCIgbXVzdCBiZSBhIHN0cmluZy4nKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNOdW1iZXIoZGVsYXkpICYmICFpc1N0cmluZyhkZWxheSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTVVJOiBBcmd1bWVudCBcImRlbGF5XCIgbXVzdCBiZSBhIG51bWJlciBvciBhIHN0cmluZy4nKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogU2Vjb25nIGFyZ3VtZW50IG9mIHRyYW5zaXRpb24uY3JlYXRlIG11c3QgYmUgYW4gb2JqZWN0LicsIFwiQXJndW1lbnRzIHNob3VsZCBiZSBlaXRoZXIgYGNyZWF0ZSgncHJvcDEnLCBvcHRpb25zKWAgb3IgYGNyZWF0ZShbJ3Byb3AxJywgJ3Byb3AyJ10sIG9wdGlvbnMpYFwiXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LmtleXMob3RoZXIpLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFVucmVjb2duaXplZCBhcmd1bWVudChzKSBbJHtPYmplY3Qua2V5cyhvdGhlcikuam9pbignLCcpfV0uYCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoQXJyYXkuaXNBcnJheShwcm9wcykgPyBwcm9wcyA6IFtwcm9wc10pLm1hcChhbmltYXRlZFByb3AgPT4gYCR7YW5pbWF0ZWRQcm9wfSAke3R5cGVvZiBkdXJhdGlvbk9wdGlvbiA9PT0gJ3N0cmluZycgPyBkdXJhdGlvbk9wdGlvbiA6IGZvcm1hdE1zKGR1cmF0aW9uT3B0aW9uKX0gJHtlYXNpbmdPcHRpb259ICR7dHlwZW9mIGRlbGF5ID09PSAnc3RyaW5nJyA/IGRlbGF5IDogZm9ybWF0TXMoZGVsYXkpfWApLmpvaW4oJywnKTtcbiAgfTtcbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBnZXRBdXRvSGVpZ2h0RHVyYXRpb24sXG4gICAgY3JlYXRlXG4gIH0sIGlucHV0VHJhbnNpdGlvbnMsIHtcbiAgICBlYXNpbmc6IG1lcmdlZEVhc2luZyxcbiAgICBkdXJhdGlvbjogbWVyZ2VkRHVyYXRpb25cbiAgfSk7XG59IiwiLy8gV2UgbmVlZCB0byBjZW50cmFsaXplIHRoZSB6SW5kZXggZGVmaW5pdGlvbnMgYXMgdGhleSB3b3JrXG4vLyBsaWtlIGdsb2JhbCB2YWx1ZXMgaW4gdGhlIGJyb3dzZXIuXG5jb25zdCB6SW5kZXggPSB7XG4gIG1vYmlsZVN0ZXBwZXI6IDEwMDAsXG4gIGZhYjogMTA1MCxcbiAgc3BlZWREaWFsOiAxMDUwLFxuICBhcHBCYXI6IDExMDAsXG4gIGRyYXdlcjogMTIwMCxcbiAgbW9kYWw6IDEzMDAsXG4gIHNuYWNrYmFyOiAxNDAwLFxuICB0b29sdGlwOiAxNTAwXG59O1xuZXhwb3J0IGRlZmF1bHQgekluZGV4OyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSBmcm9tIFwiQG11aS91dGlscy9mb3JtYXRNdWlFcnJvck1lc3NhZ2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImJyZWFrcG9pbnRzXCIsIFwibWl4aW5zXCIsIFwic3BhY2luZ1wiLCBcInBhbGV0dGVcIiwgXCJ0cmFuc2l0aW9uc1wiLCBcInR5cG9ncmFwaHlcIiwgXCJzaGFwZVwiXTtcbmltcG9ydCB7IGRlZXBtZXJnZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgY3JlYXRlVGhlbWUgYXMgc3lzdGVtQ3JlYXRlVGhlbWUsIHVuc3RhYmxlX2RlZmF1bHRTeENvbmZpZyBhcyBkZWZhdWx0U3hDb25maWcsIHVuc3RhYmxlX3N0eWxlRnVuY3Rpb25TeCBhcyBzdHlsZUZ1bmN0aW9uU3ggfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5pbXBvcnQgY3JlYXRlTWl4aW5zIGZyb20gJy4vY3JlYXRlTWl4aW5zJztcbmltcG9ydCBjcmVhdGVQYWxldHRlIGZyb20gJy4vY3JlYXRlUGFsZXR0ZSc7XG5pbXBvcnQgY3JlYXRlVHlwb2dyYXBoeSBmcm9tICcuL2NyZWF0ZVR5cG9ncmFwaHknO1xuaW1wb3J0IHNoYWRvd3MgZnJvbSAnLi9zaGFkb3dzJztcbmltcG9ydCBjcmVhdGVUcmFuc2l0aW9ucyBmcm9tICcuL2NyZWF0ZVRyYW5zaXRpb25zJztcbmltcG9ydCB6SW5kZXggZnJvbSAnLi96SW5kZXgnO1xuZnVuY3Rpb24gY3JlYXRlVGhlbWUob3B0aW9ucyA9IHt9LCAuLi5hcmdzKSB7XG4gIGNvbnN0IHtcbiAgICAgIG1peGluczogbWl4aW5zSW5wdXQgPSB7fSxcbiAgICAgIHBhbGV0dGU6IHBhbGV0dGVJbnB1dCA9IHt9LFxuICAgICAgdHJhbnNpdGlvbnM6IHRyYW5zaXRpb25zSW5wdXQgPSB7fSxcbiAgICAgIHR5cG9ncmFwaHk6IHR5cG9ncmFwaHlJbnB1dCA9IHt9XG4gICAgfSA9IG9wdGlvbnMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShvcHRpb25zLCBfZXhjbHVkZWQpO1xuICBpZiAob3B0aW9ucy52YXJzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFxcYHZhcnNcXGAgaXMgYSBwcml2YXRlIGZpZWxkIHVzZWQgZm9yIENTUyB2YXJpYWJsZXMgc3VwcG9ydC5cblBsZWFzZSB1c2UgYW5vdGhlciBuYW1lLmAgOiBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlKDE4KSk7XG4gIH1cbiAgY29uc3QgcGFsZXR0ZSA9IGNyZWF0ZVBhbGV0dGUocGFsZXR0ZUlucHV0KTtcbiAgY29uc3Qgc3lzdGVtVGhlbWUgPSBzeXN0ZW1DcmVhdGVUaGVtZShvcHRpb25zKTtcbiAgbGV0IG11aVRoZW1lID0gZGVlcG1lcmdlKHN5c3RlbVRoZW1lLCB7XG4gICAgbWl4aW5zOiBjcmVhdGVNaXhpbnMoc3lzdGVtVGhlbWUuYnJlYWtwb2ludHMsIG1peGluc0lucHV0KSxcbiAgICBwYWxldHRlLFxuICAgIC8vIERvbid0IHVzZSBbLi4uc2hhZG93c10gdW50aWwgeW91J3ZlIHZlcmlmaWVkIGl0cyB0cmFuc3BpbGVkIGNvZGUgaXMgbm90IGludm9raW5nIHRoZSBpdGVyYXRvciBwcm90b2NvbC5cbiAgICBzaGFkb3dzOiBzaGFkb3dzLnNsaWNlKCksXG4gICAgdHlwb2dyYXBoeTogY3JlYXRlVHlwb2dyYXBoeShwYWxldHRlLCB0eXBvZ3JhcGh5SW5wdXQpLFxuICAgIHRyYW5zaXRpb25zOiBjcmVhdGVUcmFuc2l0aW9ucyh0cmFuc2l0aW9uc0lucHV0KSxcbiAgICB6SW5kZXg6IF9leHRlbmRzKHt9LCB6SW5kZXgpXG4gIH0pO1xuICBtdWlUaGVtZSA9IGRlZXBtZXJnZShtdWlUaGVtZSwgb3RoZXIpO1xuICBtdWlUaGVtZSA9IGFyZ3MucmVkdWNlKChhY2MsIGFyZ3VtZW50KSA9PiBkZWVwbWVyZ2UoYWNjLCBhcmd1bWVudCksIG11aVRoZW1lKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBUT0RPIHY2OiBSZWZhY3RvciB0byB1c2UgZ2xvYmFsU3RhdGVDbGFzc2VzTWFwcGluZyBmcm9tIEBtdWkvdXRpbHMgb25jZSBgcmVhZE9ubHlgIHN0YXRlIGNsYXNzIGlzIHVzZWQgaW4gUmF0aW5nIGNvbXBvbmVudC5cbiAgICBjb25zdCBzdGF0ZUNsYXNzZXMgPSBbJ2FjdGl2ZScsICdjaGVja2VkJywgJ2NvbXBsZXRlZCcsICdkaXNhYmxlZCcsICdlcnJvcicsICdleHBhbmRlZCcsICdmb2N1c2VkJywgJ2ZvY3VzVmlzaWJsZScsICdyZXF1aXJlZCcsICdzZWxlY3RlZCddO1xuICAgIGNvbnN0IHRyYXZlcnNlID0gKG5vZGUsIGNvbXBvbmVudCkgPT4ge1xuICAgICAgbGV0IGtleTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGd1YXJkLWZvci1pbiwgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgIGZvciAoa2V5IGluIG5vZGUpIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBub2RlW2tleV07XG4gICAgICAgIGlmIChzdGF0ZUNsYXNzZXMuaW5kZXhPZihrZXkpICE9PSAtMSAmJiBPYmplY3Qua2V5cyhjaGlsZCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZUNsYXNzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJycsIGtleSk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgXFxgJHtjb21wb25lbnR9XFxgIGNvbXBvbmVudCBpbmNyZWFzZXMgYCArIGB0aGUgQ1NTIHNwZWNpZmljaXR5IG9mIHRoZSBcXGAke2tleX1cXGAgaW50ZXJuYWwgc3RhdGUuYCwgJ1lvdSBjYW4gbm90IG92ZXJyaWRlIGl0IGxpa2UgdGhpczogJywgSlNPTi5zdHJpbmdpZnkobm9kZSwgbnVsbCwgMiksICcnLCBgSW5zdGVhZCwgeW91IG5lZWQgdG8gdXNlIHRoZSAnJi4ke3N0YXRlQ2xhc3N9JyBzeW50YXg6YCwgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICByb290OiB7XG4gICAgICAgICAgICAgICAgW2AmLiR7c3RhdGVDbGFzc31gXTogY2hpbGRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgbnVsbCwgMiksICcnLCAnaHR0cHM6Ly9tdWkuY29tL3Ivc3RhdGUtY2xhc3Nlcy1ndWlkZSddLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzdHlsZSB0byBwcmV2ZW50IGdsb2JhbCBjb25mbGljdHMuXG4gICAgICAgICAgbm9kZVtrZXldID0ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5rZXlzKG11aVRoZW1lLmNvbXBvbmVudHMpLmZvckVhY2goY29tcG9uZW50ID0+IHtcbiAgICAgIGNvbnN0IHN0eWxlT3ZlcnJpZGVzID0gbXVpVGhlbWUuY29tcG9uZW50c1tjb21wb25lbnRdLnN0eWxlT3ZlcnJpZGVzO1xuICAgICAgaWYgKHN0eWxlT3ZlcnJpZGVzICYmIGNvbXBvbmVudC5pbmRleE9mKCdNdWknKSA9PT0gMCkge1xuICAgICAgICB0cmF2ZXJzZShzdHlsZU92ZXJyaWRlcywgY29tcG9uZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBtdWlUaGVtZS51bnN0YWJsZV9zeENvbmZpZyA9IF9leHRlbmRzKHt9LCBkZWZhdWx0U3hDb25maWcsIG90aGVyID09IG51bGwgPyB2b2lkIDAgOiBvdGhlci51bnN0YWJsZV9zeENvbmZpZyk7XG4gIG11aVRoZW1lLnVuc3RhYmxlX3N4ID0gZnVuY3Rpb24gc3gocHJvcHMpIHtcbiAgICByZXR1cm4gc3R5bGVGdW5jdGlvblN4KHtcbiAgICAgIHN4OiBwcm9wcyxcbiAgICAgIHRoZW1lOiB0aGlzXG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBtdWlUaGVtZTtcbn1cbmxldCB3YXJuZWRPbmNlID0gZmFsc2U7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTXVpVGhlbWUoLi4uYXJncykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICghd2FybmVkT25jZSkge1xuICAgICAgd2FybmVkT25jZSA9IHRydWU7XG4gICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiB0aGUgY3JlYXRlTXVpVGhlbWUgZnVuY3Rpb24gd2FzIHJlbmFtZWQgdG8gY3JlYXRlVGhlbWUuJywgJycsIFwiWW91IHNob3VsZCB1c2UgYGltcG9ydCB7IGNyZWF0ZVRoZW1lIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9zdHlsZXMnYFwiXS5qb2luKCdcXG4nKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVUaGVtZSguLi5hcmdzKTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVRoZW1lOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlTWl4aW5zKGJyZWFrcG9pbnRzLCBtaXhpbnMpIHtcbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICB0b29sYmFyOiB7XG4gICAgICBtaW5IZWlnaHQ6IDU2LFxuICAgICAgW2JyZWFrcG9pbnRzLnVwKCd4cycpXToge1xuICAgICAgICAnQG1lZGlhIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSc6IHtcbiAgICAgICAgICBtaW5IZWlnaHQ6IDQ4XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbYnJlYWtwb2ludHMudXAoJ3NtJyldOiB7XG4gICAgICAgIG1pbkhlaWdodDogNjRcbiAgICAgIH1cbiAgICB9XG4gIH0sIG1peGlucyk7XG59IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgY3JlYXRlVGhlbWUgZnJvbSAnLi9jcmVhdGVUaGVtZSc7XG5jb25zdCBkZWZhdWx0VGhlbWUgPSBjcmVhdGVUaGVtZSgpO1xuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdFRoZW1lOyIsIi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRlcmlhbC1jb21wb25lbnRzL21hdGVyaWFsLWNvbXBvbmVudHMtaW9zL2Jsb2IvYmNhMzYxMDc0MDU1OTRkNWI3YjE2MjY1YTViMGVkNjk4Zjg1YTVlZS9jb21wb25lbnRzL0VsZXZhdGlvbi9zcmMvVUlDb2xvciUyQk1hdGVyaWFsRWxldmF0aW9uLm0jTDYxXG5jb25zdCBnZXRPdmVybGF5QWxwaGEgPSBlbGV2YXRpb24gPT4ge1xuICBsZXQgYWxwaGFWYWx1ZTtcbiAgaWYgKGVsZXZhdGlvbiA8IDEpIHtcbiAgICBhbHBoYVZhbHVlID0gNS4xMTkxNiAqIGVsZXZhdGlvbiAqKiAyO1xuICB9IGVsc2Uge1xuICAgIGFscGhhVmFsdWUgPSA0LjUgKiBNYXRoLmxvZyhlbGV2YXRpb24gKyAxKSArIDI7XG4gIH1cbiAgcmV0dXJuIChhbHBoYVZhbHVlIC8gMTAwKS50b0ZpeGVkKDIpO1xufTtcbmV4cG9ydCBkZWZhdWx0IGdldE92ZXJsYXlBbHBoYTsiLCJleHBvcnQgZGVmYXVsdCAnJCRtYXRlcmlhbCc7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBjcmVhdGVTdHlsZWQsIHNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IGRlZmF1bHRUaGVtZSBmcm9tICcuL2RlZmF1bHRUaGVtZSc7XG5pbXBvcnQgVEhFTUVfSUQgZnJvbSAnLi9pZGVudGlmaWVyJztcbmV4cG9ydCBjb25zdCByb290U2hvdWxkRm9yd2FyZFByb3AgPSBwcm9wID0+IHNob3VsZEZvcndhcmRQcm9wKHByb3ApICYmIHByb3AgIT09ICdjbGFzc2VzJztcbmV4cG9ydCBjb25zdCBzbG90U2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcDtcbmNvbnN0IHN0eWxlZCA9IGNyZWF0ZVN0eWxlZCh7XG4gIHRoZW1lSWQ6IFRIRU1FX0lELFxuICBkZWZhdWx0VGhlbWUsXG4gIHJvb3RTaG91bGRGb3J3YXJkUHJvcFxufSk7XG5leHBvcnQgZGVmYXVsdCBzdHlsZWQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUaGVtZSBhcyB1c2VUaGVtZVN5c3RlbSB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBkZWZhdWx0VGhlbWUgZnJvbSAnLi9kZWZhdWx0VGhlbWUnO1xuaW1wb3J0IFRIRU1FX0lEIGZyb20gJy4vaWRlbnRpZmllcic7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUaGVtZSgpIHtcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZVN5c3RlbShkZWZhdWx0VGhlbWUpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIFJlYWN0LnVzZURlYnVnVmFsdWUodGhlbWUpO1xuICB9XG4gIHJldHVybiB0aGVtZVtUSEVNRV9JRF0gfHwgdGhlbWU7XG59IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyB1c2VUaGVtZVByb3BzIGFzIHN5c3RlbVVzZVRoZW1lUHJvcHMgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgZGVmYXVsdFRoZW1lIGZyb20gJy4vZGVmYXVsdFRoZW1lJztcbmltcG9ydCBUSEVNRV9JRCBmcm9tICcuL2lkZW50aWZpZXInO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVGhlbWVQcm9wcyh7XG4gIHByb3BzLFxuICBuYW1lXG59KSB7XG4gIHJldHVybiBzeXN0ZW1Vc2VUaGVtZVByb3BzKHtcbiAgICBwcm9wcyxcbiAgICBuYW1lLFxuICAgIGRlZmF1bHRUaGVtZSxcbiAgICB0aGVtZUlkOiBUSEVNRV9JRFxuICB9KTtcbn0iLCJleHBvcnQgY29uc3QgcmVmbG93ID0gbm9kZSA9PiBub2RlLnNjcm9sbFRvcDtcbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFuc2l0aW9uUHJvcHMocHJvcHMsIG9wdGlvbnMpIHtcbiAgdmFyIF9zdHlsZSR0cmFuc2l0aW9uRHVyYSwgX3N0eWxlJHRyYW5zaXRpb25UaW1pO1xuICBjb25zdCB7XG4gICAgdGltZW91dCxcbiAgICBlYXNpbmcsXG4gICAgc3R5bGUgPSB7fVxuICB9ID0gcHJvcHM7XG4gIHJldHVybiB7XG4gICAgZHVyYXRpb246IChfc3R5bGUkdHJhbnNpdGlvbkR1cmEgPSBzdHlsZS50cmFuc2l0aW9uRHVyYXRpb24pICE9IG51bGwgPyBfc3R5bGUkdHJhbnNpdGlvbkR1cmEgOiB0eXBlb2YgdGltZW91dCA9PT0gJ251bWJlcicgPyB0aW1lb3V0IDogdGltZW91dFtvcHRpb25zLm1vZGVdIHx8IDAsXG4gICAgZWFzaW5nOiAoX3N0eWxlJHRyYW5zaXRpb25UaW1pID0gc3R5bGUudHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKSAhPSBudWxsID8gX3N0eWxlJHRyYW5zaXRpb25UaW1pIDogdHlwZW9mIGVhc2luZyA9PT0gJ29iamVjdCcgPyBlYXNpbmdbb3B0aW9ucy5tb2RlXSA6IGVhc2luZyxcbiAgICBkZWxheTogc3R5bGUudHJhbnNpdGlvbkRlbGF5XG4gIH07XG59IiwiaW1wb3J0IHsgdW5zdGFibGVfY2FwaXRhbGl6ZSBhcyBjYXBpdGFsaXplIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCBjYXBpdGFsaXplOyIsImltcG9ydCB7IHVuc3RhYmxlX2RlYm91bmNlIGFzIGRlYm91bmNlIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCBkZWJvdW5jZTsiLCJpbXBvcnQgeyB1bnN0YWJsZV9nZXRTY3JvbGxiYXJTaXplIGFzIGdldFNjcm9sbGJhclNpemUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IGdldFNjcm9sbGJhclNpemU7IiwiaW1wb3J0IHsgdW5zdGFibGVfaXNNdWlFbGVtZW50IGFzIGlzTXVpRWxlbWVudCB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgaXNNdWlFbGVtZW50OyIsImltcG9ydCB7IHVuc3RhYmxlX293bmVyRG9jdW1lbnQgYXMgb3duZXJEb2N1bWVudCB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgb3duZXJEb2N1bWVudDsiLCJpbXBvcnQgeyB1bnN0YWJsZV9vd25lcldpbmRvdyBhcyBvd25lcldpbmRvdyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgb3duZXJXaW5kb3c7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyB1bnN0YWJsZV91c2VFbmhhbmNlZEVmZmVjdCBhcyB1c2VFbmhhbmNlZEVmZmVjdCB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgdXNlRW5oYW5jZWRFZmZlY3Q7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyB1bnN0YWJsZV91c2VFdmVudENhbGxiYWNrIGFzIHVzZUV2ZW50Q2FsbGJhY2sgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IHVzZUV2ZW50Q2FsbGJhY2s7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyB1bnN0YWJsZV91c2VGb3JrUmVmIGFzIHVzZUZvcmtSZWYgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IHVzZUZvcmtSZWY7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyB1bnN0YWJsZV91c2VJc0ZvY3VzVmlzaWJsZSBhcyB1c2VJc0ZvY3VzVmlzaWJsZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgdXNlSXNGb2N1c1Zpc2libGU7IiwiY29uc3QgaGFzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xuZXhwb3J0IGRlZmF1bHQgaGFzU3ltYm9sID8gU3ltYm9sLmZvcignbXVpLm5lc3RlZCcpIDogJ19fVEhFTUVfTkVTVEVEX18nOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGV4YWN0UHJvcCB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IFRoZW1lQ29udGV4dCBmcm9tICcuLi91c2VUaGVtZS9UaGVtZUNvbnRleHQnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3VzZVRoZW1lJztcbmltcG9ydCBuZXN0ZWQgZnJvbSAnLi9uZXN0ZWQnO1xuXG4vLyBUbyBzdXBwb3J0IGNvbXBvc2l0aW9uIG9mIHRoZW1lLlxuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIG1lcmdlT3V0ZXJMb2NhbFRoZW1lKG91dGVyVGhlbWUsIGxvY2FsVGhlbWUpIHtcbiAgaWYgKHR5cGVvZiBsb2NhbFRoZW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3QgbWVyZ2VkVGhlbWUgPSBsb2NhbFRoZW1lKG91dGVyVGhlbWUpO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoIW1lcmdlZFRoZW1lKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFlvdSBzaG91bGQgcmV0dXJuIGFuIG9iamVjdCBmcm9tIHlvdXIgdGhlbWUgZnVuY3Rpb24sIGkuZS4nLCAnPFRoZW1lUHJvdmlkZXIgdGhlbWU9eygpID0+ICh7fSl9IC8+J10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VkVGhlbWU7XG4gIH1cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvdXRlclRoZW1lLCBsb2NhbFRoZW1lKTtcbn1cblxuLyoqXG4gKiBUaGlzIGNvbXBvbmVudCB0YWtlcyBhIGB0aGVtZWAgcHJvcC5cbiAqIEl0IG1ha2VzIHRoZSBgdGhlbWVgIGF2YWlsYWJsZSBkb3duIHRoZSBSZWFjdCB0cmVlIHRoYW5rcyB0byBSZWFjdCBjb250ZXh0LlxuICogVGhpcyBjb21wb25lbnQgc2hvdWxkIHByZWZlcmFibHkgYmUgdXNlZCBhdCAqKnRoZSByb290IG9mIHlvdXIgY29tcG9uZW50IHRyZWUqKi5cbiAqL1xuZnVuY3Rpb24gVGhlbWVQcm92aWRlcihwcm9wcykge1xuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgdGhlbWU6IGxvY2FsVGhlbWVcbiAgfSA9IHByb3BzO1xuICBjb25zdCBvdXRlclRoZW1lID0gdXNlVGhlbWUoKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAob3V0ZXJUaGVtZSA9PT0gbnVsbCAmJiB0eXBlb2YgbG9jYWxUaGVtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogWW91IGFyZSBwcm92aWRpbmcgYSB0aGVtZSBmdW5jdGlvbiBwcm9wIHRvIHRoZSBUaGVtZVByb3ZpZGVyIGNvbXBvbmVudDonLCAnPFRoZW1lUHJvdmlkZXIgdGhlbWU9e291dGVyVGhlbWUgPT4gb3V0ZXJUaGVtZX0gLz4nLCAnJywgJ0hvd2V2ZXIsIG5vIG91dGVyIHRoZW1lIGlzIHByZXNlbnQuJywgJ01ha2Ugc3VyZSBhIHRoZW1lIGlzIGFscmVhZHkgaW5qZWN0ZWQgaGlnaGVyIGluIHRoZSBSZWFjdCB0cmVlICcgKyAnb3IgcHJvdmlkZSBhIHRoZW1lIG9iamVjdC4nXS5qb2luKCdcXG4nKSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gb3V0ZXJUaGVtZSA9PT0gbnVsbCA/IGxvY2FsVGhlbWUgOiBtZXJnZU91dGVyTG9jYWxUaGVtZShvdXRlclRoZW1lLCBsb2NhbFRoZW1lKTtcbiAgICBpZiAob3V0cHV0ICE9IG51bGwpIHtcbiAgICAgIG91dHB1dFtuZXN0ZWRdID0gb3V0ZXJUaGVtZSAhPT0gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfSwgW2xvY2FsVGhlbWUsIG91dGVyVGhlbWVdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFRoZW1lQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiB0aGVtZSxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgfSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUaGVtZVByb3ZpZGVyLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFlvdXIgY29tcG9uZW50IHRyZWUuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBBIHRoZW1lIG9iamVjdC4gWW91IGNhbiBwcm92aWRlIGEgZnVuY3Rpb24gdG8gZXh0ZW5kIHRoZSBvdXRlciB0aGVtZS5cbiAgICovXG4gIHRoZW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pLmlzUmVxdWlyZWRcbn0gOiB2b2lkIDA7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUaGVtZVByb3ZpZGVyLnByb3BUeXBlcyA9IGV4YWN0UHJvcChUaGVtZVByb3ZpZGVyLnByb3BUeXBlcykgOiB2b2lkIDA7XG59XG5leHBvcnQgZGVmYXVsdCBUaGVtZVByb3ZpZGVyOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmNvbnN0IFRoZW1lQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgVGhlbWVDb250ZXh0LmRpc3BsYXlOYW1lID0gJ1RoZW1lQ29udGV4dCc7XG59XG5leHBvcnQgZGVmYXVsdCBUaGVtZUNvbnRleHQ7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRoZW1lQ29udGV4dCBmcm9tICcuL1RoZW1lQ29udGV4dCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUaGVtZSgpIHtcbiAgY29uc3QgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgUmVhY3QudXNlRGVidWdWYWx1ZSh0aGVtZSk7XG4gIH1cbiAgcmV0dXJuIHRoZW1lO1xufSIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBpc0VtcHR5KG9iaikge1xuICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsIHx8IE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gR2xvYmFsU3R5bGVzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBzdHlsZXMsXG4gICAgZGVmYXVsdFRoZW1lID0ge31cbiAgfSA9IHByb3BzO1xuICBjb25zdCBnbG9iYWxTdHlsZXMgPSB0eXBlb2Ygc3R5bGVzID09PSAnZnVuY3Rpb24nID8gdGhlbWVJbnB1dCA9PiBzdHlsZXMoaXNFbXB0eSh0aGVtZUlucHV0KSA/IGRlZmF1bHRUaGVtZSA6IHRoZW1lSW5wdXQpIDogc3R5bGVzO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goR2xvYmFsLCB7XG4gICAgc3R5bGVzOiBnbG9iYWxTdHlsZXNcbiAgfSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBHbG9iYWxTdHlsZXMucHJvcFR5cGVzID0ge1xuICBkZWZhdWx0VGhlbWU6IFByb3BUeXBlcy5vYmplY3QsXG4gIHN0eWxlczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5LCBQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pXG59IDogdm9pZCAwOyIsIi8qKlxuICogQG11aS9zdHlsZWQtZW5naW5lIHY1LjE1LjJcbiAqXG4gKiBAbGljZW5zZSBNSVRcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIGNsaWVudCc7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5pbXBvcnQgZW1TdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0eWxlZCh0YWcsIG9wdGlvbnMpIHtcbiAgY29uc3Qgc3R5bGVzRmFjdG9yeSA9IGVtU3R5bGVkKHRhZywgb3B0aW9ucyk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgcmV0dXJuICguLi5zdHlsZXMpID0+IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHR5cGVvZiB0YWcgPT09ICdzdHJpbmcnID8gYFwiJHt0YWd9XCJgIDogJ2NvbXBvbmVudCc7XG4gICAgICBpZiAoc3R5bGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBTZWVtcyBsaWtlIHlvdSBjYWxsZWQgXFxgc3R5bGVkKCR7Y29tcG9uZW50fSkoKVxcYCB3aXRob3V0IGEgXFxgc3R5bGVcXGAgYXJndW1lbnQuYCwgJ1lvdSBtdXN0IHByb3ZpZGUgYSBgc3R5bGVzYCBhcmd1bWVudDogYHN0eWxlZChcImRpdlwiKShzdHlsZVlvdUZvcmdvdFRvUGFzcylgLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGVzLnNvbWUoc3R5bGUgPT4gc3R5bGUgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTVVJOiB0aGUgc3R5bGVkKCR7Y29tcG9uZW50fSkoLi4uYXJncykgQVBJIHJlcXVpcmVzIGFsbCBpdHMgYXJncyB0byBiZSBkZWZpbmVkLmApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlc0ZhY3RvcnkoLi4uc3R5bGVzKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBzdHlsZXNGYWN0b3J5O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgaW50ZXJuYWxfcHJvY2Vzc1N0eWxlcyA9ICh0YWcsIHByb2Nlc3NvcikgPT4ge1xuICAvLyBFbW90aW9uIGF0dGFjaGVzIGFsbCB0aGUgc3R5bGVzIGFzIGBfX2Vtb3Rpb25fc3R5bGVzYC5cbiAgLy8gUmVmOiBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2Jsb2IvMTZkOTcxZDBkYTIyOTU5NmQ2YmNjMzlkMjgyYmE5NzUzYzllZTdjZi9wYWNrYWdlcy9zdHlsZWQvc3JjL2Jhc2UuanMjTDE4NlxuICBpZiAoQXJyYXkuaXNBcnJheSh0YWcuX19lbW90aW9uX3N0eWxlcykpIHtcbiAgICB0YWcuX19lbW90aW9uX3N0eWxlcyA9IHByb2Nlc3Nvcih0YWcuX19lbW90aW9uX3N0eWxlcyk7XG4gIH1cbn07XG5leHBvcnQgeyBUaGVtZUNvbnRleHQsIGtleWZyYW1lcywgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdHlsZWRFbmdpbmVQcm92aWRlciB9IGZyb20gJy4vU3R5bGVkRW5naW5lUHJvdmlkZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBHbG9iYWxTdHlsZXMgfSBmcm9tICcuL0dsb2JhbFN0eWxlcyc7Il0sIm5hbWVzIjpbImdldFNlbGVjdFV0aWxpdHlDbGFzc2VzIiwic2xvdCIsImdlbmVyYXRlVXRpbGl0eUNsYXNzIiwiZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyIsIl9zcGFuIiwiX2V4Y2x1ZGVkIiwiU2VsZWN0U2VsZWN0Iiwic3R5bGVkIiwibmFtZSIsIm92ZXJyaWRlc1Jlc29sdmVyIiwicHJvcHMiLCJzdHlsZXMiLCJvd25lclN0YXRlIiwic2VsZWN0IiwidmFyaWFudCIsImVycm9yIiwibXVsdGlwbGUiLCJoZWlnaHQiLCJtaW5IZWlnaHQiLCJ0ZXh0T3ZlcmZsb3ciLCJ3aGl0ZVNwYWNlIiwib3ZlcmZsb3ciLCJTZWxlY3RJY29uIiwiaWNvbiIsImNhcGl0YWxpemUiLCJvcGVuIiwiaWNvbk9wZW4iLCJTZWxlY3ROYXRpdmVJbnB1dCIsInNob3VsZEZvcndhcmRQcm9wIiwicHJvcCIsIm5hdGl2ZUlucHV0IiwiYm90dG9tIiwibGVmdCIsInBvc2l0aW9uIiwib3BhY2l0eSIsInBvaW50ZXJFdmVudHMiLCJ3aWR0aCIsImJveFNpemluZyIsImFyZUVxdWFsVmFsdWVzIiwiYSIsImIiLCJTdHJpbmciLCJpc0VtcHR5IiwiZGlzcGxheSIsInRyaW0iLCJyZWYiLCJfTWVudVByb3BzJHNsb3RQcm9wcyIsImFyaWFEZXNjcmliZWRieSIsImFyaWFMYWJlbCIsImF1dG9Gb2N1cyIsImF1dG9XaWR0aCIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwiZGVmYXVsdE9wZW4iLCJkZWZhdWx0VmFsdWUiLCJkaXNhYmxlZCIsImRpc3BsYXlFbXB0eSIsIkljb25Db21wb25lbnQiLCJpbnB1dFJlZiIsImlucHV0UmVmUHJvcCIsImxhYmVsSWQiLCJNZW51UHJvcHMiLCJvbkJsdXIiLCJvbkNoYW5nZSIsIm9uQ2xvc2UiLCJvbkZvY3VzIiwib25PcGVuIiwib3BlblByb3AiLCJyZWFkT25seSIsInJlbmRlclZhbHVlIiwiU2VsZWN0RGlzcGxheVByb3BzIiwidGFiSW5kZXgiLCJ0YWJJbmRleFByb3AiLCJ2YWx1ZSIsInZhbHVlUHJvcCIsIm90aGVyIiwic2V0VmFsdWVTdGF0ZSIsImNvbnRyb2xsZWQiLCJkZWZhdWx0Iiwib3BlblN0YXRlIiwic2V0T3BlblN0YXRlIiwiZGlzcGxheVJlZiIsImRpc3BsYXlOb2RlIiwic2V0RGlzcGxheU5vZGUiLCJjdXJyZW50IiwiaXNPcGVuQ29udHJvbGxlZCIsIm1lbnVNaW5XaWR0aFN0YXRlIiwic2V0TWVudU1pbldpZHRoU3RhdGUiLCJoYW5kbGVSZWYiLCJ1c2VGb3JrUmVmIiwiaGFuZGxlRGlzcGxheVJlZiIsIm5vZGUiLCJhbmNob3JFbGVtZW50IiwicGFyZW50Tm9kZSIsImZvY3VzIiwiY2xpZW50V2lkdGgiLCJsYWJlbCIsIm93bmVyRG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImhhbmRsZXIiLCJnZXRTZWxlY3Rpb24iLCJpc0NvbGxhcHNlZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidXBkYXRlIiwiZXZlbnQiLCJjaGlsZHJlbkFycmF5IiwidG9BcnJheSIsImhhbmRsZUl0ZW1DbGljayIsImNoaWxkIiwibmV3VmFsdWUiLCJjdXJyZW50VGFyZ2V0IiwiaGFzQXR0cmlidXRlIiwiQXJyYXkiLCJpc0FycmF5Iiwic2xpY2UiLCJpdGVtSW5kZXgiLCJpbmRleE9mIiwicHVzaCIsInNwbGljZSIsIm9uQ2xpY2siLCJuYXRpdmVFdmVudCIsImNsb25lZEV2ZW50IiwiY29uc3RydWN0b3IiLCJ0eXBlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ3cml0YWJsZSIsImRpc3BsYXlTaW5nbGUiLCJkaXNwbGF5TXVsdGlwbGUiLCJjb21wdXRlRGlzcGxheSIsImZvdW5kTWF0Y2giLCJpdGVtcyIsIm1hcCIsInNlbGVjdGVkIiwiRXJyb3IiLCJzb21lIiwidiIsIm9uS2V5VXAiLCJrZXkiLCJwcmV2ZW50RGVmYXVsdCIsInJvbGUiLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJyZWR1Y2UiLCJvdXRwdXQiLCJpbmRleCIsIm1lbnVNaW5XaWR0aCIsImJ1dHRvbklkIiwiaWQiLCJjbGFzc2VzIiwic2xvdHMiLCJjb21wb3NlQ2xhc3NlcyIsInVzZVV0aWxpdHlDbGFzc2VzIiwicGFwZXJQcm9wcyIsIlBhcGVyUHJvcHMiLCJzbG90UHJvcHMiLCJwYXBlciIsImxpc3Rib3hJZCIsInVzZUlkIiwiZmlsdGVyIiwiQm9vbGVhbiIsImpvaW4iLCJvbktleURvd24iLCJvbk1vdXNlRG93biIsImJ1dHRvbiIsImNsc3giLCJmaW5kIiwiY2hpbGRJdGVtIiwidGFyZ2V0IiwiYXMiLCJNZW51IiwiYW5jaG9yRWwiLCJhbmNob3JPcmlnaW4iLCJ2ZXJ0aWNhbCIsImhvcml6b250YWwiLCJ0cmFuc2Zvcm1PcmlnaW4iLCJNZW51TGlzdFByb3BzIiwiZGlzYWJsZUxpc3RXcmFwIiwic3R5bGUiLCJtaW5XaWR0aCIsImdldFN2Z0ljb25VdGlsaXR5Q2xhc3MiLCJTdmdJY29uUm9vdCIsInJvb3QiLCJjb2xvciIsImZvbnRTaXplIiwidGhlbWUiLCJfdGhlbWUkdHJhbnNpdGlvbnMiLCJfdGhlbWUkdHJhbnNpdGlvbnMkY3IiLCJfdGhlbWUkdHJhbnNpdGlvbnMyIiwiX3RoZW1lJHR5cG9ncmFwaHkiLCJfdGhlbWUkdHlwb2dyYXBoeSRweFQiLCJfdGhlbWUkdHlwb2dyYXBoeTIiLCJfdGhlbWUkdHlwb2dyYXBoeTIkcHgiLCJfdGhlbWUkdHlwb2dyYXBoeTMiLCJfdGhlbWUkdHlwb2dyYXBoeTMkcHgiLCJfcGFsZXR0ZSRvd25lclN0YXRlJGMiLCJfcGFsZXR0ZSIsIl9wYWxldHRlMiIsIl9wYWxldHRlMyIsInVzZXJTZWxlY3QiLCJmaWxsIiwiaGFzU3ZnQXNDaGlsZCIsImZsZXhTaHJpbmsiLCJ0cmFuc2l0aW9uIiwidHJhbnNpdGlvbnMiLCJjcmVhdGUiLCJjYWxsIiwiZHVyYXRpb24iLCJzaG9ydGVyIiwiaW5oZXJpdCIsInNtYWxsIiwidHlwb2dyYXBoeSIsInB4VG9SZW0iLCJtZWRpdW0iLCJsYXJnZSIsInZhcnMiLCJwYWxldHRlIiwibWFpbiIsImFjdGlvbiIsImFjdGl2ZSIsIlN2Z0ljb24iLCJpblByb3BzIiwidXNlVGhlbWVQcm9wcyIsImNvbXBvbmVudCIsImh0bWxDb2xvciIsImluaGVyaXRWaWV3Qm94IiwidGl0bGVBY2Nlc3MiLCJ2aWV3Qm94IiwiaW5zdGFuY2VGb250U2l6ZSIsIm1vcmUiLCJmb2N1c2FibGUiLCJtdWlOYW1lIiwicGF0aCIsImRpc3BsYXlOYW1lIiwiQ29tcG9uZW50IiwiZCIsIl9leGNsdWRlZDIiLCJzdHlsZWRSb290Q29uZmlnIiwiU3R5bGVkSW5wdXQiLCJJbnB1dCIsIlN0eWxlZE91dGxpbmVkSW5wdXQiLCJPdXRsaW5lZElucHV0IiwiU3R5bGVkRmlsbGVkSW5wdXQiLCJGaWxsZWRJbnB1dCIsIlNlbGVjdCIsImNsYXNzZXNQcm9wIiwiQXJyb3dEcm9wRG93biIsImlucHV0IiwiaW5wdXRQcm9wcyIsIm5hdGl2ZSIsInZhcmlhbnRQcm9wIiwiaW5wdXRDb21wb25lbnQiLCJOYXRpdmVTZWxlY3RJbnB1dCIsIm11aUZvcm1Db250cm9sIiwidXNlRm9ybUNvbnRyb2wiLCJmY3MiLCJmb3JtQ29udHJvbFN0YXRlIiwic3RhdGVzIiwicmVzdE9mQ2xhc3NlcyIsIklucHV0Q29tcG9uZW50Iiwic3RhbmRhcmQiLCJvdXRsaW5lZCIsImZpbGxlZCIsImlucHV0Q29tcG9uZW50UmVmIiwiZGVlcG1lcmdlIiwibm90Y2hlZCIsImdldFRleHRGaWVsZFV0aWxpdHlDbGFzcyIsInZhcmlhbnRDb21wb25lbnQiLCJUZXh0RmllbGRSb290IiwiRm9ybUNvbnRyb2wiLCJhdXRvQ29tcGxldGUiLCJGb3JtSGVscGVyVGV4dFByb3BzIiwiZnVsbFdpZHRoIiwiaGVscGVyVGV4dCIsImlkT3ZlcnJpZGUiLCJJbnB1dExhYmVsUHJvcHMiLCJJbnB1dFByb3BzIiwibWF4Um93cyIsIm1pblJvd3MiLCJtdWx0aWxpbmUiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwicm93cyIsIlNlbGVjdFByb3BzIiwiSW5wdXRNb3JlIiwic2hyaW5rIiwiaGVscGVyVGV4dElkIiwiaW5wdXRMYWJlbElkIiwiSW5wdXRFbGVtZW50IiwiSW5wdXRMYWJlbCIsImh0bWxGb3IiLCJGb3JtSGVscGVyVGV4dCIsImdldFRvb2xiYXJVdGlsaXR5Q2xhc3MiLCJUb29sYmFyUm9vdCIsImRpc2FibGVHdXR0ZXJzIiwiZ3V0dGVycyIsImFsaWduSXRlbXMiLCJwYWRkaW5nTGVmdCIsInNwYWNpbmciLCJwYWRkaW5nUmlnaHQiLCJicmVha3BvaW50cyIsInVwIiwibWl4aW5zIiwidG9vbGJhciIsImdldFR5cG9ncmFwaHlVdGlsaXR5Q2xhc3MiLCJUeXBvZ3JhcGh5Um9vdCIsImFsaWduIiwibm9XcmFwIiwiZ3V0dGVyQm90dG9tIiwicGFyYWdyYXBoIiwibWFyZ2luIiwiZm9udCIsInRleHRBbGlnbiIsIm1hcmdpbkJvdHRvbSIsImRlZmF1bHRWYXJpYW50TWFwcGluZyIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsInN1YnRpdGxlMSIsInN1YnRpdGxlMiIsImJvZHkxIiwiYm9keTIiLCJjb2xvclRyYW5zZm9ybWF0aW9ucyIsInByaW1hcnkiLCJ0ZXh0UHJpbWFyeSIsInNlY29uZGFyeSIsInRleHRTZWNvbmRhcnkiLCJ0aGVtZVByb3BzIiwidHJhbnNmb3JtRGVwcmVjYXRlZENvbG9ycyIsImV4dGVuZFN4UHJvcCIsInZhcmlhbnRNYXBwaW5nIiwiVGhlbWVQcm92aWRlciIsIl9yZWYiLCJ0aGVtZUlucHV0Iiwic2NvcGVkVGhlbWUiLCJ0aGVtZUlkIiwiYmxhY2siLCJ3aGl0ZSIsIkExMDAiLCJBMjAwIiwiQTQwMCIsIkE3MDAiLCJsaWdodCIsInRleHQiLCJkaXZpZGVyIiwiYmFja2dyb3VuZCIsImhvdmVyIiwiaG92ZXJPcGFjaXR5Iiwic2VsZWN0ZWRPcGFjaXR5IiwiZGlzYWJsZWRCYWNrZ3JvdW5kIiwiZGlzYWJsZWRPcGFjaXR5IiwiZm9jdXNPcGFjaXR5IiwiYWN0aXZhdGVkT3BhY2l0eSIsImRhcmsiLCJhZGRMaWdodE9yRGFyayIsImludGVudCIsImRpcmVjdGlvbiIsInNoYWRlIiwidG9uYWxPZmZzZXQiLCJ0b25hbE9mZnNldExpZ2h0IiwidG9uYWxPZmZzZXREYXJrIiwiaGFzT3duUHJvcGVydHkiLCJjYXNlQWxsQ2FwcyIsInRleHRUcmFuc2Zvcm0iLCJkZWZhdWx0Rm9udEZhbWlseSIsImNyZWF0ZVR5cG9ncmFwaHkiLCJmb250RmFtaWx5IiwiZm9udFdlaWdodExpZ2h0IiwiZm9udFdlaWdodFJlZ3VsYXIiLCJmb250V2VpZ2h0TWVkaXVtIiwiZm9udFdlaWdodEJvbGQiLCJodG1sRm9udFNpemUiLCJhbGxWYXJpYW50cyIsInB4VG9SZW0yIiwiY29lZiIsInNpemUiLCJidWlsZFZhcmlhbnQiLCJmb250V2VpZ2h0IiwibGluZUhlaWdodCIsImxldHRlclNwYWNpbmciLCJjYXNpbmciLCJNYXRoIiwicm91bmQiLCJ2YXJpYW50cyIsImNhcHRpb24iLCJvdmVybGluZSIsImNsb25lIiwiY3JlYXRlU2hhZG93IiwicHgiLCJlYXNpbmciLCJlYXNlSW5PdXQiLCJlYXNlT3V0IiwiZWFzZUluIiwic2hhcnAiLCJzaG9ydGVzdCIsInNob3J0IiwiY29tcGxleCIsImVudGVyaW5nU2NyZWVuIiwibGVhdmluZ1NjcmVlbiIsImZvcm1hdE1zIiwibWlsbGlzZWNvbmRzIiwiZ2V0QXV0b0hlaWdodER1cmF0aW9uIiwiY29uc3RhbnQiLCJjcmVhdGVUcmFuc2l0aW9ucyIsImlucHV0VHJhbnNpdGlvbnMiLCJtZXJnZWRFYXNpbmciLCJtZXJnZWREdXJhdGlvbiIsIm9wdGlvbnMiLCJkdXJhdGlvbk9wdGlvbiIsImVhc2luZ09wdGlvbiIsImRlbGF5IiwiYW5pbWF0ZWRQcm9wIiwibW9iaWxlU3RlcHBlciIsImZhYiIsInNwZWVkRGlhbCIsImFwcEJhciIsImRyYXdlciIsIm1vZGFsIiwic25hY2tiYXIiLCJ0b29sdGlwIiwiYXJncyIsIm1peGluc0lucHV0IiwicGFsZXR0ZUlucHV0IiwidHJhbnNpdGlvbnNJbnB1dCIsInR5cG9ncmFwaHlJbnB1dCIsIm1vZGUiLCJjb250cmFzdFRocmVzaG9sZCIsImdldERlZmF1bHRQcmltYXJ5IiwiZ2V0RGVmYXVsdFNlY29uZGFyeSIsImdldERlZmF1bHRFcnJvciIsImluZm8iLCJnZXREZWZhdWx0SW5mbyIsInN1Y2Nlc3MiLCJnZXREZWZhdWx0U3VjY2VzcyIsIndhcm5pbmciLCJnZXREZWZhdWx0V2FybmluZyIsImdldENvbnRyYXN0VGV4dCIsImF1Z21lbnRDb2xvciIsIm1haW5TaGFkZSIsImxpZ2h0U2hhZGUiLCJkYXJrU2hhZGUiLCJKU09OIiwic3RyaW5naWZ5IiwiY29udHJhc3RUZXh0IiwibW9kZXMiLCJjb21tb24iLCJncmV5IiwiY3JlYXRlUGFsZXR0ZSIsInN5c3RlbVRoZW1lIiwibXVpVGhlbWUiLCJzaGFkb3dzIiwiekluZGV4IiwiYWNjIiwiYXJndW1lbnQiLCJ1bnN0YWJsZV9zeENvbmZpZyIsImRlZmF1bHRTeENvbmZpZyIsInVuc3RhYmxlX3N4Iiwic3R5bGVGdW5jdGlvblN4Iiwic3giLCJ0aGlzIiwiZWxldmF0aW9uIiwiYWxwaGFWYWx1ZSIsImxvZyIsInRvRml4ZWQiLCJyb290U2hvdWxkRm9yd2FyZFByb3AiLCJzbG90U2hvdWxkRm9yd2FyZFByb3AiLCJkZWZhdWx0VGhlbWUiLCJ1c2VUaGVtZSIsInJlZmxvdyIsInNjcm9sbFRvcCIsImdldFRyYW5zaXRpb25Qcm9wcyIsIl9zdHlsZSR0cmFuc2l0aW9uRHVyYSIsIl9zdHlsZSR0cmFuc2l0aW9uVGltaSIsInRpbWVvdXQiLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJ0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24iLCJ0cmFuc2l0aW9uRGVsYXkiLCJTeW1ib2wiLCJmb3IiLCJsb2NhbFRoZW1lIiwib3V0ZXJUaGVtZSIsIm1lcmdlT3V0ZXJMb2NhbFRoZW1lIiwibmVzdGVkIiwiVGhlbWVDb250ZXh0IiwiUHJvdmlkZXIiLCJHbG9iYWxTdHlsZXMiLCJnbG9iYWxTdHlsZXMiLCJvYmoiLCJrZXlzIiwidGFnIiwiaW50ZXJuYWxfcHJvY2Vzc1N0eWxlcyIsInByb2Nlc3NvciIsIl9fZW1vdGlvbl9zdHlsZXMiXSwic291cmNlUm9vdCI6IiJ9