"use strict";(self.webpackChunksrsrfl_react=self.webpackChunksrsrfl_react||[]).push([[677],{5001:(e,t,o)=>{o.d(t,{A:()=>k});var n=o(8587),r=o(8168),a=o(6540),i=o(4164),s=o(5659),l=o(8466),d=o(1848),c=o(3541),u=o(8851),p=o(6852),m=o(4073),v=o(8413),b=o(1609);function h(e){return(0,b.A)("MuiLink",e)}const g=(0,v.A)("MuiLink",["root","underlineNone","underlineHover","underlineAlways","button","focusVisible"]);var f=o(6481),A=o(4279);const y={primary:"primary.main",textPrimary:"text.primary",secondary:"secondary.main",textSecondary:"text.secondary",error:"error.main"},x=({theme:e,ownerState:t})=>{const o=(e=>y[e]||e)(t.color),n=(0,f.Yn)(e,`palette.${o}`,!1)||t.color,r=(0,f.Yn)(e,`palette.${o}Channel`);return"vars"in e&&r?`rgba(${r} / 0.4)`:(0,A.X4)(n,.4)};var C=o(4848);const w=["className","color","component","onBlur","onFocus","TypographyClasses","underline","variant","sx"],S=(0,d.Ay)(m.A,{name:"MuiLink",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,t[`underline${(0,l.A)(o.underline)}`],"button"===o.component&&t.button]}})((({theme:e,ownerState:t})=>(0,r.A)({},"none"===t.underline&&{textDecoration:"none"},"hover"===t.underline&&{textDecoration:"none","&:hover":{textDecoration:"underline"}},"always"===t.underline&&(0,r.A)({textDecoration:"underline"},"inherit"!==t.color&&{textDecorationColor:x({theme:e,ownerState:t})},{"&:hover":{textDecorationColor:"inherit"}}),"button"===t.component&&{position:"relative",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none","&::-moz-focus-inner":{borderStyle:"none"},[`&.${g.focusVisible}`]:{outline:"auto"}}))),k=a.forwardRef((function(e,t){const o=(0,c.A)({props:e,name:"MuiLink"}),{className:d,color:m="primary",component:v="a",onBlur:b,onFocus:g,TypographyClasses:f,underline:A="always",variant:x="inherit",sx:k}=o,P=(0,n.A)(o,w),{isFocusVisibleRef:M,onBlur:R,onFocus:$,ref:I}=(0,u.A)(),[O,N]=a.useState(!1),F=(0,p.A)(t,I),L=(0,r.A)({},o,{color:m,component:v,focusVisible:O,underline:A,variant:x}),T=(e=>{const{classes:t,component:o,focusVisible:n,underline:r}=e,a={root:["root",`underline${(0,l.A)(r)}`,"button"===o&&"button",n&&"focusVisible"]};return(0,s.A)(a,h,t)})(L);return(0,C.jsx)(S,(0,r.A)({color:m,className:(0,i.A)(T.root,d),classes:f,component:v,onBlur:e=>{R(e),!1===M.current&&N(!1),b&&b(e)},onFocus:e=>{$(e),!0===M.current&&N(!0),g&&g(e)},ref:F,ownerState:L,variant:x,sx:[...Object.keys(y).includes(m)?[]:[{color:m}],...Array.isArray(k)?k:[k]]},P))}))},9799:(e,t,o)=>{o.d(t,{A:()=>g});var n=o(8587),r=o(8168),a=o(6540),i=o(4164),s=o(5659),l=o(1848),d=o(3541),c=o(2850),u=o(8413),p=o(1609);function m(e){return(0,p.A)("MuiList",e)}(0,u.A)("MuiList",["root","padding","dense","subheader"]);var v=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=a.forwardRef((function(e,t){const o=(0,d.A)({props:e,name:"MuiList"}),{children:l,className:u,component:p="ul",dense:g=!1,disablePadding:f=!1,subheader:A}=o,y=(0,n.A)(o,b),x=a.useMemo((()=>({dense:g})),[g]),C=(0,r.A)({},o,{component:p,dense:g,disablePadding:f}),w=(e=>{const{classes:t,disablePadding:o,dense:n,subheader:r}=e,a={root:["root",!o&&"padding",n&&"dense",r&&"subheader"]};return(0,s.A)(a,m,t)})(C);return(0,v.jsx)(c.A.Provider,{value:x,children:(0,v.jsxs)(h,(0,r.A)({as:p,className:(0,i.A)(w.root,u),ref:t,ownerState:C},y,{children:[A,l]}))})}))},2850:(e,t,o)=>{o.d(t,{A:()=>n});const n=o(6540).createContext({})},4090:(e,t,o)=>{o.d(t,{Ay:()=>N});var n=o(8587),r=o(8168),a=o(6540),i=o(4164),s=o(5659),l=o(5419),d=o(4279),c=o(1848),u=o(3541),p=o(8850),m=o(6767),v=o(2778),b=o(6852),h=o(2850),g=o(8413),f=o(1609);function A(e){return(0,f.A)("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 C(e){return(0,f.A)("MuiListItemSecondaryAction",e)}(0,g.A)("MuiListItemSecondaryAction",["root","disableGutters"]);var w=o(4848);const S=["className"],k=(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}))),P=a.forwardRef((function(e,t){const o=(0,u.A)({props:e,name:"MuiListItemSecondaryAction"}),{className:l}=o,d=(0,n.A)(o,S),c=a.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,C,o)})(p);return(0,w.jsx)(k,(0,r.A)({className:(0,i.A)(m.root,l),ownerState:p,ref:t},d))}));P.muiName="ListItemSecondaryAction";const M=P,R=["className"],$=["alignItems","autoFocus","button","children","className","component","components","componentsProps","ContainerComponent","ContainerProps","dense","disabled","disableGutters","disablePadding","divider","focusVisibleClassName","secondaryAction","selected","slotProps","slots"],I=(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,d.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,d.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,d.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,d.X4)(e.palette.primary.main,e.palette.action.selectedOpacity)}}},t.hasSecondaryAction&&{paddingRight:48}))),O=(0,c.Ay)("li",{name:"MuiListItem",slot:"Container",overridesResolver:(e,t)=>t.container})({position:"relative"}),N=a.forwardRef((function(e,t){const o=(0,u.A)({props:e,name:"MuiListItem"}),{alignItems:d="center",autoFocus:c=!1,button:g=!1,children:f,className:x,component:C,components:S={},componentsProps:k={},ContainerComponent:P="li",ContainerProps:{className:N}={},dense:F=!1,disabled:L=!1,disableGutters:T=!1,disablePadding:E=!1,divider:j=!1,focusVisibleClassName:B,secondaryAction:D,selected:z=!1,slotProps:G={},slots:V={}}=o,W=(0,n.A)(o.ContainerProps,R),H=(0,n.A)(o,$),X=a.useContext(h.A),K=a.useMemo((()=>({dense:F||X.dense||!1,alignItems:d,disableGutters:T})),[d,X.dense,F,T]),q=a.useRef(null);(0,v.A)((()=>{c&&q.current&&q.current.focus()}),[c]);const Q=a.Children.toArray(f),Y=Q.length&&(0,m.A)(Q[Q.length-1],["ListItemSecondaryAction"]),_=(0,r.A)({},o,{alignItems:d,autoFocus:c,button:g,dense:K.dense,disabled:L,disableGutters:T,disablePadding:E,divider:j,hasSecondaryAction:Y,selected:z}),U=(e=>{const{alignItems:t,button:o,classes:n,dense:r,disabled:a,disableGutters:i,disablePadding:l,divider:d,hasSecondaryAction:c,selected:u}=e,p={root:["root",r&&"dense",!i&&"gutters",!l&&"padding",d&&"divider",a&&"disabled",o&&"button","flex-start"===t&&"alignItemsFlexStart",c&&"secondaryAction",u&&"selected"],container:["container"]};return(0,s.A)(p,A,n)})(_),Z=(0,b.A)(q,t),J=V.root||S.Root||I,ee=G.root||k.root||{},te=(0,r.A)({className:(0,i.A)(U.root,ee.className,x),disabled:L},H);let oe=C||"li";return g&&(te.component=C||"div",te.focusVisibleClassName=(0,i.A)(y.focusVisible,B),oe=p.A),Y?(oe=te.component||C?oe:"div","li"===P&&("li"===oe?oe="div":"li"===te.component&&(te.component="div")),(0,w.jsx)(h.A.Provider,{value:K,children:(0,w.jsxs)(O,(0,r.A)({as:P,className:(0,i.A)(U.container,N),ref:Z,ownerState:_},W,{children:[(0,w.jsx)(J,(0,r.A)({},ee,!(0,l.g)(J)&&{as:oe,ownerState:(0,r.A)({},_,ee.ownerState)},te,{children:Q})),Q.pop()]}))})):(0,w.jsx)(h.A.Provider,{value:K,children:(0,w.jsxs)(J,(0,r.A)({},ee,{as:oe,ref:Z},!(0,l.g)(J)&&{ownerState:(0,r.A)({},_,ee.ownerState)},te,{children:[Q,D&&(0,w.jsx)(M,{children:D})]}))})}))},7211:(e,t,o)=>{o.d(t,{A:()=>A});var n=o(8587),r=o(8168),a=o(6540),i=o(4164),s=o(5659),l=o(4279),d=o(1848),c=o(3541),u=o(8850),p=o(2778),m=o(6852),v=o(2850),b=o(2927),h=o(4848);const g=["alignItems","autoFocus","component","children","dense","disableGutters","divider","focusVisibleClassName","selected","className"],f=(0,d.Ay)(u.A,{shouldForwardProp:e=>(0,d.ep)(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"}},[`&.${b.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),[`&.${b.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)}},[`&.${b.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)}},[`&.${b.A.focusVisible}`]:{backgroundColor:(e.vars||e).palette.action.focus},[`&.${b.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}))),A=a.forwardRef((function(e,t){const o=(0,c.A)({props:e,name:"MuiListItemButton"}),{alignItems:l="center",autoFocus:d=!1,component:u="div",children:A,dense:y=!1,disableGutters:x=!1,divider:C=!1,focusVisibleClassName:w,selected:S=!1,className:k}=o,P=(0,n.A)(o,g),M=a.useContext(v.A),R=a.useMemo((()=>({dense:y||M.dense||!1,alignItems:l,disableGutters:x})),[l,M.dense,y,x]),$=a.useRef(null);(0,p.A)((()=>{d&&$.current&&$.current.focus()}),[d]);const I=(0,r.A)({},o,{alignItems:l,dense:R.dense,disableGutters:x,divider:C,selected:S}),O=(e=>{const{alignItems:t,classes:o,dense:n,disabled:a,disableGutters:i,divider:l,selected:d}=e,c={root:["root",n&&"dense",!i&&"gutters",l&&"divider",a&&"disabled","flex-start"===t&&"alignItemsFlexStart",d&&"selected"]},u=(0,s.A)(c,b.Y,o);return(0,r.A)({},o,u)})(I),N=(0,m.A)($,t);return(0,h.jsx)(v.A.Provider,{value:R,children:(0,h.jsx)(f,(0,r.A)({ref:N,href:P.href||P.to,component:(P.href||P.to)&&"div"===u?"button":u,focusVisibleClassName:(0,i.A)(O.focusVisible,w),ownerState:I,className:(0,i.A)(O.root,k)},P,{classes:O,children:A}))})}))},2927:(e,t,o)=>{o.d(t,{A:()=>i,Y:()=>a});var n=o(8413),r=o(1609);function a(e){return(0,r.A)("MuiListItemButton",e)}const i=(0,n.A)("MuiListItemButton",["root","focusVisible","dense","alignItemsFlexStart","disabled","divider","gutters","selected"])},6165:(e,t,o)=>{o.d(t,{A:()=>ae});var n=o(8168),r=o(8587),a=o(6540),i=(o(4363),o(4164)),s=o(5659),l=o(7339),d=o(6248),c=o(9799),u=o(7167),p=o(6852),m=o(2778),v=o(4848);const b=["actions","autoFocus","autoFocusItem","children","className","disabledItemsFocusable","disableListWrap","onKeyDown","variant"];function h(e,t,o){return e===t?e.firstChild:t&&t.nextElementSibling?t.nextElementSibling:o?null:e.firstChild}function g(e,t,o){return e===t?o?e.firstChild:e.lastChild:t&&t.previousElementSibling?t.previousElementSibling:o?null:e.lastChild}function f(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 A(e,t,o,n,r,a){let i=!1,s=r(e,t,!!t&&o);for(;s;){if(s===e.firstChild){if(i)return!1;i=!0}const t=!n&&(s.disabled||"true"===s.getAttribute("aria-disabled"));if(s.hasAttribute("tabindex")&&f(s,a)&&!t)return s.focus(),!0;s=r(e,s,o)}return!1}const y=a.forwardRef((function(e,t){const{actions:o,autoFocus:i=!1,autoFocusItem:s=!1,children:l,className:y,disabledItemsFocusable:x=!1,disableListWrap:C=!1,onKeyDown:w,variant:S="selectedMenu"}=e,k=(0,r.A)(e,b),P=a.useRef(null),M=a.useRef({keys:[],repeating:!0,previousKeyMatched:!0,lastTime:null});(0,m.A)((()=>{i&&P.current.focus()}),[i]),a.useImperativeHandle(o,(()=>({adjustStyleForScrollbar:(e,t)=>{const o=!P.current.style.width;if(e.clientHeight{a.isValidElement(e)?(e.props.disabled||("selectedMenu"===S&&e.props.selected||-1===$)&&($=t),$===t&&(e.props.disabled||e.props.muiSkipListHighlight||e.type.muiSkipListHighlight)&&($+=1,$>=l.length&&($=-1))):$===t&&($+=1,$>=l.length&&($=-1))}));const I=a.Children.map(l,((e,t)=>{if(t===$){const t={};return s&&(t.autoFocus=!0),void 0===e.props.tabIndex&&"selectedMenu"===S&&(t.tabIndex=0),a.cloneElement(e,t)}return e}));return(0,v.jsx)(c.A,(0,n.A)({role:"menu",ref:R,className:y,onKeyDown:e=>{const t=P.current,o=e.key,n=(0,d.A)(t).activeElement;if("ArrowDown"===o)e.preventDefault(),A(t,n,C,x,h);else if("ArrowUp"===o)e.preventDefault(),A(t,n,C,x,g);else if("Home"===o)e.preventDefault(),A(t,null,C,x,h);else if("End"===o)e.preventDefault(),A(t,null,C,x,g);else if(1===o.length){const r=M.current,a=o.toLowerCase(),i=performance.now();r.keys.length>0&&(i-r.lastTime>500?(r.keys=[],r.repeating=!0,r.previousKeyMatched=!0):r.repeating&&a!==r.keys[0]&&(r.repeating=!1)),r.lastTime=i,r.keys.push(a);const s=n&&!r.repeating&&f(n,r);r.previousKeyMatched&&(s||A(t,n,!1,x,h,r))?e.preventDefault():r.previousKeyMatched=!1}w&&w(e)},tabIndex:i?0:-1},k,{children:I}))}));var x=o(5419),C=o(1848),w=o(3541),S=o(1935),k=o(3749),P=o(7467),M=o(895),R=o(5487),$=o(3493),I=o(7419),O=o(8413),N=o(1609);function F(e){return(0,N.A)("MuiModal",e)}(0,O.A)("MuiModal",["root","hidden","backdrop"]);const L=["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"],T=(0,C.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,n.A)({position:"fixed",zIndex:(e.vars||e).zIndex.modal,right:0,bottom:0,top:0,left:0},!t.open&&t.exited&&{visibility:"hidden"}))),E=(0,C.Ay)(I.A,{name:"MuiModal",slot:"Backdrop",overridesResolver:(e,t)=>t.backdrop})({zIndex:-1}),j=a.forwardRef((function(e,t){var o,d,c,u,p,m;const b=(0,w.A)({name:"MuiModal",props:e}),{BackdropComponent:h=E,BackdropProps:g,className:f,closeAfterTransition:A=!1,children:y,container:x,component:C,components:S={},componentsProps:k={},disableAutoFocus:P=!1,disableEnforceFocus:I=!1,disableEscapeKeyDown:O=!1,disablePortal:N=!1,disableRestoreFocus:j=!1,disableScrollLock:B=!1,hideBackdrop:D=!1,keepMounted:z=!1,onBackdropClick:G,open:V,slotProps:W,slots:H}=b,X=(0,r.A)(b,L),K=(0,n.A)({},b,{closeAfterTransition:A,disableAutoFocus:P,disableEnforceFocus:I,disableEscapeKeyDown:O,disablePortal:N,disableRestoreFocus:j,disableScrollLock:B,hideBackdrop:D,keepMounted:z}),{getRootProps:q,getBackdropProps:Q,getTransitionProps:Y,portalRef:_,isTopModal:U,exited:Z,hasTransition:J}=(0,M.h)((0,n.A)({},K,{rootRef:t})),ee=(0,n.A)({},K,{exited:Z}),te=(e=>{const{open:t,exited:o,classes:n}=e,r={root:["root",!t&&o&&"hidden"],backdrop:["backdrop"]};return(0,s.A)(r,F,n)})(ee),oe={};if(void 0===y.props.tabIndex&&(oe.tabIndex="-1"),J){const{onEnter:e,onExited:t}=Y();oe.onEnter=e,oe.onExited=t}const ne=null!=(o=null!=(d=null==H?void 0:H.root)?d:S.Root)?o:T,re=null!=(c=null!=(u=null==H?void 0:H.backdrop)?u:S.Backdrop)?c:h,ae=null!=(p=null==W?void 0:W.root)?p:k.root,ie=null!=(m=null==W?void 0:W.backdrop)?m:k.backdrop,se=(0,l.Q)({elementType:ne,externalSlotProps:ae,externalForwardedProps:X,getSlotProps:q,additionalProps:{ref:t,as:C},ownerState:ee,className:(0,i.A)(f,null==ae?void 0:ae.className,null==te?void 0:te.root,!ee.open&&ee.exited&&(null==te?void 0:te.hidden))}),le=(0,l.Q)({elementType:re,externalSlotProps:ie,additionalProps:g,getSlotProps:e=>Q((0,n.A)({},e,{onClick:t=>{G&&G(t),null!=e&&e.onClick&&e.onClick(t)}})),className:(0,i.A)(null==ie?void 0:ie.className,null==g?void 0:g.className,null==te?void 0:te.backdrop),ownerState:ee});return z||V||J&&!Z?(0,v.jsx)($.Z,{ref:_,container:x,disablePortal:N,children:(0,v.jsxs)(ne,(0,n.A)({},se,{children:[!D&&h?(0,v.jsx)(re,(0,n.A)({},le)):null,(0,v.jsx)(R.s,{disableEnforceFocus:I,disableAutoFocus:P,disableRestoreFocus:j,isEnabled:U,open:V,children:a.cloneElement(y,oe)})]}))}):null}));var B=o(4155);function D(e){return(0,N.A)("MuiPopover",e)}(0,O.A)("MuiPopover",["root","paper"]);const z=["onEntering"],G=["action","anchorEl","anchorOrigin","anchorPosition","anchorReference","children","className","container","elevation","marginThreshold","open","PaperProps","slots","slotProps","transformOrigin","TransitionComponent","transitionDuration","TransitionProps","disableScrollLock"],V=["slotProps"];function W(e,t){let o=0;return"number"==typeof t?o=t:"center"===t?o=e.height/2:"bottom"===t&&(o=e.height),o}function H(e,t){let o=0;return"number"==typeof t?o=t:"center"===t?o=e.width/2:"right"===t&&(o=e.width),o}function X(e){return[e.horizontal,e.vertical].map((e=>"number"==typeof e?`${e}px`:e)).join(" ")}function K(e){return"function"==typeof e?e():e}const q=(0,C.Ay)(j,{name:"MuiPopover",slot:"Root",overridesResolver:(e,t)=>t.root})({}),Q=(0,C.Ay)(B.A,{name:"MuiPopover",slot:"Paper",overridesResolver:(e,t)=>t.paper})({position:"absolute",overflowY:"auto",overflowX:"hidden",minWidth:16,minHeight:16,maxWidth:"calc(100% - 32px)",maxHeight:"calc(100% - 32px)",outline:0}),Y=a.forwardRef((function(e,t){var o,c,u;const m=(0,w.A)({props:e,name:"MuiPopover"}),{action:b,anchorEl:h,anchorOrigin:g={vertical:"top",horizontal:"left"},anchorPosition:f,anchorReference:A="anchorEl",children:y,className:C,container:M,elevation:R=8,marginThreshold:$=16,open:I,PaperProps:O={},slots:N,slotProps:F,transformOrigin:L={vertical:"top",horizontal:"left"},TransitionComponent:T=P.A,transitionDuration:E="auto",TransitionProps:{onEntering:j}={},disableScrollLock:B=!1}=m,Y=(0,r.A)(m.TransitionProps,z),_=(0,r.A)(m,G),U=null!=(o=null==F?void 0:F.paper)?o:O,Z=a.useRef(),J=(0,p.A)(Z,U.ref),ee=(0,n.A)({},m,{anchorOrigin:g,anchorReference:A,elevation:R,marginThreshold:$,externalPaperSlotProps:U,transformOrigin:L,TransitionComponent:T,transitionDuration:E,TransitionProps:Y}),te=(e=>{const{classes:t}=e;return(0,s.A)({root:["root"],paper:["paper"]},D,t)})(ee),oe=a.useCallback((()=>{if("anchorPosition"===A)return f;const e=K(h),t=(e&&1===e.nodeType?e:(0,d.A)(Z.current).body).getBoundingClientRect();return{top:t.top+W(t,g.vertical),left:t.left+H(t,g.horizontal)}}),[h,g.horizontal,g.vertical,f,A]),ne=a.useCallback((e=>({vertical:W(e,L.vertical),horizontal:H(e,L.horizontal)})),[L.horizontal,L.vertical]),re=a.useCallback((e=>{const t={width:e.offsetWidth,height:e.offsetHeight},o=ne(t);if("none"===A)return{top:null,left:null,transformOrigin:X(o)};const n=oe();let r=n.top-o.vertical,a=n.left-o.horizontal;const i=r+t.height,s=a+t.width,l=(0,k.A)(K(h)),d=l.innerHeight-$,c=l.innerWidth-$;if(null!==$&&r<$){const e=r-$;r-=e,o.vertical+=e}else if(null!==$&&i>d){const e=i-d;r-=e,o.vertical+=e}if(null!==$&&a<$){const e=a-$;a-=e,o.horizontal+=e}else if(s>c){const e=s-c;a-=e,o.horizontal+=e}return{top:`${Math.round(r)}px`,left:`${Math.round(a)}px`,transformOrigin:X(o)}}),[h,A,oe,ne,$]),[ae,ie]=a.useState(I),se=a.useCallback((()=>{const e=Z.current;if(!e)return;const t=re(e);null!==t.top&&(e.style.top=t.top),null!==t.left&&(e.style.left=t.left),e.style.transformOrigin=t.transformOrigin,ie(!0)}),[re]);a.useEffect((()=>(B&&window.addEventListener("scroll",se),()=>window.removeEventListener("scroll",se))),[h,B,se]),a.useEffect((()=>{I&&se()})),a.useImperativeHandle(b,(()=>I?{updatePosition:()=>{se()}}:null),[I,se]),a.useEffect((()=>{if(!I)return;const e=(0,S.A)((()=>{se()})),t=(0,k.A)(h);return t.addEventListener("resize",e),()=>{e.clear(),t.removeEventListener("resize",e)}}),[h,I,se]);let le=E;"auto"!==E||T.muiSupportAuto||(le=void 0);const de=M||(h?(0,d.A)(K(h)).body:void 0),ce=null!=(c=null==N?void 0:N.root)?c:q,ue=null!=(u=null==N?void 0:N.paper)?u:Q,pe=(0,l.Q)({elementType:ue,externalSlotProps:(0,n.A)({},U,{style:ae?U.style:(0,n.A)({},U.style,{opacity:0})}),additionalProps:{elevation:R,ref:J},ownerState:ee,className:(0,i.A)(te.paper,null==U?void 0:U.className)}),me=(0,l.Q)({elementType:ce,externalSlotProps:(null==F?void 0:F.root)||{},externalForwardedProps:_,additionalProps:{ref:t,slotProps:{backdrop:{invisible:!0}},container:de,open:I},ownerState:ee,className:(0,i.A)(te.root,C)}),{slotProps:ve}=me,be=(0,r.A)(me,V);return(0,v.jsx)(ce,(0,n.A)({},be,!(0,x.g)(ce)&&{slotProps:ve,disableScrollLock:B},{children:(0,v.jsx)(T,(0,n.A)({appear:!0,in:I,onEntering:(e,t)=>{j&&j(e,t),se()},onExited:()=>{ie(!1)},timeout:le},Y,{children:(0,v.jsx)(ue,(0,n.A)({},pe,{children:y}))}))}))}));var _=o(4675);function U(e){return(0,N.A)("MuiMenu",e)}(0,O.A)("MuiMenu",["root","paper","list"]);const Z=["onEntering"],J=["autoFocus","children","className","disableAutoFocusItem","MenuListProps","onClose","open","PaperProps","PopoverClasses","transitionDuration","TransitionProps","variant","slots","slotProps"],ee={vertical:"top",horizontal:"right"},te={vertical:"top",horizontal:"left"},oe=(0,C.Ay)(Y,{shouldForwardProp:e=>(0,C.ep)(e)||"classes"===e,name:"MuiMenu",slot:"Root",overridesResolver:(e,t)=>t.root})({}),ne=(0,C.Ay)(Q,{name:"MuiMenu",slot:"Paper",overridesResolver:(e,t)=>t.paper})({maxHeight:"calc(100% - 96px)",WebkitOverflowScrolling:"touch"}),re=(0,C.Ay)(y,{name:"MuiMenu",slot:"List",overridesResolver:(e,t)=>t.list})({outline:0}),ae=a.forwardRef((function(e,t){var o,d;const c=(0,w.A)({props:e,name:"MuiMenu"}),{autoFocus:u=!0,children:p,className:m,disableAutoFocusItem:b=!1,MenuListProps:h={},onClose:g,open:f,PaperProps:A={},PopoverClasses:y,transitionDuration:x="auto",TransitionProps:{onEntering:C}={},variant:S="selectedMenu",slots:k={},slotProps:P={}}=c,M=(0,r.A)(c.TransitionProps,Z),R=(0,r.A)(c,J),$=(0,_.A)(),I="rtl"===$.direction,O=(0,n.A)({},c,{autoFocus:u,disableAutoFocusItem:b,MenuListProps:h,onEntering:C,PaperProps:A,transitionDuration:x,TransitionProps:M,variant:S}),N=(e=>{const{classes:t}=e;return(0,s.A)({root:["root"],paper:["paper"],list:["list"]},U,t)})(O),F=u&&!b&&f,L=a.useRef(null);let T=-1;a.Children.map(p,((e,t)=>{a.isValidElement(e)&&(e.props.disabled||("selectedMenu"===S&&e.props.selected||-1===T)&&(T=t))}));const E=null!=(o=k.paper)?o:ne,j=null!=(d=P.paper)?d:A,B=(0,l.Q)({elementType:k.root,externalSlotProps:P.root,ownerState:O,className:[N.root,m]}),D=(0,l.Q)({elementType:E,externalSlotProps:j,ownerState:O,className:N.paper});return(0,v.jsx)(oe,(0,n.A)({onClose:g,anchorOrigin:{vertical:"bottom",horizontal:I?"right":"left"},transformOrigin:I?ee:te,slots:{paper:E,root:k.root},slotProps:{root:B,paper:D},open:f,ref:t,transitionDuration:x,TransitionProps:(0,n.A)({onEntering:(e,t)=>{L.current&&L.current.adjustStyleForScrollbar(e,$),C&&C(e,t)}},M),ownerState:O},R,{classes:y,children:(0,v.jsx)(re,(0,n.A)({onKeyDown:e=>{"Tab"===e.key&&(e.preventDefault(),g&&g(e,"tabKeyDown"))},actions:L,autoFocus:u&&(-1===T||b),autoFocusItem:F,variant:S},h,{className:(0,i.A)(N.list,h.className),children:p}))}))}))},6554:(e,t,o)=>{o.d(t,{A:()=>k});var n=o(8587),r=o(8168),a=o(6540),i=o(4164),s=o(5659),l=o(4279),d=o(1848),c=o(3541),u=o(2850),p=o(8850),m=o(2778),v=o(6852),b=o(1347),h=o(8413);const g=(0,h.A)("MuiListItemIcon",["root","alignItemsFlexStart"]),f=(0,h.A)("MuiListItemText",["root","multiline","dense","inset","primary","secondary"]);var A=o(1609);function y(e){return(0,A.A)("MuiMenuItem",e)}const x=(0,h.A)("MuiMenuItem",["root","focusVisible","dense","disabled","divider","gutters","selected"]);var C=o(4848);const w=["autoFocus","component","dense","divider","disableGutters","focusVisibleClassName","role","tabIndex","className"],S=(0,d.Ay)(p.A,{shouldForwardProp:e=>(0,d.ep)(e)||"classes"===e,name:"MuiMenuItem",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,o.dense&&t.dense,o.divider&&t.divider,!o.disableGutters&&t.gutters]}})((({theme:e,ownerState:t})=>(0,r.A)({},e.typography.body1,{display:"flex",justifyContent:"flex-start",alignItems:"center",position:"relative",textDecoration:"none",minHeight:48,paddingTop:6,paddingBottom:6,boxSizing:"border-box",whiteSpace:"nowrap"},!t.disableGutters&&{paddingLeft:16,paddingRight:16},t.divider&&{borderBottom:`1px solid ${(e.vars||e).palette.divider}`,backgroundClip:"padding-box"},{"&:hover":{textDecoration:"none",backgroundColor:(e.vars||e).palette.action.hover,"@media (hover: none)":{backgroundColor:"transparent"}},[`&.${x.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),[`&.${x.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)}},[`&.${x.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)}},[`&.${x.focusVisible}`]:{backgroundColor:(e.vars||e).palette.action.focus},[`&.${x.disabled}`]:{opacity:(e.vars||e).palette.action.disabledOpacity},[`& + .${b.A.root}`]:{marginTop:e.spacing(1),marginBottom:e.spacing(1)},[`& + .${b.A.inset}`]:{marginLeft:52},[`& .${f.root}`]:{marginTop:0,marginBottom:0},[`& .${f.inset}`]:{paddingLeft:36},[`& .${g.root}`]:{minWidth:36}},!t.dense&&{[e.breakpoints.up("sm")]:{minHeight:"auto"}},t.dense&&(0,r.A)({minHeight:32,paddingTop:4,paddingBottom:4},e.typography.body2,{[`& .${g.root} svg`]:{fontSize:"1.25rem"}})))),k=a.forwardRef((function(e,t){const o=(0,c.A)({props:e,name:"MuiMenuItem"}),{autoFocus:l=!1,component:d="li",dense:p=!1,divider:b=!1,disableGutters:h=!1,focusVisibleClassName:g,role:f="menuitem",tabIndex:A,className:x}=o,k=(0,n.A)(o,w),P=a.useContext(u.A),M=a.useMemo((()=>({dense:p||P.dense||!1,disableGutters:h})),[P.dense,p,h]),R=a.useRef(null);(0,m.A)((()=>{l&&R.current&&R.current.focus()}),[l]);const $=(0,r.A)({},o,{dense:M.dense,divider:b,disableGutters:h}),I=(e=>{const{disabled:t,dense:o,divider:n,disableGutters:a,selected:i,classes:l}=e,d={root:["root",o&&"dense",t&&"disabled",!a&&"gutters",n&&"divider",i&&"selected"]},c=(0,s.A)(d,y,l);return(0,r.A)({},l,c)})(o),O=(0,v.A)(R,t);let N;return o.disabled||(N=void 0!==A?A:-1),(0,C.jsx)(u.A.Provider,{value:M,children:(0,C.jsx)(S,(0,r.A)({ref:O,role:f,tabIndex:N,component:d,focusVisibleClassName:(0,i.A)(I.focusVisible,g),className:(0,i.A)(I.root,x)},k,{ownerState:$,classes:I}))})}))},4911:(e,t,o)=>{o.d(t,{Ay:()=>y,XV:()=>f,Ku:()=>h});var n=o(8587),r=o(8168),a=o(6540),i=o(4164),s=o(5659),l=o(8466),d=o(8413),c=o(1609);function u(e){return(0,c.A)("MuiNativeSelect",e)}const p=(0,d.A)("MuiNativeSelect",["root","select","multiple","filled","outlined","standard","disabled","icon","iconOpen","iconFilled","iconOutlined","iconStandard","nativeInput","error"]);var m=o(1848),v=o(4848);const b=["className","disabled","error","IconComponent","inputRef","variant"],h=({ownerState:e,theme:t})=>(0,r.A)({MozAppearance:"none",WebkitAppearance:"none",userSelect:"none",borderRadius:0,cursor:"pointer","&:focus":(0,r.A)({},t.vars?{backgroundColor:`rgba(${t.vars.palette.common.onBackgroundChannel} / 0.05)`}:{backgroundColor:"light"===t.palette.mode?"rgba(0, 0, 0, 0.05)":"rgba(255, 255, 255, 0.05)"},{borderRadius:0}),"&::-ms-expand":{display:"none"},[`&.${p.disabled}`]:{cursor:"default"},"&[multiple]":{height:"auto"},"&:not([multiple]) option, &:not([multiple]) optgroup":{backgroundColor:(t.vars||t).palette.background.paper},"&&&":{paddingRight:24,minWidth:16}},"filled"===e.variant&&{"&&&":{paddingRight:32}},"outlined"===e.variant&&{borderRadius:(t.vars||t).shape.borderRadius,"&:focus":{borderRadius:(t.vars||t).shape.borderRadius},"&&&":{paddingRight:32}}),g=(0,m.Ay)("select",{name:"MuiNativeSelect",slot:"Select",shouldForwardProp:m.ep,overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.select,t[o.variant],o.error&&t.error,{[`&.${p.multiple}`]:t.multiple}]}})(h),f=({ownerState:e,theme:t})=>(0,r.A)({position:"absolute",right:0,top:"calc(50% - .5em)",pointerEvents:"none",color:(t.vars||t).palette.action.active,[`&.${p.disabled}`]:{color:(t.vars||t).palette.action.disabled}},e.open&&{transform:"rotate(180deg)"},"filled"===e.variant&&{right:7},"outlined"===e.variant&&{right:7}),A=(0,m.Ay)("svg",{name:"MuiNativeSelect",slot:"Icon",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.icon,o.variant&&t[`icon${(0,l.A)(o.variant)}`],o.open&&t.iconOpen]}})(f),y=a.forwardRef((function(e,t){const{className:o,disabled:d,error:c,IconComponent:p,inputRef:m,variant:h="standard"}=e,f=(0,n.A)(e,b),y=(0,r.A)({},e,{disabled:d,variant:h,error:c}),x=(e=>{const{classes:t,variant:o,disabled:n,multiple:r,open:a,error:i}=e,d={select:["select",o,n&&"disabled",r&&"multiple",i&&"error"],icon:["icon",`icon${(0,l.A)(o)}`,a&&"iconOpen",n&&"disabled"]};return(0,s.A)(d,u,t)})(y);return(0,v.jsxs)(a.Fragment,{children:[(0,v.jsx)(g,(0,r.A)({ownerState:y,className:(0,i.A)(x.select,o),disabled:d,ref:m||t},f)),e.multiple?null:(0,v.jsx)(A,{as:p,ownerState:y,className:x.icon})]})}))},6757:(e,t,o)=>{o.d(t,{A:()=>M});var n,r=o(8587),a=o(8168),i=o(6540),s=o(5659),l=o(1848),d=o(4848);const c=["children","classes","className","label","notched"],u=(0,l.Ay)("fieldset",{shouldForwardProp:l.ep})({textAlign:"left",position:"absolute",bottom:0,right:0,top:-5,left:0,margin:0,padding:"0 8px",pointerEvents:"none",borderRadius:"inherit",borderStyle:"solid",borderWidth:1,overflow:"hidden",minWidth:"0%"}),p=(0,l.Ay)("legend",{shouldForwardProp:l.ep})((({ownerState:e,theme:t})=>(0,a.A)({float:"unset",width:"auto",overflow:"hidden"},!e.withLabel&&{padding:0,lineHeight:"11px",transition:t.transitions.create("width",{duration:150,easing:t.transitions.easing.easeOut})},e.withLabel&&(0,a.A)({display:"block",padding:0,height:11,fontSize:"0.75em",visibility:"hidden",maxWidth:.01,transition:t.transitions.create("max-width",{duration:50,easing:t.transitions.easing.easeOut}),whiteSpace:"nowrap","& > span":{paddingLeft:5,paddingRight:5,display:"inline-block",opacity:0,visibility:"visible"}},e.notched&&{maxWidth:"100%",transition:t.transitions.create("max-width",{duration:100,easing:t.transitions.easing.easeOut,delay:50})}))));var m=o(9716),v=o(8086),b=o(8413),h=o(1609),g=o(1175);function f(e){return(0,h.A)("MuiOutlinedInput",e)}const A=(0,a.A)({},g.A,(0,b.A)("MuiOutlinedInput",["root","notchedOutline","input"]));var y=o(627),x=o(3541);const C=["components","fullWidth","inputComponent","label","multiline","notched","slots","type"],w=(0,l.Ay)(y.Sh,{shouldForwardProp:e=>(0,l.ep)(e)||"classes"===e,name:"MuiOutlinedInput",slot:"Root",overridesResolver:y.WC})((({theme:e,ownerState:t})=>{const o="light"===e.palette.mode?"rgba(0, 0, 0, 0.23)":"rgba(255, 255, 255, 0.23)";return(0,a.A)({position:"relative",borderRadius:(e.vars||e).shape.borderRadius,[`&:hover .${A.notchedOutline}`]:{borderColor:(e.vars||e).palette.text.primary},"@media (hover: none)":{[`&:hover .${A.notchedOutline}`]:{borderColor:e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / 0.23)`:o}},[`&.${A.focused} .${A.notchedOutline}`]:{borderColor:(e.vars||e).palette[t.color].main,borderWidth:2},[`&.${A.error} .${A.notchedOutline}`]:{borderColor:(e.vars||e).palette.error.main},[`&.${A.disabled} .${A.notchedOutline}`]:{borderColor:(e.vars||e).palette.action.disabled}},t.startAdornment&&{paddingLeft:14},t.endAdornment&&{paddingRight:14},t.multiline&&(0,a.A)({padding:"16.5px 14px"},"small"===t.size&&{padding:"8.5px 14px"}))})),S=(0,l.Ay)((function(e){const{className:t,label:o,notched:i}=e,s=(0,r.A)(e,c),l=null!=o&&""!==o,m=(0,a.A)({},e,{notched:i,withLabel:l});return(0,d.jsx)(u,(0,a.A)({"aria-hidden":!0,className:t,ownerState:m},s,{children:(0,d.jsx)(p,{ownerState:m,children:l?(0,d.jsx)("span",{children:o}):n||(n=(0,d.jsx)("span",{className:"notranslate",children:"​"}))})}))}),{name:"MuiOutlinedInput",slot:"NotchedOutline",overridesResolver:(e,t)=>t.notchedOutline})((({theme:e})=>{const t="light"===e.palette.mode?"rgba(0, 0, 0, 0.23)":"rgba(255, 255, 255, 0.23)";return{borderColor:e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / 0.23)`:t}})),k=(0,l.Ay)(y.f3,{name:"MuiOutlinedInput",slot:"Input",overridesResolver:y.Oj})((({theme:e,ownerState:t})=>(0,a.A)({padding:"16.5px 14px"},!e.vars&&{"&:-webkit-autofill":{WebkitBoxShadow:"light"===e.palette.mode?null:"0 0 0 100px #266798 inset",WebkitTextFillColor:"light"===e.palette.mode?null:"#fff",caretColor:"light"===e.palette.mode?null:"#fff",borderRadius:"inherit"}},e.vars&&{"&:-webkit-autofill":{borderRadius:"inherit"},[e.getColorSchemeSelector("dark")]:{"&:-webkit-autofill":{WebkitBoxShadow:"0 0 0 100px #266798 inset",WebkitTextFillColor:"#fff",caretColor:"#fff"}}},"small"===t.size&&{padding:"8.5px 14px"},t.multiline&&{padding:0},t.startAdornment&&{paddingLeft:0},t.endAdornment&&{paddingRight:0}))),P=i.forwardRef((function(e,t){var o,n,l,c,u;const p=(0,x.A)({props:e,name:"MuiOutlinedInput"}),{components:b={},fullWidth:h=!1,inputComponent:g="input",label:A,multiline:P=!1,notched:M,slots:R={},type:$="text"}=p,I=(0,r.A)(p,C),O=(e=>{const{classes:t}=e,o=(0,s.A)({root:["root"],notchedOutline:["notchedOutline"],input:["input"]},f,t);return(0,a.A)({},t,o)})(p),N=(0,m.A)(),F=(0,v.A)({props:p,muiFormControl:N,states:["color","disabled","error","focused","hiddenLabel","size","required"]}),L=(0,a.A)({},p,{color:F.color||"primary",disabled:F.disabled,error:F.error,focused:F.focused,formControl:N,fullWidth:h,hiddenLabel:F.hiddenLabel,multiline:P,size:F.size,type:$}),T=null!=(o=null!=(n=R.root)?n:b.Root)?o:w,E=null!=(l=null!=(c=R.input)?c:b.Input)?l:k;return(0,d.jsx)(y.Ay,(0,a.A)({slots:{root:T,input:E},renderSuffix:e=>(0,d.jsx)(S,{ownerState:L,className:O.notchedOutline,label:null!=A&&""!==A&&F.required?u||(u=(0,d.jsxs)(i.Fragment,{children:[A," ","*"]})):A,notched:void 0!==M?M:Boolean(e.startAdornment||e.filled||e.focused)}),fullWidth:h,inputComponent:g,multiline:P,ref:t,type:$},I,{classes:(0,a.A)({},O,{notchedOutline:null})}))}));P.muiName="Input";const M=P},4155:(e,t,o)=>{o.d(t,{A:()=>f});var n=o(8587),r=o(8168),a=o(6540),i=o(4164),s=o(5659),l=o(4279),d=o(1848),c=o(8783),u=o(3541),p=o(8413),m=o(1609);function v(e){return(0,m.A)("MuiPaper",e)}(0,p.A)("MuiPaper",["root","rounded","outlined","elevation","elevation0","elevation1","elevation2","elevation3","elevation4","elevation5","elevation6","elevation7","elevation8","elevation9","elevation10","elevation11","elevation12","elevation13","elevation14","elevation15","elevation16","elevation17","elevation18","elevation19","elevation20","elevation21","elevation22","elevation23","elevation24"]);var b=o(4848);const h=["className","component","elevation","square","variant"],g=(0,d.Ay)("div",{name:"MuiPaper",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,t[o.variant],!o.square&&t.rounded,"elevation"===o.variant&&t[`elevation${o.elevation}`]]}})((({theme:e,ownerState:t})=>{var o;return(0,r.A)({backgroundColor:(e.vars||e).palette.background.paper,color:(e.vars||e).palette.text.primary,transition:e.transitions.create("box-shadow")},!t.square&&{borderRadius:e.shape.borderRadius},"outlined"===t.variant&&{border:`1px solid ${(e.vars||e).palette.divider}`},"elevation"===t.variant&&(0,r.A)({boxShadow:(e.vars||e).shadows[t.elevation]},!e.vars&&"dark"===e.palette.mode&&{backgroundImage:`linear-gradient(${(0,l.X4)("#fff",(0,c.A)(t.elevation))}, ${(0,l.X4)("#fff",(0,c.A)(t.elevation))})`},e.vars&&{backgroundImage:null==(o=e.vars.overlays)?void 0:o[t.elevation]}))})),f=a.forwardRef((function(e,t){const o=(0,u.A)({props:e,name:"MuiPaper"}),{className:a,component:l="div",elevation:d=1,square:c=!1,variant:p="elevation"}=o,m=(0,n.A)(o,h),f=(0,r.A)({},o,{component:l,elevation:d,square:c,variant:p}),A=(e=>{const{square:t,elevation:o,variant:n,classes:r}=e,a={root:["root",n,!t&&"rounded","elevation"===n&&`elevation${o}`]};return(0,s.A)(a,v,r)})(f);return(0,b.jsx)(g,(0,r.A)({as:l,ownerState:f,className:(0,i.A)(A.root,a),ref:t},m))}))}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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VUFDakI0UyxFQUFZLEVBQUMsT0FDYitKLEdBQVMsRUFBSyxRQUNkamIsRUFBVSxhQUNSL0IsRUFDSmlDLEdBQVEsT0FBOEJqQyxFQUFPTixHQUN6Q0wsR0FBYSxPQUFTLENBQUMsRUFBR1csRUFBTyxDQUNyQ0ssWUFDQTRTLFlBQ0ErSixTQUNBamIsWUFFSVcsRUE3RGtCckQsS0FDeEIsTUFBTSxPQUNKMmQsRUFBTSxVQUNOL0osRUFBUyxRQUNUbFIsRUFBTyxRQUNQVyxHQUNFckQsRUFDRXNELEVBQVEsQ0FDWnpDLEtBQU0sQ0FBQyxPQUFRNkIsR0FBVWliLEdBQVUsVUFBdUIsY0FBWmpiLEdBQTJCLFlBQVlrUixNQUV2RixPQUFPLEVBQUFyUSxFQUFBLEdBQWVELEVBQU9tYSxFQUFzQnBhLEVBQVEsRUFtRDNDRyxDQUFrQnhELEdBUWxDLE9BQW9CLFNBQUswZCxHQUFXLE9BQVMsQ0FDM0M1WSxHQUFJOUQsRUFDSmhCLFdBQVlBLEVBQ1pzQyxXQUFXLEVBQUFtQixFQUFBLEdBQUtKLEVBQVF4QyxLQUFNeUIsR0FDOUJGLElBQUtBLEdBQ0pRLEdBQ0wsRyIsInNvdXJjZXMiOlsid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpbmsvbGlua0NsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTGluay9nZXRUZXh0RGVjb3JhdGlvbi5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9MaW5rL0xpbmsuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTGlzdC9saXN0Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9MaXN0L0xpc3QuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTGlzdC9MaXN0Q29udGV4dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9MaXN0SXRlbS9saXN0SXRlbUNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24vbGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb25DbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uL0xpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3RJdGVtL0xpc3RJdGVtLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3RJdGVtQnV0dG9uL0xpc3RJdGVtQnV0dG9uLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3RJdGVtQnV0dG9uL2xpc3RJdGVtQnV0dG9uQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9NZW51TGlzdC9NZW51TGlzdC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Nb2RhbC9tb2RhbENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTW9kYWwvTW9kYWwuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUG9wb3Zlci9wb3BvdmVyQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Qb3BvdmVyL1BvcG92ZXIuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTWVudS9tZW51Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9NZW51L01lbnUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTGlzdEl0ZW1JY29uL2xpc3RJdGVtSWNvbkNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTGlzdEl0ZW1UZXh0L2xpc3RJdGVtVGV4dENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTWVudUl0ZW0vbWVudUl0ZW1DbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL01lbnVJdGVtL01lbnVJdGVtLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL05hdGl2ZVNlbGVjdC9uYXRpdmVTZWxlY3RDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL05hdGl2ZVNlbGVjdC9OYXRpdmVTZWxlY3RJbnB1dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9PdXRsaW5lZElucHV0L05vdGNoZWRPdXRsaW5lLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL091dGxpbmVkSW5wdXQvb3V0bGluZWRJbnB1dENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvT3V0bGluZWRJbnB1dC9PdXRsaW5lZElucHV0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1BhcGVyL3BhcGVyQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9QYXBlci9QYXBlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlua1V0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTGluaycsIHNsb3QpO1xufVxuY29uc3QgbGlua0NsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlMaW5rJywgWydyb290JywgJ3VuZGVybGluZU5vbmUnLCAndW5kZXJsaW5lSG92ZXInLCAndW5kZXJsaW5lQWx3YXlzJywgJ2J1dHRvbicsICdmb2N1c1Zpc2libGUnXSk7XG5leHBvcnQgZGVmYXVsdCBsaW5rQ2xhc3NlczsiLCJpbXBvcnQgeyBhbHBoYSwgZ2V0UGF0aCB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmV4cG9ydCBjb25zdCBjb2xvclRyYW5zZm9ybWF0aW9ucyA9IHtcbiAgcHJpbWFyeTogJ3ByaW1hcnkubWFpbicsXG4gIHRleHRQcmltYXJ5OiAndGV4dC5wcmltYXJ5JyxcbiAgc2Vjb25kYXJ5OiAnc2Vjb25kYXJ5Lm1haW4nLFxuICB0ZXh0U2Vjb25kYXJ5OiAndGV4dC5zZWNvbmRhcnknLFxuICBlcnJvcjogJ2Vycm9yLm1haW4nXG59O1xuY29uc3QgdHJhbnNmb3JtRGVwcmVjYXRlZENvbG9ycyA9IGNvbG9yID0+IHtcbiAgcmV0dXJuIGNvbG9yVHJhbnNmb3JtYXRpb25zW2NvbG9yXSB8fCBjb2xvcjtcbn07XG5jb25zdCBnZXRUZXh0RGVjb3JhdGlvbiA9ICh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIGNvbnN0IHRyYW5zZm9ybWVkQ29sb3IgPSB0cmFuc2Zvcm1EZXByZWNhdGVkQ29sb3JzKG93bmVyU3RhdGUuY29sb3IpO1xuICBjb25zdCBjb2xvciA9IGdldFBhdGgodGhlbWUsIGBwYWxldHRlLiR7dHJhbnNmb3JtZWRDb2xvcn1gLCBmYWxzZSkgfHwgb3duZXJTdGF0ZS5jb2xvcjtcbiAgY29uc3QgY2hhbm5lbENvbG9yID0gZ2V0UGF0aCh0aGVtZSwgYHBhbGV0dGUuJHt0cmFuc2Zvcm1lZENvbG9yfUNoYW5uZWxgKTtcbiAgaWYgKCd2YXJzJyBpbiB0aGVtZSAmJiBjaGFubmVsQ29sb3IpIHtcbiAgICByZXR1cm4gYHJnYmEoJHtjaGFubmVsQ29sb3J9IC8gMC40KWA7XG4gIH1cbiAgcmV0dXJuIGFscGhhKGNvbG9yLCAwLjQpO1xufTtcbmV4cG9ydCBkZWZhdWx0IGdldFRleHREZWNvcmF0aW9uOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50XCIsIFwib25CbHVyXCIsIFwib25Gb2N1c1wiLCBcIlR5cG9ncmFwaHlDbGFzc2VzXCIsIFwidW5kZXJsaW5lXCIsIFwidmFyaWFudFwiLCBcInN4XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB1c2VJc0ZvY3VzVmlzaWJsZSBmcm9tICcuLi91dGlscy91c2VJc0ZvY3VzVmlzaWJsZSc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCBUeXBvZ3JhcGh5IGZyb20gJy4uL1R5cG9ncmFwaHknO1xuaW1wb3J0IGxpbmtDbGFzc2VzLCB7IGdldExpbmtVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2xpbmtDbGFzc2VzJztcbmltcG9ydCBnZXRUZXh0RGVjb3JhdGlvbiwgeyBjb2xvclRyYW5zZm9ybWF0aW9ucyB9IGZyb20gJy4vZ2V0VGV4dERlY29yYXRpb24nO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGNvbXBvbmVudCxcbiAgICBmb2N1c1Zpc2libGUsXG4gICAgdW5kZXJsaW5lXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBgdW5kZXJsaW5lJHtjYXBpdGFsaXplKHVuZGVybGluZSl9YCwgY29tcG9uZW50ID09PSAnYnV0dG9uJyAmJiAnYnV0dG9uJywgZm9jdXNWaXNpYmxlICYmICdmb2N1c1Zpc2libGUnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldExpbmtVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IExpbmtSb290ID0gc3R5bGVkKFR5cG9ncmFwaHksIHtcbiAgbmFtZTogJ011aUxpbmsnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgc3R5bGVzW2B1bmRlcmxpbmUke2NhcGl0YWxpemUob3duZXJTdGF0ZS51bmRlcmxpbmUpfWBdLCBvd25lclN0YXRlLmNvbXBvbmVudCA9PT0gJ2J1dHRvbicgJiYgc3R5bGVzLmJ1dHRvbl07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZS51bmRlcmxpbmUgPT09ICdub25lJyAmJiB7XG4gICAgdGV4dERlY29yYXRpb246ICdub25lJ1xuICB9LCBvd25lclN0YXRlLnVuZGVybGluZSA9PT0gJ2hvdmVyJyAmJiB7XG4gICAgdGV4dERlY29yYXRpb246ICdub25lJyxcbiAgICAnJjpob3Zlcic6IHtcbiAgICAgIHRleHREZWNvcmF0aW9uOiAndW5kZXJsaW5lJ1xuICAgIH1cbiAgfSwgb3duZXJTdGF0ZS51bmRlcmxpbmUgPT09ICdhbHdheXMnICYmIF9leHRlbmRzKHtcbiAgICB0ZXh0RGVjb3JhdGlvbjogJ3VuZGVybGluZSdcbiAgfSwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHtcbiAgICB0ZXh0RGVjb3JhdGlvbkNvbG9yOiBnZXRUZXh0RGVjb3JhdGlvbih7XG4gICAgICB0aGVtZSxcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9KVxuICB9LCB7XG4gICAgJyY6aG92ZXInOiB7XG4gICAgICB0ZXh0RGVjb3JhdGlvbkNvbG9yOiAnaW5oZXJpdCdcbiAgICB9XG4gIH0pLCBvd25lclN0YXRlLmNvbXBvbmVudCA9PT0gJ2J1dHRvbicgJiYge1xuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAvLyBSZXNldCBkZWZhdWx0IHZhbHVlXG4gICAgLy8gV2UgZGlzYWJsZSB0aGUgZm9jdXMgcmluZyBmb3IgbW91c2UsIHRvdWNoIGFuZCBrZXlib2FyZCB1c2Vycy5cbiAgICBvdXRsaW5lOiAwLFxuICAgIGJvcmRlcjogMCxcbiAgICBtYXJnaW46IDAsXG4gICAgLy8gUmVtb3ZlIHRoZSBtYXJnaW4gaW4gU2FmYXJpXG4gICAgYm9yZGVyUmFkaXVzOiAwLFxuICAgIHBhZGRpbmc6IDAsXG4gICAgLy8gUmVtb3ZlIHRoZSBwYWRkaW5nIGluIEZpcmVmb3hcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gICAgdmVydGljYWxBbGlnbjogJ21pZGRsZScsXG4gICAgTW96QXBwZWFyYW5jZTogJ25vbmUnLFxuICAgIC8vIFJlc2V0XG4gICAgV2Via2l0QXBwZWFyYW5jZTogJ25vbmUnLFxuICAgIC8vIFJlc2V0XG4gICAgJyY6Oi1tb3otZm9jdXMtaW5uZXInOiB7XG4gICAgICBib3JkZXJTdHlsZTogJ25vbmUnIC8vIFJlbW92ZSBGaXJlZm94IGRvdHRlZCBvdXRsaW5lLlxuICAgIH0sXG4gICAgW2AmLiR7bGlua0NsYXNzZXMuZm9jdXNWaXNpYmxlfWBdOiB7XG4gICAgICBvdXRsaW5lOiAnYXV0bydcbiAgICB9XG4gIH0pO1xufSk7XG5jb25zdCBMaW5rID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTGluayhpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpTGluaydcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgICAgY29tcG9uZW50ID0gJ2EnLFxuICAgICAgb25CbHVyLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIFR5cG9ncmFwaHlDbGFzc2VzLFxuICAgICAgdW5kZXJsaW5lID0gJ2Fsd2F5cycsXG4gICAgICB2YXJpYW50ID0gJ2luaGVyaXQnLFxuICAgICAgc3hcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qge1xuICAgIGlzRm9jdXNWaXNpYmxlUmVmLFxuICAgIG9uQmx1cjogaGFuZGxlQmx1clZpc2libGUsXG4gICAgb25Gb2N1czogaGFuZGxlRm9jdXNWaXNpYmxlLFxuICAgIHJlZjogZm9jdXNWaXNpYmxlUmVmXG4gIH0gPSB1c2VJc0ZvY3VzVmlzaWJsZSgpO1xuICBjb25zdCBbZm9jdXNWaXNpYmxlLCBzZXRGb2N1c1Zpc2libGVdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBoYW5kbGVyUmVmID0gdXNlRm9ya1JlZihyZWYsIGZvY3VzVmlzaWJsZVJlZik7XG4gIGNvbnN0IGhhbmRsZUJsdXIgPSBldmVudCA9PiB7XG4gICAgaGFuZGxlQmx1clZpc2libGUoZXZlbnQpO1xuICAgIGlmIChpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgc2V0Rm9jdXNWaXNpYmxlKGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKG9uQmx1cikge1xuICAgICAgb25CbHVyKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gZXZlbnQgPT4ge1xuICAgIGhhbmRsZUZvY3VzVmlzaWJsZShldmVudCk7XG4gICAgaWYgKGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPT09IHRydWUpIHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZSh0cnVlKTtcbiAgICB9XG4gICAgaWYgKG9uRm9jdXMpIHtcbiAgICAgIG9uRm9jdXMoZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIGNvbXBvbmVudCxcbiAgICBmb2N1c1Zpc2libGUsXG4gICAgdW5kZXJsaW5lLFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KExpbmtSb290LCBfZXh0ZW5kcyh7XG4gICAgY29sb3I6IGNvbG9yLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgY2xhc3NlczogVHlwb2dyYXBoeUNsYXNzZXMsXG4gICAgY29tcG9uZW50OiBjb21wb25lbnQsXG4gICAgb25CbHVyOiBoYW5kbGVCbHVyLFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzLFxuICAgIHJlZjogaGFuZGxlclJlZixcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIHZhcmlhbnQ6IHZhcmlhbnQsXG4gICAgc3g6IFsuLi4oIU9iamVjdC5rZXlzKGNvbG9yVHJhbnNmb3JtYXRpb25zKS5pbmNsdWRlcyhjb2xvcikgPyBbe1xuICAgICAgY29sb3JcbiAgICB9XSA6IFtdKSwgLi4uKEFycmF5LmlzQXJyYXkoc3gpID8gc3ggOiBbc3hdKV1cbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTGluay5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgbGluay5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8uYW55LFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZixcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIGBjbGFzc2VzYCBwcm9wIGFwcGxpZWQgdG8gdGhlIFtgVHlwb2dyYXBoeWBdKC9tYXRlcmlhbC11aS9hcGkvdHlwb2dyYXBoeS8pIGVsZW1lbnQuXG4gICAqL1xuICBUeXBvZ3JhcGh5Q2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZW4gdGhlIGxpbmsgc2hvdWxkIGhhdmUgYW4gdW5kZXJsaW5lLlxuICAgKiBAZGVmYXVsdCAnYWx3YXlzJ1xuICAgKi9cbiAgdW5kZXJsaW5lOiBQcm9wVHlwZXMub25lT2YoWydhbHdheXMnLCAnaG92ZXInLCAnbm9uZSddKSxcbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIHRoZW1lIHR5cG9ncmFwaHkgc3R5bGVzLlxuICAgKiBAZGVmYXVsdCAnaW5oZXJpdCdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYm9keTEnLCAnYm9keTInLCAnYnV0dG9uJywgJ2NhcHRpb24nLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnaW5oZXJpdCcsICdvdmVybGluZScsICdzdWJ0aXRsZTEnLCAnc3VidGl0bGUyJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBMaW5rOyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlMaXN0Jywgc2xvdCk7XG59XG5jb25zdCBsaXN0Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUxpc3QnLCBbJ3Jvb3QnLCAncGFkZGluZycsICdkZW5zZScsICdzdWJoZWFkZXInXSk7XG5leHBvcnQgZGVmYXVsdCBsaXN0Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImRlbnNlXCIsIFwiZGlzYWJsZVBhZGRpbmdcIiwgXCJzdWJoZWFkZXJcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IExpc3RDb250ZXh0IGZyb20gJy4vTGlzdENvbnRleHQnO1xuaW1wb3J0IHsgZ2V0TGlzdFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vbGlzdENsYXNzZXMnO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGRpc2FibGVQYWRkaW5nLFxuICAgIGRlbnNlLFxuICAgIHN1YmhlYWRlclxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgIWRpc2FibGVQYWRkaW5nICYmICdwYWRkaW5nJywgZGVuc2UgJiYgJ2RlbnNlJywgc3ViaGVhZGVyICYmICdzdWJoZWFkZXInXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldExpc3RVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IExpc3RSb290ID0gc3R5bGVkKCd1bCcsIHtcbiAgbmFtZTogJ011aUxpc3QnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgIW93bmVyU3RhdGUuZGlzYWJsZVBhZGRpbmcgJiYgc3R5bGVzLnBhZGRpbmcsIG93bmVyU3RhdGUuZGVuc2UgJiYgc3R5bGVzLmRlbnNlLCBvd25lclN0YXRlLnN1YmhlYWRlciAmJiBzdHlsZXMuc3ViaGVhZGVyXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBsaXN0U3R5bGU6ICdub25lJyxcbiAgbWFyZ2luOiAwLFxuICBwYWRkaW5nOiAwLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xufSwgIW93bmVyU3RhdGUuZGlzYWJsZVBhZGRpbmcgJiYge1xuICBwYWRkaW5nVG9wOiA4LFxuICBwYWRkaW5nQm90dG9tOiA4XG59LCBvd25lclN0YXRlLnN1YmhlYWRlciAmJiB7XG4gIHBhZGRpbmdUb3A6IDBcbn0pKTtcbmNvbnN0IExpc3QgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBMaXN0KGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlMaXN0J1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQgPSAndWwnLFxuICAgICAgZGVuc2UgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVQYWRkaW5nID0gZmFsc2UsXG4gICAgICBzdWJoZWFkZXJcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBkZW5zZVxuICB9KSwgW2RlbnNlXSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb21wb25lbnQsXG4gICAgZGVuc2UsXG4gICAgZGlzYWJsZVBhZGRpbmdcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KExpc3RDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNvbnRleHQsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4cyhMaXN0Um9vdCwgX2V4dGVuZHMoe1xuICAgICAgYXM6IGNvbXBvbmVudCxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgICByZWY6IHJlZixcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2hpbGRyZW46IFtzdWJoZWFkZXIsIGNoaWxkcmVuXVxuICAgIH0pKVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTGlzdC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBjb21wYWN0IHZlcnRpY2FsIHBhZGRpbmcgZGVzaWduZWQgZm9yIGtleWJvYXJkIGFuZCBtb3VzZSBpbnB1dCBpcyB1c2VkIGZvclxuICAgKiB0aGUgbGlzdCBhbmQgbGlzdCBpdGVtcy5cbiAgICogVGhlIHByb3AgaXMgYXZhaWxhYmxlIHRvIGRlc2NlbmRhbnQgY29tcG9uZW50cyBhcyB0aGUgYGRlbnNlYCBjb250ZXh0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVuc2U6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB2ZXJ0aWNhbCBwYWRkaW5nIGlzIHJlbW92ZWQgZnJvbSB0aGUgbGlzdC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVQYWRkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBzdWJoZWFkZXIsIG5vcm1hbGx5IGBMaXN0U3ViaGVhZGVyYC5cbiAgICovXG4gIHN1YmhlYWRlcjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBMaXN0OyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IExpc3RDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgTGlzdENvbnRleHQuZGlzcGxheU5hbWUgPSAnTGlzdENvbnRleHQnO1xufVxuZXhwb3J0IGRlZmF1bHQgTGlzdENvbnRleHQ7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpc3RJdGVtVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlMaXN0SXRlbScsIHNsb3QpO1xufVxuY29uc3QgbGlzdEl0ZW1DbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpTGlzdEl0ZW0nLCBbJ3Jvb3QnLCAnY29udGFpbmVyJywgJ2ZvY3VzVmlzaWJsZScsICdkZW5zZScsICdhbGlnbkl0ZW1zRmxleFN0YXJ0JywgJ2Rpc2FibGVkJywgJ2RpdmlkZXInLCAnZ3V0dGVycycsICdwYWRkaW5nJywgJ2J1dHRvbicsICdzZWNvbmRhcnlBY3Rpb24nLCAnc2VsZWN0ZWQnXSk7XG5leHBvcnQgZGVmYXVsdCBsaXN0SXRlbUNsYXNzZXM7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uQ2xhc3Nlc1V0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24nLCBzbG90KTtcbn1cbmNvbnN0IGxpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUxpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uJywgWydyb290JywgJ2Rpc2FibGVHdXR0ZXJzJ10pO1xuZXhwb3J0IGRlZmF1bHQgbGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb25DbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgTGlzdENvbnRleHQgZnJvbSAnLi4vTGlzdC9MaXN0Q29udGV4dCc7XG5pbXBvcnQgeyBnZXRMaXN0SXRlbVNlY29uZGFyeUFjdGlvbkNsYXNzZXNVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2xpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGRpc2FibGVHdXR0ZXJzLFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGRpc2FibGVHdXR0ZXJzICYmICdkaXNhYmxlR3V0dGVycyddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb25DbGFzc2VzVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBMaXN0SXRlbVNlY29uZGFyeUFjdGlvblJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aUxpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuZGlzYWJsZUd1dHRlcnMgJiYgc3R5bGVzLmRpc2FibGVHdXR0ZXJzXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgcmlnaHQ6IDE2LFxuICB0b3A6ICc1MCUnLFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC01MCUpJ1xufSwgb3duZXJTdGF0ZS5kaXNhYmxlR3V0dGVycyAmJiB7XG4gIHJpZ2h0OiAwXG59KSk7XG5cbi8qKlxuICogTXVzdCBiZSB1c2VkIGFzIHRoZSBsYXN0IGNoaWxkIG9mIExpc3RJdGVtIHRvIGZ1bmN0aW9uIHByb3Blcmx5LlxuICovXG5jb25zdCBMaXN0SXRlbVNlY29uZGFyeUFjdGlvbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlMaXN0SXRlbVNlY29uZGFyeUFjdGlvbidcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChMaXN0Q29udGV4dCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBkaXNhYmxlR3V0dGVyczogY29udGV4dC5kaXNhYmxlR3V0dGVyc1xuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb25Sb290LCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIHJlZjogcmVmXG4gIH0sIG90aGVyKSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQsIG5vcm1hbGx5IGFuIGBJY29uQnV0dG9uYCBvciBzZWxlY3Rpb24gY29udHJvbC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5MaXN0SXRlbVNlY29uZGFyeUFjdGlvbi5tdWlOYW1lID0gJ0xpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uJztcbmV4cG9ydCBkZWZhdWx0IExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcImFsaWduSXRlbXNcIiwgXCJhdXRvRm9jdXNcIiwgXCJidXR0b25cIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImNvbXBvbmVudHNcIiwgXCJjb21wb25lbnRzUHJvcHNcIiwgXCJDb250YWluZXJDb21wb25lbnRcIiwgXCJDb250YWluZXJQcm9wc1wiLCBcImRlbnNlXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlR3V0dGVyc1wiLCBcImRpc2FibGVQYWRkaW5nXCIsIFwiZGl2aWRlclwiLCBcImZvY3VzVmlzaWJsZUNsYXNzTmFtZVwiLCBcInNlY29uZGFyeUFjdGlvblwiLCBcInNlbGVjdGVkXCIsIFwic2xvdFByb3BzXCIsIFwic2xvdHNcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcywgaXNIb3N0Q29tcG9uZW50IH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCB7IGNoYWluUHJvcFR5cGVzLCBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgYWxwaGEgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IEJ1dHRvbkJhc2UgZnJvbSAnLi4vQnV0dG9uQmFzZSc7XG5pbXBvcnQgaXNNdWlFbGVtZW50IGZyb20gJy4uL3V0aWxzL2lzTXVpRWxlbWVudCc7XG5pbXBvcnQgdXNlRW5oYW5jZWRFZmZlY3QgZnJvbSAnLi4vdXRpbHMvdXNlRW5oYW5jZWRFZmZlY3QnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgTGlzdENvbnRleHQgZnJvbSAnLi4vTGlzdC9MaXN0Q29udGV4dCc7XG5pbXBvcnQgbGlzdEl0ZW1DbGFzc2VzLCB7IGdldExpc3RJdGVtVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9saXN0SXRlbUNsYXNzZXMnO1xuaW1wb3J0IHsgbGlzdEl0ZW1CdXR0b25DbGFzc2VzIH0gZnJvbSAnLi4vTGlzdEl0ZW1CdXR0b24nO1xuaW1wb3J0IExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uIGZyb20gJy4uL0xpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgY29uc3Qgb3ZlcnJpZGVzUmVzb2x2ZXIgPSAocHJvcHMsIHN0eWxlcykgPT4ge1xuICBjb25zdCB7XG4gICAgb3duZXJTdGF0ZVxuICB9ID0gcHJvcHM7XG4gIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuZGVuc2UgJiYgc3R5bGVzLmRlbnNlLCBvd25lclN0YXRlLmFsaWduSXRlbXMgPT09ICdmbGV4LXN0YXJ0JyAmJiBzdHlsZXMuYWxpZ25JdGVtc0ZsZXhTdGFydCwgb3duZXJTdGF0ZS5kaXZpZGVyICYmIHN0eWxlcy5kaXZpZGVyLCAhb3duZXJTdGF0ZS5kaXNhYmxlR3V0dGVycyAmJiBzdHlsZXMuZ3V0dGVycywgIW93bmVyU3RhdGUuZGlzYWJsZVBhZGRpbmcgJiYgc3R5bGVzLnBhZGRpbmcsIG93bmVyU3RhdGUuYnV0dG9uICYmIHN0eWxlcy5idXR0b24sIG93bmVyU3RhdGUuaGFzU2Vjb25kYXJ5QWN0aW9uICYmIHN0eWxlcy5zZWNvbmRhcnlBY3Rpb25dO1xufTtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhbGlnbkl0ZW1zLFxuICAgIGJ1dHRvbixcbiAgICBjbGFzc2VzLFxuICAgIGRlbnNlLFxuICAgIGRpc2FibGVkLFxuICAgIGRpc2FibGVHdXR0ZXJzLFxuICAgIGRpc2FibGVQYWRkaW5nLFxuICAgIGRpdmlkZXIsXG4gICAgaGFzU2Vjb25kYXJ5QWN0aW9uLFxuICAgIHNlbGVjdGVkXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBkZW5zZSAmJiAnZGVuc2UnLCAhZGlzYWJsZUd1dHRlcnMgJiYgJ2d1dHRlcnMnLCAhZGlzYWJsZVBhZGRpbmcgJiYgJ3BhZGRpbmcnLCBkaXZpZGVyICYmICdkaXZpZGVyJywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgYnV0dG9uICYmICdidXR0b24nLCBhbGlnbkl0ZW1zID09PSAnZmxleC1zdGFydCcgJiYgJ2FsaWduSXRlbXNGbGV4U3RhcnQnLCBoYXNTZWNvbmRhcnlBY3Rpb24gJiYgJ3NlY29uZGFyeUFjdGlvbicsIHNlbGVjdGVkICYmICdzZWxlY3RlZCddLFxuICAgIGNvbnRhaW5lcjogWydjb250YWluZXInXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldExpc3RJdGVtVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5leHBvcnQgY29uc3QgTGlzdEl0ZW1Sb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlMaXN0SXRlbScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAganVzdGlmeUNvbnRlbnQ6ICdmbGV4LXN0YXJ0JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICB3aWR0aDogJzEwMCUnLFxuICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgdGV4dEFsaWduOiAnbGVmdCdcbn0sICFvd25lclN0YXRlLmRpc2FibGVQYWRkaW5nICYmIF9leHRlbmRzKHtcbiAgcGFkZGluZ1RvcDogOCxcbiAgcGFkZGluZ0JvdHRvbTogOFxufSwgb3duZXJTdGF0ZS5kZW5zZSAmJiB7XG4gIHBhZGRpbmdUb3A6IDQsXG4gIHBhZGRpbmdCb3R0b206IDRcbn0sICFvd25lclN0YXRlLmRpc2FibGVHdXR0ZXJzICYmIHtcbiAgcGFkZGluZ0xlZnQ6IDE2LFxuICBwYWRkaW5nUmlnaHQ6IDE2XG59LCAhIW93bmVyU3RhdGUuc2Vjb25kYXJ5QWN0aW9uICYmIHtcbiAgLy8gQWRkIHNvbWUgc3BhY2UgdG8gYXZvaWQgY29sbGlzaW9uIGFzIGBMaXN0SXRlbVNlY29uZGFyeUFjdGlvbmBcbiAgLy8gaXMgYWJzb2x1dGVseSBwb3NpdGlvbmVkLlxuICBwYWRkaW5nUmlnaHQ6IDQ4XG59KSwgISFvd25lclN0YXRlLnNlY29uZGFyeUFjdGlvbiAmJiB7XG4gIFtgJiA+IC4ke2xpc3RJdGVtQnV0dG9uQ2xhc3Nlcy5yb290fWBdOiB7XG4gICAgcGFkZGluZ1JpZ2h0OiA0OFxuICB9XG59LCB7XG4gIFtgJi4ke2xpc3RJdGVtQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5mb2N1c1xuICB9LFxuICBbYCYuJHtsaXN0SXRlbUNsYXNzZXMuc2VsZWN0ZWR9YF06IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5wcmltYXJ5Lm1haW5DaGFubmVsfSAvICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHl9KWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlLnByaW1hcnkubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5KSxcbiAgICBbYCYuJHtsaXN0SXRlbUNsYXNzZXMuZm9jdXNWaXNpYmxlfWBdOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5wcmltYXJ5Lm1haW5DaGFubmVsfSAvIGNhbGMoJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eX0gKyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uZm9jdXNPcGFjaXR5fSkpYCA6IGFscGhhKHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHkgKyB0aGVtZS5wYWxldHRlLmFjdGlvbi5mb2N1c09wYWNpdHkpXG4gICAgfVxuICB9LFxuICBbYCYuJHtsaXN0SXRlbUNsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBvcGFjaXR5OiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRPcGFjaXR5XG4gIH1cbn0sIG93bmVyU3RhdGUuYWxpZ25JdGVtcyA9PT0gJ2ZsZXgtc3RhcnQnICYmIHtcbiAgYWxpZ25JdGVtczogJ2ZsZXgtc3RhcnQnXG59LCBvd25lclN0YXRlLmRpdmlkZXIgJiYge1xuICBib3JkZXJCb3R0b206IGAxcHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5kaXZpZGVyfWAsXG4gIGJhY2tncm91bmRDbGlwOiAncGFkZGluZy1ib3gnXG59LCBvd25lclN0YXRlLmJ1dHRvbiAmJiB7XG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnYmFja2dyb3VuZC1jb2xvcicsIHtcbiAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlc3RcbiAgfSksXG4gICcmOmhvdmVyJzoge1xuICAgIHRleHREZWNvcmF0aW9uOiAnbm9uZScsXG4gICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uaG92ZXIsXG4gICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICB9XG4gIH0sXG4gIFtgJi4ke2xpc3RJdGVtQ2xhc3Nlcy5zZWxlY3RlZH06aG92ZXJgXToge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLnByaW1hcnkubWFpbkNoYW5uZWx9IC8gY2FsYygke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5fSArICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHl9KSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eSArIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eSksXG4gICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5wcmltYXJ5Lm1haW5DaGFubmVsfSAvICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHl9KWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlLnByaW1hcnkubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5KVxuICAgIH1cbiAgfVxufSwgb3duZXJTdGF0ZS5oYXNTZWNvbmRhcnlBY3Rpb24gJiYge1xuICAvLyBBZGQgc29tZSBzcGFjZSB0byBhdm9pZCBjb2xsaXNpb24gYXMgYExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uYFxuICAvLyBpcyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQuXG4gIHBhZGRpbmdSaWdodDogNDhcbn0pKTtcbmNvbnN0IExpc3RJdGVtQ29udGFpbmVyID0gc3R5bGVkKCdsaScsIHtcbiAgbmFtZTogJ011aUxpc3RJdGVtJyxcbiAgc2xvdDogJ0NvbnRhaW5lcicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLmNvbnRhaW5lclxufSkoe1xuICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xufSk7XG5cbi8qKlxuICogVXNlcyBhbiBhZGRpdGlvbmFsIGNvbnRhaW5lciBjb21wb25lbnQgaWYgYExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uYCBpcyB0aGUgbGFzdCBjaGlsZC5cbiAqL1xuY29uc3QgTGlzdEl0ZW0gPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBMaXN0SXRlbShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpTGlzdEl0ZW0nXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhbGlnbkl0ZW1zID0gJ2NlbnRlcicsXG4gICAgICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgICAgIGJ1dHRvbiA9IGZhbHNlLFxuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuUHJvcCxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudDogY29tcG9uZW50UHJvcCxcbiAgICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICAgIGNvbXBvbmVudHNQcm9wcyA9IHt9LFxuICAgICAgQ29udGFpbmVyQ29tcG9uZW50ID0gJ2xpJyxcbiAgICAgIENvbnRhaW5lclByb3BzOiB7XG4gICAgICAgIGNsYXNzTmFtZTogQ29udGFpbmVyQ2xhc3NOYW1lXG4gICAgICB9ID0ge30sXG4gICAgICBkZW5zZSA9IGZhbHNlLFxuICAgICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVHdXR0ZXJzID0gZmFsc2UsXG4gICAgICBkaXNhYmxlUGFkZGluZyA9IGZhbHNlLFxuICAgICAgZGl2aWRlciA9IGZhbHNlLFxuICAgICAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lLFxuICAgICAgc2Vjb25kYXJ5QWN0aW9uLFxuICAgICAgc2VsZWN0ZWQgPSBmYWxzZSxcbiAgICAgIHNsb3RQcm9wcyA9IHt9LFxuICAgICAgc2xvdHMgPSB7fVxuICAgIH0gPSBwcm9wcyxcbiAgICBDb250YWluZXJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLkNvbnRhaW5lclByb3BzLCBfZXhjbHVkZWQpLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZDIpO1xuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChMaXN0Q29udGV4dCk7XG4gIGNvbnN0IGNoaWxkQ29udGV4dCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBkZW5zZTogZGVuc2UgfHwgY29udGV4dC5kZW5zZSB8fCBmYWxzZSxcbiAgICBhbGlnbkl0ZW1zLFxuICAgIGRpc2FibGVHdXR0ZXJzXG4gIH0pLCBbYWxpZ25JdGVtcywgY29udGV4dC5kZW5zZSwgZGVuc2UsIGRpc2FibGVHdXR0ZXJzXSk7XG4gIGNvbnN0IGxpc3RJdGVtUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGF1dG9Gb2N1cykge1xuICAgICAgaWYgKGxpc3RJdGVtUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgbGlzdEl0ZW1SZWYuY3VycmVudC5mb2N1cygpO1xuICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogVW5hYmxlIHRvIHNldCBmb2N1cyB0byBhIExpc3RJdGVtIHdob3NlIGNvbXBvbmVudCBoYXMgbm90IGJlZW4gcmVuZGVyZWQuJyk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbYXV0b0ZvY3VzXSk7XG4gIGNvbnN0IGNoaWxkcmVuID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlblByb3ApO1xuXG4gIC8vIHY0IGltcGxlbWVudGF0aW9uLCBkZXByZWNhdGVkIGluIHY1LCB3aWxsIGJlIHJlbW92ZWQgaW4gdjZcbiAgY29uc3QgaGFzU2Vjb25kYXJ5QWN0aW9uID0gY2hpbGRyZW4ubGVuZ3RoICYmIGlzTXVpRWxlbWVudChjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXSwgWydMaXN0SXRlbVNlY29uZGFyeUFjdGlvbiddKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGFsaWduSXRlbXMsXG4gICAgYXV0b0ZvY3VzLFxuICAgIGJ1dHRvbixcbiAgICBkZW5zZTogY2hpbGRDb250ZXh0LmRlbnNlLFxuICAgIGRpc2FibGVkLFxuICAgIGRpc2FibGVHdXR0ZXJzLFxuICAgIGRpc2FibGVQYWRkaW5nLFxuICAgIGRpdmlkZXIsXG4gICAgaGFzU2Vjb25kYXJ5QWN0aW9uLFxuICAgIHNlbGVjdGVkXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYobGlzdEl0ZW1SZWYsIHJlZik7XG4gIGNvbnN0IFJvb3QgPSBzbG90cy5yb290IHx8IGNvbXBvbmVudHMuUm9vdCB8fCBMaXN0SXRlbVJvb3Q7XG4gIGNvbnN0IHJvb3RQcm9wcyA9IHNsb3RQcm9wcy5yb290IHx8IGNvbXBvbmVudHNQcm9wcy5yb290IHx8IHt9O1xuICBjb25zdCBjb21wb25lbnRQcm9wcyA9IF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCByb290UHJvcHMuY2xhc3NOYW1lLCBjbGFzc05hbWUpLFxuICAgIGRpc2FibGVkXG4gIH0sIG90aGVyKTtcbiAgbGV0IENvbXBvbmVudCA9IGNvbXBvbmVudFByb3AgfHwgJ2xpJztcbiAgaWYgKGJ1dHRvbikge1xuICAgIGNvbXBvbmVudFByb3BzLmNvbXBvbmVudCA9IGNvbXBvbmVudFByb3AgfHwgJ2Rpdic7XG4gICAgY29tcG9uZW50UHJvcHMuZm9jdXNWaXNpYmxlQ2xhc3NOYW1lID0gY2xzeChsaXN0SXRlbUNsYXNzZXMuZm9jdXNWaXNpYmxlLCBmb2N1c1Zpc2libGVDbGFzc05hbWUpO1xuICAgIENvbXBvbmVudCA9IEJ1dHRvbkJhc2U7XG4gIH1cblxuICAvLyB2NCBpbXBsZW1lbnRhdGlvbiwgZGVwcmVjYXRlZCBpbiB2NSwgd2lsbCBiZSByZW1vdmVkIGluIHY2XG4gIGlmIChoYXNTZWNvbmRhcnlBY3Rpb24pIHtcbiAgICAvLyBVc2UgZGl2IGJ5IGRlZmF1bHQuXG4gICAgQ29tcG9uZW50ID0gIWNvbXBvbmVudFByb3BzLmNvbXBvbmVudCAmJiAhY29tcG9uZW50UHJvcCA/ICdkaXYnIDogQ29tcG9uZW50O1xuXG4gICAgLy8gQXZvaWQgbmVzdGluZyBvZiBsaSA+IGxpLlxuICAgIGlmIChDb250YWluZXJDb21wb25lbnQgPT09ICdsaScpIHtcbiAgICAgIGlmIChDb21wb25lbnQgPT09ICdsaScpIHtcbiAgICAgICAgQ29tcG9uZW50ID0gJ2Rpdic7XG4gICAgICB9IGVsc2UgaWYgKGNvbXBvbmVudFByb3BzLmNvbXBvbmVudCA9PT0gJ2xpJykge1xuICAgICAgICBjb21wb25lbnRQcm9wcy5jb21wb25lbnQgPSAnZGl2JztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KExpc3RDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZTogY2hpbGRDb250ZXh0LFxuICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4cyhMaXN0SXRlbUNvbnRhaW5lciwgX2V4dGVuZHMoe1xuICAgICAgICBhczogQ29udGFpbmVyQ29tcG9uZW50LFxuICAgICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5jb250YWluZXIsIENvbnRhaW5lckNsYXNzTmFtZSksXG4gICAgICAgIHJlZjogaGFuZGxlUmVmLFxuICAgICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgICB9LCBDb250YWluZXJQcm9wcywge1xuICAgICAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9fanN4KFJvb3QsIF9leHRlbmRzKHt9LCByb290UHJvcHMsICFpc0hvc3RDb21wb25lbnQoUm9vdCkgJiYge1xuICAgICAgICAgIGFzOiBDb21wb25lbnQsXG4gICAgICAgICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUsIHJvb3RQcm9wcy5vd25lclN0YXRlKVxuICAgICAgICB9LCBjb21wb25lbnRQcm9wcywge1xuICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgICB9KSksIGNoaWxkcmVuLnBvcCgpXVxuICAgICAgfSkpXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KExpc3RDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNoaWxkQ29udGV4dCxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3hzKFJvb3QsIF9leHRlbmRzKHt9LCByb290UHJvcHMsIHtcbiAgICAgIGFzOiBDb21wb25lbnQsXG4gICAgICByZWY6IGhhbmRsZVJlZlxuICAgIH0sICFpc0hvc3RDb21wb25lbnQoUm9vdCkgJiYge1xuICAgICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUsIHJvb3RQcm9wcy5vd25lclN0YXRlKVxuICAgIH0sIGNvbXBvbmVudFByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogW2NoaWxkcmVuLCBzZWNvbmRhcnlBY3Rpb24gJiYgLyojX19QVVJFX18qL19qc3goTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24sIHtcbiAgICAgICAgY2hpbGRyZW46IHNlY29uZGFyeUFjdGlvblxuICAgICAgfSldXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBMaXN0SXRlbS5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBgYWxpZ24taXRlbXNgIHN0eWxlIHByb3BlcnR5LlxuICAgKiBAZGVmYXVsdCAnY2VudGVyJ1xuICAgKi9cbiAgYWxpZ25JdGVtczogUHJvcFR5cGVzLm9uZU9mKFsnY2VudGVyJywgJ2ZsZXgtc3RhcnQnXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsaXN0IGl0ZW0gaXMgZm9jdXNlZCBkdXJpbmcgdGhlIGZpcnN0IG1vdW50LlxuICAgKiBGb2N1cyB3aWxsIGFsc28gYmUgdHJpZ2dlcmVkIGlmIHRoZSB2YWx1ZSBjaGFuZ2VzIGZyb20gZmFsc2UgdG8gdHJ1ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQGRlcHJlY2F0ZWQgY2hlY2tvdXQgW0xpc3RJdGVtQnV0dG9uXSgvbWF0ZXJpYWwtdWkvYXBpL2xpc3QtaXRlbS1idXR0b24vKSBpbnN0ZWFkXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGlzdCBpdGVtIGlzIGEgYnV0dG9uICh1c2luZyBgQnV0dG9uQmFzZWApLiBQcm9wcyBpbnRlbmRlZFxuICAgKiBmb3IgYEJ1dHRvbkJhc2VgIGNhbiB0aGVuIGJlIGFwcGxpZWQgdG8gYExpc3RJdGVtYC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQGRlcHJlY2F0ZWQgY2hlY2tvdXQgW0xpc3RJdGVtQnV0dG9uXSgvbWF0ZXJpYWwtdWkvYXBpL2xpc3QtaXRlbS1idXR0b24vKSBpbnN0ZWFkXG4gICAqL1xuICBidXR0b246IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudCBpZiBhIGBMaXN0SXRlbVNlY29uZGFyeUFjdGlvbmAgaXMgdXNlZCBpdCBtdXN0XG4gICAqIGJlIHRoZSBsYXN0IGNoaWxkLlxuICAgKi9cbiAgY2hpbGRyZW46IGNoYWluUHJvcFR5cGVzKFByb3BUeXBlcy5ub2RlLCBwcm9wcyA9PiB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBSZWFjdC5DaGlsZHJlbi50b0FycmF5KHByb3BzLmNoaWxkcmVuKTtcblxuICAgIC8vIFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkocHJvcHMuY2hpbGRyZW4pLmZpbmRMYXN0SW5kZXgoaXNMaXN0SXRlbVNlY29uZGFyeUFjdGlvbilcbiAgICBsZXQgc2Vjb25kYXJ5QWN0aW9uSW5kZXggPSAtMTtcbiAgICBmb3IgKGxldCBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBpZiAoaXNNdWlFbGVtZW50KGNoaWxkLCBbJ0xpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uJ10pKSB7XG4gICAgICAgIHNlY29uZGFyeUFjdGlvbkluZGV4ID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gIGlzIExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uIHRoZSBsYXN0IGNoaWxkIG9mIExpc3RJdGVtXG4gICAgaWYgKHNlY29uZGFyeUFjdGlvbkluZGV4ICE9PSAtMSAmJiBzZWNvbmRhcnlBY3Rpb25JbmRleCAhPT0gY2hpbGRyZW4ubGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcignTVVJOiBZb3UgdXNlZCBhbiBlbGVtZW50IGFmdGVyIExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uLiAnICsgJ0ZvciBMaXN0SXRlbSB0byBkZXRlY3QgdGhhdCBpdCBoYXMgYSBzZWNvbmRhcnkgYWN0aW9uICcgKyAneW91IG11c3QgcGFzcyBpdCBhcyB0aGUgbGFzdCBjaGlsZCB0byBMaXN0SXRlbS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RzYCBwcm9wIGluc3RlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdFByb3BzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RQcm9wc2AgcHJvcCBpbnN0ZWFkLCBhcyBgY29tcG9uZW50c1Byb3BzYCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbnRhaW5lciBjb21wb25lbnQgdXNlZCB3aGVuIGEgYExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uYCBpcyB0aGUgbGFzdCBjaGlsZC5cbiAgICogQGRlZmF1bHQgJ2xpJ1xuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgQ29udGFpbmVyQ29tcG9uZW50OiBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZixcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIGNvbnRhaW5lciBjb21wb25lbnQgaWYgdXNlZC5cbiAgICogQGRlZmF1bHQge31cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIENvbnRhaW5lclByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogSWYgYHRydWVgLCBjb21wYWN0IHZlcnRpY2FsIHBhZGRpbmcgZGVzaWduZWQgZm9yIGtleWJvYXJkIGFuZCBtb3VzZSBpbnB1dCBpcyB1c2VkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBMaXN0IGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlbnNlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQGRlcHJlY2F0ZWQgY2hlY2tvdXQgW0xpc3RJdGVtQnV0dG9uXSgvbWF0ZXJpYWwtdWkvYXBpL2xpc3QtaXRlbS1idXR0b24vKSBpbnN0ZWFkXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsZWZ0IGFuZCByaWdodCBwYWRkaW5nIGlzIHJlbW92ZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlR3V0dGVyczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGFsbCBwYWRkaW5nIGlzIHJlbW92ZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUGFkZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgMXB4IGxpZ2h0IGJvcmRlciBpcyBhZGRlZCB0byB0aGUgYm90dG9tIG9mIHRoZSBsaXN0IGl0ZW0uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXZpZGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGZvY3VzVmlzaWJsZUNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRvIGRpc3BsYXkgYXQgdGhlIGVuZCBvZiBMaXN0SXRlbS5cbiAgICovXG4gIHNlY29uZGFyeUFjdGlvbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBVc2UgdG8gYXBwbHkgc2VsZWN0ZWQgc3R5bGluZy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQGRlcHJlY2F0ZWQgY2hlY2tvdXQgW0xpc3RJdGVtQnV0dG9uXSgvbWF0ZXJpYWwtdWkvYXBpL2xpc3QtaXRlbS1idXR0b24vKSBpbnN0ZWFkXG4gICAqL1xuICBzZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNQcm9wc2AgcHJvcCwgd2hpY2ggd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcm9vdDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBjb21wb25lbnRzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IExpc3RJdGVtOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFsaWduSXRlbXNcIiwgXCJhdXRvRm9jdXNcIiwgXCJjb21wb25lbnRcIiwgXCJjaGlsZHJlblwiLCBcImRlbnNlXCIsIFwiZGlzYWJsZUd1dHRlcnNcIiwgXCJkaXZpZGVyXCIsIFwiZm9jdXNWaXNpYmxlQ2xhc3NOYW1lXCIsIFwic2VsZWN0ZWRcIiwgXCJjbGFzc05hbWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBhbHBoYSB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgQnV0dG9uQmFzZSBmcm9tICcuLi9CdXR0b25CYXNlJztcbmltcG9ydCB1c2VFbmhhbmNlZEVmZmVjdCBmcm9tICcuLi91dGlscy91c2VFbmhhbmNlZEVmZmVjdCc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCBMaXN0Q29udGV4dCBmcm9tICcuLi9MaXN0L0xpc3RDb250ZXh0JztcbmltcG9ydCBsaXN0SXRlbUJ1dHRvbkNsYXNzZXMsIHsgZ2V0TGlzdEl0ZW1CdXR0b25VdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2xpc3RJdGVtQnV0dG9uQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGNvbnN0IG92ZXJyaWRlc1Jlc29sdmVyID0gKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgY29uc3Qge1xuICAgIG93bmVyU3RhdGVcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLmRlbnNlICYmIHN0eWxlcy5kZW5zZSwgb3duZXJTdGF0ZS5hbGlnbkl0ZW1zID09PSAnZmxleC1zdGFydCcgJiYgc3R5bGVzLmFsaWduSXRlbXNGbGV4U3RhcnQsIG93bmVyU3RhdGUuZGl2aWRlciAmJiBzdHlsZXMuZGl2aWRlciwgIW93bmVyU3RhdGUuZGlzYWJsZUd1dHRlcnMgJiYgc3R5bGVzLmd1dHRlcnNdO1xufTtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhbGlnbkl0ZW1zLFxuICAgIGNsYXNzZXMsXG4gICAgZGVuc2UsXG4gICAgZGlzYWJsZWQsXG4gICAgZGlzYWJsZUd1dHRlcnMsXG4gICAgZGl2aWRlcixcbiAgICBzZWxlY3RlZFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgZGVuc2UgJiYgJ2RlbnNlJywgIWRpc2FibGVHdXR0ZXJzICYmICdndXR0ZXJzJywgZGl2aWRlciAmJiAnZGl2aWRlcicsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIGFsaWduSXRlbXMgPT09ICdmbGV4LXN0YXJ0JyAmJiAnYWxpZ25JdGVtc0ZsZXhTdGFydCcsIHNlbGVjdGVkICYmICdzZWxlY3RlZCddXG4gIH07XG4gIGNvbnN0IGNvbXBvc2VkQ2xhc3NlcyA9IGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRMaXN0SXRlbUJ1dHRvblV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgY2xhc3NlcywgY29tcG9zZWRDbGFzc2VzKTtcbn07XG5jb25zdCBMaXN0SXRlbUJ1dHRvblJvb3QgPSBzdHlsZWQoQnV0dG9uQmFzZSwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpTGlzdEl0ZW1CdXR0b24nLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyXG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIGZsZXhHcm93OiAxLFxuICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtc3RhcnQnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIHRleHREZWNvcmF0aW9uOiAnbm9uZScsXG4gIG1pbldpZHRoOiAwLFxuICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgdGV4dEFsaWduOiAnbGVmdCcsXG4gIHBhZGRpbmdUb3A6IDgsXG4gIHBhZGRpbmdCb3R0b206IDgsXG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnYmFja2dyb3VuZC1jb2xvcicsIHtcbiAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlc3RcbiAgfSksXG4gICcmOmhvdmVyJzoge1xuICAgIHRleHREZWNvcmF0aW9uOiAnbm9uZScsXG4gICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uaG92ZXIsXG4gICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICB9XG4gIH0sXG4gIFtgJi4ke2xpc3RJdGVtQnV0dG9uQ2xhc3Nlcy5zZWxlY3RlZH1gXToge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLnByaW1hcnkubWFpbkNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eX0pYCA6IGFscGhhKHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHkpLFxuICAgIFtgJi4ke2xpc3RJdGVtQnV0dG9uQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLnByaW1hcnkubWFpbkNoYW5uZWx9IC8gY2FsYygke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5fSArICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5mb2N1c09wYWNpdHl9KSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eSArIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmZvY3VzT3BhY2l0eSlcbiAgICB9XG4gIH0sXG4gIFtgJi4ke2xpc3RJdGVtQnV0dG9uQ2xhc3Nlcy5zZWxlY3RlZH06aG92ZXJgXToge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLnByaW1hcnkubWFpbkNoYW5uZWx9IC8gY2FsYygke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5fSArICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHl9KSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eSArIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eSksXG4gICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5wcmltYXJ5Lm1haW5DaGFubmVsfSAvICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHl9KWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlLnByaW1hcnkubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5KVxuICAgIH1cbiAgfSxcbiAgW2AmLiR7bGlzdEl0ZW1CdXR0b25DbGFzc2VzLmZvY3VzVmlzaWJsZX1gXToge1xuICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmZvY3VzXG4gIH0sXG4gIFtgJi4ke2xpc3RJdGVtQnV0dG9uQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIG9wYWNpdHk6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZE9wYWNpdHlcbiAgfVxufSwgb3duZXJTdGF0ZS5kaXZpZGVyICYmIHtcbiAgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICR7KHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZGl2aWRlcn1gLFxuICBiYWNrZ3JvdW5kQ2xpcDogJ3BhZGRpbmctYm94J1xufSwgb3duZXJTdGF0ZS5hbGlnbkl0ZW1zID09PSAnZmxleC1zdGFydCcgJiYge1xuICBhbGlnbkl0ZW1zOiAnZmxleC1zdGFydCdcbn0sICFvd25lclN0YXRlLmRpc2FibGVHdXR0ZXJzICYmIHtcbiAgcGFkZGluZ0xlZnQ6IDE2LFxuICBwYWRkaW5nUmlnaHQ6IDE2XG59LCBvd25lclN0YXRlLmRlbnNlICYmIHtcbiAgcGFkZGluZ1RvcDogNCxcbiAgcGFkZGluZ0JvdHRvbTogNFxufSkpO1xuY29uc3QgTGlzdEl0ZW1CdXR0b24gPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBMaXN0SXRlbUJ1dHRvbihpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpTGlzdEl0ZW1CdXR0b24nXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhbGlnbkl0ZW1zID0gJ2NlbnRlcicsXG4gICAgICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBkZW5zZSA9IGZhbHNlLFxuICAgICAgZGlzYWJsZUd1dHRlcnMgPSBmYWxzZSxcbiAgICAgIGRpdmlkZXIgPSBmYWxzZSxcbiAgICAgIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSxcbiAgICAgIHNlbGVjdGVkID0gZmFsc2UsXG4gICAgICBjbGFzc05hbWVcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoTGlzdENvbnRleHQpO1xuICBjb25zdCBjaGlsZENvbnRleHQgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgZGVuc2U6IGRlbnNlIHx8IGNvbnRleHQuZGVuc2UgfHwgZmFsc2UsXG4gICAgYWxpZ25JdGVtcyxcbiAgICBkaXNhYmxlR3V0dGVyc1xuICB9KSwgW2FsaWduSXRlbXMsIGNvbnRleHQuZGVuc2UsIGRlbnNlLCBkaXNhYmxlR3V0dGVyc10pO1xuICBjb25zdCBsaXN0SXRlbVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChhdXRvRm9jdXMpIHtcbiAgICAgIGlmIChsaXN0SXRlbVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGxpc3RJdGVtUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IFVuYWJsZSB0byBzZXQgZm9jdXMgdG8gYSBMaXN0SXRlbUJ1dHRvbiB3aG9zZSBjb21wb25lbnQgaGFzIG5vdCBiZWVuIHJlbmRlcmVkLicpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW2F1dG9Gb2N1c10pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgYWxpZ25JdGVtcyxcbiAgICBkZW5zZTogY2hpbGRDb250ZXh0LmRlbnNlLFxuICAgIGRpc2FibGVHdXR0ZXJzLFxuICAgIGRpdmlkZXIsXG4gICAgc2VsZWN0ZWRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihsaXN0SXRlbVJlZiwgcmVmKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KExpc3RDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNoaWxkQ29udGV4dCxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goTGlzdEl0ZW1CdXR0b25Sb290LCBfZXh0ZW5kcyh7XG4gICAgICByZWY6IGhhbmRsZVJlZixcbiAgICAgIGhyZWY6IG90aGVyLmhyZWYgfHwgb3RoZXIudG9cbiAgICAgIC8vIGBCdXR0b25CYXNlYCBwcm9jZXNzZXMgYGhyZWZgIG9yIGB0b2AgaWYgYGNvbXBvbmVudGAgaXMgc2V0IHRvICdidXR0b24nXG4gICAgICAsXG4gICAgICBjb21wb25lbnQ6IChvdGhlci5ocmVmIHx8IG90aGVyLnRvKSAmJiBjb21wb25lbnQgPT09ICdkaXYnID8gJ2J1dHRvbicgOiBjb21wb25lbnQsXG4gICAgICBmb2N1c1Zpc2libGVDbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5mb2N1c1Zpc2libGUsIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSksXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICAgIH0sIG90aGVyLCB7XG4gICAgICBjbGFzc2VzOiBjbGFzc2VzLFxuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBMaXN0SXRlbUJ1dHRvbi5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBgYWxpZ24taXRlbXNgIHN0eWxlIHByb3BlcnR5LlxuICAgKiBAZGVmYXVsdCAnY2VudGVyJ1xuICAgKi9cbiAgYWxpZ25JdGVtczogUHJvcFR5cGVzLm9uZU9mKFsnY2VudGVyJywgJ2ZsZXgtc3RhcnQnXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsaXN0IGl0ZW0gaXMgZm9jdXNlZCBkdXJpbmcgdGhlIGZpcnN0IG1vdW50LlxuICAgKiBGb2N1cyB3aWxsIGFsc28gYmUgdHJpZ2dlcmVkIGlmIHRoZSB2YWx1ZSBjaGFuZ2VzIGZyb20gZmFsc2UgdG8gdHJ1ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50IGlmIGEgYExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uYCBpcyB1c2VkIGl0IG11c3RcbiAgICogYmUgdGhlIGxhc3QgY2hpbGQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGNvbXBhY3QgdmVydGljYWwgcGFkZGluZyBkZXNpZ25lZCBmb3Iga2V5Ym9hcmQgYW5kIG1vdXNlIGlucHV0IGlzIHVzZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IExpc3QgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVuc2U6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGVmdCBhbmQgcmlnaHQgcGFkZGluZyBpcyByZW1vdmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUd1dHRlcnM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIDFweCBsaWdodCBib3JkZXIgaXMgYWRkZWQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgbGlzdCBpdGVtLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGl2aWRlcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgY2FuIGhlbHAgaWRlbnRpZnkgd2hpY2ggZWxlbWVudCBoYXMga2V5Ym9hcmQgZm9jdXMuXG4gICAqIFRoZSBjbGFzcyBuYW1lIHdpbGwgYmUgYXBwbGllZCB3aGVuIHRoZSBlbGVtZW50IGdhaW5zIHRoZSBmb2N1cyB0aHJvdWdoIGtleWJvYXJkIGludGVyYWN0aW9uLlxuICAgKiBJdCdzIGEgcG9seWZpbGwgZm9yIHRoZSBbQ1NTIDpmb2N1cy12aXNpYmxlIHNlbGVjdG9yXShodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvc2VsZWN0b3JzLTQvI3RoZS1mb2N1cy12aXNpYmxlLXBzZXVkbykuXG4gICAqIFRoZSByYXRpb25hbGUgZm9yIHVzaW5nIHRoaXMgZmVhdHVyZSBbaXMgZXhwbGFpbmVkIGhlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL2ZvY3VzLXZpc2libGUvYmxvYi9IRUFEL2V4cGxhaW5lci5tZCkuXG4gICAqIEEgW3BvbHlmaWxsIGNhbiBiZSB1c2VkXShodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlKSB0byBhcHBseSBhIGBmb2N1cy12aXNpYmxlYCBjbGFzcyB0byBvdGhlciBjb21wb25lbnRzXG4gICAqIGlmIG5lZWRlZC5cbiAgICovXG4gIGZvY3VzVmlzaWJsZUNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBVc2UgdG8gYXBwbHkgc2VsZWN0ZWQgc3R5bGluZy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHNlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IExpc3RJdGVtQnV0dG9uOyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0SXRlbUJ1dHRvblV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTGlzdEl0ZW1CdXR0b24nLCBzbG90KTtcbn1cbmNvbnN0IGxpc3RJdGVtQnV0dG9uQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUxpc3RJdGVtQnV0dG9uJywgWydyb290JywgJ2ZvY3VzVmlzaWJsZScsICdkZW5zZScsICdhbGlnbkl0ZW1zRmxleFN0YXJ0JywgJ2Rpc2FibGVkJywgJ2RpdmlkZXInLCAnZ3V0dGVycycsICdzZWxlY3RlZCddKTtcbmV4cG9ydCBkZWZhdWx0IGxpc3RJdGVtQnV0dG9uQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhY3Rpb25zXCIsIFwiYXV0b0ZvY3VzXCIsIFwiYXV0b0ZvY3VzSXRlbVwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZVwiLCBcImRpc2FibGVMaXN0V3JhcFwiLCBcIm9uS2V5RG93blwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0ZyYWdtZW50IH0gZnJvbSAncmVhY3QtaXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBvd25lckRvY3VtZW50IGZyb20gJy4uL3V0aWxzL293bmVyRG9jdW1lbnQnO1xuaW1wb3J0IExpc3QgZnJvbSAnLi4vTGlzdCc7XG5pbXBvcnQgZ2V0U2Nyb2xsYmFyU2l6ZSBmcm9tICcuLi91dGlscy9nZXRTY3JvbGxiYXJTaXplJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHVzZUVuaGFuY2VkRWZmZWN0IGZyb20gJy4uL3V0aWxzL3VzZUVuaGFuY2VkRWZmZWN0JztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBuZXh0SXRlbShsaXN0LCBpdGVtLCBkaXNhYmxlTGlzdFdyYXApIHtcbiAgaWYgKGxpc3QgPT09IGl0ZW0pIHtcbiAgICByZXR1cm4gbGlzdC5maXJzdENoaWxkO1xuICB9XG4gIGlmIChpdGVtICYmIGl0ZW0ubmV4dEVsZW1lbnRTaWJsaW5nKSB7XG4gICAgcmV0dXJuIGl0ZW0ubmV4dEVsZW1lbnRTaWJsaW5nO1xuICB9XG4gIHJldHVybiBkaXNhYmxlTGlzdFdyYXAgPyBudWxsIDogbGlzdC5maXJzdENoaWxkO1xufVxuZnVuY3Rpb24gcHJldmlvdXNJdGVtKGxpc3QsIGl0ZW0sIGRpc2FibGVMaXN0V3JhcCkge1xuICBpZiAobGlzdCA9PT0gaXRlbSkge1xuICAgIHJldHVybiBkaXNhYmxlTGlzdFdyYXAgPyBsaXN0LmZpcnN0Q2hpbGQgOiBsaXN0Lmxhc3RDaGlsZDtcbiAgfVxuICBpZiAoaXRlbSAmJiBpdGVtLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHtcbiAgICByZXR1cm4gaXRlbS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICB9XG4gIHJldHVybiBkaXNhYmxlTGlzdFdyYXAgPyBudWxsIDogbGlzdC5sYXN0Q2hpbGQ7XG59XG5mdW5jdGlvbiB0ZXh0Q3JpdGVyaWFNYXRjaGVzKG5leHRGb2N1cywgdGV4dENyaXRlcmlhKSB7XG4gIGlmICh0ZXh0Q3JpdGVyaWEgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGxldCB0ZXh0ID0gbmV4dEZvY3VzLmlubmVyVGV4dDtcbiAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIGpzZG9tIGRvZXNuJ3Qgc3VwcG9ydCBpbm5lclRleHRcbiAgICB0ZXh0ID0gbmV4dEZvY3VzLnRleHRDb250ZW50O1xuICB9XG4gIHRleHQgPSB0ZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAodGV4dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHRleHRDcml0ZXJpYS5yZXBlYXRpbmcpIHtcbiAgICByZXR1cm4gdGV4dFswXSA9PT0gdGV4dENyaXRlcmlhLmtleXNbMF07XG4gIH1cbiAgcmV0dXJuIHRleHQuaW5kZXhPZih0ZXh0Q3JpdGVyaWEua2V5cy5qb2luKCcnKSkgPT09IDA7XG59XG5mdW5jdGlvbiBtb3ZlRm9jdXMobGlzdCwgY3VycmVudEZvY3VzLCBkaXNhYmxlTGlzdFdyYXAsIGRpc2FibGVkSXRlbXNGb2N1c2FibGUsIHRyYXZlcnNhbEZ1bmN0aW9uLCB0ZXh0Q3JpdGVyaWEpIHtcbiAgbGV0IHdyYXBwZWRPbmNlID0gZmFsc2U7XG4gIGxldCBuZXh0Rm9jdXMgPSB0cmF2ZXJzYWxGdW5jdGlvbihsaXN0LCBjdXJyZW50Rm9jdXMsIGN1cnJlbnRGb2N1cyA/IGRpc2FibGVMaXN0V3JhcCA6IGZhbHNlKTtcbiAgd2hpbGUgKG5leHRGb2N1cykge1xuICAgIC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcC5cbiAgICBpZiAobmV4dEZvY3VzID09PSBsaXN0LmZpcnN0Q2hpbGQpIHtcbiAgICAgIGlmICh3cmFwcGVkT25jZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB3cmFwcGVkT25jZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gU2FtZSBsb2dpYyBhcyB1c2VBdXRvY29tcGxldGUuanNcbiAgICBjb25zdCBuZXh0Rm9jdXNEaXNhYmxlZCA9IGRpc2FibGVkSXRlbXNGb2N1c2FibGUgPyBmYWxzZSA6IG5leHRGb2N1cy5kaXNhYmxlZCB8fCBuZXh0Rm9jdXMuZ2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJykgPT09ICd0cnVlJztcbiAgICBpZiAoIW5leHRGb2N1cy5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHwgIXRleHRDcml0ZXJpYU1hdGNoZXMobmV4dEZvY3VzLCB0ZXh0Q3JpdGVyaWEpIHx8IG5leHRGb2N1c0Rpc2FibGVkKSB7XG4gICAgICAvLyBNb3ZlIHRvIHRoZSBuZXh0IGVsZW1lbnQuXG4gICAgICBuZXh0Rm9jdXMgPSB0cmF2ZXJzYWxGdW5jdGlvbihsaXN0LCBuZXh0Rm9jdXMsIGRpc2FibGVMaXN0V3JhcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRGb2N1cy5mb2N1cygpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBBIHBlcm1hbmVudGx5IGRpc3BsYXllZCBtZW51IGZvbGxvd2luZyBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL3BhdHRlcm5zL21lbnUtYnV0dG9uLy5cbiAqIEl0J3MgZXhwb3NlZCB0byBoZWxwIGN1c3RvbWl6YXRpb24gb2YgdGhlIFtgTWVudWBdKC9tYXRlcmlhbC11aS9hcGkvbWVudS8pIGNvbXBvbmVudCBpZiB5b3VcbiAqIHVzZSBpdCBzZXBhcmF0ZWx5IHlvdSBuZWVkIHRvIG1vdmUgZm9jdXMgaW50byB0aGUgY29tcG9uZW50IG1hbnVhbGx5LiBPbmNlXG4gKiB0aGUgZm9jdXMgaXMgcGxhY2VkIGluc2lkZSB0aGUgY29tcG9uZW50IGl0IGlzIGZ1bGx5IGtleWJvYXJkIGFjY2Vzc2libGUuXG4gKi9cbmNvbnN0IE1lbnVMaXN0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTWVudUxpc3QocHJvcHMsIHJlZikge1xuICBjb25zdCB7XG4gICAgICAvLyBwcml2YXRlXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvcHJvcC10eXBlc1xuICAgICAgYWN0aW9ucyxcbiAgICAgIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICAgICAgYXV0b0ZvY3VzSXRlbSA9IGZhbHNlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlID0gZmFsc2UsXG4gICAgICBkaXNhYmxlTGlzdFdyYXAgPSBmYWxzZSxcbiAgICAgIG9uS2V5RG93bixcbiAgICAgIHZhcmlhbnQgPSAnc2VsZWN0ZWRNZW51J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBsaXN0UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCB0ZXh0Q3JpdGVyaWFSZWYgPSBSZWFjdC51c2VSZWYoe1xuICAgIGtleXM6IFtdLFxuICAgIHJlcGVhdGluZzogdHJ1ZSxcbiAgICBwcmV2aW91c0tleU1hdGNoZWQ6IHRydWUsXG4gICAgbGFzdFRpbWU6IG51bGxcbiAgfSk7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYXV0b0ZvY3VzKSB7XG4gICAgICBsaXN0UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gIH0sIFthdXRvRm9jdXNdKTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShhY3Rpb25zLCAoKSA9PiAoe1xuICAgIGFkanVzdFN0eWxlRm9yU2Nyb2xsYmFyOiAoY29udGFpbmVyRWxlbWVudCwgdGhlbWUpID0+IHtcbiAgICAgIC8vIExldCdzIGlnbm9yZSB0aGF0IHBpZWNlIG9mIGxvZ2ljIGlmIHVzZXJzIGFyZSBhbHJlYWR5IG92ZXJyaWRpbmcgdGhlIHdpZHRoXG4gICAgICAvLyBvZiB0aGUgbWVudS5cbiAgICAgIGNvbnN0IG5vRXhwbGljaXRXaWR0aCA9ICFsaXN0UmVmLmN1cnJlbnQuc3R5bGUud2lkdGg7XG4gICAgICBpZiAoY29udGFpbmVyRWxlbWVudC5jbGllbnRIZWlnaHQgPCBsaXN0UmVmLmN1cnJlbnQuY2xpZW50SGVpZ2h0ICYmIG5vRXhwbGljaXRXaWR0aCkge1xuICAgICAgICBjb25zdCBzY3JvbGxiYXJTaXplID0gYCR7Z2V0U2Nyb2xsYmFyU2l6ZShvd25lckRvY3VtZW50KGNvbnRhaW5lckVsZW1lbnQpKX1weGA7XG4gICAgICAgIGxpc3RSZWYuY3VycmVudC5zdHlsZVt0aGVtZS5kaXJlY3Rpb24gPT09ICdydGwnID8gJ3BhZGRpbmdMZWZ0JyA6ICdwYWRkaW5nUmlnaHQnXSA9IHNjcm9sbGJhclNpemU7XG4gICAgICAgIGxpc3RSZWYuY3VycmVudC5zdHlsZS53aWR0aCA9IGBjYWxjKDEwMCUgKyAke3Njcm9sbGJhclNpemV9KWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFJlZi5jdXJyZW50O1xuICAgIH1cbiAgfSksIFtdKTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBjb25zdCBsaXN0ID0gbGlzdFJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7RWxlbWVudH0gLSB3aWxsIGFsd2F5cyBiZSBkZWZpbmVkIHNpbmNlIHdlIGFyZSBpbiBhIGtleWRvd24gaGFuZGxlclxuICAgICAqIGF0dGFjaGVkIHRvIGFuIGVsZW1lbnQuIEEga2V5ZG93biBldmVudCBpcyBlaXRoZXIgZGlzcGF0Y2hlZCB0byB0aGUgYWN0aXZlRWxlbWVudFxuICAgICAqIG9yIGRvY3VtZW50LmJvZHkgb3IgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LiBPbmx5IHRoZSBmaXJzdCBjYXNlIHdpbGxcbiAgICAgKiB0cmlnZ2VyIHRoaXMgc3BlY2lmaWMgaGFuZGxlci5cbiAgICAgKi9cbiAgICBjb25zdCBjdXJyZW50Rm9jdXMgPSBvd25lckRvY3VtZW50KGxpc3QpLmFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIC8vIFByZXZlbnQgc2Nyb2xsIG9mIHRoZSBwYWdlXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbW92ZUZvY3VzKGxpc3QsIGN1cnJlbnRGb2N1cywgZGlzYWJsZUxpc3RXcmFwLCBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlLCBuZXh0SXRlbSk7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG1vdmVGb2N1cyhsaXN0LCBjdXJyZW50Rm9jdXMsIGRpc2FibGVMaXN0V3JhcCwgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSwgcHJldmlvdXNJdGVtKTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ0hvbWUnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbW92ZUZvY3VzKGxpc3QsIG51bGwsIGRpc2FibGVMaXN0V3JhcCwgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSwgbmV4dEl0ZW0pO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnRW5kJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG1vdmVGb2N1cyhsaXN0LCBudWxsLCBkaXNhYmxlTGlzdFdyYXAsIGRpc2FibGVkSXRlbXNGb2N1c2FibGUsIHByZXZpb3VzSXRlbSk7XG4gICAgfSBlbHNlIGlmIChrZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBjcml0ZXJpYSA9IHRleHRDcml0ZXJpYVJlZi5jdXJyZW50O1xuICAgICAgY29uc3QgbG93ZXJLZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGN1cnJUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICBpZiAoY3JpdGVyaWEua2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIFJlc2V0XG4gICAgICAgIGlmIChjdXJyVGltZSAtIGNyaXRlcmlhLmxhc3RUaW1lID4gNTAwKSB7XG4gICAgICAgICAgY3JpdGVyaWEua2V5cyA9IFtdO1xuICAgICAgICAgIGNyaXRlcmlhLnJlcGVhdGluZyA9IHRydWU7XG4gICAgICAgICAgY3JpdGVyaWEucHJldmlvdXNLZXlNYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjcml0ZXJpYS5yZXBlYXRpbmcgJiYgbG93ZXJLZXkgIT09IGNyaXRlcmlhLmtleXNbMF0pIHtcbiAgICAgICAgICBjcml0ZXJpYS5yZXBlYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY3JpdGVyaWEubGFzdFRpbWUgPSBjdXJyVGltZTtcbiAgICAgIGNyaXRlcmlhLmtleXMucHVzaChsb3dlcktleSk7XG4gICAgICBjb25zdCBrZWVwRm9jdXNPbkN1cnJlbnQgPSBjdXJyZW50Rm9jdXMgJiYgIWNyaXRlcmlhLnJlcGVhdGluZyAmJiB0ZXh0Q3JpdGVyaWFNYXRjaGVzKGN1cnJlbnRGb2N1cywgY3JpdGVyaWEpO1xuICAgICAgaWYgKGNyaXRlcmlhLnByZXZpb3VzS2V5TWF0Y2hlZCAmJiAoa2VlcEZvY3VzT25DdXJyZW50IHx8IG1vdmVGb2N1cyhsaXN0LCBjdXJyZW50Rm9jdXMsIGZhbHNlLCBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlLCBuZXh0SXRlbSwgY3JpdGVyaWEpKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3JpdGVyaWEucHJldmlvdXNLZXlNYXRjaGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvbktleURvd24pIHtcbiAgICAgIG9uS2V5RG93bihldmVudCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKGxpc3RSZWYsIHJlZik7XG5cbiAgLyoqXG4gICAqIHRoZSBpbmRleCBvZiB0aGUgaXRlbSBzaG91bGQgcmVjZWl2ZSBmb2N1c1xuICAgKiBpbiBhIGB2YXJpYW50PVwic2VsZWN0ZWRNZW51XCJgIGl0J3MgdGhlIGZpcnN0IGBzZWxlY3RlZGAgaXRlbVxuICAgKiBvdGhlcndpc2UgaXQncyB0aGUgdmVyeSBmaXJzdCBpdGVtLlxuICAgKi9cbiAgbGV0IGFjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAvLyBzaW5jZSB3ZSBpbmplY3QgZm9jdXMgcmVsYXRlZCBwcm9wcyBpbnRvIGNoaWxkcmVuIHdlIGhhdmUgdG8gZG8gYSBsb29rYWhlYWRcbiAgLy8gdG8gY2hlY2sgaWYgdGhlcmUgaXMgYSBgc2VsZWN0ZWRgIGl0ZW0uIFdlJ3JlIGxvb2tpbmcgZm9yIHRoZSBsYXN0IGBzZWxlY3RlZGBcbiAgLy8gaXRlbSBhbmQgdXNlIHRoZSBmaXJzdCB2YWxpZCBpdGVtIGFzIGEgZmFsbGJhY2tcbiAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgIGlmICghIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgIGlmIChhY3RpdmVJdGVtSW5kZXggPT09IGluZGV4KSB7XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCArPSAxO1xuICAgICAgICBpZiAoYWN0aXZlSXRlbUluZGV4ID49IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgIC8vIHRoZXJlIGFyZSBubyBmb2N1c2FibGUgaXRlbXMgd2l0aGluIHRoZSBsaXN0LlxuICAgICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoaXNGcmFnbWVudChjaGlsZCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbXCJNVUk6IFRoZSBNZW51IGNvbXBvbmVudCBkb2Vzbid0IGFjY2VwdCBhIEZyYWdtZW50IGFzIGEgY2hpbGQuXCIsICdDb25zaWRlciBwcm92aWRpbmcgYW4gYXJyYXkgaW5zdGVhZC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghY2hpbGQucHJvcHMuZGlzYWJsZWQpIHtcbiAgICAgIGlmICh2YXJpYW50ID09PSAnc2VsZWN0ZWRNZW51JyAmJiBjaGlsZC5wcm9wcy5zZWxlY3RlZCkge1xuICAgICAgICBhY3RpdmVJdGVtSW5kZXggPSBpbmRleDtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aXZlSXRlbUluZGV4ID09PSAtMSkge1xuICAgICAgICBhY3RpdmVJdGVtSW5kZXggPSBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFjdGl2ZUl0ZW1JbmRleCA9PT0gaW5kZXggJiYgKGNoaWxkLnByb3BzLmRpc2FibGVkIHx8IGNoaWxkLnByb3BzLm11aVNraXBMaXN0SGlnaGxpZ2h0IHx8IGNoaWxkLnR5cGUubXVpU2tpcExpc3RIaWdobGlnaHQpKSB7XG4gICAgICBhY3RpdmVJdGVtSW5kZXggKz0gMTtcbiAgICAgIGlmIChhY3RpdmVJdGVtSW5kZXggPj0gY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIC8vIHRoZXJlIGFyZSBubyBmb2N1c2FibGUgaXRlbXMgd2l0aGluIHRoZSBsaXN0LlxuICAgICAgICBhY3RpdmVJdGVtSW5kZXggPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBjb25zdCBpdGVtcyA9IFJlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCA9PT0gYWN0aXZlSXRlbUluZGV4KSB7XG4gICAgICBjb25zdCBuZXdDaGlsZFByb3BzID0ge307XG4gICAgICBpZiAoYXV0b0ZvY3VzSXRlbSkge1xuICAgICAgICBuZXdDaGlsZFByb3BzLmF1dG9Gb2N1cyA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoY2hpbGQucHJvcHMudGFiSW5kZXggPT09IHVuZGVmaW5lZCAmJiB2YXJpYW50ID09PSAnc2VsZWN0ZWRNZW51Jykge1xuICAgICAgICBuZXdDaGlsZFByb3BzLnRhYkluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkLCBuZXdDaGlsZFByb3BzKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KExpc3QsIF9leHRlbmRzKHtcbiAgICByb2xlOiBcIm1lbnVcIixcbiAgICByZWY6IGhhbmRsZVJlZixcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICBvbktleURvd246IGhhbmRsZUtleURvd24sXG4gICAgdGFiSW5kZXg6IGF1dG9Gb2N1cyA/IDAgOiAtMVxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBpdGVtc1xuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE1lbnVMaXN0LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgd2lsbCBmb2N1cyB0aGUgYFtyb2xlPVwibWVudVwiXWAgY29udGFpbmVyIGFuZCBtb3ZlIGludG8gdGFiIG9yZGVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgd2lsbCBmb2N1cyB0aGUgZmlyc3QgbWVudWl0ZW0gaWYgYHZhcmlhbnQ9XCJtZW51XCJgIG9yIHNlbGVjdGVkIGl0ZW1cbiAgICogaWYgYHZhcmlhbnQ9XCJzZWxlY3RlZE1lbnVcImAuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhdXRvRm9jdXNJdGVtOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE1lbnVMaXN0IGNvbnRlbnRzLCBub3JtYWxseSBgTWVudUl0ZW1gcy5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgd2lsbCBhbGxvdyBmb2N1cyBvbiBkaXNhYmxlZCBpdGVtcy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkSXRlbXNGb2N1c2FibGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbWVudSBpdGVtcyB3aWxsIG5vdCB3cmFwIGZvY3VzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUxpc3RXcmFwOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuIFVzZSBgbWVudWAgdG8gcHJldmVudCBzZWxlY3RlZCBpdGVtcyBmcm9tIGltcGFjdGluZyB0aGUgaW5pdGlhbCBmb2N1c1xuICAgKiBhbmQgdGhlIHZlcnRpY2FsIGFsaWdubWVudCByZWxhdGl2ZSB0byB0aGUgYW5jaG9yIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0ICdzZWxlY3RlZE1lbnUnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydtZW51JywgJ3NlbGVjdGVkTWVudSddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IE1lbnVMaXN0OyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RhbFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTW9kYWwnLCBzbG90KTtcbn1cbmNvbnN0IG1vZGFsQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aU1vZGFsJywgWydyb290JywgJ2hpZGRlbicsICdiYWNrZHJvcCddKTtcbmV4cG9ydCBkZWZhdWx0IG1vZGFsQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJCYWNrZHJvcENvbXBvbmVudFwiLCBcIkJhY2tkcm9wUHJvcHNcIiwgXCJjbGFzc2VzXCIsIFwiY2xhc3NOYW1lXCIsIFwiY2xvc2VBZnRlclRyYW5zaXRpb25cIiwgXCJjaGlsZHJlblwiLCBcImNvbnRhaW5lclwiLCBcImNvbXBvbmVudFwiLCBcImNvbXBvbmVudHNcIiwgXCJjb21wb25lbnRzUHJvcHNcIiwgXCJkaXNhYmxlQXV0b0ZvY3VzXCIsIFwiZGlzYWJsZUVuZm9yY2VGb2N1c1wiLCBcImRpc2FibGVFc2NhcGVLZXlEb3duXCIsIFwiZGlzYWJsZVBvcnRhbFwiLCBcImRpc2FibGVSZXN0b3JlRm9jdXNcIiwgXCJkaXNhYmxlU2Nyb2xsTG9ja1wiLCBcImhpZGVCYWNrZHJvcFwiLCBcImtlZXBNb3VudGVkXCIsIFwib25CYWNrZHJvcENsaWNrXCIsIFwib25DbG9zZVwiLCBcIm9uVHJhbnNpdGlvbkVudGVyXCIsIFwib25UcmFuc2l0aW9uRXhpdGVkXCIsIFwib3BlblwiLCBcInNsb3RQcm9wc1wiLCBcInNsb3RzXCIsIFwidGhlbWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBlbGVtZW50QWNjZXB0aW5nUmVmLCBIVE1MRWxlbWVudFR5cGUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IHVzZVNsb3RQcm9wcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgeyB1bnN0YWJsZV91c2VNb2RhbCBhcyB1c2VNb2RhbCB9IGZyb20gJ0BtdWkvYmFzZS91bnN0YWJsZV91c2VNb2RhbCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgRm9jdXNUcmFwIGZyb20gJy4uL1Vuc3RhYmxlX1RyYXBGb2N1cyc7XG5pbXBvcnQgUG9ydGFsIGZyb20gJy4uL1BvcnRhbCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IEJhY2tkcm9wIGZyb20gJy4uL0JhY2tkcm9wJztcbmltcG9ydCB7IGdldE1vZGFsVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9tb2RhbENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBvcGVuLFxuICAgIGV4aXRlZCxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCAhb3BlbiAmJiBleGl0ZWQgJiYgJ2hpZGRlbiddLFxuICAgIGJhY2tkcm9wOiBbJ2JhY2tkcm9wJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRNb2RhbFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgTW9kYWxSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlNb2RhbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCAhb3duZXJTdGF0ZS5vcGVuICYmIG93bmVyU3RhdGUuZXhpdGVkICYmIHN0eWxlcy5oaWRkZW5dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgekluZGV4OiAodGhlbWUudmFycyB8fCB0aGVtZSkuekluZGV4Lm1vZGFsLFxuICByaWdodDogMCxcbiAgYm90dG9tOiAwLFxuICB0b3A6IDAsXG4gIGxlZnQ6IDBcbn0sICFvd25lclN0YXRlLm9wZW4gJiYgb3duZXJTdGF0ZS5leGl0ZWQgJiYge1xuICB2aXNpYmlsaXR5OiAnaGlkZGVuJ1xufSkpO1xuY29uc3QgTW9kYWxCYWNrZHJvcCA9IHN0eWxlZChCYWNrZHJvcCwge1xuICBuYW1lOiAnTXVpTW9kYWwnLFxuICBzbG90OiAnQmFja2Ryb3AnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICByZXR1cm4gc3R5bGVzLmJhY2tkcm9wO1xuICB9XG59KSh7XG4gIHpJbmRleDogLTFcbn0pO1xuXG4vKipcbiAqIE1vZGFsIGlzIGEgbG93ZXItbGV2ZWwgY29uc3RydWN0IHRoYXQgaXMgbGV2ZXJhZ2VkIGJ5IHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czpcbiAqXG4gKiAtIFtEaWFsb2ddKC9tYXRlcmlhbC11aS9hcGkvZGlhbG9nLylcbiAqIC0gW0RyYXdlcl0oL21hdGVyaWFsLXVpL2FwaS9kcmF3ZXIvKVxuICogLSBbTWVudV0oL21hdGVyaWFsLXVpL2FwaS9tZW51LylcbiAqIC0gW1BvcG92ZXJdKC9tYXRlcmlhbC11aS9hcGkvcG9wb3Zlci8pXG4gKlxuICogSWYgeW91IGFyZSBjcmVhdGluZyBhIG1vZGFsIGRpYWxvZywgeW91IHByb2JhYmx5IHdhbnQgdG8gdXNlIHRoZSBbRGlhbG9nXSgvbWF0ZXJpYWwtdWkvYXBpL2RpYWxvZy8pIGNvbXBvbmVudFxuICogcmF0aGVyIHRoYW4gZGlyZWN0bHkgdXNpbmcgTW9kYWwuXG4gKlxuICogVGhpcyBjb21wb25lbnQgc2hhcmVzIG1hbnkgY29uY2VwdHMgd2l0aCBbcmVhY3Qtb3ZlcmxheXNdKGh0dHBzOi8vcmVhY3QtYm9vdHN0cmFwLmdpdGh1Yi5pby9yZWFjdC1vdmVybGF5cy8jbW9kYWxzKS5cbiAqL1xuY29uc3QgTW9kYWwgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBNb2RhbChpblByb3BzLCByZWYpIHtcbiAgdmFyIF9yZWYsIF9zbG90cyRyb290LCBfcmVmMiwgX3Nsb3RzJGJhY2tkcm9wLCBfc2xvdFByb3BzJHJvb3QsIF9zbG90UHJvcHMkYmFja2Ryb3A7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgbmFtZTogJ011aU1vZGFsJyxcbiAgICBwcm9wczogaW5Qcm9wc1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgQmFja2Ryb3BDb21wb25lbnQgPSBNb2RhbEJhY2tkcm9wLFxuICAgICAgQmFja2Ryb3BQcm9wcyxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uID0gZmFsc2UsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGNvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICAgIGNvbXBvbmVudHNQcm9wcyA9IHt9LFxuICAgICAgZGlzYWJsZUF1dG9Gb2N1cyA9IGZhbHNlLFxuICAgICAgZGlzYWJsZUVuZm9yY2VGb2N1cyA9IGZhbHNlLFxuICAgICAgZGlzYWJsZUVzY2FwZUtleURvd24gPSBmYWxzZSxcbiAgICAgIGRpc2FibGVQb3J0YWwgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVSZXN0b3JlRm9jdXMgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVTY3JvbGxMb2NrID0gZmFsc2UsXG4gICAgICBoaWRlQmFja2Ryb3AgPSBmYWxzZSxcbiAgICAgIGtlZXBNb3VudGVkID0gZmFsc2UsXG4gICAgICBvbkJhY2tkcm9wQ2xpY2ssXG4gICAgICBvcGVuLFxuICAgICAgc2xvdFByb3BzLFxuICAgICAgc2xvdHNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcm9wLXR5cGVzXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHByb3BzV2l0aERlZmF1bHRzID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY2xvc2VBZnRlclRyYW5zaXRpb24sXG4gICAgZGlzYWJsZUF1dG9Gb2N1cyxcbiAgICBkaXNhYmxlRW5mb3JjZUZvY3VzLFxuICAgIGRpc2FibGVFc2NhcGVLZXlEb3duLFxuICAgIGRpc2FibGVQb3J0YWwsXG4gICAgZGlzYWJsZVJlc3RvcmVGb2N1cyxcbiAgICBkaXNhYmxlU2Nyb2xsTG9jayxcbiAgICBoaWRlQmFja2Ryb3AsXG4gICAga2VlcE1vdW50ZWRcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICBnZXRSb290UHJvcHMsXG4gICAgZ2V0QmFja2Ryb3BQcm9wcyxcbiAgICBnZXRUcmFuc2l0aW9uUHJvcHMsXG4gICAgcG9ydGFsUmVmLFxuICAgIGlzVG9wTW9kYWwsXG4gICAgZXhpdGVkLFxuICAgIGhhc1RyYW5zaXRpb25cbiAgfSA9IHVzZU1vZGFsKF9leHRlbmRzKHt9LCBwcm9wc1dpdGhEZWZhdWx0cywge1xuICAgIHJvb3RSZWY6IHJlZlxuICB9KSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHNXaXRoRGVmYXVsdHMsIHtcbiAgICBleGl0ZWRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgY2hpbGRQcm9wcyA9IHt9O1xuICBpZiAoY2hpbGRyZW4ucHJvcHMudGFiSW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgIGNoaWxkUHJvcHMudGFiSW5kZXggPSAnLTEnO1xuICB9XG5cbiAgLy8gSXQncyBhIFRyYW5zaXRpb24gbGlrZSBjb21wb25lbnRcbiAgaWYgKGhhc1RyYW5zaXRpb24pIHtcbiAgICBjb25zdCB7XG4gICAgICBvbkVudGVyLFxuICAgICAgb25FeGl0ZWRcbiAgICB9ID0gZ2V0VHJhbnNpdGlvblByb3BzKCk7XG4gICAgY2hpbGRQcm9wcy5vbkVudGVyID0gb25FbnRlcjtcbiAgICBjaGlsZFByb3BzLm9uRXhpdGVkID0gb25FeGl0ZWQ7XG4gIH1cbiAgY29uc3QgUm9vdFNsb3QgPSAoX3JlZiA9IChfc2xvdHMkcm9vdCA9IHNsb3RzID09IG51bGwgPyB2b2lkIDAgOiBzbG90cy5yb290KSAhPSBudWxsID8gX3Nsb3RzJHJvb3QgOiBjb21wb25lbnRzLlJvb3QpICE9IG51bGwgPyBfcmVmIDogTW9kYWxSb290O1xuICBjb25zdCBCYWNrZHJvcFNsb3QgPSAoX3JlZjIgPSAoX3Nsb3RzJGJhY2tkcm9wID0gc2xvdHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RzLmJhY2tkcm9wKSAhPSBudWxsID8gX3Nsb3RzJGJhY2tkcm9wIDogY29tcG9uZW50cy5CYWNrZHJvcCkgIT0gbnVsbCA/IF9yZWYyIDogQmFja2Ryb3BDb21wb25lbnQ7XG4gIGNvbnN0IHJvb3RTbG90UHJvcHMgPSAoX3Nsb3RQcm9wcyRyb290ID0gc2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBzbG90UHJvcHMucm9vdCkgIT0gbnVsbCA/IF9zbG90UHJvcHMkcm9vdCA6IGNvbXBvbmVudHNQcm9wcy5yb290O1xuICBjb25zdCBiYWNrZHJvcFNsb3RQcm9wcyA9IChfc2xvdFByb3BzJGJhY2tkcm9wID0gc2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBzbG90UHJvcHMuYmFja2Ryb3ApICE9IG51bGwgPyBfc2xvdFByb3BzJGJhY2tkcm9wIDogY29tcG9uZW50c1Byb3BzLmJhY2tkcm9wO1xuICBjb25zdCByb290UHJvcHMgPSB1c2VTbG90UHJvcHMoe1xuICAgIGVsZW1lbnRUeXBlOiBSb290U2xvdCxcbiAgICBleHRlcm5hbFNsb3RQcm9wczogcm9vdFNsb3RQcm9wcyxcbiAgICBleHRlcm5hbEZvcndhcmRlZFByb3BzOiBvdGhlcixcbiAgICBnZXRTbG90UHJvcHM6IGdldFJvb3RQcm9wcyxcbiAgICBhZGRpdGlvbmFsUHJvcHM6IHtcbiAgICAgIHJlZixcbiAgICAgIGFzOiBjb21wb25lbnRcbiAgICB9LFxuICAgIG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzTmFtZSwgcm9vdFNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogcm9vdFNsb3RQcm9wcy5jbGFzc05hbWUsIGNsYXNzZXMgPT0gbnVsbCA/IHZvaWQgMCA6IGNsYXNzZXMucm9vdCwgIW93bmVyU3RhdGUub3BlbiAmJiBvd25lclN0YXRlLmV4aXRlZCAmJiAoY2xhc3NlcyA9PSBudWxsID8gdm9pZCAwIDogY2xhc3Nlcy5oaWRkZW4pKVxuICB9KTtcbiAgY29uc3QgYmFja2Ryb3BQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgZWxlbWVudFR5cGU6IEJhY2tkcm9wU2xvdCxcbiAgICBleHRlcm5hbFNsb3RQcm9wczogYmFja2Ryb3BTbG90UHJvcHMsXG4gICAgYWRkaXRpb25hbFByb3BzOiBCYWNrZHJvcFByb3BzLFxuICAgIGdldFNsb3RQcm9wczogb3RoZXJIYW5kbGVycyA9PiB7XG4gICAgICByZXR1cm4gZ2V0QmFja2Ryb3BQcm9wcyhfZXh0ZW5kcyh7fSwgb3RoZXJIYW5kbGVycywge1xuICAgICAgICBvbkNsaWNrOiBlID0+IHtcbiAgICAgICAgICBpZiAob25CYWNrZHJvcENsaWNrKSB7XG4gICAgICAgICAgICBvbkJhY2tkcm9wQ2xpY2soZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvdGhlckhhbmRsZXJzICE9IG51bGwgJiYgb3RoZXJIYW5kbGVycy5vbkNsaWNrKSB7XG4gICAgICAgICAgICBvdGhlckhhbmRsZXJzLm9uQ2xpY2soZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSxcbiAgICBjbGFzc05hbWU6IGNsc3goYmFja2Ryb3BTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGJhY2tkcm9wU2xvdFByb3BzLmNsYXNzTmFtZSwgQmFja2Ryb3BQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogQmFja2Ryb3BQcm9wcy5jbGFzc05hbWUsIGNsYXNzZXMgPT0gbnVsbCA/IHZvaWQgMCA6IGNsYXNzZXMuYmFja2Ryb3ApLFxuICAgIG93bmVyU3RhdGVcbiAgfSk7XG4gIGlmICgha2VlcE1vdW50ZWQgJiYgIW9wZW4gJiYgKCFoYXNUcmFuc2l0aW9uIHx8IGV4aXRlZCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUG9ydGFsLCB7XG4gICAgcmVmOiBwb3J0YWxSZWYsXG4gICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgZGlzYWJsZVBvcnRhbDogZGlzYWJsZVBvcnRhbCxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3hzKFJvb3RTbG90LCBfZXh0ZW5kcyh7fSwgcm9vdFByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogWyFoaWRlQmFja2Ryb3AgJiYgQmFja2Ryb3BDb21wb25lbnQgPyAvKiNfX1BVUkVfXyovX2pzeChCYWNrZHJvcFNsb3QsIF9leHRlbmRzKHt9LCBiYWNrZHJvcFByb3BzKSkgOiBudWxsLCAvKiNfX1BVUkVfXyovX2pzeChGb2N1c1RyYXAsIHtcbiAgICAgICAgZGlzYWJsZUVuZm9yY2VGb2N1czogZGlzYWJsZUVuZm9yY2VGb2N1cyxcbiAgICAgICAgZGlzYWJsZUF1dG9Gb2N1czogZGlzYWJsZUF1dG9Gb2N1cyxcbiAgICAgICAgZGlzYWJsZVJlc3RvcmVGb2N1czogZGlzYWJsZVJlc3RvcmVGb2N1cyxcbiAgICAgICAgaXNFbmFibGVkOiBpc1RvcE1vZGFsLFxuICAgICAgICBvcGVuOiBvcGVuLFxuICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwgY2hpbGRQcm9wcylcbiAgICAgIH0pXVxuICAgIH0pKVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTW9kYWwucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogQSBiYWNrZHJvcCBjb21wb25lbnQuIFRoaXMgcHJvcCBlbmFibGVzIGN1c3RvbSBiYWNrZHJvcCByZW5kZXJpbmcuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgc2xvdHMuYmFja2Ryb3BgIGluc3RlYWQuIFdoaWxlIHRoaXMgcHJvcCBjdXJyZW50bHkgd29ya3MsIGl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uLlxuICAgKiBVc2UgdGhlIGBzbG90cy5iYWNrZHJvcGAgcHJvcCB0byBtYWtlIHlvdXIgYXBwbGljYXRpb24gcmVhZHkgZm9yIHRoZSBuZXh0IHZlcnNpb24gb2YgTWF0ZXJpYWwgVUkuXG4gICAqIEBkZWZhdWx0IHN0eWxlZChCYWNrZHJvcCwge1xuICAgKiAgIG5hbWU6ICdNdWlNb2RhbCcsXG4gICAqICAgc2xvdDogJ0JhY2tkcm9wJyxcbiAgICogICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICogICAgIHJldHVybiBzdHlsZXMuYmFja2Ryb3A7XG4gICAqICAgfSxcbiAgICogfSkoe1xuICAgKiAgIHpJbmRleDogLTEsXG4gICAqIH0pXG4gICAqL1xuICBCYWNrZHJvcENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BCYWNrZHJvcGBdKC9tYXRlcmlhbC11aS9hcGkvYmFja2Ryb3AvKSBlbGVtZW50LlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHNsb3RQcm9wcy5iYWNrZHJvcGAgaW5zdGVhZC5cbiAgICovXG4gIEJhY2tkcm9wUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBBIHNpbmdsZSBjaGlsZCBjb250ZW50IGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogZWxlbWVudEFjY2VwdGluZ1JlZi5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFdoZW4gc2V0IHRvIHRydWUgdGhlIE1vZGFsIHdhaXRzIHVudGlsIGEgbmVzdGVkIFRyYW5zaXRpb24gaXMgY29tcGxldGVkIGJlZm9yZSBjbG9zaW5nLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY2xvc2VBZnRlclRyYW5zaXRpb246IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdHNgIHByb3AgaW5zdGVhZC5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgQmFja2Ryb3A6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RQcm9wc2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90UHJvcHNgIHByb3AgaW5zdGVhZCwgYXMgYGNvbXBvbmVudHNQcm9wc2Agd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYmFja2Ryb3A6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcbiAgLyoqXG4gICAqIEFuIEhUTUwgZWxlbWVudCBvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgb25lLlxuICAgKiBUaGUgYGNvbnRhaW5lcmAgd2lsbCBoYXZlIHRoZSBwb3J0YWwgY2hpbGRyZW4gYXBwZW5kZWQgdG8gaXQuXG4gICAqXG4gICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgY2FsbGJhY2ssIHdoaWNoIGlzIGNhbGxlZCBpbiBhIFJlYWN0IGxheW91dCBlZmZlY3QuXG4gICAqIFRoaXMgbGV0cyB5b3Ugc2V0IHRoZSBjb250YWluZXIgZnJvbSBhIHJlZiwgYW5kIGFsc28gbWFrZXMgc2VydmVyLXNpZGUgcmVuZGVyaW5nIHBvc3NpYmxlLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBpdCB1c2VzIHRoZSBib2R5IG9mIHRoZSB0b3AtbGV2ZWwgZG9jdW1lbnQgb2JqZWN0LFxuICAgKiBzbyBpdCdzIHNpbXBseSBgZG9jdW1lbnQuYm9keWAgbW9zdCBvZiB0aGUgdGltZS5cbiAgICovXG4gIGNvbnRhaW5lcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtIVE1MRWxlbWVudFR5cGUsIFByb3BUeXBlcy5mdW5jXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBtb2RhbCB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IHNoaWZ0IGZvY3VzIHRvIGl0c2VsZiB3aGVuIGl0IG9wZW5zLCBhbmRcbiAgICogcmVwbGFjZSBpdCB0byB0aGUgbGFzdCBmb2N1c2VkIGVsZW1lbnQgd2hlbiBpdCBjbG9zZXMuXG4gICAqIFRoaXMgYWxzbyB3b3JrcyBjb3JyZWN0bHkgd2l0aCBhbnkgbW9kYWwgY2hpbGRyZW4gdGhhdCBoYXZlIHRoZSBgZGlzYWJsZUF1dG9Gb2N1c2AgcHJvcC5cbiAgICpcbiAgICogR2VuZXJhbGx5IHRoaXMgc2hvdWxkIG5ldmVyIGJlIHNldCB0byBgdHJ1ZWAgYXMgaXQgbWFrZXMgdGhlIG1vZGFsIGxlc3NcbiAgICogYWNjZXNzaWJsZSB0byBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCBsaWtlIHNjcmVlbiByZWFkZXJzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBtb2RhbCB3aWxsIG5vdCBwcmV2ZW50IGZvY3VzIGZyb20gbGVhdmluZyB0aGUgbW9kYWwgd2hpbGUgb3Blbi5cbiAgICpcbiAgICogR2VuZXJhbGx5IHRoaXMgc2hvdWxkIG5ldmVyIGJlIHNldCB0byBgdHJ1ZWAgYXMgaXQgbWFrZXMgdGhlIG1vZGFsIGxlc3NcbiAgICogYWNjZXNzaWJsZSB0byBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCBsaWtlIHNjcmVlbiByZWFkZXJzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUVuZm9yY2VGb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGhpdHRpbmcgZXNjYXBlIHdpbGwgbm90IGZpcmUgdGhlIGBvbkNsb3NlYCBjYWxsYmFjay5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVFc2NhcGVLZXlEb3duOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBgY2hpbGRyZW5gIHdpbGwgYmUgdW5kZXIgdGhlIERPTSBoaWVyYXJjaHkgb2YgdGhlIHBhcmVudCBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUG9ydGFsOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG1vZGFsIHdpbGwgbm90IHJlc3RvcmUgZm9jdXMgdG8gcHJldmlvdXNseSBmb2N1c2VkIGVsZW1lbnQgb25jZVxuICAgKiBtb2RhbCBpcyBoaWRkZW4gb3IgdW5tb3VudGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVJlc3RvcmVGb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBEaXNhYmxlIHRoZSBzY3JvbGwgbG9jayBiZWhhdmlvci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVTY3JvbGxMb2NrOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGJhY2tkcm9wIGlzIG5vdCByZW5kZXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGhpZGVCYWNrZHJvcDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBBbHdheXMga2VlcCB0aGUgY2hpbGRyZW4gaW4gdGhlIERPTS5cbiAgICogVGhpcyBwcm9wIGNhbiBiZSB1c2VmdWwgaW4gU0VPIHNpdHVhdGlvbiBvclxuICAgKiB3aGVuIHlvdSB3YW50IHRvIG1heGltaXplIHRoZSByZXNwb25zaXZlbmVzcyBvZiB0aGUgTW9kYWwuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBrZWVwTW91bnRlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBiYWNrZHJvcCBpcyBjbGlja2VkLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGBvbkNsb3NlYCBwcm9wIHdpdGggdGhlIGByZWFzb25gIGFyZ3VtZW50IHRvIGhhbmRsZSB0aGUgYGJhY2tkcm9wQ2xpY2tgIGV2ZW50cy5cbiAgICovXG4gIG9uQmFja2Ryb3BDbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgY2xvc2VkLlxuICAgKiBUaGUgYHJlYXNvbmAgcGFyYW1ldGVyIGNhbiBvcHRpb25hbGx5IGJlIHVzZWQgdG8gY29udHJvbCB0aGUgcmVzcG9uc2UgdG8gYG9uQ2xvc2VgLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24gQ2FuIGJlOiBgXCJlc2NhcGVLZXlEb3duXCJgLCBgXCJiYWNrZHJvcENsaWNrXCJgLlxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIGEgdHJhbnNpdGlvbiBlbnRlcnMuXG4gICAqL1xuICBvblRyYW5zaXRpb25FbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIGEgdHJhbnNpdGlvbiBoYXMgZXhpdGVkLlxuICAgKi9cbiAgb25UcmFuc2l0aW9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBzaG93bi5cbiAgICovXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBUaGUgcHJvcHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgTW9kYWwuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYmFja2Ryb3A6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIE1vZGFsLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYmFja2Ryb3A6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBNb2RhbDsiLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9wb3ZlclV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpUG9wb3ZlcicsIHNsb3QpO1xufVxuY29uc3QgcG9wb3ZlckNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlQb3BvdmVyJywgWydyb290JywgJ3BhcGVyJ10pO1xuZXhwb3J0IGRlZmF1bHQgcG9wb3ZlckNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wib25FbnRlcmluZ1wiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcImFjdGlvblwiLCBcImFuY2hvckVsXCIsIFwiYW5jaG9yT3JpZ2luXCIsIFwiYW5jaG9yUG9zaXRpb25cIiwgXCJhbmNob3JSZWZlcmVuY2VcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbnRhaW5lclwiLCBcImVsZXZhdGlvblwiLCBcIm1hcmdpblRocmVzaG9sZFwiLCBcIm9wZW5cIiwgXCJQYXBlclByb3BzXCIsIFwic2xvdHNcIiwgXCJzbG90UHJvcHNcIiwgXCJ0cmFuc2Zvcm1PcmlnaW5cIiwgXCJUcmFuc2l0aW9uQ29tcG9uZW50XCIsIFwidHJhbnNpdGlvbkR1cmF0aW9uXCIsIFwiVHJhbnNpdGlvblByb3BzXCIsIFwiZGlzYWJsZVNjcm9sbExvY2tcIl0sXG4gIF9leGNsdWRlZDMgPSBbXCJzbG90UHJvcHNcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcywgdXNlU2xvdFByb3BzLCBpc0hvc3RDb21wb25lbnQgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHsgY2hhaW5Qcm9wVHlwZXMsIGludGVnZXJQcm9wVHlwZSwgZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYsIHJlZlR5cGUsIEhUTUxFbGVtZW50VHlwZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBkZWJvdW5jZSBmcm9tICcuLi91dGlscy9kZWJvdW5jZSc7XG5pbXBvcnQgb3duZXJEb2N1bWVudCBmcm9tICcuLi91dGlscy9vd25lckRvY3VtZW50JztcbmltcG9ydCBvd25lcldpbmRvdyBmcm9tICcuLi91dGlscy9vd25lcldpbmRvdyc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCBHcm93IGZyb20gJy4uL0dyb3cnO1xuaW1wb3J0IE1vZGFsIGZyb20gJy4uL01vZGFsJztcbmltcG9ydCBQYXBlckJhc2UgZnJvbSAnLi4vUGFwZXInO1xuaW1wb3J0IHsgZ2V0UG9wb3ZlclV0aWxpdHlDbGFzcyB9IGZyb20gJy4vcG9wb3ZlckNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBmdW5jdGlvbiBnZXRPZmZzZXRUb3AocmVjdCwgdmVydGljYWwpIHtcbiAgbGV0IG9mZnNldCA9IDA7XG4gIGlmICh0eXBlb2YgdmVydGljYWwgPT09ICdudW1iZXInKSB7XG4gICAgb2Zmc2V0ID0gdmVydGljYWw7XG4gIH0gZWxzZSBpZiAodmVydGljYWwgPT09ICdjZW50ZXInKSB7XG4gICAgb2Zmc2V0ID0gcmVjdC5oZWlnaHQgLyAyO1xuICB9IGVsc2UgaWYgKHZlcnRpY2FsID09PSAnYm90dG9tJykge1xuICAgIG9mZnNldCA9IHJlY3QuaGVpZ2h0O1xuICB9XG4gIHJldHVybiBvZmZzZXQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0T2Zmc2V0TGVmdChyZWN0LCBob3Jpem9udGFsKSB7XG4gIGxldCBvZmZzZXQgPSAwO1xuICBpZiAodHlwZW9mIGhvcml6b250YWwgPT09ICdudW1iZXInKSB7XG4gICAgb2Zmc2V0ID0gaG9yaXpvbnRhbDtcbiAgfSBlbHNlIGlmIChob3Jpem9udGFsID09PSAnY2VudGVyJykge1xuICAgIG9mZnNldCA9IHJlY3Qud2lkdGggLyAyO1xuICB9IGVsc2UgaWYgKGhvcml6b250YWwgPT09ICdyaWdodCcpIHtcbiAgICBvZmZzZXQgPSByZWN0LndpZHRoO1xuICB9XG4gIHJldHVybiBvZmZzZXQ7XG59XG5mdW5jdGlvbiBnZXRUcmFuc2Zvcm1PcmlnaW5WYWx1ZSh0cmFuc2Zvcm1PcmlnaW4pIHtcbiAgcmV0dXJuIFt0cmFuc2Zvcm1PcmlnaW4uaG9yaXpvbnRhbCwgdHJhbnNmb3JtT3JpZ2luLnZlcnRpY2FsXS5tYXAobiA9PiB0eXBlb2YgbiA9PT0gJ251bWJlcicgPyBgJHtufXB4YCA6IG4pLmpvaW4oJyAnKTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVBbmNob3JFbChhbmNob3JFbCkge1xuICByZXR1cm4gdHlwZW9mIGFuY2hvckVsID09PSAnZnVuY3Rpb24nID8gYW5jaG9yRWwoKSA6IGFuY2hvckVsO1xufVxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCddLFxuICAgIHBhcGVyOiBbJ3BhcGVyJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRQb3BvdmVyVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5leHBvcnQgY29uc3QgUG9wb3ZlclJvb3QgPSBzdHlsZWQoTW9kYWwsIHtcbiAgbmFtZTogJ011aVBvcG92ZXInLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnJvb3Rcbn0pKHt9KTtcbmV4cG9ydCBjb25zdCBQb3BvdmVyUGFwZXIgPSBzdHlsZWQoUGFwZXJCYXNlLCB7XG4gIG5hbWU6ICdNdWlQb3BvdmVyJyxcbiAgc2xvdDogJ1BhcGVyJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucGFwZXJcbn0pKHtcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIG92ZXJmbG93WTogJ2F1dG8nLFxuICBvdmVyZmxvd1g6ICdoaWRkZW4nLFxuICAvLyBTbyB3ZSBzZWUgdGhlIHBvcG92ZXIgd2hlbiBpdCdzIGVtcHR5LlxuICAvLyBJdCdzIG1vc3QgbGlrZWx5IG9uIGlzc3VlIG9uIHVzZXJsYW5kLlxuICBtaW5XaWR0aDogMTYsXG4gIG1pbkhlaWdodDogMTYsXG4gIG1heFdpZHRoOiAnY2FsYygxMDAlIC0gMzJweCknLFxuICBtYXhIZWlnaHQ6ICdjYWxjKDEwMCUgLSAzMnB4KScsXG4gIC8vIFdlIGRpc2FibGUgdGhlIGZvY3VzIHJpbmcgZm9yIG1vdXNlLCB0b3VjaCBhbmQga2V5Ym9hcmQgdXNlcnMuXG4gIG91dGxpbmU6IDBcbn0pO1xuY29uc3QgUG9wb3ZlciA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFBvcG92ZXIoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfc2xvdFByb3BzJHBhcGVyLCBfc2xvdHMkcm9vdCwgX3Nsb3RzJHBhcGVyO1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlQb3BvdmVyJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgYWN0aW9uLFxuICAgICAgYW5jaG9yRWwsXG4gICAgICBhbmNob3JPcmlnaW4gPSB7XG4gICAgICAgIHZlcnRpY2FsOiAndG9wJyxcbiAgICAgICAgaG9yaXpvbnRhbDogJ2xlZnQnXG4gICAgICB9LFxuICAgICAgYW5jaG9yUG9zaXRpb24sXG4gICAgICBhbmNob3JSZWZlcmVuY2UgPSAnYW5jaG9yRWwnLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lclByb3AsXG4gICAgICBlbGV2YXRpb24gPSA4LFxuICAgICAgbWFyZ2luVGhyZXNob2xkID0gMTYsXG4gICAgICBvcGVuLFxuICAgICAgUGFwZXJQcm9wczogUGFwZXJQcm9wc1Byb3AgPSB7fSxcbiAgICAgIHNsb3RzLFxuICAgICAgc2xvdFByb3BzLFxuICAgICAgdHJhbnNmb3JtT3JpZ2luID0ge1xuICAgICAgICB2ZXJ0aWNhbDogJ3RvcCcsXG4gICAgICAgIGhvcml6b250YWw6ICdsZWZ0J1xuICAgICAgfSxcbiAgICAgIFRyYW5zaXRpb25Db21wb25lbnQgPSBHcm93LFxuICAgICAgdHJhbnNpdGlvbkR1cmF0aW9uOiB0cmFuc2l0aW9uRHVyYXRpb25Qcm9wID0gJ2F1dG8nLFxuICAgICAgVHJhbnNpdGlvblByb3BzOiB7XG4gICAgICAgIG9uRW50ZXJpbmdcbiAgICAgIH0gPSB7fSxcbiAgICAgIGRpc2FibGVTY3JvbGxMb2NrID0gZmFsc2VcbiAgICB9ID0gcHJvcHMsXG4gICAgVHJhbnNpdGlvblByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMuVHJhbnNpdGlvblByb3BzLCBfZXhjbHVkZWQpLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZDIpO1xuICBjb25zdCBleHRlcm5hbFBhcGVyU2xvdFByb3BzID0gKF9zbG90UHJvcHMkcGFwZXIgPSBzbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RQcm9wcy5wYXBlcikgIT0gbnVsbCA/IF9zbG90UHJvcHMkcGFwZXIgOiBQYXBlclByb3BzUHJvcDtcbiAgY29uc3QgcGFwZXJSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgY29uc3QgaGFuZGxlUGFwZXJSZWYgPSB1c2VGb3JrUmVmKHBhcGVyUmVmLCBleHRlcm5hbFBhcGVyU2xvdFByb3BzLnJlZik7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBhbmNob3JPcmlnaW4sXG4gICAgYW5jaG9yUmVmZXJlbmNlLFxuICAgIGVsZXZhdGlvbixcbiAgICBtYXJnaW5UaHJlc2hvbGQsXG4gICAgZXh0ZXJuYWxQYXBlclNsb3RQcm9wcyxcbiAgICB0cmFuc2Zvcm1PcmlnaW4sXG4gICAgVHJhbnNpdGlvbkNvbXBvbmVudCxcbiAgICB0cmFuc2l0aW9uRHVyYXRpb246IHRyYW5zaXRpb25EdXJhdGlvblByb3AsXG4gICAgVHJhbnNpdGlvblByb3BzXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG5cbiAgLy8gUmV0dXJucyB0aGUgdG9wL2xlZnQgb2Zmc2V0IG9mIHRoZSBwb3NpdGlvblxuICAvLyB0byBhdHRhY2ggdG8gb24gdGhlIGFuY2hvciBlbGVtZW50IChvciBib2R5IGlmIG5vbmUgaXMgcHJvdmlkZWQpXG4gIGNvbnN0IGdldEFuY2hvck9mZnNldCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoYW5jaG9yUmVmZXJlbmNlID09PSAnYW5jaG9yUG9zaXRpb24nKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoIWFuY2hvclBvc2l0aW9uKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignTVVJOiBZb3UgbmVlZCB0byBwcm92aWRlIGEgYGFuY2hvclBvc2l0aW9uYCBwcm9wIHdoZW4gdXNpbmcgJyArICc8UG9wb3ZlciBhbmNob3JSZWZlcmVuY2U9XCJhbmNob3JQb3NpdGlvblwiIC8+LicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYW5jaG9yUG9zaXRpb247XG4gICAgfVxuICAgIGNvbnN0IHJlc29sdmVkQW5jaG9yRWwgPSByZXNvbHZlQW5jaG9yRWwoYW5jaG9yRWwpO1xuXG4gICAgLy8gSWYgYW4gYW5jaG9yIGVsZW1lbnQgd2Fzbid0IHByb3ZpZGVkLCBqdXN0IHVzZSB0aGUgcGFyZW50IGJvZHkgZWxlbWVudCBvZiB0aGlzIFBvcG92ZXJcbiAgICBjb25zdCBhbmNob3JFbGVtZW50ID0gcmVzb2x2ZWRBbmNob3JFbCAmJiByZXNvbHZlZEFuY2hvckVsLm5vZGVUeXBlID09PSAxID8gcmVzb2x2ZWRBbmNob3JFbCA6IG93bmVyRG9jdW1lbnQocGFwZXJSZWYuY3VycmVudCkuYm9keTtcbiAgICBjb25zdCBhbmNob3JSZWN0ID0gYW5jaG9yRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc3QgYm94ID0gYW5jaG9yRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnICYmIGJveC50b3AgPT09IDAgJiYgYm94LmxlZnQgPT09IDAgJiYgYm94LnJpZ2h0ID09PSAwICYmIGJveC5ib3R0b20gPT09IDApIHtcbiAgICAgICAgY29uc29sZS53YXJuKFsnTVVJOiBUaGUgYGFuY2hvckVsYCBwcm9wIHByb3ZpZGVkIHRvIHRoZSBjb21wb25lbnQgaXMgaW52YWxpZC4nLCAnVGhlIGFuY2hvciBlbGVtZW50IHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBkb2N1bWVudCBsYXlvdXQuJywgXCJNYWtlIHN1cmUgdGhlIGVsZW1lbnQgaXMgcHJlc2VudCBpbiB0aGUgZG9jdW1lbnQgb3IgdGhhdCBpdCdzIG5vdCBkaXNwbGF5IG5vbmUuXCJdLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvcDogYW5jaG9yUmVjdC50b3AgKyBnZXRPZmZzZXRUb3AoYW5jaG9yUmVjdCwgYW5jaG9yT3JpZ2luLnZlcnRpY2FsKSxcbiAgICAgIGxlZnQ6IGFuY2hvclJlY3QubGVmdCArIGdldE9mZnNldExlZnQoYW5jaG9yUmVjdCwgYW5jaG9yT3JpZ2luLmhvcml6b250YWwpXG4gICAgfTtcbiAgfSwgW2FuY2hvckVsLCBhbmNob3JPcmlnaW4uaG9yaXpvbnRhbCwgYW5jaG9yT3JpZ2luLnZlcnRpY2FsLCBhbmNob3JQb3NpdGlvbiwgYW5jaG9yUmVmZXJlbmNlXSk7XG5cbiAgLy8gUmV0dXJucyB0aGUgYmFzZSB0cmFuc2Zvcm0gb3JpZ2luIHVzaW5nIHRoZSBlbGVtZW50XG4gIGNvbnN0IGdldFRyYW5zZm9ybU9yaWdpbiA9IFJlYWN0LnVzZUNhbGxiYWNrKGVsZW1SZWN0ID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdmVydGljYWw6IGdldE9mZnNldFRvcChlbGVtUmVjdCwgdHJhbnNmb3JtT3JpZ2luLnZlcnRpY2FsKSxcbiAgICAgIGhvcml6b250YWw6IGdldE9mZnNldExlZnQoZWxlbVJlY3QsIHRyYW5zZm9ybU9yaWdpbi5ob3Jpem9udGFsKVxuICAgIH07XG4gIH0sIFt0cmFuc2Zvcm1PcmlnaW4uaG9yaXpvbnRhbCwgdHJhbnNmb3JtT3JpZ2luLnZlcnRpY2FsXSk7XG4gIGNvbnN0IGdldFBvc2l0aW9uaW5nU3R5bGUgPSBSZWFjdC51c2VDYWxsYmFjayhlbGVtZW50ID0+IHtcbiAgICBjb25zdCBlbGVtUmVjdCA9IHtcbiAgICAgIHdpZHRoOiBlbGVtZW50Lm9mZnNldFdpZHRoLFxuICAgICAgaGVpZ2h0OiBlbGVtZW50Lm9mZnNldEhlaWdodFxuICAgIH07XG5cbiAgICAvLyBHZXQgdGhlIHRyYW5zZm9ybSBvcmlnaW4gcG9pbnQgb24gdGhlIGVsZW1lbnQgaXRzZWxmXG4gICAgY29uc3QgZWxlbVRyYW5zZm9ybU9yaWdpbiA9IGdldFRyYW5zZm9ybU9yaWdpbihlbGVtUmVjdCk7XG4gICAgaWYgKGFuY2hvclJlZmVyZW5jZSA9PT0gJ25vbmUnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b3A6IG51bGwsXG4gICAgICAgIGxlZnQ6IG51bGwsXG4gICAgICAgIHRyYW5zZm9ybU9yaWdpbjogZ2V0VHJhbnNmb3JtT3JpZ2luVmFsdWUoZWxlbVRyYW5zZm9ybU9yaWdpbilcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSBvZmZzZXQgb2YgdGhlIGFuY2hvcmluZyBlbGVtZW50XG4gICAgY29uc3QgYW5jaG9yT2Zmc2V0ID0gZ2V0QW5jaG9yT2Zmc2V0KCk7XG5cbiAgICAvLyBDYWxjdWxhdGUgZWxlbWVudCBwb3NpdGlvbmluZ1xuICAgIGxldCB0b3AgPSBhbmNob3JPZmZzZXQudG9wIC0gZWxlbVRyYW5zZm9ybU9yaWdpbi52ZXJ0aWNhbDtcbiAgICBsZXQgbGVmdCA9IGFuY2hvck9mZnNldC5sZWZ0IC0gZWxlbVRyYW5zZm9ybU9yaWdpbi5ob3Jpem9udGFsO1xuICAgIGNvbnN0IGJvdHRvbSA9IHRvcCArIGVsZW1SZWN0LmhlaWdodDtcbiAgICBjb25zdCByaWdodCA9IGxlZnQgKyBlbGVtUmVjdC53aWR0aDtcblxuICAgIC8vIFVzZSB0aGUgcGFyZW50IHdpbmRvdyBvZiB0aGUgYW5jaG9yRWwgaWYgcHJvdmlkZWRcbiAgICBjb25zdCBjb250YWluZXJXaW5kb3cgPSBvd25lcldpbmRvdyhyZXNvbHZlQW5jaG9yRWwoYW5jaG9yRWwpKTtcblxuICAgIC8vIFdpbmRvdyB0aHJlc2hvbGRzIHRha2luZyByZXF1aXJlZCBtYXJnaW4gaW50byBhY2NvdW50XG4gICAgY29uc3QgaGVpZ2h0VGhyZXNob2xkID0gY29udGFpbmVyV2luZG93LmlubmVySGVpZ2h0IC0gbWFyZ2luVGhyZXNob2xkO1xuICAgIGNvbnN0IHdpZHRoVGhyZXNob2xkID0gY29udGFpbmVyV2luZG93LmlubmVyV2lkdGggLSBtYXJnaW5UaHJlc2hvbGQ7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdmVydGljYWwgYXhpcyBuZWVkcyBzaGlmdGluZ1xuICAgIGlmIChtYXJnaW5UaHJlc2hvbGQgIT09IG51bGwgJiYgdG9wIDwgbWFyZ2luVGhyZXNob2xkKSB7XG4gICAgICBjb25zdCBkaWZmID0gdG9wIC0gbWFyZ2luVGhyZXNob2xkO1xuICAgICAgdG9wIC09IGRpZmY7XG4gICAgICBlbGVtVHJhbnNmb3JtT3JpZ2luLnZlcnRpY2FsICs9IGRpZmY7XG4gICAgfSBlbHNlIGlmIChtYXJnaW5UaHJlc2hvbGQgIT09IG51bGwgJiYgYm90dG9tID4gaGVpZ2h0VGhyZXNob2xkKSB7XG4gICAgICBjb25zdCBkaWZmID0gYm90dG9tIC0gaGVpZ2h0VGhyZXNob2xkO1xuICAgICAgdG9wIC09IGRpZmY7XG4gICAgICBlbGVtVHJhbnNmb3JtT3JpZ2luLnZlcnRpY2FsICs9IGRpZmY7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoZWxlbVJlY3QuaGVpZ2h0ID4gaGVpZ2h0VGhyZXNob2xkICYmIGVsZW1SZWN0LmhlaWdodCAmJiBoZWlnaHRUaHJlc2hvbGQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogVGhlIHBvcG92ZXIgY29tcG9uZW50IGlzIHRvbyB0YWxsLicsIGBTb21lIHBhcnQgb2YgaXQgY2FuIG5vdCBiZSBzZWVuIG9uIHRoZSBzY3JlZW4gKCR7ZWxlbVJlY3QuaGVpZ2h0IC0gaGVpZ2h0VGhyZXNob2xkfXB4KS5gLCAnUGxlYXNlIGNvbnNpZGVyIGFkZGluZyBhIGBtYXgtaGVpZ2h0YCB0byBpbXByb3ZlIHRoZSB1c2VyLWV4cGVyaWVuY2UuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSBob3Jpem9udGFsIGF4aXMgbmVlZHMgc2hpZnRpbmdcbiAgICBpZiAobWFyZ2luVGhyZXNob2xkICE9PSBudWxsICYmIGxlZnQgPCBtYXJnaW5UaHJlc2hvbGQpIHtcbiAgICAgIGNvbnN0IGRpZmYgPSBsZWZ0IC0gbWFyZ2luVGhyZXNob2xkO1xuICAgICAgbGVmdCAtPSBkaWZmO1xuICAgICAgZWxlbVRyYW5zZm9ybU9yaWdpbi5ob3Jpem9udGFsICs9IGRpZmY7XG4gICAgfSBlbHNlIGlmIChyaWdodCA+IHdpZHRoVGhyZXNob2xkKSB7XG4gICAgICBjb25zdCBkaWZmID0gcmlnaHQgLSB3aWR0aFRocmVzaG9sZDtcbiAgICAgIGxlZnQgLT0gZGlmZjtcbiAgICAgIGVsZW1UcmFuc2Zvcm1PcmlnaW4uaG9yaXpvbnRhbCArPSBkaWZmO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdG9wOiBgJHtNYXRoLnJvdW5kKHRvcCl9cHhgLFxuICAgICAgbGVmdDogYCR7TWF0aC5yb3VuZChsZWZ0KX1weGAsXG4gICAgICB0cmFuc2Zvcm1PcmlnaW46IGdldFRyYW5zZm9ybU9yaWdpblZhbHVlKGVsZW1UcmFuc2Zvcm1PcmlnaW4pXG4gICAgfTtcbiAgfSwgW2FuY2hvckVsLCBhbmNob3JSZWZlcmVuY2UsIGdldEFuY2hvck9mZnNldCwgZ2V0VHJhbnNmb3JtT3JpZ2luLCBtYXJnaW5UaHJlc2hvbGRdKTtcbiAgY29uc3QgW2lzUG9zaXRpb25lZCwgc2V0SXNQb3NpdGlvbmVkXSA9IFJlYWN0LnVzZVN0YXRlKG9wZW4pO1xuICBjb25zdCBzZXRQb3NpdGlvbmluZ1N0eWxlcyA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBlbGVtZW50ID0gcGFwZXJSZWYuY3VycmVudDtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcG9zaXRpb25pbmcgPSBnZXRQb3NpdGlvbmluZ1N0eWxlKGVsZW1lbnQpO1xuICAgIGlmIChwb3NpdGlvbmluZy50b3AgIT09IG51bGwpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gcG9zaXRpb25pbmcudG9wO1xuICAgIH1cbiAgICBpZiAocG9zaXRpb25pbmcubGVmdCAhPT0gbnVsbCkge1xuICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gcG9zaXRpb25pbmcubGVmdDtcbiAgICB9XG4gICAgZWxlbWVudC5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSBwb3NpdGlvbmluZy50cmFuc2Zvcm1PcmlnaW47XG4gICAgc2V0SXNQb3NpdGlvbmVkKHRydWUpO1xuICB9LCBbZ2V0UG9zaXRpb25pbmdTdHlsZV0pO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlU2Nyb2xsTG9jaykge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHNldFBvc2l0aW9uaW5nU3R5bGVzKTtcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzZXRQb3NpdGlvbmluZ1N0eWxlcyk7XG4gIH0sIFthbmNob3JFbCwgZGlzYWJsZVNjcm9sbExvY2ssIHNldFBvc2l0aW9uaW5nU3R5bGVzXSk7XG4gIGNvbnN0IGhhbmRsZUVudGVyaW5nID0gKGVsZW1lbnQsIGlzQXBwZWFyaW5nKSA9PiB7XG4gICAgaWYgKG9uRW50ZXJpbmcpIHtcbiAgICAgIG9uRW50ZXJpbmcoZWxlbWVudCwgaXNBcHBlYXJpbmcpO1xuICAgIH1cbiAgICBzZXRQb3NpdGlvbmluZ1N0eWxlcygpO1xuICB9O1xuICBjb25zdCBoYW5kbGVFeGl0ZWQgPSAoKSA9PiB7XG4gICAgc2V0SXNQb3NpdGlvbmVkKGZhbHNlKTtcbiAgfTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3Blbikge1xuICAgICAgc2V0UG9zaXRpb25pbmdTdHlsZXMoKTtcbiAgICB9XG4gIH0pO1xuICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKGFjdGlvbiwgKCkgPT4gb3BlbiA/IHtcbiAgICB1cGRhdGVQb3NpdGlvbjogKCkgPT4ge1xuICAgICAgc2V0UG9zaXRpb25pbmdTdHlsZXMoKTtcbiAgICB9XG4gIH0gOiBudWxsLCBbb3Blbiwgc2V0UG9zaXRpb25pbmdTdHlsZXNdKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW9wZW4pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGhhbmRsZVJlc2l6ZSA9IGRlYm91bmNlKCgpID0+IHtcbiAgICAgIHNldFBvc2l0aW9uaW5nU3R5bGVzKCk7XG4gICAgfSk7XG4gICAgY29uc3QgY29udGFpbmVyV2luZG93ID0gb3duZXJXaW5kb3coYW5jaG9yRWwpO1xuICAgIGNvbnRhaW5lcldpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVSZXNpemUpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBoYW5kbGVSZXNpemUuY2xlYXIoKTtcbiAgICAgIGNvbnRhaW5lcldpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVSZXNpemUpO1xuICAgIH07XG4gIH0sIFthbmNob3JFbCwgb3Blbiwgc2V0UG9zaXRpb25pbmdTdHlsZXNdKTtcbiAgbGV0IHRyYW5zaXRpb25EdXJhdGlvbiA9IHRyYW5zaXRpb25EdXJhdGlvblByb3A7XG4gIGlmICh0cmFuc2l0aW9uRHVyYXRpb25Qcm9wID09PSAnYXV0bycgJiYgIVRyYW5zaXRpb25Db21wb25lbnQubXVpU3VwcG9ydEF1dG8pIHtcbiAgICB0cmFuc2l0aW9uRHVyYXRpb24gPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBJZiB0aGUgY29udGFpbmVyIHByb3AgaXMgcHJvdmlkZWQsIHVzZSB0aGF0XG4gIC8vIElmIHRoZSBhbmNob3JFbCBwcm9wIGlzIHByb3ZpZGVkLCB1c2UgaXRzIHBhcmVudCBib2R5IGVsZW1lbnQgYXMgdGhlIGNvbnRhaW5lclxuICAvLyBJZiBuZWl0aGVyIGFyZSBwcm92aWRlZCBsZXQgdGhlIE1vZGFsIHRha2UgY2FyZSBvZiBjaG9vc2luZyB0aGUgY29udGFpbmVyXG4gIGNvbnN0IGNvbnRhaW5lciA9IGNvbnRhaW5lclByb3AgfHwgKGFuY2hvckVsID8gb3duZXJEb2N1bWVudChyZXNvbHZlQW5jaG9yRWwoYW5jaG9yRWwpKS5ib2R5IDogdW5kZWZpbmVkKTtcbiAgY29uc3QgUm9vdFNsb3QgPSAoX3Nsb3RzJHJvb3QgPSBzbG90cyA9PSBudWxsID8gdm9pZCAwIDogc2xvdHMucm9vdCkgIT0gbnVsbCA/IF9zbG90cyRyb290IDogUG9wb3ZlclJvb3Q7XG4gIGNvbnN0IFBhcGVyU2xvdCA9IChfc2xvdHMkcGFwZXIgPSBzbG90cyA9PSBudWxsID8gdm9pZCAwIDogc2xvdHMucGFwZXIpICE9IG51bGwgPyBfc2xvdHMkcGFwZXIgOiBQb3BvdmVyUGFwZXI7XG4gIGNvbnN0IHBhcGVyUHJvcHMgPSB1c2VTbG90UHJvcHMoe1xuICAgIGVsZW1lbnRUeXBlOiBQYXBlclNsb3QsXG4gICAgZXh0ZXJuYWxTbG90UHJvcHM6IF9leHRlbmRzKHt9LCBleHRlcm5hbFBhcGVyU2xvdFByb3BzLCB7XG4gICAgICBzdHlsZTogaXNQb3NpdGlvbmVkID8gZXh0ZXJuYWxQYXBlclNsb3RQcm9wcy5zdHlsZSA6IF9leHRlbmRzKHt9LCBleHRlcm5hbFBhcGVyU2xvdFByb3BzLnN0eWxlLCB7XG4gICAgICAgIG9wYWNpdHk6IDBcbiAgICAgIH0pXG4gICAgfSksXG4gICAgYWRkaXRpb25hbFByb3BzOiB7XG4gICAgICBlbGV2YXRpb24sXG4gICAgICByZWY6IGhhbmRsZVBhcGVyUmVmXG4gICAgfSxcbiAgICBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnBhcGVyLCBleHRlcm5hbFBhcGVyU2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBleHRlcm5hbFBhcGVyU2xvdFByb3BzLmNsYXNzTmFtZSlcbiAgfSk7XG4gIGNvbnN0IF91c2VTbG90UHJvcHMgPSB1c2VTbG90UHJvcHMoe1xuICAgICAgZWxlbWVudFR5cGU6IFJvb3RTbG90LFxuICAgICAgZXh0ZXJuYWxTbG90UHJvcHM6IChzbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RQcm9wcy5yb290KSB8fCB7fSxcbiAgICAgIGV4dGVybmFsRm9yd2FyZGVkUHJvcHM6IG90aGVyLFxuICAgICAgYWRkaXRpb25hbFByb3BzOiB7XG4gICAgICAgIHJlZixcbiAgICAgICAgc2xvdFByb3BzOiB7XG4gICAgICAgICAgYmFja2Ryb3A6IHtcbiAgICAgICAgICAgIGludmlzaWJsZTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY29udGFpbmVyLFxuICAgICAgICBvcGVuXG4gICAgICB9LFxuICAgICAgb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSlcbiAgICB9KSxcbiAgICB7XG4gICAgICBzbG90UHJvcHM6IHJvb3RTbG90UHJvcHNQcm9wXG4gICAgfSA9IF91c2VTbG90UHJvcHMsXG4gICAgcm9vdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3VzZVNsb3RQcm9wcywgX2V4Y2x1ZGVkMyk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChSb290U2xvdCwgX2V4dGVuZHMoe30sIHJvb3RQcm9wcywgIWlzSG9zdENvbXBvbmVudChSb290U2xvdCkgJiYge1xuICAgIHNsb3RQcm9wczogcm9vdFNsb3RQcm9wc1Byb3AsXG4gICAgZGlzYWJsZVNjcm9sbExvY2tcbiAgfSwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChUcmFuc2l0aW9uQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICBhcHBlYXI6IHRydWUsXG4gICAgICBpbjogb3BlbixcbiAgICAgIG9uRW50ZXJpbmc6IGhhbmRsZUVudGVyaW5nLFxuICAgICAgb25FeGl0ZWQ6IGhhbmRsZUV4aXRlZCxcbiAgICAgIHRpbWVvdXQ6IHRyYW5zaXRpb25EdXJhdGlvblxuICAgIH0sIFRyYW5zaXRpb25Qcm9wcywge1xuICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFBhcGVyU2xvdCwgX2V4dGVuZHMoe30sIHBhcGVyUHJvcHMsIHtcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICB9KSlcbiAgICB9KSlcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBQb3BvdmVyLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIEEgcmVmIGZvciBpbXBlcmF0aXZlIGFjdGlvbnMuXG4gICAqIEl0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIHVwZGF0ZVBvc2l0aW9uKCkgYWN0aW9uLlxuICAgKi9cbiAgYWN0aW9uOiByZWZUeXBlLFxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50LCBbUG9wb3ZlclZpcnR1YWxFbGVtZW50XSgvbWF0ZXJpYWwtdWkvcmVhY3QtcG9wb3Zlci8jdmlydHVhbC1lbGVtZW50KSxcbiAgICogb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgZWl0aGVyLlxuICAgKiBJdCdzIHVzZWQgdG8gc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgcG9wb3Zlci5cbiAgICovXG4gIGFuY2hvckVsOiBjaGFpblByb3BUeXBlcyhQcm9wVHlwZXMub25lT2ZUeXBlKFtIVE1MRWxlbWVudFR5cGUsIFByb3BUeXBlcy5mdW5jXSksIHByb3BzID0+IHtcbiAgICBpZiAocHJvcHMub3BlbiAmJiAoIXByb3BzLmFuY2hvclJlZmVyZW5jZSB8fCBwcm9wcy5hbmNob3JSZWZlcmVuY2UgPT09ICdhbmNob3JFbCcpKSB7XG4gICAgICBjb25zdCByZXNvbHZlZEFuY2hvckVsID0gcmVzb2x2ZUFuY2hvckVsKHByb3BzLmFuY2hvckVsKTtcbiAgICAgIGlmIChyZXNvbHZlZEFuY2hvckVsICYmIHJlc29sdmVkQW5jaG9yRWwubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgY29uc3QgYm94ID0gcmVzb2x2ZWRBbmNob3JFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAndGVzdCcgJiYgYm94LnRvcCA9PT0gMCAmJiBib3gubGVmdCA9PT0gMCAmJiBib3gucmlnaHQgPT09IDAgJiYgYm94LmJvdHRvbSA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoWydNVUk6IFRoZSBgYW5jaG9yRWxgIHByb3AgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudCBpcyBpbnZhbGlkLicsICdUaGUgYW5jaG9yIGVsZW1lbnQgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIGRvY3VtZW50IGxheW91dC4nLCBcIk1ha2Ugc3VyZSB0aGUgZWxlbWVudCBpcyBwcmVzZW50IGluIHRoZSBkb2N1bWVudCBvciB0aGF0IGl0J3Mgbm90IGRpc3BsYXkgbm9uZS5cIl0uam9pbignXFxuJykpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKFsnTVVJOiBUaGUgYGFuY2hvckVsYCBwcm9wIHByb3ZpZGVkIHRvIHRoZSBjb21wb25lbnQgaXMgaW52YWxpZC4nLCBgSXQgc2hvdWxkIGJlIGFuIEVsZW1lbnQgb3IgUG9wb3ZlclZpcnR1YWxFbGVtZW50IGluc3RhbmNlIGJ1dCBpdCdzIFxcYCR7cmVzb2x2ZWRBbmNob3JFbH1cXGAgaW5zdGVhZC5gXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9KSxcbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIHBvaW50IG9uIHRoZSBhbmNob3Igd2hlcmUgdGhlIHBvcG92ZXInc1xuICAgKiBgYW5jaG9yRWxgIHdpbGwgYXR0YWNoIHRvLiBUaGlzIGlzIG5vdCB1c2VkIHdoZW4gdGhlXG4gICAqIGFuY2hvclJlZmVyZW5jZSBpcyAnYW5jaG9yUG9zaXRpb24nLlxuICAgKlxuICAgKiBPcHRpb25zOlxuICAgKiB2ZXJ0aWNhbDogW3RvcCwgY2VudGVyLCBib3R0b21dO1xuICAgKiBob3Jpem9udGFsOiBbbGVmdCwgY2VudGVyLCByaWdodF0uXG4gICAqIEBkZWZhdWx0IHtcbiAgICogICB2ZXJ0aWNhbDogJ3RvcCcsXG4gICAqICAgaG9yaXpvbnRhbDogJ2xlZnQnLFxuICAgKiB9XG4gICAqL1xuICBhbmNob3JPcmlnaW46IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaG9yaXpvbnRhbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnY2VudGVyJywgJ2xlZnQnLCAncmlnaHQnXSksIFByb3BUeXBlcy5udW1iZXJdKS5pc1JlcXVpcmVkLFxuICAgIHZlcnRpY2FsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydib3R0b20nLCAnY2VudGVyJywgJ3RvcCddKSwgUHJvcFR5cGVzLm51bWJlcl0pLmlzUmVxdWlyZWRcbiAgfSksXG4gIC8qKlxuICAgKiBUaGlzIGlzIHRoZSBwb3NpdGlvbiB0aGF0IG1heSBiZSB1c2VkIHRvIHNldCB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcG92ZXIuXG4gICAqIFRoZSBjb29yZGluYXRlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIGFwcGxpY2F0aW9uJ3MgY2xpZW50IGFyZWEuXG4gICAqL1xuICBhbmNob3JQb3NpdGlvbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBsZWZ0OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgdG9wOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRcbiAgfSksXG4gIC8qKlxuICAgKiBUaGlzIGRldGVybWluZXMgd2hpY2ggYW5jaG9yIHByb3AgdG8gcmVmZXIgdG8gd2hlbiBzZXR0aW5nXG4gICAqIHRoZSBwb3NpdGlvbiBvZiB0aGUgcG9wb3Zlci5cbiAgICogQGRlZmF1bHQgJ2FuY2hvckVsJ1xuICAgKi9cbiAgYW5jaG9yUmVmZXJlbmNlOiBQcm9wVHlwZXMub25lT2YoWydhbmNob3JFbCcsICdhbmNob3JQb3NpdGlvbicsICdub25lJ10pLFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBBbiBIVE1MIGVsZW1lbnQsIGNvbXBvbmVudCBpbnN0YW5jZSwgb3IgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGVpdGhlci5cbiAgICogVGhlIGBjb250YWluZXJgIHdpbGwgcGFzc2VkIHRvIHRoZSBNb2RhbCBjb21wb25lbnQuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGl0IHVzZXMgdGhlIGJvZHkgb2YgdGhlIGFuY2hvckVsJ3MgdG9wLWxldmVsIGRvY3VtZW50IG9iamVjdCxcbiAgICogc28gaXQncyBzaW1wbHkgYGRvY3VtZW50LmJvZHlgIG1vc3Qgb2YgdGhlIHRpbWUuXG4gICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbSFRNTEVsZW1lbnRUeXBlLCBQcm9wVHlwZXMuZnVuY10pLFxuICAvKipcbiAgICogRGlzYWJsZSB0aGUgc2Nyb2xsIGxvY2sgYmVoYXZpb3IuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlU2Nyb2xsTG9jazogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgZWxldmF0aW9uIG9mIHRoZSBwb3BvdmVyLlxuICAgKiBAZGVmYXVsdCA4XG4gICAqL1xuICBlbGV2YXRpb246IGludGVnZXJQcm9wVHlwZSxcbiAgLyoqXG4gICAqIFNwZWNpZmllcyBob3cgY2xvc2UgdG8gdGhlIGVkZ2Ugb2YgdGhlIHdpbmRvdyB0aGUgcG9wb3ZlciBjYW4gYXBwZWFyLlxuICAgKiBJZiBudWxsLCB0aGUgcG9wb3ZlciB3aWxsIG5vdCBiZSBjb25zdHJhaW5lZCBieSB0aGUgd2luZG93LlxuICAgKiBAZGVmYXVsdCAxNlxuICAgKi9cbiAgbWFyZ2luVGhyZXNob2xkOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIGNsb3NlZC5cbiAgICogVGhlIGByZWFzb25gIHBhcmFtZXRlciBjYW4gb3B0aW9uYWxseSBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHJlc3BvbnNlIHRvIGBvbkNsb3NlYC5cbiAgICovXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgUGFwZXJgXSgvbWF0ZXJpYWwtdWkvYXBpL3BhcGVyLykgZWxlbWVudC5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciBgc2xvdFByb3BzLnBhcGVyYCBhbmQgd2lsbCBiZSBvdmVycmlkZW4gYnkgaXQgaWYgYm90aCBhcmUgdXNlZC5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzbG90UHJvcHMucGFwZXJgIGluc3RlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBQYXBlclByb3BzOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5zaGFwZSh7XG4gICAgY29tcG9uZW50OiBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZlxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHBhcGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcGFwZXI6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGlzIGlzIHRoZSBwb2ludCBvbiB0aGUgcG9wb3ZlciB3aGljaFxuICAgKiB3aWxsIGF0dGFjaCB0byB0aGUgYW5jaG9yJ3Mgb3JpZ2luLlxuICAgKlxuICAgKiBPcHRpb25zOlxuICAgKiB2ZXJ0aWNhbDogW3RvcCwgY2VudGVyLCBib3R0b20sIHgocHgpXTtcbiAgICogaG9yaXpvbnRhbDogW2xlZnQsIGNlbnRlciwgcmlnaHQsIHgocHgpXS5cbiAgICogQGRlZmF1bHQge1xuICAgKiAgIHZlcnRpY2FsOiAndG9wJyxcbiAgICogICBob3Jpem9udGFsOiAnbGVmdCcsXG4gICAqIH1cbiAgICovXG4gIHRyYW5zZm9ybU9yaWdpbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBob3Jpem9udGFsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydjZW50ZXInLCAnbGVmdCcsICdyaWdodCddKSwgUHJvcFR5cGVzLm51bWJlcl0pLmlzUmVxdWlyZWQsXG4gICAgdmVydGljYWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2JvdHRvbScsICdjZW50ZXInLCAndG9wJ10pLCBQcm9wVHlwZXMubnVtYmVyXSkuaXNSZXF1aXJlZFxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHRyYW5zaXRpb24uXG4gICAqIFtGb2xsb3cgdGhpcyBndWlkZV0oL21hdGVyaWFsLXVpL3RyYW5zaXRpb25zLyN0cmFuc2l0aW9uY29tcG9uZW50LXByb3ApIHRvIGxlYXJuIG1vcmUgYWJvdXQgdGhlIHJlcXVpcmVtZW50cyBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IEdyb3dcbiAgICovXG4gIFRyYW5zaXRpb25Db21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFNldCB0byAnYXV0bycgdG8gYXV0b21hdGljYWxseSBjYWxjdWxhdGUgdHJhbnNpdGlvbiB0aW1lIGJhc2VkIG9uIGhlaWdodC5cbiAgICogQGRlZmF1bHQgJ2F1dG8nXG4gICAqL1xuICB0cmFuc2l0aW9uRHVyYXRpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2F1dG8nXSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXBwZWFyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGVudGVyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5udW1iZXJcbiAgfSldKSxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIHRyYW5zaXRpb24gZWxlbWVudC5cbiAgICogQnkgZGVmYXVsdCwgdGhlIGVsZW1lbnQgaXMgYmFzZWQgb24gdGhpcyBbYFRyYW5zaXRpb25gXShodHRwOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdHJhbnNpdGlvbi8pIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIFRyYW5zaXRpb25Qcm9wczogUHJvcFR5cGVzLm9iamVjdFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFBvcG92ZXI7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbnVVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aU1lbnUnLCBzbG90KTtcbn1cbmNvbnN0IG1lbnVDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpTWVudScsIFsncm9vdCcsICdwYXBlcicsICdsaXN0J10pO1xuZXhwb3J0IGRlZmF1bHQgbWVudUNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wib25FbnRlcmluZ1wiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcImF1dG9Gb2N1c1wiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZUF1dG9Gb2N1c0l0ZW1cIiwgXCJNZW51TGlzdFByb3BzXCIsIFwib25DbG9zZVwiLCBcIm9wZW5cIiwgXCJQYXBlclByb3BzXCIsIFwiUG9wb3ZlckNsYXNzZXNcIiwgXCJ0cmFuc2l0aW9uRHVyYXRpb25cIiwgXCJUcmFuc2l0aW9uUHJvcHNcIiwgXCJ2YXJpYW50XCIsIFwic2xvdHNcIiwgXCJzbG90UHJvcHNcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0ZyYWdtZW50IH0gZnJvbSAncmVhY3QtaXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgdXNlU2xvdFByb3BzIH0gZnJvbSAnQG11aS9iYXNlL3V0aWxzJztcbmltcG9ydCB7IEhUTUxFbGVtZW50VHlwZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IE1lbnVMaXN0IGZyb20gJy4uL01lbnVMaXN0JztcbmltcG9ydCBQb3BvdmVyLCB7IFBvcG92ZXJQYXBlciB9IGZyb20gJy4uL1BvcG92ZXInO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWUnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHsgZ2V0TWVudVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vbWVudUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IFJUTF9PUklHSU4gPSB7XG4gIHZlcnRpY2FsOiAndG9wJyxcbiAgaG9yaXpvbnRhbDogJ3JpZ2h0J1xufTtcbmNvbnN0IExUUl9PUklHSU4gPSB7XG4gIHZlcnRpY2FsOiAndG9wJyxcbiAgaG9yaXpvbnRhbDogJ2xlZnQnXG59O1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCddLFxuICAgIHBhcGVyOiBbJ3BhcGVyJ10sXG4gICAgbGlzdDogWydsaXN0J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRNZW51VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBNZW51Um9vdCA9IHN0eWxlZChQb3BvdmVyLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlNZW51JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG59KSh7fSk7XG5leHBvcnQgY29uc3QgTWVudVBhcGVyID0gc3R5bGVkKFBvcG92ZXJQYXBlciwge1xuICBuYW1lOiAnTXVpTWVudScsXG4gIHNsb3Q6ICdQYXBlcicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnBhcGVyXG59KSh7XG4gIC8vIHNwZWNaOiBUaGUgbWF4aW11bSBoZWlnaHQgb2YgYSBzaW1wbGUgbWVudSBzaG91bGQgYmUgb25lIG9yIG1vcmUgcm93cyBsZXNzIHRoYW4gdGhlIHZpZXdcbiAgLy8gaGVpZ2h0LiBUaGlzIGVuc3VyZXMgYSB0YXBwYWJsZSBhcmVhIG91dHNpZGUgb2YgdGhlIHNpbXBsZSBtZW51IHdpdGggd2hpY2ggdG8gZGlzbWlzc1xuICAvLyB0aGUgbWVudS5cbiAgbWF4SGVpZ2h0OiAnY2FsYygxMDAlIC0gOTZweCknLFxuICAvLyBBZGQgaU9TIG1vbWVudHVtIHNjcm9sbGluZyBmb3IgaU9TIDwgMTMuMFxuICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJ1xufSk7XG5jb25zdCBNZW51TWVudUxpc3QgPSBzdHlsZWQoTWVudUxpc3QsIHtcbiAgbmFtZTogJ011aU1lbnUnLFxuICBzbG90OiAnTGlzdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLmxpc3Rcbn0pKHtcbiAgLy8gV2UgZGlzYWJsZSB0aGUgZm9jdXMgcmluZyBmb3IgbW91c2UsIHRvdWNoIGFuZCBrZXlib2FyZCB1c2Vycy5cbiAgb3V0bGluZTogMFxufSk7XG5jb25zdCBNZW51ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTWVudShpblByb3BzLCByZWYpIHtcbiAgdmFyIF9zbG90cyRwYXBlciwgX3Nsb3RQcm9wcyRwYXBlcjtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpTWVudSdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGF1dG9Gb2N1cyA9IHRydWUsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRpc2FibGVBdXRvRm9jdXNJdGVtID0gZmFsc2UsXG4gICAgICBNZW51TGlzdFByb3BzID0ge30sXG4gICAgICBvbkNsb3NlLFxuICAgICAgb3BlbixcbiAgICAgIFBhcGVyUHJvcHMgPSB7fSxcbiAgICAgIFBvcG92ZXJDbGFzc2VzLFxuICAgICAgdHJhbnNpdGlvbkR1cmF0aW9uID0gJ2F1dG8nLFxuICAgICAgVHJhbnNpdGlvblByb3BzOiB7XG4gICAgICAgIG9uRW50ZXJpbmdcbiAgICAgIH0gPSB7fSxcbiAgICAgIHZhcmlhbnQgPSAnc2VsZWN0ZWRNZW51JyxcbiAgICAgIHNsb3RzID0ge30sXG4gICAgICBzbG90UHJvcHMgPSB7fVxuICAgIH0gPSBwcm9wcyxcbiAgICBUcmFuc2l0aW9uUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcy5UcmFuc2l0aW9uUHJvcHMsIF9leGNsdWRlZCksXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkMik7XG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcbiAgY29uc3QgaXNSdGwgPSB0aGVtZS5kaXJlY3Rpb24gPT09ICdydGwnO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgYXV0b0ZvY3VzLFxuICAgIGRpc2FibGVBdXRvRm9jdXNJdGVtLFxuICAgIE1lbnVMaXN0UHJvcHMsXG4gICAgb25FbnRlcmluZyxcbiAgICBQYXBlclByb3BzLFxuICAgIHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICBUcmFuc2l0aW9uUHJvcHMsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBhdXRvRm9jdXNJdGVtID0gYXV0b0ZvY3VzICYmICFkaXNhYmxlQXV0b0ZvY3VzSXRlbSAmJiBvcGVuO1xuICBjb25zdCBtZW51TGlzdEFjdGlvbnNSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZUVudGVyaW5nID0gKGVsZW1lbnQsIGlzQXBwZWFyaW5nKSA9PiB7XG4gICAgaWYgKG1lbnVMaXN0QWN0aW9uc1JlZi5jdXJyZW50KSB7XG4gICAgICBtZW51TGlzdEFjdGlvbnNSZWYuY3VycmVudC5hZGp1c3RTdHlsZUZvclNjcm9sbGJhcihlbGVtZW50LCB0aGVtZSk7XG4gICAgfVxuICAgIGlmIChvbkVudGVyaW5nKSB7XG4gICAgICBvbkVudGVyaW5nKGVsZW1lbnQsIGlzQXBwZWFyaW5nKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUxpc3RLZXlEb3duID0gZXZlbnQgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKG9uQ2xvc2UpIHtcbiAgICAgICAgb25DbG9zZShldmVudCwgJ3RhYktleURvd24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIHRoZSBpbmRleCBvZiB0aGUgaXRlbSBzaG91bGQgcmVjZWl2ZSBmb2N1c1xuICAgKiBpbiBhIGB2YXJpYW50PVwic2VsZWN0ZWRNZW51XCJgIGl0J3MgdGhlIGZpcnN0IGBzZWxlY3RlZGAgaXRlbVxuICAgKiBvdGhlcndpc2UgaXQncyB0aGUgdmVyeSBmaXJzdCBpdGVtLlxuICAgKi9cbiAgbGV0IGFjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAvLyBzaW5jZSB3ZSBpbmplY3QgZm9jdXMgcmVsYXRlZCBwcm9wcyBpbnRvIGNoaWxkcmVuIHdlIGhhdmUgdG8gZG8gYSBsb29rYWhlYWRcbiAgLy8gdG8gY2hlY2sgaWYgdGhlcmUgaXMgYSBgc2VsZWN0ZWRgIGl0ZW0uIFdlJ3JlIGxvb2tpbmcgZm9yIHRoZSBsYXN0IGBzZWxlY3RlZGBcbiAgLy8gaXRlbSBhbmQgdXNlIHRoZSBmaXJzdCB2YWxpZCBpdGVtIGFzIGEgZmFsbGJhY2tcbiAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgaWYgKCEgLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGlzRnJhZ21lbnQoY2hpbGQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoW1wiTVVJOiBUaGUgTWVudSBjb21wb25lbnQgZG9lc24ndCBhY2NlcHQgYSBGcmFnbWVudCBhcyBhIGNoaWxkLlwiLCAnQ29uc2lkZXIgcHJvdmlkaW5nIGFuIGFycmF5IGluc3RlYWQuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWNoaWxkLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICBpZiAodmFyaWFudCA9PT0gJ3NlbGVjdGVkTWVudScgJiYgY2hpbGQucHJvcHMuc2VsZWN0ZWQpIHtcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4ID0gaW5kZXg7XG4gICAgICB9IGVsc2UgaWYgKGFjdGl2ZUl0ZW1JbmRleCA9PT0gLTEpIHtcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4ID0gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgY29uc3QgUGFwZXJTbG90ID0gKF9zbG90cyRwYXBlciA9IHNsb3RzLnBhcGVyKSAhPSBudWxsID8gX3Nsb3RzJHBhcGVyIDogTWVudVBhcGVyO1xuICBjb25zdCBwYXBlckV4dGVybmFsU2xvdFByb3BzID0gKF9zbG90UHJvcHMkcGFwZXIgPSBzbG90UHJvcHMucGFwZXIpICE9IG51bGwgPyBfc2xvdFByb3BzJHBhcGVyIDogUGFwZXJQcm9wcztcbiAgY29uc3Qgcm9vdFNsb3RQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgZWxlbWVudFR5cGU6IHNsb3RzLnJvb3QsXG4gICAgZXh0ZXJuYWxTbG90UHJvcHM6IHNsb3RQcm9wcy5yb290LFxuICAgIG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBbY2xhc3Nlcy5yb290LCBjbGFzc05hbWVdXG4gIH0pO1xuICBjb25zdCBwYXBlclNsb3RQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgZWxlbWVudFR5cGU6IFBhcGVyU2xvdCxcbiAgICBleHRlcm5hbFNsb3RQcm9wczogcGFwZXJFeHRlcm5hbFNsb3RQcm9wcyxcbiAgICBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5wYXBlclxuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KE1lbnVSb290LCBfZXh0ZW5kcyh7XG4gICAgb25DbG9zZTogb25DbG9zZSxcbiAgICBhbmNob3JPcmlnaW46IHtcbiAgICAgIHZlcnRpY2FsOiAnYm90dG9tJyxcbiAgICAgIGhvcml6b250YWw6IGlzUnRsID8gJ3JpZ2h0JyA6ICdsZWZ0J1xuICAgIH0sXG4gICAgdHJhbnNmb3JtT3JpZ2luOiBpc1J0bCA/IFJUTF9PUklHSU4gOiBMVFJfT1JJR0lOLFxuICAgIHNsb3RzOiB7XG4gICAgICBwYXBlcjogUGFwZXJTbG90LFxuICAgICAgcm9vdDogc2xvdHMucm9vdFxuICAgIH0sXG4gICAgc2xvdFByb3BzOiB7XG4gICAgICByb290OiByb290U2xvdFByb3BzLFxuICAgICAgcGFwZXI6IHBhcGVyU2xvdFByb3BzXG4gICAgfSxcbiAgICBvcGVuOiBvcGVuLFxuICAgIHJlZjogcmVmLFxuICAgIHRyYW5zaXRpb25EdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgIFRyYW5zaXRpb25Qcm9wczogX2V4dGVuZHMoe1xuICAgICAgb25FbnRlcmluZzogaGFuZGxlRW50ZXJpbmdcbiAgICB9LCBUcmFuc2l0aW9uUHJvcHMpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjbGFzc2VzOiBQb3BvdmVyQ2xhc3NlcyxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goTWVudU1lbnVMaXN0LCBfZXh0ZW5kcyh7XG4gICAgICBvbktleURvd246IGhhbmRsZUxpc3RLZXlEb3duLFxuICAgICAgYWN0aW9uczogbWVudUxpc3RBY3Rpb25zUmVmLFxuICAgICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMgJiYgKGFjdGl2ZUl0ZW1JbmRleCA9PT0gLTEgfHwgZGlzYWJsZUF1dG9Gb2N1c0l0ZW0pLFxuICAgICAgYXV0b0ZvY3VzSXRlbTogYXV0b0ZvY3VzSXRlbSxcbiAgICAgIHZhcmlhbnQ6IHZhcmlhbnRcbiAgICB9LCBNZW51TGlzdFByb3BzLCB7XG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5saXN0LCBNZW51TGlzdFByb3BzLmNsYXNzTmFtZSksXG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KSlcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBNZW51LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIEFuIEhUTUwgZWxlbWVudCwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgb25lLlxuICAgKiBJdCdzIHVzZWQgdG8gc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgbWVudS5cbiAgICovXG4gIGFuY2hvckVsOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCAoRGVmYXVsdCkgd2lsbCBmb2N1cyB0aGUgYFtyb2xlPVwibWVudVwiXWAgaWYgbm8gZm9jdXNhYmxlIGNoaWxkIGlzIGZvdW5kLiBEaXNhYmxlZFxuICAgKiBjaGlsZHJlbiBhcmUgbm90IGZvY3VzYWJsZS4gSWYgeW91IHNldCB0aGlzIHByb3AgdG8gYGZhbHNlYCBmb2N1cyB3aWxsIGJlIHBsYWNlZFxuICAgKiBvbiB0aGUgcGFyZW50IG1vZGFsIGNvbnRhaW5lci4gVGhpcyBoYXMgc2V2ZXJlIGFjY2Vzc2liaWxpdHkgaW1wbGljYXRpb25zXG4gICAqIGFuZCBzaG91bGQgb25seSBiZSBjb25zaWRlcmVkIGlmIHlvdSBtYW5hZ2UgZm9jdXMgb3RoZXJ3aXNlLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTWVudSBjb250ZW50cywgbm9ybWFsbHkgYE1lbnVJdGVtYHMuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogV2hlbiBvcGVuaW5nIHRoZSBtZW51IHdpbGwgbm90IGZvY3VzIHRoZSBhY3RpdmUgaXRlbSBidXQgdGhlIGBbcm9sZT1cIm1lbnVcIl1gXG4gICAqIHVubGVzcyBgYXV0b0ZvY3VzYCBpcyBhbHNvIHNldCB0byBgZmFsc2VgLiBOb3QgdXNpbmcgdGhlIGRlZmF1bHQgbWVhbnMgbm90XG4gICAqIGZvbGxvd2luZyBXQUktQVJJQSBhdXRob3JpbmcgcHJhY3RpY2VzLiBQbGVhc2UgYmUgY29uc2lkZXJhdGUgYWJvdXQgcG9zc2libGVcbiAgICogYWNjZXNzaWJpbGl0eSBpbXBsaWNhdGlvbnMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlQXV0b0ZvY3VzSXRlbTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYE1lbnVMaXN0YF0oL21hdGVyaWFsLXVpL2FwaS9tZW51LWxpc3QvKSBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgTWVudUxpc3RQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiBDYW4gYmU6IGBcImVzY2FwZUtleURvd25cImAsIGBcImJhY2tkcm9wQ2xpY2tcImAsIGBcInRhYktleURvd25cImAuXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBzaG93bi5cbiAgICovXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBQYXBlclByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogYGNsYXNzZXNgIHByb3AgYXBwbGllZCB0byB0aGUgW2BQb3BvdmVyYF0oL21hdGVyaWFsLXVpL2FwaS9wb3BvdmVyLykgZWxlbWVudC5cbiAgICovXG4gIFBvcG92ZXJDbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcGFwZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBwYXBlcjogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSBsZW5ndGggb2YgdGhlIHRyYW5zaXRpb24gaW4gYG1zYCwgb3IgJ2F1dG8nXG4gICAqIEBkZWZhdWx0ICdhdXRvJ1xuICAgKi9cbiAgdHJhbnNpdGlvbkR1cmF0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydhdXRvJ10pLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFwcGVhcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBlbnRlcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBleGl0OiBQcm9wVHlwZXMubnVtYmVyXG4gIH0pXSksXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSB0cmFuc2l0aW9uIGVsZW1lbnQuXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBlbGVtZW50IGlzIGJhc2VkIG9uIHRoaXMgW2BUcmFuc2l0aW9uYF0oaHR0cDovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3RyYW5zaXRpb24vKSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBUcmFuc2l0aW9uUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuIFVzZSBgbWVudWAgdG8gcHJldmVudCBzZWxlY3RlZCBpdGVtcyBmcm9tIGltcGFjdGluZyB0aGUgaW5pdGlhbCBmb2N1cy5cbiAgICogQGRlZmF1bHQgJ3NlbGVjdGVkTWVudSdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ21lbnUnLCAnc2VsZWN0ZWRNZW51J10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTWVudTsiLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlzdEl0ZW1JY29uVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlMaXN0SXRlbUljb24nLCBzbG90KTtcbn1cbmNvbnN0IGxpc3RJdGVtSWNvbkNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlMaXN0SXRlbUljb24nLCBbJ3Jvb3QnLCAnYWxpZ25JdGVtc0ZsZXhTdGFydCddKTtcbmV4cG9ydCBkZWZhdWx0IGxpc3RJdGVtSWNvbkNsYXNzZXM7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpc3RJdGVtVGV4dFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTGlzdEl0ZW1UZXh0Jywgc2xvdCk7XG59XG5jb25zdCBsaXN0SXRlbVRleHRDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpTGlzdEl0ZW1UZXh0JywgWydyb290JywgJ211bHRpbGluZScsICdkZW5zZScsICdpbnNldCcsICdwcmltYXJ5JywgJ3NlY29uZGFyeSddKTtcbmV4cG9ydCBkZWZhdWx0IGxpc3RJdGVtVGV4dENsYXNzZXM7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbnVJdGVtVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlNZW51SXRlbScsIHNsb3QpO1xufVxuY29uc3QgbWVudUl0ZW1DbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpTWVudUl0ZW0nLCBbJ3Jvb3QnLCAnZm9jdXNWaXNpYmxlJywgJ2RlbnNlJywgJ2Rpc2FibGVkJywgJ2RpdmlkZXInLCAnZ3V0dGVycycsICdzZWxlY3RlZCddKTtcbmV4cG9ydCBkZWZhdWx0IG1lbnVJdGVtQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhdXRvRm9jdXNcIiwgXCJjb21wb25lbnRcIiwgXCJkZW5zZVwiLCBcImRpdmlkZXJcIiwgXCJkaXNhYmxlR3V0dGVyc1wiLCBcImZvY3VzVmlzaWJsZUNsYXNzTmFtZVwiLCBcInJvbGVcIiwgXCJ0YWJJbmRleFwiLCBcImNsYXNzTmFtZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IGFscGhhIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBMaXN0Q29udGV4dCBmcm9tICcuLi9MaXN0L0xpc3RDb250ZXh0JztcbmltcG9ydCBCdXR0b25CYXNlIGZyb20gJy4uL0J1dHRvbkJhc2UnO1xuaW1wb3J0IHVzZUVuaGFuY2VkRWZmZWN0IGZyb20gJy4uL3V0aWxzL3VzZUVuaGFuY2VkRWZmZWN0JztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHsgZGl2aWRlckNsYXNzZXMgfSBmcm9tICcuLi9EaXZpZGVyJztcbmltcG9ydCB7IGxpc3RJdGVtSWNvbkNsYXNzZXMgfSBmcm9tICcuLi9MaXN0SXRlbUljb24nO1xuaW1wb3J0IHsgbGlzdEl0ZW1UZXh0Q2xhc3NlcyB9IGZyb20gJy4uL0xpc3RJdGVtVGV4dCc7XG5pbXBvcnQgbWVudUl0ZW1DbGFzc2VzLCB7IGdldE1lbnVJdGVtVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9tZW51SXRlbUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBjb25zdCBvdmVycmlkZXNSZXNvbHZlciA9IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBvd25lclN0YXRlXG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5kZW5zZSAmJiBzdHlsZXMuZGVuc2UsIG93bmVyU3RhdGUuZGl2aWRlciAmJiBzdHlsZXMuZGl2aWRlciwgIW93bmVyU3RhdGUuZGlzYWJsZUd1dHRlcnMgJiYgc3R5bGVzLmd1dHRlcnNdO1xufTtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBkaXNhYmxlZCxcbiAgICBkZW5zZSxcbiAgICBkaXZpZGVyLFxuICAgIGRpc2FibGVHdXR0ZXJzLFxuICAgIHNlbGVjdGVkLFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGRlbnNlICYmICdkZW5zZScsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsICFkaXNhYmxlR3V0dGVycyAmJiAnZ3V0dGVycycsIGRpdmlkZXIgJiYgJ2RpdmlkZXInLCBzZWxlY3RlZCAmJiAnc2VsZWN0ZWQnXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TWVudUl0ZW1VdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VkQ2xhc3Nlcyk7XG59O1xuY29uc3QgTWVudUl0ZW1Sb290ID0gc3R5bGVkKEJ1dHRvbkJhc2UsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aU1lbnVJdGVtJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHt9LCB0aGVtZS50eXBvZ3JhcGh5LmJvZHkxLCB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAganVzdGlmeUNvbnRlbnQ6ICdmbGV4LXN0YXJ0JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICBtaW5IZWlnaHQ6IDQ4LFxuICBwYWRkaW5nVG9wOiA2LFxuICBwYWRkaW5nQm90dG9tOiA2LFxuICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgd2hpdGVTcGFjZTogJ25vd3JhcCdcbn0sICFvd25lclN0YXRlLmRpc2FibGVHdXR0ZXJzICYmIHtcbiAgcGFkZGluZ0xlZnQ6IDE2LFxuICBwYWRkaW5nUmlnaHQ6IDE2XG59LCBvd25lclN0YXRlLmRpdmlkZXIgJiYge1xuICBib3JkZXJCb3R0b206IGAxcHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5kaXZpZGVyfWAsXG4gIGJhY2tncm91bmRDbGlwOiAncGFkZGluZy1ib3gnXG59LCB7XG4gICcmOmhvdmVyJzoge1xuICAgIHRleHREZWNvcmF0aW9uOiAnbm9uZScsXG4gICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uaG92ZXIsXG4gICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICB9XG4gIH0sXG4gIFtgJi4ke21lbnVJdGVtQ2xhc3Nlcy5zZWxlY3RlZH1gXToge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLnByaW1hcnkubWFpbkNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eX0pYCA6IGFscGhhKHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHkpLFxuICAgIFtgJi4ke21lbnVJdGVtQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLnByaW1hcnkubWFpbkNoYW5uZWx9IC8gY2FsYygke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5fSArICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5mb2N1c09wYWNpdHl9KSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eSArIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmZvY3VzT3BhY2l0eSlcbiAgICB9XG4gIH0sXG4gIFtgJi4ke21lbnVJdGVtQ2xhc3Nlcy5zZWxlY3RlZH06aG92ZXJgXToge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLnByaW1hcnkubWFpbkNoYW5uZWx9IC8gY2FsYygke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5fSArICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHl9KSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eSArIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eSksXG4gICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5wcmltYXJ5Lm1haW5DaGFubmVsfSAvICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHl9KWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlLnByaW1hcnkubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5KVxuICAgIH1cbiAgfSxcbiAgW2AmLiR7bWVudUl0ZW1DbGFzc2VzLmZvY3VzVmlzaWJsZX1gXToge1xuICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmZvY3VzXG4gIH0sXG4gIFtgJi4ke21lbnVJdGVtQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIG9wYWNpdHk6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZE9wYWNpdHlcbiAgfSxcbiAgW2AmICsgLiR7ZGl2aWRlckNsYXNzZXMucm9vdH1gXToge1xuICAgIG1hcmdpblRvcDogdGhlbWUuc3BhY2luZygxKSxcbiAgICBtYXJnaW5Cb3R0b206IHRoZW1lLnNwYWNpbmcoMSlcbiAgfSxcbiAgW2AmICsgLiR7ZGl2aWRlckNsYXNzZXMuaW5zZXR9YF06IHtcbiAgICBtYXJnaW5MZWZ0OiA1MlxuICB9LFxuICBbYCYgLiR7bGlzdEl0ZW1UZXh0Q2xhc3Nlcy5yb290fWBdOiB7XG4gICAgbWFyZ2luVG9wOiAwLFxuICAgIG1hcmdpbkJvdHRvbTogMFxuICB9LFxuICBbYCYgLiR7bGlzdEl0ZW1UZXh0Q2xhc3Nlcy5pbnNldH1gXToge1xuICAgIHBhZGRpbmdMZWZ0OiAzNlxuICB9LFxuICBbYCYgLiR7bGlzdEl0ZW1JY29uQ2xhc3Nlcy5yb290fWBdOiB7XG4gICAgbWluV2lkdGg6IDM2XG4gIH1cbn0sICFvd25lclN0YXRlLmRlbnNlICYmIHtcbiAgW3RoZW1lLmJyZWFrcG9pbnRzLnVwKCdzbScpXToge1xuICAgIG1pbkhlaWdodDogJ2F1dG8nXG4gIH1cbn0sIG93bmVyU3RhdGUuZGVuc2UgJiYgX2V4dGVuZHMoe1xuICBtaW5IZWlnaHQ6IDMyLFxuICAvLyBodHRwczovL20yLm1hdGVyaWFsLmlvL2NvbXBvbmVudHMvbWVudXMjc3BlY3MgPiBEZW5zZVxuICBwYWRkaW5nVG9wOiA0LFxuICBwYWRkaW5nQm90dG9tOiA0XG59LCB0aGVtZS50eXBvZ3JhcGh5LmJvZHkyLCB7XG4gIFtgJiAuJHtsaXN0SXRlbUljb25DbGFzc2VzLnJvb3R9IHN2Z2BdOiB7XG4gICAgZm9udFNpemU6ICcxLjI1cmVtJ1xuICB9XG59KSkpO1xuY29uc3QgTWVudUl0ZW0gPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBNZW51SXRlbShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpTWVudUl0ZW0nXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgICAgIGNvbXBvbmVudCA9ICdsaScsXG4gICAgICBkZW5zZSA9IGZhbHNlLFxuICAgICAgZGl2aWRlciA9IGZhbHNlLFxuICAgICAgZGlzYWJsZUd1dHRlcnMgPSBmYWxzZSxcbiAgICAgIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSxcbiAgICAgIHJvbGUgPSAnbWVudWl0ZW0nLFxuICAgICAgdGFiSW5kZXg6IHRhYkluZGV4UHJvcCxcbiAgICAgIGNsYXNzTmFtZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChMaXN0Q29udGV4dCk7XG4gIGNvbnN0IGNoaWxkQ29udGV4dCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBkZW5zZTogZGVuc2UgfHwgY29udGV4dC5kZW5zZSB8fCBmYWxzZSxcbiAgICBkaXNhYmxlR3V0dGVyc1xuICB9KSwgW2NvbnRleHQuZGVuc2UsIGRlbnNlLCBkaXNhYmxlR3V0dGVyc10pO1xuICBjb25zdCBtZW51SXRlbVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChhdXRvRm9jdXMpIHtcbiAgICAgIGlmIChtZW51SXRlbVJlZi5jdXJyZW50KSB7XG4gICAgICAgIG1lbnVJdGVtUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IFVuYWJsZSB0byBzZXQgZm9jdXMgdG8gYSBNZW51SXRlbSB3aG9zZSBjb21wb25lbnQgaGFzIG5vdCBiZWVuIHJlbmRlcmVkLicpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW2F1dG9Gb2N1c10pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZGVuc2U6IGNoaWxkQ29udGV4dC5kZW5zZSxcbiAgICBkaXZpZGVyLFxuICAgIGRpc2FibGVHdXR0ZXJzXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMocHJvcHMpO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKG1lbnVJdGVtUmVmLCByZWYpO1xuICBsZXQgdGFiSW5kZXg7XG4gIGlmICghcHJvcHMuZGlzYWJsZWQpIHtcbiAgICB0YWJJbmRleCA9IHRhYkluZGV4UHJvcCAhPT0gdW5kZWZpbmVkID8gdGFiSW5kZXhQcm9wIDogLTE7XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KExpc3RDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNoaWxkQ29udGV4dCxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goTWVudUl0ZW1Sb290LCBfZXh0ZW5kcyh7XG4gICAgICByZWY6IGhhbmRsZVJlZixcbiAgICAgIHJvbGU6IHJvbGUsXG4gICAgICB0YWJJbmRleDogdGFiSW5kZXgsXG4gICAgICBjb21wb25lbnQ6IGNvbXBvbmVudCxcbiAgICAgIGZvY3VzVmlzaWJsZUNsYXNzTmFtZTogY2xzeChjbGFzc2VzLmZvY3VzVmlzaWJsZSwgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lKSxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSlcbiAgICB9LCBvdGhlciwge1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzZXM6IGNsYXNzZXNcbiAgICB9KSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE1lbnVJdGVtLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxpc3QgaXRlbSBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqIEZvY3VzIHdpbGwgYWxzbyBiZSB0cmlnZ2VyZWQgaWYgdGhlIHZhbHVlIGNoYW5nZXMgZnJvbSBmYWxzZSB0byB0cnVlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGNvbXBhY3QgdmVydGljYWwgcGFkZGluZyBkZXNpZ25lZCBmb3Iga2V5Ym9hcmQgYW5kIG1vdXNlIGlucHV0IGlzIHVzZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IE1lbnUgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVuc2U6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGVmdCBhbmQgcmlnaHQgcGFkZGluZyBpcyByZW1vdmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUd1dHRlcnM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIDFweCBsaWdodCBib3JkZXIgaXMgYWRkZWQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgbWVudSBpdGVtLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGl2aWRlcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgY2FuIGhlbHAgaWRlbnRpZnkgd2hpY2ggZWxlbWVudCBoYXMga2V5Ym9hcmQgZm9jdXMuXG4gICAqIFRoZSBjbGFzcyBuYW1lIHdpbGwgYmUgYXBwbGllZCB3aGVuIHRoZSBlbGVtZW50IGdhaW5zIHRoZSBmb2N1cyB0aHJvdWdoIGtleWJvYXJkIGludGVyYWN0aW9uLlxuICAgKiBJdCdzIGEgcG9seWZpbGwgZm9yIHRoZSBbQ1NTIDpmb2N1cy12aXNpYmxlIHNlbGVjdG9yXShodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvc2VsZWN0b3JzLTQvI3RoZS1mb2N1cy12aXNpYmxlLXBzZXVkbykuXG4gICAqIFRoZSByYXRpb25hbGUgZm9yIHVzaW5nIHRoaXMgZmVhdHVyZSBbaXMgZXhwbGFpbmVkIGhlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL2ZvY3VzLXZpc2libGUvYmxvYi9IRUFEL2V4cGxhaW5lci5tZCkuXG4gICAqIEEgW3BvbHlmaWxsIGNhbiBiZSB1c2VkXShodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlKSB0byBhcHBseSBhIGBmb2N1cy12aXNpYmxlYCBjbGFzcyB0byBvdGhlciBjb21wb25lbnRzXG4gICAqIGlmIG5lZWRlZC5cbiAgICovXG4gIGZvY3VzVmlzaWJsZUNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHJvbGU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBzZWxlY3RlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHNlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHRhYkluZGV4OiBQcm9wVHlwZXMubnVtYmVyXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTWVudUl0ZW07IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5hdGl2ZVNlbGVjdFV0aWxpdHlDbGFzc2VzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlOYXRpdmVTZWxlY3QnLCBzbG90KTtcbn1cbmNvbnN0IG5hdGl2ZVNlbGVjdENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlOYXRpdmVTZWxlY3QnLCBbJ3Jvb3QnLCAnc2VsZWN0JywgJ211bHRpcGxlJywgJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCcsICdkaXNhYmxlZCcsICdpY29uJywgJ2ljb25PcGVuJywgJ2ljb25GaWxsZWQnLCAnaWNvbk91dGxpbmVkJywgJ2ljb25TdGFuZGFyZCcsICduYXRpdmVJbnB1dCcsICdlcnJvciddKTtcbmV4cG9ydCBkZWZhdWx0IG5hdGl2ZVNlbGVjdENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcIkljb25Db21wb25lbnRcIiwgXCJpbnB1dFJlZlwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyByZWZUeXBlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBuYXRpdmVTZWxlY3RDbGFzc2VzLCB7IGdldE5hdGl2ZVNlbGVjdFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9uYXRpdmVTZWxlY3RDbGFzc2VzJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgdmFyaWFudCxcbiAgICBkaXNhYmxlZCxcbiAgICBtdWx0aXBsZSxcbiAgICBvcGVuLFxuICAgIGVycm9yXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICBzZWxlY3Q6IFsnc2VsZWN0JywgdmFyaWFudCwgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgbXVsdGlwbGUgJiYgJ211bHRpcGxlJywgZXJyb3IgJiYgJ2Vycm9yJ10sXG4gICAgaWNvbjogWydpY29uJywgYGljb24ke2NhcGl0YWxpemUodmFyaWFudCl9YCwgb3BlbiAmJiAnaWNvbk9wZW4nLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldE5hdGl2ZVNlbGVjdFV0aWxpdHlDbGFzc2VzLCBjbGFzc2VzKTtcbn07XG5leHBvcnQgY29uc3QgbmF0aXZlU2VsZWN0U2VsZWN0U3R5bGVzID0gKHtcbiAgb3duZXJTdGF0ZSxcbiAgdGhlbWVcbn0pID0+IF9leHRlbmRzKHtcbiAgTW96QXBwZWFyYW5jZTogJ25vbmUnLFxuICAvLyBSZXNldFxuICBXZWJraXRBcHBlYXJhbmNlOiAnbm9uZScsXG4gIC8vIFJlc2V0XG4gIC8vIFdoZW4gaW50ZXJhY3RpbmcgcXVpY2tseSwgdGhlIHRleHQgY2FuIGVuZCB1cCBzZWxlY3RlZC5cbiAgLy8gTmF0aXZlIHNlbGVjdCBjYW4ndCBiZSBzZWxlY3RlZCBlaXRoZXIuXG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgYm9yZGVyUmFkaXVzOiAwLFxuICAvLyBSZXNldFxuICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgJyY6Zm9jdXMnOiBfZXh0ZW5kcyh7fSwgdGhlbWUudmFycyA/IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLmNvbW1vbi5vbkJhY2tncm91bmRDaGFubmVsfSAvIDAuMDUpYFxuICB9IDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gJ3JnYmEoMCwgMCwgMCwgMC4wNSknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSknXG4gIH0sIHtcbiAgICBib3JkZXJSYWRpdXM6IDAgLy8gUmVzZXQgQ2hyb21lIHN0eWxlXG4gIH0pLFxuICAvLyBSZW1vdmUgSUUxMSBhcnJvd1xuICAnJjo6LW1zLWV4cGFuZCc6IHtcbiAgICBkaXNwbGF5OiAnbm9uZSdcbiAgfSxcbiAgW2AmLiR7bmF0aXZlU2VsZWN0Q2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGN1cnNvcjogJ2RlZmF1bHQnXG4gIH0sXG4gICcmW211bHRpcGxlXSc6IHtcbiAgICBoZWlnaHQ6ICdhdXRvJ1xuICB9LFxuICAnJjpub3QoW211bHRpcGxlXSkgb3B0aW9uLCAmOm5vdChbbXVsdGlwbGVdKSBvcHRncm91cCc6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmJhY2tncm91bmQucGFwZXJcbiAgfSxcbiAgLy8gQnVtcCBzcGVjaWZpY2l0eSB0byBhbGxvdyBleHRlbmRpbmcgY3VzdG9tIGlucHV0c1xuICAnJiYmJzoge1xuICAgIHBhZGRpbmdSaWdodDogMjQsXG4gICAgbWluV2lkdGg6IDE2IC8vIFNvIGl0IGRvZXNuJ3QgY29sbGFwc2UuXG4gIH1cbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2ZpbGxlZCcgJiYge1xuICAnJiYmJzoge1xuICAgIHBhZGRpbmdSaWdodDogMzJcbiAgfVxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgYm9yZGVyUmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzLFxuICAnJjpmb2N1cyc6IHtcbiAgICBib3JkZXJSYWRpdXM6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFwZS5ib3JkZXJSYWRpdXMgLy8gUmVzZXQgdGhlIHJlc2V0IGZvciBDaHJvbWUgc3R5bGVcbiAgfSxcbiAgJyYmJic6IHtcbiAgICBwYWRkaW5nUmlnaHQ6IDMyXG4gIH1cbn0pO1xuY29uc3QgTmF0aXZlU2VsZWN0U2VsZWN0ID0gc3R5bGVkKCdzZWxlY3QnLCB7XG4gIG5hbWU6ICdNdWlOYXRpdmVTZWxlY3QnLFxuICBzbG90OiAnU2VsZWN0JyxcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHJvb3RTaG91bGRGb3J3YXJkUHJvcCxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5zZWxlY3QsIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdLCBvd25lclN0YXRlLmVycm9yICYmIHN0eWxlcy5lcnJvciwge1xuICAgICAgW2AmLiR7bmF0aXZlU2VsZWN0Q2xhc3Nlcy5tdWx0aXBsZX1gXTogc3R5bGVzLm11bHRpcGxlXG4gICAgfV07XG4gIH1cbn0pKG5hdGl2ZVNlbGVjdFNlbGVjdFN0eWxlcyk7XG5leHBvcnQgY29uc3QgbmF0aXZlU2VsZWN0SWNvblN0eWxlcyA9ICh7XG4gIG93bmVyU3RhdGUsXG4gIHRoZW1lXG59KSA9PiBfZXh0ZW5kcyh7XG4gIC8vIFdlIHVzZSBhIHBvc2l0aW9uIGFic29sdXRlIG92ZXIgYSBmbGV4Ym94IGluIG9yZGVyIHRvIGZvcndhcmQgdGhlIHBvaW50ZXIgZXZlbnRzXG4gIC8vIHRvIHRoZSBpbnB1dCBhbmQgdG8gc3VwcG9ydCB3cmFwcGluZyB0YWdzLi5cbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHJpZ2h0OiAwLFxuICB0b3A6ICdjYWxjKDUwJSAtIC41ZW0pJyxcbiAgLy8gQ2VudGVyIHZlcnRpY2FsbHksIGhlaWdodCBpcyAxZW1cbiAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAvLyBEb24ndCBibG9jayBwb2ludGVyIGV2ZW50cyBvbiB0aGUgc2VsZWN0IHVuZGVyIHRoZSBpY29uLlxuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmFjdGl2ZSxcbiAgW2AmLiR7bmF0aXZlU2VsZWN0Q2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRcbiAgfVxufSwgb3duZXJTdGF0ZS5vcGVuICYmIHtcbiAgdHJhbnNmb3JtOiAncm90YXRlKDE4MGRlZyknXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdmaWxsZWQnICYmIHtcbiAgcmlnaHQ6IDdcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiB7XG4gIHJpZ2h0OiA3XG59KTtcbmNvbnN0IE5hdGl2ZVNlbGVjdEljb24gPSBzdHlsZWQoJ3N2ZycsIHtcbiAgbmFtZTogJ011aU5hdGl2ZVNlbGVjdCcsXG4gIHNsb3Q6ICdJY29uJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5pY29uLCBvd25lclN0YXRlLnZhcmlhbnQgJiYgc3R5bGVzW2BpY29uJHtjYXBpdGFsaXplKG93bmVyU3RhdGUudmFyaWFudCl9YF0sIG93bmVyU3RhdGUub3BlbiAmJiBzdHlsZXMuaWNvbk9wZW5dO1xuICB9XG59KShuYXRpdmVTZWxlY3RJY29uU3R5bGVzKTtcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBOYXRpdmVTZWxlY3RJbnB1dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIE5hdGl2ZVNlbGVjdElucHV0KHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBlcnJvcixcbiAgICAgIEljb25Db21wb25lbnQsXG4gICAgICBpbnB1dFJlZixcbiAgICAgIHZhcmlhbnQgPSAnc3RhbmRhcmQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBkaXNhYmxlZCxcbiAgICB2YXJpYW50LFxuICAgIGVycm9yXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9fanN4KE5hdGl2ZVNlbGVjdFNlbGVjdCwgX2V4dGVuZHMoe1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnNlbGVjdCwgY2xhc3NOYW1lKSxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgIHJlZjogaW5wdXRSZWYgfHwgcmVmXG4gICAgfSwgb3RoZXIpKSwgcHJvcHMubXVsdGlwbGUgPyBudWxsIDogLyojX19QVVJFX18qL19qc3goTmF0aXZlU2VsZWN0SWNvbiwge1xuICAgICAgYXM6IEljb25Db21wb25lbnQsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmljb25cbiAgICB9KV1cbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE5hdGl2ZVNlbGVjdElucHV0LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFRoZSBvcHRpb24gZWxlbWVudHMgdG8gcG9wdWxhdGUgdGhlIHNlbGVjdCB3aXRoLlxuICAgKiBDYW4gYmUgc29tZSBgPG9wdGlvbj5gIGVsZW1lbnRzLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBTZWUgW0NTUyBBUEldKCNjc3MpIGJlbG93IGZvciBtb3JlIGRldGFpbHMuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIENTUyBjbGFzcyBuYW1lIG9mIHRoZSBzZWxlY3QgZWxlbWVudC5cbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHNlbGVjdCBpcyBkaXNhYmxlZC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBzZWxlY3QgaW5wdXRgIHdpbGwgaW5kaWNhdGUgYW4gZXJyb3IuXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0aGF0IGRpc3BsYXlzIHRoZSBhcnJvdy5cbiAgICovXG4gIEljb25Db21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogVXNlIHRoYXQgcHJvcCB0byBwYXNzIGEgcmVmIHRvIHRoZSBuYXRpdmUgc2VsZWN0IGVsZW1lbnQuXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG11bHRpcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE5hbWUgYXR0cmlidXRlIG9mIHRoZSBgc2VsZWN0YCBvciBoaWRkZW4gYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gYSBtZW51IGl0ZW0gaXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBpbnB1dCB2YWx1ZS5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnc3RhbmRhcmQnLCAnb3V0bGluZWQnLCAnZmlsbGVkJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTmF0aXZlU2VsZWN0SW5wdXQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xudmFyIF9zcGFuO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc2VzXCIsIFwiY2xhc3NOYW1lXCIsIFwibGFiZWxcIiwgXCJub3RjaGVkXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgTm90Y2hlZE91dGxpbmVSb290ID0gc3R5bGVkKCdmaWVsZHNldCcsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHJvb3RTaG91bGRGb3J3YXJkUHJvcFxufSkoe1xuICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIGJvdHRvbTogMCxcbiAgcmlnaHQ6IDAsXG4gIHRvcDogLTUsXG4gIGxlZnQ6IDAsXG4gIG1hcmdpbjogMCxcbiAgcGFkZGluZzogJzAgOHB4JyxcbiAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICBib3JkZXJSYWRpdXM6ICdpbmhlcml0JyxcbiAgYm9yZGVyU3R5bGU6ICdzb2xpZCcsXG4gIGJvcmRlcldpZHRoOiAxLFxuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIG1pbldpZHRoOiAnMCUnXG59KTtcbmNvbnN0IE5vdGNoZWRPdXRsaW5lTGVnZW5kID0gc3R5bGVkKCdsZWdlbmQnLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiByb290U2hvdWxkRm9yd2FyZFByb3Bcbn0pKCh7XG4gIG93bmVyU3RhdGUsXG4gIHRoZW1lXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGZsb2F0OiAndW5zZXQnLFxuICAvLyBGaXggY29uZmxpY3Qgd2l0aCBib290c3RyYXBcbiAgd2lkdGg6ICdhdXRvJyxcbiAgLy8gRml4IGNvbmZsaWN0IHdpdGggYm9vdHN0cmFwXG4gIG92ZXJmbG93OiAnaGlkZGVuJ1xufSwgIW93bmVyU3RhdGUud2l0aExhYmVsICYmIHtcbiAgcGFkZGluZzogMCxcbiAgbGluZUhlaWdodDogJzExcHgnLFxuICAvLyBzeW5jIHdpdGggYGhlaWdodGAgaW4gYGxlZ2VuZGAgc3R5bGVzXG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnd2lkdGgnLCB7XG4gICAgZHVyYXRpb246IDE1MCxcbiAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0XG4gIH0pXG59LCBvd25lclN0YXRlLndpdGhMYWJlbCAmJiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdibG9jaycsXG4gIC8vIEZpeCBjb25mbGljdCB3aXRoIG5vcm1hbGl6ZS5jc3MgYW5kIHNhbml0aXplLmNzc1xuICBwYWRkaW5nOiAwLFxuICBoZWlnaHQ6IDExLFxuICAvLyBzeW5jIHdpdGggYGxpbmVIZWlnaHRgIGluIGBsZWdlbmRgIHN0eWxlc1xuICBmb250U2l6ZTogJzAuNzVlbScsXG4gIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICBtYXhXaWR0aDogMC4wMSxcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdtYXgtd2lkdGgnLCB7XG4gICAgZHVyYXRpb246IDUwLFxuICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VPdXRcbiAgfSksXG4gIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAnJiA+IHNwYW4nOiB7XG4gICAgcGFkZGluZ0xlZnQ6IDUsXG4gICAgcGFkZGluZ1JpZ2h0OiA1LFxuICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgIG9wYWNpdHk6IDAsXG4gICAgdmlzaWJpbGl0eTogJ3Zpc2libGUnXG4gIH1cbn0sIG93bmVyU3RhdGUubm90Y2hlZCAmJiB7XG4gIG1heFdpZHRoOiAnMTAwJScsXG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnbWF4LXdpZHRoJywge1xuICAgIGR1cmF0aW9uOiAxMDAsXG4gICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dCxcbiAgICBkZWxheTogNTBcbiAgfSlcbn0pKSk7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTm90Y2hlZE91dGxpbmUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgbGFiZWwsXG4gICAgICBub3RjaGVkXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHdpdGhMYWJlbCA9IGxhYmVsICE9IG51bGwgJiYgbGFiZWwgIT09ICcnO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgbm90Y2hlZCxcbiAgICB3aXRoTGFiZWxcbiAgfSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChOb3RjaGVkT3V0bGluZVJvb3QsIF9leHRlbmRzKHtcbiAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChOb3RjaGVkT3V0bGluZUxlZ2VuZCwge1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNoaWxkcmVuOiB3aXRoTGFiZWwgPyAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgICAgICBjaGlsZHJlbjogbGFiZWxcbiAgICAgIH0pIDogLy8gbm90cmFuc2xhdGUgbmVlZGVkIHdoaWxlIEdvb2dsZSBUcmFuc2xhdGUgd2lsbCBub3QgZml4IHplcm8td2lkdGggc3BhY2UgaXNzdWVcbiAgICAgIF9zcGFuIHx8IChfc3BhbiA9IC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJub3RyYW5zbGF0ZVwiLFxuICAgICAgICBjaGlsZHJlbjogXCJcXHUyMDBCXCJcbiAgICAgIH0pKVxuICAgIH0pXG4gIH0pKTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE5vdGNoZWRPdXRsaW5lLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIFNlZSBbQ1NTIEFQSV0oI2NzcykgYmVsb3cgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgbGFiZWwuXG4gICAqL1xuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBvdXRsaW5lIGlzIG5vdGNoZWQgdG8gYWNjb21tb2RhdGUgdGhlIGxhYmVsLlxuICAgKi9cbiAgbm90Y2hlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0XG59IDogdm9pZCAwOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuaW1wb3J0IHsgaW5wdXRCYXNlQ2xhc3NlcyB9IGZyb20gJy4uL0lucHV0QmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0bGluZWRJbnB1dFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpT3V0bGluZWRJbnB1dCcsIHNsb3QpO1xufVxuY29uc3Qgb3V0bGluZWRJbnB1dENsYXNzZXMgPSBfZXh0ZW5kcyh7fSwgaW5wdXRCYXNlQ2xhc3NlcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpT3V0bGluZWRJbnB1dCcsIFsncm9vdCcsICdub3RjaGVkT3V0bGluZScsICdpbnB1dCddKSk7XG5leHBvcnQgZGVmYXVsdCBvdXRsaW5lZElucHV0Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjb21wb25lbnRzXCIsIFwiZnVsbFdpZHRoXCIsIFwiaW5wdXRDb21wb25lbnRcIiwgXCJsYWJlbFwiLCBcIm11bHRpbGluZVwiLCBcIm5vdGNoZWRcIiwgXCJzbG90c1wiLCBcInR5cGVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgcmVmVHlwZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IE5vdGNoZWRPdXRsaW5lIGZyb20gJy4vTm90Y2hlZE91dGxpbmUnO1xuaW1wb3J0IHVzZUZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sJztcbmltcG9ydCBmb3JtQ29udHJvbFN0YXRlIGZyb20gJy4uL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sU3RhdGUnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCBvdXRsaW5lZElucHV0Q2xhc3NlcywgeyBnZXRPdXRsaW5lZElucHV0VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9vdXRsaW5lZElucHV0Q2xhc3Nlcyc7XG5pbXBvcnQgSW5wdXRCYXNlLCB7IHJvb3RPdmVycmlkZXNSZXNvbHZlciBhcyBpbnB1dEJhc2VSb290T3ZlcnJpZGVzUmVzb2x2ZXIsIGlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIgYXMgaW5wdXRCYXNlSW5wdXRPdmVycmlkZXNSZXNvbHZlciwgSW5wdXRCYXNlUm9vdCwgSW5wdXRCYXNlQ29tcG9uZW50IGFzIElucHV0QmFzZUlucHV0IH0gZnJvbSAnLi4vSW5wdXRCYXNlL0lucHV0QmFzZSc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCddLFxuICAgIG5vdGNoZWRPdXRsaW5lOiBbJ25vdGNoZWRPdXRsaW5lJ10sXG4gICAgaW5wdXQ6IFsnaW5wdXQnXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0T3V0bGluZWRJbnB1dFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgY2xhc3NlcywgY29tcG9zZWRDbGFzc2VzKTtcbn07XG5jb25zdCBPdXRsaW5lZElucHV0Um9vdCA9IHN0eWxlZChJbnB1dEJhc2VSb290LCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlPdXRsaW5lZElucHV0JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyXG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICBjb25zdCBib3JkZXJDb2xvciA9IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/ICdyZ2JhKDAsIDAsIDAsIDAuMjMpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjMpJztcbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICBib3JkZXJSYWRpdXM6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFwZS5ib3JkZXJSYWRpdXMsXG4gICAgW2AmOmhvdmVyIC4ke291dGxpbmVkSW5wdXRDbGFzc2VzLm5vdGNoZWRPdXRsaW5lfWBdOiB7XG4gICAgICBib3JkZXJDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5wcmltYXJ5XG4gICAgfSxcbiAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgIFtgJjpob3ZlciAuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5ub3RjaGVkT3V0bGluZX1gXToge1xuICAgICAgICBib3JkZXJDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLmNvbW1vbi5vbkJhY2tncm91bmRDaGFubmVsfSAvIDAuMjMpYCA6IGJvcmRlckNvbG9yXG4gICAgICB9XG4gICAgfSxcbiAgICBbYCYuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5mb2N1c2VkfSAuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5ub3RjaGVkT3V0bGluZX1gXToge1xuICAgICAgYm9yZGVyQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sXG4gICAgICBib3JkZXJXaWR0aDogMlxuICAgIH0sXG4gICAgW2AmLiR7b3V0bGluZWRJbnB1dENsYXNzZXMuZXJyb3J9IC4ke291dGxpbmVkSW5wdXRDbGFzc2VzLm5vdGNoZWRPdXRsaW5lfWBdOiB7XG4gICAgICBib3JkZXJDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZXJyb3IubWFpblxuICAgIH0sXG4gICAgW2AmLiR7b3V0bGluZWRJbnB1dENsYXNzZXMuZGlzYWJsZWR9IC4ke291dGxpbmVkSW5wdXRDbGFzc2VzLm5vdGNoZWRPdXRsaW5lfWBdOiB7XG4gICAgICBib3JkZXJDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkXG4gICAgfVxuICB9LCBvd25lclN0YXRlLnN0YXJ0QWRvcm5tZW50ICYmIHtcbiAgICBwYWRkaW5nTGVmdDogMTRcbiAgfSwgb3duZXJTdGF0ZS5lbmRBZG9ybm1lbnQgJiYge1xuICAgIHBhZGRpbmdSaWdodDogMTRcbiAgfSwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYgX2V4dGVuZHMoe1xuICAgIHBhZGRpbmc6ICcxNi41cHggMTRweCdcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgICBwYWRkaW5nOiAnOC41cHggMTRweCdcbiAgfSkpO1xufSk7XG5jb25zdCBOb3RjaGVkT3V0bGluZVJvb3QgPSBzdHlsZWQoTm90Y2hlZE91dGxpbmUsIHtcbiAgbmFtZTogJ011aU91dGxpbmVkSW5wdXQnLFxuICBzbG90OiAnTm90Y2hlZE91dGxpbmUnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5ub3RjaGVkT3V0bGluZVxufSkoKHtcbiAgdGhlbWVcbn0pID0+IHtcbiAgY29uc3QgYm9yZGVyQ29sb3IgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyAncmdiYSgwLCAwLCAwLCAwLjIzKScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIzKSc7XG4gIHJldHVybiB7XG4gICAgYm9yZGVyQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5jb21tb24ub25CYWNrZ3JvdW5kQ2hhbm5lbH0gLyAwLjIzKWAgOiBib3JkZXJDb2xvclxuICB9O1xufSk7XG5jb25zdCBPdXRsaW5lZElucHV0SW5wdXQgPSBzdHlsZWQoSW5wdXRCYXNlSW5wdXQsIHtcbiAgbmFtZTogJ011aU91dGxpbmVkSW5wdXQnLFxuICBzbG90OiAnSW5wdXQnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogaW5wdXRCYXNlSW5wdXRPdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgcGFkZGluZzogJzE2LjVweCAxNHB4J1xufSwgIXRoZW1lLnZhcnMgJiYge1xuICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgIFdlYmtpdEJveFNoYWRvdzogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gbnVsbCA6ICcwIDAgMCAxMDBweCAjMjY2Nzk4IGluc2V0JyxcbiAgICBXZWJraXRUZXh0RmlsbENvbG9yOiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyBudWxsIDogJyNmZmYnLFxuICAgIGNhcmV0Q29sb3I6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IG51bGwgOiAnI2ZmZicsXG4gICAgYm9yZGVyUmFkaXVzOiAnaW5oZXJpdCdcbiAgfVxufSwgdGhlbWUudmFycyAmJiB7XG4gICcmOi13ZWJraXQtYXV0b2ZpbGwnOiB7XG4gICAgYm9yZGVyUmFkaXVzOiAnaW5oZXJpdCdcbiAgfSxcbiAgW3RoZW1lLmdldENvbG9yU2NoZW1lU2VsZWN0b3IoJ2RhcmsnKV06IHtcbiAgICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgICAgV2Via2l0Qm94U2hhZG93OiAnMCAwIDAgMTAwcHggIzI2Njc5OCBpbnNldCcsXG4gICAgICBXZWJraXRUZXh0RmlsbENvbG9yOiAnI2ZmZicsXG4gICAgICBjYXJldENvbG9yOiAnI2ZmZidcbiAgICB9XG4gIH1cbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHBhZGRpbmc6ICc4LjVweCAxNHB4J1xufSwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYge1xuICBwYWRkaW5nOiAwXG59LCBvd25lclN0YXRlLnN0YXJ0QWRvcm5tZW50ICYmIHtcbiAgcGFkZGluZ0xlZnQ6IDBcbn0sIG93bmVyU3RhdGUuZW5kQWRvcm5tZW50ICYmIHtcbiAgcGFkZGluZ1JpZ2h0OiAwXG59KSk7XG5jb25zdCBPdXRsaW5lZElucHV0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gT3V0bGluZWRJbnB1dChpblByb3BzLCByZWYpIHtcbiAgdmFyIF9yZWYsIF9zbG90cyRyb290LCBfcmVmMiwgX3Nsb3RzJGlucHV0LCBfUmVhY3QkRnJhZ21lbnQ7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aU91dGxpbmVkSW5wdXQnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjb21wb25lbnRzID0ge30sXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIGlucHV0Q29tcG9uZW50ID0gJ2lucHV0JyxcbiAgICAgIGxhYmVsLFxuICAgICAgbXVsdGlsaW5lID0gZmFsc2UsXG4gICAgICBub3RjaGVkLFxuICAgICAgc2xvdHMgPSB7fSxcbiAgICAgIHR5cGUgPSAndGV4dCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKHByb3BzKTtcbiAgY29uc3QgbXVpRm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbCgpO1xuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsnY29sb3InLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnZm9jdXNlZCcsICdoaWRkZW5MYWJlbCcsICdzaXplJywgJ3JlcXVpcmVkJ11cbiAgfSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcjogZmNzLmNvbG9yIHx8ICdwcmltYXJ5JyxcbiAgICBkaXNhYmxlZDogZmNzLmRpc2FibGVkLFxuICAgIGVycm9yOiBmY3MuZXJyb3IsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWQsXG4gICAgZm9ybUNvbnRyb2w6IG11aUZvcm1Db250cm9sLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBoaWRkZW5MYWJlbDogZmNzLmhpZGRlbkxhYmVsLFxuICAgIG11bHRpbGluZSxcbiAgICBzaXplOiBmY3Muc2l6ZSxcbiAgICB0eXBlXG4gIH0pO1xuICBjb25zdCBSb290U2xvdCA9IChfcmVmID0gKF9zbG90cyRyb290ID0gc2xvdHMucm9vdCkgIT0gbnVsbCA/IF9zbG90cyRyb290IDogY29tcG9uZW50cy5Sb290KSAhPSBudWxsID8gX3JlZiA6IE91dGxpbmVkSW5wdXRSb290O1xuICBjb25zdCBJbnB1dFNsb3QgPSAoX3JlZjIgPSAoX3Nsb3RzJGlucHV0ID0gc2xvdHMuaW5wdXQpICE9IG51bGwgPyBfc2xvdHMkaW5wdXQgOiBjb21wb25lbnRzLklucHV0KSAhPSBudWxsID8gX3JlZjIgOiBPdXRsaW5lZElucHV0SW5wdXQ7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dEJhc2UsIF9leHRlbmRzKHtcbiAgICBzbG90czoge1xuICAgICAgcm9vdDogUm9vdFNsb3QsXG4gICAgICBpbnB1dDogSW5wdXRTbG90XG4gICAgfSxcbiAgICByZW5kZXJTdWZmaXg6IHN0YXRlID0+IC8qI19fUFVSRV9fKi9fanN4KE5vdGNoZWRPdXRsaW5lUm9vdCwge1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5ub3RjaGVkT3V0bGluZSxcbiAgICAgIGxhYmVsOiBsYWJlbCAhPSBudWxsICYmIGxhYmVsICE9PSAnJyAmJiBmY3MucmVxdWlyZWQgPyBfUmVhY3QkRnJhZ21lbnQgfHwgKF9SZWFjdCRGcmFnbWVudCA9IC8qI19fUFVSRV9fKi9fanN4cyhSZWFjdC5GcmFnbWVudCwge1xuICAgICAgICBjaGlsZHJlbjogW2xhYmVsLCBcIlxcdTIwMDlcIiwgJyonXVxuICAgICAgfSkpIDogbGFiZWwsXG4gICAgICBub3RjaGVkOiB0eXBlb2Ygbm90Y2hlZCAhPT0gJ3VuZGVmaW5lZCcgPyBub3RjaGVkIDogQm9vbGVhbihzdGF0ZS5zdGFydEFkb3JubWVudCB8fCBzdGF0ZS5maWxsZWQgfHwgc3RhdGUuZm9jdXNlZClcbiAgICB9KSxcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICBpbnB1dENvbXBvbmVudDogaW5wdXRDb21wb25lbnQsXG4gICAgbXVsdGlsaW5lOiBtdWx0aWxpbmUsXG4gICAgcmVmOiByZWYsXG4gICAgdHlwZTogdHlwZVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IF9leHRlbmRzKHt9LCBjbGFzc2VzLCB7XG4gICAgICBub3RjaGVkT3V0bGluZTogbnVsbFxuICAgIH0pXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gT3V0bGluZWRJbnB1dC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgaGVscHMgdXNlcnMgdG8gZmlsbCBmb3JtcyBmYXN0ZXIsIGVzcGVjaWFsbHkgb24gbW9iaWxlIGRldmljZXMuXG4gICAqIFRoZSBuYW1lIGNhbiBiZSBjb25mdXNpbmcsIGFzIGl0J3MgbW9yZSBsaWtlIGFuIGF1dG9maWxsLlxuICAgKiBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgaXQgW2ZvbGxvd2luZyB0aGUgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybS1jb250cm9sLWluZnJhc3RydWN0dXJlLmh0bWwjYXV0b2ZpbGwpLlxuICAgKi9cbiAgYXV0b0NvbXBsZXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ3ByaW1hcnknYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeSddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RzYCBwcm9wIGluc3RlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIElucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBFbmQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBlbmRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnaW5wdXQnXG4gICAqL1xuICBpbnB1dENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBUaGUgbGFiZWwgb2YgdGhlIGBpbnB1dGAuIEl0IGlzIG9ubHkgdXNlZCBmb3IgbGF5b3V0LiBUaGUgYWN0dWFsIGxhYmVsbGluZ1xuICAgKiBpcyBoYW5kbGVkIGJ5IGBJbnB1dExhYmVsYC5cbiAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcuIFRoaXMgaXMgbm9ybWFsbHkgb2J0YWluZWQgdmlhIGNvbnRleHQgZnJvbVxuICAgKiBGb3JtQ29udHJvbC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ25vbmUnYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnXSksXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1pblJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSBbVGV4dGFyZWFBdXRvc2l6ZV0oL21hdGVyaWFsLXVpL3JlYWN0LXRleHRhcmVhLWF1dG9zaXplLykgZWxlbWVudCBpcyByZW5kZXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpbGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG91dGxpbmUgaXMgbm90Y2hlZCB0byBhY2NvbW1vZGF0ZSB0aGUgbGFiZWwuXG4gICAqL1xuICBub3RjaGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBzaG9ydCBoaW50IGRpc3BsYXllZCBpbiB0aGUgYGlucHV0YCBiZWZvcmUgdGhlIHVzZXIgZW50ZXJzIGEgdmFsdWUuXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEl0IHByZXZlbnRzIHRoZSB1c2VyIGZyb20gY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZFxuICAgKiAobm90IGZyb20gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZmllbGQpLlxuICAgKi9cbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICByb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c2AgcHJvcCwgd2hpY2ggd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFN0YXJ0IGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgc3RhcnRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVHlwZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LiBJdCBzaG91bGQgYmUgW2EgdmFsaWQgSFRNTDUgaW5wdXQgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0Zvcm1fJTNDaW5wdXQlM0VfdHlwZXMpLlxuICAgKiBAZGVmYXVsdCAndGV4dCdcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudCwgcmVxdWlyZWQgZm9yIGEgY29udHJvbGxlZCBjb21wb25lbnQuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueVxufSA6IHZvaWQgMDtcbk91dGxpbmVkSW5wdXQubXVpTmFtZSA9ICdJbnB1dCc7XG5leHBvcnQgZGVmYXVsdCBPdXRsaW5lZElucHV0OyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXBlclV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpUGFwZXInLCBzbG90KTtcbn1cbmNvbnN0IHBhcGVyQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVBhcGVyJywgWydyb290JywgJ3JvdW5kZWQnLCAnb3V0bGluZWQnLCAnZWxldmF0aW9uJywgJ2VsZXZhdGlvbjAnLCAnZWxldmF0aW9uMScsICdlbGV2YXRpb24yJywgJ2VsZXZhdGlvbjMnLCAnZWxldmF0aW9uNCcsICdlbGV2YXRpb241JywgJ2VsZXZhdGlvbjYnLCAnZWxldmF0aW9uNycsICdlbGV2YXRpb244JywgJ2VsZXZhdGlvbjknLCAnZWxldmF0aW9uMTAnLCAnZWxldmF0aW9uMTEnLCAnZWxldmF0aW9uMTInLCAnZWxldmF0aW9uMTMnLCAnZWxldmF0aW9uMTQnLCAnZWxldmF0aW9uMTUnLCAnZWxldmF0aW9uMTYnLCAnZWxldmF0aW9uMTcnLCAnZWxldmF0aW9uMTgnLCAnZWxldmF0aW9uMTknLCAnZWxldmF0aW9uMjAnLCAnZWxldmF0aW9uMjEnLCAnZWxldmF0aW9uMjInLCAnZWxldmF0aW9uMjMnLCAnZWxldmF0aW9uMjQnXSk7XG5leHBvcnQgZGVmYXVsdCBwYXBlckNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZWxldmF0aW9uXCIsIFwic3F1YXJlXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IGNoYWluUHJvcFR5cGVzLCBpbnRlZ2VyUHJvcFR5cGUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IGFscGhhIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCBnZXRPdmVybGF5QWxwaGEgZnJvbSAnLi4vc3R5bGVzL2dldE92ZXJsYXlBbHBoYSc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lJztcbmltcG9ydCB7IGdldFBhcGVyVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9wYXBlckNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBzcXVhcmUsXG4gICAgZWxldmF0aW9uLFxuICAgIHZhcmlhbnQsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgdmFyaWFudCwgIXNxdWFyZSAmJiAncm91bmRlZCcsIHZhcmlhbnQgPT09ICdlbGV2YXRpb24nICYmIGBlbGV2YXRpb24ke2VsZXZhdGlvbn1gXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFBhcGVyVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBQYXBlclJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aVBhcGVyJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdLCAhb3duZXJTdGF0ZS5zcXVhcmUgJiYgc3R5bGVzLnJvdW5kZWQsIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2VsZXZhdGlvbicgJiYgc3R5bGVzW2BlbGV2YXRpb24ke293bmVyU3RhdGUuZWxldmF0aW9ufWBdXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgdmFyIF90aGVtZSR2YXJzJG92ZXJsYXlzO1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYmFja2dyb3VuZC5wYXBlcixcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5wcmltYXJ5LFxuICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnYm94LXNoYWRvdycpXG4gIH0sICFvd25lclN0YXRlLnNxdWFyZSAmJiB7XG4gICAgYm9yZGVyUmFkaXVzOiB0aGVtZS5zaGFwZS5ib3JkZXJSYWRpdXNcbiAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgICBib3JkZXI6IGAxcHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5kaXZpZGVyfWBcbiAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZWxldmF0aW9uJyAmJiBfZXh0ZW5kcyh7XG4gICAgYm94U2hhZG93OiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhZG93c1tvd25lclN0YXRlLmVsZXZhdGlvbl1cbiAgfSwgIXRoZW1lLnZhcnMgJiYgdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnZGFyaycgJiYge1xuICAgIGJhY2tncm91bmRJbWFnZTogYGxpbmVhci1ncmFkaWVudCgke2FscGhhKCcjZmZmJywgZ2V0T3ZlcmxheUFscGhhKG93bmVyU3RhdGUuZWxldmF0aW9uKSl9LCAke2FscGhhKCcjZmZmJywgZ2V0T3ZlcmxheUFscGhhKG93bmVyU3RhdGUuZWxldmF0aW9uKSl9KWBcbiAgfSwgdGhlbWUudmFycyAmJiB7XG4gICAgYmFja2dyb3VuZEltYWdlOiAoX3RoZW1lJHZhcnMkb3ZlcmxheXMgPSB0aGVtZS52YXJzLm92ZXJsYXlzKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHZhcnMkb3ZlcmxheXNbb3duZXJTdGF0ZS5lbGV2YXRpb25dXG4gIH0pKTtcbn0pO1xuY29uc3QgUGFwZXIgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBQYXBlcihpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpUGFwZXInXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICAgIGVsZXZhdGlvbiA9IDEsXG4gICAgICBzcXVhcmUgPSBmYWxzZSxcbiAgICAgIHZhcmlhbnQgPSAnZWxldmF0aW9uJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29tcG9uZW50LFxuICAgIGVsZXZhdGlvbixcbiAgICBzcXVhcmUsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcbiAgICBpZiAodGhlbWUuc2hhZG93c1tlbGV2YXRpb25dID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFRoZSBlbGV2YXRpb24gcHJvdmlkZWQgPFBhcGVyIGVsZXZhdGlvbj17JHtlbGV2YXRpb259fT4gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgdGhlbWUuYCwgYFBsZWFzZSBtYWtlIHN1cmUgdGhhdCBcXGB0aGVtZS5zaGFkb3dzWyR7ZWxldmF0aW9ufV1cXGAgaXMgZGVmaW5lZC5gXS5qb2luKCdcXG4nKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChQYXBlclJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBQYXBlci5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogU2hhZG93IGRlcHRoLCBjb3JyZXNwb25kcyB0byBgZHBgIGluIHRoZSBzcGVjLlxuICAgKiBJdCBhY2NlcHRzIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI0IGluY2x1c2l2ZS5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgZWxldmF0aW9uOiBjaGFpblByb3BUeXBlcyhpbnRlZ2VyUHJvcFR5cGUsIHByb3BzID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBlbGV2YXRpb24sXG4gICAgICB2YXJpYW50XG4gICAgfSA9IHByb3BzO1xuICAgIGlmIChlbGV2YXRpb24gPiAwICYmIHZhcmlhbnQgPT09ICdvdXRsaW5lZCcpIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoYE1VSTogQ29tYmluaW5nIFxcYGVsZXZhdGlvbj17JHtlbGV2YXRpb259fVxcYCB3aXRoIFxcYHZhcmlhbnQ9XCIke3ZhcmlhbnR9XCJcXGAgaGFzIG5vIGVmZmVjdC4gRWl0aGVyIHVzZSBcXGBlbGV2YXRpb249ezB9XFxgIG9yIHVzZSBhIGRpZmZlcmVudCBcXGB2YXJpYW50XFxgLmApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHJvdW5kZWQgY29ybmVycyBhcmUgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzcXVhcmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKiBAZGVmYXVsdCAnZWxldmF0aW9uJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydlbGV2YXRpb24nLCAnb3V0bGluZWQnXSksIFByb3BUeXBlcy5zdHJpbmddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFBhcGVyOyJdLCJuYW1lcyI6WyJnZXRMaW5rVXRpbGl0eUNsYXNzIiwic2xvdCIsImdlbmVyYXRlVXRpbGl0eUNsYXNzIiwiZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyIsImNvbG9yVHJhbnNmb3JtYXRpb25zIiwicHJpbWFyeSIsInRleHRQcmltYXJ5Iiwic2Vjb25kYXJ5IiwidGV4dFNlY29uZGFyeSIsImVycm9yIiwidGhlbWUiLCJvd25lclN0YXRlIiwidHJhbnNmb3JtZWRDb2xvciIsImNvbG9yIiwidHJhbnNmb3JtRGVwcmVjYXRlZENvbG9ycyIsImNoYW5uZWxDb2xvciIsIl9leGNsdWRlZCIsIkxpbmtSb290Iiwic3R5bGVkIiwiVHlwb2dyYXBoeSIsIm5hbWUiLCJvdmVycmlkZXNSZXNvbHZlciIsInByb3BzIiwic3R5bGVzIiwicm9vdCIsImNhcGl0YWxpemUiLCJ1bmRlcmxpbmUiLCJjb21wb25lbnQiLCJidXR0b24iLCJ0ZXh0RGVjb3JhdGlvbiIsInRleHREZWNvcmF0aW9uQ29sb3IiLCJwb3NpdGlvbiIsIldlYmtpdFRhcEhpZ2hsaWdodENvbG9yIiwiYmFja2dyb3VuZENvbG9yIiwib3V0bGluZSIsImJvcmRlciIsIm1hcmdpbiIsImJvcmRlclJhZGl1cyIsInBhZGRpbmciLCJjdXJzb3IiLCJ1c2VyU2VsZWN0IiwidmVydGljYWxBbGlnbiIsIk1vekFwcGVhcmFuY2UiLCJXZWJraXRBcHBlYXJhbmNlIiwiYm9yZGVyU3R5bGUiLCJmb2N1c1Zpc2libGUiLCJpblByb3BzIiwicmVmIiwidXNlVGhlbWVQcm9wcyIsImNsYXNzTmFtZSIsIm9uQmx1ciIsIm9uRm9jdXMiLCJUeXBvZ3JhcGh5Q2xhc3NlcyIsInZhcmlhbnQiLCJzeCIsIm90aGVyIiwiaXNGb2N1c1Zpc2libGVSZWYiLCJoYW5kbGVCbHVyVmlzaWJsZSIsImhhbmRsZUZvY3VzVmlzaWJsZSIsImZvY3VzVmlzaWJsZVJlZiIsInVzZUlzRm9jdXNWaXNpYmxlIiwic2V0Rm9jdXNWaXNpYmxlIiwiaGFuZGxlclJlZiIsInVzZUZvcmtSZWYiLCJjbGFzc2VzIiwic2xvdHMiLCJjb21wb3NlQ2xhc3NlcyIsInVzZVV0aWxpdHlDbGFzc2VzIiwiY2xzeCIsImV2ZW50IiwiY3VycmVudCIsIk9iamVjdCIsImtleXMiLCJpbmNsdWRlcyIsIkFycmF5IiwiaXNBcnJheSIsImdldExpc3RVdGlsaXR5Q2xhc3MiLCJMaXN0Um9vdCIsImRpc2FibGVQYWRkaW5nIiwiZGVuc2UiLCJzdWJoZWFkZXIiLCJsaXN0U3R5bGUiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSIsImNoaWxkcmVuIiwiY29udGV4dCIsIkxpc3RDb250ZXh0IiwiUHJvdmlkZXIiLCJ2YWx1ZSIsImFzIiwiZ2V0TGlzdEl0ZW1VdGlsaXR5Q2xhc3MiLCJnZXRMaXN0SXRlbVNlY29uZGFyeUFjdGlvbkNsYXNzZXNVdGlsaXR5Q2xhc3MiLCJMaXN0SXRlbVNlY29uZGFyeUFjdGlvblJvb3QiLCJkaXNhYmxlR3V0dGVycyIsInJpZ2h0IiwidG9wIiwidHJhbnNmb3JtIiwiTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24iLCJtdWlOYW1lIiwiX2V4Y2x1ZGVkMiIsIkxpc3RJdGVtUm9vdCIsImFsaWduSXRlbXMiLCJhbGlnbkl0ZW1zRmxleFN0YXJ0IiwiZGl2aWRlciIsImd1dHRlcnMiLCJoYXNTZWNvbmRhcnlBY3Rpb24iLCJzZWNvbmRhcnlBY3Rpb24iLCJkaXNwbGF5IiwianVzdGlmeUNvbnRlbnQiLCJ3aWR0aCIsImJveFNpemluZyIsInRleHRBbGlnbiIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0IiwibGlzdEl0ZW1CdXR0b25DbGFzc2VzIiwidmFycyIsInBhbGV0dGUiLCJhY3Rpb24iLCJmb2N1cyIsInNlbGVjdGVkIiwibWFpbkNoYW5uZWwiLCJzZWxlY3RlZE9wYWNpdHkiLCJtYWluIiwiZm9jdXNPcGFjaXR5IiwiZGlzYWJsZWQiLCJvcGFjaXR5IiwiZGlzYWJsZWRPcGFjaXR5IiwiYm9yZGVyQm90dG9tIiwiYmFja2dyb3VuZENsaXAiLCJ0cmFuc2l0aW9uIiwidHJhbnNpdGlvbnMiLCJjcmVhdGUiLCJkdXJhdGlvbiIsInNob3J0ZXN0IiwiaG92ZXIiLCJob3Zlck9wYWNpdHkiLCJMaXN0SXRlbUNvbnRhaW5lciIsImNvbnRhaW5lciIsImF1dG9Gb2N1cyIsImNoaWxkcmVuUHJvcCIsImNvbXBvbmVudFByb3AiLCJjb21wb25lbnRzIiwiY29tcG9uZW50c1Byb3BzIiwiQ29udGFpbmVyQ29tcG9uZW50IiwiQ29udGFpbmVyUHJvcHMiLCJDb250YWluZXJDbGFzc05hbWUiLCJmb2N1c1Zpc2libGVDbGFzc05hbWUiLCJzbG90UHJvcHMiLCJjaGlsZENvbnRleHQiLCJsaXN0SXRlbVJlZiIsInVzZUVuaGFuY2VkRWZmZWN0IiwidG9BcnJheSIsImxlbmd0aCIsImlzTXVpRWxlbWVudCIsImhhbmRsZVJlZiIsIlJvb3QiLCJyb290UHJvcHMiLCJjb21wb25lbnRQcm9wcyIsIkNvbXBvbmVudCIsIkJ1dHRvbkJhc2UiLCJpc0hvc3RDb21wb25lbnQiLCJwb3AiLCJMaXN0SXRlbUJ1dHRvblJvb3QiLCJzaG91bGRGb3J3YXJkUHJvcCIsInByb3AiLCJmbGV4R3JvdyIsIm1pbldpZHRoIiwiY29tcG9zZWRDbGFzc2VzIiwiaHJlZiIsInRvIiwiZ2V0TGlzdEl0ZW1CdXR0b25VdGlsaXR5Q2xhc3MiLCJuZXh0SXRlbSIsImxpc3QiLCJpdGVtIiwiZGlzYWJsZUxpc3RXcmFwIiwiZmlyc3RDaGlsZCIsIm5leHRFbGVtZW50U2libGluZyIsInByZXZpb3VzSXRlbSIsImxhc3RDaGlsZCIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJ0ZXh0Q3JpdGVyaWFNYXRjaGVzIiwibmV4dEZvY3VzIiwidGV4dENyaXRlcmlhIiwidW5kZWZpbmVkIiwidGV4dCIsImlubmVyVGV4dCIsInRleHRDb250ZW50IiwidHJpbSIsInRvTG93ZXJDYXNlIiwicmVwZWF0aW5nIiwiaW5kZXhPZiIsImpvaW4iLCJtb3ZlRm9jdXMiLCJjdXJyZW50Rm9jdXMiLCJkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlIiwidHJhdmVyc2FsRnVuY3Rpb24iLCJ3cmFwcGVkT25jZSIsIm5leHRGb2N1c0Rpc2FibGVkIiwiZ2V0QXR0cmlidXRlIiwiaGFzQXR0cmlidXRlIiwiYWN0aW9ucyIsImF1dG9Gb2N1c0l0ZW0iLCJvbktleURvd24iLCJsaXN0UmVmIiwidGV4dENyaXRlcmlhUmVmIiwicHJldmlvdXNLZXlNYXRjaGVkIiwibGFzdFRpbWUiLCJhZGp1c3RTdHlsZUZvclNjcm9sbGJhciIsImNvbnRhaW5lckVsZW1lbnQiLCJub0V4cGxpY2l0V2lkdGgiLCJzdHlsZSIsImNsaWVudEhlaWdodCIsInNjcm9sbGJhclNpemUiLCJnZXRTY3JvbGxiYXJTaXplIiwib3duZXJEb2N1bWVudCIsImRpcmVjdGlvbiIsImFjdGl2ZUl0ZW1JbmRleCIsImZvckVhY2giLCJjaGlsZCIsImluZGV4IiwibXVpU2tpcExpc3RIaWdobGlnaHQiLCJ0eXBlIiwiaXRlbXMiLCJtYXAiLCJuZXdDaGlsZFByb3BzIiwidGFiSW5kZXgiLCJMaXN0Iiwicm9sZSIsImtleSIsImFjdGl2ZUVsZW1lbnQiLCJwcmV2ZW50RGVmYXVsdCIsImNyaXRlcmlhIiwibG93ZXJLZXkiLCJjdXJyVGltZSIsInBlcmZvcm1hbmNlIiwibm93IiwicHVzaCIsImtlZXBGb2N1c09uQ3VycmVudCIsImdldE1vZGFsVXRpbGl0eUNsYXNzIiwiTW9kYWxSb290Iiwib3BlbiIsImV4aXRlZCIsImhpZGRlbiIsInpJbmRleCIsIm1vZGFsIiwiYm90dG9tIiwibGVmdCIsInZpc2liaWxpdHkiLCJNb2RhbEJhY2tkcm9wIiwiQmFja2Ryb3AiLCJiYWNrZHJvcCIsIl9yZWYiLCJfc2xvdHMkcm9vdCIsIl9yZWYyIiwiX3Nsb3RzJGJhY2tkcm9wIiwiX3Nsb3RQcm9wcyRyb290IiwiX3Nsb3RQcm9wcyRiYWNrZHJvcCIsIkJhY2tkcm9wQ29tcG9uZW50IiwiQmFja2Ryb3BQcm9wcyIsImNsb3NlQWZ0ZXJUcmFuc2l0aW9uIiwiZGlzYWJsZUF1dG9Gb2N1cyIsImRpc2FibGVFbmZvcmNlRm9jdXMiLCJkaXNhYmxlRXNjYXBlS2V5RG93biIsImRpc2FibGVQb3J0YWwiLCJkaXNhYmxlUmVzdG9yZUZvY3VzIiwiZGlzYWJsZVNjcm9sbExvY2siLCJoaWRlQmFja2Ryb3AiLCJrZWVwTW91bnRlZCIsIm9uQmFja2Ryb3BDbGljayIsInByb3BzV2l0aERlZmF1bHRzIiwiZ2V0Um9vdFByb3BzIiwiZ2V0QmFja2Ryb3BQcm9wcyIsImdldFRyYW5zaXRpb25Qcm9wcyIsInBvcnRhbFJlZiIsImlzVG9wTW9kYWwiLCJoYXNUcmFuc2l0aW9uIiwidXNlTW9kYWwiLCJyb290UmVmIiwiY2hpbGRQcm9wcyIsIm9uRW50ZXIiLCJvbkV4aXRlZCIsIlJvb3RTbG90IiwiQmFja2Ryb3BTbG90Iiwicm9vdFNsb3RQcm9wcyIsImJhY2tkcm9wU2xvdFByb3BzIiwidXNlU2xvdFByb3BzIiwiZWxlbWVudFR5cGUiLCJleHRlcm5hbFNsb3RQcm9wcyIsImV4dGVybmFsRm9yd2FyZGVkUHJvcHMiLCJnZXRTbG90UHJvcHMiLCJhZGRpdGlvbmFsUHJvcHMiLCJiYWNrZHJvcFByb3BzIiwib3RoZXJIYW5kbGVycyIsIm9uQ2xpY2siLCJlIiwiUG9ydGFsIiwiRm9jdXNUcmFwIiwiaXNFbmFibGVkIiwiZ2V0UG9wb3ZlclV0aWxpdHlDbGFzcyIsIl9leGNsdWRlZDMiLCJnZXRPZmZzZXRUb3AiLCJyZWN0IiwidmVydGljYWwiLCJvZmZzZXQiLCJoZWlnaHQiLCJnZXRPZmZzZXRMZWZ0IiwiaG9yaXpvbnRhbCIsImdldFRyYW5zZm9ybU9yaWdpblZhbHVlIiwidHJhbnNmb3JtT3JpZ2luIiwibiIsInJlc29sdmVBbmNob3JFbCIsImFuY2hvckVsIiwiUG9wb3ZlclJvb3QiLCJQb3BvdmVyUGFwZXIiLCJQYXBlciIsInBhcGVyIiwib3ZlcmZsb3dZIiwib3ZlcmZsb3dYIiwibWluSGVpZ2h0IiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJfc2xvdFByb3BzJHBhcGVyIiwiX3Nsb3RzJHBhcGVyIiwiYW5jaG9yT3JpZ2luIiwiYW5jaG9yUG9zaXRpb24iLCJhbmNob3JSZWZlcmVuY2UiLCJjb250YWluZXJQcm9wIiwiZWxldmF0aW9uIiwibWFyZ2luVGhyZXNob2xkIiwiUGFwZXJQcm9wcyIsIlBhcGVyUHJvcHNQcm9wIiwiVHJhbnNpdGlvbkNvbXBvbmVudCIsIkdyb3ciLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJ0cmFuc2l0aW9uRHVyYXRpb25Qcm9wIiwiVHJhbnNpdGlvblByb3BzIiwib25FbnRlcmluZyIsImV4dGVybmFsUGFwZXJTbG90UHJvcHMiLCJwYXBlclJlZiIsImhhbmRsZVBhcGVyUmVmIiwiZ2V0QW5jaG9yT2Zmc2V0IiwicmVzb2x2ZWRBbmNob3JFbCIsImFuY2hvclJlY3QiLCJub2RlVHlwZSIsImJvZHkiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJnZXRUcmFuc2Zvcm1PcmlnaW4iLCJlbGVtUmVjdCIsImdldFBvc2l0aW9uaW5nU3R5bGUiLCJlbGVtZW50Iiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJlbGVtVHJhbnNmb3JtT3JpZ2luIiwiYW5jaG9yT2Zmc2V0IiwiY29udGFpbmVyV2luZG93Iiwib3duZXJXaW5kb3ciLCJoZWlnaHRUaHJlc2hvbGQiLCJpbm5lckhlaWdodCIsIndpZHRoVGhyZXNob2xkIiwiaW5uZXJXaWR0aCIsImRpZmYiLCJNYXRoIiwicm91bmQiLCJpc1Bvc2l0aW9uZWQiLCJzZXRJc1Bvc2l0aW9uZWQiLCJzZXRQb3NpdGlvbmluZ1N0eWxlcyIsInBvc2l0aW9uaW5nIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ1cGRhdGVQb3NpdGlvbiIsImhhbmRsZVJlc2l6ZSIsImRlYm91bmNlIiwiY2xlYXIiLCJtdWlTdXBwb3J0QXV0byIsIlBhcGVyU2xvdCIsInBhcGVyUHJvcHMiLCJfdXNlU2xvdFByb3BzIiwiaW52aXNpYmxlIiwicm9vdFNsb3RQcm9wc1Byb3AiLCJhcHBlYXIiLCJpbiIsImlzQXBwZWFyaW5nIiwidGltZW91dCIsImdldE1lbnVVdGlsaXR5Q2xhc3MiLCJSVExfT1JJR0lOIiwiTFRSX09SSUdJTiIsIk1lbnVSb290IiwiTWVudVBhcGVyIiwiV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmciLCJNZW51TWVudUxpc3QiLCJkaXNhYmxlQXV0b0ZvY3VzSXRlbSIsIk1lbnVMaXN0UHJvcHMiLCJvbkNsb3NlIiwiUG9wb3ZlckNsYXNzZXMiLCJ1c2VUaGVtZSIsImlzUnRsIiwibWVudUxpc3RBY3Rpb25zUmVmIiwicGFwZXJFeHRlcm5hbFNsb3RQcm9wcyIsInBhcGVyU2xvdFByb3BzIiwiZ2V0TWVudUl0ZW1VdGlsaXR5Q2xhc3MiLCJNZW51SXRlbVJvb3QiLCJ0eXBvZ3JhcGh5IiwiYm9keTEiLCJ3aGl0ZVNwYWNlIiwiZGl2aWRlckNsYXNzZXMiLCJtYXJnaW5Ub3AiLCJzcGFjaW5nIiwibWFyZ2luQm90dG9tIiwiaW5zZXQiLCJtYXJnaW5MZWZ0IiwiYnJlYWtwb2ludHMiLCJ1cCIsImJvZHkyIiwiZm9udFNpemUiLCJ0YWJJbmRleFByb3AiLCJtZW51SXRlbVJlZiIsImdldE5hdGl2ZVNlbGVjdFV0aWxpdHlDbGFzc2VzIiwibmF0aXZlU2VsZWN0U2VsZWN0U3R5bGVzIiwiY29tbW9uIiwib25CYWNrZ3JvdW5kQ2hhbm5lbCIsIm1vZGUiLCJiYWNrZ3JvdW5kIiwic2hhcGUiLCJOYXRpdmVTZWxlY3RTZWxlY3QiLCJzZWxlY3QiLCJtdWx0aXBsZSIsIm5hdGl2ZVNlbGVjdEljb25TdHlsZXMiLCJwb2ludGVyRXZlbnRzIiwiYWN0aXZlIiwiTmF0aXZlU2VsZWN0SWNvbiIsImljb24iLCJpY29uT3BlbiIsIkljb25Db21wb25lbnQiLCJpbnB1dFJlZiIsIl9zcGFuIiwiTm90Y2hlZE91dGxpbmVSb290IiwiYm9yZGVyV2lkdGgiLCJvdmVyZmxvdyIsIk5vdGNoZWRPdXRsaW5lTGVnZW5kIiwiZmxvYXQiLCJ3aXRoTGFiZWwiLCJsaW5lSGVpZ2h0IiwiZWFzaW5nIiwiZWFzZU91dCIsIm5vdGNoZWQiLCJkZWxheSIsImdldE91dGxpbmVkSW5wdXRVdGlsaXR5Q2xhc3MiLCJpbnB1dEJhc2VDbGFzc2VzIiwiT3V0bGluZWRJbnB1dFJvb3QiLCJJbnB1dEJhc2UiLCJib3JkZXJDb2xvciIsIm5vdGNoZWRPdXRsaW5lIiwiZm9jdXNlZCIsInN0YXJ0QWRvcm5tZW50IiwiZW5kQWRvcm5tZW50IiwibXVsdGlsaW5lIiwic2l6ZSIsImxhYmVsIiwiT3V0bGluZWRJbnB1dElucHV0IiwiV2Via2l0Qm94U2hhZG93IiwiV2Via2l0VGV4dEZpbGxDb2xvciIsImNhcmV0Q29sb3IiLCJnZXRDb2xvclNjaGVtZVNlbGVjdG9yIiwiT3V0bGluZWRJbnB1dCIsIl9zbG90cyRpbnB1dCIsIl9SZWFjdCRGcmFnbWVudCIsImZ1bGxXaWR0aCIsImlucHV0Q29tcG9uZW50IiwiaW5wdXQiLCJtdWlGb3JtQ29udHJvbCIsInVzZUZvcm1Db250cm9sIiwiZmNzIiwiZm9ybUNvbnRyb2xTdGF0ZSIsInN0YXRlcyIsImZvcm1Db250cm9sIiwiaGlkZGVuTGFiZWwiLCJJbnB1dFNsb3QiLCJJbnB1dCIsInJlbmRlclN1ZmZpeCIsInN0YXRlIiwicmVxdWlyZWQiLCJCb29sZWFuIiwiZmlsbGVkIiwiZ2V0UGFwZXJVdGlsaXR5Q2xhc3MiLCJQYXBlclJvb3QiLCJzcXVhcmUiLCJyb3VuZGVkIiwiX3RoZW1lJHZhcnMkb3ZlcmxheXMiLCJib3hTaGFkb3ciLCJzaGFkb3dzIiwiYmFja2dyb3VuZEltYWdlIiwiZ2V0T3ZlcmxheUFscGhhIiwib3ZlcmxheXMiXSwic291cmNlUm9vdCI6IiJ9