"use strict";(self.webpackChunksrsrfl_react=self.webpackChunksrsrfl_react||[]).push([[490],{3584:(e,t,o)=>{o.d(t,{Z:()=>c});var r=o(1354),n=o(7078),a=o(9617),i=o(606);const s=(0,o(1588).Z)("MuiBox",["root"]),l=(0,a.Z)(),c=(0,r.Z)({themeId:i.Z,defaultTheme:l,defaultClassName:s.root,generateClassName:n.Z.generate})},1433:(e,t,o)=>{o.d(t,{Z:()=>$});var r=o(7462),n=o(3366),a=o(7294),i=(o(9864),o(512)),s=o(4780),l=o(4391),c=o(948),d=o(1657),u=o(2658),p=o(1796),h=o(407),m=o(539),v=o(5893);const g=["slots","slotProps"],f=(0,c.ZP)(m.Z)((({theme:e})=>(0,r.Z)({display:"flex",marginLeft:`calc(${e.spacing(1)} * 0.5)`,marginRight:`calc(${e.spacing(1)} * 0.5)`},"light"===e.palette.mode?{backgroundColor:e.palette.grey[100],color:e.palette.grey[700]}:{backgroundColor:e.palette.grey[700],color:e.palette.grey[100]},{borderRadius:2,"&:hover, &:focus":(0,r.Z)({},"light"===e.palette.mode?{backgroundColor:e.palette.grey[200]}:{backgroundColor:e.palette.grey[600]}),"&:active":(0,r.Z)({boxShadow:e.shadows[0]},"light"===e.palette.mode?{backgroundColor:(0,p._4)(e.palette.grey[200],.12)}:{backgroundColor:(0,p._4)(e.palette.grey[600],.12)})}))),b=(0,c.ZP)(h.Z)({width:24,height:16}),x=function(e){const{slots:t={},slotProps:o={}}=e,a=(0,n.Z)(e,g),i=e;return(0,v.jsx)("li",{children:(0,v.jsx)(f,(0,r.Z)({focusRipple:!0},a,{ownerState:i,children:(0,v.jsx)(b,(0,r.Z)({as:t.CollapsedIcon,ownerState:i},o.collapsedIcon))}))})};var y=o(1588),Z=o(4867);function S(e){return(0,Z.Z)("MuiBreadcrumbs",e)}const C=(0,y.Z)("MuiBreadcrumbs",["root","ol","li","separator"]),k=["children","className","component","slots","slotProps","expandText","itemsAfterCollapse","itemsBeforeCollapse","maxItems","separator"],w=(0,c.ZP)(u.Z,{name:"MuiBreadcrumbs",slot:"Root",overridesResolver:(e,t)=>[{[`& .${C.li}`]:t.li},t.root]})({}),R=(0,c.ZP)("ol",{name:"MuiBreadcrumbs",slot:"Ol",overridesResolver:(e,t)=>t.ol})({display:"flex",flexWrap:"wrap",alignItems:"center",padding:0,margin:0,listStyle:"none"}),z=(0,c.ZP)("li",{name:"MuiBreadcrumbs",slot:"Separator",overridesResolver:(e,t)=>t.separator})({display:"flex",userSelect:"none",marginLeft:8,marginRight:8});function M(e,t,o,r){return e.reduce(((n,a,i)=>(i{const{classes:t}=e;return(0,s.Z)({root:["root"],li:["li"],ol:["ol"],separator:["separator"]},S,t)})(P),E=(0,l.y)({elementType:h.CollapsedIcon,externalSlotProps:m.collapsedIcon,ownerState:P}),T=a.useRef(null),B=a.Children.toArray(c).filter((e=>a.isValidElement(e))).map(((e,t)=>(0,v.jsx)("li",{className:I.li,children:e},`child-${t}`)));return(0,v.jsx)(w,(0,r.Z)({ref:t,component:p,color:"text.secondary",className:(0,i.Z)(I.root,u),ownerState:P},C,{children:(0,v.jsx)(R,{className:I.ol,ref:T,ownerState:P,children:M(z||y&&B.length<=y?B:(e=>b+f>=e.length?e:[...e.slice(0,b),(0,v.jsx)(x,{"aria-label":g,slots:{CollapsedIcon:h.CollapsedIcon},slotProps:{collapsedIcon:E},onClick:()=>{$(!0);const e=T.current.querySelector("a[href],button,[tabindex]");e&&e.focus()}},"ellipsis"),...e.slice(e.length-f,e.length)])(B),I.separator,Z,P)})}))}))},2574:(e,t,o)=>{o.d(t,{Z:()=>R});var r=o(3366),n=o(7462),a=o(7294),i=o(512),s=o(7925),l=o(4780),c=o(1796),d=o(948),u=o(1657),p=o(539),h=o(8216),m=o(1588),v=o(4867);function g(e){return(0,v.Z)("MuiButton",e)}const f=(0,m.Z)("MuiButton",["root","text","textInherit","textPrimary","textSecondary","textSuccess","textError","textInfo","textWarning","outlined","outlinedInherit","outlinedPrimary","outlinedSecondary","outlinedSuccess","outlinedError","outlinedInfo","outlinedWarning","contained","containedInherit","containedPrimary","containedSecondary","containedSuccess","containedError","containedInfo","containedWarning","disableElevation","focusVisible","disabled","colorInherit","textSizeSmall","textSizeMedium","textSizeLarge","outlinedSizeSmall","outlinedSizeMedium","outlinedSizeLarge","containedSizeSmall","containedSizeMedium","containedSizeLarge","sizeMedium","sizeSmall","sizeLarge","fullWidth","startIcon","endIcon","iconSizeSmall","iconSizeMedium","iconSizeLarge"]),b=a.createContext({}),x=a.createContext(void 0);var y=o(5893);const Z=["children","color","component","className","disabled","disableElevation","disableFocusRipple","endIcon","focusVisibleClassName","fullWidth","size","startIcon","type","variant"],S=e=>(0,n.Z)({},"small"===e.size&&{"& > *:nth-of-type(1)":{fontSize:18}},"medium"===e.size&&{"& > *:nth-of-type(1)":{fontSize:20}},"large"===e.size&&{"& > *:nth-of-type(1)":{fontSize:22}}),C=(0,d.ZP)(p.Z,{shouldForwardProp:e=>(0,d.FO)(e)||"classes"===e,name:"MuiButton",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,t[o.variant],t[`${o.variant}${(0,h.Z)(o.color)}`],t[`size${(0,h.Z)(o.size)}`],t[`${o.variant}Size${(0,h.Z)(o.size)}`],"inherit"===o.color&&t.colorInherit,o.disableElevation&&t.disableElevation,o.fullWidth&&t.fullWidth]}})((({theme:e,ownerState:t})=>{var o,r;const a="light"===e.palette.mode?e.palette.grey[300]:e.palette.grey[800],i="light"===e.palette.mode?e.palette.grey.A100:e.palette.grey[700];return(0,n.Z)({},e.typography.button,{minWidth:64,padding:"6px 16px",borderRadius:(e.vars||e).shape.borderRadius,transition:e.transitions.create(["background-color","box-shadow","border-color","color"],{duration:e.transitions.duration.short}),"&:hover":(0,n.Z)({textDecoration:"none",backgroundColor:e.vars?`rgba(${e.vars.palette.text.primaryChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,c.Fq)(e.palette.text.primary,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"text"===t.variant&&"inherit"!==t.color&&{backgroundColor:e.vars?`rgba(${e.vars.palette[t.color].mainChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,c.Fq)(e.palette[t.color].main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"outlined"===t.variant&&"inherit"!==t.color&&{border:`1px solid ${(e.vars||e).palette[t.color].main}`,backgroundColor:e.vars?`rgba(${e.vars.palette[t.color].mainChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,c.Fq)(e.palette[t.color].main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"contained"===t.variant&&{backgroundColor:e.vars?e.vars.palette.Button.inheritContainedHoverBg:i,boxShadow:(e.vars||e).shadows[4],"@media (hover: none)":{boxShadow:(e.vars||e).shadows[2],backgroundColor:(e.vars||e).palette.grey[300]}},"contained"===t.variant&&"inherit"!==t.color&&{backgroundColor:(e.vars||e).palette[t.color].dark,"@media (hover: none)":{backgroundColor:(e.vars||e).palette[t.color].main}}),"&:active":(0,n.Z)({},"contained"===t.variant&&{boxShadow:(e.vars||e).shadows[8]}),[`&.${f.focusVisible}`]:(0,n.Z)({},"contained"===t.variant&&{boxShadow:(e.vars||e).shadows[6]}),[`&.${f.disabled}`]:(0,n.Z)({color:(e.vars||e).palette.action.disabled},"outlined"===t.variant&&{border:`1px solid ${(e.vars||e).palette.action.disabledBackground}`},"contained"===t.variant&&{color:(e.vars||e).palette.action.disabled,boxShadow:(e.vars||e).shadows[0],backgroundColor:(e.vars||e).palette.action.disabledBackground})},"text"===t.variant&&{padding:"6px 8px"},"text"===t.variant&&"inherit"!==t.color&&{color:(e.vars||e).palette[t.color].main},"outlined"===t.variant&&{padding:"5px 15px",border:"1px solid currentColor"},"outlined"===t.variant&&"inherit"!==t.color&&{color:(e.vars||e).palette[t.color].main,border:e.vars?`1px solid rgba(${e.vars.palette[t.color].mainChannel} / 0.5)`:`1px solid ${(0,c.Fq)(e.palette[t.color].main,.5)}`},"contained"===t.variant&&{color:e.vars?e.vars.palette.text.primary:null==(o=(r=e.palette).getContrastText)?void 0:o.call(r,e.palette.grey[300]),backgroundColor:e.vars?e.vars.palette.Button.inheritContainedBg:a,boxShadow:(e.vars||e).shadows[2]},"contained"===t.variant&&"inherit"!==t.color&&{color:(e.vars||e).palette[t.color].contrastText,backgroundColor:(e.vars||e).palette[t.color].main},"inherit"===t.color&&{color:"inherit",borderColor:"currentColor"},"small"===t.size&&"text"===t.variant&&{padding:"4px 5px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"text"===t.variant&&{padding:"8px 11px",fontSize:e.typography.pxToRem(15)},"small"===t.size&&"outlined"===t.variant&&{padding:"3px 9px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"outlined"===t.variant&&{padding:"7px 21px",fontSize:e.typography.pxToRem(15)},"small"===t.size&&"contained"===t.variant&&{padding:"4px 10px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"contained"===t.variant&&{padding:"8px 22px",fontSize:e.typography.pxToRem(15)},t.fullWidth&&{width:"100%"})}),(({ownerState:e})=>e.disableElevation&&{boxShadow:"none","&:hover":{boxShadow:"none"},[`&.${f.focusVisible}`]:{boxShadow:"none"},"&:active":{boxShadow:"none"},[`&.${f.disabled}`]:{boxShadow:"none"}})),k=(0,d.ZP)("span",{name:"MuiButton",slot:"StartIcon",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.startIcon,t[`iconSize${(0,h.Z)(o.size)}`]]}})((({ownerState:e})=>(0,n.Z)({display:"inherit",marginRight:8,marginLeft:-4},"small"===e.size&&{marginLeft:-2},S(e)))),w=(0,d.ZP)("span",{name:"MuiButton",slot:"EndIcon",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.endIcon,t[`iconSize${(0,h.Z)(o.size)}`]]}})((({ownerState:e})=>(0,n.Z)({display:"inherit",marginRight:-4,marginLeft:8},"small"===e.size&&{marginRight:-2},S(e)))),R=a.forwardRef((function(e,t){const o=a.useContext(b),c=a.useContext(x),d=(0,s.Z)(o,e),p=(0,u.Z)({props:d,name:"MuiButton"}),{children:m,color:v="primary",component:f="button",className:S,disabled:R=!1,disableElevation:z=!1,disableFocusRipple:M=!1,endIcon:$,focusVisibleClassName:P,fullWidth:I=!1,size:E="medium",startIcon:T,type:B,variant:N="text"}=p,j=(0,r.Z)(p,Z),L=(0,n.Z)({},p,{color:v,component:f,disabled:R,disableElevation:z,disableFocusRipple:M,fullWidth:I,size:E,type:B,variant:N}),F=(e=>{const{color:t,disableElevation:o,fullWidth:r,size:a,variant:i,classes:s}=e,c={root:["root",i,`${i}${(0,h.Z)(t)}`,`size${(0,h.Z)(a)}`,`${i}Size${(0,h.Z)(a)}`,"inherit"===t&&"colorInherit",o&&"disableElevation",r&&"fullWidth"],label:["label"],startIcon:["startIcon",`iconSize${(0,h.Z)(a)}`],endIcon:["endIcon",`iconSize${(0,h.Z)(a)}`]},d=(0,l.Z)(c,g,s);return(0,n.Z)({},s,d)})(L),V=T&&(0,y.jsx)(k,{className:F.startIcon,ownerState:L,children:T}),W=$&&(0,y.jsx)(w,{className:F.endIcon,ownerState:L,children:$}),D=c||"";return(0,y.jsxs)(C,(0,n.Z)({ownerState:L,className:(0,i.Z)(o.className,F.root,S,D),component:f,disabled:R,focusRipple:!M,focusVisibleClassName:(0,i.Z)(F.focusVisible,P),ref:t,type:B},j,{classes:F,children:[V,m,W]}))}))},539:(e,t,o)=>{o.d(t,{Z:()=>N});var r=o(7462),n=o(3366),a=o(7294),i=o(512),s=o(4780),l=o(948),c=o(1657),d=o(1705),u=o(2068),p=o(9674),h=o(4537),m=o(917),v=o(5893);var g=o(1588);const f=(0,g.Z)("MuiTouchRipple",["root","ripple","rippleVisible","ripplePulsate","child","childLeaving","childPulsate"]),b=["center","classes","className"];let x,y,Z,S,C=e=>e;const k=(0,m.F4)(x||(x=C` 0% { transform: scale(0); opacity: 0.1; } 100% { transform: scale(1); opacity: 0.3; } `)),w=(0,m.F4)(y||(y=C` 0% { opacity: 1; } 100% { opacity: 0; } `)),R=(0,m.F4)(Z||(Z=C` 0% { transform: scale(1); } 50% { transform: scale(0.92); } 100% { transform: scale(1); } `)),z=(0,l.ZP)("span",{name:"MuiTouchRipple",slot:"Root"})({overflow:"hidden",pointerEvents:"none",position:"absolute",zIndex:0,top:0,right:0,bottom:0,left:0,borderRadius:"inherit"}),M=(0,l.ZP)((function(e){const{className:t,classes:o,pulsate:r=!1,rippleX:n,rippleY:s,rippleSize:l,in:c,onExited:d,timeout:u}=e,[p,h]=a.useState(!1),m=(0,i.Z)(t,o.ripple,o.rippleVisible,r&&o.ripplePulsate),g={width:l,height:l,top:-l/2+s,left:-l/2+n},f=(0,i.Z)(o.child,p&&o.childLeaving,r&&o.childPulsate);return c||p||h(!0),a.useEffect((()=>{if(!c&&null!=d){const e=setTimeout(d,u);return()=>{clearTimeout(e)}}}),[d,c,u]),(0,v.jsx)("span",{className:m,style:g,children:(0,v.jsx)("span",{className:f})})}),{name:"MuiTouchRipple",slot:"Ripple"})(S||(S=C` opacity: 0; position: absolute; &.${0} { opacity: 0.3; transform: scale(1); animation-name: ${0}; animation-duration: ${0}ms; animation-timing-function: ${0}; } &.${0} { animation-duration: ${0}ms; } & .${0} { opacity: 1; display: block; width: 100%; height: 100%; border-radius: 50%; background-color: currentColor; } & .${0} { opacity: 0; animation-name: ${0}; animation-duration: ${0}ms; animation-timing-function: ${0}; } & .${0} { position: absolute; /* @noflip */ left: 0px; top: 0; animation-name: ${0}; animation-duration: 2500ms; animation-timing-function: ${0}; animation-iteration-count: infinite; animation-delay: 200ms; } `),f.rippleVisible,k,550,(({theme:e})=>e.transitions.easing.easeInOut),f.ripplePulsate,(({theme:e})=>e.transitions.duration.shorter),f.child,f.childLeaving,w,550,(({theme:e})=>e.transitions.easing.easeInOut),f.childPulsate,R,(({theme:e})=>e.transitions.easing.easeInOut)),$=a.forwardRef((function(e,t){const o=(0,c.Z)({props:e,name:"MuiTouchRipple"}),{center:s=!1,classes:l={},className:d}=o,u=(0,n.Z)(o,b),[p,m]=a.useState([]),g=a.useRef(0),x=a.useRef(null);a.useEffect((()=>{x.current&&(x.current(),x.current=null)}),[p]);const y=a.useRef(!1),Z=a.useRef(0),S=a.useRef(null),C=a.useRef(null);a.useEffect((()=>()=>{Z.current&&clearTimeout(Z.current)}),[]);const k=a.useCallback((e=>{const{pulsate:t,rippleX:o,rippleY:r,rippleSize:n,cb:a}=e;m((e=>[...e,(0,v.jsx)(M,{classes:{ripple:(0,i.Z)(l.ripple,f.ripple),rippleVisible:(0,i.Z)(l.rippleVisible,f.rippleVisible),ripplePulsate:(0,i.Z)(l.ripplePulsate,f.ripplePulsate),child:(0,i.Z)(l.child,f.child),childLeaving:(0,i.Z)(l.childLeaving,f.childLeaving),childPulsate:(0,i.Z)(l.childPulsate,f.childPulsate)},timeout:550,pulsate:t,rippleX:o,rippleY:r,rippleSize:n},g.current)])),g.current+=1,x.current=a}),[l]),w=a.useCallback(((e={},t={},o=(()=>{}))=>{const{pulsate:r=!1,center:n=s||t.pulsate,fakeElement:a=!1}=t;if("mousedown"===(null==e?void 0:e.type)&&y.current)return void(y.current=!1);"touchstart"===(null==e?void 0:e.type)&&(y.current=!0);const i=a?null:C.current,l=i?i.getBoundingClientRect():{width:0,height:0,left:0,top:0};let c,d,u;if(n||void 0===e||0===e.clientX&&0===e.clientY||!e.clientX&&!e.touches)c=Math.round(l.width/2),d=Math.round(l.height/2);else{const{clientX:t,clientY:o}=e.touches&&e.touches.length>0?e.touches[0]:e;c=Math.round(t-l.left),d=Math.round(o-l.top)}if(n)u=Math.sqrt((2*l.width**2+l.height**2)/3),u%2==0&&(u+=1);else{const e=2*Math.max(Math.abs((i?i.clientWidth:0)-c),c)+2,t=2*Math.max(Math.abs((i?i.clientHeight:0)-d),d)+2;u=Math.sqrt(e**2+t**2)}null!=e&&e.touches?null===S.current&&(S.current=()=>{k({pulsate:r,rippleX:c,rippleY:d,rippleSize:u,cb:o})},Z.current=setTimeout((()=>{S.current&&(S.current(),S.current=null)}),80)):k({pulsate:r,rippleX:c,rippleY:d,rippleSize:u,cb:o})}),[s,k]),R=a.useCallback((()=>{w({},{pulsate:!0})}),[w]),$=a.useCallback(((e,t)=>{if(clearTimeout(Z.current),"touchend"===(null==e?void 0:e.type)&&S.current)return S.current(),S.current=null,void(Z.current=setTimeout((()=>{$(e,t)})));S.current=null,m((e=>e.length>0?e.slice(1):e)),x.current=t}),[]);return a.useImperativeHandle(t,(()=>({pulsate:R,start:w,stop:$})),[R,w,$]),(0,v.jsx)(z,(0,r.Z)({className:(0,i.Z)(f.root,l.root,d),ref:C},u,{children:(0,v.jsx)(h.Z,{component:null,exit:!0,children:p})}))}));var P=o(4867);function I(e){return(0,P.Z)("MuiButtonBase",e)}const E=(0,g.Z)("MuiButtonBase",["root","disabled","focusVisible"]),T=["action","centerRipple","children","className","component","disabled","disableRipple","disableTouchRipple","focusRipple","focusVisibleClassName","LinkComponent","onBlur","onClick","onContextMenu","onDragLeave","onFocus","onFocusVisible","onKeyDown","onKeyUp","onMouseDown","onMouseLeave","onMouseUp","onTouchEnd","onTouchMove","onTouchStart","tabIndex","TouchRippleProps","touchRippleRef","type"],B=(0,l.ZP)("button",{name:"MuiButtonBase",slot:"Root",overridesResolver:(e,t)=>t.root})({display:"inline-flex",alignItems:"center",justifyContent:"center",position:"relative",boxSizing:"border-box",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none",textDecoration:"none",color:"inherit","&::-moz-focus-inner":{borderStyle:"none"},[`&.${E.disabled}`]:{pointerEvents:"none",cursor:"default"},"@media print":{colorAdjust:"exact"}}),N=a.forwardRef((function(e,t){const o=(0,c.Z)({props:e,name:"MuiButtonBase"}),{action:l,centerRipple:h=!1,children:m,className:g,component:f="button",disabled:b=!1,disableRipple:x=!1,disableTouchRipple:y=!1,focusRipple:Z=!1,LinkComponent:S="a",onBlur:C,onClick:k,onContextMenu:w,onDragLeave:R,onFocus:z,onFocusVisible:M,onKeyDown:P,onKeyUp:E,onMouseDown:N,onMouseLeave:j,onMouseUp:L,onTouchEnd:F,onTouchMove:V,onTouchStart:W,tabIndex:D=0,TouchRippleProps:O,touchRippleRef:A,type:X}=o,q=(0,n.Z)(o,T),Y=a.useRef(null),K=a.useRef(null),U=(0,d.Z)(K,A),{isFocusVisibleRef:H,onFocus:_,onBlur:G,ref:J}=(0,p.Z)(),[Q,ee]=a.useState(!1);b&&Q&&ee(!1),a.useImperativeHandle(l,(()=>({focusVisible:()=>{ee(!0),Y.current.focus()}})),[]);const[te,oe]=a.useState(!1);a.useEffect((()=>{oe(!0)}),[]);const re=te&&!x&&!b;function ne(e,t,o=y){return(0,u.Z)((r=>(t&&t(r),!o&&K.current&&K.current[e](r),!0)))}a.useEffect((()=>{Q&&Z&&!x&&te&&K.current.pulsate()}),[x,Z,Q,te]);const ae=ne("start",N),ie=ne("stop",w),se=ne("stop",R),le=ne("stop",L),ce=ne("stop",(e=>{Q&&e.preventDefault(),j&&j(e)})),de=ne("start",W),ue=ne("stop",F),pe=ne("stop",V),he=ne("stop",(e=>{G(e),!1===H.current&&ee(!1),C&&C(e)}),!1),me=(0,u.Z)((e=>{Y.current||(Y.current=e.currentTarget),_(e),!0===H.current&&(ee(!0),M&&M(e)),z&&z(e)})),ve=()=>{const e=Y.current;return f&&"button"!==f&&!("A"===e.tagName&&e.href)},ge=a.useRef(!1),fe=(0,u.Z)((e=>{Z&&!ge.current&&Q&&K.current&&" "===e.key&&(ge.current=!0,K.current.stop(e,(()=>{K.current.start(e)}))),e.target===e.currentTarget&&ve()&&" "===e.key&&e.preventDefault(),P&&P(e),e.target===e.currentTarget&&ve()&&"Enter"===e.key&&!b&&(e.preventDefault(),k&&k(e))})),be=(0,u.Z)((e=>{Z&&" "===e.key&&K.current&&Q&&!e.defaultPrevented&&(ge.current=!1,K.current.stop(e,(()=>{K.current.pulsate(e)}))),E&&E(e),k&&e.target===e.currentTarget&&ve()&&" "===e.key&&!e.defaultPrevented&&k(e)}));let xe=f;"button"===xe&&(q.href||q.to)&&(xe=S);const ye={};"button"===xe?(ye.type=void 0===X?"button":X,ye.disabled=b):(q.href||q.to||(ye.role="button"),b&&(ye["aria-disabled"]=b));const Ze=(0,d.Z)(t,J,Y),Se=(0,r.Z)({},o,{centerRipple:h,component:f,disabled:b,disableRipple:x,disableTouchRipple:y,focusRipple:Z,tabIndex:D,focusVisible:Q}),Ce=(e=>{const{disabled:t,focusVisible:o,focusVisibleClassName:r,classes:n}=e,a={root:["root",t&&"disabled",o&&"focusVisible"]},i=(0,s.Z)(a,I,n);return o&&r&&(i.root+=` ${r}`),i})(Se);return(0,v.jsxs)(B,(0,r.Z)({as:xe,className:(0,i.Z)(Ce.root,g),ownerState:Se,onBlur:he,onClick:k,onContextMenu:ie,onFocus:me,onKeyDown:fe,onKeyUp:be,onMouseDown:ae,onMouseLeave:ce,onMouseUp:le,onDragLeave:se,onTouchEnd:ue,onTouchMove:pe,onTouchStart:de,ref:Ze,tabIndex:b?-1:D,type:X},ye,q,{children:[m,re?(0,v.jsx)($,(0,r.Z)({ref:U,center:h},O)):null]}))}))},9062:(e,t,o)=>{o.d(t,{Z:()=>z});var r=o(3366),n=o(7462),a=o(7294),i=o(512),s=o(4780),l=o(917),c=o(8216),d=o(1657),u=o(948),p=o(1588),h=o(4867);function m(e){return(0,h.Z)("MuiCircularProgress",e)}(0,p.Z)("MuiCircularProgress",["root","determinate","indeterminate","colorPrimary","colorSecondary","svg","circle","circleDeterminate","circleIndeterminate","circleDisableShrink"]);var v=o(5893);const g=["className","color","disableShrink","size","style","thickness","value","variant"];let f,b,x,y,Z=e=>e;const S=(0,l.F4)(f||(f=Z` 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } `)),C=(0,l.F4)(b||(b=Z` 0% { stroke-dasharray: 1px, 200px; stroke-dashoffset: 0; } 50% { stroke-dasharray: 100px, 200px; stroke-dashoffset: -15px; } 100% { stroke-dasharray: 100px, 200px; stroke-dashoffset: -125px; } `)),k=(0,u.ZP)("span",{name:"MuiCircularProgress",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,t[o.variant],t[`color${(0,c.Z)(o.color)}`]]}})((({ownerState:e,theme:t})=>(0,n.Z)({display:"inline-block"},"determinate"===e.variant&&{transition:t.transitions.create("transform")},"inherit"!==e.color&&{color:(t.vars||t).palette[e.color].main})),(({ownerState:e})=>"indeterminate"===e.variant&&(0,l.iv)(x||(x=Z` animation: ${0} 1.4s linear infinite; `),S))),w=(0,u.ZP)("svg",{name:"MuiCircularProgress",slot:"Svg",overridesResolver:(e,t)=>t.svg})({display:"block"}),R=(0,u.ZP)("circle",{name:"MuiCircularProgress",slot:"Circle",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.circle,t[`circle${(0,c.Z)(o.variant)}`],o.disableShrink&&t.circleDisableShrink]}})((({ownerState:e,theme:t})=>(0,n.Z)({stroke:"currentColor"},"determinate"===e.variant&&{transition:t.transitions.create("stroke-dashoffset")},"indeterminate"===e.variant&&{strokeDasharray:"80px, 200px",strokeDashoffset:0})),(({ownerState:e})=>"indeterminate"===e.variant&&!e.disableShrink&&(0,l.iv)(y||(y=Z` animation: ${0} 1.4s ease-in-out infinite; `),C))),z=a.forwardRef((function(e,t){const o=(0,d.Z)({props:e,name:"MuiCircularProgress"}),{className:a,color:l="primary",disableShrink:u=!1,size:p=40,style:h,thickness:f=3.6,value:b=0,variant:x="indeterminate"}=o,y=(0,r.Z)(o,g),Z=(0,n.Z)({},o,{color:l,disableShrink:u,size:p,thickness:f,value:b,variant:x}),S=(e=>{const{classes:t,variant:o,color:r,disableShrink:n}=e,a={root:["root",o,`color${(0,c.Z)(r)}`],svg:["svg"],circle:["circle",`circle${(0,c.Z)(o)}`,n&&"circleDisableShrink"]};return(0,s.Z)(a,m,t)})(Z),C={},z={},M={};if("determinate"===x){const e=2*Math.PI*((44-f)/2);C.strokeDasharray=e.toFixed(3),M["aria-valuenow"]=Math.round(b),C.strokeDashoffset=`${((100-b)/100*e).toFixed(3)}px`,z.transform="rotate(-90deg)"}return(0,v.jsx)(k,(0,n.Z)({className:(0,i.Z)(S.root,a),style:(0,n.Z)({width:p,height:p},z,h),ownerState:Z,ref:t,role:"progressbar"},M,y,{children:(0,v.jsx)(w,{className:S.svg,ownerState:Z,viewBox:"22 22 44 44",children:(0,v.jsx)(R,{className:S.circle,style:C,ownerState:Z,cx:44,cy:44,r:(44-f)/2,fill:"none",strokeWidth:f})})}))}))},6574:(e,t,o)=>{o.d(t,{Z:()=>s});var r=o(6137),n=o(8216),a=o(948),i=o(1657);const s=(0,r.Z)({createStyledComponent:(0,a.ZP)("div",{name:"MuiContainer",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,t[`maxWidth${(0,n.Z)(String(o.maxWidth))}`],o.fixed&&t.fixed,o.disableGutters&&t.disableGutters]}}),useThemeProps:e=>(0,i.Z)({props:e,name:"MuiContainer"})})},6720:(e,t,o)=>{o.d(t,{ZP:()=>d});var r=o(7462),n=o(7294),a=o(1657),i=o(6294),s=o(5893);const l=(e,t)=>(0,r.Z)({WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale",boxSizing:"border-box",WebkitTextSizeAdjust:"100%"},t&&!e.vars&&{colorScheme:e.palette.mode}),c=e=>(0,r.Z)({color:(e.vars||e).palette.text.primary},e.typography.body1,{backgroundColor:(e.vars||e).palette.background.default,"@media print":{backgroundColor:(e.vars||e).palette.common.white}}),d=function(e){const t=(0,a.Z)({props:e,name:"MuiCssBaseline"}),{children:o,enableColorScheme:d=!1}=t;return(0,s.jsxs)(n.Fragment,{children:[(0,s.jsx)(i.Z,{styles:e=>((e,t=!1)=>{var o;const n={};t&&e.colorSchemes&&Object.entries(e.colorSchemes).forEach((([t,o])=>{var r;n[e.getColorSchemeSelector(t).replace(/\s*&/,"")]={colorScheme:null==(r=o.palette)?void 0:r.mode}}));let a=(0,r.Z)({html:l(e,t),"*, *::before, *::after":{boxSizing:"inherit"},"strong, b":{fontWeight:e.typography.fontWeightBold},body:(0,r.Z)({margin:0},c(e),{"&::backdrop":{backgroundColor:(e.vars||e).palette.background.default}})},n);const i=null==(o=e.components)||null==(o=o.MuiCssBaseline)?void 0:o.styleOverrides;return i&&(a=[a,i]),a})(e,d)}),o]})}},5097:(e,t,o)=>{o.d(t,{Z:()=>r});const r=(0,o(1588).Z)("MuiDivider",["root","absolute","fullWidth","inset","middle","flexItem","light","vertical","withChildren","withChildrenVertical","textAlignRight","textAlignLeft","wrapper","wrapperVertical"])},6628:(e,t,o)=>{o.d(t,{Z:()=>h});var r=o(7462),n=o(3366),a=o(7294),i=o(8052),s=o(2734),l=o(577),c=o(1705),d=o(5893);const u=["addEndListener","appear","children","easing","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","style","timeout","TransitionComponent"],p={entering:{opacity:1},entered:{opacity:1}},h=a.forwardRef((function(e,t){const o=(0,s.Z)(),h={enter:o.transitions.duration.enteringScreen,exit:o.transitions.duration.leavingScreen},{addEndListener:m,appear:v=!0,children:g,easing:f,in:b,onEnter:x,onEntered:y,onEntering:Z,onExit:S,onExited:C,onExiting:k,style:w,timeout:R=h,TransitionComponent:z=i.ZP}=e,M=(0,n.Z)(e,u),$=a.useRef(null),P=(0,c.Z)($,g.ref,t),I=e=>t=>{if(e){const o=$.current;void 0===t?e(o):e(o,t)}},E=I(Z),T=I(((e,t)=>{(0,l.n)(e);const r=(0,l.C)({style:w,timeout:R,easing:f},{mode:"enter"});e.style.webkitTransition=o.transitions.create("opacity",r),e.style.transition=o.transitions.create("opacity",r),x&&x(e,t)})),B=I(y),N=I(k),j=I((e=>{const t=(0,l.C)({style:w,timeout:R,easing:f},{mode:"exit"});e.style.webkitTransition=o.transitions.create("opacity",t),e.style.transition=o.transitions.create("opacity",t),S&&S(e)})),L=I(C);return(0,d.jsx)(z,(0,r.Z)({appear:v,in:b,nodeRef:$,onEnter:T,onEntered:B,onEntering:E,onExit:j,onExited:L,onExiting:N,addEndListener:e=>{m&&m($.current,e)},timeout:R},M,{children:(e,t)=>a.cloneElement(g,(0,r.Z)({style:(0,r.Z)({opacity:0,visibility:"exited"!==e||b?void 0:"hidden"},p[e],w,g.props.style),ref:P},t))}))}))}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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VmYsVUFBV2EsRUFDWG5CLGVBaEIyQnNCLElBQ3ZCdEIsR0FFRkEsRUFBZVEsRUFBUTlVLFFBQVM0VixFQUNsQyxFQWFBN04sUUFBU0EsR0FDUmxILEVBQU8sQ0FDUjNDLFNBQVUsQ0FBQzJYLEVBQU9DLElBQ0ksZUFBbUI1WCxHQUFVLE9BQVMsQ0FDeEQySyxPQUFPLE9BQVMsQ0FDZG1MLFFBQVMsRUFDVCtCLFdBQXNCLFdBQVZGLEdBQXVCaE8sT0FBb0J4RixFQUFYLFVBQzNDdEQsRUFBTzhXLEdBQVFoTixFQUFPM0ssRUFBU0wsTUFBTWdMLE9BQ3hDdkksSUFBSzBQLEdBQ0o4RixNQUdULEciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Cb3gvYm94Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Cb3gvQm94LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0JyZWFkY3J1bWJzL0JyZWFkY3J1bWJDb2xsYXBzZWQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnJlYWRjcnVtYnMvYnJlYWRjcnVtYnNDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0JyZWFkY3J1bWJzL0JyZWFkY3J1bWJzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbi9idXR0b25DbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkdyb3VwL0J1dHRvbkdyb3VwQ29udGV4dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9CdXR0b25Hcm91cC9CdXR0b25Hcm91cEJ1dHRvbkNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uL0J1dHRvbi5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9CdXR0b25CYXNlL3RvdWNoUmlwcGxlQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9CdXR0b25CYXNlL1RvdWNoUmlwcGxlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvUmlwcGxlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvYnV0dG9uQmFzZUNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9CdXR0b25CYXNlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0NpcmN1bGFyUHJvZ3Jlc3MvY2lyY3VsYXJQcm9ncmVzc0NsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQ2lyY3VsYXJQcm9ncmVzcy9DaXJjdWxhclByb2dyZXNzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0NvbnRhaW5lci9Db250YWluZXIuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQ3NzQmFzZWxpbmUvQ3NzQmFzZWxpbmUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRGl2aWRlci9kaXZpZGVyQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9GYWRlL0ZhZGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5jb25zdCBib3hDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQm94JywgWydyb290J10pO1xuZXhwb3J0IGRlZmF1bHQgYm94Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IGNyZWF0ZUJveCB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyB1bnN0YWJsZV9DbGFzc05hbWVHZW5lcmF0b3IgYXMgQ2xhc3NOYW1lR2VuZXJhdG9yIH0gZnJvbSAnLi4vY2xhc3NOYW1lJztcbmltcG9ydCB7IGNyZWF0ZVRoZW1lIH0gZnJvbSAnLi4vc3R5bGVzJztcbmltcG9ydCBUSEVNRV9JRCBmcm9tICcuLi9zdHlsZXMvaWRlbnRpZmllcic7XG5pbXBvcnQgYm94Q2xhc3NlcyBmcm9tICcuL2JveENsYXNzZXMnO1xuY29uc3QgZGVmYXVsdFRoZW1lID0gY3JlYXRlVGhlbWUoKTtcbmNvbnN0IEJveCA9IGNyZWF0ZUJveCh7XG4gIHRoZW1lSWQ6IFRIRU1FX0lELFxuICBkZWZhdWx0VGhlbWUsXG4gIGRlZmF1bHRDbGFzc05hbWU6IGJveENsYXNzZXMucm9vdCxcbiAgZ2VuZXJhdGVDbGFzc05hbWU6IENsYXNzTmFtZUdlbmVyYXRvci5nZW5lcmF0ZVxufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBCb3gucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBCb3g7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wic2xvdHNcIiwgXCJzbG90UHJvcHNcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgZW1waGFzaXplIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCBNb3JlSG9yaXpJY29uIGZyb20gJy4uL2ludGVybmFsL3N2Zy1pY29ucy9Nb3JlSG9yaXonO1xuaW1wb3J0IEJ1dHRvbkJhc2UgZnJvbSAnLi4vQnV0dG9uQmFzZSc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgQnJlYWRjcnVtYkNvbGxhcHNlZEJ1dHRvbiA9IHN0eWxlZChCdXR0b25CYXNlKSgoe1xuICB0aGVtZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIG1hcmdpbkxlZnQ6IGBjYWxjKCR7dGhlbWUuc3BhY2luZygxKX0gKiAwLjUpYCxcbiAgbWFyZ2luUmlnaHQ6IGBjYWxjKCR7dGhlbWUuc3BhY2luZygxKX0gKiAwLjUpYFxufSwgdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8ge1xuICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ3JleVsxMDBdLFxuICBjb2xvcjogdGhlbWUucGFsZXR0ZS5ncmV5WzcwMF1cbn0gOiB7XG4gIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5ncmV5WzcwMF0sXG4gIGNvbG9yOiB0aGVtZS5wYWxldHRlLmdyZXlbMTAwXVxufSwge1xuICBib3JkZXJSYWRpdXM6IDIsXG4gICcmOmhvdmVyLCAmOmZvY3VzJzogX2V4dGVuZHMoe30sIHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ3JleVsyMDBdXG4gIH0gOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS5wYWxldHRlLmdyZXlbNjAwXVxuICB9KSxcbiAgJyY6YWN0aXZlJzogX2V4dGVuZHMoe1xuICAgIGJveFNoYWRvdzogdGhlbWUuc2hhZG93c1swXVxuICB9LCB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBlbXBoYXNpemUodGhlbWUucGFsZXR0ZS5ncmV5WzIwMF0sIDAuMTIpXG4gIH0gOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBlbXBoYXNpemUodGhlbWUucGFsZXR0ZS5ncmV5WzYwMF0sIDAuMTIpXG4gIH0pXG59KSk7XG5jb25zdCBCcmVhZGNydW1iQ29sbGFwc2VkSWNvbiA9IHN0eWxlZChNb3JlSG9yaXpJY29uKSh7XG4gIHdpZHRoOiAyNCxcbiAgaGVpZ2h0OiAxNlxufSk7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuZnVuY3Rpb24gQnJlYWRjcnVtYkNvbGxhcHNlZChwcm9wcykge1xuICBjb25zdCB7XG4gICAgICBzbG90cyA9IHt9LFxuICAgICAgc2xvdFByb3BzID0ge31cbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gcHJvcHM7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChcImxpXCIsIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goQnJlYWRjcnVtYkNvbGxhcHNlZEJ1dHRvbiwgX2V4dGVuZHMoe1xuICAgICAgZm9jdXNSaXBwbGU6IHRydWVcbiAgICB9LCBvdGhlclByb3BzLCB7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KEJyZWFkY3J1bWJDb2xsYXBzZWRJY29uLCBfZXh0ZW5kcyh7XG4gICAgICAgIGFzOiBzbG90cy5Db2xsYXBzZWRJY29uLFxuICAgICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgICB9LCBzbG90UHJvcHMuY29sbGFwc2VkSWNvbikpXG4gICAgfSkpXG4gIH0pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQnJlYWRjcnVtYkNvbGxhcHNlZC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBUaGUgcHJvcHMgdXNlZCBmb3IgdGhlIENvbGxhcHNlZEljb24gc2xvdC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjb2xsYXBzZWRJY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgQnJlYWRjdW1iQ29sbGFwc2VkLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgQ29sbGFwc2VkSWNvbjogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9iamVjdFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEJyZWFkY3J1bWJDb2xsYXBzZWQ7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJyZWFkY3J1bWJzVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlCcmVhZGNydW1icycsIHNsb3QpO1xufVxuY29uc3QgYnJlYWRjcnVtYnNDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQnJlYWRjcnVtYnMnLCBbJ3Jvb3QnLCAnb2wnLCAnbGknLCAnc2VwYXJhdG9yJ10pO1xuZXhwb3J0IGRlZmF1bHQgYnJlYWRjcnVtYnNDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwic2xvdHNcIiwgXCJzbG90UHJvcHNcIiwgXCJleHBhbmRUZXh0XCIsIFwiaXRlbXNBZnRlckNvbGxhcHNlXCIsIFwiaXRlbXNCZWZvcmVDb2xsYXBzZVwiLCBcIm1heEl0ZW1zXCIsIFwic2VwYXJhdG9yXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNGcmFnbWVudCB9IGZyb20gJ3JlYWN0LWlzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IGludGVnZXJQcm9wVHlwZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMsIHVzZVNsb3RQcm9wcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IFR5cG9ncmFwaHkgZnJvbSAnLi4vVHlwb2dyYXBoeSc7XG5pbXBvcnQgQnJlYWRjcnVtYkNvbGxhcHNlZCBmcm9tICcuL0JyZWFkY3J1bWJDb2xsYXBzZWQnO1xuaW1wb3J0IGJyZWFkY3J1bWJzQ2xhc3NlcywgeyBnZXRCcmVhZGNydW1ic1V0aWxpdHlDbGFzcyB9IGZyb20gJy4vYnJlYWRjcnVtYnNDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290J10sXG4gICAgbGk6IFsnbGknXSxcbiAgICBvbDogWydvbCddLFxuICAgIHNlcGFyYXRvcjogWydzZXBhcmF0b3InXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEJyZWFkY3J1bWJzVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBCcmVhZGNydW1ic1Jvb3QgPSBzdHlsZWQoVHlwb2dyYXBoeSwge1xuICBuYW1lOiAnTXVpQnJlYWRjcnVtYnMnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIHJldHVybiBbe1xuICAgICAgW2AmIC4ke2JyZWFkY3J1bWJzQ2xhc3Nlcy5saX1gXTogc3R5bGVzLmxpXG4gICAgfSwgc3R5bGVzLnJvb3RdO1xuICB9XG59KSh7fSk7XG5jb25zdCBCcmVhZGNydW1ic09sID0gc3R5bGVkKCdvbCcsIHtcbiAgbmFtZTogJ011aUJyZWFkY3J1bWJzJyxcbiAgc2xvdDogJ09sJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMub2xcbn0pKHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBmbGV4V3JhcDogJ3dyYXAnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgcGFkZGluZzogMCxcbiAgbWFyZ2luOiAwLFxuICBsaXN0U3R5bGU6ICdub25lJ1xufSk7XG5jb25zdCBCcmVhZGNydW1ic1NlcGFyYXRvciA9IHN0eWxlZCgnbGknLCB7XG4gIG5hbWU6ICdNdWlCcmVhZGNydW1icycsXG4gIHNsb3Q6ICdTZXBhcmF0b3InLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5zZXBhcmF0b3Jcbn0pKHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIG1hcmdpbkxlZnQ6IDgsXG4gIG1hcmdpblJpZ2h0OiA4XG59KTtcbmZ1bmN0aW9uIGluc2VydFNlcGFyYXRvcnMoaXRlbXMsIGNsYXNzTmFtZSwgc2VwYXJhdG9yLCBvd25lclN0YXRlKSB7XG4gIHJldHVybiBpdGVtcy5yZWR1Y2UoKGFjYywgY3VycmVudCwgaW5kZXgpID0+IHtcbiAgICBpZiAoaW5kZXggPCBpdGVtcy5sZW5ndGggLSAxKSB7XG4gICAgICBhY2MgPSBhY2MuY29uY2F0KGN1cnJlbnQsIC8qI19fUFVSRV9fKi9fanN4KEJyZWFkY3J1bWJzU2VwYXJhdG9yLCB7XG4gICAgICAgIFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICAgIGNoaWxkcmVuOiBzZXBhcmF0b3JcbiAgICAgIH0sIGBzZXBhcmF0b3ItJHtpbmRleH1gKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjYy5wdXNoKGN1cnJlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG59XG5jb25zdCBCcmVhZGNydW1icyA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEJyZWFkY3J1bWJzKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlCcmVhZGNydW1icydcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ25hdicsXG4gICAgICBzbG90cyA9IHt9LFxuICAgICAgc2xvdFByb3BzID0ge30sXG4gICAgICBleHBhbmRUZXh0ID0gJ1Nob3cgcGF0aCcsXG4gICAgICBpdGVtc0FmdGVyQ29sbGFwc2UgPSAxLFxuICAgICAgaXRlbXNCZWZvcmVDb2xsYXBzZSA9IDEsXG4gICAgICBtYXhJdGVtcyA9IDgsXG4gICAgICBzZXBhcmF0b3IgPSAnLydcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgW2V4cGFuZGVkLCBzZXRFeHBhbmRlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb21wb25lbnQsXG4gICAgZXhwYW5kZWQsXG4gICAgZXhwYW5kVGV4dCxcbiAgICBpdGVtc0FmdGVyQ29sbGFwc2UsXG4gICAgaXRlbXNCZWZvcmVDb2xsYXBzZSxcbiAgICBtYXhJdGVtcyxcbiAgICBzZXBhcmF0b3JcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgY29sbGFwc2VkSWNvblNsb3RQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgZWxlbWVudFR5cGU6IHNsb3RzLkNvbGxhcHNlZEljb24sXG4gICAgZXh0ZXJuYWxTbG90UHJvcHM6IHNsb3RQcm9wcy5jb2xsYXBzZWRJY29uLFxuICAgIG93bmVyU3RhdGVcbiAgfSk7XG4gIGNvbnN0IGxpc3RSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IHJlbmRlckl0ZW1zQmVmb3JlQW5kQWZ0ZXIgPSBhbGxJdGVtcyA9PiB7XG4gICAgY29uc3QgaGFuZGxlQ2xpY2tFeHBhbmQgPSAoKSA9PiB7XG4gICAgICBzZXRFeHBhbmRlZCh0cnVlKTtcblxuICAgICAgLy8gVGhlIGNsaWNrZWQgZWxlbWVudCByZWNlaXZlZCB0aGUgZm9jdXMgYnV0IGdldHMgcmVtb3ZlZCBmcm9tIHRoZSBET00uXG4gICAgICAvLyBMZXQncyBrZWVwIHRoZSBmb2N1cyBpbiB0aGUgY29tcG9uZW50IGFmdGVyIGV4cGFuZGluZy5cbiAgICAgIC8vIE1vdmluZyBpdCB0byB0aGUgPG9sPiBvciA8bmF2PiBkb2VzIG5vdCBjYXVzZSBhbnkgYW5ub3VuY2VtZW50IGluIE5WREEuXG4gICAgICAvLyBCeSBtb3ZpbmcgaXQgdG8gc29tZSBsaW5rL2J1dHRvbiBhdCBsZWFzdCB3ZSBoYXZlIHNvbWUgYW5ub3VuY2VtZW50LlxuICAgICAgY29uc3QgZm9jdXNhYmxlID0gbGlzdFJlZi5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoJ2FbaHJlZl0sYnV0dG9uLFt0YWJpbmRleF0nKTtcbiAgICAgIGlmIChmb2N1c2FibGUpIHtcbiAgICAgICAgZm9jdXNhYmxlLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIFRoaXMgZGVmZW5kcyBhZ2FpbnN0IHNvbWVvbmUgcGFzc2luZyB3ZWlyZCBpbnB1dCwgdG8gZW5zdXJlIHRoYXQgaWYgYWxsXG4gICAgLy8gaXRlbXMgd291bGQgYmUgc2hvd24gYW55d2F5LCB3ZSBqdXN0IHNob3cgYWxsIGl0ZW1zIHdpdGhvdXQgdGhlIEVsbGlwc2lzSXRlbVxuICAgIGlmIChpdGVtc0JlZm9yZUNvbGxhcHNlICsgaXRlbXNBZnRlckNvbGxhcHNlID49IGFsbEl0ZW1zLmxlbmd0aCkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogWW91IGhhdmUgcHJvdmlkZWQgYW4gaW52YWxpZCBjb21iaW5hdGlvbiBvZiBwcm9wcyB0byB0aGUgQnJlYWRjcnVtYnMuJywgYGl0ZW1zQWZ0ZXJDb2xsYXBzZT17JHtpdGVtc0FmdGVyQ29sbGFwc2V9fSArIGl0ZW1zQmVmb3JlQ29sbGFwc2U9eyR7aXRlbXNCZWZvcmVDb2xsYXBzZX19ID49IG1heEl0ZW1zPXske21heEl0ZW1zfX1gXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWxsSXRlbXM7XG4gICAgfVxuICAgIHJldHVybiBbLi4uYWxsSXRlbXMuc2xpY2UoMCwgaXRlbXNCZWZvcmVDb2xsYXBzZSksIC8qI19fUFVSRV9fKi9fanN4KEJyZWFkY3J1bWJDb2xsYXBzZWQsIHtcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBleHBhbmRUZXh0LFxuICAgICAgc2xvdHM6IHtcbiAgICAgICAgQ29sbGFwc2VkSWNvbjogc2xvdHMuQ29sbGFwc2VkSWNvblxuICAgICAgfSxcbiAgICAgIHNsb3RQcm9wczoge1xuICAgICAgICBjb2xsYXBzZWRJY29uOiBjb2xsYXBzZWRJY29uU2xvdFByb3BzXG4gICAgICB9LFxuICAgICAgb25DbGljazogaGFuZGxlQ2xpY2tFeHBhbmRcbiAgICB9LCBcImVsbGlwc2lzXCIpLCAuLi5hbGxJdGVtcy5zbGljZShhbGxJdGVtcy5sZW5ndGggLSBpdGVtc0FmdGVyQ29sbGFwc2UsIGFsbEl0ZW1zLmxlbmd0aCldO1xuICB9O1xuICBjb25zdCBhbGxJdGVtcyA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pLmZpbHRlcihjaGlsZCA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpc0ZyYWdtZW50KGNoaWxkKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtcIk1VSTogVGhlIEJyZWFkY3J1bWJzIGNvbXBvbmVudCBkb2Vzbid0IGFjY2VwdCBhIEZyYWdtZW50IGFzIGEgY2hpbGQuXCIsICdDb25zaWRlciBwcm92aWRpbmcgYW4gYXJyYXkgaW5zdGVhZC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGQpO1xuICB9KS5tYXAoKGNoaWxkLCBpbmRleCkgPT4gLyojX19QVVJFX18qL19qc3goXCJsaVwiLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLmxpLFxuICAgIGNoaWxkcmVuOiBjaGlsZFxuICB9LCBgY2hpbGQtJHtpbmRleH1gKSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChCcmVhZGNydW1ic1Jvb3QsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICBjb21wb25lbnQ6IGNvbXBvbmVudCxcbiAgICBjb2xvcjogXCJ0ZXh0LnNlY29uZGFyeVwiLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChCcmVhZGNydW1ic09sLCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMub2wsXG4gICAgICByZWY6IGxpc3RSZWYsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2hpbGRyZW46IGluc2VydFNlcGFyYXRvcnMoZXhwYW5kZWQgfHwgbWF4SXRlbXMgJiYgYWxsSXRlbXMubGVuZ3RoIDw9IG1heEl0ZW1zID8gYWxsSXRlbXMgOiByZW5kZXJJdGVtc0JlZm9yZUFuZEFmdGVyKGFsbEl0ZW1zKSwgY2xhc3Nlcy5zZXBhcmF0b3IsIHNlcGFyYXRvciwgb3duZXJTdGF0ZSlcbiAgICB9KVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEJyZWFkY3J1bWJzLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBsYWJlbCBmb3IgdGhlIGV4cGFuZCBidXR0b24uXG4gICAqXG4gICAqIEZvciBsb2NhbGl6YXRpb24gcHVycG9zZXMsIHlvdSBjYW4gdXNlIHRoZSBwcm92aWRlZCBbdHJhbnNsYXRpb25zXSgvbWF0ZXJpYWwtdWkvZ3VpZGVzL2xvY2FsaXphdGlvbi8pLlxuICAgKiBAZGVmYXVsdCAnU2hvdyBwYXRoJ1xuICAgKi9cbiAgZXhwYW5kVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIG1heCBpdGVtcyBpcyBleGNlZWRlZCwgdGhlIG51bWJlciBvZiBpdGVtcyB0byBzaG93IGFmdGVyIHRoZSBlbGxpcHNpcy5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgaXRlbXNBZnRlckNvbGxhcHNlOiBpbnRlZ2VyUHJvcFR5cGUsXG4gIC8qKlxuICAgKiBJZiBtYXggaXRlbXMgaXMgZXhjZWVkZWQsIHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gc2hvdyBiZWZvcmUgdGhlIGVsbGlwc2lzLlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICBpdGVtc0JlZm9yZUNvbGxhcHNlOiBpbnRlZ2VyUHJvcFR5cGUsXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJyZWFkY3J1bWJzIHRvIGRpc3BsYXkuIFdoZW4gdGhlcmUgYXJlIG1vcmVcbiAgICogdGhhbiB0aGUgbWF4aW11bSBudW1iZXIsIG9ubHkgdGhlIGZpcnN0IGBpdGVtc0JlZm9yZUNvbGxhcHNlYCBhbmQgbGFzdCBgaXRlbXNBZnRlckNvbGxhcHNlYFxuICAgKiB3aWxsIGJlIHNob3duLCB3aXRoIGFuIGVsbGlwc2lzIGluIGJldHdlZW4uXG4gICAqIEBkZWZhdWx0IDhcbiAgICovXG4gIG1heEl0ZW1zOiBpbnRlZ2VyUHJvcFR5cGUsXG4gIC8qKlxuICAgKiBDdXN0b20gc2VwYXJhdG9yIG5vZGUuXG4gICAqIEBkZWZhdWx0ICcvJ1xuICAgKi9cbiAgc2VwYXJhdG9yOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBwcm9wcyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlIHRoZSBCcmVhZGN1bWIuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY29sbGFwc2VkSWNvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIEJyZWFkY3VtYi5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIENvbGxhcHNlZEljb246IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEJyZWFkY3J1bWJzOyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRCdXR0b25VdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUJ1dHRvbicsIHNsb3QpO1xufVxuY29uc3QgYnV0dG9uQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUJ1dHRvbicsIFsncm9vdCcsICd0ZXh0JywgJ3RleHRJbmhlcml0JywgJ3RleHRQcmltYXJ5JywgJ3RleHRTZWNvbmRhcnknLCAndGV4dFN1Y2Nlc3MnLCAndGV4dEVycm9yJywgJ3RleHRJbmZvJywgJ3RleHRXYXJuaW5nJywgJ291dGxpbmVkJywgJ291dGxpbmVkSW5oZXJpdCcsICdvdXRsaW5lZFByaW1hcnknLCAnb3V0bGluZWRTZWNvbmRhcnknLCAnb3V0bGluZWRTdWNjZXNzJywgJ291dGxpbmVkRXJyb3InLCAnb3V0bGluZWRJbmZvJywgJ291dGxpbmVkV2FybmluZycsICdjb250YWluZWQnLCAnY29udGFpbmVkSW5oZXJpdCcsICdjb250YWluZWRQcmltYXJ5JywgJ2NvbnRhaW5lZFNlY29uZGFyeScsICdjb250YWluZWRTdWNjZXNzJywgJ2NvbnRhaW5lZEVycm9yJywgJ2NvbnRhaW5lZEluZm8nLCAnY29udGFpbmVkV2FybmluZycsICdkaXNhYmxlRWxldmF0aW9uJywgJ2ZvY3VzVmlzaWJsZScsICdkaXNhYmxlZCcsICdjb2xvckluaGVyaXQnLCAndGV4dFNpemVTbWFsbCcsICd0ZXh0U2l6ZU1lZGl1bScsICd0ZXh0U2l6ZUxhcmdlJywgJ291dGxpbmVkU2l6ZVNtYWxsJywgJ291dGxpbmVkU2l6ZU1lZGl1bScsICdvdXRsaW5lZFNpemVMYXJnZScsICdjb250YWluZWRTaXplU21hbGwnLCAnY29udGFpbmVkU2l6ZU1lZGl1bScsICdjb250YWluZWRTaXplTGFyZ2UnLCAnc2l6ZU1lZGl1bScsICdzaXplU21hbGwnLCAnc2l6ZUxhcmdlJywgJ2Z1bGxXaWR0aCcsICdzdGFydEljb24nLCAnZW5kSWNvbicsICdpY29uU2l6ZVNtYWxsJywgJ2ljb25TaXplTWVkaXVtJywgJ2ljb25TaXplTGFyZ2UnXSk7XG5leHBvcnQgZGVmYXVsdCBidXR0b25DbGFzc2VzOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgQnV0dG9uR3JvdXBDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgQnV0dG9uR3JvdXBDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0J1dHRvbkdyb3VwQ29udGV4dCc7XG59XG5leHBvcnQgZGVmYXVsdCBCdXR0b25Hcm91cENvbnRleHQ7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBCdXR0b25Hcm91cEJ1dHRvbkNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgQnV0dG9uR3JvdXBCdXR0b25Db250ZXh0LmRpc3BsYXlOYW1lID0gJ0J1dHRvbkdyb3VwQnV0dG9uQ29udGV4dCc7XG59XG5leHBvcnQgZGVmYXVsdCBCdXR0b25Hcm91cEJ1dHRvbkNvbnRleHQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImNsYXNzTmFtZVwiLCBcImRpc2FibGVkXCIsIFwiZGlzYWJsZUVsZXZhdGlvblwiLCBcImRpc2FibGVGb2N1c1JpcHBsZVwiLCBcImVuZEljb25cIiwgXCJmb2N1c1Zpc2libGVDbGFzc05hbWVcIiwgXCJmdWxsV2lkdGhcIiwgXCJzaXplXCIsIFwic3RhcnRJY29uXCIsIFwidHlwZVwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBpbnRlcm5hbF9yZXNvbHZlUHJvcHMgYXMgcmVzb2x2ZVByb3BzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBhbHBoYSB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgQnV0dG9uQmFzZSBmcm9tICcuLi9CdXR0b25CYXNlJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IGJ1dHRvbkNsYXNzZXMsIHsgZ2V0QnV0dG9uVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9idXR0b25DbGFzc2VzJztcbmltcG9ydCBCdXR0b25Hcm91cENvbnRleHQgZnJvbSAnLi4vQnV0dG9uR3JvdXAvQnV0dG9uR3JvdXBDb250ZXh0JztcbmltcG9ydCBCdXR0b25Hcm91cEJ1dHRvbkNvbnRleHQgZnJvbSAnLi4vQnV0dG9uR3JvdXAvQnV0dG9uR3JvdXBCdXR0b25Db250ZXh0JztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY29sb3IsXG4gICAgZGlzYWJsZUVsZXZhdGlvbixcbiAgICBmdWxsV2lkdGgsXG4gICAgc2l6ZSxcbiAgICB2YXJpYW50LFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIHZhcmlhbnQsIGAke3ZhcmlhbnR9JHtjYXBpdGFsaXplKGNvbG9yKX1gLCBgc2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gLCBgJHt2YXJpYW50fVNpemUke2NhcGl0YWxpemUoc2l6ZSl9YCwgY29sb3IgPT09ICdpbmhlcml0JyAmJiAnY29sb3JJbmhlcml0JywgZGlzYWJsZUVsZXZhdGlvbiAmJiAnZGlzYWJsZUVsZXZhdGlvbicsIGZ1bGxXaWR0aCAmJiAnZnVsbFdpZHRoJ10sXG4gICAgbGFiZWw6IFsnbGFiZWwnXSxcbiAgICBzdGFydEljb246IFsnc3RhcnRJY29uJywgYGljb25TaXplJHtjYXBpdGFsaXplKHNpemUpfWBdLFxuICAgIGVuZEljb246IFsnZW5kSWNvbicsIGBpY29uU2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0QnV0dG9uVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcbmNvbnN0IGNvbW1vbkljb25TdHlsZXMgPSBvd25lclN0YXRlID0+IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICAnJiA+ICo6bnRoLW9mLXR5cGUoMSknOiB7XG4gICAgZm9udFNpemU6IDE4XG4gIH1cbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ21lZGl1bScgJiYge1xuICAnJiA+ICo6bnRoLW9mLXR5cGUoMSknOiB7XG4gICAgZm9udFNpemU6IDIwXG4gIH1cbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ2xhcmdlJyAmJiB7XG4gICcmID4gKjpudGgtb2YtdHlwZSgxKSc6IHtcbiAgICBmb250U2l6ZTogMjJcbiAgfVxufSk7XG5jb25zdCBCdXR0b25Sb290ID0gc3R5bGVkKEJ1dHRvbkJhc2UsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aUJ1dHRvbicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XSwgc3R5bGVzW2Ake293bmVyU3RhdGUudmFyaWFudH0ke2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF0sIHN0eWxlc1tgc2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNpemUpfWBdLCBzdHlsZXNbYCR7b3duZXJTdGF0ZS52YXJpYW50fVNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5zaXplKX1gXSwgb3duZXJTdGF0ZS5jb2xvciA9PT0gJ2luaGVyaXQnICYmIHN0eWxlcy5jb2xvckluaGVyaXQsIG93bmVyU3RhdGUuZGlzYWJsZUVsZXZhdGlvbiAmJiBzdHlsZXMuZGlzYWJsZUVsZXZhdGlvbiwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYgc3R5bGVzLmZ1bGxXaWR0aF07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIHZhciBfdGhlbWUkcGFsZXR0ZSRnZXRDb24sIF90aGVtZSRwYWxldHRlO1xuICBjb25zdCBpbmhlcml0Q29udGFpbmVkQmFja2dyb3VuZENvbG9yID0gdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gdGhlbWUucGFsZXR0ZS5ncmV5WzMwMF0gOiB0aGVtZS5wYWxldHRlLmdyZXlbODAwXTtcbiAgY29uc3QgaW5oZXJpdENvbnRhaW5lZEhvdmVyQmFja2dyb3VuZENvbG9yID0gdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gdGhlbWUucGFsZXR0ZS5ncmV5LkExMDAgOiB0aGVtZS5wYWxldHRlLmdyZXlbNzAwXTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCB0aGVtZS50eXBvZ3JhcGh5LmJ1dHRvbiwge1xuICAgIG1pbldpZHRoOiA2NCxcbiAgICBwYWRkaW5nOiAnNnB4IDE2cHgnLFxuICAgIGJvcmRlclJhZGl1czogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYXBlLmJvcmRlclJhZGl1cyxcbiAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoWydiYWNrZ3JvdW5kLWNvbG9yJywgJ2JveC1zaGFkb3cnLCAnYm9yZGVyLWNvbG9yJywgJ2NvbG9yJ10sIHtcbiAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydFxuICAgIH0pLFxuICAgICcmOmhvdmVyJzogX2V4dGVuZHMoe1xuICAgICAgdGV4dERlY29yYXRpb246ICdub25lJyxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLnRleHQucHJpbWFyeUNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eX0pYCA6IGFscGhhKHRoZW1lLnBhbGV0dGUudGV4dC5wcmltYXJ5LCB0aGVtZS5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHkpLFxuICAgICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnXG4gICAgICB9XG4gICAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAndGV4dCcgJiYgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5DaGFubmVsfSAvICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHl9KWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eSksXG4gICAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICAgIH1cbiAgICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHtcbiAgICAgIGJvcmRlcjogYDFweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW59YCxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5DaGFubmVsfSAvICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHl9KWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eSksXG4gICAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICAgIH1cbiAgICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5CdXR0b24uaW5oZXJpdENvbnRhaW5lZEhvdmVyQmcgOiBpbmhlcml0Q29udGFpbmVkSG92ZXJCYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBib3hTaGFkb3c6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFkb3dzWzRdLFxuICAgICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgICAgYm94U2hhZG93OiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhZG93c1syXSxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5ncmV5WzMwMF1cbiAgICAgIH1cbiAgICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLmRhcmssXG4gICAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbiAgICAgIH1cbiAgICB9KSxcbiAgICAnJjphY3RpdmUnOiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnY29udGFpbmVkJyAmJiB7XG4gICAgICBib3hTaGFkb3c6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFkb3dzWzhdXG4gICAgfSksXG4gICAgW2AmLiR7YnV0dG9uQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIHtcbiAgICAgIGJveFNoYWRvdzogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYWRvd3NbNl1cbiAgICB9KSxcbiAgICBbYCYuJHtidXR0b25DbGFzc2VzLmRpc2FibGVkfWBdOiBfZXh0ZW5kcyh7XG4gICAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkXG4gICAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgICAgIGJvcmRlcjogYDFweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZEJhY2tncm91bmR9YFxuICAgIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZCxcbiAgICAgIGJveFNoYWRvdzogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYWRvd3NbMF0sXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZEJhY2tncm91bmRcbiAgICB9KVxuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICd0ZXh0JyAmJiB7XG4gICAgcGFkZGluZzogJzZweCA4cHgnXG4gIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ3RleHQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbiAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgICBwYWRkaW5nOiAnNXB4IDE1cHgnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCBjdXJyZW50Q29sb3InXG4gIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluLFxuICAgIGJvcmRlcjogdGhlbWUudmFycyA/IGAxcHggc29saWQgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluQ2hhbm5lbH0gLyAwLjUpYCA6IGAxcHggc29saWQgJHthbHBoYSh0aGVtZS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sIDAuNSl9YFxuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIHtcbiAgICBjb2xvcjogdGhlbWUudmFycyA/XG4gICAgLy8gdGhpcyBpcyBzYWZlIGJlY2F1c2UgZ3JleSBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBkZWZhdWx0IGxpZ2h0L2RhcmsgbW9kZVxuICAgIHRoZW1lLnZhcnMucGFsZXR0ZS50ZXh0LnByaW1hcnkgOiAoX3RoZW1lJHBhbGV0dGUkZ2V0Q29uID0gKF90aGVtZSRwYWxldHRlID0gdGhlbWUucGFsZXR0ZSkuZ2V0Q29udHJhc3RUZXh0KSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHBhbGV0dGUkZ2V0Q29uLmNhbGwoX3RoZW1lJHBhbGV0dGUsIHRoZW1lLnBhbGV0dGUuZ3JleVszMDBdKSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuQnV0dG9uLmluaGVyaXRDb250YWluZWRCZyA6IGluaGVyaXRDb250YWluZWRCYWNrZ3JvdW5kQ29sb3IsXG4gICAgYm94U2hhZG93OiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhZG93c1syXVxuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLmNvbnRyYXN0VGV4dCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbiAgfSwgb3duZXJTdGF0ZS5jb2xvciA9PT0gJ2luaGVyaXQnICYmIHtcbiAgICBjb2xvcjogJ2luaGVyaXQnLFxuICAgIGJvcmRlckNvbG9yOiAnY3VycmVudENvbG9yJ1xuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYgb3duZXJTdGF0ZS52YXJpYW50ID09PSAndGV4dCcgJiYge1xuICAgIHBhZGRpbmc6ICc0cHggNXB4JyxcbiAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDEzKVxuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdsYXJnZScgJiYgb3duZXJTdGF0ZS52YXJpYW50ID09PSAndGV4dCcgJiYge1xuICAgIHBhZGRpbmc6ICc4cHggMTFweCcsXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxNSlcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiB7XG4gICAgcGFkZGluZzogJzNweCA5cHgnLFxuICAgIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LnB4VG9SZW0oMTMpXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ2xhcmdlJyAmJiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICAgIHBhZGRpbmc6ICc3cHggMjFweCcsXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxNSlcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgIHBhZGRpbmc6ICc0cHggMTBweCcsXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxMylcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnbGFyZ2UnICYmIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgIHBhZGRpbmc6ICc4cHggMjJweCcsXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxNSlcbiAgfSwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYge1xuICAgIHdpZHRoOiAnMTAwJSdcbiAgfSk7XG59LCAoe1xuICBvd25lclN0YXRlXG59KSA9PiBvd25lclN0YXRlLmRpc2FibGVFbGV2YXRpb24gJiYge1xuICBib3hTaGFkb3c6ICdub25lJyxcbiAgJyY6aG92ZXInOiB7XG4gICAgYm94U2hhZG93OiAnbm9uZSdcbiAgfSxcbiAgW2AmLiR7YnV0dG9uQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IHtcbiAgICBib3hTaGFkb3c6ICdub25lJ1xuICB9LFxuICAnJjphY3RpdmUnOiB7XG4gICAgYm94U2hhZG93OiAnbm9uZSdcbiAgfSxcbiAgW2AmLiR7YnV0dG9uQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGJveFNoYWRvdzogJ25vbmUnXG4gIH1cbn0pO1xuY29uc3QgQnV0dG9uU3RhcnRJY29uID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpQnV0dG9uJyxcbiAgc2xvdDogJ1N0YXJ0SWNvbicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMuc3RhcnRJY29uLCBzdHlsZXNbYGljb25TaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2l6ZSl9YF1dO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmhlcml0JyxcbiAgbWFyZ2luUmlnaHQ6IDgsXG4gIG1hcmdpbkxlZnQ6IC00XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBtYXJnaW5MZWZ0OiAtMlxufSwgY29tbW9uSWNvblN0eWxlcyhvd25lclN0YXRlKSkpO1xuY29uc3QgQnV0dG9uRW5kSWNvbiA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aUJ1dHRvbicsXG4gIHNsb3Q6ICdFbmRJY29uJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5lbmRJY29uLCBzdHlsZXNbYGljb25TaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2l6ZSl9YF1dO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmhlcml0JyxcbiAgbWFyZ2luUmlnaHQ6IC00LFxuICBtYXJnaW5MZWZ0OiA4XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBtYXJnaW5SaWdodDogLTJcbn0sIGNvbW1vbkljb25TdHlsZXMob3duZXJTdGF0ZSkpKTtcbmNvbnN0IEJ1dHRvbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEJ1dHRvbihpblByb3BzLCByZWYpIHtcbiAgLy8gcHJvcHMgcHJpb3JpdHk6IGBpblByb3BzYCA+IGBjb250ZXh0UHJvcHNgID4gYHRoZW1lRGVmYXVsdFByb3BzYFxuICBjb25zdCBjb250ZXh0UHJvcHMgPSBSZWFjdC51c2VDb250ZXh0KEJ1dHRvbkdyb3VwQ29udGV4dCk7XG4gIGNvbnN0IGJ1dHRvbkdyb3VwQnV0dG9uQ29udGV4dFBvc2l0aW9uQ2xhc3NOYW1lID0gUmVhY3QudXNlQ29udGV4dChCdXR0b25Hcm91cEJ1dHRvbkNvbnRleHQpO1xuICBjb25zdCByZXNvbHZlZFByb3BzID0gcmVzb2x2ZVByb3BzKGNvbnRleHRQcm9wcywgaW5Qcm9wcyk7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IHJlc29sdmVkUHJvcHMsXG4gICAgbmFtZTogJ011aUJ1dHRvbidcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgICBjb21wb25lbnQgPSAnYnV0dG9uJyxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgICBkaXNhYmxlRWxldmF0aW9uID0gZmFsc2UsXG4gICAgICBkaXNhYmxlRm9jdXNSaXBwbGUgPSBmYWxzZSxcbiAgICAgIGVuZEljb246IGVuZEljb25Qcm9wLFxuICAgICAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lLFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICBzaXplID0gJ21lZGl1bScsXG4gICAgICBzdGFydEljb246IHN0YXJ0SWNvblByb3AsXG4gICAgICB0eXBlLFxuICAgICAgdmFyaWFudCA9ICd0ZXh0J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3IsXG4gICAgY29tcG9uZW50LFxuICAgIGRpc2FibGVkLFxuICAgIGRpc2FibGVFbGV2YXRpb24sXG4gICAgZGlzYWJsZUZvY3VzUmlwcGxlLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBzaXplLFxuICAgIHR5cGUsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBzdGFydEljb24gPSBzdGFydEljb25Qcm9wICYmIC8qI19fUFVSRV9fKi9fanN4KEJ1dHRvblN0YXJ0SWNvbiwge1xuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5zdGFydEljb24sXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjaGlsZHJlbjogc3RhcnRJY29uUHJvcFxuICB9KTtcbiAgY29uc3QgZW5kSWNvbiA9IGVuZEljb25Qcm9wICYmIC8qI19fUFVSRV9fKi9fanN4KEJ1dHRvbkVuZEljb24sIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMuZW5kSWNvbixcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNoaWxkcmVuOiBlbmRJY29uUHJvcFxuICB9KTtcbiAgY29uc3QgcG9zaXRpb25DbGFzc05hbWUgPSBidXR0b25Hcm91cEJ1dHRvbkNvbnRleHRQb3NpdGlvbkNsYXNzTmFtZSB8fCAnJztcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhCdXR0b25Sb290LCBfZXh0ZW5kcyh7XG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY29udGV4dFByb3BzLmNsYXNzTmFtZSwgY2xhc3Nlcy5yb290LCBjbGFzc05hbWUsIHBvc2l0aW9uQ2xhc3NOYW1lKSxcbiAgICBjb21wb25lbnQ6IGNvbXBvbmVudCxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgZm9jdXNSaXBwbGU6ICFkaXNhYmxlRm9jdXNSaXBwbGUsXG4gICAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMuZm9jdXNWaXNpYmxlLCBmb2N1c1Zpc2libGVDbGFzc05hbWUpLFxuICAgIHJlZjogcmVmLFxuICAgIHR5cGU6IHR5cGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjbGFzc2VzOiBjbGFzc2VzLFxuICAgIGNoaWxkcmVuOiBbc3RhcnRJY29uLCBjaGlsZHJlbiwgZW5kSWNvbl1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBCdXR0b24ucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBAZGVmYXVsdCAncHJpbWFyeSdcbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2luaGVyaXQnLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnc3VjY2VzcycsICdlcnJvcicsICdpbmZvJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBubyBlbGV2YXRpb24gaXMgdXNlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVFbGV2YXRpb246IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgIGtleWJvYXJkIGZvY3VzIHJpcHBsZSBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVGb2N1c1JpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgZWZmZWN0IGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiDimqDvuI8gV2l0aG91dCBhIHJpcHBsZSB0aGVyZSBpcyBubyBzdHlsaW5nIGZvciA6Zm9jdXMtdmlzaWJsZSBieSBkZWZhdWx0LiBCZSBzdXJlXG4gICAqIHRvIGhpZ2hsaWdodCB0aGUgZWxlbWVudCBieSBhcHBseWluZyBzZXBhcmF0ZSBzdHlsZXMgd2l0aCB0aGUgYC5NdWktZm9jdXNWaXNpYmxlYCBjbGFzcy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogRWxlbWVudCBwbGFjZWQgYWZ0ZXIgdGhlIGNoaWxkcmVuLlxuICAgKi9cbiAgZW5kSWNvbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBmb2N1c1Zpc2libGVDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBidXR0b24gd2lsbCB0YWtlIHVwIHRoZSBmdWxsIHdpZHRoIG9mIGl0cyBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIFVSTCB0byBsaW5rIHRvIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkLlxuICAgKiBJZiBkZWZpbmVkLCBhbiBgYWAgZWxlbWVudCB3aWxsIGJlIHVzZWQgYXMgdGhlIHJvb3Qgbm9kZS5cbiAgICovXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBgc21hbGxgIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGRlbnNlIGJ1dHRvbiBzdHlsaW5nLlxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydzbWFsbCcsICdtZWRpdW0nLCAnbGFyZ2UnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIEVsZW1lbnQgcGxhY2VkIGJlZm9yZSB0aGUgY2hpbGRyZW4uXG4gICAqL1xuICBzdGFydEljb246IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYnV0dG9uJywgJ3Jlc2V0JywgJ3N1Ym1pdCddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKiBAZGVmYXVsdCAndGV4dCdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnY29udGFpbmVkJywgJ291dGxpbmVkJywgJ3RleHQnXSksIFByb3BUeXBlcy5zdHJpbmddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbjsiLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VG91Y2hSaXBwbGVVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVRvdWNoUmlwcGxlJywgc2xvdCk7XG59XG5jb25zdCB0b3VjaFJpcHBsZUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlUb3VjaFJpcHBsZScsIFsncm9vdCcsICdyaXBwbGUnLCAncmlwcGxlVmlzaWJsZScsICdyaXBwbGVQdWxzYXRlJywgJ2NoaWxkJywgJ2NoaWxkTGVhdmluZycsICdjaGlsZFB1bHNhdGUnXSk7XG5leHBvcnQgZGVmYXVsdCB0b3VjaFJpcHBsZUNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2VudGVyXCIsIFwiY2xhc3Nlc1wiLCBcImNsYXNzTmFtZVwiXTtcbmxldCBfID0gdCA9PiB0LFxuICBfdCxcbiAgX3QyLFxuICBfdDMsXG4gIF90NDtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBUcmFuc2l0aW9uR3JvdXAgfSBmcm9tICdyZWFjdC10cmFuc2l0aW9uLWdyb3VwJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsga2V5ZnJhbWVzIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBSaXBwbGUgZnJvbSAnLi9SaXBwbGUnO1xuaW1wb3J0IHRvdWNoUmlwcGxlQ2xhc3NlcyBmcm9tICcuL3RvdWNoUmlwcGxlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgRFVSQVRJT04gPSA1NTA7XG5leHBvcnQgY29uc3QgREVMQVlfUklQUExFID0gODA7XG5jb25zdCBlbnRlcktleWZyYW1lID0ga2V5ZnJhbWVzKF90IHx8IChfdCA9IF9gXG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDApO1xuICAgIG9wYWNpdHk6IDAuMTtcbiAgfVxuXG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgb3BhY2l0eTogMC4zO1xuICB9XG5gKSk7XG5jb25zdCBleGl0S2V5ZnJhbWUgPSBrZXlmcmFtZXMoX3QyIHx8IChfdDIgPSBfYFxuICAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbmApKTtcbmNvbnN0IHB1bHNhdGVLZXlmcmFtZSA9IGtleWZyYW1lcyhfdDMgfHwgKF90MyA9IF9gXG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG5cbiAgNTAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTIpO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxuYCkpO1xuZXhwb3J0IGNvbnN0IFRvdWNoUmlwcGxlUm9vdCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aVRvdWNoUmlwcGxlJyxcbiAgc2xvdDogJ1Jvb3QnXG59KSh7XG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgekluZGV4OiAwLFxuICB0b3A6IDAsXG4gIHJpZ2h0OiAwLFxuICBib3R0b206IDAsXG4gIGxlZnQ6IDAsXG4gIGJvcmRlclJhZGl1czogJ2luaGVyaXQnXG59KTtcblxuLy8gVGhpcyBgc3R5bGVkKClgIGZ1bmN0aW9uIGludm9rZXMga2V5ZnJhbWVzLiBgc3R5bGVkLWNvbXBvbmVudHNgIG9ubHkgc3VwcG9ydHMga2V5ZnJhbWVzXG4vLyBpbiBzdHJpbmcgdGVtcGxhdGVzLiBEbyBub3QgY29udmVydCB0aGVzZSBzdHlsZXMgaW4gSlMgb2JqZWN0IGFzIGl0IHdpbGwgYnJlYWsuXG5leHBvcnQgY29uc3QgVG91Y2hSaXBwbGVSaXBwbGUgPSBzdHlsZWQoUmlwcGxlLCB7XG4gIG5hbWU6ICdNdWlUb3VjaFJpcHBsZScsXG4gIHNsb3Q6ICdSaXBwbGUnXG59KShfdDQgfHwgKF90NCA9IF9gXG4gIG9wYWNpdHk6IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcblxuICAmLiR7MH0ge1xuICAgIG9wYWNpdHk6IDAuMztcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIGFuaW1hdGlvbi1uYW1lOiAkezB9O1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogJHswfW1zO1xuICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICR7MH07XG4gIH1cblxuICAmLiR7MH0ge1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogJHswfW1zO1xuICB9XG5cbiAgJiAuJHswfSB7XG4gICAgb3BhY2l0eTogMTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgfVxuXG4gICYgLiR7MH0ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgYW5pbWF0aW9uLW5hbWU6ICR7MH07XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAkezB9bXM7XG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogJHswfTtcbiAgfVxuXG4gICYgLiR7MH0ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAvKiBAbm9mbGlwICovXG4gICAgbGVmdDogMHB4O1xuICAgIHRvcDogMDtcbiAgICBhbmltYXRpb24tbmFtZTogJHswfTtcbiAgICBhbmltYXRpb24tZHVyYXRpb246IDI1MDBtcztcbiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkezB9O1xuICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xuICAgIGFuaW1hdGlvbi1kZWxheTogMjAwbXM7XG4gIH1cbmApLCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlVmlzaWJsZSwgZW50ZXJLZXlmcmFtZSwgRFVSQVRJT04sICh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZUluT3V0LCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlUHVsc2F0ZSwgKHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXIsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZCwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkTGVhdmluZywgZXhpdEtleWZyYW1lLCBEVVJBVElPTiwgKHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlSW5PdXQsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZFB1bHNhdGUsIHB1bHNhdGVLZXlmcmFtZSwgKHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlSW5PdXQpO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKlxuICogVE9ETyB2NTogTWFrZSBwcml2YXRlXG4gKi9cbmNvbnN0IFRvdWNoUmlwcGxlID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gVG91Y2hSaXBwbGUoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVRvdWNoUmlwcGxlJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2VudGVyOiBjZW50ZXJQcm9wID0gZmFsc2UsXG4gICAgICBjbGFzc2VzID0ge30sXG4gICAgICBjbGFzc05hbWVcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgW3JpcHBsZXMsIHNldFJpcHBsZXNdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICBjb25zdCBuZXh0S2V5ID0gUmVhY3QudXNlUmVmKDApO1xuICBjb25zdCByaXBwbGVDYWxsYmFjayA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocmlwcGxlQ2FsbGJhY2suY3VycmVudCkge1xuICAgICAgcmlwcGxlQ2FsbGJhY2suY3VycmVudCgpO1xuICAgICAgcmlwcGxlQ2FsbGJhY2suY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9LCBbcmlwcGxlc10pO1xuXG4gIC8vIFVzZWQgdG8gZmlsdGVyIG91dCBtb3VzZSBlbXVsYXRlZCBldmVudHMgb24gbW9iaWxlLlxuICBjb25zdCBpZ25vcmluZ01vdXNlRG93biA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIC8vIFdlIHVzZSBhIHRpbWVyIGluIG9yZGVyIHRvIG9ubHkgc2hvdyB0aGUgcmlwcGxlcyBmb3IgdG91Y2ggXCJjbGlja1wiIGxpa2UgZXZlbnRzLlxuICAvLyBXZSBkb24ndCB3YW50IHRvIGRpc3BsYXkgdGhlIHJpcHBsZSBmb3IgdG91Y2ggc2Nyb2xsIGV2ZW50cy5cbiAgY29uc3Qgc3RhcnRUaW1lciA9IFJlYWN0LnVzZVJlZigwKTtcblxuICAvLyBUaGlzIGlzIHRoZSBob29rIGNhbGxlZCBvbmNlIHRoZSBwcmV2aW91cyB0aW1lb3V0IGlzIHJlYWR5LlxuICBjb25zdCBzdGFydFRpbWVyQ29tbWl0ID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBjb250YWluZXIgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChzdGFydFRpbWVyLmN1cnJlbnQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHN0YXJ0VGltZXIuY3VycmVudCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW10pO1xuICBjb25zdCBzdGFydENvbW1pdCA9IFJlYWN0LnVzZUNhbGxiYWNrKHBhcmFtcyA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcHVsc2F0ZSxcbiAgICAgIHJpcHBsZVgsXG4gICAgICByaXBwbGVZLFxuICAgICAgcmlwcGxlU2l6ZSxcbiAgICAgIGNiXG4gICAgfSA9IHBhcmFtcztcbiAgICBzZXRSaXBwbGVzKG9sZFJpcHBsZXMgPT4gWy4uLm9sZFJpcHBsZXMsIC8qI19fUFVSRV9fKi9fanN4KFRvdWNoUmlwcGxlUmlwcGxlLCB7XG4gICAgICBjbGFzc2VzOiB7XG4gICAgICAgIHJpcHBsZTogY2xzeChjbGFzc2VzLnJpcHBsZSwgdG91Y2hSaXBwbGVDbGFzc2VzLnJpcHBsZSksXG4gICAgICAgIHJpcHBsZVZpc2libGU6IGNsc3goY2xhc3Nlcy5yaXBwbGVWaXNpYmxlLCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlVmlzaWJsZSksXG4gICAgICAgIHJpcHBsZVB1bHNhdGU6IGNsc3goY2xhc3Nlcy5yaXBwbGVQdWxzYXRlLCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlUHVsc2F0ZSksXG4gICAgICAgIGNoaWxkOiBjbHN4KGNsYXNzZXMuY2hpbGQsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZCksXG4gICAgICAgIGNoaWxkTGVhdmluZzogY2xzeChjbGFzc2VzLmNoaWxkTGVhdmluZywgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkTGVhdmluZyksXG4gICAgICAgIGNoaWxkUHVsc2F0ZTogY2xzeChjbGFzc2VzLmNoaWxkUHVsc2F0ZSwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkUHVsc2F0ZSlcbiAgICAgIH0sXG4gICAgICB0aW1lb3V0OiBEVVJBVElPTixcbiAgICAgIHB1bHNhdGU6IHB1bHNhdGUsXG4gICAgICByaXBwbGVYOiByaXBwbGVYLFxuICAgICAgcmlwcGxlWTogcmlwcGxlWSxcbiAgICAgIHJpcHBsZVNpemU6IHJpcHBsZVNpemVcbiAgICB9LCBuZXh0S2V5LmN1cnJlbnQpXSk7XG4gICAgbmV4dEtleS5jdXJyZW50ICs9IDE7XG4gICAgcmlwcGxlQ2FsbGJhY2suY3VycmVudCA9IGNiO1xuICB9LCBbY2xhc3Nlc10pO1xuICBjb25zdCBzdGFydCA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCA9IHt9LCBvcHRpb25zID0ge30sIGNiID0gKCkgPT4ge30pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBwdWxzYXRlID0gZmFsc2UsXG4gICAgICBjZW50ZXIgPSBjZW50ZXJQcm9wIHx8IG9wdGlvbnMucHVsc2F0ZSxcbiAgICAgIGZha2VFbGVtZW50ID0gZmFsc2UgLy8gRm9yIHRlc3QgcHVycG9zZXNcbiAgICB9ID0gb3B0aW9ucztcbiAgICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gJ21vdXNlZG93bicgJiYgaWdub3JpbmdNb3VzZURvd24uY3VycmVudCkge1xuICAgICAgaWdub3JpbmdNb3VzZURvd24uY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gJ3RvdWNoc3RhcnQnKSB7XG4gICAgICBpZ25vcmluZ01vdXNlRG93bi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudCA9IGZha2VFbGVtZW50ID8gbnVsbCA6IGNvbnRhaW5lci5jdXJyZW50O1xuICAgIGNvbnN0IHJlY3QgPSBlbGVtZW50ID8gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA6IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogMCxcbiAgICAgIHRvcDogMFxuICAgIH07XG5cbiAgICAvLyBHZXQgdGhlIHNpemUgb2YgdGhlIHJpcHBsZVxuICAgIGxldCByaXBwbGVYO1xuICAgIGxldCByaXBwbGVZO1xuICAgIGxldCByaXBwbGVTaXplO1xuICAgIGlmIChjZW50ZXIgfHwgZXZlbnQgPT09IHVuZGVmaW5lZCB8fCBldmVudC5jbGllbnRYID09PSAwICYmIGV2ZW50LmNsaWVudFkgPT09IDAgfHwgIWV2ZW50LmNsaWVudFggJiYgIWV2ZW50LnRvdWNoZXMpIHtcbiAgICAgIHJpcHBsZVggPSBNYXRoLnJvdW5kKHJlY3Qud2lkdGggLyAyKTtcbiAgICAgIHJpcHBsZVkgPSBNYXRoLnJvdW5kKHJlY3QuaGVpZ2h0IC8gMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2xpZW50WCxcbiAgICAgICAgY2xpZW50WVxuICAgICAgfSA9IGV2ZW50LnRvdWNoZXMgJiYgZXZlbnQudG91Y2hlcy5sZW5ndGggPiAwID8gZXZlbnQudG91Y2hlc1swXSA6IGV2ZW50O1xuICAgICAgcmlwcGxlWCA9IE1hdGgucm91bmQoY2xpZW50WCAtIHJlY3QubGVmdCk7XG4gICAgICByaXBwbGVZID0gTWF0aC5yb3VuZChjbGllbnRZIC0gcmVjdC50b3ApO1xuICAgIH1cbiAgICBpZiAoY2VudGVyKSB7XG4gICAgICByaXBwbGVTaXplID0gTWF0aC5zcXJ0KCgyICogcmVjdC53aWR0aCAqKiAyICsgcmVjdC5oZWlnaHQgKiogMikgLyAzKTtcblxuICAgICAgLy8gRm9yIHNvbWUgcmVhc29uIHRoZSBhbmltYXRpb24gaXMgYnJva2VuIG9uIE1vYmlsZSBDaHJvbWUgaWYgdGhlIHNpemUgaXMgZXZlbi5cbiAgICAgIGlmIChyaXBwbGVTaXplICUgMiA9PT0gMCkge1xuICAgICAgICByaXBwbGVTaXplICs9IDE7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNpemVYID0gTWF0aC5tYXgoTWF0aC5hYnMoKGVsZW1lbnQgPyBlbGVtZW50LmNsaWVudFdpZHRoIDogMCkgLSByaXBwbGVYKSwgcmlwcGxlWCkgKiAyICsgMjtcbiAgICAgIGNvbnN0IHNpemVZID0gTWF0aC5tYXgoTWF0aC5hYnMoKGVsZW1lbnQgPyBlbGVtZW50LmNsaWVudEhlaWdodCA6IDApIC0gcmlwcGxlWSksIHJpcHBsZVkpICogMiArIDI7XG4gICAgICByaXBwbGVTaXplID0gTWF0aC5zcXJ0KHNpemVYICoqIDIgKyBzaXplWSAqKiAyKTtcbiAgICB9XG5cbiAgICAvLyBUb3VjaGUgZGV2aWNlc1xuICAgIGlmIChldmVudCAhPSBudWxsICYmIGV2ZW50LnRvdWNoZXMpIHtcbiAgICAgIC8vIGNoZWNrIHRoYXQgdGhpcyBpc24ndCBhbm90aGVyIHRvdWNoc3RhcnQgZHVlIHRvIG11bHRpdG91Y2hcbiAgICAgIC8vIG90aGVyd2lzZSB3ZSB3aWxsIG9ubHkgY2xlYXIgYSBzaW5nbGUgdGltZXIgd2hlbiB1bm1vdW50aW5nIHdoaWxlIHR3b1xuICAgICAgLy8gYXJlIHJ1bm5pbmdcbiAgICAgIGlmIChzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgLy8gUHJlcGFyZSB0aGUgcmlwcGxlIGVmZmVjdC5cbiAgICAgICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID0gKCkgPT4ge1xuICAgICAgICAgIHN0YXJ0Q29tbWl0KHtcbiAgICAgICAgICAgIHB1bHNhdGUsXG4gICAgICAgICAgICByaXBwbGVYLFxuICAgICAgICAgICAgcmlwcGxlWSxcbiAgICAgICAgICAgIHJpcHBsZVNpemUsXG4gICAgICAgICAgICBjYlxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICAvLyBEZWxheSB0aGUgZXhlY3V0aW9uIG9mIHRoZSByaXBwbGUgZWZmZWN0LlxuICAgICAgICBzdGFydFRpbWVyLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAoc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50KSB7XG4gICAgICAgICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQoKTtcbiAgICAgICAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBERUxBWV9SSVBQTEUpOyAvLyBXZSBoYXZlIHRvIG1ha2UgYSB0cmFkZW9mZiB3aXRoIHRoaXMgdmFsdWUuXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0Q29tbWl0KHtcbiAgICAgICAgcHVsc2F0ZSxcbiAgICAgICAgcmlwcGxlWCxcbiAgICAgICAgcmlwcGxlWSxcbiAgICAgICAgcmlwcGxlU2l6ZSxcbiAgICAgICAgY2JcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2NlbnRlclByb3AsIHN0YXJ0Q29tbWl0XSk7XG4gIGNvbnN0IHB1bHNhdGUgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc3RhcnQoe30sIHtcbiAgICAgIHB1bHNhdGU6IHRydWVcbiAgICB9KTtcbiAgfSwgW3N0YXJ0XSk7XG4gIGNvbnN0IHN0b3AgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQsIGNiKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KHN0YXJ0VGltZXIuY3VycmVudCk7XG5cbiAgICAvLyBUaGUgdG91Y2ggaW50ZXJhY3Rpb24gb2NjdXJzIHRvbyBxdWlja2x5LlxuICAgIC8vIFdlIHN0aWxsIHdhbnQgdG8gc2hvdyByaXBwbGUgZWZmZWN0LlxuICAgIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSAndG91Y2hlbmQnICYmIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCkge1xuICAgICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50KCk7XG4gICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQgPSBudWxsO1xuICAgICAgc3RhcnRUaW1lci5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHN0b3AoZXZlbnQsIGNiKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQgPSBudWxsO1xuICAgIHNldFJpcHBsZXMob2xkUmlwcGxlcyA9PiB7XG4gICAgICBpZiAob2xkUmlwcGxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBvbGRSaXBwbGVzLnNsaWNlKDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9sZFJpcHBsZXM7XG4gICAgfSk7XG4gICAgcmlwcGxlQ2FsbGJhY2suY3VycmVudCA9IGNiO1xuICB9LCBbXSk7XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgIHB1bHNhdGUsXG4gICAgc3RhcnQsXG4gICAgc3RvcFxuICB9KSwgW3B1bHNhdGUsIHN0YXJ0LCBzdG9wXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUb3VjaFJpcHBsZVJvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3godG91Y2hSaXBwbGVDbGFzc2VzLnJvb3QsIGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IGNvbnRhaW5lclxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChUcmFuc2l0aW9uR3JvdXAsIHtcbiAgICAgIGNvbXBvbmVudDogbnVsbCxcbiAgICAgIGV4aXQ6IHRydWUsXG4gICAgICBjaGlsZHJlbjogcmlwcGxlc1xuICAgIH0pXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVG91Y2hSaXBwbGUucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlIHN0YXJ0cyBhdCB0aGUgY2VudGVyIG9mIHRoZSBjb21wb25lbnRcbiAgICogcmF0aGVyIHRoYW4gYXQgdGhlIHBvaW50IG9mIGludGVyYWN0aW9uLlxuICAgKi9cbiAgY2VudGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICogU2VlIFtDU1MgQVBJXSgjY3NzKSBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFRvdWNoUmlwcGxlOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBSaXBwbGUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZSxcbiAgICBjbGFzc2VzLFxuICAgIHB1bHNhdGUgPSBmYWxzZSxcbiAgICByaXBwbGVYLFxuICAgIHJpcHBsZVksXG4gICAgcmlwcGxlU2l6ZSxcbiAgICBpbjogaW5Qcm9wLFxuICAgIG9uRXhpdGVkLFxuICAgIHRpbWVvdXRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBbbGVhdmluZywgc2V0TGVhdmluZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHJpcHBsZUNsYXNzTmFtZSA9IGNsc3goY2xhc3NOYW1lLCBjbGFzc2VzLnJpcHBsZSwgY2xhc3Nlcy5yaXBwbGVWaXNpYmxlLCBwdWxzYXRlICYmIGNsYXNzZXMucmlwcGxlUHVsc2F0ZSk7XG4gIGNvbnN0IHJpcHBsZVN0eWxlcyA9IHtcbiAgICB3aWR0aDogcmlwcGxlU2l6ZSxcbiAgICBoZWlnaHQ6IHJpcHBsZVNpemUsXG4gICAgdG9wOiAtKHJpcHBsZVNpemUgLyAyKSArIHJpcHBsZVksXG4gICAgbGVmdDogLShyaXBwbGVTaXplIC8gMikgKyByaXBwbGVYXG4gIH07XG4gIGNvbnN0IGNoaWxkQ2xhc3NOYW1lID0gY2xzeChjbGFzc2VzLmNoaWxkLCBsZWF2aW5nICYmIGNsYXNzZXMuY2hpbGRMZWF2aW5nLCBwdWxzYXRlICYmIGNsYXNzZXMuY2hpbGRQdWxzYXRlKTtcbiAgaWYgKCFpblByb3AgJiYgIWxlYXZpbmcpIHtcbiAgICBzZXRMZWF2aW5nKHRydWUpO1xuICB9XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpblByb3AgJiYgb25FeGl0ZWQgIT0gbnVsbCkge1xuICAgICAgLy8gcmVhY3QtdHJhbnNpdGlvbi1ncm91cCNvbkV4aXRlZFxuICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dChvbkV4aXRlZCwgdGltZW91dCk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtvbkV4aXRlZCwgaW5Qcm9wLCB0aW1lb3V0XSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogcmlwcGxlQ2xhc3NOYW1lLFxuICAgIHN0eWxlOiByaXBwbGVTdHlsZXMsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgICBjbGFzc05hbWU6IGNoaWxkQ2xhc3NOYW1lXG4gICAgfSlcbiAgfSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBSaXBwbGUucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBTZWUgW0NTUyBBUEldKCNjc3MpIGJlbG93IGZvciBtb3JlIGRldGFpbHMuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmUgLSBpbmplY3RlZCBmcm9tIFRyYW5zaXRpb25Hcm91cFxuICAgKi9cbiAgaW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZSAtIGluamVjdGVkIGZyb20gVHJhbnNpdGlvbkdyb3VwXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgcHVsc2F0ZXMsIHR5cGljYWxseSBpbmRpY2F0aW5nIHRoZSBrZXlib2FyZCBmb2N1cyBzdGF0ZSBvZiBhbiBlbGVtZW50LlxuICAgKi9cbiAgcHVsc2F0ZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBEaWFtZXRlciBvZiB0aGUgcmlwcGxlLlxuICAgKi9cbiAgcmlwcGxlU2l6ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIEhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHJpcHBsZSBjZW50ZXIuXG4gICAqL1xuICByaXBwbGVYOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogVmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHJpcHBsZSBjZW50ZXIuXG4gICAqL1xuICByaXBwbGVZOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogZXhpdCBkZWxheVxuICAgKi9cbiAgdGltZW91dDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgUmlwcGxlOyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRCdXR0b25CYXNlVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlCdXR0b25CYXNlJywgc2xvdCk7XG59XG5jb25zdCBidXR0b25CYXNlQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUJ1dHRvbkJhc2UnLCBbJ3Jvb3QnLCAnZGlzYWJsZWQnLCAnZm9jdXNWaXNpYmxlJ10pO1xuZXhwb3J0IGRlZmF1bHQgYnV0dG9uQmFzZUNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWN0aW9uXCIsIFwiY2VudGVyUmlwcGxlXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJkaXNhYmxlZFwiLCBcImRpc2FibGVSaXBwbGVcIiwgXCJkaXNhYmxlVG91Y2hSaXBwbGVcIiwgXCJmb2N1c1JpcHBsZVwiLCBcImZvY3VzVmlzaWJsZUNsYXNzTmFtZVwiLCBcIkxpbmtDb21wb25lbnRcIiwgXCJvbkJsdXJcIiwgXCJvbkNsaWNrXCIsIFwib25Db250ZXh0TWVudVwiLCBcIm9uRHJhZ0xlYXZlXCIsIFwib25Gb2N1c1wiLCBcIm9uRm9jdXNWaXNpYmxlXCIsIFwib25LZXlEb3duXCIsIFwib25LZXlVcFwiLCBcIm9uTW91c2VEb3duXCIsIFwib25Nb3VzZUxlYXZlXCIsIFwib25Nb3VzZVVwXCIsIFwib25Ub3VjaEVuZFwiLCBcIm9uVG91Y2hNb3ZlXCIsIFwib25Ub3VjaFN0YXJ0XCIsIFwidGFiSW5kZXhcIiwgXCJUb3VjaFJpcHBsZVByb3BzXCIsIFwidG91Y2hSaXBwbGVSZWZcIiwgXCJ0eXBlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYsIHJlZlR5cGUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB1c2VFdmVudENhbGxiYWNrIGZyb20gJy4uL3V0aWxzL3VzZUV2ZW50Q2FsbGJhY2snO1xuaW1wb3J0IHVzZUlzRm9jdXNWaXNpYmxlIGZyb20gJy4uL3V0aWxzL3VzZUlzRm9jdXNWaXNpYmxlJztcbmltcG9ydCBUb3VjaFJpcHBsZSBmcm9tICcuL1RvdWNoUmlwcGxlJztcbmltcG9ydCBidXR0b25CYXNlQ2xhc3NlcywgeyBnZXRCdXR0b25CYXNlVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9idXR0b25CYXNlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGRpc2FibGVkLFxuICAgIGZvY3VzVmlzaWJsZSxcbiAgICBmb2N1c1Zpc2libGVDbGFzc05hbWUsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgZm9jdXNWaXNpYmxlICYmICdmb2N1c1Zpc2libGUnXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0QnV0dG9uQmFzZVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG4gIGlmIChmb2N1c1Zpc2libGUgJiYgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lKSB7XG4gICAgY29tcG9zZWRDbGFzc2VzLnJvb3QgKz0gYCAke2ZvY3VzVmlzaWJsZUNsYXNzTmFtZX1gO1xuICB9XG4gIHJldHVybiBjb21wb3NlZENsYXNzZXM7XG59O1xuZXhwb3J0IGNvbnN0IEJ1dHRvbkJhc2VSb290ID0gc3R5bGVkKCdidXR0b24nLCB7XG4gIG5hbWU6ICdNdWlCdXR0b25CYXNlJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG59KSh7XG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6ICd0cmFuc3BhcmVudCcsXG4gIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgLy8gUmVzZXQgZGVmYXVsdCB2YWx1ZVxuICAvLyBXZSBkaXNhYmxlIHRoZSBmb2N1cyByaW5nIGZvciBtb3VzZSwgdG91Y2ggYW5kIGtleWJvYXJkIHVzZXJzLlxuICBvdXRsaW5lOiAwLFxuICBib3JkZXI6IDAsXG4gIG1hcmdpbjogMCxcbiAgLy8gUmVtb3ZlIHRoZSBtYXJnaW4gaW4gU2FmYXJpXG4gIGJvcmRlclJhZGl1czogMCxcbiAgcGFkZGluZzogMCxcbiAgLy8gUmVtb3ZlIHRoZSBwYWRkaW5nIGluIEZpcmVmb3hcbiAgY3Vyc29yOiAncG9pbnRlcicsXG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgdmVydGljYWxBbGlnbjogJ21pZGRsZScsXG4gIE1vekFwcGVhcmFuY2U6ICdub25lJyxcbiAgLy8gUmVzZXRcbiAgV2Via2l0QXBwZWFyYW5jZTogJ25vbmUnLFxuICAvLyBSZXNldFxuICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICAvLyBTbyB3ZSB0YWtlIHByZWNlZGVudCBvdmVyIHRoZSBzdHlsZSBvZiBhIG5hdGl2ZSA8YSAvPiBlbGVtZW50LlxuICBjb2xvcjogJ2luaGVyaXQnLFxuICAnJjo6LW1vei1mb2N1cy1pbm5lcic6IHtcbiAgICBib3JkZXJTdHlsZTogJ25vbmUnIC8vIFJlbW92ZSBGaXJlZm94IGRvdHRlZCBvdXRsaW5lLlxuICB9LFxuXG4gIFtgJi4ke2J1dHRvbkJhc2VDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgIC8vIERpc2FibGUgbGluayBpbnRlcmFjdGlvbnNcbiAgICBjdXJzb3I6ICdkZWZhdWx0J1xuICB9LFxuICAnQG1lZGlhIHByaW50Jzoge1xuICAgIGNvbG9yQWRqdXN0OiAnZXhhY3QnXG4gIH1cbn0pO1xuXG4vKipcbiAqIGBCdXR0b25CYXNlYCBjb250YWlucyBhcyBmZXcgc3R5bGVzIGFzIHBvc3NpYmxlLlxuICogSXQgYWltcyB0byBiZSBhIHNpbXBsZSBidWlsZGluZyBibG9jayBmb3IgY3JlYXRpbmcgYSBidXR0b24uXG4gKiBJdCBjb250YWlucyBhIGxvYWQgb2Ygc3R5bGUgcmVzZXQgYW5kIHNvbWUgZm9jdXMvcmlwcGxlIGxvZ2ljLlxuICovXG5jb25zdCBCdXR0b25CYXNlID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQnV0dG9uQmFzZShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpQnV0dG9uQmFzZSdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNlbnRlclJpcHBsZSA9IGZhbHNlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQgPSAnYnV0dG9uJyxcbiAgICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgICBkaXNhYmxlUmlwcGxlID0gZmFsc2UsXG4gICAgICBkaXNhYmxlVG91Y2hSaXBwbGUgPSBmYWxzZSxcbiAgICAgIGZvY3VzUmlwcGxlID0gZmFsc2UsXG4gICAgICBMaW5rQ29tcG9uZW50ID0gJ2EnLFxuICAgICAgb25CbHVyLFxuICAgICAgb25DbGljayxcbiAgICAgIG9uQ29udGV4dE1lbnUsXG4gICAgICBvbkRyYWdMZWF2ZSxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbkZvY3VzVmlzaWJsZSxcbiAgICAgIG9uS2V5RG93bixcbiAgICAgIG9uS2V5VXAsXG4gICAgICBvbk1vdXNlRG93bixcbiAgICAgIG9uTW91c2VMZWF2ZSxcbiAgICAgIG9uTW91c2VVcCxcbiAgICAgIG9uVG91Y2hFbmQsXG4gICAgICBvblRvdWNoTW92ZSxcbiAgICAgIG9uVG91Y2hTdGFydCxcbiAgICAgIHRhYkluZGV4ID0gMCxcbiAgICAgIFRvdWNoUmlwcGxlUHJvcHMsXG4gICAgICB0b3VjaFJpcHBsZVJlZixcbiAgICAgIHR5cGVcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgYnV0dG9uUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCByaXBwbGVSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZVJpcHBsZVJlZiA9IHVzZUZvcmtSZWYocmlwcGxlUmVmLCB0b3VjaFJpcHBsZVJlZik7XG4gIGNvbnN0IHtcbiAgICBpc0ZvY3VzVmlzaWJsZVJlZixcbiAgICBvbkZvY3VzOiBoYW5kbGVGb2N1c1Zpc2libGUsXG4gICAgb25CbHVyOiBoYW5kbGVCbHVyVmlzaWJsZSxcbiAgICByZWY6IGZvY3VzVmlzaWJsZVJlZlxuICB9ID0gdXNlSXNGb2N1c1Zpc2libGUoKTtcbiAgY29uc3QgW2ZvY3VzVmlzaWJsZSwgc2V0Rm9jdXNWaXNpYmxlXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgaWYgKGRpc2FibGVkICYmIGZvY3VzVmlzaWJsZSkge1xuICAgIHNldEZvY3VzVmlzaWJsZShmYWxzZSk7XG4gIH1cbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShhY3Rpb24sICgpID0+ICh7XG4gICAgZm9jdXNWaXNpYmxlOiAoKSA9PiB7XG4gICAgICBzZXRGb2N1c1Zpc2libGUodHJ1ZSk7XG4gICAgICBidXR0b25SZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgfSksIFtdKTtcbiAgY29uc3QgW21vdW50ZWRTdGF0ZSwgc2V0TW91bnRlZFN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRNb3VudGVkU3RhdGUodHJ1ZSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgZW5hYmxlVG91Y2hSaXBwbGUgPSBtb3VudGVkU3RhdGUgJiYgIWRpc2FibGVSaXBwbGUgJiYgIWRpc2FibGVkO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChmb2N1c1Zpc2libGUgJiYgZm9jdXNSaXBwbGUgJiYgIWRpc2FibGVSaXBwbGUgJiYgbW91bnRlZFN0YXRlKSB7XG4gICAgICByaXBwbGVSZWYuY3VycmVudC5wdWxzYXRlKCk7XG4gICAgfVxuICB9LCBbZGlzYWJsZVJpcHBsZSwgZm9jdXNSaXBwbGUsIGZvY3VzVmlzaWJsZSwgbW91bnRlZFN0YXRlXSk7XG4gIGZ1bmN0aW9uIHVzZVJpcHBsZUhhbmRsZXIocmlwcGxlQWN0aW9uLCBldmVudENhbGxiYWNrLCBza2lwUmlwcGxlQWN0aW9uID0gZGlzYWJsZVRvdWNoUmlwcGxlKSB7XG4gICAgcmV0dXJuIHVzZUV2ZW50Q2FsbGJhY2soZXZlbnQgPT4ge1xuICAgICAgaWYgKGV2ZW50Q2FsbGJhY2spIHtcbiAgICAgICAgZXZlbnRDYWxsYmFjayhldmVudCk7XG4gICAgICB9XG4gICAgICBjb25zdCBpZ25vcmUgPSBza2lwUmlwcGxlQWN0aW9uO1xuICAgICAgaWYgKCFpZ25vcmUgJiYgcmlwcGxlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmlwcGxlUmVmLmN1cnJlbnRbcmlwcGxlQWN0aW9uXShldmVudCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuICBjb25zdCBoYW5kbGVNb3VzZURvd24gPSB1c2VSaXBwbGVIYW5kbGVyKCdzdGFydCcsIG9uTW91c2VEb3duKTtcbiAgY29uc3QgaGFuZGxlQ29udGV4dE1lbnUgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25Db250ZXh0TWVudSk7XG4gIGNvbnN0IGhhbmRsZURyYWdMZWF2ZSA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBvbkRyYWdMZWF2ZSk7XG4gIGNvbnN0IGhhbmRsZU1vdXNlVXAgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25Nb3VzZVVwKTtcbiAgY29uc3QgaGFuZGxlTW91c2VMZWF2ZSA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBldmVudCA9PiB7XG4gICAgaWYgKGZvY3VzVmlzaWJsZSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKG9uTW91c2VMZWF2ZSkge1xuICAgICAgb25Nb3VzZUxlYXZlKGV2ZW50KTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVUb3VjaFN0YXJ0ID0gdXNlUmlwcGxlSGFuZGxlcignc3RhcnQnLCBvblRvdWNoU3RhcnQpO1xuICBjb25zdCBoYW5kbGVUb3VjaEVuZCA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBvblRvdWNoRW5kKTtcbiAgY29uc3QgaGFuZGxlVG91Y2hNb3ZlID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uVG91Y2hNb3ZlKTtcbiAgY29uc3QgaGFuZGxlQmx1ciA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBldmVudCA9PiB7XG4gICAgaGFuZGxlQmx1clZpc2libGUoZXZlbnQpO1xuICAgIGlmIChpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgc2V0Rm9jdXNWaXNpYmxlKGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKG9uQmx1cikge1xuICAgICAgb25CbHVyKGV2ZW50KTtcbiAgICB9XG4gIH0sIGZhbHNlKTtcbiAgY29uc3QgaGFuZGxlRm9jdXMgPSB1c2VFdmVudENhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICAvLyBGaXggZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNzc2OVxuICAgIGlmICghYnV0dG9uUmVmLmN1cnJlbnQpIHtcbiAgICAgIGJ1dHRvblJlZi5jdXJyZW50ID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICB9XG4gICAgaGFuZGxlRm9jdXNWaXNpYmxlKGV2ZW50KTtcbiAgICBpZiAoaXNGb2N1c1Zpc2libGVSZWYuY3VycmVudCA9PT0gdHJ1ZSkge1xuICAgICAgc2V0Rm9jdXNWaXNpYmxlKHRydWUpO1xuICAgICAgaWYgKG9uRm9jdXNWaXNpYmxlKSB7XG4gICAgICAgIG9uRm9jdXNWaXNpYmxlKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9uRm9jdXMpIHtcbiAgICAgIG9uRm9jdXMoZXZlbnQpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGlzTm9uTmF0aXZlQnV0dG9uID0gKCkgPT4ge1xuICAgIGNvbnN0IGJ1dHRvbiA9IGJ1dHRvblJlZi5jdXJyZW50O1xuICAgIHJldHVybiBjb21wb25lbnQgJiYgY29tcG9uZW50ICE9PSAnYnV0dG9uJyAmJiAhKGJ1dHRvbi50YWdOYW1lID09PSAnQScgJiYgYnV0dG9uLmhyZWYpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBJRTExIHNoaW0gZm9yIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50L3JlcGVhdFxuICAgKi9cbiAgY29uc3Qga2V5ZG93blJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VFdmVudENhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICAvLyBDaGVjayBpZiBrZXkgaXMgYWxyZWFkeSBkb3duIHRvIGF2b2lkIHJlcGVhdHMgYmVpbmcgY291bnRlZCBhcyBtdWx0aXBsZSBhY3RpdmF0aW9uc1xuICAgIGlmIChmb2N1c1JpcHBsZSAmJiAha2V5ZG93blJlZi5jdXJyZW50ICYmIGZvY3VzVmlzaWJsZSAmJiByaXBwbGVSZWYuY3VycmVudCAmJiBldmVudC5rZXkgPT09ICcgJykge1xuICAgICAga2V5ZG93blJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnN0b3AoZXZlbnQsICgpID0+IHtcbiAgICAgICAgcmlwcGxlUmVmLmN1cnJlbnQuc3RhcnQoZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQgJiYgaXNOb25OYXRpdmVCdXR0b24oKSAmJiBldmVudC5rZXkgPT09ICcgJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKG9uS2V5RG93bikge1xuICAgICAgb25LZXlEb3duKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvLyBLZXlib2FyZCBhY2Nlc3NpYmlsaXR5IGZvciBub24gaW50ZXJhY3RpdmUgZWxlbWVudHNcbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICYmIGlzTm9uTmF0aXZlQnV0dG9uKCkgJiYgZXZlbnQua2V5ID09PSAnRW50ZXInICYmICFkaXNhYmxlZCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICAgIG9uQ2xpY2soZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUtleVVwID0gdXNlRXZlbnRDYWxsYmFjayhldmVudCA9PiB7XG4gICAgLy8gY2FsbGluZyBwcmV2ZW50RGVmYXVsdCBpbiBrZXlVcCBvbiBhIDxidXR0b24+IHdpbGwgbm90IGRpc3BhdGNoIGEgY2xpY2sgZXZlbnQgaWYgU3BhY2UgaXMgcHJlc3NlZFxuICAgIC8vIGh0dHBzOi8vY29kZXNhbmRib3guaW8vcy9idXR0b24ta2V5dXAtcHJldmVudGRlZmF1bHQtZG43ZjBcbiAgICBpZiAoZm9jdXNSaXBwbGUgJiYgZXZlbnQua2V5ID09PSAnICcgJiYgcmlwcGxlUmVmLmN1cnJlbnQgJiYgZm9jdXNWaXNpYmxlICYmICFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBrZXlkb3duUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnN0b3AoZXZlbnQsICgpID0+IHtcbiAgICAgICAgcmlwcGxlUmVmLmN1cnJlbnQucHVsc2F0ZShldmVudCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKG9uS2V5VXApIHtcbiAgICAgIG9uS2V5VXAoZXZlbnQpO1xuICAgIH1cblxuICAgIC8vIEtleWJvYXJkIGFjY2Vzc2liaWxpdHkgZm9yIG5vbiBpbnRlcmFjdGl2ZSBlbGVtZW50c1xuICAgIGlmIChvbkNsaWNrICYmIGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiBpc05vbk5hdGl2ZUJ1dHRvbigpICYmIGV2ZW50LmtleSA9PT0gJyAnICYmICFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBvbkNsaWNrKGV2ZW50KTtcbiAgICB9XG4gIH0pO1xuICBsZXQgQ29tcG9uZW50UHJvcCA9IGNvbXBvbmVudDtcbiAgaWYgKENvbXBvbmVudFByb3AgPT09ICdidXR0b24nICYmIChvdGhlci5ocmVmIHx8IG90aGVyLnRvKSkge1xuICAgIENvbXBvbmVudFByb3AgPSBMaW5rQ29tcG9uZW50O1xuICB9XG4gIGNvbnN0IGJ1dHRvblByb3BzID0ge307XG4gIGlmIChDb21wb25lbnRQcm9wID09PSAnYnV0dG9uJykge1xuICAgIGJ1dHRvblByb3BzLnR5cGUgPSB0eXBlID09PSB1bmRlZmluZWQgPyAnYnV0dG9uJyA6IHR5cGU7XG4gICAgYnV0dG9uUHJvcHMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIW90aGVyLmhyZWYgJiYgIW90aGVyLnRvKSB7XG4gICAgICBidXR0b25Qcm9wcy5yb2xlID0gJ2J1dHRvbic7XG4gICAgfVxuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgYnV0dG9uUHJvcHNbJ2FyaWEtZGlzYWJsZWQnXSA9IGRpc2FibGVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKHJlZiwgZm9jdXNWaXNpYmxlUmVmLCBidXR0b25SZWYpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoZW5hYmxlVG91Y2hSaXBwbGUgJiYgIXJpcHBsZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFRoZSBgY29tcG9uZW50YCBwcm9wIHByb3ZpZGVkIHRvIEJ1dHRvbkJhc2UgaXMgaW52YWxpZC4nLCAnUGxlYXNlIG1ha2Ugc3VyZSB0aGUgY2hpbGRyZW4gcHJvcCBpcyByZW5kZXJlZCBpbiB0aGlzIGN1c3RvbSBjb21wb25lbnQuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH0sIFtlbmFibGVUb3VjaFJpcHBsZV0pO1xuICB9XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjZW50ZXJSaXBwbGUsXG4gICAgY29tcG9uZW50LFxuICAgIGRpc2FibGVkLFxuICAgIGRpc2FibGVSaXBwbGUsXG4gICAgZGlzYWJsZVRvdWNoUmlwcGxlLFxuICAgIGZvY3VzUmlwcGxlLFxuICAgIHRhYkluZGV4LFxuICAgIGZvY3VzVmlzaWJsZVxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKEJ1dHRvbkJhc2VSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IENvbXBvbmVudFByb3AsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIG9uQmx1cjogaGFuZGxlQmx1cixcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIG9uQ29udGV4dE1lbnU6IGhhbmRsZUNvbnRleHRNZW51LFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzLFxuICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICBvbktleVVwOiBoYW5kbGVLZXlVcCxcbiAgICBvbk1vdXNlRG93bjogaGFuZGxlTW91c2VEb3duLFxuICAgIG9uTW91c2VMZWF2ZTogaGFuZGxlTW91c2VMZWF2ZSxcbiAgICBvbk1vdXNlVXA6IGhhbmRsZU1vdXNlVXAsXG4gICAgb25EcmFnTGVhdmU6IGhhbmRsZURyYWdMZWF2ZSxcbiAgICBvblRvdWNoRW5kOiBoYW5kbGVUb3VjaEVuZCxcbiAgICBvblRvdWNoTW92ZTogaGFuZGxlVG91Y2hNb3ZlLFxuICAgIG9uVG91Y2hTdGFydDogaGFuZGxlVG91Y2hTdGFydCxcbiAgICByZWY6IGhhbmRsZVJlZixcbiAgICB0YWJJbmRleDogZGlzYWJsZWQgPyAtMSA6IHRhYkluZGV4LFxuICAgIHR5cGU6IHR5cGVcbiAgfSwgYnV0dG9uUHJvcHMsIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IFtjaGlsZHJlbiwgZW5hYmxlVG91Y2hSaXBwbGUgP1xuICAgIC8qI19fUFVSRV9fKi9cbiAgICAvKiBUb3VjaFJpcHBsZSBpcyBvbmx5IG5lZWRlZCBjbGllbnQtc2lkZSwgeDIgYm9vc3Qgb24gdGhlIHNlcnZlci4gKi9cbiAgICBfanN4KFRvdWNoUmlwcGxlLCBfZXh0ZW5kcyh7XG4gICAgICByZWY6IGhhbmRsZVJpcHBsZVJlZixcbiAgICAgIGNlbnRlcjogY2VudGVyUmlwcGxlXG4gICAgfSwgVG91Y2hSaXBwbGVQcm9wcykpIDogbnVsbF1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBCdXR0b25CYXNlLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIEEgcmVmIGZvciBpbXBlcmF0aXZlIGFjdGlvbnMuXG4gICAqIEl0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIGBmb2N1c1Zpc2libGUoKWAgYWN0aW9uLlxuICAgKi9cbiAgYWN0aW9uOiByZWZUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlcyBhcmUgY2VudGVyZWQuXG4gICAqIFRoZXkgd29uJ3Qgc3RhcnQgYXQgdGhlIGN1cnNvciBpbnRlcmFjdGlvbiBwb3NpdGlvbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNlbnRlclJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgZWZmZWN0IGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiDimqDvuI8gV2l0aG91dCBhIHJpcHBsZSB0aGVyZSBpcyBubyBzdHlsaW5nIGZvciA6Zm9jdXMtdmlzaWJsZSBieSBkZWZhdWx0LiBCZSBzdXJlXG4gICAqIHRvIGhpZ2hsaWdodCB0aGUgZWxlbWVudCBieSBhcHBseWluZyBzZXBhcmF0ZSBzdHlsZXMgd2l0aCB0aGUgYC5NdWktZm9jdXNWaXNpYmxlYCBjbGFzcy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdG91Y2ggcmlwcGxlIGVmZmVjdCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVUb3VjaFJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBiYXNlIGJ1dHRvbiB3aWxsIGhhdmUgYSBrZXlib2FyZCBmb2N1cyByaXBwbGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmb2N1c1JpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgY2FuIGhlbHAgaWRlbnRpZnkgd2hpY2ggZWxlbWVudCBoYXMga2V5Ym9hcmQgZm9jdXMuXG4gICAqIFRoZSBjbGFzcyBuYW1lIHdpbGwgYmUgYXBwbGllZCB3aGVuIHRoZSBlbGVtZW50IGdhaW5zIHRoZSBmb2N1cyB0aHJvdWdoIGtleWJvYXJkIGludGVyYWN0aW9uLlxuICAgKiBJdCdzIGEgcG9seWZpbGwgZm9yIHRoZSBbQ1NTIDpmb2N1cy12aXNpYmxlIHNlbGVjdG9yXShodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvc2VsZWN0b3JzLTQvI3RoZS1mb2N1cy12aXNpYmxlLXBzZXVkbykuXG4gICAqIFRoZSByYXRpb25hbGUgZm9yIHVzaW5nIHRoaXMgZmVhdHVyZSBbaXMgZXhwbGFpbmVkIGhlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL2ZvY3VzLXZpc2libGUvYmxvYi9IRUFEL2V4cGxhaW5lci5tZCkuXG4gICAqIEEgW3BvbHlmaWxsIGNhbiBiZSB1c2VkXShodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlKSB0byBhcHBseSBhIGBmb2N1cy12aXNpYmxlYCBjbGFzcyB0byBvdGhlciBjb21wb25lbnRzXG4gICAqIGlmIG5lZWRlZC5cbiAgICovXG4gIGZvY3VzVmlzaWJsZUNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGhyZWY6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLmFueSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCB0byByZW5kZXIgYSBsaW5rIHdoZW4gdGhlIGBocmVmYCBwcm9wIGlzIHByb3ZpZGVkLlxuICAgKiBAZGVmYXVsdCAnYSdcbiAgICovXG4gIExpbmtDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQ29udGV4dE1lbnU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25EcmFnTGVhdmU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgZm9jdXNlZCB3aXRoIGEga2V5Ym9hcmQuXG4gICAqIFdlIHRyaWdnZXIgYSBgb25Gb2N1c2AgY2FsbGJhY2sgdG9vLlxuICAgKi9cbiAgb25Gb2N1c1Zpc2libGU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5VXA6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Nb3VzZURvd246IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Nb3VzZUxlYXZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uTW91c2VVcDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvblRvdWNoRW5kOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uVG91Y2hNb3ZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uVG91Y2hTdGFydDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICB0YWJJbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIGBUb3VjaFJpcHBsZWAgZWxlbWVudC5cbiAgICovXG4gIFRvdWNoUmlwcGxlUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBBIHJlZiB0aGF0IHBvaW50cyB0byB0aGUgYFRvdWNoUmlwcGxlYCBlbGVtZW50LlxuICAgKi9cbiAgdG91Y2hSaXBwbGVSZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGN1cnJlbnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBwdWxzYXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgc3RhcnQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICBzdG9wOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gICAgfSlcbiAgfSldKSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2J1dHRvbicsICdyZXNldCcsICdzdWJtaXQnXSksIFByb3BUeXBlcy5zdHJpbmddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkJhc2U7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldENpcmN1bGFyUHJvZ3Jlc3NVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUNpcmN1bGFyUHJvZ3Jlc3MnLCBzbG90KTtcbn1cbmNvbnN0IGNpcmN1bGFyUHJvZ3Jlc3NDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQ2lyY3VsYXJQcm9ncmVzcycsIFsncm9vdCcsICdkZXRlcm1pbmF0ZScsICdpbmRldGVybWluYXRlJywgJ2NvbG9yUHJpbWFyeScsICdjb2xvclNlY29uZGFyeScsICdzdmcnLCAnY2lyY2xlJywgJ2NpcmNsZURldGVybWluYXRlJywgJ2NpcmNsZUluZGV0ZXJtaW5hdGUnLCAnY2lyY2xlRGlzYWJsZVNocmluayddKTtcbmV4cG9ydCBkZWZhdWx0IGNpcmN1bGFyUHJvZ3Jlc3NDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiZGlzYWJsZVNocmlua1wiLCBcInNpemVcIiwgXCJzdHlsZVwiLCBcInRoaWNrbmVzc1wiLCBcInZhbHVlXCIsIFwidmFyaWFudFwiXTtcbmxldCBfID0gdCA9PiB0LFxuICBfdCxcbiAgX3QyLFxuICBfdDMsXG4gIF90NDtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IGNoYWluUHJvcFR5cGVzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBrZXlmcmFtZXMsIGNzcyB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGdldENpcmN1bGFyUHJvZ3Jlc3NVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2NpcmN1bGFyUHJvZ3Jlc3NDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBTSVpFID0gNDQ7XG5jb25zdCBjaXJjdWxhclJvdGF0ZUtleWZyYW1lID0ga2V5ZnJhbWVzKF90IHx8IChfdCA9IF9gXG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxuXG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gIH1cbmApKTtcbmNvbnN0IGNpcmN1bGFyRGFzaEtleWZyYW1lID0ga2V5ZnJhbWVzKF90MiB8fCAoX3QyID0gX2BcbiAgMCUge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDFweCwgMjAwcHg7XG4gICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7XG4gIH1cblxuICA1MCUge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDEwMHB4LCAyMDBweDtcbiAgICBzdHJva2UtZGFzaG9mZnNldDogLTE1cHg7XG4gIH1cblxuICAxMDAlIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAxMDBweCwgMjAwcHg7XG4gICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IC0xMjVweDtcbiAgfVxuYCkpO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgdmFyaWFudCxcbiAgICBjb2xvcixcbiAgICBkaXNhYmxlU2hyaW5rXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCB2YXJpYW50LCBgY29sb3Ike2NhcGl0YWxpemUoY29sb3IpfWBdLFxuICAgIHN2ZzogWydzdmcnXSxcbiAgICBjaXJjbGU6IFsnY2lyY2xlJywgYGNpcmNsZSR7Y2FwaXRhbGl6ZSh2YXJpYW50KX1gLCBkaXNhYmxlU2hyaW5rICYmICdjaXJjbGVEaXNhYmxlU2hyaW5rJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRDaXJjdWxhclByb2dyZXNzVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBDaXJjdWxhclByb2dyZXNzUm9vdCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aUNpcmN1bGFyUHJvZ3Jlc3MnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF0sIHN0eWxlc1tgY29sb3Ike2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF1dO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlLFxuICB0aGVtZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJ1xufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZGV0ZXJtaW5hdGUnICYmIHtcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd0cmFuc2Zvcm0nKVxufSwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHtcbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbn0pLCAoe1xuICBvd25lclN0YXRlXG59KSA9PiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdpbmRldGVybWluYXRlJyAmJiBjc3MoX3QzIHx8IChfdDMgPSBfYFxuICAgICAgYW5pbWF0aW9uOiAkezB9IDEuNHMgbGluZWFyIGluZmluaXRlO1xuICAgIGApLCBjaXJjdWxhclJvdGF0ZUtleWZyYW1lKSk7XG5jb25zdCBDaXJjdWxhclByb2dyZXNzU1ZHID0gc3R5bGVkKCdzdmcnLCB7XG4gIG5hbWU6ICdNdWlDaXJjdWxhclByb2dyZXNzJyxcbiAgc2xvdDogJ1N2ZycsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnN2Z1xufSkoe1xuICBkaXNwbGF5OiAnYmxvY2snIC8vIEtlZXBzIHRoZSBwcm9ncmVzcyBjZW50ZXJlZFxufSk7XG5cbmNvbnN0IENpcmN1bGFyUHJvZ3Jlc3NDaXJjbGUgPSBzdHlsZWQoJ2NpcmNsZScsIHtcbiAgbmFtZTogJ011aUNpcmN1bGFyUHJvZ3Jlc3MnLFxuICBzbG90OiAnQ2lyY2xlJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5jaXJjbGUsIHN0eWxlc1tgY2lyY2xlJHtjYXBpdGFsaXplKG93bmVyU3RhdGUudmFyaWFudCl9YF0sIG93bmVyU3RhdGUuZGlzYWJsZVNocmluayAmJiBzdHlsZXMuY2lyY2xlRGlzYWJsZVNocmlua107XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGUsXG4gIHRoZW1lXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHN0cm9rZTogJ2N1cnJlbnRDb2xvcidcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2RldGVybWluYXRlJyAmJiB7XG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnc3Ryb2tlLWRhc2hvZmZzZXQnKVxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnaW5kZXRlcm1pbmF0ZScgJiYge1xuICAvLyBTb21lIGRlZmF1bHQgdmFsdWUgdGhhdCBsb29rcyBmaW5lIHdhaXRpbmcgZm9yIHRoZSBhbmltYXRpb24gdG8ga2lja3MgaW4uXG4gIHN0cm9rZURhc2hhcnJheTogJzgwcHgsIDIwMHB4JyxcbiAgc3Ryb2tlRGFzaG9mZnNldDogMCAvLyBBZGQgdGhlIHVuaXQgdG8gZml4IGEgRWRnZSAxNiBhbmQgYmVsb3cgYnVnLlxufSksICh7XG4gIG93bmVyU3RhdGVcbn0pID0+IG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2luZGV0ZXJtaW5hdGUnICYmICFvd25lclN0YXRlLmRpc2FibGVTaHJpbmsgJiYgY3NzKF90NCB8fCAoX3Q0ID0gX2BcbiAgICAgIGFuaW1hdGlvbjogJHswfSAxLjRzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuICAgIGApLCBjaXJjdWxhckRhc2hLZXlmcmFtZSkpO1xuXG4vKipcbiAqICMjIEFSSUFcbiAqXG4gKiBJZiB0aGUgcHJvZ3Jlc3MgYmFyIGlzIGRlc2NyaWJpbmcgdGhlIGxvYWRpbmcgcHJvZ3Jlc3Mgb2YgYSBwYXJ0aWN1bGFyIHJlZ2lvbiBvZiBhIHBhZ2UsXG4gKiB5b3Ugc2hvdWxkIHVzZSBgYXJpYS1kZXNjcmliZWRieWAgdG8gcG9pbnQgdG8gdGhlIHByb2dyZXNzIGJhciwgYW5kIHNldCB0aGUgYGFyaWEtYnVzeWBcbiAqIGF0dHJpYnV0ZSB0byBgdHJ1ZWAgb24gdGhhdCByZWdpb24gdW50aWwgaXQgaGFzIGZpbmlzaGVkIGxvYWRpbmcuXG4gKi9cbmNvbnN0IENpcmN1bGFyUHJvZ3Jlc3MgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBDaXJjdWxhclByb2dyZXNzKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlDaXJjdWxhclByb2dyZXNzJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgICBkaXNhYmxlU2hyaW5rID0gZmFsc2UsXG4gICAgICBzaXplID0gNDAsXG4gICAgICBzdHlsZSxcbiAgICAgIHRoaWNrbmVzcyA9IDMuNixcbiAgICAgIHZhbHVlID0gMCxcbiAgICAgIHZhcmlhbnQgPSAnaW5kZXRlcm1pbmF0ZSdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIGRpc2FibGVTaHJpbmssXG4gICAgc2l6ZSxcbiAgICB0aGlja25lc3MsXG4gICAgdmFsdWUsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBjaXJjbGVTdHlsZSA9IHt9O1xuICBjb25zdCByb290U3R5bGUgPSB7fTtcbiAgY29uc3Qgcm9vdFByb3BzID0ge307XG4gIGlmICh2YXJpYW50ID09PSAnZGV0ZXJtaW5hdGUnKSB7XG4gICAgY29uc3QgY2lyY3VtZmVyZW5jZSA9IDIgKiBNYXRoLlBJICogKChTSVpFIC0gdGhpY2tuZXNzKSAvIDIpO1xuICAgIGNpcmNsZVN0eWxlLnN0cm9rZURhc2hhcnJheSA9IGNpcmN1bWZlcmVuY2UudG9GaXhlZCgzKTtcbiAgICByb290UHJvcHNbJ2FyaWEtdmFsdWVub3cnXSA9IE1hdGgucm91bmQodmFsdWUpO1xuICAgIGNpcmNsZVN0eWxlLnN0cm9rZURhc2hvZmZzZXQgPSBgJHsoKDEwMCAtIHZhbHVlKSAvIDEwMCAqIGNpcmN1bWZlcmVuY2UpLnRvRml4ZWQoMyl9cHhgO1xuICAgIHJvb3RTdHlsZS50cmFuc2Zvcm0gPSAncm90YXRlKC05MGRlZyknO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChDaXJjdWxhclByb2dyZXNzUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgIHdpZHRoOiBzaXplLFxuICAgICAgaGVpZ2h0OiBzaXplXG4gICAgfSwgcm9vdFN0eWxlLCBzdHlsZSksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICByZWY6IHJlZixcbiAgICByb2xlOiBcInByb2dyZXNzYmFyXCJcbiAgfSwgcm9vdFByb3BzLCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChDaXJjdWxhclByb2dyZXNzU1ZHLCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMuc3ZnLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIHZpZXdCb3g6IGAke1NJWkUgLyAyfSAke1NJWkUgLyAyfSAke1NJWkV9ICR7U0laRX1gLFxuICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KENpcmN1bGFyUHJvZ3Jlc3NDaXJjbGUsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmNpcmNsZSxcbiAgICAgICAgc3R5bGU6IGNpcmNsZVN0eWxlLFxuICAgICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgICBjeDogU0laRSxcbiAgICAgICAgY3k6IFNJWkUsXG4gICAgICAgIHI6IChTSVpFIC0gdGhpY2tuZXNzKSAvIDIsXG4gICAgICAgIGZpbGw6IFwibm9uZVwiLFxuICAgICAgICBzdHJva2VXaWR0aDogdGhpY2tuZXNzXG4gICAgICB9KVxuICAgIH0pXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQ2lyY3VsYXJQcm9ncmVzcy5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydpbmhlcml0JywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBzaHJpbmsgYW5pbWF0aW9uIGlzIGRpc2FibGVkLlxuICAgKiBUaGlzIG9ubHkgd29ya3MgaWYgdmFyaWFudCBpcyBgaW5kZXRlcm1pbmF0ZWAuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlU2hyaW5rOiBjaGFpblByb3BUeXBlcyhQcm9wVHlwZXMuYm9vbCwgcHJvcHMgPT4ge1xuICAgIGlmIChwcm9wcy5kaXNhYmxlU2hyaW5rICYmIHByb3BzLnZhcmlhbnQgJiYgcHJvcHMudmFyaWFudCAhPT0gJ2luZGV0ZXJtaW5hdGUnKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdNVUk6IFlvdSBoYXZlIHByb3ZpZGVkIHRoZSBgZGlzYWJsZVNocmlua2AgcHJvcCAnICsgJ3dpdGggYSB2YXJpYW50IG90aGVyIHRoYW4gYGluZGV0ZXJtaW5hdGVgLiBUaGlzIHdpbGwgaGF2ZSBubyBlZmZlY3QuJyk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIElmIHVzaW5nIGEgbnVtYmVyLCB0aGUgcGl4ZWwgdW5pdCBpcyBhc3N1bWVkLlxuICAgKiBJZiB1c2luZyBhIHN0cmluZywgeW91IG5lZWQgdG8gcHJvdmlkZSB0aGUgQ1NTIHVuaXQsIGUuZy4gJzNyZW0nLlxuICAgKiBAZGVmYXVsdCA0MFxuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdGhpY2tuZXNzIG9mIHRoZSBjaXJjbGUuXG4gICAqIEBkZWZhdWx0IDMuNlxuICAgKi9cbiAgdGhpY2tuZXNzOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBwcm9ncmVzcyBpbmRpY2F0b3IgZm9yIHRoZSBkZXRlcm1pbmF0ZSB2YXJpYW50LlxuICAgKiBWYWx1ZSBiZXR3ZWVuIDAgYW5kIDEwMC5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIFVzZSBpbmRldGVybWluYXRlIHdoZW4gdGhlcmUgaXMgbm8gcHJvZ3Jlc3MgdmFsdWUuXG4gICAqIEBkZWZhdWx0ICdpbmRldGVybWluYXRlJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnZGV0ZXJtaW5hdGUnLCAnaW5kZXRlcm1pbmF0ZSddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IENpcmN1bGFyUHJvZ3Jlc3M7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlQ29udGFpbmVyIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuY29uc3QgQ29udGFpbmVyID0gY3JlYXRlQ29udGFpbmVyKHtcbiAgY3JlYXRlU3R5bGVkQ29tcG9uZW50OiBzdHlsZWQoJ2RpdicsIHtcbiAgICBuYW1lOiAnTXVpQ29udGFpbmVyJyxcbiAgICBzbG90OiAnUm9vdCcsXG4gICAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG93bmVyU3RhdGVcbiAgICAgIH0gPSBwcm9wcztcbiAgICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIHN0eWxlc1tgbWF4V2lkdGgke2NhcGl0YWxpemUoU3RyaW5nKG93bmVyU3RhdGUubWF4V2lkdGgpKX1gXSwgb3duZXJTdGF0ZS5maXhlZCAmJiBzdHlsZXMuZml4ZWQsIG93bmVyU3RhdGUuZGlzYWJsZUd1dHRlcnMgJiYgc3R5bGVzLmRpc2FibGVHdXR0ZXJzXTtcbiAgICB9XG4gIH0pLFxuICB1c2VUaGVtZVByb3BzOiBpblByb3BzID0+IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlDb250YWluZXInXG4gIH0pXG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IENvbnRhaW5lci5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsZWZ0IGFuZCByaWdodCBwYWRkaW5nIGlzIHJlbW92ZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlR3V0dGVyczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBTZXQgdGhlIG1heC13aWR0aCB0byBtYXRjaCB0aGUgbWluLXdpZHRoIG9mIHRoZSBjdXJyZW50IGJyZWFrcG9pbnQuXG4gICAqIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSdkIHByZWZlciB0byBkZXNpZ24gZm9yIGEgZml4ZWQgc2V0IG9mIHNpemVzXG4gICAqIGluc3RlYWQgb2YgdHJ5aW5nIHRvIGFjY29tbW9kYXRlIGEgZnVsbHkgZmx1aWQgdmlld3BvcnQuXG4gICAqIEl0J3MgZmx1aWQgYnkgZGVmYXVsdC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZpeGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgbWF4LXdpZHRoIG9mIHRoZSBjb250YWluZXIuXG4gICAqIFRoZSBjb250YWluZXIgd2lkdGggZ3Jvd3Mgd2l0aCB0aGUgc2l6ZSBvZiB0aGUgc2NyZWVuLlxuICAgKiBTZXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIGBtYXhXaWR0aGAuXG4gICAqIEBkZWZhdWx0ICdsZydcbiAgICovXG4gIG1heFdpZHRoOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJywgZmFsc2VdKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQ29udGFpbmVyOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IEdsb2JhbFN0eWxlcyBmcm9tICcuLi9HbG9iYWxTdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBjb25zdCBodG1sID0gKHRoZW1lLCBlbmFibGVDb2xvclNjaGVtZSkgPT4gX2V4dGVuZHMoe1xuICBXZWJraXRGb250U21vb3RoaW5nOiAnYW50aWFsaWFzZWQnLFxuICAvLyBBbnRpYWxpYXNpbmcuXG4gIE1vek9zeEZvbnRTbW9vdGhpbmc6ICdncmF5c2NhbGUnLFxuICAvLyBBbnRpYWxpYXNpbmcuXG4gIC8vIENoYW5nZSBmcm9tIGBib3gtc2l6aW5nOiBjb250ZW50LWJveGAgc28gdGhhdCBgd2lkdGhgXG4gIC8vIGlzIG5vdCBhZmZlY3RlZCBieSBgcGFkZGluZ2Agb3IgYGJvcmRlcmAuXG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAvLyBGaXggZm9udCByZXNpemUgcHJvYmxlbSBpbiBpT1NcbiAgV2Via2l0VGV4dFNpemVBZGp1c3Q6ICcxMDAlJ1xufSwgZW5hYmxlQ29sb3JTY2hlbWUgJiYgIXRoZW1lLnZhcnMgJiYge1xuICBjb2xvclNjaGVtZTogdGhlbWUucGFsZXR0ZS5tb2RlXG59KTtcbmV4cG9ydCBjb25zdCBib2R5ID0gdGhlbWUgPT4gX2V4dGVuZHMoe1xuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5wcmltYXJ5XG59LCB0aGVtZS50eXBvZ3JhcGh5LmJvZHkxLCB7XG4gIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYmFja2dyb3VuZC5kZWZhdWx0LFxuICAnQG1lZGlhIHByaW50Jzoge1xuICAgIC8vIFNhdmUgcHJpbnRlciBpbmsuXG4gICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5jb21tb24ud2hpdGVcbiAgfVxufSk7XG5leHBvcnQgY29uc3Qgc3R5bGVzID0gKHRoZW1lLCBlbmFibGVDb2xvclNjaGVtZSA9IGZhbHNlKSA9PiB7XG4gIHZhciBfdGhlbWUkY29tcG9uZW50cztcbiAgY29uc3QgY29sb3JTY2hlbWVTdHlsZXMgPSB7fTtcbiAgaWYgKGVuYWJsZUNvbG9yU2NoZW1lICYmIHRoZW1lLmNvbG9yU2NoZW1lcykge1xuICAgIE9iamVjdC5lbnRyaWVzKHRoZW1lLmNvbG9yU2NoZW1lcykuZm9yRWFjaCgoW2tleSwgc2NoZW1lXSkgPT4ge1xuICAgICAgdmFyIF9zY2hlbWUkcGFsZXR0ZTtcbiAgICAgIGNvbG9yU2NoZW1lU3R5bGVzW3RoZW1lLmdldENvbG9yU2NoZW1lU2VsZWN0b3Ioa2V5KS5yZXBsYWNlKC9cXHMqJi8sICcnKV0gPSB7XG4gICAgICAgIGNvbG9yU2NoZW1lOiAoX3NjaGVtZSRwYWxldHRlID0gc2NoZW1lLnBhbGV0dGUpID09IG51bGwgPyB2b2lkIDAgOiBfc2NoZW1lJHBhbGV0dGUubW9kZVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICBsZXQgZGVmYXVsdFN0eWxlcyA9IF9leHRlbmRzKHtcbiAgICBodG1sOiBodG1sKHRoZW1lLCBlbmFibGVDb2xvclNjaGVtZSksXG4gICAgJyosICo6OmJlZm9yZSwgKjo6YWZ0ZXInOiB7XG4gICAgICBib3hTaXppbmc6ICdpbmhlcml0J1xuICAgIH0sXG4gICAgJ3N0cm9uZywgYic6IHtcbiAgICAgIGZvbnRXZWlnaHQ6IHRoZW1lLnR5cG9ncmFwaHkuZm9udFdlaWdodEJvbGRcbiAgICB9LFxuICAgIGJvZHk6IF9leHRlbmRzKHtcbiAgICAgIG1hcmdpbjogMFxuICAgIH0sIGJvZHkodGhlbWUpLCB7XG4gICAgICAvLyBBZGQgc3VwcG9ydCBmb3IgZG9jdW1lbnQuYm9keS5yZXF1ZXN0RnVsbFNjcmVlbigpLlxuICAgICAgLy8gT3RoZXIgZWxlbWVudHMsIGlmIGJhY2tncm91bmQgdHJhbnNwYXJlbnQsIGFyZSBub3Qgc3VwcG9ydGVkLlxuICAgICAgJyY6OmJhY2tkcm9wJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmJhY2tncm91bmQuZGVmYXVsdFxuICAgICAgfVxuICAgIH0pXG4gIH0sIGNvbG9yU2NoZW1lU3R5bGVzKTtcbiAgY29uc3QgdGhlbWVPdmVycmlkZXMgPSAoX3RoZW1lJGNvbXBvbmVudHMgPSB0aGVtZS5jb21wb25lbnRzKSA9PSBudWxsIHx8IChfdGhlbWUkY29tcG9uZW50cyA9IF90aGVtZSRjb21wb25lbnRzLk11aUNzc0Jhc2VsaW5lKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJGNvbXBvbmVudHMuc3R5bGVPdmVycmlkZXM7XG4gIGlmICh0aGVtZU92ZXJyaWRlcykge1xuICAgIGRlZmF1bHRTdHlsZXMgPSBbZGVmYXVsdFN0eWxlcywgdGhlbWVPdmVycmlkZXNdO1xuICB9XG4gIHJldHVybiBkZWZhdWx0U3R5bGVzO1xufTtcblxuLyoqXG4gKiBLaWNrc3RhcnQgYW4gZWxlZ2FudCwgY29uc2lzdGVudCwgYW5kIHNpbXBsZSBiYXNlbGluZSB0byBidWlsZCB1cG9uLlxuICovXG5mdW5jdGlvbiBDc3NCYXNlbGluZShpblByb3BzKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUNzc0Jhc2VsaW5lJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGVuYWJsZUNvbG9yU2NoZW1lID0gZmFsc2VcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IFsvKiNfX1BVUkVfXyovX2pzeChHbG9iYWxTdHlsZXMsIHtcbiAgICAgIHN0eWxlczogdGhlbWUgPT4gc3R5bGVzKHRoZW1lLCBlbmFibGVDb2xvclNjaGVtZSlcbiAgICB9KSwgY2hpbGRyZW5dXG4gIH0pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQ3NzQmFzZWxpbmUucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogWW91IGNhbiB3cmFwIGEgbm9kZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEVuYWJsZSBgY29sb3Itc2NoZW1lYCBDU1MgcHJvcGVydHkgdG8gdXNlIGB0aGVtZS5wYWxldHRlLm1vZGVgLlxuICAgKiBGb3IgbW9yZSBkZXRhaWxzLCBjaGVjayBvdXQgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2NvbG9yLXNjaGVtZVxuICAgKiBGb3IgYnJvd3NlciBzdXBwb3J0LCBjaGVjayBvdXQgaHR0cHM6Ly9jYW5pdXNlLmNvbS8/c2VhcmNoPWNvbG9yLXNjaGVtZVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZW5hYmxlQ29sb3JTY2hlbWU6IFByb3BUeXBlcy5ib29sXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQ3NzQmFzZWxpbmU7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpdmlkZXJVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aURpdmlkZXInLCBzbG90KTtcbn1cbmNvbnN0IGRpdmlkZXJDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpRGl2aWRlcicsIFsncm9vdCcsICdhYnNvbHV0ZScsICdmdWxsV2lkdGgnLCAnaW5zZXQnLCAnbWlkZGxlJywgJ2ZsZXhJdGVtJywgJ2xpZ2h0JywgJ3ZlcnRpY2FsJywgJ3dpdGhDaGlsZHJlbicsICd3aXRoQ2hpbGRyZW5WZXJ0aWNhbCcsICd0ZXh0QWxpZ25SaWdodCcsICd0ZXh0QWxpZ25MZWZ0JywgJ3dyYXBwZXInLCAnd3JhcHBlclZlcnRpY2FsJ10pO1xuZXhwb3J0IGRlZmF1bHQgZGl2aWRlckNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWRkRW5kTGlzdGVuZXJcIiwgXCJhcHBlYXJcIiwgXCJjaGlsZHJlblwiLCBcImVhc2luZ1wiLCBcImluXCIsIFwib25FbnRlclwiLCBcIm9uRW50ZXJlZFwiLCBcIm9uRW50ZXJpbmdcIiwgXCJvbkV4aXRcIiwgXCJvbkV4aXRlZFwiLCBcIm9uRXhpdGluZ1wiLCBcInN0eWxlXCIsIFwidGltZW91dFwiLCBcIlRyYW5zaXRpb25Db21wb25lbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuaW1wb3J0IHsgZWxlbWVudEFjY2VwdGluZ1JlZiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZSc7XG5pbXBvcnQgeyByZWZsb3csIGdldFRyYW5zaXRpb25Qcm9wcyB9IGZyb20gJy4uL3RyYW5zaXRpb25zL3V0aWxzJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHN0eWxlcyA9IHtcbiAgZW50ZXJpbmc6IHtcbiAgICBvcGFjaXR5OiAxXG4gIH0sXG4gIGVudGVyZWQ6IHtcbiAgICBvcGFjaXR5OiAxXG4gIH1cbn07XG5cbi8qKlxuICogVGhlIEZhZGUgdHJhbnNpdGlvbiBpcyB1c2VkIGJ5IHRoZSBbTW9kYWxdKC9tYXRlcmlhbC11aS9yZWFjdC1tb2RhbC8pIGNvbXBvbmVudC5cbiAqIEl0IHVzZXMgW3JlYWN0LXRyYW5zaXRpb24tZ3JvdXBdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXApIGludGVybmFsbHkuXG4gKi9cbmNvbnN0IEZhZGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGYWRlKHByb3BzLCByZWYpIHtcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuICBjb25zdCBkZWZhdWx0VGltZW91dCA9IHtcbiAgICBlbnRlcjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uZW50ZXJpbmdTY3JlZW4sXG4gICAgZXhpdDogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24ubGVhdmluZ1NjcmVlblxuICB9O1xuICBjb25zdCB7XG4gICAgICBhZGRFbmRMaXN0ZW5lcixcbiAgICAgIGFwcGVhciA9IHRydWUsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGVhc2luZyxcbiAgICAgIGluOiBpblByb3AsXG4gICAgICBvbkVudGVyLFxuICAgICAgb25FbnRlcmVkLFxuICAgICAgb25FbnRlcmluZyxcbiAgICAgIG9uRXhpdCxcbiAgICAgIG9uRXhpdGVkLFxuICAgICAgb25FeGl0aW5nLFxuICAgICAgc3R5bGUsXG4gICAgICB0aW1lb3V0ID0gZGVmYXVsdFRpbWVvdXQsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvcHJvcC10eXBlc1xuICAgICAgVHJhbnNpdGlvbkNvbXBvbmVudCA9IFRyYW5zaXRpb25cbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgZW5hYmxlU3RyaWN0TW9kZUNvbXBhdCA9IHRydWU7XG4gIGNvbnN0IG5vZGVSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYobm9kZVJlZiwgY2hpbGRyZW4ucmVmLCByZWYpO1xuICBjb25zdCBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrID0gY2FsbGJhY2sgPT4gbWF5YmVJc0FwcGVhcmluZyA9PiB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZVJlZi5jdXJyZW50O1xuXG4gICAgICAvLyBvbkVudGVyWHh4IGFuZCBvbkV4aXRYeHggY2FsbGJhY2tzIGhhdmUgYSBkaWZmZXJlbnQgYXJndW1lbnRzLmxlbmd0aCB2YWx1ZS5cbiAgICAgIGlmIChtYXliZUlzQXBwZWFyaW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2FsbGJhY2sobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayhub2RlLCBtYXliZUlzQXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUVudGVyaW5nID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkVudGVyaW5nKTtcbiAgY29uc3QgaGFuZGxlRW50ZXIgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKChub2RlLCBpc0FwcGVhcmluZykgPT4ge1xuICAgIHJlZmxvdyhub2RlKTsgLy8gU28gdGhlIGFuaW1hdGlvbiBhbHdheXMgc3RhcnQgZnJvbSB0aGUgc3RhcnQuXG5cbiAgICBjb25zdCB0cmFuc2l0aW9uUHJvcHMgPSBnZXRUcmFuc2l0aW9uUHJvcHMoe1xuICAgICAgc3R5bGUsXG4gICAgICB0aW1lb3V0LFxuICAgICAgZWFzaW5nXG4gICAgfSwge1xuICAgICAgbW9kZTogJ2VudGVyJ1xuICAgIH0pO1xuICAgIG5vZGUuc3R5bGUud2Via2l0VHJhbnNpdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHRyYW5zaXRpb25Qcm9wcyk7XG4gICAgbm9kZS5zdHlsZS50cmFuc2l0aW9uID0gdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdvcGFjaXR5JywgdHJhbnNpdGlvblByb3BzKTtcbiAgICBpZiAob25FbnRlcikge1xuICAgICAgb25FbnRlcihub2RlLCBpc0FwcGVhcmluZyk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlRW50ZXJlZCA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FbnRlcmVkKTtcbiAgY29uc3QgaGFuZGxlRXhpdGluZyA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FeGl0aW5nKTtcbiAgY29uc3QgaGFuZGxlRXhpdCA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sobm9kZSA9PiB7XG4gICAgY29uc3QgdHJhbnNpdGlvblByb3BzID0gZ2V0VHJhbnNpdGlvblByb3BzKHtcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVhc2luZ1xuICAgIH0sIHtcbiAgICAgIG1vZGU6ICdleGl0J1xuICAgIH0pO1xuICAgIG5vZGUuc3R5bGUud2Via2l0VHJhbnNpdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHRyYW5zaXRpb25Qcm9wcyk7XG4gICAgbm9kZS5zdHlsZS50cmFuc2l0aW9uID0gdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdvcGFjaXR5JywgdHJhbnNpdGlvblByb3BzKTtcbiAgICBpZiAob25FeGl0KSB7XG4gICAgICBvbkV4aXQobm9kZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlRXhpdGVkID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkV4aXRlZCk7XG4gIGNvbnN0IGhhbmRsZUFkZEVuZExpc3RlbmVyID0gbmV4dCA9PiB7XG4gICAgaWYgKGFkZEVuZExpc3RlbmVyKSB7XG4gICAgICAvLyBPbGQgY2FsbCBzaWduYXR1cmUgYmVmb3JlIGByZWFjdC10cmFuc2l0aW9uLWdyb3VwYCBpbXBsZW1lbnRlZCBgbm9kZVJlZmBcbiAgICAgIGFkZEVuZExpc3RlbmVyKG5vZGVSZWYuY3VycmVudCwgbmV4dCk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVHJhbnNpdGlvbkNvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIGFwcGVhcjogYXBwZWFyLFxuICAgIGluOiBpblByb3AsXG4gICAgbm9kZVJlZjogZW5hYmxlU3RyaWN0TW9kZUNvbXBhdCA/IG5vZGVSZWYgOiB1bmRlZmluZWQsXG4gICAgb25FbnRlcjogaGFuZGxlRW50ZXIsXG4gICAgb25FbnRlcmVkOiBoYW5kbGVFbnRlcmVkLFxuICAgIG9uRW50ZXJpbmc6IGhhbmRsZUVudGVyaW5nLFxuICAgIG9uRXhpdDogaGFuZGxlRXhpdCxcbiAgICBvbkV4aXRlZDogaGFuZGxlRXhpdGVkLFxuICAgIG9uRXhpdGluZzogaGFuZGxlRXhpdGluZyxcbiAgICBhZGRFbmRMaXN0ZW5lcjogaGFuZGxlQWRkRW5kTGlzdGVuZXIsXG4gICAgdGltZW91dDogdGltZW91dFxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAoc3RhdGUsIGNoaWxkUHJvcHMpID0+IHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBfZXh0ZW5kcyh7XG4gICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICB2aXNpYmlsaXR5OiBzdGF0ZSA9PT0gJ2V4aXRlZCcgJiYgIWluUHJvcCA/ICdoaWRkZW4nIDogdW5kZWZpbmVkXG4gICAgICAgIH0sIHN0eWxlc1tzdGF0ZV0sIHN0eWxlLCBjaGlsZHJlbi5wcm9wcy5zdHlsZSksXG4gICAgICAgIHJlZjogaGFuZGxlUmVmXG4gICAgICB9LCBjaGlsZFByb3BzKSk7XG4gICAgfVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEZhZGUucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogQWRkIGEgY3VzdG9tIHRyYW5zaXRpb24gZW5kIHRyaWdnZXIuIENhbGxlZCB3aXRoIHRoZSB0cmFuc2l0aW9uaW5nIERPTVxuICAgKiBub2RlIGFuZCBhIGRvbmUgY2FsbGJhY2suIEFsbG93cyBmb3IgbW9yZSBmaW5lIGdyYWluZWQgdHJhbnNpdGlvbiBlbmRcbiAgICogbG9naWMuIE5vdGU6IFRpbWVvdXRzIGFyZSBzdGlsbCB1c2VkIGFzIGEgZmFsbGJhY2sgaWYgcHJvdmlkZWQuXG4gICAqL1xuICBhZGRFbmRMaXN0ZW5lcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBQZXJmb3JtIHRoZSBlbnRlciB0cmFuc2l0aW9uIHdoZW4gaXQgZmlyc3QgbW91bnRzIGlmIGBpbmAgaXMgYWxzbyBgdHJ1ZWAuXG4gICAqIFNldCB0aGlzIHRvIGBmYWxzZWAgdG8gZGlzYWJsZSB0aGlzIGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBhcHBlYXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQSBzaW5nbGUgY2hpbGQgY29udGVudCBlbGVtZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IGVsZW1lbnRBY2NlcHRpbmdSZWYuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIFRoZSB0cmFuc2l0aW9uIHRpbWluZyBmdW5jdGlvbi5cbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIGVhc2luZyBvciBhIG9iamVjdCBjb250YWluaW5nIGVudGVyIGFuZCBleGl0IHZhbHVlcy5cbiAgICovXG4gIGVhc2luZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBlbnRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBleGl0OiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgd2lsbCB0cmFuc2l0aW9uIGluLlxuICAgKi9cbiAgaW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkVudGVyZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcmluZzogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkV4aXQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FeGl0aW5nOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGR1cmF0aW9uIGZvciB0aGUgdHJhbnNpdGlvbiwgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBZb3UgbWF5IHNwZWNpZnkgYSBzaW5nbGUgdGltZW91dCBmb3IgYWxsIHRyYW5zaXRpb25zLCBvciBpbmRpdmlkdWFsbHkgd2l0aCBhbiBvYmplY3QuXG4gICAqIEBkZWZhdWx0IHtcbiAgICogICBlbnRlcjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uZW50ZXJpbmdTY3JlZW4sXG4gICAqICAgZXhpdDogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24ubGVhdmluZ1NjcmVlbixcbiAgICogfVxuICAgKi9cbiAgdGltZW91dDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcHBlYXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZW50ZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZXhpdDogUHJvcFR5cGVzLm51bWJlclxuICB9KV0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRmFkZTsiXSwibmFtZXMiOlsiZGVmYXVsdFRoZW1lIiwiY3JlYXRlVGhlbWUiLCJjcmVhdGVCb3giLCJ0aGVtZUlkIiwiZGVmYXVsdENsYXNzTmFtZSIsInJvb3QiLCJnZW5lcmF0ZUNsYXNzTmFtZSIsIkNsYXNzTmFtZUdlbmVyYXRvciIsImdlbmVyYXRlIiwiX2V4Y2x1ZGVkIiwiQnJlYWRjcnVtYkNvbGxhcHNlZEJ1dHRvbiIsInN0eWxlZCIsIkJ1dHRvbkJhc2UiLCJ0aGVtZSIsImRpc3BsYXkiLCJtYXJnaW5MZWZ0Iiwic3BhY2luZyIsIm1hcmdpblJpZ2h0IiwicGFsZXR0ZSIsIm1vZGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJncmV5IiwiY29sb3IiLCJib3JkZXJSYWRpdXMiLCJib3hTaGFkb3ciLCJzaGFkb3dzIiwiQnJlYWRjcnVtYkNvbGxhcHNlZEljb24iLCJNb3JlSG9yaXoiLCJ3aWR0aCIsImhlaWdodCIsInByb3BzIiwic2xvdHMiLCJzbG90UHJvcHMiLCJvdGhlclByb3BzIiwib3duZXJTdGF0ZSIsImNoaWxkcmVuIiwiZm9jdXNSaXBwbGUiLCJhcyIsIkNvbGxhcHNlZEljb24iLCJjb2xsYXBzZWRJY29uIiwiZ2V0QnJlYWRjcnVtYnNVdGlsaXR5Q2xhc3MiLCJzbG90IiwiZ2VuZXJhdGVVdGlsaXR5Q2xhc3MiLCJnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIiwiQnJlYWRjcnVtYnNSb290IiwiVHlwb2dyYXBoeSIsIm5hbWUiLCJvdmVycmlkZXNSZXNvbHZlciIsInN0eWxlcyIsImxpIiwiQnJlYWRjcnVtYnNPbCIsIm9sIiwiZmxleFdyYXAiLCJhbGlnbkl0ZW1zIiwicGFkZGluZyIsIm1hcmdpbiIsImxpc3RTdHlsZSIsIkJyZWFkY3J1bWJzU2VwYXJhdG9yIiwic2VwYXJhdG9yIiwidXNlclNlbGVjdCIsImluc2VydFNlcGFyYXRvcnMiLCJpdGVtcyIsImNsYXNzTmFtZSIsInJlZHVjZSIsImFjYyIsImN1cnJlbnQiLCJpbmRleCIsImxlbmd0aCIsImNvbmNhdCIsInB1c2giLCJpblByb3BzIiwicmVmIiwidXNlVGhlbWVQcm9wcyIsImNvbXBvbmVudCIsImV4cGFuZFRleHQiLCJpdGVtc0FmdGVyQ29sbGFwc2UiLCJpdGVtc0JlZm9yZUNvbGxhcHNlIiwibWF4SXRlbXMiLCJvdGhlciIsImV4cGFuZGVkIiwic2V0RXhwYW5kZWQiLCJjbGFzc2VzIiwiY29tcG9zZUNsYXNzZXMiLCJ1c2VVdGlsaXR5Q2xhc3NlcyIsImNvbGxhcHNlZEljb25TbG90UHJvcHMiLCJ1c2VTbG90UHJvcHMiLCJlbGVtZW50VHlwZSIsImV4dGVybmFsU2xvdFByb3BzIiwibGlzdFJlZiIsImFsbEl0ZW1zIiwidG9BcnJheSIsImZpbHRlciIsImNoaWxkIiwibWFwIiwiY2xzeCIsInNsaWNlIiwib25DbGljayIsImZvY3VzYWJsZSIsInF1ZXJ5U2VsZWN0b3IiLCJmb2N1cyIsInJlbmRlckl0ZW1zQmVmb3JlQW5kQWZ0ZXIiLCJnZXRCdXR0b25VdGlsaXR5Q2xhc3MiLCJ1bmRlZmluZWQiLCJjb21tb25JY29uU3R5bGVzIiwic2l6ZSIsImZvbnRTaXplIiwiQnV0dG9uUm9vdCIsInNob3VsZEZvcndhcmRQcm9wIiwicHJvcCIsInZhcmlhbnQiLCJjYXBpdGFsaXplIiwiY29sb3JJbmhlcml0IiwiZGlzYWJsZUVsZXZhdGlvbiIsImZ1bGxXaWR0aCIsIl90aGVtZSRwYWxldHRlJGdldENvbiIsIl90aGVtZSRwYWxldHRlIiwiaW5oZXJpdENvbnRhaW5lZEJhY2tncm91bmRDb2xvciIsImluaGVyaXRDb250YWluZWRIb3ZlckJhY2tncm91bmRDb2xvciIsIkExMDAiLCJ0eXBvZ3JhcGh5IiwiYnV0dG9uIiwibWluV2lkdGgiLCJ2YXJzIiwic2hhcGUiLCJ0cmFuc2l0aW9uIiwidHJhbnNpdGlvbnMiLCJjcmVhdGUiLCJkdXJhdGlvbiIsInNob3J0IiwidGV4dERlY29yYXRpb24iLCJ0ZXh0IiwicHJpbWFyeUNoYW5uZWwiLCJhY3Rpb24iLCJob3Zlck9wYWNpdHkiLCJwcmltYXJ5IiwibWFpbkNoYW5uZWwiLCJtYWluIiwiYm9yZGVyIiwiQnV0dG9uIiwiaW5oZXJpdENvbnRhaW5lZEhvdmVyQmciLCJkYXJrIiwiZm9jdXNWaXNpYmxlIiwiZGlzYWJsZWQiLCJkaXNhYmxlZEJhY2tncm91bmQiLCJnZXRDb250cmFzdFRleHQiLCJjYWxsIiwiaW5oZXJpdENvbnRhaW5lZEJnIiwiY29udHJhc3RUZXh0IiwiYm9yZGVyQ29sb3IiLCJweFRvUmVtIiwiQnV0dG9uU3RhcnRJY29uIiwic3RhcnRJY29uIiwiQnV0dG9uRW5kSWNvbiIsImVuZEljb24iLCJjb250ZXh0UHJvcHMiLCJidXR0b25Hcm91cEJ1dHRvbkNvbnRleHRQb3NpdGlvbkNsYXNzTmFtZSIsInJlc29sdmVkUHJvcHMiLCJyZXNvbHZlUHJvcHMiLCJkaXNhYmxlRm9jdXNSaXBwbGUiLCJlbmRJY29uUHJvcCIsImZvY3VzVmlzaWJsZUNsYXNzTmFtZSIsInN0YXJ0SWNvblByb3AiLCJ0eXBlIiwibGFiZWwiLCJjb21wb3NlZENsYXNzZXMiLCJwb3NpdGlvbkNsYXNzTmFtZSIsIl90IiwiX3QyIiwiX3QzIiwiX3Q0IiwiXyIsInQiLCJlbnRlcktleWZyYW1lIiwiZXhpdEtleWZyYW1lIiwicHVsc2F0ZUtleWZyYW1lIiwiVG91Y2hSaXBwbGVSb290Iiwib3ZlcmZsb3ciLCJwb2ludGVyRXZlbnRzIiwicG9zaXRpb24iLCJ6SW5kZXgiLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiLCJUb3VjaFJpcHBsZVJpcHBsZSIsInB1bHNhdGUiLCJyaXBwbGVYIiwicmlwcGxlWSIsInJpcHBsZVNpemUiLCJpbiIsImluUHJvcCIsIm9uRXhpdGVkIiwidGltZW91dCIsImxlYXZpbmciLCJzZXRMZWF2aW5nIiwicmlwcGxlQ2xhc3NOYW1lIiwicmlwcGxlIiwicmlwcGxlVmlzaWJsZSIsInJpcHBsZVB1bHNhdGUiLCJyaXBwbGVTdHlsZXMiLCJjaGlsZENsYXNzTmFtZSIsImNoaWxkTGVhdmluZyIsImNoaWxkUHVsc2F0ZSIsInRpbWVvdXRJZCIsInNldFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJzdHlsZSIsImVhc2luZyIsImVhc2VJbk91dCIsInNob3J0ZXIiLCJjZW50ZXIiLCJjZW50ZXJQcm9wIiwicmlwcGxlcyIsInNldFJpcHBsZXMiLCJuZXh0S2V5IiwicmlwcGxlQ2FsbGJhY2siLCJpZ25vcmluZ01vdXNlRG93biIsInN0YXJ0VGltZXIiLCJzdGFydFRpbWVyQ29tbWl0IiwiY29udGFpbmVyIiwic3RhcnRDb21taXQiLCJwYXJhbXMiLCJjYiIsIm9sZFJpcHBsZXMiLCJzdGFydCIsImV2ZW50Iiwib3B0aW9ucyIsImZha2VFbGVtZW50IiwiZWxlbWVudCIsInJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJjbGllbnRYIiwiY2xpZW50WSIsInRvdWNoZXMiLCJNYXRoIiwicm91bmQiLCJzcXJ0Iiwic2l6ZVgiLCJtYXgiLCJhYnMiLCJjbGllbnRXaWR0aCIsInNpemVZIiwiY2xpZW50SGVpZ2h0Iiwic3RvcCIsIlRyYW5zaXRpb25Hcm91cCIsImV4aXQiLCJnZXRCdXR0b25CYXNlVXRpbGl0eUNsYXNzIiwiQnV0dG9uQmFzZVJvb3QiLCJqdXN0aWZ5Q29udGVudCIsImJveFNpemluZyIsIldlYmtpdFRhcEhpZ2hsaWdodENvbG9yIiwib3V0bGluZSIsImN1cnNvciIsInZlcnRpY2FsQWxpZ24iLCJNb3pBcHBlYXJhbmNlIiwiV2Via2l0QXBwZWFyYW5jZSIsImJvcmRlclN0eWxlIiwiY29sb3JBZGp1c3QiLCJjZW50ZXJSaXBwbGUiLCJkaXNhYmxlUmlwcGxlIiwiZGlzYWJsZVRvdWNoUmlwcGxlIiwiTGlua0NvbXBvbmVudCIsIm9uQmx1ciIsIm9uQ29udGV4dE1lbnUiLCJvbkRyYWdMZWF2ZSIsIm9uRm9jdXMiLCJvbkZvY3VzVmlzaWJsZSIsIm9uS2V5RG93biIsIm9uS2V5VXAiLCJvbk1vdXNlRG93biIsIm9uTW91c2VMZWF2ZSIsIm9uTW91c2VVcCIsIm9uVG91Y2hFbmQiLCJvblRvdWNoTW92ZSIsIm9uVG91Y2hTdGFydCIsInRhYkluZGV4IiwiVG91Y2hSaXBwbGVQcm9wcyIsInRvdWNoUmlwcGxlUmVmIiwiYnV0dG9uUmVmIiwicmlwcGxlUmVmIiwiaGFuZGxlUmlwcGxlUmVmIiwidXNlRm9ya1JlZiIsImlzRm9jdXNWaXNpYmxlUmVmIiwiaGFuZGxlRm9jdXNWaXNpYmxlIiwiaGFuZGxlQmx1clZpc2libGUiLCJmb2N1c1Zpc2libGVSZWYiLCJ1c2VJc0ZvY3VzVmlzaWJsZSIsInNldEZvY3VzVmlzaWJsZSIsIm1vdW50ZWRTdGF0ZSIsInNldE1vdW50ZWRTdGF0ZSIsImVuYWJsZVRvdWNoUmlwcGxlIiwidXNlUmlwcGxlSGFuZGxlciIsInJpcHBsZUFjdGlvbiIsImV2ZW50Q2FsbGJhY2siLCJza2lwUmlwcGxlQWN0aW9uIiwidXNlRXZlbnRDYWxsYmFjayIsImhhbmRsZU1vdXNlRG93biIsImhhbmRsZUNvbnRleHRNZW51IiwiaGFuZGxlRHJhZ0xlYXZlIiwiaGFuZGxlTW91c2VVcCIsImhhbmRsZU1vdXNlTGVhdmUiLCJwcmV2ZW50RGVmYXVsdCIsImhhbmRsZVRvdWNoU3RhcnQiLCJoYW5kbGVUb3VjaEVuZCIsImhhbmRsZVRvdWNoTW92ZSIsImhhbmRsZUJsdXIiLCJoYW5kbGVGb2N1cyIsImN1cnJlbnRUYXJnZXQiLCJpc05vbk5hdGl2ZUJ1dHRvbiIsInRhZ05hbWUiLCJocmVmIiwia2V5ZG93blJlZiIsImhhbmRsZUtleURvd24iLCJrZXkiLCJ0YXJnZXQiLCJoYW5kbGVLZXlVcCIsImRlZmF1bHRQcmV2ZW50ZWQiLCJDb21wb25lbnRQcm9wIiwidG8iLCJidXR0b25Qcm9wcyIsInJvbGUiLCJoYW5kbGVSZWYiLCJnZXRDaXJjdWxhclByb2dyZXNzVXRpbGl0eUNsYXNzIiwiY2lyY3VsYXJSb3RhdGVLZXlmcmFtZSIsImNpcmN1bGFyRGFzaEtleWZyYW1lIiwiQ2lyY3VsYXJQcm9ncmVzc1Jvb3QiLCJDaXJjdWxhclByb2dyZXNzU1ZHIiwic3ZnIiwiQ2lyY3VsYXJQcm9ncmVzc0NpcmNsZSIsImNpcmNsZSIsImRpc2FibGVTaHJpbmsiLCJjaXJjbGVEaXNhYmxlU2hyaW5rIiwic3Ryb2tlIiwic3Ryb2tlRGFzaGFycmF5Iiwic3Ryb2tlRGFzaG9mZnNldCIsInRoaWNrbmVzcyIsInZhbHVlIiwiY2lyY2xlU3R5bGUiLCJyb290U3R5bGUiLCJyb290UHJvcHMiLCJjaXJjdW1mZXJlbmNlIiwiUEkiLCJ0b0ZpeGVkIiwidHJhbnNmb3JtIiwidmlld0JveCIsImN4IiwiY3kiLCJyIiwiZmlsbCIsInN0cm9rZVdpZHRoIiwiY3JlYXRlU3R5bGVkQ29tcG9uZW50IiwiU3RyaW5nIiwibWF4V2lkdGgiLCJmaXhlZCIsImRpc2FibGVHdXR0ZXJzIiwiaHRtbCIsImVuYWJsZUNvbG9yU2NoZW1lIiwiV2Via2l0Rm9udFNtb290aGluZyIsIk1vek9zeEZvbnRTbW9vdGhpbmciLCJXZWJraXRUZXh0U2l6ZUFkanVzdCIsImNvbG9yU2NoZW1lIiwiYm9keSIsImJvZHkxIiwiYmFja2dyb3VuZCIsImRlZmF1bHQiLCJjb21tb24iLCJ3aGl0ZSIsIl90aGVtZSRjb21wb25lbnRzIiwiY29sb3JTY2hlbWVTdHlsZXMiLCJjb2xvclNjaGVtZXMiLCJPYmplY3QiLCJlbnRyaWVzIiwiZm9yRWFjaCIsInNjaGVtZSIsIl9zY2hlbWUkcGFsZXR0ZSIsImdldENvbG9yU2NoZW1lU2VsZWN0b3IiLCJyZXBsYWNlIiwiZGVmYXVsdFN0eWxlcyIsImZvbnRXZWlnaHQiLCJmb250V2VpZ2h0Qm9sZCIsInRoZW1lT3ZlcnJpZGVzIiwiY29tcG9uZW50cyIsIk11aUNzc0Jhc2VsaW5lIiwic3R5bGVPdmVycmlkZXMiLCJlbnRlcmluZyIsIm9wYWNpdHkiLCJlbnRlcmVkIiwiZGVmYXVsdFRpbWVvdXQiLCJlbnRlciIsImVudGVyaW5nU2NyZWVuIiwibGVhdmluZ1NjcmVlbiIsImFkZEVuZExpc3RlbmVyIiwiYXBwZWFyIiwib25FbnRlciIsIm9uRW50ZXJlZCIsIm9uRW50ZXJpbmciLCJvbkV4aXQiLCJvbkV4aXRpbmciLCJUcmFuc2l0aW9uQ29tcG9uZW50Iiwibm9kZVJlZiIsIm5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2siLCJjYWxsYmFjayIsIm1heWJlSXNBcHBlYXJpbmciLCJub2RlIiwiaGFuZGxlRW50ZXJpbmciLCJoYW5kbGVFbnRlciIsImlzQXBwZWFyaW5nIiwidHJhbnNpdGlvblByb3BzIiwid2Via2l0VHJhbnNpdGlvbiIsImhhbmRsZUVudGVyZWQiLCJoYW5kbGVFeGl0aW5nIiwiaGFuZGxlRXhpdCIsImhhbmRsZUV4aXRlZCIsIm5leHQiLCJzdGF0ZSIsImNoaWxkUHJvcHMiLCJ2aXNpYmlsaXR5Il0sInNvdXJjZVJvb3QiOiIifQ==