"use strict";(self.webpackChunksrsrfl_react=self.webpackChunksrsrfl_react||[]).push([[159],{1079:(e,t,o)=>{o.d(t,{Z:()=>S});var n=o(3366),r=o(7462),a=o(7294),i=o(512),s=o(4780),l=o(8216),d=o(948),c=o(1657),u=o(9674),p=o(1705),m=o(2658),v=o(1588),b=o(4867);function h(e){return(0,b.Z)("MuiLink",e)}const f=(0,v.Z)("MuiLink",["root","underlineNone","underlineHover","underlineAlways","button","focusVisible"]);var g=o(4844),Z=o(1796);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,g.DW)(e,`palette.${o}`,!1)||t.color,r=(0,g.DW)(e,`palette.${o}Channel`);return"vars"in e&&r?`rgba(${r} / 0.4)`:(0,Z.Fq)(n,.4)};var P=o(5893);const C=["className","color","component","onBlur","onFocus","TypographyClasses","underline","variant","sx"],w=(0,d.ZP)(m.Z,{name:"MuiLink",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,t[`underline${(0,l.Z)(o.underline)}`],"button"===o.component&&t.button]}})((({theme:e,ownerState:t})=>(0,r.Z)({},"none"===t.underline&&{textDecoration:"none"},"hover"===t.underline&&{textDecoration:"none","&:hover":{textDecoration:"underline"}},"always"===t.underline&&(0,r.Z)({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"},[`&.${f.focusVisible}`]:{outline:"auto"}}))),S=a.forwardRef((function(e,t){const o=(0,c.Z)({props:e,name:"MuiLink"}),{className:d,color:m="primary",component:v="a",onBlur:b,onFocus:f,TypographyClasses:g,underline:Z="always",variant:x="inherit",sx:S}=o,k=(0,n.Z)(o,C),{isFocusVisibleRef:M,onBlur:R,onFocus:$,ref:O}=(0,u.Z)(),[F,I]=a.useState(!1),N=(0,p.Z)(t,O),L=(0,r.Z)({},o,{color:m,component:v,focusVisible:F,underline:Z,variant:x}),T=(e=>{const{classes:t,component:o,focusVisible:n,underline:r}=e,a={root:["root",`underline${(0,l.Z)(r)}`,"button"===o&&"button",n&&"focusVisible"]};return(0,s.Z)(a,h,t)})(L);return(0,P.jsx)(w,(0,r.Z)({color:m,className:(0,i.Z)(T.root,d),classes:g,component:v,onBlur:e=>{R(e),!1===M.current&&I(!1),b&&b(e)},onFocus:e=>{$(e),!0===M.current&&I(!0),f&&f(e)},ref:N,ownerState:L,variant:x,sx:[...Object.keys(y).includes(m)?[]:[{color:m}],...Array.isArray(S)?S:[S]]},k))}))},2440:(e,t,o)=>{o.d(t,{Z:()=>f});var n=o(3366),r=o(7462),a=o(7294),i=o(512),s=o(4780),l=o(948),d=o(1657),c=o(9773),u=o(1588),p=o(4867);function m(e){return(0,p.Z)("MuiList",e)}(0,u.Z)("MuiList",["root","padding","dense","subheader"]);var v=o(5893);const b=["children","className","component","dense","disablePadding","subheader"],h=(0,l.ZP)("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.Z)({listStyle:"none",margin:0,padding:0,position:"relative"},!e.disablePadding&&{paddingTop:8,paddingBottom:8},e.subheader&&{paddingTop:0}))),f=a.forwardRef((function(e,t){const o=(0,d.Z)({props:e,name:"MuiList"}),{children:l,className:u,component:p="ul",dense:f=!1,disablePadding:g=!1,subheader:Z}=o,y=(0,n.Z)(o,b),x=a.useMemo((()=>({dense:f})),[f]),P=(0,r.Z)({},o,{component:p,dense:f,disablePadding:g}),C=(e=>{const{classes:t,disablePadding:o,dense:n,subheader:r}=e,a={root:["root",!o&&"padding",n&&"dense",r&&"subheader"]};return(0,s.Z)(a,m,t)})(P);return(0,v.jsx)(c.Z.Provider,{value:x,children:(0,v.jsxs)(h,(0,r.Z)({as:p,className:(0,i.Z)(C.root,u),ref:t,ownerState:P},y,{children:[Z,l]}))})}))},9773:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o(7294).createContext({})},576:(e,t,o)=>{o.d(t,{ZP:()=>I});var n=o(3366),r=o(7462),a=o(7294),i=o(512),s=o(4780),l=o(8442),d=o(1796),c=o(948),u=o(1657),p=o(539),m=o(6798),v=o(8974),b=o(1705),h=o(9773),f=o(1588),g=o(4867);function Z(e){return(0,g.Z)("MuiListItem",e)}const y=(0,f.Z)("MuiListItem",["root","container","focusVisible","dense","alignItemsFlexStart","disabled","divider","gutters","padding","button","secondaryAction","selected"]);var x=o(8686);function P(e){return(0,g.Z)("MuiListItemSecondaryAction",e)}(0,f.Z)("MuiListItemSecondaryAction",["root","disableGutters"]);var C=o(5893);const w=["className"],S=(0,c.ZP)("div",{name:"MuiListItemSecondaryAction",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,o.disableGutters&&t.disableGutters]}})((({ownerState:e})=>(0,r.Z)({position:"absolute",right:16,top:"50%",transform:"translateY(-50%)"},e.disableGutters&&{right:0}))),k=a.forwardRef((function(e,t){const o=(0,u.Z)({props:e,name:"MuiListItemSecondaryAction"}),{className:l}=o,d=(0,n.Z)(o,w),c=a.useContext(h.Z),p=(0,r.Z)({},o,{disableGutters:c.disableGutters}),m=(e=>{const{disableGutters:t,classes:o}=e,n={root:["root",t&&"disableGutters"]};return(0,s.Z)(n,P,o)})(p);return(0,C.jsx)(S,(0,r.Z)({className:(0,i.Z)(m.root,l),ownerState:p,ref:t},d))}));k.muiName="ListItemSecondaryAction";const M=k,R=["className"],$=["alignItems","autoFocus","button","children","className","component","components","componentsProps","ContainerComponent","ContainerProps","dense","disabled","disableGutters","disablePadding","divider","focusVisibleClassName","secondaryAction","selected","slotProps","slots"],O=(0,c.ZP)("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.Z)({display:"flex",justifyContent:"flex-start",alignItems:"center",position:"relative",textDecoration:"none",width:"100%",boxSizing:"border-box",textAlign:"left"},!t.disablePadding&&(0,r.Z)({paddingTop:8,paddingBottom:8},t.dense&&{paddingTop:4,paddingBottom:4},!t.disableGutters&&{paddingLeft:16,paddingRight:16},!!t.secondaryAction&&{paddingRight:48}),!!t.secondaryAction&&{[`& > .${x.Z.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.Fq)(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.Fq)(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.Fq)(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.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity)}}},t.hasSecondaryAction&&{paddingRight:48}))),F=(0,c.ZP)("li",{name:"MuiListItem",slot:"Container",overridesResolver:(e,t)=>t.container})({position:"relative"}),I=a.forwardRef((function(e,t){const o=(0,u.Z)({props:e,name:"MuiListItem"}),{alignItems:d="center",autoFocus:c=!1,button:f=!1,children:g,className:x,component:P,components:w={},componentsProps:S={},ContainerComponent:k="li",ContainerProps:{className:I}={},dense:N=!1,disabled:L=!1,disableGutters:T=!1,disablePadding:A=!1,divider:E=!1,focusVisibleClassName:j,secondaryAction:B,selected:D=!1,slotProps:z={},slots:G={}}=o,V=(0,n.Z)(o.ContainerProps,R),W=(0,n.Z)(o,$),q=a.useContext(h.Z),H=a.useMemo((()=>({dense:N||q.dense||!1,alignItems:d,disableGutters:T})),[d,q.dense,N,T]),K=a.useRef(null);(0,v.Z)((()=>{c&&K.current&&K.current.focus()}),[c]);const X=a.Children.toArray(g),_=X.length&&(0,m.Z)(X[X.length-1],["ListItemSecondaryAction"]),U=(0,r.Z)({},o,{alignItems:d,autoFocus:c,button:f,dense:H.dense,disabled:L,disableGutters:T,disablePadding:A,divider:E,hasSecondaryAction:_,selected:D}),Y=(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.Z)(p,Z,n)})(U),J=(0,b.Z)(K,t),Q=G.root||w.Root||O,ee=z.root||S.root||{},te=(0,r.Z)({className:(0,i.Z)(Y.root,ee.className,x),disabled:L},W);let oe=P||"li";return f&&(te.component=P||"div",te.focusVisibleClassName=(0,i.Z)(y.focusVisible,j),oe=p.Z),_?(oe=te.component||P?oe:"div","li"===k&&("li"===oe?oe="div":"li"===te.component&&(te.component="div")),(0,C.jsx)(h.Z.Provider,{value:H,children:(0,C.jsxs)(F,(0,r.Z)({as:k,className:(0,i.Z)(Y.container,I),ref:J,ownerState:U},V,{children:[(0,C.jsx)(Q,(0,r.Z)({},ee,!(0,l.X)(Q)&&{as:oe,ownerState:(0,r.Z)({},U,ee.ownerState)},te,{children:X})),X.pop()]}))})):(0,C.jsx)(h.Z.Provider,{value:H,children:(0,C.jsxs)(Q,(0,r.Z)({},ee,{as:oe,ref:J},!(0,l.X)(Q)&&{ownerState:(0,r.Z)({},U,ee.ownerState)},te,{children:[X,B&&(0,C.jsx)(M,{children:B})]}))})}))},8619:(e,t,o)=>{o.d(t,{Z:()=>Z});var n=o(3366),r=o(7462),a=o(7294),i=o(512),s=o(4780),l=o(1796),d=o(948),c=o(1657),u=o(539),p=o(8974),m=o(1705),v=o(9773),b=o(8686),h=o(5893);const f=["alignItems","autoFocus","component","children","dense","disableGutters","divider","focusVisibleClassName","selected","className"],g=(0,d.ZP)(u.Z,{shouldForwardProp:e=>(0,d.FO)(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.Z)({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.Z.selected}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / ${e.vars.palette.action.selectedOpacity})`:(0,l.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity),[`&.${b.Z.focusVisible}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.focusOpacity}))`:(0,l.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.focusOpacity)}},[`&.${b.Z.selected}:hover`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.hoverOpacity}))`:(0,l.Fq)(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.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity)}},[`&.${b.Z.focusVisible}`]:{backgroundColor:(e.vars||e).palette.action.focus},[`&.${b.Z.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}))),Z=a.forwardRef((function(e,t){const o=(0,c.Z)({props:e,name:"MuiListItemButton"}),{alignItems:l="center",autoFocus:d=!1,component:u="div",children:Z,dense:y=!1,disableGutters:x=!1,divider:P=!1,focusVisibleClassName:C,selected:w=!1,className:S}=o,k=(0,n.Z)(o,f),M=a.useContext(v.Z),R=a.useMemo((()=>({dense:y||M.dense||!1,alignItems:l,disableGutters:x})),[l,M.dense,y,x]),$=a.useRef(null);(0,p.Z)((()=>{d&&$.current&&$.current.focus()}),[d]);const O=(0,r.Z)({},o,{alignItems:l,dense:R.dense,disableGutters:x,divider:P,selected:w}),F=(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.Z)(c,b.t,o);return(0,r.Z)({},o,u)})(O),I=(0,m.Z)($,t);return(0,h.jsx)(v.Z.Provider,{value:R,children:(0,h.jsx)(g,(0,r.Z)({ref:I,href:k.href||k.to,component:(k.href||k.to)&&"div"===u?"button":u,focusVisibleClassName:(0,i.Z)(F.focusVisible,C),ownerState:O,className:(0,i.Z)(F.root,S)},k,{classes:F,children:Z}))})}))},8686:(e,t,o)=>{o.d(t,{Z:()=>i,t:()=>a});var n=o(1588),r=o(4867);function a(e){return(0,r.Z)("MuiListItemButton",e)}const i=(0,n.Z)("MuiListItemButton",["root","focusVisible","dense","alignItemsFlexStart","disabled","divider","gutters","selected"])},2150:(e,t,o)=>{o.d(t,{Z:()=>ae});var n=o(7462),r=o(3366),a=o(7294),i=(o(9864),o(512)),s=o(4780),l=o(4391),d=o(8038),c=o(2440),u=o(256),p=o(1705),m=o(8974),v=o(5893);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 f(e,t,o){return e===t?o?e.firstChild:e.lastChild:t&&t.previousElementSibling?t.previousElementSibling:o?null:e.lastChild}function g(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 Z(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")&&g(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:P=!1,onKeyDown:C,variant:w="selectedMenu"}=e,S=(0,r.Z)(e,b),k=a.useRef(null),M=a.useRef({keys:[],repeating:!0,previousKeyMatched:!0,lastTime:null});(0,m.Z)((()=>{i&&k.current.focus()}),[i]),a.useImperativeHandle(o,(()=>({adjustStyleForScrollbar:(e,t)=>{const o=!k.current.style.width;if(e.clientHeight{a.isValidElement(e)?(e.props.disabled||("selectedMenu"===w&&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 O=a.Children.map(l,((e,t)=>{if(t===$){const t={};return s&&(t.autoFocus=!0),void 0===e.props.tabIndex&&"selectedMenu"===w&&(t.tabIndex=0),a.cloneElement(e,t)}return e}));return(0,v.jsx)(c.Z,(0,n.Z)({role:"menu",ref:R,className:y,onKeyDown:e=>{const t=k.current,o=e.key,n=(0,d.Z)(t).activeElement;if("ArrowDown"===o)e.preventDefault(),Z(t,n,P,x,h);else if("ArrowUp"===o)e.preventDefault(),Z(t,n,P,x,f);else if("Home"===o)e.preventDefault(),Z(t,null,P,x,h);else if("End"===o)e.preventDefault(),Z(t,null,P,x,f);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&&g(n,r);r.previousKeyMatched&&(s||Z(t,n,!1,x,h,r))?e.preventDefault():r.previousKeyMatched=!1}C&&C(e)},tabIndex:i?0:-1},S,{children:O}))}));var x=o(8442),P=o(948),C=o(1657),w=o(7144),S=o(5340),k=o(6514),M=o(6556),R=o(3470),$=o(8385),O=o(4567),F=o(1588),I=o(4867);function N(e){return(0,I.Z)("MuiModal",e)}(0,F.Z)("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,P.ZP)("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.Z)({position:"fixed",zIndex:(e.vars||e).zIndex.modal,right:0,bottom:0,top:0,left:0},!t.open&&t.exited&&{visibility:"hidden"}))),A=(0,P.ZP)(O.Z,{name:"MuiModal",slot:"Backdrop",overridesResolver:(e,t)=>t.backdrop})({zIndex:-1}),E=a.forwardRef((function(e,t){var o,d,c,u,p,m;const b=(0,C.Z)({name:"MuiModal",props:e}),{BackdropComponent:h=A,BackdropProps:f,className:g,closeAfterTransition:Z=!1,children:y,container:x,component:P,components:w={},componentsProps:S={},disableAutoFocus:k=!1,disableEnforceFocus:O=!1,disableEscapeKeyDown:F=!1,disablePortal:I=!1,disableRestoreFocus:E=!1,disableScrollLock:j=!1,hideBackdrop:B=!1,keepMounted:D=!1,onBackdropClick:z,open:G,slotProps:V,slots:W}=b,q=(0,r.Z)(b,L),H=(0,n.Z)({},b,{closeAfterTransition:Z,disableAutoFocus:k,disableEnforceFocus:O,disableEscapeKeyDown:F,disablePortal:I,disableRestoreFocus:E,disableScrollLock:j,hideBackdrop:B,keepMounted:D}),{getRootProps:K,getBackdropProps:X,getTransitionProps:_,portalRef:U,isTopModal:Y,exited:J,hasTransition:Q}=(0,M.d)((0,n.Z)({},H,{rootRef:t})),ee=(0,n.Z)({},H,{exited:J}),te=(e=>{const{open:t,exited:o,classes:n}=e,r={root:["root",!t&&o&&"hidden"],backdrop:["backdrop"]};return(0,s.Z)(r,N,n)})(ee),oe={};if(void 0===y.props.tabIndex&&(oe.tabIndex="-1"),Q){const{onEnter:e,onExited:t}=_();oe.onEnter=e,oe.onExited=t}const ne=null!=(o=null!=(d=null==W?void 0:W.root)?d:w.Root)?o:T,re=null!=(c=null!=(u=null==W?void 0:W.backdrop)?u:w.Backdrop)?c:h,ae=null!=(p=null==V?void 0:V.root)?p:S.root,ie=null!=(m=null==V?void 0:V.backdrop)?m:S.backdrop,se=(0,l.y)({elementType:ne,externalSlotProps:ae,externalForwardedProps:q,getSlotProps:K,additionalProps:{ref:t,as:P},ownerState:ee,className:(0,i.Z)(g,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.y)({elementType:re,externalSlotProps:ie,additionalProps:f,getSlotProps:e=>X((0,n.Z)({},e,{onClick:t=>{z&&z(t),null!=e&&e.onClick&&e.onClick(t)}})),className:(0,i.Z)(null==ie?void 0:ie.className,null==f?void 0:f.className,null==te?void 0:te.backdrop),ownerState:ee});return D||G||Q&&!J?(0,v.jsx)($.h,{ref:U,container:x,disablePortal:I,children:(0,v.jsxs)(ne,(0,n.Z)({},se,{children:[!B&&h?(0,v.jsx)(re,(0,n.Z)({},le)):null,(0,v.jsx)(R.i,{disableEnforceFocus:O,disableAutoFocus:k,disableRestoreFocus:E,isEnabled:Y,open:G,children:a.cloneElement(y,oe)})]}))}):null}));var j=o(6501);function B(e){return(0,I.Z)("MuiPopover",e)}(0,F.Z)("MuiPopover",["root","paper"]);const D=["onEntering"],z=["action","anchorEl","anchorOrigin","anchorPosition","anchorReference","children","className","container","elevation","marginThreshold","open","PaperProps","slots","slotProps","transformOrigin","TransitionComponent","transitionDuration","TransitionProps","disableScrollLock"],G=["slotProps"];function V(e,t){let o=0;return"number"==typeof t?o=t:"center"===t?o=e.height/2:"bottom"===t&&(o=e.height),o}function W(e,t){let o=0;return"number"==typeof t?o=t:"center"===t?o=e.width/2:"right"===t&&(o=e.width),o}function q(e){return[e.horizontal,e.vertical].map((e=>"number"==typeof e?`${e}px`:e)).join(" ")}function H(e){return"function"==typeof e?e():e}const K=(0,P.ZP)(E,{name:"MuiPopover",slot:"Root",overridesResolver:(e,t)=>t.root})({}),X=(0,P.ZP)(j.Z,{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}),_=a.forwardRef((function(e,t){var o,c,u;const m=(0,C.Z)({props:e,name:"MuiPopover"}),{action:b,anchorEl:h,anchorOrigin:f={vertical:"top",horizontal:"left"},anchorPosition:g,anchorReference:Z="anchorEl",children:y,className:P,container:M,elevation:R=8,marginThreshold:$=16,open:O,PaperProps:F={},slots:I,slotProps:N,transformOrigin:L={vertical:"top",horizontal:"left"},TransitionComponent:T=k.Z,transitionDuration:A="auto",TransitionProps:{onEntering:E}={},disableScrollLock:j=!1}=m,_=(0,r.Z)(m.TransitionProps,D),U=(0,r.Z)(m,z),Y=null!=(o=null==N?void 0:N.paper)?o:F,J=a.useRef(),Q=(0,p.Z)(J,Y.ref),ee=(0,n.Z)({},m,{anchorOrigin:f,anchorReference:Z,elevation:R,marginThreshold:$,externalPaperSlotProps:Y,transformOrigin:L,TransitionComponent:T,transitionDuration:A,TransitionProps:_}),te=(e=>{const{classes:t}=e;return(0,s.Z)({root:["root"],paper:["paper"]},B,t)})(ee),oe=a.useCallback((()=>{if("anchorPosition"===Z)return g;const e=H(h),t=(e&&1===e.nodeType?e:(0,d.Z)(J.current).body).getBoundingClientRect();return{top:t.top+V(t,f.vertical),left:t.left+W(t,f.horizontal)}}),[h,f.horizontal,f.vertical,g,Z]),ne=a.useCallback((e=>({vertical:V(e,L.vertical),horizontal:W(e,L.horizontal)})),[L.horizontal,L.vertical]),re=a.useCallback((e=>{const t={width:e.offsetWidth,height:e.offsetHeight},o=ne(t);if("none"===Z)return{top:null,left:null,transformOrigin:q(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,S.Z)(H(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:q(o)}}),[h,Z,oe,ne,$]),[ae,ie]=a.useState(O),se=a.useCallback((()=>{const e=J.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((()=>(j&&window.addEventListener("scroll",se),()=>window.removeEventListener("scroll",se))),[h,j,se]),a.useEffect((()=>{O&&se()})),a.useImperativeHandle(b,(()=>O?{updatePosition:()=>{se()}}:null),[O,se]),a.useEffect((()=>{if(!O)return;const e=(0,w.Z)((()=>{se()})),t=(0,S.Z)(h);return t.addEventListener("resize",e),()=>{e.clear(),t.removeEventListener("resize",e)}}),[h,O,se]);let le=A;"auto"!==A||T.muiSupportAuto||(le=void 0);const de=M||(h?(0,d.Z)(H(h)).body:void 0),ce=null!=(c=null==I?void 0:I.root)?c:K,ue=null!=(u=null==I?void 0:I.paper)?u:X,pe=(0,l.y)({elementType:ue,externalSlotProps:(0,n.Z)({},Y,{style:ae?Y.style:(0,n.Z)({},Y.style,{opacity:0})}),additionalProps:{elevation:R,ref:Q},ownerState:ee,className:(0,i.Z)(te.paper,null==Y?void 0:Y.className)}),me=(0,l.y)({elementType:ce,externalSlotProps:(null==N?void 0:N.root)||{},externalForwardedProps:U,additionalProps:{ref:t,slotProps:{backdrop:{invisible:!0}},container:de,open:O},ownerState:ee,className:(0,i.Z)(te.root,P)}),{slotProps:ve}=me,be=(0,r.Z)(me,G);return(0,v.jsx)(ce,(0,n.Z)({},be,!(0,x.X)(ce)&&{slotProps:ve,disableScrollLock:j},{children:(0,v.jsx)(T,(0,n.Z)({appear:!0,in:O,onEntering:(e,t)=>{E&&E(e,t),se()},onExited:()=>{ie(!1)},timeout:le},_,{children:(0,v.jsx)(ue,(0,n.Z)({},pe,{children:y}))}))}))}));var U=o(2734);function Y(e){return(0,I.Z)("MuiMenu",e)}(0,F.Z)("MuiMenu",["root","paper","list"]);const J=["onEntering"],Q=["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,P.ZP)(_,{shouldForwardProp:e=>(0,P.FO)(e)||"classes"===e,name:"MuiMenu",slot:"Root",overridesResolver:(e,t)=>t.root})({}),ne=(0,P.ZP)(X,{name:"MuiMenu",slot:"Paper",overridesResolver:(e,t)=>t.paper})({maxHeight:"calc(100% - 96px)",WebkitOverflowScrolling:"touch"}),re=(0,P.ZP)(y,{name:"MuiMenu",slot:"List",overridesResolver:(e,t)=>t.list})({outline:0}),ae=a.forwardRef((function(e,t){var o,d;const c=(0,C.Z)({props:e,name:"MuiMenu"}),{autoFocus:u=!0,children:p,className:m,disableAutoFocusItem:b=!1,MenuListProps:h={},onClose:f,open:g,PaperProps:Z={},PopoverClasses:y,transitionDuration:x="auto",TransitionProps:{onEntering:P}={},variant:w="selectedMenu",slots:S={},slotProps:k={}}=c,M=(0,r.Z)(c.TransitionProps,J),R=(0,r.Z)(c,Q),$=(0,U.Z)(),O="rtl"===$.direction,F=(0,n.Z)({},c,{autoFocus:u,disableAutoFocusItem:b,MenuListProps:h,onEntering:P,PaperProps:Z,transitionDuration:x,TransitionProps:M,variant:w}),I=(e=>{const{classes:t}=e;return(0,s.Z)({root:["root"],paper:["paper"],list:["list"]},Y,t)})(F),N=u&&!b&&g,L=a.useRef(null);let T=-1;a.Children.map(p,((e,t)=>{a.isValidElement(e)&&(e.props.disabled||("selectedMenu"===w&&e.props.selected||-1===T)&&(T=t))}));const A=null!=(o=S.paper)?o:ne,E=null!=(d=k.paper)?d:Z,j=(0,l.y)({elementType:S.root,externalSlotProps:k.root,ownerState:F,className:[I.root,m]}),B=(0,l.y)({elementType:A,externalSlotProps:E,ownerState:F,className:I.paper});return(0,v.jsx)(oe,(0,n.Z)({onClose:f,anchorOrigin:{vertical:"bottom",horizontal:O?"right":"left"},transformOrigin:O?ee:te,slots:{paper:A,root:S.root},slotProps:{root:j,paper:B},open:g,ref:t,transitionDuration:x,TransitionProps:(0,n.Z)({onEntering:(e,t)=>{L.current&&L.current.adjustStyleForScrollbar(e,$),P&&P(e,t)}},M),ownerState:F},R,{classes:y,children:(0,v.jsx)(re,(0,n.Z)({onKeyDown:e=>{"Tab"===e.key&&(e.preventDefault(),f&&f(e,"tabKeyDown"))},actions:L,autoFocus:u&&(-1===T||b),autoFocusItem:N,variant:w},h,{className:(0,i.Z)(I.list,h.className),children:p}))}))}))},1753:(e,t,o)=>{o.d(t,{Z:()=>S});var n=o(3366),r=o(7462),a=o(7294),i=o(512),s=o(4780),l=o(1796),d=o(948),c=o(1657),u=o(9773),p=o(539),m=o(8974),v=o(1705),b=o(5097),h=o(1588);const f=(0,h.Z)("MuiListItemIcon",["root","alignItemsFlexStart"]),g=(0,h.Z)("MuiListItemText",["root","multiline","dense","inset","primary","secondary"]);var Z=o(4867);function y(e){return(0,Z.Z)("MuiMenuItem",e)}const x=(0,h.Z)("MuiMenuItem",["root","focusVisible","dense","disabled","divider","gutters","selected"]);var P=o(5893);const C=["autoFocus","component","dense","divider","disableGutters","focusVisibleClassName","role","tabIndex","className"],w=(0,d.ZP)(p.Z,{shouldForwardProp:e=>(0,d.FO)(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.Z)({},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.Fq)(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.Fq)(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.Fq)(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.Fq)(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.Z.root}`]:{marginTop:e.spacing(1),marginBottom:e.spacing(1)},[`& + .${b.Z.inset}`]:{marginLeft:52},[`& .${g.root}`]:{marginTop:0,marginBottom:0},[`& .${g.inset}`]:{paddingLeft:36},[`& .${f.root}`]:{minWidth:36}},!t.dense&&{[e.breakpoints.up("sm")]:{minHeight:"auto"}},t.dense&&(0,r.Z)({minHeight:32,paddingTop:4,paddingBottom:4},e.typography.body2,{[`& .${f.root} svg`]:{fontSize:"1.25rem"}})))),S=a.forwardRef((function(e,t){const o=(0,c.Z)({props:e,name:"MuiMenuItem"}),{autoFocus:l=!1,component:d="li",dense:p=!1,divider:b=!1,disableGutters:h=!1,focusVisibleClassName:f,role:g="menuitem",tabIndex:Z,className:x}=o,S=(0,n.Z)(o,C),k=a.useContext(u.Z),M=a.useMemo((()=>({dense:p||k.dense||!1,disableGutters:h})),[k.dense,p,h]),R=a.useRef(null);(0,m.Z)((()=>{l&&R.current&&R.current.focus()}),[l]);const $=(0,r.Z)({},o,{dense:M.dense,divider:b,disableGutters:h}),O=(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.Z)(d,y,l);return(0,r.Z)({},l,c)})(o),F=(0,v.Z)(R,t);let I;return o.disabled||(I=void 0!==Z?Z:-1),(0,P.jsx)(u.Z.Provider,{value:M,children:(0,P.jsx)(w,(0,r.Z)({ref:F,role:g,tabIndex:I,component:d,focusVisibleClassName:(0,i.Z)(O.focusVisible,f),className:(0,i.Z)(O.root,x)},S,{ownerState:$,classes:O}))})}))},5961:(e,t,o)=>{o.d(t,{ZP:()=>y,SJ:()=>g,wU:()=>h});var n=o(3366),r=o(7462),a=o(7294),i=o(512),s=o(4780),l=o(8216),d=o(1588),c=o(4867);function u(e){return(0,c.Z)("MuiNativeSelect",e)}const p=(0,d.Z)("MuiNativeSelect",["root","select","multiple","filled","outlined","standard","disabled","icon","iconOpen","iconFilled","iconOutlined","iconStandard","nativeInput","error"]);var m=o(948),v=o(5893);const b=["className","disabled","error","IconComponent","inputRef","variant"],h=({ownerState:e,theme:t})=>(0,r.Z)({MozAppearance:"none",WebkitAppearance:"none",userSelect:"none",borderRadius:0,cursor:"pointer","&:focus":(0,r.Z)({},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}}),f=(0,m.ZP)("select",{name:"MuiNativeSelect",slot:"Select",shouldForwardProp:m.FO,overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.select,t[o.variant],o.error&&t.error,{[`&.${p.multiple}`]:t.multiple}]}})(h),g=({ownerState:e,theme:t})=>(0,r.Z)({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}),Z=(0,m.ZP)("svg",{name:"MuiNativeSelect",slot:"Icon",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.icon,o.variant&&t[`icon${(0,l.Z)(o.variant)}`],o.open&&t.iconOpen]}})(g),y=a.forwardRef((function(e,t){const{className:o,disabled:d,error:c,IconComponent:p,inputRef:m,variant:h="standard"}=e,g=(0,n.Z)(e,b),y=(0,r.Z)({},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.Z)(o)}`,a&&"iconOpen",n&&"disabled"]};return(0,s.Z)(d,u,t)})(y);return(0,v.jsxs)(a.Fragment,{children:[(0,v.jsx)(f,(0,r.Z)({ownerState:y,className:(0,i.Z)(x.select,o),disabled:d,ref:m||t},g)),e.multiple?null:(0,v.jsx)(Z,{as:p,ownerState:y,className:x.icon})]})}))},3031:(e,t,o)=>{o.d(t,{Z:()=>M});var n,r=o(3366),a=o(7462),i=o(7294),s=o(4780),l=o(948),d=o(5893);const c=["children","classes","className","label","notched"],u=(0,l.ZP)("fieldset",{shouldForwardProp:l.FO})({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.ZP)("legend",{shouldForwardProp:l.FO})((({ownerState:e,theme:t})=>(0,a.Z)({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.Z)({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(4423),v=o(5704),b=o(1588),h=o(4867),f=o(5827);function g(e){return(0,h.Z)("MuiOutlinedInput",e)}const Z=(0,a.Z)({},f.Z,(0,b.Z)("MuiOutlinedInput",["root","notchedOutline","input"]));var y=o(8543),x=o(1657);const P=["components","fullWidth","inputComponent","label","multiline","notched","slots","type"],C=(0,l.ZP)(y.Ej,{shouldForwardProp:e=>(0,l.FO)(e)||"classes"===e,name:"MuiOutlinedInput",slot:"Root",overridesResolver:y.Gx})((({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.Z)({position:"relative",borderRadius:(e.vars||e).shape.borderRadius,[`&:hover .${Z.notchedOutline}`]:{borderColor:(e.vars||e).palette.text.primary},"@media (hover: none)":{[`&:hover .${Z.notchedOutline}`]:{borderColor:e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / 0.23)`:o}},[`&.${Z.focused} .${Z.notchedOutline}`]:{borderColor:(e.vars||e).palette[t.color].main,borderWidth:2},[`&.${Z.error} .${Z.notchedOutline}`]:{borderColor:(e.vars||e).palette.error.main},[`&.${Z.disabled} .${Z.notchedOutline}`]:{borderColor:(e.vars||e).palette.action.disabled}},t.startAdornment&&{paddingLeft:14},t.endAdornment&&{paddingRight:14},t.multiline&&(0,a.Z)({padding:"16.5px 14px"},"small"===t.size&&{padding:"8.5px 14px"}))})),w=(0,l.ZP)((function(e){const{className:t,label:o,notched:i}=e,s=(0,r.Z)(e,c),l=null!=o&&""!==o,m=(0,a.Z)({},e,{notched:i,withLabel:l});return(0,d.jsx)(u,(0,a.Z)({"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}})),S=(0,l.ZP)(y.rA,{name:"MuiOutlinedInput",slot:"Input",overridesResolver:y._o})((({theme:e,ownerState:t})=>(0,a.Z)({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}))),k=i.forwardRef((function(e,t){var o,n,l,c,u;const p=(0,x.Z)({props:e,name:"MuiOutlinedInput"}),{components:b={},fullWidth:h=!1,inputComponent:f="input",label:Z,multiline:k=!1,notched:M,slots:R={},type:$="text"}=p,O=(0,r.Z)(p,P),F=(e=>{const{classes:t}=e,o=(0,s.Z)({root:["root"],notchedOutline:["notchedOutline"],input:["input"]},g,t);return(0,a.Z)({},t,o)})(p),I=(0,m.Z)(),N=(0,v.Z)({props:p,muiFormControl:I,states:["color","disabled","error","focused","hiddenLabel","size","required"]}),L=(0,a.Z)({},p,{color:N.color||"primary",disabled:N.disabled,error:N.error,focused:N.focused,formControl:I,fullWidth:h,hiddenLabel:N.hiddenLabel,multiline:k,size:N.size,type:$}),T=null!=(o=null!=(n=R.root)?n:b.Root)?o:C,A=null!=(l=null!=(c=R.input)?c:b.Input)?l:S;return(0,d.jsx)(y.ZP,(0,a.Z)({slots:{root:T,input:A},renderSuffix:e=>(0,d.jsx)(w,{ownerState:L,className:F.notchedOutline,label:null!=Z&&""!==Z&&N.required?u||(u=(0,d.jsxs)(i.Fragment,{children:[Z," ","*"]})):Z,notched:void 0!==M?M:Boolean(e.startAdornment||e.filled||e.focused)}),fullWidth:h,inputComponent:f,multiline:k,ref:t,type:$},O,{classes:(0,a.Z)({},F,{notchedOutline:null})}))}));k.muiName="Input";const M=k},6501:(e,t,o)=>{o.d(t,{Z:()=>g});var n=o(3366),r=o(7462),a=o(7294),i=o(512),s=o(4780),l=o(1796),d=o(948),c=o(2029),u=o(1657),p=o(1588),m=o(4867);function v(e){return(0,m.Z)("MuiPaper",e)}(0,p.Z)("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(5893);const h=["className","component","elevation","square","variant"],f=(0,d.ZP)("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.Z)({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.Z)({boxShadow:(e.vars||e).shadows[t.elevation]},!e.vars&&"dark"===e.palette.mode&&{backgroundImage:`linear-gradient(${(0,l.Fq)("#fff",(0,c.Z)(t.elevation))}, ${(0,l.Fq)("#fff",(0,c.Z)(t.elevation))})`},e.vars&&{backgroundImage:null==(o=e.vars.overlays)?void 0:o[t.elevation]}))})),g=a.forwardRef((function(e,t){const o=(0,u.Z)({props:e,name:"MuiPaper"}),{className:a,component:l="div",elevation:d=1,square:c=!1,variant:p="elevation"}=o,m=(0,n.Z)(o,h),g=(0,r.Z)({},o,{component:l,elevation:d,square:c,variant:p}),Z=(e=>{const{square:t,elevation:o,variant:n,classes:r}=e,a={root:["root",n,!t&&"rounded","elevation"===n&&`elevation${o}`]};return(0,s.Z)(a,v,r)})(g);return(0,b.jsx)(f,(0,r.Z)({as:l,ownerState:g,className:(0,i.Z)(Z.root,a),ref:t},m))}))}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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VUFDakI0UyxFQUFZLEVBQUMsT0FDYitKLEdBQVMsRUFBSyxRQUNkamIsRUFBVSxhQUNSL0IsRUFDSmlDLEdBQVEsT0FBOEJqQyxFQUFPTixHQUN6Q0wsR0FBYSxPQUFTLENBQUMsRUFBR1csRUFBTyxDQUNyQ0ssWUFDQTRTLFlBQ0ErSixTQUNBamIsWUFFSVcsRUE3RGtCckQsS0FDeEIsTUFBTSxPQUNKMmQsRUFBTSxVQUNOL0osRUFBUyxRQUNUbFIsRUFBTyxRQUNQVyxHQUNFckQsRUFDRXNELEVBQVEsQ0FDWnpDLEtBQU0sQ0FBQyxPQUFRNkIsR0FBVWliLEdBQVUsVUFBdUIsY0FBWmpiLEdBQTJCLFlBQVlrUixNQUV2RixPQUFPLEVBQUFyUSxFQUFBLEdBQWVELEVBQU9tYSxFQUFzQnBhLEVBQVEsRUFtRDNDRyxDQUFrQnhELEdBUWxDLE9BQW9CLFNBQUswZCxHQUFXLE9BQVMsQ0FDM0M1WSxHQUFJOUQsRUFDSmhCLFdBQVlBLEVBQ1pzQyxXQUFXLEVBQUFtQixFQUFBLEdBQUtKLEVBQVF4QyxLQUFNeUIsR0FDOUJGLElBQUtBLEdBQ0pRLEdBQ0wsRyIsInNvdXJjZXMiOlsid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpbmsvbGlua0NsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTGluay9nZXRUZXh0RGVjb3JhdGlvbi5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9MaW5rL0xpbmsuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTGlzdC9saXN0Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9MaXN0L0xpc3QuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTGlzdC9MaXN0Q29udGV4dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9MaXN0SXRlbS9saXN0SXRlbUNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24vbGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb25DbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uL0xpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3RJdGVtL0xpc3RJdGVtLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3RJdGVtQnV0dG9uL0xpc3RJdGVtQnV0dG9uLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3RJdGVtQnV0dG9uL2xpc3RJdGVtQnV0dG9uQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9NZW51TGlzdC9NZW51TGlzdC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Nb2RhbC9tb2RhbENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTW9kYWwvTW9kYWwuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUG9wb3Zlci9wb3BvdmVyQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Qb3BvdmVyL1BvcG92ZXIuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTWVudS9tZW51Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9NZW51L01lbnUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTGlzdEl0ZW1JY29uL2xpc3RJdGVtSWNvbkNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTGlzdEl0ZW1UZXh0L2xpc3RJdGVtVGV4dENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTWVudUl0ZW0vbWVudUl0ZW1DbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL01lbnVJdGVtL01lbnVJdGVtLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL05hdGl2ZVNlbGVjdC9uYXRpdmVTZWxlY3RDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL05hdGl2ZVNlbGVjdC9OYXRpdmVTZWxlY3RJbnB1dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9PdXRsaW5lZElucHV0L05vdGNoZWRPdXRsaW5lLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL091dGxpbmVkSW5wdXQvb3V0bGluZWRJbnB1dENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvT3V0bGluZWRJbnB1dC9PdXRsaW5lZElucHV0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1BhcGVyL3BhcGVyQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9QYXBlci9QYXBlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlua1V0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTGluaycsIHNsb3QpO1xufVxuY29uc3QgbGlua0NsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlMaW5rJywgWydyb290JywgJ3VuZGVybGluZU5vbmUnLCAndW5kZXJsaW5lSG92ZXInLCAndW5kZXJsaW5lQWx3YXlzJywgJ2J1dHRvbicsICdmb2N1c1Zpc2libGUnXSk7XG5leHBvcnQgZGVmYXVsdCBsaW5rQ2xhc3NlczsiLCJpbXBvcnQgeyBhbHBoYSwgZ2V0UGF0aCB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmV4cG9ydCBjb25zdCBjb2xvclRyYW5zZm9ybWF0aW9ucyA9IHtcbiAgcHJpbWFyeTogJ3ByaW1hcnkubWFpbicsXG4gIHRleHRQcmltYXJ5OiAndGV4dC5wcmltYXJ5JyxcbiAgc2Vjb25kYXJ5OiAnc2Vjb25kYXJ5Lm1haW4nLFxuICB0ZXh0U2Vjb25kYXJ5OiAndGV4dC5zZWNvbmRhcnknLFxuICBlcnJvcjogJ2Vycm9yLm1haW4nXG59O1xuY29uc3QgdHJhbnNmb3JtRGVwcmVjYXRlZENvbG9ycyA9IGNvbG9yID0+IHtcbiAgcmV0dXJuIGNvbG9yVHJhbnNmb3JtYXRpb25zW2NvbG9yXSB8fCBjb2xvcjtcbn07XG5jb25zdCBnZXRUZXh0RGVjb3JhdGlvbiA9ICh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIGNvbnN0IHRyYW5zZm9ybWVkQ29sb3IgPSB0cmFuc2Zvcm1EZXByZWNhdGVkQ29sb3JzKG93bmVyU3RhdGUuY29sb3IpO1xuICBjb25zdCBjb2xvciA9IGdldFBhdGgodGhlbWUsIGBwYWxldHRlLiR7dHJhbnNmb3JtZWRDb2xvcn1gLCBmYWxzZSkgfHwgb3duZXJTdGF0ZS5jb2xvcjtcbiAgY29uc3QgY2hhbm5lbENvbG9yID0gZ2V0UGF0aCh0aGVtZSwgYHBhbGV0dGUuJHt0cmFuc2Zvcm1lZENvbG9yfUNoYW5uZWxgKTtcbiAgaWYgKCd2YXJzJyBpbiB0aGVtZSAmJiBjaGFubmVsQ29sb3IpIHtcbiAgICByZXR1cm4gYHJnYmEoJHtjaGFubmVsQ29sb3J9IC8gMC40KWA7XG4gIH1cbiAgcmV0dXJuIGFscGhhKGNvbG9yLCAwLjQpO1xufTtcbmV4cG9ydCBkZWZhdWx0IGdldFRleHREZWNvcmF0aW9uOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50XCIsIFwib25CbHVyXCIsIFwib25Gb2N1c1wiLCBcIlR5cG9ncmFwaHlDbGFzc2VzXCIsIFwidW5kZXJsaW5lXCIsIFwidmFyaWFudFwiLCBcInN4XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB1c2VJc0ZvY3VzVmlzaWJsZSBmcm9tICcuLi91dGlscy91c2VJc0ZvY3VzVmlzaWJsZSc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCBUeXBvZ3JhcGh5IGZyb20gJy4uL1R5cG9ncmFwaHknO1xuaW1wb3J0IGxpbmtDbGFzc2VzLCB7IGdldExpbmtVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2xpbmtDbGFzc2VzJztcbmltcG9ydCBnZXRUZXh0RGVjb3JhdGlvbiwgeyBjb2xvclRyYW5zZm9ybWF0aW9ucyB9IGZyb20gJy4vZ2V0VGV4dERlY29yYXRpb24nO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGNvbXBvbmVudCxcbiAgICBmb2N1c1Zpc2libGUsXG4gICAgdW5kZXJsaW5lXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBgdW5kZXJsaW5lJHtjYXBpdGFsaXplKHVuZGVybGluZSl9YCwgY29tcG9uZW50ID09PSAnYnV0dG9uJyAmJiAnYnV0dG9uJywgZm9jdXNWaXNpYmxlICYmICdmb2N1c1Zpc2libGUnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldExpbmtVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IExpbmtSb290ID0gc3R5bGVkKFR5cG9ncmFwaHksIHtcbiAgbmFtZTogJ011aUxpbmsnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgc3R5bGVzW2B1bmRlcmxpbmUke2NhcGl0YWxpemUob3duZXJTdGF0ZS51bmRlcmxpbmUpfWBdLCBvd25lclN0YXRlLmNvbXBvbmVudCA9PT0gJ2J1dHRvbicgJiYgc3R5bGVzLmJ1dHRvbl07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZS51bmRlcmxpbmUgPT09ICdub25lJyAmJiB7XG4gICAgdGV4dERlY29yYXRpb246ICdub25lJ1xuICB9LCBvd25lclN0YXRlLnVuZGVybGluZSA9PT0gJ2hvdmVyJyAmJiB7XG4gICAgdGV4dERlY29yYXRpb246ICdub25lJyxcbiAgICAnJjpob3Zlcic6IHtcbiAgICAgIHRleHREZWNvcmF0aW9uOiAndW5kZXJsaW5lJ1xuICAgIH1cbiAgfSwgb3duZXJTdGF0ZS51bmRlcmxpbmUgPT09ICdhbHdheXMnICYmIF9leHRlbmRzKHtcbiAgICB0ZXh0RGVjb3JhdGlvbjogJ3VuZGVybGluZSdcbiAgfSwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHtcbiAgICB0ZXh0RGVjb3JhdGlvbkNvbG9yOiBnZXRUZXh0RGVjb3JhdGlvbih7XG4gICAgICB0aGVtZSxcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9KVxuICB9LCB7XG4gICAgJyY6aG92ZXInOiB7XG4gICAgICB0ZXh0RGVjb3JhdGlvbkNvbG9yOiAnaW5oZXJpdCdcbiAgICB9XG4gIH0pLCBvd25lclN0YXRlLmNvbXBvbmVudCA9PT0gJ2J1dHRvbicgJiYge1xuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAvLyBSZXNldCBkZWZhdWx0IHZhbHVlXG4gICAgLy8gV2UgZGlzYWJsZSB0aGUgZm9jdXMgcmluZyBmb3IgbW91c2UsIHRvdWNoIGFuZCBrZXlib2FyZCB1c2Vycy5cbiAgICBvdXRsaW5lOiAwLFxuICAgIGJvcmRlcjogMCxcbiAgICBtYXJnaW46IDAsXG4gICAgLy8gUmVtb3ZlIHRoZSBtYXJnaW4gaW4gU2FmYXJpXG4gICAgYm9yZGVyUmFkaXVzOiAwLFxuICAgIHBhZGRpbmc6IDAsXG4gICAgLy8gUmVtb3ZlIHRoZSBwYWRkaW5nIGluIEZpcmVmb3hcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gICAgdmVydGljYWxBbGlnbjogJ21pZGRsZScsXG4gICAgTW96QXBwZWFyYW5jZTogJ25vbmUnLFxuICAgIC8vIFJlc2V0XG4gICAgV2Via2l0QXBwZWFyYW5jZTogJ25vbmUnLFxuICAgIC8vIFJlc2V0XG4gICAgJyY6Oi1tb3otZm9jdXMtaW5uZXInOiB7XG4gICAgICBib3JkZXJTdHlsZTogJ25vbmUnIC8vIFJlbW92ZSBGaXJlZm94IGRvdHRlZCBvdXRsaW5lLlxuICAgIH0sXG5cbiAgICBbYCYuJHtsaW5rQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IHtcbiAgICAgIG91dGxpbmU6ICdhdXRvJ1xuICAgIH1cbiAgfSk7XG59KTtcbmNvbnN0IExpbmsgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBMaW5rKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlMaW5rJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgICBjb21wb25lbnQgPSAnYScsXG4gICAgICBvbkJsdXIsXG4gICAgICBvbkZvY3VzLFxuICAgICAgVHlwb2dyYXBoeUNsYXNzZXMsXG4gICAgICB1bmRlcmxpbmUgPSAnYWx3YXlzJyxcbiAgICAgIHZhcmlhbnQgPSAnaW5oZXJpdCcsXG4gICAgICBzeFxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCB7XG4gICAgaXNGb2N1c1Zpc2libGVSZWYsXG4gICAgb25CbHVyOiBoYW5kbGVCbHVyVmlzaWJsZSxcbiAgICBvbkZvY3VzOiBoYW5kbGVGb2N1c1Zpc2libGUsXG4gICAgcmVmOiBmb2N1c1Zpc2libGVSZWZcbiAgfSA9IHVzZUlzRm9jdXNWaXNpYmxlKCk7XG4gIGNvbnN0IFtmb2N1c1Zpc2libGUsIHNldEZvY3VzVmlzaWJsZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGhhbmRsZXJSZWYgPSB1c2VGb3JrUmVmKHJlZiwgZm9jdXNWaXNpYmxlUmVmKTtcbiAgY29uc3QgaGFuZGxlQmx1ciA9IGV2ZW50ID0+IHtcbiAgICBoYW5kbGVCbHVyVmlzaWJsZShldmVudCk7XG4gICAgaWYgKGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICBzZXRGb2N1c1Zpc2libGUoZmFsc2UpO1xuICAgIH1cbiAgICBpZiAob25CbHVyKSB7XG4gICAgICBvbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlRm9jdXMgPSBldmVudCA9PiB7XG4gICAgaGFuZGxlRm9jdXNWaXNpYmxlKGV2ZW50KTtcbiAgICBpZiAoaXNGb2N1c1Zpc2libGVSZWYuY3VycmVudCA9PT0gdHJ1ZSkge1xuICAgICAgc2V0Rm9jdXNWaXNpYmxlKHRydWUpO1xuICAgIH1cbiAgICBpZiAob25Gb2N1cykge1xuICAgICAgb25Gb2N1cyhldmVudCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3IsXG4gICAgY29tcG9uZW50LFxuICAgIGZvY3VzVmlzaWJsZSxcbiAgICB1bmRlcmxpbmUsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTGlua1Jvb3QsIF9leHRlbmRzKHtcbiAgICBjb2xvcjogY29sb3IsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBjbGFzc2VzOiBUeXBvZ3JhcGh5Q2xhc3NlcyxcbiAgICBjb21wb25lbnQ6IGNvbXBvbmVudCxcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXIsXG4gICAgb25Gb2N1czogaGFuZGxlRm9jdXMsXG4gICAgcmVmOiBoYW5kbGVyUmVmLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgdmFyaWFudDogdmFyaWFudCxcbiAgICBzeDogWy4uLighT2JqZWN0LmtleXMoY29sb3JUcmFuc2Zvcm1hdGlvbnMpLmluY2x1ZGVzKGNvbG9yKSA/IFt7XG4gICAgICBjb2xvclxuICAgIH1dIDogW10pLCAuLi4oQXJyYXkuaXNBcnJheShzeCkgPyBzeCA6IFtzeF0pXVxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBMaW5rLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBsaW5rLlxuICAgKiBAZGVmYXVsdCAncHJpbWFyeSdcbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5hbnksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogYGNsYXNzZXNgIHByb3AgYXBwbGllZCB0byB0aGUgW2BUeXBvZ3JhcGh5YF0oL21hdGVyaWFsLXVpL2FwaS90eXBvZ3JhcGh5LykgZWxlbWVudC5cbiAgICovXG4gIFR5cG9ncmFwaHlDbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQ29udHJvbHMgd2hlbiB0aGUgbGluayBzaG91bGQgaGF2ZSBhbiB1bmRlcmxpbmUuXG4gICAqIEBkZWZhdWx0ICdhbHdheXMnXG4gICAqL1xuICB1bmRlcmxpbmU6IFByb3BUeXBlcy5vbmVPZihbJ2Fsd2F5cycsICdob3ZlcicsICdub25lJ10pLFxuICAvKipcbiAgICogQXBwbGllcyB0aGUgdGhlbWUgdHlwb2dyYXBoeSBzdHlsZXMuXG4gICAqIEBkZWZhdWx0ICdpbmhlcml0J1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydib2R5MScsICdib2R5MicsICdidXR0b24nLCAnY2FwdGlvbicsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdpbmhlcml0JywgJ292ZXJsaW5lJywgJ3N1YnRpdGxlMScsICdzdWJ0aXRsZTInXSksIFByb3BUeXBlcy5zdHJpbmddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IExpbms7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpc3RVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUxpc3QnLCBzbG90KTtcbn1cbmNvbnN0IGxpc3RDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpTGlzdCcsIFsncm9vdCcsICdwYWRkaW5nJywgJ2RlbnNlJywgJ3N1YmhlYWRlciddKTtcbmV4cG9ydCBkZWZhdWx0IGxpc3RDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZGVuc2VcIiwgXCJkaXNhYmxlUGFkZGluZ1wiLCBcInN1YmhlYWRlclwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgTGlzdENvbnRleHQgZnJvbSAnLi9MaXN0Q29udGV4dCc7XG5pbXBvcnQgeyBnZXRMaXN0VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9saXN0Q2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZGlzYWJsZVBhZGRpbmcsXG4gICAgZGVuc2UsXG4gICAgc3ViaGVhZGVyXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCAhZGlzYWJsZVBhZGRpbmcgJiYgJ3BhZGRpbmcnLCBkZW5zZSAmJiAnZGVuc2UnLCBzdWJoZWFkZXIgJiYgJ3N1YmhlYWRlciddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TGlzdFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgTGlzdFJvb3QgPSBzdHlsZWQoJ3VsJywge1xuICBuYW1lOiAnTXVpTGlzdCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCAhb3duZXJTdGF0ZS5kaXNhYmxlUGFkZGluZyAmJiBzdHlsZXMucGFkZGluZywgb3duZXJTdGF0ZS5kZW5zZSAmJiBzdHlsZXMuZGVuc2UsIG93bmVyU3RhdGUuc3ViaGVhZGVyICYmIHN0eWxlcy5zdWJoZWFkZXJdO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGxpc3RTdHlsZTogJ25vbmUnLFxuICBtYXJnaW46IDAsXG4gIHBhZGRpbmc6IDAsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnXG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlUGFkZGluZyAmJiB7XG4gIHBhZGRpbmdUb3A6IDgsXG4gIHBhZGRpbmdCb3R0b206IDhcbn0sIG93bmVyU3RhdGUuc3ViaGVhZGVyICYmIHtcbiAgcGFkZGluZ1RvcDogMFxufSkpO1xuY29uc3QgTGlzdCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIExpc3QoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUxpc3QnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudCA9ICd1bCcsXG4gICAgICBkZW5zZSA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVBhZGRpbmcgPSBmYWxzZSxcbiAgICAgIHN1YmhlYWRlclxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoe1xuICAgIGRlbnNlXG4gIH0pLCBbZGVuc2VdKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbXBvbmVudCxcbiAgICBkZW5zZSxcbiAgICBkaXNhYmxlUGFkZGluZ1xuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTGlzdENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29udGV4dCxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3hzKExpc3RSb290LCBfZXh0ZW5kcyh7XG4gICAgICBhczogY29tcG9uZW50LFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICAgIHJlZjogcmVmLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0sIG90aGVyLCB7XG4gICAgICBjaGlsZHJlbjogW3N1YmhlYWRlciwgY2hpbGRyZW5dXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBMaXN0LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGNvbXBhY3QgdmVydGljYWwgcGFkZGluZyBkZXNpZ25lZCBmb3Iga2V5Ym9hcmQgYW5kIG1vdXNlIGlucHV0IGlzIHVzZWQgZm9yXG4gICAqIHRoZSBsaXN0IGFuZCBsaXN0IGl0ZW1zLlxuICAgKiBUaGUgcHJvcCBpcyBhdmFpbGFibGUgdG8gZGVzY2VuZGFudCBjb21wb25lbnRzIGFzIHRoZSBgZGVuc2VgIGNvbnRleHQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZW5zZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHZlcnRpY2FsIHBhZGRpbmcgaXMgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVBhZGRpbmc6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIHN1YmhlYWRlciwgbm9ybWFsbHkgYExpc3RTdWJoZWFkZXJgLlxuICAgKi9cbiAgc3ViaGVhZGVyOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IExpc3Q7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgTGlzdENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh7fSk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBMaXN0Q29udGV4dC5kaXNwbGF5TmFtZSA9ICdMaXN0Q29udGV4dCc7XG59XG5leHBvcnQgZGVmYXVsdCBMaXN0Q29udGV4dDsiLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlzdEl0ZW1VdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUxpc3RJdGVtJywgc2xvdCk7XG59XG5jb25zdCBsaXN0SXRlbUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlMaXN0SXRlbScsIFsncm9vdCcsICdjb250YWluZXInLCAnZm9jdXNWaXNpYmxlJywgJ2RlbnNlJywgJ2FsaWduSXRlbXNGbGV4U3RhcnQnLCAnZGlzYWJsZWQnLCAnZGl2aWRlcicsICdndXR0ZXJzJywgJ3BhZGRpbmcnLCAnYnV0dG9uJywgJ3NlY29uZGFyeUFjdGlvbicsICdzZWxlY3RlZCddKTtcbmV4cG9ydCBkZWZhdWx0IGxpc3RJdGVtQ2xhc3NlczsiLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb25DbGFzc2VzVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlMaXN0SXRlbVNlY29uZGFyeUFjdGlvbicsIHNsb3QpO1xufVxuY29uc3QgbGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb25DbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24nLCBbJ3Jvb3QnLCAnZGlzYWJsZUd1dHRlcnMnXSk7XG5leHBvcnQgZGVmYXVsdCBsaXN0SXRlbVNlY29uZGFyeUFjdGlvbkNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBMaXN0Q29udGV4dCBmcm9tICcuLi9MaXN0L0xpc3RDb250ZXh0JztcbmltcG9ydCB7IGdldExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uQ2xhc3Nlc1V0aWxpdHlDbGFzcyB9IGZyb20gJy4vbGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb25DbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgZGlzYWJsZUd1dHRlcnMsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgZGlzYWJsZUd1dHRlcnMgJiYgJ2Rpc2FibGVHdXR0ZXJzJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRMaXN0SXRlbVNlY29uZGFyeUFjdGlvbkNsYXNzZXNVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24nLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5kaXNhYmxlR3V0dGVycyAmJiBzdHlsZXMuZGlzYWJsZUd1dHRlcnNdO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICByaWdodDogMTYsXG4gIHRvcDogJzUwJScsXG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTUwJSknXG59LCBvd25lclN0YXRlLmRpc2FibGVHdXR0ZXJzICYmIHtcbiAgcmlnaHQ6IDBcbn0pKTtcblxuLyoqXG4gKiBNdXN0IGJlIHVzZWQgYXMgdGhlIGxhc3QgY2hpbGQgb2YgTGlzdEl0ZW0gdG8gZnVuY3Rpb24gcHJvcGVybHkuXG4gKi9cbmNvbnN0IExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24oaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUxpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KExpc3RDb250ZXh0KTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGRpc2FibGVHdXR0ZXJzOiBjb250ZXh0LmRpc2FibGVHdXR0ZXJzXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChMaXN0SXRlbVNlY29uZGFyeUFjdGlvblJvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24ucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudCwgbm9ybWFsbHkgYW4gYEljb25CdXR0b25gIG9yIHNlbGVjdGlvbiBjb250cm9sLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbkxpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uLm11aU5hbWUgPSAnTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24nO1xuZXhwb3J0IGRlZmF1bHQgTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb247IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCJdLFxuICBfZXhjbHVkZWQyID0gW1wiYWxpZ25JdGVtc1wiLCBcImF1dG9Gb2N1c1wiLCBcImJ1dHRvblwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiY29tcG9uZW50c1wiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcIkNvbnRhaW5lckNvbXBvbmVudFwiLCBcIkNvbnRhaW5lclByb3BzXCIsIFwiZGVuc2VcIiwgXCJkaXNhYmxlZFwiLCBcImRpc2FibGVHdXR0ZXJzXCIsIFwiZGlzYWJsZVBhZGRpbmdcIiwgXCJkaXZpZGVyXCIsIFwiZm9jdXNWaXNpYmxlQ2xhc3NOYW1lXCIsIFwic2Vjb25kYXJ5QWN0aW9uXCIsIFwic2VsZWN0ZWRcIiwgXCJzbG90UHJvcHNcIiwgXCJzbG90c1wiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzLCBpc0hvc3RDb21wb25lbnQgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHsgY2hhaW5Qcm9wVHlwZXMsIGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyBhbHBoYSB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgQnV0dG9uQmFzZSBmcm9tICcuLi9CdXR0b25CYXNlJztcbmltcG9ydCBpc011aUVsZW1lbnQgZnJvbSAnLi4vdXRpbHMvaXNNdWlFbGVtZW50JztcbmltcG9ydCB1c2VFbmhhbmNlZEVmZmVjdCBmcm9tICcuLi91dGlscy91c2VFbmhhbmNlZEVmZmVjdCc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCBMaXN0Q29udGV4dCBmcm9tICcuLi9MaXN0L0xpc3RDb250ZXh0JztcbmltcG9ydCBsaXN0SXRlbUNsYXNzZXMsIHsgZ2V0TGlzdEl0ZW1VdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2xpc3RJdGVtQ2xhc3Nlcyc7XG5pbXBvcnQgeyBsaXN0SXRlbUJ1dHRvbkNsYXNzZXMgfSBmcm9tICcuLi9MaXN0SXRlbUJ1dHRvbic7XG5pbXBvcnQgTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24gZnJvbSAnLi4vTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24nO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBjb25zdCBvdmVycmlkZXNSZXNvbHZlciA9IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBvd25lclN0YXRlXG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5kZW5zZSAmJiBzdHlsZXMuZGVuc2UsIG93bmVyU3RhdGUuYWxpZ25JdGVtcyA9PT0gJ2ZsZXgtc3RhcnQnICYmIHN0eWxlcy5hbGlnbkl0ZW1zRmxleFN0YXJ0LCBvd25lclN0YXRlLmRpdmlkZXIgJiYgc3R5bGVzLmRpdmlkZXIsICFvd25lclN0YXRlLmRpc2FibGVHdXR0ZXJzICYmIHN0eWxlcy5ndXR0ZXJzLCAhb3duZXJTdGF0ZS5kaXNhYmxlUGFkZGluZyAmJiBzdHlsZXMucGFkZGluZywgb3duZXJTdGF0ZS5idXR0b24gJiYgc3R5bGVzLmJ1dHRvbiwgb3duZXJTdGF0ZS5oYXNTZWNvbmRhcnlBY3Rpb24gJiYgc3R5bGVzLnNlY29uZGFyeUFjdGlvbl07XG59O1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGFsaWduSXRlbXMsXG4gICAgYnV0dG9uLFxuICAgIGNsYXNzZXMsXG4gICAgZGVuc2UsXG4gICAgZGlzYWJsZWQsXG4gICAgZGlzYWJsZUd1dHRlcnMsXG4gICAgZGlzYWJsZVBhZGRpbmcsXG4gICAgZGl2aWRlcixcbiAgICBoYXNTZWNvbmRhcnlBY3Rpb24sXG4gICAgc2VsZWN0ZWRcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGRlbnNlICYmICdkZW5zZScsICFkaXNhYmxlR3V0dGVycyAmJiAnZ3V0dGVycycsICFkaXNhYmxlUGFkZGluZyAmJiAncGFkZGluZycsIGRpdmlkZXIgJiYgJ2RpdmlkZXInLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBidXR0b24gJiYgJ2J1dHRvbicsIGFsaWduSXRlbXMgPT09ICdmbGV4LXN0YXJ0JyAmJiAnYWxpZ25JdGVtc0ZsZXhTdGFydCcsIGhhc1NlY29uZGFyeUFjdGlvbiAmJiAnc2Vjb25kYXJ5QWN0aW9uJywgc2VsZWN0ZWQgJiYgJ3NlbGVjdGVkJ10sXG4gICAgY29udGFpbmVyOiBbJ2NvbnRhaW5lciddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TGlzdEl0ZW1VdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBMaXN0SXRlbVJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aUxpc3RJdGVtJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtc3RhcnQnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIHRleHREZWNvcmF0aW9uOiAnbm9uZScsXG4gIHdpZHRoOiAnMTAwJScsXG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICB0ZXh0QWxpZ246ICdsZWZ0J1xufSwgIW93bmVyU3RhdGUuZGlzYWJsZVBhZGRpbmcgJiYgX2V4dGVuZHMoe1xuICBwYWRkaW5nVG9wOiA4LFxuICBwYWRkaW5nQm90dG9tOiA4XG59LCBvd25lclN0YXRlLmRlbnNlICYmIHtcbiAgcGFkZGluZ1RvcDogNCxcbiAgcGFkZGluZ0JvdHRvbTogNFxufSwgIW93bmVyU3RhdGUuZGlzYWJsZUd1dHRlcnMgJiYge1xuICBwYWRkaW5nTGVmdDogMTYsXG4gIHBhZGRpbmdSaWdodDogMTZcbn0sICEhb3duZXJTdGF0ZS5zZWNvbmRhcnlBY3Rpb24gJiYge1xuICAvLyBBZGQgc29tZSBzcGFjZSB0byBhdm9pZCBjb2xsaXNpb24gYXMgYExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uYFxuICAvLyBpcyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQuXG4gIHBhZGRpbmdSaWdodDogNDhcbn0pLCAhIW93bmVyU3RhdGUuc2Vjb25kYXJ5QWN0aW9uICYmIHtcbiAgW2AmID4gLiR7bGlzdEl0ZW1CdXR0b25DbGFzc2VzLnJvb3R9YF06IHtcbiAgICBwYWRkaW5nUmlnaHQ6IDQ4XG4gIH1cbn0sIHtcbiAgW2AmLiR7bGlzdEl0ZW1DbGFzc2VzLmZvY3VzVmlzaWJsZX1gXToge1xuICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmZvY3VzXG4gIH0sXG4gIFtgJi4ke2xpc3RJdGVtQ2xhc3Nlcy5zZWxlY3RlZH1gXToge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLnByaW1hcnkubWFpbkNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eX0pYCA6IGFscGhhKHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHkpLFxuICAgIFtgJi4ke2xpc3RJdGVtQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLnByaW1hcnkubWFpbkNoYW5uZWx9IC8gY2FsYygke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5fSArICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5mb2N1c09wYWNpdHl9KSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eSArIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmZvY3VzT3BhY2l0eSlcbiAgICB9XG4gIH0sXG4gIFtgJi4ke2xpc3RJdGVtQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIG9wYWNpdHk6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZE9wYWNpdHlcbiAgfVxufSwgb3duZXJTdGF0ZS5hbGlnbkl0ZW1zID09PSAnZmxleC1zdGFydCcgJiYge1xuICBhbGlnbkl0ZW1zOiAnZmxleC1zdGFydCdcbn0sIG93bmVyU3RhdGUuZGl2aWRlciAmJiB7XG4gIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmRpdmlkZXJ9YCxcbiAgYmFja2dyb3VuZENsaXA6ICdwYWRkaW5nLWJveCdcbn0sIG93bmVyU3RhdGUuYnV0dG9uICYmIHtcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdiYWNrZ3JvdW5kLWNvbG9yJywge1xuICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVzdFxuICB9KSxcbiAgJyY6aG92ZXInOiB7XG4gICAgdGV4dERlY29yYXRpb246ICdub25lJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5ob3ZlcixcbiAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgIH1cbiAgfSxcbiAgW2AmLiR7bGlzdEl0ZW1DbGFzc2VzLnNlbGVjdGVkfTpob3ZlcmBdOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUucHJpbWFyeS5tYWluQ2hhbm5lbH0gLyBjYWxjKCR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHl9ICsgJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eX0pKWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlLnByaW1hcnkubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5ICsgdGhlbWUucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5KSxcbiAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLnByaW1hcnkubWFpbkNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eX0pYCA6IGFscGhhKHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHkpXG4gICAgfVxuICB9XG59LCBvd25lclN0YXRlLmhhc1NlY29uZGFyeUFjdGlvbiAmJiB7XG4gIC8vIEFkZCBzb21lIHNwYWNlIHRvIGF2b2lkIGNvbGxpc2lvbiBhcyBgTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb25gXG4gIC8vIGlzIGFic29sdXRlbHkgcG9zaXRpb25lZC5cbiAgcGFkZGluZ1JpZ2h0OiA0OFxufSkpO1xuY29uc3QgTGlzdEl0ZW1Db250YWluZXIgPSBzdHlsZWQoJ2xpJywge1xuICBuYW1lOiAnTXVpTGlzdEl0ZW0nLFxuICBzbG90OiAnQ29udGFpbmVyJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMuY29udGFpbmVyXG59KSh7XG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnXG59KTtcblxuLyoqXG4gKiBVc2VzIGFuIGFkZGl0aW9uYWwgY29udGFpbmVyIGNvbXBvbmVudCBpZiBgTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb25gIGlzIHRoZSBsYXN0IGNoaWxkLlxuICovXG5jb25zdCBMaXN0SXRlbSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIExpc3RJdGVtKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlMaXN0SXRlbSdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGFsaWduSXRlbXMgPSAnY2VudGVyJyxcbiAgICAgIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICAgICAgYnV0dG9uID0gZmFsc2UsXG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5Qcm9wLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50OiBjb21wb25lbnRQcm9wLFxuICAgICAgY29tcG9uZW50cyA9IHt9LFxuICAgICAgY29tcG9uZW50c1Byb3BzID0ge30sXG4gICAgICBDb250YWluZXJDb21wb25lbnQgPSAnbGknLFxuICAgICAgQ29udGFpbmVyUHJvcHM6IHtcbiAgICAgICAgY2xhc3NOYW1lOiBDb250YWluZXJDbGFzc05hbWVcbiAgICAgIH0gPSB7fSxcbiAgICAgIGRlbnNlID0gZmFsc2UsXG4gICAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgICAgZGlzYWJsZUd1dHRlcnMgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVQYWRkaW5nID0gZmFsc2UsXG4gICAgICBkaXZpZGVyID0gZmFsc2UsXG4gICAgICBmb2N1c1Zpc2libGVDbGFzc05hbWUsXG4gICAgICBzZWNvbmRhcnlBY3Rpb24sXG4gICAgICBzZWxlY3RlZCA9IGZhbHNlLFxuICAgICAgc2xvdFByb3BzID0ge30sXG4gICAgICBzbG90cyA9IHt9XG4gICAgfSA9IHByb3BzLFxuICAgIENvbnRhaW5lclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMuQ29udGFpbmVyUHJvcHMsIF9leGNsdWRlZCksXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkMik7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KExpc3RDb250ZXh0KTtcbiAgY29uc3QgY2hpbGRDb250ZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoe1xuICAgIGRlbnNlOiBkZW5zZSB8fCBjb250ZXh0LmRlbnNlIHx8IGZhbHNlLFxuICAgIGFsaWduSXRlbXMsXG4gICAgZGlzYWJsZUd1dHRlcnNcbiAgfSksIFthbGlnbkl0ZW1zLCBjb250ZXh0LmRlbnNlLCBkZW5zZSwgZGlzYWJsZUd1dHRlcnNdKTtcbiAgY29uc3QgbGlzdEl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYXV0b0ZvY3VzKSB7XG4gICAgICBpZiAobGlzdEl0ZW1SZWYuY3VycmVudCkge1xuICAgICAgICBsaXN0SXRlbVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTVVJOiBVbmFibGUgdG8gc2V0IGZvY3VzIHRvIGEgTGlzdEl0ZW0gd2hvc2UgY29tcG9uZW50IGhhcyBub3QgYmVlbiByZW5kZXJlZC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFthdXRvRm9jdXNdKTtcbiAgY29uc3QgY2hpbGRyZW4gPSBSZWFjdC5DaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuUHJvcCk7XG5cbiAgLy8gdjQgaW1wbGVtZW50YXRpb24sIGRlcHJlY2F0ZWQgaW4gdjUsIHdpbGwgYmUgcmVtb3ZlZCBpbiB2NlxuICBjb25zdCBoYXNTZWNvbmRhcnlBY3Rpb24gPSBjaGlsZHJlbi5sZW5ndGggJiYgaXNNdWlFbGVtZW50KGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLCBbJ0xpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uJ10pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgYWxpZ25JdGVtcyxcbiAgICBhdXRvRm9jdXMsXG4gICAgYnV0dG9uLFxuICAgIGRlbnNlOiBjaGlsZENvbnRleHQuZGVuc2UsXG4gICAgZGlzYWJsZWQsXG4gICAgZGlzYWJsZUd1dHRlcnMsXG4gICAgZGlzYWJsZVBhZGRpbmcsXG4gICAgZGl2aWRlcixcbiAgICBoYXNTZWNvbmRhcnlBY3Rpb24sXG4gICAgc2VsZWN0ZWRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihsaXN0SXRlbVJlZiwgcmVmKTtcbiAgY29uc3QgUm9vdCA9IHNsb3RzLnJvb3QgfHwgY29tcG9uZW50cy5Sb290IHx8IExpc3RJdGVtUm9vdDtcbiAgY29uc3Qgcm9vdFByb3BzID0gc2xvdFByb3BzLnJvb3QgfHwgY29tcG9uZW50c1Byb3BzLnJvb3QgfHwge307XG4gIGNvbnN0IGNvbXBvbmVudFByb3BzID0gX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIHJvb3RQcm9wcy5jbGFzc05hbWUsIGNsYXNzTmFtZSksXG4gICAgZGlzYWJsZWRcbiAgfSwgb3RoZXIpO1xuICBsZXQgQ29tcG9uZW50ID0gY29tcG9uZW50UHJvcCB8fCAnbGknO1xuICBpZiAoYnV0dG9uKSB7XG4gICAgY29tcG9uZW50UHJvcHMuY29tcG9uZW50ID0gY29tcG9uZW50UHJvcCB8fCAnZGl2JztcbiAgICBjb21wb25lbnRQcm9wcy5mb2N1c1Zpc2libGVDbGFzc05hbWUgPSBjbHN4KGxpc3RJdGVtQ2xhc3Nlcy5mb2N1c1Zpc2libGUsIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSk7XG4gICAgQ29tcG9uZW50ID0gQnV0dG9uQmFzZTtcbiAgfVxuXG4gIC8vIHY0IGltcGxlbWVudGF0aW9uLCBkZXByZWNhdGVkIGluIHY1LCB3aWxsIGJlIHJlbW92ZWQgaW4gdjZcbiAgaWYgKGhhc1NlY29uZGFyeUFjdGlvbikge1xuICAgIC8vIFVzZSBkaXYgYnkgZGVmYXVsdC5cbiAgICBDb21wb25lbnQgPSAhY29tcG9uZW50UHJvcHMuY29tcG9uZW50ICYmICFjb21wb25lbnRQcm9wID8gJ2RpdicgOiBDb21wb25lbnQ7XG5cbiAgICAvLyBBdm9pZCBuZXN0aW5nIG9mIGxpID4gbGkuXG4gICAgaWYgKENvbnRhaW5lckNvbXBvbmVudCA9PT0gJ2xpJykge1xuICAgICAgaWYgKENvbXBvbmVudCA9PT0gJ2xpJykge1xuICAgICAgICBDb21wb25lbnQgPSAnZGl2JztcbiAgICAgIH0gZWxzZSBpZiAoY29tcG9uZW50UHJvcHMuY29tcG9uZW50ID09PSAnbGknKSB7XG4gICAgICAgIGNvbXBvbmVudFByb3BzLmNvbXBvbmVudCA9ICdkaXYnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTGlzdENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiBjaGlsZENvbnRleHQsXG4gICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3hzKExpc3RJdGVtQ29udGFpbmVyLCBfZXh0ZW5kcyh7XG4gICAgICAgIGFzOiBDb250YWluZXJDb21wb25lbnQsXG4gICAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLmNvbnRhaW5lciwgQ29udGFpbmVyQ2xhc3NOYW1lKSxcbiAgICAgICAgcmVmOiBoYW5kbGVSZWYsXG4gICAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgICAgIH0sIENvbnRhaW5lclByb3BzLCB7XG4gICAgICAgIGNoaWxkcmVuOiBbLyojX19QVVJFX18qL19qc3goUm9vdCwgX2V4dGVuZHMoe30sIHJvb3RQcm9wcywgIWlzSG9zdENvbXBvbmVudChSb290KSAmJiB7XG4gICAgICAgICAgYXM6IENvbXBvbmVudCxcbiAgICAgICAgICBvd25lclN0YXRlOiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZSwgcm9vdFByb3BzLm93bmVyU3RhdGUpXG4gICAgICAgIH0sIGNvbXBvbmVudFByb3BzLCB7XG4gICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICAgIH0pKSwgY2hpbGRyZW4ucG9wKCldXG4gICAgICB9KSlcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTGlzdENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY2hpbGRDb250ZXh0LFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeHMoUm9vdCwgX2V4dGVuZHMoe30sIHJvb3RQcm9wcywge1xuICAgICAgYXM6IENvbXBvbmVudCxcbiAgICAgIHJlZjogaGFuZGxlUmVmXG4gICAgfSwgIWlzSG9zdENvbXBvbmVudChSb290KSAmJiB7XG4gICAgICBvd25lclN0YXRlOiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZSwgcm9vdFByb3BzLm93bmVyU3RhdGUpXG4gICAgfSwgY29tcG9uZW50UHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBbY2hpbGRyZW4sIHNlY29uZGFyeUFjdGlvbiAmJiAvKiNfX1BVUkVfXyovX2pzeChMaXN0SXRlbVNlY29uZGFyeUFjdGlvbiwge1xuICAgICAgICBjaGlsZHJlbjogc2Vjb25kYXJ5QWN0aW9uXG4gICAgICB9KV1cbiAgICB9KSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IExpc3RJdGVtLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIGBhbGlnbi1pdGVtc2Agc3R5bGUgcHJvcGVydHkuXG4gICAqIEBkZWZhdWx0ICdjZW50ZXInXG4gICAqL1xuICBhbGlnbkl0ZW1zOiBQcm9wVHlwZXMub25lT2YoWydjZW50ZXInLCAnZmxleC1zdGFydCddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxpc3QgaXRlbSBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqIEZvY3VzIHdpbGwgYWxzbyBiZSB0cmlnZ2VyZWQgaWYgdGhlIHZhbHVlIGNoYW5nZXMgZnJvbSBmYWxzZSB0byB0cnVlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAZGVwcmVjYXRlZCBjaGVja291dCBbTGlzdEl0ZW1CdXR0b25dKC9tYXRlcmlhbC11aS9hcGkvbGlzdC1pdGVtLWJ1dHRvbi8pIGluc3RlYWRcbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsaXN0IGl0ZW0gaXMgYSBidXR0b24gKHVzaW5nIGBCdXR0b25CYXNlYCkuIFByb3BzIGludGVuZGVkXG4gICAqIGZvciBgQnV0dG9uQmFzZWAgY2FuIHRoZW4gYmUgYXBwbGllZCB0byBgTGlzdEl0ZW1gLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAZGVwcmVjYXRlZCBjaGVja291dCBbTGlzdEl0ZW1CdXR0b25dKC9tYXRlcmlhbC11aS9hcGkvbGlzdC1pdGVtLWJ1dHRvbi8pIGluc3RlYWRcbiAgICovXG4gIGJ1dHRvbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50IGlmIGEgYExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uYCBpcyB1c2VkIGl0IG11c3RcbiAgICogYmUgdGhlIGxhc3QgY2hpbGQuXG4gICAqL1xuICBjaGlsZHJlbjogY2hhaW5Qcm9wVHlwZXMoUHJvcFR5cGVzLm5vZGUsIHByb3BzID0+IHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkocHJvcHMuY2hpbGRyZW4pO1xuXG4gICAgLy8gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShwcm9wcy5jaGlsZHJlbikuZmluZExhc3RJbmRleChpc0xpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uKVxuICAgIGxldCBzZWNvbmRhcnlBY3Rpb25JbmRleCA9IC0xO1xuICAgIGZvciAobGV0IGkgPSBjaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGkgLT0gMSkge1xuICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgIGlmIChpc011aUVsZW1lbnQoY2hpbGQsIFsnTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24nXSkpIHtcbiAgICAgICAgc2Vjb25kYXJ5QWN0aW9uSW5kZXggPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAgaXMgTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24gdGhlIGxhc3QgY2hpbGQgb2YgTGlzdEl0ZW1cbiAgICBpZiAoc2Vjb25kYXJ5QWN0aW9uSW5kZXggIT09IC0xICYmIHNlY29uZGFyeUFjdGlvbkluZGV4ICE9PSBjaGlsZHJlbi5sZW5ndGggLSAxKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdNVUk6IFlvdSB1c2VkIGFuIGVsZW1lbnQgYWZ0ZXIgTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24uICcgKyAnRm9yIExpc3RJdGVtIHRvIGRldGVjdCB0aGF0IGl0IGhhcyBhIHNlY29uZGFyeSBhY3Rpb24gJyArICd5b3UgbXVzdCBwYXNzIGl0IGFzIHRoZSBsYXN0IGNoaWxkIHRvIExpc3RJdGVtLicpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSksXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdHNgIHByb3AgaW5zdGVhZC5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90UHJvcHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdFByb3BzYCBwcm9wIGluc3RlYWQsIGFzIGBjb21wb25lbnRzUHJvcHNgIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50c1Byb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHJvb3Q6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29udGFpbmVyIGNvbXBvbmVudCB1c2VkIHdoZW4gYSBgTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb25gIGlzIHRoZSBsYXN0IGNoaWxkLlxuICAgKiBAZGVmYXVsdCAnbGknXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBDb250YWluZXJDb21wb25lbnQ6IGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgY29udGFpbmVyIGNvbXBvbmVudCBpZiB1c2VkLlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgQ29udGFpbmVyUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGNvbXBhY3QgdmVydGljYWwgcGFkZGluZyBkZXNpZ25lZCBmb3Iga2V5Ym9hcmQgYW5kIG1vdXNlIGlucHV0IGlzIHVzZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IExpc3QgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVuc2U6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAZGVwcmVjYXRlZCBjaGVja291dCBbTGlzdEl0ZW1CdXR0b25dKC9tYXRlcmlhbC11aS9hcGkvbGlzdC1pdGVtLWJ1dHRvbi8pIGluc3RlYWRcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxlZnQgYW5kIHJpZ2h0IHBhZGRpbmcgaXMgcmVtb3ZlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVHdXR0ZXJzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYWxsIHBhZGRpbmcgaXMgcmVtb3ZlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVQYWRkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSAxcHggbGlnaHQgYm9yZGVyIGlzIGFkZGVkIHRvIHRoZSBib3R0b20gb2YgdGhlIGxpc3QgaXRlbS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpdmlkZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdG8gZGlzcGxheSBhdCB0aGUgZW5kIG9mIExpc3RJdGVtLlxuICAgKi9cbiAgc2Vjb25kYXJ5QWN0aW9uOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFVzZSB0byBhcHBseSBzZWxlY3RlZCBzdHlsaW5nLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAZGVwcmVjYXRlZCBjaGVja291dCBbTGlzdEl0ZW1CdXR0b25dKC9tYXRlcmlhbC11aS9hcGkvbGlzdC1pdGVtLWJ1dHRvbi8pIGluc3RlYWRcbiAgICovXG4gIHNlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c1Byb3BzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTGlzdEl0ZW07IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWxpZ25JdGVtc1wiLCBcImF1dG9Gb2N1c1wiLCBcImNvbXBvbmVudFwiLCBcImNoaWxkcmVuXCIsIFwiZGVuc2VcIiwgXCJkaXNhYmxlR3V0dGVyc1wiLCBcImRpdmlkZXJcIiwgXCJmb2N1c1Zpc2libGVDbGFzc05hbWVcIiwgXCJzZWxlY3RlZFwiLCBcImNsYXNzTmFtZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IGFscGhhIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBCdXR0b25CYXNlIGZyb20gJy4uL0J1dHRvbkJhc2UnO1xuaW1wb3J0IHVzZUVuaGFuY2VkRWZmZWN0IGZyb20gJy4uL3V0aWxzL3VzZUVuaGFuY2VkRWZmZWN0JztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IExpc3RDb250ZXh0IGZyb20gJy4uL0xpc3QvTGlzdENvbnRleHQnO1xuaW1wb3J0IGxpc3RJdGVtQnV0dG9uQ2xhc3NlcywgeyBnZXRMaXN0SXRlbUJ1dHRvblV0aWxpdHlDbGFzcyB9IGZyb20gJy4vbGlzdEl0ZW1CdXR0b25DbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgY29uc3Qgb3ZlcnJpZGVzUmVzb2x2ZXIgPSAocHJvcHMsIHN0eWxlcykgPT4ge1xuICBjb25zdCB7XG4gICAgb3duZXJTdGF0ZVxuICB9ID0gcHJvcHM7XG4gIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuZGVuc2UgJiYgc3R5bGVzLmRlbnNlLCBvd25lclN0YXRlLmFsaWduSXRlbXMgPT09ICdmbGV4LXN0YXJ0JyAmJiBzdHlsZXMuYWxpZ25JdGVtc0ZsZXhTdGFydCwgb3duZXJTdGF0ZS5kaXZpZGVyICYmIHN0eWxlcy5kaXZpZGVyLCAhb3duZXJTdGF0ZS5kaXNhYmxlR3V0dGVycyAmJiBzdHlsZXMuZ3V0dGVyc107XG59O1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGFsaWduSXRlbXMsXG4gICAgY2xhc3NlcyxcbiAgICBkZW5zZSxcbiAgICBkaXNhYmxlZCxcbiAgICBkaXNhYmxlR3V0dGVycyxcbiAgICBkaXZpZGVyLFxuICAgIHNlbGVjdGVkXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBkZW5zZSAmJiAnZGVuc2UnLCAhZGlzYWJsZUd1dHRlcnMgJiYgJ2d1dHRlcnMnLCBkaXZpZGVyICYmICdkaXZpZGVyJywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgYWxpZ25JdGVtcyA9PT0gJ2ZsZXgtc3RhcnQnICYmICdhbGlnbkl0ZW1zRmxleFN0YXJ0Jywgc2VsZWN0ZWQgJiYgJ3NlbGVjdGVkJ11cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldExpc3RJdGVtQnV0dG9uVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcbmNvbnN0IExpc3RJdGVtQnV0dG9uUm9vdCA9IHN0eWxlZChCdXR0b25CYXNlLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlMaXN0SXRlbUJ1dHRvbicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgZmxleEdyb3c6IDEsXG4gIGp1c3RpZnlDb250ZW50OiAnZmxleC1zdGFydCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgdGV4dERlY29yYXRpb246ICdub25lJyxcbiAgbWluV2lkdGg6IDAsXG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgcGFkZGluZ1RvcDogOCxcbiAgcGFkZGluZ0JvdHRvbTogOCxcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdiYWNrZ3JvdW5kLWNvbG9yJywge1xuICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVzdFxuICB9KSxcbiAgJyY6aG92ZXInOiB7XG4gICAgdGV4dERlY29yYXRpb246ICdub25lJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5ob3ZlcixcbiAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgIH1cbiAgfSxcbiAgW2AmLiR7bGlzdEl0ZW1CdXR0b25DbGFzc2VzLnNlbGVjdGVkfWBdOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUucHJpbWFyeS5tYWluQ2hhbm5lbH0gLyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5fSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eSksXG4gICAgW2AmLiR7bGlzdEl0ZW1CdXR0b25DbGFzc2VzLmZvY3VzVmlzaWJsZX1gXToge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUucHJpbWFyeS5tYWluQ2hhbm5lbH0gLyBjYWxjKCR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHl9ICsgJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmZvY3VzT3BhY2l0eX0pKWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlLnByaW1hcnkubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5ICsgdGhlbWUucGFsZXR0ZS5hY3Rpb24uZm9jdXNPcGFjaXR5KVxuICAgIH1cbiAgfSxcbiAgW2AmLiR7bGlzdEl0ZW1CdXR0b25DbGFzc2VzLnNlbGVjdGVkfTpob3ZlcmBdOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUucHJpbWFyeS5tYWluQ2hhbm5lbH0gLyBjYWxjKCR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHl9ICsgJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eX0pKWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlLnByaW1hcnkubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5ICsgdGhlbWUucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5KSxcbiAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLnByaW1hcnkubWFpbkNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eX0pYCA6IGFscGhhKHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHkpXG4gICAgfVxuICB9LFxuICBbYCYuJHtsaXN0SXRlbUJ1dHRvbkNsYXNzZXMuZm9jdXNWaXNpYmxlfWBdOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZm9jdXNcbiAgfSxcbiAgW2AmLiR7bGlzdEl0ZW1CdXR0b25DbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgb3BhY2l0eTogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkT3BhY2l0eVxuICB9XG59LCBvd25lclN0YXRlLmRpdmlkZXIgJiYge1xuICBib3JkZXJCb3R0b206IGAxcHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5kaXZpZGVyfWAsXG4gIGJhY2tncm91bmRDbGlwOiAncGFkZGluZy1ib3gnXG59LCBvd25lclN0YXRlLmFsaWduSXRlbXMgPT09ICdmbGV4LXN0YXJ0JyAmJiB7XG4gIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0J1xufSwgIW93bmVyU3RhdGUuZGlzYWJsZUd1dHRlcnMgJiYge1xuICBwYWRkaW5nTGVmdDogMTYsXG4gIHBhZGRpbmdSaWdodDogMTZcbn0sIG93bmVyU3RhdGUuZGVuc2UgJiYge1xuICBwYWRkaW5nVG9wOiA0LFxuICBwYWRkaW5nQm90dG9tOiA0XG59KSk7XG5jb25zdCBMaXN0SXRlbUJ1dHRvbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIExpc3RJdGVtQnV0dG9uKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlMaXN0SXRlbUJ1dHRvbidcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGFsaWduSXRlbXMgPSAnY2VudGVyJyxcbiAgICAgIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICAgICAgY29tcG9uZW50ID0gJ2RpdicsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGRlbnNlID0gZmFsc2UsXG4gICAgICBkaXNhYmxlR3V0dGVycyA9IGZhbHNlLFxuICAgICAgZGl2aWRlciA9IGZhbHNlLFxuICAgICAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lLFxuICAgICAgc2VsZWN0ZWQgPSBmYWxzZSxcbiAgICAgIGNsYXNzTmFtZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChMaXN0Q29udGV4dCk7XG4gIGNvbnN0IGNoaWxkQ29udGV4dCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBkZW5zZTogZGVuc2UgfHwgY29udGV4dC5kZW5zZSB8fCBmYWxzZSxcbiAgICBhbGlnbkl0ZW1zLFxuICAgIGRpc2FibGVHdXR0ZXJzXG4gIH0pLCBbYWxpZ25JdGVtcywgY29udGV4dC5kZW5zZSwgZGVuc2UsIGRpc2FibGVHdXR0ZXJzXSk7XG4gIGNvbnN0IGxpc3RJdGVtUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGF1dG9Gb2N1cykge1xuICAgICAgaWYgKGxpc3RJdGVtUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgbGlzdEl0ZW1SZWYuY3VycmVudC5mb2N1cygpO1xuICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogVW5hYmxlIHRvIHNldCBmb2N1cyB0byBhIExpc3RJdGVtQnV0dG9uIHdob3NlIGNvbXBvbmVudCBoYXMgbm90IGJlZW4gcmVuZGVyZWQuJyk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbYXV0b0ZvY3VzXSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBhbGlnbkl0ZW1zLFxuICAgIGRlbnNlOiBjaGlsZENvbnRleHQuZGVuc2UsXG4gICAgZGlzYWJsZUd1dHRlcnMsXG4gICAgZGl2aWRlcixcbiAgICBzZWxlY3RlZFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKGxpc3RJdGVtUmVmLCByZWYpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTGlzdENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY2hpbGRDb250ZXh0LFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChMaXN0SXRlbUJ1dHRvblJvb3QsIF9leHRlbmRzKHtcbiAgICAgIHJlZjogaGFuZGxlUmVmLFxuICAgICAgaHJlZjogb3RoZXIuaHJlZiB8fCBvdGhlci50b1xuICAgICAgLy8gYEJ1dHRvbkJhc2VgIHByb2Nlc3NlcyBgaHJlZmAgb3IgYHRvYCBpZiBgY29tcG9uZW50YCBpcyBzZXQgdG8gJ2J1dHRvbidcbiAgICAgICxcbiAgICAgIGNvbXBvbmVudDogKG90aGVyLmhyZWYgfHwgb3RoZXIudG8pICYmIGNvbXBvbmVudCA9PT0gJ2RpdicgPyAnYnV0dG9uJyA6IGNvbXBvbmVudCxcbiAgICAgIGZvY3VzVmlzaWJsZUNsYXNzTmFtZTogY2xzeChjbGFzc2VzLmZvY3VzVmlzaWJsZSwgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lKSxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpXG4gICAgfSwgb3RoZXIsIHtcbiAgICAgIGNsYXNzZXM6IGNsYXNzZXMsXG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IExpc3RJdGVtQnV0dG9uLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIGBhbGlnbi1pdGVtc2Agc3R5bGUgcHJvcGVydHkuXG4gICAqIEBkZWZhdWx0ICdjZW50ZXInXG4gICAqL1xuICBhbGlnbkl0ZW1zOiBQcm9wVHlwZXMub25lT2YoWydjZW50ZXInLCAnZmxleC1zdGFydCddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxpc3QgaXRlbSBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqIEZvY3VzIHdpbGwgYWxzbyBiZSB0cmlnZ2VyZWQgaWYgdGhlIHZhbHVlIGNoYW5nZXMgZnJvbSBmYWxzZSB0byB0cnVlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQgaWYgYSBgTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb25gIGlzIHVzZWQgaXQgbXVzdFxuICAgKiBiZSB0aGUgbGFzdCBjaGlsZC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgY29tcGFjdCB2ZXJ0aWNhbCBwYWRkaW5nIGRlc2lnbmVkIGZvciBrZXlib2FyZCBhbmQgbW91c2UgaW5wdXQgaXMgdXNlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgTGlzdCBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZW5zZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsZWZ0IGFuZCByaWdodCBwYWRkaW5nIGlzIHJlbW92ZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlR3V0dGVyczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgMXB4IGxpZ2h0IGJvcmRlciBpcyBhZGRlZCB0byB0aGUgYm90dG9tIG9mIHRoZSBsaXN0IGl0ZW0uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXZpZGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBjYW4gaGVscCBpZGVudGlmeSB3aGljaCBlbGVtZW50IGhhcyBrZXlib2FyZCBmb2N1cy5cbiAgICogVGhlIGNsYXNzIG5hbWUgd2lsbCBiZSBhcHBsaWVkIHdoZW4gdGhlIGVsZW1lbnQgZ2FpbnMgdGhlIGZvY3VzIHRocm91Z2gga2V5Ym9hcmQgaW50ZXJhY3Rpb24uXG4gICAqIEl0J3MgYSBwb2x5ZmlsbCBmb3IgdGhlIFtDU1MgOmZvY3VzLXZpc2libGUgc2VsZWN0b3JdKGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9zZWxlY3RvcnMtNC8jdGhlLWZvY3VzLXZpc2libGUtcHNldWRvKS5cbiAgICogVGhlIHJhdGlvbmFsZSBmb3IgdXNpbmcgdGhpcyBmZWF0dXJlIFtpcyBleHBsYWluZWQgaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvZm9jdXMtdmlzaWJsZS9ibG9iL0hFQUQvZXhwbGFpbmVyLm1kKS5cbiAgICogQSBbcG9seWZpbGwgY2FuIGJlIHVzZWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL2ZvY3VzLXZpc2libGUpIHRvIGFwcGx5IGEgYGZvY3VzLXZpc2libGVgIGNsYXNzIHRvIG90aGVyIGNvbXBvbmVudHNcbiAgICogaWYgbmVlZGVkLlxuICAgKi9cbiAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFVzZSB0byBhcHBseSBzZWxlY3RlZCBzdHlsaW5nLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTGlzdEl0ZW1CdXR0b247IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpc3RJdGVtQnV0dG9uVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlMaXN0SXRlbUJ1dHRvbicsIHNsb3QpO1xufVxuY29uc3QgbGlzdEl0ZW1CdXR0b25DbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpTGlzdEl0ZW1CdXR0b24nLCBbJ3Jvb3QnLCAnZm9jdXNWaXNpYmxlJywgJ2RlbnNlJywgJ2FsaWduSXRlbXNGbGV4U3RhcnQnLCAnZGlzYWJsZWQnLCAnZGl2aWRlcicsICdndXR0ZXJzJywgJ3NlbGVjdGVkJ10pO1xuZXhwb3J0IGRlZmF1bHQgbGlzdEl0ZW1CdXR0b25DbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFjdGlvbnNcIiwgXCJhdXRvRm9jdXNcIiwgXCJhdXRvRm9jdXNJdGVtXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlXCIsIFwiZGlzYWJsZUxpc3RXcmFwXCIsIFwib25LZXlEb3duXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzRnJhZ21lbnQgfSBmcm9tICdyZWFjdC1pcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IG93bmVyRG9jdW1lbnQgZnJvbSAnLi4vdXRpbHMvb3duZXJEb2N1bWVudCc7XG5pbXBvcnQgTGlzdCBmcm9tICcuLi9MaXN0JztcbmltcG9ydCBnZXRTY3JvbGxiYXJTaXplIGZyb20gJy4uL3V0aWxzL2dldFNjcm9sbGJhclNpemUnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgdXNlRW5oYW5jZWRFZmZlY3QgZnJvbSAnLi4vdXRpbHMvdXNlRW5oYW5jZWRFZmZlY3QnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIG5leHRJdGVtKGxpc3QsIGl0ZW0sIGRpc2FibGVMaXN0V3JhcCkge1xuICBpZiAobGlzdCA9PT0gaXRlbSkge1xuICAgIHJldHVybiBsaXN0LmZpcnN0Q2hpbGQ7XG4gIH1cbiAgaWYgKGl0ZW0gJiYgaXRlbS5uZXh0RWxlbWVudFNpYmxpbmcpIHtcbiAgICByZXR1cm4gaXRlbS5uZXh0RWxlbWVudFNpYmxpbmc7XG4gIH1cbiAgcmV0dXJuIGRpc2FibGVMaXN0V3JhcCA/IG51bGwgOiBsaXN0LmZpcnN0Q2hpbGQ7XG59XG5mdW5jdGlvbiBwcmV2aW91c0l0ZW0obGlzdCwgaXRlbSwgZGlzYWJsZUxpc3RXcmFwKSB7XG4gIGlmIChsaXN0ID09PSBpdGVtKSB7XG4gICAgcmV0dXJuIGRpc2FibGVMaXN0V3JhcCA/IGxpc3QuZmlyc3RDaGlsZCA6IGxpc3QubGFzdENoaWxkO1xuICB9XG4gIGlmIChpdGVtICYmIGl0ZW0ucHJldmlvdXNFbGVtZW50U2libGluZykge1xuICAgIHJldHVybiBpdGVtLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gIH1cbiAgcmV0dXJuIGRpc2FibGVMaXN0V3JhcCA/IG51bGwgOiBsaXN0Lmxhc3RDaGlsZDtcbn1cbmZ1bmN0aW9uIHRleHRDcml0ZXJpYU1hdGNoZXMobmV4dEZvY3VzLCB0ZXh0Q3JpdGVyaWEpIHtcbiAgaWYgKHRleHRDcml0ZXJpYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgbGV0IHRleHQgPSBuZXh0Rm9jdXMuaW5uZXJUZXh0O1xuICBpZiAodGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8ganNkb20gZG9lc24ndCBzdXBwb3J0IGlubmVyVGV4dFxuICAgIHRleHQgPSBuZXh0Rm9jdXMudGV4dENvbnRlbnQ7XG4gIH1cbiAgdGV4dCA9IHRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGlmICh0ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodGV4dENyaXRlcmlhLnJlcGVhdGluZykge1xuICAgIHJldHVybiB0ZXh0WzBdID09PSB0ZXh0Q3JpdGVyaWEua2V5c1swXTtcbiAgfVxuICByZXR1cm4gdGV4dC5pbmRleE9mKHRleHRDcml0ZXJpYS5rZXlzLmpvaW4oJycpKSA9PT0gMDtcbn1cbmZ1bmN0aW9uIG1vdmVGb2N1cyhsaXN0LCBjdXJyZW50Rm9jdXMsIGRpc2FibGVMaXN0V3JhcCwgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSwgdHJhdmVyc2FsRnVuY3Rpb24sIHRleHRDcml0ZXJpYSkge1xuICBsZXQgd3JhcHBlZE9uY2UgPSBmYWxzZTtcbiAgbGV0IG5leHRGb2N1cyA9IHRyYXZlcnNhbEZ1bmN0aW9uKGxpc3QsIGN1cnJlbnRGb2N1cywgY3VycmVudEZvY3VzID8gZGlzYWJsZUxpc3RXcmFwIDogZmFsc2UpO1xuICB3aGlsZSAobmV4dEZvY3VzKSB7XG4gICAgLy8gUHJldmVudCBpbmZpbml0ZSBsb29wLlxuICAgIGlmIChuZXh0Rm9jdXMgPT09IGxpc3QuZmlyc3RDaGlsZCkge1xuICAgICAgaWYgKHdyYXBwZWRPbmNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHdyYXBwZWRPbmNlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBTYW1lIGxvZ2ljIGFzIHVzZUF1dG9jb21wbGV0ZS5qc1xuICAgIGNvbnN0IG5leHRGb2N1c0Rpc2FibGVkID0gZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSA/IGZhbHNlIDogbmV4dEZvY3VzLmRpc2FibGVkIHx8IG5leHRGb2N1cy5nZXRBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnKSA9PT0gJ3RydWUnO1xuICAgIGlmICghbmV4dEZvY3VzLmhhc0F0dHJpYnV0ZSgndGFiaW5kZXgnKSB8fCAhdGV4dENyaXRlcmlhTWF0Y2hlcyhuZXh0Rm9jdXMsIHRleHRDcml0ZXJpYSkgfHwgbmV4dEZvY3VzRGlzYWJsZWQpIHtcbiAgICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgZWxlbWVudC5cbiAgICAgIG5leHRGb2N1cyA9IHRyYXZlcnNhbEZ1bmN0aW9uKGxpc3QsIG5leHRGb2N1cywgZGlzYWJsZUxpc3RXcmFwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dEZvY3VzLmZvY3VzKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEEgcGVybWFuZW50bHkgZGlzcGxheWVkIG1lbnUgZm9sbG93aW5nIGh0dHBzOi8vd3d3LnczLm9yZy9XQUkvQVJJQS9hcGcvcGF0dGVybnMvbWVudS1idXR0b24vLlxuICogSXQncyBleHBvc2VkIHRvIGhlbHAgY3VzdG9taXphdGlvbiBvZiB0aGUgW2BNZW51YF0oL21hdGVyaWFsLXVpL2FwaS9tZW51LykgY29tcG9uZW50IGlmIHlvdVxuICogdXNlIGl0IHNlcGFyYXRlbHkgeW91IG5lZWQgdG8gbW92ZSBmb2N1cyBpbnRvIHRoZSBjb21wb25lbnQgbWFudWFsbHkuIE9uY2VcbiAqIHRoZSBmb2N1cyBpcyBwbGFjZWQgaW5zaWRlIHRoZSBjb21wb25lbnQgaXQgaXMgZnVsbHkga2V5Ym9hcmQgYWNjZXNzaWJsZS5cbiAqL1xuY29uc3QgTWVudUxpc3QgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBNZW51TGlzdChwcm9wcywgcmVmKSB7XG4gIGNvbnN0IHtcbiAgICAgIC8vIHByaXZhdGVcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcm9wLXR5cGVzXG4gICAgICBhY3Rpb25zLFxuICAgICAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gICAgICBhdXRvRm9jdXNJdGVtID0gZmFsc2UsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRpc2FibGVkSXRlbXNGb2N1c2FibGUgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVMaXN0V3JhcCA9IGZhbHNlLFxuICAgICAgb25LZXlEb3duLFxuICAgICAgdmFyaWFudCA9ICdzZWxlY3RlZE1lbnUnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGxpc3RSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IHRleHRDcml0ZXJpYVJlZiA9IFJlYWN0LnVzZVJlZih7XG4gICAga2V5czogW10sXG4gICAgcmVwZWF0aW5nOiB0cnVlLFxuICAgIHByZXZpb3VzS2V5TWF0Y2hlZDogdHJ1ZSxcbiAgICBsYXN0VGltZTogbnVsbFxuICB9KTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChhdXRvRm9jdXMpIHtcbiAgICAgIGxpc3RSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgfSwgW2F1dG9Gb2N1c10pO1xuICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKGFjdGlvbnMsICgpID0+ICh7XG4gICAgYWRqdXN0U3R5bGVGb3JTY3JvbGxiYXI6IChjb250YWluZXJFbGVtZW50LCB0aGVtZSkgPT4ge1xuICAgICAgLy8gTGV0J3MgaWdub3JlIHRoYXQgcGllY2Ugb2YgbG9naWMgaWYgdXNlcnMgYXJlIGFscmVhZHkgb3ZlcnJpZGluZyB0aGUgd2lkdGhcbiAgICAgIC8vIG9mIHRoZSBtZW51LlxuICAgICAgY29uc3Qgbm9FeHBsaWNpdFdpZHRoID0gIWxpc3RSZWYuY3VycmVudC5zdHlsZS53aWR0aDtcbiAgICAgIGlmIChjb250YWluZXJFbGVtZW50LmNsaWVudEhlaWdodCA8IGxpc3RSZWYuY3VycmVudC5jbGllbnRIZWlnaHQgJiYgbm9FeHBsaWNpdFdpZHRoKSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbGJhclNpemUgPSBgJHtnZXRTY3JvbGxiYXJTaXplKG93bmVyRG9jdW1lbnQoY29udGFpbmVyRWxlbWVudCkpfXB4YDtcbiAgICAgICAgbGlzdFJlZi5jdXJyZW50LnN0eWxlW3RoZW1lLmRpcmVjdGlvbiA9PT0gJ3J0bCcgPyAncGFkZGluZ0xlZnQnIDogJ3BhZGRpbmdSaWdodCddID0gc2Nyb2xsYmFyU2l6ZTtcbiAgICAgICAgbGlzdFJlZi5jdXJyZW50LnN0eWxlLndpZHRoID0gYGNhbGMoMTAwJSArICR7c2Nyb2xsYmFyU2l6ZX0pYDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0UmVmLmN1cnJlbnQ7XG4gICAgfVxuICB9KSwgW10pO1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gZXZlbnQgPT4ge1xuICAgIGNvbnN0IGxpc3QgPSBsaXN0UmVmLmN1cnJlbnQ7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtFbGVtZW50fSAtIHdpbGwgYWx3YXlzIGJlIGRlZmluZWQgc2luY2Ugd2UgYXJlIGluIGEga2V5ZG93biBoYW5kbGVyXG4gICAgICogYXR0YWNoZWQgdG8gYW4gZWxlbWVudC4gQSBrZXlkb3duIGV2ZW50IGlzIGVpdGhlciBkaXNwYXRjaGVkIHRvIHRoZSBhY3RpdmVFbGVtZW50XG4gICAgICogb3IgZG9jdW1lbnQuYm9keSBvciBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuIE9ubHkgdGhlIGZpcnN0IGNhc2Ugd2lsbFxuICAgICAqIHRyaWdnZXIgdGhpcyBzcGVjaWZpYyBoYW5kbGVyLlxuICAgICAqL1xuICAgIGNvbnN0IGN1cnJlbnRGb2N1cyA9IG93bmVyRG9jdW1lbnQobGlzdCkuYWN0aXZlRWxlbWVudDtcbiAgICBpZiAoa2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgLy8gUHJldmVudCBzY3JvbGwgb2YgdGhlIHBhZ2VcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBtb3ZlRm9jdXMobGlzdCwgY3VycmVudEZvY3VzLCBkaXNhYmxlTGlzdFdyYXAsIGRpc2FibGVkSXRlbXNGb2N1c2FibGUsIG5leHRJdGVtKTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbW92ZUZvY3VzKGxpc3QsIGN1cnJlbnRGb2N1cywgZGlzYWJsZUxpc3RXcmFwLCBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlLCBwcmV2aW91c0l0ZW0pO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnSG9tZScpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBtb3ZlRm9jdXMobGlzdCwgbnVsbCwgZGlzYWJsZUxpc3RXcmFwLCBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlLCBuZXh0SXRlbSk7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdFbmQnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbW92ZUZvY3VzKGxpc3QsIG51bGwsIGRpc2FibGVMaXN0V3JhcCwgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSwgcHJldmlvdXNJdGVtKTtcbiAgICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGNyaXRlcmlhID0gdGV4dENyaXRlcmlhUmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBsb3dlcktleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgY3VyclRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgIGlmIChjcml0ZXJpYS5rZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gUmVzZXRcbiAgICAgICAgaWYgKGN1cnJUaW1lIC0gY3JpdGVyaWEubGFzdFRpbWUgPiA1MDApIHtcbiAgICAgICAgICBjcml0ZXJpYS5rZXlzID0gW107XG4gICAgICAgICAgY3JpdGVyaWEucmVwZWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgICBjcml0ZXJpYS5wcmV2aW91c0tleU1hdGNoZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGNyaXRlcmlhLnJlcGVhdGluZyAmJiBsb3dlcktleSAhPT0gY3JpdGVyaWEua2V5c1swXSkge1xuICAgICAgICAgIGNyaXRlcmlhLnJlcGVhdGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjcml0ZXJpYS5sYXN0VGltZSA9IGN1cnJUaW1lO1xuICAgICAgY3JpdGVyaWEua2V5cy5wdXNoKGxvd2VyS2V5KTtcbiAgICAgIGNvbnN0IGtlZXBGb2N1c09uQ3VycmVudCA9IGN1cnJlbnRGb2N1cyAmJiAhY3JpdGVyaWEucmVwZWF0aW5nICYmIHRleHRDcml0ZXJpYU1hdGNoZXMoY3VycmVudEZvY3VzLCBjcml0ZXJpYSk7XG4gICAgICBpZiAoY3JpdGVyaWEucHJldmlvdXNLZXlNYXRjaGVkICYmIChrZWVwRm9jdXNPbkN1cnJlbnQgfHwgbW92ZUZvY3VzKGxpc3QsIGN1cnJlbnRGb2N1cywgZmFsc2UsIGRpc2FibGVkSXRlbXNGb2N1c2FibGUsIG5leHRJdGVtLCBjcml0ZXJpYSkpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjcml0ZXJpYS5wcmV2aW91c0tleU1hdGNoZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9uS2V5RG93bikge1xuICAgICAgb25LZXlEb3duKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYobGlzdFJlZiwgcmVmKTtcblxuICAvKipcbiAgICogdGhlIGluZGV4IG9mIHRoZSBpdGVtIHNob3VsZCByZWNlaXZlIGZvY3VzXG4gICAqIGluIGEgYHZhcmlhbnQ9XCJzZWxlY3RlZE1lbnVcImAgaXQncyB0aGUgZmlyc3QgYHNlbGVjdGVkYCBpdGVtXG4gICAqIG90aGVyd2lzZSBpdCdzIHRoZSB2ZXJ5IGZpcnN0IGl0ZW0uXG4gICAqL1xuICBsZXQgYWN0aXZlSXRlbUluZGV4ID0gLTE7XG4gIC8vIHNpbmNlIHdlIGluamVjdCBmb2N1cyByZWxhdGVkIHByb3BzIGludG8gY2hpbGRyZW4gd2UgaGF2ZSB0byBkbyBhIGxvb2thaGVhZFxuICAvLyB0byBjaGVjayBpZiB0aGVyZSBpcyBhIGBzZWxlY3RlZGAgaXRlbS4gV2UncmUgbG9va2luZyBmb3IgdGhlIGxhc3QgYHNlbGVjdGVkYFxuICAvLyBpdGVtIGFuZCB1c2UgdGhlIGZpcnN0IHZhbGlkIGl0ZW0gYXMgYSBmYWxsYmFja1xuICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKGNoaWxkcmVuLCAoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgaWYgKCEgLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgaWYgKGFjdGl2ZUl0ZW1JbmRleCA9PT0gaW5kZXgpIHtcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4ICs9IDE7XG4gICAgICAgIGlmIChhY3RpdmVJdGVtSW5kZXggPj0gY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdGhlcmUgYXJlIG5vIGZvY3VzYWJsZSBpdGVtcyB3aXRoaW4gdGhlIGxpc3QuXG4gICAgICAgICAgYWN0aXZlSXRlbUluZGV4ID0gLTE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpc0ZyYWdtZW50KGNoaWxkKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtcIk1VSTogVGhlIE1lbnUgY29tcG9uZW50IGRvZXNuJ3QgYWNjZXB0IGEgRnJhZ21lbnQgYXMgYSBjaGlsZC5cIiwgJ0NvbnNpZGVyIHByb3ZpZGluZyBhbiBhcnJheSBpbnN0ZWFkLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFjaGlsZC5wcm9wcy5kaXNhYmxlZCkge1xuICAgICAgaWYgKHZhcmlhbnQgPT09ICdzZWxlY3RlZE1lbnUnICYmIGNoaWxkLnByb3BzLnNlbGVjdGVkKSB7XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IGluZGV4O1xuICAgICAgfSBlbHNlIGlmIChhY3RpdmVJdGVtSW5kZXggPT09IC0xKSB7XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IGluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWN0aXZlSXRlbUluZGV4ID09PSBpbmRleCAmJiAoY2hpbGQucHJvcHMuZGlzYWJsZWQgfHwgY2hpbGQucHJvcHMubXVpU2tpcExpc3RIaWdobGlnaHQgfHwgY2hpbGQudHlwZS5tdWlTa2lwTGlzdEhpZ2hsaWdodCkpIHtcbiAgICAgIGFjdGl2ZUl0ZW1JbmRleCArPSAxO1xuICAgICAgaWYgKGFjdGl2ZUl0ZW1JbmRleCA+PSBjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgLy8gdGhlcmUgYXJlIG5vIGZvY3VzYWJsZSBpdGVtcyB3aXRoaW4gdGhlIGxpc3QuXG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGl0ZW1zID0gUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgaWYgKGluZGV4ID09PSBhY3RpdmVJdGVtSW5kZXgpIHtcbiAgICAgIGNvbnN0IG5ld0NoaWxkUHJvcHMgPSB7fTtcbiAgICAgIGlmIChhdXRvRm9jdXNJdGVtKSB7XG4gICAgICAgIG5ld0NoaWxkUHJvcHMuYXV0b0ZvY3VzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGlsZC5wcm9wcy50YWJJbmRleCA9PT0gdW5kZWZpbmVkICYmIHZhcmlhbnQgPT09ICdzZWxlY3RlZE1lbnUnKSB7XG4gICAgICAgIG5ld0NoaWxkUHJvcHMudGFiSW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIG5ld0NoaWxkUHJvcHMpO1xuICAgIH1cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTGlzdCwgX2V4dGVuZHMoe1xuICAgIHJvbGU6IFwibWVudVwiLFxuICAgIHJlZjogaGFuZGxlUmVmLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICB0YWJJbmRleDogYXV0b0ZvY3VzID8gMCA6IC0xXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IGl0ZW1zXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTWVudUxpc3QucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogSWYgYHRydWVgLCB3aWxsIGZvY3VzIHRoZSBgW3JvbGU9XCJtZW51XCJdYCBjb250YWluZXIgYW5kIG1vdmUgaW50byB0YWIgb3JkZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB3aWxsIGZvY3VzIHRoZSBmaXJzdCBtZW51aXRlbSBpZiBgdmFyaWFudD1cIm1lbnVcImAgb3Igc2VsZWN0ZWQgaXRlbVxuICAgKiBpZiBgdmFyaWFudD1cInNlbGVjdGVkTWVudVwiYC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGF1dG9Gb2N1c0l0ZW06IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTWVudUxpc3QgY29udGVudHMsIG5vcm1hbGx5IGBNZW51SXRlbWBzLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB3aWxsIGFsbG93IGZvY3VzIG9uIGRpc2FibGVkIGl0ZW1zLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBtZW51IGl0ZW1zIHdpbGwgbm90IHdyYXAgZm9jdXMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlTGlzdFdyYXA6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS4gVXNlIGBtZW51YCB0byBwcmV2ZW50IHNlbGVjdGVkIGl0ZW1zIGZyb20gaW1wYWN0aW5nIHRoZSBpbml0aWFsIGZvY3VzXG4gICAqIGFuZCB0aGUgdmVydGljYWwgYWxpZ25tZW50IHJlbGF0aXZlIHRvIHRoZSBhbmNob3IgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgJ3NlbGVjdGVkTWVudSdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ21lbnUnLCAnc2VsZWN0ZWRNZW51J10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTWVudUxpc3Q7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZGFsVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlNb2RhbCcsIHNsb3QpO1xufVxuY29uc3QgbW9kYWxDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpTW9kYWwnLCBbJ3Jvb3QnLCAnaGlkZGVuJywgJ2JhY2tkcm9wJ10pO1xuZXhwb3J0IGRlZmF1bHQgbW9kYWxDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIkJhY2tkcm9wQ29tcG9uZW50XCIsIFwiQmFja2Ryb3BQcm9wc1wiLCBcImNsYXNzZXNcIiwgXCJjbGFzc05hbWVcIiwgXCJjbG9zZUFmdGVyVHJhbnNpdGlvblwiLCBcImNoaWxkcmVuXCIsIFwiY29udGFpbmVyXCIsIFwiY29tcG9uZW50XCIsIFwiY29tcG9uZW50c1wiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcImRpc2FibGVBdXRvRm9jdXNcIiwgXCJkaXNhYmxlRW5mb3JjZUZvY3VzXCIsIFwiZGlzYWJsZUVzY2FwZUtleURvd25cIiwgXCJkaXNhYmxlUG9ydGFsXCIsIFwiZGlzYWJsZVJlc3RvcmVGb2N1c1wiLCBcImRpc2FibGVTY3JvbGxMb2NrXCIsIFwiaGlkZUJhY2tkcm9wXCIsIFwia2VlcE1vdW50ZWRcIiwgXCJvbkJhY2tkcm9wQ2xpY2tcIiwgXCJvbkNsb3NlXCIsIFwib25UcmFuc2l0aW9uRW50ZXJcIiwgXCJvblRyYW5zaXRpb25FeGl0ZWRcIiwgXCJvcGVuXCIsIFwic2xvdFByb3BzXCIsIFwic2xvdHNcIiwgXCJ0aGVtZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IGVsZW1lbnRBY2NlcHRpbmdSZWYsIEhUTUxFbGVtZW50VHlwZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgdXNlU2xvdFByb3BzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCB7IHVuc3RhYmxlX3VzZU1vZGFsIGFzIHVzZU1vZGFsIH0gZnJvbSAnQG11aS9iYXNlL3Vuc3RhYmxlX3VzZU1vZGFsJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBGb2N1c1RyYXAgZnJvbSAnLi4vVW5zdGFibGVfVHJhcEZvY3VzJztcbmltcG9ydCBQb3J0YWwgZnJvbSAnLi4vUG9ydGFsJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgQmFja2Ryb3AgZnJvbSAnLi4vQmFja2Ryb3AnO1xuaW1wb3J0IHsgZ2V0TW9kYWxVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL21vZGFsQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIG9wZW4sXG4gICAgZXhpdGVkLFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsICFvcGVuICYmIGV4aXRlZCAmJiAnaGlkZGVuJ10sXG4gICAgYmFja2Ryb3A6IFsnYmFja2Ryb3AnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldE1vZGFsVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBNb2RhbFJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aU1vZGFsJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsICFvd25lclN0YXRlLm9wZW4gJiYgb3duZXJTdGF0ZS5leGl0ZWQgJiYgc3R5bGVzLmhpZGRlbl07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHBvc2l0aW9uOiAnZml4ZWQnLFxuICB6SW5kZXg6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS56SW5kZXgubW9kYWwsXG4gIHJpZ2h0OiAwLFxuICBib3R0b206IDAsXG4gIHRvcDogMCxcbiAgbGVmdDogMFxufSwgIW93bmVyU3RhdGUub3BlbiAmJiBvd25lclN0YXRlLmV4aXRlZCAmJiB7XG4gIHZpc2liaWxpdHk6ICdoaWRkZW4nXG59KSk7XG5jb25zdCBNb2RhbEJhY2tkcm9wID0gc3R5bGVkKEJhY2tkcm9wLCB7XG4gIG5hbWU6ICdNdWlNb2RhbCcsXG4gIHNsb3Q6ICdCYWNrZHJvcCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIHJldHVybiBzdHlsZXMuYmFja2Ryb3A7XG4gIH1cbn0pKHtcbiAgekluZGV4OiAtMVxufSk7XG5cbi8qKlxuICogTW9kYWwgaXMgYSBsb3dlci1sZXZlbCBjb25zdHJ1Y3QgdGhhdCBpcyBsZXZlcmFnZWQgYnkgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOlxuICpcbiAqIC0gW0RpYWxvZ10oL21hdGVyaWFsLXVpL2FwaS9kaWFsb2cvKVxuICogLSBbRHJhd2VyXSgvbWF0ZXJpYWwtdWkvYXBpL2RyYXdlci8pXG4gKiAtIFtNZW51XSgvbWF0ZXJpYWwtdWkvYXBpL21lbnUvKVxuICogLSBbUG9wb3Zlcl0oL21hdGVyaWFsLXVpL2FwaS9wb3BvdmVyLylcbiAqXG4gKiBJZiB5b3UgYXJlIGNyZWF0aW5nIGEgbW9kYWwgZGlhbG9nLCB5b3UgcHJvYmFibHkgd2FudCB0byB1c2UgdGhlIFtEaWFsb2ddKC9tYXRlcmlhbC11aS9hcGkvZGlhbG9nLykgY29tcG9uZW50XG4gKiByYXRoZXIgdGhhbiBkaXJlY3RseSB1c2luZyBNb2RhbC5cbiAqXG4gKiBUaGlzIGNvbXBvbmVudCBzaGFyZXMgbWFueSBjb25jZXB0cyB3aXRoIFtyZWFjdC1vdmVybGF5c10oaHR0cHM6Ly9yZWFjdC1ib290c3RyYXAuZ2l0aHViLmlvL3JlYWN0LW92ZXJsYXlzLyNtb2RhbHMpLlxuICovXG5jb25zdCBNb2RhbCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIE1vZGFsKGluUHJvcHMsIHJlZikge1xuICB2YXIgX3JlZiwgX3Nsb3RzJHJvb3QsIF9yZWYyLCBfc2xvdHMkYmFja2Ryb3AsIF9zbG90UHJvcHMkcm9vdCwgX3Nsb3RQcm9wcyRiYWNrZHJvcDtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBuYW1lOiAnTXVpTW9kYWwnLFxuICAgIHByb3BzOiBpblByb3BzXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBCYWNrZHJvcENvbXBvbmVudCA9IE1vZGFsQmFja2Ryb3AsXG4gICAgICBCYWNrZHJvcFByb3BzLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY2xvc2VBZnRlclRyYW5zaXRpb24gPSBmYWxzZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY29udGFpbmVyLFxuICAgICAgY29tcG9uZW50LFxuICAgICAgY29tcG9uZW50cyA9IHt9LFxuICAgICAgY29tcG9uZW50c1Byb3BzID0ge30sXG4gICAgICBkaXNhYmxlQXV0b0ZvY3VzID0gZmFsc2UsXG4gICAgICBkaXNhYmxlRW5mb3JjZUZvY3VzID0gZmFsc2UsXG4gICAgICBkaXNhYmxlRXNjYXBlS2V5RG93biA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVBvcnRhbCA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVJlc3RvcmVGb2N1cyA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVNjcm9sbExvY2sgPSBmYWxzZSxcbiAgICAgIGhpZGVCYWNrZHJvcCA9IGZhbHNlLFxuICAgICAga2VlcE1vdW50ZWQgPSBmYWxzZSxcbiAgICAgIG9uQmFja2Ryb3BDbGljayxcbiAgICAgIG9wZW4sXG4gICAgICBzbG90UHJvcHMsXG4gICAgICBzbG90c1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3Byb3AtdHlwZXNcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgcHJvcHNXaXRoRGVmYXVsdHMgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjbG9zZUFmdGVyVHJhbnNpdGlvbixcbiAgICBkaXNhYmxlQXV0b0ZvY3VzLFxuICAgIGRpc2FibGVFbmZvcmNlRm9jdXMsXG4gICAgZGlzYWJsZUVzY2FwZUtleURvd24sXG4gICAgZGlzYWJsZVBvcnRhbCxcbiAgICBkaXNhYmxlUmVzdG9yZUZvY3VzLFxuICAgIGRpc2FibGVTY3JvbGxMb2NrLFxuICAgIGhpZGVCYWNrZHJvcCxcbiAgICBrZWVwTW91bnRlZFxuICB9KTtcbiAgY29uc3Qge1xuICAgIGdldFJvb3RQcm9wcyxcbiAgICBnZXRCYWNrZHJvcFByb3BzLFxuICAgIGdldFRyYW5zaXRpb25Qcm9wcyxcbiAgICBwb3J0YWxSZWYsXG4gICAgaXNUb3BNb2RhbCxcbiAgICBleGl0ZWQsXG4gICAgaGFzVHJhbnNpdGlvblxuICB9ID0gdXNlTW9kYWwoX2V4dGVuZHMoe30sIHByb3BzV2l0aERlZmF1bHRzLCB7XG4gICAgcm9vdFJlZjogcmVmXG4gIH0pKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wc1dpdGhEZWZhdWx0cywge1xuICAgIGV4aXRlZFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBjaGlsZFByb3BzID0ge307XG4gIGlmIChjaGlsZHJlbi5wcm9wcy50YWJJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2hpbGRQcm9wcy50YWJJbmRleCA9ICctMSc7XG4gIH1cblxuICAvLyBJdCdzIGEgVHJhbnNpdGlvbiBsaWtlIGNvbXBvbmVudFxuICBpZiAoaGFzVHJhbnNpdGlvbikge1xuICAgIGNvbnN0IHtcbiAgICAgIG9uRW50ZXIsXG4gICAgICBvbkV4aXRlZFxuICAgIH0gPSBnZXRUcmFuc2l0aW9uUHJvcHMoKTtcbiAgICBjaGlsZFByb3BzLm9uRW50ZXIgPSBvbkVudGVyO1xuICAgIGNoaWxkUHJvcHMub25FeGl0ZWQgPSBvbkV4aXRlZDtcbiAgfVxuICBjb25zdCBSb290U2xvdCA9IChfcmVmID0gKF9zbG90cyRyb290ID0gc2xvdHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RzLnJvb3QpICE9IG51bGwgPyBfc2xvdHMkcm9vdCA6IGNvbXBvbmVudHMuUm9vdCkgIT0gbnVsbCA/IF9yZWYgOiBNb2RhbFJvb3Q7XG4gIGNvbnN0IEJhY2tkcm9wU2xvdCA9IChfcmVmMiA9IChfc2xvdHMkYmFja2Ryb3AgPSBzbG90cyA9PSBudWxsID8gdm9pZCAwIDogc2xvdHMuYmFja2Ryb3ApICE9IG51bGwgPyBfc2xvdHMkYmFja2Ryb3AgOiBjb21wb25lbnRzLkJhY2tkcm9wKSAhPSBudWxsID8gX3JlZjIgOiBCYWNrZHJvcENvbXBvbmVudDtcbiAgY29uc3Qgcm9vdFNsb3RQcm9wcyA9IChfc2xvdFByb3BzJHJvb3QgPSBzbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RQcm9wcy5yb290KSAhPSBudWxsID8gX3Nsb3RQcm9wcyRyb290IDogY29tcG9uZW50c1Byb3BzLnJvb3Q7XG4gIGNvbnN0IGJhY2tkcm9wU2xvdFByb3BzID0gKF9zbG90UHJvcHMkYmFja2Ryb3AgPSBzbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RQcm9wcy5iYWNrZHJvcCkgIT0gbnVsbCA/IF9zbG90UHJvcHMkYmFja2Ryb3AgOiBjb21wb25lbnRzUHJvcHMuYmFja2Ryb3A7XG4gIGNvbnN0IHJvb3RQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgZWxlbWVudFR5cGU6IFJvb3RTbG90LFxuICAgIGV4dGVybmFsU2xvdFByb3BzOiByb290U2xvdFByb3BzLFxuICAgIGV4dGVybmFsRm9yd2FyZGVkUHJvcHM6IG90aGVyLFxuICAgIGdldFNsb3RQcm9wczogZ2V0Um9vdFByb3BzLFxuICAgIGFkZGl0aW9uYWxQcm9wczoge1xuICAgICAgcmVmLFxuICAgICAgYXM6IGNvbXBvbmVudFxuICAgIH0sXG4gICAgb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3NOYW1lLCByb290U2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiByb290U2xvdFByb3BzLmNsYXNzTmFtZSwgY2xhc3NlcyA9PSBudWxsID8gdm9pZCAwIDogY2xhc3Nlcy5yb290LCAhb3duZXJTdGF0ZS5vcGVuICYmIG93bmVyU3RhdGUuZXhpdGVkICYmIChjbGFzc2VzID09IG51bGwgPyB2b2lkIDAgOiBjbGFzc2VzLmhpZGRlbikpXG4gIH0pO1xuICBjb25zdCBiYWNrZHJvcFByb3BzID0gdXNlU2xvdFByb3BzKHtcbiAgICBlbGVtZW50VHlwZTogQmFja2Ryb3BTbG90LFxuICAgIGV4dGVybmFsU2xvdFByb3BzOiBiYWNrZHJvcFNsb3RQcm9wcyxcbiAgICBhZGRpdGlvbmFsUHJvcHM6IEJhY2tkcm9wUHJvcHMsXG4gICAgZ2V0U2xvdFByb3BzOiBvdGhlckhhbmRsZXJzID0+IHtcbiAgICAgIHJldHVybiBnZXRCYWNrZHJvcFByb3BzKF9leHRlbmRzKHt9LCBvdGhlckhhbmRsZXJzLCB7XG4gICAgICAgIG9uQ2xpY2s6IGUgPT4ge1xuICAgICAgICAgIGlmIChvbkJhY2tkcm9wQ2xpY2spIHtcbiAgICAgICAgICAgIG9uQmFja2Ryb3BDbGljayhlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG90aGVySGFuZGxlcnMgIT0gbnVsbCAmJiBvdGhlckhhbmRsZXJzLm9uQ2xpY2spIHtcbiAgICAgICAgICAgIG90aGVySGFuZGxlcnMub25DbGljayhlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9LFxuICAgIGNsYXNzTmFtZTogY2xzeChiYWNrZHJvcFNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogYmFja2Ryb3BTbG90UHJvcHMuY2xhc3NOYW1lLCBCYWNrZHJvcFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBCYWNrZHJvcFByb3BzLmNsYXNzTmFtZSwgY2xhc3NlcyA9PSBudWxsID8gdm9pZCAwIDogY2xhc3Nlcy5iYWNrZHJvcCksXG4gICAgb3duZXJTdGF0ZVxuICB9KTtcbiAgaWYgKCFrZWVwTW91bnRlZCAmJiAhb3BlbiAmJiAoIWhhc1RyYW5zaXRpb24gfHwgZXhpdGVkKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChQb3J0YWwsIHtcbiAgICByZWY6IHBvcnRhbFJlZixcbiAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICBkaXNhYmxlUG9ydGFsOiBkaXNhYmxlUG9ydGFsLFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeHMoUm9vdFNsb3QsIF9leHRlbmRzKHt9LCByb290UHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBbIWhpZGVCYWNrZHJvcCAmJiBCYWNrZHJvcENvbXBvbmVudCA/IC8qI19fUFVSRV9fKi9fanN4KEJhY2tkcm9wU2xvdCwgX2V4dGVuZHMoe30sIGJhY2tkcm9wUHJvcHMpKSA6IG51bGwsIC8qI19fUFVSRV9fKi9fanN4KEZvY3VzVHJhcCwge1xuICAgICAgICBkaXNhYmxlRW5mb3JjZUZvY3VzOiBkaXNhYmxlRW5mb3JjZUZvY3VzLFxuICAgICAgICBkaXNhYmxlQXV0b0ZvY3VzOiBkaXNhYmxlQXV0b0ZvY3VzLFxuICAgICAgICBkaXNhYmxlUmVzdG9yZUZvY3VzOiBkaXNhYmxlUmVzdG9yZUZvY3VzLFxuICAgICAgICBpc0VuYWJsZWQ6IGlzVG9wTW9kYWwsXG4gICAgICAgIG9wZW46IG9wZW4sXG4gICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBjaGlsZFByb3BzKVxuICAgICAgfSldXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBNb2RhbC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBBIGJhY2tkcm9wIGNvbXBvbmVudC4gVGhpcyBwcm9wIGVuYWJsZXMgY3VzdG9tIGJhY2tkcm9wIHJlbmRlcmluZy5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzbG90cy5iYWNrZHJvcGAgaW5zdGVhZC4gV2hpbGUgdGhpcyBwcm9wIGN1cnJlbnRseSB3b3JrcywgaXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24uXG4gICAqIFVzZSB0aGUgYHNsb3RzLmJhY2tkcm9wYCBwcm9wIHRvIG1ha2UgeW91ciBhcHBsaWNhdGlvbiByZWFkeSBmb3IgdGhlIG5leHQgdmVyc2lvbiBvZiBNYXRlcmlhbCBVSS5cbiAgICogQGRlZmF1bHQgc3R5bGVkKEJhY2tkcm9wLCB7XG4gICAqICAgbmFtZTogJ011aU1vZGFsJyxcbiAgICogICBzbG90OiAnQmFja2Ryb3AnLFxuICAgKiAgIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgKiAgICAgcmV0dXJuIHN0eWxlcy5iYWNrZHJvcDtcbiAgICogICB9LFxuICAgKiB9KSh7XG4gICAqICAgekluZGV4OiAtMSxcbiAgICogfSlcbiAgICovXG4gIEJhY2tkcm9wQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYEJhY2tkcm9wYF0oL21hdGVyaWFsLXVpL2FwaS9iYWNrZHJvcC8pIGVsZW1lbnQuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgc2xvdFByb3BzLmJhY2tkcm9wYCBpbnN0ZWFkLlxuICAgKi9cbiAgQmFja2Ryb3BQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEEgc2luZ2xlIGNoaWxkIGNvbnRlbnQgZWxlbWVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBlbGVtZW50QWNjZXB0aW5nUmVmLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogV2hlbiBzZXQgdG8gdHJ1ZSB0aGUgTW9kYWwgd2FpdHMgdW50aWwgYSBuZXN0ZWQgVHJhbnNpdGlvbiBpcyBjb21wbGV0ZWQgYmVmb3JlIGNsb3NpbmcuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjbG9zZUFmdGVyVHJhbnNpdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90c2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90c2AgcHJvcCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBCYWNrZHJvcDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdFByb3BzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RQcm9wc2AgcHJvcCBpbnN0ZWFkLCBhcyBgY29tcG9uZW50c1Byb3BzYCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBiYWNrZHJvcDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgICByb290OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG4gIH0pLFxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50IG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBvbmUuXG4gICAqIFRoZSBgY29udGFpbmVyYCB3aWxsIGhhdmUgdGhlIHBvcnRhbCBjaGlsZHJlbiBhcHBlbmRlZCB0byBpdC5cbiAgICpcbiAgICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYSBjYWxsYmFjaywgd2hpY2ggaXMgY2FsbGVkIGluIGEgUmVhY3QgbGF5b3V0IGVmZmVjdC5cbiAgICogVGhpcyBsZXRzIHlvdSBzZXQgdGhlIGNvbnRhaW5lciBmcm9tIGEgcmVmLCBhbmQgYWxzbyBtYWtlcyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcgcG9zc2libGUuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGl0IHVzZXMgdGhlIGJvZHkgb2YgdGhlIHRvcC1sZXZlbCBkb2N1bWVudCBvYmplY3QsXG4gICAqIHNvIGl0J3Mgc2ltcGx5IGBkb2N1bWVudC5ib2R5YCBtb3N0IG9mIHRoZSB0aW1lLlxuICAgKi9cbiAgY29udGFpbmVyOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG1vZGFsIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgc2hpZnQgZm9jdXMgdG8gaXRzZWxmIHdoZW4gaXQgb3BlbnMsIGFuZFxuICAgKiByZXBsYWNlIGl0IHRvIHRoZSBsYXN0IGZvY3VzZWQgZWxlbWVudCB3aGVuIGl0IGNsb3Nlcy5cbiAgICogVGhpcyBhbHNvIHdvcmtzIGNvcnJlY3RseSB3aXRoIGFueSBtb2RhbCBjaGlsZHJlbiB0aGF0IGhhdmUgdGhlIGBkaXNhYmxlQXV0b0ZvY3VzYCBwcm9wLlxuICAgKlxuICAgKiBHZW5lcmFsbHkgdGhpcyBzaG91bGQgbmV2ZXIgYmUgc2V0IHRvIGB0cnVlYCBhcyBpdCBtYWtlcyB0aGUgbW9kYWwgbGVzc1xuICAgKiBhY2Nlc3NpYmxlIHRvIGFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMsIGxpa2Ugc2NyZWVuIHJlYWRlcnMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlQXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG1vZGFsIHdpbGwgbm90IHByZXZlbnQgZm9jdXMgZnJvbSBsZWF2aW5nIHRoZSBtb2RhbCB3aGlsZSBvcGVuLlxuICAgKlxuICAgKiBHZW5lcmFsbHkgdGhpcyBzaG91bGQgbmV2ZXIgYmUgc2V0IHRvIGB0cnVlYCBhcyBpdCBtYWtlcyB0aGUgbW9kYWwgbGVzc1xuICAgKiBhY2Nlc3NpYmxlIHRvIGFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMsIGxpa2Ugc2NyZWVuIHJlYWRlcnMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlRW5mb3JjZUZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgaGl0dGluZyBlc2NhcGUgd2lsbCBub3QgZmlyZSB0aGUgYG9uQ2xvc2VgIGNhbGxiYWNrLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUVzY2FwZUtleURvd246IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGBjaGlsZHJlbmAgd2lsbCBiZSB1bmRlciB0aGUgRE9NIGhpZXJhcmNoeSBvZiB0aGUgcGFyZW50IGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVQb3J0YWw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbW9kYWwgd2lsbCBub3QgcmVzdG9yZSBmb2N1cyB0byBwcmV2aW91c2x5IGZvY3VzZWQgZWxlbWVudCBvbmNlXG4gICAqIG1vZGFsIGlzIGhpZGRlbiBvciB1bm1vdW50ZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUmVzdG9yZUZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIHNjcm9sbCBsb2NrIGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVNjcm9sbExvY2s6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYmFja2Ryb3AgaXMgbm90IHJlbmRlcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaGlkZUJhY2tkcm9wOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEFsd2F5cyBrZWVwIHRoZSBjaGlsZHJlbiBpbiB0aGUgRE9NLlxuICAgKiBUaGlzIHByb3AgY2FuIGJlIHVzZWZ1bCBpbiBTRU8gc2l0dWF0aW9uIG9yXG4gICAqIHdoZW4geW91IHdhbnQgdG8gbWF4aW1pemUgdGhlIHJlc3BvbnNpdmVuZXNzIG9mIHRoZSBNb2RhbC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGtlZXBNb3VudGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGJhY2tkcm9wIGlzIGNsaWNrZWQuXG4gICAqIEBkZXByZWNhdGVkIFVzZSB0aGUgYG9uQ2xvc2VgIHByb3Agd2l0aCB0aGUgYHJlYXNvbmAgYXJndW1lbnQgdG8gaGFuZGxlIHRoZSBgYmFja2Ryb3BDbGlja2AgZXZlbnRzLlxuICAgKi9cbiAgb25CYWNrZHJvcENsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqIFRoZSBgcmVhc29uYCBwYXJhbWV0ZXIgY2FuIG9wdGlvbmFsbHkgYmUgdXNlZCB0byBjb250cm9sIHRoZSByZXNwb25zZSB0byBgb25DbG9zZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiBDYW4gYmU6IGBcImVzY2FwZUtleURvd25cImAsIGBcImJhY2tkcm9wQ2xpY2tcImAuXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gY2FsbGVkIHdoZW4gYSB0cmFuc2l0aW9uIGVudGVycy5cbiAgICovXG4gIG9uVHJhbnNpdGlvbkVudGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gY2FsbGVkIHdoZW4gYSB0cmFuc2l0aW9uIGhhcyBleGl0ZWQuXG4gICAqL1xuICBvblRyYW5zaXRpb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIFRoZSBwcm9wcyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlIHRoZSBNb2RhbC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBiYWNrZHJvcDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgICByb290OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgTW9kYWwuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBiYWNrZHJvcDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IE1vZGFsOyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRQb3BvdmVyVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlQb3BvdmVyJywgc2xvdCk7XG59XG5jb25zdCBwb3BvdmVyQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVBvcG92ZXInLCBbJ3Jvb3QnLCAncGFwZXInXSk7XG5leHBvcnQgZGVmYXVsdCBwb3BvdmVyQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJvbkVudGVyaW5nXCJdLFxuICBfZXhjbHVkZWQyID0gW1wiYWN0aW9uXCIsIFwiYW5jaG9yRWxcIiwgXCJhbmNob3JPcmlnaW5cIiwgXCJhbmNob3JQb3NpdGlvblwiLCBcImFuY2hvclJlZmVyZW5jZVwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29udGFpbmVyXCIsIFwiZWxldmF0aW9uXCIsIFwibWFyZ2luVGhyZXNob2xkXCIsIFwib3BlblwiLCBcIlBhcGVyUHJvcHNcIiwgXCJzbG90c1wiLCBcInNsb3RQcm9wc1wiLCBcInRyYW5zZm9ybU9yaWdpblwiLCBcIlRyYW5zaXRpb25Db21wb25lbnRcIiwgXCJ0cmFuc2l0aW9uRHVyYXRpb25cIiwgXCJUcmFuc2l0aW9uUHJvcHNcIiwgXCJkaXNhYmxlU2Nyb2xsTG9ja1wiXSxcbiAgX2V4Y2x1ZGVkMyA9IFtcInNsb3RQcm9wc1wiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzLCB1c2VTbG90UHJvcHMsIGlzSG9zdENvbXBvbmVudCB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgeyBjaGFpblByb3BUeXBlcywgaW50ZWdlclByb3BUeXBlLCBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZiwgcmVmVHlwZSwgSFRNTEVsZW1lbnRUeXBlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gJy4uL3V0aWxzL2RlYm91bmNlJztcbmltcG9ydCBvd25lckRvY3VtZW50IGZyb20gJy4uL3V0aWxzL293bmVyRG9jdW1lbnQnO1xuaW1wb3J0IG93bmVyV2luZG93IGZyb20gJy4uL3V0aWxzL293bmVyV2luZG93JztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IEdyb3cgZnJvbSAnLi4vR3Jvdyc7XG5pbXBvcnQgTW9kYWwgZnJvbSAnLi4vTW9kYWwnO1xuaW1wb3J0IFBhcGVyQmFzZSBmcm9tICcuLi9QYXBlcic7XG5pbXBvcnQgeyBnZXRQb3BvdmVyVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9wb3BvdmVyQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9mZnNldFRvcChyZWN0LCB2ZXJ0aWNhbCkge1xuICBsZXQgb2Zmc2V0ID0gMDtcbiAgaWYgKHR5cGVvZiB2ZXJ0aWNhbCA9PT0gJ251bWJlcicpIHtcbiAgICBvZmZzZXQgPSB2ZXJ0aWNhbDtcbiAgfSBlbHNlIGlmICh2ZXJ0aWNhbCA9PT0gJ2NlbnRlcicpIHtcbiAgICBvZmZzZXQgPSByZWN0LmhlaWdodCAvIDI7XG4gIH0gZWxzZSBpZiAodmVydGljYWwgPT09ICdib3R0b20nKSB7XG4gICAgb2Zmc2V0ID0gcmVjdC5oZWlnaHQ7XG4gIH1cbiAgcmV0dXJuIG9mZnNldDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRPZmZzZXRMZWZ0KHJlY3QsIGhvcml6b250YWwpIHtcbiAgbGV0IG9mZnNldCA9IDA7XG4gIGlmICh0eXBlb2YgaG9yaXpvbnRhbCA9PT0gJ251bWJlcicpIHtcbiAgICBvZmZzZXQgPSBob3Jpem9udGFsO1xuICB9IGVsc2UgaWYgKGhvcml6b250YWwgPT09ICdjZW50ZXInKSB7XG4gICAgb2Zmc2V0ID0gcmVjdC53aWR0aCAvIDI7XG4gIH0gZWxzZSBpZiAoaG9yaXpvbnRhbCA9PT0gJ3JpZ2h0Jykge1xuICAgIG9mZnNldCA9IHJlY3Qud2lkdGg7XG4gIH1cbiAgcmV0dXJuIG9mZnNldDtcbn1cbmZ1bmN0aW9uIGdldFRyYW5zZm9ybU9yaWdpblZhbHVlKHRyYW5zZm9ybU9yaWdpbikge1xuICByZXR1cm4gW3RyYW5zZm9ybU9yaWdpbi5ob3Jpem9udGFsLCB0cmFuc2Zvcm1PcmlnaW4udmVydGljYWxdLm1hcChuID0+IHR5cGVvZiBuID09PSAnbnVtYmVyJyA/IGAke259cHhgIDogbikuam9pbignICcpO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUFuY2hvckVsKGFuY2hvckVsKSB7XG4gIHJldHVybiB0eXBlb2YgYW5jaG9yRWwgPT09ICdmdW5jdGlvbicgPyBhbmNob3JFbCgpIDogYW5jaG9yRWw7XG59XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290J10sXG4gICAgcGFwZXI6IFsncGFwZXInXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFBvcG92ZXJVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBQb3BvdmVyUm9vdCA9IHN0eWxlZChNb2RhbCwge1xuICBuYW1lOiAnTXVpUG9wb3ZlcicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoe30pO1xuZXhwb3J0IGNvbnN0IFBvcG92ZXJQYXBlciA9IHN0eWxlZChQYXBlckJhc2UsIHtcbiAgbmFtZTogJ011aVBvcG92ZXInLFxuICBzbG90OiAnUGFwZXInLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5wYXBlclxufSkoe1xuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gIG92ZXJmbG93WDogJ2hpZGRlbicsXG4gIC8vIFNvIHdlIHNlZSB0aGUgcG9wb3ZlciB3aGVuIGl0J3MgZW1wdHkuXG4gIC8vIEl0J3MgbW9zdCBsaWtlbHkgb24gaXNzdWUgb24gdXNlcmxhbmQuXG4gIG1pbldpZHRoOiAxNixcbiAgbWluSGVpZ2h0OiAxNixcbiAgbWF4V2lkdGg6ICdjYWxjKDEwMCUgLSAzMnB4KScsXG4gIG1heEhlaWdodDogJ2NhbGMoMTAwJSAtIDMycHgpJyxcbiAgLy8gV2UgZGlzYWJsZSB0aGUgZm9jdXMgcmluZyBmb3IgbW91c2UsIHRvdWNoIGFuZCBrZXlib2FyZCB1c2Vycy5cbiAgb3V0bGluZTogMFxufSk7XG5jb25zdCBQb3BvdmVyID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gUG9wb3ZlcihpblByb3BzLCByZWYpIHtcbiAgdmFyIF9zbG90UHJvcHMkcGFwZXIsIF9zbG90cyRyb290LCBfc2xvdHMkcGFwZXI7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVBvcG92ZXInXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhY3Rpb24sXG4gICAgICBhbmNob3JFbCxcbiAgICAgIGFuY2hvck9yaWdpbiA9IHtcbiAgICAgICAgdmVydGljYWw6ICd0b3AnLFxuICAgICAgICBob3Jpem9udGFsOiAnbGVmdCdcbiAgICAgIH0sXG4gICAgICBhbmNob3JQb3NpdGlvbixcbiAgICAgIGFuY2hvclJlZmVyZW5jZSA9ICdhbmNob3JFbCcsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyUHJvcCxcbiAgICAgIGVsZXZhdGlvbiA9IDgsXG4gICAgICBtYXJnaW5UaHJlc2hvbGQgPSAxNixcbiAgICAgIG9wZW4sXG4gICAgICBQYXBlclByb3BzOiBQYXBlclByb3BzUHJvcCA9IHt9LFxuICAgICAgc2xvdHMsXG4gICAgICBzbG90UHJvcHMsXG4gICAgICB0cmFuc2Zvcm1PcmlnaW4gPSB7XG4gICAgICAgIHZlcnRpY2FsOiAndG9wJyxcbiAgICAgICAgaG9yaXpvbnRhbDogJ2xlZnQnXG4gICAgICB9LFxuICAgICAgVHJhbnNpdGlvbkNvbXBvbmVudCA9IEdyb3csXG4gICAgICB0cmFuc2l0aW9uRHVyYXRpb246IHRyYW5zaXRpb25EdXJhdGlvblByb3AgPSAnYXV0bycsXG4gICAgICBUcmFuc2l0aW9uUHJvcHM6IHtcbiAgICAgICAgb25FbnRlcmluZ1xuICAgICAgfSA9IHt9LFxuICAgICAgZGlzYWJsZVNjcm9sbExvY2sgPSBmYWxzZVxuICAgIH0gPSBwcm9wcyxcbiAgICBUcmFuc2l0aW9uUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcy5UcmFuc2l0aW9uUHJvcHMsIF9leGNsdWRlZCksXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkMik7XG4gIGNvbnN0IGV4dGVybmFsUGFwZXJTbG90UHJvcHMgPSAoX3Nsb3RQcm9wcyRwYXBlciA9IHNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogc2xvdFByb3BzLnBhcGVyKSAhPSBudWxsID8gX3Nsb3RQcm9wcyRwYXBlciA6IFBhcGVyUHJvcHNQcm9wO1xuICBjb25zdCBwYXBlclJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICBjb25zdCBoYW5kbGVQYXBlclJlZiA9IHVzZUZvcmtSZWYocGFwZXJSZWYsIGV4dGVybmFsUGFwZXJTbG90UHJvcHMucmVmKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGFuY2hvck9yaWdpbixcbiAgICBhbmNob3JSZWZlcmVuY2UsXG4gICAgZWxldmF0aW9uLFxuICAgIG1hcmdpblRocmVzaG9sZCxcbiAgICBleHRlcm5hbFBhcGVyU2xvdFByb3BzLFxuICAgIHRyYW5zZm9ybU9yaWdpbixcbiAgICBUcmFuc2l0aW9uQ29tcG9uZW50LFxuICAgIHRyYW5zaXRpb25EdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uUHJvcCxcbiAgICBUcmFuc2l0aW9uUHJvcHNcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcblxuICAvLyBSZXR1cm5zIHRoZSB0b3AvbGVmdCBvZmZzZXQgb2YgdGhlIHBvc2l0aW9uXG4gIC8vIHRvIGF0dGFjaCB0byBvbiB0aGUgYW5jaG9yIGVsZW1lbnQgKG9yIGJvZHkgaWYgbm9uZSBpcyBwcm92aWRlZClcbiAgY29uc3QgZ2V0QW5jaG9yT2Zmc2V0ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChhbmNob3JSZWZlcmVuY2UgPT09ICdhbmNob3JQb3NpdGlvbicpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICghYW5jaG9yUG9zaXRpb24pIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IFlvdSBuZWVkIHRvIHByb3ZpZGUgYSBgYW5jaG9yUG9zaXRpb25gIHByb3Agd2hlbiB1c2luZyAnICsgJzxQb3BvdmVyIGFuY2hvclJlZmVyZW5jZT1cImFuY2hvclBvc2l0aW9uXCIgLz4uJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhbmNob3JQb3NpdGlvbjtcbiAgICB9XG4gICAgY29uc3QgcmVzb2x2ZWRBbmNob3JFbCA9IHJlc29sdmVBbmNob3JFbChhbmNob3JFbCk7XG5cbiAgICAvLyBJZiBhbiBhbmNob3IgZWxlbWVudCB3YXNuJ3QgcHJvdmlkZWQsIGp1c3QgdXNlIHRoZSBwYXJlbnQgYm9keSBlbGVtZW50IG9mIHRoaXMgUG9wb3ZlclxuICAgIGNvbnN0IGFuY2hvckVsZW1lbnQgPSByZXNvbHZlZEFuY2hvckVsICYmIHJlc29sdmVkQW5jaG9yRWwubm9kZVR5cGUgPT09IDEgPyByZXNvbHZlZEFuY2hvckVsIDogb3duZXJEb2N1bWVudChwYXBlclJlZi5jdXJyZW50KS5ib2R5O1xuICAgIGNvbnN0IGFuY2hvclJlY3QgPSBhbmNob3JFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zdCBib3ggPSBhbmNob3JFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAndGVzdCcgJiYgYm94LnRvcCA9PT0gMCAmJiBib3gubGVmdCA9PT0gMCAmJiBib3gucmlnaHQgPT09IDAgJiYgYm94LmJvdHRvbSA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLndhcm4oWydNVUk6IFRoZSBgYW5jaG9yRWxgIHByb3AgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudCBpcyBpbnZhbGlkLicsICdUaGUgYW5jaG9yIGVsZW1lbnQgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIGRvY3VtZW50IGxheW91dC4nLCBcIk1ha2Ugc3VyZSB0aGUgZWxlbWVudCBpcyBwcmVzZW50IGluIHRoZSBkb2N1bWVudCBvciB0aGF0IGl0J3Mgbm90IGRpc3BsYXkgbm9uZS5cIl0uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdG9wOiBhbmNob3JSZWN0LnRvcCArIGdldE9mZnNldFRvcChhbmNob3JSZWN0LCBhbmNob3JPcmlnaW4udmVydGljYWwpLFxuICAgICAgbGVmdDogYW5jaG9yUmVjdC5sZWZ0ICsgZ2V0T2Zmc2V0TGVmdChhbmNob3JSZWN0LCBhbmNob3JPcmlnaW4uaG9yaXpvbnRhbClcbiAgICB9O1xuICB9LCBbYW5jaG9yRWwsIGFuY2hvck9yaWdpbi5ob3Jpem9udGFsLCBhbmNob3JPcmlnaW4udmVydGljYWwsIGFuY2hvclBvc2l0aW9uLCBhbmNob3JSZWZlcmVuY2VdKTtcblxuICAvLyBSZXR1cm5zIHRoZSBiYXNlIHRyYW5zZm9ybSBvcmlnaW4gdXNpbmcgdGhlIGVsZW1lbnRcbiAgY29uc3QgZ2V0VHJhbnNmb3JtT3JpZ2luID0gUmVhY3QudXNlQ2FsbGJhY2soZWxlbVJlY3QgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICB2ZXJ0aWNhbDogZ2V0T2Zmc2V0VG9wKGVsZW1SZWN0LCB0cmFuc2Zvcm1PcmlnaW4udmVydGljYWwpLFxuICAgICAgaG9yaXpvbnRhbDogZ2V0T2Zmc2V0TGVmdChlbGVtUmVjdCwgdHJhbnNmb3JtT3JpZ2luLmhvcml6b250YWwpXG4gICAgfTtcbiAgfSwgW3RyYW5zZm9ybU9yaWdpbi5ob3Jpem9udGFsLCB0cmFuc2Zvcm1PcmlnaW4udmVydGljYWxdKTtcbiAgY29uc3QgZ2V0UG9zaXRpb25pbmdTdHlsZSA9IFJlYWN0LnVzZUNhbGxiYWNrKGVsZW1lbnQgPT4ge1xuICAgIGNvbnN0IGVsZW1SZWN0ID0ge1xuICAgICAgd2lkdGg6IGVsZW1lbnQub2Zmc2V0V2lkdGgsXG4gICAgICBoZWlnaHQ6IGVsZW1lbnQub2Zmc2V0SGVpZ2h0XG4gICAgfTtcblxuICAgIC8vIEdldCB0aGUgdHJhbnNmb3JtIG9yaWdpbiBwb2ludCBvbiB0aGUgZWxlbWVudCBpdHNlbGZcbiAgICBjb25zdCBlbGVtVHJhbnNmb3JtT3JpZ2luID0gZ2V0VHJhbnNmb3JtT3JpZ2luKGVsZW1SZWN0KTtcbiAgICBpZiAoYW5jaG9yUmVmZXJlbmNlID09PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvcDogbnVsbCxcbiAgICAgICAgbGVmdDogbnVsbCxcbiAgICAgICAgdHJhbnNmb3JtT3JpZ2luOiBnZXRUcmFuc2Zvcm1PcmlnaW5WYWx1ZShlbGVtVHJhbnNmb3JtT3JpZ2luKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIG9mZnNldCBvZiB0aGUgYW5jaG9yaW5nIGVsZW1lbnRcbiAgICBjb25zdCBhbmNob3JPZmZzZXQgPSBnZXRBbmNob3JPZmZzZXQoKTtcblxuICAgIC8vIENhbGN1bGF0ZSBlbGVtZW50IHBvc2l0aW9uaW5nXG4gICAgbGV0IHRvcCA9IGFuY2hvck9mZnNldC50b3AgLSBlbGVtVHJhbnNmb3JtT3JpZ2luLnZlcnRpY2FsO1xuICAgIGxldCBsZWZ0ID0gYW5jaG9yT2Zmc2V0LmxlZnQgLSBlbGVtVHJhbnNmb3JtT3JpZ2luLmhvcml6b250YWw7XG4gICAgY29uc3QgYm90dG9tID0gdG9wICsgZWxlbVJlY3QuaGVpZ2h0O1xuICAgIGNvbnN0IHJpZ2h0ID0gbGVmdCArIGVsZW1SZWN0LndpZHRoO1xuXG4gICAgLy8gVXNlIHRoZSBwYXJlbnQgd2luZG93IG9mIHRoZSBhbmNob3JFbCBpZiBwcm92aWRlZFxuICAgIGNvbnN0IGNvbnRhaW5lcldpbmRvdyA9IG93bmVyV2luZG93KHJlc29sdmVBbmNob3JFbChhbmNob3JFbCkpO1xuXG4gICAgLy8gV2luZG93IHRocmVzaG9sZHMgdGFraW5nIHJlcXVpcmVkIG1hcmdpbiBpbnRvIGFjY291bnRcbiAgICBjb25zdCBoZWlnaHRUaHJlc2hvbGQgPSBjb250YWluZXJXaW5kb3cuaW5uZXJIZWlnaHQgLSBtYXJnaW5UaHJlc2hvbGQ7XG4gICAgY29uc3Qgd2lkdGhUaHJlc2hvbGQgPSBjb250YWluZXJXaW5kb3cuaW5uZXJXaWR0aCAtIG1hcmdpblRocmVzaG9sZDtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB2ZXJ0aWNhbCBheGlzIG5lZWRzIHNoaWZ0aW5nXG4gICAgaWYgKG1hcmdpblRocmVzaG9sZCAhPT0gbnVsbCAmJiB0b3AgPCBtYXJnaW5UaHJlc2hvbGQpIHtcbiAgICAgIGNvbnN0IGRpZmYgPSB0b3AgLSBtYXJnaW5UaHJlc2hvbGQ7XG4gICAgICB0b3AgLT0gZGlmZjtcbiAgICAgIGVsZW1UcmFuc2Zvcm1PcmlnaW4udmVydGljYWwgKz0gZGlmZjtcbiAgICB9IGVsc2UgaWYgKG1hcmdpblRocmVzaG9sZCAhPT0gbnVsbCAmJiBib3R0b20gPiBoZWlnaHRUaHJlc2hvbGQpIHtcbiAgICAgIGNvbnN0IGRpZmYgPSBib3R0b20gLSBoZWlnaHRUaHJlc2hvbGQ7XG4gICAgICB0b3AgLT0gZGlmZjtcbiAgICAgIGVsZW1UcmFuc2Zvcm1PcmlnaW4udmVydGljYWwgKz0gZGlmZjtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChlbGVtUmVjdC5oZWlnaHQgPiBoZWlnaHRUaHJlc2hvbGQgJiYgZWxlbVJlY3QuaGVpZ2h0ICYmIGhlaWdodFRocmVzaG9sZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBUaGUgcG9wb3ZlciBjb21wb25lbnQgaXMgdG9vIHRhbGwuJywgYFNvbWUgcGFydCBvZiBpdCBjYW4gbm90IGJlIHNlZW4gb24gdGhlIHNjcmVlbiAoJHtlbGVtUmVjdC5oZWlnaHQgLSBoZWlnaHRUaHJlc2hvbGR9cHgpLmAsICdQbGVhc2UgY29uc2lkZXIgYWRkaW5nIGEgYG1heC1oZWlnaHRgIHRvIGltcHJvdmUgdGhlIHVzZXItZXhwZXJpZW5jZS4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGhvcml6b250YWwgYXhpcyBuZWVkcyBzaGlmdGluZ1xuICAgIGlmIChtYXJnaW5UaHJlc2hvbGQgIT09IG51bGwgJiYgbGVmdCA8IG1hcmdpblRocmVzaG9sZCkge1xuICAgICAgY29uc3QgZGlmZiA9IGxlZnQgLSBtYXJnaW5UaHJlc2hvbGQ7XG4gICAgICBsZWZ0IC09IGRpZmY7XG4gICAgICBlbGVtVHJhbnNmb3JtT3JpZ2luLmhvcml6b250YWwgKz0gZGlmZjtcbiAgICB9IGVsc2UgaWYgKHJpZ2h0ID4gd2lkdGhUaHJlc2hvbGQpIHtcbiAgICAgIGNvbnN0IGRpZmYgPSByaWdodCAtIHdpZHRoVGhyZXNob2xkO1xuICAgICAgbGVmdCAtPSBkaWZmO1xuICAgICAgZWxlbVRyYW5zZm9ybU9yaWdpbi5ob3Jpem9udGFsICs9IGRpZmY7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0b3A6IGAke01hdGgucm91bmQodG9wKX1weGAsXG4gICAgICBsZWZ0OiBgJHtNYXRoLnJvdW5kKGxlZnQpfXB4YCxcbiAgICAgIHRyYW5zZm9ybU9yaWdpbjogZ2V0VHJhbnNmb3JtT3JpZ2luVmFsdWUoZWxlbVRyYW5zZm9ybU9yaWdpbilcbiAgICB9O1xuICB9LCBbYW5jaG9yRWwsIGFuY2hvclJlZmVyZW5jZSwgZ2V0QW5jaG9yT2Zmc2V0LCBnZXRUcmFuc2Zvcm1PcmlnaW4sIG1hcmdpblRocmVzaG9sZF0pO1xuICBjb25zdCBbaXNQb3NpdGlvbmVkLCBzZXRJc1Bvc2l0aW9uZWRdID0gUmVhY3QudXNlU3RhdGUob3Blbik7XG4gIGNvbnN0IHNldFBvc2l0aW9uaW5nU3R5bGVzID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBwYXBlclJlZi5jdXJyZW50O1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwb3NpdGlvbmluZyA9IGdldFBvc2l0aW9uaW5nU3R5bGUoZWxlbWVudCk7XG4gICAgaWYgKHBvc2l0aW9uaW5nLnRvcCAhPT0gbnVsbCkge1xuICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBwb3NpdGlvbmluZy50b3A7XG4gICAgfVxuICAgIGlmIChwb3NpdGlvbmluZy5sZWZ0ICE9PSBudWxsKSB7XG4gICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBwb3NpdGlvbmluZy5sZWZ0O1xuICAgIH1cbiAgICBlbGVtZW50LnN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9IHBvc2l0aW9uaW5nLnRyYW5zZm9ybU9yaWdpbjtcbiAgICBzZXRJc1Bvc2l0aW9uZWQodHJ1ZSk7XG4gIH0sIFtnZXRQb3NpdGlvbmluZ1N0eWxlXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRpc2FibGVTY3JvbGxMb2NrKSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgc2V0UG9zaXRpb25pbmdTdHlsZXMpO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHNldFBvc2l0aW9uaW5nU3R5bGVzKTtcbiAgfSwgW2FuY2hvckVsLCBkaXNhYmxlU2Nyb2xsTG9jaywgc2V0UG9zaXRpb25pbmdTdHlsZXNdKTtcbiAgY29uc3QgaGFuZGxlRW50ZXJpbmcgPSAoZWxlbWVudCwgaXNBcHBlYXJpbmcpID0+IHtcbiAgICBpZiAob25FbnRlcmluZykge1xuICAgICAgb25FbnRlcmluZyhlbGVtZW50LCBpc0FwcGVhcmluZyk7XG4gICAgfVxuICAgIHNldFBvc2l0aW9uaW5nU3R5bGVzKCk7XG4gIH07XG4gIGNvbnN0IGhhbmRsZUV4aXRlZCA9ICgpID0+IHtcbiAgICBzZXRJc1Bvc2l0aW9uZWQoZmFsc2UpO1xuICB9O1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcGVuKSB7XG4gICAgICBzZXRQb3NpdGlvbmluZ1N0eWxlcygpO1xuICAgIH1cbiAgfSk7XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUoYWN0aW9uLCAoKSA9PiBvcGVuID8ge1xuICAgIHVwZGF0ZVBvc2l0aW9uOiAoKSA9PiB7XG4gICAgICBzZXRQb3NpdGlvbmluZ1N0eWxlcygpO1xuICAgIH1cbiAgfSA6IG51bGwsIFtvcGVuLCBzZXRQb3NpdGlvbmluZ1N0eWxlc10pO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghb3Blbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgaGFuZGxlUmVzaXplID0gZGVib3VuY2UoKCkgPT4ge1xuICAgICAgc2V0UG9zaXRpb25pbmdTdHlsZXMoKTtcbiAgICB9KTtcbiAgICBjb25zdCBjb250YWluZXJXaW5kb3cgPSBvd25lcldpbmRvdyhhbmNob3JFbCk7XG4gICAgY29udGFpbmVyV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGhhbmRsZVJlc2l6ZS5jbGVhcigpO1xuICAgICAgY29udGFpbmVyV2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7XG4gICAgfTtcbiAgfSwgW2FuY2hvckVsLCBvcGVuLCBzZXRQb3NpdGlvbmluZ1N0eWxlc10pO1xuICBsZXQgdHJhbnNpdGlvbkR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uUHJvcDtcbiAgaWYgKHRyYW5zaXRpb25EdXJhdGlvblByb3AgPT09ICdhdXRvJyAmJiAhVHJhbnNpdGlvbkNvbXBvbmVudC5tdWlTdXBwb3J0QXV0bykge1xuICAgIHRyYW5zaXRpb25EdXJhdGlvbiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIElmIHRoZSBjb250YWluZXIgcHJvcCBpcyBwcm92aWRlZCwgdXNlIHRoYXRcbiAgLy8gSWYgdGhlIGFuY2hvckVsIHByb3AgaXMgcHJvdmlkZWQsIHVzZSBpdHMgcGFyZW50IGJvZHkgZWxlbWVudCBhcyB0aGUgY29udGFpbmVyXG4gIC8vIElmIG5laXRoZXIgYXJlIHByb3ZpZGVkIGxldCB0aGUgTW9kYWwgdGFrZSBjYXJlIG9mIGNob29zaW5nIHRoZSBjb250YWluZXJcbiAgY29uc3QgY29udGFpbmVyID0gY29udGFpbmVyUHJvcCB8fCAoYW5jaG9yRWwgPyBvd25lckRvY3VtZW50KHJlc29sdmVBbmNob3JFbChhbmNob3JFbCkpLmJvZHkgOiB1bmRlZmluZWQpO1xuICBjb25zdCBSb290U2xvdCA9IChfc2xvdHMkcm9vdCA9IHNsb3RzID09IG51bGwgPyB2b2lkIDAgOiBzbG90cy5yb290KSAhPSBudWxsID8gX3Nsb3RzJHJvb3QgOiBQb3BvdmVyUm9vdDtcbiAgY29uc3QgUGFwZXJTbG90ID0gKF9zbG90cyRwYXBlciA9IHNsb3RzID09IG51bGwgPyB2b2lkIDAgOiBzbG90cy5wYXBlcikgIT0gbnVsbCA/IF9zbG90cyRwYXBlciA6IFBvcG92ZXJQYXBlcjtcbiAgY29uc3QgcGFwZXJQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgZWxlbWVudFR5cGU6IFBhcGVyU2xvdCxcbiAgICBleHRlcm5hbFNsb3RQcm9wczogX2V4dGVuZHMoe30sIGV4dGVybmFsUGFwZXJTbG90UHJvcHMsIHtcbiAgICAgIHN0eWxlOiBpc1Bvc2l0aW9uZWQgPyBleHRlcm5hbFBhcGVyU2xvdFByb3BzLnN0eWxlIDogX2V4dGVuZHMoe30sIGV4dGVybmFsUGFwZXJTbG90UHJvcHMuc3R5bGUsIHtcbiAgICAgICAgb3BhY2l0eTogMFxuICAgICAgfSlcbiAgICB9KSxcbiAgICBhZGRpdGlvbmFsUHJvcHM6IHtcbiAgICAgIGVsZXZhdGlvbixcbiAgICAgIHJlZjogaGFuZGxlUGFwZXJSZWZcbiAgICB9LFxuICAgIG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucGFwZXIsIGV4dGVybmFsUGFwZXJTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGV4dGVybmFsUGFwZXJTbG90UHJvcHMuY2xhc3NOYW1lKVxuICB9KTtcbiAgY29uc3QgX3VzZVNsb3RQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgICBlbGVtZW50VHlwZTogUm9vdFNsb3QsXG4gICAgICBleHRlcm5hbFNsb3RQcm9wczogKHNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogc2xvdFByb3BzLnJvb3QpIHx8IHt9LFxuICAgICAgZXh0ZXJuYWxGb3J3YXJkZWRQcm9wczogb3RoZXIsXG4gICAgICBhZGRpdGlvbmFsUHJvcHM6IHtcbiAgICAgICAgcmVmLFxuICAgICAgICBzbG90UHJvcHM6IHtcbiAgICAgICAgICBiYWNrZHJvcDoge1xuICAgICAgICAgICAgaW52aXNpYmxlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb250YWluZXIsXG4gICAgICAgIG9wZW5cbiAgICAgIH0sXG4gICAgICBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICAgIH0pLFxuICAgIHtcbiAgICAgIHNsb3RQcm9wczogcm9vdFNsb3RQcm9wc1Byb3BcbiAgICB9ID0gX3VzZVNsb3RQcm9wcyxcbiAgICByb290UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdXNlU2xvdFByb3BzLCBfZXhjbHVkZWQzKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFJvb3RTbG90LCBfZXh0ZW5kcyh7fSwgcm9vdFByb3BzLCAhaXNIb3N0Q29tcG9uZW50KFJvb3RTbG90KSAmJiB7XG4gICAgc2xvdFByb3BzOiByb290U2xvdFByb3BzUHJvcCxcbiAgICBkaXNhYmxlU2Nyb2xsTG9ja1xuICB9LCB7XG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFRyYW5zaXRpb25Db21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIGFwcGVhcjogdHJ1ZSxcbiAgICAgIGluOiBvcGVuLFxuICAgICAgb25FbnRlcmluZzogaGFuZGxlRW50ZXJpbmcsXG4gICAgICBvbkV4aXRlZDogaGFuZGxlRXhpdGVkLFxuICAgICAgdGltZW91dDogdHJhbnNpdGlvbkR1cmF0aW9uXG4gICAgfSwgVHJhbnNpdGlvblByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goUGFwZXJTbG90LCBfZXh0ZW5kcyh7fSwgcGFwZXJQcm9wcywge1xuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgIH0pKVxuICAgIH0pKVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFBvcG92ZXIucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogQSByZWYgZm9yIGltcGVyYXRpdmUgYWN0aW9ucy5cbiAgICogSXQgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgdXBkYXRlUG9zaXRpb24oKSBhY3Rpb24uXG4gICAqL1xuICBhY3Rpb246IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBBbiBIVE1MIGVsZW1lbnQsIFtQb3BvdmVyVmlydHVhbEVsZW1lbnRdKC9tYXRlcmlhbC11aS9yZWFjdC1wb3BvdmVyLyN2aXJ0dWFsLWVsZW1lbnQpLFxuICAgKiBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBlaXRoZXIuXG4gICAqIEl0J3MgdXNlZCB0byBzZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBwb3BvdmVyLlxuICAgKi9cbiAgYW5jaG9yRWw6IGNoYWluUHJvcFR5cGVzKFByb3BUeXBlcy5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSwgcHJvcHMgPT4ge1xuICAgIGlmIChwcm9wcy5vcGVuICYmICghcHJvcHMuYW5jaG9yUmVmZXJlbmNlIHx8IHByb3BzLmFuY2hvclJlZmVyZW5jZSA9PT0gJ2FuY2hvckVsJykpIHtcbiAgICAgIGNvbnN0IHJlc29sdmVkQW5jaG9yRWwgPSByZXNvbHZlQW5jaG9yRWwocHJvcHMuYW5jaG9yRWwpO1xuICAgICAgaWYgKHJlc29sdmVkQW5jaG9yRWwgJiYgcmVzb2x2ZWRBbmNob3JFbC5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgICBjb25zdCBib3ggPSByZXNvbHZlZEFuY2hvckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JyAmJiBib3gudG9wID09PSAwICYmIGJveC5sZWZ0ID09PSAwICYmIGJveC5yaWdodCA9PT0gMCAmJiBib3guYm90dG9tID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihbJ01VSTogVGhlIGBhbmNob3JFbGAgcHJvcCBwcm92aWRlZCB0byB0aGUgY29tcG9uZW50IGlzIGludmFsaWQuJywgJ1RoZSBhbmNob3IgZWxlbWVudCBzaG91bGQgYmUgcGFydCBvZiB0aGUgZG9jdW1lbnQgbGF5b3V0LicsIFwiTWFrZSBzdXJlIHRoZSBlbGVtZW50IGlzIHByZXNlbnQgaW4gdGhlIGRvY3VtZW50IG9yIHRoYXQgaXQncyBub3QgZGlzcGxheSBub25lLlwiXS5qb2luKCdcXG4nKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoWydNVUk6IFRoZSBgYW5jaG9yRWxgIHByb3AgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudCBpcyBpbnZhbGlkLicsIGBJdCBzaG91bGQgYmUgYW4gRWxlbWVudCBvciBQb3BvdmVyVmlydHVhbEVsZW1lbnQgaW5zdGFuY2UgYnV0IGl0J3MgXFxgJHtyZXNvbHZlZEFuY2hvckVsfVxcYCBpbnN0ZWFkLmBdLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pLFxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgcG9pbnQgb24gdGhlIGFuY2hvciB3aGVyZSB0aGUgcG9wb3ZlcidzXG4gICAqIGBhbmNob3JFbGAgd2lsbCBhdHRhY2ggdG8uIFRoaXMgaXMgbm90IHVzZWQgd2hlbiB0aGVcbiAgICogYW5jaG9yUmVmZXJlbmNlIGlzICdhbmNob3JQb3NpdGlvbicuXG4gICAqXG4gICAqIE9wdGlvbnM6XG4gICAqIHZlcnRpY2FsOiBbdG9wLCBjZW50ZXIsIGJvdHRvbV07XG4gICAqIGhvcml6b250YWw6IFtsZWZ0LCBjZW50ZXIsIHJpZ2h0XS5cbiAgICogQGRlZmF1bHQge1xuICAgKiAgIHZlcnRpY2FsOiAndG9wJyxcbiAgICogICBob3Jpem9udGFsOiAnbGVmdCcsXG4gICAqIH1cbiAgICovXG4gIGFuY2hvck9yaWdpbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBob3Jpem9udGFsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydjZW50ZXInLCAnbGVmdCcsICdyaWdodCddKSwgUHJvcFR5cGVzLm51bWJlcl0pLmlzUmVxdWlyZWQsXG4gICAgdmVydGljYWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2JvdHRvbScsICdjZW50ZXInLCAndG9wJ10pLCBQcm9wVHlwZXMubnVtYmVyXSkuaXNSZXF1aXJlZFxuICB9KSxcbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIHBvc2l0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgcG9wb3Zlci5cbiAgICogVGhlIGNvb3JkaW5hdGVzIGFyZSByZWxhdGl2ZSB0byB0aGUgYXBwbGljYXRpb24ncyBjbGllbnQgYXJlYS5cbiAgICovXG4gIGFuY2hvclBvc2l0aW9uOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGxlZnQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICB0b3A6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZFxuICB9KSxcbiAgLyoqXG4gICAqIFRoaXMgZGV0ZXJtaW5lcyB3aGljaCBhbmNob3IgcHJvcCB0byByZWZlciB0byB3aGVuIHNldHRpbmdcbiAgICogdGhlIHBvc2l0aW9uIG9mIHRoZSBwb3BvdmVyLlxuICAgKiBAZGVmYXVsdCAnYW5jaG9yRWwnXG4gICAqL1xuICBhbmNob3JSZWZlcmVuY2U6IFByb3BUeXBlcy5vbmVPZihbJ2FuY2hvckVsJywgJ2FuY2hvclBvc2l0aW9uJywgJ25vbmUnXSksXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEFuIEhUTUwgZWxlbWVudCwgY29tcG9uZW50IGluc3RhbmNlLCBvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgZWl0aGVyLlxuICAgKiBUaGUgYGNvbnRhaW5lcmAgd2lsbCBwYXNzZWQgdG8gdGhlIE1vZGFsIGNvbXBvbmVudC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgaXQgdXNlcyB0aGUgYm9keSBvZiB0aGUgYW5jaG9yRWwncyB0b3AtbGV2ZWwgZG9jdW1lbnQgb2JqZWN0LFxuICAgKiBzbyBpdCdzIHNpbXBseSBgZG9jdW1lbnQuYm9keWAgbW9zdCBvZiB0aGUgdGltZS5cbiAgICovXG4gIGNvbnRhaW5lcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtIVE1MRWxlbWVudFR5cGUsIFByb3BUeXBlcy5mdW5jXSksXG4gIC8qKlxuICAgKiBEaXNhYmxlIHRoZSBzY3JvbGwgbG9jayBiZWhhdmlvci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVTY3JvbGxMb2NrOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBlbGV2YXRpb24gb2YgdGhlIHBvcG92ZXIuXG4gICAqIEBkZWZhdWx0IDhcbiAgICovXG4gIGVsZXZhdGlvbjogaW50ZWdlclByb3BUeXBlLFxuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyBjbG9zZSB0byB0aGUgZWRnZSBvZiB0aGUgd2luZG93IHRoZSBwb3BvdmVyIGNhbiBhcHBlYXIuXG4gICAqIElmIG51bGwsIHRoZSBwb3BvdmVyIHdpbGwgbm90IGJlIGNvbnN0cmFpbmVkIGJ5IHRoZSB3aW5kb3cuXG4gICAqIEBkZWZhdWx0IDE2XG4gICAqL1xuICBtYXJnaW5UaHJlc2hvbGQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgY2xvc2VkLlxuICAgKiBUaGUgYHJlYXNvbmAgcGFyYW1ldGVyIGNhbiBvcHRpb25hbGx5IGJlIHVzZWQgdG8gY29udHJvbCB0aGUgcmVzcG9uc2UgdG8gYG9uQ2xvc2VgLlxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BQYXBlcmBdKC9tYXRlcmlhbC11aS9hcGkvcGFwZXIvKSBlbGVtZW50LlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIGBzbG90UHJvcHMucGFwZXJgIGFuZCB3aWxsIGJlIG92ZXJyaWRlbiBieSBpdCBpZiBib3RoIGFyZSB1c2VkLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHNsb3RQcm9wcy5wYXBlcmAgaW5zdGVhZC5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIFBhcGVyUHJvcHM6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLnNoYXBlKHtcbiAgICBjb21wb25lbnQ6IGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcGFwZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBwYXBlcjogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIHBvaW50IG9uIHRoZSBwb3BvdmVyIHdoaWNoXG4gICAqIHdpbGwgYXR0YWNoIHRvIHRoZSBhbmNob3IncyBvcmlnaW4uXG4gICAqXG4gICAqIE9wdGlvbnM6XG4gICAqIHZlcnRpY2FsOiBbdG9wLCBjZW50ZXIsIGJvdHRvbSwgeChweCldO1xuICAgKiBob3Jpem9udGFsOiBbbGVmdCwgY2VudGVyLCByaWdodCwgeChweCldLlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgdmVydGljYWw6ICd0b3AnLFxuICAgKiAgIGhvcml6b250YWw6ICdsZWZ0JyxcbiAgICogfVxuICAgKi9cbiAgdHJhbnNmb3JtT3JpZ2luOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGhvcml6b250YWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2NlbnRlcicsICdsZWZ0JywgJ3JpZ2h0J10pLCBQcm9wVHlwZXMubnVtYmVyXSkuaXNSZXF1aXJlZCxcbiAgICB2ZXJ0aWNhbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYm90dG9tJywgJ2NlbnRlcicsICd0b3AnXSksIFByb3BUeXBlcy5udW1iZXJdKS5pc1JlcXVpcmVkXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgdHJhbnNpdGlvbi5cbiAgICogW0ZvbGxvdyB0aGlzIGd1aWRlXSgvbWF0ZXJpYWwtdWkvdHJhbnNpdGlvbnMvI3RyYW5zaXRpb25jb21wb25lbnQtcHJvcCkgdG8gbGVhcm4gbW9yZSBhYm91dCB0aGUgcmVxdWlyZW1lbnRzIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgR3Jvd1xuICAgKi9cbiAgVHJhbnNpdGlvbkNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogU2V0IHRvICdhdXRvJyB0byBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZSB0cmFuc2l0aW9uIHRpbWUgYmFzZWQgb24gaGVpZ2h0LlxuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIHRyYW5zaXRpb25EdXJhdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcHBlYXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZW50ZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZXhpdDogUHJvcFR5cGVzLm51bWJlclxuICB9KV0pLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgdHJhbnNpdGlvbiBlbGVtZW50LlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgZWxlbWVudCBpcyBiYXNlZCBvbiB0aGlzIFtgVHJhbnNpdGlvbmBdKGh0dHA6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uLykgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgVHJhbnNpdGlvblByb3BzOiBQcm9wVHlwZXMub2JqZWN0XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgUG9wb3ZlcjsiLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVudVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTWVudScsIHNsb3QpO1xufVxuY29uc3QgbWVudUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlNZW51JywgWydyb290JywgJ3BhcGVyJywgJ2xpc3QnXSk7XG5leHBvcnQgZGVmYXVsdCBtZW51Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJvbkVudGVyaW5nXCJdLFxuICBfZXhjbHVkZWQyID0gW1wiYXV0b0ZvY3VzXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlQXV0b0ZvY3VzSXRlbVwiLCBcIk1lbnVMaXN0UHJvcHNcIiwgXCJvbkNsb3NlXCIsIFwib3BlblwiLCBcIlBhcGVyUHJvcHNcIiwgXCJQb3BvdmVyQ2xhc3Nlc1wiLCBcInRyYW5zaXRpb25EdXJhdGlvblwiLCBcIlRyYW5zaXRpb25Qcm9wc1wiLCBcInZhcmlhbnRcIiwgXCJzbG90c1wiLCBcInNsb3RQcm9wc1wiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzRnJhZ21lbnQgfSBmcm9tICdyZWFjdC1pcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgeyB1c2VTbG90UHJvcHMgfSBmcm9tICdAbXVpL2Jhc2UvdXRpbHMnO1xuaW1wb3J0IHsgSFRNTEVsZW1lbnRUeXBlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgTWVudUxpc3QgZnJvbSAnLi4vTWVudUxpc3QnO1xuaW1wb3J0IFBvcG92ZXIsIHsgUG9wb3ZlclBhcGVyIH0gZnJvbSAnLi4vUG9wb3Zlcic7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZSc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgeyBnZXRNZW51VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9tZW51Q2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgUlRMX09SSUdJTiA9IHtcbiAgdmVydGljYWw6ICd0b3AnLFxuICBob3Jpem9udGFsOiAncmlnaHQnXG59O1xuY29uc3QgTFRSX09SSUdJTiA9IHtcbiAgdmVydGljYWw6ICd0b3AnLFxuICBob3Jpem9udGFsOiAnbGVmdCdcbn07XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290J10sXG4gICAgcGFwZXI6IFsncGFwZXInXSxcbiAgICBsaXN0OiBbJ2xpc3QnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldE1lbnVVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IE1lbnVSb290ID0gc3R5bGVkKFBvcG92ZXIsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aU1lbnUnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnJvb3Rcbn0pKHt9KTtcbmV4cG9ydCBjb25zdCBNZW51UGFwZXIgPSBzdHlsZWQoUG9wb3ZlclBhcGVyLCB7XG4gIG5hbWU6ICdNdWlNZW51JyxcbiAgc2xvdDogJ1BhcGVyJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucGFwZXJcbn0pKHtcbiAgLy8gc3BlY1o6IFRoZSBtYXhpbXVtIGhlaWdodCBvZiBhIHNpbXBsZSBtZW51IHNob3VsZCBiZSBvbmUgb3IgbW9yZSByb3dzIGxlc3MgdGhhbiB0aGUgdmlld1xuICAvLyBoZWlnaHQuIFRoaXMgZW5zdXJlcyBhIHRhcHBhYmxlIGFyZWEgb3V0c2lkZSBvZiB0aGUgc2ltcGxlIG1lbnUgd2l0aCB3aGljaCB0byBkaXNtaXNzXG4gIC8vIHRoZSBtZW51LlxuICBtYXhIZWlnaHQ6ICdjYWxjKDEwMCUgLSA5NnB4KScsXG4gIC8vIEFkZCBpT1MgbW9tZW50dW0gc2Nyb2xsaW5nIGZvciBpT1MgPCAxMy4wXG4gIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnXG59KTtcbmNvbnN0IE1lbnVNZW51TGlzdCA9IHN0eWxlZChNZW51TGlzdCwge1xuICBuYW1lOiAnTXVpTWVudScsXG4gIHNsb3Q6ICdMaXN0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMubGlzdFxufSkoe1xuICAvLyBXZSBkaXNhYmxlIHRoZSBmb2N1cyByaW5nIGZvciBtb3VzZSwgdG91Y2ggYW5kIGtleWJvYXJkIHVzZXJzLlxuICBvdXRsaW5lOiAwXG59KTtcbmNvbnN0IE1lbnUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBNZW51KGluUHJvcHMsIHJlZikge1xuICB2YXIgX3Nsb3RzJHBhcGVyLCBfc2xvdFByb3BzJHBhcGVyO1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlNZW51J1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgYXV0b0ZvY3VzID0gdHJ1ZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgZGlzYWJsZUF1dG9Gb2N1c0l0ZW0gPSBmYWxzZSxcbiAgICAgIE1lbnVMaXN0UHJvcHMgPSB7fSxcbiAgICAgIG9uQ2xvc2UsXG4gICAgICBvcGVuLFxuICAgICAgUGFwZXJQcm9wcyA9IHt9LFxuICAgICAgUG9wb3ZlckNsYXNzZXMsXG4gICAgICB0cmFuc2l0aW9uRHVyYXRpb24gPSAnYXV0bycsXG4gICAgICBUcmFuc2l0aW9uUHJvcHM6IHtcbiAgICAgICAgb25FbnRlcmluZ1xuICAgICAgfSA9IHt9LFxuICAgICAgdmFyaWFudCA9ICdzZWxlY3RlZE1lbnUnLFxuICAgICAgc2xvdHMgPSB7fSxcbiAgICAgIHNsb3RQcm9wcyA9IHt9XG4gICAgfSA9IHByb3BzLFxuICAgIFRyYW5zaXRpb25Qcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLlRyYW5zaXRpb25Qcm9wcywgX2V4Y2x1ZGVkKSxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQyKTtcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuICBjb25zdCBpc1J0bCA9IHRoZW1lLmRpcmVjdGlvbiA9PT0gJ3J0bCc7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBhdXRvRm9jdXMsXG4gICAgZGlzYWJsZUF1dG9Gb2N1c0l0ZW0sXG4gICAgTWVudUxpc3RQcm9wcyxcbiAgICBvbkVudGVyaW5nLFxuICAgIFBhcGVyUHJvcHMsXG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgIFRyYW5zaXRpb25Qcm9wcyxcbiAgICB2YXJpYW50XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IGF1dG9Gb2N1c0l0ZW0gPSBhdXRvRm9jdXMgJiYgIWRpc2FibGVBdXRvRm9jdXNJdGVtICYmIG9wZW47XG4gIGNvbnN0IG1lbnVMaXN0QWN0aW9uc1JlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgaGFuZGxlRW50ZXJpbmcgPSAoZWxlbWVudCwgaXNBcHBlYXJpbmcpID0+IHtcbiAgICBpZiAobWVudUxpc3RBY3Rpb25zUmVmLmN1cnJlbnQpIHtcbiAgICAgIG1lbnVMaXN0QWN0aW9uc1JlZi5jdXJyZW50LmFkanVzdFN0eWxlRm9yU2Nyb2xsYmFyKGVsZW1lbnQsIHRoZW1lKTtcbiAgICB9XG4gICAgaWYgKG9uRW50ZXJpbmcpIHtcbiAgICAgIG9uRW50ZXJpbmcoZWxlbWVudCwgaXNBcHBlYXJpbmcpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlTGlzdEtleURvd24gPSBldmVudCA9PiB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAob25DbG9zZSkge1xuICAgICAgICBvbkNsb3NlKGV2ZW50LCAndGFiS2V5RG93bicpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogdGhlIGluZGV4IG9mIHRoZSBpdGVtIHNob3VsZCByZWNlaXZlIGZvY3VzXG4gICAqIGluIGEgYHZhcmlhbnQ9XCJzZWxlY3RlZE1lbnVcImAgaXQncyB0aGUgZmlyc3QgYHNlbGVjdGVkYCBpdGVtXG4gICAqIG90aGVyd2lzZSBpdCdzIHRoZSB2ZXJ5IGZpcnN0IGl0ZW0uXG4gICAqL1xuICBsZXQgYWN0aXZlSXRlbUluZGV4ID0gLTE7XG4gIC8vIHNpbmNlIHdlIGluamVjdCBmb2N1cyByZWxhdGVkIHByb3BzIGludG8gY2hpbGRyZW4gd2UgaGF2ZSB0byBkbyBhIGxvb2thaGVhZFxuICAvLyB0byBjaGVjayBpZiB0aGVyZSBpcyBhIGBzZWxlY3RlZGAgaXRlbS4gV2UncmUgbG9va2luZyBmb3IgdGhlIGxhc3QgYHNlbGVjdGVkYFxuICAvLyBpdGVtIGFuZCB1c2UgdGhlIGZpcnN0IHZhbGlkIGl0ZW0gYXMgYSBmYWxsYmFja1xuICBSZWFjdC5DaGlsZHJlbi5tYXAoY2hpbGRyZW4sIChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICBpZiAoISAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoaXNGcmFnbWVudChjaGlsZCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbXCJNVUk6IFRoZSBNZW51IGNvbXBvbmVudCBkb2Vzbid0IGFjY2VwdCBhIEZyYWdtZW50IGFzIGEgY2hpbGQuXCIsICdDb25zaWRlciBwcm92aWRpbmcgYW4gYXJyYXkgaW5zdGVhZC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghY2hpbGQucHJvcHMuZGlzYWJsZWQpIHtcbiAgICAgIGlmICh2YXJpYW50ID09PSAnc2VsZWN0ZWRNZW51JyAmJiBjaGlsZC5wcm9wcy5zZWxlY3RlZCkge1xuICAgICAgICBhY3RpdmVJdGVtSW5kZXggPSBpbmRleDtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aXZlSXRlbUluZGV4ID09PSAtMSkge1xuICAgICAgICBhY3RpdmVJdGVtSW5kZXggPSBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBjb25zdCBQYXBlclNsb3QgPSAoX3Nsb3RzJHBhcGVyID0gc2xvdHMucGFwZXIpICE9IG51bGwgPyBfc2xvdHMkcGFwZXIgOiBNZW51UGFwZXI7XG4gIGNvbnN0IHBhcGVyRXh0ZXJuYWxTbG90UHJvcHMgPSAoX3Nsb3RQcm9wcyRwYXBlciA9IHNsb3RQcm9wcy5wYXBlcikgIT0gbnVsbCA/IF9zbG90UHJvcHMkcGFwZXIgOiBQYXBlclByb3BzO1xuICBjb25zdCByb290U2xvdFByb3BzID0gdXNlU2xvdFByb3BzKHtcbiAgICBlbGVtZW50VHlwZTogc2xvdHMucm9vdCxcbiAgICBleHRlcm5hbFNsb3RQcm9wczogc2xvdFByb3BzLnJvb3QsXG4gICAgb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IFtjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZV1cbiAgfSk7XG4gIGNvbnN0IHBhcGVyU2xvdFByb3BzID0gdXNlU2xvdFByb3BzKHtcbiAgICBlbGVtZW50VHlwZTogUGFwZXJTbG90LFxuICAgIGV4dGVybmFsU2xvdFByb3BzOiBwYXBlckV4dGVybmFsU2xvdFByb3BzLFxuICAgIG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLnBhcGVyXG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTWVudVJvb3QsIF9leHRlbmRzKHtcbiAgICBvbkNsb3NlOiBvbkNsb3NlLFxuICAgIGFuY2hvck9yaWdpbjoge1xuICAgICAgdmVydGljYWw6ICdib3R0b20nLFxuICAgICAgaG9yaXpvbnRhbDogaXNSdGwgPyAncmlnaHQnIDogJ2xlZnQnXG4gICAgfSxcbiAgICB0cmFuc2Zvcm1PcmlnaW46IGlzUnRsID8gUlRMX09SSUdJTiA6IExUUl9PUklHSU4sXG4gICAgc2xvdHM6IHtcbiAgICAgIHBhcGVyOiBQYXBlclNsb3QsXG4gICAgICByb290OiBzbG90cy5yb290XG4gICAgfSxcbiAgICBzbG90UHJvcHM6IHtcbiAgICAgIHJvb3Q6IHJvb3RTbG90UHJvcHMsXG4gICAgICBwYXBlcjogcGFwZXJTbG90UHJvcHNcbiAgICB9LFxuICAgIG9wZW46IG9wZW4sXG4gICAgcmVmOiByZWYsXG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uOiB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgVHJhbnNpdGlvblByb3BzOiBfZXh0ZW5kcyh7XG4gICAgICBvbkVudGVyaW5nOiBoYW5kbGVFbnRlcmluZ1xuICAgIH0sIFRyYW5zaXRpb25Qcm9wcyksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IFBvcG92ZXJDbGFzc2VzLFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChNZW51TWVudUxpc3QsIF9leHRlbmRzKHtcbiAgICAgIG9uS2V5RG93bjogaGFuZGxlTGlzdEtleURvd24sXG4gICAgICBhY3Rpb25zOiBtZW51TGlzdEFjdGlvbnNSZWYsXG4gICAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyAmJiAoYWN0aXZlSXRlbUluZGV4ID09PSAtMSB8fCBkaXNhYmxlQXV0b0ZvY3VzSXRlbSksXG4gICAgICBhdXRvRm9jdXNJdGVtOiBhdXRvRm9jdXNJdGVtLFxuICAgICAgdmFyaWFudDogdmFyaWFudFxuICAgIH0sIE1lbnVMaXN0UHJvcHMsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLmxpc3QsIE1lbnVMaXN0UHJvcHMuY2xhc3NOYW1lKSxcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pKVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE1lbnUucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBvbmUuXG4gICAqIEl0J3MgdXNlZCB0byBzZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBtZW51LlxuICAgKi9cbiAgYW5jaG9yRWw6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbSFRNTEVsZW1lbnRUeXBlLCBQcm9wVHlwZXMuZnVuY10pLFxuICAvKipcbiAgICogSWYgYHRydWVgIChEZWZhdWx0KSB3aWxsIGZvY3VzIHRoZSBgW3JvbGU9XCJtZW51XCJdYCBpZiBubyBmb2N1c2FibGUgY2hpbGQgaXMgZm91bmQuIERpc2FibGVkXG4gICAqIGNoaWxkcmVuIGFyZSBub3QgZm9jdXNhYmxlLiBJZiB5b3Ugc2V0IHRoaXMgcHJvcCB0byBgZmFsc2VgIGZvY3VzIHdpbGwgYmUgcGxhY2VkXG4gICAqIG9uIHRoZSBwYXJlbnQgbW9kYWwgY29udGFpbmVyLiBUaGlzIGhhcyBzZXZlcmUgYWNjZXNzaWJpbGl0eSBpbXBsaWNhdGlvbnNcbiAgICogYW5kIHNob3VsZCBvbmx5IGJlIGNvbnNpZGVyZWQgaWYgeW91IG1hbmFnZSBmb2N1cyBvdGhlcndpc2UuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBNZW51IGNvbnRlbnRzLCBub3JtYWxseSBgTWVudUl0ZW1gcy5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBXaGVuIG9wZW5pbmcgdGhlIG1lbnUgd2lsbCBub3QgZm9jdXMgdGhlIGFjdGl2ZSBpdGVtIGJ1dCB0aGUgYFtyb2xlPVwibWVudVwiXWBcbiAgICogdW5sZXNzIGBhdXRvRm9jdXNgIGlzIGFsc28gc2V0IHRvIGBmYWxzZWAuIE5vdCB1c2luZyB0aGUgZGVmYXVsdCBtZWFucyBub3RcbiAgICogZm9sbG93aW5nIFdBSS1BUklBIGF1dGhvcmluZyBwcmFjdGljZXMuIFBsZWFzZSBiZSBjb25zaWRlcmF0ZSBhYm91dCBwb3NzaWJsZVxuICAgKiBhY2Nlc3NpYmlsaXR5IGltcGxpY2F0aW9ucy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVBdXRvRm9jdXNJdGVtOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgTWVudUxpc3RgXSgvbWF0ZXJpYWwtdWkvYXBpL21lbnUtbGlzdC8pIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBNZW51TGlzdFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIGNsb3NlZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIENhbiBiZTogYFwiZXNjYXBlS2V5RG93blwiYCwgYFwiYmFja2Ryb3BDbGlja1wiYCwgYFwidGFiS2V5RG93blwiYC5cbiAgICovXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIFBhcGVyUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBgY2xhc3Nlc2AgcHJvcCBhcHBsaWVkIHRvIHRoZSBbYFBvcG92ZXJgXSgvbWF0ZXJpYWwtdWkvYXBpL3BvcG92ZXIvKSBlbGVtZW50LlxuICAgKi9cbiAgUG9wb3ZlckNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBwYXBlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgICByb290OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHBhcGVyOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgcm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIGxlbmd0aCBvZiB0aGUgdHJhbnNpdGlvbiBpbiBgbXNgLCBvciAnYXV0bydcbiAgICogQGRlZmF1bHQgJ2F1dG8nXG4gICAqL1xuICB0cmFuc2l0aW9uRHVyYXRpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2F1dG8nXSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXBwZWFyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGVudGVyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5udW1iZXJcbiAgfSldKSxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIHRyYW5zaXRpb24gZWxlbWVudC5cbiAgICogQnkgZGVmYXVsdCwgdGhlIGVsZW1lbnQgaXMgYmFzZWQgb24gdGhpcyBbYFRyYW5zaXRpb25gXShodHRwOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdHJhbnNpdGlvbi8pIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIFRyYW5zaXRpb25Qcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS4gVXNlIGBtZW51YCB0byBwcmV2ZW50IHNlbGVjdGVkIGl0ZW1zIGZyb20gaW1wYWN0aW5nIHRoZSBpbml0aWFsIGZvY3VzLlxuICAgKiBAZGVmYXVsdCAnc2VsZWN0ZWRNZW51J1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnbWVudScsICdzZWxlY3RlZE1lbnUnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBNZW51OyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0SXRlbUljb25VdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUxpc3RJdGVtSWNvbicsIHNsb3QpO1xufVxuY29uc3QgbGlzdEl0ZW1JY29uQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUxpc3RJdGVtSWNvbicsIFsncm9vdCcsICdhbGlnbkl0ZW1zRmxleFN0YXJ0J10pO1xuZXhwb3J0IGRlZmF1bHQgbGlzdEl0ZW1JY29uQ2xhc3NlczsiLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlzdEl0ZW1UZXh0VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlMaXN0SXRlbVRleHQnLCBzbG90KTtcbn1cbmNvbnN0IGxpc3RJdGVtVGV4dENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlMaXN0SXRlbVRleHQnLCBbJ3Jvb3QnLCAnbXVsdGlsaW5lJywgJ2RlbnNlJywgJ2luc2V0JywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5J10pO1xuZXhwb3J0IGRlZmF1bHQgbGlzdEl0ZW1UZXh0Q2xhc3NlczsiLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVudUl0ZW1VdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aU1lbnVJdGVtJywgc2xvdCk7XG59XG5jb25zdCBtZW51SXRlbUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlNZW51SXRlbScsIFsncm9vdCcsICdmb2N1c1Zpc2libGUnLCAnZGVuc2UnLCAnZGlzYWJsZWQnLCAnZGl2aWRlcicsICdndXR0ZXJzJywgJ3NlbGVjdGVkJ10pO1xuZXhwb3J0IGRlZmF1bHQgbWVudUl0ZW1DbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImF1dG9Gb2N1c1wiLCBcImNvbXBvbmVudFwiLCBcImRlbnNlXCIsIFwiZGl2aWRlclwiLCBcImRpc2FibGVHdXR0ZXJzXCIsIFwiZm9jdXNWaXNpYmxlQ2xhc3NOYW1lXCIsIFwicm9sZVwiLCBcInRhYkluZGV4XCIsIFwiY2xhc3NOYW1lXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgYWxwaGEgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IExpc3RDb250ZXh0IGZyb20gJy4uL0xpc3QvTGlzdENvbnRleHQnO1xuaW1wb3J0IEJ1dHRvbkJhc2UgZnJvbSAnLi4vQnV0dG9uQmFzZSc7XG5pbXBvcnQgdXNlRW5oYW5jZWRFZmZlY3QgZnJvbSAnLi4vdXRpbHMvdXNlRW5oYW5jZWRFZmZlY3QnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgeyBkaXZpZGVyQ2xhc3NlcyB9IGZyb20gJy4uL0RpdmlkZXInO1xuaW1wb3J0IHsgbGlzdEl0ZW1JY29uQ2xhc3NlcyB9IGZyb20gJy4uL0xpc3RJdGVtSWNvbic7XG5pbXBvcnQgeyBsaXN0SXRlbVRleHRDbGFzc2VzIH0gZnJvbSAnLi4vTGlzdEl0ZW1UZXh0JztcbmltcG9ydCBtZW51SXRlbUNsYXNzZXMsIHsgZ2V0TWVudUl0ZW1VdGlsaXR5Q2xhc3MgfSBmcm9tICcuL21lbnVJdGVtQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGNvbnN0IG92ZXJyaWRlc1Jlc29sdmVyID0gKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgY29uc3Qge1xuICAgIG93bmVyU3RhdGVcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLmRlbnNlICYmIHN0eWxlcy5kZW5zZSwgb3duZXJTdGF0ZS5kaXZpZGVyICYmIHN0eWxlcy5kaXZpZGVyLCAhb3duZXJTdGF0ZS5kaXNhYmxlR3V0dGVycyAmJiBzdHlsZXMuZ3V0dGVyc107XG59O1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGRpc2FibGVkLFxuICAgIGRlbnNlLFxuICAgIGRpdmlkZXIsXG4gICAgZGlzYWJsZUd1dHRlcnMsXG4gICAgc2VsZWN0ZWQsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgZGVuc2UgJiYgJ2RlbnNlJywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgIWRpc2FibGVHdXR0ZXJzICYmICdndXR0ZXJzJywgZGl2aWRlciAmJiAnZGl2aWRlcicsIHNlbGVjdGVkICYmICdzZWxlY3RlZCddXG4gIH07XG4gIGNvbnN0IGNvbXBvc2VkQ2xhc3NlcyA9IGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRNZW51SXRlbVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgY2xhc3NlcywgY29tcG9zZWRDbGFzc2VzKTtcbn07XG5jb25zdCBNZW51SXRlbVJvb3QgPSBzdHlsZWQoQnV0dG9uQmFzZSwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpTWVudUl0ZW0nLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyXG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe30sIHRoZW1lLnR5cG9ncmFwaHkuYm9keTEsIHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtc3RhcnQnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIHRleHREZWNvcmF0aW9uOiAnbm9uZScsXG4gIG1pbkhlaWdodDogNDgsXG4gIHBhZGRpbmdUb3A6IDYsXG4gIHBhZGRpbmdCb3R0b206IDYsXG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICB3aGl0ZVNwYWNlOiAnbm93cmFwJ1xufSwgIW93bmVyU3RhdGUuZGlzYWJsZUd1dHRlcnMgJiYge1xuICBwYWRkaW5nTGVmdDogMTYsXG4gIHBhZGRpbmdSaWdodDogMTZcbn0sIG93bmVyU3RhdGUuZGl2aWRlciAmJiB7XG4gIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmRpdmlkZXJ9YCxcbiAgYmFja2dyb3VuZENsaXA6ICdwYWRkaW5nLWJveCdcbn0sIHtcbiAgJyY6aG92ZXInOiB7XG4gICAgdGV4dERlY29yYXRpb246ICdub25lJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5ob3ZlcixcbiAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgIH1cbiAgfSxcbiAgW2AmLiR7bWVudUl0ZW1DbGFzc2VzLnNlbGVjdGVkfWBdOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUucHJpbWFyeS5tYWluQ2hhbm5lbH0gLyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5fSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eSksXG4gICAgW2AmLiR7bWVudUl0ZW1DbGFzc2VzLmZvY3VzVmlzaWJsZX1gXToge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUucHJpbWFyeS5tYWluQ2hhbm5lbH0gLyBjYWxjKCR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHl9ICsgJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmZvY3VzT3BhY2l0eX0pKWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlLnByaW1hcnkubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5ICsgdGhlbWUucGFsZXR0ZS5hY3Rpb24uZm9jdXNPcGFjaXR5KVxuICAgIH1cbiAgfSxcbiAgW2AmLiR7bWVudUl0ZW1DbGFzc2VzLnNlbGVjdGVkfTpob3ZlcmBdOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUucHJpbWFyeS5tYWluQ2hhbm5lbH0gLyBjYWxjKCR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHl9ICsgJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eX0pKWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlLnByaW1hcnkubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5ICsgdGhlbWUucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5KSxcbiAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLnByaW1hcnkubWFpbkNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eX0pYCA6IGFscGhhKHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHkpXG4gICAgfVxuICB9LFxuICBbYCYuJHttZW51SXRlbUNsYXNzZXMuZm9jdXNWaXNpYmxlfWBdOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZm9jdXNcbiAgfSxcbiAgW2AmLiR7bWVudUl0ZW1DbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgb3BhY2l0eTogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkT3BhY2l0eVxuICB9LFxuICBbYCYgKyAuJHtkaXZpZGVyQ2xhc3Nlcy5yb290fWBdOiB7XG4gICAgbWFyZ2luVG9wOiB0aGVtZS5zcGFjaW5nKDEpLFxuICAgIG1hcmdpbkJvdHRvbTogdGhlbWUuc3BhY2luZygxKVxuICB9LFxuICBbYCYgKyAuJHtkaXZpZGVyQ2xhc3Nlcy5pbnNldH1gXToge1xuICAgIG1hcmdpbkxlZnQ6IDUyXG4gIH0sXG4gIFtgJiAuJHtsaXN0SXRlbVRleHRDbGFzc2VzLnJvb3R9YF06IHtcbiAgICBtYXJnaW5Ub3A6IDAsXG4gICAgbWFyZ2luQm90dG9tOiAwXG4gIH0sXG4gIFtgJiAuJHtsaXN0SXRlbVRleHRDbGFzc2VzLmluc2V0fWBdOiB7XG4gICAgcGFkZGluZ0xlZnQ6IDM2XG4gIH0sXG4gIFtgJiAuJHtsaXN0SXRlbUljb25DbGFzc2VzLnJvb3R9YF06IHtcbiAgICBtaW5XaWR0aDogMzZcbiAgfVxufSwgIW93bmVyU3RhdGUuZGVuc2UgJiYge1xuICBbdGhlbWUuYnJlYWtwb2ludHMudXAoJ3NtJyldOiB7XG4gICAgbWluSGVpZ2h0OiAnYXV0bydcbiAgfVxufSwgb3duZXJTdGF0ZS5kZW5zZSAmJiBfZXh0ZW5kcyh7XG4gIG1pbkhlaWdodDogMzIsXG4gIC8vIGh0dHBzOi8vbTIubWF0ZXJpYWwuaW8vY29tcG9uZW50cy9tZW51cyNzcGVjcyA+IERlbnNlXG4gIHBhZGRpbmdUb3A6IDQsXG4gIHBhZGRpbmdCb3R0b206IDRcbn0sIHRoZW1lLnR5cG9ncmFwaHkuYm9keTIsIHtcbiAgW2AmIC4ke2xpc3RJdGVtSWNvbkNsYXNzZXMucm9vdH0gc3ZnYF06IHtcbiAgICBmb250U2l6ZTogJzEuMjVyZW0nXG4gIH1cbn0pKSk7XG5jb25zdCBNZW51SXRlbSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIE1lbnVJdGVtKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlNZW51SXRlbSdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICAgICAgY29tcG9uZW50ID0gJ2xpJyxcbiAgICAgIGRlbnNlID0gZmFsc2UsXG4gICAgICBkaXZpZGVyID0gZmFsc2UsXG4gICAgICBkaXNhYmxlR3V0dGVycyA9IGZhbHNlLFxuICAgICAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lLFxuICAgICAgcm9sZSA9ICdtZW51aXRlbScsXG4gICAgICB0YWJJbmRleDogdGFiSW5kZXhQcm9wLFxuICAgICAgY2xhc3NOYW1lXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KExpc3RDb250ZXh0KTtcbiAgY29uc3QgY2hpbGRDb250ZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoe1xuICAgIGRlbnNlOiBkZW5zZSB8fCBjb250ZXh0LmRlbnNlIHx8IGZhbHNlLFxuICAgIGRpc2FibGVHdXR0ZXJzXG4gIH0pLCBbY29udGV4dC5kZW5zZSwgZGVuc2UsIGRpc2FibGVHdXR0ZXJzXSk7XG4gIGNvbnN0IG1lbnVJdGVtUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGF1dG9Gb2N1cykge1xuICAgICAgaWYgKG1lbnVJdGVtUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgbWVudUl0ZW1SZWYuY3VycmVudC5mb2N1cygpO1xuICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogVW5hYmxlIHRvIHNldCBmb2N1cyB0byBhIE1lbnVJdGVtIHdob3NlIGNvbXBvbmVudCBoYXMgbm90IGJlZW4gcmVuZGVyZWQuJyk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbYXV0b0ZvY3VzXSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBkZW5zZTogY2hpbGRDb250ZXh0LmRlbnNlLFxuICAgIGRpdmlkZXIsXG4gICAgZGlzYWJsZUd1dHRlcnNcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhwcm9wcyk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYobWVudUl0ZW1SZWYsIHJlZik7XG4gIGxldCB0YWJJbmRleDtcbiAgaWYgKCFwcm9wcy5kaXNhYmxlZCkge1xuICAgIHRhYkluZGV4ID0gdGFiSW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyB0YWJJbmRleFByb3AgOiAtMTtcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTGlzdENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY2hpbGRDb250ZXh0LFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChNZW51SXRlbVJvb3QsIF9leHRlbmRzKHtcbiAgICAgIHJlZjogaGFuZGxlUmVmLFxuICAgICAgcm9sZTogcm9sZSxcbiAgICAgIHRhYkluZGV4OiB0YWJJbmRleCxcbiAgICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxuICAgICAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMuZm9jdXNWaXNpYmxlLCBmb2N1c1Zpc2libGVDbGFzc05hbWUpLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICAgIH0sIG90aGVyLCB7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NlczogY2xhc3Nlc1xuICAgIH0pKVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTWVudUl0ZW0ucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGlzdCBpdGVtIGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICogRm9jdXMgd2lsbCBhbHNvIGJlIHRyaWdnZXJlZCBpZiB0aGUgdmFsdWUgY2hhbmdlcyBmcm9tIGZhbHNlIHRvIHRydWUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgY29tcGFjdCB2ZXJ0aWNhbCBwYWRkaW5nIGRlc2lnbmVkIGZvciBrZXlib2FyZCBhbmQgbW91c2UgaW5wdXQgaXMgdXNlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgTWVudSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZW5zZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsZWZ0IGFuZCByaWdodCBwYWRkaW5nIGlzIHJlbW92ZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlR3V0dGVyczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgMXB4IGxpZ2h0IGJvcmRlciBpcyBhZGRlZCB0byB0aGUgYm90dG9tIG9mIHRoZSBtZW51IGl0ZW0uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXZpZGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBjYW4gaGVscCBpZGVudGlmeSB3aGljaCBlbGVtZW50IGhhcyBrZXlib2FyZCBmb2N1cy5cbiAgICogVGhlIGNsYXNzIG5hbWUgd2lsbCBiZSBhcHBsaWVkIHdoZW4gdGhlIGVsZW1lbnQgZ2FpbnMgdGhlIGZvY3VzIHRocm91Z2gga2V5Ym9hcmQgaW50ZXJhY3Rpb24uXG4gICAqIEl0J3MgYSBwb2x5ZmlsbCBmb3IgdGhlIFtDU1MgOmZvY3VzLXZpc2libGUgc2VsZWN0b3JdKGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9zZWxlY3RvcnMtNC8jdGhlLWZvY3VzLXZpc2libGUtcHNldWRvKS5cbiAgICogVGhlIHJhdGlvbmFsZSBmb3IgdXNpbmcgdGhpcyBmZWF0dXJlIFtpcyBleHBsYWluZWQgaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvZm9jdXMtdmlzaWJsZS9ibG9iL0hFQUQvZXhwbGFpbmVyLm1kKS5cbiAgICogQSBbcG9seWZpbGwgY2FuIGJlIHVzZWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL2ZvY3VzLXZpc2libGUpIHRvIGFwcGx5IGEgYGZvY3VzLXZpc2libGVgIGNsYXNzIHRvIG90aGVyIGNvbXBvbmVudHNcbiAgICogaWYgbmVlZGVkLlxuICAgKi9cbiAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcm9sZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8uc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNlbGVjdGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgdGFiSW5kZXg6IFByb3BUeXBlcy5udW1iZXJcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBNZW51SXRlbTsiLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmF0aXZlU2VsZWN0VXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aU5hdGl2ZVNlbGVjdCcsIHNsb3QpO1xufVxuY29uc3QgbmF0aXZlU2VsZWN0Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aU5hdGl2ZVNlbGVjdCcsIFsncm9vdCcsICdzZWxlY3QnLCAnbXVsdGlwbGUnLCAnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJywgJ2Rpc2FibGVkJywgJ2ljb24nLCAnaWNvbk9wZW4nLCAnaWNvbkZpbGxlZCcsICdpY29uT3V0bGluZWQnLCAnaWNvblN0YW5kYXJkJywgJ25hdGl2ZUlucHV0JywgJ2Vycm9yJ10pO1xuZXhwb3J0IGRlZmF1bHQgbmF0aXZlU2VsZWN0Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlZFwiLCBcImVycm9yXCIsIFwiSWNvbkNvbXBvbmVudFwiLCBcImlucHV0UmVmXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHJlZlR5cGUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IG5hdGl2ZVNlbGVjdENsYXNzZXMsIHsgZ2V0TmF0aXZlU2VsZWN0VXRpbGl0eUNsYXNzZXMgfSBmcm9tICcuL25hdGl2ZVNlbGVjdENsYXNzZXMnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICB2YXJpYW50LFxuICAgIGRpc2FibGVkLFxuICAgIG11bHRpcGxlLFxuICAgIG9wZW4sXG4gICAgZXJyb3JcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHNlbGVjdDogWydzZWxlY3QnLCB2YXJpYW50LCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBtdWx0aXBsZSAmJiAnbXVsdGlwbGUnLCBlcnJvciAmJiAnZXJyb3InXSxcbiAgICBpY29uOiBbJ2ljb24nLCBgaWNvbiR7Y2FwaXRhbGl6ZSh2YXJpYW50KX1gLCBvcGVuICYmICdpY29uT3BlbicsIGRpc2FibGVkICYmICdkaXNhYmxlZCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TmF0aXZlU2VsZWN0VXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBuYXRpdmVTZWxlY3RTZWxlY3RTdHlsZXMgPSAoe1xuICBvd25lclN0YXRlLFxuICB0aGVtZVxufSkgPT4gX2V4dGVuZHMoe1xuICBNb3pBcHBlYXJhbmNlOiAnbm9uZScsXG4gIC8vIFJlc2V0XG4gIFdlYmtpdEFwcGVhcmFuY2U6ICdub25lJyxcbiAgLy8gUmVzZXRcbiAgLy8gV2hlbiBpbnRlcmFjdGluZyBxdWlja2x5LCB0aGUgdGV4dCBjYW4gZW5kIHVwIHNlbGVjdGVkLlxuICAvLyBOYXRpdmUgc2VsZWN0IGNhbid0IGJlIHNlbGVjdGVkIGVpdGhlci5cbiAgdXNlclNlbGVjdDogJ25vbmUnLFxuICBib3JkZXJSYWRpdXM6IDAsXG4gIC8vIFJlc2V0XG4gIGN1cnNvcjogJ3BvaW50ZXInLFxuICAnJjpmb2N1cyc6IF9leHRlbmRzKHt9LCB0aGVtZS52YXJzID8ge1xuICAgIGJhY2tncm91bmRDb2xvcjogYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUuY29tbW9uLm9uQmFja2dyb3VuZENoYW5uZWx9IC8gMC4wNSlgXG4gIH0gOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyAncmdiYSgwLCAwLCAwLCAwLjA1KScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSdcbiAgfSwge1xuICAgIGJvcmRlclJhZGl1czogMCAvLyBSZXNldCBDaHJvbWUgc3R5bGVcbiAgfSksXG5cbiAgLy8gUmVtb3ZlIElFMTEgYXJyb3dcbiAgJyY6Oi1tcy1leHBhbmQnOiB7XG4gICAgZGlzcGxheTogJ25vbmUnXG4gIH0sXG4gIFtgJi4ke25hdGl2ZVNlbGVjdENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjdXJzb3I6ICdkZWZhdWx0J1xuICB9LFxuICAnJlttdWx0aXBsZV0nOiB7XG4gICAgaGVpZ2h0OiAnYXV0bydcbiAgfSxcbiAgJyY6bm90KFttdWx0aXBsZV0pIG9wdGlvbiwgJjpub3QoW211bHRpcGxlXSkgb3B0Z3JvdXAnOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5iYWNrZ3JvdW5kLnBhcGVyXG4gIH0sXG4gIC8vIEJ1bXAgc3BlY2lmaWNpdHkgdG8gYWxsb3cgZXh0ZW5kaW5nIGN1c3RvbSBpbnB1dHNcbiAgJyYmJic6IHtcbiAgICBwYWRkaW5nUmlnaHQ6IDI0LFxuICAgIG1pbldpZHRoOiAxNiAvLyBTbyBpdCBkb2Vzbid0IGNvbGxhcHNlLlxuICB9XG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdmaWxsZWQnICYmIHtcbiAgJyYmJic6IHtcbiAgICBwYWRkaW5nUmlnaHQ6IDMyXG4gIH1cbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiB7XG4gIGJvcmRlclJhZGl1czogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYXBlLmJvcmRlclJhZGl1cyxcbiAgJyY6Zm9jdXMnOiB7XG4gICAgYm9yZGVyUmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzIC8vIFJlc2V0IHRoZSByZXNldCBmb3IgQ2hyb21lIHN0eWxlXG4gIH0sXG5cbiAgJyYmJic6IHtcbiAgICBwYWRkaW5nUmlnaHQ6IDMyXG4gIH1cbn0pO1xuY29uc3QgTmF0aXZlU2VsZWN0U2VsZWN0ID0gc3R5bGVkKCdzZWxlY3QnLCB7XG4gIG5hbWU6ICdNdWlOYXRpdmVTZWxlY3QnLFxuICBzbG90OiAnU2VsZWN0JyxcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHJvb3RTaG91bGRGb3J3YXJkUHJvcCxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5zZWxlY3QsIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdLCBvd25lclN0YXRlLmVycm9yICYmIHN0eWxlcy5lcnJvciwge1xuICAgICAgW2AmLiR7bmF0aXZlU2VsZWN0Q2xhc3Nlcy5tdWx0aXBsZX1gXTogc3R5bGVzLm11bHRpcGxlXG4gICAgfV07XG4gIH1cbn0pKG5hdGl2ZVNlbGVjdFNlbGVjdFN0eWxlcyk7XG5leHBvcnQgY29uc3QgbmF0aXZlU2VsZWN0SWNvblN0eWxlcyA9ICh7XG4gIG93bmVyU3RhdGUsXG4gIHRoZW1lXG59KSA9PiBfZXh0ZW5kcyh7XG4gIC8vIFdlIHVzZSBhIHBvc2l0aW9uIGFic29sdXRlIG92ZXIgYSBmbGV4Ym94IGluIG9yZGVyIHRvIGZvcndhcmQgdGhlIHBvaW50ZXIgZXZlbnRzXG4gIC8vIHRvIHRoZSBpbnB1dCBhbmQgdG8gc3VwcG9ydCB3cmFwcGluZyB0YWdzLi5cbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHJpZ2h0OiAwLFxuICB0b3A6ICdjYWxjKDUwJSAtIC41ZW0pJyxcbiAgLy8gQ2VudGVyIHZlcnRpY2FsbHksIGhlaWdodCBpcyAxZW1cbiAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAvLyBEb24ndCBibG9jayBwb2ludGVyIGV2ZW50cyBvbiB0aGUgc2VsZWN0IHVuZGVyIHRoZSBpY29uLlxuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmFjdGl2ZSxcbiAgW2AmLiR7bmF0aXZlU2VsZWN0Q2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRcbiAgfVxufSwgb3duZXJTdGF0ZS5vcGVuICYmIHtcbiAgdHJhbnNmb3JtOiAncm90YXRlKDE4MGRlZyknXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdmaWxsZWQnICYmIHtcbiAgcmlnaHQ6IDdcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiB7XG4gIHJpZ2h0OiA3XG59KTtcbmNvbnN0IE5hdGl2ZVNlbGVjdEljb24gPSBzdHlsZWQoJ3N2ZycsIHtcbiAgbmFtZTogJ011aU5hdGl2ZVNlbGVjdCcsXG4gIHNsb3Q6ICdJY29uJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5pY29uLCBvd25lclN0YXRlLnZhcmlhbnQgJiYgc3R5bGVzW2BpY29uJHtjYXBpdGFsaXplKG93bmVyU3RhdGUudmFyaWFudCl9YF0sIG93bmVyU3RhdGUub3BlbiAmJiBzdHlsZXMuaWNvbk9wZW5dO1xuICB9XG59KShuYXRpdmVTZWxlY3RJY29uU3R5bGVzKTtcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBOYXRpdmVTZWxlY3RJbnB1dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIE5hdGl2ZVNlbGVjdElucHV0KHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBlcnJvcixcbiAgICAgIEljb25Db21wb25lbnQsXG4gICAgICBpbnB1dFJlZixcbiAgICAgIHZhcmlhbnQgPSAnc3RhbmRhcmQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBkaXNhYmxlZCxcbiAgICB2YXJpYW50LFxuICAgIGVycm9yXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9fanN4KE5hdGl2ZVNlbGVjdFNlbGVjdCwgX2V4dGVuZHMoe1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnNlbGVjdCwgY2xhc3NOYW1lKSxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgIHJlZjogaW5wdXRSZWYgfHwgcmVmXG4gICAgfSwgb3RoZXIpKSwgcHJvcHMubXVsdGlwbGUgPyBudWxsIDogLyojX19QVVJFX18qL19qc3goTmF0aXZlU2VsZWN0SWNvbiwge1xuICAgICAgYXM6IEljb25Db21wb25lbnQsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmljb25cbiAgICB9KV1cbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE5hdGl2ZVNlbGVjdElucHV0LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFRoZSBvcHRpb24gZWxlbWVudHMgdG8gcG9wdWxhdGUgdGhlIHNlbGVjdCB3aXRoLlxuICAgKiBDYW4gYmUgc29tZSBgPG9wdGlvbj5gIGVsZW1lbnRzLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBTZWUgW0NTUyBBUEldKCNjc3MpIGJlbG93IGZvciBtb3JlIGRldGFpbHMuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIENTUyBjbGFzcyBuYW1lIG9mIHRoZSBzZWxlY3QgZWxlbWVudC5cbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHNlbGVjdCBpcyBkaXNhYmxlZC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBzZWxlY3QgaW5wdXRgIHdpbGwgaW5kaWNhdGUgYW4gZXJyb3IuXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0aGF0IGRpc3BsYXlzIHRoZSBhcnJvdy5cbiAgICovXG4gIEljb25Db21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogVXNlIHRoYXQgcHJvcCB0byBwYXNzIGEgcmVmIHRvIHRoZSBuYXRpdmUgc2VsZWN0IGVsZW1lbnQuXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG11bHRpcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE5hbWUgYXR0cmlidXRlIG9mIHRoZSBgc2VsZWN0YCBvciBoaWRkZW4gYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gYSBtZW51IGl0ZW0gaXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBpbnB1dCB2YWx1ZS5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnc3RhbmRhcmQnLCAnb3V0bGluZWQnLCAnZmlsbGVkJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTmF0aXZlU2VsZWN0SW5wdXQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xudmFyIF9zcGFuO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc2VzXCIsIFwiY2xhc3NOYW1lXCIsIFwibGFiZWxcIiwgXCJub3RjaGVkXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgTm90Y2hlZE91dGxpbmVSb290ID0gc3R5bGVkKCdmaWVsZHNldCcsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHJvb3RTaG91bGRGb3J3YXJkUHJvcFxufSkoe1xuICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIGJvdHRvbTogMCxcbiAgcmlnaHQ6IDAsXG4gIHRvcDogLTUsXG4gIGxlZnQ6IDAsXG4gIG1hcmdpbjogMCxcbiAgcGFkZGluZzogJzAgOHB4JyxcbiAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICBib3JkZXJSYWRpdXM6ICdpbmhlcml0JyxcbiAgYm9yZGVyU3R5bGU6ICdzb2xpZCcsXG4gIGJvcmRlcldpZHRoOiAxLFxuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIG1pbldpZHRoOiAnMCUnXG59KTtcbmNvbnN0IE5vdGNoZWRPdXRsaW5lTGVnZW5kID0gc3R5bGVkKCdsZWdlbmQnLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiByb290U2hvdWxkRm9yd2FyZFByb3Bcbn0pKCh7XG4gIG93bmVyU3RhdGUsXG4gIHRoZW1lXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGZsb2F0OiAndW5zZXQnLFxuICAvLyBGaXggY29uZmxpY3Qgd2l0aCBib290c3RyYXBcbiAgd2lkdGg6ICdhdXRvJyxcbiAgLy8gRml4IGNvbmZsaWN0IHdpdGggYm9vdHN0cmFwXG4gIG92ZXJmbG93OiAnaGlkZGVuJ1xufSwgIW93bmVyU3RhdGUud2l0aExhYmVsICYmIHtcbiAgcGFkZGluZzogMCxcbiAgbGluZUhlaWdodDogJzExcHgnLFxuICAvLyBzeW5jIHdpdGggYGhlaWdodGAgaW4gYGxlZ2VuZGAgc3R5bGVzXG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnd2lkdGgnLCB7XG4gICAgZHVyYXRpb246IDE1MCxcbiAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0XG4gIH0pXG59LCBvd25lclN0YXRlLndpdGhMYWJlbCAmJiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdibG9jaycsXG4gIC8vIEZpeCBjb25mbGljdCB3aXRoIG5vcm1hbGl6ZS5jc3MgYW5kIHNhbml0aXplLmNzc1xuICBwYWRkaW5nOiAwLFxuICBoZWlnaHQ6IDExLFxuICAvLyBzeW5jIHdpdGggYGxpbmVIZWlnaHRgIGluIGBsZWdlbmRgIHN0eWxlc1xuICBmb250U2l6ZTogJzAuNzVlbScsXG4gIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICBtYXhXaWR0aDogMC4wMSxcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdtYXgtd2lkdGgnLCB7XG4gICAgZHVyYXRpb246IDUwLFxuICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VPdXRcbiAgfSksXG4gIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAnJiA+IHNwYW4nOiB7XG4gICAgcGFkZGluZ0xlZnQ6IDUsXG4gICAgcGFkZGluZ1JpZ2h0OiA1LFxuICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgIG9wYWNpdHk6IDAsXG4gICAgdmlzaWJpbGl0eTogJ3Zpc2libGUnXG4gIH1cbn0sIG93bmVyU3RhdGUubm90Y2hlZCAmJiB7XG4gIG1heFdpZHRoOiAnMTAwJScsXG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnbWF4LXdpZHRoJywge1xuICAgIGR1cmF0aW9uOiAxMDAsXG4gICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dCxcbiAgICBkZWxheTogNTBcbiAgfSlcbn0pKSk7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTm90Y2hlZE91dGxpbmUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgbGFiZWwsXG4gICAgICBub3RjaGVkXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHdpdGhMYWJlbCA9IGxhYmVsICE9IG51bGwgJiYgbGFiZWwgIT09ICcnO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgbm90Y2hlZCxcbiAgICB3aXRoTGFiZWxcbiAgfSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChOb3RjaGVkT3V0bGluZVJvb3QsIF9leHRlbmRzKHtcbiAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChOb3RjaGVkT3V0bGluZUxlZ2VuZCwge1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNoaWxkcmVuOiB3aXRoTGFiZWwgPyAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgICAgICBjaGlsZHJlbjogbGFiZWxcbiAgICAgIH0pIDogLy8gbm90cmFuc2xhdGUgbmVlZGVkIHdoaWxlIEdvb2dsZSBUcmFuc2xhdGUgd2lsbCBub3QgZml4IHplcm8td2lkdGggc3BhY2UgaXNzdWVcbiAgICAgIF9zcGFuIHx8IChfc3BhbiA9IC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJub3RyYW5zbGF0ZVwiLFxuICAgICAgICBjaGlsZHJlbjogXCJcXHUyMDBCXCJcbiAgICAgIH0pKVxuICAgIH0pXG4gIH0pKTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE5vdGNoZWRPdXRsaW5lLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIFNlZSBbQ1NTIEFQSV0oI2NzcykgYmVsb3cgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgbGFiZWwuXG4gICAqL1xuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBvdXRsaW5lIGlzIG5vdGNoZWQgdG8gYWNjb21tb2RhdGUgdGhlIGxhYmVsLlxuICAgKi9cbiAgbm90Y2hlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0XG59IDogdm9pZCAwOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuaW1wb3J0IHsgaW5wdXRCYXNlQ2xhc3NlcyB9IGZyb20gJy4uL0lucHV0QmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0bGluZWRJbnB1dFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpT3V0bGluZWRJbnB1dCcsIHNsb3QpO1xufVxuY29uc3Qgb3V0bGluZWRJbnB1dENsYXNzZXMgPSBfZXh0ZW5kcyh7fSwgaW5wdXRCYXNlQ2xhc3NlcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpT3V0bGluZWRJbnB1dCcsIFsncm9vdCcsICdub3RjaGVkT3V0bGluZScsICdpbnB1dCddKSk7XG5leHBvcnQgZGVmYXVsdCBvdXRsaW5lZElucHV0Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjb21wb25lbnRzXCIsIFwiZnVsbFdpZHRoXCIsIFwiaW5wdXRDb21wb25lbnRcIiwgXCJsYWJlbFwiLCBcIm11bHRpbGluZVwiLCBcIm5vdGNoZWRcIiwgXCJzbG90c1wiLCBcInR5cGVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgcmVmVHlwZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IE5vdGNoZWRPdXRsaW5lIGZyb20gJy4vTm90Y2hlZE91dGxpbmUnO1xuaW1wb3J0IHVzZUZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sJztcbmltcG9ydCBmb3JtQ29udHJvbFN0YXRlIGZyb20gJy4uL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sU3RhdGUnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCBvdXRsaW5lZElucHV0Q2xhc3NlcywgeyBnZXRPdXRsaW5lZElucHV0VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9vdXRsaW5lZElucHV0Q2xhc3Nlcyc7XG5pbXBvcnQgSW5wdXRCYXNlLCB7IHJvb3RPdmVycmlkZXNSZXNvbHZlciBhcyBpbnB1dEJhc2VSb290T3ZlcnJpZGVzUmVzb2x2ZXIsIGlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIgYXMgaW5wdXRCYXNlSW5wdXRPdmVycmlkZXNSZXNvbHZlciwgSW5wdXRCYXNlUm9vdCwgSW5wdXRCYXNlQ29tcG9uZW50IGFzIElucHV0QmFzZUlucHV0IH0gZnJvbSAnLi4vSW5wdXRCYXNlL0lucHV0QmFzZSc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCddLFxuICAgIG5vdGNoZWRPdXRsaW5lOiBbJ25vdGNoZWRPdXRsaW5lJ10sXG4gICAgaW5wdXQ6IFsnaW5wdXQnXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0T3V0bGluZWRJbnB1dFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgY2xhc3NlcywgY29tcG9zZWRDbGFzc2VzKTtcbn07XG5jb25zdCBPdXRsaW5lZElucHV0Um9vdCA9IHN0eWxlZChJbnB1dEJhc2VSb290LCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlPdXRsaW5lZElucHV0JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyXG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICBjb25zdCBib3JkZXJDb2xvciA9IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/ICdyZ2JhKDAsIDAsIDAsIDAuMjMpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjMpJztcbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICBib3JkZXJSYWRpdXM6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFwZS5ib3JkZXJSYWRpdXMsXG4gICAgW2AmOmhvdmVyIC4ke291dGxpbmVkSW5wdXRDbGFzc2VzLm5vdGNoZWRPdXRsaW5lfWBdOiB7XG4gICAgICBib3JkZXJDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5wcmltYXJ5XG4gICAgfSxcbiAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgIFtgJjpob3ZlciAuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5ub3RjaGVkT3V0bGluZX1gXToge1xuICAgICAgICBib3JkZXJDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLmNvbW1vbi5vbkJhY2tncm91bmRDaGFubmVsfSAvIDAuMjMpYCA6IGJvcmRlckNvbG9yXG4gICAgICB9XG4gICAgfSxcbiAgICBbYCYuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5mb2N1c2VkfSAuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5ub3RjaGVkT3V0bGluZX1gXToge1xuICAgICAgYm9yZGVyQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sXG4gICAgICBib3JkZXJXaWR0aDogMlxuICAgIH0sXG4gICAgW2AmLiR7b3V0bGluZWRJbnB1dENsYXNzZXMuZXJyb3J9IC4ke291dGxpbmVkSW5wdXRDbGFzc2VzLm5vdGNoZWRPdXRsaW5lfWBdOiB7XG4gICAgICBib3JkZXJDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZXJyb3IubWFpblxuICAgIH0sXG4gICAgW2AmLiR7b3V0bGluZWRJbnB1dENsYXNzZXMuZGlzYWJsZWR9IC4ke291dGxpbmVkSW5wdXRDbGFzc2VzLm5vdGNoZWRPdXRsaW5lfWBdOiB7XG4gICAgICBib3JkZXJDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkXG4gICAgfVxuICB9LCBvd25lclN0YXRlLnN0YXJ0QWRvcm5tZW50ICYmIHtcbiAgICBwYWRkaW5nTGVmdDogMTRcbiAgfSwgb3duZXJTdGF0ZS5lbmRBZG9ybm1lbnQgJiYge1xuICAgIHBhZGRpbmdSaWdodDogMTRcbiAgfSwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYgX2V4dGVuZHMoe1xuICAgIHBhZGRpbmc6ICcxNi41cHggMTRweCdcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgICBwYWRkaW5nOiAnOC41cHggMTRweCdcbiAgfSkpO1xufSk7XG5jb25zdCBOb3RjaGVkT3V0bGluZVJvb3QgPSBzdHlsZWQoTm90Y2hlZE91dGxpbmUsIHtcbiAgbmFtZTogJ011aU91dGxpbmVkSW5wdXQnLFxuICBzbG90OiAnTm90Y2hlZE91dGxpbmUnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5ub3RjaGVkT3V0bGluZVxufSkoKHtcbiAgdGhlbWVcbn0pID0+IHtcbiAgY29uc3QgYm9yZGVyQ29sb3IgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyAncmdiYSgwLCAwLCAwLCAwLjIzKScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIzKSc7XG4gIHJldHVybiB7XG4gICAgYm9yZGVyQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5jb21tb24ub25CYWNrZ3JvdW5kQ2hhbm5lbH0gLyAwLjIzKWAgOiBib3JkZXJDb2xvclxuICB9O1xufSk7XG5jb25zdCBPdXRsaW5lZElucHV0SW5wdXQgPSBzdHlsZWQoSW5wdXRCYXNlSW5wdXQsIHtcbiAgbmFtZTogJ011aU91dGxpbmVkSW5wdXQnLFxuICBzbG90OiAnSW5wdXQnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogaW5wdXRCYXNlSW5wdXRPdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgcGFkZGluZzogJzE2LjVweCAxNHB4J1xufSwgIXRoZW1lLnZhcnMgJiYge1xuICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgIFdlYmtpdEJveFNoYWRvdzogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gbnVsbCA6ICcwIDAgMCAxMDBweCAjMjY2Nzk4IGluc2V0JyxcbiAgICBXZWJraXRUZXh0RmlsbENvbG9yOiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyBudWxsIDogJyNmZmYnLFxuICAgIGNhcmV0Q29sb3I6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IG51bGwgOiAnI2ZmZicsXG4gICAgYm9yZGVyUmFkaXVzOiAnaW5oZXJpdCdcbiAgfVxufSwgdGhlbWUudmFycyAmJiB7XG4gICcmOi13ZWJraXQtYXV0b2ZpbGwnOiB7XG4gICAgYm9yZGVyUmFkaXVzOiAnaW5oZXJpdCdcbiAgfSxcbiAgW3RoZW1lLmdldENvbG9yU2NoZW1lU2VsZWN0b3IoJ2RhcmsnKV06IHtcbiAgICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgICAgV2Via2l0Qm94U2hhZG93OiAnMCAwIDAgMTAwcHggIzI2Njc5OCBpbnNldCcsXG4gICAgICBXZWJraXRUZXh0RmlsbENvbG9yOiAnI2ZmZicsXG4gICAgICBjYXJldENvbG9yOiAnI2ZmZidcbiAgICB9XG4gIH1cbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHBhZGRpbmc6ICc4LjVweCAxNHB4J1xufSwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYge1xuICBwYWRkaW5nOiAwXG59LCBvd25lclN0YXRlLnN0YXJ0QWRvcm5tZW50ICYmIHtcbiAgcGFkZGluZ0xlZnQ6IDBcbn0sIG93bmVyU3RhdGUuZW5kQWRvcm5tZW50ICYmIHtcbiAgcGFkZGluZ1JpZ2h0OiAwXG59KSk7XG5jb25zdCBPdXRsaW5lZElucHV0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gT3V0bGluZWRJbnB1dChpblByb3BzLCByZWYpIHtcbiAgdmFyIF9yZWYsIF9zbG90cyRyb290LCBfcmVmMiwgX3Nsb3RzJGlucHV0LCBfUmVhY3QkRnJhZ21lbnQ7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aU91dGxpbmVkSW5wdXQnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjb21wb25lbnRzID0ge30sXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIGlucHV0Q29tcG9uZW50ID0gJ2lucHV0JyxcbiAgICAgIGxhYmVsLFxuICAgICAgbXVsdGlsaW5lID0gZmFsc2UsXG4gICAgICBub3RjaGVkLFxuICAgICAgc2xvdHMgPSB7fSxcbiAgICAgIHR5cGUgPSAndGV4dCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKHByb3BzKTtcbiAgY29uc3QgbXVpRm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbCgpO1xuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsnY29sb3InLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnZm9jdXNlZCcsICdoaWRkZW5MYWJlbCcsICdzaXplJywgJ3JlcXVpcmVkJ11cbiAgfSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcjogZmNzLmNvbG9yIHx8ICdwcmltYXJ5JyxcbiAgICBkaXNhYmxlZDogZmNzLmRpc2FibGVkLFxuICAgIGVycm9yOiBmY3MuZXJyb3IsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWQsXG4gICAgZm9ybUNvbnRyb2w6IG11aUZvcm1Db250cm9sLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBoaWRkZW5MYWJlbDogZmNzLmhpZGRlbkxhYmVsLFxuICAgIG11bHRpbGluZSxcbiAgICBzaXplOiBmY3Muc2l6ZSxcbiAgICB0eXBlXG4gIH0pO1xuICBjb25zdCBSb290U2xvdCA9IChfcmVmID0gKF9zbG90cyRyb290ID0gc2xvdHMucm9vdCkgIT0gbnVsbCA/IF9zbG90cyRyb290IDogY29tcG9uZW50cy5Sb290KSAhPSBudWxsID8gX3JlZiA6IE91dGxpbmVkSW5wdXRSb290O1xuICBjb25zdCBJbnB1dFNsb3QgPSAoX3JlZjIgPSAoX3Nsb3RzJGlucHV0ID0gc2xvdHMuaW5wdXQpICE9IG51bGwgPyBfc2xvdHMkaW5wdXQgOiBjb21wb25lbnRzLklucHV0KSAhPSBudWxsID8gX3JlZjIgOiBPdXRsaW5lZElucHV0SW5wdXQ7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dEJhc2UsIF9leHRlbmRzKHtcbiAgICBzbG90czoge1xuICAgICAgcm9vdDogUm9vdFNsb3QsXG4gICAgICBpbnB1dDogSW5wdXRTbG90XG4gICAgfSxcbiAgICByZW5kZXJTdWZmaXg6IHN0YXRlID0+IC8qI19fUFVSRV9fKi9fanN4KE5vdGNoZWRPdXRsaW5lUm9vdCwge1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5ub3RjaGVkT3V0bGluZSxcbiAgICAgIGxhYmVsOiBsYWJlbCAhPSBudWxsICYmIGxhYmVsICE9PSAnJyAmJiBmY3MucmVxdWlyZWQgPyBfUmVhY3QkRnJhZ21lbnQgfHwgKF9SZWFjdCRGcmFnbWVudCA9IC8qI19fUFVSRV9fKi9fanN4cyhSZWFjdC5GcmFnbWVudCwge1xuICAgICAgICBjaGlsZHJlbjogW2xhYmVsLCBcIlxcdTIwMDlcIiwgJyonXVxuICAgICAgfSkpIDogbGFiZWwsXG4gICAgICBub3RjaGVkOiB0eXBlb2Ygbm90Y2hlZCAhPT0gJ3VuZGVmaW5lZCcgPyBub3RjaGVkIDogQm9vbGVhbihzdGF0ZS5zdGFydEFkb3JubWVudCB8fCBzdGF0ZS5maWxsZWQgfHwgc3RhdGUuZm9jdXNlZClcbiAgICB9KSxcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICBpbnB1dENvbXBvbmVudDogaW5wdXRDb21wb25lbnQsXG4gICAgbXVsdGlsaW5lOiBtdWx0aWxpbmUsXG4gICAgcmVmOiByZWYsXG4gICAgdHlwZTogdHlwZVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IF9leHRlbmRzKHt9LCBjbGFzc2VzLCB7XG4gICAgICBub3RjaGVkT3V0bGluZTogbnVsbFxuICAgIH0pXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gT3V0bGluZWRJbnB1dC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgaGVscHMgdXNlcnMgdG8gZmlsbCBmb3JtcyBmYXN0ZXIsIGVzcGVjaWFsbHkgb24gbW9iaWxlIGRldmljZXMuXG4gICAqIFRoZSBuYW1lIGNhbiBiZSBjb25mdXNpbmcsIGFzIGl0J3MgbW9yZSBsaWtlIGFuIGF1dG9maWxsLlxuICAgKiBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgaXQgW2ZvbGxvd2luZyB0aGUgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybS1jb250cm9sLWluZnJhc3RydWN0dXJlLmh0bWwjYXV0b2ZpbGwpLlxuICAgKi9cbiAgYXV0b0NvbXBsZXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ3ByaW1hcnknYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeSddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RzYCBwcm9wIGluc3RlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIElucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBFbmQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBlbmRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnaW5wdXQnXG4gICAqL1xuICBpbnB1dENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBUaGUgbGFiZWwgb2YgdGhlIGBpbnB1dGAuIEl0IGlzIG9ubHkgdXNlZCBmb3IgbGF5b3V0LiBUaGUgYWN0dWFsIGxhYmVsbGluZ1xuICAgKiBpcyBoYW5kbGVkIGJ5IGBJbnB1dExhYmVsYC5cbiAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcuIFRoaXMgaXMgbm9ybWFsbHkgb2J0YWluZWQgdmlhIGNvbnRleHQgZnJvbVxuICAgKiBGb3JtQ29udHJvbC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ25vbmUnYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnXSksXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1pblJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSBbVGV4dGFyZWFBdXRvc2l6ZV0oL21hdGVyaWFsLXVpL3JlYWN0LXRleHRhcmVhLWF1dG9zaXplLykgZWxlbWVudCBpcyByZW5kZXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpbGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG91dGxpbmUgaXMgbm90Y2hlZCB0byBhY2NvbW1vZGF0ZSB0aGUgbGFiZWwuXG4gICAqL1xuICBub3RjaGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBzaG9ydCBoaW50IGRpc3BsYXllZCBpbiB0aGUgYGlucHV0YCBiZWZvcmUgdGhlIHVzZXIgZW50ZXJzIGEgdmFsdWUuXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEl0IHByZXZlbnRzIHRoZSB1c2VyIGZyb20gY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZFxuICAgKiAobm90IGZyb20gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZmllbGQpLlxuICAgKi9cbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICByb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c2AgcHJvcCwgd2hpY2ggd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFN0YXJ0IGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgc3RhcnRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVHlwZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LiBJdCBzaG91bGQgYmUgW2EgdmFsaWQgSFRNTDUgaW5wdXQgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0Zvcm1fJTNDaW5wdXQlM0VfdHlwZXMpLlxuICAgKiBAZGVmYXVsdCAndGV4dCdcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudCwgcmVxdWlyZWQgZm9yIGEgY29udHJvbGxlZCBjb21wb25lbnQuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueVxufSA6IHZvaWQgMDtcbk91dGxpbmVkSW5wdXQubXVpTmFtZSA9ICdJbnB1dCc7XG5leHBvcnQgZGVmYXVsdCBPdXRsaW5lZElucHV0OyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXBlclV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpUGFwZXInLCBzbG90KTtcbn1cbmNvbnN0IHBhcGVyQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVBhcGVyJywgWydyb290JywgJ3JvdW5kZWQnLCAnb3V0bGluZWQnLCAnZWxldmF0aW9uJywgJ2VsZXZhdGlvbjAnLCAnZWxldmF0aW9uMScsICdlbGV2YXRpb24yJywgJ2VsZXZhdGlvbjMnLCAnZWxldmF0aW9uNCcsICdlbGV2YXRpb241JywgJ2VsZXZhdGlvbjYnLCAnZWxldmF0aW9uNycsICdlbGV2YXRpb244JywgJ2VsZXZhdGlvbjknLCAnZWxldmF0aW9uMTAnLCAnZWxldmF0aW9uMTEnLCAnZWxldmF0aW9uMTInLCAnZWxldmF0aW9uMTMnLCAnZWxldmF0aW9uMTQnLCAnZWxldmF0aW9uMTUnLCAnZWxldmF0aW9uMTYnLCAnZWxldmF0aW9uMTcnLCAnZWxldmF0aW9uMTgnLCAnZWxldmF0aW9uMTknLCAnZWxldmF0aW9uMjAnLCAnZWxldmF0aW9uMjEnLCAnZWxldmF0aW9uMjInLCAnZWxldmF0aW9uMjMnLCAnZWxldmF0aW9uMjQnXSk7XG5leHBvcnQgZGVmYXVsdCBwYXBlckNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZWxldmF0aW9uXCIsIFwic3F1YXJlXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IGNoYWluUHJvcFR5cGVzLCBpbnRlZ2VyUHJvcFR5cGUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IGFscGhhIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCBnZXRPdmVybGF5QWxwaGEgZnJvbSAnLi4vc3R5bGVzL2dldE92ZXJsYXlBbHBoYSc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lJztcbmltcG9ydCB7IGdldFBhcGVyVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9wYXBlckNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBzcXVhcmUsXG4gICAgZWxldmF0aW9uLFxuICAgIHZhcmlhbnQsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgdmFyaWFudCwgIXNxdWFyZSAmJiAncm91bmRlZCcsIHZhcmlhbnQgPT09ICdlbGV2YXRpb24nICYmIGBlbGV2YXRpb24ke2VsZXZhdGlvbn1gXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFBhcGVyVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBQYXBlclJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aVBhcGVyJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdLCAhb3duZXJTdGF0ZS5zcXVhcmUgJiYgc3R5bGVzLnJvdW5kZWQsIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2VsZXZhdGlvbicgJiYgc3R5bGVzW2BlbGV2YXRpb24ke293bmVyU3RhdGUuZWxldmF0aW9ufWBdXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgdmFyIF90aGVtZSR2YXJzJG92ZXJsYXlzO1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYmFja2dyb3VuZC5wYXBlcixcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5wcmltYXJ5LFxuICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnYm94LXNoYWRvdycpXG4gIH0sICFvd25lclN0YXRlLnNxdWFyZSAmJiB7XG4gICAgYm9yZGVyUmFkaXVzOiB0aGVtZS5zaGFwZS5ib3JkZXJSYWRpdXNcbiAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgICBib3JkZXI6IGAxcHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5kaXZpZGVyfWBcbiAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZWxldmF0aW9uJyAmJiBfZXh0ZW5kcyh7XG4gICAgYm94U2hhZG93OiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhZG93c1tvd25lclN0YXRlLmVsZXZhdGlvbl1cbiAgfSwgIXRoZW1lLnZhcnMgJiYgdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnZGFyaycgJiYge1xuICAgIGJhY2tncm91bmRJbWFnZTogYGxpbmVhci1ncmFkaWVudCgke2FscGhhKCcjZmZmJywgZ2V0T3ZlcmxheUFscGhhKG93bmVyU3RhdGUuZWxldmF0aW9uKSl9LCAke2FscGhhKCcjZmZmJywgZ2V0T3ZlcmxheUFscGhhKG93bmVyU3RhdGUuZWxldmF0aW9uKSl9KWBcbiAgfSwgdGhlbWUudmFycyAmJiB7XG4gICAgYmFja2dyb3VuZEltYWdlOiAoX3RoZW1lJHZhcnMkb3ZlcmxheXMgPSB0aGVtZS52YXJzLm92ZXJsYXlzKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHZhcnMkb3ZlcmxheXNbb3duZXJTdGF0ZS5lbGV2YXRpb25dXG4gIH0pKTtcbn0pO1xuY29uc3QgUGFwZXIgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBQYXBlcihpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpUGFwZXInXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICAgIGVsZXZhdGlvbiA9IDEsXG4gICAgICBzcXVhcmUgPSBmYWxzZSxcbiAgICAgIHZhcmlhbnQgPSAnZWxldmF0aW9uJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29tcG9uZW50LFxuICAgIGVsZXZhdGlvbixcbiAgICBzcXVhcmUsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcbiAgICBpZiAodGhlbWUuc2hhZG93c1tlbGV2YXRpb25dID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFRoZSBlbGV2YXRpb24gcHJvdmlkZWQgPFBhcGVyIGVsZXZhdGlvbj17JHtlbGV2YXRpb259fT4gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgdGhlbWUuYCwgYFBsZWFzZSBtYWtlIHN1cmUgdGhhdCBcXGB0aGVtZS5zaGFkb3dzWyR7ZWxldmF0aW9ufV1cXGAgaXMgZGVmaW5lZC5gXS5qb2luKCdcXG4nKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChQYXBlclJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBQYXBlci5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogU2hhZG93IGRlcHRoLCBjb3JyZXNwb25kcyB0byBgZHBgIGluIHRoZSBzcGVjLlxuICAgKiBJdCBhY2NlcHRzIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI0IGluY2x1c2l2ZS5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgZWxldmF0aW9uOiBjaGFpblByb3BUeXBlcyhpbnRlZ2VyUHJvcFR5cGUsIHByb3BzID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBlbGV2YXRpb24sXG4gICAgICB2YXJpYW50XG4gICAgfSA9IHByb3BzO1xuICAgIGlmIChlbGV2YXRpb24gPiAwICYmIHZhcmlhbnQgPT09ICdvdXRsaW5lZCcpIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoYE1VSTogQ29tYmluaW5nIFxcYGVsZXZhdGlvbj17JHtlbGV2YXRpb259fVxcYCB3aXRoIFxcYHZhcmlhbnQ9XCIke3ZhcmlhbnR9XCJcXGAgaGFzIG5vIGVmZmVjdC4gRWl0aGVyIHVzZSBcXGBlbGV2YXRpb249ezB9XFxgIG9yIHVzZSBhIGRpZmZlcmVudCBcXGB2YXJpYW50XFxgLmApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHJvdW5kZWQgY29ybmVycyBhcmUgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzcXVhcmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKiBAZGVmYXVsdCAnZWxldmF0aW9uJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydlbGV2YXRpb24nLCAnb3V0bGluZWQnXSksIFByb3BUeXBlcy5zdHJpbmddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFBhcGVyOyJdLCJuYW1lcyI6WyJnZXRMaW5rVXRpbGl0eUNsYXNzIiwic2xvdCIsImdlbmVyYXRlVXRpbGl0eUNsYXNzIiwiZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyIsImNvbG9yVHJhbnNmb3JtYXRpb25zIiwicHJpbWFyeSIsInRleHRQcmltYXJ5Iiwic2Vjb25kYXJ5IiwidGV4dFNlY29uZGFyeSIsImVycm9yIiwidGhlbWUiLCJvd25lclN0YXRlIiwidHJhbnNmb3JtZWRDb2xvciIsImNvbG9yIiwidHJhbnNmb3JtRGVwcmVjYXRlZENvbG9ycyIsImNoYW5uZWxDb2xvciIsIl9leGNsdWRlZCIsIkxpbmtSb290Iiwic3R5bGVkIiwiVHlwb2dyYXBoeSIsIm5hbWUiLCJvdmVycmlkZXNSZXNvbHZlciIsInByb3BzIiwic3R5bGVzIiwicm9vdCIsImNhcGl0YWxpemUiLCJ1bmRlcmxpbmUiLCJjb21wb25lbnQiLCJidXR0b24iLCJ0ZXh0RGVjb3JhdGlvbiIsInRleHREZWNvcmF0aW9uQ29sb3IiLCJwb3NpdGlvbiIsIldlYmtpdFRhcEhpZ2hsaWdodENvbG9yIiwiYmFja2dyb3VuZENvbG9yIiwib3V0bGluZSIsImJvcmRlciIsIm1hcmdpbiIsImJvcmRlclJhZGl1cyIsInBhZGRpbmciLCJjdXJzb3IiLCJ1c2VyU2VsZWN0IiwidmVydGljYWxBbGlnbiIsIk1vekFwcGVhcmFuY2UiLCJXZWJraXRBcHBlYXJhbmNlIiwiYm9yZGVyU3R5bGUiLCJmb2N1c1Zpc2libGUiLCJpblByb3BzIiwicmVmIiwidXNlVGhlbWVQcm9wcyIsImNsYXNzTmFtZSIsIm9uQmx1ciIsIm9uRm9jdXMiLCJUeXBvZ3JhcGh5Q2xhc3NlcyIsInZhcmlhbnQiLCJzeCIsIm90aGVyIiwiaXNGb2N1c1Zpc2libGVSZWYiLCJoYW5kbGVCbHVyVmlzaWJsZSIsImhhbmRsZUZvY3VzVmlzaWJsZSIsImZvY3VzVmlzaWJsZVJlZiIsInVzZUlzRm9jdXNWaXNpYmxlIiwic2V0Rm9jdXNWaXNpYmxlIiwiaGFuZGxlclJlZiIsInVzZUZvcmtSZWYiLCJjbGFzc2VzIiwic2xvdHMiLCJjb21wb3NlQ2xhc3NlcyIsInVzZVV0aWxpdHlDbGFzc2VzIiwiY2xzeCIsImV2ZW50IiwiY3VycmVudCIsIk9iamVjdCIsImtleXMiLCJpbmNsdWRlcyIsIkFycmF5IiwiaXNBcnJheSIsImdldExpc3RVdGlsaXR5Q2xhc3MiLCJMaXN0Um9vdCIsImRpc2FibGVQYWRkaW5nIiwiZGVuc2UiLCJzdWJoZWFkZXIiLCJsaXN0U3R5bGUiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSIsImNoaWxkcmVuIiwiY29udGV4dCIsIkxpc3RDb250ZXh0IiwiUHJvdmlkZXIiLCJ2YWx1ZSIsImFzIiwiZ2V0TGlzdEl0ZW1VdGlsaXR5Q2xhc3MiLCJnZXRMaXN0SXRlbVNlY29uZGFyeUFjdGlvbkNsYXNzZXNVdGlsaXR5Q2xhc3MiLCJMaXN0SXRlbVNlY29uZGFyeUFjdGlvblJvb3QiLCJkaXNhYmxlR3V0dGVycyIsInJpZ2h0IiwidG9wIiwidHJhbnNmb3JtIiwiTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24iLCJtdWlOYW1lIiwiX2V4Y2x1ZGVkMiIsIkxpc3RJdGVtUm9vdCIsImFsaWduSXRlbXMiLCJhbGlnbkl0ZW1zRmxleFN0YXJ0IiwiZGl2aWRlciIsImd1dHRlcnMiLCJoYXNTZWNvbmRhcnlBY3Rpb24iLCJzZWNvbmRhcnlBY3Rpb24iLCJkaXNwbGF5IiwianVzdGlmeUNvbnRlbnQiLCJ3aWR0aCIsImJveFNpemluZyIsInRleHRBbGlnbiIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0IiwibGlzdEl0ZW1CdXR0b25DbGFzc2VzIiwidmFycyIsInBhbGV0dGUiLCJhY3Rpb24iLCJmb2N1cyIsInNlbGVjdGVkIiwibWFpbkNoYW5uZWwiLCJzZWxlY3RlZE9wYWNpdHkiLCJtYWluIiwiZm9jdXNPcGFjaXR5IiwiZGlzYWJsZWQiLCJvcGFjaXR5IiwiZGlzYWJsZWRPcGFjaXR5IiwiYm9yZGVyQm90dG9tIiwiYmFja2dyb3VuZENsaXAiLCJ0cmFuc2l0aW9uIiwidHJhbnNpdGlvbnMiLCJjcmVhdGUiLCJkdXJhdGlvbiIsInNob3J0ZXN0IiwiaG92ZXIiLCJob3Zlck9wYWNpdHkiLCJMaXN0SXRlbUNvbnRhaW5lciIsImNvbnRhaW5lciIsImF1dG9Gb2N1cyIsImNoaWxkcmVuUHJvcCIsImNvbXBvbmVudFByb3AiLCJjb21wb25lbnRzIiwiY29tcG9uZW50c1Byb3BzIiwiQ29udGFpbmVyQ29tcG9uZW50IiwiQ29udGFpbmVyUHJvcHMiLCJDb250YWluZXJDbGFzc05hbWUiLCJmb2N1c1Zpc2libGVDbGFzc05hbWUiLCJzbG90UHJvcHMiLCJjaGlsZENvbnRleHQiLCJsaXN0SXRlbVJlZiIsInVzZUVuaGFuY2VkRWZmZWN0IiwidG9BcnJheSIsImxlbmd0aCIsImlzTXVpRWxlbWVudCIsImhhbmRsZVJlZiIsIlJvb3QiLCJyb290UHJvcHMiLCJjb21wb25lbnRQcm9wcyIsIkNvbXBvbmVudCIsIkJ1dHRvbkJhc2UiLCJpc0hvc3RDb21wb25lbnQiLCJwb3AiLCJMaXN0SXRlbUJ1dHRvblJvb3QiLCJzaG91bGRGb3J3YXJkUHJvcCIsInByb3AiLCJmbGV4R3JvdyIsIm1pbldpZHRoIiwiY29tcG9zZWRDbGFzc2VzIiwiaHJlZiIsInRvIiwiZ2V0TGlzdEl0ZW1CdXR0b25VdGlsaXR5Q2xhc3MiLCJuZXh0SXRlbSIsImxpc3QiLCJpdGVtIiwiZGlzYWJsZUxpc3RXcmFwIiwiZmlyc3RDaGlsZCIsIm5leHRFbGVtZW50U2libGluZyIsInByZXZpb3VzSXRlbSIsImxhc3RDaGlsZCIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJ0ZXh0Q3JpdGVyaWFNYXRjaGVzIiwibmV4dEZvY3VzIiwidGV4dENyaXRlcmlhIiwidW5kZWZpbmVkIiwidGV4dCIsImlubmVyVGV4dCIsInRleHRDb250ZW50IiwidHJpbSIsInRvTG93ZXJDYXNlIiwicmVwZWF0aW5nIiwiaW5kZXhPZiIsImpvaW4iLCJtb3ZlRm9jdXMiLCJjdXJyZW50Rm9jdXMiLCJkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlIiwidHJhdmVyc2FsRnVuY3Rpb24iLCJ3cmFwcGVkT25jZSIsIm5leHRGb2N1c0Rpc2FibGVkIiwiZ2V0QXR0cmlidXRlIiwiaGFzQXR0cmlidXRlIiwiYWN0aW9ucyIsImF1dG9Gb2N1c0l0ZW0iLCJvbktleURvd24iLCJsaXN0UmVmIiwidGV4dENyaXRlcmlhUmVmIiwicHJldmlvdXNLZXlNYXRjaGVkIiwibGFzdFRpbWUiLCJhZGp1c3RTdHlsZUZvclNjcm9sbGJhciIsImNvbnRhaW5lckVsZW1lbnQiLCJub0V4cGxpY2l0V2lkdGgiLCJzdHlsZSIsImNsaWVudEhlaWdodCIsInNjcm9sbGJhclNpemUiLCJnZXRTY3JvbGxiYXJTaXplIiwib3duZXJEb2N1bWVudCIsImRpcmVjdGlvbiIsImFjdGl2ZUl0ZW1JbmRleCIsImZvckVhY2giLCJjaGlsZCIsImluZGV4IiwibXVpU2tpcExpc3RIaWdobGlnaHQiLCJ0eXBlIiwiaXRlbXMiLCJtYXAiLCJuZXdDaGlsZFByb3BzIiwidGFiSW5kZXgiLCJMaXN0Iiwicm9sZSIsImtleSIsImFjdGl2ZUVsZW1lbnQiLCJwcmV2ZW50RGVmYXVsdCIsImNyaXRlcmlhIiwibG93ZXJLZXkiLCJjdXJyVGltZSIsInBlcmZvcm1hbmNlIiwibm93IiwicHVzaCIsImtlZXBGb2N1c09uQ3VycmVudCIsImdldE1vZGFsVXRpbGl0eUNsYXNzIiwiTW9kYWxSb290Iiwib3BlbiIsImV4aXRlZCIsImhpZGRlbiIsInpJbmRleCIsIm1vZGFsIiwiYm90dG9tIiwibGVmdCIsInZpc2liaWxpdHkiLCJNb2RhbEJhY2tkcm9wIiwiQmFja2Ryb3AiLCJiYWNrZHJvcCIsIl9yZWYiLCJfc2xvdHMkcm9vdCIsIl9yZWYyIiwiX3Nsb3RzJGJhY2tkcm9wIiwiX3Nsb3RQcm9wcyRyb290IiwiX3Nsb3RQcm9wcyRiYWNrZHJvcCIsIkJhY2tkcm9wQ29tcG9uZW50IiwiQmFja2Ryb3BQcm9wcyIsImNsb3NlQWZ0ZXJUcmFuc2l0aW9uIiwiZGlzYWJsZUF1dG9Gb2N1cyIsImRpc2FibGVFbmZvcmNlRm9jdXMiLCJkaXNhYmxlRXNjYXBlS2V5RG93biIsImRpc2FibGVQb3J0YWwiLCJkaXNhYmxlUmVzdG9yZUZvY3VzIiwiZGlzYWJsZVNjcm9sbExvY2siLCJoaWRlQmFja2Ryb3AiLCJrZWVwTW91bnRlZCIsIm9uQmFja2Ryb3BDbGljayIsInByb3BzV2l0aERlZmF1bHRzIiwiZ2V0Um9vdFByb3BzIiwiZ2V0QmFja2Ryb3BQcm9wcyIsImdldFRyYW5zaXRpb25Qcm9wcyIsInBvcnRhbFJlZiIsImlzVG9wTW9kYWwiLCJoYXNUcmFuc2l0aW9uIiwidXNlTW9kYWwiLCJyb290UmVmIiwiY2hpbGRQcm9wcyIsIm9uRW50ZXIiLCJvbkV4aXRlZCIsIlJvb3RTbG90IiwiQmFja2Ryb3BTbG90Iiwicm9vdFNsb3RQcm9wcyIsImJhY2tkcm9wU2xvdFByb3BzIiwidXNlU2xvdFByb3BzIiwiZWxlbWVudFR5cGUiLCJleHRlcm5hbFNsb3RQcm9wcyIsImV4dGVybmFsRm9yd2FyZGVkUHJvcHMiLCJnZXRTbG90UHJvcHMiLCJhZGRpdGlvbmFsUHJvcHMiLCJiYWNrZHJvcFByb3BzIiwib3RoZXJIYW5kbGVycyIsIm9uQ2xpY2siLCJlIiwiUG9ydGFsIiwiRm9jdXNUcmFwIiwiaXNFbmFibGVkIiwiZ2V0UG9wb3ZlclV0aWxpdHlDbGFzcyIsIl9leGNsdWRlZDMiLCJnZXRPZmZzZXRUb3AiLCJyZWN0IiwidmVydGljYWwiLCJvZmZzZXQiLCJoZWlnaHQiLCJnZXRPZmZzZXRMZWZ0IiwiaG9yaXpvbnRhbCIsImdldFRyYW5zZm9ybU9yaWdpblZhbHVlIiwidHJhbnNmb3JtT3JpZ2luIiwibiIsInJlc29sdmVBbmNob3JFbCIsImFuY2hvckVsIiwiUG9wb3ZlclJvb3QiLCJQb3BvdmVyUGFwZXIiLCJQYXBlciIsInBhcGVyIiwib3ZlcmZsb3dZIiwib3ZlcmZsb3dYIiwibWluSGVpZ2h0IiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJfc2xvdFByb3BzJHBhcGVyIiwiX3Nsb3RzJHBhcGVyIiwiYW5jaG9yT3JpZ2luIiwiYW5jaG9yUG9zaXRpb24iLCJhbmNob3JSZWZlcmVuY2UiLCJjb250YWluZXJQcm9wIiwiZWxldmF0aW9uIiwibWFyZ2luVGhyZXNob2xkIiwiUGFwZXJQcm9wcyIsIlBhcGVyUHJvcHNQcm9wIiwiVHJhbnNpdGlvbkNvbXBvbmVudCIsIkdyb3ciLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJ0cmFuc2l0aW9uRHVyYXRpb25Qcm9wIiwiVHJhbnNpdGlvblByb3BzIiwib25FbnRlcmluZyIsImV4dGVybmFsUGFwZXJTbG90UHJvcHMiLCJwYXBlclJlZiIsImhhbmRsZVBhcGVyUmVmIiwiZ2V0QW5jaG9yT2Zmc2V0IiwicmVzb2x2ZWRBbmNob3JFbCIsImFuY2hvclJlY3QiLCJub2RlVHlwZSIsImJvZHkiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJnZXRUcmFuc2Zvcm1PcmlnaW4iLCJlbGVtUmVjdCIsImdldFBvc2l0aW9uaW5nU3R5bGUiLCJlbGVtZW50Iiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJlbGVtVHJhbnNmb3JtT3JpZ2luIiwiYW5jaG9yT2Zmc2V0IiwiY29udGFpbmVyV2luZG93Iiwib3duZXJXaW5kb3ciLCJoZWlnaHRUaHJlc2hvbGQiLCJpbm5lckhlaWdodCIsIndpZHRoVGhyZXNob2xkIiwiaW5uZXJXaWR0aCIsImRpZmYiLCJNYXRoIiwicm91bmQiLCJpc1Bvc2l0aW9uZWQiLCJzZXRJc1Bvc2l0aW9uZWQiLCJzZXRQb3NpdGlvbmluZ1N0eWxlcyIsInBvc2l0aW9uaW5nIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ1cGRhdGVQb3NpdGlvbiIsImhhbmRsZVJlc2l6ZSIsImRlYm91bmNlIiwiY2xlYXIiLCJtdWlTdXBwb3J0QXV0byIsIlBhcGVyU2xvdCIsInBhcGVyUHJvcHMiLCJfdXNlU2xvdFByb3BzIiwiaW52aXNpYmxlIiwicm9vdFNsb3RQcm9wc1Byb3AiLCJhcHBlYXIiLCJpbiIsImlzQXBwZWFyaW5nIiwidGltZW91dCIsImdldE1lbnVVdGlsaXR5Q2xhc3MiLCJSVExfT1JJR0lOIiwiTFRSX09SSUdJTiIsIk1lbnVSb290IiwiTWVudVBhcGVyIiwiV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmciLCJNZW51TWVudUxpc3QiLCJkaXNhYmxlQXV0b0ZvY3VzSXRlbSIsIk1lbnVMaXN0UHJvcHMiLCJvbkNsb3NlIiwiUG9wb3ZlckNsYXNzZXMiLCJ1c2VUaGVtZSIsImlzUnRsIiwibWVudUxpc3RBY3Rpb25zUmVmIiwicGFwZXJFeHRlcm5hbFNsb3RQcm9wcyIsInBhcGVyU2xvdFByb3BzIiwiZ2V0TWVudUl0ZW1VdGlsaXR5Q2xhc3MiLCJNZW51SXRlbVJvb3QiLCJ0eXBvZ3JhcGh5IiwiYm9keTEiLCJ3aGl0ZVNwYWNlIiwiZGl2aWRlckNsYXNzZXMiLCJtYXJnaW5Ub3AiLCJzcGFjaW5nIiwibWFyZ2luQm90dG9tIiwiaW5zZXQiLCJtYXJnaW5MZWZ0IiwiYnJlYWtwb2ludHMiLCJ1cCIsImJvZHkyIiwiZm9udFNpemUiLCJ0YWJJbmRleFByb3AiLCJtZW51SXRlbVJlZiIsImdldE5hdGl2ZVNlbGVjdFV0aWxpdHlDbGFzc2VzIiwibmF0aXZlU2VsZWN0U2VsZWN0U3R5bGVzIiwiY29tbW9uIiwib25CYWNrZ3JvdW5kQ2hhbm5lbCIsIm1vZGUiLCJiYWNrZ3JvdW5kIiwic2hhcGUiLCJOYXRpdmVTZWxlY3RTZWxlY3QiLCJzZWxlY3QiLCJtdWx0aXBsZSIsIm5hdGl2ZVNlbGVjdEljb25TdHlsZXMiLCJwb2ludGVyRXZlbnRzIiwiYWN0aXZlIiwiTmF0aXZlU2VsZWN0SWNvbiIsImljb24iLCJpY29uT3BlbiIsIkljb25Db21wb25lbnQiLCJpbnB1dFJlZiIsIl9zcGFuIiwiTm90Y2hlZE91dGxpbmVSb290IiwiYm9yZGVyV2lkdGgiLCJvdmVyZmxvdyIsIk5vdGNoZWRPdXRsaW5lTGVnZW5kIiwiZmxvYXQiLCJ3aXRoTGFiZWwiLCJsaW5lSGVpZ2h0IiwiZWFzaW5nIiwiZWFzZU91dCIsIm5vdGNoZWQiLCJkZWxheSIsImdldE91dGxpbmVkSW5wdXRVdGlsaXR5Q2xhc3MiLCJpbnB1dEJhc2VDbGFzc2VzIiwiT3V0bGluZWRJbnB1dFJvb3QiLCJJbnB1dEJhc2UiLCJib3JkZXJDb2xvciIsIm5vdGNoZWRPdXRsaW5lIiwiZm9jdXNlZCIsInN0YXJ0QWRvcm5tZW50IiwiZW5kQWRvcm5tZW50IiwibXVsdGlsaW5lIiwic2l6ZSIsImxhYmVsIiwiT3V0bGluZWRJbnB1dElucHV0IiwiV2Via2l0Qm94U2hhZG93IiwiV2Via2l0VGV4dEZpbGxDb2xvciIsImNhcmV0Q29sb3IiLCJnZXRDb2xvclNjaGVtZVNlbGVjdG9yIiwiT3V0bGluZWRJbnB1dCIsIl9zbG90cyRpbnB1dCIsIl9SZWFjdCRGcmFnbWVudCIsImZ1bGxXaWR0aCIsImlucHV0Q29tcG9uZW50IiwiaW5wdXQiLCJtdWlGb3JtQ29udHJvbCIsInVzZUZvcm1Db250cm9sIiwiZmNzIiwiZm9ybUNvbnRyb2xTdGF0ZSIsInN0YXRlcyIsImZvcm1Db250cm9sIiwiaGlkZGVuTGFiZWwiLCJJbnB1dFNsb3QiLCJJbnB1dCIsInJlbmRlclN1ZmZpeCIsInN0YXRlIiwicmVxdWlyZWQiLCJCb29sZWFuIiwiZmlsbGVkIiwiZ2V0UGFwZXJVdGlsaXR5Q2xhc3MiLCJQYXBlclJvb3QiLCJzcXVhcmUiLCJyb3VuZGVkIiwiX3RoZW1lJHZhcnMkb3ZlcmxheXMiLCJib3hTaGFkb3ciLCJzaGFkb3dzIiwiYmFja2dyb3VuZEltYWdlIiwiZ2V0T3ZlcmxheUFscGhhIiwib3ZlcmxheXMiXSwic291cmNlUm9vdCI6IiJ9