"use strict";(self.webpackChunksrsrfl_react=self.webpackChunksrsrfl_react||[]).push([[994],{2335:(e,t,o)=>{o.d(t,{A:()=>S});var n=o(8587),r=o(8168),i=o(6540),a=o(1317),s=o(5659),l=o(627),d=o(1848),c=o(9770),u=o(5669),p=o(8413),m=o(1609),f=o(1175);function b(e){return(0,m.Ay)("MuiFilledInput",e)}const h=(0,r.A)({},f.A,(0,p.A)("MuiFilledInput",["root","underline","input"]));var g=o(4848);const A=["disableUnderline","components","componentsProps","fullWidth","hiddenLabel","inputComponent","multiline","slotProps","slots","type"],v=(0,d.Ay)(l.Sh,{shouldForwardProp:e=>(0,c.A)(e)||"classes"===e,name:"MuiFilledInput",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[...(0,l.WC)(e,t),!o.disableUnderline&&t.underline]}})((({theme:e,ownerState:t})=>{var o;const n="light"===e.palette.mode,i=n?"rgba(0, 0, 0, 0.42)":"rgba(255, 255, 255, 0.7)",a=n?"rgba(0, 0, 0, 0.06)":"rgba(255, 255, 255, 0.09)",s=n?"rgba(0, 0, 0, 0.09)":"rgba(255, 255, 255, 0.13)",l=n?"rgba(0, 0, 0, 0.12)":"rgba(255, 255, 255, 0.12)";return(0,r.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==(o=(e.vars||e).palette[t.color||"primary"])?void 0:o.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,r.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}))})),y=(0,d.Ay)(l.f3,{name:"MuiFilledInput",slot:"Input",overridesResolver:l.Oj})((({theme:e,ownerState:t})=>(0,r.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 o,i,d,c;const p=(0,u.b)({props:e,name:"MuiFilledInput"}),{components:m={},componentsProps:f,fullWidth:h=!1,inputComponent:x="input",multiline:S=!1,slotProps:w,slots:k={},type:C="text"}=p,R=(0,n.A)(p,A),M=(0,r.A)({},p,{fullWidth:h,inputComponent:x,multiline:S,type:C}),$=(e=>{const{classes:t,disableUnderline:o}=e,n={root:["root",!o&&"underline"],input:["input"]},i=(0,s.A)(n,b,t);return(0,r.A)({},t,i)})(p),I={root:{ownerState:M},input:{ownerState:M}},P=(null!=w?w:f)?(0,a.A)(I,null!=w?w:f):I,E=null!=(o=null!=(i=k.root)?i:m.Root)?o:v,F=null!=(d=null!=(c=k.input)?c:m.Input)?d:y;return(0,g.jsx)(l.Ay,(0,r.A)({slots:{root:E,input:F},componentsProps:P,fullWidth:h,inputComponent:x,multiline:S,ref:t,type:C},R,{classes:$}))}));x.muiName="Input";const S=x},779:(e,t,o)=>{o.d(t,{A:()=>y});var n=o(8587),r=o(8168),i=o(6540),a=o(4164),s=o(5659),l=o(5669),d=o(1848),c=o(2891),u=o(8466),p=o(6767),m=o(3800),f=o(8413),b=o(1609);function h(e){return(0,b.Ay)("MuiFormControl",e)}(0,f.A)("MuiFormControl",["root","marginNone","marginNormal","marginDense","fullWidth","disabled"]);var g=o(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,r.A)({},t.root,t[`margin${(0,u.A)(e.margin)}`],e.fullWidth&&t.fullWidth)})((({ownerState:e})=>(0,r.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%"}))),y=i.forwardRef((function(e,t){const o=(0,l.b)({props:e,name:"MuiFormControl"}),{children:d,className:f,color:b="primary",component:y="div",disabled:x=!1,error:S=!1,focused:w,fullWidth:k=!1,hiddenLabel:C=!1,margin:R="none",required:M=!1,size:$="medium",variant:I="outlined"}=o,P=(0,n.A)(o,A),E=(0,r.A)({},o,{color:b,component:y,disabled:x,error:S,fullWidth:k,hiddenLabel:C,margin:R,required:M,size:$,variant:I}),F=(e=>{const{classes:t,margin:o,fullWidth:n}=e,r={root:["root","none"!==o&&`margin${(0,u.A)(o)}`,n&&"fullWidth"]};return(0,s.A)(r,h,t)})(E),[T,L]=i.useState((()=>{let e=!1;return d&&i.Children.forEach(d,(t=>{if(!(0,p.A)(t,["Input","Select"]))return;const o=(0,p.A)(t,["Select"])?t.props.input:t;o&&(0,c.gr)(o.props)&&(e=!0)})),e})),[N,z]=i.useState((()=>{let e=!1;return d&&i.Children.forEach(d,(t=>{(0,p.A)(t,["Input","Select"])&&((0,c.lq)(t.props,!0)||(0,c.lq)(t.props.inputProps,!0))&&(e=!0)})),e})),[B,W]=i.useState(!1);x&&B&&W(!1);const O=void 0===w||x?B:w;let j;const D=i.useMemo((()=>({adornedStart:T,setAdornedStart:L,color:b,disabled:x,error:S,filled:N,focused:O,fullWidth:k,hiddenLabel:C,size:$,onBlur:()=>{W(!1)},onEmpty:()=>{z(!1)},onFilled:()=>{z(!0)},onFocus:()=>{W(!0)},registerEffect:j,required:M,variant:I})),[T,b,x,S,N,O,k,C,j,M,$,I]);return(0,g.jsx)(m.A.Provider,{value:D,children:(0,g.jsx)(v,(0,r.A)({as:y,ownerState:E,className:(0,a.A)(F.root,f),ref:t},P,{children:d}))})}))},3800:(e,t,o)=>{o.d(t,{A:()=>n});const n=o(6540).createContext(void 0)},8086:(e,t,o)=>{function n({props:e,states:t,muiFormControl:o}){return t.reduce(((t,n)=>(t[n]=e[n],o&&void 0===e[n]&&(t[n]=o[n]),t)),{})}o.d(t,{A:()=>n})},9716:(e,t,o)=>{o.d(t,{A:()=>i});var n=o(6540),r=o(3800);function i(){return n.useContext(r.A)}},6347:(e,t,o)=>{o.d(t,{A:()=>x});var n=o(8587),r=o(8168),i=o(6540),a=o(4164),s=o(5659),l=o(8086),d=o(9716),c=o(1848),u=o(8466),p=o(8413),m=o(1609);function f(e){return(0,m.Ay)("MuiFormHelperText",e)}const b=(0,p.A)("MuiFormHelperText",["root","error","disabled","sizeSmall","sizeMedium","contained","focused","filled","required"]);var h,g=o(5669),A=o(4848);const v=["children","className","component","disabled","error","filled","focused","margin","required","variant"],y=(0,c.Ay)("p",{name:"MuiFormHelperText",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,o.size&&t[`size${(0,u.A)(o.size)}`],o.contained&&t.contained,o.filled&&t.filled]}})((({theme:e,ownerState:t})=>(0,r.A)({color:(e.vars||e).palette.text.secondary},e.typography.caption,{textAlign:"left",marginTop:3,marginRight:0,marginBottom:0,marginLeft:0,[`&.${b.disabled}`]:{color:(e.vars||e).palette.text.disabled},[`&.${b.error}`]:{color:(e.vars||e).palette.error.main}},"small"===t.size&&{marginTop:4},t.contained&&{marginLeft:14,marginRight:14}))),x=i.forwardRef((function(e,t){const o=(0,g.b)({props:e,name:"MuiFormHelperText"}),{children:i,className:c,component:p="p"}=o,m=(0,n.A)(o,v),b=(0,d.A)(),x=(0,l.A)({props:o,muiFormControl:b,states:["variant","size","disabled","error","filled","focused","required"]}),S=(0,r.A)({},o,{component:p,contained:"filled"===x.variant||"outlined"===x.variant,variant:x.variant,size:x.size,disabled:x.disabled,error:x.error,filled:x.filled,focused:x.focused,required:x.required}),w=(e=>{const{classes:t,contained:o,size:n,disabled:r,error:i,filled:a,focused:l,required:d}=e,c={root:["root",r&&"disabled",i&&"error",n&&`size${(0,u.A)(n)}`,o&&"contained",l&&"focused",a&&"filled",d&&"required"]};return(0,s.A)(c,f,t)})(S);return(0,A.jsx)(y,(0,r.A)({as:p,ownerState:S,className:(0,a.A)(w.root,c),ref:t},m,{children:" "===i?h||(h=(0,A.jsx)("span",{className:"notranslate",children:"​"})):i}))}))},5327:(e,t,o)=>{o.d(t,{A:()=>l});var n=o(8168),r=(o(6540),o(2967)),i=o(2765),a=o(8312),s=o(4848);const l=function(e){return(0,s.jsx)(r.A,(0,n.A)({},e,{defaultTheme:i.A,themeId:a.A}))}},8239:(e,t,o)=>{o.d(t,{Ay:()=>C});var n=o(8587),r=o(8168),i=o(6540),a=o(4164),s=o(9452),l=o(9599),d=o(5659),c=o(1848),u=o(5669),p=o(4675);const m=i.createContext();var f=o(8413),b=o(1609);function h(e){return(0,b.Ay)("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=o(4848);const y=["className","columns","columnSpacing","component","container","direction","item","rowSpacing","spacing","wrap","zeroMinWidth"];function x(e){const t=parseFloat(e);return`${t}${String(e).replace(String(t),"")||"px"}`}function S({breakpoints:e,values:t}){let o="";Object.keys(t).forEach((e=>{""===o&&0!==t[e]&&(o=e)}));const n=Object.keys(e).sort(((t,o)=>e[t]-e[o]));return n.slice(0,n.indexOf(o))}const w=(0,c.Ay)("div",{name:"MuiGrid",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e,{container:n,direction:r,item:i,spacing:a,wrap:s,zeroMinWidth:l,breakpoints:d}=o;let c=[];n&&(c=function(e,t,o={}){if(!e||e<=0)return[];if("string"==typeof e&&!Number.isNaN(Number(e))||"number"==typeof e)return[o[`spacing-xs-${String(e)}`]];const n=[];return t.forEach((t=>{const r=e[t];Number(r)>0&&n.push(o[`spacing-${t}-${String(r)}`])})),n}(a,d,t));const u=[];return d.forEach((e=>{const n=o[e];n&&u.push(t[`grid-${e}-${String(n)}`])})),[t.root,n&&t.container,i&&t.item,l&&t.zeroMinWidth,...c,"row"!==r&&t[`direction-xs-${String(r)}`],"wrap"!==s&&t[`wrap-xs-${String(s)}`],...u]}})((({ownerState:e})=>(0,r.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 o=(0,s.kW)({values:t.direction,breakpoints:e.breakpoints.values});return(0,s.NI)({theme:e},o,(e=>{const t={flexDirection:e};return 0===e.indexOf("column")&&(t[`& > .${A.item}`]={maxWidth:"none"}),t}))}),(function({theme:e,ownerState:t}){const{container:o,rowSpacing:n}=t;let r={};if(o&&0!==n){const t=(0,s.kW)({values:n,breakpoints:e.breakpoints.values});let o;"object"==typeof t&&(o=S({breakpoints:e.breakpoints.values,values:t})),r=(0,s.NI)({theme:e},t,((t,n)=>{var r;const i=e.spacing(t);return"0px"!==i?{marginTop:`-${x(i)}`,[`& > .${A.item}`]:{paddingTop:x(i)}}:null!=(r=o)&&r.includes(n)?{}:{marginTop:0,[`& > .${A.item}`]:{paddingTop:0}}}))}return r}),(function({theme:e,ownerState:t}){const{container:o,columnSpacing:n}=t;let r={};if(o&&0!==n){const t=(0,s.kW)({values:n,breakpoints:e.breakpoints.values});let o;"object"==typeof t&&(o=S({breakpoints:e.breakpoints.values,values:t})),r=(0,s.NI)({theme:e},t,((t,n)=>{var r;const i=e.spacing(t);return"0px"!==i?{width:`calc(100% + ${x(i)})`,marginLeft:`-${x(i)}`,[`& > .${A.item}`]:{paddingLeft:x(i)}}:null!=(r=o)&&r.includes(n)?{}:{width:"100%",marginLeft:0,[`& > .${A.item}`]:{paddingLeft:0}}}))}return r}),(function({theme:e,ownerState:t}){let o;return e.breakpoints.keys.reduce(((n,i)=>{let a={};if(t[i]&&(o=t[i]),!o)return n;if(!0===o)a={flexBasis:0,flexGrow:1,maxWidth:"100%"};else if("auto"===o)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 n;const c=Math.round(o/d*1e8)/1e6+"%";let u={};if(t.container&&t.item&&0!==t.columnSpacing){const o=e.spacing(t.columnSpacing);if("0px"!==o){const e=`calc(${c} + ${x(o)})`;u={flexBasis:e,maxWidth:e}}}a=(0,r.A)({flexBasis:c,flexGrow:0,maxWidth:c},u)}return 0===e.breakpoints.values[i]?Object.assign(n,a):n[e.breakpoints.up(i)]=a,n}),{})})),k=i.forwardRef((function(e,t){const o=(0,u.b)({props:e,name:"MuiGrid"}),{breakpoints:s}=(0,p.A)(),c=(0,l.A)(o),{className:f,columns:b,columnSpacing:g,component:A="div",container:x=!1,direction:S="row",item:k=!1,rowSpacing:C,spacing:R=0,wrap:M="wrap",zeroMinWidth:$=!1}=c,I=(0,n.A)(c,y),P=C||R,E=g||R,F=i.useContext(m),T=x?b||12:F,L={},N=(0,r.A)({},I);s.keys.forEach((e=>{null!=I[e]&&(L[e]=I[e],delete N[e])}));const z=(0,r.A)({},c,{columns:T,container:x,direction:S,item:k,rowSpacing:P,columnSpacing:E,wrap:M,zeroMinWidth:$,spacing:R},L,{breakpoints:s.keys}),B=(e=>{const{classes:t,container:o,direction:n,item:r,spacing:i,wrap:a,zeroMinWidth:s,breakpoints:l}=e;let c=[];o&&(c=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 o=[];return t.forEach((t=>{const n=e[t];if(Number(n)>0){const e=`spacing-${t}-${String(n)}`;o.push(e)}})),o}(i,l));const u=[];l.forEach((t=>{const o=e[t];o&&u.push(`grid-${t}-${String(o)}`)}));const p={root:["root",o&&"container",r&&"item",s&&"zeroMinWidth",...c,"row"!==n&&`direction-xs-${String(n)}`,"wrap"!==a&&`wrap-xs-${String(a)}`,...u]};return(0,d.A)(p,h,t)})(z);return(0,v.jsx)(m.Provider,{value:T,children:(0,v.jsx)(w,(0,r.A)({ownerState:z,className:(0,a.A)(B.root,f),as:A,ref:t},N))})})),C=k},7467:(e,t,o)=>{o.d(t,{A:()=>g});var n=o(8168),r=o(8587),i=o(6540),a=o(3068),s=o(7353),l=o(4675),d=o(5186),c=o(6852),u=o(4848);const p=["addEndListener","appear","children","easing","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","style","timeout","TransitionComponent"];function m(e){return`scale(${e}, ${e**2})`}const f={entering:{opacity:1,transform:m(1)},entered:{opacity:1,transform:"none"}},b="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:o,appear:h=!0,children:g,easing:A,in:v,onEnter:y,onEntered:x,onEntering:S,onExit:w,onExited:k,onExiting:C,style:R,timeout:M="auto",TransitionComponent:$=s.Ay}=e,I=(0,r.A)(e,p),P=(0,a.A)(),E=i.useRef(),F=(0,l.A)(),T=i.useRef(null),L=(0,c.A)(T,g.ref,t),N=e=>t=>{if(e){const o=T.current;void 0===t?e(o):e(o,t)}},z=N(S),B=N(((e,t)=>{(0,d.q)(e);const{duration:o,delay:n,easing:r}=(0,d.c)({style:R,timeout:M,easing:A},{mode:"enter"});let i;"auto"===M?(i=F.transitions.getAutoHeightDuration(e.clientHeight),E.current=i):i=o,e.style.transition=[F.transitions.create("opacity",{duration:i,delay:n}),F.transitions.create("transform",{duration:b?i:.666*i,delay:n,easing:r})].join(","),y&&y(e,t)})),W=N(x),O=N(C),j=N((e=>{const{duration:t,delay:o,easing:n}=(0,d.c)({style:R,timeout:M,easing:A},{mode:"exit"});let r;"auto"===M?(r=F.transitions.getAutoHeightDuration(e.clientHeight),E.current=r):r=t,e.style.transition=[F.transitions.create("opacity",{duration:r,delay:o}),F.transitions.create("transform",{duration:b?r:.666*r,delay:b?o:o||.333*r,easing:n})].join(","),e.style.opacity=0,e.style.transform=m(.75),w&&w(e)})),D=N(k);return(0,u.jsx)($,(0,n.A)({appear:h,in:v,nodeRef:T,onEnter:B,onEntered:W,onEntering:z,onExit:j,onExited:D,onExiting:O,addEndListener:e=>{"auto"===M&&P.start(E.current||0,e),o&&o(T.current,e)},timeout:"auto"===M?null:M},I,{children:(e,t)=>i.cloneElement(g,(0,n.A)({style:(0,n.A)({opacity:0,transform:m(.75),visibility:"exited"!==e||v?void 0:"hidden"},f[e],R,g.props.style),ref:L},t))}))}));h.muiSupportAuto=!0;const g=h},1881:(e,t,o)=>{o.d(t,{A:()=>S});var n=o(8587),r=o(8168),i=o(6540),a=o(5659),s=o(1317),l=o(627),d=o(1848),c=o(9770),u=o(5669),p=o(8413),m=o(1609),f=o(1175);function b(e){return(0,m.Ay)("MuiInput",e)}const h=(0,r.A)({},f.A,(0,p.A)("MuiInput",["root","underline","input"]));var g=o(4848);const A=["disableUnderline","components","componentsProps","fullWidth","inputComponent","multiline","slotProps","slots","type"],v=(0,d.Ay)(l.Sh,{shouldForwardProp:e=>(0,c.A)(e)||"classes"===e,name:"MuiInput",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[...(0,l.WC)(e,t),!o.disableUnderline&&t.underline]}})((({theme:e,ownerState:t})=>{let o="light"===e.palette.mode?"rgba(0, 0, 0, 0.42)":"rgba(255, 255, 255, 0.7)";return e.vars&&(o=`rgba(${e.vars.palette.common.onBackgroundChannel} / ${e.vars.opacity.inputUnderline})`),(0,r.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 ${o}`,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 ${o}`}},[`&.${h.disabled}:before`]:{borderBottomStyle:"dotted"}})})),y=(0,d.Ay)(l.f3,{name:"MuiInput",slot:"Input",overridesResolver:l.Oj})({}),x=i.forwardRef((function(e,t){var o,i,d,c;const p=(0,u.b)({props:e,name:"MuiInput"}),{disableUnderline:m,components:f={},componentsProps:h,fullWidth:x=!1,inputComponent:S="input",multiline:w=!1,slotProps:k,slots:C={},type:R="text"}=p,M=(0,n.A)(p,A),$=(e=>{const{classes:t,disableUnderline:o}=e,n={root:["root",!o&&"underline"],input:["input"]},i=(0,a.A)(n,b,t);return(0,r.A)({},t,i)})(p),I={root:{ownerState:{disableUnderline:m}}},P=(null!=k?k:h)?(0,s.A)(null!=k?k:h,I):I,E=null!=(o=null!=(i=C.root)?i:f.Root)?o:v,F=null!=(d=null!=(c=C.input)?c:f.Input)?d:y;return(0,g.jsx)(l.Ay,(0,r.A)({slots:{root:E,input:F},slotProps:P,fullWidth:x,inputComponent:S,multiline:w,ref:t,type:R},M,{classes:$}))}));x.muiName="Input";const S=x},627:(e,t,o)=>{o.d(t,{Ay:()=>I,Oj:()=>C,Sh:()=>R,WC:()=>k,f3:()=>M});var n=o(8587),r=o(8168),i=o(9453),a=o(6540),s=o(4164),l=o(5659),d=o(2197),c=o(3561),u=o(8086),p=o(3800),m=o(9716),f=o(1848),b=o(5669),h=o(8466),g=o(6852),A=o(2778),v=o(5327),y=o(2891),x=o(1175),S=o(4848);const w=["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:o}=e;return[t.root,o.formControl&&t.formControl,o.startAdornment&&t.adornedStart,o.endAdornment&&t.adornedEnd,o.error&&t.error,"small"===o.size&&t.sizeSmall,o.multiline&&t.multiline,o.color&&t[`color${(0,h.A)(o.color)}`],o.fullWidth&&t.fullWidth,o.hiddenLabel&&t.hiddenLabel]},C=(e,t)=>{const{ownerState:o}=e;return[t.input,"small"===o.size&&t.inputSizeSmall,o.multiline&&t.inputMultiline,"search"===o.type&&t.inputTypeSearch,o.startAdornment&&t.inputAdornedStart,o.endAdornment&&t.inputAdornedEnd,o.hiddenLabel&&t.inputHiddenLabel]},R=(0,f.Ay)("div",{name:"MuiInputBase",slot:"Root",overridesResolver:k})((({theme:e,ownerState:t})=>(0,r.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",[`&.${x.A.disabled}`]:{color:(e.vars||e).palette.text.disabled,cursor:"default"}},t.multiline&&(0,r.A)({padding:"4px 0 5px"},"small"===t.size&&{paddingTop:1}),t.fullWidth&&{width:"100%"}))),M=(0,f.Ay)("input",{name:"MuiInputBase",slot:"Input",overridesResolver:C})((({theme:e,ownerState:t})=>{const o="light"===e.palette.mode,n=(0,r.A)({color:"currentColor"},e.vars?{opacity:e.vars.opacity.inputPlaceholder}:{opacity:o?.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:o?.42:.5};return(0,r.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":n,"&::-moz-placeholder":n,"&:-ms-input-placeholder":n,"&::-ms-input-placeholder":n,"&:focus":{outline:0},"&:invalid":{boxShadow:"none"},"&::-webkit-search-decoration":{WebkitAppearance:"none"},[`label[data-shrink=false] + .${x.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},[`&.${x.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"})})),$=(0,S.jsx)(v.A,{styles:{"@keyframes mui-auto-fill":{from:{display:"block"}},"@keyframes mui-auto-fill-cancel":{from:{display:"block"}}}}),I=a.forwardRef((function(e,t){var o;const f=(0,b.b)({props:e,name:"MuiInputBase"}),{"aria-describedby":v,autoComplete:k,autoFocus:C,className:I,components:P={},componentsProps:E={},defaultValue:F,disabled:T,disableInjectingGlobalStyles:L,endAdornment:N,fullWidth:z=!1,id:B,inputComponent:W="input",inputProps:O={},inputRef:j,maxRows:D,minRows:q,multiline:G=!1,name:H,onBlur:K,onChange:V,onClick:U,onFocus:X,onKeyDown:Y,onKeyUp:_,placeholder:J,readOnly:Q,renderSuffix:Z,rows:ee,slotProps:te={},slots:oe={},startAdornment:ne,type:re="text",value:ie}=f,ae=(0,n.A)(f,w),se=null!=O.value?O.value:ie,{current:le}=a.useRef(null!=se),de=a.useRef(),ce=a.useCallback((e=>{}),[]),ue=(0,g.A)(de,j,O.ref,ce),[pe,me]=a.useState(!1),fe=(0,m.A)(),be=(0,u.A)({props:f,muiFormControl:fe,states:["color","disabled","error","hiddenLabel","size","required","filled"]});be.focused=fe?fe.focused:pe,a.useEffect((()=>{!fe&&T&&pe&&(me(!1),K&&K())}),[fe,T,pe,K]);const he=fe&&fe.onFilled,ge=fe&&fe.onEmpty,Ae=a.useCallback((e=>{(0,y.lq)(e)?he&&he():ge&&ge()}),[he,ge]);(0,A.A)((()=>{le&&Ae({value:se})}),[se,Ae,le]),a.useEffect((()=>{Ae(de.current)}),[]);let ve=W,ye=O;G&&"input"===ve&&(ye=ee?(0,r.A)({type:void 0,minRows:ee,maxRows:ee},ye):(0,r.A)({type:void 0,maxRows:D,minRows:q},ye),ve=c.A),a.useEffect((()=>{fe&&fe.setAdornedStart(Boolean(ne))}),[fe,ne]);const xe=(0,r.A)({},f,{color:be.color||"primary",disabled:be.disabled,endAdornment:N,error:be.error,focused:be.focused,formControl:fe,fullWidth:z,hiddenLabel:be.hiddenLabel,multiline:G,size:be.size,startAdornment:ne,type:re}),Se=(e=>{const{classes:t,color:o,disabled:n,error:r,endAdornment:i,focused:a,formControl:s,fullWidth:d,hiddenLabel:c,multiline:u,readOnly:p,size:m,startAdornment:f,type:b}=e,g={root:["root",`color${(0,h.A)(o)}`,n&&"disabled",r&&"error",d&&"fullWidth",a&&"focused",s&&"formControl",m&&"medium"!==m&&`size${(0,h.A)(m)}`,u&&"multiline",f&&"adornedStart",i&&"adornedEnd",c&&"hiddenLabel",p&&"readOnly"],input:["input",n&&"disabled","search"===b&&"inputTypeSearch",u&&"inputMultiline","small"===m&&"inputSizeSmall",c&&"inputHiddenLabel",f&&"inputAdornedStart",i&&"inputAdornedEnd",p&&"readOnly"]};return(0,l.A)(g,x.g,t)})(xe),we=oe.root||P.Root||R,ke=te.root||E.root||{},Ce=oe.input||P.Input||M;return ye=(0,r.A)({},ye,null!=(o=te.input)?o:E.input),(0,S.jsxs)(a.Fragment,{children:[!L&&$,(0,S.jsxs)(we,(0,r.A)({},ke,!(0,d.A)(we)&&{ownerState:(0,r.A)({},xe,ke.ownerState)},{ref:t,onClick:e=>{de.current&&e.currentTarget===e.target&&de.current.focus(),U&&U(e)}},ae,{className:(0,s.A)(Se.root,ke.className,I,Q&&"MuiInputBase-readOnly"),children:[ne,(0,S.jsx)(p.A.Provider,{value:null,children:(0,S.jsx)(Ce,(0,r.A)({ownerState:xe,"aria-invalid":be.error,"aria-describedby":v,autoComplete:k,autoFocus:C,defaultValue:F,disabled:be.disabled,id:B,onAnimationStart:e=>{Ae("mui-auto-fill-cancel"===e.animationName?de.current:{value:"x"})},name:H,placeholder:J,readOnly:Q,required:be.required,rows:ee,value:se,onKeyDown:Y,onKeyUp:_,type:re},ye,!(0,d.A)(Ce)&&{as:ve,ownerState:(0,r.A)({},xe,ye.ownerState)},{ref:ue,className:(0,s.A)(Se.input,ye.className,Q&&"MuiInputBase-readOnly"),onBlur:e=>{K&&K(e),O.onBlur&&O.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})}O.onChange&&O.onChange(e,...t),V&&V(e,...t)},onFocus:e=>{be.disabled?e.stopPropagation():(X&&X(e),O.onFocus&&O.onFocus(e),fe&&fe.onFocus?fe.onFocus(e):me(!0))}}))}),N,Z?Z((0,r.A)({},be,{startAdornment:ne})):null]}))]})}))},1175:(e,t,o)=>{o.d(t,{A:()=>a,g:()=>i});var n=o(8413),r=o(1609);function i(e){return(0,r.Ay)("MuiInputBase",e)}const a=(0,n.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,o)=>{function n(e){return null!=e&&!(Array.isArray(e)&&0===e.length)}function r(e,t=!1){return e&&(n(e.value)&&""!==e.value||t&&n(e.defaultValue)&&""!==e.defaultValue)}function i(e){return e.startAdornment}o.d(t,{gr:()=>i,lq:()=>r})},4433:(e,t,o)=>{o.d(t,{A:()=>R});var n=o(8587),r=o(8168),i=o(6540),a=o(5659),s=o(4164),l=o(8086),d=o(9716),c=o(8466),u=o(5669),p=o(1848),m=o(8413),f=o(1609);function b(e){return(0,f.Ay)("MuiFormLabel",e)}const h=(0,m.A)("MuiFormLabel",["root","colorSecondary","focused","disabled","error","filled","required","asterisk"]);var g=o(4848);const A=["children","className","color","component","disabled","error","filled","focused","required"],v=(0,p.Ay)("label",{name:"MuiFormLabel",slot:"Root",overridesResolver:({ownerState:e},t)=>(0,r.A)({},t.root,"secondary"===e.color&&t.colorSecondary,e.filled&&t.filled)})((({theme:e,ownerState:t})=>(0,r.A)({color:(e.vars||e).palette.text.secondary},e.typography.body1,{lineHeight:"1.4375em",padding:0,position:"relative",[`&.${h.focused}`]:{color:(e.vars||e).palette[t.color].main},[`&.${h.disabled}`]:{color:(e.vars||e).palette.text.disabled},[`&.${h.error}`]:{color:(e.vars||e).palette.error.main}}))),y=(0,p.Ay)("span",{name:"MuiFormLabel",slot:"Asterisk",overridesResolver:(e,t)=>t.asterisk})((({theme:e})=>({[`&.${h.error}`]:{color:(e.vars||e).palette.error.main}}))),x=i.forwardRef((function(e,t){const o=(0,u.b)({props:e,name:"MuiFormLabel"}),{children:i,className:p,component:m="label"}=o,f=(0,n.A)(o,A),h=(0,d.A)(),x=(0,l.A)({props:o,muiFormControl:h,states:["color","required","focused","disabled","error","filled"]}),S=(0,r.A)({},o,{color:x.color||"primary",component:m,disabled:x.disabled,error:x.error,filled:x.filled,focused:x.focused,required:x.required}),w=(e=>{const{classes:t,color:o,focused:n,disabled:r,error:i,filled:s,required:l}=e,d={root:["root",`color${(0,c.A)(o)}`,r&&"disabled",i&&"error",s&&"filled",n&&"focused",l&&"required"],asterisk:["asterisk",i&&"error"]};return(0,a.A)(d,b,t)})(S);return(0,g.jsxs)(v,(0,r.A)({as:m,ownerState:S,className:(0,s.A)(w.root,p),ref:t},f,{children:[i,x.required&&(0,g.jsxs)(y,{ownerState:S,"aria-hidden":!0,className:w.asterisk,children:[" ","*"]})]}))}));var S=o(9770);function w(e){return(0,f.Ay)("MuiInputLabel",e)}(0,m.A)("MuiInputLabel",["root","focused","disabled","error","required","asterisk","formControl","sizeSmall","shrink","animated","standard","filled","outlined"]);const k=["disableAnimation","margin","shrink","variant","className"],C=(0,p.Ay)(x,{shouldForwardProp:e=>(0,S.A)(e)||"classes"===e,name:"MuiInputLabel",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[{[`& .${h.asterisk}`]:t.asterisk},t.root,o.formControl&&t.formControl,"small"===o.size&&t.sizeSmall,o.shrink&&t.shrink,!o.disableAnimation&&t.animated,o.focused&&t.focused,t[o.variant]]}})((({theme:e,ownerState:t})=>(0,r.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,r.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,r.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,r.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)"})))),R=i.forwardRef((function(e,t){const o=(0,u.b)({name:"MuiInputLabel",props:e}),{disableAnimation:i=!1,shrink:p,className:m}=o,f=(0,n.A)(o,k),b=(0,d.A)();let h=p;void 0===h&&b&&(h=b.filled||b.focused||b.adornedStart);const A=(0,l.A)({props:o,muiFormControl:b,states:["size","variant","required","focused"]}),v=(0,r.A)({},o,{disableAnimation:i,formControl:b,shrink:h,size:A.size,variant:A.variant,required:A.required,focused:A.focused}),y=(e=>{const{classes:t,formControl:o,size:n,shrink:i,disableAnimation:s,variant:l,required:d}=e,u={root:["root",o&&"formControl",!s&&"animated",i&&"shrink",n&&"normal"!==n&&`size${(0,c.A)(n)}`,l],asterisk:[d&&"asterisk"]},p=(0,a.A)(u,w,t);return(0,r.A)({},t,p)})(v);return(0,g.jsx)(C,(0,r.A)({"data-shrink":h,ownerState:v,ref:t,className:(0,s.A)(y.root,m)},f,{classes:y}))}))},9799:(e,t,o)=>{o.d(t,{A:()=>g});var n=o(8587),r=o(8168),i=o(6540),a=o(4164),s=o(5659),l=o(1848),d=o(5669),c=o(2850),u=o(8413),p=o(1609);function m(e){return(0,p.Ay)("MuiList",e)}(0,u.A)("MuiList",["root","padding","dense","subheader"]);var f=o(4848);const b=["children","className","component","dense","disablePadding","subheader"],h=(0,l.Ay)("ul",{name:"MuiList",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,!o.disablePadding&&t.padding,o.dense&&t.dense,o.subheader&&t.subheader]}})((({ownerState:e})=>(0,r.A)({listStyle:"none",margin:0,padding:0,position:"relative"},!e.disablePadding&&{paddingTop:8,paddingBottom:8},e.subheader&&{paddingTop:0}))),g=i.forwardRef((function(e,t){const o=(0,d.b)({props:e,name:"MuiList"}),{children:l,className:u,component:p="ul",dense:g=!1,disablePadding:A=!1,subheader:v}=o,y=(0,n.A)(o,b),x=i.useMemo((()=>({dense:g})),[g]),S=(0,r.A)({},o,{component:p,dense:g,disablePadding:A}),w=(e=>{const{classes:t,disablePadding:o,dense:n,subheader:r}=e,i={root:["root",!o&&"padding",n&&"dense",r&&"subheader"]};return(0,s.A)(i,m,t)})(S);return(0,f.jsx)(c.A.Provider,{value:x,children:(0,f.jsxs)(h,(0,r.A)({as:p,className:(0,a.A)(w.root,u),ref:t,ownerState:S},y,{children:[v,l]}))})}))},2850:(e,t,o)=>{o.d(t,{A:()=>n});const n=o(6540).createContext({})},4090:(e,t,o)=>{o.d(t,{Ay:()=>F});var n=o(8587),r=o(8168),i=o(6540),a=o(4164),s=o(5659),l=o(771),d=o(2197),c=o(1848),u=o(5669),p=o(8850),m=o(6767),f=o(2778),b=o(6852),h=o(2850),g=o(8413),A=o(1609);function v(e){return(0,A.Ay)("MuiListItem",e)}const y=(0,g.A)("MuiListItem",["root","container","focusVisible","dense","alignItemsFlexStart","disabled","divider","gutters","padding","button","secondaryAction","selected"]);var x=o(2927);function S(e){return(0,A.Ay)("MuiListItemSecondaryAction",e)}(0,g.A)("MuiListItemSecondaryAction",["root","disableGutters"]);var w=o(4848);const k=["className"],C=(0,c.Ay)("div",{name:"MuiListItemSecondaryAction",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,o.disableGutters&&t.disableGutters]}})((({ownerState:e})=>(0,r.A)({position:"absolute",right:16,top:"50%",transform:"translateY(-50%)"},e.disableGutters&&{right:0}))),R=i.forwardRef((function(e,t){const o=(0,u.b)({props:e,name:"MuiListItemSecondaryAction"}),{className:l}=o,d=(0,n.A)(o,k),c=i.useContext(h.A),p=(0,r.A)({},o,{disableGutters:c.disableGutters}),m=(e=>{const{disableGutters:t,classes:o}=e,n={root:["root",t&&"disableGutters"]};return(0,s.A)(n,S,o)})(p);return(0,w.jsx)(C,(0,r.A)({className:(0,a.A)(m.root,l),ownerState:p,ref:t},d))}));R.muiName="ListItemSecondaryAction";const M=R,$=["className"],I=["alignItems","autoFocus","button","children","className","component","components","componentsProps","ContainerComponent","ContainerProps","dense","disabled","disableGutters","disablePadding","divider","focusVisibleClassName","secondaryAction","selected","slotProps","slots"],P=(0,c.Ay)("div",{name:"MuiListItem",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,o.dense&&t.dense,"flex-start"===o.alignItems&&t.alignItemsFlexStart,o.divider&&t.divider,!o.disableGutters&&t.gutters,!o.disablePadding&&t.padding,o.button&&t.button,o.hasSecondaryAction&&t.secondaryAction]}})((({theme:e,ownerState:t})=>(0,r.A)({display:"flex",justifyContent:"flex-start",alignItems:"center",position:"relative",textDecoration:"none",width:"100%",boxSizing:"border-box",textAlign:"left"},!t.disablePadding&&(0,r.A)({paddingTop:8,paddingBottom:8},t.dense&&{paddingTop:4,paddingBottom:4},!t.disableGutters&&{paddingLeft:16,paddingRight:16},!!t.secondaryAction&&{paddingRight:48}),!!t.secondaryAction&&{[`& > .${x.A.root}`]:{paddingRight:48}},{[`&.${y.focusVisible}`]:{backgroundColor:(e.vars||e).palette.action.focus},[`&.${y.selected}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / ${e.vars.palette.action.selectedOpacity})`:(0,l.X4)(e.palette.primary.main,e.palette.action.selectedOpacity),[`&.${y.focusVisible}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.focusOpacity}))`:(0,l.X4)(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.focusOpacity)}},[`&.${y.disabled}`]:{opacity:(e.vars||e).palette.action.disabledOpacity}},"flex-start"===t.alignItems&&{alignItems:"flex-start"},t.divider&&{borderBottom:`1px solid ${(e.vars||e).palette.divider}`,backgroundClip:"padding-box"},t.button&&{transition:e.transitions.create("background-color",{duration:e.transitions.duration.shortest}),"&:hover":{textDecoration:"none",backgroundColor:(e.vars||e).palette.action.hover,"@media (hover: none)":{backgroundColor:"transparent"}},[`&.${y.selected}:hover`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.hoverOpacity}))`:(0,l.X4)(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / ${e.vars.palette.action.selectedOpacity})`:(0,l.X4)(e.palette.primary.main,e.palette.action.selectedOpacity)}}},t.hasSecondaryAction&&{paddingRight:48}))),E=(0,c.Ay)("li",{name:"MuiListItem",slot:"Container",overridesResolver:(e,t)=>t.container})({position:"relative"}),F=i.forwardRef((function(e,t){const o=(0,u.b)({props:e,name:"MuiListItem"}),{alignItems:l="center",autoFocus:c=!1,button:g=!1,children:A,className:x,component:S,components:k={},componentsProps:C={},ContainerComponent:R="li",ContainerProps:{className:F}={},dense:T=!1,disabled:L=!1,disableGutters:N=!1,disablePadding:z=!1,divider:B=!1,focusVisibleClassName:W,secondaryAction:O,selected:j=!1,slotProps:D={},slots:q={}}=o,G=(0,n.A)(o.ContainerProps,$),H=(0,n.A)(o,I),K=i.useContext(h.A),V=i.useMemo((()=>({dense:T||K.dense||!1,alignItems:l,disableGutters:N})),[l,K.dense,T,N]),U=i.useRef(null);(0,f.A)((()=>{c&&U.current&&U.current.focus()}),[c]);const X=i.Children.toArray(A),Y=X.length&&(0,m.A)(X[X.length-1],["ListItemSecondaryAction"]),_=(0,r.A)({},o,{alignItems:l,autoFocus:c,button:g,dense:V.dense,disabled:L,disableGutters:N,disablePadding:z,divider:B,hasSecondaryAction:Y,selected:j}),J=(e=>{const{alignItems:t,button:o,classes:n,dense:r,disabled:i,disableGutters:a,disablePadding:l,divider:d,hasSecondaryAction:c,selected:u}=e,p={root:["root",r&&"dense",!a&&"gutters",!l&&"padding",d&&"divider",i&&"disabled",o&&"button","flex-start"===t&&"alignItemsFlexStart",c&&"secondaryAction",u&&"selected"],container:["container"]};return(0,s.A)(p,v,n)})(_),Q=(0,b.A)(U,t),Z=q.root||k.Root||P,ee=D.root||C.root||{},te=(0,r.A)({className:(0,a.A)(J.root,ee.className,x),disabled:L},H);let oe=S||"li";return g&&(te.component=S||"div",te.focusVisibleClassName=(0,a.A)(y.focusVisible,W),oe=p.A),Y?(oe=te.component||S?oe:"div","li"===R&&("li"===oe?oe="div":"li"===te.component&&(te.component="div")),(0,w.jsx)(h.A.Provider,{value:V,children:(0,w.jsxs)(E,(0,r.A)({as:R,className:(0,a.A)(J.container,F),ref:Q,ownerState:_},G,{children:[(0,w.jsx)(Z,(0,r.A)({},ee,!(0,d.A)(Z)&&{as:oe,ownerState:(0,r.A)({},_,ee.ownerState)},te,{children:X})),X.pop()]}))})):(0,w.jsx)(h.A.Provider,{value:V,children:(0,w.jsxs)(Z,(0,r.A)({},ee,{as:oe,ref:Q},!(0,d.A)(Z)&&{ownerState:(0,r.A)({},_,ee.ownerState)},te,{children:[X,O&&(0,w.jsx)(M,{children:O})]}))})}))},7211:(e,t,o)=>{o.d(t,{A:()=>y});var n=o(8587),r=o(8168),i=o(6540),a=o(4164),s=o(5659),l=o(771),d=o(1848),c=o(9770),u=o(5669),p=o(8850),m=o(2778),f=o(6852),b=o(2850),h=o(2927),g=o(4848);const A=["alignItems","autoFocus","component","children","dense","disableGutters","divider","focusVisibleClassName","selected","className"],v=(0,d.Ay)(p.A,{shouldForwardProp:e=>(0,c.A)(e)||"classes"===e,name:"MuiListItemButton",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,o.dense&&t.dense,"flex-start"===o.alignItems&&t.alignItemsFlexStart,o.divider&&t.divider,!o.disableGutters&&t.gutters]}})((({theme:e,ownerState:t})=>(0,r.A)({display:"flex",flexGrow:1,justifyContent:"flex-start",alignItems:"center",position:"relative",textDecoration:"none",minWidth:0,boxSizing:"border-box",textAlign:"left",paddingTop:8,paddingBottom:8,transition:e.transitions.create("background-color",{duration:e.transitions.duration.shortest}),"&:hover":{textDecoration:"none",backgroundColor:(e.vars||e).palette.action.hover,"@media (hover: none)":{backgroundColor:"transparent"}},[`&.${h.A.selected}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / ${e.vars.palette.action.selectedOpacity})`:(0,l.X4)(e.palette.primary.main,e.palette.action.selectedOpacity),[`&.${h.A.focusVisible}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.focusOpacity}))`:(0,l.X4)(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.focusOpacity)}},[`&.${h.A.selected}:hover`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.hoverOpacity}))`:(0,l.X4)(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / ${e.vars.palette.action.selectedOpacity})`:(0,l.X4)(e.palette.primary.main,e.palette.action.selectedOpacity)}},[`&.${h.A.focusVisible}`]:{backgroundColor:(e.vars||e).palette.action.focus},[`&.${h.A.disabled}`]:{opacity:(e.vars||e).palette.action.disabledOpacity}},t.divider&&{borderBottom:`1px solid ${(e.vars||e).palette.divider}`,backgroundClip:"padding-box"},"flex-start"===t.alignItems&&{alignItems:"flex-start"},!t.disableGutters&&{paddingLeft:16,paddingRight:16},t.dense&&{paddingTop:4,paddingBottom:4}))),y=i.forwardRef((function(e,t){const o=(0,u.b)({props:e,name:"MuiListItemButton"}),{alignItems:l="center",autoFocus:d=!1,component:c="div",children:p,dense:y=!1,disableGutters:x=!1,divider:S=!1,focusVisibleClassName:w,selected:k=!1,className:C}=o,R=(0,n.A)(o,A),M=i.useContext(b.A),$=i.useMemo((()=>({dense:y||M.dense||!1,alignItems:l,disableGutters:x})),[l,M.dense,y,x]),I=i.useRef(null);(0,m.A)((()=>{d&&I.current&&I.current.focus()}),[d]);const P=(0,r.A)({},o,{alignItems:l,dense:$.dense,disableGutters:x,divider:S,selected:k}),E=(e=>{const{alignItems:t,classes:o,dense:n,disabled:i,disableGutters:a,divider:l,selected:d}=e,c={root:["root",n&&"dense",!a&&"gutters",l&&"divider",i&&"disabled","flex-start"===t&&"alignItemsFlexStart",d&&"selected"]},u=(0,s.A)(c,h.Y,o);return(0,r.A)({},o,u)})(P),F=(0,f.A)(I,t);return(0,g.jsx)(b.A.Provider,{value:$,children:(0,g.jsx)(v,(0,r.A)({ref:F,href:R.href||R.to,component:(R.href||R.to)&&"div"===c?"button":c,focusVisibleClassName:(0,a.A)(E.focusVisible,w),ownerState:P,className:(0,a.A)(E.root,C)},R,{classes:E,children:p}))})}))},2927:(e,t,o)=>{o.d(t,{A:()=>a,Y:()=>i});var n=o(8413),r=o(1609);function i(e){return(0,r.Ay)("MuiListItemButton",e)}const a=(0,n.A)("MuiListItemButton",["root","focusVisible","dense","alignItemsFlexStart","disabled","divider","gutters","selected"])},8708:(e,t,o)=>{o.d(t,{A:()=>z});var n=o(8168),r=o(8587),i=o(6540),a=(o(4363),o(4164)),s=o(5659),l=o(3788),d=o(9329),c=o(6248),u=o(9799),p=o(7167),m=o(6852),f=o(2778),b=o(4848);const h=["actions","autoFocus","autoFocusItem","children","className","disabledItemsFocusable","disableListWrap","onKeyDown","variant"];function g(e,t,o){return e===t?e.firstChild:t&&t.nextElementSibling?t.nextElementSibling:o?null:e.firstChild}function A(e,t,o){return e===t?o?e.firstChild:e.lastChild:t&&t.previousElementSibling?t.previousElementSibling:o?null:e.lastChild}function v(e,t){if(void 0===t)return!0;let o=e.innerText;return void 0===o&&(o=e.textContent),o=o.trim().toLowerCase(),0!==o.length&&(t.repeating?o[0]===t.keys[0]:0===o.indexOf(t.keys.join("")))}function y(e,t,o,n,r,i){let a=!1,s=r(e,t,!!t&&o);for(;s;){if(s===e.firstChild){if(a)return!1;a=!0}const t=!n&&(s.disabled||"true"===s.getAttribute("aria-disabled"));if(s.hasAttribute("tabindex")&&v(s,i)&&!t)return s.focus(),!0;s=r(e,s,o)}return!1}const x=i.forwardRef((function(e,t){const{actions:o,autoFocus:a=!1,autoFocusItem:s=!1,children:l,className:d,disabledItemsFocusable:x=!1,disableListWrap:S=!1,onKeyDown:w,variant:k="selectedMenu"}=e,C=(0,r.A)(e,h),R=i.useRef(null),M=i.useRef({keys:[],repeating:!0,previousKeyMatched:!0,lastTime:null});(0,f.A)((()=>{a&&R.current.focus()}),[a]),i.useImperativeHandle(o,(()=>({adjustStyleForScrollbar:(e,{direction:t})=>{const o=!R.current.style.width;if(e.clientHeight{i.isValidElement(e)?(e.props.disabled||("selectedMenu"===k&&e.props.selected||-1===I)&&(I=t),I===t&&(e.props.disabled||e.props.muiSkipListHighlight||e.type.muiSkipListHighlight)&&(I+=1,I>=l.length&&(I=-1))):I===t&&(I+=1,I>=l.length&&(I=-1))}));const P=i.Children.map(l,((e,t)=>{if(t===I){const t={};return s&&(t.autoFocus=!0),void 0===e.props.tabIndex&&"selectedMenu"===k&&(t.tabIndex=0),i.cloneElement(e,t)}return e}));return(0,b.jsx)(u.A,(0,n.A)({role:"menu",ref:$,className:d,onKeyDown:e=>{const t=R.current,o=e.key,n=(0,c.A)(t).activeElement;if("ArrowDown"===o)e.preventDefault(),y(t,n,S,x,g);else if("ArrowUp"===o)e.preventDefault(),y(t,n,S,x,A);else if("Home"===o)e.preventDefault(),y(t,null,S,x,g);else if("End"===o)e.preventDefault(),y(t,null,S,x,A);else if(1===o.length){const r=M.current,i=o.toLowerCase(),a=performance.now();r.keys.length>0&&(a-r.lastTime>500?(r.keys=[],r.repeating=!0,r.previousKeyMatched=!0):r.repeating&&i!==r.keys[0]&&(r.repeating=!1)),r.lastTime=a,r.keys.push(i);const s=n&&!r.repeating&&v(n,r);r.previousKeyMatched&&(s||y(t,n,!1,x,g,r))?e.preventDefault():r.previousKeyMatched=!1}w&&w(e)},tabIndex:a?0:-1},C,{children:P}))}));var S=o(1749),w=o(1848),k=o(9770),C=o(5669),R=o(8413),M=o(1609);function $(e){return(0,M.Ay)("MuiMenu",e)}(0,R.A)("MuiMenu",["root","paper","list"]);const I=["onEntering"],P=["autoFocus","children","className","disableAutoFocusItem","MenuListProps","onClose","open","PaperProps","PopoverClasses","transitionDuration","TransitionProps","variant","slots","slotProps"],E={vertical:"top",horizontal:"right"},F={vertical:"top",horizontal:"left"},T=(0,w.Ay)(S.Ay,{shouldForwardProp:e=>(0,k.A)(e)||"classes"===e,name:"MuiMenu",slot:"Root",overridesResolver:(e,t)=>t.root})({}),L=(0,w.Ay)(S.IJ,{name:"MuiMenu",slot:"Paper",overridesResolver:(e,t)=>t.paper})({maxHeight:"calc(100% - 96px)",WebkitOverflowScrolling:"touch"}),N=(0,w.Ay)(x,{name:"MuiMenu",slot:"List",overridesResolver:(e,t)=>t.list})({outline:0}),z=i.forwardRef((function(e,t){var o,c;const u=(0,C.b)({props:e,name:"MuiMenu"}),{autoFocus:p=!0,children:m,className:f,disableAutoFocusItem:h=!1,MenuListProps:g={},onClose:A,open:v,PaperProps:y={},PopoverClasses:x,transitionDuration:S="auto",TransitionProps:{onEntering:w}={},variant:k="selectedMenu",slots:R={},slotProps:M={}}=u,z=(0,r.A)(u.TransitionProps,I),B=(0,r.A)(u,P),W=(0,l.I)(),O=(0,n.A)({},u,{autoFocus:p,disableAutoFocusItem:h,MenuListProps:g,onEntering:w,PaperProps:y,transitionDuration:S,TransitionProps:z,variant:k}),j=(e=>{const{classes:t}=e;return(0,s.A)({root:["root"],paper:["paper"],list:["list"]},$,t)})(O),D=p&&!h&&v,q=i.useRef(null);let G=-1;i.Children.map(m,((e,t)=>{i.isValidElement(e)&&(e.props.disabled||("selectedMenu"===k&&e.props.selected||-1===G)&&(G=t))}));const H=null!=(o=R.paper)?o:L,K=null!=(c=M.paper)?c:y,V=(0,d.A)({elementType:R.root,externalSlotProps:M.root,ownerState:O,className:[j.root,f]}),U=(0,d.A)({elementType:H,externalSlotProps:K,ownerState:O,className:j.paper});return(0,b.jsx)(T,(0,n.A)({onClose:A,anchorOrigin:{vertical:"bottom",horizontal:W?"right":"left"},transformOrigin:W?E:F,slots:{paper:H,root:R.root},slotProps:{root:V,paper:U},open:v,ref:t,transitionDuration:S,TransitionProps:(0,n.A)({onEntering:(e,t)=>{q.current&&q.current.adjustStyleForScrollbar(e,{direction:W?"rtl":"ltr"}),w&&w(e,t)}},z),ownerState:O},B,{classes:x,children:(0,b.jsx)(N,(0,n.A)({onKeyDown:e=>{"Tab"===e.key&&(e.preventDefault(),A&&A(e,"tabKeyDown"))},actions:q,autoFocus:p&&(-1===G||h),autoFocusItem:D,variant:k},g,{className:(0,a.A)(j.list,g.className),children:m}))}))}))},5406:(e,t,o)=>{o.d(t,{A:()=>T});var n=o(8587),r=o(8168),i=o(6540),a=o(4164),s=o(5659),l=o(9329),d=o(3524),c=o(5061),u=o(1848),p=o(5669),m=o(7419),f=o(1523),b=o(2325),h=o(1547),g=o(6673),A=o(4959),v=o(4877),y=o(3205);function x(e,t){t?e.setAttribute("aria-hidden","true"):e.removeAttribute("aria-hidden")}function S(e){return parseInt((0,v.A)(e).getComputedStyle(e).paddingRight,10)||0}function w(e,t,o,n,r){const i=[t,o,...n];[].forEach.call(e.children,(e=>{const t=-1===i.indexOf(e),o=!function(e){const t=-1!==["TEMPLATE","SCRIPT","STYLE","LINK","MAP","META","NOSCRIPT","PICTURE","COL","COLGROUP","PARAM","SLOT","SOURCE","TRACK"].indexOf(e.tagName),o="INPUT"===e.tagName&&"hidden"===e.getAttribute("type");return t||o}(e);t&&o&&x(e,r)}))}function k(e,t){let o=-1;return e.some(((e,n)=>!!t(e)&&(o=n,!0))),o}const C=new class{constructor(){this.containers=void 0,this.modals=void 0,this.modals=[],this.containers=[]}add(e,t){let o=this.modals.indexOf(e);if(-1!==o)return o;o=this.modals.length,this.modals.push(e),e.modalRef&&x(e.modalRef,!1);const n=function(e){const t=[];return[].forEach.call(e.children,(e=>{"true"===e.getAttribute("aria-hidden")&&t.push(e)})),t}(t);w(t,e.mount,e.modalRef,n,!0);const r=k(this.containers,(e=>e.container===t));return-1!==r?(this.containers[r].modals.push(e),o):(this.containers.push({modals:[e],container:t,restore:null,hiddenSiblings:n}),o)}mount(e,t){const o=k(this.containers,(t=>-1!==t.modals.indexOf(e))),n=this.containers[o];n.restore||(n.restore=function(e,t){const o=[],n=e.container;if(!t.disableScrollLock){if(function(e){const t=(0,b.A)(e);return t.body===e?(0,v.A)(e).innerWidth>t.documentElement.clientWidth:e.scrollHeight>e.clientHeight}(n)){const e=(0,y.A)((0,b.A)(n));o.push({value:n.style.paddingRight,property:"padding-right",el:n}),n.style.paddingRight=`${S(n)+e}px`;const t=(0,b.A)(n).querySelectorAll(".mui-fixed");[].forEach.call(t,(t=>{o.push({value:t.style.paddingRight,property:"padding-right",el:t}),t.style.paddingRight=`${S(t)+e}px`}))}let e;if(n.parentNode instanceof DocumentFragment)e=(0,b.A)(n).body;else{const t=n.parentElement,o=(0,v.A)(n);e="HTML"===(null==t?void 0:t.nodeName)&&"scroll"===o.getComputedStyle(t).overflowY?t:n}o.push({value:e.style.overflow,property:"overflow",el:e},{value:e.style.overflowX,property:"overflow-x",el:e},{value:e.style.overflowY,property:"overflow-y",el:e}),e.style.overflow="hidden"}return()=>{o.forEach((({value:e,el:t,property:o})=>{e?t.style.setProperty(o,e):t.style.removeProperty(o)}))}}(n,t))}remove(e,t=!0){const o=this.modals.indexOf(e);if(-1===o)return o;const n=k(this.containers,(t=>-1!==t.modals.indexOf(e))),r=this.containers[n];if(r.modals.splice(r.modals.indexOf(e),1),this.modals.splice(o,1),0===r.modals.length)r.restore&&r.restore(),e.modalRef&&x(e.modalRef,t),w(r.container,e.mount,e.modalRef,r.hiddenSiblings,!1),this.containers.splice(n,1);else{const e=r.modals[r.modals.length-1];e.modalRef&&x(e.modalRef,!1)}return o}isTopModal(e){return this.modals.length>0&&this.modals[this.modals.length-1]===e}};var R=o(8413),M=o(1609);function $(e){return(0,M.Ay)("MuiModal",e)}(0,R.A)("MuiModal",["root","hidden","backdrop"]);var I=o(4848);const P=["BackdropComponent","BackdropProps","classes","className","closeAfterTransition","children","container","component","components","componentsProps","disableAutoFocus","disableEnforceFocus","disableEscapeKeyDown","disablePortal","disableRestoreFocus","disableScrollLock","hideBackdrop","keepMounted","onBackdropClick","onClose","onTransitionEnter","onTransitionExited","open","slotProps","slots","theme"],E=(0,u.Ay)("div",{name:"MuiModal",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,!o.open&&o.exited&&t.hidden]}})((({theme:e,ownerState:t})=>(0,r.A)({position:"fixed",zIndex:(e.vars||e).zIndex.modal,right:0,bottom:0,top:0,left:0},!t.open&&t.exited&&{visibility:"hidden"}))),F=(0,u.Ay)(m.A,{name:"MuiModal",slot:"Backdrop",overridesResolver:(e,t)=>t.backdrop})({zIndex:-1}),T=i.forwardRef((function(e,t){var o,u,m,v,y,S;const w=(0,p.b)({name:"MuiModal",props:e}),{BackdropComponent:k=F,BackdropProps:R,className:M,closeAfterTransition:T=!1,children:L,container:N,component:z,components:B={},componentsProps:W={},disableAutoFocus:O=!1,disableEnforceFocus:j=!1,disableEscapeKeyDown:D=!1,disablePortal:q=!1,disableRestoreFocus:G=!1,disableScrollLock:H=!1,hideBackdrop:K=!1,keepMounted:V=!1,onBackdropClick:U,open:X,slotProps:Y,slots:_}=w,J=(0,n.A)(w,P),Q=(0,r.A)({},w,{closeAfterTransition:T,disableAutoFocus:O,disableEnforceFocus:j,disableEscapeKeyDown:D,disablePortal:q,disableRestoreFocus:G,disableScrollLock:H,hideBackdrop:K,keepMounted:V}),{getRootProps:Z,getBackdropProps:ee,getTransitionProps:te,portalRef:oe,isTopModal:ne,exited:re,hasTransition:ie}=function(e){const{container:t,disableEscapeKeyDown:o=!1,disableScrollLock:n=!1,manager:a=C,closeAfterTransition:s=!1,onTransitionEnter:l,onTransitionExited:d,children:c,onClose:u,open:p,rootRef:m}=e,v=i.useRef({}),y=i.useRef(null),S=i.useRef(null),w=(0,f.A)(S,m),[k,R]=i.useState(!p),M=function(e){return!!e&&e.props.hasOwnProperty("in")}(c);let $=!0;"false"!==e["aria-hidden"]&&!1!==e["aria-hidden"]||($=!1);const I=()=>(v.current.modalRef=S.current,v.current.mount=y.current,v.current),P=()=>{a.mount(I(),{disableScrollLock:n}),S.current&&(S.current.scrollTop=0)},E=(0,h.A)((()=>{const e=function(e){return"function"==typeof e?e():e}(t)||(0,b.A)(y.current).body;a.add(I(),e),S.current&&P()})),F=i.useCallback((()=>a.isTopModal(I())),[a]),T=(0,h.A)((e=>{y.current=e,e&&(p&&F()?P():S.current&&x(S.current,$))})),L=i.useCallback((()=>{a.remove(I(),$)}),[$,a]);i.useEffect((()=>()=>{L()}),[L]),i.useEffect((()=>{p?E():M&&s||L()}),[p,L,M,s,E]);const N=e=>t=>{var n;null==(n=e.onKeyDown)||n.call(e,t),"Escape"===t.key&&229!==t.which&&F()&&(o||(t.stopPropagation(),u&&u(t,"escapeKeyDown")))},z=e=>t=>{var o;null==(o=e.onClick)||o.call(e,t),t.target===t.currentTarget&&u&&u(t,"backdropClick")};return{getRootProps:(t={})=>{const o=(0,A.A)(e);delete o.onTransitionEnter,delete o.onTransitionExited;const n=(0,r.A)({},o,t);return(0,r.A)({role:"presentation"},n,{onKeyDown:N(n),ref:w})},getBackdropProps:(e={})=>{const t=e;return(0,r.A)({"aria-hidden":!0},t,{onClick:z(t),open:p})},getTransitionProps:()=>({onEnter:(0,g.A)((()=>{R(!1),l&&l()}),null==c?void 0:c.props.onEnter),onExited:(0,g.A)((()=>{R(!0),d&&d(),s&&L()}),null==c?void 0:c.props.onExited)}),rootRef:w,portalRef:T,isTopModal:F,exited:k,hasTransition:M}}((0,r.A)({},Q,{rootRef:t})),ae=(0,r.A)({},Q,{exited:re}),se=(e=>{const{open:t,exited:o,classes:n}=e,r={root:["root",!t&&o&&"hidden"],backdrop:["backdrop"]};return(0,s.A)(r,$,n)})(ae),le={};if(void 0===L.props.tabIndex&&(le.tabIndex="-1"),ie){const{onEnter:e,onExited:t}=te();le.onEnter=e,le.onExited=t}const de=null!=(o=null!=(u=null==_?void 0:_.root)?u:B.Root)?o:E,ce=null!=(m=null!=(v=null==_?void 0:_.backdrop)?v:B.Backdrop)?m:k,ue=null!=(y=null==Y?void 0:Y.root)?y:W.root,pe=null!=(S=null==Y?void 0:Y.backdrop)?S:W.backdrop,me=(0,l.A)({elementType:de,externalSlotProps:ue,externalForwardedProps:J,getSlotProps:Z,additionalProps:{ref:t,as:z},ownerState:ae,className:(0,a.A)(M,null==ue?void 0:ue.className,null==se?void 0:se.root,!ae.open&&ae.exited&&(null==se?void 0:se.hidden))}),fe=(0,l.A)({elementType:ce,externalSlotProps:pe,additionalProps:R,getSlotProps:e=>ee((0,r.A)({},e,{onClick:t=>{U&&U(t),null!=e&&e.onClick&&e.onClick(t)}})),className:(0,a.A)(null==pe?void 0:pe.className,null==R?void 0:R.className,null==se?void 0:se.backdrop),ownerState:ae});return V||X||ie&&!re?(0,I.jsx)(c.A,{ref:oe,container:N,disablePortal:q,children:(0,I.jsxs)(de,(0,r.A)({},me,{children:[!K&&k?(0,I.jsx)(ce,(0,r.A)({},fe)):null,(0,I.jsx)(d.A,{disableEnforceFocus:j,disableAutoFocus:O,disableRestoreFocus:G,isEnabled:ne,open:X,children:i.cloneElement(L,le)})]}))}):null}))}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QWdCckcsR0FBVTRHLEtBQWlCeEIsSUFHNUIsU0FBSzZELEVBQUEsRUFBUSxDQUMvQjFrQixJQUFLb2lCLEdBQ0xqYixVQUFXQSxFQUNYd2EsY0FBZUEsRUFDZnBmLFVBQXVCLFVBQU1qQixJQUFVLE9BQVMsQ0FBQyxFQUFHbVEsR0FBVyxDQUM3RGxQLFNBQVUsRUFBRXNmLEdBQWdCUixHQUFpQyxTQUFLOEMsSUFBYyxPQUFTLENBQUMsRUFBR0ssS0FBa0IsTUFBbUIsU0FBS0csRUFBQSxFQUFXLENBQ2hKbEQsb0JBQXFCQSxFQUNyQkQsaUJBQWtCQSxFQUNsQkksb0JBQXFCQSxFQUNyQmdELFVBQVdsRSxHQUNYakYsS0FBTUEsRUFDTmxaLFNBQXVCLGVBQW1CQSxFQUFVMkssWUFiakQsSUFpQlgsRyIsInNvdXJjZXMiOlsid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0ZpbGxlZElucHV0L2ZpbGxlZElucHV0Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9GaWxsZWRJbnB1dC9GaWxsZWRJbnB1dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2wvRm9ybUNvbnRyb2wuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2wvRm9ybUNvbnRyb2xDb250ZXh0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sU3RhdGUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUhlbHBlclRleHQvZm9ybUhlbHBlclRleHRDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1IZWxwZXJUZXh0L0Zvcm1IZWxwZXJUZXh0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0dsb2JhbFN0eWxlcy9HbG9iYWxTdHlsZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvR3JpZC9HcmlkQ29udGV4dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9HcmlkL2dyaWRDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0dyaWQvR3JpZC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Hcm93L0dyb3cuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvSW5wdXQvaW5wdXRDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0lucHV0L0lucHV0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0lucHV0QmFzZS9JbnB1dEJhc2UuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvSW5wdXRCYXNlL2lucHV0QmFzZUNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvSW5wdXRCYXNlL3V0aWxzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1MYWJlbC9mb3JtTGFiZWxDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1MYWJlbC9Gb3JtTGFiZWwuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvSW5wdXRMYWJlbC9pbnB1dExhYmVsQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dExhYmVsL0lucHV0TGFiZWwuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTGlzdC9saXN0Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9MaXN0L0xpc3QuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTGlzdC9MaXN0Q29udGV4dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9MaXN0SXRlbS9saXN0SXRlbUNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24vbGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb25DbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uL0xpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3RJdGVtL0xpc3RJdGVtLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3RJdGVtQnV0dG9uL0xpc3RJdGVtQnV0dG9uLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3RJdGVtQnV0dG9uL2xpc3RJdGVtQnV0dG9uQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9NZW51TGlzdC9NZW51TGlzdC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9NZW51L21lbnVDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL01lbnUvTWVudS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Nb2RhbC9Nb2RhbE1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTW9kYWwvdXNlTW9kYWwuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTW9kYWwvbW9kYWxDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL01vZGFsL01vZGFsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmltcG9ydCB7IGlucHV0QmFzZUNsYXNzZXMgfSBmcm9tICcuLi9JbnB1dEJhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGxlZElucHV0VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlGaWxsZWRJbnB1dCcsIHNsb3QpO1xufVxuY29uc3QgZmlsbGVkSW5wdXRDbGFzc2VzID0gX2V4dGVuZHMoe30sIGlucHV0QmFzZUNsYXNzZXMsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZpbGxlZElucHV0JywgWydyb290JywgJ3VuZGVybGluZScsICdpbnB1dCddKSk7XG5leHBvcnQgZGVmYXVsdCBmaWxsZWRJbnB1dENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiZGlzYWJsZVVuZGVybGluZVwiLCBcImNvbXBvbmVudHNcIiwgXCJjb21wb25lbnRzUHJvcHNcIiwgXCJmdWxsV2lkdGhcIiwgXCJoaWRkZW5MYWJlbFwiLCBcImlucHV0Q29tcG9uZW50XCIsIFwibXVsdGlsaW5lXCIsIFwic2xvdFByb3BzXCIsIFwic2xvdHNcIiwgXCJ0eXBlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5pbXBvcnQgcmVmVHlwZSBmcm9tICdAbXVpL3V0aWxzL3JlZlR5cGUnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBJbnB1dEJhc2UgZnJvbSAnLi4vSW5wdXRCYXNlJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgZmlsbGVkSW5wdXRDbGFzc2VzLCB7IGdldEZpbGxlZElucHV0VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9maWxsZWRJbnB1dENsYXNzZXMnO1xuaW1wb3J0IHsgcm9vdE92ZXJyaWRlc1Jlc29sdmVyIGFzIGlucHV0QmFzZVJvb3RPdmVycmlkZXNSZXNvbHZlciwgaW5wdXRPdmVycmlkZXNSZXNvbHZlciBhcyBpbnB1dEJhc2VJbnB1dE92ZXJyaWRlc1Jlc29sdmVyLCBJbnB1dEJhc2VSb290LCBJbnB1dEJhc2VDb21wb25lbnQgYXMgSW5wdXRCYXNlSW5wdXQgfSBmcm9tICcuLi9JbnB1dEJhc2UvSW5wdXRCYXNlJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlVW5kZXJsaW5lXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCAhZGlzYWJsZVVuZGVybGluZSAmJiAndW5kZXJsaW5lJ10sXG4gICAgaW5wdXQ6IFsnaW5wdXQnXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0RmlsbGVkSW5wdXRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VkQ2xhc3Nlcyk7XG59O1xuY29uc3QgRmlsbGVkSW5wdXRSb290ID0gc3R5bGVkKElucHV0QmFzZVJvb3QsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aUZpbGxlZElucHV0JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbLi4uaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyKHByb3BzLCBzdHlsZXMpLCAhb3duZXJTdGF0ZS5kaXNhYmxlVW5kZXJsaW5lICYmIHN0eWxlcy51bmRlcmxpbmVdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICB2YXIgX3BhbGV0dGU7XG4gIGNvbnN0IGxpZ2h0ID0gdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnO1xuICBjb25zdCBib3R0b21MaW5lQ29sb3IgPSBsaWdodCA/ICdyZ2JhKDAsIDAsIDAsIDAuNDIpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknO1xuICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSBsaWdodCA/ICdyZ2JhKDAsIDAsIDAsIDAuMDYpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDkpJztcbiAgY29uc3QgaG92ZXJCYWNrZ3JvdW5kID0gbGlnaHQgPyAncmdiYSgwLCAwLCAwLCAwLjA5KScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEzKSc7XG4gIGNvbnN0IGRpc2FibGVkQmFja2dyb3VuZCA9IGxpZ2h0ID8gJ3JnYmEoMCwgMCwgMCwgMC4xMiknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknO1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5GaWxsZWRJbnB1dC5iZyA6IGJhY2tncm91bmRDb2xvcixcbiAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzLFxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzLFxuICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnYmFja2dyb3VuZC1jb2xvcicsIHtcbiAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyLFxuICAgICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICAgIH0pLFxuICAgICcmOmhvdmVyJzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gdGhlbWUudmFycy5wYWxldHRlLkZpbGxlZElucHV0LmhvdmVyQmcgOiBob3ZlckJhY2tncm91bmQsXG4gICAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuRmlsbGVkSW5wdXQuYmcgOiBiYWNrZ3JvdW5kQ29sb3JcbiAgICAgIH1cbiAgICB9LFxuICAgIFtgJi4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5mb2N1c2VkfWBdOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuRmlsbGVkSW5wdXQuYmcgOiBiYWNrZ3JvdW5kQ29sb3JcbiAgICB9LFxuICAgIFtgJi4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gdGhlbWUudmFycy5wYWxldHRlLkZpbGxlZElucHV0LmRpc2FibGVkQmcgOiBkaXNhYmxlZEJhY2tncm91bmRcbiAgICB9XG4gIH0sICFvd25lclN0YXRlLmRpc2FibGVVbmRlcmxpbmUgJiYge1xuICAgICcmOjphZnRlcic6IHtcbiAgICAgIGJvcmRlckJvdHRvbTogYDJweCBzb2xpZCAkeyhfcGFsZXR0ZSA9ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3IgfHwgJ3ByaW1hcnknXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYWxldHRlLm1haW59YCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICBib3R0b206IDAsXG4gICAgICAvLyBEb2luZyB0aGUgb3RoZXIgd2F5IGFyb3VuZCBjcmFzaCBvbiBJRTExIFwiJydcIiBodHRwczovL2dpdGh1Yi5jb20vY3NzaW5qcy9qc3MvaXNzdWVzLzI0MlxuICAgICAgY29udGVudDogJ1wiXCInLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICByaWdodDogMCxcbiAgICAgIHRyYW5zZm9ybTogJ3NjYWxlWCgwKScsXG4gICAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3RyYW5zZm9ybScsIHtcbiAgICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXIsXG4gICAgICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VPdXRcbiAgICAgIH0pLFxuICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnIC8vIFRyYW5zcGFyZW50IHRvIHRoZSBob3ZlciBzdHlsZS5cbiAgICB9LFxuICAgIFtgJi4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5mb2N1c2VkfTphZnRlcmBdOiB7XG4gICAgICAvLyB0cmFuc2xhdGVYKDApIGlzIGEgd29ya2Fyb3VuZCBmb3IgU2FmYXJpIHRyYW5zZm9ybSBzY2FsZSBidWdcbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL2lzc3Vlcy8zMTc2NlxuICAgICAgdHJhbnNmb3JtOiAnc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCknXG4gICAgfSxcbiAgICBbYCYuJHtmaWxsZWRJbnB1dENsYXNzZXMuZXJyb3J9YF06IHtcbiAgICAgICcmOjpiZWZvcmUsICY6OmFmdGVyJzoge1xuICAgICAgICBib3JkZXJCb3R0b21Db2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZXJyb3IubWFpblxuICAgICAgfVxuICAgIH0sXG4gICAgJyY6OmJlZm9yZSc6IHtcbiAgICAgIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAke3RoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5jb21tb24ub25CYWNrZ3JvdW5kQ2hhbm5lbH0gLyAke3RoZW1lLnZhcnMub3BhY2l0eS5pbnB1dFVuZGVybGluZX0pYCA6IGJvdHRvbUxpbmVDb2xvcn1gLFxuICAgICAgbGVmdDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIC8vIERvaW5nIHRoZSBvdGhlciB3YXkgYXJvdW5kIGNyYXNoIG9uIElFMTEgXCInJ1wiIGh0dHBzOi8vZ2l0aHViLmNvbS9jc3NpbmpzL2pzcy9pc3N1ZXMvMjQyXG4gICAgICBjb250ZW50OiAnXCJcXFxcMDBhMFwiJyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgcmlnaHQ6IDAsXG4gICAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ2JvcmRlci1ib3R0b20tY29sb3InLCB7XG4gICAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyXG4gICAgICB9KSxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyAvLyBUcmFuc3BhcmVudCB0byB0aGUgaG92ZXIgc3R5bGUuXG4gICAgfSxcbiAgICBbYCY6aG92ZXI6bm90KC4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5kaXNhYmxlZH0sIC4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5lcnJvcn0pOmJlZm9yZWBdOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAxcHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnByaW1hcnl9YFxuICAgIH0sXG4gICAgW2AmLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmRpc2FibGVkfTpiZWZvcmVgXToge1xuICAgICAgYm9yZGVyQm90dG9tU3R5bGU6ICdkb3R0ZWQnXG4gICAgfVxuICB9LCBvd25lclN0YXRlLnN0YXJ0QWRvcm5tZW50ICYmIHtcbiAgICBwYWRkaW5nTGVmdDogMTJcbiAgfSwgb3duZXJTdGF0ZS5lbmRBZG9ybm1lbnQgJiYge1xuICAgIHBhZGRpbmdSaWdodDogMTJcbiAgfSwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYgX2V4dGVuZHMoe1xuICAgIHBhZGRpbmc6ICcyNXB4IDEycHggOHB4J1xuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICAgIHBhZGRpbmdUb3A6IDIxLFxuICAgIHBhZGRpbmdCb3R0b206IDRcbiAgfSwgb3duZXJTdGF0ZS5oaWRkZW5MYWJlbCAmJiB7XG4gICAgcGFkZGluZ1RvcDogMTYsXG4gICAgcGFkZGluZ0JvdHRvbTogMTdcbiAgfSwgb3duZXJTdGF0ZS5oaWRkZW5MYWJlbCAmJiBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICAgIHBhZGRpbmdUb3A6IDgsXG4gICAgcGFkZGluZ0JvdHRvbTogOVxuICB9KSk7XG59KTtcbmNvbnN0IEZpbGxlZElucHV0SW5wdXQgPSBzdHlsZWQoSW5wdXRCYXNlSW5wdXQsIHtcbiAgbmFtZTogJ011aUZpbGxlZElucHV0JyxcbiAgc2xvdDogJ0lucHV0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IGlucHV0QmFzZUlucHV0T3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHBhZGRpbmdUb3A6IDI1LFxuICBwYWRkaW5nUmlnaHQ6IDEyLFxuICBwYWRkaW5nQm90dG9tOiA4LFxuICBwYWRkaW5nTGVmdDogMTJcbn0sICF0aGVtZS52YXJzICYmIHtcbiAgJyY6LXdlYmtpdC1hdXRvZmlsbCc6IHtcbiAgICBXZWJraXRCb3hTaGFkb3c6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IG51bGwgOiAnMCAwIDAgMTAwcHggIzI2Njc5OCBpbnNldCcsXG4gICAgV2Via2l0VGV4dEZpbGxDb2xvcjogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gbnVsbCA6ICcjZmZmJyxcbiAgICBjYXJldENvbG9yOiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyBudWxsIDogJyNmZmYnLFxuICAgIGJvcmRlclRvcExlZnRSYWRpdXM6ICdpbmhlcml0JyxcbiAgICBib3JkZXJUb3BSaWdodFJhZGl1czogJ2luaGVyaXQnXG4gIH1cbn0sIHRoZW1lLnZhcnMgJiYge1xuICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgIGJvcmRlclRvcExlZnRSYWRpdXM6ICdpbmhlcml0JyxcbiAgICBib3JkZXJUb3BSaWdodFJhZGl1czogJ2luaGVyaXQnXG4gIH0sXG4gIFt0aGVtZS5nZXRDb2xvclNjaGVtZVNlbGVjdG9yKCdkYXJrJyldOiB7XG4gICAgJyY6LXdlYmtpdC1hdXRvZmlsbCc6IHtcbiAgICAgIFdlYmtpdEJveFNoYWRvdzogJzAgMCAwIDEwMHB4ICMyNjY3OTggaW5zZXQnLFxuICAgICAgV2Via2l0VGV4dEZpbGxDb2xvcjogJyNmZmYnLFxuICAgICAgY2FyZXRDb2xvcjogJyNmZmYnXG4gICAgfVxuICB9XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBwYWRkaW5nVG9wOiAyMSxcbiAgcGFkZGluZ0JvdHRvbTogNFxufSwgb3duZXJTdGF0ZS5oaWRkZW5MYWJlbCAmJiB7XG4gIHBhZGRpbmdUb3A6IDE2LFxuICBwYWRkaW5nQm90dG9tOiAxN1xufSwgb3duZXJTdGF0ZS5zdGFydEFkb3JubWVudCAmJiB7XG4gIHBhZGRpbmdMZWZ0OiAwXG59LCBvd25lclN0YXRlLmVuZEFkb3JubWVudCAmJiB7XG4gIHBhZGRpbmdSaWdodDogMFxufSwgb3duZXJTdGF0ZS5oaWRkZW5MYWJlbCAmJiBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBwYWRkaW5nVG9wOiA4LFxuICBwYWRkaW5nQm90dG9tOiA5XG59LCBvd25lclN0YXRlLm11bHRpbGluZSAmJiB7XG4gIHBhZGRpbmdUb3A6IDAsXG4gIHBhZGRpbmdCb3R0b206IDAsXG4gIHBhZGRpbmdMZWZ0OiAwLFxuICBwYWRkaW5nUmlnaHQ6IDBcbn0pKTtcbmNvbnN0IEZpbGxlZElucHV0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRmlsbGVkSW5wdXQoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfcmVmLCBfc2xvdHMkcm9vdCwgX3JlZjIsIF9zbG90cyRpbnB1dDtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGaWxsZWRJbnB1dCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICAgIGNvbXBvbmVudHNQcm9wczogY29tcG9uZW50c1Byb3BzUHJvcCxcbiAgICAgIGZ1bGxXaWR0aCA9IGZhbHNlLFxuICAgICAgLy8gZGVjbGFyZSBoZXJlIHRvIHByZXZlbnQgc3ByZWFkaW5nIHRvIERPTVxuICAgICAgaW5wdXRDb21wb25lbnQgPSAnaW5wdXQnLFxuICAgICAgbXVsdGlsaW5lID0gZmFsc2UsXG4gICAgICBzbG90UHJvcHMsXG4gICAgICBzbG90cyA9IHt9LFxuICAgICAgdHlwZSA9ICd0ZXh0J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZnVsbFdpZHRoLFxuICAgIGlucHV0Q29tcG9uZW50LFxuICAgIG11bHRpbGluZSxcbiAgICB0eXBlXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMocHJvcHMpO1xuICBjb25zdCBmaWxsZWRJbnB1dENvbXBvbmVudHNQcm9wcyA9IHtcbiAgICByb290OiB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSxcbiAgICBpbnB1dDoge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH1cbiAgfTtcbiAgY29uc3QgY29tcG9uZW50c1Byb3BzID0gKHNsb3RQcm9wcyAhPSBudWxsID8gc2xvdFByb3BzIDogY29tcG9uZW50c1Byb3BzUHJvcCkgPyBkZWVwbWVyZ2UoZmlsbGVkSW5wdXRDb21wb25lbnRzUHJvcHMsIHNsb3RQcm9wcyAhPSBudWxsID8gc2xvdFByb3BzIDogY29tcG9uZW50c1Byb3BzUHJvcCkgOiBmaWxsZWRJbnB1dENvbXBvbmVudHNQcm9wcztcbiAgY29uc3QgUm9vdFNsb3QgPSAoX3JlZiA9IChfc2xvdHMkcm9vdCA9IHNsb3RzLnJvb3QpICE9IG51bGwgPyBfc2xvdHMkcm9vdCA6IGNvbXBvbmVudHMuUm9vdCkgIT0gbnVsbCA/IF9yZWYgOiBGaWxsZWRJbnB1dFJvb3Q7XG4gIGNvbnN0IElucHV0U2xvdCA9IChfcmVmMiA9IChfc2xvdHMkaW5wdXQgPSBzbG90cy5pbnB1dCkgIT0gbnVsbCA/IF9zbG90cyRpbnB1dCA6IGNvbXBvbmVudHMuSW5wdXQpICE9IG51bGwgPyBfcmVmMiA6IEZpbGxlZElucHV0SW5wdXQ7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dEJhc2UsIF9leHRlbmRzKHtcbiAgICBzbG90czoge1xuICAgICAgcm9vdDogUm9vdFNsb3QsXG4gICAgICBpbnB1dDogSW5wdXRTbG90XG4gICAgfSxcbiAgICBjb21wb25lbnRzUHJvcHM6IGNvbXBvbmVudHNQcm9wcyxcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICBpbnB1dENvbXBvbmVudDogaW5wdXRDb21wb25lbnQsXG4gICAgbXVsdGlsaW5lOiBtdWx0aWxpbmUsXG4gICAgcmVmOiByZWYsXG4gICAgdHlwZTogdHlwZVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXNcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGaWxsZWRJbnB1dC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgaGVscHMgdXNlcnMgdG8gZmlsbCBmb3JtcyBmYXN0ZXIsIGVzcGVjaWFsbHkgb24gbW9iaWxlIGRldmljZXMuXG4gICAqIFRoZSBuYW1lIGNhbiBiZSBjb25mdXNpbmcsIGFzIGl0J3MgbW9yZSBsaWtlIGFuIGF1dG9maWxsLlxuICAgKiBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgaXQgW2ZvbGxvd2luZyB0aGUgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybS1jb250cm9sLWluZnJhc3RydWN0dXJlLmh0bWwjYXV0b2ZpbGwpLlxuICAgKi9cbiAgYXV0b0NvbXBsZXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ3ByaW1hcnknYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeSddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RzYCBwcm9wIGluc3RlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIElucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90UHJvcHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdFByb3BzYCBwcm9wIGluc3RlYWQsIGFzIGBjb21wb25lbnRzUHJvcHNgIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50c1Byb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGlucHV0IHdpbGwgbm90IGhhdmUgYW4gdW5kZXJsaW5lLlxuICAgKi9cbiAgZGlzYWJsZVVuZGVybGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBFbmQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBlbmRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBoaWRkZW4uXG4gICAqIFRoaXMgaXMgdXNlZCB0byBpbmNyZWFzZSBkZW5zaXR5IGZvciBhIGBGaWxsZWRJbnB1dGAuXG4gICAqIEJlIHN1cmUgdG8gYWRkIGBhcmlhLWxhYmVsYCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaGlkZGVuTGFiZWw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ2lucHV0J1xuICAgKi9cbiAgaW5wdXRDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFtBdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjQXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZy4gVGhpcyBpcyBub3JtYWxseSBvYnRhaW5lZCB2aWEgY29udGV4dCBmcm9tXG4gICAqIEZvcm1Db250cm9sLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAnbm9uZSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAnbm9uZSddKSxcbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtYXhSb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWluUm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIFtUZXh0YXJlYUF1dG9zaXplXSgvbWF0ZXJpYWwtdWkvcmVhY3QtdGV4dGFyZWEtYXV0b3NpemUvKSBlbGVtZW50IGlzIHJlbmRlcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbXVsdGlsaW5lOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE5hbWUgYXR0cmlidXRlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgdmFsdWUgaXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5DaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50IHwgSFRNTElucHV0RWxlbWVudD59IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChzdHJpbmcpLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIHNob3J0IGhpbnQgZGlzcGxheWVkIGluIHRoZSBgaW5wdXRgIGJlZm9yZSB0aGUgdXNlciBlbnRlcnMgYSB2YWx1ZS5cbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSXQgcHJldmVudHMgdGhlIHVzZXIgZnJvbSBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkXG4gICAqIChub3QgZnJvbSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmaWVsZCkuXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgcmVxdWlyZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIHJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c1Byb3BzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBTdGFydCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIHN0YXJ0QWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC4gSXQgc2hvdWxkIGJlIFthIHZhbGlkIEhUTUw1IGlucHV0IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNGb3JtXyUzQ2lucHV0JTNFX3R5cGVzKS5cbiAgICogQGRlZmF1bHQgJ3RleHQnXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQsIHJlcXVpcmVkIGZvciBhIGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5GaWxsZWRJbnB1dC5tdWlOYW1lID0gJ0lucHV0JztcbmV4cG9ydCBkZWZhdWx0IEZpbGxlZElucHV0OyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpRm9ybUNvbnRyb2wnLCBzbG90KTtcbn1cbmNvbnN0IGZvcm1Db250cm9sQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZvcm1Db250cm9sJywgWydyb290JywgJ21hcmdpbk5vbmUnLCAnbWFyZ2luTm9ybWFsJywgJ21hcmdpbkRlbnNlJywgJ2Z1bGxXaWR0aCcsICdkaXNhYmxlZCddKTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1Db250cm9sQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50XCIsIFwiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcImZvY3VzZWRcIiwgXCJmdWxsV2lkdGhcIiwgXCJoaWRkZW5MYWJlbFwiLCBcIm1hcmdpblwiLCBcInJlcXVpcmVkXCIsIFwic2l6ZVwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgaXNGaWxsZWQsIGlzQWRvcm5lZFN0YXJ0IH0gZnJvbSAnLi4vSW5wdXRCYXNlL3V0aWxzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IGlzTXVpRWxlbWVudCBmcm9tICcuLi91dGlscy9pc011aUVsZW1lbnQnO1xuaW1wb3J0IEZvcm1Db250cm9sQ29udGV4dCBmcm9tICcuL0Zvcm1Db250cm9sQ29udGV4dCc7XG5pbXBvcnQgeyBnZXRGb3JtQ29udHJvbFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9mb3JtQ29udHJvbENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIG1hcmdpbixcbiAgICBmdWxsV2lkdGhcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIG1hcmdpbiAhPT0gJ25vbmUnICYmIGBtYXJnaW4ke2NhcGl0YWxpemUobWFyZ2luKX1gLCBmdWxsV2lkdGggJiYgJ2Z1bGxXaWR0aCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgRm9ybUNvbnRyb2xSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlGb3JtQ29udHJvbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6ICh7XG4gICAgb3duZXJTdGF0ZVxuICB9LCBzdHlsZXMpID0+IHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0eWxlcy5yb290LCBzdHlsZXNbYG1hcmdpbiR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLm1hcmdpbil9YF0sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHN0eWxlcy5mdWxsV2lkdGgpO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgLy8gUmVzZXQgZmllbGRzZXQgZGVmYXVsdCBzdHlsZS5cbiAgbWluV2lkdGg6IDAsXG4gIHBhZGRpbmc6IDAsXG4gIG1hcmdpbjogMCxcbiAgYm9yZGVyOiAwLFxuICB2ZXJ0aWNhbEFsaWduOiAndG9wJ1xufSwgb3duZXJTdGF0ZS5tYXJnaW4gPT09ICdub3JtYWwnICYmIHtcbiAgbWFyZ2luVG9wOiAxNixcbiAgbWFyZ2luQm90dG9tOiA4XG59LCBvd25lclN0YXRlLm1hcmdpbiA9PT0gJ2RlbnNlJyAmJiB7XG4gIG1hcmdpblRvcDogOCxcbiAgbWFyZ2luQm90dG9tOiA0XG59LCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiB7XG4gIHdpZHRoOiAnMTAwJSdcbn0pKTtcblxuLyoqXG4gKiBQcm92aWRlcyBjb250ZXh0IHN1Y2ggYXMgZmlsbGVkL2ZvY3VzZWQvZXJyb3IvcmVxdWlyZWQgZm9yIGZvcm0gaW5wdXRzLlxuICogUmVseWluZyBvbiB0aGUgY29udGV4dCBwcm92aWRlcyBoaWdoIGZsZXhpYmlsaXR5IGFuZCBlbnN1cmVzIHRoYXQgdGhlIHN0YXRlIGFsd2F5cyBzdGF5c1xuICogY29uc2lzdGVudCBhY3Jvc3MgdGhlIGNoaWxkcmVuIG9mIHRoZSBgRm9ybUNvbnRyb2xgLlxuICogVGhpcyBjb250ZXh0IGlzIHVzZWQgYnkgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOlxuICpcbiAqICAtIEZvcm1MYWJlbFxuICogIC0gRm9ybUhlbHBlclRleHRcbiAqICAtIElucHV0XG4gKiAgLSBJbnB1dExhYmVsXG4gKlxuICogWW91IGNhbiBmaW5kIG9uZSBjb21wb3NpdGlvbiBleGFtcGxlIGJlbG93IGFuZCBtb3JlIGdvaW5nIHRvIFt0aGUgZGVtb3NdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0LWZpZWxkLyNjb21wb25lbnRzKS5cbiAqXG4gKiBgYGBqc3hcbiAqIDxGb3JtQ29udHJvbD5cbiAqICAgPElucHV0TGFiZWwgaHRtbEZvcj1cIm15LWlucHV0XCI+RW1haWwgYWRkcmVzczwvSW5wdXRMYWJlbD5cbiAqICAgPElucHV0IGlkPVwibXktaW5wdXRcIiBhcmlhLWRlc2NyaWJlZGJ5PVwibXktaGVscGVyLXRleHRcIiAvPlxuICogICA8Rm9ybUhlbHBlclRleHQgaWQ9XCJteS1oZWxwZXItdGV4dFwiPldlJ2xsIG5ldmVyIHNoYXJlIHlvdXIgZW1haWwuPC9Gb3JtSGVscGVyVGV4dD5cbiAqIDwvRm9ybUNvbnRyb2w+XG4gKiBgYGBcbiAqXG4gKiDimqDvuI8gT25seSBvbmUgYElucHV0QmFzZWAgY2FuIGJlIHVzZWQgd2l0aGluIGEgRm9ybUNvbnRyb2wgYmVjYXVzZSBpdCBjcmVhdGVzIHZpc3VhbCBpbmNvbnNpc3RlbmNpZXMuXG4gKiBGb3IgaW5zdGFuY2UsIG9ubHkgb25lIGlucHV0IGNhbiBiZSBmb2N1c2VkIGF0IHRoZSBzYW1lIHRpbWUsIHRoZSBzdGF0ZSBzaG91bGRuJ3QgYmUgc2hhcmVkLlxuICovXG5jb25zdCBGb3JtQ29udHJvbCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZvcm1Db250cm9sKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUZvcm1Db250cm9sJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb2xvciA9ICdwcmltYXJ5JyxcbiAgICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgIGVycm9yID0gZmFsc2UsXG4gICAgICBmb2N1c2VkOiB2aXN1YWxseUZvY3VzZWQsXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIGhpZGRlbkxhYmVsID0gZmFsc2UsXG4gICAgICBtYXJnaW4gPSAnbm9uZScsXG4gICAgICByZXF1aXJlZCA9IGZhbHNlLFxuICAgICAgc2l6ZSA9ICdtZWRpdW0nLFxuICAgICAgdmFyaWFudCA9ICdvdXRsaW5lZCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIGNvbXBvbmVudCxcbiAgICBkaXNhYmxlZCxcbiAgICBlcnJvcixcbiAgICBmdWxsV2lkdGgsXG4gICAgaGlkZGVuTGFiZWwsXG4gICAgbWFyZ2luLFxuICAgIHJlcXVpcmVkLFxuICAgIHNpemUsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBbYWRvcm5lZFN0YXJ0LCBzZXRBZG9ybmVkU3RhcnRdID0gUmVhY3QudXNlU3RhdGUoKCkgPT4ge1xuICAgIC8vIFdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgZmluZCB0aGUgSW5wdXQgaW4gb3JkZXJcbiAgICAvLyB0byBmdWxseSBzdXBwb3J0IHNlcnZlci1zaWRlIHJlbmRlcmluZy5cbiAgICBsZXQgaW5pdGlhbEFkb3JuZWRTdGFydCA9IGZhbHNlO1xuICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgICAgICBpZiAoIWlzTXVpRWxlbWVudChjaGlsZCwgWydJbnB1dCcsICdTZWxlY3QnXSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5wdXQgPSBpc011aUVsZW1lbnQoY2hpbGQsIFsnU2VsZWN0J10pID8gY2hpbGQucHJvcHMuaW5wdXQgOiBjaGlsZDtcbiAgICAgICAgaWYgKGlucHV0ICYmIGlzQWRvcm5lZFN0YXJ0KGlucHV0LnByb3BzKSkge1xuICAgICAgICAgIGluaXRpYWxBZG9ybmVkU3RhcnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGluaXRpYWxBZG9ybmVkU3RhcnQ7XG4gIH0pO1xuICBjb25zdCBbZmlsbGVkLCBzZXRGaWxsZWRdID0gUmVhY3QudXNlU3RhdGUoKCkgPT4ge1xuICAgIC8vIFdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgZmluZCB0aGUgSW5wdXQgaW4gb3JkZXJcbiAgICAvLyB0byBmdWxseSBzdXBwb3J0IHNlcnZlci1zaWRlIHJlbmRlcmluZy5cbiAgICBsZXQgaW5pdGlhbEZpbGxlZCA9IGZhbHNlO1xuICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgICAgICBpZiAoIWlzTXVpRWxlbWVudChjaGlsZCwgWydJbnB1dCcsICdTZWxlY3QnXSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRmlsbGVkKGNoaWxkLnByb3BzLCB0cnVlKSB8fCBpc0ZpbGxlZChjaGlsZC5wcm9wcy5pbnB1dFByb3BzLCB0cnVlKSkge1xuICAgICAgICAgIGluaXRpYWxGaWxsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGluaXRpYWxGaWxsZWQ7XG4gIH0pO1xuICBjb25zdCBbZm9jdXNlZFN0YXRlLCBzZXRGb2N1c2VkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgaWYgKGRpc2FibGVkICYmIGZvY3VzZWRTdGF0ZSkge1xuICAgIHNldEZvY3VzZWQoZmFsc2UpO1xuICB9XG4gIGNvbnN0IGZvY3VzZWQgPSB2aXN1YWxseUZvY3VzZWQgIT09IHVuZGVmaW5lZCAmJiAhZGlzYWJsZWQgPyB2aXN1YWxseUZvY3VzZWQgOiBmb2N1c2VkU3RhdGU7XG4gIGxldCByZWdpc3RlckVmZmVjdDtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBjb25zdCByZWdpc3RlcmVkSW5wdXQgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICAgIHJlZ2lzdGVyRWZmZWN0ID0gKCkgPT4ge1xuICAgICAgaWYgKHJlZ2lzdGVyZWRJbnB1dC5jdXJyZW50KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFRoZXJlIGFyZSBtdWx0aXBsZSBgSW5wdXRCYXNlYCBjb21wb25lbnRzIGluc2lkZSBhIEZvcm1Db250cm9sLicsICdUaGlzIGNyZWF0ZXMgdmlzdWFsIGluY29uc2lzdGVuY2llcywgb25seSB1c2Ugb25lIGBJbnB1dEJhc2VgLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICAgIHJlZ2lzdGVyZWRJbnB1dC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHJlZ2lzdGVyZWRJbnB1dC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9O1xuICAgIH07XG4gIH1cbiAgY29uc3QgY2hpbGRDb250ZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFkb3JuZWRTdGFydCxcbiAgICAgIHNldEFkb3JuZWRTdGFydCxcbiAgICAgIGNvbG9yLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBlcnJvcixcbiAgICAgIGZpbGxlZCxcbiAgICAgIGZvY3VzZWQsXG4gICAgICBmdWxsV2lkdGgsXG4gICAgICBoaWRkZW5MYWJlbCxcbiAgICAgIHNpemUsXG4gICAgICBvbkJsdXI6ICgpID0+IHtcbiAgICAgICAgc2V0Rm9jdXNlZChmYWxzZSk7XG4gICAgICB9LFxuICAgICAgb25FbXB0eTogKCkgPT4ge1xuICAgICAgICBzZXRGaWxsZWQoZmFsc2UpO1xuICAgICAgfSxcbiAgICAgIG9uRmlsbGVkOiAoKSA9PiB7XG4gICAgICAgIHNldEZpbGxlZCh0cnVlKTtcbiAgICAgIH0sXG4gICAgICBvbkZvY3VzOiAoKSA9PiB7XG4gICAgICAgIHNldEZvY3VzZWQodHJ1ZSk7XG4gICAgICB9LFxuICAgICAgcmVnaXN0ZXJFZmZlY3QsXG4gICAgICByZXF1aXJlZCxcbiAgICAgIHZhcmlhbnRcbiAgICB9O1xuICB9LCBbYWRvcm5lZFN0YXJ0LCBjb2xvciwgZGlzYWJsZWQsIGVycm9yLCBmaWxsZWQsIGZvY3VzZWQsIGZ1bGxXaWR0aCwgaGlkZGVuTGFiZWwsIHJlZ2lzdGVyRWZmZWN0LCByZXF1aXJlZCwgc2l6ZSwgdmFyaWFudF0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goRm9ybUNvbnRyb2xDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNoaWxkQ29udGV4dCxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goRm9ybUNvbnRyb2xSb290LCBfZXh0ZW5kcyh7XG4gICAgICBhczogY29tcG9uZW50LFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgICByZWY6IHJlZlxuICAgIH0sIG90aGVyLCB7XG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEZvcm1Db250cm9sLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeScsICdlcnJvcicsICdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCwgaW5wdXQgYW5kIGhlbHBlciB0ZXh0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYSBkaXNhYmxlZCBzdGF0ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGRpc3BsYXllZCBpbiBhbiBlcnJvciBzdGF0ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNwbGF5ZWQgaW4gZm9jdXNlZCBzdGF0ZS5cbiAgICovXG4gIGZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IHdpbGwgdGFrZSB1cCB0aGUgZnVsbCB3aWR0aCBvZiBpdHMgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGhpZGRlbi5cbiAgICogVGhpcyBpcyB1c2VkIHRvIGluY3JlYXNlIGRlbnNpdHkgZm9yIGEgYEZpbGxlZElucHV0YC5cbiAgICogQmUgc3VyZSB0byBhZGQgYGFyaWEtbGFiZWxgIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBoaWRkZW5MYWJlbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgIG9yIGBub3JtYWxgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nIG9mIHRoaXMgYW5kIGNvbnRhaW5lZCBjb21wb25lbnRzLlxuICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAnbm9uZScsICdub3JtYWwnXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCB3aWxsIGluZGljYXRlIHRoYXQgdGhlIGBpbnB1dGAgaXMgcmVxdWlyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgJ291dGxpbmVkJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRm9ybUNvbnRyb2w7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBGb3JtQ29udHJvbENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgRm9ybUNvbnRyb2xDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0Zvcm1Db250cm9sQ29udGV4dCc7XG59XG5leHBvcnQgZGVmYXVsdCBGb3JtQ29udHJvbENvbnRleHQ7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gIHByb3BzLFxuICBzdGF0ZXMsXG4gIG11aUZvcm1Db250cm9sXG59KSB7XG4gIHJldHVybiBzdGF0ZXMucmVkdWNlKChhY2MsIHN0YXRlKSA9PiB7XG4gICAgYWNjW3N0YXRlXSA9IHByb3BzW3N0YXRlXTtcbiAgICBpZiAobXVpRm9ybUNvbnRyb2wpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcHNbc3RhdGVdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBhY2Nbc3RhdGVdID0gbXVpRm9ybUNvbnRyb2xbc3RhdGVdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRm9ybUNvbnRyb2xDb250ZXh0IGZyb20gJy4vRm9ybUNvbnRyb2xDb250ZXh0JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUZvcm1Db250cm9sKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChGb3JtQ29udHJvbENvbnRleHQpO1xufSIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUhlbHBlclRleHRVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpRm9ybUhlbHBlclRleHQnLCBzbG90KTtcbn1cbmNvbnN0IGZvcm1IZWxwZXJUZXh0Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZvcm1IZWxwZXJUZXh0JywgWydyb290JywgJ2Vycm9yJywgJ2Rpc2FibGVkJywgJ3NpemVTbWFsbCcsICdzaXplTWVkaXVtJywgJ2NvbnRhaW5lZCcsICdmb2N1c2VkJywgJ2ZpbGxlZCcsICdyZXF1aXJlZCddKTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1IZWxwZXJUZXh0Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG52YXIgX3NwYW47XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVkXCIsIFwiZXJyb3JcIiwgXCJmaWxsZWRcIiwgXCJmb2N1c2VkXCIsIFwibWFyZ2luXCIsIFwicmVxdWlyZWRcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGZvcm1Db250cm9sU3RhdGUgZnJvbSAnLi4vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZSc7XG5pbXBvcnQgdXNlRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IGZvcm1IZWxwZXJUZXh0Q2xhc3NlcywgeyBnZXRGb3JtSGVscGVyVGV4dFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9mb3JtSGVscGVyVGV4dENsYXNzZXMnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGNvbnRhaW5lZCxcbiAgICBzaXplLFxuICAgIGRpc2FibGVkLFxuICAgIGVycm9yLFxuICAgIGZpbGxlZCxcbiAgICBmb2N1c2VkLFxuICAgIHJlcXVpcmVkXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBlcnJvciAmJiAnZXJyb3InLCBzaXplICYmIGBzaXplJHtjYXBpdGFsaXplKHNpemUpfWAsIGNvbnRhaW5lZCAmJiAnY29udGFpbmVkJywgZm9jdXNlZCAmJiAnZm9jdXNlZCcsIGZpbGxlZCAmJiAnZmlsbGVkJywgcmVxdWlyZWQgJiYgJ3JlcXVpcmVkJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRGb3JtSGVscGVyVGV4dFV0aWxpdHlDbGFzc2VzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBGb3JtSGVscGVyVGV4dFJvb3QgPSBzdHlsZWQoJ3AnLCB7XG4gIG5hbWU6ICdNdWlGb3JtSGVscGVyVGV4dCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLnNpemUgJiYgc3R5bGVzW2BzaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2l6ZSl9YF0sIG93bmVyU3RhdGUuY29udGFpbmVkICYmIHN0eWxlcy5jb250YWluZWQsIG93bmVyU3RhdGUuZmlsbGVkICYmIHN0eWxlcy5maWxsZWRdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5zZWNvbmRhcnlcbn0sIHRoZW1lLnR5cG9ncmFwaHkuY2FwdGlvbiwge1xuICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgbWFyZ2luVG9wOiAzLFxuICBtYXJnaW5SaWdodDogMCxcbiAgbWFyZ2luQm90dG9tOiAwLFxuICBtYXJnaW5MZWZ0OiAwLFxuICBbYCYuJHtmb3JtSGVscGVyVGV4dENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5kaXNhYmxlZFxuICB9LFxuICBbYCYuJHtmb3JtSGVscGVyVGV4dENsYXNzZXMuZXJyb3J9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZXJyb3IubWFpblxuICB9XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBtYXJnaW5Ub3A6IDRcbn0sIG93bmVyU3RhdGUuY29udGFpbmVkICYmIHtcbiAgbWFyZ2luTGVmdDogMTQsXG4gIG1hcmdpblJpZ2h0OiAxNFxufSkpO1xuY29uc3QgRm9ybUhlbHBlclRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGb3JtSGVscGVyVGV4dChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGb3JtSGVscGVyVGV4dCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ3AnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgZmNzID0gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gICAgcHJvcHMsXG4gICAgbXVpRm9ybUNvbnRyb2wsXG4gICAgc3RhdGVzOiBbJ3ZhcmlhbnQnLCAnc2l6ZScsICdkaXNhYmxlZCcsICdlcnJvcicsICdmaWxsZWQnLCAnZm9jdXNlZCcsICdyZXF1aXJlZCddXG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29tcG9uZW50LFxuICAgIGNvbnRhaW5lZDogZmNzLnZhcmlhbnQgPT09ICdmaWxsZWQnIHx8IGZjcy52YXJpYW50ID09PSAnb3V0bGluZWQnLFxuICAgIHZhcmlhbnQ6IGZjcy52YXJpYW50LFxuICAgIHNpemU6IGZjcy5zaXplLFxuICAgIGRpc2FibGVkOiBmY3MuZGlzYWJsZWQsXG4gICAgZXJyb3I6IGZjcy5lcnJvcixcbiAgICBmaWxsZWQ6IGZjcy5maWxsZWQsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWQsXG4gICAgcmVxdWlyZWQ6IGZjcy5yZXF1aXJlZFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goRm9ybUhlbHBlclRleHRSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IGNvbXBvbmVudCxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4gPT09ICcgJyA/IC8vIG5vdHJhbnNsYXRlIG5lZWRlZCB3aGlsZSBHb29nbGUgVHJhbnNsYXRlIHdpbGwgbm90IGZpeCB6ZXJvLXdpZHRoIHNwYWNlIGlzc3VlXG4gICAgX3NwYW4gfHwgKF9zcGFuID0gLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJub3RyYW5zbGF0ZVwiLFxuICAgICAgY2hpbGRyZW46IFwiXFx1MjAwQlwiXG4gICAgfSkpIDogY2hpbGRyZW5cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGb3JtSGVscGVyVGV4dC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBJZiBgJyAnYCBpcyBwcm92aWRlZCwgdGhlIGNvbXBvbmVudCByZXNlcnZlcyBvbmUgbGluZSBoZWlnaHQgZm9yIGRpc3BsYXlpbmcgYSBmdXR1cmUgbWVzc2FnZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGhlbHBlciB0ZXh0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYSBkaXNhYmxlZCBzdGF0ZS5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgaGVscGVyIHRleHQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBhbiBlcnJvciBzdGF0ZS5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGhlbHBlciB0ZXh0IHNob3VsZCB1c2UgZmlsbGVkIGNsYXNzZXMga2V5LlxuICAgKi9cbiAgZmlsbGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGhlbHBlciB0ZXh0IHNob3VsZCB1c2UgZm9jdXNlZCBjbGFzc2VzIGtleS5cbiAgICovXG4gIGZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZy4gVGhpcyBpcyBub3JtYWxseSBvYnRhaW5lZCB2aWEgY29udGV4dCBmcm9tXG4gICAqIEZvcm1Db250cm9sLlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZSddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGhlbHBlciB0ZXh0IHNob3VsZCB1c2UgcmVxdWlyZWQgY2xhc3NlcyBrZXkuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRm9ybUhlbHBlclRleHQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBHbG9iYWxTdHlsZXMgYXMgU3lzdGVtR2xvYmFsU3R5bGVzIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IGRlZmF1bHRUaGVtZSBmcm9tICcuLi9zdHlsZXMvZGVmYXVsdFRoZW1lJztcbmltcG9ydCBUSEVNRV9JRCBmcm9tICcuLi9zdHlsZXMvaWRlbnRpZmllcic7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gR2xvYmFsU3R5bGVzKHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChTeXN0ZW1HbG9iYWxTdHlsZXMsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGRlZmF1bHRUaGVtZTogZGVmYXVsdFRoZW1lLFxuICAgIHRoZW1lSWQ6IFRIRU1FX0lEXG4gIH0pKTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEdsb2JhbFN0eWxlcy5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGUgc3R5bGVzIHlvdSB3YW50IHRvIGFwcGx5IGdsb2JhbGx5LlxuICAgKi9cbiAgc3R5bGVzOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5ib29sXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBHbG9iYWxTdHlsZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgR3JpZENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCgpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgR3JpZENvbnRleHQuZGlzcGxheU5hbWUgPSAnR3JpZENvbnRleHQnO1xufVxuZXhwb3J0IGRlZmF1bHQgR3JpZENvbnRleHQ7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRHcmlkVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlHcmlkJywgc2xvdCk7XG59XG5jb25zdCBTUEFDSU5HUyA9IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMF07XG5jb25zdCBESVJFQ1RJT05TID0gWydjb2x1bW4tcmV2ZXJzZScsICdjb2x1bW4nLCAncm93LXJldmVyc2UnLCAncm93J107XG5jb25zdCBXUkFQUyA9IFsnbm93cmFwJywgJ3dyYXAtcmV2ZXJzZScsICd3cmFwJ107XG5jb25zdCBHUklEX1NJWkVTID0gWydhdXRvJywgdHJ1ZSwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMl07XG5jb25zdCBncmlkQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUdyaWQnLCBbJ3Jvb3QnLCAnY29udGFpbmVyJywgJ2l0ZW0nLCAnemVyb01pbldpZHRoJyxcbi8vIHNwYWNpbmdzXG4uLi5TUEFDSU5HUy5tYXAoc3BhY2luZyA9PiBgc3BhY2luZy14cy0ke3NwYWNpbmd9YCksXG4vLyBkaXJlY3Rpb24gdmFsdWVzXG4uLi5ESVJFQ1RJT05TLm1hcChkaXJlY3Rpb24gPT4gYGRpcmVjdGlvbi14cy0ke2RpcmVjdGlvbn1gKSxcbi8vIHdyYXAgdmFsdWVzXG4uLi5XUkFQUy5tYXAod3JhcCA9PiBgd3JhcC14cy0ke3dyYXB9YCksXG4vLyBncmlkIHNpemVzIGZvciBhbGwgYnJlYWtwb2ludHNcbi4uLkdSSURfU0laRVMubWFwKHNpemUgPT4gYGdyaWQteHMtJHtzaXplfWApLCAuLi5HUklEX1NJWkVTLm1hcChzaXplID0+IGBncmlkLXNtLSR7c2l6ZX1gKSwgLi4uR1JJRF9TSVpFUy5tYXAoc2l6ZSA9PiBgZ3JpZC1tZC0ke3NpemV9YCksIC4uLkdSSURfU0laRVMubWFwKHNpemUgPT4gYGdyaWQtbGctJHtzaXplfWApLCAuLi5HUklEX1NJWkVTLm1hcChzaXplID0+IGBncmlkLXhsLSR7c2l6ZX1gKV0pO1xuZXhwb3J0IGRlZmF1bHQgZ3JpZENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG4vLyBBIGdyaWQgY29tcG9uZW50IHVzaW5nIHRoZSBmb2xsb3dpbmcgbGlicyBhcyBpbnNwaXJhdGlvbi5cbi8vXG4vLyBGb3IgdGhlIGltcGxlbWVudGF0aW9uOlxuLy8gLSBodHRwczovL2dldGJvb3RzdHJhcC5jb20vZG9jcy80LjMvbGF5b3V0L2dyaWQvXG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9rcmlzdG9mZXJqb3NlcGgvZmxleGJveGdyaWQvYmxvYi9tYXN0ZXIvc3JjL2Nzcy9mbGV4Ym94Z3JpZC5jc3Ncbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL3JveWxlZTA3MDQvcmVhY3QtZmxleGJveC1ncmlkXG4vLyAtIGh0dHBzOi8vbWF0ZXJpYWwuYW5ndWxhcmpzLm9yZy9sYXRlc3QvbGF5b3V0L2ludHJvZHVjdGlvblxuLy9cbi8vIEZvbGxvdyB0aGlzIGZsZXhib3ggR3VpZGUgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbW9kZWw6XG4vLyAtIGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vc25pcHBldHMvY3NzL2EtZ3VpZGUtdG8tZmxleGJveC9cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJjb2x1bW5zXCIsIFwiY29sdW1uU3BhY2luZ1wiLCBcImNvbXBvbmVudFwiLCBcImNvbnRhaW5lclwiLCBcImRpcmVjdGlvblwiLCBcIml0ZW1cIiwgXCJyb3dTcGFjaW5nXCIsIFwic3BhY2luZ1wiLCBcIndyYXBcIiwgXCJ6ZXJvTWluV2lkdGhcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cywgdW5zdGFibGVfcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMgYXMgcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgeyBleHRlbmRTeFByb3AgfSBmcm9tICdAbXVpL3N5c3RlbS9zdHlsZUZ1bmN0aW9uU3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHJlcXVpcmVQcm9wRmFjdG9yeSBmcm9tICcuLi91dGlscy9yZXF1aXJlUHJvcEZhY3RvcnknO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWUnO1xuaW1wb3J0IEdyaWRDb250ZXh0IGZyb20gJy4vR3JpZENvbnRleHQnO1xuaW1wb3J0IGdyaWRDbGFzc2VzLCB7IGdldEdyaWRVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2dyaWRDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBnZXRPZmZzZXQodmFsKSB7XG4gIGNvbnN0IHBhcnNlID0gcGFyc2VGbG9hdCh2YWwpO1xuICByZXR1cm4gYCR7cGFyc2V9JHtTdHJpbmcodmFsKS5yZXBsYWNlKFN0cmluZyhwYXJzZSksICcnKSB8fCAncHgnfWA7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVHcmlkKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pIHtcbiAgbGV0IHNpemU7XG4gIHJldHVybiB0aGVtZS5icmVha3BvaW50cy5rZXlzLnJlZHVjZSgoZ2xvYmFsU3R5bGVzLCBicmVha3BvaW50KSA9PiB7XG4gICAgLy8gVXNlIHNpZGUgZWZmZWN0IG92ZXIgaW1tdXRhYmlsaXR5IGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuXG4gICAgbGV0IHN0eWxlcyA9IHt9O1xuICAgIGlmIChvd25lclN0YXRlW2JyZWFrcG9pbnRdKSB7XG4gICAgICBzaXplID0gb3duZXJTdGF0ZVticmVha3BvaW50XTtcbiAgICB9XG4gICAgaWYgKCFzaXplKSB7XG4gICAgICByZXR1cm4gZ2xvYmFsU3R5bGVzO1xuICAgIH1cbiAgICBpZiAoc2l6ZSA9PT0gdHJ1ZSkge1xuICAgICAgLy8gRm9yIHRoZSBhdXRvIGxheW91dGluZ1xuICAgICAgc3R5bGVzID0ge1xuICAgICAgICBmbGV4QmFzaXM6IDAsXG4gICAgICAgIGZsZXhHcm93OiAxLFxuICAgICAgICBtYXhXaWR0aDogJzEwMCUnXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoc2l6ZSA9PT0gJ2F1dG8nKSB7XG4gICAgICBzdHlsZXMgPSB7XG4gICAgICAgIGZsZXhCYXNpczogJ2F1dG8nLFxuICAgICAgICBmbGV4R3JvdzogMCxcbiAgICAgICAgZmxleFNocmluazogMCxcbiAgICAgICAgbWF4V2lkdGg6ICdub25lJyxcbiAgICAgICAgd2lkdGg6ICdhdXRvJ1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29sdW1uc0JyZWFrcG9pbnRWYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gICAgICAgIHZhbHVlczogb3duZXJTdGF0ZS5jb2x1bW5zLFxuICAgICAgICBicmVha3BvaW50czogdGhlbWUuYnJlYWtwb2ludHMudmFsdWVzXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNvbHVtblZhbHVlID0gdHlwZW9mIGNvbHVtbnNCcmVha3BvaW50VmFsdWVzID09PSAnb2JqZWN0JyA/IGNvbHVtbnNCcmVha3BvaW50VmFsdWVzW2JyZWFrcG9pbnRdIDogY29sdW1uc0JyZWFrcG9pbnRWYWx1ZXM7XG4gICAgICBpZiAoY29sdW1uVmFsdWUgPT09IHVuZGVmaW5lZCB8fCBjb2x1bW5WYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsU3R5bGVzO1xuICAgICAgfVxuICAgICAgLy8gS2VlcCA3IHNpZ25pZmljYW50IG51bWJlcnMuXG4gICAgICBjb25zdCB3aWR0aCA9IGAke01hdGgucm91bmQoc2l6ZSAvIGNvbHVtblZhbHVlICogMTBlNykgLyAxMGU1fSVgO1xuICAgICAgbGV0IG1vcmUgPSB7fTtcbiAgICAgIGlmIChvd25lclN0YXRlLmNvbnRhaW5lciAmJiBvd25lclN0YXRlLml0ZW0gJiYgb3duZXJTdGF0ZS5jb2x1bW5TcGFjaW5nICE9PSAwKSB7XG4gICAgICAgIGNvbnN0IHRoZW1lU3BhY2luZyA9IHRoZW1lLnNwYWNpbmcob3duZXJTdGF0ZS5jb2x1bW5TcGFjaW5nKTtcbiAgICAgICAgaWYgKHRoZW1lU3BhY2luZyAhPT0gJzBweCcpIHtcbiAgICAgICAgICBjb25zdCBmdWxsV2lkdGggPSBgY2FsYygke3dpZHRofSArICR7Z2V0T2Zmc2V0KHRoZW1lU3BhY2luZyl9KWA7XG4gICAgICAgICAgbW9yZSA9IHtcbiAgICAgICAgICAgIGZsZXhCYXNpczogZnVsbFdpZHRoLFxuICAgICAgICAgICAgbWF4V2lkdGg6IGZ1bGxXaWR0aFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2xvc2UgdG8gdGhlIGJvb3RzdHJhcCBpbXBsZW1lbnRhdGlvbjpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iLzhmY2NhYTI0MzllOTdlYzcyYTRiN2RjNDJjY2MxZjY0OTc5MGFkYjAvc2Nzcy9taXhpbnMvX2dyaWQuc2NzcyNMNDFcbiAgICAgIHN0eWxlcyA9IF9leHRlbmRzKHtcbiAgICAgICAgZmxleEJhc2lzOiB3aWR0aCxcbiAgICAgICAgZmxleEdyb3c6IDAsXG4gICAgICAgIG1heFdpZHRoOiB3aWR0aFxuICAgICAgfSwgbW9yZSk7XG4gICAgfVxuXG4gICAgLy8gTm8gbmVlZCBmb3IgYSBtZWRpYSBxdWVyeSBmb3IgdGhlIGZpcnN0IHNpemUuXG4gICAgaWYgKHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlc1ticmVha3BvaW50XSA9PT0gMCkge1xuICAgICAgT2JqZWN0LmFzc2lnbihnbG9iYWxTdHlsZXMsIHN0eWxlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdsb2JhbFN0eWxlc1t0aGVtZS5icmVha3BvaW50cy51cChicmVha3BvaW50KV0gPSBzdHlsZXM7XG4gICAgfVxuICAgIHJldHVybiBnbG9iYWxTdHlsZXM7XG4gIH0sIHt9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZURpcmVjdGlvbih7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSB7XG4gIGNvbnN0IGRpcmVjdGlvblZhbHVlcyA9IHJlc29sdmVCcmVha3BvaW50VmFsdWVzKHtcbiAgICB2YWx1ZXM6IG93bmVyU3RhdGUuZGlyZWN0aW9uLFxuICAgIGJyZWFrcG9pbnRzOiB0aGVtZS5icmVha3BvaW50cy52YWx1ZXNcbiAgfSk7XG4gIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyh7XG4gICAgdGhlbWVcbiAgfSwgZGlyZWN0aW9uVmFsdWVzLCBwcm9wVmFsdWUgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IHtcbiAgICAgIGZsZXhEaXJlY3Rpb246IHByb3BWYWx1ZVxuICAgIH07XG4gICAgaWYgKHByb3BWYWx1ZS5pbmRleE9mKCdjb2x1bW4nKSA9PT0gMCkge1xuICAgICAgb3V0cHV0W2AmID4gLiR7Z3JpZENsYXNzZXMuaXRlbX1gXSA9IHtcbiAgICAgICAgbWF4V2lkdGg6ICdub25lJ1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfSk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgemVybyB2YWx1ZSBicmVha3BvaW50IGtleXMgYmVmb3JlIGEgbm9uLXplcm8gdmFsdWUgYnJlYWtwb2ludCBrZXkuXG4gKiBAZXhhbXBsZSB7IHhzOiAwLCBzbTogMCwgbWQ6IDIsIGxnOiAwLCB4bDogMCB9IG9yIFswLCAwLCAyLCAwLCAwXVxuICogQHJldHVybnMgW3hzLCBzbV1cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzKHtcbiAgYnJlYWtwb2ludHMsXG4gIHZhbHVlc1xufSkge1xuICBsZXQgbm9uWmVyb0tleSA9ICcnO1xuICBPYmplY3Qua2V5cyh2YWx1ZXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICBpZiAobm9uWmVyb0tleSAhPT0gJycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHZhbHVlc1trZXldICE9PSAwKSB7XG4gICAgICBub25aZXJvS2V5ID0ga2V5O1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHNvcnRlZEJyZWFrcG9pbnRLZXlzQnlWYWx1ZSA9IE9iamVjdC5rZXlzKGJyZWFrcG9pbnRzKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgcmV0dXJuIGJyZWFrcG9pbnRzW2FdIC0gYnJlYWtwb2ludHNbYl07XG4gIH0pO1xuICByZXR1cm4gc29ydGVkQnJlYWtwb2ludEtleXNCeVZhbHVlLnNsaWNlKDAsIHNvcnRlZEJyZWFrcG9pbnRLZXlzQnlWYWx1ZS5pbmRleE9mKG5vblplcm9LZXkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVJvd0dhcCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSB7XG4gIGNvbnN0IHtcbiAgICBjb250YWluZXIsXG4gICAgcm93U3BhY2luZ1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgbGV0IHN0eWxlcyA9IHt9O1xuICBpZiAoY29udGFpbmVyICYmIHJvd1NwYWNpbmcgIT09IDApIHtcbiAgICBjb25zdCByb3dTcGFjaW5nVmFsdWVzID0gcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICAgICAgdmFsdWVzOiByb3dTcGFjaW5nLFxuICAgICAgYnJlYWtwb2ludHM6IHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlc1xuICAgIH0pO1xuICAgIGxldCB6ZXJvVmFsdWVCcmVha3BvaW50S2V5cztcbiAgICBpZiAodHlwZW9mIHJvd1NwYWNpbmdWYWx1ZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICB6ZXJvVmFsdWVCcmVha3BvaW50S2V5cyA9IGV4dHJhY3RaZXJvVmFsdWVCcmVha3BvaW50S2V5cyh7XG4gICAgICAgIGJyZWFrcG9pbnRzOiB0aGVtZS5icmVha3BvaW50cy52YWx1ZXMsXG4gICAgICAgIHZhbHVlczogcm93U3BhY2luZ1ZhbHVlc1xuICAgICAgfSk7XG4gICAgfVxuICAgIHN0eWxlcyA9IGhhbmRsZUJyZWFrcG9pbnRzKHtcbiAgICAgIHRoZW1lXG4gICAgfSwgcm93U3BhY2luZ1ZhbHVlcywgKHByb3BWYWx1ZSwgYnJlYWtwb2ludCkgPT4ge1xuICAgICAgdmFyIF96ZXJvVmFsdWVCcmVha3BvaW50SztcbiAgICAgIGNvbnN0IHRoZW1lU3BhY2luZyA9IHRoZW1lLnNwYWNpbmcocHJvcFZhbHVlKTtcbiAgICAgIGlmICh0aGVtZVNwYWNpbmcgIT09ICcwcHgnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWFyZ2luVG9wOiBgLSR7Z2V0T2Zmc2V0KHRoZW1lU3BhY2luZyl9YCxcbiAgICAgICAgICBbYCYgPiAuJHtncmlkQ2xhc3Nlcy5pdGVtfWBdOiB7XG4gICAgICAgICAgICBwYWRkaW5nVG9wOiBnZXRPZmZzZXQodGhlbWVTcGFjaW5nKVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmICgoX3plcm9WYWx1ZUJyZWFrcG9pbnRLID0gemVyb1ZhbHVlQnJlYWtwb2ludEtleXMpICE9IG51bGwgJiYgX3plcm9WYWx1ZUJyZWFrcG9pbnRLLmluY2x1ZGVzKGJyZWFrcG9pbnQpKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1hcmdpblRvcDogMCxcbiAgICAgICAgW2AmID4gLiR7Z3JpZENsYXNzZXMuaXRlbX1gXToge1xuICAgICAgICAgIHBhZGRpbmdUb3A6IDBcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gc3R5bGVzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQ29sdW1uR2FwKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pIHtcbiAgY29uc3Qge1xuICAgIGNvbnRhaW5lcixcbiAgICBjb2x1bW5TcGFjaW5nXG4gIH0gPSBvd25lclN0YXRlO1xuICBsZXQgc3R5bGVzID0ge307XG4gIGlmIChjb250YWluZXIgJiYgY29sdW1uU3BhY2luZyAhPT0gMCkge1xuICAgIGNvbnN0IGNvbHVtblNwYWNpbmdWYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gICAgICB2YWx1ZXM6IGNvbHVtblNwYWNpbmcsXG4gICAgICBicmVha3BvaW50czogdGhlbWUuYnJlYWtwb2ludHMudmFsdWVzXG4gICAgfSk7XG4gICAgbGV0IHplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzO1xuICAgIGlmICh0eXBlb2YgY29sdW1uU3BhY2luZ1ZhbHVlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzID0gZXh0cmFjdFplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzKHtcbiAgICAgICAgYnJlYWtwb2ludHM6IHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlcyxcbiAgICAgICAgdmFsdWVzOiBjb2x1bW5TcGFjaW5nVmFsdWVzXG4gICAgICB9KTtcbiAgICB9XG4gICAgc3R5bGVzID0gaGFuZGxlQnJlYWtwb2ludHMoe1xuICAgICAgdGhlbWVcbiAgICB9LCBjb2x1bW5TcGFjaW5nVmFsdWVzLCAocHJvcFZhbHVlLCBicmVha3BvaW50KSA9PiB7XG4gICAgICB2YXIgX3plcm9WYWx1ZUJyZWFrcG9pbnRLMjtcbiAgICAgIGNvbnN0IHRoZW1lU3BhY2luZyA9IHRoZW1lLnNwYWNpbmcocHJvcFZhbHVlKTtcbiAgICAgIGlmICh0aGVtZVNwYWNpbmcgIT09ICcwcHgnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgd2lkdGg6IGBjYWxjKDEwMCUgKyAke2dldE9mZnNldCh0aGVtZVNwYWNpbmcpfSlgLFxuICAgICAgICAgIG1hcmdpbkxlZnQ6IGAtJHtnZXRPZmZzZXQodGhlbWVTcGFjaW5nKX1gLFxuICAgICAgICAgIFtgJiA+IC4ke2dyaWRDbGFzc2VzLml0ZW19YF06IHtcbiAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiBnZXRPZmZzZXQodGhlbWVTcGFjaW5nKVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmICgoX3plcm9WYWx1ZUJyZWFrcG9pbnRLMiA9IHplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzKSAhPSBudWxsICYmIF96ZXJvVmFsdWVCcmVha3BvaW50SzIuaW5jbHVkZXMoYnJlYWtwb2ludCkpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgbWFyZ2luTGVmdDogMCxcbiAgICAgICAgW2AmID4gLiR7Z3JpZENsYXNzZXMuaXRlbX1gXToge1xuICAgICAgICAgIHBhZGRpbmdMZWZ0OiAwXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHN0eWxlcztcbn1cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU3BhY2luZ1N0eWxlcyhzcGFjaW5nLCBicmVha3BvaW50cywgc3R5bGVzID0ge30pIHtcbiAgLy8gdW5kZWZpbmVkL251bGwgb3IgYHNwYWNpbmdgIDw9IDBcbiAgaWYgKCFzcGFjaW5nIHx8IHNwYWNpbmcgPD0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICAvLyBpbiBjYXNlIG9mIHN0cmluZy9udW1iZXIgYHNwYWNpbmdgXG4gIGlmICh0eXBlb2Ygc3BhY2luZyA9PT0gJ3N0cmluZycgJiYgIU51bWJlci5pc05hTihOdW1iZXIoc3BhY2luZykpIHx8IHR5cGVvZiBzcGFjaW5nID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBbc3R5bGVzW2BzcGFjaW5nLXhzLSR7U3RyaW5nKHNwYWNpbmcpfWBdXTtcbiAgfVxuICAvLyBpbiBjYXNlIG9mIG9iamVjdCBgc3BhY2luZ2BcbiAgY29uc3Qgc3BhY2luZ1N0eWxlcyA9IFtdO1xuICBicmVha3BvaW50cy5mb3JFYWNoKGJyZWFrcG9pbnQgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gc3BhY2luZ1ticmVha3BvaW50XTtcbiAgICBpZiAoTnVtYmVyKHZhbHVlKSA+IDApIHtcbiAgICAgIHNwYWNpbmdTdHlsZXMucHVzaChzdHlsZXNbYHNwYWNpbmctJHticmVha3BvaW50fS0ke1N0cmluZyh2YWx1ZSl9YF0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzcGFjaW5nU3R5bGVzO1xufVxuXG4vLyBEZWZhdWx0IENTUyB2YWx1ZXNcbi8vIGZsZXg6ICcwIDEgYXV0bycsXG4vLyBmbGV4RGlyZWN0aW9uOiAncm93Jyxcbi8vIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0Jyxcbi8vIGZsZXhXcmFwOiAnbm93cmFwJyxcbi8vIGp1c3RpZnlDb250ZW50OiAnZmxleC1zdGFydCcsXG5jb25zdCBHcmlkUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpR3JpZCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICBjb25zdCB7XG4gICAgICBjb250YWluZXIsXG4gICAgICBkaXJlY3Rpb24sXG4gICAgICBpdGVtLFxuICAgICAgc3BhY2luZyxcbiAgICAgIHdyYXAsXG4gICAgICB6ZXJvTWluV2lkdGgsXG4gICAgICBicmVha3BvaW50c1xuICAgIH0gPSBvd25lclN0YXRlO1xuICAgIGxldCBzcGFjaW5nU3R5bGVzID0gW107XG5cbiAgICAvLyBpbiBjYXNlIG9mIGdyaWQgaXRlbVxuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIHNwYWNpbmdTdHlsZXMgPSByZXNvbHZlU3BhY2luZ1N0eWxlcyhzcGFjaW5nLCBicmVha3BvaW50cywgc3R5bGVzKTtcbiAgICB9XG4gICAgY29uc3QgYnJlYWtwb2ludHNTdHlsZXMgPSBbXTtcbiAgICBicmVha3BvaW50cy5mb3JFYWNoKGJyZWFrcG9pbnQgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBvd25lclN0YXRlW2JyZWFrcG9pbnRdO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGJyZWFrcG9pbnRzU3R5bGVzLnB1c2goc3R5bGVzW2BncmlkLSR7YnJlYWtwb2ludH0tJHtTdHJpbmcodmFsdWUpfWBdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBjb250YWluZXIgJiYgc3R5bGVzLmNvbnRhaW5lciwgaXRlbSAmJiBzdHlsZXMuaXRlbSwgemVyb01pbldpZHRoICYmIHN0eWxlcy56ZXJvTWluV2lkdGgsIC4uLnNwYWNpbmdTdHlsZXMsIGRpcmVjdGlvbiAhPT0gJ3JvdycgJiYgc3R5bGVzW2BkaXJlY3Rpb24teHMtJHtTdHJpbmcoZGlyZWN0aW9uKX1gXSwgd3JhcCAhPT0gJ3dyYXAnICYmIHN0eWxlc1tgd3JhcC14cy0ke1N0cmluZyh3cmFwKX1gXSwgLi4uYnJlYWtwb2ludHNTdHlsZXNdO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnXG59LCBvd25lclN0YXRlLmNvbnRhaW5lciAmJiB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgZmxleFdyYXA6ICd3cmFwJyxcbiAgd2lkdGg6ICcxMDAlJ1xufSwgb3duZXJTdGF0ZS5pdGVtICYmIHtcbiAgbWFyZ2luOiAwIC8vIEZvciBpbnN0YW5jZSwgaXQncyB1c2VmdWwgd2hlbiB1c2VkIHdpdGggYSBgZmlndXJlYCBlbGVtZW50LlxufSwgb3duZXJTdGF0ZS56ZXJvTWluV2lkdGggJiYge1xuICBtaW5XaWR0aDogMFxufSwgb3duZXJTdGF0ZS53cmFwICE9PSAnd3JhcCcgJiYge1xuICBmbGV4V3JhcDogb3duZXJTdGF0ZS53cmFwXG59KSwgZ2VuZXJhdGVEaXJlY3Rpb24sIGdlbmVyYXRlUm93R2FwLCBnZW5lcmF0ZUNvbHVtbkdhcCwgZ2VuZXJhdGVHcmlkKTtcbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU3BhY2luZ0NsYXNzZXMoc3BhY2luZywgYnJlYWtwb2ludHMpIHtcbiAgLy8gdW5kZWZpbmVkL251bGwgb3IgYHNwYWNpbmdgIDw9IDBcbiAgaWYgKCFzcGFjaW5nIHx8IHNwYWNpbmcgPD0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICAvLyBpbiBjYXNlIG9mIHN0cmluZy9udW1iZXIgYHNwYWNpbmdgXG4gIGlmICh0eXBlb2Ygc3BhY2luZyA9PT0gJ3N0cmluZycgJiYgIU51bWJlci5pc05hTihOdW1iZXIoc3BhY2luZykpIHx8IHR5cGVvZiBzcGFjaW5nID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBbYHNwYWNpbmcteHMtJHtTdHJpbmcoc3BhY2luZyl9YF07XG4gIH1cbiAgLy8gaW4gY2FzZSBvZiBvYmplY3QgYHNwYWNpbmdgXG4gIGNvbnN0IGNsYXNzZXMgPSBbXTtcbiAgYnJlYWtwb2ludHMuZm9yRWFjaChicmVha3BvaW50ID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHNwYWNpbmdbYnJlYWtwb2ludF07XG4gICAgaWYgKE51bWJlcih2YWx1ZSkgPiAwKSB7XG4gICAgICBjb25zdCBjbGFzc05hbWUgPSBgc3BhY2luZy0ke2JyZWFrcG9pbnR9LSR7U3RyaW5nKHZhbHVlKX1gO1xuICAgICAgY2xhc3Nlcy5wdXNoKGNsYXNzTmFtZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNsYXNzZXM7XG59XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBjb250YWluZXIsXG4gICAgZGlyZWN0aW9uLFxuICAgIGl0ZW0sXG4gICAgc3BhY2luZyxcbiAgICB3cmFwLFxuICAgIHplcm9NaW5XaWR0aCxcbiAgICBicmVha3BvaW50c1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgbGV0IHNwYWNpbmdDbGFzc2VzID0gW107XG5cbiAgLy8gaW4gY2FzZSBvZiBncmlkIGl0ZW1cbiAgaWYgKGNvbnRhaW5lcikge1xuICAgIHNwYWNpbmdDbGFzc2VzID0gcmVzb2x2ZVNwYWNpbmdDbGFzc2VzKHNwYWNpbmcsIGJyZWFrcG9pbnRzKTtcbiAgfVxuICBjb25zdCBicmVha3BvaW50c0NsYXNzZXMgPSBbXTtcbiAgYnJlYWtwb2ludHMuZm9yRWFjaChicmVha3BvaW50ID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IG93bmVyU3RhdGVbYnJlYWtwb2ludF07XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBicmVha3BvaW50c0NsYXNzZXMucHVzaChgZ3JpZC0ke2JyZWFrcG9pbnR9LSR7U3RyaW5nKHZhbHVlKX1gKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBjb250YWluZXIgJiYgJ2NvbnRhaW5lcicsIGl0ZW0gJiYgJ2l0ZW0nLCB6ZXJvTWluV2lkdGggJiYgJ3plcm9NaW5XaWR0aCcsIC4uLnNwYWNpbmdDbGFzc2VzLCBkaXJlY3Rpb24gIT09ICdyb3cnICYmIGBkaXJlY3Rpb24teHMtJHtTdHJpbmcoZGlyZWN0aW9uKX1gLCB3cmFwICE9PSAnd3JhcCcgJiYgYHdyYXAteHMtJHtTdHJpbmcod3JhcCl9YCwgLi4uYnJlYWtwb2ludHNDbGFzc2VzXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEdyaWRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IEdyaWQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBHcmlkKGluUHJvcHMsIHJlZikge1xuICBjb25zdCB0aGVtZVByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpR3JpZCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICBicmVha3BvaW50c1xuICB9ID0gdXNlVGhlbWUoKTtcbiAgY29uc3QgcHJvcHMgPSBleHRlbmRTeFByb3AodGhlbWVQcm9wcyk7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbHVtbnM6IGNvbHVtbnNQcm9wLFxuICAgICAgY29sdW1uU3BhY2luZzogY29sdW1uU3BhY2luZ1Byb3AsXG4gICAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICAgIGNvbnRhaW5lciA9IGZhbHNlLFxuICAgICAgZGlyZWN0aW9uID0gJ3JvdycsXG4gICAgICBpdGVtID0gZmFsc2UsXG4gICAgICByb3dTcGFjaW5nOiByb3dTcGFjaW5nUHJvcCxcbiAgICAgIHNwYWNpbmcgPSAwLFxuICAgICAgd3JhcCA9ICd3cmFwJyxcbiAgICAgIHplcm9NaW5XaWR0aCA9IGZhbHNlXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHJvd1NwYWNpbmcgPSByb3dTcGFjaW5nUHJvcCB8fCBzcGFjaW5nO1xuICBjb25zdCBjb2x1bW5TcGFjaW5nID0gY29sdW1uU3BhY2luZ1Byb3AgfHwgc3BhY2luZztcbiAgY29uc3QgY29sdW1uc0NvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KEdyaWRDb250ZXh0KTtcblxuICAvLyBjb2x1bW5zIHNldCB3aXRoIGRlZmF1bHQgYnJlYWtwb2ludCB1bml0IG9mIDEyXG4gIGNvbnN0IGNvbHVtbnMgPSBjb250YWluZXIgPyBjb2x1bW5zUHJvcCB8fCAxMiA6IGNvbHVtbnNDb250ZXh0O1xuICBjb25zdCBicmVha3BvaW50c1ZhbHVlcyA9IHt9O1xuICBjb25zdCBvdGhlckZpbHRlcmVkID0gX2V4dGVuZHMoe30sIG90aGVyKTtcbiAgYnJlYWtwb2ludHMua2V5cy5mb3JFYWNoKGJyZWFrcG9pbnQgPT4ge1xuICAgIGlmIChvdGhlclticmVha3BvaW50XSAhPSBudWxsKSB7XG4gICAgICBicmVha3BvaW50c1ZhbHVlc1ticmVha3BvaW50XSA9IG90aGVyW2JyZWFrcG9pbnRdO1xuICAgICAgZGVsZXRlIG90aGVyRmlsdGVyZWRbYnJlYWtwb2ludF07XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbHVtbnMsXG4gICAgY29udGFpbmVyLFxuICAgIGRpcmVjdGlvbixcbiAgICBpdGVtLFxuICAgIHJvd1NwYWNpbmcsXG4gICAgY29sdW1uU3BhY2luZyxcbiAgICB3cmFwLFxuICAgIHplcm9NaW5XaWR0aCxcbiAgICBzcGFjaW5nXG4gIH0sIGJyZWFrcG9pbnRzVmFsdWVzLCB7XG4gICAgYnJlYWtwb2ludHM6IGJyZWFrcG9pbnRzLmtleXNcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEdyaWRDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNvbHVtbnMsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KEdyaWRSb290LCBfZXh0ZW5kcyh7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICAgIGFzOiBjb21wb25lbnQsXG4gICAgICByZWY6IHJlZlxuICAgIH0sIG90aGVyRmlsdGVyZWQpKVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gR3JpZC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgY29sdW1ucy5cbiAgICogQGRlZmF1bHQgMTJcbiAgICovXG4gIGNvbHVtbnM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5udW1iZXIpLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBob3Jpem9udGFsIHNwYWNlIGJldHdlZW4gdGhlIHR5cGUgYGl0ZW1gIGNvbXBvbmVudHMuXG4gICAqIEl0IG92ZXJyaWRlcyB0aGUgdmFsdWUgb2YgdGhlIGBzcGFjaW5nYCBwcm9wLlxuICAgKi9cbiAgY29sdW1uU3BhY2luZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgd2lsbCBoYXZlIHRoZSBmbGV4ICpjb250YWluZXIqIGJlaGF2aW9yLlxuICAgKiBZb3Ugc2hvdWxkIGJlIHdyYXBwaW5nICppdGVtcyogd2l0aCBhICpjb250YWluZXIqLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY29udGFpbmVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIGBmbGV4LWRpcmVjdGlvbmAgc3R5bGUgcHJvcGVydHkuXG4gICAqIEl0IGlzIGFwcGxpZWQgZm9yIGFsbCBzY3JlZW4gc2l6ZXMuXG4gICAqIEBkZWZhdWx0ICdyb3cnXG4gICAqL1xuICBkaXJlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSksIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSkpLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgd2lsbCBoYXZlIHRoZSBmbGV4ICppdGVtKiBiZWhhdmlvci5cbiAgICogWW91IHNob3VsZCBiZSB3cmFwcGluZyAqaXRlbXMqIHdpdGggYSAqY29udGFpbmVyKi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGl0ZW06IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYSBudW1iZXIsIGl0IHNldHMgdGhlIG51bWJlciBvZiBjb2x1bW5zIHRoZSBncmlkIGl0ZW0gdXNlcy5cbiAgICogSXQgY2FuJ3QgYmUgZ3JlYXRlciB0aGFuIHRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgY29udGFpbmVyICgxMiBieSBkZWZhdWx0KS5cbiAgICogSWYgJ2F1dG8nLCB0aGUgZ3JpZCBpdGVtJ3Mgd2lkdGggbWF0Y2hlcyBpdHMgY29udGVudC5cbiAgICogSWYgZmFsc2UsIHRoZSBwcm9wIGlzIGlnbm9yZWQuXG4gICAqIElmIHRydWUsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBncm93cyB0byB1c2UgdGhlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgZ3JpZCBjb250YWluZXIuXG4gICAqIFRoZSB2YWx1ZSBpcyBhcHBsaWVkIGZvciB0aGUgYGxnYCBicmVha3BvaW50IGFuZCB3aWRlciBzY3JlZW5zIGlmIG5vdCBvdmVycmlkZGVuLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbGc6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2F1dG8nXSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5ib29sXSksXG4gIC8qKlxuICAgKiBJZiBhIG51bWJlciwgaXQgc2V0cyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdGhlIGdyaWQgaXRlbSB1c2VzLlxuICAgKiBJdCBjYW4ndCBiZSBncmVhdGVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSBjb250YWluZXIgKDEyIGJ5IGRlZmF1bHQpLlxuICAgKiBJZiAnYXV0bycsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBtYXRjaGVzIGl0cyBjb250ZW50LlxuICAgKiBJZiBmYWxzZSwgdGhlIHByb3AgaXMgaWdub3JlZC5cbiAgICogSWYgdHJ1ZSwgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIGdyb3dzIHRvIHVzZSB0aGUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBncmlkIGNvbnRhaW5lci5cbiAgICogVGhlIHZhbHVlIGlzIGFwcGxpZWQgZm9yIHRoZSBgbWRgIGJyZWFrcG9pbnQgYW5kIHdpZGVyIHNjcmVlbnMgaWYgbm90IG92ZXJyaWRkZW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLmJvb2xdKSxcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIHZlcnRpY2FsIHNwYWNlIGJldHdlZW4gdGhlIHR5cGUgYGl0ZW1gIGNvbXBvbmVudHMuXG4gICAqIEl0IG92ZXJyaWRlcyB0aGUgdmFsdWUgb2YgdGhlIGBzcGFjaW5nYCBwcm9wLlxuICAgKi9cbiAgcm93U3BhY2luZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYSBudW1iZXIsIGl0IHNldHMgdGhlIG51bWJlciBvZiBjb2x1bW5zIHRoZSBncmlkIGl0ZW0gdXNlcy5cbiAgICogSXQgY2FuJ3QgYmUgZ3JlYXRlciB0aGFuIHRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgY29udGFpbmVyICgxMiBieSBkZWZhdWx0KS5cbiAgICogSWYgJ2F1dG8nLCB0aGUgZ3JpZCBpdGVtJ3Mgd2lkdGggbWF0Y2hlcyBpdHMgY29udGVudC5cbiAgICogSWYgZmFsc2UsIHRoZSBwcm9wIGlzIGlnbm9yZWQuXG4gICAqIElmIHRydWUsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBncm93cyB0byB1c2UgdGhlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgZ3JpZCBjb250YWluZXIuXG4gICAqIFRoZSB2YWx1ZSBpcyBhcHBsaWVkIGZvciB0aGUgYHNtYCBicmVha3BvaW50IGFuZCB3aWRlciBzY3JlZW5zIGlmIG5vdCBvdmVycmlkZGVuLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc206IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2F1dG8nXSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5ib29sXSksXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSB0eXBlIGBpdGVtYCBjb21wb25lbnRzLlxuICAgKiBJdCBjYW4gb25seSBiZSB1c2VkIG9uIGEgdHlwZSBgY29udGFpbmVyYCBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHNwYWNpbmc6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIGBmbGV4LXdyYXBgIHN0eWxlIHByb3BlcnR5LlxuICAgKiBJdCdzIGFwcGxpZWQgZm9yIGFsbCBzY3JlZW4gc2l6ZXMuXG4gICAqIEBkZWZhdWx0ICd3cmFwJ1xuICAgKi9cbiAgd3JhcDogUHJvcFR5cGVzLm9uZU9mKFsnbm93cmFwJywgJ3dyYXAtcmV2ZXJzZScsICd3cmFwJ10pLFxuICAvKipcbiAgICogSWYgYSBudW1iZXIsIGl0IHNldHMgdGhlIG51bWJlciBvZiBjb2x1bW5zIHRoZSBncmlkIGl0ZW0gdXNlcy5cbiAgICogSXQgY2FuJ3QgYmUgZ3JlYXRlciB0aGFuIHRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgY29udGFpbmVyICgxMiBieSBkZWZhdWx0KS5cbiAgICogSWYgJ2F1dG8nLCB0aGUgZ3JpZCBpdGVtJ3Mgd2lkdGggbWF0Y2hlcyBpdHMgY29udGVudC5cbiAgICogSWYgZmFsc2UsIHRoZSBwcm9wIGlzIGlnbm9yZWQuXG4gICAqIElmIHRydWUsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBncm93cyB0byB1c2UgdGhlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgZ3JpZCBjb250YWluZXIuXG4gICAqIFRoZSB2YWx1ZSBpcyBhcHBsaWVkIGZvciB0aGUgYHhsYCBicmVha3BvaW50IGFuZCB3aWRlciBzY3JlZW5zIGlmIG5vdCBvdmVycmlkZGVuLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgeGw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2F1dG8nXSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5ib29sXSksXG4gIC8qKlxuICAgKiBJZiBhIG51bWJlciwgaXQgc2V0cyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdGhlIGdyaWQgaXRlbSB1c2VzLlxuICAgKiBJdCBjYW4ndCBiZSBncmVhdGVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSBjb250YWluZXIgKDEyIGJ5IGRlZmF1bHQpLlxuICAgKiBJZiAnYXV0bycsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBtYXRjaGVzIGl0cyBjb250ZW50LlxuICAgKiBJZiBmYWxzZSwgdGhlIHByb3AgaXMgaWdub3JlZC5cbiAgICogSWYgdHJ1ZSwgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIGdyb3dzIHRvIHVzZSB0aGUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBncmlkIGNvbnRhaW5lci5cbiAgICogVGhlIHZhbHVlIGlzIGFwcGxpZWQgZm9yIGFsbCB0aGUgc2NyZWVuIHNpemVzIHdpdGggdGhlIGxvd2VzdCBwcmlvcml0eS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHhzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydhdXRvJ10pLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuYm9vbF0pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBpdCBzZXRzIGBtaW4td2lkdGg6IDBgIG9uIHRoZSBpdGVtLlxuICAgKiBSZWZlciB0byB0aGUgbGltaXRhdGlvbnMgc2VjdGlvbiBvZiB0aGUgZG9jdW1lbnRhdGlvbiB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgdXNlIGNhc2UuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB6ZXJvTWluV2lkdGg6IFByb3BUeXBlcy5ib29sXG59IDogdm9pZCAwO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgY29uc3QgcmVxdWlyZVByb3AgPSByZXF1aXJlUHJvcEZhY3RvcnkoJ0dyaWQnLCBHcmlkKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uY2F0XG4gIEdyaWRbJ3Byb3BUeXBlcycgKyAnJ10gPSBfZXh0ZW5kcyh7fSwgR3JpZC5wcm9wVHlwZXMsIHtcbiAgICBkaXJlY3Rpb246IHJlcXVpcmVQcm9wKCdjb250YWluZXInKSxcbiAgICBsZzogcmVxdWlyZVByb3AoJ2l0ZW0nKSxcbiAgICBtZDogcmVxdWlyZVByb3AoJ2l0ZW0nKSxcbiAgICBzbTogcmVxdWlyZVByb3AoJ2l0ZW0nKSxcbiAgICBzcGFjaW5nOiByZXF1aXJlUHJvcCgnY29udGFpbmVyJyksXG4gICAgd3JhcDogcmVxdWlyZVByb3AoJ2NvbnRhaW5lcicpLFxuICAgIHhzOiByZXF1aXJlUHJvcCgnaXRlbScpLFxuICAgIHplcm9NaW5XaWR0aDogcmVxdWlyZVByb3AoJ2l0ZW0nKVxuICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IEdyaWQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWRkRW5kTGlzdGVuZXJcIiwgXCJhcHBlYXJcIiwgXCJjaGlsZHJlblwiLCBcImVhc2luZ1wiLCBcImluXCIsIFwib25FbnRlclwiLCBcIm9uRW50ZXJlZFwiLCBcIm9uRW50ZXJpbmdcIiwgXCJvbkV4aXRcIiwgXCJvbkV4aXRlZFwiLCBcIm9uRXhpdGluZ1wiLCBcInN0eWxlXCIsIFwidGltZW91dFwiLCBcIlRyYW5zaXRpb25Db21wb25lbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHVzZVRpbWVvdXQgZnJvbSAnQG11aS91dGlscy91c2VUaW1lb3V0JztcbmltcG9ydCBlbGVtZW50QWNjZXB0aW5nUmVmIGZyb20gJ0BtdWkvdXRpbHMvZWxlbWVudEFjY2VwdGluZ1JlZic7XG5pbXBvcnQgeyBUcmFuc2l0aW9uIH0gZnJvbSAncmVhY3QtdHJhbnNpdGlvbi1ncm91cCc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lJztcbmltcG9ydCB7IGdldFRyYW5zaXRpb25Qcm9wcywgcmVmbG93IH0gZnJvbSAnLi4vdHJhbnNpdGlvbnMvdXRpbHMnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gZ2V0U2NhbGUodmFsdWUpIHtcbiAgcmV0dXJuIGBzY2FsZSgke3ZhbHVlfSwgJHt2YWx1ZSAqKiAyfSlgO1xufVxuY29uc3Qgc3R5bGVzID0ge1xuICBlbnRlcmluZzoge1xuICAgIG9wYWNpdHk6IDEsXG4gICAgdHJhbnNmb3JtOiBnZXRTY2FsZSgxKVxuICB9LFxuICBlbnRlcmVkOiB7XG4gICAgb3BhY2l0eTogMSxcbiAgICB0cmFuc2Zvcm06ICdub25lJ1xuICB9XG59O1xuXG4vKlxuIFRPRE8gdjY6IHJlbW92ZVxuIENvbmRpdGlvbmFsbHkgYXBwbHkgYSB3b3JrYXJvdW5kIGZvciB0aGUgQ1NTIHRyYW5zaXRpb24gYnVnIGluIFNhZmFyaSAxNS40IC8gV2ViS2l0IGJyb3dzZXJzLlxuICovXG5jb25zdCBpc1dlYktpdDE1NCA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIC9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKihzYWZhcml8bW9iaWxlKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgLyhvcyB8dmVyc2lvblxcLykxNSgufF8pNC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG5cbi8qKlxuICogVGhlIEdyb3cgdHJhbnNpdGlvbiBpcyB1c2VkIGJ5IHRoZSBbVG9vbHRpcF0oL21hdGVyaWFsLXVpL3JlYWN0LXRvb2x0aXAvKSBhbmRcbiAqIFtQb3BvdmVyXSgvbWF0ZXJpYWwtdWkvcmVhY3QtcG9wb3Zlci8pIGNvbXBvbmVudHMuXG4gKiBJdCB1c2VzIFtyZWFjdC10cmFuc2l0aW9uLWdyb3VwXShodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwKSBpbnRlcm5hbGx5LlxuICovXG5jb25zdCBHcm93ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gR3Jvdyhwcm9wcywgcmVmKSB7XG4gIGNvbnN0IHtcbiAgICAgIGFkZEVuZExpc3RlbmVyLFxuICAgICAgYXBwZWFyID0gdHJ1ZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgZWFzaW5nLFxuICAgICAgaW46IGluUHJvcCxcbiAgICAgIG9uRW50ZXIsXG4gICAgICBvbkVudGVyZWQsXG4gICAgICBvbkVudGVyaW5nLFxuICAgICAgb25FeGl0LFxuICAgICAgb25FeGl0ZWQsXG4gICAgICBvbkV4aXRpbmcsXG4gICAgICBzdHlsZSxcbiAgICAgIHRpbWVvdXQgPSAnYXV0bycsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvcHJvcC10eXBlc1xuICAgICAgVHJhbnNpdGlvbkNvbXBvbmVudCA9IFRyYW5zaXRpb25cbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgdGltZXIgPSB1c2VUaW1lb3V0KCk7XG4gIGNvbnN0IGF1dG9UaW1lb3V0ID0gUmVhY3QudXNlUmVmKCk7XG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcbiAgY29uc3Qgbm9kZVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihub2RlUmVmLCBjaGlsZHJlbi5yZWYsIHJlZik7XG4gIGNvbnN0IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sgPSBjYWxsYmFjayA9PiBtYXliZUlzQXBwZWFyaW5nID0+IHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBub2RlUmVmLmN1cnJlbnQ7XG5cbiAgICAgIC8vIG9uRW50ZXJYeHggYW5kIG9uRXhpdFh4eCBjYWxsYmFja3MgaGF2ZSBhIGRpZmZlcmVudCBhcmd1bWVudHMubGVuZ3RoIHZhbHVlLlxuICAgICAgaWYgKG1heWJlSXNBcHBlYXJpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYWxsYmFjayhub2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKG5vZGUsIG1heWJlSXNBcHBlYXJpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlRW50ZXJpbmcgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRW50ZXJpbmcpO1xuICBjb25zdCBoYW5kbGVFbnRlciA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2soKG5vZGUsIGlzQXBwZWFyaW5nKSA9PiB7XG4gICAgcmVmbG93KG5vZGUpOyAvLyBTbyB0aGUgYW5pbWF0aW9uIGFsd2F5cyBzdGFydCBmcm9tIHRoZSBzdGFydC5cblxuICAgIGNvbnN0IHtcbiAgICAgIGR1cmF0aW9uOiB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgICBkZWxheSxcbiAgICAgIGVhc2luZzogdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uXG4gICAgfSA9IGdldFRyYW5zaXRpb25Qcm9wcyh7XG4gICAgICBzdHlsZSxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBlYXNpbmdcbiAgICB9LCB7XG4gICAgICBtb2RlOiAnZW50ZXInXG4gICAgfSk7XG4gICAgbGV0IGR1cmF0aW9uO1xuICAgIGlmICh0aW1lb3V0ID09PSAnYXV0bycpIHtcbiAgICAgIGR1cmF0aW9uID0gdGhlbWUudHJhbnNpdGlvbnMuZ2V0QXV0b0hlaWdodER1cmF0aW9uKG5vZGUuY2xpZW50SGVpZ2h0KTtcbiAgICAgIGF1dG9UaW1lb3V0LmN1cnJlbnQgPSBkdXJhdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgZHVyYXRpb24gPSB0cmFuc2l0aW9uRHVyYXRpb247XG4gICAgfVxuICAgIG5vZGUuc3R5bGUudHJhbnNpdGlvbiA9IFt0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB7XG4gICAgICBkdXJhdGlvbixcbiAgICAgIGRlbGF5XG4gICAgfSksIHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgICAgZHVyYXRpb246IGlzV2ViS2l0MTU0ID8gZHVyYXRpb24gOiBkdXJhdGlvbiAqIDAuNjY2LFxuICAgICAgZGVsYXksXG4gICAgICBlYXNpbmc6IHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvblxuICAgIH0pXS5qb2luKCcsJyk7XG4gICAgaWYgKG9uRW50ZXIpIHtcbiAgICAgIG9uRW50ZXIobm9kZSwgaXNBcHBlYXJpbmcpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUVudGVyZWQgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRW50ZXJlZCk7XG4gIGNvbnN0IGhhbmRsZUV4aXRpbmcgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRXhpdGluZyk7XG4gIGNvbnN0IGhhbmRsZUV4aXQgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG5vZGUgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGR1cmF0aW9uOiB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgICBkZWxheSxcbiAgICAgIGVhc2luZzogdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uXG4gICAgfSA9IGdldFRyYW5zaXRpb25Qcm9wcyh7XG4gICAgICBzdHlsZSxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBlYXNpbmdcbiAgICB9LCB7XG4gICAgICBtb2RlOiAnZXhpdCdcbiAgICB9KTtcbiAgICBsZXQgZHVyYXRpb247XG4gICAgaWYgKHRpbWVvdXQgPT09ICdhdXRvJykge1xuICAgICAgZHVyYXRpb24gPSB0aGVtZS50cmFuc2l0aW9ucy5nZXRBdXRvSGVpZ2h0RHVyYXRpb24obm9kZS5jbGllbnRIZWlnaHQpO1xuICAgICAgYXV0b1RpbWVvdXQuY3VycmVudCA9IGR1cmF0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICBkdXJhdGlvbiA9IHRyYW5zaXRpb25EdXJhdGlvbjtcbiAgICB9XG4gICAgbm9kZS5zdHlsZS50cmFuc2l0aW9uID0gW3RoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHtcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgZGVsYXlcbiAgICB9KSwgdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd0cmFuc2Zvcm0nLCB7XG4gICAgICBkdXJhdGlvbjogaXNXZWJLaXQxNTQgPyBkdXJhdGlvbiA6IGR1cmF0aW9uICogMC42NjYsXG4gICAgICBkZWxheTogaXNXZWJLaXQxNTQgPyBkZWxheSA6IGRlbGF5IHx8IGR1cmF0aW9uICogMC4zMzMsXG4gICAgICBlYXNpbmc6IHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvblxuICAgIH0pXS5qb2luKCcsJyk7XG4gICAgbm9kZS5zdHlsZS5vcGFjaXR5ID0gMDtcbiAgICBub2RlLnN0eWxlLnRyYW5zZm9ybSA9IGdldFNjYWxlKDAuNzUpO1xuICAgIGlmIChvbkV4aXQpIHtcbiAgICAgIG9uRXhpdChub2RlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVFeGl0ZWQgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRXhpdGVkKTtcbiAgY29uc3QgaGFuZGxlQWRkRW5kTGlzdGVuZXIgPSBuZXh0ID0+IHtcbiAgICBpZiAodGltZW91dCA9PT0gJ2F1dG8nKSB7XG4gICAgICB0aW1lci5zdGFydChhdXRvVGltZW91dC5jdXJyZW50IHx8IDAsIG5leHQpO1xuICAgIH1cbiAgICBpZiAoYWRkRW5kTGlzdGVuZXIpIHtcbiAgICAgIC8vIE9sZCBjYWxsIHNpZ25hdHVyZSBiZWZvcmUgYHJlYWN0LXRyYW5zaXRpb24tZ3JvdXBgIGltcGxlbWVudGVkIGBub2RlUmVmYFxuICAgICAgYWRkRW5kTGlzdGVuZXIobm9kZVJlZi5jdXJyZW50LCBuZXh0KTtcbiAgICB9XG4gIH07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUcmFuc2l0aW9uQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgYXBwZWFyOiBhcHBlYXIsXG4gICAgaW46IGluUHJvcCxcbiAgICBub2RlUmVmOiBub2RlUmVmLFxuICAgIG9uRW50ZXI6IGhhbmRsZUVudGVyLFxuICAgIG9uRW50ZXJlZDogaGFuZGxlRW50ZXJlZCxcbiAgICBvbkVudGVyaW5nOiBoYW5kbGVFbnRlcmluZyxcbiAgICBvbkV4aXQ6IGhhbmRsZUV4aXQsXG4gICAgb25FeGl0ZWQ6IGhhbmRsZUV4aXRlZCxcbiAgICBvbkV4aXRpbmc6IGhhbmRsZUV4aXRpbmcsXG4gICAgYWRkRW5kTGlzdGVuZXI6IGhhbmRsZUFkZEVuZExpc3RlbmVyLFxuICAgIHRpbWVvdXQ6IHRpbWVvdXQgPT09ICdhdXRvJyA/IG51bGwgOiB0aW1lb3V0XG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IChzdGF0ZSwgY2hpbGRQcm9wcykgPT4ge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIF9leHRlbmRzKHtcbiAgICAgICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgIHRyYW5zZm9ybTogZ2V0U2NhbGUoMC43NSksXG4gICAgICAgICAgdmlzaWJpbGl0eTogc3RhdGUgPT09ICdleGl0ZWQnICYmICFpblByb3AgPyAnaGlkZGVuJyA6IHVuZGVmaW5lZFxuICAgICAgICB9LCBzdHlsZXNbc3RhdGVdLCBzdHlsZSwgY2hpbGRyZW4ucHJvcHMuc3R5bGUpLFxuICAgICAgICByZWY6IGhhbmRsZVJlZlxuICAgICAgfSwgY2hpbGRQcm9wcykpO1xuICAgIH1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBHcm93LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIEFkZCBhIGN1c3RvbSB0cmFuc2l0aW9uIGVuZCB0cmlnZ2VyLiBDYWxsZWQgd2l0aCB0aGUgdHJhbnNpdGlvbmluZyBET01cbiAgICogbm9kZSBhbmQgYSBkb25lIGNhbGxiYWNrLiBBbGxvd3MgZm9yIG1vcmUgZmluZSBncmFpbmVkIHRyYW5zaXRpb24gZW5kXG4gICAqIGxvZ2ljLiBOb3RlOiBUaW1lb3V0cyBhcmUgc3RpbGwgdXNlZCBhcyBhIGZhbGxiYWNrIGlmIHByb3ZpZGVkLlxuICAgKi9cbiAgYWRkRW5kTGlzdGVuZXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogUGVyZm9ybSB0aGUgZW50ZXIgdHJhbnNpdGlvbiB3aGVuIGl0IGZpcnN0IG1vdW50cyBpZiBgaW5gIGlzIGFsc28gYHRydWVgLlxuICAgKiBTZXQgdGhpcyB0byBgZmFsc2VgIHRvIGRpc2FibGUgdGhpcyBiZWhhdmlvci5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXBwZWFyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEEgc2luZ2xlIGNoaWxkIGNvbnRlbnQgZWxlbWVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBlbGVtZW50QWNjZXB0aW5nUmVmLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBUaGUgdHJhbnNpdGlvbiB0aW1pbmcgZnVuY3Rpb24uXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSBlYXNpbmcgb3IgYSBvYmplY3QgY29udGFpbmluZyBlbnRlciBhbmQgZXhpdCB2YWx1ZXMuXG4gICAqL1xuICBlYXNpbmc6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgZW50ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZXhpdDogUHJvcFR5cGVzLnN0cmluZ1xuICB9KSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IHdpbGwgdHJhbnNpdGlvbiBpbi5cbiAgICovXG4gIGluOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcmVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRW50ZXJpbmc6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FeGl0OiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdGluZzogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBmb3IgdGhlIHRyYW5zaXRpb24sIGluIG1pbGxpc2Vjb25kcy5cbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIHRpbWVvdXQgZm9yIGFsbCB0cmFuc2l0aW9ucywgb3IgaW5kaXZpZHVhbGx5IHdpdGggYW4gb2JqZWN0LlxuICAgKlxuICAgKiBTZXQgdG8gJ2F1dG8nIHRvIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlIHRyYW5zaXRpb24gdGltZSBiYXNlZCBvbiBoZWlnaHQuXG4gICAqIEBkZWZhdWx0ICdhdXRvJ1xuICAgKi9cbiAgdGltZW91dDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcHBlYXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZW50ZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZXhpdDogUHJvcFR5cGVzLm51bWJlclxuICB9KV0pXG59IDogdm9pZCAwO1xuR3Jvdy5tdWlTdXBwb3J0QXV0byA9IHRydWU7XG5leHBvcnQgZGVmYXVsdCBHcm93OyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmltcG9ydCB7IGlucHV0QmFzZUNsYXNzZXMgfSBmcm9tICcuLi9JbnB1dEJhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlJbnB1dCcsIHNsb3QpO1xufVxuY29uc3QgaW5wdXRDbGFzc2VzID0gX2V4dGVuZHMoe30sIGlucHV0QmFzZUNsYXNzZXMsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUlucHV0JywgWydyb290JywgJ3VuZGVybGluZScsICdpbnB1dCddKSk7XG5leHBvcnQgZGVmYXVsdCBpbnB1dENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiZGlzYWJsZVVuZGVybGluZVwiLCBcImNvbXBvbmVudHNcIiwgXCJjb21wb25lbnRzUHJvcHNcIiwgXCJmdWxsV2lkdGhcIiwgXCJpbnB1dENvbXBvbmVudFwiLCBcIm11bHRpbGluZVwiLCBcInNsb3RQcm9wc1wiLCBcInNsb3RzXCIsIFwidHlwZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCByZWZUeXBlIGZyb20gJ0BtdWkvdXRpbHMvcmVmVHlwZSc7XG5pbXBvcnQgSW5wdXRCYXNlIGZyb20gJy4uL0lucHV0QmFzZSc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IGlucHV0Q2xhc3NlcywgeyBnZXRJbnB1dFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vaW5wdXRDbGFzc2VzJztcbmltcG9ydCB7IHJvb3RPdmVycmlkZXNSZXNvbHZlciBhcyBpbnB1dEJhc2VSb290T3ZlcnJpZGVzUmVzb2x2ZXIsIGlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIgYXMgaW5wdXRCYXNlSW5wdXRPdmVycmlkZXNSZXNvbHZlciwgSW5wdXRCYXNlUm9vdCwgSW5wdXRCYXNlQ29tcG9uZW50IGFzIElucHV0QmFzZUlucHV0IH0gZnJvbSAnLi4vSW5wdXRCYXNlL0lucHV0QmFzZSc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZGlzYWJsZVVuZGVybGluZVxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgIWRpc2FibGVVbmRlcmxpbmUgJiYgJ3VuZGVybGluZSddLFxuICAgIGlucHV0OiBbJ2lucHV0J11cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldElucHV0VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcbmNvbnN0IElucHV0Um9vdCA9IHN0eWxlZChJbnB1dEJhc2VSb290LCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlJbnB1dCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gWy4uLmlucHV0QmFzZVJvb3RPdmVycmlkZXNSZXNvbHZlcihwcm9wcywgc3R5bGVzKSwgIW93bmVyU3RhdGUuZGlzYWJsZVVuZGVybGluZSAmJiBzdHlsZXMudW5kZXJsaW5lXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgY29uc3QgbGlnaHQgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCc7XG4gIGxldCBib3R0b21MaW5lQ29sb3IgPSBsaWdodCA/ICdyZ2JhKDAsIDAsIDAsIDAuNDIpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknO1xuICBpZiAodGhlbWUudmFycykge1xuICAgIGJvdHRvbUxpbmVDb2xvciA9IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLmNvbW1vbi5vbkJhY2tncm91bmRDaGFubmVsfSAvICR7dGhlbWUudmFycy5vcGFjaXR5LmlucHV0VW5kZXJsaW5lfSlgO1xuICB9XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZSdcbiAgfSwgb3duZXJTdGF0ZS5mb3JtQ29udHJvbCAmJiB7XG4gICAgJ2xhYmVsICsgJic6IHtcbiAgICAgIG1hcmdpblRvcDogMTZcbiAgICB9XG4gIH0sICFvd25lclN0YXRlLmRpc2FibGVVbmRlcmxpbmUgJiYge1xuICAgICcmOjphZnRlcic6IHtcbiAgICAgIGJvcmRlckJvdHRvbTogYDJweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW59YCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICBib3R0b206IDAsXG4gICAgICAvLyBEb2luZyB0aGUgb3RoZXIgd2F5IGFyb3VuZCBjcmFzaCBvbiBJRTExIFwiJydcIiBodHRwczovL2dpdGh1Yi5jb20vY3NzaW5qcy9qc3MvaXNzdWVzLzI0MlxuICAgICAgY29udGVudDogJ1wiXCInLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICByaWdodDogMCxcbiAgICAgIHRyYW5zZm9ybTogJ3NjYWxlWCgwKScsXG4gICAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3RyYW5zZm9ybScsIHtcbiAgICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXIsXG4gICAgICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VPdXRcbiAgICAgIH0pLFxuICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnIC8vIFRyYW5zcGFyZW50IHRvIHRoZSBob3ZlciBzdHlsZS5cbiAgICB9LFxuICAgIFtgJi4ke2lucHV0Q2xhc3Nlcy5mb2N1c2VkfTphZnRlcmBdOiB7XG4gICAgICAvLyB0cmFuc2xhdGVYKDApIGlzIGEgd29ya2Fyb3VuZCBmb3IgU2FmYXJpIHRyYW5zZm9ybSBzY2FsZSBidWdcbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL2lzc3Vlcy8zMTc2NlxuICAgICAgdHJhbnNmb3JtOiAnc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCknXG4gICAgfSxcbiAgICBbYCYuJHtpbnB1dENsYXNzZXMuZXJyb3J9YF06IHtcbiAgICAgICcmOjpiZWZvcmUsICY6OmFmdGVyJzoge1xuICAgICAgICBib3JkZXJCb3R0b21Db2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZXJyb3IubWFpblxuICAgICAgfVxuICAgIH0sXG4gICAgJyY6OmJlZm9yZSc6IHtcbiAgICAgIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAke2JvdHRvbUxpbmVDb2xvcn1gLFxuICAgICAgbGVmdDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIC8vIERvaW5nIHRoZSBvdGhlciB3YXkgYXJvdW5kIGNyYXNoIG9uIElFMTEgXCInJ1wiIGh0dHBzOi8vZ2l0aHViLmNvbS9jc3NpbmpzL2pzcy9pc3N1ZXMvMjQyXG4gICAgICBjb250ZW50OiAnXCJcXFxcMDBhMFwiJyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgcmlnaHQ6IDAsXG4gICAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ2JvcmRlci1ib3R0b20tY29sb3InLCB7XG4gICAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyXG4gICAgICB9KSxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyAvLyBUcmFuc3BhcmVudCB0byB0aGUgaG92ZXIgc3R5bGUuXG4gICAgfSxcbiAgICBbYCY6aG92ZXI6bm90KC4ke2lucHV0Q2xhc3Nlcy5kaXNhYmxlZH0sIC4ke2lucHV0Q2xhc3Nlcy5lcnJvcn0pOmJlZm9yZWBdOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAycHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnByaW1hcnl9YCxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAke2JvdHRvbUxpbmVDb2xvcn1gXG4gICAgICB9XG4gICAgfSxcbiAgICBbYCYuJHtpbnB1dENsYXNzZXMuZGlzYWJsZWR9OmJlZm9yZWBdOiB7XG4gICAgICBib3JkZXJCb3R0b21TdHlsZTogJ2RvdHRlZCdcbiAgICB9XG4gIH0pO1xufSk7XG5jb25zdCBJbnB1dElucHV0ID0gc3R5bGVkKElucHV0QmFzZUlucHV0LCB7XG4gIG5hbWU6ICdNdWlJbnB1dCcsXG4gIHNsb3Q6ICdJbnB1dCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiBpbnB1dEJhc2VJbnB1dE92ZXJyaWRlc1Jlc29sdmVyXG59KSh7fSk7XG5jb25zdCBJbnB1dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIElucHV0KGluUHJvcHMsIHJlZikge1xuICB2YXIgX3JlZiwgX3Nsb3RzJHJvb3QsIF9yZWYyLCBfc2xvdHMkaW5wdXQ7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpSW5wdXQnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBkaXNhYmxlVW5kZXJsaW5lLFxuICAgICAgY29tcG9uZW50cyA9IHt9LFxuICAgICAgY29tcG9uZW50c1Byb3BzOiBjb21wb25lbnRzUHJvcHNQcm9wLFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICBpbnB1dENvbXBvbmVudCA9ICdpbnB1dCcsXG4gICAgICBtdWx0aWxpbmUgPSBmYWxzZSxcbiAgICAgIHNsb3RQcm9wcyxcbiAgICAgIHNsb3RzID0ge30sXG4gICAgICB0eXBlID0gJ3RleHQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhwcm9wcyk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSB7XG4gICAgZGlzYWJsZVVuZGVybGluZVxuICB9O1xuICBjb25zdCBpbnB1dENvbXBvbmVudHNQcm9wcyA9IHtcbiAgICByb290OiB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfVxuICB9O1xuICBjb25zdCBjb21wb25lbnRzUHJvcHMgPSAoc2xvdFByb3BzICE9IG51bGwgPyBzbG90UHJvcHMgOiBjb21wb25lbnRzUHJvcHNQcm9wKSA/IGRlZXBtZXJnZShzbG90UHJvcHMgIT0gbnVsbCA/IHNsb3RQcm9wcyA6IGNvbXBvbmVudHNQcm9wc1Byb3AsIGlucHV0Q29tcG9uZW50c1Byb3BzKSA6IGlucHV0Q29tcG9uZW50c1Byb3BzO1xuICBjb25zdCBSb290U2xvdCA9IChfcmVmID0gKF9zbG90cyRyb290ID0gc2xvdHMucm9vdCkgIT0gbnVsbCA/IF9zbG90cyRyb290IDogY29tcG9uZW50cy5Sb290KSAhPSBudWxsID8gX3JlZiA6IElucHV0Um9vdDtcbiAgY29uc3QgSW5wdXRTbG90ID0gKF9yZWYyID0gKF9zbG90cyRpbnB1dCA9IHNsb3RzLmlucHV0KSAhPSBudWxsID8gX3Nsb3RzJGlucHV0IDogY29tcG9uZW50cy5JbnB1dCkgIT0gbnVsbCA/IF9yZWYyIDogSW5wdXRJbnB1dDtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KElucHV0QmFzZSwgX2V4dGVuZHMoe1xuICAgIHNsb3RzOiB7XG4gICAgICByb290OiBSb290U2xvdCxcbiAgICAgIGlucHV0OiBJbnB1dFNsb3RcbiAgICB9LFxuICAgIHNsb3RQcm9wczogY29tcG9uZW50c1Byb3BzLFxuICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgIGlucHV0Q29tcG9uZW50OiBpbnB1dENvbXBvbmVudCxcbiAgICBtdWx0aWxpbmU6IG11bHRpbGluZSxcbiAgICByZWY6IHJlZixcbiAgICB0eXBlOiB0eXBlXG4gIH0sIG90aGVyLCB7XG4gICAgY2xhc3NlczogY2xhc3Nlc1xuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IElucHV0LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBoZWxwcyB1c2VycyB0byBmaWxsIGZvcm1zIGZhc3RlciwgZXNwZWNpYWxseSBvbiBtb2JpbGUgZGV2aWNlcy5cbiAgICogVGhlIG5hbWUgY2FuIGJlIGNvbmZ1c2luZywgYXMgaXQncyBtb3JlIGxpa2UgYW4gYXV0b2ZpbGwuXG4gICAqIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91dCBpdCBbZm9sbG93aW5nIHRoZSBzcGVjaWZpY2F0aW9uXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNhdXRvZmlsbCkuXG4gICAqL1xuICBhdXRvQ29tcGxldGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgZm9jdXNlZCBkdXJpbmcgdGhlIGZpcnN0IG1vdW50LlxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAncHJpbWFyeSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3ByaW1hcnknLCAnc2Vjb25kYXJ5J10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdHNgIHByb3AgaW5zdGVhZC5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgSW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RQcm9wc2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90UHJvcHNgIHByb3AgaW5zdGVhZCwgYXMgYGNvbXBvbmVudHNQcm9wc2Agd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcm9vdDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIG5vdCBoYXZlIGFuIHVuZGVybGluZS5cbiAgICovXG4gIGRpc2FibGVVbmRlcmxpbmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogRW5kIGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgZW5kQWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCBpbmRpY2F0ZSBhbiBlcnJvci5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCB0YWtlIHVwIHRoZSBmdWxsIHdpZHRoIG9mIGl0cyBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ2lucHV0J1xuICAgKi9cbiAgaW5wdXRDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFtBdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjQXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZy4gVGhpcyBpcyBub3JtYWxseSBvYnRhaW5lZCB2aWEgY29udGV4dCBmcm9tXG4gICAqIEZvcm1Db250cm9sLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAnbm9uZSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAnbm9uZSddKSxcbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtYXhSb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWluUm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIFtUZXh0YXJlYUF1dG9zaXplXSgvbWF0ZXJpYWwtdWkvcmVhY3QtdGV4dGFyZWEtYXV0b3NpemUvKSBlbGVtZW50IGlzIHJlbmRlcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbXVsdGlsaW5lOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE5hbWUgYXR0cmlidXRlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgdmFsdWUgaXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5DaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50IHwgSFRNTElucHV0RWxlbWVudD59IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChzdHJpbmcpLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIHNob3J0IGhpbnQgZGlzcGxheWVkIGluIHRoZSBgaW5wdXRgIGJlZm9yZSB0aGUgdXNlciBlbnRlcnMgYSB2YWx1ZS5cbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSXQgcHJldmVudHMgdGhlIHVzZXIgZnJvbSBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkXG4gICAqIChub3QgZnJvbSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmaWVsZCkuXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgcmVxdWlyZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIHJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c1Byb3BzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBTdGFydCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIHN0YXJ0QWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC4gSXQgc2hvdWxkIGJlIFthIHZhbGlkIEhUTUw1IGlucHV0IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNGb3JtXyUzQ2lucHV0JTNFX3R5cGVzKS5cbiAgICogQGRlZmF1bHQgJ3RleHQnXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQsIHJlcXVpcmVkIGZvciBhIGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5JbnB1dC5tdWlOYW1lID0gJ0lucHV0JztcbmV4cG9ydCBkZWZhdWx0IElucHV0OyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlIGZyb20gXCJAbXVpL3V0aWxzL2Zvcm1hdE11aUVycm9yTWVzc2FnZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYXJpYS1kZXNjcmliZWRieVwiLCBcImF1dG9Db21wbGV0ZVwiLCBcImF1dG9Gb2N1c1wiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50c1wiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcImRlZmF1bHRWYWx1ZVwiLCBcImRpc2FibGVkXCIsIFwiZGlzYWJsZUluamVjdGluZ0dsb2JhbFN0eWxlc1wiLCBcImVuZEFkb3JubWVudFwiLCBcImVycm9yXCIsIFwiZnVsbFdpZHRoXCIsIFwiaWRcIiwgXCJpbnB1dENvbXBvbmVudFwiLCBcImlucHV0UHJvcHNcIiwgXCJpbnB1dFJlZlwiLCBcIm1hcmdpblwiLCBcIm1heFJvd3NcIiwgXCJtaW5Sb3dzXCIsIFwibXVsdGlsaW5lXCIsIFwibmFtZVwiLCBcIm9uQmx1clwiLCBcIm9uQ2hhbmdlXCIsIFwib25DbGlja1wiLCBcIm9uRm9jdXNcIiwgXCJvbktleURvd25cIiwgXCJvbktleVVwXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJyZWFkT25seVwiLCBcInJlbmRlclN1ZmZpeFwiLCBcInJvd3NcIiwgXCJzaXplXCIsIFwic2xvdFByb3BzXCIsIFwic2xvdHNcIiwgXCJzdGFydEFkb3JubWVudFwiLCBcInR5cGVcIiwgXCJ2YWx1ZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZiBmcm9tICdAbXVpL3V0aWxzL2VsZW1lbnRUeXBlQWNjZXB0aW5nUmVmJztcbmltcG9ydCByZWZUeXBlIGZyb20gJ0BtdWkvdXRpbHMvcmVmVHlwZSc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgaXNIb3N0Q29tcG9uZW50IGZyb20gJ0BtdWkvdXRpbHMvaXNIb3N0Q29tcG9uZW50JztcbmltcG9ydCBUZXh0YXJlYUF1dG9zaXplIGZyb20gJy4uL1RleHRhcmVhQXV0b3NpemUnO1xuaW1wb3J0IGZvcm1Db250cm9sU3RhdGUgZnJvbSAnLi4vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZSc7XG5pbXBvcnQgRm9ybUNvbnRyb2xDb250ZXh0IGZyb20gJy4uL0Zvcm1Db250cm9sL0Zvcm1Db250cm9sQ29udGV4dCc7XG5pbXBvcnQgdXNlRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgdXNlRW5oYW5jZWRFZmZlY3QgZnJvbSAnLi4vdXRpbHMvdXNlRW5oYW5jZWRFZmZlY3QnO1xuaW1wb3J0IEdsb2JhbFN0eWxlcyBmcm9tICcuLi9HbG9iYWxTdHlsZXMnO1xuaW1wb3J0IHsgaXNGaWxsZWQgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBpbnB1dEJhc2VDbGFzc2VzLCB7IGdldElucHV0QmFzZVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vaW5wdXRCYXNlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGNvbnN0IHJvb3RPdmVycmlkZXNSZXNvbHZlciA9IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBvd25lclN0YXRlXG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5mb3JtQ29udHJvbCAmJiBzdHlsZXMuZm9ybUNvbnRyb2wsIG93bmVyU3RhdGUuc3RhcnRBZG9ybm1lbnQgJiYgc3R5bGVzLmFkb3JuZWRTdGFydCwgb3duZXJTdGF0ZS5lbmRBZG9ybm1lbnQgJiYgc3R5bGVzLmFkb3JuZWRFbmQsIG93bmVyU3RhdGUuZXJyb3IgJiYgc3R5bGVzLmVycm9yLCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYgc3R5bGVzLnNpemVTbWFsbCwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYgc3R5bGVzLm11bHRpbGluZSwgb3duZXJTdGF0ZS5jb2xvciAmJiBzdHlsZXNbYGNvbG9yJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuY29sb3IpfWBdLCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiBzdHlsZXMuZnVsbFdpZHRoLCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIHN0eWxlcy5oaWRkZW5MYWJlbF07XG59O1xuZXhwb3J0IGNvbnN0IGlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIgPSAocHJvcHMsIHN0eWxlcykgPT4ge1xuICBjb25zdCB7XG4gICAgb3duZXJTdGF0ZVxuICB9ID0gcHJvcHM7XG4gIHJldHVybiBbc3R5bGVzLmlucHV0LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYgc3R5bGVzLmlucHV0U2l6ZVNtYWxsLCBvd25lclN0YXRlLm11bHRpbGluZSAmJiBzdHlsZXMuaW5wdXRNdWx0aWxpbmUsIG93bmVyU3RhdGUudHlwZSA9PT0gJ3NlYXJjaCcgJiYgc3R5bGVzLmlucHV0VHlwZVNlYXJjaCwgb3duZXJTdGF0ZS5zdGFydEFkb3JubWVudCAmJiBzdHlsZXMuaW5wdXRBZG9ybmVkU3RhcnQsIG93bmVyU3RhdGUuZW5kQWRvcm5tZW50ICYmIHN0eWxlcy5pbnB1dEFkb3JuZWRFbmQsIG93bmVyU3RhdGUuaGlkZGVuTGFiZWwgJiYgc3R5bGVzLmlucHV0SGlkZGVuTGFiZWxdO1xufTtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGNvbG9yLFxuICAgIGRpc2FibGVkLFxuICAgIGVycm9yLFxuICAgIGVuZEFkb3JubWVudCxcbiAgICBmb2N1c2VkLFxuICAgIGZvcm1Db250cm9sLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBoaWRkZW5MYWJlbCxcbiAgICBtdWx0aWxpbmUsXG4gICAgcmVhZE9ubHksXG4gICAgc2l6ZSxcbiAgICBzdGFydEFkb3JubWVudCxcbiAgICB0eXBlXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBgY29sb3Ike2NhcGl0YWxpemUoY29sb3IpfWAsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIGVycm9yICYmICdlcnJvcicsIGZ1bGxXaWR0aCAmJiAnZnVsbFdpZHRoJywgZm9jdXNlZCAmJiAnZm9jdXNlZCcsIGZvcm1Db250cm9sICYmICdmb3JtQ29udHJvbCcsIHNpemUgJiYgc2l6ZSAhPT0gJ21lZGl1bScgJiYgYHNpemUke2NhcGl0YWxpemUoc2l6ZSl9YCwgbXVsdGlsaW5lICYmICdtdWx0aWxpbmUnLCBzdGFydEFkb3JubWVudCAmJiAnYWRvcm5lZFN0YXJ0JywgZW5kQWRvcm5tZW50ICYmICdhZG9ybmVkRW5kJywgaGlkZGVuTGFiZWwgJiYgJ2hpZGRlbkxhYmVsJywgcmVhZE9ubHkgJiYgJ3JlYWRPbmx5J10sXG4gICAgaW5wdXQ6IFsnaW5wdXQnLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCB0eXBlID09PSAnc2VhcmNoJyAmJiAnaW5wdXRUeXBlU2VhcmNoJywgbXVsdGlsaW5lICYmICdpbnB1dE11bHRpbGluZScsIHNpemUgPT09ICdzbWFsbCcgJiYgJ2lucHV0U2l6ZVNtYWxsJywgaGlkZGVuTGFiZWwgJiYgJ2lucHV0SGlkZGVuTGFiZWwnLCBzdGFydEFkb3JubWVudCAmJiAnaW5wdXRBZG9ybmVkU3RhcnQnLCBlbmRBZG9ybm1lbnQgJiYgJ2lucHV0QWRvcm5lZEVuZCcsIHJlYWRPbmx5ICYmICdyZWFkT25seSddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0SW5wdXRCYXNlVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5leHBvcnQgY29uc3QgSW5wdXRCYXNlUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpSW5wdXRCYXNlJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogcm9vdE92ZXJyaWRlc1Jlc29sdmVyXG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe30sIHRoZW1lLnR5cG9ncmFwaHkuYm9keTEsIHtcbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQucHJpbWFyeSxcbiAgbGluZUhlaWdodDogJzEuNDM3NWVtJyxcbiAgLy8gMjNweFxuICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgLy8gUHJldmVudCBwYWRkaW5nIGlzc3VlIHdpdGggZnVsbFdpZHRoLlxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgY3Vyc29yOiAndGV4dCcsXG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBbYCYuJHtpbnB1dEJhc2VDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuZGlzYWJsZWQsXG4gICAgY3Vyc29yOiAnZGVmYXVsdCdcbiAgfVxufSwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYgX2V4dGVuZHMoe1xuICBwYWRkaW5nOiAnNHB4IDAgNXB4J1xufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgcGFkZGluZ1RvcDogMVxufSksIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHtcbiAgd2lkdGg6ICcxMDAlJ1xufSkpO1xuZXhwb3J0IGNvbnN0IElucHV0QmFzZUNvbXBvbmVudCA9IHN0eWxlZCgnaW5wdXQnLCB7XG4gIG5hbWU6ICdNdWlJbnB1dEJhc2UnLFxuICBzbG90OiAnSW5wdXQnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogaW5wdXRPdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgY29uc3QgbGlnaHQgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCc7XG4gIGNvbnN0IHBsYWNlaG9sZGVyID0gX2V4dGVuZHMoe1xuICAgIGNvbG9yOiAnY3VycmVudENvbG9yJ1xuICB9LCB0aGVtZS52YXJzID8ge1xuICAgIG9wYWNpdHk6IHRoZW1lLnZhcnMub3BhY2l0eS5pbnB1dFBsYWNlaG9sZGVyXG4gIH0gOiB7XG4gICAgb3BhY2l0eTogbGlnaHQgPyAwLjQyIDogMC41XG4gIH0sIHtcbiAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB7XG4gICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlclxuICAgIH0pXG4gIH0pO1xuICBjb25zdCBwbGFjZWhvbGRlckhpZGRlbiA9IHtcbiAgICBvcGFjaXR5OiAnMCAhaW1wb3J0YW50J1xuICB9O1xuICBjb25zdCBwbGFjZWhvbGRlclZpc2libGUgPSB0aGVtZS52YXJzID8ge1xuICAgIG9wYWNpdHk6IHRoZW1lLnZhcnMub3BhY2l0eS5pbnB1dFBsYWNlaG9sZGVyXG4gIH0gOiB7XG4gICAgb3BhY2l0eTogbGlnaHQgPyAwLjQyIDogMC41XG4gIH07XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgZm9udDogJ2luaGVyaXQnLFxuICAgIGxldHRlclNwYWNpbmc6ICdpbmhlcml0JyxcbiAgICBjb2xvcjogJ2N1cnJlbnRDb2xvcicsXG4gICAgcGFkZGluZzogJzRweCAwIDVweCcsXG4gICAgYm9yZGVyOiAwLFxuICAgIGJveFNpemluZzogJ2NvbnRlbnQtYm94JyxcbiAgICBiYWNrZ3JvdW5kOiAnbm9uZScsXG4gICAgaGVpZ2h0OiAnMS40Mzc1ZW0nLFxuICAgIC8vIFJlc2V0IDIzcHh0aGUgbmF0aXZlIGlucHV0IGxpbmUtaGVpZ2h0XG4gICAgbWFyZ2luOiAwLFxuICAgIC8vIFJlc2V0IGZvciBTYWZhcmlcbiAgICBXZWJraXRUYXBIaWdobGlnaHRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgIC8vIE1ha2UgdGhlIGZsZXggaXRlbSBzaHJpbmsgd2l0aCBGaXJlZm94XG4gICAgbWluV2lkdGg6IDAsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICAvLyBGaXggSUUxMSB3aWR0aCBpc3N1ZVxuICAgIGFuaW1hdGlvbk5hbWU6ICdtdWktYXV0by1maWxsLWNhbmNlbCcsXG4gICAgYW5pbWF0aW9uRHVyYXRpb246ICcxMG1zJyxcbiAgICAnJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyLFxuICAgICcmOjotbW96LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXIsXG4gICAgLy8gRmlyZWZveCAxOStcbiAgICAnJjotbXMtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlcixcbiAgICAvLyBJRTExXG4gICAgJyY6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyLFxuICAgIC8vIEVkZ2VcbiAgICAnJjpmb2N1cyc6IHtcbiAgICAgIG91dGxpbmU6IDBcbiAgICB9LFxuICAgIC8vIFJlc2V0IEZpcmVmb3ggaW52YWxpZCByZXF1aXJlZCBpbnB1dCBzdHlsZVxuICAgICcmOmludmFsaWQnOiB7XG4gICAgICBib3hTaGFkb3c6ICdub25lJ1xuICAgIH0sXG4gICAgJyY6Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24nOiB7XG4gICAgICAvLyBSZW1vdmUgdGhlIHBhZGRpbmcgd2hlbiB0eXBlPXNlYXJjaC5cbiAgICAgIFdlYmtpdEFwcGVhcmFuY2U6ICdub25lJ1xuICAgIH0sXG4gICAgLy8gU2hvdyBhbmQgaGlkZSB0aGUgcGxhY2Vob2xkZXIgbG9naWNcbiAgICBbYGxhYmVsW2RhdGEtc2hyaW5rPWZhbHNlXSArIC4ke2lucHV0QmFzZUNsYXNzZXMuZm9ybUNvbnRyb2x9ICZgXToge1xuICAgICAgJyY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlckhpZGRlbixcbiAgICAgICcmOjotbW96LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJIaWRkZW4sXG4gICAgICAvLyBGaXJlZm94IDE5K1xuICAgICAgJyY6LW1zLWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJIaWRkZW4sXG4gICAgICAvLyBJRTExXG4gICAgICAnJjo6LW1zLWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJIaWRkZW4sXG4gICAgICAvLyBFZGdlXG4gICAgICAnJjpmb2N1czo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyVmlzaWJsZSxcbiAgICAgICcmOmZvY3VzOjotbW96LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJWaXNpYmxlLFxuICAgICAgLy8gRmlyZWZveCAxOStcbiAgICAgICcmOmZvY3VzOi1tcy1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyVmlzaWJsZSxcbiAgICAgIC8vIElFMTFcbiAgICAgICcmOmZvY3VzOjotbXMtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlclZpc2libGUgLy8gRWRnZVxuICAgIH0sXG4gICAgW2AmLiR7aW5wdXRCYXNlQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgICAgb3BhY2l0eTogMSxcbiAgICAgIC8vIFJlc2V0IGlPUyBvcGFjaXR5XG4gICAgICBXZWJraXRUZXh0RmlsbENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LmRpc2FibGVkIC8vIEZpeCBvcGFjaXR5IFNhZmFyaSBidWdcbiAgICB9LFxuICAgICcmOi13ZWJraXQtYXV0b2ZpbGwnOiB7XG4gICAgICBhbmltYXRpb25EdXJhdGlvbjogJzUwMDBzJyxcbiAgICAgIGFuaW1hdGlvbk5hbWU6ICdtdWktYXV0by1maWxsJ1xuICAgIH1cbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgICBwYWRkaW5nVG9wOiAxXG4gIH0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIHtcbiAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICByZXNpemU6ICdub25lJyxcbiAgICBwYWRkaW5nOiAwLFxuICAgIHBhZGRpbmdUb3A6IDBcbiAgfSwgb3duZXJTdGF0ZS50eXBlID09PSAnc2VhcmNoJyAmJiB7XG4gICAgLy8gSW1wcm92ZSB0eXBlIHNlYXJjaCBzdHlsZS5cbiAgICBNb3pBcHBlYXJhbmNlOiAndGV4dGZpZWxkJ1xuICB9KTtcbn0pO1xuY29uc3QgaW5wdXRHbG9iYWxTdHlsZXMgPSAvKiNfX1BVUkVfXyovX2pzeChHbG9iYWxTdHlsZXMsIHtcbiAgc3R5bGVzOiB7XG4gICAgJ0BrZXlmcmFtZXMgbXVpLWF1dG8tZmlsbCc6IHtcbiAgICAgIGZyb206IHtcbiAgICAgICAgZGlzcGxheTogJ2Jsb2NrJ1xuICAgICAgfVxuICAgIH0sXG4gICAgJ0BrZXlmcmFtZXMgbXVpLWF1dG8tZmlsbC1jYW5jZWwnOiB7XG4gICAgICBmcm9tOiB7XG4gICAgICAgIGRpc3BsYXk6ICdibG9jaydcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG4vKipcbiAqIGBJbnB1dEJhc2VgIGNvbnRhaW5zIGFzIGZldyBzdHlsZXMgYXMgcG9zc2libGUuXG4gKiBJdCBhaW1zIHRvIGJlIGEgc2ltcGxlIGJ1aWxkaW5nIGJsb2NrIGZvciBjcmVhdGluZyBhbiBpbnB1dC5cbiAqIEl0IGNvbnRhaW5zIGEgbG9hZCBvZiBzdHlsZSByZXNldCBhbmQgc29tZSBzdGF0ZSBsb2dpYy5cbiAqL1xuY29uc3QgSW5wdXRCYXNlID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gSW5wdXRCYXNlKGluUHJvcHMsIHJlZikge1xuICB2YXIgX3Nsb3RQcm9wcyRpbnB1dDtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlJbnB1dEJhc2UnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICAnYXJpYS1kZXNjcmliZWRieSc6IGFyaWFEZXNjcmliZWRieSxcbiAgICAgIGF1dG9Db21wbGV0ZSxcbiAgICAgIGF1dG9Gb2N1cyxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICAgIGNvbXBvbmVudHNQcm9wcyA9IHt9LFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBkaXNhYmxlSW5qZWN0aW5nR2xvYmFsU3R5bGVzLFxuICAgICAgZW5kQWRvcm5tZW50LFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICBpZCxcbiAgICAgIGlucHV0Q29tcG9uZW50ID0gJ2lucHV0JyxcbiAgICAgIGlucHV0UHJvcHM6IGlucHV0UHJvcHNQcm9wID0ge30sXG4gICAgICBpbnB1dFJlZjogaW5wdXRSZWZQcm9wLFxuICAgICAgbWF4Um93cyxcbiAgICAgIG1pblJvd3MsXG4gICAgICBtdWx0aWxpbmUgPSBmYWxzZSxcbiAgICAgIG5hbWUsXG4gICAgICBvbkJsdXIsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG9uQ2xpY2ssXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25LZXlEb3duLFxuICAgICAgb25LZXlVcCxcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgcmVhZE9ubHksXG4gICAgICByZW5kZXJTdWZmaXgsXG4gICAgICByb3dzLFxuICAgICAgc2xvdFByb3BzID0ge30sXG4gICAgICBzbG90cyA9IHt9LFxuICAgICAgc3RhcnRBZG9ybm1lbnQsXG4gICAgICB0eXBlID0gJ3RleHQnLFxuICAgICAgdmFsdWU6IHZhbHVlUHJvcFxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCB2YWx1ZSA9IGlucHV0UHJvcHNQcm9wLnZhbHVlICE9IG51bGwgPyBpbnB1dFByb3BzUHJvcC52YWx1ZSA6IHZhbHVlUHJvcDtcbiAgY29uc3Qge1xuICAgIGN1cnJlbnQ6IGlzQ29udHJvbGxlZFxuICB9ID0gUmVhY3QudXNlUmVmKHZhbHVlICE9IG51bGwpO1xuICBjb25zdCBpbnB1dFJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICBjb25zdCBoYW5kbGVJbnB1dFJlZldhcm5pbmcgPSBSZWFjdC51c2VDYWxsYmFjayhpbnN0YW5jZSA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS5ub2RlTmFtZSAhPT0gJ0lOUFVUJyAmJiAhaW5zdGFuY2UuZm9jdXMpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogWW91IGhhdmUgcHJvdmlkZWQgYSBgaW5wdXRDb21wb25lbnRgIHRvIHRoZSBpbnB1dCBjb21wb25lbnQnLCAndGhhdCBkb2VzIG5vdCBjb3JyZWN0bHkgaGFuZGxlIHRoZSBgcmVmYCBwcm9wLicsICdNYWtlIHN1cmUgdGhlIGByZWZgIHByb3AgaXMgY2FsbGVkIHdpdGggYSBIVE1MSW5wdXRFbGVtZW50LiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKTtcbiAgY29uc3QgaGFuZGxlSW5wdXRSZWYgPSB1c2VGb3JrUmVmKGlucHV0UmVmLCBpbnB1dFJlZlByb3AsIGlucHV0UHJvcHNQcm9wLnJlZiwgaGFuZGxlSW5wdXRSZWZXYXJuaW5nKTtcbiAgY29uc3QgW2ZvY3VzZWQsIHNldEZvY3VzZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChtdWlGb3JtQ29udHJvbCkge1xuICAgICAgICByZXR1cm4gbXVpRm9ybUNvbnRyb2wucmVnaXN0ZXJFZmZlY3QoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSwgW211aUZvcm1Db250cm9sXSk7XG4gIH1cbiAgY29uc3QgZmNzID0gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gICAgcHJvcHMsXG4gICAgbXVpRm9ybUNvbnRyb2wsXG4gICAgc3RhdGVzOiBbJ2NvbG9yJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2hpZGRlbkxhYmVsJywgJ3NpemUnLCAncmVxdWlyZWQnLCAnZmlsbGVkJ11cbiAgfSk7XG4gIGZjcy5mb2N1c2VkID0gbXVpRm9ybUNvbnRyb2wgPyBtdWlGb3JtQ29udHJvbC5mb2N1c2VkIDogZm9jdXNlZDtcblxuICAvLyBUaGUgYmx1ciB3b24ndCBmaXJlIHdoZW4gdGhlIGRpc2FibGVkIHN0YXRlIGlzIHNldCBvbiBhIGZvY3VzZWQgaW5wdXQuXG4gIC8vIFdlIG5lZWQgdG8gYm9vayBrZWVwIHRoZSBmb2N1c2VkIHN0YXRlIG1hbnVhbGx5LlxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbXVpRm9ybUNvbnRyb2wgJiYgZGlzYWJsZWQgJiYgZm9jdXNlZCkge1xuICAgICAgc2V0Rm9jdXNlZChmYWxzZSk7XG4gICAgICBpZiAob25CbHVyKSB7XG4gICAgICAgIG9uQmx1cigpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW211aUZvcm1Db250cm9sLCBkaXNhYmxlZCwgZm9jdXNlZCwgb25CbHVyXSk7XG4gIGNvbnN0IG9uRmlsbGVkID0gbXVpRm9ybUNvbnRyb2wgJiYgbXVpRm9ybUNvbnRyb2wub25GaWxsZWQ7XG4gIGNvbnN0IG9uRW1wdHkgPSBtdWlGb3JtQ29udHJvbCAmJiBtdWlGb3JtQ29udHJvbC5vbkVtcHR5O1xuICBjb25zdCBjaGVja0RpcnR5ID0gUmVhY3QudXNlQ2FsbGJhY2sob2JqID0+IHtcbiAgICBpZiAoaXNGaWxsZWQob2JqKSkge1xuICAgICAgaWYgKG9uRmlsbGVkKSB7XG4gICAgICAgIG9uRmlsbGVkKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvbkVtcHR5KSB7XG4gICAgICBvbkVtcHR5KCk7XG4gICAgfVxuICB9LCBbb25GaWxsZWQsIG9uRW1wdHldKTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc0NvbnRyb2xsZWQpIHtcbiAgICAgIGNoZWNrRGlydHkoe1xuICAgICAgICB2YWx1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbdmFsdWUsIGNoZWNrRGlydHksIGlzQ29udHJvbGxlZF0pO1xuICBjb25zdCBoYW5kbGVGb2N1cyA9IGV2ZW50ID0+IHtcbiAgICAvLyBGaXggYSBidWcgd2l0aCBJRTExIHdoZXJlIHRoZSBmb2N1cy9ibHVyIGV2ZW50cyBhcmUgdHJpZ2dlcmVkXG4gICAgLy8gd2hpbGUgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICBpZiAoZmNzLmRpc2FibGVkKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG9uRm9jdXMpIHtcbiAgICAgIG9uRm9jdXMoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAoaW5wdXRQcm9wc1Byb3Aub25Gb2N1cykge1xuICAgICAgaW5wdXRQcm9wc1Byb3Aub25Gb2N1cyhldmVudCk7XG4gICAgfVxuICAgIGlmIChtdWlGb3JtQ29udHJvbCAmJiBtdWlGb3JtQ29udHJvbC5vbkZvY3VzKSB7XG4gICAgICBtdWlGb3JtQ29udHJvbC5vbkZvY3VzKGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0Rm9jdXNlZCh0cnVlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUJsdXIgPSBldmVudCA9PiB7XG4gICAgaWYgKG9uQmx1cikge1xuICAgICAgb25CbHVyKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKGlucHV0UHJvcHNQcm9wLm9uQmx1cikge1xuICAgICAgaW5wdXRQcm9wc1Byb3Aub25CbHVyKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKG11aUZvcm1Db250cm9sICYmIG11aUZvcm1Db250cm9sLm9uQmx1cikge1xuICAgICAgbXVpRm9ybUNvbnRyb2wub25CbHVyKGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0Rm9jdXNlZChmYWxzZSk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoZXZlbnQsIC4uLmFyZ3MpID0+IHtcbiAgICBpZiAoIWlzQ29udHJvbGxlZCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldCB8fCBpbnB1dFJlZi5jdXJyZW50O1xuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogRXhwZWN0ZWQgdmFsaWQgaW5wdXQgdGFyZ2V0LiBEaWQgeW91IHVzZSBhIGN1c3RvbSBcXGBpbnB1dENvbXBvbmVudFxcYCBhbmQgZm9yZ2V0IHRvIGZvcndhcmQgcmVmcz8gU2VlIGh0dHBzOi8vbXVpLmNvbS9yL2lucHV0LWNvbXBvbmVudC1yZWYtaW50ZXJmYWNlIGZvciBtb3JlIGluZm8uYCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMSkpO1xuICAgICAgfVxuICAgICAgY2hlY2tEaXJ0eSh7XG4gICAgICAgIHZhbHVlOiBlbGVtZW50LnZhbHVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGlucHV0UHJvcHNQcm9wLm9uQ2hhbmdlKSB7XG4gICAgICBpbnB1dFByb3BzUHJvcC5vbkNoYW5nZShldmVudCwgLi4uYXJncyk7XG4gICAgfVxuXG4gICAgLy8gUGVyZm9ybSBpbiB0aGUgd2lsbFVwZGF0ZVxuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgb25DaGFuZ2UoZXZlbnQsIC4uLmFyZ3MpO1xuICAgIH1cbiAgfTtcblxuICAvLyBDaGVjayB0aGUgaW5wdXQgc3RhdGUgb24gbW91bnQsIGluIGNhc2UgaXQgd2FzIGZpbGxlZCBieSB0aGUgdXNlclxuICAvLyBvciBhdXRvIGZpbGxlZCBieSB0aGUgYnJvd3NlciBiZWZvcmUgdGhlIGh5ZHJhdGlvbiAoZm9yIFNTUikuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY2hlY2tEaXJ0eShpbnB1dFJlZi5jdXJyZW50KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtdKTtcbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSBldmVudCA9PiB7XG4gICAgaWYgKGlucHV0UmVmLmN1cnJlbnQgJiYgZXZlbnQuY3VycmVudFRhcmdldCA9PT0gZXZlbnQudGFyZ2V0KSB7XG4gICAgICBpbnB1dFJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICBvbkNsaWNrKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGxldCBJbnB1dENvbXBvbmVudCA9IGlucHV0Q29tcG9uZW50O1xuICBsZXQgaW5wdXRQcm9wcyA9IGlucHV0UHJvcHNQcm9wO1xuICBpZiAobXVsdGlsaW5lICYmIElucHV0Q29tcG9uZW50ID09PSAnaW5wdXQnKSB7XG4gICAgaWYgKHJvd3MpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChtaW5Sb3dzIHx8IG1heFJvd3MpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ01VSTogWW91IGNhbiBub3QgdXNlIHRoZSBgbWluUm93c2Agb3IgYG1heFJvd3NgIHByb3BzIHdoZW4gdGhlIGlucHV0IGByb3dzYCBwcm9wIGlzIHNldC4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaW5wdXRQcm9wcyA9IF9leHRlbmRzKHtcbiAgICAgICAgdHlwZTogdW5kZWZpbmVkLFxuICAgICAgICBtaW5Sb3dzOiByb3dzLFxuICAgICAgICBtYXhSb3dzOiByb3dzXG4gICAgICB9LCBpbnB1dFByb3BzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXRQcm9wcyA9IF9leHRlbmRzKHtcbiAgICAgICAgdHlwZTogdW5kZWZpbmVkLFxuICAgICAgICBtYXhSb3dzLFxuICAgICAgICBtaW5Sb3dzXG4gICAgICB9LCBpbnB1dFByb3BzKTtcbiAgICB9XG4gICAgSW5wdXRDb21wb25lbnQgPSBUZXh0YXJlYUF1dG9zaXplO1xuICB9XG4gIGNvbnN0IGhhbmRsZUF1dG9GaWxsID0gZXZlbnQgPT4ge1xuICAgIC8vIFByb3ZpZGUgYSBmYWtlIHZhbHVlIGFzIENocm9tZSBtaWdodCBub3QgbGV0IHlvdSBhY2Nlc3MgaXQgZm9yIHNlY3VyaXR5IHJlYXNvbnMuXG4gICAgY2hlY2tEaXJ0eShldmVudC5hbmltYXRpb25OYW1lID09PSAnbXVpLWF1dG8tZmlsbC1jYW5jZWwnID8gaW5wdXRSZWYuY3VycmVudCA6IHtcbiAgICAgIHZhbHVlOiAneCdcbiAgICB9KTtcbiAgfTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobXVpRm9ybUNvbnRyb2wpIHtcbiAgICAgIG11aUZvcm1Db250cm9sLnNldEFkb3JuZWRTdGFydChCb29sZWFuKHN0YXJ0QWRvcm5tZW50KSk7XG4gICAgfVxuICB9LCBbbXVpRm9ybUNvbnRyb2wsIHN0YXJ0QWRvcm5tZW50XSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcjogZmNzLmNvbG9yIHx8ICdwcmltYXJ5JyxcbiAgICBkaXNhYmxlZDogZmNzLmRpc2FibGVkLFxuICAgIGVuZEFkb3JubWVudCxcbiAgICBlcnJvcjogZmNzLmVycm9yLFxuICAgIGZvY3VzZWQ6IGZjcy5mb2N1c2VkLFxuICAgIGZvcm1Db250cm9sOiBtdWlGb3JtQ29udHJvbCxcbiAgICBmdWxsV2lkdGgsXG4gICAgaGlkZGVuTGFiZWw6IGZjcy5oaWRkZW5MYWJlbCxcbiAgICBtdWx0aWxpbmUsXG4gICAgc2l6ZTogZmNzLnNpemUsXG4gICAgc3RhcnRBZG9ybm1lbnQsXG4gICAgdHlwZVxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBSb290ID0gc2xvdHMucm9vdCB8fCBjb21wb25lbnRzLlJvb3QgfHwgSW5wdXRCYXNlUm9vdDtcbiAgY29uc3Qgcm9vdFByb3BzID0gc2xvdFByb3BzLnJvb3QgfHwgY29tcG9uZW50c1Byb3BzLnJvb3QgfHwge307XG4gIGNvbnN0IElucHV0ID0gc2xvdHMuaW5wdXQgfHwgY29tcG9uZW50cy5JbnB1dCB8fCBJbnB1dEJhc2VDb21wb25lbnQ7XG4gIGlucHV0UHJvcHMgPSBfZXh0ZW5kcyh7fSwgaW5wdXRQcm9wcywgKF9zbG90UHJvcHMkaW5wdXQgPSBzbG90UHJvcHMuaW5wdXQpICE9IG51bGwgPyBfc2xvdFByb3BzJGlucHV0IDogY29tcG9uZW50c1Byb3BzLmlucHV0KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhSZWFjdC5GcmFnbWVudCwge1xuICAgIGNoaWxkcmVuOiBbIWRpc2FibGVJbmplY3RpbmdHbG9iYWxTdHlsZXMgJiYgaW5wdXRHbG9iYWxTdHlsZXMsIC8qI19fUFVSRV9fKi9fanN4cyhSb290LCBfZXh0ZW5kcyh7fSwgcm9vdFByb3BzLCAhaXNIb3N0Q29tcG9uZW50KFJvb3QpICYmIHtcbiAgICAgIG93bmVyU3RhdGU6IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLCByb290UHJvcHMub3duZXJTdGF0ZSlcbiAgICB9LCB7XG4gICAgICByZWY6IHJlZixcbiAgICAgIG9uQ2xpY2s6IGhhbmRsZUNsaWNrXG4gICAgfSwgb3RoZXIsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIHJvb3RQcm9wcy5jbGFzc05hbWUsIGNsYXNzTmFtZSwgcmVhZE9ubHkgJiYgJ011aUlucHV0QmFzZS1yZWFkT25seScpLFxuICAgICAgY2hpbGRyZW46IFtzdGFydEFkb3JubWVudCwgLyojX19QVVJFX18qL19qc3goRm9ybUNvbnRyb2xDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goSW5wdXQsIF9leHRlbmRzKHtcbiAgICAgICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IGZjcy5lcnJvcixcbiAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogYXJpYURlc2NyaWJlZGJ5LFxuICAgICAgICAgIGF1dG9Db21wbGV0ZTogYXV0b0NvbXBsZXRlLFxuICAgICAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzLFxuICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgICAgICAgIGRpc2FibGVkOiBmY3MuZGlzYWJsZWQsXG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgIG9uQW5pbWF0aW9uU3RhcnQ6IGhhbmRsZUF1dG9GaWxsLFxuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLFxuICAgICAgICAgIHJlYWRPbmx5OiByZWFkT25seSxcbiAgICAgICAgICByZXF1aXJlZDogZmNzLnJlcXVpcmVkLFxuICAgICAgICAgIHJvd3M6IHJvd3MsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIG9uS2V5RG93bjogb25LZXlEb3duLFxuICAgICAgICAgIG9uS2V5VXA6IG9uS2V5VXAsXG4gICAgICAgICAgdHlwZTogdHlwZVxuICAgICAgICB9LCBpbnB1dFByb3BzLCAhaXNIb3N0Q29tcG9uZW50KElucHV0KSAmJiB7XG4gICAgICAgICAgYXM6IElucHV0Q29tcG9uZW50LFxuICAgICAgICAgIG93bmVyU3RhdGU6IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLCBpbnB1dFByb3BzLm93bmVyU3RhdGUpXG4gICAgICAgIH0sIHtcbiAgICAgICAgICByZWY6IGhhbmRsZUlucHV0UmVmLFxuICAgICAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLmlucHV0LCBpbnB1dFByb3BzLmNsYXNzTmFtZSwgcmVhZE9ubHkgJiYgJ011aUlucHV0QmFzZS1yZWFkT25seScpLFxuICAgICAgICAgIG9uQmx1cjogaGFuZGxlQmx1cixcbiAgICAgICAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLFxuICAgICAgICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzXG4gICAgICAgIH0pKVxuICAgICAgfSksIGVuZEFkb3JubWVudCwgcmVuZGVyU3VmZml4ID8gcmVuZGVyU3VmZml4KF9leHRlbmRzKHt9LCBmY3MsIHtcbiAgICAgICAgc3RhcnRBZG9ybm1lbnRcbiAgICAgIH0pKSA6IG51bGxdXG4gICAgfSkpXVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gSW5wdXRCYXNlLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gICdhcmlhLWRlc2NyaWJlZGJ5JzogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBoZWxwcyB1c2VycyB0byBmaWxsIGZvcm1zIGZhc3RlciwgZXNwZWNpYWxseSBvbiBtb2JpbGUgZGV2aWNlcy5cbiAgICogVGhlIG5hbWUgY2FuIGJlIGNvbmZ1c2luZywgYXMgaXQncyBtb3JlIGxpa2UgYW4gYXV0b2ZpbGwuXG4gICAqIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91dCBpdCBbZm9sbG93aW5nIHRoZSBzcGVjaWZpY2F0aW9uXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNhdXRvZmlsbCkuXG4gICAqL1xuICBhdXRvQ29tcGxldGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgZm9jdXNlZCBkdXJpbmcgdGhlIGZpcnN0IG1vdW50LlxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAncHJpbWFyeSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdHNgIHByb3AgaW5zdGVhZC5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgSW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RQcm9wc2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90UHJvcHNgIHByb3AgaW5zdGVhZCwgYXMgYGNvbXBvbmVudHNQcm9wc2Agd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcm9vdDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBHbG9iYWxTdHlsZXMgZm9yIHRoZSBhdXRvLWZpbGwga2V5ZnJhbWVzIHdpbGwgbm90IGJlIGluamVjdGVkL3JlbW92ZWQgb24gbW91bnQvdW5tb3VudC4gTWFrZSBzdXJlIHRvIGluamVjdCB0aGVtIGF0IHRoZSB0b3Agb2YgeW91ciBhcHBsaWNhdGlvbi5cbiAgICogVGhpcyBvcHRpb24gaXMgaW50ZW5kZWQgdG8gaGVscCB3aXRoIGJvb3N0aW5nIHRoZSBpbml0aWFsIHJlbmRlcmluZyBwZXJmb3JtYW5jZSBpZiB5b3UgYXJlIGxvYWRpbmcgYSBiaWcgYW1vdW50IG9mIElucHV0IGNvbXBvbmVudHMgYXQgb25jZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVJbmplY3RpbmdHbG9iYWxTdHlsZXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogRW5kIGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgZW5kQWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCBpbmRpY2F0ZSBhbiBlcnJvci5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCB0YWtlIHVwIHRoZSBmdWxsIHdpZHRoIG9mIGl0cyBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ2lucHV0J1xuICAgKi9cbiAgaW5wdXRDb21wb25lbnQ6IGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmLFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nLiBUaGlzIGlzIG5vcm1hbGx5IG9idGFpbmVkIHZpYSBjb250ZXh0IGZyb21cbiAgICogRm9ybUNvbnRyb2wuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdub25lJ2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdub25lJ10pLFxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1heFJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIE1pbmltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtaW5Sb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgW1RleHRhcmVhQXV0b3NpemVdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0YXJlYS1hdXRvc2l6ZS8pIGVsZW1lbnQgaXMgcmVuZGVyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtdWx0aWxpbmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBgaW5wdXRgIGlzIGJsdXJyZWQuXG4gICAqXG4gICAqIE5vdGljZSB0aGF0IHRoZSBmaXJzdCBhcmd1bWVudCAoZXZlbnQpIG1pZ2h0IGJlIHVuZGVmaW5lZC5cbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LkNoYW5nZUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBIVE1MSW5wdXRFbGVtZW50Pn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKHN0cmluZykuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgYGlucHV0YCBkb2Vzbid0IHNhdGlzZnkgaXRzIGNvbnN0cmFpbnRzLlxuICAgKi9cbiAgb25JbnZhbGlkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbktleVVwOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBzaG9ydCBoaW50IGRpc3BsYXllZCBpbiB0aGUgYGlucHV0YCBiZWZvcmUgdGhlIHVzZXIgZW50ZXJzIGEgdmFsdWUuXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEl0IHByZXZlbnRzIHRoZSB1c2VyIGZyb20gY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZFxuICAgKiAobm90IGZyb20gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZmllbGQpLlxuICAgKi9cbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcmVuZGVyU3VmZml4OiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyByZXF1aXJlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgcm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNQcm9wc2AgcHJvcCwgd2hpY2ggd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcm9vdDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBjb21wb25lbnRzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgcm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogU3RhcnQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBzdGFydEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuIEl0IHNob3VsZCBiZSBbYSB2YWxpZCBIVE1MNSBpbnB1dCB0eXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjRm9ybV8lM0NpbnB1dCUzRV90eXBlcykuXG4gICAqIEBkZWZhdWx0ICd0ZXh0J1xuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LCByZXF1aXJlZCBmb3IgYSBjb250cm9sbGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgSW5wdXRCYXNlOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRCYXNlVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlJbnB1dEJhc2UnLCBzbG90KTtcbn1cbmNvbnN0IGlucHV0QmFzZUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlJbnB1dEJhc2UnLCBbJ3Jvb3QnLCAnZm9ybUNvbnRyb2wnLCAnZm9jdXNlZCcsICdkaXNhYmxlZCcsICdhZG9ybmVkU3RhcnQnLCAnYWRvcm5lZEVuZCcsICdlcnJvcicsICdzaXplU21hbGwnLCAnbXVsdGlsaW5lJywgJ2NvbG9yU2Vjb25kYXJ5JywgJ2Z1bGxXaWR0aCcsICdoaWRkZW5MYWJlbCcsICdyZWFkT25seScsICdpbnB1dCcsICdpbnB1dFNpemVTbWFsbCcsICdpbnB1dE11bHRpbGluZScsICdpbnB1dFR5cGVTZWFyY2gnLCAnaW5wdXRBZG9ybmVkU3RhcnQnLCAnaW5wdXRBZG9ybmVkRW5kJywgJ2lucHV0SGlkZGVuTGFiZWwnXSk7XG5leHBvcnQgZGVmYXVsdCBpbnB1dEJhc2VDbGFzc2VzOyIsIi8vIFN1cHBvcnRzIGRldGVybWluYXRpb24gb2YgaXNDb250cm9sbGVkKCkuXG4vLyBDb250cm9sbGVkIGlucHV0IGFjY2VwdHMgaXRzIGN1cnJlbnQgdmFsdWUgYXMgYSBwcm9wLlxuLy9cbi8vIEBzZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9mb3Jtcy5odG1sI2NvbnRyb2xsZWQtY29tcG9uZW50c1xuLy8gQHBhcmFtIHZhbHVlXG4vLyBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBzdHJpbmcgKGluY2x1ZGluZyAnJykgb3IgbnVtYmVyIChpbmNsdWRpbmcgemVybylcbmV4cG9ydCBmdW5jdGlvbiBoYXNWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAhKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCk7XG59XG5cbi8vIERldGVybWluZSBpZiBmaWVsZCBpcyBlbXB0eSBvciBmaWxsZWQuXG4vLyBSZXNwb25zZSBkZXRlcm1pbmVzIGlmIGxhYmVsIGlzIHByZXNlbnRlZCBhYm92ZSBmaWVsZCBvciBhcyBwbGFjZWhvbGRlci5cbi8vXG4vLyBAcGFyYW0gb2JqXG4vLyBAcGFyYW0gU1NSXG4vLyBAcmV0dXJucyB7Ym9vbGVhbn0gRmFsc2Ugd2hlbiBub3QgcHJlc2VudCBvciBlbXB0eSBzdHJpbmcuXG4vLyAgICAgICAgICAgICAgICAgICAgVHJ1ZSB3aGVuIGFueSBudW1iZXIgb3Igc3RyaW5nIHdpdGggbGVuZ3RoLlxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsbGVkKG9iaiwgU1NSID0gZmFsc2UpIHtcbiAgcmV0dXJuIG9iaiAmJiAoaGFzVmFsdWUob2JqLnZhbHVlKSAmJiBvYmoudmFsdWUgIT09ICcnIHx8IFNTUiAmJiBoYXNWYWx1ZShvYmouZGVmYXVsdFZhbHVlKSAmJiBvYmouZGVmYXVsdFZhbHVlICE9PSAnJyk7XG59XG5cbi8vIERldGVybWluZSBpZiBhbiBJbnB1dCBpcyBhZG9ybmVkIG9uIHN0YXJ0LlxuLy8gSXQncyBjb3JyZXNwb25kaW5nIHRvIHRoZSBsZWZ0IHdpdGggTFRSLlxuLy9cbi8vIEBwYXJhbSBvYmpcbi8vIEByZXR1cm5zIHtib29sZWFufSBGYWxzZSB3aGVuIG5vIGFkb3JubWVudHMuXG4vLyAgICAgICAgICAgICAgICAgICAgVHJ1ZSB3aGVuIGFkb3JuZWQgYXQgdGhlIHN0YXJ0LlxuZXhwb3J0IGZ1bmN0aW9uIGlzQWRvcm5lZFN0YXJ0KG9iaikge1xuICByZXR1cm4gb2JqLnN0YXJ0QWRvcm5tZW50O1xufSIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUxhYmVsVXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1MYWJlbCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUxhYmVsQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZvcm1MYWJlbCcsIFsncm9vdCcsICdjb2xvclNlY29uZGFyeScsICdmb2N1c2VkJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2ZpbGxlZCcsICdyZXF1aXJlZCcsICdhc3RlcmlzayddKTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1MYWJlbENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVkXCIsIFwiZXJyb3JcIiwgXCJmaWxsZWRcIiwgXCJmb2N1c2VkXCIsIFwicmVxdWlyZWRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgZm9ybUxhYmVsQ2xhc3NlcywgeyBnZXRGb3JtTGFiZWxVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vZm9ybUxhYmVsQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBjb2xvcixcbiAgICBmb2N1c2VkLFxuICAgIGRpc2FibGVkLFxuICAgIGVycm9yLFxuICAgIGZpbGxlZCxcbiAgICByZXF1aXJlZFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBlcnJvciAmJiAnZXJyb3InLCBmaWxsZWQgJiYgJ2ZpbGxlZCcsIGZvY3VzZWQgJiYgJ2ZvY3VzZWQnLCByZXF1aXJlZCAmJiAncmVxdWlyZWQnXSxcbiAgICBhc3RlcmlzazogWydhc3RlcmlzaycsIGVycm9yICYmICdlcnJvciddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Rm9ybUxhYmVsVXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBGb3JtTGFiZWxSb290ID0gc3R5bGVkKCdsYWJlbCcsIHtcbiAgbmFtZTogJ011aUZvcm1MYWJlbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6ICh7XG4gICAgb3duZXJTdGF0ZVxuICB9LCBzdHlsZXMpID0+IHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0eWxlcy5yb290LCBvd25lclN0YXRlLmNvbG9yID09PSAnc2Vjb25kYXJ5JyAmJiBzdHlsZXMuY29sb3JTZWNvbmRhcnksIG93bmVyU3RhdGUuZmlsbGVkICYmIHN0eWxlcy5maWxsZWQpO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5zZWNvbmRhcnlcbn0sIHRoZW1lLnR5cG9ncmFwaHkuYm9keTEsIHtcbiAgbGluZUhlaWdodDogJzEuNDM3NWVtJyxcbiAgcGFkZGluZzogMCxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIFtgJi4ke2Zvcm1MYWJlbENsYXNzZXMuZm9jdXNlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluXG4gIH0sXG4gIFtgJi4ke2Zvcm1MYWJlbENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5kaXNhYmxlZFxuICB9LFxuICBbYCYuJHtmb3JtTGFiZWxDbGFzc2VzLmVycm9yfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW5cbiAgfVxufSkpO1xuY29uc3QgQXN0ZXJpc2tDb21wb25lbnQgPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlGb3JtTGFiZWwnLFxuICBzbG90OiAnQXN0ZXJpc2snLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5hc3Rlcmlza1xufSkoKHtcbiAgdGhlbWVcbn0pID0+ICh7XG4gIFtgJi4ke2Zvcm1MYWJlbENsYXNzZXMuZXJyb3J9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZXJyb3IubWFpblxuICB9XG59KSk7XG5jb25zdCBGb3JtTGFiZWwgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGb3JtTGFiZWwoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpRm9ybUxhYmVsJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQgPSAnbGFiZWwnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgZmNzID0gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gICAgcHJvcHMsXG4gICAgbXVpRm9ybUNvbnRyb2wsXG4gICAgc3RhdGVzOiBbJ2NvbG9yJywgJ3JlcXVpcmVkJywgJ2ZvY3VzZWQnLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnZmlsbGVkJ11cbiAgfSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcjogZmNzLmNvbG9yIHx8ICdwcmltYXJ5JyxcbiAgICBjb21wb25lbnQsXG4gICAgZGlzYWJsZWQ6IGZjcy5kaXNhYmxlZCxcbiAgICBlcnJvcjogZmNzLmVycm9yLFxuICAgIGZpbGxlZDogZmNzLmZpbGxlZCxcbiAgICBmb2N1c2VkOiBmY3MuZm9jdXNlZCxcbiAgICByZXF1aXJlZDogZmNzLnJlcXVpcmVkXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoRm9ybUxhYmVsUm9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBjb21wb25lbnQsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIHJlZjogcmVmXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IFtjaGlsZHJlbiwgZmNzLnJlcXVpcmVkICYmIC8qI19fUFVSRV9fKi9fanN4cyhBc3Rlcmlza0NvbXBvbmVudCwge1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5hc3RlcmlzayxcbiAgICAgIGNoaWxkcmVuOiBbXCJcXHUyMDA5XCIsICcqJ11cbiAgICB9KV1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGb3JtTGFiZWwucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnZXJyb3InLCAnaW5mbycsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBhIGRpc2FibGVkIHN0YXRlLlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgZGlzcGxheWVkIGluIGFuIGVycm9yIHN0YXRlLlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgc2hvdWxkIHVzZSBmaWxsZWQgY2xhc3NlcyBrZXkuXG4gICAqL1xuICBmaWxsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaW5wdXQgb2YgdGhpcyBsYWJlbCBpcyBmb2N1c2VkICh1c2VkIGJ5IGBGb3JtR3JvdXBgIGNvbXBvbmVudHMpLlxuICAgKi9cbiAgZm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCB3aWxsIGluZGljYXRlIHRoYXQgdGhlIGBpbnB1dGAgaXMgcmVxdWlyZWQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBGb3JtTGFiZWw7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dExhYmVsVXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUlucHV0TGFiZWwnLCBzbG90KTtcbn1cbmNvbnN0IGlucHV0TGFiZWxDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpSW5wdXRMYWJlbCcsIFsncm9vdCcsICdmb2N1c2VkJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ3JlcXVpcmVkJywgJ2FzdGVyaXNrJywgJ2Zvcm1Db250cm9sJywgJ3NpemVTbWFsbCcsICdzaHJpbmsnLCAnYW5pbWF0ZWQnLCAnc3RhbmRhcmQnLCAnZmlsbGVkJywgJ291dGxpbmVkJ10pO1xuZXhwb3J0IGRlZmF1bHQgaW5wdXRMYWJlbENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiZGlzYWJsZUFuaW1hdGlvblwiLCBcIm1hcmdpblwiLCBcInNocmlua1wiLCBcInZhcmlhbnRcIiwgXCJjbGFzc05hbWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgRm9ybUxhYmVsLCB7IGZvcm1MYWJlbENsYXNzZXMgfSBmcm9tICcuLi9Gb3JtTGFiZWwnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgZ2V0SW5wdXRMYWJlbFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9pbnB1dExhYmVsQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZm9ybUNvbnRyb2wsXG4gICAgc2l6ZSxcbiAgICBzaHJpbmssXG4gICAgZGlzYWJsZUFuaW1hdGlvbixcbiAgICB2YXJpYW50LFxuICAgIHJlcXVpcmVkXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBmb3JtQ29udHJvbCAmJiAnZm9ybUNvbnRyb2wnLCAhZGlzYWJsZUFuaW1hdGlvbiAmJiAnYW5pbWF0ZWQnLCBzaHJpbmsgJiYgJ3NocmluaycsIHNpemUgJiYgc2l6ZSAhPT0gJ25vcm1hbCcgJiYgYHNpemUke2NhcGl0YWxpemUoc2l6ZSl9YCwgdmFyaWFudF0sXG4gICAgYXN0ZXJpc2s6IFtyZXF1aXJlZCAmJiAnYXN0ZXJpc2snXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0SW5wdXRMYWJlbFV0aWxpdHlDbGFzc2VzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcbmNvbnN0IElucHV0TGFiZWxSb290ID0gc3R5bGVkKEZvcm1MYWJlbCwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpSW5wdXRMYWJlbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3tcbiAgICAgIFtgJiAuJHtmb3JtTGFiZWxDbGFzc2VzLmFzdGVyaXNrfWBdOiBzdHlsZXMuYXN0ZXJpc2tcbiAgICB9LCBzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5mb3JtQ29udHJvbCAmJiBzdHlsZXMuZm9ybUNvbnRyb2wsIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiBzdHlsZXMuc2l6ZVNtYWxsLCBvd25lclN0YXRlLnNocmluayAmJiBzdHlsZXMuc2hyaW5rLCAhb3duZXJTdGF0ZS5kaXNhYmxlQW5pbWF0aW9uICYmIHN0eWxlcy5hbmltYXRlZCwgb3duZXJTdGF0ZS5mb2N1c2VkICYmIHN0eWxlcy5mb2N1c2VkLCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdibG9jaycsXG4gIHRyYW5zZm9ybU9yaWdpbjogJ3RvcCBsZWZ0JyxcbiAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICBtYXhXaWR0aDogJzEwMCUnXG59LCBvd25lclN0YXRlLmZvcm1Db250cm9sICYmIHtcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIGxlZnQ6IDAsXG4gIHRvcDogMCxcbiAgLy8gc2xpZ2h0IGFsdGVyYXRpb24gdG8gc3BlYyBzcGFjaW5nIHRvIG1hdGNoIHZpc3VhbCBzcGVjIHJlc3VsdFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMCwgMjBweCkgc2NhbGUoMSknXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICAvLyBDb21wZW5zYXRpb24gZm9yIHRoZSBgSW5wdXQuaW5wdXRTaXplU21hbGxgIHN0eWxlLlxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMCwgMTdweCkgc2NhbGUoMSknXG59LCBvd25lclN0YXRlLnNocmluayAmJiB7XG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgwLCAtMS41cHgpIHNjYWxlKDAuNzUpJyxcbiAgdHJhbnNmb3JtT3JpZ2luOiAndG9wIGxlZnQnLFxuICBtYXhXaWR0aDogJzEzMyUnXG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlQW5pbWF0aW9uICYmIHtcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKFsnY29sb3InLCAndHJhbnNmb3JtJywgJ21heC13aWR0aCddLCB7XG4gICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXIsXG4gICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICB9KVxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZmlsbGVkJyAmJiBfZXh0ZW5kcyh7XG4gIC8vIENocm9tZSdzIGF1dG9maWxsIGZlYXR1cmUgZ2l2ZXMgdGhlIGlucHV0IGZpZWxkIGEgeWVsbG93IGJhY2tncm91bmQuXG4gIC8vIFNpbmNlIHRoZSBpbnB1dCBmaWVsZCBpcyBiZWhpbmQgdGhlIGxhYmVsIGluIHRoZSBIVE1MIHRyZWUsXG4gIC8vIHRoZSBpbnB1dCBmaWVsZCBpcyBkcmF3biBsYXN0IGFuZCBoaWRlcyB0aGUgbGFiZWwgd2l0aCBhbiBvcGFxdWUgYmFja2dyb3VuZCBjb2xvci5cbiAgLy8gekluZGV4OiAxIHdpbGwgcmFpc2UgdGhlIGxhYmVsIGFib3ZlIG9wYXF1ZSBiYWNrZ3JvdW5kLWNvbG9ycyBvZiBpbnB1dC5cbiAgekluZGV4OiAxLFxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxMnB4LCAxNnB4KSBzY2FsZSgxKScsXG4gIG1heFdpZHRoOiAnY2FsYygxMDAlIC0gMjRweCknXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTJweCwgMTNweCkgc2NhbGUoMSknXG59LCBvd25lclN0YXRlLnNocmluayAmJiBfZXh0ZW5kcyh7XG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgcG9pbnRlckV2ZW50czogJ2F1dG8nLFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTJweCwgN3B4KSBzY2FsZSgwLjc1KScsXG4gIG1heFdpZHRoOiAnY2FsYygxMzMlIC0gMjRweCknXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTJweCwgNHB4KSBzY2FsZSgwLjc1KSdcbn0pKSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIF9leHRlbmRzKHtcbiAgLy8gc2VlIGNvbW1lbnQgYWJvdmUgb24gZmlsbGVkLnpJbmRleFxuICB6SW5kZXg6IDEsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDE0cHgsIDE2cHgpIHNjYWxlKDEpJyxcbiAgbWF4V2lkdGg6ICdjYWxjKDEwMCUgLSAyNHB4KSdcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxNHB4LCA5cHgpIHNjYWxlKDEpJ1xufSwgb3duZXJTdGF0ZS5zaHJpbmsgJiYge1xuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIHBvaW50ZXJFdmVudHM6ICdhdXRvJyxcbiAgLy8gVGhlb3JldGljYWxseSwgd2Ugc2hvdWxkIGhhdmUgKDgrNSkqMi8wLjc1ID0gMzRweFxuICAvLyBidXQgaXQgZmVlbHMgYSBiZXR0ZXIgd2hlbiBpdCBibGVlZHMgYSBiaXQgb24gdGhlIGxlZnQsIHNvIDMycHguXG4gIG1heFdpZHRoOiAnY2FsYygxMzMlIC0gMzJweCknLFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTRweCwgLTlweCkgc2NhbGUoMC43NSknXG59KSkpO1xuY29uc3QgSW5wdXRMYWJlbCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIElucHV0TGFiZWwoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBuYW1lOiAnTXVpSW5wdXRMYWJlbCcsXG4gICAgcHJvcHM6IGluUHJvcHNcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGRpc2FibGVBbmltYXRpb24gPSBmYWxzZSxcbiAgICAgIHNocmluazogc2hyaW5rUHJvcCxcbiAgICAgIGNsYXNzTmFtZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGxldCBzaHJpbmsgPSBzaHJpbmtQcm9wO1xuICBpZiAodHlwZW9mIHNocmluayA9PT0gJ3VuZGVmaW5lZCcgJiYgbXVpRm9ybUNvbnRyb2wpIHtcbiAgICBzaHJpbmsgPSBtdWlGb3JtQ29udHJvbC5maWxsZWQgfHwgbXVpRm9ybUNvbnRyb2wuZm9jdXNlZCB8fCBtdWlGb3JtQ29udHJvbC5hZG9ybmVkU3RhcnQ7XG4gIH1cbiAgY29uc3QgZmNzID0gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gICAgcHJvcHMsXG4gICAgbXVpRm9ybUNvbnRyb2wsXG4gICAgc3RhdGVzOiBbJ3NpemUnLCAndmFyaWFudCcsICdyZXF1aXJlZCcsICdmb2N1c2VkJ11cbiAgfSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBkaXNhYmxlQW5pbWF0aW9uLFxuICAgIGZvcm1Db250cm9sOiBtdWlGb3JtQ29udHJvbCxcbiAgICBzaHJpbmssXG4gICAgc2l6ZTogZmNzLnNpemUsXG4gICAgdmFyaWFudDogZmNzLnZhcmlhbnQsXG4gICAgcmVxdWlyZWQ6IGZjcy5yZXF1aXJlZCxcbiAgICBmb2N1c2VkOiBmY3MuZm9jdXNlZFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goSW5wdXRMYWJlbFJvb3QsIF9leHRlbmRzKHtcbiAgICBcImRhdGEtc2hyaW5rXCI6IHNocmluayxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIHJlZjogcmVmLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSlcbiAgfSwgb3RoZXIsIHtcbiAgICBjbGFzc2VzOiBjbGFzc2VzXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gSW5wdXRMYWJlbC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydlcnJvcicsICdpbmZvJywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdHJhbnNpdGlvbiBhbmltYXRpb24gaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlQW5pbWF0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGRpc3BsYXllZCBpbiBhbiBlcnJvciBzdGF0ZS5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgb2YgdGhpcyBsYWJlbCBpcyBmb2N1c2VkLlxuICAgKi9cbiAgZm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nLiBUaGlzIGlzIG5vcm1hbGx5IG9idGFpbmVkIHZpYSBjb250ZXh0IGZyb21cbiAgICogRm9ybUNvbnRyb2wuXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJ10pLFxuICAvKipcbiAgICogaWYgYHRydWVgLCB0aGUgbGFiZWwgd2lsbCBpbmRpY2F0ZSB0aGF0IHRoZSBgaW5wdXRgIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgc2hydW5rLlxuICAgKi9cbiAgc2hyaW5rOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0ICdub3JtYWwnXG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ25vcm1hbCcsICdzbWFsbCddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgSW5wdXRMYWJlbDsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpc3RVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUxpc3QnLCBzbG90KTtcbn1cbmNvbnN0IGxpc3RDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpTGlzdCcsIFsncm9vdCcsICdwYWRkaW5nJywgJ2RlbnNlJywgJ3N1YmhlYWRlciddKTtcbmV4cG9ydCBkZWZhdWx0IGxpc3RDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZGVuc2VcIiwgXCJkaXNhYmxlUGFkZGluZ1wiLCBcInN1YmhlYWRlclwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgTGlzdENvbnRleHQgZnJvbSAnLi9MaXN0Q29udGV4dCc7XG5pbXBvcnQgeyBnZXRMaXN0VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9saXN0Q2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZGlzYWJsZVBhZGRpbmcsXG4gICAgZGVuc2UsXG4gICAgc3ViaGVhZGVyXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCAhZGlzYWJsZVBhZGRpbmcgJiYgJ3BhZGRpbmcnLCBkZW5zZSAmJiAnZGVuc2UnLCBzdWJoZWFkZXIgJiYgJ3N1YmhlYWRlciddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TGlzdFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgTGlzdFJvb3QgPSBzdHlsZWQoJ3VsJywge1xuICBuYW1lOiAnTXVpTGlzdCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCAhb3duZXJTdGF0ZS5kaXNhYmxlUGFkZGluZyAmJiBzdHlsZXMucGFkZGluZywgb3duZXJTdGF0ZS5kZW5zZSAmJiBzdHlsZXMuZGVuc2UsIG93bmVyU3RhdGUuc3ViaGVhZGVyICYmIHN0eWxlcy5zdWJoZWFkZXJdO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGxpc3RTdHlsZTogJ25vbmUnLFxuICBtYXJnaW46IDAsXG4gIHBhZGRpbmc6IDAsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnXG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlUGFkZGluZyAmJiB7XG4gIHBhZGRpbmdUb3A6IDgsXG4gIHBhZGRpbmdCb3R0b206IDhcbn0sIG93bmVyU3RhdGUuc3ViaGVhZGVyICYmIHtcbiAgcGFkZGluZ1RvcDogMFxufSkpO1xuY29uc3QgTGlzdCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIExpc3QoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpTGlzdCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ3VsJyxcbiAgICAgIGRlbnNlID0gZmFsc2UsXG4gICAgICBkaXNhYmxlUGFkZGluZyA9IGZhbHNlLFxuICAgICAgc3ViaGVhZGVyXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgZGVuc2VcbiAgfSksIFtkZW5zZV0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29tcG9uZW50LFxuICAgIGRlbnNlLFxuICAgIGRpc2FibGVQYWRkaW5nXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChMaXN0Q29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb250ZXh0LFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeHMoTGlzdFJvb3QsIF9leHRlbmRzKHtcbiAgICAgIGFzOiBjb21wb25lbnQsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgICAgcmVmOiByZWYsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSwgb3RoZXIsIHtcbiAgICAgIGNoaWxkcmVuOiBbc3ViaGVhZGVyLCBjaGlsZHJlbl1cbiAgICB9KSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IExpc3QucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgY29tcGFjdCB2ZXJ0aWNhbCBwYWRkaW5nIGRlc2lnbmVkIGZvciBrZXlib2FyZCBhbmQgbW91c2UgaW5wdXQgaXMgdXNlZCBmb3JcbiAgICogdGhlIGxpc3QgYW5kIGxpc3QgaXRlbXMuXG4gICAqIFRoZSBwcm9wIGlzIGF2YWlsYWJsZSB0byBkZXNjZW5kYW50IGNvbXBvbmVudHMgYXMgdGhlIGBkZW5zZWAgY29udGV4dC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlbnNlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdmVydGljYWwgcGFkZGluZyBpcyByZW1vdmVkIGZyb20gdGhlIGxpc3QuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUGFkZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgc3ViaGVhZGVyLCBub3JtYWxseSBgTGlzdFN1YmhlYWRlcmAuXG4gICAqL1xuICBzdWJoZWFkZXI6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTGlzdDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBMaXN0Q29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHt9KTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIExpc3RDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0xpc3RDb250ZXh0Jztcbn1cbmV4cG9ydCBkZWZhdWx0IExpc3RDb250ZXh0OyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlzdEl0ZW1VdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUxpc3RJdGVtJywgc2xvdCk7XG59XG5jb25zdCBsaXN0SXRlbUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlMaXN0SXRlbScsIFsncm9vdCcsICdjb250YWluZXInLCAnZm9jdXNWaXNpYmxlJywgJ2RlbnNlJywgJ2FsaWduSXRlbXNGbGV4U3RhcnQnLCAnZGlzYWJsZWQnLCAnZGl2aWRlcicsICdndXR0ZXJzJywgJ3BhZGRpbmcnLCAnYnV0dG9uJywgJ3NlY29uZGFyeUFjdGlvbicsICdzZWxlY3RlZCddKTtcbmV4cG9ydCBkZWZhdWx0IGxpc3RJdGVtQ2xhc3NlczsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uQ2xhc3Nlc1V0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24nLCBzbG90KTtcbn1cbmNvbnN0IGxpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUxpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uJywgWydyb290JywgJ2Rpc2FibGVHdXR0ZXJzJ10pO1xuZXhwb3J0IGRlZmF1bHQgbGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb25DbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgTGlzdENvbnRleHQgZnJvbSAnLi4vTGlzdC9MaXN0Q29udGV4dCc7XG5pbXBvcnQgeyBnZXRMaXN0SXRlbVNlY29uZGFyeUFjdGlvbkNsYXNzZXNVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2xpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGRpc2FibGVHdXR0ZXJzLFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGRpc2FibGVHdXR0ZXJzICYmICdkaXNhYmxlR3V0dGVycyddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb25DbGFzc2VzVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBMaXN0SXRlbVNlY29uZGFyeUFjdGlvblJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aUxpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuZGlzYWJsZUd1dHRlcnMgJiYgc3R5bGVzLmRpc2FibGVHdXR0ZXJzXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgcmlnaHQ6IDE2LFxuICB0b3A6ICc1MCUnLFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC01MCUpJ1xufSwgb3duZXJTdGF0ZS5kaXNhYmxlR3V0dGVycyAmJiB7XG4gIHJpZ2h0OiAwXG59KSk7XG5cbi8qKlxuICogTXVzdCBiZSB1c2VkIGFzIHRoZSBsYXN0IGNoaWxkIG9mIExpc3RJdGVtIHRvIGZ1bmN0aW9uIHByb3Blcmx5LlxuICovXG5jb25zdCBMaXN0SXRlbVNlY29uZGFyeUFjdGlvbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUxpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KExpc3RDb250ZXh0KTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGRpc2FibGVHdXR0ZXJzOiBjb250ZXh0LmRpc2FibGVHdXR0ZXJzXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChMaXN0SXRlbVNlY29uZGFyeUFjdGlvblJvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24ucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudCwgbm9ybWFsbHkgYW4gYEljb25CdXR0b25gIG9yIHNlbGVjdGlvbiBjb250cm9sLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbkxpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uLm11aU5hbWUgPSAnTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24nO1xuZXhwb3J0IGRlZmF1bHQgTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb247IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCJdLFxuICBfZXhjbHVkZWQyID0gW1wiYWxpZ25JdGVtc1wiLCBcImF1dG9Gb2N1c1wiLCBcImJ1dHRvblwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiY29tcG9uZW50c1wiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcIkNvbnRhaW5lckNvbXBvbmVudFwiLCBcIkNvbnRhaW5lclByb3BzXCIsIFwiZGVuc2VcIiwgXCJkaXNhYmxlZFwiLCBcImRpc2FibGVHdXR0ZXJzXCIsIFwiZGlzYWJsZVBhZGRpbmdcIiwgXCJkaXZpZGVyXCIsIFwiZm9jdXNWaXNpYmxlQ2xhc3NOYW1lXCIsIFwic2Vjb25kYXJ5QWN0aW9uXCIsIFwic2VsZWN0ZWRcIiwgXCJzbG90UHJvcHNcIiwgXCJzbG90c1wiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZiBmcm9tICdAbXVpL3V0aWxzL2VsZW1lbnRUeXBlQWNjZXB0aW5nUmVmJztcbmltcG9ydCBjaGFpblByb3BUeXBlcyBmcm9tICdAbXVpL3V0aWxzL2NoYWluUHJvcFR5cGVzJztcbmltcG9ydCB7IGFscGhhIH0gZnJvbSAnQG11aS9zeXN0ZW0vY29sb3JNYW5pcHVsYXRvcic7XG5pbXBvcnQgaXNIb3N0Q29tcG9uZW50IGZyb20gJ0BtdWkvdXRpbHMvaXNIb3N0Q29tcG9uZW50JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgQnV0dG9uQmFzZSBmcm9tICcuLi9CdXR0b25CYXNlJztcbmltcG9ydCBpc011aUVsZW1lbnQgZnJvbSAnLi4vdXRpbHMvaXNNdWlFbGVtZW50JztcbmltcG9ydCB1c2VFbmhhbmNlZEVmZmVjdCBmcm9tICcuLi91dGlscy91c2VFbmhhbmNlZEVmZmVjdCc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCBMaXN0Q29udGV4dCBmcm9tICcuLi9MaXN0L0xpc3RDb250ZXh0JztcbmltcG9ydCBsaXN0SXRlbUNsYXNzZXMsIHsgZ2V0TGlzdEl0ZW1VdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2xpc3RJdGVtQ2xhc3Nlcyc7XG5pbXBvcnQgeyBsaXN0SXRlbUJ1dHRvbkNsYXNzZXMgfSBmcm9tICcuLi9MaXN0SXRlbUJ1dHRvbic7XG5pbXBvcnQgTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24gZnJvbSAnLi4vTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24nO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBjb25zdCBvdmVycmlkZXNSZXNvbHZlciA9IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBvd25lclN0YXRlXG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5kZW5zZSAmJiBzdHlsZXMuZGVuc2UsIG93bmVyU3RhdGUuYWxpZ25JdGVtcyA9PT0gJ2ZsZXgtc3RhcnQnICYmIHN0eWxlcy5hbGlnbkl0ZW1zRmxleFN0YXJ0LCBvd25lclN0YXRlLmRpdmlkZXIgJiYgc3R5bGVzLmRpdmlkZXIsICFvd25lclN0YXRlLmRpc2FibGVHdXR0ZXJzICYmIHN0eWxlcy5ndXR0ZXJzLCAhb3duZXJTdGF0ZS5kaXNhYmxlUGFkZGluZyAmJiBzdHlsZXMucGFkZGluZywgb3duZXJTdGF0ZS5idXR0b24gJiYgc3R5bGVzLmJ1dHRvbiwgb3duZXJTdGF0ZS5oYXNTZWNvbmRhcnlBY3Rpb24gJiYgc3R5bGVzLnNlY29uZGFyeUFjdGlvbl07XG59O1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGFsaWduSXRlbXMsXG4gICAgYnV0dG9uLFxuICAgIGNsYXNzZXMsXG4gICAgZGVuc2UsXG4gICAgZGlzYWJsZWQsXG4gICAgZGlzYWJsZUd1dHRlcnMsXG4gICAgZGlzYWJsZVBhZGRpbmcsXG4gICAgZGl2aWRlcixcbiAgICBoYXNTZWNvbmRhcnlBY3Rpb24sXG4gICAgc2VsZWN0ZWRcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGRlbnNlICYmICdkZW5zZScsICFkaXNhYmxlR3V0dGVycyAmJiAnZ3V0dGVycycsICFkaXNhYmxlUGFkZGluZyAmJiAncGFkZGluZycsIGRpdmlkZXIgJiYgJ2RpdmlkZXInLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBidXR0b24gJiYgJ2J1dHRvbicsIGFsaWduSXRlbXMgPT09ICdmbGV4LXN0YXJ0JyAmJiAnYWxpZ25JdGVtc0ZsZXhTdGFydCcsIGhhc1NlY29uZGFyeUFjdGlvbiAmJiAnc2Vjb25kYXJ5QWN0aW9uJywgc2VsZWN0ZWQgJiYgJ3NlbGVjdGVkJ10sXG4gICAgY29udGFpbmVyOiBbJ2NvbnRhaW5lciddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TGlzdEl0ZW1VdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBMaXN0SXRlbVJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aUxpc3RJdGVtJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtc3RhcnQnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIHRleHREZWNvcmF0aW9uOiAnbm9uZScsXG4gIHdpZHRoOiAnMTAwJScsXG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICB0ZXh0QWxpZ246ICdsZWZ0J1xufSwgIW93bmVyU3RhdGUuZGlzYWJsZVBhZGRpbmcgJiYgX2V4dGVuZHMoe1xuICBwYWRkaW5nVG9wOiA4LFxuICBwYWRkaW5nQm90dG9tOiA4XG59LCBvd25lclN0YXRlLmRlbnNlICYmIHtcbiAgcGFkZGluZ1RvcDogNCxcbiAgcGFkZGluZ0JvdHRvbTogNFxufSwgIW93bmVyU3RhdGUuZGlzYWJsZUd1dHRlcnMgJiYge1xuICBwYWRkaW5nTGVmdDogMTYsXG4gIHBhZGRpbmdSaWdodDogMTZcbn0sICEhb3duZXJTdGF0ZS5zZWNvbmRhcnlBY3Rpb24gJiYge1xuICAvLyBBZGQgc29tZSBzcGFjZSB0byBhdm9pZCBjb2xsaXNpb24gYXMgYExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uYFxuICAvLyBpcyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQuXG4gIHBhZGRpbmdSaWdodDogNDhcbn0pLCAhIW93bmVyU3RhdGUuc2Vjb25kYXJ5QWN0aW9uICYmIHtcbiAgW2AmID4gLiR7bGlzdEl0ZW1CdXR0b25DbGFzc2VzLnJvb3R9YF06IHtcbiAgICBwYWRkaW5nUmlnaHQ6IDQ4XG4gIH1cbn0sIHtcbiAgW2AmLiR7bGlzdEl0ZW1DbGFzc2VzLmZvY3VzVmlzaWJsZX1gXToge1xuICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmZvY3VzXG4gIH0sXG4gIFtgJi4ke2xpc3RJdGVtQ2xhc3Nlcy5zZWxlY3RlZH1gXToge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLnByaW1hcnkubWFpbkNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eX0pYCA6IGFscGhhKHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHkpLFxuICAgIFtgJi4ke2xpc3RJdGVtQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLnByaW1hcnkubWFpbkNoYW5uZWx9IC8gY2FsYygke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5fSArICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5mb2N1c09wYWNpdHl9KSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eSArIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmZvY3VzT3BhY2l0eSlcbiAgICB9XG4gIH0sXG4gIFtgJi4ke2xpc3RJdGVtQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIG9wYWNpdHk6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZE9wYWNpdHlcbiAgfVxufSwgb3duZXJTdGF0ZS5hbGlnbkl0ZW1zID09PSAnZmxleC1zdGFydCcgJiYge1xuICBhbGlnbkl0ZW1zOiAnZmxleC1zdGFydCdcbn0sIG93bmVyU3RhdGUuZGl2aWRlciAmJiB7XG4gIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmRpdmlkZXJ9YCxcbiAgYmFja2dyb3VuZENsaXA6ICdwYWRkaW5nLWJveCdcbn0sIG93bmVyU3RhdGUuYnV0dG9uICYmIHtcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdiYWNrZ3JvdW5kLWNvbG9yJywge1xuICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVzdFxuICB9KSxcbiAgJyY6aG92ZXInOiB7XG4gICAgdGV4dERlY29yYXRpb246ICdub25lJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5ob3ZlcixcbiAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgIH1cbiAgfSxcbiAgW2AmLiR7bGlzdEl0ZW1DbGFzc2VzLnNlbGVjdGVkfTpob3ZlcmBdOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUucHJpbWFyeS5tYWluQ2hhbm5lbH0gLyBjYWxjKCR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHl9ICsgJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eX0pKWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlLnByaW1hcnkubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5ICsgdGhlbWUucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5KSxcbiAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLnByaW1hcnkubWFpbkNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eX0pYCA6IGFscGhhKHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHkpXG4gICAgfVxuICB9XG59LCBvd25lclN0YXRlLmhhc1NlY29uZGFyeUFjdGlvbiAmJiB7XG4gIC8vIEFkZCBzb21lIHNwYWNlIHRvIGF2b2lkIGNvbGxpc2lvbiBhcyBgTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb25gXG4gIC8vIGlzIGFic29sdXRlbHkgcG9zaXRpb25lZC5cbiAgcGFkZGluZ1JpZ2h0OiA0OFxufSkpO1xuY29uc3QgTGlzdEl0ZW1Db250YWluZXIgPSBzdHlsZWQoJ2xpJywge1xuICBuYW1lOiAnTXVpTGlzdEl0ZW0nLFxuICBzbG90OiAnQ29udGFpbmVyJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMuY29udGFpbmVyXG59KSh7XG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnXG59KTtcblxuLyoqXG4gKiBVc2VzIGFuIGFkZGl0aW9uYWwgY29udGFpbmVyIGNvbXBvbmVudCBpZiBgTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb25gIGlzIHRoZSBsYXN0IGNoaWxkLlxuICovXG5jb25zdCBMaXN0SXRlbSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIExpc3RJdGVtKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUxpc3RJdGVtJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgYWxpZ25JdGVtcyA9ICdjZW50ZXInLFxuICAgICAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gICAgICBidXR0b24gPSBmYWxzZSxcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblByb3AsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQ6IGNvbXBvbmVudFByb3AsXG4gICAgICBjb21wb25lbnRzID0ge30sXG4gICAgICBjb21wb25lbnRzUHJvcHMgPSB7fSxcbiAgICAgIENvbnRhaW5lckNvbXBvbmVudCA9ICdsaScsXG4gICAgICBDb250YWluZXJQcm9wczoge1xuICAgICAgICBjbGFzc05hbWU6IENvbnRhaW5lckNsYXNzTmFtZVxuICAgICAgfSA9IHt9LFxuICAgICAgZGVuc2UgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgICBkaXNhYmxlR3V0dGVycyA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVBhZGRpbmcgPSBmYWxzZSxcbiAgICAgIGRpdmlkZXIgPSBmYWxzZSxcbiAgICAgIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSxcbiAgICAgIHNlY29uZGFyeUFjdGlvbixcbiAgICAgIHNlbGVjdGVkID0gZmFsc2UsXG4gICAgICBzbG90UHJvcHMgPSB7fSxcbiAgICAgIHNsb3RzID0ge31cbiAgICB9ID0gcHJvcHMsXG4gICAgQ29udGFpbmVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcy5Db250YWluZXJQcm9wcywgX2V4Y2x1ZGVkKSxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQyKTtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoTGlzdENvbnRleHQpO1xuICBjb25zdCBjaGlsZENvbnRleHQgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgZGVuc2U6IGRlbnNlIHx8IGNvbnRleHQuZGVuc2UgfHwgZmFsc2UsXG4gICAgYWxpZ25JdGVtcyxcbiAgICBkaXNhYmxlR3V0dGVyc1xuICB9KSwgW2FsaWduSXRlbXMsIGNvbnRleHQuZGVuc2UsIGRlbnNlLCBkaXNhYmxlR3V0dGVyc10pO1xuICBjb25zdCBsaXN0SXRlbVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChhdXRvRm9jdXMpIHtcbiAgICAgIGlmIChsaXN0SXRlbVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGxpc3RJdGVtUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IFVuYWJsZSB0byBzZXQgZm9jdXMgdG8gYSBMaXN0SXRlbSB3aG9zZSBjb21wb25lbnQgaGFzIG5vdCBiZWVuIHJlbmRlcmVkLicpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW2F1dG9Gb2N1c10pO1xuICBjb25zdCBjaGlsZHJlbiA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW5Qcm9wKTtcblxuICAvLyB2NCBpbXBsZW1lbnRhdGlvbiwgZGVwcmVjYXRlZCBpbiB2NSwgd2lsbCBiZSByZW1vdmVkIGluIHY2XG4gIGNvbnN0IGhhc1NlY29uZGFyeUFjdGlvbiA9IGNoaWxkcmVuLmxlbmd0aCAmJiBpc011aUVsZW1lbnQoY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0sIFsnTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24nXSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBhbGlnbkl0ZW1zLFxuICAgIGF1dG9Gb2N1cyxcbiAgICBidXR0b24sXG4gICAgZGVuc2U6IGNoaWxkQ29udGV4dC5kZW5zZSxcbiAgICBkaXNhYmxlZCxcbiAgICBkaXNhYmxlR3V0dGVycyxcbiAgICBkaXNhYmxlUGFkZGluZyxcbiAgICBkaXZpZGVyLFxuICAgIGhhc1NlY29uZGFyeUFjdGlvbixcbiAgICBzZWxlY3RlZFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKGxpc3RJdGVtUmVmLCByZWYpO1xuICBjb25zdCBSb290ID0gc2xvdHMucm9vdCB8fCBjb21wb25lbnRzLlJvb3QgfHwgTGlzdEl0ZW1Sb290O1xuICBjb25zdCByb290UHJvcHMgPSBzbG90UHJvcHMucm9vdCB8fCBjb21wb25lbnRzUHJvcHMucm9vdCB8fCB7fTtcbiAgY29uc3QgY29tcG9uZW50UHJvcHMgPSBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgcm9vdFByb3BzLmNsYXNzTmFtZSwgY2xhc3NOYW1lKSxcbiAgICBkaXNhYmxlZFxuICB9LCBvdGhlcik7XG4gIGxldCBDb21wb25lbnQgPSBjb21wb25lbnRQcm9wIHx8ICdsaSc7XG4gIGlmIChidXR0b24pIHtcbiAgICBjb21wb25lbnRQcm9wcy5jb21wb25lbnQgPSBjb21wb25lbnRQcm9wIHx8ICdkaXYnO1xuICAgIGNvbXBvbmVudFByb3BzLmZvY3VzVmlzaWJsZUNsYXNzTmFtZSA9IGNsc3gobGlzdEl0ZW1DbGFzc2VzLmZvY3VzVmlzaWJsZSwgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lKTtcbiAgICBDb21wb25lbnQgPSBCdXR0b25CYXNlO1xuICB9XG5cbiAgLy8gdjQgaW1wbGVtZW50YXRpb24sIGRlcHJlY2F0ZWQgaW4gdjUsIHdpbGwgYmUgcmVtb3ZlZCBpbiB2NlxuICBpZiAoaGFzU2Vjb25kYXJ5QWN0aW9uKSB7XG4gICAgLy8gVXNlIGRpdiBieSBkZWZhdWx0LlxuICAgIENvbXBvbmVudCA9ICFjb21wb25lbnRQcm9wcy5jb21wb25lbnQgJiYgIWNvbXBvbmVudFByb3AgPyAnZGl2JyA6IENvbXBvbmVudDtcblxuICAgIC8vIEF2b2lkIG5lc3Rpbmcgb2YgbGkgPiBsaS5cbiAgICBpZiAoQ29udGFpbmVyQ29tcG9uZW50ID09PSAnbGknKSB7XG4gICAgICBpZiAoQ29tcG9uZW50ID09PSAnbGknKSB7XG4gICAgICAgIENvbXBvbmVudCA9ICdkaXYnO1xuICAgICAgfSBlbHNlIGlmIChjb21wb25lbnRQcm9wcy5jb21wb25lbnQgPT09ICdsaScpIHtcbiAgICAgICAgY29tcG9uZW50UHJvcHMuY29tcG9uZW50ID0gJ2Rpdic7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChMaXN0Q29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IGNoaWxkQ29udGV4dCxcbiAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeHMoTGlzdEl0ZW1Db250YWluZXIsIF9leHRlbmRzKHtcbiAgICAgICAgYXM6IENvbnRhaW5lckNvbXBvbmVudCxcbiAgICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMuY29udGFpbmVyLCBDb250YWluZXJDbGFzc05hbWUpLFxuICAgICAgICByZWY6IGhhbmRsZVJlZixcbiAgICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgICAgfSwgQ29udGFpbmVyUHJvcHMsIHtcbiAgICAgICAgY2hpbGRyZW46IFsvKiNfX1BVUkVfXyovX2pzeChSb290LCBfZXh0ZW5kcyh7fSwgcm9vdFByb3BzLCAhaXNIb3N0Q29tcG9uZW50KFJvb3QpICYmIHtcbiAgICAgICAgICBhczogQ29tcG9uZW50LFxuICAgICAgICAgIG93bmVyU3RhdGU6IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLCByb290UHJvcHMub3duZXJTdGF0ZSlcbiAgICAgICAgfSwgY29tcG9uZW50UHJvcHMsIHtcbiAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgfSkpLCBjaGlsZHJlbi5wb3AoKV1cbiAgICAgIH0pKVxuICAgIH0pO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChMaXN0Q29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjaGlsZENvbnRleHQsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4cyhSb290LCBfZXh0ZW5kcyh7fSwgcm9vdFByb3BzLCB7XG4gICAgICBhczogQ29tcG9uZW50LFxuICAgICAgcmVmOiBoYW5kbGVSZWZcbiAgICB9LCAhaXNIb3N0Q29tcG9uZW50KFJvb3QpICYmIHtcbiAgICAgIG93bmVyU3RhdGU6IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLCByb290UHJvcHMub3duZXJTdGF0ZSlcbiAgICB9LCBjb21wb25lbnRQcm9wcywge1xuICAgICAgY2hpbGRyZW46IFtjaGlsZHJlbiwgc2Vjb25kYXJ5QWN0aW9uICYmIC8qI19fUFVSRV9fKi9fanN4KExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uLCB7XG4gICAgICAgIGNoaWxkcmVuOiBzZWNvbmRhcnlBY3Rpb25cbiAgICAgIH0pXVxuICAgIH0pKVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTGlzdEl0ZW0ucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgYGFsaWduLWl0ZW1zYCBzdHlsZSBwcm9wZXJ0eS5cbiAgICogQGRlZmF1bHQgJ2NlbnRlcidcbiAgICovXG4gIGFsaWduSXRlbXM6IFByb3BUeXBlcy5vbmVPZihbJ2NlbnRlcicsICdmbGV4LXN0YXJ0J10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGlzdCBpdGVtIGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICogRm9jdXMgd2lsbCBhbHNvIGJlIHRyaWdnZXJlZCBpZiB0aGUgdmFsdWUgY2hhbmdlcyBmcm9tIGZhbHNlIHRvIHRydWUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEBkZXByZWNhdGVkIGNoZWNrb3V0IFtMaXN0SXRlbUJ1dHRvbl0oL21hdGVyaWFsLXVpL2FwaS9saXN0LWl0ZW0tYnV0dG9uLykgaW5zdGVhZFxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxpc3QgaXRlbSBpcyBhIGJ1dHRvbiAodXNpbmcgYEJ1dHRvbkJhc2VgKS4gUHJvcHMgaW50ZW5kZWRcbiAgICogZm9yIGBCdXR0b25CYXNlYCBjYW4gdGhlbiBiZSBhcHBsaWVkIHRvIGBMaXN0SXRlbWAuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEBkZXByZWNhdGVkIGNoZWNrb3V0IFtMaXN0SXRlbUJ1dHRvbl0oL21hdGVyaWFsLXVpL2FwaS9saXN0LWl0ZW0tYnV0dG9uLykgaW5zdGVhZFxuICAgKi9cbiAgYnV0dG9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQgaWYgYSBgTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb25gIGlzIHVzZWQgaXQgbXVzdFxuICAgKiBiZSB0aGUgbGFzdCBjaGlsZC5cbiAgICovXG4gIGNoaWxkcmVuOiBjaGFpblByb3BUeXBlcyhQcm9wVHlwZXMubm9kZSwgcHJvcHMgPT4ge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShwcm9wcy5jaGlsZHJlbik7XG5cbiAgICAvLyBSZWFjdC5DaGlsZHJlbi50b0FycmF5KHByb3BzLmNoaWxkcmVuKS5maW5kTGFzdEluZGV4KGlzTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24pXG4gICAgbGV0IHNlY29uZGFyeUFjdGlvbkluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgaSA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaSAtPSAxKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgaWYgKGlzTXVpRWxlbWVudChjaGlsZCwgWydMaXN0SXRlbVNlY29uZGFyeUFjdGlvbiddKSkge1xuICAgICAgICBzZWNvbmRhcnlBY3Rpb25JbmRleCA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vICBpcyBMaXN0SXRlbVNlY29uZGFyeUFjdGlvbiB0aGUgbGFzdCBjaGlsZCBvZiBMaXN0SXRlbVxuICAgIGlmIChzZWNvbmRhcnlBY3Rpb25JbmRleCAhPT0gLTEgJiYgc2Vjb25kYXJ5QWN0aW9uSW5kZXggIT09IGNoaWxkcmVuLmxlbmd0aCAtIDEpIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01VSTogWW91IHVzZWQgYW4gZWxlbWVudCBhZnRlciBMaXN0SXRlbVNlY29uZGFyeUFjdGlvbi4gJyArICdGb3IgTGlzdEl0ZW0gdG8gZGV0ZWN0IHRoYXQgaXQgaGFzIGEgc2Vjb25kYXJ5IGFjdGlvbiAnICsgJ3lvdSBtdXN0IHBhc3MgaXQgYXMgdGhlIGxhc3QgY2hpbGQgdG8gTGlzdEl0ZW0uJyk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9KSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90c2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90c2AgcHJvcCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RQcm9wc2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90UHJvcHNgIHByb3AgaW5zdGVhZCwgYXMgYGNvbXBvbmVudHNQcm9wc2Agd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcm9vdDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb250YWluZXIgY29tcG9uZW50IHVzZWQgd2hlbiBhIGBMaXN0SXRlbVNlY29uZGFyeUFjdGlvbmAgaXMgdGhlIGxhc3QgY2hpbGQuXG4gICAqIEBkZWZhdWx0ICdsaSdcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIENvbnRhaW5lckNvbXBvbmVudDogZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBjb250YWluZXIgY29tcG9uZW50IGlmIHVzZWQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBDb250YWluZXJQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgY29tcGFjdCB2ZXJ0aWNhbCBwYWRkaW5nIGRlc2lnbmVkIGZvciBrZXlib2FyZCBhbmQgbW91c2UgaW5wdXQgaXMgdXNlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgTGlzdCBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZW5zZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEBkZXByZWNhdGVkIGNoZWNrb3V0IFtMaXN0SXRlbUJ1dHRvbl0oL21hdGVyaWFsLXVpL2FwaS9saXN0LWl0ZW0tYnV0dG9uLykgaW5zdGVhZFxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGVmdCBhbmQgcmlnaHQgcGFkZGluZyBpcyByZW1vdmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUd1dHRlcnM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBhbGwgcGFkZGluZyBpcyByZW1vdmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVBhZGRpbmc6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIDFweCBsaWdodCBib3JkZXIgaXMgYWRkZWQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgbGlzdCBpdGVtLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGl2aWRlcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBmb2N1c1Zpc2libGVDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB0byBkaXNwbGF5IGF0IHRoZSBlbmQgb2YgTGlzdEl0ZW0uXG4gICAqL1xuICBzZWNvbmRhcnlBY3Rpb246IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVXNlIHRvIGFwcGx5IHNlbGVjdGVkIHN0eWxpbmcuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEBkZXByZWNhdGVkIGNoZWNrb3V0IFtMaXN0SXRlbUJ1dHRvbl0oL21hdGVyaWFsLXVpL2FwaS9saXN0LWl0ZW0tYnV0dG9uLykgaW5zdGVhZFxuICAgKi9cbiAgc2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBjb21wb25lbnRzUHJvcHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHJvb3Q6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c2AgcHJvcCwgd2hpY2ggd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBMaXN0SXRlbTsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhbGlnbkl0ZW1zXCIsIFwiYXV0b0ZvY3VzXCIsIFwiY29tcG9uZW50XCIsIFwiY2hpbGRyZW5cIiwgXCJkZW5zZVwiLCBcImRpc2FibGVHdXR0ZXJzXCIsIFwiZGl2aWRlclwiLCBcImZvY3VzVmlzaWJsZUNsYXNzTmFtZVwiLCBcInNlbGVjdGVkXCIsIFwiY2xhc3NOYW1lXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgYWxwaGEgfSBmcm9tICdAbXVpL3N5c3RlbS9jb2xvck1hbmlwdWxhdG9yJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgQnV0dG9uQmFzZSBmcm9tICcuLi9CdXR0b25CYXNlJztcbmltcG9ydCB1c2VFbmhhbmNlZEVmZmVjdCBmcm9tICcuLi91dGlscy91c2VFbmhhbmNlZEVmZmVjdCc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCBMaXN0Q29udGV4dCBmcm9tICcuLi9MaXN0L0xpc3RDb250ZXh0JztcbmltcG9ydCBsaXN0SXRlbUJ1dHRvbkNsYXNzZXMsIHsgZ2V0TGlzdEl0ZW1CdXR0b25VdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2xpc3RJdGVtQnV0dG9uQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGNvbnN0IG92ZXJyaWRlc1Jlc29sdmVyID0gKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgY29uc3Qge1xuICAgIG93bmVyU3RhdGVcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLmRlbnNlICYmIHN0eWxlcy5kZW5zZSwgb3duZXJTdGF0ZS5hbGlnbkl0ZW1zID09PSAnZmxleC1zdGFydCcgJiYgc3R5bGVzLmFsaWduSXRlbXNGbGV4U3RhcnQsIG93bmVyU3RhdGUuZGl2aWRlciAmJiBzdHlsZXMuZGl2aWRlciwgIW93bmVyU3RhdGUuZGlzYWJsZUd1dHRlcnMgJiYgc3R5bGVzLmd1dHRlcnNdO1xufTtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhbGlnbkl0ZW1zLFxuICAgIGNsYXNzZXMsXG4gICAgZGVuc2UsXG4gICAgZGlzYWJsZWQsXG4gICAgZGlzYWJsZUd1dHRlcnMsXG4gICAgZGl2aWRlcixcbiAgICBzZWxlY3RlZFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgZGVuc2UgJiYgJ2RlbnNlJywgIWRpc2FibGVHdXR0ZXJzICYmICdndXR0ZXJzJywgZGl2aWRlciAmJiAnZGl2aWRlcicsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIGFsaWduSXRlbXMgPT09ICdmbGV4LXN0YXJ0JyAmJiAnYWxpZ25JdGVtc0ZsZXhTdGFydCcsIHNlbGVjdGVkICYmICdzZWxlY3RlZCddXG4gIH07XG4gIGNvbnN0IGNvbXBvc2VkQ2xhc3NlcyA9IGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRMaXN0SXRlbUJ1dHRvblV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgY2xhc3NlcywgY29tcG9zZWRDbGFzc2VzKTtcbn07XG5jb25zdCBMaXN0SXRlbUJ1dHRvblJvb3QgPSBzdHlsZWQoQnV0dG9uQmFzZSwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpTGlzdEl0ZW1CdXR0b24nLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyXG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIGZsZXhHcm93OiAxLFxuICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtc3RhcnQnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIHRleHREZWNvcmF0aW9uOiAnbm9uZScsXG4gIG1pbldpZHRoOiAwLFxuICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgdGV4dEFsaWduOiAnbGVmdCcsXG4gIHBhZGRpbmdUb3A6IDgsXG4gIHBhZGRpbmdCb3R0b206IDgsXG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnYmFja2dyb3VuZC1jb2xvcicsIHtcbiAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlc3RcbiAgfSksXG4gICcmOmhvdmVyJzoge1xuICAgIHRleHREZWNvcmF0aW9uOiAnbm9uZScsXG4gICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uaG92ZXIsXG4gICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICB9XG4gIH0sXG4gIFtgJi4ke2xpc3RJdGVtQnV0dG9uQ2xhc3Nlcy5zZWxlY3RlZH1gXToge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLnByaW1hcnkubWFpbkNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eX0pYCA6IGFscGhhKHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHkpLFxuICAgIFtgJi4ke2xpc3RJdGVtQnV0dG9uQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLnByaW1hcnkubWFpbkNoYW5uZWx9IC8gY2FsYygke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5fSArICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5mb2N1c09wYWNpdHl9KSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eSArIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmZvY3VzT3BhY2l0eSlcbiAgICB9XG4gIH0sXG4gIFtgJi4ke2xpc3RJdGVtQnV0dG9uQ2xhc3Nlcy5zZWxlY3RlZH06aG92ZXJgXToge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLnByaW1hcnkubWFpbkNoYW5uZWx9IC8gY2FsYygke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5fSArICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHl9KSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eSArIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eSksXG4gICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5wcmltYXJ5Lm1haW5DaGFubmVsfSAvICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHl9KWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlLnByaW1hcnkubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5KVxuICAgIH1cbiAgfSxcbiAgW2AmLiR7bGlzdEl0ZW1CdXR0b25DbGFzc2VzLmZvY3VzVmlzaWJsZX1gXToge1xuICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmZvY3VzXG4gIH0sXG4gIFtgJi4ke2xpc3RJdGVtQnV0dG9uQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIG9wYWNpdHk6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZE9wYWNpdHlcbiAgfVxufSwgb3duZXJTdGF0ZS5kaXZpZGVyICYmIHtcbiAgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICR7KHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZGl2aWRlcn1gLFxuICBiYWNrZ3JvdW5kQ2xpcDogJ3BhZGRpbmctYm94J1xufSwgb3duZXJTdGF0ZS5hbGlnbkl0ZW1zID09PSAnZmxleC1zdGFydCcgJiYge1xuICBhbGlnbkl0ZW1zOiAnZmxleC1zdGFydCdcbn0sICFvd25lclN0YXRlLmRpc2FibGVHdXR0ZXJzICYmIHtcbiAgcGFkZGluZ0xlZnQ6IDE2LFxuICBwYWRkaW5nUmlnaHQ6IDE2XG59LCBvd25lclN0YXRlLmRlbnNlICYmIHtcbiAgcGFkZGluZ1RvcDogNCxcbiAgcGFkZGluZ0JvdHRvbTogNFxufSkpO1xuY29uc3QgTGlzdEl0ZW1CdXR0b24gPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBMaXN0SXRlbUJ1dHRvbihpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlMaXN0SXRlbUJ1dHRvbidcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGFsaWduSXRlbXMgPSAnY2VudGVyJyxcbiAgICAgIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICAgICAgY29tcG9uZW50ID0gJ2RpdicsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGRlbnNlID0gZmFsc2UsXG4gICAgICBkaXNhYmxlR3V0dGVycyA9IGZhbHNlLFxuICAgICAgZGl2aWRlciA9IGZhbHNlLFxuICAgICAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lLFxuICAgICAgc2VsZWN0ZWQgPSBmYWxzZSxcbiAgICAgIGNsYXNzTmFtZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChMaXN0Q29udGV4dCk7XG4gIGNvbnN0IGNoaWxkQ29udGV4dCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBkZW5zZTogZGVuc2UgfHwgY29udGV4dC5kZW5zZSB8fCBmYWxzZSxcbiAgICBhbGlnbkl0ZW1zLFxuICAgIGRpc2FibGVHdXR0ZXJzXG4gIH0pLCBbYWxpZ25JdGVtcywgY29udGV4dC5kZW5zZSwgZGVuc2UsIGRpc2FibGVHdXR0ZXJzXSk7XG4gIGNvbnN0IGxpc3RJdGVtUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGF1dG9Gb2N1cykge1xuICAgICAgaWYgKGxpc3RJdGVtUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgbGlzdEl0ZW1SZWYuY3VycmVudC5mb2N1cygpO1xuICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogVW5hYmxlIHRvIHNldCBmb2N1cyB0byBhIExpc3RJdGVtQnV0dG9uIHdob3NlIGNvbXBvbmVudCBoYXMgbm90IGJlZW4gcmVuZGVyZWQuJyk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbYXV0b0ZvY3VzXSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBhbGlnbkl0ZW1zLFxuICAgIGRlbnNlOiBjaGlsZENvbnRleHQuZGVuc2UsXG4gICAgZGlzYWJsZUd1dHRlcnMsXG4gICAgZGl2aWRlcixcbiAgICBzZWxlY3RlZFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKGxpc3RJdGVtUmVmLCByZWYpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTGlzdENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY2hpbGRDb250ZXh0LFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChMaXN0SXRlbUJ1dHRvblJvb3QsIF9leHRlbmRzKHtcbiAgICAgIHJlZjogaGFuZGxlUmVmLFxuICAgICAgaHJlZjogb3RoZXIuaHJlZiB8fCBvdGhlci50b1xuICAgICAgLy8gYEJ1dHRvbkJhc2VgIHByb2Nlc3NlcyBgaHJlZmAgb3IgYHRvYCBpZiBgY29tcG9uZW50YCBpcyBzZXQgdG8gJ2J1dHRvbidcbiAgICAgICxcbiAgICAgIGNvbXBvbmVudDogKG90aGVyLmhyZWYgfHwgb3RoZXIudG8pICYmIGNvbXBvbmVudCA9PT0gJ2RpdicgPyAnYnV0dG9uJyA6IGNvbXBvbmVudCxcbiAgICAgIGZvY3VzVmlzaWJsZUNsYXNzTmFtZTogY2xzeChjbGFzc2VzLmZvY3VzVmlzaWJsZSwgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lKSxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpXG4gICAgfSwgb3RoZXIsIHtcbiAgICAgIGNsYXNzZXM6IGNsYXNzZXMsXG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IExpc3RJdGVtQnV0dG9uLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIGBhbGlnbi1pdGVtc2Agc3R5bGUgcHJvcGVydHkuXG4gICAqIEBkZWZhdWx0ICdjZW50ZXInXG4gICAqL1xuICBhbGlnbkl0ZW1zOiBQcm9wVHlwZXMub25lT2YoWydjZW50ZXInLCAnZmxleC1zdGFydCddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxpc3QgaXRlbSBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqIEZvY3VzIHdpbGwgYWxzbyBiZSB0cmlnZ2VyZWQgaWYgdGhlIHZhbHVlIGNoYW5nZXMgZnJvbSBmYWxzZSB0byB0cnVlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQgaWYgYSBgTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb25gIGlzIHVzZWQgaXQgbXVzdFxuICAgKiBiZSB0aGUgbGFzdCBjaGlsZC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgY29tcGFjdCB2ZXJ0aWNhbCBwYWRkaW5nIGRlc2lnbmVkIGZvciBrZXlib2FyZCBhbmQgbW91c2UgaW5wdXQgaXMgdXNlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgTGlzdCBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZW5zZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsZWZ0IGFuZCByaWdodCBwYWRkaW5nIGlzIHJlbW92ZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlR3V0dGVyczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgMXB4IGxpZ2h0IGJvcmRlciBpcyBhZGRlZCB0byB0aGUgYm90dG9tIG9mIHRoZSBsaXN0IGl0ZW0uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXZpZGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBjYW4gaGVscCBpZGVudGlmeSB3aGljaCBlbGVtZW50IGhhcyBrZXlib2FyZCBmb2N1cy5cbiAgICogVGhlIGNsYXNzIG5hbWUgd2lsbCBiZSBhcHBsaWVkIHdoZW4gdGhlIGVsZW1lbnQgZ2FpbnMgdGhlIGZvY3VzIHRocm91Z2gga2V5Ym9hcmQgaW50ZXJhY3Rpb24uXG4gICAqIEl0J3MgYSBwb2x5ZmlsbCBmb3IgdGhlIFtDU1MgOmZvY3VzLXZpc2libGUgc2VsZWN0b3JdKGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9zZWxlY3RvcnMtNC8jdGhlLWZvY3VzLXZpc2libGUtcHNldWRvKS5cbiAgICogVGhlIHJhdGlvbmFsZSBmb3IgdXNpbmcgdGhpcyBmZWF0dXJlIFtpcyBleHBsYWluZWQgaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvZm9jdXMtdmlzaWJsZS9ibG9iL0hFQUQvZXhwbGFpbmVyLm1kKS5cbiAgICogQSBbcG9seWZpbGwgY2FuIGJlIHVzZWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL2ZvY3VzLXZpc2libGUpIHRvIGFwcGx5IGEgYGZvY3VzLXZpc2libGVgIGNsYXNzIHRvIG90aGVyIGNvbXBvbmVudHNcbiAgICogaWYgbmVlZGVkLlxuICAgKi9cbiAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFVzZSB0byBhcHBseSBzZWxlY3RlZCBzdHlsaW5nLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTGlzdEl0ZW1CdXR0b247IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0SXRlbUJ1dHRvblV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTGlzdEl0ZW1CdXR0b24nLCBzbG90KTtcbn1cbmNvbnN0IGxpc3RJdGVtQnV0dG9uQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUxpc3RJdGVtQnV0dG9uJywgWydyb290JywgJ2ZvY3VzVmlzaWJsZScsICdkZW5zZScsICdhbGlnbkl0ZW1zRmxleFN0YXJ0JywgJ2Rpc2FibGVkJywgJ2RpdmlkZXInLCAnZ3V0dGVycycsICdzZWxlY3RlZCddKTtcbmV4cG9ydCBkZWZhdWx0IGxpc3RJdGVtQnV0dG9uQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhY3Rpb25zXCIsIFwiYXV0b0ZvY3VzXCIsIFwiYXV0b0ZvY3VzSXRlbVwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZVwiLCBcImRpc2FibGVMaXN0V3JhcFwiLCBcIm9uS2V5RG93blwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0ZyYWdtZW50IH0gZnJvbSAncmVhY3QtaXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBvd25lckRvY3VtZW50IGZyb20gJy4uL3V0aWxzL293bmVyRG9jdW1lbnQnO1xuaW1wb3J0IExpc3QgZnJvbSAnLi4vTGlzdCc7XG5pbXBvcnQgZ2V0U2Nyb2xsYmFyU2l6ZSBmcm9tICcuLi91dGlscy9nZXRTY3JvbGxiYXJTaXplJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHVzZUVuaGFuY2VkRWZmZWN0IGZyb20gJy4uL3V0aWxzL3VzZUVuaGFuY2VkRWZmZWN0JztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBuZXh0SXRlbShsaXN0LCBpdGVtLCBkaXNhYmxlTGlzdFdyYXApIHtcbiAgaWYgKGxpc3QgPT09IGl0ZW0pIHtcbiAgICByZXR1cm4gbGlzdC5maXJzdENoaWxkO1xuICB9XG4gIGlmIChpdGVtICYmIGl0ZW0ubmV4dEVsZW1lbnRTaWJsaW5nKSB7XG4gICAgcmV0dXJuIGl0ZW0ubmV4dEVsZW1lbnRTaWJsaW5nO1xuICB9XG4gIHJldHVybiBkaXNhYmxlTGlzdFdyYXAgPyBudWxsIDogbGlzdC5maXJzdENoaWxkO1xufVxuZnVuY3Rpb24gcHJldmlvdXNJdGVtKGxpc3QsIGl0ZW0sIGRpc2FibGVMaXN0V3JhcCkge1xuICBpZiAobGlzdCA9PT0gaXRlbSkge1xuICAgIHJldHVybiBkaXNhYmxlTGlzdFdyYXAgPyBsaXN0LmZpcnN0Q2hpbGQgOiBsaXN0Lmxhc3RDaGlsZDtcbiAgfVxuICBpZiAoaXRlbSAmJiBpdGVtLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHtcbiAgICByZXR1cm4gaXRlbS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICB9XG4gIHJldHVybiBkaXNhYmxlTGlzdFdyYXAgPyBudWxsIDogbGlzdC5sYXN0Q2hpbGQ7XG59XG5mdW5jdGlvbiB0ZXh0Q3JpdGVyaWFNYXRjaGVzKG5leHRGb2N1cywgdGV4dENyaXRlcmlhKSB7XG4gIGlmICh0ZXh0Q3JpdGVyaWEgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGxldCB0ZXh0ID0gbmV4dEZvY3VzLmlubmVyVGV4dDtcbiAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIGpzZG9tIGRvZXNuJ3Qgc3VwcG9ydCBpbm5lclRleHRcbiAgICB0ZXh0ID0gbmV4dEZvY3VzLnRleHRDb250ZW50O1xuICB9XG4gIHRleHQgPSB0ZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAodGV4dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHRleHRDcml0ZXJpYS5yZXBlYXRpbmcpIHtcbiAgICByZXR1cm4gdGV4dFswXSA9PT0gdGV4dENyaXRlcmlhLmtleXNbMF07XG4gIH1cbiAgcmV0dXJuIHRleHQuaW5kZXhPZih0ZXh0Q3JpdGVyaWEua2V5cy5qb2luKCcnKSkgPT09IDA7XG59XG5mdW5jdGlvbiBtb3ZlRm9jdXMobGlzdCwgY3VycmVudEZvY3VzLCBkaXNhYmxlTGlzdFdyYXAsIGRpc2FibGVkSXRlbXNGb2N1c2FibGUsIHRyYXZlcnNhbEZ1bmN0aW9uLCB0ZXh0Q3JpdGVyaWEpIHtcbiAgbGV0IHdyYXBwZWRPbmNlID0gZmFsc2U7XG4gIGxldCBuZXh0Rm9jdXMgPSB0cmF2ZXJzYWxGdW5jdGlvbihsaXN0LCBjdXJyZW50Rm9jdXMsIGN1cnJlbnRGb2N1cyA/IGRpc2FibGVMaXN0V3JhcCA6IGZhbHNlKTtcbiAgd2hpbGUgKG5leHRGb2N1cykge1xuICAgIC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcC5cbiAgICBpZiAobmV4dEZvY3VzID09PSBsaXN0LmZpcnN0Q2hpbGQpIHtcbiAgICAgIGlmICh3cmFwcGVkT25jZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB3cmFwcGVkT25jZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gU2FtZSBsb2dpYyBhcyB1c2VBdXRvY29tcGxldGUuanNcbiAgICBjb25zdCBuZXh0Rm9jdXNEaXNhYmxlZCA9IGRpc2FibGVkSXRlbXNGb2N1c2FibGUgPyBmYWxzZSA6IG5leHRGb2N1cy5kaXNhYmxlZCB8fCBuZXh0Rm9jdXMuZ2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJykgPT09ICd0cnVlJztcbiAgICBpZiAoIW5leHRGb2N1cy5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHwgIXRleHRDcml0ZXJpYU1hdGNoZXMobmV4dEZvY3VzLCB0ZXh0Q3JpdGVyaWEpIHx8IG5leHRGb2N1c0Rpc2FibGVkKSB7XG4gICAgICAvLyBNb3ZlIHRvIHRoZSBuZXh0IGVsZW1lbnQuXG4gICAgICBuZXh0Rm9jdXMgPSB0cmF2ZXJzYWxGdW5jdGlvbihsaXN0LCBuZXh0Rm9jdXMsIGRpc2FibGVMaXN0V3JhcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRGb2N1cy5mb2N1cygpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBBIHBlcm1hbmVudGx5IGRpc3BsYXllZCBtZW51IGZvbGxvd2luZyBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL3BhdHRlcm5zL21lbnUtYnV0dG9uLy5cbiAqIEl0J3MgZXhwb3NlZCB0byBoZWxwIGN1c3RvbWl6YXRpb24gb2YgdGhlIFtgTWVudWBdKC9tYXRlcmlhbC11aS9hcGkvbWVudS8pIGNvbXBvbmVudCBpZiB5b3VcbiAqIHVzZSBpdCBzZXBhcmF0ZWx5IHlvdSBuZWVkIHRvIG1vdmUgZm9jdXMgaW50byB0aGUgY29tcG9uZW50IG1hbnVhbGx5LiBPbmNlXG4gKiB0aGUgZm9jdXMgaXMgcGxhY2VkIGluc2lkZSB0aGUgY29tcG9uZW50IGl0IGlzIGZ1bGx5IGtleWJvYXJkIGFjY2Vzc2libGUuXG4gKi9cbmNvbnN0IE1lbnVMaXN0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTWVudUxpc3QocHJvcHMsIHJlZikge1xuICBjb25zdCB7XG4gICAgICAvLyBwcml2YXRlXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvcHJvcC10eXBlc1xuICAgICAgYWN0aW9ucyxcbiAgICAgIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICAgICAgYXV0b0ZvY3VzSXRlbSA9IGZhbHNlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlID0gZmFsc2UsXG4gICAgICBkaXNhYmxlTGlzdFdyYXAgPSBmYWxzZSxcbiAgICAgIG9uS2V5RG93bixcbiAgICAgIHZhcmlhbnQgPSAnc2VsZWN0ZWRNZW51J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBsaXN0UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCB0ZXh0Q3JpdGVyaWFSZWYgPSBSZWFjdC51c2VSZWYoe1xuICAgIGtleXM6IFtdLFxuICAgIHJlcGVhdGluZzogdHJ1ZSxcbiAgICBwcmV2aW91c0tleU1hdGNoZWQ6IHRydWUsXG4gICAgbGFzdFRpbWU6IG51bGxcbiAgfSk7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYXV0b0ZvY3VzKSB7XG4gICAgICBsaXN0UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gIH0sIFthdXRvRm9jdXNdKTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShhY3Rpb25zLCAoKSA9PiAoe1xuICAgIGFkanVzdFN0eWxlRm9yU2Nyb2xsYmFyOiAoY29udGFpbmVyRWxlbWVudCwge1xuICAgICAgZGlyZWN0aW9uXG4gICAgfSkgPT4ge1xuICAgICAgLy8gTGV0J3MgaWdub3JlIHRoYXQgcGllY2Ugb2YgbG9naWMgaWYgdXNlcnMgYXJlIGFscmVhZHkgb3ZlcnJpZGluZyB0aGUgd2lkdGhcbiAgICAgIC8vIG9mIHRoZSBtZW51LlxuICAgICAgY29uc3Qgbm9FeHBsaWNpdFdpZHRoID0gIWxpc3RSZWYuY3VycmVudC5zdHlsZS53aWR0aDtcbiAgICAgIGlmIChjb250YWluZXJFbGVtZW50LmNsaWVudEhlaWdodCA8IGxpc3RSZWYuY3VycmVudC5jbGllbnRIZWlnaHQgJiYgbm9FeHBsaWNpdFdpZHRoKSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbGJhclNpemUgPSBgJHtnZXRTY3JvbGxiYXJTaXplKG93bmVyRG9jdW1lbnQoY29udGFpbmVyRWxlbWVudCkpfXB4YDtcbiAgICAgICAgbGlzdFJlZi5jdXJyZW50LnN0eWxlW2RpcmVjdGlvbiA9PT0gJ3J0bCcgPyAncGFkZGluZ0xlZnQnIDogJ3BhZGRpbmdSaWdodCddID0gc2Nyb2xsYmFyU2l6ZTtcbiAgICAgICAgbGlzdFJlZi5jdXJyZW50LnN0eWxlLndpZHRoID0gYGNhbGMoMTAwJSArICR7c2Nyb2xsYmFyU2l6ZX0pYDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0UmVmLmN1cnJlbnQ7XG4gICAgfVxuICB9KSwgW10pO1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gZXZlbnQgPT4ge1xuICAgIGNvbnN0IGxpc3QgPSBsaXN0UmVmLmN1cnJlbnQ7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtFbGVtZW50fSAtIHdpbGwgYWx3YXlzIGJlIGRlZmluZWQgc2luY2Ugd2UgYXJlIGluIGEga2V5ZG93biBoYW5kbGVyXG4gICAgICogYXR0YWNoZWQgdG8gYW4gZWxlbWVudC4gQSBrZXlkb3duIGV2ZW50IGlzIGVpdGhlciBkaXNwYXRjaGVkIHRvIHRoZSBhY3RpdmVFbGVtZW50XG4gICAgICogb3IgZG9jdW1lbnQuYm9keSBvciBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuIE9ubHkgdGhlIGZpcnN0IGNhc2Ugd2lsbFxuICAgICAqIHRyaWdnZXIgdGhpcyBzcGVjaWZpYyBoYW5kbGVyLlxuICAgICAqL1xuICAgIGNvbnN0IGN1cnJlbnRGb2N1cyA9IG93bmVyRG9jdW1lbnQobGlzdCkuYWN0aXZlRWxlbWVudDtcbiAgICBpZiAoa2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgLy8gUHJldmVudCBzY3JvbGwgb2YgdGhlIHBhZ2VcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBtb3ZlRm9jdXMobGlzdCwgY3VycmVudEZvY3VzLCBkaXNhYmxlTGlzdFdyYXAsIGRpc2FibGVkSXRlbXNGb2N1c2FibGUsIG5leHRJdGVtKTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbW92ZUZvY3VzKGxpc3QsIGN1cnJlbnRGb2N1cywgZGlzYWJsZUxpc3RXcmFwLCBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlLCBwcmV2aW91c0l0ZW0pO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnSG9tZScpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBtb3ZlRm9jdXMobGlzdCwgbnVsbCwgZGlzYWJsZUxpc3RXcmFwLCBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlLCBuZXh0SXRlbSk7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdFbmQnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbW92ZUZvY3VzKGxpc3QsIG51bGwsIGRpc2FibGVMaXN0V3JhcCwgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSwgcHJldmlvdXNJdGVtKTtcbiAgICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGNyaXRlcmlhID0gdGV4dENyaXRlcmlhUmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBsb3dlcktleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgY3VyclRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgIGlmIChjcml0ZXJpYS5rZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gUmVzZXRcbiAgICAgICAgaWYgKGN1cnJUaW1lIC0gY3JpdGVyaWEubGFzdFRpbWUgPiA1MDApIHtcbiAgICAgICAgICBjcml0ZXJpYS5rZXlzID0gW107XG4gICAgICAgICAgY3JpdGVyaWEucmVwZWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgICBjcml0ZXJpYS5wcmV2aW91c0tleU1hdGNoZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGNyaXRlcmlhLnJlcGVhdGluZyAmJiBsb3dlcktleSAhPT0gY3JpdGVyaWEua2V5c1swXSkge1xuICAgICAgICAgIGNyaXRlcmlhLnJlcGVhdGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjcml0ZXJpYS5sYXN0VGltZSA9IGN1cnJUaW1lO1xuICAgICAgY3JpdGVyaWEua2V5cy5wdXNoKGxvd2VyS2V5KTtcbiAgICAgIGNvbnN0IGtlZXBGb2N1c09uQ3VycmVudCA9IGN1cnJlbnRGb2N1cyAmJiAhY3JpdGVyaWEucmVwZWF0aW5nICYmIHRleHRDcml0ZXJpYU1hdGNoZXMoY3VycmVudEZvY3VzLCBjcml0ZXJpYSk7XG4gICAgICBpZiAoY3JpdGVyaWEucHJldmlvdXNLZXlNYXRjaGVkICYmIChrZWVwRm9jdXNPbkN1cnJlbnQgfHwgbW92ZUZvY3VzKGxpc3QsIGN1cnJlbnRGb2N1cywgZmFsc2UsIGRpc2FibGVkSXRlbXNGb2N1c2FibGUsIG5leHRJdGVtLCBjcml0ZXJpYSkpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjcml0ZXJpYS5wcmV2aW91c0tleU1hdGNoZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9uS2V5RG93bikge1xuICAgICAgb25LZXlEb3duKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYobGlzdFJlZiwgcmVmKTtcblxuICAvKipcbiAgICogdGhlIGluZGV4IG9mIHRoZSBpdGVtIHNob3VsZCByZWNlaXZlIGZvY3VzXG4gICAqIGluIGEgYHZhcmlhbnQ9XCJzZWxlY3RlZE1lbnVcImAgaXQncyB0aGUgZmlyc3QgYHNlbGVjdGVkYCBpdGVtXG4gICAqIG90aGVyd2lzZSBpdCdzIHRoZSB2ZXJ5IGZpcnN0IGl0ZW0uXG4gICAqL1xuICBsZXQgYWN0aXZlSXRlbUluZGV4ID0gLTE7XG4gIC8vIHNpbmNlIHdlIGluamVjdCBmb2N1cyByZWxhdGVkIHByb3BzIGludG8gY2hpbGRyZW4gd2UgaGF2ZSB0byBkbyBhIGxvb2thaGVhZFxuICAvLyB0byBjaGVjayBpZiB0aGVyZSBpcyBhIGBzZWxlY3RlZGAgaXRlbS4gV2UncmUgbG9va2luZyBmb3IgdGhlIGxhc3QgYHNlbGVjdGVkYFxuICAvLyBpdGVtIGFuZCB1c2UgdGhlIGZpcnN0IHZhbGlkIGl0ZW0gYXMgYSBmYWxsYmFja1xuICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKGNoaWxkcmVuLCAoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgaWYgKCEgLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgaWYgKGFjdGl2ZUl0ZW1JbmRleCA9PT0gaW5kZXgpIHtcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4ICs9IDE7XG4gICAgICAgIGlmIChhY3RpdmVJdGVtSW5kZXggPj0gY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdGhlcmUgYXJlIG5vIGZvY3VzYWJsZSBpdGVtcyB3aXRoaW4gdGhlIGxpc3QuXG4gICAgICAgICAgYWN0aXZlSXRlbUluZGV4ID0gLTE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpc0ZyYWdtZW50KGNoaWxkKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtcIk1VSTogVGhlIE1lbnUgY29tcG9uZW50IGRvZXNuJ3QgYWNjZXB0IGEgRnJhZ21lbnQgYXMgYSBjaGlsZC5cIiwgJ0NvbnNpZGVyIHByb3ZpZGluZyBhbiBhcnJheSBpbnN0ZWFkLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFjaGlsZC5wcm9wcy5kaXNhYmxlZCkge1xuICAgICAgaWYgKHZhcmlhbnQgPT09ICdzZWxlY3RlZE1lbnUnICYmIGNoaWxkLnByb3BzLnNlbGVjdGVkKSB7XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IGluZGV4O1xuICAgICAgfSBlbHNlIGlmIChhY3RpdmVJdGVtSW5kZXggPT09IC0xKSB7XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IGluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWN0aXZlSXRlbUluZGV4ID09PSBpbmRleCAmJiAoY2hpbGQucHJvcHMuZGlzYWJsZWQgfHwgY2hpbGQucHJvcHMubXVpU2tpcExpc3RIaWdobGlnaHQgfHwgY2hpbGQudHlwZS5tdWlTa2lwTGlzdEhpZ2hsaWdodCkpIHtcbiAgICAgIGFjdGl2ZUl0ZW1JbmRleCArPSAxO1xuICAgICAgaWYgKGFjdGl2ZUl0ZW1JbmRleCA+PSBjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgLy8gdGhlcmUgYXJlIG5vIGZvY3VzYWJsZSBpdGVtcyB3aXRoaW4gdGhlIGxpc3QuXG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGl0ZW1zID0gUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgaWYgKGluZGV4ID09PSBhY3RpdmVJdGVtSW5kZXgpIHtcbiAgICAgIGNvbnN0IG5ld0NoaWxkUHJvcHMgPSB7fTtcbiAgICAgIGlmIChhdXRvRm9jdXNJdGVtKSB7XG4gICAgICAgIG5ld0NoaWxkUHJvcHMuYXV0b0ZvY3VzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGlsZC5wcm9wcy50YWJJbmRleCA9PT0gdW5kZWZpbmVkICYmIHZhcmlhbnQgPT09ICdzZWxlY3RlZE1lbnUnKSB7XG4gICAgICAgIG5ld0NoaWxkUHJvcHMudGFiSW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIG5ld0NoaWxkUHJvcHMpO1xuICAgIH1cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTGlzdCwgX2V4dGVuZHMoe1xuICAgIHJvbGU6IFwibWVudVwiLFxuICAgIHJlZjogaGFuZGxlUmVmLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICB0YWJJbmRleDogYXV0b0ZvY3VzID8gMCA6IC0xXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IGl0ZW1zXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTWVudUxpc3QucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogSWYgYHRydWVgLCB3aWxsIGZvY3VzIHRoZSBgW3JvbGU9XCJtZW51XCJdYCBjb250YWluZXIgYW5kIG1vdmUgaW50byB0YWIgb3JkZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB3aWxsIGZvY3VzIHRoZSBmaXJzdCBtZW51aXRlbSBpZiBgdmFyaWFudD1cIm1lbnVcImAgb3Igc2VsZWN0ZWQgaXRlbVxuICAgKiBpZiBgdmFyaWFudD1cInNlbGVjdGVkTWVudVwiYC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGF1dG9Gb2N1c0l0ZW06IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTWVudUxpc3QgY29udGVudHMsIG5vcm1hbGx5IGBNZW51SXRlbWBzLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB3aWxsIGFsbG93IGZvY3VzIG9uIGRpc2FibGVkIGl0ZW1zLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBtZW51IGl0ZW1zIHdpbGwgbm90IHdyYXAgZm9jdXMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlTGlzdFdyYXA6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS4gVXNlIGBtZW51YCB0byBwcmV2ZW50IHNlbGVjdGVkIGl0ZW1zIGZyb20gaW1wYWN0aW5nIHRoZSBpbml0aWFsIGZvY3VzXG4gICAqIGFuZCB0aGUgdmVydGljYWwgYWxpZ25tZW50IHJlbGF0aXZlIHRvIHRoZSBhbmNob3IgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgJ3NlbGVjdGVkTWVudSdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ21lbnUnLCAnc2VsZWN0ZWRNZW51J10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTWVudUxpc3Q7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW51VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlNZW51Jywgc2xvdCk7XG59XG5jb25zdCBtZW51Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aU1lbnUnLCBbJ3Jvb3QnLCAncGFwZXInLCAnbGlzdCddKTtcbmV4cG9ydCBkZWZhdWx0IG1lbnVDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm9uRW50ZXJpbmdcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJhdXRvRm9jdXNcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImRpc2FibGVBdXRvRm9jdXNJdGVtXCIsIFwiTWVudUxpc3RQcm9wc1wiLCBcIm9uQ2xvc2VcIiwgXCJvcGVuXCIsIFwiUGFwZXJQcm9wc1wiLCBcIlBvcG92ZXJDbGFzc2VzXCIsIFwidHJhbnNpdGlvbkR1cmF0aW9uXCIsIFwiVHJhbnNpdGlvblByb3BzXCIsIFwidmFyaWFudFwiLCBcInNsb3RzXCIsIFwic2xvdFByb3BzXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNGcmFnbWVudCB9IGZyb20gJ3JlYWN0LWlzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBIVE1MRWxlbWVudFR5cGUgZnJvbSAnQG11aS91dGlscy9IVE1MRWxlbWVudFR5cGUnO1xuaW1wb3J0IHsgdXNlUnRsIH0gZnJvbSAnQG11aS9zeXN0ZW0vUnRsUHJvdmlkZXInO1xuaW1wb3J0IHVzZVNsb3RQcm9wcyBmcm9tICdAbXVpL3V0aWxzL3VzZVNsb3RQcm9wcyc7XG5pbXBvcnQgTWVudUxpc3QgZnJvbSAnLi4vTWVudUxpc3QnO1xuaW1wb3J0IFBvcG92ZXIsIHsgUG9wb3ZlclBhcGVyIH0gZnJvbSAnLi4vUG9wb3Zlcic7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IHsgZ2V0TWVudVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vbWVudUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IFJUTF9PUklHSU4gPSB7XG4gIHZlcnRpY2FsOiAndG9wJyxcbiAgaG9yaXpvbnRhbDogJ3JpZ2h0J1xufTtcbmNvbnN0IExUUl9PUklHSU4gPSB7XG4gIHZlcnRpY2FsOiAndG9wJyxcbiAgaG9yaXpvbnRhbDogJ2xlZnQnXG59O1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCddLFxuICAgIHBhcGVyOiBbJ3BhcGVyJ10sXG4gICAgbGlzdDogWydsaXN0J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRNZW51VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBNZW51Um9vdCA9IHN0eWxlZChQb3BvdmVyLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlNZW51JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG59KSh7fSk7XG5leHBvcnQgY29uc3QgTWVudVBhcGVyID0gc3R5bGVkKFBvcG92ZXJQYXBlciwge1xuICBuYW1lOiAnTXVpTWVudScsXG4gIHNsb3Q6ICdQYXBlcicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnBhcGVyXG59KSh7XG4gIC8vIHNwZWNaOiBUaGUgbWF4aW11bSBoZWlnaHQgb2YgYSBzaW1wbGUgbWVudSBzaG91bGQgYmUgb25lIG9yIG1vcmUgcm93cyBsZXNzIHRoYW4gdGhlIHZpZXdcbiAgLy8gaGVpZ2h0LiBUaGlzIGVuc3VyZXMgYSB0YXBwYWJsZSBhcmVhIG91dHNpZGUgb2YgdGhlIHNpbXBsZSBtZW51IHdpdGggd2hpY2ggdG8gZGlzbWlzc1xuICAvLyB0aGUgbWVudS5cbiAgbWF4SGVpZ2h0OiAnY2FsYygxMDAlIC0gOTZweCknLFxuICAvLyBBZGQgaU9TIG1vbWVudHVtIHNjcm9sbGluZyBmb3IgaU9TIDwgMTMuMFxuICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJ1xufSk7XG5jb25zdCBNZW51TWVudUxpc3QgPSBzdHlsZWQoTWVudUxpc3QsIHtcbiAgbmFtZTogJ011aU1lbnUnLFxuICBzbG90OiAnTGlzdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLmxpc3Rcbn0pKHtcbiAgLy8gV2UgZGlzYWJsZSB0aGUgZm9jdXMgcmluZyBmb3IgbW91c2UsIHRvdWNoIGFuZCBrZXlib2FyZCB1c2Vycy5cbiAgb3V0bGluZTogMFxufSk7XG5jb25zdCBNZW51ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTWVudShpblByb3BzLCByZWYpIHtcbiAgdmFyIF9zbG90cyRwYXBlciwgX3Nsb3RQcm9wcyRwYXBlcjtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlNZW51J1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgYXV0b0ZvY3VzID0gdHJ1ZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgZGlzYWJsZUF1dG9Gb2N1c0l0ZW0gPSBmYWxzZSxcbiAgICAgIE1lbnVMaXN0UHJvcHMgPSB7fSxcbiAgICAgIG9uQ2xvc2UsXG4gICAgICBvcGVuLFxuICAgICAgUGFwZXJQcm9wcyA9IHt9LFxuICAgICAgUG9wb3ZlckNsYXNzZXMsXG4gICAgICB0cmFuc2l0aW9uRHVyYXRpb24gPSAnYXV0bycsXG4gICAgICBUcmFuc2l0aW9uUHJvcHM6IHtcbiAgICAgICAgb25FbnRlcmluZ1xuICAgICAgfSA9IHt9LFxuICAgICAgdmFyaWFudCA9ICdzZWxlY3RlZE1lbnUnLFxuICAgICAgc2xvdHMgPSB7fSxcbiAgICAgIHNsb3RQcm9wcyA9IHt9XG4gICAgfSA9IHByb3BzLFxuICAgIFRyYW5zaXRpb25Qcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLlRyYW5zaXRpb25Qcm9wcywgX2V4Y2x1ZGVkKSxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQyKTtcbiAgY29uc3QgaXNSdGwgPSB1c2VSdGwoKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGF1dG9Gb2N1cyxcbiAgICBkaXNhYmxlQXV0b0ZvY3VzSXRlbSxcbiAgICBNZW51TGlzdFByb3BzLFxuICAgIG9uRW50ZXJpbmcsXG4gICAgUGFwZXJQcm9wcyxcbiAgICB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgVHJhbnNpdGlvblByb3BzLFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgYXV0b0ZvY3VzSXRlbSA9IGF1dG9Gb2N1cyAmJiAhZGlzYWJsZUF1dG9Gb2N1c0l0ZW0gJiYgb3BlbjtcbiAgY29uc3QgbWVudUxpc3RBY3Rpb25zUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVFbnRlcmluZyA9IChlbGVtZW50LCBpc0FwcGVhcmluZykgPT4ge1xuICAgIGlmIChtZW51TGlzdEFjdGlvbnNSZWYuY3VycmVudCkge1xuICAgICAgbWVudUxpc3RBY3Rpb25zUmVmLmN1cnJlbnQuYWRqdXN0U3R5bGVGb3JTY3JvbGxiYXIoZWxlbWVudCwge1xuICAgICAgICBkaXJlY3Rpb246IGlzUnRsID8gJ3J0bCcgOiAnbHRyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChvbkVudGVyaW5nKSB7XG4gICAgICBvbkVudGVyaW5nKGVsZW1lbnQsIGlzQXBwZWFyaW5nKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUxpc3RLZXlEb3duID0gZXZlbnQgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKG9uQ2xvc2UpIHtcbiAgICAgICAgb25DbG9zZShldmVudCwgJ3RhYktleURvd24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIHRoZSBpbmRleCBvZiB0aGUgaXRlbSBzaG91bGQgcmVjZWl2ZSBmb2N1c1xuICAgKiBpbiBhIGB2YXJpYW50PVwic2VsZWN0ZWRNZW51XCJgIGl0J3MgdGhlIGZpcnN0IGBzZWxlY3RlZGAgaXRlbVxuICAgKiBvdGhlcndpc2UgaXQncyB0aGUgdmVyeSBmaXJzdCBpdGVtLlxuICAgKi9cbiAgbGV0IGFjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAvLyBzaW5jZSB3ZSBpbmplY3QgZm9jdXMgcmVsYXRlZCBwcm9wcyBpbnRvIGNoaWxkcmVuIHdlIGhhdmUgdG8gZG8gYSBsb29rYWhlYWRcbiAgLy8gdG8gY2hlY2sgaWYgdGhlcmUgaXMgYSBgc2VsZWN0ZWRgIGl0ZW0uIFdlJ3JlIGxvb2tpbmcgZm9yIHRoZSBsYXN0IGBzZWxlY3RlZGBcbiAgLy8gaXRlbSBhbmQgdXNlIHRoZSBmaXJzdCB2YWxpZCBpdGVtIGFzIGEgZmFsbGJhY2tcbiAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgaWYgKCEgLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGlzRnJhZ21lbnQoY2hpbGQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoW1wiTVVJOiBUaGUgTWVudSBjb21wb25lbnQgZG9lc24ndCBhY2NlcHQgYSBGcmFnbWVudCBhcyBhIGNoaWxkLlwiLCAnQ29uc2lkZXIgcHJvdmlkaW5nIGFuIGFycmF5IGluc3RlYWQuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWNoaWxkLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICBpZiAodmFyaWFudCA9PT0gJ3NlbGVjdGVkTWVudScgJiYgY2hpbGQucHJvcHMuc2VsZWN0ZWQpIHtcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4ID0gaW5kZXg7XG4gICAgICB9IGVsc2UgaWYgKGFjdGl2ZUl0ZW1JbmRleCA9PT0gLTEpIHtcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4ID0gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgY29uc3QgUGFwZXJTbG90ID0gKF9zbG90cyRwYXBlciA9IHNsb3RzLnBhcGVyKSAhPSBudWxsID8gX3Nsb3RzJHBhcGVyIDogTWVudVBhcGVyO1xuICBjb25zdCBwYXBlckV4dGVybmFsU2xvdFByb3BzID0gKF9zbG90UHJvcHMkcGFwZXIgPSBzbG90UHJvcHMucGFwZXIpICE9IG51bGwgPyBfc2xvdFByb3BzJHBhcGVyIDogUGFwZXJQcm9wcztcbiAgY29uc3Qgcm9vdFNsb3RQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgZWxlbWVudFR5cGU6IHNsb3RzLnJvb3QsXG4gICAgZXh0ZXJuYWxTbG90UHJvcHM6IHNsb3RQcm9wcy5yb290LFxuICAgIG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBbY2xhc3Nlcy5yb290LCBjbGFzc05hbWVdXG4gIH0pO1xuICBjb25zdCBwYXBlclNsb3RQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgZWxlbWVudFR5cGU6IFBhcGVyU2xvdCxcbiAgICBleHRlcm5hbFNsb3RQcm9wczogcGFwZXJFeHRlcm5hbFNsb3RQcm9wcyxcbiAgICBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5wYXBlclxuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KE1lbnVSb290LCBfZXh0ZW5kcyh7XG4gICAgb25DbG9zZTogb25DbG9zZSxcbiAgICBhbmNob3JPcmlnaW46IHtcbiAgICAgIHZlcnRpY2FsOiAnYm90dG9tJyxcbiAgICAgIGhvcml6b250YWw6IGlzUnRsID8gJ3JpZ2h0JyA6ICdsZWZ0J1xuICAgIH0sXG4gICAgdHJhbnNmb3JtT3JpZ2luOiBpc1J0bCA/IFJUTF9PUklHSU4gOiBMVFJfT1JJR0lOLFxuICAgIHNsb3RzOiB7XG4gICAgICBwYXBlcjogUGFwZXJTbG90LFxuICAgICAgcm9vdDogc2xvdHMucm9vdFxuICAgIH0sXG4gICAgc2xvdFByb3BzOiB7XG4gICAgICByb290OiByb290U2xvdFByb3BzLFxuICAgICAgcGFwZXI6IHBhcGVyU2xvdFByb3BzXG4gICAgfSxcbiAgICBvcGVuOiBvcGVuLFxuICAgIHJlZjogcmVmLFxuICAgIHRyYW5zaXRpb25EdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgIFRyYW5zaXRpb25Qcm9wczogX2V4dGVuZHMoe1xuICAgICAgb25FbnRlcmluZzogaGFuZGxlRW50ZXJpbmdcbiAgICB9LCBUcmFuc2l0aW9uUHJvcHMpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjbGFzc2VzOiBQb3BvdmVyQ2xhc3NlcyxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goTWVudU1lbnVMaXN0LCBfZXh0ZW5kcyh7XG4gICAgICBvbktleURvd246IGhhbmRsZUxpc3RLZXlEb3duLFxuICAgICAgYWN0aW9uczogbWVudUxpc3RBY3Rpb25zUmVmLFxuICAgICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMgJiYgKGFjdGl2ZUl0ZW1JbmRleCA9PT0gLTEgfHwgZGlzYWJsZUF1dG9Gb2N1c0l0ZW0pLFxuICAgICAgYXV0b0ZvY3VzSXRlbTogYXV0b0ZvY3VzSXRlbSxcbiAgICAgIHZhcmlhbnQ6IHZhcmlhbnRcbiAgICB9LCBNZW51TGlzdFByb3BzLCB7XG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5saXN0LCBNZW51TGlzdFByb3BzLmNsYXNzTmFtZSksXG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KSlcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBNZW51LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIEFuIEhUTUwgZWxlbWVudCwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgb25lLlxuICAgKiBJdCdzIHVzZWQgdG8gc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgbWVudS5cbiAgICovXG4gIGFuY2hvckVsOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCAoRGVmYXVsdCkgd2lsbCBmb2N1cyB0aGUgYFtyb2xlPVwibWVudVwiXWAgaWYgbm8gZm9jdXNhYmxlIGNoaWxkIGlzIGZvdW5kLiBEaXNhYmxlZFxuICAgKiBjaGlsZHJlbiBhcmUgbm90IGZvY3VzYWJsZS4gSWYgeW91IHNldCB0aGlzIHByb3AgdG8gYGZhbHNlYCBmb2N1cyB3aWxsIGJlIHBsYWNlZFxuICAgKiBvbiB0aGUgcGFyZW50IG1vZGFsIGNvbnRhaW5lci4gVGhpcyBoYXMgc2V2ZXJlIGFjY2Vzc2liaWxpdHkgaW1wbGljYXRpb25zXG4gICAqIGFuZCBzaG91bGQgb25seSBiZSBjb25zaWRlcmVkIGlmIHlvdSBtYW5hZ2UgZm9jdXMgb3RoZXJ3aXNlLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTWVudSBjb250ZW50cywgbm9ybWFsbHkgYE1lbnVJdGVtYHMuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogV2hlbiBvcGVuaW5nIHRoZSBtZW51IHdpbGwgbm90IGZvY3VzIHRoZSBhY3RpdmUgaXRlbSBidXQgdGhlIGBbcm9sZT1cIm1lbnVcIl1gXG4gICAqIHVubGVzcyBgYXV0b0ZvY3VzYCBpcyBhbHNvIHNldCB0byBgZmFsc2VgLiBOb3QgdXNpbmcgdGhlIGRlZmF1bHQgbWVhbnMgbm90XG4gICAqIGZvbGxvd2luZyBXQUktQVJJQSBhdXRob3JpbmcgcHJhY3RpY2VzLiBQbGVhc2UgYmUgY29uc2lkZXJhdGUgYWJvdXQgcG9zc2libGVcbiAgICogYWNjZXNzaWJpbGl0eSBpbXBsaWNhdGlvbnMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlQXV0b0ZvY3VzSXRlbTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYE1lbnVMaXN0YF0oL21hdGVyaWFsLXVpL2FwaS9tZW51LWxpc3QvKSBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgTWVudUxpc3RQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiBDYW4gYmU6IGBcImVzY2FwZUtleURvd25cImAsIGBcImJhY2tkcm9wQ2xpY2tcImAsIGBcInRhYktleURvd25cImAuXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBzaG93bi5cbiAgICovXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBQYXBlclByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogYGNsYXNzZXNgIHByb3AgYXBwbGllZCB0byB0aGUgW2BQb3BvdmVyYF0oL21hdGVyaWFsLXVpL2FwaS9wb3BvdmVyLykgZWxlbWVudC5cbiAgICovXG4gIFBvcG92ZXJDbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcGFwZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBwYXBlcjogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSBsZW5ndGggb2YgdGhlIHRyYW5zaXRpb24gaW4gYG1zYCwgb3IgJ2F1dG8nXG4gICAqIEBkZWZhdWx0ICdhdXRvJ1xuICAgKi9cbiAgdHJhbnNpdGlvbkR1cmF0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydhdXRvJ10pLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFwcGVhcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBlbnRlcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBleGl0OiBQcm9wVHlwZXMubnVtYmVyXG4gIH0pXSksXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSB0cmFuc2l0aW9uIGVsZW1lbnQuXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBlbGVtZW50IGlzIGJhc2VkIG9uIHRoaXMgW2BUcmFuc2l0aW9uYF0oaHR0cHM6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uLykgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgVHJhbnNpdGlvblByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLiBVc2UgYG1lbnVgIHRvIHByZXZlbnQgc2VsZWN0ZWQgaXRlbXMgZnJvbSBpbXBhY3RpbmcgdGhlIGluaXRpYWwgZm9jdXMuXG4gICAqIEBkZWZhdWx0ICdzZWxlY3RlZE1lbnUnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydtZW51JywgJ3NlbGVjdGVkTWVudSddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IE1lbnU7IiwiaW1wb3J0IHsgdW5zdGFibGVfb3duZXJXaW5kb3cgYXMgb3duZXJXaW5kb3csIHVuc3RhYmxlX293bmVyRG9jdW1lbnQgYXMgb3duZXJEb2N1bWVudCwgdW5zdGFibGVfZ2V0U2Nyb2xsYmFyU2l6ZSBhcyBnZXRTY3JvbGxiYXJTaXplIH0gZnJvbSAnQG11aS91dGlscyc7XG4vLyBJcyBhIHZlcnRpY2FsIHNjcm9sbGJhciBkaXNwbGF5ZWQ/XG5mdW5jdGlvbiBpc092ZXJmbG93aW5nKGNvbnRhaW5lcikge1xuICBjb25zdCBkb2MgPSBvd25lckRvY3VtZW50KGNvbnRhaW5lcik7XG4gIGlmIChkb2MuYm9keSA9PT0gY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIG93bmVyV2luZG93KGNvbnRhaW5lcikuaW5uZXJXaWR0aCA+IGRvYy5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIH1cbiAgcmV0dXJuIGNvbnRhaW5lci5zY3JvbGxIZWlnaHQgPiBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFyaWFIaWRkZW4oZWxlbWVudCwgc2hvdykge1xuICBpZiAoc2hvdykge1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFBhZGRpbmdSaWdodChlbGVtZW50KSB7XG4gIHJldHVybiBwYXJzZUludChvd25lcldpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBhZGRpbmdSaWdodCwgMTApIHx8IDA7XG59XG5mdW5jdGlvbiBpc0FyaWFIaWRkZW5Gb3JiaWRkZW5PbkVsZW1lbnQoZWxlbWVudCkge1xuICAvLyBUaGUgZm9yYmlkZGVuIEhUTUwgdGFncyBhcmUgdGhlIG9uZXMgZnJvbSBBUklBIHNwZWNpZmljYXRpb24gdGhhdFxuICAvLyBjYW4gYmUgY2hpbGRyZW4gb2YgYm9keSBhbmQgY2FuJ3QgaGF2ZSBhcmlhLWhpZGRlbiBhdHRyaWJ1dGUuXG4gIC8vIGNmLiBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbC1hcmlhLyNkb2Njb25mb3JtYW5jZVxuICBjb25zdCBmb3JiaWRkZW5UYWdOYW1lcyA9IFsnVEVNUExBVEUnLCAnU0NSSVBUJywgJ1NUWUxFJywgJ0xJTksnLCAnTUFQJywgJ01FVEEnLCAnTk9TQ1JJUFQnLCAnUElDVFVSRScsICdDT0wnLCAnQ09MR1JPVVAnLCAnUEFSQU0nLCAnU0xPVCcsICdTT1VSQ0UnLCAnVFJBQ0snXTtcbiAgY29uc3QgaXNGb3JiaWRkZW5UYWdOYW1lID0gZm9yYmlkZGVuVGFnTmFtZXMuaW5kZXhPZihlbGVtZW50LnRhZ05hbWUpICE9PSAtMTtcbiAgY29uc3QgaXNJbnB1dEhpZGRlbiA9IGVsZW1lbnQudGFnTmFtZSA9PT0gJ0lOUFVUJyAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZSgndHlwZScpID09PSAnaGlkZGVuJztcbiAgcmV0dXJuIGlzRm9yYmlkZGVuVGFnTmFtZSB8fCBpc0lucHV0SGlkZGVuO1xufVxuZnVuY3Rpb24gYXJpYUhpZGRlblNpYmxpbmdzKGNvbnRhaW5lciwgbW91bnRFbGVtZW50LCBjdXJyZW50RWxlbWVudCwgZWxlbWVudHNUb0V4Y2x1ZGUsIHNob3cpIHtcbiAgY29uc3QgYmxhY2tsaXN0ID0gW21vdW50RWxlbWVudCwgY3VycmVudEVsZW1lbnQsIC4uLmVsZW1lbnRzVG9FeGNsdWRlXTtcbiAgW10uZm9yRWFjaC5jYWxsKGNvbnRhaW5lci5jaGlsZHJlbiwgZWxlbWVudCA9PiB7XG4gICAgY29uc3QgaXNOb3RFeGNsdWRlZEVsZW1lbnQgPSBibGFja2xpc3QuaW5kZXhPZihlbGVtZW50KSA9PT0gLTE7XG4gICAgY29uc3QgaXNOb3RGb3JiaWRkZW5FbGVtZW50ID0gIWlzQXJpYUhpZGRlbkZvcmJpZGRlbk9uRWxlbWVudChlbGVtZW50KTtcbiAgICBpZiAoaXNOb3RFeGNsdWRlZEVsZW1lbnQgJiYgaXNOb3RGb3JiaWRkZW5FbGVtZW50KSB7XG4gICAgICBhcmlhSGlkZGVuKGVsZW1lbnQsIHNob3cpO1xuICAgIH1cbiAgfSk7XG59XG5mdW5jdGlvbiBmaW5kSW5kZXhPZihpdGVtcywgY2FsbGJhY2spIHtcbiAgbGV0IGlkeCA9IC0xO1xuICBpdGVtcy5zb21lKChpdGVtLCBpbmRleCkgPT4ge1xuICAgIGlmIChjYWxsYmFjayhpdGVtKSkge1xuICAgICAgaWR4ID0gaW5kZXg7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcbiAgcmV0dXJuIGlkeDtcbn1cbmZ1bmN0aW9uIGhhbmRsZUNvbnRhaW5lcihjb250YWluZXJJbmZvLCBwcm9wcykge1xuICBjb25zdCByZXN0b3JlU3R5bGUgPSBbXTtcbiAgY29uc3QgY29udGFpbmVyID0gY29udGFpbmVySW5mby5jb250YWluZXI7XG4gIGlmICghcHJvcHMuZGlzYWJsZVNjcm9sbExvY2spIHtcbiAgICBpZiAoaXNPdmVyZmxvd2luZyhjb250YWluZXIpKSB7XG4gICAgICAvLyBDb21wdXRlIHRoZSBzaXplIGJlZm9yZSBhcHBseWluZyBvdmVyZmxvdyBoaWRkZW4gdG8gYXZvaWQgYW55IHNjcm9sbCBqdW1wcy5cbiAgICAgIGNvbnN0IHNjcm9sbGJhclNpemUgPSBnZXRTY3JvbGxiYXJTaXplKG93bmVyRG9jdW1lbnQoY29udGFpbmVyKSk7XG4gICAgICByZXN0b3JlU3R5bGUucHVzaCh7XG4gICAgICAgIHZhbHVlOiBjb250YWluZXIuc3R5bGUucGFkZGluZ1JpZ2h0LFxuICAgICAgICBwcm9wZXJ0eTogJ3BhZGRpbmctcmlnaHQnLFxuICAgICAgICBlbDogY29udGFpbmVyXG4gICAgICB9KTtcbiAgICAgIC8vIFVzZSBjb21wdXRlZCBzdHlsZSwgaGVyZSB0byBnZXQgdGhlIHJlYWwgcGFkZGluZyB0byBhZGQgb3VyIHNjcm9sbGJhciB3aWR0aC5cbiAgICAgIGNvbnRhaW5lci5zdHlsZS5wYWRkaW5nUmlnaHQgPSBgJHtnZXRQYWRkaW5nUmlnaHQoY29udGFpbmVyKSArIHNjcm9sbGJhclNpemV9cHhgO1xuXG4gICAgICAvLyAubXVpLWZpeGVkIGlzIGEgZ2xvYmFsIGhlbHBlci5cbiAgICAgIGNvbnN0IGZpeGVkRWxlbWVudHMgPSBvd25lckRvY3VtZW50KGNvbnRhaW5lcikucXVlcnlTZWxlY3RvckFsbCgnLm11aS1maXhlZCcpO1xuICAgICAgW10uZm9yRWFjaC5jYWxsKGZpeGVkRWxlbWVudHMsIGVsZW1lbnQgPT4ge1xuICAgICAgICByZXN0b3JlU3R5bGUucHVzaCh7XG4gICAgICAgICAgdmFsdWU6IGVsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0LFxuICAgICAgICAgIHByb3BlcnR5OiAncGFkZGluZy1yaWdodCcsXG4gICAgICAgICAgZWw6IGVsZW1lbnRcbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gYCR7Z2V0UGFkZGluZ1JpZ2h0KGVsZW1lbnQpICsgc2Nyb2xsYmFyU2l6ZX1weGA7XG4gICAgICB9KTtcbiAgICB9XG4gICAgbGV0IHNjcm9sbENvbnRhaW5lcjtcbiAgICBpZiAoY29udGFpbmVyLnBhcmVudE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSB7XG4gICAgICBzY3JvbGxDb250YWluZXIgPSBvd25lckRvY3VtZW50KGNvbnRhaW5lcikuYm9keTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3VwcG9ydCBodG1sIG92ZXJmbG93LXk6IGF1dG8gZm9yIHNjcm9sbCBzdGFiaWxpdHkgYmV0d2VlbiBwYWdlc1xuICAgICAgLy8gaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9zbmlwcGV0cy9jc3MvZm9yY2UtdmVydGljYWwtc2Nyb2xsYmFyL1xuICAgICAgY29uc3QgcGFyZW50ID0gY29udGFpbmVyLnBhcmVudEVsZW1lbnQ7XG4gICAgICBjb25zdCBjb250YWluZXJXaW5kb3cgPSBvd25lcldpbmRvdyhjb250YWluZXIpO1xuICAgICAgc2Nyb2xsQ29udGFpbmVyID0gKHBhcmVudCA9PSBudWxsID8gdm9pZCAwIDogcGFyZW50Lm5vZGVOYW1lKSA9PT0gJ0hUTUwnICYmIGNvbnRhaW5lcldpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudCkub3ZlcmZsb3dZID09PSAnc2Nyb2xsJyA/IHBhcmVudCA6IGNvbnRhaW5lcjtcbiAgICB9XG5cbiAgICAvLyBCbG9jayB0aGUgc2Nyb2xsIGV2ZW4gaWYgbm8gc2Nyb2xsYmFyIGlzIHZpc2libGUgdG8gYWNjb3VudCBmb3IgbW9iaWxlIGtleWJvYXJkXG4gICAgLy8gc2NyZWVuc2l6ZSBzaHJpbmsuXG4gICAgcmVzdG9yZVN0eWxlLnB1c2goe1xuICAgICAgdmFsdWU6IHNjcm9sbENvbnRhaW5lci5zdHlsZS5vdmVyZmxvdyxcbiAgICAgIHByb3BlcnR5OiAnb3ZlcmZsb3cnLFxuICAgICAgZWw6IHNjcm9sbENvbnRhaW5lclxuICAgIH0sIHtcbiAgICAgIHZhbHVlOiBzY3JvbGxDb250YWluZXIuc3R5bGUub3ZlcmZsb3dYLFxuICAgICAgcHJvcGVydHk6ICdvdmVyZmxvdy14JyxcbiAgICAgIGVsOiBzY3JvbGxDb250YWluZXJcbiAgICB9LCB7XG4gICAgICB2YWx1ZTogc2Nyb2xsQ29udGFpbmVyLnN0eWxlLm92ZXJmbG93WSxcbiAgICAgIHByb3BlcnR5OiAnb3ZlcmZsb3cteScsXG4gICAgICBlbDogc2Nyb2xsQ29udGFpbmVyXG4gICAgfSk7XG4gICAgc2Nyb2xsQ29udGFpbmVyLnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gIH1cbiAgY29uc3QgcmVzdG9yZSA9ICgpID0+IHtcbiAgICByZXN0b3JlU3R5bGUuZm9yRWFjaCgoe1xuICAgICAgdmFsdWUsXG4gICAgICBlbCxcbiAgICAgIHByb3BlcnR5XG4gICAgfSkgPT4ge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiByZXN0b3JlO1xufVxuZnVuY3Rpb24gZ2V0SGlkZGVuU2libGluZ3MoY29udGFpbmVyKSB7XG4gIGNvbnN0IGhpZGRlblNpYmxpbmdzID0gW107XG4gIFtdLmZvckVhY2guY2FsbChjb250YWluZXIuY2hpbGRyZW4sIGVsZW1lbnQgPT4ge1xuICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKSA9PT0gJ3RydWUnKSB7XG4gICAgICBoaWRkZW5TaWJsaW5ncy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBoaWRkZW5TaWJsaW5ncztcbn1cbi8qKlxuICogQGlnbm9yZSAtIGRvIG5vdCBkb2N1bWVudC5cbiAqXG4gKiBQcm9wZXIgc3RhdGUgbWFuYWdlbWVudCBmb3IgY29udGFpbmVycyBhbmQgdGhlIG1vZGFscyBpbiB0aG9zZSBjb250YWluZXJzLlxuICogU2ltcGxpZmllZCwgYnV0IGluc3BpcmVkIGJ5IHJlYWN0LW92ZXJsYXkncyBNb2RhbE1hbmFnZXIgY2xhc3MuXG4gKiBVc2VkIGJ5IHRoZSBNb2RhbCB0byBlbnN1cmUgcHJvcGVyIHN0eWxpbmcgb2YgY29udGFpbmVycy5cbiAqL1xuZXhwb3J0IGNsYXNzIE1vZGFsTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29udGFpbmVycyA9IHZvaWQgMDtcbiAgICB0aGlzLm1vZGFscyA9IHZvaWQgMDtcbiAgICB0aGlzLm1vZGFscyA9IFtdO1xuICAgIHRoaXMuY29udGFpbmVycyA9IFtdO1xuICB9XG4gIGFkZChtb2RhbCwgY29udGFpbmVyKSB7XG4gICAgbGV0IG1vZGFsSW5kZXggPSB0aGlzLm1vZGFscy5pbmRleE9mKG1vZGFsKTtcbiAgICBpZiAobW9kYWxJbmRleCAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBtb2RhbEluZGV4O1xuICAgIH1cbiAgICBtb2RhbEluZGV4ID0gdGhpcy5tb2RhbHMubGVuZ3RoO1xuICAgIHRoaXMubW9kYWxzLnB1c2gobW9kYWwpO1xuXG4gICAgLy8gSWYgdGhlIG1vZGFsIHdlIGFyZSBhZGRpbmcgaXMgYWxyZWFkeSBpbiB0aGUgRE9NLlxuICAgIGlmIChtb2RhbC5tb2RhbFJlZikge1xuICAgICAgYXJpYUhpZGRlbihtb2RhbC5tb2RhbFJlZiwgZmFsc2UpO1xuICAgIH1cbiAgICBjb25zdCBoaWRkZW5TaWJsaW5ncyA9IGdldEhpZGRlblNpYmxpbmdzKGNvbnRhaW5lcik7XG4gICAgYXJpYUhpZGRlblNpYmxpbmdzKGNvbnRhaW5lciwgbW9kYWwubW91bnQsIG1vZGFsLm1vZGFsUmVmLCBoaWRkZW5TaWJsaW5ncywgdHJ1ZSk7XG4gICAgY29uc3QgY29udGFpbmVySW5kZXggPSBmaW5kSW5kZXhPZih0aGlzLmNvbnRhaW5lcnMsIGl0ZW0gPT4gaXRlbS5jb250YWluZXIgPT09IGNvbnRhaW5lcik7XG4gICAgaWYgKGNvbnRhaW5lckluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5jb250YWluZXJzW2NvbnRhaW5lckluZGV4XS5tb2RhbHMucHVzaChtb2RhbCk7XG4gICAgICByZXR1cm4gbW9kYWxJbmRleDtcbiAgICB9XG4gICAgdGhpcy5jb250YWluZXJzLnB1c2goe1xuICAgICAgbW9kYWxzOiBbbW9kYWxdLFxuICAgICAgY29udGFpbmVyLFxuICAgICAgcmVzdG9yZTogbnVsbCxcbiAgICAgIGhpZGRlblNpYmxpbmdzXG4gICAgfSk7XG4gICAgcmV0dXJuIG1vZGFsSW5kZXg7XG4gIH1cbiAgbW91bnQobW9kYWwsIHByb3BzKSB7XG4gICAgY29uc3QgY29udGFpbmVySW5kZXggPSBmaW5kSW5kZXhPZih0aGlzLmNvbnRhaW5lcnMsIGl0ZW0gPT4gaXRlbS5tb2RhbHMuaW5kZXhPZihtb2RhbCkgIT09IC0xKTtcbiAgICBjb25zdCBjb250YWluZXJJbmZvID0gdGhpcy5jb250YWluZXJzW2NvbnRhaW5lckluZGV4XTtcbiAgICBpZiAoIWNvbnRhaW5lckluZm8ucmVzdG9yZSkge1xuICAgICAgY29udGFpbmVySW5mby5yZXN0b3JlID0gaGFuZGxlQ29udGFpbmVyKGNvbnRhaW5lckluZm8sIHByb3BzKTtcbiAgICB9XG4gIH1cbiAgcmVtb3ZlKG1vZGFsLCBhcmlhSGlkZGVuU3RhdGUgPSB0cnVlKSB7XG4gICAgY29uc3QgbW9kYWxJbmRleCA9IHRoaXMubW9kYWxzLmluZGV4T2YobW9kYWwpO1xuICAgIGlmIChtb2RhbEluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIG1vZGFsSW5kZXg7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRhaW5lckluZGV4ID0gZmluZEluZGV4T2YodGhpcy5jb250YWluZXJzLCBpdGVtID0+IGl0ZW0ubW9kYWxzLmluZGV4T2YobW9kYWwpICE9PSAtMSk7XG4gICAgY29uc3QgY29udGFpbmVySW5mbyA9IHRoaXMuY29udGFpbmVyc1tjb250YWluZXJJbmRleF07XG4gICAgY29udGFpbmVySW5mby5tb2RhbHMuc3BsaWNlKGNvbnRhaW5lckluZm8ubW9kYWxzLmluZGV4T2YobW9kYWwpLCAxKTtcbiAgICB0aGlzLm1vZGFscy5zcGxpY2UobW9kYWxJbmRleCwgMSk7XG5cbiAgICAvLyBJZiB0aGF0IHdhcyB0aGUgbGFzdCBtb2RhbCBpbiBhIGNvbnRhaW5lciwgY2xlYW4gdXAgdGhlIGNvbnRhaW5lci5cbiAgICBpZiAoY29udGFpbmVySW5mby5tb2RhbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBUaGUgbW9kYWwgbWlnaHQgYmUgY2xvc2VkIGJlZm9yZSBpdCBoYWQgdGhlIGNoYW5jZSB0byBiZSBtb3VudGVkIGluIHRoZSBET00uXG4gICAgICBpZiAoY29udGFpbmVySW5mby5yZXN0b3JlKSB7XG4gICAgICAgIGNvbnRhaW5lckluZm8ucmVzdG9yZSgpO1xuICAgICAgfVxuICAgICAgaWYgKG1vZGFsLm1vZGFsUmVmKSB7XG4gICAgICAgIC8vIEluIGNhc2UgdGhlIG1vZGFsIHdhc24ndCBpbiB0aGUgRE9NIHlldC5cbiAgICAgICAgYXJpYUhpZGRlbihtb2RhbC5tb2RhbFJlZiwgYXJpYUhpZGRlblN0YXRlKTtcbiAgICAgIH1cbiAgICAgIGFyaWFIaWRkZW5TaWJsaW5ncyhjb250YWluZXJJbmZvLmNvbnRhaW5lciwgbW9kYWwubW91bnQsIG1vZGFsLm1vZGFsUmVmLCBjb250YWluZXJJbmZvLmhpZGRlblNpYmxpbmdzLCBmYWxzZSk7XG4gICAgICB0aGlzLmNvbnRhaW5lcnMuc3BsaWNlKGNvbnRhaW5lckluZGV4LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlIG1ha2Ugc3VyZSB0aGUgbmV4dCB0b3AgbW9kYWwgaXMgdmlzaWJsZSB0byBhIHNjcmVlbiByZWFkZXIuXG4gICAgICBjb25zdCBuZXh0VG9wID0gY29udGFpbmVySW5mby5tb2RhbHNbY29udGFpbmVySW5mby5tb2RhbHMubGVuZ3RoIC0gMV07XG4gICAgICAvLyBhcyBzb29uIGFzIGEgbW9kYWwgaXMgYWRkaW5nIGl0cyBtb2RhbFJlZiBpcyB1bmRlZmluZWQuIGl0IGNhbid0IHNldFxuICAgICAgLy8gYXJpYS1oaWRkZW4gYmVjYXVzZSB0aGUgZG9tIGVsZW1lbnQgZG9lc24ndCBleGlzdCBlaXRoZXJcbiAgICAgIC8vIHdoZW4gbW9kYWwgd2FzIHVubW91bnRlZCBiZWZvcmUgbW9kYWxSZWYgZ2V0cyBudWxsXG4gICAgICBpZiAobmV4dFRvcC5tb2RhbFJlZikge1xuICAgICAgICBhcmlhSGlkZGVuKG5leHRUb3AubW9kYWxSZWYsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1vZGFsSW5kZXg7XG4gIH1cbiAgaXNUb3BNb2RhbChtb2RhbCkge1xuICAgIHJldHVybiB0aGlzLm1vZGFscy5sZW5ndGggPiAwICYmIHRoaXMubW9kYWxzW3RoaXMubW9kYWxzLmxlbmd0aCAtIDFdID09PSBtb2RhbDtcbiAgfVxufSIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9vd25lckRvY3VtZW50IGFzIG93bmVyRG9jdW1lbnQsIHVuc3RhYmxlX3VzZUZvcmtSZWYgYXMgdXNlRm9ya1JlZiwgdW5zdGFibGVfdXNlRXZlbnRDYWxsYmFjayBhcyB1c2VFdmVudENhbGxiYWNrLCB1bnN0YWJsZV9jcmVhdGVDaGFpbmVkRnVuY3Rpb24gYXMgY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZXh0cmFjdEV2ZW50SGFuZGxlcnMgZnJvbSAnQG11aS91dGlscy9leHRyYWN0RXZlbnRIYW5kbGVycyc7XG5pbXBvcnQgeyBNb2RhbE1hbmFnZXIsIGFyaWFIaWRkZW4gfSBmcm9tICcuL01vZGFsTWFuYWdlcic7XG5mdW5jdGlvbiBnZXRDb250YWluZXIoY29udGFpbmVyKSB7XG4gIHJldHVybiB0eXBlb2YgY29udGFpbmVyID09PSAnZnVuY3Rpb24nID8gY29udGFpbmVyKCkgOiBjb250YWluZXI7XG59XG5mdW5jdGlvbiBnZXRIYXNUcmFuc2l0aW9uKGNoaWxkcmVuKSB7XG4gIHJldHVybiBjaGlsZHJlbiA/IGNoaWxkcmVuLnByb3BzLmhhc093blByb3BlcnR5KCdpbicpIDogZmFsc2U7XG59XG5cbi8vIEEgbW9kYWwgbWFuYWdlciB1c2VkIHRvIHRyYWNrIGFuZCBtYW5hZ2UgdGhlIHN0YXRlIG9mIG9wZW4gTW9kYWxzLlxuLy8gTW9kYWxzIGRvbid0IG9wZW4gb24gdGhlIHNlcnZlciBzbyB0aGlzIHdvbid0IGNvbmZsaWN0IHdpdGggY29uY3VycmVudCByZXF1ZXN0cy5cbmNvbnN0IGRlZmF1bHRNYW5hZ2VyID0gbmV3IE1vZGFsTWFuYWdlcigpO1xuLyoqXG4gKlxuICogRGVtb3M6XG4gKlxuICogLSBbTW9kYWxdKGh0dHBzOi8vbXVpLmNvbS9iYXNlLXVpL3JlYWN0LW1vZGFsLyNob29rKVxuICpcbiAqIEFQSTpcbiAqXG4gKiAtIFt1c2VNb2RhbCBBUEldKGh0dHBzOi8vbXVpLmNvbS9iYXNlLXVpL3JlYWN0LW1vZGFsL2hvb2tzLWFwaS8jdXNlLW1vZGFsKVxuICovXG5mdW5jdGlvbiB1c2VNb2RhbChwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHtcbiAgICBjb250YWluZXIsXG4gICAgZGlzYWJsZUVzY2FwZUtleURvd24gPSBmYWxzZSxcbiAgICBkaXNhYmxlU2Nyb2xsTG9jayA9IGZhbHNlLFxuICAgIC8vIEB0cy1pZ25vcmUgaW50ZXJuYWwgbG9naWMgLSBCYXNlIFVJIHN1cHBvcnRzIHRoZSBtYW5hZ2VyIGFzIGEgcHJvcCB0b29cbiAgICBtYW5hZ2VyID0gZGVmYXVsdE1hbmFnZXIsXG4gICAgY2xvc2VBZnRlclRyYW5zaXRpb24gPSBmYWxzZSxcbiAgICBvblRyYW5zaXRpb25FbnRlcixcbiAgICBvblRyYW5zaXRpb25FeGl0ZWQsXG4gICAgY2hpbGRyZW4sXG4gICAgb25DbG9zZSxcbiAgICBvcGVuLFxuICAgIHJvb3RSZWZcbiAgfSA9IHBhcmFtZXRlcnM7XG5cbiAgLy8gQHRzLWlnbm9yZSBpbnRlcm5hbCBsb2dpY1xuICBjb25zdCBtb2RhbCA9IFJlYWN0LnVzZVJlZih7fSk7XG4gIGNvbnN0IG1vdW50Tm9kZVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgbW9kYWxSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYobW9kYWxSZWYsIHJvb3RSZWYpO1xuICBjb25zdCBbZXhpdGVkLCBzZXRFeGl0ZWRdID0gUmVhY3QudXNlU3RhdGUoIW9wZW4pO1xuICBjb25zdCBoYXNUcmFuc2l0aW9uID0gZ2V0SGFzVHJhbnNpdGlvbihjaGlsZHJlbik7XG4gIGxldCBhcmlhSGlkZGVuUHJvcCA9IHRydWU7XG4gIGlmIChwYXJhbWV0ZXJzWydhcmlhLWhpZGRlbiddID09PSAnZmFsc2UnIHx8IHBhcmFtZXRlcnNbJ2FyaWEtaGlkZGVuJ10gPT09IGZhbHNlKSB7XG4gICAgYXJpYUhpZGRlblByb3AgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBnZXREb2MgPSAoKSA9PiBvd25lckRvY3VtZW50KG1vdW50Tm9kZVJlZi5jdXJyZW50KTtcbiAgY29uc3QgZ2V0TW9kYWwgPSAoKSA9PiB7XG4gICAgbW9kYWwuY3VycmVudC5tb2RhbFJlZiA9IG1vZGFsUmVmLmN1cnJlbnQ7XG4gICAgbW9kYWwuY3VycmVudC5tb3VudCA9IG1vdW50Tm9kZVJlZi5jdXJyZW50O1xuICAgIHJldHVybiBtb2RhbC5jdXJyZW50O1xuICB9O1xuICBjb25zdCBoYW5kbGVNb3VudGVkID0gKCkgPT4ge1xuICAgIG1hbmFnZXIubW91bnQoZ2V0TW9kYWwoKSwge1xuICAgICAgZGlzYWJsZVNjcm9sbExvY2tcbiAgICB9KTtcblxuICAgIC8vIEZpeCBhIGJ1ZyBvbiBDaHJvbWUgd2hlcmUgdGhlIHNjcm9sbCBpc24ndCBpbml0aWFsbHkgMC5cbiAgICBpZiAobW9kYWxSZWYuY3VycmVudCkge1xuICAgICAgbW9kYWxSZWYuY3VycmVudC5zY3JvbGxUb3AgPSAwO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlT3BlbiA9IHVzZUV2ZW50Q2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHJlc29sdmVkQ29udGFpbmVyID0gZ2V0Q29udGFpbmVyKGNvbnRhaW5lcikgfHwgZ2V0RG9jKCkuYm9keTtcbiAgICBtYW5hZ2VyLmFkZChnZXRNb2RhbCgpLCByZXNvbHZlZENvbnRhaW5lcik7XG5cbiAgICAvLyBUaGUgZWxlbWVudCB3YXMgYWxyZWFkeSBtb3VudGVkLlxuICAgIGlmIChtb2RhbFJlZi5jdXJyZW50KSB7XG4gICAgICBoYW5kbGVNb3VudGVkKCk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaXNUb3BNb2RhbCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IG1hbmFnZXIuaXNUb3BNb2RhbChnZXRNb2RhbCgpKSwgW21hbmFnZXJdKTtcbiAgY29uc3QgaGFuZGxlUG9ydGFsUmVmID0gdXNlRXZlbnRDYWxsYmFjayhub2RlID0+IHtcbiAgICBtb3VudE5vZGVSZWYuY3VycmVudCA9IG5vZGU7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChvcGVuICYmIGlzVG9wTW9kYWwoKSkge1xuICAgICAgaGFuZGxlTW91bnRlZCgpO1xuICAgIH0gZWxzZSBpZiAobW9kYWxSZWYuY3VycmVudCkge1xuICAgICAgYXJpYUhpZGRlbihtb2RhbFJlZi5jdXJyZW50LCBhcmlhSGlkZGVuUHJvcCk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgbWFuYWdlci5yZW1vdmUoZ2V0TW9kYWwoKSwgYXJpYUhpZGRlblByb3ApO1xuICB9LCBbYXJpYUhpZGRlblByb3AsIG1hbmFnZXJdKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaGFuZGxlQ2xvc2UoKTtcbiAgICB9O1xuICB9LCBbaGFuZGxlQ2xvc2VdKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3Blbikge1xuICAgICAgaGFuZGxlT3BlbigpO1xuICAgIH0gZWxzZSBpZiAoIWhhc1RyYW5zaXRpb24gfHwgIWNsb3NlQWZ0ZXJUcmFuc2l0aW9uKSB7XG4gICAgICBoYW5kbGVDbG9zZSgpO1xuICAgIH1cbiAgfSwgW29wZW4sIGhhbmRsZUNsb3NlLCBoYXNUcmFuc2l0aW9uLCBjbG9zZUFmdGVyVHJhbnNpdGlvbiwgaGFuZGxlT3Blbl0pO1xuICBjb25zdCBjcmVhdGVIYW5kbGVLZXlEb3duID0gb3RoZXJIYW5kbGVycyA9PiBldmVudCA9PiB7XG4gICAgdmFyIF9vdGhlckhhbmRsZXJzJG9uS2V5RDtcbiAgICAoX290aGVySGFuZGxlcnMkb25LZXlEID0gb3RoZXJIYW5kbGVycy5vbktleURvd24pID09IG51bGwgfHwgX290aGVySGFuZGxlcnMkb25LZXlELmNhbGwob3RoZXJIYW5kbGVycywgZXZlbnQpO1xuXG4gICAgLy8gVGhlIGhhbmRsZXIgZG9lc24ndCB0YWtlIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgaW50byBhY2NvdW50OlxuICAgIC8vXG4gICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKSBpcyBtZWFudCB0byBzdG9wIGRlZmF1bHQgYmVoYXZpb3JzIGxpa2VcbiAgICAvLyBjbGlja2luZyBhIGNoZWNrYm94IHRvIGNoZWNrIGl0LCBoaXR0aW5nIGEgYnV0dG9uIHRvIHN1Ym1pdCBhIGZvcm0sXG4gICAgLy8gYW5kIGhpdHRpbmcgbGVmdCBhcnJvdyB0byBtb3ZlIHRoZSBjdXJzb3IgaW4gYSB0ZXh0IGlucHV0IGV0Yy5cbiAgICAvLyBPbmx5IHNwZWNpYWwgSFRNTCBlbGVtZW50cyBoYXZlIHRoZXNlIGRlZmF1bHQgYmVoYXZpb3JzLlxuICAgIGlmIChldmVudC5rZXkgIT09ICdFc2NhcGUnIHx8IGV2ZW50LndoaWNoID09PSAyMjkgfHxcbiAgICAvLyBXYWl0IHVudGlsIElNRSBpcyBzZXR0bGVkLlxuICAgICFpc1RvcE1vZGFsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFkaXNhYmxlRXNjYXBlS2V5RG93bikge1xuICAgICAgLy8gU3dhbGxvdyB0aGUgZXZlbnQsIGluIGNhc2Ugc29tZW9uZSBpcyBsaXN0ZW5pbmcgZm9yIHRoZSBlc2NhcGUga2V5IG9uIHRoZSBib2R5LlxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBpZiAob25DbG9zZSkge1xuICAgICAgICBvbkNsb3NlKGV2ZW50LCAnZXNjYXBlS2V5RG93bicpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgY29uc3QgY3JlYXRlSGFuZGxlQmFja2Ryb3BDbGljayA9IG90aGVySGFuZGxlcnMgPT4gZXZlbnQgPT4ge1xuICAgIHZhciBfb3RoZXJIYW5kbGVycyRvbkNsaWM7XG4gICAgKF9vdGhlckhhbmRsZXJzJG9uQ2xpYyA9IG90aGVySGFuZGxlcnMub25DbGljaykgPT0gbnVsbCB8fCBfb3RoZXJIYW5kbGVycyRvbkNsaWMuY2FsbChvdGhlckhhbmRsZXJzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnRhcmdldCAhPT0gZXZlbnQuY3VycmVudFRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob25DbG9zZSkge1xuICAgICAgb25DbG9zZShldmVudCwgJ2JhY2tkcm9wQ2xpY2snKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGdldFJvb3RQcm9wcyA9IChvdGhlckhhbmRsZXJzID0ge30pID0+IHtcbiAgICBjb25zdCBwcm9wc0V2ZW50SGFuZGxlcnMgPSBleHRyYWN0RXZlbnRIYW5kbGVycyhwYXJhbWV0ZXJzKTtcblxuICAgIC8vIFRoZSBjdXN0b20gZXZlbnQgaGFuZGxlcnMgc2hvdWxkbid0IGJlIHNwcmVhZCBvbiB0aGUgcm9vdCBlbGVtZW50XG4gICAgZGVsZXRlIHByb3BzRXZlbnRIYW5kbGVycy5vblRyYW5zaXRpb25FbnRlcjtcbiAgICBkZWxldGUgcHJvcHNFdmVudEhhbmRsZXJzLm9uVHJhbnNpdGlvbkV4aXRlZDtcbiAgICBjb25zdCBleHRlcm5hbEV2ZW50SGFuZGxlcnMgPSBfZXh0ZW5kcyh7fSwgcHJvcHNFdmVudEhhbmRsZXJzLCBvdGhlckhhbmRsZXJzKTtcbiAgICByZXR1cm4gX2V4dGVuZHMoe1xuICAgICAgcm9sZTogJ3ByZXNlbnRhdGlvbidcbiAgICB9LCBleHRlcm5hbEV2ZW50SGFuZGxlcnMsIHtcbiAgICAgIG9uS2V5RG93bjogY3JlYXRlSGFuZGxlS2V5RG93bihleHRlcm5hbEV2ZW50SGFuZGxlcnMpLFxuICAgICAgcmVmOiBoYW5kbGVSZWZcbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgZ2V0QmFja2Ryb3BQcm9wcyA9IChvdGhlckhhbmRsZXJzID0ge30pID0+IHtcbiAgICBjb25zdCBleHRlcm5hbEV2ZW50SGFuZGxlcnMgPSBvdGhlckhhbmRsZXJzO1xuICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICAnYXJpYS1oaWRkZW4nOiB0cnVlXG4gICAgfSwgZXh0ZXJuYWxFdmVudEhhbmRsZXJzLCB7XG4gICAgICBvbkNsaWNrOiBjcmVhdGVIYW5kbGVCYWNrZHJvcENsaWNrKGV4dGVybmFsRXZlbnRIYW5kbGVycyksXG4gICAgICBvcGVuXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldFRyYW5zaXRpb25Qcm9wcyA9ICgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVFbnRlciA9ICgpID0+IHtcbiAgICAgIHNldEV4aXRlZChmYWxzZSk7XG4gICAgICBpZiAob25UcmFuc2l0aW9uRW50ZXIpIHtcbiAgICAgICAgb25UcmFuc2l0aW9uRW50ZXIoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZUV4aXRlZCA9ICgpID0+IHtcbiAgICAgIHNldEV4aXRlZCh0cnVlKTtcbiAgICAgIGlmIChvblRyYW5zaXRpb25FeGl0ZWQpIHtcbiAgICAgICAgb25UcmFuc2l0aW9uRXhpdGVkKCk7XG4gICAgICB9XG4gICAgICBpZiAoY2xvc2VBZnRlclRyYW5zaXRpb24pIHtcbiAgICAgICAgaGFuZGxlQ2xvc2UoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBvbkVudGVyOiBjcmVhdGVDaGFpbmVkRnVuY3Rpb24oaGFuZGxlRW50ZXIsIGNoaWxkcmVuID09IG51bGwgPyB2b2lkIDAgOiBjaGlsZHJlbi5wcm9wcy5vbkVudGVyKSxcbiAgICAgIG9uRXhpdGVkOiBjcmVhdGVDaGFpbmVkRnVuY3Rpb24oaGFuZGxlRXhpdGVkLCBjaGlsZHJlbiA9PSBudWxsID8gdm9pZCAwIDogY2hpbGRyZW4ucHJvcHMub25FeGl0ZWQpXG4gICAgfTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBnZXRSb290UHJvcHMsXG4gICAgZ2V0QmFja2Ryb3BQcm9wcyxcbiAgICBnZXRUcmFuc2l0aW9uUHJvcHMsXG4gICAgcm9vdFJlZjogaGFuZGxlUmVmLFxuICAgIHBvcnRhbFJlZjogaGFuZGxlUG9ydGFsUmVmLFxuICAgIGlzVG9wTW9kYWwsXG4gICAgZXhpdGVkLFxuICAgIGhhc1RyYW5zaXRpb25cbiAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IHVzZU1vZGFsOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9kYWxVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aU1vZGFsJywgc2xvdCk7XG59XG5jb25zdCBtb2RhbENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlNb2RhbCcsIFsncm9vdCcsICdoaWRkZW4nLCAnYmFja2Ryb3AnXSk7XG5leHBvcnQgZGVmYXVsdCBtb2RhbENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiQmFja2Ryb3BDb21wb25lbnRcIiwgXCJCYWNrZHJvcFByb3BzXCIsIFwiY2xhc3Nlc1wiLCBcImNsYXNzTmFtZVwiLCBcImNsb3NlQWZ0ZXJUcmFuc2l0aW9uXCIsIFwiY2hpbGRyZW5cIiwgXCJjb250YWluZXJcIiwgXCJjb21wb25lbnRcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiZGlzYWJsZUF1dG9Gb2N1c1wiLCBcImRpc2FibGVFbmZvcmNlRm9jdXNcIiwgXCJkaXNhYmxlRXNjYXBlS2V5RG93blwiLCBcImRpc2FibGVQb3J0YWxcIiwgXCJkaXNhYmxlUmVzdG9yZUZvY3VzXCIsIFwiZGlzYWJsZVNjcm9sbExvY2tcIiwgXCJoaWRlQmFja2Ryb3BcIiwgXCJrZWVwTW91bnRlZFwiLCBcIm9uQmFja2Ryb3BDbGlja1wiLCBcIm9uQ2xvc2VcIiwgXCJvblRyYW5zaXRpb25FbnRlclwiLCBcIm9uVHJhbnNpdGlvbkV4aXRlZFwiLCBcIm9wZW5cIiwgXCJzbG90UHJvcHNcIiwgXCJzbG90c1wiLCBcInRoZW1lXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IEhUTUxFbGVtZW50VHlwZSBmcm9tICdAbXVpL3V0aWxzL0hUTUxFbGVtZW50VHlwZSc7XG5pbXBvcnQgZWxlbWVudEFjY2VwdGluZ1JlZiBmcm9tICdAbXVpL3V0aWxzL2VsZW1lbnRBY2NlcHRpbmdSZWYnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHVzZVNsb3RQcm9wcyBmcm9tICdAbXVpL3V0aWxzL3VzZVNsb3RQcm9wcyc7XG5pbXBvcnQgRm9jdXNUcmFwIGZyb20gJy4uL1Vuc3RhYmxlX1RyYXBGb2N1cyc7XG5pbXBvcnQgUG9ydGFsIGZyb20gJy4uL1BvcnRhbCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IEJhY2tkcm9wIGZyb20gJy4uL0JhY2tkcm9wJztcbmltcG9ydCB1c2VNb2RhbCBmcm9tICcuL3VzZU1vZGFsJztcbmltcG9ydCB7IGdldE1vZGFsVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9tb2RhbENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBvcGVuLFxuICAgIGV4aXRlZCxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCAhb3BlbiAmJiBleGl0ZWQgJiYgJ2hpZGRlbiddLFxuICAgIGJhY2tkcm9wOiBbJ2JhY2tkcm9wJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRNb2RhbFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgTW9kYWxSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlNb2RhbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCAhb3duZXJTdGF0ZS5vcGVuICYmIG93bmVyU3RhdGUuZXhpdGVkICYmIHN0eWxlcy5oaWRkZW5dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgekluZGV4OiAodGhlbWUudmFycyB8fCB0aGVtZSkuekluZGV4Lm1vZGFsLFxuICByaWdodDogMCxcbiAgYm90dG9tOiAwLFxuICB0b3A6IDAsXG4gIGxlZnQ6IDBcbn0sICFvd25lclN0YXRlLm9wZW4gJiYgb3duZXJTdGF0ZS5leGl0ZWQgJiYge1xuICB2aXNpYmlsaXR5OiAnaGlkZGVuJ1xufSkpO1xuY29uc3QgTW9kYWxCYWNrZHJvcCA9IHN0eWxlZChCYWNrZHJvcCwge1xuICBuYW1lOiAnTXVpTW9kYWwnLFxuICBzbG90OiAnQmFja2Ryb3AnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICByZXR1cm4gc3R5bGVzLmJhY2tkcm9wO1xuICB9XG59KSh7XG4gIHpJbmRleDogLTFcbn0pO1xuXG4vKipcbiAqIE1vZGFsIGlzIGEgbG93ZXItbGV2ZWwgY29uc3RydWN0IHRoYXQgaXMgbGV2ZXJhZ2VkIGJ5IHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czpcbiAqXG4gKiAtIFtEaWFsb2ddKC9tYXRlcmlhbC11aS9hcGkvZGlhbG9nLylcbiAqIC0gW0RyYXdlcl0oL21hdGVyaWFsLXVpL2FwaS9kcmF3ZXIvKVxuICogLSBbTWVudV0oL21hdGVyaWFsLXVpL2FwaS9tZW51LylcbiAqIC0gW1BvcG92ZXJdKC9tYXRlcmlhbC11aS9hcGkvcG9wb3Zlci8pXG4gKlxuICogSWYgeW91IGFyZSBjcmVhdGluZyBhIG1vZGFsIGRpYWxvZywgeW91IHByb2JhYmx5IHdhbnQgdG8gdXNlIHRoZSBbRGlhbG9nXSgvbWF0ZXJpYWwtdWkvYXBpL2RpYWxvZy8pIGNvbXBvbmVudFxuICogcmF0aGVyIHRoYW4gZGlyZWN0bHkgdXNpbmcgTW9kYWwuXG4gKlxuICogVGhpcyBjb21wb25lbnQgc2hhcmVzIG1hbnkgY29uY2VwdHMgd2l0aCBbcmVhY3Qtb3ZlcmxheXNdKGh0dHBzOi8vcmVhY3QtYm9vdHN0cmFwLmdpdGh1Yi5pby9yZWFjdC1vdmVybGF5cy8jbW9kYWxzKS5cbiAqL1xuY29uc3QgTW9kYWwgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBNb2RhbChpblByb3BzLCByZWYpIHtcbiAgdmFyIF9yZWYsIF9zbG90cyRyb290LCBfcmVmMiwgX3Nsb3RzJGJhY2tkcm9wLCBfc2xvdFByb3BzJHJvb3QsIF9zbG90UHJvcHMkYmFja2Ryb3A7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBuYW1lOiAnTXVpTW9kYWwnLFxuICAgIHByb3BzOiBpblByb3BzXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBCYWNrZHJvcENvbXBvbmVudCA9IE1vZGFsQmFja2Ryb3AsXG4gICAgICBCYWNrZHJvcFByb3BzLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY2xvc2VBZnRlclRyYW5zaXRpb24gPSBmYWxzZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY29udGFpbmVyLFxuICAgICAgY29tcG9uZW50LFxuICAgICAgY29tcG9uZW50cyA9IHt9LFxuICAgICAgY29tcG9uZW50c1Byb3BzID0ge30sXG4gICAgICBkaXNhYmxlQXV0b0ZvY3VzID0gZmFsc2UsXG4gICAgICBkaXNhYmxlRW5mb3JjZUZvY3VzID0gZmFsc2UsXG4gICAgICBkaXNhYmxlRXNjYXBlS2V5RG93biA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVBvcnRhbCA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVJlc3RvcmVGb2N1cyA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVNjcm9sbExvY2sgPSBmYWxzZSxcbiAgICAgIGhpZGVCYWNrZHJvcCA9IGZhbHNlLFxuICAgICAga2VlcE1vdW50ZWQgPSBmYWxzZSxcbiAgICAgIG9uQmFja2Ryb3BDbGljayxcbiAgICAgIG9wZW4sXG4gICAgICBzbG90UHJvcHMsXG4gICAgICBzbG90c1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3Byb3AtdHlwZXNcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgcHJvcHNXaXRoRGVmYXVsdHMgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjbG9zZUFmdGVyVHJhbnNpdGlvbixcbiAgICBkaXNhYmxlQXV0b0ZvY3VzLFxuICAgIGRpc2FibGVFbmZvcmNlRm9jdXMsXG4gICAgZGlzYWJsZUVzY2FwZUtleURvd24sXG4gICAgZGlzYWJsZVBvcnRhbCxcbiAgICBkaXNhYmxlUmVzdG9yZUZvY3VzLFxuICAgIGRpc2FibGVTY3JvbGxMb2NrLFxuICAgIGhpZGVCYWNrZHJvcCxcbiAgICBrZWVwTW91bnRlZFxuICB9KTtcbiAgY29uc3Qge1xuICAgIGdldFJvb3RQcm9wcyxcbiAgICBnZXRCYWNrZHJvcFByb3BzLFxuICAgIGdldFRyYW5zaXRpb25Qcm9wcyxcbiAgICBwb3J0YWxSZWYsXG4gICAgaXNUb3BNb2RhbCxcbiAgICBleGl0ZWQsXG4gICAgaGFzVHJhbnNpdGlvblxuICB9ID0gdXNlTW9kYWwoX2V4dGVuZHMoe30sIHByb3BzV2l0aERlZmF1bHRzLCB7XG4gICAgcm9vdFJlZjogcmVmXG4gIH0pKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wc1dpdGhEZWZhdWx0cywge1xuICAgIGV4aXRlZFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBjaGlsZFByb3BzID0ge307XG4gIGlmIChjaGlsZHJlbi5wcm9wcy50YWJJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2hpbGRQcm9wcy50YWJJbmRleCA9ICctMSc7XG4gIH1cblxuICAvLyBJdCdzIGEgVHJhbnNpdGlvbiBsaWtlIGNvbXBvbmVudFxuICBpZiAoaGFzVHJhbnNpdGlvbikge1xuICAgIGNvbnN0IHtcbiAgICAgIG9uRW50ZXIsXG4gICAgICBvbkV4aXRlZFxuICAgIH0gPSBnZXRUcmFuc2l0aW9uUHJvcHMoKTtcbiAgICBjaGlsZFByb3BzLm9uRW50ZXIgPSBvbkVudGVyO1xuICAgIGNoaWxkUHJvcHMub25FeGl0ZWQgPSBvbkV4aXRlZDtcbiAgfVxuICBjb25zdCBSb290U2xvdCA9IChfcmVmID0gKF9zbG90cyRyb290ID0gc2xvdHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RzLnJvb3QpICE9IG51bGwgPyBfc2xvdHMkcm9vdCA6IGNvbXBvbmVudHMuUm9vdCkgIT0gbnVsbCA/IF9yZWYgOiBNb2RhbFJvb3Q7XG4gIGNvbnN0IEJhY2tkcm9wU2xvdCA9IChfcmVmMiA9IChfc2xvdHMkYmFja2Ryb3AgPSBzbG90cyA9PSBudWxsID8gdm9pZCAwIDogc2xvdHMuYmFja2Ryb3ApICE9IG51bGwgPyBfc2xvdHMkYmFja2Ryb3AgOiBjb21wb25lbnRzLkJhY2tkcm9wKSAhPSBudWxsID8gX3JlZjIgOiBCYWNrZHJvcENvbXBvbmVudDtcbiAgY29uc3Qgcm9vdFNsb3RQcm9wcyA9IChfc2xvdFByb3BzJHJvb3QgPSBzbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RQcm9wcy5yb290KSAhPSBudWxsID8gX3Nsb3RQcm9wcyRyb290IDogY29tcG9uZW50c1Byb3BzLnJvb3Q7XG4gIGNvbnN0IGJhY2tkcm9wU2xvdFByb3BzID0gKF9zbG90UHJvcHMkYmFja2Ryb3AgPSBzbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RQcm9wcy5iYWNrZHJvcCkgIT0gbnVsbCA/IF9zbG90UHJvcHMkYmFja2Ryb3AgOiBjb21wb25lbnRzUHJvcHMuYmFja2Ryb3A7XG4gIGNvbnN0IHJvb3RQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgZWxlbWVudFR5cGU6IFJvb3RTbG90LFxuICAgIGV4dGVybmFsU2xvdFByb3BzOiByb290U2xvdFByb3BzLFxuICAgIGV4dGVybmFsRm9yd2FyZGVkUHJvcHM6IG90aGVyLFxuICAgIGdldFNsb3RQcm9wczogZ2V0Um9vdFByb3BzLFxuICAgIGFkZGl0aW9uYWxQcm9wczoge1xuICAgICAgcmVmLFxuICAgICAgYXM6IGNvbXBvbmVudFxuICAgIH0sXG4gICAgb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3NOYW1lLCByb290U2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiByb290U2xvdFByb3BzLmNsYXNzTmFtZSwgY2xhc3NlcyA9PSBudWxsID8gdm9pZCAwIDogY2xhc3Nlcy5yb290LCAhb3duZXJTdGF0ZS5vcGVuICYmIG93bmVyU3RhdGUuZXhpdGVkICYmIChjbGFzc2VzID09IG51bGwgPyB2b2lkIDAgOiBjbGFzc2VzLmhpZGRlbikpXG4gIH0pO1xuICBjb25zdCBiYWNrZHJvcFByb3BzID0gdXNlU2xvdFByb3BzKHtcbiAgICBlbGVtZW50VHlwZTogQmFja2Ryb3BTbG90LFxuICAgIGV4dGVybmFsU2xvdFByb3BzOiBiYWNrZHJvcFNsb3RQcm9wcyxcbiAgICBhZGRpdGlvbmFsUHJvcHM6IEJhY2tkcm9wUHJvcHMsXG4gICAgZ2V0U2xvdFByb3BzOiBvdGhlckhhbmRsZXJzID0+IHtcbiAgICAgIHJldHVybiBnZXRCYWNrZHJvcFByb3BzKF9leHRlbmRzKHt9LCBvdGhlckhhbmRsZXJzLCB7XG4gICAgICAgIG9uQ2xpY2s6IGUgPT4ge1xuICAgICAgICAgIGlmIChvbkJhY2tkcm9wQ2xpY2spIHtcbiAgICAgICAgICAgIG9uQmFja2Ryb3BDbGljayhlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG90aGVySGFuZGxlcnMgIT0gbnVsbCAmJiBvdGhlckhhbmRsZXJzLm9uQ2xpY2spIHtcbiAgICAgICAgICAgIG90aGVySGFuZGxlcnMub25DbGljayhlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9LFxuICAgIGNsYXNzTmFtZTogY2xzeChiYWNrZHJvcFNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogYmFja2Ryb3BTbG90UHJvcHMuY2xhc3NOYW1lLCBCYWNrZHJvcFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBCYWNrZHJvcFByb3BzLmNsYXNzTmFtZSwgY2xhc3NlcyA9PSBudWxsID8gdm9pZCAwIDogY2xhc3Nlcy5iYWNrZHJvcCksXG4gICAgb3duZXJTdGF0ZVxuICB9KTtcbiAgaWYgKCFrZWVwTW91bnRlZCAmJiAhb3BlbiAmJiAoIWhhc1RyYW5zaXRpb24gfHwgZXhpdGVkKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChQb3J0YWwsIHtcbiAgICByZWY6IHBvcnRhbFJlZixcbiAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICBkaXNhYmxlUG9ydGFsOiBkaXNhYmxlUG9ydGFsLFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeHMoUm9vdFNsb3QsIF9leHRlbmRzKHt9LCByb290UHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBbIWhpZGVCYWNrZHJvcCAmJiBCYWNrZHJvcENvbXBvbmVudCA/IC8qI19fUFVSRV9fKi9fanN4KEJhY2tkcm9wU2xvdCwgX2V4dGVuZHMoe30sIGJhY2tkcm9wUHJvcHMpKSA6IG51bGwsIC8qI19fUFVSRV9fKi9fanN4KEZvY3VzVHJhcCwge1xuICAgICAgICBkaXNhYmxlRW5mb3JjZUZvY3VzOiBkaXNhYmxlRW5mb3JjZUZvY3VzLFxuICAgICAgICBkaXNhYmxlQXV0b0ZvY3VzOiBkaXNhYmxlQXV0b0ZvY3VzLFxuICAgICAgICBkaXNhYmxlUmVzdG9yZUZvY3VzOiBkaXNhYmxlUmVzdG9yZUZvY3VzLFxuICAgICAgICBpc0VuYWJsZWQ6IGlzVG9wTW9kYWwsXG4gICAgICAgIG9wZW46IG9wZW4sXG4gICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBjaGlsZFByb3BzKVxuICAgICAgfSldXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBNb2RhbC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBBIGJhY2tkcm9wIGNvbXBvbmVudC4gVGhpcyBwcm9wIGVuYWJsZXMgY3VzdG9tIGJhY2tkcm9wIHJlbmRlcmluZy5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzbG90cy5iYWNrZHJvcGAgaW5zdGVhZC4gV2hpbGUgdGhpcyBwcm9wIGN1cnJlbnRseSB3b3JrcywgaXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24uXG4gICAqIFVzZSB0aGUgYHNsb3RzLmJhY2tkcm9wYCBwcm9wIHRvIG1ha2UgeW91ciBhcHBsaWNhdGlvbiByZWFkeSBmb3IgdGhlIG5leHQgdmVyc2lvbiBvZiBNYXRlcmlhbCBVSS5cbiAgICogQGRlZmF1bHQgc3R5bGVkKEJhY2tkcm9wLCB7XG4gICAqICAgbmFtZTogJ011aU1vZGFsJyxcbiAgICogICBzbG90OiAnQmFja2Ryb3AnLFxuICAgKiAgIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgKiAgICAgcmV0dXJuIHN0eWxlcy5iYWNrZHJvcDtcbiAgICogICB9LFxuICAgKiB9KSh7XG4gICAqICAgekluZGV4OiAtMSxcbiAgICogfSlcbiAgICovXG4gIEJhY2tkcm9wQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYEJhY2tkcm9wYF0oL21hdGVyaWFsLXVpL2FwaS9iYWNrZHJvcC8pIGVsZW1lbnQuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgc2xvdFByb3BzLmJhY2tkcm9wYCBpbnN0ZWFkLlxuICAgKi9cbiAgQmFja2Ryb3BQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEEgc2luZ2xlIGNoaWxkIGNvbnRlbnQgZWxlbWVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBlbGVtZW50QWNjZXB0aW5nUmVmLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogV2hlbiBzZXQgdG8gdHJ1ZSB0aGUgTW9kYWwgd2FpdHMgdW50aWwgYSBuZXN0ZWQgVHJhbnNpdGlvbiBpcyBjb21wbGV0ZWQgYmVmb3JlIGNsb3NpbmcuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjbG9zZUFmdGVyVHJhbnNpdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90c2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90c2AgcHJvcCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBCYWNrZHJvcDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdFByb3BzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RQcm9wc2AgcHJvcCBpbnN0ZWFkLCBhcyBgY29tcG9uZW50c1Byb3BzYCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBiYWNrZHJvcDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgICByb290OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG4gIH0pLFxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50IG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBvbmUuXG4gICAqIFRoZSBgY29udGFpbmVyYCB3aWxsIGhhdmUgdGhlIHBvcnRhbCBjaGlsZHJlbiBhcHBlbmRlZCB0byBpdC5cbiAgICpcbiAgICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYSBjYWxsYmFjaywgd2hpY2ggaXMgY2FsbGVkIGluIGEgUmVhY3QgbGF5b3V0IGVmZmVjdC5cbiAgICogVGhpcyBsZXRzIHlvdSBzZXQgdGhlIGNvbnRhaW5lciBmcm9tIGEgcmVmLCBhbmQgYWxzbyBtYWtlcyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcgcG9zc2libGUuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGl0IHVzZXMgdGhlIGJvZHkgb2YgdGhlIHRvcC1sZXZlbCBkb2N1bWVudCBvYmplY3QsXG4gICAqIHNvIGl0J3Mgc2ltcGx5IGBkb2N1bWVudC5ib2R5YCBtb3N0IG9mIHRoZSB0aW1lLlxuICAgKi9cbiAgY29udGFpbmVyOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG1vZGFsIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgc2hpZnQgZm9jdXMgdG8gaXRzZWxmIHdoZW4gaXQgb3BlbnMsIGFuZFxuICAgKiByZXBsYWNlIGl0IHRvIHRoZSBsYXN0IGZvY3VzZWQgZWxlbWVudCB3aGVuIGl0IGNsb3Nlcy5cbiAgICogVGhpcyBhbHNvIHdvcmtzIGNvcnJlY3RseSB3aXRoIGFueSBtb2RhbCBjaGlsZHJlbiB0aGF0IGhhdmUgdGhlIGBkaXNhYmxlQXV0b0ZvY3VzYCBwcm9wLlxuICAgKlxuICAgKiBHZW5lcmFsbHkgdGhpcyBzaG91bGQgbmV2ZXIgYmUgc2V0IHRvIGB0cnVlYCBhcyBpdCBtYWtlcyB0aGUgbW9kYWwgbGVzc1xuICAgKiBhY2Nlc3NpYmxlIHRvIGFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMsIGxpa2Ugc2NyZWVuIHJlYWRlcnMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlQXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG1vZGFsIHdpbGwgbm90IHByZXZlbnQgZm9jdXMgZnJvbSBsZWF2aW5nIHRoZSBtb2RhbCB3aGlsZSBvcGVuLlxuICAgKlxuICAgKiBHZW5lcmFsbHkgdGhpcyBzaG91bGQgbmV2ZXIgYmUgc2V0IHRvIGB0cnVlYCBhcyBpdCBtYWtlcyB0aGUgbW9kYWwgbGVzc1xuICAgKiBhY2Nlc3NpYmxlIHRvIGFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMsIGxpa2Ugc2NyZWVuIHJlYWRlcnMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlRW5mb3JjZUZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgaGl0dGluZyBlc2NhcGUgd2lsbCBub3QgZmlyZSB0aGUgYG9uQ2xvc2VgIGNhbGxiYWNrLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUVzY2FwZUtleURvd246IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGBjaGlsZHJlbmAgd2lsbCBiZSB1bmRlciB0aGUgRE9NIGhpZXJhcmNoeSBvZiB0aGUgcGFyZW50IGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVQb3J0YWw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbW9kYWwgd2lsbCBub3QgcmVzdG9yZSBmb2N1cyB0byBwcmV2aW91c2x5IGZvY3VzZWQgZWxlbWVudCBvbmNlXG4gICAqIG1vZGFsIGlzIGhpZGRlbiBvciB1bm1vdW50ZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUmVzdG9yZUZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIHNjcm9sbCBsb2NrIGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVNjcm9sbExvY2s6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYmFja2Ryb3AgaXMgbm90IHJlbmRlcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaGlkZUJhY2tkcm9wOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEFsd2F5cyBrZWVwIHRoZSBjaGlsZHJlbiBpbiB0aGUgRE9NLlxuICAgKiBUaGlzIHByb3AgY2FuIGJlIHVzZWZ1bCBpbiBTRU8gc2l0dWF0aW9uIG9yXG4gICAqIHdoZW4geW91IHdhbnQgdG8gbWF4aW1pemUgdGhlIHJlc3BvbnNpdmVuZXNzIG9mIHRoZSBNb2RhbC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGtlZXBNb3VudGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGJhY2tkcm9wIGlzIGNsaWNrZWQuXG4gICAqIEBkZXByZWNhdGVkIFVzZSB0aGUgYG9uQ2xvc2VgIHByb3Agd2l0aCB0aGUgYHJlYXNvbmAgYXJndW1lbnQgdG8gaGFuZGxlIHRoZSBgYmFja2Ryb3BDbGlja2AgZXZlbnRzLlxuICAgKi9cbiAgb25CYWNrZHJvcENsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqIFRoZSBgcmVhc29uYCBwYXJhbWV0ZXIgY2FuIG9wdGlvbmFsbHkgYmUgdXNlZCB0byBjb250cm9sIHRoZSByZXNwb25zZSB0byBgb25DbG9zZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiBDYW4gYmU6IGBcImVzY2FwZUtleURvd25cImAsIGBcImJhY2tkcm9wQ2xpY2tcImAuXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gY2FsbGVkIHdoZW4gYSB0cmFuc2l0aW9uIGVudGVycy5cbiAgICovXG4gIG9uVHJhbnNpdGlvbkVudGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gY2FsbGVkIHdoZW4gYSB0cmFuc2l0aW9uIGhhcyBleGl0ZWQuXG4gICAqL1xuICBvblRyYW5zaXRpb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIFRoZSBwcm9wcyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlIHRoZSBNb2RhbC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBiYWNrZHJvcDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgICByb290OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgTW9kYWwuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBiYWNrZHJvcDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IE1vZGFsOyJdLCJuYW1lcyI6WyJnZXRGaWxsZWRJbnB1dFV0aWxpdHlDbGFzcyIsInNsb3QiLCJnZW5lcmF0ZVV0aWxpdHlDbGFzcyIsImlucHV0QmFzZUNsYXNzZXMiLCJnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIiwiX2V4Y2x1ZGVkIiwiRmlsbGVkSW5wdXRSb290Iiwic3R5bGVkIiwiSW5wdXRCYXNlIiwic2hvdWxkRm9yd2FyZFByb3AiLCJwcm9wIiwicm9vdFNob3VsZEZvcndhcmRQcm9wIiwibmFtZSIsIm92ZXJyaWRlc1Jlc29sdmVyIiwicHJvcHMiLCJzdHlsZXMiLCJvd25lclN0YXRlIiwiZGlzYWJsZVVuZGVybGluZSIsInVuZGVybGluZSIsInRoZW1lIiwiX3BhbGV0dGUiLCJsaWdodCIsInBhbGV0dGUiLCJtb2RlIiwiYm90dG9tTGluZUNvbG9yIiwiYmFja2dyb3VuZENvbG9yIiwiaG92ZXJCYWNrZ3JvdW5kIiwiZGlzYWJsZWRCYWNrZ3JvdW5kIiwicG9zaXRpb24iLCJ2YXJzIiwiRmlsbGVkSW5wdXQiLCJiZyIsImJvcmRlclRvcExlZnRSYWRpdXMiLCJzaGFwZSIsImJvcmRlclJhZGl1cyIsImJvcmRlclRvcFJpZ2h0UmFkaXVzIiwidHJhbnNpdGlvbiIsInRyYW5zaXRpb25zIiwiY3JlYXRlIiwiZHVyYXRpb24iLCJzaG9ydGVyIiwiZWFzaW5nIiwiZWFzZU91dCIsImhvdmVyQmciLCJmb2N1c2VkIiwiZGlzYWJsZWQiLCJkaXNhYmxlZEJnIiwiYm9yZGVyQm90dG9tIiwiY29sb3IiLCJtYWluIiwibGVmdCIsImJvdHRvbSIsImNvbnRlbnQiLCJyaWdodCIsInRyYW5zZm9ybSIsInBvaW50ZXJFdmVudHMiLCJlcnJvciIsImJvcmRlckJvdHRvbUNvbG9yIiwiY29tbW9uIiwib25CYWNrZ3JvdW5kQ2hhbm5lbCIsIm9wYWNpdHkiLCJpbnB1dFVuZGVybGluZSIsInRleHQiLCJwcmltYXJ5IiwiYm9yZGVyQm90dG9tU3R5bGUiLCJzdGFydEFkb3JubWVudCIsInBhZGRpbmdMZWZ0IiwiZW5kQWRvcm5tZW50IiwicGFkZGluZ1JpZ2h0IiwibXVsdGlsaW5lIiwicGFkZGluZyIsInNpemUiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSIsImhpZGRlbkxhYmVsIiwiRmlsbGVkSW5wdXRJbnB1dCIsIldlYmtpdEJveFNoYWRvdyIsIldlYmtpdFRleHRGaWxsQ29sb3IiLCJjYXJldENvbG9yIiwiZ2V0Q29sb3JTY2hlbWVTZWxlY3RvciIsImluUHJvcHMiLCJyZWYiLCJfcmVmIiwiX3Nsb3RzJHJvb3QiLCJfcmVmMiIsIl9zbG90cyRpbnB1dCIsImNvbXBvbmVudHMiLCJjb21wb25lbnRzUHJvcHMiLCJjb21wb25lbnRzUHJvcHNQcm9wIiwiZnVsbFdpZHRoIiwiaW5wdXRDb21wb25lbnQiLCJzbG90UHJvcHMiLCJzbG90cyIsInR5cGUiLCJvdGhlciIsImNsYXNzZXMiLCJyb290IiwiaW5wdXQiLCJjb21wb3NlZENsYXNzZXMiLCJjb21wb3NlQ2xhc3NlcyIsInVzZVV0aWxpdHlDbGFzc2VzIiwiZmlsbGVkSW5wdXRDb21wb25lbnRzUHJvcHMiLCJkZWVwbWVyZ2UiLCJSb290U2xvdCIsIlJvb3QiLCJJbnB1dFNsb3QiLCJJbnB1dCIsIm11aU5hbWUiLCJnZXRGb3JtQ29udHJvbFV0aWxpdHlDbGFzc2VzIiwiRm9ybUNvbnRyb2xSb290IiwiY2FwaXRhbGl6ZSIsIm1hcmdpbiIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwibWluV2lkdGgiLCJib3JkZXIiLCJ2ZXJ0aWNhbEFsaWduIiwibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIiwid2lkdGgiLCJjaGlsZHJlbiIsImNsYXNzTmFtZSIsImNvbXBvbmVudCIsInZpc3VhbGx5Rm9jdXNlZCIsInJlcXVpcmVkIiwidmFyaWFudCIsImFkb3JuZWRTdGFydCIsInNldEFkb3JuZWRTdGFydCIsImluaXRpYWxBZG9ybmVkU3RhcnQiLCJmb3JFYWNoIiwiY2hpbGQiLCJpc011aUVsZW1lbnQiLCJmaWxsZWQiLCJzZXRGaWxsZWQiLCJpbml0aWFsRmlsbGVkIiwiaW5wdXRQcm9wcyIsImZvY3VzZWRTdGF0ZSIsInNldEZvY3VzZWQiLCJ1bmRlZmluZWQiLCJyZWdpc3RlckVmZmVjdCIsImNoaWxkQ29udGV4dCIsIm9uQmx1ciIsIm9uRW1wdHkiLCJvbkZpbGxlZCIsIm9uRm9jdXMiLCJGb3JtQ29udHJvbENvbnRleHQiLCJQcm92aWRlciIsInZhbHVlIiwiYXMiLCJjbHN4IiwiZm9ybUNvbnRyb2xTdGF0ZSIsInN0YXRlcyIsIm11aUZvcm1Db250cm9sIiwicmVkdWNlIiwiYWNjIiwic3RhdGUiLCJ1c2VGb3JtQ29udHJvbCIsImdldEZvcm1IZWxwZXJUZXh0VXRpbGl0eUNsYXNzZXMiLCJfc3BhbiIsIkZvcm1IZWxwZXJUZXh0Um9vdCIsImNvbnRhaW5lZCIsInNlY29uZGFyeSIsInR5cG9ncmFwaHkiLCJjYXB0aW9uIiwidGV4dEFsaWduIiwibWFyZ2luUmlnaHQiLCJtYXJnaW5MZWZ0IiwiZmNzIiwiZGVmYXVsdFRoZW1lIiwidGhlbWVJZCIsImdldEdyaWRVdGlsaXR5Q2xhc3MiLCJHUklEX1NJWkVTIiwibWFwIiwic3BhY2luZyIsImRpcmVjdGlvbiIsIndyYXAiLCJnZXRPZmZzZXQiLCJ2YWwiLCJwYXJzZSIsInBhcnNlRmxvYXQiLCJTdHJpbmciLCJyZXBsYWNlIiwiZXh0cmFjdFplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzIiwiYnJlYWtwb2ludHMiLCJ2YWx1ZXMiLCJub25aZXJvS2V5IiwiT2JqZWN0Iiwia2V5cyIsImtleSIsInNvcnRlZEJyZWFrcG9pbnRLZXlzQnlWYWx1ZSIsInNvcnQiLCJhIiwiYiIsInNsaWNlIiwiaW5kZXhPZiIsIkdyaWRSb290IiwiY29udGFpbmVyIiwiaXRlbSIsInplcm9NaW5XaWR0aCIsInNwYWNpbmdTdHlsZXMiLCJOdW1iZXIiLCJpc05hTiIsImJyZWFrcG9pbnQiLCJwdXNoIiwicmVzb2x2ZVNwYWNpbmdTdHlsZXMiLCJicmVha3BvaW50c1N0eWxlcyIsImJveFNpemluZyIsImZsZXhXcmFwIiwiZGlyZWN0aW9uVmFsdWVzIiwicHJvcFZhbHVlIiwib3V0cHV0IiwibWF4V2lkdGgiLCJyb3dTcGFjaW5nIiwicm93U3BhY2luZ1ZhbHVlcyIsInplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzIiwiX3plcm9WYWx1ZUJyZWFrcG9pbnRLIiwidGhlbWVTcGFjaW5nIiwiaW5jbHVkZXMiLCJjb2x1bW5TcGFjaW5nIiwiY29sdW1uU3BhY2luZ1ZhbHVlcyIsIl96ZXJvVmFsdWVCcmVha3BvaW50SzIiLCJnbG9iYWxTdHlsZXMiLCJmbGV4QmFzaXMiLCJmbGV4R3JvdyIsImZsZXhTaHJpbmsiLCJjb2x1bW5zQnJlYWtwb2ludFZhbHVlcyIsImNvbHVtbnMiLCJjb2x1bW5WYWx1ZSIsIk1hdGgiLCJyb3VuZCIsIm1vcmUiLCJhc3NpZ24iLCJ1cCIsIkdyaWQiLCJ0aGVtZVByb3BzIiwidXNlVGhlbWUiLCJleHRlbmRTeFByb3AiLCJjb2x1bW5zUHJvcCIsImNvbHVtblNwYWNpbmdQcm9wIiwicm93U3BhY2luZ1Byb3AiLCJjb2x1bW5zQ29udGV4dCIsImJyZWFrcG9pbnRzVmFsdWVzIiwib3RoZXJGaWx0ZXJlZCIsInNwYWNpbmdDbGFzc2VzIiwicmVzb2x2ZVNwYWNpbmdDbGFzc2VzIiwiYnJlYWtwb2ludHNDbGFzc2VzIiwiZ2V0U2NhbGUiLCJlbnRlcmluZyIsImVudGVyZWQiLCJpc1dlYktpdDE1NCIsIm5hdmlnYXRvciIsInRlc3QiLCJ1c2VyQWdlbnQiLCJHcm93IiwiYWRkRW5kTGlzdGVuZXIiLCJhcHBlYXIiLCJpbiIsImluUHJvcCIsIm9uRW50ZXIiLCJvbkVudGVyZWQiLCJvbkVudGVyaW5nIiwib25FeGl0Iiwib25FeGl0ZWQiLCJvbkV4aXRpbmciLCJzdHlsZSIsInRpbWVvdXQiLCJUcmFuc2l0aW9uQ29tcG9uZW50IiwidGltZXIiLCJhdXRvVGltZW91dCIsIm5vZGVSZWYiLCJoYW5kbGVSZWYiLCJub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrIiwiY2FsbGJhY2siLCJtYXliZUlzQXBwZWFyaW5nIiwibm9kZSIsImN1cnJlbnQiLCJoYW5kbGVFbnRlcmluZyIsImhhbmRsZUVudGVyIiwiaXNBcHBlYXJpbmciLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJkZWxheSIsInRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbiIsImdldEF1dG9IZWlnaHREdXJhdGlvbiIsImNsaWVudEhlaWdodCIsImpvaW4iLCJoYW5kbGVFbnRlcmVkIiwiaGFuZGxlRXhpdGluZyIsImhhbmRsZUV4aXQiLCJoYW5kbGVFeGl0ZWQiLCJuZXh0Iiwic3RhcnQiLCJjaGlsZFByb3BzIiwidmlzaWJpbGl0eSIsIm11aVN1cHBvcnRBdXRvIiwiZ2V0SW5wdXRVdGlsaXR5Q2xhc3MiLCJJbnB1dFJvb3QiLCJmb3JtQ29udHJvbCIsIklucHV0SW5wdXQiLCJpbnB1dENvbXBvbmVudHNQcm9wcyIsInJvb3RPdmVycmlkZXNSZXNvbHZlciIsImFkb3JuZWRFbmQiLCJzaXplU21hbGwiLCJpbnB1dE92ZXJyaWRlc1Jlc29sdmVyIiwiaW5wdXRTaXplU21hbGwiLCJpbnB1dE11bHRpbGluZSIsImlucHV0VHlwZVNlYXJjaCIsImlucHV0QWRvcm5lZFN0YXJ0IiwiaW5wdXRBZG9ybmVkRW5kIiwiaW5wdXRIaWRkZW5MYWJlbCIsIklucHV0QmFzZVJvb3QiLCJib2R5MSIsImxpbmVIZWlnaHQiLCJjdXJzb3IiLCJhbGlnbkl0ZW1zIiwiSW5wdXRCYXNlQ29tcG9uZW50IiwicGxhY2Vob2xkZXIiLCJpbnB1dFBsYWNlaG9sZGVyIiwicGxhY2Vob2xkZXJIaWRkZW4iLCJwbGFjZWhvbGRlclZpc2libGUiLCJmb250IiwibGV0dGVyU3BhY2luZyIsImJhY2tncm91bmQiLCJoZWlnaHQiLCJXZWJraXRUYXBIaWdobGlnaHRDb2xvciIsImFuaW1hdGlvbk5hbWUiLCJhbmltYXRpb25EdXJhdGlvbiIsIm91dGxpbmUiLCJib3hTaGFkb3ciLCJXZWJraXRBcHBlYXJhbmNlIiwicmVzaXplIiwiTW96QXBwZWFyYW5jZSIsImlucHV0R2xvYmFsU3R5bGVzIiwiZnJvbSIsIl9zbG90UHJvcHMkaW5wdXQiLCJhcmlhRGVzY3JpYmVkYnkiLCJhdXRvQ29tcGxldGUiLCJhdXRvRm9jdXMiLCJkZWZhdWx0VmFsdWUiLCJkaXNhYmxlSW5qZWN0aW5nR2xvYmFsU3R5bGVzIiwiaWQiLCJpbnB1dFByb3BzUHJvcCIsImlucHV0UmVmIiwiaW5wdXRSZWZQcm9wIiwibWF4Um93cyIsIm1pblJvd3MiLCJvbkNoYW5nZSIsIm9uQ2xpY2siLCJvbktleURvd24iLCJvbktleVVwIiwicmVhZE9ubHkiLCJyZW5kZXJTdWZmaXgiLCJyb3dzIiwidmFsdWVQcm9wIiwiaXNDb250cm9sbGVkIiwiaGFuZGxlSW5wdXRSZWZXYXJuaW5nIiwiaW5zdGFuY2UiLCJoYW5kbGVJbnB1dFJlZiIsImNoZWNrRGlydHkiLCJvYmoiLCJJbnB1dENvbXBvbmVudCIsIkJvb2xlYW4iLCJnIiwicm9vdFByb3BzIiwiZXZlbnQiLCJjdXJyZW50VGFyZ2V0IiwidGFyZ2V0IiwiZm9jdXMiLCJvbkFuaW1hdGlvblN0YXJ0IiwiYXJncyIsImVsZW1lbnQiLCJFcnJvciIsInN0b3BQcm9wYWdhdGlvbiIsImdldElucHV0QmFzZVV0aWxpdHlDbGFzcyIsImhhc1ZhbHVlIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiaXNGaWxsZWQiLCJTU1IiLCJpc0Fkb3JuZWRTdGFydCIsImdldEZvcm1MYWJlbFV0aWxpdHlDbGFzc2VzIiwiRm9ybUxhYmVsUm9vdCIsImNvbG9yU2Vjb25kYXJ5IiwiQXN0ZXJpc2tDb21wb25lbnQiLCJhc3RlcmlzayIsImdldElucHV0TGFiZWxVdGlsaXR5Q2xhc3NlcyIsIklucHV0TGFiZWxSb290Iiwic2hyaW5rIiwiZGlzYWJsZUFuaW1hdGlvbiIsImFuaW1hdGVkIiwidHJhbnNmb3JtT3JpZ2luIiwid2hpdGVTcGFjZSIsIm92ZXJmbG93IiwidGV4dE92ZXJmbG93IiwidG9wIiwiekluZGV4IiwidXNlclNlbGVjdCIsInNocmlua1Byb3AiLCJnZXRMaXN0VXRpbGl0eUNsYXNzIiwiTGlzdFJvb3QiLCJkaXNhYmxlUGFkZGluZyIsImRlbnNlIiwic3ViaGVhZGVyIiwibGlzdFN0eWxlIiwiY29udGV4dCIsIkxpc3RDb250ZXh0IiwiZ2V0TGlzdEl0ZW1VdGlsaXR5Q2xhc3MiLCJnZXRMaXN0SXRlbVNlY29uZGFyeUFjdGlvbkNsYXNzZXNVdGlsaXR5Q2xhc3MiLCJMaXN0SXRlbVNlY29uZGFyeUFjdGlvblJvb3QiLCJkaXNhYmxlR3V0dGVycyIsIkxpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uIiwiX2V4Y2x1ZGVkMiIsIkxpc3RJdGVtUm9vdCIsImFsaWduSXRlbXNGbGV4U3RhcnQiLCJkaXZpZGVyIiwiZ3V0dGVycyIsImJ1dHRvbiIsImhhc1NlY29uZGFyeUFjdGlvbiIsInNlY29uZGFyeUFjdGlvbiIsImp1c3RpZnlDb250ZW50IiwidGV4dERlY29yYXRpb24iLCJsaXN0SXRlbUJ1dHRvbkNsYXNzZXMiLCJmb2N1c1Zpc2libGUiLCJhY3Rpb24iLCJzZWxlY3RlZCIsIm1haW5DaGFubmVsIiwic2VsZWN0ZWRPcGFjaXR5IiwiZm9jdXNPcGFjaXR5IiwiZGlzYWJsZWRPcGFjaXR5IiwiYmFja2dyb3VuZENsaXAiLCJzaG9ydGVzdCIsImhvdmVyIiwiaG92ZXJPcGFjaXR5IiwiTGlzdEl0ZW1Db250YWluZXIiLCJjaGlsZHJlblByb3AiLCJjb21wb25lbnRQcm9wIiwiQ29udGFpbmVyQ29tcG9uZW50IiwiQ29udGFpbmVyUHJvcHMiLCJDb250YWluZXJDbGFzc05hbWUiLCJmb2N1c1Zpc2libGVDbGFzc05hbWUiLCJsaXN0SXRlbVJlZiIsInVzZUVuaGFuY2VkRWZmZWN0IiwidG9BcnJheSIsInVzZUZvcmtSZWYiLCJjb21wb25lbnRQcm9wcyIsIkNvbXBvbmVudCIsIkJ1dHRvbkJhc2UiLCJpc0hvc3RDb21wb25lbnQiLCJwb3AiLCJMaXN0SXRlbUJ1dHRvblJvb3QiLCJocmVmIiwidG8iLCJnZXRMaXN0SXRlbUJ1dHRvblV0aWxpdHlDbGFzcyIsIm5leHRJdGVtIiwibGlzdCIsImRpc2FibGVMaXN0V3JhcCIsImZpcnN0Q2hpbGQiLCJuZXh0RWxlbWVudFNpYmxpbmciLCJwcmV2aW91c0l0ZW0iLCJsYXN0Q2hpbGQiLCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIiwidGV4dENyaXRlcmlhTWF0Y2hlcyIsIm5leHRGb2N1cyIsInRleHRDcml0ZXJpYSIsImlubmVyVGV4dCIsInRleHRDb250ZW50IiwidHJpbSIsInRvTG93ZXJDYXNlIiwicmVwZWF0aW5nIiwibW92ZUZvY3VzIiwiY3VycmVudEZvY3VzIiwiZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSIsInRyYXZlcnNhbEZ1bmN0aW9uIiwid3JhcHBlZE9uY2UiLCJuZXh0Rm9jdXNEaXNhYmxlZCIsImdldEF0dHJpYnV0ZSIsImhhc0F0dHJpYnV0ZSIsImFjdGlvbnMiLCJhdXRvRm9jdXNJdGVtIiwibGlzdFJlZiIsInRleHRDcml0ZXJpYVJlZiIsInByZXZpb3VzS2V5TWF0Y2hlZCIsImxhc3RUaW1lIiwiYWRqdXN0U3R5bGVGb3JTY3JvbGxiYXIiLCJjb250YWluZXJFbGVtZW50Iiwibm9FeHBsaWNpdFdpZHRoIiwic2Nyb2xsYmFyU2l6ZSIsImdldFNjcm9sbGJhclNpemUiLCJvd25lckRvY3VtZW50IiwiYWN0aXZlSXRlbUluZGV4IiwiaW5kZXgiLCJtdWlTa2lwTGlzdEhpZ2hsaWdodCIsIml0ZW1zIiwibmV3Q2hpbGRQcm9wcyIsInRhYkluZGV4IiwiTGlzdCIsInJvbGUiLCJhY3RpdmVFbGVtZW50IiwicHJldmVudERlZmF1bHQiLCJjcml0ZXJpYSIsImxvd2VyS2V5IiwiY3VyclRpbWUiLCJwZXJmb3JtYW5jZSIsIm5vdyIsImtlZXBGb2N1c09uQ3VycmVudCIsImdldE1lbnVVdGlsaXR5Q2xhc3MiLCJSVExfT1JJR0lOIiwidmVydGljYWwiLCJob3Jpem9udGFsIiwiTFRSX09SSUdJTiIsIk1lbnVSb290IiwiUG9wb3ZlciIsIk1lbnVQYXBlciIsInBhcGVyIiwibWF4SGVpZ2h0IiwiV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmciLCJNZW51TWVudUxpc3QiLCJfc2xvdHMkcGFwZXIiLCJfc2xvdFByb3BzJHBhcGVyIiwiZGlzYWJsZUF1dG9Gb2N1c0l0ZW0iLCJNZW51TGlzdFByb3BzIiwib25DbG9zZSIsIm9wZW4iLCJQYXBlclByb3BzIiwiUG9wb3ZlckNsYXNzZXMiLCJUcmFuc2l0aW9uUHJvcHMiLCJpc1J0bCIsIm1lbnVMaXN0QWN0aW9uc1JlZiIsIlBhcGVyU2xvdCIsInBhcGVyRXh0ZXJuYWxTbG90UHJvcHMiLCJyb290U2xvdFByb3BzIiwidXNlU2xvdFByb3BzIiwiZWxlbWVudFR5cGUiLCJleHRlcm5hbFNsb3RQcm9wcyIsInBhcGVyU2xvdFByb3BzIiwiYW5jaG9yT3JpZ2luIiwiYXJpYUhpZGRlbiIsInNob3ciLCJzZXRBdHRyaWJ1dGUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJnZXRQYWRkaW5nUmlnaHQiLCJwYXJzZUludCIsIm93bmVyV2luZG93IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImFyaWFIaWRkZW5TaWJsaW5ncyIsIm1vdW50RWxlbWVudCIsImN1cnJlbnRFbGVtZW50IiwiZWxlbWVudHNUb0V4Y2x1ZGUiLCJibGFja2xpc3QiLCJjYWxsIiwiaXNOb3RFeGNsdWRlZEVsZW1lbnQiLCJpc05vdEZvcmJpZGRlbkVsZW1lbnQiLCJpc0ZvcmJpZGRlblRhZ05hbWUiLCJ0YWdOYW1lIiwiaXNJbnB1dEhpZGRlbiIsImlzQXJpYUhpZGRlbkZvcmJpZGRlbk9uRWxlbWVudCIsImZpbmRJbmRleE9mIiwiaWR4Iiwic29tZSIsImRlZmF1bHRNYW5hZ2VyIiwiY29uc3RydWN0b3IiLCJ0aGlzIiwiY29udGFpbmVycyIsIm1vZGFscyIsImFkZCIsIm1vZGFsIiwibW9kYWxJbmRleCIsIm1vZGFsUmVmIiwiaGlkZGVuU2libGluZ3MiLCJnZXRIaWRkZW5TaWJsaW5ncyIsIm1vdW50IiwiY29udGFpbmVySW5kZXgiLCJyZXN0b3JlIiwiY29udGFpbmVySW5mbyIsInJlc3RvcmVTdHlsZSIsImRpc2FibGVTY3JvbGxMb2NrIiwiZG9jIiwiYm9keSIsImlubmVyV2lkdGgiLCJkb2N1bWVudEVsZW1lbnQiLCJjbGllbnRXaWR0aCIsInNjcm9sbEhlaWdodCIsImlzT3ZlcmZsb3dpbmciLCJwcm9wZXJ0eSIsImVsIiwiZml4ZWRFbGVtZW50cyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJzY3JvbGxDb250YWluZXIiLCJwYXJlbnROb2RlIiwiRG9jdW1lbnRGcmFnbWVudCIsInBhcmVudCIsInBhcmVudEVsZW1lbnQiLCJjb250YWluZXJXaW5kb3ciLCJub2RlTmFtZSIsIm92ZXJmbG93WSIsIm92ZXJmbG93WCIsInNldFByb3BlcnR5IiwicmVtb3ZlUHJvcGVydHkiLCJoYW5kbGVDb250YWluZXIiLCJyZW1vdmUiLCJhcmlhSGlkZGVuU3RhdGUiLCJzcGxpY2UiLCJuZXh0VG9wIiwiaXNUb3BNb2RhbCIsImdldE1vZGFsVXRpbGl0eUNsYXNzIiwiTW9kYWxSb290IiwiZXhpdGVkIiwiaGlkZGVuIiwiTW9kYWxCYWNrZHJvcCIsIkJhY2tkcm9wIiwiYmFja2Ryb3AiLCJfc2xvdHMkYmFja2Ryb3AiLCJfc2xvdFByb3BzJHJvb3QiLCJfc2xvdFByb3BzJGJhY2tkcm9wIiwiQmFja2Ryb3BDb21wb25lbnQiLCJCYWNrZHJvcFByb3BzIiwiY2xvc2VBZnRlclRyYW5zaXRpb24iLCJkaXNhYmxlQXV0b0ZvY3VzIiwiZGlzYWJsZUVuZm9yY2VGb2N1cyIsImRpc2FibGVFc2NhcGVLZXlEb3duIiwiZGlzYWJsZVBvcnRhbCIsImRpc2FibGVSZXN0b3JlRm9jdXMiLCJoaWRlQmFja2Ryb3AiLCJrZWVwTW91bnRlZCIsIm9uQmFja2Ryb3BDbGljayIsInByb3BzV2l0aERlZmF1bHRzIiwiZ2V0Um9vdFByb3BzIiwiZ2V0QmFja2Ryb3BQcm9wcyIsImdldFRyYW5zaXRpb25Qcm9wcyIsInBvcnRhbFJlZiIsImhhc1RyYW5zaXRpb24iLCJwYXJhbWV0ZXJzIiwibWFuYWdlciIsIm9uVHJhbnNpdGlvbkVudGVyIiwib25UcmFuc2l0aW9uRXhpdGVkIiwicm9vdFJlZiIsIm1vdW50Tm9kZVJlZiIsInNldEV4aXRlZCIsImhhc093blByb3BlcnR5IiwiZ2V0SGFzVHJhbnNpdGlvbiIsImFyaWFIaWRkZW5Qcm9wIiwiZ2V0TW9kYWwiLCJoYW5kbGVNb3VudGVkIiwic2Nyb2xsVG9wIiwiaGFuZGxlT3BlbiIsInVzZUV2ZW50Q2FsbGJhY2siLCJyZXNvbHZlZENvbnRhaW5lciIsImdldENvbnRhaW5lciIsImhhbmRsZVBvcnRhbFJlZiIsImhhbmRsZUNsb3NlIiwiY3JlYXRlSGFuZGxlS2V5RG93biIsIm90aGVySGFuZGxlcnMiLCJfb3RoZXJIYW5kbGVycyRvbktleUQiLCJ3aGljaCIsImNyZWF0ZUhhbmRsZUJhY2tkcm9wQ2xpY2siLCJfb3RoZXJIYW5kbGVycyRvbkNsaWMiLCJwcm9wc0V2ZW50SGFuZGxlcnMiLCJleHRyYWN0RXZlbnRIYW5kbGVycyIsImV4dGVybmFsRXZlbnRIYW5kbGVycyIsImNyZWF0ZUNoYWluZWRGdW5jdGlvbiIsIkJhY2tkcm9wU2xvdCIsImJhY2tkcm9wU2xvdFByb3BzIiwiZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcyIsImdldFNsb3RQcm9wcyIsImFkZGl0aW9uYWxQcm9wcyIsImJhY2tkcm9wUHJvcHMiLCJlIiwiUG9ydGFsIiwiRm9jdXNUcmFwIiwiaXNFbmFibGVkIl0sInNvdXJjZVJvb3QiOiIifQ==