"use strict";(self.webpackChunksrsrfl_react=self.webpackChunksrsrfl_react||[]).push([[495],{2335:(e,t,r)=>{r.d(t,{A:()=>y});var o=r(8587),n=r(8168),i=r(6540),a=r(3272),s=r(5659),l=r(627),d=r(1848),u=r(3541),p=r(8413),c=r(1609),m=r(1175);function f(e){return(0,c.A)("MuiFilledInput",e)}const h=(0,n.A)({},m.A,(0,p.A)("MuiFilledInput",["root","underline","input"]));var b=r(4848);const g=["disableUnderline","components","componentsProps","fullWidth","hiddenLabel","inputComponent","multiline","slotProps","slots","type"],A=(0,d.Ay)(l.Sh,{shouldForwardProp:e=>(0,d.ep)(e)||"classes"===e,name:"MuiFilledInput",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[...(0,l.WC)(e,t),!r.disableUnderline&&t.underline]}})((({theme:e,ownerState:t})=>{var r;const o="light"===e.palette.mode,i=o?"rgba(0, 0, 0, 0.42)":"rgba(255, 255, 255, 0.7)",a=o?"rgba(0, 0, 0, 0.06)":"rgba(255, 255, 255, 0.09)",s=o?"rgba(0, 0, 0, 0.09)":"rgba(255, 255, 255, 0.13)",l=o?"rgba(0, 0, 0, 0.12)":"rgba(255, 255, 255, 0.12)";return(0,n.A)({position:"relative",backgroundColor:e.vars?e.vars.palette.FilledInput.bg:a,borderTopLeftRadius:(e.vars||e).shape.borderRadius,borderTopRightRadius:(e.vars||e).shape.borderRadius,transition:e.transitions.create("background-color",{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut}),"&:hover":{backgroundColor:e.vars?e.vars.palette.FilledInput.hoverBg:s,"@media (hover: none)":{backgroundColor:e.vars?e.vars.palette.FilledInput.bg:a}},[`&.${h.focused}`]:{backgroundColor:e.vars?e.vars.palette.FilledInput.bg:a},[`&.${h.disabled}`]:{backgroundColor:e.vars?e.vars.palette.FilledInput.disabledBg:l}},!t.disableUnderline&&{"&:after":{borderBottom:`2px solid ${null==(r=(e.vars||e).palette[t.color||"primary"])?void 0:r.main}`,left:0,bottom:0,content:'""',position:"absolute",right:0,transform:"scaleX(0)",transition:e.transitions.create("transform",{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut}),pointerEvents:"none"},[`&.${h.focused}:after`]:{transform:"scaleX(1) translateX(0)"},[`&.${h.error}`]:{"&:before, &:after":{borderBottomColor:(e.vars||e).palette.error.main}},"&:before":{borderBottom:`1px solid ${e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / ${e.vars.opacity.inputUnderline})`:i}`,left:0,bottom:0,content:'"\\00a0"',position:"absolute",right:0,transition:e.transitions.create("border-bottom-color",{duration:e.transitions.duration.shorter}),pointerEvents:"none"},[`&:hover:not(.${h.disabled}, .${h.error}):before`]:{borderBottom:`1px solid ${(e.vars||e).palette.text.primary}`},[`&.${h.disabled}:before`]:{borderBottomStyle:"dotted"}},t.startAdornment&&{paddingLeft:12},t.endAdornment&&{paddingRight:12},t.multiline&&(0,n.A)({padding:"25px 12px 8px"},"small"===t.size&&{paddingTop:21,paddingBottom:4},t.hiddenLabel&&{paddingTop:16,paddingBottom:17},t.hiddenLabel&&"small"===t.size&&{paddingTop:8,paddingBottom:9}))})),v=(0,d.Ay)(l.f3,{name:"MuiFilledInput",slot:"Input",overridesResolver:l.Oj})((({theme:e,ownerState:t})=>(0,n.A)({paddingTop:25,paddingRight:12,paddingBottom:8,paddingLeft:12},!e.vars&&{"&:-webkit-autofill":{WebkitBoxShadow:"light"===e.palette.mode?null:"0 0 0 100px #266798 inset",WebkitTextFillColor:"light"===e.palette.mode?null:"#fff",caretColor:"light"===e.palette.mode?null:"#fff",borderTopLeftRadius:"inherit",borderTopRightRadius:"inherit"}},e.vars&&{"&:-webkit-autofill":{borderTopLeftRadius:"inherit",borderTopRightRadius:"inherit"},[e.getColorSchemeSelector("dark")]:{"&:-webkit-autofill":{WebkitBoxShadow:"0 0 0 100px #266798 inset",WebkitTextFillColor:"#fff",caretColor:"#fff"}}},"small"===t.size&&{paddingTop:21,paddingBottom:4},t.hiddenLabel&&{paddingTop:16,paddingBottom:17},t.startAdornment&&{paddingLeft:0},t.endAdornment&&{paddingRight:0},t.hiddenLabel&&"small"===t.size&&{paddingTop:8,paddingBottom:9},t.multiline&&{paddingTop:0,paddingBottom:0,paddingLeft:0,paddingRight:0}))),x=i.forwardRef((function(e,t){var r,i,d,p;const c=(0,u.A)({props:e,name:"MuiFilledInput"}),{components:m={},componentsProps:h,fullWidth:x=!1,inputComponent:y="input",multiline:w=!1,slotProps:S,slots:k={},type:$="text"}=c,C=(0,o.A)(c,g),z=(0,n.A)({},c,{fullWidth:x,inputComponent:y,multiline:w,type:$}),R=(e=>{const{classes:t,disableUnderline:r}=e,o={root:["root",!r&&"underline"],input:["input"]},i=(0,s.A)(o,f,t);return(0,n.A)({},t,i)})(c),W={root:{ownerState:z},input:{ownerState:z}},M=(null!=S?S:h)?(0,a.A)(W,null!=S?S:h):W,E=null!=(r=null!=(i=k.root)?i:m.Root)?r:A,F=null!=(d=null!=(p=k.input)?p:m.Input)?d:v;return(0,b.jsx)(l.Ay,(0,n.A)({slots:{root:E,input:F},componentsProps:M,fullWidth:x,inputComponent:y,multiline:w,ref:t,type:$},C,{classes:R}))}));x.muiName="Input";const y=x},779:(e,t,r)=>{r.d(t,{A:()=>x});var o=r(8587),n=r(8168),i=r(6540),a=r(4164),s=r(5659),l=r(3541),d=r(1848),u=r(2891),p=r(8466),c=r(6767),m=r(3800),f=r(8413),h=r(1609);function b(e){return(0,h.A)("MuiFormControl",e)}(0,f.A)("MuiFormControl",["root","marginNone","marginNormal","marginDense","fullWidth","disabled"]);var g=r(4848);const A=["children","className","color","component","disabled","error","focused","fullWidth","hiddenLabel","margin","required","size","variant"],v=(0,d.Ay)("div",{name:"MuiFormControl",slot:"Root",overridesResolver:({ownerState:e},t)=>(0,n.A)({},t.root,t[`margin${(0,p.A)(e.margin)}`],e.fullWidth&&t.fullWidth)})((({ownerState:e})=>(0,n.A)({display:"inline-flex",flexDirection:"column",position:"relative",minWidth:0,padding:0,margin:0,border:0,verticalAlign:"top"},"normal"===e.margin&&{marginTop:16,marginBottom:8},"dense"===e.margin&&{marginTop:8,marginBottom:4},e.fullWidth&&{width:"100%"}))),x=i.forwardRef((function(e,t){const r=(0,l.A)({props:e,name:"MuiFormControl"}),{children:d,className:f,color:h="primary",component:x="div",disabled:y=!1,error:w=!1,focused:S,fullWidth:k=!1,hiddenLabel:$=!1,margin:C="none",required:z=!1,size:R="medium",variant:W="outlined"}=r,M=(0,o.A)(r,A),E=(0,n.A)({},r,{color:h,component:x,disabled:y,error:w,fullWidth:k,hiddenLabel:$,margin:C,required:z,size:R,variant:W}),F=(e=>{const{classes:t,margin:r,fullWidth:o}=e,n={root:["root","none"!==r&&`margin${(0,p.A)(r)}`,o&&"fullWidth"]};return(0,s.A)(n,b,t)})(E),[B,L]=i.useState((()=>{let e=!1;return d&&i.Children.forEach(d,(t=>{if(!(0,c.A)(t,["Input","Select"]))return;const r=(0,c.A)(t,["Select"])?t.props.input:t;r&&(0,u.gr)(r.props)&&(e=!0)})),e})),[I,N]=i.useState((()=>{let e=!1;return d&&i.Children.forEach(d,(t=>{(0,c.A)(t,["Input","Select"])&&((0,u.lq)(t.props,!0)||(0,u.lq)(t.props.inputProps,!0))&&(e=!0)})),e})),[T,q]=i.useState(!1);y&&T&&q(!1);const j=void 0===S||y?T:S;let P;const O=i.useMemo((()=>({adornedStart:B,setAdornedStart:L,color:h,disabled:y,error:w,filled:I,focused:j,fullWidth:k,hiddenLabel:$,size:R,onBlur:()=>{q(!1)},onEmpty:()=>{N(!1)},onFilled:()=>{N(!0)},onFocus:()=>{q(!0)},registerEffect:P,required:z,variant:W})),[B,h,y,w,I,j,k,$,P,z,R,W]);return(0,g.jsx)(m.A.Provider,{value:O,children:(0,g.jsx)(v,(0,n.A)({as:x,ownerState:E,className:(0,a.A)(F.root,f),ref:t},M,{children:d}))})}))},3800:(e,t,r)=>{r.d(t,{A:()=>o});const o=r(6540).createContext(void 0)},8086:(e,t,r)=>{function o({props:e,states:t,muiFormControl:r}){return t.reduce(((t,o)=>(t[o]=e[o],r&&void 0===e[o]&&(t[o]=r[o]),t)),{})}r.d(t,{A:()=>o})},9716:(e,t,r)=>{r.d(t,{A:()=>i});var o=r(6540),n=r(3800);function i(){return o.useContext(n.A)}},6347:(e,t,r)=>{r.d(t,{A:()=>y});var o=r(8587),n=r(8168),i=r(6540),a=r(4164),s=r(5659),l=r(8086),d=r(9716),u=r(1848),p=r(8466),c=r(8413),m=r(1609);function f(e){return(0,m.A)("MuiFormHelperText",e)}const h=(0,c.A)("MuiFormHelperText",["root","error","disabled","sizeSmall","sizeMedium","contained","focused","filled","required"]);var b,g=r(3541),A=r(4848);const v=["children","className","component","disabled","error","filled","focused","margin","required","variant"],x=(0,u.Ay)("p",{name:"MuiFormHelperText",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[t.root,r.size&&t[`size${(0,p.A)(r.size)}`],r.contained&&t.contained,r.filled&&t.filled]}})((({theme:e,ownerState:t})=>(0,n.A)({color:(e.vars||e).palette.text.secondary},e.typography.caption,{textAlign:"left",marginTop:3,marginRight:0,marginBottom:0,marginLeft:0,[`&.${h.disabled}`]:{color:(e.vars||e).palette.text.disabled},[`&.${h.error}`]:{color:(e.vars||e).palette.error.main}},"small"===t.size&&{marginTop:4},t.contained&&{marginLeft:14,marginRight:14}))),y=i.forwardRef((function(e,t){const r=(0,g.A)({props:e,name:"MuiFormHelperText"}),{children:i,className:u,component:c="p"}=r,m=(0,o.A)(r,v),h=(0,d.A)(),y=(0,l.A)({props:r,muiFormControl:h,states:["variant","size","disabled","error","filled","focused","required"]}),w=(0,n.A)({},r,{component:c,contained:"filled"===y.variant||"outlined"===y.variant,variant:y.variant,size:y.size,disabled:y.disabled,error:y.error,filled:y.filled,focused:y.focused,required:y.required}),S=(e=>{const{classes:t,contained:r,size:o,disabled:n,error:i,filled:a,focused:l,required:d}=e,u={root:["root",n&&"disabled",i&&"error",o&&`size${(0,p.A)(o)}`,r&&"contained",l&&"focused",a&&"filled",d&&"required"]};return(0,s.A)(u,f,t)})(w);return(0,A.jsx)(x,(0,n.A)({as:c,ownerState:w,className:(0,a.A)(S.root,u),ref:t},m,{children:" "===i?b||(b=(0,A.jsx)("span",{className:"notranslate",children:"​"})):i}))}))},5327:(e,t,r)=>{r.d(t,{A:()=>l});var o=r(8168),n=(r(6540),r(2967)),i=r(2765),a=r(8312),s=r(4848);const l=function(e){return(0,s.jsx)(n.A,(0,o.A)({},e,{defaultTheme:i.A,themeId:a.A}))}},8239:(e,t,r)=>{r.d(t,{Ay:()=>$});var o=r(8587),n=r(8168),i=r(6540),a=r(4164),s=r(9452),l=r(9599),d=r(5659),u=r(1848),p=r(3541),c=r(4675);const m=i.createContext();var f=r(8413),h=r(1609);function b(e){return(0,h.A)("MuiGrid",e)}const g=["auto",!0,1,2,3,4,5,6,7,8,9,10,11,12],A=(0,f.A)("MuiGrid",["root","container","item","zeroMinWidth",...[0,1,2,3,4,5,6,7,8,9,10].map((e=>`spacing-xs-${e}`)),...["column-reverse","column","row-reverse","row"].map((e=>`direction-xs-${e}`)),...["nowrap","wrap-reverse","wrap"].map((e=>`wrap-xs-${e}`)),...g.map((e=>`grid-xs-${e}`)),...g.map((e=>`grid-sm-${e}`)),...g.map((e=>`grid-md-${e}`)),...g.map((e=>`grid-lg-${e}`)),...g.map((e=>`grid-xl-${e}`))]);var v=r(4848);const x=["className","columns","columnSpacing","component","container","direction","item","rowSpacing","spacing","wrap","zeroMinWidth"];function y(e){const t=parseFloat(e);return`${t}${String(e).replace(String(t),"")||"px"}`}function w({breakpoints:e,values:t}){let r="";Object.keys(t).forEach((e=>{""===r&&0!==t[e]&&(r=e)}));const o=Object.keys(e).sort(((t,r)=>e[t]-e[r]));return o.slice(0,o.indexOf(r))}const S=(0,u.Ay)("div",{name:"MuiGrid",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e,{container:o,direction:n,item:i,spacing:a,wrap:s,zeroMinWidth:l,breakpoints:d}=r;let u=[];o&&(u=function(e,t,r={}){if(!e||e<=0)return[];if("string"==typeof e&&!Number.isNaN(Number(e))||"number"==typeof e)return[r[`spacing-xs-${String(e)}`]];const o=[];return t.forEach((t=>{const n=e[t];Number(n)>0&&o.push(r[`spacing-${t}-${String(n)}`])})),o}(a,d,t));const p=[];return d.forEach((e=>{const o=r[e];o&&p.push(t[`grid-${e}-${String(o)}`])})),[t.root,o&&t.container,i&&t.item,l&&t.zeroMinWidth,...u,"row"!==n&&t[`direction-xs-${String(n)}`],"wrap"!==s&&t[`wrap-xs-${String(s)}`],...p]}})((({ownerState:e})=>(0,n.A)({boxSizing:"border-box"},e.container&&{display:"flex",flexWrap:"wrap",width:"100%"},e.item&&{margin:0},e.zeroMinWidth&&{minWidth:0},"wrap"!==e.wrap&&{flexWrap:e.wrap})),(function({theme:e,ownerState:t}){const r=(0,s.kW)({values:t.direction,breakpoints:e.breakpoints.values});return(0,s.NI)({theme:e},r,(e=>{const t={flexDirection:e};return 0===e.indexOf("column")&&(t[`& > .${A.item}`]={maxWidth:"none"}),t}))}),(function({theme:e,ownerState:t}){const{container:r,rowSpacing:o}=t;let n={};if(r&&0!==o){const t=(0,s.kW)({values:o,breakpoints:e.breakpoints.values});let r;"object"==typeof t&&(r=w({breakpoints:e.breakpoints.values,values:t})),n=(0,s.NI)({theme:e},t,((t,o)=>{var n;const i=e.spacing(t);return"0px"!==i?{marginTop:`-${y(i)}`,[`& > .${A.item}`]:{paddingTop:y(i)}}:null!=(n=r)&&n.includes(o)?{}:{marginTop:0,[`& > .${A.item}`]:{paddingTop:0}}}))}return n}),(function({theme:e,ownerState:t}){const{container:r,columnSpacing:o}=t;let n={};if(r&&0!==o){const t=(0,s.kW)({values:o,breakpoints:e.breakpoints.values});let r;"object"==typeof t&&(r=w({breakpoints:e.breakpoints.values,values:t})),n=(0,s.NI)({theme:e},t,((t,o)=>{var n;const i=e.spacing(t);return"0px"!==i?{width:`calc(100% + ${y(i)})`,marginLeft:`-${y(i)}`,[`& > .${A.item}`]:{paddingLeft:y(i)}}:null!=(n=r)&&n.includes(o)?{}:{width:"100%",marginLeft:0,[`& > .${A.item}`]:{paddingLeft:0}}}))}return n}),(function({theme:e,ownerState:t}){let r;return e.breakpoints.keys.reduce(((o,i)=>{let a={};if(t[i]&&(r=t[i]),!r)return o;if(!0===r)a={flexBasis:0,flexGrow:1,maxWidth:"100%"};else if("auto"===r)a={flexBasis:"auto",flexGrow:0,flexShrink:0,maxWidth:"none",width:"auto"};else{const l=(0,s.kW)({values:t.columns,breakpoints:e.breakpoints.values}),d="object"==typeof l?l[i]:l;if(null==d)return o;const u=Math.round(r/d*1e8)/1e6+"%";let p={};if(t.container&&t.item&&0!==t.columnSpacing){const r=e.spacing(t.columnSpacing);if("0px"!==r){const e=`calc(${u} + ${y(r)})`;p={flexBasis:e,maxWidth:e}}}a=(0,n.A)({flexBasis:u,flexGrow:0,maxWidth:u},p)}return 0===e.breakpoints.values[i]?Object.assign(o,a):o[e.breakpoints.up(i)]=a,o}),{})})),k=i.forwardRef((function(e,t){const r=(0,p.A)({props:e,name:"MuiGrid"}),{breakpoints:s}=(0,c.A)(),u=(0,l.A)(r),{className:f,columns:h,columnSpacing:g,component:A="div",container:y=!1,direction:w="row",item:k=!1,rowSpacing:$,spacing:C=0,wrap:z="wrap",zeroMinWidth:R=!1}=u,W=(0,o.A)(u,x),M=$||C,E=g||C,F=i.useContext(m),B=y?h||12:F,L={},I=(0,n.A)({},W);s.keys.forEach((e=>{null!=W[e]&&(L[e]=W[e],delete I[e])}));const N=(0,n.A)({},u,{columns:B,container:y,direction:w,item:k,rowSpacing:M,columnSpacing:E,wrap:z,zeroMinWidth:R,spacing:C},L,{breakpoints:s.keys}),T=(e=>{const{classes:t,container:r,direction:o,item:n,spacing:i,wrap:a,zeroMinWidth:s,breakpoints:l}=e;let u=[];r&&(u=function(e,t){if(!e||e<=0)return[];if("string"==typeof e&&!Number.isNaN(Number(e))||"number"==typeof e)return[`spacing-xs-${String(e)}`];const r=[];return t.forEach((t=>{const o=e[t];if(Number(o)>0){const e=`spacing-${t}-${String(o)}`;r.push(e)}})),r}(i,l));const p=[];l.forEach((t=>{const r=e[t];r&&p.push(`grid-${t}-${String(r)}`)}));const c={root:["root",r&&"container",n&&"item",s&&"zeroMinWidth",...u,"row"!==o&&`direction-xs-${String(o)}`,"wrap"!==a&&`wrap-xs-${String(a)}`,...p]};return(0,d.A)(c,b,t)})(N);return(0,v.jsx)(m.Provider,{value:B,children:(0,v.jsx)(S,(0,n.A)({ownerState:N,className:(0,a.A)(T.root,f),as:A,ref:t},I))})})),$=k},7467:(e,t,r)=>{r.d(t,{A:()=>b});var o=r(8168),n=r(8587),i=r(6540),a=r(7353),s=r(4675),l=r(5186),d=r(6852),u=r(4848);const p=["addEndListener","appear","children","easing","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","style","timeout","TransitionComponent"];function c(e){return`scale(${e}, ${e**2})`}const m={entering:{opacity:1,transform:c(1)},entered:{opacity:1,transform:"none"}},f="undefined"!=typeof navigator&&/^((?!chrome|android).)*(safari|mobile)/i.test(navigator.userAgent)&&/(os |version\/)15(.|_)4/i.test(navigator.userAgent),h=i.forwardRef((function(e,t){const{addEndListener:r,appear:h=!0,children:b,easing:g,in:A,onEnter:v,onEntered:x,onEntering:y,onExit:w,onExited:S,onExiting:k,style:$,timeout:C="auto",TransitionComponent:z=a.Ay}=e,R=(0,n.A)(e,p),W=i.useRef(),M=i.useRef(),E=(0,s.A)(),F=i.useRef(null),B=(0,d.A)(F,b.ref,t),L=e=>t=>{if(e){const r=F.current;void 0===t?e(r):e(r,t)}},I=L(y),N=L(((e,t)=>{(0,l.q)(e);const{duration:r,delay:o,easing:n}=(0,l.c)({style:$,timeout:C,easing:g},{mode:"enter"});let i;"auto"===C?(i=E.transitions.getAutoHeightDuration(e.clientHeight),M.current=i):i=r,e.style.transition=[E.transitions.create("opacity",{duration:i,delay:o}),E.transitions.create("transform",{duration:f?i:.666*i,delay:o,easing:n})].join(","),v&&v(e,t)})),T=L(x),q=L(k),j=L((e=>{const{duration:t,delay:r,easing:o}=(0,l.c)({style:$,timeout:C,easing:g},{mode:"exit"});let n;"auto"===C?(n=E.transitions.getAutoHeightDuration(e.clientHeight),M.current=n):n=t,e.style.transition=[E.transitions.create("opacity",{duration:n,delay:r}),E.transitions.create("transform",{duration:f?n:.666*n,delay:f?r:r||.333*n,easing:o})].join(","),e.style.opacity=0,e.style.transform=c(.75),w&&w(e)})),P=L(S);return i.useEffect((()=>()=>{clearTimeout(W.current)}),[]),(0,u.jsx)(z,(0,o.A)({appear:h,in:A,nodeRef:F,onEnter:N,onEntered:T,onEntering:I,onExit:j,onExited:P,onExiting:q,addEndListener:e=>{"auto"===C&&(W.current=setTimeout(e,M.current||0)),r&&r(F.current,e)},timeout:"auto"===C?null:C},R,{children:(e,t)=>i.cloneElement(b,(0,o.A)({style:(0,o.A)({opacity:0,transform:c(.75),visibility:"exited"!==e||A?void 0:"hidden"},m[e],$,b.props.style),ref:B},t))}))}));h.muiSupportAuto=!0;const b=h},1881:(e,t,r)=>{r.d(t,{A:()=>y});var o=r(8587),n=r(8168),i=r(6540),a=r(5659),s=r(3272),l=r(627),d=r(1848),u=r(3541),p=r(8413),c=r(1609),m=r(1175);function f(e){return(0,c.A)("MuiInput",e)}const h=(0,n.A)({},m.A,(0,p.A)("MuiInput",["root","underline","input"]));var b=r(4848);const g=["disableUnderline","components","componentsProps","fullWidth","inputComponent","multiline","slotProps","slots","type"],A=(0,d.Ay)(l.Sh,{shouldForwardProp:e=>(0,d.ep)(e)||"classes"===e,name:"MuiInput",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[...(0,l.WC)(e,t),!r.disableUnderline&&t.underline]}})((({theme:e,ownerState:t})=>{let r="light"===e.palette.mode?"rgba(0, 0, 0, 0.42)":"rgba(255, 255, 255, 0.7)";return e.vars&&(r=`rgba(${e.vars.palette.common.onBackgroundChannel} / ${e.vars.opacity.inputUnderline})`),(0,n.A)({position:"relative"},t.formControl&&{"label + &":{marginTop:16}},!t.disableUnderline&&{"&:after":{borderBottom:`2px solid ${(e.vars||e).palette[t.color].main}`,left:0,bottom:0,content:'""',position:"absolute",right:0,transform:"scaleX(0)",transition:e.transitions.create("transform",{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut}),pointerEvents:"none"},[`&.${h.focused}:after`]:{transform:"scaleX(1) translateX(0)"},[`&.${h.error}`]:{"&:before, &:after":{borderBottomColor:(e.vars||e).palette.error.main}},"&:before":{borderBottom:`1px solid ${r}`,left:0,bottom:0,content:'"\\00a0"',position:"absolute",right:0,transition:e.transitions.create("border-bottom-color",{duration:e.transitions.duration.shorter}),pointerEvents:"none"},[`&:hover:not(.${h.disabled}, .${h.error}):before`]:{borderBottom:`2px solid ${(e.vars||e).palette.text.primary}`,"@media (hover: none)":{borderBottom:`1px solid ${r}`}},[`&.${h.disabled}:before`]:{borderBottomStyle:"dotted"}})})),v=(0,d.Ay)(l.f3,{name:"MuiInput",slot:"Input",overridesResolver:l.Oj})({}),x=i.forwardRef((function(e,t){var r,i,d,p;const c=(0,u.A)({props:e,name:"MuiInput"}),{disableUnderline:m,components:h={},componentsProps:x,fullWidth:y=!1,inputComponent:w="input",multiline:S=!1,slotProps:k,slots:$={},type:C="text"}=c,z=(0,o.A)(c,g),R=(e=>{const{classes:t,disableUnderline:r}=e,o={root:["root",!r&&"underline"],input:["input"]},i=(0,a.A)(o,f,t);return(0,n.A)({},t,i)})(c),W={root:{ownerState:{disableUnderline:m}}},M=(null!=k?k:x)?(0,s.A)(null!=k?k:x,W):W,E=null!=(r=null!=(i=$.root)?i:h.Root)?r:A,F=null!=(d=null!=(p=$.input)?p:h.Input)?d:v;return(0,b.jsx)(l.Ay,(0,n.A)({slots:{root:E,input:F},slotProps:M,fullWidth:y,inputComponent:w,multiline:S,ref:t,type:C},z,{classes:R}))}));x.muiName="Input";const y=x},627:(e,t,r)=>{r.d(t,{Ay:()=>W,Oj:()=>$,Sh:()=>C,WC:()=>k,f3:()=>z});var o=r(8587),n=r(8168),i=r(2599),a=r(6540),s=r(4164),l=r(5659),d=r(3705),u=r(5419),p=r(8086),c=r(3800),m=r(9716),f=r(1848),h=r(3541),b=r(8466),g=r(6852),A=r(2778),v=r(5327),x=r(2891),y=r(1175),w=r(4848);const S=["aria-describedby","autoComplete","autoFocus","className","color","components","componentsProps","defaultValue","disabled","disableInjectingGlobalStyles","endAdornment","error","fullWidth","id","inputComponent","inputProps","inputRef","margin","maxRows","minRows","multiline","name","onBlur","onChange","onClick","onFocus","onKeyDown","onKeyUp","placeholder","readOnly","renderSuffix","rows","size","slotProps","slots","startAdornment","type","value"],k=(e,t)=>{const{ownerState:r}=e;return[t.root,r.formControl&&t.formControl,r.startAdornment&&t.adornedStart,r.endAdornment&&t.adornedEnd,r.error&&t.error,"small"===r.size&&t.sizeSmall,r.multiline&&t.multiline,r.color&&t[`color${(0,b.A)(r.color)}`],r.fullWidth&&t.fullWidth,r.hiddenLabel&&t.hiddenLabel]},$=(e,t)=>{const{ownerState:r}=e;return[t.input,"small"===r.size&&t.inputSizeSmall,r.multiline&&t.inputMultiline,"search"===r.type&&t.inputTypeSearch,r.startAdornment&&t.inputAdornedStart,r.endAdornment&&t.inputAdornedEnd,r.hiddenLabel&&t.inputHiddenLabel]},C=(0,f.Ay)("div",{name:"MuiInputBase",slot:"Root",overridesResolver:k})((({theme:e,ownerState:t})=>(0,n.A)({},e.typography.body1,{color:(e.vars||e).palette.text.primary,lineHeight:"1.4375em",boxSizing:"border-box",position:"relative",cursor:"text",display:"inline-flex",alignItems:"center",[`&.${y.A.disabled}`]:{color:(e.vars||e).palette.text.disabled,cursor:"default"}},t.multiline&&(0,n.A)({padding:"4px 0 5px"},"small"===t.size&&{paddingTop:1}),t.fullWidth&&{width:"100%"}))),z=(0,f.Ay)("input",{name:"MuiInputBase",slot:"Input",overridesResolver:$})((({theme:e,ownerState:t})=>{const r="light"===e.palette.mode,o=(0,n.A)({color:"currentColor"},e.vars?{opacity:e.vars.opacity.inputPlaceholder}:{opacity:r?.42:.5},{transition:e.transitions.create("opacity",{duration:e.transitions.duration.shorter})}),i={opacity:"0 !important"},a=e.vars?{opacity:e.vars.opacity.inputPlaceholder}:{opacity:r?.42:.5};return(0,n.A)({font:"inherit",letterSpacing:"inherit",color:"currentColor",padding:"4px 0 5px",border:0,boxSizing:"content-box",background:"none",height:"1.4375em",margin:0,WebkitTapHighlightColor:"transparent",display:"block",minWidth:0,width:"100%",animationName:"mui-auto-fill-cancel",animationDuration:"10ms","&::-webkit-input-placeholder":o,"&::-moz-placeholder":o,"&:-ms-input-placeholder":o,"&::-ms-input-placeholder":o,"&:focus":{outline:0},"&:invalid":{boxShadow:"none"},"&::-webkit-search-decoration":{WebkitAppearance:"none"},[`label[data-shrink=false] + .${y.A.formControl} &`]:{"&::-webkit-input-placeholder":i,"&::-moz-placeholder":i,"&:-ms-input-placeholder":i,"&::-ms-input-placeholder":i,"&:focus::-webkit-input-placeholder":a,"&:focus::-moz-placeholder":a,"&:focus:-ms-input-placeholder":a,"&:focus::-ms-input-placeholder":a},[`&.${y.A.disabled}`]:{opacity:1,WebkitTextFillColor:(e.vars||e).palette.text.disabled},"&:-webkit-autofill":{animationDuration:"5000s",animationName:"mui-auto-fill"}},"small"===t.size&&{paddingTop:1},t.multiline&&{height:"auto",resize:"none",padding:0,paddingTop:0},"search"===t.type&&{MozAppearance:"textfield"})})),R=(0,w.jsx)(v.A,{styles:{"@keyframes mui-auto-fill":{from:{display:"block"}},"@keyframes mui-auto-fill-cancel":{from:{display:"block"}}}}),W=a.forwardRef((function(e,t){var r;const f=(0,h.A)({props:e,name:"MuiInputBase"}),{"aria-describedby":v,autoComplete:k,autoFocus:$,className:W,components:M={},componentsProps:E={},defaultValue:F,disabled:B,disableInjectingGlobalStyles:L,endAdornment:I,fullWidth:N=!1,id:T,inputComponent:q="input",inputProps:j={},inputRef:P,maxRows:O,minRows:U,multiline:H=!1,name:D,onBlur:G,onChange:K,onClick:X,onFocus:V,onKeyDown:_,onKeyUp:J,placeholder:Q,readOnly:Y,renderSuffix:Z,rows:ee,slotProps:te={},slots:re={},startAdornment:oe,type:ne="text",value:ie}=f,ae=(0,o.A)(f,S),se=null!=j.value?j.value:ie,{current:le}=a.useRef(null!=se),de=a.useRef(),ue=a.useCallback((e=>{}),[]),pe=(0,g.A)(de,P,j.ref,ue),[ce,me]=a.useState(!1),fe=(0,m.A)(),he=(0,p.A)({props:f,muiFormControl:fe,states:["color","disabled","error","hiddenLabel","size","required","filled"]});he.focused=fe?fe.focused:ce,a.useEffect((()=>{!fe&&B&&ce&&(me(!1),G&&G())}),[fe,B,ce,G]);const be=fe&&fe.onFilled,ge=fe&&fe.onEmpty,Ae=a.useCallback((e=>{(0,x.lq)(e)?be&&be():ge&&ge()}),[be,ge]);(0,A.A)((()=>{le&&Ae({value:se})}),[se,Ae,le]),a.useEffect((()=>{Ae(de.current)}),[]);let ve=q,xe=j;H&&"input"===ve&&(xe=ee?(0,n.A)({type:void 0,minRows:ee,maxRows:ee},xe):(0,n.A)({type:void 0,maxRows:O,minRows:U},xe),ve=d.h),a.useEffect((()=>{fe&&fe.setAdornedStart(Boolean(oe))}),[fe,oe]);const ye=(0,n.A)({},f,{color:he.color||"primary",disabled:he.disabled,endAdornment:I,error:he.error,focused:he.focused,formControl:fe,fullWidth:N,hiddenLabel:he.hiddenLabel,multiline:H,size:he.size,startAdornment:oe,type:ne}),we=(e=>{const{classes:t,color:r,disabled:o,error:n,endAdornment:i,focused:a,formControl:s,fullWidth:d,hiddenLabel:u,multiline:p,readOnly:c,size:m,startAdornment:f,type:h}=e,g={root:["root",`color${(0,b.A)(r)}`,o&&"disabled",n&&"error",d&&"fullWidth",a&&"focused",s&&"formControl",m&&"medium"!==m&&`size${(0,b.A)(m)}`,p&&"multiline",f&&"adornedStart",i&&"adornedEnd",u&&"hiddenLabel",c&&"readOnly"],input:["input",o&&"disabled","search"===h&&"inputTypeSearch",p&&"inputMultiline","small"===m&&"inputSizeSmall",u&&"inputHiddenLabel",f&&"inputAdornedStart",i&&"inputAdornedEnd",c&&"readOnly"]};return(0,l.A)(g,y.g,t)})(ye),Se=re.root||M.Root||C,ke=te.root||E.root||{},$e=re.input||M.Input||z;return xe=(0,n.A)({},xe,null!=(r=te.input)?r:E.input),(0,w.jsxs)(a.Fragment,{children:[!L&&R,(0,w.jsxs)(Se,(0,n.A)({},ke,!(0,u.g)(Se)&&{ownerState:(0,n.A)({},ye,ke.ownerState)},{ref:t,onClick:e=>{de.current&&e.currentTarget===e.target&&de.current.focus(),X&&X(e)}},ae,{className:(0,s.A)(we.root,ke.className,W,Y&&"MuiInputBase-readOnly"),children:[oe,(0,w.jsx)(c.A.Provider,{value:null,children:(0,w.jsx)($e,(0,n.A)({ownerState:ye,"aria-invalid":he.error,"aria-describedby":v,autoComplete:k,autoFocus:$,defaultValue:F,disabled:he.disabled,id:T,onAnimationStart:e=>{Ae("mui-auto-fill-cancel"===e.animationName?de.current:{value:"x"})},name:D,placeholder:Q,readOnly:Y,required:he.required,rows:ee,value:se,onKeyDown:_,onKeyUp:J,type:ne},xe,!(0,u.g)($e)&&{as:ve,ownerState:(0,n.A)({},ye,xe.ownerState)},{ref:pe,className:(0,s.A)(we.input,xe.className,Y&&"MuiInputBase-readOnly"),onBlur:e=>{G&&G(e),j.onBlur&&j.onBlur(e),fe&&fe.onBlur?fe.onBlur(e):me(!1)},onChange:(e,...t)=>{if(!le){const t=e.target||de.current;if(null==t)throw new Error((0,i.A)(1));Ae({value:t.value})}j.onChange&&j.onChange(e,...t),K&&K(e,...t)},onFocus:e=>{he.disabled?e.stopPropagation():(V&&V(e),j.onFocus&&j.onFocus(e),fe&&fe.onFocus?fe.onFocus(e):me(!0))}}))}),I,Z?Z((0,n.A)({},he,{startAdornment:oe})):null]}))]})}))},1175:(e,t,r)=>{r.d(t,{A:()=>a,g:()=>i});var o=r(8413),n=r(1609);function i(e){return(0,n.A)("MuiInputBase",e)}const a=(0,o.A)("MuiInputBase",["root","formControl","focused","disabled","adornedStart","adornedEnd","error","sizeSmall","multiline","colorSecondary","fullWidth","hiddenLabel","readOnly","input","inputSizeSmall","inputMultiline","inputTypeSearch","inputAdornedStart","inputAdornedEnd","inputHiddenLabel"])},2891:(e,t,r)=>{function o(e){return null!=e&&!(Array.isArray(e)&&0===e.length)}function n(e,t=!1){return e&&(o(e.value)&&""!==e.value||t&&o(e.defaultValue)&&""!==e.defaultValue)}function i(e){return e.startAdornment}r.d(t,{gr:()=>i,lq:()=>n})},4433:(e,t,r)=>{r.d(t,{A:()=>$});var o=r(8587),n=r(8168),i=r(6540),a=r(5659),s=r(4164),l=r(8086),d=r(9716),u=r(8466),p=r(3541),c=r(1848),m=r(8413),f=r(1609);function h(e){return(0,f.A)("MuiFormLabel",e)}const b=(0,m.A)("MuiFormLabel",["root","colorSecondary","focused","disabled","error","filled","required","asterisk"]);var g=r(4848);const A=["children","className","color","component","disabled","error","filled","focused","required"],v=(0,c.Ay)("label",{name:"MuiFormLabel",slot:"Root",overridesResolver:({ownerState:e},t)=>(0,n.A)({},t.root,"secondary"===e.color&&t.colorSecondary,e.filled&&t.filled)})((({theme:e,ownerState:t})=>(0,n.A)({color:(e.vars||e).palette.text.secondary},e.typography.body1,{lineHeight:"1.4375em",padding:0,position:"relative",[`&.${b.focused}`]:{color:(e.vars||e).palette[t.color].main},[`&.${b.disabled}`]:{color:(e.vars||e).palette.text.disabled},[`&.${b.error}`]:{color:(e.vars||e).palette.error.main}}))),x=(0,c.Ay)("span",{name:"MuiFormLabel",slot:"Asterisk",overridesResolver:(e,t)=>t.asterisk})((({theme:e})=>({[`&.${b.error}`]:{color:(e.vars||e).palette.error.main}}))),y=i.forwardRef((function(e,t){const r=(0,p.A)({props:e,name:"MuiFormLabel"}),{children:i,className:c,component:m="label"}=r,f=(0,o.A)(r,A),b=(0,d.A)(),y=(0,l.A)({props:r,muiFormControl:b,states:["color","required","focused","disabled","error","filled"]}),w=(0,n.A)({},r,{color:y.color||"primary",component:m,disabled:y.disabled,error:y.error,filled:y.filled,focused:y.focused,required:y.required}),S=(e=>{const{classes:t,color:r,focused:o,disabled:n,error:i,filled:s,required:l}=e,d={root:["root",`color${(0,u.A)(r)}`,n&&"disabled",i&&"error",s&&"filled",o&&"focused",l&&"required"],asterisk:["asterisk",i&&"error"]};return(0,a.A)(d,h,t)})(w);return(0,g.jsxs)(v,(0,n.A)({as:m,ownerState:w,className:(0,s.A)(S.root,c),ref:t},f,{children:[i,y.required&&(0,g.jsxs)(x,{ownerState:w,"aria-hidden":!0,className:S.asterisk,children:[" ","*"]})]}))}));function w(e){return(0,f.A)("MuiInputLabel",e)}(0,m.A)("MuiInputLabel",["root","focused","disabled","error","required","asterisk","formControl","sizeSmall","shrink","animated","standard","filled","outlined"]);const S=["disableAnimation","margin","shrink","variant","className"],k=(0,c.Ay)(y,{shouldForwardProp:e=>(0,c.ep)(e)||"classes"===e,name:"MuiInputLabel",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[{[`& .${b.asterisk}`]:t.asterisk},t.root,r.formControl&&t.formControl,"small"===r.size&&t.sizeSmall,r.shrink&&t.shrink,!r.disableAnimation&&t.animated,r.focused&&t.focused,t[r.variant]]}})((({theme:e,ownerState:t})=>(0,n.A)({display:"block",transformOrigin:"top left",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"100%"},t.formControl&&{position:"absolute",left:0,top:0,transform:"translate(0, 20px) scale(1)"},"small"===t.size&&{transform:"translate(0, 17px) scale(1)"},t.shrink&&{transform:"translate(0, -1.5px) scale(0.75)",transformOrigin:"top left",maxWidth:"133%"},!t.disableAnimation&&{transition:e.transitions.create(["color","transform","max-width"],{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut})},"filled"===t.variant&&(0,n.A)({zIndex:1,pointerEvents:"none",transform:"translate(12px, 16px) scale(1)",maxWidth:"calc(100% - 24px)"},"small"===t.size&&{transform:"translate(12px, 13px) scale(1)"},t.shrink&&(0,n.A)({userSelect:"none",pointerEvents:"auto",transform:"translate(12px, 7px) scale(0.75)",maxWidth:"calc(133% - 24px)"},"small"===t.size&&{transform:"translate(12px, 4px) scale(0.75)"})),"outlined"===t.variant&&(0,n.A)({zIndex:1,pointerEvents:"none",transform:"translate(14px, 16px) scale(1)",maxWidth:"calc(100% - 24px)"},"small"===t.size&&{transform:"translate(14px, 9px) scale(1)"},t.shrink&&{userSelect:"none",pointerEvents:"auto",maxWidth:"calc(133% - 32px)",transform:"translate(14px, -9px) scale(0.75)"})))),$=i.forwardRef((function(e,t){const r=(0,p.A)({name:"MuiInputLabel",props:e}),{disableAnimation:i=!1,shrink:c,className:m}=r,f=(0,o.A)(r,S),h=(0,d.A)();let b=c;void 0===b&&h&&(b=h.filled||h.focused||h.adornedStart);const A=(0,l.A)({props:r,muiFormControl:h,states:["size","variant","required","focused"]}),v=(0,n.A)({},r,{disableAnimation:i,formControl:h,shrink:b,size:A.size,variant:A.variant,required:A.required,focused:A.focused}),x=(e=>{const{classes:t,formControl:r,size:o,shrink:i,disableAnimation:s,variant:l,required:d}=e,p={root:["root",r&&"formControl",!s&&"animated",i&&"shrink",o&&"normal"!==o&&`size${(0,u.A)(o)}`,l],asterisk:[d&&"asterisk"]},c=(0,a.A)(p,w,t);return(0,n.A)({},t,c)})(v);return(0,g.jsx)(k,(0,n.A)({"data-shrink":b,ownerState:v,ref:t,className:(0,s.A)(x.root,m)},f,{classes:x}))}))}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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RUFDTHlDLFdBQVcsRUFBQTRCLEVBQUEsR0FBS3RELEVBQVFDLEtBQU15QixJQUM3QjNCLEVBQU8sQ0FDUkMsUUFBU0EsSUFFYixHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRmlsbGVkSW5wdXQvZmlsbGVkSW5wdXRDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0ZpbGxlZElucHV0L0ZpbGxlZElucHV0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC9Gb3JtQ29udHJvbC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC9Gb3JtQ29udHJvbENvbnRleHQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtSGVscGVyVGV4dC9mb3JtSGVscGVyVGV4dENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUhlbHBlclRleHQvRm9ybUhlbHBlclRleHQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvR2xvYmFsU3R5bGVzL0dsb2JhbFN0eWxlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9HcmlkL0dyaWRDb250ZXh0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0dyaWQvZ3JpZENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvR3JpZC9HcmlkLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0dyb3cvR3Jvdy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dC9pbnB1dENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvSW5wdXQvSW5wdXQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvSW5wdXRCYXNlL0lucHV0QmFzZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dEJhc2UvaW5wdXRCYXNlQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dEJhc2UvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUxhYmVsL2Zvcm1MYWJlbENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUxhYmVsL0Zvcm1MYWJlbC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dExhYmVsL2lucHV0TGFiZWxDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0lucHV0TGFiZWwvSW5wdXRMYWJlbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmltcG9ydCB7IGlucHV0QmFzZUNsYXNzZXMgfSBmcm9tICcuLi9JbnB1dEJhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGxlZElucHV0VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlGaWxsZWRJbnB1dCcsIHNsb3QpO1xufVxuY29uc3QgZmlsbGVkSW5wdXRDbGFzc2VzID0gX2V4dGVuZHMoe30sIGlucHV0QmFzZUNsYXNzZXMsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZpbGxlZElucHV0JywgWydyb290JywgJ3VuZGVybGluZScsICdpbnB1dCddKSk7XG5leHBvcnQgZGVmYXVsdCBmaWxsZWRJbnB1dENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiZGlzYWJsZVVuZGVybGluZVwiLCBcImNvbXBvbmVudHNcIiwgXCJjb21wb25lbnRzUHJvcHNcIiwgXCJmdWxsV2lkdGhcIiwgXCJoaWRkZW5MYWJlbFwiLCBcImlucHV0Q29tcG9uZW50XCIsIFwibXVsdGlsaW5lXCIsIFwic2xvdFByb3BzXCIsIFwic2xvdHNcIiwgXCJ0eXBlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgcmVmVHlwZSwgZGVlcG1lcmdlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IElucHV0QmFzZSBmcm9tICcuLi9JbnB1dEJhc2UnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBmaWxsZWRJbnB1dENsYXNzZXMsIHsgZ2V0RmlsbGVkSW5wdXRVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2ZpbGxlZElucHV0Q2xhc3Nlcyc7XG5pbXBvcnQgeyByb290T3ZlcnJpZGVzUmVzb2x2ZXIgYXMgaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyLCBpbnB1dE92ZXJyaWRlc1Jlc29sdmVyIGFzIGlucHV0QmFzZUlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIsIElucHV0QmFzZVJvb3QsIElucHV0QmFzZUNvbXBvbmVudCBhcyBJbnB1dEJhc2VJbnB1dCB9IGZyb20gJy4uL0lucHV0QmFzZS9JbnB1dEJhc2UnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGRpc2FibGVVbmRlcmxpbmVcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsICFkaXNhYmxlVW5kZXJsaW5lICYmICd1bmRlcmxpbmUnXSxcbiAgICBpbnB1dDogWydpbnB1dCddXG4gIH07XG4gIGNvbnN0IGNvbXBvc2VkQ2xhc3NlcyA9IGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRGaWxsZWRJbnB1dFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgY2xhc3NlcywgY29tcG9zZWRDbGFzc2VzKTtcbn07XG5jb25zdCBGaWxsZWRJbnB1dFJvb3QgPSBzdHlsZWQoSW5wdXRCYXNlUm9vdCwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpRmlsbGVkSW5wdXQnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFsuLi5pbnB1dEJhc2VSb290T3ZlcnJpZGVzUmVzb2x2ZXIocHJvcHMsIHN0eWxlcyksICFvd25lclN0YXRlLmRpc2FibGVVbmRlcmxpbmUgJiYgc3R5bGVzLnVuZGVybGluZV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIHZhciBfcGFsZXR0ZTtcbiAgY29uc3QgbGlnaHQgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCc7XG4gIGNvbnN0IGJvdHRvbUxpbmVDb2xvciA9IGxpZ2h0ID8gJ3JnYmEoMCwgMCwgMCwgMC40MiknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSc7XG4gIGNvbnN0IGJhY2tncm91bmRDb2xvciA9IGxpZ2h0ID8gJ3JnYmEoMCwgMCwgMCwgMC4wNiknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOSknO1xuICBjb25zdCBob3ZlckJhY2tncm91bmQgPSBsaWdodCA/ICdyZ2JhKDAsIDAsIDAsIDAuMDkpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTMpJztcbiAgY29uc3QgZGlzYWJsZWRCYWNrZ3JvdW5kID0gbGlnaHQgPyAncmdiYSgwLCAwLCAwLCAwLjEyKScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSc7XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gdGhlbWUudmFycy5wYWxldHRlLkZpbGxlZElucHV0LmJnIDogYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclRvcExlZnRSYWRpdXM6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFwZS5ib3JkZXJSYWRpdXMsXG4gICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFwZS5ib3JkZXJSYWRpdXMsXG4gICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdiYWNrZ3JvdW5kLWNvbG9yJywge1xuICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXIsXG4gICAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0XG4gICAgfSksXG4gICAgJyY6aG92ZXInOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuRmlsbGVkSW5wdXQuaG92ZXJCZyA6IGhvdmVyQmFja2dyb3VuZCxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5GaWxsZWRJbnB1dC5iZyA6IGJhY2tncm91bmRDb2xvclxuICAgICAgfVxuICAgIH0sXG4gICAgW2AmLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmZvY3VzZWR9YF06IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5GaWxsZWRJbnB1dC5iZyA6IGJhY2tncm91bmRDb2xvclxuICAgIH0sXG4gICAgW2AmLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuRmlsbGVkSW5wdXQuZGlzYWJsZWRCZyA6IGRpc2FibGVkQmFja2dyb3VuZFxuICAgIH1cbiAgfSwgIW93bmVyU3RhdGUuZGlzYWJsZVVuZGVybGluZSAmJiB7XG4gICAgJyY6YWZ0ZXInOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAycHggc29saWQgJHsoX3BhbGV0dGUgPSAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yIHx8ICdwcmltYXJ5J10pID09IG51bGwgPyB2b2lkIDAgOiBfcGFsZXR0ZS5tYWlufWAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgYm90dG9tOiAwLFxuICAgICAgLy8gRG9pbmcgdGhlIG90aGVyIHdheSBhcm91bmQgY3Jhc2ggb24gSUUxMSBcIicnXCIgaHR0cHM6Ly9naXRodWIuY29tL2Nzc2luanMvanNzL2lzc3Vlcy8yNDJcbiAgICAgIGNvbnRlbnQ6ICdcIlwiJyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgcmlnaHQ6IDAsXG4gICAgICB0cmFuc2Zvcm06ICdzY2FsZVgoMCknLFxuICAgICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd0cmFuc2Zvcm0nLCB7XG4gICAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyLFxuICAgICAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0XG4gICAgICB9KSxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyAvLyBUcmFuc3BhcmVudCB0byB0aGUgaG92ZXIgc3R5bGUuXG4gICAgfSxcbiAgICBbYCYuJHtmaWxsZWRJbnB1dENsYXNzZXMuZm9jdXNlZH06YWZ0ZXJgXToge1xuICAgICAgLy8gdHJhbnNsYXRlWCgwKSBpcyBhIHdvcmthcm91bmQgZm9yIFNhZmFyaSB0cmFuc2Zvcm0gc2NhbGUgYnVnXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9pc3N1ZXMvMzE3NjZcbiAgICAgIHRyYW5zZm9ybTogJ3NjYWxlWCgxKSB0cmFuc2xhdGVYKDApJ1xuICAgIH0sXG4gICAgW2AmLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmVycm9yfWBdOiB7XG4gICAgICAnJjpiZWZvcmUsICY6YWZ0ZXInOiB7XG4gICAgICAgIGJvcmRlckJvdHRvbUNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5lcnJvci5tYWluXG4gICAgICB9XG4gICAgfSxcbiAgICAnJjpiZWZvcmUnOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAxcHggc29saWQgJHt0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUuY29tbW9uLm9uQmFja2dyb3VuZENoYW5uZWx9IC8gJHt0aGVtZS52YXJzLm9wYWNpdHkuaW5wdXRVbmRlcmxpbmV9KWAgOiBib3R0b21MaW5lQ29sb3J9YCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICBib3R0b206IDAsXG4gICAgICAvLyBEb2luZyB0aGUgb3RoZXIgd2F5IGFyb3VuZCBjcmFzaCBvbiBJRTExIFwiJydcIiBodHRwczovL2dpdGh1Yi5jb20vY3NzaW5qcy9qc3MvaXNzdWVzLzI0MlxuICAgICAgY29udGVudDogJ1wiXFxcXDAwYTBcIicsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdib3JkZXItYm90dG9tLWNvbG9yJywge1xuICAgICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlclxuICAgICAgfSksXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScgLy8gVHJhbnNwYXJlbnQgdG8gdGhlIGhvdmVyIHN0eWxlLlxuICAgIH0sXG4gICAgW2AmOmhvdmVyOm5vdCguJHtmaWxsZWRJbnB1dENsYXNzZXMuZGlzYWJsZWR9LCAuJHtmaWxsZWRJbnB1dENsYXNzZXMuZXJyb3J9KTpiZWZvcmVgXToge1xuICAgICAgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICR7KHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5wcmltYXJ5fWBcbiAgICB9LFxuICAgIFtgJi4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5kaXNhYmxlZH06YmVmb3JlYF06IHtcbiAgICAgIGJvcmRlckJvdHRvbVN0eWxlOiAnZG90dGVkJ1xuICAgIH1cbiAgfSwgb3duZXJTdGF0ZS5zdGFydEFkb3JubWVudCAmJiB7XG4gICAgcGFkZGluZ0xlZnQ6IDEyXG4gIH0sIG93bmVyU3RhdGUuZW5kQWRvcm5tZW50ICYmIHtcbiAgICBwYWRkaW5nUmlnaHQ6IDEyXG4gIH0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIF9leHRlbmRzKHtcbiAgICBwYWRkaW5nOiAnMjVweCAxMnB4IDhweCdcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgICBwYWRkaW5nVG9wOiAyMSxcbiAgICBwYWRkaW5nQm90dG9tOiA0XG4gIH0sIG93bmVyU3RhdGUuaGlkZGVuTGFiZWwgJiYge1xuICAgIHBhZGRpbmdUb3A6IDE2LFxuICAgIHBhZGRpbmdCb3R0b206IDE3XG4gIH0sIG93bmVyU3RhdGUuaGlkZGVuTGFiZWwgJiYgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgICBwYWRkaW5nVG9wOiA4LFxuICAgIHBhZGRpbmdCb3R0b206IDlcbiAgfSkpO1xufSk7XG5jb25zdCBGaWxsZWRJbnB1dElucHV0ID0gc3R5bGVkKElucHV0QmFzZUlucHV0LCB7XG4gIG5hbWU6ICdNdWlGaWxsZWRJbnB1dCcsXG4gIHNsb3Q6ICdJbnB1dCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiBpbnB1dEJhc2VJbnB1dE92ZXJyaWRlc1Jlc29sdmVyXG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBwYWRkaW5nVG9wOiAyNSxcbiAgcGFkZGluZ1JpZ2h0OiAxMixcbiAgcGFkZGluZ0JvdHRvbTogOCxcbiAgcGFkZGluZ0xlZnQ6IDEyXG59LCAhdGhlbWUudmFycyAmJiB7XG4gICcmOi13ZWJraXQtYXV0b2ZpbGwnOiB7XG4gICAgV2Via2l0Qm94U2hhZG93OiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyBudWxsIDogJzAgMCAwIDEwMHB4ICMyNjY3OTggaW5zZXQnLFxuICAgIFdlYmtpdFRleHRGaWxsQ29sb3I6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IG51bGwgOiAnI2ZmZicsXG4gICAgY2FyZXRDb2xvcjogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gbnVsbCA6ICcjZmZmJyxcbiAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiAnaW5oZXJpdCcsXG4gICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6ICdpbmhlcml0J1xuICB9XG59LCB0aGVtZS52YXJzICYmIHtcbiAgJyY6LXdlYmtpdC1hdXRvZmlsbCc6IHtcbiAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiAnaW5oZXJpdCcsXG4gICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6ICdpbmhlcml0J1xuICB9LFxuICBbdGhlbWUuZ2V0Q29sb3JTY2hlbWVTZWxlY3RvcignZGFyaycpXToge1xuICAgICcmOi13ZWJraXQtYXV0b2ZpbGwnOiB7XG4gICAgICBXZWJraXRCb3hTaGFkb3c6ICcwIDAgMCAxMDBweCAjMjY2Nzk4IGluc2V0JyxcbiAgICAgIFdlYmtpdFRleHRGaWxsQ29sb3I6ICcjZmZmJyxcbiAgICAgIGNhcmV0Q29sb3I6ICcjZmZmJ1xuICAgIH1cbiAgfVxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgcGFkZGluZ1RvcDogMjEsXG4gIHBhZGRpbmdCb3R0b206IDRcbn0sIG93bmVyU3RhdGUuaGlkZGVuTGFiZWwgJiYge1xuICBwYWRkaW5nVG9wOiAxNixcbiAgcGFkZGluZ0JvdHRvbTogMTdcbn0sIG93bmVyU3RhdGUuc3RhcnRBZG9ybm1lbnQgJiYge1xuICBwYWRkaW5nTGVmdDogMFxufSwgb3duZXJTdGF0ZS5lbmRBZG9ybm1lbnQgJiYge1xuICBwYWRkaW5nUmlnaHQ6IDBcbn0sIG93bmVyU3RhdGUuaGlkZGVuTGFiZWwgJiYgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgcGFkZGluZ1RvcDogOCxcbiAgcGFkZGluZ0JvdHRvbTogOVxufSwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYge1xuICBwYWRkaW5nVG9wOiAwLFxuICBwYWRkaW5nQm90dG9tOiAwLFxuICBwYWRkaW5nTGVmdDogMCxcbiAgcGFkZGluZ1JpZ2h0OiAwXG59KSk7XG5jb25zdCBGaWxsZWRJbnB1dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZpbGxlZElucHV0KGluUHJvcHMsIHJlZikge1xuICB2YXIgX3JlZiwgX3Nsb3RzJHJvb3QsIF9yZWYyLCBfc2xvdHMkaW5wdXQ7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUZpbGxlZElucHV0J1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY29tcG9uZW50cyA9IHt9LFxuICAgICAgY29tcG9uZW50c1Byb3BzOiBjb21wb25lbnRzUHJvcHNQcm9wLFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICAvLyBkZWNsYXJlIGhlcmUgdG8gcHJldmVudCBzcHJlYWRpbmcgdG8gRE9NXG4gICAgICBpbnB1dENvbXBvbmVudCA9ICdpbnB1dCcsXG4gICAgICBtdWx0aWxpbmUgPSBmYWxzZSxcbiAgICAgIHNsb3RQcm9wcyxcbiAgICAgIHNsb3RzID0ge30sXG4gICAgICB0eXBlID0gJ3RleHQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBmdWxsV2lkdGgsXG4gICAgaW5wdXRDb21wb25lbnQsXG4gICAgbXVsdGlsaW5lLFxuICAgIHR5cGVcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhwcm9wcyk7XG4gIGNvbnN0IGZpbGxlZElucHV0Q29tcG9uZW50c1Byb3BzID0ge1xuICAgIHJvb3Q6IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9LFxuICAgIGlucHV0OiB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfVxuICB9O1xuICBjb25zdCBjb21wb25lbnRzUHJvcHMgPSAoc2xvdFByb3BzICE9IG51bGwgPyBzbG90UHJvcHMgOiBjb21wb25lbnRzUHJvcHNQcm9wKSA/IGRlZXBtZXJnZShmaWxsZWRJbnB1dENvbXBvbmVudHNQcm9wcywgc2xvdFByb3BzICE9IG51bGwgPyBzbG90UHJvcHMgOiBjb21wb25lbnRzUHJvcHNQcm9wKSA6IGZpbGxlZElucHV0Q29tcG9uZW50c1Byb3BzO1xuICBjb25zdCBSb290U2xvdCA9IChfcmVmID0gKF9zbG90cyRyb290ID0gc2xvdHMucm9vdCkgIT0gbnVsbCA/IF9zbG90cyRyb290IDogY29tcG9uZW50cy5Sb290KSAhPSBudWxsID8gX3JlZiA6IEZpbGxlZElucHV0Um9vdDtcbiAgY29uc3QgSW5wdXRTbG90ID0gKF9yZWYyID0gKF9zbG90cyRpbnB1dCA9IHNsb3RzLmlucHV0KSAhPSBudWxsID8gX3Nsb3RzJGlucHV0IDogY29tcG9uZW50cy5JbnB1dCkgIT0gbnVsbCA/IF9yZWYyIDogRmlsbGVkSW5wdXRJbnB1dDtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KElucHV0QmFzZSwgX2V4dGVuZHMoe1xuICAgIHNsb3RzOiB7XG4gICAgICByb290OiBSb290U2xvdCxcbiAgICAgIGlucHV0OiBJbnB1dFNsb3RcbiAgICB9LFxuICAgIGNvbXBvbmVudHNQcm9wczogY29tcG9uZW50c1Byb3BzLFxuICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgIGlucHV0Q29tcG9uZW50OiBpbnB1dENvbXBvbmVudCxcbiAgICBtdWx0aWxpbmU6IG11bHRpbGluZSxcbiAgICByZWY6IHJlZixcbiAgICB0eXBlOiB0eXBlXG4gIH0sIG90aGVyLCB7XG4gICAgY2xhc3NlczogY2xhc3Nlc1xuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEZpbGxlZElucHV0LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBoZWxwcyB1c2VycyB0byBmaWxsIGZvcm1zIGZhc3RlciwgZXNwZWNpYWxseSBvbiBtb2JpbGUgZGV2aWNlcy5cbiAgICogVGhlIG5hbWUgY2FuIGJlIGNvbmZ1c2luZywgYXMgaXQncyBtb3JlIGxpa2UgYW4gYXV0b2ZpbGwuXG4gICAqIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91dCBpdCBbZm9sbG93aW5nIHRoZSBzcGVjaWZpY2F0aW9uXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNhdXRvZmlsbCkuXG4gICAqL1xuICBhdXRvQ29tcGxldGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgZm9jdXNlZCBkdXJpbmcgdGhlIGZpcnN0IG1vdW50LlxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAncHJpbWFyeSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3ByaW1hcnknLCAnc2Vjb25kYXJ5J10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdHNgIHByb3AgaW5zdGVhZC5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgSW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RQcm9wc2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90UHJvcHNgIHByb3AgaW5zdGVhZCwgYXMgYGNvbXBvbmVudHNQcm9wc2Agd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcm9vdDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaW5wdXQgd2lsbCBub3QgaGF2ZSBhbiB1bmRlcmxpbmUuXG4gICAqL1xuICBkaXNhYmxlVW5kZXJsaW5lOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEVuZCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIGVuZEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgaW5kaWNhdGUgYW4gZXJyb3IuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgdGFrZSB1cCB0aGUgZnVsbCB3aWR0aCBvZiBpdHMgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGhpZGRlbi5cbiAgICogVGhpcyBpcyB1c2VkIHRvIGluY3JlYXNlIGRlbnNpdHkgZm9yIGEgYEZpbGxlZElucHV0YC5cbiAgICogQmUgc3VyZSB0byBhZGQgYGFyaWEtbGFiZWxgIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBoaWRkZW5MYWJlbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnaW5wdXQnXG4gICAqL1xuICBpbnB1dENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nLiBUaGlzIGlzIG5vcm1hbGx5IG9idGFpbmVkIHZpYSBjb250ZXh0IGZyb21cbiAgICogRm9ybUNvbnRyb2wuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdub25lJ2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdub25lJ10pLFxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1heFJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIE1pbmltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtaW5Sb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgW1RleHRhcmVhQXV0b3NpemVdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0YXJlYS1hdXRvc2l6ZS8pIGVsZW1lbnQgaXMgcmVuZGVyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtdWx0aWxpbmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LkNoYW5nZUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBIVE1MSW5wdXRFbGVtZW50Pn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKHN0cmluZykuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgc2hvcnQgaGludCBkaXNwbGF5ZWQgaW4gdGhlIGBpbnB1dGAgYmVmb3JlIHRoZSB1c2VyIGVudGVycyBhIHZhbHVlLlxuICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJdCBwcmV2ZW50cyB0aGUgdXNlciBmcm9tIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGRcbiAgICogKG5vdCBmcm9tIGludGVyYWN0aW5nIHdpdGggdGhlIGZpZWxkKS5cbiAgICovXG4gIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyByZXF1aXJlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgcm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBjb21wb25lbnRzUHJvcHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c2AgcHJvcCwgd2hpY2ggd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFN0YXJ0IGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgc3RhcnRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVHlwZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LiBJdCBzaG91bGQgYmUgW2EgdmFsaWQgSFRNTDUgaW5wdXQgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0Zvcm1fJTNDaW5wdXQlM0VfdHlwZXMpLlxuICAgKiBAZGVmYXVsdCAndGV4dCdcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudCwgcmVxdWlyZWQgZm9yIGEgY29udHJvbGxlZCBjb21wb25lbnQuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueVxufSA6IHZvaWQgMDtcbkZpbGxlZElucHV0Lm11aU5hbWUgPSAnSW5wdXQnO1xuZXhwb3J0IGRlZmF1bHQgRmlsbGVkSW5wdXQ7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1Db250cm9sVXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1Db250cm9sJywgc2xvdCk7XG59XG5jb25zdCBmb3JtQ29udHJvbENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlGb3JtQ29udHJvbCcsIFsncm9vdCcsICdtYXJnaW5Ob25lJywgJ21hcmdpbk5vcm1hbCcsICdtYXJnaW5EZW5zZScsICdmdWxsV2lkdGgnLCAnZGlzYWJsZWQnXSk7XG5leHBvcnQgZGVmYXVsdCBmb3JtQ29udHJvbENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVkXCIsIFwiZXJyb3JcIiwgXCJmb2N1c2VkXCIsIFwiZnVsbFdpZHRoXCIsIFwiaGlkZGVuTGFiZWxcIiwgXCJtYXJnaW5cIiwgXCJyZXF1aXJlZFwiLCBcInNpemVcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGlzRmlsbGVkLCBpc0Fkb3JuZWRTdGFydCB9IGZyb20gJy4uL0lucHV0QmFzZS91dGlscyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBpc011aUVsZW1lbnQgZnJvbSAnLi4vdXRpbHMvaXNNdWlFbGVtZW50JztcbmltcG9ydCBGb3JtQ29udHJvbENvbnRleHQgZnJvbSAnLi9Gb3JtQ29udHJvbENvbnRleHQnO1xuaW1wb3J0IHsgZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vZm9ybUNvbnRyb2xDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBtYXJnaW4sXG4gICAgZnVsbFdpZHRoXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBtYXJnaW4gIT09ICdub25lJyAmJiBgbWFyZ2luJHtjYXBpdGFsaXplKG1hcmdpbil9YCwgZnVsbFdpZHRoICYmICdmdWxsV2lkdGgnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEZvcm1Db250cm9sVXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcbmNvbnN0IEZvcm1Db250cm9sUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpRm9ybUNvbnRyb2wnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAoe1xuICAgIG93bmVyU3RhdGVcbiAgfSwgc3R5bGVzKSA9PiB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdHlsZXMucm9vdCwgc3R5bGVzW2BtYXJnaW4ke2NhcGl0YWxpemUob3duZXJTdGF0ZS5tYXJnaW4pfWBdLCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiBzdHlsZXMuZnVsbFdpZHRoKTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIC8vIFJlc2V0IGZpZWxkc2V0IGRlZmF1bHQgc3R5bGUuXG4gIG1pbldpZHRoOiAwLFxuICBwYWRkaW5nOiAwLFxuICBtYXJnaW46IDAsXG4gIGJvcmRlcjogMCxcbiAgdmVydGljYWxBbGlnbjogJ3RvcCdcbn0sIG93bmVyU3RhdGUubWFyZ2luID09PSAnbm9ybWFsJyAmJiB7XG4gIG1hcmdpblRvcDogMTYsXG4gIG1hcmdpbkJvdHRvbTogOFxufSwgb3duZXJTdGF0ZS5tYXJnaW4gPT09ICdkZW5zZScgJiYge1xuICBtYXJnaW5Ub3A6IDgsXG4gIG1hcmdpbkJvdHRvbTogNFxufSwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYge1xuICB3aWR0aDogJzEwMCUnXG59KSk7XG5cbi8qKlxuICogUHJvdmlkZXMgY29udGV4dCBzdWNoIGFzIGZpbGxlZC9mb2N1c2VkL2Vycm9yL3JlcXVpcmVkIGZvciBmb3JtIGlucHV0cy5cbiAqIFJlbHlpbmcgb24gdGhlIGNvbnRleHQgcHJvdmlkZXMgaGlnaCBmbGV4aWJpbGl0eSBhbmQgZW5zdXJlcyB0aGF0IHRoZSBzdGF0ZSBhbHdheXMgc3RheXNcbiAqIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBjaGlsZHJlbiBvZiB0aGUgYEZvcm1Db250cm9sYC5cbiAqIFRoaXMgY29udGV4dCBpcyB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czpcbiAqXG4gKiAgLSBGb3JtTGFiZWxcbiAqICAtIEZvcm1IZWxwZXJUZXh0XG4gKiAgLSBJbnB1dFxuICogIC0gSW5wdXRMYWJlbFxuICpcbiAqIFlvdSBjYW4gZmluZCBvbmUgY29tcG9zaXRpb24gZXhhbXBsZSBiZWxvdyBhbmQgbW9yZSBnb2luZyB0byBbdGhlIGRlbW9zXSgvbWF0ZXJpYWwtdWkvcmVhY3QtdGV4dC1maWVsZC8jY29tcG9uZW50cykuXG4gKlxuICogYGBganN4XG4gKiA8Rm9ybUNvbnRyb2w+XG4gKiAgIDxJbnB1dExhYmVsIGh0bWxGb3I9XCJteS1pbnB1dFwiPkVtYWlsIGFkZHJlc3M8L0lucHV0TGFiZWw+XG4gKiAgIDxJbnB1dCBpZD1cIm15LWlucHV0XCIgYXJpYS1kZXNjcmliZWRieT1cIm15LWhlbHBlci10ZXh0XCIgLz5cbiAqICAgPEZvcm1IZWxwZXJUZXh0IGlkPVwibXktaGVscGVyLXRleHRcIj5XZSdsbCBuZXZlciBzaGFyZSB5b3VyIGVtYWlsLjwvRm9ybUhlbHBlclRleHQ+XG4gKiA8L0Zvcm1Db250cm9sPlxuICogYGBgXG4gKlxuICog4pqg77iPIE9ubHkgb25lIGBJbnB1dEJhc2VgIGNhbiBiZSB1c2VkIHdpdGhpbiBhIEZvcm1Db250cm9sIGJlY2F1c2UgaXQgY3JlYXRlcyB2aXN1YWwgaW5jb25zaXN0ZW5jaWVzLlxuICogRm9yIGluc3RhbmNlLCBvbmx5IG9uZSBpbnB1dCBjYW4gYmUgZm9jdXNlZCBhdCB0aGUgc2FtZSB0aW1lLCB0aGUgc3RhdGUgc2hvdWxkbid0IGJlIHNoYXJlZC5cbiAqL1xuY29uc3QgRm9ybUNvbnRyb2wgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGb3JtQ29udHJvbChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpRm9ybUNvbnRyb2wnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgICAgY29tcG9uZW50ID0gJ2RpdicsXG4gICAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgICAgZXJyb3IgPSBmYWxzZSxcbiAgICAgIGZvY3VzZWQ6IHZpc3VhbGx5Rm9jdXNlZCxcbiAgICAgIGZ1bGxXaWR0aCA9IGZhbHNlLFxuICAgICAgaGlkZGVuTGFiZWwgPSBmYWxzZSxcbiAgICAgIG1hcmdpbiA9ICdub25lJyxcbiAgICAgIHJlcXVpcmVkID0gZmFsc2UsXG4gICAgICBzaXplID0gJ21lZGl1bScsXG4gICAgICB2YXJpYW50ID0gJ291dGxpbmVkJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3IsXG4gICAgY29tcG9uZW50LFxuICAgIGRpc2FibGVkLFxuICAgIGVycm9yLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBoaWRkZW5MYWJlbCxcbiAgICBtYXJnaW4sXG4gICAgcmVxdWlyZWQsXG4gICAgc2l6ZSxcbiAgICB2YXJpYW50XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IFthZG9ybmVkU3RhcnQsIHNldEFkb3JuZWRTdGFydF0gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiB7XG4gICAgLy8gV2UgbmVlZCB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGNoaWxkcmVuIGFuZCBmaW5kIHRoZSBJbnB1dCBpbiBvcmRlclxuICAgIC8vIHRvIGZ1bGx5IHN1cHBvcnQgc2VydmVyLXNpZGUgcmVuZGVyaW5nLlxuICAgIGxldCBpbml0aWFsQWRvcm5lZFN0YXJ0ID0gZmFsc2U7XG4gICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKGNoaWxkcmVuLCBjaGlsZCA9PiB7XG4gICAgICAgIGlmICghaXNNdWlFbGVtZW50KGNoaWxkLCBbJ0lucHV0JywgJ1NlbGVjdCddKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnB1dCA9IGlzTXVpRWxlbWVudChjaGlsZCwgWydTZWxlY3QnXSkgPyBjaGlsZC5wcm9wcy5pbnB1dCA6IGNoaWxkO1xuICAgICAgICBpZiAoaW5wdXQgJiYgaXNBZG9ybmVkU3RhcnQoaW5wdXQucHJvcHMpKSB7XG4gICAgICAgICAgaW5pdGlhbEFkb3JuZWRTdGFydCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaW5pdGlhbEFkb3JuZWRTdGFydDtcbiAgfSk7XG4gIGNvbnN0IFtmaWxsZWQsIHNldEZpbGxlZF0gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiB7XG4gICAgLy8gV2UgbmVlZCB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGNoaWxkcmVuIGFuZCBmaW5kIHRoZSBJbnB1dCBpbiBvcmRlclxuICAgIC8vIHRvIGZ1bGx5IHN1cHBvcnQgc2VydmVyLXNpZGUgcmVuZGVyaW5nLlxuICAgIGxldCBpbml0aWFsRmlsbGVkID0gZmFsc2U7XG4gICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKGNoaWxkcmVuLCBjaGlsZCA9PiB7XG4gICAgICAgIGlmICghaXNNdWlFbGVtZW50KGNoaWxkLCBbJ0lucHV0JywgJ1NlbGVjdCddKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGaWxsZWQoY2hpbGQucHJvcHMsIHRydWUpIHx8IGlzRmlsbGVkKGNoaWxkLnByb3BzLmlucHV0UHJvcHMsIHRydWUpKSB7XG4gICAgICAgICAgaW5pdGlhbEZpbGxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaW5pdGlhbEZpbGxlZDtcbiAgfSk7XG4gIGNvbnN0IFtmb2N1c2VkU3RhdGUsIHNldEZvY3VzZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBpZiAoZGlzYWJsZWQgJiYgZm9jdXNlZFN0YXRlKSB7XG4gICAgc2V0Rm9jdXNlZChmYWxzZSk7XG4gIH1cbiAgY29uc3QgZm9jdXNlZCA9IHZpc3VhbGx5Rm9jdXNlZCAhPT0gdW5kZWZpbmVkICYmICFkaXNhYmxlZCA/IHZpc3VhbGx5Rm9jdXNlZCA6IGZvY3VzZWRTdGF0ZTtcbiAgbGV0IHJlZ2lzdGVyRWZmZWN0O1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIGNvbnN0IHJlZ2lzdGVyZWRJbnB1dCA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gICAgcmVnaXN0ZXJFZmZlY3QgPSAoKSA9PiB7XG4gICAgICBpZiAocmVnaXN0ZXJlZElucHV0LmN1cnJlbnQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogVGhlcmUgYXJlIG11bHRpcGxlIGBJbnB1dEJhc2VgIGNvbXBvbmVudHMgaW5zaWRlIGEgRm9ybUNvbnRyb2wuJywgJ1RoaXMgY3JlYXRlcyB2aXN1YWwgaW5jb25zaXN0ZW5jaWVzLCBvbmx5IHVzZSBvbmUgYElucHV0QmFzZWAuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgICAgcmVnaXN0ZXJlZElucHV0LmN1cnJlbnQgPSB0cnVlO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgcmVnaXN0ZXJlZElucHV0LmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH07XG4gICAgfTtcbiAgfVxuICBjb25zdCBjaGlsZENvbnRleHQgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYWRvcm5lZFN0YXJ0LFxuICAgICAgc2V0QWRvcm5lZFN0YXJ0LFxuICAgICAgY29sb3IsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGVycm9yLFxuICAgICAgZmlsbGVkLFxuICAgICAgZm9jdXNlZCxcbiAgICAgIGZ1bGxXaWR0aCxcbiAgICAgIGhpZGRlbkxhYmVsLFxuICAgICAgc2l6ZSxcbiAgICAgIG9uQmx1cjogKCkgPT4ge1xuICAgICAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgICAgIH0sXG4gICAgICBvbkVtcHR5OiAoKSA9PiB7XG4gICAgICAgIHNldEZpbGxlZChmYWxzZSk7XG4gICAgICB9LFxuICAgICAgb25GaWxsZWQ6ICgpID0+IHtcbiAgICAgICAgc2V0RmlsbGVkKHRydWUpO1xuICAgICAgfSxcbiAgICAgIG9uRm9jdXM6ICgpID0+IHtcbiAgICAgICAgc2V0Rm9jdXNlZCh0cnVlKTtcbiAgICAgIH0sXG4gICAgICByZWdpc3RlckVmZmVjdCxcbiAgICAgIHJlcXVpcmVkLFxuICAgICAgdmFyaWFudFxuICAgIH07XG4gIH0sIFthZG9ybmVkU3RhcnQsIGNvbG9yLCBkaXNhYmxlZCwgZXJyb3IsIGZpbGxlZCwgZm9jdXNlZCwgZnVsbFdpZHRoLCBoaWRkZW5MYWJlbCwgcmVnaXN0ZXJFZmZlY3QsIHJlcXVpcmVkLCBzaXplLCB2YXJpYW50XSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChGb3JtQ29udHJvbENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY2hpbGRDb250ZXh0LFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChGb3JtQ29udHJvbFJvb3QsIF9leHRlbmRzKHtcbiAgICAgIGFzOiBjb21wb25lbnQsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgb3RoZXIsIHtcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pKVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRm9ybUNvbnRyb2wucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBAZGVmYXVsdCAncHJpbWFyeSdcbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsLCBpbnB1dCBhbmQgaGVscGVyIHRleHQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBhIGRpc2FibGVkIHN0YXRlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgZGlzcGxheWVkIGluIGFuIGVycm9yIHN0YXRlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc3BsYXllZCBpbiBmb2N1c2VkIHN0YXRlLlxuICAgKi9cbiAgZm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgd2lsbCB0YWtlIHVwIHRoZSBmdWxsIHdpZHRoIG9mIGl0cyBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgaGlkZGVuLlxuICAgKiBUaGlzIGlzIHVzZWQgdG8gaW5jcmVhc2UgZGVuc2l0eSBmb3IgYSBgRmlsbGVkSW5wdXRgLlxuICAgKiBCZSBzdXJlIHRvIGFkZCBgYXJpYS1sYWJlbGAgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGhpZGRlbkxhYmVsOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAgb3IgYG5vcm1hbGAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcgb2YgdGhpcyBhbmQgY29udGFpbmVkIGNvbXBvbmVudHMuXG4gICAqIEBkZWZhdWx0ICdub25lJ1xuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdub25lJywgJ25vcm1hbCddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIHdpbGwgaW5kaWNhdGUgdGhhdCB0aGUgYGlucHV0YCBpcyByZXF1aXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0ICdtZWRpdW0nXG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ21lZGl1bScsICdzbWFsbCddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKiBAZGVmYXVsdCAnb3V0bGluZWQnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydmaWxsZWQnLCAnb3V0bGluZWQnLCAnc3RhbmRhcmQnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBGb3JtQ29udHJvbDsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IEZvcm1Db250cm9sQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBGb3JtQ29udHJvbENvbnRleHQuZGlzcGxheU5hbWUgPSAnRm9ybUNvbnRyb2xDb250ZXh0Jztcbn1cbmV4cG9ydCBkZWZhdWx0IEZvcm1Db250cm9sQ29udGV4dDsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtQ29udHJvbFN0YXRlKHtcbiAgcHJvcHMsXG4gIHN0YXRlcyxcbiAgbXVpRm9ybUNvbnRyb2xcbn0pIHtcbiAgcmV0dXJuIHN0YXRlcy5yZWR1Y2UoKGFjYywgc3RhdGUpID0+IHtcbiAgICBhY2Nbc3RhdGVdID0gcHJvcHNbc3RhdGVdO1xuICAgIGlmIChtdWlGb3JtQ29udHJvbCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wc1tzdGF0ZV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGFjY1tzdGF0ZV0gPSBtdWlGb3JtQ29udHJvbFtzdGF0ZV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn0iLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBGb3JtQ29udHJvbENvbnRleHQgZnJvbSAnLi9Gb3JtQ29udHJvbENvbnRleHQnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlRm9ybUNvbnRyb2woKSB7XG4gIHJldHVybiBSZWFjdC51c2VDb250ZXh0KEZvcm1Db250cm9sQ29udGV4dCk7XG59IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1IZWxwZXJUZXh0VXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1IZWxwZXJUZXh0Jywgc2xvdCk7XG59XG5jb25zdCBmb3JtSGVscGVyVGV4dENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlGb3JtSGVscGVyVGV4dCcsIFsncm9vdCcsICdlcnJvcicsICdkaXNhYmxlZCcsICdzaXplU21hbGwnLCAnc2l6ZU1lZGl1bScsICdjb250YWluZWQnLCAnZm9jdXNlZCcsICdmaWxsZWQnLCAncmVxdWlyZWQnXSk7XG5leHBvcnQgZGVmYXVsdCBmb3JtSGVscGVyVGV4dENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xudmFyIF9zcGFuO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJkaXNhYmxlZFwiLCBcImVycm9yXCIsIFwiZmlsbGVkXCIsIFwiZm9jdXNlZFwiLCBcIm1hcmdpblwiLCBcInJlcXVpcmVkXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBmb3JtQ29udHJvbFN0YXRlIGZyb20gJy4uL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sU3RhdGUnO1xuaW1wb3J0IHVzZUZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBmb3JtSGVscGVyVGV4dENsYXNzZXMsIHsgZ2V0Rm9ybUhlbHBlclRleHRVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vZm9ybUhlbHBlclRleHRDbGFzc2VzJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBjb250YWluZWQsXG4gICAgc2l6ZSxcbiAgICBkaXNhYmxlZCxcbiAgICBlcnJvcixcbiAgICBmaWxsZWQsXG4gICAgZm9jdXNlZCxcbiAgICByZXF1aXJlZFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgZXJyb3IgJiYgJ2Vycm9yJywgc2l6ZSAmJiBgc2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gLCBjb250YWluZWQgJiYgJ2NvbnRhaW5lZCcsIGZvY3VzZWQgJiYgJ2ZvY3VzZWQnLCBmaWxsZWQgJiYgJ2ZpbGxlZCcsIHJlcXVpcmVkICYmICdyZXF1aXJlZCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Rm9ybUhlbHBlclRleHRVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgRm9ybUhlbHBlclRleHRSb290ID0gc3R5bGVkKCdwJywge1xuICBuYW1lOiAnTXVpRm9ybUhlbHBlclRleHQnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5zaXplICYmIHN0eWxlc1tgc2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNpemUpfWBdLCBvd25lclN0YXRlLmNvbnRhaW5lZCAmJiBzdHlsZXMuY29udGFpbmVkLCBvd25lclN0YXRlLmZpbGxlZCAmJiBzdHlsZXMuZmlsbGVkXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuc2Vjb25kYXJ5XG59LCB0aGVtZS50eXBvZ3JhcGh5LmNhcHRpb24sIHtcbiAgdGV4dEFsaWduOiAnbGVmdCcsXG4gIG1hcmdpblRvcDogMyxcbiAgbWFyZ2luUmlnaHQ6IDAsXG4gIG1hcmdpbkJvdHRvbTogMCxcbiAgbWFyZ2luTGVmdDogMCxcbiAgW2AmLiR7Zm9ybUhlbHBlclRleHRDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuZGlzYWJsZWRcbiAgfSxcbiAgW2AmLiR7Zm9ybUhlbHBlclRleHRDbGFzc2VzLmVycm9yfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW5cbiAgfVxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgbWFyZ2luVG9wOiA0XG59LCBvd25lclN0YXRlLmNvbnRhaW5lZCAmJiB7XG4gIG1hcmdpbkxlZnQ6IDE0LFxuICBtYXJnaW5SaWdodDogMTRcbn0pKTtcbmNvbnN0IEZvcm1IZWxwZXJUZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRm9ybUhlbHBlclRleHQoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUZvcm1IZWxwZXJUZXh0J1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQgPSAncCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgbXVpRm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbCgpO1xuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsndmFyaWFudCcsICdzaXplJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2ZpbGxlZCcsICdmb2N1c2VkJywgJ3JlcXVpcmVkJ11cbiAgfSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb21wb25lbnQsXG4gICAgY29udGFpbmVkOiBmY3MudmFyaWFudCA9PT0gJ2ZpbGxlZCcgfHwgZmNzLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcsXG4gICAgdmFyaWFudDogZmNzLnZhcmlhbnQsXG4gICAgc2l6ZTogZmNzLnNpemUsXG4gICAgZGlzYWJsZWQ6IGZjcy5kaXNhYmxlZCxcbiAgICBlcnJvcjogZmNzLmVycm9yLFxuICAgIGZpbGxlZDogZmNzLmZpbGxlZCxcbiAgICBmb2N1c2VkOiBmY3MuZm9jdXNlZCxcbiAgICByZXF1aXJlZDogZmNzLnJlcXVpcmVkXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChGb3JtSGVscGVyVGV4dFJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBjaGlsZHJlbiA9PT0gJyAnID8gLy8gbm90cmFuc2xhdGUgbmVlZGVkIHdoaWxlIEdvb2dsZSBUcmFuc2xhdGUgd2lsbCBub3QgZml4IHplcm8td2lkdGggc3BhY2UgaXNzdWVcbiAgICBfc3BhbiB8fCAoX3NwYW4gPSAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgICAgY2xhc3NOYW1lOiBcIm5vdHJhbnNsYXRlXCIsXG4gICAgICBjaGlsZHJlbjogXCJcXHUyMDBCXCJcbiAgICB9KSkgOiBjaGlsZHJlblxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEZvcm1IZWxwZXJUZXh0LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIElmIGAnICdgIGlzIHByb3ZpZGVkLCB0aGUgY29tcG9uZW50IHJlc2VydmVzIG9uZSBsaW5lIGhlaWdodCBmb3IgZGlzcGxheWluZyBhIGZ1dHVyZSBtZXNzYWdlLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaGVscGVyIHRleHQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBhIGRpc2FibGVkIHN0YXRlLlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBoZWxwZXIgdGV4dCBzaG91bGQgYmUgZGlzcGxheWVkIGluIGFuIGVycm9yIHN0YXRlLlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaGVscGVyIHRleHQgc2hvdWxkIHVzZSBmaWxsZWQgY2xhc3NlcyBrZXkuXG4gICAqL1xuICBmaWxsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaGVscGVyIHRleHQgc2hvdWxkIHVzZSBmb2N1c2VkIGNsYXNzZXMga2V5LlxuICAgKi9cbiAgZm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nLiBUaGlzIGlzIG5vcm1hbGx5IG9idGFpbmVkIHZpYSBjb250ZXh0IGZyb21cbiAgICogRm9ybUNvbnRyb2wuXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaGVscGVyIHRleHQgc2hvdWxkIHVzZSByZXF1aXJlZCBjbGFzc2VzIGtleS5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBGb3JtSGVscGVyVGV4dDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEdsb2JhbFN0eWxlcyBhcyBTeXN0ZW1HbG9iYWxTdHlsZXMgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgZGVmYXVsdFRoZW1lIGZyb20gJy4uL3N0eWxlcy9kZWZhdWx0VGhlbWUnO1xuaW1wb3J0IFRIRU1FX0lEIGZyb20gJy4uL3N0eWxlcy9pZGVudGlmaWVyJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBHbG9iYWxTdHlsZXMocHJvcHMpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFN5c3RlbUdsb2JhbFN0eWxlcywgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZGVmYXVsdFRoZW1lOiBkZWZhdWx0VGhlbWUsXG4gICAgdGhlbWVJZDogVEhFTUVfSURcbiAgfSkpO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gR2xvYmFsU3R5bGVzLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBzdHlsZXMgeW91IHdhbnQgdG8gYXBwbHkgZ2xvYmFsbHkuXG4gICAqL1xuICBzdHlsZXM6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5LCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmJvb2xdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEdsb2JhbFN0eWxlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBHcmlkQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KCk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBHcmlkQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdHcmlkQ29udGV4dCc7XG59XG5leHBvcnQgZGVmYXVsdCBHcmlkQ29udGV4dDsiLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0R3JpZFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpR3JpZCcsIHNsb3QpO1xufVxuY29uc3QgU1BBQ0lOR1MgPSBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTBdO1xuY29uc3QgRElSRUNUSU9OUyA9IFsnY29sdW1uLXJldmVyc2UnLCAnY29sdW1uJywgJ3Jvdy1yZXZlcnNlJywgJ3JvdyddO1xuY29uc3QgV1JBUFMgPSBbJ25vd3JhcCcsICd3cmFwLXJldmVyc2UnLCAnd3JhcCddO1xuY29uc3QgR1JJRF9TSVpFUyA9IFsnYXV0bycsIHRydWUsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTJdO1xuY29uc3QgZ3JpZENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlHcmlkJywgWydyb290JywgJ2NvbnRhaW5lcicsICdpdGVtJywgJ3plcm9NaW5XaWR0aCcsXG4vLyBzcGFjaW5nc1xuLi4uU1BBQ0lOR1MubWFwKHNwYWNpbmcgPT4gYHNwYWNpbmcteHMtJHtzcGFjaW5nfWApLFxuLy8gZGlyZWN0aW9uIHZhbHVlc1xuLi4uRElSRUNUSU9OUy5tYXAoZGlyZWN0aW9uID0+IGBkaXJlY3Rpb24teHMtJHtkaXJlY3Rpb259YCksXG4vLyB3cmFwIHZhbHVlc1xuLi4uV1JBUFMubWFwKHdyYXAgPT4gYHdyYXAteHMtJHt3cmFwfWApLFxuLy8gZ3JpZCBzaXplcyBmb3IgYWxsIGJyZWFrcG9pbnRzXG4uLi5HUklEX1NJWkVTLm1hcChzaXplID0+IGBncmlkLXhzLSR7c2l6ZX1gKSwgLi4uR1JJRF9TSVpFUy5tYXAoc2l6ZSA9PiBgZ3JpZC1zbS0ke3NpemV9YCksIC4uLkdSSURfU0laRVMubWFwKHNpemUgPT4gYGdyaWQtbWQtJHtzaXplfWApLCAuLi5HUklEX1NJWkVTLm1hcChzaXplID0+IGBncmlkLWxnLSR7c2l6ZX1gKSwgLi4uR1JJRF9TSVpFUy5tYXAoc2l6ZSA9PiBgZ3JpZC14bC0ke3NpemV9YCldKTtcbmV4cG9ydCBkZWZhdWx0IGdyaWRDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuLy8gQSBncmlkIGNvbXBvbmVudCB1c2luZyB0aGUgZm9sbG93aW5nIGxpYnMgYXMgaW5zcGlyYXRpb24uXG4vL1xuLy8gRm9yIHRoZSBpbXBsZW1lbnRhdGlvbjpcbi8vIC0gaHR0cHM6Ly9nZXRib290c3RyYXAuY29tL2RvY3MvNC4zL2xheW91dC9ncmlkL1xuLy8gLSBodHRwczovL2dpdGh1Yi5jb20va3Jpc3RvZmVyam9zZXBoL2ZsZXhib3hncmlkL2Jsb2IvbWFzdGVyL3NyYy9jc3MvZmxleGJveGdyaWQuY3NzXG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9yb3lsZWUwNzA0L3JlYWN0LWZsZXhib3gtZ3JpZFxuLy8gLSBodHRwczovL21hdGVyaWFsLmFuZ3VsYXJqcy5vcmcvbGF0ZXN0L2xheW91dC9pbnRyb2R1Y3Rpb25cbi8vXG4vLyBGb2xsb3cgdGhpcyBmbGV4Ym94IEd1aWRlIHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIG1vZGVsOlxuLy8gLSBodHRwczovL2Nzcy10cmlja3MuY29tL3NuaXBwZXRzL2Nzcy9hLWd1aWRlLXRvLWZsZXhib3gvXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY29sdW1uc1wiLCBcImNvbHVtblNwYWNpbmdcIiwgXCJjb21wb25lbnRcIiwgXCJjb250YWluZXJcIiwgXCJkaXJlY3Rpb25cIiwgXCJpdGVtXCIsIFwicm93U3BhY2luZ1wiLCBcInNwYWNpbmdcIiwgXCJ3cmFwXCIsIFwiemVyb01pbldpZHRoXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfZXh0ZW5kU3hQcm9wIGFzIGV4dGVuZFN4UHJvcCwgaGFuZGxlQnJlYWtwb2ludHMsIHVuc3RhYmxlX3Jlc29sdmVCcmVha3BvaW50VmFsdWVzIGFzIHJlc29sdmVCcmVha3BvaW50VmFsdWVzIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHJlcXVpcmVQcm9wRmFjdG9yeSBmcm9tICcuLi91dGlscy9yZXF1aXJlUHJvcEZhY3RvcnknO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWUnO1xuaW1wb3J0IEdyaWRDb250ZXh0IGZyb20gJy4vR3JpZENvbnRleHQnO1xuaW1wb3J0IGdyaWRDbGFzc2VzLCB7IGdldEdyaWRVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2dyaWRDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBnZXRPZmZzZXQodmFsKSB7XG4gIGNvbnN0IHBhcnNlID0gcGFyc2VGbG9hdCh2YWwpO1xuICByZXR1cm4gYCR7cGFyc2V9JHtTdHJpbmcodmFsKS5yZXBsYWNlKFN0cmluZyhwYXJzZSksICcnKSB8fCAncHgnfWA7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVHcmlkKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pIHtcbiAgbGV0IHNpemU7XG4gIHJldHVybiB0aGVtZS5icmVha3BvaW50cy5rZXlzLnJlZHVjZSgoZ2xvYmFsU3R5bGVzLCBicmVha3BvaW50KSA9PiB7XG4gICAgLy8gVXNlIHNpZGUgZWZmZWN0IG92ZXIgaW1tdXRhYmlsaXR5IGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuXG4gICAgbGV0IHN0eWxlcyA9IHt9O1xuICAgIGlmIChvd25lclN0YXRlW2JyZWFrcG9pbnRdKSB7XG4gICAgICBzaXplID0gb3duZXJTdGF0ZVticmVha3BvaW50XTtcbiAgICB9XG4gICAgaWYgKCFzaXplKSB7XG4gICAgICByZXR1cm4gZ2xvYmFsU3R5bGVzO1xuICAgIH1cbiAgICBpZiAoc2l6ZSA9PT0gdHJ1ZSkge1xuICAgICAgLy8gRm9yIHRoZSBhdXRvIGxheW91dGluZ1xuICAgICAgc3R5bGVzID0ge1xuICAgICAgICBmbGV4QmFzaXM6IDAsXG4gICAgICAgIGZsZXhHcm93OiAxLFxuICAgICAgICBtYXhXaWR0aDogJzEwMCUnXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoc2l6ZSA9PT0gJ2F1dG8nKSB7XG4gICAgICBzdHlsZXMgPSB7XG4gICAgICAgIGZsZXhCYXNpczogJ2F1dG8nLFxuICAgICAgICBmbGV4R3JvdzogMCxcbiAgICAgICAgZmxleFNocmluazogMCxcbiAgICAgICAgbWF4V2lkdGg6ICdub25lJyxcbiAgICAgICAgd2lkdGg6ICdhdXRvJ1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29sdW1uc0JyZWFrcG9pbnRWYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gICAgICAgIHZhbHVlczogb3duZXJTdGF0ZS5jb2x1bW5zLFxuICAgICAgICBicmVha3BvaW50czogdGhlbWUuYnJlYWtwb2ludHMudmFsdWVzXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNvbHVtblZhbHVlID0gdHlwZW9mIGNvbHVtbnNCcmVha3BvaW50VmFsdWVzID09PSAnb2JqZWN0JyA/IGNvbHVtbnNCcmVha3BvaW50VmFsdWVzW2JyZWFrcG9pbnRdIDogY29sdW1uc0JyZWFrcG9pbnRWYWx1ZXM7XG4gICAgICBpZiAoY29sdW1uVmFsdWUgPT09IHVuZGVmaW5lZCB8fCBjb2x1bW5WYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsU3R5bGVzO1xuICAgICAgfVxuICAgICAgLy8gS2VlcCA3IHNpZ25pZmljYW50IG51bWJlcnMuXG4gICAgICBjb25zdCB3aWR0aCA9IGAke01hdGgucm91bmQoc2l6ZSAvIGNvbHVtblZhbHVlICogMTBlNykgLyAxMGU1fSVgO1xuICAgICAgbGV0IG1vcmUgPSB7fTtcbiAgICAgIGlmIChvd25lclN0YXRlLmNvbnRhaW5lciAmJiBvd25lclN0YXRlLml0ZW0gJiYgb3duZXJTdGF0ZS5jb2x1bW5TcGFjaW5nICE9PSAwKSB7XG4gICAgICAgIGNvbnN0IHRoZW1lU3BhY2luZyA9IHRoZW1lLnNwYWNpbmcob3duZXJTdGF0ZS5jb2x1bW5TcGFjaW5nKTtcbiAgICAgICAgaWYgKHRoZW1lU3BhY2luZyAhPT0gJzBweCcpIHtcbiAgICAgICAgICBjb25zdCBmdWxsV2lkdGggPSBgY2FsYygke3dpZHRofSArICR7Z2V0T2Zmc2V0KHRoZW1lU3BhY2luZyl9KWA7XG4gICAgICAgICAgbW9yZSA9IHtcbiAgICAgICAgICAgIGZsZXhCYXNpczogZnVsbFdpZHRoLFxuICAgICAgICAgICAgbWF4V2lkdGg6IGZ1bGxXaWR0aFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2xvc2UgdG8gdGhlIGJvb3RzdHJhcCBpbXBsZW1lbnRhdGlvbjpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iLzhmY2NhYTI0MzllOTdlYzcyYTRiN2RjNDJjY2MxZjY0OTc5MGFkYjAvc2Nzcy9taXhpbnMvX2dyaWQuc2NzcyNMNDFcbiAgICAgIHN0eWxlcyA9IF9leHRlbmRzKHtcbiAgICAgICAgZmxleEJhc2lzOiB3aWR0aCxcbiAgICAgICAgZmxleEdyb3c6IDAsXG4gICAgICAgIG1heFdpZHRoOiB3aWR0aFxuICAgICAgfSwgbW9yZSk7XG4gICAgfVxuXG4gICAgLy8gTm8gbmVlZCBmb3IgYSBtZWRpYSBxdWVyeSBmb3IgdGhlIGZpcnN0IHNpemUuXG4gICAgaWYgKHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlc1ticmVha3BvaW50XSA9PT0gMCkge1xuICAgICAgT2JqZWN0LmFzc2lnbihnbG9iYWxTdHlsZXMsIHN0eWxlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdsb2JhbFN0eWxlc1t0aGVtZS5icmVha3BvaW50cy51cChicmVha3BvaW50KV0gPSBzdHlsZXM7XG4gICAgfVxuICAgIHJldHVybiBnbG9iYWxTdHlsZXM7XG4gIH0sIHt9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZURpcmVjdGlvbih7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSB7XG4gIGNvbnN0IGRpcmVjdGlvblZhbHVlcyA9IHJlc29sdmVCcmVha3BvaW50VmFsdWVzKHtcbiAgICB2YWx1ZXM6IG93bmVyU3RhdGUuZGlyZWN0aW9uLFxuICAgIGJyZWFrcG9pbnRzOiB0aGVtZS5icmVha3BvaW50cy52YWx1ZXNcbiAgfSk7XG4gIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyh7XG4gICAgdGhlbWVcbiAgfSwgZGlyZWN0aW9uVmFsdWVzLCBwcm9wVmFsdWUgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IHtcbiAgICAgIGZsZXhEaXJlY3Rpb246IHByb3BWYWx1ZVxuICAgIH07XG4gICAgaWYgKHByb3BWYWx1ZS5pbmRleE9mKCdjb2x1bW4nKSA9PT0gMCkge1xuICAgICAgb3V0cHV0W2AmID4gLiR7Z3JpZENsYXNzZXMuaXRlbX1gXSA9IHtcbiAgICAgICAgbWF4V2lkdGg6ICdub25lJ1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfSk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgemVybyB2YWx1ZSBicmVha3BvaW50IGtleXMgYmVmb3JlIGEgbm9uLXplcm8gdmFsdWUgYnJlYWtwb2ludCBrZXkuXG4gKiBAZXhhbXBsZSB7IHhzOiAwLCBzbTogMCwgbWQ6IDIsIGxnOiAwLCB4bDogMCB9IG9yIFswLCAwLCAyLCAwLCAwXVxuICogQHJldHVybnMgW3hzLCBzbV1cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzKHtcbiAgYnJlYWtwb2ludHMsXG4gIHZhbHVlc1xufSkge1xuICBsZXQgbm9uWmVyb0tleSA9ICcnO1xuICBPYmplY3Qua2V5cyh2YWx1ZXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICBpZiAobm9uWmVyb0tleSAhPT0gJycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHZhbHVlc1trZXldICE9PSAwKSB7XG4gICAgICBub25aZXJvS2V5ID0ga2V5O1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHNvcnRlZEJyZWFrcG9pbnRLZXlzQnlWYWx1ZSA9IE9iamVjdC5rZXlzKGJyZWFrcG9pbnRzKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgcmV0dXJuIGJyZWFrcG9pbnRzW2FdIC0gYnJlYWtwb2ludHNbYl07XG4gIH0pO1xuICByZXR1cm4gc29ydGVkQnJlYWtwb2ludEtleXNCeVZhbHVlLnNsaWNlKDAsIHNvcnRlZEJyZWFrcG9pbnRLZXlzQnlWYWx1ZS5pbmRleE9mKG5vblplcm9LZXkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVJvd0dhcCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSB7XG4gIGNvbnN0IHtcbiAgICBjb250YWluZXIsXG4gICAgcm93U3BhY2luZ1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgbGV0IHN0eWxlcyA9IHt9O1xuICBpZiAoY29udGFpbmVyICYmIHJvd1NwYWNpbmcgIT09IDApIHtcbiAgICBjb25zdCByb3dTcGFjaW5nVmFsdWVzID0gcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICAgICAgdmFsdWVzOiByb3dTcGFjaW5nLFxuICAgICAgYnJlYWtwb2ludHM6IHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlc1xuICAgIH0pO1xuICAgIGxldCB6ZXJvVmFsdWVCcmVha3BvaW50S2V5cztcbiAgICBpZiAodHlwZW9mIHJvd1NwYWNpbmdWYWx1ZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICB6ZXJvVmFsdWVCcmVha3BvaW50S2V5cyA9IGV4dHJhY3RaZXJvVmFsdWVCcmVha3BvaW50S2V5cyh7XG4gICAgICAgIGJyZWFrcG9pbnRzOiB0aGVtZS5icmVha3BvaW50cy52YWx1ZXMsXG4gICAgICAgIHZhbHVlczogcm93U3BhY2luZ1ZhbHVlc1xuICAgICAgfSk7XG4gICAgfVxuICAgIHN0eWxlcyA9IGhhbmRsZUJyZWFrcG9pbnRzKHtcbiAgICAgIHRoZW1lXG4gICAgfSwgcm93U3BhY2luZ1ZhbHVlcywgKHByb3BWYWx1ZSwgYnJlYWtwb2ludCkgPT4ge1xuICAgICAgdmFyIF96ZXJvVmFsdWVCcmVha3BvaW50SztcbiAgICAgIGNvbnN0IHRoZW1lU3BhY2luZyA9IHRoZW1lLnNwYWNpbmcocHJvcFZhbHVlKTtcbiAgICAgIGlmICh0aGVtZVNwYWNpbmcgIT09ICcwcHgnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWFyZ2luVG9wOiBgLSR7Z2V0T2Zmc2V0KHRoZW1lU3BhY2luZyl9YCxcbiAgICAgICAgICBbYCYgPiAuJHtncmlkQ2xhc3Nlcy5pdGVtfWBdOiB7XG4gICAgICAgICAgICBwYWRkaW5nVG9wOiBnZXRPZmZzZXQodGhlbWVTcGFjaW5nKVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmICgoX3plcm9WYWx1ZUJyZWFrcG9pbnRLID0gemVyb1ZhbHVlQnJlYWtwb2ludEtleXMpICE9IG51bGwgJiYgX3plcm9WYWx1ZUJyZWFrcG9pbnRLLmluY2x1ZGVzKGJyZWFrcG9pbnQpKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1hcmdpblRvcDogMCxcbiAgICAgICAgW2AmID4gLiR7Z3JpZENsYXNzZXMuaXRlbX1gXToge1xuICAgICAgICAgIHBhZGRpbmdUb3A6IDBcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gc3R5bGVzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQ29sdW1uR2FwKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pIHtcbiAgY29uc3Qge1xuICAgIGNvbnRhaW5lcixcbiAgICBjb2x1bW5TcGFjaW5nXG4gIH0gPSBvd25lclN0YXRlO1xuICBsZXQgc3R5bGVzID0ge307XG4gIGlmIChjb250YWluZXIgJiYgY29sdW1uU3BhY2luZyAhPT0gMCkge1xuICAgIGNvbnN0IGNvbHVtblNwYWNpbmdWYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gICAgICB2YWx1ZXM6IGNvbHVtblNwYWNpbmcsXG4gICAgICBicmVha3BvaW50czogdGhlbWUuYnJlYWtwb2ludHMudmFsdWVzXG4gICAgfSk7XG4gICAgbGV0IHplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzO1xuICAgIGlmICh0eXBlb2YgY29sdW1uU3BhY2luZ1ZhbHVlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzID0gZXh0cmFjdFplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzKHtcbiAgICAgICAgYnJlYWtwb2ludHM6IHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlcyxcbiAgICAgICAgdmFsdWVzOiBjb2x1bW5TcGFjaW5nVmFsdWVzXG4gICAgICB9KTtcbiAgICB9XG4gICAgc3R5bGVzID0gaGFuZGxlQnJlYWtwb2ludHMoe1xuICAgICAgdGhlbWVcbiAgICB9LCBjb2x1bW5TcGFjaW5nVmFsdWVzLCAocHJvcFZhbHVlLCBicmVha3BvaW50KSA9PiB7XG4gICAgICB2YXIgX3plcm9WYWx1ZUJyZWFrcG9pbnRLMjtcbiAgICAgIGNvbnN0IHRoZW1lU3BhY2luZyA9IHRoZW1lLnNwYWNpbmcocHJvcFZhbHVlKTtcbiAgICAgIGlmICh0aGVtZVNwYWNpbmcgIT09ICcwcHgnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgd2lkdGg6IGBjYWxjKDEwMCUgKyAke2dldE9mZnNldCh0aGVtZVNwYWNpbmcpfSlgLFxuICAgICAgICAgIG1hcmdpbkxlZnQ6IGAtJHtnZXRPZmZzZXQodGhlbWVTcGFjaW5nKX1gLFxuICAgICAgICAgIFtgJiA+IC4ke2dyaWRDbGFzc2VzLml0ZW19YF06IHtcbiAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiBnZXRPZmZzZXQodGhlbWVTcGFjaW5nKVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmICgoX3plcm9WYWx1ZUJyZWFrcG9pbnRLMiA9IHplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzKSAhPSBudWxsICYmIF96ZXJvVmFsdWVCcmVha3BvaW50SzIuaW5jbHVkZXMoYnJlYWtwb2ludCkpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgbWFyZ2luTGVmdDogMCxcbiAgICAgICAgW2AmID4gLiR7Z3JpZENsYXNzZXMuaXRlbX1gXToge1xuICAgICAgICAgIHBhZGRpbmdMZWZ0OiAwXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHN0eWxlcztcbn1cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU3BhY2luZ1N0eWxlcyhzcGFjaW5nLCBicmVha3BvaW50cywgc3R5bGVzID0ge30pIHtcbiAgLy8gdW5kZWZpbmVkL251bGwgb3IgYHNwYWNpbmdgIDw9IDBcbiAgaWYgKCFzcGFjaW5nIHx8IHNwYWNpbmcgPD0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICAvLyBpbiBjYXNlIG9mIHN0cmluZy9udW1iZXIgYHNwYWNpbmdgXG4gIGlmICh0eXBlb2Ygc3BhY2luZyA9PT0gJ3N0cmluZycgJiYgIU51bWJlci5pc05hTihOdW1iZXIoc3BhY2luZykpIHx8IHR5cGVvZiBzcGFjaW5nID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBbc3R5bGVzW2BzcGFjaW5nLXhzLSR7U3RyaW5nKHNwYWNpbmcpfWBdXTtcbiAgfVxuICAvLyBpbiBjYXNlIG9mIG9iamVjdCBgc3BhY2luZ2BcbiAgY29uc3Qgc3BhY2luZ1N0eWxlcyA9IFtdO1xuICBicmVha3BvaW50cy5mb3JFYWNoKGJyZWFrcG9pbnQgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gc3BhY2luZ1ticmVha3BvaW50XTtcbiAgICBpZiAoTnVtYmVyKHZhbHVlKSA+IDApIHtcbiAgICAgIHNwYWNpbmdTdHlsZXMucHVzaChzdHlsZXNbYHNwYWNpbmctJHticmVha3BvaW50fS0ke1N0cmluZyh2YWx1ZSl9YF0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzcGFjaW5nU3R5bGVzO1xufVxuXG4vLyBEZWZhdWx0IENTUyB2YWx1ZXNcbi8vIGZsZXg6ICcwIDEgYXV0bycsXG4vLyBmbGV4RGlyZWN0aW9uOiAncm93Jyxcbi8vIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0Jyxcbi8vIGZsZXhXcmFwOiAnbm93cmFwJyxcbi8vIGp1c3RpZnlDb250ZW50OiAnZmxleC1zdGFydCcsXG5jb25zdCBHcmlkUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpR3JpZCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICBjb25zdCB7XG4gICAgICBjb250YWluZXIsXG4gICAgICBkaXJlY3Rpb24sXG4gICAgICBpdGVtLFxuICAgICAgc3BhY2luZyxcbiAgICAgIHdyYXAsXG4gICAgICB6ZXJvTWluV2lkdGgsXG4gICAgICBicmVha3BvaW50c1xuICAgIH0gPSBvd25lclN0YXRlO1xuICAgIGxldCBzcGFjaW5nU3R5bGVzID0gW107XG5cbiAgICAvLyBpbiBjYXNlIG9mIGdyaWQgaXRlbVxuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIHNwYWNpbmdTdHlsZXMgPSByZXNvbHZlU3BhY2luZ1N0eWxlcyhzcGFjaW5nLCBicmVha3BvaW50cywgc3R5bGVzKTtcbiAgICB9XG4gICAgY29uc3QgYnJlYWtwb2ludHNTdHlsZXMgPSBbXTtcbiAgICBicmVha3BvaW50cy5mb3JFYWNoKGJyZWFrcG9pbnQgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBvd25lclN0YXRlW2JyZWFrcG9pbnRdO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGJyZWFrcG9pbnRzU3R5bGVzLnB1c2goc3R5bGVzW2BncmlkLSR7YnJlYWtwb2ludH0tJHtTdHJpbmcodmFsdWUpfWBdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBjb250YWluZXIgJiYgc3R5bGVzLmNvbnRhaW5lciwgaXRlbSAmJiBzdHlsZXMuaXRlbSwgemVyb01pbldpZHRoICYmIHN0eWxlcy56ZXJvTWluV2lkdGgsIC4uLnNwYWNpbmdTdHlsZXMsIGRpcmVjdGlvbiAhPT0gJ3JvdycgJiYgc3R5bGVzW2BkaXJlY3Rpb24teHMtJHtTdHJpbmcoZGlyZWN0aW9uKX1gXSwgd3JhcCAhPT0gJ3dyYXAnICYmIHN0eWxlc1tgd3JhcC14cy0ke1N0cmluZyh3cmFwKX1gXSwgLi4uYnJlYWtwb2ludHNTdHlsZXNdO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnXG59LCBvd25lclN0YXRlLmNvbnRhaW5lciAmJiB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgZmxleFdyYXA6ICd3cmFwJyxcbiAgd2lkdGg6ICcxMDAlJ1xufSwgb3duZXJTdGF0ZS5pdGVtICYmIHtcbiAgbWFyZ2luOiAwIC8vIEZvciBpbnN0YW5jZSwgaXQncyB1c2VmdWwgd2hlbiB1c2VkIHdpdGggYSBgZmlndXJlYCBlbGVtZW50LlxufSwgb3duZXJTdGF0ZS56ZXJvTWluV2lkdGggJiYge1xuICBtaW5XaWR0aDogMFxufSwgb3duZXJTdGF0ZS53cmFwICE9PSAnd3JhcCcgJiYge1xuICBmbGV4V3JhcDogb3duZXJTdGF0ZS53cmFwXG59KSwgZ2VuZXJhdGVEaXJlY3Rpb24sIGdlbmVyYXRlUm93R2FwLCBnZW5lcmF0ZUNvbHVtbkdhcCwgZ2VuZXJhdGVHcmlkKTtcbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU3BhY2luZ0NsYXNzZXMoc3BhY2luZywgYnJlYWtwb2ludHMpIHtcbiAgLy8gdW5kZWZpbmVkL251bGwgb3IgYHNwYWNpbmdgIDw9IDBcbiAgaWYgKCFzcGFjaW5nIHx8IHNwYWNpbmcgPD0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICAvLyBpbiBjYXNlIG9mIHN0cmluZy9udW1iZXIgYHNwYWNpbmdgXG4gIGlmICh0eXBlb2Ygc3BhY2luZyA9PT0gJ3N0cmluZycgJiYgIU51bWJlci5pc05hTihOdW1iZXIoc3BhY2luZykpIHx8IHR5cGVvZiBzcGFjaW5nID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBbYHNwYWNpbmcteHMtJHtTdHJpbmcoc3BhY2luZyl9YF07XG4gIH1cbiAgLy8gaW4gY2FzZSBvZiBvYmplY3QgYHNwYWNpbmdgXG4gIGNvbnN0IGNsYXNzZXMgPSBbXTtcbiAgYnJlYWtwb2ludHMuZm9yRWFjaChicmVha3BvaW50ID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHNwYWNpbmdbYnJlYWtwb2ludF07XG4gICAgaWYgKE51bWJlcih2YWx1ZSkgPiAwKSB7XG4gICAgICBjb25zdCBjbGFzc05hbWUgPSBgc3BhY2luZy0ke2JyZWFrcG9pbnR9LSR7U3RyaW5nKHZhbHVlKX1gO1xuICAgICAgY2xhc3Nlcy5wdXNoKGNsYXNzTmFtZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNsYXNzZXM7XG59XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBjb250YWluZXIsXG4gICAgZGlyZWN0aW9uLFxuICAgIGl0ZW0sXG4gICAgc3BhY2luZyxcbiAgICB3cmFwLFxuICAgIHplcm9NaW5XaWR0aCxcbiAgICBicmVha3BvaW50c1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgbGV0IHNwYWNpbmdDbGFzc2VzID0gW107XG5cbiAgLy8gaW4gY2FzZSBvZiBncmlkIGl0ZW1cbiAgaWYgKGNvbnRhaW5lcikge1xuICAgIHNwYWNpbmdDbGFzc2VzID0gcmVzb2x2ZVNwYWNpbmdDbGFzc2VzKHNwYWNpbmcsIGJyZWFrcG9pbnRzKTtcbiAgfVxuICBjb25zdCBicmVha3BvaW50c0NsYXNzZXMgPSBbXTtcbiAgYnJlYWtwb2ludHMuZm9yRWFjaChicmVha3BvaW50ID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IG93bmVyU3RhdGVbYnJlYWtwb2ludF07XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBicmVha3BvaW50c0NsYXNzZXMucHVzaChgZ3JpZC0ke2JyZWFrcG9pbnR9LSR7U3RyaW5nKHZhbHVlKX1gKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBjb250YWluZXIgJiYgJ2NvbnRhaW5lcicsIGl0ZW0gJiYgJ2l0ZW0nLCB6ZXJvTWluV2lkdGggJiYgJ3plcm9NaW5XaWR0aCcsIC4uLnNwYWNpbmdDbGFzc2VzLCBkaXJlY3Rpb24gIT09ICdyb3cnICYmIGBkaXJlY3Rpb24teHMtJHtTdHJpbmcoZGlyZWN0aW9uKX1gLCB3cmFwICE9PSAnd3JhcCcgJiYgYHdyYXAteHMtJHtTdHJpbmcod3JhcCl9YCwgLi4uYnJlYWtwb2ludHNDbGFzc2VzXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEdyaWRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IEdyaWQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBHcmlkKGluUHJvcHMsIHJlZikge1xuICBjb25zdCB0aGVtZVByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUdyaWQnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgYnJlYWtwb2ludHNcbiAgfSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IHByb3BzID0gZXh0ZW5kU3hQcm9wKHRoZW1lUHJvcHMpO1xuICBjb25zdCB7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb2x1bW5zOiBjb2x1bW5zUHJvcCxcbiAgICAgIGNvbHVtblNwYWNpbmc6IGNvbHVtblNwYWNpbmdQcm9wLFxuICAgICAgY29tcG9uZW50ID0gJ2RpdicsXG4gICAgICBjb250YWluZXIgPSBmYWxzZSxcbiAgICAgIGRpcmVjdGlvbiA9ICdyb3cnLFxuICAgICAgaXRlbSA9IGZhbHNlLFxuICAgICAgcm93U3BhY2luZzogcm93U3BhY2luZ1Byb3AsXG4gICAgICBzcGFjaW5nID0gMCxcbiAgICAgIHdyYXAgPSAnd3JhcCcsXG4gICAgICB6ZXJvTWluV2lkdGggPSBmYWxzZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCByb3dTcGFjaW5nID0gcm93U3BhY2luZ1Byb3AgfHwgc3BhY2luZztcbiAgY29uc3QgY29sdW1uU3BhY2luZyA9IGNvbHVtblNwYWNpbmdQcm9wIHx8IHNwYWNpbmc7XG4gIGNvbnN0IGNvbHVtbnNDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChHcmlkQ29udGV4dCk7XG5cbiAgLy8gY29sdW1ucyBzZXQgd2l0aCBkZWZhdWx0IGJyZWFrcG9pbnQgdW5pdCBvZiAxMlxuICBjb25zdCBjb2x1bW5zID0gY29udGFpbmVyID8gY29sdW1uc1Byb3AgfHwgMTIgOiBjb2x1bW5zQ29udGV4dDtcbiAgY29uc3QgYnJlYWtwb2ludHNWYWx1ZXMgPSB7fTtcbiAgY29uc3Qgb3RoZXJGaWx0ZXJlZCA9IF9leHRlbmRzKHt9LCBvdGhlcik7XG4gIGJyZWFrcG9pbnRzLmtleXMuZm9yRWFjaChicmVha3BvaW50ID0+IHtcbiAgICBpZiAob3RoZXJbYnJlYWtwb2ludF0gIT0gbnVsbCkge1xuICAgICAgYnJlYWtwb2ludHNWYWx1ZXNbYnJlYWtwb2ludF0gPSBvdGhlclticmVha3BvaW50XTtcbiAgICAgIGRlbGV0ZSBvdGhlckZpbHRlcmVkW2JyZWFrcG9pbnRdO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2x1bW5zLFxuICAgIGNvbnRhaW5lcixcbiAgICBkaXJlY3Rpb24sXG4gICAgaXRlbSxcbiAgICByb3dTcGFjaW5nLFxuICAgIGNvbHVtblNwYWNpbmcsXG4gICAgd3JhcCxcbiAgICB6ZXJvTWluV2lkdGgsXG4gICAgc3BhY2luZ1xuICB9LCBicmVha3BvaW50c1ZhbHVlcywge1xuICAgIGJyZWFrcG9pbnRzOiBicmVha3BvaW50cy5rZXlzXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChHcmlkQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb2x1bW5zLFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChHcmlkUm9vdCwgX2V4dGVuZHMoe1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgICBhczogY29tcG9uZW50LFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBvdGhlckZpbHRlcmVkKSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEdyaWQucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGNvbHVtbnMuXG4gICAqIEBkZWZhdWx0IDEyXG4gICAqL1xuICBjb2x1bW5zOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubnVtYmVyKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgaG9yaXpvbnRhbCBzcGFjZSBiZXR3ZWVuIHRoZSB0eXBlIGBpdGVtYCBjb21wb25lbnRzLlxuICAgKiBJdCBvdmVycmlkZXMgdGhlIHZhbHVlIG9mIHRoZSBgc3BhY2luZ2AgcHJvcC5cbiAgICovXG4gIGNvbHVtblNwYWNpbmc6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IHdpbGwgaGF2ZSB0aGUgZmxleCAqY29udGFpbmVyKiBiZWhhdmlvci5cbiAgICogWW91IHNob3VsZCBiZSB3cmFwcGluZyAqaXRlbXMqIHdpdGggYSAqY29udGFpbmVyKi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNvbnRhaW5lcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBgZmxleC1kaXJlY3Rpb25gIHN0eWxlIHByb3BlcnR5LlxuICAgKiBJdCBpcyBhcHBsaWVkIGZvciBhbGwgc2NyZWVuIHNpemVzLlxuICAgKiBAZGVmYXVsdCAncm93J1xuICAgKi9cbiAgZGlyZWN0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydjb2x1bW4tcmV2ZXJzZScsICdjb2x1bW4nLCAncm93LXJldmVyc2UnLCAncm93J10pLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2YoWydjb2x1bW4tcmV2ZXJzZScsICdjb2x1bW4nLCAncm93LXJldmVyc2UnLCAncm93J10pKSwgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IHdpbGwgaGF2ZSB0aGUgZmxleCAqaXRlbSogYmVoYXZpb3IuXG4gICAqIFlvdSBzaG91bGQgYmUgd3JhcHBpbmcgKml0ZW1zKiB3aXRoIGEgKmNvbnRhaW5lciouXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpdGVtOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGEgbnVtYmVyLCBpdCBzZXRzIHRoZSBudW1iZXIgb2YgY29sdW1ucyB0aGUgZ3JpZCBpdGVtIHVzZXMuXG4gICAqIEl0IGNhbid0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIGNvbnRhaW5lciAoMTIgYnkgZGVmYXVsdCkuXG4gICAqIElmICdhdXRvJywgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIG1hdGNoZXMgaXRzIGNvbnRlbnQuXG4gICAqIElmIGZhbHNlLCB0aGUgcHJvcCBpcyBpZ25vcmVkLlxuICAgKiBJZiB0cnVlLCB0aGUgZ3JpZCBpdGVtJ3Mgd2lkdGggZ3Jvd3MgdG8gdXNlIHRoZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGdyaWQgY29udGFpbmVyLlxuICAgKiBUaGUgdmFsdWUgaXMgYXBwbGllZCBmb3IgdGhlIGBsZ2AgYnJlYWtwb2ludCBhbmQgd2lkZXIgc2NyZWVucyBpZiBub3Qgb3ZlcnJpZGRlbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGxnOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydhdXRvJ10pLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuYm9vbF0pLFxuICAvKipcbiAgICogSWYgYSBudW1iZXIsIGl0IHNldHMgdGhlIG51bWJlciBvZiBjb2x1bW5zIHRoZSBncmlkIGl0ZW0gdXNlcy5cbiAgICogSXQgY2FuJ3QgYmUgZ3JlYXRlciB0aGFuIHRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgY29udGFpbmVyICgxMiBieSBkZWZhdWx0KS5cbiAgICogSWYgJ2F1dG8nLCB0aGUgZ3JpZCBpdGVtJ3Mgd2lkdGggbWF0Y2hlcyBpdHMgY29udGVudC5cbiAgICogSWYgZmFsc2UsIHRoZSBwcm9wIGlzIGlnbm9yZWQuXG4gICAqIElmIHRydWUsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBncm93cyB0byB1c2UgdGhlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgZ3JpZCBjb250YWluZXIuXG4gICAqIFRoZSB2YWx1ZSBpcyBhcHBsaWVkIGZvciB0aGUgYG1kYCBicmVha3BvaW50IGFuZCB3aWRlciBzY3JlZW5zIGlmIG5vdCBvdmVycmlkZGVuLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2F1dG8nXSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5ib29sXSksXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSB2ZXJ0aWNhbCBzcGFjZSBiZXR3ZWVuIHRoZSB0eXBlIGBpdGVtYCBjb21wb25lbnRzLlxuICAgKiBJdCBvdmVycmlkZXMgdGhlIHZhbHVlIG9mIHRoZSBgc3BhY2luZ2AgcHJvcC5cbiAgICovXG4gIHJvd1NwYWNpbmc6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGEgbnVtYmVyLCBpdCBzZXRzIHRoZSBudW1iZXIgb2YgY29sdW1ucyB0aGUgZ3JpZCBpdGVtIHVzZXMuXG4gICAqIEl0IGNhbid0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIGNvbnRhaW5lciAoMTIgYnkgZGVmYXVsdCkuXG4gICAqIElmICdhdXRvJywgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIG1hdGNoZXMgaXRzIGNvbnRlbnQuXG4gICAqIElmIGZhbHNlLCB0aGUgcHJvcCBpcyBpZ25vcmVkLlxuICAgKiBJZiB0cnVlLCB0aGUgZ3JpZCBpdGVtJ3Mgd2lkdGggZ3Jvd3MgdG8gdXNlIHRoZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGdyaWQgY29udGFpbmVyLlxuICAgKiBUaGUgdmFsdWUgaXMgYXBwbGllZCBmb3IgdGhlIGBzbWAgYnJlYWtwb2ludCBhbmQgd2lkZXIgc2NyZWVucyBpZiBub3Qgb3ZlcnJpZGRlbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHNtOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydhdXRvJ10pLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuYm9vbF0pLFxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgdHlwZSBgaXRlbWAgY29tcG9uZW50cy5cbiAgICogSXQgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIHR5cGUgYGNvbnRhaW5lcmAgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBzcGFjaW5nOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkpLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBgZmxleC13cmFwYCBzdHlsZSBwcm9wZXJ0eS5cbiAgICogSXQncyBhcHBsaWVkIGZvciBhbGwgc2NyZWVuIHNpemVzLlxuICAgKiBAZGVmYXVsdCAnd3JhcCdcbiAgICovXG4gIHdyYXA6IFByb3BUeXBlcy5vbmVPZihbJ25vd3JhcCcsICd3cmFwLXJldmVyc2UnLCAnd3JhcCddKSxcbiAgLyoqXG4gICAqIElmIGEgbnVtYmVyLCBpdCBzZXRzIHRoZSBudW1iZXIgb2YgY29sdW1ucyB0aGUgZ3JpZCBpdGVtIHVzZXMuXG4gICAqIEl0IGNhbid0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIGNvbnRhaW5lciAoMTIgYnkgZGVmYXVsdCkuXG4gICAqIElmICdhdXRvJywgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIG1hdGNoZXMgaXRzIGNvbnRlbnQuXG4gICAqIElmIGZhbHNlLCB0aGUgcHJvcCBpcyBpZ25vcmVkLlxuICAgKiBJZiB0cnVlLCB0aGUgZ3JpZCBpdGVtJ3Mgd2lkdGggZ3Jvd3MgdG8gdXNlIHRoZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGdyaWQgY29udGFpbmVyLlxuICAgKiBUaGUgdmFsdWUgaXMgYXBwbGllZCBmb3IgdGhlIGB4bGAgYnJlYWtwb2ludCBhbmQgd2lkZXIgc2NyZWVucyBpZiBub3Qgb3ZlcnJpZGRlbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHhsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydhdXRvJ10pLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuYm9vbF0pLFxuICAvKipcbiAgICogSWYgYSBudW1iZXIsIGl0IHNldHMgdGhlIG51bWJlciBvZiBjb2x1bW5zIHRoZSBncmlkIGl0ZW0gdXNlcy5cbiAgICogSXQgY2FuJ3QgYmUgZ3JlYXRlciB0aGFuIHRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgY29udGFpbmVyICgxMiBieSBkZWZhdWx0KS5cbiAgICogSWYgJ2F1dG8nLCB0aGUgZ3JpZCBpdGVtJ3Mgd2lkdGggbWF0Y2hlcyBpdHMgY29udGVudC5cbiAgICogSWYgZmFsc2UsIHRoZSBwcm9wIGlzIGlnbm9yZWQuXG4gICAqIElmIHRydWUsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBncm93cyB0byB1c2UgdGhlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgZ3JpZCBjb250YWluZXIuXG4gICAqIFRoZSB2YWx1ZSBpcyBhcHBsaWVkIGZvciBhbGwgdGhlIHNjcmVlbiBzaXplcyB3aXRoIHRoZSBsb3dlc3QgcHJpb3JpdHkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB4czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLmJvb2xdKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgaXQgc2V0cyBgbWluLXdpZHRoOiAwYCBvbiB0aGUgaXRlbS5cbiAgICogUmVmZXIgdG8gdGhlIGxpbWl0YXRpb25zIHNlY3Rpb24gb2YgdGhlIGRvY3VtZW50YXRpb24gdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIHVzZSBjYXNlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgemVyb01pbldpZHRoOiBQcm9wVHlwZXMuYm9vbFxufSA6IHZvaWQgMDtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGNvbnN0IHJlcXVpcmVQcm9wID0gcmVxdWlyZVByb3BGYWN0b3J5KCdHcmlkJywgR3JpZCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNvbmNhdFxuICBHcmlkWydwcm9wVHlwZXMnICsgJyddID0gX2V4dGVuZHMoe30sIEdyaWQucHJvcFR5cGVzLCB7XG4gICAgZGlyZWN0aW9uOiByZXF1aXJlUHJvcCgnY29udGFpbmVyJyksXG4gICAgbGc6IHJlcXVpcmVQcm9wKCdpdGVtJyksXG4gICAgbWQ6IHJlcXVpcmVQcm9wKCdpdGVtJyksXG4gICAgc206IHJlcXVpcmVQcm9wKCdpdGVtJyksXG4gICAgc3BhY2luZzogcmVxdWlyZVByb3AoJ2NvbnRhaW5lcicpLFxuICAgIHdyYXA6IHJlcXVpcmVQcm9wKCdjb250YWluZXInKSxcbiAgICB4czogcmVxdWlyZVByb3AoJ2l0ZW0nKSxcbiAgICB6ZXJvTWluV2lkdGg6IHJlcXVpcmVQcm9wKCdpdGVtJylcbiAgfSk7XG59XG5leHBvcnQgZGVmYXVsdCBHcmlkOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFkZEVuZExpc3RlbmVyXCIsIFwiYXBwZWFyXCIsIFwiY2hpbGRyZW5cIiwgXCJlYXNpbmdcIiwgXCJpblwiLCBcIm9uRW50ZXJcIiwgXCJvbkVudGVyZWRcIiwgXCJvbkVudGVyaW5nXCIsIFwib25FeGl0XCIsIFwib25FeGl0ZWRcIiwgXCJvbkV4aXRpbmdcIiwgXCJzdHlsZVwiLCBcInRpbWVvdXRcIiwgXCJUcmFuc2l0aW9uQ29tcG9uZW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGVsZW1lbnRBY2NlcHRpbmdSZWYgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zaXRpb24gfSBmcm9tICdyZWFjdC10cmFuc2l0aW9uLWdyb3VwJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWUnO1xuaW1wb3J0IHsgZ2V0VHJhbnNpdGlvblByb3BzLCByZWZsb3cgfSBmcm9tICcuLi90cmFuc2l0aW9ucy91dGlscyc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBnZXRTY2FsZSh2YWx1ZSkge1xuICByZXR1cm4gYHNjYWxlKCR7dmFsdWV9LCAke3ZhbHVlICoqIDJ9KWA7XG59XG5jb25zdCBzdHlsZXMgPSB7XG4gIGVudGVyaW5nOiB7XG4gICAgb3BhY2l0eTogMSxcbiAgICB0cmFuc2Zvcm06IGdldFNjYWxlKDEpXG4gIH0sXG4gIGVudGVyZWQ6IHtcbiAgICBvcGFjaXR5OiAxLFxuICAgIHRyYW5zZm9ybTogJ25vbmUnXG4gIH1cbn07XG5cbi8qXG4gVE9ETyB2NjogcmVtb3ZlXG4gQ29uZGl0aW9uYWxseSBhcHBseSBhIHdvcmthcm91bmQgZm9yIHRoZSBDU1MgdHJhbnNpdGlvbiBidWcgaW4gU2FmYXJpIDE1LjQgLyBXZWJLaXQgYnJvd3NlcnMuXG4gKi9cbmNvbnN0IGlzV2ViS2l0MTU0ID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgL14oKD8hY2hyb21lfGFuZHJvaWQpLikqKHNhZmFyaXxtb2JpbGUpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAvKG9zIHx2ZXJzaW9uXFwvKTE1KC58Xyk0L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcblxuLyoqXG4gKiBUaGUgR3JvdyB0cmFuc2l0aW9uIGlzIHVzZWQgYnkgdGhlIFtUb29sdGlwXSgvbWF0ZXJpYWwtdWkvcmVhY3QtdG9vbHRpcC8pIGFuZFxuICogW1BvcG92ZXJdKC9tYXRlcmlhbC11aS9yZWFjdC1wb3BvdmVyLykgY29tcG9uZW50cy5cbiAqIEl0IHVzZXMgW3JlYWN0LXRyYW5zaXRpb24tZ3JvdXBdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXApIGludGVybmFsbHkuXG4gKi9cbmNvbnN0IEdyb3cgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBHcm93KHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgICAgYWRkRW5kTGlzdGVuZXIsXG4gICAgICBhcHBlYXIgPSB0cnVlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBlYXNpbmcsXG4gICAgICBpbjogaW5Qcm9wLFxuICAgICAgb25FbnRlcixcbiAgICAgIG9uRW50ZXJlZCxcbiAgICAgIG9uRW50ZXJpbmcsXG4gICAgICBvbkV4aXQsXG4gICAgICBvbkV4aXRlZCxcbiAgICAgIG9uRXhpdGluZyxcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCA9ICdhdXRvJyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcm9wLXR5cGVzXG4gICAgICBUcmFuc2l0aW9uQ29tcG9uZW50ID0gVHJhbnNpdGlvblxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCB0aW1lciA9IFJlYWN0LnVzZVJlZigpO1xuICBjb25zdCBhdXRvVGltZW91dCA9IFJlYWN0LnVzZVJlZigpO1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IG5vZGVSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYobm9kZVJlZiwgY2hpbGRyZW4ucmVmLCByZWYpO1xuICBjb25zdCBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrID0gY2FsbGJhY2sgPT4gbWF5YmVJc0FwcGVhcmluZyA9PiB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZVJlZi5jdXJyZW50O1xuXG4gICAgICAvLyBvbkVudGVyWHh4IGFuZCBvbkV4aXRYeHggY2FsbGJhY2tzIGhhdmUgYSBkaWZmZXJlbnQgYXJndW1lbnRzLmxlbmd0aCB2YWx1ZS5cbiAgICAgIGlmIChtYXliZUlzQXBwZWFyaW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2FsbGJhY2sobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayhub2RlLCBtYXliZUlzQXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUVudGVyaW5nID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkVudGVyaW5nKTtcbiAgY29uc3QgaGFuZGxlRW50ZXIgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKChub2RlLCBpc0FwcGVhcmluZykgPT4ge1xuICAgIHJlZmxvdyhub2RlKTsgLy8gU28gdGhlIGFuaW1hdGlvbiBhbHdheXMgc3RhcnQgZnJvbSB0aGUgc3RhcnQuXG5cbiAgICBjb25zdCB7XG4gICAgICBkdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgICAgZGVsYXksXG4gICAgICBlYXNpbmc6IHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvblxuICAgIH0gPSBnZXRUcmFuc2l0aW9uUHJvcHMoe1xuICAgICAgc3R5bGUsXG4gICAgICB0aW1lb3V0LFxuICAgICAgZWFzaW5nXG4gICAgfSwge1xuICAgICAgbW9kZTogJ2VudGVyJ1xuICAgIH0pO1xuICAgIGxldCBkdXJhdGlvbjtcbiAgICBpZiAodGltZW91dCA9PT0gJ2F1dG8nKSB7XG4gICAgICBkdXJhdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmdldEF1dG9IZWlnaHREdXJhdGlvbihub2RlLmNsaWVudEhlaWdodCk7XG4gICAgICBhdXRvVGltZW91dC5jdXJyZW50ID0gZHVyYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uO1xuICAgIH1cbiAgICBub2RlLnN0eWxlLnRyYW5zaXRpb24gPSBbdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdvcGFjaXR5Jywge1xuICAgICAgZHVyYXRpb24sXG4gICAgICBkZWxheVxuICAgIH0pLCB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3RyYW5zZm9ybScsIHtcbiAgICAgIGR1cmF0aW9uOiBpc1dlYktpdDE1NCA/IGR1cmF0aW9uIDogZHVyYXRpb24gKiAwLjY2NixcbiAgICAgIGRlbGF5LFxuICAgICAgZWFzaW5nOiB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb25cbiAgICB9KV0uam9pbignLCcpO1xuICAgIGlmIChvbkVudGVyKSB7XG4gICAgICBvbkVudGVyKG5vZGUsIGlzQXBwZWFyaW5nKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVFbnRlcmVkID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkVudGVyZWQpO1xuICBjb25zdCBoYW5kbGVFeGl0aW5nID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkV4aXRpbmcpO1xuICBjb25zdCBoYW5kbGVFeGl0ID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhub2RlID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBkdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgICAgZGVsYXksXG4gICAgICBlYXNpbmc6IHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvblxuICAgIH0gPSBnZXRUcmFuc2l0aW9uUHJvcHMoe1xuICAgICAgc3R5bGUsXG4gICAgICB0aW1lb3V0LFxuICAgICAgZWFzaW5nXG4gICAgfSwge1xuICAgICAgbW9kZTogJ2V4aXQnXG4gICAgfSk7XG4gICAgbGV0IGR1cmF0aW9uO1xuICAgIGlmICh0aW1lb3V0ID09PSAnYXV0bycpIHtcbiAgICAgIGR1cmF0aW9uID0gdGhlbWUudHJhbnNpdGlvbnMuZ2V0QXV0b0hlaWdodER1cmF0aW9uKG5vZGUuY2xpZW50SGVpZ2h0KTtcbiAgICAgIGF1dG9UaW1lb3V0LmN1cnJlbnQgPSBkdXJhdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgZHVyYXRpb24gPSB0cmFuc2l0aW9uRHVyYXRpb247XG4gICAgfVxuICAgIG5vZGUuc3R5bGUudHJhbnNpdGlvbiA9IFt0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB7XG4gICAgICBkdXJhdGlvbixcbiAgICAgIGRlbGF5XG4gICAgfSksIHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgICAgZHVyYXRpb246IGlzV2ViS2l0MTU0ID8gZHVyYXRpb24gOiBkdXJhdGlvbiAqIDAuNjY2LFxuICAgICAgZGVsYXk6IGlzV2ViS2l0MTU0ID8gZGVsYXkgOiBkZWxheSB8fCBkdXJhdGlvbiAqIDAuMzMzLFxuICAgICAgZWFzaW5nOiB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb25cbiAgICB9KV0uam9pbignLCcpO1xuICAgIG5vZGUuc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgbm9kZS5zdHlsZS50cmFuc2Zvcm0gPSBnZXRTY2FsZSgwLjc1KTtcbiAgICBpZiAob25FeGl0KSB7XG4gICAgICBvbkV4aXQobm9kZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlRXhpdGVkID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkV4aXRlZCk7XG4gIGNvbnN0IGhhbmRsZUFkZEVuZExpc3RlbmVyID0gbmV4dCA9PiB7XG4gICAgaWYgKHRpbWVvdXQgPT09ICdhdXRvJykge1xuICAgICAgdGltZXIuY3VycmVudCA9IHNldFRpbWVvdXQobmV4dCwgYXV0b1RpbWVvdXQuY3VycmVudCB8fCAwKTtcbiAgICB9XG4gICAgaWYgKGFkZEVuZExpc3RlbmVyKSB7XG4gICAgICAvLyBPbGQgY2FsbCBzaWduYXR1cmUgYmVmb3JlIGByZWFjdC10cmFuc2l0aW9uLWdyb3VwYCBpbXBsZW1lbnRlZCBgbm9kZVJlZmBcbiAgICAgIGFkZEVuZExpc3RlbmVyKG5vZGVSZWYuY3VycmVudCwgbmV4dCk7XG4gICAgfVxuICB9O1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIuY3VycmVudCk7XG4gICAgfTtcbiAgfSwgW10pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVHJhbnNpdGlvbkNvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIGFwcGVhcjogYXBwZWFyLFxuICAgIGluOiBpblByb3AsXG4gICAgbm9kZVJlZjogbm9kZVJlZixcbiAgICBvbkVudGVyOiBoYW5kbGVFbnRlcixcbiAgICBvbkVudGVyZWQ6IGhhbmRsZUVudGVyZWQsXG4gICAgb25FbnRlcmluZzogaGFuZGxlRW50ZXJpbmcsXG4gICAgb25FeGl0OiBoYW5kbGVFeGl0LFxuICAgIG9uRXhpdGVkOiBoYW5kbGVFeGl0ZWQsXG4gICAgb25FeGl0aW5nOiBoYW5kbGVFeGl0aW5nLFxuICAgIGFkZEVuZExpc3RlbmVyOiBoYW5kbGVBZGRFbmRMaXN0ZW5lcixcbiAgICB0aW1lb3V0OiB0aW1lb3V0ID09PSAnYXV0bycgPyBudWxsIDogdGltZW91dFxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAoc3RhdGUsIGNoaWxkUHJvcHMpID0+IHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBfZXh0ZW5kcyh7XG4gICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICB0cmFuc2Zvcm06IGdldFNjYWxlKDAuNzUpLFxuICAgICAgICAgIHZpc2liaWxpdHk6IHN0YXRlID09PSAnZXhpdGVkJyAmJiAhaW5Qcm9wID8gJ2hpZGRlbicgOiB1bmRlZmluZWRcbiAgICAgICAgfSwgc3R5bGVzW3N0YXRlXSwgc3R5bGUsIGNoaWxkcmVuLnByb3BzLnN0eWxlKSxcbiAgICAgICAgcmVmOiBoYW5kbGVSZWZcbiAgICAgIH0sIGNoaWxkUHJvcHMpKTtcbiAgICB9XG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gR3Jvdy5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBBZGQgYSBjdXN0b20gdHJhbnNpdGlvbiBlbmQgdHJpZ2dlci4gQ2FsbGVkIHdpdGggdGhlIHRyYW5zaXRpb25pbmcgRE9NXG4gICAqIG5vZGUgYW5kIGEgZG9uZSBjYWxsYmFjay4gQWxsb3dzIGZvciBtb3JlIGZpbmUgZ3JhaW5lZCB0cmFuc2l0aW9uIGVuZFxuICAgKiBsb2dpYy4gTm90ZTogVGltZW91dHMgYXJlIHN0aWxsIHVzZWQgYXMgYSBmYWxsYmFjayBpZiBwcm92aWRlZC5cbiAgICovXG4gIGFkZEVuZExpc3RlbmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFBlcmZvcm0gdGhlIGVudGVyIHRyYW5zaXRpb24gd2hlbiBpdCBmaXJzdCBtb3VudHMgaWYgYGluYCBpcyBhbHNvIGB0cnVlYC5cbiAgICogU2V0IHRoaXMgdG8gYGZhbHNlYCB0byBkaXNhYmxlIHRoaXMgYmVoYXZpb3IuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBBIHNpbmdsZSBjaGlsZCBjb250ZW50IGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogZWxlbWVudEFjY2VwdGluZ1JlZi5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogVGhlIHRyYW5zaXRpb24gdGltaW5nIGZ1bmN0aW9uLlxuICAgKiBZb3UgbWF5IHNwZWNpZnkgYSBzaW5nbGUgZWFzaW5nIG9yIGEgb2JqZWN0IGNvbnRhaW5pbmcgZW50ZXIgYW5kIGV4aXQgdmFsdWVzLlxuICAgKi9cbiAgZWFzaW5nOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGVudGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB3aWxsIHRyYW5zaXRpb24gaW4uXG4gICAqL1xuICBpbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkVudGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRW50ZXJlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkVudGVyaW5nOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkV4aXRpbmc6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gZm9yIHRoZSB0cmFuc2l0aW9uLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSB0aW1lb3V0IGZvciBhbGwgdHJhbnNpdGlvbnMsIG9yIGluZGl2aWR1YWxseSB3aXRoIGFuIG9iamVjdC5cbiAgICpcbiAgICogU2V0IHRvICdhdXRvJyB0byBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZSB0cmFuc2l0aW9uIHRpbWUgYmFzZWQgb24gaGVpZ2h0LlxuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIHRpbWVvdXQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2F1dG8nXSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXBwZWFyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGVudGVyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5udW1iZXJcbiAgfSldKVxufSA6IHZvaWQgMDtcbkdyb3cubXVpU3VwcG9ydEF1dG8gPSB0cnVlO1xuZXhwb3J0IGRlZmF1bHQgR3JvdzsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmltcG9ydCB7IGlucHV0QmFzZUNsYXNzZXMgfSBmcm9tICcuLi9JbnB1dEJhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlJbnB1dCcsIHNsb3QpO1xufVxuY29uc3QgaW5wdXRDbGFzc2VzID0gX2V4dGVuZHMoe30sIGlucHV0QmFzZUNsYXNzZXMsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUlucHV0JywgWydyb290JywgJ3VuZGVybGluZScsICdpbnB1dCddKSk7XG5leHBvcnQgZGVmYXVsdCBpbnB1dENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiZGlzYWJsZVVuZGVybGluZVwiLCBcImNvbXBvbmVudHNcIiwgXCJjb21wb25lbnRzUHJvcHNcIiwgXCJmdWxsV2lkdGhcIiwgXCJpbnB1dENvbXBvbmVudFwiLCBcIm11bHRpbGluZVwiLCBcInNsb3RQcm9wc1wiLCBcInNsb3RzXCIsIFwidHlwZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgeyByZWZUeXBlLCBkZWVwbWVyZ2UgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBJbnB1dEJhc2UgZnJvbSAnLi4vSW5wdXRCYXNlJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgaW5wdXRDbGFzc2VzLCB7IGdldElucHV0VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9pbnB1dENsYXNzZXMnO1xuaW1wb3J0IHsgcm9vdE92ZXJyaWRlc1Jlc29sdmVyIGFzIGlucHV0QmFzZVJvb3RPdmVycmlkZXNSZXNvbHZlciwgaW5wdXRPdmVycmlkZXNSZXNvbHZlciBhcyBpbnB1dEJhc2VJbnB1dE92ZXJyaWRlc1Jlc29sdmVyLCBJbnB1dEJhc2VSb290LCBJbnB1dEJhc2VDb21wb25lbnQgYXMgSW5wdXRCYXNlSW5wdXQgfSBmcm9tICcuLi9JbnB1dEJhc2UvSW5wdXRCYXNlJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlVW5kZXJsaW5lXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCAhZGlzYWJsZVVuZGVybGluZSAmJiAndW5kZXJsaW5lJ10sXG4gICAgaW5wdXQ6IFsnaW5wdXQnXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0SW5wdXRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VkQ2xhc3Nlcyk7XG59O1xuY29uc3QgSW5wdXRSb290ID0gc3R5bGVkKElucHV0QmFzZVJvb3QsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aUlucHV0JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbLi4uaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyKHByb3BzLCBzdHlsZXMpLCAhb3duZXJTdGF0ZS5kaXNhYmxlVW5kZXJsaW5lICYmIHN0eWxlcy51bmRlcmxpbmVdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICBjb25zdCBsaWdodCA9IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JztcbiAgbGV0IGJvdHRvbUxpbmVDb2xvciA9IGxpZ2h0ID8gJ3JnYmEoMCwgMCwgMCwgMC40MiknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSc7XG4gIGlmICh0aGVtZS52YXJzKSB7XG4gICAgYm90dG9tTGluZUNvbG9yID0gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUuY29tbW9uLm9uQmFja2dyb3VuZENoYW5uZWx9IC8gJHt0aGVtZS52YXJzLm9wYWNpdHkuaW5wdXRVbmRlcmxpbmV9KWA7XG4gIH1cbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xuICB9LCBvd25lclN0YXRlLmZvcm1Db250cm9sICYmIHtcbiAgICAnbGFiZWwgKyAmJzoge1xuICAgICAgbWFyZ2luVG9wOiAxNlxuICAgIH1cbiAgfSwgIW93bmVyU3RhdGUuZGlzYWJsZVVuZGVybGluZSAmJiB7XG4gICAgJyY6YWZ0ZXInOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAycHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWlufWAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgYm90dG9tOiAwLFxuICAgICAgLy8gRG9pbmcgdGhlIG90aGVyIHdheSBhcm91bmQgY3Jhc2ggb24gSUUxMSBcIicnXCIgaHR0cHM6Ly9naXRodWIuY29tL2Nzc2luanMvanNzL2lzc3Vlcy8yNDJcbiAgICAgIGNvbnRlbnQ6ICdcIlwiJyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgcmlnaHQ6IDAsXG4gICAgICB0cmFuc2Zvcm06ICdzY2FsZVgoMCknLFxuICAgICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd0cmFuc2Zvcm0nLCB7XG4gICAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyLFxuICAgICAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0XG4gICAgICB9KSxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyAvLyBUcmFuc3BhcmVudCB0byB0aGUgaG92ZXIgc3R5bGUuXG4gICAgfSxcbiAgICBbYCYuJHtpbnB1dENsYXNzZXMuZm9jdXNlZH06YWZ0ZXJgXToge1xuICAgICAgLy8gdHJhbnNsYXRlWCgwKSBpcyBhIHdvcmthcm91bmQgZm9yIFNhZmFyaSB0cmFuc2Zvcm0gc2NhbGUgYnVnXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9pc3N1ZXMvMzE3NjZcbiAgICAgIHRyYW5zZm9ybTogJ3NjYWxlWCgxKSB0cmFuc2xhdGVYKDApJ1xuICAgIH0sXG4gICAgW2AmLiR7aW5wdXRDbGFzc2VzLmVycm9yfWBdOiB7XG4gICAgICAnJjpiZWZvcmUsICY6YWZ0ZXInOiB7XG4gICAgICAgIGJvcmRlckJvdHRvbUNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5lcnJvci5tYWluXG4gICAgICB9XG4gICAgfSxcbiAgICAnJjpiZWZvcmUnOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAxcHggc29saWQgJHtib3R0b21MaW5lQ29sb3J9YCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICBib3R0b206IDAsXG4gICAgICAvLyBEb2luZyB0aGUgb3RoZXIgd2F5IGFyb3VuZCBjcmFzaCBvbiBJRTExIFwiJydcIiBodHRwczovL2dpdGh1Yi5jb20vY3NzaW5qcy9qc3MvaXNzdWVzLzI0MlxuICAgICAgY29udGVudDogJ1wiXFxcXDAwYTBcIicsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdib3JkZXItYm90dG9tLWNvbG9yJywge1xuICAgICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlclxuICAgICAgfSksXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScgLy8gVHJhbnNwYXJlbnQgdG8gdGhlIGhvdmVyIHN0eWxlLlxuICAgIH0sXG4gICAgW2AmOmhvdmVyOm5vdCguJHtpbnB1dENsYXNzZXMuZGlzYWJsZWR9LCAuJHtpbnB1dENsYXNzZXMuZXJyb3J9KTpiZWZvcmVgXToge1xuICAgICAgYm9yZGVyQm90dG9tOiBgMnB4IHNvbGlkICR7KHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5wcmltYXJ5fWAsXG4gICAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgICBib3JkZXJCb3R0b206IGAxcHggc29saWQgJHtib3R0b21MaW5lQ29sb3J9YFxuICAgICAgfVxuICAgIH0sXG4gICAgW2AmLiR7aW5wdXRDbGFzc2VzLmRpc2FibGVkfTpiZWZvcmVgXToge1xuICAgICAgYm9yZGVyQm90dG9tU3R5bGU6ICdkb3R0ZWQnXG4gICAgfVxuICB9KTtcbn0pO1xuY29uc3QgSW5wdXRJbnB1dCA9IHN0eWxlZChJbnB1dEJhc2VJbnB1dCwge1xuICBuYW1lOiAnTXVpSW5wdXQnLFxuICBzbG90OiAnSW5wdXQnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogaW5wdXRCYXNlSW5wdXRPdmVycmlkZXNSZXNvbHZlclxufSkoe30pO1xuY29uc3QgSW5wdXQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBJbnB1dChpblByb3BzLCByZWYpIHtcbiAgdmFyIF9yZWYsIF9zbG90cyRyb290LCBfcmVmMiwgX3Nsb3RzJGlucHV0O1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlJbnB1dCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGRpc2FibGVVbmRlcmxpbmUsXG4gICAgICBjb21wb25lbnRzID0ge30sXG4gICAgICBjb21wb25lbnRzUHJvcHM6IGNvbXBvbmVudHNQcm9wc1Byb3AsXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIGlucHV0Q29tcG9uZW50ID0gJ2lucHV0JyxcbiAgICAgIG11bHRpbGluZSA9IGZhbHNlLFxuICAgICAgc2xvdFByb3BzLFxuICAgICAgc2xvdHMgPSB7fSxcbiAgICAgIHR5cGUgPSAndGV4dCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKHByb3BzKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IHtcbiAgICBkaXNhYmxlVW5kZXJsaW5lXG4gIH07XG4gIGNvbnN0IGlucHV0Q29tcG9uZW50c1Byb3BzID0ge1xuICAgIHJvb3Q6IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9XG4gIH07XG4gIGNvbnN0IGNvbXBvbmVudHNQcm9wcyA9IChzbG90UHJvcHMgIT0gbnVsbCA/IHNsb3RQcm9wcyA6IGNvbXBvbmVudHNQcm9wc1Byb3ApID8gZGVlcG1lcmdlKHNsb3RQcm9wcyAhPSBudWxsID8gc2xvdFByb3BzIDogY29tcG9uZW50c1Byb3BzUHJvcCwgaW5wdXRDb21wb25lbnRzUHJvcHMpIDogaW5wdXRDb21wb25lbnRzUHJvcHM7XG4gIGNvbnN0IFJvb3RTbG90ID0gKF9yZWYgPSAoX3Nsb3RzJHJvb3QgPSBzbG90cy5yb290KSAhPSBudWxsID8gX3Nsb3RzJHJvb3QgOiBjb21wb25lbnRzLlJvb3QpICE9IG51bGwgPyBfcmVmIDogSW5wdXRSb290O1xuICBjb25zdCBJbnB1dFNsb3QgPSAoX3JlZjIgPSAoX3Nsb3RzJGlucHV0ID0gc2xvdHMuaW5wdXQpICE9IG51bGwgPyBfc2xvdHMkaW5wdXQgOiBjb21wb25lbnRzLklucHV0KSAhPSBudWxsID8gX3JlZjIgOiBJbnB1dElucHV0O1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goSW5wdXRCYXNlLCBfZXh0ZW5kcyh7XG4gICAgc2xvdHM6IHtcbiAgICAgIHJvb3Q6IFJvb3RTbG90LFxuICAgICAgaW5wdXQ6IElucHV0U2xvdFxuICAgIH0sXG4gICAgc2xvdFByb3BzOiBjb21wb25lbnRzUHJvcHMsXG4gICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgaW5wdXRDb21wb25lbnQ6IGlucHV0Q29tcG9uZW50LFxuICAgIG11bHRpbGluZTogbXVsdGlsaW5lLFxuICAgIHJlZjogcmVmLFxuICAgIHR5cGU6IHR5cGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjbGFzc2VzOiBjbGFzc2VzXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gSW5wdXQucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVGhpcyBwcm9wIGhlbHBzIHVzZXJzIHRvIGZpbGwgZm9ybXMgZmFzdGVyLCBlc3BlY2lhbGx5IG9uIG1vYmlsZSBkZXZpY2VzLlxuICAgKiBUaGUgbmFtZSBjYW4gYmUgY29uZnVzaW5nLCBhcyBpdCdzIG1vcmUgbGlrZSBhbiBhdXRvZmlsbC5cbiAgICogWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IGl0IFtmb2xsb3dpbmcgdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2F1dG9maWxsKS5cbiAgICovXG4gIGF1dG9Db21wbGV0ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdwcmltYXJ5J2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90c2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90c2AgcHJvcCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBJbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdFByb3BzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RQcm9wc2AgcHJvcCBpbnN0ZWFkLCBhcyBgY29tcG9uZW50c1Byb3BzYCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgbm90IGhhdmUgYW4gdW5kZXJsaW5lLlxuICAgKi9cbiAgZGlzYWJsZVVuZGVybGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBFbmQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBlbmRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnaW5wdXQnXG4gICAqL1xuICBpbnB1dENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nLiBUaGlzIGlzIG5vcm1hbGx5IG9idGFpbmVkIHZpYSBjb250ZXh0IGZyb21cbiAgICogRm9ybUNvbnRyb2wuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdub25lJ2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdub25lJ10pLFxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1heFJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIE1pbmltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtaW5Sb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgW1RleHRhcmVhQXV0b3NpemVdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0YXJlYS1hdXRvc2l6ZS8pIGVsZW1lbnQgaXMgcmVuZGVyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtdWx0aWxpbmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LkNoYW5nZUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBIVE1MSW5wdXRFbGVtZW50Pn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKHN0cmluZykuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgc2hvcnQgaGludCBkaXNwbGF5ZWQgaW4gdGhlIGBpbnB1dGAgYmVmb3JlIHRoZSB1c2VyIGVudGVycyBhIHZhbHVlLlxuICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJdCBwcmV2ZW50cyB0aGUgdXNlciBmcm9tIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGRcbiAgICogKG5vdCBmcm9tIGludGVyYWN0aW5nIHdpdGggdGhlIGZpZWxkKS5cbiAgICovXG4gIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyByZXF1aXJlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgcm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBjb21wb25lbnRzUHJvcHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c2AgcHJvcCwgd2hpY2ggd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFN0YXJ0IGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgc3RhcnRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVHlwZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LiBJdCBzaG91bGQgYmUgW2EgdmFsaWQgSFRNTDUgaW5wdXQgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0Zvcm1fJTNDaW5wdXQlM0VfdHlwZXMpLlxuICAgKiBAZGVmYXVsdCAndGV4dCdcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudCwgcmVxdWlyZWQgZm9yIGEgY29udHJvbGxlZCBjb21wb25lbnQuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueVxufSA6IHZvaWQgMDtcbklucHV0Lm11aU5hbWUgPSAnSW5wdXQnO1xuZXhwb3J0IGRlZmF1bHQgSW5wdXQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IHsgZm9ybWF0TXVpRXJyb3JNZXNzYWdlIGFzIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UgfSBmcm9tIFwiQG11aS91dGlsc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYXJpYS1kZXNjcmliZWRieVwiLCBcImF1dG9Db21wbGV0ZVwiLCBcImF1dG9Gb2N1c1wiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50c1wiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcImRlZmF1bHRWYWx1ZVwiLCBcImRpc2FibGVkXCIsIFwiZGlzYWJsZUluamVjdGluZ0dsb2JhbFN0eWxlc1wiLCBcImVuZEFkb3JubWVudFwiLCBcImVycm9yXCIsIFwiZnVsbFdpZHRoXCIsIFwiaWRcIiwgXCJpbnB1dENvbXBvbmVudFwiLCBcImlucHV0UHJvcHNcIiwgXCJpbnB1dFJlZlwiLCBcIm1hcmdpblwiLCBcIm1heFJvd3NcIiwgXCJtaW5Sb3dzXCIsIFwibXVsdGlsaW5lXCIsIFwibmFtZVwiLCBcIm9uQmx1clwiLCBcIm9uQ2hhbmdlXCIsIFwib25DbGlja1wiLCBcIm9uRm9jdXNcIiwgXCJvbktleURvd25cIiwgXCJvbktleVVwXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJyZWFkT25seVwiLCBcInJlbmRlclN1ZmZpeFwiLCBcInJvd3NcIiwgXCJzaXplXCIsIFwic2xvdFByb3BzXCIsIFwic2xvdHNcIiwgXCJzdGFydEFkb3JubWVudFwiLCBcInR5cGVcIiwgXCJ2YWx1ZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHJlZlR5cGUsIGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcywgaXNIb3N0Q29tcG9uZW50LCBUZXh0YXJlYUF1dG9zaXplIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCBmb3JtQ29udHJvbFN0YXRlIGZyb20gJy4uL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sU3RhdGUnO1xuaW1wb3J0IEZvcm1Db250cm9sQ29udGV4dCBmcm9tICcuLi9Gb3JtQ29udHJvbC9Gb3JtQ29udHJvbENvbnRleHQnO1xuaW1wb3J0IHVzZUZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHVzZUVuaGFuY2VkRWZmZWN0IGZyb20gJy4uL3V0aWxzL3VzZUVuaGFuY2VkRWZmZWN0JztcbmltcG9ydCBHbG9iYWxTdHlsZXMgZnJvbSAnLi4vR2xvYmFsU3R5bGVzJztcbmltcG9ydCB7IGlzRmlsbGVkIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgaW5wdXRCYXNlQ2xhc3NlcywgeyBnZXRJbnB1dEJhc2VVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2lucHV0QmFzZUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBjb25zdCByb290T3ZlcnJpZGVzUmVzb2x2ZXIgPSAocHJvcHMsIHN0eWxlcykgPT4ge1xuICBjb25zdCB7XG4gICAgb3duZXJTdGF0ZVxuICB9ID0gcHJvcHM7XG4gIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuZm9ybUNvbnRyb2wgJiYgc3R5bGVzLmZvcm1Db250cm9sLCBvd25lclN0YXRlLnN0YXJ0QWRvcm5tZW50ICYmIHN0eWxlcy5hZG9ybmVkU3RhcnQsIG93bmVyU3RhdGUuZW5kQWRvcm5tZW50ICYmIHN0eWxlcy5hZG9ybmVkRW5kLCBvd25lclN0YXRlLmVycm9yICYmIHN0eWxlcy5lcnJvciwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHN0eWxlcy5zaXplU21hbGwsIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIHN0eWxlcy5tdWx0aWxpbmUsIG93bmVyU3RhdGUuY29sb3IgJiYgc3R5bGVzW2Bjb2xvciR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmNvbG9yKX1gXSwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYgc3R5bGVzLmZ1bGxXaWR0aCwgb3duZXJTdGF0ZS5oaWRkZW5MYWJlbCAmJiBzdHlsZXMuaGlkZGVuTGFiZWxdO1xufTtcbmV4cG9ydCBjb25zdCBpbnB1dE92ZXJyaWRlc1Jlc29sdmVyID0gKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgY29uc3Qge1xuICAgIG93bmVyU3RhdGVcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gW3N0eWxlcy5pbnB1dCwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHN0eWxlcy5pbnB1dFNpemVTbWFsbCwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYgc3R5bGVzLmlucHV0TXVsdGlsaW5lLCBvd25lclN0YXRlLnR5cGUgPT09ICdzZWFyY2gnICYmIHN0eWxlcy5pbnB1dFR5cGVTZWFyY2gsIG93bmVyU3RhdGUuc3RhcnRBZG9ybm1lbnQgJiYgc3R5bGVzLmlucHV0QWRvcm5lZFN0YXJ0LCBvd25lclN0YXRlLmVuZEFkb3JubWVudCAmJiBzdHlsZXMuaW5wdXRBZG9ybmVkRW5kLCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIHN0eWxlcy5pbnB1dEhpZGRlbkxhYmVsXTtcbn07XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBjb2xvcixcbiAgICBkaXNhYmxlZCxcbiAgICBlcnJvcixcbiAgICBlbmRBZG9ybm1lbnQsXG4gICAgZm9jdXNlZCxcbiAgICBmb3JtQ29udHJvbCxcbiAgICBmdWxsV2lkdGgsXG4gICAgaGlkZGVuTGFiZWwsXG4gICAgbXVsdGlsaW5lLFxuICAgIHJlYWRPbmx5LFxuICAgIHNpemUsXG4gICAgc3RhcnRBZG9ybm1lbnQsXG4gICAgdHlwZVxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBlcnJvciAmJiAnZXJyb3InLCBmdWxsV2lkdGggJiYgJ2Z1bGxXaWR0aCcsIGZvY3VzZWQgJiYgJ2ZvY3VzZWQnLCBmb3JtQ29udHJvbCAmJiAnZm9ybUNvbnRyb2wnLCBzaXplICYmIHNpemUgIT09ICdtZWRpdW0nICYmIGBzaXplJHtjYXBpdGFsaXplKHNpemUpfWAsIG11bHRpbGluZSAmJiAnbXVsdGlsaW5lJywgc3RhcnRBZG9ybm1lbnQgJiYgJ2Fkb3JuZWRTdGFydCcsIGVuZEFkb3JubWVudCAmJiAnYWRvcm5lZEVuZCcsIGhpZGRlbkxhYmVsICYmICdoaWRkZW5MYWJlbCcsIHJlYWRPbmx5ICYmICdyZWFkT25seSddLFxuICAgIGlucHV0OiBbJ2lucHV0JywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgdHlwZSA9PT0gJ3NlYXJjaCcgJiYgJ2lucHV0VHlwZVNlYXJjaCcsIG11bHRpbGluZSAmJiAnaW5wdXRNdWx0aWxpbmUnLCBzaXplID09PSAnc21hbGwnICYmICdpbnB1dFNpemVTbWFsbCcsIGhpZGRlbkxhYmVsICYmICdpbnB1dEhpZGRlbkxhYmVsJywgc3RhcnRBZG9ybm1lbnQgJiYgJ2lucHV0QWRvcm5lZFN0YXJ0JywgZW5kQWRvcm5tZW50ICYmICdpbnB1dEFkb3JuZWRFbmQnLCByZWFkT25seSAmJiAncmVhZE9ubHknXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldElucHV0QmFzZVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuZXhwb3J0IGNvbnN0IElucHV0QmFzZVJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aUlucHV0QmFzZScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IHJvb3RPdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHt9LCB0aGVtZS50eXBvZ3JhcGh5LmJvZHkxLCB7XG4gIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnByaW1hcnksXG4gIGxpbmVIZWlnaHQ6ICcxLjQzNzVlbScsXG4gIC8vIDIzcHhcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIC8vIFByZXZlbnQgcGFkZGluZyBpc3N1ZSB3aXRoIGZ1bGxXaWR0aC5cbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIGN1cnNvcjogJ3RleHQnLFxuICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgW2AmLiR7aW5wdXRCYXNlQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LmRpc2FibGVkLFxuICAgIGN1cnNvcjogJ2RlZmF1bHQnXG4gIH1cbn0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIF9leHRlbmRzKHtcbiAgcGFkZGluZzogJzRweCAwIDVweCdcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHBhZGRpbmdUb3A6IDFcbn0pLCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiB7XG4gIHdpZHRoOiAnMTAwJSdcbn0pKTtcbmV4cG9ydCBjb25zdCBJbnB1dEJhc2VDb21wb25lbnQgPSBzdHlsZWQoJ2lucHV0Jywge1xuICBuYW1lOiAnTXVpSW5wdXRCYXNlJyxcbiAgc2xvdDogJ0lucHV0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IGlucHV0T3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIGNvbnN0IGxpZ2h0ID0gdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnO1xuICBjb25zdCBwbGFjZWhvbGRlciA9IF9leHRlbmRzKHtcbiAgICBjb2xvcjogJ2N1cnJlbnRDb2xvcidcbiAgfSwgdGhlbWUudmFycyA/IHtcbiAgICBvcGFjaXR5OiB0aGVtZS52YXJzLm9wYWNpdHkuaW5wdXRQbGFjZWhvbGRlclxuICB9IDoge1xuICAgIG9wYWNpdHk6IGxpZ2h0ID8gMC40MiA6IDAuNVxuICB9LCB7XG4gICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdvcGFjaXR5Jywge1xuICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXJcbiAgICB9KVxuICB9KTtcbiAgY29uc3QgcGxhY2Vob2xkZXJIaWRkZW4gPSB7XG4gICAgb3BhY2l0eTogJzAgIWltcG9ydGFudCdcbiAgfTtcbiAgY29uc3QgcGxhY2Vob2xkZXJWaXNpYmxlID0gdGhlbWUudmFycyA/IHtcbiAgICBvcGFjaXR5OiB0aGVtZS52YXJzLm9wYWNpdHkuaW5wdXRQbGFjZWhvbGRlclxuICB9IDoge1xuICAgIG9wYWNpdHk6IGxpZ2h0ID8gMC40MiA6IDAuNVxuICB9O1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIGZvbnQ6ICdpbmhlcml0JyxcbiAgICBsZXR0ZXJTcGFjaW5nOiAnaW5oZXJpdCcsXG4gICAgY29sb3I6ICdjdXJyZW50Q29sb3InLFxuICAgIHBhZGRpbmc6ICc0cHggMCA1cHgnLFxuICAgIGJvcmRlcjogMCxcbiAgICBib3hTaXppbmc6ICdjb250ZW50LWJveCcsXG4gICAgYmFja2dyb3VuZDogJ25vbmUnLFxuICAgIGhlaWdodDogJzEuNDM3NWVtJyxcbiAgICAvLyBSZXNldCAyM3B4dGhlIG5hdGl2ZSBpbnB1dCBsaW5lLWhlaWdodFxuICAgIG1hcmdpbjogMCxcbiAgICAvLyBSZXNldCBmb3IgU2FmYXJpXG4gICAgV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgICAvLyBNYWtlIHRoZSBmbGV4IGl0ZW0gc2hyaW5rIHdpdGggRmlyZWZveFxuICAgIG1pbldpZHRoOiAwLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgLy8gRml4IElFMTEgd2lkdGggaXNzdWVcbiAgICBhbmltYXRpb25OYW1lOiAnbXVpLWF1dG8tZmlsbC1jYW5jZWwnLFxuICAgIGFuaW1hdGlvbkR1cmF0aW9uOiAnMTBtcycsXG4gICAgJyY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlcixcbiAgICAnJjo6LW1vei1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyLFxuICAgIC8vIEZpcmVmb3ggMTkrXG4gICAgJyY6LW1zLWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXIsXG4gICAgLy8gSUUxMVxuICAgICcmOjotbXMtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlcixcbiAgICAvLyBFZGdlXG4gICAgJyY6Zm9jdXMnOiB7XG4gICAgICBvdXRsaW5lOiAwXG4gICAgfSxcbiAgICAvLyBSZXNldCBGaXJlZm94IGludmFsaWQgcmVxdWlyZWQgaW5wdXQgc3R5bGVcbiAgICAnJjppbnZhbGlkJzoge1xuICAgICAgYm94U2hhZG93OiAnbm9uZSdcbiAgICB9LFxuICAgICcmOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uJzoge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBwYWRkaW5nIHdoZW4gdHlwZT1zZWFyY2guXG4gICAgICBXZWJraXRBcHBlYXJhbmNlOiAnbm9uZSdcbiAgICB9LFxuICAgIC8vIFNob3cgYW5kIGhpZGUgdGhlIHBsYWNlaG9sZGVyIGxvZ2ljXG4gICAgW2BsYWJlbFtkYXRhLXNocmluaz1mYWxzZV0gKyAuJHtpbnB1dEJhc2VDbGFzc2VzLmZvcm1Db250cm9sfSAmYF06IHtcbiAgICAgICcmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJIaWRkZW4sXG4gICAgICAnJjo6LW1vei1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVySGlkZGVuLFxuICAgICAgLy8gRmlyZWZveCAxOStcbiAgICAgICcmOi1tcy1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVySGlkZGVuLFxuICAgICAgLy8gSUUxMVxuICAgICAgJyY6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVySGlkZGVuLFxuICAgICAgLy8gRWRnZVxuICAgICAgJyY6Zm9jdXM6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlclZpc2libGUsXG4gICAgICAnJjpmb2N1czo6LW1vei1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyVmlzaWJsZSxcbiAgICAgIC8vIEZpcmVmb3ggMTkrXG4gICAgICAnJjpmb2N1czotbXMtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlclZpc2libGUsXG4gICAgICAvLyBJRTExXG4gICAgICAnJjpmb2N1czo6LW1zLWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJWaXNpYmxlIC8vIEVkZ2VcbiAgICB9LFxuICAgIFtgJi4ke2lucHV0QmFzZUNsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAvLyBSZXNldCBpT1Mgb3BhY2l0eVxuICAgICAgV2Via2l0VGV4dEZpbGxDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5kaXNhYmxlZCAvLyBGaXggb3BhY2l0eSBTYWZhcmkgYnVnXG4gICAgfSxcbiAgICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgICAgYW5pbWF0aW9uRHVyYXRpb246ICc1MDAwcycsXG4gICAgICBhbmltYXRpb25OYW1lOiAnbXVpLWF1dG8tZmlsbCdcbiAgICB9XG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICAgcGFkZGluZ1RvcDogMVxuICB9LCBvd25lclN0YXRlLm11bHRpbGluZSAmJiB7XG4gICAgaGVpZ2h0OiAnYXV0bycsXG4gICAgcmVzaXplOiAnbm9uZScsXG4gICAgcGFkZGluZzogMCxcbiAgICBwYWRkaW5nVG9wOiAwXG4gIH0sIG93bmVyU3RhdGUudHlwZSA9PT0gJ3NlYXJjaCcgJiYge1xuICAgIC8vIEltcHJvdmUgdHlwZSBzZWFyY2ggc3R5bGUuXG4gICAgTW96QXBwZWFyYW5jZTogJ3RleHRmaWVsZCdcbiAgfSk7XG59KTtcbmNvbnN0IGlucHV0R2xvYmFsU3R5bGVzID0gLyojX19QVVJFX18qL19qc3goR2xvYmFsU3R5bGVzLCB7XG4gIHN0eWxlczoge1xuICAgICdAa2V5ZnJhbWVzIG11aS1hdXRvLWZpbGwnOiB7XG4gICAgICBmcm9tOiB7XG4gICAgICAgIGRpc3BsYXk6ICdibG9jaydcbiAgICAgIH1cbiAgICB9LFxuICAgICdAa2V5ZnJhbWVzIG11aS1hdXRvLWZpbGwtY2FuY2VsJzoge1xuICAgICAgZnJvbToge1xuICAgICAgICBkaXNwbGF5OiAnYmxvY2snXG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBgSW5wdXRCYXNlYCBjb250YWlucyBhcyBmZXcgc3R5bGVzIGFzIHBvc3NpYmxlLlxuICogSXQgYWltcyB0byBiZSBhIHNpbXBsZSBidWlsZGluZyBibG9jayBmb3IgY3JlYXRpbmcgYW4gaW5wdXQuXG4gKiBJdCBjb250YWlucyBhIGxvYWQgb2Ygc3R5bGUgcmVzZXQgYW5kIHNvbWUgc3RhdGUgbG9naWMuXG4gKi9cbmNvbnN0IElucHV0QmFzZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIElucHV0QmFzZShpblByb3BzLCByZWYpIHtcbiAgdmFyIF9zbG90UHJvcHMkaW5wdXQ7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUlucHV0QmFzZSdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogYXJpYURlc2NyaWJlZGJ5LFxuICAgICAgYXV0b0NvbXBsZXRlLFxuICAgICAgYXV0b0ZvY3VzLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50cyA9IHt9LFxuICAgICAgY29tcG9uZW50c1Byb3BzID0ge30sXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGRpc2FibGVJbmplY3RpbmdHbG9iYWxTdHlsZXMsXG4gICAgICBlbmRBZG9ybm1lbnQsXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIGlkLFxuICAgICAgaW5wdXRDb21wb25lbnQgPSAnaW5wdXQnLFxuICAgICAgaW5wdXRQcm9wczogaW5wdXRQcm9wc1Byb3AgPSB7fSxcbiAgICAgIGlucHV0UmVmOiBpbnB1dFJlZlByb3AsXG4gICAgICBtYXhSb3dzLFxuICAgICAgbWluUm93cyxcbiAgICAgIG11bHRpbGluZSA9IGZhbHNlLFxuICAgICAgbmFtZSxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25DbGljayxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbktleURvd24sXG4gICAgICBvbktleVVwLFxuICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICByZWFkT25seSxcbiAgICAgIHJlbmRlclN1ZmZpeCxcbiAgICAgIHJvd3MsXG4gICAgICBzbG90UHJvcHMgPSB7fSxcbiAgICAgIHNsb3RzID0ge30sXG4gICAgICBzdGFydEFkb3JubWVudCxcbiAgICAgIHR5cGUgPSAndGV4dCcsXG4gICAgICB2YWx1ZTogdmFsdWVQcm9wXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHZhbHVlID0gaW5wdXRQcm9wc1Byb3AudmFsdWUgIT0gbnVsbCA/IGlucHV0UHJvcHNQcm9wLnZhbHVlIDogdmFsdWVQcm9wO1xuICBjb25zdCB7XG4gICAgY3VycmVudDogaXNDb250cm9sbGVkXG4gIH0gPSBSZWFjdC51c2VSZWYodmFsdWUgIT0gbnVsbCk7XG4gIGNvbnN0IGlucHV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIGNvbnN0IGhhbmRsZUlucHV0UmVmV2FybmluZyA9IFJlYWN0LnVzZUNhbGxiYWNrKGluc3RhbmNlID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLm5vZGVOYW1lICE9PSAnSU5QVVQnICYmICFpbnN0YW5jZS5mb2N1cykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBZb3UgaGF2ZSBwcm92aWRlZCBhIGBpbnB1dENvbXBvbmVudGAgdG8gdGhlIGlucHV0IGNvbXBvbmVudCcsICd0aGF0IGRvZXMgbm90IGNvcnJlY3RseSBoYW5kbGUgdGhlIGByZWZgIHByb3AuJywgJ01ha2Ugc3VyZSB0aGUgYHJlZmAgcHJvcCBpcyBjYWxsZWQgd2l0aCBhIEhUTUxJbnB1dEVsZW1lbnQuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW10pO1xuICBjb25zdCBoYW5kbGVJbnB1dFJlZiA9IHVzZUZvcmtSZWYoaW5wdXRSZWYsIGlucHV0UmVmUHJvcCwgaW5wdXRQcm9wc1Byb3AucmVmLCBoYW5kbGVJbnB1dFJlZldhcm5pbmcpO1xuICBjb25zdCBbZm9jdXNlZCwgc2V0Rm9jdXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKG11aUZvcm1Db250cm9sKSB7XG4gICAgICAgIHJldHVybiBtdWlGb3JtQ29udHJvbC5yZWdpc3RlckVmZmVjdCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LCBbbXVpRm9ybUNvbnRyb2xdKTtcbiAgfVxuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsnY29sb3InLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnaGlkZGVuTGFiZWwnLCAnc2l6ZScsICdyZXF1aXJlZCcsICdmaWxsZWQnXVxuICB9KTtcbiAgZmNzLmZvY3VzZWQgPSBtdWlGb3JtQ29udHJvbCA/IG11aUZvcm1Db250cm9sLmZvY3VzZWQgOiBmb2N1c2VkO1xuXG4gIC8vIFRoZSBibHVyIHdvbid0IGZpcmUgd2hlbiB0aGUgZGlzYWJsZWQgc3RhdGUgaXMgc2V0IG9uIGEgZm9jdXNlZCBpbnB1dC5cbiAgLy8gV2UgbmVlZCB0byBib29rIGtlZXAgdGhlIGZvY3VzZWQgc3RhdGUgbWFudWFsbHkuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtdWlGb3JtQ29udHJvbCAmJiBkaXNhYmxlZCAmJiBmb2N1c2VkKSB7XG4gICAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgICAgIGlmIChvbkJsdXIpIHtcbiAgICAgICAgb25CbHVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbbXVpRm9ybUNvbnRyb2wsIGRpc2FibGVkLCBmb2N1c2VkLCBvbkJsdXJdKTtcbiAgY29uc3Qgb25GaWxsZWQgPSBtdWlGb3JtQ29udHJvbCAmJiBtdWlGb3JtQ29udHJvbC5vbkZpbGxlZDtcbiAgY29uc3Qgb25FbXB0eSA9IG11aUZvcm1Db250cm9sICYmIG11aUZvcm1Db250cm9sLm9uRW1wdHk7XG4gIGNvbnN0IGNoZWNrRGlydHkgPSBSZWFjdC51c2VDYWxsYmFjayhvYmogPT4ge1xuICAgIGlmIChpc0ZpbGxlZChvYmopKSB7XG4gICAgICBpZiAob25GaWxsZWQpIHtcbiAgICAgICAgb25GaWxsZWQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9uRW1wdHkpIHtcbiAgICAgIG9uRW1wdHkoKTtcbiAgICB9XG4gIH0sIFtvbkZpbGxlZCwgb25FbXB0eV0pO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzQ29udHJvbGxlZCkge1xuICAgICAgY2hlY2tEaXJ0eSh7XG4gICAgICAgIHZhbHVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFt2YWx1ZSwgY2hlY2tEaXJ0eSwgaXNDb250cm9sbGVkXSk7XG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gZXZlbnQgPT4ge1xuICAgIC8vIEZpeCBhIGJ1ZyB3aXRoIElFMTEgd2hlcmUgdGhlIGZvY3VzL2JsdXIgZXZlbnRzIGFyZSB0cmlnZ2VyZWRcbiAgICAvLyB3aGlsZSB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgIGlmIChmY3MuZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob25Gb2N1cykge1xuICAgICAgb25Gb2N1cyhldmVudCk7XG4gICAgfVxuICAgIGlmIChpbnB1dFByb3BzUHJvcC5vbkZvY3VzKSB7XG4gICAgICBpbnB1dFByb3BzUHJvcC5vbkZvY3VzKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKG11aUZvcm1Db250cm9sICYmIG11aUZvcm1Db250cm9sLm9uRm9jdXMpIHtcbiAgICAgIG11aUZvcm1Db250cm9sLm9uRm9jdXMoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRGb2N1c2VkKHRydWUpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlQmx1ciA9IGV2ZW50ID0+IHtcbiAgICBpZiAob25CbHVyKSB7XG4gICAgICBvbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAoaW5wdXRQcm9wc1Byb3Aub25CbHVyKSB7XG4gICAgICBpbnB1dFByb3BzUHJvcC5vbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAobXVpRm9ybUNvbnRyb2wgJiYgbXVpRm9ybUNvbnRyb2wub25CbHVyKSB7XG4gICAgICBtdWlGb3JtQ29udHJvbC5vbkJsdXIoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChldmVudCwgLi4uYXJncykgPT4ge1xuICAgIGlmICghaXNDb250cm9sbGVkKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0IHx8IGlucHV0UmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBFeHBlY3RlZCB2YWxpZCBpbnB1dCB0YXJnZXQuIERpZCB5b3UgdXNlIGEgY3VzdG9tIFxcYGlucHV0Q29tcG9uZW50XFxgIGFuZCBmb3JnZXQgdG8gZm9yd2FyZCByZWZzPyBTZWUgaHR0cHM6Ly9tdWkuY29tL3IvaW5wdXQtY29tcG9uZW50LXJlZi1pbnRlcmZhY2UgZm9yIG1vcmUgaW5mby5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxKSk7XG4gICAgICB9XG4gICAgICBjaGVja0RpcnR5KHtcbiAgICAgICAgdmFsdWU6IGVsZW1lbnQudmFsdWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaW5wdXRQcm9wc1Byb3Aub25DaGFuZ2UpIHtcbiAgICAgIGlucHV0UHJvcHNQcm9wLm9uQ2hhbmdlKGV2ZW50LCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICAvLyBQZXJmb3JtIGluIHRoZSB3aWxsVXBkYXRlXG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICBvbkNoYW5nZShldmVudCwgLi4uYXJncyk7XG4gICAgfVxuICB9O1xuXG4gIC8vIENoZWNrIHRoZSBpbnB1dCBzdGF0ZSBvbiBtb3VudCwgaW4gY2FzZSBpdCB3YXMgZmlsbGVkIGJ5IHRoZSB1c2VyXG4gIC8vIG9yIGF1dG8gZmlsbGVkIGJ5IHRoZSBicm93c2VyIGJlZm9yZSB0aGUgaHlkcmF0aW9uIChmb3IgU1NSKS5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjaGVja0RpcnR5KGlucHV0UmVmLmN1cnJlbnQpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW10pO1xuICBjb25zdCBoYW5kbGVDbGljayA9IGV2ZW50ID0+IHtcbiAgICBpZiAoaW5wdXRSZWYuY3VycmVudCAmJiBldmVudC5jdXJyZW50VGFyZ2V0ID09PSBldmVudC50YXJnZXQpIHtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgaWYgKG9uQ2xpY2spIHtcbiAgICAgIG9uQ2xpY2soZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgbGV0IElucHV0Q29tcG9uZW50ID0gaW5wdXRDb21wb25lbnQ7XG4gIGxldCBpbnB1dFByb3BzID0gaW5wdXRQcm9wc1Byb3A7XG4gIGlmIChtdWx0aWxpbmUgJiYgSW5wdXRDb21wb25lbnQgPT09ICdpbnB1dCcpIHtcbiAgICBpZiAocm93cykge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKG1pblJvd3MgfHwgbWF4Um93cykge1xuICAgICAgICAgIGNvbnNvbGUud2FybignTVVJOiBZb3UgY2FuIG5vdCB1c2UgdGhlIGBtaW5Sb3dzYCBvciBgbWF4Um93c2AgcHJvcHMgd2hlbiB0aGUgaW5wdXQgYHJvd3NgIHByb3AgaXMgc2V0LicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpbnB1dFByb3BzID0gX2V4dGVuZHMoe1xuICAgICAgICB0eXBlOiB1bmRlZmluZWQsXG4gICAgICAgIG1pblJvd3M6IHJvd3MsXG4gICAgICAgIG1heFJvd3M6IHJvd3NcbiAgICAgIH0sIGlucHV0UHJvcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dFByb3BzID0gX2V4dGVuZHMoe1xuICAgICAgICB0eXBlOiB1bmRlZmluZWQsXG4gICAgICAgIG1heFJvd3MsXG4gICAgICAgIG1pblJvd3NcbiAgICAgIH0sIGlucHV0UHJvcHMpO1xuICAgIH1cbiAgICBJbnB1dENvbXBvbmVudCA9IFRleHRhcmVhQXV0b3NpemU7XG4gIH1cbiAgY29uc3QgaGFuZGxlQXV0b0ZpbGwgPSBldmVudCA9PiB7XG4gICAgLy8gUHJvdmlkZSBhIGZha2UgdmFsdWUgYXMgQ2hyb21lIG1pZ2h0IG5vdCBsZXQgeW91IGFjY2VzcyBpdCBmb3Igc2VjdXJpdHkgcmVhc29ucy5cbiAgICBjaGVja0RpcnR5KGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdtdWktYXV0by1maWxsLWNhbmNlbCcgPyBpbnB1dFJlZi5jdXJyZW50IDoge1xuICAgICAgdmFsdWU6ICd4J1xuICAgIH0pO1xuICB9O1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtdWlGb3JtQ29udHJvbCkge1xuICAgICAgbXVpRm9ybUNvbnRyb2wuc2V0QWRvcm5lZFN0YXJ0KEJvb2xlYW4oc3RhcnRBZG9ybm1lbnQpKTtcbiAgICB9XG4gIH0sIFttdWlGb3JtQ29udHJvbCwgc3RhcnRBZG9ybm1lbnRdKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yOiBmY3MuY29sb3IgfHwgJ3ByaW1hcnknLFxuICAgIGRpc2FibGVkOiBmY3MuZGlzYWJsZWQsXG4gICAgZW5kQWRvcm5tZW50LFxuICAgIGVycm9yOiBmY3MuZXJyb3IsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWQsXG4gICAgZm9ybUNvbnRyb2w6IG11aUZvcm1Db250cm9sLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBoaWRkZW5MYWJlbDogZmNzLmhpZGRlbkxhYmVsLFxuICAgIG11bHRpbGluZSxcbiAgICBzaXplOiBmY3Muc2l6ZSxcbiAgICBzdGFydEFkb3JubWVudCxcbiAgICB0eXBlXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IFJvb3QgPSBzbG90cy5yb290IHx8IGNvbXBvbmVudHMuUm9vdCB8fCBJbnB1dEJhc2VSb290O1xuICBjb25zdCByb290UHJvcHMgPSBzbG90UHJvcHMucm9vdCB8fCBjb21wb25lbnRzUHJvcHMucm9vdCB8fCB7fTtcbiAgY29uc3QgSW5wdXQgPSBzbG90cy5pbnB1dCB8fCBjb21wb25lbnRzLklucHV0IHx8IElucHV0QmFzZUNvbXBvbmVudDtcbiAgaW5wdXRQcm9wcyA9IF9leHRlbmRzKHt9LCBpbnB1dFByb3BzLCAoX3Nsb3RQcm9wcyRpbnB1dCA9IHNsb3RQcm9wcy5pbnB1dCkgIT0gbnVsbCA/IF9zbG90UHJvcHMkaW5wdXQgOiBjb21wb25lbnRzUHJvcHMuaW5wdXQpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IFshZGlzYWJsZUluamVjdGluZ0dsb2JhbFN0eWxlcyAmJiBpbnB1dEdsb2JhbFN0eWxlcywgLyojX19QVVJFX18qL19qc3hzKFJvb3QsIF9leHRlbmRzKHt9LCByb290UHJvcHMsICFpc0hvc3RDb21wb25lbnQoUm9vdCkgJiYge1xuICAgICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUsIHJvb3RQcm9wcy5vd25lclN0YXRlKVxuICAgIH0sIHtcbiAgICAgIHJlZjogcmVmLFxuICAgICAgb25DbGljazogaGFuZGxlQ2xpY2tcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgcm9vdFByb3BzLmNsYXNzTmFtZSwgY2xhc3NOYW1lLCByZWFkT25seSAmJiAnTXVpSW5wdXRCYXNlLXJlYWRPbmx5JyksXG4gICAgICBjaGlsZHJlbjogW3N0YXJ0QWRvcm5tZW50LCAvKiNfX1BVUkVfXyovX2pzeChGb3JtQ29udHJvbENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dCwgX2V4dGVuZHMoe1xuICAgICAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogZmNzLmVycm9yLFxuICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBhcmlhRGVzY3JpYmVkYnksXG4gICAgICAgICAgYXV0b0NvbXBsZXRlOiBhdXRvQ29tcGxldGUsXG4gICAgICAgICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgICAgICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgICAgICAgZGlzYWJsZWQ6IGZjcy5kaXNhYmxlZCxcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgb25BbmltYXRpb25TdGFydDogaGFuZGxlQXV0b0ZpbGwsXG4gICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgICAgICAgcmVhZE9ubHk6IHJlYWRPbmx5LFxuICAgICAgICAgIHJlcXVpcmVkOiBmY3MucmVxdWlyZWQsXG4gICAgICAgICAgcm93czogcm93cyxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgb25LZXlEb3duOiBvbktleURvd24sXG4gICAgICAgICAgb25LZXlVcDogb25LZXlVcCxcbiAgICAgICAgICB0eXBlOiB0eXBlXG4gICAgICAgIH0sIGlucHV0UHJvcHMsICFpc0hvc3RDb21wb25lbnQoSW5wdXQpICYmIHtcbiAgICAgICAgICBhczogSW5wdXRDb21wb25lbnQsXG4gICAgICAgICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUsIGlucHV0UHJvcHMub3duZXJTdGF0ZSlcbiAgICAgICAgfSwge1xuICAgICAgICAgIHJlZjogaGFuZGxlSW5wdXRSZWYsXG4gICAgICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMuaW5wdXQsIGlucHV0UHJvcHMuY2xhc3NOYW1lLCByZWFkT25seSAmJiAnTXVpSW5wdXRCYXNlLXJlYWRPbmx5JyksXG4gICAgICAgICAgb25CbHVyOiBoYW5kbGVCbHVyLFxuICAgICAgICAgIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsXG4gICAgICAgICAgb25Gb2N1czogaGFuZGxlRm9jdXNcbiAgICAgICAgfSkpXG4gICAgICB9KSwgZW5kQWRvcm5tZW50LCByZW5kZXJTdWZmaXggPyByZW5kZXJTdWZmaXgoX2V4dGVuZHMoe30sIGZjcywge1xuICAgICAgICBzdGFydEFkb3JubWVudFxuICAgICAgfSkpIDogbnVsbF1cbiAgICB9KSldXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBJbnB1dEJhc2UucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgJ2FyaWEtZGVzY3JpYmVkYnknOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhpcyBwcm9wIGhlbHBzIHVzZXJzIHRvIGZpbGwgZm9ybXMgZmFzdGVyLCBlc3BlY2lhbGx5IG9uIG1vYmlsZSBkZXZpY2VzLlxuICAgKiBUaGUgbmFtZSBjYW4gYmUgY29uZnVzaW5nLCBhcyBpdCdzIG1vcmUgbGlrZSBhbiBhdXRvZmlsbC5cbiAgICogWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IGl0IFtmb2xsb3dpbmcgdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2F1dG9maWxsKS5cbiAgICovXG4gIGF1dG9Db21wbGV0ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdwcmltYXJ5J2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90c2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90c2AgcHJvcCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBJbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdFByb3BzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RQcm9wc2AgcHJvcCBpbnN0ZWFkLCBhcyBgY29tcG9uZW50c1Byb3BzYCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIEdsb2JhbFN0eWxlcyBmb3IgdGhlIGF1dG8tZmlsbCBrZXlmcmFtZXMgd2lsbCBub3QgYmUgaW5qZWN0ZWQvcmVtb3ZlZCBvbiBtb3VudC91bm1vdW50LiBNYWtlIHN1cmUgdG8gaW5qZWN0IHRoZW0gYXQgdGhlIHRvcCBvZiB5b3VyIGFwcGxpY2F0aW9uLlxuICAgKiBUaGlzIG9wdGlvbiBpcyBpbnRlbmRlZCB0byBoZWxwIHdpdGggYm9vc3RpbmcgdGhlIGluaXRpYWwgcmVuZGVyaW5nIHBlcmZvcm1hbmNlIGlmIHlvdSBhcmUgbG9hZGluZyBhIGJpZyBhbW91bnQgb2YgSW5wdXQgY29tcG9uZW50cyBhdCBvbmNlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUluamVjdGluZ0dsb2JhbFN0eWxlczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBFbmQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBlbmRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnaW5wdXQnXG4gICAqL1xuICBpbnB1dENvbXBvbmVudDogZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcuIFRoaXMgaXMgbm9ybWFsbHkgb2J0YWluZWQgdmlhIGNvbnRleHQgZnJvbVxuICAgKiBGb3JtQ29udHJvbC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ25vbmUnYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnXSksXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1pblJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSBbVGV4dGFyZWFBdXRvc2l6ZV0oL21hdGVyaWFsLXVpL3JlYWN0LXRleHRhcmVhLWF1dG9zaXplLykgZWxlbWVudCBpcyByZW5kZXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpbGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGBpbnB1dGAgaXMgYmx1cnJlZC5cbiAgICpcbiAgICogTm90aWNlIHRoYXQgdGhlIGZpcnN0IGFyZ3VtZW50IChldmVudCkgbWlnaHQgYmUgdW5kZWZpbmVkLlxuICAgKi9cbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBgaW5wdXRgIGRvZXNuJ3Qgc2F0aXNmeSBpdHMgY29uc3RyYWludHMuXG4gICAqL1xuICBvbkludmFsaWQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5VXA6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIHNob3J0IGhpbnQgZGlzcGxheWVkIGluIHRoZSBgaW5wdXRgIGJlZm9yZSB0aGUgdXNlciBlbnRlcnMgYSB2YWx1ZS5cbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSXQgcHJldmVudHMgdGhlIHVzZXIgZnJvbSBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkXG4gICAqIChub3QgZnJvbSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmaWVsZCkuXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICByZW5kZXJTdWZmaXg6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICByb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c1Byb3BzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBTdGFydCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIHN0YXJ0QWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC4gSXQgc2hvdWxkIGJlIFthIHZhbGlkIEhUTUw1IGlucHV0IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNGb3JtXyUzQ2lucHV0JTNFX3R5cGVzKS5cbiAgICogQGRlZmF1bHQgJ3RleHQnXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQsIHJlcXVpcmVkIGZvciBhIGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBJbnB1dEJhc2U7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0QmFzZVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpSW5wdXRCYXNlJywgc2xvdCk7XG59XG5jb25zdCBpbnB1dEJhc2VDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpSW5wdXRCYXNlJywgWydyb290JywgJ2Zvcm1Db250cm9sJywgJ2ZvY3VzZWQnLCAnZGlzYWJsZWQnLCAnYWRvcm5lZFN0YXJ0JywgJ2Fkb3JuZWRFbmQnLCAnZXJyb3InLCAnc2l6ZVNtYWxsJywgJ211bHRpbGluZScsICdjb2xvclNlY29uZGFyeScsICdmdWxsV2lkdGgnLCAnaGlkZGVuTGFiZWwnLCAncmVhZE9ubHknLCAnaW5wdXQnLCAnaW5wdXRTaXplU21hbGwnLCAnaW5wdXRNdWx0aWxpbmUnLCAnaW5wdXRUeXBlU2VhcmNoJywgJ2lucHV0QWRvcm5lZFN0YXJ0JywgJ2lucHV0QWRvcm5lZEVuZCcsICdpbnB1dEhpZGRlbkxhYmVsJ10pO1xuZXhwb3J0IGRlZmF1bHQgaW5wdXRCYXNlQ2xhc3NlczsiLCIvLyBTdXBwb3J0cyBkZXRlcm1pbmF0aW9uIG9mIGlzQ29udHJvbGxlZCgpLlxuLy8gQ29udHJvbGxlZCBpbnB1dCBhY2NlcHRzIGl0cyBjdXJyZW50IHZhbHVlIGFzIGEgcHJvcC5cbi8vXG4vLyBAc2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvZm9ybXMuaHRtbCNjb250cm9sbGVkLWNvbXBvbmVudHNcbi8vIEBwYXJhbSB2YWx1ZVxuLy8gQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgc3RyaW5nIChpbmNsdWRpbmcgJycpIG9yIG51bWJlciAoaW5jbHVkaW5nIHplcm8pXG5leHBvcnQgZnVuY3Rpb24gaGFzVmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgIShBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApO1xufVxuXG4vLyBEZXRlcm1pbmUgaWYgZmllbGQgaXMgZW1wdHkgb3IgZmlsbGVkLlxuLy8gUmVzcG9uc2UgZGV0ZXJtaW5lcyBpZiBsYWJlbCBpcyBwcmVzZW50ZWQgYWJvdmUgZmllbGQgb3IgYXMgcGxhY2Vob2xkZXIuXG4vL1xuLy8gQHBhcmFtIG9ialxuLy8gQHBhcmFtIFNTUlxuLy8gQHJldHVybnMge2Jvb2xlYW59IEZhbHNlIHdoZW4gbm90IHByZXNlbnQgb3IgZW1wdHkgc3RyaW5nLlxuLy8gICAgICAgICAgICAgICAgICAgIFRydWUgd2hlbiBhbnkgbnVtYmVyIG9yIHN0cmluZyB3aXRoIGxlbmd0aC5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbGxlZChvYmosIFNTUiA9IGZhbHNlKSB7XG4gIHJldHVybiBvYmogJiYgKGhhc1ZhbHVlKG9iai52YWx1ZSkgJiYgb2JqLnZhbHVlICE9PSAnJyB8fCBTU1IgJiYgaGFzVmFsdWUob2JqLmRlZmF1bHRWYWx1ZSkgJiYgb2JqLmRlZmF1bHRWYWx1ZSAhPT0gJycpO1xufVxuXG4vLyBEZXRlcm1pbmUgaWYgYW4gSW5wdXQgaXMgYWRvcm5lZCBvbiBzdGFydC5cbi8vIEl0J3MgY29ycmVzcG9uZGluZyB0byB0aGUgbGVmdCB3aXRoIExUUi5cbi8vXG4vLyBAcGFyYW0gb2JqXG4vLyBAcmV0dXJucyB7Ym9vbGVhbn0gRmFsc2Ugd2hlbiBubyBhZG9ybm1lbnRzLlxuLy8gICAgICAgICAgICAgICAgICAgIFRydWUgd2hlbiBhZG9ybmVkIGF0IHRoZSBzdGFydC5cbmV4cG9ydCBmdW5jdGlvbiBpc0Fkb3JuZWRTdGFydChvYmopIHtcbiAgcmV0dXJuIG9iai5zdGFydEFkb3JubWVudDtcbn0iLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUxhYmVsVXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1MYWJlbCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUxhYmVsQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZvcm1MYWJlbCcsIFsncm9vdCcsICdjb2xvclNlY29uZGFyeScsICdmb2N1c2VkJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2ZpbGxlZCcsICdyZXF1aXJlZCcsICdhc3RlcmlzayddKTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1MYWJlbENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVkXCIsIFwiZXJyb3JcIiwgXCJmaWxsZWRcIiwgXCJmb2N1c2VkXCIsIFwicmVxdWlyZWRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgZm9ybUxhYmVsQ2xhc3NlcywgeyBnZXRGb3JtTGFiZWxVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vZm9ybUxhYmVsQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBjb2xvcixcbiAgICBmb2N1c2VkLFxuICAgIGRpc2FibGVkLFxuICAgIGVycm9yLFxuICAgIGZpbGxlZCxcbiAgICByZXF1aXJlZFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBlcnJvciAmJiAnZXJyb3InLCBmaWxsZWQgJiYgJ2ZpbGxlZCcsIGZvY3VzZWQgJiYgJ2ZvY3VzZWQnLCByZXF1aXJlZCAmJiAncmVxdWlyZWQnXSxcbiAgICBhc3RlcmlzazogWydhc3RlcmlzaycsIGVycm9yICYmICdlcnJvciddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Rm9ybUxhYmVsVXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBGb3JtTGFiZWxSb290ID0gc3R5bGVkKCdsYWJlbCcsIHtcbiAgbmFtZTogJ011aUZvcm1MYWJlbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6ICh7XG4gICAgb3duZXJTdGF0ZVxuICB9LCBzdHlsZXMpID0+IHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0eWxlcy5yb290LCBvd25lclN0YXRlLmNvbG9yID09PSAnc2Vjb25kYXJ5JyAmJiBzdHlsZXMuY29sb3JTZWNvbmRhcnksIG93bmVyU3RhdGUuZmlsbGVkICYmIHN0eWxlcy5maWxsZWQpO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5zZWNvbmRhcnlcbn0sIHRoZW1lLnR5cG9ncmFwaHkuYm9keTEsIHtcbiAgbGluZUhlaWdodDogJzEuNDM3NWVtJyxcbiAgcGFkZGluZzogMCxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIFtgJi4ke2Zvcm1MYWJlbENsYXNzZXMuZm9jdXNlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluXG4gIH0sXG4gIFtgJi4ke2Zvcm1MYWJlbENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5kaXNhYmxlZFxuICB9LFxuICBbYCYuJHtmb3JtTGFiZWxDbGFzc2VzLmVycm9yfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW5cbiAgfVxufSkpO1xuY29uc3QgQXN0ZXJpc2tDb21wb25lbnQgPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlGb3JtTGFiZWwnLFxuICBzbG90OiAnQXN0ZXJpc2snLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5hc3Rlcmlza1xufSkoKHtcbiAgdGhlbWVcbn0pID0+ICh7XG4gIFtgJi4ke2Zvcm1MYWJlbENsYXNzZXMuZXJyb3J9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZXJyb3IubWFpblxuICB9XG59KSk7XG5jb25zdCBGb3JtTGFiZWwgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGb3JtTGFiZWwoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUZvcm1MYWJlbCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ2xhYmVsJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWydjb2xvcicsICdyZXF1aXJlZCcsICdmb2N1c2VkJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2ZpbGxlZCddXG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3I6IGZjcy5jb2xvciB8fCAncHJpbWFyeScsXG4gICAgY29tcG9uZW50LFxuICAgIGRpc2FibGVkOiBmY3MuZGlzYWJsZWQsXG4gICAgZXJyb3I6IGZjcy5lcnJvcixcbiAgICBmaWxsZWQ6IGZjcy5maWxsZWQsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWQsXG4gICAgcmVxdWlyZWQ6IGZjcy5yZXF1aXJlZFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKEZvcm1MYWJlbFJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBbY2hpbGRyZW4sIGZjcy5yZXF1aXJlZCAmJiAvKiNfX1BVUkVfXyovX2pzeHMoQXN0ZXJpc2tDb21wb25lbnQsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMuYXN0ZXJpc2ssXG4gICAgICBjaGlsZHJlbjogW1wiXFx1MjAwOVwiLCAnKiddXG4gICAgfSldXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRm9ybUxhYmVsLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2Vycm9yJywgJ2luZm8nLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYSBkaXNhYmxlZCBzdGF0ZS5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGRpc3BsYXllZCBpbiBhbiBlcnJvciBzdGF0ZS5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIHNob3VsZCB1c2UgZmlsbGVkIGNsYXNzZXMga2V5LlxuICAgKi9cbiAgZmlsbGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGlucHV0IG9mIHRoaXMgbGFiZWwgaXMgZm9jdXNlZCAodXNlZCBieSBgRm9ybUdyb3VwYCBjb21wb25lbnRzKS5cbiAgICovXG4gIGZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgd2lsbCBpbmRpY2F0ZSB0aGF0IHRoZSBgaW5wdXRgIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRm9ybUxhYmVsOyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dExhYmVsVXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUlucHV0TGFiZWwnLCBzbG90KTtcbn1cbmNvbnN0IGlucHV0TGFiZWxDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpSW5wdXRMYWJlbCcsIFsncm9vdCcsICdmb2N1c2VkJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ3JlcXVpcmVkJywgJ2FzdGVyaXNrJywgJ2Zvcm1Db250cm9sJywgJ3NpemVTbWFsbCcsICdzaHJpbmsnLCAnYW5pbWF0ZWQnLCAnc3RhbmRhcmQnLCAnZmlsbGVkJywgJ291dGxpbmVkJ10pO1xuZXhwb3J0IGRlZmF1bHQgaW5wdXRMYWJlbENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiZGlzYWJsZUFuaW1hdGlvblwiLCBcIm1hcmdpblwiLCBcInNocmlua1wiLCBcInZhcmlhbnRcIiwgXCJjbGFzc05hbWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgRm9ybUxhYmVsLCB7IGZvcm1MYWJlbENsYXNzZXMgfSBmcm9tICcuLi9Gb3JtTGFiZWwnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgZ2V0SW5wdXRMYWJlbFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9pbnB1dExhYmVsQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZm9ybUNvbnRyb2wsXG4gICAgc2l6ZSxcbiAgICBzaHJpbmssXG4gICAgZGlzYWJsZUFuaW1hdGlvbixcbiAgICB2YXJpYW50LFxuICAgIHJlcXVpcmVkXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBmb3JtQ29udHJvbCAmJiAnZm9ybUNvbnRyb2wnLCAhZGlzYWJsZUFuaW1hdGlvbiAmJiAnYW5pbWF0ZWQnLCBzaHJpbmsgJiYgJ3NocmluaycsIHNpemUgJiYgc2l6ZSAhPT0gJ25vcm1hbCcgJiYgYHNpemUke2NhcGl0YWxpemUoc2l6ZSl9YCwgdmFyaWFudF0sXG4gICAgYXN0ZXJpc2s6IFtyZXF1aXJlZCAmJiAnYXN0ZXJpc2snXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0SW5wdXRMYWJlbFV0aWxpdHlDbGFzc2VzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcbmNvbnN0IElucHV0TGFiZWxSb290ID0gc3R5bGVkKEZvcm1MYWJlbCwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpSW5wdXRMYWJlbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3tcbiAgICAgIFtgJiAuJHtmb3JtTGFiZWxDbGFzc2VzLmFzdGVyaXNrfWBdOiBzdHlsZXMuYXN0ZXJpc2tcbiAgICB9LCBzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5mb3JtQ29udHJvbCAmJiBzdHlsZXMuZm9ybUNvbnRyb2wsIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiBzdHlsZXMuc2l6ZVNtYWxsLCBvd25lclN0YXRlLnNocmluayAmJiBzdHlsZXMuc2hyaW5rLCAhb3duZXJTdGF0ZS5kaXNhYmxlQW5pbWF0aW9uICYmIHN0eWxlcy5hbmltYXRlZCwgb3duZXJTdGF0ZS5mb2N1c2VkICYmIHN0eWxlcy5mb2N1c2VkLCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdibG9jaycsXG4gIHRyYW5zZm9ybU9yaWdpbjogJ3RvcCBsZWZ0JyxcbiAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICBtYXhXaWR0aDogJzEwMCUnXG59LCBvd25lclN0YXRlLmZvcm1Db250cm9sICYmIHtcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIGxlZnQ6IDAsXG4gIHRvcDogMCxcbiAgLy8gc2xpZ2h0IGFsdGVyYXRpb24gdG8gc3BlYyBzcGFjaW5nIHRvIG1hdGNoIHZpc3VhbCBzcGVjIHJlc3VsdFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMCwgMjBweCkgc2NhbGUoMSknXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICAvLyBDb21wZW5zYXRpb24gZm9yIHRoZSBgSW5wdXQuaW5wdXRTaXplU21hbGxgIHN0eWxlLlxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMCwgMTdweCkgc2NhbGUoMSknXG59LCBvd25lclN0YXRlLnNocmluayAmJiB7XG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgwLCAtMS41cHgpIHNjYWxlKDAuNzUpJyxcbiAgdHJhbnNmb3JtT3JpZ2luOiAndG9wIGxlZnQnLFxuICBtYXhXaWR0aDogJzEzMyUnXG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlQW5pbWF0aW9uICYmIHtcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKFsnY29sb3InLCAndHJhbnNmb3JtJywgJ21heC13aWR0aCddLCB7XG4gICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXIsXG4gICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICB9KVxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZmlsbGVkJyAmJiBfZXh0ZW5kcyh7XG4gIC8vIENocm9tZSdzIGF1dG9maWxsIGZlYXR1cmUgZ2l2ZXMgdGhlIGlucHV0IGZpZWxkIGEgeWVsbG93IGJhY2tncm91bmQuXG4gIC8vIFNpbmNlIHRoZSBpbnB1dCBmaWVsZCBpcyBiZWhpbmQgdGhlIGxhYmVsIGluIHRoZSBIVE1MIHRyZWUsXG4gIC8vIHRoZSBpbnB1dCBmaWVsZCBpcyBkcmF3biBsYXN0IGFuZCBoaWRlcyB0aGUgbGFiZWwgd2l0aCBhbiBvcGFxdWUgYmFja2dyb3VuZCBjb2xvci5cbiAgLy8gekluZGV4OiAxIHdpbGwgcmFpc2UgdGhlIGxhYmVsIGFib3ZlIG9wYXF1ZSBiYWNrZ3JvdW5kLWNvbG9ycyBvZiBpbnB1dC5cbiAgekluZGV4OiAxLFxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxMnB4LCAxNnB4KSBzY2FsZSgxKScsXG4gIG1heFdpZHRoOiAnY2FsYygxMDAlIC0gMjRweCknXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTJweCwgMTNweCkgc2NhbGUoMSknXG59LCBvd25lclN0YXRlLnNocmluayAmJiBfZXh0ZW5kcyh7XG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgcG9pbnRlckV2ZW50czogJ2F1dG8nLFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTJweCwgN3B4KSBzY2FsZSgwLjc1KScsXG4gIG1heFdpZHRoOiAnY2FsYygxMzMlIC0gMjRweCknXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTJweCwgNHB4KSBzY2FsZSgwLjc1KSdcbn0pKSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIF9leHRlbmRzKHtcbiAgLy8gc2VlIGNvbW1lbnQgYWJvdmUgb24gZmlsbGVkLnpJbmRleFxuICB6SW5kZXg6IDEsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDE0cHgsIDE2cHgpIHNjYWxlKDEpJyxcbiAgbWF4V2lkdGg6ICdjYWxjKDEwMCUgLSAyNHB4KSdcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxNHB4LCA5cHgpIHNjYWxlKDEpJ1xufSwgb3duZXJTdGF0ZS5zaHJpbmsgJiYge1xuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIHBvaW50ZXJFdmVudHM6ICdhdXRvJyxcbiAgLy8gVGhlb3JldGljYWxseSwgd2Ugc2hvdWxkIGhhdmUgKDgrNSkqMi8wLjc1ID0gMzRweFxuICAvLyBidXQgaXQgZmVlbHMgYSBiZXR0ZXIgd2hlbiBpdCBibGVlZHMgYSBiaXQgb24gdGhlIGxlZnQsIHNvIDMycHguXG4gIG1heFdpZHRoOiAnY2FsYygxMzMlIC0gMzJweCknLFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTRweCwgLTlweCkgc2NhbGUoMC43NSknXG59KSkpO1xuY29uc3QgSW5wdXRMYWJlbCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIElucHV0TGFiZWwoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgbmFtZTogJ011aUlucHV0TGFiZWwnLFxuICAgIHByb3BzOiBpblByb3BzXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBkaXNhYmxlQW5pbWF0aW9uID0gZmFsc2UsXG4gICAgICBzaHJpbms6IHNocmlua1Byb3AsXG4gICAgICBjbGFzc05hbWVcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgbXVpRm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbCgpO1xuICBsZXQgc2hyaW5rID0gc2hyaW5rUHJvcDtcbiAgaWYgKHR5cGVvZiBzaHJpbmsgPT09ICd1bmRlZmluZWQnICYmIG11aUZvcm1Db250cm9sKSB7XG4gICAgc2hyaW5rID0gbXVpRm9ybUNvbnRyb2wuZmlsbGVkIHx8IG11aUZvcm1Db250cm9sLmZvY3VzZWQgfHwgbXVpRm9ybUNvbnRyb2wuYWRvcm5lZFN0YXJ0O1xuICB9XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWydzaXplJywgJ3ZhcmlhbnQnLCAncmVxdWlyZWQnLCAnZm9jdXNlZCddXG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZGlzYWJsZUFuaW1hdGlvbixcbiAgICBmb3JtQ29udHJvbDogbXVpRm9ybUNvbnRyb2wsXG4gICAgc2hyaW5rLFxuICAgIHNpemU6IGZjcy5zaXplLFxuICAgIHZhcmlhbnQ6IGZjcy52YXJpYW50LFxuICAgIHJlcXVpcmVkOiBmY3MucmVxdWlyZWQsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KElucHV0TGFiZWxSb290LCBfZXh0ZW5kcyh7XG4gICAgXCJkYXRhLXNocmlua1wiOiBzaHJpbmssXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICByZWY6IHJlZixcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpXG4gIH0sIG90aGVyLCB7XG4gICAgY2xhc3NlczogY2xhc3Nlc1xuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IElucHV0TGFiZWwucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnZXJyb3InLCAnaW5mbycsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRyYW5zaXRpb24gYW5pbWF0aW9uIGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUFuaW1hdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBkaXNwbGF5ZWQgaW4gYW4gZXJyb3Igc3RhdGUuXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIG9mIHRoaXMgbGFiZWwgaXMgZm9jdXNlZC5cbiAgICovXG4gIGZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZy4gVGhpcyBpcyBub3JtYWxseSBvYnRhaW5lZCB2aWEgY29udGV4dCBmcm9tXG4gICAqIEZvcm1Db250cm9sLlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZSddKSxcbiAgLyoqXG4gICAqIGlmIGB0cnVlYCwgdGhlIGxhYmVsIHdpbGwgaW5kaWNhdGUgdGhhdCB0aGUgYGlucHV0YCBpcyByZXF1aXJlZC5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIHNocnVuay5cbiAgICovXG4gIHNocmluazogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnbm9ybWFsJ1xuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydub3JtYWwnLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IElucHV0TGFiZWw7Il0sIm5hbWVzIjpbImdldEZpbGxlZElucHV0VXRpbGl0eUNsYXNzIiwic2xvdCIsImdlbmVyYXRlVXRpbGl0eUNsYXNzIiwiaW5wdXRCYXNlQ2xhc3NlcyIsImdlbmVyYXRlVXRpbGl0eUNsYXNzZXMiLCJfZXhjbHVkZWQiLCJGaWxsZWRJbnB1dFJvb3QiLCJzdHlsZWQiLCJJbnB1dEJhc2UiLCJzaG91bGRGb3J3YXJkUHJvcCIsInByb3AiLCJuYW1lIiwib3ZlcnJpZGVzUmVzb2x2ZXIiLCJwcm9wcyIsInN0eWxlcyIsIm93bmVyU3RhdGUiLCJkaXNhYmxlVW5kZXJsaW5lIiwidW5kZXJsaW5lIiwidGhlbWUiLCJfcGFsZXR0ZSIsImxpZ2h0IiwicGFsZXR0ZSIsIm1vZGUiLCJib3R0b21MaW5lQ29sb3IiLCJiYWNrZ3JvdW5kQ29sb3IiLCJob3ZlckJhY2tncm91bmQiLCJkaXNhYmxlZEJhY2tncm91bmQiLCJwb3NpdGlvbiIsInZhcnMiLCJGaWxsZWRJbnB1dCIsImJnIiwiYm9yZGVyVG9wTGVmdFJhZGl1cyIsInNoYXBlIiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyVG9wUmlnaHRSYWRpdXMiLCJ0cmFuc2l0aW9uIiwidHJhbnNpdGlvbnMiLCJjcmVhdGUiLCJkdXJhdGlvbiIsInNob3J0ZXIiLCJlYXNpbmciLCJlYXNlT3V0IiwiaG92ZXJCZyIsImZvY3VzZWQiLCJkaXNhYmxlZCIsImRpc2FibGVkQmciLCJib3JkZXJCb3R0b20iLCJjb2xvciIsIm1haW4iLCJsZWZ0IiwiYm90dG9tIiwiY29udGVudCIsInJpZ2h0IiwidHJhbnNmb3JtIiwicG9pbnRlckV2ZW50cyIsImVycm9yIiwiYm9yZGVyQm90dG9tQ29sb3IiLCJjb21tb24iLCJvbkJhY2tncm91bmRDaGFubmVsIiwib3BhY2l0eSIsImlucHV0VW5kZXJsaW5lIiwidGV4dCIsInByaW1hcnkiLCJib3JkZXJCb3R0b21TdHlsZSIsInN0YXJ0QWRvcm5tZW50IiwicGFkZGluZ0xlZnQiLCJlbmRBZG9ybm1lbnQiLCJwYWRkaW5nUmlnaHQiLCJtdWx0aWxpbmUiLCJwYWRkaW5nIiwic2l6ZSIsInBhZGRpbmdUb3AiLCJwYWRkaW5nQm90dG9tIiwiaGlkZGVuTGFiZWwiLCJGaWxsZWRJbnB1dElucHV0IiwiV2Via2l0Qm94U2hhZG93IiwiV2Via2l0VGV4dEZpbGxDb2xvciIsImNhcmV0Q29sb3IiLCJnZXRDb2xvclNjaGVtZVNlbGVjdG9yIiwiaW5Qcm9wcyIsInJlZiIsIl9yZWYiLCJfc2xvdHMkcm9vdCIsIl9yZWYyIiwiX3Nsb3RzJGlucHV0IiwidXNlVGhlbWVQcm9wcyIsImNvbXBvbmVudHMiLCJjb21wb25lbnRzUHJvcHMiLCJjb21wb25lbnRzUHJvcHNQcm9wIiwiZnVsbFdpZHRoIiwiaW5wdXRDb21wb25lbnQiLCJzbG90UHJvcHMiLCJzbG90cyIsInR5cGUiLCJvdGhlciIsImNsYXNzZXMiLCJyb290IiwiaW5wdXQiLCJjb21wb3NlZENsYXNzZXMiLCJjb21wb3NlQ2xhc3NlcyIsInVzZVV0aWxpdHlDbGFzc2VzIiwiZmlsbGVkSW5wdXRDb21wb25lbnRzUHJvcHMiLCJkZWVwbWVyZ2UiLCJSb290U2xvdCIsIlJvb3QiLCJJbnB1dFNsb3QiLCJJbnB1dCIsIm11aU5hbWUiLCJnZXRGb3JtQ29udHJvbFV0aWxpdHlDbGFzc2VzIiwiRm9ybUNvbnRyb2xSb290IiwiY2FwaXRhbGl6ZSIsIm1hcmdpbiIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwibWluV2lkdGgiLCJib3JkZXIiLCJ2ZXJ0aWNhbEFsaWduIiwibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIiwid2lkdGgiLCJjaGlsZHJlbiIsImNsYXNzTmFtZSIsImNvbXBvbmVudCIsInZpc3VhbGx5Rm9jdXNlZCIsInJlcXVpcmVkIiwidmFyaWFudCIsImFkb3JuZWRTdGFydCIsInNldEFkb3JuZWRTdGFydCIsImluaXRpYWxBZG9ybmVkU3RhcnQiLCJmb3JFYWNoIiwiY2hpbGQiLCJpc011aUVsZW1lbnQiLCJmaWxsZWQiLCJzZXRGaWxsZWQiLCJpbml0aWFsRmlsbGVkIiwiaW5wdXRQcm9wcyIsImZvY3VzZWRTdGF0ZSIsInNldEZvY3VzZWQiLCJ1bmRlZmluZWQiLCJyZWdpc3RlckVmZmVjdCIsImNoaWxkQ29udGV4dCIsIm9uQmx1ciIsIm9uRW1wdHkiLCJvbkZpbGxlZCIsIm9uRm9jdXMiLCJGb3JtQ29udHJvbENvbnRleHQiLCJQcm92aWRlciIsInZhbHVlIiwiYXMiLCJjbHN4IiwiZm9ybUNvbnRyb2xTdGF0ZSIsInN0YXRlcyIsIm11aUZvcm1Db250cm9sIiwicmVkdWNlIiwiYWNjIiwic3RhdGUiLCJ1c2VGb3JtQ29udHJvbCIsImdldEZvcm1IZWxwZXJUZXh0VXRpbGl0eUNsYXNzZXMiLCJfc3BhbiIsIkZvcm1IZWxwZXJUZXh0Um9vdCIsImNvbnRhaW5lZCIsInNlY29uZGFyeSIsInR5cG9ncmFwaHkiLCJjYXB0aW9uIiwidGV4dEFsaWduIiwibWFyZ2luUmlnaHQiLCJtYXJnaW5MZWZ0IiwiZmNzIiwiZGVmYXVsdFRoZW1lIiwidGhlbWVJZCIsImdldEdyaWRVdGlsaXR5Q2xhc3MiLCJHUklEX1NJWkVTIiwibWFwIiwic3BhY2luZyIsImRpcmVjdGlvbiIsIndyYXAiLCJnZXRPZmZzZXQiLCJ2YWwiLCJwYXJzZSIsInBhcnNlRmxvYXQiLCJTdHJpbmciLCJyZXBsYWNlIiwiZXh0cmFjdFplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzIiwiYnJlYWtwb2ludHMiLCJ2YWx1ZXMiLCJub25aZXJvS2V5IiwiT2JqZWN0Iiwia2V5cyIsImtleSIsInNvcnRlZEJyZWFrcG9pbnRLZXlzQnlWYWx1ZSIsInNvcnQiLCJhIiwiYiIsInNsaWNlIiwiaW5kZXhPZiIsIkdyaWRSb290IiwiY29udGFpbmVyIiwiaXRlbSIsInplcm9NaW5XaWR0aCIsInNwYWNpbmdTdHlsZXMiLCJOdW1iZXIiLCJpc05hTiIsImJyZWFrcG9pbnQiLCJwdXNoIiwicmVzb2x2ZVNwYWNpbmdTdHlsZXMiLCJicmVha3BvaW50c1N0eWxlcyIsImJveFNpemluZyIsImZsZXhXcmFwIiwiZGlyZWN0aW9uVmFsdWVzIiwicHJvcFZhbHVlIiwib3V0cHV0IiwibWF4V2lkdGgiLCJyb3dTcGFjaW5nIiwicm93U3BhY2luZ1ZhbHVlcyIsInplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzIiwiX3plcm9WYWx1ZUJyZWFrcG9pbnRLIiwidGhlbWVTcGFjaW5nIiwiaW5jbHVkZXMiLCJjb2x1bW5TcGFjaW5nIiwiY29sdW1uU3BhY2luZ1ZhbHVlcyIsIl96ZXJvVmFsdWVCcmVha3BvaW50SzIiLCJnbG9iYWxTdHlsZXMiLCJmbGV4QmFzaXMiLCJmbGV4R3JvdyIsImZsZXhTaHJpbmsiLCJjb2x1bW5zQnJlYWtwb2ludFZhbHVlcyIsImNvbHVtbnMiLCJjb2x1bW5WYWx1ZSIsIk1hdGgiLCJyb3VuZCIsIm1vcmUiLCJhc3NpZ24iLCJ1cCIsIkdyaWQiLCJ0aGVtZVByb3BzIiwidXNlVGhlbWUiLCJleHRlbmRTeFByb3AiLCJjb2x1bW5zUHJvcCIsImNvbHVtblNwYWNpbmdQcm9wIiwicm93U3BhY2luZ1Byb3AiLCJjb2x1bW5zQ29udGV4dCIsImJyZWFrcG9pbnRzVmFsdWVzIiwib3RoZXJGaWx0ZXJlZCIsInNwYWNpbmdDbGFzc2VzIiwicmVzb2x2ZVNwYWNpbmdDbGFzc2VzIiwiYnJlYWtwb2ludHNDbGFzc2VzIiwiZ2V0U2NhbGUiLCJlbnRlcmluZyIsImVudGVyZWQiLCJpc1dlYktpdDE1NCIsIm5hdmlnYXRvciIsInRlc3QiLCJ1c2VyQWdlbnQiLCJHcm93IiwiYWRkRW5kTGlzdGVuZXIiLCJhcHBlYXIiLCJpbiIsImluUHJvcCIsIm9uRW50ZXIiLCJvbkVudGVyZWQiLCJvbkVudGVyaW5nIiwib25FeGl0Iiwib25FeGl0ZWQiLCJvbkV4aXRpbmciLCJzdHlsZSIsInRpbWVvdXQiLCJUcmFuc2l0aW9uQ29tcG9uZW50IiwidGltZXIiLCJhdXRvVGltZW91dCIsIm5vZGVSZWYiLCJoYW5kbGVSZWYiLCJub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrIiwiY2FsbGJhY2siLCJtYXliZUlzQXBwZWFyaW5nIiwibm9kZSIsImN1cnJlbnQiLCJoYW5kbGVFbnRlcmluZyIsImhhbmRsZUVudGVyIiwiaXNBcHBlYXJpbmciLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJkZWxheSIsInRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbiIsImdldEF1dG9IZWlnaHREdXJhdGlvbiIsImNsaWVudEhlaWdodCIsImpvaW4iLCJoYW5kbGVFbnRlcmVkIiwiaGFuZGxlRXhpdGluZyIsImhhbmRsZUV4aXQiLCJoYW5kbGVFeGl0ZWQiLCJjbGVhclRpbWVvdXQiLCJuZXh0Iiwic2V0VGltZW91dCIsImNoaWxkUHJvcHMiLCJ2aXNpYmlsaXR5IiwibXVpU3VwcG9ydEF1dG8iLCJnZXRJbnB1dFV0aWxpdHlDbGFzcyIsIklucHV0Um9vdCIsImZvcm1Db250cm9sIiwiSW5wdXRJbnB1dCIsImlucHV0Q29tcG9uZW50c1Byb3BzIiwicm9vdE92ZXJyaWRlc1Jlc29sdmVyIiwiYWRvcm5lZEVuZCIsInNpemVTbWFsbCIsImlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIiLCJpbnB1dFNpemVTbWFsbCIsImlucHV0TXVsdGlsaW5lIiwiaW5wdXRUeXBlU2VhcmNoIiwiaW5wdXRBZG9ybmVkU3RhcnQiLCJpbnB1dEFkb3JuZWRFbmQiLCJpbnB1dEhpZGRlbkxhYmVsIiwiSW5wdXRCYXNlUm9vdCIsImJvZHkxIiwibGluZUhlaWdodCIsImN1cnNvciIsImFsaWduSXRlbXMiLCJJbnB1dEJhc2VDb21wb25lbnQiLCJwbGFjZWhvbGRlciIsImlucHV0UGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlckhpZGRlbiIsInBsYWNlaG9sZGVyVmlzaWJsZSIsImZvbnQiLCJsZXR0ZXJTcGFjaW5nIiwiYmFja2dyb3VuZCIsImhlaWdodCIsIldlYmtpdFRhcEhpZ2hsaWdodENvbG9yIiwiYW5pbWF0aW9uTmFtZSIsImFuaW1hdGlvbkR1cmF0aW9uIiwib3V0bGluZSIsImJveFNoYWRvdyIsIldlYmtpdEFwcGVhcmFuY2UiLCJyZXNpemUiLCJNb3pBcHBlYXJhbmNlIiwiaW5wdXRHbG9iYWxTdHlsZXMiLCJmcm9tIiwiX3Nsb3RQcm9wcyRpbnB1dCIsImFyaWFEZXNjcmliZWRieSIsImF1dG9Db21wbGV0ZSIsImF1dG9Gb2N1cyIsImRlZmF1bHRWYWx1ZSIsImRpc2FibGVJbmplY3RpbmdHbG9iYWxTdHlsZXMiLCJpZCIsImlucHV0UHJvcHNQcm9wIiwiaW5wdXRSZWYiLCJpbnB1dFJlZlByb3AiLCJtYXhSb3dzIiwibWluUm93cyIsIm9uQ2hhbmdlIiwib25DbGljayIsIm9uS2V5RG93biIsIm9uS2V5VXAiLCJyZWFkT25seSIsInJlbmRlclN1ZmZpeCIsInJvd3MiLCJ2YWx1ZVByb3AiLCJpc0NvbnRyb2xsZWQiLCJoYW5kbGVJbnB1dFJlZldhcm5pbmciLCJpbnN0YW5jZSIsImhhbmRsZUlucHV0UmVmIiwiY2hlY2tEaXJ0eSIsIm9iaiIsIklucHV0Q29tcG9uZW50IiwiQm9vbGVhbiIsImciLCJyb290UHJvcHMiLCJldmVudCIsImN1cnJlbnRUYXJnZXQiLCJ0YXJnZXQiLCJmb2N1cyIsIm9uQW5pbWF0aW9uU3RhcnQiLCJhcmdzIiwiZWxlbWVudCIsIkVycm9yIiwic3RvcFByb3BhZ2F0aW9uIiwiZ2V0SW5wdXRCYXNlVXRpbGl0eUNsYXNzIiwiaGFzVmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJpc0ZpbGxlZCIsIlNTUiIsImlzQWRvcm5lZFN0YXJ0IiwiZ2V0Rm9ybUxhYmVsVXRpbGl0eUNsYXNzZXMiLCJGb3JtTGFiZWxSb290IiwiY29sb3JTZWNvbmRhcnkiLCJBc3Rlcmlza0NvbXBvbmVudCIsImFzdGVyaXNrIiwiZ2V0SW5wdXRMYWJlbFV0aWxpdHlDbGFzc2VzIiwiSW5wdXRMYWJlbFJvb3QiLCJzaHJpbmsiLCJkaXNhYmxlQW5pbWF0aW9uIiwiYW5pbWF0ZWQiLCJ0cmFuc2Zvcm1PcmlnaW4iLCJ3aGl0ZVNwYWNlIiwib3ZlcmZsb3ciLCJ0ZXh0T3ZlcmZsb3ciLCJ0b3AiLCJ6SW5kZXgiLCJ1c2VyU2VsZWN0Iiwic2hyaW5rUHJvcCJdLCJzb3VyY2VSb290IjoiIn0=