@touchtech/web-navigation-menu 0.0.9 → 0.0.10-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- (()=>{"use strict";var t={n:e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return t.d(n,{a:n}),n},d:(e,n)=>{for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{APPLICATIONS_TIER_WIDTH:()=>Ka,AppPaths:()=>Za,Navigation:()=>ou,NavigationButton:()=>au,TENANTS_TIER_WIDTH:()=>qa});var n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},n(t,e)};function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}var o=function(){return o=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},o.apply(this,arguments)};function i(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(t);o<r.length;o++)e.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(t,r[o])&&(n[r[o]]=t[r[o]])}return n}function a(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var r,o,i=n.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(t){o={error:t}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}function s(t,e,n){if(n||2===arguments.length)for(var r,o=0,i=e.length;o<i;o++)!r&&o in e||(r||(r=Array.prototype.slice.call(e,0,o)),r[o]=e[o]);return t.concat(r||Array.prototype.slice.call(e))}Object.create,Object.create;const u=require("react");var l=t.n(u),c=("undefined"==typeof process||process.env,"production");const d=1/60*1e3,f="undefined"!=typeof performance?()=>performance.now():()=>Date.now(),p="undefined"!=typeof window?t=>window.requestAnimationFrame(t):t=>setTimeout((()=>t(f())),d);let v=!0,h=!1,m=!1;const g={delta:0,timestamp:0},y=["read","update","preRender","render","postRender"],E=y.reduce(((t,e)=>(t[e]=function(t){let e=[],n=[],r=0,o=!1,i=!1;const a=new WeakSet,s={schedule:(t,i=!1,s=!1)=>{const u=s&&o,l=u?e:n;return i&&a.add(t),-1===l.indexOf(t)&&(l.push(t),u&&o&&(r=e.length)),t},cancel:t=>{const e=n.indexOf(t);-1!==e&&n.splice(e,1),a.delete(t)},process:u=>{if(o)i=!0;else{if(o=!0,[e,n]=[n,e],n.length=0,r=e.length,r)for(let n=0;n<r;n++){const r=e[n];r(u),a.has(r)&&(s.schedule(r),t())}o=!1,i&&(i=!1,s.process(u))}}};return s}((()=>h=!0)),t)),{}),x=y.reduce(((t,e)=>{const n=E[e];return t[e]=(t,e=!1,r=!1)=>(h||P(),n.schedule(t,e,r)),t}),{}),b=y.reduce(((t,e)=>(t[e]=E[e].cancel,t)),{}),w=y.reduce(((t,e)=>(t[e]=()=>E[e].process(g),t)),{}),A=t=>E[t].process(g),S=t=>{h=!1,g.delta=v?d:Math.max(Math.min(t-g.timestamp,40),1),g.timestamp=t,m=!0,y.forEach(A),m=!1,h&&(v=!1,p(S))},P=()=>{h=!0,v=!0,m||p(S)},T=()=>g,C=x;var M="undefined"!=typeof document,V=M?u.useLayoutEffect:u.useEffect;function R(){var t=(0,u.useRef)(!1);return V((function(){return t.current=!0,function(){t.current=!1}}),[]),t}var O=(0,u.createContext)(null);function D(t){var e=(0,u.useRef)(null);return null===e.current&&(e.current=t()),e.current}var L=0,k=function(){return L++},N=function(){return D(k)},I=function(t){var e=t.children,n=t.initial,r=t.isPresent,o=t.onExitComplete,i=t.custom,a=t.presenceAffectsLayout,s=D(j),l=N(),c=(0,u.useMemo)((function(){return{id:l,initial:n,isPresent:r,custom:i,onExitComplete:function(t){var e,n;s.set(t,!0);try{for(var r=function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],r=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}(s.values()),i=r.next();!i.done;i=r.next())if(!i.value)return}catch(t){e={error:t}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(e)throw e.error}}null==o||o()},register:function(t){return s.set(t,!1),function(){return s.delete(t)}}}}),a?void 0:[r]);return(0,u.useMemo)((function(){s.forEach((function(t,e){return s.set(e,!1)}))}),[r]),u.useEffect((function(){!r&&!s.size&&(null==o||o())}),[r]),u.createElement(O.Provider,{value:c},e)};function j(){return new Map}var B=(0,u.createContext)({});function F(t){return(0,u.useEffect)((function(){return function(){return t()}}),[])}var U=function(t){return t.key||""},H=function(t){var e=t.children,n=t.custom,r=t.initial,o=void 0===r||r,i=t.onExitComplete,l=t.exitBeforeEnter,d=t.presenceAffectsLayout,f=void 0===d||d,p=a(function(){var t=R(),e=a((0,u.useState)(0),2),n=e[0],r=e[1],o=(0,u.useCallback)((function(){t.current&&r(n+1)}),[n]);return[(0,u.useCallback)((function(){return C.postRender(o)}),[o]),n]}(),1),v=p[0],h=(0,u.useContext)(B).forceRender;h&&(v=h);var m=R(),g=function(t){var e=[];return u.Children.forEach(t,(function(t){(0,u.isValidElement)(t)&&e.push(t)})),e}(e),y=g,E=new Set,x=(0,u.useRef)(y),b=(0,u.useRef)(new Map).current,w=(0,u.useRef)(!0);if(V((function(){w.current=!1,function(t,e){t.forEach((function(t){var n=U(t);e.set(n,t)}))}(g,b),x.current=y})),F((function(){w.current=!0,b.clear(),E.clear()})),w.current)return u.createElement(u.Fragment,null,y.map((function(t){return u.createElement(I,{key:U(t),isPresent:!0,initial:!!o&&void 0,presenceAffectsLayout:f},t)})));y=s([],a(y),!1);for(var A=x.current.map(U),S=g.map(U),P=A.length,T=0;T<P;T++){var M=A[T];-1===S.indexOf(M)&&E.add(M)}return l&&E.size&&(y=[]),E.forEach((function(t){if(-1===S.indexOf(t)){var e=b.get(t);if(e){var r=A.indexOf(t);y.splice(r,0,u.createElement(I,{key:U(e),isPresent:!1,onExitComplete:function(){b.delete(t),E.delete(t);var e=x.current.findIndex((function(e){return e.key===t}));if(x.current.splice(e,1),!E.size){if(x.current=g,!1===m.current)return;v(),i&&i()}},custom:n,presenceAffectsLayout:f},e))}}})),y=y.map((function(t){var e=t.key;return E.has(e)?t:u.createElement(I,{key:U(t),isPresent:!0,presenceAffectsLayout:f},t)})),"production"!==c&&l&&y.length>1&&console.warn("You're attempting to animate multiple children within AnimatePresence, but its exitBeforeEnter prop is set to true. This will lead to odd visual behaviour."),u.createElement(u.Fragment,null,E.size?y:y.map((function(t){return(0,u.cloneElement)(t)})))},_=function(t){return{isEnabled:function(e){return t.some((function(t){return!!e[t]}))}}},z={measureLayout:_(["layout","layoutId","drag"]),animation:_(["animate","exit","variants","whileHover","whileTap","whileFocus","whileDrag","whileInView"]),exit:_(["exit"]),drag:_(["drag","dragControls"]),focus:_(["whileFocus"]),hover:_(["whileHover","onHoverStart","onHoverEnd"]),tap:_(["whileTap","onTap","onTapStart","onTapCancel"]),pan:_(["onPan","onPanStart","onPanSessionStart","onPanEnd"]),inView:_(["whileInView","onViewportEnter","onViewportLeave"])},W=function(){},G=function(){},X=(0,u.createContext)({strict:!1}),Y=Object.keys(z),Z=Y.length,q=(0,u.createContext)({transformPagePoint:function(t){return t},isStatic:!1,reducedMotion:"never"}),K=(0,u.createContext)({}),$={current:null},Q=!1;function J(t,e,n,r){var o,i,s=(0,u.useContext)(X),l=(0,u.useContext)(K).visualElement,c=(0,u.useContext)(O),d=(!Q&&function(){if(Q=!0,M)if(window.matchMedia){var t=window.matchMedia("(prefers-reduced-motion)"),e=function(){return $.current=t.matches};t.addListener(e),e()}else $.current=!1}(),o=a((0,u.useState)($.current),1)[0],"never"!==(i=(0,u.useContext)(q).reducedMotion)&&("always"===i||o)),f=(0,u.useRef)(void 0);r||(r=s.renderer),!f.current&&r&&(f.current=r(t,{visualState:e,parent:l,props:n,presenceId:null==c?void 0:c.id,blockInitialAnimation:!1===(null==c?void 0:c.initial),shouldReduceMotion:d}));var p=f.current;return V((function(){null==p||p.syncRender()})),(0,u.useEffect)((function(){var t;null===(t=null==p?void 0:p.animationState)||void 0===t||t.animateChanges()})),V((function(){return function(){return null==p?void 0:p.notifyUnmount()}}),[]),p}function tt(t){return"object"==typeof t&&Object.prototype.hasOwnProperty.call(t,"current")}function et(t){return Array.isArray(t)}function nt(t){return"string"==typeof t||et(t)}function rt(t,e,n,r,o){var i;return void 0===r&&(r={}),void 0===o&&(o={}),"function"==typeof e&&(e=e(null!=n?n:t.custom,r,o)),"string"==typeof e&&(e=null===(i=t.variants)||void 0===i?void 0:i[e]),"function"==typeof e&&(e=e(null!=n?n:t.custom,r,o)),e}function ot(t,e,n){var r=t.getProps();return rt(r,e,null!=n?n:r.custom,function(t){var e={};return t.forEachValue((function(t,n){return e[n]=t.get()})),e}(t),function(t){var e={};return t.forEachValue((function(t,n){return e[n]=t.getVelocity()})),e}(t))}function it(t){var e;return"function"==typeof(null===(e=t.animate)||void 0===e?void 0:e.start)||nt(t.initial)||nt(t.animate)||nt(t.whileHover)||nt(t.whileDrag)||nt(t.whileTap)||nt(t.whileFocus)||nt(t.exit)}function at(t){return Boolean(it(t)||t.variants)}function st(t){return Array.isArray(t)?t.join(" "):t}var ut={hasAnimatedSinceResize:!0,hasEverUpdated:!1},lt=1,ct=(0,u.createContext)({}),dt=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.getSnapshotBeforeUpdate=function(){return this.updateProps(),null},e.prototype.componentDidUpdate=function(){},e.prototype.updateProps=function(){var t=this.props,e=t.visualElement,n=t.props;e&&e.setProps(n)},e.prototype.render=function(){return this.props.children},e}(u.Component);function ft(t){var e=t.preloadedFeatures,n=t.createVisualElement,r=t.projectionNodeConstructor,i=t.useRender,a=t.useVisualState,s=t.Component;return e&&function(t){for(var e in t)null!==t[e]&&("projectionNodeConstructor"===e?z.projectionNodeConstructor=t[e]:z[e].Component=t[e])}(e),(0,u.forwardRef)((function(t,l){var d=function(t){var e,n=t.layoutId,r=null===(e=(0,u.useContext)(B))||void 0===e?void 0:e.id;return r&&void 0!==n?r+"-"+n:n}(t);t=o(o({},t),{layoutId:d});var f=(0,u.useContext)(q),p=null,v=function(t){var e=function(t,e){if(it(t)){var n=t.initial,r=t.animate;return{initial:!1===n||nt(n)?n:void 0,animate:nt(r)?r:void 0}}return!1!==t.inherit?e:{}}(t,(0,u.useContext)(K)),n=e.initial,r=e.animate;return(0,u.useMemo)((function(){return{initial:n,animate:r}}),[st(n),st(r)])}(t),h=f.isStatic?void 0:D((function(){if(ut.hasEverUpdated)return lt++})),m=a(t,f.isStatic);return!f.isStatic&&M&&(v.visualElement=J(s,m,o(o({},f),t),n),function(t,e,n,r){var o,i=e.layoutId,a=e.layout,s=e.drag,l=e.dragConstraints,c=e.layoutScroll,d=(0,u.useContext)(ct);r&&n&&!(null==n?void 0:n.projection)&&(n.projection=new r(t,n.getLatestValues(),null===(o=n.parent)||void 0===o?void 0:o.projection),n.projection.setOptions({layoutId:i,layout:a,alwaysMeasureLayout:Boolean(s)||l&&tt(l),visualElement:n,scheduleRender:function(){return n.scheduleRender()},animationType:"string"==typeof a?a:"both",initialPromotionConfig:d,layoutScroll:c}))}(h,t,v.visualElement,r||z.projectionNodeConstructor),p=function(t,e,n){var r=[],i=(0,u.useContext)(X);if(!e)return null;"production"!==c&&n&&i.strict&&G(!1,"You have rendered a `motion` component within a `LazyMotion` component. This will break tree shaking. Import and render a `m` component instead.");for(var a=0;a<Z;a++){var s=Y[a],l=z[s],d=l.isEnabled,f=l.Component;d(t)&&f&&r.push(u.createElement(f,o({key:s},t,{visualElement:e})))}return r}(t,v.visualElement,e)),u.createElement(dt,{visualElement:v.visualElement,props:o(o({},f),t)},p,u.createElement(K.Provider,{value:v},i(s,t,h,function(t,e,n){return(0,u.useCallback)((function(r){var o;r&&(null===(o=t.mount)||void 0===o||o.call(t,r)),e&&(r?e.mount(r):e.unmount()),n&&("function"==typeof n?n(r):tt(n)&&(n.current=r))}),[e])}(m,v.visualElement,l),m,f.isStatic,v.visualElement)))}))}function pt(t){function e(e,n){return void 0===n&&(n={}),ft(t(e,n))}if("undefined"==typeof Proxy)return e;var n=new Map;return new Proxy(e,{get:function(t,r){return n.has(r)||n.set(r,e(r)),n.get(r)}})}var vt=["animate","circle","defs","desc","ellipse","g","image","line","filter","marker","mask","metadata","path","pattern","polygon","polyline","rect","stop","svg","switch","symbol","text","tspan","use","view"];function ht(t){return"string"==typeof t&&!t.includes("-")&&!!(vt.indexOf(t)>-1||/[A-Z]/.test(t))}var mt={},gt=["","X","Y","Z"],yt=["transformPerspective","x","y","z"];function Et(t,e){return yt.indexOf(t)-yt.indexOf(e)}["translate","scale","rotate","skew"].forEach((function(t){return gt.forEach((function(e){return yt.push(t+e)}))}));var xt=new Set(yt);function bt(t){return xt.has(t)}var wt=new Set(["originX","originY","originZ"]);function At(t){return wt.has(t)}function St(t,e){var n=e.layout,r=e.layoutId;return bt(t)||At(t)||(n||void 0!==r)&&(!!mt[t]||"opacity"===t)}var Pt=function(t){return Boolean(null!==t&&"object"==typeof t&&t.getVelocity)},Tt={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"};function Ct(t){return t.startsWith("--")}var Mt=function(t,e){return e&&"number"==typeof t?e.transform(t):t};const Vt=(t,e)=>n=>Math.max(Math.min(n,e),t),Rt=t=>t%1?Number(t.toFixed(5)):t,Ot=/(-)?([\d]*\.?[\d])+/g,Dt=/(#[0-9a-f]{6}|#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2,3}\s*\/*\s*[\d\.]+%?\))/gi,Lt=/^(#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2,3}\s*\/*\s*[\d\.]+%?\))$/i;function kt(t){return"string"==typeof t}const Nt=t=>({test:e=>kt(e)&&e.endsWith(t)&&1===e.split(" ").length,parse:parseFloat,transform:e=>`${e}${t}`}),It=Nt("deg"),jt=Nt("%"),Bt=Nt("px"),Ft=Nt("vh"),Ut=Nt("vw"),Ht=Object.assign(Object.assign({},jt),{parse:t=>jt.parse(t)/100,transform:t=>jt.transform(100*t)}),_t={test:t=>"number"==typeof t,parse:parseFloat,transform:t=>t},zt=Object.assign(Object.assign({},_t),{transform:Vt(0,1)}),Wt=Object.assign(Object.assign({},_t),{default:1});var Gt=o(o({},_t),{transform:Math.round}),Xt={borderWidth:Bt,borderTopWidth:Bt,borderRightWidth:Bt,borderBottomWidth:Bt,borderLeftWidth:Bt,borderRadius:Bt,radius:Bt,borderTopLeftRadius:Bt,borderTopRightRadius:Bt,borderBottomRightRadius:Bt,borderBottomLeftRadius:Bt,width:Bt,maxWidth:Bt,height:Bt,maxHeight:Bt,size:Bt,top:Bt,right:Bt,bottom:Bt,left:Bt,padding:Bt,paddingTop:Bt,paddingRight:Bt,paddingBottom:Bt,paddingLeft:Bt,margin:Bt,marginTop:Bt,marginRight:Bt,marginBottom:Bt,marginLeft:Bt,rotate:It,rotateX:It,rotateY:It,rotateZ:It,scale:Wt,scaleX:Wt,scaleY:Wt,scaleZ:Wt,skew:It,skewX:It,skewY:It,distance:Bt,translateX:Bt,translateY:Bt,translateZ:Bt,x:Bt,y:Bt,z:Bt,perspective:Bt,transformPerspective:Bt,opacity:zt,originX:Ht,originY:Ht,originZ:Bt,zIndex:Gt,fillOpacity:zt,strokeOpacity:zt,numOctaves:Gt};function Yt(t,e,n,r){var o,i=t.style,a=t.vars,s=t.transform,u=t.transformKeys,l=t.transformOrigin;u.length=0;var c=!1,d=!1,f=!0;for(var p in e){var v=e[p];if(Ct(p))a[p]=v;else{var h=Xt[p],m=Mt(v,h);if(bt(p)){if(c=!0,s[p]=m,u.push(p),!f)continue;v!==(null!==(o=h.default)&&void 0!==o?o:0)&&(f=!1)}else At(p)?(l[p]=m,d=!0):i[p]=m}}c?i.transform=function(t,e,n,r){var o=t.transform,i=t.transformKeys,a=e.enableHardwareAcceleration,s=void 0===a||a,u=e.allowTransformNone,l=void 0===u||u,c="";i.sort(Et);for(var d=!1,f=i.length,p=0;p<f;p++){var v=i[p];c+="".concat(Tt[v]||v,"(").concat(o[v],") "),"z"===v&&(d=!0)}return!d&&s?c+="translateZ(0)":c=c.trim(),r?c=r(o,n?"":c):l&&n&&(c="none"),c}(t,n,f,r):r?i.transform=r({},""):!e.transform&&i.transform&&(i.transform="none"),d&&(i.transformOrigin=function(t){var e=t.originX,n=void 0===e?"50%":e,r=t.originY,o=void 0===r?"50%":r,i=t.originZ,a=void 0===i?0:i;return"".concat(n," ").concat(o," ").concat(a)}(l))}var Zt=function(){return{style:{},transform:{},transformKeys:[],transformOrigin:{},vars:{}}};function qt(t,e,n){for(var r in e)Pt(e[r])||St(r,n)||(t[r]=e[r])}function Kt(t,e,n){var r={},i=function(t,e,n){var r={};return qt(r,t.style||{},t),Object.assign(r,function(t,e,n){var r=t.transformTemplate;return(0,u.useMemo)((function(){var t=Zt();Yt(t,e,{enableHardwareAcceleration:!n},r);var i=t.vars,a=t.style;return o(o({},i),a)}),[e])}(t,e,n)),t.transformValues&&(r=t.transformValues(r)),r}(t,e,n);return Boolean(t.drag)&&!1!==t.dragListener&&(r.draggable=!1,i.userSelect=i.WebkitUserSelect=i.WebkitTouchCallout="none",i.touchAction=!0===t.drag?"none":"pan-".concat("x"===t.drag?"y":"x")),r.style=i,r}var $t=new Set(["initial","animate","exit","style","variants","transition","transformTemplate","transformValues","custom","inherit","layout","layoutId","layoutDependency","onLayoutAnimationStart","onLayoutAnimationComplete","onLayoutMeasure","onBeforeLayoutMeasure","onAnimationStart","onAnimationComplete","onUpdate","onDragStart","onDrag","onDragEnd","onMeasureDragConstraints","onDirectionLock","onDragTransitionEnd","drag","dragControls","dragListener","dragConstraints","dragDirectionLock","dragSnapToOrigin","_dragX","_dragY","dragElastic","dragMomentum","dragPropagation","dragTransition","whileDrag","onPan","onPanStart","onPanEnd","onPanSessionStart","onTap","onTapStart","onTapCancel","onHoverStart","onHoverEnd","whileFocus","whileTap","whileHover","whileInView","onViewportEnter","onViewportLeave","viewport","layoutScroll"]);function Qt(t){return $t.has(t)}var Jt,te=function(t){return!Qt(t)};try{(Jt=require("@emotion/is-prop-valid").default)&&(te=function(t){return t.startsWith("on")?!Qt(t):Jt(t)})}catch(t){}function ee(t,e,n){return"string"==typeof t?t:Bt.transform(e+n*t)}var ne={offset:"stroke-dashoffset",array:"stroke-dasharray"},re={offset:"strokeDashoffset",array:"strokeDasharray"};function oe(t,e,n,r){var o=e.attrX,a=e.attrY,s=e.originX,u=e.originY,l=e.pathLength,c=e.pathSpacing,d=void 0===c?1:c,f=e.pathOffset,p=void 0===f?0:f;Yt(t,i(e,["attrX","attrY","originX","originY","pathLength","pathSpacing","pathOffset"]),n,r),t.attrs=t.style,t.style={};var v=t.attrs,h=t.style,m=t.dimensions;v.transform&&(m&&(h.transform=v.transform),delete v.transform),m&&(void 0!==s||void 0!==u||h.transform)&&(h.transformOrigin=function(t,e,n){var r=ee(e,t.x,t.width),o=ee(n,t.y,t.height);return"".concat(r," ").concat(o)}(m,void 0!==s?s:.5,void 0!==u?u:.5)),void 0!==o&&(v.x=o),void 0!==a&&(v.y=a),void 0!==l&&function(t,e,n,r,o){void 0===n&&(n=1),void 0===r&&(r=0),void 0===o&&(o=!0),t.pathLength=1;var i=o?ne:re;t[i.offset]=Bt.transform(-r);var a=Bt.transform(e),s=Bt.transform(n);t[i.array]="".concat(a," ").concat(s)}(v,l,d,p,!1)}var ie=function(){return o(o({},Zt()),{attrs:{}})};function ae(t,e){var n=(0,u.useMemo)((function(){var n=ie();return oe(n,e,{enableHardwareAcceleration:!1},t.transformTemplate),o(o({},n.attrs),{style:o({},n.style)})}),[e]);if(t.style){var r={};qt(r,t.style,t),n.style=o(o({},r),n.style)}return n}function se(t){return void 0===t&&(t=!1),function(e,n,r,i,a,s){var l=a.latestValues,c=(ht(e)?ae:Kt)(n,l,s),d=function(t,e,n){var r={};for(var o in t)(te(o)||!0===n&&Qt(o)||!e&&!Qt(o)||t.draggable&&o.startsWith("onDrag"))&&(r[o]=t[o]);return r}(n,"string"==typeof e,t),f=o(o(o({},d),c),{ref:i});return r&&(f["data-projection-id"]=r),(0,u.createElement)(e,f)}}var ue=/([a-z])([A-Z])/g,le=function(t){return t.replace(ue,"$1-$2").toLowerCase()};function ce(t,e,n,r){var o=e.style,i=e.vars;for(var a in Object.assign(t.style,o,r&&r.getProjectionStyles(n)),i)t.style.setProperty(a,i[a])}var de=new Set(["baseFrequency","diffuseConstant","kernelMatrix","kernelUnitLength","keySplines","keyTimes","limitingConeAngle","markerHeight","markerWidth","numOctaves","targetX","targetY","surfaceScale","specularConstant","specularExponent","stdDeviation","tableValues","viewBox","gradientTransform","pathLength"]);function fe(t,e,n,r){for(var o in ce(t,e,void 0,r),e.attrs)t.setAttribute(de.has(o)?o:le(o),e.attrs[o])}function pe(t){var e=t.style,n={};for(var r in e)(Pt(e[r])||St(r,t))&&(n[r]=e[r]);return n}function ve(t){var e=pe(t);for(var n in t)Pt(t[n])&&(e["x"===n||"y"===n?"attr"+n.toUpperCase():n]=t[n]);return e}function he(t){return"object"==typeof t&&"function"==typeof t.start}var me=function(t){return Array.isArray(t)},ge=function(t){return Boolean(t&&"object"==typeof t&&t.mix&&t.toValue)},ye=function(t){return me(t)?t[t.length-1]||0:t};function Ee(t){var e=Pt(t)?t.get():t;return ge(e)?e.toValue():e}function xe(t,e,n,r){var o=t.scrapeMotionValuesFromProps,i=t.createRenderState,a=t.onMount,s={latestValues:we(e,n,r,o),renderState:i()};return a&&(s.mount=function(t){return a(e,t,s)}),s}var be=function(t){return function(e,n){var r=(0,u.useContext)(K),o=(0,u.useContext)(O);return n?xe(t,e,r,o):D((function(){return xe(t,e,r,o)}))}};function we(t,e,n,r){var o={},a=!1===(null==n?void 0:n.initial),s=r(t);for(var u in s)o[u]=Ee(s[u]);var l=t.initial,c=t.animate,d=it(t),f=at(t);e&&f&&!d&&!1!==t.inherit&&(null!=l||(l=e.initial),null!=c||(c=e.animate));var p=a||!1===l,v=p?c:l;return v&&"boolean"!=typeof v&&!he(v)&&(Array.isArray(v)?v:[v]).forEach((function(e){var n=rt(t,e);if(n){var r=n.transitionEnd;n.transition;var a=i(n,["transitionEnd","transition"]);for(var s in a){var u=a[s];Array.isArray(u)&&(u=u[p?u.length-1:0]),null!==u&&(o[s]=u)}for(var s in r)o[s]=r[s]}})),o}var Ae,Se={useVisualState:be({scrapeMotionValuesFromProps:ve,createRenderState:ie,onMount:function(t,e,n){var r=n.renderState,o=n.latestValues;try{r.dimensions="function"==typeof e.getBBox?e.getBBox():e.getBoundingClientRect()}catch(t){r.dimensions={x:0,y:0,width:0,height:0}}oe(r,o,{enableHardwareAcceleration:!1},t.transformTemplate),fe(e,r)}})},Pe={useVisualState:be({scrapeMotionValuesFromProps:pe,createRenderState:Zt})};function Te(t,e,n,r){return void 0===r&&(r={passive:!0}),t.addEventListener(e,n,r),function(){return t.removeEventListener(e,n)}}function Ce(t,e,n,r){(0,u.useEffect)((function(){var o=t.current;if(n&&o)return Te(o,e,n,r)}),[t,e,n,r])}function Me(t){return"undefined"!=typeof PointerEvent&&t instanceof PointerEvent?!("mouse"!==t.pointerType):t instanceof MouseEvent}function Ve(t){return!!t.touches}!function(t){t.Animate="animate",t.Hover="whileHover",t.Tap="whileTap",t.Drag="whileDrag",t.Focus="whileFocus",t.InView="whileInView",t.Exit="exit"}(Ae||(Ae={}));var Re={pageX:0,pageY:0};function Oe(t,e){void 0===e&&(e="page");var n=t.touches[0]||t.changedTouches[0]||Re;return{x:n[e+"X"],y:n[e+"Y"]}}function De(t,e){return void 0===e&&(e="page"),{x:t[e+"X"],y:t[e+"Y"]}}function Le(t,e){return void 0===e&&(e="page"),{point:Ve(t)?Oe(t,e):De(t,e)}}var ke=function(t,e){void 0===e&&(e=!1);var n,r=function(e){return t(e,Le(e))};return e?(n=r,function(t){var e=t instanceof MouseEvent;(!e||e&&0===t.button)&&n(t)}):r},Ne=function(){return M&&null===window.onpointerdown},Ie=function(){return M&&null===window.ontouchstart},je=function(){return M&&null===window.onmousedown},Be={pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointercancel:"mousecancel",pointerover:"mouseover",pointerout:"mouseout",pointerenter:"mouseenter",pointerleave:"mouseleave"},Fe={pointerdown:"touchstart",pointermove:"touchmove",pointerup:"touchend",pointercancel:"touchcancel"};function Ue(t){return Ne()?t:Ie()?Fe[t]:je()?Be[t]:t}function He(t,e,n,r){return Te(t,Ue(e),ke(n,"pointerdown"===e),r)}function _e(t,e,n,r){return Ce(t,Ue(e),n&&ke(n,"pointerdown"===e),r)}function ze(t){var e=null;return function(){return null===e&&(e=t,function(){e=null})}}var We=ze("dragHorizontal"),Ge=ze("dragVertical");function Xe(t){var e=!1;if("y"===t)e=Ge();else if("x"===t)e=We();else{var n=We(),r=Ge();n&&r?e=function(){n(),r()}:(n&&n(),r&&r())}return e}function Ye(){var t=Xe(!0);return!t||(t(),!1)}function Ze(t,e,n){return function(r,o){var i;Me(r)&&!Ye()&&(null===(i=t.animationState)||void 0===i||i.setActive(Ae.Hover,e),null==n||n(r,o))}}var qe=function(t,e){return!!e&&(t===e||qe(t,e.parentElement))};const Ke=(t,e)=>n=>e(t(n)),$e=(...t)=>t.reduce(Ke);var Qe=new Set,Je=new WeakMap,tn=new WeakMap,en=function(t){var e;null===(e=Je.get(t.target))||void 0===e||e(t)},nn=function(t){t.forEach(en)};var rn={some:0,all:1};function on(t,e,n,r){var a=r.root,s=r.margin,l=r.amount,c=void 0===l?"some":l,d=r.once;(0,u.useEffect)((function(){if(t){var r={root:null==a?void 0:a.current,rootMargin:s,threshold:"number"==typeof c?c:rn[c]};return function(t,e,n){var r=function(t){var e=t.root,n=i(t,["root"]),r=e||document;tn.has(r)||tn.set(r,{});var a=tn.get(r),s=JSON.stringify(n);return a[s]||(a[s]=new IntersectionObserver(nn,o({root:e},n))),a[s]}(e);return Je.set(t,n),r.observe(t),function(){Je.delete(t),r.unobserve(t)}}(n.getInstance(),r,(function(t){var r,o=t.isIntersecting;if(e.isInView!==o&&(e.isInView=o,!d||o||!e.hasEnteredView)){o&&(e.hasEnteredView=!0),null===(r=n.animationState)||void 0===r||r.setActive(Ae.InView,o);var i=n.getProps(),a=o?i.onViewportEnter:i.onViewportLeave;null==a||a(t)}}))}}),[t,a,s,c])}function an(t,e,n,r){var o=r.fallback,i=void 0===o||o;(0,u.useEffect)((function(){var r;t&&i&&("production"!==c&&(r="IntersectionObserver not available on this device. whileInView animations will trigger on mount.",Qe.has(r)||(console.warn(r),Qe.add(r))),requestAnimationFrame((function(){var t;e.hasEnteredView=!0;var r=n.getProps().onViewportEnter;null==r||r(null),null===(t=n.animationState)||void 0===t||t.setActive(Ae.InView,!0)})))}),[t])}var sn=function(t){return function(e){return t(e),null}},un={inView:sn((function(t){var e=t.visualElement,n=t.whileInView,r=t.onViewportEnter,o=t.onViewportLeave,i=t.viewport,a=void 0===i?{}:i,s=(0,u.useRef)({hasEnteredView:!1,isInView:!1}),l=Boolean(n||r||o);a.once&&s.current.hasEnteredView&&(l=!1),("undefined"==typeof IntersectionObserver?an:on)(l,s.current,e,a)})),tap:sn((function(t){var e=t.onTap,n=t.onTapStart,r=t.onTapCancel,o=t.whileTap,i=t.visualElement,a=e||n||r||o,s=(0,u.useRef)(!1),l=(0,u.useRef)(null),c={passive:!(n||e||r||h)};function d(){var t;null===(t=l.current)||void 0===t||t.call(l),l.current=null}function f(){var t;return d(),s.current=!1,null===(t=i.animationState)||void 0===t||t.setActive(Ae.Tap,!1),!Ye()}function p(t,n){f()&&(qe(i.getInstance(),t.target)?null==e||e(t,n):null==r||r(t,n))}function v(t,e){f()&&(null==r||r(t,e))}function h(t,e){var r;d(),s.current||(s.current=!0,l.current=$e(He(window,"pointerup",p,c),He(window,"pointercancel",v,c)),null===(r=i.animationState)||void 0===r||r.setActive(Ae.Tap,!0),null==n||n(t,e))}_e(i,"pointerdown",a?h:void 0,c),F(d)})),focus:sn((function(t){var e=t.whileFocus,n=t.visualElement;Ce(n,"focus",e?function(){var t;null===(t=n.animationState)||void 0===t||t.setActive(Ae.Focus,!0)}:void 0),Ce(n,"blur",e?function(){var t;null===(t=n.animationState)||void 0===t||t.setActive(Ae.Focus,!1)}:void 0)})),hover:sn((function(t){var e=t.onHoverStart,n=t.onHoverEnd,r=t.whileHover,o=t.visualElement;_e(o,"pointerenter",e||r?Ze(o,!0,e):void 0,{passive:!e}),_e(o,"pointerleave",n||r?Ze(o,!1,n):void 0,{passive:!n})}))};function ln(){var t=(0,u.useContext)(O);if(null===t)return[!0,null];var e=t.isPresent,n=t.onExitComplete,r=t.register,o=N();return(0,u.useEffect)((function(){return r(o)}),[]),!e&&n?[!1,function(){return null==n?void 0:n(o)}]:[!0]}function cn(t,e){if(!Array.isArray(e))return!1;var n=e.length;if(n!==t.length)return!1;for(var r=0;r<n;r++)if(e[r]!==t[r])return!1;return!0}const dn=(t,e,n)=>Math.min(Math.max(n,t),e),fn=.001,pn=.01,vn=10,hn=.05,mn=1;const gn=12;function yn(t,e){return t*Math.sqrt(1-e*e)}const En=["duration","bounce"],xn=["stiffness","damping","mass"];function bn(t,e){return e.some((e=>void 0!==t[e]))}function wn(t){var{from:e=0,to:n=1,restSpeed:r=2,restDelta:o}=t,a=i(t,["from","to","restSpeed","restDelta"]);const s={done:!1,value:e};let{stiffness:u,damping:l,mass:c,velocity:d,duration:f,isResolvedFromDuration:p}=function(t){let e=Object.assign({velocity:0,stiffness:100,damping:10,mass:1,isResolvedFromDuration:!1},t);if(!bn(t,xn)&&bn(t,En)){const n=function({duration:t=800,bounce:e=.25,velocity:n=0,mass:r=1}){let o,i;W(t<=1e3*vn,"Spring duration must be 10 seconds or less");let a=1-e;a=dn(hn,mn,a),t=dn(pn,vn,t/1e3),a<1?(o=e=>{const r=e*a,o=r*t,i=r-n,s=yn(e,a),u=Math.exp(-o);return fn-i/s*u},i=e=>{const r=e*a*t,i=r*n+n,s=Math.pow(a,2)*Math.pow(e,2)*t,u=Math.exp(-r),l=yn(Math.pow(e,2),a);return(-o(e)+fn>0?-1:1)*((i-s)*u)/l}):(o=e=>Math.exp(-e*t)*((e-n)*t+1)-fn,i=e=>Math.exp(-e*t)*(t*t*(n-e)));const s=function(t,e,n){let r=n;for(let n=1;n<gn;n++)r-=t(r)/e(r);return r}(o,i,5/t);if(t*=1e3,isNaN(s))return{stiffness:100,damping:10,duration:t};{const e=Math.pow(s,2)*r;return{stiffness:e,damping:2*a*Math.sqrt(r*e),duration:t}}}(t);e=Object.assign(Object.assign(Object.assign({},e),n),{velocity:0,mass:1}),e.isResolvedFromDuration=!0}return e}(a),v=An,h=An;function m(){const t=d?-d/1e3:0,r=n-e,i=l/(2*Math.sqrt(u*c)),a=Math.sqrt(u/c)/1e3;if(void 0===o&&(o=Math.min(Math.abs(n-e)/100,.4)),i<1){const e=yn(a,i);v=o=>{const s=Math.exp(-i*a*o);return n-s*((t+i*a*r)/e*Math.sin(e*o)+r*Math.cos(e*o))},h=n=>{const o=Math.exp(-i*a*n);return i*a*o*(Math.sin(e*n)*(t+i*a*r)/e+r*Math.cos(e*n))-o*(Math.cos(e*n)*(t+i*a*r)-e*r*Math.sin(e*n))}}else if(1===i)v=e=>n-Math.exp(-a*e)*(r+(t+a*r)*e);else{const e=a*Math.sqrt(i*i-1);v=o=>{const s=Math.exp(-i*a*o),u=Math.min(e*o,300);return n-s*((t+i*a*r)*Math.sinh(u)+e*r*Math.cosh(u))/e}}}return m(),{next:t=>{const e=v(t);if(p)s.done=t>=f;else{const i=1e3*h(t),a=Math.abs(i)<=r,u=Math.abs(n-e)<=o;s.done=a&&u}return s.value=s.done?n:e,s},flipTarget:()=>{d=-d,[e,n]=[n,e],m()}}}wn.needsInterpolation=(t,e)=>"string"==typeof t||"string"==typeof e;const An=t=>0,Sn=(t,e,n)=>{const r=e-t;return 0===r?1:(n-t)/r},Pn=(t,e,n)=>-n*t+n*e+t,Tn=(t,e)=>n=>Boolean(kt(n)&&Lt.test(n)&&n.startsWith(t)||e&&Object.prototype.hasOwnProperty.call(n,e)),Cn=(t,e,n)=>r=>{if(!kt(r))return r;const[o,i,a,s]=r.match(Ot);return{[t]:parseFloat(o),[e]:parseFloat(i),[n]:parseFloat(a),alpha:void 0!==s?parseFloat(s):1}},Mn=Vt(0,255),Vn=Object.assign(Object.assign({},_t),{transform:t=>Math.round(Mn(t))}),Rn={test:Tn("rgb","red"),parse:Cn("red","green","blue"),transform:({red:t,green:e,blue:n,alpha:r=1})=>"rgba("+Vn.transform(t)+", "+Vn.transform(e)+", "+Vn.transform(n)+", "+Rt(zt.transform(r))+")"},On={test:Tn("#"),parse:function(t){let e="",n="",r="",o="";return t.length>5?(e=t.substr(1,2),n=t.substr(3,2),r=t.substr(5,2),o=t.substr(7,2)):(e=t.substr(1,1),n=t.substr(2,1),r=t.substr(3,1),o=t.substr(4,1),e+=e,n+=n,r+=r,o+=o),{red:parseInt(e,16),green:parseInt(n,16),blue:parseInt(r,16),alpha:o?parseInt(o,16)/255:1}},transform:Rn.transform},Dn={test:Tn("hsl","hue"),parse:Cn("hue","saturation","lightness"),transform:({hue:t,saturation:e,lightness:n,alpha:r=1})=>"hsla("+Math.round(t)+", "+jt.transform(Rt(e))+", "+jt.transform(Rt(n))+", "+Rt(zt.transform(r))+")"};function Ln(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t}function kn({hue:t,saturation:e,lightness:n,alpha:r}){t/=360,n/=100;let o=0,i=0,a=0;if(e/=100){const r=n<.5?n*(1+e):n+e-n*e,s=2*n-r;o=Ln(s,r,t+1/3),i=Ln(s,r,t),a=Ln(s,r,t-1/3)}else o=i=a=n;return{red:Math.round(255*o),green:Math.round(255*i),blue:Math.round(255*a),alpha:r}}const Nn=(t,e,n)=>{const r=t*t,o=e*e;return Math.sqrt(Math.max(0,n*(o-r)+r))},In=[On,Rn,Dn],jn=t=>In.find((e=>e.test(t))),Bn=t=>`'${t}' is not an animatable color. Use the equivalent color code instead.`,Fn=(t,e)=>{let n=jn(t),r=jn(e);G(!!n,Bn(t)),G(!!r,Bn(e));let o=n.parse(t),i=r.parse(e);n===Dn&&(o=kn(o),n=Rn),r===Dn&&(i=kn(i),r=Rn);const a=Object.assign({},o);return t=>{for(const e in a)"alpha"!==e&&(a[e]=Nn(o[e],i[e],t));return a.alpha=Pn(o.alpha,i.alpha,t),n.transform(a)}},Un={test:t=>Rn.test(t)||On.test(t)||Dn.test(t),parse:t=>Rn.test(t)?Rn.parse(t):Dn.test(t)?Dn.parse(t):On.parse(t),transform:t=>kt(t)?t:t.hasOwnProperty("red")?Rn.transform(t):Dn.transform(t)},Hn="${c}",_n="${n}";function zn(t){"number"==typeof t&&(t=`${t}`);const e=[];let n=0;const r=t.match(Dt);r&&(n=r.length,t=t.replace(Dt,Hn),e.push(...r.map(Un.parse)));const o=t.match(Ot);return o&&(t=t.replace(Ot,_n),e.push(...o.map(_t.parse))),{values:e,numColors:n,tokenised:t}}function Wn(t){return zn(t).values}function Gn(t){const{values:e,numColors:n,tokenised:r}=zn(t),o=e.length;return t=>{let e=r;for(let r=0;r<o;r++)e=e.replace(r<n?Hn:_n,r<n?Un.transform(t[r]):Rt(t[r]));return e}}const Xn=t=>"number"==typeof t?0:t,Yn={test:function(t){var e,n,r,o;return isNaN(t)&&kt(t)&&(null!==(n=null===(e=t.match(Ot))||void 0===e?void 0:e.length)&&void 0!==n?n:0)+(null!==(o=null===(r=t.match(Dt))||void 0===r?void 0:r.length)&&void 0!==o?o:0)>0},parse:Wn,createTransformer:Gn,getAnimatableNone:function(t){const e=Wn(t);return Gn(t)(e.map(Xn))}},Zn=t=>"number"==typeof t;function qn(t,e){return Zn(t)?n=>Pn(t,e,n):Un.test(t)?Fn(t,e):Jn(t,e)}const Kn=(t,e)=>{const n=[...t],r=n.length,o=t.map(((t,n)=>qn(t,e[n])));return t=>{for(let e=0;e<r;e++)n[e]=o[e](t);return n}},$n=(t,e)=>{const n=Object.assign(Object.assign({},t),e),r={};for(const o in n)void 0!==t[o]&&void 0!==e[o]&&(r[o]=qn(t[o],e[o]));return t=>{for(const e in r)n[e]=r[e](t);return n}};function Qn(t){const e=Yn.parse(t),n=e.length;let r=0,o=0,i=0;for(let t=0;t<n;t++)r||"number"==typeof e[t]?r++:void 0!==e[t].hue?i++:o++;return{parsed:e,numNumbers:r,numRGB:o,numHSL:i}}const Jn=(t,e)=>{const n=Yn.createTransformer(e),r=Qn(t),o=Qn(e);return r.numHSL===o.numHSL&&r.numRGB===o.numRGB&&r.numNumbers>=o.numNumbers?$e(Kn(r.parsed,o.parsed),n):(W(!0,`Complex values '${t}' and '${e}' too different to mix. Ensure all colors are of the same type, and that each contains the same quantity of number and color values. Falling back to instant transition.`),n=>`${n>0?e:t}`)},tr=(t,e)=>n=>Pn(t,e,n);function er(t,e,{clamp:n=!0,ease:r,mixer:o}={}){const i=t.length;G(i===e.length,"Both input and output ranges must be the same length"),G(!r||!Array.isArray(r)||r.length===i-1,"Array of easing functions must be of length `input.length - 1`, as it applies to the transitions **between** the defined values."),t[0]>t[i-1]&&(t=[].concat(t),e=[].concat(e),t.reverse(),e.reverse());const a=function(t,e,n){const r=[],o=n||("number"==typeof(i=t[0])?tr:"string"==typeof i?Un.test(i)?Fn:Jn:Array.isArray(i)?Kn:"object"==typeof i?$n:void 0);var i;const a=t.length-1;for(let n=0;n<a;n++){let i=o(t[n],t[n+1]);if(e){const t=Array.isArray(e)?e[n]:e;i=$e(t,i)}r.push(i)}return r}(e,r,o),s=2===i?function([t,e],[n]){return r=>n(Sn(t,e,r))}(t,a):function(t,e){const n=t.length,r=n-1;return o=>{let i=0,a=!1;if(o<=t[0]?a=!0:o>=t[r]&&(i=r-1,a=!0),!a){let e=1;for(;e<n&&!(t[e]>o||e===r);e++);i=e-1}const s=Sn(t[i],t[i+1],o);return e[i](s)}}(t,a);return n?e=>s(dn(t[0],t[i-1],e)):s}const nr=t=>e=>1-t(1-e),rr=t=>e=>e<=.5?t(2*e)/2:(2-t(2*(1-e)))/2,or=t=>e=>e*e*((t+1)*e-t),ir=t=>t,ar=(2,t=>Math.pow(t,2));const sr=nr(ar),ur=rr(ar),lr=t=>1-Math.sin(Math.acos(t)),cr=nr(lr),dr=rr(cr),fr=or(1.525),pr=nr(fr),vr=rr(fr),hr=(t=>{const e=or(1.525);return t=>(t*=2)<1?.5*e(t):.5*(2-Math.pow(2,-10*(t-1)))})(),mr=t=>{if(1===t||0===t)return t;const e=t*t;return t<.36363636363636365?7.5625*e:t<.7272727272727273?9.075*e-9.9*t+3.4:t<.9?12.066481994459833*e-19.63545706371191*t+8.898060941828255:10.8*t*t-20.52*t+10.72},gr=nr(mr);function yr(t,e){return t.map((()=>e||ur)).splice(0,t.length-1)}function Er({from:t=0,to:e=1,ease:n,offset:r,duration:o=300}){const i={done:!1,value:t},a=Array.isArray(e)?e:[t,e],s=function(t,e){return t.map((t=>t*e))}(r&&r.length===a.length?r:function(t){const e=t.length;return t.map(((t,n)=>0!==n?n/(e-1):0))}(a),o);function u(){return er(s,a,{ease:Array.isArray(n)?n:yr(a,n)})}let l=u();return{next:t=>(i.value=l(t),i.done=t>=o,i),flipTarget:()=>{a.reverse(),l=u()}}}const xr={keyframes:Er,spring:wn,decay:function({velocity:t=0,from:e=0,power:n=.8,timeConstant:r=350,restDelta:o=.5,modifyTarget:i}){const a={done:!1,value:e};let s=n*t;const u=e+s,l=void 0===i?u:i(u);return l!==u&&(s=l-e),{next:t=>{const e=-s*Math.exp(-t/r);return a.done=!(e>o||e<-o),a.value=a.done?l:l+e,a},flipTarget:()=>{}}}};function br(t,e,n=0){return t-e-n}const wr=t=>{const e=({delta:e})=>t(e);return{start:()=>C.update(e,!0),stop:()=>b.update(e)}};function Ar(t){var e,n,{from:r,autoplay:o=!0,driver:a=wr,elapsed:s=0,repeat:u=0,repeatType:l="loop",repeatDelay:c=0,onPlay:d,onStop:f,onComplete:p,onRepeat:v,onUpdate:h}=t,m=i(t,["from","autoplay","driver","elapsed","repeat","repeatType","repeatDelay","onPlay","onStop","onComplete","onRepeat","onUpdate"]);let g,y,E,{to:x}=m,b=0,w=m.duration,A=!1,S=!0;const P=function(t){if(Array.isArray(t.to))return Er;if(xr[t.type])return xr[t.type];const e=new Set(Object.keys(t));return e.has("ease")||e.has("duration")&&!e.has("dampingRatio")?Er:e.has("dampingRatio")||e.has("stiffness")||e.has("mass")||e.has("damping")||e.has("restSpeed")||e.has("restDelta")?wn:Er}(m);(null===(n=(e=P).needsInterpolation)||void 0===n?void 0:n.call(e,r,x))&&(E=er([0,100],[r,x],{clamp:!1}),r=0,x=100);const T=P(Object.assign(Object.assign({},m),{from:r,to:x}));return o&&(null==d||d(),g=a((function(t){if(S||(t=-t),s+=t,!A){const t=T.next(Math.max(0,s));y=t.value,E&&(y=E(y)),A=S?t.done:s<=0}null==h||h(y),A&&(0===b&&(null!=w||(w=s)),b<u?function(t,e,n,r){return r?t>=e+n:t<=-n}(s,w,c,S)&&(b++,"reverse"===l?(S=b%2==0,s=function(t,e,n=0,r=!0){return r?br(e+-t,e,n):e-(t-e)+n}(s,w,c,S)):(s=br(s,w,c),"mirror"===l&&T.flipTarget()),A=!1,v&&v()):(g.stop(),p&&p()))})),g.start()),{stop:()=>{null==f||f(),g.stop()}}}function Sr(t,e){return e?t*(1e3/e):0}var Pr=function(t){return 1e3*t};const Tr=(t,e)=>1-3*e+3*t,Cr=(t,e)=>3*e-6*t,Mr=t=>3*t,Vr=(t,e,n)=>((Tr(e,n)*t+Cr(e,n))*t+Mr(e))*t,Rr=(t,e,n)=>3*Tr(e,n)*t*t+2*Cr(e,n)*t+Mr(e),Or=1e-7,Dr=10,Lr=8,kr=.001,Nr=11,Ir=1/(Nr-1);function jr(t,e,n,r){if(t===e&&n===r)return ir;const o=new Float32Array(Nr);for(let e=0;e<Nr;++e)o[e]=Vr(e*Ir,t,n);return i=>0===i||1===i?i:Vr(function(e){let r=0,i=1;const a=Nr-1;for(;i!==a&&o[i]<=e;++i)r+=Ir;--i;const s=r+(e-o[i])/(o[i+1]-o[i])*Ir,u=Rr(s,t,n);return u>=kr?function(t,e,n,r){for(let o=0;o<Lr;++o){const o=Rr(e,n,r);if(0===o)return e;e-=(Vr(e,n,r)-t)/o}return e}(e,s,t,n):0===u?s:function(t,e,n,r,o){let i,a,s=0;do{a=e+(n-e)/2,i=Vr(a,r,o)-t,i>0?n=a:e=a}while(Math.abs(i)>Or&&++s<Dr);return a}(e,r,r+Ir,t,n)}(i),e,r)}var Br={linear:ir,easeIn:ar,easeInOut:ur,easeOut:sr,circIn:lr,circInOut:dr,circOut:cr,backIn:fr,backInOut:vr,backOut:pr,anticipate:hr,bounceIn:gr,bounceInOut:t=>t<.5?.5*(1-mr(1-2*t)):.5*mr(2*t-1)+.5,bounceOut:mr},Fr=function(t){if(Array.isArray(t)){G(4===t.length,"Cubic bezier arrays must contain four numerical values.");var e=a(t,4);return jr(e[0],e[1],e[2],e[3])}return"string"==typeof t?(G(void 0!==Br[t],"Invalid easing type '".concat(t,"'")),Br[t]):t},Ur=function(t){return Array.isArray(t)&&"number"!=typeof t[0]},Hr=function(t,e){return!("zIndex"===t||"number"!=typeof e&&!Array.isArray(e)&&("string"!=typeof e||!Yn.test(e)||e.startsWith("url(")))},_r=function(){return{type:"spring",stiffness:500,damping:25,restSpeed:10}},zr=function(t){return{type:"spring",stiffness:550,damping:0===t?2*Math.sqrt(550):30,restSpeed:10}},Wr=function(){return{type:"keyframes",ease:"linear",duration:.3}},Gr=function(t){return{type:"keyframes",duration:.8,values:t}},Xr={x:_r,y:_r,z:_r,rotate:_r,rotateX:_r,rotateY:_r,rotateZ:_r,scaleX:zr,scaleY:zr,scale:zr,opacity:Wr,backgroundColor:Wr,color:Wr,default:zr},Yr=function(t,e){var n;return n=me(e)?Gr:Xr[t]||Xr.default,o({to:e},n(e))};const Zr=new Set(["brightness","contrast","saturate","opacity"]);function qr(t){let[e,n]=t.slice(0,-1).split("(");if("drop-shadow"===e)return t;const[r]=n.match(Ot)||[];if(!r)return t;const o=n.replace(r,"");let i=Zr.has(e)?1:0;return r!==n&&(i*=100),e+"("+i+o+")"}const Kr=/([a-z-]*)\(.*?\)/g,$r=Object.assign(Object.assign({},Yn),{getAnimatableNone:t=>{const e=t.match(Kr);return e?e.map(qr).join(" "):t}});var Qr=o(o({},Xt),{color:Un,backgroundColor:Un,outlineColor:Un,fill:Un,stroke:Un,borderColor:Un,borderTopColor:Un,borderRightColor:Un,borderBottomColor:Un,borderLeftColor:Un,filter:$r,WebkitFilter:$r}),Jr=function(t){return Qr[t]};function to(t,e){var n,r=Jr(t);return r!==$r&&(r=Yn),null===(n=r.getAnimatableNone)||void 0===n?void 0:n.call(r,e)}var eo={current:!1},no=!1;function ro(t,e,n,r,u){var l,c=ao(r,t),d=null!==(l=c.from)&&void 0!==l?l:e.get(),f=Hr(t,n);"none"===d&&f&&"string"==typeof n?d=to(t,n):oo(d)&&"string"==typeof n?d=io(n):!Array.isArray(n)&&oo(n)&&"string"==typeof d&&(n=io(d));var p=Hr(t,d);return W(p===f,"You are trying to animate ".concat(t,' from "').concat(d,'" to "').concat(n,'". ').concat(d," is not an animatable value - to enable this animation set ").concat(d," to a value animatable to ").concat(n," via the `style` property.")),p&&f&&!1!==c.type?function(){var r={from:d,to:n,velocity:e.getVelocity(),onComplete:u,onUpdate:function(t){return e.set(t)}};return"inertia"===c.type||"decay"===c.type?function({from:t=0,velocity:e=0,min:n,max:r,power:o=.8,timeConstant:i=750,bounceStiffness:a=500,bounceDamping:s=10,restDelta:u=1,modifyTarget:l,driver:c,onUpdate:d,onComplete:f,onStop:p}){let v;function h(t){return void 0!==n&&t<n||void 0!==r&&t>r}function m(t){return void 0===n?r:void 0===r||Math.abs(n-t)<Math.abs(r-t)?n:r}function g(t){null==v||v.stop(),v=Ar(Object.assign(Object.assign({},t),{driver:c,onUpdate:e=>{var n;null==d||d(e),null===(n=t.onUpdate)||void 0===n||n.call(t,e)},onComplete:f,onStop:p}))}function y(t){g(Object.assign({type:"spring",stiffness:a,damping:s,restDelta:u},t))}if(h(t))y({from:t,velocity:e,to:m(t)});else{let r=o*e+t;void 0!==l&&(r=l(r));const a=m(r),s=a===n?-1:1;let c,d;const f=t=>{c=d,d=t,e=Sr(t-c,T().delta),(1===s&&t>a||-1===s&&t<a)&&y({from:t,to:a,velocity:e})};g({type:"decay",from:t,velocity:e,timeConstant:i,power:o,restDelta:u,modifyTarget:l,onUpdate:h(r)?f:void 0})}return{stop:()=>null==v?void 0:v.stop()}}(o(o({},r),c)):Ar(o(o({},function(t,e,n){var r;return Array.isArray(e.to)&&(null!==(r=t.duration)&&void 0!==r||(t.duration=.8)),function(t){Array.isArray(t.to)&&null===t.to[0]&&(t.to=s([],a(t.to),!1),t.to[0]=t.from)}(e),function(t){t.when,t.delay,t.delayChildren,t.staggerChildren,t.staggerDirection,t.repeat,t.repeatType,t.repeatDelay,t.from;var e=i(t,["when","delay","delayChildren","staggerChildren","staggerDirection","repeat","repeatType","repeatDelay","from"]);return!!Object.keys(e).length}(t)||(t=o(o({},t),Yr(n,e.to))),o(o({},e),function(t){var e=t.ease,n=t.times,r=t.yoyo,a=t.flip,s=t.loop,u=i(t,["ease","times","yoyo","flip","loop"]),l=o({},u);return n&&(l.offset=n),u.duration&&(l.duration=Pr(u.duration)),u.repeatDelay&&(l.repeatDelay=Pr(u.repeatDelay)),e&&(l.ease=Ur(e)?e.map(Fr):Fr(e)),"tween"===u.type&&(l.type="keyframes"),(r||s||a)&&(W(!no,"yoyo, loop and flip have been removed from the API. Replace with repeat and repeatType options."),no=!0,r?l.repeatType="reverse":s?l.repeatType="loop":a&&(l.repeatType="mirror"),l.repeat=s||r||a||u.repeat),"spring"!==u.type&&(l.type="keyframes"),l}(t))}(c,r,t)),{onUpdate:function(t){var e;r.onUpdate(t),null===(e=c.onUpdate)||void 0===e||e.call(c,t)},onComplete:function(){var t;r.onComplete(),null===(t=c.onComplete)||void 0===t||t.call(c)}}))}:function(){var t,r,o=ye(n);return e.set(o),u(),null===(t=null==c?void 0:c.onUpdate)||void 0===t||t.call(c,o),null===(r=null==c?void 0:c.onComplete)||void 0===r||r.call(c),{stop:function(){}}}}function oo(t){return 0===t||"string"==typeof t&&0===parseFloat(t)&&-1===t.indexOf(" ")}function io(t){return"number"==typeof t?0:to("",t)}function ao(t,e){return t[e]||t.default||t}function so(t,e,n,r){return void 0===r&&(r={}),eo.current&&(r={type:!1}),e.start((function(o){var i,a,s=ro(t,e,n,r,o),u=function(t,e){var n,r;return null!==(r=null!==(n=(ao(t,e)||{}).delay)&&void 0!==n?n:t.delay)&&void 0!==r?r:0}(r,t),l=function(){return a=s()};return u?i=window.setTimeout(l,Pr(u)):l(),function(){clearTimeout(i),null==a||a.stop()}}))}var uo=function(t){return/^0[^.\s]+$/.test(t)};function lo(t,e){-1===t.indexOf(e)&&t.push(e)}function co(t,e){var n=t.indexOf(e);n>-1&&t.splice(n,1)}var fo=function(){function t(){this.subscriptions=[]}return t.prototype.add=function(t){var e=this;return lo(this.subscriptions,t),function(){return co(e.subscriptions,t)}},t.prototype.notify=function(t,e,n){var r=this.subscriptions.length;if(r)if(1===r)this.subscriptions[0](t,e,n);else for(var o=0;o<r;o++){var i=this.subscriptions[o];i&&i(t,e,n)}},t.prototype.getSize=function(){return this.subscriptions.length},t.prototype.clear=function(){this.subscriptions.length=0},t}(),po=function(t){return!isNaN(parseFloat(t))},vo=function(){function t(t){var e=this;this.version="6.5.1",this.timeDelta=0,this.lastUpdated=0,this.updateSubscribers=new fo,this.velocityUpdateSubscribers=new fo,this.renderSubscribers=new fo,this.canTrackVelocity=!1,this.updateAndNotify=function(t,n){void 0===n&&(n=!0),e.prev=e.current,e.current=t;var r=T(),o=r.delta,i=r.timestamp;e.lastUpdated!==i&&(e.timeDelta=o,e.lastUpdated=i,C.postRender(e.scheduleVelocityCheck)),e.prev!==e.current&&e.updateSubscribers.notify(e.current),e.velocityUpdateSubscribers.getSize()&&e.velocityUpdateSubscribers.notify(e.getVelocity()),n&&e.renderSubscribers.notify(e.current)},this.scheduleVelocityCheck=function(){return C.postRender(e.velocityCheck)},this.velocityCheck=function(t){t.timestamp!==e.lastUpdated&&(e.prev=e.current,e.velocityUpdateSubscribers.notify(e.getVelocity()))},this.hasAnimated=!1,this.prev=this.current=t,this.canTrackVelocity=po(this.current)}return t.prototype.onChange=function(t){return this.updateSubscribers.add(t)},t.prototype.clearListeners=function(){this.updateSubscribers.clear()},t.prototype.onRenderRequest=function(t){return t(this.get()),this.renderSubscribers.add(t)},t.prototype.attach=function(t){this.passiveEffect=t},t.prototype.set=function(t,e){void 0===e&&(e=!0),e&&this.passiveEffect?this.passiveEffect(t,this.updateAndNotify):this.updateAndNotify(t,e)},t.prototype.get=function(){return this.current},t.prototype.getPrevious=function(){return this.prev},t.prototype.getVelocity=function(){return this.canTrackVelocity?Sr(parseFloat(this.current)-parseFloat(this.prev),this.timeDelta):0},t.prototype.start=function(t){var e=this;return this.stop(),new Promise((function(n){e.hasAnimated=!0,e.stopAnimation=t(n)})).then((function(){return e.clearAnimation()}))},t.prototype.stop=function(){this.stopAnimation&&this.stopAnimation(),this.clearAnimation()},t.prototype.isAnimating=function(){return!!this.stopAnimation},t.prototype.clearAnimation=function(){this.stopAnimation=null},t.prototype.destroy=function(){this.updateSubscribers.clear(),this.renderSubscribers.clear(),this.stop()},t}();function ho(t){return new vo(t)}var mo=function(t){return function(e){return e.test(t)}},go=[_t,Bt,jt,It,Ut,Ft,{test:function(t){return"auto"===t},parse:function(t){return t}}],yo=function(t){return go.find(mo(t))},Eo=s(s([],a(go),!1),[Un,Yn],!1),xo=function(t){return Eo.find(mo(t))};function bo(t,e,n){t.hasValue(e)?t.getValue(e).set(n):t.addValue(e,ho(n))}function wo(t,e){if(e)return(e[t]||e.default||e).from}function Ao(t,e,n){var r;void 0===n&&(n={});var i=ot(t,e,n.custom),s=(i||{}).transition,u=void 0===s?t.getDefaultTransition()||{}:s;n.transitionOverride&&(u=n.transitionOverride);var l=i?function(){return So(t,i,n)}:function(){return Promise.resolve()},c=(null===(r=t.variantChildren)||void 0===r?void 0:r.size)?function(r){void 0===r&&(r=0);var i=u.delayChildren,a=void 0===i?0:i,s=u.staggerChildren,l=u.staggerDirection;return function(t,e,n,r,i,a){void 0===n&&(n=0),void 0===r&&(r=0),void 0===i&&(i=1);var s=[],u=(t.variantChildren.size-1)*r,l=1===i?function(t){return void 0===t&&(t=0),t*r}:function(t){return void 0===t&&(t=0),u-t*r};return Array.from(t.variantChildren).sort(Po).forEach((function(t,r){s.push(Ao(t,e,o(o({},a),{delay:n+l(r)})).then((function(){return t.notifyAnimationComplete(e)})))})),Promise.all(s)}(t,e,a+r,s,l,n)}:function(){return Promise.resolve()},d=u.when;if(d){var f=a("beforeChildren"===d?[l,c]:[c,l],2),p=f[0],v=f[1];return p().then(v)}return Promise.all([l(),c(n.delay)])}function So(t,e,n){var r,a=void 0===n?{}:n,s=a.delay,u=void 0===s?0:s,l=a.transitionOverride,c=a.type,d=t.makeTargetAnimatable(e),f=d.transition,p=void 0===f?t.getDefaultTransition():f,v=d.transitionEnd,h=i(d,["transition","transitionEnd"]);l&&(p=l);var m=[],g=c&&(null===(r=t.animationState)||void 0===r?void 0:r.getState()[c]);for(var y in h){var E=t.getValue(y),x=h[y];if(!(!E||void 0===x||g&&To(g,y))){var b=o({delay:u},p);t.shouldReduceMotion&&bt(y)&&(b=o(o({},b),{type:!1,delay:0}));var w=so(y,E,x,b);m.push(w)}}return Promise.all(m).then((function(){v&&function(t,e){var n=ot(t,e),r=n?t.makeTargetAnimatable(n,!1):{},a=r.transitionEnd,s=void 0===a?{}:a;r.transition;var u=i(r,["transitionEnd","transition"]);for(var l in u=o(o({},u),s))bo(t,l,ye(u[l]))}(t,v)}))}function Po(t,e){return t.sortNodePosition(e)}function To(t,e){var n=t.protectedKeys,r=t.needsAnimating,o=n.hasOwnProperty(e)&&!0!==r[e];return r[e]=!1,o}var Co=[Ae.Animate,Ae.InView,Ae.Focus,Ae.Hover,Ae.Tap,Ae.Drag,Ae.Exit],Mo=s([],a(Co),!1).reverse(),Vo=Co.length;function Ro(t){var e,n=function(t){return function(e){return Promise.all(e.map((function(e){var n=e.animation,r=e.options;return function(t,e,n){var r;if(void 0===n&&(n={}),t.notifyAnimationStart(e),Array.isArray(e)){var o=e.map((function(e){return Ao(t,e,n)}));r=Promise.all(o)}else if("string"==typeof e)r=Ao(t,e,n);else{var i="function"==typeof e?ot(t,e,n.custom):e;r=So(t,i,n)}return r.then((function(){return t.notifyAnimationComplete(e)}))}(t,n,r)})))}}(t),r=((e={})[Ae.Animate]=Oo(!0),e[Ae.InView]=Oo(),e[Ae.Hover]=Oo(),e[Ae.Tap]=Oo(),e[Ae.Drag]=Oo(),e[Ae.Focus]=Oo(),e[Ae.Exit]=Oo(),e),u={},l=!0,c=function(e,n){var r=ot(t,n);if(r){r.transition;var a=r.transitionEnd,s=i(r,["transition","transitionEnd"]);e=o(o(o({},e),s),a)}return e};function d(e,i){for(var d,f=t.getProps(),p=t.getVariantContext(!0)||{},v=[],h=new Set,m={},g=1/0,y=function(n){var u=Mo[n],y=r[u],E=null!==(d=f[u])&&void 0!==d?d:p[u],x=nt(E),b=u===i?y.isActive:null;!1===b&&(g=n);var w=E===p[u]&&E!==f[u]&&x;if(w&&l&&t.manuallyAnimateOnMount&&(w=!1),y.protectedKeys=o({},m),!y.isActive&&null===b||!E&&!y.prevProp||he(E)||"boolean"==typeof E)return"continue";var A=function(t,e){return"string"==typeof e?e!==t:!!et(e)&&!cn(e,t)}(y.prevProp,E),S=A||u===i&&y.isActive&&!w&&x||n>g&&x,P=Array.isArray(E)?E:[E],T=P.reduce(c,{});!1===b&&(T={});var C=y.prevResolvedValues,M=void 0===C?{}:C,V=o(o({},M),T),R=function(t){S=!0,h.delete(t),y.needsAnimating[t]=!0};for(var O in V){var D=T[O],L=M[O];m.hasOwnProperty(O)||(D!==L?me(D)&&me(L)?!cn(D,L)||A?R(O):y.protectedKeys[O]=!0:void 0!==D?R(O):h.add(O):void 0!==D&&h.has(O)?R(O):y.protectedKeys[O]=!0)}y.prevProp=E,y.prevResolvedValues=T,y.isActive&&(m=o(o({},m),T)),l&&t.blockInitialAnimation&&(S=!1),S&&!w&&v.push.apply(v,s([],a(P.map((function(t){return{animation:t,options:o({type:u},e)}}))),!1))},E=0;E<Vo;E++)y(E);if(u=o({},m),h.size){var x={};h.forEach((function(e){var n=t.getBaseTarget(e);void 0!==n&&(x[e]=n)})),v.push({animation:x})}var b=Boolean(v.length);return l&&!1===f.initial&&!t.manuallyAnimateOnMount&&(b=!1),l=!1,b?n(v):Promise.resolve()}return{isAnimated:function(t){return void 0!==u[t]},animateChanges:d,setActive:function(e,n,o){var i;if(r[e].isActive===n)return Promise.resolve();null===(i=t.variantChildren)||void 0===i||i.forEach((function(t){var r;return null===(r=t.animationState)||void 0===r?void 0:r.setActive(e,n)})),r[e].isActive=n;var a=d(o,e);for(var s in r)r[s].protectedKeys={};return a},setAnimateFunction:function(e){n=e(t)},getState:function(){return r}}}function Oo(t){return void 0===t&&(t=!1),{isActive:t,protectedKeys:{},needsAnimating:{},prevResolvedValues:{}}}var Do={animation:sn((function(t){var e=t.visualElement,n=t.animate;e.animationState||(e.animationState=Ro(e)),he(n)&&(0,u.useEffect)((function(){return n.subscribe(e)}),[n])})),exit:sn((function(t){var e=t.custom,n=t.visualElement,r=a(ln(),2),o=r[0],i=r[1],s=(0,u.useContext)(O);(0,u.useEffect)((function(){var t,r;n.isPresent=o;var a=null===(t=n.animationState)||void 0===t?void 0:t.setActive(Ae.Exit,!o,{custom:null!==(r=null==s?void 0:s.custom)&&void 0!==r?r:e});!o&&(null==a||a.then(i))}),[o])}))};const Lo=t=>t.hasOwnProperty("x")&&t.hasOwnProperty("y"),ko=t=>Lo(t)&&t.hasOwnProperty("z"),No=(t,e)=>Math.abs(t-e);function Io(t,e){if(Zn(t)&&Zn(e))return No(t,e);if(Lo(t)&&Lo(e)){const n=No(t.x,e.x),r=No(t.y,e.y),o=ko(t)&&ko(e)?No(t.z,e.z):0;return Math.sqrt(Math.pow(n,2)+Math.pow(r,2)+Math.pow(o,2))}}var jo=function(){function t(t,e,n){var r=this,i=(void 0===n?{}:n).transformPagePoint;if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.handlers={},this.updatePoint=function(){if(r.lastMoveEvent&&r.lastMoveEventInfo){var t=Uo(r.lastMoveEventInfo,r.history),e=null!==r.startEvent,n=Io(t.offset,{x:0,y:0})>=3;if(e||n){var i=t.point,a=T().timestamp;r.history.push(o(o({},i),{timestamp:a}));var s=r.handlers,u=s.onStart,l=s.onMove;e||(u&&u(r.lastMoveEvent,t),r.startEvent=r.lastMoveEvent),l&&l(r.lastMoveEvent,t)}}},this.handlePointerMove=function(t,e){r.lastMoveEvent=t,r.lastMoveEventInfo=Bo(e,r.transformPagePoint),Me(t)&&0===t.buttons?r.handlePointerUp(t,e):C.update(r.updatePoint,!0)},this.handlePointerUp=function(t,e){r.end();var n=r.handlers,o=n.onEnd,i=n.onSessionEnd,a=Uo(Bo(e,r.transformPagePoint),r.history);r.startEvent&&o&&o(t,a),i&&i(t,a)},!(Ve(t)&&t.touches.length>1)){this.handlers=e,this.transformPagePoint=i;var a=Bo(Le(t),this.transformPagePoint),s=a.point,u=T().timestamp;this.history=[o(o({},s),{timestamp:u})];var l=e.onSessionStart;l&&l(t,Uo(a,this.history)),this.removeListeners=$e(He(window,"pointermove",this.handlePointerMove),He(window,"pointerup",this.handlePointerUp),He(window,"pointercancel",this.handlePointerUp))}}return t.prototype.updateHandlers=function(t){this.handlers=t},t.prototype.end=function(){this.removeListeners&&this.removeListeners(),b.update(this.updatePoint)},t}();function Bo(t,e){return e?{point:e(t.point)}:t}function Fo(t,e){return{x:t.x-e.x,y:t.y-e.y}}function Uo(t,e){var n=t.point;return{point:n,delta:Fo(n,_o(e)),offset:Fo(n,Ho(e)),velocity:zo(e,.1)}}function Ho(t){return t[0]}function _o(t){return t[t.length-1]}function zo(t,e){if(t.length<2)return{x:0,y:0};for(var n=t.length-1,r=null,o=_o(t);n>=0&&(r=t[n],!(o.timestamp-r.timestamp>Pr(e)));)n--;if(!r)return{x:0,y:0};var i=(o.timestamp-r.timestamp)/1e3;if(0===i)return{x:0,y:0};var a={x:(o.x-r.x)/i,y:(o.y-r.y)/i};return a.x===1/0&&(a.x=0),a.y===1/0&&(a.y=0),a}function Wo(t){return t.max-t.min}function Go(t,e,n){return void 0===e&&(e=0),void 0===n&&(n=.01),Io(t,e)<n}function Xo(t,e,n,r){void 0===r&&(r=.5),t.origin=r,t.originPoint=Pn(e.min,e.max,t.origin),t.scale=Wo(n)/Wo(e),(Go(t.scale,1,1e-4)||isNaN(t.scale))&&(t.scale=1),t.translate=Pn(n.min,n.max,t.origin)-t.originPoint,(Go(t.translate)||isNaN(t.translate))&&(t.translate=0)}function Yo(t,e,n,r){Xo(t.x,e.x,n.x,null==r?void 0:r.originX),Xo(t.y,e.y,n.y,null==r?void 0:r.originY)}function Zo(t,e,n){t.min=n.min+e.min,t.max=t.min+Wo(e)}function qo(t,e,n){t.min=e.min-n.min,t.max=t.min+Wo(e)}function Ko(t,e,n){qo(t.x,e.x,n.x),qo(t.y,e.y,n.y)}function $o(t,e,n){return{min:void 0!==e?t.min+e:void 0,max:void 0!==n?t.max+n-(t.max-t.min):void 0}}function Qo(t,e){var n,r=e.min-t.min,o=e.max-t.max;return e.max-e.min<t.max-t.min&&(r=(n=a([o,r],2))[0],o=n[1]),{min:r,max:o}}var Jo=.35;function ti(t,e,n){return{min:ei(t,e),max:ei(t,n)}}function ei(t,e){var n;return"number"==typeof t?t:null!==(n=t[e])&&void 0!==n?n:0}var ni=function(){return{x:{translate:0,scale:1,origin:0,originPoint:0},y:{translate:0,scale:1,origin:0,originPoint:0}}},ri=function(){return{x:{min:0,max:0},y:{min:0,max:0}}};function oi(t){return[t("x"),t("y")]}function ii(t){var e=t.top;return{x:{min:t.left,max:t.right},y:{min:e,max:t.bottom}}}function ai(t){return void 0===t||1===t}function si(t){var e=t.scale,n=t.scaleX,r=t.scaleY;return!ai(e)||!ai(n)||!ai(r)}function ui(t){return si(t)||li(t.x)||li(t.y)||t.z||t.rotate||t.rotateX||t.rotateY}function li(t){return t&&"0%"!==t}function ci(t,e,n){return n+e*(t-n)}function di(t,e,n,r,o){return void 0!==o&&(t=ci(t,o,r)),ci(t,n,r)+e}function fi(t,e,n,r,o){void 0===e&&(e=0),void 0===n&&(n=1),t.min=di(t.min,e,n,r,o),t.max=di(t.max,e,n,r,o)}function pi(t,e){var n=e.x,r=e.y;fi(t.x,n.translate,n.scale,n.originPoint),fi(t.y,r.translate,r.scale,r.originPoint)}function vi(t,e){t.min=t.min+e,t.max=t.max+e}function hi(t,e,n){var r=a(n,3),o=r[0],i=r[1],s=r[2],u=void 0!==e[s]?e[s]:.5,l=Pn(t.min,t.max,u);fi(t,e[o],e[i],l,e.scale)}var mi=["x","scaleX","originX"],gi=["y","scaleY","originY"];function yi(t,e){hi(t.x,e,mi),hi(t.y,e,gi)}function Ei(t,e){return ii(function(t,e){if(!e)return t;var n=e({x:t.left,y:t.top}),r=e({x:t.right,y:t.bottom});return{top:n.y,left:n.x,bottom:r.y,right:r.x}}(t.getBoundingClientRect(),e))}var xi=new WeakMap,bi=function(){function t(t){this.openGlobalLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=ri(),this.visualElement=t}return t.prototype.start=function(t,e){var n=this,r=(void 0===e?{}:e).snapToCursor,o=void 0!==r&&r;!1!==this.visualElement.isPresent&&(this.panSession=new jo(t,{onSessionStart:function(t){n.stopAnimation(),o&&n.snapToCursor(Le(t,"page").point)},onStart:function(t,e){var r,o=n.getProps(),i=o.drag,a=o.dragPropagation,s=o.onDragStart;(!i||a||(n.openGlobalLock&&n.openGlobalLock(),n.openGlobalLock=Xe(i),n.openGlobalLock))&&(n.isDragging=!0,n.currentDirection=null,n.resolveConstraints(),n.visualElement.projection&&(n.visualElement.projection.isAnimationBlocked=!0,n.visualElement.projection.target=void 0),oi((function(t){var e,r,o=n.getAxisMotionValue(t).get()||0;if(jt.test(o)){var i=null===(r=null===(e=n.visualElement.projection)||void 0===e?void 0:e.layout)||void 0===r?void 0:r.actual[t];i&&(o=Wo(i)*(parseFloat(o)/100))}n.originPoint[t]=o})),null==s||s(t,e),null===(r=n.visualElement.animationState)||void 0===r||r.setActive(Ae.Drag,!0))},onMove:function(t,e){var r=n.getProps(),o=r.dragPropagation,i=r.dragDirectionLock,a=r.onDirectionLock,s=r.onDrag;if(o||n.openGlobalLock){var u=e.offset;if(i&&null===n.currentDirection)return n.currentDirection=function(t,e){void 0===e&&(e=10);var n=null;return Math.abs(t.y)>e?n="y":Math.abs(t.x)>e&&(n="x"),n}(u),void(null!==n.currentDirection&&(null==a||a(n.currentDirection)));n.updateAxis("x",e.point,u),n.updateAxis("y",e.point,u),n.visualElement.syncRender(),null==s||s(t,e)}},onSessionEnd:function(t,e){return n.stop(t,e)}},{transformPagePoint:this.visualElement.getTransformPagePoint()}))},t.prototype.stop=function(t,e){var n=this.isDragging;if(this.cancel(),n){var r=e.velocity;this.startAnimation(r);var o=this.getProps().onDragEnd;null==o||o(t,e)}},t.prototype.cancel=function(){var t,e;this.isDragging=!1,this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!1),null===(t=this.panSession)||void 0===t||t.end(),this.panSession=void 0,!this.getProps().dragPropagation&&this.openGlobalLock&&(this.openGlobalLock(),this.openGlobalLock=null),null===(e=this.visualElement.animationState)||void 0===e||e.setActive(Ae.Drag,!1)},t.prototype.updateAxis=function(t,e,n){var r=this.getProps().drag;if(n&&wi(t,r,this.currentDirection)){var o,i,a,s,u,l=this.getAxisMotionValue(t),c=this.originPoint[t]+n[t];this.constraints&&this.constraints[t]&&(o=c,i=this.constraints[t],a=this.elastic[t],s=i.min,u=i.max,void 0!==s&&o<s?o=a?Pn(s,o,a.min):Math.max(o,s):void 0!==u&&o>u&&(o=a?Pn(u,o,a.max):Math.min(o,u)),c=o),l.set(c)}},t.prototype.resolveConstraints=function(){var t=this,e=this.getProps(),n=e.dragConstraints,r=e.dragElastic,o=(this.visualElement.projection||{}).layout,i=this.constraints;n&&tt(n)?this.constraints||(this.constraints=this.resolveRefConstraints()):this.constraints=!(!n||!o)&&function(t,e){var n=e.top,r=e.left,o=e.bottom,i=e.right;return{x:$o(t.x,r,i),y:$o(t.y,n,o)}}(o.actual,n),this.elastic=function(t){return void 0===t&&(t=Jo),!1===t?t=0:!0===t&&(t=Jo),{x:ti(t,"left","right"),y:ti(t,"top","bottom")}}(r),i!==this.constraints&&o&&this.constraints&&!this.hasMutatedConstraints&&oi((function(e){t.getAxisMotionValue(e)&&(t.constraints[e]=function(t,e){var n={};return void 0!==e.min&&(n.min=e.min-t.min),void 0!==e.max&&(n.max=e.max-t.min),n}(o.actual[e],t.constraints[e]))}))},t.prototype.resolveRefConstraints=function(){var t=this.getProps(),e=t.dragConstraints,n=t.onMeasureDragConstraints;if(!e||!tt(e))return!1;var r=e.current;G(null!==r,"If `dragConstraints` is set as a React ref, that ref must be passed to another component's `ref` prop.");var o=this.visualElement.projection;if(!o||!o.layout)return!1;var i=function(t,e,n){var r=Ei(t,n),o=e.scroll;return o&&(vi(r.x,o.x),vi(r.y,o.y)),r}(r,o.root,this.visualElement.getTransformPagePoint()),a=function(t,e){return{x:Qo(t.x,e.x),y:Qo(t.y,e.y)}}(o.layout.actual,i);if(n){var s=n(function(t){var e=t.x,n=t.y;return{top:n.min,right:e.max,bottom:n.max,left:e.min}}(a));this.hasMutatedConstraints=!!s,s&&(a=ii(s))}return a},t.prototype.startAnimation=function(t){var e=this,n=this.getProps(),r=n.drag,i=n.dragMomentum,a=n.dragElastic,s=n.dragTransition,u=n.dragSnapToOrigin,l=n.onDragTransitionEnd,c=this.constraints||{},d=oi((function(n){var l;if(wi(n,r,e.currentDirection)){var d=null!==(l=null==c?void 0:c[n])&&void 0!==l?l:{};u&&(d={min:0,max:0});var f=a?200:1e6,p=a?40:1e7,v=o(o({type:"inertia",velocity:i?t[n]:0,bounceStiffness:f,bounceDamping:p,timeConstant:750,restDelta:1,restSpeed:10},s),d);return e.startAxisValueAnimation(n,v)}}));return Promise.all(d).then(l)},t.prototype.startAxisValueAnimation=function(t,e){return so(t,this.getAxisMotionValue(t),0,e)},t.prototype.stopAnimation=function(){var t=this;oi((function(e){return t.getAxisMotionValue(e).stop()}))},t.prototype.getAxisMotionValue=function(t){var e,n,r="_drag"+t.toUpperCase();return this.visualElement.getProps()[r]||this.visualElement.getValue(t,null!==(n=null===(e=this.visualElement.getProps().initial)||void 0===e?void 0:e[t])&&void 0!==n?n:0)},t.prototype.snapToCursor=function(t){var e=this;oi((function(n){if(wi(n,e.getProps().drag,e.currentDirection)){var r=e.visualElement.projection,o=e.getAxisMotionValue(n);if(r&&r.layout){var i=r.layout.actual[n],a=i.min,s=i.max;o.set(t[n]-Pn(a,s,.5))}}}))},t.prototype.scalePositionWithinConstraints=function(){var t,e=this,n=this.getProps(),r=n.drag,o=n.dragConstraints,i=this.visualElement.projection;if(tt(o)&&i&&this.constraints){this.stopAnimation();var a={x:0,y:0};oi((function(t){var n,r,o,i,s,u=e.getAxisMotionValue(t);if(u){var l=u.get();a[t]=(n={min:l,max:l},r=e.constraints[t],o=.5,i=Wo(n),(s=Wo(r))>i?o=Sn(r.min,r.max-i,n.min):i>s&&(o=Sn(n.min,n.max-s,r.min)),dn(0,1,o))}}));var s=this.visualElement.getProps().transformTemplate;this.visualElement.getInstance().style.transform=s?s({},""):"none",null===(t=i.root)||void 0===t||t.updateScroll(),i.updateLayout(),this.resolveConstraints(),oi((function(t){if(wi(t,r,null)){var n=e.getAxisMotionValue(t),o=e.constraints[t],i=o.min,s=o.max;n.set(Pn(i,s,a[t]))}}))}},t.prototype.addListeners=function(){var t,e=this;xi.set(this.visualElement,this);var n=He(this.visualElement.getInstance(),"pointerdown",(function(t){var n=e.getProps(),r=n.drag,o=n.dragListener;r&&(void 0===o||o)&&e.start(t)})),r=function(){tt(e.getProps().dragConstraints)&&(e.constraints=e.resolveRefConstraints())},o=this.visualElement.projection,i=o.addEventListener("measure",r);o&&!o.layout&&(null===(t=o.root)||void 0===t||t.updateScroll(),o.updateLayout()),r();var a=Te(window,"resize",(function(){return e.scalePositionWithinConstraints()}));return o.addEventListener("didUpdate",(function(t){var n=t.delta,r=t.hasLayoutChanged;e.isDragging&&r&&(oi((function(t){var r=e.getAxisMotionValue(t);r&&(e.originPoint[t]+=n[t].translate,r.set(r.get()+n[t].translate))})),e.visualElement.syncRender())})),function(){a(),n(),i()}},t.prototype.getProps=function(){var t=this.visualElement.getProps(),e=t.drag,n=void 0!==e&&e,r=t.dragDirectionLock,i=void 0!==r&&r,a=t.dragPropagation,s=void 0!==a&&a,u=t.dragConstraints,l=void 0!==u&&u,c=t.dragElastic,d=void 0===c?Jo:c,f=t.dragMomentum,p=void 0===f||f;return o(o({},t),{drag:n,dragDirectionLock:i,dragPropagation:s,dragConstraints:l,dragElastic:d,dragMomentum:p})},t}();function wi(t,e,n){return!(!0!==e&&e!==t||null!==n&&n!==t)}var Ai={pan:sn((function(t){var e=t.onPan,n=t.onPanStart,r=t.onPanEnd,o=t.onPanSessionStart,i=t.visualElement,a=e||n||r||o,s=(0,u.useRef)(null),l=(0,u.useContext)(q).transformPagePoint,c={onSessionStart:o,onStart:n,onMove:e,onEnd:function(t,e){s.current=null,r&&r(t,e)}};(0,u.useEffect)((function(){null!==s.current&&s.current.updateHandlers(c)})),_e(i,"pointerdown",a&&function(t){s.current=new jo(t,c,{transformPagePoint:l})}),F((function(){return s.current&&s.current.end()}))})),drag:sn((function(t){var e=t.dragControls,n=t.visualElement,r=D((function(){return new bi(n)}));(0,u.useEffect)((function(){return e&&e.subscribe(r)}),[r,e]),(0,u.useEffect)((function(){return r.addListeners()}),[r])}))},Si=["LayoutMeasure","BeforeLayoutMeasure","LayoutUpdate","ViewportBoxUpdate","Update","Render","AnimationComplete","LayoutAnimationComplete","AnimationStart","LayoutAnimationStart","SetAxisTarget","Unmount"],Pi=function(t){var e=t.treeType,n=void 0===e?"":e,r=t.build,i=t.getBaseTarget,u=t.makeTargetAnimatable,l=t.measureViewportBox,c=t.render,d=t.readValueFromInstance,f=t.removeValueFromRenderState,p=t.sortNodePosition,v=t.scrapeMotionValuesFromProps;return function(t,e){var h=t.parent,m=t.props,g=t.presenceId,y=t.blockInitialAnimation,E=t.visualState,x=t.shouldReduceMotion;void 0===e&&(e={});var w,A,S=!1,P=E.latestValues,T=E.renderState,M=function(){var t=Si.map((function(){return new fo})),e={},n={clearAllListeners:function(){return t.forEach((function(t){return t.clear()}))},updatePropListeners:function(t){Si.forEach((function(r){var o,i="on"+r,a=t[i];null===(o=e[r])||void 0===o||o.call(e),a&&(e[r]=n[i](a))}))}};return t.forEach((function(t,e){n["on"+Si[e]]=function(e){return t.add(e)},n["notify"+Si[e]]=function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return t.notify.apply(t,s([],a(e),!1))}})),n}(),V=new Map,R=new Map,O={},D=o({},P);function L(){w&&S&&(k(),c(w,T,m.style,_.projection))}function k(){r(_,T,P,e,m)}function N(){M.notifyUpdate(P)}function I(t,e){var n=e.onChange((function(e){P[t]=e,m.onUpdate&&C.update(N,!1,!0)})),r=e.onRenderRequest(_.scheduleRender);R.set(t,(function(){n(),r()}))}var j=v(m);for(var B in j){var F=j[B];void 0!==P[B]&&Pt(F)&&F.set(P[B],!1)}var U=it(m),H=at(m),_=o(o({treeType:n,current:null,depth:h?h.depth+1:0,parent:h,children:new Set,presenceId:g,shouldReduceMotion:x,variantChildren:H?new Set:void 0,isVisible:void 0,manuallyAnimateOnMount:Boolean(null==h?void 0:h.isMounted()),blockInitialAnimation:y,isMounted:function(){return Boolean(w)},mount:function(t){S=!0,w=_.current=t,_.projection&&_.projection.mount(t),H&&h&&!U&&(A=null==h?void 0:h.addVariantChild(_)),V.forEach((function(t,e){return I(e,t)})),null==h||h.children.add(_),_.setProps(m)},unmount:function(){var t;null===(t=_.projection)||void 0===t||t.unmount(),b.update(N),b.render(L),R.forEach((function(t){return t()})),null==A||A(),null==h||h.children.delete(_),M.clearAllListeners(),w=void 0,S=!1},addVariantChild:function(t){var e,n=_.getClosestVariantNode();if(n)return null===(e=n.variantChildren)||void 0===e||e.add(t),function(){return n.variantChildren.delete(t)}},sortNodePosition:function(t){return p&&n===t.treeType?p(_.getInstance(),t.getInstance()):0},getClosestVariantNode:function(){return H?_:null==h?void 0:h.getClosestVariantNode()},getLayoutId:function(){return m.layoutId},getInstance:function(){return w},getStaticValue:function(t){return P[t]},setStaticValue:function(t,e){return P[t]=e},getLatestValues:function(){return P},setVisibility:function(t){_.isVisible!==t&&(_.isVisible=t,_.scheduleRender())},makeTargetAnimatable:function(t,e){return void 0===e&&(e=!0),u(_,t,m,e)},measureViewportBox:function(){return l(w,m)},addValue:function(t,e){_.hasValue(t)&&_.removeValue(t),V.set(t,e),P[t]=e.get(),I(t,e)},removeValue:function(t){var e;V.delete(t),null===(e=R.get(t))||void 0===e||e(),R.delete(t),delete P[t],f(t,T)},hasValue:function(t){return V.has(t)},getValue:function(t,e){var n=V.get(t);return void 0===n&&void 0!==e&&(n=ho(e),_.addValue(t,n)),n},forEachValue:function(t){return V.forEach(t)},readValue:function(t){var n;return null!==(n=P[t])&&void 0!==n?n:d(w,t,e)},setBaseTarget:function(t,e){D[t]=e},getBaseTarget:function(t){if(i){var e=i(m,t);if(void 0!==e&&!Pt(e))return e}return D[t]}},M),{build:function(){return k(),T},scheduleRender:function(){C.render(L,!1,!0)},syncRender:L,setProps:function(t){(t.transformTemplate||m.transformTemplate)&&_.scheduleRender(),m=t,M.updatePropListeners(t),O=function(t,e,n){var r;for(var o in e){var i=e[o],a=n[o];if(Pt(i))t.addValue(o,i);else if(Pt(a))t.addValue(o,ho(i));else if(a!==i)if(t.hasValue(o)){var s=t.getValue(o);!s.hasAnimated&&s.set(i)}else t.addValue(o,ho(null!==(r=t.getStaticValue(o))&&void 0!==r?r:i))}for(var o in n)void 0===e[o]&&t.removeValue(o);return e}(_,v(m),O)},getProps:function(){return m},getVariant:function(t){var e;return null===(e=m.variants)||void 0===e?void 0:e[t]},getDefaultTransition:function(){return m.transition},getTransformPagePoint:function(){return m.transformPagePoint},getVariantContext:function(t){if(void 0===t&&(t=!1),t)return null==h?void 0:h.getVariantContext();if(!U){var e=(null==h?void 0:h.getVariantContext())||{};return void 0!==m.initial&&(e.initial=m.initial),e}for(var n={},r=0;r<Ci;r++){var o=Ti[r],i=m[o];(nt(i)||!1===i)&&(n[o]=i)}return n}});return _}},Ti=s(["initial"],a(Co),!1),Ci=Ti.length;function Mi(t){return"string"==typeof t&&t.startsWith("var(--")}var Vi=/var\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\)/,Ri=4;function Oi(t,e,n){void 0===n&&(n=1),G(n<=Ri,'Max CSS variable fallback depth detected in property "'.concat(t,'". This may indicate a circular fallback dependency.'));var r=a(function(t){var e=Vi.exec(t);if(!e)return[,];var n=a(e,3);return[n[1],n[2]]}(t),2),o=r[0],i=r[1];if(o){var s=window.getComputedStyle(e).getPropertyValue(o);return s?s.trim():Mi(i)?Oi(i,e,n+1):i}}var Di,Li=new Set(["width","height","top","left","right","bottom","x","y"]),ki=function(t){return Li.has(t)},Ni=function(t,e){t.set(e,!1),t.set(e)},Ii=function(t){return t===_t||t===Bt};!function(t){t.width="width",t.height="height",t.left="left",t.right="right",t.top="top",t.bottom="bottom"}(Di||(Di={}));var ji=function(t,e){return parseFloat(t.split(", ")[e])},Bi=function(t,e){return function(n,r){var o=r.transform;if("none"===o||!o)return 0;var i=o.match(/^matrix3d\((.+)\)$/);if(i)return ji(i[1],e);var a=o.match(/^matrix\((.+)\)$/);return a?ji(a[1],t):0}},Fi=new Set(["x","y","z"]),Ui=yt.filter((function(t){return!Fi.has(t)})),Hi={width:function(t,e){var n=t.x,r=e.paddingLeft,o=void 0===r?"0":r,i=e.paddingRight,a=void 0===i?"0":i;return n.max-n.min-parseFloat(o)-parseFloat(a)},height:function(t,e){var n=t.y,r=e.paddingTop,o=void 0===r?"0":r,i=e.paddingBottom,a=void 0===i?"0":i;return n.max-n.min-parseFloat(o)-parseFloat(a)},top:function(t,e){var n=e.top;return parseFloat(n)},left:function(t,e){var n=e.left;return parseFloat(n)},bottom:function(t,e){var n=t.y,r=e.top;return parseFloat(r)+(n.max-n.min)},right:function(t,e){var n=t.x,r=e.left;return parseFloat(r)+(n.max-n.min)},x:Bi(4,13),y:Bi(5,14)},_i=function(t,e,n,r){var s=function(t,e,n){var r,a=i(e,[]),s=t.getInstance();if(!(s instanceof Element))return{target:a,transitionEnd:n};for(var u in n&&(n=o({},n)),t.forEachValue((function(t){var e=t.get();if(Mi(e)){var n=Oi(e,s);n&&t.set(n)}})),a){var l=a[u];if(Mi(l)){var c=Oi(l,s);c&&(a[u]=c,n&&(null!==(r=n[u])&&void 0!==r||(n[u]=l)))}}return{target:a,transitionEnd:n}}(t,e,r);return function(t,e,n,r){return function(t){return Object.keys(t).some(ki)}(e)?function(t,e,n,r){void 0===n&&(n={}),void 0===r&&(r={}),e=o({},e),r=o({},r);var i=Object.keys(e).filter(ki),s=[],u=!1,l=[];if(i.forEach((function(o){var i=t.getValue(o);if(t.hasValue(o)){var a,c=n[o],d=yo(c),f=e[o];if(me(f)){var p=f.length,v=null===f[0]?1:0;c=f[v],d=yo(c);for(var h=v;h<p;h++)a?G(yo(f[h])===a,"All keyframes must be of the same type"):(a=yo(f[h]),G(a===d||Ii(d)&&Ii(a),"Keyframes must be of the same dimension as the current value"))}else a=yo(f);if(d!==a)if(Ii(d)&&Ii(a)){var m=i.get();"string"==typeof m&&i.set(parseFloat(m)),"string"==typeof f?e[o]=parseFloat(f):Array.isArray(f)&&a===Bt&&(e[o]=f.map(parseFloat))}else(null==d?void 0:d.transform)&&(null==a?void 0:a.transform)&&(0===c||0===f)?0===c?i.set(a.transform(c)):e[o]=d.transform(f):(u||(s=function(t){var e=[];return Ui.forEach((function(n){var r=t.getValue(n);void 0!==r&&(e.push([n,r.get()]),r.set(n.startsWith("scale")?1:0))})),e.length&&t.syncRender(),e}(t),u=!0),l.push(o),r[o]=void 0!==r[o]?r[o]:e[o],Ni(i,f))}})),l.length){var c=l.indexOf("height")>=0?window.pageYOffset:null,d=function(t,e,n){var r=e.measureViewportBox(),o=e.getInstance(),i=getComputedStyle(o),a=i.display,s={};"none"===a&&e.setStaticValue("display",t.display||"block"),n.forEach((function(t){s[t]=Hi[t](r,i)})),e.syncRender();var u=e.measureViewportBox();return n.forEach((function(n){var r=e.getValue(n);Ni(r,s[n]),t[n]=Hi[n](u,i)})),t}(e,t,l);return s.length&&s.forEach((function(e){var n=a(e,2),r=n[0],o=n[1];t.getValue(r).set(o)})),t.syncRender(),null!==c&&window.scrollTo({top:c}),{target:d,transitionEnd:r}}return{target:e,transitionEnd:r}}(t,e,n,r):{target:e,transitionEnd:r}}(t,e=s.target,n,r=s.transitionEnd)},zi={treeType:"dom",readValueFromInstance:function(t,e){if(bt(e)){var n=Jr(e);return n&&n.default||0}var r,o=(r=t,window.getComputedStyle(r));return(Ct(e)?o.getPropertyValue(e):o[e])||0},sortNodePosition:function(t,e){return 2&t.compareDocumentPosition(e)?1:-1},getBaseTarget:function(t,e){var n;return null===(n=t.style)||void 0===n?void 0:n[e]},measureViewportBox:function(t,e){return Ei(t,e.transformPagePoint)},resetTransform:function(t,e,n){var r=n.transformTemplate;e.style.transform=r?r({},""):"none",t.scheduleRender()},restoreTransform:function(t,e){t.style.transform=e.style.transform},removeValueFromRenderState:function(t,e){var n=e.vars,r=e.style;delete n[t],delete r[t]},makeTargetAnimatable:function(t,e,n,r){var a=n.transformValues;void 0===r&&(r=!0);var s=e.transition,u=e.transitionEnd,l=i(e,["transition","transitionEnd"]),c=function(t,e,n){var r,o,i={};for(var a in t)i[a]=null!==(r=wo(a,e))&&void 0!==r?r:null===(o=n.getValue(a))||void 0===o?void 0:o.get();return i}(l,s||{},t);if(a&&(u&&(u=a(u)),l&&(l=a(l)),c&&(c=a(c))),r){!function(t,e,n){var r,o,i,a,s=Object.keys(e).filter((function(e){return!t.hasValue(e)})),u=s.length;if(u)for(var l=0;l<u;l++){var c=s[l],d=e[c],f=null;Array.isArray(d)&&(f=d[0]),null===f&&(f=null!==(o=null!==(r=n[c])&&void 0!==r?r:t.readValue(c))&&void 0!==o?o:e[c]),null!=f&&("string"==typeof f&&(/^\-?\d*\.?\d+$/.test(f)||uo(f))?f=parseFloat(f):!xo(f)&&Yn.test(d)&&(f=to(c,d)),t.addValue(c,ho(f)),null!==(i=(a=n)[c])&&void 0!==i||(a[c]=f),t.setBaseTarget(c,f))}}(t,l,c);var d=_i(t,l,c,u);u=d.transitionEnd,l=d.target}return o({transition:s,transitionEnd:u},l)},scrapeMotionValuesFromProps:pe,build:function(t,e,n,r,o){void 0!==t.isVisible&&(e.style.visibility=t.isVisible?"visible":"hidden"),Yt(e,n,r,o.transformTemplate)},render:ce},Wi=Pi(zi),Gi=Pi(o(o({},zi),{getBaseTarget:function(t,e){return t[e]},readValueFromInstance:function(t,e){var n;return bt(e)?(null===(n=Jr(e))||void 0===n?void 0:n.default)||0:(e=de.has(e)?e:le(e),t.getAttribute(e))},scrapeMotionValuesFromProps:ve,build:function(t,e,n,r,o){oe(e,n,r,o.transformTemplate)},render:fe})),Xi=function(t,e){return ht(t)?Gi(e,{enableHardwareAcceleration:!1}):Wi(e,{enableHardwareAcceleration:!0})};function Yi(t,e){return e.max===e.min?0:t/(e.max-e.min)*100}var Zi={correct:function(t,e){if(!e.target)return t;if("string"==typeof t){if(!Bt.test(t))return t;t=parseFloat(t)}var n=Yi(t,e.target.x),r=Yi(t,e.target.y);return"".concat(n,"% ").concat(r,"%")}},qi="_$css",Ki={correct:function(t,e){var n=e.treeScale,r=e.projectionDelta,o=t,i=t.includes("var("),a=[];i&&(t=t.replace(Vi,(function(t){return a.push(t),qi})));var s=Yn.parse(t);if(s.length>5)return o;var u=Yn.createTransformer(t),l="number"!=typeof s[0]?1:0,c=r.x.scale*n.x,d=r.y.scale*n.y;s[0+l]/=c,s[1+l]/=d;var f=Pn(c,d,.5);"number"==typeof s[2+l]&&(s[2+l]/=f),"number"==typeof s[3+l]&&(s[3+l]/=f);var p=u(s);if(i){var v=0;p=p.replace(qi,(function(){var t=a[v];return v++,t}))}return p}},$i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.componentDidMount=function(){var t,e=this,n=this.props,r=n.visualElement,i=n.layoutGroup,a=n.switchLayoutGroup,s=n.layoutId,u=r.projection;t=Qi,Object.assign(mt,t),u&&((null==i?void 0:i.group)&&i.group.add(u),(null==a?void 0:a.register)&&s&&a.register(u),u.root.didUpdate(),u.addEventListener("animationComplete",(function(){e.safeToRemove()})),u.setOptions(o(o({},u.options),{onExitComplete:function(){return e.safeToRemove()}}))),ut.hasEverUpdated=!0},e.prototype.getSnapshotBeforeUpdate=function(t){var e=this,n=this.props,r=n.layoutDependency,o=n.visualElement,i=n.drag,a=n.isPresent,s=o.projection;return s?(s.isPresent=a,i||t.layoutDependency!==r||void 0===r?s.willUpdate():this.safeToRemove(),t.isPresent!==a&&(a?s.promote():s.relegate()||C.postRender((function(){var t;(null===(t=s.getStack())||void 0===t?void 0:t.members.length)||e.safeToRemove()}))),null):null},e.prototype.componentDidUpdate=function(){var t=this.props.visualElement.projection;t&&(t.root.didUpdate(),!t.currentAnimation&&t.isLead()&&this.safeToRemove())},e.prototype.componentWillUnmount=function(){var t=this.props,e=t.visualElement,n=t.layoutGroup,r=t.switchLayoutGroup,o=e.projection;o&&(o.scheduleCheckAfterUnmount(),(null==n?void 0:n.group)&&n.group.remove(o),(null==r?void 0:r.deregister)&&r.deregister(o))},e.prototype.safeToRemove=function(){var t=this.props.safeToRemove;null==t||t()},e.prototype.render=function(){return null},e}(u.Component),Qi={borderRadius:o(o({},Zi),{applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]}),borderTopLeftRadius:Zi,borderTopRightRadius:Zi,borderBottomLeftRadius:Zi,borderBottomRightRadius:Zi,boxShadow:Ki},Ji={measureLayout:function(t){var e=a(ln(),2),n=e[0],r=e[1],i=(0,u.useContext)(B);return u.createElement($i,o({},t,{layoutGroup:i,switchLayoutGroup:(0,u.useContext)(ct),isPresent:n,safeToRemove:r}))}},ta=["TopLeft","TopRight","BottomLeft","BottomRight"],ea=ta.length,na=function(t){return"string"==typeof t?parseFloat(t):t},ra=function(t){return"number"==typeof t||Bt.test(t)};function oa(t,e){var n;return null!==(n=t[e])&&void 0!==n?n:t.borderRadius}var ia=sa(0,.5,cr),aa=sa(.5,.95,ir);function sa(t,e,n){return function(r){return r<t?0:r>e?1:n(Sn(t,e,r))}}function ua(t,e){t.min=e.min,t.max=e.max}function la(t,e){ua(t.x,e.x),ua(t.y,e.y)}function ca(t,e,n,r,o){return t=ci(t-=e,1/n,r),void 0!==o&&(t=ci(t,1/o,r)),t}function da(t,e,n,r,o){var i=a(n,3),s=i[0],u=i[1],l=i[2];!function(t,e,n,r,o,i,a){if(void 0===e&&(e=0),void 0===n&&(n=1),void 0===r&&(r=.5),void 0===i&&(i=t),void 0===a&&(a=t),jt.test(e)&&(e=parseFloat(e),e=Pn(a.min,a.max,e/100)-a.min),"number"==typeof e){var s=Pn(i.min,i.max,r);t===i&&(s-=e),t.min=ca(t.min,e,n,s,o),t.max=ca(t.max,e,n,s,o)}}(t,e[s],e[u],e[l],e.scale,r,o)}var fa=["x","scaleX","originX"],pa=["y","scaleY","originY"];function va(t,e,n,r){da(t.x,e,fa,null==n?void 0:n.x,null==r?void 0:r.x),da(t.y,e,pa,null==n?void 0:n.y,null==r?void 0:r.y)}function ha(t){return 0===t.translate&&1===t.scale}function ma(t){return ha(t.x)&&ha(t.y)}function ga(t,e){return t.x.min===e.x.min&&t.x.max===e.x.max&&t.y.min===e.y.min&&t.y.max===e.y.max}var ya=function(){function t(){this.members=[]}return t.prototype.add=function(t){lo(this.members,t),t.scheduleRender()},t.prototype.remove=function(t){if(co(this.members,t),t===this.prevLead&&(this.prevLead=void 0),t===this.lead){var e=this.members[this.members.length-1];e&&this.promote(e)}},t.prototype.relegate=function(t){var e,n=this.members.findIndex((function(e){return t===e}));if(0===n)return!1;for(var r=n;r>=0;r--){var o=this.members[r];if(!1!==o.isPresent){e=o;break}}return!!e&&(this.promote(e),!0)},t.prototype.promote=function(t,e){var n,r=this.lead;t!==r&&(this.prevLead=r,this.lead=t,t.show(),r&&(r.instance&&r.scheduleRender(),t.scheduleRender(),t.resumeFrom=r,e&&(t.resumeFrom.preserveOpacity=!0),r.snapshot&&(t.snapshot=r.snapshot,t.snapshot.latestValues=r.animationValues||r.latestValues,t.snapshot.isShared=!0),(null===(n=t.root)||void 0===n?void 0:n.isUpdating)&&(t.isLayoutDirty=!0),!1===t.options.crossfade&&r.hide()))},t.prototype.exitAnimationComplete=function(){this.members.forEach((function(t){var e,n,r,o,i;null===(n=(e=t.options).onExitComplete)||void 0===n||n.call(e),null===(i=null===(r=t.resumingFrom)||void 0===r?void 0:(o=r.options).onExitComplete)||void 0===i||i.call(o)}))},t.prototype.scheduleRender=function(){this.members.forEach((function(t){t.instance&&t.scheduleRender(!1)}))},t.prototype.removeLeadSnapshot=function(){this.lead&&this.lead.snapshot&&(this.lead.snapshot=void 0)},t}(),Ea="translate3d(0px, 0px, 0) scale(1, 1) scale(1, 1)";function xa(t,e,n){var r=t.x.translate/e.x,o=t.y.translate/e.y,i="translate3d(".concat(r,"px, ").concat(o,"px, 0) ");if(i+="scale(".concat(1/e.x,", ").concat(1/e.y,") "),n){var a=n.rotate,s=n.rotateX,u=n.rotateY;a&&(i+="rotate(".concat(a,"deg) ")),s&&(i+="rotateX(".concat(s,"deg) ")),u&&(i+="rotateY(".concat(u,"deg) "))}var l=t.x.scale*e.x,c=t.y.scale*e.y;return(i+="scale(".concat(l,", ").concat(c,")"))===Ea?"none":i}var ba=function(t,e){return t.depth-e.depth},wa=function(){function t(){this.children=[],this.isDirty=!1}return t.prototype.add=function(t){lo(this.children,t),this.isDirty=!0},t.prototype.remove=function(t){co(this.children,t),this.isDirty=!0},t.prototype.forEach=function(t){this.isDirty&&this.children.sort(ba),this.isDirty=!1,this.children.forEach(t)},t}(),Aa=1e3;function Sa(t){var e=t.attachResizeListener,n=t.defaultParent,r=t.measureScroll,i=t.checkIsScrollRoot,u=t.resetTransform;return function(){function t(t,e,r){var o=this;void 0===e&&(e={}),void 0===r&&(r=null==n?void 0:n()),this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.potentialNodes=new Map,this.checkUpdateFailed=function(){o.isUpdating&&(o.isUpdating=!1,o.clearAllSnapshots())},this.updateProjection=function(){o.nodes.forEach(Oa),o.nodes.forEach(Da)},this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.id=t,this.latestValues=e,this.root=r?r.root||r:this,this.path=r?s(s([],a(r.path),!1),[r],!1):[],this.parent=r,this.depth=r?r.depth+1:0,t&&this.root.registerPotentialNode(t,this);for(var i=0;i<this.path.length;i++)this.path[i].shouldResetTransform=!0;this.root===this&&(this.nodes=new wa)}return t.prototype.addEventListener=function(t,e){return this.eventHandlers.has(t)||this.eventHandlers.set(t,new fo),this.eventHandlers.get(t).add(e)},t.prototype.notifyListeners=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];var r=this.eventHandlers.get(t);null==r||r.notify.apply(r,s([],a(e),!1))},t.prototype.hasListeners=function(t){return this.eventHandlers.has(t)},t.prototype.registerPotentialNode=function(t,e){this.potentialNodes.set(t,e)},t.prototype.mount=function(t,n){var r,i=this;if(void 0===n&&(n=!1),!this.instance){this.isSVG=t instanceof SVGElement&&"svg"!==t.tagName,this.instance=t;var a=this.options,s=a.layoutId,u=a.layout,l=a.visualElement;if(l&&!l.getInstance()&&l.mount(t),this.root.nodes.add(this),null===(r=this.parent)||void 0===r||r.children.add(this),this.id&&this.root.potentialNodes.delete(this.id),n&&(u||s)&&(this.isLayoutDirty=!0),e){var c,d=function(){return i.root.updateBlockedByResize=!1};e(t,(function(){i.root.updateBlockedByResize=!0,clearTimeout(c),c=window.setTimeout(d,250),ut.hasAnimatedSinceResize&&(ut.hasAnimatedSinceResize=!1,i.nodes.forEach(Ra))}))}s&&this.root.registerSharedNode(s,this),!1!==this.options.animate&&l&&(s||u)&&this.addEventListener("didUpdate",(function(t){var e,n,r,a,s,u=t.delta,c=t.hasLayoutChanged,d=t.hasRelativeTargetChanged,f=t.layout;if(i.isTreeAnimationBlocked())return i.target=void 0,void(i.relativeTarget=void 0);var p=null!==(n=null!==(e=i.options.transition)&&void 0!==e?e:l.getDefaultTransition())&&void 0!==n?n:Ba,v=l.getProps(),h=v.onLayoutAnimationStart,m=v.onLayoutAnimationComplete,g=!i.targetLayout||!ga(i.targetLayout,f)||d,y=!c&&d;if((null===(r=i.resumeFrom)||void 0===r?void 0:r.instance)||y||c&&(g||!i.currentAnimation)){i.resumeFrom&&(i.resumingFrom=i.resumeFrom,i.resumingFrom.resumingFrom=void 0),i.setAnimationOrigin(u,y);var E=o(o({},ao(p,"layout")),{onPlay:h,onComplete:m});l.shouldReduceMotion&&(E.delay=0,E.type=!1),i.startAnimation(E)}else c||0!==i.animationProgress||i.finishAnimation(),i.isLead()&&(null===(s=(a=i.options).onExitComplete)||void 0===s||s.call(a));i.targetLayout=f}))}},t.prototype.unmount=function(){var t,e;this.options.layoutId&&this.willUpdate(),this.root.nodes.remove(this),null===(t=this.getStack())||void 0===t||t.remove(this),null===(e=this.parent)||void 0===e||e.children.delete(this),this.instance=void 0,b.preRender(this.updateProjection)},t.prototype.blockUpdate=function(){this.updateManuallyBlocked=!0},t.prototype.unblockUpdate=function(){this.updateManuallyBlocked=!1},t.prototype.isUpdateBlocked=function(){return this.updateManuallyBlocked||this.updateBlockedByResize},t.prototype.isTreeAnimationBlocked=function(){var t;return this.isAnimationBlocked||(null===(t=this.parent)||void 0===t?void 0:t.isTreeAnimationBlocked())||!1},t.prototype.startUpdate=function(){var t;this.isUpdateBlocked()||(this.isUpdating=!0,null===(t=this.nodes)||void 0===t||t.forEach(La))},t.prototype.willUpdate=function(t){var e,n,r;if(void 0===t&&(t=!0),this.root.isUpdateBlocked())null===(n=(e=this.options).onExitComplete)||void 0===n||n.call(e);else if(!this.root.isUpdating&&this.root.startUpdate(),!this.isLayoutDirty){this.isLayoutDirty=!0;for(var o=0;o<this.path.length;o++){var i=this.path[o];i.shouldResetTransform=!0,i.updateScroll()}var a=this.options,s=a.layoutId,u=a.layout;if(void 0!==s||u){var l=null===(r=this.options.visualElement)||void 0===r?void 0:r.getProps().transformTemplate;this.prevTransformTemplateValue=null==l?void 0:l(this.latestValues,""),this.updateSnapshot(),t&&this.notifyListeners("willUpdate")}}},t.prototype.didUpdate=function(){if(this.isUpdateBlocked())return this.unblockUpdate(),this.clearAllSnapshots(),void this.nodes.forEach(Ma);this.isUpdating&&(this.isUpdating=!1,this.potentialNodes.size&&(this.potentialNodes.forEach(Fa),this.potentialNodes.clear()),this.nodes.forEach(Va),this.nodes.forEach(Pa),this.nodes.forEach(Ta),this.clearAllSnapshots(),w.update(),w.preRender(),w.render())},t.prototype.clearAllSnapshots=function(){this.nodes.forEach(Ca),this.sharedNodes.forEach(ka)},t.prototype.scheduleUpdateProjection=function(){C.preRender(this.updateProjection,!1,!0)},t.prototype.scheduleCheckAfterUnmount=function(){var t=this;C.postRender((function(){t.isLayoutDirty?t.root.didUpdate():t.root.checkUpdateFailed()}))},t.prototype.updateSnapshot=function(){if(!this.snapshot&&this.instance){var t=this.measure(),e=this.removeTransform(this.removeElementScroll(t));Ha(e),this.snapshot={measured:t,layout:e,latestValues:{}}}},t.prototype.updateLayout=function(){var t;if(this.instance&&(this.updateScroll(),this.options.alwaysMeasureLayout&&this.isLead()||this.isLayoutDirty)){if(this.resumeFrom&&!this.resumeFrom.instance)for(var e=0;e<this.path.length;e++)this.path[e].updateScroll();var n=this.measure();Ha(n);var r=this.layout;this.layout={measured:n,actual:this.removeElementScroll(n)},this.layoutCorrected=ri(),this.isLayoutDirty=!1,this.projectionDelta=void 0,this.notifyListeners("measure",this.layout.actual),null===(t=this.options.visualElement)||void 0===t||t.notifyLayoutMeasure(this.layout.actual,null==r?void 0:r.actual)}},t.prototype.updateScroll=function(){this.options.layoutScroll&&this.instance&&(this.isScrollRoot=i(this.instance),this.scroll=r(this.instance))},t.prototype.resetTransform=function(){var t;if(u){var e=this.isLayoutDirty||this.shouldResetTransform,n=this.projectionDelta&&!ma(this.projectionDelta),r=null===(t=this.options.visualElement)||void 0===t?void 0:t.getProps().transformTemplate,o=null==r?void 0:r(this.latestValues,""),i=o!==this.prevTransformTemplateValue;e&&(n||ui(this.latestValues)||i)&&(u(this.instance,o),this.shouldResetTransform=!1,this.scheduleRender())}},t.prototype.measure=function(){var t=this.options.visualElement;if(!t)return ri();var e=t.measureViewportBox(),n=this.root.scroll;return n&&(vi(e.x,n.x),vi(e.y,n.y)),e},t.prototype.removeElementScroll=function(t){var e=ri();la(e,t);for(var n=0;n<this.path.length;n++){var r=this.path[n],o=r.scroll,i=r.options,a=r.isScrollRoot;if(r!==this.root&&o&&i.layoutScroll){if(a){la(e,t);var s=this.root.scroll;s&&(vi(e.x,-s.x),vi(e.y,-s.y))}vi(e.x,o.x),vi(e.y,o.y)}}return e},t.prototype.applyTransform=function(t,e){void 0===e&&(e=!1);var n=ri();la(n,t);for(var r=0;r<this.path.length;r++){var o=this.path[r];!e&&o.options.layoutScroll&&o.scroll&&o!==o.root&&yi(n,{x:-o.scroll.x,y:-o.scroll.y}),ui(o.latestValues)&&yi(n,o.latestValues)}return ui(this.latestValues)&&yi(n,this.latestValues),n},t.prototype.removeTransform=function(t){var e,n=ri();la(n,t);for(var r=0;r<this.path.length;r++){var o=this.path[r];if(o.instance&&ui(o.latestValues)){si(o.latestValues)&&o.updateSnapshot();var i=ri();la(i,o.measure()),va(n,o.latestValues,null===(e=o.snapshot)||void 0===e?void 0:e.layout,i)}}return ui(this.latestValues)&&va(n,this.latestValues),n},t.prototype.setTargetDelta=function(t){this.targetDelta=t,this.root.scheduleUpdateProjection()},t.prototype.setOptions=function(t){var e;this.options=o(o(o({},this.options),t),{crossfade:null===(e=t.crossfade)||void 0===e||e})},t.prototype.clearMeasurements=function(){this.scroll=void 0,this.layout=void 0,this.snapshot=void 0,this.prevTransformTemplateValue=void 0,this.targetDelta=void 0,this.target=void 0,this.isLayoutDirty=!1},t.prototype.resolveTargetDelta=function(){var t,e,n,r,o=this.options,i=o.layout,a=o.layoutId;this.layout&&(i||a)&&(this.targetDelta||this.relativeTarget||(this.relativeParent=this.getClosestProjectingParent(),this.relativeParent&&this.relativeParent.layout&&(this.relativeTarget=ri(),this.relativeTargetOrigin=ri(),Ko(this.relativeTargetOrigin,this.layout.actual,this.relativeParent.layout.actual),la(this.relativeTarget,this.relativeTargetOrigin))),(this.relativeTarget||this.targetDelta)&&(this.target||(this.target=ri(),this.targetWithTransforms=ri()),this.relativeTarget&&this.relativeTargetOrigin&&(null===(t=this.relativeParent)||void 0===t?void 0:t.target)?(e=this.target,n=this.relativeTarget,r=this.relativeParent.target,Zo(e.x,n.x,r.x),Zo(e.y,n.y,r.y)):this.targetDelta?(Boolean(this.resumingFrom)?this.target=this.applyTransform(this.layout.actual):la(this.target,this.layout.actual),pi(this.target,this.targetDelta)):la(this.target,this.layout.actual),this.attemptToResolveRelativeTarget&&(this.attemptToResolveRelativeTarget=!1,this.relativeParent=this.getClosestProjectingParent(),this.relativeParent&&Boolean(this.relativeParent.resumingFrom)===Boolean(this.resumingFrom)&&!this.relativeParent.options.layoutScroll&&this.relativeParent.target&&(this.relativeTarget=ri(),this.relativeTargetOrigin=ri(),Ko(this.relativeTargetOrigin,this.target,this.relativeParent.target),la(this.relativeTarget,this.relativeTargetOrigin)))))},t.prototype.getClosestProjectingParent=function(){if(this.parent&&!ui(this.parent.latestValues))return(this.parent.relativeTarget||this.parent.targetDelta)&&this.parent.layout?this.parent:this.parent.getClosestProjectingParent()},t.prototype.calcProjection=function(){var t,e=this.options,n=e.layout,r=e.layoutId;if(this.isTreeAnimating=Boolean((null===(t=this.parent)||void 0===t?void 0:t.isTreeAnimating)||this.currentAnimation||this.pendingAnimation),this.isTreeAnimating||(this.targetDelta=this.relativeTarget=void 0),this.layout&&(n||r)){var o=this.getLead();la(this.layoutCorrected,this.layout.actual),function(t,e,n,r){var o,i;void 0===r&&(r=!1);var a=n.length;if(a){var s,u;e.x=e.y=1;for(var l=0;l<a;l++)u=(s=n[l]).projectionDelta,"contents"!==(null===(i=null===(o=s.instance)||void 0===o?void 0:o.style)||void 0===i?void 0:i.display)&&(r&&s.options.layoutScroll&&s.scroll&&s!==s.root&&yi(t,{x:-s.scroll.x,y:-s.scroll.y}),u&&(e.x*=u.x.scale,e.y*=u.y.scale,pi(t,u)),r&&ui(s.latestValues)&&yi(t,s.latestValues))}}(this.layoutCorrected,this.treeScale,this.path,Boolean(this.resumingFrom)||this!==o);var i=o.target;if(i){this.projectionDelta||(this.projectionDelta=ni(),this.projectionDeltaWithTransform=ni());var a=this.treeScale.x,s=this.treeScale.y,u=this.projectionTransform;Yo(this.projectionDelta,this.layoutCorrected,i,this.latestValues),this.projectionTransform=xa(this.projectionDelta,this.treeScale),this.projectionTransform===u&&this.treeScale.x===a&&this.treeScale.y===s||(this.hasProjected=!0,this.scheduleRender(),this.notifyListeners("projectionUpdate",i))}}},t.prototype.hide=function(){this.isVisible=!1},t.prototype.show=function(){this.isVisible=!0},t.prototype.scheduleRender=function(t){var e,n,r;void 0===t&&(t=!0),null===(n=(e=this.options).scheduleRender)||void 0===n||n.call(e),t&&(null===(r=this.getStack())||void 0===r||r.scheduleRender()),this.resumingFrom&&!this.resumingFrom.instance&&(this.resumingFrom=void 0)},t.prototype.setAnimationOrigin=function(t,e){var n,r=this;void 0===e&&(e=!1);var i=this.snapshot,a=(null==i?void 0:i.latestValues)||{},s=o({},this.latestValues),u=ni();this.relativeTarget=this.relativeTargetOrigin=void 0,this.attemptToResolveRelativeTarget=!e;var l=ri(),c=null==i?void 0:i.isShared,d=((null===(n=this.getStack())||void 0===n?void 0:n.members.length)||0)<=1,f=Boolean(c&&!d&&!0===this.options.crossfade&&!this.path.some(ja));this.animationProgress=0,this.mixTargetDelta=function(e){var n,o,i,p,v,h=e/1e3;Na(u.x,t.x,h),Na(u.y,t.y,h),r.setTargetDelta(u),r.relativeTarget&&r.relativeTargetOrigin&&r.layout&&(null===(n=r.relativeParent)||void 0===n?void 0:n.layout)&&(Ko(l,r.layout.actual,r.relativeParent.layout.actual),o=r.relativeTarget,i=r.relativeTargetOrigin,p=l,v=h,Ia(o.x,i.x,p.x,v),Ia(o.y,i.y,p.y,v)),c&&(r.animationValues=s,function(t,e,n,r,o,i){var a,s,u,l;o?(t.opacity=Pn(0,null!==(a=n.opacity)&&void 0!==a?a:1,ia(r)),t.opacityExit=Pn(null!==(s=e.opacity)&&void 0!==s?s:1,0,aa(r))):i&&(t.opacity=Pn(null!==(u=e.opacity)&&void 0!==u?u:1,null!==(l=n.opacity)&&void 0!==l?l:1,r));for(var c=0;c<ea;c++){var d="border".concat(ta[c],"Radius"),f=oa(e,d),p=oa(n,d);void 0===f&&void 0===p||(f||(f=0),p||(p=0),0===f||0===p||ra(f)===ra(p)?(t[d]=Math.max(Pn(na(f),na(p),r),0),(jt.test(p)||jt.test(f))&&(t[d]+="%")):t[d]=p)}(e.rotate||n.rotate)&&(t.rotate=Pn(e.rotate||0,n.rotate||0,r))}(s,a,r.latestValues,h,f,d)),r.root.scheduleUpdateProjection(),r.scheduleRender(),r.animationProgress=h},this.mixTargetDelta(0)},t.prototype.startAnimation=function(t){var e,n,r=this;this.notifyListeners("animationStart"),null===(e=this.currentAnimation)||void 0===e||e.stop(),this.resumingFrom&&(null===(n=this.resumingFrom.currentAnimation)||void 0===n||n.stop()),this.pendingAnimation&&(b.update(this.pendingAnimation),this.pendingAnimation=void 0),this.pendingAnimation=C.update((function(){ut.hasAnimatedSinceResize=!0,r.currentAnimation=function(t,e,n){void 0===n&&(n={});var r=Pt(0)?0:ho(0);return so("",r,e,n),{stop:function(){return r.stop()},isAnimating:function(){return r.isAnimating()}}}(0,Aa,o(o({},t),{onUpdate:function(e){var n;r.mixTargetDelta(e),null===(n=t.onUpdate)||void 0===n||n.call(t,e)},onComplete:function(){var e;null===(e=t.onComplete)||void 0===e||e.call(t),r.completeAnimation()}})),r.resumingFrom&&(r.resumingFrom.currentAnimation=r.currentAnimation),r.pendingAnimation=void 0}))},t.prototype.completeAnimation=function(){var t;this.resumingFrom&&(this.resumingFrom.currentAnimation=void 0,this.resumingFrom.preserveOpacity=void 0),null===(t=this.getStack())||void 0===t||t.exitAnimationComplete(),this.resumingFrom=this.currentAnimation=this.animationValues=void 0,this.notifyListeners("animationComplete")},t.prototype.finishAnimation=function(){var t;this.currentAnimation&&(null===(t=this.mixTargetDelta)||void 0===t||t.call(this,Aa),this.currentAnimation.stop()),this.completeAnimation()},t.prototype.applyTransformsToTarget=function(){var t=this.getLead(),e=t.targetWithTransforms,n=t.target,r=t.layout,o=t.latestValues;e&&n&&r&&(la(e,n),yi(e,o),Yo(this.projectionDeltaWithTransform,this.layoutCorrected,e,o))},t.prototype.registerSharedNode=function(t,e){var n,r,o;this.sharedNodes.has(t)||this.sharedNodes.set(t,new ya),this.sharedNodes.get(t).add(e),e.promote({transition:null===(n=e.options.initialPromotionConfig)||void 0===n?void 0:n.transition,preserveFollowOpacity:null===(o=null===(r=e.options.initialPromotionConfig)||void 0===r?void 0:r.shouldPreserveFollowOpacity)||void 0===o?void 0:o.call(r,e)})},t.prototype.isLead=function(){var t=this.getStack();return!t||t.lead===this},t.prototype.getLead=function(){var t;return this.options.layoutId&&(null===(t=this.getStack())||void 0===t?void 0:t.lead)||this},t.prototype.getPrevLead=function(){var t;return this.options.layoutId?null===(t=this.getStack())||void 0===t?void 0:t.prevLead:void 0},t.prototype.getStack=function(){var t=this.options.layoutId;if(t)return this.root.sharedNodes.get(t)},t.prototype.promote=function(t){var e=void 0===t?{}:t,n=e.needsReset,r=e.transition,o=e.preserveFollowOpacity,i=this.getStack();i&&i.promote(this,o),n&&(this.projectionDelta=void 0,this.needsReset=!0),r&&this.setOptions({transition:r})},t.prototype.relegate=function(){var t=this.getStack();return!!t&&t.relegate(this)},t.prototype.resetRotation=function(){var t=this.options.visualElement;if(t){for(var e=!1,n={},r=0;r<gt.length;r++){var o="rotate"+gt[r];t.getStaticValue(o)&&(e=!0,n[o]=t.getStaticValue(o),t.setStaticValue(o,0))}if(e){for(var o in null==t||t.syncRender(),n)t.setStaticValue(o,n[o]);t.scheduleRender()}}},t.prototype.getProjectionStyles=function(t){var e,n,r,o,i,a;void 0===t&&(t={});var s={};if(!this.instance||this.isSVG)return s;if(!this.isVisible)return{visibility:"hidden"};s.visibility="";var u=null===(e=this.options.visualElement)||void 0===e?void 0:e.getProps().transformTemplate;if(this.needsReset)return this.needsReset=!1,s.opacity="",s.pointerEvents=Ee(t.pointerEvents)||"",s.transform=u?u(this.latestValues,""):"none",s;var l=this.getLead();if(!this.projectionDelta||!this.layout||!l.target){var c={};return this.options.layoutId&&(c.opacity=null!==(n=this.latestValues.opacity)&&void 0!==n?n:1,c.pointerEvents=Ee(t.pointerEvents)||""),this.hasProjected&&!ui(this.latestValues)&&(c.transform=u?u({},""):"none",this.hasProjected=!1),c}var d=l.animationValues||l.latestValues;this.applyTransformsToTarget(),s.transform=xa(this.projectionDeltaWithTransform,this.treeScale,d),u&&(s.transform=u(d,s.transform));var f=this.projectionDelta,p=f.x,v=f.y;for(var h in s.transformOrigin="".concat(100*p.origin,"% ").concat(100*v.origin,"% 0"),l.animationValues?s.opacity=l===this?null!==(o=null!==(r=d.opacity)&&void 0!==r?r:this.latestValues.opacity)&&void 0!==o?o:1:this.preserveOpacity?this.latestValues.opacity:d.opacityExit:s.opacity=l===this?null!==(i=d.opacity)&&void 0!==i?i:"":null!==(a=d.opacityExit)&&void 0!==a?a:0,mt)if(void 0!==d[h]){var m=mt[h],g=m.correct,y=m.applyTo,E=g(d[h],l);if(y)for(var x=y.length,b=0;b<x;b++)s[y[b]]=E;else s[h]=E}return this.options.layoutId&&(s.pointerEvents=l===this?Ee(t.pointerEvents)||"":"none"),s},t.prototype.clearSnapshot=function(){this.resumeFrom=this.snapshot=void 0},t.prototype.resetTree=function(){this.root.nodes.forEach((function(t){var e;return null===(e=t.currentAnimation)||void 0===e?void 0:e.stop()})),this.root.nodes.forEach(Ma),this.root.sharedNodes.clear()},t}()}function Pa(t){t.updateLayout()}function Ta(t){var e,n,r,o,i=null!==(n=null===(e=t.resumeFrom)||void 0===e?void 0:e.snapshot)&&void 0!==n?n:t.snapshot;if(t.isLead()&&t.layout&&i&&t.hasListeners("didUpdate")){var a=t.layout,s=a.actual,u=a.measured;"size"===t.options.animationType?oi((function(t){var e=i.isShared?i.measured[t]:i.layout[t],n=Wo(e);e.min=s[t].min,e.max=e.min+n})):"position"===t.options.animationType&&oi((function(t){var e=i.isShared?i.measured[t]:i.layout[t],n=Wo(s[t]);e.max=e.min+n}));var l=ni();Yo(l,s,i.layout);var c=ni();i.isShared?Yo(c,t.applyTransform(u,!0),i.measured):Yo(c,s,i.layout);var d=!ma(l),f=!1;if(!t.resumeFrom&&(t.relativeParent=t.getClosestProjectingParent(),t.relativeParent&&!t.relativeParent.resumeFrom)){var p=t.relativeParent,v=p.snapshot,h=p.layout;if(v&&h){var m=ri();Ko(m,i.layout,v.layout);var g=ri();Ko(g,s,h.actual),ga(m,g)||(f=!0)}}t.notifyListeners("didUpdate",{layout:s,snapshot:i,delta:c,layoutDelta:l,hasLayoutChanged:d,hasRelativeTargetChanged:f})}else t.isLead()&&(null===(o=(r=t.options).onExitComplete)||void 0===o||o.call(r));t.options.transition=void 0}function Ca(t){t.clearSnapshot()}function Ma(t){t.clearMeasurements()}function Va(t){var e=t.options.visualElement;(null==e?void 0:e.getProps().onBeforeLayoutMeasure)&&e.notifyBeforeLayoutMeasure(),t.resetTransform()}function Ra(t){t.finishAnimation(),t.targetDelta=t.relativeTarget=t.target=void 0}function Oa(t){t.resolveTargetDelta()}function Da(t){t.calcProjection()}function La(t){t.resetRotation()}function ka(t){t.removeLeadSnapshot()}function Na(t,e,n){t.translate=Pn(e.translate,0,n),t.scale=Pn(e.scale,1,n),t.origin=e.origin,t.originPoint=e.originPoint}function Ia(t,e,n,r){t.min=Pn(e.min,n.min,r),t.max=Pn(e.max,n.max,r)}function ja(t){return t.animationValues&&void 0!==t.animationValues.opacityExit}var Ba={duration:.45,ease:[.4,0,.1,1]};function Fa(t,e){for(var n=t.root,r=t.path.length-1;r>=0;r--)if(Boolean(t.path[r].instance)){n=t.path[r];break}var o=(n&&n!==t.root?n.instance:document).querySelector('[data-projection-id="'.concat(e,'"]'));o&&t.mount(o,!0)}function Ua(t){t.min=Math.round(t.min),t.max=Math.round(t.max)}function Ha(t){Ua(t.x),Ua(t.y)}var _a=Sa({attachResizeListener:function(t,e){return Te(t,"resize",e)},measureScroll:function(){return{x:document.documentElement.scrollLeft||document.body.scrollLeft,y:document.documentElement.scrollTop||document.body.scrollTop}},checkIsScrollRoot:function(){return!0}}),za={current:void 0},Wa=Sa({measureScroll:function(t){return{x:t.scrollLeft,y:t.scrollTop}},defaultParent:function(){if(!za.current){var t=new _a(0,{});t.mount(window),t.setOptions({layoutScroll:!0}),za.current=t}return za.current},resetTransform:function(t,e){t.style.transform=null!=e?e:"none"},checkIsScrollRoot:function(t){return Boolean("fixed"===window.getComputedStyle(t).position)}}),Ga=o(o(o(o({},Do),un),Ai),Ji),Xa=pt((function(t,e){return function(t,e,n,r,i){var a=e.forwardMotionProps,s=void 0!==a&&a,u=ht(t)?Se:Pe;return o(o({},u),{preloadedFeatures:n,useRender:se(s),createVisualElement:r,projectionNodeConstructor:i,Component:t})}(t,e,Ga,Xi,Wa)}));const Ya=require("react-dom"),Za={SHOWROOM:"/showroom",SENDOUTS:"/sendouts",SENDOUTS_CMS:"/sendouts-cms",MARKETING_ENGINE:"/media",USER_MANAGEMENT:"/users",TENANTS:"/tenants",DASHBOARD:"/dashboard",DASHBOARD_CREATE_WORKSPACE_MODAL:"/dashboard/create-workspace"},qa=300,Ka=300,$a=require("@touchtech/web-auth"),Qa=require("@touchtech/web-tenant-id-provider");var Ja;!function(t){t.OPEN="OPEN",t.HIDDEN="HIDDEN",t.EXPANDED="EXPANDED"}(Ja||(Ja={}));const ts=l().createContext({});function es(){return(0,u.useContext)(ts)}function ns({children:t,isOpen:e,onNavigationClose:n=(()=>{})}){const[r]=(0,u.useContext)(Qa.TenantIdContext),[o,i]=(0,u.useState)({selectedTenantId:r,currentPosition:Ja.HIDDEN}),{user:a,authService:s,canSignOut:c}=(0,u.useContext)($a.AuthContext);(0,u.useEffect)((()=>{i(e?t=>Object.assign(Object.assign({},t),{selectedTenantId:r,currentPosition:Ja.OPEN}):t=>Object.assign(Object.assign({},t),{currentPosition:Ja.HIDDEN}))}),[r,e,i]),(0,u.useEffect)((()=>{e&&s.refreshUser(300)}),[s,e]);const d=(0,u.useMemo)((()=>!!a&&(0,$a.userHasAccess)(a,o.selectedTenantId,$a.Privileges.MARKETING_ENGINE_APP)),[o.selectedTenantId,a]),f=(0,u.useMemo)((()=>!!a&&(0,$a.userHasAccess)(a,o.selectedTenantId,$a.Privileges.SHOWROOM_APP)),[o.selectedTenantId,a]),p=(0,u.useMemo)((()=>!!a&&(0,$a.userHasAccess)(a,o.selectedTenantId,$a.Privileges.SENDOUTS_APP)),[o.selectedTenantId,a]),v=(0,u.useMemo)((()=>!!a&&(0,$a.userHasAccess)(a,o.selectedTenantId,$a.Privileges.SENDOUTS_CMS_APP)),[o.selectedTenantId,a]),h=(0,u.useMemo)((()=>!!a&&(0,$a.userHasAccess)(a,o.selectedTenantId,$a.Privileges.USER_MANAGEMENT_APP)),[o.selectedTenantId,a]),m=(0,u.useCallback)((t=>i((e=>Object.assign(Object.assign({},e),t)))),[]),g=(0,u.useCallback)((()=>{return t=this,e=void 0,r=function*(){c&&(yield s.signOut())},new((n=void 0)||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function s(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,s)}u((r=r.apply(t,e||[])).next())}));var t,e,n,r}),[s,c]),y=(0,u.useCallback)((()=>{o.currentPosition!==Ja.OPEN?o.currentPosition!==Ja.EXPANDED||m({currentPosition:Ja.OPEN}):m({currentPosition:Ja.EXPANDED,selectedTenantId:r})}),[r,m,o.currentPosition]),E=(0,u.useMemo)((()=>({hasMarketingEngineAccess:d,hasShowroomAccess:f,hasSendoutsAccess:p,hasSendoutsCmsAccess:v,hasUserManagementAccess:h,viewState:o,updateViewState:m,signOut:g,toggleTenants:y,onNavigationClose:n})),[d,p,v,f,h,o,m,g,y,n]);return l().createElement(ts.Provider,{value:E},t)}const rs="tKygQ4LMDikHs5Hsh0Qk",os=require("@touchtech/baselayer-ui"),is=require("swr");var as=t.n(is);const ss=require("@touchtech/web-api-client");function us(){const t=(0,ss.useApi)(),e=function(){var t;const e=null!==(t=process.env.TENANTS_SERVICE_URL)&&void 0!==t?t:process.env.REACT_APP_TENANTS_SERVICE_URL;if(!e)throw new Error("TENANTS_SERVICE_URL or REACT_APP_TENANTS_SERVICE_URL must be set");return(0,ss.createUrl)(e,"/api/Tenants/view")}(),{data:n,error:r}=as()(e,t.get);return{tenants:null!=n?n:[],isLoading:!n&&!r,error:r}}const ls=function({layout:t}){const{viewState:{selectedTenantId:e}}=es(),{tenants:n}=us(),r=(0,u.useMemo)((()=>n.find((t=>t.id===e))),[e,n]);return r?l().createElement(os.Image,{src:r.logoUrl,layout:t}):null};function cs(t){if("string"==typeof t||"number"==typeof t)return""+t;let e="";if(Array.isArray(t))for(let n,r=0;r<t.length;r++)""!==(n=cs(t[r]))&&(e+=(e&&" ")+n);else for(let n in t)t[n]&&(e+=(e&&" ")+n);return e}const ds="alkxjZvTgAcsz0JRkm6c",fs="p4JPb4DzmGoZOIhO09ws",ps="x0_VF3BXbWUtlCCgOtQZ",vs="jWPBZu8iLDyyTn6eW6kw",hs="gb6t82xpZU7ymkUdSux_",ms=function({children:t,header:e,footer:n,className:r,width:o,showHeaderBorder:i}){return l().createElement("div",{className:cs([ds,r]),style:{width:o}},!!e&&l().createElement("div",{className:cs([fs,{[ps]:i}])},e),l().createElement("div",{className:vs},t),!!n&&l().createElement("div",{className:hs},n))},gs=require("react-router-dom"),ys="RuYyU4ZU982IBgdb1Nr2",Es="mDVPC452sIZ1AZ12Hupu",xs=function({children:t,to:e,hidden:n}){const[r,o]=(0,u.useContext)(Qa.TenantIdContext),[i,a]=(0,u.useState)(!1),{viewState:{selectedTenantId:s}}=es();(0,u.useEffect)((()=>{const t=()=>{r!==s&&i&&o(s)};return window.addEventListener("unload",t),()=>{window.removeEventListener("unload",t)}}),[o,r,s,i]);const c=(0,u.useCallback)((()=>{a(!0),window.location.assign(e)}),[e]),d=!!(0,gs.matchPath)(`${e}/*`,window.location.pathname)&&r===s;return n?null:l().createElement(os.Button,{align:"left",noBorder:!0,className:cs([ys,{[Es]:d}]),noShadow:!0,disabled:d,onClick:c},t)},bs="xq2NhM9BEi_W4nwT3yh2",ws="BGjEtVj4r_GL1XRPggdK",As="VaoS9sXTECATv5AlheWA",Ss="WuTrGz3UU3pH1fVTiCTZ",Ps="Coh2DFrCNYqjuH_r7MvG",Ts="MOX9IB0nSx5cfLHrcoOZ",Cs="mwOFiCMJUcwQgN71e7sC",Ms="AVG7kB9Fyvbb6jW3FA0B",Vs="VKsHJOXcQi174s94qmOo",Rs="SWnA20nAEkR6goWGlFre",Os="HeDayZpMaiaMwoXvRFoD",Ds="XF2F_YGE6PmxS0tEVvP2",Ls="V3IZL1yVbMWIposjQAL8",ks="Zgx8Dpy2pAdOoqTtMMQi",Ns="AZnlFbzTGExGtpYh4_LY",Is="q8vjvRoPyWxP_4biO7ye",js=function(){const{user:t}=(0,u.useContext)($a.AuthContext),{toggleTenants:e}=es(),{signOut:n,onNavigationClose:r,hasShowroomAccess:o,hasMarketingEngineAccess:i,hasSendoutsAccess:a,hasSendoutsCmsAccess:s,hasUserManagementAccess:c}=es();return l().createElement(ms,{className:bs,width:Ka,showHeaderBorder:!0,header:l().createElement("div",{className:ws},l().createElement("div",{className:As},l().createElement("div",{className:Ss},l().createElement(ls,null)),l().createElement("div",{className:Ps,onClick:r},l().createElement(os.Icon,{src:"data:image/svg+xml,%3csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M0.398438 0.399902L19.5984 19.5999M0.398438 19.5999L19.5984 0.399902' stroke='black'/%3e %3c/svg%3e",size:"large"}))),l().createElement(os.Button,{align:"left",noBorder:!0,transparent:!0,className:Ts,onClick:e},"Change brand")),footer:l().createElement("div",{className:Ls,onClick:n},l().createElement("div",{className:ks},l().createElement("div",{className:Ns},l().createElement(os.Icon,{src:"data:image/svg+xml,%3csvg width='14' height='15' viewBox='0 0 14 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M7 1.5999L10.4667 4.7999M7 1.5999L3.8 4.7999M7 1.5999L7 11.7332M13.4 7.46657L13.4 14.3999L0.600002 14.3999L0.600002 7.46657' stroke='%232D2D33'/%3e %3c/svg%3e",size:"medium"})),l().createElement("div",{className:Is},"Sign out")))},l().createElement("div",{className:Cs},l().createElement("div",{className:Ms},l().createElement("div",{className:Vs},l().createElement(xs,{to:Za.DASHBOARD},"Dashboard"),l().createElement(xs,{hidden:!o,to:Za.SHOWROOM},"Presentations (Showroom)"),l().createElement(xs,{hidden:!a,to:Za.SENDOUTS},"Sendouts"),l().createElement(xs,{hidden:!i,to:Za.MARKETING_ENGINE},"Media Library"),l().createElement(xs,{hidden:!s,to:Za.SENDOUTS_CMS},"Sendouts CMS"),l().createElement(xs,{hidden:!c,to:Za.USER_MANAGEMENT},"Users")),t&&l().createElement("div",{className:Rs},l().createElement("div",{className:Os},t.firstName," ",t.lastName),l().createElement("div",{className:Ds},t.email)))))},Bs="V1qoW3V5Xb2iaEBhQlFZ",Fs="TPBl4ro5b8sgjOagJRWS",Us=function({onClose:t}){return l().createElement(os.ConfirmationModal,{onClose:t,header:"Create a new Brand Workspace",buttonsRight:[l().createElement(os.Button,{key:"close",onClick:t,rounded:!0},"Close")],isOpen:!0},l().createElement("div",{className:Bs},"Please email ",l().createElement("span",{className:Fs},"support@touchtech.com")," and we will help you setup your Brand Workspace. You will be guided throughout the process of uploading your content."))},Hs="oeuWMMcJvLzGVyzlkzri",_s="bbUHwXdmTmLx1Bm14Atn",zs=function({tenant:t}){const{viewState:{selectedTenantId:e},updateViewState:n}=es(),r=e===t.id;return l().createElement(os.Button,{key:t.id,align:"left",noBorder:!0,className:cs([Hs,{[_s]:r}]),noShadow:!0,disabled:r,onClick:()=>{n({selectedTenantId:t.id,currentPosition:Ja.OPEN})}},t.label)},Ws="TImCshnjb7UPVk2R4lZP",Gs="PLOWzDGNGXzLAJrH0RK3",Xs="xdEO_zIZZ4tFrfapkFFT",Ys="As12vynTQk_jknQIlJ8A",Zs="q2ws7axL5Ap1hQW3m16N",qs="zYkzNuNQhvIdWKZhoQGr",Ks="xxcu6ytXRcPl1GZJ2vd9",$s="QYhcvZqbZxgenG41kwNq",Qs=function(){const[t,e]=(0,u.useState)(!1),{toggleTenants:n}=es(),{tenants:r}=us();return l().createElement("div",{className:Ws},l().createElement(ms,{width:qa,header:l().createElement("div",{className:Gs},l().createElement("div",{className:Xs,onClick:n},l().createElement(os.Icon,{src:"data:image/svg+xml,%3csvg width='22' height='14' viewBox='0 0 22 14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M1.6001 7.00039L8.0001 13.4004M1.6001 7.00039L8.0001 0.600391M1.6001 7.00039L21.6001 7.00039' stroke='%23262626'/%3e %3c/svg%3e",size:"large"}))),footer:l().createElement("div",{className:Zs,onClick:()=>window.location.assign(Za.DASHBOARD_CREATE_WORKSPACE_MODAL)},l().createElement("div",{className:qs},l().createElement("div",{className:Ks},l().createElement(os.Icon,{src:"data:image/svg+xml,%3csvg width='14' height='14' viewBox='0 0 14 14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M0.00170906 7L13.0017 7M6.50171 13.5L6.50171 0.5' stroke='%232D2D33'/%3e %3c/svg%3e",size:"medium"})),l().createElement("div",{className:$s},"Create a brand workspace")))},l().createElement("div",{className:Ys},r.map((t=>l().createElement(zs,{tenant:t,key:t.id}))))),t&&l().createElement(Us,{onClose:()=>{e(!1)}}))},Js="x4CcnKP0hsMpf8aTV1vc",tu=function(){return l().createElement("div",{className:Js},l().createElement(js,null),l().createElement(Qs,null))},eu=Ka+qa,nu={ease:"easeOut",duration:.3},ru={[Ja.HIDDEN]:{left:-eu,transition:nu},[Ja.OPEN]:{left:-Ka,transition:nu},[Ja.EXPANDED]:{left:0,transition:nu}},ou=function({isOpen:t,portalContainer:e=document.body,onClose:n}){return l().createElement(ns,{onNavigationClose:n,isOpen:t},l().createElement(ts.Consumer,null,(({viewState:{currentPosition:t}})=>(0,Ya.createPortal)(l().createElement(H,null,t!==Ja.HIDDEN&&l().createElement(Xa.div,{className:rs,initial:Ja.HIDDEN,variants:ru,animate:t,exit:Ja.HIDDEN},l().createElement(tu,null))),e))))},iu="data:image/svg+xml,%3csvg width='14' height='15' viewBox='0 0 14 11' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M0 1.5H14M0 5.5H14M0 9.5H14M0' stroke='black'/%3e %3c/svg%3e",au=function(t){var{size:e="medium",alt:n="Toggle navigation menu",src:r=iu,portalContainer:o=document.body}=t,s=i(t,["size","alt","src","portalContainer"]);const[c,d]=function(t){void 0===t&&(t=!1);var e=a((0,u.useState)(t),2),n=e[0],r=e[1];return[n,(0,u.useCallback)((function(t){r("boolean"==typeof t?t:function(t){return!t})}),[])]}(!1);return l().createElement(u.Fragment,null,l().createElement(os.IconButton,Object.assign({size:e,alt:n,src:r,onClick:()=>d()},s)),l().createElement(ou,{isOpen:c,portalContainer:o,onClose:()=>d()}))};var su=exports;for(var uu in e)su[uu]=e[uu];e.__esModule&&Object.defineProperty(su,"__esModule",{value:!0})})();
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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R0FBbUJZLFFBQ3RDLGtCQUFDekIsR0FBTzhHLElBQUcsQ0FDVG5DLFVBQVcsR0FDWC9pRCxRQUFTaS9DLEdBQW1CWSxPQUM1Qmg0QyxTQUFVaTlDLEdBQ1Z6OEMsUUFBU3UzQyxFQUNUcDdDLEtBQU15NkMsR0FBbUJZLFFBRXpCLGtCQUFDLEdBQUssUUFJWmtGLEtBTVosRUNqRUEsb01DeUNBLEdBM0JBLFNBQTBCLEcsSUFBQSxLQUN4QnpqRCxFQUFPLFNBQVEsSUFDZjZqRCxFQUFNLHlCQUF3QixJQUM5QjNDLEVBQU00QyxHQUFRLGdCQUNkTCxFQUFrQmptRCxTQUFTaS9DLE1BQUksRUFDNUI3NUMsRUFBSyxJQUxnQix3Q0FPeEIsTUFBT21oRCxFQUFrQkMsR0NuQlosU0FBbUJDLFFBQ1QsSUFBakJBLElBQTJCQSxHQUFlLEdBQzlDLElBQUl6bEQsRUFBSyxHQUFPLElBQUFpQyxVQUFTd2pELEdBQWUsR0FBSTFzRCxFQUFRaUgsRUFBRyxHQUFJMGxELEVBQVcxbEQsRUFBRyxHQVd6RSxNQUFPLENBQUNqSCxHQVZLLElBQUFzSixjQUFZLFNBQVVzakQsR0FFM0JELEVBRG9CLGtCQUFiQyxFQUNFQSxFQUdBLFNBQVV2YixHQUNmLE9BQVFBLENBQ1osRUFFUixHQUFHLElBRVAsQ0RLcUR3YixFQUFVLEdBRTdELE9BQ0Usa0JBQUMsRUFBQUMsU0FBUSxLQUNQLGtCQUFDLEdBQUFDLFdBQVUsZUFDVHRrRCxLQUFNQSxFQUNONmpELElBQUtBLEVBQ0wzQyxJQUFLQSxFQUNMd0IsUUFBUyxJQUFNc0IsS0FDWHBoRCxJQUVOLGtCQUFDLEdBQVUsQ0FDVG03QyxPQUFRZ0csRUFDUk4sZ0JBQWlCQSxFQUNqQlQsUUFBUyxJQUFNZ0IsTUFJdkIsRSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS9leHRlcm5hbCBjb21tb25qcyB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJjb21tb25qczJcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvdXRpbHMvcHJvY2Vzcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lc3luYy9kaXN0L2VzL29uLW5leHQtZnJhbWUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXN5bmMvZGlzdC9lcy9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lc3luYy9kaXN0L2VzL2NyZWF0ZS1yZW5kZXItc3RlcC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy9pcy1icm93c2VyLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3V0aWxzL3VzZS1pc29tb3JwaGljLWVmZmVjdC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy91c2UtaXMtbW91bnRlZC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9jb250ZXh0L1ByZXNlbmNlQ29udGV4dC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy91c2UtY29uc3RhbnQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvdXRpbHMvdXNlLWlkLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2NvbXBvbmVudHMvQW5pbWF0ZVByZXNlbmNlL1ByZXNlbmNlQ2hpbGQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvY29udGV4dC9MYXlvdXRHcm91cENvbnRleHQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvdXRpbHMvdXNlLXVubW91bnQtZWZmZWN0Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2NvbXBvbmVudHMvQW5pbWF0ZVByZXNlbmNlL2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3V0aWxzL3VzZS1mb3JjZS11cGRhdGUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL2ZlYXR1cmVzL2RlZmluaXRpb25zLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvaGV5LWxpc3Rlbi9kaXN0L2hleS1saXN0ZW4uZXMuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9jb250ZXh0L0xhenlDb250ZXh0Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL21vdGlvbi9mZWF0dXJlcy91c2UtZmVhdHVyZXMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvY29udGV4dC9Nb3Rpb25Db25maWdDb250ZXh0Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2NvbnRleHQvTW90aW9uQ29udGV4dC9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy91c2UtcmVkdWNlZC1tb3Rpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL3V0aWxzL3VzZS12aXN1YWwtZWxlbWVudC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy9pcy1yZWYtb2JqZWN0Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci91dGlscy92YXJpYW50cy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9jb250ZXh0L01vdGlvbkNvbnRleHQvY3JlYXRlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vbm9kZS9zdGF0ZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL25vZGUvaWQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvY29udGV4dC9Td2l0Y2hMYXlvdXRHcm91cENvbnRleHQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL3V0aWxzL1Zpc3VhbEVsZW1lbnRIYW5kbGVyLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL21vdGlvbi9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9jb250ZXh0L01vdGlvbkNvbnRleHQvdXRpbHMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL2ZlYXR1cmVzL3VzZS1wcm9qZWN0aW9uLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL21vdGlvbi91dGlscy91c2UtbW90aW9uLXJlZi5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL21vdGlvbi1wcm94eS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvc3ZnL2xvd2VyY2FzZS1lbGVtZW50cy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3V0aWxzL2lzLXN2Zy1jb21wb25lbnQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcHJvamVjdGlvbi9zdHlsZXMvc2NhbGUtY29ycmVjdGlvbi5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvaHRtbC91dGlscy90cmFuc2Zvcm0ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL3V0aWxzL2lzLWZvcmNlZC1tb3Rpb24tdmFsdWUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvdmFsdWUvdXRpbHMvaXMtbW90aW9uLXZhbHVlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9odG1sL3V0aWxzL2J1aWxkLXRyYW5zZm9ybS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3V0aWxzL2lzLWNzcy12YXJpYWJsZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3ZhbHVlLXR5cGVzL2dldC1hcy10eXBlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvc3R5bGUtdmFsdWUtdHlwZXMvZGlzdC9lcy91dGlscy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLXZhbHVlLXR5cGVzL2Rpc3QvZXMvbnVtYmVycy91bml0cy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLXZhbHVlLXR5cGVzL2Rpc3QvZXMvbnVtYmVycy9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3ZhbHVlLXR5cGVzL3R5cGUtaW50Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vdmFsdWUtdHlwZXMvbnVtYmVyLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9odG1sL3V0aWxzL2J1aWxkLXN0eWxlcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvaHRtbC91dGlscy9jcmVhdGUtcmVuZGVyLXN0YXRlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9odG1sL3VzZS1wcm9wcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9tb3Rpb24vdXRpbHMvdmFsaWQtcHJvcC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3V0aWxzL2ZpbHRlci1wcm9wcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvc3ZnL3V0aWxzL3RyYW5zZm9ybS1vcmlnaW4ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL3N2Zy91dGlscy9wYXRoLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9zdmcvdXRpbHMvYnVpbGQtYXR0cnMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL3N2Zy91dGlscy9jcmVhdGUtcmVuZGVyLXN0YXRlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9zdmcvdXNlLXByb3BzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vdXNlLXJlbmRlci5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3V0aWxzL2NhbWVsLXRvLWRhc2gubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2h0bWwvdXRpbHMvcmVuZGVyLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9zdmcvdXRpbHMvY2FtZWwtY2FzZS1hdHRycy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvc3ZnL3V0aWxzL3JlbmRlci5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvaHRtbC91dGlscy9zY3JhcGUtbW90aW9uLXZhbHVlcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvc3ZnL3V0aWxzL3NjcmFwZS1tb3Rpb24tdmFsdWVzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2FuaW1hdGlvbi91dGlscy9pcy1hbmltYXRpb24tY29udHJvbHMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvYW5pbWF0aW9uL3V0aWxzL2lzLWtleWZyYW1lcy10YXJnZXQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvdXRpbHMvcmVzb2x2ZS12YWx1ZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy92YWx1ZS91dGlscy9yZXNvbHZlLW1vdGlvbi12YWx1ZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9tb3Rpb24vdXRpbHMvdXNlLXZpc3VhbC1zdGF0ZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvc3ZnL2NvbmZpZy1tb3Rpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL3V0aWxzL3R5cGVzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9odG1sL2NvbmZpZy1tb3Rpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvZXZlbnRzL3VzZS1kb20tZXZlbnQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvZ2VzdHVyZXMvdXRpbHMvZXZlbnQtdHlwZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9ldmVudHMvZXZlbnQtaW5mby5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9ldmVudHMvdXRpbHMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvZXZlbnRzL3VzZS1wb2ludGVyLWV2ZW50Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2dlc3R1cmVzL2RyYWcvdXRpbHMvbG9jay5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9nZXN0dXJlcy91c2UtaG92ZXItZ2VzdHVyZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9nZXN0dXJlcy91dGlscy9pcy1ub2RlLW9yLWNoaWxkLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvdXRpbHMvcGlwZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy93YXJuLW9uY2UubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL2ZlYXR1cmVzL3ZpZXdwb3J0L29ic2VydmVycy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9tb3Rpb24vZmVhdHVyZXMvdmlld3BvcnQvdXNlLXZpZXdwb3J0Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL21vdGlvbi91dGlscy9tYWtlLXJlbmRlcmxlc3MtY29tcG9uZW50Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL21vdGlvbi9mZWF0dXJlcy9nZXN0dXJlcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9nZXN0dXJlcy91c2UtdGFwLWdlc3R1cmUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvZ2VzdHVyZXMvdXNlLWZvY3VzLWdlc3R1cmUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvY29tcG9uZW50cy9BbmltYXRlUHJlc2VuY2UvdXNlLXByZXNlbmNlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3V0aWxzL3NoYWxsb3ctY29tcGFyZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL3V0aWxzL2NsYW1wLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvYW5pbWF0aW9ucy91dGlscy9maW5kLXNwcmluZy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL2FuaW1hdGlvbnMvZ2VuZXJhdG9ycy9zcHJpbmcubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy91dGlscy9wcm9ncmVzcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL3V0aWxzL21peC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLXZhbHVlLXR5cGVzL2Rpc3QvZXMvY29sb3IvdXRpbHMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9zdHlsZS12YWx1ZS10eXBlcy9kaXN0L2VzL2NvbG9yL3JnYmEubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9zdHlsZS12YWx1ZS10eXBlcy9kaXN0L2VzL2NvbG9yL2hleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLXZhbHVlLXR5cGVzL2Rpc3QvZXMvY29sb3IvaHNsYS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL3V0aWxzL2hzbGEtdG8tcmdiYS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL3V0aWxzL21peC1jb2xvci5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLXZhbHVlLXR5cGVzL2Rpc3QvZXMvY29sb3IvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9zdHlsZS12YWx1ZS10eXBlcy9kaXN0L2VzL2NvbXBsZXgvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy91dGlscy9pbmMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy91dGlscy9taXgtY29tcGxleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL3V0aWxzL2ludGVycG9sYXRlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvZWFzaW5nL3V0aWxzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvZWFzaW5nL2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvYW5pbWF0aW9ucy9nZW5lcmF0b3JzL2tleWZyYW1lcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL2FuaW1hdGlvbnMvdXRpbHMvZGV0ZWN0LWFuaW1hdGlvbi1mcm9tLW9wdGlvbnMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy9hbmltYXRpb25zL2dlbmVyYXRvcnMvZGVjYXkubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy9hbmltYXRpb25zL3V0aWxzL2VsYXBzZWQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy9hbmltYXRpb25zL2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvdXRpbHMvdmVsb2NpdHktcGVyLXNlY29uZC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy90aW1lLWNvbnZlcnNpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy9lYXNpbmcvY3ViaWMtYmV6aWVyLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2FuaW1hdGlvbi91dGlscy9lYXNpbmcubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvYW5pbWF0aW9uL3V0aWxzL2lzLWFuaW1hdGFibGUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvYW5pbWF0aW9uL3V0aWxzL2RlZmF1bHQtdHJhbnNpdGlvbnMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9zdHlsZS12YWx1ZS10eXBlcy9kaXN0L2VzL2NvbXBsZXgvZmlsdGVyLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vdmFsdWUtdHlwZXMvZGVmYXVsdHMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS92YWx1ZS10eXBlcy9hbmltYXRhYmxlLW5vbmUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvdXRpbHMvdXNlLWluc3RhbnQtdHJhbnNpdGlvbi1zdGF0ZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9hbmltYXRpb24vdXRpbHMvdHJhbnNpdGlvbnMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy9hbmltYXRpb25zL2luZXJ0aWEubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvdXRpbHMvaXMtbnVtZXJpY2FsLXN0cmluZy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy9pcy16ZXJvLXZhbHVlLXN0cmluZy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy9hcnJheS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy9zdWJzY3JpcHRpb24tbWFuYWdlci5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy92YWx1ZS9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3ZhbHVlLXR5cGVzL3Rlc3QubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS92YWx1ZS10eXBlcy9kaW1lbnNpb25zLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vdmFsdWUtdHlwZXMvdHlwZS1hdXRvLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vdmFsdWUtdHlwZXMvZmluZC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvdXRpbHMvc2V0dGVycy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvdXRpbHMvYW5pbWF0aW9uLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci91dGlscy9hbmltYXRpb24tc3RhdGUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL2ZlYXR1cmVzL2FuaW1hdGlvbnMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy91dGlscy9pcy1wb2ludC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL3V0aWxzL2lzLXBvaW50LTNkLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvdXRpbHMvZGlzdGFuY2UubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvZ2VzdHVyZXMvUGFuU2Vzc2lvbi5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL2dlb21ldHJ5L2RlbHRhLWNhbGMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvZ2VzdHVyZXMvZHJhZy91dGlscy9jb25zdHJhaW50cy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL2dlb21ldHJ5L21vZGVscy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL3V0aWxzL2VhY2gtYXhpcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL2dlb21ldHJ5L2NvbnZlcnNpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcHJvamVjdGlvbi91dGlscy9oYXMtdHJhbnNmb3JtLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vZ2VvbWV0cnkvZGVsdGEtYXBwbHkubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcHJvamVjdGlvbi91dGlscy9tZWFzdXJlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2dlc3R1cmVzL2RyYWcvVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9tb3Rpb24vZmVhdHVyZXMvZHJhZy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9nZXN0dXJlcy91c2UtcGFuLWdlc3R1cmUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvZ2VzdHVyZXMvZHJhZy91c2UtZHJhZy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvdXRpbHMvbGlmZWN5Y2xlcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL3V0aWxzL21vdGlvbi12YWx1ZXMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS91dGlscy9jc3MtdmFyaWFibGVzLWNvbnZlcnNpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS91dGlscy91bml0LWNvbnZlcnNpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS91dGlscy9wYXJzZS1kb20tdmFyaWFudC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvaHRtbC92aXN1YWwtZWxlbWVudC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvc3ZnL3Zpc3VhbC1lbGVtZW50Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vY3JlYXRlLXZpc3VhbC1lbGVtZW50Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vc3R5bGVzL3NjYWxlLWJvcmRlci1yYWRpdXMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcHJvamVjdGlvbi9zdHlsZXMvc2NhbGUtYm94LXNoYWRvdy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9tb3Rpb24vZmVhdHVyZXMvbGF5b3V0L01lYXN1cmVMYXlvdXQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL2ZlYXR1cmVzL2xheW91dC9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL2FuaW1hdGlvbi9taXgtdmFsdWVzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vZ2VvbWV0cnkvY29weS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL2dlb21ldHJ5L2RlbHRhLXJlbW92ZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL2dlb21ldHJ5L3V0aWxzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vc2hhcmVkL3N0YWNrLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vc3R5bGVzL3RyYW5zZm9ybS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvdXRpbHMvY29tcGFyZS1ieS1kZXB0aC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvdXRpbHMvZmxhdC10cmVlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vbm9kZS9jcmVhdGUtcHJvamVjdGlvbi1ub2RlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2FuaW1hdGlvbi9hbmltYXRlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vbm9kZS9Eb2N1bWVudFByb2plY3Rpb25Ob2RlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vbm9kZS9IVE1MUHJvamVjdGlvbk5vZGUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS9tb3Rpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS91dGlscy9jcmVhdGUtY29uZmlnLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvZXh0ZXJuYWwgY29tbW9uanMge1wicm9vdFwiOlwiUmVhY3REb21cIixcImNvbW1vbmpzXCI6XCJyZWFjdC1kb21cIixcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCIsXCJhbWRcIjpcInJlYWN0LWRvbVwifSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29uc3RhbnRzL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS9leHRlcm5hbCBjb21tb25qcyB7XCJyb290XCI6XCJUb3VjaHRlY2hXZWJBdXRoXCIsXCJjb21tb25qczJcIjpcIkB0b3VjaHRlY2gvd2ViLWF1dGhcIixcImNvbW1vbmpzXCI6XCJAdG91Y2h0ZWNoL3dlYi1hdXRoXCIsXCJhbWRcIjpcIkB0b3VjaHRlY2gvd2ViLWF1dGhcIn0iLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51L2V4dGVybmFsIGNvbW1vbmpzIHtcInJvb3RcIjpcIlRvdWNodGVjaFdlYlRlbmFudElkUHJvdmlkZXJcIixcImNvbW1vbmpzMlwiOlwiQHRvdWNodGVjaC93ZWItdGVuYW50LWlkLXByb3ZpZGVyXCIsXCJjb21tb25qc1wiOlwiQHRvdWNodGVjaC93ZWItdGVuYW50LWlkLXByb3ZpZGVyXCIsXCJhbWRcIjpcIkB0b3VjaHRlY2gvd2ViLXRlbmFudC1pZC1wcm92aWRlclwifSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29tcG9uZW50cy9OYXZpZ2F0aW9uL0NvbnRleHQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9jb21wb25lbnRzL05hdmlnYXRpb24vTmF2aWdhdGlvbi5tb2R1bGUuY3NzP2EwMjQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51L2V4dGVybmFsIGNvbW1vbmpzIHtcInJvb3RcIjpcIlRvdWNodGVjaEJhc2VsYXllclVpXCIsXCJjb21tb25qczJcIjpcIkB0b3VjaHRlY2gvYmFzZWxheWVyLXVpXCIsXCJjb21tb25qc1wiOlwiQHRvdWNodGVjaC9iYXNlbGF5ZXItdWlcIixcImFtZFwiOlwiQHRvdWNodGVjaC9iYXNlbGF5ZXItdWlcIn0iLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51L2V4dGVybmFsIGNvbW1vbmpzIHtcInJvb3RcIjpcIlN3clwiLFwiY29tbW9uanMyXCI6XCJzd3JcIixcImNvbW1vbmpzXCI6XCJzd3JcIixcImFtZFwiOlwic3dyXCJ9Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS9leHRlcm5hbCBjb21tb25qcyB7XCJyb290XCI6XCJUb3VjaHRlY2hXZWJBcGlDbGllbnRcIixcImNvbW1vbmpzMlwiOlwiQHRvdWNodGVjaC93ZWItYXBpLWNsaWVudFwiLFwiY29tbW9uanNcIjpcIkB0b3VjaHRlY2gvd2ViLWFwaS1jbGllbnRcIixcImFtZFwiOlwiQHRvdWNodGVjaC93ZWItYXBpLWNsaWVudFwifSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvaG9va3MvdXNlVGVuYW50cy50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29tcG9uZW50cy9OYXZpZ2F0aW9uL0xvZ28vTG9nby50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2NsYXNzY2F0L2luZGV4LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9jb21wb25lbnRzL05hdmlnYXRpb24vVGllcnMvVGllci9UaWVyLm1vZHVsZS5jc3M/Zjg3OSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29tcG9uZW50cy9OYXZpZ2F0aW9uL1RpZXJzL1RpZXIvVGllci50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51L2V4dGVybmFsIGNvbW1vbmpzIHtcInJvb3RcIjpcIlJlYWN0Um91dGVyRG9tXCIsXCJjb21tb25qczJcIjpcInJlYWN0LXJvdXRlci1kb21cIixcImNvbW1vbmpzXCI6XCJyZWFjdC1yb3V0ZXItZG9tXCIsXCJhbWRcIjpcInJlYWN0LXJvdXRlci1kb21cIn0iLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vc3JjL2NvbXBvbmVudHMvTmF2aWdhdGlvbi9UaWVycy9BcHBsaWNhdGlvbnMvQXBwbGljYXRpb25MaW5rL0FwcGxpY2F0aW9uTGluay5tb2R1bGUuY3NzPzNmZjYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vc3JjL2NvbXBvbmVudHMvTmF2aWdhdGlvbi9UaWVycy9BcHBsaWNhdGlvbnMvQXBwbGljYXRpb25MaW5rL0FwcGxpY2F0aW9uTGluay50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vc3JjL2NvbXBvbmVudHMvTmF2aWdhdGlvbi9UaWVycy9BcHBsaWNhdGlvbnMvQXBwbGljYXRpb25zLm1vZHVsZS5jc3M/Y2U3OCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29tcG9uZW50cy9OYXZpZ2F0aW9uL1RpZXJzL0FwcGxpY2F0aW9ucy9BcHBsaWNhdGlvbnMudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL2Fzc2V0cy9pY29ucy9jbG9zZS5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vYXNzZXRzL2ljb25zL2xvZ291dC5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vc3JjL2NvbXBvbmVudHMvTmF2aWdhdGlvbi9UaWVycy9UZW5hbnRzL01vZGFsQ3JlYXRlVGVuYW50L01vZGFsQ3JlYXRlVGVuYW50Lm1vZHVsZS5jc3M/MWRmZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29tcG9uZW50cy9OYXZpZ2F0aW9uL1RpZXJzL1RlbmFudHMvTW9kYWxDcmVhdGVUZW5hbnQvTW9kYWxDcmVhdGVUZW5hbnQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9jb21wb25lbnRzL05hdmlnYXRpb24vVGllcnMvVGVuYW50cy9UZW5hbnRCdXR0b24vVGVuYW50QnV0dG9uLm1vZHVsZS5jc3M/Njk3ZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29tcG9uZW50cy9OYXZpZ2F0aW9uL1RpZXJzL1RlbmFudHMvVGVuYW50QnV0dG9uL1RlbmFudEJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vc3JjL2NvbXBvbmVudHMvTmF2aWdhdGlvbi9UaWVycy9UZW5hbnRzL1RlbmFudHMubW9kdWxlLmNzcz82NDMwIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9jb21wb25lbnRzL05hdmlnYXRpb24vVGllcnMvVGVuYW50cy9UZW5hbnRzLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9hc3NldHMvaWNvbnMvYXJyb3ctbGVmdC5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vYXNzZXRzL2ljb25zL2FkZC5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vc3JjL2NvbXBvbmVudHMvTmF2aWdhdGlvbi9UaWVycy9UaWVycy5tb2R1bGUuY3NzP2Y1YTMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vc3JjL2NvbXBvbmVudHMvTmF2aWdhdGlvbi9UaWVycy9UaWVycy50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vc3JjL2NvbXBvbmVudHMvTmF2aWdhdGlvbi9OYXZpZ2F0aW9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9hc3NldHMvaWNvbnMvbWVudS5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vc3JjL2NvbXBvbmVudHMvTmF2aWdhdGlvbi9OYXZpZ2F0aW9uQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvQHRvdWNodGVjaC93ZWItaG9va3MvZGlzdC9ob29rcy91c2VUb2dnbGUvdXNlVG9nZ2xlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSByZXF1aXJlIHNjb3BlXG52YXIgX193ZWJwYWNrX3JlcXVpcmVfXyA9IHt9O1xuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xyXG4gICAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XHJcbiAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xyXG4gICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XHJcbiAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcclxuICAgIHZhciBfLCBkb25lID0gZmFsc2U7XHJcbiAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBjb250ZXh0ID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XHJcbiAgICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcclxuICAgICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMucHVzaChfKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XHJcbiAgICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy5wdXNoKF8pO1xyXG4gICAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xyXG4gICAgZG9uZSA9IHRydWU7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xyXG4gICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XHJcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XHJcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcclxuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xyXG4gICAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XHJcbiAgICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xyXG59XHJcbiIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwicmVhY3RcIik7IiwiLyoqXG4gKiBCcm93c2VyLXNhZmUgdXNhZ2Ugb2YgcHJvY2Vzc1xuICovXG52YXIgZGVmYXVsdEVudmlyb25tZW50ID0gXCJwcm9kdWN0aW9uXCI7XG52YXIgZW52ID0gdHlwZW9mIHByb2Nlc3MgPT09IFwidW5kZWZpbmVkXCIgfHwgcHJvY2Vzcy5lbnYgPT09IHVuZGVmaW5lZFxuICAgID8gZGVmYXVsdEVudmlyb25tZW50XG4gICAgOiBwcm9jZXNzLmVudi5OT0RFX0VOViB8fCBkZWZhdWx0RW52aXJvbm1lbnQ7XG5cbmV4cG9ydCB7IGVudiB9O1xuIiwiY29uc3QgZGVmYXVsdFRpbWVzdGVwID0gKDEgLyA2MCkgKiAxMDAwO1xuY29uc3QgZ2V0Q3VycmVudFRpbWUgPSB0eXBlb2YgcGVyZm9ybWFuY2UgIT09IFwidW5kZWZpbmVkXCJcbiAgICA/ICgpID0+IHBlcmZvcm1hbmNlLm5vdygpXG4gICAgOiAoKSA9PiBEYXRlLm5vdygpO1xuY29uc3Qgb25OZXh0RnJhbWUgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiXG4gICAgPyAoY2FsbGJhY2spID0+IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spXG4gICAgOiAoY2FsbGJhY2spID0+IHNldFRpbWVvdXQoKCkgPT4gY2FsbGJhY2soZ2V0Q3VycmVudFRpbWUoKSksIGRlZmF1bHRUaW1lc3RlcCk7XG5cbmV4cG9ydCB7IGRlZmF1bHRUaW1lc3RlcCwgb25OZXh0RnJhbWUgfTtcbiIsImltcG9ydCB7IG9uTmV4dEZyYW1lLCBkZWZhdWx0VGltZXN0ZXAgfSBmcm9tICcuL29uLW5leHQtZnJhbWUubWpzJztcbmltcG9ydCB7IGNyZWF0ZVJlbmRlclN0ZXAgfSBmcm9tICcuL2NyZWF0ZS1yZW5kZXItc3RlcC5tanMnO1xuXG5jb25zdCBtYXhFbGFwc2VkID0gNDA7XG5sZXQgdXNlRGVmYXVsdEVsYXBzZWQgPSB0cnVlO1xubGV0IHJ1bk5leHRGcmFtZSA9IGZhbHNlO1xubGV0IGlzUHJvY2Vzc2luZyA9IGZhbHNlO1xuY29uc3QgZnJhbWUgPSB7XG4gICAgZGVsdGE6IDAsXG4gICAgdGltZXN0YW1wOiAwLFxufTtcbmNvbnN0IHN0ZXBzT3JkZXIgPSBbXG4gICAgXCJyZWFkXCIsXG4gICAgXCJ1cGRhdGVcIixcbiAgICBcInByZVJlbmRlclwiLFxuICAgIFwicmVuZGVyXCIsXG4gICAgXCJwb3N0UmVuZGVyXCIsXG5dO1xuY29uc3Qgc3RlcHMgPSBzdGVwc09yZGVyLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBhY2Nba2V5XSA9IGNyZWF0ZVJlbmRlclN0ZXAoKCkgPT4gKHJ1bk5leHRGcmFtZSA9IHRydWUpKTtcbiAgICByZXR1cm4gYWNjO1xufSwge30pO1xuY29uc3Qgc3luYyA9IHN0ZXBzT3JkZXIucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgIGNvbnN0IHN0ZXAgPSBzdGVwc1trZXldO1xuICAgIGFjY1trZXldID0gKHByb2Nlc3MsIGtlZXBBbGl2ZSA9IGZhbHNlLCBpbW1lZGlhdGUgPSBmYWxzZSkgPT4ge1xuICAgICAgICBpZiAoIXJ1bk5leHRGcmFtZSlcbiAgICAgICAgICAgIHN0YXJ0TG9vcCgpO1xuICAgICAgICByZXR1cm4gc3RlcC5zY2hlZHVsZShwcm9jZXNzLCBrZWVwQWxpdmUsIGltbWVkaWF0ZSk7XG4gICAgfTtcbiAgICByZXR1cm4gYWNjO1xufSwge30pO1xuY29uc3QgY2FuY2VsU3luYyA9IHN0ZXBzT3JkZXIucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgIGFjY1trZXldID0gc3RlcHNba2V5XS5jYW5jZWw7XG4gICAgcmV0dXJuIGFjYztcbn0sIHt9KTtcbmNvbnN0IGZsdXNoU3luYyA9IHN0ZXBzT3JkZXIucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgIGFjY1trZXldID0gKCkgPT4gc3RlcHNba2V5XS5wcm9jZXNzKGZyYW1lKTtcbiAgICByZXR1cm4gYWNjO1xufSwge30pO1xuY29uc3QgcHJvY2Vzc1N0ZXAgPSAoc3RlcElkKSA9PiBzdGVwc1tzdGVwSWRdLnByb2Nlc3MoZnJhbWUpO1xuY29uc3QgcHJvY2Vzc0ZyYW1lID0gKHRpbWVzdGFtcCkgPT4ge1xuICAgIHJ1bk5leHRGcmFtZSA9IGZhbHNlO1xuICAgIGZyYW1lLmRlbHRhID0gdXNlRGVmYXVsdEVsYXBzZWRcbiAgICAgICAgPyBkZWZhdWx0VGltZXN0ZXBcbiAgICAgICAgOiBNYXRoLm1heChNYXRoLm1pbih0aW1lc3RhbXAgLSBmcmFtZS50aW1lc3RhbXAsIG1heEVsYXBzZWQpLCAxKTtcbiAgICBmcmFtZS50aW1lc3RhbXAgPSB0aW1lc3RhbXA7XG4gICAgaXNQcm9jZXNzaW5nID0gdHJ1ZTtcbiAgICBzdGVwc09yZGVyLmZvckVhY2gocHJvY2Vzc1N0ZXApO1xuICAgIGlzUHJvY2Vzc2luZyA9IGZhbHNlO1xuICAgIGlmIChydW5OZXh0RnJhbWUpIHtcbiAgICAgICAgdXNlRGVmYXVsdEVsYXBzZWQgPSBmYWxzZTtcbiAgICAgICAgb25OZXh0RnJhbWUocHJvY2Vzc0ZyYW1lKTtcbiAgICB9XG59O1xuY29uc3Qgc3RhcnRMb29wID0gKCkgPT4ge1xuICAgIHJ1bk5leHRGcmFtZSA9IHRydWU7XG4gICAgdXNlRGVmYXVsdEVsYXBzZWQgPSB0cnVlO1xuICAgIGlmICghaXNQcm9jZXNzaW5nKVxuICAgICAgICBvbk5leHRGcmFtZShwcm9jZXNzRnJhbWUpO1xufTtcbmNvbnN0IGdldEZyYW1lRGF0YSA9ICgpID0+IGZyYW1lO1xuXG5leHBvcnQgZGVmYXVsdCBzeW5jO1xuZXhwb3J0IHsgY2FuY2VsU3luYywgZmx1c2hTeW5jLCBnZXRGcmFtZURhdGEgfTtcbiIsImZ1bmN0aW9uIGNyZWF0ZVJlbmRlclN0ZXAocnVuTmV4dEZyYW1lKSB7XG4gICAgbGV0IHRvUnVuID0gW107XG4gICAgbGV0IHRvUnVuTmV4dEZyYW1lID0gW107XG4gICAgbGV0IG51bVRvUnVuID0gMDtcbiAgICBsZXQgaXNQcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgbGV0IGZsdXNoTmV4dEZyYW1lID0gZmFsc2U7XG4gICAgY29uc3QgdG9LZWVwQWxpdmUgPSBuZXcgV2Vha1NldCgpO1xuICAgIGNvbnN0IHN0ZXAgPSB7XG4gICAgICAgIHNjaGVkdWxlOiAoY2FsbGJhY2ssIGtlZXBBbGl2ZSA9IGZhbHNlLCBpbW1lZGlhdGUgPSBmYWxzZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWRkVG9DdXJyZW50RnJhbWUgPSBpbW1lZGlhdGUgJiYgaXNQcm9jZXNzaW5nO1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gYWRkVG9DdXJyZW50RnJhbWUgPyB0b1J1biA6IHRvUnVuTmV4dEZyYW1lO1xuICAgICAgICAgICAgaWYgKGtlZXBBbGl2ZSlcbiAgICAgICAgICAgICAgICB0b0tlZXBBbGl2ZS5hZGQoY2FsbGJhY2spO1xuICAgICAgICAgICAgaWYgKGJ1ZmZlci5pbmRleE9mKGNhbGxiYWNrKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBidWZmZXIucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgaWYgKGFkZFRvQ3VycmVudEZyYW1lICYmIGlzUHJvY2Vzc2luZylcbiAgICAgICAgICAgICAgICAgICAgbnVtVG9SdW4gPSB0b1J1bi5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2s7XG4gICAgICAgIH0sXG4gICAgICAgIGNhbmNlbDogKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRvUnVuTmV4dEZyYW1lLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSlcbiAgICAgICAgICAgICAgICB0b1J1bk5leHRGcmFtZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdG9LZWVwQWxpdmUuZGVsZXRlKGNhbGxiYWNrKTtcbiAgICAgICAgfSxcbiAgICAgICAgcHJvY2VzczogKGZyYW1lRGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzUHJvY2Vzc2luZykge1xuICAgICAgICAgICAgICAgIGZsdXNoTmV4dEZyYW1lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpc1Byb2Nlc3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgW3RvUnVuLCB0b1J1bk5leHRGcmFtZV0gPSBbdG9SdW5OZXh0RnJhbWUsIHRvUnVuXTtcbiAgICAgICAgICAgIHRvUnVuTmV4dEZyYW1lLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICBudW1Ub1J1biA9IHRvUnVuLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChudW1Ub1J1bikge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtVG9SdW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHRvUnVuW2ldO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhmcmFtZURhdGEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9LZWVwQWxpdmUuaGFzKGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RlcC5zY2hlZHVsZShjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5OZXh0RnJhbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlzUHJvY2Vzc2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGZsdXNoTmV4dEZyYW1lKSB7XG4gICAgICAgICAgICAgICAgZmx1c2hOZXh0RnJhbWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzdGVwLnByb2Nlc3MoZnJhbWVEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiBzdGVwO1xufVxuXG5leHBvcnQgeyBjcmVhdGVSZW5kZXJTdGVwIH07XG4iLCJ2YXIgaXNCcm93c2VyID0gdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiO1xuXG5leHBvcnQgeyBpc0Jyb3dzZXIgfTtcbiIsImltcG9ydCB7IHVzZUxheW91dEVmZmVjdCwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNCcm93c2VyIH0gZnJvbSAnLi9pcy1icm93c2VyLm1qcyc7XG5cbnZhciB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gaXNCcm93c2VyID8gdXNlTGF5b3V0RWZmZWN0IDogdXNlRWZmZWN0O1xuXG5leHBvcnQgeyB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IH07XG4iLCJpbXBvcnQgeyB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IH0gZnJvbSAnLi91c2UtaXNvbW9ycGhpYy1lZmZlY3QubWpzJztcblxuZnVuY3Rpb24gdXNlSXNNb3VudGVkKCkge1xuICAgIHZhciBpc01vdW50ZWQgPSB1c2VSZWYoZmFsc2UpO1xuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpc01vdW50ZWQuY3VycmVudCA9IHRydWU7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpc01vdW50ZWQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gaXNNb3VudGVkO1xufVxuXG5leHBvcnQgeyB1c2VJc01vdW50ZWQgfTtcbiIsImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG52YXIgUHJlc2VuY2VDb250ZXh0ID0gY3JlYXRlQ29udGV4dChudWxsKTtcblxuZXhwb3J0IHsgUHJlc2VuY2VDb250ZXh0IH07XG4iLCJpbXBvcnQgeyB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbnN0YW50IHZhbHVlIG92ZXIgdGhlIGxpZmVjeWNsZSBvZiBhIGNvbXBvbmVudC5cbiAqXG4gKiBFdmVuIGlmIGB1c2VNZW1vYCBpcyBwcm92aWRlZCBhbiBlbXB0eSBhcnJheSBhcyBpdHMgZmluYWwgYXJndW1lbnQsIGl0IGRvZXNuJ3Qgb2ZmZXJcbiAqIGEgZ3VhcmFudGVlIHRoYXQgaXQgd29uJ3QgcmUtcnVuIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIGxhdGVyIG9uLiBCeSB1c2luZyBgdXNlQ29uc3RhbnRgXG4gKiB5b3UgY2FuIGVuc3VyZSB0aGF0IGluaXRpYWxpc2VycyBkb24ndCBleGVjdXRlIHR3aWNlIG9yIG1vcmUuXG4gKi9cbmZ1bmN0aW9uIHVzZUNvbnN0YW50KGluaXQpIHtcbiAgICB2YXIgcmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGlmIChyZWYuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICByZWYuY3VycmVudCA9IGluaXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZi5jdXJyZW50O1xufVxuXG5leHBvcnQgeyB1c2VDb25zdGFudCB9O1xuIiwiaW1wb3J0IHsgdXNlQ29uc3RhbnQgfSBmcm9tICcuL3VzZS1jb25zdGFudC5tanMnO1xuXG52YXIgY291bnRlciA9IDA7XG52YXIgaW5jcmVtZW50SWQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjb3VudGVyKys7IH07XG52YXIgdXNlSWQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB1c2VDb25zdGFudChpbmNyZW1lbnRJZCk7IH07XG4vKipcbiAqIElkZWFsbHkgd2UnZCB1c2UgdGhlIGZvbGxvd2luZyBjb2RlIHRvIHN1cHBvcnQgUmVhY3QgMTggb3B0aW9uYWxseS5cbiAqIEJ1dCB0aGlzIGZhaXJseSBmYWlscyBpbiBXZWJwYWNrIChvdGhlcndpc2UgdHJlZXNoYWtpbmcgd291bGRuJ3Qgd29yayBhdCBhbGwpLlxuICogTmVlZCB0byBjb21lIHVwIHdpdGggYSBkaWZmZXJlbnQgd2F5IG9mIGZpZ3VyaW5nIHRoaXMgb3V0LlxuICovXG4vLyBleHBvcnQgY29uc3QgdXNlSWQgPSAoUmVhY3QgYXMgYW55KS51c2VJZFxuLy8gICAgID8gKFJlYWN0IGFzIGFueSkudXNlSWRcbi8vICAgICA6ICgpID0+IHVzZUNvbnN0YW50KGluY3JlbWVudElkKVxuXG5leHBvcnQgeyB1c2VJZCB9O1xuIiwiaW1wb3J0IHsgX192YWx1ZXMgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUHJlc2VuY2VDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9QcmVzZW5jZUNvbnRleHQubWpzJztcbmltcG9ydCB7IHVzZUNvbnN0YW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvdXNlLWNvbnN0YW50Lm1qcyc7XG5pbXBvcnQgeyB1c2VJZCB9IGZyb20gJy4uLy4uL3V0aWxzL3VzZS1pZC5tanMnO1xuXG52YXIgUHJlc2VuY2VDaGlsZCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBjaGlsZHJlbiA9IF9hLmNoaWxkcmVuLCBpbml0aWFsID0gX2EuaW5pdGlhbCwgaXNQcmVzZW50ID0gX2EuaXNQcmVzZW50LCBvbkV4aXRDb21wbGV0ZSA9IF9hLm9uRXhpdENvbXBsZXRlLCBjdXN0b20gPSBfYS5jdXN0b20sIHByZXNlbmNlQWZmZWN0c0xheW91dCA9IF9hLnByZXNlbmNlQWZmZWN0c0xheW91dDtcbiAgICB2YXIgcHJlc2VuY2VDaGlsZHJlbiA9IHVzZUNvbnN0YW50KG5ld0NoaWxkcmVuTWFwKTtcbiAgICB2YXIgaWQgPSB1c2VJZCgpO1xuICAgIHZhciBjb250ZXh0ID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7IHJldHVybiAoe1xuICAgICAgICBpZDogaWQsXG4gICAgICAgIGluaXRpYWw6IGluaXRpYWwsXG4gICAgICAgIGlzUHJlc2VudDogaXNQcmVzZW50LFxuICAgICAgICBjdXN0b206IGN1c3RvbSxcbiAgICAgICAgb25FeGl0Q29tcGxldGU6IGZ1bmN0aW9uIChjaGlsZElkKSB7XG4gICAgICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgICAgIHByZXNlbmNlQ2hpbGRyZW4uc2V0KGNoaWxkSWQsIHRydWUpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfYiA9IF9fdmFsdWVzKHByZXNlbmNlQ2hpbGRyZW4udmFsdWVzKCkpLCBfYyA9IF9iLm5leHQoKTsgIV9jLmRvbmU7IF9jID0gX2IubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc0NvbXBsZXRlID0gX2MudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNDb21wbGV0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gY2FuIHN0b3Agc2VhcmNoaW5nIHdoZW4gYW55IGlzIGluY29tcGxldGVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbkV4aXRDb21wbGV0ZSA9PT0gbnVsbCB8fCBvbkV4aXRDb21wbGV0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FeGl0Q29tcGxldGUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVnaXN0ZXI6IGZ1bmN0aW9uIChjaGlsZElkKSB7XG4gICAgICAgICAgICBwcmVzZW5jZUNoaWxkcmVuLnNldChjaGlsZElkLCBmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJlc2VuY2VDaGlsZHJlbi5kZWxldGUoY2hpbGRJZCk7IH07XG4gICAgICAgIH0sXG4gICAgfSk7IH0sIFxuICAgIC8qKlxuICAgICAqIElmIHRoZSBwcmVzZW5jZSBvZiBhIGNoaWxkIGFmZmVjdHMgdGhlIGxheW91dCBvZiB0aGUgY29tcG9uZW50cyBhcm91bmQgaXQsXG4gICAgICogd2Ugd2FudCB0byBtYWtlIGEgbmV3IGNvbnRleHQgdmFsdWUgdG8gZW5zdXJlIHRoZXkgZ2V0IHJlLXJlbmRlcmVkXG4gICAgICogc28gdGhleSBjYW4gZGV0ZWN0IHRoYXQgbGF5b3V0IGNoYW5nZS5cbiAgICAgKi9cbiAgICBwcmVzZW5jZUFmZmVjdHNMYXlvdXQgPyB1bmRlZmluZWQgOiBbaXNQcmVzZW50XSk7XG4gICAgdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHByZXNlbmNlQ2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoXywga2V5KSB7IHJldHVybiBwcmVzZW5jZUNoaWxkcmVuLnNldChrZXksIGZhbHNlKTsgfSk7XG4gICAgfSwgW2lzUHJlc2VudF0pO1xuICAgIC8qKlxuICAgICAqIElmIHRoZXJlJ3Mgbm8gYG1vdGlvbmAgY29tcG9uZW50cyB0byBmaXJlIGV4aXQgYW5pbWF0aW9ucywgd2Ugd2FudCB0byByZW1vdmUgdGhpc1xuICAgICAqIGNvbXBvbmVudCBpbW1lZGlhdGVseS5cbiAgICAgKi9cbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICAhaXNQcmVzZW50ICYmICFwcmVzZW5jZUNoaWxkcmVuLnNpemUgJiYgKG9uRXhpdENvbXBsZXRlID09PSBudWxsIHx8IG9uRXhpdENvbXBsZXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkV4aXRDb21wbGV0ZSgpKTtcbiAgICB9LCBbaXNQcmVzZW50XSk7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFByZXNlbmNlQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogY29udGV4dCB9LCBjaGlsZHJlbikpO1xufTtcbmZ1bmN0aW9uIG5ld0NoaWxkcmVuTWFwKCkge1xuICAgIHJldHVybiBuZXcgTWFwKCk7XG59XG5cbmV4cG9ydCB7IFByZXNlbmNlQ2hpbGQgfTtcbiIsImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5cbnZhciBMYXlvdXRHcm91cENvbnRleHQgPSBjcmVhdGVDb250ZXh0KHt9KTtcblxuZXhwb3J0IHsgTGF5b3V0R3JvdXBDb250ZXh0IH07XG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5cbmZ1bmN0aW9uIHVzZVVubW91bnRFZmZlY3QoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNhbGxiYWNrKCk7IH07IH0sIFtdKTtcbn1cblxuZXhwb3J0IHsgdXNlVW5tb3VudEVmZmVjdCB9O1xuIiwiaW1wb3J0IHsgX19yZWFkLCBfX3NwcmVhZEFycmF5IH0gZnJvbSAndHNsaWInO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlUmVmLCBjbG9uZUVsZW1lbnQsIENoaWxkcmVuLCBpc1ZhbGlkRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGVudiB9IGZyb20gJy4uLy4uL3V0aWxzL3Byb2Nlc3MubWpzJztcbmltcG9ydCB7IHVzZUZvcmNlVXBkYXRlIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXNlLWZvcmNlLXVwZGF0ZS5tanMnO1xuaW1wb3J0IHsgdXNlSXNNb3VudGVkIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXNlLWlzLW1vdW50ZWQubWpzJztcbmltcG9ydCB7IFByZXNlbmNlQ2hpbGQgfSBmcm9tICcuL1ByZXNlbmNlQ2hpbGQubWpzJztcbmltcG9ydCB7IExheW91dEdyb3VwQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvTGF5b3V0R3JvdXBDb250ZXh0Lm1qcyc7XG5pbXBvcnQgeyB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvdXNlLWlzb21vcnBoaWMtZWZmZWN0Lm1qcyc7XG5pbXBvcnQgeyB1c2VVbm1vdW50RWZmZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvdXNlLXVubW91bnQtZWZmZWN0Lm1qcyc7XG5cbnZhciBnZXRDaGlsZEtleSA9IGZ1bmN0aW9uIChjaGlsZCkgeyByZXR1cm4gY2hpbGQua2V5IHx8IFwiXCI7IH07XG5mdW5jdGlvbiB1cGRhdGVDaGlsZExvb2t1cChjaGlsZHJlbiwgYWxsQ2hpbGRyZW4pIHtcbiAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICB2YXIga2V5ID0gZ2V0Q2hpbGRLZXkoY2hpbGQpO1xuICAgICAgICBhbGxDaGlsZHJlbi5zZXQoa2V5LCBjaGlsZCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBvbmx5RWxlbWVudHMoY2hpbGRyZW4pIHtcbiAgICB2YXIgZmlsdGVyZWQgPSBbXTtcbiAgICAvLyBXZSB1c2UgZm9yRWFjaCBoZXJlIGluc3RlYWQgb2YgbWFwIGFzIG1hcCBtdXRhdGVzIHRoZSBjb21wb25lbnQga2V5IGJ5IHByZXByZW5kaW5nIGAuJGBcbiAgICBDaGlsZHJlbi5mb3JFYWNoKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KGNoaWxkKSlcbiAgICAgICAgICAgIGZpbHRlcmVkLnB1c2goY2hpbGQpO1xuICAgIH0pO1xuICAgIHJldHVybiBmaWx0ZXJlZDtcbn1cbi8qKlxuICogYEFuaW1hdGVQcmVzZW5jZWAgZW5hYmxlcyB0aGUgYW5pbWF0aW9uIG9mIGNvbXBvbmVudHMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSB0cmVlLlxuICpcbiAqIFdoZW4gYWRkaW5nL3JlbW92aW5nIG1vcmUgdGhhbiBhIHNpbmdsZSBjaGlsZCwgZXZlcnkgY2hpbGQgKiptdXN0KiogYmUgZ2l2ZW4gYSB1bmlxdWUgYGtleWAgcHJvcC5cbiAqXG4gKiBBbnkgYG1vdGlvbmAgY29tcG9uZW50cyB0aGF0IGhhdmUgYW4gYGV4aXRgIHByb3BlcnR5IGRlZmluZWQgd2lsbCBhbmltYXRlIG91dCB3aGVuIHJlbW92ZWQgZnJvbVxuICogdGhlIHRyZWUuXG4gKlxuICogYGBganN4XG4gKiBpbXBvcnQgeyBtb3Rpb24sIEFuaW1hdGVQcmVzZW5jZSB9IGZyb20gJ2ZyYW1lci1tb3Rpb24nXG4gKlxuICogZXhwb3J0IGNvbnN0IEl0ZW1zID0gKHsgaXRlbXMgfSkgPT4gKFxuICogICA8QW5pbWF0ZVByZXNlbmNlPlxuICogICAgIHtpdGVtcy5tYXAoaXRlbSA9PiAoXG4gKiAgICAgICA8bW90aW9uLmRpdlxuICogICAgICAgICBrZXk9e2l0ZW0uaWR9XG4gKiAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCB9fVxuICogICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEgfX1cbiAqICAgICAgICAgZXhpdD17eyBvcGFjaXR5OiAwIH19XG4gKiAgICAgICAvPlxuICogICAgICkpfVxuICogICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAqIClcbiAqIGBgYFxuICpcbiAqIFlvdSBjYW4gc2VxdWVuY2UgZXhpdCBhbmltYXRpb25zIHRocm91Z2hvdXQgYSB0cmVlIHVzaW5nIHZhcmlhbnRzLlxuICpcbiAqIElmIGEgY2hpbGQgY29udGFpbnMgbXVsdGlwbGUgYG1vdGlvbmAgY29tcG9uZW50cyB3aXRoIGBleGl0YCBwcm9wcywgaXQgd2lsbCBvbmx5IHVubW91bnQgdGhlIGNoaWxkXG4gKiBvbmNlIGFsbCBgbW90aW9uYCBjb21wb25lbnRzIGhhdmUgZmluaXNoZWQgYW5pbWF0aW5nIG91dC4gTGlrZXdpc2UsIGFueSBjb21wb25lbnRzIHVzaW5nXG4gKiBgdXNlUHJlc2VuY2VgIGFsbCBuZWVkIHRvIGNhbGwgYHNhZmVUb1JlbW92ZWAuXG4gKlxuICogQHB1YmxpY1xuICovXG52YXIgQW5pbWF0ZVByZXNlbmNlID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gX2EuY2hpbGRyZW4sIGN1c3RvbSA9IF9hLmN1c3RvbSwgX2IgPSBfYS5pbml0aWFsLCBpbml0aWFsID0gX2IgPT09IHZvaWQgMCA/IHRydWUgOiBfYiwgb25FeGl0Q29tcGxldGUgPSBfYS5vbkV4aXRDb21wbGV0ZSwgZXhpdEJlZm9yZUVudGVyID0gX2EuZXhpdEJlZm9yZUVudGVyLCBfYyA9IF9hLnByZXNlbmNlQWZmZWN0c0xheW91dCwgcHJlc2VuY2VBZmZlY3RzTGF5b3V0ID0gX2MgPT09IHZvaWQgMCA/IHRydWUgOiBfYztcbiAgICAvLyBXZSB3YW50IHRvIGZvcmNlIGEgcmUtcmVuZGVyIG9uY2UgYWxsIGV4aXRpbmcgYW5pbWF0aW9ucyBoYXZlIGZpbmlzaGVkLiBXZVxuICAgIC8vIGVpdGhlciB1c2UgYSBsb2NhbCBmb3JjZVJlbmRlciBmdW5jdGlvbiwgb3Igb25lIGZyb20gYSBwYXJlbnQgY29udGV4dCBpZiBpdCBleGlzdHMuXG4gICAgdmFyIF9kID0gX19yZWFkKHVzZUZvcmNlVXBkYXRlKCksIDEpLCBmb3JjZVJlbmRlciA9IF9kWzBdO1xuICAgIHZhciBmb3JjZVJlbmRlckxheW91dEdyb3VwID0gdXNlQ29udGV4dChMYXlvdXRHcm91cENvbnRleHQpLmZvcmNlUmVuZGVyO1xuICAgIGlmIChmb3JjZVJlbmRlckxheW91dEdyb3VwKVxuICAgICAgICBmb3JjZVJlbmRlciA9IGZvcmNlUmVuZGVyTGF5b3V0R3JvdXA7XG4gICAgdmFyIGlzTW91bnRlZCA9IHVzZUlzTW91bnRlZCgpO1xuICAgIC8vIEZpbHRlciBvdXQgYW55IGNoaWxkcmVuIHRoYXQgYXJlbid0IFJlYWN0RWxlbWVudHMuIFdlIGNhbiBvbmx5IHRyYWNrIFJlYWN0RWxlbWVudHMgd2l0aCBhIHByb3BzLmtleVxuICAgIHZhciBmaWx0ZXJlZENoaWxkcmVuID0gb25seUVsZW1lbnRzKGNoaWxkcmVuKTtcbiAgICB2YXIgY2hpbGRyZW5Ub1JlbmRlciA9IGZpbHRlcmVkQ2hpbGRyZW47XG4gICAgdmFyIGV4aXRpbmcgPSBuZXcgU2V0KCk7XG4gICAgLy8gS2VlcCBhIGxpdmluZyByZWNvcmQgb2YgdGhlIGNoaWxkcmVuIHdlJ3JlIGFjdHVhbGx5IHJlbmRlcmluZyBzbyB3ZVxuICAgIC8vIGNhbiBkaWZmIHRvIGZpZ3VyZSBvdXQgd2hpY2ggYXJlIGVudGVyaW5nIGFuZCBleGl0aW5nXG4gICAgdmFyIHByZXNlbnRDaGlsZHJlbiA9IHVzZVJlZihjaGlsZHJlblRvUmVuZGVyKTtcbiAgICAvLyBBIGxvb2t1cCB0YWJsZSB0byBxdWlja2x5IHJlZmVyZW5jZSBjb21wb25lbnRzIGJ5IGtleVxuICAgIHZhciBhbGxDaGlsZHJlbiA9IHVzZVJlZihuZXcgTWFwKCkpLmN1cnJlbnQ7XG4gICAgLy8gSWYgdGhpcyBpcyB0aGUgaW5pdGlhbCBjb21wb25lbnQgcmVuZGVyLCBqdXN0IGRlYWwgd2l0aCBsb2dpYyBzdXJyb3VuZGluZyB3aGV0aGVyXG4gICAgLy8gd2UgcGxheSBvbk1vdW50IGFuaW1hdGlvbnMgb3Igbm90LlxuICAgIHZhciBpc0luaXRpYWxSZW5kZXIgPSB1c2VSZWYodHJ1ZSk7XG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlzSW5pdGlhbFJlbmRlci5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHVwZGF0ZUNoaWxkTG9va3VwKGZpbHRlcmVkQ2hpbGRyZW4sIGFsbENoaWxkcmVuKTtcbiAgICAgICAgcHJlc2VudENoaWxkcmVuLmN1cnJlbnQgPSBjaGlsZHJlblRvUmVuZGVyO1xuICAgIH0pO1xuICAgIHVzZVVubW91bnRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpc0luaXRpYWxSZW5kZXIuY3VycmVudCA9IHRydWU7XG4gICAgICAgIGFsbENoaWxkcmVuLmNsZWFyKCk7XG4gICAgICAgIGV4aXRpbmcuY2xlYXIoKTtcbiAgICB9KTtcbiAgICBpZiAoaXNJbml0aWFsUmVuZGVyLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCBjaGlsZHJlblRvUmVuZGVyLm1hcChmdW5jdGlvbiAoY2hpbGQpIHsgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFByZXNlbmNlQ2hpbGQsIHsga2V5OiBnZXRDaGlsZEtleShjaGlsZCksIGlzUHJlc2VudDogdHJ1ZSwgaW5pdGlhbDogaW5pdGlhbCA/IHVuZGVmaW5lZCA6IGZhbHNlLCBwcmVzZW5jZUFmZmVjdHNMYXlvdXQ6IHByZXNlbmNlQWZmZWN0c0xheW91dCB9LCBjaGlsZCkpOyB9KSkpO1xuICAgIH1cbiAgICAvLyBJZiB0aGlzIGlzIGEgc3Vic2VxdWVudCByZW5kZXIsIGRlYWwgd2l0aCBlbnRlcmluZyBhbmQgZXhpdGluZyBjaGlsZHJlblxuICAgIGNoaWxkcmVuVG9SZW5kZXIgPSBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoY2hpbGRyZW5Ub1JlbmRlciksIGZhbHNlKTtcbiAgICAvLyBEaWZmIHRoZSBrZXlzIG9mIHRoZSBjdXJyZW50bHktcHJlc2VudCBhbmQgdGFyZ2V0IGNoaWxkcmVuIHRvIHVwZGF0ZSBvdXJcbiAgICAvLyBleGl0aW5nIGxpc3QuXG4gICAgdmFyIHByZXNlbnRLZXlzID0gcHJlc2VudENoaWxkcmVuLmN1cnJlbnQubWFwKGdldENoaWxkS2V5KTtcbiAgICB2YXIgdGFyZ2V0S2V5cyA9IGZpbHRlcmVkQ2hpbGRyZW4ubWFwKGdldENoaWxkS2V5KTtcbiAgICAvLyBEaWZmIHRoZSBwcmVzZW50IGNoaWxkcmVuIHdpdGggb3VyIHRhcmdldCBjaGlsZHJlbiBhbmQgbWFyayB0aG9zZSB0aGF0IGFyZSBleGl0aW5nXG4gICAgdmFyIG51bVByZXNlbnQgPSBwcmVzZW50S2V5cy5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1QcmVzZW50OyBpKyspIHtcbiAgICAgICAgdmFyIGtleSA9IHByZXNlbnRLZXlzW2ldO1xuICAgICAgICBpZiAodGFyZ2V0S2V5cy5pbmRleE9mKGtleSkgPT09IC0xKSB7XG4gICAgICAgICAgICBleGl0aW5nLmFkZChrZXkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHdlIGN1cnJlbnRseSBoYXZlIGV4aXRpbmcgY2hpbGRyZW4sIGFuZCB3ZSdyZSBkZWZlcnJpbmcgcmVuZGVyaW5nIGluY29taW5nIGNoaWxkcmVuXG4gICAgLy8gdW50aWwgYWZ0ZXIgYWxsIGN1cnJlbnQgY2hpbGRyZW4gaGF2ZSBleGl0aW5nLCBlbXB0eSB0aGUgY2hpbGRyZW5Ub1JlbmRlciBhcnJheVxuICAgIGlmIChleGl0QmVmb3JlRW50ZXIgJiYgZXhpdGluZy5zaXplKSB7XG4gICAgICAgIGNoaWxkcmVuVG9SZW5kZXIgPSBbXTtcbiAgICB9XG4gICAgLy8gTG9vcCB0aHJvdWdoIGFsbCBjdXJyZW50bHkgZXhpdGluZyBjb21wb25lbnRzIGFuZCBjbG9uZSB0aGVtIHRvIG92ZXJ3cml0ZSBgYW5pbWF0ZWBcbiAgICAvLyB3aXRoIGFueSBgZXhpdGAgcHJvcCB0aGV5IG1pZ2h0IGhhdmUgZGVmaW5lZC5cbiAgICBleGl0aW5nLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAvLyBJZiB0aGlzIGNvbXBvbmVudCBpcyBhY3R1YWxseSBlbnRlcmluZyBhZ2FpbiwgZWFybHkgcmV0dXJuXG4gICAgICAgIGlmICh0YXJnZXRLZXlzLmluZGV4T2Yoa2V5KSAhPT0gLTEpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBjaGlsZCA9IGFsbENoaWxkcmVuLmdldChrZXkpO1xuICAgICAgICBpZiAoIWNoaWxkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgaW5zZXJ0aW9uSW5kZXggPSBwcmVzZW50S2V5cy5pbmRleE9mKGtleSk7XG4gICAgICAgIHZhciBvbkV4aXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBhbGxDaGlsZHJlbi5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIGV4aXRpbmcuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhpcyBjaGlsZCBmcm9tIHRoZSBwcmVzZW50IGNoaWxkcmVuXG4gICAgICAgICAgICB2YXIgcmVtb3ZlSW5kZXggPSBwcmVzZW50Q2hpbGRyZW4uY3VycmVudC5maW5kSW5kZXgoZnVuY3Rpb24gKHByZXNlbnRDaGlsZCkgeyByZXR1cm4gcHJlc2VudENoaWxkLmtleSA9PT0ga2V5OyB9KTtcbiAgICAgICAgICAgIHByZXNlbnRDaGlsZHJlbi5jdXJyZW50LnNwbGljZShyZW1vdmVJbmRleCwgMSk7XG4gICAgICAgICAgICAvLyBEZWZlciByZS1yZW5kZXJpbmcgdW50aWwgYWxsIGV4aXRpbmcgY2hpbGRyZW4gaGF2ZSBpbmRlZWQgbGVmdFxuICAgICAgICAgICAgaWYgKCFleGl0aW5nLnNpemUpIHtcbiAgICAgICAgICAgICAgICBwcmVzZW50Q2hpbGRyZW4uY3VycmVudCA9IGZpbHRlcmVkQ2hpbGRyZW47XG4gICAgICAgICAgICAgICAgaWYgKGlzTW91bnRlZC5jdXJyZW50ID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGZvcmNlUmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgb25FeGl0Q29tcGxldGUgJiYgb25FeGl0Q29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY2hpbGRyZW5Ub1JlbmRlci5zcGxpY2UoaW5zZXJ0aW9uSW5kZXgsIDAsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUHJlc2VuY2VDaGlsZCwgeyBrZXk6IGdldENoaWxkS2V5KGNoaWxkKSwgaXNQcmVzZW50OiBmYWxzZSwgb25FeGl0Q29tcGxldGU6IG9uRXhpdCwgY3VzdG9tOiBjdXN0b20sIHByZXNlbmNlQWZmZWN0c0xheW91dDogcHJlc2VuY2VBZmZlY3RzTGF5b3V0IH0sIGNoaWxkKSk7XG4gICAgfSk7XG4gICAgLy8gQWRkIGBNb3Rpb25Db250ZXh0YCBldmVuIHRvIGNoaWxkcmVuIHRoYXQgZG9uJ3QgbmVlZCBpdCB0byBlbnN1cmUgd2UncmUgcmVuZGVyaW5nXG4gICAgLy8gdGhlIHNhbWUgdHJlZSBiZXR3ZWVuIHJlbmRlcnNcbiAgICBjaGlsZHJlblRvUmVuZGVyID0gY2hpbGRyZW5Ub1JlbmRlci5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHZhciBrZXkgPSBjaGlsZC5rZXk7XG4gICAgICAgIHJldHVybiBleGl0aW5nLmhhcyhrZXkpID8gKGNoaWxkKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KFByZXNlbmNlQ2hpbGQsIHsga2V5OiBnZXRDaGlsZEtleShjaGlsZCksIGlzUHJlc2VudDogdHJ1ZSwgcHJlc2VuY2VBZmZlY3RzTGF5b3V0OiBwcmVzZW5jZUFmZmVjdHNMYXlvdXQgfSwgY2hpbGQpKTtcbiAgICB9KTtcbiAgICBpZiAoZW52ICE9PSBcInByb2R1Y3Rpb25cIiAmJlxuICAgICAgICBleGl0QmVmb3JlRW50ZXIgJiZcbiAgICAgICAgY2hpbGRyZW5Ub1JlbmRlci5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIllvdSdyZSBhdHRlbXB0aW5nIHRvIGFuaW1hdGUgbXVsdGlwbGUgY2hpbGRyZW4gd2l0aGluIEFuaW1hdGVQcmVzZW5jZSwgYnV0IGl0cyBleGl0QmVmb3JlRW50ZXIgcHJvcCBpcyBzZXQgdG8gdHJ1ZS4gVGhpcyB3aWxsIGxlYWQgdG8gb2RkIHZpc3VhbCBiZWhhdmlvdXIuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIGV4aXRpbmcuc2l6ZVxuICAgICAgICA/IGNoaWxkcmVuVG9SZW5kZXJcbiAgICAgICAgOiBjaGlsZHJlblRvUmVuZGVyLm1hcChmdW5jdGlvbiAoY2hpbGQpIHsgcmV0dXJuIGNsb25lRWxlbWVudChjaGlsZCk7IH0pKSk7XG59O1xuXG5leHBvcnQgeyBBbmltYXRlUHJlc2VuY2UgfTtcbiIsImltcG9ydCB7IF9fcmVhZCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCBzeW5jIGZyb20gJ2ZyYW1lc3luYyc7XG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VJc01vdW50ZWQgfSBmcm9tICcuL3VzZS1pcy1tb3VudGVkLm1qcyc7XG5cbmZ1bmN0aW9uIHVzZUZvcmNlVXBkYXRlKCkge1xuICAgIHZhciBpc01vdW50ZWQgPSB1c2VJc01vdW50ZWQoKTtcbiAgICB2YXIgX2EgPSBfX3JlYWQodXNlU3RhdGUoMCksIDIpLCBmb3JjZWRSZW5kZXJDb3VudCA9IF9hWzBdLCBzZXRGb3JjZWRSZW5kZXJDb3VudCA9IF9hWzFdO1xuICAgIHZhciBmb3JjZVJlbmRlciA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXNNb3VudGVkLmN1cnJlbnQgJiYgc2V0Rm9yY2VkUmVuZGVyQ291bnQoZm9yY2VkUmVuZGVyQ291bnQgKyAxKTtcbiAgICB9LCBbZm9yY2VkUmVuZGVyQ291bnRdKTtcbiAgICAvKipcbiAgICAgKiBEZWZlciB0aGlzIHRvIHRoZSBlbmQgb2YgdGhlIG5leHQgYW5pbWF0aW9uIGZyYW1lIGluIGNhc2UgdGhlcmUgYXJlIG11bHRpcGxlXG4gICAgICogc3luY2hyb25vdXMgY2FsbHMuXG4gICAgICovXG4gICAgdmFyIGRlZmVycmVkRm9yY2VSZW5kZXIgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7IHJldHVybiBzeW5jLnBvc3RSZW5kZXIoZm9yY2VSZW5kZXIpOyB9LCBbZm9yY2VSZW5kZXJdKTtcbiAgICByZXR1cm4gW2RlZmVycmVkRm9yY2VSZW5kZXIsIGZvcmNlZFJlbmRlckNvdW50XTtcbn1cblxuZXhwb3J0IHsgdXNlRm9yY2VVcGRhdGUgfTtcbiIsInZhciBjcmVhdGVEZWZpbml0aW9uID0gZnVuY3Rpb24gKHByb3BOYW1lcykgeyByZXR1cm4gKHtcbiAgICBpc0VuYWJsZWQ6IGZ1bmN0aW9uIChwcm9wcykgeyByZXR1cm4gcHJvcE5hbWVzLnNvbWUoZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuICEhcHJvcHNbbmFtZV07IH0pOyB9LFxufSk7IH07XG52YXIgZmVhdHVyZURlZmluaXRpb25zID0ge1xuICAgIG1lYXN1cmVMYXlvdXQ6IGNyZWF0ZURlZmluaXRpb24oW1wibGF5b3V0XCIsIFwibGF5b3V0SWRcIiwgXCJkcmFnXCJdKSxcbiAgICBhbmltYXRpb246IGNyZWF0ZURlZmluaXRpb24oW1xuICAgICAgICBcImFuaW1hdGVcIixcbiAgICAgICAgXCJleGl0XCIsXG4gICAgICAgIFwidmFyaWFudHNcIixcbiAgICAgICAgXCJ3aGlsZUhvdmVyXCIsXG4gICAgICAgIFwid2hpbGVUYXBcIixcbiAgICAgICAgXCJ3aGlsZUZvY3VzXCIsXG4gICAgICAgIFwid2hpbGVEcmFnXCIsXG4gICAgICAgIFwid2hpbGVJblZpZXdcIixcbiAgICBdKSxcbiAgICBleGl0OiBjcmVhdGVEZWZpbml0aW9uKFtcImV4aXRcIl0pLFxuICAgIGRyYWc6IGNyZWF0ZURlZmluaXRpb24oW1wiZHJhZ1wiLCBcImRyYWdDb250cm9sc1wiXSksXG4gICAgZm9jdXM6IGNyZWF0ZURlZmluaXRpb24oW1wid2hpbGVGb2N1c1wiXSksXG4gICAgaG92ZXI6IGNyZWF0ZURlZmluaXRpb24oW1wid2hpbGVIb3ZlclwiLCBcIm9uSG92ZXJTdGFydFwiLCBcIm9uSG92ZXJFbmRcIl0pLFxuICAgIHRhcDogY3JlYXRlRGVmaW5pdGlvbihbXCJ3aGlsZVRhcFwiLCBcIm9uVGFwXCIsIFwib25UYXBTdGFydFwiLCBcIm9uVGFwQ2FuY2VsXCJdKSxcbiAgICBwYW46IGNyZWF0ZURlZmluaXRpb24oW1xuICAgICAgICBcIm9uUGFuXCIsXG4gICAgICAgIFwib25QYW5TdGFydFwiLFxuICAgICAgICBcIm9uUGFuU2Vzc2lvblN0YXJ0XCIsXG4gICAgICAgIFwib25QYW5FbmRcIixcbiAgICBdKSxcbiAgICBpblZpZXc6IGNyZWF0ZURlZmluaXRpb24oW1xuICAgICAgICBcIndoaWxlSW5WaWV3XCIsXG4gICAgICAgIFwib25WaWV3cG9ydEVudGVyXCIsXG4gICAgICAgIFwib25WaWV3cG9ydExlYXZlXCIsXG4gICAgXSksXG59O1xuZnVuY3Rpb24gbG9hZEZlYXR1cmVzKGZlYXR1cmVzKSB7XG4gICAgZm9yICh2YXIga2V5IGluIGZlYXR1cmVzKSB7XG4gICAgICAgIGlmIChmZWF0dXJlc1trZXldID09PSBudWxsKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmIChrZXkgPT09IFwicHJvamVjdGlvbk5vZGVDb25zdHJ1Y3RvclwiKSB7XG4gICAgICAgICAgICBmZWF0dXJlRGVmaW5pdGlvbnMucHJvamVjdGlvbk5vZGVDb25zdHJ1Y3RvciA9IGZlYXR1cmVzW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmZWF0dXJlRGVmaW5pdGlvbnNba2V5XS5Db21wb25lbnQgPSBmZWF0dXJlc1trZXldO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgeyBmZWF0dXJlRGVmaW5pdGlvbnMsIGxvYWRGZWF0dXJlcyB9O1xuIiwidmFyIHdhcm5pbmcgPSBmdW5jdGlvbiAoKSB7IH07XHJcbnZhciBpbnZhcmlhbnQgPSBmdW5jdGlvbiAoKSB7IH07XHJcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICB3YXJuaW5nID0gZnVuY3Rpb24gKGNoZWNrLCBtZXNzYWdlKSB7XHJcbiAgICAgICAgaWYgKCFjaGVjayAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBpbnZhcmlhbnQgPSBmdW5jdGlvbiAoY2hlY2ssIG1lc3NhZ2UpIHtcclxuICAgICAgICBpZiAoIWNoZWNrKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XG5cbmV4cG9ydCB7IGludmFyaWFudCwgd2FybmluZyB9O1xuIiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcblxudmFyIExhenlDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7IHN0cmljdDogZmFsc2UgfSk7XG5cbmV4cG9ydCB7IExhenlDb250ZXh0IH07XG4iLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gJ3RzbGliJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBlbnYgfSBmcm9tICcuLi8uLi91dGlscy9wcm9jZXNzLm1qcyc7XG5pbXBvcnQgeyBmZWF0dXJlRGVmaW5pdGlvbnMgfSBmcm9tICcuL2RlZmluaXRpb25zLm1qcyc7XG5pbXBvcnQgeyBpbnZhcmlhbnQgfSBmcm9tICdoZXktbGlzdGVuJztcbmltcG9ydCB7IExhenlDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9MYXp5Q29udGV4dC5tanMnO1xuXG52YXIgZmVhdHVyZU5hbWVzID0gT2JqZWN0LmtleXMoZmVhdHVyZURlZmluaXRpb25zKTtcbnZhciBudW1GZWF0dXJlcyA9IGZlYXR1cmVOYW1lcy5sZW5ndGg7XG4vKipcbiAqIExvYWQgZmVhdHVyZXMgdmlhIHJlbmRlcmxlc3MgY29tcG9uZW50cyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgTW90aW9uUHJvcHMuXG4gKi9cbmZ1bmN0aW9uIHVzZUZlYXR1cmVzKHByb3BzLCB2aXN1YWxFbGVtZW50LCBwcmVsb2FkZWRGZWF0dXJlcykge1xuICAgIHZhciBmZWF0dXJlcyA9IFtdO1xuICAgIHZhciBsYXp5Q29udGV4dCA9IHVzZUNvbnRleHQoTGF6eUNvbnRleHQpO1xuICAgIGlmICghdmlzdWFsRWxlbWVudClcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgLyoqXG4gICAgICogSWYgd2UncmUgaW4gZGV2ZWxvcG1lbnQgbW9kZSwgY2hlY2sgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCByZW5kZXJpbmcgYSBtb3Rpb24gY29tcG9uZW50XG4gICAgICogYXMgYSBjaGlsZCBvZiBMYXp5TW90aW9uLCBhcyB0aGlzIHdpbGwgYnJlYWsgdGhlIGZpbGUtc2l6ZSBiZW5lZml0cyBvZiB1c2luZyBpdC5cbiAgICAgKi9cbiAgICBpZiAoZW52ICE9PSBcInByb2R1Y3Rpb25cIiAmJiBwcmVsb2FkZWRGZWF0dXJlcyAmJiBsYXp5Q29udGV4dC5zdHJpY3QpIHtcbiAgICAgICAgaW52YXJpYW50KGZhbHNlLCBcIllvdSBoYXZlIHJlbmRlcmVkIGEgYG1vdGlvbmAgY29tcG9uZW50IHdpdGhpbiBhIGBMYXp5TW90aW9uYCBjb21wb25lbnQuIFRoaXMgd2lsbCBicmVhayB0cmVlIHNoYWtpbmcuIEltcG9ydCBhbmQgcmVuZGVyIGEgYG1gIGNvbXBvbmVudCBpbnN0ZWFkLlwiKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1GZWF0dXJlczsgaSsrKSB7XG4gICAgICAgIHZhciBuYW1lXzEgPSBmZWF0dXJlTmFtZXNbaV07XG4gICAgICAgIHZhciBfYSA9IGZlYXR1cmVEZWZpbml0aW9uc1tuYW1lXzFdLCBpc0VuYWJsZWQgPSBfYS5pc0VuYWJsZWQsIENvbXBvbmVudCA9IF9hLkNvbXBvbmVudDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEl0IG1pZ2h0IGJlIHBvc3NpYmxlIGluIHRoZSBmdXR1cmUgdG8gdXNlIHRoaXMgbW9tZW50IHRvXG4gICAgICAgICAqIGR5bmFtaWNhbGx5IHJlcXVlc3QgZnVuY3Rpb25hbGl0eS4gSW4gaW5pdGlhbCB0ZXN0cyB0aGlzXG4gICAgICAgICAqIHdhcyBwcm9kdWNpbmcgYSBsb3Qgb2YgZHVwbGljYXRpb24gYW1vbmdzdCBidW5kbGVzLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKGlzRW5hYmxlZChwcm9wcykgJiYgQ29tcG9uZW50KSB7XG4gICAgICAgICAgICBmZWF0dXJlcy5wdXNoKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfX2Fzc2lnbih7IGtleTogbmFtZV8xIH0sIHByb3BzLCB7IHZpc3VhbEVsZW1lbnQ6IHZpc3VhbEVsZW1lbnQgfSkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmVhdHVyZXM7XG59XG5cbmV4cG9ydCB7IHVzZUZlYXR1cmVzIH07XG4iLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xudmFyIE1vdGlvbkNvbmZpZ0NvbnRleHQgPSBjcmVhdGVDb250ZXh0KHtcbiAgICB0cmFuc2Zvcm1QYWdlUG9pbnQ6IGZ1bmN0aW9uIChwKSB7IHJldHVybiBwOyB9LFxuICAgIGlzU3RhdGljOiBmYWxzZSxcbiAgICByZWR1Y2VkTW90aW9uOiBcIm5ldmVyXCIsXG59KTtcblxuZXhwb3J0IHsgTW90aW9uQ29uZmlnQ29udGV4dCB9O1xuIiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcblxudmFyIE1vdGlvbkNvbnRleHQgPSBjcmVhdGVDb250ZXh0KHt9KTtcbmZ1bmN0aW9uIHVzZVZpc3VhbEVsZW1lbnRDb250ZXh0KCkge1xuICAgIHJldHVybiB1c2VDb250ZXh0KE1vdGlvbkNvbnRleHQpLnZpc3VhbEVsZW1lbnQ7XG59XG5cbmV4cG9ydCB7IE1vdGlvbkNvbnRleHQsIHVzZVZpc3VhbEVsZW1lbnRDb250ZXh0IH07XG4iLCJpbXBvcnQgeyBfX3JlYWQgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE1vdGlvbkNvbmZpZ0NvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0L01vdGlvbkNvbmZpZ0NvbnRleHQubWpzJztcbmltcG9ydCB7IGlzQnJvd3NlciB9IGZyb20gJy4vaXMtYnJvd3Nlci5tanMnO1xuXG4vLyBEb2VzIHRoaXMgZGV2aWNlIHByZWZlciByZWR1Y2VkIG1vdGlvbj8gUmV0dXJucyBgbnVsbGAgc2VydmVyLXNpZGUuXG52YXIgcHJlZmVyc1JlZHVjZWRNb3Rpb24gPSB7IGN1cnJlbnQ6IG51bGwgfTtcbnZhciBoYXNEZXRlY3RlZCA9IGZhbHNlO1xuZnVuY3Rpb24gaW5pdFByZWZlcnNSZWR1Y2VkTW90aW9uKCkge1xuICAgIGhhc0RldGVjdGVkID0gdHJ1ZTtcbiAgICBpZiAoIWlzQnJvd3NlcilcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmICh3aW5kb3cubWF0Y2hNZWRpYSkge1xuICAgICAgICB2YXIgbW90aW9uTWVkaWFRdWVyeV8xID0gd2luZG93Lm1hdGNoTWVkaWEoXCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbilcIik7XG4gICAgICAgIHZhciBzZXRSZWR1Y2VkTW90aW9uUHJlZmVyZW5jZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKHByZWZlcnNSZWR1Y2VkTW90aW9uLmN1cnJlbnQgPSBtb3Rpb25NZWRpYVF1ZXJ5XzEubWF0Y2hlcyk7XG4gICAgICAgIH07XG4gICAgICAgIG1vdGlvbk1lZGlhUXVlcnlfMS5hZGRMaXN0ZW5lcihzZXRSZWR1Y2VkTW90aW9uUHJlZmVyZW5jZXMpO1xuICAgICAgICBzZXRSZWR1Y2VkTW90aW9uUHJlZmVyZW5jZXMoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHByZWZlcnNSZWR1Y2VkTW90aW9uLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG59XG4vKipcbiAqIEEgaG9vayB0aGF0IHJldHVybnMgYHRydWVgIGlmIHdlIHNob3VsZCBiZSB1c2luZyByZWR1Y2VkIG1vdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCBkZXZpY2UncyBSZWR1Y2VkIE1vdGlvbiBzZXR0aW5nLlxuICpcbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IGNoYW5nZXMgdG8geW91ciBVSSBiYXNlZCBvbiBSZWR1Y2VkIE1vdGlvbi4gRm9yIGluc3RhbmNlLCByZXBsYWNpbmcgbW90aW9uLXNpY2tuZXNzIGluZHVjaW5nXG4gKiBgeGAvYHlgIGFuaW1hdGlvbnMgd2l0aCBgb3BhY2l0eWAsIGRpc2FibGluZyB0aGUgYXV0b3BsYXkgb2YgYmFja2dyb3VuZCB2aWRlb3MsIG9yIHR1cm5pbmcgb2ZmIHBhcmFsbGF4IG1vdGlvbi5cbiAqXG4gKiBJdCB3aWxsIGFjdGl2ZWx5IHJlc3BvbmQgdG8gY2hhbmdlcyBhbmQgcmUtcmVuZGVyIHlvdXIgY29tcG9uZW50cyB3aXRoIHRoZSBsYXRlc3Qgc2V0dGluZy5cbiAqXG4gKiBgYGBqc3hcbiAqIGV4cG9ydCBmdW5jdGlvbiBTaWRlYmFyKHsgaXNPcGVuIH0pIHtcbiAqICAgY29uc3Qgc2hvdWxkUmVkdWNlTW90aW9uID0gdXNlUmVkdWNlZE1vdGlvbigpXG4gKiAgIGNvbnN0IGNsb3NlZFggPSBzaG91bGRSZWR1Y2VNb3Rpb24gPyAwIDogXCItMTAwJVwiXG4gKlxuICogICByZXR1cm4gKFxuICogICAgIDxtb3Rpb24uZGl2IGFuaW1hdGU9e3tcbiAqICAgICAgIG9wYWNpdHk6IGlzT3BlbiA/IDEgOiAwLFxuICogICAgICAgeDogaXNPcGVuID8gMCA6IGNsb3NlZFhcbiAqICAgICB9fSAvPlxuICogICApXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJuIGJvb2xlYW5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIHVzZVJlZHVjZWRNb3Rpb24oKSB7XG4gICAgLyoqXG4gICAgICogTGF6eSBpbml0aWFsaXNhdGlvbiBvZiBwcmVmZXJzUmVkdWNlZE1vdGlvblxuICAgICAqL1xuICAgICFoYXNEZXRlY3RlZCAmJiBpbml0UHJlZmVyc1JlZHVjZWRNb3Rpb24oKTtcbiAgICB2YXIgX2EgPSBfX3JlYWQodXNlU3RhdGUocHJlZmVyc1JlZHVjZWRNb3Rpb24uY3VycmVudCksIDEpLCBzaG91bGRSZWR1Y2VNb3Rpb24gPSBfYVswXTtcbiAgICAvKipcbiAgICAgKiBUT0RPIFNlZSBpZiBwZW9wbGUgbWlzcyBhdXRvbWF0aWNhbGx5IHVwZGF0aW5nIHNob3VsZFJlZHVjZU1vdGlvbiBzZXR0aW5nXG4gICAgICovXG4gICAgcmV0dXJuIHNob3VsZFJlZHVjZU1vdGlvbjtcbn1cbmZ1bmN0aW9uIHVzZVJlZHVjZWRNb3Rpb25Db25maWcoKSB7XG4gICAgdmFyIHJlZHVjZWRNb3Rpb25QcmVmZXJlbmNlID0gdXNlUmVkdWNlZE1vdGlvbigpO1xuICAgIHZhciByZWR1Y2VkTW90aW9uID0gdXNlQ29udGV4dChNb3Rpb25Db25maWdDb250ZXh0KS5yZWR1Y2VkTW90aW9uO1xuICAgIGlmIChyZWR1Y2VkTW90aW9uID09PSBcIm5ldmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmIChyZWR1Y2VkTW90aW9uID09PSBcImFsd2F5c1wiKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlZHVjZWRNb3Rpb25QcmVmZXJlbmNlO1xuICAgIH1cbn1cblxuZXhwb3J0IHsgdXNlUmVkdWNlZE1vdGlvbiwgdXNlUmVkdWNlZE1vdGlvbkNvbmZpZyB9O1xuIiwiaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlUmVmLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBQcmVzZW5jZUNvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L1ByZXNlbmNlQ29udGV4dC5tanMnO1xuaW1wb3J0IHsgdXNlVmlzdWFsRWxlbWVudENvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L01vdGlvbkNvbnRleHQvaW5kZXgubWpzJztcbmltcG9ydCB7IHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgfSBmcm9tICcuLi8uLi91dGlscy91c2UtaXNvbW9ycGhpYy1lZmZlY3QubWpzJztcbmltcG9ydCB7IExhenlDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9MYXp5Q29udGV4dC5tanMnO1xuaW1wb3J0IHsgdXNlUmVkdWNlZE1vdGlvbkNvbmZpZyB9IGZyb20gJy4uLy4uL3V0aWxzL3VzZS1yZWR1Y2VkLW1vdGlvbi5tanMnO1xuXG5mdW5jdGlvbiB1c2VWaXN1YWxFbGVtZW50KENvbXBvbmVudCwgdmlzdWFsU3RhdGUsIHByb3BzLCBjcmVhdGVWaXN1YWxFbGVtZW50KSB7XG4gICAgdmFyIGxhenlDb250ZXh0ID0gdXNlQ29udGV4dChMYXp5Q29udGV4dCk7XG4gICAgdmFyIHBhcmVudCA9IHVzZVZpc3VhbEVsZW1lbnRDb250ZXh0KCk7XG4gICAgdmFyIHByZXNlbmNlQ29udGV4dCA9IHVzZUNvbnRleHQoUHJlc2VuY2VDb250ZXh0KTtcbiAgICB2YXIgc2hvdWxkUmVkdWNlTW90aW9uID0gdXNlUmVkdWNlZE1vdGlvbkNvbmZpZygpO1xuICAgIHZhciB2aXN1YWxFbGVtZW50UmVmID0gdXNlUmVmKHVuZGVmaW5lZCk7XG4gICAgLyoqXG4gICAgICogSWYgd2UgaGF2ZW4ndCBwcmVsb2FkZWQgYSByZW5kZXJlciwgY2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgb25lIGxhenktbG9hZGVkXG4gICAgICovXG4gICAgaWYgKCFjcmVhdGVWaXN1YWxFbGVtZW50KVxuICAgICAgICBjcmVhdGVWaXN1YWxFbGVtZW50ID0gbGF6eUNvbnRleHQucmVuZGVyZXI7XG4gICAgaWYgKCF2aXN1YWxFbGVtZW50UmVmLmN1cnJlbnQgJiYgY3JlYXRlVmlzdWFsRWxlbWVudCkge1xuICAgICAgICB2aXN1YWxFbGVtZW50UmVmLmN1cnJlbnQgPSBjcmVhdGVWaXN1YWxFbGVtZW50KENvbXBvbmVudCwge1xuICAgICAgICAgICAgdmlzdWFsU3RhdGU6IHZpc3VhbFN0YXRlLFxuICAgICAgICAgICAgcGFyZW50OiBwYXJlbnQsXG4gICAgICAgICAgICBwcm9wczogcHJvcHMsXG4gICAgICAgICAgICBwcmVzZW5jZUlkOiBwcmVzZW5jZUNvbnRleHQgPT09IG51bGwgfHwgcHJlc2VuY2VDb250ZXh0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcmVzZW5jZUNvbnRleHQuaWQsXG4gICAgICAgICAgICBibG9ja0luaXRpYWxBbmltYXRpb246IChwcmVzZW5jZUNvbnRleHQgPT09IG51bGwgfHwgcHJlc2VuY2VDb250ZXh0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcmVzZW5jZUNvbnRleHQuaW5pdGlhbCkgPT09IGZhbHNlLFxuICAgICAgICAgICAgc2hvdWxkUmVkdWNlTW90aW9uOiBzaG91bGRSZWR1Y2VNb3Rpb24sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB2YXIgdmlzdWFsRWxlbWVudCA9IHZpc3VhbEVsZW1lbnRSZWYuY3VycmVudDtcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmlzdWFsRWxlbWVudCA9PT0gbnVsbCB8fCB2aXN1YWxFbGVtZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2aXN1YWxFbGVtZW50LnN5bmNSZW5kZXIoKTtcbiAgICB9KTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIChfYSA9IHZpc3VhbEVsZW1lbnQgPT09IG51bGwgfHwgdmlzdWFsRWxlbWVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFuaW1hdGVDaGFuZ2VzKCk7XG4gICAgfSk7XG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiB2aXN1YWxFbGVtZW50ID09PSBudWxsIHx8IHZpc3VhbEVsZW1lbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZpc3VhbEVsZW1lbnQubm90aWZ5VW5tb3VudCgpOyB9OyB9LCBbXSk7XG4gICAgcmV0dXJuIHZpc3VhbEVsZW1lbnQ7XG59XG5cbmV4cG9ydCB7IHVzZVZpc3VhbEVsZW1lbnQgfTtcbiIsImZ1bmN0aW9uIGlzUmVmT2JqZWN0KHJlZikge1xuICAgIHJldHVybiAodHlwZW9mIHJlZiA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVmLCBcImN1cnJlbnRcIikpO1xufVxuXG5leHBvcnQgeyBpc1JlZk9iamVjdCB9O1xuIiwiLyoqXG4gKiBEZWNpZGVzIGlmIHRoZSBzdXBwbGllZCB2YXJpYWJsZSBpcyBhbiBhcnJheSBvZiB2YXJpYW50IGxhYmVsc1xuICovXG5mdW5jdGlvbiBpc1ZhcmlhbnRMYWJlbHModikge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHYpO1xufVxuLyoqXG4gKiBEZWNpZGVzIGlmIHRoZSBzdXBwbGllZCB2YXJpYWJsZSBpcyB2YXJpYW50IGxhYmVsXG4gKi9cbmZ1bmN0aW9uIGlzVmFyaWFudExhYmVsKHYpIHtcbiAgICByZXR1cm4gdHlwZW9mIHYgPT09IFwic3RyaW5nXCIgfHwgaXNWYXJpYW50TGFiZWxzKHYpO1xufVxuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBsYXRlc3Qgc3RhdGUgb2YgZXZlcnkgTW90aW9uVmFsdWUgb24gYSBWaXN1YWxFbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGdldEN1cnJlbnQodmlzdWFsRWxlbWVudCkge1xuICAgIHZhciBjdXJyZW50ID0ge307XG4gICAgdmlzdWFsRWxlbWVudC5mb3JFYWNoVmFsdWUoZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHsgcmV0dXJuIChjdXJyZW50W2tleV0gPSB2YWx1ZS5nZXQoKSk7IH0pO1xuICAgIHJldHVybiBjdXJyZW50O1xufVxuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBsYXRlc3QgdmVsb2NpdHkgb2YgZXZlcnkgTW90aW9uVmFsdWUgb24gYSBWaXN1YWxFbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGdldFZlbG9jaXR5KHZpc3VhbEVsZW1lbnQpIHtcbiAgICB2YXIgdmVsb2NpdHkgPSB7fTtcbiAgICB2aXN1YWxFbGVtZW50LmZvckVhY2hWYWx1ZShmdW5jdGlvbiAodmFsdWUsIGtleSkgeyByZXR1cm4gKHZlbG9jaXR5W2tleV0gPSB2YWx1ZS5nZXRWZWxvY2l0eSgpKTsgfSk7XG4gICAgcmV0dXJuIHZlbG9jaXR5O1xufVxuZnVuY3Rpb24gcmVzb2x2ZVZhcmlhbnRGcm9tUHJvcHMocHJvcHMsIGRlZmluaXRpb24sIGN1c3RvbSwgY3VycmVudFZhbHVlcywgY3VycmVudFZlbG9jaXR5KSB7XG4gICAgdmFyIF9hO1xuICAgIGlmIChjdXJyZW50VmFsdWVzID09PSB2b2lkIDApIHsgY3VycmVudFZhbHVlcyA9IHt9OyB9XG4gICAgaWYgKGN1cnJlbnRWZWxvY2l0eSA9PT0gdm9pZCAwKSB7IGN1cnJlbnRWZWxvY2l0eSA9IHt9OyB9XG4gICAgLyoqXG4gICAgICogSWYgdGhlIHZhcmlhbnQgZGVmaW5pdGlvbiBpcyBhIGZ1bmN0aW9uLCByZXNvbHZlLlxuICAgICAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5pdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGRlZmluaXRpb24gPSBkZWZpbml0aW9uKGN1c3RvbSAhPT0gbnVsbCAmJiBjdXN0b20gIT09IHZvaWQgMCA/IGN1c3RvbSA6IHByb3BzLmN1c3RvbSwgY3VycmVudFZhbHVlcywgY3VycmVudFZlbG9jaXR5KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgdGhlIHZhcmlhbnQgZGVmaW5pdGlvbiBpcyBhIHZhcmlhbnQgbGFiZWwsIG9yXG4gICAgICogdGhlIGZ1bmN0aW9uIHJldHVybmVkIGEgdmFyaWFudCBsYWJlbCwgcmVzb2x2ZS5cbiAgICAgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluaXRpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgZGVmaW5pdGlvbiA9IChfYSA9IHByb3BzLnZhcmlhbnRzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbZGVmaW5pdGlvbl07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEF0IHRoaXMgcG9pbnQgd2UndmUgcmVzb2x2ZWQgYm90aCBmdW5jdGlvbnMgYW5kIHZhcmlhbnQgbGFiZWxzLFxuICAgICAqIGJ1dCB0aGUgcmVzb2x2ZWQgdmFyaWFudCBsYWJlbCBtaWdodCBpdHNlbGYgaGF2ZSBiZWVuIGEgZnVuY3Rpb24uXG4gICAgICogSWYgc28sIHJlc29sdmUuIFRoaXMgY2FuIG9ubHkgaGF2ZSByZXR1cm5lZCBhIHZhbGlkIHRhcmdldCBvYmplY3QuXG4gICAgICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbml0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZGVmaW5pdGlvbiA9IGRlZmluaXRpb24oY3VzdG9tICE9PSBudWxsICYmIGN1c3RvbSAhPT0gdm9pZCAwID8gY3VzdG9tIDogcHJvcHMuY3VzdG9tLCBjdXJyZW50VmFsdWVzLCBjdXJyZW50VmVsb2NpdHkpO1xuICAgIH1cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbn1cbmZ1bmN0aW9uIHJlc29sdmVWYXJpYW50KHZpc3VhbEVsZW1lbnQsIGRlZmluaXRpb24sIGN1c3RvbSkge1xuICAgIHZhciBwcm9wcyA9IHZpc3VhbEVsZW1lbnQuZ2V0UHJvcHMoKTtcbiAgICByZXR1cm4gcmVzb2x2ZVZhcmlhbnRGcm9tUHJvcHMocHJvcHMsIGRlZmluaXRpb24sIGN1c3RvbSAhPT0gbnVsbCAmJiBjdXN0b20gIT09IHZvaWQgMCA/IGN1c3RvbSA6IHByb3BzLmN1c3RvbSwgZ2V0Q3VycmVudCh2aXN1YWxFbGVtZW50KSwgZ2V0VmVsb2NpdHkodmlzdWFsRWxlbWVudCkpO1xufVxuZnVuY3Rpb24gY2hlY2tJZkNvbnRyb2xsaW5nVmFyaWFudHMocHJvcHMpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuICh0eXBlb2YgKChfYSA9IHByb3BzLmFuaW1hdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdGFydCkgPT09IFwiZnVuY3Rpb25cIiB8fFxuICAgICAgICBpc1ZhcmlhbnRMYWJlbChwcm9wcy5pbml0aWFsKSB8fFxuICAgICAgICBpc1ZhcmlhbnRMYWJlbChwcm9wcy5hbmltYXRlKSB8fFxuICAgICAgICBpc1ZhcmlhbnRMYWJlbChwcm9wcy53aGlsZUhvdmVyKSB8fFxuICAgICAgICBpc1ZhcmlhbnRMYWJlbChwcm9wcy53aGlsZURyYWcpIHx8XG4gICAgICAgIGlzVmFyaWFudExhYmVsKHByb3BzLndoaWxlVGFwKSB8fFxuICAgICAgICBpc1ZhcmlhbnRMYWJlbChwcm9wcy53aGlsZUZvY3VzKSB8fFxuICAgICAgICBpc1ZhcmlhbnRMYWJlbChwcm9wcy5leGl0KSk7XG59XG5mdW5jdGlvbiBjaGVja0lmVmFyaWFudE5vZGUocHJvcHMpIHtcbiAgICByZXR1cm4gQm9vbGVhbihjaGVja0lmQ29udHJvbGxpbmdWYXJpYW50cyhwcm9wcykgfHwgcHJvcHMudmFyaWFudHMpO1xufVxuXG5leHBvcnQgeyBjaGVja0lmQ29udHJvbGxpbmdWYXJpYW50cywgY2hlY2tJZlZhcmlhbnROb2RlLCBpc1ZhcmlhbnRMYWJlbCwgaXNWYXJpYW50TGFiZWxzLCByZXNvbHZlVmFyaWFudCwgcmVzb2x2ZVZhcmlhbnRGcm9tUHJvcHMgfTtcbiIsImltcG9ydCB7IHVzZU1lbW8sIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBNb3Rpb25Db250ZXh0IH0gZnJvbSAnLi9pbmRleC5tanMnO1xuaW1wb3J0IHsgZ2V0Q3VycmVudFRyZWVWYXJpYW50cyB9IGZyb20gJy4vdXRpbHMubWpzJztcblxuZnVuY3Rpb24gdXNlQ3JlYXRlTW90aW9uQ29udGV4dChwcm9wcykge1xuICAgIHZhciBfYSA9IGdldEN1cnJlbnRUcmVlVmFyaWFudHMocHJvcHMsIHVzZUNvbnRleHQoTW90aW9uQ29udGV4dCkpLCBpbml0aWFsID0gX2EuaW5pdGlhbCwgYW5pbWF0ZSA9IF9hLmFuaW1hdGU7XG4gICAgcmV0dXJuIHVzZU1lbW8oZnVuY3Rpb24gKCkgeyByZXR1cm4gKHsgaW5pdGlhbDogaW5pdGlhbCwgYW5pbWF0ZTogYW5pbWF0ZSB9KTsgfSwgW3ZhcmlhbnRMYWJlbHNBc0RlcGVuZGVuY3koaW5pdGlhbCksIHZhcmlhbnRMYWJlbHNBc0RlcGVuZGVuY3koYW5pbWF0ZSldKTtcbn1cbmZ1bmN0aW9uIHZhcmlhbnRMYWJlbHNBc0RlcGVuZGVuY3kocHJvcCkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHByb3ApID8gcHJvcC5qb2luKFwiIFwiKSA6IHByb3A7XG59XG5cbmV4cG9ydCB7IHVzZUNyZWF0ZU1vdGlvbkNvbnRleHQgfTtcbiIsIi8qKlxuICogVGhpcyBzaG91bGQgb25seSBldmVyIGJlIG1vZGlmaWVkIG9uIHRoZSBjbGllbnQgb3RoZXJ3aXNlIGl0J2xsXG4gKiBwZXJzaXN0IHRocm91Z2ggc2VydmVyIHJlcXVlc3RzLiBJZiB3ZSBuZWVkIGluc3RhbmNlZCBzdGF0ZXMgd2VcbiAqIGNvdWxkIGxhenktaW5pdCB2aWEgcm9vdC5cbiAqL1xudmFyIGdsb2JhbFByb2plY3Rpb25TdGF0ZSA9IHtcbiAgICAvKipcbiAgICAgKiBHbG9iYWwgZmxhZyBhcyB0byB3aGV0aGVyIHRoZSB0cmVlIGhhcyBhbmltYXRlZCBzaW5jZSB0aGUgbGFzdCB0aW1lXG4gICAgICogd2UgcmVzaXplZCB0aGUgd2luZG93XG4gICAgICovXG4gICAgaGFzQW5pbWF0ZWRTaW5jZVJlc2l6ZTogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBXZSBzZXQgdGhpcyB0byB0cnVlIG9uY2UsIG9uIHRoZSBmaXJzdCB1cGRhdGUuIEFueSBub2RlcyBhZGRlZCB0byB0aGUgdHJlZSBiZXlvbmQgdGhhdFxuICAgICAqIHVwZGF0ZSB3aWxsIGJlIGdpdmVuIGEgYGRhdGEtcHJvamVjdGlvbi1pZGAgYXR0cmlidXRlLlxuICAgICAqL1xuICAgIGhhc0V2ZXJVcGRhdGVkOiBmYWxzZSxcbn07XG5cbmV4cG9ydCB7IGdsb2JhbFByb2plY3Rpb25TdGF0ZSB9O1xuIiwiaW1wb3J0IHsgdXNlQ29uc3RhbnQgfSBmcm9tICcuLi8uLi91dGlscy91c2UtY29uc3RhbnQubWpzJztcbmltcG9ydCB7IGdsb2JhbFByb2plY3Rpb25TdGF0ZSB9IGZyb20gJy4vc3RhdGUubWpzJztcblxudmFyIGlkID0gMTtcbmZ1bmN0aW9uIHVzZVByb2plY3Rpb25JZCgpIHtcbiAgICByZXR1cm4gdXNlQ29uc3RhbnQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoZ2xvYmFsUHJvamVjdGlvblN0YXRlLmhhc0V2ZXJVcGRhdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gaWQrKztcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5leHBvcnQgeyB1c2VQcm9qZWN0aW9uSWQgfTtcbiIsImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogSW50ZXJuYWwsIGV4cG9ydGVkIG9ubHkgZm9yIHVzYWdlIGluIEZyYW1lclxuICovXG52YXIgU3dpdGNoTGF5b3V0R3JvdXBDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7fSk7XG5cbmV4cG9ydCB7IFN3aXRjaExheW91dEdyb3VwQ29udGV4dCB9O1xuIiwiaW1wb3J0IHsgX19leHRlbmRzIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IFJlYWN0X19kZWZhdWx0IGZyb20gJ3JlYWN0JztcblxudmFyIFZpc3VhbEVsZW1lbnRIYW5kbGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhWaXN1YWxFbGVtZW50SGFuZGxlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBWaXN1YWxFbGVtZW50SGFuZGxlcigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgdmlzdWFsIGVsZW1lbnQgcHJvcHMgYXMgc29vbiBhcyB3ZSBrbm93IHRoaXMgdXBkYXRlIGlzIGdvaW5nIHRvIGJlIGNvbW1pdGVkLlxuICAgICAqL1xuICAgIFZpc3VhbEVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQcm9wcygpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIFZpc3VhbEVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgVmlzdWFsRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLnVwZGF0ZVByb3BzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLnByb3BzLCB2aXN1YWxFbGVtZW50ID0gX2EudmlzdWFsRWxlbWVudCwgcHJvcHMgPSBfYS5wcm9wcztcbiAgICAgICAgaWYgKHZpc3VhbEVsZW1lbnQpXG4gICAgICAgICAgICB2aXN1YWxFbGVtZW50LnNldFByb3BzKHByb3BzKTtcbiAgICB9O1xuICAgIFZpc3VhbEVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIH07XG4gICAgcmV0dXJuIFZpc3VhbEVsZW1lbnRIYW5kbGVyO1xufShSZWFjdF9fZGVmYXVsdC5Db21wb25lbnQpKTtcblxuZXhwb3J0IHsgVmlzdWFsRWxlbWVudEhhbmRsZXIgfTtcbiIsImltcG9ydCB7IF9fYXNzaWduIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZm9yd2FyZFJlZiwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUZlYXR1cmVzIH0gZnJvbSAnLi9mZWF0dXJlcy91c2UtZmVhdHVyZXMubWpzJztcbmltcG9ydCB7IE1vdGlvbkNvbmZpZ0NvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0L01vdGlvbkNvbmZpZ0NvbnRleHQubWpzJztcbmltcG9ydCB7IE1vdGlvbkNvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0L01vdGlvbkNvbnRleHQvaW5kZXgubWpzJztcbmltcG9ydCB7IHVzZVZpc3VhbEVsZW1lbnQgfSBmcm9tICcuL3V0aWxzL3VzZS12aXN1YWwtZWxlbWVudC5tanMnO1xuaW1wb3J0IHsgdXNlTW90aW9uUmVmIH0gZnJvbSAnLi91dGlscy91c2UtbW90aW9uLXJlZi5tanMnO1xuaW1wb3J0IHsgdXNlQ3JlYXRlTW90aW9uQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQvTW90aW9uQ29udGV4dC9jcmVhdGUubWpzJztcbmltcG9ydCB7IGxvYWRGZWF0dXJlcywgZmVhdHVyZURlZmluaXRpb25zIH0gZnJvbSAnLi9mZWF0dXJlcy9kZWZpbml0aW9ucy5tanMnO1xuaW1wb3J0IHsgaXNCcm93c2VyIH0gZnJvbSAnLi4vdXRpbHMvaXMtYnJvd3Nlci5tanMnO1xuaW1wb3J0IHsgdXNlUHJvamVjdGlvbklkIH0gZnJvbSAnLi4vcHJvamVjdGlvbi9ub2RlL2lkLm1qcyc7XG5pbXBvcnQgeyBMYXlvdXRHcm91cENvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0L0xheW91dEdyb3VwQ29udGV4dC5tanMnO1xuaW1wb3J0IHsgdXNlUHJvamVjdGlvbiB9IGZyb20gJy4vZmVhdHVyZXMvdXNlLXByb2plY3Rpb24ubWpzJztcbmltcG9ydCB7IFZpc3VhbEVsZW1lbnRIYW5kbGVyIH0gZnJvbSAnLi91dGlscy9WaXN1YWxFbGVtZW50SGFuZGxlci5tanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhIGBtb3Rpb25gIGNvbXBvbmVudC5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgYSBDb21wb25lbnQgYXJndW1lbnQsIHdoaWNoIGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgKGllIFwiZGl2XCJcbiAqIGZvciBgbW90aW9uLmRpdmApLCBvciBhbiBhY3R1YWwgUmVhY3QgY29tcG9uZW50LlxuICpcbiAqIEFsb25nc2lkZSB0aGlzIGlzIGEgY29uZmlnIG9wdGlvbiB3aGljaCBwcm92aWRlcyBhIHdheSBvZiByZW5kZXJpbmcgdGhlIHByb3ZpZGVkXG4gKiBjb21wb25lbnQgXCJvZmZsaW5lXCIsIG9yIG91dHNpZGUgdGhlIFJlYWN0IHJlbmRlciBjeWNsZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlTW90aW9uQ29tcG9uZW50KF9hKSB7XG4gICAgdmFyIHByZWxvYWRlZEZlYXR1cmVzID0gX2EucHJlbG9hZGVkRmVhdHVyZXMsIGNyZWF0ZVZpc3VhbEVsZW1lbnQgPSBfYS5jcmVhdGVWaXN1YWxFbGVtZW50LCBwcm9qZWN0aW9uTm9kZUNvbnN0cnVjdG9yID0gX2EucHJvamVjdGlvbk5vZGVDb25zdHJ1Y3RvciwgdXNlUmVuZGVyID0gX2EudXNlUmVuZGVyLCB1c2VWaXN1YWxTdGF0ZSA9IF9hLnVzZVZpc3VhbFN0YXRlLCBDb21wb25lbnQgPSBfYS5Db21wb25lbnQ7XG4gICAgcHJlbG9hZGVkRmVhdHVyZXMgJiYgbG9hZEZlYXR1cmVzKHByZWxvYWRlZEZlYXR1cmVzKTtcbiAgICBmdW5jdGlvbiBNb3Rpb25Db21wb25lbnQocHJvcHMsIGV4dGVybmFsUmVmKSB7XG4gICAgICAgIHZhciBsYXlvdXRJZCA9IHVzZUxheW91dElkKHByb3BzKTtcbiAgICAgICAgcHJvcHMgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcHJvcHMpLCB7IGxheW91dElkOiBsYXlvdXRJZCB9KTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHdlJ3JlIHJlbmRlcmluZyBpbiBhIHN0YXRpYyBlbnZpcm9ubWVudCwgd2Ugb25seSB2aXN1YWxseSB1cGRhdGUgdGhlIGNvbXBvbmVudFxuICAgICAgICAgKiBhcyBhIHJlc3VsdCBvZiBhIFJlYWN0LXJlcmVuZGVyIHJhdGhlciB0aGFuIGludGVyYWN0aW9ucyBvciBhbmltYXRpb25zLiBUaGlzXG4gICAgICAgICAqIG1lYW5zIHdlIGRvbid0IG5lZWQgdG8gbG9hZCBhZGRpdGlvbmFsIG1lbW9yeSBzdHJ1Y3R1cmVzIGxpa2UgVmlzdWFsRWxlbWVudCxcbiAgICAgICAgICogb3IgYW55IGdlc3R1cmUvYW5pbWF0aW9uIGZlYXR1cmVzLlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGNvbmZpZyA9IHVzZUNvbnRleHQoTW90aW9uQ29uZmlnQ29udGV4dCk7XG4gICAgICAgIHZhciBmZWF0dXJlcyA9IG51bGw7XG4gICAgICAgIHZhciBjb250ZXh0ID0gdXNlQ3JlYXRlTW90aW9uQ29udGV4dChwcm9wcyk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGUgYSB1bmlxdWUgcHJvamVjdGlvbiBJRCBmb3IgdGhpcyBjb21wb25lbnQuIElmIGEgbmV3IGNvbXBvbmVudCBpcyBhZGRlZFxuICAgICAgICAgKiBkdXJpbmcgYSBsYXlvdXQgYW5pbWF0aW9uIHdlJ2xsIHVzZSB0aGlzIHRvIHF1ZXJ5IHRoZSBET00gYW5kIGh5ZHJhdGUgaXRzIHJlZiBlYXJseSwgYWxsb3dpbmdcbiAgICAgICAgICogdXMgdG8gbWVhc3VyZSBpdCBhcyBzb29uIGFzIGFueSBsYXlvdXQgZWZmZWN0IGZsdXNoZXMgcGVuZGluZyBsYXlvdXQgYW5pbWF0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogUGVyZm9ybWFuY2Ugbm90ZTogSXQnZCBiZSBiZXR0ZXIgbm90IHRvIGhhdmUgdG8gc2VhcmNoIHRoZSBET00gZm9yIHRoZXNlIGVsZW1lbnRzLlxuICAgICAgICAgKiBGb3IgbmV3bHktZW50ZXJpbmcgY29tcG9uZW50cyBpdCBjb3VsZCBiZSBlbm91Z2ggdG8gb25seSBjb3JyZWN0IHRyZWVTY2FsZSwgaW4gd2hpY2hcbiAgICAgICAgICogY2FzZSB3ZSBjb3VsZCBtb3VudCBpbiBhIHNjYWxlLWNvcnJlY3Rpb24gbW9kZS4gVGhpcyB3b3VsZG4ndCBiZSBlbm91Z2ggZm9yXG4gICAgICAgICAqIHNoYXJlZCBlbGVtZW50IHRyYW5zaXRpb25zIGhvd2V2ZXIuIFBlcmhhcHMgZm9yIHRob3NlIHdlIGNvdWxkIHJldmVydCB0byBhIHJvb3Qgbm9kZVxuICAgICAgICAgKiB0aGF0IGdldHMgZm9yY2VSZW5kZXJlZCBhbmQgbGF5b3V0IGFuaW1hdGlvbnMgYXJlIHRyaWdnZXJlZCBvbiBpdHMgbGF5b3V0IGVmZmVjdC5cbiAgICAgICAgICovXG4gICAgICAgIHZhciBwcm9qZWN0aW9uSWQgPSBjb25maWcuaXNTdGF0aWMgPyB1bmRlZmluZWQgOiB1c2VQcm9qZWN0aW9uSWQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgdmlzdWFsU3RhdGUgPSB1c2VWaXN1YWxTdGF0ZShwcm9wcywgY29uZmlnLmlzU3RhdGljKTtcbiAgICAgICAgaWYgKCFjb25maWcuaXNTdGF0aWMgJiYgaXNCcm93c2VyKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIENyZWF0ZSBhIFZpc3VhbEVsZW1lbnQgZm9yIHRoaXMgY29tcG9uZW50LiBBIFZpc3VhbEVsZW1lbnQgcHJvdmlkZXMgYSBjb21tb25cbiAgICAgICAgICAgICAqIGludGVyZmFjZSB0byByZW5kZXJlci1zcGVjaWZpYyBBUElzIChpZSBET00vVGhyZWUuanMgZXRjKSBhcyB3ZWxsIGFzXG4gICAgICAgICAgICAgKiBwcm92aWRpbmcgYSB3YXkgb2YgcmVuZGVyaW5nIHRvIHRoZXNlIEFQSXMgb3V0c2lkZSBvZiB0aGUgUmVhY3QgcmVuZGVyIGxvb3BcbiAgICAgICAgICAgICAqIGZvciBtb3JlIHBlcmZvcm1hbnQgYW5pbWF0aW9ucyBhbmQgaW50ZXJhY3Rpb25zXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnRleHQudmlzdWFsRWxlbWVudCA9IHVzZVZpc3VhbEVsZW1lbnQoQ29tcG9uZW50LCB2aXN1YWxTdGF0ZSwgX19hc3NpZ24oX19hc3NpZ24oe30sIGNvbmZpZyksIHByb3BzKSwgY3JlYXRlVmlzdWFsRWxlbWVudCk7XG4gICAgICAgICAgICB1c2VQcm9qZWN0aW9uKHByb2plY3Rpb25JZCwgcHJvcHMsIGNvbnRleHQudmlzdWFsRWxlbWVudCwgcHJvamVjdGlvbk5vZGVDb25zdHJ1Y3RvciB8fFxuICAgICAgICAgICAgICAgIGZlYXR1cmVEZWZpbml0aW9ucy5wcm9qZWN0aW9uTm9kZUNvbnN0cnVjdG9yKTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogTG9hZCBNb3Rpb24gZ2VzdHVyZSBhbmQgYW5pbWF0aW9uIGZlYXR1cmVzLiBUaGVzZSBhcmUgcmVuZGVyZWQgYXMgcmVuZGVybGVzc1xuICAgICAgICAgICAgICogY29tcG9uZW50cyBzbyBlYWNoIGZlYXR1cmUgY2FuIG9wdGlvbmFsbHkgbWFrZSB1c2Ugb2YgUmVhY3QgbGlmZWN5Y2xlIG1ldGhvZHMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGZlYXR1cmVzID0gdXNlRmVhdHVyZXMocHJvcHMsIGNvbnRleHQudmlzdWFsRWxlbWVudCwgcHJlbG9hZGVkRmVhdHVyZXMpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgbW91bnQgb3JkZXIgYW5kIGhpZXJhcmNoeSBpcyBzcGVjaWZpYyB0byBlbnN1cmUgb3VyIGVsZW1lbnQgcmVmXG4gICAgICAgICAqIGlzIGh5ZHJhdGVkIGJ5IHRoZSB0aW1lIGZlYXR1cmVzIGZpcmUgdGhlaXIgZWZmZWN0cy5cbiAgICAgICAgICovXG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChWaXN1YWxFbGVtZW50SGFuZGxlciwgeyB2aXN1YWxFbGVtZW50OiBjb250ZXh0LnZpc3VhbEVsZW1lbnQsIHByb3BzOiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY29uZmlnKSwgcHJvcHMpIH0sXG4gICAgICAgICAgICBmZWF0dXJlcyxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTW90aW9uQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogY29udGV4dCB9LCB1c2VSZW5kZXIoQ29tcG9uZW50LCBwcm9wcywgcHJvamVjdGlvbklkLCB1c2VNb3Rpb25SZWYodmlzdWFsU3RhdGUsIGNvbnRleHQudmlzdWFsRWxlbWVudCwgZXh0ZXJuYWxSZWYpLCB2aXN1YWxTdGF0ZSwgY29uZmlnLmlzU3RhdGljLCBjb250ZXh0LnZpc3VhbEVsZW1lbnQpKSkpO1xuICAgIH1cbiAgICByZXR1cm4gZm9yd2FyZFJlZihNb3Rpb25Db21wb25lbnQpO1xufVxuZnVuY3Rpb24gdXNlTGF5b3V0SWQoX2EpIHtcbiAgICB2YXIgX2I7XG4gICAgdmFyIGxheW91dElkID0gX2EubGF5b3V0SWQ7XG4gICAgdmFyIGxheW91dEdyb3VwSWQgPSAoX2IgPSB1c2VDb250ZXh0KExheW91dEdyb3VwQ29udGV4dCkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5pZDtcbiAgICByZXR1cm4gbGF5b3V0R3JvdXBJZCAmJiBsYXlvdXRJZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gbGF5b3V0R3JvdXBJZCArIFwiLVwiICsgbGF5b3V0SWRcbiAgICAgICAgOiBsYXlvdXRJZDtcbn1cblxuZXhwb3J0IHsgY3JlYXRlTW90aW9uQ29tcG9uZW50IH07XG4iLCJpbXBvcnQgeyBjaGVja0lmQ29udHJvbGxpbmdWYXJpYW50cywgaXNWYXJpYW50TGFiZWwgfSBmcm9tICcuLi8uLi9yZW5kZXIvdXRpbHMvdmFyaWFudHMubWpzJztcblxuZnVuY3Rpb24gZ2V0Q3VycmVudFRyZWVWYXJpYW50cyhwcm9wcywgY29udGV4dCkge1xuICAgIGlmIChjaGVja0lmQ29udHJvbGxpbmdWYXJpYW50cyhwcm9wcykpIHtcbiAgICAgICAgdmFyIGluaXRpYWwgPSBwcm9wcy5pbml0aWFsLCBhbmltYXRlID0gcHJvcHMuYW5pbWF0ZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluaXRpYWw6IGluaXRpYWwgPT09IGZhbHNlIHx8IGlzVmFyaWFudExhYmVsKGluaXRpYWwpXG4gICAgICAgICAgICAgICAgPyBpbml0aWFsXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBhbmltYXRlOiBpc1ZhcmlhbnRMYWJlbChhbmltYXRlKSA/IGFuaW1hdGUgOiB1bmRlZmluZWQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBwcm9wcy5pbmhlcml0ICE9PSBmYWxzZSA/IGNvbnRleHQgOiB7fTtcbn1cblxuZXhwb3J0IHsgZ2V0Q3VycmVudFRyZWVWYXJpYW50cyB9O1xuIiwiaW1wb3J0IHsgaXNSZWZPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscy9pcy1yZWYtb2JqZWN0Lm1qcyc7XG5pbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgU3dpdGNoTGF5b3V0R3JvdXBDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9Td2l0Y2hMYXlvdXRHcm91cENvbnRleHQubWpzJztcblxuZnVuY3Rpb24gdXNlUHJvamVjdGlvbihwcm9qZWN0aW9uSWQsIF9hLCB2aXN1YWxFbGVtZW50LCBQcm9qZWN0aW9uTm9kZUNvbnN0cnVjdG9yKSB7XG4gICAgdmFyIF9iO1xuICAgIHZhciBsYXlvdXRJZCA9IF9hLmxheW91dElkLCBsYXlvdXQgPSBfYS5sYXlvdXQsIGRyYWcgPSBfYS5kcmFnLCBkcmFnQ29uc3RyYWludHMgPSBfYS5kcmFnQ29uc3RyYWludHMsIGxheW91dFNjcm9sbCA9IF9hLmxheW91dFNjcm9sbDtcbiAgICB2YXIgaW5pdGlhbFByb21vdGlvbkNvbmZpZyA9IHVzZUNvbnRleHQoU3dpdGNoTGF5b3V0R3JvdXBDb250ZXh0KTtcbiAgICBpZiAoIVByb2plY3Rpb25Ob2RlQ29uc3RydWN0b3IgfHxcbiAgICAgICAgIXZpc3VhbEVsZW1lbnQgfHxcbiAgICAgICAgKHZpc3VhbEVsZW1lbnQgPT09IG51bGwgfHwgdmlzdWFsRWxlbWVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZpc3VhbEVsZW1lbnQucHJvamVjdGlvbiA9IG5ldyBQcm9qZWN0aW9uTm9kZUNvbnN0cnVjdG9yKHByb2plY3Rpb25JZCwgdmlzdWFsRWxlbWVudC5nZXRMYXRlc3RWYWx1ZXMoKSwgKF9iID0gdmlzdWFsRWxlbWVudC5wYXJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5wcm9qZWN0aW9uKTtcbiAgICB2aXN1YWxFbGVtZW50LnByb2plY3Rpb24uc2V0T3B0aW9ucyh7XG4gICAgICAgIGxheW91dElkOiBsYXlvdXRJZCxcbiAgICAgICAgbGF5b3V0OiBsYXlvdXQsXG4gICAgICAgIGFsd2F5c01lYXN1cmVMYXlvdXQ6IEJvb2xlYW4oZHJhZykgfHwgKGRyYWdDb25zdHJhaW50cyAmJiBpc1JlZk9iamVjdChkcmFnQ29uc3RyYWludHMpKSxcbiAgICAgICAgdmlzdWFsRWxlbWVudDogdmlzdWFsRWxlbWVudCxcbiAgICAgICAgc2NoZWR1bGVSZW5kZXI6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZpc3VhbEVsZW1lbnQuc2NoZWR1bGVSZW5kZXIoKTsgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRPRE86IFVwZGF0ZSBvcHRpb25zIGluIGFuIGVmZmVjdC4gVGhpcyBjb3VsZCBiZSB0cmlja3kgYXMgaXQnbGwgYmUgdG9vIGxhdGVcbiAgICAgICAgICogdG8gdXBkYXRlIGJ5IHRoZSB0aW1lIGxheW91dCBhbmltYXRpb25zIHJ1bi5cbiAgICAgICAgICogV2UgYWxzbyBuZWVkIHRvIGZpeCB0aGlzIHNhZmVUb1JlbW92ZSBieSBsaW5raW5nIGl0IHVwIHRvIHRoZSBvbmUgcmV0dXJuZWQgYnkgdXNlUHJlc2VuY2UsXG4gICAgICAgICAqIGVuc3VyaW5nIGl0IGdldHMgY2FsbGVkIGlmIHRoZXJlJ3Mgbm8gcG90ZW50aWFsIGxheW91dCBhbmltYXRpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgYW5pbWF0aW9uVHlwZTogdHlwZW9mIGxheW91dCA9PT0gXCJzdHJpbmdcIiA/IGxheW91dCA6IFwiYm90aFwiLFxuICAgICAgICBpbml0aWFsUHJvbW90aW9uQ29uZmlnOiBpbml0aWFsUHJvbW90aW9uQ29uZmlnLFxuICAgICAgICBsYXlvdXRTY3JvbGw6IGxheW91dFNjcm9sbCxcbiAgICB9KTtcbn1cblxuZXhwb3J0IHsgdXNlUHJvamVjdGlvbiB9O1xuIiwiaW1wb3J0IHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc1JlZk9iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzL2lzLXJlZi1vYmplY3QubWpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVmIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLCBoeWRyYXRlcyB0aGUgcHJvdmlkZWRcbiAqIGV4dGVybmFsIHJlZiBhbmQgVmlzdWFsRWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gdXNlTW90aW9uUmVmKHZpc3VhbFN0YXRlLCB2aXN1YWxFbGVtZW50LCBleHRlcm5hbFJlZikge1xuICAgIHJldHVybiB1c2VDYWxsYmFjayhmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpbnN0YW5jZSAmJiAoKF9hID0gdmlzdWFsU3RhdGUubW91bnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHZpc3VhbFN0YXRlLCBpbnN0YW5jZSkpO1xuICAgICAgICBpZiAodmlzdWFsRWxlbWVudCkge1xuICAgICAgICAgICAgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICA/IHZpc3VhbEVsZW1lbnQubW91bnQoaW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgOiB2aXN1YWxFbGVtZW50LnVubW91bnQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXh0ZXJuYWxSZWYpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0ZXJuYWxSZWYgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIGV4dGVybmFsUmVmKGluc3RhbmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzUmVmT2JqZWN0KGV4dGVybmFsUmVmKSkge1xuICAgICAgICAgICAgICAgIGV4dGVybmFsUmVmLmN1cnJlbnQgPSBpbnN0YW5jZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFxuICAgIC8qKlxuICAgICAqIE9ubHkgcGFzcyBhIG5ldyByZWYgY2FsbGJhY2sgdG8gUmVhY3QgaWYgd2UndmUgcmVjZWl2ZWQgYSB2aXN1YWwgZWxlbWVudFxuICAgICAqIGZhY3RvcnkuIE90aGVyd2lzZSB3ZSdsbCBiZSBtb3VudGluZy9yZW1vdW50aW5nIGV2ZXJ5IHRpbWUgZXh0ZXJuYWxSZWZcbiAgICAgKiBvciBvdGhlciBkZXBlbmRlbmNpZXMgY2hhbmdlLlxuICAgICAqL1xuICAgIFt2aXN1YWxFbGVtZW50XSk7XG59XG5cbmV4cG9ydCB7IHVzZU1vdGlvblJlZiB9O1xuIiwiaW1wb3J0IHsgY3JlYXRlTW90aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW90aW9uL2luZGV4Lm1qcyc7XG5cbi8qKlxuICogQ29udmVydCBhbnkgUmVhY3QgY29tcG9uZW50IGludG8gYSBgbW90aW9uYCBjb21wb25lbnQuIFRoZSBwcm92aWRlZCBjb21wb25lbnRcbiAqICoqbXVzdCoqIHVzZSBgUmVhY3QuZm9yd2FyZFJlZmAgdG8gdGhlIHVuZGVybHlpbmcgRE9NIGNvbXBvbmVudCB5b3Ugd2FudCB0byBhbmltYXRlLlxuICpcbiAqIGBgYGpzeFxuICogY29uc3QgQ29tcG9uZW50ID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIHJlZikgPT4ge1xuICogICByZXR1cm4gPGRpdiByZWY9e3JlZn0gLz5cbiAqIH0pXG4gKlxuICogY29uc3QgTW90aW9uQ29tcG9uZW50ID0gbW90aW9uKENvbXBvbmVudClcbiAqIGBgYFxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gY3JlYXRlTW90aW9uUHJveHkoY3JlYXRlQ29uZmlnKSB7XG4gICAgZnVuY3Rpb24gY3VzdG9tKENvbXBvbmVudCwgY3VzdG9tTW90aW9uQ29tcG9uZW50Q29uZmlnKSB7XG4gICAgICAgIGlmIChjdXN0b21Nb3Rpb25Db21wb25lbnRDb25maWcgPT09IHZvaWQgMCkgeyBjdXN0b21Nb3Rpb25Db21wb25lbnRDb25maWcgPSB7fTsgfVxuICAgICAgICByZXR1cm4gY3JlYXRlTW90aW9uQ29tcG9uZW50KGNyZWF0ZUNvbmZpZyhDb21wb25lbnQsIGN1c3RvbU1vdGlvbkNvbXBvbmVudENvbmZpZykpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIFByb3h5ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiBjdXN0b207XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEEgY2FjaGUgb2YgZ2VuZXJhdGVkIGBtb3Rpb25gIGNvbXBvbmVudHMsIGUuZyBgbW90aW9uLmRpdmAsIGBtb3Rpb24uaW5wdXRgIGV0Yy5cbiAgICAgKiBSYXRoZXIgdGhhbiBnZW5lcmF0aW5nIHRoZW0gYW5ldyBldmVyeSByZW5kZXIuXG4gICAgICovXG4gICAgdmFyIGNvbXBvbmVudENhY2hlID0gbmV3IE1hcCgpO1xuICAgIHJldHVybiBuZXcgUHJveHkoY3VzdG9tLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDYWxsZWQgd2hlbiBgbW90aW9uYCBpcyByZWZlcmVuY2VkIHdpdGggYSBwcm9wOiBgbW90aW9uLmRpdmAsIGBtb3Rpb24uaW5wdXRgIGV0Yy5cbiAgICAgICAgICogVGhlIHByb3AgbmFtZSBpcyBwYXNzZWQgdGhyb3VnaCBhcyBga2V5YCBhbmQgd2UgY2FuIHVzZSB0aGF0IHRvIGdlbmVyYXRlIGEgYG1vdGlvbmBcbiAgICAgICAgICogRE9NIGNvbXBvbmVudCB3aXRoIHRoYXQgbmFtZS5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKF90YXJnZXQsIGtleSkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB0aGlzIGVsZW1lbnQgZG9lc24ndCBleGlzdCBpbiB0aGUgY29tcG9uZW50IGNhY2hlLCBjcmVhdGUgaXQgYW5kIGNhY2hlLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoIWNvbXBvbmVudENhY2hlLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50Q2FjaGUuc2V0KGtleSwgY3VzdG9tKGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudENhY2hlLmdldChrZXkpO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuXG5leHBvcnQgeyBjcmVhdGVNb3Rpb25Qcm94eSB9O1xuIiwiLyoqXG4gKiBXZSBrZWVwIHRoZXNlIGxpc3RlZCBzZXBlcmF0ZWx5IGFzIHdlIHVzZSB0aGUgbG93ZXJjYXNlIHRhZyBuYW1lcyBhcyBwYXJ0XG4gKiBvZiB0aGUgcnVudGltZSBidW5kbGUgdG8gZGV0ZWN0IFNWRyBjb21wb25lbnRzXG4gKi9cbnZhciBsb3dlcmNhc2VTVkdFbGVtZW50cyA9IFtcbiAgICBcImFuaW1hdGVcIixcbiAgICBcImNpcmNsZVwiLFxuICAgIFwiZGVmc1wiLFxuICAgIFwiZGVzY1wiLFxuICAgIFwiZWxsaXBzZVwiLFxuICAgIFwiZ1wiLFxuICAgIFwiaW1hZ2VcIixcbiAgICBcImxpbmVcIixcbiAgICBcImZpbHRlclwiLFxuICAgIFwibWFya2VyXCIsXG4gICAgXCJtYXNrXCIsXG4gICAgXCJtZXRhZGF0YVwiLFxuICAgIFwicGF0aFwiLFxuICAgIFwicGF0dGVyblwiLFxuICAgIFwicG9seWdvblwiLFxuICAgIFwicG9seWxpbmVcIixcbiAgICBcInJlY3RcIixcbiAgICBcInN0b3BcIixcbiAgICBcInN2Z1wiLFxuICAgIFwic3dpdGNoXCIsXG4gICAgXCJzeW1ib2xcIixcbiAgICBcInRleHRcIixcbiAgICBcInRzcGFuXCIsXG4gICAgXCJ1c2VcIixcbiAgICBcInZpZXdcIixcbl07XG5cbmV4cG9ydCB7IGxvd2VyY2FzZVNWR0VsZW1lbnRzIH07XG4iLCJpbXBvcnQgeyBsb3dlcmNhc2VTVkdFbGVtZW50cyB9IGZyb20gJy4uLy4uL3N2Zy9sb3dlcmNhc2UtZWxlbWVudHMubWpzJztcblxuZnVuY3Rpb24gaXNTVkdDb21wb25lbnQoQ29tcG9uZW50KSB7XG4gICAgaWYgKFxuICAgIC8qKlxuICAgICAqIElmIGl0J3Mgbm90IGEgc3RyaW5nLCBpdCdzIGEgY3VzdG9tIFJlYWN0IGNvbXBvbmVudC4gQ3VycmVudGx5IHdlIG9ubHkgc3VwcG9ydFxuICAgICAqIEhUTUwgY3VzdG9tIFJlYWN0IGNvbXBvbmVudHMuXG4gICAgICovXG4gICAgdHlwZW9mIENvbXBvbmVudCAhPT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAvKipcbiAgICAgICAgICogSWYgaXQgY29udGFpbnMgYSBkYXNoLCB0aGUgZWxlbWVudCBpcyBhIGN1c3RvbSBIVE1MIHdlYmNvbXBvbmVudC5cbiAgICAgICAgICovXG4gICAgICAgIENvbXBvbmVudC5pbmNsdWRlcyhcIi1cIikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmIChcbiAgICAvKipcbiAgICAgKiBJZiBpdCdzIGluIG91ciBsaXN0IG9mIGxvd2VyY2FzZSBTVkcgdGFncywgaXQncyBhbiBTVkcgY29tcG9uZW50XG4gICAgICovXG4gICAgbG93ZXJjYXNlU1ZHRWxlbWVudHMuaW5kZXhPZihDb21wb25lbnQpID4gLTEgfHxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIGl0IGNvbnRhaW5zIGEgY2FwaXRhbCBsZXR0ZXIsIGl0J3MgYW4gU1ZHIGNvbXBvbmVudFxuICAgICAgICAgKi9cbiAgICAgICAgL1tBLVpdLy50ZXN0KENvbXBvbmVudCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IHsgaXNTVkdDb21wb25lbnQgfTtcbiIsInZhciBzY2FsZUNvcnJlY3RvcnMgPSB7fTtcbmZ1bmN0aW9uIGFkZFNjYWxlQ29ycmVjdG9yKGNvcnJlY3RvcnMpIHtcbiAgICBPYmplY3QuYXNzaWduKHNjYWxlQ29ycmVjdG9ycywgY29ycmVjdG9ycyk7XG59XG5cbmV4cG9ydCB7IGFkZFNjYWxlQ29ycmVjdG9yLCBzY2FsZUNvcnJlY3RvcnMgfTtcbiIsIi8qKlxuICogQSBsaXN0IG9mIGFsbCB0cmFuc2Zvcm1hYmxlIGF4ZXMuIFdlJ2xsIHVzZSB0aGlzIGxpc3QgdG8gZ2VuZXJhdGVkIGEgdmVyc2lvblxuICogb2YgZWFjaCBheGVzIGZvciBlYWNoIHRyYW5zZm9ybS5cbiAqL1xudmFyIHRyYW5zZm9ybUF4ZXMgPSBbXCJcIiwgXCJYXCIsIFwiWVwiLCBcIlpcIl07XG4vKipcbiAqIEFuIG9yZGVyZWQgYXJyYXkgb2YgZWFjaCB0cmFuc2Zvcm1hYmxlIHZhbHVlLiBCeSBkZWZhdWx0LCB0cmFuc2Zvcm0gdmFsdWVzXG4gKiB3aWxsIGJlIHNvcnRlZCB0byB0aGlzIG9yZGVyLlxuICovXG52YXIgb3JkZXIgPSBbXCJ0cmFuc2xhdGVcIiwgXCJzY2FsZVwiLCBcInJvdGF0ZVwiLCBcInNrZXdcIl07XG4vKipcbiAqIEdlbmVyYXRlIGEgbGlzdCBvZiBldmVyeSBwb3NzaWJsZSB0cmFuc2Zvcm0ga2V5LlxuICovXG52YXIgdHJhbnNmb3JtUHJvcHMgPSBbXCJ0cmFuc2Zvcm1QZXJzcGVjdGl2ZVwiLCBcInhcIiwgXCJ5XCIsIFwielwiXTtcbm9yZGVyLmZvckVhY2goZnVuY3Rpb24gKG9wZXJhdGlvbktleSkge1xuICAgIHJldHVybiB0cmFuc2Zvcm1BeGVzLmZvckVhY2goZnVuY3Rpb24gKGF4ZXNLZXkpIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybVByb3BzLnB1c2gob3BlcmF0aW9uS2V5ICsgYXhlc0tleSk7XG4gICAgfSk7XG59KTtcbi8qKlxuICogQSBmdW5jdGlvbiB0byB1c2Ugd2l0aCBBcnJheS5zb3J0IHRvIHNvcnQgdHJhbnNmb3JtIGtleXMgYnkgdGhlaXIgZGVmYXVsdCBvcmRlci5cbiAqL1xuZnVuY3Rpb24gc29ydFRyYW5zZm9ybVByb3BzKGEsIGIpIHtcbiAgICByZXR1cm4gdHJhbnNmb3JtUHJvcHMuaW5kZXhPZihhKSAtIHRyYW5zZm9ybVByb3BzLmluZGV4T2YoYik7XG59XG4vKipcbiAqIEEgcXVpY2sgbG9va3VwIGZvciB0cmFuc2Zvcm0gcHJvcHMuXG4gKi9cbnZhciB0cmFuc2Zvcm1Qcm9wU2V0ID0gbmV3IFNldCh0cmFuc2Zvcm1Qcm9wcyk7XG5mdW5jdGlvbiBpc1RyYW5zZm9ybVByb3Aoa2V5KSB7XG4gICAgcmV0dXJuIHRyYW5zZm9ybVByb3BTZXQuaGFzKGtleSk7XG59XG4vKipcbiAqIEEgcXVpY2sgbG9va3VwIGZvciB0cmFuc2Zvcm0gb3JpZ2luIHByb3BzXG4gKi9cbnZhciB0cmFuc2Zvcm1PcmlnaW5Qcm9wcyA9IG5ldyBTZXQoW1wib3JpZ2luWFwiLCBcIm9yaWdpbllcIiwgXCJvcmlnaW5aXCJdKTtcbmZ1bmN0aW9uIGlzVHJhbnNmb3JtT3JpZ2luUHJvcChrZXkpIHtcbiAgICByZXR1cm4gdHJhbnNmb3JtT3JpZ2luUHJvcHMuaGFzKGtleSk7XG59XG5cbmV4cG9ydCB7IGlzVHJhbnNmb3JtT3JpZ2luUHJvcCwgaXNUcmFuc2Zvcm1Qcm9wLCBzb3J0VHJhbnNmb3JtUHJvcHMsIHRyYW5zZm9ybUF4ZXMsIHRyYW5zZm9ybVByb3BzIH07XG4iLCJpbXBvcnQgeyBzY2FsZUNvcnJlY3RvcnMgfSBmcm9tICcuLi8uLi9wcm9qZWN0aW9uL3N0eWxlcy9zY2FsZS1jb3JyZWN0aW9uLm1qcyc7XG5pbXBvcnQgeyBpc1RyYW5zZm9ybVByb3AsIGlzVHJhbnNmb3JtT3JpZ2luUHJvcCB9IGZyb20gJy4uLy4uL3JlbmRlci9odG1sL3V0aWxzL3RyYW5zZm9ybS5tanMnO1xuXG5mdW5jdGlvbiBpc0ZvcmNlZE1vdGlvblZhbHVlKGtleSwgX2EpIHtcbiAgICB2YXIgbGF5b3V0ID0gX2EubGF5b3V0LCBsYXlvdXRJZCA9IF9hLmxheW91dElkO1xuICAgIHJldHVybiAoaXNUcmFuc2Zvcm1Qcm9wKGtleSkgfHxcbiAgICAgICAgaXNUcmFuc2Zvcm1PcmlnaW5Qcm9wKGtleSkgfHxcbiAgICAgICAgKChsYXlvdXQgfHwgbGF5b3V0SWQgIT09IHVuZGVmaW5lZCkgJiZcbiAgICAgICAgICAgICghIXNjYWxlQ29ycmVjdG9yc1trZXldIHx8IGtleSA9PT0gXCJvcGFjaXR5XCIpKSk7XG59XG5cbmV4cG9ydCB7IGlzRm9yY2VkTW90aW9uVmFsdWUgfTtcbiIsInZhciBpc01vdGlvblZhbHVlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlLmdldFZlbG9jaXR5KTtcbn07XG5cbmV4cG9ydCB7IGlzTW90aW9uVmFsdWUgfTtcbiIsImltcG9ydCB7IHNvcnRUcmFuc2Zvcm1Qcm9wcyB9IGZyb20gJy4vdHJhbnNmb3JtLm1qcyc7XG5cbnZhciB0cmFuc2xhdGVBbGlhcyA9IHtcbiAgICB4OiBcInRyYW5zbGF0ZVhcIixcbiAgICB5OiBcInRyYW5zbGF0ZVlcIixcbiAgICB6OiBcInRyYW5zbGF0ZVpcIixcbiAgICB0cmFuc2Zvcm1QZXJzcGVjdGl2ZTogXCJwZXJzcGVjdGl2ZVwiLFxufTtcbi8qKlxuICogQnVpbGQgYSBDU1MgdHJhbnNmb3JtIHN0eWxlIGZyb20gaW5kaXZpZHVhbCB4L3kvc2NhbGUgZXRjIHByb3BlcnRpZXMuXG4gKlxuICogVGhpcyBvdXRwdXRzIHdpdGggYSBkZWZhdWx0IG9yZGVyIG9mIHRyYW5zZm9ybXMvc2NhbGVzL3JvdGF0aW9ucywgdGhpcyBjYW4gYmUgY3VzdG9taXNlZCBieVxuICogcHJvdmlkaW5nIGEgdHJhbnNmb3JtVGVtcGxhdGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVHJhbnNmb3JtKF9hLCBfYiwgdHJhbnNmb3JtSXNEZWZhdWx0LCB0cmFuc2Zvcm1UZW1wbGF0ZSkge1xuICAgIHZhciB0cmFuc2Zvcm0gPSBfYS50cmFuc2Zvcm0sIHRyYW5zZm9ybUtleXMgPSBfYS50cmFuc2Zvcm1LZXlzO1xuICAgIHZhciBfYyA9IF9iLmVuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uLCBlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbiA9IF9jID09PSB2b2lkIDAgPyB0cnVlIDogX2MsIF9kID0gX2IuYWxsb3dUcmFuc2Zvcm1Ob25lLCBhbGxvd1RyYW5zZm9ybU5vbmUgPSBfZCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9kO1xuICAgIC8vIFRoZSB0cmFuc2Zvcm0gc3RyaW5nIHdlJ3JlIGdvaW5nIHRvIGJ1aWxkIGludG8uXG4gICAgdmFyIHRyYW5zZm9ybVN0cmluZyA9IFwiXCI7XG4gICAgLy8gVHJhbnNmb3JtIGtleXMgaW50byB0aGVpciBkZWZhdWx0IG9yZGVyIC0gdGhpcyB3aWxsIGRldGVybWluZSB0aGUgb3V0cHV0IG9yZGVyLlxuICAgIHRyYW5zZm9ybUtleXMuc29ydChzb3J0VHJhbnNmb3JtUHJvcHMpO1xuICAgIC8vIFRyYWNrIHdoZXRoZXIgdGhlIGRlZmluZWQgdHJhbnNmb3JtIGhhcyBhIGRlZmluZWQgeiBzbyB3ZSBkb24ndCBhZGQgYVxuICAgIC8vIHNlY29uZCB0byBlbmFibGUgaGFyZHdhcmUgYWNjZWxlcmF0aW9uXG4gICAgdmFyIHRyYW5zZm9ybUhhc1ogPSBmYWxzZTtcbiAgICAvLyBMb29wIG92ZXIgZWFjaCB0cmFuc2Zvcm0gYW5kIGJ1aWxkIHRoZW0gaW50byB0cmFuc2Zvcm1TdHJpbmdcbiAgICB2YXIgbnVtVHJhbnNmb3JtS2V5cyA9IHRyYW5zZm9ybUtleXMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtVHJhbnNmb3JtS2V5czsgaSsrKSB7XG4gICAgICAgIHZhciBrZXkgPSB0cmFuc2Zvcm1LZXlzW2ldO1xuICAgICAgICB0cmFuc2Zvcm1TdHJpbmcgKz0gXCJcIi5jb25jYXQodHJhbnNsYXRlQWxpYXNba2V5XSB8fCBrZXksIFwiKFwiKS5jb25jYXQodHJhbnNmb3JtW2tleV0sIFwiKSBcIik7XG4gICAgICAgIGlmIChrZXkgPT09IFwielwiKVxuICAgICAgICAgICAgdHJhbnNmb3JtSGFzWiA9IHRydWU7XG4gICAgfVxuICAgIGlmICghdHJhbnNmb3JtSGFzWiAmJiBlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbikge1xuICAgICAgICB0cmFuc2Zvcm1TdHJpbmcgKz0gXCJ0cmFuc2xhdGVaKDApXCI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0cmFuc2Zvcm1TdHJpbmcgPSB0cmFuc2Zvcm1TdHJpbmcudHJpbSgpO1xuICAgIH1cbiAgICAvLyBJZiB3ZSBoYXZlIGEgY3VzdG9tIGB0cmFuc2Zvcm1gIHRlbXBsYXRlLCBwYXNzIG91ciB0cmFuc2Zvcm0gdmFsdWVzIGFuZFxuICAgIC8vIGdlbmVyYXRlZCB0cmFuc2Zvcm1TdHJpbmcgdG8gdGhhdCBiZWZvcmUgcmV0dXJuaW5nXG4gICAgaWYgKHRyYW5zZm9ybVRlbXBsYXRlKSB7XG4gICAgICAgIHRyYW5zZm9ybVN0cmluZyA9IHRyYW5zZm9ybVRlbXBsYXRlKHRyYW5zZm9ybSwgdHJhbnNmb3JtSXNEZWZhdWx0ID8gXCJcIiA6IHRyYW5zZm9ybVN0cmluZyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGFsbG93VHJhbnNmb3JtTm9uZSAmJiB0cmFuc2Zvcm1Jc0RlZmF1bHQpIHtcbiAgICAgICAgdHJhbnNmb3JtU3RyaW5nID0gXCJub25lXCI7XG4gICAgfVxuICAgIHJldHVybiB0cmFuc2Zvcm1TdHJpbmc7XG59XG4vKipcbiAqIEJ1aWxkIGEgdHJhbnNmb3JtT3JpZ2luIHN0eWxlLiBVc2VzIHRoZSBzYW1lIGRlZmF1bHRzIGFzIHRoZSBicm93c2VyIGZvclxuICogdW5kZWZpbmVkIG9yaWdpbnMuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVHJhbnNmb3JtT3JpZ2luKF9hKSB7XG4gICAgdmFyIF9iID0gX2Eub3JpZ2luWCwgb3JpZ2luWCA9IF9iID09PSB2b2lkIDAgPyBcIjUwJVwiIDogX2IsIF9jID0gX2Eub3JpZ2luWSwgb3JpZ2luWSA9IF9jID09PSB2b2lkIDAgPyBcIjUwJVwiIDogX2MsIF9kID0gX2Eub3JpZ2luWiwgb3JpZ2luWiA9IF9kID09PSB2b2lkIDAgPyAwIDogX2Q7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KG9yaWdpblgsIFwiIFwiKS5jb25jYXQob3JpZ2luWSwgXCIgXCIpLmNvbmNhdChvcmlnaW5aKTtcbn1cblxuZXhwb3J0IHsgYnVpbGRUcmFuc2Zvcm0sIGJ1aWxkVHJhbnNmb3JtT3JpZ2luIH07XG4iLCIvKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvdmlkZWQga2V5IGlzIGEgQ1NTIHZhcmlhYmxlXG4gKi9cbmZ1bmN0aW9uIGlzQ1NTVmFyaWFibGUoa2V5KSB7XG4gICAgcmV0dXJuIGtleS5zdGFydHNXaXRoKFwiLS1cIik7XG59XG5cbmV4cG9ydCB7IGlzQ1NTVmFyaWFibGUgfTtcbiIsIi8qKlxuICogUHJvdmlkZWQgYSB2YWx1ZSBhbmQgYSBWYWx1ZVR5cGUsIHJldHVybnMgdGhlIHZhbHVlIGFzIHRoYXQgdmFsdWUgdHlwZS5cbiAqL1xudmFyIGdldFZhbHVlQXNUeXBlID0gZnVuY3Rpb24gKHZhbHVlLCB0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiXG4gICAgICAgID8gdHlwZS50cmFuc2Zvcm0odmFsdWUpXG4gICAgICAgIDogdmFsdWU7XG59O1xuXG5leHBvcnQgeyBnZXRWYWx1ZUFzVHlwZSB9O1xuIiwiY29uc3QgY2xhbXAgPSAobWluLCBtYXgpID0+ICh2KSA9PiBNYXRoLm1heChNYXRoLm1pbih2LCBtYXgpLCBtaW4pO1xuY29uc3Qgc2FuaXRpemUgPSAodikgPT4gKHYgJSAxID8gTnVtYmVyKHYudG9GaXhlZCg1KSkgOiB2KTtcbmNvbnN0IGZsb2F0UmVnZXggPSAvKC0pPyhbXFxkXSpcXC4/W1xcZF0pKy9nO1xuY29uc3QgY29sb3JSZWdleCA9IC8oI1swLTlhLWZdezZ9fCNbMC05YS1mXXszfXwjKD86WzAtOWEtZl17Mn0pezIsNH18KHJnYnxoc2wpYT9cXCgoLT9bXFxkXFwuXSslP1ssXFxzXSspezIsM31cXHMqXFwvKlxccypbXFxkXFwuXSslP1xcKSkvZ2k7XG5jb25zdCBzaW5nbGVDb2xvclJlZ2V4ID0gL14oI1swLTlhLWZdezN9fCMoPzpbMC05YS1mXXsyfSl7Miw0fXwocmdifGhzbClhP1xcKCgtP1tcXGRcXC5dKyU/WyxcXHNdKyl7MiwzfVxccypcXC8qXFxzKltcXGRcXC5dKyU/XFwpKSQvaTtcbmZ1bmN0aW9uIGlzU3RyaW5nKHYpIHtcbiAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdzdHJpbmcnO1xufVxuXG5leHBvcnQgeyBjbGFtcCwgY29sb3JSZWdleCwgZmxvYXRSZWdleCwgaXNTdHJpbmcsIHNhbml0aXplLCBzaW5nbGVDb2xvclJlZ2V4IH07XG4iLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWxzLm1qcyc7XG5cbmNvbnN0IGNyZWF0ZVVuaXRUeXBlID0gKHVuaXQpID0+ICh7XG4gICAgdGVzdDogKHYpID0+IGlzU3RyaW5nKHYpICYmIHYuZW5kc1dpdGgodW5pdCkgJiYgdi5zcGxpdCgnICcpLmxlbmd0aCA9PT0gMSxcbiAgICBwYXJzZTogcGFyc2VGbG9hdCxcbiAgICB0cmFuc2Zvcm06ICh2KSA9PiBgJHt2fSR7dW5pdH1gLFxufSk7XG5jb25zdCBkZWdyZWVzID0gY3JlYXRlVW5pdFR5cGUoJ2RlZycpO1xuY29uc3QgcGVyY2VudCA9IGNyZWF0ZVVuaXRUeXBlKCclJyk7XG5jb25zdCBweCA9IGNyZWF0ZVVuaXRUeXBlKCdweCcpO1xuY29uc3QgdmggPSBjcmVhdGVVbml0VHlwZSgndmgnKTtcbmNvbnN0IHZ3ID0gY3JlYXRlVW5pdFR5cGUoJ3Z3Jyk7XG5jb25zdCBwcm9ncmVzc1BlcmNlbnRhZ2UgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHBlcmNlbnQpLCB7IHBhcnNlOiAodikgPT4gcGVyY2VudC5wYXJzZSh2KSAvIDEwMCwgdHJhbnNmb3JtOiAodikgPT4gcGVyY2VudC50cmFuc2Zvcm0odiAqIDEwMCkgfSk7XG5cbmV4cG9ydCB7IGRlZ3JlZXMsIHBlcmNlbnQsIHByb2dyZXNzUGVyY2VudGFnZSwgcHgsIHZoLCB2dyB9O1xuIiwiaW1wb3J0IHsgY2xhbXAgfSBmcm9tICcuLi91dGlscy5tanMnO1xuXG5jb25zdCBudW1iZXIgPSB7XG4gICAgdGVzdDogKHYpID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJyxcbiAgICBwYXJzZTogcGFyc2VGbG9hdCxcbiAgICB0cmFuc2Zvcm06ICh2KSA9PiB2LFxufTtcbmNvbnN0IGFscGhhID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBudW1iZXIpLCB7IHRyYW5zZm9ybTogY2xhbXAoMCwgMSkgfSk7XG5jb25zdCBzY2FsZSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgbnVtYmVyKSwgeyBkZWZhdWx0OiAxIH0pO1xuXG5leHBvcnQgeyBhbHBoYSwgbnVtYmVyLCBzY2FsZSB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBudW1iZXIgfSBmcm9tICdzdHlsZS12YWx1ZS10eXBlcyc7XG5cbnZhciBpbnQgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgbnVtYmVyKSwgeyB0cmFuc2Zvcm06IE1hdGgucm91bmQgfSk7XG5cbmV4cG9ydCB7IGludCB9O1xuIiwiaW1wb3J0IHsgcHgsIGRlZ3JlZXMsIHNjYWxlLCBhbHBoYSwgcHJvZ3Jlc3NQZXJjZW50YWdlIH0gZnJvbSAnc3R5bGUtdmFsdWUtdHlwZXMnO1xuaW1wb3J0IHsgaW50IH0gZnJvbSAnLi90eXBlLWludC5tanMnO1xuXG52YXIgbnVtYmVyVmFsdWVUeXBlcyA9IHtcbiAgICAvLyBCb3JkZXIgcHJvcHNcbiAgICBib3JkZXJXaWR0aDogcHgsXG4gICAgYm9yZGVyVG9wV2lkdGg6IHB4LFxuICAgIGJvcmRlclJpZ2h0V2lkdGg6IHB4LFxuICAgIGJvcmRlckJvdHRvbVdpZHRoOiBweCxcbiAgICBib3JkZXJMZWZ0V2lkdGg6IHB4LFxuICAgIGJvcmRlclJhZGl1czogcHgsXG4gICAgcmFkaXVzOiBweCxcbiAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiBweCxcbiAgICBib3JkZXJUb3BSaWdodFJhZGl1czogcHgsXG4gICAgYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6IHB4LFxuICAgIGJvcmRlckJvdHRvbUxlZnRSYWRpdXM6IHB4LFxuICAgIC8vIFBvc2l0aW9uaW5nIHByb3BzXG4gICAgd2lkdGg6IHB4LFxuICAgIG1heFdpZHRoOiBweCxcbiAgICBoZWlnaHQ6IHB4LFxuICAgIG1heEhlaWdodDogcHgsXG4gICAgc2l6ZTogcHgsXG4gICAgdG9wOiBweCxcbiAgICByaWdodDogcHgsXG4gICAgYm90dG9tOiBweCxcbiAgICBsZWZ0OiBweCxcbiAgICAvLyBTcGFjaW5nIHByb3BzXG4gICAgcGFkZGluZzogcHgsXG4gICAgcGFkZGluZ1RvcDogcHgsXG4gICAgcGFkZGluZ1JpZ2h0OiBweCxcbiAgICBwYWRkaW5nQm90dG9tOiBweCxcbiAgICBwYWRkaW5nTGVmdDogcHgsXG4gICAgbWFyZ2luOiBweCxcbiAgICBtYXJnaW5Ub3A6IHB4LFxuICAgIG1hcmdpblJpZ2h0OiBweCxcbiAgICBtYXJnaW5Cb3R0b206IHB4LFxuICAgIG1hcmdpbkxlZnQ6IHB4LFxuICAgIC8vIFRyYW5zZm9ybSBwcm9wc1xuICAgIHJvdGF0ZTogZGVncmVlcyxcbiAgICByb3RhdGVYOiBkZWdyZWVzLFxuICAgIHJvdGF0ZVk6IGRlZ3JlZXMsXG4gICAgcm90YXRlWjogZGVncmVlcyxcbiAgICBzY2FsZTogc2NhbGUsXG4gICAgc2NhbGVYOiBzY2FsZSxcbiAgICBzY2FsZVk6IHNjYWxlLFxuICAgIHNjYWxlWjogc2NhbGUsXG4gICAgc2tldzogZGVncmVlcyxcbiAgICBza2V3WDogZGVncmVlcyxcbiAgICBza2V3WTogZGVncmVlcyxcbiAgICBkaXN0YW5jZTogcHgsXG4gICAgdHJhbnNsYXRlWDogcHgsXG4gICAgdHJhbnNsYXRlWTogcHgsXG4gICAgdHJhbnNsYXRlWjogcHgsXG4gICAgeDogcHgsXG4gICAgeTogcHgsXG4gICAgejogcHgsXG4gICAgcGVyc3BlY3RpdmU6IHB4LFxuICAgIHRyYW5zZm9ybVBlcnNwZWN0aXZlOiBweCxcbiAgICBvcGFjaXR5OiBhbHBoYSxcbiAgICBvcmlnaW5YOiBwcm9ncmVzc1BlcmNlbnRhZ2UsXG4gICAgb3JpZ2luWTogcHJvZ3Jlc3NQZXJjZW50YWdlLFxuICAgIG9yaWdpblo6IHB4LFxuICAgIC8vIE1pc2NcbiAgICB6SW5kZXg6IGludCxcbiAgICAvLyBTVkdcbiAgICBmaWxsT3BhY2l0eTogYWxwaGEsXG4gICAgc3Ryb2tlT3BhY2l0eTogYWxwaGEsXG4gICAgbnVtT2N0YXZlczogaW50LFxufTtcblxuZXhwb3J0IHsgbnVtYmVyVmFsdWVUeXBlcyB9O1xuIiwiaW1wb3J0IHsgYnVpbGRUcmFuc2Zvcm0sIGJ1aWxkVHJhbnNmb3JtT3JpZ2luIH0gZnJvbSAnLi9idWlsZC10cmFuc2Zvcm0ubWpzJztcbmltcG9ydCB7IGlzQ1NTVmFyaWFibGUgfSBmcm9tICcuLi8uLi9kb20vdXRpbHMvaXMtY3NzLXZhcmlhYmxlLm1qcyc7XG5pbXBvcnQgeyBpc1RyYW5zZm9ybVByb3AsIGlzVHJhbnNmb3JtT3JpZ2luUHJvcCB9IGZyb20gJy4vdHJhbnNmb3JtLm1qcyc7XG5pbXBvcnQgeyBnZXRWYWx1ZUFzVHlwZSB9IGZyb20gJy4uLy4uL2RvbS92YWx1ZS10eXBlcy9nZXQtYXMtdHlwZS5tanMnO1xuaW1wb3J0IHsgbnVtYmVyVmFsdWVUeXBlcyB9IGZyb20gJy4uLy4uL2RvbS92YWx1ZS10eXBlcy9udW1iZXIubWpzJztcblxuZnVuY3Rpb24gYnVpbGRIVE1MU3R5bGVzKHN0YXRlLCBsYXRlc3RWYWx1ZXMsIG9wdGlvbnMsIHRyYW5zZm9ybVRlbXBsYXRlKSB7XG4gICAgdmFyIF9hO1xuICAgIHZhciBzdHlsZSA9IHN0YXRlLnN0eWxlLCB2YXJzID0gc3RhdGUudmFycywgdHJhbnNmb3JtID0gc3RhdGUudHJhbnNmb3JtLCB0cmFuc2Zvcm1LZXlzID0gc3RhdGUudHJhbnNmb3JtS2V5cywgdHJhbnNmb3JtT3JpZ2luID0gc3RhdGUudHJhbnNmb3JtT3JpZ2luO1xuICAgIC8vIEVtcHR5IHRoZSB0cmFuc2Zvcm1LZXlzIGFycmF5LiBBcyB3ZSdyZSB0aHJvd2luZyBvdXQgcmVmcyB0byBpdHMgaXRlbXNcbiAgICAvLyB0aGlzIG1pZ2h0IG5vdCBiZSBhcyBjaGVhcCBhcyBzdXNwZWN0ZWQuIE1heWJlIHVzaW5nIHRoZSBhcnJheSBhcyBhIGJ1ZmZlclxuICAgIC8vIHdpdGggYSBtYW51YWwgaW5jcmVtZW50YXRpb24gd291bGQgYmUgYmV0dGVyLlxuICAgIHRyYW5zZm9ybUtleXMubGVuZ3RoID0gMDtcbiAgICAvLyBUcmFjayB3aGV0aGVyIHdlIGVuY291bnRlciBhbnkgdHJhbnNmb3JtIG9yIHRyYW5zZm9ybU9yaWdpbiB2YWx1ZXMuXG4gICAgdmFyIGhhc1RyYW5zZm9ybSA9IGZhbHNlO1xuICAgIHZhciBoYXNUcmFuc2Zvcm1PcmlnaW4gPSBmYWxzZTtcbiAgICAvLyBEb2VzIHRoZSBjYWxjdWxhdGVkIHRyYW5zZm9ybSBlc3NlbnRpYWxseSBlcXVhbCBcIm5vbmVcIj9cbiAgICB2YXIgdHJhbnNmb3JtSXNOb25lID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiBMb29wIG92ZXIgYWxsIG91ciBsYXRlc3QgYW5pbWF0ZWQgdmFsdWVzIGFuZCBkZWNpZGUgd2hldGhlciB0byBoYW5kbGUgdGhlbVxuICAgICAqIGFzIGEgc3R5bGUgb3IgQ1NTIHZhcmlhYmxlLlxuICAgICAqXG4gICAgICogVHJhbnNmb3JtcyBhbmQgdHJhbnNmb3JtIG9yaWdpbnMgYXJlIGtlcHQgc2VwZXJhdGVseSBmb3IgZnVydGhlciBwcm9jZXNzaW5nLlxuICAgICAqL1xuICAgIGZvciAodmFyIGtleSBpbiBsYXRlc3RWYWx1ZXMpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gbGF0ZXN0VmFsdWVzW2tleV07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiB0aGlzIGlzIGEgQ1NTIHZhcmlhYmxlIHdlIGRvbid0IGRvIGFueSBmdXJ0aGVyIHByb2Nlc3NpbmcuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoaXNDU1NWYXJpYWJsZShrZXkpKSB7XG4gICAgICAgICAgICB2YXJzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIENvbnZlcnQgdGhlIHZhbHVlIHRvIGl0cyBkZWZhdWx0IHZhbHVlIHR5cGUsIGllIDAgLT4gXCIwcHhcIlxuICAgICAgICB2YXIgdmFsdWVUeXBlID0gbnVtYmVyVmFsdWVUeXBlc1trZXldO1xuICAgICAgICB2YXIgdmFsdWVBc1R5cGUgPSBnZXRWYWx1ZUFzVHlwZSh2YWx1ZSwgdmFsdWVUeXBlKTtcbiAgICAgICAgaWYgKGlzVHJhbnNmb3JtUHJvcChrZXkpKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgdHJhbnNmb3JtLCBmbGFnIHRvIGVuYWJsZSBmdXJ0aGVyIHRyYW5zZm9ybSBwcm9jZXNzaW5nXG4gICAgICAgICAgICBoYXNUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICAgICAgdHJhbnNmb3JtW2tleV0gPSB2YWx1ZUFzVHlwZTtcbiAgICAgICAgICAgIHRyYW5zZm9ybUtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgLy8gSWYgd2UgYWxyZWFkeSBrbm93IHdlIGhhdmUgYSBub24tZGVmYXVsdCB0cmFuc2Zvcm0sIGVhcmx5IHJldHVyblxuICAgICAgICAgICAgaWYgKCF0cmFuc2Zvcm1Jc05vbmUpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAvLyBPdGhlcndpc2UgY2hlY2sgdG8gc2VlIGlmIHRoaXMgaXMgYSBkZWZhdWx0IHRyYW5zZm9ybVxuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSAoKF9hID0gdmFsdWVUeXBlLmRlZmF1bHQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDApKVxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybUlzTm9uZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzVHJhbnNmb3JtT3JpZ2luUHJvcChrZXkpKSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW5ba2V5XSA9IHZhbHVlQXNUeXBlO1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHRyYW5zZm9ybSBvcmlnaW4sIGZsYWcgYW5kIGVuYWJsZSBmdXJ0aGVyIHRyYW5zZm9ybS1vcmlnaW4gcHJvY2Vzc2luZ1xuICAgICAgICAgICAgaGFzVHJhbnNmb3JtT3JpZ2luID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN0eWxlW2tleV0gPSB2YWx1ZUFzVHlwZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGFzVHJhbnNmb3JtKSB7XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybSA9IGJ1aWxkVHJhbnNmb3JtKHN0YXRlLCBvcHRpb25zLCB0cmFuc2Zvcm1Jc05vbmUsIHRyYW5zZm9ybVRlbXBsYXRlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHJhbnNmb3JtVGVtcGxhdGUpIHtcbiAgICAgICAgc3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtVGVtcGxhdGUoe30sIFwiXCIpO1xuICAgIH1cbiAgICBlbHNlIGlmICghbGF0ZXN0VmFsdWVzLnRyYW5zZm9ybSAmJiBzdHlsZS50cmFuc2Zvcm0pIHtcbiAgICAgICAgc3R5bGUudHJhbnNmb3JtID0gXCJub25lXCI7XG4gICAgfVxuICAgIGlmIChoYXNUcmFuc2Zvcm1PcmlnaW4pIHtcbiAgICAgICAgc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gYnVpbGRUcmFuc2Zvcm1PcmlnaW4odHJhbnNmb3JtT3JpZ2luKTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IGJ1aWxkSFRNTFN0eWxlcyB9O1xuIiwidmFyIGNyZWF0ZUh0bWxSZW5kZXJTdGF0ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7XG4gICAgc3R5bGU6IHt9LFxuICAgIHRyYW5zZm9ybToge30sXG4gICAgdHJhbnNmb3JtS2V5czogW10sXG4gICAgdHJhbnNmb3JtT3JpZ2luOiB7fSxcbiAgICB2YXJzOiB7fSxcbn0pOyB9O1xuXG5leHBvcnQgeyBjcmVhdGVIdG1sUmVuZGVyU3RhdGUgfTtcbiIsImltcG9ydCB7IF9fYXNzaWduIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzRm9yY2VkTW90aW9uVmFsdWUgfSBmcm9tICcuLi8uLi9tb3Rpb24vdXRpbHMvaXMtZm9yY2VkLW1vdGlvbi12YWx1ZS5tanMnO1xuaW1wb3J0IHsgaXNNb3Rpb25WYWx1ZSB9IGZyb20gJy4uLy4uL3ZhbHVlL3V0aWxzL2lzLW1vdGlvbi12YWx1ZS5tanMnO1xuaW1wb3J0IHsgYnVpbGRIVE1MU3R5bGVzIH0gZnJvbSAnLi91dGlscy9idWlsZC1zdHlsZXMubWpzJztcbmltcG9ydCB7IGNyZWF0ZUh0bWxSZW5kZXJTdGF0ZSB9IGZyb20gJy4vdXRpbHMvY3JlYXRlLXJlbmRlci1zdGF0ZS5tanMnO1xuXG5mdW5jdGlvbiBjb3B5UmF3VmFsdWVzT25seSh0YXJnZXQsIHNvdXJjZSwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmICghaXNNb3Rpb25WYWx1ZShzb3VyY2Vba2V5XSkgJiYgIWlzRm9yY2VkTW90aW9uVmFsdWUoa2V5LCBwcm9wcykpIHtcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiB1c2VJbml0aWFsTW90aW9uVmFsdWVzKF9hLCB2aXN1YWxTdGF0ZSwgaXNTdGF0aWMpIHtcbiAgICB2YXIgdHJhbnNmb3JtVGVtcGxhdGUgPSBfYS50cmFuc2Zvcm1UZW1wbGF0ZTtcbiAgICByZXR1cm4gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGNyZWF0ZUh0bWxSZW5kZXJTdGF0ZSgpO1xuICAgICAgICBidWlsZEhUTUxTdHlsZXMoc3RhdGUsIHZpc3VhbFN0YXRlLCB7IGVuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uOiAhaXNTdGF0aWMgfSwgdHJhbnNmb3JtVGVtcGxhdGUpO1xuICAgICAgICB2YXIgdmFycyA9IHN0YXRlLnZhcnMsIHN0eWxlID0gc3RhdGUuc3R5bGU7XG4gICAgICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgdmFycyksIHN0eWxlKTtcbiAgICB9LCBbdmlzdWFsU3RhdGVdKTtcbn1cbmZ1bmN0aW9uIHVzZVN0eWxlKHByb3BzLCB2aXN1YWxTdGF0ZSwgaXNTdGF0aWMpIHtcbiAgICB2YXIgc3R5bGVQcm9wID0gcHJvcHMuc3R5bGUgfHwge307XG4gICAgdmFyIHN0eWxlID0ge307XG4gICAgLyoqXG4gICAgICogQ29weSBub24tTW90aW9uIFZhbHVlcyBzdHJhaWdodCBpbnRvIHN0eWxlXG4gICAgICovXG4gICAgY29weVJhd1ZhbHVlc09ubHkoc3R5bGUsIHN0eWxlUHJvcCwgcHJvcHMpO1xuICAgIE9iamVjdC5hc3NpZ24oc3R5bGUsIHVzZUluaXRpYWxNb3Rpb25WYWx1ZXMocHJvcHMsIHZpc3VhbFN0YXRlLCBpc1N0YXRpYykpO1xuICAgIGlmIChwcm9wcy50cmFuc2Zvcm1WYWx1ZXMpIHtcbiAgICAgICAgc3R5bGUgPSBwcm9wcy50cmFuc2Zvcm1WYWx1ZXMoc3R5bGUpO1xuICAgIH1cbiAgICByZXR1cm4gc3R5bGU7XG59XG5mdW5jdGlvbiB1c2VIVE1MUHJvcHMocHJvcHMsIHZpc3VhbFN0YXRlLCBpc1N0YXRpYykge1xuICAgIC8vIFRoZSBgYW55YCBpc24ndCBpZGVhbCBidXQgaXQgaXMgdGhlIHR5cGUgb2YgY3JlYXRlRWxlbWVudCBwcm9wcyBhcmd1bWVudFxuICAgIHZhciBodG1sUHJvcHMgPSB7fTtcbiAgICB2YXIgc3R5bGUgPSB1c2VTdHlsZShwcm9wcywgdmlzdWFsU3RhdGUsIGlzU3RhdGljKTtcbiAgICBpZiAoQm9vbGVhbihwcm9wcy5kcmFnKSAmJiBwcm9wcy5kcmFnTGlzdGVuZXIgIT09IGZhbHNlKSB7XG4gICAgICAgIC8vIERpc2FibGUgdGhlIGdob3N0IGVsZW1lbnQgd2hlbiBhIHVzZXIgZHJhZ3NcbiAgICAgICAgaHRtbFByb3BzLmRyYWdnYWJsZSA9IGZhbHNlO1xuICAgICAgICAvLyBEaXNhYmxlIHRleHQgc2VsZWN0aW9uXG4gICAgICAgIHN0eWxlLnVzZXJTZWxlY3QgPVxuICAgICAgICAgICAgc3R5bGUuV2Via2l0VXNlclNlbGVjdCA9XG4gICAgICAgICAgICAgICAgc3R5bGUuV2Via2l0VG91Y2hDYWxsb3V0ID1cbiAgICAgICAgICAgICAgICAgICAgXCJub25lXCI7XG4gICAgICAgIC8vIERpc2FibGUgc2Nyb2xsaW5nIG9uIHRoZSBkcmFnZ2FibGUgZGlyZWN0aW9uXG4gICAgICAgIHN0eWxlLnRvdWNoQWN0aW9uID1cbiAgICAgICAgICAgIHByb3BzLmRyYWcgPT09IHRydWVcbiAgICAgICAgICAgICAgICA/IFwibm9uZVwiXG4gICAgICAgICAgICAgICAgOiBcInBhbi1cIi5jb25jYXQocHJvcHMuZHJhZyA9PT0gXCJ4XCIgPyBcInlcIiA6IFwieFwiKTtcbiAgICB9XG4gICAgaHRtbFByb3BzLnN0eWxlID0gc3R5bGU7XG4gICAgcmV0dXJuIGh0bWxQcm9wcztcbn1cblxuZXhwb3J0IHsgY29weVJhd1ZhbHVlc09ubHksIHVzZUhUTUxQcm9wcywgdXNlU3R5bGUgfTtcbiIsIi8qKlxuICogQSBsaXN0IG9mIGFsbCB2YWxpZCBNb3Rpb25Qcm9wcy5cbiAqXG4gKiBAcHJpdmF0ZVJlbWFya3NcbiAqIFRoaXMgZG9lc24ndCB0aHJvdyBpZiBhIGBNb3Rpb25Qcm9wYCBuYW1lIGlzIG1pc3NpbmcgLSBpdCBzaG91bGQuXG4gKi9cbnZhciB2YWxpZE1vdGlvblByb3BzID0gbmV3IFNldChbXG4gICAgXCJpbml0aWFsXCIsXG4gICAgXCJhbmltYXRlXCIsXG4gICAgXCJleGl0XCIsXG4gICAgXCJzdHlsZVwiLFxuICAgIFwidmFyaWFudHNcIixcbiAgICBcInRyYW5zaXRpb25cIixcbiAgICBcInRyYW5zZm9ybVRlbXBsYXRlXCIsXG4gICAgXCJ0cmFuc2Zvcm1WYWx1ZXNcIixcbiAgICBcImN1c3RvbVwiLFxuICAgIFwiaW5oZXJpdFwiLFxuICAgIFwibGF5b3V0XCIsXG4gICAgXCJsYXlvdXRJZFwiLFxuICAgIFwibGF5b3V0RGVwZW5kZW5jeVwiLFxuICAgIFwib25MYXlvdXRBbmltYXRpb25TdGFydFwiLFxuICAgIFwib25MYXlvdXRBbmltYXRpb25Db21wbGV0ZVwiLFxuICAgIFwib25MYXlvdXRNZWFzdXJlXCIsXG4gICAgXCJvbkJlZm9yZUxheW91dE1lYXN1cmVcIixcbiAgICBcIm9uQW5pbWF0aW9uU3RhcnRcIixcbiAgICBcIm9uQW5pbWF0aW9uQ29tcGxldGVcIixcbiAgICBcIm9uVXBkYXRlXCIsXG4gICAgXCJvbkRyYWdTdGFydFwiLFxuICAgIFwib25EcmFnXCIsXG4gICAgXCJvbkRyYWdFbmRcIixcbiAgICBcIm9uTWVhc3VyZURyYWdDb25zdHJhaW50c1wiLFxuICAgIFwib25EaXJlY3Rpb25Mb2NrXCIsXG4gICAgXCJvbkRyYWdUcmFuc2l0aW9uRW5kXCIsXG4gICAgXCJkcmFnXCIsXG4gICAgXCJkcmFnQ29udHJvbHNcIixcbiAgICBcImRyYWdMaXN0ZW5lclwiLFxuICAgIFwiZHJhZ0NvbnN0cmFpbnRzXCIsXG4gICAgXCJkcmFnRGlyZWN0aW9uTG9ja1wiLFxuICAgIFwiZHJhZ1NuYXBUb09yaWdpblwiLFxuICAgIFwiX2RyYWdYXCIsXG4gICAgXCJfZHJhZ1lcIixcbiAgICBcImRyYWdFbGFzdGljXCIsXG4gICAgXCJkcmFnTW9tZW50dW1cIixcbiAgICBcImRyYWdQcm9wYWdhdGlvblwiLFxuICAgIFwiZHJhZ1RyYW5zaXRpb25cIixcbiAgICBcIndoaWxlRHJhZ1wiLFxuICAgIFwib25QYW5cIixcbiAgICBcIm9uUGFuU3RhcnRcIixcbiAgICBcIm9uUGFuRW5kXCIsXG4gICAgXCJvblBhblNlc3Npb25TdGFydFwiLFxuICAgIFwib25UYXBcIixcbiAgICBcIm9uVGFwU3RhcnRcIixcbiAgICBcIm9uVGFwQ2FuY2VsXCIsXG4gICAgXCJvbkhvdmVyU3RhcnRcIixcbiAgICBcIm9uSG92ZXJFbmRcIixcbiAgICBcIndoaWxlRm9jdXNcIixcbiAgICBcIndoaWxlVGFwXCIsXG4gICAgXCJ3aGlsZUhvdmVyXCIsXG4gICAgXCJ3aGlsZUluVmlld1wiLFxuICAgIFwib25WaWV3cG9ydEVudGVyXCIsXG4gICAgXCJvblZpZXdwb3J0TGVhdmVcIixcbiAgICBcInZpZXdwb3J0XCIsXG4gICAgXCJsYXlvdXRTY3JvbGxcIixcbl0pO1xuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGEgcHJvcCBuYW1lIGlzIGEgdmFsaWQgYE1vdGlvblByb3BgIGtleS5cbiAqXG4gKiBAcGFyYW0ga2V5IC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gY2hlY2tcbiAqIEByZXR1cm5zIGB0cnVlYCBpcyBrZXkgaXMgYSB2YWxpZCBgTW90aW9uUHJvcGAuXG4gKlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBpc1ZhbGlkTW90aW9uUHJvcChrZXkpIHtcbiAgICByZXR1cm4gdmFsaWRNb3Rpb25Qcm9wcy5oYXMoa2V5KTtcbn1cblxuZXhwb3J0IHsgaXNWYWxpZE1vdGlvblByb3AgfTtcbiIsImltcG9ydCB7IGlzVmFsaWRNb3Rpb25Qcm9wIH0gZnJvbSAnLi4vLi4vLi4vbW90aW9uL3V0aWxzL3ZhbGlkLXByb3AubWpzJztcblxudmFyIHNob3VsZEZvcndhcmQgPSBmdW5jdGlvbiAoa2V5KSB7IHJldHVybiAhaXNWYWxpZE1vdGlvblByb3Aoa2V5KTsgfTtcbmZ1bmN0aW9uIGxvYWRFeHRlcm5hbElzVmFsaWRQcm9wKGlzVmFsaWRQcm9wKSB7XG4gICAgaWYgKCFpc1ZhbGlkUHJvcClcbiAgICAgICAgcmV0dXJuO1xuICAgIC8vIEV4cGxpY2l0bHkgZmlsdGVyIG91ciBldmVudHNcbiAgICBzaG91bGRGb3J3YXJkID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4ga2V5LnN0YXJ0c1dpdGgoXCJvblwiKSA/ICFpc1ZhbGlkTW90aW9uUHJvcChrZXkpIDogaXNWYWxpZFByb3Aoa2V5KTtcbiAgICB9O1xufVxuLyoqXG4gKiBFbW90aW9uIGFuZCBTdHlsZWQgQ29tcG9uZW50cyBib3RoIGFsbG93IHVzZXJzIHRvIHBhc3MgdGhyb3VnaCBhcmJpdHJhcnkgcHJvcHMgdG8gdGhlaXIgY29tcG9uZW50c1xuICogdG8gZHluYW1pY2FsbHkgZ2VuZXJhdGUgQ1NTLiBUaGV5IGJvdGggdXNlIHRoZSBgQGVtb3Rpb24vaXMtcHJvcC12YWxpZGAgcGFja2FnZSB0byBkZXRlcm1pbmUgd2hpY2hcbiAqIG9mIHRoZXNlIHNob3VsZCBiZSBwYXNzZWQgdG8gdGhlIHVuZGVybHlpbmcgRE9NIG5vZGUuXG4gKlxuICogSG93ZXZlciwgd2hlbiBzdHlsaW5nIGEgTW90aW9uIGNvbXBvbmVudCBgc3R5bGVkKG1vdGlvbi5kaXYpYCwgYm90aCBwYWNrYWdlcyBwYXNzIHRocm91Z2ggKmFsbCogcHJvcHNcbiAqIGFzIGl0J3Mgc2VlbiBhcyBhbiBhcmJpdHJhcnkgY29tcG9uZW50IHJhdGhlciB0aGFuIGEgRE9NIG5vZGUuIE1vdGlvbiBvbmx5IGFsbG93cyBhcmJpdHJhcnkgcHJvcHNcbiAqIHBhc3NlZCB0aHJvdWdoIHRoZSBgY3VzdG9tYCBwcm9wIHNvIGl0IGRvZXNuJ3QgKm5lZWQqIHRoZSBwYXlsb2FkIG9yIGNvbXB1dGF0aW9uYWwgb3ZlcmhlYWQgb2ZcbiAqIGBAZW1vdGlvbi9pcy1wcm9wLXZhbGlkYCwgaG93ZXZlciB0byBmaXggdGhpcyBwcm9ibGVtIHdlIG5lZWQgdG8gdXNlIGl0LlxuICpcbiAqIEJ5IG1ha2luZyBpdCBhbiBvcHRpb25hbERlcGVuZGVuY3kgd2UgY2FuIG9mZmVyIHRoaXMgZnVuY3Rpb25hbGl0eSBvbmx5IGluIHRoZSBzaXR1YXRpb25zIHdoZXJlIGl0J3NcbiAqIGFjdHVhbGx5IHJlcXVpcmVkLlxuICovXG50cnkge1xuICAgIC8qKlxuICAgICAqIFdlIGF0dGVtcHQgdG8gaW1wb3J0IHRoaXMgcGFja2FnZSBidXQgcmVxdWlyZSB3b24ndCBiZSBkZWZpbmVkIGluIGVzbSBlbnZpcm9ubWVudHMsIGluIHRoYXQgY2FzZVxuICAgICAqIGlzUHJvcFZhbGlkIHdpbGwgaGF2ZSB0byBiZSBwcm92aWRlZCB2aWEgYE1vdGlvbkNvbnRleHRgLiBJbiBhIDYuMC4wIHRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIHJlbW92ZWRcbiAgICAgKiBpbiBmYXZvdXIgb2YgZXhwbGljaXQgaW5qZWN0aW9uLlxuICAgICAqL1xuICAgIGxvYWRFeHRlcm5hbElzVmFsaWRQcm9wKHJlcXVpcmUoXCJAZW1vdGlvbi9pcy1wcm9wLXZhbGlkXCIpLmRlZmF1bHQpO1xufVxuY2F0Y2ggKF9hKSB7XG4gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBhY3R1YWxseSBkbyBhbnl0aGluZyBoZXJlIC0gdGhlIGZhbGxiYWNrIGlzIHRoZSBleGlzdGluZyBgaXNQcm9wVmFsaWRgLlxufVxuZnVuY3Rpb24gZmlsdGVyUHJvcHMocHJvcHMsIGlzRG9tLCBmb3J3YXJkTW90aW9uUHJvcHMpIHtcbiAgICB2YXIgZmlsdGVyZWRQcm9wcyA9IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgICBpZiAoc2hvdWxkRm9yd2FyZChrZXkpIHx8XG4gICAgICAgICAgICAoZm9yd2FyZE1vdGlvblByb3BzID09PSB0cnVlICYmIGlzVmFsaWRNb3Rpb25Qcm9wKGtleSkpIHx8XG4gICAgICAgICAgICAoIWlzRG9tICYmICFpc1ZhbGlkTW90aW9uUHJvcChrZXkpKSB8fFxuICAgICAgICAgICAgLy8gSWYgdHJ5aW5nIHRvIHVzZSBuYXRpdmUgSFRNTCBkcmFnIGV2ZW50cywgZm9yd2FyZCBkcmFnIGxpc3RlbmVyc1xuICAgICAgICAgICAgKHByb3BzW1wiZHJhZ2dhYmxlXCJdICYmIGtleS5zdGFydHNXaXRoKFwib25EcmFnXCIpKSkge1xuICAgICAgICAgICAgZmlsdGVyZWRQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmlsdGVyZWRQcm9wcztcbn1cblxuZXhwb3J0IHsgZmlsdGVyUHJvcHMsIGxvYWRFeHRlcm5hbElzVmFsaWRQcm9wIH07XG4iLCJpbXBvcnQgeyBweCB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcblxuZnVuY3Rpb24gY2FsY09yaWdpbihvcmlnaW4sIG9mZnNldCwgc2l6ZSkge1xuICAgIHJldHVybiB0eXBlb2Ygb3JpZ2luID09PSBcInN0cmluZ1wiXG4gICAgICAgID8gb3JpZ2luXG4gICAgICAgIDogcHgudHJhbnNmb3JtKG9mZnNldCArIHNpemUgKiBvcmlnaW4pO1xufVxuLyoqXG4gKiBUaGUgU1ZHIHRyYW5zZm9ybSBvcmlnaW4gZGVmYXVsdHMgYXJlIGRpZmZlcmVudCB0byBDU1MgYW5kIGlzIGxlc3MgaW50dWl0aXZlLFxuICogc28gd2UgdXNlIHRoZSBtZWFzdXJlZCBkaW1lbnNpb25zIG9mIHRoZSBTVkcgdG8gcmVjb25jaWxlIHRoZXNlLlxuICovXG5mdW5jdGlvbiBjYWxjU1ZHVHJhbnNmb3JtT3JpZ2luKGRpbWVuc2lvbnMsIG9yaWdpblgsIG9yaWdpblkpIHtcbiAgICB2YXIgcHhPcmlnaW5YID0gY2FsY09yaWdpbihvcmlnaW5YLCBkaW1lbnNpb25zLngsIGRpbWVuc2lvbnMud2lkdGgpO1xuICAgIHZhciBweE9yaWdpblkgPSBjYWxjT3JpZ2luKG9yaWdpblksIGRpbWVuc2lvbnMueSwgZGltZW5zaW9ucy5oZWlnaHQpO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChweE9yaWdpblgsIFwiIFwiKS5jb25jYXQocHhPcmlnaW5ZKTtcbn1cblxuZXhwb3J0IHsgY2FsY1NWR1RyYW5zZm9ybU9yaWdpbiB9O1xuIiwiaW1wb3J0IHsgcHggfSBmcm9tICdzdHlsZS12YWx1ZS10eXBlcyc7XG5cbnZhciBkYXNoS2V5cyA9IHtcbiAgICBvZmZzZXQ6IFwic3Ryb2tlLWRhc2hvZmZzZXRcIixcbiAgICBhcnJheTogXCJzdHJva2UtZGFzaGFycmF5XCIsXG59O1xudmFyIGNhbWVsS2V5cyA9IHtcbiAgICBvZmZzZXQ6IFwic3Ryb2tlRGFzaG9mZnNldFwiLFxuICAgIGFycmF5OiBcInN0cm9rZURhc2hhcnJheVwiLFxufTtcbi8qKlxuICogQnVpbGQgU1ZHIHBhdGggcHJvcGVydGllcy4gVXNlcyB0aGUgcGF0aCdzIG1lYXN1cmVkIGxlbmd0aCB0byBjb252ZXJ0XG4gKiBvdXIgY3VzdG9tIHBhdGhMZW5ndGgsIHBhdGhTcGFjaW5nIGFuZCBwYXRoT2Zmc2V0IGludG8gc3Ryb2tlLWRhc2hvZmZzZXRcbiAqIGFuZCBzdHJva2UtZGFzaGFycmF5IGF0dHJpYnV0ZXMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpcyBtdXRhdGl2ZSB0byByZWR1Y2UgcGVyLWZyYW1lIEdDLlxuICovXG5mdW5jdGlvbiBidWlsZFNWR1BhdGgoYXR0cnMsIGxlbmd0aCwgc3BhY2luZywgb2Zmc2V0LCB1c2VEYXNoQ2FzZSkge1xuICAgIGlmIChzcGFjaW5nID09PSB2b2lkIDApIHsgc3BhY2luZyA9IDE7IH1cbiAgICBpZiAob2Zmc2V0ID09PSB2b2lkIDApIHsgb2Zmc2V0ID0gMDsgfVxuICAgIGlmICh1c2VEYXNoQ2FzZSA9PT0gdm9pZCAwKSB7IHVzZURhc2hDYXNlID0gdHJ1ZTsgfVxuICAgIC8vIE5vcm1hbGlzZSBwYXRoIGxlbmd0aCBieSBzZXR0aW5nIFNWRyBhdHRyaWJ1dGUgcGF0aExlbmd0aCB0byAxXG4gICAgYXR0cnMucGF0aExlbmd0aCA9IDE7XG4gICAgLy8gV2UgdXNlIGRhc2ggY2FzZSB3aGVuIHNldHRpbmcgYXR0cmlidXRlcyBkaXJlY3RseSB0byB0aGUgRE9NIG5vZGUgYW5kIGNhbWVsIGNhc2VcbiAgICAvLyB3aGVuIGRlZmluaW5nIHByb3BzIG9uIGEgUmVhY3QgY29tcG9uZW50LlxuICAgIHZhciBrZXlzID0gdXNlRGFzaENhc2UgPyBkYXNoS2V5cyA6IGNhbWVsS2V5cztcbiAgICAvLyBCdWlsZCB0aGUgZGFzaCBvZmZzZXRcbiAgICBhdHRyc1trZXlzLm9mZnNldF0gPSBweC50cmFuc2Zvcm0oLW9mZnNldCk7XG4gICAgLy8gQnVpbGQgdGhlIGRhc2ggYXJyYXlcbiAgICB2YXIgcGF0aExlbmd0aCA9IHB4LnRyYW5zZm9ybShsZW5ndGgpO1xuICAgIHZhciBwYXRoU3BhY2luZyA9IHB4LnRyYW5zZm9ybShzcGFjaW5nKTtcbiAgICBhdHRyc1trZXlzLmFycmF5XSA9IFwiXCIuY29uY2F0KHBhdGhMZW5ndGgsIFwiIFwiKS5jb25jYXQocGF0aFNwYWNpbmcpO1xufVxuXG5leHBvcnQgeyBidWlsZFNWR1BhdGggfTtcbiIsImltcG9ydCB7IF9fcmVzdCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IGJ1aWxkSFRNTFN0eWxlcyB9IGZyb20gJy4uLy4uL2h0bWwvdXRpbHMvYnVpbGQtc3R5bGVzLm1qcyc7XG5pbXBvcnQgeyBjYWxjU1ZHVHJhbnNmb3JtT3JpZ2luIH0gZnJvbSAnLi90cmFuc2Zvcm0tb3JpZ2luLm1qcyc7XG5pbXBvcnQgeyBidWlsZFNWR1BhdGggfSBmcm9tICcuL3BhdGgubWpzJztcblxuLyoqXG4gKiBCdWlsZCBTVkcgdmlzdWFsIGF0dHJidXRlcywgbGlrZSBjeCBhbmQgc3R5bGUudHJhbnNmb3JtXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkU1ZHQXR0cnMoc3RhdGUsIF9hLCBvcHRpb25zLCB0cmFuc2Zvcm1UZW1wbGF0ZSkge1xuICAgIHZhciBhdHRyWCA9IF9hLmF0dHJYLCBhdHRyWSA9IF9hLmF0dHJZLCBvcmlnaW5YID0gX2Eub3JpZ2luWCwgb3JpZ2luWSA9IF9hLm9yaWdpblksIHBhdGhMZW5ndGggPSBfYS5wYXRoTGVuZ3RoLCBfYiA9IF9hLnBhdGhTcGFjaW5nLCBwYXRoU3BhY2luZyA9IF9iID09PSB2b2lkIDAgPyAxIDogX2IsIF9jID0gX2EucGF0aE9mZnNldCwgcGF0aE9mZnNldCA9IF9jID09PSB2b2lkIDAgPyAwIDogX2MsIFxuICAgIC8vIFRoaXMgaXMgb2JqZWN0IGNyZWF0aW9uLCB3aGljaCB3ZSB0cnkgdG8gYXZvaWQgcGVyLWZyYW1lLlxuICAgIGxhdGVzdCA9IF9fcmVzdChfYSwgW1wiYXR0clhcIiwgXCJhdHRyWVwiLCBcIm9yaWdpblhcIiwgXCJvcmlnaW5ZXCIsIFwicGF0aExlbmd0aFwiLCBcInBhdGhTcGFjaW5nXCIsIFwicGF0aE9mZnNldFwiXSk7XG4gICAgYnVpbGRIVE1MU3R5bGVzKHN0YXRlLCBsYXRlc3QsIG9wdGlvbnMsIHRyYW5zZm9ybVRlbXBsYXRlKTtcbiAgICBzdGF0ZS5hdHRycyA9IHN0YXRlLnN0eWxlO1xuICAgIHN0YXRlLnN0eWxlID0ge307XG4gICAgdmFyIGF0dHJzID0gc3RhdGUuYXR0cnMsIHN0eWxlID0gc3RhdGUuc3R5bGUsIGRpbWVuc2lvbnMgPSBzdGF0ZS5kaW1lbnNpb25zO1xuICAgIC8qKlxuICAgICAqIEhvd2V2ZXIsIHdlIGFwcGx5IHRyYW5zZm9ybXMgYXMgQ1NTIHRyYW5zZm9ybXMuIFNvIGlmIHdlIGRldGVjdCBhIHRyYW5zZm9ybSB3ZSB0YWtlIGl0IGZyb20gYXR0cnNcbiAgICAgKiBhbmQgY29weSBpdCBpbnRvIHN0eWxlLlxuICAgICAqL1xuICAgIGlmIChhdHRycy50cmFuc2Zvcm0pIHtcbiAgICAgICAgaWYgKGRpbWVuc2lvbnMpXG4gICAgICAgICAgICBzdHlsZS50cmFuc2Zvcm0gPSBhdHRycy50cmFuc2Zvcm07XG4gICAgICAgIGRlbGV0ZSBhdHRycy50cmFuc2Zvcm07XG4gICAgfVxuICAgIC8vIFBhcnNlIHRyYW5zZm9ybU9yaWdpblxuICAgIGlmIChkaW1lbnNpb25zICYmXG4gICAgICAgIChvcmlnaW5YICE9PSB1bmRlZmluZWQgfHwgb3JpZ2luWSAhPT0gdW5kZWZpbmVkIHx8IHN0eWxlLnRyYW5zZm9ybSkpIHtcbiAgICAgICAgc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gY2FsY1NWR1RyYW5zZm9ybU9yaWdpbihkaW1lbnNpb25zLCBvcmlnaW5YICE9PSB1bmRlZmluZWQgPyBvcmlnaW5YIDogMC41LCBvcmlnaW5ZICE9PSB1bmRlZmluZWQgPyBvcmlnaW5ZIDogMC41KTtcbiAgICB9XG4gICAgLy8gVHJlYXQgeC95IG5vdCBhcyBzaG9ydGN1dHMgYnV0IGFzIGFjdHVhbCBhdHRyaWJ1dGVzXG4gICAgaWYgKGF0dHJYICE9PSB1bmRlZmluZWQpXG4gICAgICAgIGF0dHJzLnggPSBhdHRyWDtcbiAgICBpZiAoYXR0clkgIT09IHVuZGVmaW5lZClcbiAgICAgICAgYXR0cnMueSA9IGF0dHJZO1xuICAgIC8vIEJ1aWxkIFNWRyBwYXRoIGlmIG9uZSBoYXMgYmVlbiBkZWZpbmVkXG4gICAgaWYgKHBhdGhMZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBidWlsZFNWR1BhdGgoYXR0cnMsIHBhdGhMZW5ndGgsIHBhdGhTcGFjaW5nLCBwYXRoT2Zmc2V0LCBmYWxzZSk7XG4gICAgfVxufVxuXG5leHBvcnQgeyBidWlsZFNWR0F0dHJzIH07XG4iLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IGNyZWF0ZUh0bWxSZW5kZXJTdGF0ZSB9IGZyb20gJy4uLy4uL2h0bWwvdXRpbHMvY3JlYXRlLXJlbmRlci1zdGF0ZS5tanMnO1xuXG52YXIgY3JlYXRlU3ZnUmVuZGVyU3RhdGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAoX19hc3NpZ24oX19hc3NpZ24oe30sIGNyZWF0ZUh0bWxSZW5kZXJTdGF0ZSgpKSwgeyBhdHRyczoge30gfSkpOyB9O1xuXG5leHBvcnQgeyBjcmVhdGVTdmdSZW5kZXJTdGF0ZSB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY29weVJhd1ZhbHVlc09ubHkgfSBmcm9tICcuLi9odG1sL3VzZS1wcm9wcy5tanMnO1xuaW1wb3J0IHsgYnVpbGRTVkdBdHRycyB9IGZyb20gJy4vdXRpbHMvYnVpbGQtYXR0cnMubWpzJztcbmltcG9ydCB7IGNyZWF0ZVN2Z1JlbmRlclN0YXRlIH0gZnJvbSAnLi91dGlscy9jcmVhdGUtcmVuZGVyLXN0YXRlLm1qcyc7XG5cbmZ1bmN0aW9uIHVzZVNWR1Byb3BzKHByb3BzLCB2aXN1YWxTdGF0ZSkge1xuICAgIHZhciB2aXN1YWxQcm9wcyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc3RhdGUgPSBjcmVhdGVTdmdSZW5kZXJTdGF0ZSgpO1xuICAgICAgICBidWlsZFNWR0F0dHJzKHN0YXRlLCB2aXN1YWxTdGF0ZSwgeyBlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbjogZmFsc2UgfSwgcHJvcHMudHJhbnNmb3JtVGVtcGxhdGUpO1xuICAgICAgICByZXR1cm4gX19hc3NpZ24oX19hc3NpZ24oe30sIHN0YXRlLmF0dHJzKSwgeyBzdHlsZTogX19hc3NpZ24oe30sIHN0YXRlLnN0eWxlKSB9KTtcbiAgICB9LCBbdmlzdWFsU3RhdGVdKTtcbiAgICBpZiAocHJvcHMuc3R5bGUpIHtcbiAgICAgICAgdmFyIHJhd1N0eWxlcyA9IHt9O1xuICAgICAgICBjb3B5UmF3VmFsdWVzT25seShyYXdTdHlsZXMsIHByb3BzLnN0eWxlLCBwcm9wcyk7XG4gICAgICAgIHZpc3VhbFByb3BzLnN0eWxlID0gX19hc3NpZ24oX19hc3NpZ24oe30sIHJhd1N0eWxlcyksIHZpc3VhbFByb3BzLnN0eWxlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZpc3VhbFByb3BzO1xufVxuXG5leHBvcnQgeyB1c2VTVkdQcm9wcyB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlSFRNTFByb3BzIH0gZnJvbSAnLi4vaHRtbC91c2UtcHJvcHMubWpzJztcbmltcG9ydCB7IGZpbHRlclByb3BzIH0gZnJvbSAnLi91dGlscy9maWx0ZXItcHJvcHMubWpzJztcbmltcG9ydCB7IGlzU1ZHQ29tcG9uZW50IH0gZnJvbSAnLi91dGlscy9pcy1zdmctY29tcG9uZW50Lm1qcyc7XG5pbXBvcnQgeyB1c2VTVkdQcm9wcyB9IGZyb20gJy4uL3N2Zy91c2UtcHJvcHMubWpzJztcblxuZnVuY3Rpb24gY3JlYXRlVXNlUmVuZGVyKGZvcndhcmRNb3Rpb25Qcm9wcykge1xuICAgIGlmIChmb3J3YXJkTW90aW9uUHJvcHMgPT09IHZvaWQgMCkgeyBmb3J3YXJkTW90aW9uUHJvcHMgPSBmYWxzZTsgfVxuICAgIHZhciB1c2VSZW5kZXIgPSBmdW5jdGlvbiAoQ29tcG9uZW50LCBwcm9wcywgcHJvamVjdGlvbklkLCByZWYsIF9hLCBpc1N0YXRpYykge1xuICAgICAgICB2YXIgbGF0ZXN0VmFsdWVzID0gX2EubGF0ZXN0VmFsdWVzO1xuICAgICAgICB2YXIgdXNlVmlzdWFsUHJvcHMgPSBpc1NWR0NvbXBvbmVudChDb21wb25lbnQpXG4gICAgICAgICAgICA/IHVzZVNWR1Byb3BzXG4gICAgICAgICAgICA6IHVzZUhUTUxQcm9wcztcbiAgICAgICAgdmFyIHZpc3VhbFByb3BzID0gdXNlVmlzdWFsUHJvcHMocHJvcHMsIGxhdGVzdFZhbHVlcywgaXNTdGF0aWMpO1xuICAgICAgICB2YXIgZmlsdGVyZWRQcm9wcyA9IGZpbHRlclByb3BzKHByb3BzLCB0eXBlb2YgQ29tcG9uZW50ID09PSBcInN0cmluZ1wiLCBmb3J3YXJkTW90aW9uUHJvcHMpO1xuICAgICAgICB2YXIgZWxlbWVudFByb3BzID0gX19hc3NpZ24oX19hc3NpZ24oX19hc3NpZ24oe30sIGZpbHRlcmVkUHJvcHMpLCB2aXN1YWxQcm9wcyksIHsgcmVmOiByZWYgfSk7XG4gICAgICAgIGlmIChwcm9qZWN0aW9uSWQpIHtcbiAgICAgICAgICAgIGVsZW1lbnRQcm9wc1tcImRhdGEtcHJvamVjdGlvbi1pZFwiXSA9IHByb2plY3Rpb25JZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChDb21wb25lbnQsIGVsZW1lbnRQcm9wcyk7XG4gICAgfTtcbiAgICByZXR1cm4gdXNlUmVuZGVyO1xufVxuXG5leHBvcnQgeyBjcmVhdGVVc2VSZW5kZXIgfTtcbiIsInZhciBDQU1FTF9DQVNFX1BBVFRFUk4gPSAvKFthLXpdKShbQS1aXSkvZztcbnZhciBSRVBMQUNFX1RFTVBMQVRFID0gXCIkMS0kMlwiO1xuLyoqXG4gKiBDb252ZXJ0IGNhbWVsQ2FzZSB0byBkYXNoLWNhc2UgcHJvcGVydGllcy5cbiAqL1xudmFyIGNhbWVsVG9EYXNoID0gZnVuY3Rpb24gKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZShDQU1FTF9DQVNFX1BBVFRFUk4sIFJFUExBQ0VfVEVNUExBVEUpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG5leHBvcnQgeyBjYW1lbFRvRGFzaCB9O1xuIiwiZnVuY3Rpb24gcmVuZGVySFRNTChlbGVtZW50LCBfYSwgc3R5bGVQcm9wLCBwcm9qZWN0aW9uKSB7XG4gICAgdmFyIHN0eWxlID0gX2Euc3R5bGUsIHZhcnMgPSBfYS52YXJzO1xuICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUsIHByb2plY3Rpb24gJiYgcHJvamVjdGlvbi5nZXRQcm9qZWN0aW9uU3R5bGVzKHN0eWxlUHJvcCkpO1xuICAgIC8vIExvb3Agb3ZlciBhbnkgQ1NTIHZhcmlhYmxlcyBhbmQgYXNzaWduIHRob3NlLlxuICAgIGZvciAodmFyIGtleSBpbiB2YXJzKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCB2YXJzW2tleV0pO1xuICAgIH1cbn1cblxuZXhwb3J0IHsgcmVuZGVySFRNTCB9O1xuIiwiLyoqXG4gKiBBIHNldCBvZiBhdHRyaWJ1dGUgbmFtZXMgdGhhdCBhcmUgYWx3YXlzIHJlYWQvd3JpdHRlbiBhcyBjYW1lbCBjYXNlLlxuICovXG52YXIgY2FtZWxDYXNlQXR0cmlidXRlcyA9IG5ldyBTZXQoW1xuICAgIFwiYmFzZUZyZXF1ZW5jeVwiLFxuICAgIFwiZGlmZnVzZUNvbnN0YW50XCIsXG4gICAgXCJrZXJuZWxNYXRyaXhcIixcbiAgICBcImtlcm5lbFVuaXRMZW5ndGhcIixcbiAgICBcImtleVNwbGluZXNcIixcbiAgICBcImtleVRpbWVzXCIsXG4gICAgXCJsaW1pdGluZ0NvbmVBbmdsZVwiLFxuICAgIFwibWFya2VySGVpZ2h0XCIsXG4gICAgXCJtYXJrZXJXaWR0aFwiLFxuICAgIFwibnVtT2N0YXZlc1wiLFxuICAgIFwidGFyZ2V0WFwiLFxuICAgIFwidGFyZ2V0WVwiLFxuICAgIFwic3VyZmFjZVNjYWxlXCIsXG4gICAgXCJzcGVjdWxhckNvbnN0YW50XCIsXG4gICAgXCJzcGVjdWxhckV4cG9uZW50XCIsXG4gICAgXCJzdGREZXZpYXRpb25cIixcbiAgICBcInRhYmxlVmFsdWVzXCIsXG4gICAgXCJ2aWV3Qm94XCIsXG4gICAgXCJncmFkaWVudFRyYW5zZm9ybVwiLFxuICAgIFwicGF0aExlbmd0aFwiLFxuXSk7XG5cbmV4cG9ydCB7IGNhbWVsQ2FzZUF0dHJpYnV0ZXMgfTtcbiIsImltcG9ydCB7IGNhbWVsVG9EYXNoIH0gZnJvbSAnLi4vLi4vZG9tL3V0aWxzL2NhbWVsLXRvLWRhc2gubWpzJztcbmltcG9ydCB7IHJlbmRlckhUTUwgfSBmcm9tICcuLi8uLi9odG1sL3V0aWxzL3JlbmRlci5tanMnO1xuaW1wb3J0IHsgY2FtZWxDYXNlQXR0cmlidXRlcyB9IGZyb20gJy4vY2FtZWwtY2FzZS1hdHRycy5tanMnO1xuXG5mdW5jdGlvbiByZW5kZXJTVkcoZWxlbWVudCwgcmVuZGVyU3RhdGUsIF9zdHlsZVByb3AsIHByb2plY3Rpb24pIHtcbiAgICByZW5kZXJIVE1MKGVsZW1lbnQsIHJlbmRlclN0YXRlLCB1bmRlZmluZWQsIHByb2plY3Rpb24pO1xuICAgIGZvciAodmFyIGtleSBpbiByZW5kZXJTdGF0ZS5hdHRycykge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSghY2FtZWxDYXNlQXR0cmlidXRlcy5oYXMoa2V5KSA/IGNhbWVsVG9EYXNoKGtleSkgOiBrZXksIHJlbmRlclN0YXRlLmF0dHJzW2tleV0pO1xuICAgIH1cbn1cblxuZXhwb3J0IHsgcmVuZGVyU1ZHIH07XG4iLCJpbXBvcnQgeyBpc0ZvcmNlZE1vdGlvblZhbHVlIH0gZnJvbSAnLi4vLi4vLi4vbW90aW9uL3V0aWxzL2lzLWZvcmNlZC1tb3Rpb24tdmFsdWUubWpzJztcbmltcG9ydCB7IGlzTW90aW9uVmFsdWUgfSBmcm9tICcuLi8uLi8uLi92YWx1ZS91dGlscy9pcy1tb3Rpb24tdmFsdWUubWpzJztcblxuZnVuY3Rpb24gc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzKHByb3BzKSB7XG4gICAgdmFyIHN0eWxlID0gcHJvcHMuc3R5bGU7XG4gICAgdmFyIG5ld1ZhbHVlcyA9IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiBzdHlsZSkge1xuICAgICAgICBpZiAoaXNNb3Rpb25WYWx1ZShzdHlsZVtrZXldKSB8fCBpc0ZvcmNlZE1vdGlvblZhbHVlKGtleSwgcHJvcHMpKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZXNba2V5XSA9IHN0eWxlW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld1ZhbHVlcztcbn1cblxuZXhwb3J0IHsgc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzIH07XG4iLCJpbXBvcnQgeyBpc01vdGlvblZhbHVlIH0gZnJvbSAnLi4vLi4vLi4vdmFsdWUvdXRpbHMvaXMtbW90aW9uLXZhbHVlLm1qcyc7XG5pbXBvcnQgeyBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMgYXMgc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzJDEgfSBmcm9tICcuLi8uLi9odG1sL3V0aWxzL3NjcmFwZS1tb3Rpb24tdmFsdWVzLm1qcyc7XG5cbmZ1bmN0aW9uIHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyhwcm9wcykge1xuICAgIHZhciBuZXdWYWx1ZXMgPSBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMkMShwcm9wcyk7XG4gICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgICAgIGlmIChpc01vdGlvblZhbHVlKHByb3BzW2tleV0pKSB7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0S2V5ID0ga2V5ID09PSBcInhcIiB8fCBrZXkgPT09IFwieVwiID8gXCJhdHRyXCIgKyBrZXkudG9VcHBlckNhc2UoKSA6IGtleTtcbiAgICAgICAgICAgIG5ld1ZhbHVlc1t0YXJnZXRLZXldID0gcHJvcHNba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3VmFsdWVzO1xufVxuXG5leHBvcnQgeyBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMgfTtcbiIsImZ1bmN0aW9uIGlzQW5pbWF0aW9uQ29udHJvbHModikge1xuICAgIHJldHVybiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2Ygdi5zdGFydCA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG5leHBvcnQgeyBpc0FuaW1hdGlvbkNvbnRyb2xzIH07XG4iLCJ2YXIgaXNLZXlmcmFtZXNUYXJnZXQgPSBmdW5jdGlvbiAodikge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHYpO1xufTtcblxuZXhwb3J0IHsgaXNLZXlmcmFtZXNUYXJnZXQgfTtcbiIsImltcG9ydCB7IGlzS2V5ZnJhbWVzVGFyZ2V0IH0gZnJvbSAnLi4vYW5pbWF0aW9uL3V0aWxzL2lzLWtleWZyYW1lcy10YXJnZXQubWpzJztcblxudmFyIGlzQ3VzdG9tVmFsdWUgPSBmdW5jdGlvbiAodikge1xuICAgIHJldHVybiBCb29sZWFuKHYgJiYgdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdi5taXggJiYgdi50b1ZhbHVlKTtcbn07XG52YXIgcmVzb2x2ZUZpbmFsVmFsdWVJbktleWZyYW1lcyA9IGZ1bmN0aW9uICh2KSB7XG4gICAgLy8gVE9ETyBtYXliZSB0aHJvdyBpZiB2Lmxlbmd0aCAtIDEgaXMgcGxhY2Vob2xkZXIgdG9rZW4/XG4gICAgcmV0dXJuIGlzS2V5ZnJhbWVzVGFyZ2V0KHYpID8gdlt2Lmxlbmd0aCAtIDFdIHx8IDAgOiB2O1xufTtcblxuZXhwb3J0IHsgaXNDdXN0b21WYWx1ZSwgcmVzb2x2ZUZpbmFsVmFsdWVJbktleWZyYW1lcyB9O1xuIiwiaW1wb3J0IHsgaXNDdXN0b21WYWx1ZSB9IGZyb20gJy4uLy4uL3V0aWxzL3Jlc29sdmUtdmFsdWUubWpzJztcbmltcG9ydCB7IGlzTW90aW9uVmFsdWUgfSBmcm9tICcuL2lzLW1vdGlvbi12YWx1ZS5tanMnO1xuXG4vKipcbiAqIElmIHRoZSBwcm92aWRlZCB2YWx1ZSBpcyBhIE1vdGlvblZhbHVlLCB0aGlzIHJldHVybnMgdGhlIGFjdHVhbCB2YWx1ZSwgb3RoZXJ3aXNlIGp1c3QgdGhlIHZhbHVlIGl0c2VsZlxuICpcbiAqIFRPRE86IFJlbW92ZSBhbmQgbW92ZSB0byBsaWJyYXJ5XG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVNb3Rpb25WYWx1ZSh2YWx1ZSkge1xuICAgIHZhciB1bndyYXBwZWRWYWx1ZSA9IGlzTW90aW9uVmFsdWUodmFsdWUpID8gdmFsdWUuZ2V0KCkgOiB2YWx1ZTtcbiAgICByZXR1cm4gaXNDdXN0b21WYWx1ZSh1bndyYXBwZWRWYWx1ZSlcbiAgICAgICAgPyB1bndyYXBwZWRWYWx1ZS50b1ZhbHVlKClcbiAgICAgICAgOiB1bndyYXBwZWRWYWx1ZTtcbn1cblxuZXhwb3J0IHsgcmVzb2x2ZU1vdGlvblZhbHVlIH07XG4iLCJpbXBvcnQgeyBfX3Jlc3QgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNBbmltYXRpb25Db250cm9scyB9IGZyb20gJy4uLy4uL2FuaW1hdGlvbi91dGlscy9pcy1hbmltYXRpb24tY29udHJvbHMubWpzJztcbmltcG9ydCB7IFByZXNlbmNlQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvUHJlc2VuY2VDb250ZXh0Lm1qcyc7XG5pbXBvcnQgeyBjaGVja0lmQ29udHJvbGxpbmdWYXJpYW50cywgY2hlY2tJZlZhcmlhbnROb2RlLCByZXNvbHZlVmFyaWFudEZyb21Qcm9wcyB9IGZyb20gJy4uLy4uL3JlbmRlci91dGlscy92YXJpYW50cy5tanMnO1xuaW1wb3J0IHsgdXNlQ29uc3RhbnQgfSBmcm9tICcuLi8uLi91dGlscy91c2UtY29uc3RhbnQubWpzJztcbmltcG9ydCB7IHJlc29sdmVNb3Rpb25WYWx1ZSB9IGZyb20gJy4uLy4uL3ZhbHVlL3V0aWxzL3Jlc29sdmUtbW90aW9uLXZhbHVlLm1qcyc7XG5pbXBvcnQgeyBNb3Rpb25Db250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9Nb3Rpb25Db250ZXh0L2luZGV4Lm1qcyc7XG5cbmZ1bmN0aW9uIG1ha2VTdGF0ZShfYSwgcHJvcHMsIGNvbnRleHQsIHByZXNlbmNlQ29udGV4dCkge1xuICAgIHZhciBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMgPSBfYS5zY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMsIGNyZWF0ZVJlbmRlclN0YXRlID0gX2EuY3JlYXRlUmVuZGVyU3RhdGUsIG9uTW91bnQgPSBfYS5vbk1vdW50O1xuICAgIHZhciBzdGF0ZSA9IHtcbiAgICAgICAgbGF0ZXN0VmFsdWVzOiBtYWtlTGF0ZXN0VmFsdWVzKHByb3BzLCBjb250ZXh0LCBwcmVzZW5jZUNvbnRleHQsIHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyksXG4gICAgICAgIHJlbmRlclN0YXRlOiBjcmVhdGVSZW5kZXJTdGF0ZSgpLFxuICAgIH07XG4gICAgaWYgKG9uTW91bnQpIHtcbiAgICAgICAgc3RhdGUubW91bnQgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHsgcmV0dXJuIG9uTW91bnQocHJvcHMsIGluc3RhbmNlLCBzdGF0ZSk7IH07XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZTtcbn1cbnZhciBtYWtlVXNlVmlzdWFsU3RhdGUgPSBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChwcm9wcywgaXNTdGF0aWMpIHtcbiAgICAgICAgdmFyIGNvbnRleHQgPSB1c2VDb250ZXh0KE1vdGlvbkNvbnRleHQpO1xuICAgICAgICB2YXIgcHJlc2VuY2VDb250ZXh0ID0gdXNlQ29udGV4dChQcmVzZW5jZUNvbnRleHQpO1xuICAgICAgICByZXR1cm4gaXNTdGF0aWNcbiAgICAgICAgICAgID8gbWFrZVN0YXRlKGNvbmZpZywgcHJvcHMsIGNvbnRleHQsIHByZXNlbmNlQ29udGV4dClcbiAgICAgICAgICAgIDogdXNlQ29uc3RhbnQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtYWtlU3RhdGUoY29uZmlnLCBwcm9wcywgY29udGV4dCwgcHJlc2VuY2VDb250ZXh0KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH07XG59O1xuZnVuY3Rpb24gbWFrZUxhdGVzdFZhbHVlcyhwcm9wcywgY29udGV4dCwgcHJlc2VuY2VDb250ZXh0LCBzY3JhcGVNb3Rpb25WYWx1ZXMpIHtcbiAgICB2YXIgdmFsdWVzID0ge307XG4gICAgdmFyIGJsb2NrSW5pdGlhbEFuaW1hdGlvbiA9IChwcmVzZW5jZUNvbnRleHQgPT09IG51bGwgfHwgcHJlc2VuY2VDb250ZXh0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcmVzZW5jZUNvbnRleHQuaW5pdGlhbCkgPT09IGZhbHNlO1xuICAgIHZhciBtb3Rpb25WYWx1ZXMgPSBzY3JhcGVNb3Rpb25WYWx1ZXMocHJvcHMpO1xuICAgIGZvciAodmFyIGtleSBpbiBtb3Rpb25WYWx1ZXMpIHtcbiAgICAgICAgdmFsdWVzW2tleV0gPSByZXNvbHZlTW90aW9uVmFsdWUobW90aW9uVmFsdWVzW2tleV0pO1xuICAgIH1cbiAgICB2YXIgaW5pdGlhbCA9IHByb3BzLmluaXRpYWwsIGFuaW1hdGUgPSBwcm9wcy5hbmltYXRlO1xuICAgIHZhciBpc0NvbnRyb2xsaW5nVmFyaWFudHMgPSBjaGVja0lmQ29udHJvbGxpbmdWYXJpYW50cyhwcm9wcyk7XG4gICAgdmFyIGlzVmFyaWFudE5vZGUgPSBjaGVja0lmVmFyaWFudE5vZGUocHJvcHMpO1xuICAgIGlmIChjb250ZXh0ICYmXG4gICAgICAgIGlzVmFyaWFudE5vZGUgJiZcbiAgICAgICAgIWlzQ29udHJvbGxpbmdWYXJpYW50cyAmJlxuICAgICAgICBwcm9wcy5pbmhlcml0ICE9PSBmYWxzZSkge1xuICAgICAgICBpbml0aWFsICE9PSBudWxsICYmIGluaXRpYWwgIT09IHZvaWQgMCA/IGluaXRpYWwgOiAoaW5pdGlhbCA9IGNvbnRleHQuaW5pdGlhbCk7XG4gICAgICAgIGFuaW1hdGUgIT09IG51bGwgJiYgYW5pbWF0ZSAhPT0gdm9pZCAwID8gYW5pbWF0ZSA6IChhbmltYXRlID0gY29udGV4dC5hbmltYXRlKTtcbiAgICB9XG4gICAgdmFyIGluaXRpYWxBbmltYXRpb25Jc0Jsb2NrZWQgPSBibG9ja0luaXRpYWxBbmltYXRpb24gfHwgaW5pdGlhbCA9PT0gZmFsc2U7XG4gICAgdmFyIHZhcmlhbnRUb1NldCA9IGluaXRpYWxBbmltYXRpb25Jc0Jsb2NrZWQgPyBhbmltYXRlIDogaW5pdGlhbDtcbiAgICBpZiAodmFyaWFudFRvU2V0ICYmXG4gICAgICAgIHR5cGVvZiB2YXJpYW50VG9TZXQgIT09IFwiYm9vbGVhblwiICYmXG4gICAgICAgICFpc0FuaW1hdGlvbkNvbnRyb2xzKHZhcmlhbnRUb1NldCkpIHtcbiAgICAgICAgdmFyIGxpc3QgPSBBcnJheS5pc0FycmF5KHZhcmlhbnRUb1NldCkgPyB2YXJpYW50VG9TZXQgOiBbdmFyaWFudFRvU2V0XTtcbiAgICAgICAgbGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChkZWZpbml0aW9uKSB7XG4gICAgICAgICAgICB2YXIgcmVzb2x2ZWQgPSByZXNvbHZlVmFyaWFudEZyb21Qcm9wcyhwcm9wcywgZGVmaW5pdGlvbik7XG4gICAgICAgICAgICBpZiAoIXJlc29sdmVkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciB0cmFuc2l0aW9uRW5kID0gcmVzb2x2ZWQudHJhbnNpdGlvbkVuZDsgcmVzb2x2ZWQudHJhbnNpdGlvbjsgdmFyIHRhcmdldCA9IF9fcmVzdChyZXNvbHZlZCwgW1widHJhbnNpdGlvbkVuZFwiLCBcInRyYW5zaXRpb25cIl0pO1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHRhcmdldCkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZVRhcmdldCA9IHRhcmdldFtrZXldO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlVGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogVGFrZSBmaW5hbCBrZXlmcmFtZSBpZiB0aGUgaW5pdGlhbCBhbmltYXRpb24gaXMgYmxvY2tlZCBiZWNhdXNlXG4gICAgICAgICAgICAgICAgICAgICAqIHdlIHdhbnQgdG8gaW5pdGlhbGlzZSBhdCB0aGUgZW5kIG9mIHRoYXQgYmxvY2tlZCBhbmltYXRpb24uXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBpbml0aWFsQW5pbWF0aW9uSXNCbG9ja2VkXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHZhbHVlVGFyZ2V0Lmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgIDogMDtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldFtpbmRleF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZVRhcmdldCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNba2V5XSA9IHZhbHVlVGFyZ2V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB0cmFuc2l0aW9uRW5kKVxuICAgICAgICAgICAgICAgIHZhbHVlc1trZXldID0gdHJhbnNpdGlvbkVuZFtrZXldO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IHsgbWFrZVVzZVZpc3VhbFN0YXRlIH07XG4iLCJpbXBvcnQgeyByZW5kZXJTVkcgfSBmcm9tICcuL3V0aWxzL3JlbmRlci5tanMnO1xuaW1wb3J0IHsgc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzIH0gZnJvbSAnLi91dGlscy9zY3JhcGUtbW90aW9uLXZhbHVlcy5tanMnO1xuaW1wb3J0IHsgbWFrZVVzZVZpc3VhbFN0YXRlIH0gZnJvbSAnLi4vLi4vbW90aW9uL3V0aWxzL3VzZS12aXN1YWwtc3RhdGUubWpzJztcbmltcG9ydCB7IGNyZWF0ZVN2Z1JlbmRlclN0YXRlIH0gZnJvbSAnLi91dGlscy9jcmVhdGUtcmVuZGVyLXN0YXRlLm1qcyc7XG5pbXBvcnQgeyBidWlsZFNWR0F0dHJzIH0gZnJvbSAnLi91dGlscy9idWlsZC1hdHRycy5tanMnO1xuXG52YXIgc3ZnTW90aW9uQ29uZmlnID0ge1xuICAgIHVzZVZpc3VhbFN0YXRlOiBtYWtlVXNlVmlzdWFsU3RhdGUoe1xuICAgICAgICBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6IHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyxcbiAgICAgICAgY3JlYXRlUmVuZGVyU3RhdGU6IGNyZWF0ZVN2Z1JlbmRlclN0YXRlLFxuICAgICAgICBvbk1vdW50OiBmdW5jdGlvbiAocHJvcHMsIGluc3RhbmNlLCBfYSkge1xuICAgICAgICAgICAgdmFyIHJlbmRlclN0YXRlID0gX2EucmVuZGVyU3RhdGUsIGxhdGVzdFZhbHVlcyA9IF9hLmxhdGVzdFZhbHVlcztcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVuZGVyU3RhdGUuZGltZW5zaW9ucyA9XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBpbnN0YW5jZS5nZXRCQm94ID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGluc3RhbmNlLmdldEJCb3goKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBpbnN0YW5jZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gTW9zdCBsaWtlbHkgdHJ5aW5nIHRvIG1lYXN1cmUgYW4gdW5yZW5kZXJlZCBlbGVtZW50IHVuZGVyIEZpcmVmb3hcbiAgICAgICAgICAgICAgICByZW5kZXJTdGF0ZS5kaW1lbnNpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWlsZFNWR0F0dHJzKHJlbmRlclN0YXRlLCBsYXRlc3RWYWx1ZXMsIHsgZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb246IGZhbHNlIH0sIHByb3BzLnRyYW5zZm9ybVRlbXBsYXRlKTtcbiAgICAgICAgICAgIHJlbmRlclNWRyhpbnN0YW5jZSwgcmVuZGVyU3RhdGUpO1xuICAgICAgICB9LFxuICAgIH0pLFxufTtcblxuZXhwb3J0IHsgc3ZnTW90aW9uQ29uZmlnIH07XG4iLCJ2YXIgQW5pbWF0aW9uVHlwZTtcbihmdW5jdGlvbiAoQW5pbWF0aW9uVHlwZSkge1xuICAgIEFuaW1hdGlvblR5cGVbXCJBbmltYXRlXCJdID0gXCJhbmltYXRlXCI7XG4gICAgQW5pbWF0aW9uVHlwZVtcIkhvdmVyXCJdID0gXCJ3aGlsZUhvdmVyXCI7XG4gICAgQW5pbWF0aW9uVHlwZVtcIlRhcFwiXSA9IFwid2hpbGVUYXBcIjtcbiAgICBBbmltYXRpb25UeXBlW1wiRHJhZ1wiXSA9IFwid2hpbGVEcmFnXCI7XG4gICAgQW5pbWF0aW9uVHlwZVtcIkZvY3VzXCJdID0gXCJ3aGlsZUZvY3VzXCI7XG4gICAgQW5pbWF0aW9uVHlwZVtcIkluVmlld1wiXSA9IFwid2hpbGVJblZpZXdcIjtcbiAgICBBbmltYXRpb25UeXBlW1wiRXhpdFwiXSA9IFwiZXhpdFwiO1xufSkoQW5pbWF0aW9uVHlwZSB8fCAoQW5pbWF0aW9uVHlwZSA9IHt9KSk7XG5cbmV4cG9ydCB7IEFuaW1hdGlvblR5cGUgfTtcbiIsImltcG9ydCB7IG1ha2VVc2VWaXN1YWxTdGF0ZSB9IGZyb20gJy4uLy4uL21vdGlvbi91dGlscy91c2UtdmlzdWFsLXN0YXRlLm1qcyc7XG5pbXBvcnQgeyBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMgfSBmcm9tICcuL3V0aWxzL3NjcmFwZS1tb3Rpb24tdmFsdWVzLm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVIdG1sUmVuZGVyU3RhdGUgfSBmcm9tICcuL3V0aWxzL2NyZWF0ZS1yZW5kZXItc3RhdGUubWpzJztcblxudmFyIGh0bWxNb3Rpb25Db25maWcgPSB7XG4gICAgdXNlVmlzdWFsU3RhdGU6IG1ha2VVc2VWaXN1YWxTdGF0ZSh7XG4gICAgICAgIHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wczogc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzLFxuICAgICAgICBjcmVhdGVSZW5kZXJTdGF0ZTogY3JlYXRlSHRtbFJlbmRlclN0YXRlLFxuICAgIH0pLFxufTtcblxuZXhwb3J0IHsgaHRtbE1vdGlvbkNvbmZpZyB9O1xuIiwiaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG5mdW5jdGlvbiBhZGREb21FdmVudCh0YXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHsgcGFzc2l2ZTogdHJ1ZSB9OyB9XG4gICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBoYW5kbGVyLCBvcHRpb25zKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBoYW5kbGVyKTsgfTtcbn1cbi8qKlxuICogQXR0YWNoZXMgYW4gZXZlbnQgbGlzdGVuZXIgZGlyZWN0bHkgdG8gdGhlIHByb3ZpZGVkIERPTSBlbGVtZW50LlxuICpcbiAqIEJ5cGFzc2luZyBSZWFjdCdzIGV2ZW50IHN5c3RlbSBjYW4gYmUgZGVzaXJhYmxlLCBmb3IgaW5zdGFuY2Ugd2hlbiBhdHRhY2hpbmcgbm9uLXBhc3NpdmVcbiAqIGV2ZW50IGhhbmRsZXJzLlxuICpcbiAqIGBgYGpzeFxuICogY29uc3QgcmVmID0gdXNlUmVmKG51bGwpXG4gKlxuICogdXNlRG9tRXZlbnQocmVmLCAnd2hlZWwnLCBvbldoZWVsLCB7IHBhc3NpdmU6IGZhbHNlIH0pXG4gKlxuICogcmV0dXJuIDxkaXYgcmVmPXtyZWZ9IC8+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcmVmIC0gUmVhY3QuUmVmT2JqZWN0IHRoYXQncyBiZWVuIHByb3ZpZGVkIHRvIHRoZSBlbGVtZW50IHlvdSB3YW50IHRvIGJpbmQgdGhlIGxpc3RlbmVyIHRvLlxuICogQHBhcmFtIGV2ZW50TmFtZSAtIE5hbWUgb2YgdGhlIGV2ZW50IHlvdSB3YW50IGxpc3RlbiBmb3IuXG4gKiBAcGFyYW0gaGFuZGxlciAtIEZ1bmN0aW9uIHRvIGZpcmUgd2hlbiByZWNlaXZpbmcgdGhlIGV2ZW50LlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHBhc3MgdG8gYEV2ZW50LmFkZEV2ZW50TGlzdGVuZXJgLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gdXNlRG9tRXZlbnQocmVmLCBldmVudE5hbWUsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZWxlbWVudCA9IHJlZi5jdXJyZW50O1xuICAgICAgICBpZiAoaGFuZGxlciAmJiBlbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gYWRkRG9tRXZlbnQoZWxlbWVudCwgZXZlbnROYW1lLCBoYW5kbGVyLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH0sIFtyZWYsIGV2ZW50TmFtZSwgaGFuZGxlciwgb3B0aW9uc10pO1xufVxuXG5leHBvcnQgeyBhZGREb21FdmVudCwgdXNlRG9tRXZlbnQgfTtcbiIsImZ1bmN0aW9uIGlzTW91c2VFdmVudChldmVudCkge1xuICAgIC8vIFBvaW50ZXJFdmVudCBpbmhlcml0cyBmcm9tIE1vdXNlRXZlbnQgc28gd2UgY2FuJ3QgdXNlIGEgc3RyYWlnaHQgaW5zdGFuY2VvZiBjaGVjay5cbiAgICBpZiAodHlwZW9mIFBvaW50ZXJFdmVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBldmVudCBpbnN0YW5jZW9mIFBvaW50ZXJFdmVudCkge1xuICAgICAgICByZXR1cm4gISEoZXZlbnQucG9pbnRlclR5cGUgPT09IFwibW91c2VcIik7XG4gICAgfVxuICAgIHJldHVybiBldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQ7XG59XG5mdW5jdGlvbiBpc1RvdWNoRXZlbnQoZXZlbnQpIHtcbiAgICB2YXIgaGFzVG91Y2hlcyA9ICEhZXZlbnQudG91Y2hlcztcbiAgICByZXR1cm4gaGFzVG91Y2hlcztcbn1cblxuZXhwb3J0IHsgaXNNb3VzZUV2ZW50LCBpc1RvdWNoRXZlbnQgfTtcbiIsImltcG9ydCB7IGlzVG91Y2hFdmVudCB9IGZyb20gJy4uL2dlc3R1cmVzL3V0aWxzL2V2ZW50LXR5cGUubWpzJztcblxuLyoqXG4gKiBGaWx0ZXJzIG91dCBldmVudHMgbm90IGF0dGFjaGVkIHRvIHRoZSBwcmltYXJ5IHBvaW50ZXIgKGN1cnJlbnRseSBsZWZ0IG1vdXNlIGJ1dHRvbilcbiAqIEBwYXJhbSBldmVudEhhbmRsZXJcbiAqL1xuZnVuY3Rpb24gZmlsdGVyUHJpbWFyeVBvaW50ZXIoZXZlbnRIYW5kbGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgaXNNb3VzZUV2ZW50ID0gZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50O1xuICAgICAgICB2YXIgaXNQcmltYXJ5UG9pbnRlciA9ICFpc01vdXNlRXZlbnQgfHxcbiAgICAgICAgICAgIChpc01vdXNlRXZlbnQgJiYgZXZlbnQuYnV0dG9uID09PSAwKTtcbiAgICAgICAgaWYgKGlzUHJpbWFyeVBvaW50ZXIpIHtcbiAgICAgICAgICAgIGV2ZW50SGFuZGxlcihldmVudCk7XG4gICAgICAgIH1cbiAgICB9O1xufVxudmFyIGRlZmF1bHRQYWdlUG9pbnQgPSB7IHBhZ2VYOiAwLCBwYWdlWTogMCB9O1xuZnVuY3Rpb24gcG9pbnRGcm9tVG91Y2goZSwgcG9pbnRUeXBlKSB7XG4gICAgaWYgKHBvaW50VHlwZSA9PT0gdm9pZCAwKSB7IHBvaW50VHlwZSA9IFwicGFnZVwiOyB9XG4gICAgdmFyIHByaW1hcnlUb3VjaCA9IGUudG91Y2hlc1swXSB8fCBlLmNoYW5nZWRUb3VjaGVzWzBdO1xuICAgIHZhciBwb2ludCA9IHByaW1hcnlUb3VjaCB8fCBkZWZhdWx0UGFnZVBvaW50O1xuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHBvaW50W3BvaW50VHlwZSArIFwiWFwiXSxcbiAgICAgICAgeTogcG9pbnRbcG9pbnRUeXBlICsgXCJZXCJdLFxuICAgIH07XG59XG5mdW5jdGlvbiBwb2ludEZyb21Nb3VzZShwb2ludCwgcG9pbnRUeXBlKSB7XG4gICAgaWYgKHBvaW50VHlwZSA9PT0gdm9pZCAwKSB7IHBvaW50VHlwZSA9IFwicGFnZVwiOyB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogcG9pbnRbcG9pbnRUeXBlICsgXCJYXCJdLFxuICAgICAgICB5OiBwb2ludFtwb2ludFR5cGUgKyBcIllcIl0sXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudEluZm8oZXZlbnQsIHBvaW50VHlwZSkge1xuICAgIGlmIChwb2ludFR5cGUgPT09IHZvaWQgMCkgeyBwb2ludFR5cGUgPSBcInBhZ2VcIjsgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHBvaW50OiBpc1RvdWNoRXZlbnQoZXZlbnQpXG4gICAgICAgICAgICA/IHBvaW50RnJvbVRvdWNoKGV2ZW50LCBwb2ludFR5cGUpXG4gICAgICAgICAgICA6IHBvaW50RnJvbU1vdXNlKGV2ZW50LCBwb2ludFR5cGUpLFxuICAgIH07XG59XG52YXIgd3JhcEhhbmRsZXIgPSBmdW5jdGlvbiAoaGFuZGxlciwgc2hvdWxkRmlsdGVyUHJpbWFyeVBvaW50ZXIpIHtcbiAgICBpZiAoc2hvdWxkRmlsdGVyUHJpbWFyeVBvaW50ZXIgPT09IHZvaWQgMCkgeyBzaG91bGRGaWx0ZXJQcmltYXJ5UG9pbnRlciA9IGZhbHNlOyB9XG4gICAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVyKGV2ZW50LCBleHRyYWN0RXZlbnRJbmZvKGV2ZW50KSk7XG4gICAgfTtcbiAgICByZXR1cm4gc2hvdWxkRmlsdGVyUHJpbWFyeVBvaW50ZXJcbiAgICAgICAgPyBmaWx0ZXJQcmltYXJ5UG9pbnRlcihsaXN0ZW5lcilcbiAgICAgICAgOiBsaXN0ZW5lcjtcbn07XG5cbmV4cG9ydCB7IGV4dHJhY3RFdmVudEluZm8sIHdyYXBIYW5kbGVyIH07XG4iLCJpbXBvcnQgeyBpc0Jyb3dzZXIgfSBmcm9tICcuLi91dGlscy9pcy1icm93c2VyLm1qcyc7XG5cbi8vIFdlIGNoZWNrIGZvciBldmVudCBzdXBwb3J0IHZpYSBmdW5jdGlvbnMgaW4gY2FzZSB0aGV5J3ZlIGJlZW4gbW9ja2VkIGJ5IGEgdGVzdGluZyBzdWl0ZS5cbnZhciBzdXBwb3J0c1BvaW50ZXJFdmVudHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGlzQnJvd3NlciAmJiB3aW5kb3cub25wb2ludGVyZG93biA9PT0gbnVsbDtcbn07XG52YXIgc3VwcG9ydHNUb3VjaEV2ZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaXNCcm93c2VyICYmIHdpbmRvdy5vbnRvdWNoc3RhcnQgPT09IG51bGw7XG59O1xudmFyIHN1cHBvcnRzTW91c2VFdmVudHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGlzQnJvd3NlciAmJiB3aW5kb3cub25tb3VzZWRvd24gPT09IG51bGw7XG59O1xuXG5leHBvcnQgeyBzdXBwb3J0c01vdXNlRXZlbnRzLCBzdXBwb3J0c1BvaW50ZXJFdmVudHMsIHN1cHBvcnRzVG91Y2hFdmVudHMgfTtcbiIsImltcG9ydCB7IGFkZERvbUV2ZW50LCB1c2VEb21FdmVudCB9IGZyb20gJy4vdXNlLWRvbS1ldmVudC5tanMnO1xuaW1wb3J0IHsgd3JhcEhhbmRsZXIgfSBmcm9tICcuL2V2ZW50LWluZm8ubWpzJztcbmltcG9ydCB7IHN1cHBvcnRzUG9pbnRlckV2ZW50cywgc3VwcG9ydHNUb3VjaEV2ZW50cywgc3VwcG9ydHNNb3VzZUV2ZW50cyB9IGZyb20gJy4vdXRpbHMubWpzJztcblxudmFyIG1vdXNlRXZlbnROYW1lcyA9IHtcbiAgICBwb2ludGVyZG93bjogXCJtb3VzZWRvd25cIixcbiAgICBwb2ludGVybW92ZTogXCJtb3VzZW1vdmVcIixcbiAgICBwb2ludGVydXA6IFwibW91c2V1cFwiLFxuICAgIHBvaW50ZXJjYW5jZWw6IFwibW91c2VjYW5jZWxcIixcbiAgICBwb2ludGVyb3ZlcjogXCJtb3VzZW92ZXJcIixcbiAgICBwb2ludGVyb3V0OiBcIm1vdXNlb3V0XCIsXG4gICAgcG9pbnRlcmVudGVyOiBcIm1vdXNlZW50ZXJcIixcbiAgICBwb2ludGVybGVhdmU6IFwibW91c2VsZWF2ZVwiLFxufTtcbnZhciB0b3VjaEV2ZW50TmFtZXMgPSB7XG4gICAgcG9pbnRlcmRvd246IFwidG91Y2hzdGFydFwiLFxuICAgIHBvaW50ZXJtb3ZlOiBcInRvdWNobW92ZVwiLFxuICAgIHBvaW50ZXJ1cDogXCJ0b3VjaGVuZFwiLFxuICAgIHBvaW50ZXJjYW5jZWw6IFwidG91Y2hjYW5jZWxcIixcbn07XG5mdW5jdGlvbiBnZXRQb2ludGVyRXZlbnROYW1lKG5hbWUpIHtcbiAgICBpZiAoc3VwcG9ydHNQb2ludGVyRXZlbnRzKCkpIHtcbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKHN1cHBvcnRzVG91Y2hFdmVudHMoKSkge1xuICAgICAgICByZXR1cm4gdG91Y2hFdmVudE5hbWVzW25hbWVdO1xuICAgIH1cbiAgICBlbHNlIGlmIChzdXBwb3J0c01vdXNlRXZlbnRzKCkpIHtcbiAgICAgICAgcmV0dXJuIG1vdXNlRXZlbnROYW1lc1tuYW1lXTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG59XG5mdW5jdGlvbiBhZGRQb2ludGVyRXZlbnQodGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYWRkRG9tRXZlbnQodGFyZ2V0LCBnZXRQb2ludGVyRXZlbnROYW1lKGV2ZW50TmFtZSksIHdyYXBIYW5kbGVyKGhhbmRsZXIsIGV2ZW50TmFtZSA9PT0gXCJwb2ludGVyZG93blwiKSwgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiB1c2VQb2ludGVyRXZlbnQocmVmLCBldmVudE5hbWUsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdXNlRG9tRXZlbnQocmVmLCBnZXRQb2ludGVyRXZlbnROYW1lKGV2ZW50TmFtZSksIGhhbmRsZXIgJiYgd3JhcEhhbmRsZXIoaGFuZGxlciwgZXZlbnROYW1lID09PSBcInBvaW50ZXJkb3duXCIpLCBvcHRpb25zKTtcbn1cblxuZXhwb3J0IHsgYWRkUG9pbnRlckV2ZW50LCB1c2VQb2ludGVyRXZlbnQgfTtcbiIsImZ1bmN0aW9uIGNyZWF0ZUxvY2sobmFtZSkge1xuICAgIHZhciBsb2NrID0gbnVsbDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb3BlbkxvY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsb2NrID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGxvY2sgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGxvY2sgPSBuYW1lO1xuICAgICAgICAgICAgcmV0dXJuIG9wZW5Mb2NrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xufVxudmFyIGdsb2JhbEhvcml6b250YWxMb2NrID0gY3JlYXRlTG9jayhcImRyYWdIb3Jpem9udGFsXCIpO1xudmFyIGdsb2JhbFZlcnRpY2FsTG9jayA9IGNyZWF0ZUxvY2soXCJkcmFnVmVydGljYWxcIik7XG5mdW5jdGlvbiBnZXRHbG9iYWxMb2NrKGRyYWcpIHtcbiAgICB2YXIgbG9jayA9IGZhbHNlO1xuICAgIGlmIChkcmFnID09PSBcInlcIikge1xuICAgICAgICBsb2NrID0gZ2xvYmFsVmVydGljYWxMb2NrKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGRyYWcgPT09IFwieFwiKSB7XG4gICAgICAgIGxvY2sgPSBnbG9iYWxIb3Jpem9udGFsTG9jaygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIG9wZW5Ib3Jpem9udGFsXzEgPSBnbG9iYWxIb3Jpem9udGFsTG9jaygpO1xuICAgICAgICB2YXIgb3BlblZlcnRpY2FsXzEgPSBnbG9iYWxWZXJ0aWNhbExvY2soKTtcbiAgICAgICAgaWYgKG9wZW5Ib3Jpem9udGFsXzEgJiYgb3BlblZlcnRpY2FsXzEpIHtcbiAgICAgICAgICAgIGxvY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgb3Blbkhvcml6b250YWxfMSgpO1xuICAgICAgICAgICAgICAgIG9wZW5WZXJ0aWNhbF8xKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVsZWFzZSB0aGUgbG9ja3MgYmVjYXVzZSB3ZSBkb24ndCB1c2UgdGhlbVxuICAgICAgICAgICAgaWYgKG9wZW5Ib3Jpem9udGFsXzEpXG4gICAgICAgICAgICAgICAgb3Blbkhvcml6b250YWxfMSgpO1xuICAgICAgICAgICAgaWYgKG9wZW5WZXJ0aWNhbF8xKVxuICAgICAgICAgICAgICAgIG9wZW5WZXJ0aWNhbF8xKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxvY2s7XG59XG5mdW5jdGlvbiBpc0RyYWdBY3RpdmUoKSB7XG4gICAgLy8gQ2hlY2sgdGhlIGdlc3R1cmUgbG9jayAtIGlmIHdlIGdldCBpdCwgaXQgbWVhbnMgbm8gZHJhZyBnZXN0dXJlIGlzIGFjdGl2ZVxuICAgIC8vIGFuZCB3ZSBjYW4gc2FmZWx5IGZpcmUgdGhlIHRhcCBnZXN0dXJlLlxuICAgIHZhciBvcGVuR2VzdHVyZUxvY2sgPSBnZXRHbG9iYWxMb2NrKHRydWUpO1xuICAgIGlmICghb3Blbkdlc3R1cmVMb2NrKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBvcGVuR2VzdHVyZUxvY2soKTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCB7IGNyZWF0ZUxvY2ssIGdldEdsb2JhbExvY2ssIGlzRHJhZ0FjdGl2ZSB9O1xuIiwiaW1wb3J0IHsgaXNNb3VzZUV2ZW50IH0gZnJvbSAnLi91dGlscy9ldmVudC10eXBlLm1qcyc7XG5pbXBvcnQgeyBBbmltYXRpb25UeXBlIH0gZnJvbSAnLi4vcmVuZGVyL3V0aWxzL3R5cGVzLm1qcyc7XG5pbXBvcnQgeyB1c2VQb2ludGVyRXZlbnQgfSBmcm9tICcuLi9ldmVudHMvdXNlLXBvaW50ZXItZXZlbnQubWpzJztcbmltcG9ydCB7IGlzRHJhZ0FjdGl2ZSB9IGZyb20gJy4vZHJhZy91dGlscy9sb2NrLm1qcyc7XG5cbmZ1bmN0aW9uIGNyZWF0ZUhvdmVyRXZlbnQodmlzdWFsRWxlbWVudCwgaXNBY3RpdmUsIGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCwgaW5mbykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghaXNNb3VzZUV2ZW50KGV2ZW50KSB8fCBpc0RyYWdBY3RpdmUoKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEVuc3VyZSB3ZSB0cmlnZ2VyIGFuaW1hdGlvbnMgYmVmb3JlIGZpcmluZyBldmVudCBjYWxsYmFja1xuICAgICAgICAgKi9cbiAgICAgICAgKF9hID0gdmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNldEFjdGl2ZShBbmltYXRpb25UeXBlLkhvdmVyLCBpc0FjdGl2ZSk7XG4gICAgICAgIGNhbGxiYWNrID09PSBudWxsIHx8IGNhbGxiYWNrID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjYWxsYmFjayhldmVudCwgaW5mbyk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIHVzZUhvdmVyR2VzdHVyZShfYSkge1xuICAgIHZhciBvbkhvdmVyU3RhcnQgPSBfYS5vbkhvdmVyU3RhcnQsIG9uSG92ZXJFbmQgPSBfYS5vbkhvdmVyRW5kLCB3aGlsZUhvdmVyID0gX2Eud2hpbGVIb3ZlciwgdmlzdWFsRWxlbWVudCA9IF9hLnZpc3VhbEVsZW1lbnQ7XG4gICAgdXNlUG9pbnRlckV2ZW50KHZpc3VhbEVsZW1lbnQsIFwicG9pbnRlcmVudGVyXCIsIG9uSG92ZXJTdGFydCB8fCB3aGlsZUhvdmVyXG4gICAgICAgID8gY3JlYXRlSG92ZXJFdmVudCh2aXN1YWxFbGVtZW50LCB0cnVlLCBvbkhvdmVyU3RhcnQpXG4gICAgICAgIDogdW5kZWZpbmVkLCB7IHBhc3NpdmU6ICFvbkhvdmVyU3RhcnQgfSk7XG4gICAgdXNlUG9pbnRlckV2ZW50KHZpc3VhbEVsZW1lbnQsIFwicG9pbnRlcmxlYXZlXCIsIG9uSG92ZXJFbmQgfHwgd2hpbGVIb3ZlclxuICAgICAgICA/IGNyZWF0ZUhvdmVyRXZlbnQodmlzdWFsRWxlbWVudCwgZmFsc2UsIG9uSG92ZXJFbmQpXG4gICAgICAgIDogdW5kZWZpbmVkLCB7IHBhc3NpdmU6ICFvbkhvdmVyRW5kIH0pO1xufVxuXG5leHBvcnQgeyB1c2VIb3Zlckdlc3R1cmUgfTtcbiIsIi8qKlxuICogUmVjdXJzaXZlbHkgdHJhdmVyc2UgdXAgdGhlIHRyZWUgdG8gY2hlY2sgd2hldGhlciB0aGUgcHJvdmlkZWQgY2hpbGQgbm9kZVxuICogaXMgdGhlIHBhcmVudCBvciBhIGRlc2NlbmRhbnQgb2YgaXQuXG4gKlxuICogQHBhcmFtIHBhcmVudCAtIEVsZW1lbnQgdG8gZmluZFxuICogQHBhcmFtIGNoaWxkIC0gRWxlbWVudCB0byB0ZXN0IGFnYWluc3QgcGFyZW50XG4gKi9cbnZhciBpc05vZGVPckNoaWxkID0gZnVuY3Rpb24gKHBhcmVudCwgY2hpbGQpIHtcbiAgICBpZiAoIWNoaWxkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSBpZiAocGFyZW50ID09PSBjaGlsZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBpc05vZGVPckNoaWxkKHBhcmVudCwgY2hpbGQucGFyZW50RWxlbWVudCk7XG4gICAgfVxufTtcblxuZXhwb3J0IHsgaXNOb2RlT3JDaGlsZCB9O1xuIiwiY29uc3QgY29tYmluZUZ1bmN0aW9ucyA9IChhLCBiKSA9PiAodikgPT4gYihhKHYpKTtcbmNvbnN0IHBpcGUgPSAoLi4udHJhbnNmb3JtZXJzKSA9PiB0cmFuc2Zvcm1lcnMucmVkdWNlKGNvbWJpbmVGdW5jdGlvbnMpO1xuXG5leHBvcnQgeyBwaXBlIH07XG4iLCJ2YXIgd2FybmVkID0gbmV3IFNldCgpO1xuZnVuY3Rpb24gd2Fybk9uY2UoY29uZGl0aW9uLCBtZXNzYWdlLCBlbGVtZW50KSB7XG4gICAgaWYgKGNvbmRpdGlvbiB8fCB3YXJuZWQuaGFzKG1lc3NhZ2UpKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgIGlmIChlbGVtZW50KVxuICAgICAgICBjb25zb2xlLndhcm4oZWxlbWVudCk7XG4gICAgd2FybmVkLmFkZChtZXNzYWdlKTtcbn1cblxuZXhwb3J0IHsgd2Fybk9uY2UgfTtcbiIsImltcG9ydCB7IF9fcmVzdCwgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5cbi8qKlxuICogTWFwIGFuIEludGVyc2VjdGlvbkhhbmRsZXIgY2FsbGJhY2sgdG8gYW4gZWxlbWVudC4gV2Ugb25seSBldmVyIG1ha2Ugb25lIGhhbmRsZXIgZm9yIG9uZVxuICogZWxlbWVudCwgc28gZXZlbiB0aG91Z2ggdGhlc2UgaGFuZGxlcnMgbWlnaHQgYWxsIGJlIHRyaWdnZXJlZCBieSBkaWZmZXJlbnRcbiAqIG9ic2VydmVycywgd2UgY2FuIGtlZXAgdGhlbSBpbiB0aGUgc2FtZSBtYXAuXG4gKi9cbnZhciBvYnNlcnZlckNhbGxiYWNrcyA9IG5ldyBXZWFrTWFwKCk7XG4vKipcbiAqIE11bHRpcGxlIG9ic2VydmVycyBjYW4gYmUgY3JlYXRlZCBmb3IgbXVsdGlwbGUgZWxlbWVudC9kb2N1bWVudCByb290cy4gRWFjaCB3aXRoXG4gKiBkaWZmZXJlbnQgc2V0dGluZ3MuIFNvIGhlcmUgd2Ugc3RvcmUgZGljdGlvbmFyaWVzIG9mIG9ic2VydmVycyB0byBlYWNoIHJvb3QsXG4gKiB1c2luZyBzZXJpYWxpc2VkIHNldHRpbmdzICh0aHJlc2hvbGQvbWFyZ2luKSBhcyBsb29rdXAga2V5cy5cbiAqL1xudmFyIG9ic2VydmVycyA9IG5ldyBXZWFrTWFwKCk7XG52YXIgZmlyZU9ic2VydmVyQ2FsbGJhY2sgPSBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICB2YXIgX2E7XG4gICAgKF9hID0gb2JzZXJ2ZXJDYWxsYmFja3MuZ2V0KGVudHJ5LnRhcmdldCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYShlbnRyeSk7XG59O1xudmFyIGZpcmVBbGxPYnNlcnZlckNhbGxiYWNrcyA9IGZ1bmN0aW9uIChlbnRyaWVzKSB7XG4gICAgZW50cmllcy5mb3JFYWNoKGZpcmVPYnNlcnZlckNhbGxiYWNrKTtcbn07XG5mdW5jdGlvbiBpbml0SW50ZXJzZWN0aW9uT2JzZXJ2ZXIoX2EpIHtcbiAgICB2YXIgcm9vdCA9IF9hLnJvb3QsIG9wdGlvbnMgPSBfX3Jlc3QoX2EsIFtcInJvb3RcIl0pO1xuICAgIHZhciBsb29rdXBSb290ID0gcm9vdCB8fCBkb2N1bWVudDtcbiAgICAvKipcbiAgICAgKiBJZiB3ZSBkb24ndCBoYXZlIGFuIG9ic2VydmVyIGxvb2t1cCBtYXAgZm9yIHRoaXMgcm9vdCwgY3JlYXRlIG9uZS5cbiAgICAgKi9cbiAgICBpZiAoIW9ic2VydmVycy5oYXMobG9va3VwUm9vdCkpIHtcbiAgICAgICAgb2JzZXJ2ZXJzLnNldChsb29rdXBSb290LCB7fSk7XG4gICAgfVxuICAgIHZhciByb290T2JzZXJ2ZXJzID0gb2JzZXJ2ZXJzLmdldChsb29rdXBSb290KTtcbiAgICB2YXIga2V5ID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucyk7XG4gICAgLyoqXG4gICAgICogSWYgd2UgZG9uJ3QgaGF2ZSBhbiBvYnNlcnZlciBmb3IgdGhpcyBjb21iaW5hdGlvbiBvZiByb290IGFuZCBzZXR0aW5ncyxcbiAgICAgKiBjcmVhdGUgb25lLlxuICAgICAqL1xuICAgIGlmICghcm9vdE9ic2VydmVyc1trZXldKSB7XG4gICAgICAgIHJvb3RPYnNlcnZlcnNba2V5XSA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihmaXJlQWxsT2JzZXJ2ZXJDYWxsYmFja3MsIF9fYXNzaWduKHsgcm9vdDogcm9vdCB9LCBvcHRpb25zKSk7XG4gICAgfVxuICAgIHJldHVybiByb290T2JzZXJ2ZXJzW2tleV07XG59XG5mdW5jdGlvbiBvYnNlcnZlSW50ZXJzZWN0aW9uKGVsZW1lbnQsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHJvb3RJbnRlcmVzZWN0aW9uT2JzZXJ2ZXIgPSBpbml0SW50ZXJzZWN0aW9uT2JzZXJ2ZXIob3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJDYWxsYmFja3Muc2V0KGVsZW1lbnQsIGNhbGxiYWNrKTtcbiAgICByb290SW50ZXJlc2VjdGlvbk9ic2VydmVyLm9ic2VydmUoZWxlbWVudCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgb2JzZXJ2ZXJDYWxsYmFja3MuZGVsZXRlKGVsZW1lbnQpO1xuICAgICAgICByb290SW50ZXJlc2VjdGlvbk9ic2VydmVyLnVub2JzZXJ2ZShlbGVtZW50KTtcbiAgICB9O1xufVxuXG5leHBvcnQgeyBvYnNlcnZlSW50ZXJzZWN0aW9uIH07XG4iLCJpbXBvcnQgeyBlbnYgfSBmcm9tICcuLi8uLi8uLi91dGlscy9wcm9jZXNzLm1qcyc7XG5pbXBvcnQgeyB1c2VSZWYsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEFuaW1hdGlvblR5cGUgfSBmcm9tICcuLi8uLi8uLi9yZW5kZXIvdXRpbHMvdHlwZXMubWpzJztcbmltcG9ydCB7IHdhcm5PbmNlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvd2Fybi1vbmNlLm1qcyc7XG5pbXBvcnQgeyBvYnNlcnZlSW50ZXJzZWN0aW9uIH0gZnJvbSAnLi9vYnNlcnZlcnMubWpzJztcblxuZnVuY3Rpb24gdXNlVmlld3BvcnQoX2EpIHtcbiAgICB2YXIgdmlzdWFsRWxlbWVudCA9IF9hLnZpc3VhbEVsZW1lbnQsIHdoaWxlSW5WaWV3ID0gX2Eud2hpbGVJblZpZXcsIG9uVmlld3BvcnRFbnRlciA9IF9hLm9uVmlld3BvcnRFbnRlciwgb25WaWV3cG9ydExlYXZlID0gX2Eub25WaWV3cG9ydExlYXZlLCBfYiA9IF9hLnZpZXdwb3J0LCB2aWV3cG9ydCA9IF9iID09PSB2b2lkIDAgPyB7fSA6IF9iO1xuICAgIHZhciBzdGF0ZSA9IHVzZVJlZih7XG4gICAgICAgIGhhc0VudGVyZWRWaWV3OiBmYWxzZSxcbiAgICAgICAgaXNJblZpZXc6IGZhbHNlLFxuICAgIH0pO1xuICAgIHZhciBzaG91bGRPYnNlcnZlID0gQm9vbGVhbih3aGlsZUluVmlldyB8fCBvblZpZXdwb3J0RW50ZXIgfHwgb25WaWV3cG9ydExlYXZlKTtcbiAgICBpZiAodmlld3BvcnQub25jZSAmJiBzdGF0ZS5jdXJyZW50Lmhhc0VudGVyZWRWaWV3KVxuICAgICAgICBzaG91bGRPYnNlcnZlID0gZmFsc2U7XG4gICAgdmFyIHVzZU9ic2VydmVyID0gdHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gdXNlTWlzc2luZ0ludGVyc2VjdGlvbk9ic2VydmVyXG4gICAgICAgIDogdXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG4gICAgdXNlT2JzZXJ2ZXIoc2hvdWxkT2JzZXJ2ZSwgc3RhdGUuY3VycmVudCwgdmlzdWFsRWxlbWVudCwgdmlld3BvcnQpO1xufVxudmFyIHRocmVzaG9sZE5hbWVzID0ge1xuICAgIHNvbWU6IDAsXG4gICAgYWxsOiAxLFxufTtcbmZ1bmN0aW9uIHVzZUludGVyc2VjdGlvbk9ic2VydmVyKHNob3VsZE9ic2VydmUsIHN0YXRlLCB2aXN1YWxFbGVtZW50LCBfYSkge1xuICAgIHZhciByb290ID0gX2Eucm9vdCwgcm9vdE1hcmdpbiA9IF9hLm1hcmdpbiwgX2IgPSBfYS5hbW91bnQsIGFtb3VudCA9IF9iID09PSB2b2lkIDAgPyBcInNvbWVcIiA6IF9iLCBvbmNlID0gX2Eub25jZTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXNob3VsZE9ic2VydmUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgcm9vdDogcm9vdCA9PT0gbnVsbCB8fCByb290ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByb290LmN1cnJlbnQsXG4gICAgICAgICAgICByb290TWFyZ2luOiByb290TWFyZ2luLFxuICAgICAgICAgICAgdGhyZXNob2xkOiB0eXBlb2YgYW1vdW50ID09PSBcIm51bWJlclwiID8gYW1vdW50IDogdGhyZXNob2xkTmFtZXNbYW1vdW50XSxcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGludGVyc2VjdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB2YXIgaXNJbnRlcnNlY3RpbmcgPSBlbnRyeS5pc0ludGVyc2VjdGluZztcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgdGhlcmUncyBiZWVuIG5vIGNoYW5nZSBpbiB0aGUgdmlld3BvcnQgc3RhdGUsIGVhcmx5IHJldHVybi5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKHN0YXRlLmlzSW5WaWV3ID09PSBpc0ludGVyc2VjdGluZylcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBzdGF0ZS5pc0luVmlldyA9IGlzSW50ZXJzZWN0aW5nO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBIYW5kbGUgaGFzRW50ZXJlZFZpZXcuIElmIHRoaXMgaXMgb25seSBtZWFudCB0byBydW4gb25jZSwgYW5kXG4gICAgICAgICAgICAgKiBlbGVtZW50IGlzbid0IHZpc2libGUsIGVhcmx5IHJldHVybi4gT3RoZXJ3aXNlIHNldCBoYXNFbnRlcmVkVmlldyB0byB0cnVlLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAob25jZSAmJiAhaXNJbnRlcnNlY3RpbmcgJiYgc3RhdGUuaGFzRW50ZXJlZFZpZXcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc0ludGVyc2VjdGluZykge1xuICAgICAgICAgICAgICAgIHN0YXRlLmhhc0VudGVyZWRWaWV3ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIChfYSA9IHZpc3VhbEVsZW1lbnQuYW5pbWF0aW9uU3RhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZXRBY3RpdmUoQW5pbWF0aW9uVHlwZS5JblZpZXcsIGlzSW50ZXJzZWN0aW5nKTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVXNlIHRoZSBsYXRlc3QgY29tbWl0dGVkIHByb3BzIHJhdGhlciB0aGFuIHRoZSBvbmVzIGluIHNjb3BlXG4gICAgICAgICAgICAgKiB3aGVuIHRoaXMgb2JzZXJ2ZXIgaXMgY3JlYXRlZFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB2YXIgcHJvcHMgPSB2aXN1YWxFbGVtZW50LmdldFByb3BzKCk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBpc0ludGVyc2VjdGluZ1xuICAgICAgICAgICAgICAgID8gcHJvcHMub25WaWV3cG9ydEVudGVyXG4gICAgICAgICAgICAgICAgOiBwcm9wcy5vblZpZXdwb3J0TGVhdmU7XG4gICAgICAgICAgICBjYWxsYmFjayA9PT0gbnVsbCB8fCBjYWxsYmFjayA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2FsbGJhY2soZW50cnkpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb2JzZXJ2ZUludGVyc2VjdGlvbih2aXN1YWxFbGVtZW50LmdldEluc3RhbmNlKCksIG9wdGlvbnMsIGludGVyc2VjdGlvbkNhbGxiYWNrKTtcbiAgICB9LCBbc2hvdWxkT2JzZXJ2ZSwgcm9vdCwgcm9vdE1hcmdpbiwgYW1vdW50XSk7XG59XG4vKipcbiAqIElmIEludGVyc2VjdGlvbk9ic2VydmVyIGlzIG1pc3NpbmcsIHdlIGFjdGl2YXRlIGluVmlldyBhbmQgZmlyZSBvblZpZXdwb3J0RW50ZXJcbiAqIG9uIG1vdW50LiBUaGlzIHdheSwgdGhlIHBhZ2Ugd2lsbCBiZSBpbiB0aGUgc3RhdGUgdGhlIGF1dGhvciBleHBlY3RzIHVzZXJzXG4gKiB0byBzZWUgaXQgaW4gZm9yIGV2ZXJ5b25lLlxuICovXG5mdW5jdGlvbiB1c2VNaXNzaW5nSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoc2hvdWxkT2JzZXJ2ZSwgc3RhdGUsIHZpc3VhbEVsZW1lbnQsIF9hKSB7XG4gICAgdmFyIF9iID0gX2EuZmFsbGJhY2ssIGZhbGxiYWNrID0gX2IgPT09IHZvaWQgMCA/IHRydWUgOiBfYjtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXNob3VsZE9ic2VydmUgfHwgIWZhbGxiYWNrKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoZW52ICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgd2Fybk9uY2UoZmFsc2UsIFwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS4gd2hpbGVJblZpZXcgYW5pbWF0aW9ucyB3aWxsIHRyaWdnZXIgb24gbW91bnQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlIHRoaXMgaW4gYW4gckFGIGJlY2F1c2UsIGF0IHRoaXMgcG9pbnQsIHRoZSBhbmltYXRpb24gc3RhdGVcbiAgICAgICAgICogd29uJ3QgaGF2ZSBmbHVzaGVkIGZvciB0aGUgZmlyc3QgdGltZSBhbmQgdGhlcmUncyBjZXJ0YWluIGxvZ2ljIGluXG4gICAgICAgICAqIHRoZXJlIHRoYXQgYmVoYXZlcyBkaWZmZXJlbnRseSBvbiB0aGUgaW5pdGlhbCBhbmltYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgaG9vayBzaG91bGQgYmUgcXVpdGUgcmFyZWx5IGNhbGxlZCBzbyBzZXR0aW5nIHRoaXMgaW4gYW4gckFGXG4gICAgICAgICAqIGlzIHByZWZlcnJlZCB0byBjaGFuZ2luZyB0aGUgYmVoYXZpb3VyIG9mIHRoZSBhbmltYXRpb24gc3RhdGUuXG4gICAgICAgICAqL1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgc3RhdGUuaGFzRW50ZXJlZFZpZXcgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIG9uVmlld3BvcnRFbnRlciA9IHZpc3VhbEVsZW1lbnQuZ2V0UHJvcHMoKS5vblZpZXdwb3J0RW50ZXI7XG4gICAgICAgICAgICBvblZpZXdwb3J0RW50ZXIgPT09IG51bGwgfHwgb25WaWV3cG9ydEVudGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblZpZXdwb3J0RW50ZXIobnVsbCk7XG4gICAgICAgICAgICAoX2EgPSB2aXN1YWxFbGVtZW50LmFuaW1hdGlvblN0YXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2V0QWN0aXZlKEFuaW1hdGlvblR5cGUuSW5WaWV3LCB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfSwgW3Nob3VsZE9ic2VydmVdKTtcbn1cblxuZXhwb3J0IHsgdXNlVmlld3BvcnQgfTtcbiIsInZhciBtYWtlUmVuZGVybGVzc0NvbXBvbmVudCA9IGZ1bmN0aW9uIChob29rKSB7IHJldHVybiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICBob29rKHByb3BzKTtcbiAgICByZXR1cm4gbnVsbDtcbn07IH07XG5cbmV4cG9ydCB7IG1ha2VSZW5kZXJsZXNzQ29tcG9uZW50IH07XG4iLCJpbXBvcnQgeyB1c2VGb2N1c0dlc3R1cmUgfSBmcm9tICcuLi8uLi9nZXN0dXJlcy91c2UtZm9jdXMtZ2VzdHVyZS5tanMnO1xuaW1wb3J0IHsgdXNlSG92ZXJHZXN0dXJlIH0gZnJvbSAnLi4vLi4vZ2VzdHVyZXMvdXNlLWhvdmVyLWdlc3R1cmUubWpzJztcbmltcG9ydCB7IHVzZVRhcEdlc3R1cmUgfSBmcm9tICcuLi8uLi9nZXN0dXJlcy91c2UtdGFwLWdlc3R1cmUubWpzJztcbmltcG9ydCB7IHVzZVZpZXdwb3J0IH0gZnJvbSAnLi92aWV3cG9ydC91c2Utdmlld3BvcnQubWpzJztcbmltcG9ydCB7IG1ha2VSZW5kZXJsZXNzQ29tcG9uZW50IH0gZnJvbSAnLi4vdXRpbHMvbWFrZS1yZW5kZXJsZXNzLWNvbXBvbmVudC5tanMnO1xuXG52YXIgZ2VzdHVyZUFuaW1hdGlvbnMgPSB7XG4gICAgaW5WaWV3OiBtYWtlUmVuZGVybGVzc0NvbXBvbmVudCh1c2VWaWV3cG9ydCksXG4gICAgdGFwOiBtYWtlUmVuZGVybGVzc0NvbXBvbmVudCh1c2VUYXBHZXN0dXJlKSxcbiAgICBmb2N1czogbWFrZVJlbmRlcmxlc3NDb21wb25lbnQodXNlRm9jdXNHZXN0dXJlKSxcbiAgICBob3ZlcjogbWFrZVJlbmRlcmxlc3NDb21wb25lbnQodXNlSG92ZXJHZXN0dXJlKSxcbn07XG5cbmV4cG9ydCB7IGdlc3R1cmVBbmltYXRpb25zIH07XG4iLCJpbXBvcnQgeyB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc05vZGVPckNoaWxkIH0gZnJvbSAnLi91dGlscy9pcy1ub2RlLW9yLWNoaWxkLm1qcyc7XG5pbXBvcnQgeyB1c2VQb2ludGVyRXZlbnQsIGFkZFBvaW50ZXJFdmVudCB9IGZyb20gJy4uL2V2ZW50cy91c2UtcG9pbnRlci1ldmVudC5tanMnO1xuaW1wb3J0IHsgdXNlVW5tb3VudEVmZmVjdCB9IGZyb20gJy4uL3V0aWxzL3VzZS11bm1vdW50LWVmZmVjdC5tanMnO1xuaW1wb3J0IHsgcGlwZSB9IGZyb20gJ3BvcG1vdGlvbic7XG5pbXBvcnQgeyBBbmltYXRpb25UeXBlIH0gZnJvbSAnLi4vcmVuZGVyL3V0aWxzL3R5cGVzLm1qcyc7XG5pbXBvcnQgeyBpc0RyYWdBY3RpdmUgfSBmcm9tICcuL2RyYWcvdXRpbHMvbG9jay5tanMnO1xuXG4vKipcbiAqIEBwYXJhbSBoYW5kbGVycyAtXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gdXNlVGFwR2VzdHVyZShfYSkge1xuICAgIHZhciBvblRhcCA9IF9hLm9uVGFwLCBvblRhcFN0YXJ0ID0gX2Eub25UYXBTdGFydCwgb25UYXBDYW5jZWwgPSBfYS5vblRhcENhbmNlbCwgd2hpbGVUYXAgPSBfYS53aGlsZVRhcCwgdmlzdWFsRWxlbWVudCA9IF9hLnZpc3VhbEVsZW1lbnQ7XG4gICAgdmFyIGhhc1ByZXNzTGlzdGVuZXJzID0gb25UYXAgfHwgb25UYXBTdGFydCB8fCBvblRhcENhbmNlbCB8fCB3aGlsZVRhcDtcbiAgICB2YXIgaXNQcmVzc2luZyA9IHVzZVJlZihmYWxzZSk7XG4gICAgdmFyIGNhbmNlbFBvaW50ZXJFbmRMaXN0ZW5lcnMgPSB1c2VSZWYobnVsbCk7XG4gICAgLyoqXG4gICAgICogT25seSBzZXQgbGlzdGVuZXIgdG8gcGFzc2l2ZSBpZiB0aGVyZSBhcmUgbm8gZXh0ZXJuYWwgbGlzdGVuZXJzLlxuICAgICAqL1xuICAgIHZhciBldmVudE9wdGlvbnMgPSB7XG4gICAgICAgIHBhc3NpdmU6ICEob25UYXBTdGFydCB8fCBvblRhcCB8fCBvblRhcENhbmNlbCB8fCBvblBvaW50ZXJEb3duKSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHJlbW92ZVBvaW50ZXJFbmRMaXN0ZW5lcigpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICAoX2EgPSBjYW5jZWxQb2ludGVyRW5kTGlzdGVuZXJzLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKGNhbmNlbFBvaW50ZXJFbmRMaXN0ZW5lcnMpO1xuICAgICAgICBjYW5jZWxQb2ludGVyRW5kTGlzdGVuZXJzLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja1BvaW50ZXJFbmQoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmVtb3ZlUG9pbnRlckVuZExpc3RlbmVyKCk7XG4gICAgICAgIGlzUHJlc3NpbmcuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAoX2EgPSB2aXN1YWxFbGVtZW50LmFuaW1hdGlvblN0YXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2V0QWN0aXZlKEFuaW1hdGlvblR5cGUuVGFwLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiAhaXNEcmFnQWN0aXZlKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9uUG9pbnRlclVwKGV2ZW50LCBpbmZvKSB7XG4gICAgICAgIGlmICghY2hlY2tQb2ludGVyRW5kKCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXZSBvbmx5IGNvdW50IHRoaXMgYXMgYSB0YXAgZ2VzdHVyZSBpZiB0aGUgZXZlbnQudGFyZ2V0IGlzIHRoZSBzYW1lXG4gICAgICAgICAqIGFzLCBvciBhIGNoaWxkIG9mLCB0aGlzIGNvbXBvbmVudCdzIGVsZW1lbnRcbiAgICAgICAgICovXG4gICAgICAgICFpc05vZGVPckNoaWxkKHZpc3VhbEVsZW1lbnQuZ2V0SW5zdGFuY2UoKSwgZXZlbnQudGFyZ2V0KVxuICAgICAgICAgICAgPyBvblRhcENhbmNlbCA9PT0gbnVsbCB8fCBvblRhcENhbmNlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25UYXBDYW5jZWwoZXZlbnQsIGluZm8pXG4gICAgICAgICAgICA6IG9uVGFwID09PSBudWxsIHx8IG9uVGFwID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblRhcChldmVudCwgaW5mbyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9uUG9pbnRlckNhbmNlbChldmVudCwgaW5mbykge1xuICAgICAgICBpZiAoIWNoZWNrUG9pbnRlckVuZCgpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBvblRhcENhbmNlbCA9PT0gbnVsbCB8fCBvblRhcENhbmNlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25UYXBDYW5jZWwoZXZlbnQsIGluZm8pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvblBvaW50ZXJEb3duKGV2ZW50LCBpbmZvKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmVtb3ZlUG9pbnRlckVuZExpc3RlbmVyKCk7XG4gICAgICAgIGlmIChpc1ByZXNzaW5nLmN1cnJlbnQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlzUHJlc3NpbmcuY3VycmVudCA9IHRydWU7XG4gICAgICAgIGNhbmNlbFBvaW50ZXJFbmRMaXN0ZW5lcnMuY3VycmVudCA9IHBpcGUoYWRkUG9pbnRlckV2ZW50KHdpbmRvdywgXCJwb2ludGVydXBcIiwgb25Qb2ludGVyVXAsIGV2ZW50T3B0aW9ucyksIGFkZFBvaW50ZXJFdmVudCh3aW5kb3csIFwicG9pbnRlcmNhbmNlbFwiLCBvblBvaW50ZXJDYW5jZWwsIGV2ZW50T3B0aW9ucykpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRW5zdXJlIHdlIHRyaWdnZXIgYW5pbWF0aW9ucyBiZWZvcmUgZmlyaW5nIGV2ZW50IGNhbGxiYWNrXG4gICAgICAgICAqL1xuICAgICAgICAoX2EgPSB2aXN1YWxFbGVtZW50LmFuaW1hdGlvblN0YXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2V0QWN0aXZlKEFuaW1hdGlvblR5cGUuVGFwLCB0cnVlKTtcbiAgICAgICAgb25UYXBTdGFydCA9PT0gbnVsbCB8fCBvblRhcFN0YXJ0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblRhcFN0YXJ0KGV2ZW50LCBpbmZvKTtcbiAgICB9XG4gICAgdXNlUG9pbnRlckV2ZW50KHZpc3VhbEVsZW1lbnQsIFwicG9pbnRlcmRvd25cIiwgaGFzUHJlc3NMaXN0ZW5lcnMgPyBvblBvaW50ZXJEb3duIDogdW5kZWZpbmVkLCBldmVudE9wdGlvbnMpO1xuICAgIHVzZVVubW91bnRFZmZlY3QocmVtb3ZlUG9pbnRlckVuZExpc3RlbmVyKTtcbn1cblxuZXhwb3J0IHsgdXNlVGFwR2VzdHVyZSB9O1xuIiwiaW1wb3J0IHsgQW5pbWF0aW9uVHlwZSB9IGZyb20gJy4uL3JlbmRlci91dGlscy90eXBlcy5tanMnO1xuaW1wb3J0IHsgdXNlRG9tRXZlbnQgfSBmcm9tICcuLi9ldmVudHMvdXNlLWRvbS1ldmVudC5tanMnO1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gcHJvcHNcbiAqIEBwYXJhbSByZWZcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiB1c2VGb2N1c0dlc3R1cmUoX2EpIHtcbiAgICB2YXIgd2hpbGVGb2N1cyA9IF9hLndoaWxlRm9jdXMsIHZpc3VhbEVsZW1lbnQgPSBfYS52aXN1YWxFbGVtZW50O1xuICAgIHZhciBvbkZvY3VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIChfYSA9IHZpc3VhbEVsZW1lbnQuYW5pbWF0aW9uU3RhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZXRBY3RpdmUoQW5pbWF0aW9uVHlwZS5Gb2N1cywgdHJ1ZSk7XG4gICAgfTtcbiAgICB2YXIgb25CbHVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIChfYSA9IHZpc3VhbEVsZW1lbnQuYW5pbWF0aW9uU3RhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZXRBY3RpdmUoQW5pbWF0aW9uVHlwZS5Gb2N1cywgZmFsc2UpO1xuICAgIH07XG4gICAgdXNlRG9tRXZlbnQodmlzdWFsRWxlbWVudCwgXCJmb2N1c1wiLCB3aGlsZUZvY3VzID8gb25Gb2N1cyA6IHVuZGVmaW5lZCk7XG4gICAgdXNlRG9tRXZlbnQodmlzdWFsRWxlbWVudCwgXCJibHVyXCIsIHdoaWxlRm9jdXMgPyBvbkJsdXIgOiB1bmRlZmluZWQpO1xufVxuXG5leHBvcnQgeyB1c2VGb2N1c0dlc3R1cmUgfTtcbiIsImltcG9ydCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFByZXNlbmNlQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvUHJlc2VuY2VDb250ZXh0Lm1qcyc7XG5pbXBvcnQgeyB1c2VJZCB9IGZyb20gJy4uLy4uL3V0aWxzL3VzZS1pZC5tanMnO1xuXG4vKipcbiAqIFdoZW4gYSBjb21wb25lbnQgaXMgdGhlIGNoaWxkIG9mIGBBbmltYXRlUHJlc2VuY2VgLCBpdCBjYW4gdXNlIGB1c2VQcmVzZW5jZWBcbiAqIHRvIGFjY2VzcyBpbmZvcm1hdGlvbiBhYm91dCB3aGV0aGVyIGl0J3Mgc3RpbGwgcHJlc2VudCBpbiB0aGUgUmVhY3QgdHJlZS5cbiAqXG4gKiBgYGBqc3hcbiAqIGltcG9ydCB7IHVzZVByZXNlbmNlIH0gZnJvbSBcImZyYW1lci1tb3Rpb25cIlxuICpcbiAqIGV4cG9ydCBjb25zdCBDb21wb25lbnQgPSAoKSA9PiB7XG4gKiAgIGNvbnN0IFtpc1ByZXNlbnQsIHNhZmVUb1JlbW92ZV0gPSB1c2VQcmVzZW5jZSgpXG4gKlxuICogICB1c2VFZmZlY3QoKCkgPT4ge1xuICogICAgICFpc1ByZXNlbnQgJiYgc2V0VGltZW91dChzYWZlVG9SZW1vdmUsIDEwMDApXG4gKiAgIH0sIFtpc1ByZXNlbnRdKVxuICpcbiAqICAgcmV0dXJuIDxkaXYgLz5cbiAqIH1cbiAqIGBgYFxuICpcbiAqIElmIGBpc1ByZXNlbnRgIGlzIGBmYWxzZWAsIGl0IG1lYW5zIHRoYXQgYSBjb21wb25lbnQgaGFzIGJlZW4gcmVtb3ZlZCB0aGUgdHJlZSwgYnV0XG4gKiBgQW5pbWF0ZVByZXNlbmNlYCB3b24ndCByZWFsbHkgcmVtb3ZlIGl0IHVudGlsIGBzYWZlVG9SZW1vdmVgIGhhcyBiZWVuIGNhbGxlZC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIHVzZVByZXNlbmNlKCkge1xuICAgIHZhciBjb250ZXh0ID0gdXNlQ29udGV4dChQcmVzZW5jZUNvbnRleHQpO1xuICAgIGlmIChjb250ZXh0ID09PSBudWxsKVxuICAgICAgICByZXR1cm4gW3RydWUsIG51bGxdO1xuICAgIHZhciBpc1ByZXNlbnQgPSBjb250ZXh0LmlzUHJlc2VudCwgb25FeGl0Q29tcGxldGUgPSBjb250ZXh0Lm9uRXhpdENvbXBsZXRlLCByZWdpc3RlciA9IGNvbnRleHQucmVnaXN0ZXI7XG4gICAgLy8gSXQncyBzYWZlIHRvIGNhbGwgdGhlIGZvbGxvd2luZyBob29rcyBjb25kaXRpb25hbGx5IChhZnRlciBhbiBlYXJseSByZXR1cm4pIGJlY2F1c2UgdGhlIGNvbnRleHQgd2lsbCBhbHdheXNcbiAgICAvLyBlaXRoZXIgYmUgbnVsbCBvciBub24tbnVsbCBmb3IgdGhlIGxpZmVzcGFuIG9mIHRoZSBjb21wb25lbnQuXG4gICAgLy8gUmVwbGFjZSB3aXRoIHVzZUlkIHdoZW4gcmVsZWFzZWQgaW4gUmVhY3RcbiAgICB2YXIgaWQgPSB1c2VJZCgpO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7IHJldHVybiByZWdpc3RlcihpZCk7IH0sIFtdKTtcbiAgICB2YXIgc2FmZVRvUmVtb3ZlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb25FeGl0Q29tcGxldGUgPT09IG51bGwgfHwgb25FeGl0Q29tcGxldGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXhpdENvbXBsZXRlKGlkKTsgfTtcbiAgICByZXR1cm4gIWlzUHJlc2VudCAmJiBvbkV4aXRDb21wbGV0ZSA/IFtmYWxzZSwgc2FmZVRvUmVtb3ZlXSA6IFt0cnVlXTtcbn1cbi8qKlxuICogU2ltaWxhciB0byBgdXNlUHJlc2VuY2VgLCBleGNlcHQgYHVzZUlzUHJlc2VudGAgc2ltcGx5IHJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGNvbXBvbmVudCBpcyBwcmVzZW50LlxuICogVGhlcmUgaXMgbm8gYHNhZmVUb1JlbW92ZWAgZnVuY3Rpb24uXG4gKlxuICogYGBganN4XG4gKiBpbXBvcnQgeyB1c2VJc1ByZXNlbnQgfSBmcm9tIFwiZnJhbWVyLW1vdGlvblwiXG4gKlxuICogZXhwb3J0IGNvbnN0IENvbXBvbmVudCA9ICgpID0+IHtcbiAqICAgY29uc3QgaXNQcmVzZW50ID0gdXNlSXNQcmVzZW50KClcbiAqXG4gKiAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gKiAgICAgIWlzUHJlc2VudCAmJiBjb25zb2xlLmxvZyhcIkkndmUgYmVlbiByZW1vdmVkIVwiKVxuICogICB9LCBbaXNQcmVzZW50XSlcbiAqXG4gKiAgIHJldHVybiA8ZGl2IC8+XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIHVzZUlzUHJlc2VudCgpIHtcbiAgICByZXR1cm4gaXNQcmVzZW50KHVzZUNvbnRleHQoUHJlc2VuY2VDb250ZXh0KSk7XG59XG5mdW5jdGlvbiBpc1ByZXNlbnQoY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0ID09PSBudWxsID8gdHJ1ZSA6IGNvbnRleHQuaXNQcmVzZW50O1xufVxuXG5leHBvcnQgeyBpc1ByZXNlbnQsIHVzZUlzUHJlc2VudCwgdXNlUHJlc2VuY2UgfTtcbiIsImZ1bmN0aW9uIHNoYWxsb3dDb21wYXJlKG5leHQsIHByZXYpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJldikpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcHJldkxlbmd0aCA9IHByZXYubGVuZ3RoO1xuICAgIGlmIChwcmV2TGVuZ3RoICE9PSBuZXh0Lmxlbmd0aClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJldkxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwcmV2W2ldICE9PSBuZXh0W2ldKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IHsgc2hhbGxvd0NvbXBhcmUgfTtcbiIsImNvbnN0IGNsYW1wID0gKG1pbiwgbWF4LCB2KSA9PiBNYXRoLm1pbihNYXRoLm1heCh2LCBtaW4pLCBtYXgpO1xuXG5leHBvcnQgeyBjbGFtcCB9O1xuIiwiaW1wb3J0IHsgd2FybmluZyB9IGZyb20gJ2hleS1saXN0ZW4nO1xuaW1wb3J0IHsgY2xhbXAgfSBmcm9tICcuLi8uLi91dGlscy9jbGFtcC5tanMnO1xuXG5jb25zdCBzYWZlTWluID0gMC4wMDE7XG5jb25zdCBtaW5EdXJhdGlvbiA9IDAuMDE7XG5jb25zdCBtYXhEdXJhdGlvbiA9IDEwLjA7XG5jb25zdCBtaW5EYW1waW5nID0gMC4wNTtcbmNvbnN0IG1heERhbXBpbmcgPSAxO1xuZnVuY3Rpb24gZmluZFNwcmluZyh7IGR1cmF0aW9uID0gODAwLCBib3VuY2UgPSAwLjI1LCB2ZWxvY2l0eSA9IDAsIG1hc3MgPSAxLCB9KSB7XG4gICAgbGV0IGVudmVsb3BlO1xuICAgIGxldCBkZXJpdmF0aXZlO1xuICAgIHdhcm5pbmcoZHVyYXRpb24gPD0gbWF4RHVyYXRpb24gKiAxMDAwLCBcIlNwcmluZyBkdXJhdGlvbiBtdXN0IGJlIDEwIHNlY29uZHMgb3IgbGVzc1wiKTtcbiAgICBsZXQgZGFtcGluZ1JhdGlvID0gMSAtIGJvdW5jZTtcbiAgICBkYW1waW5nUmF0aW8gPSBjbGFtcChtaW5EYW1waW5nLCBtYXhEYW1waW5nLCBkYW1waW5nUmF0aW8pO1xuICAgIGR1cmF0aW9uID0gY2xhbXAobWluRHVyYXRpb24sIG1heER1cmF0aW9uLCBkdXJhdGlvbiAvIDEwMDApO1xuICAgIGlmIChkYW1waW5nUmF0aW8gPCAxKSB7XG4gICAgICAgIGVudmVsb3BlID0gKHVuZGFtcGVkRnJlcSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXhwb25lbnRpYWxEZWNheSA9IHVuZGFtcGVkRnJlcSAqIGRhbXBpbmdSYXRpbztcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gZXhwb25lbnRpYWxEZWNheSAqIGR1cmF0aW9uO1xuICAgICAgICAgICAgY29uc3QgYSA9IGV4cG9uZW50aWFsRGVjYXkgLSB2ZWxvY2l0eTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSBjYWxjQW5ndWxhckZyZXEodW5kYW1wZWRGcmVxLCBkYW1waW5nUmF0aW8pO1xuICAgICAgICAgICAgY29uc3QgYyA9IE1hdGguZXhwKC1kZWx0YSk7XG4gICAgICAgICAgICByZXR1cm4gc2FmZU1pbiAtIChhIC8gYikgKiBjO1xuICAgICAgICB9O1xuICAgICAgICBkZXJpdmF0aXZlID0gKHVuZGFtcGVkRnJlcSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXhwb25lbnRpYWxEZWNheSA9IHVuZGFtcGVkRnJlcSAqIGRhbXBpbmdSYXRpbztcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gZXhwb25lbnRpYWxEZWNheSAqIGR1cmF0aW9uO1xuICAgICAgICAgICAgY29uc3QgZCA9IGRlbHRhICogdmVsb2NpdHkgKyB2ZWxvY2l0eTtcbiAgICAgICAgICAgIGNvbnN0IGUgPSBNYXRoLnBvdyhkYW1waW5nUmF0aW8sIDIpICogTWF0aC5wb3codW5kYW1wZWRGcmVxLCAyKSAqIGR1cmF0aW9uO1xuICAgICAgICAgICAgY29uc3QgZiA9IE1hdGguZXhwKC1kZWx0YSk7XG4gICAgICAgICAgICBjb25zdCBnID0gY2FsY0FuZ3VsYXJGcmVxKE1hdGgucG93KHVuZGFtcGVkRnJlcSwgMiksIGRhbXBpbmdSYXRpbyk7XG4gICAgICAgICAgICBjb25zdCBmYWN0b3IgPSAtZW52ZWxvcGUodW5kYW1wZWRGcmVxKSArIHNhZmVNaW4gPiAwID8gLTEgOiAxO1xuICAgICAgICAgICAgcmV0dXJuIChmYWN0b3IgKiAoKGQgLSBlKSAqIGYpKSAvIGc7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBlbnZlbG9wZSA9ICh1bmRhbXBlZEZyZXEpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBNYXRoLmV4cCgtdW5kYW1wZWRGcmVxICogZHVyYXRpb24pO1xuICAgICAgICAgICAgY29uc3QgYiA9ICh1bmRhbXBlZEZyZXEgLSB2ZWxvY2l0eSkgKiBkdXJhdGlvbiArIDE7XG4gICAgICAgICAgICByZXR1cm4gLXNhZmVNaW4gKyBhICogYjtcbiAgICAgICAgfTtcbiAgICAgICAgZGVyaXZhdGl2ZSA9ICh1bmRhbXBlZEZyZXEpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBNYXRoLmV4cCgtdW5kYW1wZWRGcmVxICogZHVyYXRpb24pO1xuICAgICAgICAgICAgY29uc3QgYiA9ICh2ZWxvY2l0eSAtIHVuZGFtcGVkRnJlcSkgKiAoZHVyYXRpb24gKiBkdXJhdGlvbik7XG4gICAgICAgICAgICByZXR1cm4gYSAqIGI7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGluaXRpYWxHdWVzcyA9IDUgLyBkdXJhdGlvbjtcbiAgICBjb25zdCB1bmRhbXBlZEZyZXEgPSBhcHByb3hpbWF0ZVJvb3QoZW52ZWxvcGUsIGRlcml2YXRpdmUsIGluaXRpYWxHdWVzcyk7XG4gICAgZHVyYXRpb24gPSBkdXJhdGlvbiAqIDEwMDA7XG4gICAgaWYgKGlzTmFOKHVuZGFtcGVkRnJlcSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0aWZmbmVzczogMTAwLFxuICAgICAgICAgICAgZGFtcGluZzogMTAsXG4gICAgICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IHN0aWZmbmVzcyA9IE1hdGgucG93KHVuZGFtcGVkRnJlcSwgMikgKiBtYXNzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RpZmZuZXNzLFxuICAgICAgICAgICAgZGFtcGluZzogZGFtcGluZ1JhdGlvICogMiAqIE1hdGguc3FydChtYXNzICogc3RpZmZuZXNzKSxcbiAgICAgICAgICAgIGR1cmF0aW9uLFxuICAgICAgICB9O1xuICAgIH1cbn1cbmNvbnN0IHJvb3RJdGVyYXRpb25zID0gMTI7XG5mdW5jdGlvbiBhcHByb3hpbWF0ZVJvb3QoZW52ZWxvcGUsIGRlcml2YXRpdmUsIGluaXRpYWxHdWVzcykge1xuICAgIGxldCByZXN1bHQgPSBpbml0aWFsR3Vlc3M7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCByb290SXRlcmF0aW9uczsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCAtIGVudmVsb3BlKHJlc3VsdCkgLyBkZXJpdmF0aXZlKHJlc3VsdCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjYWxjQW5ndWxhckZyZXEodW5kYW1wZWRGcmVxLCBkYW1waW5nUmF0aW8pIHtcbiAgICByZXR1cm4gdW5kYW1wZWRGcmVxICogTWF0aC5zcXJ0KDEgLSBkYW1waW5nUmF0aW8gKiBkYW1waW5nUmF0aW8pO1xufVxuXG5leHBvcnQgeyBjYWxjQW5ndWxhckZyZXEsIGZpbmRTcHJpbmcsIG1heERhbXBpbmcsIG1heER1cmF0aW9uLCBtaW5EYW1waW5nLCBtaW5EdXJhdGlvbiB9O1xuIiwiaW1wb3J0IHsgX19yZXN0IH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgZmluZFNwcmluZywgY2FsY0FuZ3VsYXJGcmVxIH0gZnJvbSAnLi4vdXRpbHMvZmluZC1zcHJpbmcubWpzJztcblxuY29uc3QgZHVyYXRpb25LZXlzID0gW1wiZHVyYXRpb25cIiwgXCJib3VuY2VcIl07XG5jb25zdCBwaHlzaWNzS2V5cyA9IFtcInN0aWZmbmVzc1wiLCBcImRhbXBpbmdcIiwgXCJtYXNzXCJdO1xuZnVuY3Rpb24gaXNTcHJpbmdUeXBlKG9wdGlvbnMsIGtleXMpIHtcbiAgICByZXR1cm4ga2V5cy5zb21lKChrZXkpID0+IG9wdGlvbnNba2V5XSAhPT0gdW5kZWZpbmVkKTtcbn1cbmZ1bmN0aW9uIGdldFNwcmluZ09wdGlvbnMob3B0aW9ucykge1xuICAgIGxldCBzcHJpbmdPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7IHZlbG9jaXR5OiAwLjAsIHN0aWZmbmVzczogMTAwLCBkYW1waW5nOiAxMCwgbWFzczogMS4wLCBpc1Jlc29sdmVkRnJvbUR1cmF0aW9uOiBmYWxzZSB9LCBvcHRpb25zKTtcbiAgICBpZiAoIWlzU3ByaW5nVHlwZShvcHRpb25zLCBwaHlzaWNzS2V5cykgJiZcbiAgICAgICAgaXNTcHJpbmdUeXBlKG9wdGlvbnMsIGR1cmF0aW9uS2V5cykpIHtcbiAgICAgICAgY29uc3QgZGVyaXZlZCA9IGZpbmRTcHJpbmcob3B0aW9ucyk7XG4gICAgICAgIHNwcmluZ09wdGlvbnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgc3ByaW5nT3B0aW9ucyksIGRlcml2ZWQpLCB7IHZlbG9jaXR5OiAwLjAsIG1hc3M6IDEuMCB9KTtcbiAgICAgICAgc3ByaW5nT3B0aW9ucy5pc1Jlc29sdmVkRnJvbUR1cmF0aW9uID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHNwcmluZ09wdGlvbnM7XG59XG5mdW5jdGlvbiBzcHJpbmcoX2EpIHtcbiAgICB2YXIgeyBmcm9tID0gMC4wLCB0byA9IDEuMCwgcmVzdFNwZWVkID0gMiwgcmVzdERlbHRhIH0gPSBfYSwgb3B0aW9ucyA9IF9fcmVzdChfYSwgW1wiZnJvbVwiLCBcInRvXCIsIFwicmVzdFNwZWVkXCIsIFwicmVzdERlbHRhXCJdKTtcbiAgICBjb25zdCBzdGF0ZSA9IHsgZG9uZTogZmFsc2UsIHZhbHVlOiBmcm9tIH07XG4gICAgbGV0IHsgc3RpZmZuZXNzLCBkYW1waW5nLCBtYXNzLCB2ZWxvY2l0eSwgZHVyYXRpb24sIGlzUmVzb2x2ZWRGcm9tRHVyYXRpb24sIH0gPSBnZXRTcHJpbmdPcHRpb25zKG9wdGlvbnMpO1xuICAgIGxldCByZXNvbHZlU3ByaW5nID0gemVybztcbiAgICBsZXQgcmVzb2x2ZVZlbG9jaXR5ID0gemVybztcbiAgICBmdW5jdGlvbiBjcmVhdGVTcHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IGluaXRpYWxWZWxvY2l0eSA9IHZlbG9jaXR5ID8gLSh2ZWxvY2l0eSAvIDEwMDApIDogMC4wO1xuICAgICAgICBjb25zdCBpbml0aWFsRGVsdGEgPSB0byAtIGZyb207XG4gICAgICAgIGNvbnN0IGRhbXBpbmdSYXRpbyA9IGRhbXBpbmcgLyAoMiAqIE1hdGguc3FydChzdGlmZm5lc3MgKiBtYXNzKSk7XG4gICAgICAgIGNvbnN0IHVuZGFtcGVkQW5ndWxhckZyZXEgPSBNYXRoLnNxcnQoc3RpZmZuZXNzIC8gbWFzcykgLyAxMDAwO1xuICAgICAgICBpZiAocmVzdERlbHRhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlc3REZWx0YSA9IE1hdGgubWluKE1hdGguYWJzKHRvIC0gZnJvbSkgLyAxMDAsIDAuNCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhbXBpbmdSYXRpbyA8IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGFuZ3VsYXJGcmVxID0gY2FsY0FuZ3VsYXJGcmVxKHVuZGFtcGVkQW5ndWxhckZyZXEsIGRhbXBpbmdSYXRpbyk7XG4gICAgICAgICAgICByZXNvbHZlU3ByaW5nID0gKHQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnZlbG9wZSA9IE1hdGguZXhwKC1kYW1waW5nUmF0aW8gKiB1bmRhbXBlZEFuZ3VsYXJGcmVxICogdCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh0byAtXG4gICAgICAgICAgICAgICAgICAgIGVudmVsb3BlICpcbiAgICAgICAgICAgICAgICAgICAgICAgICgoKGluaXRpYWxWZWxvY2l0eSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFtcGluZ1JhdGlvICogdW5kYW1wZWRBbmd1bGFyRnJlcSAqIGluaXRpYWxEZWx0YSkgL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ3VsYXJGcmVxKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5zaW4oYW5ndWxhckZyZXEgKiB0KSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbERlbHRhICogTWF0aC5jb3MoYW5ndWxhckZyZXEgKiB0KSkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc29sdmVWZWxvY2l0eSA9ICh0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW52ZWxvcGUgPSBNYXRoLmV4cCgtZGFtcGluZ1JhdGlvICogdW5kYW1wZWRBbmd1bGFyRnJlcSAqIHQpO1xuICAgICAgICAgICAgICAgIHJldHVybiAoZGFtcGluZ1JhdGlvICpcbiAgICAgICAgICAgICAgICAgICAgdW5kYW1wZWRBbmd1bGFyRnJlcSAqXG4gICAgICAgICAgICAgICAgICAgIGVudmVsb3BlICpcbiAgICAgICAgICAgICAgICAgICAgKChNYXRoLnNpbihhbmd1bGFyRnJlcSAqIHQpICpcbiAgICAgICAgICAgICAgICAgICAgICAgIChpbml0aWFsVmVsb2NpdHkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbXBpbmdSYXRpbyAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGFtcGVkQW5ndWxhckZyZXEgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsRGVsdGEpKSAvXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmd1bGFyRnJlcSArXG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsRGVsdGEgKiBNYXRoLmNvcyhhbmd1bGFyRnJlcSAqIHQpKSAtXG4gICAgICAgICAgICAgICAgICAgIGVudmVsb3BlICpcbiAgICAgICAgICAgICAgICAgICAgICAgIChNYXRoLmNvcyhhbmd1bGFyRnJlcSAqIHQpICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5pdGlhbFZlbG9jaXR5ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFtcGluZ1JhdGlvICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGFtcGVkQW5ndWxhckZyZXEgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbERlbHRhKSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ndWxhckZyZXEgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsRGVsdGEgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLnNpbihhbmd1bGFyRnJlcSAqIHQpKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhbXBpbmdSYXRpbyA9PT0gMSkge1xuICAgICAgICAgICAgcmVzb2x2ZVNwcmluZyA9ICh0KSA9PiB0byAtXG4gICAgICAgICAgICAgICAgTWF0aC5leHAoLXVuZGFtcGVkQW5ndWxhckZyZXEgKiB0KSAqXG4gICAgICAgICAgICAgICAgICAgIChpbml0aWFsRGVsdGEgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKGluaXRpYWxWZWxvY2l0eSArIHVuZGFtcGVkQW5ndWxhckZyZXEgKiBpbml0aWFsRGVsdGEpICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRhbXBlZEFuZ3VsYXJGcmVxID0gdW5kYW1wZWRBbmd1bGFyRnJlcSAqIE1hdGguc3FydChkYW1waW5nUmF0aW8gKiBkYW1waW5nUmF0aW8gLSAxKTtcbiAgICAgICAgICAgIHJlc29sdmVTcHJpbmcgPSAodCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudmVsb3BlID0gTWF0aC5leHAoLWRhbXBpbmdSYXRpbyAqIHVuZGFtcGVkQW5ndWxhckZyZXEgKiB0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBmcmVxRm9yVCA9IE1hdGgubWluKGRhbXBlZEFuZ3VsYXJGcmVxICogdCwgMzAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRvIC1cbiAgICAgICAgICAgICAgICAgICAgKGVudmVsb3BlICpcbiAgICAgICAgICAgICAgICAgICAgICAgICgoaW5pdGlhbFZlbG9jaXR5ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYW1waW5nUmF0aW8gKiB1bmRhbXBlZEFuZ3VsYXJGcmVxICogaW5pdGlhbERlbHRhKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5zaW5oKGZyZXFGb3JUKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFtcGVkQW5ndWxhckZyZXEgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsRGVsdGEgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLmNvc2goZnJlcUZvclQpKSkgL1xuICAgICAgICAgICAgICAgICAgICAgICAgZGFtcGVkQW5ndWxhckZyZXEpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjcmVhdGVTcHJpbmcoKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiAodCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IHJlc29sdmVTcHJpbmcodCk7XG4gICAgICAgICAgICBpZiAoIWlzUmVzb2x2ZWRGcm9tRHVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmVsb2NpdHkgPSByZXNvbHZlVmVsb2NpdHkodCkgKiAxMDAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQmVsb3dWZWxvY2l0eVRocmVzaG9sZCA9IE1hdGguYWJzKGN1cnJlbnRWZWxvY2l0eSkgPD0gcmVzdFNwZWVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQmVsb3dEaXNwbGFjZW1lbnRUaHJlc2hvbGQgPSBNYXRoLmFicyh0byAtIGN1cnJlbnQpIDw9IHJlc3REZWx0YTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5kb25lID1cbiAgICAgICAgICAgICAgICAgICAgaXNCZWxvd1ZlbG9jaXR5VGhyZXNob2xkICYmIGlzQmVsb3dEaXNwbGFjZW1lbnRUaHJlc2hvbGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5kb25lID0gdCA+PSBkdXJhdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXRlLnZhbHVlID0gc3RhdGUuZG9uZSA/IHRvIDogY3VycmVudDtcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZmxpcFRhcmdldDogKCkgPT4ge1xuICAgICAgICAgICAgdmVsb2NpdHkgPSAtdmVsb2NpdHk7XG4gICAgICAgICAgICBbZnJvbSwgdG9dID0gW3RvLCBmcm9tXTtcbiAgICAgICAgICAgIGNyZWF0ZVNwcmluZygpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5zcHJpbmcubmVlZHNJbnRlcnBvbGF0aW9uID0gKGEsIGIpID0+IHR5cGVvZiBhID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBiID09PSBcInN0cmluZ1wiO1xuY29uc3QgemVybyA9IChfdCkgPT4gMDtcblxuZXhwb3J0IHsgc3ByaW5nIH07XG4iLCJjb25zdCBwcm9ncmVzcyA9IChmcm9tLCB0bywgdmFsdWUpID0+IHtcbiAgICBjb25zdCB0b0Zyb21EaWZmZXJlbmNlID0gdG8gLSBmcm9tO1xuICAgIHJldHVybiB0b0Zyb21EaWZmZXJlbmNlID09PSAwID8gMSA6ICh2YWx1ZSAtIGZyb20pIC8gdG9Gcm9tRGlmZmVyZW5jZTtcbn07XG5cbmV4cG9ydCB7IHByb2dyZXNzIH07XG4iLCJjb25zdCBtaXggPSAoZnJvbSwgdG8sIHByb2dyZXNzKSA9PiAtcHJvZ3Jlc3MgKiBmcm9tICsgcHJvZ3Jlc3MgKiB0byArIGZyb207XG5cbmV4cG9ydCB7IG1peCB9O1xuIiwiaW1wb3J0IHsgaXNTdHJpbmcsIHNpbmdsZUNvbG9yUmVnZXgsIGZsb2F0UmVnZXggfSBmcm9tICcuLi91dGlscy5tanMnO1xuXG5jb25zdCBpc0NvbG9yU3RyaW5nID0gKHR5cGUsIHRlc3RQcm9wKSA9PiAodikgPT4ge1xuICAgIHJldHVybiBCb29sZWFuKChpc1N0cmluZyh2KSAmJiBzaW5nbGVDb2xvclJlZ2V4LnRlc3QodikgJiYgdi5zdGFydHNXaXRoKHR5cGUpKSB8fFxuICAgICAgICAodGVzdFByb3AgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHYsIHRlc3RQcm9wKSkpO1xufTtcbmNvbnN0IHNwbGl0Q29sb3IgPSAoYU5hbWUsIGJOYW1lLCBjTmFtZSkgPT4gKHYpID0+IHtcbiAgICBpZiAoIWlzU3RyaW5nKHYpKVxuICAgICAgICByZXR1cm4gdjtcbiAgICBjb25zdCBbYSwgYiwgYywgYWxwaGFdID0gdi5tYXRjaChmbG9hdFJlZ2V4KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBbYU5hbWVdOiBwYXJzZUZsb2F0KGEpLFxuICAgICAgICBbYk5hbWVdOiBwYXJzZUZsb2F0KGIpLFxuICAgICAgICBbY05hbWVdOiBwYXJzZUZsb2F0KGMpLFxuICAgICAgICBhbHBoYTogYWxwaGEgIT09IHVuZGVmaW5lZCA/IHBhcnNlRmxvYXQoYWxwaGEpIDogMSxcbiAgICB9O1xufTtcblxuZXhwb3J0IHsgaXNDb2xvclN0cmluZywgc3BsaXRDb2xvciB9O1xuIiwiaW1wb3J0IHsgbnVtYmVyLCBhbHBoYSB9IGZyb20gJy4uL251bWJlcnMvaW5kZXgubWpzJztcbmltcG9ydCB7IHNhbml0aXplLCBjbGFtcCB9IGZyb20gJy4uL3V0aWxzLm1qcyc7XG5pbXBvcnQgeyBpc0NvbG9yU3RyaW5nLCBzcGxpdENvbG9yIH0gZnJvbSAnLi91dGlscy5tanMnO1xuXG5jb25zdCBjbGFtcFJnYlVuaXQgPSBjbGFtcCgwLCAyNTUpO1xuY29uc3QgcmdiVW5pdCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgbnVtYmVyKSwgeyB0cmFuc2Zvcm06ICh2KSA9PiBNYXRoLnJvdW5kKGNsYW1wUmdiVW5pdCh2KSkgfSk7XG5jb25zdCByZ2JhID0ge1xuICAgIHRlc3Q6IGlzQ29sb3JTdHJpbmcoJ3JnYicsICdyZWQnKSxcbiAgICBwYXJzZTogc3BsaXRDb2xvcigncmVkJywgJ2dyZWVuJywgJ2JsdWUnKSxcbiAgICB0cmFuc2Zvcm06ICh7IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOiBhbHBoYSQxID0gMSB9KSA9PiAncmdiYSgnICtcbiAgICAgICAgcmdiVW5pdC50cmFuc2Zvcm0ocmVkKSArXG4gICAgICAgICcsICcgK1xuICAgICAgICByZ2JVbml0LnRyYW5zZm9ybShncmVlbikgK1xuICAgICAgICAnLCAnICtcbiAgICAgICAgcmdiVW5pdC50cmFuc2Zvcm0oYmx1ZSkgK1xuICAgICAgICAnLCAnICtcbiAgICAgICAgc2FuaXRpemUoYWxwaGEudHJhbnNmb3JtKGFscGhhJDEpKSArXG4gICAgICAgICcpJyxcbn07XG5cbmV4cG9ydCB7IHJnYlVuaXQsIHJnYmEgfTtcbiIsImltcG9ydCB7IHJnYmEgfSBmcm9tICcuL3JnYmEubWpzJztcbmltcG9ydCB7IGlzQ29sb3JTdHJpbmcgfSBmcm9tICcuL3V0aWxzLm1qcyc7XG5cbmZ1bmN0aW9uIHBhcnNlSGV4KHYpIHtcbiAgICBsZXQgciA9ICcnO1xuICAgIGxldCBnID0gJyc7XG4gICAgbGV0IGIgPSAnJztcbiAgICBsZXQgYSA9ICcnO1xuICAgIGlmICh2Lmxlbmd0aCA+IDUpIHtcbiAgICAgICAgciA9IHYuc3Vic3RyKDEsIDIpO1xuICAgICAgICBnID0gdi5zdWJzdHIoMywgMik7XG4gICAgICAgIGIgPSB2LnN1YnN0cig1LCAyKTtcbiAgICAgICAgYSA9IHYuc3Vic3RyKDcsIDIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgciA9IHYuc3Vic3RyKDEsIDEpO1xuICAgICAgICBnID0gdi5zdWJzdHIoMiwgMSk7XG4gICAgICAgIGIgPSB2LnN1YnN0cigzLCAxKTtcbiAgICAgICAgYSA9IHYuc3Vic3RyKDQsIDEpO1xuICAgICAgICByICs9IHI7XG4gICAgICAgIGcgKz0gZztcbiAgICAgICAgYiArPSBiO1xuICAgICAgICBhICs9IGE7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHJlZDogcGFyc2VJbnQociwgMTYpLFxuICAgICAgICBncmVlbjogcGFyc2VJbnQoZywgMTYpLFxuICAgICAgICBibHVlOiBwYXJzZUludChiLCAxNiksXG4gICAgICAgIGFscGhhOiBhID8gcGFyc2VJbnQoYSwgMTYpIC8gMjU1IDogMSxcbiAgICB9O1xufVxuY29uc3QgaGV4ID0ge1xuICAgIHRlc3Q6IGlzQ29sb3JTdHJpbmcoJyMnKSxcbiAgICBwYXJzZTogcGFyc2VIZXgsXG4gICAgdHJhbnNmb3JtOiByZ2JhLnRyYW5zZm9ybSxcbn07XG5cbmV4cG9ydCB7IGhleCB9O1xuIiwiaW1wb3J0IHsgYWxwaGEgfSBmcm9tICcuLi9udW1iZXJzL2luZGV4Lm1qcyc7XG5pbXBvcnQgeyBwZXJjZW50IH0gZnJvbSAnLi4vbnVtYmVycy91bml0cy5tanMnO1xuaW1wb3J0IHsgc2FuaXRpemUgfSBmcm9tICcuLi91dGlscy5tanMnO1xuaW1wb3J0IHsgaXNDb2xvclN0cmluZywgc3BsaXRDb2xvciB9IGZyb20gJy4vdXRpbHMubWpzJztcblxuY29uc3QgaHNsYSA9IHtcbiAgICB0ZXN0OiBpc0NvbG9yU3RyaW5nKCdoc2wnLCAnaHVlJyksXG4gICAgcGFyc2U6IHNwbGl0Q29sb3IoJ2h1ZScsICdzYXR1cmF0aW9uJywgJ2xpZ2h0bmVzcycpLFxuICAgIHRyYW5zZm9ybTogKHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhOiBhbHBoYSQxID0gMSB9KSA9PiB7XG4gICAgICAgIHJldHVybiAoJ2hzbGEoJyArXG4gICAgICAgICAgICBNYXRoLnJvdW5kKGh1ZSkgK1xuICAgICAgICAgICAgJywgJyArXG4gICAgICAgICAgICBwZXJjZW50LnRyYW5zZm9ybShzYW5pdGl6ZShzYXR1cmF0aW9uKSkgK1xuICAgICAgICAgICAgJywgJyArXG4gICAgICAgICAgICBwZXJjZW50LnRyYW5zZm9ybShzYW5pdGl6ZShsaWdodG5lc3MpKSArXG4gICAgICAgICAgICAnLCAnICtcbiAgICAgICAgICAgIHNhbml0aXplKGFscGhhLnRyYW5zZm9ybShhbHBoYSQxKSkgK1xuICAgICAgICAgICAgJyknKTtcbiAgICB9LFxufTtcblxuZXhwb3J0IHsgaHNsYSB9O1xuIiwiZnVuY3Rpb24gaHVlVG9SZ2IocCwgcSwgdCkge1xuICAgIGlmICh0IDwgMClcbiAgICAgICAgdCArPSAxO1xuICAgIGlmICh0ID4gMSlcbiAgICAgICAgdCAtPSAxO1xuICAgIGlmICh0IDwgMSAvIDYpXG4gICAgICAgIHJldHVybiBwICsgKHEgLSBwKSAqIDYgKiB0O1xuICAgIGlmICh0IDwgMSAvIDIpXG4gICAgICAgIHJldHVybiBxO1xuICAgIGlmICh0IDwgMiAvIDMpXG4gICAgICAgIHJldHVybiBwICsgKHEgLSBwKSAqICgyIC8gMyAtIHQpICogNjtcbiAgICByZXR1cm4gcDtcbn1cbmZ1bmN0aW9uIGhzbGFUb1JnYmEoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSkge1xuICAgIGh1ZSAvPSAzNjA7XG4gICAgc2F0dXJhdGlvbiAvPSAxMDA7XG4gICAgbGlnaHRuZXNzIC89IDEwMDtcbiAgICBsZXQgcmVkID0gMDtcbiAgICBsZXQgZ3JlZW4gPSAwO1xuICAgIGxldCBibHVlID0gMDtcbiAgICBpZiAoIXNhdHVyYXRpb24pIHtcbiAgICAgICAgcmVkID0gZ3JlZW4gPSBibHVlID0gbGlnaHRuZXNzO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgcSA9IGxpZ2h0bmVzcyA8IDAuNVxuICAgICAgICAgICAgPyBsaWdodG5lc3MgKiAoMSArIHNhdHVyYXRpb24pXG4gICAgICAgICAgICA6IGxpZ2h0bmVzcyArIHNhdHVyYXRpb24gLSBsaWdodG5lc3MgKiBzYXR1cmF0aW9uO1xuICAgICAgICBjb25zdCBwID0gMiAqIGxpZ2h0bmVzcyAtIHE7XG4gICAgICAgIHJlZCA9IGh1ZVRvUmdiKHAsIHEsIGh1ZSArIDEgLyAzKTtcbiAgICAgICAgZ3JlZW4gPSBodWVUb1JnYihwLCBxLCBodWUpO1xuICAgICAgICBibHVlID0gaHVlVG9SZ2IocCwgcSwgaHVlIC0gMSAvIDMpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICByZWQ6IE1hdGgucm91bmQocmVkICogMjU1KSxcbiAgICAgICAgZ3JlZW46IE1hdGgucm91bmQoZ3JlZW4gKiAyNTUpLFxuICAgICAgICBibHVlOiBNYXRoLnJvdW5kKGJsdWUgKiAyNTUpLFxuICAgICAgICBhbHBoYSxcbiAgICB9O1xufVxuXG5leHBvcnQgeyBoc2xhVG9SZ2JhIH07XG4iLCJpbXBvcnQgeyBtaXggfSBmcm9tICcuL21peC5tanMnO1xuaW1wb3J0IHsgaHNsYSwgcmdiYSwgaGV4IH0gZnJvbSAnc3R5bGUtdmFsdWUtdHlwZXMnO1xuaW1wb3J0IHsgaW52YXJpYW50IH0gZnJvbSAnaGV5LWxpc3Rlbic7XG5pbXBvcnQgeyBoc2xhVG9SZ2JhIH0gZnJvbSAnLi9oc2xhLXRvLXJnYmEubWpzJztcblxuY29uc3QgbWl4TGluZWFyQ29sb3IgPSAoZnJvbSwgdG8sIHYpID0+IHtcbiAgICBjb25zdCBmcm9tRXhwbyA9IGZyb20gKiBmcm9tO1xuICAgIGNvbnN0IHRvRXhwbyA9IHRvICogdG87XG4gICAgcmV0dXJuIE1hdGguc3FydChNYXRoLm1heCgwLCB2ICogKHRvRXhwbyAtIGZyb21FeHBvKSArIGZyb21FeHBvKSk7XG59O1xuY29uc3QgY29sb3JUeXBlcyA9IFtoZXgsIHJnYmEsIGhzbGFdO1xuY29uc3QgZ2V0Q29sb3JUeXBlID0gKHYpID0+IGNvbG9yVHlwZXMuZmluZCgodHlwZSkgPT4gdHlwZS50ZXN0KHYpKTtcbmNvbnN0IG5vdEFuaW1hdGFibGUgPSAoY29sb3IpID0+IGAnJHtjb2xvcn0nIGlzIG5vdCBhbiBhbmltYXRhYmxlIGNvbG9yLiBVc2UgdGhlIGVxdWl2YWxlbnQgY29sb3IgY29kZSBpbnN0ZWFkLmA7XG5jb25zdCBtaXhDb2xvciA9IChmcm9tLCB0bykgPT4ge1xuICAgIGxldCBmcm9tQ29sb3JUeXBlID0gZ2V0Q29sb3JUeXBlKGZyb20pO1xuICAgIGxldCB0b0NvbG9yVHlwZSA9IGdldENvbG9yVHlwZSh0byk7XG4gICAgaW52YXJpYW50KCEhZnJvbUNvbG9yVHlwZSwgbm90QW5pbWF0YWJsZShmcm9tKSk7XG4gICAgaW52YXJpYW50KCEhdG9Db2xvclR5cGUsIG5vdEFuaW1hdGFibGUodG8pKTtcbiAgICBsZXQgZnJvbUNvbG9yID0gZnJvbUNvbG9yVHlwZS5wYXJzZShmcm9tKTtcbiAgICBsZXQgdG9Db2xvciA9IHRvQ29sb3JUeXBlLnBhcnNlKHRvKTtcbiAgICBpZiAoZnJvbUNvbG9yVHlwZSA9PT0gaHNsYSkge1xuICAgICAgICBmcm9tQ29sb3IgPSBoc2xhVG9SZ2JhKGZyb21Db2xvcik7XG4gICAgICAgIGZyb21Db2xvclR5cGUgPSByZ2JhO1xuICAgIH1cbiAgICBpZiAodG9Db2xvclR5cGUgPT09IGhzbGEpIHtcbiAgICAgICAgdG9Db2xvciA9IGhzbGFUb1JnYmEodG9Db2xvcik7XG4gICAgICAgIHRvQ29sb3JUeXBlID0gcmdiYTtcbiAgICB9XG4gICAgY29uc3QgYmxlbmRlZCA9IE9iamVjdC5hc3NpZ24oe30sIGZyb21Db2xvcik7XG4gICAgcmV0dXJuICh2KSA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGJsZW5kZWQpIHtcbiAgICAgICAgICAgIGlmIChrZXkgIT09IFwiYWxwaGFcIikge1xuICAgICAgICAgICAgICAgIGJsZW5kZWRba2V5XSA9IG1peExpbmVhckNvbG9yKGZyb21Db2xvcltrZXldLCB0b0NvbG9yW2tleV0sIHYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJsZW5kZWQuYWxwaGEgPSBtaXgoZnJvbUNvbG9yLmFscGhhLCB0b0NvbG9yLmFscGhhLCB2KTtcbiAgICAgICAgcmV0dXJuIGZyb21Db2xvclR5cGUudHJhbnNmb3JtKGJsZW5kZWQpO1xuICAgIH07XG59O1xuXG5leHBvcnQgeyBtaXhDb2xvciwgbWl4TGluZWFyQ29sb3IgfTtcbiIsImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi4vdXRpbHMubWpzJztcbmltcG9ydCB7IGhleCB9IGZyb20gJy4vaGV4Lm1qcyc7XG5pbXBvcnQgeyBoc2xhIH0gZnJvbSAnLi9oc2xhLm1qcyc7XG5pbXBvcnQgeyByZ2JhIH0gZnJvbSAnLi9yZ2JhLm1qcyc7XG5cbmNvbnN0IGNvbG9yID0ge1xuICAgIHRlc3Q6ICh2KSA9PiByZ2JhLnRlc3QodikgfHwgaGV4LnRlc3QodikgfHwgaHNsYS50ZXN0KHYpLFxuICAgIHBhcnNlOiAodikgPT4ge1xuICAgICAgICBpZiAocmdiYS50ZXN0KHYpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmdiYS5wYXJzZSh2KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChoc2xhLnRlc3QodikpIHtcbiAgICAgICAgICAgIHJldHVybiBoc2xhLnBhcnNlKHYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGhleC5wYXJzZSh2KTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgdHJhbnNmb3JtOiAodikgPT4ge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcodilcbiAgICAgICAgICAgID8gdlxuICAgICAgICAgICAgOiB2Lmhhc093blByb3BlcnR5KCdyZWQnKVxuICAgICAgICAgICAgICAgID8gcmdiYS50cmFuc2Zvcm0odilcbiAgICAgICAgICAgICAgICA6IGhzbGEudHJhbnNmb3JtKHYpO1xuICAgIH0sXG59O1xuXG5leHBvcnQgeyBjb2xvciB9O1xuIiwiaW1wb3J0IHsgY29sb3IgfSBmcm9tICcuLi9jb2xvci9pbmRleC5tanMnO1xuaW1wb3J0IHsgbnVtYmVyIH0gZnJvbSAnLi4vbnVtYmVycy9pbmRleC5tanMnO1xuaW1wb3J0IHsgaXNTdHJpbmcsIGZsb2F0UmVnZXgsIGNvbG9yUmVnZXgsIHNhbml0aXplIH0gZnJvbSAnLi4vdXRpbHMubWpzJztcblxuY29uc3QgY29sb3JUb2tlbiA9ICcke2N9JztcbmNvbnN0IG51bWJlclRva2VuID0gJyR7bn0nO1xuZnVuY3Rpb24gdGVzdCh2KSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgIHJldHVybiAoaXNOYU4odikgJiZcbiAgICAgICAgaXNTdHJpbmcodikgJiZcbiAgICAgICAgKChfYiA9IChfYSA9IHYubWF0Y2goZmxvYXRSZWdleCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZW5ndGgpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDApICsgKChfZCA9IChfYyA9IHYubWF0Y2goY29sb3JSZWdleCkpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5sZW5ndGgpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IDApID4gMCk7XG59XG5mdW5jdGlvbiBhbmFseXNlKHYpIHtcbiAgICBpZiAodHlwZW9mIHYgPT09ICdudW1iZXInKVxuICAgICAgICB2ID0gYCR7dn1gO1xuICAgIGNvbnN0IHZhbHVlcyA9IFtdO1xuICAgIGxldCBudW1Db2xvcnMgPSAwO1xuICAgIGNvbnN0IGNvbG9ycyA9IHYubWF0Y2goY29sb3JSZWdleCk7XG4gICAgaWYgKGNvbG9ycykge1xuICAgICAgICBudW1Db2xvcnMgPSBjb2xvcnMubGVuZ3RoO1xuICAgICAgICB2ID0gdi5yZXBsYWNlKGNvbG9yUmVnZXgsIGNvbG9yVG9rZW4pO1xuICAgICAgICB2YWx1ZXMucHVzaCguLi5jb2xvcnMubWFwKGNvbG9yLnBhcnNlKSk7XG4gICAgfVxuICAgIGNvbnN0IG51bWJlcnMgPSB2Lm1hdGNoKGZsb2F0UmVnZXgpO1xuICAgIGlmIChudW1iZXJzKSB7XG4gICAgICAgIHYgPSB2LnJlcGxhY2UoZmxvYXRSZWdleCwgbnVtYmVyVG9rZW4pO1xuICAgICAgICB2YWx1ZXMucHVzaCguLi5udW1iZXJzLm1hcChudW1iZXIucGFyc2UpKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgdmFsdWVzLCBudW1Db2xvcnMsIHRva2VuaXNlZDogdiB9O1xufVxuZnVuY3Rpb24gcGFyc2Uodikge1xuICAgIHJldHVybiBhbmFseXNlKHYpLnZhbHVlcztcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRyYW5zZm9ybWVyKHYpIHtcbiAgICBjb25zdCB7IHZhbHVlcywgbnVtQ29sb3JzLCB0b2tlbmlzZWQgfSA9IGFuYWx5c2Uodik7XG4gICAgY29uc3QgbnVtVmFsdWVzID0gdmFsdWVzLmxlbmd0aDtcbiAgICByZXR1cm4gKHYpID0+IHtcbiAgICAgICAgbGV0IG91dHB1dCA9IHRva2VuaXNlZDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1WYWx1ZXM7IGkrKykge1xuICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnJlcGxhY2UoaSA8IG51bUNvbG9ycyA/IGNvbG9yVG9rZW4gOiBudW1iZXJUb2tlbiwgaSA8IG51bUNvbG9ycyA/IGNvbG9yLnRyYW5zZm9ybSh2W2ldKSA6IHNhbml0aXplKHZbaV0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH07XG59XG5jb25zdCBjb252ZXJ0TnVtYmVyc1RvWmVybyA9ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicgPyAwIDogdjtcbmZ1bmN0aW9uIGdldEFuaW1hdGFibGVOb25lKHYpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZSh2KTtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVRyYW5zZm9ybWVyKHYpO1xuICAgIHJldHVybiB0cmFuc2Zvcm1lcihwYXJzZWQubWFwKGNvbnZlcnROdW1iZXJzVG9aZXJvKSk7XG59XG5jb25zdCBjb21wbGV4ID0geyB0ZXN0LCBwYXJzZSwgY3JlYXRlVHJhbnNmb3JtZXIsIGdldEFuaW1hdGFibGVOb25lIH07XG5cbmV4cG9ydCB7IGNvbXBsZXggfTtcbiIsImNvbnN0IHplcm9Qb2ludCA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gICAgejogMFxufTtcbmNvbnN0IGlzTnVtID0gKHYpID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJztcblxuZXhwb3J0IHsgaXNOdW0sIHplcm9Qb2ludCB9O1xuIiwiaW1wb3J0IHsgY29tcGxleCwgY29sb3IgfSBmcm9tICdzdHlsZS12YWx1ZS10eXBlcyc7XG5pbXBvcnQgeyBtaXggfSBmcm9tICcuL21peC5tanMnO1xuaW1wb3J0IHsgbWl4Q29sb3IgfSBmcm9tICcuL21peC1jb2xvci5tanMnO1xuaW1wb3J0IHsgaXNOdW0gfSBmcm9tICcuL2luYy5tanMnO1xuaW1wb3J0IHsgcGlwZSB9IGZyb20gJy4vcGlwZS5tanMnO1xuaW1wb3J0IHsgd2FybmluZyB9IGZyb20gJ2hleS1saXN0ZW4nO1xuXG5mdW5jdGlvbiBnZXRNaXhlcihvcmlnaW4sIHRhcmdldCkge1xuICAgIGlmIChpc051bShvcmlnaW4pKSB7XG4gICAgICAgIHJldHVybiAodikgPT4gbWl4KG9yaWdpbiwgdGFyZ2V0LCB2KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY29sb3IudGVzdChvcmlnaW4pKSB7XG4gICAgICAgIHJldHVybiBtaXhDb2xvcihvcmlnaW4sIHRhcmdldCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gbWl4Q29tcGxleChvcmlnaW4sIHRhcmdldCk7XG4gICAgfVxufVxuY29uc3QgbWl4QXJyYXkgPSAoZnJvbSwgdG8pID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBbLi4uZnJvbV07XG4gICAgY29uc3QgbnVtVmFsdWVzID0gb3V0cHV0Lmxlbmd0aDtcbiAgICBjb25zdCBibGVuZFZhbHVlID0gZnJvbS5tYXAoKGZyb21UaGlzLCBpKSA9PiBnZXRNaXhlcihmcm9tVGhpcywgdG9baV0pKTtcbiAgICByZXR1cm4gKHYpID0+IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1WYWx1ZXM7IGkrKykge1xuICAgICAgICAgICAgb3V0cHV0W2ldID0gYmxlbmRWYWx1ZVtpXSh2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH07XG59O1xuY29uc3QgbWl4T2JqZWN0ID0gKG9yaWdpbiwgdGFyZ2V0KSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcmlnaW4pLCB0YXJnZXQpO1xuICAgIGNvbnN0IGJsZW5kVmFsdWUgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvdXRwdXQpIHtcbiAgICAgICAgaWYgKG9yaWdpbltrZXldICE9PSB1bmRlZmluZWQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYmxlbmRWYWx1ZVtrZXldID0gZ2V0TWl4ZXIob3JpZ2luW2tleV0sIHRhcmdldFtrZXldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gKHYpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gYmxlbmRWYWx1ZSkge1xuICAgICAgICAgICAgb3V0cHV0W2tleV0gPSBibGVuZFZhbHVlW2tleV0odik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9O1xufTtcbmZ1bmN0aW9uIGFuYWx5c2UodmFsdWUpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBjb21wbGV4LnBhcnNlKHZhbHVlKTtcbiAgICBjb25zdCBudW1WYWx1ZXMgPSBwYXJzZWQubGVuZ3RoO1xuICAgIGxldCBudW1OdW1iZXJzID0gMDtcbiAgICBsZXQgbnVtUkdCID0gMDtcbiAgICBsZXQgbnVtSFNMID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVZhbHVlczsgaSsrKSB7XG4gICAgICAgIGlmIChudW1OdW1iZXJzIHx8IHR5cGVvZiBwYXJzZWRbaV0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIG51bU51bWJlcnMrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChwYXJzZWRbaV0uaHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBudW1IU0wrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG51bVJHQisrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHBhcnNlZCwgbnVtTnVtYmVycywgbnVtUkdCLCBudW1IU0wgfTtcbn1cbmNvbnN0IG1peENvbXBsZXggPSAob3JpZ2luLCB0YXJnZXQpID0+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IGNvbXBsZXguY3JlYXRlVHJhbnNmb3JtZXIodGFyZ2V0KTtcbiAgICBjb25zdCBvcmlnaW5TdGF0cyA9IGFuYWx5c2Uob3JpZ2luKTtcbiAgICBjb25zdCB0YXJnZXRTdGF0cyA9IGFuYWx5c2UodGFyZ2V0KTtcbiAgICBjb25zdCBjYW5JbnRlcnBvbGF0ZSA9IG9yaWdpblN0YXRzLm51bUhTTCA9PT0gdGFyZ2V0U3RhdHMubnVtSFNMICYmXG4gICAgICAgIG9yaWdpblN0YXRzLm51bVJHQiA9PT0gdGFyZ2V0U3RhdHMubnVtUkdCICYmXG4gICAgICAgIG9yaWdpblN0YXRzLm51bU51bWJlcnMgPj0gdGFyZ2V0U3RhdHMubnVtTnVtYmVycztcbiAgICBpZiAoY2FuSW50ZXJwb2xhdGUpIHtcbiAgICAgICAgcmV0dXJuIHBpcGUobWl4QXJyYXkob3JpZ2luU3RhdHMucGFyc2VkLCB0YXJnZXRTdGF0cy5wYXJzZWQpLCB0ZW1wbGF0ZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB3YXJuaW5nKHRydWUsIGBDb21wbGV4IHZhbHVlcyAnJHtvcmlnaW59JyBhbmQgJyR7dGFyZ2V0fScgdG9vIGRpZmZlcmVudCB0byBtaXguIEVuc3VyZSBhbGwgY29sb3JzIGFyZSBvZiB0aGUgc2FtZSB0eXBlLCBhbmQgdGhhdCBlYWNoIGNvbnRhaW5zIHRoZSBzYW1lIHF1YW50aXR5IG9mIG51bWJlciBhbmQgY29sb3IgdmFsdWVzLiBGYWxsaW5nIGJhY2sgdG8gaW5zdGFudCB0cmFuc2l0aW9uLmApO1xuICAgICAgICByZXR1cm4gKHApID0+IGAke3AgPiAwID8gdGFyZ2V0IDogb3JpZ2lufWA7XG4gICAgfVxufTtcblxuZXhwb3J0IHsgbWl4QXJyYXksIG1peENvbXBsZXgsIG1peE9iamVjdCB9O1xuIiwiaW1wb3J0IHsgcHJvZ3Jlc3MgfSBmcm9tICcuL3Byb2dyZXNzLm1qcyc7XG5pbXBvcnQgeyBtaXggfSBmcm9tICcuL21peC5tanMnO1xuaW1wb3J0IHsgbWl4Q29sb3IgfSBmcm9tICcuL21peC1jb2xvci5tanMnO1xuaW1wb3J0IHsgbWl4Q29tcGxleCwgbWl4QXJyYXksIG1peE9iamVjdCB9IGZyb20gJy4vbWl4LWNvbXBsZXgubWpzJztcbmltcG9ydCB7IGNvbG9yIH0gZnJvbSAnc3R5bGUtdmFsdWUtdHlwZXMnO1xuaW1wb3J0IHsgY2xhbXAgfSBmcm9tICcuL2NsYW1wLm1qcyc7XG5pbXBvcnQgeyBwaXBlIH0gZnJvbSAnLi9waXBlLm1qcyc7XG5pbXBvcnQgeyBpbnZhcmlhbnQgfSBmcm9tICdoZXktbGlzdGVuJztcblxuY29uc3QgbWl4TnVtYmVyID0gKGZyb20sIHRvKSA9PiAocCkgPT4gbWl4KGZyb20sIHRvLCBwKTtcbmZ1bmN0aW9uIGRldGVjdE1peGVyRmFjdG9yeSh2KSB7XG4gICAgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gbWl4TnVtYmVyO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKGNvbG9yLnRlc3QodikpIHtcbiAgICAgICAgICAgIHJldHVybiBtaXhDb2xvcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBtaXhDb21wbGV4O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodikpIHtcbiAgICAgICAgcmV0dXJuIG1peEFycmF5O1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgdiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG1peE9iamVjdDtcbiAgICB9XG59XG5mdW5jdGlvbiBjcmVhdGVNaXhlcnMob3V0cHV0LCBlYXNlLCBjdXN0b21NaXhlcikge1xuICAgIGNvbnN0IG1peGVycyA9IFtdO1xuICAgIGNvbnN0IG1peGVyRmFjdG9yeSA9IGN1c3RvbU1peGVyIHx8IGRldGVjdE1peGVyRmFjdG9yeShvdXRwdXRbMF0pO1xuICAgIGNvbnN0IG51bU1peGVycyA9IG91dHB1dC5sZW5ndGggLSAxO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtTWl4ZXJzOyBpKyspIHtcbiAgICAgICAgbGV0IG1peGVyID0gbWl4ZXJGYWN0b3J5KG91dHB1dFtpXSwgb3V0cHV0W2kgKyAxXSk7XG4gICAgICAgIGlmIChlYXNlKSB7XG4gICAgICAgICAgICBjb25zdCBlYXNpbmdGdW5jdGlvbiA9IEFycmF5LmlzQXJyYXkoZWFzZSkgPyBlYXNlW2ldIDogZWFzZTtcbiAgICAgICAgICAgIG1peGVyID0gcGlwZShlYXNpbmdGdW5jdGlvbiwgbWl4ZXIpO1xuICAgICAgICB9XG4gICAgICAgIG1peGVycy5wdXNoKG1peGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIG1peGVycztcbn1cbmZ1bmN0aW9uIGZhc3RJbnRlcnBvbGF0ZShbZnJvbSwgdG9dLCBbbWl4ZXJdKSB7XG4gICAgcmV0dXJuICh2KSA9PiBtaXhlcihwcm9ncmVzcyhmcm9tLCB0bywgdikpO1xufVxuZnVuY3Rpb24gc2xvd0ludGVycG9sYXRlKGlucHV0LCBtaXhlcnMpIHtcbiAgICBjb25zdCBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcbiAgICBjb25zdCBsYXN0SW5wdXRJbmRleCA9IGlucHV0TGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gKHYpID0+IHtcbiAgICAgICAgbGV0IG1peGVySW5kZXggPSAwO1xuICAgICAgICBsZXQgZm91bmRNaXhlckluZGV4ID0gZmFsc2U7XG4gICAgICAgIGlmICh2IDw9IGlucHV0WzBdKSB7XG4gICAgICAgICAgICBmb3VuZE1peGVySW5kZXggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHYgPj0gaW5wdXRbbGFzdElucHV0SW5kZXhdKSB7XG4gICAgICAgICAgICBtaXhlckluZGV4ID0gbGFzdElucHV0SW5kZXggLSAxO1xuICAgICAgICAgICAgZm91bmRNaXhlckluZGV4ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZvdW5kTWl4ZXJJbmRleCkge1xuICAgICAgICAgICAgbGV0IGkgPSAxO1xuICAgICAgICAgICAgZm9yICg7IGkgPCBpbnB1dExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0W2ldID4gdiB8fCBpID09PSBsYXN0SW5wdXRJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtaXhlckluZGV4ID0gaSAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvZ3Jlc3NJblJhbmdlID0gcHJvZ3Jlc3MoaW5wdXRbbWl4ZXJJbmRleF0sIGlucHV0W21peGVySW5kZXggKyAxXSwgdik7XG4gICAgICAgIHJldHVybiBtaXhlcnNbbWl4ZXJJbmRleF0ocHJvZ3Jlc3NJblJhbmdlKTtcbiAgICB9O1xufVxuZnVuY3Rpb24gaW50ZXJwb2xhdGUoaW5wdXQsIG91dHB1dCwgeyBjbGFtcDogaXNDbGFtcCA9IHRydWUsIGVhc2UsIG1peGVyIH0gPSB7fSkge1xuICAgIGNvbnN0IGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAgIGludmFyaWFudChpbnB1dExlbmd0aCA9PT0gb3V0cHV0Lmxlbmd0aCwgJ0JvdGggaW5wdXQgYW5kIG91dHB1dCByYW5nZXMgbXVzdCBiZSB0aGUgc2FtZSBsZW5ndGgnKTtcbiAgICBpbnZhcmlhbnQoIWVhc2UgfHwgIUFycmF5LmlzQXJyYXkoZWFzZSkgfHwgZWFzZS5sZW5ndGggPT09IGlucHV0TGVuZ3RoIC0gMSwgJ0FycmF5IG9mIGVhc2luZyBmdW5jdGlvbnMgbXVzdCBiZSBvZiBsZW5ndGggYGlucHV0Lmxlbmd0aCAtIDFgLCBhcyBpdCBhcHBsaWVzIHRvIHRoZSB0cmFuc2l0aW9ucyAqKmJldHdlZW4qKiB0aGUgZGVmaW5lZCB2YWx1ZXMuJyk7XG4gICAgaWYgKGlucHV0WzBdID4gaW5wdXRbaW5wdXRMZW5ndGggLSAxXSkge1xuICAgICAgICBpbnB1dCA9IFtdLmNvbmNhdChpbnB1dCk7XG4gICAgICAgIG91dHB1dCA9IFtdLmNvbmNhdChvdXRwdXQpO1xuICAgICAgICBpbnB1dC5yZXZlcnNlKCk7XG4gICAgICAgIG91dHB1dC5yZXZlcnNlKCk7XG4gICAgfVxuICAgIGNvbnN0IG1peGVycyA9IGNyZWF0ZU1peGVycyhvdXRwdXQsIGVhc2UsIG1peGVyKTtcbiAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBpbnB1dExlbmd0aCA9PT0gMlxuICAgICAgICA/IGZhc3RJbnRlcnBvbGF0ZShpbnB1dCwgbWl4ZXJzKVxuICAgICAgICA6IHNsb3dJbnRlcnBvbGF0ZShpbnB1dCwgbWl4ZXJzKTtcbiAgICByZXR1cm4gaXNDbGFtcFxuICAgICAgICA/ICh2KSA9PiBpbnRlcnBvbGF0b3IoY2xhbXAoaW5wdXRbMF0sIGlucHV0W2lucHV0TGVuZ3RoIC0gMV0sIHYpKVxuICAgICAgICA6IGludGVycG9sYXRvcjtcbn1cblxuZXhwb3J0IHsgaW50ZXJwb2xhdGUgfTtcbiIsImNvbnN0IHJldmVyc2VFYXNpbmcgPSBlYXNpbmcgPT4gcCA9PiAxIC0gZWFzaW5nKDEgLSBwKTtcbmNvbnN0IG1pcnJvckVhc2luZyA9IGVhc2luZyA9PiBwID0+IHAgPD0gMC41ID8gZWFzaW5nKDIgKiBwKSAvIDIgOiAoMiAtIGVhc2luZygyICogKDEgLSBwKSkpIC8gMjtcbmNvbnN0IGNyZWF0ZUV4cG9JbiA9IChwb3dlcikgPT4gcCA9PiBNYXRoLnBvdyhwLCBwb3dlcik7XG5jb25zdCBjcmVhdGVCYWNrSW4gPSAocG93ZXIpID0+IHAgPT4gcCAqIHAgKiAoKHBvd2VyICsgMSkgKiBwIC0gcG93ZXIpO1xuY29uc3QgY3JlYXRlQW50aWNpcGF0ZSA9IChwb3dlcikgPT4ge1xuICAgIGNvbnN0IGJhY2tFYXNpbmcgPSBjcmVhdGVCYWNrSW4ocG93ZXIpO1xuICAgIHJldHVybiBwID0+IChwICo9IDIpIDwgMVxuICAgICAgICA/IDAuNSAqIGJhY2tFYXNpbmcocClcbiAgICAgICAgOiAwLjUgKiAoMiAtIE1hdGgucG93KDIsIC0xMCAqIChwIC0gMSkpKTtcbn07XG5cbmV4cG9ydCB7IGNyZWF0ZUFudGljaXBhdGUsIGNyZWF0ZUJhY2tJbiwgY3JlYXRlRXhwb0luLCBtaXJyb3JFYXNpbmcsIHJldmVyc2VFYXNpbmcgfTtcbiIsImltcG9ydCB7IGNyZWF0ZUV4cG9JbiwgcmV2ZXJzZUVhc2luZywgbWlycm9yRWFzaW5nLCBjcmVhdGVCYWNrSW4sIGNyZWF0ZUFudGljaXBhdGUgfSBmcm9tICcuL3V0aWxzLm1qcyc7XG5cbmNvbnN0IERFRkFVTFRfT1ZFUlNIT09UX1NUUkVOR1RIID0gMS41MjU7XG5jb25zdCBCT1VOQ0VfRklSU1RfVEhSRVNIT0xEID0gNC4wIC8gMTEuMDtcbmNvbnN0IEJPVU5DRV9TRUNPTkRfVEhSRVNIT0xEID0gOC4wIC8gMTEuMDtcbmNvbnN0IEJPVU5DRV9USElSRF9USFJFU0hPTEQgPSA5LjAgLyAxMC4wO1xuY29uc3QgbGluZWFyID0gcCA9PiBwO1xuY29uc3QgZWFzZUluID0gY3JlYXRlRXhwb0luKDIpO1xuY29uc3QgZWFzZU91dCA9IHJldmVyc2VFYXNpbmcoZWFzZUluKTtcbmNvbnN0IGVhc2VJbk91dCA9IG1pcnJvckVhc2luZyhlYXNlSW4pO1xuY29uc3QgY2lyY0luID0gcCA9PiAxIC0gTWF0aC5zaW4oTWF0aC5hY29zKHApKTtcbmNvbnN0IGNpcmNPdXQgPSByZXZlcnNlRWFzaW5nKGNpcmNJbik7XG5jb25zdCBjaXJjSW5PdXQgPSBtaXJyb3JFYXNpbmcoY2lyY091dCk7XG5jb25zdCBiYWNrSW4gPSBjcmVhdGVCYWNrSW4oREVGQVVMVF9PVkVSU0hPT1RfU1RSRU5HVEgpO1xuY29uc3QgYmFja091dCA9IHJldmVyc2VFYXNpbmcoYmFja0luKTtcbmNvbnN0IGJhY2tJbk91dCA9IG1pcnJvckVhc2luZyhiYWNrSW4pO1xuY29uc3QgYW50aWNpcGF0ZSA9IGNyZWF0ZUFudGljaXBhdGUoREVGQVVMVF9PVkVSU0hPT1RfU1RSRU5HVEgpO1xuY29uc3QgY2EgPSA0MzU2LjAgLyAzNjEuMDtcbmNvbnN0IGNiID0gMzU0NDIuMCAvIDE4MDUuMDtcbmNvbnN0IGNjID0gMTYwNjEuMCAvIDE4MDUuMDtcbmNvbnN0IGJvdW5jZU91dCA9IChwKSA9PiB7XG4gICAgaWYgKHAgPT09IDEgfHwgcCA9PT0gMClcbiAgICAgICAgcmV0dXJuIHA7XG4gICAgY29uc3QgcDIgPSBwICogcDtcbiAgICByZXR1cm4gcCA8IEJPVU5DRV9GSVJTVF9USFJFU0hPTERcbiAgICAgICAgPyA3LjU2MjUgKiBwMlxuICAgICAgICA6IHAgPCBCT1VOQ0VfU0VDT05EX1RIUkVTSE9MRFxuICAgICAgICAgICAgPyA5LjA3NSAqIHAyIC0gOS45ICogcCArIDMuNFxuICAgICAgICAgICAgOiBwIDwgQk9VTkNFX1RISVJEX1RIUkVTSE9MRFxuICAgICAgICAgICAgICAgID8gY2EgKiBwMiAtIGNiICogcCArIGNjXG4gICAgICAgICAgICAgICAgOiAxMC44ICogcCAqIHAgLSAyMC41MiAqIHAgKyAxMC43Mjtcbn07XG5jb25zdCBib3VuY2VJbiA9IHJldmVyc2VFYXNpbmcoYm91bmNlT3V0KTtcbmNvbnN0IGJvdW5jZUluT3V0ID0gKHApID0+IHAgPCAwLjVcbiAgICA/IDAuNSAqICgxLjAgLSBib3VuY2VPdXQoMS4wIC0gcCAqIDIuMCkpXG4gICAgOiAwLjUgKiBib3VuY2VPdXQocCAqIDIuMCAtIDEuMCkgKyAwLjU7XG5cbmV4cG9ydCB7IGFudGljaXBhdGUsIGJhY2tJbiwgYmFja0luT3V0LCBiYWNrT3V0LCBib3VuY2VJbiwgYm91bmNlSW5PdXQsIGJvdW5jZU91dCwgY2lyY0luLCBjaXJjSW5PdXQsIGNpcmNPdXQsIGVhc2VJbiwgZWFzZUluT3V0LCBlYXNlT3V0LCBsaW5lYXIgfTtcbiIsImltcG9ydCB7IGludGVycG9sYXRlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW50ZXJwb2xhdGUubWpzJztcbmltcG9ydCB7IGVhc2VJbk91dCB9IGZyb20gJy4uLy4uL2Vhc2luZy9pbmRleC5tanMnO1xuXG5mdW5jdGlvbiBkZWZhdWx0RWFzaW5nKHZhbHVlcywgZWFzaW5nKSB7XG4gICAgcmV0dXJuIHZhbHVlcy5tYXAoKCkgPT4gZWFzaW5nIHx8IGVhc2VJbk91dCkuc3BsaWNlKDAsIHZhbHVlcy5sZW5ndGggLSAxKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRPZmZzZXQodmFsdWVzKSB7XG4gICAgY29uc3QgbnVtVmFsdWVzID0gdmFsdWVzLmxlbmd0aDtcbiAgICByZXR1cm4gdmFsdWVzLm1hcCgoX3ZhbHVlLCBpKSA9PiBpICE9PSAwID8gaSAvIChudW1WYWx1ZXMgLSAxKSA6IDApO1xufVxuZnVuY3Rpb24gY29udmVydE9mZnNldFRvVGltZXMob2Zmc2V0LCBkdXJhdGlvbikge1xuICAgIHJldHVybiBvZmZzZXQubWFwKChvKSA9PiBvICogZHVyYXRpb24pO1xufVxuZnVuY3Rpb24ga2V5ZnJhbWVzKHsgZnJvbSA9IDAsIHRvID0gMSwgZWFzZSwgb2Zmc2V0LCBkdXJhdGlvbiA9IDMwMCwgfSkge1xuICAgIGNvbnN0IHN0YXRlID0geyBkb25lOiBmYWxzZSwgdmFsdWU6IGZyb20gfTtcbiAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KHRvKSA/IHRvIDogW2Zyb20sIHRvXTtcbiAgICBjb25zdCB0aW1lcyA9IGNvbnZlcnRPZmZzZXRUb1RpbWVzKG9mZnNldCAmJiBvZmZzZXQubGVuZ3RoID09PSB2YWx1ZXMubGVuZ3RoXG4gICAgICAgID8gb2Zmc2V0XG4gICAgICAgIDogZGVmYXVsdE9mZnNldCh2YWx1ZXMpLCBkdXJhdGlvbik7XG4gICAgZnVuY3Rpb24gY3JlYXRlSW50ZXJwb2xhdG9yKCkge1xuICAgICAgICByZXR1cm4gaW50ZXJwb2xhdGUodGltZXMsIHZhbHVlcywge1xuICAgICAgICAgICAgZWFzZTogQXJyYXkuaXNBcnJheShlYXNlKSA/IGVhc2UgOiBkZWZhdWx0RWFzaW5nKHZhbHVlcywgZWFzZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsZXQgaW50ZXJwb2xhdG9yID0gY3JlYXRlSW50ZXJwb2xhdG9yKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogKHQpID0+IHtcbiAgICAgICAgICAgIHN0YXRlLnZhbHVlID0gaW50ZXJwb2xhdG9yKHQpO1xuICAgICAgICAgICAgc3RhdGUuZG9uZSA9IHQgPj0gZHVyYXRpb247XG4gICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgIH0sXG4gICAgICAgIGZsaXBUYXJnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgIHZhbHVlcy5yZXZlcnNlKCk7XG4gICAgICAgICAgICBpbnRlcnBvbGF0b3IgPSBjcmVhdGVJbnRlcnBvbGF0b3IoKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG5leHBvcnQgeyBjb252ZXJ0T2Zmc2V0VG9UaW1lcywgZGVmYXVsdEVhc2luZywgZGVmYXVsdE9mZnNldCwga2V5ZnJhbWVzIH07XG4iLCJpbXBvcnQgeyBzcHJpbmcgfSBmcm9tICcuLi9nZW5lcmF0b3JzL3NwcmluZy5tanMnO1xuaW1wb3J0IHsga2V5ZnJhbWVzIH0gZnJvbSAnLi4vZ2VuZXJhdG9ycy9rZXlmcmFtZXMubWpzJztcbmltcG9ydCB7IGRlY2F5IH0gZnJvbSAnLi4vZ2VuZXJhdG9ycy9kZWNheS5tanMnO1xuXG5jb25zdCB0eXBlcyA9IHsga2V5ZnJhbWVzLCBzcHJpbmcsIGRlY2F5IH07XG5mdW5jdGlvbiBkZXRlY3RBbmltYXRpb25Gcm9tT3B0aW9ucyhjb25maWcpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb25maWcudG8pKSB7XG4gICAgICAgIHJldHVybiBrZXlmcmFtZXM7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVzW2NvbmZpZy50eXBlXSkge1xuICAgICAgICByZXR1cm4gdHlwZXNbY29uZmlnLnR5cGVdO1xuICAgIH1cbiAgICBjb25zdCBrZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyhjb25maWcpKTtcbiAgICBpZiAoa2V5cy5oYXMoXCJlYXNlXCIpIHx8XG4gICAgICAgIChrZXlzLmhhcyhcImR1cmF0aW9uXCIpICYmICFrZXlzLmhhcyhcImRhbXBpbmdSYXRpb1wiKSkpIHtcbiAgICAgICAgcmV0dXJuIGtleWZyYW1lcztcbiAgICB9XG4gICAgZWxzZSBpZiAoa2V5cy5oYXMoXCJkYW1waW5nUmF0aW9cIikgfHxcbiAgICAgICAga2V5cy5oYXMoXCJzdGlmZm5lc3NcIikgfHxcbiAgICAgICAga2V5cy5oYXMoXCJtYXNzXCIpIHx8XG4gICAgICAgIGtleXMuaGFzKFwiZGFtcGluZ1wiKSB8fFxuICAgICAgICBrZXlzLmhhcyhcInJlc3RTcGVlZFwiKSB8fFxuICAgICAgICBrZXlzLmhhcyhcInJlc3REZWx0YVwiKSkge1xuICAgICAgICByZXR1cm4gc3ByaW5nO1xuICAgIH1cbiAgICByZXR1cm4ga2V5ZnJhbWVzO1xufVxuXG5leHBvcnQgeyBkZXRlY3RBbmltYXRpb25Gcm9tT3B0aW9ucyB9O1xuIiwiZnVuY3Rpb24gZGVjYXkoeyB2ZWxvY2l0eSA9IDAsIGZyb20gPSAwLCBwb3dlciA9IDAuOCwgdGltZUNvbnN0YW50ID0gMzUwLCByZXN0RGVsdGEgPSAwLjUsIG1vZGlmeVRhcmdldCwgfSkge1xuICAgIGNvbnN0IHN0YXRlID0geyBkb25lOiBmYWxzZSwgdmFsdWU6IGZyb20gfTtcbiAgICBsZXQgYW1wbGl0dWRlID0gcG93ZXIgKiB2ZWxvY2l0eTtcbiAgICBjb25zdCBpZGVhbCA9IGZyb20gKyBhbXBsaXR1ZGU7XG4gICAgY29uc3QgdGFyZ2V0ID0gbW9kaWZ5VGFyZ2V0ID09PSB1bmRlZmluZWQgPyBpZGVhbCA6IG1vZGlmeVRhcmdldChpZGVhbCk7XG4gICAgaWYgKHRhcmdldCAhPT0gaWRlYWwpXG4gICAgICAgIGFtcGxpdHVkZSA9IHRhcmdldCAtIGZyb207XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogKHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gLWFtcGxpdHVkZSAqIE1hdGguZXhwKC10IC8gdGltZUNvbnN0YW50KTtcbiAgICAgICAgICAgIHN0YXRlLmRvbmUgPSAhKGRlbHRhID4gcmVzdERlbHRhIHx8IGRlbHRhIDwgLXJlc3REZWx0YSk7XG4gICAgICAgICAgICBzdGF0ZS52YWx1ZSA9IHN0YXRlLmRvbmUgPyB0YXJnZXQgOiB0YXJnZXQgKyBkZWx0YTtcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZmxpcFRhcmdldDogKCkgPT4geyB9LFxuICAgIH07XG59XG5cbmV4cG9ydCB7IGRlY2F5IH07XG4iLCJmdW5jdGlvbiBsb29wRWxhcHNlZChlbGFwc2VkLCBkdXJhdGlvbiwgZGVsYXkgPSAwKSB7XG4gICAgcmV0dXJuIGVsYXBzZWQgLSBkdXJhdGlvbiAtIGRlbGF5O1xufVxuZnVuY3Rpb24gcmV2ZXJzZUVsYXBzZWQoZWxhcHNlZCwgZHVyYXRpb24sIGRlbGF5ID0gMCwgaXNGb3J3YXJkUGxheWJhY2sgPSB0cnVlKSB7XG4gICAgcmV0dXJuIGlzRm9yd2FyZFBsYXliYWNrXG4gICAgICAgID8gbG9vcEVsYXBzZWQoZHVyYXRpb24gKyAtZWxhcHNlZCwgZHVyYXRpb24sIGRlbGF5KVxuICAgICAgICA6IGR1cmF0aW9uIC0gKGVsYXBzZWQgLSBkdXJhdGlvbikgKyBkZWxheTtcbn1cbmZ1bmN0aW9uIGhhc1JlcGVhdERlbGF5RWxhcHNlZChlbGFwc2VkLCBkdXJhdGlvbiwgZGVsYXksIGlzRm9yd2FyZFBsYXliYWNrKSB7XG4gICAgcmV0dXJuIGlzRm9yd2FyZFBsYXliYWNrID8gZWxhcHNlZCA+PSBkdXJhdGlvbiArIGRlbGF5IDogZWxhcHNlZCA8PSAtZGVsYXk7XG59XG5cbmV4cG9ydCB7IGhhc1JlcGVhdERlbGF5RWxhcHNlZCwgbG9vcEVsYXBzZWQsIHJldmVyc2VFbGFwc2VkIH07XG4iLCJpbXBvcnQgeyBfX3Jlc3QgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBkZXRlY3RBbmltYXRpb25Gcm9tT3B0aW9ucyB9IGZyb20gJy4vdXRpbHMvZGV0ZWN0LWFuaW1hdGlvbi1mcm9tLW9wdGlvbnMubWpzJztcbmltcG9ydCBzeW5jLCB7IGNhbmNlbFN5bmMgfSBmcm9tICdmcmFtZXN5bmMnO1xuaW1wb3J0IHsgaW50ZXJwb2xhdGUgfSBmcm9tICcuLi91dGlscy9pbnRlcnBvbGF0ZS5tanMnO1xuaW1wb3J0IHsgaGFzUmVwZWF0RGVsYXlFbGFwc2VkLCByZXZlcnNlRWxhcHNlZCwgbG9vcEVsYXBzZWQgfSBmcm9tICcuL3V0aWxzL2VsYXBzZWQubWpzJztcblxuY29uc3QgZnJhbWVzeW5jID0gKHVwZGF0ZSkgPT4ge1xuICAgIGNvbnN0IHBhc3NUaW1lc3RhbXAgPSAoeyBkZWx0YSB9KSA9PiB1cGRhdGUoZGVsdGEpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0OiAoKSA9PiBzeW5jLnVwZGF0ZShwYXNzVGltZXN0YW1wLCB0cnVlKSxcbiAgICAgICAgc3RvcDogKCkgPT4gY2FuY2VsU3luYy51cGRhdGUocGFzc1RpbWVzdGFtcCksXG4gICAgfTtcbn07XG5mdW5jdGlvbiBhbmltYXRlKF9hKSB7XG4gICAgdmFyIF9iLCBfYztcbiAgICB2YXIgeyBmcm9tLCBhdXRvcGxheSA9IHRydWUsIGRyaXZlciA9IGZyYW1lc3luYywgZWxhcHNlZCA9IDAsIHJlcGVhdDogcmVwZWF0TWF4ID0gMCwgcmVwZWF0VHlwZSA9IFwibG9vcFwiLCByZXBlYXREZWxheSA9IDAsIG9uUGxheSwgb25TdG9wLCBvbkNvbXBsZXRlLCBvblJlcGVhdCwgb25VcGRhdGUgfSA9IF9hLCBvcHRpb25zID0gX19yZXN0KF9hLCBbXCJmcm9tXCIsIFwiYXV0b3BsYXlcIiwgXCJkcml2ZXJcIiwgXCJlbGFwc2VkXCIsIFwicmVwZWF0XCIsIFwicmVwZWF0VHlwZVwiLCBcInJlcGVhdERlbGF5XCIsIFwib25QbGF5XCIsIFwib25TdG9wXCIsIFwib25Db21wbGV0ZVwiLCBcIm9uUmVwZWF0XCIsIFwib25VcGRhdGVcIl0pO1xuICAgIGxldCB7IHRvIH0gPSBvcHRpb25zO1xuICAgIGxldCBkcml2ZXJDb250cm9scztcbiAgICBsZXQgcmVwZWF0Q291bnQgPSAwO1xuICAgIGxldCBjb21wdXRlZER1cmF0aW9uID0gb3B0aW9ucy5kdXJhdGlvbjtcbiAgICBsZXQgbGF0ZXN0O1xuICAgIGxldCBpc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgbGV0IGlzRm9yd2FyZFBsYXliYWNrID0gdHJ1ZTtcbiAgICBsZXQgaW50ZXJwb2xhdGVGcm9tTnVtYmVyO1xuICAgIGNvbnN0IGFuaW1hdG9yID0gZGV0ZWN0QW5pbWF0aW9uRnJvbU9wdGlvbnMob3B0aW9ucyk7XG4gICAgaWYgKChfYyA9IChfYiA9IGFuaW1hdG9yKS5uZWVkc0ludGVycG9sYXRpb24pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5jYWxsKF9iLCBmcm9tLCB0bykpIHtcbiAgICAgICAgaW50ZXJwb2xhdGVGcm9tTnVtYmVyID0gaW50ZXJwb2xhdGUoWzAsIDEwMF0sIFtmcm9tLCB0b10sIHtcbiAgICAgICAgICAgIGNsYW1wOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGZyb20gPSAwO1xuICAgICAgICB0byA9IDEwMDtcbiAgICB9XG4gICAgY29uc3QgYW5pbWF0aW9uID0gYW5pbWF0b3IoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBmcm9tLCB0byB9KSk7XG4gICAgZnVuY3Rpb24gcmVwZWF0KCkge1xuICAgICAgICByZXBlYXRDb3VudCsrO1xuICAgICAgICBpZiAocmVwZWF0VHlwZSA9PT0gXCJyZXZlcnNlXCIpIHtcbiAgICAgICAgICAgIGlzRm9yd2FyZFBsYXliYWNrID0gcmVwZWF0Q291bnQgJSAyID09PSAwO1xuICAgICAgICAgICAgZWxhcHNlZCA9IHJldmVyc2VFbGFwc2VkKGVsYXBzZWQsIGNvbXB1dGVkRHVyYXRpb24sIHJlcGVhdERlbGF5LCBpc0ZvcndhcmRQbGF5YmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlbGFwc2VkID0gbG9vcEVsYXBzZWQoZWxhcHNlZCwgY29tcHV0ZWREdXJhdGlvbiwgcmVwZWF0RGVsYXkpO1xuICAgICAgICAgICAgaWYgKHJlcGVhdFR5cGUgPT09IFwibWlycm9yXCIpXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLmZsaXBUYXJnZXQoKTtcbiAgICAgICAgfVxuICAgICAgICBpc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgIG9uUmVwZWF0ICYmIG9uUmVwZWF0KCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbXBsZXRlKCkge1xuICAgICAgICBkcml2ZXJDb250cm9scy5zdG9wKCk7XG4gICAgICAgIG9uQ29tcGxldGUgJiYgb25Db21wbGV0ZSgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGUoZGVsdGEpIHtcbiAgICAgICAgaWYgKCFpc0ZvcndhcmRQbGF5YmFjaylcbiAgICAgICAgICAgIGRlbHRhID0gLWRlbHRhO1xuICAgICAgICBlbGFwc2VkICs9IGRlbHRhO1xuICAgICAgICBpZiAoIWlzQ29tcGxldGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gYW5pbWF0aW9uLm5leHQoTWF0aC5tYXgoMCwgZWxhcHNlZCkpO1xuICAgICAgICAgICAgbGF0ZXN0ID0gc3RhdGUudmFsdWU7XG4gICAgICAgICAgICBpZiAoaW50ZXJwb2xhdGVGcm9tTnVtYmVyKVxuICAgICAgICAgICAgICAgIGxhdGVzdCA9IGludGVycG9sYXRlRnJvbU51bWJlcihsYXRlc3QpO1xuICAgICAgICAgICAgaXNDb21wbGV0ZSA9IGlzRm9yd2FyZFBsYXliYWNrID8gc3RhdGUuZG9uZSA6IGVsYXBzZWQgPD0gMDtcbiAgICAgICAgfVxuICAgICAgICBvblVwZGF0ZSA9PT0gbnVsbCB8fCBvblVwZGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25VcGRhdGUobGF0ZXN0KTtcbiAgICAgICAgaWYgKGlzQ29tcGxldGUpIHtcbiAgICAgICAgICAgIGlmIChyZXBlYXRDb3VudCA9PT0gMClcbiAgICAgICAgICAgICAgICBjb21wdXRlZER1cmF0aW9uICE9PSBudWxsICYmIGNvbXB1dGVkRHVyYXRpb24gIT09IHZvaWQgMCA/IGNvbXB1dGVkRHVyYXRpb24gOiAoY29tcHV0ZWREdXJhdGlvbiA9IGVsYXBzZWQpO1xuICAgICAgICAgICAgaWYgKHJlcGVhdENvdW50IDwgcmVwZWF0TWF4KSB7XG4gICAgICAgICAgICAgICAgaGFzUmVwZWF0RGVsYXlFbGFwc2VkKGVsYXBzZWQsIGNvbXB1dGVkRHVyYXRpb24sIHJlcGVhdERlbGF5LCBpc0ZvcndhcmRQbGF5YmFjaykgJiYgcmVwZWF0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBsYXkoKSB7XG4gICAgICAgIG9uUGxheSA9PT0gbnVsbCB8fCBvblBsYXkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uUGxheSgpO1xuICAgICAgICBkcml2ZXJDb250cm9scyA9IGRyaXZlcih1cGRhdGUpO1xuICAgICAgICBkcml2ZXJDb250cm9scy5zdGFydCgpO1xuICAgIH1cbiAgICBhdXRvcGxheSAmJiBwbGF5KCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RvcDogKCkgPT4ge1xuICAgICAgICAgICAgb25TdG9wID09PSBudWxsIHx8IG9uU3RvcCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25TdG9wKCk7XG4gICAgICAgICAgICBkcml2ZXJDb250cm9scy5zdG9wKCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuZXhwb3J0IHsgYW5pbWF0ZSB9O1xuIiwiZnVuY3Rpb24gdmVsb2NpdHlQZXJTZWNvbmQodmVsb2NpdHksIGZyYW1lRHVyYXRpb24pIHtcbiAgICByZXR1cm4gZnJhbWVEdXJhdGlvbiA/IHZlbG9jaXR5ICogKDEwMDAgLyBmcmFtZUR1cmF0aW9uKSA6IDA7XG59XG5cbmV4cG9ydCB7IHZlbG9jaXR5UGVyU2Vjb25kIH07XG4iLCIvKipcbiAqIENvbnZlcnRzIHNlY29uZHMgdG8gbWlsbGlzZWNvbmRzXG4gKlxuICogQHBhcmFtIHNlY29uZHMgLSBUaW1lIGluIHNlY29uZHMuXG4gKiBAcmV0dXJuIG1pbGxpc2Vjb25kcyAtIENvbnZlcnRlZCB0aW1lIGluIG1pbGxpc2Vjb25kcy5cbiAqL1xudmFyIHNlY29uZHNUb01pbGxpc2Vjb25kcyA9IGZ1bmN0aW9uIChzZWNvbmRzKSB7IHJldHVybiBzZWNvbmRzICogMTAwMDsgfTtcblxuZXhwb3J0IHsgc2Vjb25kc1RvTWlsbGlzZWNvbmRzIH07XG4iLCJpbXBvcnQgeyBsaW5lYXIgfSBmcm9tICcuL2luZGV4Lm1qcyc7XG5cbmNvbnN0IGEgPSAoYTEsIGEyKSA9PiAxLjAgLSAzLjAgKiBhMiArIDMuMCAqIGExO1xuY29uc3QgYiA9IChhMSwgYTIpID0+IDMuMCAqIGEyIC0gNi4wICogYTE7XG5jb25zdCBjID0gKGExKSA9PiAzLjAgKiBhMTtcbmNvbnN0IGNhbGNCZXppZXIgPSAodCwgYTEsIGEyKSA9PiAoKGEoYTEsIGEyKSAqIHQgKyBiKGExLCBhMikpICogdCArIGMoYTEpKSAqIHQ7XG5jb25zdCBnZXRTbG9wZSA9ICh0LCBhMSwgYTIpID0+IDMuMCAqIGEoYTEsIGEyKSAqIHQgKiB0ICsgMi4wICogYihhMSwgYTIpICogdCArIGMoYTEpO1xuY29uc3Qgc3ViZGl2aXNpb25QcmVjaXNpb24gPSAwLjAwMDAwMDE7XG5jb25zdCBzdWJkaXZpc2lvbk1heEl0ZXJhdGlvbnMgPSAxMDtcbmZ1bmN0aW9uIGJpbmFyeVN1YmRpdmlkZShhWCwgYUEsIGFCLCBtWDEsIG1YMikge1xuICAgIGxldCBjdXJyZW50WDtcbiAgICBsZXQgY3VycmVudFQ7XG4gICAgbGV0IGkgPSAwO1xuICAgIGRvIHtcbiAgICAgICAgY3VycmVudFQgPSBhQSArIChhQiAtIGFBKSAvIDIuMDtcbiAgICAgICAgY3VycmVudFggPSBjYWxjQmV6aWVyKGN1cnJlbnRULCBtWDEsIG1YMikgLSBhWDtcbiAgICAgICAgaWYgKGN1cnJlbnRYID4gMC4wKSB7XG4gICAgICAgICAgICBhQiA9IGN1cnJlbnRUO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYUEgPSBjdXJyZW50VDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKE1hdGguYWJzKGN1cnJlbnRYKSA+IHN1YmRpdmlzaW9uUHJlY2lzaW9uICYmXG4gICAgICAgICsraSA8IHN1YmRpdmlzaW9uTWF4SXRlcmF0aW9ucyk7XG4gICAgcmV0dXJuIGN1cnJlbnRUO1xufVxuY29uc3QgbmV3dG9uSXRlcmF0aW9ucyA9IDg7XG5jb25zdCBuZXd0b25NaW5TbG9wZSA9IDAuMDAxO1xuZnVuY3Rpb24gbmV3dG9uUmFwaHNvbkl0ZXJhdGUoYVgsIGFHdWVzc1QsIG1YMSwgbVgyKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXd0b25JdGVyYXRpb25zOyArK2kpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFNsb3BlID0gZ2V0U2xvcGUoYUd1ZXNzVCwgbVgxLCBtWDIpO1xuICAgICAgICBpZiAoY3VycmVudFNsb3BlID09PSAwLjApIHtcbiAgICAgICAgICAgIHJldHVybiBhR3Vlc3NUO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRYID0gY2FsY0JlemllcihhR3Vlc3NULCBtWDEsIG1YMikgLSBhWDtcbiAgICAgICAgYUd1ZXNzVCAtPSBjdXJyZW50WCAvIGN1cnJlbnRTbG9wZTtcbiAgICB9XG4gICAgcmV0dXJuIGFHdWVzc1Q7XG59XG5jb25zdCBrU3BsaW5lVGFibGVTaXplID0gMTE7XG5jb25zdCBrU2FtcGxlU3RlcFNpemUgPSAxLjAgLyAoa1NwbGluZVRhYmxlU2l6ZSAtIDEuMCk7XG5mdW5jdGlvbiBjdWJpY0JlemllcihtWDEsIG1ZMSwgbVgyLCBtWTIpIHtcbiAgICBpZiAobVgxID09PSBtWTEgJiYgbVgyID09PSBtWTIpXG4gICAgICAgIHJldHVybiBsaW5lYXI7XG4gICAgY29uc3Qgc2FtcGxlVmFsdWVzID0gbmV3IEZsb2F0MzJBcnJheShrU3BsaW5lVGFibGVTaXplKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtTcGxpbmVUYWJsZVNpemU7ICsraSkge1xuICAgICAgICBzYW1wbGVWYWx1ZXNbaV0gPSBjYWxjQmV6aWVyKGkgKiBrU2FtcGxlU3RlcFNpemUsIG1YMSwgbVgyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0VEZvclgoYVgpIHtcbiAgICAgICAgbGV0IGludGVydmFsU3RhcnQgPSAwLjA7XG4gICAgICAgIGxldCBjdXJyZW50U2FtcGxlID0gMTtcbiAgICAgICAgY29uc3QgbGFzdFNhbXBsZSA9IGtTcGxpbmVUYWJsZVNpemUgLSAxO1xuICAgICAgICBmb3IgKDsgY3VycmVudFNhbXBsZSAhPT0gbGFzdFNhbXBsZSAmJiBzYW1wbGVWYWx1ZXNbY3VycmVudFNhbXBsZV0gPD0gYVg7ICsrY3VycmVudFNhbXBsZSkge1xuICAgICAgICAgICAgaW50ZXJ2YWxTdGFydCArPSBrU2FtcGxlU3RlcFNpemU7XG4gICAgICAgIH1cbiAgICAgICAgLS1jdXJyZW50U2FtcGxlO1xuICAgICAgICBjb25zdCBkaXN0ID0gKGFYIC0gc2FtcGxlVmFsdWVzW2N1cnJlbnRTYW1wbGVdKSAvXG4gICAgICAgICAgICAoc2FtcGxlVmFsdWVzW2N1cnJlbnRTYW1wbGUgKyAxXSAtIHNhbXBsZVZhbHVlc1tjdXJyZW50U2FtcGxlXSk7XG4gICAgICAgIGNvbnN0IGd1ZXNzRm9yVCA9IGludGVydmFsU3RhcnQgKyBkaXN0ICoga1NhbXBsZVN0ZXBTaXplO1xuICAgICAgICBjb25zdCBpbml0aWFsU2xvcGUgPSBnZXRTbG9wZShndWVzc0ZvclQsIG1YMSwgbVgyKTtcbiAgICAgICAgaWYgKGluaXRpYWxTbG9wZSA+PSBuZXd0b25NaW5TbG9wZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ld3RvblJhcGhzb25JdGVyYXRlKGFYLCBndWVzc0ZvclQsIG1YMSwgbVgyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpbml0aWFsU2xvcGUgPT09IDAuMCkge1xuICAgICAgICAgICAgcmV0dXJuIGd1ZXNzRm9yVDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBiaW5hcnlTdWJkaXZpZGUoYVgsIGludGVydmFsU3RhcnQsIGludGVydmFsU3RhcnQgKyBrU2FtcGxlU3RlcFNpemUsIG1YMSwgbVgyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gKHQpID0+IHQgPT09IDAgfHwgdCA9PT0gMSA/IHQgOiBjYWxjQmV6aWVyKGdldFRGb3JYKHQpLCBtWTEsIG1ZMik7XG59XG5cbmV4cG9ydCB7IGN1YmljQmV6aWVyIH07XG4iLCJpbXBvcnQgeyBfX3JlYWQgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBpbnZhcmlhbnQgfSBmcm9tICdoZXktbGlzdGVuJztcbmltcG9ydCB7IGN1YmljQmV6aWVyLCBsaW5lYXIsIGVhc2VJbiwgZWFzZUluT3V0LCBlYXNlT3V0LCBjaXJjSW4sIGNpcmNJbk91dCwgY2lyY091dCwgYmFja0luLCBiYWNrSW5PdXQsIGJhY2tPdXQsIGFudGljaXBhdGUsIGJvdW5jZUluLCBib3VuY2VJbk91dCwgYm91bmNlT3V0IH0gZnJvbSAncG9wbW90aW9uJztcblxudmFyIGVhc2luZ0xvb2t1cCA9IHtcbiAgICBsaW5lYXI6IGxpbmVhcixcbiAgICBlYXNlSW46IGVhc2VJbixcbiAgICBlYXNlSW5PdXQ6IGVhc2VJbk91dCxcbiAgICBlYXNlT3V0OiBlYXNlT3V0LFxuICAgIGNpcmNJbjogY2lyY0luLFxuICAgIGNpcmNJbk91dDogY2lyY0luT3V0LFxuICAgIGNpcmNPdXQ6IGNpcmNPdXQsXG4gICAgYmFja0luOiBiYWNrSW4sXG4gICAgYmFja0luT3V0OiBiYWNrSW5PdXQsXG4gICAgYmFja091dDogYmFja091dCxcbiAgICBhbnRpY2lwYXRlOiBhbnRpY2lwYXRlLFxuICAgIGJvdW5jZUluOiBib3VuY2VJbixcbiAgICBib3VuY2VJbk91dDogYm91bmNlSW5PdXQsXG4gICAgYm91bmNlT3V0OiBib3VuY2VPdXQsXG59O1xudmFyIGVhc2luZ0RlZmluaXRpb25Ub0Z1bmN0aW9uID0gZnVuY3Rpb24gKGRlZmluaXRpb24pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkZWZpbml0aW9uKSkge1xuICAgICAgICAvLyBJZiBjdWJpYyBiZXppZXIgZGVmaW5pdGlvbiwgY3JlYXRlIGJlemllciBjdXJ2ZVxuICAgICAgICBpbnZhcmlhbnQoZGVmaW5pdGlvbi5sZW5ndGggPT09IDQsIFwiQ3ViaWMgYmV6aWVyIGFycmF5cyBtdXN0IGNvbnRhaW4gZm91ciBudW1lcmljYWwgdmFsdWVzLlwiKTtcbiAgICAgICAgdmFyIF9hID0gX19yZWFkKGRlZmluaXRpb24sIDQpLCB4MSA9IF9hWzBdLCB5MSA9IF9hWzFdLCB4MiA9IF9hWzJdLCB5MiA9IF9hWzNdO1xuICAgICAgICByZXR1cm4gY3ViaWNCZXppZXIoeDEsIHkxLCB4MiwgeTIpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5pdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAvLyBFbHNlIGxvb2t1cCBmcm9tIHRhYmxlXG4gICAgICAgIGludmFyaWFudChlYXNpbmdMb29rdXBbZGVmaW5pdGlvbl0gIT09IHVuZGVmaW5lZCwgXCJJbnZhbGlkIGVhc2luZyB0eXBlICdcIi5jb25jYXQoZGVmaW5pdGlvbiwgXCInXCIpKTtcbiAgICAgICAgcmV0dXJuIGVhc2luZ0xvb2t1cFtkZWZpbml0aW9uXTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmluaXRpb247XG59O1xudmFyIGlzRWFzaW5nQXJyYXkgPSBmdW5jdGlvbiAoZWFzZSkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGVhc2UpICYmIHR5cGVvZiBlYXNlWzBdICE9PSBcIm51bWJlclwiO1xufTtcblxuZXhwb3J0IHsgZWFzaW5nRGVmaW5pdGlvblRvRnVuY3Rpb24sIGlzRWFzaW5nQXJyYXkgfTtcbiIsImltcG9ydCB7IGNvbXBsZXggfSBmcm9tICdzdHlsZS12YWx1ZS10eXBlcyc7XG5cbi8qKlxuICogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBhbmltYXRhYmxlLiBFeGFtcGxlczpcbiAqXG4gKiDinIU6IDEwMCwgXCIxMDBweFwiLCBcIiNmZmZcIlxuICog4p2MOiBcImJsb2NrXCIsIFwidXJsKDIuanBnKVwiXG4gKiBAcGFyYW0gdmFsdWVcbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xudmFyIGlzQW5pbWF0YWJsZSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgLy8gSWYgdGhlIGxpc3Qgb2Yga2V5cyB0YXQgbWlnaHQgYmUgbm9uLWFuaW1hdGFibGUgZ3Jvd3MsIHJlcGxhY2Ugd2l0aCBTZXRcbiAgICBpZiAoa2V5ID09PSBcInpJbmRleFwiKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gSWYgaXQncyBhIG51bWJlciBvciBhIGtleWZyYW1lcyBhcnJheSwgd2UgY2FuIGFuaW1hdGUgaXQuIFdlIG1pZ2h0IGF0IHNvbWUgcG9pbnRcbiAgICAvLyBuZWVkIHRvIGRvIGEgZGVlcCBpc0FuaW1hdGFibGUgY2hlY2sgb2Yga2V5ZnJhbWVzLCBvciBsZXQgUG9wbW90aW9uIGhhbmRsZSB0aGlzLFxuICAgIC8vIGJ1dCBmb3Igbm93IGxldHMgbGVhdmUgaXQgbGlrZSB0aGlzIGZvciBwZXJmb3JtYW5jZSByZWFzb25zXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAvLyBJdCdzIGFuaW1hdGFibGUgaWYgd2UgaGF2ZSBhIHN0cmluZ1xuICAgICAgICBjb21wbGV4LnRlc3QodmFsdWUpICYmIC8vIEFuZCBpdCBjb250YWlucyBudW1iZXJzIGFuZC9vciBjb2xvcnNcbiAgICAgICAgIXZhbHVlLnN0YXJ0c1dpdGgoXCJ1cmwoXCIpIC8vIFVubGVzcyBpdCBzdGFydHMgd2l0aCBcInVybChcIlxuICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IHsgaXNBbmltYXRhYmxlIH07XG4iLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IGlzS2V5ZnJhbWVzVGFyZ2V0IH0gZnJvbSAnLi9pcy1rZXlmcmFtZXMtdGFyZ2V0Lm1qcyc7XG5cbnZhciB1bmRlckRhbXBlZFNwcmluZyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7XG4gICAgdHlwZTogXCJzcHJpbmdcIixcbiAgICBzdGlmZm5lc3M6IDUwMCxcbiAgICBkYW1waW5nOiAyNSxcbiAgICByZXN0U3BlZWQ6IDEwLFxufSk7IH07XG52YXIgY3JpdGljYWxseURhbXBlZFNwcmluZyA9IGZ1bmN0aW9uICh0bykgeyByZXR1cm4gKHtcbiAgICB0eXBlOiBcInNwcmluZ1wiLFxuICAgIHN0aWZmbmVzczogNTUwLFxuICAgIGRhbXBpbmc6IHRvID09PSAwID8gMiAqIE1hdGguc3FydCg1NTApIDogMzAsXG4gICAgcmVzdFNwZWVkOiAxMCxcbn0pOyB9O1xudmFyIGxpbmVhclR3ZWVuID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gKHtcbiAgICB0eXBlOiBcImtleWZyYW1lc1wiLFxuICAgIGVhc2U6IFwibGluZWFyXCIsXG4gICAgZHVyYXRpb246IDAuMyxcbn0pOyB9O1xudmFyIGtleWZyYW1lcyA9IGZ1bmN0aW9uICh2YWx1ZXMpIHsgcmV0dXJuICh7XG4gICAgdHlwZTogXCJrZXlmcmFtZXNcIixcbiAgICBkdXJhdGlvbjogMC44LFxuICAgIHZhbHVlczogdmFsdWVzLFxufSk7IH07XG52YXIgZGVmYXVsdFRyYW5zaXRpb25zID0ge1xuICAgIHg6IHVuZGVyRGFtcGVkU3ByaW5nLFxuICAgIHk6IHVuZGVyRGFtcGVkU3ByaW5nLFxuICAgIHo6IHVuZGVyRGFtcGVkU3ByaW5nLFxuICAgIHJvdGF0ZTogdW5kZXJEYW1wZWRTcHJpbmcsXG4gICAgcm90YXRlWDogdW5kZXJEYW1wZWRTcHJpbmcsXG4gICAgcm90YXRlWTogdW5kZXJEYW1wZWRTcHJpbmcsXG4gICAgcm90YXRlWjogdW5kZXJEYW1wZWRTcHJpbmcsXG4gICAgc2NhbGVYOiBjcml0aWNhbGx5RGFtcGVkU3ByaW5nLFxuICAgIHNjYWxlWTogY3JpdGljYWxseURhbXBlZFNwcmluZyxcbiAgICBzY2FsZTogY3JpdGljYWxseURhbXBlZFNwcmluZyxcbiAgICBvcGFjaXR5OiBsaW5lYXJUd2VlbixcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGxpbmVhclR3ZWVuLFxuICAgIGNvbG9yOiBsaW5lYXJUd2VlbixcbiAgICBkZWZhdWx0OiBjcml0aWNhbGx5RGFtcGVkU3ByaW5nLFxufTtcbnZhciBnZXREZWZhdWx0VHJhbnNpdGlvbiA9IGZ1bmN0aW9uICh2YWx1ZUtleSwgdG8pIHtcbiAgICB2YXIgdHJhbnNpdGlvbkZhY3Rvcnk7XG4gICAgaWYgKGlzS2V5ZnJhbWVzVGFyZ2V0KHRvKSkge1xuICAgICAgICB0cmFuc2l0aW9uRmFjdG9yeSA9IGtleWZyYW1lcztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRyYW5zaXRpb25GYWN0b3J5ID1cbiAgICAgICAgICAgIGRlZmF1bHRUcmFuc2l0aW9uc1t2YWx1ZUtleV0gfHwgZGVmYXVsdFRyYW5zaXRpb25zLmRlZmF1bHQ7XG4gICAgfVxuICAgIHJldHVybiBfX2Fzc2lnbih7IHRvOiB0byB9LCB0cmFuc2l0aW9uRmFjdG9yeSh0bykpO1xufTtcblxuZXhwb3J0IHsgY3JpdGljYWxseURhbXBlZFNwcmluZywgZ2V0RGVmYXVsdFRyYW5zaXRpb24sIGxpbmVhclR3ZWVuLCB1bmRlckRhbXBlZFNwcmluZyB9O1xuIiwiaW1wb3J0IHsgY29tcGxleCB9IGZyb20gJy4vaW5kZXgubWpzJztcbmltcG9ydCB7IGZsb2F0UmVnZXggfSBmcm9tICcuLi91dGlscy5tanMnO1xuXG5jb25zdCBtYXhEZWZhdWx0cyA9IG5ldyBTZXQoWydicmlnaHRuZXNzJywgJ2NvbnRyYXN0JywgJ3NhdHVyYXRlJywgJ29wYWNpdHknXSk7XG5mdW5jdGlvbiBhcHBseURlZmF1bHRGaWx0ZXIodikge1xuICAgIGxldCBbbmFtZSwgdmFsdWVdID0gdi5zbGljZSgwLCAtMSkuc3BsaXQoJygnKTtcbiAgICBpZiAobmFtZSA9PT0gJ2Ryb3Atc2hhZG93JylcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgY29uc3QgW251bWJlcl0gPSB2YWx1ZS5tYXRjaChmbG9hdFJlZ2V4KSB8fCBbXTtcbiAgICBpZiAoIW51bWJlcilcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgY29uc3QgdW5pdCA9IHZhbHVlLnJlcGxhY2UobnVtYmVyLCAnJyk7XG4gICAgbGV0IGRlZmF1bHRWYWx1ZSA9IG1heERlZmF1bHRzLmhhcyhuYW1lKSA/IDEgOiAwO1xuICAgIGlmIChudW1iZXIgIT09IHZhbHVlKVxuICAgICAgICBkZWZhdWx0VmFsdWUgKj0gMTAwO1xuICAgIHJldHVybiBuYW1lICsgJygnICsgZGVmYXVsdFZhbHVlICsgdW5pdCArICcpJztcbn1cbmNvbnN0IGZ1bmN0aW9uUmVnZXggPSAvKFthLXotXSopXFwoLio/XFwpL2c7XG5jb25zdCBmaWx0ZXIgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNvbXBsZXgpLCB7IGdldEFuaW1hdGFibGVOb25lOiAodikgPT4ge1xuICAgICAgICBjb25zdCBmdW5jdGlvbnMgPSB2Lm1hdGNoKGZ1bmN0aW9uUmVnZXgpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb25zID8gZnVuY3Rpb25zLm1hcChhcHBseURlZmF1bHRGaWx0ZXIpLmpvaW4oJyAnKSA6IHY7XG4gICAgfSB9KTtcblxuZXhwb3J0IHsgZmlsdGVyIH07XG4iLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IGNvbG9yLCBmaWx0ZXIgfSBmcm9tICdzdHlsZS12YWx1ZS10eXBlcyc7XG5pbXBvcnQgeyBudW1iZXJWYWx1ZVR5cGVzIH0gZnJvbSAnLi9udW1iZXIubWpzJztcblxuLyoqXG4gKiBBIG1hcCBvZiBkZWZhdWx0IHZhbHVlIHR5cGVzIGZvciBjb21tb24gdmFsdWVzXG4gKi9cbnZhciBkZWZhdWx0VmFsdWVUeXBlcyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBudW1iZXJWYWx1ZVR5cGVzKSwgeyBcbiAgICAvLyBDb2xvciBwcm9wc1xuICAgIGNvbG9yOiBjb2xvciwgYmFja2dyb3VuZENvbG9yOiBjb2xvciwgb3V0bGluZUNvbG9yOiBjb2xvciwgZmlsbDogY29sb3IsIHN0cm9rZTogY29sb3IsIFxuICAgIC8vIEJvcmRlciBwcm9wc1xuICAgIGJvcmRlckNvbG9yOiBjb2xvciwgYm9yZGVyVG9wQ29sb3I6IGNvbG9yLCBib3JkZXJSaWdodENvbG9yOiBjb2xvciwgYm9yZGVyQm90dG9tQ29sb3I6IGNvbG9yLCBib3JkZXJMZWZ0Q29sb3I6IGNvbG9yLCBmaWx0ZXI6IGZpbHRlciwgV2Via2l0RmlsdGVyOiBmaWx0ZXIgfSk7XG4vKipcbiAqIEdldHMgdGhlIGRlZmF1bHQgVmFsdWVUeXBlIGZvciB0aGUgcHJvdmlkZWQgdmFsdWUga2V5XG4gKi9cbnZhciBnZXREZWZhdWx0VmFsdWVUeXBlID0gZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gZGVmYXVsdFZhbHVlVHlwZXNba2V5XTsgfTtcblxuZXhwb3J0IHsgZGVmYXVsdFZhbHVlVHlwZXMsIGdldERlZmF1bHRWYWx1ZVR5cGUgfTtcbiIsImltcG9ydCB7IGZpbHRlciwgY29tcGxleCB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcbmltcG9ydCB7IGdldERlZmF1bHRWYWx1ZVR5cGUgfSBmcm9tICcuL2RlZmF1bHRzLm1qcyc7XG5cbmZ1bmN0aW9uIGdldEFuaW1hdGFibGVOb25lKGtleSwgdmFsdWUpIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIGRlZmF1bHRWYWx1ZVR5cGUgPSBnZXREZWZhdWx0VmFsdWVUeXBlKGtleSk7XG4gICAgaWYgKGRlZmF1bHRWYWx1ZVR5cGUgIT09IGZpbHRlcilcbiAgICAgICAgZGVmYXVsdFZhbHVlVHlwZSA9IGNvbXBsZXg7XG4gICAgLy8gSWYgdmFsdWUgaXMgbm90IHJlY29nbmlzZWQgYXMgYW5pbWF0YWJsZSwgaWUgXCJub25lXCIsIGNyZWF0ZSBhbiBhbmltYXRhYmxlIHZlcnNpb24gb3JpZ2luIGJhc2VkIG9uIHRoZSB0YXJnZXRcbiAgICByZXR1cm4gKF9hID0gZGVmYXVsdFZhbHVlVHlwZS5nZXRBbmltYXRhYmxlTm9uZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwoZGVmYXVsdFZhbHVlVHlwZSwgdmFsdWUpO1xufVxuXG5leHBvcnQgeyBnZXRBbmltYXRhYmxlTm9uZSB9O1xuIiwidmFyIGluc3RhbnRBbmltYXRpb25TdGF0ZSA9IHtcbiAgICBjdXJyZW50OiBmYWxzZSxcbn07XG5cbmV4cG9ydCB7IGluc3RhbnRBbmltYXRpb25TdGF0ZSB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24sIF9fcmVzdCwgX19zcHJlYWRBcnJheSwgX19yZWFkIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgaW5lcnRpYSwgYW5pbWF0ZSB9IGZyb20gJ3BvcG1vdGlvbic7XG5pbXBvcnQgeyBzZWNvbmRzVG9NaWxsaXNlY29uZHMgfSBmcm9tICcuLi8uLi91dGlscy90aW1lLWNvbnZlcnNpb24ubWpzJztcbmltcG9ydCB7IGlzRWFzaW5nQXJyYXksIGVhc2luZ0RlZmluaXRpb25Ub0Z1bmN0aW9uIH0gZnJvbSAnLi9lYXNpbmcubWpzJztcbmltcG9ydCB7IGlzQW5pbWF0YWJsZSB9IGZyb20gJy4vaXMtYW5pbWF0YWJsZS5tanMnO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFRyYW5zaXRpb24gfSBmcm9tICcuL2RlZmF1bHQtdHJhbnNpdGlvbnMubWpzJztcbmltcG9ydCB7IHdhcm5pbmcgfSBmcm9tICdoZXktbGlzdGVuJztcbmltcG9ydCB7IGdldEFuaW1hdGFibGVOb25lIH0gZnJvbSAnLi4vLi4vcmVuZGVyL2RvbS92YWx1ZS10eXBlcy9hbmltYXRhYmxlLW5vbmUubWpzJztcbmltcG9ydCB7IGluc3RhbnRBbmltYXRpb25TdGF0ZSB9IGZyb20gJy4uLy4uL3V0aWxzL3VzZS1pbnN0YW50LXRyYW5zaXRpb24tc3RhdGUubWpzJztcbmltcG9ydCB7IHJlc29sdmVGaW5hbFZhbHVlSW5LZXlmcmFtZXMgfSBmcm9tICcuLi8uLi91dGlscy9yZXNvbHZlLXZhbHVlLm1qcyc7XG5cbi8qKlxuICogRGVjaWRlIHdoZXRoZXIgYSB0cmFuc2l0aW9uIGlzIGRlZmluZWQgb24gYSBnaXZlbiBUcmFuc2l0aW9uLlxuICogVGhpcyBmaWx0ZXJzIG91dCBvcmNoZXN0cmF0aW9uIG9wdGlvbnMgYW5kIHJldHVybnMgdHJ1ZVxuICogaWYgYW55IG9wdGlvbnMgYXJlIGxlZnQuXG4gKi9cbmZ1bmN0aW9uIGlzVHJhbnNpdGlvbkRlZmluZWQoX2EpIHtcbiAgICBfYS53aGVuOyBfYS5kZWxheTsgX2EuZGVsYXlDaGlsZHJlbjsgX2Euc3RhZ2dlckNoaWxkcmVuOyBfYS5zdGFnZ2VyRGlyZWN0aW9uOyBfYS5yZXBlYXQ7IF9hLnJlcGVhdFR5cGU7IF9hLnJlcGVhdERlbGF5OyBfYS5mcm9tOyB2YXIgdHJhbnNpdGlvbiA9IF9fcmVzdChfYSwgW1wid2hlblwiLCBcImRlbGF5XCIsIFwiZGVsYXlDaGlsZHJlblwiLCBcInN0YWdnZXJDaGlsZHJlblwiLCBcInN0YWdnZXJEaXJlY3Rpb25cIiwgXCJyZXBlYXRcIiwgXCJyZXBlYXRUeXBlXCIsIFwicmVwZWF0RGVsYXlcIiwgXCJmcm9tXCJdKTtcbiAgICByZXR1cm4gISFPYmplY3Qua2V5cyh0cmFuc2l0aW9uKS5sZW5ndGg7XG59XG52YXIgbGVnYWN5UmVwZWF0V2FybmluZyA9IGZhbHNlO1xuLyoqXG4gKiBDb252ZXJ0IEZyYW1lciBNb3Rpb24ncyBUcmFuc2l0aW9uIHR5cGUgaW50byBQb3Btb3Rpb24tY29tcGF0aWJsZSBvcHRpb25zLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0VHJhbnNpdGlvblRvQW5pbWF0aW9uT3B0aW9ucyhfYSkge1xuICAgIHZhciBlYXNlID0gX2EuZWFzZSwgdGltZXMgPSBfYS50aW1lcywgeW95byA9IF9hLnlveW8sIGZsaXAgPSBfYS5mbGlwLCBsb29wID0gX2EubG9vcCwgdHJhbnNpdGlvbiA9IF9fcmVzdChfYSwgW1wiZWFzZVwiLCBcInRpbWVzXCIsIFwieW95b1wiLCBcImZsaXBcIiwgXCJsb29wXCJdKTtcbiAgICB2YXIgb3B0aW9ucyA9IF9fYXNzaWduKHt9LCB0cmFuc2l0aW9uKTtcbiAgICBpZiAodGltZXMpXG4gICAgICAgIG9wdGlvbnNbXCJvZmZzZXRcIl0gPSB0aW1lcztcbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGFueSBleGlzdGluZyBkdXJhdGlvbnMgZnJvbSBzZWNvbmRzIHRvIG1pbGxpc2Vjb25kc1xuICAgICAqL1xuICAgIGlmICh0cmFuc2l0aW9uLmR1cmF0aW9uKVxuICAgICAgICBvcHRpb25zW1wiZHVyYXRpb25cIl0gPSBzZWNvbmRzVG9NaWxsaXNlY29uZHModHJhbnNpdGlvbi5kdXJhdGlvbik7XG4gICAgaWYgKHRyYW5zaXRpb24ucmVwZWF0RGVsYXkpXG4gICAgICAgIG9wdGlvbnMucmVwZWF0RGVsYXkgPSBzZWNvbmRzVG9NaWxsaXNlY29uZHModHJhbnNpdGlvbi5yZXBlYXREZWxheSk7XG4gICAgLyoqXG4gICAgICogTWFwIGVhc2luZyBuYW1lcyB0byBQb3Btb3Rpb24ncyBlYXNpbmcgZnVuY3Rpb25zXG4gICAgICovXG4gICAgaWYgKGVhc2UpIHtcbiAgICAgICAgb3B0aW9uc1tcImVhc2VcIl0gPSBpc0Vhc2luZ0FycmF5KGVhc2UpXG4gICAgICAgICAgICA/IGVhc2UubWFwKGVhc2luZ0RlZmluaXRpb25Ub0Z1bmN0aW9uKVxuICAgICAgICAgICAgOiBlYXNpbmdEZWZpbml0aW9uVG9GdW5jdGlvbihlYXNlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3VwcG9ydCBsZWdhY3kgdHJhbnNpdGlvbiBBUElcbiAgICAgKi9cbiAgICBpZiAodHJhbnNpdGlvbi50eXBlID09PSBcInR3ZWVuXCIpXG4gICAgICAgIG9wdGlvbnMudHlwZSA9IFwia2V5ZnJhbWVzXCI7XG4gICAgLyoqXG4gICAgICogVE9ETzogVGhlc2Ugb3B0aW9ucyBhcmUgb2ZmaWNpYWxseSByZW1vdmVkIGZyb20gdGhlIEFQSS5cbiAgICAgKi9cbiAgICBpZiAoeW95byB8fCBsb29wIHx8IGZsaXApIHtcbiAgICAgICAgd2FybmluZyghbGVnYWN5UmVwZWF0V2FybmluZywgXCJ5b3lvLCBsb29wIGFuZCBmbGlwIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIEFQSS4gUmVwbGFjZSB3aXRoIHJlcGVhdCBhbmQgcmVwZWF0VHlwZSBvcHRpb25zLlwiKTtcbiAgICAgICAgbGVnYWN5UmVwZWF0V2FybmluZyA9IHRydWU7XG4gICAgICAgIGlmICh5b3lvKSB7XG4gICAgICAgICAgICBvcHRpb25zLnJlcGVhdFR5cGUgPSBcInJldmVyc2VcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsb29wKSB7XG4gICAgICAgICAgICBvcHRpb25zLnJlcGVhdFR5cGUgPSBcImxvb3BcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmbGlwKSB7XG4gICAgICAgICAgICBvcHRpb25zLnJlcGVhdFR5cGUgPSBcIm1pcnJvclwiO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMucmVwZWF0ID0gbG9vcCB8fCB5b3lvIHx8IGZsaXAgfHwgdHJhbnNpdGlvbi5yZXBlYXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRPRE86IFBvcG1vdGlvbiA5IGhhcyB0aGUgYWJpbGl0eSB0byBhdXRvbWF0aWNhbGx5IGRldGVjdCB3aGV0aGVyIHRvIHVzZVxuICAgICAqIGEga2V5ZnJhbWVzIG9yIHNwcmluZyBhbmltYXRpb24sIGJ1dCBkb2VzIHNvIGJ5IGRldGVjdGluZyB2ZWxvY2l0eSBhbmQgb3RoZXIgc3ByaW5nIG9wdGlvbnMuXG4gICAgICogSXQnZCBiZSBnb29kIHRvIGludHJvZHVjZSBhIHNpbWlsYXIgdGhpbmcgaGVyZS5cbiAgICAgKi9cbiAgICBpZiAodHJhbnNpdGlvbi50eXBlICE9PSBcInNwcmluZ1wiKVxuICAgICAgICBvcHRpb25zLnR5cGUgPSBcImtleWZyYW1lc1wiO1xuICAgIHJldHVybiBvcHRpb25zO1xufVxuLyoqXG4gKiBHZXQgdGhlIGRlbGF5IGZvciBhIHZhbHVlIGJ5IGNoZWNraW5nIFRyYW5zaXRpb24gd2l0aCBkZWNyZWFzaW5nIHNwZWNpZmljaXR5LlxuICovXG5mdW5jdGlvbiBnZXREZWxheUZyb21UcmFuc2l0aW9uKHRyYW5zaXRpb24sIGtleSkge1xuICAgIHZhciBfYSwgX2I7XG4gICAgdmFyIHZhbHVlVHJhbnNpdGlvbiA9IGdldFZhbHVlVHJhbnNpdGlvbih0cmFuc2l0aW9uLCBrZXkpIHx8IHt9O1xuICAgIHJldHVybiAoX2IgPSAoX2EgPSB2YWx1ZVRyYW5zaXRpb24uZGVsYXkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRyYW5zaXRpb24uZGVsYXkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDA7XG59XG5mdW5jdGlvbiBoeWRyYXRlS2V5ZnJhbWVzKG9wdGlvbnMpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLnRvKSAmJiBvcHRpb25zLnRvWzBdID09PSBudWxsKSB7XG4gICAgICAgIG9wdGlvbnMudG8gPSBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQob3B0aW9ucy50byksIGZhbHNlKTtcbiAgICAgICAgb3B0aW9ucy50b1swXSA9IG9wdGlvbnMuZnJvbTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG59XG5mdW5jdGlvbiBnZXRQb3Btb3Rpb25BbmltYXRpb25PcHRpb25zKHRyYW5zaXRpb24sIG9wdGlvbnMsIGtleSkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLnRvKSkge1xuICAgICAgICAoX2EgPSB0cmFuc2l0aW9uLmR1cmF0aW9uKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAodHJhbnNpdGlvbi5kdXJhdGlvbiA9IDAuOCk7XG4gICAgfVxuICAgIGh5ZHJhdGVLZXlmcmFtZXMob3B0aW9ucyk7XG4gICAgLyoqXG4gICAgICogR2V0IGEgZGVmYXVsdCB0cmFuc2l0aW9uIGlmIG5vbmUgaXMgZGV0ZXJtaW5lZCB0byBiZSBkZWZpbmVkLlxuICAgICAqL1xuICAgIGlmICghaXNUcmFuc2l0aW9uRGVmaW5lZCh0cmFuc2l0aW9uKSkge1xuICAgICAgICB0cmFuc2l0aW9uID0gX19hc3NpZ24oX19hc3NpZ24oe30sIHRyYW5zaXRpb24pLCBnZXREZWZhdWx0VHJhbnNpdGlvbihrZXksIG9wdGlvbnMudG8pKTtcbiAgICB9XG4gICAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCBvcHRpb25zKSwgY29udmVydFRyYW5zaXRpb25Ub0FuaW1hdGlvbk9wdGlvbnModHJhbnNpdGlvbikpO1xufVxuLyoqXG4gKlxuICovXG5mdW5jdGlvbiBnZXRBbmltYXRpb24oa2V5LCB2YWx1ZSwgdGFyZ2V0LCB0cmFuc2l0aW9uLCBvbkNvbXBsZXRlKSB7XG4gICAgdmFyIF9hO1xuICAgIHZhciB2YWx1ZVRyYW5zaXRpb24gPSBnZXRWYWx1ZVRyYW5zaXRpb24odHJhbnNpdGlvbiwga2V5KTtcbiAgICB2YXIgb3JpZ2luID0gKF9hID0gdmFsdWVUcmFuc2l0aW9uLmZyb20pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHZhbHVlLmdldCgpO1xuICAgIHZhciBpc1RhcmdldEFuaW1hdGFibGUgPSBpc0FuaW1hdGFibGUoa2V5LCB0YXJnZXQpO1xuICAgIGlmIChvcmlnaW4gPT09IFwibm9uZVwiICYmIGlzVGFyZ2V0QW5pbWF0YWJsZSAmJiB0eXBlb2YgdGFyZ2V0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiB3ZSdyZSB0cnlpbmcgdG8gYW5pbWF0ZSBmcm9tIFwibm9uZVwiLCB0cnkgYW5kIGdldCBhbiBhbmltYXRhYmxlIHZlcnNpb25cbiAgICAgICAgICogb2YgdGhlIHRhcmdldC4gVGhpcyBjb3VsZCBiZSBpbXByb3ZlZCB0byB3b3JrIGJvdGggd2F5cy5cbiAgICAgICAgICovXG4gICAgICAgIG9yaWdpbiA9IGdldEFuaW1hdGFibGVOb25lKGtleSwgdGFyZ2V0KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNaZXJvKG9yaWdpbikgJiYgdHlwZW9mIHRhcmdldCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBvcmlnaW4gPSBnZXRaZXJvVW5pdCh0YXJnZXQpO1xuICAgIH1cbiAgICBlbHNlIGlmICghQXJyYXkuaXNBcnJheSh0YXJnZXQpICYmXG4gICAgICAgIGlzWmVybyh0YXJnZXQpICYmXG4gICAgICAgIHR5cGVvZiBvcmlnaW4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGFyZ2V0ID0gZ2V0WmVyb1VuaXQob3JpZ2luKTtcbiAgICB9XG4gICAgdmFyIGlzT3JpZ2luQW5pbWF0YWJsZSA9IGlzQW5pbWF0YWJsZShrZXksIG9yaWdpbik7XG4gICAgd2FybmluZyhpc09yaWdpbkFuaW1hdGFibGUgPT09IGlzVGFyZ2V0QW5pbWF0YWJsZSwgXCJZb3UgYXJlIHRyeWluZyB0byBhbmltYXRlIFwiLmNvbmNhdChrZXksIFwiIGZyb20gXFxcIlwiKS5jb25jYXQob3JpZ2luLCBcIlxcXCIgdG8gXFxcIlwiKS5jb25jYXQodGFyZ2V0LCBcIlxcXCIuIFwiKS5jb25jYXQob3JpZ2luLCBcIiBpcyBub3QgYW4gYW5pbWF0YWJsZSB2YWx1ZSAtIHRvIGVuYWJsZSB0aGlzIGFuaW1hdGlvbiBzZXQgXCIpLmNvbmNhdChvcmlnaW4sIFwiIHRvIGEgdmFsdWUgYW5pbWF0YWJsZSB0byBcIikuY29uY2F0KHRhcmdldCwgXCIgdmlhIHRoZSBgc3R5bGVgIHByb3BlcnR5LlwiKSk7XG4gICAgZnVuY3Rpb24gc3RhcnQoKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgZnJvbTogb3JpZ2luLFxuICAgICAgICAgICAgdG86IHRhcmdldCxcbiAgICAgICAgICAgIHZlbG9jaXR5OiB2YWx1ZS5nZXRWZWxvY2l0eSgpLFxuICAgICAgICAgICAgb25Db21wbGV0ZTogb25Db21wbGV0ZSxcbiAgICAgICAgICAgIG9uVXBkYXRlOiBmdW5jdGlvbiAodikgeyByZXR1cm4gdmFsdWUuc2V0KHYpOyB9LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdmFsdWVUcmFuc2l0aW9uLnR5cGUgPT09IFwiaW5lcnRpYVwiIHx8XG4gICAgICAgICAgICB2YWx1ZVRyYW5zaXRpb24udHlwZSA9PT0gXCJkZWNheVwiXG4gICAgICAgICAgICA/IGluZXJ0aWEoX19hc3NpZ24oX19hc3NpZ24oe30sIG9wdGlvbnMpLCB2YWx1ZVRyYW5zaXRpb24pKVxuICAgICAgICAgICAgOiBhbmltYXRlKF9fYXNzaWduKF9fYXNzaWduKHt9LCBnZXRQb3Btb3Rpb25BbmltYXRpb25PcHRpb25zKHZhbHVlVHJhbnNpdGlvbiwgb3B0aW9ucywga2V5KSksIHsgb25VcGRhdGU6IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vblVwZGF0ZSh2KTtcbiAgICAgICAgICAgICAgICAgICAgKF9hID0gdmFsdWVUcmFuc2l0aW9uLm9uVXBkYXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh2YWx1ZVRyYW5zaXRpb24sIHYpO1xuICAgICAgICAgICAgICAgIH0sIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgKF9hID0gdmFsdWVUcmFuc2l0aW9uLm9uQ29tcGxldGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHZhbHVlVHJhbnNpdGlvbik7XG4gICAgICAgICAgICAgICAgfSB9KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldCgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgdmFyIGZpbmFsVGFyZ2V0ID0gcmVzb2x2ZUZpbmFsVmFsdWVJbktleWZyYW1lcyh0YXJnZXQpO1xuICAgICAgICB2YWx1ZS5zZXQoZmluYWxUYXJnZXQpO1xuICAgICAgICBvbkNvbXBsZXRlKCk7XG4gICAgICAgIChfYSA9IHZhbHVlVHJhbnNpdGlvbiA9PT0gbnVsbCB8fCB2YWx1ZVRyYW5zaXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZhbHVlVHJhbnNpdGlvbi5vblVwZGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodmFsdWVUcmFuc2l0aW9uLCBmaW5hbFRhcmdldCk7XG4gICAgICAgIChfYiA9IHZhbHVlVHJhbnNpdGlvbiA9PT0gbnVsbCB8fCB2YWx1ZVRyYW5zaXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZhbHVlVHJhbnNpdGlvbi5vbkNvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbCh2YWx1ZVRyYW5zaXRpb24pO1xuICAgICAgICByZXR1cm4geyBzdG9wOiBmdW5jdGlvbiAoKSB7IH0gfTtcbiAgICB9XG4gICAgcmV0dXJuICFpc09yaWdpbkFuaW1hdGFibGUgfHxcbiAgICAgICAgIWlzVGFyZ2V0QW5pbWF0YWJsZSB8fFxuICAgICAgICB2YWx1ZVRyYW5zaXRpb24udHlwZSA9PT0gZmFsc2VcbiAgICAgICAgPyBzZXRcbiAgICAgICAgOiBzdGFydDtcbn1cbmZ1bmN0aW9uIGlzWmVybyh2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgPT09IDAgfHxcbiAgICAgICAgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgcGFyc2VGbG9hdCh2YWx1ZSkgPT09IDAgJiZcbiAgICAgICAgICAgIHZhbHVlLmluZGV4T2YoXCIgXCIpID09PSAtMSkpO1xufVxuZnVuY3Rpb24gZ2V0WmVyb1VuaXQocG90ZW50aWFsVW5pdFR5cGUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHBvdGVudGlhbFVuaXRUeXBlID09PSBcIm51bWJlclwiXG4gICAgICAgID8gMFxuICAgICAgICA6IGdldEFuaW1hdGFibGVOb25lKFwiXCIsIHBvdGVudGlhbFVuaXRUeXBlKTtcbn1cbmZ1bmN0aW9uIGdldFZhbHVlVHJhbnNpdGlvbih0cmFuc2l0aW9uLCBrZXkpIHtcbiAgICByZXR1cm4gdHJhbnNpdGlvbltrZXldIHx8IHRyYW5zaXRpb25bXCJkZWZhdWx0XCJdIHx8IHRyYW5zaXRpb247XG59XG4vKipcbiAqIFN0YXJ0IGFuaW1hdGlvbiBvbiBhIE1vdGlvblZhbHVlLiBUaGlzIGZ1bmN0aW9uIGlzIGFuIGludGVyZmFjZSBiZXR3ZWVuXG4gKiBGcmFtZXIgTW90aW9uIGFuZCBQb3Btb3Rpb25cbiAqL1xuZnVuY3Rpb24gc3RhcnRBbmltYXRpb24oa2V5LCB2YWx1ZSwgdGFyZ2V0LCB0cmFuc2l0aW9uKSB7XG4gICAgaWYgKHRyYW5zaXRpb24gPT09IHZvaWQgMCkgeyB0cmFuc2l0aW9uID0ge307IH1cbiAgICBpZiAoaW5zdGFudEFuaW1hdGlvblN0YXRlLmN1cnJlbnQpIHtcbiAgICAgICAgdHJhbnNpdGlvbiA9IHsgdHlwZTogZmFsc2UgfTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlLnN0YXJ0KGZ1bmN0aW9uIChvbkNvbXBsZXRlKSB7XG4gICAgICAgIHZhciBkZWxheVRpbWVyO1xuICAgICAgICB2YXIgY29udHJvbHM7XG4gICAgICAgIHZhciBhbmltYXRpb24gPSBnZXRBbmltYXRpb24oa2V5LCB2YWx1ZSwgdGFyZ2V0LCB0cmFuc2l0aW9uLCBvbkNvbXBsZXRlKTtcbiAgICAgICAgdmFyIGRlbGF5ID0gZ2V0RGVsYXlGcm9tVHJhbnNpdGlvbih0cmFuc2l0aW9uLCBrZXkpO1xuICAgICAgICB2YXIgc3RhcnQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAoY29udHJvbHMgPSBhbmltYXRpb24oKSk7IH07XG4gICAgICAgIGlmIChkZWxheSkge1xuICAgICAgICAgICAgZGVsYXlUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KHN0YXJ0LCBzZWNvbmRzVG9NaWxsaXNlY29uZHMoZGVsYXkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN0YXJ0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWxheVRpbWVyKTtcbiAgICAgICAgICAgIGNvbnRyb2xzID09PSBudWxsIHx8IGNvbnRyb2xzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb250cm9scy5zdG9wKCk7XG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmV4cG9ydCB7IGNvbnZlcnRUcmFuc2l0aW9uVG9BbmltYXRpb25PcHRpb25zLCBnZXREZWxheUZyb21UcmFuc2l0aW9uLCBnZXRQb3Btb3Rpb25BbmltYXRpb25PcHRpb25zLCBnZXRWYWx1ZVRyYW5zaXRpb24sIGdldFplcm9Vbml0LCBoeWRyYXRlS2V5ZnJhbWVzLCBpc1RyYW5zaXRpb25EZWZpbmVkLCBpc1plcm8sIHN0YXJ0QW5pbWF0aW9uIH07XG4iLCJpbXBvcnQgeyBhbmltYXRlIH0gZnJvbSAnLi9pbmRleC5tanMnO1xuaW1wb3J0IHsgdmVsb2NpdHlQZXJTZWNvbmQgfSBmcm9tICcuLi91dGlscy92ZWxvY2l0eS1wZXItc2Vjb25kLm1qcyc7XG5pbXBvcnQgeyBnZXRGcmFtZURhdGEgfSBmcm9tICdmcmFtZXN5bmMnO1xuXG5mdW5jdGlvbiBpbmVydGlhKHsgZnJvbSA9IDAsIHZlbG9jaXR5ID0gMCwgbWluLCBtYXgsIHBvd2VyID0gMC44LCB0aW1lQ29uc3RhbnQgPSA3NTAsIGJvdW5jZVN0aWZmbmVzcyA9IDUwMCwgYm91bmNlRGFtcGluZyA9IDEwLCByZXN0RGVsdGEgPSAxLCBtb2RpZnlUYXJnZXQsIGRyaXZlciwgb25VcGRhdGUsIG9uQ29tcGxldGUsIG9uU3RvcCwgfSkge1xuICAgIGxldCBjdXJyZW50QW5pbWF0aW9uO1xuICAgIGZ1bmN0aW9uIGlzT3V0T2ZCb3VuZHModikge1xuICAgICAgICByZXR1cm4gKG1pbiAhPT0gdW5kZWZpbmVkICYmIHYgPCBtaW4pIHx8IChtYXggIT09IHVuZGVmaW5lZCAmJiB2ID4gbWF4KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYm91bmRhcnlOZWFyZXN0KHYpIHtcbiAgICAgICAgaWYgKG1pbiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG1heDtcbiAgICAgICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG1pbjtcbiAgICAgICAgcmV0dXJuIE1hdGguYWJzKG1pbiAtIHYpIDwgTWF0aC5hYnMobWF4IC0gdikgPyBtaW4gOiBtYXg7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0YXJ0QW5pbWF0aW9uKG9wdGlvbnMpIHtcbiAgICAgICAgY3VycmVudEFuaW1hdGlvbiA9PT0gbnVsbCB8fCBjdXJyZW50QW5pbWF0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdXJyZW50QW5pbWF0aW9uLnN0b3AoKTtcbiAgICAgICAgY3VycmVudEFuaW1hdGlvbiA9IGFuaW1hdGUoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBkcml2ZXIsIG9uVXBkYXRlOiAodikgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBvblVwZGF0ZSA9PT0gbnVsbCB8fCBvblVwZGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25VcGRhdGUodik7XG4gICAgICAgICAgICAgICAgKF9hID0gb3B0aW9ucy5vblVwZGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwob3B0aW9ucywgdik7XG4gICAgICAgICAgICB9LCBvbkNvbXBsZXRlLFxuICAgICAgICAgICAgb25TdG9wIH0pKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3RhcnRTcHJpbmcob3B0aW9ucykge1xuICAgICAgICBzdGFydEFuaW1hdGlvbihPYmplY3QuYXNzaWduKHsgdHlwZTogXCJzcHJpbmdcIiwgc3RpZmZuZXNzOiBib3VuY2VTdGlmZm5lc3MsIGRhbXBpbmc6IGJvdW5jZURhbXBpbmcsIHJlc3REZWx0YSB9LCBvcHRpb25zKSk7XG4gICAgfVxuICAgIGlmIChpc091dE9mQm91bmRzKGZyb20pKSB7XG4gICAgICAgIHN0YXJ0U3ByaW5nKHsgZnJvbSwgdmVsb2NpdHksIHRvOiBib3VuZGFyeU5lYXJlc3QoZnJvbSkgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBsZXQgdGFyZ2V0ID0gcG93ZXIgKiB2ZWxvY2l0eSArIGZyb207XG4gICAgICAgIGlmICh0eXBlb2YgbW9kaWZ5VGFyZ2V0ICE9PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgdGFyZ2V0ID0gbW9kaWZ5VGFyZ2V0KHRhcmdldCk7XG4gICAgICAgIGNvbnN0IGJvdW5kYXJ5ID0gYm91bmRhcnlOZWFyZXN0KHRhcmdldCk7XG4gICAgICAgIGNvbnN0IGhlYWRpbmcgPSBib3VuZGFyeSA9PT0gbWluID8gLTEgOiAxO1xuICAgICAgICBsZXQgcHJldjtcbiAgICAgICAgbGV0IGN1cnJlbnQ7XG4gICAgICAgIGNvbnN0IGNoZWNrQm91bmRhcnkgPSAodikgPT4ge1xuICAgICAgICAgICAgcHJldiA9IGN1cnJlbnQ7XG4gICAgICAgICAgICBjdXJyZW50ID0gdjtcbiAgICAgICAgICAgIHZlbG9jaXR5ID0gdmVsb2NpdHlQZXJTZWNvbmQodiAtIHByZXYsIGdldEZyYW1lRGF0YSgpLmRlbHRhKTtcbiAgICAgICAgICAgIGlmICgoaGVhZGluZyA9PT0gMSAmJiB2ID4gYm91bmRhcnkpIHx8XG4gICAgICAgICAgICAgICAgKGhlYWRpbmcgPT09IC0xICYmIHYgPCBib3VuZGFyeSkpIHtcbiAgICAgICAgICAgICAgICBzdGFydFNwcmluZyh7IGZyb206IHYsIHRvOiBib3VuZGFyeSwgdmVsb2NpdHkgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHN0YXJ0QW5pbWF0aW9uKHtcbiAgICAgICAgICAgIHR5cGU6IFwiZGVjYXlcIixcbiAgICAgICAgICAgIGZyb20sXG4gICAgICAgICAgICB2ZWxvY2l0eSxcbiAgICAgICAgICAgIHRpbWVDb25zdGFudCxcbiAgICAgICAgICAgIHBvd2VyLFxuICAgICAgICAgICAgcmVzdERlbHRhLFxuICAgICAgICAgICAgbW9kaWZ5VGFyZ2V0LFxuICAgICAgICAgICAgb25VcGRhdGU6IGlzT3V0T2ZCb3VuZHModGFyZ2V0KSA/IGNoZWNrQm91bmRhcnkgOiB1bmRlZmluZWQsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBzdG9wOiAoKSA9PiBjdXJyZW50QW5pbWF0aW9uID09PSBudWxsIHx8IGN1cnJlbnRBbmltYXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN1cnJlbnRBbmltYXRpb24uc3RvcCgpLFxuICAgIH07XG59XG5cbmV4cG9ydCB7IGluZXJ0aWEgfTtcbiIsIi8qKlxuICogQ2hlY2sgaWYgdmFsdWUgaXMgYSBudW1lcmljYWwgc3RyaW5nLCBpZSBhIHN0cmluZyB0aGF0IGlzIHB1cmVseSBhIG51bWJlciBlZyBcIjEwMFwiIG9yIFwiLTEwMC4xXCJcbiAqL1xudmFyIGlzTnVtZXJpY2FsU3RyaW5nID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIC9eXFwtP1xcZCpcXC4/XFxkKyQvLnRlc3Qodik7IH07XG5cbmV4cG9ydCB7IGlzTnVtZXJpY2FsU3RyaW5nIH07XG4iLCIvKipcbiAqIENoZWNrIGlmIHRoZSB2YWx1ZSBpcyBhIHplcm8gdmFsdWUgc3RyaW5nIGxpa2UgXCIwcHhcIiBvciBcIjAlXCJcbiAqL1xudmFyIGlzWmVyb1ZhbHVlU3RyaW5nID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIC9eMFteLlxcc10rJC8udGVzdCh2KTsgfTtcblxuZXhwb3J0IHsgaXNaZXJvVmFsdWVTdHJpbmcgfTtcbiIsImltcG9ydCB7IF9fcmVhZCB9IGZyb20gJ3RzbGliJztcblxuZnVuY3Rpb24gYWRkVW5pcXVlSXRlbShhcnIsIGl0ZW0pIHtcbiAgICBhcnIuaW5kZXhPZihpdGVtKSA9PT0gLTEgJiYgYXJyLnB1c2goaXRlbSk7XG59XG5mdW5jdGlvbiByZW1vdmVJdGVtKGFyciwgaXRlbSkge1xuICAgIHZhciBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pO1xuICAgIGluZGV4ID4gLTEgJiYgYXJyLnNwbGljZShpbmRleCwgMSk7XG59XG4vLyBBZGFwdGVkIGZyb20gYXJyYXktbW92ZVxuZnVuY3Rpb24gbW92ZUl0ZW0oX2EsIGZyb21JbmRleCwgdG9JbmRleCkge1xuICAgIHZhciBfYiA9IF9fcmVhZChfYSksIGFyciA9IF9iLnNsaWNlKDApO1xuICAgIHZhciBzdGFydEluZGV4ID0gZnJvbUluZGV4IDwgMCA/IGFyci5sZW5ndGggKyBmcm9tSW5kZXggOiBmcm9tSW5kZXg7XG4gICAgaWYgKHN0YXJ0SW5kZXggPj0gMCAmJiBzdGFydEluZGV4IDwgYXJyLmxlbmd0aCkge1xuICAgICAgICB2YXIgZW5kSW5kZXggPSB0b0luZGV4IDwgMCA/IGFyci5sZW5ndGggKyB0b0luZGV4IDogdG9JbmRleDtcbiAgICAgICAgdmFyIF9jID0gX19yZWFkKGFyci5zcGxpY2UoZnJvbUluZGV4LCAxKSwgMSksIGl0ZW0gPSBfY1swXTtcbiAgICAgICAgYXJyLnNwbGljZShlbmRJbmRleCwgMCwgaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiBhcnI7XG59XG5cbmV4cG9ydCB7IGFkZFVuaXF1ZUl0ZW0sIG1vdmVJdGVtLCByZW1vdmVJdGVtIH07XG4iLCJpbXBvcnQgeyBhZGRVbmlxdWVJdGVtLCByZW1vdmVJdGVtIH0gZnJvbSAnLi9hcnJheS5tanMnO1xuXG52YXIgU3Vic2NyaXB0aW9uTWFuYWdlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTdWJzY3JpcHRpb25NYW5hZ2VyKCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICB9XG4gICAgU3Vic2NyaXB0aW9uTWFuYWdlci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgYWRkVW5pcXVlSXRlbSh0aGlzLnN1YnNjcmlwdGlvbnMsIGhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVtb3ZlSXRlbShfdGhpcy5zdWJzY3JpcHRpb25zLCBoYW5kbGVyKTsgfTtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbk1hbmFnZXIucHJvdG90eXBlLm5vdGlmeSA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICAgIHZhciBudW1TdWJzY3JpcHRpb25zID0gdGhpcy5zdWJzY3JpcHRpb25zLmxlbmd0aDtcbiAgICAgICAgaWYgKCFudW1TdWJzY3JpcHRpb25zKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAobnVtU3Vic2NyaXB0aW9ucyA9PT0gMSkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB0aGVyZSdzIG9ubHkgYSBzaW5nbGUgaGFuZGxlciB3ZSBjYW4ganVzdCBjYWxsIGl0IHdpdGhvdXQgaW52b2tpbmcgYSBsb29wLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnNbMF0oYSwgYiwgYyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bVN1YnNjcmlwdGlvbnM7IGkrKykge1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIGhhbmRsZXIgZXhpc3RzIGJlZm9yZSBmaXJpbmcgYXMgaXQncyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgICAqIHRoZSBzdWJzY3JpcHRpb25zIHdlcmUgbW9kaWZpZWQgZHVyaW5nIHRoaXMgbG9vcCBydW5uaW5nLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyID0gdGhpcy5zdWJzY3JpcHRpb25zW2ldO1xuICAgICAgICAgICAgICAgIGhhbmRsZXIgJiYgaGFuZGxlcihhLCBiLCBjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uTWFuYWdlci5wcm90b3R5cGUuZ2V0U2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3Vic2NyaXB0aW9ucy5sZW5ndGg7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb25NYW5hZ2VyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmxlbmd0aCA9IDA7XG4gICAgfTtcbiAgICByZXR1cm4gU3Vic2NyaXB0aW9uTWFuYWdlcjtcbn0oKSk7XG5cbmV4cG9ydCB7IFN1YnNjcmlwdGlvbk1hbmFnZXIgfTtcbiIsImltcG9ydCBzeW5jLCB7IGdldEZyYW1lRGF0YSB9IGZyb20gJ2ZyYW1lc3luYyc7XG5pbXBvcnQgeyB2ZWxvY2l0eVBlclNlY29uZCB9IGZyb20gJ3BvcG1vdGlvbic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25NYW5hZ2VyIH0gZnJvbSAnLi4vdXRpbHMvc3Vic2NyaXB0aW9uLW1hbmFnZXIubWpzJztcblxudmFyIGlzRmxvYXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQodmFsdWUpKTtcbn07XG4vKipcbiAqIGBNb3Rpb25WYWx1ZWAgaXMgdXNlZCB0byB0cmFjayB0aGUgc3RhdGUgYW5kIHZlbG9jaXR5IG9mIG1vdGlvbiB2YWx1ZXMuXG4gKlxuICogQHB1YmxpY1xuICovXG52YXIgTW90aW9uVmFsdWUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIGluaXQgLSBUaGUgaW5pdGlhdGluZyB2YWx1ZVxuICAgICAqIEBwYXJhbSBjb25maWcgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICAgKlxuICAgICAqIC0gIGB0cmFuc2Zvcm1lcmA6IEEgZnVuY3Rpb24gdG8gdHJhbnNmb3JtIGluY29taW5nIHZhbHVlcyB3aXRoLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgZnVuY3Rpb24gTW90aW9uVmFsdWUoaW5pdCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhpcyB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBidWlsZCBzdGVwIHdpdGggdGhlIGxhdGVzdCB2ZXJzaW9uIG51bWJlci5cbiAgICAgICAgICogV2hlbiBNb3Rpb25WYWx1ZXMgYXJlIHByb3ZpZGVkIHRvIG1vdGlvbiBjb21wb25lbnRzLCB3YXJuIGlmIHZlcnNpb25zIGFyZSBtaXhlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudmVyc2lvbiA9IFwiNi41LjFcIjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIER1cmF0aW9uLCBpbiBtaWxsaXNlY29uZHMsIHNpbmNlIGxhc3QgdXBkYXRpbmcgZnJhbWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBpbnRlcm5hbFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50aW1lRGVsdGEgPSAwO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGltZXN0YW1wIG9mIHRoZSBsYXN0IHRpbWUgdGhpcyBgTW90aW9uVmFsdWVgIHdhcyB1cGRhdGVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAaW50ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubGFzdFVwZGF0ZWQgPSAwO1xuICAgICAgICAvKipcbiAgICAgICAgICogRnVuY3Rpb25zIHRvIG5vdGlmeSB3aGVuIHRoZSBgTW90aW9uVmFsdWVgIHVwZGF0ZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBpbnRlcm5hbFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy51cGRhdGVTdWJzY3JpYmVycyA9IG5ldyBTdWJzY3JpcHRpb25NYW5hZ2VyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGdW5jdGlvbnMgdG8gbm90aWZ5IHdoZW4gdGhlIHZlbG9jaXR5IHVwZGF0ZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBpbnRlcm5hbFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy52ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzID0gbmV3IFN1YnNjcmlwdGlvbk1hbmFnZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZ1bmN0aW9ucyB0byBub3RpZnkgd2hlbiB0aGUgYE1vdGlvblZhbHVlYCB1cGRhdGVzIGFuZCBgcmVuZGVyYCBpcyBzZXQgdG8gYHRydWVgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAaW50ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucmVuZGVyU3Vic2NyaWJlcnMgPSBuZXcgU3Vic2NyaXB0aW9uTWFuYWdlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogVHJhY2tzIHdoZXRoZXIgdGhpcyB2YWx1ZSBjYW4gb3V0cHV0IGEgdmVsb2NpdHkuIEN1cnJlbnRseSB0aGlzIGlzIG9ubHkgdHJ1ZVxuICAgICAgICAgKiBpZiB0aGUgdmFsdWUgaXMgbnVtZXJpY2FsLCBidXQgd2UgbWlnaHQgYmUgYWJsZSB0byB3aWRlbiB0aGUgc2NvcGUgaGVyZSBhbmQgc3VwcG9ydFxuICAgICAgICAgKiBvdGhlciB2YWx1ZSB0eXBlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQGludGVybmFsXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNhblRyYWNrVmVsb2NpdHkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy51cGRhdGVBbmROb3RpZnkgPSBmdW5jdGlvbiAodiwgcmVuZGVyKSB7XG4gICAgICAgICAgICBpZiAocmVuZGVyID09PSB2b2lkIDApIHsgcmVuZGVyID0gdHJ1ZTsgfVxuICAgICAgICAgICAgX3RoaXMucHJldiA9IF90aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgICBfdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aW1lc3RhbXBcbiAgICAgICAgICAgIHZhciBfYSA9IGdldEZyYW1lRGF0YSgpLCBkZWx0YSA9IF9hLmRlbHRhLCB0aW1lc3RhbXAgPSBfYS50aW1lc3RhbXA7XG4gICAgICAgICAgICBpZiAoX3RoaXMubGFzdFVwZGF0ZWQgIT09IHRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgIF90aGlzLnRpbWVEZWx0YSA9IGRlbHRhO1xuICAgICAgICAgICAgICAgIF90aGlzLmxhc3RVcGRhdGVkID0gdGltZXN0YW1wO1xuICAgICAgICAgICAgICAgIHN5bmMucG9zdFJlbmRlcihfdGhpcy5zY2hlZHVsZVZlbG9jaXR5Q2hlY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVXBkYXRlIHVwZGF0ZSBzdWJzY3JpYmVyc1xuICAgICAgICAgICAgaWYgKF90aGlzLnByZXYgIT09IF90aGlzLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy51cGRhdGVTdWJzY3JpYmVycy5ub3RpZnkoX3RoaXMuY3VycmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBVcGRhdGUgdmVsb2NpdHkgc3Vic2NyaWJlcnNcbiAgICAgICAgICAgIGlmIChfdGhpcy52ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzLmdldFNpemUoKSkge1xuICAgICAgICAgICAgICAgIF90aGlzLnZlbG9jaXR5VXBkYXRlU3Vic2NyaWJlcnMubm90aWZ5KF90aGlzLmdldFZlbG9jaXR5KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVXBkYXRlIHJlbmRlciBzdWJzY3JpYmVyc1xuICAgICAgICAgICAgaWYgKHJlbmRlcikge1xuICAgICAgICAgICAgICAgIF90aGlzLnJlbmRlclN1YnNjcmliZXJzLm5vdGlmeShfdGhpcy5jdXJyZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNjaGVkdWxlIGEgdmVsb2NpdHkgY2hlY2sgZm9yIHRoZSBuZXh0IGZyYW1lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIGlzIGFuIGluc3RhbmNlZCBhbmQgYm91bmQgZnVuY3Rpb24gdG8gcHJldmVudCBnZW5lcmF0aW5nIGEgbmV3XG4gICAgICAgICAqIGZ1bmN0aW9uIG9uY2UgcGVyIGZyYW1lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAaW50ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2NoZWR1bGVWZWxvY2l0eUNoZWNrID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gc3luYy5wb3N0UmVuZGVyKF90aGlzLnZlbG9jaXR5Q2hlY2spOyB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogVXBkYXRlcyBgcHJldmAgd2l0aCBgY3VycmVudGAgaWYgdGhlIHZhbHVlIGhhc24ndCBiZWVuIHVwZGF0ZWQgdGhpcyBmcmFtZS5cbiAgICAgICAgICogVGhpcyBlbnN1cmVzIHZlbG9jaXR5IGNhbGN1bGF0aW9ucyByZXR1cm4gYDBgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIGlzIGFuIGluc3RhbmNlZCBhbmQgYm91bmQgZnVuY3Rpb24gdG8gcHJldmVudCBnZW5lcmF0aW5nIGEgbmV3XG4gICAgICAgICAqIGZ1bmN0aW9uIG9uY2UgcGVyIGZyYW1lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAaW50ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudmVsb2NpdHlDaGVjayA9IGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgdmFyIHRpbWVzdGFtcCA9IF9hLnRpbWVzdGFtcDtcbiAgICAgICAgICAgIGlmICh0aW1lc3RhbXAgIT09IF90aGlzLmxhc3RVcGRhdGVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMucHJldiA9IF90aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgX3RoaXMudmVsb2NpdHlVcGRhdGVTdWJzY3JpYmVycy5ub3RpZnkoX3RoaXMuZ2V0VmVsb2NpdHkoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaGFzQW5pbWF0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wcmV2ID0gdGhpcy5jdXJyZW50ID0gaW5pdDtcbiAgICAgICAgdGhpcy5jYW5UcmFja1ZlbG9jaXR5ID0gaXNGbG9hdCh0aGlzLmN1cnJlbnQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIG5vdGlmaWVkIHdoZW4gdGhlIGBNb3Rpb25WYWx1ZWAgaXMgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEl0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCwgd2lsbCBjYW5jZWwgdGhlIHN1YnNjcmlwdGlvbi5cbiAgICAgKlxuICAgICAqIFdoZW4gY2FsbGluZyBgb25DaGFuZ2VgIGluc2lkZSBhIFJlYWN0IGNvbXBvbmVudCwgaXQgc2hvdWxkIGJlIHdyYXBwZWQgd2l0aCB0aGVcbiAgICAgKiBgdXNlRWZmZWN0YCBob29rLiBBcyBpdCByZXR1cm5zIGFuIHVuc3Vic2NyaWJlIGZ1bmN0aW9uLCB0aGlzIHNob3VsZCBiZSByZXR1cm5lZFxuICAgICAqIGZyb20gdGhlIGB1c2VFZmZlY3RgIGZ1bmN0aW9uIHRvIGVuc3VyZSB5b3UgZG9uJ3QgYWRkIGR1cGxpY2F0ZSBzdWJzY3JpYmVycy4uXG4gICAgICpcbiAgICAgKiBgYGBqc3hcbiAgICAgKiBleHBvcnQgY29uc3QgTXlDb21wb25lbnQgPSAoKSA9PiB7XG4gICAgICogICBjb25zdCB4ID0gdXNlTW90aW9uVmFsdWUoMClcbiAgICAgKiAgIGNvbnN0IHkgPSB1c2VNb3Rpb25WYWx1ZSgwKVxuICAgICAqICAgY29uc3Qgb3BhY2l0eSA9IHVzZU1vdGlvblZhbHVlKDEpXG4gICAgICpcbiAgICAgKiAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICogICAgIGZ1bmN0aW9uIHVwZGF0ZU9wYWNpdHkoKSB7XG4gICAgICogICAgICAgY29uc3QgbWF4WFkgPSBNYXRoLm1heCh4LmdldCgpLCB5LmdldCgpKVxuICAgICAqICAgICAgIGNvbnN0IG5ld09wYWNpdHkgPSB0cmFuc2Zvcm0obWF4WFksIFswLCAxMDBdLCBbMSwgMF0pXG4gICAgICogICAgICAgb3BhY2l0eS5zZXQobmV3T3BhY2l0eSlcbiAgICAgKiAgICAgfVxuICAgICAqXG4gICAgICogICAgIGNvbnN0IHVuc3Vic2NyaWJlWCA9IHgub25DaGFuZ2UodXBkYXRlT3BhY2l0eSlcbiAgICAgKiAgICAgY29uc3QgdW5zdWJzY3JpYmVZID0geS5vbkNoYW5nZSh1cGRhdGVPcGFjaXR5KVxuICAgICAqXG4gICAgICogICAgIHJldHVybiAoKSA9PiB7XG4gICAgICogICAgICAgdW5zdWJzY3JpYmVYKClcbiAgICAgKiAgICAgICB1bnN1YnNjcmliZVkoKVxuICAgICAqICAgICB9XG4gICAgICogICB9LCBbXSlcbiAgICAgKlxuICAgICAqICAgcmV0dXJuIDxtb3Rpb24uZGl2IHN0eWxlPXt7IHggfX0gLz5cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVJlbWFya3NcbiAgICAgKlxuICAgICAqIFdlIGNvdWxkIGxvb2sgaW50byBhIGB1c2VPbkNoYW5nZWAgaG9vayBpZiB0aGUgYWJvdmUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgcHJvdmVzIGNvbmZ1c2luZy5cbiAgICAgKlxuICAgICAqIGBgYGpzeFxuICAgICAqIHVzZU9uQ2hhbmdlKHgsICgpID0+IHt9KVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIHN1YnNjcmliZXIgLSBBIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgdGhlIGxhdGVzdCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLCB3aWxsIGNhbmNlbCB0aGlzIHN1YnNjcmlwdGlvbi5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBNb3Rpb25WYWx1ZS5wcm90b3R5cGUub25DaGFuZ2UgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVN1YnNjcmliZXJzLmFkZChzdWJzY3JpcHRpb24pO1xuICAgIH07XG4gICAgTW90aW9uVmFsdWUucHJvdG90eXBlLmNsZWFyTGlzdGVuZXJzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVN1YnNjcmliZXJzLmNsZWFyKCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBBZGRzIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIG5vdGlmaWVkIHdoZW4gdGhlIGBNb3Rpb25WYWx1ZWAgcmVxdWVzdHMgYSByZW5kZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3Vic2NyaWJlciAtIEEgZnVuY3Rpb24gdGhhdCdzIHByb3ZpZGVkIHRoZSBsYXRlc3QgdmFsdWUuXG4gICAgICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCwgd2lsbCBjYW5jZWwgdGhpcyBzdWJzY3JpcHRpb24uXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBNb3Rpb25WYWx1ZS5wcm90b3R5cGUub25SZW5kZXJSZXF1ZXN0ID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICAgICAgICAvLyBSZW5kZXIgaW1tZWRpYXRlbHlcbiAgICAgICAgc3Vic2NyaXB0aW9uKHRoaXMuZ2V0KCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJTdWJzY3JpYmVycy5hZGQoc3Vic2NyaXB0aW9uKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaGVzIGEgcGFzc2l2ZSBlZmZlY3QgdG8gdGhlIGBNb3Rpb25WYWx1ZWAuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBNb3Rpb25WYWx1ZS5wcm90b3R5cGUuYXR0YWNoID0gZnVuY3Rpb24gKHBhc3NpdmVFZmZlY3QpIHtcbiAgICAgICAgdGhpcy5wYXNzaXZlRWZmZWN0ID0gcGFzc2l2ZUVmZmVjdDtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBgTW90aW9uVmFsdWVgLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKlxuICAgICAqIGBgYGpzeFxuICAgICAqIGNvbnN0IHggPSB1c2VNb3Rpb25WYWx1ZSgwKVxuICAgICAqIHguc2V0KDEwKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIGxhdGVzdCAtIExhdGVzdCB2YWx1ZSB0byBzZXQuXG4gICAgICogQHBhcmFtIHJlbmRlciAtIFdoZXRoZXIgdG8gbm90aWZ5IHJlbmRlciBzdWJzY3JpYmVycy4gRGVmYXVsdHMgdG8gYHRydWVgXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICovXG4gICAgTW90aW9uVmFsdWUucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh2LCByZW5kZXIpIHtcbiAgICAgICAgaWYgKHJlbmRlciA9PT0gdm9pZCAwKSB7IHJlbmRlciA9IHRydWU7IH1cbiAgICAgICAgaWYgKCFyZW5kZXIgfHwgIXRoaXMucGFzc2l2ZUVmZmVjdCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBbmROb3RpZnkodiwgcmVuZGVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucGFzc2l2ZUVmZmVjdCh2LCB0aGlzLnVwZGF0ZUFuZE5vdGlmeSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxhdGVzdCBzdGF0ZSBvZiBgTW90aW9uVmFsdWVgXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyAtIFRoZSBsYXRlc3Qgc3RhdGUgb2YgYE1vdGlvblZhbHVlYFxuICAgICAqXG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIE1vdGlvblZhbHVlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQ7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAcHVibGljXG4gICAgICovXG4gICAgTW90aW9uVmFsdWUucHJvdG90eXBlLmdldFByZXZpb3VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcmV2O1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbGF0ZXN0IHZlbG9jaXR5IG9mIGBNb3Rpb25WYWx1ZWBcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIC0gVGhlIGxhdGVzdCB2ZWxvY2l0eSBvZiBgTW90aW9uVmFsdWVgLiBSZXR1cm5zIGAwYCBpZiB0aGUgc3RhdGUgaXMgbm9uLW51bWVyaWNhbC5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBNb3Rpb25WYWx1ZS5wcm90b3R5cGUuZ2V0VmVsb2NpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFRoaXMgY291bGQgYmUgaXNGbG9hdCh0aGlzLnByZXYpICYmIGlzRmxvYXQodGhpcy5jdXJyZW50KSwgYnV0IHRoYXQgd291bGQgYmUgd2FzdGVmdWxcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FuVHJhY2tWZWxvY2l0eVxuICAgICAgICAgICAgPyAvLyBUaGVzZSBjYXN0cyBjb3VsZCBiZSBhdm9pZGVkIGlmIHBhcnNlRmxvYXQgd291bGQgYmUgdHlwZWQgYmV0dGVyXG4gICAgICAgICAgICAgICAgdmVsb2NpdHlQZXJTZWNvbmQocGFyc2VGbG9hdCh0aGlzLmN1cnJlbnQpIC1cbiAgICAgICAgICAgICAgICAgICAgcGFyc2VGbG9hdCh0aGlzLnByZXYpLCB0aGlzLnRpbWVEZWx0YSlcbiAgICAgICAgICAgIDogMDtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVycyBhIG5ldyBhbmltYXRpb24gdG8gY29udHJvbCB0aGlzIGBNb3Rpb25WYWx1ZWAuIE9ubHkgb25lXG4gICAgICogYW5pbWF0aW9uIGNhbiBkcml2ZSBhIGBNb3Rpb25WYWx1ZWAgYXQgb25lIHRpbWUuXG4gICAgICpcbiAgICAgKiBgYGBqc3hcbiAgICAgKiB2YWx1ZS5zdGFydCgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYW5pbWF0aW9uIC0gQSBmdW5jdGlvbiB0aGF0IHN0YXJ0cyB0aGUgcHJvdmlkZWQgYW5pbWF0aW9uXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBNb3Rpb25WYWx1ZS5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoYW5pbWF0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgIF90aGlzLmhhc0FuaW1hdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIF90aGlzLnN0b3BBbmltYXRpb24gPSBhbmltYXRpb24ocmVzb2x2ZSk7XG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuY2xlYXJBbmltYXRpb24oKTsgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTdG9wIHRoZSBjdXJyZW50bHkgYWN0aXZlIGFuaW1hdGlvbi5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBNb3Rpb25WYWx1ZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RvcEFuaW1hdGlvbilcbiAgICAgICAgICAgIHRoaXMuc3RvcEFuaW1hdGlvbigpO1xuICAgICAgICB0aGlzLmNsZWFyQW5pbWF0aW9uKCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIHZhbHVlIGlzIGN1cnJlbnRseSBhbmltYXRpbmcuXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICovXG4gICAgTW90aW9uVmFsdWUucHJvdG90eXBlLmlzQW5pbWF0aW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLnN0b3BBbmltYXRpb247XG4gICAgfTtcbiAgICBNb3Rpb25WYWx1ZS5wcm90b3R5cGUuY2xlYXJBbmltYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc3RvcEFuaW1hdGlvbiA9IG51bGw7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBEZXN0cm95IGFuZCBjbGVhbiB1cCBzdWJzY3JpYmVycyB0byB0aGlzIGBNb3Rpb25WYWx1ZWAuXG4gICAgICpcbiAgICAgKiBUaGUgYE1vdGlvblZhbHVlYCBob29rcyBsaWtlIGB1c2VNb3Rpb25WYWx1ZWAgYW5kIGB1c2VUcmFuc2Zvcm1gIGF1dG9tYXRpY2FsbHlcbiAgICAgKiBoYW5kbGUgdGhlIGxpZmVjeWNsZSBvZiB0aGUgcmV0dXJuZWQgYE1vdGlvblZhbHVlYCwgc28gdGhpcyBtZXRob2QgaXMgb25seSBuZWNlc3NhcnkgaWYgeW91J3ZlIG1hbnVhbGx5XG4gICAgICogY3JlYXRlZCBhIGBNb3Rpb25WYWx1ZWAgdmlhIHRoZSBgbW90aW9uVmFsdWVgIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIE1vdGlvblZhbHVlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVN1YnNjcmliZXJzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucmVuZGVyU3Vic2NyaWJlcnMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgfTtcbiAgICByZXR1cm4gTW90aW9uVmFsdWU7XG59KCkpO1xuZnVuY3Rpb24gbW90aW9uVmFsdWUoaW5pdCkge1xuICAgIHJldHVybiBuZXcgTW90aW9uVmFsdWUoaW5pdCk7XG59XG5cbmV4cG9ydCB7IE1vdGlvblZhbHVlLCBtb3Rpb25WYWx1ZSB9O1xuIiwiLyoqXG4gKiBUZXN0cyBhIHByb3ZpZGVkIHZhbHVlIGFnYWluc3QgYSBWYWx1ZVR5cGVcbiAqL1xudmFyIHRlc3RWYWx1ZVR5cGUgPSBmdW5jdGlvbiAodikgeyByZXR1cm4gZnVuY3Rpb24gKHR5cGUpIHsgcmV0dXJuIHR5cGUudGVzdCh2KTsgfTsgfTtcblxuZXhwb3J0IHsgdGVzdFZhbHVlVHlwZSB9O1xuIiwiaW1wb3J0IHsgbnVtYmVyLCBweCwgcGVyY2VudCwgZGVncmVlcywgdncsIHZoIH0gZnJvbSAnc3R5bGUtdmFsdWUtdHlwZXMnO1xuaW1wb3J0IHsgdGVzdFZhbHVlVHlwZSB9IGZyb20gJy4vdGVzdC5tanMnO1xuaW1wb3J0IHsgYXV0byB9IGZyb20gJy4vdHlwZS1hdXRvLm1qcyc7XG5cbi8qKlxuICogQSBsaXN0IG9mIHZhbHVlIHR5cGVzIGNvbW1vbmx5IHVzZWQgZm9yIGRpbWVuc2lvbnNcbiAqL1xudmFyIGRpbWVuc2lvblZhbHVlVHlwZXMgPSBbbnVtYmVyLCBweCwgcGVyY2VudCwgZGVncmVlcywgdncsIHZoLCBhdXRvXTtcbi8qKlxuICogVGVzdHMgYSBkaW1lbnNpb25hbCB2YWx1ZSBhZ2FpbnN0IHRoZSBsaXN0IG9mIGRpbWVuc2lvbiBWYWx1ZVR5cGVzXG4gKi9cbnZhciBmaW5kRGltZW5zaW9uVmFsdWVUeXBlID0gZnVuY3Rpb24gKHYpIHtcbiAgICByZXR1cm4gZGltZW5zaW9uVmFsdWVUeXBlcy5maW5kKHRlc3RWYWx1ZVR5cGUodikpO1xufTtcblxuZXhwb3J0IHsgZGltZW5zaW9uVmFsdWVUeXBlcywgZmluZERpbWVuc2lvblZhbHVlVHlwZSB9O1xuIiwiLyoqXG4gKiBWYWx1ZVR5cGUgZm9yIFwiYXV0b1wiXG4gKi9cbnZhciBhdXRvID0ge1xuICAgIHRlc3Q6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2ID09PSBcImF1dG9cIjsgfSxcbiAgICBwYXJzZTogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHY7IH0sXG59O1xuXG5leHBvcnQgeyBhdXRvIH07XG4iLCJpbXBvcnQgeyBfX3NwcmVhZEFycmF5LCBfX3JlYWQgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBjb2xvciwgY29tcGxleCB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcbmltcG9ydCB7IGRpbWVuc2lvblZhbHVlVHlwZXMgfSBmcm9tICcuL2RpbWVuc2lvbnMubWpzJztcbmltcG9ydCB7IHRlc3RWYWx1ZVR5cGUgfSBmcm9tICcuL3Rlc3QubWpzJztcblxuLyoqXG4gKiBBIGxpc3Qgb2YgYWxsIFZhbHVlVHlwZXNcbiAqL1xudmFyIHZhbHVlVHlwZXMgPSBfX3NwcmVhZEFycmF5KF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChkaW1lbnNpb25WYWx1ZVR5cGVzKSwgZmFsc2UpLCBbY29sb3IsIGNvbXBsZXhdLCBmYWxzZSk7XG4vKipcbiAqIFRlc3RzIGEgdmFsdWUgYWdhaW5zdCB0aGUgbGlzdCBvZiBWYWx1ZVR5cGVzXG4gKi9cbnZhciBmaW5kVmFsdWVUeXBlID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHZhbHVlVHlwZXMuZmluZCh0ZXN0VmFsdWVUeXBlKHYpKTsgfTtcblxuZXhwb3J0IHsgZmluZFZhbHVlVHlwZSB9O1xuIiwiaW1wb3J0IHsgX19yZXN0LCBfX2Fzc2lnbiwgX19zcHJlYWRBcnJheSwgX19yZWFkIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgY29tcGxleCB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcbmltcG9ydCB7IGlzTnVtZXJpY2FsU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMvaXMtbnVtZXJpY2FsLXN0cmluZy5tanMnO1xuaW1wb3J0IHsgaXNaZXJvVmFsdWVTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscy9pcy16ZXJvLXZhbHVlLXN0cmluZy5tanMnO1xuaW1wb3J0IHsgcmVzb2x2ZUZpbmFsVmFsdWVJbktleWZyYW1lcyB9IGZyb20gJy4uLy4uL3V0aWxzL3Jlc29sdmUtdmFsdWUubWpzJztcbmltcG9ydCB7IG1vdGlvblZhbHVlIH0gZnJvbSAnLi4vLi4vdmFsdWUvaW5kZXgubWpzJztcbmltcG9ydCB7IGdldEFuaW1hdGFibGVOb25lIH0gZnJvbSAnLi4vZG9tL3ZhbHVlLXR5cGVzL2FuaW1hdGFibGUtbm9uZS5tanMnO1xuaW1wb3J0IHsgZmluZFZhbHVlVHlwZSB9IGZyb20gJy4uL2RvbS92YWx1ZS10eXBlcy9maW5kLm1qcyc7XG5pbXBvcnQgeyByZXNvbHZlVmFyaWFudCB9IGZyb20gJy4vdmFyaWFudHMubWpzJztcblxuLyoqXG4gKiBTZXQgVmlzdWFsRWxlbWVudCdzIE1vdGlvblZhbHVlLCBjcmVhdGluZyBhIG5ldyBNb3Rpb25WYWx1ZSBmb3IgaXQgaWZcbiAqIGl0IGRvZXNuJ3QgZXhpc3QuXG4gKi9cbmZ1bmN0aW9uIHNldE1vdGlvblZhbHVlKHZpc3VhbEVsZW1lbnQsIGtleSwgdmFsdWUpIHtcbiAgICBpZiAodmlzdWFsRWxlbWVudC5oYXNWYWx1ZShrZXkpKSB7XG4gICAgICAgIHZpc3VhbEVsZW1lbnQuZ2V0VmFsdWUoa2V5KS5zZXQodmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmlzdWFsRWxlbWVudC5hZGRWYWx1ZShrZXksIG1vdGlvblZhbHVlKHZhbHVlKSk7XG4gICAgfVxufVxuZnVuY3Rpb24gc2V0VGFyZ2V0KHZpc3VhbEVsZW1lbnQsIGRlZmluaXRpb24pIHtcbiAgICB2YXIgcmVzb2x2ZWQgPSByZXNvbHZlVmFyaWFudCh2aXN1YWxFbGVtZW50LCBkZWZpbml0aW9uKTtcbiAgICB2YXIgX2EgPSByZXNvbHZlZCA/IHZpc3VhbEVsZW1lbnQubWFrZVRhcmdldEFuaW1hdGFibGUocmVzb2x2ZWQsIGZhbHNlKSA6IHt9LCBfYiA9IF9hLnRyYW5zaXRpb25FbmQsIHRyYW5zaXRpb25FbmQgPSBfYiA9PT0gdm9pZCAwID8ge30gOiBfYjsgX2EudHJhbnNpdGlvbjsgdmFyIHRhcmdldCA9IF9fcmVzdChfYSwgW1widHJhbnNpdGlvbkVuZFwiLCBcInRyYW5zaXRpb25cIl0pO1xuICAgIHRhcmdldCA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCB0YXJnZXQpLCB0cmFuc2l0aW9uRW5kKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGFyZ2V0KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc29sdmVGaW5hbFZhbHVlSW5LZXlmcmFtZXModGFyZ2V0W2tleV0pO1xuICAgICAgICBzZXRNb3Rpb25WYWx1ZSh2aXN1YWxFbGVtZW50LCBrZXksIHZhbHVlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBzZXRWYXJpYW50cyh2aXN1YWxFbGVtZW50LCB2YXJpYW50TGFiZWxzKSB7XG4gICAgdmFyIHJldmVyc2VkTGFiZWxzID0gX19zcHJlYWRBcnJheShbXSwgX19yZWFkKHZhcmlhbnRMYWJlbHMpLCBmYWxzZSkucmV2ZXJzZSgpO1xuICAgIHJldmVyc2VkTGFiZWxzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciB2YXJpYW50ID0gdmlzdWFsRWxlbWVudC5nZXRWYXJpYW50KGtleSk7XG4gICAgICAgIHZhcmlhbnQgJiYgc2V0VGFyZ2V0KHZpc3VhbEVsZW1lbnQsIHZhcmlhbnQpO1xuICAgICAgICAoX2EgPSB2aXN1YWxFbGVtZW50LnZhcmlhbnRDaGlsZHJlbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICBzZXRWYXJpYW50cyhjaGlsZCwgdmFyaWFudExhYmVscyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gc2V0VmFsdWVzKHZpc3VhbEVsZW1lbnQsIGRlZmluaXRpb24pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkZWZpbml0aW9uKSkge1xuICAgICAgICByZXR1cm4gc2V0VmFyaWFudHModmlzdWFsRWxlbWVudCwgZGVmaW5pdGlvbik7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbml0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBzZXRWYXJpYW50cyh2aXN1YWxFbGVtZW50LCBbZGVmaW5pdGlvbl0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc2V0VGFyZ2V0KHZpc3VhbEVsZW1lbnQsIGRlZmluaXRpb24pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNoZWNrVGFyZ2V0Rm9yTmV3VmFsdWVzKHZpc3VhbEVsZW1lbnQsIHRhcmdldCwgb3JpZ2luKSB7XG4gICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgdmFyIF9kO1xuICAgIHZhciBuZXdWYWx1ZUtleXMgPSBPYmplY3Qua2V5cyh0YXJnZXQpLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7IHJldHVybiAhdmlzdWFsRWxlbWVudC5oYXNWYWx1ZShrZXkpOyB9KTtcbiAgICB2YXIgbnVtTmV3VmFsdWVzID0gbmV3VmFsdWVLZXlzLmxlbmd0aDtcbiAgICBpZiAoIW51bU5ld1ZhbHVlcylcbiAgICAgICAgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtTmV3VmFsdWVzOyBpKyspIHtcbiAgICAgICAgdmFyIGtleSA9IG5ld1ZhbHVlS2V5c1tpXTtcbiAgICAgICAgdmFyIHRhcmdldFZhbHVlID0gdGFyZ2V0W2tleV07XG4gICAgICAgIHZhciB2YWx1ZSA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiB0aGUgdGFyZ2V0IGlzIGEgc2VyaWVzIG9mIGtleWZyYW1lcywgd2UgY2FuIHVzZSB0aGUgZmlyc3QgdmFsdWVcbiAgICAgICAgICogaW4gdGhlIGFycmF5LiBJZiB0aGlzIGZpcnN0IHZhbHVlIGlzIG51bGwsIHdlJ2xsIHN0aWxsIG5lZWQgdG8gcmVhZCBmcm9tIHRoZSBET00uXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXRWYWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGFyZ2V0VmFsdWVbMF07XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHRoZSB0YXJnZXQgaXNuJ3Qga2V5ZnJhbWVzLCBvciB0aGUgZmlyc3Qga2V5ZnJhbWUgd2FzIG51bGwsIHdlIG5lZWQgdG9cbiAgICAgICAgICogZmlyc3QgY2hlY2sgaWYgYW4gb3JpZ2luIHZhbHVlIHdhcyBleHBsaWNpdGx5IGRlZmluZWQgaW4gdGhlIHRyYW5zaXRpb24gYXMgXCJmcm9tXCIsXG4gICAgICAgICAqIGlmIG5vdCByZWFkIHRoZSB2YWx1ZSBmcm9tIHRoZSBET00uIEFzIGFuIGFic29sdXRlIGZhbGxiYWNrLCB0YWtlIHRoZSBkZWZpbmVkIHRhcmdldCB2YWx1ZS5cbiAgICAgICAgICovXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdmFsdWUgPSAoX2IgPSAoX2EgPSBvcmlnaW5ba2V5XSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdmlzdWFsRWxlbWVudC5yZWFkVmFsdWUoa2V5KSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogdGFyZ2V0W2tleV07XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHZhbHVlIGlzIHN0aWxsIHVuZGVmaW5lZCBvciBudWxsLCBpZ25vcmUgaXQuIFByZWZlcmFibHkgdGhpcyB3b3VsZCB0aHJvdyxcbiAgICAgICAgICogYnV0IHRoaXMgd2FzIGNhdXNpbmcgaXNzdWVzIGluIEZyYW1lci5cbiAgICAgICAgICovXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIChpc051bWVyaWNhbFN0cmluZyh2YWx1ZSkgfHwgaXNaZXJvVmFsdWVTdHJpbmcodmFsdWUpKSkge1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIG51bWJlciByZWFkIGFzIGEgc3RyaW5nLCBpZSBcIjBcIiBvciBcIjIwMFwiLCBjb252ZXJ0IGl0IHRvIGEgbnVtYmVyXG4gICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFmaW5kVmFsdWVUeXBlKHZhbHVlKSAmJiBjb21wbGV4LnRlc3QodGFyZ2V0VmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGdldEFuaW1hdGFibGVOb25lKGtleSwgdGFyZ2V0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHZpc3VhbEVsZW1lbnQuYWRkVmFsdWUoa2V5LCBtb3Rpb25WYWx1ZSh2YWx1ZSkpO1xuICAgICAgICAoX2MgPSAoX2QgPSBvcmlnaW4pW2tleV0pICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IChfZFtrZXldID0gdmFsdWUpO1xuICAgICAgICB2aXN1YWxFbGVtZW50LnNldEJhc2VUYXJnZXQoa2V5LCB2YWx1ZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0T3JpZ2luRnJvbVRyYW5zaXRpb24oa2V5LCB0cmFuc2l0aW9uKSB7XG4gICAgaWYgKCF0cmFuc2l0aW9uKVxuICAgICAgICByZXR1cm47XG4gICAgdmFyIHZhbHVlVHJhbnNpdGlvbiA9IHRyYW5zaXRpb25ba2V5XSB8fCB0cmFuc2l0aW9uW1wiZGVmYXVsdFwiXSB8fCB0cmFuc2l0aW9uO1xuICAgIHJldHVybiB2YWx1ZVRyYW5zaXRpb24uZnJvbTtcbn1cbmZ1bmN0aW9uIGdldE9yaWdpbih0YXJnZXQsIHRyYW5zaXRpb24sIHZpc3VhbEVsZW1lbnQpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHZhciBvcmlnaW4gPSB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGFyZ2V0KSB7XG4gICAgICAgIG9yaWdpbltrZXldID1cbiAgICAgICAgICAgIChfYSA9IGdldE9yaWdpbkZyb21UcmFuc2l0aW9uKGtleSwgdHJhbnNpdGlvbikpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IChfYiA9IHZpc3VhbEVsZW1lbnQuZ2V0VmFsdWUoa2V5KSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmdldCgpO1xuICAgIH1cbiAgICByZXR1cm4gb3JpZ2luO1xufVxuXG5leHBvcnQgeyBjaGVja1RhcmdldEZvck5ld1ZhbHVlcywgZ2V0T3JpZ2luLCBnZXRPcmlnaW5Gcm9tVHJhbnNpdGlvbiwgc2V0VGFyZ2V0LCBzZXRWYWx1ZXMgfTtcbiIsImltcG9ydCB7IF9fcmVhZCwgX19yZXN0LCBfX2Fzc2lnbiB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IHN0YXJ0QW5pbWF0aW9uIH0gZnJvbSAnLi4vLi4vYW5pbWF0aW9uL3V0aWxzL3RyYW5zaXRpb25zLm1qcyc7XG5pbXBvcnQgeyBzZXRUYXJnZXQgfSBmcm9tICcuL3NldHRlcnMubWpzJztcbmltcG9ydCB7IHJlc29sdmVWYXJpYW50IH0gZnJvbSAnLi92YXJpYW50cy5tanMnO1xuaW1wb3J0IHsgaXNUcmFuc2Zvcm1Qcm9wIH0gZnJvbSAnLi4vaHRtbC91dGlscy90cmFuc2Zvcm0ubWpzJztcblxuZnVuY3Rpb24gYW5pbWF0ZVZpc3VhbEVsZW1lbnQodmlzdWFsRWxlbWVudCwgZGVmaW5pdGlvbiwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmlzdWFsRWxlbWVudC5ub3RpZnlBbmltYXRpb25TdGFydChkZWZpbml0aW9uKTtcbiAgICB2YXIgYW5pbWF0aW9uO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRlZmluaXRpb24pKSB7XG4gICAgICAgIHZhciBhbmltYXRpb25zID0gZGVmaW5pdGlvbi5tYXAoZnVuY3Rpb24gKHZhcmlhbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBhbmltYXRlVmFyaWFudCh2aXN1YWxFbGVtZW50LCB2YXJpYW50LCBvcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFuaW1hdGlvbiA9IFByb21pc2UuYWxsKGFuaW1hdGlvbnMpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5pdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBhbmltYXRpb24gPSBhbmltYXRlVmFyaWFudCh2aXN1YWxFbGVtZW50LCBkZWZpbml0aW9uLCBvcHRpb25zKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciByZXNvbHZlZERlZmluaXRpb24gPSB0eXBlb2YgZGVmaW5pdGlvbiA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICA/IHJlc29sdmVWYXJpYW50KHZpc3VhbEVsZW1lbnQsIGRlZmluaXRpb24sIG9wdGlvbnMuY3VzdG9tKVxuICAgICAgICAgICAgOiBkZWZpbml0aW9uO1xuICAgICAgICBhbmltYXRpb24gPSBhbmltYXRlVGFyZ2V0KHZpc3VhbEVsZW1lbnQsIHJlc29sdmVkRGVmaW5pdGlvbiwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBhbmltYXRpb24udGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB2aXN1YWxFbGVtZW50Lm5vdGlmeUFuaW1hdGlvbkNvbXBsZXRlKGRlZmluaXRpb24pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gYW5pbWF0ZVZhcmlhbnQodmlzdWFsRWxlbWVudCwgdmFyaWFudCwgb3B0aW9ucykge1xuICAgIHZhciBfYTtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciByZXNvbHZlZCA9IHJlc29sdmVWYXJpYW50KHZpc3VhbEVsZW1lbnQsIHZhcmlhbnQsIG9wdGlvbnMuY3VzdG9tKTtcbiAgICB2YXIgX2IgPSAocmVzb2x2ZWQgfHwge30pLnRyYW5zaXRpb24sIHRyYW5zaXRpb24gPSBfYiA9PT0gdm9pZCAwID8gdmlzdWFsRWxlbWVudC5nZXREZWZhdWx0VHJhbnNpdGlvbigpIHx8IHt9IDogX2I7XG4gICAgaWYgKG9wdGlvbnMudHJhbnNpdGlvbk92ZXJyaWRlKSB7XG4gICAgICAgIHRyYW5zaXRpb24gPSBvcHRpb25zLnRyYW5zaXRpb25PdmVycmlkZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgd2UgaGF2ZSBhIHZhcmlhbnQsIGNyZWF0ZSBhIGNhbGxiYWNrIHRoYXQgcnVucyBpdCBhcyBhbiBhbmltYXRpb24uXG4gICAgICogT3RoZXJ3aXNlLCB3ZSByZXNvbHZlIGEgUHJvbWlzZSBpbW1lZGlhdGVseSBmb3IgYSBjb21wb3NhYmxlIG5vLW9wLlxuICAgICAqL1xuICAgIHZhciBnZXRBbmltYXRpb24gPSByZXNvbHZlZFxuICAgICAgICA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFuaW1hdGVUYXJnZXQodmlzdWFsRWxlbWVudCwgcmVzb2x2ZWQsIG9wdGlvbnMpOyB9XG4gICAgICAgIDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7IH07XG4gICAgLyoqXG4gICAgICogSWYgd2UgaGF2ZSBjaGlsZHJlbiwgY3JlYXRlIGEgY2FsbGJhY2sgdGhhdCBydW5zIGFsbCB0aGVpciBhbmltYXRpb25zLlxuICAgICAqIE90aGVyd2lzZSwgd2UgcmVzb2x2ZSBhIFByb21pc2UgaW1tZWRpYXRlbHkgZm9yIGEgY29tcG9zYWJsZSBuby1vcC5cbiAgICAgKi9cbiAgICB2YXIgZ2V0Q2hpbGRBbmltYXRpb25zID0gKChfYSA9IHZpc3VhbEVsZW1lbnQudmFyaWFudENoaWxkcmVuKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2l6ZSlcbiAgICAgICAgPyBmdW5jdGlvbiAoZm9yd2FyZERlbGF5KSB7XG4gICAgICAgICAgICBpZiAoZm9yd2FyZERlbGF5ID09PSB2b2lkIDApIHsgZm9yd2FyZERlbGF5ID0gMDsgfVxuICAgICAgICAgICAgdmFyIF9hID0gdHJhbnNpdGlvbi5kZWxheUNoaWxkcmVuLCBkZWxheUNoaWxkcmVuID0gX2EgPT09IHZvaWQgMCA/IDAgOiBfYSwgc3RhZ2dlckNoaWxkcmVuID0gdHJhbnNpdGlvbi5zdGFnZ2VyQ2hpbGRyZW4sIHN0YWdnZXJEaXJlY3Rpb24gPSB0cmFuc2l0aW9uLnN0YWdnZXJEaXJlY3Rpb247XG4gICAgICAgICAgICByZXR1cm4gYW5pbWF0ZUNoaWxkcmVuKHZpc3VhbEVsZW1lbnQsIHZhcmlhbnQsIGRlbGF5Q2hpbGRyZW4gKyBmb3J3YXJkRGVsYXksIHN0YWdnZXJDaGlsZHJlbiwgc3RhZ2dlckRpcmVjdGlvbiwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsgfTtcbiAgICAvKipcbiAgICAgKiBJZiB0aGUgdHJhbnNpdGlvbiBleHBsaWNpdGx5IGRlZmluZXMgYSBcIndoZW5cIiBvcHRpb24sIHdlIG5lZWQgdG8gcmVzb2x2ZSBlaXRoZXJcbiAgICAgKiB0aGlzIGFuaW1hdGlvbiBvciBhbGwgY2hpbGRyZW4gYW5pbWF0aW9ucyBiZWZvcmUgcGxheWluZyB0aGUgb3RoZXIuXG4gICAgICovXG4gICAgdmFyIHdoZW4gPSB0cmFuc2l0aW9uLndoZW47XG4gICAgaWYgKHdoZW4pIHtcbiAgICAgICAgdmFyIF9jID0gX19yZWFkKHdoZW4gPT09IFwiYmVmb3JlQ2hpbGRyZW5cIlxuICAgICAgICAgICAgPyBbZ2V0QW5pbWF0aW9uLCBnZXRDaGlsZEFuaW1hdGlvbnNdXG4gICAgICAgICAgICA6IFtnZXRDaGlsZEFuaW1hdGlvbnMsIGdldEFuaW1hdGlvbl0sIDIpLCBmaXJzdCA9IF9jWzBdLCBsYXN0ID0gX2NbMV07XG4gICAgICAgIHJldHVybiBmaXJzdCgpLnRoZW4obGFzdCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW2dldEFuaW1hdGlvbigpLCBnZXRDaGlsZEFuaW1hdGlvbnMob3B0aW9ucy5kZWxheSldKTtcbiAgICB9XG59XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBhbmltYXRlVGFyZ2V0KHZpc3VhbEVsZW1lbnQsIGRlZmluaXRpb24sIF9hKSB7XG4gICAgdmFyIF9iO1xuICAgIHZhciBfYyA9IF9hID09PSB2b2lkIDAgPyB7fSA6IF9hLCBfZCA9IF9jLmRlbGF5LCBkZWxheSA9IF9kID09PSB2b2lkIDAgPyAwIDogX2QsIHRyYW5zaXRpb25PdmVycmlkZSA9IF9jLnRyYW5zaXRpb25PdmVycmlkZSwgdHlwZSA9IF9jLnR5cGU7XG4gICAgdmFyIF9lID0gdmlzdWFsRWxlbWVudC5tYWtlVGFyZ2V0QW5pbWF0YWJsZShkZWZpbml0aW9uKSwgX2YgPSBfZS50cmFuc2l0aW9uLCB0cmFuc2l0aW9uID0gX2YgPT09IHZvaWQgMCA/IHZpc3VhbEVsZW1lbnQuZ2V0RGVmYXVsdFRyYW5zaXRpb24oKSA6IF9mLCB0cmFuc2l0aW9uRW5kID0gX2UudHJhbnNpdGlvbkVuZCwgdGFyZ2V0ID0gX19yZXN0KF9lLCBbXCJ0cmFuc2l0aW9uXCIsIFwidHJhbnNpdGlvbkVuZFwiXSk7XG4gICAgaWYgKHRyYW5zaXRpb25PdmVycmlkZSlcbiAgICAgICAgdHJhbnNpdGlvbiA9IHRyYW5zaXRpb25PdmVycmlkZTtcbiAgICB2YXIgYW5pbWF0aW9ucyA9IFtdO1xuICAgIHZhciBhbmltYXRpb25UeXBlU3RhdGUgPSB0eXBlICYmICgoX2IgPSB2aXN1YWxFbGVtZW50LmFuaW1hdGlvblN0YXRlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZ2V0U3RhdGUoKVt0eXBlXSk7XG4gICAgZm9yICh2YXIga2V5IGluIHRhcmdldCkge1xuICAgICAgICB2YXIgdmFsdWUgPSB2aXN1YWxFbGVtZW50LmdldFZhbHVlKGtleSk7XG4gICAgICAgIHZhciB2YWx1ZVRhcmdldCA9IHRhcmdldFtrZXldO1xuICAgICAgICBpZiAoIXZhbHVlIHx8XG4gICAgICAgICAgICB2YWx1ZVRhcmdldCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAoYW5pbWF0aW9uVHlwZVN0YXRlICYmXG4gICAgICAgICAgICAgICAgc2hvdWxkQmxvY2tBbmltYXRpb24oYW5pbWF0aW9uVHlwZVN0YXRlLCBrZXkpKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHZhbHVlVHJhbnNpdGlvbiA9IF9fYXNzaWduKHsgZGVsYXk6IGRlbGF5IH0sIHRyYW5zaXRpb24pO1xuICAgICAgICAvKipcbiAgICAgICAgICogTWFrZSBhbmltYXRpb24gaW5zdGFudCBpZiB0aGlzIGlzIGEgdHJhbnNmb3JtIHByb3AgYW5kIHdlIHNob3VsZCByZWR1Y2UgbW90aW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHZpc3VhbEVsZW1lbnQuc2hvdWxkUmVkdWNlTW90aW9uICYmIGlzVHJhbnNmb3JtUHJvcChrZXkpKSB7XG4gICAgICAgICAgICB2YWx1ZVRyYW5zaXRpb24gPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgdmFsdWVUcmFuc2l0aW9uKSwgeyB0eXBlOiBmYWxzZSwgZGVsYXk6IDAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFuaW1hdGlvbiA9IHN0YXJ0QW5pbWF0aW9uKGtleSwgdmFsdWUsIHZhbHVlVGFyZ2V0LCB2YWx1ZVRyYW5zaXRpb24pO1xuICAgICAgICBhbmltYXRpb25zLnB1c2goYW5pbWF0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGFuaW1hdGlvbnMpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB0cmFuc2l0aW9uRW5kICYmIHNldFRhcmdldCh2aXN1YWxFbGVtZW50LCB0cmFuc2l0aW9uRW5kKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGFuaW1hdGVDaGlsZHJlbih2aXN1YWxFbGVtZW50LCB2YXJpYW50LCBkZWxheUNoaWxkcmVuLCBzdGFnZ2VyQ2hpbGRyZW4sIHN0YWdnZXJEaXJlY3Rpb24sIG9wdGlvbnMpIHtcbiAgICBpZiAoZGVsYXlDaGlsZHJlbiA9PT0gdm9pZCAwKSB7IGRlbGF5Q2hpbGRyZW4gPSAwOyB9XG4gICAgaWYgKHN0YWdnZXJDaGlsZHJlbiA9PT0gdm9pZCAwKSB7IHN0YWdnZXJDaGlsZHJlbiA9IDA7IH1cbiAgICBpZiAoc3RhZ2dlckRpcmVjdGlvbiA9PT0gdm9pZCAwKSB7IHN0YWdnZXJEaXJlY3Rpb24gPSAxOyB9XG4gICAgdmFyIGFuaW1hdGlvbnMgPSBbXTtcbiAgICB2YXIgbWF4U3RhZ2dlckR1cmF0aW9uID0gKHZpc3VhbEVsZW1lbnQudmFyaWFudENoaWxkcmVuLnNpemUgLSAxKSAqIHN0YWdnZXJDaGlsZHJlbjtcbiAgICB2YXIgZ2VuZXJhdGVTdGFnZ2VyRHVyYXRpb24gPSBzdGFnZ2VyRGlyZWN0aW9uID09PSAxXG4gICAgICAgID8gZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgIGlmIChpID09PSB2b2lkIDApIHsgaSA9IDA7IH1cbiAgICAgICAgICAgIHJldHVybiBpICogc3RhZ2dlckNoaWxkcmVuO1xuICAgICAgICB9XG4gICAgICAgIDogZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgIGlmIChpID09PSB2b2lkIDApIHsgaSA9IDA7IH1cbiAgICAgICAgICAgIHJldHVybiBtYXhTdGFnZ2VyRHVyYXRpb24gLSBpICogc3RhZ2dlckNoaWxkcmVuO1xuICAgICAgICB9O1xuICAgIEFycmF5LmZyb20odmlzdWFsRWxlbWVudC52YXJpYW50Q2hpbGRyZW4pXG4gICAgICAgIC5zb3J0KHNvcnRCeVRyZWVPcmRlcilcbiAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkLCBpKSB7XG4gICAgICAgIGFuaW1hdGlvbnMucHVzaChhbmltYXRlVmFyaWFudChjaGlsZCwgdmFyaWFudCwgX19hc3NpZ24oX19hc3NpZ24oe30sIG9wdGlvbnMpLCB7IGRlbGF5OiBkZWxheUNoaWxkcmVuICsgZ2VuZXJhdGVTdGFnZ2VyRHVyYXRpb24oaSkgfSkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4gY2hpbGQubm90aWZ5QW5pbWF0aW9uQ29tcGxldGUodmFyaWFudCk7IH0pKTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoYW5pbWF0aW9ucyk7XG59XG5mdW5jdGlvbiBzdG9wQW5pbWF0aW9uKHZpc3VhbEVsZW1lbnQpIHtcbiAgICB2aXN1YWxFbGVtZW50LmZvckVhY2hWYWx1ZShmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHZhbHVlLnN0b3AoKTsgfSk7XG59XG5mdW5jdGlvbiBzb3J0QnlUcmVlT3JkZXIoYSwgYikge1xuICAgIHJldHVybiBhLnNvcnROb2RlUG9zaXRpb24oYik7XG59XG4vKipcbiAqIERlY2lkZSB3aGV0aGVyIHdlIHNob3VsZCBibG9jayB0aGlzIGFuaW1hdGlvbi4gUHJldmlvdXNseSwgd2UgYWNoaWV2ZWQgdGhpc1xuICoganVzdCBieSBjaGVja2luZyB3aGV0aGVyIHRoZSBrZXkgd2FzIGxpc3RlZCBpbiBwcm90ZWN0ZWRLZXlzLCBidXQgdGhpc1xuICogcG9zZWQgcHJvYmxlbXMgaWYgYW4gYW5pbWF0aW9uIHdhcyB0cmlnZ2VyZWQgYnkgYWZ0ZXJDaGlsZHJlbiBhbmQgcHJvdGVjdGVkS2V5c1xuICogaGFkIGJlZW4gc2V0IHRvIHRydWUgaW4gdGhlIG1lYW50aW1lLlxuICovXG5mdW5jdGlvbiBzaG91bGRCbG9ja0FuaW1hdGlvbihfYSwga2V5KSB7XG4gICAgdmFyIHByb3RlY3RlZEtleXMgPSBfYS5wcm90ZWN0ZWRLZXlzLCBuZWVkc0FuaW1hdGluZyA9IF9hLm5lZWRzQW5pbWF0aW5nO1xuICAgIHZhciBzaG91bGRCbG9jayA9IHByb3RlY3RlZEtleXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBuZWVkc0FuaW1hdGluZ1trZXldICE9PSB0cnVlO1xuICAgIG5lZWRzQW5pbWF0aW5nW2tleV0gPSBmYWxzZTtcbiAgICByZXR1cm4gc2hvdWxkQmxvY2s7XG59XG5cbmV4cG9ydCB7IGFuaW1hdGVWaXN1YWxFbGVtZW50LCBzb3J0QnlUcmVlT3JkZXIsIHN0b3BBbmltYXRpb24gfTtcbiIsImltcG9ydCB7IF9fc3ByZWFkQXJyYXksIF9fcmVhZCwgX19hc3NpZ24sIF9fcmVzdCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IGlzQW5pbWF0aW9uQ29udHJvbHMgfSBmcm9tICcuLi8uLi9hbmltYXRpb24vdXRpbHMvaXMtYW5pbWF0aW9uLWNvbnRyb2xzLm1qcyc7XG5pbXBvcnQgeyBpc0tleWZyYW1lc1RhcmdldCB9IGZyb20gJy4uLy4uL2FuaW1hdGlvbi91dGlscy9pcy1rZXlmcmFtZXMtdGFyZ2V0Lm1qcyc7XG5pbXBvcnQgeyBzaGFsbG93Q29tcGFyZSB9IGZyb20gJy4uLy4uL3V0aWxzL3NoYWxsb3ctY29tcGFyZS5tanMnO1xuaW1wb3J0IHsgYW5pbWF0ZVZpc3VhbEVsZW1lbnQgfSBmcm9tICcuL2FuaW1hdGlvbi5tanMnO1xuaW1wb3J0IHsgQW5pbWF0aW9uVHlwZSB9IGZyb20gJy4vdHlwZXMubWpzJztcbmltcG9ydCB7IGlzVmFyaWFudExhYmVscywgcmVzb2x2ZVZhcmlhbnQsIGlzVmFyaWFudExhYmVsIH0gZnJvbSAnLi92YXJpYW50cy5tanMnO1xuXG52YXIgdmFyaWFudFByaW9yaXR5T3JkZXIgPSBbXG4gICAgQW5pbWF0aW9uVHlwZS5BbmltYXRlLFxuICAgIEFuaW1hdGlvblR5cGUuSW5WaWV3LFxuICAgIEFuaW1hdGlvblR5cGUuRm9jdXMsXG4gICAgQW5pbWF0aW9uVHlwZS5Ib3ZlcixcbiAgICBBbmltYXRpb25UeXBlLlRhcCxcbiAgICBBbmltYXRpb25UeXBlLkRyYWcsXG4gICAgQW5pbWF0aW9uVHlwZS5FeGl0LFxuXTtcbnZhciByZXZlcnNlUHJpb3JpdHlPcmRlciA9IF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZCh2YXJpYW50UHJpb3JpdHlPcmRlciksIGZhbHNlKS5yZXZlcnNlKCk7XG52YXIgbnVtQW5pbWF0aW9uVHlwZXMgPSB2YXJpYW50UHJpb3JpdHlPcmRlci5sZW5ndGg7XG5mdW5jdGlvbiBhbmltYXRlTGlzdCh2aXN1YWxFbGVtZW50KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhbmltYXRpb25zKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChhbmltYXRpb25zLm1hcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHZhciBhbmltYXRpb24gPSBfYS5hbmltYXRpb24sIG9wdGlvbnMgPSBfYS5vcHRpb25zO1xuICAgICAgICAgICAgcmV0dXJuIGFuaW1hdGVWaXN1YWxFbGVtZW50KHZpc3VhbEVsZW1lbnQsIGFuaW1hdGlvbiwgb3B0aW9ucyk7XG4gICAgICAgIH0pKTtcbiAgICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlQW5pbWF0aW9uU3RhdGUodmlzdWFsRWxlbWVudCkge1xuICAgIHZhciBhbmltYXRlID0gYW5pbWF0ZUxpc3QodmlzdWFsRWxlbWVudCk7XG4gICAgdmFyIHN0YXRlID0gY3JlYXRlU3RhdGUoKTtcbiAgICB2YXIgYWxsQW5pbWF0ZWRLZXlzID0ge307XG4gICAgdmFyIGlzSW5pdGlhbFJlbmRlciA9IHRydWU7XG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgdG8gcmVkdWNlIHRoZSBhbmltYXRpb24gZGVmaW5pdGlvbnMgZm9yXG4gICAgICogZWFjaCBhY3RpdmUgYW5pbWF0aW9uIHR5cGUgaW50byBhbiBvYmplY3Qgb2YgcmVzb2x2ZWQgdmFsdWVzIGZvciBpdC5cbiAgICAgKi9cbiAgICB2YXIgYnVpbGRSZXNvbHZlZFR5cGVWYWx1ZXMgPSBmdW5jdGlvbiAoYWNjLCBkZWZpbml0aW9uKSB7XG4gICAgICAgIHZhciByZXNvbHZlZCA9IHJlc29sdmVWYXJpYW50KHZpc3VhbEVsZW1lbnQsIGRlZmluaXRpb24pO1xuICAgICAgICBpZiAocmVzb2x2ZWQpIHtcbiAgICAgICAgICAgIHJlc29sdmVkLnRyYW5zaXRpb247IHZhciB0cmFuc2l0aW9uRW5kID0gcmVzb2x2ZWQudHJhbnNpdGlvbkVuZCwgdGFyZ2V0ID0gX19yZXN0KHJlc29sdmVkLCBbXCJ0cmFuc2l0aW9uXCIsIFwidHJhbnNpdGlvbkVuZFwiXSk7XG4gICAgICAgICAgICBhY2MgPSBfX2Fzc2lnbihfX2Fzc2lnbihfX2Fzc2lnbih7fSwgYWNjKSwgdGFyZ2V0KSwgdHJhbnNpdGlvbkVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGlzQW5pbWF0ZWQoa2V5KSB7XG4gICAgICAgIHJldHVybiBhbGxBbmltYXRlZEtleXNba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIGp1c3QgYWxsb3dzIHVzIHRvIGluamVjdCBtb2NrZWQgYW5pbWF0aW9uIGZ1bmN0aW9uc1xuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNldEFuaW1hdGVGdW5jdGlvbihtYWtlQW5pbWF0b3IpIHtcbiAgICAgICAgYW5pbWF0ZSA9IG1ha2VBbmltYXRvcih2aXN1YWxFbGVtZW50KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV2hlbiB3ZSByZWNlaXZlIG5ldyBwcm9wcywgd2UgbmVlZCB0bzpcbiAgICAgKiAxLiBDcmVhdGUgYSBsaXN0IG9mIHByb3RlY3RlZCBrZXlzIGZvciBlYWNoIHR5cGUuIFRoaXMgaXMgYSBkaXJlY3Rvcnkgb2ZcbiAgICAgKiAgICB2YWx1ZSBrZXlzIHRoYXQgYXJlIGN1cnJlbnRseSBiZWluZyBcImhhbmRsZWRcIiBieSB0eXBlcyBvZiBhIGhpZ2hlciBwcmlvcml0eVxuICAgICAqICAgIHNvIHRoYXQgd2hlbmV2ZXIgYW4gYW5pbWF0aW9uIGlzIHBsYXllZCBvZiBhIGdpdmVuIHR5cGUsIHRoZXNlIHZhbHVlcyBhcmVcbiAgICAgKiAgICBwcm90ZWN0ZWQgZnJvbSBiZWluZyBhbmltYXRlZC5cbiAgICAgKiAyLiBEZXRlcm1pbmUgaWYgYW4gYW5pbWF0aW9uIHR5cGUgbmVlZHMgYW5pbWF0aW5nLlxuICAgICAqIDMuIERldGVybWluZSBpZiBhbnkgdmFsdWVzIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gYSB0eXBlIGFuZCBmaWd1cmUgb3V0XG4gICAgICogICAgd2hhdCB0byBhbmltYXRlIHRob3NlIHRvLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFuaW1hdGVDaGFuZ2VzKG9wdGlvbnMsIGNoYW5nZWRBY3RpdmVUeXBlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdmFyIHByb3BzID0gdmlzdWFsRWxlbWVudC5nZXRQcm9wcygpO1xuICAgICAgICB2YXIgY29udGV4dCA9IHZpc3VhbEVsZW1lbnQuZ2V0VmFyaWFudENvbnRleHQodHJ1ZSkgfHwge307XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIGxpc3Qgb2YgYW5pbWF0aW9ucyB0aGF0IHdlJ2xsIGJ1aWxkIGludG8gYXMgd2UgaXRlcmF0ZSB0aHJvdWdoIHRoZSBhbmltYXRpb25cbiAgICAgICAgICogdHlwZXMuIFRoaXMgd2lsbCBnZXQgZXhlY3V0ZWQgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgYW5pbWF0aW9ucyA9IFtdO1xuICAgICAgICAvKipcbiAgICAgICAgICogS2VlcCB0cmFjayBvZiB3aGljaCB2YWx1ZXMgaGF2ZSBiZWVuIHJlbW92ZWQuIFRoZW4sIGFzIHdlIGhpdCBsb3dlciBwcmlvcml0eVxuICAgICAgICAgKiBhbmltYXRpb24gdHlwZXMsIHdlIGNhbiBjaGVjayBpZiB0aGV5IGNvbnRhaW4gcmVtb3ZlZCB2YWx1ZXMgYW5kIGFuaW1hdGUgdG8gdGhhdC5cbiAgICAgICAgICovXG4gICAgICAgIHZhciByZW1vdmVkS2V5cyA9IG5ldyBTZXQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgZGljdGlvbmFyeSBvZiBhbGwgZW5jb3VudGVyZWQga2V5cy4gVGhpcyBpcyBhbiBvYmplY3QgdG8gbGV0IHVzIGJ1aWxkIGludG8gYW5kXG4gICAgICAgICAqIGNvcHkgaXQgd2l0aG91dCBpdGVyYXRpb24uIEVhY2ggdGltZSB3ZSBoaXQgYW4gYW5pbWF0aW9uIHR5cGUgd2Ugc2V0IGl0cyBwcm90ZWN0ZWRcbiAgICAgICAgICoga2V5cyAtIHRoZSBrZXlzIGl0cyBub3QgYWxsb3dlZCB0byBhbmltYXRlIC0gdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgb2JqZWN0LlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGVuY291bnRlcmVkS2V5cyA9IHt9O1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgYSB2YXJpYW50IGhhcyBiZWVuIHJlbW92ZWQgYXQgYSBnaXZlbiBpbmRleCwgYW5kIHRoaXMgY29tcG9uZW50IGlzIGNvbnRyb2xsaW5nXG4gICAgICAgICAqIHZhcmlhbnQgYW5pbWF0aW9ucywgd2Ugd2FudCB0byBlbnN1cmUgbG93ZXItcHJpb3JpdHkgdmFyaWFudHMgYXJlIGZvcmNlZCB0byBhbmltYXRlLlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIHJlbW92ZWRWYXJpYW50SW5kZXggPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgdmFyIHR5cGUgPSByZXZlcnNlUHJpb3JpdHlPcmRlcltpXTtcbiAgICAgICAgICAgIHZhciB0eXBlU3RhdGUgPSBzdGF0ZVt0eXBlXTtcbiAgICAgICAgICAgIHZhciBwcm9wID0gKF9hID0gcHJvcHNbdHlwZV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGNvbnRleHRbdHlwZV07XG4gICAgICAgICAgICB2YXIgcHJvcElzVmFyaWFudCA9IGlzVmFyaWFudExhYmVsKHByb3ApO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB0aGlzIHR5cGUgaGFzICpqdXN0KiBjaGFuZ2VkIGlzQWN0aXZlIHN0YXR1cywgc2V0IGFjdGl2ZURlbHRhXG4gICAgICAgICAgICAgKiB0byB0aGF0IHN0YXR1cy4gT3RoZXJ3aXNlIHNldCB0byBudWxsLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB2YXIgYWN0aXZlRGVsdGEgPSB0eXBlID09PSBjaGFuZ2VkQWN0aXZlVHlwZSA/IHR5cGVTdGF0ZS5pc0FjdGl2ZSA6IG51bGw7XG4gICAgICAgICAgICBpZiAoYWN0aXZlRGVsdGEgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJlbW92ZWRWYXJpYW50SW5kZXggPSBpO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB0aGlzIHByb3AgaXMgYW4gaW5oZXJpdGVkIHZhcmlhbnQsIHJhdGhlciB0aGFuIGJlZW4gc2V0IGRpcmVjdGx5IG9uIHRoZVxuICAgICAgICAgICAgICogY29tcG9uZW50IGl0c2VsZiwgd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgYWxsb3cgdGhlIHBhcmVudCB0byB0cmlnZ2VyIGFuaW1hdGlvbnMuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogVE9ETzogQ2FuIHByb2JhYmx5IGNoYW5nZSB0aGlzIHRvIGEgIWlzQ29udHJvbGxpbmdWYXJpYW50cyBjaGVja1xuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB2YXIgaXNJbmhlcml0ZWQgPSBwcm9wID09PSBjb250ZXh0W3R5cGVdICYmIHByb3AgIT09IHByb3BzW3R5cGVdICYmIHByb3BJc1ZhcmlhbnQ7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmIChpc0luaGVyaXRlZCAmJlxuICAgICAgICAgICAgICAgIGlzSW5pdGlhbFJlbmRlciAmJlxuICAgICAgICAgICAgICAgIHZpc3VhbEVsZW1lbnQubWFudWFsbHlBbmltYXRlT25Nb3VudCkge1xuICAgICAgICAgICAgICAgIGlzSW5oZXJpdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFNldCBhbGwgZW5jb3VudGVyZWQga2V5cyBzbyBmYXIgYXMgdGhlIHByb3RlY3RlZCBrZXlzIGZvciB0aGlzIHR5cGUuIFRoaXMgd2lsbFxuICAgICAgICAgICAgICogYmUgYW55IGtleSB0aGF0IGhhcyBiZWVuIGFuaW1hdGVkIG9yIG90aGVyd2lzZSBoYW5kbGVkIGJ5IGFjdGl2ZSwgaGlnaGVyLXByaW9ydGl5IHR5cGVzLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0eXBlU3RhdGUucHJvdGVjdGVkS2V5cyA9IF9fYXNzaWduKHt9LCBlbmNvdW50ZXJlZEtleXMpO1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgY2FuIHNraXAgYW5hbHlzaW5nIHRoaXMgcHJvcCBlYXJseVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgLy8gSWYgaXQgaXNuJ3QgYWN0aXZlIGFuZCBoYXNuJ3QgKmp1c3QqIGJlZW4gc2V0IGFzIGluYWN0aXZlXG4gICAgICAgICAgICAoIXR5cGVTdGF0ZS5pc0FjdGl2ZSAmJiBhY3RpdmVEZWx0YSA9PT0gbnVsbCkgfHxcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgYW5kIGRvbid0IGhhdmUgYW55IGRlZmluZWQgcHJvcCBmb3IgdGhpcyBhbmltYXRpb24gdHlwZVxuICAgICAgICAgICAgICAgICghcHJvcCAmJiAhdHlwZVN0YXRlLnByZXZQcm9wKSB8fFxuICAgICAgICAgICAgICAgIC8vIE9yIGlmIHRoZSBwcm9wIGRvZXNuJ3QgZGVmaW5lIGFuIGFuaW1hdGlvblxuICAgICAgICAgICAgICAgIGlzQW5pbWF0aW9uQ29udHJvbHMocHJvcCkgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgcHJvcCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJjb250aW51ZVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBBcyB3ZSBnbyBsb29rIHRocm91Z2ggdGhlIHZhbHVlcyBkZWZpbmVkIG9uIHRoaXMgdHlwZSwgaWYgd2UgZGV0ZWN0XG4gICAgICAgICAgICAgKiBhIGNoYW5nZWQgdmFsdWUgb3IgYSB2YWx1ZSB0aGF0IHdhcyByZW1vdmVkIGluIGEgaGlnaGVyIHByaW9yaXR5LCB3ZSBzZXRcbiAgICAgICAgICAgICAqIHRoaXMgdG8gdHJ1ZSBhbmQgYWRkIHRoaXMgcHJvcCB0byB0aGUgYW5pbWF0aW9uIGxpc3QuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhciB2YXJpYW50RGlkQ2hhbmdlID0gY2hlY2tWYXJpYW50c0RpZENoYW5nZSh0eXBlU3RhdGUucHJldlByb3AsIHByb3ApO1xuICAgICAgICAgICAgdmFyIHNob3VsZEFuaW1hdGVUeXBlID0gdmFyaWFudERpZENoYW5nZSB8fFxuICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIG1ha2luZyB0aGlzIHZhcmlhbnQgYWN0aXZlLCB3ZSB3YW50IHRvIGFsd2F5cyBtYWtlIGl0IGFjdGl2ZVxuICAgICAgICAgICAgICAgICh0eXBlID09PSBjaGFuZ2VkQWN0aXZlVHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlU3RhdGUuaXNBY3RpdmUgJiZcbiAgICAgICAgICAgICAgICAgICAgIWlzSW5oZXJpdGVkICYmXG4gICAgICAgICAgICAgICAgICAgIHByb3BJc1ZhcmlhbnQpIHx8XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgcmVtb3ZlZCBhIGhpZ2hlci1wcmlvcml0eSB2YXJpYW50IChpIGlzIGluIHJldmVyc2Ugb3JkZXIpXG4gICAgICAgICAgICAgICAgKGkgPiByZW1vdmVkVmFyaWFudEluZGV4ICYmIHByb3BJc1ZhcmlhbnQpO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBBcyBhbmltYXRpb25zIGNhbiBiZSBzZXQgYXMgdmFyaWFudCBsaXN0cywgdmFyaWFudHMgb3IgdGFyZ2V0IG9iamVjdHMsIHdlXG4gICAgICAgICAgICAgKiBjb2VyY2UgZXZlcnl0aGluZyB0byBhbiBhcnJheSBpZiBpdCBpc24ndCBvbmUgYWxyZWFkeVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB2YXIgZGVmaW5pdGlvbkxpc3QgPSBBcnJheS5pc0FycmF5KHByb3ApID8gcHJvcCA6IFtwcm9wXTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQnVpbGQgYW4gb2JqZWN0IG9mIGFsbCB0aGUgcmVzb2x2ZWQgdmFsdWVzLiBXZSdsbCB1c2UgdGhpcyBpbiB0aGUgc3Vic2VxdWVudFxuICAgICAgICAgICAgICogYW5pbWF0ZUNoYW5nZXMgY2FsbHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSB2YWx1ZSBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdmFyIHJlc29sdmVkVmFsdWVzID0gZGVmaW5pdGlvbkxpc3QucmVkdWNlKGJ1aWxkUmVzb2x2ZWRUeXBlVmFsdWVzLCB7fSk7XG4gICAgICAgICAgICBpZiAoYWN0aXZlRGVsdGEgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJlc29sdmVkVmFsdWVzID0ge307XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIE5vdyB3ZSBuZWVkIHRvIGxvb3AgdGhyb3VnaCBhbGwgdGhlIGtleXMgaW4gdGhlIHByZXYgcHJvcCBhbmQgdGhpcyBwcm9wLFxuICAgICAgICAgICAgICogYW5kIGRlY2lkZTpcbiAgICAgICAgICAgICAqIDEuIElmIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZCwgYW5kIG5lZWRzIGFuaW1hdGluZ1xuICAgICAgICAgICAgICogMi4gSWYgaXQgaGFzIGJlZW4gcmVtb3ZlZCwgYW5kIG5lZWRzIGFkZGluZyB0byB0aGUgcmVtb3ZlZEtleXMgc2V0XG4gICAgICAgICAgICAgKiAzLiBJZiBpdCBoYXMgYmVlbiByZW1vdmVkIGluIGEgaGlnaGVyIHByaW9yaXR5IHR5cGUgYW5kIG5lZWRzIGFuaW1hdGluZ1xuICAgICAgICAgICAgICogNC4gSWYgaXQgaGFzbid0IGJlZW4gcmVtb3ZlZCBpbiBhIGhpZ2hlciBwcmlvcml0eSBidXQgaGFzbid0IGNoYW5nZWQsIGFuZFxuICAgICAgICAgICAgICogICAgbmVlZHMgYWRkaW5nIHRvIHRoZSB0eXBlJ3MgcHJvdGVjdGVkS2V5cyBsaXN0LlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB2YXIgX2IgPSB0eXBlU3RhdGUucHJldlJlc29sdmVkVmFsdWVzLCBwcmV2UmVzb2x2ZWRWYWx1ZXMgPSBfYiA9PT0gdm9pZCAwID8ge30gOiBfYjtcbiAgICAgICAgICAgIHZhciBhbGxLZXlzID0gX19hc3NpZ24oX19hc3NpZ24oe30sIHByZXZSZXNvbHZlZFZhbHVlcyksIHJlc29sdmVkVmFsdWVzKTtcbiAgICAgICAgICAgIHZhciBtYXJrVG9BbmltYXRlID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIHNob3VsZEFuaW1hdGVUeXBlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZW1vdmVkS2V5cy5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgICAgICB0eXBlU3RhdGUubmVlZHNBbmltYXRpbmdba2V5XSA9IHRydWU7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGFsbEtleXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IHJlc29sdmVkVmFsdWVzW2tleV07XG4gICAgICAgICAgICAgICAgdmFyIHByZXYgPSBwcmV2UmVzb2x2ZWRWYWx1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhpcyB3ZSBjYW4ganVzdCBza2lwIGFoZWFkXG4gICAgICAgICAgICAgICAgaWYgKGVuY291bnRlcmVkS2V5cy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBJZiB0aGUgdmFsdWUgaGFzIGNoYW5nZWQsIHdlIHByb2JhYmx5IHdhbnQgdG8gYW5pbWF0ZSBpdC5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gcHJldikge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogSWYgYm90aCB2YWx1ZXMgYXJlIGtleWZyYW1lcywgd2UgbmVlZCB0byBzaGFsbG93IGNvbXBhcmUgdGhlbSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBkZXRlY3Qgd2hldGhlciBhbnkgdmFsdWUgaGFzIGNoYW5nZWQuIElmIGl0IGhhcywgd2UgYW5pbWF0ZSBpdC5cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0tleWZyYW1lc1RhcmdldChuZXh0KSAmJiBpc0tleWZyYW1lc1RhcmdldChwcmV2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzaGFsbG93Q29tcGFyZShuZXh0LCBwcmV2KSB8fCB2YXJpYW50RGlkQ2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya1RvQW5pbWF0ZShrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogSWYgaXQgaGFzbid0IGNoYW5nZWQsIHdlIHdhbnQgdG8gZW5zdXJlIGl0IGRvZXNuJ3QgYW5pbWF0ZSBieVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFkZGluZyBpdCB0byB0aGUgbGlzdCBvZiBwcm90ZWN0ZWQga2V5cy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlU3RhdGUucHJvdGVjdGVkS2V5c1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5leHQgaXMgZGVmaW5lZCBhbmQgZG9lc24ndCBlcXVhbCBwcmV2LCBpdCBuZWVkcyBhbmltYXRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtUb0FuaW1hdGUoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgdW5kZWZpbmVkLCBpdCdzIGJlZW4gcmVtb3ZlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWRLZXlzLmFkZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5leHQgIT09IHVuZGVmaW5lZCAmJiByZW1vdmVkS2V5cy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogSWYgbmV4dCBoYXNuJ3QgY2hhbmdlZCBhbmQgaXQgaXNuJ3QgdW5kZWZpbmVkLCB3ZSB3YW50IHRvIGNoZWNrIGlmIGl0J3NcbiAgICAgICAgICAgICAgICAgICAgICogYmVlbiByZW1vdmVkIGJ5IGEgaGlnaGVyIHByaW9yaXR5XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBtYXJrVG9BbmltYXRlKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogSWYgaXQgaGFzbid0IGNoYW5nZWQsIHdlIGFkZCBpdCB0byB0aGUgbGlzdCBvZiBwcm90ZWN0ZWQgdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAqIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGdldCBhbmltYXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIHR5cGVTdGF0ZS5wcm90ZWN0ZWRLZXlzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVXBkYXRlIHRoZSB0eXBlU3RhdGUgc28gbmV4dCB0aW1lIGFuaW1hdGVDaGFuZ2VzIGlzIGNhbGxlZCB3ZSBjYW4gY29tcGFyZSB0aGVcbiAgICAgICAgICAgICAqIGxhdGVzdCBwcm9wIGFuZCByZXNvbHZlZFZhbHVlcyB0byB0aGVzZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdHlwZVN0YXRlLnByZXZQcm9wID0gcHJvcDtcbiAgICAgICAgICAgIHR5cGVTdGF0ZS5wcmV2UmVzb2x2ZWRWYWx1ZXMgPSByZXNvbHZlZFZhbHVlcztcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKHR5cGVTdGF0ZS5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgICAgIGVuY291bnRlcmVkS2V5cyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBlbmNvdW50ZXJlZEtleXMpLCByZXNvbHZlZFZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNJbml0aWFsUmVuZGVyICYmIHZpc3VhbEVsZW1lbnQuYmxvY2tJbml0aWFsQW5pbWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgc2hvdWxkQW5pbWF0ZVR5cGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgdGhpcyBpcyBhbiBpbmhlcml0ZWQgcHJvcCB3ZSB3YW50IHRvIGhhcmQtYmxvY2sgYW5pbWF0aW9uc1xuICAgICAgICAgICAgICogVE9ETzogVGVzdCBhcyB0aGlzIHNob3VsZCBwcm9iYWJseSBzdGlsbCBoYW5kbGUgYW5pbWF0aW9ucyB0cmlnZ2VyZWRcbiAgICAgICAgICAgICAqIGJ5IHJlbW92ZWQgdmFsdWVzP1xuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoc2hvdWxkQW5pbWF0ZVR5cGUgJiYgIWlzSW5oZXJpdGVkKSB7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9ucy5wdXNoLmFwcGx5KGFuaW1hdGlvbnMsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChkZWZpbml0aW9uTGlzdC5tYXAoZnVuY3Rpb24gKGFuaW1hdGlvbikgeyByZXR1cm4gKHtcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBhbmltYXRpb24sXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IF9fYXNzaWduKHsgdHlwZTogdHlwZSB9LCBvcHRpb25zKSxcbiAgICAgICAgICAgICAgICB9KTsgfSkpLCBmYWxzZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogSXRlcmF0ZSB0aHJvdWdoIGFsbCBhbmltYXRpb24gdHlwZXMgaW4gcmV2ZXJzZSBwcmlvcml0eSBvcmRlci4gRm9yIGVhY2gsIHdlIHdhbnQgdG9cbiAgICAgICAgICogZGV0ZWN0IHdoaWNoIHZhbHVlcyBpdCdzIGhhbmRsaW5nIGFuZCB3aGV0aGVyIG9yIG5vdCB0aGV5J3ZlIGNoYW5nZWQgKGFuZCB0aGVyZWZvcmVcbiAgICAgICAgICogbmVlZCB0byBiZSBhbmltYXRlZCkuIElmIGFueSB2YWx1ZXMgaGF2ZSBiZWVuIHJlbW92ZWQsIHdlIHdhbnQgdG8gZGV0ZWN0IHRob3NlIGluXG4gICAgICAgICAqIGxvd2VyIHByaW9yaXR5IHByb3BzIGFuZCBmbGFnIGZvciBhbmltYXRpb24uXG4gICAgICAgICAqL1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUFuaW1hdGlvblR5cGVzOyBpKyspIHtcbiAgICAgICAgICAgIF9sb29wXzEoaSk7XG4gICAgICAgIH1cbiAgICAgICAgYWxsQW5pbWF0ZWRLZXlzID0gX19hc3NpZ24oe30sIGVuY291bnRlcmVkS2V5cyk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiB0aGVyZSBhcmUgc29tZSByZW1vdmVkIHZhbHVlIHRoYXQgaGF2ZW4ndCBiZWVuIGRlYWx0IHdpdGgsXG4gICAgICAgICAqIHdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IGFuaW1hdGlvbiB0aGF0IGZhbGxzIGJhY2sgZWl0aGVyIHRvIHRoZSB2YWx1ZVxuICAgICAgICAgKiBkZWZpbmVkIGluIHRoZSBzdHlsZSBwcm9wLCBvciB0aGUgbGFzdCByZWFkIHZhbHVlLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHJlbW92ZWRLZXlzLnNpemUpIHtcbiAgICAgICAgICAgIHZhciBmYWxsYmFja0FuaW1hdGlvbl8xID0ge307XG4gICAgICAgICAgICByZW1vdmVkS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICB2YXIgZmFsbGJhY2tUYXJnZXQgPSB2aXN1YWxFbGVtZW50LmdldEJhc2VUYXJnZXQoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoZmFsbGJhY2tUYXJnZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBmYWxsYmFja0FuaW1hdGlvbl8xW2tleV0gPSBmYWxsYmFja1RhcmdldDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFuaW1hdGlvbnMucHVzaCh7IGFuaW1hdGlvbjogZmFsbGJhY2tBbmltYXRpb25fMSB9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc2hvdWxkQW5pbWF0ZSA9IEJvb2xlYW4oYW5pbWF0aW9ucy5sZW5ndGgpO1xuICAgICAgICBpZiAoaXNJbml0aWFsUmVuZGVyICYmXG4gICAgICAgICAgICBwcm9wcy5pbml0aWFsID09PSBmYWxzZSAmJlxuICAgICAgICAgICAgIXZpc3VhbEVsZW1lbnQubWFudWFsbHlBbmltYXRlT25Nb3VudCkge1xuICAgICAgICAgICAgc2hvdWxkQW5pbWF0ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlzSW5pdGlhbFJlbmRlciA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gc2hvdWxkQW5pbWF0ZSA/IGFuaW1hdGUoYW5pbWF0aW9ucykgOiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHdoZXRoZXIgYSBjZXJ0YWluIGFuaW1hdGlvbiB0eXBlIGlzIGFjdGl2ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzZXRBY3RpdmUodHlwZSwgaXNBY3RpdmUsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICAvLyBJZiB0aGUgYWN0aXZlIHN0YXRlIGhhc24ndCBjaGFuZ2VkLCB3ZSBjYW4gc2FmZWx5IGRvIG5vdGhpbmcgaGVyZVxuICAgICAgICBpZiAoc3RhdGVbdHlwZV0uaXNBY3RpdmUgPT09IGlzQWN0aXZlKVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAvLyBQcm9wYWdhdGUgYWN0aXZlIGNoYW5nZSB0byBjaGlsZHJlblxuICAgICAgICAoX2EgPSB2aXN1YWxFbGVtZW50LnZhcmlhbnRDaGlsZHJlbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7IHZhciBfYTsgcmV0dXJuIChfYSA9IGNoaWxkLmFuaW1hdGlvblN0YXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2V0QWN0aXZlKHR5cGUsIGlzQWN0aXZlKTsgfSk7XG4gICAgICAgIHN0YXRlW3R5cGVdLmlzQWN0aXZlID0gaXNBY3RpdmU7XG4gICAgICAgIHZhciBhbmltYXRpb25zID0gYW5pbWF0ZUNoYW5nZXMob3B0aW9ucywgdHlwZSk7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBzdGF0ZSkge1xuICAgICAgICAgICAgc3RhdGVba2V5XS5wcm90ZWN0ZWRLZXlzID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFuaW1hdGlvbnM7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGlzQW5pbWF0ZWQ6IGlzQW5pbWF0ZWQsXG4gICAgICAgIGFuaW1hdGVDaGFuZ2VzOiBhbmltYXRlQ2hhbmdlcyxcbiAgICAgICAgc2V0QWN0aXZlOiBzZXRBY3RpdmUsXG4gICAgICAgIHNldEFuaW1hdGVGdW5jdGlvbjogc2V0QW5pbWF0ZUZ1bmN0aW9uLFxuICAgICAgICBnZXRTdGF0ZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RhdGU7IH0sXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNoZWNrVmFyaWFudHNEaWRDaGFuZ2UocHJldiwgbmV4dCkge1xuICAgIGlmICh0eXBlb2YgbmV4dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gbmV4dCAhPT0gcHJldjtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNWYXJpYW50TGFiZWxzKG5leHQpKSB7XG4gICAgICAgIHJldHVybiAhc2hhbGxvd0NvbXBhcmUobmV4dCwgcHJldik7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVR5cGVTdGF0ZShpc0FjdGl2ZSkge1xuICAgIGlmIChpc0FjdGl2ZSA9PT0gdm9pZCAwKSB7IGlzQWN0aXZlID0gZmFsc2U7IH1cbiAgICByZXR1cm4ge1xuICAgICAgICBpc0FjdGl2ZTogaXNBY3RpdmUsXG4gICAgICAgIHByb3RlY3RlZEtleXM6IHt9LFxuICAgICAgICBuZWVkc0FuaW1hdGluZzoge30sXG4gICAgICAgIHByZXZSZXNvbHZlZFZhbHVlczoge30sXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVN0YXRlKCkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gX2EgPSB7fSxcbiAgICAgICAgX2FbQW5pbWF0aW9uVHlwZS5BbmltYXRlXSA9IGNyZWF0ZVR5cGVTdGF0ZSh0cnVlKSxcbiAgICAgICAgX2FbQW5pbWF0aW9uVHlwZS5JblZpZXddID0gY3JlYXRlVHlwZVN0YXRlKCksXG4gICAgICAgIF9hW0FuaW1hdGlvblR5cGUuSG92ZXJdID0gY3JlYXRlVHlwZVN0YXRlKCksXG4gICAgICAgIF9hW0FuaW1hdGlvblR5cGUuVGFwXSA9IGNyZWF0ZVR5cGVTdGF0ZSgpLFxuICAgICAgICBfYVtBbmltYXRpb25UeXBlLkRyYWddID0gY3JlYXRlVHlwZVN0YXRlKCksXG4gICAgICAgIF9hW0FuaW1hdGlvblR5cGUuRm9jdXNdID0gY3JlYXRlVHlwZVN0YXRlKCksXG4gICAgICAgIF9hW0FuaW1hdGlvblR5cGUuRXhpdF0gPSBjcmVhdGVUeXBlU3RhdGUoKSxcbiAgICAgICAgX2E7XG59XG5cbmV4cG9ydCB7IGNoZWNrVmFyaWFudHNEaWRDaGFuZ2UsIGNyZWF0ZUFuaW1hdGlvblN0YXRlLCB2YXJpYW50UHJpb3JpdHlPcmRlciB9O1xuIiwiaW1wb3J0IHsgX19yZWFkIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNBbmltYXRpb25Db250cm9scyB9IGZyb20gJy4uLy4uL2FuaW1hdGlvbi91dGlscy9pcy1hbmltYXRpb24tY29udHJvbHMubWpzJztcbmltcG9ydCB7IHVzZVByZXNlbmNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9BbmltYXRlUHJlc2VuY2UvdXNlLXByZXNlbmNlLm1qcyc7XG5pbXBvcnQgeyBQcmVzZW5jZUNvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L1ByZXNlbmNlQ29udGV4dC5tanMnO1xuaW1wb3J0IHsgY3JlYXRlQW5pbWF0aW9uU3RhdGUgfSBmcm9tICcuLi8uLi9yZW5kZXIvdXRpbHMvYW5pbWF0aW9uLXN0YXRlLm1qcyc7XG5pbXBvcnQgeyBBbmltYXRpb25UeXBlIH0gZnJvbSAnLi4vLi4vcmVuZGVyL3V0aWxzL3R5cGVzLm1qcyc7XG5pbXBvcnQgeyBtYWtlUmVuZGVybGVzc0NvbXBvbmVudCB9IGZyb20gJy4uL3V0aWxzL21ha2UtcmVuZGVybGVzcy1jb21wb25lbnQubWpzJztcblxudmFyIGFuaW1hdGlvbnMgPSB7XG4gICAgYW5pbWF0aW9uOiBtYWtlUmVuZGVybGVzc0NvbXBvbmVudChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIHZpc3VhbEVsZW1lbnQgPSBfYS52aXN1YWxFbGVtZW50LCBhbmltYXRlID0gX2EuYW5pbWF0ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdlIGR5bmFtaWNhbGx5IGdlbmVyYXRlIHRoZSBBbmltYXRpb25TdGF0ZSBtYW5hZ2VyIGFzIGl0IGNvbnRhaW5zIGEgcmVmZXJlbmNlXG4gICAgICAgICAqIHRvIHRoZSB1bmRlcmx5aW5nIGFuaW1hdGlvbiBsaWJyYXJ5LiBXZSBvbmx5IHdhbnQgdG8gbG9hZCB0aGF0IGlmIHdlIGxvYWQgdGhpcyxcbiAgICAgICAgICogc28gcGVvcGxlIGNhbiBvcHRpb25hbGx5IGNvZGUgc3BsaXQgaXQgb3V0IHVzaW5nIHRoZSBgbWAgY29tcG9uZW50LlxuICAgICAgICAgKi9cbiAgICAgICAgdmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSB8fCAodmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSA9IGNyZWF0ZUFuaW1hdGlvblN0YXRlKHZpc3VhbEVsZW1lbnQpKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN1YnNjcmliZSBhbnkgcHJvdmlkZWQgQW5pbWF0aW9uQ29udHJvbHMgdG8gdGhlIGNvbXBvbmVudCdzIFZpc3VhbEVsZW1lbnRcbiAgICAgICAgICovXG4gICAgICAgIGlmIChpc0FuaW1hdGlvbkNvbnRyb2xzKGFuaW1hdGUpKSB7XG4gICAgICAgICAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkgeyByZXR1cm4gYW5pbWF0ZS5zdWJzY3JpYmUodmlzdWFsRWxlbWVudCk7IH0sIFthbmltYXRlXSk7XG4gICAgICAgIH1cbiAgICB9KSxcbiAgICBleGl0OiBtYWtlUmVuZGVybGVzc0NvbXBvbmVudChmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGN1c3RvbSA9IHByb3BzLmN1c3RvbSwgdmlzdWFsRWxlbWVudCA9IHByb3BzLnZpc3VhbEVsZW1lbnQ7XG4gICAgICAgIHZhciBfYSA9IF9fcmVhZCh1c2VQcmVzZW5jZSgpLCAyKSwgaXNQcmVzZW50ID0gX2FbMF0sIHNhZmVUb1JlbW92ZSA9IF9hWzFdO1xuICAgICAgICB2YXIgcHJlc2VuY2VDb250ZXh0ID0gdXNlQ29udGV4dChQcmVzZW5jZUNvbnRleHQpO1xuICAgICAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIHZpc3VhbEVsZW1lbnQuaXNQcmVzZW50ID0gaXNQcmVzZW50O1xuICAgICAgICAgICAgdmFyIGFuaW1hdGlvbiA9IChfYSA9IHZpc3VhbEVsZW1lbnQuYW5pbWF0aW9uU3RhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZXRBY3RpdmUoQW5pbWF0aW9uVHlwZS5FeGl0LCAhaXNQcmVzZW50LCB7IGN1c3RvbTogKF9iID0gcHJlc2VuY2VDb250ZXh0ID09PSBudWxsIHx8IHByZXNlbmNlQ29udGV4dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJlc2VuY2VDb250ZXh0LmN1c3RvbSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogY3VzdG9tIH0pO1xuICAgICAgICAgICAgIWlzUHJlc2VudCAmJiAoYW5pbWF0aW9uID09PSBudWxsIHx8IGFuaW1hdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogYW5pbWF0aW9uLnRoZW4oc2FmZVRvUmVtb3ZlKSk7XG4gICAgICAgIH0sIFtpc1ByZXNlbnRdKTtcbiAgICB9KSxcbn07XG5cbmV4cG9ydCB7IGFuaW1hdGlvbnMgfTtcbiIsImNvbnN0IGlzUG9pbnQgPSAocG9pbnQpID0+IHBvaW50Lmhhc093blByb3BlcnR5KCd4JykgJiYgcG9pbnQuaGFzT3duUHJvcGVydHkoJ3knKTtcblxuZXhwb3J0IHsgaXNQb2ludCB9O1xuIiwiaW1wb3J0IHsgaXNQb2ludCB9IGZyb20gJy4vaXMtcG9pbnQubWpzJztcblxuY29uc3QgaXNQb2ludDNEID0gKHBvaW50KSA9PiBpc1BvaW50KHBvaW50KSAmJiBwb2ludC5oYXNPd25Qcm9wZXJ0eSgneicpO1xuXG5leHBvcnQgeyBpc1BvaW50M0QgfTtcbiIsImltcG9ydCB7IGlzUG9pbnQgfSBmcm9tICcuL2lzLXBvaW50Lm1qcyc7XG5pbXBvcnQgeyBpc1BvaW50M0QgfSBmcm9tICcuL2lzLXBvaW50LTNkLm1qcyc7XG5pbXBvcnQgeyBpc051bSB9IGZyb20gJy4vaW5jLm1qcyc7XG5cbmNvbnN0IGRpc3RhbmNlMUQgPSAoYSwgYikgPT4gTWF0aC5hYnMoYSAtIGIpO1xuZnVuY3Rpb24gZGlzdGFuY2UoYSwgYikge1xuICAgIGlmIChpc051bShhKSAmJiBpc051bShiKSkge1xuICAgICAgICByZXR1cm4gZGlzdGFuY2UxRChhLCBiKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNQb2ludChhKSAmJiBpc1BvaW50KGIpKSB7XG4gICAgICAgIGNvbnN0IHhEZWx0YSA9IGRpc3RhbmNlMUQoYS54LCBiLngpO1xuICAgICAgICBjb25zdCB5RGVsdGEgPSBkaXN0YW5jZTFEKGEueSwgYi55KTtcbiAgICAgICAgY29uc3QgekRlbHRhID0gaXNQb2ludDNEKGEpICYmIGlzUG9pbnQzRChiKSA/IGRpc3RhbmNlMUQoYS56LCBiLnopIDogMDtcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyh4RGVsdGEsIDIpICsgTWF0aC5wb3coeURlbHRhLCAyKSArIE1hdGgucG93KHpEZWx0YSwgMikpO1xuICAgIH1cbn1cblxuZXhwb3J0IHsgZGlzdGFuY2UgfTtcbiIsImltcG9ydCB7IF9fYXNzaWduIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgaXNNb3VzZUV2ZW50LCBpc1RvdWNoRXZlbnQgfSBmcm9tICcuL3V0aWxzL2V2ZW50LXR5cGUubWpzJztcbmltcG9ydCB7IGV4dHJhY3RFdmVudEluZm8gfSBmcm9tICcuLi9ldmVudHMvZXZlbnQtaW5mby5tanMnO1xuaW1wb3J0IHN5bmMsIHsgZ2V0RnJhbWVEYXRhLCBjYW5jZWxTeW5jIH0gZnJvbSAnZnJhbWVzeW5jJztcbmltcG9ydCB7IHNlY29uZHNUb01pbGxpc2Vjb25kcyB9IGZyb20gJy4uL3V0aWxzL3RpbWUtY29udmVyc2lvbi5tanMnO1xuaW1wb3J0IHsgYWRkUG9pbnRlckV2ZW50IH0gZnJvbSAnLi4vZXZlbnRzL3VzZS1wb2ludGVyLWV2ZW50Lm1qcyc7XG5pbXBvcnQgeyBkaXN0YW5jZSwgcGlwZSB9IGZyb20gJ3BvcG1vdGlvbic7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbnZhciBQYW5TZXNzaW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFBhblNlc3Npb24oZXZlbnQsIGhhbmRsZXJzLCBfYSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgX2IgPSBfYSA9PT0gdm9pZCAwID8ge30gOiBfYSwgdHJhbnNmb3JtUGFnZVBvaW50ID0gX2IudHJhbnNmb3JtUGFnZVBvaW50O1xuICAgICAgICAvKipcbiAgICAgICAgICogQGludGVybmFsXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnN0YXJ0RXZlbnQgPSBudWxsO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGludGVybmFsXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmxhc3RNb3ZlRXZlbnQgPSBudWxsO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGludGVybmFsXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmxhc3RNb3ZlRXZlbnRJbmZvID0gbnVsbDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBpbnRlcm5hbFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgICAgICB0aGlzLnVwZGF0ZVBvaW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCEoX3RoaXMubGFzdE1vdmVFdmVudCAmJiBfdGhpcy5sYXN0TW92ZUV2ZW50SW5mbykpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGluZm8gPSBnZXRQYW5JbmZvKF90aGlzLmxhc3RNb3ZlRXZlbnRJbmZvLCBfdGhpcy5oaXN0b3J5KTtcbiAgICAgICAgICAgIHZhciBpc1BhblN0YXJ0ZWQgPSBfdGhpcy5zdGFydEV2ZW50ICE9PSBudWxsO1xuICAgICAgICAgICAgLy8gT25seSBzdGFydCBwYW5uaW5nIGlmIHRoZSBvZmZzZXQgaXMgbGFyZ2VyIHRoYW4gMyBwaXhlbHMuIElmIHdlIG1ha2UgaXRcbiAgICAgICAgICAgIC8vIGFueSBsYXJnZXIgdGhhbiB0aGlzIHdlJ2xsIHdhbnQgdG8gcmVzZXQgdGhlIHBvaW50ZXIgaGlzdG9yeVxuICAgICAgICAgICAgLy8gb24gdGhlIGZpcnN0IHVwZGF0ZSB0byBhdm9pZCB2aXN1YWwgc25hcHBpbmcgdG8gdGhlIGN1cnNvZS5cbiAgICAgICAgICAgIHZhciBpc0Rpc3RhbmNlUGFzdFRocmVzaG9sZCA9IGRpc3RhbmNlKGluZm8ub2Zmc2V0LCB7IHg6IDAsIHk6IDAgfSkgPj0gMztcbiAgICAgICAgICAgIGlmICghaXNQYW5TdGFydGVkICYmICFpc0Rpc3RhbmNlUGFzdFRocmVzaG9sZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgcG9pbnQgPSBpbmZvLnBvaW50O1xuICAgICAgICAgICAgdmFyIHRpbWVzdGFtcCA9IGdldEZyYW1lRGF0YSgpLnRpbWVzdGFtcDtcbiAgICAgICAgICAgIF90aGlzLmhpc3RvcnkucHVzaChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcG9pbnQpLCB7IHRpbWVzdGFtcDogdGltZXN0YW1wIH0pKTtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLmhhbmRsZXJzLCBvblN0YXJ0ID0gX2Eub25TdGFydCwgb25Nb3ZlID0gX2Eub25Nb3ZlO1xuICAgICAgICAgICAgaWYgKCFpc1BhblN0YXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICBvblN0YXJ0ICYmIG9uU3RhcnQoX3RoaXMubGFzdE1vdmVFdmVudCwgaW5mbyk7XG4gICAgICAgICAgICAgICAgX3RoaXMuc3RhcnRFdmVudCA9IF90aGlzLmxhc3RNb3ZlRXZlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbk1vdmUgJiYgb25Nb3ZlKF90aGlzLmxhc3RNb3ZlRXZlbnQsIGluZm8pO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJNb3ZlID0gZnVuY3Rpb24gKGV2ZW50LCBpbmZvKSB7XG4gICAgICAgICAgICBfdGhpcy5sYXN0TW92ZUV2ZW50ID0gZXZlbnQ7XG4gICAgICAgICAgICBfdGhpcy5sYXN0TW92ZUV2ZW50SW5mbyA9IHRyYW5zZm9ybVBvaW50KGluZm8sIF90aGlzLnRyYW5zZm9ybVBhZ2VQb2ludCk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIFNhZmFyaSBkb2Vzbid0IHRyaWdnZXIgbW91c2V1cCBldmVudHMgd2hlbiBpdCdzIGFib3ZlIGEgYDxzZWxlY3Q+YFxuICAgICAgICAgICAgaWYgKGlzTW91c2VFdmVudChldmVudCkgJiYgZXZlbnQuYnV0dG9ucyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmhhbmRsZVBvaW50ZXJVcChldmVudCwgaW5mbyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVGhyb3R0bGUgbW91c2UgbW92ZSBldmVudCB0byBvbmNlIHBlciBmcmFtZVxuICAgICAgICAgICAgc3luYy51cGRhdGUoX3RoaXMudXBkYXRlUG9pbnQsIHRydWUpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJVcCA9IGZ1bmN0aW9uIChldmVudCwgaW5mbykge1xuICAgICAgICAgICAgX3RoaXMuZW5kKCk7XG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcy5oYW5kbGVycywgb25FbmQgPSBfYS5vbkVuZCwgb25TZXNzaW9uRW5kID0gX2Eub25TZXNzaW9uRW5kO1xuICAgICAgICAgICAgdmFyIHBhbkluZm8gPSBnZXRQYW5JbmZvKHRyYW5zZm9ybVBvaW50KGluZm8sIF90aGlzLnRyYW5zZm9ybVBhZ2VQb2ludCksIF90aGlzLmhpc3RvcnkpO1xuICAgICAgICAgICAgaWYgKF90aGlzLnN0YXJ0RXZlbnQgJiYgb25FbmQpIHtcbiAgICAgICAgICAgICAgICBvbkVuZChldmVudCwgcGFuSW5mbyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvblNlc3Npb25FbmQgJiYgb25TZXNzaW9uRW5kKGV2ZW50LCBwYW5JbmZvKTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gSWYgd2UgaGF2ZSBtb3JlIHRoYW4gb25lIHRvdWNoLCBkb24ndCBzdGFydCBkZXRlY3RpbmcgdGhpcyBnZXN0dXJlXG4gICAgICAgIGlmIChpc1RvdWNoRXZlbnQoZXZlbnQpICYmIGV2ZW50LnRvdWNoZXMubGVuZ3RoID4gMSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5oYW5kbGVycyA9IGhhbmRsZXJzO1xuICAgICAgICB0aGlzLnRyYW5zZm9ybVBhZ2VQb2ludCA9IHRyYW5zZm9ybVBhZ2VQb2ludDtcbiAgICAgICAgdmFyIGluZm8gPSBleHRyYWN0RXZlbnRJbmZvKGV2ZW50KTtcbiAgICAgICAgdmFyIGluaXRpYWxJbmZvID0gdHJhbnNmb3JtUG9pbnQoaW5mbywgdGhpcy50cmFuc2Zvcm1QYWdlUG9pbnQpO1xuICAgICAgICB2YXIgcG9pbnQgPSBpbml0aWFsSW5mby5wb2ludDtcbiAgICAgICAgdmFyIHRpbWVzdGFtcCA9IGdldEZyYW1lRGF0YSgpLnRpbWVzdGFtcDtcbiAgICAgICAgdGhpcy5oaXN0b3J5ID0gW19fYXNzaWduKF9fYXNzaWduKHt9LCBwb2ludCksIHsgdGltZXN0YW1wOiB0aW1lc3RhbXAgfSldO1xuICAgICAgICB2YXIgb25TZXNzaW9uU3RhcnQgPSBoYW5kbGVycy5vblNlc3Npb25TdGFydDtcbiAgICAgICAgb25TZXNzaW9uU3RhcnQgJiZcbiAgICAgICAgICAgIG9uU2Vzc2lvblN0YXJ0KGV2ZW50LCBnZXRQYW5JbmZvKGluaXRpYWxJbmZvLCB0aGlzLmhpc3RvcnkpKTtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcnMgPSBwaXBlKGFkZFBvaW50ZXJFdmVudCh3aW5kb3csIFwicG9pbnRlcm1vdmVcIiwgdGhpcy5oYW5kbGVQb2ludGVyTW92ZSksIGFkZFBvaW50ZXJFdmVudCh3aW5kb3csIFwicG9pbnRlcnVwXCIsIHRoaXMuaGFuZGxlUG9pbnRlclVwKSwgYWRkUG9pbnRlckV2ZW50KHdpbmRvdywgXCJwb2ludGVyY2FuY2VsXCIsIHRoaXMuaGFuZGxlUG9pbnRlclVwKSk7XG4gICAgfVxuICAgIFBhblNlc3Npb24ucHJvdG90eXBlLnVwZGF0ZUhhbmRsZXJzID0gZnVuY3Rpb24gKGhhbmRsZXJzKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSBoYW5kbGVycztcbiAgICB9O1xuICAgIFBhblNlc3Npb24ucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcnMgJiYgdGhpcy5yZW1vdmVMaXN0ZW5lcnMoKTtcbiAgICAgICAgY2FuY2VsU3luYy51cGRhdGUodGhpcy51cGRhdGVQb2ludCk7XG4gICAgfTtcbiAgICByZXR1cm4gUGFuU2Vzc2lvbjtcbn0oKSk7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Qb2ludChpbmZvLCB0cmFuc2Zvcm1QYWdlUG9pbnQpIHtcbiAgICByZXR1cm4gdHJhbnNmb3JtUGFnZVBvaW50ID8geyBwb2ludDogdHJhbnNmb3JtUGFnZVBvaW50KGluZm8ucG9pbnQpIH0gOiBpbmZvO1xufVxuZnVuY3Rpb24gc3VidHJhY3RQb2ludChhLCBiKSB7XG4gICAgcmV0dXJuIHsgeDogYS54IC0gYi54LCB5OiBhLnkgLSBiLnkgfTtcbn1cbmZ1bmN0aW9uIGdldFBhbkluZm8oX2EsIGhpc3RvcnkpIHtcbiAgICB2YXIgcG9pbnQgPSBfYS5wb2ludDtcbiAgICByZXR1cm4ge1xuICAgICAgICBwb2ludDogcG9pbnQsXG4gICAgICAgIGRlbHRhOiBzdWJ0cmFjdFBvaW50KHBvaW50LCBsYXN0RGV2aWNlUG9pbnQoaGlzdG9yeSkpLFxuICAgICAgICBvZmZzZXQ6IHN1YnRyYWN0UG9pbnQocG9pbnQsIHN0YXJ0RGV2aWNlUG9pbnQoaGlzdG9yeSkpLFxuICAgICAgICB2ZWxvY2l0eTogZ2V0VmVsb2NpdHkoaGlzdG9yeSwgMC4xKSxcbiAgICB9O1xufVxuZnVuY3Rpb24gc3RhcnREZXZpY2VQb2ludChoaXN0b3J5KSB7XG4gICAgcmV0dXJuIGhpc3RvcnlbMF07XG59XG5mdW5jdGlvbiBsYXN0RGV2aWNlUG9pbnQoaGlzdG9yeSkge1xuICAgIHJldHVybiBoaXN0b3J5W2hpc3RvcnkubGVuZ3RoIC0gMV07XG59XG5mdW5jdGlvbiBnZXRWZWxvY2l0eShoaXN0b3J5LCB0aW1lRGVsdGEpIHtcbiAgICBpZiAoaGlzdG9yeS5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiB7IHg6IDAsIHk6IDAgfTtcbiAgICB9XG4gICAgdmFyIGkgPSBoaXN0b3J5Lmxlbmd0aCAtIDE7XG4gICAgdmFyIHRpbWVzdGFtcGVkUG9pbnQgPSBudWxsO1xuICAgIHZhciBsYXN0UG9pbnQgPSBsYXN0RGV2aWNlUG9pbnQoaGlzdG9yeSk7XG4gICAgd2hpbGUgKGkgPj0gMCkge1xuICAgICAgICB0aW1lc3RhbXBlZFBvaW50ID0gaGlzdG9yeVtpXTtcbiAgICAgICAgaWYgKGxhc3RQb2ludC50aW1lc3RhbXAgLSB0aW1lc3RhbXBlZFBvaW50LnRpbWVzdGFtcCA+XG4gICAgICAgICAgICBzZWNvbmRzVG9NaWxsaXNlY29uZHModGltZURlbHRhKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaS0tO1xuICAgIH1cbiAgICBpZiAoIXRpbWVzdGFtcGVkUG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIHsgeDogMCwgeTogMCB9O1xuICAgIH1cbiAgICB2YXIgdGltZSA9IChsYXN0UG9pbnQudGltZXN0YW1wIC0gdGltZXN0YW1wZWRQb2ludC50aW1lc3RhbXApIC8gMTAwMDtcbiAgICBpZiAodGltZSA9PT0gMCkge1xuICAgICAgICByZXR1cm4geyB4OiAwLCB5OiAwIH07XG4gICAgfVxuICAgIHZhciBjdXJyZW50VmVsb2NpdHkgPSB7XG4gICAgICAgIHg6IChsYXN0UG9pbnQueCAtIHRpbWVzdGFtcGVkUG9pbnQueCkgLyB0aW1lLFxuICAgICAgICB5OiAobGFzdFBvaW50LnkgLSB0aW1lc3RhbXBlZFBvaW50LnkpIC8gdGltZSxcbiAgICB9O1xuICAgIGlmIChjdXJyZW50VmVsb2NpdHkueCA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgY3VycmVudFZlbG9jaXR5LnggPSAwO1xuICAgIH1cbiAgICBpZiAoY3VycmVudFZlbG9jaXR5LnkgPT09IEluZmluaXR5KSB7XG4gICAgICAgIGN1cnJlbnRWZWxvY2l0eS55ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRWZWxvY2l0eTtcbn1cblxuZXhwb3J0IHsgUGFuU2Vzc2lvbiB9O1xuIiwiaW1wb3J0IHsgbWl4LCBkaXN0YW5jZSB9IGZyb20gJ3BvcG1vdGlvbic7XG5cbmZ1bmN0aW9uIGNhbGNMZW5ndGgoYXhpcykge1xuICAgIHJldHVybiBheGlzLm1heCAtIGF4aXMubWluO1xufVxuZnVuY3Rpb24gaXNOZWFyKHZhbHVlLCB0YXJnZXQsIG1heERpc3RhbmNlKSB7XG4gICAgaWYgKHRhcmdldCA9PT0gdm9pZCAwKSB7IHRhcmdldCA9IDA7IH1cbiAgICBpZiAobWF4RGlzdGFuY2UgPT09IHZvaWQgMCkgeyBtYXhEaXN0YW5jZSA9IDAuMDE7IH1cbiAgICByZXR1cm4gZGlzdGFuY2UodmFsdWUsIHRhcmdldCkgPCBtYXhEaXN0YW5jZTtcbn1cbmZ1bmN0aW9uIGNhbGNBeGlzRGVsdGEoZGVsdGEsIHNvdXJjZSwgdGFyZ2V0LCBvcmlnaW4pIHtcbiAgICBpZiAob3JpZ2luID09PSB2b2lkIDApIHsgb3JpZ2luID0gMC41OyB9XG4gICAgZGVsdGEub3JpZ2luID0gb3JpZ2luO1xuICAgIGRlbHRhLm9yaWdpblBvaW50ID0gbWl4KHNvdXJjZS5taW4sIHNvdXJjZS5tYXgsIGRlbHRhLm9yaWdpbik7XG4gICAgZGVsdGEuc2NhbGUgPSBjYWxjTGVuZ3RoKHRhcmdldCkgLyBjYWxjTGVuZ3RoKHNvdXJjZSk7XG4gICAgaWYgKGlzTmVhcihkZWx0YS5zY2FsZSwgMSwgMC4wMDAxKSB8fCBpc05hTihkZWx0YS5zY2FsZSkpXG4gICAgICAgIGRlbHRhLnNjYWxlID0gMTtcbiAgICBkZWx0YS50cmFuc2xhdGUgPVxuICAgICAgICBtaXgodGFyZ2V0Lm1pbiwgdGFyZ2V0Lm1heCwgZGVsdGEub3JpZ2luKSAtIGRlbHRhLm9yaWdpblBvaW50O1xuICAgIGlmIChpc05lYXIoZGVsdGEudHJhbnNsYXRlKSB8fCBpc05hTihkZWx0YS50cmFuc2xhdGUpKVxuICAgICAgICBkZWx0YS50cmFuc2xhdGUgPSAwO1xufVxuZnVuY3Rpb24gY2FsY0JveERlbHRhKGRlbHRhLCBzb3VyY2UsIHRhcmdldCwgb3JpZ2luKSB7XG4gICAgY2FsY0F4aXNEZWx0YShkZWx0YS54LCBzb3VyY2UueCwgdGFyZ2V0LngsIG9yaWdpbiA9PT0gbnVsbCB8fCBvcmlnaW4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9yaWdpbi5vcmlnaW5YKTtcbiAgICBjYWxjQXhpc0RlbHRhKGRlbHRhLnksIHNvdXJjZS55LCB0YXJnZXQueSwgb3JpZ2luID09PSBudWxsIHx8IG9yaWdpbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3JpZ2luLm9yaWdpblkpO1xufVxuZnVuY3Rpb24gY2FsY1JlbGF0aXZlQXhpcyh0YXJnZXQsIHJlbGF0aXZlLCBwYXJlbnQpIHtcbiAgICB0YXJnZXQubWluID0gcGFyZW50Lm1pbiArIHJlbGF0aXZlLm1pbjtcbiAgICB0YXJnZXQubWF4ID0gdGFyZ2V0Lm1pbiArIGNhbGNMZW5ndGgocmVsYXRpdmUpO1xufVxuZnVuY3Rpb24gY2FsY1JlbGF0aXZlQm94KHRhcmdldCwgcmVsYXRpdmUsIHBhcmVudCkge1xuICAgIGNhbGNSZWxhdGl2ZUF4aXModGFyZ2V0LngsIHJlbGF0aXZlLngsIHBhcmVudC54KTtcbiAgICBjYWxjUmVsYXRpdmVBeGlzKHRhcmdldC55LCByZWxhdGl2ZS55LCBwYXJlbnQueSk7XG59XG5mdW5jdGlvbiBjYWxjUmVsYXRpdmVBeGlzUG9zaXRpb24odGFyZ2V0LCBsYXlvdXQsIHBhcmVudCkge1xuICAgIHRhcmdldC5taW4gPSBsYXlvdXQubWluIC0gcGFyZW50Lm1pbjtcbiAgICB0YXJnZXQubWF4ID0gdGFyZ2V0Lm1pbiArIGNhbGNMZW5ndGgobGF5b3V0KTtcbn1cbmZ1bmN0aW9uIGNhbGNSZWxhdGl2ZVBvc2l0aW9uKHRhcmdldCwgbGF5b3V0LCBwYXJlbnQpIHtcbiAgICBjYWxjUmVsYXRpdmVBeGlzUG9zaXRpb24odGFyZ2V0LngsIGxheW91dC54LCBwYXJlbnQueCk7XG4gICAgY2FsY1JlbGF0aXZlQXhpc1Bvc2l0aW9uKHRhcmdldC55LCBsYXlvdXQueSwgcGFyZW50LnkpO1xufVxuXG5leHBvcnQgeyBjYWxjQXhpc0RlbHRhLCBjYWxjQm94RGVsdGEsIGNhbGNMZW5ndGgsIGNhbGNSZWxhdGl2ZUF4aXMsIGNhbGNSZWxhdGl2ZUF4aXNQb3NpdGlvbiwgY2FsY1JlbGF0aXZlQm94LCBjYWxjUmVsYXRpdmVQb3NpdGlvbiwgaXNOZWFyIH07XG4iLCJpbXBvcnQgeyBfX3JlYWQgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBjbGFtcCwgbWl4LCBwcm9ncmVzcyB9IGZyb20gJ3BvcG1vdGlvbic7XG5pbXBvcnQgeyBjYWxjTGVuZ3RoIH0gZnJvbSAnLi4vLi4vLi4vcHJvamVjdGlvbi9nZW9tZXRyeS9kZWx0YS1jYWxjLm1qcyc7XG5cbi8qKlxuICogQXBwbHkgY29uc3RyYWludHMgdG8gYSBwb2ludC4gVGhlc2UgY29uc3RyYWludHMgYXJlIGJvdGggcGh5c2ljYWwgYWxvbmcgYW5cbiAqIGF4aXMsIGFuZCBhbiBlbGFzdGljIGZhY3RvciB0aGF0IGRldGVybWluZXMgaG93IG11Y2ggdG8gY29uc3RyYWluIHRoZSBwb2ludFxuICogYnkgaWYgaXQgZG9lcyBsaWUgb3V0c2lkZSB0aGUgZGVmaW5lZCBwYXJhbWV0ZXJzLlxuICovXG5mdW5jdGlvbiBhcHBseUNvbnN0cmFpbnRzKHBvaW50LCBfYSwgZWxhc3RpYykge1xuICAgIHZhciBtaW4gPSBfYS5taW4sIG1heCA9IF9hLm1heDtcbiAgICBpZiAobWluICE9PSB1bmRlZmluZWQgJiYgcG9pbnQgPCBtaW4pIHtcbiAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIG1pbiBwb2ludCBkZWZpbmVkLCBhbmQgdGhpcyBpcyBvdXRzaWRlIG9mIHRoYXQsIGNvbnN0cmFpblxuICAgICAgICBwb2ludCA9IGVsYXN0aWMgPyBtaXgobWluLCBwb2ludCwgZWxhc3RpYy5taW4pIDogTWF0aC5tYXgocG9pbnQsIG1pbik7XG4gICAgfVxuICAgIGVsc2UgaWYgKG1heCAhPT0gdW5kZWZpbmVkICYmIHBvaW50ID4gbWF4KSB7XG4gICAgICAgIC8vIElmIHdlIGhhdmUgYSBtYXggcG9pbnQgZGVmaW5lZCwgYW5kIHRoaXMgaXMgb3V0c2lkZSBvZiB0aGF0LCBjb25zdHJhaW5cbiAgICAgICAgcG9pbnQgPSBlbGFzdGljID8gbWl4KG1heCwgcG9pbnQsIGVsYXN0aWMubWF4KSA6IE1hdGgubWluKHBvaW50LCBtYXgpO1xuICAgIH1cbiAgICByZXR1cm4gcG9pbnQ7XG59XG4vKipcbiAqIENhbGN1bGF0ZSBjb25zdHJhaW50cyBpbiB0ZXJtcyBvZiB0aGUgdmlld3BvcnQgd2hlbiBkZWZpbmVkIHJlbGF0aXZlbHkgdG8gdGhlXG4gKiBtZWFzdXJlZCBheGlzLiBUaGlzIGlzIG1lYXN1cmVkIGZyb20gdGhlIG5lYXJlc3QgZWRnZSwgc28gYSBtYXggY29uc3RyYWludCBvZiAyMDBcbiAqIG9uIGFuIGF4aXMgd2l0aCBhIG1heCB2YWx1ZSBvZiAzMDAgd291bGQgcmV0dXJuIGEgY29uc3RyYWludCBvZiA1MDAgLSBheGlzIGxlbmd0aFxuICovXG5mdW5jdGlvbiBjYWxjUmVsYXRpdmVBeGlzQ29uc3RyYWludHMoYXhpcywgbWluLCBtYXgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBtaW46IG1pbiAhPT0gdW5kZWZpbmVkID8gYXhpcy5taW4gKyBtaW4gOiB1bmRlZmluZWQsXG4gICAgICAgIG1heDogbWF4ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gYXhpcy5tYXggKyBtYXggLSAoYXhpcy5tYXggLSBheGlzLm1pbilcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH07XG59XG4vKipcbiAqIENhbGN1bGF0ZSBjb25zdHJhaW50cyBpbiB0ZXJtcyBvZiB0aGUgdmlld3BvcnQgd2hlblxuICogZGVmaW5lZCByZWxhdGl2ZWx5IHRvIHRoZSBtZWFzdXJlZCBib3VuZGluZyBib3guXG4gKi9cbmZ1bmN0aW9uIGNhbGNSZWxhdGl2ZUNvbnN0cmFpbnRzKGxheW91dEJveCwgX2EpIHtcbiAgICB2YXIgdG9wID0gX2EudG9wLCBsZWZ0ID0gX2EubGVmdCwgYm90dG9tID0gX2EuYm90dG9tLCByaWdodCA9IF9hLnJpZ2h0O1xuICAgIHJldHVybiB7XG4gICAgICAgIHg6IGNhbGNSZWxhdGl2ZUF4aXNDb25zdHJhaW50cyhsYXlvdXRCb3gueCwgbGVmdCwgcmlnaHQpLFxuICAgICAgICB5OiBjYWxjUmVsYXRpdmVBeGlzQ29uc3RyYWludHMobGF5b3V0Qm94LnksIHRvcCwgYm90dG9tKSxcbiAgICB9O1xufVxuLyoqXG4gKiBDYWxjdWxhdGUgdmlld3BvcnQgY29uc3RyYWludHMgd2hlbiBkZWZpbmVkIGFzIGFub3RoZXIgdmlld3BvcnQtcmVsYXRpdmUgYXhpc1xuICovXG5mdW5jdGlvbiBjYWxjVmlld3BvcnRBeGlzQ29uc3RyYWludHMobGF5b3V0QXhpcywgY29uc3RyYWludHNBeGlzKSB7XG4gICAgdmFyIF9hO1xuICAgIHZhciBtaW4gPSBjb25zdHJhaW50c0F4aXMubWluIC0gbGF5b3V0QXhpcy5taW47XG4gICAgdmFyIG1heCA9IGNvbnN0cmFpbnRzQXhpcy5tYXggLSBsYXlvdXRBeGlzLm1heDtcbiAgICAvLyBJZiB0aGUgY29uc3RyYWludHMgYXhpcyBpcyBhY3R1YWxseSBzbWFsbGVyIHRoYW4gdGhlIGxheW91dCBheGlzIHRoZW4gd2UgY2FuXG4gICAgLy8gZmxpcCB0aGUgY29uc3RyYWludHNcbiAgICBpZiAoY29uc3RyYWludHNBeGlzLm1heCAtIGNvbnN0cmFpbnRzQXhpcy5taW4gPFxuICAgICAgICBsYXlvdXRBeGlzLm1heCAtIGxheW91dEF4aXMubWluKSB7XG4gICAgICAgIF9hID0gX19yZWFkKFttYXgsIG1pbl0sIDIpLCBtaW4gPSBfYVswXSwgbWF4ID0gX2FbMV07XG4gICAgfVxuICAgIHJldHVybiB7IG1pbjogbWluLCBtYXg6IG1heCB9O1xufVxuLyoqXG4gKiBDYWxjdWxhdGUgdmlld3BvcnQgY29uc3RyYWludHMgd2hlbiBkZWZpbmVkIGFzIGFub3RoZXIgdmlld3BvcnQtcmVsYXRpdmUgYm94XG4gKi9cbmZ1bmN0aW9uIGNhbGNWaWV3cG9ydENvbnN0cmFpbnRzKGxheW91dEJveCwgY29uc3RyYWludHNCb3gpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB4OiBjYWxjVmlld3BvcnRBeGlzQ29uc3RyYWludHMobGF5b3V0Qm94LngsIGNvbnN0cmFpbnRzQm94LngpLFxuICAgICAgICB5OiBjYWxjVmlld3BvcnRBeGlzQ29uc3RyYWludHMobGF5b3V0Qm94LnksIGNvbnN0cmFpbnRzQm94LnkpLFxuICAgIH07XG59XG4vKipcbiAqIENhbGN1bGF0ZSBhIHRyYW5zZm9ybSBvcmlnaW4gcmVsYXRpdmUgdG8gdGhlIHNvdXJjZSBheGlzLCBiZXR3ZWVuIDAtMSwgdGhhdCByZXN1bHRzXG4gKiBpbiBhbiBhc3RoZXRpY2FsbHkgcGxlYXNpbmcgc2NhbGUvdHJhbnNmb3JtIG5lZWRlZCB0byBwcm9qZWN0IGZyb20gc291cmNlIHRvIHRhcmdldC5cbiAqL1xuZnVuY3Rpb24gY2FsY09yaWdpbihzb3VyY2UsIHRhcmdldCkge1xuICAgIHZhciBvcmlnaW4gPSAwLjU7XG4gICAgdmFyIHNvdXJjZUxlbmd0aCA9IGNhbGNMZW5ndGgoc291cmNlKTtcbiAgICB2YXIgdGFyZ2V0TGVuZ3RoID0gY2FsY0xlbmd0aCh0YXJnZXQpO1xuICAgIGlmICh0YXJnZXRMZW5ndGggPiBzb3VyY2VMZW5ndGgpIHtcbiAgICAgICAgb3JpZ2luID0gcHJvZ3Jlc3ModGFyZ2V0Lm1pbiwgdGFyZ2V0Lm1heCAtIHNvdXJjZUxlbmd0aCwgc291cmNlLm1pbik7XG4gICAgfVxuICAgIGVsc2UgaWYgKHNvdXJjZUxlbmd0aCA+IHRhcmdldExlbmd0aCkge1xuICAgICAgICBvcmlnaW4gPSBwcm9ncmVzcyhzb3VyY2UubWluLCBzb3VyY2UubWF4IC0gdGFyZ2V0TGVuZ3RoLCB0YXJnZXQubWluKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsYW1wKDAsIDEsIG9yaWdpbik7XG59XG4vKipcbiAqIFJlYmFzZSB0aGUgY2FsY3VsYXRlZCB2aWV3cG9ydCBjb25zdHJhaW50cyByZWxhdGl2ZSB0byB0aGUgbGF5b3V0Lm1pbiBwb2ludC5cbiAqL1xuZnVuY3Rpb24gcmViYXNlQXhpc0NvbnN0cmFpbnRzKGxheW91dCwgY29uc3RyYWludHMpIHtcbiAgICB2YXIgcmVsYXRpdmVDb25zdHJhaW50cyA9IHt9O1xuICAgIGlmIChjb25zdHJhaW50cy5taW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZWxhdGl2ZUNvbnN0cmFpbnRzLm1pbiA9IGNvbnN0cmFpbnRzLm1pbiAtIGxheW91dC5taW47XG4gICAgfVxuICAgIGlmIChjb25zdHJhaW50cy5tYXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZWxhdGl2ZUNvbnN0cmFpbnRzLm1heCA9IGNvbnN0cmFpbnRzLm1heCAtIGxheW91dC5taW47XG4gICAgfVxuICAgIHJldHVybiByZWxhdGl2ZUNvbnN0cmFpbnRzO1xufVxudmFyIGRlZmF1bHRFbGFzdGljID0gMC4zNTtcbi8qKlxuICogQWNjZXB0cyBhIGRyYWdFbGFzdGljIHByb3AgYW5kIHJldHVybnMgcmVzb2x2ZWQgZWxhc3RpYyB2YWx1ZXMgZm9yIGVhY2ggYXhpcy5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZURyYWdFbGFzdGljKGRyYWdFbGFzdGljKSB7XG4gICAgaWYgKGRyYWdFbGFzdGljID09PSB2b2lkIDApIHsgZHJhZ0VsYXN0aWMgPSBkZWZhdWx0RWxhc3RpYzsgfVxuICAgIGlmIChkcmFnRWxhc3RpYyA9PT0gZmFsc2UpIHtcbiAgICAgICAgZHJhZ0VsYXN0aWMgPSAwO1xuICAgIH1cbiAgICBlbHNlIGlmIChkcmFnRWxhc3RpYyA9PT0gdHJ1ZSkge1xuICAgICAgICBkcmFnRWxhc3RpYyA9IGRlZmF1bHRFbGFzdGljO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB4OiByZXNvbHZlQXhpc0VsYXN0aWMoZHJhZ0VsYXN0aWMsIFwibGVmdFwiLCBcInJpZ2h0XCIpLFxuICAgICAgICB5OiByZXNvbHZlQXhpc0VsYXN0aWMoZHJhZ0VsYXN0aWMsIFwidG9wXCIsIFwiYm90dG9tXCIpLFxuICAgIH07XG59XG5mdW5jdGlvbiByZXNvbHZlQXhpc0VsYXN0aWMoZHJhZ0VsYXN0aWMsIG1pbkxhYmVsLCBtYXhMYWJlbCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG1pbjogcmVzb2x2ZVBvaW50RWxhc3RpYyhkcmFnRWxhc3RpYywgbWluTGFiZWwpLFxuICAgICAgICBtYXg6IHJlc29sdmVQb2ludEVsYXN0aWMoZHJhZ0VsYXN0aWMsIG1heExhYmVsKSxcbiAgICB9O1xufVxuZnVuY3Rpb24gcmVzb2x2ZVBvaW50RWxhc3RpYyhkcmFnRWxhc3RpYywgbGFiZWwpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIHR5cGVvZiBkcmFnRWxhc3RpYyA9PT0gXCJudW1iZXJcIlxuICAgICAgICA/IGRyYWdFbGFzdGljXG4gICAgICAgIDogKF9hID0gZHJhZ0VsYXN0aWNbbGFiZWxdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwO1xufVxuXG5leHBvcnQgeyBhcHBseUNvbnN0cmFpbnRzLCBjYWxjT3JpZ2luLCBjYWxjUmVsYXRpdmVBeGlzQ29uc3RyYWludHMsIGNhbGNSZWxhdGl2ZUNvbnN0cmFpbnRzLCBjYWxjVmlld3BvcnRBeGlzQ29uc3RyYWludHMsIGNhbGNWaWV3cG9ydENvbnN0cmFpbnRzLCBkZWZhdWx0RWxhc3RpYywgcmViYXNlQXhpc0NvbnN0cmFpbnRzLCByZXNvbHZlQXhpc0VsYXN0aWMsIHJlc29sdmVEcmFnRWxhc3RpYywgcmVzb2x2ZVBvaW50RWxhc3RpYyB9O1xuIiwidmFyIGNyZWF0ZUF4aXNEZWx0YSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7XG4gICAgdHJhbnNsYXRlOiAwLFxuICAgIHNjYWxlOiAxLFxuICAgIG9yaWdpbjogMCxcbiAgICBvcmlnaW5Qb2ludDogMCxcbn0pOyB9O1xudmFyIGNyZWF0ZURlbHRhID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gKHtcbiAgICB4OiBjcmVhdGVBeGlzRGVsdGEoKSxcbiAgICB5OiBjcmVhdGVBeGlzRGVsdGEoKSxcbn0pOyB9O1xudmFyIGNyZWF0ZUF4aXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAoeyBtaW46IDAsIG1heDogMCB9KTsgfTtcbnZhciBjcmVhdGVCb3ggPSBmdW5jdGlvbiAoKSB7IHJldHVybiAoe1xuICAgIHg6IGNyZWF0ZUF4aXMoKSxcbiAgICB5OiBjcmVhdGVBeGlzKCksXG59KTsgfTtcblxuZXhwb3J0IHsgY3JlYXRlQXhpcywgY3JlYXRlQXhpc0RlbHRhLCBjcmVhdGVCb3gsIGNyZWF0ZURlbHRhIH07XG4iLCJmdW5jdGlvbiBlYWNoQXhpcyhjYWxsYmFjaykge1xuICAgIHJldHVybiBbY2FsbGJhY2soXCJ4XCIpLCBjYWxsYmFjayhcInlcIildO1xufVxuXG5leHBvcnQgeyBlYWNoQXhpcyB9O1xuIiwiLyoqXG4gKiBCb3VuZGluZyBib3hlcyB0ZW5kIHRvIGJlIGRlZmluZWQgYXMgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tLiBGb3IgdmFyaW91cyBvcGVyYXRpb25zXG4gKiBpdCdzIGVhc2llciB0byBjb25zaWRlciBlYWNoIGF4aXMgaW5kaXZpZHVhbGx5LiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBib3VuZGluZyBib3hcbiAqIGFzIGEgbWFwIG9mIHNpbmdsZS1heGlzIG1pbi9tYXggdmFsdWVzLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0Qm91bmRpbmdCb3hUb0JveChfYSkge1xuICAgIHZhciB0b3AgPSBfYS50b3AsIGxlZnQgPSBfYS5sZWZ0LCByaWdodCA9IF9hLnJpZ2h0LCBib3R0b20gPSBfYS5ib3R0b207XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogeyBtaW46IGxlZnQsIG1heDogcmlnaHQgfSxcbiAgICAgICAgeTogeyBtaW46IHRvcCwgbWF4OiBib3R0b20gfSxcbiAgICB9O1xufVxuZnVuY3Rpb24gY29udmVydEJveFRvQm91bmRpbmdCb3goX2EpIHtcbiAgICB2YXIgeCA9IF9hLngsIHkgPSBfYS55O1xuICAgIHJldHVybiB7IHRvcDogeS5taW4sIHJpZ2h0OiB4Lm1heCwgYm90dG9tOiB5Lm1heCwgbGVmdDogeC5taW4gfTtcbn1cbi8qKlxuICogQXBwbGllcyBhIFRyYW5zZm9ybVBvaW50IGZ1bmN0aW9uIHRvIGEgYm91bmRpbmcgYm94LiBUcmFuc2Zvcm1Qb2ludCBpcyB1c3VhbGx5IGEgZnVuY3Rpb25cbiAqIHByb3ZpZGVkIGJ5IEZyYW1lciB0byBhbGxvdyBtZWFzdXJlZCBwb2ludHMgdG8gYmUgY29ycmVjdGVkIGZvciBkZXZpY2Ugc2NhbGluZy4gVGhpcyBpcyB1c2VkXG4gKiB3aGVuIG1lYXN1cmluZyBET00gZWxlbWVudHMgYW5kIERPTSBldmVudCBwb2ludHMuXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybUJveFBvaW50cyhwb2ludCwgdHJhbnNmb3JtUG9pbnQpIHtcbiAgICBpZiAoIXRyYW5zZm9ybVBvaW50KVxuICAgICAgICByZXR1cm4gcG9pbnQ7XG4gICAgdmFyIHRvcExlZnQgPSB0cmFuc2Zvcm1Qb2ludCh7IHg6IHBvaW50LmxlZnQsIHk6IHBvaW50LnRvcCB9KTtcbiAgICB2YXIgYm90dG9tUmlnaHQgPSB0cmFuc2Zvcm1Qb2ludCh7IHg6IHBvaW50LnJpZ2h0LCB5OiBwb2ludC5ib3R0b20gfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdG9wOiB0b3BMZWZ0LnksXG4gICAgICAgIGxlZnQ6IHRvcExlZnQueCxcbiAgICAgICAgYm90dG9tOiBib3R0b21SaWdodC55LFxuICAgICAgICByaWdodDogYm90dG9tUmlnaHQueCxcbiAgICB9O1xufVxuXG5leHBvcnQgeyBjb252ZXJ0Qm91bmRpbmdCb3hUb0JveCwgY29udmVydEJveFRvQm91bmRpbmdCb3gsIHRyYW5zZm9ybUJveFBvaW50cyB9O1xuIiwiZnVuY3Rpb24gaXNJZGVudGl0eVNjYWxlKHNjYWxlKSB7XG4gICAgcmV0dXJuIHNjYWxlID09PSB1bmRlZmluZWQgfHwgc2NhbGUgPT09IDE7XG59XG5mdW5jdGlvbiBoYXNTY2FsZShfYSkge1xuICAgIHZhciBzY2FsZSA9IF9hLnNjYWxlLCBzY2FsZVggPSBfYS5zY2FsZVgsIHNjYWxlWSA9IF9hLnNjYWxlWTtcbiAgICByZXR1cm4gKCFpc0lkZW50aXR5U2NhbGUoc2NhbGUpIHx8XG4gICAgICAgICFpc0lkZW50aXR5U2NhbGUoc2NhbGVYKSB8fFxuICAgICAgICAhaXNJZGVudGl0eVNjYWxlKHNjYWxlWSkpO1xufVxuZnVuY3Rpb24gaGFzVHJhbnNmb3JtKHZhbHVlcykge1xuICAgIHJldHVybiAoaGFzU2NhbGUodmFsdWVzKSB8fFxuICAgICAgICBoYXNUcmFuc2xhdGUodmFsdWVzLngpIHx8XG4gICAgICAgIGhhc1RyYW5zbGF0ZSh2YWx1ZXMueSkgfHxcbiAgICAgICAgdmFsdWVzLnogfHxcbiAgICAgICAgdmFsdWVzLnJvdGF0ZSB8fFxuICAgICAgICB2YWx1ZXMucm90YXRlWCB8fFxuICAgICAgICB2YWx1ZXMucm90YXRlWSk7XG59XG5mdW5jdGlvbiBoYXNUcmFuc2xhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUgIT09IFwiMCVcIjtcbn1cblxuZXhwb3J0IHsgaGFzU2NhbGUsIGhhc1RyYW5zZm9ybSB9O1xuIiwiaW1wb3J0IHsgX19yZWFkIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgbWl4IH0gZnJvbSAncG9wbW90aW9uJztcbmltcG9ydCB7IGhhc1RyYW5zZm9ybSB9IGZyb20gJy4uL3V0aWxzL2hhcy10cmFuc2Zvcm0ubWpzJztcblxuLyoqXG4gKiBTY2FsZXMgYSBwb2ludCBiYXNlZCBvbiBhIGZhY3RvciBhbmQgYW4gb3JpZ2luUG9pbnRcbiAqL1xuZnVuY3Rpb24gc2NhbGVQb2ludChwb2ludCwgc2NhbGUsIG9yaWdpblBvaW50KSB7XG4gICAgdmFyIGRpc3RhbmNlRnJvbU9yaWdpbiA9IHBvaW50IC0gb3JpZ2luUG9pbnQ7XG4gICAgdmFyIHNjYWxlZCA9IHNjYWxlICogZGlzdGFuY2VGcm9tT3JpZ2luO1xuICAgIHJldHVybiBvcmlnaW5Qb2ludCArIHNjYWxlZDtcbn1cbi8qKlxuICogQXBwbGllcyBhIHRyYW5zbGF0ZS9zY2FsZSBkZWx0YSB0byBhIHBvaW50XG4gKi9cbmZ1bmN0aW9uIGFwcGx5UG9pbnREZWx0YShwb2ludCwgdHJhbnNsYXRlLCBzY2FsZSwgb3JpZ2luUG9pbnQsIGJveFNjYWxlKSB7XG4gICAgaWYgKGJveFNjYWxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcG9pbnQgPSBzY2FsZVBvaW50KHBvaW50LCBib3hTY2FsZSwgb3JpZ2luUG9pbnQpO1xuICAgIH1cbiAgICByZXR1cm4gc2NhbGVQb2ludChwb2ludCwgc2NhbGUsIG9yaWdpblBvaW50KSArIHRyYW5zbGF0ZTtcbn1cbi8qKlxuICogQXBwbGllcyBhIHRyYW5zbGF0ZS9zY2FsZSBkZWx0YSB0byBhbiBheGlzXG4gKi9cbmZ1bmN0aW9uIGFwcGx5QXhpc0RlbHRhKGF4aXMsIHRyYW5zbGF0ZSwgc2NhbGUsIG9yaWdpblBvaW50LCBib3hTY2FsZSkge1xuICAgIGlmICh0cmFuc2xhdGUgPT09IHZvaWQgMCkgeyB0cmFuc2xhdGUgPSAwOyB9XG4gICAgaWYgKHNjYWxlID09PSB2b2lkIDApIHsgc2NhbGUgPSAxOyB9XG4gICAgYXhpcy5taW4gPSBhcHBseVBvaW50RGVsdGEoYXhpcy5taW4sIHRyYW5zbGF0ZSwgc2NhbGUsIG9yaWdpblBvaW50LCBib3hTY2FsZSk7XG4gICAgYXhpcy5tYXggPSBhcHBseVBvaW50RGVsdGEoYXhpcy5tYXgsIHRyYW5zbGF0ZSwgc2NhbGUsIG9yaWdpblBvaW50LCBib3hTY2FsZSk7XG59XG4vKipcbiAqIEFwcGxpZXMgYSB0cmFuc2xhdGUvc2NhbGUgZGVsdGEgdG8gYSBib3hcbiAqL1xuZnVuY3Rpb24gYXBwbHlCb3hEZWx0YShib3gsIF9hKSB7XG4gICAgdmFyIHggPSBfYS54LCB5ID0gX2EueTtcbiAgICBhcHBseUF4aXNEZWx0YShib3gueCwgeC50cmFuc2xhdGUsIHguc2NhbGUsIHgub3JpZ2luUG9pbnQpO1xuICAgIGFwcGx5QXhpc0RlbHRhKGJveC55LCB5LnRyYW5zbGF0ZSwgeS5zY2FsZSwgeS5vcmlnaW5Qb2ludCk7XG59XG4vKipcbiAqIEFwcGx5IGEgdHJlZSBvZiBkZWx0YXMgdG8gYSBib3guIFdlIGRvIHRoaXMgdG8gY2FsY3VsYXRlIHRoZSBlZmZlY3Qgb2YgYWxsIHRoZSB0cmFuc2Zvcm1zXG4gKiBpbiBhIHRyZWUgdXBvbiBvdXIgYm94IGJlZm9yZSB0aGVuIGNhbGN1bGF0aW5nIGhvdyB0byBwcm9qZWN0IGl0IGludG8gb3VyIGRlc2lyZWQgdmlld3BvcnQtcmVsYXRpdmUgYm94XG4gKlxuICogVGhpcyBpcyB0aGUgZmluYWwgbmVzdGVkIGxvb3Agd2l0aGluIHVwZGF0ZUxheW91dERlbHRhIGZvciBmdXR1cmUgcmVmYWN0b3JpbmdcbiAqL1xuZnVuY3Rpb24gYXBwbHlUcmVlRGVsdGFzKGJveCwgdHJlZVNjYWxlLCB0cmVlUGF0aCwgaXNTaGFyZWRUcmFuc2l0aW9uKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBpZiAoaXNTaGFyZWRUcmFuc2l0aW9uID09PSB2b2lkIDApIHsgaXNTaGFyZWRUcmFuc2l0aW9uID0gZmFsc2U7IH1cbiAgICB2YXIgdHJlZUxlbmd0aCA9IHRyZWVQYXRoLmxlbmd0aDtcbiAgICBpZiAoIXRyZWVMZW5ndGgpXG4gICAgICAgIHJldHVybjtcbiAgICAvLyBSZXNldCB0aGUgdHJlZVNjYWxlXG4gICAgdHJlZVNjYWxlLnggPSB0cmVlU2NhbGUueSA9IDE7XG4gICAgdmFyIG5vZGU7XG4gICAgdmFyIGRlbHRhO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJlZUxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG5vZGUgPSB0cmVlUGF0aFtpXTtcbiAgICAgICAgZGVsdGEgPSBub2RlLnByb2plY3Rpb25EZWx0YTtcbiAgICAgICAgaWYgKCgoX2IgPSAoX2EgPSBub2RlLmluc3RhbmNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3R5bGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5kaXNwbGF5KSA9PT0gXCJjb250ZW50c1wiKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmIChpc1NoYXJlZFRyYW5zaXRpb24gJiZcbiAgICAgICAgICAgIG5vZGUub3B0aW9ucy5sYXlvdXRTY3JvbGwgJiZcbiAgICAgICAgICAgIG5vZGUuc2Nyb2xsICYmXG4gICAgICAgICAgICBub2RlICE9PSBub2RlLnJvb3QpIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybUJveChib3gsIHsgeDogLW5vZGUuc2Nyb2xsLngsIHk6IC1ub2RlLnNjcm9sbC55IH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZWx0YSkge1xuICAgICAgICAgICAgLy8gSW5jb3BvcmF0ZSBlYWNoIGFuY2VzdG9yJ3Mgc2NhbGUgaW50byBhIGN1bG11bGF0aXZlIHRyZWVTY2FsZSBmb3IgdGhpcyBjb21wb25lbnRcbiAgICAgICAgICAgIHRyZWVTY2FsZS54ICo9IGRlbHRhLnguc2NhbGU7XG4gICAgICAgICAgICB0cmVlU2NhbGUueSAqPSBkZWx0YS55LnNjYWxlO1xuICAgICAgICAgICAgLy8gQXBwbHkgZWFjaCBhbmNlc3RvcidzIGNhbGN1bGF0ZWQgZGVsdGEgaW50byB0aGlzIGNvbXBvbmVudCdzIHJlY29yZGVkIGxheW91dCBib3hcbiAgICAgICAgICAgIGFwcGx5Qm94RGVsdGEoYm94LCBkZWx0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU2hhcmVkVHJhbnNpdGlvbiAmJiBoYXNUcmFuc2Zvcm0obm9kZS5sYXRlc3RWYWx1ZXMpKSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1Cb3goYm94LCBub2RlLmxhdGVzdFZhbHVlcyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiB0cmFuc2xhdGVBeGlzKGF4aXMsIGRpc3RhbmNlKSB7XG4gICAgYXhpcy5taW4gPSBheGlzLm1pbiArIGRpc3RhbmNlO1xuICAgIGF4aXMubWF4ID0gYXhpcy5tYXggKyBkaXN0YW5jZTtcbn1cbi8qKlxuICogQXBwbHkgYSB0cmFuc2Zvcm0gdG8gYW4gYXhpcyBmcm9tIHRoZSBsYXRlc3QgcmVzb2x2ZWQgbW90aW9uIHZhbHVlcy5cbiAqIFRoaXMgZnVuY3Rpb24gYmFzaWNhbGx5IGFjdHMgYXMgYSBicmlkZ2UgYmV0d2VlbiBhIGZsYXQgbW90aW9uIHZhbHVlIG1hcFxuICogYW5kIGFwcGx5QXhpc0RlbHRhXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybUF4aXMoYXhpcywgdHJhbnNmb3JtcywgX2EpIHtcbiAgICB2YXIgX2IgPSBfX3JlYWQoX2EsIDMpLCBrZXkgPSBfYlswXSwgc2NhbGVLZXkgPSBfYlsxXSwgb3JpZ2luS2V5ID0gX2JbMl07XG4gICAgdmFyIGF4aXNPcmlnaW4gPSB0cmFuc2Zvcm1zW29yaWdpbktleV0gIT09IHVuZGVmaW5lZCA/IHRyYW5zZm9ybXNbb3JpZ2luS2V5XSA6IDAuNTtcbiAgICB2YXIgb3JpZ2luUG9pbnQgPSBtaXgoYXhpcy5taW4sIGF4aXMubWF4LCBheGlzT3JpZ2luKTtcbiAgICAvLyBBcHBseSB0aGUgYXhpcyBkZWx0YSB0byB0aGUgZmluYWwgYXhpc1xuICAgIGFwcGx5QXhpc0RlbHRhKGF4aXMsIHRyYW5zZm9ybXNba2V5XSwgdHJhbnNmb3Jtc1tzY2FsZUtleV0sIG9yaWdpblBvaW50LCB0cmFuc2Zvcm1zLnNjYWxlKTtcbn1cbi8qKlxuICogVGhlIG5hbWVzIG9mIHRoZSBtb3Rpb24gdmFsdWVzIHdlIHdhbnQgdG8gYXBwbHkgYXMgdHJhbnNsYXRpb24sIHNjYWxlIGFuZCBvcmlnaW4uXG4gKi9cbnZhciB4S2V5cyA9IFtcInhcIiwgXCJzY2FsZVhcIiwgXCJvcmlnaW5YXCJdO1xudmFyIHlLZXlzID0gW1wieVwiLCBcInNjYWxlWVwiLCBcIm9yaWdpbllcIl07XG4vKipcbiAqIEFwcGx5IGEgdHJhbnNmb3JtIHRvIGEgYm94IGZyb20gdGhlIGxhdGVzdCByZXNvbHZlZCBtb3Rpb24gdmFsdWVzLlxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm1Cb3goYm94LCB0cmFuc2Zvcm0pIHtcbiAgICB0cmFuc2Zvcm1BeGlzKGJveC54LCB0cmFuc2Zvcm0sIHhLZXlzKTtcbiAgICB0cmFuc2Zvcm1BeGlzKGJveC55LCB0cmFuc2Zvcm0sIHlLZXlzKTtcbn1cblxuZXhwb3J0IHsgYXBwbHlBeGlzRGVsdGEsIGFwcGx5Qm94RGVsdGEsIGFwcGx5UG9pbnREZWx0YSwgYXBwbHlUcmVlRGVsdGFzLCBzY2FsZVBvaW50LCB0cmFuc2Zvcm1BeGlzLCB0cmFuc2Zvcm1Cb3gsIHRyYW5zbGF0ZUF4aXMgfTtcbiIsImltcG9ydCB7IGNvbnZlcnRCb3VuZGluZ0JveFRvQm94LCB0cmFuc2Zvcm1Cb3hQb2ludHMgfSBmcm9tICcuLi9nZW9tZXRyeS9jb252ZXJzaW9uLm1qcyc7XG5pbXBvcnQgeyB0cmFuc2xhdGVBeGlzIH0gZnJvbSAnLi4vZ2VvbWV0cnkvZGVsdGEtYXBwbHkubWpzJztcblxuZnVuY3Rpb24gbWVhc3VyZVZpZXdwb3J0Qm94KGluc3RhbmNlLCB0cmFuc2Zvcm1Qb2ludCkge1xuICAgIHJldHVybiBjb252ZXJ0Qm91bmRpbmdCb3hUb0JveCh0cmFuc2Zvcm1Cb3hQb2ludHMoaW5zdGFuY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIHRyYW5zZm9ybVBvaW50KSk7XG59XG5mdW5jdGlvbiBtZWFzdXJlUGFnZUJveChlbGVtZW50LCByb290UHJvamVjdGlvbk5vZGUsIHRyYW5zZm9ybVBhZ2VQb2ludCkge1xuICAgIHZhciB2aWV3cG9ydEJveCA9IG1lYXN1cmVWaWV3cG9ydEJveChlbGVtZW50LCB0cmFuc2Zvcm1QYWdlUG9pbnQpO1xuICAgIHZhciBzY3JvbGwgPSByb290UHJvamVjdGlvbk5vZGUuc2Nyb2xsO1xuICAgIGlmIChzY3JvbGwpIHtcbiAgICAgICAgdHJhbnNsYXRlQXhpcyh2aWV3cG9ydEJveC54LCBzY3JvbGwueCk7XG4gICAgICAgIHRyYW5zbGF0ZUF4aXModmlld3BvcnRCb3gueSwgc2Nyb2xsLnkpO1xuICAgIH1cbiAgICByZXR1cm4gdmlld3BvcnRCb3g7XG59XG5cbmV4cG9ydCB7IG1lYXN1cmVQYWdlQm94LCBtZWFzdXJlVmlld3BvcnRCb3ggfTtcbiIsImltcG9ydCB7IF9fYXNzaWduIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgaW52YXJpYW50IH0gZnJvbSAnaGV5LWxpc3Rlbic7XG5pbXBvcnQgeyBQYW5TZXNzaW9uIH0gZnJvbSAnLi4vUGFuU2Vzc2lvbi5tanMnO1xuaW1wb3J0IHsgZ2V0R2xvYmFsTG9jayB9IGZyb20gJy4vdXRpbHMvbG9jay5tanMnO1xuaW1wb3J0IHsgaXNSZWZPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscy9pcy1yZWYtb2JqZWN0Lm1qcyc7XG5pbXBvcnQgeyBhZGRQb2ludGVyRXZlbnQgfSBmcm9tICcuLi8uLi9ldmVudHMvdXNlLXBvaW50ZXItZXZlbnQubWpzJztcbmltcG9ydCB7IGFwcGx5Q29uc3RyYWludHMsIGNhbGNSZWxhdGl2ZUNvbnN0cmFpbnRzLCByZXNvbHZlRHJhZ0VsYXN0aWMsIHJlYmFzZUF4aXNDb25zdHJhaW50cywgY2FsY1ZpZXdwb3J0Q29uc3RyYWludHMsIGNhbGNPcmlnaW4sIGRlZmF1bHRFbGFzdGljIH0gZnJvbSAnLi91dGlscy9jb25zdHJhaW50cy5tanMnO1xuaW1wb3J0IHsgQW5pbWF0aW9uVHlwZSB9IGZyb20gJy4uLy4uL3JlbmRlci91dGlscy90eXBlcy5tanMnO1xuaW1wb3J0IHsgY3JlYXRlQm94IH0gZnJvbSAnLi4vLi4vcHJvamVjdGlvbi9nZW9tZXRyeS9tb2RlbHMubWpzJztcbmltcG9ydCB7IGVhY2hBeGlzIH0gZnJvbSAnLi4vLi4vcHJvamVjdGlvbi91dGlscy9lYWNoLWF4aXMubWpzJztcbmltcG9ydCB7IG1lYXN1cmVQYWdlQm94IH0gZnJvbSAnLi4vLi4vcHJvamVjdGlvbi91dGlscy9tZWFzdXJlLm1qcyc7XG5pbXBvcnQgeyBleHRyYWN0RXZlbnRJbmZvIH0gZnJvbSAnLi4vLi4vZXZlbnRzL2V2ZW50LWluZm8ubWpzJztcbmltcG9ydCB7IHN0YXJ0QW5pbWF0aW9uIH0gZnJvbSAnLi4vLi4vYW5pbWF0aW9uL3V0aWxzL3RyYW5zaXRpb25zLm1qcyc7XG5pbXBvcnQgeyBjb252ZXJ0Qm94VG9Cb3VuZGluZ0JveCwgY29udmVydEJvdW5kaW5nQm94VG9Cb3ggfSBmcm9tICcuLi8uLi9wcm9qZWN0aW9uL2dlb21ldHJ5L2NvbnZlcnNpb24ubWpzJztcbmltcG9ydCB7IGFkZERvbUV2ZW50IH0gZnJvbSAnLi4vLi4vZXZlbnRzL3VzZS1kb20tZXZlbnQubWpzJztcbmltcG9ydCB7IG1peCB9IGZyb20gJ3BvcG1vdGlvbic7XG5pbXBvcnQgeyBwZXJjZW50IH0gZnJvbSAnc3R5bGUtdmFsdWUtdHlwZXMnO1xuaW1wb3J0IHsgY2FsY0xlbmd0aCB9IGZyb20gJy4uLy4uL3Byb2plY3Rpb24vZ2VvbWV0cnkvZGVsdGEtY2FsYy5tanMnO1xuXG52YXIgZWxlbWVudERyYWdDb250cm9scyA9IG5ldyBXZWFrTWFwKCk7XG4vKipcbiAqXG4gKi9cbi8vIGxldCBsYXRlc3RQb2ludGVyRXZlbnQ6IEFueVBvaW50ZXJFdmVudFxudmFyIFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVmlzdWFsRWxlbWVudERyYWdDb250cm9scyh2aXN1YWxFbGVtZW50KSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBkcmFnIGdlc3R1cmUgbG9jaywgZW5zdXJpbmcgb25seSBvbmUgY29tcG9uZW50XG4gICAgICAgIC8vIGNhbiBcImNhcHR1cmVcIiB0aGUgZHJhZyBvZiBvbmUgb3IgYm90aCBheGVzLlxuICAgICAgICAvLyBUT0RPOiBMb29rIGludG8gbW92aW5nIHRoaXMgaW50byBwYW5zZXNzaW9uP1xuICAgICAgICB0aGlzLm9wZW5HbG9iYWxMb2NrID0gbnVsbDtcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY3VycmVudERpcmVjdGlvbiA9IG51bGw7XG4gICAgICAgIHRoaXMub3JpZ2luUG9pbnQgPSB7IHg6IDAsIHk6IDAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBwZXJtaXR0ZWQgYm91bmRhcmllcyBvZiB0cmF2ZWwsIGluIHBpeGVscy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29uc3RyYWludHMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oYXNNdXRhdGVkQ29uc3RyYWludHMgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBwZXItYXhpcyByZXNvbHZlZCBlbGFzdGljIHZhbHVlcy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZWxhc3RpYyA9IGNyZWF0ZUJveCgpO1xuICAgICAgICB0aGlzLnZpc3VhbEVsZW1lbnQgPSB2aXN1YWxFbGVtZW50O1xuICAgIH1cbiAgICBWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uIChvcmlnaW5FdmVudCwgX2EpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9iID0gX2EgPT09IHZvaWQgMCA/IHt9IDogX2EsIF9jID0gX2Iuc25hcFRvQ3Vyc29yLCBzbmFwVG9DdXJzb3IgPSBfYyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfYztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERvbid0IHN0YXJ0IGRyYWdnaW5nIGlmIHRoaXMgY29tcG9uZW50IGlzIGV4aXRpbmdcbiAgICAgICAgICovXG4gICAgICAgIGlmICh0aGlzLnZpc3VhbEVsZW1lbnQuaXNQcmVzZW50ID09PSBmYWxzZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIG9uU2Vzc2lvblN0YXJ0ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICAvLyBTdG9wIGFueSBhbmltYXRpb25zIG9uIGJvdGggYXhpcyB2YWx1ZXMgaW1tZWRpYXRlbHkuIFRoaXMgYWxsb3dzIHRoZSB1c2VyIHRvIHRocm93IGFuZCBjYXRjaFxuICAgICAgICAgICAgLy8gdGhlIGNvbXBvbmVudC5cbiAgICAgICAgICAgIF90aGlzLnN0b3BBbmltYXRpb24oKTtcbiAgICAgICAgICAgIGlmIChzbmFwVG9DdXJzb3IpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5zbmFwVG9DdXJzb3IoZXh0cmFjdEV2ZW50SW5mbyhldmVudCwgXCJwYWdlXCIpLnBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQsIGluZm8pIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gZ3JhYiB0aGUgZ2xvYmFsIGRyYWcgZ2VzdHVyZSBsb2NrIC0gbWF5YmUgbWFrZSB0aGlzIHBhcnQgb2YgUGFuU2Vzc2lvblxuICAgICAgICAgICAgdmFyIF9iID0gX3RoaXMuZ2V0UHJvcHMoKSwgZHJhZyA9IF9iLmRyYWcsIGRyYWdQcm9wYWdhdGlvbiA9IF9iLmRyYWdQcm9wYWdhdGlvbiwgb25EcmFnU3RhcnQgPSBfYi5vbkRyYWdTdGFydDtcbiAgICAgICAgICAgIGlmIChkcmFnICYmICFkcmFnUHJvcGFnYXRpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMub3Blbkdsb2JhbExvY2spXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLm9wZW5HbG9iYWxMb2NrKCk7XG4gICAgICAgICAgICAgICAgX3RoaXMub3Blbkdsb2JhbExvY2sgPSBnZXRHbG9iYWxMb2NrKGRyYWcpO1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIGRvbiAndCBoYXZlIHRoZSBsb2NrLCBkb24ndCBzdGFydCBkcmFnZ2luZ1xuICAgICAgICAgICAgICAgIGlmICghX3RoaXMub3Blbkdsb2JhbExvY2spXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF90aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICAgICAgX3RoaXMuY3VycmVudERpcmVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgICBfdGhpcy5yZXNvbHZlQ29uc3RyYWludHMoKTtcbiAgICAgICAgICAgIGlmIChfdGhpcy52aXN1YWxFbGVtZW50LnByb2plY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBfdGhpcy52aXN1YWxFbGVtZW50LnByb2plY3Rpb24uaXNBbmltYXRpb25CbG9ja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBfdGhpcy52aXN1YWxFbGVtZW50LnByb2plY3Rpb24udGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZWNvcmQgZ2VzdHVyZSBvcmlnaW5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZWFjaEF4aXMoZnVuY3Rpb24gKGF4aXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gX3RoaXMuZ2V0QXhpc01vdGlvblZhbHVlKGF4aXMpLmdldCgpIHx8IDA7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogSWYgdGhlIE1vdGlvblZhbHVlIGlzIGEgcGVyY2VudGFnZSB2YWx1ZSBjb252ZXJ0IHRvIHB4XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgaWYgKHBlcmNlbnQudGVzdChjdXJyZW50KSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWVhc3VyZWRBeGlzID0gKF9iID0gKF9hID0gX3RoaXMudmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGF5b3V0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuYWN0dWFsW2F4aXNdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWVhc3VyZWRBeGlzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoXzEgPSBjYWxjTGVuZ3RoKG1lYXN1cmVkQXhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gbGVuZ3RoXzEgKiAocGFyc2VGbG9hdChjdXJyZW50KSAvIDEwMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX3RoaXMub3JpZ2luUG9pbnRbYXhpc10gPSBjdXJyZW50O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBGaXJlIG9uRHJhZ1N0YXJ0IGV2ZW50XG4gICAgICAgICAgICBvbkRyYWdTdGFydCA9PT0gbnVsbCB8fCBvbkRyYWdTdGFydCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25EcmFnU3RhcnQoZXZlbnQsIGluZm8pO1xuICAgICAgICAgICAgKF9hID0gX3RoaXMudmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNldEFjdGl2ZShBbmltYXRpb25UeXBlLkRyYWcsIHRydWUpO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgb25Nb3ZlID0gZnVuY3Rpb24gKGV2ZW50LCBpbmZvKSB7XG4gICAgICAgICAgICAvLyBsYXRlc3RQb2ludGVyRXZlbnQgPSBldmVudFxuICAgICAgICAgICAgdmFyIF9hID0gX3RoaXMuZ2V0UHJvcHMoKSwgZHJhZ1Byb3BhZ2F0aW9uID0gX2EuZHJhZ1Byb3BhZ2F0aW9uLCBkcmFnRGlyZWN0aW9uTG9jayA9IF9hLmRyYWdEaXJlY3Rpb25Mb2NrLCBvbkRpcmVjdGlvbkxvY2sgPSBfYS5vbkRpcmVjdGlvbkxvY2ssIG9uRHJhZyA9IF9hLm9uRHJhZztcbiAgICAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBzdWNjZXNzZnVsbHkgcmVjZWl2ZSB0aGUgZ2VzdHVyZSBsb2NrLCBlYXJseSByZXR1cm4uXG4gICAgICAgICAgICBpZiAoIWRyYWdQcm9wYWdhdGlvbiAmJiAhX3RoaXMub3Blbkdsb2JhbExvY2spXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IGluZm8ub2Zmc2V0O1xuICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBkZXRlY3QgZHJhZyBkaXJlY3Rpb24gaWYgZGlyZWN0aW9uTG9jayBpcyB0cnVlXG4gICAgICAgICAgICBpZiAoZHJhZ0RpcmVjdGlvbkxvY2sgJiYgX3RoaXMuY3VycmVudERpcmVjdGlvbiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmN1cnJlbnREaXJlY3Rpb24gPSBnZXRDdXJyZW50RGlyZWN0aW9uKG9mZnNldCk7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UndmUgc3VjY2Vzc2Z1bGx5IHNldCBhIGRpcmVjdGlvbiwgbm90aWZ5IGxpc3RlbmVyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLmN1cnJlbnREaXJlY3Rpb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgb25EaXJlY3Rpb25Mb2NrID09PSBudWxsIHx8IG9uRGlyZWN0aW9uTG9jayA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25EaXJlY3Rpb25Mb2NrKF90aGlzLmN1cnJlbnREaXJlY3Rpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBVcGRhdGUgZWFjaCBwb2ludCB3aXRoIHRoZSBsYXRlc3QgcG9zaXRpb25cbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZUF4aXMoXCJ4XCIsIGluZm8ucG9pbnQsIG9mZnNldCk7XG4gICAgICAgICAgICBfdGhpcy51cGRhdGVBeGlzKFwieVwiLCBpbmZvLnBvaW50LCBvZmZzZXQpO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZGVhbGx5IHdlIHdvdWxkIGxlYXZlIHRoZSByZW5kZXJlciB0byBmaXJlIG5hdHVyYWxseSBhdCB0aGUgZW5kIG9mXG4gICAgICAgICAgICAgKiB0aGlzIGZyYW1lIGJ1dCBpZiB0aGUgZWxlbWVudCBpcyBhYm91dCB0byBjaGFuZ2UgbGF5b3V0IGFzIHRoZSByZXN1bHRcbiAgICAgICAgICAgICAqIG9mIGEgcmUtcmVuZGVyIHdlIHdhbnQgdG8gZW5zdXJlIHRoZSBicm93c2VyIGNhbiByZWFkIHRoZSBsYXRlc3RcbiAgICAgICAgICAgICAqIGJvdW5kaW5nIGJveCB0byBlbnN1cmUgdGhlIHBvaW50ZXIgYW5kIGVsZW1lbnQgZG9uJ3QgZmFsbCBvdXQgb2Ygc3luYy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgX3RoaXMudmlzdWFsRWxlbWVudC5zeW5jUmVuZGVyKCk7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoaXMgbXVzdCBmaXJlIGFmdGVyIHRoZSBzeW5jUmVuZGVyIGNhbGwgYXMgaXQgbWlnaHQgdHJpZ2dlciBhIHN0YXRlXG4gICAgICAgICAgICAgKiBjaGFuZ2Ugd2hpY2ggaXRzZWxmIG1pZ2h0IHRyaWdnZXIgYSBsYXlvdXQgdXBkYXRlLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBvbkRyYWcgPT09IG51bGwgfHwgb25EcmFnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkRyYWcoZXZlbnQsIGluZm8pO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgb25TZXNzaW9uRW5kID0gZnVuY3Rpb24gKGV2ZW50LCBpbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMuc3RvcChldmVudCwgaW5mbyk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucGFuU2Vzc2lvbiA9IG5ldyBQYW5TZXNzaW9uKG9yaWdpbkV2ZW50LCB7XG4gICAgICAgICAgICBvblNlc3Npb25TdGFydDogb25TZXNzaW9uU3RhcnQsXG4gICAgICAgICAgICBvblN0YXJ0OiBvblN0YXJ0LFxuICAgICAgICAgICAgb25Nb3ZlOiBvbk1vdmUsXG4gICAgICAgICAgICBvblNlc3Npb25FbmQ6IG9uU2Vzc2lvbkVuZCxcbiAgICAgICAgfSwgeyB0cmFuc2Zvcm1QYWdlUG9pbnQ6IHRoaXMudmlzdWFsRWxlbWVudC5nZXRUcmFuc2Zvcm1QYWdlUG9pbnQoKSB9KTtcbiAgICB9O1xuICAgIFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHMucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoZXZlbnQsIGluZm8pIHtcbiAgICAgICAgdmFyIGlzRHJhZ2dpbmcgPSB0aGlzLmlzRHJhZ2dpbmc7XG4gICAgICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgICAgIGlmICghaXNEcmFnZ2luZylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHZlbG9jaXR5ID0gaW5mby52ZWxvY2l0eTtcbiAgICAgICAgdGhpcy5zdGFydEFuaW1hdGlvbih2ZWxvY2l0eSk7XG4gICAgICAgIHZhciBvbkRyYWdFbmQgPSB0aGlzLmdldFByb3BzKCkub25EcmFnRW5kO1xuICAgICAgICBvbkRyYWdFbmQgPT09IG51bGwgfHwgb25EcmFnRW5kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkRyYWdFbmQoZXZlbnQsIGluZm8pO1xuICAgIH07XG4gICAgVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMudmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbi5pc0FuaW1hdGlvbkJsb2NrZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAoX2EgPSB0aGlzLnBhblNlc3Npb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lbmQoKTtcbiAgICAgICAgdGhpcy5wYW5TZXNzaW9uID0gdW5kZWZpbmVkO1xuICAgICAgICB2YXIgZHJhZ1Byb3BhZ2F0aW9uID0gdGhpcy5nZXRQcm9wcygpLmRyYWdQcm9wYWdhdGlvbjtcbiAgICAgICAgaWYgKCFkcmFnUHJvcGFnYXRpb24gJiYgdGhpcy5vcGVuR2xvYmFsTG9jaykge1xuICAgICAgICAgICAgdGhpcy5vcGVuR2xvYmFsTG9jaygpO1xuICAgICAgICAgICAgdGhpcy5vcGVuR2xvYmFsTG9jayA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgKF9iID0gdGhpcy52aXN1YWxFbGVtZW50LmFuaW1hdGlvblN0YXRlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2V0QWN0aXZlKEFuaW1hdGlvblR5cGUuRHJhZywgZmFsc2UpO1xuICAgIH07XG4gICAgVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5wcm90b3R5cGUudXBkYXRlQXhpcyA9IGZ1bmN0aW9uIChheGlzLCBfcG9pbnQsIG9mZnNldCkge1xuICAgICAgICB2YXIgZHJhZyA9IHRoaXMuZ2V0UHJvcHMoKS5kcmFnO1xuICAgICAgICAvLyBJZiB3ZSdyZSBub3QgZHJhZ2dpbmcgdGhpcyBheGlzLCBkbyBhbiBlYXJseSByZXR1cm4uXG4gICAgICAgIGlmICghb2Zmc2V0IHx8ICFzaG91bGREcmFnKGF4aXMsIGRyYWcsIHRoaXMuY3VycmVudERpcmVjdGlvbikpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBheGlzVmFsdWUgPSB0aGlzLmdldEF4aXNNb3Rpb25WYWx1ZShheGlzKTtcbiAgICAgICAgdmFyIG5leHQgPSB0aGlzLm9yaWdpblBvaW50W2F4aXNdICsgb2Zmc2V0W2F4aXNdO1xuICAgICAgICAvLyBBcHBseSBjb25zdHJhaW50c1xuICAgICAgICBpZiAodGhpcy5jb25zdHJhaW50cyAmJiB0aGlzLmNvbnN0cmFpbnRzW2F4aXNdKSB7XG4gICAgICAgICAgICBuZXh0ID0gYXBwbHlDb25zdHJhaW50cyhuZXh0LCB0aGlzLmNvbnN0cmFpbnRzW2F4aXNdLCB0aGlzLmVsYXN0aWNbYXhpc10pO1xuICAgICAgICB9XG4gICAgICAgIGF4aXNWYWx1ZS5zZXQobmV4dCk7XG4gICAgfTtcbiAgICBWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzLnByb3RvdHlwZS5yZXNvbHZlQ29uc3RyYWludHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9IHRoaXMuZ2V0UHJvcHMoKSwgZHJhZ0NvbnN0cmFpbnRzID0gX2EuZHJhZ0NvbnN0cmFpbnRzLCBkcmFnRWxhc3RpYyA9IF9hLmRyYWdFbGFzdGljO1xuICAgICAgICB2YXIgbGF5b3V0ID0gKHRoaXMudmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uIHx8IHt9KS5sYXlvdXQ7XG4gICAgICAgIHZhciBwcmV2Q29uc3RyYWludHMgPSB0aGlzLmNvbnN0cmFpbnRzO1xuICAgICAgICBpZiAoZHJhZ0NvbnN0cmFpbnRzICYmIGlzUmVmT2JqZWN0KGRyYWdDb25zdHJhaW50cykpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb25zdHJhaW50cykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uc3RyYWludHMgPSB0aGlzLnJlc29sdmVSZWZDb25zdHJhaW50cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGRyYWdDb25zdHJhaW50cyAmJiBsYXlvdXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnN0cmFpbnRzID0gY2FsY1JlbGF0aXZlQ29uc3RyYWludHMobGF5b3V0LmFjdHVhbCwgZHJhZ0NvbnN0cmFpbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uc3RyYWludHMgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVsYXN0aWMgPSByZXNvbHZlRHJhZ0VsYXN0aWMoZHJhZ0VsYXN0aWMpO1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgd2UncmUgb3V0cHV0dGluZyB0byBleHRlcm5hbCBNb3Rpb25WYWx1ZXMsIHdlIHdhbnQgdG8gcmViYXNlIHRoZSBtZWFzdXJlZCBjb25zdHJhaW50c1xuICAgICAgICAgKiBmcm9tIHZpZXdwb3J0LXJlbGF0aXZlIHRvIGNvbXBvbmVudC1yZWxhdGl2ZS5cbiAgICAgICAgICovXG4gICAgICAgIGlmIChwcmV2Q29uc3RyYWludHMgIT09IHRoaXMuY29uc3RyYWludHMgJiZcbiAgICAgICAgICAgIGxheW91dCAmJlxuICAgICAgICAgICAgdGhpcy5jb25zdHJhaW50cyAmJlxuICAgICAgICAgICAgIXRoaXMuaGFzTXV0YXRlZENvbnN0cmFpbnRzKSB7XG4gICAgICAgICAgICBlYWNoQXhpcyhmdW5jdGlvbiAoYXhpcykge1xuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoYXhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY29uc3RyYWludHNbYXhpc10gPSByZWJhc2VBeGlzQ29uc3RyYWludHMobGF5b3V0LmFjdHVhbFtheGlzXSwgX3RoaXMuY29uc3RyYWludHNbYXhpc10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzLnByb3RvdHlwZS5yZXNvbHZlUmVmQ29uc3RyYWludHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMuZ2V0UHJvcHMoKSwgY29uc3RyYWludHMgPSBfYS5kcmFnQ29uc3RyYWludHMsIG9uTWVhc3VyZURyYWdDb25zdHJhaW50cyA9IF9hLm9uTWVhc3VyZURyYWdDb25zdHJhaW50cztcbiAgICAgICAgaWYgKCFjb25zdHJhaW50cyB8fCAhaXNSZWZPYmplY3QoY29uc3RyYWludHMpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgY29uc3RyYWludHNFbGVtZW50ID0gY29uc3RyYWludHMuY3VycmVudDtcbiAgICAgICAgaW52YXJpYW50KGNvbnN0cmFpbnRzRWxlbWVudCAhPT0gbnVsbCwgXCJJZiBgZHJhZ0NvbnN0cmFpbnRzYCBpcyBzZXQgYXMgYSBSZWFjdCByZWYsIHRoYXQgcmVmIG11c3QgYmUgcGFzc2VkIHRvIGFub3RoZXIgY29tcG9uZW50J3MgYHJlZmAgcHJvcC5cIik7XG4gICAgICAgIHZhciBwcm9qZWN0aW9uID0gdGhpcy52aXN1YWxFbGVtZW50LnByb2plY3Rpb247XG4gICAgICAgIC8vIFRPRE9cbiAgICAgICAgaWYgKCFwcm9qZWN0aW9uIHx8ICFwcm9qZWN0aW9uLmxheW91dClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGNvbnN0cmFpbnRzQm94ID0gbWVhc3VyZVBhZ2VCb3goY29uc3RyYWludHNFbGVtZW50LCBwcm9qZWN0aW9uLnJvb3QsIHRoaXMudmlzdWFsRWxlbWVudC5nZXRUcmFuc2Zvcm1QYWdlUG9pbnQoKSk7XG4gICAgICAgIHZhciBtZWFzdXJlZENvbnN0cmFpbnRzID0gY2FsY1ZpZXdwb3J0Q29uc3RyYWludHMocHJvamVjdGlvbi5sYXlvdXQuYWN0dWFsLCBjb25zdHJhaW50c0JveCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiB0aGVyZSdzIGFuIG9uTWVhc3VyZURyYWdDb25zdHJhaW50cyBsaXN0ZW5lciB3ZSBjYWxsIGl0IGFuZFxuICAgICAgICAgKiBpZiBkaWZmZXJlbnQgY29uc3RyYWludHMgYXJlIHJldHVybmVkLCBzZXQgY29uc3RyYWludHMgdG8gdGhhdFxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKG9uTWVhc3VyZURyYWdDb25zdHJhaW50cykge1xuICAgICAgICAgICAgdmFyIHVzZXJDb25zdHJhaW50cyA9IG9uTWVhc3VyZURyYWdDb25zdHJhaW50cyhjb252ZXJ0Qm94VG9Cb3VuZGluZ0JveChtZWFzdXJlZENvbnN0cmFpbnRzKSk7XG4gICAgICAgICAgICB0aGlzLmhhc011dGF0ZWRDb25zdHJhaW50cyA9ICEhdXNlckNvbnN0cmFpbnRzO1xuICAgICAgICAgICAgaWYgKHVzZXJDb25zdHJhaW50cykge1xuICAgICAgICAgICAgICAgIG1lYXN1cmVkQ29uc3RyYWludHMgPSBjb252ZXJ0Qm91bmRpbmdCb3hUb0JveCh1c2VyQ29uc3RyYWludHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZWFzdXJlZENvbnN0cmFpbnRzO1xuICAgIH07XG4gICAgVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5wcm90b3R5cGUuc3RhcnRBbmltYXRpb24gPSBmdW5jdGlvbiAodmVsb2NpdHkpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcy5nZXRQcm9wcygpLCBkcmFnID0gX2EuZHJhZywgZHJhZ01vbWVudHVtID0gX2EuZHJhZ01vbWVudHVtLCBkcmFnRWxhc3RpYyA9IF9hLmRyYWdFbGFzdGljLCBkcmFnVHJhbnNpdGlvbiA9IF9hLmRyYWdUcmFuc2l0aW9uLCBkcmFnU25hcFRvT3JpZ2luID0gX2EuZHJhZ1NuYXBUb09yaWdpbiwgb25EcmFnVHJhbnNpdGlvbkVuZCA9IF9hLm9uRHJhZ1RyYW5zaXRpb25FbmQ7XG4gICAgICAgIHZhciBjb25zdHJhaW50cyA9IHRoaXMuY29uc3RyYWludHMgfHwge307XG4gICAgICAgIHZhciBtb21lbnR1bUFuaW1hdGlvbnMgPSBlYWNoQXhpcyhmdW5jdGlvbiAoYXhpcykge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKCFzaG91bGREcmFnKGF4aXMsIGRyYWcsIF90aGlzLmN1cnJlbnREaXJlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHRyYW5zaXRpb24gPSAoX2EgPSBjb25zdHJhaW50cyA9PT0gbnVsbCB8fCBjb25zdHJhaW50cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uc3RyYWludHNbYXhpc10pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9O1xuICAgICAgICAgICAgaWYgKGRyYWdTbmFwVG9PcmlnaW4pXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbiA9IHsgbWluOiAwLCBtYXg6IDAgfTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogT3ZlcmRhbXAgdGhlIGJvdW5kYXJ5IHNwcmluZyBpZiBgZHJhZ0VsYXN0aWNgIGlzIGRpc2FibGVkLiBUaGVyZSdzIHN0aWxsIGEgZnJhbWVcbiAgICAgICAgICAgICAqIG9mIHNwcmluZyBhbmltYXRpb25zIHNvIHdlIHNob3VsZCBsb29rIGludG8gYWRkaW5nIGEgZGlzYWJsZSBzcHJpbmcgb3B0aW9uIHRvIGBpbmVydGlhYC5cbiAgICAgICAgICAgICAqIFdlIGNvdWxkIGRvIHNvbWV0aGluZyBoZXJlIHdoZXJlIHdlIGFmZmVjdCB0aGUgYGJvdW5jZVN0aWZmbmVzc2AgYW5kIGBib3VuY2VEYW1waW5nYFxuICAgICAgICAgICAgICogdXNpbmcgdGhlIHZhbHVlIG9mIGBkcmFnRWxhc3RpY2AuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhciBib3VuY2VTdGlmZm5lc3MgPSBkcmFnRWxhc3RpYyA/IDIwMCA6IDEwMDAwMDA7XG4gICAgICAgICAgICB2YXIgYm91bmNlRGFtcGluZyA9IGRyYWdFbGFzdGljID8gNDAgOiAxMDAwMDAwMDtcbiAgICAgICAgICAgIHZhciBpbmVydGlhID0gX19hc3NpZ24oX19hc3NpZ24oeyB0eXBlOiBcImluZXJ0aWFcIiwgdmVsb2NpdHk6IGRyYWdNb21lbnR1bSA/IHZlbG9jaXR5W2F4aXNdIDogMCwgYm91bmNlU3RpZmZuZXNzOiBib3VuY2VTdGlmZm5lc3MsIGJvdW5jZURhbXBpbmc6IGJvdW5jZURhbXBpbmcsIHRpbWVDb25zdGFudDogNzUwLCByZXN0RGVsdGE6IDEsIHJlc3RTcGVlZDogMTAgfSwgZHJhZ1RyYW5zaXRpb24pLCB0cmFuc2l0aW9uKTtcbiAgICAgICAgICAgIC8vIElmIHdlJ3JlIG5vdCBhbmltYXRpbmcgb24gYW4gZXh0ZXJuYWxseS1wcm92aWRlZCBgTW90aW9uVmFsdWVgIHdlIGNhbiB1c2UgdGhlXG4gICAgICAgICAgICAvLyBjb21wb25lbnQncyBhbmltYXRpb24gY29udHJvbHMgd2hpY2ggd2lsbCBoYW5kbGUgaW50ZXJhY3Rpb25zIHdpdGggd2hpbGVIb3ZlciAoZXRjKSxcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSB3ZSBqdXN0IGhhdmUgdG8gYW5pbWF0ZSB0aGUgYE1vdGlvblZhbHVlYCBpdHNlbGYuXG4gICAgICAgICAgICByZXR1cm4gX3RoaXMuc3RhcnRBeGlzVmFsdWVBbmltYXRpb24oYXhpcywgaW5lcnRpYSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBSdW4gYWxsIGFuaW1hdGlvbnMgYW5kIHRoZW4gcmVzb2x2ZSB0aGUgbmV3IGRyYWcgY29uc3RyYWludHMuXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChtb21lbnR1bUFuaW1hdGlvbnMpLnRoZW4ob25EcmFnVHJhbnNpdGlvbkVuZCk7XG4gICAgfTtcbiAgICBWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzLnByb3RvdHlwZS5zdGFydEF4aXNWYWx1ZUFuaW1hdGlvbiA9IGZ1bmN0aW9uIChheGlzLCB0cmFuc2l0aW9uKSB7XG4gICAgICAgIHZhciBheGlzVmFsdWUgPSB0aGlzLmdldEF4aXNNb3Rpb25WYWx1ZShheGlzKTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0QW5pbWF0aW9uKGF4aXMsIGF4aXNWYWx1ZSwgMCwgdHJhbnNpdGlvbik7XG4gICAgfTtcbiAgICBWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzLnByb3RvdHlwZS5zdG9wQW5pbWF0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlYWNoQXhpcyhmdW5jdGlvbiAoYXhpcykgeyByZXR1cm4gX3RoaXMuZ2V0QXhpc01vdGlvblZhbHVlKGF4aXMpLnN0b3AoKTsgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBEcmFnIHdvcmtzIGRpZmZlcmVudGx5IGRlcGVuZGluZyBvbiB3aGljaCBwcm9wcyBhcmUgcHJvdmlkZWQuXG4gICAgICpcbiAgICAgKiAtIElmIF9kcmFnWCBhbmQgX2RyYWdZIGFyZSBwcm92aWRlZCwgd2Ugb3V0cHV0IHRoZSBnZXN0dXJlIGRlbHRhIGRpcmVjdGx5IHRvIHRob3NlIG1vdGlvbiB2YWx1ZXMuXG4gICAgICogLSBPdGhlcndpc2UsIHdlIGFwcGx5IHRoZSBkZWx0YSB0byB0aGUgeC95IG1vdGlvbiB2YWx1ZXMuXG4gICAgICovXG4gICAgVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5wcm90b3R5cGUuZ2V0QXhpc01vdGlvblZhbHVlID0gZnVuY3Rpb24gKGF4aXMpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgdmFyIGRyYWdLZXkgPSBcIl9kcmFnXCIgKyBheGlzLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHZhciBleHRlcm5hbE1vdGlvblZhbHVlID0gdGhpcy52aXN1YWxFbGVtZW50LmdldFByb3BzKClbZHJhZ0tleV07XG4gICAgICAgIHJldHVybiBleHRlcm5hbE1vdGlvblZhbHVlXG4gICAgICAgICAgICA/IGV4dGVybmFsTW90aW9uVmFsdWVcbiAgICAgICAgICAgIDogdGhpcy52aXN1YWxFbGVtZW50LmdldFZhbHVlKGF4aXMsIChfYiA9IChfYSA9IHRoaXMudmlzdWFsRWxlbWVudC5nZXRQcm9wcygpLmluaXRpYWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVtheGlzXSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogMCk7XG4gICAgfTtcbiAgICBWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzLnByb3RvdHlwZS5zbmFwVG9DdXJzb3IgPSBmdW5jdGlvbiAocG9pbnQpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZWFjaEF4aXMoZnVuY3Rpb24gKGF4aXMpIHtcbiAgICAgICAgICAgIHZhciBkcmFnID0gX3RoaXMuZ2V0UHJvcHMoKS5kcmFnO1xuICAgICAgICAgICAgLy8gSWYgd2UncmUgbm90IGRyYWdnaW5nIHRoaXMgYXhpcywgZG8gYW4gZWFybHkgcmV0dXJuLlxuICAgICAgICAgICAgaWYgKCFzaG91bGREcmFnKGF4aXMsIGRyYWcsIF90aGlzLmN1cnJlbnREaXJlY3Rpb24pKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBwcm9qZWN0aW9uID0gX3RoaXMudmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uO1xuICAgICAgICAgICAgdmFyIGF4aXNWYWx1ZSA9IF90aGlzLmdldEF4aXNNb3Rpb25WYWx1ZShheGlzKTtcbiAgICAgICAgICAgIGlmIChwcm9qZWN0aW9uICYmIHByb2plY3Rpb24ubGF5b3V0KSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hID0gcHJvamVjdGlvbi5sYXlvdXQuYWN0dWFsW2F4aXNdLCBtaW4gPSBfYS5taW4sIG1heCA9IF9hLm1heDtcbiAgICAgICAgICAgICAgICBheGlzVmFsdWUuc2V0KHBvaW50W2F4aXNdIC0gbWl4KG1pbiwgbWF4LCAwLjUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoZSB2aWV3cG9ydCByZXNpemVzIHdlIHdhbnQgdG8gY2hlY2sgaWYgdGhlIG1lYXN1cmVkIGNvbnN0cmFpbnRzXG4gICAgICogaGF2ZSBjaGFuZ2VkIGFuZCwgaWYgc28sIHJlcG9zaXRpb24gdGhlIGVsZW1lbnQgd2l0aGluIHRob3NlIG5ldyBjb25zdHJhaW50c1xuICAgICAqIHJlbGF0aXZlIHRvIHdoZXJlIGl0IHdhcyBiZWZvcmUgdGhlIHJlc2l6ZS5cbiAgICAgKi9cbiAgICBWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzLnByb3RvdHlwZS5zY2FsZVBvc2l0aW9uV2l0aGluQ29uc3RyYWludHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdmFyIF9iID0gdGhpcy5nZXRQcm9wcygpLCBkcmFnID0gX2IuZHJhZywgZHJhZ0NvbnN0cmFpbnRzID0gX2IuZHJhZ0NvbnN0cmFpbnRzO1xuICAgICAgICB2YXIgcHJvamVjdGlvbiA9IHRoaXMudmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uO1xuICAgICAgICBpZiAoIWlzUmVmT2JqZWN0KGRyYWdDb25zdHJhaW50cykgfHwgIXByb2plY3Rpb24gfHwgIXRoaXMuY29uc3RyYWludHMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTdG9wIGN1cnJlbnQgYW5pbWF0aW9ucyBhcyB0aGVyZSBjYW4gYmUgdmlzdWFsIGdsaXRjaGluZyBpZiB3ZSB0cnkgdG8gZG9cbiAgICAgICAgICogdGhpcyBtaWQtYW5pbWF0aW9uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnN0b3BBbmltYXRpb24oKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlY29yZCB0aGUgcmVsYXRpdmUgcG9zaXRpb24gb2YgdGhlIGRyYWdnZWQgZWxlbWVudCByZWxhdGl2ZSB0byB0aGVcbiAgICAgICAgICogY29uc3RyYWludHMgYm94IGFuZCBzYXZlIGFzIGEgcHJvZ3Jlc3MgdmFsdWUuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgYm94UHJvZ3Jlc3MgPSB7IHg6IDAsIHk6IDAgfTtcbiAgICAgICAgZWFjaEF4aXMoZnVuY3Rpb24gKGF4aXMpIHtcbiAgICAgICAgICAgIHZhciBheGlzVmFsdWUgPSBfdGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoYXhpcyk7XG4gICAgICAgICAgICBpZiAoYXhpc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhdGVzdCA9IGF4aXNWYWx1ZS5nZXQoKTtcbiAgICAgICAgICAgICAgICBib3hQcm9ncmVzc1theGlzXSA9IGNhbGNPcmlnaW4oeyBtaW46IGxhdGVzdCwgbWF4OiBsYXRlc3QgfSwgX3RoaXMuY29uc3RyYWludHNbYXhpc10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVwZGF0ZSB0aGUgbGF5b3V0IG9mIHRoaXMgZWxlbWVudCBhbmQgcmVzb2x2ZSB0aGUgbGF0ZXN0IGRyYWcgY29uc3RyYWludHNcbiAgICAgICAgICovXG4gICAgICAgIHZhciB0cmFuc2Zvcm1UZW1wbGF0ZSA9IHRoaXMudmlzdWFsRWxlbWVudC5nZXRQcm9wcygpLnRyYW5zZm9ybVRlbXBsYXRlO1xuICAgICAgICB0aGlzLnZpc3VhbEVsZW1lbnQuZ2V0SW5zdGFuY2UoKS5zdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1UZW1wbGF0ZVxuICAgICAgICAgICAgPyB0cmFuc2Zvcm1UZW1wbGF0ZSh7fSwgXCJcIilcbiAgICAgICAgICAgIDogXCJub25lXCI7XG4gICAgICAgIChfYSA9IHByb2plY3Rpb24ucm9vdCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnVwZGF0ZVNjcm9sbCgpO1xuICAgICAgICBwcm9qZWN0aW9uLnVwZGF0ZUxheW91dCgpO1xuICAgICAgICB0aGlzLnJlc29sdmVDb25zdHJhaW50cygpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRm9yIGVhY2ggYXhpcywgY2FsY3VsYXRlIHRoZSBjdXJyZW50IHByb2dyZXNzIG9mIHRoZSBsYXlvdXQgYXhpc1xuICAgICAgICAgKiB3aXRoaW4gdGhlIG5ldyBjb25zdHJhaW50cy5cbiAgICAgICAgICovXG4gICAgICAgIGVhY2hBeGlzKGZ1bmN0aW9uIChheGlzKSB7XG4gICAgICAgICAgICBpZiAoIXNob3VsZERyYWcoYXhpcywgZHJhZywgbnVsbCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBDYWxjdWxhdGUgYSBuZXcgdHJhbnNmb3JtIGJhc2VkIG9uIHRoZSBwcmV2aW91cyBib3ggcHJvZ3Jlc3NcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdmFyIGF4aXNWYWx1ZSA9IF90aGlzLmdldEF4aXNNb3Rpb25WYWx1ZShheGlzKTtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLmNvbnN0cmFpbnRzW2F4aXNdLCBtaW4gPSBfYS5taW4sIG1heCA9IF9hLm1heDtcbiAgICAgICAgICAgIGF4aXNWYWx1ZS5zZXQobWl4KG1pbiwgbWF4LCBib3hQcm9ncmVzc1theGlzXSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHMucHJvdG90eXBlLmFkZExpc3RlbmVycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBlbGVtZW50RHJhZ0NvbnRyb2xzLnNldCh0aGlzLnZpc3VhbEVsZW1lbnQsIHRoaXMpO1xuICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMudmlzdWFsRWxlbWVudC5nZXRJbnN0YW5jZSgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQXR0YWNoIGEgcG9pbnRlcmRvd24gZXZlbnQgbGlzdGVuZXIgb24gdGhpcyBET00gZWxlbWVudCB0byBpbml0aWF0ZSBkcmFnIHRyYWNraW5nLlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIHN0b3BQb2ludGVyTGlzdGVuZXIgPSBhZGRQb2ludGVyRXZlbnQoZWxlbWVudCwgXCJwb2ludGVyZG93blwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLmdldFByb3BzKCksIGRyYWcgPSBfYS5kcmFnLCBfYiA9IF9hLmRyYWdMaXN0ZW5lciwgZHJhZ0xpc3RlbmVyID0gX2IgPT09IHZvaWQgMCA/IHRydWUgOiBfYjtcbiAgICAgICAgICAgIGRyYWcgJiYgZHJhZ0xpc3RlbmVyICYmIF90aGlzLnN0YXJ0KGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBtZWFzdXJlRHJhZ0NvbnN0cmFpbnRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGRyYWdDb25zdHJhaW50cyA9IF90aGlzLmdldFByb3BzKCkuZHJhZ0NvbnN0cmFpbnRzO1xuICAgICAgICAgICAgaWYgKGlzUmVmT2JqZWN0KGRyYWdDb25zdHJhaW50cykpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5jb25zdHJhaW50cyA9IF90aGlzLnJlc29sdmVSZWZDb25zdHJhaW50cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgcHJvamVjdGlvbiA9IHRoaXMudmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uO1xuICAgICAgICB2YXIgc3RvcE1lYXN1cmVMYXlvdXRMaXN0ZW5lciA9IHByb2plY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcihcIm1lYXN1cmVcIiwgbWVhc3VyZURyYWdDb25zdHJhaW50cyk7XG4gICAgICAgIGlmIChwcm9qZWN0aW9uICYmICFwcm9qZWN0aW9uLmxheW91dCkge1xuICAgICAgICAgICAgKF9hID0gcHJvamVjdGlvbi5yb290KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudXBkYXRlU2Nyb2xsKCk7XG4gICAgICAgICAgICBwcm9qZWN0aW9uLnVwZGF0ZUxheW91dCgpO1xuICAgICAgICB9XG4gICAgICAgIG1lYXN1cmVEcmFnQ29uc3RyYWludHMoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEF0dGFjaCBhIHdpbmRvdyByZXNpemUgbGlzdGVuZXIgdG8gc2NhbGUgdGhlIGRyYWdnYWJsZSB0YXJnZXQgd2l0aGluIGl0cyBkZWZpbmVkXG4gICAgICAgICAqIGNvbnN0cmFpbnRzIGFzIHRoZSB3aW5kb3cgcmVzaXplcy5cbiAgICAgICAgICovXG4gICAgICAgIHZhciBzdG9wUmVzaXplTGlzdGVuZXIgPSBhZGREb21FdmVudCh3aW5kb3csIFwicmVzaXplXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5zY2FsZVBvc2l0aW9uV2l0aGluQ29uc3RyYWludHMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiB0aGUgZWxlbWVudCdzIGxheW91dCBjaGFuZ2VzLCBjYWxjdWxhdGUgdGhlIGRlbHRhIGFuZCBhcHBseSB0aGF0IHRvXG4gICAgICAgICAqIHRoZSBkcmFnIGdlc3R1cmUncyBvcmlnaW4gcG9pbnQuXG4gICAgICAgICAqL1xuICAgICAgICBwcm9qZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoXCJkaWRVcGRhdGVcIiwgKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgdmFyIGRlbHRhID0gX2EuZGVsdGEsIGhhc0xheW91dENoYW5nZWQgPSBfYS5oYXNMYXlvdXRDaGFuZ2VkO1xuICAgICAgICAgICAgaWYgKF90aGlzLmlzRHJhZ2dpbmcgJiYgaGFzTGF5b3V0Q2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIGVhY2hBeGlzKGZ1bmN0aW9uIChheGlzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtb3Rpb25WYWx1ZSA9IF90aGlzLmdldEF4aXNNb3Rpb25WYWx1ZShheGlzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtb3Rpb25WYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMub3JpZ2luUG9pbnRbYXhpc10gKz0gZGVsdGFbYXhpc10udHJhbnNsYXRlO1xuICAgICAgICAgICAgICAgICAgICBtb3Rpb25WYWx1ZS5zZXQobW90aW9uVmFsdWUuZ2V0KCkgKyBkZWx0YVtheGlzXS50cmFuc2xhdGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIF90aGlzLnZpc3VhbEVsZW1lbnQuc3luY1JlbmRlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzdG9wUmVzaXplTGlzdGVuZXIoKTtcbiAgICAgICAgICAgIHN0b3BQb2ludGVyTGlzdGVuZXIoKTtcbiAgICAgICAgICAgIHN0b3BNZWFzdXJlTGF5b3V0TGlzdGVuZXIoKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHMucHJvdG90eXBlLmdldFByb3BzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJvcHMgPSB0aGlzLnZpc3VhbEVsZW1lbnQuZ2V0UHJvcHMoKTtcbiAgICAgICAgdmFyIF9hID0gcHJvcHMuZHJhZywgZHJhZyA9IF9hID09PSB2b2lkIDAgPyBmYWxzZSA6IF9hLCBfYiA9IHByb3BzLmRyYWdEaXJlY3Rpb25Mb2NrLCBkcmFnRGlyZWN0aW9uTG9jayA9IF9iID09PSB2b2lkIDAgPyBmYWxzZSA6IF9iLCBfYyA9IHByb3BzLmRyYWdQcm9wYWdhdGlvbiwgZHJhZ1Byb3BhZ2F0aW9uID0gX2MgPT09IHZvaWQgMCA/IGZhbHNlIDogX2MsIF9kID0gcHJvcHMuZHJhZ0NvbnN0cmFpbnRzLCBkcmFnQ29uc3RyYWludHMgPSBfZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfZCwgX2UgPSBwcm9wcy5kcmFnRWxhc3RpYywgZHJhZ0VsYXN0aWMgPSBfZSA9PT0gdm9pZCAwID8gZGVmYXVsdEVsYXN0aWMgOiBfZSwgX2YgPSBwcm9wcy5kcmFnTW9tZW50dW0sIGRyYWdNb21lbnR1bSA9IF9mID09PSB2b2lkIDAgPyB0cnVlIDogX2Y7XG4gICAgICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcHJvcHMpLCB7IGRyYWc6IGRyYWcsIGRyYWdEaXJlY3Rpb25Mb2NrOiBkcmFnRGlyZWN0aW9uTG9jaywgZHJhZ1Byb3BhZ2F0aW9uOiBkcmFnUHJvcGFnYXRpb24sIGRyYWdDb25zdHJhaW50czogZHJhZ0NvbnN0cmFpbnRzLCBkcmFnRWxhc3RpYzogZHJhZ0VsYXN0aWMsIGRyYWdNb21lbnR1bTogZHJhZ01vbWVudHVtIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHM7XG59KCkpO1xuZnVuY3Rpb24gc2hvdWxkRHJhZyhkaXJlY3Rpb24sIGRyYWcsIGN1cnJlbnREaXJlY3Rpb24pIHtcbiAgICByZXR1cm4gKChkcmFnID09PSB0cnVlIHx8IGRyYWcgPT09IGRpcmVjdGlvbikgJiZcbiAgICAgICAgKGN1cnJlbnREaXJlY3Rpb24gPT09IG51bGwgfHwgY3VycmVudERpcmVjdGlvbiA9PT0gZGlyZWN0aW9uKSk7XG59XG4vKipcbiAqIEJhc2VkIG9uIGFuIHgveSBvZmZzZXQgZGV0ZXJtaW5lIHRoZSBjdXJyZW50IGRyYWcgZGlyZWN0aW9uLiBJZiBib3RoIGF4aXMnIG9mZnNldHMgYXJlIGxvd2VyXG4gKiB0aGFuIHRoZSBwcm92aWRlZCB0aHJlc2hvbGQsIHJldHVybiBgbnVsbGAuXG4gKlxuICogQHBhcmFtIG9mZnNldCAtIFRoZSB4L3kgb2Zmc2V0IGZyb20gb3JpZ2luLlxuICogQHBhcmFtIGxvY2tUaHJlc2hvbGQgLSAoT3B0aW9uYWwpIC0gdGhlIG1pbmltdW0gYWJzb2x1dGUgb2Zmc2V0IGJlZm9yZSB3ZSBjYW4gZGV0ZXJtaW5lIGEgZHJhZyBkaXJlY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGdldEN1cnJlbnREaXJlY3Rpb24ob2Zmc2V0LCBsb2NrVGhyZXNob2xkKSB7XG4gICAgaWYgKGxvY2tUaHJlc2hvbGQgPT09IHZvaWQgMCkgeyBsb2NrVGhyZXNob2xkID0gMTA7IH1cbiAgICB2YXIgZGlyZWN0aW9uID0gbnVsbDtcbiAgICBpZiAoTWF0aC5hYnMob2Zmc2V0LnkpID4gbG9ja1RocmVzaG9sZCkge1xuICAgICAgICBkaXJlY3Rpb24gPSBcInlcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAoTWF0aC5hYnMob2Zmc2V0LngpID4gbG9ja1RocmVzaG9sZCkge1xuICAgICAgICBkaXJlY3Rpb24gPSBcInhcIjtcbiAgICB9XG4gICAgcmV0dXJuIGRpcmVjdGlvbjtcbn1cblxuZXhwb3J0IHsgVmlzdWFsRWxlbWVudERyYWdDb250cm9scywgZWxlbWVudERyYWdDb250cm9scyB9O1xuIiwiaW1wb3J0IHsgdXNlRHJhZyB9IGZyb20gJy4uLy4uL2dlc3R1cmVzL2RyYWcvdXNlLWRyYWcubWpzJztcbmltcG9ydCB7IHVzZVBhbkdlc3R1cmUgfSBmcm9tICcuLi8uLi9nZXN0dXJlcy91c2UtcGFuLWdlc3R1cmUubWpzJztcbmltcG9ydCB7IG1ha2VSZW5kZXJsZXNzQ29tcG9uZW50IH0gZnJvbSAnLi4vdXRpbHMvbWFrZS1yZW5kZXJsZXNzLWNvbXBvbmVudC5tanMnO1xuXG52YXIgZHJhZyA9IHtcbiAgICBwYW46IG1ha2VSZW5kZXJsZXNzQ29tcG9uZW50KHVzZVBhbkdlc3R1cmUpLFxuICAgIGRyYWc6IG1ha2VSZW5kZXJsZXNzQ29tcG9uZW50KHVzZURyYWcpLFxufTtcblxuZXhwb3J0IHsgZHJhZyB9O1xuIiwiaW1wb3J0IHsgdXNlUmVmLCB1c2VDb250ZXh0LCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBNb3Rpb25Db25maWdDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC9Nb3Rpb25Db25maWdDb250ZXh0Lm1qcyc7XG5pbXBvcnQgeyB1c2VVbm1vdW50RWZmZWN0IH0gZnJvbSAnLi4vdXRpbHMvdXNlLXVubW91bnQtZWZmZWN0Lm1qcyc7XG5pbXBvcnQgeyB1c2VQb2ludGVyRXZlbnQgfSBmcm9tICcuLi9ldmVudHMvdXNlLXBvaW50ZXItZXZlbnQubWpzJztcbmltcG9ydCB7IFBhblNlc3Npb24gfSBmcm9tICcuL1BhblNlc3Npb24ubWpzJztcblxuLyoqXG4gKlxuICogQHBhcmFtIGhhbmRsZXJzIC1cbiAqIEBwYXJhbSByZWYgLVxuICpcbiAqIEBwcml2YXRlUmVtYXJrc1xuICogQ3VycmVudGx5IHRoaXMgc2V0cyBuZXcgcGFuIGdlc3R1cmUgZnVuY3Rpb25zIGV2ZXJ5IHJlbmRlci4gVGhlIG1lbW8gcm91dGUgaGFzIGJlZW4gZXhwbG9yZWRcbiAqIGluIHRoZSBwYXN0IGJ1dCB1bHRpbWF0ZWx5IHdlJ3JlIHN0aWxsIGNyZWF0aW5nIG5ldyBmdW5jdGlvbnMgZXZlcnkgcmVuZGVyLiBBbiBvcHRpbWlzYXRpb25cbiAqIHRvIGV4cGxvcmUgaXMgY3JlYXRpbmcgdGhlIHBhbiBnZXN0dXJlcyBhbmQgbG9hZGluZyB0aGVtIGludG8gYSBgcmVmYC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gdXNlUGFuR2VzdHVyZShfYSkge1xuICAgIHZhciBvblBhbiA9IF9hLm9uUGFuLCBvblBhblN0YXJ0ID0gX2Eub25QYW5TdGFydCwgb25QYW5FbmQgPSBfYS5vblBhbkVuZCwgb25QYW5TZXNzaW9uU3RhcnQgPSBfYS5vblBhblNlc3Npb25TdGFydCwgdmlzdWFsRWxlbWVudCA9IF9hLnZpc3VhbEVsZW1lbnQ7XG4gICAgdmFyIGhhc1BhbkV2ZW50cyA9IG9uUGFuIHx8IG9uUGFuU3RhcnQgfHwgb25QYW5FbmQgfHwgb25QYW5TZXNzaW9uU3RhcnQ7XG4gICAgdmFyIHBhblNlc3Npb24gPSB1c2VSZWYobnVsbCk7XG4gICAgdmFyIHRyYW5zZm9ybVBhZ2VQb2ludCA9IHVzZUNvbnRleHQoTW90aW9uQ29uZmlnQ29udGV4dCkudHJhbnNmb3JtUGFnZVBvaW50O1xuICAgIHZhciBoYW5kbGVycyA9IHtcbiAgICAgICAgb25TZXNzaW9uU3RhcnQ6IG9uUGFuU2Vzc2lvblN0YXJ0LFxuICAgICAgICBvblN0YXJ0OiBvblBhblN0YXJ0LFxuICAgICAgICBvbk1vdmU6IG9uUGFuLFxuICAgICAgICBvbkVuZDogZnVuY3Rpb24gKGV2ZW50LCBpbmZvKSB7XG4gICAgICAgICAgICBwYW5TZXNzaW9uLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICAgICAgb25QYW5FbmQgJiYgb25QYW5FbmQoZXZlbnQsIGluZm8pO1xuICAgICAgICB9LFxuICAgIH07XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHBhblNlc3Npb24uY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcGFuU2Vzc2lvbi5jdXJyZW50LnVwZGF0ZUhhbmRsZXJzKGhhbmRsZXJzKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGZ1bmN0aW9uIG9uUG9pbnRlckRvd24oZXZlbnQpIHtcbiAgICAgICAgcGFuU2Vzc2lvbi5jdXJyZW50ID0gbmV3IFBhblNlc3Npb24oZXZlbnQsIGhhbmRsZXJzLCB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1QYWdlUG9pbnQ6IHRyYW5zZm9ybVBhZ2VQb2ludCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHVzZVBvaW50ZXJFdmVudCh2aXN1YWxFbGVtZW50LCBcInBvaW50ZXJkb3duXCIsIGhhc1BhbkV2ZW50cyAmJiBvblBvaW50ZXJEb3duKTtcbiAgICB1c2VVbm1vdW50RWZmZWN0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBhblNlc3Npb24uY3VycmVudCAmJiBwYW5TZXNzaW9uLmN1cnJlbnQuZW5kKCk7IH0pO1xufVxuXG5leHBvcnQgeyB1c2VQYW5HZXN0dXJlIH07XG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzIH0gZnJvbSAnLi9WaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzLm1qcyc7XG5pbXBvcnQgeyB1c2VDb25zdGFudCB9IGZyb20gJy4uLy4uL3V0aWxzL3VzZS1jb25zdGFudC5tanMnO1xuXG4vKipcbiAqIEEgaG9vayB0aGF0IGFsbG93cyBhbiBlbGVtZW50IHRvIGJlIGRyYWdnZWQuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHVzZURyYWcocHJvcHMpIHtcbiAgICB2YXIgZ3JvdXBEcmFnQ29udHJvbHMgPSBwcm9wcy5kcmFnQ29udHJvbHMsIHZpc3VhbEVsZW1lbnQgPSBwcm9wcy52aXN1YWxFbGVtZW50O1xuICAgIHZhciBkcmFnQ29udHJvbHMgPSB1c2VDb25zdGFudChmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgVmlzdWFsRWxlbWVudERyYWdDb250cm9scyh2aXN1YWxFbGVtZW50KTsgfSk7XG4gICAgLy8gSWYgd2UndmUgYmVlbiBwcm92aWRlZCBhIERyYWdDb250cm9scyBmb3IgbWFudWFsIGNvbnRyb2wgb3ZlciB0aGUgZHJhZyBnZXN0dXJlLFxuICAgIC8vIHN1YnNjcmliZSB0aGlzIGNvbXBvbmVudCB0byBpdCBvbiBtb3VudC5cbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkgeyByZXR1cm4gZ3JvdXBEcmFnQ29udHJvbHMgJiYgZ3JvdXBEcmFnQ29udHJvbHMuc3Vic2NyaWJlKGRyYWdDb250cm9scyk7IH0sIFtkcmFnQ29udHJvbHMsIGdyb3VwRHJhZ0NvbnRyb2xzXSk7XG4gICAgLy8gQXBwbHkgdGhlIGV2ZW50IGxpc3RlbmVycyB0byB0aGUgZWxlbWVudFxuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7IHJldHVybiBkcmFnQ29udHJvbHMuYWRkTGlzdGVuZXJzKCk7IH0sIFtkcmFnQ29udHJvbHNdKTtcbn1cblxuZXhwb3J0IHsgdXNlRHJhZyB9O1xuIiwiaW1wb3J0IHsgX19zcHJlYWRBcnJheSwgX19yZWFkIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uTWFuYWdlciB9IGZyb20gJy4uLy4uL3V0aWxzL3N1YnNjcmlwdGlvbi1tYW5hZ2VyLm1qcyc7XG5cbnZhciBuYW1lcyA9IFtcbiAgICBcIkxheW91dE1lYXN1cmVcIixcbiAgICBcIkJlZm9yZUxheW91dE1lYXN1cmVcIixcbiAgICBcIkxheW91dFVwZGF0ZVwiLFxuICAgIFwiVmlld3BvcnRCb3hVcGRhdGVcIixcbiAgICBcIlVwZGF0ZVwiLFxuICAgIFwiUmVuZGVyXCIsXG4gICAgXCJBbmltYXRpb25Db21wbGV0ZVwiLFxuICAgIFwiTGF5b3V0QW5pbWF0aW9uQ29tcGxldGVcIixcbiAgICBcIkFuaW1hdGlvblN0YXJ0XCIsXG4gICAgXCJMYXlvdXRBbmltYXRpb25TdGFydFwiLFxuICAgIFwiU2V0QXhpc1RhcmdldFwiLFxuICAgIFwiVW5tb3VudFwiLFxuXTtcbmZ1bmN0aW9uIGNyZWF0ZUxpZmVjeWNsZXMoKSB7XG4gICAgdmFyIG1hbmFnZXJzID0gbmFtZXMubWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb25NYW5hZ2VyKCk7IH0pO1xuICAgIHZhciBwcm9wU3Vic2NyaXB0aW9ucyA9IHt9O1xuICAgIHZhciBsaWZlY3ljbGVzID0ge1xuICAgICAgICBjbGVhckFsbExpc3RlbmVyczogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWFuYWdlcnMuZm9yRWFjaChmdW5jdGlvbiAobWFuYWdlcikgeyByZXR1cm4gbWFuYWdlci5jbGVhcigpOyB9KTsgfSxcbiAgICAgICAgdXBkYXRlUHJvcExpc3RlbmVyczogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgICAgICBuYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIHZhciBvbiA9IFwib25cIiArIG5hbWU7XG4gICAgICAgICAgICAgICAgdmFyIHByb3BMaXN0ZW5lciA9IHByb3BzW29uXTtcbiAgICAgICAgICAgICAgICAvLyBVbnN1YnNjcmliZSBleGlzdGluZyBzdWJzY3JpcHRpb25cbiAgICAgICAgICAgICAgICAoX2EgPSBwcm9wU3Vic2NyaXB0aW9uc1tuYW1lXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwocHJvcFN1YnNjcmlwdGlvbnMpO1xuICAgICAgICAgICAgICAgIC8vIEFkZCBuZXcgc3Vic2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgaWYgKHByb3BMaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgICAgICBwcm9wU3Vic2NyaXB0aW9uc1tuYW1lXSA9IGxpZmVjeWNsZXNbb25dKHByb3BMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICBtYW5hZ2Vycy5mb3JFYWNoKGZ1bmN0aW9uIChtYW5hZ2VyLCBpKSB7XG4gICAgICAgIGxpZmVjeWNsZXNbXCJvblwiICsgbmFtZXNbaV1dID0gZnVuY3Rpb24gKGhhbmRsZXIpIHsgcmV0dXJuIG1hbmFnZXIuYWRkKGhhbmRsZXIpOyB9O1xuICAgICAgICBsaWZlY3ljbGVzW1wibm90aWZ5XCIgKyBuYW1lc1tpXV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbWFuYWdlci5ub3RpZnkuYXBwbHkobWFuYWdlciwgX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGFyZ3MpLCBmYWxzZSkpO1xuICAgICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiBsaWZlY3ljbGVzO1xufVxuXG5leHBvcnQgeyBjcmVhdGVMaWZlY3ljbGVzIH07XG4iLCJpbXBvcnQgeyBfX2Fzc2lnbiwgX19zcHJlYWRBcnJheSwgX19yZWFkIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHN5bmMsIHsgY2FuY2VsU3luYyB9IGZyb20gJ2ZyYW1lc3luYyc7XG5pbXBvcnQgeyBtb3Rpb25WYWx1ZSB9IGZyb20gJy4uL3ZhbHVlL2luZGV4Lm1qcyc7XG5pbXBvcnQgeyBpc01vdGlvblZhbHVlIH0gZnJvbSAnLi4vdmFsdWUvdXRpbHMvaXMtbW90aW9uLXZhbHVlLm1qcyc7XG5pbXBvcnQgeyB2YXJpYW50UHJpb3JpdHlPcmRlciB9IGZyb20gJy4vdXRpbHMvYW5pbWF0aW9uLXN0YXRlLm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVMaWZlY3ljbGVzIH0gZnJvbSAnLi91dGlscy9saWZlY3ljbGVzLm1qcyc7XG5pbXBvcnQgeyB1cGRhdGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMgfSBmcm9tICcuL3V0aWxzL21vdGlvbi12YWx1ZXMubWpzJztcbmltcG9ydCB7IGNoZWNrSWZDb250cm9sbGluZ1ZhcmlhbnRzLCBjaGVja0lmVmFyaWFudE5vZGUsIGlzVmFyaWFudExhYmVsIH0gZnJvbSAnLi91dGlscy92YXJpYW50cy5tanMnO1xuXG52YXIgdmlzdWFsRWxlbWVudCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBfYiA9IF9hLnRyZWVUeXBlLCB0cmVlVHlwZSA9IF9iID09PSB2b2lkIDAgPyBcIlwiIDogX2IsIGJ1aWxkID0gX2EuYnVpbGQsIGdldEJhc2VUYXJnZXQgPSBfYS5nZXRCYXNlVGFyZ2V0LCBtYWtlVGFyZ2V0QW5pbWF0YWJsZSA9IF9hLm1ha2VUYXJnZXRBbmltYXRhYmxlLCBtZWFzdXJlVmlld3BvcnRCb3ggPSBfYS5tZWFzdXJlVmlld3BvcnRCb3gsIHJlbmRlckluc3RhbmNlID0gX2EucmVuZGVyLCByZWFkVmFsdWVGcm9tSW5zdGFuY2UgPSBfYS5yZWFkVmFsdWVGcm9tSW5zdGFuY2UsIHJlbW92ZVZhbHVlRnJvbVJlbmRlclN0YXRlID0gX2EucmVtb3ZlVmFsdWVGcm9tUmVuZGVyU3RhdGUsIHNvcnROb2RlUG9zaXRpb24gPSBfYS5zb3J0Tm9kZVBvc2l0aW9uLCBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMgPSBfYS5zY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChfYSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgcGFyZW50ID0gX2EucGFyZW50LCBwcm9wcyA9IF9hLnByb3BzLCBwcmVzZW5jZUlkID0gX2EucHJlc2VuY2VJZCwgYmxvY2tJbml0aWFsQW5pbWF0aW9uID0gX2EuYmxvY2tJbml0aWFsQW5pbWF0aW9uLCB2aXN1YWxTdGF0ZSA9IF9hLnZpc3VhbFN0YXRlLCBzaG91bGRSZWR1Y2VNb3Rpb24gPSBfYS5zaG91bGRSZWR1Y2VNb3Rpb247XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHZhciBpc01vdW50ZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGxhdGVzdFZhbHVlcyA9IHZpc3VhbFN0YXRlLmxhdGVzdFZhbHVlcywgcmVuZGVyU3RhdGUgPSB2aXN1YWxTdGF0ZS5yZW5kZXJTdGF0ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBpbnN0YW5jZSBvZiB0aGUgcmVuZGVyLXNwZWNpZmljIG5vZGUgdGhhdCB3aWxsIGJlIGh5ZHJhdGVkIGJ5IHRoZVxuICAgICAgICAgKiBleHBvc2VkIFJlYWN0IHJlZi4gU28gZm9yIGV4YW1wbGUsIHRoaXMgdmlzdWFsIGVsZW1lbnQgY2FuIGhvc3QgYVxuICAgICAgICAgKiBIVE1MRWxlbWVudCwgcGxhaW4gb2JqZWN0LCBvciBUaHJlZS5qcyBvYmplY3QuIFRoZSBmdW5jdGlvbnMgcHJvdmlkZWRcbiAgICAgICAgICogaW4gVmlzdWFsRWxlbWVudENvbmZpZyBhbGxvdyB1cyB0byBpbnRlcmZhY2Ugd2l0aCB0aGlzIGluc3RhbmNlLlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGluc3RhbmNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogTWFuYWdlcyB0aGUgc3Vic2NyaXB0aW9ucyBmb3IgYSB2aXN1YWwgZWxlbWVudCdzIGxpZmVjeWNsZSwgZm9yIGluc3RhbmNlXG4gICAgICAgICAqIG9uUmVuZGVyXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgbGlmZWN5Y2xlcyA9IGNyZWF0ZUxpZmVjeWNsZXMoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgbWFwIG9mIGFsbCBtb3Rpb24gdmFsdWVzIGF0dGFjaGVkIHRvIHRoaXMgdmlzdWFsIGVsZW1lbnQuIE1vdGlvblxuICAgICAgICAgKiB2YWx1ZXMgYXJlIHNvdXJjZSBvZiB0cnV0aCBmb3IgYW55IGdpdmVuIGFuaW1hdGVkIHZhbHVlLiBBIG1vdGlvblxuICAgICAgICAgKiB2YWx1ZSBtaWdodCBiZSBwcm92aWRlZCBleHRlcm5hbGx5IGJ5IHRoZSBjb21wb25lbnQgdmlhIHByb3BzLlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIHZhbHVlcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgbWFwIG9mIGV2ZXJ5IHN1YnNjcmlwdGlvbiB0aGF0IGJpbmRzIHRoZSBwcm92aWRlZCBvciBnZW5lcmF0ZWRcbiAgICAgICAgICogbW90aW9uIHZhbHVlcyBvbkNoYW5nZSBsaXN0ZW5lcnMgdG8gdGhpcyB2aXN1YWwgZWxlbWVudC5cbiAgICAgICAgICovXG4gICAgICAgIHZhciB2YWx1ZVN1YnNjcmlwdGlvbnMgPSBuZXcgTWFwKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgcHJldmlvdXNseS1wcm92aWRlZCBtb3Rpb24gdmFsdWVzIGFzIHJldHVybmVkXG4gICAgICAgICAqIGZyb20gc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzLiBXZSB1c2UgdGhlIGtleXMgaW4gaGVyZSB0byBkZXRlcm1pbmVcbiAgICAgICAgICogaWYgYW55IG1vdGlvbiB2YWx1ZXMgbmVlZCB0byBiZSByZW1vdmVkIGFmdGVyIHByb3BzIGFyZSB1cGRhdGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIHByZXZNb3Rpb25WYWx1ZXMgPSB7fTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdoZW4gdmFsdWVzIGFyZSByZW1vdmVkIGZyb20gYWxsIGFuaW1hdGlvbiBwcm9wcyB3ZSBuZWVkIHRvIHNlYXJjaFxuICAgICAgICAgKiBmb3IgYSBmYWxsYmFjayB2YWx1ZSB0byBhbmltYXRlIHRvLiBUaGVzZSB2YWx1ZXMgYXJlIHRyYWNrZWQgaW4gYmFzZVRhcmdldC5cbiAgICAgICAgICovXG4gICAgICAgIHZhciBiYXNlVGFyZ2V0ID0gX19hc3NpZ24oe30sIGxhdGVzdFZhbHVlcyk7XG4gICAgICAgIC8vIEludGVybmFsIG1ldGhvZHMgPT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBPbiBtb3VudCwgdGhpcyB3aWxsIGJlIGh5ZHJhdGVkIHdpdGggYSBjYWxsYmFjayB0byBkaXNjb25uZWN0XG4gICAgICAgICAqIHRoaXMgdmlzdWFsIGVsZW1lbnQgZnJvbSBpdHMgcGFyZW50IG9uIHVubW91bnQuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgcmVtb3ZlRnJvbVZhcmlhbnRUcmVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUmVuZGVyIHRoZSBlbGVtZW50IHdpdGggdGhlIGxhdGVzdCBzdHlsZXMgb3V0c2lkZSBvZiB0aGUgUmVhY3RcbiAgICAgICAgICogcmVuZGVyIGxpZmVjeWNsZVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICAgICAgaWYgKCFpbnN0YW5jZSB8fCAhaXNNb3VudGVkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRyaWdnZXJCdWlsZCgpO1xuICAgICAgICAgICAgcmVuZGVySW5zdGFuY2UoaW5zdGFuY2UsIHJlbmRlclN0YXRlLCBwcm9wcy5zdHlsZSwgZWxlbWVudC5wcm9qZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0cmlnZ2VyQnVpbGQoKSB7XG4gICAgICAgICAgICBidWlsZChlbGVtZW50LCByZW5kZXJTdGF0ZSwgbGF0ZXN0VmFsdWVzLCBvcHRpb25zLCBwcm9wcyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgICAgICAgbGlmZWN5Y2xlcy5ub3RpZnlVcGRhdGUobGF0ZXN0VmFsdWVzKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICpcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGJpbmRUb01vdGlvblZhbHVlKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIHZhciByZW1vdmVPbkNoYW5nZSA9IHZhbHVlLm9uQ2hhbmdlKGZ1bmN0aW9uIChsYXRlc3RWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGxhdGVzdFZhbHVlc1trZXldID0gbGF0ZXN0VmFsdWU7XG4gICAgICAgICAgICAgICAgcHJvcHMub25VcGRhdGUgJiYgc3luYy51cGRhdGUodXBkYXRlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciByZW1vdmVPblJlbmRlclJlcXVlc3QgPSB2YWx1ZS5vblJlbmRlclJlcXVlc3QoZWxlbWVudC5zY2hlZHVsZVJlbmRlcik7XG4gICAgICAgICAgICB2YWx1ZVN1YnNjcmlwdGlvbnMuc2V0KGtleSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJlbW92ZU9uQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgcmVtb3ZlT25SZW5kZXJSZXF1ZXN0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogQW55IG1vdGlvbiB2YWx1ZXMgdGhhdCBhcmUgcHJvdmlkZWQgdG8gdGhlIGVsZW1lbnQgd2hlbiBjcmVhdGVkXG4gICAgICAgICAqIGFyZW4ndCB5ZXQgYm91bmQgdG8gdGhlIGVsZW1lbnQsIGFzIHRoaXMgd291bGQgdGVjaG5pY2FsbHkgYmUgaW1wdXJlLlxuICAgICAgICAgKiBIb3dldmVyLCB3ZSBpdGVyYXRlIHRocm91Z2ggdGhlIG1vdGlvbiB2YWx1ZXMgYW5kIHNldCB0aGVtIHRvIHRoZVxuICAgICAgICAgKiBpbml0aWFsIHZhbHVlcyBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRPRE86IFRoaXMgaXMgaW1wdXJlIGFuZCB3ZSBzaG91bGQgbG9vayBhdCBjaGFuZ2luZyB0aGlzIHRvIHJ1biBvbiBtb3VudC5cbiAgICAgICAgICogRG9pbmcgc28gd2lsbCBicmVhayBzb21lIHRlc3RzIGJ1dCB0aGlzIGlzbid0IG5lY2Nlc3NhcmlseSBhIGJyZWFraW5nIGNoYW5nZSxcbiAgICAgICAgICogbW9yZSBhIHJlZmxlY3Rpb24gb2YgdGhlIHRlc3QuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgaW5pdGlhbE1vdGlvblZhbHVlcyA9IHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyhwcm9wcyk7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBpbml0aWFsTW90aW9uVmFsdWVzKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBpbml0aWFsTW90aW9uVmFsdWVzW2tleV07XG4gICAgICAgICAgICBpZiAobGF0ZXN0VmFsdWVzW2tleV0gIT09IHVuZGVmaW5lZCAmJiBpc01vdGlvblZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlLnNldChsYXRlc3RWYWx1ZXNba2V5XSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmUgd2hhdCByb2xlIHRoaXMgdmlzdWFsIGVsZW1lbnQgc2hvdWxkIHRha2UgaW4gdGhlIHZhcmlhbnQgdHJlZS5cbiAgICAgICAgICovXG4gICAgICAgIHZhciBpc0NvbnRyb2xsaW5nVmFyaWFudHMgPSBjaGVja0lmQ29udHJvbGxpbmdWYXJpYW50cyhwcm9wcyk7XG4gICAgICAgIHZhciBpc1ZhcmlhbnROb2RlID0gY2hlY2tJZlZhcmlhbnROb2RlKHByb3BzKTtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBfX2Fzc2lnbihfX2Fzc2lnbih7IHRyZWVUeXBlOiB0cmVlVHlwZSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoaXMgaXMgYSBtaXJyb3Igb2YgdGhlIGludGVybmFsIGluc3RhbmNlIHByb3AsIHdoaWNoIGtlZXBzXG4gICAgICAgICAgICAgKiBWaXN1YWxFbGVtZW50IHR5cGUtY29tcGF0aWJsZSB3aXRoIFJlYWN0J3MgUmVmT2JqZWN0LlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjdXJyZW50OiBudWxsLCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIGRlcHRoIG9mIHRoaXMgdmlzdWFsIGVsZW1lbnQgd2l0aGluIHRoZSB2aXN1YWwgZWxlbWVudCB0cmVlLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBkZXB0aDogcGFyZW50ID8gcGFyZW50LmRlcHRoICsgMSA6IDAsIHBhcmVudDogcGFyZW50LCBjaGlsZHJlbjogbmV3IFNldCgpLCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgcHJlc2VuY2VJZDogcHJlc2VuY2VJZCwgc2hvdWxkUmVkdWNlTW90aW9uOiBzaG91bGRSZWR1Y2VNb3Rpb24sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB0aGlzIGNvbXBvbmVudCBpcyBwYXJ0IG9mIHRoZSB2YXJpYW50IHRyZWUsIGl0IHNob3VsZCB0cmFja1xuICAgICAgICAgICAgICogYW55IGNoaWxkcmVuIHRoYXQgYXJlIGFsc28gcGFydCBvZiB0aGUgdHJlZS4gVGhpcyBpcyBlc3NlbnRpYWxseVxuICAgICAgICAgICAgICogYSBzaGFkb3cgdHJlZSB0byBzaW1wbGlmeSBsb2dpYyBhcm91bmQgaG93IHRvIHN0YWdnZXIgb3ZlciBjaGlsZHJlbi5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdmFyaWFudENoaWxkcmVuOiBpc1ZhcmlhbnROb2RlID8gbmV3IFNldCgpIDogdW5kZWZpbmVkLCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2hldGhlciB0aGlzIGluc3RhbmNlIGlzIHZpc2libGUuIFRoaXMgY2FuIGJlIGNoYW5nZWQgaW1wZXJhdGl2ZWx5XG4gICAgICAgICAgICAgKiBieSB0aGUgcHJvamVjdGlvbiB0cmVlLCBpcyBhbmFsb2dvdXMgdG8gQ1NTJ3MgdmlzaWJpbGl0eSBpbiB0aGF0XG4gICAgICAgICAgICAgKiBoaWRkZW4gZWxlbWVudHMgc2hvdWxkIHRha2UgdXAgbGF5b3V0LCBhbmQgbmVlZHMgZW5hY3RpbmcgYnkgdGhlIGNvbmZpZ3VyZWRcbiAgICAgICAgICAgICAqIHJlbmRlciBmdW5jdGlvbi5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaXNWaXNpYmxlOiB1bmRlZmluZWQsIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBOb3JtYWxseSwgaWYgYSBjb21wb25lbnQgaXMgY29udHJvbGxlZCBieSBhIHBhcmVudCdzIHZhcmlhbnRzLCBpdCBjYW5cbiAgICAgICAgICAgICAqIHJlbHkgb24gdGhhdCBhbmNlc3RvciB0byB0cmlnZ2VyIGFuaW1hdGlvbnMgZnVydGhlciBkb3duIHRoZSB0cmVlLlxuICAgICAgICAgICAgICogSG93ZXZlciwgaWYgYSBjb21wb25lbnQgaXMgY3JlYXRlZCBhZnRlciBpdHMgcGFyZW50IGlzIG1vdW50ZWQsIHRoZSBwYXJlbnRcbiAgICAgICAgICAgICAqIHdvbid0IHRyaWdnZXIgdGhhdCBtb3VudCBhbmltYXRpb24gc28gdGhlIGNoaWxkIG5lZWRzIHRvLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFRPRE86IFRoaXMgbWlnaHQgYmUgYmV0dGVyIHJlcGxhY2VkIHdpdGggYSBtZXRob2QgaXNQYXJlbnRNb3VudGVkXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIG1hbnVhbGx5QW5pbWF0ZU9uTW91bnQ6IEJvb2xlYW4ocGFyZW50ID09PSBudWxsIHx8IHBhcmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyZW50LmlzTW91bnRlZCgpKSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoaXMgY2FuIGJlIHNldCBieSBBbmltYXRlUHJlc2VuY2UgdG8gZm9yY2UgY29tcG9uZW50cyB0aGF0IG1vdW50XG4gICAgICAgICAgICAgKiBhdCB0aGUgc2FtZSB0aW1lIGFzIGl0IHRvIG1vdW50IGFzIGlmIHRoZXkgaGF2ZSBpbml0aWFsPXtmYWxzZX0gc2V0LlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBibG9ja0luaXRpYWxBbmltYXRpb246IGJsb2NrSW5pdGlhbEFuaW1hdGlvbiwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIERldGVybWluZSB3aGV0aGVyIHRoaXMgY29tcG9uZW50IGhhcyBtb3VudGVkIHlldC4gVGhpcyBpcyBtb3N0bHkgdXNlZFxuICAgICAgICAgICAgICogYnkgdmFyaWFudCBjaGlsZHJlbiB0byBkZXRlcm1pbmUgd2hldGhlciB0aGV5IG5lZWQgdG8gdHJpZ2dlciB0aGVpclxuICAgICAgICAgICAgICogb3duIGFuaW1hdGlvbnMgb24gbW91bnQuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlzTW91bnRlZDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQm9vbGVhbihpbnN0YW5jZSk7IH0sIG1vdW50OiBmdW5jdGlvbiAobmV3SW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICBpc01vdW50ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGluc3RhbmNlID0gZWxlbWVudC5jdXJyZW50ID0gbmV3SW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucHJvamVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnByb2plY3Rpb24ubW91bnQobmV3SW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNWYXJpYW50Tm9kZSAmJiBwYXJlbnQgJiYgIWlzQ29udHJvbGxpbmdWYXJpYW50cykge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVGcm9tVmFyaWFudFRyZWUgPSBwYXJlbnQgPT09IG51bGwgfHwgcGFyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJlbnQuYWRkVmFyaWFudENoaWxkKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YWx1ZXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkgeyByZXR1cm4gYmluZFRvTW90aW9uVmFsdWUoa2V5LCB2YWx1ZSk7IH0pO1xuICAgICAgICAgICAgICAgIHBhcmVudCA9PT0gbnVsbCB8fCBwYXJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmVudC5jaGlsZHJlbi5hZGQoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zZXRQcm9wcyhwcm9wcyk7XG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdW5tb3VudDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAoX2EgPSBlbGVtZW50LnByb2plY3Rpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS51bm1vdW50KCk7XG4gICAgICAgICAgICAgICAgY2FuY2VsU3luYy51cGRhdGUodXBkYXRlKTtcbiAgICAgICAgICAgICAgICBjYW5jZWxTeW5jLnJlbmRlcihyZW5kZXIpO1xuICAgICAgICAgICAgICAgIHZhbHVlU3Vic2NyaXB0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChyZW1vdmUpIHsgcmV0dXJuIHJlbW92ZSgpOyB9KTtcbiAgICAgICAgICAgICAgICByZW1vdmVGcm9tVmFyaWFudFRyZWUgPT09IG51bGwgfHwgcmVtb3ZlRnJvbVZhcmlhbnRUcmVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZW1vdmVGcm9tVmFyaWFudFRyZWUoKTtcbiAgICAgICAgICAgICAgICBwYXJlbnQgPT09IG51bGwgfHwgcGFyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJlbnQuY2hpbGRyZW4uZGVsZXRlKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGxpZmVjeWNsZXMuY2xlYXJBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpc01vdW50ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBBZGQgYSBjaGlsZCB2aXN1YWwgZWxlbWVudCB0byBvdXIgc2V0IG9mIGNoaWxkcmVuLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBhZGRWYXJpYW50Q2hpbGQ6IGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICB2YXIgY2xvc2VzdFZhcmlhbnROb2RlID0gZWxlbWVudC5nZXRDbG9zZXN0VmFyaWFudE5vZGUoKTtcbiAgICAgICAgICAgICAgICBpZiAoY2xvc2VzdFZhcmlhbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIChfYSA9IGNsb3Nlc3RWYXJpYW50Tm9kZS52YXJpYW50Q2hpbGRyZW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hZGQoY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RWYXJpYW50Tm9kZS52YXJpYW50Q2hpbGRyZW4uZGVsZXRlKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBzb3J0Tm9kZVBvc2l0aW9uOiBmdW5jdGlvbiAob3RoZXIpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBJZiB0aGVzZSBub2RlcyBhcmVuJ3QgZXZlbiBvZiB0aGUgc2FtZSB0eXBlIHdlIGNhbid0IGNvbXBhcmUgdGhlaXIgZGVwdGguXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgaWYgKCFzb3J0Tm9kZVBvc2l0aW9uIHx8IHRyZWVUeXBlICE9PSBvdGhlci50cmVlVHlwZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNvcnROb2RlUG9zaXRpb24oZWxlbWVudC5nZXRJbnN0YW5jZSgpLCBvdGhlci5nZXRJbnN0YW5jZSgpKTtcbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZXR1cm5zIHRoZSBjbG9zZXN0IHZhcmlhbnQgbm9kZSBpbiB0aGUgdHJlZSBzdGFydGluZyBmcm9tXG4gICAgICAgICAgICAgKiB0aGlzIHZpc3VhbCBlbGVtZW50LlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBnZXRDbG9zZXN0VmFyaWFudE5vZGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNWYXJpYW50Tm9kZSA/IGVsZW1lbnQgOiBwYXJlbnQgPT09IG51bGwgfHwgcGFyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJlbnQuZ2V0Q2xvc2VzdFZhcmlhbnROb2RlKCk7XG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogRXhwb3NlIHRoZSBsYXRlc3QgbGF5b3V0SWQgcHJvcC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZ2V0TGF5b3V0SWQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHByb3BzLmxheW91dElkOyB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJucyB0aGUgY3VycmVudCBpbnN0YW5jZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZ2V0SW5zdGFuY2U6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGluc3RhbmNlOyB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogR2V0L3NldCB0aGUgbGF0ZXN0IHN0YXRpYyB2YWx1ZXMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGdldFN0YXRpY1ZhbHVlOiBmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBsYXRlc3RWYWx1ZXNba2V5XTsgfSwgc2V0U3RhdGljVmFsdWU6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7IHJldHVybiAobGF0ZXN0VmFsdWVzW2tleV0gPSB2YWx1ZSk7IH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZXR1cm5zIHRoZSBsYXRlc3QgbW90aW9uIHZhbHVlIHN0YXRlLiBDdXJyZW50bHkgb25seSB1c2VkIHRvIHRha2VcbiAgICAgICAgICAgICAqIGEgc25hcHNob3Qgb2YgdGhlIHZpc3VhbCBlbGVtZW50IC0gcGVyaGFwcyB0aGlzIGNhbiByZXR1cm4gdGhlIHdob2xlXG4gICAgICAgICAgICAgKiB2aXN1YWwgc3RhdGVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZ2V0TGF0ZXN0VmFsdWVzOiBmdW5jdGlvbiAoKSB7IHJldHVybiBsYXRlc3RWYWx1ZXM7IH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBTZXQgdGhlIHZpc2libGl0eSBvZiB0aGUgdmlzdWFsIGVsZW1lbnQuIElmIGl0J3MgY2hhbmdlZCwgc2NoZWR1bGVcbiAgICAgICAgICAgICAqIGEgcmVuZGVyIHRvIHJlZmxlY3QgdGhlc2UgY2hhbmdlcy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgc2V0VmlzaWJpbGl0eTogZnVuY3Rpb24gKHZpc2liaWxpdHkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5pc1Zpc2libGUgPT09IHZpc2liaWxpdHkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmlzVmlzaWJsZSA9IHZpc2liaWxpdHk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zY2hlZHVsZVJlbmRlcigpO1xuICAgICAgICAgICAgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIE1ha2UgYSB0YXJnZXQgYW5pbWF0YWJsZSBieSBQb3Btb3Rpb24uIEZvciBpbnN0YW5jZSwgaWYgd2UncmVcbiAgICAgICAgICAgICAqIHRyeWluZyB0byBhbmltYXRlIHdpZHRoIGZyb20gMTAwcHggdG8gMTAwdncgd2UgbmVlZCB0byBtZWFzdXJlIDEwMHZ3XG4gICAgICAgICAgICAgKiBpbiBwaXhlbHMgdG8gZGV0ZXJtaW5lIHdoYXQgd2UgcmVhbGx5IG5lZWQgdG8gYW5pbWF0ZSB0by4gVGhpcyBpcyBhbHNvXG4gICAgICAgICAgICAgKiBwbHVnZ2FibGUgdG8gc3VwcG9ydCBGcmFtZXIncyBjdXN0b20gdmFsdWUgdHlwZXMgbGlrZSBDb2xvcixcbiAgICAgICAgICAgICAqIGFuZCBDU1MgdmFyaWFibGVzLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBtYWtlVGFyZ2V0QW5pbWF0YWJsZTogZnVuY3Rpb24gKHRhcmdldCwgY2FuTXV0YXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbk11dGF0ZSA9PT0gdm9pZCAwKSB7IGNhbk11dGF0ZSA9IHRydWU7IH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRhcmdldEFuaW1hdGFibGUoZWxlbWVudCwgdGFyZ2V0LCBwcm9wcywgY2FuTXV0YXRlKTtcbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBNZWFzdXJlIHRoZSBjdXJyZW50IHZpZXdwb3J0IGJveCB3aXRoIG9yIHdpdGhvdXQgdHJhbnNmb3Jtcy5cbiAgICAgICAgICAgICAqIE9ubHkgbWVhc3VyZXMgYXhpcy1hbGlnbmVkIGJveGVzLCByb3RhdGUgYW5kIHNrZXcgbXVzdCBiZSBtYW51YWxseVxuICAgICAgICAgICAgICogcmVtb3ZlZCB3aXRoIGEgcmUtcmVuZGVyIHRvIHdvcmsuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIG1lYXN1cmVWaWV3cG9ydEJveDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtZWFzdXJlVmlld3BvcnRCb3goaW5zdGFuY2UsIHByb3BzKTtcbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLy8gTW90aW9uIHZhbHVlcyA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQWRkIGEgbW90aW9uIHZhbHVlIGFuZCBiaW5kIGl0IHRvIHRoaXMgdmlzdWFsIGVsZW1lbnQuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGFkZFZhbHVlOiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBleGlzdGluZyB2YWx1ZSBpZiBpdCBleGlzdHNcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5oYXNWYWx1ZShrZXkpKVxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZVZhbHVlKGtleSk7XG4gICAgICAgICAgICAgICAgdmFsdWVzLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBsYXRlc3RWYWx1ZXNba2V5XSA9IHZhbHVlLmdldCgpO1xuICAgICAgICAgICAgICAgIGJpbmRUb01vdGlvblZhbHVlKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFJlbW92ZSBhIG1vdGlvbiB2YWx1ZSBhbmQgdW5iaW5kIGFueSBhY3RpdmUgc3Vic2NyaXB0aW9ucy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgcmVtb3ZlVmFsdWU6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgdmFsdWVzLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgICAgIChfYSA9IHZhbHVlU3Vic2NyaXB0aW9ucy5nZXQoa2V5KSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hKCk7XG4gICAgICAgICAgICAgICAgdmFsdWVTdWJzY3JpcHRpb25zLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBsYXRlc3RWYWx1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICByZW1vdmVWYWx1ZUZyb21SZW5kZXJTdGF0ZShrZXksIHJlbmRlclN0YXRlKTtcbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBDaGVjayB3aGV0aGVyIHdlIGhhdmUgYSBtb3Rpb24gdmFsdWUgZm9yIHRoaXMga2V5XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGhhc1ZhbHVlOiBmdW5jdGlvbiAoa2V5KSB7IHJldHVybiB2YWx1ZXMuaGFzKGtleSk7IH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBHZXQgYSBtb3Rpb24gdmFsdWUgZm9yIHRoaXMga2V5LiBJZiBjYWxsZWQgd2l0aCBhIGRlZmF1bHRcbiAgICAgICAgICAgICAqIHZhbHVlLCB3ZSdsbCBjcmVhdGUgb25lIGlmIG5vbmUgZXhpc3RzLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBnZXRWYWx1ZTogZnVuY3Rpb24gKGtleSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdmFsdWVzLmdldChrZXkpO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbW90aW9uVmFsdWUoZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5hZGRWYWx1ZShrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEl0ZXJhdGUgb3ZlciBvdXIgbW90aW9uIHZhbHVlcy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZm9yRWFjaFZhbHVlOiBmdW5jdGlvbiAoY2FsbGJhY2spIHsgcmV0dXJuIHZhbHVlcy5mb3JFYWNoKGNhbGxiYWNrKTsgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHdlJ3JlIHRyeWluZyB0byBhbmltYXRlIHRvIGEgcHJldmlvdXNseSB1bmVuY291bnRlcmVkIHZhbHVlLFxuICAgICAgICAgICAgICogd2UgbmVlZCB0byBjaGVjayBmb3IgaXQgaW4gb3VyIHN0YXRlIGFuZCBhcyBhIGxhc3QgcmVzb3J0IHJlYWQgaXRcbiAgICAgICAgICAgICAqIGRpcmVjdGx5IGZyb20gdGhlIGluc3RhbmNlICh3aGljaCBtaWdodCBoYXZlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucykuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHJlYWRWYWx1ZTogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKF9hID0gbGF0ZXN0VmFsdWVzW2tleV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHJlYWRWYWx1ZUZyb21JbnN0YW5jZShpbnN0YW5jZSwga2V5LCBvcHRpb25zKTtcbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBTZXQgdGhlIGJhc2UgdGFyZ2V0IHRvIGxhdGVyIGFuaW1hdGUgYmFjayB0by4gVGhpcyBpcyBjdXJyZW50bHlcbiAgICAgICAgICAgICAqIG9ubHkgaHlkcmF0ZWQgb24gY3JlYXRpb24gYW5kIHdoZW4gd2UgZmlyc3QgcmVhZCBhIHZhbHVlLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBzZXRCYXNlVGFyZ2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGJhc2VUYXJnZXRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEZpbmQgdGhlIGJhc2UgdGFyZ2V0IGZvciBhIHZhbHVlIHRoYXRzIGJlZW4gcmVtb3ZlZCBmcm9tIGFsbCBhbmltYXRpb25cbiAgICAgICAgICAgICAqIHByb3BzLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBnZXRCYXNlVGFyZ2V0OiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGdldEJhc2VUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IGdldEJhc2VUYXJnZXQocHJvcHMsIGtleSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT09IHVuZGVmaW5lZCAmJiAhaXNNb3Rpb25WYWx1ZSh0YXJnZXQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VUYXJnZXRba2V5XTtcbiAgICAgICAgICAgIH0gfSwgbGlmZWN5Y2xlcyksIHsgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEJ1aWxkIHRoZSByZW5kZXJlciBzdGF0ZSBiYXNlZCBvbiB0aGUgbGF0ZXN0IHZpc3VhbCBzdGF0ZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnVpbGQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyQnVpbGQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyU3RhdGU7XG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogU2NoZWR1bGUgYSByZW5kZXIgb24gdGhlIG5leHQgYW5pbWF0aW9uIGZyYW1lLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBzY2hlZHVsZVJlbmRlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN5bmMucmVuZGVyKHJlbmRlciwgZmFsc2UsIHRydWUpO1xuICAgICAgICAgICAgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFN5bmNocm9ub3VzbHkgZmlyZSByZW5kZXIuIEl0J3MgcHJlZmVyZWQgdGhhdCB3ZSBiYXRjaCByZW5kZXJzIGJ1dFxuICAgICAgICAgICAgICogaW4gbWFueSBjaXJjdW1zdGFuY2VzLCBsaWtlIGxheW91dCBtZWFzdXJlbWVudCwgd2UgbmVlZCB0byBydW4gdGhpc1xuICAgICAgICAgICAgICogc3luY2hyb25vdXNseS4gSG93ZXZlciBpbiB0aG9zZSBpbnN0YW5jZXMgb3RoZXIgbWVhc3VyZXMgc2hvdWxkIGJlIHRha2VuXG4gICAgICAgICAgICAgKiB0byBiYXRjaCByZWFkcy93cml0ZXMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHN5bmNSZW5kZXI6IHJlbmRlciwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFVwZGF0ZSB0aGUgcHJvdmlkZWQgcHJvcHMuIEVuc3VyZSBhbnkgbmV3bHktYWRkZWQgbW90aW9uIHZhbHVlcyBhcmVcbiAgICAgICAgICAgICAqIGFkZGVkIHRvIG91ciBtYXAsIG9sZCBvbmVzIHJlbW92ZWQsIGFuZCBsaXN0ZW5lcnMgdXBkYXRlZC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgc2V0UHJvcHM6IGZ1bmN0aW9uIChuZXdQcm9wcykge1xuICAgICAgICAgICAgICAgIGlmIChuZXdQcm9wcy50cmFuc2Zvcm1UZW1wbGF0ZSB8fCBwcm9wcy50cmFuc2Zvcm1UZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNjaGVkdWxlUmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb3BzID0gbmV3UHJvcHM7XG4gICAgICAgICAgICAgICAgbGlmZWN5Y2xlcy51cGRhdGVQcm9wTGlzdGVuZXJzKG5ld1Byb3BzKTtcbiAgICAgICAgICAgICAgICBwcmV2TW90aW9uVmFsdWVzID0gdXBkYXRlTW90aW9uVmFsdWVzRnJvbVByb3BzKGVsZW1lbnQsIHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyhwcm9wcyksIHByZXZNb3Rpb25WYWx1ZXMpO1xuICAgICAgICAgICAgfSwgZ2V0UHJvcHM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHByb3BzOyB9LCBcbiAgICAgICAgICAgIC8vIFZhcmlhbnRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZXR1cm5zIHRoZSB2YXJpYW50IGRlZmluaXRpb24gd2l0aCBhIGdpdmVuIG5hbWUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGdldFZhcmlhbnQ6IGZ1bmN0aW9uIChuYW1lKSB7IHZhciBfYTsgcmV0dXJuIChfYSA9IHByb3BzLnZhcmlhbnRzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbbmFtZV07IH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZXR1cm5zIHRoZSBkZWZpbmVkIGRlZmF1bHQgdHJhbnNpdGlvbiBvbiB0aGlzIGNvbXBvbmVudC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZ2V0RGVmYXVsdFRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHByb3BzLnRyYW5zaXRpb247IH0sIGdldFRyYW5zZm9ybVBhZ2VQb2ludDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50cmFuc2Zvcm1QYWdlUG9pbnQ7XG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVXNlZCBieSBjaGlsZCB2YXJpYW50IG5vZGVzIHRvIGdldCB0aGUgY2xvc2VzdCBhbmNlc3RvciB2YXJpYW50IHByb3BzLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBnZXRWYXJpYW50Q29udGV4dDogZnVuY3Rpb24gKHN0YXJ0QXRQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRBdFBhcmVudCA9PT0gdm9pZCAwKSB7IHN0YXJ0QXRQYXJlbnQgPSBmYWxzZTsgfVxuICAgICAgICAgICAgICAgIGlmIChzdGFydEF0UGFyZW50KVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50ID09PSBudWxsIHx8IHBhcmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyZW50LmdldFZhcmlhbnRDb250ZXh0KCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0NvbnRyb2xsaW5nVmFyaWFudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRleHRfMSA9IChwYXJlbnQgPT09IG51bGwgfHwgcGFyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJlbnQuZ2V0VmFyaWFudENvbnRleHQoKSkgfHwge307XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wcy5pbml0aWFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRfMS5pbml0aWFsID0gcHJvcHMuaW5pdGlhbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dF8xO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IHt9O1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtVmFyaWFudFByb3BzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVfMSA9IHZhcmlhbnRQcm9wc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByb3AgPSBwcm9wc1tuYW1lXzFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYXJpYW50TGFiZWwocHJvcCkgfHwgcHJvcCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbbmFtZV8xXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgICAgICB9IH0pO1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9O1xufTtcbnZhciB2YXJpYW50UHJvcHMgPSBfX3NwcmVhZEFycmF5KFtcImluaXRpYWxcIl0sIF9fcmVhZCh2YXJpYW50UHJpb3JpdHlPcmRlciksIGZhbHNlKTtcbnZhciBudW1WYXJpYW50UHJvcHMgPSB2YXJpYW50UHJvcHMubGVuZ3RoO1xuXG5leHBvcnQgeyB2aXN1YWxFbGVtZW50IH07XG4iLCJpbXBvcnQgeyB3YXJuT25jZSB9IGZyb20gJy4uLy4uL3V0aWxzL3dhcm4tb25jZS5tanMnO1xuaW1wb3J0IHsgbW90aW9uVmFsdWUgfSBmcm9tICcuLi8uLi92YWx1ZS9pbmRleC5tanMnO1xuaW1wb3J0IHsgaXNNb3Rpb25WYWx1ZSB9IGZyb20gJy4uLy4uL3ZhbHVlL3V0aWxzL2lzLW1vdGlvbi12YWx1ZS5tanMnO1xuXG5mdW5jdGlvbiB1cGRhdGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMoZWxlbWVudCwgbmV4dCwgcHJldikge1xuICAgIHZhciBfYTtcbiAgICBmb3IgKHZhciBrZXkgaW4gbmV4dCkge1xuICAgICAgICB2YXIgbmV4dFZhbHVlID0gbmV4dFtrZXldO1xuICAgICAgICB2YXIgcHJldlZhbHVlID0gcHJldltrZXldO1xuICAgICAgICBpZiAoaXNNb3Rpb25WYWx1ZShuZXh0VmFsdWUpKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHRoaXMgaXMgYSBtb3Rpb24gdmFsdWUgZm91bmQgaW4gcHJvcHMgb3Igc3R5bGUsIHdlIHdhbnQgdG8gYWRkIGl0XG4gICAgICAgICAgICAgKiB0byBvdXIgdmlzdWFsIGVsZW1lbnQncyBtb3Rpb24gdmFsdWUgbWFwLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBlbGVtZW50LmFkZFZhbHVlKGtleSwgbmV4dFZhbHVlKTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQ2hlY2sgdGhlIHZlcnNpb24gb2YgdGhlIGluY29taW5nIG1vdGlvbiB2YWx1ZSB3aXRoIHRoaXMgdmVyc2lvblxuICAgICAgICAgICAgICogYW5kIHdhcm4gYWdhaW5zdCBtaXNtYXRjaGVzLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIikge1xuICAgICAgICAgICAgICAgIHdhcm5PbmNlKG5leHRWYWx1ZS52ZXJzaW9uID09PSBcIjYuNS4xXCIsIFwiQXR0ZW1wdGluZyB0byBtaXggRnJhbWVyIE1vdGlvbiB2ZXJzaW9ucyBcIi5jb25jYXQobmV4dFZhbHVlLnZlcnNpb24sIFwiIHdpdGggNi41LjEgbWF5IG5vdCB3b3JrIGFzIGV4cGVjdGVkLlwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNNb3Rpb25WYWx1ZShwcmV2VmFsdWUpKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHdlJ3JlIHN3YXBwaW5nIHRvIGEgbmV3IG1vdGlvbiB2YWx1ZSwgY3JlYXRlIGEgbmV3IG1vdGlvbiB2YWx1ZVxuICAgICAgICAgICAgICogZnJvbSB0aGF0XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGVsZW1lbnQuYWRkVmFsdWUoa2V5LCBtb3Rpb25WYWx1ZShuZXh0VmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmV2VmFsdWUgIT09IG5leHRWYWx1ZSkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB0aGlzIGlzIGEgZmxhdCB2YWx1ZSB0aGF0IGhhcyBjaGFuZ2VkLCB1cGRhdGUgdGhlIG1vdGlvbiB2YWx1ZVxuICAgICAgICAgICAgICogb3IgY3JlYXRlIG9uZSBpZiBpdCBkb2Vzbid0IGV4aXN0LiBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBpZiB3ZSdyZVxuICAgICAgICAgICAgICogbm90IGhhbmRsaW5nIHRoZSB2YWx1ZSB3aXRoIG91ciBhbmltYXRpb24gc3RhdGUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmIChlbGVtZW50Lmhhc1ZhbHVlKGtleSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgZXhpc3RpbmdWYWx1ZSA9IGVsZW1lbnQuZ2V0VmFsdWUoa2V5KTtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBPbmx5IHVwZGF0ZSB2YWx1ZXMgdGhhdCBhcmVuJ3QgYmVpbmcgYW5pbWF0ZWQgb3IgZXZlbiBsb29rZWQgYXRcbiAgICAgICAgICAgICAgICAhZXhpc3RpbmdWYWx1ZS5oYXNBbmltYXRlZCAmJiBleGlzdGluZ1ZhbHVlLnNldChuZXh0VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5hZGRWYWx1ZShrZXksIG1vdGlvblZhbHVlKChfYSA9IGVsZW1lbnQuZ2V0U3RhdGljVmFsdWUoa2V5KSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbmV4dFZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSGFuZGxlIHJlbW92ZWQgdmFsdWVzXG4gICAgZm9yICh2YXIga2V5IGluIHByZXYpIHtcbiAgICAgICAgaWYgKG5leHRba2V5XSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVWYWx1ZShrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dDtcbn1cblxuZXhwb3J0IHsgdXBkYXRlTW90aW9uVmFsdWVzRnJvbVByb3BzIH07XG4iLCJpbXBvcnQgeyBfX3Jlc3QsIF9fYXNzaWduLCBfX3JlYWQgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBpbnZhcmlhbnQgfSBmcm9tICdoZXktbGlzdGVuJztcblxuZnVuY3Rpb24gaXNDU1NWYXJpYWJsZSh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUuc3RhcnRzV2l0aChcInZhcigtLVwiKTtcbn1cbi8qKlxuICogUGFyc2UgRnJhbWVyJ3Mgc3BlY2lhbCBDU1MgdmFyaWFibGUgZm9ybWF0IGludG8gYSBDU1MgdG9rZW4gYW5kIGEgZmFsbGJhY2suXG4gKlxuICogYGBgXG4gKiBgdmFyKC0tZm9vLCAjZmZmKWAgPT4gW2AtLWZvb2AsICcjZmZmJ11cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBjdXJyZW50XG4gKi9cbnZhciBjc3NWYXJpYWJsZVJlZ2V4ID0gL3ZhclxcKCgtLVthLXpBLVowLTktX10rKSw/ID8oW2EtekEtWjAtOSAoKSUjLiwtXSspP1xcKS87XG5mdW5jdGlvbiBwYXJzZUNTU1ZhcmlhYmxlKGN1cnJlbnQpIHtcbiAgICB2YXIgbWF0Y2ggPSBjc3NWYXJpYWJsZVJlZ2V4LmV4ZWMoY3VycmVudCk7XG4gICAgaWYgKCFtYXRjaClcbiAgICAgICAgcmV0dXJuIFssXTtcbiAgICB2YXIgX2EgPSBfX3JlYWQobWF0Y2gsIDMpLCB0b2tlbiA9IF9hWzFdLCBmYWxsYmFjayA9IF9hWzJdO1xuICAgIHJldHVybiBbdG9rZW4sIGZhbGxiYWNrXTtcbn1cbnZhciBtYXhEZXB0aCA9IDQ7XG5mdW5jdGlvbiBnZXRWYXJpYWJsZVZhbHVlKGN1cnJlbnQsIGVsZW1lbnQsIGRlcHRoKSB7XG4gICAgaWYgKGRlcHRoID09PSB2b2lkIDApIHsgZGVwdGggPSAxOyB9XG4gICAgaW52YXJpYW50KGRlcHRoIDw9IG1heERlcHRoLCBcIk1heCBDU1MgdmFyaWFibGUgZmFsbGJhY2sgZGVwdGggZGV0ZWN0ZWQgaW4gcHJvcGVydHkgXFxcIlwiLmNvbmNhdChjdXJyZW50LCBcIlxcXCIuIFRoaXMgbWF5IGluZGljYXRlIGEgY2lyY3VsYXIgZmFsbGJhY2sgZGVwZW5kZW5jeS5cIikpO1xuICAgIHZhciBfYSA9IF9fcmVhZChwYXJzZUNTU1ZhcmlhYmxlKGN1cnJlbnQpLCAyKSwgdG9rZW4gPSBfYVswXSwgZmFsbGJhY2sgPSBfYVsxXTtcbiAgICAvLyBObyBDU1MgdmFyaWFibGUgZGV0ZWN0ZWRcbiAgICBpZiAoIXRva2VuKVxuICAgICAgICByZXR1cm47XG4gICAgLy8gQXR0ZW1wdCB0byByZWFkIHRoaXMgQ1NTIHZhcmlhYmxlIG9mZiB0aGUgZWxlbWVudFxuICAgIHZhciByZXNvbHZlZCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUodG9rZW4pO1xuICAgIGlmIChyZXNvbHZlZCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZWQudHJpbSgpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0NTU1ZhcmlhYmxlKGZhbGxiYWNrKSkge1xuICAgICAgICAvLyBUaGUgZmFsbGJhY2sgbWlnaHQgaXRzZWxmIGJlIGEgQ1NTIHZhcmlhYmxlLCBpbiB3aGljaCBjYXNlIHdlIGF0dGVtcHQgdG8gcmVzb2x2ZSBpdCB0b28uXG4gICAgICAgIHJldHVybiBnZXRWYXJpYWJsZVZhbHVlKGZhbGxiYWNrLCBlbGVtZW50LCBkZXB0aCArIDEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbGxiYWNrO1xuICAgIH1cbn1cbi8qKlxuICogUmVzb2x2ZSBDU1MgdmFyaWFibGVzIGZyb21cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUNTU1ZhcmlhYmxlcyh2aXN1YWxFbGVtZW50LCBfYSwgdHJhbnNpdGlvbkVuZCkge1xuICAgIHZhciBfYjtcbiAgICB2YXIgdGFyZ2V0ID0gX19yZXN0KF9hLCBbXSk7XG4gICAgdmFyIGVsZW1lbnQgPSB2aXN1YWxFbGVtZW50LmdldEluc3RhbmNlKCk7XG4gICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEVsZW1lbnQpKVxuICAgICAgICByZXR1cm4geyB0YXJnZXQ6IHRhcmdldCwgdHJhbnNpdGlvbkVuZDogdHJhbnNpdGlvbkVuZCB9O1xuICAgIC8vIElmIGB0cmFuc2l0aW9uRW5kYCBpc24ndCBgdW5kZWZpbmVkYCwgY2xvbmUgaXQuIFdlIGNvdWxkIGNsb25lIGB0YXJnZXRgIGFuZCBgdHJhbnNpdGlvbkVuZGBcbiAgICAvLyBvbmx5IGlmIHRoZXkgY2hhbmdlIGJ1dCBJIHRoaW5rIHRoaXMgcmVhZHMgY2xlYXJlciBhbmQgdGhpcyBpc24ndCBhIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhdGguXG4gICAgaWYgKHRyYW5zaXRpb25FbmQpIHtcbiAgICAgICAgdHJhbnNpdGlvbkVuZCA9IF9fYXNzaWduKHt9LCB0cmFuc2l0aW9uRW5kKTtcbiAgICB9XG4gICAgLy8gR28gdGhyb3VnaCBleGlzdGluZyBgTW90aW9uVmFsdWVgcyBhbmQgZW5zdXJlIGFueSBleGlzdGluZyBDU1MgdmFyaWFibGVzIGFyZSByZXNvbHZlZFxuICAgIHZpc3VhbEVsZW1lbnQuZm9yRWFjaFZhbHVlKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgY3VycmVudCA9IHZhbHVlLmdldCgpO1xuICAgICAgICBpZiAoIWlzQ1NTVmFyaWFibGUoY3VycmVudCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciByZXNvbHZlZCA9IGdldFZhcmlhYmxlVmFsdWUoY3VycmVudCwgZWxlbWVudCk7XG4gICAgICAgIGlmIChyZXNvbHZlZClcbiAgICAgICAgICAgIHZhbHVlLnNldChyZXNvbHZlZCk7XG4gICAgfSk7XG4gICAgLy8gQ3ljbGUgdGhyb3VnaCBldmVyeSB0YXJnZXQgcHJvcGVydHkgYW5kIHJlc29sdmUgQ1NTIHZhcmlhYmxlcy4gQ3VycmVudGx5XG4gICAgLy8gd2Ugb25seSByZWFkIHNpbmdsZS12YXIgcHJvcGVydGllcyBsaWtlIGB2YXIoLS1mb28pYCwgbm90IGBjYWxjKHZhcigtLWZvbykgKyAyMHB4KWBcbiAgICBmb3IgKHZhciBrZXkgaW4gdGFyZ2V0KSB7XG4gICAgICAgIHZhciBjdXJyZW50ID0gdGFyZ2V0W2tleV07XG4gICAgICAgIGlmICghaXNDU1NWYXJpYWJsZShjdXJyZW50KSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB2YXIgcmVzb2x2ZWQgPSBnZXRWYXJpYWJsZVZhbHVlKGN1cnJlbnQsIGVsZW1lbnQpO1xuICAgICAgICBpZiAoIXJlc29sdmVkKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIC8vIENsb25lIHRhcmdldCBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuXG4gICAgICAgIHRhcmdldFtrZXldID0gcmVzb2x2ZWQ7XG4gICAgICAgIC8vIElmIHRoZSB1c2VyIGhhc24ndCBhbHJlYWR5IHNldCB0aGlzIGtleSBvbiBgdHJhbnNpdGlvbkVuZGAsIHNldCBpdCB0byB0aGUgdW5yZXNvbHZlZFxuICAgICAgICAvLyBDU1MgdmFyaWFibGUuIFRoaXMgd2lsbCBlbnN1cmUgdGhhdCBhZnRlciB0aGUgYW5pbWF0aW9uIHRoZSBjb21wb25lbnQgd2lsbCByZWZsZWN0XG4gICAgICAgIC8vIGNoYW5nZXMgaW4gdGhlIHZhbHVlIG9mIHRoZSBDU1MgdmFyaWFibGUuXG4gICAgICAgIGlmICh0cmFuc2l0aW9uRW5kKVxuICAgICAgICAgICAgKF9iID0gdHJhbnNpdGlvbkVuZFtrZXldKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAodHJhbnNpdGlvbkVuZFtrZXldID0gY3VycmVudCk7XG4gICAgfVxuICAgIHJldHVybiB7IHRhcmdldDogdGFyZ2V0LCB0cmFuc2l0aW9uRW5kOiB0cmFuc2l0aW9uRW5kIH07XG59XG5cbmV4cG9ydCB7IGNzc1ZhcmlhYmxlUmVnZXgsIHBhcnNlQ1NTVmFyaWFibGUsIHJlc29sdmVDU1NWYXJpYWJsZXMgfTtcbiIsImltcG9ydCB7IF9fYXNzaWduLCBfX3JlYWQgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBudW1iZXIsIHB4IH0gZnJvbSAnc3R5bGUtdmFsdWUtdHlwZXMnO1xuaW1wb3J0IHsgaXNLZXlmcmFtZXNUYXJnZXQgfSBmcm9tICcuLi8uLi8uLi9hbmltYXRpb24vdXRpbHMvaXMta2V5ZnJhbWVzLXRhcmdldC5tanMnO1xuaW1wb3J0IHsgaW52YXJpYW50IH0gZnJvbSAnaGV5LWxpc3Rlbic7XG5pbXBvcnQgeyB0cmFuc2Zvcm1Qcm9wcyB9IGZyb20gJy4uLy4uL2h0bWwvdXRpbHMvdHJhbnNmb3JtLm1qcyc7XG5pbXBvcnQgeyBmaW5kRGltZW5zaW9uVmFsdWVUeXBlIH0gZnJvbSAnLi4vdmFsdWUtdHlwZXMvZGltZW5zaW9ucy5tanMnO1xuXG52YXIgcG9zaXRpb25hbEtleXMgPSBuZXcgU2V0KFtcbiAgICBcIndpZHRoXCIsXG4gICAgXCJoZWlnaHRcIixcbiAgICBcInRvcFwiLFxuICAgIFwibGVmdFwiLFxuICAgIFwicmlnaHRcIixcbiAgICBcImJvdHRvbVwiLFxuICAgIFwieFwiLFxuICAgIFwieVwiLFxuXSk7XG52YXIgaXNQb3NpdGlvbmFsS2V5ID0gZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gcG9zaXRpb25hbEtleXMuaGFzKGtleSk7IH07XG52YXIgaGFzUG9zaXRpb25hbEtleSA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGFyZ2V0KS5zb21lKGlzUG9zaXRpb25hbEtleSk7XG59O1xudmFyIHNldEFuZFJlc2V0VmVsb2NpdHkgPSBmdW5jdGlvbiAodmFsdWUsIHRvKSB7XG4gICAgLy8gTG9va3Mgb2RkIGJ1dCBzZXR0aW5nIGl0IHR3aWNlIGRvZXNuJ3QgcmVuZGVyLCBpdCdsbCBqdXN0XG4gICAgLy8gc2V0IGJvdGggcHJldiBhbmQgY3VycmVudCB0byB0aGUgbGF0ZXN0IHZhbHVlXG4gICAgdmFsdWUuc2V0KHRvLCBmYWxzZSk7XG4gICAgdmFsdWUuc2V0KHRvKTtcbn07XG52YXIgaXNOdW1PclB4VHlwZSA9IGZ1bmN0aW9uICh2KSB7XG4gICAgcmV0dXJuIHYgPT09IG51bWJlciB8fCB2ID09PSBweDtcbn07XG52YXIgQm91bmRpbmdCb3hEaW1lbnNpb247XG4oZnVuY3Rpb24gKEJvdW5kaW5nQm94RGltZW5zaW9uKSB7XG4gICAgQm91bmRpbmdCb3hEaW1lbnNpb25bXCJ3aWR0aFwiXSA9IFwid2lkdGhcIjtcbiAgICBCb3VuZGluZ0JveERpbWVuc2lvbltcImhlaWdodFwiXSA9IFwiaGVpZ2h0XCI7XG4gICAgQm91bmRpbmdCb3hEaW1lbnNpb25bXCJsZWZ0XCJdID0gXCJsZWZ0XCI7XG4gICAgQm91bmRpbmdCb3hEaW1lbnNpb25bXCJyaWdodFwiXSA9IFwicmlnaHRcIjtcbiAgICBCb3VuZGluZ0JveERpbWVuc2lvbltcInRvcFwiXSA9IFwidG9wXCI7XG4gICAgQm91bmRpbmdCb3hEaW1lbnNpb25bXCJib3R0b21cIl0gPSBcImJvdHRvbVwiO1xufSkoQm91bmRpbmdCb3hEaW1lbnNpb24gfHwgKEJvdW5kaW5nQm94RGltZW5zaW9uID0ge30pKTtcbnZhciBnZXRQb3NGcm9tTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgcG9zKSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobWF0cml4LnNwbGl0KFwiLCBcIilbcG9zXSk7XG59O1xudmFyIGdldFRyYW5zbGF0ZUZyb21NYXRyaXggPSBmdW5jdGlvbiAocG9zMiwgcG9zMykge1xuICAgIHJldHVybiBmdW5jdGlvbiAoX2Jib3gsIF9hKSB7XG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSBfYS50cmFuc2Zvcm07XG4gICAgICAgIGlmICh0cmFuc2Zvcm0gPT09IFwibm9uZVwiIHx8ICF0cmFuc2Zvcm0pXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgdmFyIG1hdHJpeDNkID0gdHJhbnNmb3JtLm1hdGNoKC9ebWF0cml4M2RcXCgoLispXFwpJC8pO1xuICAgICAgICBpZiAobWF0cml4M2QpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRQb3NGcm9tTWF0cml4KG1hdHJpeDNkWzFdLCBwb3MzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBtYXRyaXggPSB0cmFuc2Zvcm0ubWF0Y2goL15tYXRyaXhcXCgoLispXFwpJC8pO1xuICAgICAgICAgICAgaWYgKG1hdHJpeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRQb3NGcm9tTWF0cml4KG1hdHJpeFsxXSwgcG9zMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG59O1xudmFyIHRyYW5zZm9ybUtleXMgPSBuZXcgU2V0KFtcInhcIiwgXCJ5XCIsIFwielwiXSk7XG52YXIgbm9uVHJhbnNsYXRpb25hbFRyYW5zZm9ybUtleXMgPSB0cmFuc2Zvcm1Qcm9wcy5maWx0ZXIoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gIXRyYW5zZm9ybUtleXMuaGFzKGtleSk7IH0pO1xuZnVuY3Rpb24gcmVtb3ZlTm9uVHJhbnNsYXRpb25hbFRyYW5zZm9ybSh2aXN1YWxFbGVtZW50KSB7XG4gICAgdmFyIHJlbW92ZWRUcmFuc2Zvcm1zID0gW107XG4gICAgbm9uVHJhbnNsYXRpb25hbFRyYW5zZm9ybUtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHZpc3VhbEVsZW1lbnQuZ2V0VmFsdWUoa2V5KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlbW92ZWRUcmFuc2Zvcm1zLnB1c2goW2tleSwgdmFsdWUuZ2V0KCldKTtcbiAgICAgICAgICAgIHZhbHVlLnNldChrZXkuc3RhcnRzV2l0aChcInNjYWxlXCIpID8gMSA6IDApO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gQXBwbHkgY2hhbmdlcyB0byBlbGVtZW50IGJlZm9yZSBtZWFzdXJlbWVudFxuICAgIGlmIChyZW1vdmVkVHJhbnNmb3Jtcy5sZW5ndGgpXG4gICAgICAgIHZpc3VhbEVsZW1lbnQuc3luY1JlbmRlcigpO1xuICAgIHJldHVybiByZW1vdmVkVHJhbnNmb3Jtcztcbn1cbnZhciBwb3NpdGlvbmFsVmFsdWVzID0ge1xuICAgIC8vIERpbWVuc2lvbnNcbiAgICB3aWR0aDogZnVuY3Rpb24gKF9hLCBfYikge1xuICAgICAgICB2YXIgeCA9IF9hLng7XG4gICAgICAgIHZhciBfYyA9IF9iLnBhZGRpbmdMZWZ0LCBwYWRkaW5nTGVmdCA9IF9jID09PSB2b2lkIDAgPyBcIjBcIiA6IF9jLCBfZCA9IF9iLnBhZGRpbmdSaWdodCwgcGFkZGluZ1JpZ2h0ID0gX2QgPT09IHZvaWQgMCA/IFwiMFwiIDogX2Q7XG4gICAgICAgIHJldHVybiB4Lm1heCAtIHgubWluIC0gcGFyc2VGbG9hdChwYWRkaW5nTGVmdCkgLSBwYXJzZUZsb2F0KHBhZGRpbmdSaWdodCk7XG4gICAgfSxcbiAgICBoZWlnaHQ6IGZ1bmN0aW9uIChfYSwgX2IpIHtcbiAgICAgICAgdmFyIHkgPSBfYS55O1xuICAgICAgICB2YXIgX2MgPSBfYi5wYWRkaW5nVG9wLCBwYWRkaW5nVG9wID0gX2MgPT09IHZvaWQgMCA/IFwiMFwiIDogX2MsIF9kID0gX2IucGFkZGluZ0JvdHRvbSwgcGFkZGluZ0JvdHRvbSA9IF9kID09PSB2b2lkIDAgPyBcIjBcIiA6IF9kO1xuICAgICAgICByZXR1cm4geS5tYXggLSB5Lm1pbiAtIHBhcnNlRmxvYXQocGFkZGluZ1RvcCkgLSBwYXJzZUZsb2F0KHBhZGRpbmdCb3R0b20pO1xuICAgIH0sXG4gICAgdG9wOiBmdW5jdGlvbiAoX2Jib3gsIF9hKSB7XG4gICAgICAgIHZhciB0b3AgPSBfYS50b3A7XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHRvcCk7XG4gICAgfSxcbiAgICBsZWZ0OiBmdW5jdGlvbiAoX2Jib3gsIF9hKSB7XG4gICAgICAgIHZhciBsZWZ0ID0gX2EubGVmdDtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQobGVmdCk7XG4gICAgfSxcbiAgICBib3R0b206IGZ1bmN0aW9uIChfYSwgX2IpIHtcbiAgICAgICAgdmFyIHkgPSBfYS55O1xuICAgICAgICB2YXIgdG9wID0gX2IudG9wO1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh0b3ApICsgKHkubWF4IC0geS5taW4pO1xuICAgIH0sXG4gICAgcmlnaHQ6IGZ1bmN0aW9uIChfYSwgX2IpIHtcbiAgICAgICAgdmFyIHggPSBfYS54O1xuICAgICAgICB2YXIgbGVmdCA9IF9iLmxlZnQ7XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KGxlZnQpICsgKHgubWF4IC0geC5taW4pO1xuICAgIH0sXG4gICAgLy8gVHJhbnNmb3JtXG4gICAgeDogZ2V0VHJhbnNsYXRlRnJvbU1hdHJpeCg0LCAxMyksXG4gICAgeTogZ2V0VHJhbnNsYXRlRnJvbU1hdHJpeCg1LCAxNCksXG59O1xudmFyIGNvbnZlcnRDaGFuZ2VkVmFsdWVUeXBlcyA9IGZ1bmN0aW9uICh0YXJnZXQsIHZpc3VhbEVsZW1lbnQsIGNoYW5nZWRLZXlzKSB7XG4gICAgdmFyIG9yaWdpbkJib3ggPSB2aXN1YWxFbGVtZW50Lm1lYXN1cmVWaWV3cG9ydEJveCgpO1xuICAgIHZhciBlbGVtZW50ID0gdmlzdWFsRWxlbWVudC5nZXRJbnN0YW5jZSgpO1xuICAgIHZhciBlbGVtZW50Q29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gICAgdmFyIGRpc3BsYXkgPSBlbGVtZW50Q29tcHV0ZWRTdHlsZS5kaXNwbGF5O1xuICAgIHZhciBvcmlnaW4gPSB7fTtcbiAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBjdXJyZW50bHkgc2V0IHRvIGRpc3BsYXk6IFwibm9uZVwiLCBtYWtlIGl0IHZpc2libGUgYmVmb3JlXG4gICAgLy8gbWVhc3VyaW5nIHRoZSB0YXJnZXQgYm91bmRpbmcgYm94XG4gICAgaWYgKGRpc3BsYXkgPT09IFwibm9uZVwiKSB7XG4gICAgICAgIHZpc3VhbEVsZW1lbnQuc2V0U3RhdGljVmFsdWUoXCJkaXNwbGF5XCIsIHRhcmdldC5kaXNwbGF5IHx8IFwiYmxvY2tcIik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlY29yZCBvcmlnaW5zIGJlZm9yZSB3ZSByZW5kZXIgYW5kIHVwZGF0ZSBzdHlsZXNcbiAgICAgKi9cbiAgICBjaGFuZ2VkS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgb3JpZ2luW2tleV0gPSBwb3NpdGlvbmFsVmFsdWVzW2tleV0ob3JpZ2luQmJveCwgZWxlbWVudENvbXB1dGVkU3R5bGUpO1xuICAgIH0pO1xuICAgIC8vIEFwcGx5IHRoZSBsYXRlc3QgdmFsdWVzIChhcyBzZXQgaW4gY2hlY2tBbmRDb252ZXJ0Q2hhbmdlZFZhbHVlVHlwZXMpXG4gICAgdmlzdWFsRWxlbWVudC5zeW5jUmVuZGVyKCk7XG4gICAgdmFyIHRhcmdldEJib3ggPSB2aXN1YWxFbGVtZW50Lm1lYXN1cmVWaWV3cG9ydEJveCgpO1xuICAgIGNoYW5nZWRLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAvLyBSZXN0b3JlIHN0eWxlcyB0byB0aGVpciAqKmNhbGN1bGF0ZWQgY29tcHV0ZWQgc3R5bGUqKiwgbm90IHRoZWlyIGFjdHVhbFxuICAgICAgICAvLyBvcmlnaW5hbGx5IHNldCBzdHlsZS4gVGhpcyBhbGxvd3MgdXMgdG8gYW5pbWF0ZSBiZXR3ZWVuIGVxdWl2YWxlbnQgcGl4ZWwgdW5pdHMuXG4gICAgICAgIHZhciB2YWx1ZSA9IHZpc3VhbEVsZW1lbnQuZ2V0VmFsdWUoa2V5KTtcbiAgICAgICAgc2V0QW5kUmVzZXRWZWxvY2l0eSh2YWx1ZSwgb3JpZ2luW2tleV0pO1xuICAgICAgICB0YXJnZXRba2V5XSA9IHBvc2l0aW9uYWxWYWx1ZXNba2V5XSh0YXJnZXRCYm94LCBlbGVtZW50Q29tcHV0ZWRTdHlsZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRhcmdldDtcbn07XG52YXIgY2hlY2tBbmRDb252ZXJ0Q2hhbmdlZFZhbHVlVHlwZXMgPSBmdW5jdGlvbiAodmlzdWFsRWxlbWVudCwgdGFyZ2V0LCBvcmlnaW4sIHRyYW5zaXRpb25FbmQpIHtcbiAgICBpZiAob3JpZ2luID09PSB2b2lkIDApIHsgb3JpZ2luID0ge307IH1cbiAgICBpZiAodHJhbnNpdGlvbkVuZCA9PT0gdm9pZCAwKSB7IHRyYW5zaXRpb25FbmQgPSB7fTsgfVxuICAgIHRhcmdldCA9IF9fYXNzaWduKHt9LCB0YXJnZXQpO1xuICAgIHRyYW5zaXRpb25FbmQgPSBfX2Fzc2lnbih7fSwgdHJhbnNpdGlvbkVuZCk7XG4gICAgdmFyIHRhcmdldFBvc2l0aW9uYWxLZXlzID0gT2JqZWN0LmtleXModGFyZ2V0KS5maWx0ZXIoaXNQb3NpdGlvbmFsS2V5KTtcbiAgICAvLyBXZSB3YW50IHRvIHJlbW92ZSBhbnkgdHJhbnNmb3JtIHZhbHVlcyB0aGF0IGNvdWxkIGFmZmVjdCB0aGUgZWxlbWVudCdzIGJvdW5kaW5nIGJveCBiZWZvcmVcbiAgICAvLyBpdCdzIG1lYXN1cmVkLiBXZSdsbCByZWFwcGx5IHRoZXNlIGxhdGVyLlxuICAgIHZhciByZW1vdmVkVHJhbnNmb3JtVmFsdWVzID0gW107XG4gICAgdmFyIGhhc0F0dGVtcHRlZFRvUmVtb3ZlVHJhbnNmb3JtVmFsdWVzID0gZmFsc2U7XG4gICAgdmFyIGNoYW5nZWRWYWx1ZVR5cGVLZXlzID0gW107XG4gICAgdGFyZ2V0UG9zaXRpb25hbEtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHZpc3VhbEVsZW1lbnQuZ2V0VmFsdWUoa2V5KTtcbiAgICAgICAgaWYgKCF2aXN1YWxFbGVtZW50Lmhhc1ZhbHVlKGtleSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBmcm9tID0gb3JpZ2luW2tleV07XG4gICAgICAgIHZhciBmcm9tVHlwZSA9IGZpbmREaW1lbnNpb25WYWx1ZVR5cGUoZnJvbSk7XG4gICAgICAgIHZhciB0byA9IHRhcmdldFtrZXldO1xuICAgICAgICB2YXIgdG9UeXBlO1xuICAgICAgICAvLyBUT0RPOiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGJhc2ljYWxseSB0aHJvd3MgYW4gZXJyb3JcbiAgICAgICAgLy8gaWYgeW91IHRyeSBhbmQgZG8gdmFsdWUgY29udmVyc2lvbiB2aWEga2V5ZnJhbWVzLiBUaGVyZSdzIHByb2JhYmx5XG4gICAgICAgIC8vIGEgd2F5IG9mIGRvaW5nIHRoaXMgYnV0IHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgd291bGQgbmVlZCBncmVhdGVyIHNjcnV0aW55LFxuICAgICAgICAvLyBhcyBpdCdkIGJlIGRvaW5nIG11bHRpcGxlIHJlc2l6ZS1yZW1lYXN1cmUgb3BlcmF0aW9ucy5cbiAgICAgICAgaWYgKGlzS2V5ZnJhbWVzVGFyZ2V0KHRvKSkge1xuICAgICAgICAgICAgdmFyIG51bUtleWZyYW1lcyA9IHRvLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBmcm9tSW5kZXggPSB0b1swXSA9PT0gbnVsbCA/IDEgOiAwO1xuICAgICAgICAgICAgZnJvbSA9IHRvW2Zyb21JbmRleF07XG4gICAgICAgICAgICBmcm9tVHlwZSA9IGZpbmREaW1lbnNpb25WYWx1ZVR5cGUoZnJvbSk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gZnJvbUluZGV4OyBpIDwgbnVtS2V5ZnJhbWVzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRvVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICB0b1R5cGUgPSBmaW5kRGltZW5zaW9uVmFsdWVUeXBlKHRvW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgaW52YXJpYW50KHRvVHlwZSA9PT0gZnJvbVR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChpc051bU9yUHhUeXBlKGZyb21UeXBlKSAmJiBpc051bU9yUHhUeXBlKHRvVHlwZSkpLCBcIktleWZyYW1lcyBtdXN0IGJlIG9mIHRoZSBzYW1lIGRpbWVuc2lvbiBhcyB0aGUgY3VycmVudCB2YWx1ZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGludmFyaWFudChmaW5kRGltZW5zaW9uVmFsdWVUeXBlKHRvW2ldKSA9PT0gdG9UeXBlLCBcIkFsbCBrZXlmcmFtZXMgbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRvVHlwZSA9IGZpbmREaW1lbnNpb25WYWx1ZVR5cGUodG8pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmcm9tVHlwZSAhPT0gdG9UeXBlKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGV5J3JlIGJvdGgganVzdCBudW1iZXIgb3IgcHgsIGNvbnZlcnQgdGhlbSBib3RoIHRvIG51bWJlcnMgcmF0aGVyIHRoYW5cbiAgICAgICAgICAgIC8vIHJlbHlpbmcgb24gcmVzaXplL3JlbWVhc3VyZSB0byBjb252ZXJ0ICh3aGljaCBpcyB3YXN0ZWZ1bCBpbiB0aGlzIHNpdHVhdGlvbilcbiAgICAgICAgICAgIGlmIChpc051bU9yUHhUeXBlKGZyb21UeXBlKSAmJiBpc051bU9yUHhUeXBlKHRvVHlwZSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHZhbHVlLmdldCgpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5zZXQocGFyc2VGbG9hdChjdXJyZW50KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdG8gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBwYXJzZUZsb2F0KHRvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0bykgJiYgdG9UeXBlID09PSBweCkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHRvLm1hcChwYXJzZUZsb2F0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICgoZnJvbVR5cGUgPT09IG51bGwgfHwgZnJvbVR5cGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZyb21UeXBlLnRyYW5zZm9ybSkgJiZcbiAgICAgICAgICAgICAgICAodG9UeXBlID09PSBudWxsIHx8IHRvVHlwZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdG9UeXBlLnRyYW5zZm9ybSkgJiZcbiAgICAgICAgICAgICAgICAoZnJvbSA9PT0gMCB8fCB0byA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBvbmUgb3IgdGhlIG90aGVyIHZhbHVlIGlzIDAsIGl0J3Mgc2FmZSB0byBjb2VyY2UgaXQgdG8gdGhlXG4gICAgICAgICAgICAgICAgLy8gdHlwZSBvZiB0aGUgb3RoZXIgd2l0aG91dCBtZWFzdXJlbWVudFxuICAgICAgICAgICAgICAgIGlmIChmcm9tID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLnNldCh0b1R5cGUudHJhbnNmb3JtKGZyb20pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gZnJvbVR5cGUudHJhbnNmb3JtKHRvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBnb2luZyB0byBkbyB2YWx1ZSBjb252ZXJzaW9uIHZpYSBET00gbWVhc3VyZW1lbnRzLCB3ZSBmaXJzdFxuICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gcmVtb3ZlIG5vbi1wb3NpdGlvbmFsIHRyYW5zZm9ybSB2YWx1ZXMgdGhhdCBjb3VsZCBhZmZlY3QgdGhlIGJib3ggbWVhc3VyZW1lbnRzLlxuICAgICAgICAgICAgICAgIGlmICghaGFzQXR0ZW1wdGVkVG9SZW1vdmVUcmFuc2Zvcm1WYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZFRyYW5zZm9ybVZhbHVlcyA9XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVOb25UcmFuc2xhdGlvbmFsVHJhbnNmb3JtKHZpc3VhbEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBoYXNBdHRlbXB0ZWRUb1JlbW92ZVRyYW5zZm9ybVZhbHVlcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNoYW5nZWRWYWx1ZVR5cGVLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uRW5kW2tleV0gPVxuICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uRW5kW2tleV0gIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0cmFuc2l0aW9uRW5kW2tleV1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGFyZ2V0W2tleV07XG4gICAgICAgICAgICAgICAgc2V0QW5kUmVzZXRWZWxvY2l0eSh2YWx1ZSwgdG8pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGNoYW5nZWRWYWx1ZVR5cGVLZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIgc2Nyb2xsWV8xID0gY2hhbmdlZFZhbHVlVHlwZUtleXMuaW5kZXhPZihcImhlaWdodFwiKSA+PSAwXG4gICAgICAgICAgICA/IHdpbmRvdy5wYWdlWU9mZnNldFxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB2YXIgY29udmVydGVkVGFyZ2V0ID0gY29udmVydENoYW5nZWRWYWx1ZVR5cGVzKHRhcmdldCwgdmlzdWFsRWxlbWVudCwgY2hhbmdlZFZhbHVlVHlwZUtleXMpO1xuICAgICAgICAvLyBJZiB3ZSByZW1vdmVkIHRyYW5zZm9ybSB2YWx1ZXMsIHJlYXBwbHkgdGhlbSBiZWZvcmUgdGhlIG5leHQgcmVuZGVyXG4gICAgICAgIGlmIChyZW1vdmVkVHJhbnNmb3JtVmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmVtb3ZlZFRyYW5zZm9ybVZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHZhciBfYiA9IF9fcmVhZChfYSwgMiksIGtleSA9IF9iWzBdLCB2YWx1ZSA9IF9iWzFdO1xuICAgICAgICAgICAgICAgIHZpc3VhbEVsZW1lbnQuZ2V0VmFsdWUoa2V5KS5zZXQodmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVhcHBseSBvcmlnaW5hbCB2YWx1ZXNcbiAgICAgICAgdmlzdWFsRWxlbWVudC5zeW5jUmVuZGVyKCk7XG4gICAgICAgIC8vIFJlc3RvcmUgc2Nyb2xsIHBvc2l0aW9uXG4gICAgICAgIGlmIChzY3JvbGxZXzEgIT09IG51bGwpXG4gICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IHNjcm9sbFlfMSB9KTtcbiAgICAgICAgcmV0dXJuIHsgdGFyZ2V0OiBjb252ZXJ0ZWRUYXJnZXQsIHRyYW5zaXRpb25FbmQ6IHRyYW5zaXRpb25FbmQgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB7IHRhcmdldDogdGFyZ2V0LCB0cmFuc2l0aW9uRW5kOiB0cmFuc2l0aW9uRW5kIH07XG4gICAgfVxufTtcbi8qKlxuICogQ29udmVydCB2YWx1ZSB0eXBlcyBmb3IgeC95L3dpZHRoL2hlaWdodC90b3AvbGVmdC9ib3R0b20vcmlnaHRcbiAqXG4gKiBBbGxvd3MgYW5pbWF0aW9uIGJldHdlZW4gYCdhdXRvJ2AgLT4gYCcxMDAlJ2Agb3IgYDBgIC0+IGAnY2FsYyg1MCUgLSAxMHZ3KSdgXG4gKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHVuaXRDb252ZXJzaW9uKHZpc3VhbEVsZW1lbnQsIHRhcmdldCwgb3JpZ2luLCB0cmFuc2l0aW9uRW5kKSB7XG4gICAgcmV0dXJuIGhhc1Bvc2l0aW9uYWxLZXkodGFyZ2V0KVxuICAgICAgICA/IGNoZWNrQW5kQ29udmVydENoYW5nZWRWYWx1ZVR5cGVzKHZpc3VhbEVsZW1lbnQsIHRhcmdldCwgb3JpZ2luLCB0cmFuc2l0aW9uRW5kKVxuICAgICAgICA6IHsgdGFyZ2V0OiB0YXJnZXQsIHRyYW5zaXRpb25FbmQ6IHRyYW5zaXRpb25FbmQgfTtcbn1cblxuZXhwb3J0IHsgQm91bmRpbmdCb3hEaW1lbnNpb24sIHBvc2l0aW9uYWxWYWx1ZXMsIHVuaXRDb252ZXJzaW9uIH07XG4iLCJpbXBvcnQgeyByZXNvbHZlQ1NTVmFyaWFibGVzIH0gZnJvbSAnLi9jc3MtdmFyaWFibGVzLWNvbnZlcnNpb24ubWpzJztcbmltcG9ydCB7IHVuaXRDb252ZXJzaW9uIH0gZnJvbSAnLi91bml0LWNvbnZlcnNpb24ubWpzJztcblxuLyoqXG4gKiBQYXJzZSBhIERPTSB2YXJpYW50IHRvIG1ha2UgaXQgYW5pbWF0YWJsZS4gVGhpcyBpbnZvbHZlcyByZXNvbHZpbmcgQ1NTIHZhcmlhYmxlc1xuICogYW5kIGVuc3VyaW5nIGFuaW1hdGlvbnMgbGlrZSBcIjIwJVwiID0+IFwiY2FsYyg1MHZ3KVwiIGFyZSBwZXJmb3JtZWQgaW4gcGl4ZWxzLlxuICovXG52YXIgcGFyc2VEb21WYXJpYW50ID0gZnVuY3Rpb24gKHZpc3VhbEVsZW1lbnQsIHRhcmdldCwgb3JpZ2luLCB0cmFuc2l0aW9uRW5kKSB7XG4gICAgdmFyIHJlc29sdmVkID0gcmVzb2x2ZUNTU1ZhcmlhYmxlcyh2aXN1YWxFbGVtZW50LCB0YXJnZXQsIHRyYW5zaXRpb25FbmQpO1xuICAgIHRhcmdldCA9IHJlc29sdmVkLnRhcmdldDtcbiAgICB0cmFuc2l0aW9uRW5kID0gcmVzb2x2ZWQudHJhbnNpdGlvbkVuZDtcbiAgICByZXR1cm4gdW5pdENvbnZlcnNpb24odmlzdWFsRWxlbWVudCwgdGFyZ2V0LCBvcmlnaW4sIHRyYW5zaXRpb25FbmQpO1xufTtcblxuZXhwb3J0IHsgcGFyc2VEb21WYXJpYW50IH07XG4iLCJpbXBvcnQgeyBfX3Jlc3QsIF9fYXNzaWduIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgdmlzdWFsRWxlbWVudCB9IGZyb20gJy4uL2luZGV4Lm1qcyc7XG5pbXBvcnQgeyBnZXRPcmlnaW4sIGNoZWNrVGFyZ2V0Rm9yTmV3VmFsdWVzIH0gZnJvbSAnLi4vdXRpbHMvc2V0dGVycy5tanMnO1xuaW1wb3J0IHsgYnVpbGRIVE1MU3R5bGVzIH0gZnJvbSAnLi91dGlscy9idWlsZC1zdHlsZXMubWpzJztcbmltcG9ydCB7IGlzQ1NTVmFyaWFibGUgfSBmcm9tICcuLi9kb20vdXRpbHMvaXMtY3NzLXZhcmlhYmxlLm1qcyc7XG5pbXBvcnQgeyBwYXJzZURvbVZhcmlhbnQgfSBmcm9tICcuLi9kb20vdXRpbHMvcGFyc2UtZG9tLXZhcmlhbnQubWpzJztcbmltcG9ydCB7IGlzVHJhbnNmb3JtUHJvcCB9IGZyb20gJy4vdXRpbHMvdHJhbnNmb3JtLm1qcyc7XG5pbXBvcnQgeyBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMgfSBmcm9tICcuL3V0aWxzL3NjcmFwZS1tb3Rpb24tdmFsdWVzLm1qcyc7XG5pbXBvcnQgeyByZW5kZXJIVE1MIH0gZnJvbSAnLi91dGlscy9yZW5kZXIubWpzJztcbmltcG9ydCB7IGdldERlZmF1bHRWYWx1ZVR5cGUgfSBmcm9tICcuLi9kb20vdmFsdWUtdHlwZXMvZGVmYXVsdHMubWpzJztcbmltcG9ydCB7IG1lYXN1cmVWaWV3cG9ydEJveCB9IGZyb20gJy4uLy4uL3Byb2plY3Rpb24vdXRpbHMvbWVhc3VyZS5tanMnO1xuXG5mdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59XG52YXIgaHRtbENvbmZpZyA9IHtcbiAgICB0cmVlVHlwZTogXCJkb21cIixcbiAgICByZWFkVmFsdWVGcm9tSW5zdGFuY2U6IGZ1bmN0aW9uIChkb21FbGVtZW50LCBrZXkpIHtcbiAgICAgICAgaWYgKGlzVHJhbnNmb3JtUHJvcChrZXkpKSB7XG4gICAgICAgICAgICB2YXIgZGVmYXVsdFR5cGUgPSBnZXREZWZhdWx0VmFsdWVUeXBlKGtleSk7XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFR5cGUgPyBkZWZhdWx0VHlwZS5kZWZhdWx0IHx8IDAgOiAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGRvbUVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuICgoaXNDU1NWYXJpYWJsZShrZXkpXG4gICAgICAgICAgICAgICAgPyBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoa2V5KVxuICAgICAgICAgICAgICAgIDogY29tcHV0ZWRTdHlsZVtrZXldKSB8fCAwKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgc29ydE5vZGVQb3NpdGlvbjogZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIHJldHVybnMgYSBiaXRtYXNrLCBieSB1c2luZyB0aGUgYml0d2lzZSAmXG4gICAgICAgICAqIHdlJ3JlIHJldHVybmluZyB0cnVlIGlmIDIgaW4gdGhhdCBiaXRtYXNrIGlzIHNldCB0byB0cnVlLiAyIGlzIHNldFxuICAgICAgICAgKiB0byB0cnVlIGlmIGIgcHJlY2VlZHMgYS5cbiAgICAgICAgICovXG4gICAgICAgIHJldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpICYgMiA/IDEgOiAtMTtcbiAgICB9LFxuICAgIGdldEJhc2VUYXJnZXQ6IGZ1bmN0aW9uIChwcm9wcywga2V5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHByb3BzLnN0eWxlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Fba2V5XTtcbiAgICB9LFxuICAgIG1lYXN1cmVWaWV3cG9ydEJveDogZnVuY3Rpb24gKGVsZW1lbnQsIF9hKSB7XG4gICAgICAgIHZhciB0cmFuc2Zvcm1QYWdlUG9pbnQgPSBfYS50cmFuc2Zvcm1QYWdlUG9pbnQ7XG4gICAgICAgIHJldHVybiBtZWFzdXJlVmlld3BvcnRCb3goZWxlbWVudCwgdHJhbnNmb3JtUGFnZVBvaW50KTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFJlc2V0IHRoZSB0cmFuc2Zvcm0gb24gdGhlIGN1cnJlbnQgRWxlbWVudC4gVGhpcyBpcyBjYWxsZWQgYXMgcGFydFxuICAgICAqIG9mIGEgYmF0Y2hlZCBwcm9jZXNzIGFjcm9zcyB0aGUgZW50aXJlIGxheW91dCB0cmVlLiBUbyByZW1vdmUgdGhpcyB3cml0ZVxuICAgICAqIGN5Y2xlIGl0J2QgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gXCJ1bmRvXCIgYWxsIHRoZSBjdXJyZW50XG4gICAgICogbGF5b3V0IHRyYW5zZm9ybXMgdXAgdGhlIHRyZWUgaW4gdGhlIHNhbWUgd2F5IHRoaXMuZ2V0Qm91bmRpbmdCb3hXaXRob3V0VHJhbnNmb3Jtc1xuICAgICAqIHdvcmtzXG4gICAgICovXG4gICAgcmVzZXRUcmFuc2Zvcm06IGZ1bmN0aW9uIChlbGVtZW50LCBkb21FbGVtZW50LCBwcm9wcykge1xuICAgICAgICB2YXIgdHJhbnNmb3JtVGVtcGxhdGUgPSBwcm9wcy50cmFuc2Zvcm1UZW1wbGF0ZTtcbiAgICAgICAgZG9tRWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1UZW1wbGF0ZVxuICAgICAgICAgICAgPyB0cmFuc2Zvcm1UZW1wbGF0ZSh7fSwgXCJcIilcbiAgICAgICAgICAgIDogXCJub25lXCI7XG4gICAgICAgIC8vIEVuc3VyZSB0aGF0IHdoYXRldmVyIGhhcHBlbnMgbmV4dCwgd2UgcmVzdG9yZSBvdXIgdHJhbnNmb3JtIG9uIHRoZSBuZXh0IGZyYW1lXG4gICAgICAgIGVsZW1lbnQuc2NoZWR1bGVSZW5kZXIoKTtcbiAgICB9LFxuICAgIHJlc3RvcmVUcmFuc2Zvcm06IGZ1bmN0aW9uIChpbnN0YW5jZSwgbXV0YWJsZVN0YXRlKSB7XG4gICAgICAgIGluc3RhbmNlLnN0eWxlLnRyYW5zZm9ybSA9IG11dGFibGVTdGF0ZS5zdHlsZS50cmFuc2Zvcm07XG4gICAgfSxcbiAgICByZW1vdmVWYWx1ZUZyb21SZW5kZXJTdGF0ZTogZnVuY3Rpb24gKGtleSwgX2EpIHtcbiAgICAgICAgdmFyIHZhcnMgPSBfYS52YXJzLCBzdHlsZSA9IF9hLnN0eWxlO1xuICAgICAgICBkZWxldGUgdmFyc1trZXldO1xuICAgICAgICBkZWxldGUgc3R5bGVba2V5XTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEVuc3VyZSB0aGF0IEhUTUwgYW5kIEZyYW1lci1zcGVjaWZpYyB2YWx1ZSB0eXBlcyBsaWtlIGBweGAtPmAlYCBhbmQgYENvbG9yYFxuICAgICAqIGNhbiBiZSBhbmltYXRlZCBieSBNb3Rpb24uXG4gICAgICovXG4gICAgbWFrZVRhcmdldEFuaW1hdGFibGU6IGZ1bmN0aW9uIChlbGVtZW50LCBfYSwgX2IsIGlzTW91bnRlZCkge1xuICAgICAgICB2YXIgdHJhbnNmb3JtVmFsdWVzID0gX2IudHJhbnNmb3JtVmFsdWVzO1xuICAgICAgICBpZiAoaXNNb3VudGVkID09PSB2b2lkIDApIHsgaXNNb3VudGVkID0gdHJ1ZTsgfVxuICAgICAgICB2YXIgdHJhbnNpdGlvbiA9IF9hLnRyYW5zaXRpb24sIHRyYW5zaXRpb25FbmQgPSBfYS50cmFuc2l0aW9uRW5kLCB0YXJnZXQgPSBfX3Jlc3QoX2EsIFtcInRyYW5zaXRpb25cIiwgXCJ0cmFuc2l0aW9uRW5kXCJdKTtcbiAgICAgICAgdmFyIG9yaWdpbiA9IGdldE9yaWdpbih0YXJnZXQsIHRyYW5zaXRpb24gfHwge30sIGVsZW1lbnQpO1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgRnJhbWVyIGhhcyBwcm92aWRlZCBhIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYENvbG9yYCBldGMgdmFsdWUgdHlwZXMsIGNvbnZlcnQgdGhlbVxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlcykge1xuICAgICAgICAgICAgaWYgKHRyYW5zaXRpb25FbmQpXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbkVuZCA9IHRyYW5zZm9ybVZhbHVlcyh0cmFuc2l0aW9uRW5kKTtcbiAgICAgICAgICAgIGlmICh0YXJnZXQpXG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gdHJhbnNmb3JtVmFsdWVzKHRhcmdldCk7XG4gICAgICAgICAgICBpZiAob3JpZ2luKVxuICAgICAgICAgICAgICAgIG9yaWdpbiA9IHRyYW5zZm9ybVZhbHVlcyhvcmlnaW4pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc01vdW50ZWQpIHtcbiAgICAgICAgICAgIGNoZWNrVGFyZ2V0Rm9yTmV3VmFsdWVzKGVsZW1lbnQsIHRhcmdldCwgb3JpZ2luKTtcbiAgICAgICAgICAgIHZhciBwYXJzZWQgPSBwYXJzZURvbVZhcmlhbnQoZWxlbWVudCwgdGFyZ2V0LCBvcmlnaW4sIHRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgICAgdHJhbnNpdGlvbkVuZCA9IHBhcnNlZC50cmFuc2l0aW9uRW5kO1xuICAgICAgICAgICAgdGFyZ2V0ID0gcGFyc2VkLnRhcmdldDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX19hc3NpZ24oeyB0cmFuc2l0aW9uOiB0cmFuc2l0aW9uLCB0cmFuc2l0aW9uRW5kOiB0cmFuc2l0aW9uRW5kIH0sIHRhcmdldCk7XG4gICAgfSxcbiAgICBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6IHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyxcbiAgICBidWlsZDogZnVuY3Rpb24gKGVsZW1lbnQsIHJlbmRlclN0YXRlLCBsYXRlc3RWYWx1ZXMsIG9wdGlvbnMsIHByb3BzKSB7XG4gICAgICAgIGlmIChlbGVtZW50LmlzVmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZW5kZXJTdGF0ZS5zdHlsZS52aXNpYmlsaXR5ID0gZWxlbWVudC5pc1Zpc2libGVcbiAgICAgICAgICAgICAgICA/IFwidmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgOiBcImhpZGRlblwiO1xuICAgICAgICB9XG4gICAgICAgIGJ1aWxkSFRNTFN0eWxlcyhyZW5kZXJTdGF0ZSwgbGF0ZXN0VmFsdWVzLCBvcHRpb25zLCBwcm9wcy50cmFuc2Zvcm1UZW1wbGF0ZSk7XG4gICAgfSxcbiAgICByZW5kZXI6IHJlbmRlckhUTUwsXG59O1xudmFyIGh0bWxWaXN1YWxFbGVtZW50ID0gdmlzdWFsRWxlbWVudChodG1sQ29uZmlnKTtcblxuZXhwb3J0IHsgZ2V0Q29tcHV0ZWRTdHlsZSwgaHRtbENvbmZpZywgaHRtbFZpc3VhbEVsZW1lbnQgfTtcbiIsImltcG9ydCB7IF9fYXNzaWduIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgdmlzdWFsRWxlbWVudCB9IGZyb20gJy4uL2luZGV4Lm1qcyc7XG5pbXBvcnQgeyBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMgfSBmcm9tICcuL3V0aWxzL3NjcmFwZS1tb3Rpb24tdmFsdWVzLm1qcyc7XG5pbXBvcnQgeyBodG1sQ29uZmlnIH0gZnJvbSAnLi4vaHRtbC92aXN1YWwtZWxlbWVudC5tanMnO1xuaW1wb3J0IHsgYnVpbGRTVkdBdHRycyB9IGZyb20gJy4vdXRpbHMvYnVpbGQtYXR0cnMubWpzJztcbmltcG9ydCB7IGNhbWVsVG9EYXNoIH0gZnJvbSAnLi4vZG9tL3V0aWxzL2NhbWVsLXRvLWRhc2gubWpzJztcbmltcG9ydCB7IGNhbWVsQ2FzZUF0dHJpYnV0ZXMgfSBmcm9tICcuL3V0aWxzL2NhbWVsLWNhc2UtYXR0cnMubWpzJztcbmltcG9ydCB7IGlzVHJhbnNmb3JtUHJvcCB9IGZyb20gJy4uL2h0bWwvdXRpbHMvdHJhbnNmb3JtLm1qcyc7XG5pbXBvcnQgeyByZW5kZXJTVkcgfSBmcm9tICcuL3V0aWxzL3JlbmRlci5tanMnO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFZhbHVlVHlwZSB9IGZyb20gJy4uL2RvbS92YWx1ZS10eXBlcy9kZWZhdWx0cy5tanMnO1xuXG52YXIgc3ZnVmlzdWFsRWxlbWVudCA9IHZpc3VhbEVsZW1lbnQoX19hc3NpZ24oX19hc3NpZ24oe30sIGh0bWxDb25maWcpLCB7IGdldEJhc2VUYXJnZXQ6IGZ1bmN0aW9uIChwcm9wcywga2V5KSB7XG4gICAgICAgIHJldHVybiBwcm9wc1trZXldO1xuICAgIH0sIHJlYWRWYWx1ZUZyb21JbnN0YW5jZTogZnVuY3Rpb24gKGRvbUVsZW1lbnQsIGtleSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChpc1RyYW5zZm9ybVByb3Aoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuICgoX2EgPSBnZXREZWZhdWx0VmFsdWVUeXBlKGtleSkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kZWZhdWx0KSB8fCAwO1xuICAgICAgICB9XG4gICAgICAgIGtleSA9ICFjYW1lbENhc2VBdHRyaWJ1dGVzLmhhcyhrZXkpID8gY2FtZWxUb0Rhc2goa2V5KSA6IGtleTtcbiAgICAgICAgcmV0dXJuIGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSk7XG4gICAgfSwgc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzOiBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMsIGJ1aWxkOiBmdW5jdGlvbiAoX2VsZW1lbnQsIHJlbmRlclN0YXRlLCBsYXRlc3RWYWx1ZXMsIG9wdGlvbnMsIHByb3BzKSB7XG4gICAgICAgIGJ1aWxkU1ZHQXR0cnMocmVuZGVyU3RhdGUsIGxhdGVzdFZhbHVlcywgb3B0aW9ucywgcHJvcHMudHJhbnNmb3JtVGVtcGxhdGUpO1xuICAgIH0sIHJlbmRlcjogcmVuZGVyU1ZHIH0pKTtcblxuZXhwb3J0IHsgc3ZnVmlzdWFsRWxlbWVudCB9O1xuIiwiaW1wb3J0IHsgaHRtbFZpc3VhbEVsZW1lbnQgfSBmcm9tICcuLi9odG1sL3Zpc3VhbC1lbGVtZW50Lm1qcyc7XG5pbXBvcnQgeyBzdmdWaXN1YWxFbGVtZW50IH0gZnJvbSAnLi4vc3ZnL3Zpc3VhbC1lbGVtZW50Lm1qcyc7XG5pbXBvcnQgeyBpc1NWR0NvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvaXMtc3ZnLWNvbXBvbmVudC5tanMnO1xuXG52YXIgY3JlYXRlRG9tVmlzdWFsRWxlbWVudCA9IGZ1bmN0aW9uIChDb21wb25lbnQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gaXNTVkdDb21wb25lbnQoQ29tcG9uZW50KVxuICAgICAgICA/IHN2Z1Zpc3VhbEVsZW1lbnQob3B0aW9ucywgeyBlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbjogZmFsc2UgfSlcbiAgICAgICAgOiBodG1sVmlzdWFsRWxlbWVudChvcHRpb25zLCB7IGVuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uOiB0cnVlIH0pO1xufTtcblxuZXhwb3J0IHsgY3JlYXRlRG9tVmlzdWFsRWxlbWVudCB9O1xuIiwiaW1wb3J0IHsgcHggfSBmcm9tICdzdHlsZS12YWx1ZS10eXBlcyc7XG5cbmZ1bmN0aW9uIHBpeGVsc1RvUGVyY2VudChwaXhlbHMsIGF4aXMpIHtcbiAgICBpZiAoYXhpcy5tYXggPT09IGF4aXMubWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICByZXR1cm4gKHBpeGVscyAvIChheGlzLm1heCAtIGF4aXMubWluKSkgKiAxMDA7XG59XG4vKipcbiAqIFdlIGFsd2F5cyBjb3JyZWN0IGJvcmRlclJhZGl1cyBhcyBhIHBlcmNlbnRhZ2UgcmF0aGVyIHRoYW4gcGl4ZWxzIHRvIHJlZHVjZSBwYWludHMuXG4gKiBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSBwcm9qZWN0aW5nIGEgYm94IHRoYXQgaXMgMTAwcHggd2lkZSB3aXRoIGEgMTBweCBib3JkZXJSYWRpdXNcbiAqIGludG8gYSBib3ggdGhhdCBpcyAyMDBweCB3aWRlIHdpdGggYSAyMHB4IGJvcmRlclJhZGl1cywgdGhhdCBpcyBhY3R1YWxseSBhIDEwJVxuICogYm9yZGVyUmFkaXVzIGluIGJvdGggc3RhdGVzLiBJZiB3ZSBhbmltYXRlIGJldHdlZW4gdGhlIHR3byBpbiBwaXhlbHMgdGhhdCB3aWxsIHRyaWdnZXJcbiAqIGEgcGFpbnQgZWFjaCB0aW1lLiBJZiB3ZSBhbmltYXRlIGJldHdlZW4gdGhlIHR3byBpbiBwZXJjZW50YWdlIHdlJ2xsIGF2b2lkIGEgcGFpbnQuXG4gKi9cbnZhciBjb3JyZWN0Qm9yZGVyUmFkaXVzID0ge1xuICAgIGNvcnJlY3Q6IGZ1bmN0aW9uIChsYXRlc3QsIG5vZGUpIHtcbiAgICAgICAgaWYgKCFub2RlLnRhcmdldClcbiAgICAgICAgICAgIHJldHVybiBsYXRlc3Q7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBsYXRlc3QgaXMgYSBzdHJpbmcsIGlmIGl0J3MgYSBwZXJjZW50YWdlIHdlIGNhbiByZXR1cm4gaW1tZWRpYXRlbHkgYXMgaXQnc1xuICAgICAgICAgKiBnb2luZyB0byBiZSBzdHJldGNoZWQgYXBwcm9wcmlhdGVseS4gT3RoZXJ3aXNlLCBpZiBpdCdzIGEgcGl4ZWwsIGNvbnZlcnQgaXQgdG8gYSBudW1iZXIuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAodHlwZW9mIGxhdGVzdCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaWYgKHB4LnRlc3QobGF0ZXN0KSkge1xuICAgICAgICAgICAgICAgIGxhdGVzdCA9IHBhcnNlRmxvYXQobGF0ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBsYXRlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIGxhdGVzdCBpcyBhIG51bWJlciwgaXQncyBhIHBpeGVsIHZhbHVlLiBXZSB1c2UgdGhlIGN1cnJlbnQgdmlld3BvcnRCb3ggdG8gY2FsY3VsYXRlIHRoYXRcbiAgICAgICAgICogcGl4ZWwgdmFsdWUgYXMgYSBwZXJjZW50YWdlIG9mIGVhY2ggYXhpc1xuICAgICAgICAgKi9cbiAgICAgICAgdmFyIHggPSBwaXhlbHNUb1BlcmNlbnQobGF0ZXN0LCBub2RlLnRhcmdldC54KTtcbiAgICAgICAgdmFyIHkgPSBwaXhlbHNUb1BlcmNlbnQobGF0ZXN0LCBub2RlLnRhcmdldC55KTtcbiAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHgsIFwiJSBcIikuY29uY2F0KHksIFwiJVwiKTtcbiAgICB9LFxufTtcblxuZXhwb3J0IHsgY29ycmVjdEJvcmRlclJhZGl1cywgcGl4ZWxzVG9QZXJjZW50IH07XG4iLCJpbXBvcnQgeyBtaXggfSBmcm9tICdwb3Btb3Rpb24nO1xuaW1wb3J0IHsgY29tcGxleCB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcbmltcG9ydCB7IGNzc1ZhcmlhYmxlUmVnZXggfSBmcm9tICcuLi8uLi9yZW5kZXIvZG9tL3V0aWxzL2Nzcy12YXJpYWJsZXMtY29udmVyc2lvbi5tanMnO1xuXG52YXIgdmFyVG9rZW4gPSBcIl8kY3NzXCI7XG52YXIgY29ycmVjdEJveFNoYWRvdyA9IHtcbiAgICBjb3JyZWN0OiBmdW5jdGlvbiAobGF0ZXN0LCBfYSkge1xuICAgICAgICB2YXIgdHJlZVNjYWxlID0gX2EudHJlZVNjYWxlLCBwcm9qZWN0aW9uRGVsdGEgPSBfYS5wcm9qZWN0aW9uRGVsdGE7XG4gICAgICAgIHZhciBvcmlnaW5hbCA9IGxhdGVzdDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdlIG5lZWQgdG8gZmlyc3Qgc3RyaXAgYW5kIHN0b3JlIENTUyB2YXJpYWJsZXMgZnJvbSB0aGUgc3RyaW5nLlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGNvbnRhaW5zQ1NTVmFyaWFibGVzID0gbGF0ZXN0LmluY2x1ZGVzKFwidmFyKFwiKTtcbiAgICAgICAgdmFyIGNzc1ZhcmlhYmxlcyA9IFtdO1xuICAgICAgICBpZiAoY29udGFpbnNDU1NWYXJpYWJsZXMpIHtcbiAgICAgICAgICAgIGxhdGVzdCA9IGxhdGVzdC5yZXBsYWNlKGNzc1ZhcmlhYmxlUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIGNzc1ZhcmlhYmxlcy5wdXNoKG1hdGNoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFyVG9rZW47XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc2hhZG93ID0gY29tcGxleC5wYXJzZShsYXRlc3QpO1xuICAgICAgICAvLyBUT0RPOiBEb2Vzbid0IHN1cHBvcnQgbXVsdGlwbGUgc2hhZG93c1xuICAgICAgICBpZiAoc2hhZG93Lmxlbmd0aCA+IDUpXG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWw7XG4gICAgICAgIHZhciB0ZW1wbGF0ZSA9IGNvbXBsZXguY3JlYXRlVHJhbnNmb3JtZXIobGF0ZXN0KTtcbiAgICAgICAgdmFyIG9mZnNldCA9IHR5cGVvZiBzaGFkb3dbMF0gIT09IFwibnVtYmVyXCIgPyAxIDogMDtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBvdmVyYWxsIGNvbnRleHQgc2NhbGVcbiAgICAgICAgdmFyIHhTY2FsZSA9IHByb2plY3Rpb25EZWx0YS54LnNjYWxlICogdHJlZVNjYWxlLng7XG4gICAgICAgIHZhciB5U2NhbGUgPSBwcm9qZWN0aW9uRGVsdGEueS5zY2FsZSAqIHRyZWVTY2FsZS55O1xuICAgICAgICBzaGFkb3dbMCArIG9mZnNldF0gLz0geFNjYWxlO1xuICAgICAgICBzaGFkb3dbMSArIG9mZnNldF0gLz0geVNjYWxlO1xuICAgICAgICAvKipcbiAgICAgICAgICogSWRlYWxseSB3ZSdkIGNvcnJlY3QgeCBhbmQgeSBzY2FsZXMgaW5kaXZpZHVhbGx5LCBidXQgYmVjYXVzZSBibHVyIGFuZFxuICAgICAgICAgKiBzcHJlYWQgYXBwbHkgdG8gYm90aCB3ZSBoYXZlIHRvIHRha2UgYSBzY2FsZSBhdmVyYWdlIGFuZCBhcHBseSB0aGF0IGluc3RlYWQuXG4gICAgICAgICAqIFdlIGNvdWxkIHBvdGVudGlhbGx5IGltcHJvdmUgdGhlIG91dGNvbWUgb2YgdGhpcyBieSBpbmNvcnBvcmF0aW5nIHRoZSByYXRpbyBiZXR3ZWVuXG4gICAgICAgICAqIHRoZSB0d28gc2NhbGVzLlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGF2ZXJhZ2VTY2FsZSA9IG1peCh4U2NhbGUsIHlTY2FsZSwgMC41KTtcbiAgICAgICAgLy8gQmx1clxuICAgICAgICBpZiAodHlwZW9mIHNoYWRvd1syICsgb2Zmc2V0XSA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgIHNoYWRvd1syICsgb2Zmc2V0XSAvPSBhdmVyYWdlU2NhbGU7XG4gICAgICAgIC8vIFNwcmVhZFxuICAgICAgICBpZiAodHlwZW9mIHNoYWRvd1szICsgb2Zmc2V0XSA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgIHNoYWRvd1szICsgb2Zmc2V0XSAvPSBhdmVyYWdlU2NhbGU7XG4gICAgICAgIHZhciBvdXRwdXQgPSB0ZW1wbGF0ZShzaGFkb3cpO1xuICAgICAgICBpZiAoY29udGFpbnNDU1NWYXJpYWJsZXMpIHtcbiAgICAgICAgICAgIHZhciBpXzEgPSAwO1xuICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnJlcGxhY2UodmFyVG9rZW4sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY3NzVmFyaWFibGUgPSBjc3NWYXJpYWJsZXNbaV8xXTtcbiAgICAgICAgICAgICAgICBpXzErKztcbiAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFyaWFibGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH0sXG59O1xuXG5leHBvcnQgeyBjb3JyZWN0Qm94U2hhZG93IH07XG4iLCJpbXBvcnQgeyBfX2V4dGVuZHMsIF9fYXNzaWduLCBfX3JlYWQgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgc3luYyBmcm9tICdmcmFtZXN5bmMnO1xuaW1wb3J0IFJlYWN0X19kZWZhdWx0LCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VQcmVzZW5jZSB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvQW5pbWF0ZVByZXNlbmNlL3VzZS1wcmVzZW5jZS5tanMnO1xuaW1wb3J0IHsgTGF5b3V0R3JvdXBDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9MYXlvdXRHcm91cENvbnRleHQubWpzJztcbmltcG9ydCB7IFN3aXRjaExheW91dEdyb3VwQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvU3dpdGNoTGF5b3V0R3JvdXBDb250ZXh0Lm1qcyc7XG5pbXBvcnQgeyBnbG9iYWxQcm9qZWN0aW9uU3RhdGUgfSBmcm9tICcuLi8uLi8uLi9wcm9qZWN0aW9uL25vZGUvc3RhdGUubWpzJztcbmltcG9ydCB7IGNvcnJlY3RCb3JkZXJSYWRpdXMgfSBmcm9tICcuLi8uLi8uLi9wcm9qZWN0aW9uL3N0eWxlcy9zY2FsZS1ib3JkZXItcmFkaXVzLm1qcyc7XG5pbXBvcnQgeyBjb3JyZWN0Qm94U2hhZG93IH0gZnJvbSAnLi4vLi4vLi4vcHJvamVjdGlvbi9zdHlsZXMvc2NhbGUtYm94LXNoYWRvdy5tanMnO1xuaW1wb3J0IHsgYWRkU2NhbGVDb3JyZWN0b3IgfSBmcm9tICcuLi8uLi8uLi9wcm9qZWN0aW9uL3N0eWxlcy9zY2FsZS1jb3JyZWN0aW9uLm1qcyc7XG5cbnZhciBNZWFzdXJlTGF5b3V0V2l0aENvbnRleHQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE1lYXN1cmVMYXlvdXRXaXRoQ29udGV4dCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBNZWFzdXJlTGF5b3V0V2l0aENvbnRleHQoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBvbmx5IG1vdW50cyBwcm9qZWN0aW9uIG5vZGVzIGZvciBjb21wb25lbnRzIHRoYXRcbiAgICAgKiBuZWVkIG1lYXN1cmluZywgd2UgbWlnaHQgd2FudCB0byBkbyBpdCBmb3IgYWxsIGNvbXBvbmVudHNcbiAgICAgKiBpbiBvcmRlciB0byBpbmNvcnBvcmF0ZSB0cmFuc2Zvcm1zXG4gICAgICovXG4gICAgTWVhc3VyZUxheW91dFdpdGhDb250ZXh0LnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcy5wcm9wcywgdmlzdWFsRWxlbWVudCA9IF9hLnZpc3VhbEVsZW1lbnQsIGxheW91dEdyb3VwID0gX2EubGF5b3V0R3JvdXAsIHN3aXRjaExheW91dEdyb3VwID0gX2Euc3dpdGNoTGF5b3V0R3JvdXAsIGxheW91dElkID0gX2EubGF5b3V0SWQ7XG4gICAgICAgIHZhciBwcm9qZWN0aW9uID0gdmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uO1xuICAgICAgICBhZGRTY2FsZUNvcnJlY3RvcihkZWZhdWx0U2NhbGVDb3JyZWN0b3JzKTtcbiAgICAgICAgaWYgKHByb2plY3Rpb24pIHtcbiAgICAgICAgICAgIGlmIChsYXlvdXRHcm91cCA9PT0gbnVsbCB8fCBsYXlvdXRHcm91cCA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGF5b3V0R3JvdXAuZ3JvdXApXG4gICAgICAgICAgICAgICAgbGF5b3V0R3JvdXAuZ3JvdXAuYWRkKHByb2plY3Rpb24pO1xuICAgICAgICAgICAgaWYgKChzd2l0Y2hMYXlvdXRHcm91cCA9PT0gbnVsbCB8fCBzd2l0Y2hMYXlvdXRHcm91cCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3dpdGNoTGF5b3V0R3JvdXAucmVnaXN0ZXIpICYmIGxheW91dElkKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoTGF5b3V0R3JvdXAucmVnaXN0ZXIocHJvamVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9qZWN0aW9uLnJvb3QuZGlkVXBkYXRlKCk7XG4gICAgICAgICAgICBwcm9qZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoXCJhbmltYXRpb25Db21wbGV0ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuc2FmZVRvUmVtb3ZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHByb2plY3Rpb24uc2V0T3B0aW9ucyhfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcHJvamVjdGlvbi5vcHRpb25zKSwgeyBvbkV4aXRDb21wbGV0ZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuc2FmZVRvUmVtb3ZlKCk7IH0gfSkpO1xuICAgICAgICB9XG4gICAgICAgIGdsb2JhbFByb2plY3Rpb25TdGF0ZS5oYXNFdmVyVXBkYXRlZCA9IHRydWU7XG4gICAgfTtcbiAgICBNZWFzdXJlTGF5b3V0V2l0aENvbnRleHQucHJvdG90eXBlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID0gZnVuY3Rpb24gKHByZXZQcm9wcykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLnByb3BzLCBsYXlvdXREZXBlbmRlbmN5ID0gX2EubGF5b3V0RGVwZW5kZW5jeSwgdmlzdWFsRWxlbWVudCA9IF9hLnZpc3VhbEVsZW1lbnQsIGRyYWcgPSBfYS5kcmFnLCBpc1ByZXNlbnQgPSBfYS5pc1ByZXNlbnQ7XG4gICAgICAgIHZhciBwcm9qZWN0aW9uID0gdmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uO1xuICAgICAgICBpZiAoIXByb2plY3Rpb24pXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRPRE86IFdlIHVzZSB0aGlzIGRhdGEgaW4gcmVsZWdhdGUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG9cbiAgICAgICAgICogcHJvbW90ZSBhIHByZXZpb3VzIGVsZW1lbnQuIFRoZXJlJ3Mgbm8gZ3VhcmFudGVlIGl0cyBwcmVzZW5jZSBkYXRhXG4gICAgICAgICAqIHdpbGwgaGF2ZSB1cGRhdGVkIGJ5IHRoaXMgcG9pbnQgLSBpZiBhIGJ1ZyBsaWtlIHRoaXMgYXJpc2VzIGl0IHdpbGxcbiAgICAgICAgICogaGF2ZSB0byBiZSB0aGF0IHdlIG1hcmtGb3JSZWxlZ2F0aW9uIGFuZCB0aGVuIGZpbmQgYSBuZXcgbGVhZCBzb21lIG90aGVyIHdheSxcbiAgICAgICAgICogcGVyaGFwcyBpbiBkaWRVcGRhdGVcbiAgICAgICAgICovXG4gICAgICAgIHByb2plY3Rpb24uaXNQcmVzZW50ID0gaXNQcmVzZW50O1xuICAgICAgICBpZiAoZHJhZyB8fFxuICAgICAgICAgICAgcHJldlByb3BzLmxheW91dERlcGVuZGVuY3kgIT09IGxheW91dERlcGVuZGVuY3kgfHxcbiAgICAgICAgICAgIGxheW91dERlcGVuZGVuY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcHJvamVjdGlvbi53aWxsVXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNhZmVUb1JlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmV2UHJvcHMuaXNQcmVzZW50ICE9PSBpc1ByZXNlbnQpIHtcbiAgICAgICAgICAgIGlmIChpc1ByZXNlbnQpIHtcbiAgICAgICAgICAgICAgICBwcm9qZWN0aW9uLnByb21vdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFwcm9qZWN0aW9uLnJlbGVnYXRlKCkpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBJZiB0aGVyZSdzIGFub3RoZXIgc3RhY2sgbWVtYmVyIHRha2luZyBvdmVyIGZyb20gdGhpcyBvbmUsXG4gICAgICAgICAgICAgICAgICogaXQncyBpbiBjaGFyZ2Ugb2YgdGhlIGV4aXQgYW5pbWF0aW9uIGFuZCB0aGVyZWZvcmUgc2hvdWxkXG4gICAgICAgICAgICAgICAgICogYmUgaW4gY2hhcmdlIG9mIHRoZSBzYWZlIHRvIHJlbW92ZS4gT3RoZXJ3aXNlIHdlIGNhbGwgaXQgaGVyZS5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBzeW5jLnBvc3RSZW5kZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKChfYSA9IHByb2plY3Rpb24uZ2V0U3RhY2soKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm1lbWJlcnMubGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuc2FmZVRvUmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIE1lYXN1cmVMYXlvdXRXaXRoQ29udGV4dC5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJvamVjdGlvbiA9IHRoaXMucHJvcHMudmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uO1xuICAgICAgICBpZiAocHJvamVjdGlvbikge1xuICAgICAgICAgICAgcHJvamVjdGlvbi5yb290LmRpZFVwZGF0ZSgpO1xuICAgICAgICAgICAgaWYgKCFwcm9qZWN0aW9uLmN1cnJlbnRBbmltYXRpb24gJiYgcHJvamVjdGlvbi5pc0xlYWQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2FmZVRvUmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE1lYXN1cmVMYXlvdXRXaXRoQ29udGV4dC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMucHJvcHMsIHZpc3VhbEVsZW1lbnQgPSBfYS52aXN1YWxFbGVtZW50LCBsYXlvdXRHcm91cCA9IF9hLmxheW91dEdyb3VwLCBwcm9tb3RlQ29udGV4dCA9IF9hLnN3aXRjaExheW91dEdyb3VwO1xuICAgICAgICB2YXIgcHJvamVjdGlvbiA9IHZpc3VhbEVsZW1lbnQucHJvamVjdGlvbjtcbiAgICAgICAgaWYgKHByb2plY3Rpb24pIHtcbiAgICAgICAgICAgIHByb2plY3Rpb24uc2NoZWR1bGVDaGVja0FmdGVyVW5tb3VudCgpO1xuICAgICAgICAgICAgaWYgKGxheW91dEdyb3VwID09PSBudWxsIHx8IGxheW91dEdyb3VwID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsYXlvdXRHcm91cC5ncm91cClcbiAgICAgICAgICAgICAgICBsYXlvdXRHcm91cC5ncm91cC5yZW1vdmUocHJvamVjdGlvbik7XG4gICAgICAgICAgICBpZiAocHJvbW90ZUNvbnRleHQgPT09IG51bGwgfHwgcHJvbW90ZUNvbnRleHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb21vdGVDb250ZXh0LmRlcmVnaXN0ZXIpXG4gICAgICAgICAgICAgICAgcHJvbW90ZUNvbnRleHQuZGVyZWdpc3Rlcihwcm9qZWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTWVhc3VyZUxheW91dFdpdGhDb250ZXh0LnByb3RvdHlwZS5zYWZlVG9SZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzYWZlVG9SZW1vdmUgPSB0aGlzLnByb3BzLnNhZmVUb1JlbW92ZTtcbiAgICAgICAgc2FmZVRvUmVtb3ZlID09PSBudWxsIHx8IHNhZmVUb1JlbW92ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2FmZVRvUmVtb3ZlKCk7XG4gICAgfTtcbiAgICBNZWFzdXJlTGF5b3V0V2l0aENvbnRleHQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICByZXR1cm4gTWVhc3VyZUxheW91dFdpdGhDb250ZXh0O1xufShSZWFjdF9fZGVmYXVsdC5Db21wb25lbnQpKTtcbmZ1bmN0aW9uIE1lYXN1cmVMYXlvdXQocHJvcHMpIHtcbiAgICB2YXIgX2EgPSBfX3JlYWQodXNlUHJlc2VuY2UoKSwgMiksIGlzUHJlc2VudCA9IF9hWzBdLCBzYWZlVG9SZW1vdmUgPSBfYVsxXTtcbiAgICB2YXIgbGF5b3V0R3JvdXAgPSB1c2VDb250ZXh0KExheW91dEdyb3VwQ29udGV4dCk7XG4gICAgcmV0dXJuIChSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KE1lYXN1cmVMYXlvdXRXaXRoQ29udGV4dCwgX19hc3NpZ24oe30sIHByb3BzLCB7IGxheW91dEdyb3VwOiBsYXlvdXRHcm91cCwgc3dpdGNoTGF5b3V0R3JvdXA6IHVzZUNvbnRleHQoU3dpdGNoTGF5b3V0R3JvdXBDb250ZXh0KSwgaXNQcmVzZW50OiBpc1ByZXNlbnQsIHNhZmVUb1JlbW92ZTogc2FmZVRvUmVtb3ZlIH0pKSk7XG59XG52YXIgZGVmYXVsdFNjYWxlQ29ycmVjdG9ycyA9IHtcbiAgICBib3JkZXJSYWRpdXM6IF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb3JyZWN0Qm9yZGVyUmFkaXVzKSwgeyBhcHBseVRvOiBbXG4gICAgICAgICAgICBcImJvcmRlclRvcExlZnRSYWRpdXNcIixcbiAgICAgICAgICAgIFwiYm9yZGVyVG9wUmlnaHRSYWRpdXNcIixcbiAgICAgICAgICAgIFwiYm9yZGVyQm90dG9tTGVmdFJhZGl1c1wiLFxuICAgICAgICAgICAgXCJib3JkZXJCb3R0b21SaWdodFJhZGl1c1wiLFxuICAgICAgICBdIH0pLFxuICAgIGJvcmRlclRvcExlZnRSYWRpdXM6IGNvcnJlY3RCb3JkZXJSYWRpdXMsXG4gICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6IGNvcnJlY3RCb3JkZXJSYWRpdXMsXG4gICAgYm9yZGVyQm90dG9tTGVmdFJhZGl1czogY29ycmVjdEJvcmRlclJhZGl1cyxcbiAgICBib3JkZXJCb3R0b21SaWdodFJhZGl1czogY29ycmVjdEJvcmRlclJhZGl1cyxcbiAgICBib3hTaGFkb3c6IGNvcnJlY3RCb3hTaGFkb3csXG59O1xuXG5leHBvcnQgeyBNZWFzdXJlTGF5b3V0IH07XG4iLCJpbXBvcnQgeyBNZWFzdXJlTGF5b3V0IH0gZnJvbSAnLi9NZWFzdXJlTGF5b3V0Lm1qcyc7XG5cbnZhciBsYXlvdXRGZWF0dXJlcyA9IHtcbiAgICBtZWFzdXJlTGF5b3V0OiBNZWFzdXJlTGF5b3V0LFxufTtcblxuZXhwb3J0IHsgbGF5b3V0RmVhdHVyZXMgfTtcbiIsImltcG9ydCB7IG1peCwgcHJvZ3Jlc3MsIGxpbmVhciwgY2lyY091dCB9IGZyb20gJ3BvcG1vdGlvbic7XG5pbXBvcnQgeyBweCwgcGVyY2VudCB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcblxudmFyIGJvcmRlcnMgPSBbXCJUb3BMZWZ0XCIsIFwiVG9wUmlnaHRcIiwgXCJCb3R0b21MZWZ0XCIsIFwiQm90dG9tUmlnaHRcIl07XG52YXIgbnVtQm9yZGVycyA9IGJvcmRlcnMubGVuZ3RoO1xudmFyIGFzTnVtYmVyID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlRmxvYXQodmFsdWUpIDogdmFsdWU7XG59O1xudmFyIGlzUHggPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHB4LnRlc3QodmFsdWUpO1xufTtcbmZ1bmN0aW9uIG1peFZhbHVlcyh0YXJnZXQsIGZvbGxvdywgbGVhZCwgcHJvZ3Jlc3MsIHNob3VsZENyb3NzZmFkZU9wYWNpdHksIGlzT25seU1lbWJlcikge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICBpZiAoc2hvdWxkQ3Jvc3NmYWRlT3BhY2l0eSkge1xuICAgICAgICB0YXJnZXQub3BhY2l0eSA9IG1peCgwLCBcbiAgICAgICAgLy8gKGZvbGxvdz8ub3BhY2l0eSBhcyBudW1iZXIpID8/IDAsXG4gICAgICAgIC8vIFRPRE8gUmVpbnN0YXRlIHRoaXMgaWYgb25seSBjaGlsZFxuICAgICAgICAoX2EgPSBsZWFkLm9wYWNpdHkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDEsIGVhc2VDcm9zc2ZhZGVJbihwcm9ncmVzcykpO1xuICAgICAgICB0YXJnZXQub3BhY2l0eUV4aXQgPSBtaXgoKF9iID0gZm9sbG93Lm9wYWNpdHkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDEsIDAsIGVhc2VDcm9zc2ZhZGVPdXQocHJvZ3Jlc3MpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPbmx5TWVtYmVyKSB7XG4gICAgICAgIHRhcmdldC5vcGFjaXR5ID0gbWl4KChfYyA9IGZvbGxvdy5vcGFjaXR5KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAxLCAoX2QgPSBsZWFkLm9wYWNpdHkpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IDEsIHByb2dyZXNzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWl4IGJvcmRlciByYWRpdXNcbiAgICAgKi9cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUJvcmRlcnM7IGkrKykge1xuICAgICAgICB2YXIgYm9yZGVyTGFiZWwgPSBcImJvcmRlclwiLmNvbmNhdChib3JkZXJzW2ldLCBcIlJhZGl1c1wiKTtcbiAgICAgICAgdmFyIGZvbGxvd1JhZGl1cyA9IGdldFJhZGl1cyhmb2xsb3csIGJvcmRlckxhYmVsKTtcbiAgICAgICAgdmFyIGxlYWRSYWRpdXMgPSBnZXRSYWRpdXMobGVhZCwgYm9yZGVyTGFiZWwpO1xuICAgICAgICBpZiAoZm9sbG93UmFkaXVzID09PSB1bmRlZmluZWQgJiYgbGVhZFJhZGl1cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGZvbGxvd1JhZGl1cyB8fCAoZm9sbG93UmFkaXVzID0gMCk7XG4gICAgICAgIGxlYWRSYWRpdXMgfHwgKGxlYWRSYWRpdXMgPSAwKTtcbiAgICAgICAgdmFyIGNhbk1peCA9IGZvbGxvd1JhZGl1cyA9PT0gMCB8fFxuICAgICAgICAgICAgbGVhZFJhZGl1cyA9PT0gMCB8fFxuICAgICAgICAgICAgaXNQeChmb2xsb3dSYWRpdXMpID09PSBpc1B4KGxlYWRSYWRpdXMpO1xuICAgICAgICBpZiAoY2FuTWl4KSB7XG4gICAgICAgICAgICB0YXJnZXRbYm9yZGVyTGFiZWxdID0gTWF0aC5tYXgobWl4KGFzTnVtYmVyKGZvbGxvd1JhZGl1cyksIGFzTnVtYmVyKGxlYWRSYWRpdXMpLCBwcm9ncmVzcyksIDApO1xuICAgICAgICAgICAgaWYgKHBlcmNlbnQudGVzdChsZWFkUmFkaXVzKSB8fCBwZXJjZW50LnRlc3QoZm9sbG93UmFkaXVzKSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFtib3JkZXJMYWJlbF0gKz0gXCIlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRbYm9yZGVyTGFiZWxdID0gbGVhZFJhZGl1cztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBNaXggcm90YXRpb25cbiAgICAgKi9cbiAgICBpZiAoZm9sbG93LnJvdGF0ZSB8fCBsZWFkLnJvdGF0ZSkge1xuICAgICAgICB0YXJnZXQucm90YXRlID0gbWl4KGZvbGxvdy5yb3RhdGUgfHwgMCwgbGVhZC5yb3RhdGUgfHwgMCwgcHJvZ3Jlc3MpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFJhZGl1cyh2YWx1ZXMsIHJhZGl1c05hbWUpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IHZhbHVlc1tyYWRpdXNOYW1lXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdmFsdWVzLmJvcmRlclJhZGl1cztcbn1cbi8vIC8qKlxuLy8gICogV2Ugb25seSB3YW50IHRvIG1peCB0aGUgYmFja2dyb3VuZCBjb2xvciBpZiB0aGVyZSdzIGEgZm9sbG93IGVsZW1lbnRcbi8vICAqIHRoYXQgd2UncmUgbm90IGNyb3NzZmFkaW5nIG9wYWNpdHkgYmV0d2Vlbi4gRm9yIGluc3RhbmNlIHdpdGggc3dpdGNoXG4vLyAgKiBBbmltYXRlU2hhcmVkTGF5b3V0IGFuaW1hdGlvbnMsIHRoaXMgaGVscHMgdGhlIGlsbHVzaW9uIG9mIGEgY29udGludW91c1xuLy8gICogZWxlbWVudCBiZWluZyBhbmltYXRlZCBidXQgYWxzbyBjdXRzIGRvd24gb24gdGhlIG51bWJlciBvZiBwYWludHMgdHJpZ2dlcmVkXG4vLyAgKiBmb3IgZWxlbWVudHMgd2hlcmUgb3BhY2l0eSBpcyBkb2luZyB0aGF0IHdvcmsgZm9yIHVzLlxuLy8gICovXG4vLyBpZiAoXG4vLyAgICAgIWhhc0ZvbGxvd0VsZW1lbnQgJiZcbi8vICAgICBsYXRlc3RMZWFkVmFsdWVzLmJhY2tncm91bmRDb2xvciAmJlxuLy8gICAgIGxhdGVzdEZvbGxvd1ZhbHVlcy5iYWNrZ3JvdW5kQ29sb3Jcbi8vICkge1xuLy8gICAgIC8qKlxuLy8gICAgICAqIFRoaXMgaXNuJ3QgaWRlYWwgcGVyZm9ybWFuY2Utd2lzZSBhcyBtaXhDb2xvciBpcyBjcmVhdGluZyBhIG5ldyBmdW5jdGlvbiBldmVyeSBmcmFtZS5cbi8vICAgICAgKiBXZSBjb3VsZCBwcm9iYWJseSBjcmVhdGUgYSBtaXhlciB0aGF0IHJ1bnMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBhbmltYXRpb24gYnV0XG4vLyAgICAgICogdGhlIGlkZWEgYmVoaW5kIHRoZSBjcm9zc2ZhZGVyIGlzIHRoYXQgaXQgcnVucyBkeW5hbWljYWxseSBiZXR3ZWVuIHR3byBwb3RlbnRpYWxseVxuLy8gICAgICAqIGNoYW5naW5nIHRhcmdldHMgKGllIG9wYWNpdHkgb3IgYm9yZGVyUmFkaXVzIG1heSBiZSBhbmltYXRpbmcgaW5kZXBlbmRlbnRseSB2aWEgdmFyaWFudHMpXG4vLyAgICAgICovXG4vLyAgICAgbGVhZFN0YXRlLmJhY2tncm91bmRDb2xvciA9IGZvbGxvd1N0YXRlLmJhY2tncm91bmRDb2xvciA9IG1peENvbG9yKFxuLy8gICAgICAgICBsYXRlc3RGb2xsb3dWYWx1ZXMuYmFja2dyb3VuZENvbG9yIGFzIHN0cmluZyxcbi8vICAgICAgICAgbGF0ZXN0TGVhZFZhbHVlcy5iYWNrZ3JvdW5kQ29sb3IgYXMgc3RyaW5nXG4vLyAgICAgKShwKVxuLy8gfVxudmFyIGVhc2VDcm9zc2ZhZGVJbiA9IGNvbXByZXNzKDAsIDAuNSwgY2lyY091dCk7XG52YXIgZWFzZUNyb3NzZmFkZU91dCA9IGNvbXByZXNzKDAuNSwgMC45NSwgbGluZWFyKTtcbmZ1bmN0aW9uIGNvbXByZXNzKG1pbiwgbWF4LCBlYXNpbmcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHApIHtcbiAgICAgICAgLy8gQ291bGQgcmVwbGFjZSBpZnMgd2l0aCBjbGFtcFxuICAgICAgICBpZiAocCA8IG1pbilcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICBpZiAocCA+IG1heClcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICByZXR1cm4gZWFzaW5nKHByb2dyZXNzKG1pbiwgbWF4LCBwKSk7XG4gICAgfTtcbn1cblxuZXhwb3J0IHsgbWl4VmFsdWVzIH07XG4iLCIvKipcbiAqIFJlc2V0IGFuIGF4aXMgdG8gdGhlIHByb3ZpZGVkIG9yaWdpbiBib3guXG4gKlxuICogVGhpcyBpcyBhIG11dGF0aXZlIG9wZXJhdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29weUF4aXNJbnRvKGF4aXMsIG9yaWdpbkF4aXMpIHtcbiAgICBheGlzLm1pbiA9IG9yaWdpbkF4aXMubWluO1xuICAgIGF4aXMubWF4ID0gb3JpZ2luQXhpcy5tYXg7XG59XG4vKipcbiAqIFJlc2V0IGEgYm94IHRvIHRoZSBwcm92aWRlZCBvcmlnaW4gYm94LlxuICpcbiAqIFRoaXMgaXMgYSBtdXRhdGl2ZSBvcGVyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNvcHlCb3hJbnRvKGJveCwgb3JpZ2luQm94KSB7XG4gICAgY29weUF4aXNJbnRvKGJveC54LCBvcmlnaW5Cb3gueCk7XG4gICAgY29weUF4aXNJbnRvKGJveC55LCBvcmlnaW5Cb3gueSk7XG59XG5cbmV4cG9ydCB7IGNvcHlBeGlzSW50bywgY29weUJveEludG8gfTtcbiIsImltcG9ydCB7IF9fcmVhZCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IG1peCB9IGZyb20gJ3BvcG1vdGlvbic7XG5pbXBvcnQgeyBwZXJjZW50IH0gZnJvbSAnc3R5bGUtdmFsdWUtdHlwZXMnO1xuaW1wb3J0IHsgc2NhbGVQb2ludCB9IGZyb20gJy4vZGVsdGEtYXBwbHkubWpzJztcblxuLyoqXG4gKiBSZW1vdmUgYSBkZWx0YSBmcm9tIGEgcG9pbnQuIFRoaXMgaXMgZXNzZW50aWFsbHkgdGhlIHN0ZXBzIG9mIGFwcGx5UG9pbnREZWx0YSBpbiByZXZlcnNlXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZVBvaW50RGVsdGEocG9pbnQsIHRyYW5zbGF0ZSwgc2NhbGUsIG9yaWdpblBvaW50LCBib3hTY2FsZSkge1xuICAgIHBvaW50IC09IHRyYW5zbGF0ZTtcbiAgICBwb2ludCA9IHNjYWxlUG9pbnQocG9pbnQsIDEgLyBzY2FsZSwgb3JpZ2luUG9pbnQpO1xuICAgIGlmIChib3hTY2FsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHBvaW50ID0gc2NhbGVQb2ludChwb2ludCwgMSAvIGJveFNjYWxlLCBvcmlnaW5Qb2ludCk7XG4gICAgfVxuICAgIHJldHVybiBwb2ludDtcbn1cbi8qKlxuICogUmVtb3ZlIGEgZGVsdGEgZnJvbSBhbiBheGlzLiBUaGlzIGlzIGVzc2VudGlhbGx5IHRoZSBzdGVwcyBvZiBhcHBseUF4aXNEZWx0YSBpbiByZXZlcnNlXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUF4aXNEZWx0YShheGlzLCB0cmFuc2xhdGUsIHNjYWxlLCBvcmlnaW4sIGJveFNjYWxlLCBvcmlnaW5BeGlzLCBzb3VyY2VBeGlzKSB7XG4gICAgaWYgKHRyYW5zbGF0ZSA9PT0gdm9pZCAwKSB7IHRyYW5zbGF0ZSA9IDA7IH1cbiAgICBpZiAoc2NhbGUgPT09IHZvaWQgMCkgeyBzY2FsZSA9IDE7IH1cbiAgICBpZiAob3JpZ2luID09PSB2b2lkIDApIHsgb3JpZ2luID0gMC41OyB9XG4gICAgaWYgKG9yaWdpbkF4aXMgPT09IHZvaWQgMCkgeyBvcmlnaW5BeGlzID0gYXhpczsgfVxuICAgIGlmIChzb3VyY2VBeGlzID09PSB2b2lkIDApIHsgc291cmNlQXhpcyA9IGF4aXM7IH1cbiAgICBpZiAocGVyY2VudC50ZXN0KHRyYW5zbGF0ZSkpIHtcbiAgICAgICAgdHJhbnNsYXRlID0gcGFyc2VGbG9hdCh0cmFuc2xhdGUpO1xuICAgICAgICB2YXIgcmVsYXRpdmVQcm9ncmVzcyA9IG1peChzb3VyY2VBeGlzLm1pbiwgc291cmNlQXhpcy5tYXgsIHRyYW5zbGF0ZSAvIDEwMCk7XG4gICAgICAgIHRyYW5zbGF0ZSA9IHJlbGF0aXZlUHJvZ3Jlc3MgLSBzb3VyY2VBeGlzLm1pbjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0cmFuc2xhdGUgIT09IFwibnVtYmVyXCIpXG4gICAgICAgIHJldHVybjtcbiAgICB2YXIgb3JpZ2luUG9pbnQgPSBtaXgob3JpZ2luQXhpcy5taW4sIG9yaWdpbkF4aXMubWF4LCBvcmlnaW4pO1xuICAgIGlmIChheGlzID09PSBvcmlnaW5BeGlzKVxuICAgICAgICBvcmlnaW5Qb2ludCAtPSB0cmFuc2xhdGU7XG4gICAgYXhpcy5taW4gPSByZW1vdmVQb2ludERlbHRhKGF4aXMubWluLCB0cmFuc2xhdGUsIHNjYWxlLCBvcmlnaW5Qb2ludCwgYm94U2NhbGUpO1xuICAgIGF4aXMubWF4ID0gcmVtb3ZlUG9pbnREZWx0YShheGlzLm1heCwgdHJhbnNsYXRlLCBzY2FsZSwgb3JpZ2luUG9pbnQsIGJveFNjYWxlKTtcbn1cbi8qKlxuICogUmVtb3ZlIGEgdHJhbnNmb3JtcyBmcm9tIGFuIGF4aXMuIFRoaXMgaXMgZXNzZW50aWFsbHkgdGhlIHN0ZXBzIG9mIGFwcGx5QXhpc1RyYW5zZm9ybXMgaW4gcmV2ZXJzZVxuICogYW5kIGFjdHMgYXMgYSBicmlkZ2UgYmV0d2VlbiBtb3Rpb24gdmFsdWVzIGFuZCByZW1vdmVBeGlzRGVsdGFcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQXhpc1RyYW5zZm9ybXMoYXhpcywgdHJhbnNmb3JtcywgX2EsIG9yaWdpbiwgc291cmNlQXhpcykge1xuICAgIHZhciBfYiA9IF9fcmVhZChfYSwgMyksIGtleSA9IF9iWzBdLCBzY2FsZUtleSA9IF9iWzFdLCBvcmlnaW5LZXkgPSBfYlsyXTtcbiAgICByZW1vdmVBeGlzRGVsdGEoYXhpcywgdHJhbnNmb3Jtc1trZXldLCB0cmFuc2Zvcm1zW3NjYWxlS2V5XSwgdHJhbnNmb3Jtc1tvcmlnaW5LZXldLCB0cmFuc2Zvcm1zLnNjYWxlLCBvcmlnaW4sIHNvdXJjZUF4aXMpO1xufVxuLyoqXG4gKiBUaGUgbmFtZXMgb2YgdGhlIG1vdGlvbiB2YWx1ZXMgd2Ugd2FudCB0byBhcHBseSBhcyB0cmFuc2xhdGlvbiwgc2NhbGUgYW5kIG9yaWdpbi5cbiAqL1xudmFyIHhLZXlzID0gW1wieFwiLCBcInNjYWxlWFwiLCBcIm9yaWdpblhcIl07XG52YXIgeUtleXMgPSBbXCJ5XCIsIFwic2NhbGVZXCIsIFwib3JpZ2luWVwiXTtcbi8qKlxuICogUmVtb3ZlIGEgdHJhbnNmb3JtcyBmcm9tIGFuIGJveC4gVGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgc3RlcHMgb2YgYXBwbHlBeGlzQm94IGluIHJldmVyc2VcbiAqIGFuZCBhY3RzIGFzIGEgYnJpZGdlIGJldHdlZW4gbW90aW9uIHZhbHVlcyBhbmQgcmVtb3ZlQXhpc0RlbHRhXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUJveFRyYW5zZm9ybXMoYm94LCB0cmFuc2Zvcm1zLCBvcmlnaW5Cb3gsIHNvdXJjZUJveCkge1xuICAgIHJlbW92ZUF4aXNUcmFuc2Zvcm1zKGJveC54LCB0cmFuc2Zvcm1zLCB4S2V5cywgb3JpZ2luQm94ID09PSBudWxsIHx8IG9yaWdpbkJveCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3JpZ2luQm94LngsIHNvdXJjZUJveCA9PT0gbnVsbCB8fCBzb3VyY2VCb3ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNvdXJjZUJveC54KTtcbiAgICByZW1vdmVBeGlzVHJhbnNmb3Jtcyhib3gueSwgdHJhbnNmb3JtcywgeUtleXMsIG9yaWdpbkJveCA9PT0gbnVsbCB8fCBvcmlnaW5Cb3ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9yaWdpbkJveC55LCBzb3VyY2VCb3ggPT09IG51bGwgfHwgc291cmNlQm94ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzb3VyY2VCb3gueSk7XG59XG5cbmV4cG9ydCB7IHJlbW92ZUF4aXNEZWx0YSwgcmVtb3ZlQXhpc1RyYW5zZm9ybXMsIHJlbW92ZUJveFRyYW5zZm9ybXMsIHJlbW92ZVBvaW50RGVsdGEgfTtcbiIsImZ1bmN0aW9uIGlzQXhpc0RlbHRhWmVybyhkZWx0YSkge1xuICAgIHJldHVybiBkZWx0YS50cmFuc2xhdGUgPT09IDAgJiYgZGVsdGEuc2NhbGUgPT09IDE7XG59XG5mdW5jdGlvbiBpc0RlbHRhWmVybyhkZWx0YSkge1xuICAgIHJldHVybiBpc0F4aXNEZWx0YVplcm8oZGVsdGEueCkgJiYgaXNBeGlzRGVsdGFaZXJvKGRlbHRhLnkpO1xufVxuZnVuY3Rpb24gYm94RXF1YWxzKGEsIGIpIHtcbiAgICByZXR1cm4gKGEueC5taW4gPT09IGIueC5taW4gJiZcbiAgICAgICAgYS54Lm1heCA9PT0gYi54Lm1heCAmJlxuICAgICAgICBhLnkubWluID09PSBiLnkubWluICYmXG4gICAgICAgIGEueS5tYXggPT09IGIueS5tYXgpO1xufVxuXG5leHBvcnQgeyBib3hFcXVhbHMsIGlzRGVsdGFaZXJvIH07XG4iLCJpbXBvcnQgeyBhZGRVbmlxdWVJdGVtLCByZW1vdmVJdGVtIH0gZnJvbSAnLi4vLi4vdXRpbHMvYXJyYXkubWpzJztcblxudmFyIE5vZGVTdGFjayA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb2RlU3RhY2soKSB7XG4gICAgICAgIHRoaXMubWVtYmVycyA9IFtdO1xuICAgIH1cbiAgICBOb2RlU3RhY2sucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIGFkZFVuaXF1ZUl0ZW0odGhpcy5tZW1iZXJzLCBub2RlKTtcbiAgICAgICAgbm9kZS5zY2hlZHVsZVJlbmRlcigpO1xuICAgIH07XG4gICAgTm9kZVN0YWNrLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICByZW1vdmVJdGVtKHRoaXMubWVtYmVycywgbm9kZSk7XG4gICAgICAgIGlmIChub2RlID09PSB0aGlzLnByZXZMZWFkKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZMZWFkID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlID09PSB0aGlzLmxlYWQpIHtcbiAgICAgICAgICAgIHZhciBwcmV2TGVhZCA9IHRoaXMubWVtYmVyc1t0aGlzLm1lbWJlcnMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAocHJldkxlYWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb21vdGUocHJldkxlYWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBOb2RlU3RhY2sucHJvdG90eXBlLnJlbGVnYXRlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgdmFyIGluZGV4T2ZOb2RlID0gdGhpcy5tZW1iZXJzLmZpbmRJbmRleChmdW5jdGlvbiAobWVtYmVyKSB7IHJldHVybiBub2RlID09PSBtZW1iZXI7IH0pO1xuICAgICAgICBpZiAoaW5kZXhPZk5vZGUgPT09IDApXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaW5kIHRoZSBuZXh0IHByb2plY3Rpb24gbm9kZSB0aGF0IGlzIHByZXNlbnRcbiAgICAgICAgICovXG4gICAgICAgIHZhciBwcmV2TGVhZDtcbiAgICAgICAgZm9yICh2YXIgaSA9IGluZGV4T2ZOb2RlOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgdmFyIG1lbWJlciA9IHRoaXMubWVtYmVyc1tpXTtcbiAgICAgICAgICAgIGlmIChtZW1iZXIuaXNQcmVzZW50ICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHByZXZMZWFkID0gbWVtYmVyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwcmV2TGVhZCkge1xuICAgICAgICAgICAgdGhpcy5wcm9tb3RlKHByZXZMZWFkKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBOb2RlU3RhY2sucHJvdG90eXBlLnByb21vdGUgPSBmdW5jdGlvbiAobm9kZSwgcHJlc2VydmVGb2xsb3dPcGFjaXR5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdmFyIHByZXZMZWFkID0gdGhpcy5sZWFkO1xuICAgICAgICBpZiAobm9kZSA9PT0gcHJldkxlYWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMucHJldkxlYWQgPSBwcmV2TGVhZDtcbiAgICAgICAgdGhpcy5sZWFkID0gbm9kZTtcbiAgICAgICAgbm9kZS5zaG93KCk7XG4gICAgICAgIGlmIChwcmV2TGVhZCkge1xuICAgICAgICAgICAgcHJldkxlYWQuaW5zdGFuY2UgJiYgcHJldkxlYWQuc2NoZWR1bGVSZW5kZXIoKTtcbiAgICAgICAgICAgIG5vZGUuc2NoZWR1bGVSZW5kZXIoKTtcbiAgICAgICAgICAgIG5vZGUucmVzdW1lRnJvbSA9IHByZXZMZWFkO1xuICAgICAgICAgICAgaWYgKHByZXNlcnZlRm9sbG93T3BhY2l0eSkge1xuICAgICAgICAgICAgICAgIG5vZGUucmVzdW1lRnJvbS5wcmVzZXJ2ZU9wYWNpdHkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByZXZMZWFkLnNuYXBzaG90KSB7XG4gICAgICAgICAgICAgICAgbm9kZS5zbmFwc2hvdCA9IHByZXZMZWFkLnNuYXBzaG90O1xuICAgICAgICAgICAgICAgIG5vZGUuc25hcHNob3QubGF0ZXN0VmFsdWVzID1cbiAgICAgICAgICAgICAgICAgICAgcHJldkxlYWQuYW5pbWF0aW9uVmFsdWVzIHx8IHByZXZMZWFkLmxhdGVzdFZhbHVlcztcbiAgICAgICAgICAgICAgICBub2RlLnNuYXBzaG90LmlzU2hhcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoX2EgPSBub2RlLnJvb3QpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pc1VwZGF0aW5nKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5pc0xheW91dERpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjcm9zc2ZhZGUgPSBub2RlLm9wdGlvbnMuY3Jvc3NmYWRlO1xuICAgICAgICAgICAgaWYgKGNyb3NzZmFkZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBwcmV2TGVhZC5oaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRPRE86XG4gICAgICAgICAgICAgKiAgIC0gVGVzdCBib3JkZXIgcmFkaXVzIHdoZW4gcHJldmlvdXMgbm9kZSB3YXMgZGVsZXRlZFxuICAgICAgICAgICAgICogICAtIGJveFNoYWRvdyBtaXhpbmdcbiAgICAgICAgICAgICAqICAgLSBTaGFyZWQgYmV0d2VlbiBlbGVtZW50IEEgaW4gc2Nyb2xsZWQgY29udGFpbmVyIGFuZCBlbGVtZW50IEIgKHNjcm9sbCBzdGF5cyB0aGUgc2FtZSBvciBjaGFuZ2VzKVxuICAgICAgICAgICAgICogICAtIFNoYXJlZCBiZXR3ZWVuIGVsZW1lbnQgQSBpbiB0cmFuc2Zvcm1lZCBjb250YWluZXIgYW5kIGVsZW1lbnQgQiAodHJhbnNmb3JtIHN0YXlzIHRoZSBzYW1lIG9yIGNoYW5nZXMpXG4gICAgICAgICAgICAgKiAgIC0gU2hhcmVkIGJldHdlZW4gZWxlbWVudCBBIGluIHNjcm9sbGVkIHBhZ2UgYW5kIGVsZW1lbnQgQiAoc2Nyb2xsIHN0YXlzIHRoZSBzYW1lIG9yIGNoYW5nZXMpXG4gICAgICAgICAgICAgKiAtLS1cbiAgICAgICAgICAgICAqICAgLSBDcm9zc2ZhZGUgb3BhY2l0eSBvZiByb290IG5vZGVzXG4gICAgICAgICAgICAgKiAgIC0gbGF5b3V0SWQgY2hhbmdlcyBhZnRlciBhbmltYXRpb25cbiAgICAgICAgICAgICAqICAgLSBsYXlvdXRJZCBjaGFuZ2VzIG1pZCBhbmltYXRpb25cbiAgICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgfTtcbiAgICBOb2RlU3RhY2sucHJvdG90eXBlLmV4aXRBbmltYXRpb25Db21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5tZW1iZXJzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICAgICAgICAoX2IgPSAoX2EgPSBub2RlLm9wdGlvbnMpLm9uRXhpdENvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gICAgICAgICAgICAoX2UgPSAoX2MgPSBub2RlLnJlc3VtaW5nRnJvbSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZCA9IF9jLm9wdGlvbnMpLm9uRXhpdENvbXBsZXRlKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UuY2FsbChfZCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgTm9kZVN0YWNrLnByb3RvdHlwZS5zY2hlZHVsZVJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5tZW1iZXJzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgIG5vZGUuaW5zdGFuY2UgJiYgbm9kZS5zY2hlZHVsZVJlbmRlcihmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQ2xlYXIgYW55IGxlYWRzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgdGhpcyByZW5kZXIgdG8gcHJldmVudCB0aGVtIGZyb20gYmVpbmdcbiAgICAgKiB1c2VkIGluIGZ1dHVyZSBhbmltYXRpb25zIGFuZCB0byBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuICAgICAqL1xuICAgIE5vZGVTdGFjay5wcm90b3R5cGUucmVtb3ZlTGVhZFNuYXBzaG90ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5sZWFkICYmIHRoaXMubGVhZC5zbmFwc2hvdCkge1xuICAgICAgICAgICAgdGhpcy5sZWFkLnNuYXBzaG90ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gTm9kZVN0YWNrO1xufSgpKTtcblxuZXhwb3J0IHsgTm9kZVN0YWNrIH07XG4iLCJ2YXIgaWRlbnRpdHlQcm9qZWN0aW9uID0gXCJ0cmFuc2xhdGUzZCgwcHgsIDBweCwgMCkgc2NhbGUoMSwgMSkgc2NhbGUoMSwgMSlcIjtcbmZ1bmN0aW9uIGJ1aWxkUHJvamVjdGlvblRyYW5zZm9ybShkZWx0YSwgdHJlZVNjYWxlLCBsYXRlc3RUcmFuc2Zvcm0pIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdHJhbnNsYXRpb25zIHdlIHVzZSB0byBjYWxjdWxhdGUgYXJlIGFsd2F5cyByZWxhdGl2ZSB0byB0aGUgdmlld3BvcnQgY29vcmRpbmF0ZSBzcGFjZS5cbiAgICAgKiBCdXQgd2hlbiB3ZSBhcHBseSBzY2FsZXMsIHdlIGFsc28gc2NhbGUgdGhlIGNvb3JkaW5hdGUgc3BhY2Ugb2YgYW4gZWxlbWVudCBhbmQgaXRzIGNoaWxkcmVuLlxuICAgICAqIEZvciBpbnN0YW5jZSBpZiB3ZSBoYXZlIGEgdHJlZVNjYWxlICh0aGUgY3VsbWluYXRpb24gb2YgYWxsIHBhcmVudCBzY2FsZXMpIG9mIDAuNSBhbmQgd2UgbmVlZFxuICAgICAqIHRvIG1vdmUgYW4gZWxlbWVudCAxMDAgcGl4ZWxzLCB3ZSBhY3R1YWxseSBuZWVkIHRvIG1vdmUgaXQgMjAwIGluIHdpdGhpbiB0aGF0IHNjYWxlZCBzcGFjZS5cbiAgICAgKi9cbiAgICB2YXIgeFRyYW5zbGF0ZSA9IGRlbHRhLngudHJhbnNsYXRlIC8gdHJlZVNjYWxlLng7XG4gICAgdmFyIHlUcmFuc2xhdGUgPSBkZWx0YS55LnRyYW5zbGF0ZSAvIHRyZWVTY2FsZS55O1xuICAgIHZhciB0cmFuc2Zvcm0gPSBcInRyYW5zbGF0ZTNkKFwiLmNvbmNhdCh4VHJhbnNsYXRlLCBcInB4LCBcIikuY29uY2F0KHlUcmFuc2xhdGUsIFwicHgsIDApIFwiKTtcbiAgICAvKipcbiAgICAgKiBBcHBseSBzY2FsZSBjb3JyZWN0aW9uIGZvciB0aGUgdHJlZSB0cmFuc2Zvcm0uXG4gICAgICogVGhpcyB3aWxsIGFwcGx5IHNjYWxlIHRvIHRoZSBzY3JlZW4tb3JpZW50YXRlZCBheGVzLlxuICAgICAqL1xuICAgIHRyYW5zZm9ybSArPSBcInNjYWxlKFwiLmNvbmNhdCgxIC8gdHJlZVNjYWxlLngsIFwiLCBcIikuY29uY2F0KDEgLyB0cmVlU2NhbGUueSwgXCIpIFwiKTtcbiAgICBpZiAobGF0ZXN0VHJhbnNmb3JtKSB7XG4gICAgICAgIHZhciByb3RhdGUgPSBsYXRlc3RUcmFuc2Zvcm0ucm90YXRlLCByb3RhdGVYID0gbGF0ZXN0VHJhbnNmb3JtLnJvdGF0ZVgsIHJvdGF0ZVkgPSBsYXRlc3RUcmFuc2Zvcm0ucm90YXRlWTtcbiAgICAgICAgaWYgKHJvdGF0ZSlcbiAgICAgICAgICAgIHRyYW5zZm9ybSArPSBcInJvdGF0ZShcIi5jb25jYXQocm90YXRlLCBcImRlZykgXCIpO1xuICAgICAgICBpZiAocm90YXRlWClcbiAgICAgICAgICAgIHRyYW5zZm9ybSArPSBcInJvdGF0ZVgoXCIuY29uY2F0KHJvdGF0ZVgsIFwiZGVnKSBcIik7XG4gICAgICAgIGlmIChyb3RhdGVZKVxuICAgICAgICAgICAgdHJhbnNmb3JtICs9IFwicm90YXRlWShcIi5jb25jYXQocm90YXRlWSwgXCJkZWcpIFwiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXBwbHkgc2NhbGUgdG8gbWF0Y2ggdGhlIHNpemUgb2YgdGhlIGVsZW1lbnQgdG8gdGhlIHNpemUgd2Ugd2FudCBpdC5cbiAgICAgKiBUaGlzIHdpbGwgYXBwbHkgc2NhbGUgdG8gdGhlIGVsZW1lbnQtb3JpZW50YXRlZCBheGVzLlxuICAgICAqL1xuICAgIHZhciBlbGVtZW50U2NhbGVYID0gZGVsdGEueC5zY2FsZSAqIHRyZWVTY2FsZS54O1xuICAgIHZhciBlbGVtZW50U2NhbGVZID0gZGVsdGEueS5zY2FsZSAqIHRyZWVTY2FsZS55O1xuICAgIHRyYW5zZm9ybSArPSBcInNjYWxlKFwiLmNvbmNhdChlbGVtZW50U2NhbGVYLCBcIiwgXCIpLmNvbmNhdChlbGVtZW50U2NhbGVZLCBcIilcIik7XG4gICAgcmV0dXJuIHRyYW5zZm9ybSA9PT0gaWRlbnRpdHlQcm9qZWN0aW9uID8gXCJub25lXCIgOiB0cmFuc2Zvcm07XG59XG5cbmV4cG9ydCB7IGJ1aWxkUHJvamVjdGlvblRyYW5zZm9ybSwgaWRlbnRpdHlQcm9qZWN0aW9uIH07XG4iLCJ2YXIgY29tcGFyZUJ5RGVwdGggPSBmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBhLmRlcHRoIC0gYi5kZXB0aDtcbn07XG5cbmV4cG9ydCB7IGNvbXBhcmVCeURlcHRoIH07XG4iLCJpbXBvcnQgeyBhZGRVbmlxdWVJdGVtLCByZW1vdmVJdGVtIH0gZnJvbSAnLi4vLi4vdXRpbHMvYXJyYXkubWpzJztcbmltcG9ydCB7IGNvbXBhcmVCeURlcHRoIH0gZnJvbSAnLi9jb21wYXJlLWJ5LWRlcHRoLm1qcyc7XG5cbnZhciBGbGF0VHJlZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBGbGF0VHJlZSgpIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZTtcbiAgICB9XG4gICAgRmxhdFRyZWUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICBhZGRVbmlxdWVJdGVtKHRoaXMuY2hpbGRyZW4sIGNoaWxkKTtcbiAgICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICB9O1xuICAgIEZsYXRUcmVlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgcmVtb3ZlSXRlbSh0aGlzLmNoaWxkcmVuLCBjaGlsZCk7XG4gICAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gICAgfTtcbiAgICBGbGF0VHJlZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICB0aGlzLmlzRGlydHkgJiYgdGhpcy5jaGlsZHJlbi5zb3J0KGNvbXBhcmVCeURlcHRoKTtcbiAgICAgICAgdGhpcy5pc0RpcnR5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChjYWxsYmFjayk7XG4gICAgfTtcbiAgICByZXR1cm4gRmxhdFRyZWU7XG59KCkpO1xuXG5leHBvcnQgeyBGbGF0VHJlZSB9O1xuIiwiaW1wb3J0IHsgX19zcHJlYWRBcnJheSwgX19yZWFkLCBfX2Fzc2lnbiB9IGZyb20gJ3RzbGliJztcbmltcG9ydCBzeW5jLCB7IGNhbmNlbFN5bmMsIGZsdXNoU3luYyB9IGZyb20gJ2ZyYW1lc3luYyc7XG5pbXBvcnQgeyBtaXggfSBmcm9tICdwb3Btb3Rpb24nO1xuaW1wb3J0IHsgYW5pbWF0ZSB9IGZyb20gJy4uLy4uL2FuaW1hdGlvbi9hbmltYXRlLm1qcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25NYW5hZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3Vic2NyaXB0aW9uLW1hbmFnZXIubWpzJztcbmltcG9ydCB7IG1peFZhbHVlcyB9IGZyb20gJy4uL2FuaW1hdGlvbi9taXgtdmFsdWVzLm1qcyc7XG5pbXBvcnQgeyBjb3B5Qm94SW50byB9IGZyb20gJy4uL2dlb21ldHJ5L2NvcHkubWpzJztcbmltcG9ydCB7IHRyYW5zbGF0ZUF4aXMsIHRyYW5zZm9ybUJveCwgYXBwbHlCb3hEZWx0YSwgYXBwbHlUcmVlRGVsdGFzIH0gZnJvbSAnLi4vZ2VvbWV0cnkvZGVsdGEtYXBwbHkubWpzJztcbmltcG9ydCB7IGNhbGNSZWxhdGl2ZVBvc2l0aW9uLCBjYWxjUmVsYXRpdmVCb3gsIGNhbGNCb3hEZWx0YSwgY2FsY0xlbmd0aCB9IGZyb20gJy4uL2dlb21ldHJ5L2RlbHRhLWNhbGMubWpzJztcbmltcG9ydCB7IHJlbW92ZUJveFRyYW5zZm9ybXMgfSBmcm9tICcuLi9nZW9tZXRyeS9kZWx0YS1yZW1vdmUubWpzJztcbmltcG9ydCB7IGNyZWF0ZUJveCwgY3JlYXRlRGVsdGEgfSBmcm9tICcuLi9nZW9tZXRyeS9tb2RlbHMubWpzJztcbmltcG9ydCB7IGdldFZhbHVlVHJhbnNpdGlvbiB9IGZyb20gJy4uLy4uL2FuaW1hdGlvbi91dGlscy90cmFuc2l0aW9ucy5tanMnO1xuaW1wb3J0IHsgYm94RXF1YWxzLCBpc0RlbHRhWmVybyB9IGZyb20gJy4uL2dlb21ldHJ5L3V0aWxzLm1qcyc7XG5pbXBvcnQgeyBOb2RlU3RhY2sgfSBmcm9tICcuLi9zaGFyZWQvc3RhY2subWpzJztcbmltcG9ydCB7IHNjYWxlQ29ycmVjdG9ycyB9IGZyb20gJy4uL3N0eWxlcy9zY2FsZS1jb3JyZWN0aW9uLm1qcyc7XG5pbXBvcnQgeyBidWlsZFByb2plY3Rpb25UcmFuc2Zvcm0gfSBmcm9tICcuLi9zdHlsZXMvdHJhbnNmb3JtLm1qcyc7XG5pbXBvcnQgeyBlYWNoQXhpcyB9IGZyb20gJy4uL3V0aWxzL2VhY2gtYXhpcy5tanMnO1xuaW1wb3J0IHsgaGFzVHJhbnNmb3JtLCBoYXNTY2FsZSB9IGZyb20gJy4uL3V0aWxzL2hhcy10cmFuc2Zvcm0ubWpzJztcbmltcG9ydCB7IHRyYW5zZm9ybUF4ZXMgfSBmcm9tICcuLi8uLi9yZW5kZXIvaHRtbC91dGlscy90cmFuc2Zvcm0ubWpzJztcbmltcG9ydCB7IEZsYXRUcmVlIH0gZnJvbSAnLi4vLi4vcmVuZGVyL3V0aWxzL2ZsYXQtdHJlZS5tanMnO1xuaW1wb3J0IHsgcmVzb2x2ZU1vdGlvblZhbHVlIH0gZnJvbSAnLi4vLi4vdmFsdWUvdXRpbHMvcmVzb2x2ZS1tb3Rpb24tdmFsdWUubWpzJztcbmltcG9ydCB7IGdsb2JhbFByb2plY3Rpb25TdGF0ZSB9IGZyb20gJy4vc3RhdGUubWpzJztcblxuLyoqXG4gKiBXZSB1c2UgMTAwMCBhcyB0aGUgYW5pbWF0aW9uIHRhcmdldCBhcyAwLTEwMDAgbWFwcyBiZXR0ZXIgdG8gcGl4ZWxzIHRoYW4gMC0xXG4gKiB3aGljaCBoYXMgYSBub3RpY2VhYmxlIGRpZmZlcmVuY2UgaW4gc3ByaW5nIGFuaW1hdGlvbnNcbiAqL1xudmFyIGFuaW1hdGlvblRhcmdldCA9IDEwMDA7XG5mdW5jdGlvbiBjcmVhdGVQcm9qZWN0aW9uTm9kZShfYSkge1xuICAgIHZhciBhdHRhY2hSZXNpemVMaXN0ZW5lciA9IF9hLmF0dGFjaFJlc2l6ZUxpc3RlbmVyLCBkZWZhdWx0UGFyZW50ID0gX2EuZGVmYXVsdFBhcmVudCwgbWVhc3VyZVNjcm9sbCA9IF9hLm1lYXN1cmVTY3JvbGwsIGNoZWNrSXNTY3JvbGxSb290ID0gX2EuY2hlY2tJc1Njcm9sbFJvb3QsIHJlc2V0VHJhbnNmb3JtID0gX2EucmVzZXRUcmFuc2Zvcm07XG4gICAgcmV0dXJuIC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZnVuY3Rpb24gUHJvamVjdGlvbk5vZGUoaWQsIGxhdGVzdFZhbHVlcywgcGFyZW50KSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgaWYgKGxhdGVzdFZhbHVlcyA9PT0gdm9pZCAwKSB7IGxhdGVzdFZhbHVlcyA9IHt9OyB9XG4gICAgICAgICAgICBpZiAocGFyZW50ID09PSB2b2lkIDApIHsgcGFyZW50ID0gZGVmYXVsdFBhcmVudCA9PT0gbnVsbCB8fCBkZWZhdWx0UGFyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWZhdWx0UGFyZW50KCk7IH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQSBTZXQgY29udGFpbmluZyBhbGwgdGhpcyBjb21wb25lbnQncyBjaGlsZHJlbi4gVGhpcyBpcyB1c2VkIHRvIGl0ZXJhdGVcbiAgICAgICAgICAgICAqIHRocm91Z2ggdGhlIGNoaWxkcmVuLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFRPRE86IFRoaXMgY291bGQgYmUgZmFzdGVyIHRvIGl0ZXJhdGUgYXMgYSBmbGF0IGFycmF5IHN0b3JlZCBvbiB0aGUgcm9vdCBub2RlLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBPcHRpb25zIGZvciB0aGUgbm9kZS4gV2UgdXNlIHRoaXMgdG8gY29uZmlndXJlIHdoYXQga2luZCBvZiBsYXlvdXQgYW5pbWF0aW9uc1xuICAgICAgICAgICAgICogd2Ugc2hvdWxkIHBlcmZvcm0gKGlmIGFueSkuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXZSB1c2UgdGhpcyB0byBkZXRlY3Qgd2hlbiBpdHMgc2FmZSB0byBzaHV0IGRvd24gcGFydCBvZiBhIHByb2plY3Rpb24gdHJlZS5cbiAgICAgICAgICAgICAqIFdlIGhhdmUgdG8ga2VlcCBwcm9qZWN0aW5nIGNoaWxkcmVuIGZvciBzY2FsZSBjb3JyZWN0aW9uIGFuZCByZWxhdGl2ZSBwcm9qZWN0aW9uXG4gICAgICAgICAgICAgKiB1bnRpbCBhbGwgdGhlaXIgcGFyZW50cyBzdG9wIHBlcmZvcm1pbmcgbGF5b3V0IGFuaW1hdGlvbnMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuaXNUcmVlQW5pbWF0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmlzQW5pbWF0aW9uQmxvY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBGbGFnIHRvIHRydWUgaWYgd2UgdGhpbmsgdGhpcyBsYXlvdXQgaGFzIGJlZW4gY2hhbmdlZC4gV2UgY2FuJ3QgYWx3YXlzIGtub3cgdGhpcyxcbiAgICAgICAgICAgICAqIGN1cnJlbnRseSB3ZSBzZXQgaXQgdG8gdHJ1ZSBldmVyeSB0aW1lIGEgY29tcG9uZW50IHJlbmRlcnMsIG9yIGlmIGl0IGhhcyBhIGxheW91dERlcGVuZGVuY3lcbiAgICAgICAgICAgICAqIGlmIHRoYXQgaGFzIGNoYW5nZWQgYmV0d2VlbiByZW5kZXJzLiBBZGRpdGlvbmFsbHksIGNvbXBvbmVudHMgY2FuIGJlIGdyb3VwZWQgYnkgTGF5b3V0R3JvdXBcbiAgICAgICAgICAgICAqIGFuZCBpZiBvbmUgbm9kZSBpcyBkaXJ0aWVkLCB0aGV5IGFsbCBhcmUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuaXNMYXlvdXREaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBCbG9jayBsYXlvdXQgdXBkYXRlcyBmb3IgaW5zdGFudCBsYXlvdXQgdHJhbnNpdGlvbnMgdGhyb3VnaG91dCB0aGUgdHJlZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy51cGRhdGVNYW51YWxseUJsb2NrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQmxvY2tlZEJ5UmVzaXplID0gZmFsc2U7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFNldCB0byB0cnVlIGJldHdlZW4gdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBgd2lsbFVwZGF0ZWAgY2FsbCBhbmQgdGhlIGVuZCBvZiB0aGUgYGRpZFVwZGF0ZWBcbiAgICAgICAgICAgICAqIGNhbGwuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB0aGlzIGlzIGFuIFNWRyBlbGVtZW50IHdlIGN1cnJlbnRseSBkaXNhYmxlIHByb2plY3Rpb24gdHJhbnNmb3Jtc1xuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLmlzU1ZHID0gZmFsc2U7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEZsYWcgdG8gdHJ1ZSAoZHVyaW5nIHByb21vdGlvbikgaWYgYSBub2RlIGRvaW5nIGFuIGluc3RhbnQgbGF5b3V0IHRyYW5zaXRpb24gbmVlZHMgdG8gcmVzZXRcbiAgICAgICAgICAgICAqIGl0cyBwcm9qZWN0aW9uIHN0eWxlcy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5uZWVkc1Jlc2V0ID0gZmFsc2U7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEZsYWdzIHdoZXRoZXIgdGhpcyBub2RlIHNob3VsZCBoYXZlIGl0cyB0cmFuc2Zvcm0gcmVzZXQgcHJpb3IgdG8gbWVhc3VyaW5nLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLnNob3VsZFJlc2V0VHJhbnNmb3JtID0gZmFsc2U7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGNhbGN1bGF0ZWQgY29udGV4dHVhbC9hY2N1bXVsYXRlZC90cmVlIHNjYWxlLlxuICAgICAgICAgICAgICogVGhpcyB3aWxsIGJlIHVzZWQgdG8gc2NhbGUgY2FsY3VsY2F0ZWQgcHJvamVjdGlvbiB0cmFuc2Zvcm1zLCBhcyB0aGVzZSBhcmVcbiAgICAgICAgICAgICAqIGNhbGN1bGF0ZWQgaW4gc2NyZWVuLXNwYWNlIGJ1dCBuZWVkIHRvIGJlIHNjYWxlZCBmb3IgZWxlbWVudHMgdG8gYWN0dWFsbHlcbiAgICAgICAgICAgICAqIG1ha2UgaXQgdG8gdGhlaXIgY2FsY3VsYXRlZCBkZXN0aW5hdGlvbnMuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogVE9ETzogTGF6eS1pbml0XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMudHJlZVNjYWxlID0geyB4OiAxLCB5OiAxIH07XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuZXZlbnRIYW5kbGVycyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIC8vIE5vdGU6IEN1cnJlbnRseSBvbmx5IHJ1bm5pbmcgb24gcm9vdCBub2RlXG4gICAgICAgICAgICB0aGlzLnBvdGVudGlhbE5vZGVzID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgdGhpcy5jaGVja1VwZGF0ZUZhaWxlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMuaXNVcGRhdGluZykge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5pc1VwZGF0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmNsZWFyQWxsU25hcHNob3RzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUHJvamVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5ub2Rlcy5mb3JFYWNoKHJlc29sdmVUYXJnZXREZWx0YSk7XG4gICAgICAgICAgICAgICAgX3RoaXMubm9kZXMuZm9yRWFjaChjYWxjUHJvamVjdGlvbik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5oYXNQcm9qZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uUHJvZ3Jlc3MgPSAwO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBTaGFyZWQgbGF5b3V0XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIC8vIFRPRE8gT25seSBydW5uaW5nIG9uIHJvb3Qgbm9kZVxuICAgICAgICAgICAgdGhpcy5zaGFyZWROb2RlcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgICAgIHRoaXMubGF0ZXN0VmFsdWVzID0gbGF0ZXN0VmFsdWVzO1xuICAgICAgICAgICAgdGhpcy5yb290ID0gcGFyZW50ID8gcGFyZW50LnJvb3QgfHwgcGFyZW50IDogdGhpcztcbiAgICAgICAgICAgIHRoaXMucGF0aCA9IHBhcmVudCA/IF9fc3ByZWFkQXJyYXkoX19zcHJlYWRBcnJheShbXSwgX19yZWFkKHBhcmVudC5wYXRoKSwgZmFsc2UpLCBbcGFyZW50XSwgZmFsc2UpIDogW107XG4gICAgICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgICAgIHRoaXMuZGVwdGggPSBwYXJlbnQgPyBwYXJlbnQuZGVwdGggKyAxIDogMDtcbiAgICAgICAgICAgIGlkICYmIHRoaXMucm9vdC5yZWdpc3RlclBvdGVudGlhbE5vZGUoaWQsIHRoaXMpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhdGhbaV0uc2hvdWxkUmVzZXRUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMucm9vdCA9PT0gdGhpcylcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVzID0gbmV3IEZsYXRUcmVlKCk7XG4gICAgICAgIH1cbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAobmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmV2ZW50SGFuZGxlcnMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXJzLnNldChuYW1lLCBuZXcgU3Vic2NyaXB0aW9uTWFuYWdlcigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50SGFuZGxlcnMuZ2V0KG5hbWUpLmFkZChoYW5kbGVyKTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLm5vdGlmeUxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICBhcmdzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHN1YnNjcmlwdGlvbk1hbmFnZXIgPSB0aGlzLmV2ZW50SGFuZGxlcnMuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uTWFuYWdlciA9PT0gbnVsbCB8fCBzdWJzY3JpcHRpb25NYW5hZ2VyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdWJzY3JpcHRpb25NYW5hZ2VyLm5vdGlmeS5hcHBseShzdWJzY3JpcHRpb25NYW5hZ2VyLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoYXJncyksIGZhbHNlKSk7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5oYXNMaXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRIYW5kbGVycy5oYXMobmFtZSk7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5yZWdpc3RlclBvdGVudGlhbE5vZGUgPSBmdW5jdGlvbiAoaWQsIG5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMucG90ZW50aWFsTm9kZXMuc2V0KGlkLCBub2RlKTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIExpZmVjeWNsZXNcbiAgICAgICAgICovXG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5tb3VudCA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgaXNMYXlvdXREaXJ0eSkge1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmIChpc0xheW91dERpcnR5ID09PSB2b2lkIDApIHsgaXNMYXlvdXREaXJ0eSA9IGZhbHNlOyB9XG4gICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLmlzU1ZHID1cbiAgICAgICAgICAgICAgICBpbnN0YW5jZSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQgJiYgaW5zdGFuY2UudGFnTmFtZSAhPT0gXCJzdmdcIjtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgICAgIHZhciBfYiA9IHRoaXMub3B0aW9ucywgbGF5b3V0SWQgPSBfYi5sYXlvdXRJZCwgbGF5b3V0ID0gX2IubGF5b3V0LCB2aXN1YWxFbGVtZW50ID0gX2IudmlzdWFsRWxlbWVudDtcbiAgICAgICAgICAgIGlmICh2aXN1YWxFbGVtZW50ICYmICF2aXN1YWxFbGVtZW50LmdldEluc3RhbmNlKCkpIHtcbiAgICAgICAgICAgICAgICB2aXN1YWxFbGVtZW50Lm1vdW50KGluc3RhbmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucm9vdC5ub2Rlcy5hZGQodGhpcyk7XG4gICAgICAgICAgICAoX2EgPSB0aGlzLnBhcmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNoaWxkcmVuLmFkZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuaWQgJiYgdGhpcy5yb290LnBvdGVudGlhbE5vZGVzLmRlbGV0ZSh0aGlzLmlkKTtcbiAgICAgICAgICAgIGlmIChpc0xheW91dERpcnR5ICYmIChsYXlvdXQgfHwgbGF5b3V0SWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0xheW91dERpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhdHRhY2hSZXNpemVMaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgIHZhciB1bmJsb2NrVGltZW91dF8xO1xuICAgICAgICAgICAgICAgIHZhciByZXNpemVVbmJsb2NrVXBkYXRlXzEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoX3RoaXMucm9vdC51cGRhdGVCbG9ja2VkQnlSZXNpemUgPSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhdHRhY2hSZXNpemVMaXN0ZW5lcihpbnN0YW5jZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5yb290LnVwZGF0ZUJsb2NrZWRCeVJlc2l6ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh1bmJsb2NrVGltZW91dF8xKTtcbiAgICAgICAgICAgICAgICAgICAgdW5ibG9ja1RpbWVvdXRfMSA9IHdpbmRvdy5zZXRUaW1lb3V0KHJlc2l6ZVVuYmxvY2tVcGRhdGVfMSwgMjUwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdsb2JhbFByb2plY3Rpb25TdGF0ZS5oYXNBbmltYXRlZFNpbmNlUmVzaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxQcm9qZWN0aW9uU3RhdGUuaGFzQW5pbWF0ZWRTaW5jZVJlc2l6ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMubm9kZXMuZm9yRWFjaChmaW5pc2hBbmltYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGF5b3V0SWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvb3QucmVnaXN0ZXJTaGFyZWROb2RlKGxheW91dElkLCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE9ubHkgcmVnaXN0ZXIgdGhlIGhhbmRsZXIgaWYgaXQgcmVxdWlyZXMgbGF5b3V0IGFuaW1hdGlvblxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hbmltYXRlICE9PSBmYWxzZSAmJlxuICAgICAgICAgICAgICAgIHZpc3VhbEVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgICAobGF5b3V0SWQgfHwgbGF5b3V0KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcImRpZFVwZGF0ZVwiLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9iLCBfYywgX2QsIF9lLCBfZjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRlbHRhID0gX2EuZGVsdGEsIGhhc0xheW91dENoYW5nZWQgPSBfYS5oYXNMYXlvdXRDaGFuZ2VkLCBoYXNSZWxhdGl2ZVRhcmdldENoYW5nZWQgPSBfYS5oYXNSZWxhdGl2ZVRhcmdldENoYW5nZWQsIG5ld0xheW91dCA9IF9hLmxheW91dDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLmlzVHJlZUFuaW1hdGlvbkJsb2NrZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMucmVsYXRpdmVUYXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogQ2hlY2sgaGVyZSBpZiBhbiBhbmltYXRpb24gZXhpc3RzXG4gICAgICAgICAgICAgICAgICAgIHZhciBsYXlvdXRUcmFuc2l0aW9uID0gKF9jID0gKF9iID0gX3RoaXMub3B0aW9ucy50cmFuc2l0aW9uKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB2aXN1YWxFbGVtZW50LmdldERlZmF1bHRUcmFuc2l0aW9uKCkpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IGRlZmF1bHRMYXlvdXRUcmFuc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2cgPSB2aXN1YWxFbGVtZW50LmdldFByb3BzKCksIG9uTGF5b3V0QW5pbWF0aW9uU3RhcnQgPSBfZy5vbkxheW91dEFuaW1hdGlvblN0YXJ0LCBvbkxheW91dEFuaW1hdGlvbkNvbXBsZXRlID0gX2cub25MYXlvdXRBbmltYXRpb25Db21wbGV0ZTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFRoZSB0YXJnZXQgbGF5b3V0IG9mIHRoZSBlbGVtZW50IG1pZ2h0IHN0YXkgdGhlIHNhbWUsXG4gICAgICAgICAgICAgICAgICAgICAqIGJ1dCBpdHMgcG9zaXRpb24gcmVsYXRpdmUgdG8gaXRzIHBhcmVudCBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXRDaGFuZ2VkID0gIV90aGlzLnRhcmdldExheW91dCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIWJveEVxdWFscyhfdGhpcy50YXJnZXRMYXlvdXQsIG5ld0xheW91dCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc1JlbGF0aXZlVGFyZ2V0Q2hhbmdlZDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIElmIHRoZSBsYXlvdXQgaGFzbid0IHNlZW1lZCB0byBoYXZlIGNoYW5nZWQsIGl0IG1pZ2h0IGJlIHRoYXQgdGhlXG4gICAgICAgICAgICAgICAgICAgICAqIGVsZW1lbnQgaXMgdmlzdWFsbHkgaW4gdGhlIHNhbWUgcGxhY2UgaW4gdGhlIGRvY3VtZW50IGJ1dCBpdHMgcG9zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgICogcmVsYXRpdmUgdG8gaXRzIHBhcmVudCBoYXMgaW5kZWVkIGNoYW5nZWQuIFNvIGhlcmUgd2UgY2hlY2sgZm9yIHRoYXQuXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICB2YXIgaGFzT25seVJlbGF0aXZlVGFyZ2V0Q2hhbmdlZCA9ICFoYXNMYXlvdXRDaGFuZ2VkICYmIGhhc1JlbGF0aXZlVGFyZ2V0Q2hhbmdlZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgoX2QgPSBfdGhpcy5yZXN1bWVGcm9tKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaW5zdGFuY2UpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNPbmx5UmVsYXRpdmVUYXJnZXRDaGFuZ2VkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAoaGFzTGF5b3V0Q2hhbmdlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0YXJnZXRDaGFuZ2VkIHx8ICFfdGhpcy5jdXJyZW50QW5pbWF0aW9uKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5yZXN1bWVGcm9tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMucmVzdW1pbmdGcm9tID0gX3RoaXMucmVzdW1lRnJvbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5yZXN1bWluZ0Zyb20ucmVzdW1pbmdGcm9tID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuc2V0QW5pbWF0aW9uT3JpZ2luKGRlbHRhLCBoYXNPbmx5UmVsYXRpdmVUYXJnZXRDaGFuZ2VkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbmltYXRpb25PcHRpb25zID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGdldFZhbHVlVHJhbnNpdGlvbihsYXlvdXRUcmFuc2l0aW9uLCBcImxheW91dFwiKSksIHsgb25QbGF5OiBvbkxheW91dEFuaW1hdGlvblN0YXJ0LCBvbkNvbXBsZXRlOiBvbkxheW91dEFuaW1hdGlvbkNvbXBsZXRlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZpc3VhbEVsZW1lbnQuc2hvdWxkUmVkdWNlTW90aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uT3B0aW9ucy5kZWxheSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uT3B0aW9ucy50eXBlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5zdGFydEFuaW1hdGlvbihhbmltYXRpb25PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogSWYgdGhlIGxheW91dCBoYXNuJ3QgY2hhbmdlZCBhbmQgd2UgaGF2ZSBhbiBhbmltYXRpb24gdGhhdCBoYXNuJ3Qgc3RhcnRlZCB5ZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBmaW5pc2ggaXQgaW1tZWRpYXRlbHkuIE90aGVyd2lzZSBpdCB3aWxsIGJlIGFuaW1hdGluZyBmcm9tIGEgbG9jYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoYXQgd2FzIHByb2JhYmx5IG5ldmVyIGNvbW1pdGVkIHRvIHNjcmVlbiBhbmQgbG9vayBsaWtlIGEganVtcHkgYm94LlxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc0xheW91dENoYW5nZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5hbmltYXRpb25Qcm9ncmVzcyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmZpbmlzaEFuaW1hdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuaXNMZWFkKCkgJiYgKChfZiA9IChfZSA9IF90aGlzLm9wdGlvbnMpLm9uRXhpdENvbXBsZXRlKSA9PT0gbnVsbCB8fCBfZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2YuY2FsbChfZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnRhcmdldExheW91dCA9IG5ld0xheW91dDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnVubW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxheW91dElkICYmIHRoaXMud2lsbFVwZGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5yb290Lm5vZGVzLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgIChfYSA9IHRoaXMuZ2V0U3RhY2soKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgIChfYiA9IHRoaXMucGFyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2hpbGRyZW4uZGVsZXRlKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNhbmNlbFN5bmMucHJlUmVuZGVyKHRoaXMudXBkYXRlUHJvamVjdGlvbik7XG4gICAgICAgIH07XG4gICAgICAgIC8vIG9ubHkgb24gdGhlIHJvb3RcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmJsb2NrVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVNYW51YWxseUJsb2NrZWQgPSB0cnVlO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUudW5ibG9ja1VwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTWFudWFsbHlCbG9ja2VkID0gZmFsc2U7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5pc1VwZGF0ZUJsb2NrZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVNYW51YWxseUJsb2NrZWQgfHwgdGhpcy51cGRhdGVCbG9ja2VkQnlSZXNpemU7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5pc1RyZWVBbmltYXRpb25CbG9ja2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLmlzQW5pbWF0aW9uQmxvY2tlZCB8fFxuICAgICAgICAgICAgICAgICgoX2EgPSB0aGlzLnBhcmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmlzVHJlZUFuaW1hdGlvbkJsb2NrZWQoKSkgfHxcbiAgICAgICAgICAgICAgICBmYWxzZSk7XG4gICAgICAgIH07XG4gICAgICAgIC8vIE5vdGU6IGN1cnJlbnRseSBvbmx5IHJ1bm5pbmcgb24gcm9vdCBub2RlXG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5zdGFydFVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVXBkYXRlQmxvY2tlZCgpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZyA9IHRydWU7XG4gICAgICAgICAgICAoX2EgPSB0aGlzLm5vZGVzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9yRWFjaChyZXNldFJvdGF0aW9uKTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLndpbGxVcGRhdGUgPSBmdW5jdGlvbiAoc2hvdWxkTm90aWZ5TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgICAgIGlmIChzaG91bGROb3RpZnlMaXN0ZW5lcnMgPT09IHZvaWQgMCkgeyBzaG91bGROb3RpZnlMaXN0ZW5lcnMgPSB0cnVlOyB9XG4gICAgICAgICAgICBpZiAodGhpcy5yb290LmlzVXBkYXRlQmxvY2tlZCgpKSB7XG4gICAgICAgICAgICAgICAgKF9iID0gKF9hID0gdGhpcy5vcHRpb25zKS5vbkV4aXRDb21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICF0aGlzLnJvb3QuaXNVcGRhdGluZyAmJiB0aGlzLnJvb3Quc3RhcnRVcGRhdGUoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGF5b3V0RGlydHkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5pc0xheW91dERpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnBhdGhbaV07XG4gICAgICAgICAgICAgICAgbm9kZS5zaG91bGRSZXNldFRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogVE9ETzogQ2hlY2sgd2UgaGF2ZW4ndCB1cGRhdGVkIHRoZSBzY3JvbGxcbiAgICAgICAgICAgICAgICAgKiBzaW5jZSB0aGUgbGFzdCBkaWRVcGRhdGVcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBub2RlLnVwZGF0ZVNjcm9sbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIF9kID0gdGhpcy5vcHRpb25zLCBsYXlvdXRJZCA9IF9kLmxheW91dElkLCBsYXlvdXQgPSBfZC5sYXlvdXQ7XG4gICAgICAgICAgICBpZiAobGF5b3V0SWQgPT09IHVuZGVmaW5lZCAmJiAhbGF5b3V0KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciB0cmFuc2Zvcm1UZW1wbGF0ZSA9IChfYyA9IHRoaXMub3B0aW9ucy52aXN1YWxFbGVtZW50KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuZ2V0UHJvcHMoKS50cmFuc2Zvcm1UZW1wbGF0ZTtcbiAgICAgICAgICAgIHRoaXMucHJldlRyYW5zZm9ybVRlbXBsYXRlVmFsdWUgPSB0cmFuc2Zvcm1UZW1wbGF0ZSA9PT0gbnVsbCB8fCB0cmFuc2Zvcm1UZW1wbGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdHJhbnNmb3JtVGVtcGxhdGUodGhpcy5sYXRlc3RWYWx1ZXMsIFwiXCIpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTbmFwc2hvdCgpO1xuICAgICAgICAgICAgc2hvdWxkTm90aWZ5TGlzdGVuZXJzICYmIHRoaXMubm90aWZ5TGlzdGVuZXJzKFwid2lsbFVwZGF0ZVwiKTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gTm90ZTogQ3VycmVudGx5IG9ubHkgcnVubmluZyBvbiByb290IG5vZGVcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmRpZFVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB1cGRhdGVXYXNCbG9ja2VkID0gdGhpcy5pc1VwZGF0ZUJsb2NrZWQoKTtcbiAgICAgICAgICAgIC8vIFdoZW4gZG9pbmcgYW4gaW5zdGFudCB0cmFuc2l0aW9uLCB3ZSBza2lwIHRoZSBsYXlvdXQgdXBkYXRlLFxuICAgICAgICAgICAgLy8gYnV0IHNob3VsZCBzdGlsbCBjbGVhbiB1cCB0aGUgbWVhc3VyZW1lbnRzIHNvIHRoYXQgdGhlIG5leHRcbiAgICAgICAgICAgIC8vIHNuYXBzaG90IGNvdWxkIGJlIHRha2VuIGNvcnJlY3RseS5cbiAgICAgICAgICAgIGlmICh1cGRhdGVXYXNCbG9ja2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51bmJsb2NrVXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckFsbFNuYXBzaG90cygpO1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZXMuZm9yRWFjaChjbGVhck1lYXN1cmVtZW50cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVXBkYXRpbmcpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5pc1VwZGF0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFNlYXJjaCBmb3IgYW5kIG1vdW50IG5ld2x5LWFkZGVkIHByb2plY3Rpb24gZWxlbWVudHMuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogVE9ETzogRXZlcnkgdGltZSBhIG5ldyBjb21wb25lbnQgaXMgcmVuZGVyZWQgd2UgY291bGQgc2VhcmNoIHVwIHRoZSB0cmVlIGZvclxuICAgICAgICAgICAgICogdGhlIGNsb3Nlc3QgbW91bnRlZCBub2RlIGFuZCBxdWVyeSBmcm9tIHRoZXJlIHJhdGhlciB0aGFuIGRvY3VtZW50LlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAodGhpcy5wb3RlbnRpYWxOb2Rlcy5zaXplKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3RlbnRpYWxOb2Rlcy5mb3JFYWNoKG1vdW50Tm9kZUVhcmx5KTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvdGVudGlhbE5vZGVzLmNsZWFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFdyaXRlXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMubm9kZXMuZm9yRWFjaChyZXNldFRyYW5zZm9ybVN0eWxlKTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmVhZCA9PT09PT09PT09PT09PT09PT1cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgLy8gVXBkYXRlIGxheW91dCBtZWFzdXJlbWVudHMgb2YgdXBkYXRlZCBjaGlsZHJlblxuICAgICAgICAgICAgdGhpcy5ub2Rlcy5mb3JFYWNoKHVwZGF0ZUxheW91dCk7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFdyaXRlXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIC8vIE5vdGlmeSBsaXN0ZW5lcnMgdGhhdCB0aGUgbGF5b3V0IGlzIHVwZGF0ZWRcbiAgICAgICAgICAgIHRoaXMubm9kZXMuZm9yRWFjaChub3RpZnlMYXlvdXRVcGRhdGUpO1xuICAgICAgICAgICAgdGhpcy5jbGVhckFsbFNuYXBzaG90cygpO1xuICAgICAgICAgICAgLy8gRmx1c2ggYW55IHNjaGVkdWxlZCB1cGRhdGVzXG4gICAgICAgICAgICBmbHVzaFN5bmMudXBkYXRlKCk7XG4gICAgICAgICAgICBmbHVzaFN5bmMucHJlUmVuZGVyKCk7XG4gICAgICAgICAgICBmbHVzaFN5bmMucmVuZGVyKCk7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5jbGVhckFsbFNuYXBzaG90cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMubm9kZXMuZm9yRWFjaChjbGVhclNuYXBzaG90KTtcbiAgICAgICAgICAgIHRoaXMuc2hhcmVkTm9kZXMuZm9yRWFjaChyZW1vdmVMZWFkU25hcHNob3RzKTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnNjaGVkdWxlVXBkYXRlUHJvamVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN5bmMucHJlUmVuZGVyKHRoaXMudXBkYXRlUHJvamVjdGlvbiwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuc2NoZWR1bGVDaGVja0FmdGVyVW5tb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHRoZSB1bm1vdW50aW5nIG5vZGUgaXMgaW4gYSBsYXlvdXRHcm91cCBhbmQgZGlkIHRyaWdnZXIgYSB3aWxsVXBkYXRlLFxuICAgICAgICAgICAgICogd2UgbWFudWFsbHkgY2FsbCBkaWRVcGRhdGUgdG8gZ2l2ZSBhIGNoYW5jZSB0byB0aGUgc2libGluZ3MgdG8gYW5pbWF0ZS5cbiAgICAgICAgICAgICAqIE90aGVyd2lzZSwgY2xlYW51cCBhbGwgc25hcHNob3RzIHRvIHByZXZlbnRzIGZ1dHVyZSBub2RlcyBmcm9tIHJldXNpbmcgdGhlbS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgc3luYy5wb3N0UmVuZGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMuaXNMYXlvdXREaXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5yb290LmRpZFVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMucm9vdC5jaGVja1VwZGF0ZUZhaWxlZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogVXBkYXRlIG1lYXN1cmVtZW50c1xuICAgICAgICAgKi9cbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnVwZGF0ZVNuYXBzaG90ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc25hcHNob3QgfHwgIXRoaXMuaW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIG1lYXN1cmVkID0gdGhpcy5tZWFzdXJlKCk7XG4gICAgICAgICAgICB2YXIgbGF5b3V0ID0gdGhpcy5yZW1vdmVUcmFuc2Zvcm0odGhpcy5yZW1vdmVFbGVtZW50U2Nyb2xsKG1lYXN1cmVkKSk7XG4gICAgICAgICAgICByb3VuZEJveChsYXlvdXQpO1xuICAgICAgICAgICAgdGhpcy5zbmFwc2hvdCA9IHtcbiAgICAgICAgICAgICAgICBtZWFzdXJlZDogbWVhc3VyZWQsXG4gICAgICAgICAgICAgICAgbGF5b3V0OiBsYXlvdXQsXG4gICAgICAgICAgICAgICAgbGF0ZXN0VmFsdWVzOiB7fSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS51cGRhdGVMYXlvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgLy8gVE9ETzogSW5jb3Jwb3JhdGUgaW50byBhIGZvcndhcmRlZCBzY3JvbGwgb2Zmc2V0XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbCgpO1xuICAgICAgICAgICAgaWYgKCEodGhpcy5vcHRpb25zLmFsd2F5c01lYXN1cmVMYXlvdXQgJiYgdGhpcy5pc0xlYWQoKSkgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5pc0xheW91dERpcnR5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXaGVuIGEgbm9kZSBpcyBtb3VudGVkLCBpdCBzaW1wbHkgcmVzdW1lcyBmcm9tIHRoZSBwcmV2TGVhZCdzXG4gICAgICAgICAgICAgKiBzbmFwc2hvdCBpbnN0ZWFkIG9mIHRha2luZyBhIG5ldyBvbmUsIGJ1dCB0aGUgYW5jZXN0b3JzIHNjcm9sbFxuICAgICAgICAgICAgICogbWlnaHQgaGF2ZSB1cGRhdGVkIHdoaWxlIHRoZSBwcmV2TGVhZCBpcyB1bm1vdW50ZWQuIFdlIG5lZWQgdG9cbiAgICAgICAgICAgICAqIHVwZGF0ZSB0aGUgc2Nyb2xsIGFnYWluIHRvIG1ha2Ugc3VyZSB0aGUgbGF5b3V0IHdlIG1lYXN1cmUgaXNcbiAgICAgICAgICAgICAqIHVwIHRvIGRhdGUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICh0aGlzLnJlc3VtZUZyb20gJiYgIXRoaXMucmVzdW1lRnJvbS5pbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5wYXRoW2ldO1xuICAgICAgICAgICAgICAgICAgICBub2RlLnVwZGF0ZVNjcm9sbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBtZWFzdXJlZCA9IHRoaXMubWVhc3VyZSgpO1xuICAgICAgICAgICAgcm91bmRCb3gobWVhc3VyZWQpO1xuICAgICAgICAgICAgdmFyIHByZXZMYXlvdXQgPSB0aGlzLmxheW91dDtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0ID0ge1xuICAgICAgICAgICAgICAgIG1lYXN1cmVkOiBtZWFzdXJlZCxcbiAgICAgICAgICAgICAgICBhY3R1YWw6IHRoaXMucmVtb3ZlRWxlbWVudFNjcm9sbChtZWFzdXJlZCksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRDb3JyZWN0ZWQgPSBjcmVhdGVCb3goKTtcbiAgICAgICAgICAgIHRoaXMuaXNMYXlvdXREaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5wcm9qZWN0aW9uRGVsdGEgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeUxpc3RlbmVycyhcIm1lYXN1cmVcIiwgdGhpcy5sYXlvdXQuYWN0dWFsKTtcbiAgICAgICAgICAgIChfYSA9IHRoaXMub3B0aW9ucy52aXN1YWxFbGVtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eubm90aWZ5TGF5b3V0TWVhc3VyZSh0aGlzLmxheW91dC5hY3R1YWwsIHByZXZMYXlvdXQgPT09IG51bGwgfHwgcHJldkxheW91dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJldkxheW91dC5hY3R1YWwpO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUudXBkYXRlU2Nyb2xsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sYXlvdXRTY3JvbGwgJiYgdGhpcy5pbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTY3JvbGxSb290ID0gY2hlY2tJc1Njcm9sbFJvb3QodGhpcy5pbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSBtZWFzdXJlU2Nyb2xsKHRoaXMuaW5zdGFuY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUucmVzZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAoIXJlc2V0VHJhbnNmb3JtKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBpc1Jlc2V0UmVxdWVzdGVkID0gdGhpcy5pc0xheW91dERpcnR5IHx8IHRoaXMuc2hvdWxkUmVzZXRUcmFuc2Zvcm07XG4gICAgICAgICAgICB2YXIgaGFzUHJvamVjdGlvbiA9IHRoaXMucHJvamVjdGlvbkRlbHRhICYmICFpc0RlbHRhWmVybyh0aGlzLnByb2plY3Rpb25EZWx0YSk7XG4gICAgICAgICAgICB2YXIgdHJhbnNmb3JtVGVtcGxhdGUgPSAoX2EgPSB0aGlzLm9wdGlvbnMudmlzdWFsRWxlbWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldFByb3BzKCkudHJhbnNmb3JtVGVtcGxhdGU7XG4gICAgICAgICAgICB2YXIgdHJhbnNmb3JtVGVtcGxhdGVWYWx1ZSA9IHRyYW5zZm9ybVRlbXBsYXRlID09PSBudWxsIHx8IHRyYW5zZm9ybVRlbXBsYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0cmFuc2Zvcm1UZW1wbGF0ZSh0aGlzLmxhdGVzdFZhbHVlcywgXCJcIik7XG4gICAgICAgICAgICB2YXIgdHJhbnNmb3JtVGVtcGxhdGVIYXNDaGFuZ2VkID0gdHJhbnNmb3JtVGVtcGxhdGVWYWx1ZSAhPT0gdGhpcy5wcmV2VHJhbnNmb3JtVGVtcGxhdGVWYWx1ZTtcbiAgICAgICAgICAgIGlmIChpc1Jlc2V0UmVxdWVzdGVkICYmXG4gICAgICAgICAgICAgICAgKGhhc1Byb2plY3Rpb24gfHxcbiAgICAgICAgICAgICAgICAgICAgaGFzVHJhbnNmb3JtKHRoaXMubGF0ZXN0VmFsdWVzKSB8fFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1UZW1wbGF0ZUhhc0NoYW5nZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzZXRUcmFuc2Zvcm0odGhpcy5pbnN0YW5jZSwgdHJhbnNmb3JtVGVtcGxhdGVWYWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG91bGRSZXNldFRyYW5zZm9ybSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2NoZWR1bGVSZW5kZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLm1lYXN1cmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdmlzdWFsRWxlbWVudCA9IHRoaXMub3B0aW9ucy52aXN1YWxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKCF2aXN1YWxFbGVtZW50KVxuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVCb3goKTtcbiAgICAgICAgICAgIHZhciBib3ggPSB2aXN1YWxFbGVtZW50Lm1lYXN1cmVWaWV3cG9ydEJveCgpO1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHZpZXdwb3J0IHNjcm9sbCB0byBnaXZlIHBhZ2UtcmVsYXRpdmUgY29vcmRpbmF0ZXNcbiAgICAgICAgICAgIHZhciBzY3JvbGwgPSB0aGlzLnJvb3Quc2Nyb2xsO1xuICAgICAgICAgICAgaWYgKHNjcm9sbCkge1xuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZUF4aXMoYm94LngsIHNjcm9sbC54KTtcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGVBeGlzKGJveC55LCBzY3JvbGwueSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYm94O1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUucmVtb3ZlRWxlbWVudFNjcm9sbCA9IGZ1bmN0aW9uIChib3gpIHtcbiAgICAgICAgICAgIHZhciBib3hXaXRob3V0U2Nyb2xsID0gY3JlYXRlQm94KCk7XG4gICAgICAgICAgICBjb3B5Qm94SW50byhib3hXaXRob3V0U2Nyb2xsLCBib3gpO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBQZXJmb3JtYW5jZSBUT0RPOiBLZWVwIGEgY3VtdWxhdGl2ZSBzY3JvbGwgb2Zmc2V0IGRvd24gdGhlIHRyZWVcbiAgICAgICAgICAgICAqIHJhdGhlciB0aGFuIGxvb3AgYmFjayB1cCB0aGUgcGF0aC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMucGF0aFtpXTtcbiAgICAgICAgICAgICAgICB2YXIgc2Nyb2xsXzEgPSBub2RlLnNjcm9sbCwgb3B0aW9ucyA9IG5vZGUub3B0aW9ucywgaXNTY3JvbGxSb290ID0gbm9kZS5pc1Njcm9sbFJvb3Q7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUgIT09IHRoaXMucm9vdCAmJiBzY3JvbGxfMSAmJiBvcHRpb25zLmxheW91dFNjcm9sbCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogSWYgdGhpcyBpcyBhIG5ldyBzY3JvbGwgcm9vdCwgd2Ugd2FudCB0byByZW1vdmUgYWxsIHByZXZpb3VzIHNjcm9sbHNcbiAgICAgICAgICAgICAgICAgICAgICogZnJvbSB0aGUgdmlld3BvcnQgYm94LlxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2Nyb2xsUm9vdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29weUJveEludG8oYm94V2l0aG91dFNjcm9sbCwgYm94KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByb290U2Nyb2xsID0gdGhpcy5yb290LnNjcm9sbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogVW5kbyB0aGUgYXBwbGljYXRpb24gb2YgcGFnZSBzY3JvbGwgdGhhdCB3YXMgb3JpZ2luYWxseSBhZGRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogdG8gdGhlIG1lYXN1cmVkIGJvdW5kaW5nIGJveC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvb3RTY3JvbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVBeGlzKGJveFdpdGhvdXRTY3JvbGwueCwgLXJvb3RTY3JvbGwueCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlQXhpcyhib3hXaXRob3V0U2Nyb2xsLnksIC1yb290U2Nyb2xsLnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZUF4aXMoYm94V2l0aG91dFNjcm9sbC54LCBzY3JvbGxfMS54KTtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlQXhpcyhib3hXaXRob3V0U2Nyb2xsLnksIHNjcm9sbF8xLnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBib3hXaXRob3V0U2Nyb2xsO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuYXBwbHlUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoYm94LCB0cmFuc2Zvcm1Pbmx5KSB7XG4gICAgICAgICAgICBpZiAodHJhbnNmb3JtT25seSA9PT0gdm9pZCAwKSB7IHRyYW5zZm9ybU9ubHkgPSBmYWxzZTsgfVxuICAgICAgICAgICAgdmFyIHdpdGhUcmFuc2Zvcm1zID0gY3JlYXRlQm94KCk7XG4gICAgICAgICAgICBjb3B5Qm94SW50byh3aXRoVHJhbnNmb3JtcywgYm94KTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnBhdGhbaV07XG4gICAgICAgICAgICAgICAgaWYgKCF0cmFuc2Zvcm1Pbmx5ICYmXG4gICAgICAgICAgICAgICAgICAgIG5vZGUub3B0aW9ucy5sYXlvdXRTY3JvbGwgJiZcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zY3JvbGwgJiZcbiAgICAgICAgICAgICAgICAgICAgbm9kZSAhPT0gbm9kZS5yb290KSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybUJveCh3aXRoVHJhbnNmb3Jtcywge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogLW5vZGUuc2Nyb2xsLngsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAtbm9kZS5zY3JvbGwueSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghaGFzVHJhbnNmb3JtKG5vZGUubGF0ZXN0VmFsdWVzKSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtQm94KHdpdGhUcmFuc2Zvcm1zLCBub2RlLmxhdGVzdFZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzVHJhbnNmb3JtKHRoaXMubGF0ZXN0VmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybUJveCh3aXRoVHJhbnNmb3JtcywgdGhpcy5sYXRlc3RWYWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHdpdGhUcmFuc2Zvcm1zO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUucmVtb3ZlVHJhbnNmb3JtID0gZnVuY3Rpb24gKGJveCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgdmFyIGJveFdpdGhvdXRUcmFuc2Zvcm0gPSBjcmVhdGVCb3goKTtcbiAgICAgICAgICAgIGNvcHlCb3hJbnRvKGJveFdpdGhvdXRUcmFuc2Zvcm0sIGJveCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5wYXRoW2ldO1xuICAgICAgICAgICAgICAgIGlmICghbm9kZS5pbnN0YW5jZSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNUcmFuc2Zvcm0obm9kZS5sYXRlc3RWYWx1ZXMpKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBoYXNTY2FsZShub2RlLmxhdGVzdFZhbHVlcykgJiYgbm9kZS51cGRhdGVTbmFwc2hvdCgpO1xuICAgICAgICAgICAgICAgIHZhciBzb3VyY2VCb3ggPSBjcmVhdGVCb3goKTtcbiAgICAgICAgICAgICAgICB2YXIgbm9kZUJveCA9IG5vZGUubWVhc3VyZSgpO1xuICAgICAgICAgICAgICAgIGNvcHlCb3hJbnRvKHNvdXJjZUJveCwgbm9kZUJveCk7XG4gICAgICAgICAgICAgICAgcmVtb3ZlQm94VHJhbnNmb3Jtcyhib3hXaXRob3V0VHJhbnNmb3JtLCBub2RlLmxhdGVzdFZhbHVlcywgKF9hID0gbm9kZS5zbmFwc2hvdCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxheW91dCwgc291cmNlQm94KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNUcmFuc2Zvcm0odGhpcy5sYXRlc3RWYWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlQm94VHJhbnNmb3Jtcyhib3hXaXRob3V0VHJhbnNmb3JtLCB0aGlzLmxhdGVzdFZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYm94V2l0aG91dFRyYW5zZm9ybTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuc2V0VGFyZ2V0RGVsdGEgPSBmdW5jdGlvbiAoZGVsdGEpIHtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0RGVsdGEgPSBkZWx0YTtcbiAgICAgICAgICAgIHRoaXMucm9vdC5zY2hlZHVsZVVwZGF0ZVByb2plY3Rpb24oKTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gX19hc3NpZ24oX19hc3NpZ24oX19hc3NpZ24oe30sIHRoaXMub3B0aW9ucyksIG9wdGlvbnMpLCB7IGNyb3NzZmFkZTogKF9hID0gb3B0aW9ucy5jcm9zc2ZhZGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRydWUgfSk7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5jbGVhck1lYXN1cmVtZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5sYXlvdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnNuYXBzaG90ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5wcmV2VHJhbnNmb3JtVGVtcGxhdGVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0RGVsdGEgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuaXNMYXlvdXREaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogRnJhbWUgY2FsY3VsYXRpb25zXG4gICAgICAgICAqL1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUucmVzb2x2ZVRhcmdldERlbHRhID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgdmFyIF9iID0gdGhpcy5vcHRpb25zLCBsYXlvdXQgPSBfYi5sYXlvdXQsIGxheW91dElkID0gX2IubGF5b3V0SWQ7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHdlIGhhdmUgbm8gbGF5b3V0LCB3ZSBjYW4ndCBwZXJmb3JtIHByb2plY3Rpb24sIHNvIGVhcmx5IHJldHVyblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoIXRoaXMubGF5b3V0IHx8ICEobGF5b3V0IHx8IGxheW91dElkKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHdlIGRvbid0IGhhdmUgYSB0YXJnZXREZWx0YSBidXQgZG8gaGF2ZSBhIGxheW91dCwgd2UgY2FuIGF0dGVtcHQgdG8gcmVzb2x2ZVxuICAgICAgICAgICAgICogYSByZWxhdGl2ZVBhcmVudC4gVGhpcyB3aWxsIGFsbG93IGEgY29tcG9uZW50IHRvIHBlcmZvcm0gc2NhbGUgY29ycmVjdGlvblxuICAgICAgICAgICAgICogZXZlbiBpZiBubyBhbmltYXRpb24gaGFzIHN0YXJ0ZWQuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIC8vIFRPRE8gSWYgdGhpcyBpcyB1bnN1Y2Nlc3NmdWwgdGhpcyBjdXJyZW50bHkgaGFwcGVucyBldmVyeSBmcmFtZVxuICAgICAgICAgICAgaWYgKCF0aGlzLnRhcmdldERlbHRhICYmICF0aGlzLnJlbGF0aXZlVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogVGhpcyBpcyBhIHNlbWktcmVwZXRpdGlvbiBvZiBmdXJ0aGVyIGRvd24gdGhpcyBmdW5jdGlvbiwgbWFrZSBEUllcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlUGFyZW50ID0gdGhpcy5nZXRDbG9zZXN0UHJvamVjdGluZ1BhcmVudCgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlbGF0aXZlUGFyZW50ICYmIHRoaXMucmVsYXRpdmVQYXJlbnQubGF5b3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVsYXRpdmVUYXJnZXQgPSBjcmVhdGVCb3goKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZVRhcmdldE9yaWdpbiA9IGNyZWF0ZUJveCgpO1xuICAgICAgICAgICAgICAgICAgICBjYWxjUmVsYXRpdmVQb3NpdGlvbih0aGlzLnJlbGF0aXZlVGFyZ2V0T3JpZ2luLCB0aGlzLmxheW91dC5hY3R1YWwsIHRoaXMucmVsYXRpdmVQYXJlbnQubGF5b3V0LmFjdHVhbCk7XG4gICAgICAgICAgICAgICAgICAgIGNvcHlCb3hJbnRvKHRoaXMucmVsYXRpdmVUYXJnZXQsIHRoaXMucmVsYXRpdmVUYXJnZXRPcmlnaW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgd2UgaGF2ZSBubyByZWxhdGl2ZSB0YXJnZXQgb3Igbm8gdGFyZ2V0IGRlbHRhIG91ciB0YXJnZXQgaXNuJ3QgdmFsaWRcbiAgICAgICAgICAgICAqIGZvciB0aGlzIGZyYW1lLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoIXRoaXMucmVsYXRpdmVUYXJnZXQgJiYgIXRoaXMudGFyZ2V0RGVsdGEpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBMYXp5LWluaXQgdGFyZ2V0IGRhdGEgc3RydWN0dXJlXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICghdGhpcy50YXJnZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhcmdldCA9IGNyZWF0ZUJveCgpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0V2l0aFRyYW5zZm9ybXMgPSBjcmVhdGVCb3goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgd2UndmUgZ290IGEgcmVsYXRpdmUgYm94IGZvciB0aGlzIGNvbXBvbmVudCwgcmVzb2x2ZSBpdCBpbnRvIGEgdGFyZ2V0IHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICh0aGlzLnJlbGF0aXZlVGFyZ2V0ICYmXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZVRhcmdldE9yaWdpbiAmJlxuICAgICAgICAgICAgICAgICgoX2EgPSB0aGlzLnJlbGF0aXZlUGFyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIGNhbGNSZWxhdGl2ZUJveCh0aGlzLnRhcmdldCwgdGhpcy5yZWxhdGl2ZVRhcmdldCwgdGhpcy5yZWxhdGl2ZVBhcmVudC50YXJnZXQpO1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIElmIHdlJ3ZlIG9ubHkgZ290IGEgdGFyZ2V0RGVsdGEsIHJlc29sdmUgaXQgaW50byBhIHRhcmdldFxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy50YXJnZXREZWx0YSkge1xuICAgICAgICAgICAgICAgIGlmIChCb29sZWFuKHRoaXMucmVzdW1pbmdGcm9tKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBUaGlzIGlzIGNyZWF0aW5nIGEgbmV3IG9iamVjdCBldmVyeSBmcmFtZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhcmdldCA9IHRoaXMuYXBwbHlUcmFuc2Zvcm0odGhpcy5sYXlvdXQuYWN0dWFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvcHlCb3hJbnRvKHRoaXMudGFyZ2V0LCB0aGlzLmxheW91dC5hY3R1YWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhcHBseUJveERlbHRhKHRoaXMudGFyZ2V0LCB0aGlzLnRhcmdldERlbHRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIElmIG5vIHRhcmdldCwgdXNlIG93biBsYXlvdXQgYXMgdGFyZ2V0XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgY29weUJveEludG8odGhpcy50YXJnZXQsIHRoaXMubGF5b3V0LmFjdHVhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHdlJ3ZlIGJlZW4gdG9sZCB0byBhdHRlbXB0IHRvIHJlc29sdmUgYSByZWxhdGl2ZSB0YXJnZXQsIGRvIHNvLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAodGhpcy5hdHRlbXB0VG9SZXNvbHZlUmVsYXRpdmVUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF0dGVtcHRUb1Jlc29sdmVSZWxhdGl2ZVRhcmdldCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMucmVsYXRpdmVQYXJlbnQgPSB0aGlzLmdldENsb3Nlc3RQcm9qZWN0aW5nUGFyZW50KCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVsYXRpdmVQYXJlbnQgJiZcbiAgICAgICAgICAgICAgICAgICAgQm9vbGVhbih0aGlzLnJlbGF0aXZlUGFyZW50LnJlc3VtaW5nRnJvbSkgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICBCb29sZWFuKHRoaXMucmVzdW1pbmdGcm9tKSAmJlxuICAgICAgICAgICAgICAgICAgICAhdGhpcy5yZWxhdGl2ZVBhcmVudC5vcHRpb25zLmxheW91dFNjcm9sbCAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlUGFyZW50LnRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlVGFyZ2V0ID0gY3JlYXRlQm94KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVsYXRpdmVUYXJnZXRPcmlnaW4gPSBjcmVhdGVCb3goKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsY1JlbGF0aXZlUG9zaXRpb24odGhpcy5yZWxhdGl2ZVRhcmdldE9yaWdpbiwgdGhpcy50YXJnZXQsIHRoaXMucmVsYXRpdmVQYXJlbnQudGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgY29weUJveEludG8odGhpcy5yZWxhdGl2ZVRhcmdldCwgdGhpcy5yZWxhdGl2ZVRhcmdldE9yaWdpbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuZ2V0Q2xvc2VzdFByb2plY3RpbmdQYXJlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucGFyZW50IHx8IGhhc1RyYW5zZm9ybSh0aGlzLnBhcmVudC5sYXRlc3RWYWx1ZXMpKVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoKHRoaXMucGFyZW50LnJlbGF0aXZlVGFyZ2V0IHx8IHRoaXMucGFyZW50LnRhcmdldERlbHRhKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LmxheW91dCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5nZXRDbG9zZXN0UHJvamVjdGluZ1BhcmVudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuY2FsY1Byb2plY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB2YXIgX2IgPSB0aGlzLm9wdGlvbnMsIGxheW91dCA9IF9iLmxheW91dCwgbGF5b3V0SWQgPSBfYi5sYXlvdXRJZDtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgdGhpcyBzZWN0aW9uIG9mIHRoZSB0cmVlIGlzbid0IGFuaW1hdGluZyB3ZSBjYW5cbiAgICAgICAgICAgICAqIGRlbGV0ZSBvdXIgdGFyZ2V0IHNvdXJjZXMgZm9yIHRoZSBmb2xsb3dpbmcgZnJhbWUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuaXNUcmVlQW5pbWF0aW5nID0gQm9vbGVhbigoKF9hID0gdGhpcy5wYXJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pc1RyZWVBbmltYXRpbmcpIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QW5pbWF0aW9uIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQW5pbWF0aW9uKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1RyZWVBbmltYXRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhcmdldERlbHRhID0gdGhpcy5yZWxhdGl2ZVRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5sYXlvdXQgfHwgIShsYXlvdXQgfHwgbGF5b3V0SWQpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBsZWFkID0gdGhpcy5nZXRMZWFkKCk7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFJlc2V0IHRoZSBjb3JyZWN0ZWQgYm94IHdpdGggdGhlIGxhdGVzdCB2YWx1ZXMgZnJvbSBib3gsIGFzIHdlJ3JlIHRoZW4gZ29pbmdcbiAgICAgICAgICAgICAqIHRvIHBlcmZvcm0gbXV0YXRpdmUgb3BlcmF0aW9ucyBvbiBpdC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY29weUJveEludG8odGhpcy5sYXlvdXRDb3JyZWN0ZWQsIHRoaXMubGF5b3V0LmFjdHVhbCk7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEFwcGx5IGFsbCB0aGUgcGFyZW50IGRlbHRhcyB0byB0aGlzIGJveCB0byBwcm9kdWNlIHRoZSBjb3JyZWN0ZWQgYm94LiBUaGlzXG4gICAgICAgICAgICAgKiBpcyB0aGUgbGF5b3V0IGJveCwgYXMgaXQgd2lsbCBhcHBlYXIgb24gc2NyZWVuIGFzIGEgcmVzdWx0IG9mIHRoZSB0cmFuc2Zvcm1zIG9mIGl0cyBwYXJlbnRzLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBhcHBseVRyZWVEZWx0YXModGhpcy5sYXlvdXRDb3JyZWN0ZWQsIHRoaXMudHJlZVNjYWxlLCB0aGlzLnBhdGgsIEJvb2xlYW4odGhpcy5yZXN1bWluZ0Zyb20pIHx8IHRoaXMgIT09IGxlYWQpO1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IGxlYWQudGFyZ2V0O1xuICAgICAgICAgICAgaWYgKCF0YXJnZXQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnByb2plY3Rpb25EZWx0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvamVjdGlvbkRlbHRhID0gY3JlYXRlRGVsdGEoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2plY3Rpb25EZWx0YVdpdGhUcmFuc2Zvcm0gPSBjcmVhdGVEZWx0YSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHByZXZUcmVlU2NhbGVYID0gdGhpcy50cmVlU2NhbGUueDtcbiAgICAgICAgICAgIHZhciBwcmV2VHJlZVNjYWxlWSA9IHRoaXMudHJlZVNjYWxlLnk7XG4gICAgICAgICAgICB2YXIgcHJldlByb2plY3Rpb25UcmFuc2Zvcm0gPSB0aGlzLnByb2plY3Rpb25UcmFuc2Zvcm07XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFVwZGF0ZSB0aGUgZGVsdGEgYmV0d2VlbiB0aGUgY29ycmVjdGVkIGJveCBhbmQgdGhlIHRhcmdldCBib3ggYmVmb3JlIHVzZXItc2V0IHRyYW5zZm9ybXMgd2VyZSBhcHBsaWVkLlxuICAgICAgICAgICAgICogVGhpcyB3aWxsIGFsbG93IHVzIHRvIGNhbGN1bGF0ZSB0aGUgY29ycmVjdGVkIGJvcmRlclJhZGl1cyBhbmQgYm94U2hhZG93IHRvIGNvbXBlbnNhdGVcbiAgICAgICAgICAgICAqIGZvciBvdXIgbGF5b3V0IHJlcHJvamVjdGlvbiwgYnV0IHN0aWxsIGFsbG93IHRoZW0gdG8gYmUgc2NhbGVkIGNvcnJlY3RseSBieSB0aGUgdXNlci5cbiAgICAgICAgICAgICAqIEl0IG1pZ2h0IGJlIHRoYXQgdG8gc2ltcGxpZnkgdGhpcyB3ZSBtYXkgd2FudCB0byBhY2NlcHQgdGhhdCB1c2VyLXNldCBzY2FsZSBpcyBhbHNvIGNvcnJlY3RlZFxuICAgICAgICAgICAgICogYW5kIHdlIHdvdWxkbid0IGhhdmUgdG8ga2VlcCBhbmQgY2FsYyBib3RoIGRlbHRhcywgT1Igd2UgY291bGQgc3VwcG9ydCBhIHVzZXIgc2V0dGluZ1xuICAgICAgICAgICAgICogdG8gYWxsb3cgcGVvcGxlIHRvIGNob29zZSB3aGV0aGVyIHRoZXNlIHN0eWxlcyBhcmUgY29ycmVjdGVkIGJhc2VkIG9uIGp1c3QgdGhlXG4gICAgICAgICAgICAgKiBsYXlvdXQgcmVwcm9qZWN0aW9uIG9yIHRoZSBmaW5hbCBib3VuZGluZyBib3guXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNhbGNCb3hEZWx0YSh0aGlzLnByb2plY3Rpb25EZWx0YSwgdGhpcy5sYXlvdXRDb3JyZWN0ZWQsIHRhcmdldCwgdGhpcy5sYXRlc3RWYWx1ZXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9qZWN0aW9uVHJhbnNmb3JtID0gYnVpbGRQcm9qZWN0aW9uVHJhbnNmb3JtKHRoaXMucHJvamVjdGlvbkRlbHRhLCB0aGlzLnRyZWVTY2FsZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5wcm9qZWN0aW9uVHJhbnNmb3JtICE9PSBwcmV2UHJvamVjdGlvblRyYW5zZm9ybSB8fFxuICAgICAgICAgICAgICAgIHRoaXMudHJlZVNjYWxlLnggIT09IHByZXZUcmVlU2NhbGVYIHx8XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlU2NhbGUueSAhPT0gcHJldlRyZWVTY2FsZVkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1Byb2plY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2hlZHVsZVJlbmRlcigpO1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5TGlzdGVuZXJzKFwicHJvamVjdGlvblVwZGF0ZVwiLCB0YXJnZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAvLyBUT0RPOiBTY2hlZHVsZSByZW5kZXJcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAvLyBUT0RPOiBTY2hlZHVsZSByZW5kZXJcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnNjaGVkdWxlUmVuZGVyID0gZnVuY3Rpb24gKG5vdGlmeUFsbCkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICBpZiAobm90aWZ5QWxsID09PSB2b2lkIDApIHsgbm90aWZ5QWxsID0gdHJ1ZTsgfVxuICAgICAgICAgICAgKF9iID0gKF9hID0gdGhpcy5vcHRpb25zKS5zY2hlZHVsZVJlbmRlcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgICAgICAgICAgbm90aWZ5QWxsICYmICgoX2MgPSB0aGlzLmdldFN0YWNrKCkpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5zY2hlZHVsZVJlbmRlcigpKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlc3VtaW5nRnJvbSAmJiAhdGhpcy5yZXN1bWluZ0Zyb20uaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VtaW5nRnJvbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnNldEFuaW1hdGlvbk9yaWdpbiA9IGZ1bmN0aW9uIChkZWx0YSwgaGFzT25seVJlbGF0aXZlVGFyZ2V0Q2hhbmdlZCkge1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmIChoYXNPbmx5UmVsYXRpdmVUYXJnZXRDaGFuZ2VkID09PSB2b2lkIDApIHsgaGFzT25seVJlbGF0aXZlVGFyZ2V0Q2hhbmdlZCA9IGZhbHNlOyB9XG4gICAgICAgICAgICB2YXIgc25hcHNob3QgPSB0aGlzLnNuYXBzaG90O1xuICAgICAgICAgICAgdmFyIHNuYXBzaG90TGF0ZXN0VmFsdWVzID0gKHNuYXBzaG90ID09PSBudWxsIHx8IHNuYXBzaG90ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzbmFwc2hvdC5sYXRlc3RWYWx1ZXMpIHx8IHt9O1xuICAgICAgICAgICAgdmFyIG1peGVkVmFsdWVzID0gX19hc3NpZ24oe30sIHRoaXMubGF0ZXN0VmFsdWVzKTtcbiAgICAgICAgICAgIHZhciB0YXJnZXREZWx0YSA9IGNyZWF0ZURlbHRhKCk7XG4gICAgICAgICAgICB0aGlzLnJlbGF0aXZlVGFyZ2V0ID0gdGhpcy5yZWxhdGl2ZVRhcmdldE9yaWdpbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuYXR0ZW1wdFRvUmVzb2x2ZVJlbGF0aXZlVGFyZ2V0ID0gIWhhc09ubHlSZWxhdGl2ZVRhcmdldENoYW5nZWQ7XG4gICAgICAgICAgICB2YXIgcmVsYXRpdmVMYXlvdXQgPSBjcmVhdGVCb3goKTtcbiAgICAgICAgICAgIHZhciBpc1NoYXJlZExheW91dEFuaW1hdGlvbiA9IHNuYXBzaG90ID09PSBudWxsIHx8IHNuYXBzaG90ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzbmFwc2hvdC5pc1NoYXJlZDtcbiAgICAgICAgICAgIHZhciBpc09ubHlNZW1iZXIgPSAoKChfYSA9IHRoaXMuZ2V0U3RhY2soKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm1lbWJlcnMubGVuZ3RoKSB8fCAwKSA8PSAxO1xuICAgICAgICAgICAgdmFyIHNob3VsZENyb3NzZmFkZU9wYWNpdHkgPSBCb29sZWFuKGlzU2hhcmVkTGF5b3V0QW5pbWF0aW9uICYmXG4gICAgICAgICAgICAgICAgIWlzT25seU1lbWJlciAmJlxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jcm9zc2ZhZGUgPT09IHRydWUgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5wYXRoLnNvbWUoaGFzT3BhY2l0eUNyb3NzZmFkZSkpO1xuICAgICAgICAgICAgdGhpcy5hbmltYXRpb25Qcm9ncmVzcyA9IDA7XG4gICAgICAgICAgICB0aGlzLm1peFRhcmdldERlbHRhID0gZnVuY3Rpb24gKGxhdGVzdCkge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICB2YXIgcHJvZ3Jlc3MgPSBsYXRlc3QgLyAxMDAwO1xuICAgICAgICAgICAgICAgIG1peEF4aXNEZWx0YSh0YXJnZXREZWx0YS54LCBkZWx0YS54LCBwcm9ncmVzcyk7XG4gICAgICAgICAgICAgICAgbWl4QXhpc0RlbHRhKHRhcmdldERlbHRhLnksIGRlbHRhLnksIHByb2dyZXNzKTtcbiAgICAgICAgICAgICAgICBfdGhpcy5zZXRUYXJnZXREZWx0YSh0YXJnZXREZWx0YSk7XG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLnJlbGF0aXZlVGFyZ2V0ICYmXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnJlbGF0aXZlVGFyZ2V0T3JpZ2luICYmXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmxheW91dCAmJlxuICAgICAgICAgICAgICAgICAgICAoKF9hID0gX3RoaXMucmVsYXRpdmVQYXJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sYXlvdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGNSZWxhdGl2ZVBvc2l0aW9uKHJlbGF0aXZlTGF5b3V0LCBfdGhpcy5sYXlvdXQuYWN0dWFsLCBfdGhpcy5yZWxhdGl2ZVBhcmVudC5sYXlvdXQuYWN0dWFsKTtcbiAgICAgICAgICAgICAgICAgICAgbWl4Qm94KF90aGlzLnJlbGF0aXZlVGFyZ2V0LCBfdGhpcy5yZWxhdGl2ZVRhcmdldE9yaWdpbiwgcmVsYXRpdmVMYXlvdXQsIHByb2dyZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzU2hhcmVkTGF5b3V0QW5pbWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmFuaW1hdGlvblZhbHVlcyA9IG1peGVkVmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICBtaXhWYWx1ZXMobWl4ZWRWYWx1ZXMsIHNuYXBzaG90TGF0ZXN0VmFsdWVzLCBfdGhpcy5sYXRlc3RWYWx1ZXMsIHByb2dyZXNzLCBzaG91bGRDcm9zc2ZhZGVPcGFjaXR5LCBpc09ubHlNZW1iZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfdGhpcy5yb290LnNjaGVkdWxlVXBkYXRlUHJvamVjdGlvbigpO1xuICAgICAgICAgICAgICAgIF90aGlzLnNjaGVkdWxlUmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgX3RoaXMuYW5pbWF0aW9uUHJvZ3Jlc3MgPSBwcm9ncmVzcztcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLm1peFRhcmdldERlbHRhKDApO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuc3RhcnRBbmltYXRpb24gPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeUxpc3RlbmVycyhcImFuaW1hdGlvblN0YXJ0XCIpO1xuICAgICAgICAgICAgKF9hID0gdGhpcy5jdXJyZW50QW5pbWF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3RvcCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMucmVzdW1pbmdGcm9tKSB7XG4gICAgICAgICAgICAgICAgKF9iID0gdGhpcy5yZXN1bWluZ0Zyb20uY3VycmVudEFuaW1hdGlvbikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnN0b3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdBbmltYXRpb24pIHtcbiAgICAgICAgICAgICAgICBjYW5jZWxTeW5jLnVwZGF0ZSh0aGlzLnBlbmRpbmdBbmltYXRpb24pO1xuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0FuaW1hdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogU3RhcnQgdGhlIGFuaW1hdGlvbiBpbiB0aGUgbmV4dCBmcmFtZSB0byBoYXZlIGEgZnJhbWUgd2l0aCBwcm9ncmVzcyAwLFxuICAgICAgICAgICAgICogd2hlcmUgdGhlIHRhcmdldCBpcyB0aGUgc2FtZSBhcyB3aGVuIHRoZSBhbmltYXRpb24gc3RhcnRlZCwgc28gd2UgY2FuXG4gICAgICAgICAgICAgKiBjYWxjdWxhdGUgdGhlIHJlbGF0aXZlIHBvc2l0aW9ucyBjb3JyZWN0bHkgZm9yIGluc3RhbnQgdHJhbnNpdGlvbnMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0FuaW1hdGlvbiA9IHN5bmMudXBkYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBnbG9iYWxQcm9qZWN0aW9uU3RhdGUuaGFzQW5pbWF0ZWRTaW5jZVJlc2l6ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudEFuaW1hdGlvbiA9IGFuaW1hdGUoMCwgYW5pbWF0aW9uVGFyZ2V0LCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb3B0aW9ucyksIHsgb25VcGRhdGU6IGZ1bmN0aW9uIChsYXRlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLm1peFRhcmdldERlbHRhKGxhdGVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAoX2EgPSBvcHRpb25zLm9uVXBkYXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChvcHRpb25zLCBsYXRlc3QpO1xuICAgICAgICAgICAgICAgICAgICB9LCBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgICAgICAoX2EgPSBvcHRpb25zLm9uQ29tcGxldGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuY29tcGxldGVBbmltYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgfSB9KSk7XG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLnJlc3VtaW5nRnJvbSkge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5yZXN1bWluZ0Zyb20uY3VycmVudEFuaW1hdGlvbiA9IF90aGlzLmN1cnJlbnRBbmltYXRpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF90aGlzLnBlbmRpbmdBbmltYXRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmNvbXBsZXRlQW5pbWF0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKHRoaXMucmVzdW1pbmdGcm9tKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bWluZ0Zyb20uY3VycmVudEFuaW1hdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VtaW5nRnJvbS5wcmVzZXJ2ZU9wYWNpdHkgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAoX2EgPSB0aGlzLmdldFN0YWNrKCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5leGl0QW5pbWF0aW9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgIHRoaXMucmVzdW1pbmdGcm9tID1cbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBbmltYXRpb24gPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdGlvblZhbHVlcyA9XG4gICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeUxpc3RlbmVycyhcImFuaW1hdGlvbkNvbXBsZXRlXCIpO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuZmluaXNoQW5pbWF0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEFuaW1hdGlvbikge1xuICAgICAgICAgICAgICAgIChfYSA9IHRoaXMubWl4VGFyZ2V0RGVsdGEpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRoaXMsIGFuaW1hdGlvblRhcmdldCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QW5pbWF0aW9uLnN0b3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29tcGxldGVBbmltYXRpb24oKTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmFwcGx5VHJhbnNmb3Jtc1RvVGFyZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hID0gdGhpcy5nZXRMZWFkKCksIHRhcmdldFdpdGhUcmFuc2Zvcm1zID0gX2EudGFyZ2V0V2l0aFRyYW5zZm9ybXMsIHRhcmdldCA9IF9hLnRhcmdldCwgbGF5b3V0ID0gX2EubGF5b3V0LCBsYXRlc3RWYWx1ZXMgPSBfYS5sYXRlc3RWYWx1ZXM7XG4gICAgICAgICAgICBpZiAoIXRhcmdldFdpdGhUcmFuc2Zvcm1zIHx8ICF0YXJnZXQgfHwgIWxheW91dClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb3B5Qm94SW50byh0YXJnZXRXaXRoVHJhbnNmb3JtcywgdGFyZ2V0KTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQXBwbHkgdGhlIGxhdGVzdCB1c2VyLXNldCB0cmFuc2Zvcm1zIHRvIHRoZSB0YXJnZXRCb3ggdG8gcHJvZHVjZSB0aGUgdGFyZ2V0Qm94RmluYWwuXG4gICAgICAgICAgICAgKiBUaGlzIGlzIHRoZSBmaW5hbCBib3ggdGhhdCB3ZSB3aWxsIHRoZW4gcHJvamVjdCBpbnRvIGJ5IGNhbGN1bGF0aW5nIGEgdHJhbnNmb3JtIGRlbHRhIGFuZFxuICAgICAgICAgICAgICogYXBwbHlpbmcgaXQgdG8gdGhlIGNvcnJlY3RlZCBib3guXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRyYW5zZm9ybUJveCh0YXJnZXRXaXRoVHJhbnNmb3JtcywgbGF0ZXN0VmFsdWVzKTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVXBkYXRlIHRoZSBkZWx0YSBiZXR3ZWVuIHRoZSBjb3JyZWN0ZWQgYm94IGFuZCB0aGUgZmluYWwgdGFyZ2V0IGJveCwgYWZ0ZXJcbiAgICAgICAgICAgICAqIHVzZXItc2V0IHRyYW5zZm9ybXMgYXJlIGFwcGxpZWQgdG8gaXQuIFRoaXMgd2lsbCBiZSB1c2VkIGJ5IHRoZSByZW5kZXJlciB0b1xuICAgICAgICAgICAgICogY3JlYXRlIGEgdHJhbnNmb3JtIHN0eWxlIHRoYXQgd2lsbCByZXByb2plY3QgdGhlIGVsZW1lbnQgZnJvbSBpdHMgYWN0dWFsIGxheW91dFxuICAgICAgICAgICAgICogaW50byB0aGUgZGVzaXJlZCBib3VuZGluZyBib3guXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNhbGNCb3hEZWx0YSh0aGlzLnByb2plY3Rpb25EZWx0YVdpdGhUcmFuc2Zvcm0sIHRoaXMubGF5b3V0Q29ycmVjdGVkLCB0YXJnZXRXaXRoVHJhbnNmb3JtcywgbGF0ZXN0VmFsdWVzKTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnJlZ2lzdGVyU2hhcmVkTm9kZSA9IGZ1bmN0aW9uIChsYXlvdXRJZCwgbm9kZSkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkTm9kZXMuaGFzKGxheW91dElkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkTm9kZXMuc2V0KGxheW91dElkLCBuZXcgTm9kZVN0YWNrKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHN0YWNrID0gdGhpcy5zaGFyZWROb2Rlcy5nZXQobGF5b3V0SWQpO1xuICAgICAgICAgICAgc3RhY2suYWRkKG5vZGUpO1xuICAgICAgICAgICAgbm9kZS5wcm9tb3RlKHtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAoX2EgPSBub2RlLm9wdGlvbnMuaW5pdGlhbFByb21vdGlvbkNvbmZpZykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRyYW5zaXRpb24sXG4gICAgICAgICAgICAgICAgcHJlc2VydmVGb2xsb3dPcGFjaXR5OiAoX2MgPSAoX2IgPSBub2RlLm9wdGlvbnMuaW5pdGlhbFByb21vdGlvbkNvbmZpZykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnNob3VsZFByZXNlcnZlRm9sbG93T3BhY2l0eSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmNhbGwoX2IsIG5vZGUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5pc0xlYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgc3RhY2sgPSB0aGlzLmdldFN0YWNrKCk7XG4gICAgICAgICAgICByZXR1cm4gc3RhY2sgPyBzdGFjay5sZWFkID09PSB0aGlzIDogdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmdldExlYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB2YXIgbGF5b3V0SWQgPSB0aGlzLm9wdGlvbnMubGF5b3V0SWQ7XG4gICAgICAgICAgICByZXR1cm4gbGF5b3V0SWQgPyAoKF9hID0gdGhpcy5nZXRTdGFjaygpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVhZCkgfHwgdGhpcyA6IHRoaXM7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5nZXRQcmV2TGVhZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHZhciBsYXlvdXRJZCA9IHRoaXMub3B0aW9ucy5sYXlvdXRJZDtcbiAgICAgICAgICAgIHJldHVybiBsYXlvdXRJZCA/IChfYSA9IHRoaXMuZ2V0U3RhY2soKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnByZXZMZWFkIDogdW5kZWZpbmVkO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuZ2V0U3RhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbGF5b3V0SWQgPSB0aGlzLm9wdGlvbnMubGF5b3V0SWQ7XG4gICAgICAgICAgICBpZiAobGF5b3V0SWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucm9vdC5zaGFyZWROb2Rlcy5nZXQobGF5b3V0SWQpO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUucHJvbW90ZSA9IGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgdmFyIF9iID0gX2EgPT09IHZvaWQgMCA/IHt9IDogX2EsIG5lZWRzUmVzZXQgPSBfYi5uZWVkc1Jlc2V0LCB0cmFuc2l0aW9uID0gX2IudHJhbnNpdGlvbiwgcHJlc2VydmVGb2xsb3dPcGFjaXR5ID0gX2IucHJlc2VydmVGb2xsb3dPcGFjaXR5O1xuICAgICAgICAgICAgdmFyIHN0YWNrID0gdGhpcy5nZXRTdGFjaygpO1xuICAgICAgICAgICAgaWYgKHN0YWNrKVxuICAgICAgICAgICAgICAgIHN0YWNrLnByb21vdGUodGhpcywgcHJlc2VydmVGb2xsb3dPcGFjaXR5KTtcbiAgICAgICAgICAgIGlmIChuZWVkc1Jlc2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9qZWN0aW9uRGVsdGEgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5uZWVkc1Jlc2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uKVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9ucyh7IHRyYW5zaXRpb246IHRyYW5zaXRpb24gfSk7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5yZWxlZ2F0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBzdGFjayA9IHRoaXMuZ2V0U3RhY2soKTtcbiAgICAgICAgICAgIGlmIChzdGFjaykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdGFjay5yZWxlZ2F0ZSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnJlc2V0Um90YXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdmlzdWFsRWxlbWVudCA9IHRoaXMub3B0aW9ucy52aXN1YWxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKCF2aXN1YWxFbGVtZW50KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gZGV0ZWN0ZWQgcm90YXRpb24gdmFsdWVzLCB3ZSBjYW4gZWFybHkgcmV0dXJuIHdpdGhvdXQgYSBmb3JjZWQgcmVuZGVyLlxuICAgICAgICAgICAgdmFyIGhhc1JvdGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gS2VlcCBhIHJlY29yZCBvZiBhbGwgdGhlIHZhbHVlcyB3ZSd2ZSByZXNldFxuICAgICAgICAgICAgdmFyIHJlc2V0VmFsdWVzID0ge307XG4gICAgICAgICAgICAvLyBDaGVjayB0aGUgcm90YXRlIHZhbHVlIG9mIGFsbCBheGVzIGFuZCByZXNldCB0byAwXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYW5zZm9ybUF4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgYXhpcyA9IHRyYW5zZm9ybUF4ZXNbaV07XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IFwicm90YXRlXCIgKyBheGlzO1xuICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgcm90YXRpb24gZG9lc24ndCBleGlzdCBhcyBhIG1vdGlvbiB2YWx1ZSwgdGhlbiB3ZSBkb24ndFxuICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gcmVzZXQgaXRcbiAgICAgICAgICAgICAgICBpZiAoIXZpc3VhbEVsZW1lbnQuZ2V0U3RhdGljVmFsdWUoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaGFzUm90YXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAvLyBSZWNvcmQgdGhlIHJvdGF0aW9uIGFuZCB0aGVuIHRlbXBvcmFyaWx5IHNldCBpdCB0byAwXG4gICAgICAgICAgICAgICAgcmVzZXRWYWx1ZXNba2V5XSA9IHZpc3VhbEVsZW1lbnQuZ2V0U3RhdGljVmFsdWUoa2V5KTtcbiAgICAgICAgICAgICAgICB2aXN1YWxFbGVtZW50LnNldFN0YXRpY1ZhbHVlKGtleSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIHJvdGF0aW9uIHZhbHVlcywgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnkgbW9yZS5cbiAgICAgICAgICAgIGlmICghaGFzUm90YXRlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIC8vIEZvcmNlIGEgcmVuZGVyIG9mIHRoaXMgZWxlbWVudCB0byBhcHBseSB0aGUgdHJhbnNmb3JtIHdpdGggYWxsIHJvdGF0aW9uc1xuICAgICAgICAgICAgLy8gc2V0IHRvIDAuXG4gICAgICAgICAgICB2aXN1YWxFbGVtZW50ID09PSBudWxsIHx8IHZpc3VhbEVsZW1lbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZpc3VhbEVsZW1lbnQuc3luY1JlbmRlcigpO1xuICAgICAgICAgICAgLy8gUHV0IGJhY2sgYWxsIHRoZSB2YWx1ZXMgd2UgcmVzZXRcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiByZXNldFZhbHVlcykge1xuICAgICAgICAgICAgICAgIHZpc3VhbEVsZW1lbnQuc2V0U3RhdGljVmFsdWUoa2V5LCByZXNldFZhbHVlc1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNjaGVkdWxlIGEgcmVuZGVyIGZvciB0aGUgbmV4dCBmcmFtZS4gVGhpcyBlbnN1cmVzIHdlIHdvbid0IHZpc3VhbGx5XG4gICAgICAgICAgICAvLyBzZWUgdGhlIGVsZW1lbnQgd2l0aCB0aGUgcmVzZXQgcm90YXRlIHZhbHVlIGFwcGxpZWQuXG4gICAgICAgICAgICB2aXN1YWxFbGVtZW50LnNjaGVkdWxlUmVuZGVyKCk7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5nZXRQcm9qZWN0aW9uU3R5bGVzID0gZnVuY3Rpb24gKHN0eWxlUHJvcCkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2Y7XG4gICAgICAgICAgICBpZiAoc3R5bGVQcm9wID09PSB2b2lkIDApIHsgc3R5bGVQcm9wID0ge307IH1cbiAgICAgICAgICAgIC8vIFRPRE86IFJldHVybiBsaWZlY3ljbGUtcGVyc2lzdGVudCBvYmplY3RcbiAgICAgICAgICAgIHZhciBzdHlsZXMgPSB7fTtcbiAgICAgICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSB8fCB0aGlzLmlzU1ZHKVxuICAgICAgICAgICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3R5bGVzLnZpc2liaWxpdHkgPSBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVRlbXBsYXRlID0gKF9hID0gdGhpcy5vcHRpb25zLnZpc3VhbEVsZW1lbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRQcm9wcygpLnRyYW5zZm9ybVRlbXBsYXRlO1xuICAgICAgICAgICAgaWYgKHRoaXMubmVlZHNSZXNldCkge1xuICAgICAgICAgICAgICAgIHRoaXMubmVlZHNSZXNldCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHN0eWxlcy5vcGFjaXR5ID0gXCJcIjtcbiAgICAgICAgICAgICAgICBzdHlsZXMucG9pbnRlckV2ZW50cyA9XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVNb3Rpb25WYWx1ZShzdHlsZVByb3AucG9pbnRlckV2ZW50cykgfHwgXCJcIjtcbiAgICAgICAgICAgICAgICBzdHlsZXMudHJhbnNmb3JtID0gdHJhbnNmb3JtVGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgPyB0cmFuc2Zvcm1UZW1wbGF0ZSh0aGlzLmxhdGVzdFZhbHVlcywgXCJcIilcbiAgICAgICAgICAgICAgICAgICAgOiBcIm5vbmVcIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGxlYWQgPSB0aGlzLmdldExlYWQoKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5wcm9qZWN0aW9uRGVsdGEgfHwgIXRoaXMubGF5b3V0IHx8ICFsZWFkLnRhcmdldCkge1xuICAgICAgICAgICAgICAgIHZhciBlbXB0eVN0eWxlcyA9IHt9O1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGF5b3V0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZW1wdHlTdHlsZXMub3BhY2l0eSA9IChfYiA9IHRoaXMubGF0ZXN0VmFsdWVzLm9wYWNpdHkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDE7XG4gICAgICAgICAgICAgICAgICAgIGVtcHR5U3R5bGVzLnBvaW50ZXJFdmVudHMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZU1vdGlvblZhbHVlKHN0eWxlUHJvcC5wb2ludGVyRXZlbnRzKSB8fCBcIlwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNQcm9qZWN0ZWQgJiYgIWhhc1RyYW5zZm9ybSh0aGlzLmxhdGVzdFZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgZW1wdHlTdHlsZXMudHJhbnNmb3JtID0gdHJhbnNmb3JtVGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdHJhbnNmb3JtVGVtcGxhdGUoe30sIFwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwibm9uZVwiO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc1Byb2plY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHlsZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdmFsdWVzVG9SZW5kZXIgPSBsZWFkLmFuaW1hdGlvblZhbHVlcyB8fCBsZWFkLmxhdGVzdFZhbHVlcztcbiAgICAgICAgICAgIHRoaXMuYXBwbHlUcmFuc2Zvcm1zVG9UYXJnZXQoKTtcbiAgICAgICAgICAgIHN0eWxlcy50cmFuc2Zvcm0gPSBidWlsZFByb2plY3Rpb25UcmFuc2Zvcm0odGhpcy5wcm9qZWN0aW9uRGVsdGFXaXRoVHJhbnNmb3JtLCB0aGlzLnRyZWVTY2FsZSwgdmFsdWVzVG9SZW5kZXIpO1xuICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgc3R5bGVzLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVRlbXBsYXRlKHZhbHVlc1RvUmVuZGVyLCBzdHlsZXMudHJhbnNmb3JtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBfZyA9IHRoaXMucHJvamVjdGlvbkRlbHRhLCB4ID0gX2cueCwgeSA9IF9nLnk7XG4gICAgICAgICAgICBzdHlsZXMudHJhbnNmb3JtT3JpZ2luID0gXCJcIi5jb25jYXQoeC5vcmlnaW4gKiAxMDAsIFwiJSBcIikuY29uY2F0KHkub3JpZ2luICogMTAwLCBcIiUgMFwiKTtcbiAgICAgICAgICAgIGlmIChsZWFkLmFuaW1hdGlvblZhbHVlcykge1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIElmIHRoZSBsZWFkIGNvbXBvbmVudCBpcyBhbmltYXRpbmcsIGFzc2lnbiB0aGlzIGVpdGhlciB0aGUgZW50ZXJpbmcvbGVhdmluZ1xuICAgICAgICAgICAgICAgICAqIG9wYWNpdHlcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBzdHlsZXMub3BhY2l0eSA9XG4gICAgICAgICAgICAgICAgICAgIGxlYWQgPT09IHRoaXNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKF9kID0gKF9jID0gdmFsdWVzVG9SZW5kZXIub3BhY2l0eSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogdGhpcy5sYXRlc3RWYWx1ZXMub3BhY2l0eSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogMVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnByZXNlcnZlT3BhY2l0eVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5sYXRlc3RWYWx1ZXMub3BhY2l0eVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdmFsdWVzVG9SZW5kZXIub3BhY2l0eUV4aXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBPciB3ZSdyZSBub3QgYW5pbWF0aW5nIGF0IGFsbCwgc2V0IHRoZSBsZWFkIGNvbXBvbmVudCB0byBpdHMgYWN0dWFsXG4gICAgICAgICAgICAgICAgICogb3BhY2l0eSBhbmQgb3RoZXIgY29tcG9uZW50cyB0byBoaWRkZW4uXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgc3R5bGVzLm9wYWNpdHkgPVxuICAgICAgICAgICAgICAgICAgICBsZWFkID09PSB0aGlzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IChfZSA9IHZhbHVlc1RvUmVuZGVyLm9wYWNpdHkpICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogKF9mID0gdmFsdWVzVG9SZW5kZXIub3BhY2l0eUV4aXQpICE9PSBudWxsICYmIF9mICE9PSB2b2lkIDAgPyBfZiA6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEFwcGx5IHNjYWxlIGNvcnJlY3Rpb25cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHNjYWxlQ29ycmVjdG9ycykge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZXNUb1JlbmRlcltrZXldID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHZhciBfaCA9IHNjYWxlQ29ycmVjdG9yc1trZXldLCBjb3JyZWN0ID0gX2guY29ycmVjdCwgYXBwbHlUbyA9IF9oLmFwcGx5VG87XG4gICAgICAgICAgICAgICAgdmFyIGNvcnJlY3RlZCA9IGNvcnJlY3QodmFsdWVzVG9SZW5kZXJba2V5XSwgbGVhZCk7XG4gICAgICAgICAgICAgICAgaWYgKGFwcGx5VG8pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG51bSA9IGFwcGx5VG8ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZXNbYXBwbHlUb1tpXV0gPSBjb3JyZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlc1trZXldID0gY29ycmVjdGVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogRGlzYWJsZSBwb2ludGVyIGV2ZW50cyBvbiBmb2xsb3cgY29tcG9uZW50cy4gVGhpcyBpcyB0byBlbnN1cmVcbiAgICAgICAgICAgICAqIHRoYXQgaWYgYSBmb2xsb3cgY29tcG9uZW50IGNvdmVycyBhIGxlYWQgY29tcG9uZW50IGl0IGRvZXNuJ3QgYmxvY2tcbiAgICAgICAgICAgICAqIHBvaW50ZXIgZXZlbnRzIG9uIHRoZSBsZWFkLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxheW91dElkKSB7XG4gICAgICAgICAgICAgICAgc3R5bGVzLnBvaW50ZXJFdmVudHMgPVxuICAgICAgICAgICAgICAgICAgICBsZWFkID09PSB0aGlzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHJlc29sdmVNb3Rpb25WYWx1ZShzdHlsZVByb3AucG9pbnRlckV2ZW50cykgfHwgXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgOiBcIm5vbmVcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5jbGVhclNuYXBzaG90ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5yZXN1bWVGcm9tID0gdGhpcy5zbmFwc2hvdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gT25seSBydW4gb24gcm9vdFxuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUucmVzZXRUcmVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5yb290Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHsgdmFyIF9hOyByZXR1cm4gKF9hID0gbm9kZS5jdXJyZW50QW5pbWF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3RvcCgpOyB9KTtcbiAgICAgICAgICAgIHRoaXMucm9vdC5ub2Rlcy5mb3JFYWNoKGNsZWFyTWVhc3VyZW1lbnRzKTtcbiAgICAgICAgICAgIHRoaXMucm9vdC5zaGFyZWROb2Rlcy5jbGVhcigpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gUHJvamVjdGlvbk5vZGU7XG4gICAgfSgpKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUxheW91dChub2RlKSB7XG4gICAgbm9kZS51cGRhdGVMYXlvdXQoKTtcbn1cbmZ1bmN0aW9uIG5vdGlmeUxheW91dFVwZGF0ZShub2RlKSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgIHZhciBzbmFwc2hvdCA9IChfYiA9IChfYSA9IG5vZGUucmVzdW1lRnJvbSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNuYXBzaG90KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBub2RlLnNuYXBzaG90O1xuICAgIGlmIChub2RlLmlzTGVhZCgpICYmXG4gICAgICAgIG5vZGUubGF5b3V0ICYmXG4gICAgICAgIHNuYXBzaG90ICYmXG4gICAgICAgIG5vZGUuaGFzTGlzdGVuZXJzKFwiZGlkVXBkYXRlXCIpKSB7XG4gICAgICAgIHZhciBfZSA9IG5vZGUubGF5b3V0LCBsYXlvdXRfMSA9IF9lLmFjdHVhbCwgbWVhc3VyZWRMYXlvdXQgPSBfZS5tZWFzdXJlZDtcbiAgICAgICAgLy8gVE9ETyBNYXliZSB3ZSB3YW50IHRvIGFsc28gcmVzaXplIHRoZSBsYXlvdXQgc25hcHNob3Qgc28gd2UgZG9uJ3QgdHJpZ2dlclxuICAgICAgICAvLyBhbmltYXRpb25zIGZvciBpbnN0YW5jZSBpZiBsYXlvdXQ9XCJzaXplXCIgYW5kIGFuIGVsZW1lbnQgaGFzIG9ubHkgY2hhbmdlZCBwb3NpdGlvblxuICAgICAgICBpZiAobm9kZS5vcHRpb25zLmFuaW1hdGlvblR5cGUgPT09IFwic2l6ZVwiKSB7XG4gICAgICAgICAgICBlYWNoQXhpcyhmdW5jdGlvbiAoYXhpcykge1xuICAgICAgICAgICAgICAgIHZhciBheGlzU25hcHNob3QgPSBzbmFwc2hvdC5pc1NoYXJlZFxuICAgICAgICAgICAgICAgICAgICA/IHNuYXBzaG90Lm1lYXN1cmVkW2F4aXNdXG4gICAgICAgICAgICAgICAgICAgIDogc25hcHNob3QubGF5b3V0W2F4aXNdO1xuICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBjYWxjTGVuZ3RoKGF4aXNTbmFwc2hvdCk7XG4gICAgICAgICAgICAgICAgYXhpc1NuYXBzaG90Lm1pbiA9IGxheW91dF8xW2F4aXNdLm1pbjtcbiAgICAgICAgICAgICAgICBheGlzU25hcHNob3QubWF4ID0gYXhpc1NuYXBzaG90Lm1pbiArIGxlbmd0aDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vZGUub3B0aW9ucy5hbmltYXRpb25UeXBlID09PSBcInBvc2l0aW9uXCIpIHtcbiAgICAgICAgICAgIGVhY2hBeGlzKGZ1bmN0aW9uIChheGlzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGF4aXNTbmFwc2hvdCA9IHNuYXBzaG90LmlzU2hhcmVkXG4gICAgICAgICAgICAgICAgICAgID8gc25hcHNob3QubWVhc3VyZWRbYXhpc11cbiAgICAgICAgICAgICAgICAgICAgOiBzbmFwc2hvdC5sYXlvdXRbYXhpc107XG4gICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGNhbGNMZW5ndGgobGF5b3V0XzFbYXhpc10pO1xuICAgICAgICAgICAgICAgIGF4aXNTbmFwc2hvdC5tYXggPSBheGlzU25hcHNob3QubWluICsgbGVuZ3RoO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxheW91dERlbHRhID0gY3JlYXRlRGVsdGEoKTtcbiAgICAgICAgY2FsY0JveERlbHRhKGxheW91dERlbHRhLCBsYXlvdXRfMSwgc25hcHNob3QubGF5b3V0KTtcbiAgICAgICAgdmFyIHZpc3VhbERlbHRhID0gY3JlYXRlRGVsdGEoKTtcbiAgICAgICAgaWYgKHNuYXBzaG90LmlzU2hhcmVkKSB7XG4gICAgICAgICAgICBjYWxjQm94RGVsdGEodmlzdWFsRGVsdGEsIG5vZGUuYXBwbHlUcmFuc2Zvcm0obWVhc3VyZWRMYXlvdXQsIHRydWUpLCBzbmFwc2hvdC5tZWFzdXJlZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxjQm94RGVsdGEodmlzdWFsRGVsdGEsIGxheW91dF8xLCBzbmFwc2hvdC5sYXlvdXQpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBoYXNMYXlvdXRDaGFuZ2VkID0gIWlzRGVsdGFaZXJvKGxheW91dERlbHRhKTtcbiAgICAgICAgdmFyIGhhc1JlbGF0aXZlVGFyZ2V0Q2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoIW5vZGUucmVzdW1lRnJvbSkge1xuICAgICAgICAgICAgbm9kZS5yZWxhdGl2ZVBhcmVudCA9IG5vZGUuZ2V0Q2xvc2VzdFByb2plY3RpbmdQYXJlbnQoKTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgdGhlIHJlbGF0aXZlUGFyZW50IGlzIGl0c2VsZiByZXN1bWluZyBmcm9tIGEgZGlmZmVyZW50IGVsZW1lbnQgdGhlblxuICAgICAgICAgICAgICogdGhlIHJlbGF0aXZlIHNuYXBzaG90IGlzIG5vdCByZWxhdmVudFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAobm9kZS5yZWxhdGl2ZVBhcmVudCAmJiAhbm9kZS5yZWxhdGl2ZVBhcmVudC5yZXN1bWVGcm9tKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9mID0gbm9kZS5yZWxhdGl2ZVBhcmVudCwgcGFyZW50U25hcHNob3QgPSBfZi5zbmFwc2hvdCwgcGFyZW50TGF5b3V0ID0gX2YubGF5b3V0O1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTbmFwc2hvdCAmJiBwYXJlbnRMYXlvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGF0aXZlU25hcHNob3QgPSBjcmVhdGVCb3goKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsY1JlbGF0aXZlUG9zaXRpb24ocmVsYXRpdmVTbmFwc2hvdCwgc25hcHNob3QubGF5b3V0LCBwYXJlbnRTbmFwc2hvdC5sYXlvdXQpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVsYXRpdmVMYXlvdXQgPSBjcmVhdGVCb3goKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsY1JlbGF0aXZlUG9zaXRpb24ocmVsYXRpdmVMYXlvdXQsIGxheW91dF8xLCBwYXJlbnRMYXlvdXQuYWN0dWFsKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFib3hFcXVhbHMocmVsYXRpdmVTbmFwc2hvdCwgcmVsYXRpdmVMYXlvdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNSZWxhdGl2ZVRhcmdldENoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5vZGUubm90aWZ5TGlzdGVuZXJzKFwiZGlkVXBkYXRlXCIsIHtcbiAgICAgICAgICAgIGxheW91dDogbGF5b3V0XzEsXG4gICAgICAgICAgICBzbmFwc2hvdDogc25hcHNob3QsXG4gICAgICAgICAgICBkZWx0YTogdmlzdWFsRGVsdGEsXG4gICAgICAgICAgICBsYXlvdXREZWx0YTogbGF5b3V0RGVsdGEsXG4gICAgICAgICAgICBoYXNMYXlvdXRDaGFuZ2VkOiBoYXNMYXlvdXRDaGFuZ2VkLFxuICAgICAgICAgICAgaGFzUmVsYXRpdmVUYXJnZXRDaGFuZ2VkOiBoYXNSZWxhdGl2ZVRhcmdldENoYW5nZWQsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChub2RlLmlzTGVhZCgpKSB7XG4gICAgICAgIChfZCA9IChfYyA9IG5vZGUub3B0aW9ucykub25FeGl0Q29tcGxldGUpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5jYWxsKF9jKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xlYXJpbmcgdHJhbnNpdGlvblxuICAgICAqIFRPRE86IEludmVzdGlnYXRlIHdoeSB0aGlzIHRyYW5zaXRpb24gaXMgYmVpbmcgcGFzc2VkIGluIGFzIHt0eXBlOiBmYWxzZSB9IGZyb20gRnJhbWVyXG4gICAgICogYW5kIHdoeSB3ZSBuZWVkIGl0IGF0IGFsbFxuICAgICAqL1xuICAgIG5vZGUub3B0aW9ucy50cmFuc2l0aW9uID0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gY2xlYXJTbmFwc2hvdChub2RlKSB7XG4gICAgbm9kZS5jbGVhclNuYXBzaG90KCk7XG59XG5mdW5jdGlvbiBjbGVhck1lYXN1cmVtZW50cyhub2RlKSB7XG4gICAgbm9kZS5jbGVhck1lYXN1cmVtZW50cygpO1xufVxuZnVuY3Rpb24gcmVzZXRUcmFuc2Zvcm1TdHlsZShub2RlKSB7XG4gICAgdmFyIHZpc3VhbEVsZW1lbnQgPSBub2RlLm9wdGlvbnMudmlzdWFsRWxlbWVudDtcbiAgICBpZiAodmlzdWFsRWxlbWVudCA9PT0gbnVsbCB8fCB2aXN1YWxFbGVtZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2aXN1YWxFbGVtZW50LmdldFByb3BzKCkub25CZWZvcmVMYXlvdXRNZWFzdXJlKSB7XG4gICAgICAgIHZpc3VhbEVsZW1lbnQubm90aWZ5QmVmb3JlTGF5b3V0TWVhc3VyZSgpO1xuICAgIH1cbiAgICBub2RlLnJlc2V0VHJhbnNmb3JtKCk7XG59XG5mdW5jdGlvbiBmaW5pc2hBbmltYXRpb24obm9kZSkge1xuICAgIG5vZGUuZmluaXNoQW5pbWF0aW9uKCk7XG4gICAgbm9kZS50YXJnZXREZWx0YSA9IG5vZGUucmVsYXRpdmVUYXJnZXQgPSBub2RlLnRhcmdldCA9IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIHJlc29sdmVUYXJnZXREZWx0YShub2RlKSB7XG4gICAgbm9kZS5yZXNvbHZlVGFyZ2V0RGVsdGEoKTtcbn1cbmZ1bmN0aW9uIGNhbGNQcm9qZWN0aW9uKG5vZGUpIHtcbiAgICBub2RlLmNhbGNQcm9qZWN0aW9uKCk7XG59XG5mdW5jdGlvbiByZXNldFJvdGF0aW9uKG5vZGUpIHtcbiAgICBub2RlLnJlc2V0Um90YXRpb24oKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUxlYWRTbmFwc2hvdHMoc3RhY2spIHtcbiAgICBzdGFjay5yZW1vdmVMZWFkU25hcHNob3QoKTtcbn1cbmZ1bmN0aW9uIG1peEF4aXNEZWx0YShvdXRwdXQsIGRlbHRhLCBwKSB7XG4gICAgb3V0cHV0LnRyYW5zbGF0ZSA9IG1peChkZWx0YS50cmFuc2xhdGUsIDAsIHApO1xuICAgIG91dHB1dC5zY2FsZSA9IG1peChkZWx0YS5zY2FsZSwgMSwgcCk7XG4gICAgb3V0cHV0Lm9yaWdpbiA9IGRlbHRhLm9yaWdpbjtcbiAgICBvdXRwdXQub3JpZ2luUG9pbnQgPSBkZWx0YS5vcmlnaW5Qb2ludDtcbn1cbmZ1bmN0aW9uIG1peEF4aXMob3V0cHV0LCBmcm9tLCB0bywgcCkge1xuICAgIG91dHB1dC5taW4gPSBtaXgoZnJvbS5taW4sIHRvLm1pbiwgcCk7XG4gICAgb3V0cHV0Lm1heCA9IG1peChmcm9tLm1heCwgdG8ubWF4LCBwKTtcbn1cbmZ1bmN0aW9uIG1peEJveChvdXRwdXQsIGZyb20sIHRvLCBwKSB7XG4gICAgbWl4QXhpcyhvdXRwdXQueCwgZnJvbS54LCB0by54LCBwKTtcbiAgICBtaXhBeGlzKG91dHB1dC55LCBmcm9tLnksIHRvLnksIHApO1xufVxuZnVuY3Rpb24gaGFzT3BhY2l0eUNyb3NzZmFkZShub2RlKSB7XG4gICAgcmV0dXJuIChub2RlLmFuaW1hdGlvblZhbHVlcyAmJiBub2RlLmFuaW1hdGlvblZhbHVlcy5vcGFjaXR5RXhpdCAhPT0gdW5kZWZpbmVkKTtcbn1cbnZhciBkZWZhdWx0TGF5b3V0VHJhbnNpdGlvbiA9IHtcbiAgICBkdXJhdGlvbjogMC40NSxcbiAgICBlYXNlOiBbMC40LCAwLCAwLjEsIDFdLFxufTtcbmZ1bmN0aW9uIG1vdW50Tm9kZUVhcmx5KG5vZGUsIGlkKSB7XG4gICAgLyoqXG4gICAgICogUmF0aGVyIHRoYW4gc2VhcmNoaW5nIHRoZSBET00gZnJvbSBkb2N1bWVudCB3ZSBjYW4gc2VhcmNoIHRoZVxuICAgICAqIHBhdGggZm9yIHRoZSBkZWVwZXN0IG1vdW50ZWQgYW5jZXN0b3IgYW5kIHNlYXJjaCBmcm9tIHRoZXJlXG4gICAgICovXG4gICAgdmFyIHNlYXJjaE5vZGUgPSBub2RlLnJvb3Q7XG4gICAgZm9yICh2YXIgaSA9IG5vZGUucGF0aC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBpZiAoQm9vbGVhbihub2RlLnBhdGhbaV0uaW5zdGFuY2UpKSB7XG4gICAgICAgICAgICBzZWFyY2hOb2RlID0gbm9kZS5wYXRoW2ldO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIHNlYXJjaEVsZW1lbnQgPSBzZWFyY2hOb2RlICYmIHNlYXJjaE5vZGUgIT09IG5vZGUucm9vdCA/IHNlYXJjaE5vZGUuaW5zdGFuY2UgOiBkb2N1bWVudDtcbiAgICB2YXIgZWxlbWVudCA9IHNlYXJjaEVsZW1lbnQucXVlcnlTZWxlY3RvcihcIltkYXRhLXByb2plY3Rpb24taWQ9XFxcIlwiLmNvbmNhdChpZCwgXCJcXFwiXVwiKSk7XG4gICAgaWYgKGVsZW1lbnQpXG4gICAgICAgIG5vZGUubW91bnQoZWxlbWVudCwgdHJ1ZSk7XG59XG5mdW5jdGlvbiByb3VuZEF4aXMoYXhpcykge1xuICAgIGF4aXMubWluID0gTWF0aC5yb3VuZChheGlzLm1pbik7XG4gICAgYXhpcy5tYXggPSBNYXRoLnJvdW5kKGF4aXMubWF4KTtcbn1cbmZ1bmN0aW9uIHJvdW5kQm94KGJveCkge1xuICAgIHJvdW5kQXhpcyhib3gueCk7XG4gICAgcm91bmRBeGlzKGJveC55KTtcbn1cblxuZXhwb3J0IHsgY3JlYXRlUHJvamVjdGlvbk5vZGUsIG1peEF4aXMsIG1peEF4aXNEZWx0YSwgbWl4Qm94IH07XG4iLCJpbXBvcnQgeyBtb3Rpb25WYWx1ZSB9IGZyb20gJy4uL3ZhbHVlL2luZGV4Lm1qcyc7XG5pbXBvcnQgeyBpc01vdGlvblZhbHVlIH0gZnJvbSAnLi4vdmFsdWUvdXRpbHMvaXMtbW90aW9uLXZhbHVlLm1qcyc7XG5pbXBvcnQgeyBzdGFydEFuaW1hdGlvbiB9IGZyb20gJy4vdXRpbHMvdHJhbnNpdGlvbnMubWpzJztcblxuLyoqXG4gKiBBbmltYXRlIGEgc2luZ2xlIHZhbHVlIG9yIGEgYE1vdGlvblZhbHVlYC5cbiAqXG4gKiBUaGUgZmlyc3QgYXJndW1lbnQgaXMgZWl0aGVyIGEgYE1vdGlvblZhbHVlYCB0byBhbmltYXRlLCBvciBhbiBpbml0aWFsIGFuaW1hdGlvbiB2YWx1ZS5cbiAqXG4gKiBUaGUgc2Vjb25kIGlzIGVpdGhlciBhIHZhbHVlIHRvIGFuaW1hdGUgdG8sIG9yIGFuIGFycmF5IG9mIGtleWZyYW1lcyB0byBhbmltYXRlIHRocm91Z2guXG4gKlxuICogVGhlIHRoaXJkIGFyZ3VtZW50IGNhbiBiZSBlaXRoZXIgdHdlZW4gb3Igc3ByaW5nIG9wdGlvbnMsIGFuZCBvcHRpb25hbCBsaWZlY3ljbGUgbWV0aG9kczogYG9uVXBkYXRlYCwgYG9uUGxheWAsIGBvbkNvbXBsZXRlYCwgYG9uUmVwZWF0YCBhbmQgYG9uU3RvcGAuXG4gKlxuICogUmV0dXJucyBgQW5pbWF0aW9uUGxheWJhY2tDb250cm9sc2AsIGN1cnJlbnRseSBqdXN0IGEgYHN0b3BgIG1ldGhvZC5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBjb25zdCB4ID0gdXNlTW90aW9uVmFsdWUoMClcbiAqXG4gKiB1c2VFZmZlY3QoKCkgPT4ge1xuICogICBjb25zdCBjb250cm9scyA9IGFuaW1hdGUoeCwgMTAwLCB7XG4gKiAgICAgdHlwZTogXCJzcHJpbmdcIixcbiAqICAgICBzdGlmZm5lc3M6IDIwMDAsXG4gKiAgICAgb25Db21wbGV0ZTogdiA9PiB7fVxuICogICB9KVxuICpcbiAqICAgcmV0dXJuIGNvbnRyb2xzLnN0b3BcbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIGFuaW1hdGUoZnJvbSwgdG8sIHRyYW5zaXRpb24pIHtcbiAgICBpZiAodHJhbnNpdGlvbiA9PT0gdm9pZCAwKSB7IHRyYW5zaXRpb24gPSB7fTsgfVxuICAgIHZhciB2YWx1ZSA9IGlzTW90aW9uVmFsdWUoZnJvbSkgPyBmcm9tIDogbW90aW9uVmFsdWUoZnJvbSk7XG4gICAgc3RhcnRBbmltYXRpb24oXCJcIiwgdmFsdWUsIHRvLCB0cmFuc2l0aW9uKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdG9wOiBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWx1ZS5zdG9wKCk7IH0sXG4gICAgICAgIGlzQW5pbWF0aW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWx1ZS5pc0FuaW1hdGluZygpOyB9LFxuICAgIH07XG59XG5cbmV4cG9ydCB7IGFuaW1hdGUgfTtcbiIsImltcG9ydCB7IGNyZWF0ZVByb2plY3Rpb25Ob2RlIH0gZnJvbSAnLi9jcmVhdGUtcHJvamVjdGlvbi1ub2RlLm1qcyc7XG5pbXBvcnQgeyBhZGREb21FdmVudCB9IGZyb20gJy4uLy4uL2V2ZW50cy91c2UtZG9tLWV2ZW50Lm1qcyc7XG5cbnZhciBEb2N1bWVudFByb2plY3Rpb25Ob2RlID0gY3JlYXRlUHJvamVjdGlvbk5vZGUoe1xuICAgIGF0dGFjaFJlc2l6ZUxpc3RlbmVyOiBmdW5jdGlvbiAocmVmLCBub3RpZnkpIHsgcmV0dXJuIGFkZERvbUV2ZW50KHJlZiwgXCJyZXNpemVcIiwgbm90aWZ5KTsgfSxcbiAgICBtZWFzdXJlU2Nyb2xsOiBmdW5jdGlvbiAoKSB7IHJldHVybiAoe1xuICAgICAgICB4OiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQsXG4gICAgICAgIHk6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AsXG4gICAgfSk7IH0sXG4gICAgY2hlY2tJc1Njcm9sbFJvb3Q6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH0sXG59KTtcblxuZXhwb3J0IHsgRG9jdW1lbnRQcm9qZWN0aW9uTm9kZSB9O1xuIiwiaW1wb3J0IHsgY3JlYXRlUHJvamVjdGlvbk5vZGUgfSBmcm9tICcuL2NyZWF0ZS1wcm9qZWN0aW9uLW5vZGUubWpzJztcbmltcG9ydCB7IERvY3VtZW50UHJvamVjdGlvbk5vZGUgfSBmcm9tICcuL0RvY3VtZW50UHJvamVjdGlvbk5vZGUubWpzJztcblxudmFyIHJvb3RQcm9qZWN0aW9uTm9kZSA9IHtcbiAgICBjdXJyZW50OiB1bmRlZmluZWQsXG59O1xudmFyIEhUTUxQcm9qZWN0aW9uTm9kZSA9IGNyZWF0ZVByb2plY3Rpb25Ob2RlKHtcbiAgICBtZWFzdXJlU2Nyb2xsOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHsgcmV0dXJuICh7XG4gICAgICAgIHg6IGluc3RhbmNlLnNjcm9sbExlZnQsXG4gICAgICAgIHk6IGluc3RhbmNlLnNjcm9sbFRvcCxcbiAgICB9KTsgfSxcbiAgICBkZWZhdWx0UGFyZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghcm9vdFByb2plY3Rpb25Ob2RlLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHZhciBkb2N1bWVudE5vZGUgPSBuZXcgRG9jdW1lbnRQcm9qZWN0aW9uTm9kZSgwLCB7fSk7XG4gICAgICAgICAgICBkb2N1bWVudE5vZGUubW91bnQod2luZG93KTtcbiAgICAgICAgICAgIGRvY3VtZW50Tm9kZS5zZXRPcHRpb25zKHsgbGF5b3V0U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICAgICAgcm9vdFByb2plY3Rpb25Ob2RlLmN1cnJlbnQgPSBkb2N1bWVudE5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvb3RQcm9qZWN0aW9uTm9kZS5jdXJyZW50O1xuICAgIH0sXG4gICAgcmVzZXRUcmFuc2Zvcm06IGZ1bmN0aW9uIChpbnN0YW5jZSwgdmFsdWUpIHtcbiAgICAgICAgaW5zdGFuY2Uuc3R5bGUudHJhbnNmb3JtID0gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHZvaWQgMCA/IHZhbHVlIDogXCJub25lXCI7XG4gICAgfSxcbiAgICBjaGVja0lzU2Nyb2xsUm9vdDogZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGluc3RhbmNlKS5wb3NpdGlvbiA9PT0gXCJmaXhlZFwiKTtcbiAgICB9LFxufSk7XG5cbmV4cG9ydCB7IEhUTUxQcm9qZWN0aW9uTm9kZSwgcm9vdFByb2plY3Rpb25Ob2RlIH07XG4iLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IGNyZWF0ZU1vdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vdGlvbi9pbmRleC5tanMnO1xuaW1wb3J0IHsgY3JlYXRlTW90aW9uUHJveHkgfSBmcm9tICcuL21vdGlvbi1wcm94eS5tanMnO1xuaW1wb3J0IHsgY3JlYXRlRG9tTW90aW9uQ29uZmlnIH0gZnJvbSAnLi91dGlscy9jcmVhdGUtY29uZmlnLm1qcyc7XG5pbXBvcnQgeyBnZXN0dXJlQW5pbWF0aW9ucyB9IGZyb20gJy4uLy4uL21vdGlvbi9mZWF0dXJlcy9nZXN0dXJlcy5tanMnO1xuaW1wb3J0IHsgYW5pbWF0aW9ucyB9IGZyb20gJy4uLy4uL21vdGlvbi9mZWF0dXJlcy9hbmltYXRpb25zLm1qcyc7XG5pbXBvcnQgeyBkcmFnIH0gZnJvbSAnLi4vLi4vbW90aW9uL2ZlYXR1cmVzL2RyYWcubWpzJztcbmltcG9ydCB7IGNyZWF0ZURvbVZpc3VhbEVsZW1lbnQgfSBmcm9tICcuL2NyZWF0ZS12aXN1YWwtZWxlbWVudC5tanMnO1xuaW1wb3J0IHsgbGF5b3V0RmVhdHVyZXMgfSBmcm9tICcuLi8uLi9tb3Rpb24vZmVhdHVyZXMvbGF5b3V0L2luZGV4Lm1qcyc7XG5pbXBvcnQgeyBIVE1MUHJvamVjdGlvbk5vZGUgfSBmcm9tICcuLi8uLi9wcm9qZWN0aW9uL25vZGUvSFRNTFByb2plY3Rpb25Ob2RlLm1qcyc7XG5cbnZhciBmZWF0dXJlQnVuZGxlID0gX19hc3NpZ24oX19hc3NpZ24oX19hc3NpZ24oX19hc3NpZ24oe30sIGFuaW1hdGlvbnMpLCBnZXN0dXJlQW5pbWF0aW9ucyksIGRyYWcpLCBsYXlvdXRGZWF0dXJlcyk7XG4vKipcbiAqIEhUTUwgJiBTVkcgY29tcG9uZW50cywgb3B0aW1pc2VkIGZvciB1c2Ugd2l0aCBnZXN0dXJlcyBhbmQgYW5pbWF0aW9uLiBUaGVzZSBjYW4gYmUgdXNlZCBhc1xuICogZHJvcC1pbiByZXBsYWNlbWVudHMgZm9yIGFueSBIVE1MICYgU1ZHIGNvbXBvbmVudCwgYWxsIENTUyAmIFNWRyBwcm9wZXJ0aWVzIGFyZSBzdXBwb3J0ZWQuXG4gKlxuICogQHB1YmxpY1xuICovXG52YXIgbW90aW9uID0gLypAX19QVVJFX18qLyBjcmVhdGVNb3Rpb25Qcm94eShmdW5jdGlvbiAoQ29tcG9uZW50LCBjb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlRG9tTW90aW9uQ29uZmlnKENvbXBvbmVudCwgY29uZmlnLCBmZWF0dXJlQnVuZGxlLCBjcmVhdGVEb21WaXN1YWxFbGVtZW50LCBIVE1MUHJvamVjdGlvbk5vZGUpO1xufSk7XG4vKipcbiAqIENyZWF0ZSBhIERPTSBgbW90aW9uYCBjb21wb25lbnQgd2l0aCB0aGUgcHJvdmlkZWQgc3RyaW5nLiBUaGlzIGlzIHByaW1hcmlseSBpbnRlbmRlZFxuICogYXMgYSBmdWxsIGFsdGVybmF0aXZlIHRvIGBtb3Rpb25gIGZvciBjb25zdW1lcnMgd2hvIGhhdmUgdG8gc3VwcG9ydCBlbnZpcm9ubWVudHMgdGhhdCBkb24ndFxuICogc3VwcG9ydCBgUHJveHlgLlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IGNyZWF0ZURvbU1vdGlvbkNvbXBvbmVudCB9IGZyb20gXCJmcmFtZXItbW90aW9uXCJcbiAqXG4gKiBjb25zdCBtb3Rpb24gPSB7XG4gKiAgIGRpdjogY3JlYXRlRG9tTW90aW9uQ29tcG9uZW50KCdkaXYnKVxuICogfVxuICogYGBgXG4gKlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBjcmVhdGVEb21Nb3Rpb25Db21wb25lbnQoa2V5KSB7XG4gICAgcmV0dXJuIGNyZWF0ZU1vdGlvbkNvbXBvbmVudChjcmVhdGVEb21Nb3Rpb25Db25maWcoa2V5LCB7IGZvcndhcmRNb3Rpb25Qcm9wczogZmFsc2UgfSwgZmVhdHVyZUJ1bmRsZSwgY3JlYXRlRG9tVmlzdWFsRWxlbWVudCwgSFRNTFByb2plY3Rpb25Ob2RlKSk7XG59XG5cbmV4cG9ydCB7IGNyZWF0ZURvbU1vdGlvbkNvbXBvbmVudCwgbW90aW9uIH07XG4iLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IGlzU1ZHQ29tcG9uZW50IH0gZnJvbSAnLi9pcy1zdmctY29tcG9uZW50Lm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVVc2VSZW5kZXIgfSBmcm9tICcuLi91c2UtcmVuZGVyLm1qcyc7XG5pbXBvcnQgeyBzdmdNb3Rpb25Db25maWcgfSBmcm9tICcuLi8uLi9zdmcvY29uZmlnLW1vdGlvbi5tanMnO1xuaW1wb3J0IHsgaHRtbE1vdGlvbkNvbmZpZyB9IGZyb20gJy4uLy4uL2h0bWwvY29uZmlnLW1vdGlvbi5tanMnO1xuXG5mdW5jdGlvbiBjcmVhdGVEb21Nb3Rpb25Db25maWcoQ29tcG9uZW50LCBfYSwgcHJlbG9hZGVkRmVhdHVyZXMsIGNyZWF0ZVZpc3VhbEVsZW1lbnQsIHByb2plY3Rpb25Ob2RlQ29uc3RydWN0b3IpIHtcbiAgICB2YXIgX2IgPSBfYS5mb3J3YXJkTW90aW9uUHJvcHMsIGZvcndhcmRNb3Rpb25Qcm9wcyA9IF9iID09PSB2b2lkIDAgPyBmYWxzZSA6IF9iO1xuICAgIHZhciBiYXNlQ29uZmlnID0gaXNTVkdDb21wb25lbnQoQ29tcG9uZW50KVxuICAgICAgICA/IHN2Z01vdGlvbkNvbmZpZ1xuICAgICAgICA6IGh0bWxNb3Rpb25Db25maWc7XG4gICAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCBiYXNlQ29uZmlnKSwgeyBwcmVsb2FkZWRGZWF0dXJlczogcHJlbG9hZGVkRmVhdHVyZXMsIHVzZVJlbmRlcjogY3JlYXRlVXNlUmVuZGVyKGZvcndhcmRNb3Rpb25Qcm9wcyksIGNyZWF0ZVZpc3VhbEVsZW1lbnQ6IGNyZWF0ZVZpc3VhbEVsZW1lbnQsIHByb2plY3Rpb25Ob2RlQ29uc3RydWN0b3I6IHByb2plY3Rpb25Ob2RlQ29uc3RydWN0b3IsIENvbXBvbmVudDogQ29tcG9uZW50IH0pO1xufVxuXG5leHBvcnQgeyBjcmVhdGVEb21Nb3Rpb25Db25maWcgfTtcbiIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwicmVhY3QtZG9tXCIpOyIsImV4cG9ydCBjb25zdCBBcHBQYXRocyA9IHtcbiAgU0hPV1JPT006IFwiL3Nob3dyb29tXCIsXG4gIFNFTkRPVVRTOiBcIi9zZW5kb3V0c1wiLFxuICBTRU5ET1VUU19DTVM6IFwiL3NlbmRvdXRzLWNtc1wiLFxuICBNQVJLRVRJTkdfRU5HSU5FOiBcIi9tZWRpYVwiLFxuICBVU0VSX01BTkFHRU1FTlQ6IFwiL3VzZXJzXCIsXG4gIFRFTkFOVFM6IFwiL3RlbmFudHNcIixcbiAgREFTSEJPQVJEOiBcIi9kYXNoYm9hcmRcIixcbiAgREFTSEJPQVJEX0NSRUFURV9XT1JLU1BBQ0VfTU9EQUw6IFwiL2Rhc2hib2FyZC9jcmVhdGUtd29ya3NwYWNlXCIsXG59O1xuXG5leHBvcnQgY29uc3QgVEVOQU5UU19USUVSX1dJRFRIID0gMzAwO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OU19USUVSX1dJRFRIID0gMzAwO1xuIiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJAdG91Y2h0ZWNoL3dlYi1hdXRoXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiQHRvdWNodGVjaC93ZWItdGVuYW50LWlkLXByb3ZpZGVyXCIpOyIsImltcG9ydCBSZWFjdCwge1xuICB1c2VDYWxsYmFjayxcbiAgdXNlQ29udGV4dCxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEF1dGhDb250ZXh0LCBQcml2aWxlZ2VzLCB1c2VySGFzQWNjZXNzIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWF1dGhcIjtcbmltcG9ydCB7IFRlbmFudElkQ29udGV4dCB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi10ZW5hbnQtaWQtcHJvdmlkZXJcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBvbk5hdmlnYXRpb25DbG9zZT86ICgpID0+IHZvaWQ7XG59O1xuXG50eXBlIE5hdmlnYXRpb25WaWV3U3RhdGUgPSB7XG4gIHNlbGVjdGVkVGVuYW50SWQ6IHN0cmluZztcbiAgY3VycmVudFBvc2l0aW9uOiBOYXZpZ2F0aW9uUG9zaXRpb247XG59O1xuXG5leHBvcnQgdHlwZSBOYXZpZ2F0aW9uQ29udGV4dFZhbHVlID0ge1xuICBoYXNNYXJrZXRpbmdFbmdpbmVBY2Nlc3M6IGJvb2xlYW47XG4gIGhhc1Nob3dyb29tQWNjZXNzOiBib29sZWFuO1xuICBoYXNTZW5kb3V0c0FjY2VzczogYm9vbGVhbjtcbiAgaGFzU2VuZG91dHNDbXNBY2Nlc3M6IGJvb2xlYW47XG4gIGhhc1VzZXJNYW5hZ2VtZW50QWNjZXNzOiBib29sZWFuO1xuICB2aWV3U3RhdGU6IE5hdmlnYXRpb25WaWV3U3RhdGU7XG4gIHVwZGF0ZVZpZXdTdGF0ZTogKHZpZXdTdGF0ZVVwZGF0ZTogUGFydGlhbDxOYXZpZ2F0aW9uVmlld1N0YXRlPikgPT4gdm9pZDtcbiAgc2lnbk91dDogKCkgPT4gdm9pZDtcbiAgdG9nZ2xlVGVuYW50czogKCkgPT4gdm9pZDtcbiAgb25OYXZpZ2F0aW9uQ2xvc2U6ICgpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgZW51bSBOYXZpZ2F0aW9uUG9zaXRpb24ge1xuICBPUEVOID0gXCJPUEVOXCIsXG4gIEhJRERFTiA9IFwiSElEREVOXCIsXG4gIEVYUEFOREVEID0gXCJFWFBBTkRFRFwiLFxufVxuXG5leHBvcnQgY29uc3QgTmF2aWdhdGlvbkNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PE5hdmlnYXRpb25Db250ZXh0VmFsdWU+KFxuICB7fSBhcyBOYXZpZ2F0aW9uQ29udGV4dFZhbHVlXG4pO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlTmF2aWdhdGlvbkNvbnRleHQoKSB7XG4gIHJldHVybiB1c2VDb250ZXh0KE5hdmlnYXRpb25Db250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE5hdmlnYXRpb25Db250ZXh0UHJvdmlkZXIoe1xuICBjaGlsZHJlbixcbiAgaXNPcGVuLFxuICBvbk5hdmlnYXRpb25DbG9zZSA9ICgpID0+IHt9LFxufTogUHJvcHMpIHtcbiAgY29uc3QgW3RlbmFudElkXSA9IHVzZUNvbnRleHQoVGVuYW50SWRDb250ZXh0KTtcbiAgY29uc3QgW3ZpZXdTdGF0ZSwgc2V0Vmlld1N0YXRlXSA9IHVzZVN0YXRlPE5hdmlnYXRpb25WaWV3U3RhdGU+KHtcbiAgICBzZWxlY3RlZFRlbmFudElkOiB0ZW5hbnRJZCBhcyBzdHJpbmcsXG4gICAgY3VycmVudFBvc2l0aW9uOiBOYXZpZ2F0aW9uUG9zaXRpb24uSElEREVOLFxuICB9KTtcblxuICBjb25zdCB7IHVzZXIsIGF1dGhTZXJ2aWNlLCBjYW5TaWduT3V0IH0gPSB1c2VDb250ZXh0KEF1dGhDb250ZXh0KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc09wZW4pIHtcbiAgICAgIHNldFZpZXdTdGF0ZSgocHJldlZpZXdTdGF0ZSkgPT4gKHtcbiAgICAgICAgLi4ucHJldlZpZXdTdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRUZW5hbnRJZDogdGVuYW50SWQgYXMgc3RyaW5nLFxuICAgICAgICBjdXJyZW50UG9zaXRpb246IE5hdmlnYXRpb25Qb3NpdGlvbi5PUEVOLFxuICAgICAgfSkpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0Vmlld1N0YXRlKChwcmV2Vmlld1N0YXRlKSA9PiAoe1xuICAgICAgLi4ucHJldlZpZXdTdGF0ZSxcbiAgICAgIGN1cnJlbnRQb3NpdGlvbjogTmF2aWdhdGlvblBvc2l0aW9uLkhJRERFTixcbiAgICB9KSk7XG4gIH0sIFt0ZW5hbnRJZCwgaXNPcGVuLCBzZXRWaWV3U3RhdGVdKTtcblxuICAvLyByZWZyZXNoIHRoZSB0b2tlbiB0byBnZXQgdGhlIHBvc3NpYmx5IHVwZGF0ZWQgcHJpdmlsZWdlcy9hcHBzL3RlbmFudHMgd2l0aFxuICAvLyBjb29sZG93biBvZiA1IG1pbnV0ZXMgdG8gbm90IHRyaWdnZXIgcmVmcmVzaCB0b2tlbiBvbiBldmVyeSBuYXZpZ2F0aW9uIG9wZW5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNPcGVuKSB7XG4gICAgICBhdXRoU2VydmljZS5yZWZyZXNoVXNlcigzMDApO1xuICAgIH1cbiAgfSwgW2F1dGhTZXJ2aWNlLCBpc09wZW5dKTtcblxuICBjb25zdCBoYXNNYXJrZXRpbmdFbmdpbmVBY2Nlc3MgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICB1c2VyXG4gICAgICAgID8gdXNlckhhc0FjY2VzcyhcbiAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICB2aWV3U3RhdGUuc2VsZWN0ZWRUZW5hbnRJZCxcbiAgICAgICAgICAgIFByaXZpbGVnZXMuTUFSS0VUSU5HX0VOR0lORV9BUFBcbiAgICAgICAgICApXG4gICAgICAgIDogZmFsc2UsXG4gICAgW3ZpZXdTdGF0ZS5zZWxlY3RlZFRlbmFudElkLCB1c2VyXVxuICApO1xuXG4gIGNvbnN0IGhhc1Nob3dyb29tQWNjZXNzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgdXNlclxuICAgICAgICA/IHVzZXJIYXNBY2Nlc3MoXG4gICAgICAgICAgICB1c2VyLFxuICAgICAgICAgICAgdmlld1N0YXRlLnNlbGVjdGVkVGVuYW50SWQsXG4gICAgICAgICAgICBQcml2aWxlZ2VzLlNIT1dST09NX0FQUFxuICAgICAgICAgIClcbiAgICAgICAgOiBmYWxzZSxcbiAgICBbdmlld1N0YXRlLnNlbGVjdGVkVGVuYW50SWQsIHVzZXJdXG4gICk7XG5cbiAgY29uc3QgaGFzU2VuZG91dHNBY2Nlc3MgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICB1c2VyXG4gICAgICAgID8gdXNlckhhc0FjY2VzcyhcbiAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICB2aWV3U3RhdGUuc2VsZWN0ZWRUZW5hbnRJZCxcbiAgICAgICAgICAgIFByaXZpbGVnZXMuU0VORE9VVFNfQVBQXG4gICAgICAgICAgKVxuICAgICAgICA6IGZhbHNlLFxuICAgIFt2aWV3U3RhdGUuc2VsZWN0ZWRUZW5hbnRJZCwgdXNlcl1cbiAgKTtcblxuICBjb25zdCBoYXNTZW5kb3V0c0Ntc0FjY2VzcyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHVzZXJcbiAgICAgICAgPyB1c2VySGFzQWNjZXNzKFxuICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICAgIHZpZXdTdGF0ZS5zZWxlY3RlZFRlbmFudElkLFxuICAgICAgICAgICAgUHJpdmlsZWdlcy5TRU5ET1VUU19DTVNfQVBQXG4gICAgICAgICAgKVxuICAgICAgICA6IGZhbHNlLFxuICAgIFt2aWV3U3RhdGUuc2VsZWN0ZWRUZW5hbnRJZCwgdXNlcl1cbiAgKTtcblxuICBjb25zdCBoYXNVc2VyTWFuYWdlbWVudEFjY2VzcyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHVzZXJcbiAgICAgICAgPyB1c2VySGFzQWNjZXNzKFxuICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICAgIHZpZXdTdGF0ZS5zZWxlY3RlZFRlbmFudElkLFxuICAgICAgICAgICAgUHJpdmlsZWdlcy5VU0VSX01BTkFHRU1FTlRfQVBQXG4gICAgICAgICAgKVxuICAgICAgICA6IGZhbHNlLFxuICAgIFt2aWV3U3RhdGUuc2VsZWN0ZWRUZW5hbnRJZCwgdXNlcl1cbiAgKTtcblxuICBjb25zdCB1cGRhdGVWaWV3U3RhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAodmlld1N0YXRlVXBkYXRlOiBQYXJ0aWFsPE5hdmlnYXRpb25WaWV3U3RhdGU+KSA9PlxuICAgICAgc2V0Vmlld1N0YXRlKChwcmV2Vmlld1N0YXRlKSA9PiAoe1xuICAgICAgICAuLi5wcmV2Vmlld1N0YXRlLFxuICAgICAgICAuLi52aWV3U3RhdGVVcGRhdGUsXG4gICAgICB9KSksXG4gICAgW11cbiAgKTtcblxuICBjb25zdCBzaWduT3V0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmIChjYW5TaWduT3V0KSB7XG4gICAgICBhd2FpdCBhdXRoU2VydmljZS5zaWduT3V0KCk7XG4gICAgfVxuICB9LCBbYXV0aFNlcnZpY2UsIGNhblNpZ25PdXRdKTtcblxuICBjb25zdCB0b2dnbGVUZW5hbnRzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICh2aWV3U3RhdGUuY3VycmVudFBvc2l0aW9uID09PSBOYXZpZ2F0aW9uUG9zaXRpb24uT1BFTikge1xuICAgICAgdXBkYXRlVmlld1N0YXRlKHtcbiAgICAgICAgY3VycmVudFBvc2l0aW9uOiBOYXZpZ2F0aW9uUG9zaXRpb24uRVhQQU5ERUQsXG4gICAgICAgIHNlbGVjdGVkVGVuYW50SWQ6IHRlbmFudElkIGFzIHN0cmluZyxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2aWV3U3RhdGUuY3VycmVudFBvc2l0aW9uID09PSBOYXZpZ2F0aW9uUG9zaXRpb24uRVhQQU5ERUQpIHtcbiAgICAgIHVwZGF0ZVZpZXdTdGF0ZSh7IGN1cnJlbnRQb3NpdGlvbjogTmF2aWdhdGlvblBvc2l0aW9uLk9QRU4gfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9LCBbdGVuYW50SWQsIHVwZGF0ZVZpZXdTdGF0ZSwgdmlld1N0YXRlLmN1cnJlbnRQb3NpdGlvbl0pO1xuXG4gIGNvbnN0IGN0eCA9IHVzZU1lbW88TmF2aWdhdGlvbkNvbnRleHRWYWx1ZT4oXG4gICAgKCkgPT4gKHtcbiAgICAgIGhhc01hcmtldGluZ0VuZ2luZUFjY2VzcyxcbiAgICAgIGhhc1Nob3dyb29tQWNjZXNzLFxuICAgICAgaGFzU2VuZG91dHNBY2Nlc3MsXG4gICAgICBoYXNTZW5kb3V0c0Ntc0FjY2VzcyxcbiAgICAgIGhhc1VzZXJNYW5hZ2VtZW50QWNjZXNzLFxuICAgICAgdmlld1N0YXRlLFxuICAgICAgdXBkYXRlVmlld1N0YXRlLFxuICAgICAgc2lnbk91dCxcbiAgICAgIHRvZ2dsZVRlbmFudHMsXG4gICAgICBvbk5hdmlnYXRpb25DbG9zZSxcbiAgICB9KSxcbiAgICBbXG4gICAgICBoYXNNYXJrZXRpbmdFbmdpbmVBY2Nlc3MsXG4gICAgICBoYXNTZW5kb3V0c0FjY2VzcyxcbiAgICAgIGhhc1NlbmRvdXRzQ21zQWNjZXNzLFxuICAgICAgaGFzU2hvd3Jvb21BY2Nlc3MsXG4gICAgICBoYXNVc2VyTWFuYWdlbWVudEFjY2VzcyxcbiAgICAgIHZpZXdTdGF0ZSxcbiAgICAgIHVwZGF0ZVZpZXdTdGF0ZSxcbiAgICAgIHNpZ25PdXQsXG4gICAgICB0b2dnbGVUZW5hbnRzLFxuICAgICAgb25OYXZpZ2F0aW9uQ2xvc2UsXG4gICAgXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPE5hdmlnYXRpb25Db250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjdHh9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvTmF2aWdhdGlvbkNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm5hdmlnYXRpb25cIjpcInRLeWdRNExNRGlrSHM1SHNoMFFrXCJ9OyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiQHRvdWNodGVjaC9iYXNlbGF5ZXItdWlcIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJzd3JcIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJAdG91Y2h0ZWNoL3dlYi1hcGktY2xpZW50XCIpOyIsImltcG9ydCB1c2VTV1IgZnJvbSBcInN3clwiO1xuXG5pbXBvcnQgeyBjcmVhdGVVcmwsIHVzZUFwaSB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1hcGktY2xpZW50XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUZW5hbnRzVmlld1VybCgpIHtcbiAgY29uc3QgYmFzZVVybCA9XG4gICAgcHJvY2Vzcy5lbnYuVEVOQU5UU19TRVJWSUNFX1VSTCA/P1xuICAgIHByb2Nlc3MuZW52LlJFQUNUX0FQUF9URU5BTlRTX1NFUlZJQ0VfVVJMO1xuXG4gIGlmICghYmFzZVVybCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiVEVOQU5UU19TRVJWSUNFX1VSTCBvciBSRUFDVF9BUFBfVEVOQU5UU19TRVJWSUNFX1VSTCBtdXN0IGJlIHNldFwiXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVVcmwoYmFzZVVybCwgXCIvYXBpL1RlbmFudHMvdmlld1wiKTtcbn1cblxuZXhwb3J0IHR5cGUgVGVuYW50ID0ge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBsb2dvVXJsOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTdGF0ZSA9IHtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBlcnJvcj86IEVycm9yO1xuICB0ZW5hbnRzOiBBcnJheTxUZW5hbnQ+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVGVuYW50cygpOiBTdGF0ZSB7XG4gIGNvbnN0IGFwaSA9IHVzZUFwaSgpO1xuICBjb25zdCB1cmwgPSBjcmVhdGVUZW5hbnRzVmlld1VybCgpO1xuXG4gIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IHVzZVNXUih1cmwsIGFwaS5nZXQpO1xuXG4gIHJldHVybiB7XG4gICAgdGVuYW50czogKGRhdGEgPz8gW10pIGFzIEFycmF5PFRlbmFudD4sXG4gICAgaXNMb2FkaW5nOiAhZGF0YSAmJiAhZXJyb3IsXG4gICAgZXJyb3IsXG4gIH07XG59XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBJbWFnZSwgSW1hZ2VQcm9wcyB9IGZyb20gXCJAdG91Y2h0ZWNoL2Jhc2VsYXllci11aVwiO1xuXG5pbXBvcnQgdXNlVGVuYW50cyBmcm9tIFwiLi4vLi4vLi4vaG9va3MvdXNlVGVuYW50c1wiO1xuaW1wb3J0IHsgdXNlTmF2aWdhdGlvbkNvbnRleHQgfSBmcm9tIFwiLi4vQ29udGV4dFwiO1xuXG50eXBlIFByb3BzID0ge1xuICBsYXlvdXQ/OiBJbWFnZVByb3BzW1wibGF5b3V0XCJdO1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIExvZ28oeyBsYXlvdXQgfTogUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIHZpZXdTdGF0ZTogeyBzZWxlY3RlZFRlbmFudElkIH0sXG4gIH0gPSB1c2VOYXZpZ2F0aW9uQ29udGV4dCgpO1xuXG4gIGNvbnN0IHsgdGVuYW50cyB9ID0gdXNlVGVuYW50cygpO1xuXG4gIGNvbnN0IHRlbmFudCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gdGVuYW50cy5maW5kKCh0ZW5hbnQpID0+IHRlbmFudC5pZCA9PT0gc2VsZWN0ZWRUZW5hbnRJZCksXG4gICAgW3NlbGVjdGVkVGVuYW50SWQsIHRlbmFudHNdXG4gICk7XG5cbiAgaWYgKCF0ZW5hbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiA8SW1hZ2Ugc3JjPXt0ZW5hbnQubG9nb1VybH0gbGF5b3V0PXtsYXlvdXR9IC8+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBMb2dvO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2MobmFtZXMpIHtcbiAgaWYgKHR5cGVvZiBuYW1lcyA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgbmFtZXMgPT09IFwibnVtYmVyXCIpIHJldHVybiBcIlwiICsgbmFtZXNcblxuICBsZXQgb3V0ID0gXCJcIlxuXG4gIGlmIChBcnJheS5pc0FycmF5KG5hbWVzKSkge1xuICAgIGZvciAobGV0IGkgPSAwLCB0bXA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCh0bXAgPSBjYyhuYW1lc1tpXSkpICE9PSBcIlwiKSB7XG4gICAgICAgIG91dCArPSAob3V0ICYmIFwiIFwiKSArIHRtcFxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGxldCBrIGluIG5hbWVzKSB7XG4gICAgICBpZiAobmFtZXNba10pIG91dCArPSAob3V0ICYmIFwiIFwiKSArIGtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0XG59XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRpZXJcIjpcImFsa3hqWnZUZ0Fjc3owSlJrbTZjXCIsXCJoaWRkZW5cIjpcInFPV1FiMEJDX210V21Ed3ZmaTZaXCIsXCJ0aWVySGVhZGVyXCI6XCJwNEpQYjREem1Hb1pPSWhPMDl3c1wiLFwiYm9yZGVyXCI6XCJ4MF9WRjNCWGJXVXRsQ0NnT3RRWlwiLFwidGllck1haW5cIjpcImpXUEJadThpTER5eVRuNmVXNmt3XCIsXCJ0aWVyRm9vdGVyXCI6XCJnYjZ0ODJ4cFpVN3lta1VkU3V4X1wifTsiLCJpbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBjc3MgZnJvbSBcIi4vVGllci5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xuICBoZWFkZXI/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIHNob3dIZWFkZXJCb3JkZXI/OiBib29sZWFuO1xuICBmb290ZXI/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgd2lkdGg/OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBUaWVyKHtcbiAgY2hpbGRyZW4sXG4gIGhlYWRlcixcbiAgZm9vdGVyLFxuICBjbGFzc05hbWUsXG4gIHdpZHRoLFxuICBzaG93SGVhZGVyQm9yZGVyLFxufTogUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW2Nzcy50aWVyLCBjbGFzc05hbWVdKX0gc3R5bGU9e3sgd2lkdGggfX0+XG4gICAgICB7ISFoZWFkZXIgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBjc3MudGllckhlYWRlcixcbiAgICAgICAgICAgIHsgW2Nzcy5ib3JkZXJdOiBzaG93SGVhZGVyQm9yZGVyIH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgID5cbiAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLnRpZXJNYWlufT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICB7ISFmb290ZXIgJiYgPGRpdiBjbGFzc05hbWU9e2Nzcy50aWVyRm9vdGVyfT57Zm9vdGVyfTwvZGl2Pn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGllcjtcbiIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwicmVhY3Qtcm91dGVyLWRvbVwiKTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm5hdmlnYXRpb25CdXR0b25cIjpcIlJ1WXlVNFpVOTgySUJnZGIxTnIyXCIsXCJhY3RpdmVcIjpcIm1EVlBDNDUyc0laMUFaMTJIdXB1XCJ9OyIsImltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgbWF0Y2hQYXRoIH0gZnJvbSBcInJlYWN0LXJvdXRlci1kb21cIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIkB0b3VjaHRlY2gvYmFzZWxheWVyLXVpXCI7XG5pbXBvcnQgeyBUZW5hbnRJZENvbnRleHQgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItdGVuYW50LWlkLXByb3ZpZGVyXCI7XG5cbmltcG9ydCB7IHVzZU5hdmlnYXRpb25Db250ZXh0IH0gZnJvbSBcIi4uLy4uLy4uL0NvbnRleHRcIjtcbmltcG9ydCBjc3MgZnJvbSBcIi4vQXBwbGljYXRpb25MaW5rLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY2hpbGRyZW46IHN0cmluZztcbiAgdG86IHN0cmluZztcbiAgaGlkZGVuPzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIEFwcGxpY2F0aW9uTGluayh7IGNoaWxkcmVuLCB0bywgaGlkZGVuIH06IFByb3BzKSB7XG4gIGNvbnN0IFtjdXJyZW50VGVuYW50SWQsIHNldEN1cnJlbnRUZW5hbnRJZF0gPSB1c2VDb250ZXh0KFRlbmFudElkQ29udGV4dCk7XG4gIGNvbnN0IFtpc1JlZGlyZWN0aW5nLCBzZXRJc1JlZGlyZWN0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCB7XG4gICAgdmlld1N0YXRlOiB7IHNlbGVjdGVkVGVuYW50SWQgfSxcbiAgfSA9IHVzZU5hdmlnYXRpb25Db250ZXh0KCk7XG5cbiAgLyoqXG4gICAqIFdvcmthcm91bmQgZm9yOlxuICAgKlxuICAgKiBVc2VyIEEgaGFzIGFjY2VzcyB0byB0ZW5hbnRzOiAxIChVc2VycyBhcHAgb25seSkgYW5kIDIgKE1lZGlhIGxpYnJhcnkgYXBwIG9ubHkpXG4gICAqXG4gICAqIFVzZXIgQSBpcyBsb2dnZWQgaW4gdG8gVXNlcnMgYXBwICh0ZW5hbnQgMSkgYW5kIG5hdmlnYXRlcyB0byBNZWRpYSBsaWJyYXJ5IGFwcCAodGVuYW50IDIpXG4gICAqIGJ5IHNlbGVjdGluZyBjb3JyZXNwb25kaW5nIHRlbmFudCAoMikgYW5kIGF2YWlsYWJsZSBhcHAgKE1lZGlhIGxpYnJhcnkpIGluIHRoZSBuYXZpZ2F0aW9uIG1lbnVcbiAgICpcbiAgICogVXNlciBBIGVuZHMgdXAgaW4gVGVuYW50cyBwaWNrZXIgcGFnZSBiZWNhdXNlIG9mIFByb3RlY3RlZCByb3V0ZSBpbiB0aGUgcGFyZW50IGFwcCAoVXNlcnMgYXBwKVxuICAgKiB0aGF0IHJlZGlyZWN0cyB0byB1bmF1dGhvcml6ZWRVcmwgKFRlbmFudHMgcGlja2VyIHBhZ2UpIGlmIHVzZXIgZG9lc24ndCBoYXZlIGFjY2VzcyB0byB0aGUgYXBwXG4gICAqIGhlIGlzIGN1cnJlbnRseSBpbiAoVXNlcnMgYXBwIG9mIHRlbmFudCAxKVxuICAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVVbmxvYWQgPSAoKSA9PiB7XG4gICAgICBpZiAoY3VycmVudFRlbmFudElkICE9PSBzZWxlY3RlZFRlbmFudElkICYmIGlzUmVkaXJlY3RpbmcpIHtcbiAgICAgICAgc2V0Q3VycmVudFRlbmFudElkKHNlbGVjdGVkVGVuYW50SWQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyB1bmxvYWQgZXZlbnQgaXMgZmlyZWQgd2hlbiB3aW5kb3cuYXNzaWduIGlzIGNhbGxlZFxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidW5sb2FkXCIsIGhhbmRsZVVubG9hZCk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ1bmxvYWRcIiwgaGFuZGxlVW5sb2FkKTtcbiAgICB9O1xuICB9LCBbc2V0Q3VycmVudFRlbmFudElkLCBjdXJyZW50VGVuYW50SWQsIHNlbGVjdGVkVGVuYW50SWQsIGlzUmVkaXJlY3RpbmddKTtcblxuICBjb25zdCBoYW5kbGVDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRJc1JlZGlyZWN0aW5nKHRydWUpO1xuICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odG8pO1xuICB9LCBbdG9dKTtcblxuICBjb25zdCBpc0FjdGl2ZSA9XG4gICAgISFtYXRjaFBhdGgoYCR7dG99LypgLCB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpICYmXG4gICAgY3VycmVudFRlbmFudElkID09PSBzZWxlY3RlZFRlbmFudElkO1xuXG4gIHJldHVybiAhaGlkZGVuID8gKFxuICAgIDxCdXR0b25cbiAgICAgIGFsaWduPVwibGVmdFwiXG4gICAgICBub0JvcmRlclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbY3NzLm5hdmlnYXRpb25CdXR0b24sIHsgW2Nzcy5hY3RpdmVdOiBpc0FjdGl2ZSB9XSl9XG4gICAgICBub1NoYWRvd1xuICAgICAgZGlzYWJsZWQ9e2lzQWN0aXZlfVxuICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2t9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQnV0dG9uPlxuICApIDogbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQXBwbGljYXRpb25MaW5rO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJhcHBsaWNhdGlvbnNcIjpcInhxMk5oTTlCRWlfVzRud1QzeWgyXCIsXCJhcHBsaWNhdGlvbnNIZWFkZXJcIjpcIkJHakV0Vmo0cl9HTDFYUlBnZ2RLXCIsXCJhcHBsaWNhdGlvbnNIZWFkZXJCcmFuZFwiOlwiVmFvUzlzWFRFQ0FUdjVBbGhlV0FcIixcImFwcGxpY2F0aW9uc0hlYWRlckxvZ29cIjpcIld1VHJHejNVVTNwSDFmVlRpQ1RaXCIsXCJhcHBsaWNhdGlvbnNIZWFkZXJDbG9zZUljb25cIjpcIkNvaDJERnJDTllxanVIX3I3TXZHXCIsXCJhcHBsaWNhdGlvbnNIZWFkZXJDaGFuZ2VCcmFuZEJ1dHRvblwiOlwiTU9YOUlCMG5TeDVjZkxIcmNvT1pcIixcImFwcGxpY2F0aW9uc01haW5cIjpcIm13T0ZpQ01KVWN3UWdONzFlN3NDXCIsXCJhcHBsaWNhdGlvbnNNYWluQ29udGVudFwiOlwiQVZHN2tCOUZ5dmJiNmpXM0ZBMEJcIixcImFwcGxpY2F0aW9uc01haW5MaXN0XCI6XCJWS3NISk9YY1FpMTc0czk0cW1Pb1wiLFwiYXBwbGljYXRpb25zTWFpblVzZXJcIjpcIlNXbkEyMG5BRWtSNmdvV0dsRnJlXCIsXCJhcHBsaWNhdGlvbnNNYWluVXNlck5hbWVcIjpcIkhlRGF5WnBNYWlhTXdvWHZSRm9EXCIsXCJhcHBsaWNhdGlvbnNNYWluVXNlckVtYWlsXCI6XCJYRjJGX1lHRTZQbXhTMHRFVnZQMlwiLFwiYXBwbGljYXRpb25zRm9vdGVyXCI6XCJWM0laTDF5VmJNV0lwb3NqUUFMOFwiLFwiYXBwbGljYXRpb25zRm9vdGVyU2lnbk91dFwiOlwiWmd4OERweTJwQWRPb3FUdE1NUWlcIixcImFwcGxpY2F0aW9uc0Zvb3RlclNpZ25PdXRJY29uXCI6XCJBWm5sRmJ6VEdFeEd0cFloNF9MWVwiLFwiYXBwbGljYXRpb25zRm9vdGVyU2lnbk91dExhYmVsXCI6XCJxOHZqdlJvUHlXeFBfNGJpTzd5ZVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBCdXR0b24sIEljb24gfSBmcm9tIFwiQHRvdWNodGVjaC9iYXNlbGF5ZXItdWlcIjtcbmltcG9ydCB7IEF1dGhDb250ZXh0IH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWF1dGhcIjtcblxuaW1wb3J0IGNsb3NlSWNvbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXNzZXRzL2ljb25zL2Nsb3NlLnN2Z1wiO1xuaW1wb3J0IGxvZ291dEljb24gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2Fzc2V0cy9pY29ucy9sb2dvdXQuc3ZnXCI7XG5pbXBvcnQgeyBBUFBMSUNBVElPTlNfVElFUl9XSURUSCwgQXBwUGF0aHMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyB1c2VOYXZpZ2F0aW9uQ29udGV4dCB9IGZyb20gXCIuLi8uLi9Db250ZXh0XCI7XG5pbXBvcnQgTG9nbyBmcm9tIFwiLi4vLi4vTG9nb1wiO1xuaW1wb3J0IFRpZXIgZnJvbSBcIi4uL1RpZXJcIjtcbmltcG9ydCBBcHBsaWNhdGlvbkxpbmsgZnJvbSBcIi4vQXBwbGljYXRpb25MaW5rXCI7XG5pbXBvcnQgY3NzIGZyb20gXCIuL0FwcGxpY2F0aW9ucy5tb2R1bGUuY3NzXCI7XG5cbmZ1bmN0aW9uIEFwcGxpY2F0aW9ucygpIHtcbiAgY29uc3QgeyB1c2VyIH0gPSB1c2VDb250ZXh0KEF1dGhDb250ZXh0KTtcbiAgY29uc3QgeyB0b2dnbGVUZW5hbnRzIH0gPSB1c2VOYXZpZ2F0aW9uQ29udGV4dCgpO1xuICBjb25zdCB7XG4gICAgc2lnbk91dCxcbiAgICBvbk5hdmlnYXRpb25DbG9zZSxcbiAgICBoYXNTaG93cm9vbUFjY2VzcyxcbiAgICBoYXNNYXJrZXRpbmdFbmdpbmVBY2Nlc3MsXG4gICAgaGFzU2VuZG91dHNBY2Nlc3MsXG4gICAgaGFzU2VuZG91dHNDbXNBY2Nlc3MsXG4gICAgaGFzVXNlck1hbmFnZW1lbnRBY2Nlc3MsXG4gIH0gPSB1c2VOYXZpZ2F0aW9uQ29udGV4dCgpO1xuXG4gIHJldHVybiAoXG4gICAgPFRpZXJcbiAgICAgIGNsYXNzTmFtZT17Y3NzLmFwcGxpY2F0aW9uc31cbiAgICAgIHdpZHRoPXtBUFBMSUNBVElPTlNfVElFUl9XSURUSH1cbiAgICAgIHNob3dIZWFkZXJCb3JkZXJcbiAgICAgIGhlYWRlcj17XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MuYXBwbGljYXRpb25zSGVhZGVyfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmFwcGxpY2F0aW9uc0hlYWRlckJyYW5kfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MuYXBwbGljYXRpb25zSGVhZGVyTG9nb30+XG4gICAgICAgICAgICAgIDxMb2dvIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjc3MuYXBwbGljYXRpb25zSGVhZGVyQ2xvc2VJY29ufVxuICAgICAgICAgICAgICBvbkNsaWNrPXtvbk5hdmlnYXRpb25DbG9zZX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEljb24gc3JjPXtjbG9zZUljb259IHNpemU9XCJsYXJnZVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBhbGlnbj1cImxlZnRcIlxuICAgICAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgICAgIHRyYW5zcGFyZW50XG4gICAgICAgICAgICBjbGFzc05hbWU9e2Nzcy5hcHBsaWNhdGlvbnNIZWFkZXJDaGFuZ2VCcmFuZEJ1dHRvbn1cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RvZ2dsZVRlbmFudHN9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgQ2hhbmdlIGJyYW5kXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgZm9vdGVyPXtcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5hcHBsaWNhdGlvbnNGb290ZXJ9IG9uQ2xpY2s9e3NpZ25PdXR9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MuYXBwbGljYXRpb25zRm9vdGVyU2lnbk91dH0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmFwcGxpY2F0aW9uc0Zvb3RlclNpZ25PdXRJY29ufT5cbiAgICAgICAgICAgICAgPEljb24gc3JjPXtsb2dvdXRJY29ufSBzaXplPVwibWVkaXVtXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5hcHBsaWNhdGlvbnNGb290ZXJTaWduT3V0TGFiZWx9PlNpZ24gb3V0PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MuYXBwbGljYXRpb25zTWFpbn0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MuYXBwbGljYXRpb25zTWFpbkNvbnRlbnR9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MuYXBwbGljYXRpb25zTWFpbkxpc3R9PlxuICAgICAgICAgICAgPEFwcGxpY2F0aW9uTGluayB0bz17QXBwUGF0aHMuREFTSEJPQVJEfT5EYXNoYm9hcmQ8L0FwcGxpY2F0aW9uTGluaz5cbiAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxpbmsgaGlkZGVuPXshaGFzU2hvd3Jvb21BY2Nlc3N9IHRvPXtBcHBQYXRocy5TSE9XUk9PTX0+XG4gICAgICAgICAgICAgIFByZXNlbnRhdGlvbnMgKFNob3dyb29tKVxuICAgICAgICAgICAgPC9BcHBsaWNhdGlvbkxpbms+XG4gICAgICAgICAgICA8QXBwbGljYXRpb25MaW5rIGhpZGRlbj17IWhhc1NlbmRvdXRzQWNjZXNzfSB0bz17QXBwUGF0aHMuU0VORE9VVFN9PlxuICAgICAgICAgICAgICBTZW5kb3V0c1xuICAgICAgICAgICAgPC9BcHBsaWNhdGlvbkxpbms+XG4gICAgICAgICAgICA8QXBwbGljYXRpb25MaW5rXG4gICAgICAgICAgICAgIGhpZGRlbj17IWhhc01hcmtldGluZ0VuZ2luZUFjY2Vzc31cbiAgICAgICAgICAgICAgdG89e0FwcFBhdGhzLk1BUktFVElOR19FTkdJTkV9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIE1lZGlhIExpYnJhcnlcbiAgICAgICAgICAgIDwvQXBwbGljYXRpb25MaW5rPlxuICAgICAgICAgICAgPEFwcGxpY2F0aW9uTGlua1xuICAgICAgICAgICAgICBoaWRkZW49eyFoYXNTZW5kb3V0c0Ntc0FjY2Vzc31cbiAgICAgICAgICAgICAgdG89e0FwcFBhdGhzLlNFTkRPVVRTX0NNU31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgU2VuZG91dHMgQ01TXG4gICAgICAgICAgICA8L0FwcGxpY2F0aW9uTGluaz5cbiAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxpbmtcbiAgICAgICAgICAgICAgaGlkZGVuPXshaGFzVXNlck1hbmFnZW1lbnRBY2Nlc3N9XG4gICAgICAgICAgICAgIHRvPXtBcHBQYXRocy5VU0VSX01BTkFHRU1FTlR9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFVzZXJzXG4gICAgICAgICAgICA8L0FwcGxpY2F0aW9uTGluaz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7dXNlciAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmFwcGxpY2F0aW9uc01haW5Vc2VyfT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5hcHBsaWNhdGlvbnNNYWluVXNlck5hbWV9PlxuICAgICAgICAgICAgICAgIHt1c2VyLmZpcnN0TmFtZX0ge3VzZXIubGFzdE5hbWV9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmFwcGxpY2F0aW9uc01haW5Vc2VyRW1haWx9Pnt1c2VyLmVtYWlsfTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L1RpZXI+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFwcGxpY2F0aW9ucztcbiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMjAnIGhlaWdodD0nMjAnIHZpZXdCb3g9JzAgMCAyMCAyMCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00wLjM5ODQzOCAwLjM5OTkwMkwxOS41OTg0IDE5LjU5OTlNMC4zOTg0MzggMTkuNTk5OUwxOS41OTg0IDAuMzk5OTAyJyBzdHJva2U9J2JsYWNrJy8lM2UgJTNjL3N2ZyUzZVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxNCcgaGVpZ2h0PScxNScgdmlld0JveD0nMCAwIDE0IDE1JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTcgMS41OTk5TDEwLjQ2NjcgNC43OTk5TTcgMS41OTk5TDMuOCA0Ljc5OTlNNyAxLjU5OTlMNyAxMS43MzMyTTEzLjQgNy40NjY1N0wxMy40IDE0LjM5OTlMMC42MDAwMDIgMTQuMzk5OUwwLjYwMDAwMiA3LjQ2NjU3JyBzdHJva2U9JyUyMzJEMkQzMycvJTNlICUzYy9zdmclM2VcIiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibW9kYWxcIjpcIlYxcW9XM1Y1WGIyaWFFQmhRbEZaXCIsXCJib2xkXCI6XCJUUEJsNHJvNWI4c2dqT2FnSlJXU1wifTsiLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbiwgQ29uZmlybWF0aW9uTW9kYWwgfSBmcm9tIFwiQHRvdWNodGVjaC9iYXNlbGF5ZXItdWlcIjtcblxuaW1wb3J0IGNzcyBmcm9tIFwiLi9Nb2RhbENyZWF0ZVRlbmFudC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIG9uQ2xvc2U6ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBNb2RhbENyZWF0ZVRlbmFudCh7IG9uQ2xvc2UgfTogUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8Q29uZmlybWF0aW9uTW9kYWxcbiAgICAgIG9uQ2xvc2U9e29uQ2xvc2V9XG4gICAgICBoZWFkZXI9XCJDcmVhdGUgYSBuZXcgQnJhbmQgV29ya3NwYWNlXCJcbiAgICAgIGJ1dHRvbnNSaWdodD17W1xuICAgICAgICA8QnV0dG9uIGtleT1cImNsb3NlXCIgb25DbGljaz17b25DbG9zZX0gcm91bmRlZD5cbiAgICAgICAgICBDbG9zZVxuICAgICAgICA8L0J1dHRvbj4sXG4gICAgICBdfVxuICAgICAgaXNPcGVuXG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5tb2RhbH0+XG4gICAgICAgIFBsZWFzZSBlbWFpbCA8c3BhbiBjbGFzc05hbWU9e2Nzcy5ib2xkfT5zdXBwb3J0QHRvdWNodGVjaC5jb208L3NwYW4+IGFuZFxuICAgICAgICB3ZSB3aWxsIGhlbHAgeW91IHNldHVwIHlvdXIgQnJhbmQgV29ya3NwYWNlLiBZb3Ugd2lsbCBiZSBndWlkZWRcbiAgICAgICAgdGhyb3VnaG91dCB0aGUgcHJvY2VzcyBvZiB1cGxvYWRpbmcgeW91ciBjb250ZW50LlxuICAgICAgPC9kaXY+XG4gICAgPC9Db25maXJtYXRpb25Nb2RhbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTW9kYWxDcmVhdGVUZW5hbnQ7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRlbmFudEJ1dHRvblwiOlwib2V1V01NY0p2THpHVnl6bGt6cmlcIixcImFjdGl2ZVwiOlwiYmJVSHdYZG1UbUx4MUJtMTRBdG5cIixcInRlbmFudEJ1dHRvbkljb25cIjpcIklyU1V0U3lKX3lIVTA2cDVZMUozXCJ9OyIsImltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIkB0b3VjaHRlY2gvYmFzZWxheWVyLXVpXCI7XG5cbmltcG9ydCB7IFRlbmFudCB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9ob29rcy91c2VUZW5hbnRzXCI7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uUG9zaXRpb24sIHVzZU5hdmlnYXRpb25Db250ZXh0IH0gZnJvbSBcIi4uLy4uLy4uL0NvbnRleHRcIjtcbmltcG9ydCBjc3MgZnJvbSBcIi4vVGVuYW50QnV0dG9uLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgdGVuYW50OiBUZW5hbnQ7XG59O1xuXG5mdW5jdGlvbiBUZW5hbnRCdXR0b24oeyB0ZW5hbnQgfTogUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIHZpZXdTdGF0ZTogeyBzZWxlY3RlZFRlbmFudElkIH0sXG4gICAgdXBkYXRlVmlld1N0YXRlLFxuICB9ID0gdXNlTmF2aWdhdGlvbkNvbnRleHQoKTtcblxuICBjb25zdCBpc0FjdGl2ZSA9IHNlbGVjdGVkVGVuYW50SWQgPT09IHRlbmFudC5pZDtcblxuICByZXR1cm4gKFxuICAgIDxCdXR0b25cbiAgICAgIGtleT17dGVuYW50LmlkfVxuICAgICAgYWxpZ249XCJsZWZ0XCJcbiAgICAgIG5vQm9yZGVyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtjc3MudGVuYW50QnV0dG9uLCB7IFtjc3MuYWN0aXZlXTogaXNBY3RpdmUgfV0pfVxuICAgICAgbm9TaGFkb3dcbiAgICAgIGRpc2FibGVkPXtpc0FjdGl2ZX1cbiAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgdXBkYXRlVmlld1N0YXRlKHtcbiAgICAgICAgICBzZWxlY3RlZFRlbmFudElkOiB0ZW5hbnQuaWQsXG4gICAgICAgICAgY3VycmVudFBvc2l0aW9uOiBOYXZpZ2F0aW9uUG9zaXRpb24uT1BFTixcbiAgICAgICAgfSk7XG4gICAgICB9fVxuICAgID5cbiAgICAgIHt0ZW5hbnQubGFiZWx9XG4gICAgPC9CdXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRlbmFudEJ1dHRvbjtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widGVuYW50c1wiOlwiVEltQ3NobmpiN1VQVmsyUjRsWlBcIixcInRlbmFudHNIZWFkZXJcIjpcIlBMT1d6REdOR1h6TEFKckgwUkszXCIsXCJ0ZW5hbnRzSGVhZGVyQXJyb3dJY29uXCI6XCJ4ZEVPX3pJWlo0dEZyZmFwa0ZGVFwiLFwidGVuYW50c01haW5cIjpcIkFzMTJ2eW5UUWtfamtuUUlsSjhBXCIsXCJ0ZW5hbnRzRm9vdGVyXCI6XCJxMndzN2F4TDVBcDFoUVczbTE2TlwiLFwidGVuYW50c0Zvb3RlckNyZWF0ZUJyYW5kXCI6XCJ6WWt6TnVOUWh2SWRXS1pob1FHclwiLFwidGVuYW50c0Zvb3RlckNyZWF0ZUJyYW5kSWNvblwiOlwieHhjdTZ5dFhSY1BsMUdaSjJ2ZDlcIixcInRlbmFudHNGb290ZXJDcmVhdGVCcmFuZExhYmVsXCI6XCJRWWhjdlpxYlp4Z2VuRzQxa3dOcVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCJAdG91Y2h0ZWNoL2Jhc2VsYXllci11aVwiO1xuXG5pbXBvcnQgYWRkSWNvbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXNzZXRzL2ljb25zL2FkZC5zdmdcIjtcbmltcG9ydCBhcnJvd0xlZnRJY29uIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hc3NldHMvaWNvbnMvYXJyb3ctbGVmdC5zdmdcIjtcbmltcG9ydCB7IEFwcFBhdGhzLCBURU5BTlRTX1RJRVJfV0lEVEggfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgdXNlVGVuYW50cyBmcm9tIFwiLi4vLi4vLi4vLi4vaG9va3MvdXNlVGVuYW50c1wiO1xuaW1wb3J0IHsgdXNlTmF2aWdhdGlvbkNvbnRleHQgfSBmcm9tIFwiLi4vLi4vQ29udGV4dFwiO1xuaW1wb3J0IFRpZXIgZnJvbSBcIi4uL1RpZXJcIjtcbmltcG9ydCBNb2RhbENyZWF0ZVRlbmFudCBmcm9tIFwiLi9Nb2RhbENyZWF0ZVRlbmFudFwiO1xuaW1wb3J0IFRlbmFudEJ1dHRvbiBmcm9tIFwiLi9UZW5hbnRCdXR0b25cIjtcbmltcG9ydCBjc3MgZnJvbSBcIi4vVGVuYW50cy5tb2R1bGUuY3NzXCI7XG5cbmZ1bmN0aW9uIFRlbmFudHMoKSB7XG4gIGNvbnN0IFtpc0NyZWF0ZVRlbmFudE1vZGFsT3Blbiwgc2V0SXNDcmVhdGVUZW5hbnRNb2RhbE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IHsgdG9nZ2xlVGVuYW50cyB9ID0gdXNlTmF2aWdhdGlvbkNvbnRleHQoKTtcblxuICBjb25zdCB7IHRlbmFudHMgfSA9IHVzZVRlbmFudHMoKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MudGVuYW50c30+XG4gICAgICA8VGllclxuICAgICAgICB3aWR0aD17VEVOQU5UU19USUVSX1dJRFRIfVxuICAgICAgICBoZWFkZXI9e1xuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MudGVuYW50c0hlYWRlcn0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLnRlbmFudHNIZWFkZXJBcnJvd0ljb259IG9uQ2xpY2s9e3RvZ2dsZVRlbmFudHN9PlxuICAgICAgICAgICAgICA8SWNvbiBzcmM9e2Fycm93TGVmdEljb259IHNpemU9XCJsYXJnZVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBmb290ZXI9e1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzLnRlbmFudHNGb290ZXJ9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKEFwcFBhdGhzLkRBU0hCT0FSRF9DUkVBVEVfV09SS1NQQUNFX01PREFMKVxuICAgICAgICAgICAgfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MudGVuYW50c0Zvb3RlckNyZWF0ZUJyYW5kfT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy50ZW5hbnRzRm9vdGVyQ3JlYXRlQnJhbmRJY29ufT5cbiAgICAgICAgICAgICAgICA8SWNvbiBzcmM9e2FkZEljb259IHNpemU9XCJtZWRpdW1cIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy50ZW5hbnRzRm9vdGVyQ3JlYXRlQnJhbmRMYWJlbH0+XG4gICAgICAgICAgICAgICAgQ3JlYXRlIGEgYnJhbmQgd29ya3NwYWNlXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy50ZW5hbnRzTWFpbn0+XG4gICAgICAgICAge3RlbmFudHMubWFwKCh0ZW5hbnQpID0+IChcbiAgICAgICAgICAgIDxUZW5hbnRCdXR0b24gdGVuYW50PXt0ZW5hbnR9IGtleT17dGVuYW50LmlkfSAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvVGllcj5cbiAgICAgIHtpc0NyZWF0ZVRlbmFudE1vZGFsT3BlbiAmJiAoXG4gICAgICAgIDxNb2RhbENyZWF0ZVRlbmFudFxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHtcbiAgICAgICAgICAgIHNldElzQ3JlYXRlVGVuYW50TW9kYWxPcGVuKGZhbHNlKTtcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGVuYW50cztcbiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMjInIGhlaWdodD0nMTQnIHZpZXdCb3g9JzAgMCAyMiAxNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xLjYwMDEgNy4wMDAzOUw4LjAwMDEgMTMuNDAwNE0xLjYwMDEgNy4wMDAzOUw4LjAwMDEgMC42MDAzOTFNMS42MDAxIDcuMDAwMzlMMjEuNjAwMSA3LjAwMDM5JyBzdHJva2U9JyUyMzI2MjYyNicvJTNlICUzYy9zdmclM2VcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTQnIGhlaWdodD0nMTQnIHZpZXdCb3g9JzAgMCAxNCAxNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00wLjAwMTcwOTA2IDdMMTMuMDAxNyA3TTYuNTAxNzEgMTMuNUw2LjUwMTcxIDAuNScgc3Ryb2tlPSclMjMyRDJEMzMnLyUzZSAlM2Mvc3ZnJTNlXCIiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRpZXJzXCI6XCJ4NENjbktQMGhzTXBmOGFUVjF2Y1wifTsiLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBBcHBsaWNhdGlvbnMgZnJvbSBcIi4vQXBwbGljYXRpb25zXCI7XG5pbXBvcnQgVGVuYW50cyBmcm9tIFwiLi9UZW5hbnRzXCI7XG5pbXBvcnQgY3NzIGZyb20gXCIuL1RpZXJzLm1vZHVsZS5jc3NcIjtcblxuZnVuY3Rpb24gVGllcnMoKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2Nzcy50aWVyc30+XG4gICAgICA8QXBwbGljYXRpb25zIC8+XG4gICAgICA8VGVuYW50cyAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUaWVycztcbiIsImltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgVHJhbnNpdGlvbiwgVmFyaWFudCwgbW90aW9uIH0gZnJvbSBcImZyYW1lci1tb3Rpb25cIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gXCJyZWFjdC1kb21cIjtcblxuaW1wb3J0IHsgQVBQTElDQVRJT05TX1RJRVJfV0lEVEgsIFRFTkFOVFNfVElFUl9XSURUSCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIE5hdmlnYXRpb25Db250ZXh0LFxuICBOYXZpZ2F0aW9uQ29udGV4dFByb3ZpZGVyLFxuICBOYXZpZ2F0aW9uUG9zaXRpb24sXG59IGZyb20gXCIuL0NvbnRleHRcIjtcbmltcG9ydCBjc3MgZnJvbSBcIi4vTmF2aWdhdGlvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgVGllcnMgZnJvbSBcIi4vVGllcnNcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBwb3J0YWxDb250YWluZXI/OiBFbGVtZW50IHwgRG9jdW1lbnRGcmFnbWVudDtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbn07XG5cbmNvbnN0IEVYUEFOREVEX05BVklHQVRJT05fV0lEVEggPSBBUFBMSUNBVElPTlNfVElFUl9XSURUSCArIFRFTkFOVFNfVElFUl9XSURUSDtcblxuY29uc3QgQU5JTUFUSU9OX1RSQU5TSVRJT046IFRyYW5zaXRpb24gPSB7IGVhc2U6IFwiZWFzZU91dFwiLCBkdXJhdGlvbjogMC4zIH07XG5jb25zdCBBTklNQVRJT05fVkFSSUFOVFM6IFJlY29yZDxOYXZpZ2F0aW9uUG9zaXRpb24sIFZhcmlhbnQ+ID0ge1xuICBbTmF2aWdhdGlvblBvc2l0aW9uLkhJRERFTl06IHtcbiAgICBsZWZ0OiAtRVhQQU5ERURfTkFWSUdBVElPTl9XSURUSCxcbiAgICB0cmFuc2l0aW9uOiBBTklNQVRJT05fVFJBTlNJVElPTixcbiAgfSxcbiAgW05hdmlnYXRpb25Qb3NpdGlvbi5PUEVOXToge1xuICAgIGxlZnQ6IC1BUFBMSUNBVElPTlNfVElFUl9XSURUSCxcbiAgICB0cmFuc2l0aW9uOiBBTklNQVRJT05fVFJBTlNJVElPTixcbiAgfSxcbiAgW05hdmlnYXRpb25Qb3NpdGlvbi5FWFBBTkRFRF06IHsgbGVmdDogMCwgdHJhbnNpdGlvbjogQU5JTUFUSU9OX1RSQU5TSVRJT04gfSxcbn07XG5cbmZ1bmN0aW9uIE5hdmlnYXRpb24oe1xuICBpc09wZW4sXG4gIHBvcnRhbENvbnRhaW5lciA9IGRvY3VtZW50LmJvZHksXG4gIG9uQ2xvc2UsXG59OiBQcm9wcykge1xuICByZXR1cm4gKFxuICAgIC8vIFVzaW5nIGZyYW1lci1tb3Rpb24gbGliIHRvIGFuaW1hdGUgdGhlIG5hdmlnYXRpb24gY29tcG9uZW50IG9uIG1vdW50L3VubW91bnRcbiAgICAvLyBBbHNvIHRvIHByZXZlbnQgYW55IGFwaSBjYWxscyBmcm9tIGJlaW5nIG1hZGUgd2hlbiB0aGUgbmF2aWdhdGlvbiAoVGllcnMgY29tcG9uZW50KSBpcyBoaWRkZW5cbiAgICA8TmF2aWdhdGlvbkNvbnRleHRQcm92aWRlciBvbk5hdmlnYXRpb25DbG9zZT17b25DbG9zZX0gaXNPcGVuPXtpc09wZW59PlxuICAgICAgPE5hdmlnYXRpb25Db250ZXh0LkNvbnN1bWVyPlxuICAgICAgICB7KHsgdmlld1N0YXRlOiB7IGN1cnJlbnRQb3NpdGlvbiB9IH0pID0+XG4gICAgICAgICAgY3JlYXRlUG9ydGFsKFxuICAgICAgICAgICAgPEFuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgICAgICAge2N1cnJlbnRQb3NpdGlvbiAhPT0gTmF2aWdhdGlvblBvc2l0aW9uLkhJRERFTiAmJiAoXG4gICAgICAgICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzLm5hdmlnYXRpb259XG4gICAgICAgICAgICAgICAgICBpbml0aWFsPXtOYXZpZ2F0aW9uUG9zaXRpb24uSElEREVOfVxuICAgICAgICAgICAgICAgICAgdmFyaWFudHM9e0FOSU1BVElPTl9WQVJJQU5UU31cbiAgICAgICAgICAgICAgICAgIGFuaW1hdGU9e2N1cnJlbnRQb3NpdGlvbn1cbiAgICAgICAgICAgICAgICAgIGV4aXQ9e05hdmlnYXRpb25Qb3NpdGlvbi5ISURERU59XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPFRpZXJzIC8+XG4gICAgICAgICAgICAgICAgPC9tb3Rpb24uZGl2PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9BbmltYXRlUHJlc2VuY2U+LFxuICAgICAgICAgICAgcG9ydGFsQ29udGFpbmVyXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICA8L05hdmlnYXRpb25Db250ZXh0LkNvbnN1bWVyPlxuICAgIDwvTmF2aWdhdGlvbkNvbnRleHRQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTmF2aWdhdGlvbjtcbiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTQnIGhlaWdodD0nMTUnIHZpZXdCb3g9JzAgMCAxNCAxMScgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00wIDEuNUgxNE0wIDUuNUgxNE0wIDkuNUgxNE0wJyBzdHJva2U9J2JsYWNrJy8lM2UgJTNjL3N2ZyUzZVwiIiwiaW1wb3J0IFJlYWN0LCB7IEZyYWdtZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tIFwiQHRvdWNodGVjaC9iYXNlbGF5ZXItdWlcIjtcbmltcG9ydCB7IHVzZVRvZ2dsZSB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1ob29rc1wiO1xuXG5pbXBvcnQgbWVudUljb24gZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9pY29ucy9tZW51LnN2Z1wiO1xuaW1wb3J0IE5hdmlnYXRpb24gZnJvbSBcIi4vTmF2aWdhdGlvblwiO1xuXG50eXBlIEljb25CdXR0b25Qcm9wcyA9IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBJY29uQnV0dG9uPjtcbnR5cGUgUHJvcHMgPSBQYXJ0aWFsPEljb25CdXR0b25Qcm9wcz4gJiB7XG4gIHBvcnRhbENvbnRhaW5lcj86IEVsZW1lbnQgfCBEb2N1bWVudEZyYWdtZW50O1xufTtcblxuZnVuY3Rpb24gTmF2aWdhdGlvbkJ1dHRvbih7XG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBhbHQgPSBcIlRvZ2dsZSBuYXZpZ2F0aW9uIG1lbnVcIixcbiAgc3JjID0gbWVudUljb24sXG4gIHBvcnRhbENvbnRhaW5lciA9IGRvY3VtZW50LmJvZHksXG4gIC4uLnByb3BzXG59OiBQcm9wcykge1xuICBjb25zdCBbaXNOYXZpZ2F0aW9uT3BlbiwgdG9nZ2xlSXNOYXZpZ2F0aW9uT3Blbl0gPSB1c2VUb2dnbGUoZmFsc2UpO1xuXG4gIHJldHVybiAoXG4gICAgPEZyYWdtZW50PlxuICAgICAgPEljb25CdXR0b25cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgYWx0PXthbHR9XG4gICAgICAgIHNyYz17c3JjfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB0b2dnbGVJc05hdmlnYXRpb25PcGVuKCl9XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgIC8+XG4gICAgICA8TmF2aWdhdGlvblxuICAgICAgICBpc09wZW49e2lzTmF2aWdhdGlvbk9wZW59XG4gICAgICAgIHBvcnRhbENvbnRhaW5lcj17cG9ydGFsQ29udGFpbmVyfVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiB0b2dnbGVJc05hdmlnYXRpb25PcGVuKCl9XG4gICAgICAvPlxuICAgIDwvRnJhZ21lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5hdmlnYXRpb25CdXR0b247XG4iLCJpbXBvcnQgeyBfX3JlYWQgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVG9nZ2xlKGluaXRpYWxWYWx1ZSkge1xuICAgIGlmIChpbml0aWFsVmFsdWUgPT09IHZvaWQgMCkgeyBpbml0aWFsVmFsdWUgPSBmYWxzZTsgfVxuICAgIHZhciBfYSA9IF9fcmVhZCh1c2VTdGF0ZShpbml0aWFsVmFsdWUpLCAyKSwgdmFsdWUgPSBfYVswXSwgc2V0VmFsdWUgPSBfYVsxXTtcbiAgICB2YXIgdG9nZ2xlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmV3VmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBzZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZXRWYWx1ZShmdW5jdGlvbiAocHJldlZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFwcmV2VmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gW3ZhbHVlLCB0b2dnbGVdO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlVG9nZ2xlLmpzLm1hcCJdLCJuYW1lcyI6WyJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlIiwiZ2V0dGVyIiwiX19lc01vZHVsZSIsImQiLCJhIiwiZXhwb3J0cyIsImRlZmluaXRpb24iLCJrZXkiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0Iiwib2JqIiwicHJvcCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJleHRlbmRTdGF0aWNzIiwiYiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiQXJyYXkiLCJwIiwiX19leHRlbmRzIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiX18iLCJ0aGlzIiwiY29uc3RydWN0b3IiLCJjcmVhdGUiLCJfX2Fzc2lnbiIsImFzc2lnbiIsInQiLCJzIiwiaSIsIm4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcHBseSIsIl9fcmVzdCIsImUiLCJpbmRleE9mIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJtIiwiaXRlcmF0b3IiLCJyIiwiYXIiLCJuZXh0IiwiZG9uZSIsInB1c2giLCJlcnJvciIsInRvIiwiZnJvbSIsInBhY2siLCJsIiwic2xpY2UiLCJjb25jYXQiLCJyZXF1aXJlIiwiZW52IiwicHJvY2VzcyIsImRlZmF1bHRUaW1lc3RlcCIsImdldEN1cnJlbnRUaW1lIiwicGVyZm9ybWFuY2UiLCJub3ciLCJEYXRlIiwib25OZXh0RnJhbWUiLCJ3aW5kb3ciLCJjYWxsYmFjayIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInNldFRpbWVvdXQiLCJ1c2VEZWZhdWx0RWxhcHNlZCIsInJ1bk5leHRGcmFtZSIsImlzUHJvY2Vzc2luZyIsImRlbHRhIiwidGltZXN0YW1wIiwic3RlcHNPcmRlciIsInN0ZXBzIiwicmVkdWNlIiwiYWNjIiwidG9SdW4iLCJ0b1J1bk5leHRGcmFtZSIsIm51bVRvUnVuIiwiZmx1c2hOZXh0RnJhbWUiLCJ0b0tlZXBBbGl2ZSIsIldlYWtTZXQiLCJzdGVwIiwic2NoZWR1bGUiLCJrZWVwQWxpdmUiLCJpbW1lZGlhdGUiLCJhZGRUb0N1cnJlbnRGcmFtZSIsImJ1ZmZlciIsImFkZCIsImNhbmNlbCIsImluZGV4Iiwic3BsaWNlIiwiZGVsZXRlIiwiZnJhbWVEYXRhIiwiaGFzIiwiY3JlYXRlUmVuZGVyU3RlcCIsInN5bmMiLCJzdGFydExvb3AiLCJjYW5jZWxTeW5jIiwiZmx1c2hTeW5jIiwicHJvY2Vzc1N0ZXAiLCJzdGVwSWQiLCJwcm9jZXNzRnJhbWUiLCJNYXRoIiwibWF4IiwibWluIiwiZm9yRWFjaCIsImdldEZyYW1lRGF0YSIsImlzQnJvd3NlciIsImRvY3VtZW50IiwidXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZUVmZmVjdCIsInVzZUlzTW91bnRlZCIsImlzTW91bnRlZCIsInVzZVJlZiIsImN1cnJlbnQiLCJjcmVhdGVDb250ZXh0IiwidXNlQ29uc3RhbnQiLCJpbml0IiwicmVmIiwiY291bnRlciIsImluY3JlbWVudElkIiwidXNlSWQiLCJQcmVzZW5jZUNoaWxkIiwiX2EiLCJjaGlsZHJlbiIsImluaXRpYWwiLCJpc1ByZXNlbnQiLCJvbkV4aXRDb21wbGV0ZSIsImN1c3RvbSIsInByZXNlbmNlQWZmZWN0c0xheW91dCIsInByZXNlbmNlQ2hpbGRyZW4iLCJuZXdDaGlsZHJlbk1hcCIsImlkIiwiY29udGV4dCIsInVzZU1lbW8iLCJjaGlsZElkIiwiZV8xIiwic2V0IiwiX2IiLCJfX3ZhbHVlcyIsInZhbHVlcyIsIl9jIiwiZV8xXzEiLCJyZXR1cm4iLCJyZWdpc3RlciIsInVuZGVmaW5lZCIsIl8iLCJzaXplIiwiTWFwIiwiTGF5b3V0R3JvdXBDb250ZXh0IiwidXNlVW5tb3VudEVmZmVjdCIsImdldENoaWxkS2V5IiwiY2hpbGQiLCJBbmltYXRlUHJlc2VuY2UiLCJleGl0QmVmb3JlRW50ZXIiLCJfZCIsInVzZVN0YXRlIiwiZm9yY2VkUmVuZGVyQ291bnQiLCJzZXRGb3JjZWRSZW5kZXJDb3VudCIsImZvcmNlUmVuZGVyIiwidXNlQ2FsbGJhY2siLCJ1c2VGb3JjZVVwZGF0ZSIsImZvcmNlUmVuZGVyTGF5b3V0R3JvdXAiLCJ1c2VDb250ZXh0IiwiZmlsdGVyZWRDaGlsZHJlbiIsImZpbHRlcmVkIiwiQ2hpbGRyZW4iLCJpc1ZhbGlkRWxlbWVudCIsIm9ubHlFbGVtZW50cyIsImNoaWxkcmVuVG9SZW5kZXIiLCJleGl0aW5nIiwiU2V0IiwicHJlc2VudENoaWxkcmVuIiwiYWxsQ2hpbGRyZW4iLCJpc0luaXRpYWxSZW5kZXIiLCJ1cGRhdGVDaGlsZExvb2t1cCIsImNsZWFyIiwibWFwIiwicHJlc2VudEtleXMiLCJ0YXJnZXRLZXlzIiwibnVtUHJlc2VudCIsImluc2VydGlvbkluZGV4IiwicmVtb3ZlSW5kZXgiLCJmaW5kSW5kZXgiLCJwcmVzZW50Q2hpbGQiLCJjb25zb2xlIiwid2FybiIsImNsb25lRWxlbWVudCIsImNyZWF0ZURlZmluaXRpb24iLCJwcm9wTmFtZXMiLCJpc0VuYWJsZWQiLCJwcm9wcyIsInNvbWUiLCJuYW1lIiwiZmVhdHVyZURlZmluaXRpb25zIiwibWVhc3VyZUxheW91dCIsImFuaW1hdGlvbiIsImV4aXQiLCJkcmFnIiwiZm9jdXMiLCJob3ZlciIsInRhcCIsInBhbiIsImluVmlldyIsIndhcm5pbmciLCJpbnZhcmlhbnQiLCJMYXp5Q29udGV4dCIsInN0cmljdCIsImZlYXR1cmVOYW1lcyIsImtleXMiLCJudW1GZWF0dXJlcyIsIk1vdGlvbkNvbmZpZ0NvbnRleHQiLCJ0cmFuc2Zvcm1QYWdlUG9pbnQiLCJpc1N0YXRpYyIsInJlZHVjZWRNb3Rpb24iLCJNb3Rpb25Db250ZXh0IiwicHJlZmVyc1JlZHVjZWRNb3Rpb24iLCJoYXNEZXRlY3RlZCIsInVzZVZpc3VhbEVsZW1lbnQiLCJDb21wb25lbnQiLCJ2aXN1YWxTdGF0ZSIsImNyZWF0ZVZpc3VhbEVsZW1lbnQiLCJyZWR1Y2VkTW90aW9uUHJlZmVyZW5jZSIsImxhenlDb250ZXh0IiwicGFyZW50IiwidmlzdWFsRWxlbWVudCIsInByZXNlbmNlQ29udGV4dCIsInNob3VsZFJlZHVjZU1vdGlvbiIsIm1hdGNoTWVkaWEiLCJtb3Rpb25NZWRpYVF1ZXJ5XzEiLCJzZXRSZWR1Y2VkTW90aW9uUHJlZmVyZW5jZXMiLCJtYXRjaGVzIiwiYWRkTGlzdGVuZXIiLCJpbml0UHJlZmVyc1JlZHVjZWRNb3Rpb24iLCJ2aXN1YWxFbGVtZW50UmVmIiwicmVuZGVyZXIiLCJwcmVzZW5jZUlkIiwiYmxvY2tJbml0aWFsQW5pbWF0aW9uIiwic3luY1JlbmRlciIsImFuaW1hdGlvblN0YXRlIiwiYW5pbWF0ZUNoYW5nZXMiLCJub3RpZnlVbm1vdW50IiwiaXNSZWZPYmplY3QiLCJpc1ZhcmlhbnRMYWJlbHMiLCJ2IiwiaXNBcnJheSIsImlzVmFyaWFudExhYmVsIiwicmVzb2x2ZVZhcmlhbnRGcm9tUHJvcHMiLCJjdXJyZW50VmFsdWVzIiwiY3VycmVudFZlbG9jaXR5IiwidmFyaWFudHMiLCJyZXNvbHZlVmFyaWFudCIsImdldFByb3BzIiwiZm9yRWFjaFZhbHVlIiwiZ2V0Q3VycmVudCIsInZlbG9jaXR5IiwiZ2V0VmVsb2NpdHkiLCJjaGVja0lmQ29udHJvbGxpbmdWYXJpYW50cyIsImFuaW1hdGUiLCJzdGFydCIsIndoaWxlSG92ZXIiLCJ3aGlsZURyYWciLCJ3aGlsZVRhcCIsIndoaWxlRm9jdXMiLCJjaGVja0lmVmFyaWFudE5vZGUiLCJCb29sZWFuIiwidmFyaWFudExhYmVsc0FzRGVwZW5kZW5jeSIsImpvaW4iLCJnbG9iYWxQcm9qZWN0aW9uU3RhdGUiLCJoYXNBbmltYXRlZFNpbmNlUmVzaXplIiwiaGFzRXZlclVwZGF0ZWQiLCJTd2l0Y2hMYXlvdXRHcm91cENvbnRleHQiLCJWaXN1YWxFbGVtZW50SGFuZGxlciIsIl9zdXBlciIsImdldFNuYXBzaG90QmVmb3JlVXBkYXRlIiwidXBkYXRlUHJvcHMiLCJjb21wb25lbnREaWRVcGRhdGUiLCJzZXRQcm9wcyIsInJlbmRlciIsInByZWxvYWRlZEZlYXR1cmVzIiwicHJvamVjdGlvbk5vZGVDb25zdHJ1Y3RvciIsInVzZVJlbmRlciIsInVzZVZpc3VhbFN0YXRlIiwiZmVhdHVyZXMiLCJsb2FkRmVhdHVyZXMiLCJmb3J3YXJkUmVmIiwiZXh0ZXJuYWxSZWYiLCJsYXlvdXRJZCIsImxheW91dEdyb3VwSWQiLCJ1c2VMYXlvdXRJZCIsImNvbmZpZyIsImluaGVyaXQiLCJnZXRDdXJyZW50VHJlZVZhcmlhbnRzIiwidXNlQ3JlYXRlTW90aW9uQ29udGV4dCIsInByb2plY3Rpb25JZCIsIlByb2plY3Rpb25Ob2RlQ29uc3RydWN0b3IiLCJsYXlvdXQiLCJkcmFnQ29uc3RyYWludHMiLCJsYXlvdXRTY3JvbGwiLCJpbml0aWFsUHJvbW90aW9uQ29uZmlnIiwicHJvamVjdGlvbiIsImdldExhdGVzdFZhbHVlcyIsInNldE9wdGlvbnMiLCJhbHdheXNNZWFzdXJlTGF5b3V0Iiwic2NoZWR1bGVSZW5kZXIiLCJhbmltYXRpb25UeXBlIiwidXNlUHJvamVjdGlvbiIsIm5hbWVfMSIsInVzZUZlYXR1cmVzIiwiUHJvdmlkZXIiLCJpbnN0YW5jZSIsIm1vdW50IiwidW5tb3VudCIsInVzZU1vdGlvblJlZiIsImNyZWF0ZU1vdGlvblByb3h5IiwiY3JlYXRlQ29uZmlnIiwiY3VzdG9tTW90aW9uQ29tcG9uZW50Q29uZmlnIiwiUHJveHkiLCJjb21wb25lbnRDYWNoZSIsIl90YXJnZXQiLCJsb3dlcmNhc2VTVkdFbGVtZW50cyIsImlzU1ZHQ29tcG9uZW50IiwiaW5jbHVkZXMiLCJ0ZXN0Iiwic2NhbGVDb3JyZWN0b3JzIiwidHJhbnNmb3JtQXhlcyIsInRyYW5zZm9ybVByb3BzIiwic29ydFRyYW5zZm9ybVByb3BzIiwib3BlcmF0aW9uS2V5IiwiYXhlc0tleSIsInRyYW5zZm9ybVByb3BTZXQiLCJpc1RyYW5zZm9ybVByb3AiLCJ0cmFuc2Zvcm1PcmlnaW5Qcm9wcyIsImlzVHJhbnNmb3JtT3JpZ2luUHJvcCIsImlzRm9yY2VkTW90aW9uVmFsdWUiLCJpc01vdGlvblZhbHVlIiwidHJhbnNsYXRlQWxpYXMiLCJ4IiwieSIsInoiLCJ0cmFuc2Zvcm1QZXJzcGVjdGl2ZSIsImlzQ1NTVmFyaWFibGUiLCJzdGFydHNXaXRoIiwiZ2V0VmFsdWVBc1R5cGUiLCJ0eXBlIiwidHJhbnNmb3JtIiwiY2xhbXAiLCJzYW5pdGl6ZSIsIk51bWJlciIsInRvRml4ZWQiLCJmbG9hdFJlZ2V4IiwiY29sb3JSZWdleCIsInNpbmdsZUNvbG9yUmVnZXgiLCJpc1N0cmluZyIsImNyZWF0ZVVuaXRUeXBlIiwidW5pdCIsImVuZHNXaXRoIiwic3BsaXQiLCJwYXJzZSIsInBhcnNlRmxvYXQiLCJkZWdyZWVzIiwicGVyY2VudCIsInB4IiwidmgiLCJ2dyIsInByb2dyZXNzUGVyY2VudGFnZSIsIm51bWJlciIsImFscGhhIiwic2NhbGUiLCJkZWZhdWx0Iiwicm91bmQiLCJudW1iZXJWYWx1ZVR5cGVzIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJhZGl1cyIsInJhZGl1cyIsImJvcmRlclRvcExlZnRSYWRpdXMiLCJib3JkZXJUb3BSaWdodFJhZGl1cyIsImJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzIiwiYm9yZGVyQm90dG9tTGVmdFJhZGl1cyIsIndpZHRoIiwibWF4V2lkdGgiLCJoZWlnaHQiLCJtYXhIZWlnaHQiLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiLCJwYWRkaW5nIiwicGFkZGluZ1RvcCIsInBhZGRpbmdSaWdodCIsInBhZGRpbmdCb3R0b20iLCJwYWRkaW5nTGVmdCIsIm1hcmdpbiIsIm1hcmdpblRvcCIsIm1hcmdpblJpZ2h0IiwibWFyZ2luQm90dG9tIiwibWFyZ2luTGVmdCIsInJvdGF0ZSIsInJvdGF0ZVgiLCJyb3RhdGVZIiwicm90YXRlWiIsInNjYWxlWCIsInNjYWxlWSIsInNjYWxlWiIsInNrZXciLCJza2V3WCIsInNrZXdZIiwiZGlzdGFuY2UiLCJ0cmFuc2xhdGVYIiwidHJhbnNsYXRlWSIsInRyYW5zbGF0ZVoiLCJwZXJzcGVjdGl2ZSIsIm9wYWNpdHkiLCJvcmlnaW5YIiwib3JpZ2luWSIsIm9yaWdpbloiLCJ6SW5kZXgiLCJmaWxsT3BhY2l0eSIsInN0cm9rZU9wYWNpdHkiLCJudW1PY3RhdmVzIiwiYnVpbGRIVE1MU3R5bGVzIiwic3RhdGUiLCJsYXRlc3RWYWx1ZXMiLCJvcHRpb25zIiwidHJhbnNmb3JtVGVtcGxhdGUiLCJzdHlsZSIsInZhcnMiLCJ0cmFuc2Zvcm1LZXlzIiwidHJhbnNmb3JtT3JpZ2luIiwiaGFzVHJhbnNmb3JtIiwiaGFzVHJhbnNmb3JtT3JpZ2luIiwidHJhbnNmb3JtSXNOb25lIiwidmFsdWVUeXBlIiwidmFsdWVBc1R5cGUiLCJ0cmFuc2Zvcm1Jc0RlZmF1bHQiLCJlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbiIsImFsbG93VHJhbnNmb3JtTm9uZSIsInRyYW5zZm9ybVN0cmluZyIsInNvcnQiLCJ0cmFuc2Zvcm1IYXNaIiwibnVtVHJhbnNmb3JtS2V5cyIsInRyaW0iLCJidWlsZFRyYW5zZm9ybSIsImJ1aWxkVHJhbnNmb3JtT3JpZ2luIiwiY3JlYXRlSHRtbFJlbmRlclN0YXRlIiwiY29weVJhd1ZhbHVlc09ubHkiLCJ0YXJnZXQiLCJzb3VyY2UiLCJ1c2VIVE1MUHJvcHMiLCJodG1sUHJvcHMiLCJ1c2VJbml0aWFsTW90aW9uVmFsdWVzIiwidHJhbnNmb3JtVmFsdWVzIiwidXNlU3R5bGUiLCJkcmFnTGlzdGVuZXIiLCJkcmFnZ2FibGUiLCJ1c2VyU2VsZWN0IiwiV2Via2l0VXNlclNlbGVjdCIsIldlYmtpdFRvdWNoQ2FsbG91dCIsInRvdWNoQWN0aW9uIiwidmFsaWRNb3Rpb25Qcm9wcyIsImlzVmFsaWRNb3Rpb25Qcm9wIiwiaXNWYWxpZFByb3AiLCJzaG91bGRGb3J3YXJkIiwiY2FsY09yaWdpbiIsIm9yaWdpbiIsIm9mZnNldCIsImRhc2hLZXlzIiwiYXJyYXkiLCJjYW1lbEtleXMiLCJidWlsZFNWR0F0dHJzIiwiYXR0clgiLCJhdHRyWSIsInBhdGhMZW5ndGgiLCJwYXRoU3BhY2luZyIsInBhdGhPZmZzZXQiLCJhdHRycyIsImRpbWVuc2lvbnMiLCJweE9yaWdpblgiLCJweE9yaWdpblkiLCJjYWxjU1ZHVHJhbnNmb3JtT3JpZ2luIiwic3BhY2luZyIsInVzZURhc2hDYXNlIiwiYnVpbGRTVkdQYXRoIiwiY3JlYXRlU3ZnUmVuZGVyU3RhdGUiLCJ1c2VTVkdQcm9wcyIsInZpc3VhbFByb3BzIiwicmF3U3R5bGVzIiwiY3JlYXRlVXNlUmVuZGVyIiwiZm9yd2FyZE1vdGlvblByb3BzIiwiZmlsdGVyZWRQcm9wcyIsImlzRG9tIiwiZmlsdGVyUHJvcHMiLCJlbGVtZW50UHJvcHMiLCJjcmVhdGVFbGVtZW50IiwiQ0FNRUxfQ0FTRV9QQVRURVJOIiwiY2FtZWxUb0Rhc2giLCJzdHIiLCJyZXBsYWNlIiwidG9Mb3dlckNhc2UiLCJyZW5kZXJIVE1MIiwiZWxlbWVudCIsInN0eWxlUHJvcCIsImdldFByb2plY3Rpb25TdHlsZXMiLCJzZXRQcm9wZXJ0eSIsImNhbWVsQ2FzZUF0dHJpYnV0ZXMiLCJyZW5kZXJTVkciLCJyZW5kZXJTdGF0ZSIsIl9zdHlsZVByb3AiLCJzZXRBdHRyaWJ1dGUiLCJzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMiLCJuZXdWYWx1ZXMiLCJ0b1VwcGVyQ2FzZSIsImlzQW5pbWF0aW9uQ29udHJvbHMiLCJpc0tleWZyYW1lc1RhcmdldCIsImlzQ3VzdG9tVmFsdWUiLCJtaXgiLCJ0b1ZhbHVlIiwicmVzb2x2ZUZpbmFsVmFsdWVJbktleWZyYW1lcyIsInJlc29sdmVNb3Rpb25WYWx1ZSIsInVud3JhcHBlZFZhbHVlIiwibWFrZVN0YXRlIiwiY3JlYXRlUmVuZGVyU3RhdGUiLCJvbk1vdW50IiwibWFrZUxhdGVzdFZhbHVlcyIsIm1ha2VVc2VWaXN1YWxTdGF0ZSIsInNjcmFwZU1vdGlvblZhbHVlcyIsIm1vdGlvblZhbHVlcyIsImlzQ29udHJvbGxpbmdWYXJpYW50cyIsImlzVmFyaWFudE5vZGUiLCJpbml0aWFsQW5pbWF0aW9uSXNCbG9ja2VkIiwidmFyaWFudFRvU2V0IiwicmVzb2x2ZWQiLCJ0cmFuc2l0aW9uRW5kIiwidHJhbnNpdGlvbiIsInZhbHVlVGFyZ2V0IiwiQW5pbWF0aW9uVHlwZSIsInN2Z01vdGlvbkNvbmZpZyIsImdldEJCb3giLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJodG1sTW90aW9uQ29uZmlnIiwiYWRkRG9tRXZlbnQiLCJldmVudE5hbWUiLCJoYW5kbGVyIiwicGFzc2l2ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidXNlRG9tRXZlbnQiLCJpc01vdXNlRXZlbnQiLCJldmVudCIsIlBvaW50ZXJFdmVudCIsInBvaW50ZXJUeXBlIiwiTW91c2VFdmVudCIsImlzVG91Y2hFdmVudCIsInRvdWNoZXMiLCJkZWZhdWx0UGFnZVBvaW50IiwicGFnZVgiLCJwYWdlWSIsInBvaW50RnJvbVRvdWNoIiwicG9pbnRUeXBlIiwicG9pbnQiLCJjaGFuZ2VkVG91Y2hlcyIsInBvaW50RnJvbU1vdXNlIiwiZXh0cmFjdEV2ZW50SW5mbyIsIndyYXBIYW5kbGVyIiwic2hvdWxkRmlsdGVyUHJpbWFyeVBvaW50ZXIiLCJldmVudEhhbmRsZXIiLCJsaXN0ZW5lciIsImJ1dHRvbiIsInN1cHBvcnRzUG9pbnRlckV2ZW50cyIsIm9ucG9pbnRlcmRvd24iLCJzdXBwb3J0c1RvdWNoRXZlbnRzIiwib250b3VjaHN0YXJ0Iiwic3VwcG9ydHNNb3VzZUV2ZW50cyIsIm9ubW91c2Vkb3duIiwibW91c2VFdmVudE5hbWVzIiwicG9pbnRlcmRvd24iLCJwb2ludGVybW92ZSIsInBvaW50ZXJ1cCIsInBvaW50ZXJjYW5jZWwiLCJwb2ludGVyb3ZlciIsInBvaW50ZXJvdXQiLCJwb2ludGVyZW50ZXIiLCJwb2ludGVybGVhdmUiLCJ0b3VjaEV2ZW50TmFtZXMiLCJnZXRQb2ludGVyRXZlbnROYW1lIiwiYWRkUG9pbnRlckV2ZW50IiwidXNlUG9pbnRlckV2ZW50IiwiY3JlYXRlTG9jayIsImxvY2siLCJnbG9iYWxIb3Jpem9udGFsTG9jayIsImdsb2JhbFZlcnRpY2FsTG9jayIsImdldEdsb2JhbExvY2siLCJvcGVuSG9yaXpvbnRhbF8xIiwib3BlblZlcnRpY2FsXzEiLCJpc0RyYWdBY3RpdmUiLCJvcGVuR2VzdHVyZUxvY2siLCJjcmVhdGVIb3ZlckV2ZW50IiwiaXNBY3RpdmUiLCJpbmZvIiwic2V0QWN0aXZlIiwiSG92ZXIiLCJpc05vZGVPckNoaWxkIiwicGFyZW50RWxlbWVudCIsImNvbWJpbmVGdW5jdGlvbnMiLCJwaXBlIiwidHJhbnNmb3JtZXJzIiwid2FybmVkIiwib2JzZXJ2ZXJDYWxsYmFja3MiLCJXZWFrTWFwIiwib2JzZXJ2ZXJzIiwiZmlyZU9ic2VydmVyQ2FsbGJhY2siLCJlbnRyeSIsImZpcmVBbGxPYnNlcnZlckNhbGxiYWNrcyIsImVudHJpZXMiLCJ0aHJlc2hvbGROYW1lcyIsImFsbCIsInVzZUludGVyc2VjdGlvbk9ic2VydmVyIiwic2hvdWxkT2JzZXJ2ZSIsInJvb3QiLCJyb290TWFyZ2luIiwiYW1vdW50Iiwib25jZSIsInRocmVzaG9sZCIsInJvb3RJbnRlcmVzZWN0aW9uT2JzZXJ2ZXIiLCJsb29rdXBSb290Iiwicm9vdE9ic2VydmVycyIsIkpTT04iLCJzdHJpbmdpZnkiLCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsImluaXRJbnRlcnNlY3Rpb25PYnNlcnZlciIsIm9ic2VydmUiLCJ1bm9ic2VydmUiLCJvYnNlcnZlSW50ZXJzZWN0aW9uIiwiZ2V0SW5zdGFuY2UiLCJpc0ludGVyc2VjdGluZyIsImlzSW5WaWV3IiwiaGFzRW50ZXJlZFZpZXciLCJJblZpZXciLCJvblZpZXdwb3J0RW50ZXIiLCJvblZpZXdwb3J0TGVhdmUiLCJ1c2VNaXNzaW5nSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJmYWxsYmFjayIsIm1lc3NhZ2UiLCJtYWtlUmVuZGVybGVzc0NvbXBvbmVudCIsImhvb2siLCJnZXN0dXJlQW5pbWF0aW9ucyIsIndoaWxlSW5WaWV3Iiwidmlld3BvcnQiLCJvblRhcCIsIm9uVGFwU3RhcnQiLCJvblRhcENhbmNlbCIsImhhc1ByZXNzTGlzdGVuZXJzIiwiaXNQcmVzc2luZyIsImNhbmNlbFBvaW50ZXJFbmRMaXN0ZW5lcnMiLCJldmVudE9wdGlvbnMiLCJvblBvaW50ZXJEb3duIiwicmVtb3ZlUG9pbnRlckVuZExpc3RlbmVyIiwiY2hlY2tQb2ludGVyRW5kIiwiVGFwIiwib25Qb2ludGVyVXAiLCJvblBvaW50ZXJDYW5jZWwiLCJGb2N1cyIsIm9uSG92ZXJTdGFydCIsIm9uSG92ZXJFbmQiLCJ1c2VQcmVzZW5jZSIsInNoYWxsb3dDb21wYXJlIiwicHJldiIsInByZXZMZW5ndGgiLCJzYWZlTWluIiwibWluRHVyYXRpb24iLCJtYXhEdXJhdGlvbiIsIm1pbkRhbXBpbmciLCJtYXhEYW1waW5nIiwicm9vdEl0ZXJhdGlvbnMiLCJjYWxjQW5ndWxhckZyZXEiLCJ1bmRhbXBlZEZyZXEiLCJkYW1waW5nUmF0aW8iLCJzcXJ0IiwiZHVyYXRpb25LZXlzIiwicGh5c2ljc0tleXMiLCJpc1NwcmluZ1R5cGUiLCJzcHJpbmciLCJyZXN0U3BlZWQiLCJyZXN0RGVsdGEiLCJzdGlmZm5lc3MiLCJkYW1waW5nIiwibWFzcyIsImR1cmF0aW9uIiwiaXNSZXNvbHZlZEZyb21EdXJhdGlvbiIsInNwcmluZ09wdGlvbnMiLCJkZXJpdmVkIiwiYm91bmNlIiwiZW52ZWxvcGUiLCJkZXJpdmF0aXZlIiwiZXhwb25lbnRpYWxEZWNheSIsImMiLCJleHAiLCJwb3ciLCJmIiwiZyIsImluaXRpYWxHdWVzcyIsInJlc3VsdCIsImFwcHJveGltYXRlUm9vdCIsImlzTmFOIiwiZmluZFNwcmluZyIsImdldFNwcmluZ09wdGlvbnMiLCJyZXNvbHZlU3ByaW5nIiwiemVybyIsInJlc29sdmVWZWxvY2l0eSIsImNyZWF0ZVNwcmluZyIsImluaXRpYWxWZWxvY2l0eSIsImluaXRpYWxEZWx0YSIsInVuZGFtcGVkQW5ndWxhckZyZXEiLCJhYnMiLCJhbmd1bGFyRnJlcSIsInNpbiIsImNvcyIsImRhbXBlZEFuZ3VsYXJGcmVxIiwiZnJlcUZvclQiLCJzaW5oIiwiY29zaCIsImlzQmVsb3dWZWxvY2l0eVRocmVzaG9sZCIsImlzQmVsb3dEaXNwbGFjZW1lbnRUaHJlc2hvbGQiLCJmbGlwVGFyZ2V0IiwibmVlZHNJbnRlcnBvbGF0aW9uIiwiX3QiLCJwcm9ncmVzcyIsInRvRnJvbURpZmZlcmVuY2UiLCJpc0NvbG9yU3RyaW5nIiwidGVzdFByb3AiLCJzcGxpdENvbG9yIiwiYU5hbWUiLCJiTmFtZSIsImNOYW1lIiwibWF0Y2giLCJjbGFtcFJnYlVuaXQiLCJyZ2JVbml0IiwicmdiYSIsInJlZCIsImdyZWVuIiwiYmx1ZSIsImFscGhhJDEiLCJoZXgiLCJzdWJzdHIiLCJwYXJzZUludCIsImhzbGEiLCJodWUiLCJzYXR1cmF0aW9uIiwibGlnaHRuZXNzIiwiaHVlVG9SZ2IiLCJxIiwiaHNsYVRvUmdiYSIsIm1peExpbmVhckNvbG9yIiwiZnJvbUV4cG8iLCJ0b0V4cG8iLCJjb2xvclR5cGVzIiwiZ2V0Q29sb3JUeXBlIiwiZmluZCIsIm5vdEFuaW1hdGFibGUiLCJjb2xvciIsIm1peENvbG9yIiwiZnJvbUNvbG9yVHlwZSIsInRvQ29sb3JUeXBlIiwiZnJvbUNvbG9yIiwidG9Db2xvciIsImJsZW5kZWQiLCJjb2xvclRva2VuIiwibnVtYmVyVG9rZW4iLCJhbmFseXNlIiwibnVtQ29sb3JzIiwiY29sb3JzIiwibnVtYmVycyIsInRva2VuaXNlZCIsImNyZWF0ZVRyYW5zZm9ybWVyIiwibnVtVmFsdWVzIiwib3V0cHV0IiwiY29udmVydE51bWJlcnNUb1plcm8iLCJjb21wbGV4IiwiZ2V0QW5pbWF0YWJsZU5vbmUiLCJwYXJzZWQiLCJ0cmFuc2Zvcm1lciIsImlzTnVtIiwiZ2V0TWl4ZXIiLCJtaXhDb21wbGV4IiwibWl4QXJyYXkiLCJibGVuZFZhbHVlIiwiZnJvbVRoaXMiLCJtaXhPYmplY3QiLCJudW1OdW1iZXJzIiwibnVtUkdCIiwibnVtSFNMIiwidGVtcGxhdGUiLCJvcmlnaW5TdGF0cyIsInRhcmdldFN0YXRzIiwibWl4TnVtYmVyIiwiaW50ZXJwb2xhdGUiLCJpbnB1dCIsImlzQ2xhbXAiLCJlYXNlIiwibWl4ZXIiLCJpbnB1dExlbmd0aCIsInJldmVyc2UiLCJtaXhlcnMiLCJjdXN0b21NaXhlciIsIm1peGVyRmFjdG9yeSIsIm51bU1peGVycyIsImVhc2luZ0Z1bmN0aW9uIiwiY3JlYXRlTWl4ZXJzIiwiaW50ZXJwb2xhdG9yIiwiZmFzdEludGVycG9sYXRlIiwibGFzdElucHV0SW5kZXgiLCJtaXhlckluZGV4IiwiZm91bmRNaXhlckluZGV4IiwicHJvZ3Jlc3NJblJhbmdlIiwic2xvd0ludGVycG9sYXRlIiwicmV2ZXJzZUVhc2luZyIsImVhc2luZyIsIm1pcnJvckVhc2luZyIsImNyZWF0ZUJhY2tJbiIsInBvd2VyIiwibGluZWFyIiwiZWFzZUluIiwiZWFzZU91dCIsImVhc2VJbk91dCIsImNpcmNJbiIsImFjb3MiLCJjaXJjT3V0IiwiY2lyY0luT3V0IiwiYmFja0luIiwiYmFja091dCIsImJhY2tJbk91dCIsImFudGljaXBhdGUiLCJiYWNrRWFzaW5nIiwiY3JlYXRlQW50aWNpcGF0ZSIsImJvdW5jZU91dCIsInAyIiwiYm91bmNlSW4iLCJkZWZhdWx0RWFzaW5nIiwia2V5ZnJhbWVzIiwidGltZXMiLCJjb252ZXJ0T2Zmc2V0VG9UaW1lcyIsIl92YWx1ZSIsImRlZmF1bHRPZmZzZXQiLCJjcmVhdGVJbnRlcnBvbGF0b3IiLCJ0eXBlcyIsInRpbWVDb25zdGFudCIsIm1vZGlmeVRhcmdldCIsImFtcGxpdHVkZSIsImlkZWFsIiwibG9vcEVsYXBzZWQiLCJlbGFwc2VkIiwiZGVsYXkiLCJmcmFtZXN5bmMiLCJ1cGRhdGUiLCJwYXNzVGltZXN0YW1wIiwic3RvcCIsImF1dG9wbGF5IiwiZHJpdmVyIiwicmVwZWF0IiwicmVwZWF0TWF4IiwicmVwZWF0VHlwZSIsInJlcGVhdERlbGF5Iiwib25QbGF5Iiwib25TdG9wIiwib25Db21wbGV0ZSIsIm9uUmVwZWF0Iiwib25VcGRhdGUiLCJkcml2ZXJDb250cm9scyIsImxhdGVzdCIsImludGVycG9sYXRlRnJvbU51bWJlciIsInJlcGVhdENvdW50IiwiY29tcHV0ZWREdXJhdGlvbiIsImlzQ29tcGxldGUiLCJpc0ZvcndhcmRQbGF5YmFjayIsImFuaW1hdG9yIiwiZGV0ZWN0QW5pbWF0aW9uRnJvbU9wdGlvbnMiLCJoYXNSZXBlYXREZWxheUVsYXBzZWQiLCJyZXZlcnNlRWxhcHNlZCIsInZlbG9jaXR5UGVyU2Vjb25kIiwiZnJhbWVEdXJhdGlvbiIsInNlY29uZHNUb01pbGxpc2Vjb25kcyIsInNlY29uZHMiLCJhMSIsImEyIiwiY2FsY0JlemllciIsImdldFNsb3BlIiwic3ViZGl2aXNpb25QcmVjaXNpb24iLCJzdWJkaXZpc2lvbk1heEl0ZXJhdGlvbnMiLCJuZXd0b25JdGVyYXRpb25zIiwibmV3dG9uTWluU2xvcGUiLCJrU3BsaW5lVGFibGVTaXplIiwia1NhbXBsZVN0ZXBTaXplIiwiY3ViaWNCZXppZXIiLCJtWDEiLCJtWTEiLCJtWDIiLCJtWTIiLCJzYW1wbGVWYWx1ZXMiLCJGbG9hdDMyQXJyYXkiLCJhWCIsImludGVydmFsU3RhcnQiLCJjdXJyZW50U2FtcGxlIiwibGFzdFNhbXBsZSIsImd1ZXNzRm9yVCIsImluaXRpYWxTbG9wZSIsImFHdWVzc1QiLCJjdXJyZW50U2xvcGUiLCJuZXd0b25SYXBoc29uSXRlcmF0ZSIsImFBIiwiYUIiLCJjdXJyZW50WCIsImN1cnJlbnRUIiwiYmluYXJ5U3ViZGl2aWRlIiwiZ2V0VEZvclgiLCJlYXNpbmdMb29rdXAiLCJib3VuY2VJbk91dCIsImVhc2luZ0RlZmluaXRpb25Ub0Z1bmN0aW9uIiwiaXNFYXNpbmdBcnJheSIsImlzQW5pbWF0YWJsZSIsInVuZGVyRGFtcGVkU3ByaW5nIiwiY3JpdGljYWxseURhbXBlZFNwcmluZyIsImxpbmVhclR3ZWVuIiwiZGVmYXVsdFRyYW5zaXRpb25zIiwiYmFja2dyb3VuZENvbG9yIiwiZ2V0RGVmYXVsdFRyYW5zaXRpb24iLCJ2YWx1ZUtleSIsInRyYW5zaXRpb25GYWN0b3J5IiwibWF4RGVmYXVsdHMiLCJhcHBseURlZmF1bHRGaWx0ZXIiLCJkZWZhdWx0VmFsdWUiLCJmdW5jdGlvblJlZ2V4IiwiZmlsdGVyIiwiZnVuY3Rpb25zIiwiZGVmYXVsdFZhbHVlVHlwZXMiLCJvdXRsaW5lQ29sb3IiLCJmaWxsIiwic3Ryb2tlIiwiYm9yZGVyQ29sb3IiLCJib3JkZXJUb3BDb2xvciIsImJvcmRlclJpZ2h0Q29sb3IiLCJib3JkZXJCb3R0b21Db2xvciIsImJvcmRlckxlZnRDb2xvciIsIldlYmtpdEZpbHRlciIsImdldERlZmF1bHRWYWx1ZVR5cGUiLCJkZWZhdWx0VmFsdWVUeXBlIiwiaW5zdGFudEFuaW1hdGlvblN0YXRlIiwibGVnYWN5UmVwZWF0V2FybmluZyIsImdldEFuaW1hdGlvbiIsInZhbHVlVHJhbnNpdGlvbiIsImdldFZhbHVlVHJhbnNpdGlvbiIsImlzVGFyZ2V0QW5pbWF0YWJsZSIsImlzWmVybyIsImdldFplcm9Vbml0IiwiaXNPcmlnaW5BbmltYXRhYmxlIiwiYm91bmNlU3RpZmZuZXNzIiwiYm91bmNlRGFtcGluZyIsImN1cnJlbnRBbmltYXRpb24iLCJpc091dE9mQm91bmRzIiwiYm91bmRhcnlOZWFyZXN0Iiwic3RhcnRBbmltYXRpb24iLCJzdGFydFNwcmluZyIsImJvdW5kYXJ5IiwiaGVhZGluZyIsImNoZWNrQm91bmRhcnkiLCJpbmVydGlhIiwiaHlkcmF0ZUtleWZyYW1lcyIsIndoZW4iLCJkZWxheUNoaWxkcmVuIiwic3RhZ2dlckNoaWxkcmVuIiwic3RhZ2dlckRpcmVjdGlvbiIsImlzVHJhbnNpdGlvbkRlZmluZWQiLCJ5b3lvIiwiZmxpcCIsImxvb3AiLCJjb252ZXJ0VHJhbnNpdGlvblRvQW5pbWF0aW9uT3B0aW9ucyIsImdldFBvcG1vdGlvbkFuaW1hdGlvbk9wdGlvbnMiLCJmaW5hbFRhcmdldCIsInBvdGVudGlhbFVuaXRUeXBlIiwiZGVsYXlUaW1lciIsImNvbnRyb2xzIiwiZ2V0RGVsYXlGcm9tVHJhbnNpdGlvbiIsImNsZWFyVGltZW91dCIsImlzWmVyb1ZhbHVlU3RyaW5nIiwiYWRkVW5pcXVlSXRlbSIsImFyciIsIml0ZW0iLCJyZW1vdmVJdGVtIiwiU3Vic2NyaXB0aW9uTWFuYWdlciIsInN1YnNjcmlwdGlvbnMiLCJfdGhpcyIsIm5vdGlmeSIsIm51bVN1YnNjcmlwdGlvbnMiLCJnZXRTaXplIiwiaXNGbG9hdCIsIk1vdGlvblZhbHVlIiwidmVyc2lvbiIsInRpbWVEZWx0YSIsImxhc3RVcGRhdGVkIiwidXBkYXRlU3Vic2NyaWJlcnMiLCJ2ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzIiwicmVuZGVyU3Vic2NyaWJlcnMiLCJjYW5UcmFja1ZlbG9jaXR5IiwidXBkYXRlQW5kTm90aWZ5Iiwic2NoZWR1bGVWZWxvY2l0eUNoZWNrIiwidmVsb2NpdHlDaGVjayIsImhhc0FuaW1hdGVkIiwib25DaGFuZ2UiLCJzdWJzY3JpcHRpb24iLCJjbGVhckxpc3RlbmVycyIsIm9uUmVuZGVyUmVxdWVzdCIsImF0dGFjaCIsInBhc3NpdmVFZmZlY3QiLCJnZXRQcmV2aW91cyIsIlByb21pc2UiLCJyZXNvbHZlIiwic3RvcEFuaW1hdGlvbiIsInRoZW4iLCJjbGVhckFuaW1hdGlvbiIsImlzQW5pbWF0aW5nIiwiZGVzdHJveSIsIm1vdGlvblZhbHVlIiwidGVzdFZhbHVlVHlwZSIsImRpbWVuc2lvblZhbHVlVHlwZXMiLCJmaW5kRGltZW5zaW9uVmFsdWVUeXBlIiwidmFsdWVUeXBlcyIsImZpbmRWYWx1ZVR5cGUiLCJzZXRNb3Rpb25WYWx1ZSIsImhhc1ZhbHVlIiwiZ2V0VmFsdWUiLCJhZGRWYWx1ZSIsImdldE9yaWdpbkZyb21UcmFuc2l0aW9uIiwiYW5pbWF0ZVZhcmlhbnQiLCJ2YXJpYW50IiwidHJhbnNpdGlvbk92ZXJyaWRlIiwiYW5pbWF0ZVRhcmdldCIsImdldENoaWxkQW5pbWF0aW9ucyIsInZhcmlhbnRDaGlsZHJlbiIsImZvcndhcmREZWxheSIsImFuaW1hdGlvbnMiLCJtYXhTdGFnZ2VyRHVyYXRpb24iLCJnZW5lcmF0ZVN0YWdnZXJEdXJhdGlvbiIsInNvcnRCeVRyZWVPcmRlciIsIm5vdGlmeUFuaW1hdGlvbkNvbXBsZXRlIiwiYW5pbWF0ZUNoaWxkcmVuIiwiZmlyc3QiLCJsYXN0IiwiX2UiLCJtYWtlVGFyZ2V0QW5pbWF0YWJsZSIsIl9mIiwiYW5pbWF0aW9uVHlwZVN0YXRlIiwiZ2V0U3RhdGUiLCJzaG91bGRCbG9ja0FuaW1hdGlvbiIsInNldFRhcmdldCIsInNvcnROb2RlUG9zaXRpb24iLCJwcm90ZWN0ZWRLZXlzIiwibmVlZHNBbmltYXRpbmciLCJzaG91bGRCbG9jayIsInZhcmlhbnRQcmlvcml0eU9yZGVyIiwiQW5pbWF0ZSIsIkRyYWciLCJFeGl0IiwicmV2ZXJzZVByaW9yaXR5T3JkZXIiLCJudW1BbmltYXRpb25UeXBlcyIsImNyZWF0ZUFuaW1hdGlvblN0YXRlIiwibm90aWZ5QW5pbWF0aW9uU3RhcnQiLCJyZXNvbHZlZERlZmluaXRpb24iLCJhbmltYXRlVmlzdWFsRWxlbWVudCIsImFuaW1hdGVMaXN0IiwiY3JlYXRlVHlwZVN0YXRlIiwiYWxsQW5pbWF0ZWRLZXlzIiwiYnVpbGRSZXNvbHZlZFR5cGVWYWx1ZXMiLCJjaGFuZ2VkQWN0aXZlVHlwZSIsImdldFZhcmlhbnRDb250ZXh0IiwicmVtb3ZlZEtleXMiLCJlbmNvdW50ZXJlZEtleXMiLCJyZW1vdmVkVmFyaWFudEluZGV4IiwiSW5maW5pdHkiLCJfbG9vcF8xIiwidHlwZVN0YXRlIiwicHJvcElzVmFyaWFudCIsImFjdGl2ZURlbHRhIiwiaXNJbmhlcml0ZWQiLCJtYW51YWxseUFuaW1hdGVPbk1vdW50IiwicHJldlByb3AiLCJ2YXJpYW50RGlkQ2hhbmdlIiwiY2hlY2tWYXJpYW50c0RpZENoYW5nZSIsInNob3VsZEFuaW1hdGVUeXBlIiwiZGVmaW5pdGlvbkxpc3QiLCJyZXNvbHZlZFZhbHVlcyIsInByZXZSZXNvbHZlZFZhbHVlcyIsImFsbEtleXMiLCJtYXJrVG9BbmltYXRlIiwiZmFsbGJhY2tBbmltYXRpb25fMSIsImZhbGxiYWNrVGFyZ2V0IiwiZ2V0QmFzZVRhcmdldCIsInNob3VsZEFuaW1hdGUiLCJpc0FuaW1hdGVkIiwic2V0QW5pbWF0ZUZ1bmN0aW9uIiwibWFrZUFuaW1hdG9yIiwic3Vic2NyaWJlIiwic2FmZVRvUmVtb3ZlIiwiaXNQb2ludCIsImlzUG9pbnQzRCIsImRpc3RhbmNlMUQiLCJ4RGVsdGEiLCJ5RGVsdGEiLCJ6RGVsdGEiLCJQYW5TZXNzaW9uIiwiaGFuZGxlcnMiLCJzdGFydEV2ZW50IiwibGFzdE1vdmVFdmVudCIsImxhc3RNb3ZlRXZlbnRJbmZvIiwidXBkYXRlUG9pbnQiLCJnZXRQYW5JbmZvIiwiaGlzdG9yeSIsImlzUGFuU3RhcnRlZCIsImlzRGlzdGFuY2VQYXN0VGhyZXNob2xkIiwib25TdGFydCIsIm9uTW92ZSIsImhhbmRsZVBvaW50ZXJNb3ZlIiwidHJhbnNmb3JtUG9pbnQiLCJidXR0b25zIiwiaGFuZGxlUG9pbnRlclVwIiwiZW5kIiwib25FbmQiLCJvblNlc3Npb25FbmQiLCJwYW5JbmZvIiwiaW5pdGlhbEluZm8iLCJvblNlc3Npb25TdGFydCIsInJlbW92ZUxpc3RlbmVycyIsInVwZGF0ZUhhbmRsZXJzIiwic3VidHJhY3RQb2ludCIsImxhc3REZXZpY2VQb2ludCIsInN0YXJ0RGV2aWNlUG9pbnQiLCJ0aW1lc3RhbXBlZFBvaW50IiwibGFzdFBvaW50IiwidGltZSIsImNhbGNMZW5ndGgiLCJheGlzIiwiaXNOZWFyIiwibWF4RGlzdGFuY2UiLCJjYWxjQXhpc0RlbHRhIiwib3JpZ2luUG9pbnQiLCJ0cmFuc2xhdGUiLCJjYWxjQm94RGVsdGEiLCJjYWxjUmVsYXRpdmVBeGlzIiwicmVsYXRpdmUiLCJjYWxjUmVsYXRpdmVBeGlzUG9zaXRpb24iLCJjYWxjUmVsYXRpdmVQb3NpdGlvbiIsImNhbGNSZWxhdGl2ZUF4aXNDb25zdHJhaW50cyIsImNhbGNWaWV3cG9ydEF4aXNDb25zdHJhaW50cyIsImxheW91dEF4aXMiLCJjb25zdHJhaW50c0F4aXMiLCJkZWZhdWx0RWxhc3RpYyIsInJlc29sdmVBeGlzRWxhc3RpYyIsImRyYWdFbGFzdGljIiwibWluTGFiZWwiLCJtYXhMYWJlbCIsInJlc29sdmVQb2ludEVsYXN0aWMiLCJsYWJlbCIsImNyZWF0ZURlbHRhIiwiY3JlYXRlQm94IiwiZWFjaEF4aXMiLCJjb252ZXJ0Qm91bmRpbmdCb3hUb0JveCIsImlzSWRlbnRpdHlTY2FsZSIsImhhc1NjYWxlIiwiaGFzVHJhbnNsYXRlIiwic2NhbGVQb2ludCIsImFwcGx5UG9pbnREZWx0YSIsImJveFNjYWxlIiwiYXBwbHlBeGlzRGVsdGEiLCJhcHBseUJveERlbHRhIiwiYm94IiwidHJhbnNsYXRlQXhpcyIsInRyYW5zZm9ybUF4aXMiLCJ0cmFuc2Zvcm1zIiwic2NhbGVLZXkiLCJvcmlnaW5LZXkiLCJheGlzT3JpZ2luIiwieEtleXMiLCJ5S2V5cyIsInRyYW5zZm9ybUJveCIsIm1lYXN1cmVWaWV3cG9ydEJveCIsInRvcExlZnQiLCJib3R0b21SaWdodCIsInRyYW5zZm9ybUJveFBvaW50cyIsImVsZW1lbnREcmFnQ29udHJvbHMiLCJWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzIiwib3Blbkdsb2JhbExvY2siLCJpc0RyYWdnaW5nIiwiY3VycmVudERpcmVjdGlvbiIsImNvbnN0cmFpbnRzIiwiaGFzTXV0YXRlZENvbnN0cmFpbnRzIiwiZWxhc3RpYyIsIm9yaWdpbkV2ZW50Iiwic25hcFRvQ3Vyc29yIiwicGFuU2Vzc2lvbiIsImRyYWdQcm9wYWdhdGlvbiIsIm9uRHJhZ1N0YXJ0IiwicmVzb2x2ZUNvbnN0cmFpbnRzIiwiaXNBbmltYXRpb25CbG9ja2VkIiwiZ2V0QXhpc01vdGlvblZhbHVlIiwibWVhc3VyZWRBeGlzIiwiYWN0dWFsIiwiZHJhZ0RpcmVjdGlvbkxvY2siLCJvbkRpcmVjdGlvbkxvY2siLCJvbkRyYWciLCJsb2NrVGhyZXNob2xkIiwiZGlyZWN0aW9uIiwiZ2V0Q3VycmVudERpcmVjdGlvbiIsInVwZGF0ZUF4aXMiLCJnZXRUcmFuc2Zvcm1QYWdlUG9pbnQiLCJvbkRyYWdFbmQiLCJfcG9pbnQiLCJzaG91bGREcmFnIiwiYXhpc1ZhbHVlIiwicHJldkNvbnN0cmFpbnRzIiwicmVzb2x2ZVJlZkNvbnN0cmFpbnRzIiwibGF5b3V0Qm94IiwiY2FsY1JlbGF0aXZlQ29uc3RyYWludHMiLCJyZXNvbHZlRHJhZ0VsYXN0aWMiLCJyZWxhdGl2ZUNvbnN0cmFpbnRzIiwicmViYXNlQXhpc0NvbnN0cmFpbnRzIiwib25NZWFzdXJlRHJhZ0NvbnN0cmFpbnRzIiwiY29uc3RyYWludHNFbGVtZW50IiwiY29uc3RyYWludHNCb3giLCJyb290UHJvamVjdGlvbk5vZGUiLCJ2aWV3cG9ydEJveCIsInNjcm9sbCIsIm1lYXN1cmVQYWdlQm94IiwibWVhc3VyZWRDb25zdHJhaW50cyIsImNhbGNWaWV3cG9ydENvbnN0cmFpbnRzIiwidXNlckNvbnN0cmFpbnRzIiwiY29udmVydEJveFRvQm91bmRpbmdCb3giLCJkcmFnTW9tZW50dW0iLCJkcmFnVHJhbnNpdGlvbiIsImRyYWdTbmFwVG9PcmlnaW4iLCJvbkRyYWdUcmFuc2l0aW9uRW5kIiwibW9tZW50dW1BbmltYXRpb25zIiwic3RhcnRBeGlzVmFsdWVBbmltYXRpb24iLCJkcmFnS2V5Iiwic2NhbGVQb3NpdGlvbldpdGhpbkNvbnN0cmFpbnRzIiwiYm94UHJvZ3Jlc3MiLCJzb3VyY2VMZW5ndGgiLCJ0YXJnZXRMZW5ndGgiLCJ1cGRhdGVTY3JvbGwiLCJ1cGRhdGVMYXlvdXQiLCJhZGRMaXN0ZW5lcnMiLCJzdG9wUG9pbnRlckxpc3RlbmVyIiwibWVhc3VyZURyYWdDb25zdHJhaW50cyIsInN0b3BNZWFzdXJlTGF5b3V0TGlzdGVuZXIiLCJzdG9wUmVzaXplTGlzdGVuZXIiLCJoYXNMYXlvdXRDaGFuZ2VkIiwib25QYW4iLCJvblBhblN0YXJ0Iiwib25QYW5FbmQiLCJvblBhblNlc3Npb25TdGFydCIsImhhc1BhbkV2ZW50cyIsImdyb3VwRHJhZ0NvbnRyb2xzIiwiZHJhZ0NvbnRyb2xzIiwibmFtZXMiLCJ0cmVlVHlwZSIsImJ1aWxkIiwicmVuZGVySW5zdGFuY2UiLCJyZWFkVmFsdWVGcm9tSW5zdGFuY2UiLCJyZW1vdmVWYWx1ZUZyb21SZW5kZXJTdGF0ZSIsInJlbW92ZUZyb21WYXJpYW50VHJlZSIsImxpZmVjeWNsZXMiLCJtYW5hZ2VycyIsInByb3BTdWJzY3JpcHRpb25zIiwiY2xlYXJBbGxMaXN0ZW5lcnMiLCJtYW5hZ2VyIiwidXBkYXRlUHJvcExpc3RlbmVycyIsIm9uIiwicHJvcExpc3RlbmVyIiwiYXJncyIsIl9pIiwiY3JlYXRlTGlmZWN5Y2xlcyIsInZhbHVlU3Vic2NyaXB0aW9ucyIsInByZXZNb3Rpb25WYWx1ZXMiLCJiYXNlVGFyZ2V0IiwidHJpZ2dlckJ1aWxkIiwibm90aWZ5VXBkYXRlIiwiYmluZFRvTW90aW9uVmFsdWUiLCJyZW1vdmVPbkNoYW5nZSIsImxhdGVzdFZhbHVlIiwicmVtb3ZlT25SZW5kZXJSZXF1ZXN0IiwiaW5pdGlhbE1vdGlvblZhbHVlcyIsImRlcHRoIiwiaXNWaXNpYmxlIiwibmV3SW5zdGFuY2UiLCJhZGRWYXJpYW50Q2hpbGQiLCJyZW1vdmUiLCJjbG9zZXN0VmFyaWFudE5vZGUiLCJnZXRDbG9zZXN0VmFyaWFudE5vZGUiLCJvdGhlciIsImdldExheW91dElkIiwiZ2V0U3RhdGljVmFsdWUiLCJzZXRTdGF0aWNWYWx1ZSIsInNldFZpc2liaWxpdHkiLCJ2aXNpYmlsaXR5IiwiY2FuTXV0YXRlIiwicmVtb3ZlVmFsdWUiLCJyZWFkVmFsdWUiLCJzZXRCYXNlVGFyZ2V0IiwibmV3UHJvcHMiLCJuZXh0VmFsdWUiLCJwcmV2VmFsdWUiLCJleGlzdGluZ1ZhbHVlIiwidXBkYXRlTW90aW9uVmFsdWVzRnJvbVByb3BzIiwiZ2V0VmFyaWFudCIsInN0YXJ0QXRQYXJlbnQiLCJjb250ZXh0XzEiLCJudW1WYXJpYW50UHJvcHMiLCJ2YXJpYW50UHJvcHMiLCJjc3NWYXJpYWJsZVJlZ2V4IiwibWF4RGVwdGgiLCJnZXRWYXJpYWJsZVZhbHVlIiwiZXhlYyIsInBhcnNlQ1NTVmFyaWFibGUiLCJ0b2tlbiIsImdldENvbXB1dGVkU3R5bGUiLCJnZXRQcm9wZXJ0eVZhbHVlIiwiQm91bmRpbmdCb3hEaW1lbnNpb24iLCJwb3NpdGlvbmFsS2V5cyIsImlzUG9zaXRpb25hbEtleSIsInNldEFuZFJlc2V0VmVsb2NpdHkiLCJpc051bU9yUHhUeXBlIiwiZ2V0UG9zRnJvbU1hdHJpeCIsIm1hdHJpeCIsInBvcyIsImdldFRyYW5zbGF0ZUZyb21NYXRyaXgiLCJwb3MyIiwicG9zMyIsIl9iYm94IiwibWF0cml4M2QiLCJub25UcmFuc2xhdGlvbmFsVHJhbnNmb3JtS2V5cyIsInBvc2l0aW9uYWxWYWx1ZXMiLCJwYXJzZURvbVZhcmlhbnQiLCJFbGVtZW50IiwicmVzb2x2ZUNTU1ZhcmlhYmxlcyIsImhhc1Bvc2l0aW9uYWxLZXkiLCJ0YXJnZXRQb3NpdGlvbmFsS2V5cyIsInJlbW92ZWRUcmFuc2Zvcm1WYWx1ZXMiLCJoYXNBdHRlbXB0ZWRUb1JlbW92ZVRyYW5zZm9ybVZhbHVlcyIsImNoYW5nZWRWYWx1ZVR5cGVLZXlzIiwidG9UeXBlIiwiZnJvbVR5cGUiLCJudW1LZXlmcmFtZXMiLCJmcm9tSW5kZXgiLCJyZW1vdmVkVHJhbnNmb3JtcyIsInJlbW92ZU5vblRyYW5zbGF0aW9uYWxUcmFuc2Zvcm0iLCJzY3JvbGxZXzEiLCJwYWdlWU9mZnNldCIsImNvbnZlcnRlZFRhcmdldCIsImNoYW5nZWRLZXlzIiwib3JpZ2luQmJveCIsImVsZW1lbnRDb21wdXRlZFN0eWxlIiwiZGlzcGxheSIsInRhcmdldEJib3giLCJjb252ZXJ0Q2hhbmdlZFZhbHVlVHlwZXMiLCJzY3JvbGxUbyIsImNoZWNrQW5kQ29udmVydENoYW5nZWRWYWx1ZVR5cGVzIiwidW5pdENvbnZlcnNpb24iLCJodG1sQ29uZmlnIiwiZG9tRWxlbWVudCIsImRlZmF1bHRUeXBlIiwiY29tcHV0ZWRTdHlsZSIsImNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIiwicmVzZXRUcmFuc2Zvcm0iLCJyZXN0b3JlVHJhbnNmb3JtIiwibXV0YWJsZVN0YXRlIiwiZ2V0T3JpZ2luIiwibmV3VmFsdWVLZXlzIiwibnVtTmV3VmFsdWVzIiwidGFyZ2V0VmFsdWUiLCJjaGVja1RhcmdldEZvck5ld1ZhbHVlcyIsImh0bWxWaXN1YWxFbGVtZW50Iiwic3ZnVmlzdWFsRWxlbWVudCIsImdldEF0dHJpYnV0ZSIsIl9lbGVtZW50IiwicGl4ZWxzVG9QZXJjZW50IiwicGl4ZWxzIiwiY29ycmVjdEJvcmRlclJhZGl1cyIsImNvcnJlY3QiLCJub2RlIiwidmFyVG9rZW4iLCJjb3JyZWN0Qm94U2hhZG93IiwidHJlZVNjYWxlIiwicHJvamVjdGlvbkRlbHRhIiwib3JpZ2luYWwiLCJjb250YWluc0NTU1ZhcmlhYmxlcyIsImNzc1ZhcmlhYmxlcyIsInNoYWRvdyIsInhTY2FsZSIsInlTY2FsZSIsImF2ZXJhZ2VTY2FsZSIsImlfMSIsImNzc1ZhcmlhYmxlIiwiTWVhc3VyZUxheW91dFdpdGhDb250ZXh0IiwiY29tcG9uZW50RGlkTW91bnQiLCJjb3JyZWN0b3JzIiwibGF5b3V0R3JvdXAiLCJzd2l0Y2hMYXlvdXRHcm91cCIsImRlZmF1bHRTY2FsZUNvcnJlY3RvcnMiLCJncm91cCIsImRpZFVwZGF0ZSIsInByZXZQcm9wcyIsImxheW91dERlcGVuZGVuY3kiLCJ3aWxsVXBkYXRlIiwicHJvbW90ZSIsInJlbGVnYXRlIiwiZ2V0U3RhY2siLCJtZW1iZXJzIiwiaXNMZWFkIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJwcm9tb3RlQ29udGV4dCIsInNjaGVkdWxlQ2hlY2tBZnRlclVubW91bnQiLCJkZXJlZ2lzdGVyIiwiYXBwbHlUbyIsImJveFNoYWRvdyIsImxheW91dEZlYXR1cmVzIiwiYm9yZGVycyIsIm51bUJvcmRlcnMiLCJhc051bWJlciIsImlzUHgiLCJnZXRSYWRpdXMiLCJyYWRpdXNOYW1lIiwiZWFzZUNyb3NzZmFkZUluIiwiY29tcHJlc3MiLCJlYXNlQ3Jvc3NmYWRlT3V0IiwiY29weUF4aXNJbnRvIiwib3JpZ2luQXhpcyIsImNvcHlCb3hJbnRvIiwib3JpZ2luQm94IiwicmVtb3ZlUG9pbnREZWx0YSIsInJlbW92ZUF4aXNUcmFuc2Zvcm1zIiwic291cmNlQXhpcyIsInJlbW92ZUF4aXNEZWx0YSIsInJlbW92ZUJveFRyYW5zZm9ybXMiLCJzb3VyY2VCb3giLCJpc0F4aXNEZWx0YVplcm8iLCJpc0RlbHRhWmVybyIsImJveEVxdWFscyIsIk5vZGVTdGFjayIsInByZXZMZWFkIiwibGVhZCIsImluZGV4T2ZOb2RlIiwibWVtYmVyIiwicHJlc2VydmVGb2xsb3dPcGFjaXR5Iiwic2hvdyIsInJlc3VtZUZyb20iLCJwcmVzZXJ2ZU9wYWNpdHkiLCJzbmFwc2hvdCIsImFuaW1hdGlvblZhbHVlcyIsImlzU2hhcmVkIiwiaXNVcGRhdGluZyIsImlzTGF5b3V0RGlydHkiLCJjcm9zc2ZhZGUiLCJoaWRlIiwiZXhpdEFuaW1hdGlvbkNvbXBsZXRlIiwicmVzdW1pbmdGcm9tIiwicmVtb3ZlTGVhZFNuYXBzaG90IiwiaWRlbnRpdHlQcm9qZWN0aW9uIiwiYnVpbGRQcm9qZWN0aW9uVHJhbnNmb3JtIiwibGF0ZXN0VHJhbnNmb3JtIiwieFRyYW5zbGF0ZSIsInlUcmFuc2xhdGUiLCJlbGVtZW50U2NhbGVYIiwiZWxlbWVudFNjYWxlWSIsImNvbXBhcmVCeURlcHRoIiwiRmxhdFRyZWUiLCJpc0RpcnR5IiwiYW5pbWF0aW9uVGFyZ2V0IiwiY3JlYXRlUHJvamVjdGlvbk5vZGUiLCJhdHRhY2hSZXNpemVMaXN0ZW5lciIsImRlZmF1bHRQYXJlbnQiLCJtZWFzdXJlU2Nyb2xsIiwiY2hlY2tJc1Njcm9sbFJvb3QiLCJQcm9qZWN0aW9uTm9kZSIsImlzVHJlZUFuaW1hdGluZyIsInVwZGF0ZU1hbnVhbGx5QmxvY2tlZCIsInVwZGF0ZUJsb2NrZWRCeVJlc2l6ZSIsImlzU1ZHIiwibmVlZHNSZXNldCIsInNob3VsZFJlc2V0VHJhbnNmb3JtIiwiZXZlbnRIYW5kbGVycyIsInBvdGVudGlhbE5vZGVzIiwiY2hlY2tVcGRhdGVGYWlsZWQiLCJjbGVhckFsbFNuYXBzaG90cyIsInVwZGF0ZVByb2plY3Rpb24iLCJub2RlcyIsInJlc29sdmVUYXJnZXREZWx0YSIsImNhbGNQcm9qZWN0aW9uIiwiaGFzUHJvamVjdGVkIiwiYW5pbWF0aW9uUHJvZ3Jlc3MiLCJzaGFyZWROb2RlcyIsInBhdGgiLCJyZWdpc3RlclBvdGVudGlhbE5vZGUiLCJub3RpZnlMaXN0ZW5lcnMiLCJzdWJzY3JpcHRpb25NYW5hZ2VyIiwiaGFzTGlzdGVuZXJzIiwiU1ZHRWxlbWVudCIsInRhZ05hbWUiLCJ1bmJsb2NrVGltZW91dF8xIiwicmVzaXplVW5ibG9ja1VwZGF0ZV8xIiwiZmluaXNoQW5pbWF0aW9uIiwicmVnaXN0ZXJTaGFyZWROb2RlIiwiaGFzUmVsYXRpdmVUYXJnZXRDaGFuZ2VkIiwibmV3TGF5b3V0IiwiaXNUcmVlQW5pbWF0aW9uQmxvY2tlZCIsInJlbGF0aXZlVGFyZ2V0IiwibGF5b3V0VHJhbnNpdGlvbiIsImRlZmF1bHRMYXlvdXRUcmFuc2l0aW9uIiwiX2ciLCJvbkxheW91dEFuaW1hdGlvblN0YXJ0Iiwib25MYXlvdXRBbmltYXRpb25Db21wbGV0ZSIsInRhcmdldENoYW5nZWQiLCJ0YXJnZXRMYXlvdXQiLCJoYXNPbmx5UmVsYXRpdmVUYXJnZXRDaGFuZ2VkIiwic2V0QW5pbWF0aW9uT3JpZ2luIiwiYW5pbWF0aW9uT3B0aW9ucyIsInByZVJlbmRlciIsImJsb2NrVXBkYXRlIiwidW5ibG9ja1VwZGF0ZSIsImlzVXBkYXRlQmxvY2tlZCIsInN0YXJ0VXBkYXRlIiwicmVzZXRSb3RhdGlvbiIsInNob3VsZE5vdGlmeUxpc3RlbmVycyIsInByZXZUcmFuc2Zvcm1UZW1wbGF0ZVZhbHVlIiwidXBkYXRlU25hcHNob3QiLCJjbGVhck1lYXN1cmVtZW50cyIsIm1vdW50Tm9kZUVhcmx5IiwicmVzZXRUcmFuc2Zvcm1TdHlsZSIsIm5vdGlmeUxheW91dFVwZGF0ZSIsImNsZWFyU25hcHNob3QiLCJyZW1vdmVMZWFkU25hcHNob3RzIiwic2NoZWR1bGVVcGRhdGVQcm9qZWN0aW9uIiwibWVhc3VyZWQiLCJtZWFzdXJlIiwicmVtb3ZlVHJhbnNmb3JtIiwicmVtb3ZlRWxlbWVudFNjcm9sbCIsInJvdW5kQm94IiwicHJldkxheW91dCIsImxheW91dENvcnJlY3RlZCIsIm5vdGlmeUxheW91dE1lYXN1cmUiLCJpc1Njcm9sbFJvb3QiLCJpc1Jlc2V0UmVxdWVzdGVkIiwiaGFzUHJvamVjdGlvbiIsInRyYW5zZm9ybVRlbXBsYXRlVmFsdWUiLCJ0cmFuc2Zvcm1UZW1wbGF0ZUhhc0NoYW5nZWQiLCJib3hXaXRob3V0U2Nyb2xsIiwic2Nyb2xsXzEiLCJyb290U2Nyb2xsIiwiYXBwbHlUcmFuc2Zvcm0iLCJ0cmFuc2Zvcm1Pbmx5Iiwid2l0aFRyYW5zZm9ybXMiLCJib3hXaXRob3V0VHJhbnNmb3JtIiwic2V0VGFyZ2V0RGVsdGEiLCJ0YXJnZXREZWx0YSIsInJlbGF0aXZlUGFyZW50IiwiZ2V0Q2xvc2VzdFByb2plY3RpbmdQYXJlbnQiLCJyZWxhdGl2ZVRhcmdldE9yaWdpbiIsInRhcmdldFdpdGhUcmFuc2Zvcm1zIiwiYXR0ZW1wdFRvUmVzb2x2ZVJlbGF0aXZlVGFyZ2V0IiwicGVuZGluZ0FuaW1hdGlvbiIsImdldExlYWQiLCJ0cmVlUGF0aCIsImlzU2hhcmVkVHJhbnNpdGlvbiIsInRyZWVMZW5ndGgiLCJhcHBseVRyZWVEZWx0YXMiLCJwcm9qZWN0aW9uRGVsdGFXaXRoVHJhbnNmb3JtIiwicHJldlRyZWVTY2FsZVgiLCJwcmV2VHJlZVNjYWxlWSIsInByZXZQcm9qZWN0aW9uVHJhbnNmb3JtIiwicHJvamVjdGlvblRyYW5zZm9ybSIsIm5vdGlmeUFsbCIsInNuYXBzaG90TGF0ZXN0VmFsdWVzIiwibWl4ZWRWYWx1ZXMiLCJyZWxhdGl2ZUxheW91dCIsImlzU2hhcmVkTGF5b3V0QW5pbWF0aW9uIiwiaXNPbmx5TWVtYmVyIiwic2hvdWxkQ3Jvc3NmYWRlT3BhY2l0eSIsImhhc09wYWNpdHlDcm9zc2ZhZGUiLCJtaXhUYXJnZXREZWx0YSIsIm1peEF4aXNEZWx0YSIsIm1peEF4aXMiLCJmb2xsb3ciLCJvcGFjaXR5RXhpdCIsImJvcmRlckxhYmVsIiwiZm9sbG93UmFkaXVzIiwibGVhZFJhZGl1cyIsIm1peFZhbHVlcyIsImNvbXBsZXRlQW5pbWF0aW9uIiwiYXBwbHlUcmFuc2Zvcm1zVG9UYXJnZXQiLCJzaG91bGRQcmVzZXJ2ZUZvbGxvd09wYWNpdHkiLCJzdGFjayIsImdldFByZXZMZWFkIiwiaGFzUm90YXRlIiwicmVzZXRWYWx1ZXMiLCJzdHlsZXMiLCJwb2ludGVyRXZlbnRzIiwiZW1wdHlTdHlsZXMiLCJ2YWx1ZXNUb1JlbmRlciIsIl9oIiwiY29ycmVjdGVkIiwibnVtIiwicmVzZXRUcmVlIiwibGF5b3V0XzEiLCJtZWFzdXJlZExheW91dCIsImF4aXNTbmFwc2hvdCIsImxheW91dERlbHRhIiwidmlzdWFsRGVsdGEiLCJwYXJlbnRTbmFwc2hvdCIsInBhcmVudExheW91dCIsInJlbGF0aXZlU25hcHNob3QiLCJvbkJlZm9yZUxheW91dE1lYXN1cmUiLCJub3RpZnlCZWZvcmVMYXlvdXRNZWFzdXJlIiwic2VhcmNoTm9kZSIsInF1ZXJ5U2VsZWN0b3IiLCJyb3VuZEF4aXMiLCJEb2N1bWVudFByb2plY3Rpb25Ob2RlIiwiZG9jdW1lbnRFbGVtZW50Iiwic2Nyb2xsTGVmdCIsImJvZHkiLCJzY3JvbGxUb3AiLCJkb2N1bWVudE5vZGUiLCJwb3NpdGlvbiIsImZlYXR1cmVCdW5kbGUiLCJtb3Rpb24iLCJiYXNlQ29uZmlnIiwiQXBwUGF0aHMiLCJTSE9XUk9PTSIsIlNFTkRPVVRTIiwiU0VORE9VVFNfQ01TIiwiTUFSS0VUSU5HX0VOR0lORSIsIlVTRVJfTUFOQUdFTUVOVCIsIlRFTkFOVFMiLCJEQVNIQk9BUkQiLCJEQVNIQk9BUkRfQ1JFQVRFX1dPUktTUEFDRV9NT0RBTCIsIlRFTkFOVFNfVElFUl9XSURUSCIsIkFQUExJQ0FUSU9OU19USUVSX1dJRFRIIiwiTmF2aWdhdGlvblBvc2l0aW9uIiwiTmF2aWdhdGlvbkNvbnRleHQiLCJ1c2VOYXZpZ2F0aW9uQ29udGV4dCIsIk5hdmlnYXRpb25Db250ZXh0UHJvdmlkZXIiLCJpc09wZW4iLCJvbk5hdmlnYXRpb25DbG9zZSIsInRlbmFudElkIiwiVGVuYW50SWRDb250ZXh0Iiwidmlld1N0YXRlIiwic2V0Vmlld1N0YXRlIiwic2VsZWN0ZWRUZW5hbnRJZCIsImN1cnJlbnRQb3NpdGlvbiIsIkhJRERFTiIsInVzZXIiLCJhdXRoU2VydmljZSIsImNhblNpZ25PdXQiLCJBdXRoQ29udGV4dCIsInByZXZWaWV3U3RhdGUiLCJPUEVOIiwicmVmcmVzaFVzZXIiLCJoYXNNYXJrZXRpbmdFbmdpbmVBY2Nlc3MiLCJ1c2VySGFzQWNjZXNzIiwiUHJpdmlsZWdlcyIsImhhc1Nob3dyb29tQWNjZXNzIiwiaGFzU2VuZG91dHNBY2Nlc3MiLCJoYXNTZW5kb3V0c0Ntc0FjY2VzcyIsImhhc1VzZXJNYW5hZ2VtZW50QWNjZXNzIiwidXBkYXRlVmlld1N0YXRlIiwidmlld1N0YXRlVXBkYXRlIiwic2lnbk91dCIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiZ2VuZXJhdG9yIiwiUCIsInJlamVjdCIsImZ1bGZpbGxlZCIsInJlamVjdGVkIiwidG9nZ2xlVGVuYW50cyIsIkVYUEFOREVEIiwiY3R4IiwidXNlVGVuYW50cyIsImFwaSIsInVzZUFwaSIsInVybCIsImJhc2VVcmwiLCJURU5BTlRTX1NFUlZJQ0VfVVJMIiwiUkVBQ1RfQVBQX1RFTkFOVFNfU0VSVklDRV9VUkwiLCJFcnJvciIsImNyZWF0ZVVybCIsImNyZWF0ZVRlbmFudHNWaWV3VXJsIiwiZGF0YSIsInRlbmFudHMiLCJpc0xvYWRpbmciLCJ0ZW5hbnQiLCJJbWFnZSIsInNyYyIsImxvZ29VcmwiLCJvdXQiLCJ0bXAiLCJrIiwiaGVhZGVyIiwiZm9vdGVyIiwiY2xhc3NOYW1lIiwic2hvd0hlYWRlckJvcmRlciIsImhpZGRlbiIsImN1cnJlbnRUZW5hbnRJZCIsInNldEN1cnJlbnRUZW5hbnRJZCIsImlzUmVkaXJlY3RpbmciLCJzZXRJc1JlZGlyZWN0aW5nIiwiaGFuZGxlVW5sb2FkIiwiaGFuZGxlQ2xpY2siLCJsb2NhdGlvbiIsIm1hdGNoUGF0aCIsInBhdGhuYW1lIiwiQnV0dG9uIiwiYWxpZ24iLCJub0JvcmRlciIsIm5vU2hhZG93IiwiZGlzYWJsZWQiLCJvbkNsaWNrIiwiSWNvbiIsInRyYW5zcGFyZW50IiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJlbWFpbCIsIm9uQ2xvc2UiLCJDb25maXJtYXRpb25Nb2RhbCIsImJ1dHRvbnNSaWdodCIsInJvdW5kZWQiLCJpc0NyZWF0ZVRlbmFudE1vZGFsT3BlbiIsInNldElzQ3JlYXRlVGVuYW50TW9kYWxPcGVuIiwiRVhQQU5ERURfTkFWSUdBVElPTl9XSURUSCIsIkFOSU1BVElPTl9UUkFOU0lUSU9OIiwiQU5JTUFUSU9OX1ZBUklBTlRTIiwicG9ydGFsQ29udGFpbmVyIiwiQ29uc3VtZXIiLCJjcmVhdGVQb3J0YWwiLCJkaXYiLCJhbHQiLCJtZW51IiwiaXNOYXZpZ2F0aW9uT3BlbiIsInRvZ2dsZUlzTmF2aWdhdGlvbk9wZW4iLCJpbml0aWFsVmFsdWUiLCJzZXRWYWx1ZSIsIm5ld1ZhbHVlIiwidXNlVG9nZ2xlIiwiRnJhZ21lbnQiLCJJY29uQnV0dG9uIl0sInNvdXJjZVJvb3QiOiIifQ==
1
+ (()=>{"use strict";var t={n:e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return t.d(n,{a:n}),n},d:(e,n)=>{for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{APPLICATIONS_TIER_WIDTH:()=>Ka,AppPaths:()=>Za,Navigation:()=>ou,NavigationButton:()=>au,TENANTS_TIER_WIDTH:()=>qa});var n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},n(t,e)};function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}var o=function(){return o=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},o.apply(this,arguments)};function i(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(t);o<r.length;o++)e.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(t,r[o])&&(n[r[o]]=t[r[o]])}return n}function a(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var r,o,i=n.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(t){o={error:t}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}function s(t,e,n){if(n||2===arguments.length)for(var r,o=0,i=e.length;o<i;o++)!r&&o in e||(r||(r=Array.prototype.slice.call(e,0,o)),r[o]=e[o]);return t.concat(r||Array.prototype.slice.call(e))}Object.create,Object.create;const u=require("react");var l=t.n(u),c=("undefined"==typeof process||process.env,"production");const d=1/60*1e3,f="undefined"!=typeof performance?()=>performance.now():()=>Date.now(),p="undefined"!=typeof window?t=>window.requestAnimationFrame(t):t=>setTimeout((()=>t(f())),d);let v=!0,h=!1,m=!1;const g={delta:0,timestamp:0},y=["read","update","preRender","render","postRender"],E=y.reduce(((t,e)=>(t[e]=function(t){let e=[],n=[],r=0,o=!1,i=!1;const a=new WeakSet,s={schedule:(t,i=!1,s=!1)=>{const u=s&&o,l=u?e:n;return i&&a.add(t),-1===l.indexOf(t)&&(l.push(t),u&&o&&(r=e.length)),t},cancel:t=>{const e=n.indexOf(t);-1!==e&&n.splice(e,1),a.delete(t)},process:u=>{if(o)i=!0;else{if(o=!0,[e,n]=[n,e],n.length=0,r=e.length,r)for(let n=0;n<r;n++){const r=e[n];r(u),a.has(r)&&(s.schedule(r),t())}o=!1,i&&(i=!1,s.process(u))}}};return s}((()=>h=!0)),t)),{}),x=y.reduce(((t,e)=>{const n=E[e];return t[e]=(t,e=!1,r=!1)=>(h||P(),n.schedule(t,e,r)),t}),{}),b=y.reduce(((t,e)=>(t[e]=E[e].cancel,t)),{}),w=y.reduce(((t,e)=>(t[e]=()=>E[e].process(g),t)),{}),A=t=>E[t].process(g),S=t=>{h=!1,g.delta=v?d:Math.max(Math.min(t-g.timestamp,40),1),g.timestamp=t,m=!0,y.forEach(A),m=!1,h&&(v=!1,p(S))},P=()=>{h=!0,v=!0,m||p(S)},T=()=>g,C=x;var M="undefined"!=typeof document,V=M?u.useLayoutEffect:u.useEffect;function R(){var t=(0,u.useRef)(!1);return V((function(){return t.current=!0,function(){t.current=!1}}),[]),t}var O=(0,u.createContext)(null);function D(t){var e=(0,u.useRef)(null);return null===e.current&&(e.current=t()),e.current}var L=0,k=function(){return L++},N=function(){return D(k)},I=function(t){var e=t.children,n=t.initial,r=t.isPresent,o=t.onExitComplete,i=t.custom,a=t.presenceAffectsLayout,s=D(j),l=N(),c=(0,u.useMemo)((function(){return{id:l,initial:n,isPresent:r,custom:i,onExitComplete:function(t){var e,n;s.set(t,!0);try{for(var r=function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],r=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}(s.values()),i=r.next();!i.done;i=r.next())if(!i.value)return}catch(t){e={error:t}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(e)throw e.error}}null==o||o()},register:function(t){return s.set(t,!1),function(){return s.delete(t)}}}}),a?void 0:[r]);return(0,u.useMemo)((function(){s.forEach((function(t,e){return s.set(e,!1)}))}),[r]),u.useEffect((function(){!r&&!s.size&&(null==o||o())}),[r]),u.createElement(O.Provider,{value:c},e)};function j(){return new Map}var B=(0,u.createContext)({});function F(t){return(0,u.useEffect)((function(){return function(){return t()}}),[])}var U=function(t){return t.key||""},H=function(t){var e=t.children,n=t.custom,r=t.initial,o=void 0===r||r,i=t.onExitComplete,l=t.exitBeforeEnter,d=t.presenceAffectsLayout,f=void 0===d||d,p=a(function(){var t=R(),e=a((0,u.useState)(0),2),n=e[0],r=e[1],o=(0,u.useCallback)((function(){t.current&&r(n+1)}),[n]);return[(0,u.useCallback)((function(){return C.postRender(o)}),[o]),n]}(),1),v=p[0],h=(0,u.useContext)(B).forceRender;h&&(v=h);var m=R(),g=function(t){var e=[];return u.Children.forEach(t,(function(t){(0,u.isValidElement)(t)&&e.push(t)})),e}(e),y=g,E=new Set,x=(0,u.useRef)(y),b=(0,u.useRef)(new Map).current,w=(0,u.useRef)(!0);if(V((function(){w.current=!1,function(t,e){t.forEach((function(t){var n=U(t);e.set(n,t)}))}(g,b),x.current=y})),F((function(){w.current=!0,b.clear(),E.clear()})),w.current)return u.createElement(u.Fragment,null,y.map((function(t){return u.createElement(I,{key:U(t),isPresent:!0,initial:!!o&&void 0,presenceAffectsLayout:f},t)})));y=s([],a(y),!1);for(var A=x.current.map(U),S=g.map(U),P=A.length,T=0;T<P;T++){var M=A[T];-1===S.indexOf(M)&&E.add(M)}return l&&E.size&&(y=[]),E.forEach((function(t){if(-1===S.indexOf(t)){var e=b.get(t);if(e){var r=A.indexOf(t);y.splice(r,0,u.createElement(I,{key:U(e),isPresent:!1,onExitComplete:function(){b.delete(t),E.delete(t);var e=x.current.findIndex((function(e){return e.key===t}));if(x.current.splice(e,1),!E.size){if(x.current=g,!1===m.current)return;v(),i&&i()}},custom:n,presenceAffectsLayout:f},e))}}})),y=y.map((function(t){var e=t.key;return E.has(e)?t:u.createElement(I,{key:U(t),isPresent:!0,presenceAffectsLayout:f},t)})),"production"!==c&&l&&y.length>1&&console.warn("You're attempting to animate multiple children within AnimatePresence, but its exitBeforeEnter prop is set to true. This will lead to odd visual behaviour."),u.createElement(u.Fragment,null,E.size?y:y.map((function(t){return(0,u.cloneElement)(t)})))},_=function(t){return{isEnabled:function(e){return t.some((function(t){return!!e[t]}))}}},z={measureLayout:_(["layout","layoutId","drag"]),animation:_(["animate","exit","variants","whileHover","whileTap","whileFocus","whileDrag","whileInView"]),exit:_(["exit"]),drag:_(["drag","dragControls"]),focus:_(["whileFocus"]),hover:_(["whileHover","onHoverStart","onHoverEnd"]),tap:_(["whileTap","onTap","onTapStart","onTapCancel"]),pan:_(["onPan","onPanStart","onPanSessionStart","onPanEnd"]),inView:_(["whileInView","onViewportEnter","onViewportLeave"])},W=function(){},G=function(){},X=(0,u.createContext)({strict:!1}),Y=Object.keys(z),Z=Y.length,q=(0,u.createContext)({transformPagePoint:function(t){return t},isStatic:!1,reducedMotion:"never"}),K=(0,u.createContext)({}),$={current:null},Q=!1;function J(t,e,n,r){var o,i,s=(0,u.useContext)(X),l=(0,u.useContext)(K).visualElement,c=(0,u.useContext)(O),d=(!Q&&function(){if(Q=!0,M)if(window.matchMedia){var t=window.matchMedia("(prefers-reduced-motion)"),e=function(){return $.current=t.matches};t.addListener(e),e()}else $.current=!1}(),o=a((0,u.useState)($.current),1)[0],"never"!==(i=(0,u.useContext)(q).reducedMotion)&&("always"===i||o)),f=(0,u.useRef)(void 0);r||(r=s.renderer),!f.current&&r&&(f.current=r(t,{visualState:e,parent:l,props:n,presenceId:null==c?void 0:c.id,blockInitialAnimation:!1===(null==c?void 0:c.initial),shouldReduceMotion:d}));var p=f.current;return V((function(){null==p||p.syncRender()})),(0,u.useEffect)((function(){var t;null===(t=null==p?void 0:p.animationState)||void 0===t||t.animateChanges()})),V((function(){return function(){return null==p?void 0:p.notifyUnmount()}}),[]),p}function tt(t){return"object"==typeof t&&Object.prototype.hasOwnProperty.call(t,"current")}function et(t){return Array.isArray(t)}function nt(t){return"string"==typeof t||et(t)}function rt(t,e,n,r,o){var i;return void 0===r&&(r={}),void 0===o&&(o={}),"function"==typeof e&&(e=e(null!=n?n:t.custom,r,o)),"string"==typeof e&&(e=null===(i=t.variants)||void 0===i?void 0:i[e]),"function"==typeof e&&(e=e(null!=n?n:t.custom,r,o)),e}function ot(t,e,n){var r=t.getProps();return rt(r,e,null!=n?n:r.custom,function(t){var e={};return t.forEachValue((function(t,n){return e[n]=t.get()})),e}(t),function(t){var e={};return t.forEachValue((function(t,n){return e[n]=t.getVelocity()})),e}(t))}function it(t){var e;return"function"==typeof(null===(e=t.animate)||void 0===e?void 0:e.start)||nt(t.initial)||nt(t.animate)||nt(t.whileHover)||nt(t.whileDrag)||nt(t.whileTap)||nt(t.whileFocus)||nt(t.exit)}function at(t){return Boolean(it(t)||t.variants)}function st(t){return Array.isArray(t)?t.join(" "):t}var ut={hasAnimatedSinceResize:!0,hasEverUpdated:!1},lt=1,ct=(0,u.createContext)({}),dt=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.getSnapshotBeforeUpdate=function(){return this.updateProps(),null},e.prototype.componentDidUpdate=function(){},e.prototype.updateProps=function(){var t=this.props,e=t.visualElement,n=t.props;e&&e.setProps(n)},e.prototype.render=function(){return this.props.children},e}(u.Component);function ft(t){var e=t.preloadedFeatures,n=t.createVisualElement,r=t.projectionNodeConstructor,i=t.useRender,a=t.useVisualState,s=t.Component;return e&&function(t){for(var e in t)null!==t[e]&&("projectionNodeConstructor"===e?z.projectionNodeConstructor=t[e]:z[e].Component=t[e])}(e),(0,u.forwardRef)((function(t,l){var d=function(t){var e,n=t.layoutId,r=null===(e=(0,u.useContext)(B))||void 0===e?void 0:e.id;return r&&void 0!==n?r+"-"+n:n}(t);t=o(o({},t),{layoutId:d});var f=(0,u.useContext)(q),p=null,v=function(t){var e=function(t,e){if(it(t)){var n=t.initial,r=t.animate;return{initial:!1===n||nt(n)?n:void 0,animate:nt(r)?r:void 0}}return!1!==t.inherit?e:{}}(t,(0,u.useContext)(K)),n=e.initial,r=e.animate;return(0,u.useMemo)((function(){return{initial:n,animate:r}}),[st(n),st(r)])}(t),h=f.isStatic?void 0:D((function(){if(ut.hasEverUpdated)return lt++})),m=a(t,f.isStatic);return!f.isStatic&&M&&(v.visualElement=J(s,m,o(o({},f),t),n),function(t,e,n,r){var o,i=e.layoutId,a=e.layout,s=e.drag,l=e.dragConstraints,c=e.layoutScroll,d=(0,u.useContext)(ct);r&&n&&!(null==n?void 0:n.projection)&&(n.projection=new r(t,n.getLatestValues(),null===(o=n.parent)||void 0===o?void 0:o.projection),n.projection.setOptions({layoutId:i,layout:a,alwaysMeasureLayout:Boolean(s)||l&&tt(l),visualElement:n,scheduleRender:function(){return n.scheduleRender()},animationType:"string"==typeof a?a:"both",initialPromotionConfig:d,layoutScroll:c}))}(h,t,v.visualElement,r||z.projectionNodeConstructor),p=function(t,e,n){var r=[],i=(0,u.useContext)(X);if(!e)return null;"production"!==c&&n&&i.strict&&G(!1,"You have rendered a `motion` component within a `LazyMotion` component. This will break tree shaking. Import and render a `m` component instead.");for(var a=0;a<Z;a++){var s=Y[a],l=z[s],d=l.isEnabled,f=l.Component;d(t)&&f&&r.push(u.createElement(f,o({key:s},t,{visualElement:e})))}return r}(t,v.visualElement,e)),u.createElement(dt,{visualElement:v.visualElement,props:o(o({},f),t)},p,u.createElement(K.Provider,{value:v},i(s,t,h,function(t,e,n){return(0,u.useCallback)((function(r){var o;r&&(null===(o=t.mount)||void 0===o||o.call(t,r)),e&&(r?e.mount(r):e.unmount()),n&&("function"==typeof n?n(r):tt(n)&&(n.current=r))}),[e])}(m,v.visualElement,l),m,f.isStatic,v.visualElement)))}))}function pt(t){function e(e,n){return void 0===n&&(n={}),ft(t(e,n))}if("undefined"==typeof Proxy)return e;var n=new Map;return new Proxy(e,{get:function(t,r){return n.has(r)||n.set(r,e(r)),n.get(r)}})}var vt=["animate","circle","defs","desc","ellipse","g","image","line","filter","marker","mask","metadata","path","pattern","polygon","polyline","rect","stop","svg","switch","symbol","text","tspan","use","view"];function ht(t){return"string"==typeof t&&!t.includes("-")&&!!(vt.indexOf(t)>-1||/[A-Z]/.test(t))}var mt={},gt=["","X","Y","Z"],yt=["transformPerspective","x","y","z"];function Et(t,e){return yt.indexOf(t)-yt.indexOf(e)}["translate","scale","rotate","skew"].forEach((function(t){return gt.forEach((function(e){return yt.push(t+e)}))}));var xt=new Set(yt);function bt(t){return xt.has(t)}var wt=new Set(["originX","originY","originZ"]);function At(t){return wt.has(t)}function St(t,e){var n=e.layout,r=e.layoutId;return bt(t)||At(t)||(n||void 0!==r)&&(!!mt[t]||"opacity"===t)}var Pt=function(t){return Boolean(null!==t&&"object"==typeof t&&t.getVelocity)},Tt={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"};function Ct(t){return t.startsWith("--")}var Mt=function(t,e){return e&&"number"==typeof t?e.transform(t):t};const Vt=(t,e)=>n=>Math.max(Math.min(n,e),t),Rt=t=>t%1?Number(t.toFixed(5)):t,Ot=/(-)?([\d]*\.?[\d])+/g,Dt=/(#[0-9a-f]{6}|#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2,3}\s*\/*\s*[\d\.]+%?\))/gi,Lt=/^(#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2,3}\s*\/*\s*[\d\.]+%?\))$/i;function kt(t){return"string"==typeof t}const Nt=t=>({test:e=>kt(e)&&e.endsWith(t)&&1===e.split(" ").length,parse:parseFloat,transform:e=>`${e}${t}`}),It=Nt("deg"),jt=Nt("%"),Bt=Nt("px"),Ft=Nt("vh"),Ut=Nt("vw"),Ht=Object.assign(Object.assign({},jt),{parse:t=>jt.parse(t)/100,transform:t=>jt.transform(100*t)}),_t={test:t=>"number"==typeof t,parse:parseFloat,transform:t=>t},zt=Object.assign(Object.assign({},_t),{transform:Vt(0,1)}),Wt=Object.assign(Object.assign({},_t),{default:1});var Gt=o(o({},_t),{transform:Math.round}),Xt={borderWidth:Bt,borderTopWidth:Bt,borderRightWidth:Bt,borderBottomWidth:Bt,borderLeftWidth:Bt,borderRadius:Bt,radius:Bt,borderTopLeftRadius:Bt,borderTopRightRadius:Bt,borderBottomRightRadius:Bt,borderBottomLeftRadius:Bt,width:Bt,maxWidth:Bt,height:Bt,maxHeight:Bt,size:Bt,top:Bt,right:Bt,bottom:Bt,left:Bt,padding:Bt,paddingTop:Bt,paddingRight:Bt,paddingBottom:Bt,paddingLeft:Bt,margin:Bt,marginTop:Bt,marginRight:Bt,marginBottom:Bt,marginLeft:Bt,rotate:It,rotateX:It,rotateY:It,rotateZ:It,scale:Wt,scaleX:Wt,scaleY:Wt,scaleZ:Wt,skew:It,skewX:It,skewY:It,distance:Bt,translateX:Bt,translateY:Bt,translateZ:Bt,x:Bt,y:Bt,z:Bt,perspective:Bt,transformPerspective:Bt,opacity:zt,originX:Ht,originY:Ht,originZ:Bt,zIndex:Gt,fillOpacity:zt,strokeOpacity:zt,numOctaves:Gt};function Yt(t,e,n,r){var o,i=t.style,a=t.vars,s=t.transform,u=t.transformKeys,l=t.transformOrigin;u.length=0;var c=!1,d=!1,f=!0;for(var p in e){var v=e[p];if(Ct(p))a[p]=v;else{var h=Xt[p],m=Mt(v,h);if(bt(p)){if(c=!0,s[p]=m,u.push(p),!f)continue;v!==(null!==(o=h.default)&&void 0!==o?o:0)&&(f=!1)}else At(p)?(l[p]=m,d=!0):i[p]=m}}c?i.transform=function(t,e,n,r){var o=t.transform,i=t.transformKeys,a=e.enableHardwareAcceleration,s=void 0===a||a,u=e.allowTransformNone,l=void 0===u||u,c="";i.sort(Et);for(var d=!1,f=i.length,p=0;p<f;p++){var v=i[p];c+="".concat(Tt[v]||v,"(").concat(o[v],") "),"z"===v&&(d=!0)}return!d&&s?c+="translateZ(0)":c=c.trim(),r?c=r(o,n?"":c):l&&n&&(c="none"),c}(t,n,f,r):r?i.transform=r({},""):!e.transform&&i.transform&&(i.transform="none"),d&&(i.transformOrigin=function(t){var e=t.originX,n=void 0===e?"50%":e,r=t.originY,o=void 0===r?"50%":r,i=t.originZ,a=void 0===i?0:i;return"".concat(n," ").concat(o," ").concat(a)}(l))}var Zt=function(){return{style:{},transform:{},transformKeys:[],transformOrigin:{},vars:{}}};function qt(t,e,n){for(var r in e)Pt(e[r])||St(r,n)||(t[r]=e[r])}function Kt(t,e,n){var r={},i=function(t,e,n){var r={};return qt(r,t.style||{},t),Object.assign(r,function(t,e,n){var r=t.transformTemplate;return(0,u.useMemo)((function(){var t=Zt();Yt(t,e,{enableHardwareAcceleration:!n},r);var i=t.vars,a=t.style;return o(o({},i),a)}),[e])}(t,e,n)),t.transformValues&&(r=t.transformValues(r)),r}(t,e,n);return Boolean(t.drag)&&!1!==t.dragListener&&(r.draggable=!1,i.userSelect=i.WebkitUserSelect=i.WebkitTouchCallout="none",i.touchAction=!0===t.drag?"none":"pan-".concat("x"===t.drag?"y":"x")),r.style=i,r}var $t=new Set(["initial","animate","exit","style","variants","transition","transformTemplate","transformValues","custom","inherit","layout","layoutId","layoutDependency","onLayoutAnimationStart","onLayoutAnimationComplete","onLayoutMeasure","onBeforeLayoutMeasure","onAnimationStart","onAnimationComplete","onUpdate","onDragStart","onDrag","onDragEnd","onMeasureDragConstraints","onDirectionLock","onDragTransitionEnd","drag","dragControls","dragListener","dragConstraints","dragDirectionLock","dragSnapToOrigin","_dragX","_dragY","dragElastic","dragMomentum","dragPropagation","dragTransition","whileDrag","onPan","onPanStart","onPanEnd","onPanSessionStart","onTap","onTapStart","onTapCancel","onHoverStart","onHoverEnd","whileFocus","whileTap","whileHover","whileInView","onViewportEnter","onViewportLeave","viewport","layoutScroll"]);function Qt(t){return $t.has(t)}var Jt,te=function(t){return!Qt(t)};try{(Jt=require("@emotion/is-prop-valid").default)&&(te=function(t){return t.startsWith("on")?!Qt(t):Jt(t)})}catch(t){}function ee(t,e,n){return"string"==typeof t?t:Bt.transform(e+n*t)}var ne={offset:"stroke-dashoffset",array:"stroke-dasharray"},re={offset:"strokeDashoffset",array:"strokeDasharray"};function oe(t,e,n,r){var o=e.attrX,a=e.attrY,s=e.originX,u=e.originY,l=e.pathLength,c=e.pathSpacing,d=void 0===c?1:c,f=e.pathOffset,p=void 0===f?0:f;Yt(t,i(e,["attrX","attrY","originX","originY","pathLength","pathSpacing","pathOffset"]),n,r),t.attrs=t.style,t.style={};var v=t.attrs,h=t.style,m=t.dimensions;v.transform&&(m&&(h.transform=v.transform),delete v.transform),m&&(void 0!==s||void 0!==u||h.transform)&&(h.transformOrigin=function(t,e,n){var r=ee(e,t.x,t.width),o=ee(n,t.y,t.height);return"".concat(r," ").concat(o)}(m,void 0!==s?s:.5,void 0!==u?u:.5)),void 0!==o&&(v.x=o),void 0!==a&&(v.y=a),void 0!==l&&function(t,e,n,r,o){void 0===n&&(n=1),void 0===r&&(r=0),void 0===o&&(o=!0),t.pathLength=1;var i=o?ne:re;t[i.offset]=Bt.transform(-r);var a=Bt.transform(e),s=Bt.transform(n);t[i.array]="".concat(a," ").concat(s)}(v,l,d,p,!1)}var ie=function(){return o(o({},Zt()),{attrs:{}})};function ae(t,e){var n=(0,u.useMemo)((function(){var n=ie();return oe(n,e,{enableHardwareAcceleration:!1},t.transformTemplate),o(o({},n.attrs),{style:o({},n.style)})}),[e]);if(t.style){var r={};qt(r,t.style,t),n.style=o(o({},r),n.style)}return n}function se(t){return void 0===t&&(t=!1),function(e,n,r,i,a,s){var l=a.latestValues,c=(ht(e)?ae:Kt)(n,l,s),d=function(t,e,n){var r={};for(var o in t)(te(o)||!0===n&&Qt(o)||!e&&!Qt(o)||t.draggable&&o.startsWith("onDrag"))&&(r[o]=t[o]);return r}(n,"string"==typeof e,t),f=o(o(o({},d),c),{ref:i});return r&&(f["data-projection-id"]=r),(0,u.createElement)(e,f)}}var ue=/([a-z])([A-Z])/g,le=function(t){return t.replace(ue,"$1-$2").toLowerCase()};function ce(t,e,n,r){var o=e.style,i=e.vars;for(var a in Object.assign(t.style,o,r&&r.getProjectionStyles(n)),i)t.style.setProperty(a,i[a])}var de=new Set(["baseFrequency","diffuseConstant","kernelMatrix","kernelUnitLength","keySplines","keyTimes","limitingConeAngle","markerHeight","markerWidth","numOctaves","targetX","targetY","surfaceScale","specularConstant","specularExponent","stdDeviation","tableValues","viewBox","gradientTransform","pathLength"]);function fe(t,e,n,r){for(var o in ce(t,e,void 0,r),e.attrs)t.setAttribute(de.has(o)?o:le(o),e.attrs[o])}function pe(t){var e=t.style,n={};for(var r in e)(Pt(e[r])||St(r,t))&&(n[r]=e[r]);return n}function ve(t){var e=pe(t);for(var n in t)Pt(t[n])&&(e["x"===n||"y"===n?"attr"+n.toUpperCase():n]=t[n]);return e}function he(t){return"object"==typeof t&&"function"==typeof t.start}var me=function(t){return Array.isArray(t)},ge=function(t){return Boolean(t&&"object"==typeof t&&t.mix&&t.toValue)},ye=function(t){return me(t)?t[t.length-1]||0:t};function Ee(t){var e=Pt(t)?t.get():t;return ge(e)?e.toValue():e}function xe(t,e,n,r){var o=t.scrapeMotionValuesFromProps,i=t.createRenderState,a=t.onMount,s={latestValues:we(e,n,r,o),renderState:i()};return a&&(s.mount=function(t){return a(e,t,s)}),s}var be=function(t){return function(e,n){var r=(0,u.useContext)(K),o=(0,u.useContext)(O);return n?xe(t,e,r,o):D((function(){return xe(t,e,r,o)}))}};function we(t,e,n,r){var o={},a=!1===(null==n?void 0:n.initial),s=r(t);for(var u in s)o[u]=Ee(s[u]);var l=t.initial,c=t.animate,d=it(t),f=at(t);e&&f&&!d&&!1!==t.inherit&&(null!=l||(l=e.initial),null!=c||(c=e.animate));var p=a||!1===l,v=p?c:l;return v&&"boolean"!=typeof v&&!he(v)&&(Array.isArray(v)?v:[v]).forEach((function(e){var n=rt(t,e);if(n){var r=n.transitionEnd;n.transition;var a=i(n,["transitionEnd","transition"]);for(var s in a){var u=a[s];Array.isArray(u)&&(u=u[p?u.length-1:0]),null!==u&&(o[s]=u)}for(var s in r)o[s]=r[s]}})),o}var Ae,Se={useVisualState:be({scrapeMotionValuesFromProps:ve,createRenderState:ie,onMount:function(t,e,n){var r=n.renderState,o=n.latestValues;try{r.dimensions="function"==typeof e.getBBox?e.getBBox():e.getBoundingClientRect()}catch(t){r.dimensions={x:0,y:0,width:0,height:0}}oe(r,o,{enableHardwareAcceleration:!1},t.transformTemplate),fe(e,r)}})},Pe={useVisualState:be({scrapeMotionValuesFromProps:pe,createRenderState:Zt})};function Te(t,e,n,r){return void 0===r&&(r={passive:!0}),t.addEventListener(e,n,r),function(){return t.removeEventListener(e,n)}}function Ce(t,e,n,r){(0,u.useEffect)((function(){var o=t.current;if(n&&o)return Te(o,e,n,r)}),[t,e,n,r])}function Me(t){return"undefined"!=typeof PointerEvent&&t instanceof PointerEvent?!("mouse"!==t.pointerType):t instanceof MouseEvent}function Ve(t){return!!t.touches}!function(t){t.Animate="animate",t.Hover="whileHover",t.Tap="whileTap",t.Drag="whileDrag",t.Focus="whileFocus",t.InView="whileInView",t.Exit="exit"}(Ae||(Ae={}));var Re={pageX:0,pageY:0};function Oe(t,e){void 0===e&&(e="page");var n=t.touches[0]||t.changedTouches[0]||Re;return{x:n[e+"X"],y:n[e+"Y"]}}function De(t,e){return void 0===e&&(e="page"),{x:t[e+"X"],y:t[e+"Y"]}}function Le(t,e){return void 0===e&&(e="page"),{point:Ve(t)?Oe(t,e):De(t,e)}}var ke=function(t,e){void 0===e&&(e=!1);var n,r=function(e){return t(e,Le(e))};return e?(n=r,function(t){var e=t instanceof MouseEvent;(!e||e&&0===t.button)&&n(t)}):r},Ne=function(){return M&&null===window.onpointerdown},Ie=function(){return M&&null===window.ontouchstart},je=function(){return M&&null===window.onmousedown},Be={pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointercancel:"mousecancel",pointerover:"mouseover",pointerout:"mouseout",pointerenter:"mouseenter",pointerleave:"mouseleave"},Fe={pointerdown:"touchstart",pointermove:"touchmove",pointerup:"touchend",pointercancel:"touchcancel"};function Ue(t){return Ne()?t:Ie()?Fe[t]:je()?Be[t]:t}function He(t,e,n,r){return Te(t,Ue(e),ke(n,"pointerdown"===e),r)}function _e(t,e,n,r){return Ce(t,Ue(e),n&&ke(n,"pointerdown"===e),r)}function ze(t){var e=null;return function(){return null===e&&(e=t,function(){e=null})}}var We=ze("dragHorizontal"),Ge=ze("dragVertical");function Xe(t){var e=!1;if("y"===t)e=Ge();else if("x"===t)e=We();else{var n=We(),r=Ge();n&&r?e=function(){n(),r()}:(n&&n(),r&&r())}return e}function Ye(){var t=Xe(!0);return!t||(t(),!1)}function Ze(t,e,n){return function(r,o){var i;Me(r)&&!Ye()&&(null===(i=t.animationState)||void 0===i||i.setActive(Ae.Hover,e),null==n||n(r,o))}}var qe=function(t,e){return!!e&&(t===e||qe(t,e.parentElement))};const Ke=(t,e)=>n=>e(t(n)),$e=(...t)=>t.reduce(Ke);var Qe=new Set,Je=new WeakMap,tn=new WeakMap,en=function(t){var e;null===(e=Je.get(t.target))||void 0===e||e(t)},nn=function(t){t.forEach(en)};var rn={some:0,all:1};function on(t,e,n,r){var a=r.root,s=r.margin,l=r.amount,c=void 0===l?"some":l,d=r.once;(0,u.useEffect)((function(){if(t){var r={root:null==a?void 0:a.current,rootMargin:s,threshold:"number"==typeof c?c:rn[c]};return function(t,e,n){var r=function(t){var e=t.root,n=i(t,["root"]),r=e||document;tn.has(r)||tn.set(r,{});var a=tn.get(r),s=JSON.stringify(n);return a[s]||(a[s]=new IntersectionObserver(nn,o({root:e},n))),a[s]}(e);return Je.set(t,n),r.observe(t),function(){Je.delete(t),r.unobserve(t)}}(n.getInstance(),r,(function(t){var r,o=t.isIntersecting;if(e.isInView!==o&&(e.isInView=o,!d||o||!e.hasEnteredView)){o&&(e.hasEnteredView=!0),null===(r=n.animationState)||void 0===r||r.setActive(Ae.InView,o);var i=n.getProps(),a=o?i.onViewportEnter:i.onViewportLeave;null==a||a(t)}}))}}),[t,a,s,c])}function an(t,e,n,r){var o=r.fallback,i=void 0===o||o;(0,u.useEffect)((function(){var r;t&&i&&("production"!==c&&(r="IntersectionObserver not available on this device. whileInView animations will trigger on mount.",Qe.has(r)||(console.warn(r),Qe.add(r))),requestAnimationFrame((function(){var t;e.hasEnteredView=!0;var r=n.getProps().onViewportEnter;null==r||r(null),null===(t=n.animationState)||void 0===t||t.setActive(Ae.InView,!0)})))}),[t])}var sn=function(t){return function(e){return t(e),null}},un={inView:sn((function(t){var e=t.visualElement,n=t.whileInView,r=t.onViewportEnter,o=t.onViewportLeave,i=t.viewport,a=void 0===i?{}:i,s=(0,u.useRef)({hasEnteredView:!1,isInView:!1}),l=Boolean(n||r||o);a.once&&s.current.hasEnteredView&&(l=!1),("undefined"==typeof IntersectionObserver?an:on)(l,s.current,e,a)})),tap:sn((function(t){var e=t.onTap,n=t.onTapStart,r=t.onTapCancel,o=t.whileTap,i=t.visualElement,a=e||n||r||o,s=(0,u.useRef)(!1),l=(0,u.useRef)(null),c={passive:!(n||e||r||h)};function d(){var t;null===(t=l.current)||void 0===t||t.call(l),l.current=null}function f(){var t;return d(),s.current=!1,null===(t=i.animationState)||void 0===t||t.setActive(Ae.Tap,!1),!Ye()}function p(t,n){f()&&(qe(i.getInstance(),t.target)?null==e||e(t,n):null==r||r(t,n))}function v(t,e){f()&&(null==r||r(t,e))}function h(t,e){var r;d(),s.current||(s.current=!0,l.current=$e(He(window,"pointerup",p,c),He(window,"pointercancel",v,c)),null===(r=i.animationState)||void 0===r||r.setActive(Ae.Tap,!0),null==n||n(t,e))}_e(i,"pointerdown",a?h:void 0,c),F(d)})),focus:sn((function(t){var e=t.whileFocus,n=t.visualElement;Ce(n,"focus",e?function(){var t;null===(t=n.animationState)||void 0===t||t.setActive(Ae.Focus,!0)}:void 0),Ce(n,"blur",e?function(){var t;null===(t=n.animationState)||void 0===t||t.setActive(Ae.Focus,!1)}:void 0)})),hover:sn((function(t){var e=t.onHoverStart,n=t.onHoverEnd,r=t.whileHover,o=t.visualElement;_e(o,"pointerenter",e||r?Ze(o,!0,e):void 0,{passive:!e}),_e(o,"pointerleave",n||r?Ze(o,!1,n):void 0,{passive:!n})}))};function ln(){var t=(0,u.useContext)(O);if(null===t)return[!0,null];var e=t.isPresent,n=t.onExitComplete,r=t.register,o=N();return(0,u.useEffect)((function(){return r(o)}),[]),!e&&n?[!1,function(){return null==n?void 0:n(o)}]:[!0]}function cn(t,e){if(!Array.isArray(e))return!1;var n=e.length;if(n!==t.length)return!1;for(var r=0;r<n;r++)if(e[r]!==t[r])return!1;return!0}const dn=(t,e,n)=>Math.min(Math.max(n,t),e),fn=.001,pn=.01,vn=10,hn=.05,mn=1;const gn=12;function yn(t,e){return t*Math.sqrt(1-e*e)}const En=["duration","bounce"],xn=["stiffness","damping","mass"];function bn(t,e){return e.some((e=>void 0!==t[e]))}function wn(t){var{from:e=0,to:n=1,restSpeed:r=2,restDelta:o}=t,a=i(t,["from","to","restSpeed","restDelta"]);const s={done:!1,value:e};let{stiffness:u,damping:l,mass:c,velocity:d,duration:f,isResolvedFromDuration:p}=function(t){let e=Object.assign({velocity:0,stiffness:100,damping:10,mass:1,isResolvedFromDuration:!1},t);if(!bn(t,xn)&&bn(t,En)){const n=function({duration:t=800,bounce:e=.25,velocity:n=0,mass:r=1}){let o,i;W(t<=1e3*vn,"Spring duration must be 10 seconds or less");let a=1-e;a=dn(hn,mn,a),t=dn(pn,vn,t/1e3),a<1?(o=e=>{const r=e*a,o=r*t,i=r-n,s=yn(e,a),u=Math.exp(-o);return fn-i/s*u},i=e=>{const r=e*a*t,i=r*n+n,s=Math.pow(a,2)*Math.pow(e,2)*t,u=Math.exp(-r),l=yn(Math.pow(e,2),a);return(-o(e)+fn>0?-1:1)*((i-s)*u)/l}):(o=e=>Math.exp(-e*t)*((e-n)*t+1)-fn,i=e=>Math.exp(-e*t)*(t*t*(n-e)));const s=function(t,e,n){let r=n;for(let n=1;n<gn;n++)r-=t(r)/e(r);return r}(o,i,5/t);if(t*=1e3,isNaN(s))return{stiffness:100,damping:10,duration:t};{const e=Math.pow(s,2)*r;return{stiffness:e,damping:2*a*Math.sqrt(r*e),duration:t}}}(t);e=Object.assign(Object.assign(Object.assign({},e),n),{velocity:0,mass:1}),e.isResolvedFromDuration=!0}return e}(a),v=An,h=An;function m(){const t=d?-d/1e3:0,r=n-e,i=l/(2*Math.sqrt(u*c)),a=Math.sqrt(u/c)/1e3;if(void 0===o&&(o=Math.min(Math.abs(n-e)/100,.4)),i<1){const e=yn(a,i);v=o=>{const s=Math.exp(-i*a*o);return n-s*((t+i*a*r)/e*Math.sin(e*o)+r*Math.cos(e*o))},h=n=>{const o=Math.exp(-i*a*n);return i*a*o*(Math.sin(e*n)*(t+i*a*r)/e+r*Math.cos(e*n))-o*(Math.cos(e*n)*(t+i*a*r)-e*r*Math.sin(e*n))}}else if(1===i)v=e=>n-Math.exp(-a*e)*(r+(t+a*r)*e);else{const e=a*Math.sqrt(i*i-1);v=o=>{const s=Math.exp(-i*a*o),u=Math.min(e*o,300);return n-s*((t+i*a*r)*Math.sinh(u)+e*r*Math.cosh(u))/e}}}return m(),{next:t=>{const e=v(t);if(p)s.done=t>=f;else{const i=1e3*h(t),a=Math.abs(i)<=r,u=Math.abs(n-e)<=o;s.done=a&&u}return s.value=s.done?n:e,s},flipTarget:()=>{d=-d,[e,n]=[n,e],m()}}}wn.needsInterpolation=(t,e)=>"string"==typeof t||"string"==typeof e;const An=t=>0,Sn=(t,e,n)=>{const r=e-t;return 0===r?1:(n-t)/r},Pn=(t,e,n)=>-n*t+n*e+t,Tn=(t,e)=>n=>Boolean(kt(n)&&Lt.test(n)&&n.startsWith(t)||e&&Object.prototype.hasOwnProperty.call(n,e)),Cn=(t,e,n)=>r=>{if(!kt(r))return r;const[o,i,a,s]=r.match(Ot);return{[t]:parseFloat(o),[e]:parseFloat(i),[n]:parseFloat(a),alpha:void 0!==s?parseFloat(s):1}},Mn=Vt(0,255),Vn=Object.assign(Object.assign({},_t),{transform:t=>Math.round(Mn(t))}),Rn={test:Tn("rgb","red"),parse:Cn("red","green","blue"),transform:({red:t,green:e,blue:n,alpha:r=1})=>"rgba("+Vn.transform(t)+", "+Vn.transform(e)+", "+Vn.transform(n)+", "+Rt(zt.transform(r))+")"},On={test:Tn("#"),parse:function(t){let e="",n="",r="",o="";return t.length>5?(e=t.substr(1,2),n=t.substr(3,2),r=t.substr(5,2),o=t.substr(7,2)):(e=t.substr(1,1),n=t.substr(2,1),r=t.substr(3,1),o=t.substr(4,1),e+=e,n+=n,r+=r,o+=o),{red:parseInt(e,16),green:parseInt(n,16),blue:parseInt(r,16),alpha:o?parseInt(o,16)/255:1}},transform:Rn.transform},Dn={test:Tn("hsl","hue"),parse:Cn("hue","saturation","lightness"),transform:({hue:t,saturation:e,lightness:n,alpha:r=1})=>"hsla("+Math.round(t)+", "+jt.transform(Rt(e))+", "+jt.transform(Rt(n))+", "+Rt(zt.transform(r))+")"};function Ln(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t}function kn({hue:t,saturation:e,lightness:n,alpha:r}){t/=360,n/=100;let o=0,i=0,a=0;if(e/=100){const r=n<.5?n*(1+e):n+e-n*e,s=2*n-r;o=Ln(s,r,t+1/3),i=Ln(s,r,t),a=Ln(s,r,t-1/3)}else o=i=a=n;return{red:Math.round(255*o),green:Math.round(255*i),blue:Math.round(255*a),alpha:r}}const Nn=(t,e,n)=>{const r=t*t,o=e*e;return Math.sqrt(Math.max(0,n*(o-r)+r))},In=[On,Rn,Dn],jn=t=>In.find((e=>e.test(t))),Bn=t=>`'${t}' is not an animatable color. Use the equivalent color code instead.`,Fn=(t,e)=>{let n=jn(t),r=jn(e);G(!!n,Bn(t)),G(!!r,Bn(e));let o=n.parse(t),i=r.parse(e);n===Dn&&(o=kn(o),n=Rn),r===Dn&&(i=kn(i),r=Rn);const a=Object.assign({},o);return t=>{for(const e in a)"alpha"!==e&&(a[e]=Nn(o[e],i[e],t));return a.alpha=Pn(o.alpha,i.alpha,t),n.transform(a)}},Un={test:t=>Rn.test(t)||On.test(t)||Dn.test(t),parse:t=>Rn.test(t)?Rn.parse(t):Dn.test(t)?Dn.parse(t):On.parse(t),transform:t=>kt(t)?t:t.hasOwnProperty("red")?Rn.transform(t):Dn.transform(t)},Hn="${c}",_n="${n}";function zn(t){"number"==typeof t&&(t=`${t}`);const e=[];let n=0;const r=t.match(Dt);r&&(n=r.length,t=t.replace(Dt,Hn),e.push(...r.map(Un.parse)));const o=t.match(Ot);return o&&(t=t.replace(Ot,_n),e.push(...o.map(_t.parse))),{values:e,numColors:n,tokenised:t}}function Wn(t){return zn(t).values}function Gn(t){const{values:e,numColors:n,tokenised:r}=zn(t),o=e.length;return t=>{let e=r;for(let r=0;r<o;r++)e=e.replace(r<n?Hn:_n,r<n?Un.transform(t[r]):Rt(t[r]));return e}}const Xn=t=>"number"==typeof t?0:t,Yn={test:function(t){var e,n,r,o;return isNaN(t)&&kt(t)&&(null!==(n=null===(e=t.match(Ot))||void 0===e?void 0:e.length)&&void 0!==n?n:0)+(null!==(o=null===(r=t.match(Dt))||void 0===r?void 0:r.length)&&void 0!==o?o:0)>0},parse:Wn,createTransformer:Gn,getAnimatableNone:function(t){const e=Wn(t);return Gn(t)(e.map(Xn))}},Zn=t=>"number"==typeof t;function qn(t,e){return Zn(t)?n=>Pn(t,e,n):Un.test(t)?Fn(t,e):Jn(t,e)}const Kn=(t,e)=>{const n=[...t],r=n.length,o=t.map(((t,n)=>qn(t,e[n])));return t=>{for(let e=0;e<r;e++)n[e]=o[e](t);return n}},$n=(t,e)=>{const n=Object.assign(Object.assign({},t),e),r={};for(const o in n)void 0!==t[o]&&void 0!==e[o]&&(r[o]=qn(t[o],e[o]));return t=>{for(const e in r)n[e]=r[e](t);return n}};function Qn(t){const e=Yn.parse(t),n=e.length;let r=0,o=0,i=0;for(let t=0;t<n;t++)r||"number"==typeof e[t]?r++:void 0!==e[t].hue?i++:o++;return{parsed:e,numNumbers:r,numRGB:o,numHSL:i}}const Jn=(t,e)=>{const n=Yn.createTransformer(e),r=Qn(t),o=Qn(e);return r.numHSL===o.numHSL&&r.numRGB===o.numRGB&&r.numNumbers>=o.numNumbers?$e(Kn(r.parsed,o.parsed),n):(W(!0,`Complex values '${t}' and '${e}' too different to mix. Ensure all colors are of the same type, and that each contains the same quantity of number and color values. Falling back to instant transition.`),n=>`${n>0?e:t}`)},tr=(t,e)=>n=>Pn(t,e,n);function er(t,e,{clamp:n=!0,ease:r,mixer:o}={}){const i=t.length;G(i===e.length,"Both input and output ranges must be the same length"),G(!r||!Array.isArray(r)||r.length===i-1,"Array of easing functions must be of length `input.length - 1`, as it applies to the transitions **between** the defined values."),t[0]>t[i-1]&&(t=[].concat(t),e=[].concat(e),t.reverse(),e.reverse());const a=function(t,e,n){const r=[],o=n||("number"==typeof(i=t[0])?tr:"string"==typeof i?Un.test(i)?Fn:Jn:Array.isArray(i)?Kn:"object"==typeof i?$n:void 0);var i;const a=t.length-1;for(let n=0;n<a;n++){let i=o(t[n],t[n+1]);if(e){const t=Array.isArray(e)?e[n]:e;i=$e(t,i)}r.push(i)}return r}(e,r,o),s=2===i?function([t,e],[n]){return r=>n(Sn(t,e,r))}(t,a):function(t,e){const n=t.length,r=n-1;return o=>{let i=0,a=!1;if(o<=t[0]?a=!0:o>=t[r]&&(i=r-1,a=!0),!a){let e=1;for(;e<n&&!(t[e]>o||e===r);e++);i=e-1}const s=Sn(t[i],t[i+1],o);return e[i](s)}}(t,a);return n?e=>s(dn(t[0],t[i-1],e)):s}const nr=t=>e=>1-t(1-e),rr=t=>e=>e<=.5?t(2*e)/2:(2-t(2*(1-e)))/2,or=t=>e=>e*e*((t+1)*e-t),ir=t=>t,ar=(2,t=>Math.pow(t,2));const sr=nr(ar),ur=rr(ar),lr=t=>1-Math.sin(Math.acos(t)),cr=nr(lr),dr=rr(cr),fr=or(1.525),pr=nr(fr),vr=rr(fr),hr=(t=>{const e=or(1.525);return t=>(t*=2)<1?.5*e(t):.5*(2-Math.pow(2,-10*(t-1)))})(),mr=t=>{if(1===t||0===t)return t;const e=t*t;return t<.36363636363636365?7.5625*e:t<.7272727272727273?9.075*e-9.9*t+3.4:t<.9?12.066481994459833*e-19.63545706371191*t+8.898060941828255:10.8*t*t-20.52*t+10.72},gr=nr(mr);function yr(t,e){return t.map((()=>e||ur)).splice(0,t.length-1)}function Er({from:t=0,to:e=1,ease:n,offset:r,duration:o=300}){const i={done:!1,value:t},a=Array.isArray(e)?e:[t,e],s=function(t,e){return t.map((t=>t*e))}(r&&r.length===a.length?r:function(t){const e=t.length;return t.map(((t,n)=>0!==n?n/(e-1):0))}(a),o);function u(){return er(s,a,{ease:Array.isArray(n)?n:yr(a,n)})}let l=u();return{next:t=>(i.value=l(t),i.done=t>=o,i),flipTarget:()=>{a.reverse(),l=u()}}}const xr={keyframes:Er,spring:wn,decay:function({velocity:t=0,from:e=0,power:n=.8,timeConstant:r=350,restDelta:o=.5,modifyTarget:i}){const a={done:!1,value:e};let s=n*t;const u=e+s,l=void 0===i?u:i(u);return l!==u&&(s=l-e),{next:t=>{const e=-s*Math.exp(-t/r);return a.done=!(e>o||e<-o),a.value=a.done?l:l+e,a},flipTarget:()=>{}}}};function br(t,e,n=0){return t-e-n}const wr=t=>{const e=({delta:e})=>t(e);return{start:()=>C.update(e,!0),stop:()=>b.update(e)}};function Ar(t){var e,n,{from:r,autoplay:o=!0,driver:a=wr,elapsed:s=0,repeat:u=0,repeatType:l="loop",repeatDelay:c=0,onPlay:d,onStop:f,onComplete:p,onRepeat:v,onUpdate:h}=t,m=i(t,["from","autoplay","driver","elapsed","repeat","repeatType","repeatDelay","onPlay","onStop","onComplete","onRepeat","onUpdate"]);let g,y,E,{to:x}=m,b=0,w=m.duration,A=!1,S=!0;const P=function(t){if(Array.isArray(t.to))return Er;if(xr[t.type])return xr[t.type];const e=new Set(Object.keys(t));return e.has("ease")||e.has("duration")&&!e.has("dampingRatio")?Er:e.has("dampingRatio")||e.has("stiffness")||e.has("mass")||e.has("damping")||e.has("restSpeed")||e.has("restDelta")?wn:Er}(m);(null===(n=(e=P).needsInterpolation)||void 0===n?void 0:n.call(e,r,x))&&(E=er([0,100],[r,x],{clamp:!1}),r=0,x=100);const T=P(Object.assign(Object.assign({},m),{from:r,to:x}));return o&&(null==d||d(),g=a((function(t){if(S||(t=-t),s+=t,!A){const t=T.next(Math.max(0,s));y=t.value,E&&(y=E(y)),A=S?t.done:s<=0}null==h||h(y),A&&(0===b&&(null!=w||(w=s)),b<u?function(t,e,n,r){return r?t>=e+n:t<=-n}(s,w,c,S)&&(b++,"reverse"===l?(S=b%2==0,s=function(t,e,n=0,r=!0){return r?br(e+-t,e,n):e-(t-e)+n}(s,w,c,S)):(s=br(s,w,c),"mirror"===l&&T.flipTarget()),A=!1,v&&v()):(g.stop(),p&&p()))})),g.start()),{stop:()=>{null==f||f(),g.stop()}}}function Sr(t,e){return e?t*(1e3/e):0}var Pr=function(t){return 1e3*t};const Tr=(t,e)=>1-3*e+3*t,Cr=(t,e)=>3*e-6*t,Mr=t=>3*t,Vr=(t,e,n)=>((Tr(e,n)*t+Cr(e,n))*t+Mr(e))*t,Rr=(t,e,n)=>3*Tr(e,n)*t*t+2*Cr(e,n)*t+Mr(e),Or=1e-7,Dr=10,Lr=8,kr=.001,Nr=11,Ir=1/(Nr-1);function jr(t,e,n,r){if(t===e&&n===r)return ir;const o=new Float32Array(Nr);for(let e=0;e<Nr;++e)o[e]=Vr(e*Ir,t,n);return i=>0===i||1===i?i:Vr(function(e){let r=0,i=1;const a=Nr-1;for(;i!==a&&o[i]<=e;++i)r+=Ir;--i;const s=r+(e-o[i])/(o[i+1]-o[i])*Ir,u=Rr(s,t,n);return u>=kr?function(t,e,n,r){for(let o=0;o<Lr;++o){const o=Rr(e,n,r);if(0===o)return e;e-=(Vr(e,n,r)-t)/o}return e}(e,s,t,n):0===u?s:function(t,e,n,r,o){let i,a,s=0;do{a=e+(n-e)/2,i=Vr(a,r,o)-t,i>0?n=a:e=a}while(Math.abs(i)>Or&&++s<Dr);return a}(e,r,r+Ir,t,n)}(i),e,r)}var Br={linear:ir,easeIn:ar,easeInOut:ur,easeOut:sr,circIn:lr,circInOut:dr,circOut:cr,backIn:fr,backInOut:vr,backOut:pr,anticipate:hr,bounceIn:gr,bounceInOut:t=>t<.5?.5*(1-mr(1-2*t)):.5*mr(2*t-1)+.5,bounceOut:mr},Fr=function(t){if(Array.isArray(t)){G(4===t.length,"Cubic bezier arrays must contain four numerical values.");var e=a(t,4);return jr(e[0],e[1],e[2],e[3])}return"string"==typeof t?(G(void 0!==Br[t],"Invalid easing type '".concat(t,"'")),Br[t]):t},Ur=function(t){return Array.isArray(t)&&"number"!=typeof t[0]},Hr=function(t,e){return!("zIndex"===t||"number"!=typeof e&&!Array.isArray(e)&&("string"!=typeof e||!Yn.test(e)||e.startsWith("url(")))},_r=function(){return{type:"spring",stiffness:500,damping:25,restSpeed:10}},zr=function(t){return{type:"spring",stiffness:550,damping:0===t?2*Math.sqrt(550):30,restSpeed:10}},Wr=function(){return{type:"keyframes",ease:"linear",duration:.3}},Gr=function(t){return{type:"keyframes",duration:.8,values:t}},Xr={x:_r,y:_r,z:_r,rotate:_r,rotateX:_r,rotateY:_r,rotateZ:_r,scaleX:zr,scaleY:zr,scale:zr,opacity:Wr,backgroundColor:Wr,color:Wr,default:zr},Yr=function(t,e){var n;return n=me(e)?Gr:Xr[t]||Xr.default,o({to:e},n(e))};const Zr=new Set(["brightness","contrast","saturate","opacity"]);function qr(t){let[e,n]=t.slice(0,-1).split("(");if("drop-shadow"===e)return t;const[r]=n.match(Ot)||[];if(!r)return t;const o=n.replace(r,"");let i=Zr.has(e)?1:0;return r!==n&&(i*=100),e+"("+i+o+")"}const Kr=/([a-z-]*)\(.*?\)/g,$r=Object.assign(Object.assign({},Yn),{getAnimatableNone:t=>{const e=t.match(Kr);return e?e.map(qr).join(" "):t}});var Qr=o(o({},Xt),{color:Un,backgroundColor:Un,outlineColor:Un,fill:Un,stroke:Un,borderColor:Un,borderTopColor:Un,borderRightColor:Un,borderBottomColor:Un,borderLeftColor:Un,filter:$r,WebkitFilter:$r}),Jr=function(t){return Qr[t]};function to(t,e){var n,r=Jr(t);return r!==$r&&(r=Yn),null===(n=r.getAnimatableNone)||void 0===n?void 0:n.call(r,e)}var eo={current:!1},no=!1;function ro(t,e,n,r,u){var l,c=ao(r,t),d=null!==(l=c.from)&&void 0!==l?l:e.get(),f=Hr(t,n);"none"===d&&f&&"string"==typeof n?d=to(t,n):oo(d)&&"string"==typeof n?d=io(n):!Array.isArray(n)&&oo(n)&&"string"==typeof d&&(n=io(d));var p=Hr(t,d);return W(p===f,"You are trying to animate ".concat(t,' from "').concat(d,'" to "').concat(n,'". ').concat(d," is not an animatable value - to enable this animation set ").concat(d," to a value animatable to ").concat(n," via the `style` property.")),p&&f&&!1!==c.type?function(){var r={from:d,to:n,velocity:e.getVelocity(),onComplete:u,onUpdate:function(t){return e.set(t)}};return"inertia"===c.type||"decay"===c.type?function({from:t=0,velocity:e=0,min:n,max:r,power:o=.8,timeConstant:i=750,bounceStiffness:a=500,bounceDamping:s=10,restDelta:u=1,modifyTarget:l,driver:c,onUpdate:d,onComplete:f,onStop:p}){let v;function h(t){return void 0!==n&&t<n||void 0!==r&&t>r}function m(t){return void 0===n?r:void 0===r||Math.abs(n-t)<Math.abs(r-t)?n:r}function g(t){null==v||v.stop(),v=Ar(Object.assign(Object.assign({},t),{driver:c,onUpdate:e=>{var n;null==d||d(e),null===(n=t.onUpdate)||void 0===n||n.call(t,e)},onComplete:f,onStop:p}))}function y(t){g(Object.assign({type:"spring",stiffness:a,damping:s,restDelta:u},t))}if(h(t))y({from:t,velocity:e,to:m(t)});else{let r=o*e+t;void 0!==l&&(r=l(r));const a=m(r),s=a===n?-1:1;let c,d;const f=t=>{c=d,d=t,e=Sr(t-c,T().delta),(1===s&&t>a||-1===s&&t<a)&&y({from:t,to:a,velocity:e})};g({type:"decay",from:t,velocity:e,timeConstant:i,power:o,restDelta:u,modifyTarget:l,onUpdate:h(r)?f:void 0})}return{stop:()=>null==v?void 0:v.stop()}}(o(o({},r),c)):Ar(o(o({},function(t,e,n){var r;return Array.isArray(e.to)&&(null!==(r=t.duration)&&void 0!==r||(t.duration=.8)),function(t){Array.isArray(t.to)&&null===t.to[0]&&(t.to=s([],a(t.to),!1),t.to[0]=t.from)}(e),function(t){t.when,t.delay,t.delayChildren,t.staggerChildren,t.staggerDirection,t.repeat,t.repeatType,t.repeatDelay,t.from;var e=i(t,["when","delay","delayChildren","staggerChildren","staggerDirection","repeat","repeatType","repeatDelay","from"]);return!!Object.keys(e).length}(t)||(t=o(o({},t),Yr(n,e.to))),o(o({},e),function(t){var e=t.ease,n=t.times,r=t.yoyo,a=t.flip,s=t.loop,u=i(t,["ease","times","yoyo","flip","loop"]),l=o({},u);return n&&(l.offset=n),u.duration&&(l.duration=Pr(u.duration)),u.repeatDelay&&(l.repeatDelay=Pr(u.repeatDelay)),e&&(l.ease=Ur(e)?e.map(Fr):Fr(e)),"tween"===u.type&&(l.type="keyframes"),(r||s||a)&&(W(!no,"yoyo, loop and flip have been removed from the API. Replace with repeat and repeatType options."),no=!0,r?l.repeatType="reverse":s?l.repeatType="loop":a&&(l.repeatType="mirror"),l.repeat=s||r||a||u.repeat),"spring"!==u.type&&(l.type="keyframes"),l}(t))}(c,r,t)),{onUpdate:function(t){var e;r.onUpdate(t),null===(e=c.onUpdate)||void 0===e||e.call(c,t)},onComplete:function(){var t;r.onComplete(),null===(t=c.onComplete)||void 0===t||t.call(c)}}))}:function(){var t,r,o=ye(n);return e.set(o),u(),null===(t=null==c?void 0:c.onUpdate)||void 0===t||t.call(c,o),null===(r=null==c?void 0:c.onComplete)||void 0===r||r.call(c),{stop:function(){}}}}function oo(t){return 0===t||"string"==typeof t&&0===parseFloat(t)&&-1===t.indexOf(" ")}function io(t){return"number"==typeof t?0:to("",t)}function ao(t,e){return t[e]||t.default||t}function so(t,e,n,r){return void 0===r&&(r={}),eo.current&&(r={type:!1}),e.start((function(o){var i,a,s=ro(t,e,n,r,o),u=function(t,e){var n,r;return null!==(r=null!==(n=(ao(t,e)||{}).delay)&&void 0!==n?n:t.delay)&&void 0!==r?r:0}(r,t),l=function(){return a=s()};return u?i=window.setTimeout(l,Pr(u)):l(),function(){clearTimeout(i),null==a||a.stop()}}))}var uo=function(t){return/^0[^.\s]+$/.test(t)};function lo(t,e){-1===t.indexOf(e)&&t.push(e)}function co(t,e){var n=t.indexOf(e);n>-1&&t.splice(n,1)}var fo=function(){function t(){this.subscriptions=[]}return t.prototype.add=function(t){var e=this;return lo(this.subscriptions,t),function(){return co(e.subscriptions,t)}},t.prototype.notify=function(t,e,n){var r=this.subscriptions.length;if(r)if(1===r)this.subscriptions[0](t,e,n);else for(var o=0;o<r;o++){var i=this.subscriptions[o];i&&i(t,e,n)}},t.prototype.getSize=function(){return this.subscriptions.length},t.prototype.clear=function(){this.subscriptions.length=0},t}(),po=function(t){return!isNaN(parseFloat(t))},vo=function(){function t(t){var e=this;this.version="6.5.1",this.timeDelta=0,this.lastUpdated=0,this.updateSubscribers=new fo,this.velocityUpdateSubscribers=new fo,this.renderSubscribers=new fo,this.canTrackVelocity=!1,this.updateAndNotify=function(t,n){void 0===n&&(n=!0),e.prev=e.current,e.current=t;var r=T(),o=r.delta,i=r.timestamp;e.lastUpdated!==i&&(e.timeDelta=o,e.lastUpdated=i,C.postRender(e.scheduleVelocityCheck)),e.prev!==e.current&&e.updateSubscribers.notify(e.current),e.velocityUpdateSubscribers.getSize()&&e.velocityUpdateSubscribers.notify(e.getVelocity()),n&&e.renderSubscribers.notify(e.current)},this.scheduleVelocityCheck=function(){return C.postRender(e.velocityCheck)},this.velocityCheck=function(t){t.timestamp!==e.lastUpdated&&(e.prev=e.current,e.velocityUpdateSubscribers.notify(e.getVelocity()))},this.hasAnimated=!1,this.prev=this.current=t,this.canTrackVelocity=po(this.current)}return t.prototype.onChange=function(t){return this.updateSubscribers.add(t)},t.prototype.clearListeners=function(){this.updateSubscribers.clear()},t.prototype.onRenderRequest=function(t){return t(this.get()),this.renderSubscribers.add(t)},t.prototype.attach=function(t){this.passiveEffect=t},t.prototype.set=function(t,e){void 0===e&&(e=!0),e&&this.passiveEffect?this.passiveEffect(t,this.updateAndNotify):this.updateAndNotify(t,e)},t.prototype.get=function(){return this.current},t.prototype.getPrevious=function(){return this.prev},t.prototype.getVelocity=function(){return this.canTrackVelocity?Sr(parseFloat(this.current)-parseFloat(this.prev),this.timeDelta):0},t.prototype.start=function(t){var e=this;return this.stop(),new Promise((function(n){e.hasAnimated=!0,e.stopAnimation=t(n)})).then((function(){return e.clearAnimation()}))},t.prototype.stop=function(){this.stopAnimation&&this.stopAnimation(),this.clearAnimation()},t.prototype.isAnimating=function(){return!!this.stopAnimation},t.prototype.clearAnimation=function(){this.stopAnimation=null},t.prototype.destroy=function(){this.updateSubscribers.clear(),this.renderSubscribers.clear(),this.stop()},t}();function ho(t){return new vo(t)}var mo=function(t){return function(e){return e.test(t)}},go=[_t,Bt,jt,It,Ut,Ft,{test:function(t){return"auto"===t},parse:function(t){return t}}],yo=function(t){return go.find(mo(t))},Eo=s(s([],a(go),!1),[Un,Yn],!1),xo=function(t){return Eo.find(mo(t))};function bo(t,e,n){t.hasValue(e)?t.getValue(e).set(n):t.addValue(e,ho(n))}function wo(t,e){if(e)return(e[t]||e.default||e).from}function Ao(t,e,n){var r;void 0===n&&(n={});var i=ot(t,e,n.custom),s=(i||{}).transition,u=void 0===s?t.getDefaultTransition()||{}:s;n.transitionOverride&&(u=n.transitionOverride);var l=i?function(){return So(t,i,n)}:function(){return Promise.resolve()},c=(null===(r=t.variantChildren)||void 0===r?void 0:r.size)?function(r){void 0===r&&(r=0);var i=u.delayChildren,a=void 0===i?0:i,s=u.staggerChildren,l=u.staggerDirection;return function(t,e,n,r,i,a){void 0===n&&(n=0),void 0===r&&(r=0),void 0===i&&(i=1);var s=[],u=(t.variantChildren.size-1)*r,l=1===i?function(t){return void 0===t&&(t=0),t*r}:function(t){return void 0===t&&(t=0),u-t*r};return Array.from(t.variantChildren).sort(Po).forEach((function(t,r){s.push(Ao(t,e,o(o({},a),{delay:n+l(r)})).then((function(){return t.notifyAnimationComplete(e)})))})),Promise.all(s)}(t,e,a+r,s,l,n)}:function(){return Promise.resolve()},d=u.when;if(d){var f=a("beforeChildren"===d?[l,c]:[c,l],2),p=f[0],v=f[1];return p().then(v)}return Promise.all([l(),c(n.delay)])}function So(t,e,n){var r,a=void 0===n?{}:n,s=a.delay,u=void 0===s?0:s,l=a.transitionOverride,c=a.type,d=t.makeTargetAnimatable(e),f=d.transition,p=void 0===f?t.getDefaultTransition():f,v=d.transitionEnd,h=i(d,["transition","transitionEnd"]);l&&(p=l);var m=[],g=c&&(null===(r=t.animationState)||void 0===r?void 0:r.getState()[c]);for(var y in h){var E=t.getValue(y),x=h[y];if(!(!E||void 0===x||g&&To(g,y))){var b=o({delay:u},p);t.shouldReduceMotion&&bt(y)&&(b=o(o({},b),{type:!1,delay:0}));var w=so(y,E,x,b);m.push(w)}}return Promise.all(m).then((function(){v&&function(t,e){var n=ot(t,e),r=n?t.makeTargetAnimatable(n,!1):{},a=r.transitionEnd,s=void 0===a?{}:a;r.transition;var u=i(r,["transitionEnd","transition"]);for(var l in u=o(o({},u),s))bo(t,l,ye(u[l]))}(t,v)}))}function Po(t,e){return t.sortNodePosition(e)}function To(t,e){var n=t.protectedKeys,r=t.needsAnimating,o=n.hasOwnProperty(e)&&!0!==r[e];return r[e]=!1,o}var Co=[Ae.Animate,Ae.InView,Ae.Focus,Ae.Hover,Ae.Tap,Ae.Drag,Ae.Exit],Mo=s([],a(Co),!1).reverse(),Vo=Co.length;function Ro(t){var e,n=function(t){return function(e){return Promise.all(e.map((function(e){var n=e.animation,r=e.options;return function(t,e,n){var r;if(void 0===n&&(n={}),t.notifyAnimationStart(e),Array.isArray(e)){var o=e.map((function(e){return Ao(t,e,n)}));r=Promise.all(o)}else if("string"==typeof e)r=Ao(t,e,n);else{var i="function"==typeof e?ot(t,e,n.custom):e;r=So(t,i,n)}return r.then((function(){return t.notifyAnimationComplete(e)}))}(t,n,r)})))}}(t),r=((e={})[Ae.Animate]=Oo(!0),e[Ae.InView]=Oo(),e[Ae.Hover]=Oo(),e[Ae.Tap]=Oo(),e[Ae.Drag]=Oo(),e[Ae.Focus]=Oo(),e[Ae.Exit]=Oo(),e),u={},l=!0,c=function(e,n){var r=ot(t,n);if(r){r.transition;var a=r.transitionEnd,s=i(r,["transition","transitionEnd"]);e=o(o(o({},e),s),a)}return e};function d(e,i){for(var d,f=t.getProps(),p=t.getVariantContext(!0)||{},v=[],h=new Set,m={},g=1/0,y=function(n){var u=Mo[n],y=r[u],E=null!==(d=f[u])&&void 0!==d?d:p[u],x=nt(E),b=u===i?y.isActive:null;!1===b&&(g=n);var w=E===p[u]&&E!==f[u]&&x;if(w&&l&&t.manuallyAnimateOnMount&&(w=!1),y.protectedKeys=o({},m),!y.isActive&&null===b||!E&&!y.prevProp||he(E)||"boolean"==typeof E)return"continue";var A=function(t,e){return"string"==typeof e?e!==t:!!et(e)&&!cn(e,t)}(y.prevProp,E),S=A||u===i&&y.isActive&&!w&&x||n>g&&x,P=Array.isArray(E)?E:[E],T=P.reduce(c,{});!1===b&&(T={});var C=y.prevResolvedValues,M=void 0===C?{}:C,V=o(o({},M),T),R=function(t){S=!0,h.delete(t),y.needsAnimating[t]=!0};for(var O in V){var D=T[O],L=M[O];m.hasOwnProperty(O)||(D!==L?me(D)&&me(L)?!cn(D,L)||A?R(O):y.protectedKeys[O]=!0:void 0!==D?R(O):h.add(O):void 0!==D&&h.has(O)?R(O):y.protectedKeys[O]=!0)}y.prevProp=E,y.prevResolvedValues=T,y.isActive&&(m=o(o({},m),T)),l&&t.blockInitialAnimation&&(S=!1),S&&!w&&v.push.apply(v,s([],a(P.map((function(t){return{animation:t,options:o({type:u},e)}}))),!1))},E=0;E<Vo;E++)y(E);if(u=o({},m),h.size){var x={};h.forEach((function(e){var n=t.getBaseTarget(e);void 0!==n&&(x[e]=n)})),v.push({animation:x})}var b=Boolean(v.length);return l&&!1===f.initial&&!t.manuallyAnimateOnMount&&(b=!1),l=!1,b?n(v):Promise.resolve()}return{isAnimated:function(t){return void 0!==u[t]},animateChanges:d,setActive:function(e,n,o){var i;if(r[e].isActive===n)return Promise.resolve();null===(i=t.variantChildren)||void 0===i||i.forEach((function(t){var r;return null===(r=t.animationState)||void 0===r?void 0:r.setActive(e,n)})),r[e].isActive=n;var a=d(o,e);for(var s in r)r[s].protectedKeys={};return a},setAnimateFunction:function(e){n=e(t)},getState:function(){return r}}}function Oo(t){return void 0===t&&(t=!1),{isActive:t,protectedKeys:{},needsAnimating:{},prevResolvedValues:{}}}var Do={animation:sn((function(t){var e=t.visualElement,n=t.animate;e.animationState||(e.animationState=Ro(e)),he(n)&&(0,u.useEffect)((function(){return n.subscribe(e)}),[n])})),exit:sn((function(t){var e=t.custom,n=t.visualElement,r=a(ln(),2),o=r[0],i=r[1],s=(0,u.useContext)(O);(0,u.useEffect)((function(){var t,r;n.isPresent=o;var a=null===(t=n.animationState)||void 0===t?void 0:t.setActive(Ae.Exit,!o,{custom:null!==(r=null==s?void 0:s.custom)&&void 0!==r?r:e});!o&&(null==a||a.then(i))}),[o])}))};const Lo=t=>t.hasOwnProperty("x")&&t.hasOwnProperty("y"),ko=t=>Lo(t)&&t.hasOwnProperty("z"),No=(t,e)=>Math.abs(t-e);function Io(t,e){if(Zn(t)&&Zn(e))return No(t,e);if(Lo(t)&&Lo(e)){const n=No(t.x,e.x),r=No(t.y,e.y),o=ko(t)&&ko(e)?No(t.z,e.z):0;return Math.sqrt(Math.pow(n,2)+Math.pow(r,2)+Math.pow(o,2))}}var jo=function(){function t(t,e,n){var r=this,i=(void 0===n?{}:n).transformPagePoint;if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.handlers={},this.updatePoint=function(){if(r.lastMoveEvent&&r.lastMoveEventInfo){var t=Uo(r.lastMoveEventInfo,r.history),e=null!==r.startEvent,n=Io(t.offset,{x:0,y:0})>=3;if(e||n){var i=t.point,a=T().timestamp;r.history.push(o(o({},i),{timestamp:a}));var s=r.handlers,u=s.onStart,l=s.onMove;e||(u&&u(r.lastMoveEvent,t),r.startEvent=r.lastMoveEvent),l&&l(r.lastMoveEvent,t)}}},this.handlePointerMove=function(t,e){r.lastMoveEvent=t,r.lastMoveEventInfo=Bo(e,r.transformPagePoint),Me(t)&&0===t.buttons?r.handlePointerUp(t,e):C.update(r.updatePoint,!0)},this.handlePointerUp=function(t,e){r.end();var n=r.handlers,o=n.onEnd,i=n.onSessionEnd,a=Uo(Bo(e,r.transformPagePoint),r.history);r.startEvent&&o&&o(t,a),i&&i(t,a)},!(Ve(t)&&t.touches.length>1)){this.handlers=e,this.transformPagePoint=i;var a=Bo(Le(t),this.transformPagePoint),s=a.point,u=T().timestamp;this.history=[o(o({},s),{timestamp:u})];var l=e.onSessionStart;l&&l(t,Uo(a,this.history)),this.removeListeners=$e(He(window,"pointermove",this.handlePointerMove),He(window,"pointerup",this.handlePointerUp),He(window,"pointercancel",this.handlePointerUp))}}return t.prototype.updateHandlers=function(t){this.handlers=t},t.prototype.end=function(){this.removeListeners&&this.removeListeners(),b.update(this.updatePoint)},t}();function Bo(t,e){return e?{point:e(t.point)}:t}function Fo(t,e){return{x:t.x-e.x,y:t.y-e.y}}function Uo(t,e){var n=t.point;return{point:n,delta:Fo(n,_o(e)),offset:Fo(n,Ho(e)),velocity:zo(e,.1)}}function Ho(t){return t[0]}function _o(t){return t[t.length-1]}function zo(t,e){if(t.length<2)return{x:0,y:0};for(var n=t.length-1,r=null,o=_o(t);n>=0&&(r=t[n],!(o.timestamp-r.timestamp>Pr(e)));)n--;if(!r)return{x:0,y:0};var i=(o.timestamp-r.timestamp)/1e3;if(0===i)return{x:0,y:0};var a={x:(o.x-r.x)/i,y:(o.y-r.y)/i};return a.x===1/0&&(a.x=0),a.y===1/0&&(a.y=0),a}function Wo(t){return t.max-t.min}function Go(t,e,n){return void 0===e&&(e=0),void 0===n&&(n=.01),Io(t,e)<n}function Xo(t,e,n,r){void 0===r&&(r=.5),t.origin=r,t.originPoint=Pn(e.min,e.max,t.origin),t.scale=Wo(n)/Wo(e),(Go(t.scale,1,1e-4)||isNaN(t.scale))&&(t.scale=1),t.translate=Pn(n.min,n.max,t.origin)-t.originPoint,(Go(t.translate)||isNaN(t.translate))&&(t.translate=0)}function Yo(t,e,n,r){Xo(t.x,e.x,n.x,null==r?void 0:r.originX),Xo(t.y,e.y,n.y,null==r?void 0:r.originY)}function Zo(t,e,n){t.min=n.min+e.min,t.max=t.min+Wo(e)}function qo(t,e,n){t.min=e.min-n.min,t.max=t.min+Wo(e)}function Ko(t,e,n){qo(t.x,e.x,n.x),qo(t.y,e.y,n.y)}function $o(t,e,n){return{min:void 0!==e?t.min+e:void 0,max:void 0!==n?t.max+n-(t.max-t.min):void 0}}function Qo(t,e){var n,r=e.min-t.min,o=e.max-t.max;return e.max-e.min<t.max-t.min&&(r=(n=a([o,r],2))[0],o=n[1]),{min:r,max:o}}var Jo=.35;function ti(t,e,n){return{min:ei(t,e),max:ei(t,n)}}function ei(t,e){var n;return"number"==typeof t?t:null!==(n=t[e])&&void 0!==n?n:0}var ni=function(){return{x:{translate:0,scale:1,origin:0,originPoint:0},y:{translate:0,scale:1,origin:0,originPoint:0}}},ri=function(){return{x:{min:0,max:0},y:{min:0,max:0}}};function oi(t){return[t("x"),t("y")]}function ii(t){var e=t.top;return{x:{min:t.left,max:t.right},y:{min:e,max:t.bottom}}}function ai(t){return void 0===t||1===t}function si(t){var e=t.scale,n=t.scaleX,r=t.scaleY;return!ai(e)||!ai(n)||!ai(r)}function ui(t){return si(t)||li(t.x)||li(t.y)||t.z||t.rotate||t.rotateX||t.rotateY}function li(t){return t&&"0%"!==t}function ci(t,e,n){return n+e*(t-n)}function di(t,e,n,r,o){return void 0!==o&&(t=ci(t,o,r)),ci(t,n,r)+e}function fi(t,e,n,r,o){void 0===e&&(e=0),void 0===n&&(n=1),t.min=di(t.min,e,n,r,o),t.max=di(t.max,e,n,r,o)}function pi(t,e){var n=e.x,r=e.y;fi(t.x,n.translate,n.scale,n.originPoint),fi(t.y,r.translate,r.scale,r.originPoint)}function vi(t,e){t.min=t.min+e,t.max=t.max+e}function hi(t,e,n){var r=a(n,3),o=r[0],i=r[1],s=r[2],u=void 0!==e[s]?e[s]:.5,l=Pn(t.min,t.max,u);fi(t,e[o],e[i],l,e.scale)}var mi=["x","scaleX","originX"],gi=["y","scaleY","originY"];function yi(t,e){hi(t.x,e,mi),hi(t.y,e,gi)}function Ei(t,e){return ii(function(t,e){if(!e)return t;var n=e({x:t.left,y:t.top}),r=e({x:t.right,y:t.bottom});return{top:n.y,left:n.x,bottom:r.y,right:r.x}}(t.getBoundingClientRect(),e))}var xi=new WeakMap,bi=function(){function t(t){this.openGlobalLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=ri(),this.visualElement=t}return t.prototype.start=function(t,e){var n=this,r=(void 0===e?{}:e).snapToCursor,o=void 0!==r&&r;!1!==this.visualElement.isPresent&&(this.panSession=new jo(t,{onSessionStart:function(t){n.stopAnimation(),o&&n.snapToCursor(Le(t,"page").point)},onStart:function(t,e){var r,o=n.getProps(),i=o.drag,a=o.dragPropagation,s=o.onDragStart;(!i||a||(n.openGlobalLock&&n.openGlobalLock(),n.openGlobalLock=Xe(i),n.openGlobalLock))&&(n.isDragging=!0,n.currentDirection=null,n.resolveConstraints(),n.visualElement.projection&&(n.visualElement.projection.isAnimationBlocked=!0,n.visualElement.projection.target=void 0),oi((function(t){var e,r,o=n.getAxisMotionValue(t).get()||0;if(jt.test(o)){var i=null===(r=null===(e=n.visualElement.projection)||void 0===e?void 0:e.layout)||void 0===r?void 0:r.actual[t];i&&(o=Wo(i)*(parseFloat(o)/100))}n.originPoint[t]=o})),null==s||s(t,e),null===(r=n.visualElement.animationState)||void 0===r||r.setActive(Ae.Drag,!0))},onMove:function(t,e){var r=n.getProps(),o=r.dragPropagation,i=r.dragDirectionLock,a=r.onDirectionLock,s=r.onDrag;if(o||n.openGlobalLock){var u=e.offset;if(i&&null===n.currentDirection)return n.currentDirection=function(t,e){void 0===e&&(e=10);var n=null;return Math.abs(t.y)>e?n="y":Math.abs(t.x)>e&&(n="x"),n}(u),void(null!==n.currentDirection&&(null==a||a(n.currentDirection)));n.updateAxis("x",e.point,u),n.updateAxis("y",e.point,u),n.visualElement.syncRender(),null==s||s(t,e)}},onSessionEnd:function(t,e){return n.stop(t,e)}},{transformPagePoint:this.visualElement.getTransformPagePoint()}))},t.prototype.stop=function(t,e){var n=this.isDragging;if(this.cancel(),n){var r=e.velocity;this.startAnimation(r);var o=this.getProps().onDragEnd;null==o||o(t,e)}},t.prototype.cancel=function(){var t,e;this.isDragging=!1,this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!1),null===(t=this.panSession)||void 0===t||t.end(),this.panSession=void 0,!this.getProps().dragPropagation&&this.openGlobalLock&&(this.openGlobalLock(),this.openGlobalLock=null),null===(e=this.visualElement.animationState)||void 0===e||e.setActive(Ae.Drag,!1)},t.prototype.updateAxis=function(t,e,n){var r=this.getProps().drag;if(n&&wi(t,r,this.currentDirection)){var o,i,a,s,u,l=this.getAxisMotionValue(t),c=this.originPoint[t]+n[t];this.constraints&&this.constraints[t]&&(o=c,i=this.constraints[t],a=this.elastic[t],s=i.min,u=i.max,void 0!==s&&o<s?o=a?Pn(s,o,a.min):Math.max(o,s):void 0!==u&&o>u&&(o=a?Pn(u,o,a.max):Math.min(o,u)),c=o),l.set(c)}},t.prototype.resolveConstraints=function(){var t=this,e=this.getProps(),n=e.dragConstraints,r=e.dragElastic,o=(this.visualElement.projection||{}).layout,i=this.constraints;n&&tt(n)?this.constraints||(this.constraints=this.resolveRefConstraints()):this.constraints=!(!n||!o)&&function(t,e){var n=e.top,r=e.left,o=e.bottom,i=e.right;return{x:$o(t.x,r,i),y:$o(t.y,n,o)}}(o.actual,n),this.elastic=function(t){return void 0===t&&(t=Jo),!1===t?t=0:!0===t&&(t=Jo),{x:ti(t,"left","right"),y:ti(t,"top","bottom")}}(r),i!==this.constraints&&o&&this.constraints&&!this.hasMutatedConstraints&&oi((function(e){t.getAxisMotionValue(e)&&(t.constraints[e]=function(t,e){var n={};return void 0!==e.min&&(n.min=e.min-t.min),void 0!==e.max&&(n.max=e.max-t.min),n}(o.actual[e],t.constraints[e]))}))},t.prototype.resolveRefConstraints=function(){var t=this.getProps(),e=t.dragConstraints,n=t.onMeasureDragConstraints;if(!e||!tt(e))return!1;var r=e.current;G(null!==r,"If `dragConstraints` is set as a React ref, that ref must be passed to another component's `ref` prop.");var o=this.visualElement.projection;if(!o||!o.layout)return!1;var i=function(t,e,n){var r=Ei(t,n),o=e.scroll;return o&&(vi(r.x,o.x),vi(r.y,o.y)),r}(r,o.root,this.visualElement.getTransformPagePoint()),a=function(t,e){return{x:Qo(t.x,e.x),y:Qo(t.y,e.y)}}(o.layout.actual,i);if(n){var s=n(function(t){var e=t.x,n=t.y;return{top:n.min,right:e.max,bottom:n.max,left:e.min}}(a));this.hasMutatedConstraints=!!s,s&&(a=ii(s))}return a},t.prototype.startAnimation=function(t){var e=this,n=this.getProps(),r=n.drag,i=n.dragMomentum,a=n.dragElastic,s=n.dragTransition,u=n.dragSnapToOrigin,l=n.onDragTransitionEnd,c=this.constraints||{},d=oi((function(n){var l;if(wi(n,r,e.currentDirection)){var d=null!==(l=null==c?void 0:c[n])&&void 0!==l?l:{};u&&(d={min:0,max:0});var f=a?200:1e6,p=a?40:1e7,v=o(o({type:"inertia",velocity:i?t[n]:0,bounceStiffness:f,bounceDamping:p,timeConstant:750,restDelta:1,restSpeed:10},s),d);return e.startAxisValueAnimation(n,v)}}));return Promise.all(d).then(l)},t.prototype.startAxisValueAnimation=function(t,e){return so(t,this.getAxisMotionValue(t),0,e)},t.prototype.stopAnimation=function(){var t=this;oi((function(e){return t.getAxisMotionValue(e).stop()}))},t.prototype.getAxisMotionValue=function(t){var e,n,r="_drag"+t.toUpperCase();return this.visualElement.getProps()[r]||this.visualElement.getValue(t,null!==(n=null===(e=this.visualElement.getProps().initial)||void 0===e?void 0:e[t])&&void 0!==n?n:0)},t.prototype.snapToCursor=function(t){var e=this;oi((function(n){if(wi(n,e.getProps().drag,e.currentDirection)){var r=e.visualElement.projection,o=e.getAxisMotionValue(n);if(r&&r.layout){var i=r.layout.actual[n],a=i.min,s=i.max;o.set(t[n]-Pn(a,s,.5))}}}))},t.prototype.scalePositionWithinConstraints=function(){var t,e=this,n=this.getProps(),r=n.drag,o=n.dragConstraints,i=this.visualElement.projection;if(tt(o)&&i&&this.constraints){this.stopAnimation();var a={x:0,y:0};oi((function(t){var n,r,o,i,s,u=e.getAxisMotionValue(t);if(u){var l=u.get();a[t]=(n={min:l,max:l},r=e.constraints[t],o=.5,i=Wo(n),(s=Wo(r))>i?o=Sn(r.min,r.max-i,n.min):i>s&&(o=Sn(n.min,n.max-s,r.min)),dn(0,1,o))}}));var s=this.visualElement.getProps().transformTemplate;this.visualElement.getInstance().style.transform=s?s({},""):"none",null===(t=i.root)||void 0===t||t.updateScroll(),i.updateLayout(),this.resolveConstraints(),oi((function(t){if(wi(t,r,null)){var n=e.getAxisMotionValue(t),o=e.constraints[t],i=o.min,s=o.max;n.set(Pn(i,s,a[t]))}}))}},t.prototype.addListeners=function(){var t,e=this;xi.set(this.visualElement,this);var n=He(this.visualElement.getInstance(),"pointerdown",(function(t){var n=e.getProps(),r=n.drag,o=n.dragListener;r&&(void 0===o||o)&&e.start(t)})),r=function(){tt(e.getProps().dragConstraints)&&(e.constraints=e.resolveRefConstraints())},o=this.visualElement.projection,i=o.addEventListener("measure",r);o&&!o.layout&&(null===(t=o.root)||void 0===t||t.updateScroll(),o.updateLayout()),r();var a=Te(window,"resize",(function(){return e.scalePositionWithinConstraints()}));return o.addEventListener("didUpdate",(function(t){var n=t.delta,r=t.hasLayoutChanged;e.isDragging&&r&&(oi((function(t){var r=e.getAxisMotionValue(t);r&&(e.originPoint[t]+=n[t].translate,r.set(r.get()+n[t].translate))})),e.visualElement.syncRender())})),function(){a(),n(),i()}},t.prototype.getProps=function(){var t=this.visualElement.getProps(),e=t.drag,n=void 0!==e&&e,r=t.dragDirectionLock,i=void 0!==r&&r,a=t.dragPropagation,s=void 0!==a&&a,u=t.dragConstraints,l=void 0!==u&&u,c=t.dragElastic,d=void 0===c?Jo:c,f=t.dragMomentum,p=void 0===f||f;return o(o({},t),{drag:n,dragDirectionLock:i,dragPropagation:s,dragConstraints:l,dragElastic:d,dragMomentum:p})},t}();function wi(t,e,n){return!(!0!==e&&e!==t||null!==n&&n!==t)}var Ai={pan:sn((function(t){var e=t.onPan,n=t.onPanStart,r=t.onPanEnd,o=t.onPanSessionStart,i=t.visualElement,a=e||n||r||o,s=(0,u.useRef)(null),l=(0,u.useContext)(q).transformPagePoint,c={onSessionStart:o,onStart:n,onMove:e,onEnd:function(t,e){s.current=null,r&&r(t,e)}};(0,u.useEffect)((function(){null!==s.current&&s.current.updateHandlers(c)})),_e(i,"pointerdown",a&&function(t){s.current=new jo(t,c,{transformPagePoint:l})}),F((function(){return s.current&&s.current.end()}))})),drag:sn((function(t){var e=t.dragControls,n=t.visualElement,r=D((function(){return new bi(n)}));(0,u.useEffect)((function(){return e&&e.subscribe(r)}),[r,e]),(0,u.useEffect)((function(){return r.addListeners()}),[r])}))},Si=["LayoutMeasure","BeforeLayoutMeasure","LayoutUpdate","ViewportBoxUpdate","Update","Render","AnimationComplete","LayoutAnimationComplete","AnimationStart","LayoutAnimationStart","SetAxisTarget","Unmount"],Pi=function(t){var e=t.treeType,n=void 0===e?"":e,r=t.build,i=t.getBaseTarget,u=t.makeTargetAnimatable,l=t.measureViewportBox,c=t.render,d=t.readValueFromInstance,f=t.removeValueFromRenderState,p=t.sortNodePosition,v=t.scrapeMotionValuesFromProps;return function(t,e){var h=t.parent,m=t.props,g=t.presenceId,y=t.blockInitialAnimation,E=t.visualState,x=t.shouldReduceMotion;void 0===e&&(e={});var w,A,S=!1,P=E.latestValues,T=E.renderState,M=function(){var t=Si.map((function(){return new fo})),e={},n={clearAllListeners:function(){return t.forEach((function(t){return t.clear()}))},updatePropListeners:function(t){Si.forEach((function(r){var o,i="on"+r,a=t[i];null===(o=e[r])||void 0===o||o.call(e),a&&(e[r]=n[i](a))}))}};return t.forEach((function(t,e){n["on"+Si[e]]=function(e){return t.add(e)},n["notify"+Si[e]]=function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return t.notify.apply(t,s([],a(e),!1))}})),n}(),V=new Map,R=new Map,O={},D=o({},P);function L(){w&&S&&(k(),c(w,T,m.style,_.projection))}function k(){r(_,T,P,e,m)}function N(){M.notifyUpdate(P)}function I(t,e){var n=e.onChange((function(e){P[t]=e,m.onUpdate&&C.update(N,!1,!0)})),r=e.onRenderRequest(_.scheduleRender);R.set(t,(function(){n(),r()}))}var j=v(m);for(var B in j){var F=j[B];void 0!==P[B]&&Pt(F)&&F.set(P[B],!1)}var U=it(m),H=at(m),_=o(o({treeType:n,current:null,depth:h?h.depth+1:0,parent:h,children:new Set,presenceId:g,shouldReduceMotion:x,variantChildren:H?new Set:void 0,isVisible:void 0,manuallyAnimateOnMount:Boolean(null==h?void 0:h.isMounted()),blockInitialAnimation:y,isMounted:function(){return Boolean(w)},mount:function(t){S=!0,w=_.current=t,_.projection&&_.projection.mount(t),H&&h&&!U&&(A=null==h?void 0:h.addVariantChild(_)),V.forEach((function(t,e){return I(e,t)})),null==h||h.children.add(_),_.setProps(m)},unmount:function(){var t;null===(t=_.projection)||void 0===t||t.unmount(),b.update(N),b.render(L),R.forEach((function(t){return t()})),null==A||A(),null==h||h.children.delete(_),M.clearAllListeners(),w=void 0,S=!1},addVariantChild:function(t){var e,n=_.getClosestVariantNode();if(n)return null===(e=n.variantChildren)||void 0===e||e.add(t),function(){return n.variantChildren.delete(t)}},sortNodePosition:function(t){return p&&n===t.treeType?p(_.getInstance(),t.getInstance()):0},getClosestVariantNode:function(){return H?_:null==h?void 0:h.getClosestVariantNode()},getLayoutId:function(){return m.layoutId},getInstance:function(){return w},getStaticValue:function(t){return P[t]},setStaticValue:function(t,e){return P[t]=e},getLatestValues:function(){return P},setVisibility:function(t){_.isVisible!==t&&(_.isVisible=t,_.scheduleRender())},makeTargetAnimatable:function(t,e){return void 0===e&&(e=!0),u(_,t,m,e)},measureViewportBox:function(){return l(w,m)},addValue:function(t,e){_.hasValue(t)&&_.removeValue(t),V.set(t,e),P[t]=e.get(),I(t,e)},removeValue:function(t){var e;V.delete(t),null===(e=R.get(t))||void 0===e||e(),R.delete(t),delete P[t],f(t,T)},hasValue:function(t){return V.has(t)},getValue:function(t,e){var n=V.get(t);return void 0===n&&void 0!==e&&(n=ho(e),_.addValue(t,n)),n},forEachValue:function(t){return V.forEach(t)},readValue:function(t){var n;return null!==(n=P[t])&&void 0!==n?n:d(w,t,e)},setBaseTarget:function(t,e){D[t]=e},getBaseTarget:function(t){if(i){var e=i(m,t);if(void 0!==e&&!Pt(e))return e}return D[t]}},M),{build:function(){return k(),T},scheduleRender:function(){C.render(L,!1,!0)},syncRender:L,setProps:function(t){(t.transformTemplate||m.transformTemplate)&&_.scheduleRender(),m=t,M.updatePropListeners(t),O=function(t,e,n){var r;for(var o in e){var i=e[o],a=n[o];if(Pt(i))t.addValue(o,i);else if(Pt(a))t.addValue(o,ho(i));else if(a!==i)if(t.hasValue(o)){var s=t.getValue(o);!s.hasAnimated&&s.set(i)}else t.addValue(o,ho(null!==(r=t.getStaticValue(o))&&void 0!==r?r:i))}for(var o in n)void 0===e[o]&&t.removeValue(o);return e}(_,v(m),O)},getProps:function(){return m},getVariant:function(t){var e;return null===(e=m.variants)||void 0===e?void 0:e[t]},getDefaultTransition:function(){return m.transition},getTransformPagePoint:function(){return m.transformPagePoint},getVariantContext:function(t){if(void 0===t&&(t=!1),t)return null==h?void 0:h.getVariantContext();if(!U){var e=(null==h?void 0:h.getVariantContext())||{};return void 0!==m.initial&&(e.initial=m.initial),e}for(var n={},r=0;r<Ci;r++){var o=Ti[r],i=m[o];(nt(i)||!1===i)&&(n[o]=i)}return n}});return _}},Ti=s(["initial"],a(Co),!1),Ci=Ti.length;function Mi(t){return"string"==typeof t&&t.startsWith("var(--")}var Vi=/var\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\)/,Ri=4;function Oi(t,e,n){void 0===n&&(n=1),G(n<=Ri,'Max CSS variable fallback depth detected in property "'.concat(t,'". This may indicate a circular fallback dependency.'));var r=a(function(t){var e=Vi.exec(t);if(!e)return[,];var n=a(e,3);return[n[1],n[2]]}(t),2),o=r[0],i=r[1];if(o){var s=window.getComputedStyle(e).getPropertyValue(o);return s?s.trim():Mi(i)?Oi(i,e,n+1):i}}var Di,Li=new Set(["width","height","top","left","right","bottom","x","y"]),ki=function(t){return Li.has(t)},Ni=function(t,e){t.set(e,!1),t.set(e)},Ii=function(t){return t===_t||t===Bt};!function(t){t.width="width",t.height="height",t.left="left",t.right="right",t.top="top",t.bottom="bottom"}(Di||(Di={}));var ji=function(t,e){return parseFloat(t.split(", ")[e])},Bi=function(t,e){return function(n,r){var o=r.transform;if("none"===o||!o)return 0;var i=o.match(/^matrix3d\((.+)\)$/);if(i)return ji(i[1],e);var a=o.match(/^matrix\((.+)\)$/);return a?ji(a[1],t):0}},Fi=new Set(["x","y","z"]),Ui=yt.filter((function(t){return!Fi.has(t)})),Hi={width:function(t,e){var n=t.x,r=e.paddingLeft,o=void 0===r?"0":r,i=e.paddingRight,a=void 0===i?"0":i;return n.max-n.min-parseFloat(o)-parseFloat(a)},height:function(t,e){var n=t.y,r=e.paddingTop,o=void 0===r?"0":r,i=e.paddingBottom,a=void 0===i?"0":i;return n.max-n.min-parseFloat(o)-parseFloat(a)},top:function(t,e){var n=e.top;return parseFloat(n)},left:function(t,e){var n=e.left;return parseFloat(n)},bottom:function(t,e){var n=t.y,r=e.top;return parseFloat(r)+(n.max-n.min)},right:function(t,e){var n=t.x,r=e.left;return parseFloat(r)+(n.max-n.min)},x:Bi(4,13),y:Bi(5,14)},_i=function(t,e,n,r){var s=function(t,e,n){var r,a=i(e,[]),s=t.getInstance();if(!(s instanceof Element))return{target:a,transitionEnd:n};for(var u in n&&(n=o({},n)),t.forEachValue((function(t){var e=t.get();if(Mi(e)){var n=Oi(e,s);n&&t.set(n)}})),a){var l=a[u];if(Mi(l)){var c=Oi(l,s);c&&(a[u]=c,n&&(null!==(r=n[u])&&void 0!==r||(n[u]=l)))}}return{target:a,transitionEnd:n}}(t,e,r);return function(t,e,n,r){return function(t){return Object.keys(t).some(ki)}(e)?function(t,e,n,r){void 0===n&&(n={}),void 0===r&&(r={}),e=o({},e),r=o({},r);var i=Object.keys(e).filter(ki),s=[],u=!1,l=[];if(i.forEach((function(o){var i=t.getValue(o);if(t.hasValue(o)){var a,c=n[o],d=yo(c),f=e[o];if(me(f)){var p=f.length,v=null===f[0]?1:0;c=f[v],d=yo(c);for(var h=v;h<p;h++)a?G(yo(f[h])===a,"All keyframes must be of the same type"):(a=yo(f[h]),G(a===d||Ii(d)&&Ii(a),"Keyframes must be of the same dimension as the current value"))}else a=yo(f);if(d!==a)if(Ii(d)&&Ii(a)){var m=i.get();"string"==typeof m&&i.set(parseFloat(m)),"string"==typeof f?e[o]=parseFloat(f):Array.isArray(f)&&a===Bt&&(e[o]=f.map(parseFloat))}else(null==d?void 0:d.transform)&&(null==a?void 0:a.transform)&&(0===c||0===f)?0===c?i.set(a.transform(c)):e[o]=d.transform(f):(u||(s=function(t){var e=[];return Ui.forEach((function(n){var r=t.getValue(n);void 0!==r&&(e.push([n,r.get()]),r.set(n.startsWith("scale")?1:0))})),e.length&&t.syncRender(),e}(t),u=!0),l.push(o),r[o]=void 0!==r[o]?r[o]:e[o],Ni(i,f))}})),l.length){var c=l.indexOf("height")>=0?window.pageYOffset:null,d=function(t,e,n){var r=e.measureViewportBox(),o=e.getInstance(),i=getComputedStyle(o),a=i.display,s={};"none"===a&&e.setStaticValue("display",t.display||"block"),n.forEach((function(t){s[t]=Hi[t](r,i)})),e.syncRender();var u=e.measureViewportBox();return n.forEach((function(n){var r=e.getValue(n);Ni(r,s[n]),t[n]=Hi[n](u,i)})),t}(e,t,l);return s.length&&s.forEach((function(e){var n=a(e,2),r=n[0],o=n[1];t.getValue(r).set(o)})),t.syncRender(),null!==c&&window.scrollTo({top:c}),{target:d,transitionEnd:r}}return{target:e,transitionEnd:r}}(t,e,n,r):{target:e,transitionEnd:r}}(t,e=s.target,n,r=s.transitionEnd)},zi={treeType:"dom",readValueFromInstance:function(t,e){if(bt(e)){var n=Jr(e);return n&&n.default||0}var r,o=(r=t,window.getComputedStyle(r));return(Ct(e)?o.getPropertyValue(e):o[e])||0},sortNodePosition:function(t,e){return 2&t.compareDocumentPosition(e)?1:-1},getBaseTarget:function(t,e){var n;return null===(n=t.style)||void 0===n?void 0:n[e]},measureViewportBox:function(t,e){return Ei(t,e.transformPagePoint)},resetTransform:function(t,e,n){var r=n.transformTemplate;e.style.transform=r?r({},""):"none",t.scheduleRender()},restoreTransform:function(t,e){t.style.transform=e.style.transform},removeValueFromRenderState:function(t,e){var n=e.vars,r=e.style;delete n[t],delete r[t]},makeTargetAnimatable:function(t,e,n,r){var a=n.transformValues;void 0===r&&(r=!0);var s=e.transition,u=e.transitionEnd,l=i(e,["transition","transitionEnd"]),c=function(t,e,n){var r,o,i={};for(var a in t)i[a]=null!==(r=wo(a,e))&&void 0!==r?r:null===(o=n.getValue(a))||void 0===o?void 0:o.get();return i}(l,s||{},t);if(a&&(u&&(u=a(u)),l&&(l=a(l)),c&&(c=a(c))),r){!function(t,e,n){var r,o,i,a,s=Object.keys(e).filter((function(e){return!t.hasValue(e)})),u=s.length;if(u)for(var l=0;l<u;l++){var c=s[l],d=e[c],f=null;Array.isArray(d)&&(f=d[0]),null===f&&(f=null!==(o=null!==(r=n[c])&&void 0!==r?r:t.readValue(c))&&void 0!==o?o:e[c]),null!=f&&("string"==typeof f&&(/^\-?\d*\.?\d+$/.test(f)||uo(f))?f=parseFloat(f):!xo(f)&&Yn.test(d)&&(f=to(c,d)),t.addValue(c,ho(f)),null!==(i=(a=n)[c])&&void 0!==i||(a[c]=f),t.setBaseTarget(c,f))}}(t,l,c);var d=_i(t,l,c,u);u=d.transitionEnd,l=d.target}return o({transition:s,transitionEnd:u},l)},scrapeMotionValuesFromProps:pe,build:function(t,e,n,r,o){void 0!==t.isVisible&&(e.style.visibility=t.isVisible?"visible":"hidden"),Yt(e,n,r,o.transformTemplate)},render:ce},Wi=Pi(zi),Gi=Pi(o(o({},zi),{getBaseTarget:function(t,e){return t[e]},readValueFromInstance:function(t,e){var n;return bt(e)?(null===(n=Jr(e))||void 0===n?void 0:n.default)||0:(e=de.has(e)?e:le(e),t.getAttribute(e))},scrapeMotionValuesFromProps:ve,build:function(t,e,n,r,o){oe(e,n,r,o.transformTemplate)},render:fe})),Xi=function(t,e){return ht(t)?Gi(e,{enableHardwareAcceleration:!1}):Wi(e,{enableHardwareAcceleration:!0})};function Yi(t,e){return e.max===e.min?0:t/(e.max-e.min)*100}var Zi={correct:function(t,e){if(!e.target)return t;if("string"==typeof t){if(!Bt.test(t))return t;t=parseFloat(t)}var n=Yi(t,e.target.x),r=Yi(t,e.target.y);return"".concat(n,"% ").concat(r,"%")}},qi="_$css",Ki={correct:function(t,e){var n=e.treeScale,r=e.projectionDelta,o=t,i=t.includes("var("),a=[];i&&(t=t.replace(Vi,(function(t){return a.push(t),qi})));var s=Yn.parse(t);if(s.length>5)return o;var u=Yn.createTransformer(t),l="number"!=typeof s[0]?1:0,c=r.x.scale*n.x,d=r.y.scale*n.y;s[0+l]/=c,s[1+l]/=d;var f=Pn(c,d,.5);"number"==typeof s[2+l]&&(s[2+l]/=f),"number"==typeof s[3+l]&&(s[3+l]/=f);var p=u(s);if(i){var v=0;p=p.replace(qi,(function(){var t=a[v];return v++,t}))}return p}},$i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.componentDidMount=function(){var t,e=this,n=this.props,r=n.visualElement,i=n.layoutGroup,a=n.switchLayoutGroup,s=n.layoutId,u=r.projection;t=Qi,Object.assign(mt,t),u&&((null==i?void 0:i.group)&&i.group.add(u),(null==a?void 0:a.register)&&s&&a.register(u),u.root.didUpdate(),u.addEventListener("animationComplete",(function(){e.safeToRemove()})),u.setOptions(o(o({},u.options),{onExitComplete:function(){return e.safeToRemove()}}))),ut.hasEverUpdated=!0},e.prototype.getSnapshotBeforeUpdate=function(t){var e=this,n=this.props,r=n.layoutDependency,o=n.visualElement,i=n.drag,a=n.isPresent,s=o.projection;return s?(s.isPresent=a,i||t.layoutDependency!==r||void 0===r?s.willUpdate():this.safeToRemove(),t.isPresent!==a&&(a?s.promote():s.relegate()||C.postRender((function(){var t;(null===(t=s.getStack())||void 0===t?void 0:t.members.length)||e.safeToRemove()}))),null):null},e.prototype.componentDidUpdate=function(){var t=this.props.visualElement.projection;t&&(t.root.didUpdate(),!t.currentAnimation&&t.isLead()&&this.safeToRemove())},e.prototype.componentWillUnmount=function(){var t=this.props,e=t.visualElement,n=t.layoutGroup,r=t.switchLayoutGroup,o=e.projection;o&&(o.scheduleCheckAfterUnmount(),(null==n?void 0:n.group)&&n.group.remove(o),(null==r?void 0:r.deregister)&&r.deregister(o))},e.prototype.safeToRemove=function(){var t=this.props.safeToRemove;null==t||t()},e.prototype.render=function(){return null},e}(u.Component),Qi={borderRadius:o(o({},Zi),{applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]}),borderTopLeftRadius:Zi,borderTopRightRadius:Zi,borderBottomLeftRadius:Zi,borderBottomRightRadius:Zi,boxShadow:Ki},Ji={measureLayout:function(t){var e=a(ln(),2),n=e[0],r=e[1],i=(0,u.useContext)(B);return u.createElement($i,o({},t,{layoutGroup:i,switchLayoutGroup:(0,u.useContext)(ct),isPresent:n,safeToRemove:r}))}},ta=["TopLeft","TopRight","BottomLeft","BottomRight"],ea=ta.length,na=function(t){return"string"==typeof t?parseFloat(t):t},ra=function(t){return"number"==typeof t||Bt.test(t)};function oa(t,e){var n;return null!==(n=t[e])&&void 0!==n?n:t.borderRadius}var ia=sa(0,.5,cr),aa=sa(.5,.95,ir);function sa(t,e,n){return function(r){return r<t?0:r>e?1:n(Sn(t,e,r))}}function ua(t,e){t.min=e.min,t.max=e.max}function la(t,e){ua(t.x,e.x),ua(t.y,e.y)}function ca(t,e,n,r,o){return t=ci(t-=e,1/n,r),void 0!==o&&(t=ci(t,1/o,r)),t}function da(t,e,n,r,o){var i=a(n,3),s=i[0],u=i[1],l=i[2];!function(t,e,n,r,o,i,a){if(void 0===e&&(e=0),void 0===n&&(n=1),void 0===r&&(r=.5),void 0===i&&(i=t),void 0===a&&(a=t),jt.test(e)&&(e=parseFloat(e),e=Pn(a.min,a.max,e/100)-a.min),"number"==typeof e){var s=Pn(i.min,i.max,r);t===i&&(s-=e),t.min=ca(t.min,e,n,s,o),t.max=ca(t.max,e,n,s,o)}}(t,e[s],e[u],e[l],e.scale,r,o)}var fa=["x","scaleX","originX"],pa=["y","scaleY","originY"];function va(t,e,n,r){da(t.x,e,fa,null==n?void 0:n.x,null==r?void 0:r.x),da(t.y,e,pa,null==n?void 0:n.y,null==r?void 0:r.y)}function ha(t){return 0===t.translate&&1===t.scale}function ma(t){return ha(t.x)&&ha(t.y)}function ga(t,e){return t.x.min===e.x.min&&t.x.max===e.x.max&&t.y.min===e.y.min&&t.y.max===e.y.max}var ya=function(){function t(){this.members=[]}return t.prototype.add=function(t){lo(this.members,t),t.scheduleRender()},t.prototype.remove=function(t){if(co(this.members,t),t===this.prevLead&&(this.prevLead=void 0),t===this.lead){var e=this.members[this.members.length-1];e&&this.promote(e)}},t.prototype.relegate=function(t){var e,n=this.members.findIndex((function(e){return t===e}));if(0===n)return!1;for(var r=n;r>=0;r--){var o=this.members[r];if(!1!==o.isPresent){e=o;break}}return!!e&&(this.promote(e),!0)},t.prototype.promote=function(t,e){var n,r=this.lead;t!==r&&(this.prevLead=r,this.lead=t,t.show(),r&&(r.instance&&r.scheduleRender(),t.scheduleRender(),t.resumeFrom=r,e&&(t.resumeFrom.preserveOpacity=!0),r.snapshot&&(t.snapshot=r.snapshot,t.snapshot.latestValues=r.animationValues||r.latestValues,t.snapshot.isShared=!0),(null===(n=t.root)||void 0===n?void 0:n.isUpdating)&&(t.isLayoutDirty=!0),!1===t.options.crossfade&&r.hide()))},t.prototype.exitAnimationComplete=function(){this.members.forEach((function(t){var e,n,r,o,i;null===(n=(e=t.options).onExitComplete)||void 0===n||n.call(e),null===(i=null===(r=t.resumingFrom)||void 0===r?void 0:(o=r.options).onExitComplete)||void 0===i||i.call(o)}))},t.prototype.scheduleRender=function(){this.members.forEach((function(t){t.instance&&t.scheduleRender(!1)}))},t.prototype.removeLeadSnapshot=function(){this.lead&&this.lead.snapshot&&(this.lead.snapshot=void 0)},t}(),Ea="translate3d(0px, 0px, 0) scale(1, 1) scale(1, 1)";function xa(t,e,n){var r=t.x.translate/e.x,o=t.y.translate/e.y,i="translate3d(".concat(r,"px, ").concat(o,"px, 0) ");if(i+="scale(".concat(1/e.x,", ").concat(1/e.y,") "),n){var a=n.rotate,s=n.rotateX,u=n.rotateY;a&&(i+="rotate(".concat(a,"deg) ")),s&&(i+="rotateX(".concat(s,"deg) ")),u&&(i+="rotateY(".concat(u,"deg) "))}var l=t.x.scale*e.x,c=t.y.scale*e.y;return(i+="scale(".concat(l,", ").concat(c,")"))===Ea?"none":i}var ba=function(t,e){return t.depth-e.depth},wa=function(){function t(){this.children=[],this.isDirty=!1}return t.prototype.add=function(t){lo(this.children,t),this.isDirty=!0},t.prototype.remove=function(t){co(this.children,t),this.isDirty=!0},t.prototype.forEach=function(t){this.isDirty&&this.children.sort(ba),this.isDirty=!1,this.children.forEach(t)},t}(),Aa=1e3;function Sa(t){var e=t.attachResizeListener,n=t.defaultParent,r=t.measureScroll,i=t.checkIsScrollRoot,u=t.resetTransform;return function(){function t(t,e,r){var o=this;void 0===e&&(e={}),void 0===r&&(r=null==n?void 0:n()),this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.potentialNodes=new Map,this.checkUpdateFailed=function(){o.isUpdating&&(o.isUpdating=!1,o.clearAllSnapshots())},this.updateProjection=function(){o.nodes.forEach(Oa),o.nodes.forEach(Da)},this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.id=t,this.latestValues=e,this.root=r?r.root||r:this,this.path=r?s(s([],a(r.path),!1),[r],!1):[],this.parent=r,this.depth=r?r.depth+1:0,t&&this.root.registerPotentialNode(t,this);for(var i=0;i<this.path.length;i++)this.path[i].shouldResetTransform=!0;this.root===this&&(this.nodes=new wa)}return t.prototype.addEventListener=function(t,e){return this.eventHandlers.has(t)||this.eventHandlers.set(t,new fo),this.eventHandlers.get(t).add(e)},t.prototype.notifyListeners=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];var r=this.eventHandlers.get(t);null==r||r.notify.apply(r,s([],a(e),!1))},t.prototype.hasListeners=function(t){return this.eventHandlers.has(t)},t.prototype.registerPotentialNode=function(t,e){this.potentialNodes.set(t,e)},t.prototype.mount=function(t,n){var r,i=this;if(void 0===n&&(n=!1),!this.instance){this.isSVG=t instanceof SVGElement&&"svg"!==t.tagName,this.instance=t;var a=this.options,s=a.layoutId,u=a.layout,l=a.visualElement;if(l&&!l.getInstance()&&l.mount(t),this.root.nodes.add(this),null===(r=this.parent)||void 0===r||r.children.add(this),this.id&&this.root.potentialNodes.delete(this.id),n&&(u||s)&&(this.isLayoutDirty=!0),e){var c,d=function(){return i.root.updateBlockedByResize=!1};e(t,(function(){i.root.updateBlockedByResize=!0,clearTimeout(c),c=window.setTimeout(d,250),ut.hasAnimatedSinceResize&&(ut.hasAnimatedSinceResize=!1,i.nodes.forEach(Ra))}))}s&&this.root.registerSharedNode(s,this),!1!==this.options.animate&&l&&(s||u)&&this.addEventListener("didUpdate",(function(t){var e,n,r,a,s,u=t.delta,c=t.hasLayoutChanged,d=t.hasRelativeTargetChanged,f=t.layout;if(i.isTreeAnimationBlocked())return i.target=void 0,void(i.relativeTarget=void 0);var p=null!==(n=null!==(e=i.options.transition)&&void 0!==e?e:l.getDefaultTransition())&&void 0!==n?n:Ba,v=l.getProps(),h=v.onLayoutAnimationStart,m=v.onLayoutAnimationComplete,g=!i.targetLayout||!ga(i.targetLayout,f)||d,y=!c&&d;if((null===(r=i.resumeFrom)||void 0===r?void 0:r.instance)||y||c&&(g||!i.currentAnimation)){i.resumeFrom&&(i.resumingFrom=i.resumeFrom,i.resumingFrom.resumingFrom=void 0),i.setAnimationOrigin(u,y);var E=o(o({},ao(p,"layout")),{onPlay:h,onComplete:m});l.shouldReduceMotion&&(E.delay=0,E.type=!1),i.startAnimation(E)}else c||0!==i.animationProgress||i.finishAnimation(),i.isLead()&&(null===(s=(a=i.options).onExitComplete)||void 0===s||s.call(a));i.targetLayout=f}))}},t.prototype.unmount=function(){var t,e;this.options.layoutId&&this.willUpdate(),this.root.nodes.remove(this),null===(t=this.getStack())||void 0===t||t.remove(this),null===(e=this.parent)||void 0===e||e.children.delete(this),this.instance=void 0,b.preRender(this.updateProjection)},t.prototype.blockUpdate=function(){this.updateManuallyBlocked=!0},t.prototype.unblockUpdate=function(){this.updateManuallyBlocked=!1},t.prototype.isUpdateBlocked=function(){return this.updateManuallyBlocked||this.updateBlockedByResize},t.prototype.isTreeAnimationBlocked=function(){var t;return this.isAnimationBlocked||(null===(t=this.parent)||void 0===t?void 0:t.isTreeAnimationBlocked())||!1},t.prototype.startUpdate=function(){var t;this.isUpdateBlocked()||(this.isUpdating=!0,null===(t=this.nodes)||void 0===t||t.forEach(La))},t.prototype.willUpdate=function(t){var e,n,r;if(void 0===t&&(t=!0),this.root.isUpdateBlocked())null===(n=(e=this.options).onExitComplete)||void 0===n||n.call(e);else if(!this.root.isUpdating&&this.root.startUpdate(),!this.isLayoutDirty){this.isLayoutDirty=!0;for(var o=0;o<this.path.length;o++){var i=this.path[o];i.shouldResetTransform=!0,i.updateScroll()}var a=this.options,s=a.layoutId,u=a.layout;if(void 0!==s||u){var l=null===(r=this.options.visualElement)||void 0===r?void 0:r.getProps().transformTemplate;this.prevTransformTemplateValue=null==l?void 0:l(this.latestValues,""),this.updateSnapshot(),t&&this.notifyListeners("willUpdate")}}},t.prototype.didUpdate=function(){if(this.isUpdateBlocked())return this.unblockUpdate(),this.clearAllSnapshots(),void this.nodes.forEach(Ma);this.isUpdating&&(this.isUpdating=!1,this.potentialNodes.size&&(this.potentialNodes.forEach(Fa),this.potentialNodes.clear()),this.nodes.forEach(Va),this.nodes.forEach(Pa),this.nodes.forEach(Ta),this.clearAllSnapshots(),w.update(),w.preRender(),w.render())},t.prototype.clearAllSnapshots=function(){this.nodes.forEach(Ca),this.sharedNodes.forEach(ka)},t.prototype.scheduleUpdateProjection=function(){C.preRender(this.updateProjection,!1,!0)},t.prototype.scheduleCheckAfterUnmount=function(){var t=this;C.postRender((function(){t.isLayoutDirty?t.root.didUpdate():t.root.checkUpdateFailed()}))},t.prototype.updateSnapshot=function(){if(!this.snapshot&&this.instance){var t=this.measure(),e=this.removeTransform(this.removeElementScroll(t));Ha(e),this.snapshot={measured:t,layout:e,latestValues:{}}}},t.prototype.updateLayout=function(){var t;if(this.instance&&(this.updateScroll(),this.options.alwaysMeasureLayout&&this.isLead()||this.isLayoutDirty)){if(this.resumeFrom&&!this.resumeFrom.instance)for(var e=0;e<this.path.length;e++)this.path[e].updateScroll();var n=this.measure();Ha(n);var r=this.layout;this.layout={measured:n,actual:this.removeElementScroll(n)},this.layoutCorrected=ri(),this.isLayoutDirty=!1,this.projectionDelta=void 0,this.notifyListeners("measure",this.layout.actual),null===(t=this.options.visualElement)||void 0===t||t.notifyLayoutMeasure(this.layout.actual,null==r?void 0:r.actual)}},t.prototype.updateScroll=function(){this.options.layoutScroll&&this.instance&&(this.isScrollRoot=i(this.instance),this.scroll=r(this.instance))},t.prototype.resetTransform=function(){var t;if(u){var e=this.isLayoutDirty||this.shouldResetTransform,n=this.projectionDelta&&!ma(this.projectionDelta),r=null===(t=this.options.visualElement)||void 0===t?void 0:t.getProps().transformTemplate,o=null==r?void 0:r(this.latestValues,""),i=o!==this.prevTransformTemplateValue;e&&(n||ui(this.latestValues)||i)&&(u(this.instance,o),this.shouldResetTransform=!1,this.scheduleRender())}},t.prototype.measure=function(){var t=this.options.visualElement;if(!t)return ri();var e=t.measureViewportBox(),n=this.root.scroll;return n&&(vi(e.x,n.x),vi(e.y,n.y)),e},t.prototype.removeElementScroll=function(t){var e=ri();la(e,t);for(var n=0;n<this.path.length;n++){var r=this.path[n],o=r.scroll,i=r.options,a=r.isScrollRoot;if(r!==this.root&&o&&i.layoutScroll){if(a){la(e,t);var s=this.root.scroll;s&&(vi(e.x,-s.x),vi(e.y,-s.y))}vi(e.x,o.x),vi(e.y,o.y)}}return e},t.prototype.applyTransform=function(t,e){void 0===e&&(e=!1);var n=ri();la(n,t);for(var r=0;r<this.path.length;r++){var o=this.path[r];!e&&o.options.layoutScroll&&o.scroll&&o!==o.root&&yi(n,{x:-o.scroll.x,y:-o.scroll.y}),ui(o.latestValues)&&yi(n,o.latestValues)}return ui(this.latestValues)&&yi(n,this.latestValues),n},t.prototype.removeTransform=function(t){var e,n=ri();la(n,t);for(var r=0;r<this.path.length;r++){var o=this.path[r];if(o.instance&&ui(o.latestValues)){si(o.latestValues)&&o.updateSnapshot();var i=ri();la(i,o.measure()),va(n,o.latestValues,null===(e=o.snapshot)||void 0===e?void 0:e.layout,i)}}return ui(this.latestValues)&&va(n,this.latestValues),n},t.prototype.setTargetDelta=function(t){this.targetDelta=t,this.root.scheduleUpdateProjection()},t.prototype.setOptions=function(t){var e;this.options=o(o(o({},this.options),t),{crossfade:null===(e=t.crossfade)||void 0===e||e})},t.prototype.clearMeasurements=function(){this.scroll=void 0,this.layout=void 0,this.snapshot=void 0,this.prevTransformTemplateValue=void 0,this.targetDelta=void 0,this.target=void 0,this.isLayoutDirty=!1},t.prototype.resolveTargetDelta=function(){var t,e,n,r,o=this.options,i=o.layout,a=o.layoutId;this.layout&&(i||a)&&(this.targetDelta||this.relativeTarget||(this.relativeParent=this.getClosestProjectingParent(),this.relativeParent&&this.relativeParent.layout&&(this.relativeTarget=ri(),this.relativeTargetOrigin=ri(),Ko(this.relativeTargetOrigin,this.layout.actual,this.relativeParent.layout.actual),la(this.relativeTarget,this.relativeTargetOrigin))),(this.relativeTarget||this.targetDelta)&&(this.target||(this.target=ri(),this.targetWithTransforms=ri()),this.relativeTarget&&this.relativeTargetOrigin&&(null===(t=this.relativeParent)||void 0===t?void 0:t.target)?(e=this.target,n=this.relativeTarget,r=this.relativeParent.target,Zo(e.x,n.x,r.x),Zo(e.y,n.y,r.y)):this.targetDelta?(Boolean(this.resumingFrom)?this.target=this.applyTransform(this.layout.actual):la(this.target,this.layout.actual),pi(this.target,this.targetDelta)):la(this.target,this.layout.actual),this.attemptToResolveRelativeTarget&&(this.attemptToResolveRelativeTarget=!1,this.relativeParent=this.getClosestProjectingParent(),this.relativeParent&&Boolean(this.relativeParent.resumingFrom)===Boolean(this.resumingFrom)&&!this.relativeParent.options.layoutScroll&&this.relativeParent.target&&(this.relativeTarget=ri(),this.relativeTargetOrigin=ri(),Ko(this.relativeTargetOrigin,this.target,this.relativeParent.target),la(this.relativeTarget,this.relativeTargetOrigin)))))},t.prototype.getClosestProjectingParent=function(){if(this.parent&&!ui(this.parent.latestValues))return(this.parent.relativeTarget||this.parent.targetDelta)&&this.parent.layout?this.parent:this.parent.getClosestProjectingParent()},t.prototype.calcProjection=function(){var t,e=this.options,n=e.layout,r=e.layoutId;if(this.isTreeAnimating=Boolean((null===(t=this.parent)||void 0===t?void 0:t.isTreeAnimating)||this.currentAnimation||this.pendingAnimation),this.isTreeAnimating||(this.targetDelta=this.relativeTarget=void 0),this.layout&&(n||r)){var o=this.getLead();la(this.layoutCorrected,this.layout.actual),function(t,e,n,r){var o,i;void 0===r&&(r=!1);var a=n.length;if(a){var s,u;e.x=e.y=1;for(var l=0;l<a;l++)u=(s=n[l]).projectionDelta,"contents"!==(null===(i=null===(o=s.instance)||void 0===o?void 0:o.style)||void 0===i?void 0:i.display)&&(r&&s.options.layoutScroll&&s.scroll&&s!==s.root&&yi(t,{x:-s.scroll.x,y:-s.scroll.y}),u&&(e.x*=u.x.scale,e.y*=u.y.scale,pi(t,u)),r&&ui(s.latestValues)&&yi(t,s.latestValues))}}(this.layoutCorrected,this.treeScale,this.path,Boolean(this.resumingFrom)||this!==o);var i=o.target;if(i){this.projectionDelta||(this.projectionDelta=ni(),this.projectionDeltaWithTransform=ni());var a=this.treeScale.x,s=this.treeScale.y,u=this.projectionTransform;Yo(this.projectionDelta,this.layoutCorrected,i,this.latestValues),this.projectionTransform=xa(this.projectionDelta,this.treeScale),this.projectionTransform===u&&this.treeScale.x===a&&this.treeScale.y===s||(this.hasProjected=!0,this.scheduleRender(),this.notifyListeners("projectionUpdate",i))}}},t.prototype.hide=function(){this.isVisible=!1},t.prototype.show=function(){this.isVisible=!0},t.prototype.scheduleRender=function(t){var e,n,r;void 0===t&&(t=!0),null===(n=(e=this.options).scheduleRender)||void 0===n||n.call(e),t&&(null===(r=this.getStack())||void 0===r||r.scheduleRender()),this.resumingFrom&&!this.resumingFrom.instance&&(this.resumingFrom=void 0)},t.prototype.setAnimationOrigin=function(t,e){var n,r=this;void 0===e&&(e=!1);var i=this.snapshot,a=(null==i?void 0:i.latestValues)||{},s=o({},this.latestValues),u=ni();this.relativeTarget=this.relativeTargetOrigin=void 0,this.attemptToResolveRelativeTarget=!e;var l=ri(),c=null==i?void 0:i.isShared,d=((null===(n=this.getStack())||void 0===n?void 0:n.members.length)||0)<=1,f=Boolean(c&&!d&&!0===this.options.crossfade&&!this.path.some(ja));this.animationProgress=0,this.mixTargetDelta=function(e){var n,o,i,p,v,h=e/1e3;Na(u.x,t.x,h),Na(u.y,t.y,h),r.setTargetDelta(u),r.relativeTarget&&r.relativeTargetOrigin&&r.layout&&(null===(n=r.relativeParent)||void 0===n?void 0:n.layout)&&(Ko(l,r.layout.actual,r.relativeParent.layout.actual),o=r.relativeTarget,i=r.relativeTargetOrigin,p=l,v=h,Ia(o.x,i.x,p.x,v),Ia(o.y,i.y,p.y,v)),c&&(r.animationValues=s,function(t,e,n,r,o,i){var a,s,u,l;o?(t.opacity=Pn(0,null!==(a=n.opacity)&&void 0!==a?a:1,ia(r)),t.opacityExit=Pn(null!==(s=e.opacity)&&void 0!==s?s:1,0,aa(r))):i&&(t.opacity=Pn(null!==(u=e.opacity)&&void 0!==u?u:1,null!==(l=n.opacity)&&void 0!==l?l:1,r));for(var c=0;c<ea;c++){var d="border".concat(ta[c],"Radius"),f=oa(e,d),p=oa(n,d);void 0===f&&void 0===p||(f||(f=0),p||(p=0),0===f||0===p||ra(f)===ra(p)?(t[d]=Math.max(Pn(na(f),na(p),r),0),(jt.test(p)||jt.test(f))&&(t[d]+="%")):t[d]=p)}(e.rotate||n.rotate)&&(t.rotate=Pn(e.rotate||0,n.rotate||0,r))}(s,a,r.latestValues,h,f,d)),r.root.scheduleUpdateProjection(),r.scheduleRender(),r.animationProgress=h},this.mixTargetDelta(0)},t.prototype.startAnimation=function(t){var e,n,r=this;this.notifyListeners("animationStart"),null===(e=this.currentAnimation)||void 0===e||e.stop(),this.resumingFrom&&(null===(n=this.resumingFrom.currentAnimation)||void 0===n||n.stop()),this.pendingAnimation&&(b.update(this.pendingAnimation),this.pendingAnimation=void 0),this.pendingAnimation=C.update((function(){ut.hasAnimatedSinceResize=!0,r.currentAnimation=function(t,e,n){void 0===n&&(n={});var r=Pt(0)?0:ho(0);return so("",r,e,n),{stop:function(){return r.stop()},isAnimating:function(){return r.isAnimating()}}}(0,Aa,o(o({},t),{onUpdate:function(e){var n;r.mixTargetDelta(e),null===(n=t.onUpdate)||void 0===n||n.call(t,e)},onComplete:function(){var e;null===(e=t.onComplete)||void 0===e||e.call(t),r.completeAnimation()}})),r.resumingFrom&&(r.resumingFrom.currentAnimation=r.currentAnimation),r.pendingAnimation=void 0}))},t.prototype.completeAnimation=function(){var t;this.resumingFrom&&(this.resumingFrom.currentAnimation=void 0,this.resumingFrom.preserveOpacity=void 0),null===(t=this.getStack())||void 0===t||t.exitAnimationComplete(),this.resumingFrom=this.currentAnimation=this.animationValues=void 0,this.notifyListeners("animationComplete")},t.prototype.finishAnimation=function(){var t;this.currentAnimation&&(null===(t=this.mixTargetDelta)||void 0===t||t.call(this,Aa),this.currentAnimation.stop()),this.completeAnimation()},t.prototype.applyTransformsToTarget=function(){var t=this.getLead(),e=t.targetWithTransforms,n=t.target,r=t.layout,o=t.latestValues;e&&n&&r&&(la(e,n),yi(e,o),Yo(this.projectionDeltaWithTransform,this.layoutCorrected,e,o))},t.prototype.registerSharedNode=function(t,e){var n,r,o;this.sharedNodes.has(t)||this.sharedNodes.set(t,new ya),this.sharedNodes.get(t).add(e),e.promote({transition:null===(n=e.options.initialPromotionConfig)||void 0===n?void 0:n.transition,preserveFollowOpacity:null===(o=null===(r=e.options.initialPromotionConfig)||void 0===r?void 0:r.shouldPreserveFollowOpacity)||void 0===o?void 0:o.call(r,e)})},t.prototype.isLead=function(){var t=this.getStack();return!t||t.lead===this},t.prototype.getLead=function(){var t;return this.options.layoutId&&(null===(t=this.getStack())||void 0===t?void 0:t.lead)||this},t.prototype.getPrevLead=function(){var t;return this.options.layoutId?null===(t=this.getStack())||void 0===t?void 0:t.prevLead:void 0},t.prototype.getStack=function(){var t=this.options.layoutId;if(t)return this.root.sharedNodes.get(t)},t.prototype.promote=function(t){var e=void 0===t?{}:t,n=e.needsReset,r=e.transition,o=e.preserveFollowOpacity,i=this.getStack();i&&i.promote(this,o),n&&(this.projectionDelta=void 0,this.needsReset=!0),r&&this.setOptions({transition:r})},t.prototype.relegate=function(){var t=this.getStack();return!!t&&t.relegate(this)},t.prototype.resetRotation=function(){var t=this.options.visualElement;if(t){for(var e=!1,n={},r=0;r<gt.length;r++){var o="rotate"+gt[r];t.getStaticValue(o)&&(e=!0,n[o]=t.getStaticValue(o),t.setStaticValue(o,0))}if(e){for(var o in null==t||t.syncRender(),n)t.setStaticValue(o,n[o]);t.scheduleRender()}}},t.prototype.getProjectionStyles=function(t){var e,n,r,o,i,a;void 0===t&&(t={});var s={};if(!this.instance||this.isSVG)return s;if(!this.isVisible)return{visibility:"hidden"};s.visibility="";var u=null===(e=this.options.visualElement)||void 0===e?void 0:e.getProps().transformTemplate;if(this.needsReset)return this.needsReset=!1,s.opacity="",s.pointerEvents=Ee(t.pointerEvents)||"",s.transform=u?u(this.latestValues,""):"none",s;var l=this.getLead();if(!this.projectionDelta||!this.layout||!l.target){var c={};return this.options.layoutId&&(c.opacity=null!==(n=this.latestValues.opacity)&&void 0!==n?n:1,c.pointerEvents=Ee(t.pointerEvents)||""),this.hasProjected&&!ui(this.latestValues)&&(c.transform=u?u({},""):"none",this.hasProjected=!1),c}var d=l.animationValues||l.latestValues;this.applyTransformsToTarget(),s.transform=xa(this.projectionDeltaWithTransform,this.treeScale,d),u&&(s.transform=u(d,s.transform));var f=this.projectionDelta,p=f.x,v=f.y;for(var h in s.transformOrigin="".concat(100*p.origin,"% ").concat(100*v.origin,"% 0"),l.animationValues?s.opacity=l===this?null!==(o=null!==(r=d.opacity)&&void 0!==r?r:this.latestValues.opacity)&&void 0!==o?o:1:this.preserveOpacity?this.latestValues.opacity:d.opacityExit:s.opacity=l===this?null!==(i=d.opacity)&&void 0!==i?i:"":null!==(a=d.opacityExit)&&void 0!==a?a:0,mt)if(void 0!==d[h]){var m=mt[h],g=m.correct,y=m.applyTo,E=g(d[h],l);if(y)for(var x=y.length,b=0;b<x;b++)s[y[b]]=E;else s[h]=E}return this.options.layoutId&&(s.pointerEvents=l===this?Ee(t.pointerEvents)||"":"none"),s},t.prototype.clearSnapshot=function(){this.resumeFrom=this.snapshot=void 0},t.prototype.resetTree=function(){this.root.nodes.forEach((function(t){var e;return null===(e=t.currentAnimation)||void 0===e?void 0:e.stop()})),this.root.nodes.forEach(Ma),this.root.sharedNodes.clear()},t}()}function Pa(t){t.updateLayout()}function Ta(t){var e,n,r,o,i=null!==(n=null===(e=t.resumeFrom)||void 0===e?void 0:e.snapshot)&&void 0!==n?n:t.snapshot;if(t.isLead()&&t.layout&&i&&t.hasListeners("didUpdate")){var a=t.layout,s=a.actual,u=a.measured;"size"===t.options.animationType?oi((function(t){var e=i.isShared?i.measured[t]:i.layout[t],n=Wo(e);e.min=s[t].min,e.max=e.min+n})):"position"===t.options.animationType&&oi((function(t){var e=i.isShared?i.measured[t]:i.layout[t],n=Wo(s[t]);e.max=e.min+n}));var l=ni();Yo(l,s,i.layout);var c=ni();i.isShared?Yo(c,t.applyTransform(u,!0),i.measured):Yo(c,s,i.layout);var d=!ma(l),f=!1;if(!t.resumeFrom&&(t.relativeParent=t.getClosestProjectingParent(),t.relativeParent&&!t.relativeParent.resumeFrom)){var p=t.relativeParent,v=p.snapshot,h=p.layout;if(v&&h){var m=ri();Ko(m,i.layout,v.layout);var g=ri();Ko(g,s,h.actual),ga(m,g)||(f=!0)}}t.notifyListeners("didUpdate",{layout:s,snapshot:i,delta:c,layoutDelta:l,hasLayoutChanged:d,hasRelativeTargetChanged:f})}else t.isLead()&&(null===(o=(r=t.options).onExitComplete)||void 0===o||o.call(r));t.options.transition=void 0}function Ca(t){t.clearSnapshot()}function Ma(t){t.clearMeasurements()}function Va(t){var e=t.options.visualElement;(null==e?void 0:e.getProps().onBeforeLayoutMeasure)&&e.notifyBeforeLayoutMeasure(),t.resetTransform()}function Ra(t){t.finishAnimation(),t.targetDelta=t.relativeTarget=t.target=void 0}function Oa(t){t.resolveTargetDelta()}function Da(t){t.calcProjection()}function La(t){t.resetRotation()}function ka(t){t.removeLeadSnapshot()}function Na(t,e,n){t.translate=Pn(e.translate,0,n),t.scale=Pn(e.scale,1,n),t.origin=e.origin,t.originPoint=e.originPoint}function Ia(t,e,n,r){t.min=Pn(e.min,n.min,r),t.max=Pn(e.max,n.max,r)}function ja(t){return t.animationValues&&void 0!==t.animationValues.opacityExit}var Ba={duration:.45,ease:[.4,0,.1,1]};function Fa(t,e){for(var n=t.root,r=t.path.length-1;r>=0;r--)if(Boolean(t.path[r].instance)){n=t.path[r];break}var o=(n&&n!==t.root?n.instance:document).querySelector('[data-projection-id="'.concat(e,'"]'));o&&t.mount(o,!0)}function Ua(t){t.min=Math.round(t.min),t.max=Math.round(t.max)}function Ha(t){Ua(t.x),Ua(t.y)}var _a=Sa({attachResizeListener:function(t,e){return Te(t,"resize",e)},measureScroll:function(){return{x:document.documentElement.scrollLeft||document.body.scrollLeft,y:document.documentElement.scrollTop||document.body.scrollTop}},checkIsScrollRoot:function(){return!0}}),za={current:void 0},Wa=Sa({measureScroll:function(t){return{x:t.scrollLeft,y:t.scrollTop}},defaultParent:function(){if(!za.current){var t=new _a(0,{});t.mount(window),t.setOptions({layoutScroll:!0}),za.current=t}return za.current},resetTransform:function(t,e){t.style.transform=null!=e?e:"none"},checkIsScrollRoot:function(t){return Boolean("fixed"===window.getComputedStyle(t).position)}}),Ga=o(o(o(o({},Do),un),Ai),Ji),Xa=pt((function(t,e){return function(t,e,n,r,i){var a=e.forwardMotionProps,s=void 0!==a&&a,u=ht(t)?Se:Pe;return o(o({},u),{preloadedFeatures:n,useRender:se(s),createVisualElement:r,projectionNodeConstructor:i,Component:t})}(t,e,Ga,Xi,Wa)}));const Ya=require("react-dom"),Za={SHOWROOM:"/showroom",SENDOUTS:"/sendouts",SENDOUTS_CMS:"/sendouts-cms",MARKETING_ENGINE:"/media",USER_MANAGEMENT:"/users",TENANTS:"/tenants",DASHBOARD:"/dashboard",DASHBOARD_CREATE_WORKSPACE_MODAL:"/dashboard/create-workspace"},qa=300,Ka=300,$a=require("@touchtech/web-auth"),Qa=require("@touchtech/web-tenant-id-provider");var Ja;!function(t){t.OPEN="OPEN",t.HIDDEN="HIDDEN",t.EXPANDED="EXPANDED"}(Ja||(Ja={}));const ts=l().createContext({});function es(){return(0,u.useContext)(ts)}function ns({children:t,isOpen:e,onNavigationClose:n=(()=>{})}){const[r]=(0,u.useContext)(Qa.TenantIdContext),[o,i]=(0,u.useState)({selectedTenantId:r,currentPosition:Ja.HIDDEN}),{user:a,authService:s,canSignOut:c}=(0,u.useContext)($a.AuthContext);(0,u.useEffect)((()=>{i(e?t=>Object.assign(Object.assign({},t),{selectedTenantId:r,currentPosition:Ja.OPEN}):t=>Object.assign(Object.assign({},t),{currentPosition:Ja.HIDDEN}))}),[r,e,i]),(0,u.useEffect)((()=>{e&&s.refreshUser(300)}),[s,e]);const d=(0,u.useMemo)((()=>!!a&&(0,$a.userHasTenantAccess)(a,o.selectedTenantId,$a.Privileges.MARKETING_ENGINE_APP)),[o.selectedTenantId,a]),f=(0,u.useMemo)((()=>!!a&&(0,$a.userHasTenantAccess)(a,o.selectedTenantId,$a.Privileges.SHOWROOM_APP)),[o.selectedTenantId,a]),p=(0,u.useMemo)((()=>!!a&&(0,$a.userHasTenantAccess)(a,o.selectedTenantId,$a.Privileges.SENDOUTS_APP)),[o.selectedTenantId,a]),v=(0,u.useMemo)((()=>!!a&&(0,$a.userHasTenantAccess)(a,o.selectedTenantId,$a.Privileges.SENDOUTS_CMS_APP)),[o.selectedTenantId,a]),h=(0,u.useMemo)((()=>!!a&&(0,$a.userHasTenantAccess)(a,o.selectedTenantId,$a.Privileges.USER_MANAGEMENT_APP)),[o.selectedTenantId,a]),m=(0,u.useCallback)((t=>i((e=>Object.assign(Object.assign({},e),t)))),[]),g=(0,u.useCallback)((()=>{return t=this,e=void 0,r=function*(){c&&(yield s.signOut())},new((n=void 0)||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function s(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,s)}u((r=r.apply(t,e||[])).next())}));var t,e,n,r}),[s,c]),y=(0,u.useCallback)((()=>{o.currentPosition!==Ja.OPEN?o.currentPosition!==Ja.EXPANDED||m({currentPosition:Ja.OPEN}):m({currentPosition:Ja.EXPANDED,selectedTenantId:r})}),[r,m,o.currentPosition]),E=(0,u.useMemo)((()=>({hasMarketingEngineAccess:d,hasShowroomAccess:f,hasSendoutsAccess:p,hasSendoutsCmsAccess:v,hasUserManagementAccess:h,viewState:o,updateViewState:m,signOut:g,toggleTenants:y,onNavigationClose:n})),[d,p,v,f,h,o,m,g,y,n]);return l().createElement(ts.Provider,{value:E},t)}const rs="tKygQ4LMDikHs5Hsh0Qk",os=require("@touchtech/baselayer-ui"),is=require("swr");var as=t.n(is);const ss=require("@touchtech/web-api-client");function us(){const t=(0,ss.useApi)(),e=function(){var t;const e=null!==(t=process.env.TENANTS_SERVICE_URL)&&void 0!==t?t:process.env.REACT_APP_TENANTS_SERVICE_URL;if(!e)throw new Error("TENANTS_SERVICE_URL or REACT_APP_TENANTS_SERVICE_URL must be set");return(0,ss.createUrl)(e,"/api/Tenants/view")}(),{data:n,error:r}=as()(e,t.get);return{tenants:null!=n?n:[],isLoading:!n&&!r,error:r}}const ls=function({layout:t}){const{viewState:{selectedTenantId:e}}=es(),{tenants:n}=us(),r=(0,u.useMemo)((()=>n.find((t=>t.id===e))),[e,n]);return r?l().createElement(os.Image,{src:r.logoUrl,layout:t}):null};function cs(t){if("string"==typeof t||"number"==typeof t)return""+t;let e="";if(Array.isArray(t))for(let n,r=0;r<t.length;r++)""!==(n=cs(t[r]))&&(e+=(e&&" ")+n);else for(let n in t)t[n]&&(e+=(e&&" ")+n);return e}const ds="alkxjZvTgAcsz0JRkm6c",fs="p4JPb4DzmGoZOIhO09ws",ps="x0_VF3BXbWUtlCCgOtQZ",vs="jWPBZu8iLDyyTn6eW6kw",hs="gb6t82xpZU7ymkUdSux_",ms=function({children:t,header:e,footer:n,className:r,width:o,showHeaderBorder:i}){return l().createElement("div",{className:cs([ds,r]),style:{width:o}},!!e&&l().createElement("div",{className:cs([fs,{[ps]:i}])},e),l().createElement("div",{className:vs},t),!!n&&l().createElement("div",{className:hs},n))},gs=require("react-router-dom"),ys="RuYyU4ZU982IBgdb1Nr2",Es="mDVPC452sIZ1AZ12Hupu",xs=function({children:t,to:e,hidden:n}){const[r,o]=(0,u.useContext)(Qa.TenantIdContext),[i,a]=(0,u.useState)(!1),{viewState:{selectedTenantId:s}}=es();(0,u.useEffect)((()=>{const t=()=>{r!==s&&i&&o(s)};return window.addEventListener("unload",t),()=>{window.removeEventListener("unload",t)}}),[o,r,s,i]);const c=(0,u.useCallback)((()=>{a(!0),window.location.assign(e)}),[e]),d=!!(0,gs.matchPath)(`${e}/*`,window.location.pathname)&&r===s;return n?null:l().createElement(os.Button,{align:"left",noBorder:!0,className:cs([ys,{[Es]:d}]),noShadow:!0,disabled:d,onClick:c},t)},bs="xq2NhM9BEi_W4nwT3yh2",ws="BGjEtVj4r_GL1XRPggdK",As="VaoS9sXTECATv5AlheWA",Ss="WuTrGz3UU3pH1fVTiCTZ",Ps="Coh2DFrCNYqjuH_r7MvG",Ts="MOX9IB0nSx5cfLHrcoOZ",Cs="mwOFiCMJUcwQgN71e7sC",Ms="AVG7kB9Fyvbb6jW3FA0B",Vs="VKsHJOXcQi174s94qmOo",Rs="SWnA20nAEkR6goWGlFre",Os="HeDayZpMaiaMwoXvRFoD",Ds="XF2F_YGE6PmxS0tEVvP2",Ls="V3IZL1yVbMWIposjQAL8",ks="Zgx8Dpy2pAdOoqTtMMQi",Ns="AZnlFbzTGExGtpYh4_LY",Is="q8vjvRoPyWxP_4biO7ye",js=function(){const{user:t}=(0,u.useContext)($a.AuthContext),{toggleTenants:e}=es(),{signOut:n,onNavigationClose:r,hasShowroomAccess:o,hasMarketingEngineAccess:i,hasSendoutsAccess:a,hasSendoutsCmsAccess:s,hasUserManagementAccess:c}=es();return l().createElement(ms,{className:bs,width:Ka,showHeaderBorder:!0,header:l().createElement("div",{className:ws},l().createElement("div",{className:As},l().createElement("div",{className:Ss},l().createElement(ls,null)),l().createElement("div",{className:Ps,onClick:r},l().createElement(os.Icon,{src:"data:image/svg+xml,%3csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M0.398438 0.399902L19.5984 19.5999M0.398438 19.5999L19.5984 0.399902' stroke='black'/%3e %3c/svg%3e",size:"large"}))),l().createElement(os.Button,{align:"left",noBorder:!0,transparent:!0,className:Ts,onClick:e},"Change brand")),footer:l().createElement("div",{className:Ls,onClick:n},l().createElement("div",{className:ks},l().createElement("div",{className:Ns},l().createElement(os.Icon,{src:"data:image/svg+xml,%3csvg width='14' height='15' viewBox='0 0 14 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M7 1.5999L10.4667 4.7999M7 1.5999L3.8 4.7999M7 1.5999L7 11.7332M13.4 7.46657L13.4 14.3999L0.600002 14.3999L0.600002 7.46657' stroke='%232D2D33'/%3e %3c/svg%3e",size:"medium"})),l().createElement("div",{className:Is},"Sign out")))},l().createElement("div",{className:Cs},l().createElement("div",{className:Ms},l().createElement("div",{className:Vs},l().createElement(xs,{to:Za.DASHBOARD},"Dashboard"),l().createElement(xs,{hidden:!o,to:Za.SHOWROOM},"Presentations (Showroom)"),l().createElement(xs,{hidden:!a,to:Za.SENDOUTS},"Sendouts"),l().createElement(xs,{hidden:!i,to:Za.MARKETING_ENGINE},"Media Library"),l().createElement(xs,{hidden:!s,to:Za.SENDOUTS_CMS},"Sendouts CMS"),l().createElement(xs,{hidden:!c,to:Za.USER_MANAGEMENT},"Users")),t&&l().createElement("div",{className:Rs},l().createElement("div",{className:Os},t.firstName," ",t.lastName),l().createElement("div",{className:Ds},t.email)))))},Bs="V1qoW3V5Xb2iaEBhQlFZ",Fs="TPBl4ro5b8sgjOagJRWS",Us=function({onClose:t}){return l().createElement(os.ConfirmationModal,{onClose:t,header:"Create a new Brand Workspace",buttonsRight:[l().createElement(os.Button,{key:"close",onClick:t,rounded:!0},"Close")],isOpen:!0},l().createElement("div",{className:Bs},"Please email ",l().createElement("span",{className:Fs},"support@touchtech.com")," and we will help you setup your Brand Workspace. You will be guided throughout the process of uploading your content."))},Hs="oeuWMMcJvLzGVyzlkzri",_s="bbUHwXdmTmLx1Bm14Atn",zs=function({tenant:t}){const{viewState:{selectedTenantId:e},updateViewState:n}=es(),r=e===t.id;return l().createElement(os.Button,{key:t.id,align:"left",noBorder:!0,className:cs([Hs,{[_s]:r}]),noShadow:!0,disabled:r,onClick:()=>{n({selectedTenantId:t.id,currentPosition:Ja.OPEN})}},t.label)},Ws="TImCshnjb7UPVk2R4lZP",Gs="PLOWzDGNGXzLAJrH0RK3",Xs="xdEO_zIZZ4tFrfapkFFT",Ys="As12vynTQk_jknQIlJ8A",Zs="q2ws7axL5Ap1hQW3m16N",qs="zYkzNuNQhvIdWKZhoQGr",Ks="xxcu6ytXRcPl1GZJ2vd9",$s="QYhcvZqbZxgenG41kwNq",Qs=function(){const[t,e]=(0,u.useState)(!1),{toggleTenants:n}=es(),{tenants:r}=us();return l().createElement("div",{className:Ws},l().createElement(ms,{width:qa,header:l().createElement("div",{className:Gs},l().createElement("div",{className:Xs,onClick:n},l().createElement(os.Icon,{src:"data:image/svg+xml,%3csvg width='22' height='14' viewBox='0 0 22 14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M1.6001 7.00039L8.0001 13.4004M1.6001 7.00039L8.0001 0.600391M1.6001 7.00039L21.6001 7.00039' stroke='%23262626'/%3e %3c/svg%3e",size:"large"}))),footer:l().createElement("div",{className:Zs,onClick:()=>window.location.assign(Za.DASHBOARD_CREATE_WORKSPACE_MODAL)},l().createElement("div",{className:qs},l().createElement("div",{className:Ks},l().createElement(os.Icon,{src:"data:image/svg+xml,%3csvg width='14' height='14' viewBox='0 0 14 14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M0.00170906 7L13.0017 7M6.50171 13.5L6.50171 0.5' stroke='%232D2D33'/%3e %3c/svg%3e",size:"medium"})),l().createElement("div",{className:$s},"Create a brand workspace")))},l().createElement("div",{className:Ys},r.map((t=>l().createElement(zs,{tenant:t,key:t.id}))))),t&&l().createElement(Us,{onClose:()=>{e(!1)}}))},Js="x4CcnKP0hsMpf8aTV1vc",tu=function(){return l().createElement("div",{className:Js},l().createElement(js,null),l().createElement(Qs,null))},eu=Ka+qa,nu={ease:"easeOut",duration:.3},ru={[Ja.HIDDEN]:{left:-eu,transition:nu},[Ja.OPEN]:{left:-Ka,transition:nu},[Ja.EXPANDED]:{left:0,transition:nu}},ou=function({isOpen:t,portalContainer:e=document.body,onClose:n}){return l().createElement(ns,{onNavigationClose:n,isOpen:t},l().createElement(ts.Consumer,null,(({viewState:{currentPosition:t}})=>(0,Ya.createPortal)(l().createElement(H,null,t!==Ja.HIDDEN&&l().createElement(Xa.div,{className:rs,initial:Ja.HIDDEN,variants:ru,animate:t,exit:Ja.HIDDEN},l().createElement(tu,null))),e))))},iu="data:image/svg+xml,%3csvg width='14' height='15' viewBox='0 0 14 11' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M0 1.5H14M0 5.5H14M0 9.5H14M0' stroke='black'/%3e %3c/svg%3e",au=function(t){var{size:e="medium",alt:n="Toggle navigation menu",src:r=iu,portalContainer:o=document.body}=t,s=i(t,["size","alt","src","portalContainer"]);const[c,d]=function(t){void 0===t&&(t=!1);var e=a((0,u.useState)(t),2),n=e[0],r=e[1];return[n,(0,u.useCallback)((function(t){r("boolean"==typeof t?t:function(t){return!t})}),[])]}(!1);return l().createElement(u.Fragment,null,l().createElement(os.IconButton,Object.assign({size:e,alt:n,src:r,onClick:()=>d()},s)),l().createElement(ou,{isOpen:c,portalContainer:o,onClose:()=>d()}))};var su=exports;for(var uu in e)su[uu]=e[uu];e.__esModule&&Object.defineProperty(su,"__esModule",{value:!0})})();
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QW9CWCxHQUFtQlksUUFDdEMsa0JBQUN6QixHQUFPOEcsSUFBRyxDQUNUbkMsVUFBVyxHQUNYL2lELFFBQVNpL0MsR0FBbUJZLE9BQzVCaDRDLFNBQVVpOUMsR0FDVno4QyxRQUFTdTNDLEVBQ1RwN0MsS0FBTXk2QyxHQUFtQlksUUFFekIsa0JBQUMsR0FBSyxRQUlaa0YsS0FNWixFQ2pFQSxvTUN5Q0EsR0EzQkEsU0FBMEIsRyxJQUFBLEtBQ3hCempELEVBQU8sU0FBUSxJQUNmNmpELEVBQU0seUJBQXdCLElBQzlCM0MsRUFBTTRDLEdBQVEsZ0JBQ2RMLEVBQWtCam1ELFNBQVNpL0MsTUFBSSxFQUM1Qjc1QyxFQUFLLElBTGdCLHdDQU94QixNQUFPbWhELEVBQWtCQyxHQ25CWixTQUFtQkMsUUFDVCxJQUFqQkEsSUFBMkJBLEdBQWUsR0FDOUMsSUFBSXpsRCxFQUFLLEdBQU8sSUFBQWlDLFVBQVN3akQsR0FBZSxHQUFJMXNELEVBQVFpSCxFQUFHLEdBQUkwbEQsRUFBVzFsRCxFQUFHLEdBV3pFLE1BQU8sQ0FBQ2pILEdBVkssSUFBQXNKLGNBQVksU0FBVXNqRCxHQUUzQkQsRUFEb0Isa0JBQWJDLEVBQ0VBLEVBR0EsU0FBVXZiLEdBQ2YsT0FBUUEsQ0FDWixFQUVSLEdBQUcsSUFFUCxDREtxRHdiLEVBQVUsR0FFN0QsT0FDRSxrQkFBQyxFQUFBQyxTQUFRLEtBQ1Asa0JBQUMsR0FBQUMsV0FBVSxlQUNUdGtELEtBQU1BLEVBQ042akQsSUFBS0EsRUFDTDNDLElBQUtBLEVBQ0x3QixRQUFTLElBQU1zQixLQUNYcGhELElBRU4sa0JBQUMsR0FBVSxDQUNUbTdDLE9BQVFnRyxFQUNSTixnQkFBaUJBLEVBQ2pCVCxRQUFTLElBQU1nQixNQUl2QixFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51L3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51L2V4dGVybmFsIGNvbW1vbmpzIHtcInJvb3RcIjpcIlJlYWN0XCIsXCJjb21tb25qc1wiOlwicmVhY3RcIixcImNvbW1vbmpzMlwiOlwicmVhY3RcIixcImFtZFwiOlwicmVhY3RcIn0iLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy9wcm9jZXNzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVzeW5jL2Rpc3QvZXMvb24tbmV4dC1mcmFtZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lc3luYy9kaXN0L2VzL2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVzeW5jL2Rpc3QvZXMvY3JlYXRlLXJlbmRlci1zdGVwLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3V0aWxzL2lzLWJyb3dzZXIubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvdXRpbHMvdXNlLWlzb21vcnBoaWMtZWZmZWN0Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3V0aWxzL3VzZS1pcy1tb3VudGVkLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2NvbnRleHQvUHJlc2VuY2VDb250ZXh0Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3V0aWxzL3VzZS1jb25zdGFudC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy91c2UtaWQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvY29tcG9uZW50cy9BbmltYXRlUHJlc2VuY2UvUHJlc2VuY2VDaGlsZC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9jb250ZXh0L0xheW91dEdyb3VwQ29udGV4dC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy91c2UtdW5tb3VudC1lZmZlY3QubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvY29tcG9uZW50cy9BbmltYXRlUHJlc2VuY2UvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvdXRpbHMvdXNlLWZvcmNlLXVwZGF0ZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9tb3Rpb24vZmVhdHVyZXMvZGVmaW5pdGlvbnMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9oZXktbGlzdGVuL2Rpc3QvaGV5LWxpc3Rlbi5lcy5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2NvbnRleHQvTGF6eUNvbnRleHQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL2ZlYXR1cmVzL3VzZS1mZWF0dXJlcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9jb250ZXh0L01vdGlvbkNvbmZpZ0NvbnRleHQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvY29udGV4dC9Nb3Rpb25Db250ZXh0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3V0aWxzL3VzZS1yZWR1Y2VkLW1vdGlvbi5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9tb3Rpb24vdXRpbHMvdXNlLXZpc3VhbC1lbGVtZW50Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3V0aWxzL2lzLXJlZi1vYmplY3QubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL3V0aWxzL3ZhcmlhbnRzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2NvbnRleHQvTW90aW9uQ29udGV4dC9jcmVhdGUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcHJvamVjdGlvbi9ub2RlL3N0YXRlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vbm9kZS9pZC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9jb250ZXh0L1N3aXRjaExheW91dEdyb3VwQ29udGV4dC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9tb3Rpb24vdXRpbHMvVmlzdWFsRWxlbWVudEhhbmRsZXIubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2NvbnRleHQvTW90aW9uQ29udGV4dC91dGlscy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9tb3Rpb24vZmVhdHVyZXMvdXNlLXByb2plY3Rpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL3V0aWxzL3VzZS1tb3Rpb24tcmVmLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vbW90aW9uLXByb3h5Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9zdmcvbG93ZXJjYXNlLWVsZW1lbnRzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vdXRpbHMvaXMtc3ZnLWNvbXBvbmVudC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL3N0eWxlcy9zY2FsZS1jb3JyZWN0aW9uLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9odG1sL3V0aWxzL3RyYW5zZm9ybS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9tb3Rpb24vdXRpbHMvaXMtZm9yY2VkLW1vdGlvbi12YWx1ZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy92YWx1ZS91dGlscy9pcy1tb3Rpb24tdmFsdWUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2h0bWwvdXRpbHMvYnVpbGQtdHJhbnNmb3JtLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vdXRpbHMvaXMtY3NzLXZhcmlhYmxlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vdmFsdWUtdHlwZXMvZ2V0LWFzLXR5cGUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9zdHlsZS12YWx1ZS10eXBlcy9kaXN0L2VzL3V0aWxzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvc3R5bGUtdmFsdWUtdHlwZXMvZGlzdC9lcy9udW1iZXJzL3VuaXRzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvc3R5bGUtdmFsdWUtdHlwZXMvZGlzdC9lcy9udW1iZXJzL2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vdmFsdWUtdHlwZXMvdHlwZS1pbnQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS92YWx1ZS10eXBlcy9udW1iZXIubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2h0bWwvdXRpbHMvYnVpbGQtc3R5bGVzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9odG1sL3V0aWxzL2NyZWF0ZS1yZW5kZXItc3RhdGUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2h0bWwvdXNlLXByb3BzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL21vdGlvbi91dGlscy92YWxpZC1wcm9wLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vdXRpbHMvZmlsdGVyLXByb3BzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9zdmcvdXRpbHMvdHJhbnNmb3JtLW9yaWdpbi5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvc3ZnL3V0aWxzL3BhdGgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL3N2Zy91dGlscy9idWlsZC1hdHRycy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvc3ZnL3V0aWxzL2NyZWF0ZS1yZW5kZXItc3RhdGUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL3N2Zy91c2UtcHJvcHMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS91c2UtcmVuZGVyLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vdXRpbHMvY2FtZWwtdG8tZGFzaC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvaHRtbC91dGlscy9yZW5kZXIubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL3N2Zy91dGlscy9jYW1lbC1jYXNlLWF0dHJzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9zdmcvdXRpbHMvcmVuZGVyLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9odG1sL3V0aWxzL3NjcmFwZS1tb3Rpb24tdmFsdWVzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9zdmcvdXRpbHMvc2NyYXBlLW1vdGlvbi12YWx1ZXMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvYW5pbWF0aW9uL3V0aWxzL2lzLWFuaW1hdGlvbi1jb250cm9scy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9hbmltYXRpb24vdXRpbHMvaXMta2V5ZnJhbWVzLXRhcmdldC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy9yZXNvbHZlLXZhbHVlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3ZhbHVlL3V0aWxzL3Jlc29sdmUtbW90aW9uLXZhbHVlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL21vdGlvbi91dGlscy91c2UtdmlzdWFsLXN0YXRlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9zdmcvY29uZmlnLW1vdGlvbi5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvdXRpbHMvdHlwZXMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2h0bWwvY29uZmlnLW1vdGlvbi5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9ldmVudHMvdXNlLWRvbS1ldmVudC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9nZXN0dXJlcy91dGlscy9ldmVudC10eXBlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2V2ZW50cy9ldmVudC1pbmZvLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2V2ZW50cy91dGlscy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9ldmVudHMvdXNlLXBvaW50ZXItZXZlbnQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvZ2VzdHVyZXMvZHJhZy91dGlscy9sb2NrLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2dlc3R1cmVzL3VzZS1ob3Zlci1nZXN0dXJlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2dlc3R1cmVzL3V0aWxzL2lzLW5vZGUtb3ItY2hpbGQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy91dGlscy9waXBlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3V0aWxzL3dhcm4tb25jZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9tb3Rpb24vZmVhdHVyZXMvdmlld3BvcnQvb2JzZXJ2ZXJzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL21vdGlvbi9mZWF0dXJlcy92aWV3cG9ydC91c2Utdmlld3BvcnQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL3V0aWxzL21ha2UtcmVuZGVybGVzcy1jb21wb25lbnQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL2ZlYXR1cmVzL2dlc3R1cmVzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2dlc3R1cmVzL3VzZS10YXAtZ2VzdHVyZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9nZXN0dXJlcy91c2UtZm9jdXMtZ2VzdHVyZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9jb21wb25lbnRzL0FuaW1hdGVQcmVzZW5jZS91c2UtcHJlc2VuY2UubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvdXRpbHMvc2hhbGxvdy1jb21wYXJlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvdXRpbHMvY2xhbXAubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy9hbmltYXRpb25zL3V0aWxzL2ZpbmQtc3ByaW5nLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvYW5pbWF0aW9ucy9nZW5lcmF0b3JzL3NwcmluZy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL3V0aWxzL3Byb2dyZXNzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvdXRpbHMvbWl4Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvc3R5bGUtdmFsdWUtdHlwZXMvZGlzdC9lcy9jb2xvci91dGlscy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLXZhbHVlLXR5cGVzL2Rpc3QvZXMvY29sb3IvcmdiYS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLXZhbHVlLXR5cGVzL2Rpc3QvZXMvY29sb3IvaGV4Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvc3R5bGUtdmFsdWUtdHlwZXMvZGlzdC9lcy9jb2xvci9oc2xhLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvdXRpbHMvaHNsYS10by1yZ2JhLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvdXRpbHMvbWl4LWNvbG9yLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvc3R5bGUtdmFsdWUtdHlwZXMvZGlzdC9lcy9jb2xvci9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLXZhbHVlLXR5cGVzL2Rpc3QvZXMvY29tcGxleC9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL3V0aWxzL2luYy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL3V0aWxzL21peC1jb21wbGV4Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvdXRpbHMvaW50ZXJwb2xhdGUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy9lYXNpbmcvdXRpbHMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy9lYXNpbmcvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy9hbmltYXRpb25zL2dlbmVyYXRvcnMva2V5ZnJhbWVzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvYW5pbWF0aW9ucy91dGlscy9kZXRlY3QtYW5pbWF0aW9uLWZyb20tb3B0aW9ucy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL2FuaW1hdGlvbnMvZ2VuZXJhdG9ycy9kZWNheS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL2FuaW1hdGlvbnMvdXRpbHMvZWxhcHNlZC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL2FuaW1hdGlvbnMvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy91dGlscy92ZWxvY2l0eS1wZXItc2Vjb25kLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3V0aWxzL3RpbWUtY29udmVyc2lvbi5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL2Vhc2luZy9jdWJpYy1iZXppZXIubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvYW5pbWF0aW9uL3V0aWxzL2Vhc2luZy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9hbmltYXRpb24vdXRpbHMvaXMtYW5pbWF0YWJsZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9hbmltYXRpb24vdXRpbHMvZGVmYXVsdC10cmFuc2l0aW9ucy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLXZhbHVlLXR5cGVzL2Rpc3QvZXMvY29tcGxleC9maWx0ZXIubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS92YWx1ZS10eXBlcy9kZWZhdWx0cy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3ZhbHVlLXR5cGVzL2FuaW1hdGFibGUtbm9uZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy91c2UtaW5zdGFudC10cmFuc2l0aW9uLXN0YXRlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2FuaW1hdGlvbi91dGlscy90cmFuc2l0aW9ucy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL2FuaW1hdGlvbnMvaW5lcnRpYS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy9pcy1udW1lcmljYWwtc3RyaW5nLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3V0aWxzL2lzLXplcm8tdmFsdWUtc3RyaW5nLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3V0aWxzL2FycmF5Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3V0aWxzL3N1YnNjcmlwdGlvbi1tYW5hZ2VyLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3ZhbHVlL2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vdmFsdWUtdHlwZXMvdGVzdC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3ZhbHVlLXR5cGVzL2RpbWVuc2lvbnMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS92YWx1ZS10eXBlcy90eXBlLWF1dG8ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS92YWx1ZS10eXBlcy9maW5kLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci91dGlscy9zZXR0ZXJzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci91dGlscy9hbmltYXRpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL3V0aWxzL2FuaW1hdGlvbi1zdGF0ZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9tb3Rpb24vZmVhdHVyZXMvYW5pbWF0aW9ucy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL3V0aWxzL2lzLXBvaW50Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvdXRpbHMvaXMtcG9pbnQtM2QubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy91dGlscy9kaXN0YW5jZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9nZXN0dXJlcy9QYW5TZXNzaW9uLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vZ2VvbWV0cnkvZGVsdGEtY2FsYy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9nZXN0dXJlcy9kcmFnL3V0aWxzL2NvbnN0cmFpbnRzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vZ2VvbWV0cnkvbW9kZWxzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vdXRpbHMvZWFjaC1heGlzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vZ2VvbWV0cnkvY29udmVyc2lvbi5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL3V0aWxzL2hhcy10cmFuc2Zvcm0ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcHJvamVjdGlvbi9nZW9tZXRyeS9kZWx0YS1hcHBseS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL3V0aWxzL21lYXN1cmUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvZ2VzdHVyZXMvZHJhZy9WaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL21vdGlvbi9mZWF0dXJlcy9kcmFnLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2dlc3R1cmVzL3VzZS1wYW4tZ2VzdHVyZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9nZXN0dXJlcy9kcmFnL3VzZS1kcmFnLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci91dGlscy9saWZlY3ljbGVzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvdXRpbHMvbW90aW9uLXZhbHVlcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3V0aWxzL2Nzcy12YXJpYWJsZXMtY29udmVyc2lvbi5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3V0aWxzL3VuaXQtY29udmVyc2lvbi5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3V0aWxzL3BhcnNlLWRvbS12YXJpYW50Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9odG1sL3Zpc3VhbC1lbGVtZW50Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9zdmcvdmlzdWFsLWVsZW1lbnQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS9jcmVhdGUtdmlzdWFsLWVsZW1lbnQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcHJvamVjdGlvbi9zdHlsZXMvc2NhbGUtYm9yZGVyLXJhZGl1cy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL3N0eWxlcy9zY2FsZS1ib3gtc2hhZG93Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL21vdGlvbi9mZWF0dXJlcy9sYXlvdXQvTWVhc3VyZUxheW91dC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9tb3Rpb24vZmVhdHVyZXMvbGF5b3V0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vYW5pbWF0aW9uL21peC12YWx1ZXMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcHJvamVjdGlvbi9nZW9tZXRyeS9jb3B5Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vZ2VvbWV0cnkvZGVsdGEtcmVtb3ZlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vZ2VvbWV0cnkvdXRpbHMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcHJvamVjdGlvbi9zaGFyZWQvc3RhY2subWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcHJvamVjdGlvbi9zdHlsZXMvdHJhbnNmb3JtLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci91dGlscy9jb21wYXJlLWJ5LWRlcHRoLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci91dGlscy9mbGF0LXRyZWUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcHJvamVjdGlvbi9ub2RlL2NyZWF0ZS1wcm9qZWN0aW9uLW5vZGUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvYW5pbWF0aW9uL2FuaW1hdGUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcHJvamVjdGlvbi9ub2RlL0RvY3VtZW50UHJvamVjdGlvbk5vZGUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcHJvamVjdGlvbi9ub2RlL0hUTUxQcm9qZWN0aW9uTm9kZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL21vdGlvbi5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3V0aWxzL2NyZWF0ZS1jb25maWcubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS9leHRlcm5hbCBjb21tb25qcyB7XCJyb290XCI6XCJSZWFjdERvbVwiLFwiY29tbW9uanNcIjpcInJlYWN0LWRvbVwiLFwiY29tbW9uanMyXCI6XCJyZWFjdC1kb21cIixcImFtZFwiOlwicmVhY3QtZG9tXCJ9Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9jb25zdGFudHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51L2V4dGVybmFsIGNvbW1vbmpzIHtcInJvb3RcIjpcIlRvdWNodGVjaFdlYkF1dGhcIixcImNvbW1vbmpzMlwiOlwiQHRvdWNodGVjaC93ZWItYXV0aFwiLFwiY29tbW9uanNcIjpcIkB0b3VjaHRlY2gvd2ViLWF1dGhcIixcImFtZFwiOlwiQHRvdWNodGVjaC93ZWItYXV0aFwifSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvZXh0ZXJuYWwgY29tbW9uanMge1wicm9vdFwiOlwiVG91Y2h0ZWNoV2ViVGVuYW50SWRQcm92aWRlclwiLFwiY29tbW9uanMyXCI6XCJAdG91Y2h0ZWNoL3dlYi10ZW5hbnQtaWQtcHJvdmlkZXJcIixcImNvbW1vbmpzXCI6XCJAdG91Y2h0ZWNoL3dlYi10ZW5hbnQtaWQtcHJvdmlkZXJcIixcImFtZFwiOlwiQHRvdWNodGVjaC93ZWItdGVuYW50LWlkLXByb3ZpZGVyXCJ9Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9jb21wb25lbnRzL05hdmlnYXRpb24vQ29udGV4dC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vc3JjL2NvbXBvbmVudHMvTmF2aWdhdGlvbi9OYXZpZ2F0aW9uLm1vZHVsZS5jc3M/YTAyNCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvZXh0ZXJuYWwgY29tbW9uanMge1wicm9vdFwiOlwiVG91Y2h0ZWNoQmFzZWxheWVyVWlcIixcImNvbW1vbmpzMlwiOlwiQHRvdWNodGVjaC9iYXNlbGF5ZXItdWlcIixcImNvbW1vbmpzXCI6XCJAdG91Y2h0ZWNoL2Jhc2VsYXllci11aVwiLFwiYW1kXCI6XCJAdG91Y2h0ZWNoL2Jhc2VsYXllci11aVwifSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvZXh0ZXJuYWwgY29tbW9uanMge1wicm9vdFwiOlwiU3dyXCIsXCJjb21tb25qczJcIjpcInN3clwiLFwiY29tbW9uanNcIjpcInN3clwiLFwiYW1kXCI6XCJzd3JcIn0iLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51L2V4dGVybmFsIGNvbW1vbmpzIHtcInJvb3RcIjpcIlRvdWNodGVjaFdlYkFwaUNsaWVudFwiLFwiY29tbW9uanMyXCI6XCJAdG91Y2h0ZWNoL3dlYi1hcGktY2xpZW50XCIsXCJjb21tb25qc1wiOlwiQHRvdWNodGVjaC93ZWItYXBpLWNsaWVudFwiLFwiYW1kXCI6XCJAdG91Y2h0ZWNoL3dlYi1hcGktY2xpZW50XCJ9Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9ob29rcy91c2VUZW5hbnRzLnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9jb21wb25lbnRzL05hdmlnYXRpb24vTG9nby9Mb2dvLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvY2xhc3NjYXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vc3JjL2NvbXBvbmVudHMvTmF2aWdhdGlvbi9UaWVycy9UaWVyL1RpZXIubW9kdWxlLmNzcz9mODc5Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9jb21wb25lbnRzL05hdmlnYXRpb24vVGllcnMvVGllci9UaWVyLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvZXh0ZXJuYWwgY29tbW9uanMge1wicm9vdFwiOlwiUmVhY3RSb3V0ZXJEb21cIixcImNvbW1vbmpzMlwiOlwicmVhY3Qtcm91dGVyLWRvbVwiLFwiY29tbW9uanNcIjpcInJlYWN0LXJvdXRlci1kb21cIixcImFtZFwiOlwicmVhY3Qtcm91dGVyLWRvbVwifSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29tcG9uZW50cy9OYXZpZ2F0aW9uL1RpZXJzL0FwcGxpY2F0aW9ucy9BcHBsaWNhdGlvbkxpbmsvQXBwbGljYXRpb25MaW5rLm1vZHVsZS5jc3M/M2ZmNiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29tcG9uZW50cy9OYXZpZ2F0aW9uL1RpZXJzL0FwcGxpY2F0aW9ucy9BcHBsaWNhdGlvbkxpbmsvQXBwbGljYXRpb25MaW5rLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29tcG9uZW50cy9OYXZpZ2F0aW9uL1RpZXJzL0FwcGxpY2F0aW9ucy9BcHBsaWNhdGlvbnMubW9kdWxlLmNzcz9jZTc4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9jb21wb25lbnRzL05hdmlnYXRpb24vVGllcnMvQXBwbGljYXRpb25zL0FwcGxpY2F0aW9ucy50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vYXNzZXRzL2ljb25zL2Nsb3NlLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9hc3NldHMvaWNvbnMvbG9nb3V0LnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29tcG9uZW50cy9OYXZpZ2F0aW9uL1RpZXJzL1RlbmFudHMvTW9kYWxDcmVhdGVUZW5hbnQvTW9kYWxDcmVhdGVUZW5hbnQubW9kdWxlLmNzcz8xZGZmIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9jb21wb25lbnRzL05hdmlnYXRpb24vVGllcnMvVGVuYW50cy9Nb2RhbENyZWF0ZVRlbmFudC9Nb2RhbENyZWF0ZVRlbmFudC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vc3JjL2NvbXBvbmVudHMvTmF2aWdhdGlvbi9UaWVycy9UZW5hbnRzL1RlbmFudEJ1dHRvbi9UZW5hbnRCdXR0b24ubW9kdWxlLmNzcz82OTdkIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9jb21wb25lbnRzL05hdmlnYXRpb24vVGllcnMvVGVuYW50cy9UZW5hbnRCdXR0b24vVGVuYW50QnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29tcG9uZW50cy9OYXZpZ2F0aW9uL1RpZXJzL1RlbmFudHMvVGVuYW50cy5tb2R1bGUuY3NzPzY0MzAiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vc3JjL2NvbXBvbmVudHMvTmF2aWdhdGlvbi9UaWVycy9UZW5hbnRzL1RlbmFudHMudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL2Fzc2V0cy9pY29ucy9hcnJvdy1sZWZ0LnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9hc3NldHMvaWNvbnMvYWRkLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29tcG9uZW50cy9OYXZpZ2F0aW9uL1RpZXJzL1RpZXJzLm1vZHVsZS5jc3M/ZjVhMyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29tcG9uZW50cy9OYXZpZ2F0aW9uL1RpZXJzL1RpZXJzLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29tcG9uZW50cy9OYXZpZ2F0aW9uL05hdmlnYXRpb24udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL2Fzc2V0cy9pY29ucy9tZW51LnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29tcG9uZW50cy9OYXZpZ2F0aW9uL05hdmlnYXRpb25CdXR0b24udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVRvZ2dsZS91c2VUb2dnbGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIHJlcXVpcmUgc2NvcGVcbnZhciBfX3dlYnBhY2tfcmVxdWlyZV9fID0ge307XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19lc0RlY29yYXRlKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7XHJcbiAgICBmdW5jdGlvbiBhY2NlcHQoZikgeyBpZiAoZiAhPT0gdm9pZCAwICYmIHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGdW5jdGlvbiBleHBlY3RlZFwiKTsgcmV0dXJuIGY7IH1cclxuICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleSA9IGtpbmQgPT09IFwiZ2V0dGVyXCIgPyBcImdldFwiIDoga2luZCA9PT0gXCJzZXR0ZXJcIiA/IFwic2V0XCIgOiBcInZhbHVlXCI7XHJcbiAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluW1wic3RhdGljXCJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDtcclxuICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pO1xyXG4gICAgdmFyIF8sIGRvbmUgPSBmYWxzZTtcclxuICAgIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgdmFyIGNvbnRleHQgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbikgY29udGV4dFtwXSA9IHAgPT09IFwiYWNjZXNzXCIgPyB7fSA6IGNvbnRleHRJbltwXTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcclxuICAgICAgICBjb250ZXh0LmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24gKGYpIHsgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWRcIik7IGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGYgfHwgbnVsbCkpOyB9O1xyXG4gICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpXSkoa2luZCA9PT0gXCJhY2Nlc3NvclwiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleV0sIGNvbnRleHQpO1xyXG4gICAgICAgIGlmIChraW5kID09PSBcImFjY2Vzc29yXCIpIHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkXCIpO1xyXG4gICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfO1xyXG4gICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfO1xyXG4gICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy5wdXNoKF8pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChfID0gYWNjZXB0KHJlc3VsdCkpIHtcclxuICAgICAgICAgICAgaWYgKGtpbmQgPT09IFwiZmllbGRcIikgaW5pdGlhbGl6ZXJzLnB1c2goXyk7XHJcbiAgICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXldID0gXztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XHJcbiAgICBkb25lID0gdHJ1ZTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3J1bkluaXRpYWxpemVycyh0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlKSB7XHJcbiAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFsdWUgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcsIHZhbHVlKSA6IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wcm9wS2V5KHgpIHtcclxuICAgIHJldHVybiB0eXBlb2YgeCA9PT0gXCJzeW1ib2xcIiA/IHggOiBcIlwiLmNvbmNhdCh4KTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NldEZ1bmN0aW9uTmFtZShmLCBuYW1lLCBwcmVmaXgpIHtcclxuICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzeW1ib2xcIikgbmFtZSA9IG5hbWUuZGVzY3JpcHRpb24gPyBcIltcIi5jb25jYXQobmFtZS5kZXNjcmlwdGlvbiwgXCJdXCIpIDogXCJcIjtcclxuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgXCJuYW1lXCIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gXCJcIi5jb25jYXQocHJlZml4LCBcIiBcIiwgbmFtZSkgOiBuYW1lIH0pO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xyXG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcclxuICAgICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XHJcbiAgICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcclxuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcclxuICAgICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcclxuICAgICAgICAgICAgcltrXSA9IGFbal07XHJcbiAgICByZXR1cm4gcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcclxuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xyXG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xyXG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogZmFsc2UgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbn0pIDogZnVuY3Rpb24obywgdikge1xyXG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XHJcbiAgICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09IFwiZnVuY3Rpb25cIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtcclxuICAgIHJldHVybiB0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyID09PSBzdGF0ZSA6IHN0YXRlLmhhcyhyZWNlaXZlcik7XHJcbn1cclxuIiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJyZWFjdFwiKTsiLCIvKipcbiAqIEJyb3dzZXItc2FmZSB1c2FnZSBvZiBwcm9jZXNzXG4gKi9cbnZhciBkZWZhdWx0RW52aXJvbm1lbnQgPSBcInByb2R1Y3Rpb25cIjtcbnZhciBlbnYgPSB0eXBlb2YgcHJvY2VzcyA9PT0gXCJ1bmRlZmluZWRcIiB8fCBwcm9jZXNzLmVudiA9PT0gdW5kZWZpbmVkXG4gICAgPyBkZWZhdWx0RW52aXJvbm1lbnRcbiAgICA6IHByb2Nlc3MuZW52Lk5PREVfRU5WIHx8IGRlZmF1bHRFbnZpcm9ubWVudDtcblxuZXhwb3J0IHsgZW52IH07XG4iLCJjb25zdCBkZWZhdWx0VGltZXN0ZXAgPSAoMSAvIDYwKSAqIDEwMDA7XG5jb25zdCBnZXRDdXJyZW50VGltZSA9IHR5cGVvZiBwZXJmb3JtYW5jZSAhPT0gXCJ1bmRlZmluZWRcIlxuICAgID8gKCkgPT4gcGVyZm9ybWFuY2Uubm93KClcbiAgICA6ICgpID0+IERhdGUubm93KCk7XG5jb25zdCBvbk5leHRGcmFtZSA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCJcbiAgICA/IChjYWxsYmFjaykgPT4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjaylcbiAgICA6IChjYWxsYmFjaykgPT4gc2V0VGltZW91dCgoKSA9PiBjYWxsYmFjayhnZXRDdXJyZW50VGltZSgpKSwgZGVmYXVsdFRpbWVzdGVwKTtcblxuZXhwb3J0IHsgZGVmYXVsdFRpbWVzdGVwLCBvbk5leHRGcmFtZSB9O1xuIiwiaW1wb3J0IHsgb25OZXh0RnJhbWUsIGRlZmF1bHRUaW1lc3RlcCB9IGZyb20gJy4vb24tbmV4dC1mcmFtZS5tanMnO1xuaW1wb3J0IHsgY3JlYXRlUmVuZGVyU3RlcCB9IGZyb20gJy4vY3JlYXRlLXJlbmRlci1zdGVwLm1qcyc7XG5cbmNvbnN0IG1heEVsYXBzZWQgPSA0MDtcbmxldCB1c2VEZWZhdWx0RWxhcHNlZCA9IHRydWU7XG5sZXQgcnVuTmV4dEZyYW1lID0gZmFsc2U7XG5sZXQgaXNQcm9jZXNzaW5nID0gZmFsc2U7XG5jb25zdCBmcmFtZSA9IHtcbiAgICBkZWx0YTogMCxcbiAgICB0aW1lc3RhbXA6IDAsXG59O1xuY29uc3Qgc3RlcHNPcmRlciA9IFtcbiAgICBcInJlYWRcIixcbiAgICBcInVwZGF0ZVwiLFxuICAgIFwicHJlUmVuZGVyXCIsXG4gICAgXCJyZW5kZXJcIixcbiAgICBcInBvc3RSZW5kZXJcIixcbl07XG5jb25zdCBzdGVwcyA9IHN0ZXBzT3JkZXIucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgIGFjY1trZXldID0gY3JlYXRlUmVuZGVyU3RlcCgoKSA9PiAocnVuTmV4dEZyYW1lID0gdHJ1ZSkpO1xuICAgIHJldHVybiBhY2M7XG59LCB7fSk7XG5jb25zdCBzeW5jID0gc3RlcHNPcmRlci5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgY29uc3Qgc3RlcCA9IHN0ZXBzW2tleV07XG4gICAgYWNjW2tleV0gPSAocHJvY2Vzcywga2VlcEFsaXZlID0gZmFsc2UsIGltbWVkaWF0ZSA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGlmICghcnVuTmV4dEZyYW1lKVxuICAgICAgICAgICAgc3RhcnRMb29wKCk7XG4gICAgICAgIHJldHVybiBzdGVwLnNjaGVkdWxlKHByb2Nlc3MsIGtlZXBBbGl2ZSwgaW1tZWRpYXRlKTtcbiAgICB9O1xuICAgIHJldHVybiBhY2M7XG59LCB7fSk7XG5jb25zdCBjYW5jZWxTeW5jID0gc3RlcHNPcmRlci5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgYWNjW2tleV0gPSBzdGVwc1trZXldLmNhbmNlbDtcbiAgICByZXR1cm4gYWNjO1xufSwge30pO1xuY29uc3QgZmx1c2hTeW5jID0gc3RlcHNPcmRlci5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgYWNjW2tleV0gPSAoKSA9PiBzdGVwc1trZXldLnByb2Nlc3MoZnJhbWUpO1xuICAgIHJldHVybiBhY2M7XG59LCB7fSk7XG5jb25zdCBwcm9jZXNzU3RlcCA9IChzdGVwSWQpID0+IHN0ZXBzW3N0ZXBJZF0ucHJvY2VzcyhmcmFtZSk7XG5jb25zdCBwcm9jZXNzRnJhbWUgPSAodGltZXN0YW1wKSA9PiB7XG4gICAgcnVuTmV4dEZyYW1lID0gZmFsc2U7XG4gICAgZnJhbWUuZGVsdGEgPSB1c2VEZWZhdWx0RWxhcHNlZFxuICAgICAgICA/IGRlZmF1bHRUaW1lc3RlcFxuICAgICAgICA6IE1hdGgubWF4KE1hdGgubWluKHRpbWVzdGFtcCAtIGZyYW1lLnRpbWVzdGFtcCwgbWF4RWxhcHNlZCksIDEpO1xuICAgIGZyYW1lLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDtcbiAgICBpc1Byb2Nlc3NpbmcgPSB0cnVlO1xuICAgIHN0ZXBzT3JkZXIuZm9yRWFjaChwcm9jZXNzU3RlcCk7XG4gICAgaXNQcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgaWYgKHJ1bk5leHRGcmFtZSkge1xuICAgICAgICB1c2VEZWZhdWx0RWxhcHNlZCA9IGZhbHNlO1xuICAgICAgICBvbk5leHRGcmFtZShwcm9jZXNzRnJhbWUpO1xuICAgIH1cbn07XG5jb25zdCBzdGFydExvb3AgPSAoKSA9PiB7XG4gICAgcnVuTmV4dEZyYW1lID0gdHJ1ZTtcbiAgICB1c2VEZWZhdWx0RWxhcHNlZCA9IHRydWU7XG4gICAgaWYgKCFpc1Byb2Nlc3NpbmcpXG4gICAgICAgIG9uTmV4dEZyYW1lKHByb2Nlc3NGcmFtZSk7XG59O1xuY29uc3QgZ2V0RnJhbWVEYXRhID0gKCkgPT4gZnJhbWU7XG5cbmV4cG9ydCBkZWZhdWx0IHN5bmM7XG5leHBvcnQgeyBjYW5jZWxTeW5jLCBmbHVzaFN5bmMsIGdldEZyYW1lRGF0YSB9O1xuIiwiZnVuY3Rpb24gY3JlYXRlUmVuZGVyU3RlcChydW5OZXh0RnJhbWUpIHtcbiAgICBsZXQgdG9SdW4gPSBbXTtcbiAgICBsZXQgdG9SdW5OZXh0RnJhbWUgPSBbXTtcbiAgICBsZXQgbnVtVG9SdW4gPSAwO1xuICAgIGxldCBpc1Byb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICBsZXQgZmx1c2hOZXh0RnJhbWUgPSBmYWxzZTtcbiAgICBjb25zdCB0b0tlZXBBbGl2ZSA9IG5ldyBXZWFrU2V0KCk7XG4gICAgY29uc3Qgc3RlcCA9IHtcbiAgICAgICAgc2NoZWR1bGU6IChjYWxsYmFjaywga2VlcEFsaXZlID0gZmFsc2UsIGltbWVkaWF0ZSA9IGZhbHNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhZGRUb0N1cnJlbnRGcmFtZSA9IGltbWVkaWF0ZSAmJiBpc1Byb2Nlc3Npbmc7XG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSBhZGRUb0N1cnJlbnRGcmFtZSA/IHRvUnVuIDogdG9SdW5OZXh0RnJhbWU7XG4gICAgICAgICAgICBpZiAoa2VlcEFsaXZlKVxuICAgICAgICAgICAgICAgIHRvS2VlcEFsaXZlLmFkZChjYWxsYmFjayk7XG4gICAgICAgICAgICBpZiAoYnVmZmVyLmluZGV4T2YoY2FsbGJhY2spID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGJ1ZmZlci5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBpZiAoYWRkVG9DdXJyZW50RnJhbWUgJiYgaXNQcm9jZXNzaW5nKVxuICAgICAgICAgICAgICAgICAgICBudW1Ub1J1biA9IHRvUnVuLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaztcbiAgICAgICAgfSxcbiAgICAgICAgY2FuY2VsOiAoY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdG9SdW5OZXh0RnJhbWUuaW5kZXhPZihjYWxsYmFjayk7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKVxuICAgICAgICAgICAgICAgIHRvUnVuTmV4dEZyYW1lLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB0b0tlZXBBbGl2ZS5kZWxldGUoY2FsbGJhY2spO1xuICAgICAgICB9LFxuICAgICAgICBwcm9jZXNzOiAoZnJhbWVEYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNQcm9jZXNzaW5nKSB7XG4gICAgICAgICAgICAgICAgZmx1c2hOZXh0RnJhbWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlzUHJvY2Vzc2luZyA9IHRydWU7XG4gICAgICAgICAgICBbdG9SdW4sIHRvUnVuTmV4dEZyYW1lXSA9IFt0b1J1bk5leHRGcmFtZSwgdG9SdW5dO1xuICAgICAgICAgICAgdG9SdW5OZXh0RnJhbWUubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIG51bVRvUnVuID0gdG9SdW4ubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKG51bVRvUnVuKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Ub1J1bjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gdG9SdW5baV07XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGZyYW1lRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b0tlZXBBbGl2ZS5oYXMoY2FsbGJhY2spKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwLnNjaGVkdWxlKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bk5leHRGcmFtZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXNQcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoZmx1c2hOZXh0RnJhbWUpIHtcbiAgICAgICAgICAgICAgICBmbHVzaE5leHRGcmFtZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHN0ZXAucHJvY2VzcyhmcmFtZURhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH07XG4gICAgcmV0dXJuIHN0ZXA7XG59XG5cbmV4cG9ydCB7IGNyZWF0ZVJlbmRlclN0ZXAgfTtcbiIsInZhciBpc0Jyb3dzZXIgPSB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCI7XG5cbmV4cG9ydCB7IGlzQnJvd3NlciB9O1xuIiwiaW1wb3J0IHsgdXNlTGF5b3V0RWZmZWN0LCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0Jyb3dzZXIgfSBmcm9tICcuL2lzLWJyb3dzZXIubWpzJztcblxudmFyIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgPSBpc0Jyb3dzZXIgPyB1c2VMYXlvdXRFZmZlY3QgOiB1c2VFZmZlY3Q7XG5cbmV4cG9ydCB7IHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgfTtcbiIsImltcG9ydCB7IHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgfSBmcm9tICcuL3VzZS1pc29tb3JwaGljLWVmZmVjdC5tanMnO1xuXG5mdW5jdGlvbiB1c2VJc01vdW50ZWQoKSB7XG4gICAgdmFyIGlzTW91bnRlZCA9IHVzZVJlZihmYWxzZSk7XG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlzTW91bnRlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlzTW91bnRlZC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBpc01vdW50ZWQ7XG59XG5cbmV4cG9ydCB7IHVzZUlzTW91bnRlZCB9O1xuIiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbnZhciBQcmVzZW5jZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0KG51bGwpO1xuXG5leHBvcnQgeyBQcmVzZW5jZUNvbnRleHQgfTtcbiIsImltcG9ydCB7IHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29uc3RhbnQgdmFsdWUgb3ZlciB0aGUgbGlmZWN5Y2xlIG9mIGEgY29tcG9uZW50LlxuICpcbiAqIEV2ZW4gaWYgYHVzZU1lbW9gIGlzIHByb3ZpZGVkIGFuIGVtcHR5IGFycmF5IGFzIGl0cyBmaW5hbCBhcmd1bWVudCwgaXQgZG9lc24ndCBvZmZlclxuICogYSBndWFyYW50ZWUgdGhhdCBpdCB3b24ndCByZS1ydW4gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgbGF0ZXIgb24uIEJ5IHVzaW5nIGB1c2VDb25zdGFudGBcbiAqIHlvdSBjYW4gZW5zdXJlIHRoYXQgaW5pdGlhbGlzZXJzIGRvbid0IGV4ZWN1dGUgdHdpY2Ugb3IgbW9yZS5cbiAqL1xuZnVuY3Rpb24gdXNlQ29uc3RhbnQoaW5pdCkge1xuICAgIHZhciByZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgaWYgKHJlZi5jdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgIHJlZi5jdXJyZW50ID0gaW5pdCgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVmLmN1cnJlbnQ7XG59XG5cbmV4cG9ydCB7IHVzZUNvbnN0YW50IH07XG4iLCJpbXBvcnQgeyB1c2VDb25zdGFudCB9IGZyb20gJy4vdXNlLWNvbnN0YW50Lm1qcyc7XG5cbnZhciBjb3VudGVyID0gMDtcbnZhciBpbmNyZW1lbnRJZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvdW50ZXIrKzsgfTtcbnZhciB1c2VJZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVzZUNvbnN0YW50KGluY3JlbWVudElkKTsgfTtcbi8qKlxuICogSWRlYWxseSB3ZSdkIHVzZSB0aGUgZm9sbG93aW5nIGNvZGUgdG8gc3VwcG9ydCBSZWFjdCAxOCBvcHRpb25hbGx5LlxuICogQnV0IHRoaXMgZmFpcmx5IGZhaWxzIGluIFdlYnBhY2sgKG90aGVyd2lzZSB0cmVlc2hha2luZyB3b3VsZG4ndCB3b3JrIGF0IGFsbCkuXG4gKiBOZWVkIHRvIGNvbWUgdXAgd2l0aCBhIGRpZmZlcmVudCB3YXkgb2YgZmlndXJpbmcgdGhpcyBvdXQuXG4gKi9cbi8vIGV4cG9ydCBjb25zdCB1c2VJZCA9IChSZWFjdCBhcyBhbnkpLnVzZUlkXG4vLyAgICAgPyAoUmVhY3QgYXMgYW55KS51c2VJZFxuLy8gICAgIDogKCkgPT4gdXNlQ29uc3RhbnQoaW5jcmVtZW50SWQpXG5cbmV4cG9ydCB7IHVzZUlkIH07XG4iLCJpbXBvcnQgeyBfX3ZhbHVlcyB9IGZyb20gJ3RzbGliJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBQcmVzZW5jZUNvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L1ByZXNlbmNlQ29udGV4dC5tanMnO1xuaW1wb3J0IHsgdXNlQ29uc3RhbnQgfSBmcm9tICcuLi8uLi91dGlscy91c2UtY29uc3RhbnQubWpzJztcbmltcG9ydCB7IHVzZUlkIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXNlLWlkLm1qcyc7XG5cbnZhciBQcmVzZW5jZUNoaWxkID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gX2EuY2hpbGRyZW4sIGluaXRpYWwgPSBfYS5pbml0aWFsLCBpc1ByZXNlbnQgPSBfYS5pc1ByZXNlbnQsIG9uRXhpdENvbXBsZXRlID0gX2Eub25FeGl0Q29tcGxldGUsIGN1c3RvbSA9IF9hLmN1c3RvbSwgcHJlc2VuY2VBZmZlY3RzTGF5b3V0ID0gX2EucHJlc2VuY2VBZmZlY3RzTGF5b3V0O1xuICAgIHZhciBwcmVzZW5jZUNoaWxkcmVuID0gdXNlQ29uc3RhbnQobmV3Q2hpbGRyZW5NYXApO1xuICAgIHZhciBpZCA9IHVzZUlkKCk7XG4gICAgdmFyIGNvbnRleHQgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7XG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgaW5pdGlhbDogaW5pdGlhbCxcbiAgICAgICAgaXNQcmVzZW50OiBpc1ByZXNlbnQsXG4gICAgICAgIGN1c3RvbTogY3VzdG9tLFxuICAgICAgICBvbkV4aXRDb21wbGV0ZTogZnVuY3Rpb24gKGNoaWxkSWQpIHtcbiAgICAgICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICAgICAgcHJlc2VuY2VDaGlsZHJlbi5zZXQoY2hpbGRJZCwgdHJ1ZSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIF9iID0gX192YWx1ZXMocHJlc2VuY2VDaGlsZHJlbi52YWx1ZXMoKSksIF9jID0gX2IubmV4dCgpOyAhX2MuZG9uZTsgX2MgPSBfYi5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzQ29tcGxldGUgPSBfYy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NvbXBsZXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBjYW4gc3RvcCBzZWFyY2hpbmcgd2hlbiBhbnkgaXMgaW5jb21wbGV0ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2MgJiYgIV9jLmRvbmUgJiYgKF9hID0gX2IucmV0dXJuKSkgX2EuY2FsbChfYik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uRXhpdENvbXBsZXRlID09PSBudWxsIHx8IG9uRXhpdENvbXBsZXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkV4aXRDb21wbGV0ZSgpO1xuICAgICAgICB9LFxuICAgICAgICByZWdpc3RlcjogZnVuY3Rpb24gKGNoaWxkSWQpIHtcbiAgICAgICAgICAgIHByZXNlbmNlQ2hpbGRyZW4uc2V0KGNoaWxkSWQsIGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBwcmVzZW5jZUNoaWxkcmVuLmRlbGV0ZShjaGlsZElkKTsgfTtcbiAgICAgICAgfSxcbiAgICB9KTsgfSwgXG4gICAgLyoqXG4gICAgICogSWYgdGhlIHByZXNlbmNlIG9mIGEgY2hpbGQgYWZmZWN0cyB0aGUgbGF5b3V0IG9mIHRoZSBjb21wb25lbnRzIGFyb3VuZCBpdCxcbiAgICAgKiB3ZSB3YW50IHRvIG1ha2UgYSBuZXcgY29udGV4dCB2YWx1ZSB0byBlbnN1cmUgdGhleSBnZXQgcmUtcmVuZGVyZWRcbiAgICAgKiBzbyB0aGV5IGNhbiBkZXRlY3QgdGhhdCBsYXlvdXQgY2hhbmdlLlxuICAgICAqL1xuICAgIHByZXNlbmNlQWZmZWN0c0xheW91dCA/IHVuZGVmaW5lZCA6IFtpc1ByZXNlbnRdKTtcbiAgICB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcHJlc2VuY2VDaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChfLCBrZXkpIHsgcmV0dXJuIHByZXNlbmNlQ2hpbGRyZW4uc2V0KGtleSwgZmFsc2UpOyB9KTtcbiAgICB9LCBbaXNQcmVzZW50XSk7XG4gICAgLyoqXG4gICAgICogSWYgdGhlcmUncyBubyBgbW90aW9uYCBjb21wb25lbnRzIHRvIGZpcmUgZXhpdCBhbmltYXRpb25zLCB3ZSB3YW50IHRvIHJlbW92ZSB0aGlzXG4gICAgICogY29tcG9uZW50IGltbWVkaWF0ZWx5LlxuICAgICAqL1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgICFpc1ByZXNlbnQgJiYgIXByZXNlbmNlQ2hpbGRyZW4uc2l6ZSAmJiAob25FeGl0Q29tcGxldGUgPT09IG51bGwgfHwgb25FeGl0Q29tcGxldGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXhpdENvbXBsZXRlKCkpO1xuICAgIH0sIFtpc1ByZXNlbnRdKTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUHJlc2VuY2VDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0IH0sIGNoaWxkcmVuKSk7XG59O1xuZnVuY3Rpb24gbmV3Q2hpbGRyZW5NYXAoKSB7XG4gICAgcmV0dXJuIG5ldyBNYXAoKTtcbn1cblxuZXhwb3J0IHsgUHJlc2VuY2VDaGlsZCB9O1xuIiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcblxudmFyIExheW91dEdyb3VwQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe30pO1xuXG5leHBvcnQgeyBMYXlvdXRHcm91cENvbnRleHQgfTtcbiIsImltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuZnVuY3Rpb24gdXNlVW5tb3VudEVmZmVjdChjYWxsYmFjaykge1xuICAgIHJldHVybiB1c2VFZmZlY3QoZnVuY3Rpb24gKCkgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gY2FsbGJhY2soKTsgfTsgfSwgW10pO1xufVxuXG5leHBvcnQgeyB1c2VVbm1vdW50RWZmZWN0IH07XG4iLCJpbXBvcnQgeyBfX3JlYWQsIF9fc3ByZWFkQXJyYXkgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VSZWYsIGNsb25lRWxlbWVudCwgQ2hpbGRyZW4sIGlzVmFsaWRFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZW52IH0gZnJvbSAnLi4vLi4vdXRpbHMvcHJvY2Vzcy5tanMnO1xuaW1wb3J0IHsgdXNlRm9yY2VVcGRhdGUgfSBmcm9tICcuLi8uLi91dGlscy91c2UtZm9yY2UtdXBkYXRlLm1qcyc7XG5pbXBvcnQgeyB1c2VJc01vdW50ZWQgfSBmcm9tICcuLi8uLi91dGlscy91c2UtaXMtbW91bnRlZC5tanMnO1xuaW1wb3J0IHsgUHJlc2VuY2VDaGlsZCB9IGZyb20gJy4vUHJlc2VuY2VDaGlsZC5tanMnO1xuaW1wb3J0IHsgTGF5b3V0R3JvdXBDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9MYXlvdXRHcm91cENvbnRleHQubWpzJztcbmltcG9ydCB7IHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgfSBmcm9tICcuLi8uLi91dGlscy91c2UtaXNvbW9ycGhpYy1lZmZlY3QubWpzJztcbmltcG9ydCB7IHVzZVVubW91bnRFZmZlY3QgfSBmcm9tICcuLi8uLi91dGlscy91c2UtdW5tb3VudC1lZmZlY3QubWpzJztcblxudmFyIGdldENoaWxkS2V5ID0gZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiBjaGlsZC5rZXkgfHwgXCJcIjsgfTtcbmZ1bmN0aW9uIHVwZGF0ZUNoaWxkTG9va3VwKGNoaWxkcmVuLCBhbGxDaGlsZHJlbikge1xuICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHZhciBrZXkgPSBnZXRDaGlsZEtleShjaGlsZCk7XG4gICAgICAgIGFsbENoaWxkcmVuLnNldChrZXksIGNoaWxkKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIG9ubHlFbGVtZW50cyhjaGlsZHJlbikge1xuICAgIHZhciBmaWx0ZXJlZCA9IFtdO1xuICAgIC8vIFdlIHVzZSBmb3JFYWNoIGhlcmUgaW5zdGVhZCBvZiBtYXAgYXMgbWFwIG11dGF0ZXMgdGhlIGNvbXBvbmVudCBrZXkgYnkgcHJlcHJlbmRpbmcgYC4kYFxuICAgIENoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoY2hpbGQpKVxuICAgICAgICAgICAgZmlsdGVyZWQucHVzaChjaGlsZCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbHRlcmVkO1xufVxuLyoqXG4gKiBgQW5pbWF0ZVByZXNlbmNlYCBlbmFibGVzIHRoZSBhbmltYXRpb24gb2YgY29tcG9uZW50cyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIHRyZWUuXG4gKlxuICogV2hlbiBhZGRpbmcvcmVtb3ZpbmcgbW9yZSB0aGFuIGEgc2luZ2xlIGNoaWxkLCBldmVyeSBjaGlsZCAqKm11c3QqKiBiZSBnaXZlbiBhIHVuaXF1ZSBga2V5YCBwcm9wLlxuICpcbiAqIEFueSBgbW90aW9uYCBjb21wb25lbnRzIHRoYXQgaGF2ZSBhbiBgZXhpdGAgcHJvcGVydHkgZGVmaW5lZCB3aWxsIGFuaW1hdGUgb3V0IHdoZW4gcmVtb3ZlZCBmcm9tXG4gKiB0aGUgdHJlZS5cbiAqXG4gKiBgYGBqc3hcbiAqIGltcG9ydCB7IG1vdGlvbiwgQW5pbWF0ZVByZXNlbmNlIH0gZnJvbSAnZnJhbWVyLW1vdGlvbidcbiAqXG4gKiBleHBvcnQgY29uc3QgSXRlbXMgPSAoeyBpdGVtcyB9KSA9PiAoXG4gKiAgIDxBbmltYXRlUHJlc2VuY2U+XG4gKiAgICAge2l0ZW1zLm1hcChpdGVtID0+IChcbiAqICAgICAgIDxtb3Rpb24uZGl2XG4gKiAgICAgICAgIGtleT17aXRlbS5pZH1cbiAqICAgICAgICAgaW5pdGlhbD17eyBvcGFjaXR5OiAwIH19XG4gKiAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSB9fVxuICogICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAgfX1cbiAqICAgICAgIC8+XG4gKiAgICAgKSl9XG4gKiAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICogKVxuICogYGBgXG4gKlxuICogWW91IGNhbiBzZXF1ZW5jZSBleGl0IGFuaW1hdGlvbnMgdGhyb3VnaG91dCBhIHRyZWUgdXNpbmcgdmFyaWFudHMuXG4gKlxuICogSWYgYSBjaGlsZCBjb250YWlucyBtdWx0aXBsZSBgbW90aW9uYCBjb21wb25lbnRzIHdpdGggYGV4aXRgIHByb3BzLCBpdCB3aWxsIG9ubHkgdW5tb3VudCB0aGUgY2hpbGRcbiAqIG9uY2UgYWxsIGBtb3Rpb25gIGNvbXBvbmVudHMgaGF2ZSBmaW5pc2hlZCBhbmltYXRpbmcgb3V0LiBMaWtld2lzZSwgYW55IGNvbXBvbmVudHMgdXNpbmdcbiAqIGB1c2VQcmVzZW5jZWAgYWxsIG5lZWQgdG8gY2FsbCBgc2FmZVRvUmVtb3ZlYC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbnZhciBBbmltYXRlUHJlc2VuY2UgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBfYS5jaGlsZHJlbiwgY3VzdG9tID0gX2EuY3VzdG9tLCBfYiA9IF9hLmluaXRpYWwsIGluaXRpYWwgPSBfYiA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9iLCBvbkV4aXRDb21wbGV0ZSA9IF9hLm9uRXhpdENvbXBsZXRlLCBleGl0QmVmb3JlRW50ZXIgPSBfYS5leGl0QmVmb3JlRW50ZXIsIF9jID0gX2EucHJlc2VuY2VBZmZlY3RzTGF5b3V0LCBwcmVzZW5jZUFmZmVjdHNMYXlvdXQgPSBfYyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9jO1xuICAgIC8vIFdlIHdhbnQgdG8gZm9yY2UgYSByZS1yZW5kZXIgb25jZSBhbGwgZXhpdGluZyBhbmltYXRpb25zIGhhdmUgZmluaXNoZWQuIFdlXG4gICAgLy8gZWl0aGVyIHVzZSBhIGxvY2FsIGZvcmNlUmVuZGVyIGZ1bmN0aW9uLCBvciBvbmUgZnJvbSBhIHBhcmVudCBjb250ZXh0IGlmIGl0IGV4aXN0cy5cbiAgICB2YXIgX2QgPSBfX3JlYWQodXNlRm9yY2VVcGRhdGUoKSwgMSksIGZvcmNlUmVuZGVyID0gX2RbMF07XG4gICAgdmFyIGZvcmNlUmVuZGVyTGF5b3V0R3JvdXAgPSB1c2VDb250ZXh0KExheW91dEdyb3VwQ29udGV4dCkuZm9yY2VSZW5kZXI7XG4gICAgaWYgKGZvcmNlUmVuZGVyTGF5b3V0R3JvdXApXG4gICAgICAgIGZvcmNlUmVuZGVyID0gZm9yY2VSZW5kZXJMYXlvdXRHcm91cDtcbiAgICB2YXIgaXNNb3VudGVkID0gdXNlSXNNb3VudGVkKCk7XG4gICAgLy8gRmlsdGVyIG91dCBhbnkgY2hpbGRyZW4gdGhhdCBhcmVuJ3QgUmVhY3RFbGVtZW50cy4gV2UgY2FuIG9ubHkgdHJhY2sgUmVhY3RFbGVtZW50cyB3aXRoIGEgcHJvcHMua2V5XG4gICAgdmFyIGZpbHRlcmVkQ2hpbGRyZW4gPSBvbmx5RWxlbWVudHMoY2hpbGRyZW4pO1xuICAgIHZhciBjaGlsZHJlblRvUmVuZGVyID0gZmlsdGVyZWRDaGlsZHJlbjtcbiAgICB2YXIgZXhpdGluZyA9IG5ldyBTZXQoKTtcbiAgICAvLyBLZWVwIGEgbGl2aW5nIHJlY29yZCBvZiB0aGUgY2hpbGRyZW4gd2UncmUgYWN0dWFsbHkgcmVuZGVyaW5nIHNvIHdlXG4gICAgLy8gY2FuIGRpZmYgdG8gZmlndXJlIG91dCB3aGljaCBhcmUgZW50ZXJpbmcgYW5kIGV4aXRpbmdcbiAgICB2YXIgcHJlc2VudENoaWxkcmVuID0gdXNlUmVmKGNoaWxkcmVuVG9SZW5kZXIpO1xuICAgIC8vIEEgbG9va3VwIHRhYmxlIHRvIHF1aWNrbHkgcmVmZXJlbmNlIGNvbXBvbmVudHMgYnkga2V5XG4gICAgdmFyIGFsbENoaWxkcmVuID0gdXNlUmVmKG5ldyBNYXAoKSkuY3VycmVudDtcbiAgICAvLyBJZiB0aGlzIGlzIHRoZSBpbml0aWFsIGNvbXBvbmVudCByZW5kZXIsIGp1c3QgZGVhbCB3aXRoIGxvZ2ljIHN1cnJvdW5kaW5nIHdoZXRoZXJcbiAgICAvLyB3ZSBwbGF5IG9uTW91bnQgYW5pbWF0aW9ucyBvciBub3QuXG4gICAgdmFyIGlzSW5pdGlhbFJlbmRlciA9IHVzZVJlZih0cnVlKTtcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXNJbml0aWFsUmVuZGVyLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgdXBkYXRlQ2hpbGRMb29rdXAoZmlsdGVyZWRDaGlsZHJlbiwgYWxsQ2hpbGRyZW4pO1xuICAgICAgICBwcmVzZW50Q2hpbGRyZW4uY3VycmVudCA9IGNoaWxkcmVuVG9SZW5kZXI7XG4gICAgfSk7XG4gICAgdXNlVW5tb3VudEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlzSW5pdGlhbFJlbmRlci5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgYWxsQ2hpbGRyZW4uY2xlYXIoKTtcbiAgICAgICAgZXhpdGluZy5jbGVhcigpO1xuICAgIH0pO1xuICAgIGlmIChpc0luaXRpYWxSZW5kZXIuY3VycmVudCkge1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIGNoaWxkcmVuVG9SZW5kZXIubWFwKGZ1bmN0aW9uIChjaGlsZCkgeyByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUHJlc2VuY2VDaGlsZCwgeyBrZXk6IGdldENoaWxkS2V5KGNoaWxkKSwgaXNQcmVzZW50OiB0cnVlLCBpbml0aWFsOiBpbml0aWFsID8gdW5kZWZpbmVkIDogZmFsc2UsIHByZXNlbmNlQWZmZWN0c0xheW91dDogcHJlc2VuY2VBZmZlY3RzTGF5b3V0IH0sIGNoaWxkKSk7IH0pKSk7XG4gICAgfVxuICAgIC8vIElmIHRoaXMgaXMgYSBzdWJzZXF1ZW50IHJlbmRlciwgZGVhbCB3aXRoIGVudGVyaW5nIGFuZCBleGl0aW5nIGNoaWxkcmVuXG4gICAgY2hpbGRyZW5Ub1JlbmRlciA9IF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChjaGlsZHJlblRvUmVuZGVyKSwgZmFsc2UpO1xuICAgIC8vIERpZmYgdGhlIGtleXMgb2YgdGhlIGN1cnJlbnRseS1wcmVzZW50IGFuZCB0YXJnZXQgY2hpbGRyZW4gdG8gdXBkYXRlIG91clxuICAgIC8vIGV4aXRpbmcgbGlzdC5cbiAgICB2YXIgcHJlc2VudEtleXMgPSBwcmVzZW50Q2hpbGRyZW4uY3VycmVudC5tYXAoZ2V0Q2hpbGRLZXkpO1xuICAgIHZhciB0YXJnZXRLZXlzID0gZmlsdGVyZWRDaGlsZHJlbi5tYXAoZ2V0Q2hpbGRLZXkpO1xuICAgIC8vIERpZmYgdGhlIHByZXNlbnQgY2hpbGRyZW4gd2l0aCBvdXIgdGFyZ2V0IGNoaWxkcmVuIGFuZCBtYXJrIHRob3NlIHRoYXQgYXJlIGV4aXRpbmdcbiAgICB2YXIgbnVtUHJlc2VudCA9IHByZXNlbnRLZXlzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bVByZXNlbnQ7IGkrKykge1xuICAgICAgICB2YXIga2V5ID0gcHJlc2VudEtleXNbaV07XG4gICAgICAgIGlmICh0YXJnZXRLZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEpIHtcbiAgICAgICAgICAgIGV4aXRpbmcuYWRkKGtleSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSWYgd2UgY3VycmVudGx5IGhhdmUgZXhpdGluZyBjaGlsZHJlbiwgYW5kIHdlJ3JlIGRlZmVycmluZyByZW5kZXJpbmcgaW5jb21pbmcgY2hpbGRyZW5cbiAgICAvLyB1bnRpbCBhZnRlciBhbGwgY3VycmVudCBjaGlsZHJlbiBoYXZlIGV4aXRpbmcsIGVtcHR5IHRoZSBjaGlsZHJlblRvUmVuZGVyIGFycmF5XG4gICAgaWYgKGV4aXRCZWZvcmVFbnRlciAmJiBleGl0aW5nLnNpemUpIHtcbiAgICAgICAgY2hpbGRyZW5Ub1JlbmRlciA9IFtdO1xuICAgIH1cbiAgICAvLyBMb29wIHRocm91Z2ggYWxsIGN1cnJlbnRseSBleGl0aW5nIGNvbXBvbmVudHMgYW5kIGNsb25lIHRoZW0gdG8gb3ZlcndyaXRlIGBhbmltYXRlYFxuICAgIC8vIHdpdGggYW55IGBleGl0YCBwcm9wIHRoZXkgbWlnaHQgaGF2ZSBkZWZpbmVkLlxuICAgIGV4aXRpbmcuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIC8vIElmIHRoaXMgY29tcG9uZW50IGlzIGFjdHVhbGx5IGVudGVyaW5nIGFnYWluLCBlYXJseSByZXR1cm5cbiAgICAgICAgaWYgKHRhcmdldEtleXMuaW5kZXhPZihrZXkpICE9PSAtMSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGNoaWxkID0gYWxsQ2hpbGRyZW4uZ2V0KGtleSk7XG4gICAgICAgIGlmICghY2hpbGQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBpbnNlcnRpb25JbmRleCA9IHByZXNlbnRLZXlzLmluZGV4T2Yoa2V5KTtcbiAgICAgICAgdmFyIG9uRXhpdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGFsbENoaWxkcmVuLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgZXhpdGluZy5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGlzIGNoaWxkIGZyb20gdGhlIHByZXNlbnQgY2hpbGRyZW5cbiAgICAgICAgICAgIHZhciByZW1vdmVJbmRleCA9IHByZXNlbnRDaGlsZHJlbi5jdXJyZW50LmZpbmRJbmRleChmdW5jdGlvbiAocHJlc2VudENoaWxkKSB7IHJldHVybiBwcmVzZW50Q2hpbGQua2V5ID09PSBrZXk7IH0pO1xuICAgICAgICAgICAgcHJlc2VudENoaWxkcmVuLmN1cnJlbnQuc3BsaWNlKHJlbW92ZUluZGV4LCAxKTtcbiAgICAgICAgICAgIC8vIERlZmVyIHJlLXJlbmRlcmluZyB1bnRpbCBhbGwgZXhpdGluZyBjaGlsZHJlbiBoYXZlIGluZGVlZCBsZWZ0XG4gICAgICAgICAgICBpZiAoIWV4aXRpbmcuc2l6ZSkge1xuICAgICAgICAgICAgICAgIHByZXNlbnRDaGlsZHJlbi5jdXJyZW50ID0gZmlsdGVyZWRDaGlsZHJlbjtcbiAgICAgICAgICAgICAgICBpZiAoaXNNb3VudGVkLmN1cnJlbnQgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgZm9yY2VSZW5kZXIoKTtcbiAgICAgICAgICAgICAgICBvbkV4aXRDb21wbGV0ZSAmJiBvbkV4aXRDb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjaGlsZHJlblRvUmVuZGVyLnNwbGljZShpbnNlcnRpb25JbmRleCwgMCwgUmVhY3QuY3JlYXRlRWxlbWVudChQcmVzZW5jZUNoaWxkLCB7IGtleTogZ2V0Q2hpbGRLZXkoY2hpbGQpLCBpc1ByZXNlbnQ6IGZhbHNlLCBvbkV4aXRDb21wbGV0ZTogb25FeGl0LCBjdXN0b206IGN1c3RvbSwgcHJlc2VuY2VBZmZlY3RzTGF5b3V0OiBwcmVzZW5jZUFmZmVjdHNMYXlvdXQgfSwgY2hpbGQpKTtcbiAgICB9KTtcbiAgICAvLyBBZGQgYE1vdGlvbkNvbnRleHRgIGV2ZW4gdG8gY2hpbGRyZW4gdGhhdCBkb24ndCBuZWVkIGl0IHRvIGVuc3VyZSB3ZSdyZSByZW5kZXJpbmdcbiAgICAvLyB0aGUgc2FtZSB0cmVlIGJldHdlZW4gcmVuZGVyc1xuICAgIGNoaWxkcmVuVG9SZW5kZXIgPSBjaGlsZHJlblRvUmVuZGVyLm1hcChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgdmFyIGtleSA9IGNoaWxkLmtleTtcbiAgICAgICAgcmV0dXJuIGV4aXRpbmcuaGFzKGtleSkgPyAoY2hpbGQpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUHJlc2VuY2VDaGlsZCwgeyBrZXk6IGdldENoaWxkS2V5KGNoaWxkKSwgaXNQcmVzZW50OiB0cnVlLCBwcmVzZW5jZUFmZmVjdHNMYXlvdXQ6IHByZXNlbmNlQWZmZWN0c0xheW91dCB9LCBjaGlsZCkpO1xuICAgIH0pO1xuICAgIGlmIChlbnYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgICAgIGV4aXRCZWZvcmVFbnRlciAmJlxuICAgICAgICBjaGlsZHJlblRvUmVuZGVyLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiWW91J3JlIGF0dGVtcHRpbmcgdG8gYW5pbWF0ZSBtdWx0aXBsZSBjaGlsZHJlbiB3aXRoaW4gQW5pbWF0ZVByZXNlbmNlLCBidXQgaXRzIGV4aXRCZWZvcmVFbnRlciBwcm9wIGlzIHNldCB0byB0cnVlLiBUaGlzIHdpbGwgbGVhZCB0byBvZGQgdmlzdWFsIGJlaGF2aW91ci5cIik7XG4gICAgfVxuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgZXhpdGluZy5zaXplXG4gICAgICAgID8gY2hpbGRyZW5Ub1JlbmRlclxuICAgICAgICA6IGNoaWxkcmVuVG9SZW5kZXIubWFwKGZ1bmN0aW9uIChjaGlsZCkgeyByZXR1cm4gY2xvbmVFbGVtZW50KGNoaWxkKTsgfSkpKTtcbn07XG5cbmV4cG9ydCB7IEFuaW1hdGVQcmVzZW5jZSB9O1xuIiwiaW1wb3J0IHsgX19yZWFkIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHN5bmMgZnJvbSAnZnJhbWVzeW5jJztcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUlzTW91bnRlZCB9IGZyb20gJy4vdXNlLWlzLW1vdW50ZWQubWpzJztcblxuZnVuY3Rpb24gdXNlRm9yY2VVcGRhdGUoKSB7XG4gICAgdmFyIGlzTW91bnRlZCA9IHVzZUlzTW91bnRlZCgpO1xuICAgIHZhciBfYSA9IF9fcmVhZCh1c2VTdGF0ZSgwKSwgMiksIGZvcmNlZFJlbmRlckNvdW50ID0gX2FbMF0sIHNldEZvcmNlZFJlbmRlckNvdW50ID0gX2FbMV07XG4gICAgdmFyIGZvcmNlUmVuZGVyID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpc01vdW50ZWQuY3VycmVudCAmJiBzZXRGb3JjZWRSZW5kZXJDb3VudChmb3JjZWRSZW5kZXJDb3VudCArIDEpO1xuICAgIH0sIFtmb3JjZWRSZW5kZXJDb3VudF0pO1xuICAgIC8qKlxuICAgICAqIERlZmVyIHRoaXMgdG8gdGhlIGVuZCBvZiB0aGUgbmV4dCBhbmltYXRpb24gZnJhbWUgaW4gY2FzZSB0aGVyZSBhcmUgbXVsdGlwbGVcbiAgICAgKiBzeW5jaHJvbm91cyBjYWxscy5cbiAgICAgKi9cbiAgICB2YXIgZGVmZXJyZWRGb3JjZVJlbmRlciA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN5bmMucG9zdFJlbmRlcihmb3JjZVJlbmRlcik7IH0sIFtmb3JjZVJlbmRlcl0pO1xuICAgIHJldHVybiBbZGVmZXJyZWRGb3JjZVJlbmRlciwgZm9yY2VkUmVuZGVyQ291bnRdO1xufVxuXG5leHBvcnQgeyB1c2VGb3JjZVVwZGF0ZSB9O1xuIiwidmFyIGNyZWF0ZURlZmluaXRpb24gPSBmdW5jdGlvbiAocHJvcE5hbWVzKSB7IHJldHVybiAoe1xuICAgIGlzRW5hYmxlZDogZnVuY3Rpb24gKHByb3BzKSB7IHJldHVybiBwcm9wTmFtZXMuc29tZShmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gISFwcm9wc1tuYW1lXTsgfSk7IH0sXG59KTsgfTtcbnZhciBmZWF0dXJlRGVmaW5pdGlvbnMgPSB7XG4gICAgbWVhc3VyZUxheW91dDogY3JlYXRlRGVmaW5pdGlvbihbXCJsYXlvdXRcIiwgXCJsYXlvdXRJZFwiLCBcImRyYWdcIl0pLFxuICAgIGFuaW1hdGlvbjogY3JlYXRlRGVmaW5pdGlvbihbXG4gICAgICAgIFwiYW5pbWF0ZVwiLFxuICAgICAgICBcImV4aXRcIixcbiAgICAgICAgXCJ2YXJpYW50c1wiLFxuICAgICAgICBcIndoaWxlSG92ZXJcIixcbiAgICAgICAgXCJ3aGlsZVRhcFwiLFxuICAgICAgICBcIndoaWxlRm9jdXNcIixcbiAgICAgICAgXCJ3aGlsZURyYWdcIixcbiAgICAgICAgXCJ3aGlsZUluVmlld1wiLFxuICAgIF0pLFxuICAgIGV4aXQ6IGNyZWF0ZURlZmluaXRpb24oW1wiZXhpdFwiXSksXG4gICAgZHJhZzogY3JlYXRlRGVmaW5pdGlvbihbXCJkcmFnXCIsIFwiZHJhZ0NvbnRyb2xzXCJdKSxcbiAgICBmb2N1czogY3JlYXRlRGVmaW5pdGlvbihbXCJ3aGlsZUZvY3VzXCJdKSxcbiAgICBob3ZlcjogY3JlYXRlRGVmaW5pdGlvbihbXCJ3aGlsZUhvdmVyXCIsIFwib25Ib3ZlclN0YXJ0XCIsIFwib25Ib3ZlckVuZFwiXSksXG4gICAgdGFwOiBjcmVhdGVEZWZpbml0aW9uKFtcIndoaWxlVGFwXCIsIFwib25UYXBcIiwgXCJvblRhcFN0YXJ0XCIsIFwib25UYXBDYW5jZWxcIl0pLFxuICAgIHBhbjogY3JlYXRlRGVmaW5pdGlvbihbXG4gICAgICAgIFwib25QYW5cIixcbiAgICAgICAgXCJvblBhblN0YXJ0XCIsXG4gICAgICAgIFwib25QYW5TZXNzaW9uU3RhcnRcIixcbiAgICAgICAgXCJvblBhbkVuZFwiLFxuICAgIF0pLFxuICAgIGluVmlldzogY3JlYXRlRGVmaW5pdGlvbihbXG4gICAgICAgIFwid2hpbGVJblZpZXdcIixcbiAgICAgICAgXCJvblZpZXdwb3J0RW50ZXJcIixcbiAgICAgICAgXCJvblZpZXdwb3J0TGVhdmVcIixcbiAgICBdKSxcbn07XG5mdW5jdGlvbiBsb2FkRmVhdHVyZXMoZmVhdHVyZXMpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gZmVhdHVyZXMpIHtcbiAgICAgICAgaWYgKGZlYXR1cmVzW2tleV0gPT09IG51bGwpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJwcm9qZWN0aW9uTm9kZUNvbnN0cnVjdG9yXCIpIHtcbiAgICAgICAgICAgIGZlYXR1cmVEZWZpbml0aW9ucy5wcm9qZWN0aW9uTm9kZUNvbnN0cnVjdG9yID0gZmVhdHVyZXNba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZlYXR1cmVEZWZpbml0aW9uc1trZXldLkNvbXBvbmVudCA9IGZlYXR1cmVzW2tleV07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCB7IGZlYXR1cmVEZWZpbml0aW9ucywgbG9hZEZlYXR1cmVzIH07XG4iLCJ2YXIgd2FybmluZyA9IGZ1bmN0aW9uICgpIHsgfTtcclxudmFyIGludmFyaWFudCA9IGZ1bmN0aW9uICgpIHsgfTtcclxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgIHdhcm5pbmcgPSBmdW5jdGlvbiAoY2hlY2ssIG1lc3NhZ2UpIHtcclxuICAgICAgICBpZiAoIWNoZWNrICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGludmFyaWFudCA9IGZ1bmN0aW9uIChjaGVjaywgbWVzc2FnZSkge1xyXG4gICAgICAgIGlmICghY2hlY2spIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cblxuZXhwb3J0IHsgaW52YXJpYW50LCB3YXJuaW5nIH07XG4iLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuXG52YXIgTGF6eUNvbnRleHQgPSBjcmVhdGVDb250ZXh0KHsgc3RyaWN0OiBmYWxzZSB9KTtcblxuZXhwb3J0IHsgTGF6eUNvbnRleHQgfTtcbiIsImltcG9ydCB7IF9fYXNzaWduIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGVudiB9IGZyb20gJy4uLy4uL3V0aWxzL3Byb2Nlc3MubWpzJztcbmltcG9ydCB7IGZlYXR1cmVEZWZpbml0aW9ucyB9IGZyb20gJy4vZGVmaW5pdGlvbnMubWpzJztcbmltcG9ydCB7IGludmFyaWFudCB9IGZyb20gJ2hleS1saXN0ZW4nO1xuaW1wb3J0IHsgTGF6eUNvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L0xhenlDb250ZXh0Lm1qcyc7XG5cbnZhciBmZWF0dXJlTmFtZXMgPSBPYmplY3Qua2V5cyhmZWF0dXJlRGVmaW5pdGlvbnMpO1xudmFyIG51bUZlYXR1cmVzID0gZmVhdHVyZU5hbWVzLmxlbmd0aDtcbi8qKlxuICogTG9hZCBmZWF0dXJlcyB2aWEgcmVuZGVybGVzcyBjb21wb25lbnRzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBNb3Rpb25Qcm9wcy5cbiAqL1xuZnVuY3Rpb24gdXNlRmVhdHVyZXMocHJvcHMsIHZpc3VhbEVsZW1lbnQsIHByZWxvYWRlZEZlYXR1cmVzKSB7XG4gICAgdmFyIGZlYXR1cmVzID0gW107XG4gICAgdmFyIGxhenlDb250ZXh0ID0gdXNlQ29udGV4dChMYXp5Q29udGV4dCk7XG4gICAgaWYgKCF2aXN1YWxFbGVtZW50KVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAvKipcbiAgICAgKiBJZiB3ZSdyZSBpbiBkZXZlbG9wbWVudCBtb2RlLCBjaGVjayB0byBtYWtlIHN1cmUgd2UncmUgbm90IHJlbmRlcmluZyBhIG1vdGlvbiBjb21wb25lbnRcbiAgICAgKiBhcyBhIGNoaWxkIG9mIExhenlNb3Rpb24sIGFzIHRoaXMgd2lsbCBicmVhayB0aGUgZmlsZS1zaXplIGJlbmVmaXRzIG9mIHVzaW5nIGl0LlxuICAgICAqL1xuICAgIGlmIChlbnYgIT09IFwicHJvZHVjdGlvblwiICYmIHByZWxvYWRlZEZlYXR1cmVzICYmIGxhenlDb250ZXh0LnN0cmljdCkge1xuICAgICAgICBpbnZhcmlhbnQoZmFsc2UsIFwiWW91IGhhdmUgcmVuZGVyZWQgYSBgbW90aW9uYCBjb21wb25lbnQgd2l0aGluIGEgYExhenlNb3Rpb25gIGNvbXBvbmVudC4gVGhpcyB3aWxsIGJyZWFrIHRyZWUgc2hha2luZy4gSW1wb3J0IGFuZCByZW5kZXIgYSBgbWAgY29tcG9uZW50IGluc3RlYWQuXCIpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUZlYXR1cmVzOyBpKyspIHtcbiAgICAgICAgdmFyIG5hbWVfMSA9IGZlYXR1cmVOYW1lc1tpXTtcbiAgICAgICAgdmFyIF9hID0gZmVhdHVyZURlZmluaXRpb25zW25hbWVfMV0sIGlzRW5hYmxlZCA9IF9hLmlzRW5hYmxlZCwgQ29tcG9uZW50ID0gX2EuQ29tcG9uZW50O1xuICAgICAgICAvKipcbiAgICAgICAgICogSXQgbWlnaHQgYmUgcG9zc2libGUgaW4gdGhlIGZ1dHVyZSB0byB1c2UgdGhpcyBtb21lbnQgdG9cbiAgICAgICAgICogZHluYW1pY2FsbHkgcmVxdWVzdCBmdW5jdGlvbmFsaXR5LiBJbiBpbml0aWFsIHRlc3RzIHRoaXNcbiAgICAgICAgICogd2FzIHByb2R1Y2luZyBhIGxvdCBvZiBkdXBsaWNhdGlvbiBhbW9uZ3N0IGJ1bmRsZXMuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoaXNFbmFibGVkKHByb3BzKSAmJiBDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGZlYXR1cmVzLnB1c2goUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIF9fYXNzaWduKHsga2V5OiBuYW1lXzEgfSwgcHJvcHMsIHsgdmlzdWFsRWxlbWVudDogdmlzdWFsRWxlbWVudCB9KSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmZWF0dXJlcztcbn1cblxuZXhwb3J0IHsgdXNlRmVhdHVyZXMgfTtcbiIsImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG52YXIgTW90aW9uQ29uZmlnQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICAgIHRyYW5zZm9ybVBhZ2VQb2ludDogZnVuY3Rpb24gKHApIHsgcmV0dXJuIHA7IH0sXG4gICAgaXNTdGF0aWM6IGZhbHNlLFxuICAgIHJlZHVjZWRNb3Rpb246IFwibmV2ZXJcIixcbn0pO1xuXG5leHBvcnQgeyBNb3Rpb25Db25maWdDb250ZXh0IH07XG4iLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuXG52YXIgTW90aW9uQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe30pO1xuZnVuY3Rpb24gdXNlVmlzdWFsRWxlbWVudENvbnRleHQoKSB7XG4gICAgcmV0dXJuIHVzZUNvbnRleHQoTW90aW9uQ29udGV4dCkudmlzdWFsRWxlbWVudDtcbn1cblxuZXhwb3J0IHsgTW90aW9uQ29udGV4dCwgdXNlVmlzdWFsRWxlbWVudENvbnRleHQgfTtcbiIsImltcG9ydCB7IF9fcmVhZCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTW90aW9uQ29uZmlnQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQvTW90aW9uQ29uZmlnQ29udGV4dC5tanMnO1xuaW1wb3J0IHsgaXNCcm93c2VyIH0gZnJvbSAnLi9pcy1icm93c2VyLm1qcyc7XG5cbi8vIERvZXMgdGhpcyBkZXZpY2UgcHJlZmVyIHJlZHVjZWQgbW90aW9uPyBSZXR1cm5zIGBudWxsYCBzZXJ2ZXItc2lkZS5cbnZhciBwcmVmZXJzUmVkdWNlZE1vdGlvbiA9IHsgY3VycmVudDogbnVsbCB9O1xudmFyIGhhc0RldGVjdGVkID0gZmFsc2U7XG5mdW5jdGlvbiBpbml0UHJlZmVyc1JlZHVjZWRNb3Rpb24oKSB7XG4gICAgaGFzRGV0ZWN0ZWQgPSB0cnVlO1xuICAgIGlmICghaXNCcm93c2VyKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKHdpbmRvdy5tYXRjaE1lZGlhKSB7XG4gICAgICAgIHZhciBtb3Rpb25NZWRpYVF1ZXJ5XzEgPSB3aW5kb3cubWF0Y2hNZWRpYShcIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uKVwiKTtcbiAgICAgICAgdmFyIHNldFJlZHVjZWRNb3Rpb25QcmVmZXJlbmNlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAocHJlZmVyc1JlZHVjZWRNb3Rpb24uY3VycmVudCA9IG1vdGlvbk1lZGlhUXVlcnlfMS5tYXRjaGVzKTtcbiAgICAgICAgfTtcbiAgICAgICAgbW90aW9uTWVkaWFRdWVyeV8xLmFkZExpc3RlbmVyKHNldFJlZHVjZWRNb3Rpb25QcmVmZXJlbmNlcyk7XG4gICAgICAgIHNldFJlZHVjZWRNb3Rpb25QcmVmZXJlbmNlcygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcHJlZmVyc1JlZHVjZWRNb3Rpb24uY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbn1cbi8qKlxuICogQSBob29rIHRoYXQgcmV0dXJucyBgdHJ1ZWAgaWYgd2Ugc2hvdWxkIGJlIHVzaW5nIHJlZHVjZWQgbW90aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRldmljZSdzIFJlZHVjZWQgTW90aW9uIHNldHRpbmcuXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgY2hhbmdlcyB0byB5b3VyIFVJIGJhc2VkIG9uIFJlZHVjZWQgTW90aW9uLiBGb3IgaW5zdGFuY2UsIHJlcGxhY2luZyBtb3Rpb24tc2lja25lc3MgaW5kdWNpbmdcbiAqIGB4YC9geWAgYW5pbWF0aW9ucyB3aXRoIGBvcGFjaXR5YCwgZGlzYWJsaW5nIHRoZSBhdXRvcGxheSBvZiBiYWNrZ3JvdW5kIHZpZGVvcywgb3IgdHVybmluZyBvZmYgcGFyYWxsYXggbW90aW9uLlxuICpcbiAqIEl0IHdpbGwgYWN0aXZlbHkgcmVzcG9uZCB0byBjaGFuZ2VzIGFuZCByZS1yZW5kZXIgeW91ciBjb21wb25lbnRzIHdpdGggdGhlIGxhdGVzdCBzZXR0aW5nLlxuICpcbiAqIGBgYGpzeFxuICogZXhwb3J0IGZ1bmN0aW9uIFNpZGViYXIoeyBpc09wZW4gfSkge1xuICogICBjb25zdCBzaG91bGRSZWR1Y2VNb3Rpb24gPSB1c2VSZWR1Y2VkTW90aW9uKClcbiAqICAgY29uc3QgY2xvc2VkWCA9IHNob3VsZFJlZHVjZU1vdGlvbiA/IDAgOiBcIi0xMDAlXCJcbiAqXG4gKiAgIHJldHVybiAoXG4gKiAgICAgPG1vdGlvbi5kaXYgYW5pbWF0ZT17e1xuICogICAgICAgb3BhY2l0eTogaXNPcGVuID8gMSA6IDAsXG4gKiAgICAgICB4OiBpc09wZW4gPyAwIDogY2xvc2VkWFxuICogICAgIH19IC8+XG4gKiAgIClcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEByZXR1cm4gYm9vbGVhblxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gdXNlUmVkdWNlZE1vdGlvbigpIHtcbiAgICAvKipcbiAgICAgKiBMYXp5IGluaXRpYWxpc2F0aW9uIG9mIHByZWZlcnNSZWR1Y2VkTW90aW9uXG4gICAgICovXG4gICAgIWhhc0RldGVjdGVkICYmIGluaXRQcmVmZXJzUmVkdWNlZE1vdGlvbigpO1xuICAgIHZhciBfYSA9IF9fcmVhZCh1c2VTdGF0ZShwcmVmZXJzUmVkdWNlZE1vdGlvbi5jdXJyZW50KSwgMSksIHNob3VsZFJlZHVjZU1vdGlvbiA9IF9hWzBdO1xuICAgIC8qKlxuICAgICAqIFRPRE8gU2VlIGlmIHBlb3BsZSBtaXNzIGF1dG9tYXRpY2FsbHkgdXBkYXRpbmcgc2hvdWxkUmVkdWNlTW90aW9uIHNldHRpbmdcbiAgICAgKi9cbiAgICByZXR1cm4gc2hvdWxkUmVkdWNlTW90aW9uO1xufVxuZnVuY3Rpb24gdXNlUmVkdWNlZE1vdGlvbkNvbmZpZygpIHtcbiAgICB2YXIgcmVkdWNlZE1vdGlvblByZWZlcmVuY2UgPSB1c2VSZWR1Y2VkTW90aW9uKCk7XG4gICAgdmFyIHJlZHVjZWRNb3Rpb24gPSB1c2VDb250ZXh0KE1vdGlvbkNvbmZpZ0NvbnRleHQpLnJlZHVjZWRNb3Rpb247XG4gICAgaWYgKHJlZHVjZWRNb3Rpb24gPT09IFwibmV2ZXJcIikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJlZHVjZWRNb3Rpb24gPT09IFwiYWx3YXlzXCIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVkdWNlZE1vdGlvblByZWZlcmVuY2U7XG4gICAgfVxufVxuXG5leHBvcnQgeyB1c2VSZWR1Y2VkTW90aW9uLCB1c2VSZWR1Y2VkTW90aW9uQ29uZmlnIH07XG4iLCJpbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VSZWYsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFByZXNlbmNlQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvUHJlc2VuY2VDb250ZXh0Lm1qcyc7XG5pbXBvcnQgeyB1c2VWaXN1YWxFbGVtZW50Q29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvTW90aW9uQ29udGV4dC9pbmRleC5tanMnO1xuaW1wb3J0IHsgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCB9IGZyb20gJy4uLy4uL3V0aWxzL3VzZS1pc29tb3JwaGljLWVmZmVjdC5tanMnO1xuaW1wb3J0IHsgTGF6eUNvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L0xhenlDb250ZXh0Lm1qcyc7XG5pbXBvcnQgeyB1c2VSZWR1Y2VkTW90aW9uQ29uZmlnIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXNlLXJlZHVjZWQtbW90aW9uLm1qcyc7XG5cbmZ1bmN0aW9uIHVzZVZpc3VhbEVsZW1lbnQoQ29tcG9uZW50LCB2aXN1YWxTdGF0ZSwgcHJvcHMsIGNyZWF0ZVZpc3VhbEVsZW1lbnQpIHtcbiAgICB2YXIgbGF6eUNvbnRleHQgPSB1c2VDb250ZXh0KExhenlDb250ZXh0KTtcbiAgICB2YXIgcGFyZW50ID0gdXNlVmlzdWFsRWxlbWVudENvbnRleHQoKTtcbiAgICB2YXIgcHJlc2VuY2VDb250ZXh0ID0gdXNlQ29udGV4dChQcmVzZW5jZUNvbnRleHQpO1xuICAgIHZhciBzaG91bGRSZWR1Y2VNb3Rpb24gPSB1c2VSZWR1Y2VkTW90aW9uQ29uZmlnKCk7XG4gICAgdmFyIHZpc3VhbEVsZW1lbnRSZWYgPSB1c2VSZWYodW5kZWZpbmVkKTtcbiAgICAvKipcbiAgICAgKiBJZiB3ZSBoYXZlbid0IHByZWxvYWRlZCBhIHJlbmRlcmVyLCBjaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBvbmUgbGF6eS1sb2FkZWRcbiAgICAgKi9cbiAgICBpZiAoIWNyZWF0ZVZpc3VhbEVsZW1lbnQpXG4gICAgICAgIGNyZWF0ZVZpc3VhbEVsZW1lbnQgPSBsYXp5Q29udGV4dC5yZW5kZXJlcjtcbiAgICBpZiAoIXZpc3VhbEVsZW1lbnRSZWYuY3VycmVudCAmJiBjcmVhdGVWaXN1YWxFbGVtZW50KSB7XG4gICAgICAgIHZpc3VhbEVsZW1lbnRSZWYuY3VycmVudCA9IGNyZWF0ZVZpc3VhbEVsZW1lbnQoQ29tcG9uZW50LCB7XG4gICAgICAgICAgICB2aXN1YWxTdGF0ZTogdmlzdWFsU3RhdGUsXG4gICAgICAgICAgICBwYXJlbnQ6IHBhcmVudCxcbiAgICAgICAgICAgIHByb3BzOiBwcm9wcyxcbiAgICAgICAgICAgIHByZXNlbmNlSWQ6IHByZXNlbmNlQ29udGV4dCA9PT0gbnVsbCB8fCBwcmVzZW5jZUNvbnRleHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByZXNlbmNlQ29udGV4dC5pZCxcbiAgICAgICAgICAgIGJsb2NrSW5pdGlhbEFuaW1hdGlvbjogKHByZXNlbmNlQ29udGV4dCA9PT0gbnVsbCB8fCBwcmVzZW5jZUNvbnRleHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByZXNlbmNlQ29udGV4dC5pbml0aWFsKSA9PT0gZmFsc2UsXG4gICAgICAgICAgICBzaG91bGRSZWR1Y2VNb3Rpb246IHNob3VsZFJlZHVjZU1vdGlvbixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHZhciB2aXN1YWxFbGVtZW50ID0gdmlzdWFsRWxlbWVudFJlZi5jdXJyZW50O1xuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICB2aXN1YWxFbGVtZW50ID09PSBudWxsIHx8IHZpc3VhbEVsZW1lbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZpc3VhbEVsZW1lbnQuc3luY1JlbmRlcigpO1xuICAgIH0pO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgKF9hID0gdmlzdWFsRWxlbWVudCA9PT0gbnVsbCB8fCB2aXN1YWxFbGVtZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2aXN1YWxFbGVtZW50LmFuaW1hdGlvblN0YXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYW5pbWF0ZUNoYW5nZXMoKTtcbiAgICB9KTtcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZpc3VhbEVsZW1lbnQgPT09IG51bGwgfHwgdmlzdWFsRWxlbWVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmlzdWFsRWxlbWVudC5ub3RpZnlVbm1vdW50KCk7IH07IH0sIFtdKTtcbiAgICByZXR1cm4gdmlzdWFsRWxlbWVudDtcbn1cblxuZXhwb3J0IHsgdXNlVmlzdWFsRWxlbWVudCB9O1xuIiwiZnVuY3Rpb24gaXNSZWZPYmplY3QocmVmKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgcmVmID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWYsIFwiY3VycmVudFwiKSk7XG59XG5cbmV4cG9ydCB7IGlzUmVmT2JqZWN0IH07XG4iLCIvKipcbiAqIERlY2lkZXMgaWYgdGhlIHN1cHBsaWVkIHZhcmlhYmxlIGlzIGFuIGFycmF5IG9mIHZhcmlhbnQgbGFiZWxzXG4gKi9cbmZ1bmN0aW9uIGlzVmFyaWFudExhYmVscyh2KSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodik7XG59XG4vKipcbiAqIERlY2lkZXMgaWYgdGhlIHN1cHBsaWVkIHZhcmlhYmxlIGlzIHZhcmlhbnQgbGFiZWxcbiAqL1xuZnVuY3Rpb24gaXNWYXJpYW50TGFiZWwodikge1xuICAgIHJldHVybiB0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiB8fCBpc1ZhcmlhbnRMYWJlbHModik7XG59XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGxhdGVzdCBzdGF0ZSBvZiBldmVyeSBNb3Rpb25WYWx1ZSBvbiBhIFZpc3VhbEVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0Q3VycmVudCh2aXN1YWxFbGVtZW50KSB7XG4gICAgdmFyIGN1cnJlbnQgPSB7fTtcbiAgICB2aXN1YWxFbGVtZW50LmZvckVhY2hWYWx1ZShmdW5jdGlvbiAodmFsdWUsIGtleSkgeyByZXR1cm4gKGN1cnJlbnRba2V5XSA9IHZhbHVlLmdldCgpKTsgfSk7XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG59XG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGxhdGVzdCB2ZWxvY2l0eSBvZiBldmVyeSBNb3Rpb25WYWx1ZSBvbiBhIFZpc3VhbEVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0VmVsb2NpdHkodmlzdWFsRWxlbWVudCkge1xuICAgIHZhciB2ZWxvY2l0eSA9IHt9O1xuICAgIHZpc3VhbEVsZW1lbnQuZm9yRWFjaFZhbHVlKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7IHJldHVybiAodmVsb2NpdHlba2V5XSA9IHZhbHVlLmdldFZlbG9jaXR5KCkpOyB9KTtcbiAgICByZXR1cm4gdmVsb2NpdHk7XG59XG5mdW5jdGlvbiByZXNvbHZlVmFyaWFudEZyb21Qcm9wcyhwcm9wcywgZGVmaW5pdGlvbiwgY3VzdG9tLCBjdXJyZW50VmFsdWVzLCBjdXJyZW50VmVsb2NpdHkpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKGN1cnJlbnRWYWx1ZXMgPT09IHZvaWQgMCkgeyBjdXJyZW50VmFsdWVzID0ge307IH1cbiAgICBpZiAoY3VycmVudFZlbG9jaXR5ID09PSB2b2lkIDApIHsgY3VycmVudFZlbG9jaXR5ID0ge307IH1cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgdmFyaWFudCBkZWZpbml0aW9uIGlzIGEgZnVuY3Rpb24sIHJlc29sdmUuXG4gICAgICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbml0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZGVmaW5pdGlvbiA9IGRlZmluaXRpb24oY3VzdG9tICE9PSBudWxsICYmIGN1c3RvbSAhPT0gdm9pZCAwID8gY3VzdG9tIDogcHJvcHMuY3VzdG9tLCBjdXJyZW50VmFsdWVzLCBjdXJyZW50VmVsb2NpdHkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgdmFyaWFudCBkZWZpbml0aW9uIGlzIGEgdmFyaWFudCBsYWJlbCwgb3JcbiAgICAgKiB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgYSB2YXJpYW50IGxhYmVsLCByZXNvbHZlLlxuICAgICAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5pdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBkZWZpbml0aW9uID0gKF9hID0gcHJvcHMudmFyaWFudHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVtkZWZpbml0aW9uXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXQgdGhpcyBwb2ludCB3ZSd2ZSByZXNvbHZlZCBib3RoIGZ1bmN0aW9ucyBhbmQgdmFyaWFudCBsYWJlbHMsXG4gICAgICogYnV0IHRoZSByZXNvbHZlZCB2YXJpYW50IGxhYmVsIG1pZ2h0IGl0c2VsZiBoYXZlIGJlZW4gYSBmdW5jdGlvbi5cbiAgICAgKiBJZiBzbywgcmVzb2x2ZS4gVGhpcyBjYW4gb25seSBoYXZlIHJldHVybmVkIGEgdmFsaWQgdGFyZ2V0IG9iamVjdC5cbiAgICAgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluaXRpb24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBkZWZpbml0aW9uID0gZGVmaW5pdGlvbihjdXN0b20gIT09IG51bGwgJiYgY3VzdG9tICE9PSB2b2lkIDAgPyBjdXN0b20gOiBwcm9wcy5jdXN0b20sIGN1cnJlbnRWYWx1ZXMsIGN1cnJlbnRWZWxvY2l0eSk7XG4gICAgfVxuICAgIHJldHVybiBkZWZpbml0aW9uO1xufVxuZnVuY3Rpb24gcmVzb2x2ZVZhcmlhbnQodmlzdWFsRWxlbWVudCwgZGVmaW5pdGlvbiwgY3VzdG9tKSB7XG4gICAgdmFyIHByb3BzID0gdmlzdWFsRWxlbWVudC5nZXRQcm9wcygpO1xuICAgIHJldHVybiByZXNvbHZlVmFyaWFudEZyb21Qcm9wcyhwcm9wcywgZGVmaW5pdGlvbiwgY3VzdG9tICE9PSBudWxsICYmIGN1c3RvbSAhPT0gdm9pZCAwID8gY3VzdG9tIDogcHJvcHMuY3VzdG9tLCBnZXRDdXJyZW50KHZpc3VhbEVsZW1lbnQpLCBnZXRWZWxvY2l0eSh2aXN1YWxFbGVtZW50KSk7XG59XG5mdW5jdGlvbiBjaGVja0lmQ29udHJvbGxpbmdWYXJpYW50cyhwcm9wcykge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKHR5cGVvZiAoKF9hID0gcHJvcHMuYW5pbWF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN0YXJ0KSA9PT0gXCJmdW5jdGlvblwiIHx8XG4gICAgICAgIGlzVmFyaWFudExhYmVsKHByb3BzLmluaXRpYWwpIHx8XG4gICAgICAgIGlzVmFyaWFudExhYmVsKHByb3BzLmFuaW1hdGUpIHx8XG4gICAgICAgIGlzVmFyaWFudExhYmVsKHByb3BzLndoaWxlSG92ZXIpIHx8XG4gICAgICAgIGlzVmFyaWFudExhYmVsKHByb3BzLndoaWxlRHJhZykgfHxcbiAgICAgICAgaXNWYXJpYW50TGFiZWwocHJvcHMud2hpbGVUYXApIHx8XG4gICAgICAgIGlzVmFyaWFudExhYmVsKHByb3BzLndoaWxlRm9jdXMpIHx8XG4gICAgICAgIGlzVmFyaWFudExhYmVsKHByb3BzLmV4aXQpKTtcbn1cbmZ1bmN0aW9uIGNoZWNrSWZWYXJpYW50Tm9kZShwcm9wcykge1xuICAgIHJldHVybiBCb29sZWFuKGNoZWNrSWZDb250cm9sbGluZ1ZhcmlhbnRzKHByb3BzKSB8fCBwcm9wcy52YXJpYW50cyk7XG59XG5cbmV4cG9ydCB7IGNoZWNrSWZDb250cm9sbGluZ1ZhcmlhbnRzLCBjaGVja0lmVmFyaWFudE5vZGUsIGlzVmFyaWFudExhYmVsLCBpc1ZhcmlhbnRMYWJlbHMsIHJlc29sdmVWYXJpYW50LCByZXNvbHZlVmFyaWFudEZyb21Qcm9wcyB9O1xuIiwiaW1wb3J0IHsgdXNlTWVtbywgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE1vdGlvbkNvbnRleHQgfSBmcm9tICcuL2luZGV4Lm1qcyc7XG5pbXBvcnQgeyBnZXRDdXJyZW50VHJlZVZhcmlhbnRzIH0gZnJvbSAnLi91dGlscy5tanMnO1xuXG5mdW5jdGlvbiB1c2VDcmVhdGVNb3Rpb25Db250ZXh0KHByb3BzKSB7XG4gICAgdmFyIF9hID0gZ2V0Q3VycmVudFRyZWVWYXJpYW50cyhwcm9wcywgdXNlQ29udGV4dChNb3Rpb25Db250ZXh0KSksIGluaXRpYWwgPSBfYS5pbml0aWFsLCBhbmltYXRlID0gX2EuYW5pbWF0ZTtcbiAgICByZXR1cm4gdXNlTWVtbyhmdW5jdGlvbiAoKSB7IHJldHVybiAoeyBpbml0aWFsOiBpbml0aWFsLCBhbmltYXRlOiBhbmltYXRlIH0pOyB9LCBbdmFyaWFudExhYmVsc0FzRGVwZW5kZW5jeShpbml0aWFsKSwgdmFyaWFudExhYmVsc0FzRGVwZW5kZW5jeShhbmltYXRlKV0pO1xufVxuZnVuY3Rpb24gdmFyaWFudExhYmVsc0FzRGVwZW5kZW5jeShwcm9wKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocHJvcCkgPyBwcm9wLmpvaW4oXCIgXCIpIDogcHJvcDtcbn1cblxuZXhwb3J0IHsgdXNlQ3JlYXRlTW90aW9uQ29udGV4dCB9O1xuIiwiLyoqXG4gKiBUaGlzIHNob3VsZCBvbmx5IGV2ZXIgYmUgbW9kaWZpZWQgb24gdGhlIGNsaWVudCBvdGhlcndpc2UgaXQnbGxcbiAqIHBlcnNpc3QgdGhyb3VnaCBzZXJ2ZXIgcmVxdWVzdHMuIElmIHdlIG5lZWQgaW5zdGFuY2VkIHN0YXRlcyB3ZVxuICogY291bGQgbGF6eS1pbml0IHZpYSByb290LlxuICovXG52YXIgZ2xvYmFsUHJvamVjdGlvblN0YXRlID0ge1xuICAgIC8qKlxuICAgICAqIEdsb2JhbCBmbGFnIGFzIHRvIHdoZXRoZXIgdGhlIHRyZWUgaGFzIGFuaW1hdGVkIHNpbmNlIHRoZSBsYXN0IHRpbWVcbiAgICAgKiB3ZSByZXNpemVkIHRoZSB3aW5kb3dcbiAgICAgKi9cbiAgICBoYXNBbmltYXRlZFNpbmNlUmVzaXplOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIFdlIHNldCB0aGlzIHRvIHRydWUgb25jZSwgb24gdGhlIGZpcnN0IHVwZGF0ZS4gQW55IG5vZGVzIGFkZGVkIHRvIHRoZSB0cmVlIGJleW9uZCB0aGF0XG4gICAgICogdXBkYXRlIHdpbGwgYmUgZ2l2ZW4gYSBgZGF0YS1wcm9qZWN0aW9uLWlkYCBhdHRyaWJ1dGUuXG4gICAgICovXG4gICAgaGFzRXZlclVwZGF0ZWQ6IGZhbHNlLFxufTtcblxuZXhwb3J0IHsgZ2xvYmFsUHJvamVjdGlvblN0YXRlIH07XG4iLCJpbXBvcnQgeyB1c2VDb25zdGFudCB9IGZyb20gJy4uLy4uL3V0aWxzL3VzZS1jb25zdGFudC5tanMnO1xuaW1wb3J0IHsgZ2xvYmFsUHJvamVjdGlvblN0YXRlIH0gZnJvbSAnLi9zdGF0ZS5tanMnO1xuXG52YXIgaWQgPSAxO1xuZnVuY3Rpb24gdXNlUHJvamVjdGlvbklkKCkge1xuICAgIHJldHVybiB1c2VDb25zdGFudChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChnbG9iYWxQcm9qZWN0aW9uU3RhdGUuaGFzRXZlclVwZGF0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBpZCsrO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmV4cG9ydCB7IHVzZVByb2plY3Rpb25JZCB9O1xuIiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBJbnRlcm5hbCwgZXhwb3J0ZWQgb25seSBmb3IgdXNhZ2UgaW4gRnJhbWVyXG4gKi9cbnZhciBTd2l0Y2hMYXlvdXRHcm91cENvbnRleHQgPSBjcmVhdGVDb250ZXh0KHt9KTtcblxuZXhwb3J0IHsgU3dpdGNoTGF5b3V0R3JvdXBDb250ZXh0IH07XG4iLCJpbXBvcnQgeyBfX2V4dGVuZHMgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgUmVhY3RfX2RlZmF1bHQgZnJvbSAncmVhY3QnO1xuXG52YXIgVmlzdWFsRWxlbWVudEhhbmRsZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFZpc3VhbEVsZW1lbnRIYW5kbGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFZpc3VhbEVsZW1lbnRIYW5kbGVyKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSB2aXN1YWwgZWxlbWVudCBwcm9wcyBhcyBzb29uIGFzIHdlIGtub3cgdGhpcyB1cGRhdGUgaXMgZ29pbmcgdG8gYmUgY29tbWl0ZWQuXG4gICAgICovXG4gICAgVmlzdWFsRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVByb3BzKCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgVmlzdWFsRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICBWaXN1YWxFbGVtZW50SGFuZGxlci5wcm90b3R5cGUudXBkYXRlUHJvcHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMucHJvcHMsIHZpc3VhbEVsZW1lbnQgPSBfYS52aXN1YWxFbGVtZW50LCBwcm9wcyA9IF9hLnByb3BzO1xuICAgICAgICBpZiAodmlzdWFsRWxlbWVudClcbiAgICAgICAgICAgIHZpc3VhbEVsZW1lbnQuc2V0UHJvcHMocHJvcHMpO1xuICAgIH07XG4gICAgVmlzdWFsRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47XG4gICAgfTtcbiAgICByZXR1cm4gVmlzdWFsRWxlbWVudEhhbmRsZXI7XG59KFJlYWN0X19kZWZhdWx0LkNvbXBvbmVudCkpO1xuXG5leHBvcnQgeyBWaXN1YWxFbGVtZW50SGFuZGxlciB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBmb3J3YXJkUmVmLCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRmVhdHVyZXMgfSBmcm9tICcuL2ZlYXR1cmVzL3VzZS1mZWF0dXJlcy5tanMnO1xuaW1wb3J0IHsgTW90aW9uQ29uZmlnQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQvTW90aW9uQ29uZmlnQ29udGV4dC5tanMnO1xuaW1wb3J0IHsgTW90aW9uQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQvTW90aW9uQ29udGV4dC9pbmRleC5tanMnO1xuaW1wb3J0IHsgdXNlVmlzdWFsRWxlbWVudCB9IGZyb20gJy4vdXRpbHMvdXNlLXZpc3VhbC1lbGVtZW50Lm1qcyc7XG5pbXBvcnQgeyB1c2VNb3Rpb25SZWYgfSBmcm9tICcuL3V0aWxzL3VzZS1tb3Rpb24tcmVmLm1qcyc7XG5pbXBvcnQgeyB1c2VDcmVhdGVNb3Rpb25Db250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC9Nb3Rpb25Db250ZXh0L2NyZWF0ZS5tanMnO1xuaW1wb3J0IHsgbG9hZEZlYXR1cmVzLCBmZWF0dXJlRGVmaW5pdGlvbnMgfSBmcm9tICcuL2ZlYXR1cmVzL2RlZmluaXRpb25zLm1qcyc7XG5pbXBvcnQgeyBpc0Jyb3dzZXIgfSBmcm9tICcuLi91dGlscy9pcy1icm93c2VyLm1qcyc7XG5pbXBvcnQgeyB1c2VQcm9qZWN0aW9uSWQgfSBmcm9tICcuLi9wcm9qZWN0aW9uL25vZGUvaWQubWpzJztcbmltcG9ydCB7IExheW91dEdyb3VwQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQvTGF5b3V0R3JvdXBDb250ZXh0Lm1qcyc7XG5pbXBvcnQgeyB1c2VQcm9qZWN0aW9uIH0gZnJvbSAnLi9mZWF0dXJlcy91c2UtcHJvamVjdGlvbi5tanMnO1xuaW1wb3J0IHsgVmlzdWFsRWxlbWVudEhhbmRsZXIgfSBmcm9tICcuL3V0aWxzL1Zpc3VhbEVsZW1lbnRIYW5kbGVyLm1qcyc7XG5cbi8qKlxuICogQ3JlYXRlIGEgYG1vdGlvbmAgY29tcG9uZW50LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gYWNjZXB0cyBhIENvbXBvbmVudCBhcmd1bWVudCwgd2hpY2ggY2FuIGJlIGVpdGhlciBhIHN0cmluZyAoaWUgXCJkaXZcIlxuICogZm9yIGBtb3Rpb24uZGl2YCksIG9yIGFuIGFjdHVhbCBSZWFjdCBjb21wb25lbnQuXG4gKlxuICogQWxvbmdzaWRlIHRoaXMgaXMgYSBjb25maWcgb3B0aW9uIHdoaWNoIHByb3ZpZGVzIGEgd2F5IG9mIHJlbmRlcmluZyB0aGUgcHJvdmlkZWRcbiAqIGNvbXBvbmVudCBcIm9mZmxpbmVcIiwgb3Igb3V0c2lkZSB0aGUgUmVhY3QgcmVuZGVyIGN5Y2xlLlxuICovXG5mdW5jdGlvbiBjcmVhdGVNb3Rpb25Db21wb25lbnQoX2EpIHtcbiAgICB2YXIgcHJlbG9hZGVkRmVhdHVyZXMgPSBfYS5wcmVsb2FkZWRGZWF0dXJlcywgY3JlYXRlVmlzdWFsRWxlbWVudCA9IF9hLmNyZWF0ZVZpc3VhbEVsZW1lbnQsIHByb2plY3Rpb25Ob2RlQ29uc3RydWN0b3IgPSBfYS5wcm9qZWN0aW9uTm9kZUNvbnN0cnVjdG9yLCB1c2VSZW5kZXIgPSBfYS51c2VSZW5kZXIsIHVzZVZpc3VhbFN0YXRlID0gX2EudXNlVmlzdWFsU3RhdGUsIENvbXBvbmVudCA9IF9hLkNvbXBvbmVudDtcbiAgICBwcmVsb2FkZWRGZWF0dXJlcyAmJiBsb2FkRmVhdHVyZXMocHJlbG9hZGVkRmVhdHVyZXMpO1xuICAgIGZ1bmN0aW9uIE1vdGlvbkNvbXBvbmVudChwcm9wcywgZXh0ZXJuYWxSZWYpIHtcbiAgICAgICAgdmFyIGxheW91dElkID0gdXNlTGF5b3V0SWQocHJvcHMpO1xuICAgICAgICBwcm9wcyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBwcm9wcyksIHsgbGF5b3V0SWQ6IGxheW91dElkIH0pO1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgd2UncmUgcmVuZGVyaW5nIGluIGEgc3RhdGljIGVudmlyb25tZW50LCB3ZSBvbmx5IHZpc3VhbGx5IHVwZGF0ZSB0aGUgY29tcG9uZW50XG4gICAgICAgICAqIGFzIGEgcmVzdWx0IG9mIGEgUmVhY3QtcmVyZW5kZXIgcmF0aGVyIHRoYW4gaW50ZXJhY3Rpb25zIG9yIGFuaW1hdGlvbnMuIFRoaXNcbiAgICAgICAgICogbWVhbnMgd2UgZG9uJ3QgbmVlZCB0byBsb2FkIGFkZGl0aW9uYWwgbWVtb3J5IHN0cnVjdHVyZXMgbGlrZSBWaXN1YWxFbGVtZW50LFxuICAgICAgICAgKiBvciBhbnkgZ2VzdHVyZS9hbmltYXRpb24gZmVhdHVyZXMuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgY29uZmlnID0gdXNlQ29udGV4dChNb3Rpb25Db25maWdDb250ZXh0KTtcbiAgICAgICAgdmFyIGZlYXR1cmVzID0gbnVsbDtcbiAgICAgICAgdmFyIGNvbnRleHQgPSB1c2VDcmVhdGVNb3Rpb25Db250ZXh0KHByb3BzKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZSBhIHVuaXF1ZSBwcm9qZWN0aW9uIElEIGZvciB0aGlzIGNvbXBvbmVudC4gSWYgYSBuZXcgY29tcG9uZW50IGlzIGFkZGVkXG4gICAgICAgICAqIGR1cmluZyBhIGxheW91dCBhbmltYXRpb24gd2UnbGwgdXNlIHRoaXMgdG8gcXVlcnkgdGhlIERPTSBhbmQgaHlkcmF0ZSBpdHMgcmVmIGVhcmx5LCBhbGxvd2luZ1xuICAgICAgICAgKiB1cyB0byBtZWFzdXJlIGl0IGFzIHNvb24gYXMgYW55IGxheW91dCBlZmZlY3QgZmx1c2hlcyBwZW5kaW5nIGxheW91dCBhbmltYXRpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBQZXJmb3JtYW5jZSBub3RlOiBJdCdkIGJlIGJldHRlciBub3QgdG8gaGF2ZSB0byBzZWFyY2ggdGhlIERPTSBmb3IgdGhlc2UgZWxlbWVudHMuXG4gICAgICAgICAqIEZvciBuZXdseS1lbnRlcmluZyBjb21wb25lbnRzIGl0IGNvdWxkIGJlIGVub3VnaCB0byBvbmx5IGNvcnJlY3QgdHJlZVNjYWxlLCBpbiB3aGljaFxuICAgICAgICAgKiBjYXNlIHdlIGNvdWxkIG1vdW50IGluIGEgc2NhbGUtY29ycmVjdGlvbiBtb2RlLiBUaGlzIHdvdWxkbid0IGJlIGVub3VnaCBmb3JcbiAgICAgICAgICogc2hhcmVkIGVsZW1lbnQgdHJhbnNpdGlvbnMgaG93ZXZlci4gUGVyaGFwcyBmb3IgdGhvc2Ugd2UgY291bGQgcmV2ZXJ0IHRvIGEgcm9vdCBub2RlXG4gICAgICAgICAqIHRoYXQgZ2V0cyBmb3JjZVJlbmRlcmVkIGFuZCBsYXlvdXQgYW5pbWF0aW9ucyBhcmUgdHJpZ2dlcmVkIG9uIGl0cyBsYXlvdXQgZWZmZWN0LlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIHByb2plY3Rpb25JZCA9IGNvbmZpZy5pc1N0YXRpYyA/IHVuZGVmaW5lZCA6IHVzZVByb2plY3Rpb25JZCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICpcbiAgICAgICAgICovXG4gICAgICAgIHZhciB2aXN1YWxTdGF0ZSA9IHVzZVZpc3VhbFN0YXRlKHByb3BzLCBjb25maWcuaXNTdGF0aWMpO1xuICAgICAgICBpZiAoIWNvbmZpZy5pc1N0YXRpYyAmJiBpc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQ3JlYXRlIGEgVmlzdWFsRWxlbWVudCBmb3IgdGhpcyBjb21wb25lbnQuIEEgVmlzdWFsRWxlbWVudCBwcm92aWRlcyBhIGNvbW1vblxuICAgICAgICAgICAgICogaW50ZXJmYWNlIHRvIHJlbmRlcmVyLXNwZWNpZmljIEFQSXMgKGllIERPTS9UaHJlZS5qcyBldGMpIGFzIHdlbGwgYXNcbiAgICAgICAgICAgICAqIHByb3ZpZGluZyBhIHdheSBvZiByZW5kZXJpbmcgdG8gdGhlc2UgQVBJcyBvdXRzaWRlIG9mIHRoZSBSZWFjdCByZW5kZXIgbG9vcFxuICAgICAgICAgICAgICogZm9yIG1vcmUgcGVyZm9ybWFudCBhbmltYXRpb25zIGFuZCBpbnRlcmFjdGlvbnNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY29udGV4dC52aXN1YWxFbGVtZW50ID0gdXNlVmlzdWFsRWxlbWVudChDb21wb25lbnQsIHZpc3VhbFN0YXRlLCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY29uZmlnKSwgcHJvcHMpLCBjcmVhdGVWaXN1YWxFbGVtZW50KTtcbiAgICAgICAgICAgIHVzZVByb2plY3Rpb24ocHJvamVjdGlvbklkLCBwcm9wcywgY29udGV4dC52aXN1YWxFbGVtZW50LCBwcm9qZWN0aW9uTm9kZUNvbnN0cnVjdG9yIHx8XG4gICAgICAgICAgICAgICAgZmVhdHVyZURlZmluaXRpb25zLnByb2plY3Rpb25Ob2RlQ29uc3RydWN0b3IpO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBMb2FkIE1vdGlvbiBnZXN0dXJlIGFuZCBhbmltYXRpb24gZmVhdHVyZXMuIFRoZXNlIGFyZSByZW5kZXJlZCBhcyByZW5kZXJsZXNzXG4gICAgICAgICAgICAgKiBjb21wb25lbnRzIHNvIGVhY2ggZmVhdHVyZSBjYW4gb3B0aW9uYWxseSBtYWtlIHVzZSBvZiBSZWFjdCBsaWZlY3ljbGUgbWV0aG9kcy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZmVhdHVyZXMgPSB1c2VGZWF0dXJlcyhwcm9wcywgY29udGV4dC52aXN1YWxFbGVtZW50LCBwcmVsb2FkZWRGZWF0dXJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBtb3VudCBvcmRlciBhbmQgaGllcmFyY2h5IGlzIHNwZWNpZmljIHRvIGVuc3VyZSBvdXIgZWxlbWVudCByZWZcbiAgICAgICAgICogaXMgaHlkcmF0ZWQgYnkgdGhlIHRpbWUgZmVhdHVyZXMgZmlyZSB0aGVpciBlZmZlY3RzLlxuICAgICAgICAgKi9cbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFZpc3VhbEVsZW1lbnRIYW5kbGVyLCB7IHZpc3VhbEVsZW1lbnQ6IGNvbnRleHQudmlzdWFsRWxlbWVudCwgcHJvcHM6IF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb25maWcpLCBwcm9wcykgfSxcbiAgICAgICAgICAgIGZlYXR1cmVzLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChNb3Rpb25Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0IH0sIHVzZVJlbmRlcihDb21wb25lbnQsIHByb3BzLCBwcm9qZWN0aW9uSWQsIHVzZU1vdGlvblJlZih2aXN1YWxTdGF0ZSwgY29udGV4dC52aXN1YWxFbGVtZW50LCBleHRlcm5hbFJlZiksIHZpc3VhbFN0YXRlLCBjb25maWcuaXNTdGF0aWMsIGNvbnRleHQudmlzdWFsRWxlbWVudCkpKSk7XG4gICAgfVxuICAgIHJldHVybiBmb3J3YXJkUmVmKE1vdGlvbkNvbXBvbmVudCk7XG59XG5mdW5jdGlvbiB1c2VMYXlvdXRJZChfYSkge1xuICAgIHZhciBfYjtcbiAgICB2YXIgbGF5b3V0SWQgPSBfYS5sYXlvdXRJZDtcbiAgICB2YXIgbGF5b3V0R3JvdXBJZCA9IChfYiA9IHVzZUNvbnRleHQoTGF5b3V0R3JvdXBDb250ZXh0KSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkO1xuICAgIHJldHVybiBsYXlvdXRHcm91cElkICYmIGxheW91dElkICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBsYXlvdXRHcm91cElkICsgXCItXCIgKyBsYXlvdXRJZFxuICAgICAgICA6IGxheW91dElkO1xufVxuXG5leHBvcnQgeyBjcmVhdGVNb3Rpb25Db21wb25lbnQgfTtcbiIsImltcG9ydCB7IGNoZWNrSWZDb250cm9sbGluZ1ZhcmlhbnRzLCBpc1ZhcmlhbnRMYWJlbCB9IGZyb20gJy4uLy4uL3JlbmRlci91dGlscy92YXJpYW50cy5tanMnO1xuXG5mdW5jdGlvbiBnZXRDdXJyZW50VHJlZVZhcmlhbnRzKHByb3BzLCBjb250ZXh0KSB7XG4gICAgaWYgKGNoZWNrSWZDb250cm9sbGluZ1ZhcmlhbnRzKHByb3BzKSkge1xuICAgICAgICB2YXIgaW5pdGlhbCA9IHByb3BzLmluaXRpYWwsIGFuaW1hdGUgPSBwcm9wcy5hbmltYXRlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5pdGlhbDogaW5pdGlhbCA9PT0gZmFsc2UgfHwgaXNWYXJpYW50TGFiZWwoaW5pdGlhbClcbiAgICAgICAgICAgICAgICA/IGluaXRpYWxcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGFuaW1hdGU6IGlzVmFyaWFudExhYmVsKGFuaW1hdGUpID8gYW5pbWF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHByb3BzLmluaGVyaXQgIT09IGZhbHNlID8gY29udGV4dCA6IHt9O1xufVxuXG5leHBvcnQgeyBnZXRDdXJyZW50VHJlZVZhcmlhbnRzIH07XG4iLCJpbXBvcnQgeyBpc1JlZk9iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzL2lzLXJlZi1vYmplY3QubWpzJztcbmltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTd2l0Y2hMYXlvdXRHcm91cENvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L1N3aXRjaExheW91dEdyb3VwQ29udGV4dC5tanMnO1xuXG5mdW5jdGlvbiB1c2VQcm9qZWN0aW9uKHByb2plY3Rpb25JZCwgX2EsIHZpc3VhbEVsZW1lbnQsIFByb2plY3Rpb25Ob2RlQ29uc3RydWN0b3IpIHtcbiAgICB2YXIgX2I7XG4gICAgdmFyIGxheW91dElkID0gX2EubGF5b3V0SWQsIGxheW91dCA9IF9hLmxheW91dCwgZHJhZyA9IF9hLmRyYWcsIGRyYWdDb25zdHJhaW50cyA9IF9hLmRyYWdDb25zdHJhaW50cywgbGF5b3V0U2Nyb2xsID0gX2EubGF5b3V0U2Nyb2xsO1xuICAgIHZhciBpbml0aWFsUHJvbW90aW9uQ29uZmlnID0gdXNlQ29udGV4dChTd2l0Y2hMYXlvdXRHcm91cENvbnRleHQpO1xuICAgIGlmICghUHJvamVjdGlvbk5vZGVDb25zdHJ1Y3RvciB8fFxuICAgICAgICAhdmlzdWFsRWxlbWVudCB8fFxuICAgICAgICAodmlzdWFsRWxlbWVudCA9PT0gbnVsbCB8fCB2aXN1YWxFbGVtZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2aXN1YWxFbGVtZW50LnByb2plY3Rpb24pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uID0gbmV3IFByb2plY3Rpb25Ob2RlQ29uc3RydWN0b3IocHJvamVjdGlvbklkLCB2aXN1YWxFbGVtZW50LmdldExhdGVzdFZhbHVlcygpLCAoX2IgPSB2aXN1YWxFbGVtZW50LnBhcmVudCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnByb2plY3Rpb24pO1xuICAgIHZpc3VhbEVsZW1lbnQucHJvamVjdGlvbi5zZXRPcHRpb25zKHtcbiAgICAgICAgbGF5b3V0SWQ6IGxheW91dElkLFxuICAgICAgICBsYXlvdXQ6IGxheW91dCxcbiAgICAgICAgYWx3YXlzTWVhc3VyZUxheW91dDogQm9vbGVhbihkcmFnKSB8fCAoZHJhZ0NvbnN0cmFpbnRzICYmIGlzUmVmT2JqZWN0KGRyYWdDb25zdHJhaW50cykpLFxuICAgICAgICB2aXN1YWxFbGVtZW50OiB2aXN1YWxFbGVtZW50LFxuICAgICAgICBzY2hlZHVsZVJlbmRlcjogZnVuY3Rpb24gKCkgeyByZXR1cm4gdmlzdWFsRWxlbWVudC5zY2hlZHVsZVJlbmRlcigpOyB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogVE9ETzogVXBkYXRlIG9wdGlvbnMgaW4gYW4gZWZmZWN0LiBUaGlzIGNvdWxkIGJlIHRyaWNreSBhcyBpdCdsbCBiZSB0b28gbGF0ZVxuICAgICAgICAgKiB0byB1cGRhdGUgYnkgdGhlIHRpbWUgbGF5b3V0IGFuaW1hdGlvbnMgcnVuLlxuICAgICAgICAgKiBXZSBhbHNvIG5lZWQgdG8gZml4IHRoaXMgc2FmZVRvUmVtb3ZlIGJ5IGxpbmtpbmcgaXQgdXAgdG8gdGhlIG9uZSByZXR1cm5lZCBieSB1c2VQcmVzZW5jZSxcbiAgICAgICAgICogZW5zdXJpbmcgaXQgZ2V0cyBjYWxsZWQgaWYgdGhlcmUncyBubyBwb3RlbnRpYWwgbGF5b3V0IGFuaW1hdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBhbmltYXRpb25UeXBlOiB0eXBlb2YgbGF5b3V0ID09PSBcInN0cmluZ1wiID8gbGF5b3V0IDogXCJib3RoXCIsXG4gICAgICAgIGluaXRpYWxQcm9tb3Rpb25Db25maWc6IGluaXRpYWxQcm9tb3Rpb25Db25maWcsXG4gICAgICAgIGxheW91dFNjcm9sbDogbGF5b3V0U2Nyb2xsLFxuICAgIH0pO1xufVxuXG5leHBvcnQgeyB1c2VQcm9qZWN0aW9uIH07XG4iLCJpbXBvcnQgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzUmVmT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvaXMtcmVmLW9iamVjdC5tanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSByZWYgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsIGh5ZHJhdGVzIHRoZSBwcm92aWRlZFxuICogZXh0ZXJuYWwgcmVmIGFuZCBWaXN1YWxFbGVtZW50LlxuICovXG5mdW5jdGlvbiB1c2VNb3Rpb25SZWYodmlzdWFsU3RhdGUsIHZpc3VhbEVsZW1lbnQsIGV4dGVybmFsUmVmKSB7XG4gICAgcmV0dXJuIHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGluc3RhbmNlICYmICgoX2EgPSB2aXN1YWxTdGF0ZS5tb3VudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodmlzdWFsU3RhdGUsIGluc3RhbmNlKSk7XG4gICAgICAgIGlmICh2aXN1YWxFbGVtZW50KSB7XG4gICAgICAgICAgICBpbnN0YW5jZVxuICAgICAgICAgICAgICAgID8gdmlzdWFsRWxlbWVudC5tb3VudChpbnN0YW5jZSlcbiAgICAgICAgICAgICAgICA6IHZpc3VhbEVsZW1lbnQudW5tb3VudCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHRlcm5hbFJlZikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRlcm5hbFJlZiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgZXh0ZXJuYWxSZWYoaW5zdGFuY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNSZWZPYmplY3QoZXh0ZXJuYWxSZWYpKSB7XG4gICAgICAgICAgICAgICAgZXh0ZXJuYWxSZWYuY3VycmVudCA9IGluc3RhbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgXG4gICAgLyoqXG4gICAgICogT25seSBwYXNzIGEgbmV3IHJlZiBjYWxsYmFjayB0byBSZWFjdCBpZiB3ZSd2ZSByZWNlaXZlZCBhIHZpc3VhbCBlbGVtZW50XG4gICAgICogZmFjdG9yeS4gT3RoZXJ3aXNlIHdlJ2xsIGJlIG1vdW50aW5nL3JlbW91bnRpbmcgZXZlcnkgdGltZSBleHRlcm5hbFJlZlxuICAgICAqIG9yIG90aGVyIGRlcGVuZGVuY2llcyBjaGFuZ2UuXG4gICAgICovXG4gICAgW3Zpc3VhbEVsZW1lbnRdKTtcbn1cblxuZXhwb3J0IHsgdXNlTW90aW9uUmVmIH07XG4iLCJpbXBvcnQgeyBjcmVhdGVNb3Rpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9tb3Rpb24vaW5kZXgubWpzJztcblxuLyoqXG4gKiBDb252ZXJ0IGFueSBSZWFjdCBjb21wb25lbnQgaW50byBhIGBtb3Rpb25gIGNvbXBvbmVudC4gVGhlIHByb3ZpZGVkIGNvbXBvbmVudFxuICogKiptdXN0KiogdXNlIGBSZWFjdC5mb3J3YXJkUmVmYCB0byB0aGUgdW5kZXJseWluZyBET00gY29tcG9uZW50IHlvdSB3YW50IHRvIGFuaW1hdGUuXG4gKlxuICogYGBganN4XG4gKiBjb25zdCBDb21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgcmVmKSA9PiB7XG4gKiAgIHJldHVybiA8ZGl2IHJlZj17cmVmfSAvPlxuICogfSlcbiAqXG4gKiBjb25zdCBNb3Rpb25Db21wb25lbnQgPSBtb3Rpb24oQ29tcG9uZW50KVxuICogYGBgXG4gKlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBjcmVhdGVNb3Rpb25Qcm94eShjcmVhdGVDb25maWcpIHtcbiAgICBmdW5jdGlvbiBjdXN0b20oQ29tcG9uZW50LCBjdXN0b21Nb3Rpb25Db21wb25lbnRDb25maWcpIHtcbiAgICAgICAgaWYgKGN1c3RvbU1vdGlvbkNvbXBvbmVudENvbmZpZyA9PT0gdm9pZCAwKSB7IGN1c3RvbU1vdGlvbkNvbXBvbmVudENvbmZpZyA9IHt9OyB9XG4gICAgICAgIHJldHVybiBjcmVhdGVNb3Rpb25Db21wb25lbnQoY3JlYXRlQ29uZmlnKENvbXBvbmVudCwgY3VzdG9tTW90aW9uQ29tcG9uZW50Q29uZmlnKSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgUHJveHkgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIGN1c3RvbTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQSBjYWNoZSBvZiBnZW5lcmF0ZWQgYG1vdGlvbmAgY29tcG9uZW50cywgZS5nIGBtb3Rpb24uZGl2YCwgYG1vdGlvbi5pbnB1dGAgZXRjLlxuICAgICAqIFJhdGhlciB0aGFuIGdlbmVyYXRpbmcgdGhlbSBhbmV3IGV2ZXJ5IHJlbmRlci5cbiAgICAgKi9cbiAgICB2YXIgY29tcG9uZW50Q2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgcmV0dXJuIG5ldyBQcm94eShjdXN0b20sIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENhbGxlZCB3aGVuIGBtb3Rpb25gIGlzIHJlZmVyZW5jZWQgd2l0aCBhIHByb3A6IGBtb3Rpb24uZGl2YCwgYG1vdGlvbi5pbnB1dGAgZXRjLlxuICAgICAgICAgKiBUaGUgcHJvcCBuYW1lIGlzIHBhc3NlZCB0aHJvdWdoIGFzIGBrZXlgIGFuZCB3ZSBjYW4gdXNlIHRoYXQgdG8gZ2VuZXJhdGUgYSBgbW90aW9uYFxuICAgICAgICAgKiBET00gY29tcG9uZW50IHdpdGggdGhhdCBuYW1lLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoX3RhcmdldCwga2V5KSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHRoaXMgZWxlbWVudCBkb2Vzbid0IGV4aXN0IGluIHRoZSBjb21wb25lbnQgY2FjaGUsIGNyZWF0ZSBpdCBhbmQgY2FjaGUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICghY29tcG9uZW50Q2FjaGUuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRDYWNoZS5zZXQoa2V5LCBjdXN0b20oa2V5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29tcG9uZW50Q2FjaGUuZ2V0KGtleSk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG5cbmV4cG9ydCB7IGNyZWF0ZU1vdGlvblByb3h5IH07XG4iLCIvKipcbiAqIFdlIGtlZXAgdGhlc2UgbGlzdGVkIHNlcGVyYXRlbHkgYXMgd2UgdXNlIHRoZSBsb3dlcmNhc2UgdGFnIG5hbWVzIGFzIHBhcnRcbiAqIG9mIHRoZSBydW50aW1lIGJ1bmRsZSB0byBkZXRlY3QgU1ZHIGNvbXBvbmVudHNcbiAqL1xudmFyIGxvd2VyY2FzZVNWR0VsZW1lbnRzID0gW1xuICAgIFwiYW5pbWF0ZVwiLFxuICAgIFwiY2lyY2xlXCIsXG4gICAgXCJkZWZzXCIsXG4gICAgXCJkZXNjXCIsXG4gICAgXCJlbGxpcHNlXCIsXG4gICAgXCJnXCIsXG4gICAgXCJpbWFnZVwiLFxuICAgIFwibGluZVwiLFxuICAgIFwiZmlsdGVyXCIsXG4gICAgXCJtYXJrZXJcIixcbiAgICBcIm1hc2tcIixcbiAgICBcIm1ldGFkYXRhXCIsXG4gICAgXCJwYXRoXCIsXG4gICAgXCJwYXR0ZXJuXCIsXG4gICAgXCJwb2x5Z29uXCIsXG4gICAgXCJwb2x5bGluZVwiLFxuICAgIFwicmVjdFwiLFxuICAgIFwic3RvcFwiLFxuICAgIFwic3ZnXCIsXG4gICAgXCJzd2l0Y2hcIixcbiAgICBcInN5bWJvbFwiLFxuICAgIFwidGV4dFwiLFxuICAgIFwidHNwYW5cIixcbiAgICBcInVzZVwiLFxuICAgIFwidmlld1wiLFxuXTtcblxuZXhwb3J0IHsgbG93ZXJjYXNlU1ZHRWxlbWVudHMgfTtcbiIsImltcG9ydCB7IGxvd2VyY2FzZVNWR0VsZW1lbnRzIH0gZnJvbSAnLi4vLi4vc3ZnL2xvd2VyY2FzZS1lbGVtZW50cy5tanMnO1xuXG5mdW5jdGlvbiBpc1NWR0NvbXBvbmVudChDb21wb25lbnQpIHtcbiAgICBpZiAoXG4gICAgLyoqXG4gICAgICogSWYgaXQncyBub3QgYSBzdHJpbmcsIGl0J3MgYSBjdXN0b20gUmVhY3QgY29tcG9uZW50LiBDdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0XG4gICAgICogSFRNTCBjdXN0b20gUmVhY3QgY29tcG9uZW50cy5cbiAgICAgKi9cbiAgICB0eXBlb2YgQ29tcG9uZW50ICE9PSBcInN0cmluZ1wiIHx8XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBpdCBjb250YWlucyBhIGRhc2gsIHRoZSBlbGVtZW50IGlzIGEgY3VzdG9tIEhUTUwgd2ViY29tcG9uZW50LlxuICAgICAgICAgKi9cbiAgICAgICAgQ29tcG9uZW50LmluY2x1ZGVzKFwiLVwiKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKFxuICAgIC8qKlxuICAgICAqIElmIGl0J3MgaW4gb3VyIGxpc3Qgb2YgbG93ZXJjYXNlIFNWRyB0YWdzLCBpdCdzIGFuIFNWRyBjb21wb25lbnRcbiAgICAgKi9cbiAgICBsb3dlcmNhc2VTVkdFbGVtZW50cy5pbmRleE9mKENvbXBvbmVudCkgPiAtMSB8fFxuICAgICAgICAvKipcbiAgICAgICAgICogSWYgaXQgY29udGFpbnMgYSBjYXBpdGFsIGxldHRlciwgaXQncyBhbiBTVkcgY29tcG9uZW50XG4gICAgICAgICAqL1xuICAgICAgICAvW0EtWl0vLnRlc3QoQ29tcG9uZW50KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgeyBpc1NWR0NvbXBvbmVudCB9O1xuIiwidmFyIHNjYWxlQ29ycmVjdG9ycyA9IHt9O1xuZnVuY3Rpb24gYWRkU2NhbGVDb3JyZWN0b3IoY29ycmVjdG9ycykge1xuICAgIE9iamVjdC5hc3NpZ24oc2NhbGVDb3JyZWN0b3JzLCBjb3JyZWN0b3JzKTtcbn1cblxuZXhwb3J0IHsgYWRkU2NhbGVDb3JyZWN0b3IsIHNjYWxlQ29ycmVjdG9ycyB9O1xuIiwiLyoqXG4gKiBBIGxpc3Qgb2YgYWxsIHRyYW5zZm9ybWFibGUgYXhlcy4gV2UnbGwgdXNlIHRoaXMgbGlzdCB0byBnZW5lcmF0ZWQgYSB2ZXJzaW9uXG4gKiBvZiBlYWNoIGF4ZXMgZm9yIGVhY2ggdHJhbnNmb3JtLlxuICovXG52YXIgdHJhbnNmb3JtQXhlcyA9IFtcIlwiLCBcIlhcIiwgXCJZXCIsIFwiWlwiXTtcbi8qKlxuICogQW4gb3JkZXJlZCBhcnJheSBvZiBlYWNoIHRyYW5zZm9ybWFibGUgdmFsdWUuIEJ5IGRlZmF1bHQsIHRyYW5zZm9ybSB2YWx1ZXNcbiAqIHdpbGwgYmUgc29ydGVkIHRvIHRoaXMgb3JkZXIuXG4gKi9cbnZhciBvcmRlciA9IFtcInRyYW5zbGF0ZVwiLCBcInNjYWxlXCIsIFwicm90YXRlXCIsIFwic2tld1wiXTtcbi8qKlxuICogR2VuZXJhdGUgYSBsaXN0IG9mIGV2ZXJ5IHBvc3NpYmxlIHRyYW5zZm9ybSBrZXkuXG4gKi9cbnZhciB0cmFuc2Zvcm1Qcm9wcyA9IFtcInRyYW5zZm9ybVBlcnNwZWN0aXZlXCIsIFwieFwiLCBcInlcIiwgXCJ6XCJdO1xub3JkZXIuZm9yRWFjaChmdW5jdGlvbiAob3BlcmF0aW9uS2V5KSB7XG4gICAgcmV0dXJuIHRyYW5zZm9ybUF4ZXMuZm9yRWFjaChmdW5jdGlvbiAoYXhlc0tleSkge1xuICAgICAgICByZXR1cm4gdHJhbnNmb3JtUHJvcHMucHVzaChvcGVyYXRpb25LZXkgKyBheGVzS2V5KTtcbiAgICB9KTtcbn0pO1xuLyoqXG4gKiBBIGZ1bmN0aW9uIHRvIHVzZSB3aXRoIEFycmF5LnNvcnQgdG8gc29ydCB0cmFuc2Zvcm0ga2V5cyBieSB0aGVpciBkZWZhdWx0IG9yZGVyLlxuICovXG5mdW5jdGlvbiBzb3J0VHJhbnNmb3JtUHJvcHMoYSwgYikge1xuICAgIHJldHVybiB0cmFuc2Zvcm1Qcm9wcy5pbmRleE9mKGEpIC0gdHJhbnNmb3JtUHJvcHMuaW5kZXhPZihiKTtcbn1cbi8qKlxuICogQSBxdWljayBsb29rdXAgZm9yIHRyYW5zZm9ybSBwcm9wcy5cbiAqL1xudmFyIHRyYW5zZm9ybVByb3BTZXQgPSBuZXcgU2V0KHRyYW5zZm9ybVByb3BzKTtcbmZ1bmN0aW9uIGlzVHJhbnNmb3JtUHJvcChrZXkpIHtcbiAgICByZXR1cm4gdHJhbnNmb3JtUHJvcFNldC5oYXMoa2V5KTtcbn1cbi8qKlxuICogQSBxdWljayBsb29rdXAgZm9yIHRyYW5zZm9ybSBvcmlnaW4gcHJvcHNcbiAqL1xudmFyIHRyYW5zZm9ybU9yaWdpblByb3BzID0gbmV3IFNldChbXCJvcmlnaW5YXCIsIFwib3JpZ2luWVwiLCBcIm9yaWdpblpcIl0pO1xuZnVuY3Rpb24gaXNUcmFuc2Zvcm1PcmlnaW5Qcm9wKGtleSkge1xuICAgIHJldHVybiB0cmFuc2Zvcm1PcmlnaW5Qcm9wcy5oYXMoa2V5KTtcbn1cblxuZXhwb3J0IHsgaXNUcmFuc2Zvcm1PcmlnaW5Qcm9wLCBpc1RyYW5zZm9ybVByb3AsIHNvcnRUcmFuc2Zvcm1Qcm9wcywgdHJhbnNmb3JtQXhlcywgdHJhbnNmb3JtUHJvcHMgfTtcbiIsImltcG9ydCB7IHNjYWxlQ29ycmVjdG9ycyB9IGZyb20gJy4uLy4uL3Byb2plY3Rpb24vc3R5bGVzL3NjYWxlLWNvcnJlY3Rpb24ubWpzJztcbmltcG9ydCB7IGlzVHJhbnNmb3JtUHJvcCwgaXNUcmFuc2Zvcm1PcmlnaW5Qcm9wIH0gZnJvbSAnLi4vLi4vcmVuZGVyL2h0bWwvdXRpbHMvdHJhbnNmb3JtLm1qcyc7XG5cbmZ1bmN0aW9uIGlzRm9yY2VkTW90aW9uVmFsdWUoa2V5LCBfYSkge1xuICAgIHZhciBsYXlvdXQgPSBfYS5sYXlvdXQsIGxheW91dElkID0gX2EubGF5b3V0SWQ7XG4gICAgcmV0dXJuIChpc1RyYW5zZm9ybVByb3Aoa2V5KSB8fFxuICAgICAgICBpc1RyYW5zZm9ybU9yaWdpblByb3Aoa2V5KSB8fFxuICAgICAgICAoKGxheW91dCB8fCBsYXlvdXRJZCAhPT0gdW5kZWZpbmVkKSAmJlxuICAgICAgICAgICAgKCEhc2NhbGVDb3JyZWN0b3JzW2tleV0gfHwga2V5ID09PSBcIm9wYWNpdHlcIikpKTtcbn1cblxuZXhwb3J0IHsgaXNGb3JjZWRNb3Rpb25WYWx1ZSB9O1xuIiwidmFyIGlzTW90aW9uVmFsdWUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUuZ2V0VmVsb2NpdHkpO1xufTtcblxuZXhwb3J0IHsgaXNNb3Rpb25WYWx1ZSB9O1xuIiwiaW1wb3J0IHsgc29ydFRyYW5zZm9ybVByb3BzIH0gZnJvbSAnLi90cmFuc2Zvcm0ubWpzJztcblxudmFyIHRyYW5zbGF0ZUFsaWFzID0ge1xuICAgIHg6IFwidHJhbnNsYXRlWFwiLFxuICAgIHk6IFwidHJhbnNsYXRlWVwiLFxuICAgIHo6IFwidHJhbnNsYXRlWlwiLFxuICAgIHRyYW5zZm9ybVBlcnNwZWN0aXZlOiBcInBlcnNwZWN0aXZlXCIsXG59O1xuLyoqXG4gKiBCdWlsZCBhIENTUyB0cmFuc2Zvcm0gc3R5bGUgZnJvbSBpbmRpdmlkdWFsIHgveS9zY2FsZSBldGMgcHJvcGVydGllcy5cbiAqXG4gKiBUaGlzIG91dHB1dHMgd2l0aCBhIGRlZmF1bHQgb3JkZXIgb2YgdHJhbnNmb3Jtcy9zY2FsZXMvcm90YXRpb25zLCB0aGlzIGNhbiBiZSBjdXN0b21pc2VkIGJ5XG4gKiBwcm92aWRpbmcgYSB0cmFuc2Zvcm1UZW1wbGF0ZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYnVpbGRUcmFuc2Zvcm0oX2EsIF9iLCB0cmFuc2Zvcm1Jc0RlZmF1bHQsIHRyYW5zZm9ybVRlbXBsYXRlKSB7XG4gICAgdmFyIHRyYW5zZm9ybSA9IF9hLnRyYW5zZm9ybSwgdHJhbnNmb3JtS2V5cyA9IF9hLnRyYW5zZm9ybUtleXM7XG4gICAgdmFyIF9jID0gX2IuZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb24sIGVuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uID0gX2MgPT09IHZvaWQgMCA/IHRydWUgOiBfYywgX2QgPSBfYi5hbGxvd1RyYW5zZm9ybU5vbmUsIGFsbG93VHJhbnNmb3JtTm9uZSA9IF9kID09PSB2b2lkIDAgPyB0cnVlIDogX2Q7XG4gICAgLy8gVGhlIHRyYW5zZm9ybSBzdHJpbmcgd2UncmUgZ29pbmcgdG8gYnVpbGQgaW50by5cbiAgICB2YXIgdHJhbnNmb3JtU3RyaW5nID0gXCJcIjtcbiAgICAvLyBUcmFuc2Zvcm0ga2V5cyBpbnRvIHRoZWlyIGRlZmF1bHQgb3JkZXIgLSB0aGlzIHdpbGwgZGV0ZXJtaW5lIHRoZSBvdXRwdXQgb3JkZXIuXG4gICAgdHJhbnNmb3JtS2V5cy5zb3J0KHNvcnRUcmFuc2Zvcm1Qcm9wcyk7XG4gICAgLy8gVHJhY2sgd2hldGhlciB0aGUgZGVmaW5lZCB0cmFuc2Zvcm0gaGFzIGEgZGVmaW5lZCB6IHNvIHdlIGRvbid0IGFkZCBhXG4gICAgLy8gc2Vjb25kIHRvIGVuYWJsZSBoYXJkd2FyZSBhY2NlbGVyYXRpb25cbiAgICB2YXIgdHJhbnNmb3JtSGFzWiA9IGZhbHNlO1xuICAgIC8vIExvb3Agb3ZlciBlYWNoIHRyYW5zZm9ybSBhbmQgYnVpbGQgdGhlbSBpbnRvIHRyYW5zZm9ybVN0cmluZ1xuICAgIHZhciBudW1UcmFuc2Zvcm1LZXlzID0gdHJhbnNmb3JtS2V5cy5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1UcmFuc2Zvcm1LZXlzOyBpKyspIHtcbiAgICAgICAgdmFyIGtleSA9IHRyYW5zZm9ybUtleXNbaV07XG4gICAgICAgIHRyYW5zZm9ybVN0cmluZyArPSBcIlwiLmNvbmNhdCh0cmFuc2xhdGVBbGlhc1trZXldIHx8IGtleSwgXCIoXCIpLmNvbmNhdCh0cmFuc2Zvcm1ba2V5XSwgXCIpIFwiKTtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJ6XCIpXG4gICAgICAgICAgICB0cmFuc2Zvcm1IYXNaID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCF0cmFuc2Zvcm1IYXNaICYmIGVuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uKSB7XG4gICAgICAgIHRyYW5zZm9ybVN0cmluZyArPSBcInRyYW5zbGF0ZVooMClcIjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRyYW5zZm9ybVN0cmluZyA9IHRyYW5zZm9ybVN0cmluZy50cmltKCk7XG4gICAgfVxuICAgIC8vIElmIHdlIGhhdmUgYSBjdXN0b20gYHRyYW5zZm9ybWAgdGVtcGxhdGUsIHBhc3Mgb3VyIHRyYW5zZm9ybSB2YWx1ZXMgYW5kXG4gICAgLy8gZ2VuZXJhdGVkIHRyYW5zZm9ybVN0cmluZyB0byB0aGF0IGJlZm9yZSByZXR1cm5pbmdcbiAgICBpZiAodHJhbnNmb3JtVGVtcGxhdGUpIHtcbiAgICAgICAgdHJhbnNmb3JtU3RyaW5nID0gdHJhbnNmb3JtVGVtcGxhdGUodHJhbnNmb3JtLCB0cmFuc2Zvcm1Jc0RlZmF1bHQgPyBcIlwiIDogdHJhbnNmb3JtU3RyaW5nKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYWxsb3dUcmFuc2Zvcm1Ob25lICYmIHRyYW5zZm9ybUlzRGVmYXVsdCkge1xuICAgICAgICB0cmFuc2Zvcm1TdHJpbmcgPSBcIm5vbmVcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRyYW5zZm9ybVN0cmluZztcbn1cbi8qKlxuICogQnVpbGQgYSB0cmFuc2Zvcm1PcmlnaW4gc3R5bGUuIFVzZXMgdGhlIHNhbWUgZGVmYXVsdHMgYXMgdGhlIGJyb3dzZXIgZm9yXG4gKiB1bmRlZmluZWQgb3JpZ2lucy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRUcmFuc2Zvcm1PcmlnaW4oX2EpIHtcbiAgICB2YXIgX2IgPSBfYS5vcmlnaW5YLCBvcmlnaW5YID0gX2IgPT09IHZvaWQgMCA/IFwiNTAlXCIgOiBfYiwgX2MgPSBfYS5vcmlnaW5ZLCBvcmlnaW5ZID0gX2MgPT09IHZvaWQgMCA/IFwiNTAlXCIgOiBfYywgX2QgPSBfYS5vcmlnaW5aLCBvcmlnaW5aID0gX2QgPT09IHZvaWQgMCA/IDAgOiBfZDtcbiAgICByZXR1cm4gXCJcIi5jb25jYXQob3JpZ2luWCwgXCIgXCIpLmNvbmNhdChvcmlnaW5ZLCBcIiBcIikuY29uY2F0KG9yaWdpblopO1xufVxuXG5leHBvcnQgeyBidWlsZFRyYW5zZm9ybSwgYnVpbGRUcmFuc2Zvcm1PcmlnaW4gfTtcbiIsIi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBwcm92aWRlZCBrZXkgaXMgYSBDU1MgdmFyaWFibGVcbiAqL1xuZnVuY3Rpb24gaXNDU1NWYXJpYWJsZShrZXkpIHtcbiAgICByZXR1cm4ga2V5LnN0YXJ0c1dpdGgoXCItLVwiKTtcbn1cblxuZXhwb3J0IHsgaXNDU1NWYXJpYWJsZSB9O1xuIiwiLyoqXG4gKiBQcm92aWRlZCBhIHZhbHVlIGFuZCBhIFZhbHVlVHlwZSwgcmV0dXJucyB0aGUgdmFsdWUgYXMgdGhhdCB2YWx1ZSB0eXBlLlxuICovXG52YXIgZ2V0VmFsdWVBc1R5cGUgPSBmdW5jdGlvbiAodmFsdWUsIHR5cGUpIHtcbiAgICByZXR1cm4gdHlwZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCJcbiAgICAgICAgPyB0eXBlLnRyYW5zZm9ybSh2YWx1ZSlcbiAgICAgICAgOiB2YWx1ZTtcbn07XG5cbmV4cG9ydCB7IGdldFZhbHVlQXNUeXBlIH07XG4iLCJjb25zdCBjbGFtcCA9IChtaW4sIG1heCkgPT4gKHYpID0+IE1hdGgubWF4KE1hdGgubWluKHYsIG1heCksIG1pbik7XG5jb25zdCBzYW5pdGl6ZSA9ICh2KSA9PiAodiAlIDEgPyBOdW1iZXIodi50b0ZpeGVkKDUpKSA6IHYpO1xuY29uc3QgZmxvYXRSZWdleCA9IC8oLSk/KFtcXGRdKlxcLj9bXFxkXSkrL2c7XG5jb25zdCBjb2xvclJlZ2V4ID0gLygjWzAtOWEtZl17Nn18I1swLTlhLWZdezN9fCMoPzpbMC05YS1mXXsyfSl7Miw0fXwocmdifGhzbClhP1xcKCgtP1tcXGRcXC5dKyU/WyxcXHNdKyl7MiwzfVxccypcXC8qXFxzKltcXGRcXC5dKyU/XFwpKS9naTtcbmNvbnN0IHNpbmdsZUNvbG9yUmVnZXggPSAvXigjWzAtOWEtZl17M318Iyg/OlswLTlhLWZdezJ9KXsyLDR9fChyZ2J8aHNsKWE/XFwoKC0/W1xcZFxcLl0rJT9bLFxcc10rKXsyLDN9XFxzKlxcLypcXHMqW1xcZFxcLl0rJT9cXCkpJC9pO1xuZnVuY3Rpb24gaXNTdHJpbmcodikge1xuICAgIHJldHVybiB0eXBlb2YgdiA9PT0gJ3N0cmluZyc7XG59XG5cbmV4cG9ydCB7IGNsYW1wLCBjb2xvclJlZ2V4LCBmbG9hdFJlZ2V4LCBpc1N0cmluZywgc2FuaXRpemUsIHNpbmdsZUNvbG9yUmVnZXggfTtcbiIsImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi4vdXRpbHMubWpzJztcblxuY29uc3QgY3JlYXRlVW5pdFR5cGUgPSAodW5pdCkgPT4gKHtcbiAgICB0ZXN0OiAodikgPT4gaXNTdHJpbmcodikgJiYgdi5lbmRzV2l0aCh1bml0KSAmJiB2LnNwbGl0KCcgJykubGVuZ3RoID09PSAxLFxuICAgIHBhcnNlOiBwYXJzZUZsb2F0LFxuICAgIHRyYW5zZm9ybTogKHYpID0+IGAke3Z9JHt1bml0fWAsXG59KTtcbmNvbnN0IGRlZ3JlZXMgPSBjcmVhdGVVbml0VHlwZSgnZGVnJyk7XG5jb25zdCBwZXJjZW50ID0gY3JlYXRlVW5pdFR5cGUoJyUnKTtcbmNvbnN0IHB4ID0gY3JlYXRlVW5pdFR5cGUoJ3B4Jyk7XG5jb25zdCB2aCA9IGNyZWF0ZVVuaXRUeXBlKCd2aCcpO1xuY29uc3QgdncgPSBjcmVhdGVVbml0VHlwZSgndncnKTtcbmNvbnN0IHByb2dyZXNzUGVyY2VudGFnZSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcGVyY2VudCksIHsgcGFyc2U6ICh2KSA9PiBwZXJjZW50LnBhcnNlKHYpIC8gMTAwLCB0cmFuc2Zvcm06ICh2KSA9PiBwZXJjZW50LnRyYW5zZm9ybSh2ICogMTAwKSB9KTtcblxuZXhwb3J0IHsgZGVncmVlcywgcGVyY2VudCwgcHJvZ3Jlc3NQZXJjZW50YWdlLCBweCwgdmgsIHZ3IH07XG4iLCJpbXBvcnQgeyBjbGFtcCB9IGZyb20gJy4uL3V0aWxzLm1qcyc7XG5cbmNvbnN0IG51bWJlciA9IHtcbiAgICB0ZXN0OiAodikgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInLFxuICAgIHBhcnNlOiBwYXJzZUZsb2F0LFxuICAgIHRyYW5zZm9ybTogKHYpID0+IHYsXG59O1xuY29uc3QgYWxwaGEgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG51bWJlciksIHsgdHJhbnNmb3JtOiBjbGFtcCgwLCAxKSB9KTtcbmNvbnN0IHNjYWxlID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBudW1iZXIpLCB7IGRlZmF1bHQ6IDEgfSk7XG5cbmV4cG9ydCB7IGFscGhhLCBudW1iZXIsIHNjYWxlIH07XG4iLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IG51bWJlciB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcblxudmFyIGludCA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBudW1iZXIpLCB7IHRyYW5zZm9ybTogTWF0aC5yb3VuZCB9KTtcblxuZXhwb3J0IHsgaW50IH07XG4iLCJpbXBvcnQgeyBweCwgZGVncmVlcywgc2NhbGUsIGFscGhhLCBwcm9ncmVzc1BlcmNlbnRhZ2UgfSBmcm9tICdzdHlsZS12YWx1ZS10eXBlcyc7XG5pbXBvcnQgeyBpbnQgfSBmcm9tICcuL3R5cGUtaW50Lm1qcyc7XG5cbnZhciBudW1iZXJWYWx1ZVR5cGVzID0ge1xuICAgIC8vIEJvcmRlciBwcm9wc1xuICAgIGJvcmRlcldpZHRoOiBweCxcbiAgICBib3JkZXJUb3BXaWR0aDogcHgsXG4gICAgYm9yZGVyUmlnaHRXaWR0aDogcHgsXG4gICAgYm9yZGVyQm90dG9tV2lkdGg6IHB4LFxuICAgIGJvcmRlckxlZnRXaWR0aDogcHgsXG4gICAgYm9yZGVyUmFkaXVzOiBweCxcbiAgICByYWRpdXM6IHB4LFxuICAgIGJvcmRlclRvcExlZnRSYWRpdXM6IHB4LFxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiBweCxcbiAgICBib3JkZXJCb3R0b21SaWdodFJhZGl1czogcHgsXG4gICAgYm9yZGVyQm90dG9tTGVmdFJhZGl1czogcHgsXG4gICAgLy8gUG9zaXRpb25pbmcgcHJvcHNcbiAgICB3aWR0aDogcHgsXG4gICAgbWF4V2lkdGg6IHB4LFxuICAgIGhlaWdodDogcHgsXG4gICAgbWF4SGVpZ2h0OiBweCxcbiAgICBzaXplOiBweCxcbiAgICB0b3A6IHB4LFxuICAgIHJpZ2h0OiBweCxcbiAgICBib3R0b206IHB4LFxuICAgIGxlZnQ6IHB4LFxuICAgIC8vIFNwYWNpbmcgcHJvcHNcbiAgICBwYWRkaW5nOiBweCxcbiAgICBwYWRkaW5nVG9wOiBweCxcbiAgICBwYWRkaW5nUmlnaHQ6IHB4LFxuICAgIHBhZGRpbmdCb3R0b206IHB4LFxuICAgIHBhZGRpbmdMZWZ0OiBweCxcbiAgICBtYXJnaW46IHB4LFxuICAgIG1hcmdpblRvcDogcHgsXG4gICAgbWFyZ2luUmlnaHQ6IHB4LFxuICAgIG1hcmdpbkJvdHRvbTogcHgsXG4gICAgbWFyZ2luTGVmdDogcHgsXG4gICAgLy8gVHJhbnNmb3JtIHByb3BzXG4gICAgcm90YXRlOiBkZWdyZWVzLFxuICAgIHJvdGF0ZVg6IGRlZ3JlZXMsXG4gICAgcm90YXRlWTogZGVncmVlcyxcbiAgICByb3RhdGVaOiBkZWdyZWVzLFxuICAgIHNjYWxlOiBzY2FsZSxcbiAgICBzY2FsZVg6IHNjYWxlLFxuICAgIHNjYWxlWTogc2NhbGUsXG4gICAgc2NhbGVaOiBzY2FsZSxcbiAgICBza2V3OiBkZWdyZWVzLFxuICAgIHNrZXdYOiBkZWdyZWVzLFxuICAgIHNrZXdZOiBkZWdyZWVzLFxuICAgIGRpc3RhbmNlOiBweCxcbiAgICB0cmFuc2xhdGVYOiBweCxcbiAgICB0cmFuc2xhdGVZOiBweCxcbiAgICB0cmFuc2xhdGVaOiBweCxcbiAgICB4OiBweCxcbiAgICB5OiBweCxcbiAgICB6OiBweCxcbiAgICBwZXJzcGVjdGl2ZTogcHgsXG4gICAgdHJhbnNmb3JtUGVyc3BlY3RpdmU6IHB4LFxuICAgIG9wYWNpdHk6IGFscGhhLFxuICAgIG9yaWdpblg6IHByb2dyZXNzUGVyY2VudGFnZSxcbiAgICBvcmlnaW5ZOiBwcm9ncmVzc1BlcmNlbnRhZ2UsXG4gICAgb3JpZ2luWjogcHgsXG4gICAgLy8gTWlzY1xuICAgIHpJbmRleDogaW50LFxuICAgIC8vIFNWR1xuICAgIGZpbGxPcGFjaXR5OiBhbHBoYSxcbiAgICBzdHJva2VPcGFjaXR5OiBhbHBoYSxcbiAgICBudW1PY3RhdmVzOiBpbnQsXG59O1xuXG5leHBvcnQgeyBudW1iZXJWYWx1ZVR5cGVzIH07XG4iLCJpbXBvcnQgeyBidWlsZFRyYW5zZm9ybSwgYnVpbGRUcmFuc2Zvcm1PcmlnaW4gfSBmcm9tICcuL2J1aWxkLXRyYW5zZm9ybS5tanMnO1xuaW1wb3J0IHsgaXNDU1NWYXJpYWJsZSB9IGZyb20gJy4uLy4uL2RvbS91dGlscy9pcy1jc3MtdmFyaWFibGUubWpzJztcbmltcG9ydCB7IGlzVHJhbnNmb3JtUHJvcCwgaXNUcmFuc2Zvcm1PcmlnaW5Qcm9wIH0gZnJvbSAnLi90cmFuc2Zvcm0ubWpzJztcbmltcG9ydCB7IGdldFZhbHVlQXNUeXBlIH0gZnJvbSAnLi4vLi4vZG9tL3ZhbHVlLXR5cGVzL2dldC1hcy10eXBlLm1qcyc7XG5pbXBvcnQgeyBudW1iZXJWYWx1ZVR5cGVzIH0gZnJvbSAnLi4vLi4vZG9tL3ZhbHVlLXR5cGVzL251bWJlci5tanMnO1xuXG5mdW5jdGlvbiBidWlsZEhUTUxTdHlsZXMoc3RhdGUsIGxhdGVzdFZhbHVlcywgb3B0aW9ucywgdHJhbnNmb3JtVGVtcGxhdGUpIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIHN0eWxlID0gc3RhdGUuc3R5bGUsIHZhcnMgPSBzdGF0ZS52YXJzLCB0cmFuc2Zvcm0gPSBzdGF0ZS50cmFuc2Zvcm0sIHRyYW5zZm9ybUtleXMgPSBzdGF0ZS50cmFuc2Zvcm1LZXlzLCB0cmFuc2Zvcm1PcmlnaW4gPSBzdGF0ZS50cmFuc2Zvcm1PcmlnaW47XG4gICAgLy8gRW1wdHkgdGhlIHRyYW5zZm9ybUtleXMgYXJyYXkuIEFzIHdlJ3JlIHRocm93aW5nIG91dCByZWZzIHRvIGl0cyBpdGVtc1xuICAgIC8vIHRoaXMgbWlnaHQgbm90IGJlIGFzIGNoZWFwIGFzIHN1c3BlY3RlZC4gTWF5YmUgdXNpbmcgdGhlIGFycmF5IGFzIGEgYnVmZmVyXG4gICAgLy8gd2l0aCBhIG1hbnVhbCBpbmNyZW1lbnRhdGlvbiB3b3VsZCBiZSBiZXR0ZXIuXG4gICAgdHJhbnNmb3JtS2V5cy5sZW5ndGggPSAwO1xuICAgIC8vIFRyYWNrIHdoZXRoZXIgd2UgZW5jb3VudGVyIGFueSB0cmFuc2Zvcm0gb3IgdHJhbnNmb3JtT3JpZ2luIHZhbHVlcy5cbiAgICB2YXIgaGFzVHJhbnNmb3JtID0gZmFsc2U7XG4gICAgdmFyIGhhc1RyYW5zZm9ybU9yaWdpbiA9IGZhbHNlO1xuICAgIC8vIERvZXMgdGhlIGNhbGN1bGF0ZWQgdHJhbnNmb3JtIGVzc2VudGlhbGx5IGVxdWFsIFwibm9uZVwiP1xuICAgIHZhciB0cmFuc2Zvcm1Jc05vbmUgPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIExvb3Agb3ZlciBhbGwgb3VyIGxhdGVzdCBhbmltYXRlZCB2YWx1ZXMgYW5kIGRlY2lkZSB3aGV0aGVyIHRvIGhhbmRsZSB0aGVtXG4gICAgICogYXMgYSBzdHlsZSBvciBDU1MgdmFyaWFibGUuXG4gICAgICpcbiAgICAgKiBUcmFuc2Zvcm1zIGFuZCB0cmFuc2Zvcm0gb3JpZ2lucyBhcmUga2VwdCBzZXBlcmF0ZWx5IGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuXG4gICAgICovXG4gICAgZm9yICh2YXIga2V5IGluIGxhdGVzdFZhbHVlcykge1xuICAgICAgICB2YXIgdmFsdWUgPSBsYXRlc3RWYWx1ZXNba2V5XTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHRoaXMgaXMgYSBDU1MgdmFyaWFibGUgd2UgZG9uJ3QgZG8gYW55IGZ1cnRoZXIgcHJvY2Vzc2luZy5cbiAgICAgICAgICovXG4gICAgICAgIGlmIChpc0NTU1ZhcmlhYmxlKGtleSkpIHtcbiAgICAgICAgICAgIHZhcnNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ29udmVydCB0aGUgdmFsdWUgdG8gaXRzIGRlZmF1bHQgdmFsdWUgdHlwZSwgaWUgMCAtPiBcIjBweFwiXG4gICAgICAgIHZhciB2YWx1ZVR5cGUgPSBudW1iZXJWYWx1ZVR5cGVzW2tleV07XG4gICAgICAgIHZhciB2YWx1ZUFzVHlwZSA9IGdldFZhbHVlQXNUeXBlKHZhbHVlLCB2YWx1ZVR5cGUpO1xuICAgICAgICBpZiAoaXNUcmFuc2Zvcm1Qcm9wKGtleSkpIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSB0cmFuc2Zvcm0sIGZsYWcgdG8gZW5hYmxlIGZ1cnRoZXIgdHJhbnNmb3JtIHByb2Nlc3NpbmdcbiAgICAgICAgICAgIGhhc1RyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgICAgICB0cmFuc2Zvcm1ba2V5XSA9IHZhbHVlQXNUeXBlO1xuICAgICAgICAgICAgdHJhbnNmb3JtS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAvLyBJZiB3ZSBhbHJlYWR5IGtub3cgd2UgaGF2ZSBhIG5vbi1kZWZhdWx0IHRyYW5zZm9ybSwgZWFybHkgcmV0dXJuXG4gICAgICAgICAgICBpZiAoIXRyYW5zZm9ybUlzTm9uZSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSBjaGVjayB0byBzZWUgaWYgdGhpcyBpcyBhIGRlZmF1bHQgdHJhbnNmb3JtXG4gICAgICAgICAgICBpZiAodmFsdWUgIT09ICgoX2EgPSB2YWx1ZVR5cGUuZGVmYXVsdCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMCkpXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtSXNOb25lID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNUcmFuc2Zvcm1PcmlnaW5Qcm9wKGtleSkpIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbltrZXldID0gdmFsdWVBc1R5cGU7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgdHJhbnNmb3JtIG9yaWdpbiwgZmxhZyBhbmQgZW5hYmxlIGZ1cnRoZXIgdHJhbnNmb3JtLW9yaWdpbiBwcm9jZXNzaW5nXG4gICAgICAgICAgICBoYXNUcmFuc2Zvcm1PcmlnaW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3R5bGVba2V5XSA9IHZhbHVlQXNUeXBlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChoYXNUcmFuc2Zvcm0pIHtcbiAgICAgICAgc3R5bGUudHJhbnNmb3JtID0gYnVpbGRUcmFuc2Zvcm0oc3RhdGUsIG9wdGlvbnMsIHRyYW5zZm9ybUlzTm9uZSwgdHJhbnNmb3JtVGVtcGxhdGUpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0cmFuc2Zvcm1UZW1wbGF0ZSkge1xuICAgICAgICBzdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1UZW1wbGF0ZSh7fSwgXCJcIik7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFsYXRlc3RWYWx1ZXMudHJhbnNmb3JtICYmIHN0eWxlLnRyYW5zZm9ybSkge1xuICAgICAgICBzdHlsZS50cmFuc2Zvcm0gPSBcIm5vbmVcIjtcbiAgICB9XG4gICAgaWYgKGhhc1RyYW5zZm9ybU9yaWdpbikge1xuICAgICAgICBzdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSBidWlsZFRyYW5zZm9ybU9yaWdpbih0cmFuc2Zvcm1PcmlnaW4pO1xuICAgIH1cbn1cblxuZXhwb3J0IHsgYnVpbGRIVE1MU3R5bGVzIH07XG4iLCJ2YXIgY3JlYXRlSHRtbFJlbmRlclN0YXRlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gKHtcbiAgICBzdHlsZToge30sXG4gICAgdHJhbnNmb3JtOiB7fSxcbiAgICB0cmFuc2Zvcm1LZXlzOiBbXSxcbiAgICB0cmFuc2Zvcm1PcmlnaW46IHt9LFxuICAgIHZhcnM6IHt9LFxufSk7IH07XG5cbmV4cG9ydCB7IGNyZWF0ZUh0bWxSZW5kZXJTdGF0ZSB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNGb3JjZWRNb3Rpb25WYWx1ZSB9IGZyb20gJy4uLy4uL21vdGlvbi91dGlscy9pcy1mb3JjZWQtbW90aW9uLXZhbHVlLm1qcyc7XG5pbXBvcnQgeyBpc01vdGlvblZhbHVlIH0gZnJvbSAnLi4vLi4vdmFsdWUvdXRpbHMvaXMtbW90aW9uLXZhbHVlLm1qcyc7XG5pbXBvcnQgeyBidWlsZEhUTUxTdHlsZXMgfSBmcm9tICcuL3V0aWxzL2J1aWxkLXN0eWxlcy5tanMnO1xuaW1wb3J0IHsgY3JlYXRlSHRtbFJlbmRlclN0YXRlIH0gZnJvbSAnLi91dGlscy9jcmVhdGUtcmVuZGVyLXN0YXRlLm1qcyc7XG5cbmZ1bmN0aW9uIGNvcHlSYXdWYWx1ZXNPbmx5KHRhcmdldCwgc291cmNlLCBwcm9wcykge1xuICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKCFpc01vdGlvblZhbHVlKHNvdXJjZVtrZXldKSAmJiAhaXNGb3JjZWRNb3Rpb25WYWx1ZShrZXksIHByb3BzKSkge1xuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHVzZUluaXRpYWxNb3Rpb25WYWx1ZXMoX2EsIHZpc3VhbFN0YXRlLCBpc1N0YXRpYykge1xuICAgIHZhciB0cmFuc2Zvcm1UZW1wbGF0ZSA9IF9hLnRyYW5zZm9ybVRlbXBsYXRlO1xuICAgIHJldHVybiB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gY3JlYXRlSHRtbFJlbmRlclN0YXRlKCk7XG4gICAgICAgIGJ1aWxkSFRNTFN0eWxlcyhzdGF0ZSwgdmlzdWFsU3RhdGUsIHsgZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb246ICFpc1N0YXRpYyB9LCB0cmFuc2Zvcm1UZW1wbGF0ZSk7XG4gICAgICAgIHZhciB2YXJzID0gc3RhdGUudmFycywgc3R5bGUgPSBzdGF0ZS5zdHlsZTtcbiAgICAgICAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCB2YXJzKSwgc3R5bGUpO1xuICAgIH0sIFt2aXN1YWxTdGF0ZV0pO1xufVxuZnVuY3Rpb24gdXNlU3R5bGUocHJvcHMsIHZpc3VhbFN0YXRlLCBpc1N0YXRpYykge1xuICAgIHZhciBzdHlsZVByb3AgPSBwcm9wcy5zdHlsZSB8fCB7fTtcbiAgICB2YXIgc3R5bGUgPSB7fTtcbiAgICAvKipcbiAgICAgKiBDb3B5IG5vbi1Nb3Rpb24gVmFsdWVzIHN0cmFpZ2h0IGludG8gc3R5bGVcbiAgICAgKi9cbiAgICBjb3B5UmF3VmFsdWVzT25seShzdHlsZSwgc3R5bGVQcm9wLCBwcm9wcyk7XG4gICAgT2JqZWN0LmFzc2lnbihzdHlsZSwgdXNlSW5pdGlhbE1vdGlvblZhbHVlcyhwcm9wcywgdmlzdWFsU3RhdGUsIGlzU3RhdGljKSk7XG4gICAgaWYgKHByb3BzLnRyYW5zZm9ybVZhbHVlcykge1xuICAgICAgICBzdHlsZSA9IHByb3BzLnRyYW5zZm9ybVZhbHVlcyhzdHlsZSk7XG4gICAgfVxuICAgIHJldHVybiBzdHlsZTtcbn1cbmZ1bmN0aW9uIHVzZUhUTUxQcm9wcyhwcm9wcywgdmlzdWFsU3RhdGUsIGlzU3RhdGljKSB7XG4gICAgLy8gVGhlIGBhbnlgIGlzbid0IGlkZWFsIGJ1dCBpdCBpcyB0aGUgdHlwZSBvZiBjcmVhdGVFbGVtZW50IHByb3BzIGFyZ3VtZW50XG4gICAgdmFyIGh0bWxQcm9wcyA9IHt9O1xuICAgIHZhciBzdHlsZSA9IHVzZVN0eWxlKHByb3BzLCB2aXN1YWxTdGF0ZSwgaXNTdGF0aWMpO1xuICAgIGlmIChCb29sZWFuKHByb3BzLmRyYWcpICYmIHByb3BzLmRyYWdMaXN0ZW5lciAhPT0gZmFsc2UpIHtcbiAgICAgICAgLy8gRGlzYWJsZSB0aGUgZ2hvc3QgZWxlbWVudCB3aGVuIGEgdXNlciBkcmFnc1xuICAgICAgICBodG1sUHJvcHMuZHJhZ2dhYmxlID0gZmFsc2U7XG4gICAgICAgIC8vIERpc2FibGUgdGV4dCBzZWxlY3Rpb25cbiAgICAgICAgc3R5bGUudXNlclNlbGVjdCA9XG4gICAgICAgICAgICBzdHlsZS5XZWJraXRVc2VyU2VsZWN0ID1cbiAgICAgICAgICAgICAgICBzdHlsZS5XZWJraXRUb3VjaENhbGxvdXQgPVxuICAgICAgICAgICAgICAgICAgICBcIm5vbmVcIjtcbiAgICAgICAgLy8gRGlzYWJsZSBzY3JvbGxpbmcgb24gdGhlIGRyYWdnYWJsZSBkaXJlY3Rpb25cbiAgICAgICAgc3R5bGUudG91Y2hBY3Rpb24gPVxuICAgICAgICAgICAgcHJvcHMuZHJhZyA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgID8gXCJub25lXCJcbiAgICAgICAgICAgICAgICA6IFwicGFuLVwiLmNvbmNhdChwcm9wcy5kcmFnID09PSBcInhcIiA/IFwieVwiIDogXCJ4XCIpO1xuICAgIH1cbiAgICBodG1sUHJvcHMuc3R5bGUgPSBzdHlsZTtcbiAgICByZXR1cm4gaHRtbFByb3BzO1xufVxuXG5leHBvcnQgeyBjb3B5UmF3VmFsdWVzT25seSwgdXNlSFRNTFByb3BzLCB1c2VTdHlsZSB9O1xuIiwiLyoqXG4gKiBBIGxpc3Qgb2YgYWxsIHZhbGlkIE1vdGlvblByb3BzLlxuICpcbiAqIEBwcml2YXRlUmVtYXJrc1xuICogVGhpcyBkb2Vzbid0IHRocm93IGlmIGEgYE1vdGlvblByb3BgIG5hbWUgaXMgbWlzc2luZyAtIGl0IHNob3VsZC5cbiAqL1xudmFyIHZhbGlkTW90aW9uUHJvcHMgPSBuZXcgU2V0KFtcbiAgICBcImluaXRpYWxcIixcbiAgICBcImFuaW1hdGVcIixcbiAgICBcImV4aXRcIixcbiAgICBcInN0eWxlXCIsXG4gICAgXCJ2YXJpYW50c1wiLFxuICAgIFwidHJhbnNpdGlvblwiLFxuICAgIFwidHJhbnNmb3JtVGVtcGxhdGVcIixcbiAgICBcInRyYW5zZm9ybVZhbHVlc1wiLFxuICAgIFwiY3VzdG9tXCIsXG4gICAgXCJpbmhlcml0XCIsXG4gICAgXCJsYXlvdXRcIixcbiAgICBcImxheW91dElkXCIsXG4gICAgXCJsYXlvdXREZXBlbmRlbmN5XCIsXG4gICAgXCJvbkxheW91dEFuaW1hdGlvblN0YXJ0XCIsXG4gICAgXCJvbkxheW91dEFuaW1hdGlvbkNvbXBsZXRlXCIsXG4gICAgXCJvbkxheW91dE1lYXN1cmVcIixcbiAgICBcIm9uQmVmb3JlTGF5b3V0TWVhc3VyZVwiLFxuICAgIFwib25BbmltYXRpb25TdGFydFwiLFxuICAgIFwib25BbmltYXRpb25Db21wbGV0ZVwiLFxuICAgIFwib25VcGRhdGVcIixcbiAgICBcIm9uRHJhZ1N0YXJ0XCIsXG4gICAgXCJvbkRyYWdcIixcbiAgICBcIm9uRHJhZ0VuZFwiLFxuICAgIFwib25NZWFzdXJlRHJhZ0NvbnN0cmFpbnRzXCIsXG4gICAgXCJvbkRpcmVjdGlvbkxvY2tcIixcbiAgICBcIm9uRHJhZ1RyYW5zaXRpb25FbmRcIixcbiAgICBcImRyYWdcIixcbiAgICBcImRyYWdDb250cm9sc1wiLFxuICAgIFwiZHJhZ0xpc3RlbmVyXCIsXG4gICAgXCJkcmFnQ29uc3RyYWludHNcIixcbiAgICBcImRyYWdEaXJlY3Rpb25Mb2NrXCIsXG4gICAgXCJkcmFnU25hcFRvT3JpZ2luXCIsXG4gICAgXCJfZHJhZ1hcIixcbiAgICBcIl9kcmFnWVwiLFxuICAgIFwiZHJhZ0VsYXN0aWNcIixcbiAgICBcImRyYWdNb21lbnR1bVwiLFxuICAgIFwiZHJhZ1Byb3BhZ2F0aW9uXCIsXG4gICAgXCJkcmFnVHJhbnNpdGlvblwiLFxuICAgIFwid2hpbGVEcmFnXCIsXG4gICAgXCJvblBhblwiLFxuICAgIFwib25QYW5TdGFydFwiLFxuICAgIFwib25QYW5FbmRcIixcbiAgICBcIm9uUGFuU2Vzc2lvblN0YXJ0XCIsXG4gICAgXCJvblRhcFwiLFxuICAgIFwib25UYXBTdGFydFwiLFxuICAgIFwib25UYXBDYW5jZWxcIixcbiAgICBcIm9uSG92ZXJTdGFydFwiLFxuICAgIFwib25Ib3ZlckVuZFwiLFxuICAgIFwid2hpbGVGb2N1c1wiLFxuICAgIFwid2hpbGVUYXBcIixcbiAgICBcIndoaWxlSG92ZXJcIixcbiAgICBcIndoaWxlSW5WaWV3XCIsXG4gICAgXCJvblZpZXdwb3J0RW50ZXJcIixcbiAgICBcIm9uVmlld3BvcnRMZWF2ZVwiLFxuICAgIFwidmlld3BvcnRcIixcbiAgICBcImxheW91dFNjcm9sbFwiLFxuXSk7XG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYSBwcm9wIG5hbWUgaXMgYSB2YWxpZCBgTW90aW9uUHJvcGAga2V5LlxuICpcbiAqIEBwYXJhbSBrZXkgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBjaGVja1xuICogQHJldHVybnMgYHRydWVgIGlzIGtleSBpcyBhIHZhbGlkIGBNb3Rpb25Qcm9wYC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRNb3Rpb25Qcm9wKGtleSkge1xuICAgIHJldHVybiB2YWxpZE1vdGlvblByb3BzLmhhcyhrZXkpO1xufVxuXG5leHBvcnQgeyBpc1ZhbGlkTW90aW9uUHJvcCB9O1xuIiwiaW1wb3J0IHsgaXNWYWxpZE1vdGlvblByb3AgfSBmcm9tICcuLi8uLi8uLi9tb3Rpb24vdXRpbHMvdmFsaWQtcHJvcC5tanMnO1xuXG52YXIgc2hvdWxkRm9yd2FyZCA9IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuICFpc1ZhbGlkTW90aW9uUHJvcChrZXkpOyB9O1xuZnVuY3Rpb24gbG9hZEV4dGVybmFsSXNWYWxpZFByb3AoaXNWYWxpZFByb3ApIHtcbiAgICBpZiAoIWlzVmFsaWRQcm9wKVxuICAgICAgICByZXR1cm47XG4gICAgLy8gRXhwbGljaXRseSBmaWx0ZXIgb3VyIGV2ZW50c1xuICAgIHNob3VsZEZvcndhcmQgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBrZXkuc3RhcnRzV2l0aChcIm9uXCIpID8gIWlzVmFsaWRNb3Rpb25Qcm9wKGtleSkgOiBpc1ZhbGlkUHJvcChrZXkpO1xuICAgIH07XG59XG4vKipcbiAqIEVtb3Rpb24gYW5kIFN0eWxlZCBDb21wb25lbnRzIGJvdGggYWxsb3cgdXNlcnMgdG8gcGFzcyB0aHJvdWdoIGFyYml0cmFyeSBwcm9wcyB0byB0aGVpciBjb21wb25lbnRzXG4gKiB0byBkeW5hbWljYWxseSBnZW5lcmF0ZSBDU1MuIFRoZXkgYm90aCB1c2UgdGhlIGBAZW1vdGlvbi9pcy1wcm9wLXZhbGlkYCBwYWNrYWdlIHRvIGRldGVybWluZSB3aGljaFxuICogb2YgdGhlc2Ugc2hvdWxkIGJlIHBhc3NlZCB0byB0aGUgdW5kZXJseWluZyBET00gbm9kZS5cbiAqXG4gKiBIb3dldmVyLCB3aGVuIHN0eWxpbmcgYSBNb3Rpb24gY29tcG9uZW50IGBzdHlsZWQobW90aW9uLmRpdilgLCBib3RoIHBhY2thZ2VzIHBhc3MgdGhyb3VnaCAqYWxsKiBwcm9wc1xuICogYXMgaXQncyBzZWVuIGFzIGFuIGFyYml0cmFyeSBjb21wb25lbnQgcmF0aGVyIHRoYW4gYSBET00gbm9kZS4gTW90aW9uIG9ubHkgYWxsb3dzIGFyYml0cmFyeSBwcm9wc1xuICogcGFzc2VkIHRocm91Z2ggdGhlIGBjdXN0b21gIHByb3Agc28gaXQgZG9lc24ndCAqbmVlZCogdGhlIHBheWxvYWQgb3IgY29tcHV0YXRpb25hbCBvdmVyaGVhZCBvZlxuICogYEBlbW90aW9uL2lzLXByb3AtdmFsaWRgLCBob3dldmVyIHRvIGZpeCB0aGlzIHByb2JsZW0gd2UgbmVlZCB0byB1c2UgaXQuXG4gKlxuICogQnkgbWFraW5nIGl0IGFuIG9wdGlvbmFsRGVwZW5kZW5jeSB3ZSBjYW4gb2ZmZXIgdGhpcyBmdW5jdGlvbmFsaXR5IG9ubHkgaW4gdGhlIHNpdHVhdGlvbnMgd2hlcmUgaXQnc1xuICogYWN0dWFsbHkgcmVxdWlyZWQuXG4gKi9cbnRyeSB7XG4gICAgLyoqXG4gICAgICogV2UgYXR0ZW1wdCB0byBpbXBvcnQgdGhpcyBwYWNrYWdlIGJ1dCByZXF1aXJlIHdvbid0IGJlIGRlZmluZWQgaW4gZXNtIGVudmlyb25tZW50cywgaW4gdGhhdCBjYXNlXG4gICAgICogaXNQcm9wVmFsaWQgd2lsbCBoYXZlIHRvIGJlIHByb3ZpZGVkIHZpYSBgTW90aW9uQ29udGV4dGAuIEluIGEgNi4wLjAgdGhpcyBzaG91bGQgcHJvYmFibHkgYmUgcmVtb3ZlZFxuICAgICAqIGluIGZhdm91ciBvZiBleHBsaWNpdCBpbmplY3Rpb24uXG4gICAgICovXG4gICAgbG9hZEV4dGVybmFsSXNWYWxpZFByb3AocmVxdWlyZShcIkBlbW90aW9uL2lzLXByb3AtdmFsaWRcIikuZGVmYXVsdCk7XG59XG5jYXRjaCAoX2EpIHtcbiAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGFjdHVhbGx5IGRvIGFueXRoaW5nIGhlcmUgLSB0aGUgZmFsbGJhY2sgaXMgdGhlIGV4aXN0aW5nIGBpc1Byb3BWYWxpZGAuXG59XG5mdW5jdGlvbiBmaWx0ZXJQcm9wcyhwcm9wcywgaXNEb20sIGZvcndhcmRNb3Rpb25Qcm9wcykge1xuICAgIHZhciBmaWx0ZXJlZFByb3BzID0ge307XG4gICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgICAgIGlmIChzaG91bGRGb3J3YXJkKGtleSkgfHxcbiAgICAgICAgICAgIChmb3J3YXJkTW90aW9uUHJvcHMgPT09IHRydWUgJiYgaXNWYWxpZE1vdGlvblByb3Aoa2V5KSkgfHxcbiAgICAgICAgICAgICghaXNEb20gJiYgIWlzVmFsaWRNb3Rpb25Qcm9wKGtleSkpIHx8XG4gICAgICAgICAgICAvLyBJZiB0cnlpbmcgdG8gdXNlIG5hdGl2ZSBIVE1MIGRyYWcgZXZlbnRzLCBmb3J3YXJkIGRyYWcgbGlzdGVuZXJzXG4gICAgICAgICAgICAocHJvcHNbXCJkcmFnZ2FibGVcIl0gJiYga2V5LnN0YXJ0c1dpdGgoXCJvbkRyYWdcIikpKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZFByb3BzW2tleV0gPSBwcm9wc1trZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJlZFByb3BzO1xufVxuXG5leHBvcnQgeyBmaWx0ZXJQcm9wcywgbG9hZEV4dGVybmFsSXNWYWxpZFByb3AgfTtcbiIsImltcG9ydCB7IHB4IH0gZnJvbSAnc3R5bGUtdmFsdWUtdHlwZXMnO1xuXG5mdW5jdGlvbiBjYWxjT3JpZ2luKG9yaWdpbiwgb2Zmc2V0LCBzaXplKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvcmlnaW4gPT09IFwic3RyaW5nXCJcbiAgICAgICAgPyBvcmlnaW5cbiAgICAgICAgOiBweC50cmFuc2Zvcm0ob2Zmc2V0ICsgc2l6ZSAqIG9yaWdpbik7XG59XG4vKipcbiAqIFRoZSBTVkcgdHJhbnNmb3JtIG9yaWdpbiBkZWZhdWx0cyBhcmUgZGlmZmVyZW50IHRvIENTUyBhbmQgaXMgbGVzcyBpbnR1aXRpdmUsXG4gKiBzbyB3ZSB1c2UgdGhlIG1lYXN1cmVkIGRpbWVuc2lvbnMgb2YgdGhlIFNWRyB0byByZWNvbmNpbGUgdGhlc2UuXG4gKi9cbmZ1bmN0aW9uIGNhbGNTVkdUcmFuc2Zvcm1PcmlnaW4oZGltZW5zaW9ucywgb3JpZ2luWCwgb3JpZ2luWSkge1xuICAgIHZhciBweE9yaWdpblggPSBjYWxjT3JpZ2luKG9yaWdpblgsIGRpbWVuc2lvbnMueCwgZGltZW5zaW9ucy53aWR0aCk7XG4gICAgdmFyIHB4T3JpZ2luWSA9IGNhbGNPcmlnaW4ob3JpZ2luWSwgZGltZW5zaW9ucy55LCBkaW1lbnNpb25zLmhlaWdodCk7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KHB4T3JpZ2luWCwgXCIgXCIpLmNvbmNhdChweE9yaWdpblkpO1xufVxuXG5leHBvcnQgeyBjYWxjU1ZHVHJhbnNmb3JtT3JpZ2luIH07XG4iLCJpbXBvcnQgeyBweCB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcblxudmFyIGRhc2hLZXlzID0ge1xuICAgIG9mZnNldDogXCJzdHJva2UtZGFzaG9mZnNldFwiLFxuICAgIGFycmF5OiBcInN0cm9rZS1kYXNoYXJyYXlcIixcbn07XG52YXIgY2FtZWxLZXlzID0ge1xuICAgIG9mZnNldDogXCJzdHJva2VEYXNob2Zmc2V0XCIsXG4gICAgYXJyYXk6IFwic3Ryb2tlRGFzaGFycmF5XCIsXG59O1xuLyoqXG4gKiBCdWlsZCBTVkcgcGF0aCBwcm9wZXJ0aWVzLiBVc2VzIHRoZSBwYXRoJ3MgbWVhc3VyZWQgbGVuZ3RoIHRvIGNvbnZlcnRcbiAqIG91ciBjdXN0b20gcGF0aExlbmd0aCwgcGF0aFNwYWNpbmcgYW5kIHBhdGhPZmZzZXQgaW50byBzdHJva2UtZGFzaG9mZnNldFxuICogYW5kIHN0cm9rZS1kYXNoYXJyYXkgYXR0cmlidXRlcy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIG11dGF0aXZlIHRvIHJlZHVjZSBwZXItZnJhbWUgR0MuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkU1ZHUGF0aChhdHRycywgbGVuZ3RoLCBzcGFjaW5nLCBvZmZzZXQsIHVzZURhc2hDYXNlKSB7XG4gICAgaWYgKHNwYWNpbmcgPT09IHZvaWQgMCkgeyBzcGFjaW5nID0gMTsgfVxuICAgIGlmIChvZmZzZXQgPT09IHZvaWQgMCkgeyBvZmZzZXQgPSAwOyB9XG4gICAgaWYgKHVzZURhc2hDYXNlID09PSB2b2lkIDApIHsgdXNlRGFzaENhc2UgPSB0cnVlOyB9XG4gICAgLy8gTm9ybWFsaXNlIHBhdGggbGVuZ3RoIGJ5IHNldHRpbmcgU1ZHIGF0dHJpYnV0ZSBwYXRoTGVuZ3RoIHRvIDFcbiAgICBhdHRycy5wYXRoTGVuZ3RoID0gMTtcbiAgICAvLyBXZSB1c2UgZGFzaCBjYXNlIHdoZW4gc2V0dGluZyBhdHRyaWJ1dGVzIGRpcmVjdGx5IHRvIHRoZSBET00gbm9kZSBhbmQgY2FtZWwgY2FzZVxuICAgIC8vIHdoZW4gZGVmaW5pbmcgcHJvcHMgb24gYSBSZWFjdCBjb21wb25lbnQuXG4gICAgdmFyIGtleXMgPSB1c2VEYXNoQ2FzZSA/IGRhc2hLZXlzIDogY2FtZWxLZXlzO1xuICAgIC8vIEJ1aWxkIHRoZSBkYXNoIG9mZnNldFxuICAgIGF0dHJzW2tleXMub2Zmc2V0XSA9IHB4LnRyYW5zZm9ybSgtb2Zmc2V0KTtcbiAgICAvLyBCdWlsZCB0aGUgZGFzaCBhcnJheVxuICAgIHZhciBwYXRoTGVuZ3RoID0gcHgudHJhbnNmb3JtKGxlbmd0aCk7XG4gICAgdmFyIHBhdGhTcGFjaW5nID0gcHgudHJhbnNmb3JtKHNwYWNpbmcpO1xuICAgIGF0dHJzW2tleXMuYXJyYXldID0gXCJcIi5jb25jYXQocGF0aExlbmd0aCwgXCIgXCIpLmNvbmNhdChwYXRoU3BhY2luZyk7XG59XG5cbmV4cG9ydCB7IGJ1aWxkU1ZHUGF0aCB9O1xuIiwiaW1wb3J0IHsgX19yZXN0IH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgYnVpbGRIVE1MU3R5bGVzIH0gZnJvbSAnLi4vLi4vaHRtbC91dGlscy9idWlsZC1zdHlsZXMubWpzJztcbmltcG9ydCB7IGNhbGNTVkdUcmFuc2Zvcm1PcmlnaW4gfSBmcm9tICcuL3RyYW5zZm9ybS1vcmlnaW4ubWpzJztcbmltcG9ydCB7IGJ1aWxkU1ZHUGF0aCB9IGZyb20gJy4vcGF0aC5tanMnO1xuXG4vKipcbiAqIEJ1aWxkIFNWRyB2aXN1YWwgYXR0cmJ1dGVzLCBsaWtlIGN4IGFuZCBzdHlsZS50cmFuc2Zvcm1cbiAqL1xuZnVuY3Rpb24gYnVpbGRTVkdBdHRycyhzdGF0ZSwgX2EsIG9wdGlvbnMsIHRyYW5zZm9ybVRlbXBsYXRlKSB7XG4gICAgdmFyIGF0dHJYID0gX2EuYXR0clgsIGF0dHJZID0gX2EuYXR0clksIG9yaWdpblggPSBfYS5vcmlnaW5YLCBvcmlnaW5ZID0gX2Eub3JpZ2luWSwgcGF0aExlbmd0aCA9IF9hLnBhdGhMZW5ndGgsIF9iID0gX2EucGF0aFNwYWNpbmcsIHBhdGhTcGFjaW5nID0gX2IgPT09IHZvaWQgMCA/IDEgOiBfYiwgX2MgPSBfYS5wYXRoT2Zmc2V0LCBwYXRoT2Zmc2V0ID0gX2MgPT09IHZvaWQgMCA/IDAgOiBfYywgXG4gICAgLy8gVGhpcyBpcyBvYmplY3QgY3JlYXRpb24sIHdoaWNoIHdlIHRyeSB0byBhdm9pZCBwZXItZnJhbWUuXG4gICAgbGF0ZXN0ID0gX19yZXN0KF9hLCBbXCJhdHRyWFwiLCBcImF0dHJZXCIsIFwib3JpZ2luWFwiLCBcIm9yaWdpbllcIiwgXCJwYXRoTGVuZ3RoXCIsIFwicGF0aFNwYWNpbmdcIiwgXCJwYXRoT2Zmc2V0XCJdKTtcbiAgICBidWlsZEhUTUxTdHlsZXMoc3RhdGUsIGxhdGVzdCwgb3B0aW9ucywgdHJhbnNmb3JtVGVtcGxhdGUpO1xuICAgIHN0YXRlLmF0dHJzID0gc3RhdGUuc3R5bGU7XG4gICAgc3RhdGUuc3R5bGUgPSB7fTtcbiAgICB2YXIgYXR0cnMgPSBzdGF0ZS5hdHRycywgc3R5bGUgPSBzdGF0ZS5zdHlsZSwgZGltZW5zaW9ucyA9IHN0YXRlLmRpbWVuc2lvbnM7XG4gICAgLyoqXG4gICAgICogSG93ZXZlciwgd2UgYXBwbHkgdHJhbnNmb3JtcyBhcyBDU1MgdHJhbnNmb3Jtcy4gU28gaWYgd2UgZGV0ZWN0IGEgdHJhbnNmb3JtIHdlIHRha2UgaXQgZnJvbSBhdHRyc1xuICAgICAqIGFuZCBjb3B5IGl0IGludG8gc3R5bGUuXG4gICAgICovXG4gICAgaWYgKGF0dHJzLnRyYW5zZm9ybSkge1xuICAgICAgICBpZiAoZGltZW5zaW9ucylcbiAgICAgICAgICAgIHN0eWxlLnRyYW5zZm9ybSA9IGF0dHJzLnRyYW5zZm9ybTtcbiAgICAgICAgZGVsZXRlIGF0dHJzLnRyYW5zZm9ybTtcbiAgICB9XG4gICAgLy8gUGFyc2UgdHJhbnNmb3JtT3JpZ2luXG4gICAgaWYgKGRpbWVuc2lvbnMgJiZcbiAgICAgICAgKG9yaWdpblggIT09IHVuZGVmaW5lZCB8fCBvcmlnaW5ZICE9PSB1bmRlZmluZWQgfHwgc3R5bGUudHJhbnNmb3JtKSkge1xuICAgICAgICBzdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSBjYWxjU1ZHVHJhbnNmb3JtT3JpZ2luKGRpbWVuc2lvbnMsIG9yaWdpblggIT09IHVuZGVmaW5lZCA/IG9yaWdpblggOiAwLjUsIG9yaWdpblkgIT09IHVuZGVmaW5lZCA/IG9yaWdpblkgOiAwLjUpO1xuICAgIH1cbiAgICAvLyBUcmVhdCB4L3kgbm90IGFzIHNob3J0Y3V0cyBidXQgYXMgYWN0dWFsIGF0dHJpYnV0ZXNcbiAgICBpZiAoYXR0clggIT09IHVuZGVmaW5lZClcbiAgICAgICAgYXR0cnMueCA9IGF0dHJYO1xuICAgIGlmIChhdHRyWSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBhdHRycy55ID0gYXR0clk7XG4gICAgLy8gQnVpbGQgU1ZHIHBhdGggaWYgb25lIGhhcyBiZWVuIGRlZmluZWRcbiAgICBpZiAocGF0aExlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGJ1aWxkU1ZHUGF0aChhdHRycywgcGF0aExlbmd0aCwgcGF0aFNwYWNpbmcsIHBhdGhPZmZzZXQsIGZhbHNlKTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IGJ1aWxkU1ZHQXR0cnMgfTtcbiIsImltcG9ydCB7IF9fYXNzaWduIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgY3JlYXRlSHRtbFJlbmRlclN0YXRlIH0gZnJvbSAnLi4vLi4vaHRtbC91dGlscy9jcmVhdGUtcmVuZGVyLXN0YXRlLm1qcyc7XG5cbnZhciBjcmVhdGVTdmdSZW5kZXJTdGF0ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY3JlYXRlSHRtbFJlbmRlclN0YXRlKCkpLCB7IGF0dHJzOiB7fSB9KSk7IH07XG5cbmV4cG9ydCB7IGNyZWF0ZVN2Z1JlbmRlclN0YXRlIH07XG4iLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjb3B5UmF3VmFsdWVzT25seSB9IGZyb20gJy4uL2h0bWwvdXNlLXByb3BzLm1qcyc7XG5pbXBvcnQgeyBidWlsZFNWR0F0dHJzIH0gZnJvbSAnLi91dGlscy9idWlsZC1hdHRycy5tanMnO1xuaW1wb3J0IHsgY3JlYXRlU3ZnUmVuZGVyU3RhdGUgfSBmcm9tICcuL3V0aWxzL2NyZWF0ZS1yZW5kZXItc3RhdGUubWpzJztcblxuZnVuY3Rpb24gdXNlU1ZHUHJvcHMocHJvcHMsIHZpc3VhbFN0YXRlKSB7XG4gICAgdmFyIHZpc3VhbFByb3BzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGNyZWF0ZVN2Z1JlbmRlclN0YXRlKCk7XG4gICAgICAgIGJ1aWxkU1ZHQXR0cnMoc3RhdGUsIHZpc3VhbFN0YXRlLCB7IGVuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uOiBmYWxzZSB9LCBwcm9wcy50cmFuc2Zvcm1UZW1wbGF0ZSk7XG4gICAgICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgc3RhdGUuYXR0cnMpLCB7IHN0eWxlOiBfX2Fzc2lnbih7fSwgc3RhdGUuc3R5bGUpIH0pO1xuICAgIH0sIFt2aXN1YWxTdGF0ZV0pO1xuICAgIGlmIChwcm9wcy5zdHlsZSkge1xuICAgICAgICB2YXIgcmF3U3R5bGVzID0ge307XG4gICAgICAgIGNvcHlSYXdWYWx1ZXNPbmx5KHJhd1N0eWxlcywgcHJvcHMuc3R5bGUsIHByb3BzKTtcbiAgICAgICAgdmlzdWFsUHJvcHMuc3R5bGUgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcmF3U3R5bGVzKSwgdmlzdWFsUHJvcHMuc3R5bGUpO1xuICAgIH1cbiAgICByZXR1cm4gdmlzdWFsUHJvcHM7XG59XG5cbmV4cG9ydCB7IHVzZVNWR1Byb3BzIH07XG4iLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VIVE1MUHJvcHMgfSBmcm9tICcuLi9odG1sL3VzZS1wcm9wcy5tanMnO1xuaW1wb3J0IHsgZmlsdGVyUHJvcHMgfSBmcm9tICcuL3V0aWxzL2ZpbHRlci1wcm9wcy5tanMnO1xuaW1wb3J0IHsgaXNTVkdDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL2lzLXN2Zy1jb21wb25lbnQubWpzJztcbmltcG9ydCB7IHVzZVNWR1Byb3BzIH0gZnJvbSAnLi4vc3ZnL3VzZS1wcm9wcy5tanMnO1xuXG5mdW5jdGlvbiBjcmVhdGVVc2VSZW5kZXIoZm9yd2FyZE1vdGlvblByb3BzKSB7XG4gICAgaWYgKGZvcndhcmRNb3Rpb25Qcm9wcyA9PT0gdm9pZCAwKSB7IGZvcndhcmRNb3Rpb25Qcm9wcyA9IGZhbHNlOyB9XG4gICAgdmFyIHVzZVJlbmRlciA9IGZ1bmN0aW9uIChDb21wb25lbnQsIHByb3BzLCBwcm9qZWN0aW9uSWQsIHJlZiwgX2EsIGlzU3RhdGljKSB7XG4gICAgICAgIHZhciBsYXRlc3RWYWx1ZXMgPSBfYS5sYXRlc3RWYWx1ZXM7XG4gICAgICAgIHZhciB1c2VWaXN1YWxQcm9wcyA9IGlzU1ZHQ29tcG9uZW50KENvbXBvbmVudClcbiAgICAgICAgICAgID8gdXNlU1ZHUHJvcHNcbiAgICAgICAgICAgIDogdXNlSFRNTFByb3BzO1xuICAgICAgICB2YXIgdmlzdWFsUHJvcHMgPSB1c2VWaXN1YWxQcm9wcyhwcm9wcywgbGF0ZXN0VmFsdWVzLCBpc1N0YXRpYyk7XG4gICAgICAgIHZhciBmaWx0ZXJlZFByb3BzID0gZmlsdGVyUHJvcHMocHJvcHMsIHR5cGVvZiBDb21wb25lbnQgPT09IFwic3RyaW5nXCIsIGZvcndhcmRNb3Rpb25Qcm9wcyk7XG4gICAgICAgIHZhciBlbGVtZW50UHJvcHMgPSBfX2Fzc2lnbihfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZmlsdGVyZWRQcm9wcyksIHZpc3VhbFByb3BzKSwgeyByZWY6IHJlZiB9KTtcbiAgICAgICAgaWYgKHByb2plY3Rpb25JZCkge1xuICAgICAgICAgICAgZWxlbWVudFByb3BzW1wiZGF0YS1wcm9qZWN0aW9uLWlkXCJdID0gcHJvamVjdGlvbklkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KENvbXBvbmVudCwgZWxlbWVudFByb3BzKTtcbiAgICB9O1xuICAgIHJldHVybiB1c2VSZW5kZXI7XG59XG5cbmV4cG9ydCB7IGNyZWF0ZVVzZVJlbmRlciB9O1xuIiwidmFyIENBTUVMX0NBU0VfUEFUVEVSTiA9IC8oW2Etel0pKFtBLVpdKS9nO1xudmFyIFJFUExBQ0VfVEVNUExBVEUgPSBcIiQxLSQyXCI7XG4vKipcbiAqIENvbnZlcnQgY2FtZWxDYXNlIHRvIGRhc2gtY2FzZSBwcm9wZXJ0aWVzLlxuICovXG52YXIgY2FtZWxUb0Rhc2ggPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKENBTUVMX0NBU0VfUEFUVEVSTiwgUkVQTEFDRV9URU1QTEFURSkudG9Mb3dlckNhc2UoKTtcbn07XG5cbmV4cG9ydCB7IGNhbWVsVG9EYXNoIH07XG4iLCJmdW5jdGlvbiByZW5kZXJIVE1MKGVsZW1lbnQsIF9hLCBzdHlsZVByb3AsIHByb2plY3Rpb24pIHtcbiAgICB2YXIgc3R5bGUgPSBfYS5zdHlsZSwgdmFycyA9IF9hLnZhcnM7XG4gICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSwgcHJvamVjdGlvbiAmJiBwcm9qZWN0aW9uLmdldFByb2plY3Rpb25TdHlsZXMoc3R5bGVQcm9wKSk7XG4gICAgLy8gTG9vcCBvdmVyIGFueSBDU1MgdmFyaWFibGVzIGFuZCBhc3NpZ24gdGhvc2UuXG4gICAgZm9yICh2YXIga2V5IGluIHZhcnMpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhcnNba2V5XSk7XG4gICAgfVxufVxuXG5leHBvcnQgeyByZW5kZXJIVE1MIH07XG4iLCIvKipcbiAqIEEgc2V0IG9mIGF0dHJpYnV0ZSBuYW1lcyB0aGF0IGFyZSBhbHdheXMgcmVhZC93cml0dGVuIGFzIGNhbWVsIGNhc2UuXG4gKi9cbnZhciBjYW1lbENhc2VBdHRyaWJ1dGVzID0gbmV3IFNldChbXG4gICAgXCJiYXNlRnJlcXVlbmN5XCIsXG4gICAgXCJkaWZmdXNlQ29uc3RhbnRcIixcbiAgICBcImtlcm5lbE1hdHJpeFwiLFxuICAgIFwia2VybmVsVW5pdExlbmd0aFwiLFxuICAgIFwia2V5U3BsaW5lc1wiLFxuICAgIFwia2V5VGltZXNcIixcbiAgICBcImxpbWl0aW5nQ29uZUFuZ2xlXCIsXG4gICAgXCJtYXJrZXJIZWlnaHRcIixcbiAgICBcIm1hcmtlcldpZHRoXCIsXG4gICAgXCJudW1PY3RhdmVzXCIsXG4gICAgXCJ0YXJnZXRYXCIsXG4gICAgXCJ0YXJnZXRZXCIsXG4gICAgXCJzdXJmYWNlU2NhbGVcIixcbiAgICBcInNwZWN1bGFyQ29uc3RhbnRcIixcbiAgICBcInNwZWN1bGFyRXhwb25lbnRcIixcbiAgICBcInN0ZERldmlhdGlvblwiLFxuICAgIFwidGFibGVWYWx1ZXNcIixcbiAgICBcInZpZXdCb3hcIixcbiAgICBcImdyYWRpZW50VHJhbnNmb3JtXCIsXG4gICAgXCJwYXRoTGVuZ3RoXCIsXG5dKTtcblxuZXhwb3J0IHsgY2FtZWxDYXNlQXR0cmlidXRlcyB9O1xuIiwiaW1wb3J0IHsgY2FtZWxUb0Rhc2ggfSBmcm9tICcuLi8uLi9kb20vdXRpbHMvY2FtZWwtdG8tZGFzaC5tanMnO1xuaW1wb3J0IHsgcmVuZGVySFRNTCB9IGZyb20gJy4uLy4uL2h0bWwvdXRpbHMvcmVuZGVyLm1qcyc7XG5pbXBvcnQgeyBjYW1lbENhc2VBdHRyaWJ1dGVzIH0gZnJvbSAnLi9jYW1lbC1jYXNlLWF0dHJzLm1qcyc7XG5cbmZ1bmN0aW9uIHJlbmRlclNWRyhlbGVtZW50LCByZW5kZXJTdGF0ZSwgX3N0eWxlUHJvcCwgcHJvamVjdGlvbikge1xuICAgIHJlbmRlckhUTUwoZWxlbWVudCwgcmVuZGVyU3RhdGUsIHVuZGVmaW5lZCwgcHJvamVjdGlvbik7XG4gICAgZm9yICh2YXIga2V5IGluIHJlbmRlclN0YXRlLmF0dHJzKSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCFjYW1lbENhc2VBdHRyaWJ1dGVzLmhhcyhrZXkpID8gY2FtZWxUb0Rhc2goa2V5KSA6IGtleSwgcmVuZGVyU3RhdGUuYXR0cnNba2V5XSk7XG4gICAgfVxufVxuXG5leHBvcnQgeyByZW5kZXJTVkcgfTtcbiIsImltcG9ydCB7IGlzRm9yY2VkTW90aW9uVmFsdWUgfSBmcm9tICcuLi8uLi8uLi9tb3Rpb24vdXRpbHMvaXMtZm9yY2VkLW1vdGlvbi12YWx1ZS5tanMnO1xuaW1wb3J0IHsgaXNNb3Rpb25WYWx1ZSB9IGZyb20gJy4uLy4uLy4uL3ZhbHVlL3V0aWxzL2lzLW1vdGlvbi12YWx1ZS5tanMnO1xuXG5mdW5jdGlvbiBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMocHJvcHMpIHtcbiAgICB2YXIgc3R5bGUgPSBwcm9wcy5zdHlsZTtcbiAgICB2YXIgbmV3VmFsdWVzID0ge307XG4gICAgZm9yICh2YXIga2V5IGluIHN0eWxlKSB7XG4gICAgICAgIGlmIChpc01vdGlvblZhbHVlKHN0eWxlW2tleV0pIHx8IGlzRm9yY2VkTW90aW9uVmFsdWUoa2V5LCBwcm9wcykpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlc1trZXldID0gc3R5bGVba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3VmFsdWVzO1xufVxuXG5leHBvcnQgeyBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMgfTtcbiIsImltcG9ydCB7IGlzTW90aW9uVmFsdWUgfSBmcm9tICcuLi8uLi8uLi92YWx1ZS91dGlscy9pcy1tb3Rpb24tdmFsdWUubWpzJztcbmltcG9ydCB7IHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyBhcyBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMkMSB9IGZyb20gJy4uLy4uL2h0bWwvdXRpbHMvc2NyYXBlLW1vdGlvbi12YWx1ZXMubWpzJztcblxuZnVuY3Rpb24gc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzKHByb3BzKSB7XG4gICAgdmFyIG5ld1ZhbHVlcyA9IHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyQxKHByb3BzKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgaWYgKGlzTW90aW9uVmFsdWUocHJvcHNba2V5XSkpIHtcbiAgICAgICAgICAgIHZhciB0YXJnZXRLZXkgPSBrZXkgPT09IFwieFwiIHx8IGtleSA9PT0gXCJ5XCIgPyBcImF0dHJcIiArIGtleS50b1VwcGVyQ2FzZSgpIDoga2V5O1xuICAgICAgICAgICAgbmV3VmFsdWVzW3RhcmdldEtleV0gPSBwcm9wc1trZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdWYWx1ZXM7XG59XG5cbmV4cG9ydCB7IHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyB9O1xuIiwiZnVuY3Rpb24gaXNBbmltYXRpb25Db250cm9scyh2KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2LnN0YXJ0ID09PSBcImZ1bmN0aW9uXCI7XG59XG5cbmV4cG9ydCB7IGlzQW5pbWF0aW9uQ29udHJvbHMgfTtcbiIsInZhciBpc0tleWZyYW1lc1RhcmdldCA9IGZ1bmN0aW9uICh2KSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodik7XG59O1xuXG5leHBvcnQgeyBpc0tleWZyYW1lc1RhcmdldCB9O1xuIiwiaW1wb3J0IHsgaXNLZXlmcmFtZXNUYXJnZXQgfSBmcm9tICcuLi9hbmltYXRpb24vdXRpbHMvaXMta2V5ZnJhbWVzLXRhcmdldC5tanMnO1xuXG52YXIgaXNDdXN0b21WYWx1ZSA9IGZ1bmN0aW9uICh2KSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odiAmJiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2Lm1peCAmJiB2LnRvVmFsdWUpO1xufTtcbnZhciByZXNvbHZlRmluYWxWYWx1ZUluS2V5ZnJhbWVzID0gZnVuY3Rpb24gKHYpIHtcbiAgICAvLyBUT0RPIG1heWJlIHRocm93IGlmIHYubGVuZ3RoIC0gMSBpcyBwbGFjZWhvbGRlciB0b2tlbj9cbiAgICByZXR1cm4gaXNLZXlmcmFtZXNUYXJnZXQodikgPyB2W3YubGVuZ3RoIC0gMV0gfHwgMCA6IHY7XG59O1xuXG5leHBvcnQgeyBpc0N1c3RvbVZhbHVlLCByZXNvbHZlRmluYWxWYWx1ZUluS2V5ZnJhbWVzIH07XG4iLCJpbXBvcnQgeyBpc0N1c3RvbVZhbHVlIH0gZnJvbSAnLi4vLi4vdXRpbHMvcmVzb2x2ZS12YWx1ZS5tanMnO1xuaW1wb3J0IHsgaXNNb3Rpb25WYWx1ZSB9IGZyb20gJy4vaXMtbW90aW9uLXZhbHVlLm1qcyc7XG5cbi8qKlxuICogSWYgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIGEgTW90aW9uVmFsdWUsIHRoaXMgcmV0dXJucyB0aGUgYWN0dWFsIHZhbHVlLCBvdGhlcndpc2UganVzdCB0aGUgdmFsdWUgaXRzZWxmXG4gKlxuICogVE9ETzogUmVtb3ZlIGFuZCBtb3ZlIHRvIGxpYnJhcnlcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU1vdGlvblZhbHVlKHZhbHVlKSB7XG4gICAgdmFyIHVud3JhcHBlZFZhbHVlID0gaXNNb3Rpb25WYWx1ZSh2YWx1ZSkgPyB2YWx1ZS5nZXQoKSA6IHZhbHVlO1xuICAgIHJldHVybiBpc0N1c3RvbVZhbHVlKHVud3JhcHBlZFZhbHVlKVxuICAgICAgICA/IHVud3JhcHBlZFZhbHVlLnRvVmFsdWUoKVxuICAgICAgICA6IHVud3JhcHBlZFZhbHVlO1xufVxuXG5leHBvcnQgeyByZXNvbHZlTW90aW9uVmFsdWUgfTtcbiIsImltcG9ydCB7IF9fcmVzdCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0FuaW1hdGlvbkNvbnRyb2xzIH0gZnJvbSAnLi4vLi4vYW5pbWF0aW9uL3V0aWxzL2lzLWFuaW1hdGlvbi1jb250cm9scy5tanMnO1xuaW1wb3J0IHsgUHJlc2VuY2VDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9QcmVzZW5jZUNvbnRleHQubWpzJztcbmltcG9ydCB7IGNoZWNrSWZDb250cm9sbGluZ1ZhcmlhbnRzLCBjaGVja0lmVmFyaWFudE5vZGUsIHJlc29sdmVWYXJpYW50RnJvbVByb3BzIH0gZnJvbSAnLi4vLi4vcmVuZGVyL3V0aWxzL3ZhcmlhbnRzLm1qcyc7XG5pbXBvcnQgeyB1c2VDb25zdGFudCB9IGZyb20gJy4uLy4uL3V0aWxzL3VzZS1jb25zdGFudC5tanMnO1xuaW1wb3J0IHsgcmVzb2x2ZU1vdGlvblZhbHVlIH0gZnJvbSAnLi4vLi4vdmFsdWUvdXRpbHMvcmVzb2x2ZS1tb3Rpb24tdmFsdWUubWpzJztcbmltcG9ydCB7IE1vdGlvbkNvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L01vdGlvbkNvbnRleHQvaW5kZXgubWpzJztcblxuZnVuY3Rpb24gbWFrZVN0YXRlKF9hLCBwcm9wcywgY29udGV4dCwgcHJlc2VuY2VDb250ZXh0KSB7XG4gICAgdmFyIHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyA9IF9hLnNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcywgY3JlYXRlUmVuZGVyU3RhdGUgPSBfYS5jcmVhdGVSZW5kZXJTdGF0ZSwgb25Nb3VudCA9IF9hLm9uTW91bnQ7XG4gICAgdmFyIHN0YXRlID0ge1xuICAgICAgICBsYXRlc3RWYWx1ZXM6IG1ha2VMYXRlc3RWYWx1ZXMocHJvcHMsIGNvbnRleHQsIHByZXNlbmNlQ29udGV4dCwgc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzKSxcbiAgICAgICAgcmVuZGVyU3RhdGU6IGNyZWF0ZVJlbmRlclN0YXRlKCksXG4gICAgfTtcbiAgICBpZiAob25Nb3VudCkge1xuICAgICAgICBzdGF0ZS5tb3VudCA9IGZ1bmN0aW9uIChpbnN0YW5jZSkgeyByZXR1cm4gb25Nb3VudChwcm9wcywgaW5zdGFuY2UsIHN0YXRlKTsgfTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlO1xufVxudmFyIG1ha2VVc2VWaXN1YWxTdGF0ZSA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHByb3BzLCBpc1N0YXRpYykge1xuICAgICAgICB2YXIgY29udGV4dCA9IHVzZUNvbnRleHQoTW90aW9uQ29udGV4dCk7XG4gICAgICAgIHZhciBwcmVzZW5jZUNvbnRleHQgPSB1c2VDb250ZXh0KFByZXNlbmNlQ29udGV4dCk7XG4gICAgICAgIHJldHVybiBpc1N0YXRpY1xuICAgICAgICAgICAgPyBtYWtlU3RhdGUoY29uZmlnLCBwcm9wcywgY29udGV4dCwgcHJlc2VuY2VDb250ZXh0KVxuICAgICAgICAgICAgOiB1c2VDb25zdGFudChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VTdGF0ZShjb25maWcsIHByb3BzLCBjb250ZXh0LCBwcmVzZW5jZUNvbnRleHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgfTtcbn07XG5mdW5jdGlvbiBtYWtlTGF0ZXN0VmFsdWVzKHByb3BzLCBjb250ZXh0LCBwcmVzZW5jZUNvbnRleHQsIHNjcmFwZU1vdGlvblZhbHVlcykge1xuICAgIHZhciB2YWx1ZXMgPSB7fTtcbiAgICB2YXIgYmxvY2tJbml0aWFsQW5pbWF0aW9uID0gKHByZXNlbmNlQ29udGV4dCA9PT0gbnVsbCB8fCBwcmVzZW5jZUNvbnRleHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByZXNlbmNlQ29udGV4dC5pbml0aWFsKSA9PT0gZmFsc2U7XG4gICAgdmFyIG1vdGlvblZhbHVlcyA9IHNjcmFwZU1vdGlvblZhbHVlcyhwcm9wcyk7XG4gICAgZm9yICh2YXIga2V5IGluIG1vdGlvblZhbHVlcykge1xuICAgICAgICB2YWx1ZXNba2V5XSA9IHJlc29sdmVNb3Rpb25WYWx1ZShtb3Rpb25WYWx1ZXNba2V5XSk7XG4gICAgfVxuICAgIHZhciBpbml0aWFsID0gcHJvcHMuaW5pdGlhbCwgYW5pbWF0ZSA9IHByb3BzLmFuaW1hdGU7XG4gICAgdmFyIGlzQ29udHJvbGxpbmdWYXJpYW50cyA9IGNoZWNrSWZDb250cm9sbGluZ1ZhcmlhbnRzKHByb3BzKTtcbiAgICB2YXIgaXNWYXJpYW50Tm9kZSA9IGNoZWNrSWZWYXJpYW50Tm9kZShwcm9wcyk7XG4gICAgaWYgKGNvbnRleHQgJiZcbiAgICAgICAgaXNWYXJpYW50Tm9kZSAmJlxuICAgICAgICAhaXNDb250cm9sbGluZ1ZhcmlhbnRzICYmXG4gICAgICAgIHByb3BzLmluaGVyaXQgIT09IGZhbHNlKSB7XG4gICAgICAgIGluaXRpYWwgIT09IG51bGwgJiYgaW5pdGlhbCAhPT0gdm9pZCAwID8gaW5pdGlhbCA6IChpbml0aWFsID0gY29udGV4dC5pbml0aWFsKTtcbiAgICAgICAgYW5pbWF0ZSAhPT0gbnVsbCAmJiBhbmltYXRlICE9PSB2b2lkIDAgPyBhbmltYXRlIDogKGFuaW1hdGUgPSBjb250ZXh0LmFuaW1hdGUpO1xuICAgIH1cbiAgICB2YXIgaW5pdGlhbEFuaW1hdGlvbklzQmxvY2tlZCA9IGJsb2NrSW5pdGlhbEFuaW1hdGlvbiB8fCBpbml0aWFsID09PSBmYWxzZTtcbiAgICB2YXIgdmFyaWFudFRvU2V0ID0gaW5pdGlhbEFuaW1hdGlvbklzQmxvY2tlZCA/IGFuaW1hdGUgOiBpbml0aWFsO1xuICAgIGlmICh2YXJpYW50VG9TZXQgJiZcbiAgICAgICAgdHlwZW9mIHZhcmlhbnRUb1NldCAhPT0gXCJib29sZWFuXCIgJiZcbiAgICAgICAgIWlzQW5pbWF0aW9uQ29udHJvbHModmFyaWFudFRvU2V0KSkge1xuICAgICAgICB2YXIgbGlzdCA9IEFycmF5LmlzQXJyYXkodmFyaWFudFRvU2V0KSA/IHZhcmlhbnRUb1NldCA6IFt2YXJpYW50VG9TZXRdO1xuICAgICAgICBsaXN0LmZvckVhY2goZnVuY3Rpb24gKGRlZmluaXRpb24pIHtcbiAgICAgICAgICAgIHZhciByZXNvbHZlZCA9IHJlc29sdmVWYXJpYW50RnJvbVByb3BzKHByb3BzLCBkZWZpbml0aW9uKTtcbiAgICAgICAgICAgIGlmICghcmVzb2x2ZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIHRyYW5zaXRpb25FbmQgPSByZXNvbHZlZC50cmFuc2l0aW9uRW5kOyByZXNvbHZlZC50cmFuc2l0aW9uOyB2YXIgdGFyZ2V0ID0gX19yZXN0KHJlc29sdmVkLCBbXCJ0cmFuc2l0aW9uRW5kXCIsIFwidHJhbnNpdGlvblwiXSk7XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlVGFyZ2V0ID0gdGFyZ2V0W2tleV07XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVUYXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBUYWtlIGZpbmFsIGtleWZyYW1lIGlmIHRoZSBpbml0aWFsIGFuaW1hdGlvbiBpcyBibG9ja2VkIGJlY2F1c2VcbiAgICAgICAgICAgICAgICAgICAgICogd2Ugd2FudCB0byBpbml0aWFsaXNlIGF0IHRoZSBlbmQgb2YgdGhhdCBibG9ja2VkIGFuaW1hdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGluaXRpYWxBbmltYXRpb25Jc0Jsb2NrZWRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdmFsdWVUYXJnZXQubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAwO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0W2luZGV4XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlVGFyZ2V0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc1trZXldID0gdmFsdWVUYXJnZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHRyYW5zaXRpb25FbmQpXG4gICAgICAgICAgICAgICAgdmFsdWVzW2tleV0gPSB0cmFuc2l0aW9uRW5kW2tleV07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xufVxuXG5leHBvcnQgeyBtYWtlVXNlVmlzdWFsU3RhdGUgfTtcbiIsImltcG9ydCB7IHJlbmRlclNWRyB9IGZyb20gJy4vdXRpbHMvcmVuZGVyLm1qcyc7XG5pbXBvcnQgeyBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMgfSBmcm9tICcuL3V0aWxzL3NjcmFwZS1tb3Rpb24tdmFsdWVzLm1qcyc7XG5pbXBvcnQgeyBtYWtlVXNlVmlzdWFsU3RhdGUgfSBmcm9tICcuLi8uLi9tb3Rpb24vdXRpbHMvdXNlLXZpc3VhbC1zdGF0ZS5tanMnO1xuaW1wb3J0IHsgY3JlYXRlU3ZnUmVuZGVyU3RhdGUgfSBmcm9tICcuL3V0aWxzL2NyZWF0ZS1yZW5kZXItc3RhdGUubWpzJztcbmltcG9ydCB7IGJ1aWxkU1ZHQXR0cnMgfSBmcm9tICcuL3V0aWxzL2J1aWxkLWF0dHJzLm1qcyc7XG5cbnZhciBzdmdNb3Rpb25Db25maWcgPSB7XG4gICAgdXNlVmlzdWFsU3RhdGU6IG1ha2VVc2VWaXN1YWxTdGF0ZSh7XG4gICAgICAgIHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wczogc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzLFxuICAgICAgICBjcmVhdGVSZW5kZXJTdGF0ZTogY3JlYXRlU3ZnUmVuZGVyU3RhdGUsXG4gICAgICAgIG9uTW91bnQ6IGZ1bmN0aW9uIChwcm9wcywgaW5zdGFuY2UsIF9hKSB7XG4gICAgICAgICAgICB2YXIgcmVuZGVyU3RhdGUgPSBfYS5yZW5kZXJTdGF0ZSwgbGF0ZXN0VmFsdWVzID0gX2EubGF0ZXN0VmFsdWVzO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZW5kZXJTdGF0ZS5kaW1lbnNpb25zID1cbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGluc3RhbmNlLmdldEJCb3ggPT09XG4gICAgICAgICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaW5zdGFuY2UuZ2V0QkJveCgpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGluc3RhbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBNb3N0IGxpa2VseSB0cnlpbmcgdG8gbWVhc3VyZSBhbiB1bnJlbmRlcmVkIGVsZW1lbnQgdW5kZXIgRmlyZWZveFxuICAgICAgICAgICAgICAgIHJlbmRlclN0YXRlLmRpbWVuc2lvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1aWxkU1ZHQXR0cnMocmVuZGVyU3RhdGUsIGxhdGVzdFZhbHVlcywgeyBlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbjogZmFsc2UgfSwgcHJvcHMudHJhbnNmb3JtVGVtcGxhdGUpO1xuICAgICAgICAgICAgcmVuZGVyU1ZHKGluc3RhbmNlLCByZW5kZXJTdGF0ZSk7XG4gICAgICAgIH0sXG4gICAgfSksXG59O1xuXG5leHBvcnQgeyBzdmdNb3Rpb25Db25maWcgfTtcbiIsInZhciBBbmltYXRpb25UeXBlO1xuKGZ1bmN0aW9uIChBbmltYXRpb25UeXBlKSB7XG4gICAgQW5pbWF0aW9uVHlwZVtcIkFuaW1hdGVcIl0gPSBcImFuaW1hdGVcIjtcbiAgICBBbmltYXRpb25UeXBlW1wiSG92ZXJcIl0gPSBcIndoaWxlSG92ZXJcIjtcbiAgICBBbmltYXRpb25UeXBlW1wiVGFwXCJdID0gXCJ3aGlsZVRhcFwiO1xuICAgIEFuaW1hdGlvblR5cGVbXCJEcmFnXCJdID0gXCJ3aGlsZURyYWdcIjtcbiAgICBBbmltYXRpb25UeXBlW1wiRm9jdXNcIl0gPSBcIndoaWxlRm9jdXNcIjtcbiAgICBBbmltYXRpb25UeXBlW1wiSW5WaWV3XCJdID0gXCJ3aGlsZUluVmlld1wiO1xuICAgIEFuaW1hdGlvblR5cGVbXCJFeGl0XCJdID0gXCJleGl0XCI7XG59KShBbmltYXRpb25UeXBlIHx8IChBbmltYXRpb25UeXBlID0ge30pKTtcblxuZXhwb3J0IHsgQW5pbWF0aW9uVHlwZSB9O1xuIiwiaW1wb3J0IHsgbWFrZVVzZVZpc3VhbFN0YXRlIH0gZnJvbSAnLi4vLi4vbW90aW9uL3V0aWxzL3VzZS12aXN1YWwtc3RhdGUubWpzJztcbmltcG9ydCB7IHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyB9IGZyb20gJy4vdXRpbHMvc2NyYXBlLW1vdGlvbi12YWx1ZXMubWpzJztcbmltcG9ydCB7IGNyZWF0ZUh0bWxSZW5kZXJTdGF0ZSB9IGZyb20gJy4vdXRpbHMvY3JlYXRlLXJlbmRlci1zdGF0ZS5tanMnO1xuXG52YXIgaHRtbE1vdGlvbkNvbmZpZyA9IHtcbiAgICB1c2VWaXN1YWxTdGF0ZTogbWFrZVVzZVZpc3VhbFN0YXRlKHtcbiAgICAgICAgc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzOiBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMsXG4gICAgICAgIGNyZWF0ZVJlbmRlclN0YXRlOiBjcmVhdGVIdG1sUmVuZGVyU3RhdGUsXG4gICAgfSksXG59O1xuXG5leHBvcnQgeyBodG1sTW90aW9uQ29uZmlnIH07XG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5cbmZ1bmN0aW9uIGFkZERvbUV2ZW50KHRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0geyBwYXNzaXZlOiB0cnVlIH07IH1cbiAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGhhbmRsZXIsIG9wdGlvbnMpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGhhbmRsZXIpOyB9O1xufVxuLyoqXG4gKiBBdHRhY2hlcyBhbiBldmVudCBsaXN0ZW5lciBkaXJlY3RseSB0byB0aGUgcHJvdmlkZWQgRE9NIGVsZW1lbnQuXG4gKlxuICogQnlwYXNzaW5nIFJlYWN0J3MgZXZlbnQgc3lzdGVtIGNhbiBiZSBkZXNpcmFibGUsIGZvciBpbnN0YW5jZSB3aGVuIGF0dGFjaGluZyBub24tcGFzc2l2ZVxuICogZXZlbnQgaGFuZGxlcnMuXG4gKlxuICogYGBganN4XG4gKiBjb25zdCByZWYgPSB1c2VSZWYobnVsbClcbiAqXG4gKiB1c2VEb21FdmVudChyZWYsICd3aGVlbCcsIG9uV2hlZWwsIHsgcGFzc2l2ZTogZmFsc2UgfSlcbiAqXG4gKiByZXR1cm4gPGRpdiByZWY9e3JlZn0gLz5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSByZWYgLSBSZWFjdC5SZWZPYmplY3QgdGhhdCdzIGJlZW4gcHJvdmlkZWQgdG8gdGhlIGVsZW1lbnQgeW91IHdhbnQgdG8gYmluZCB0aGUgbGlzdGVuZXIgdG8uXG4gKiBAcGFyYW0gZXZlbnROYW1lIC0gTmFtZSBvZiB0aGUgZXZlbnQgeW91IHdhbnQgbGlzdGVuIGZvci5cbiAqIEBwYXJhbSBoYW5kbGVyIC0gRnVuY3Rpb24gdG8gZmlyZSB3aGVuIHJlY2VpdmluZyB0aGUgZXZlbnQuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gcGFzcyB0byBgRXZlbnQuYWRkRXZlbnRMaXN0ZW5lcmAuXG4gKlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiB1c2VEb21FdmVudChyZWYsIGV2ZW50TmFtZSwgaGFuZGxlciwgb3B0aW9ucykge1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbGVtZW50ID0gcmVmLmN1cnJlbnQ7XG4gICAgICAgIGlmIChoYW5kbGVyICYmIGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBhZGREb21FdmVudChlbGVtZW50LCBldmVudE5hbWUsIGhhbmRsZXIsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfSwgW3JlZiwgZXZlbnROYW1lLCBoYW5kbGVyLCBvcHRpb25zXSk7XG59XG5cbmV4cG9ydCB7IGFkZERvbUV2ZW50LCB1c2VEb21FdmVudCB9O1xuIiwiZnVuY3Rpb24gaXNNb3VzZUV2ZW50KGV2ZW50KSB7XG4gICAgLy8gUG9pbnRlckV2ZW50IGluaGVyaXRzIGZyb20gTW91c2VFdmVudCBzbyB3ZSBjYW4ndCB1c2UgYSBzdHJhaWdodCBpbnN0YW5jZW9mIGNoZWNrLlxuICAgIGlmICh0eXBlb2YgUG9pbnRlckV2ZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIGV2ZW50IGluc3RhbmNlb2YgUG9pbnRlckV2ZW50KSB7XG4gICAgICAgIHJldHVybiAhIShldmVudC5wb2ludGVyVHlwZSA9PT0gXCJtb3VzZVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudDtcbn1cbmZ1bmN0aW9uIGlzVG91Y2hFdmVudChldmVudCkge1xuICAgIHZhciBoYXNUb3VjaGVzID0gISFldmVudC50b3VjaGVzO1xuICAgIHJldHVybiBoYXNUb3VjaGVzO1xufVxuXG5leHBvcnQgeyBpc01vdXNlRXZlbnQsIGlzVG91Y2hFdmVudCB9O1xuIiwiaW1wb3J0IHsgaXNUb3VjaEV2ZW50IH0gZnJvbSAnLi4vZ2VzdHVyZXMvdXRpbHMvZXZlbnQtdHlwZS5tanMnO1xuXG4vKipcbiAqIEZpbHRlcnMgb3V0IGV2ZW50cyBub3QgYXR0YWNoZWQgdG8gdGhlIHByaW1hcnkgcG9pbnRlciAoY3VycmVudGx5IGxlZnQgbW91c2UgYnV0dG9uKVxuICogQHBhcmFtIGV2ZW50SGFuZGxlclxuICovXG5mdW5jdGlvbiBmaWx0ZXJQcmltYXJ5UG9pbnRlcihldmVudEhhbmRsZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBpc01vdXNlRXZlbnQgPSBldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQ7XG4gICAgICAgIHZhciBpc1ByaW1hcnlQb2ludGVyID0gIWlzTW91c2VFdmVudCB8fFxuICAgICAgICAgICAgKGlzTW91c2VFdmVudCAmJiBldmVudC5idXR0b24gPT09IDApO1xuICAgICAgICBpZiAoaXNQcmltYXJ5UG9pbnRlcikge1xuICAgICAgICAgICAgZXZlbnRIYW5kbGVyKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH07XG59XG52YXIgZGVmYXVsdFBhZ2VQb2ludCA9IHsgcGFnZVg6IDAsIHBhZ2VZOiAwIH07XG5mdW5jdGlvbiBwb2ludEZyb21Ub3VjaChlLCBwb2ludFR5cGUpIHtcbiAgICBpZiAocG9pbnRUeXBlID09PSB2b2lkIDApIHsgcG9pbnRUeXBlID0gXCJwYWdlXCI7IH1cbiAgICB2YXIgcHJpbWFyeVRvdWNoID0gZS50b3VjaGVzWzBdIHx8IGUuY2hhbmdlZFRvdWNoZXNbMF07XG4gICAgdmFyIHBvaW50ID0gcHJpbWFyeVRvdWNoIHx8IGRlZmF1bHRQYWdlUG9pbnQ7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogcG9pbnRbcG9pbnRUeXBlICsgXCJYXCJdLFxuICAgICAgICB5OiBwb2ludFtwb2ludFR5cGUgKyBcIllcIl0sXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHBvaW50RnJvbU1vdXNlKHBvaW50LCBwb2ludFR5cGUpIHtcbiAgICBpZiAocG9pbnRUeXBlID09PSB2b2lkIDApIHsgcG9pbnRUeXBlID0gXCJwYWdlXCI7IH1cbiAgICByZXR1cm4ge1xuICAgICAgICB4OiBwb2ludFtwb2ludFR5cGUgKyBcIlhcIl0sXG4gICAgICAgIHk6IHBvaW50W3BvaW50VHlwZSArIFwiWVwiXSxcbiAgICB9O1xufVxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50SW5mbyhldmVudCwgcG9pbnRUeXBlKSB7XG4gICAgaWYgKHBvaW50VHlwZSA9PT0gdm9pZCAwKSB7IHBvaW50VHlwZSA9IFwicGFnZVwiOyB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcG9pbnQ6IGlzVG91Y2hFdmVudChldmVudClcbiAgICAgICAgICAgID8gcG9pbnRGcm9tVG91Y2goZXZlbnQsIHBvaW50VHlwZSlcbiAgICAgICAgICAgIDogcG9pbnRGcm9tTW91c2UoZXZlbnQsIHBvaW50VHlwZSksXG4gICAgfTtcbn1cbnZhciB3cmFwSGFuZGxlciA9IGZ1bmN0aW9uIChoYW5kbGVyLCBzaG91bGRGaWx0ZXJQcmltYXJ5UG9pbnRlcikge1xuICAgIGlmIChzaG91bGRGaWx0ZXJQcmltYXJ5UG9pbnRlciA9PT0gdm9pZCAwKSB7IHNob3VsZEZpbHRlclByaW1hcnlQb2ludGVyID0gZmFsc2U7IH1cbiAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZXIoZXZlbnQsIGV4dHJhY3RFdmVudEluZm8oZXZlbnQpKTtcbiAgICB9O1xuICAgIHJldHVybiBzaG91bGRGaWx0ZXJQcmltYXJ5UG9pbnRlclxuICAgICAgICA/IGZpbHRlclByaW1hcnlQb2ludGVyKGxpc3RlbmVyKVxuICAgICAgICA6IGxpc3RlbmVyO1xufTtcblxuZXhwb3J0IHsgZXh0cmFjdEV2ZW50SW5mbywgd3JhcEhhbmRsZXIgfTtcbiIsImltcG9ydCB7IGlzQnJvd3NlciB9IGZyb20gJy4uL3V0aWxzL2lzLWJyb3dzZXIubWpzJztcblxuLy8gV2UgY2hlY2sgZm9yIGV2ZW50IHN1cHBvcnQgdmlhIGZ1bmN0aW9ucyBpbiBjYXNlIHRoZXkndmUgYmVlbiBtb2NrZWQgYnkgYSB0ZXN0aW5nIHN1aXRlLlxudmFyIHN1cHBvcnRzUG9pbnRlckV2ZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaXNCcm93c2VyICYmIHdpbmRvdy5vbnBvaW50ZXJkb3duID09PSBudWxsO1xufTtcbnZhciBzdXBwb3J0c1RvdWNoRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpc0Jyb3dzZXIgJiYgd2luZG93Lm9udG91Y2hzdGFydCA9PT0gbnVsbDtcbn07XG52YXIgc3VwcG9ydHNNb3VzZUV2ZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaXNCcm93c2VyICYmIHdpbmRvdy5vbm1vdXNlZG93biA9PT0gbnVsbDtcbn07XG5cbmV4cG9ydCB7IHN1cHBvcnRzTW91c2VFdmVudHMsIHN1cHBvcnRzUG9pbnRlckV2ZW50cywgc3VwcG9ydHNUb3VjaEV2ZW50cyB9O1xuIiwiaW1wb3J0IHsgYWRkRG9tRXZlbnQsIHVzZURvbUV2ZW50IH0gZnJvbSAnLi91c2UtZG9tLWV2ZW50Lm1qcyc7XG5pbXBvcnQgeyB3cmFwSGFuZGxlciB9IGZyb20gJy4vZXZlbnQtaW5mby5tanMnO1xuaW1wb3J0IHsgc3VwcG9ydHNQb2ludGVyRXZlbnRzLCBzdXBwb3J0c1RvdWNoRXZlbnRzLCBzdXBwb3J0c01vdXNlRXZlbnRzIH0gZnJvbSAnLi91dGlscy5tanMnO1xuXG52YXIgbW91c2VFdmVudE5hbWVzID0ge1xuICAgIHBvaW50ZXJkb3duOiBcIm1vdXNlZG93blwiLFxuICAgIHBvaW50ZXJtb3ZlOiBcIm1vdXNlbW92ZVwiLFxuICAgIHBvaW50ZXJ1cDogXCJtb3VzZXVwXCIsXG4gICAgcG9pbnRlcmNhbmNlbDogXCJtb3VzZWNhbmNlbFwiLFxuICAgIHBvaW50ZXJvdmVyOiBcIm1vdXNlb3ZlclwiLFxuICAgIHBvaW50ZXJvdXQ6IFwibW91c2VvdXRcIixcbiAgICBwb2ludGVyZW50ZXI6IFwibW91c2VlbnRlclwiLFxuICAgIHBvaW50ZXJsZWF2ZTogXCJtb3VzZWxlYXZlXCIsXG59O1xudmFyIHRvdWNoRXZlbnROYW1lcyA9IHtcbiAgICBwb2ludGVyZG93bjogXCJ0b3VjaHN0YXJ0XCIsXG4gICAgcG9pbnRlcm1vdmU6IFwidG91Y2htb3ZlXCIsXG4gICAgcG9pbnRlcnVwOiBcInRvdWNoZW5kXCIsXG4gICAgcG9pbnRlcmNhbmNlbDogXCJ0b3VjaGNhbmNlbFwiLFxufTtcbmZ1bmN0aW9uIGdldFBvaW50ZXJFdmVudE5hbWUobmFtZSkge1xuICAgIGlmIChzdXBwb3J0c1BvaW50ZXJFdmVudHMoKSkge1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc3VwcG9ydHNUb3VjaEV2ZW50cygpKSB7XG4gICAgICAgIHJldHVybiB0b3VjaEV2ZW50TmFtZXNbbmFtZV07XG4gICAgfVxuICAgIGVsc2UgaWYgKHN1cHBvcnRzTW91c2VFdmVudHMoKSkge1xuICAgICAgICByZXR1cm4gbW91c2VFdmVudE5hbWVzW25hbWVdO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZTtcbn1cbmZ1bmN0aW9uIGFkZFBvaW50ZXJFdmVudCh0YXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgb3B0aW9ucykge1xuICAgIHJldHVybiBhZGREb21FdmVudCh0YXJnZXQsIGdldFBvaW50ZXJFdmVudE5hbWUoZXZlbnROYW1lKSwgd3JhcEhhbmRsZXIoaGFuZGxlciwgZXZlbnROYW1lID09PSBcInBvaW50ZXJkb3duXCIpLCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHVzZVBvaW50ZXJFdmVudChyZWYsIGV2ZW50TmFtZSwgaGFuZGxlciwgb3B0aW9ucykge1xuICAgIHJldHVybiB1c2VEb21FdmVudChyZWYsIGdldFBvaW50ZXJFdmVudE5hbWUoZXZlbnROYW1lKSwgaGFuZGxlciAmJiB3cmFwSGFuZGxlcihoYW5kbGVyLCBldmVudE5hbWUgPT09IFwicG9pbnRlcmRvd25cIiksIG9wdGlvbnMpO1xufVxuXG5leHBvcnQgeyBhZGRQb2ludGVyRXZlbnQsIHVzZVBvaW50ZXJFdmVudCB9O1xuIiwiZnVuY3Rpb24gY3JlYXRlTG9jayhuYW1lKSB7XG4gICAgdmFyIGxvY2sgPSBudWxsO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvcGVuTG9jayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxvY2sgPSBudWxsO1xuICAgICAgICB9O1xuICAgICAgICBpZiAobG9jayA9PT0gbnVsbCkge1xuICAgICAgICAgICAgbG9jayA9IG5hbWU7XG4gICAgICAgICAgICByZXR1cm4gb3BlbkxvY2s7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG59XG52YXIgZ2xvYmFsSG9yaXpvbnRhbExvY2sgPSBjcmVhdGVMb2NrKFwiZHJhZ0hvcml6b250YWxcIik7XG52YXIgZ2xvYmFsVmVydGljYWxMb2NrID0gY3JlYXRlTG9jayhcImRyYWdWZXJ0aWNhbFwiKTtcbmZ1bmN0aW9uIGdldEdsb2JhbExvY2soZHJhZykge1xuICAgIHZhciBsb2NrID0gZmFsc2U7XG4gICAgaWYgKGRyYWcgPT09IFwieVwiKSB7XG4gICAgICAgIGxvY2sgPSBnbG9iYWxWZXJ0aWNhbExvY2soKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZHJhZyA9PT0gXCJ4XCIpIHtcbiAgICAgICAgbG9jayA9IGdsb2JhbEhvcml6b250YWxMb2NrKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgb3Blbkhvcml6b250YWxfMSA9IGdsb2JhbEhvcml6b250YWxMb2NrKCk7XG4gICAgICAgIHZhciBvcGVuVmVydGljYWxfMSA9IGdsb2JhbFZlcnRpY2FsTG9jaygpO1xuICAgICAgICBpZiAob3Blbkhvcml6b250YWxfMSAmJiBvcGVuVmVydGljYWxfMSkge1xuICAgICAgICAgICAgbG9jayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBvcGVuSG9yaXpvbnRhbF8xKCk7XG4gICAgICAgICAgICAgICAgb3BlblZlcnRpY2FsXzEoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBSZWxlYXNlIHRoZSBsb2NrcyBiZWNhdXNlIHdlIGRvbid0IHVzZSB0aGVtXG4gICAgICAgICAgICBpZiAob3Blbkhvcml6b250YWxfMSlcbiAgICAgICAgICAgICAgICBvcGVuSG9yaXpvbnRhbF8xKCk7XG4gICAgICAgICAgICBpZiAob3BlblZlcnRpY2FsXzEpXG4gICAgICAgICAgICAgICAgb3BlblZlcnRpY2FsXzEoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbG9jaztcbn1cbmZ1bmN0aW9uIGlzRHJhZ0FjdGl2ZSgpIHtcbiAgICAvLyBDaGVjayB0aGUgZ2VzdHVyZSBsb2NrIC0gaWYgd2UgZ2V0IGl0LCBpdCBtZWFucyBubyBkcmFnIGdlc3R1cmUgaXMgYWN0aXZlXG4gICAgLy8gYW5kIHdlIGNhbiBzYWZlbHkgZmlyZSB0aGUgdGFwIGdlc3R1cmUuXG4gICAgdmFyIG9wZW5HZXN0dXJlTG9jayA9IGdldEdsb2JhbExvY2sodHJ1ZSk7XG4gICAgaWYgKCFvcGVuR2VzdHVyZUxvY2spXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIG9wZW5HZXN0dXJlTG9jaygpO1xuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IHsgY3JlYXRlTG9jaywgZ2V0R2xvYmFsTG9jaywgaXNEcmFnQWN0aXZlIH07XG4iLCJpbXBvcnQgeyBpc01vdXNlRXZlbnQgfSBmcm9tICcuL3V0aWxzL2V2ZW50LXR5cGUubWpzJztcbmltcG9ydCB7IEFuaW1hdGlvblR5cGUgfSBmcm9tICcuLi9yZW5kZXIvdXRpbHMvdHlwZXMubWpzJztcbmltcG9ydCB7IHVzZVBvaW50ZXJFdmVudCB9IGZyb20gJy4uL2V2ZW50cy91c2UtcG9pbnRlci1ldmVudC5tanMnO1xuaW1wb3J0IHsgaXNEcmFnQWN0aXZlIH0gZnJvbSAnLi9kcmFnL3V0aWxzL2xvY2subWpzJztcblxuZnVuY3Rpb24gY3JlYXRlSG92ZXJFdmVudCh2aXN1YWxFbGVtZW50LCBpc0FjdGl2ZSwgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50LCBpbmZvKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCFpc01vdXNlRXZlbnQoZXZlbnQpIHx8IGlzRHJhZ0FjdGl2ZSgpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvKipcbiAgICAgICAgICogRW5zdXJlIHdlIHRyaWdnZXIgYW5pbWF0aW9ucyBiZWZvcmUgZmlyaW5nIGV2ZW50IGNhbGxiYWNrXG4gICAgICAgICAqL1xuICAgICAgICAoX2EgPSB2aXN1YWxFbGVtZW50LmFuaW1hdGlvblN0YXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2V0QWN0aXZlKEFuaW1hdGlvblR5cGUuSG92ZXIsIGlzQWN0aXZlKTtcbiAgICAgICAgY2FsbGJhY2sgPT09IG51bGwgfHwgY2FsbGJhY2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNhbGxiYWNrKGV2ZW50LCBpbmZvKTtcbiAgICB9O1xufVxuZnVuY3Rpb24gdXNlSG92ZXJHZXN0dXJlKF9hKSB7XG4gICAgdmFyIG9uSG92ZXJTdGFydCA9IF9hLm9uSG92ZXJTdGFydCwgb25Ib3ZlckVuZCA9IF9hLm9uSG92ZXJFbmQsIHdoaWxlSG92ZXIgPSBfYS53aGlsZUhvdmVyLCB2aXN1YWxFbGVtZW50ID0gX2EudmlzdWFsRWxlbWVudDtcbiAgICB1c2VQb2ludGVyRXZlbnQodmlzdWFsRWxlbWVudCwgXCJwb2ludGVyZW50ZXJcIiwgb25Ib3ZlclN0YXJ0IHx8IHdoaWxlSG92ZXJcbiAgICAgICAgPyBjcmVhdGVIb3ZlckV2ZW50KHZpc3VhbEVsZW1lbnQsIHRydWUsIG9uSG92ZXJTdGFydClcbiAgICAgICAgOiB1bmRlZmluZWQsIHsgcGFzc2l2ZTogIW9uSG92ZXJTdGFydCB9KTtcbiAgICB1c2VQb2ludGVyRXZlbnQodmlzdWFsRWxlbWVudCwgXCJwb2ludGVybGVhdmVcIiwgb25Ib3ZlckVuZCB8fCB3aGlsZUhvdmVyXG4gICAgICAgID8gY3JlYXRlSG92ZXJFdmVudCh2aXN1YWxFbGVtZW50LCBmYWxzZSwgb25Ib3ZlckVuZClcbiAgICAgICAgOiB1bmRlZmluZWQsIHsgcGFzc2l2ZTogIW9uSG92ZXJFbmQgfSk7XG59XG5cbmV4cG9ydCB7IHVzZUhvdmVyR2VzdHVyZSB9O1xuIiwiLyoqXG4gKiBSZWN1cnNpdmVseSB0cmF2ZXJzZSB1cCB0aGUgdHJlZSB0byBjaGVjayB3aGV0aGVyIHRoZSBwcm92aWRlZCBjaGlsZCBub2RlXG4gKiBpcyB0aGUgcGFyZW50IG9yIGEgZGVzY2VuZGFudCBvZiBpdC5cbiAqXG4gKiBAcGFyYW0gcGFyZW50IC0gRWxlbWVudCB0byBmaW5kXG4gKiBAcGFyYW0gY2hpbGQgLSBFbGVtZW50IHRvIHRlc3QgYWdhaW5zdCBwYXJlbnRcbiAqL1xudmFyIGlzTm9kZU9yQ2hpbGQgPSBmdW5jdGlvbiAocGFyZW50LCBjaGlsZCkge1xuICAgIGlmICghY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmIChwYXJlbnQgPT09IGNoaWxkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGlzTm9kZU9yQ2hpbGQocGFyZW50LCBjaGlsZC5wYXJlbnRFbGVtZW50KTtcbiAgICB9XG59O1xuXG5leHBvcnQgeyBpc05vZGVPckNoaWxkIH07XG4iLCJjb25zdCBjb21iaW5lRnVuY3Rpb25zID0gKGEsIGIpID0+ICh2KSA9PiBiKGEodikpO1xuY29uc3QgcGlwZSA9ICguLi50cmFuc2Zvcm1lcnMpID0+IHRyYW5zZm9ybWVycy5yZWR1Y2UoY29tYmluZUZ1bmN0aW9ucyk7XG5cbmV4cG9ydCB7IHBpcGUgfTtcbiIsInZhciB3YXJuZWQgPSBuZXcgU2V0KCk7XG5mdW5jdGlvbiB3YXJuT25jZShjb25kaXRpb24sIG1lc3NhZ2UsIGVsZW1lbnQpIHtcbiAgICBpZiAoY29uZGl0aW9uIHx8IHdhcm5lZC5oYXMobWVzc2FnZSkpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgaWYgKGVsZW1lbnQpXG4gICAgICAgIGNvbnNvbGUud2FybihlbGVtZW50KTtcbiAgICB3YXJuZWQuYWRkKG1lc3NhZ2UpO1xufVxuXG5leHBvcnQgeyB3YXJuT25jZSB9O1xuIiwiaW1wb3J0IHsgX19yZXN0LCBfX2Fzc2lnbiB9IGZyb20gJ3RzbGliJztcblxuLyoqXG4gKiBNYXAgYW4gSW50ZXJzZWN0aW9uSGFuZGxlciBjYWxsYmFjayB0byBhbiBlbGVtZW50LiBXZSBvbmx5IGV2ZXIgbWFrZSBvbmUgaGFuZGxlciBmb3Igb25lXG4gKiBlbGVtZW50LCBzbyBldmVuIHRob3VnaCB0aGVzZSBoYW5kbGVycyBtaWdodCBhbGwgYmUgdHJpZ2dlcmVkIGJ5IGRpZmZlcmVudFxuICogb2JzZXJ2ZXJzLCB3ZSBjYW4ga2VlcCB0aGVtIGluIHRoZSBzYW1lIG1hcC5cbiAqL1xudmFyIG9ic2VydmVyQ2FsbGJhY2tzID0gbmV3IFdlYWtNYXAoKTtcbi8qKlxuICogTXVsdGlwbGUgb2JzZXJ2ZXJzIGNhbiBiZSBjcmVhdGVkIGZvciBtdWx0aXBsZSBlbGVtZW50L2RvY3VtZW50IHJvb3RzLiBFYWNoIHdpdGhcbiAqIGRpZmZlcmVudCBzZXR0aW5ncy4gU28gaGVyZSB3ZSBzdG9yZSBkaWN0aW9uYXJpZXMgb2Ygb2JzZXJ2ZXJzIHRvIGVhY2ggcm9vdCxcbiAqIHVzaW5nIHNlcmlhbGlzZWQgc2V0dGluZ3MgKHRocmVzaG9sZC9tYXJnaW4pIGFzIGxvb2t1cCBrZXlzLlxuICovXG52YXIgb2JzZXJ2ZXJzID0gbmV3IFdlYWtNYXAoKTtcbnZhciBmaXJlT2JzZXJ2ZXJDYWxsYmFjayA9IGZ1bmN0aW9uIChlbnRyeSkge1xuICAgIHZhciBfYTtcbiAgICAoX2EgPSBvYnNlcnZlckNhbGxiYWNrcy5nZXQoZW50cnkudGFyZ2V0KSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hKGVudHJ5KTtcbn07XG52YXIgZmlyZUFsbE9ic2VydmVyQ2FsbGJhY2tzID0gZnVuY3Rpb24gKGVudHJpZXMpIHtcbiAgICBlbnRyaWVzLmZvckVhY2goZmlyZU9ic2VydmVyQ2FsbGJhY2spO1xufTtcbmZ1bmN0aW9uIGluaXRJbnRlcnNlY3Rpb25PYnNlcnZlcihfYSkge1xuICAgIHZhciByb290ID0gX2Eucm9vdCwgb3B0aW9ucyA9IF9fcmVzdChfYSwgW1wicm9vdFwiXSk7XG4gICAgdmFyIGxvb2t1cFJvb3QgPSByb290IHx8IGRvY3VtZW50O1xuICAgIC8qKlxuICAgICAqIElmIHdlIGRvbid0IGhhdmUgYW4gb2JzZXJ2ZXIgbG9va3VwIG1hcCBmb3IgdGhpcyByb290LCBjcmVhdGUgb25lLlxuICAgICAqL1xuICAgIGlmICghb2JzZXJ2ZXJzLmhhcyhsb29rdXBSb290KSkge1xuICAgICAgICBvYnNlcnZlcnMuc2V0KGxvb2t1cFJvb3QsIHt9KTtcbiAgICB9XG4gICAgdmFyIHJvb3RPYnNlcnZlcnMgPSBvYnNlcnZlcnMuZ2V0KGxvb2t1cFJvb3QpO1xuICAgIHZhciBrZXkgPSBKU09OLnN0cmluZ2lmeShvcHRpb25zKTtcbiAgICAvKipcbiAgICAgKiBJZiB3ZSBkb24ndCBoYXZlIGFuIG9ic2VydmVyIGZvciB0aGlzIGNvbWJpbmF0aW9uIG9mIHJvb3QgYW5kIHNldHRpbmdzLFxuICAgICAqIGNyZWF0ZSBvbmUuXG4gICAgICovXG4gICAgaWYgKCFyb290T2JzZXJ2ZXJzW2tleV0pIHtcbiAgICAgICAgcm9vdE9ic2VydmVyc1trZXldID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGZpcmVBbGxPYnNlcnZlckNhbGxiYWNrcywgX19hc3NpZ24oeyByb290OiByb290IH0sIG9wdGlvbnMpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvb3RPYnNlcnZlcnNba2V5XTtcbn1cbmZ1bmN0aW9uIG9ic2VydmVJbnRlcnNlY3Rpb24oZWxlbWVudCwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICB2YXIgcm9vdEludGVyZXNlY3Rpb25PYnNlcnZlciA9IGluaXRJbnRlcnNlY3Rpb25PYnNlcnZlcihvcHRpb25zKTtcbiAgICBvYnNlcnZlckNhbGxiYWNrcy5zZXQoZWxlbWVudCwgY2FsbGJhY2spO1xuICAgIHJvb3RJbnRlcmVzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBvYnNlcnZlckNhbGxiYWNrcy5kZWxldGUoZWxlbWVudCk7XG4gICAgICAgIHJvb3RJbnRlcmVzZWN0aW9uT2JzZXJ2ZXIudW5vYnNlcnZlKGVsZW1lbnQpO1xuICAgIH07XG59XG5cbmV4cG9ydCB7IG9ic2VydmVJbnRlcnNlY3Rpb24gfTtcbiIsImltcG9ydCB7IGVudiB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3Byb2Nlc3MubWpzJztcbmltcG9ydCB7IHVzZVJlZiwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQW5pbWF0aW9uVHlwZSB9IGZyb20gJy4uLy4uLy4uL3JlbmRlci91dGlscy90eXBlcy5tanMnO1xuaW1wb3J0IHsgd2Fybk9uY2UgfSBmcm9tICcuLi8uLi8uLi91dGlscy93YXJuLW9uY2UubWpzJztcbmltcG9ydCB7IG9ic2VydmVJbnRlcnNlY3Rpb24gfSBmcm9tICcuL29ic2VydmVycy5tanMnO1xuXG5mdW5jdGlvbiB1c2VWaWV3cG9ydChfYSkge1xuICAgIHZhciB2aXN1YWxFbGVtZW50ID0gX2EudmlzdWFsRWxlbWVudCwgd2hpbGVJblZpZXcgPSBfYS53aGlsZUluVmlldywgb25WaWV3cG9ydEVudGVyID0gX2Eub25WaWV3cG9ydEVudGVyLCBvblZpZXdwb3J0TGVhdmUgPSBfYS5vblZpZXdwb3J0TGVhdmUsIF9iID0gX2Eudmlld3BvcnQsIHZpZXdwb3J0ID0gX2IgPT09IHZvaWQgMCA/IHt9IDogX2I7XG4gICAgdmFyIHN0YXRlID0gdXNlUmVmKHtcbiAgICAgICAgaGFzRW50ZXJlZFZpZXc6IGZhbHNlLFxuICAgICAgICBpc0luVmlldzogZmFsc2UsXG4gICAgfSk7XG4gICAgdmFyIHNob3VsZE9ic2VydmUgPSBCb29sZWFuKHdoaWxlSW5WaWV3IHx8IG9uVmlld3BvcnRFbnRlciB8fCBvblZpZXdwb3J0TGVhdmUpO1xuICAgIGlmICh2aWV3cG9ydC5vbmNlICYmIHN0YXRlLmN1cnJlbnQuaGFzRW50ZXJlZFZpZXcpXG4gICAgICAgIHNob3VsZE9ic2VydmUgPSBmYWxzZTtcbiAgICB2YXIgdXNlT2JzZXJ2ZXIgPSB0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyB1c2VNaXNzaW5nSW50ZXJzZWN0aW9uT2JzZXJ2ZXJcbiAgICAgICAgOiB1c2VJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgICB1c2VPYnNlcnZlcihzaG91bGRPYnNlcnZlLCBzdGF0ZS5jdXJyZW50LCB2aXN1YWxFbGVtZW50LCB2aWV3cG9ydCk7XG59XG52YXIgdGhyZXNob2xkTmFtZXMgPSB7XG4gICAgc29tZTogMCxcbiAgICBhbGw6IDEsXG59O1xuZnVuY3Rpb24gdXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoc2hvdWxkT2JzZXJ2ZSwgc3RhdGUsIHZpc3VhbEVsZW1lbnQsIF9hKSB7XG4gICAgdmFyIHJvb3QgPSBfYS5yb290LCByb290TWFyZ2luID0gX2EubWFyZ2luLCBfYiA9IF9hLmFtb3VudCwgYW1vdW50ID0gX2IgPT09IHZvaWQgMCA/IFwic29tZVwiIDogX2IsIG9uY2UgPSBfYS5vbmNlO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghc2hvdWxkT2JzZXJ2ZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICByb290OiByb290ID09PSBudWxsIHx8IHJvb3QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJvb3QuY3VycmVudCxcbiAgICAgICAgICAgIHJvb3RNYXJnaW46IHJvb3RNYXJnaW4sXG4gICAgICAgICAgICB0aHJlc2hvbGQ6IHR5cGVvZiBhbW91bnQgPT09IFwibnVtYmVyXCIgPyBhbW91bnQgOiB0aHJlc2hvbGROYW1lc1thbW91bnRdLFxuICAgICAgICB9O1xuICAgICAgICB2YXIgaW50ZXJzZWN0aW9uQ2FsbGJhY2sgPSBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHZhciBpc0ludGVyc2VjdGluZyA9IGVudHJ5LmlzSW50ZXJzZWN0aW5nO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB0aGVyZSdzIGJlZW4gbm8gY2hhbmdlIGluIHRoZSB2aWV3cG9ydCBzdGF0ZSwgZWFybHkgcmV0dXJuLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoc3RhdGUuaXNJblZpZXcgPT09IGlzSW50ZXJzZWN0aW5nKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHN0YXRlLmlzSW5WaWV3ID0gaXNJbnRlcnNlY3Rpbmc7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEhhbmRsZSBoYXNFbnRlcmVkVmlldy4gSWYgdGhpcyBpcyBvbmx5IG1lYW50IHRvIHJ1biBvbmNlLCBhbmRcbiAgICAgICAgICAgICAqIGVsZW1lbnQgaXNuJ3QgdmlzaWJsZSwgZWFybHkgcmV0dXJuLiBPdGhlcndpc2Ugc2V0IGhhc0VudGVyZWRWaWV3IHRvIHRydWUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmIChvbmNlICYmICFpc0ludGVyc2VjdGluZyAmJiBzdGF0ZS5oYXNFbnRlcmVkVmlldykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzSW50ZXJzZWN0aW5nKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUuaGFzRW50ZXJlZFZpZXcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKF9hID0gdmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNldEFjdGl2ZShBbmltYXRpb25UeXBlLkluVmlldywgaXNJbnRlcnNlY3RpbmcpO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBVc2UgdGhlIGxhdGVzdCBjb21taXR0ZWQgcHJvcHMgcmF0aGVyIHRoYW4gdGhlIG9uZXMgaW4gc2NvcGVcbiAgICAgICAgICAgICAqIHdoZW4gdGhpcyBvYnNlcnZlciBpcyBjcmVhdGVkXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhciBwcm9wcyA9IHZpc3VhbEVsZW1lbnQuZ2V0UHJvcHMoKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGlzSW50ZXJzZWN0aW5nXG4gICAgICAgICAgICAgICAgPyBwcm9wcy5vblZpZXdwb3J0RW50ZXJcbiAgICAgICAgICAgICAgICA6IHByb3BzLm9uVmlld3BvcnRMZWF2ZTtcbiAgICAgICAgICAgIGNhbGxiYWNrID09PSBudWxsIHx8IGNhbGxiYWNrID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjYWxsYmFjayhlbnRyeSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBvYnNlcnZlSW50ZXJzZWN0aW9uKHZpc3VhbEVsZW1lbnQuZ2V0SW5zdGFuY2UoKSwgb3B0aW9ucywgaW50ZXJzZWN0aW9uQ2FsbGJhY2spO1xuICAgIH0sIFtzaG91bGRPYnNlcnZlLCByb290LCByb290TWFyZ2luLCBhbW91bnRdKTtcbn1cbi8qKlxuICogSWYgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgaXMgbWlzc2luZywgd2UgYWN0aXZhdGUgaW5WaWV3IGFuZCBmaXJlIG9uVmlld3BvcnRFbnRlclxuICogb24gbW91bnQuIFRoaXMgd2F5LCB0aGUgcGFnZSB3aWxsIGJlIGluIHRoZSBzdGF0ZSB0aGUgYXV0aG9yIGV4cGVjdHMgdXNlcnNcbiAqIHRvIHNlZSBpdCBpbiBmb3IgZXZlcnlvbmUuXG4gKi9cbmZ1bmN0aW9uIHVzZU1pc3NpbmdJbnRlcnNlY3Rpb25PYnNlcnZlcihzaG91bGRPYnNlcnZlLCBzdGF0ZSwgdmlzdWFsRWxlbWVudCwgX2EpIHtcbiAgICB2YXIgX2IgPSBfYS5mYWxsYmFjaywgZmFsbGJhY2sgPSBfYiA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9iO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghc2hvdWxkT2JzZXJ2ZSB8fCAhZmFsbGJhY2spXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChlbnYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICB3YXJuT25jZShmYWxzZSwgXCJJbnRlcnNlY3Rpb25PYnNlcnZlciBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlLiB3aGlsZUluVmlldyBhbmltYXRpb25zIHdpbGwgdHJpZ2dlciBvbiBtb3VudC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmUgdGhpcyBpbiBhbiByQUYgYmVjYXVzZSwgYXQgdGhpcyBwb2ludCwgdGhlIGFuaW1hdGlvbiBzdGF0ZVxuICAgICAgICAgKiB3b24ndCBoYXZlIGZsdXNoZWQgZm9yIHRoZSBmaXJzdCB0aW1lIGFuZCB0aGVyZSdzIGNlcnRhaW4gbG9naWMgaW5cbiAgICAgICAgICogdGhlcmUgdGhhdCBiZWhhdmVzIGRpZmZlcmVudGx5IG9uIHRoZSBpbml0aWFsIGFuaW1hdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhpcyBob29rIHNob3VsZCBiZSBxdWl0ZSByYXJlbHkgY2FsbGVkIHNvIHNldHRpbmcgdGhpcyBpbiBhbiByQUZcbiAgICAgICAgICogaXMgcHJlZmVycmVkIHRvIGNoYW5naW5nIHRoZSBiZWhhdmlvdXIgb2YgdGhlIGFuaW1hdGlvbiBzdGF0ZS5cbiAgICAgICAgICovXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBzdGF0ZS5oYXNFbnRlcmVkVmlldyA9IHRydWU7XG4gICAgICAgICAgICB2YXIgb25WaWV3cG9ydEVudGVyID0gdmlzdWFsRWxlbWVudC5nZXRQcm9wcygpLm9uVmlld3BvcnRFbnRlcjtcbiAgICAgICAgICAgIG9uVmlld3BvcnRFbnRlciA9PT0gbnVsbCB8fCBvblZpZXdwb3J0RW50ZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uVmlld3BvcnRFbnRlcihudWxsKTtcbiAgICAgICAgICAgIChfYSA9IHZpc3VhbEVsZW1lbnQuYW5pbWF0aW9uU3RhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZXRBY3RpdmUoQW5pbWF0aW9uVHlwZS5JblZpZXcsIHRydWUpO1xuICAgICAgICB9KTtcbiAgICB9LCBbc2hvdWxkT2JzZXJ2ZV0pO1xufVxuXG5leHBvcnQgeyB1c2VWaWV3cG9ydCB9O1xuIiwidmFyIG1ha2VSZW5kZXJsZXNzQ29tcG9uZW50ID0gZnVuY3Rpb24gKGhvb2spIHsgcmV0dXJuIGZ1bmN0aW9uIChwcm9wcykge1xuICAgIGhvb2socHJvcHMpO1xuICAgIHJldHVybiBudWxsO1xufTsgfTtcblxuZXhwb3J0IHsgbWFrZVJlbmRlcmxlc3NDb21wb25lbnQgfTtcbiIsImltcG9ydCB7IHVzZUZvY3VzR2VzdHVyZSB9IGZyb20gJy4uLy4uL2dlc3R1cmVzL3VzZS1mb2N1cy1nZXN0dXJlLm1qcyc7XG5pbXBvcnQgeyB1c2VIb3Zlckdlc3R1cmUgfSBmcm9tICcuLi8uLi9nZXN0dXJlcy91c2UtaG92ZXItZ2VzdHVyZS5tanMnO1xuaW1wb3J0IHsgdXNlVGFwR2VzdHVyZSB9IGZyb20gJy4uLy4uL2dlc3R1cmVzL3VzZS10YXAtZ2VzdHVyZS5tanMnO1xuaW1wb3J0IHsgdXNlVmlld3BvcnQgfSBmcm9tICcuL3ZpZXdwb3J0L3VzZS12aWV3cG9ydC5tanMnO1xuaW1wb3J0IHsgbWFrZVJlbmRlcmxlc3NDb21wb25lbnQgfSBmcm9tICcuLi91dGlscy9tYWtlLXJlbmRlcmxlc3MtY29tcG9uZW50Lm1qcyc7XG5cbnZhciBnZXN0dXJlQW5pbWF0aW9ucyA9IHtcbiAgICBpblZpZXc6IG1ha2VSZW5kZXJsZXNzQ29tcG9uZW50KHVzZVZpZXdwb3J0KSxcbiAgICB0YXA6IG1ha2VSZW5kZXJsZXNzQ29tcG9uZW50KHVzZVRhcEdlc3R1cmUpLFxuICAgIGZvY3VzOiBtYWtlUmVuZGVybGVzc0NvbXBvbmVudCh1c2VGb2N1c0dlc3R1cmUpLFxuICAgIGhvdmVyOiBtYWtlUmVuZGVybGVzc0NvbXBvbmVudCh1c2VIb3Zlckdlc3R1cmUpLFxufTtcblxuZXhwb3J0IHsgZ2VzdHVyZUFuaW1hdGlvbnMgfTtcbiIsImltcG9ydCB7IHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzTm9kZU9yQ2hpbGQgfSBmcm9tICcuL3V0aWxzL2lzLW5vZGUtb3ItY2hpbGQubWpzJztcbmltcG9ydCB7IHVzZVBvaW50ZXJFdmVudCwgYWRkUG9pbnRlckV2ZW50IH0gZnJvbSAnLi4vZXZlbnRzL3VzZS1wb2ludGVyLWV2ZW50Lm1qcyc7XG5pbXBvcnQgeyB1c2VVbm1vdW50RWZmZWN0IH0gZnJvbSAnLi4vdXRpbHMvdXNlLXVubW91bnQtZWZmZWN0Lm1qcyc7XG5pbXBvcnQgeyBwaXBlIH0gZnJvbSAncG9wbW90aW9uJztcbmltcG9ydCB7IEFuaW1hdGlvblR5cGUgfSBmcm9tICcuLi9yZW5kZXIvdXRpbHMvdHlwZXMubWpzJztcbmltcG9ydCB7IGlzRHJhZ0FjdGl2ZSB9IGZyb20gJy4vZHJhZy91dGlscy9sb2NrLm1qcyc7XG5cbi8qKlxuICogQHBhcmFtIGhhbmRsZXJzIC1cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiB1c2VUYXBHZXN0dXJlKF9hKSB7XG4gICAgdmFyIG9uVGFwID0gX2Eub25UYXAsIG9uVGFwU3RhcnQgPSBfYS5vblRhcFN0YXJ0LCBvblRhcENhbmNlbCA9IF9hLm9uVGFwQ2FuY2VsLCB3aGlsZVRhcCA9IF9hLndoaWxlVGFwLCB2aXN1YWxFbGVtZW50ID0gX2EudmlzdWFsRWxlbWVudDtcbiAgICB2YXIgaGFzUHJlc3NMaXN0ZW5lcnMgPSBvblRhcCB8fCBvblRhcFN0YXJ0IHx8IG9uVGFwQ2FuY2VsIHx8IHdoaWxlVGFwO1xuICAgIHZhciBpc1ByZXNzaW5nID0gdXNlUmVmKGZhbHNlKTtcbiAgICB2YXIgY2FuY2VsUG9pbnRlckVuZExpc3RlbmVycyA9IHVzZVJlZihudWxsKTtcbiAgICAvKipcbiAgICAgKiBPbmx5IHNldCBsaXN0ZW5lciB0byBwYXNzaXZlIGlmIHRoZXJlIGFyZSBubyBleHRlcm5hbCBsaXN0ZW5lcnMuXG4gICAgICovXG4gICAgdmFyIGV2ZW50T3B0aW9ucyA9IHtcbiAgICAgICAgcGFzc2l2ZTogIShvblRhcFN0YXJ0IHx8IG9uVGFwIHx8IG9uVGFwQ2FuY2VsIHx8IG9uUG9pbnRlckRvd24pLFxuICAgIH07XG4gICAgZnVuY3Rpb24gcmVtb3ZlUG9pbnRlckVuZExpc3RlbmVyKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIChfYSA9IGNhbmNlbFBvaW50ZXJFbmRMaXN0ZW5lcnMuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwoY2FuY2VsUG9pbnRlckVuZExpc3RlbmVycyk7XG4gICAgICAgIGNhbmNlbFBvaW50ZXJFbmRMaXN0ZW5lcnMuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrUG9pbnRlckVuZCgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZW1vdmVQb2ludGVyRW5kTGlzdGVuZXIoKTtcbiAgICAgICAgaXNQcmVzc2luZy5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIChfYSA9IHZpc3VhbEVsZW1lbnQuYW5pbWF0aW9uU3RhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZXRBY3RpdmUoQW5pbWF0aW9uVHlwZS5UYXAsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuICFpc0RyYWdBY3RpdmUoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gb25Qb2ludGVyVXAoZXZlbnQsIGluZm8pIHtcbiAgICAgICAgaWYgKCFjaGVja1BvaW50ZXJFbmQoKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdlIG9ubHkgY291bnQgdGhpcyBhcyBhIHRhcCBnZXN0dXJlIGlmIHRoZSBldmVudC50YXJnZXQgaXMgdGhlIHNhbWVcbiAgICAgICAgICogYXMsIG9yIGEgY2hpbGQgb2YsIHRoaXMgY29tcG9uZW50J3MgZWxlbWVudFxuICAgICAgICAgKi9cbiAgICAgICAgIWlzTm9kZU9yQ2hpbGQodmlzdWFsRWxlbWVudC5nZXRJbnN0YW5jZSgpLCBldmVudC50YXJnZXQpXG4gICAgICAgICAgICA/IG9uVGFwQ2FuY2VsID09PSBudWxsIHx8IG9uVGFwQ2FuY2VsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblRhcENhbmNlbChldmVudCwgaW5mbylcbiAgICAgICAgICAgIDogb25UYXAgPT09IG51bGwgfHwgb25UYXAgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uVGFwKGV2ZW50LCBpbmZvKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gb25Qb2ludGVyQ2FuY2VsKGV2ZW50LCBpbmZvKSB7XG4gICAgICAgIGlmICghY2hlY2tQb2ludGVyRW5kKCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIG9uVGFwQ2FuY2VsID09PSBudWxsIHx8IG9uVGFwQ2FuY2VsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblRhcENhbmNlbChldmVudCwgaW5mbyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9uUG9pbnRlckRvd24oZXZlbnQsIGluZm8pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZW1vdmVQb2ludGVyRW5kTGlzdGVuZXIoKTtcbiAgICAgICAgaWYgKGlzUHJlc3NpbmcuY3VycmVudClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaXNQcmVzc2luZy5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgY2FuY2VsUG9pbnRlckVuZExpc3RlbmVycy5jdXJyZW50ID0gcGlwZShhZGRQb2ludGVyRXZlbnQod2luZG93LCBcInBvaW50ZXJ1cFwiLCBvblBvaW50ZXJVcCwgZXZlbnRPcHRpb25zKSwgYWRkUG9pbnRlckV2ZW50KHdpbmRvdywgXCJwb2ludGVyY2FuY2VsXCIsIG9uUG9pbnRlckNhbmNlbCwgZXZlbnRPcHRpb25zKSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFbnN1cmUgd2UgdHJpZ2dlciBhbmltYXRpb25zIGJlZm9yZSBmaXJpbmcgZXZlbnQgY2FsbGJhY2tcbiAgICAgICAgICovXG4gICAgICAgIChfYSA9IHZpc3VhbEVsZW1lbnQuYW5pbWF0aW9uU3RhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZXRBY3RpdmUoQW5pbWF0aW9uVHlwZS5UYXAsIHRydWUpO1xuICAgICAgICBvblRhcFN0YXJ0ID09PSBudWxsIHx8IG9uVGFwU3RhcnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uVGFwU3RhcnQoZXZlbnQsIGluZm8pO1xuICAgIH1cbiAgICB1c2VQb2ludGVyRXZlbnQodmlzdWFsRWxlbWVudCwgXCJwb2ludGVyZG93blwiLCBoYXNQcmVzc0xpc3RlbmVycyA/IG9uUG9pbnRlckRvd24gOiB1bmRlZmluZWQsIGV2ZW50T3B0aW9ucyk7XG4gICAgdXNlVW5tb3VudEVmZmVjdChyZW1vdmVQb2ludGVyRW5kTGlzdGVuZXIpO1xufVxuXG5leHBvcnQgeyB1c2VUYXBHZXN0dXJlIH07XG4iLCJpbXBvcnQgeyBBbmltYXRpb25UeXBlIH0gZnJvbSAnLi4vcmVuZGVyL3V0aWxzL3R5cGVzLm1qcyc7XG5pbXBvcnQgeyB1c2VEb21FdmVudCB9IGZyb20gJy4uL2V2ZW50cy91c2UtZG9tLWV2ZW50Lm1qcyc7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBwcm9wc1xuICogQHBhcmFtIHJlZlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHVzZUZvY3VzR2VzdHVyZShfYSkge1xuICAgIHZhciB3aGlsZUZvY3VzID0gX2Eud2hpbGVGb2N1cywgdmlzdWFsRWxlbWVudCA9IF9hLnZpc3VhbEVsZW1lbnQ7XG4gICAgdmFyIG9uRm9jdXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgKF9hID0gdmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNldEFjdGl2ZShBbmltYXRpb25UeXBlLkZvY3VzLCB0cnVlKTtcbiAgICB9O1xuICAgIHZhciBvbkJsdXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgKF9hID0gdmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNldEFjdGl2ZShBbmltYXRpb25UeXBlLkZvY3VzLCBmYWxzZSk7XG4gICAgfTtcbiAgICB1c2VEb21FdmVudCh2aXN1YWxFbGVtZW50LCBcImZvY3VzXCIsIHdoaWxlRm9jdXMgPyBvbkZvY3VzIDogdW5kZWZpbmVkKTtcbiAgICB1c2VEb21FdmVudCh2aXN1YWxFbGVtZW50LCBcImJsdXJcIiwgd2hpbGVGb2N1cyA/IG9uQmx1ciA6IHVuZGVmaW5lZCk7XG59XG5cbmV4cG9ydCB7IHVzZUZvY3VzR2VzdHVyZSB9O1xuIiwiaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUHJlc2VuY2VDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9QcmVzZW5jZUNvbnRleHQubWpzJztcbmltcG9ydCB7IHVzZUlkIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXNlLWlkLm1qcyc7XG5cbi8qKlxuICogV2hlbiBhIGNvbXBvbmVudCBpcyB0aGUgY2hpbGQgb2YgYEFuaW1hdGVQcmVzZW5jZWAsIGl0IGNhbiB1c2UgYHVzZVByZXNlbmNlYFxuICogdG8gYWNjZXNzIGluZm9ybWF0aW9uIGFib3V0IHdoZXRoZXIgaXQncyBzdGlsbCBwcmVzZW50IGluIHRoZSBSZWFjdCB0cmVlLlxuICpcbiAqIGBgYGpzeFxuICogaW1wb3J0IHsgdXNlUHJlc2VuY2UgfSBmcm9tIFwiZnJhbWVyLW1vdGlvblwiXG4gKlxuICogZXhwb3J0IGNvbnN0IENvbXBvbmVudCA9ICgpID0+IHtcbiAqICAgY29uc3QgW2lzUHJlc2VudCwgc2FmZVRvUmVtb3ZlXSA9IHVzZVByZXNlbmNlKClcbiAqXG4gKiAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gKiAgICAgIWlzUHJlc2VudCAmJiBzZXRUaW1lb3V0KHNhZmVUb1JlbW92ZSwgMTAwMClcbiAqICAgfSwgW2lzUHJlc2VudF0pXG4gKlxuICogICByZXR1cm4gPGRpdiAvPlxuICogfVxuICogYGBgXG4gKlxuICogSWYgYGlzUHJlc2VudGAgaXMgYGZhbHNlYCwgaXQgbWVhbnMgdGhhdCBhIGNvbXBvbmVudCBoYXMgYmVlbiByZW1vdmVkIHRoZSB0cmVlLCBidXRcbiAqIGBBbmltYXRlUHJlc2VuY2VgIHdvbid0IHJlYWxseSByZW1vdmUgaXQgdW50aWwgYHNhZmVUb1JlbW92ZWAgaGFzIGJlZW4gY2FsbGVkLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gdXNlUHJlc2VuY2UoKSB7XG4gICAgdmFyIGNvbnRleHQgPSB1c2VDb250ZXh0KFByZXNlbmNlQ29udGV4dCk7XG4gICAgaWYgKGNvbnRleHQgPT09IG51bGwpXG4gICAgICAgIHJldHVybiBbdHJ1ZSwgbnVsbF07XG4gICAgdmFyIGlzUHJlc2VudCA9IGNvbnRleHQuaXNQcmVzZW50LCBvbkV4aXRDb21wbGV0ZSA9IGNvbnRleHQub25FeGl0Q29tcGxldGUsIHJlZ2lzdGVyID0gY29udGV4dC5yZWdpc3RlcjtcbiAgICAvLyBJdCdzIHNhZmUgdG8gY2FsbCB0aGUgZm9sbG93aW5nIGhvb2tzIGNvbmRpdGlvbmFsbHkgKGFmdGVyIGFuIGVhcmx5IHJldHVybikgYmVjYXVzZSB0aGUgY29udGV4dCB3aWxsIGFsd2F5c1xuICAgIC8vIGVpdGhlciBiZSBudWxsIG9yIG5vbi1udWxsIGZvciB0aGUgbGlmZXNwYW4gb2YgdGhlIGNvbXBvbmVudC5cbiAgICAvLyBSZXBsYWNlIHdpdGggdXNlSWQgd2hlbiByZWxlYXNlZCBpbiBSZWFjdFxuICAgIHZhciBpZCA9IHVzZUlkKCk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZ2lzdGVyKGlkKTsgfSwgW10pO1xuICAgIHZhciBzYWZlVG9SZW1vdmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvbkV4aXRDb21wbGV0ZSA9PT0gbnVsbCB8fCBvbkV4aXRDb21wbGV0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FeGl0Q29tcGxldGUoaWQpOyB9O1xuICAgIHJldHVybiAhaXNQcmVzZW50ICYmIG9uRXhpdENvbXBsZXRlID8gW2ZhbHNlLCBzYWZlVG9SZW1vdmVdIDogW3RydWVdO1xufVxuLyoqXG4gKiBTaW1pbGFyIHRvIGB1c2VQcmVzZW5jZWAsIGV4Y2VwdCBgdXNlSXNQcmVzZW50YCBzaW1wbHkgcmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgY29tcG9uZW50IGlzIHByZXNlbnQuXG4gKiBUaGVyZSBpcyBubyBgc2FmZVRvUmVtb3ZlYCBmdW5jdGlvbi5cbiAqXG4gKiBgYGBqc3hcbiAqIGltcG9ydCB7IHVzZUlzUHJlc2VudCB9IGZyb20gXCJmcmFtZXItbW90aW9uXCJcbiAqXG4gKiBleHBvcnQgY29uc3QgQ29tcG9uZW50ID0gKCkgPT4ge1xuICogICBjb25zdCBpc1ByZXNlbnQgPSB1c2VJc1ByZXNlbnQoKVxuICpcbiAqICAgdXNlRWZmZWN0KCgpID0+IHtcbiAqICAgICAhaXNQcmVzZW50ICYmIGNvbnNvbGUubG9nKFwiSSd2ZSBiZWVuIHJlbW92ZWQhXCIpXG4gKiAgIH0sIFtpc1ByZXNlbnRdKVxuICpcbiAqICAgcmV0dXJuIDxkaXYgLz5cbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gdXNlSXNQcmVzZW50KCkge1xuICAgIHJldHVybiBpc1ByZXNlbnQodXNlQ29udGV4dChQcmVzZW5jZUNvbnRleHQpKTtcbn1cbmZ1bmN0aW9uIGlzUHJlc2VudChjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQgPT09IG51bGwgPyB0cnVlIDogY29udGV4dC5pc1ByZXNlbnQ7XG59XG5cbmV4cG9ydCB7IGlzUHJlc2VudCwgdXNlSXNQcmVzZW50LCB1c2VQcmVzZW5jZSB9O1xuIiwiZnVuY3Rpb24gc2hhbGxvd0NvbXBhcmUobmV4dCwgcHJldikge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShwcmV2KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBwcmV2TGVuZ3RoID0gcHJldi5sZW5ndGg7XG4gICAgaWYgKHByZXZMZW5ndGggIT09IG5leHQubGVuZ3RoKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmV2TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHByZXZbaV0gIT09IG5leHRbaV0pXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgeyBzaGFsbG93Q29tcGFyZSB9O1xuIiwiY29uc3QgY2xhbXAgPSAobWluLCBtYXgsIHYpID0+IE1hdGgubWluKE1hdGgubWF4KHYsIG1pbiksIG1heCk7XG5cbmV4cG9ydCB7IGNsYW1wIH07XG4iLCJpbXBvcnQgeyB3YXJuaW5nIH0gZnJvbSAnaGV5LWxpc3Rlbic7XG5pbXBvcnQgeyBjbGFtcCB9IGZyb20gJy4uLy4uL3V0aWxzL2NsYW1wLm1qcyc7XG5cbmNvbnN0IHNhZmVNaW4gPSAwLjAwMTtcbmNvbnN0IG1pbkR1cmF0aW9uID0gMC4wMTtcbmNvbnN0IG1heER1cmF0aW9uID0gMTAuMDtcbmNvbnN0IG1pbkRhbXBpbmcgPSAwLjA1O1xuY29uc3QgbWF4RGFtcGluZyA9IDE7XG5mdW5jdGlvbiBmaW5kU3ByaW5nKHsgZHVyYXRpb24gPSA4MDAsIGJvdW5jZSA9IDAuMjUsIHZlbG9jaXR5ID0gMCwgbWFzcyA9IDEsIH0pIHtcbiAgICBsZXQgZW52ZWxvcGU7XG4gICAgbGV0IGRlcml2YXRpdmU7XG4gICAgd2FybmluZyhkdXJhdGlvbiA8PSBtYXhEdXJhdGlvbiAqIDEwMDAsIFwiU3ByaW5nIGR1cmF0aW9uIG11c3QgYmUgMTAgc2Vjb25kcyBvciBsZXNzXCIpO1xuICAgIGxldCBkYW1waW5nUmF0aW8gPSAxIC0gYm91bmNlO1xuICAgIGRhbXBpbmdSYXRpbyA9IGNsYW1wKG1pbkRhbXBpbmcsIG1heERhbXBpbmcsIGRhbXBpbmdSYXRpbyk7XG4gICAgZHVyYXRpb24gPSBjbGFtcChtaW5EdXJhdGlvbiwgbWF4RHVyYXRpb24sIGR1cmF0aW9uIC8gMTAwMCk7XG4gICAgaWYgKGRhbXBpbmdSYXRpbyA8IDEpIHtcbiAgICAgICAgZW52ZWxvcGUgPSAodW5kYW1wZWRGcmVxKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBleHBvbmVudGlhbERlY2F5ID0gdW5kYW1wZWRGcmVxICogZGFtcGluZ1JhdGlvO1xuICAgICAgICAgICAgY29uc3QgZGVsdGEgPSBleHBvbmVudGlhbERlY2F5ICogZHVyYXRpb247XG4gICAgICAgICAgICBjb25zdCBhID0gZXhwb25lbnRpYWxEZWNheSAtIHZlbG9jaXR5O1xuICAgICAgICAgICAgY29uc3QgYiA9IGNhbGNBbmd1bGFyRnJlcSh1bmRhbXBlZEZyZXEsIGRhbXBpbmdSYXRpbyk7XG4gICAgICAgICAgICBjb25zdCBjID0gTWF0aC5leHAoLWRlbHRhKTtcbiAgICAgICAgICAgIHJldHVybiBzYWZlTWluIC0gKGEgLyBiKSAqIGM7XG4gICAgICAgIH07XG4gICAgICAgIGRlcml2YXRpdmUgPSAodW5kYW1wZWRGcmVxKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBleHBvbmVudGlhbERlY2F5ID0gdW5kYW1wZWRGcmVxICogZGFtcGluZ1JhdGlvO1xuICAgICAgICAgICAgY29uc3QgZGVsdGEgPSBleHBvbmVudGlhbERlY2F5ICogZHVyYXRpb247XG4gICAgICAgICAgICBjb25zdCBkID0gZGVsdGEgKiB2ZWxvY2l0eSArIHZlbG9jaXR5O1xuICAgICAgICAgICAgY29uc3QgZSA9IE1hdGgucG93KGRhbXBpbmdSYXRpbywgMikgKiBNYXRoLnBvdyh1bmRhbXBlZEZyZXEsIDIpICogZHVyYXRpb247XG4gICAgICAgICAgICBjb25zdCBmID0gTWF0aC5leHAoLWRlbHRhKTtcbiAgICAgICAgICAgIGNvbnN0IGcgPSBjYWxjQW5ndWxhckZyZXEoTWF0aC5wb3codW5kYW1wZWRGcmVxLCAyKSwgZGFtcGluZ1JhdGlvKTtcbiAgICAgICAgICAgIGNvbnN0IGZhY3RvciA9IC1lbnZlbG9wZSh1bmRhbXBlZEZyZXEpICsgc2FmZU1pbiA+IDAgPyAtMSA6IDE7XG4gICAgICAgICAgICByZXR1cm4gKGZhY3RvciAqICgoZCAtIGUpICogZikpIC8gZztcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGVudmVsb3BlID0gKHVuZGFtcGVkRnJlcSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYSA9IE1hdGguZXhwKC11bmRhbXBlZEZyZXEgKiBkdXJhdGlvbik7XG4gICAgICAgICAgICBjb25zdCBiID0gKHVuZGFtcGVkRnJlcSAtIHZlbG9jaXR5KSAqIGR1cmF0aW9uICsgMTtcbiAgICAgICAgICAgIHJldHVybiAtc2FmZU1pbiArIGEgKiBiO1xuICAgICAgICB9O1xuICAgICAgICBkZXJpdmF0aXZlID0gKHVuZGFtcGVkRnJlcSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYSA9IE1hdGguZXhwKC11bmRhbXBlZEZyZXEgKiBkdXJhdGlvbik7XG4gICAgICAgICAgICBjb25zdCBiID0gKHZlbG9jaXR5IC0gdW5kYW1wZWRGcmVxKSAqIChkdXJhdGlvbiAqIGR1cmF0aW9uKTtcbiAgICAgICAgICAgIHJldHVybiBhICogYjtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgaW5pdGlhbEd1ZXNzID0gNSAvIGR1cmF0aW9uO1xuICAgIGNvbnN0IHVuZGFtcGVkRnJlcSA9IGFwcHJveGltYXRlUm9vdChlbnZlbG9wZSwgZGVyaXZhdGl2ZSwgaW5pdGlhbEd1ZXNzKTtcbiAgICBkdXJhdGlvbiA9IGR1cmF0aW9uICogMTAwMDtcbiAgICBpZiAoaXNOYU4odW5kYW1wZWRGcmVxKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RpZmZuZXNzOiAxMDAsXG4gICAgICAgICAgICBkYW1waW5nOiAxMCxcbiAgICAgICAgICAgIGR1cmF0aW9uLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3RpZmZuZXNzID0gTWF0aC5wb3codW5kYW1wZWRGcmVxLCAyKSAqIG1hc3M7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGlmZm5lc3MsXG4gICAgICAgICAgICBkYW1waW5nOiBkYW1waW5nUmF0aW8gKiAyICogTWF0aC5zcXJ0KG1hc3MgKiBzdGlmZm5lc3MpLFxuICAgICAgICAgICAgZHVyYXRpb24sXG4gICAgICAgIH07XG4gICAgfVxufVxuY29uc3Qgcm9vdEl0ZXJhdGlvbnMgPSAxMjtcbmZ1bmN0aW9uIGFwcHJveGltYXRlUm9vdChlbnZlbG9wZSwgZGVyaXZhdGl2ZSwgaW5pdGlhbEd1ZXNzKSB7XG4gICAgbGV0IHJlc3VsdCA9IGluaXRpYWxHdWVzcztcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHJvb3RJdGVyYXRpb25zOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0IC0gZW52ZWxvcGUocmVzdWx0KSAvIGRlcml2YXRpdmUocmVzdWx0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGNhbGNBbmd1bGFyRnJlcSh1bmRhbXBlZEZyZXEsIGRhbXBpbmdSYXRpbykge1xuICAgIHJldHVybiB1bmRhbXBlZEZyZXEgKiBNYXRoLnNxcnQoMSAtIGRhbXBpbmdSYXRpbyAqIGRhbXBpbmdSYXRpbyk7XG59XG5cbmV4cG9ydCB7IGNhbGNBbmd1bGFyRnJlcSwgZmluZFNwcmluZywgbWF4RGFtcGluZywgbWF4RHVyYXRpb24sIG1pbkRhbXBpbmcsIG1pbkR1cmF0aW9uIH07XG4iLCJpbXBvcnQgeyBfX3Jlc3QgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBmaW5kU3ByaW5nLCBjYWxjQW5ndWxhckZyZXEgfSBmcm9tICcuLi91dGlscy9maW5kLXNwcmluZy5tanMnO1xuXG5jb25zdCBkdXJhdGlvbktleXMgPSBbXCJkdXJhdGlvblwiLCBcImJvdW5jZVwiXTtcbmNvbnN0IHBoeXNpY3NLZXlzID0gW1wic3RpZmZuZXNzXCIsIFwiZGFtcGluZ1wiLCBcIm1hc3NcIl07XG5mdW5jdGlvbiBpc1NwcmluZ1R5cGUob3B0aW9ucywga2V5cykge1xuICAgIHJldHVybiBrZXlzLnNvbWUoKGtleSkgPT4gb3B0aW9uc1trZXldICE9PSB1bmRlZmluZWQpO1xufVxuZnVuY3Rpb24gZ2V0U3ByaW5nT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgbGV0IHNwcmluZ09wdGlvbnMgPSBPYmplY3QuYXNzaWduKHsgdmVsb2NpdHk6IDAuMCwgc3RpZmZuZXNzOiAxMDAsIGRhbXBpbmc6IDEwLCBtYXNzOiAxLjAsIGlzUmVzb2x2ZWRGcm9tRHVyYXRpb246IGZhbHNlIH0sIG9wdGlvbnMpO1xuICAgIGlmICghaXNTcHJpbmdUeXBlKG9wdGlvbnMsIHBoeXNpY3NLZXlzKSAmJlxuICAgICAgICBpc1NwcmluZ1R5cGUob3B0aW9ucywgZHVyYXRpb25LZXlzKSkge1xuICAgICAgICBjb25zdCBkZXJpdmVkID0gZmluZFNwcmluZyhvcHRpb25zKTtcbiAgICAgICAgc3ByaW5nT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzcHJpbmdPcHRpb25zKSwgZGVyaXZlZCksIHsgdmVsb2NpdHk6IDAuMCwgbWFzczogMS4wIH0pO1xuICAgICAgICBzcHJpbmdPcHRpb25zLmlzUmVzb2x2ZWRGcm9tRHVyYXRpb24gPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gc3ByaW5nT3B0aW9ucztcbn1cbmZ1bmN0aW9uIHNwcmluZyhfYSkge1xuICAgIHZhciB7IGZyb20gPSAwLjAsIHRvID0gMS4wLCByZXN0U3BlZWQgPSAyLCByZXN0RGVsdGEgfSA9IF9hLCBvcHRpb25zID0gX19yZXN0KF9hLCBbXCJmcm9tXCIsIFwidG9cIiwgXCJyZXN0U3BlZWRcIiwgXCJyZXN0RGVsdGFcIl0pO1xuICAgIGNvbnN0IHN0YXRlID0geyBkb25lOiBmYWxzZSwgdmFsdWU6IGZyb20gfTtcbiAgICBsZXQgeyBzdGlmZm5lc3MsIGRhbXBpbmcsIG1hc3MsIHZlbG9jaXR5LCBkdXJhdGlvbiwgaXNSZXNvbHZlZEZyb21EdXJhdGlvbiwgfSA9IGdldFNwcmluZ09wdGlvbnMob3B0aW9ucyk7XG4gICAgbGV0IHJlc29sdmVTcHJpbmcgPSB6ZXJvO1xuICAgIGxldCByZXNvbHZlVmVsb2NpdHkgPSB6ZXJvO1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVNwcmluZygpIHtcbiAgICAgICAgY29uc3QgaW5pdGlhbFZlbG9jaXR5ID0gdmVsb2NpdHkgPyAtKHZlbG9jaXR5IC8gMTAwMCkgOiAwLjA7XG4gICAgICAgIGNvbnN0IGluaXRpYWxEZWx0YSA9IHRvIC0gZnJvbTtcbiAgICAgICAgY29uc3QgZGFtcGluZ1JhdGlvID0gZGFtcGluZyAvICgyICogTWF0aC5zcXJ0KHN0aWZmbmVzcyAqIG1hc3MpKTtcbiAgICAgICAgY29uc3QgdW5kYW1wZWRBbmd1bGFyRnJlcSA9IE1hdGguc3FydChzdGlmZm5lc3MgLyBtYXNzKSAvIDEwMDA7XG4gICAgICAgIGlmIChyZXN0RGVsdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVzdERlbHRhID0gTWF0aC5taW4oTWF0aC5hYnModG8gLSBmcm9tKSAvIDEwMCwgMC40KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGFtcGluZ1JhdGlvIDwgMSkge1xuICAgICAgICAgICAgY29uc3QgYW5ndWxhckZyZXEgPSBjYWxjQW5ndWxhckZyZXEodW5kYW1wZWRBbmd1bGFyRnJlcSwgZGFtcGluZ1JhdGlvKTtcbiAgICAgICAgICAgIHJlc29sdmVTcHJpbmcgPSAodCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudmVsb3BlID0gTWF0aC5leHAoLWRhbXBpbmdSYXRpbyAqIHVuZGFtcGVkQW5ndWxhckZyZXEgKiB0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRvIC1cbiAgICAgICAgICAgICAgICAgICAgZW52ZWxvcGUgKlxuICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW5pdGlhbFZlbG9jaXR5ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYW1waW5nUmF0aW8gKiB1bmRhbXBlZEFuZ3VsYXJGcmVxICogaW5pdGlhbERlbHRhKSAvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ndWxhckZyZXEpICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLnNpbihhbmd1bGFyRnJlcSAqIHQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsRGVsdGEgKiBNYXRoLmNvcyhhbmd1bGFyRnJlcSAqIHQpKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzb2x2ZVZlbG9jaXR5ID0gKHQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnZlbG9wZSA9IE1hdGguZXhwKC1kYW1waW5nUmF0aW8gKiB1bmRhbXBlZEFuZ3VsYXJGcmVxICogdCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChkYW1waW5nUmF0aW8gKlxuICAgICAgICAgICAgICAgICAgICB1bmRhbXBlZEFuZ3VsYXJGcmVxICpcbiAgICAgICAgICAgICAgICAgICAgZW52ZWxvcGUgKlxuICAgICAgICAgICAgICAgICAgICAoKE1hdGguc2luKGFuZ3VsYXJGcmVxICogdCkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgKGluaXRpYWxWZWxvY2l0eSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFtcGluZ1JhdGlvICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kYW1wZWRBbmd1bGFyRnJlcSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxEZWx0YSkpIC9cbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZ3VsYXJGcmVxICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxEZWx0YSAqIE1hdGguY29zKGFuZ3VsYXJGcmVxICogdCkpIC1cbiAgICAgICAgICAgICAgICAgICAgZW52ZWxvcGUgKlxuICAgICAgICAgICAgICAgICAgICAgICAgKE1hdGguY29zKGFuZ3VsYXJGcmVxICogdCkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbml0aWFsVmVsb2NpdHkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYW1waW5nUmF0aW8gKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kYW1wZWRBbmd1bGFyRnJlcSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsRGVsdGEpIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmd1bGFyRnJlcSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxEZWx0YSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGguc2luKGFuZ3VsYXJGcmVxICogdCkpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGFtcGluZ1JhdGlvID09PSAxKSB7XG4gICAgICAgICAgICByZXNvbHZlU3ByaW5nID0gKHQpID0+IHRvIC1cbiAgICAgICAgICAgICAgICBNYXRoLmV4cCgtdW5kYW1wZWRBbmd1bGFyRnJlcSAqIHQpICpcbiAgICAgICAgICAgICAgICAgICAgKGluaXRpYWxEZWx0YSArXG4gICAgICAgICAgICAgICAgICAgICAgICAoaW5pdGlhbFZlbG9jaXR5ICsgdW5kYW1wZWRBbmd1bGFyRnJlcSAqIGluaXRpYWxEZWx0YSkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGFtcGVkQW5ndWxhckZyZXEgPSB1bmRhbXBlZEFuZ3VsYXJGcmVxICogTWF0aC5zcXJ0KGRhbXBpbmdSYXRpbyAqIGRhbXBpbmdSYXRpbyAtIDEpO1xuICAgICAgICAgICAgcmVzb2x2ZVNwcmluZyA9ICh0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW52ZWxvcGUgPSBNYXRoLmV4cCgtZGFtcGluZ1JhdGlvICogdW5kYW1wZWRBbmd1bGFyRnJlcSAqIHQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZyZXFGb3JUID0gTWF0aC5taW4oZGFtcGVkQW5ndWxhckZyZXEgKiB0LCAzMDApO1xuICAgICAgICAgICAgICAgIHJldHVybiAodG8gLVxuICAgICAgICAgICAgICAgICAgICAoZW52ZWxvcGUgKlxuICAgICAgICAgICAgICAgICAgICAgICAgKChpbml0aWFsVmVsb2NpdHkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbXBpbmdSYXRpbyAqIHVuZGFtcGVkQW5ndWxhckZyZXEgKiBpbml0aWFsRGVsdGEpICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLnNpbmgoZnJlcUZvclQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYW1wZWRBbmd1bGFyRnJlcSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxEZWx0YSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGguY29zaChmcmVxRm9yVCkpKSAvXG4gICAgICAgICAgICAgICAgICAgICAgICBkYW1wZWRBbmd1bGFyRnJlcSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGNyZWF0ZVNwcmluZygpO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6ICh0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gcmVzb2x2ZVNwcmluZyh0KTtcbiAgICAgICAgICAgIGlmICghaXNSZXNvbHZlZEZyb21EdXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWZWxvY2l0eSA9IHJlc29sdmVWZWxvY2l0eSh0KSAqIDEwMDA7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNCZWxvd1ZlbG9jaXR5VGhyZXNob2xkID0gTWF0aC5hYnMoY3VycmVudFZlbG9jaXR5KSA8PSByZXN0U3BlZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNCZWxvd0Rpc3BsYWNlbWVudFRocmVzaG9sZCA9IE1hdGguYWJzKHRvIC0gY3VycmVudCkgPD0gcmVzdERlbHRhO1xuICAgICAgICAgICAgICAgIHN0YXRlLmRvbmUgPVxuICAgICAgICAgICAgICAgICAgICBpc0JlbG93VmVsb2NpdHlUaHJlc2hvbGQgJiYgaXNCZWxvd0Rpc3BsYWNlbWVudFRocmVzaG9sZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0YXRlLmRvbmUgPSB0ID49IGR1cmF0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGUudmFsdWUgPSBzdGF0ZS5kb25lID8gdG8gOiBjdXJyZW50O1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICB9LFxuICAgICAgICBmbGlwVGFyZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICB2ZWxvY2l0eSA9IC12ZWxvY2l0eTtcbiAgICAgICAgICAgIFtmcm9tLCB0b10gPSBbdG8sIGZyb21dO1xuICAgICAgICAgICAgY3JlYXRlU3ByaW5nKCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbnNwcmluZy5uZWVkc0ludGVycG9sYXRpb24gPSAoYSwgYikgPT4gdHlwZW9mIGEgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIGIgPT09IFwic3RyaW5nXCI7XG5jb25zdCB6ZXJvID0gKF90KSA9PiAwO1xuXG5leHBvcnQgeyBzcHJpbmcgfTtcbiIsImNvbnN0IHByb2dyZXNzID0gKGZyb20sIHRvLCB2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IHRvRnJvbURpZmZlcmVuY2UgPSB0byAtIGZyb207XG4gICAgcmV0dXJuIHRvRnJvbURpZmZlcmVuY2UgPT09IDAgPyAxIDogKHZhbHVlIC0gZnJvbSkgLyB0b0Zyb21EaWZmZXJlbmNlO1xufTtcblxuZXhwb3J0IHsgcHJvZ3Jlc3MgfTtcbiIsImNvbnN0IG1peCA9IChmcm9tLCB0bywgcHJvZ3Jlc3MpID0+IC1wcm9ncmVzcyAqIGZyb20gKyBwcm9ncmVzcyAqIHRvICsgZnJvbTtcblxuZXhwb3J0IHsgbWl4IH07XG4iLCJpbXBvcnQgeyBpc1N0cmluZywgc2luZ2xlQ29sb3JSZWdleCwgZmxvYXRSZWdleCB9IGZyb20gJy4uL3V0aWxzLm1qcyc7XG5cbmNvbnN0IGlzQ29sb3JTdHJpbmcgPSAodHlwZSwgdGVzdFByb3ApID0+ICh2KSA9PiB7XG4gICAgcmV0dXJuIEJvb2xlYW4oKGlzU3RyaW5nKHYpICYmIHNpbmdsZUNvbG9yUmVnZXgudGVzdCh2KSAmJiB2LnN0YXJ0c1dpdGgodHlwZSkpIHx8XG4gICAgICAgICh0ZXN0UHJvcCAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodiwgdGVzdFByb3ApKSk7XG59O1xuY29uc3Qgc3BsaXRDb2xvciA9IChhTmFtZSwgYk5hbWUsIGNOYW1lKSA9PiAodikgPT4ge1xuICAgIGlmICghaXNTdHJpbmcodikpXG4gICAgICAgIHJldHVybiB2O1xuICAgIGNvbnN0IFthLCBiLCBjLCBhbHBoYV0gPSB2Lm1hdGNoKGZsb2F0UmVnZXgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIFthTmFtZV06IHBhcnNlRmxvYXQoYSksXG4gICAgICAgIFtiTmFtZV06IHBhcnNlRmxvYXQoYiksXG4gICAgICAgIFtjTmFtZV06IHBhcnNlRmxvYXQoYyksXG4gICAgICAgIGFscGhhOiBhbHBoYSAhPT0gdW5kZWZpbmVkID8gcGFyc2VGbG9hdChhbHBoYSkgOiAxLFxuICAgIH07XG59O1xuXG5leHBvcnQgeyBpc0NvbG9yU3RyaW5nLCBzcGxpdENvbG9yIH07XG4iLCJpbXBvcnQgeyBudW1iZXIsIGFscGhhIH0gZnJvbSAnLi4vbnVtYmVycy9pbmRleC5tanMnO1xuaW1wb3J0IHsgc2FuaXRpemUsIGNsYW1wIH0gZnJvbSAnLi4vdXRpbHMubWpzJztcbmltcG9ydCB7IGlzQ29sb3JTdHJpbmcsIHNwbGl0Q29sb3IgfSBmcm9tICcuL3V0aWxzLm1qcyc7XG5cbmNvbnN0IGNsYW1wUmdiVW5pdCA9IGNsYW1wKDAsIDI1NSk7XG5jb25zdCByZ2JVbml0ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBudW1iZXIpLCB7IHRyYW5zZm9ybTogKHYpID0+IE1hdGgucm91bmQoY2xhbXBSZ2JVbml0KHYpKSB9KTtcbmNvbnN0IHJnYmEgPSB7XG4gICAgdGVzdDogaXNDb2xvclN0cmluZygncmdiJywgJ3JlZCcpLFxuICAgIHBhcnNlOiBzcGxpdENvbG9yKCdyZWQnLCAnZ3JlZW4nLCAnYmx1ZScpLFxuICAgIHRyYW5zZm9ybTogKHsgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE6IGFscGhhJDEgPSAxIH0pID0+ICdyZ2JhKCcgK1xuICAgICAgICByZ2JVbml0LnRyYW5zZm9ybShyZWQpICtcbiAgICAgICAgJywgJyArXG4gICAgICAgIHJnYlVuaXQudHJhbnNmb3JtKGdyZWVuKSArXG4gICAgICAgICcsICcgK1xuICAgICAgICByZ2JVbml0LnRyYW5zZm9ybShibHVlKSArXG4gICAgICAgICcsICcgK1xuICAgICAgICBzYW5pdGl6ZShhbHBoYS50cmFuc2Zvcm0oYWxwaGEkMSkpICtcbiAgICAgICAgJyknLFxufTtcblxuZXhwb3J0IHsgcmdiVW5pdCwgcmdiYSB9O1xuIiwiaW1wb3J0IHsgcmdiYSB9IGZyb20gJy4vcmdiYS5tanMnO1xuaW1wb3J0IHsgaXNDb2xvclN0cmluZyB9IGZyb20gJy4vdXRpbHMubWpzJztcblxuZnVuY3Rpb24gcGFyc2VIZXgodikge1xuICAgIGxldCByID0gJyc7XG4gICAgbGV0IGcgPSAnJztcbiAgICBsZXQgYiA9ICcnO1xuICAgIGxldCBhID0gJyc7XG4gICAgaWYgKHYubGVuZ3RoID4gNSkge1xuICAgICAgICByID0gdi5zdWJzdHIoMSwgMik7XG4gICAgICAgIGcgPSB2LnN1YnN0cigzLCAyKTtcbiAgICAgICAgYiA9IHYuc3Vic3RyKDUsIDIpO1xuICAgICAgICBhID0gdi5zdWJzdHIoNywgMik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByID0gdi5zdWJzdHIoMSwgMSk7XG4gICAgICAgIGcgPSB2LnN1YnN0cigyLCAxKTtcbiAgICAgICAgYiA9IHYuc3Vic3RyKDMsIDEpO1xuICAgICAgICBhID0gdi5zdWJzdHIoNCwgMSk7XG4gICAgICAgIHIgKz0gcjtcbiAgICAgICAgZyArPSBnO1xuICAgICAgICBiICs9IGI7XG4gICAgICAgIGEgKz0gYTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVkOiBwYXJzZUludChyLCAxNiksXG4gICAgICAgIGdyZWVuOiBwYXJzZUludChnLCAxNiksXG4gICAgICAgIGJsdWU6IHBhcnNlSW50KGIsIDE2KSxcbiAgICAgICAgYWxwaGE6IGEgPyBwYXJzZUludChhLCAxNikgLyAyNTUgOiAxLFxuICAgIH07XG59XG5jb25zdCBoZXggPSB7XG4gICAgdGVzdDogaXNDb2xvclN0cmluZygnIycpLFxuICAgIHBhcnNlOiBwYXJzZUhleCxcbiAgICB0cmFuc2Zvcm06IHJnYmEudHJhbnNmb3JtLFxufTtcblxuZXhwb3J0IHsgaGV4IH07XG4iLCJpbXBvcnQgeyBhbHBoYSB9IGZyb20gJy4uL251bWJlcnMvaW5kZXgubWpzJztcbmltcG9ydCB7IHBlcmNlbnQgfSBmcm9tICcuLi9udW1iZXJzL3VuaXRzLm1qcyc7XG5pbXBvcnQgeyBzYW5pdGl6ZSB9IGZyb20gJy4uL3V0aWxzLm1qcyc7XG5pbXBvcnQgeyBpc0NvbG9yU3RyaW5nLCBzcGxpdENvbG9yIH0gZnJvbSAnLi91dGlscy5tanMnO1xuXG5jb25zdCBoc2xhID0ge1xuICAgIHRlc3Q6IGlzQ29sb3JTdHJpbmcoJ2hzbCcsICdodWUnKSxcbiAgICBwYXJzZTogc3BsaXRDb2xvcignaHVlJywgJ3NhdHVyYXRpb24nLCAnbGlnaHRuZXNzJyksXG4gICAgdHJhbnNmb3JtOiAoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGE6IGFscGhhJDEgPSAxIH0pID0+IHtcbiAgICAgICAgcmV0dXJuICgnaHNsYSgnICtcbiAgICAgICAgICAgIE1hdGgucm91bmQoaHVlKSArXG4gICAgICAgICAgICAnLCAnICtcbiAgICAgICAgICAgIHBlcmNlbnQudHJhbnNmb3JtKHNhbml0aXplKHNhdHVyYXRpb24pKSArXG4gICAgICAgICAgICAnLCAnICtcbiAgICAgICAgICAgIHBlcmNlbnQudHJhbnNmb3JtKHNhbml0aXplKGxpZ2h0bmVzcykpICtcbiAgICAgICAgICAgICcsICcgK1xuICAgICAgICAgICAgc2FuaXRpemUoYWxwaGEudHJhbnNmb3JtKGFscGhhJDEpKSArXG4gICAgICAgICAgICAnKScpO1xuICAgIH0sXG59O1xuXG5leHBvcnQgeyBoc2xhIH07XG4iLCJmdW5jdGlvbiBodWVUb1JnYihwLCBxLCB0KSB7XG4gICAgaWYgKHQgPCAwKVxuICAgICAgICB0ICs9IDE7XG4gICAgaWYgKHQgPiAxKVxuICAgICAgICB0IC09IDE7XG4gICAgaWYgKHQgPCAxIC8gNilcbiAgICAgICAgcmV0dXJuIHAgKyAocSAtIHApICogNiAqIHQ7XG4gICAgaWYgKHQgPCAxIC8gMilcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgaWYgKHQgPCAyIC8gMylcbiAgICAgICAgcmV0dXJuIHAgKyAocSAtIHApICogKDIgLyAzIC0gdCkgKiA2O1xuICAgIHJldHVybiBwO1xufVxuZnVuY3Rpb24gaHNsYVRvUmdiYSh7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9KSB7XG4gICAgaHVlIC89IDM2MDtcbiAgICBzYXR1cmF0aW9uIC89IDEwMDtcbiAgICBsaWdodG5lc3MgLz0gMTAwO1xuICAgIGxldCByZWQgPSAwO1xuICAgIGxldCBncmVlbiA9IDA7XG4gICAgbGV0IGJsdWUgPSAwO1xuICAgIGlmICghc2F0dXJhdGlvbikge1xuICAgICAgICByZWQgPSBncmVlbiA9IGJsdWUgPSBsaWdodG5lc3M7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBxID0gbGlnaHRuZXNzIDwgMC41XG4gICAgICAgICAgICA/IGxpZ2h0bmVzcyAqICgxICsgc2F0dXJhdGlvbilcbiAgICAgICAgICAgIDogbGlnaHRuZXNzICsgc2F0dXJhdGlvbiAtIGxpZ2h0bmVzcyAqIHNhdHVyYXRpb247XG4gICAgICAgIGNvbnN0IHAgPSAyICogbGlnaHRuZXNzIC0gcTtcbiAgICAgICAgcmVkID0gaHVlVG9SZ2IocCwgcSwgaHVlICsgMSAvIDMpO1xuICAgICAgICBncmVlbiA9IGh1ZVRvUmdiKHAsIHEsIGh1ZSk7XG4gICAgICAgIGJsdWUgPSBodWVUb1JnYihwLCBxLCBodWUgLSAxIC8gMyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHJlZDogTWF0aC5yb3VuZChyZWQgKiAyNTUpLFxuICAgICAgICBncmVlbjogTWF0aC5yb3VuZChncmVlbiAqIDI1NSksXG4gICAgICAgIGJsdWU6IE1hdGgucm91bmQoYmx1ZSAqIDI1NSksXG4gICAgICAgIGFscGhhLFxuICAgIH07XG59XG5cbmV4cG9ydCB7IGhzbGFUb1JnYmEgfTtcbiIsImltcG9ydCB7IG1peCB9IGZyb20gJy4vbWl4Lm1qcyc7XG5pbXBvcnQgeyBoc2xhLCByZ2JhLCBoZXggfSBmcm9tICdzdHlsZS12YWx1ZS10eXBlcyc7XG5pbXBvcnQgeyBpbnZhcmlhbnQgfSBmcm9tICdoZXktbGlzdGVuJztcbmltcG9ydCB7IGhzbGFUb1JnYmEgfSBmcm9tICcuL2hzbGEtdG8tcmdiYS5tanMnO1xuXG5jb25zdCBtaXhMaW5lYXJDb2xvciA9IChmcm9tLCB0bywgdikgPT4ge1xuICAgIGNvbnN0IGZyb21FeHBvID0gZnJvbSAqIGZyb207XG4gICAgY29uc3QgdG9FeHBvID0gdG8gKiB0bztcbiAgICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgubWF4KDAsIHYgKiAodG9FeHBvIC0gZnJvbUV4cG8pICsgZnJvbUV4cG8pKTtcbn07XG5jb25zdCBjb2xvclR5cGVzID0gW2hleCwgcmdiYSwgaHNsYV07XG5jb25zdCBnZXRDb2xvclR5cGUgPSAodikgPT4gY29sb3JUeXBlcy5maW5kKCh0eXBlKSA9PiB0eXBlLnRlc3QodikpO1xuY29uc3Qgbm90QW5pbWF0YWJsZSA9IChjb2xvcikgPT4gYCcke2NvbG9yfScgaXMgbm90IGFuIGFuaW1hdGFibGUgY29sb3IuIFVzZSB0aGUgZXF1aXZhbGVudCBjb2xvciBjb2RlIGluc3RlYWQuYDtcbmNvbnN0IG1peENvbG9yID0gKGZyb20sIHRvKSA9PiB7XG4gICAgbGV0IGZyb21Db2xvclR5cGUgPSBnZXRDb2xvclR5cGUoZnJvbSk7XG4gICAgbGV0IHRvQ29sb3JUeXBlID0gZ2V0Q29sb3JUeXBlKHRvKTtcbiAgICBpbnZhcmlhbnQoISFmcm9tQ29sb3JUeXBlLCBub3RBbmltYXRhYmxlKGZyb20pKTtcbiAgICBpbnZhcmlhbnQoISF0b0NvbG9yVHlwZSwgbm90QW5pbWF0YWJsZSh0bykpO1xuICAgIGxldCBmcm9tQ29sb3IgPSBmcm9tQ29sb3JUeXBlLnBhcnNlKGZyb20pO1xuICAgIGxldCB0b0NvbG9yID0gdG9Db2xvclR5cGUucGFyc2UodG8pO1xuICAgIGlmIChmcm9tQ29sb3JUeXBlID09PSBoc2xhKSB7XG4gICAgICAgIGZyb21Db2xvciA9IGhzbGFUb1JnYmEoZnJvbUNvbG9yKTtcbiAgICAgICAgZnJvbUNvbG9yVHlwZSA9IHJnYmE7XG4gICAgfVxuICAgIGlmICh0b0NvbG9yVHlwZSA9PT0gaHNsYSkge1xuICAgICAgICB0b0NvbG9yID0gaHNsYVRvUmdiYSh0b0NvbG9yKTtcbiAgICAgICAgdG9Db2xvclR5cGUgPSByZ2JhO1xuICAgIH1cbiAgICBjb25zdCBibGVuZGVkID0gT2JqZWN0LmFzc2lnbih7fSwgZnJvbUNvbG9yKTtcbiAgICByZXR1cm4gKHYpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gYmxlbmRlZCkge1xuICAgICAgICAgICAgaWYgKGtleSAhPT0gXCJhbHBoYVwiKSB7XG4gICAgICAgICAgICAgICAgYmxlbmRlZFtrZXldID0gbWl4TGluZWFyQ29sb3IoZnJvbUNvbG9yW2tleV0sIHRvQ29sb3Jba2V5XSwgdik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYmxlbmRlZC5hbHBoYSA9IG1peChmcm9tQ29sb3IuYWxwaGEsIHRvQ29sb3IuYWxwaGEsIHYpO1xuICAgICAgICByZXR1cm4gZnJvbUNvbG9yVHlwZS50cmFuc2Zvcm0oYmxlbmRlZCk7XG4gICAgfTtcbn07XG5cbmV4cG9ydCB7IG1peENvbG9yLCBtaXhMaW5lYXJDb2xvciB9O1xuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICcuLi91dGlscy5tanMnO1xuaW1wb3J0IHsgaGV4IH0gZnJvbSAnLi9oZXgubWpzJztcbmltcG9ydCB7IGhzbGEgfSBmcm9tICcuL2hzbGEubWpzJztcbmltcG9ydCB7IHJnYmEgfSBmcm9tICcuL3JnYmEubWpzJztcblxuY29uc3QgY29sb3IgPSB7XG4gICAgdGVzdDogKHYpID0+IHJnYmEudGVzdCh2KSB8fCBoZXgudGVzdCh2KSB8fCBoc2xhLnRlc3QodiksXG4gICAgcGFyc2U6ICh2KSA9PiB7XG4gICAgICAgIGlmIChyZ2JhLnRlc3QodikpIHtcbiAgICAgICAgICAgIHJldHVybiByZ2JhLnBhcnNlKHYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhzbGEudGVzdCh2KSkge1xuICAgICAgICAgICAgcmV0dXJuIGhzbGEucGFyc2Uodik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaGV4LnBhcnNlKHYpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB0cmFuc2Zvcm06ICh2KSA9PiB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyh2KVxuICAgICAgICAgICAgPyB2XG4gICAgICAgICAgICA6IHYuaGFzT3duUHJvcGVydHkoJ3JlZCcpXG4gICAgICAgICAgICAgICAgPyByZ2JhLnRyYW5zZm9ybSh2KVxuICAgICAgICAgICAgICAgIDogaHNsYS50cmFuc2Zvcm0odik7XG4gICAgfSxcbn07XG5cbmV4cG9ydCB7IGNvbG9yIH07XG4iLCJpbXBvcnQgeyBjb2xvciB9IGZyb20gJy4uL2NvbG9yL2luZGV4Lm1qcyc7XG5pbXBvcnQgeyBudW1iZXIgfSBmcm9tICcuLi9udW1iZXJzL2luZGV4Lm1qcyc7XG5pbXBvcnQgeyBpc1N0cmluZywgZmxvYXRSZWdleCwgY29sb3JSZWdleCwgc2FuaXRpemUgfSBmcm9tICcuLi91dGlscy5tanMnO1xuXG5jb25zdCBjb2xvclRva2VuID0gJyR7Y30nO1xuY29uc3QgbnVtYmVyVG9rZW4gPSAnJHtufSc7XG5mdW5jdGlvbiB0ZXN0KHYpIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgcmV0dXJuIChpc05hTih2KSAmJlxuICAgICAgICBpc1N0cmluZyh2KSAmJlxuICAgICAgICAoKF9iID0gKF9hID0gdi5tYXRjaChmbG9hdFJlZ2V4KSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogMCkgKyAoKF9kID0gKF9jID0gdi5tYXRjaChjb2xvclJlZ2V4KSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogMCkgPiAwKTtcbn1cbmZ1bmN0aW9uIGFuYWx5c2Uodikge1xuICAgIGlmICh0eXBlb2YgdiA9PT0gJ251bWJlcicpXG4gICAgICAgIHYgPSBgJHt2fWA7XG4gICAgY29uc3QgdmFsdWVzID0gW107XG4gICAgbGV0IG51bUNvbG9ycyA9IDA7XG4gICAgY29uc3QgY29sb3JzID0gdi5tYXRjaChjb2xvclJlZ2V4KTtcbiAgICBpZiAoY29sb3JzKSB7XG4gICAgICAgIG51bUNvbG9ycyA9IGNvbG9ycy5sZW5ndGg7XG4gICAgICAgIHYgPSB2LnJlcGxhY2UoY29sb3JSZWdleCwgY29sb3JUb2tlbik7XG4gICAgICAgIHZhbHVlcy5wdXNoKC4uLmNvbG9ycy5tYXAoY29sb3IucGFyc2UpKTtcbiAgICB9XG4gICAgY29uc3QgbnVtYmVycyA9IHYubWF0Y2goZmxvYXRSZWdleCk7XG4gICAgaWYgKG51bWJlcnMpIHtcbiAgICAgICAgdiA9IHYucmVwbGFjZShmbG9hdFJlZ2V4LCBudW1iZXJUb2tlbik7XG4gICAgICAgIHZhbHVlcy5wdXNoKC4uLm51bWJlcnMubWFwKG51bWJlci5wYXJzZSkpO1xuICAgIH1cbiAgICByZXR1cm4geyB2YWx1ZXMsIG51bUNvbG9ycywgdG9rZW5pc2VkOiB2IH07XG59XG5mdW5jdGlvbiBwYXJzZSh2KSB7XG4gICAgcmV0dXJuIGFuYWx5c2UodikudmFsdWVzO1xufVxuZnVuY3Rpb24gY3JlYXRlVHJhbnNmb3JtZXIodikge1xuICAgIGNvbnN0IHsgdmFsdWVzLCBudW1Db2xvcnMsIHRva2VuaXNlZCB9ID0gYW5hbHlzZSh2KTtcbiAgICBjb25zdCBudW1WYWx1ZXMgPSB2YWx1ZXMubGVuZ3RoO1xuICAgIHJldHVybiAodikgPT4ge1xuICAgICAgICBsZXQgb3V0cHV0ID0gdG9rZW5pc2VkO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVZhbHVlczsgaSsrKSB7XG4gICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQucmVwbGFjZShpIDwgbnVtQ29sb3JzID8gY29sb3JUb2tlbiA6IG51bWJlclRva2VuLCBpIDwgbnVtQ29sb3JzID8gY29sb3IudHJhbnNmb3JtKHZbaV0pIDogc2FuaXRpemUodltpXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfTtcbn1cbmNvbnN0IGNvbnZlcnROdW1iZXJzVG9aZXJvID0gKHYpID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJyA/IDAgOiB2O1xuZnVuY3Rpb24gZ2V0QW5pbWF0YWJsZU5vbmUodikge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlKHYpO1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVHJhbnNmb3JtZXIodik7XG4gICAgcmV0dXJuIHRyYW5zZm9ybWVyKHBhcnNlZC5tYXAoY29udmVydE51bWJlcnNUb1plcm8pKTtcbn1cbmNvbnN0IGNvbXBsZXggPSB7IHRlc3QsIHBhcnNlLCBjcmVhdGVUcmFuc2Zvcm1lciwgZ2V0QW5pbWF0YWJsZU5vbmUgfTtcblxuZXhwb3J0IHsgY29tcGxleCB9O1xuIiwiY29uc3QgemVyb1BvaW50ID0ge1xuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgICB6OiAwXG59O1xuY29uc3QgaXNOdW0gPSAodikgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInO1xuXG5leHBvcnQgeyBpc051bSwgemVyb1BvaW50IH07XG4iLCJpbXBvcnQgeyBjb21wbGV4LCBjb2xvciB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcbmltcG9ydCB7IG1peCB9IGZyb20gJy4vbWl4Lm1qcyc7XG5pbXBvcnQgeyBtaXhDb2xvciB9IGZyb20gJy4vbWl4LWNvbG9yLm1qcyc7XG5pbXBvcnQgeyBpc051bSB9IGZyb20gJy4vaW5jLm1qcyc7XG5pbXBvcnQgeyBwaXBlIH0gZnJvbSAnLi9waXBlLm1qcyc7XG5pbXBvcnQgeyB3YXJuaW5nIH0gZnJvbSAnaGV5LWxpc3Rlbic7XG5cbmZ1bmN0aW9uIGdldE1peGVyKG9yaWdpbiwgdGFyZ2V0KSB7XG4gICAgaWYgKGlzTnVtKG9yaWdpbikpIHtcbiAgICAgICAgcmV0dXJuICh2KSA9PiBtaXgob3JpZ2luLCB0YXJnZXQsIHYpO1xuICAgIH1cbiAgICBlbHNlIGlmIChjb2xvci50ZXN0KG9yaWdpbikpIHtcbiAgICAgICAgcmV0dXJuIG1peENvbG9yKG9yaWdpbiwgdGFyZ2V0KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBtaXhDb21wbGV4KG9yaWdpbiwgdGFyZ2V0KTtcbiAgICB9XG59XG5jb25zdCBtaXhBcnJheSA9IChmcm9tLCB0bykgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IFsuLi5mcm9tXTtcbiAgICBjb25zdCBudW1WYWx1ZXMgPSBvdXRwdXQubGVuZ3RoO1xuICAgIGNvbnN0IGJsZW5kVmFsdWUgPSBmcm9tLm1hcCgoZnJvbVRoaXMsIGkpID0+IGdldE1peGVyKGZyb21UaGlzLCB0b1tpXSkpO1xuICAgIHJldHVybiAodikgPT4ge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVZhbHVlczsgaSsrKSB7XG4gICAgICAgICAgICBvdXRwdXRbaV0gPSBibGVuZFZhbHVlW2ldKHYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfTtcbn07XG5jb25zdCBtaXhPYmplY3QgPSAob3JpZ2luLCB0YXJnZXQpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9yaWdpbiksIHRhcmdldCk7XG4gICAgY29uc3QgYmxlbmRWYWx1ZSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIG91dHB1dCkge1xuICAgICAgICBpZiAob3JpZ2luW2tleV0gIT09IHVuZGVmaW5lZCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBibGVuZFZhbHVlW2tleV0gPSBnZXRNaXhlcihvcmlnaW5ba2V5XSwgdGFyZ2V0W2tleV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAodikgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBibGVuZFZhbHVlKSB7XG4gICAgICAgICAgICBvdXRwdXRba2V5XSA9IGJsZW5kVmFsdWVba2V5XSh2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH07XG59O1xuZnVuY3Rpb24gYW5hbHlzZSh2YWx1ZSkge1xuICAgIGNvbnN0IHBhcnNlZCA9IGNvbXBsZXgucGFyc2UodmFsdWUpO1xuICAgIGNvbnN0IG51bVZhbHVlcyA9IHBhcnNlZC5sZW5ndGg7XG4gICAgbGV0IG51bU51bWJlcnMgPSAwO1xuICAgIGxldCBudW1SR0IgPSAwO1xuICAgIGxldCBudW1IU0wgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtVmFsdWVzOyBpKyspIHtcbiAgICAgICAgaWYgKG51bU51bWJlcnMgfHwgdHlwZW9mIHBhcnNlZFtpXSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgbnVtTnVtYmVycysrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHBhcnNlZFtpXS5odWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG51bUhTTCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbnVtUkdCKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgcGFyc2VkLCBudW1OdW1iZXJzLCBudW1SR0IsIG51bUhTTCB9O1xufVxuY29uc3QgbWl4Q29tcGxleCA9IChvcmlnaW4sIHRhcmdldCkgPT4ge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gY29tcGxleC5jcmVhdGVUcmFuc2Zvcm1lcih0YXJnZXQpO1xuICAgIGNvbnN0IG9yaWdpblN0YXRzID0gYW5hbHlzZShvcmlnaW4pO1xuICAgIGNvbnN0IHRhcmdldFN0YXRzID0gYW5hbHlzZSh0YXJnZXQpO1xuICAgIGNvbnN0IGNhbkludGVycG9sYXRlID0gb3JpZ2luU3RhdHMubnVtSFNMID09PSB0YXJnZXRTdGF0cy5udW1IU0wgJiZcbiAgICAgICAgb3JpZ2luU3RhdHMubnVtUkdCID09PSB0YXJnZXRTdGF0cy5udW1SR0IgJiZcbiAgICAgICAgb3JpZ2luU3RhdHMubnVtTnVtYmVycyA+PSB0YXJnZXRTdGF0cy5udW1OdW1iZXJzO1xuICAgIGlmIChjYW5JbnRlcnBvbGF0ZSkge1xuICAgICAgICByZXR1cm4gcGlwZShtaXhBcnJheShvcmlnaW5TdGF0cy5wYXJzZWQsIHRhcmdldFN0YXRzLnBhcnNlZCksIHRlbXBsYXRlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHdhcm5pbmcodHJ1ZSwgYENvbXBsZXggdmFsdWVzICcke29yaWdpbn0nIGFuZCAnJHt0YXJnZXR9JyB0b28gZGlmZmVyZW50IHRvIG1peC4gRW5zdXJlIGFsbCBjb2xvcnMgYXJlIG9mIHRoZSBzYW1lIHR5cGUsIGFuZCB0aGF0IGVhY2ggY29udGFpbnMgdGhlIHNhbWUgcXVhbnRpdHkgb2YgbnVtYmVyIGFuZCBjb2xvciB2YWx1ZXMuIEZhbGxpbmcgYmFjayB0byBpbnN0YW50IHRyYW5zaXRpb24uYCk7XG4gICAgICAgIHJldHVybiAocCkgPT4gYCR7cCA+IDAgPyB0YXJnZXQgOiBvcmlnaW59YDtcbiAgICB9XG59O1xuXG5leHBvcnQgeyBtaXhBcnJheSwgbWl4Q29tcGxleCwgbWl4T2JqZWN0IH07XG4iLCJpbXBvcnQgeyBwcm9ncmVzcyB9IGZyb20gJy4vcHJvZ3Jlc3MubWpzJztcbmltcG9ydCB7IG1peCB9IGZyb20gJy4vbWl4Lm1qcyc7XG5pbXBvcnQgeyBtaXhDb2xvciB9IGZyb20gJy4vbWl4LWNvbG9yLm1qcyc7XG5pbXBvcnQgeyBtaXhDb21wbGV4LCBtaXhBcnJheSwgbWl4T2JqZWN0IH0gZnJvbSAnLi9taXgtY29tcGxleC5tanMnO1xuaW1wb3J0IHsgY29sb3IgfSBmcm9tICdzdHlsZS12YWx1ZS10eXBlcyc7XG5pbXBvcnQgeyBjbGFtcCB9IGZyb20gJy4vY2xhbXAubWpzJztcbmltcG9ydCB7IHBpcGUgfSBmcm9tICcuL3BpcGUubWpzJztcbmltcG9ydCB7IGludmFyaWFudCB9IGZyb20gJ2hleS1saXN0ZW4nO1xuXG5jb25zdCBtaXhOdW1iZXIgPSAoZnJvbSwgdG8pID0+IChwKSA9PiBtaXgoZnJvbSwgdG8sIHApO1xuZnVuY3Rpb24gZGV0ZWN0TWl4ZXJGYWN0b3J5KHYpIHtcbiAgICBpZiAodHlwZW9mIHYgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiBtaXhOdW1iZXI7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoY29sb3IudGVzdCh2KSkge1xuICAgICAgICAgICAgcmV0dXJuIG1peENvbG9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG1peENvbXBsZXg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2KSkge1xuICAgICAgICByZXR1cm4gbWl4QXJyYXk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiB2ID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbWl4T2JqZWN0O1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZU1peGVycyhvdXRwdXQsIGVhc2UsIGN1c3RvbU1peGVyKSB7XG4gICAgY29uc3QgbWl4ZXJzID0gW107XG4gICAgY29uc3QgbWl4ZXJGYWN0b3J5ID0gY3VzdG9tTWl4ZXIgfHwgZGV0ZWN0TWl4ZXJGYWN0b3J5KG91dHB1dFswXSk7XG4gICAgY29uc3QgbnVtTWl4ZXJzID0gb3V0cHV0Lmxlbmd0aCAtIDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1NaXhlcnM7IGkrKykge1xuICAgICAgICBsZXQgbWl4ZXIgPSBtaXhlckZhY3Rvcnkob3V0cHV0W2ldLCBvdXRwdXRbaSArIDFdKTtcbiAgICAgICAgaWYgKGVhc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGVhc2luZ0Z1bmN0aW9uID0gQXJyYXkuaXNBcnJheShlYXNlKSA/IGVhc2VbaV0gOiBlYXNlO1xuICAgICAgICAgICAgbWl4ZXIgPSBwaXBlKGVhc2luZ0Z1bmN0aW9uLCBtaXhlcik7XG4gICAgICAgIH1cbiAgICAgICAgbWl4ZXJzLnB1c2gobWl4ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gbWl4ZXJzO1xufVxuZnVuY3Rpb24gZmFzdEludGVycG9sYXRlKFtmcm9tLCB0b10sIFttaXhlcl0pIHtcbiAgICByZXR1cm4gKHYpID0+IG1peGVyKHByb2dyZXNzKGZyb20sIHRvLCB2KSk7XG59XG5mdW5jdGlvbiBzbG93SW50ZXJwb2xhdGUoaW5wdXQsIG1peGVycykge1xuICAgIGNvbnN0IGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAgIGNvbnN0IGxhc3RJbnB1dEluZGV4ID0gaW5wdXRMZW5ndGggLSAxO1xuICAgIHJldHVybiAodikgPT4ge1xuICAgICAgICBsZXQgbWl4ZXJJbmRleCA9IDA7XG4gICAgICAgIGxldCBmb3VuZE1peGVySW5kZXggPSBmYWxzZTtcbiAgICAgICAgaWYgKHYgPD0gaW5wdXRbMF0pIHtcbiAgICAgICAgICAgIGZvdW5kTWl4ZXJJbmRleCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodiA+PSBpbnB1dFtsYXN0SW5wdXRJbmRleF0pIHtcbiAgICAgICAgICAgIG1peGVySW5kZXggPSBsYXN0SW5wdXRJbmRleCAtIDE7XG4gICAgICAgICAgICBmb3VuZE1peGVySW5kZXggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZm91bmRNaXhlckluZGV4KSB7XG4gICAgICAgICAgICBsZXQgaSA9IDE7XG4gICAgICAgICAgICBmb3IgKDsgaSA8IGlucHV0TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRbaV0gPiB2IHx8IGkgPT09IGxhc3RJbnB1dEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1peGVySW5kZXggPSBpIC0gMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9ncmVzc0luUmFuZ2UgPSBwcm9ncmVzcyhpbnB1dFttaXhlckluZGV4XSwgaW5wdXRbbWl4ZXJJbmRleCArIDFdLCB2KTtcbiAgICAgICAgcmV0dXJuIG1peGVyc1ttaXhlckluZGV4XShwcm9ncmVzc0luUmFuZ2UpO1xuICAgIH07XG59XG5mdW5jdGlvbiBpbnRlcnBvbGF0ZShpbnB1dCwgb3V0cHV0LCB7IGNsYW1wOiBpc0NsYW1wID0gdHJ1ZSwgZWFzZSwgbWl4ZXIgfSA9IHt9KSB7XG4gICAgY29uc3QgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG4gICAgaW52YXJpYW50KGlucHV0TGVuZ3RoID09PSBvdXRwdXQubGVuZ3RoLCAnQm90aCBpbnB1dCBhbmQgb3V0cHV0IHJhbmdlcyBtdXN0IGJlIHRoZSBzYW1lIGxlbmd0aCcpO1xuICAgIGludmFyaWFudCghZWFzZSB8fCAhQXJyYXkuaXNBcnJheShlYXNlKSB8fCBlYXNlLmxlbmd0aCA9PT0gaW5wdXRMZW5ndGggLSAxLCAnQXJyYXkgb2YgZWFzaW5nIGZ1bmN0aW9ucyBtdXN0IGJlIG9mIGxlbmd0aCBgaW5wdXQubGVuZ3RoIC0gMWAsIGFzIGl0IGFwcGxpZXMgdG8gdGhlIHRyYW5zaXRpb25zICoqYmV0d2VlbioqIHRoZSBkZWZpbmVkIHZhbHVlcy4nKTtcbiAgICBpZiAoaW5wdXRbMF0gPiBpbnB1dFtpbnB1dExlbmd0aCAtIDFdKSB7XG4gICAgICAgIGlucHV0ID0gW10uY29uY2F0KGlucHV0KTtcbiAgICAgICAgb3V0cHV0ID0gW10uY29uY2F0KG91dHB1dCk7XG4gICAgICAgIGlucHV0LnJldmVyc2UoKTtcbiAgICAgICAgb3V0cHV0LnJldmVyc2UoKTtcbiAgICB9XG4gICAgY29uc3QgbWl4ZXJzID0gY3JlYXRlTWl4ZXJzKG91dHB1dCwgZWFzZSwgbWl4ZXIpO1xuICAgIGNvbnN0IGludGVycG9sYXRvciA9IGlucHV0TGVuZ3RoID09PSAyXG4gICAgICAgID8gZmFzdEludGVycG9sYXRlKGlucHV0LCBtaXhlcnMpXG4gICAgICAgIDogc2xvd0ludGVycG9sYXRlKGlucHV0LCBtaXhlcnMpO1xuICAgIHJldHVybiBpc0NsYW1wXG4gICAgICAgID8gKHYpID0+IGludGVycG9sYXRvcihjbGFtcChpbnB1dFswXSwgaW5wdXRbaW5wdXRMZW5ndGggLSAxXSwgdikpXG4gICAgICAgIDogaW50ZXJwb2xhdG9yO1xufVxuXG5leHBvcnQgeyBpbnRlcnBvbGF0ZSB9O1xuIiwiY29uc3QgcmV2ZXJzZUVhc2luZyA9IGVhc2luZyA9PiBwID0+IDEgLSBlYXNpbmcoMSAtIHApO1xuY29uc3QgbWlycm9yRWFzaW5nID0gZWFzaW5nID0+IHAgPT4gcCA8PSAwLjUgPyBlYXNpbmcoMiAqIHApIC8gMiA6ICgyIC0gZWFzaW5nKDIgKiAoMSAtIHApKSkgLyAyO1xuY29uc3QgY3JlYXRlRXhwb0luID0gKHBvd2VyKSA9PiBwID0+IE1hdGgucG93KHAsIHBvd2VyKTtcbmNvbnN0IGNyZWF0ZUJhY2tJbiA9IChwb3dlcikgPT4gcCA9PiBwICogcCAqICgocG93ZXIgKyAxKSAqIHAgLSBwb3dlcik7XG5jb25zdCBjcmVhdGVBbnRpY2lwYXRlID0gKHBvd2VyKSA9PiB7XG4gICAgY29uc3QgYmFja0Vhc2luZyA9IGNyZWF0ZUJhY2tJbihwb3dlcik7XG4gICAgcmV0dXJuIHAgPT4gKHAgKj0gMikgPCAxXG4gICAgICAgID8gMC41ICogYmFja0Vhc2luZyhwKVxuICAgICAgICA6IDAuNSAqICgyIC0gTWF0aC5wb3coMiwgLTEwICogKHAgLSAxKSkpO1xufTtcblxuZXhwb3J0IHsgY3JlYXRlQW50aWNpcGF0ZSwgY3JlYXRlQmFja0luLCBjcmVhdGVFeHBvSW4sIG1pcnJvckVhc2luZywgcmV2ZXJzZUVhc2luZyB9O1xuIiwiaW1wb3J0IHsgY3JlYXRlRXhwb0luLCByZXZlcnNlRWFzaW5nLCBtaXJyb3JFYXNpbmcsIGNyZWF0ZUJhY2tJbiwgY3JlYXRlQW50aWNpcGF0ZSB9IGZyb20gJy4vdXRpbHMubWpzJztcblxuY29uc3QgREVGQVVMVF9PVkVSU0hPT1RfU1RSRU5HVEggPSAxLjUyNTtcbmNvbnN0IEJPVU5DRV9GSVJTVF9USFJFU0hPTEQgPSA0LjAgLyAxMS4wO1xuY29uc3QgQk9VTkNFX1NFQ09ORF9USFJFU0hPTEQgPSA4LjAgLyAxMS4wO1xuY29uc3QgQk9VTkNFX1RISVJEX1RIUkVTSE9MRCA9IDkuMCAvIDEwLjA7XG5jb25zdCBsaW5lYXIgPSBwID0+IHA7XG5jb25zdCBlYXNlSW4gPSBjcmVhdGVFeHBvSW4oMik7XG5jb25zdCBlYXNlT3V0ID0gcmV2ZXJzZUVhc2luZyhlYXNlSW4pO1xuY29uc3QgZWFzZUluT3V0ID0gbWlycm9yRWFzaW5nKGVhc2VJbik7XG5jb25zdCBjaXJjSW4gPSBwID0+IDEgLSBNYXRoLnNpbihNYXRoLmFjb3MocCkpO1xuY29uc3QgY2lyY091dCA9IHJldmVyc2VFYXNpbmcoY2lyY0luKTtcbmNvbnN0IGNpcmNJbk91dCA9IG1pcnJvckVhc2luZyhjaXJjT3V0KTtcbmNvbnN0IGJhY2tJbiA9IGNyZWF0ZUJhY2tJbihERUZBVUxUX09WRVJTSE9PVF9TVFJFTkdUSCk7XG5jb25zdCBiYWNrT3V0ID0gcmV2ZXJzZUVhc2luZyhiYWNrSW4pO1xuY29uc3QgYmFja0luT3V0ID0gbWlycm9yRWFzaW5nKGJhY2tJbik7XG5jb25zdCBhbnRpY2lwYXRlID0gY3JlYXRlQW50aWNpcGF0ZShERUZBVUxUX09WRVJTSE9PVF9TVFJFTkdUSCk7XG5jb25zdCBjYSA9IDQzNTYuMCAvIDM2MS4wO1xuY29uc3QgY2IgPSAzNTQ0Mi4wIC8gMTgwNS4wO1xuY29uc3QgY2MgPSAxNjA2MS4wIC8gMTgwNS4wO1xuY29uc3QgYm91bmNlT3V0ID0gKHApID0+IHtcbiAgICBpZiAocCA9PT0gMSB8fCBwID09PSAwKVxuICAgICAgICByZXR1cm4gcDtcbiAgICBjb25zdCBwMiA9IHAgKiBwO1xuICAgIHJldHVybiBwIDwgQk9VTkNFX0ZJUlNUX1RIUkVTSE9MRFxuICAgICAgICA/IDcuNTYyNSAqIHAyXG4gICAgICAgIDogcCA8IEJPVU5DRV9TRUNPTkRfVEhSRVNIT0xEXG4gICAgICAgICAgICA/IDkuMDc1ICogcDIgLSA5LjkgKiBwICsgMy40XG4gICAgICAgICAgICA6IHAgPCBCT1VOQ0VfVEhJUkRfVEhSRVNIT0xEXG4gICAgICAgICAgICAgICAgPyBjYSAqIHAyIC0gY2IgKiBwICsgY2NcbiAgICAgICAgICAgICAgICA6IDEwLjggKiBwICogcCAtIDIwLjUyICogcCArIDEwLjcyO1xufTtcbmNvbnN0IGJvdW5jZUluID0gcmV2ZXJzZUVhc2luZyhib3VuY2VPdXQpO1xuY29uc3QgYm91bmNlSW5PdXQgPSAocCkgPT4gcCA8IDAuNVxuICAgID8gMC41ICogKDEuMCAtIGJvdW5jZU91dCgxLjAgLSBwICogMi4wKSlcbiAgICA6IDAuNSAqIGJvdW5jZU91dChwICogMi4wIC0gMS4wKSArIDAuNTtcblxuZXhwb3J0IHsgYW50aWNpcGF0ZSwgYmFja0luLCBiYWNrSW5PdXQsIGJhY2tPdXQsIGJvdW5jZUluLCBib3VuY2VJbk91dCwgYm91bmNlT3V0LCBjaXJjSW4sIGNpcmNJbk91dCwgY2lyY091dCwgZWFzZUluLCBlYXNlSW5PdXQsIGVhc2VPdXQsIGxpbmVhciB9O1xuIiwiaW1wb3J0IHsgaW50ZXJwb2xhdGUgfSBmcm9tICcuLi8uLi91dGlscy9pbnRlcnBvbGF0ZS5tanMnO1xuaW1wb3J0IHsgZWFzZUluT3V0IH0gZnJvbSAnLi4vLi4vZWFzaW5nL2luZGV4Lm1qcyc7XG5cbmZ1bmN0aW9uIGRlZmF1bHRFYXNpbmcodmFsdWVzLCBlYXNpbmcpIHtcbiAgICByZXR1cm4gdmFsdWVzLm1hcCgoKSA9PiBlYXNpbmcgfHwgZWFzZUluT3V0KS5zcGxpY2UoMCwgdmFsdWVzLmxlbmd0aCAtIDEpO1xufVxuZnVuY3Rpb24gZGVmYXVsdE9mZnNldCh2YWx1ZXMpIHtcbiAgICBjb25zdCBudW1WYWx1ZXMgPSB2YWx1ZXMubGVuZ3RoO1xuICAgIHJldHVybiB2YWx1ZXMubWFwKChfdmFsdWUsIGkpID0+IGkgIT09IDAgPyBpIC8gKG51bVZhbHVlcyAtIDEpIDogMCk7XG59XG5mdW5jdGlvbiBjb252ZXJ0T2Zmc2V0VG9UaW1lcyhvZmZzZXQsIGR1cmF0aW9uKSB7XG4gICAgcmV0dXJuIG9mZnNldC5tYXAoKG8pID0+IG8gKiBkdXJhdGlvbik7XG59XG5mdW5jdGlvbiBrZXlmcmFtZXMoeyBmcm9tID0gMCwgdG8gPSAxLCBlYXNlLCBvZmZzZXQsIGR1cmF0aW9uID0gMzAwLCB9KSB7XG4gICAgY29uc3Qgc3RhdGUgPSB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogZnJvbSB9O1xuICAgIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkodG8pID8gdG8gOiBbZnJvbSwgdG9dO1xuICAgIGNvbnN0IHRpbWVzID0gY29udmVydE9mZnNldFRvVGltZXMob2Zmc2V0ICYmIG9mZnNldC5sZW5ndGggPT09IHZhbHVlcy5sZW5ndGhcbiAgICAgICAgPyBvZmZzZXRcbiAgICAgICAgOiBkZWZhdWx0T2Zmc2V0KHZhbHVlcyksIGR1cmF0aW9uKTtcbiAgICBmdW5jdGlvbiBjcmVhdGVJbnRlcnBvbGF0b3IoKSB7XG4gICAgICAgIHJldHVybiBpbnRlcnBvbGF0ZSh0aW1lcywgdmFsdWVzLCB7XG4gICAgICAgICAgICBlYXNlOiBBcnJheS5pc0FycmF5KGVhc2UpID8gZWFzZSA6IGRlZmF1bHRFYXNpbmcodmFsdWVzLCBlYXNlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGxldCBpbnRlcnBvbGF0b3IgPSBjcmVhdGVJbnRlcnBvbGF0b3IoKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiAodCkgPT4ge1xuICAgICAgICAgICAgc3RhdGUudmFsdWUgPSBpbnRlcnBvbGF0b3IodCk7XG4gICAgICAgICAgICBzdGF0ZS5kb25lID0gdCA+PSBkdXJhdGlvbjtcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZmxpcFRhcmdldDogKCkgPT4ge1xuICAgICAgICAgICAgdmFsdWVzLnJldmVyc2UoKTtcbiAgICAgICAgICAgIGludGVycG9sYXRvciA9IGNyZWF0ZUludGVycG9sYXRvcigpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5cbmV4cG9ydCB7IGNvbnZlcnRPZmZzZXRUb1RpbWVzLCBkZWZhdWx0RWFzaW5nLCBkZWZhdWx0T2Zmc2V0LCBrZXlmcmFtZXMgfTtcbiIsImltcG9ydCB7IHNwcmluZyB9IGZyb20gJy4uL2dlbmVyYXRvcnMvc3ByaW5nLm1qcyc7XG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICcuLi9nZW5lcmF0b3JzL2tleWZyYW1lcy5tanMnO1xuaW1wb3J0IHsgZGVjYXkgfSBmcm9tICcuLi9nZW5lcmF0b3JzL2RlY2F5Lm1qcyc7XG5cbmNvbnN0IHR5cGVzID0geyBrZXlmcmFtZXMsIHNwcmluZywgZGVjYXkgfTtcbmZ1bmN0aW9uIGRldGVjdEFuaW1hdGlvbkZyb21PcHRpb25zKGNvbmZpZykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbmZpZy50bykpIHtcbiAgICAgICAgcmV0dXJuIGtleWZyYW1lcztcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZXNbY29uZmlnLnR5cGVdKSB7XG4gICAgICAgIHJldHVybiB0eXBlc1tjb25maWcudHlwZV07XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKGNvbmZpZykpO1xuICAgIGlmIChrZXlzLmhhcyhcImVhc2VcIikgfHxcbiAgICAgICAgKGtleXMuaGFzKFwiZHVyYXRpb25cIikgJiYgIWtleXMuaGFzKFwiZGFtcGluZ1JhdGlvXCIpKSkge1xuICAgICAgICByZXR1cm4ga2V5ZnJhbWVzO1xuICAgIH1cbiAgICBlbHNlIGlmIChrZXlzLmhhcyhcImRhbXBpbmdSYXRpb1wiKSB8fFxuICAgICAgICBrZXlzLmhhcyhcInN0aWZmbmVzc1wiKSB8fFxuICAgICAgICBrZXlzLmhhcyhcIm1hc3NcIikgfHxcbiAgICAgICAga2V5cy5oYXMoXCJkYW1waW5nXCIpIHx8XG4gICAgICAgIGtleXMuaGFzKFwicmVzdFNwZWVkXCIpIHx8XG4gICAgICAgIGtleXMuaGFzKFwicmVzdERlbHRhXCIpKSB7XG4gICAgICAgIHJldHVybiBzcHJpbmc7XG4gICAgfVxuICAgIHJldHVybiBrZXlmcmFtZXM7XG59XG5cbmV4cG9ydCB7IGRldGVjdEFuaW1hdGlvbkZyb21PcHRpb25zIH07XG4iLCJmdW5jdGlvbiBkZWNheSh7IHZlbG9jaXR5ID0gMCwgZnJvbSA9IDAsIHBvd2VyID0gMC44LCB0aW1lQ29uc3RhbnQgPSAzNTAsIHJlc3REZWx0YSA9IDAuNSwgbW9kaWZ5VGFyZ2V0LCB9KSB7XG4gICAgY29uc3Qgc3RhdGUgPSB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogZnJvbSB9O1xuICAgIGxldCBhbXBsaXR1ZGUgPSBwb3dlciAqIHZlbG9jaXR5O1xuICAgIGNvbnN0IGlkZWFsID0gZnJvbSArIGFtcGxpdHVkZTtcbiAgICBjb25zdCB0YXJnZXQgPSBtb2RpZnlUYXJnZXQgPT09IHVuZGVmaW5lZCA/IGlkZWFsIDogbW9kaWZ5VGFyZ2V0KGlkZWFsKTtcbiAgICBpZiAodGFyZ2V0ICE9PSBpZGVhbClcbiAgICAgICAgYW1wbGl0dWRlID0gdGFyZ2V0IC0gZnJvbTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiAodCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVsdGEgPSAtYW1wbGl0dWRlICogTWF0aC5leHAoLXQgLyB0aW1lQ29uc3RhbnQpO1xuICAgICAgICAgICAgc3RhdGUuZG9uZSA9ICEoZGVsdGEgPiByZXN0RGVsdGEgfHwgZGVsdGEgPCAtcmVzdERlbHRhKTtcbiAgICAgICAgICAgIHN0YXRlLnZhbHVlID0gc3RhdGUuZG9uZSA/IHRhcmdldCA6IHRhcmdldCArIGRlbHRhO1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICB9LFxuICAgICAgICBmbGlwVGFyZ2V0OiAoKSA9PiB7IH0sXG4gICAgfTtcbn1cblxuZXhwb3J0IHsgZGVjYXkgfTtcbiIsImZ1bmN0aW9uIGxvb3BFbGFwc2VkKGVsYXBzZWQsIGR1cmF0aW9uLCBkZWxheSA9IDApIHtcbiAgICByZXR1cm4gZWxhcHNlZCAtIGR1cmF0aW9uIC0gZGVsYXk7XG59XG5mdW5jdGlvbiByZXZlcnNlRWxhcHNlZChlbGFwc2VkLCBkdXJhdGlvbiwgZGVsYXkgPSAwLCBpc0ZvcndhcmRQbGF5YmFjayA9IHRydWUpIHtcbiAgICByZXR1cm4gaXNGb3J3YXJkUGxheWJhY2tcbiAgICAgICAgPyBsb29wRWxhcHNlZChkdXJhdGlvbiArIC1lbGFwc2VkLCBkdXJhdGlvbiwgZGVsYXkpXG4gICAgICAgIDogZHVyYXRpb24gLSAoZWxhcHNlZCAtIGR1cmF0aW9uKSArIGRlbGF5O1xufVxuZnVuY3Rpb24gaGFzUmVwZWF0RGVsYXlFbGFwc2VkKGVsYXBzZWQsIGR1cmF0aW9uLCBkZWxheSwgaXNGb3J3YXJkUGxheWJhY2spIHtcbiAgICByZXR1cm4gaXNGb3J3YXJkUGxheWJhY2sgPyBlbGFwc2VkID49IGR1cmF0aW9uICsgZGVsYXkgOiBlbGFwc2VkIDw9IC1kZWxheTtcbn1cblxuZXhwb3J0IHsgaGFzUmVwZWF0RGVsYXlFbGFwc2VkLCBsb29wRWxhcHNlZCwgcmV2ZXJzZUVsYXBzZWQgfTtcbiIsImltcG9ydCB7IF9fcmVzdCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IGRldGVjdEFuaW1hdGlvbkZyb21PcHRpb25zIH0gZnJvbSAnLi91dGlscy9kZXRlY3QtYW5pbWF0aW9uLWZyb20tb3B0aW9ucy5tanMnO1xuaW1wb3J0IHN5bmMsIHsgY2FuY2VsU3luYyB9IGZyb20gJ2ZyYW1lc3luYyc7XG5pbXBvcnQgeyBpbnRlcnBvbGF0ZSB9IGZyb20gJy4uL3V0aWxzL2ludGVycG9sYXRlLm1qcyc7XG5pbXBvcnQgeyBoYXNSZXBlYXREZWxheUVsYXBzZWQsIHJldmVyc2VFbGFwc2VkLCBsb29wRWxhcHNlZCB9IGZyb20gJy4vdXRpbHMvZWxhcHNlZC5tanMnO1xuXG5jb25zdCBmcmFtZXN5bmMgPSAodXBkYXRlKSA9PiB7XG4gICAgY29uc3QgcGFzc1RpbWVzdGFtcCA9ICh7IGRlbHRhIH0pID0+IHVwZGF0ZShkZWx0YSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnQ6ICgpID0+IHN5bmMudXBkYXRlKHBhc3NUaW1lc3RhbXAsIHRydWUpLFxuICAgICAgICBzdG9wOiAoKSA9PiBjYW5jZWxTeW5jLnVwZGF0ZShwYXNzVGltZXN0YW1wKSxcbiAgICB9O1xufTtcbmZ1bmN0aW9uIGFuaW1hdGUoX2EpIHtcbiAgICB2YXIgX2IsIF9jO1xuICAgIHZhciB7IGZyb20sIGF1dG9wbGF5ID0gdHJ1ZSwgZHJpdmVyID0gZnJhbWVzeW5jLCBlbGFwc2VkID0gMCwgcmVwZWF0OiByZXBlYXRNYXggPSAwLCByZXBlYXRUeXBlID0gXCJsb29wXCIsIHJlcGVhdERlbGF5ID0gMCwgb25QbGF5LCBvblN0b3AsIG9uQ29tcGxldGUsIG9uUmVwZWF0LCBvblVwZGF0ZSB9ID0gX2EsIG9wdGlvbnMgPSBfX3Jlc3QoX2EsIFtcImZyb21cIiwgXCJhdXRvcGxheVwiLCBcImRyaXZlclwiLCBcImVsYXBzZWRcIiwgXCJyZXBlYXRcIiwgXCJyZXBlYXRUeXBlXCIsIFwicmVwZWF0RGVsYXlcIiwgXCJvblBsYXlcIiwgXCJvblN0b3BcIiwgXCJvbkNvbXBsZXRlXCIsIFwib25SZXBlYXRcIiwgXCJvblVwZGF0ZVwiXSk7XG4gICAgbGV0IHsgdG8gfSA9IG9wdGlvbnM7XG4gICAgbGV0IGRyaXZlckNvbnRyb2xzO1xuICAgIGxldCByZXBlYXRDb3VudCA9IDA7XG4gICAgbGV0IGNvbXB1dGVkRHVyYXRpb24gPSBvcHRpb25zLmR1cmF0aW9uO1xuICAgIGxldCBsYXRlc3Q7XG4gICAgbGV0IGlzQ29tcGxldGUgPSBmYWxzZTtcbiAgICBsZXQgaXNGb3J3YXJkUGxheWJhY2sgPSB0cnVlO1xuICAgIGxldCBpbnRlcnBvbGF0ZUZyb21OdW1iZXI7XG4gICAgY29uc3QgYW5pbWF0b3IgPSBkZXRlY3RBbmltYXRpb25Gcm9tT3B0aW9ucyhvcHRpb25zKTtcbiAgICBpZiAoKF9jID0gKF9iID0gYW5pbWF0b3IpLm5lZWRzSW50ZXJwb2xhdGlvbikgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmNhbGwoX2IsIGZyb20sIHRvKSkge1xuICAgICAgICBpbnRlcnBvbGF0ZUZyb21OdW1iZXIgPSBpbnRlcnBvbGF0ZShbMCwgMTAwXSwgW2Zyb20sIHRvXSwge1xuICAgICAgICAgICAgY2xhbXA6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgZnJvbSA9IDA7XG4gICAgICAgIHRvID0gMTAwO1xuICAgIH1cbiAgICBjb25zdCBhbmltYXRpb24gPSBhbmltYXRvcihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpLCB7IGZyb20sIHRvIH0pKTtcbiAgICBmdW5jdGlvbiByZXBlYXQoKSB7XG4gICAgICAgIHJlcGVhdENvdW50Kys7XG4gICAgICAgIGlmIChyZXBlYXRUeXBlID09PSBcInJldmVyc2VcIikge1xuICAgICAgICAgICAgaXNGb3J3YXJkUGxheWJhY2sgPSByZXBlYXRDb3VudCAlIDIgPT09IDA7XG4gICAgICAgICAgICBlbGFwc2VkID0gcmV2ZXJzZUVsYXBzZWQoZWxhcHNlZCwgY29tcHV0ZWREdXJhdGlvbiwgcmVwZWF0RGVsYXksIGlzRm9yd2FyZFBsYXliYWNrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVsYXBzZWQgPSBsb29wRWxhcHNlZChlbGFwc2VkLCBjb21wdXRlZER1cmF0aW9uLCByZXBlYXREZWxheSk7XG4gICAgICAgICAgICBpZiAocmVwZWF0VHlwZSA9PT0gXCJtaXJyb3JcIilcbiAgICAgICAgICAgICAgICBhbmltYXRpb24uZmxpcFRhcmdldCgpO1xuICAgICAgICB9XG4gICAgICAgIGlzQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgICAgb25SZXBlYXQgJiYgb25SZXBlYXQoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tcGxldGUoKSB7XG4gICAgICAgIGRyaXZlckNvbnRyb2xzLnN0b3AoKTtcbiAgICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZShkZWx0YSkge1xuICAgICAgICBpZiAoIWlzRm9yd2FyZFBsYXliYWNrKVxuICAgICAgICAgICAgZGVsdGEgPSAtZGVsdGE7XG4gICAgICAgIGVsYXBzZWQgKz0gZGVsdGE7XG4gICAgICAgIGlmICghaXNDb21wbGV0ZSkge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBhbmltYXRpb24ubmV4dChNYXRoLm1heCgwLCBlbGFwc2VkKSk7XG4gICAgICAgICAgICBsYXRlc3QgPSBzdGF0ZS52YWx1ZTtcbiAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0ZUZyb21OdW1iZXIpXG4gICAgICAgICAgICAgICAgbGF0ZXN0ID0gaW50ZXJwb2xhdGVGcm9tTnVtYmVyKGxhdGVzdCk7XG4gICAgICAgICAgICBpc0NvbXBsZXRlID0gaXNGb3J3YXJkUGxheWJhY2sgPyBzdGF0ZS5kb25lIDogZWxhcHNlZCA8PSAwO1xuICAgICAgICB9XG4gICAgICAgIG9uVXBkYXRlID09PSBudWxsIHx8IG9uVXBkYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblVwZGF0ZShsYXRlc3QpO1xuICAgICAgICBpZiAoaXNDb21wbGV0ZSkge1xuICAgICAgICAgICAgaWYgKHJlcGVhdENvdW50ID09PSAwKVxuICAgICAgICAgICAgICAgIGNvbXB1dGVkRHVyYXRpb24gIT09IG51bGwgJiYgY29tcHV0ZWREdXJhdGlvbiAhPT0gdm9pZCAwID8gY29tcHV0ZWREdXJhdGlvbiA6IChjb21wdXRlZER1cmF0aW9uID0gZWxhcHNlZCk7XG4gICAgICAgICAgICBpZiAocmVwZWF0Q291bnQgPCByZXBlYXRNYXgpIHtcbiAgICAgICAgICAgICAgICBoYXNSZXBlYXREZWxheUVsYXBzZWQoZWxhcHNlZCwgY29tcHV0ZWREdXJhdGlvbiwgcmVwZWF0RGVsYXksIGlzRm9yd2FyZFBsYXliYWNrKSAmJiByZXBlYXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcGxheSgpIHtcbiAgICAgICAgb25QbGF5ID09PSBudWxsIHx8IG9uUGxheSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25QbGF5KCk7XG4gICAgICAgIGRyaXZlckNvbnRyb2xzID0gZHJpdmVyKHVwZGF0ZSk7XG4gICAgICAgIGRyaXZlckNvbnRyb2xzLnN0YXJ0KCk7XG4gICAgfVxuICAgIGF1dG9wbGF5ICYmIHBsYXkoKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdG9wOiAoKSA9PiB7XG4gICAgICAgICAgICBvblN0b3AgPT09IG51bGwgfHwgb25TdG9wID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblN0b3AoKTtcbiAgICAgICAgICAgIGRyaXZlckNvbnRyb2xzLnN0b3AoKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG5leHBvcnQgeyBhbmltYXRlIH07XG4iLCJmdW5jdGlvbiB2ZWxvY2l0eVBlclNlY29uZCh2ZWxvY2l0eSwgZnJhbWVEdXJhdGlvbikge1xuICAgIHJldHVybiBmcmFtZUR1cmF0aW9uID8gdmVsb2NpdHkgKiAoMTAwMCAvIGZyYW1lRHVyYXRpb24pIDogMDtcbn1cblxuZXhwb3J0IHsgdmVsb2NpdHlQZXJTZWNvbmQgfTtcbiIsIi8qKlxuICogQ29udmVydHMgc2Vjb25kcyB0byBtaWxsaXNlY29uZHNcbiAqXG4gKiBAcGFyYW0gc2Vjb25kcyAtIFRpbWUgaW4gc2Vjb25kcy5cbiAqIEByZXR1cm4gbWlsbGlzZWNvbmRzIC0gQ29udmVydGVkIHRpbWUgaW4gbWlsbGlzZWNvbmRzLlxuICovXG52YXIgc2Vjb25kc1RvTWlsbGlzZWNvbmRzID0gZnVuY3Rpb24gKHNlY29uZHMpIHsgcmV0dXJuIHNlY29uZHMgKiAxMDAwOyB9O1xuXG5leHBvcnQgeyBzZWNvbmRzVG9NaWxsaXNlY29uZHMgfTtcbiIsImltcG9ydCB7IGxpbmVhciB9IGZyb20gJy4vaW5kZXgubWpzJztcblxuY29uc3QgYSA9IChhMSwgYTIpID0+IDEuMCAtIDMuMCAqIGEyICsgMy4wICogYTE7XG5jb25zdCBiID0gKGExLCBhMikgPT4gMy4wICogYTIgLSA2LjAgKiBhMTtcbmNvbnN0IGMgPSAoYTEpID0+IDMuMCAqIGExO1xuY29uc3QgY2FsY0JlemllciA9ICh0LCBhMSwgYTIpID0+ICgoYShhMSwgYTIpICogdCArIGIoYTEsIGEyKSkgKiB0ICsgYyhhMSkpICogdDtcbmNvbnN0IGdldFNsb3BlID0gKHQsIGExLCBhMikgPT4gMy4wICogYShhMSwgYTIpICogdCAqIHQgKyAyLjAgKiBiKGExLCBhMikgKiB0ICsgYyhhMSk7XG5jb25zdCBzdWJkaXZpc2lvblByZWNpc2lvbiA9IDAuMDAwMDAwMTtcbmNvbnN0IHN1YmRpdmlzaW9uTWF4SXRlcmF0aW9ucyA9IDEwO1xuZnVuY3Rpb24gYmluYXJ5U3ViZGl2aWRlKGFYLCBhQSwgYUIsIG1YMSwgbVgyKSB7XG4gICAgbGV0IGN1cnJlbnRYO1xuICAgIGxldCBjdXJyZW50VDtcbiAgICBsZXQgaSA9IDA7XG4gICAgZG8ge1xuICAgICAgICBjdXJyZW50VCA9IGFBICsgKGFCIC0gYUEpIC8gMi4wO1xuICAgICAgICBjdXJyZW50WCA9IGNhbGNCZXppZXIoY3VycmVudFQsIG1YMSwgbVgyKSAtIGFYO1xuICAgICAgICBpZiAoY3VycmVudFggPiAwLjApIHtcbiAgICAgICAgICAgIGFCID0gY3VycmVudFQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhQSA9IGN1cnJlbnRUO1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoTWF0aC5hYnMoY3VycmVudFgpID4gc3ViZGl2aXNpb25QcmVjaXNpb24gJiZcbiAgICAgICAgKytpIDwgc3ViZGl2aXNpb25NYXhJdGVyYXRpb25zKTtcbiAgICByZXR1cm4gY3VycmVudFQ7XG59XG5jb25zdCBuZXd0b25JdGVyYXRpb25zID0gODtcbmNvbnN0IG5ld3Rvbk1pblNsb3BlID0gMC4wMDE7XG5mdW5jdGlvbiBuZXd0b25SYXBoc29uSXRlcmF0ZShhWCwgYUd1ZXNzVCwgbVgxLCBtWDIpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld3Rvbkl0ZXJhdGlvbnM7ICsraSkge1xuICAgICAgICBjb25zdCBjdXJyZW50U2xvcGUgPSBnZXRTbG9wZShhR3Vlc3NULCBtWDEsIG1YMik7XG4gICAgICAgIGlmIChjdXJyZW50U2xvcGUgPT09IDAuMCkge1xuICAgICAgICAgICAgcmV0dXJuIGFHdWVzc1Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudFggPSBjYWxjQmV6aWVyKGFHdWVzc1QsIG1YMSwgbVgyKSAtIGFYO1xuICAgICAgICBhR3Vlc3NUIC09IGN1cnJlbnRYIC8gY3VycmVudFNsb3BlO1xuICAgIH1cbiAgICByZXR1cm4gYUd1ZXNzVDtcbn1cbmNvbnN0IGtTcGxpbmVUYWJsZVNpemUgPSAxMTtcbmNvbnN0IGtTYW1wbGVTdGVwU2l6ZSA9IDEuMCAvIChrU3BsaW5lVGFibGVTaXplIC0gMS4wKTtcbmZ1bmN0aW9uIGN1YmljQmV6aWVyKG1YMSwgbVkxLCBtWDIsIG1ZMikge1xuICAgIGlmIChtWDEgPT09IG1ZMSAmJiBtWDIgPT09IG1ZMilcbiAgICAgICAgcmV0dXJuIGxpbmVhcjtcbiAgICBjb25zdCBzYW1wbGVWYWx1ZXMgPSBuZXcgRmxvYXQzMkFycmF5KGtTcGxpbmVUYWJsZVNpemUpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga1NwbGluZVRhYmxlU2l6ZTsgKytpKSB7XG4gICAgICAgIHNhbXBsZVZhbHVlc1tpXSA9IGNhbGNCZXppZXIoaSAqIGtTYW1wbGVTdGVwU2l6ZSwgbVgxLCBtWDIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRURm9yWChhWCkge1xuICAgICAgICBsZXQgaW50ZXJ2YWxTdGFydCA9IDAuMDtcbiAgICAgICAgbGV0IGN1cnJlbnRTYW1wbGUgPSAxO1xuICAgICAgICBjb25zdCBsYXN0U2FtcGxlID0ga1NwbGluZVRhYmxlU2l6ZSAtIDE7XG4gICAgICAgIGZvciAoOyBjdXJyZW50U2FtcGxlICE9PSBsYXN0U2FtcGxlICYmIHNhbXBsZVZhbHVlc1tjdXJyZW50U2FtcGxlXSA8PSBhWDsgKytjdXJyZW50U2FtcGxlKSB7XG4gICAgICAgICAgICBpbnRlcnZhbFN0YXJ0ICs9IGtTYW1wbGVTdGVwU2l6ZTtcbiAgICAgICAgfVxuICAgICAgICAtLWN1cnJlbnRTYW1wbGU7XG4gICAgICAgIGNvbnN0IGRpc3QgPSAoYVggLSBzYW1wbGVWYWx1ZXNbY3VycmVudFNhbXBsZV0pIC9cbiAgICAgICAgICAgIChzYW1wbGVWYWx1ZXNbY3VycmVudFNhbXBsZSArIDFdIC0gc2FtcGxlVmFsdWVzW2N1cnJlbnRTYW1wbGVdKTtcbiAgICAgICAgY29uc3QgZ3Vlc3NGb3JUID0gaW50ZXJ2YWxTdGFydCArIGRpc3QgKiBrU2FtcGxlU3RlcFNpemU7XG4gICAgICAgIGNvbnN0IGluaXRpYWxTbG9wZSA9IGdldFNsb3BlKGd1ZXNzRm9yVCwgbVgxLCBtWDIpO1xuICAgICAgICBpZiAoaW5pdGlhbFNsb3BlID49IG5ld3Rvbk1pblNsb3BlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3dG9uUmFwaHNvbkl0ZXJhdGUoYVgsIGd1ZXNzRm9yVCwgbVgxLCBtWDIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGluaXRpYWxTbG9wZSA9PT0gMC4wKSB7XG4gICAgICAgICAgICByZXR1cm4gZ3Vlc3NGb3JUO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGJpbmFyeVN1YmRpdmlkZShhWCwgaW50ZXJ2YWxTdGFydCwgaW50ZXJ2YWxTdGFydCArIGtTYW1wbGVTdGVwU2l6ZSwgbVgxLCBtWDIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAodCkgPT4gdCA9PT0gMCB8fCB0ID09PSAxID8gdCA6IGNhbGNCZXppZXIoZ2V0VEZvclgodCksIG1ZMSwgbVkyKTtcbn1cblxuZXhwb3J0IHsgY3ViaWNCZXppZXIgfTtcbiIsImltcG9ydCB7IF9fcmVhZCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IGludmFyaWFudCB9IGZyb20gJ2hleS1saXN0ZW4nO1xuaW1wb3J0IHsgY3ViaWNCZXppZXIsIGxpbmVhciwgZWFzZUluLCBlYXNlSW5PdXQsIGVhc2VPdXQsIGNpcmNJbiwgY2lyY0luT3V0LCBjaXJjT3V0LCBiYWNrSW4sIGJhY2tJbk91dCwgYmFja091dCwgYW50aWNpcGF0ZSwgYm91bmNlSW4sIGJvdW5jZUluT3V0LCBib3VuY2VPdXQgfSBmcm9tICdwb3Btb3Rpb24nO1xuXG52YXIgZWFzaW5nTG9va3VwID0ge1xuICAgIGxpbmVhcjogbGluZWFyLFxuICAgIGVhc2VJbjogZWFzZUluLFxuICAgIGVhc2VJbk91dDogZWFzZUluT3V0LFxuICAgIGVhc2VPdXQ6IGVhc2VPdXQsXG4gICAgY2lyY0luOiBjaXJjSW4sXG4gICAgY2lyY0luT3V0OiBjaXJjSW5PdXQsXG4gICAgY2lyY091dDogY2lyY091dCxcbiAgICBiYWNrSW46IGJhY2tJbixcbiAgICBiYWNrSW5PdXQ6IGJhY2tJbk91dCxcbiAgICBiYWNrT3V0OiBiYWNrT3V0LFxuICAgIGFudGljaXBhdGU6IGFudGljaXBhdGUsXG4gICAgYm91bmNlSW46IGJvdW5jZUluLFxuICAgIGJvdW5jZUluT3V0OiBib3VuY2VJbk91dCxcbiAgICBib3VuY2VPdXQ6IGJvdW5jZU91dCxcbn07XG52YXIgZWFzaW5nRGVmaW5pdGlvblRvRnVuY3Rpb24gPSBmdW5jdGlvbiAoZGVmaW5pdGlvbikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRlZmluaXRpb24pKSB7XG4gICAgICAgIC8vIElmIGN1YmljIGJlemllciBkZWZpbml0aW9uLCBjcmVhdGUgYmV6aWVyIGN1cnZlXG4gICAgICAgIGludmFyaWFudChkZWZpbml0aW9uLmxlbmd0aCA9PT0gNCwgXCJDdWJpYyBiZXppZXIgYXJyYXlzIG11c3QgY29udGFpbiBmb3VyIG51bWVyaWNhbCB2YWx1ZXMuXCIpO1xuICAgICAgICB2YXIgX2EgPSBfX3JlYWQoZGVmaW5pdGlvbiwgNCksIHgxID0gX2FbMF0sIHkxID0gX2FbMV0sIHgyID0gX2FbMl0sIHkyID0gX2FbM107XG4gICAgICAgIHJldHVybiBjdWJpY0Jlemllcih4MSwgeTEsIHgyLCB5Mik7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbml0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIC8vIEVsc2UgbG9va3VwIGZyb20gdGFibGVcbiAgICAgICAgaW52YXJpYW50KGVhc2luZ0xvb2t1cFtkZWZpbml0aW9uXSAhPT0gdW5kZWZpbmVkLCBcIkludmFsaWQgZWFzaW5nIHR5cGUgJ1wiLmNvbmNhdChkZWZpbml0aW9uLCBcIidcIikpO1xuICAgICAgICByZXR1cm4gZWFzaW5nTG9va3VwW2RlZmluaXRpb25dO1xuICAgIH1cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbn07XG52YXIgaXNFYXNpbmdBcnJheSA9IGZ1bmN0aW9uIChlYXNlKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZWFzZSkgJiYgdHlwZW9mIGVhc2VbMF0gIT09IFwibnVtYmVyXCI7XG59O1xuXG5leHBvcnQgeyBlYXNpbmdEZWZpbml0aW9uVG9GdW5jdGlvbiwgaXNFYXNpbmdBcnJheSB9O1xuIiwiaW1wb3J0IHsgY29tcGxleCB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcblxuLyoqXG4gKiBDaGVjayBpZiBhIHZhbHVlIGlzIGFuaW1hdGFibGUuIEV4YW1wbGVzOlxuICpcbiAqIOKchTogMTAwLCBcIjEwMHB4XCIsIFwiI2ZmZlwiXG4gKiDinYw6IFwiYmxvY2tcIiwgXCJ1cmwoMi5qcGcpXCJcbiAqIEBwYXJhbSB2YWx1ZVxuICpcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgaXNBbmltYXRhYmxlID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAvLyBJZiB0aGUgbGlzdCBvZiBrZXlzIHRhdCBtaWdodCBiZSBub24tYW5pbWF0YWJsZSBncm93cywgcmVwbGFjZSB3aXRoIFNldFxuICAgIGlmIChrZXkgPT09IFwiekluZGV4XCIpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyBJZiBpdCdzIGEgbnVtYmVyIG9yIGEga2V5ZnJhbWVzIGFycmF5LCB3ZSBjYW4gYW5pbWF0ZSBpdC4gV2UgbWlnaHQgYXQgc29tZSBwb2ludFxuICAgIC8vIG5lZWQgdG8gZG8gYSBkZWVwIGlzQW5pbWF0YWJsZSBjaGVjayBvZiBrZXlmcmFtZXMsIG9yIGxldCBQb3Btb3Rpb24gaGFuZGxlIHRoaXMsXG4gICAgLy8gYnV0IGZvciBub3cgbGV0cyBsZWF2ZSBpdCBsaWtlIHRoaXMgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnNcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIC8vIEl0J3MgYW5pbWF0YWJsZSBpZiB3ZSBoYXZlIGEgc3RyaW5nXG4gICAgICAgIGNvbXBsZXgudGVzdCh2YWx1ZSkgJiYgLy8gQW5kIGl0IGNvbnRhaW5zIG51bWJlcnMgYW5kL29yIGNvbG9yc1xuICAgICAgICAhdmFsdWUuc3RhcnRzV2l0aChcInVybChcIikgLy8gVW5sZXNzIGl0IHN0YXJ0cyB3aXRoIFwidXJsKFwiXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgeyBpc0FuaW1hdGFibGUgfTtcbiIsImltcG9ydCB7IF9fYXNzaWduIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgaXNLZXlmcmFtZXNUYXJnZXQgfSBmcm9tICcuL2lzLWtleWZyYW1lcy10YXJnZXQubWpzJztcblxudmFyIHVuZGVyRGFtcGVkU3ByaW5nID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gKHtcbiAgICB0eXBlOiBcInNwcmluZ1wiLFxuICAgIHN0aWZmbmVzczogNTAwLFxuICAgIGRhbXBpbmc6IDI1LFxuICAgIHJlc3RTcGVlZDogMTAsXG59KTsgfTtcbnZhciBjcml0aWNhbGx5RGFtcGVkU3ByaW5nID0gZnVuY3Rpb24gKHRvKSB7IHJldHVybiAoe1xuICAgIHR5cGU6IFwic3ByaW5nXCIsXG4gICAgc3RpZmZuZXNzOiA1NTAsXG4gICAgZGFtcGluZzogdG8gPT09IDAgPyAyICogTWF0aC5zcXJ0KDU1MCkgOiAzMCxcbiAgICByZXN0U3BlZWQ6IDEwLFxufSk7IH07XG52YXIgbGluZWFyVHdlZW4gPSBmdW5jdGlvbiAoKSB7IHJldHVybiAoe1xuICAgIHR5cGU6IFwia2V5ZnJhbWVzXCIsXG4gICAgZWFzZTogXCJsaW5lYXJcIixcbiAgICBkdXJhdGlvbjogMC4zLFxufSk7IH07XG52YXIga2V5ZnJhbWVzID0gZnVuY3Rpb24gKHZhbHVlcykgeyByZXR1cm4gKHtcbiAgICB0eXBlOiBcImtleWZyYW1lc1wiLFxuICAgIGR1cmF0aW9uOiAwLjgsXG4gICAgdmFsdWVzOiB2YWx1ZXMsXG59KTsgfTtcbnZhciBkZWZhdWx0VHJhbnNpdGlvbnMgPSB7XG4gICAgeDogdW5kZXJEYW1wZWRTcHJpbmcsXG4gICAgeTogdW5kZXJEYW1wZWRTcHJpbmcsXG4gICAgejogdW5kZXJEYW1wZWRTcHJpbmcsXG4gICAgcm90YXRlOiB1bmRlckRhbXBlZFNwcmluZyxcbiAgICByb3RhdGVYOiB1bmRlckRhbXBlZFNwcmluZyxcbiAgICByb3RhdGVZOiB1bmRlckRhbXBlZFNwcmluZyxcbiAgICByb3RhdGVaOiB1bmRlckRhbXBlZFNwcmluZyxcbiAgICBzY2FsZVg6IGNyaXRpY2FsbHlEYW1wZWRTcHJpbmcsXG4gICAgc2NhbGVZOiBjcml0aWNhbGx5RGFtcGVkU3ByaW5nLFxuICAgIHNjYWxlOiBjcml0aWNhbGx5RGFtcGVkU3ByaW5nLFxuICAgIG9wYWNpdHk6IGxpbmVhclR3ZWVuLFxuICAgIGJhY2tncm91bmRDb2xvcjogbGluZWFyVHdlZW4sXG4gICAgY29sb3I6IGxpbmVhclR3ZWVuLFxuICAgIGRlZmF1bHQ6IGNyaXRpY2FsbHlEYW1wZWRTcHJpbmcsXG59O1xudmFyIGdldERlZmF1bHRUcmFuc2l0aW9uID0gZnVuY3Rpb24gKHZhbHVlS2V5LCB0bykge1xuICAgIHZhciB0cmFuc2l0aW9uRmFjdG9yeTtcbiAgICBpZiAoaXNLZXlmcmFtZXNUYXJnZXQodG8pKSB7XG4gICAgICAgIHRyYW5zaXRpb25GYWN0b3J5ID0ga2V5ZnJhbWVzO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdHJhbnNpdGlvbkZhY3RvcnkgPVxuICAgICAgICAgICAgZGVmYXVsdFRyYW5zaXRpb25zW3ZhbHVlS2V5XSB8fCBkZWZhdWx0VHJhbnNpdGlvbnMuZGVmYXVsdDtcbiAgICB9XG4gICAgcmV0dXJuIF9fYXNzaWduKHsgdG86IHRvIH0sIHRyYW5zaXRpb25GYWN0b3J5KHRvKSk7XG59O1xuXG5leHBvcnQgeyBjcml0aWNhbGx5RGFtcGVkU3ByaW5nLCBnZXREZWZhdWx0VHJhbnNpdGlvbiwgbGluZWFyVHdlZW4sIHVuZGVyRGFtcGVkU3ByaW5nIH07XG4iLCJpbXBvcnQgeyBjb21wbGV4IH0gZnJvbSAnLi9pbmRleC5tanMnO1xuaW1wb3J0IHsgZmxvYXRSZWdleCB9IGZyb20gJy4uL3V0aWxzLm1qcyc7XG5cbmNvbnN0IG1heERlZmF1bHRzID0gbmV3IFNldChbJ2JyaWdodG5lc3MnLCAnY29udHJhc3QnLCAnc2F0dXJhdGUnLCAnb3BhY2l0eSddKTtcbmZ1bmN0aW9uIGFwcGx5RGVmYXVsdEZpbHRlcih2KSB7XG4gICAgbGV0IFtuYW1lLCB2YWx1ZV0gPSB2LnNsaWNlKDAsIC0xKS5zcGxpdCgnKCcpO1xuICAgIGlmIChuYW1lID09PSAnZHJvcC1zaGFkb3cnKVxuICAgICAgICByZXR1cm4gdjtcbiAgICBjb25zdCBbbnVtYmVyXSA9IHZhbHVlLm1hdGNoKGZsb2F0UmVnZXgpIHx8IFtdO1xuICAgIGlmICghbnVtYmVyKVxuICAgICAgICByZXR1cm4gdjtcbiAgICBjb25zdCB1bml0ID0gdmFsdWUucmVwbGFjZShudW1iZXIsICcnKTtcbiAgICBsZXQgZGVmYXVsdFZhbHVlID0gbWF4RGVmYXVsdHMuaGFzKG5hbWUpID8gMSA6IDA7XG4gICAgaWYgKG51bWJlciAhPT0gdmFsdWUpXG4gICAgICAgIGRlZmF1bHRWYWx1ZSAqPSAxMDA7XG4gICAgcmV0dXJuIG5hbWUgKyAnKCcgKyBkZWZhdWx0VmFsdWUgKyB1bml0ICsgJyknO1xufVxuY29uc3QgZnVuY3Rpb25SZWdleCA9IC8oW2Etei1dKilcXCguKj9cXCkvZztcbmNvbnN0IGZpbHRlciA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY29tcGxleCksIHsgZ2V0QW5pbWF0YWJsZU5vbmU6ICh2KSA9PiB7XG4gICAgICAgIGNvbnN0IGZ1bmN0aW9ucyA9IHYubWF0Y2goZnVuY3Rpb25SZWdleCk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbnMgPyBmdW5jdGlvbnMubWFwKGFwcGx5RGVmYXVsdEZpbHRlcikuam9pbignICcpIDogdjtcbiAgICB9IH0pO1xuXG5leHBvcnQgeyBmaWx0ZXIgfTtcbiIsImltcG9ydCB7IF9fYXNzaWduIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgY29sb3IsIGZpbHRlciB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcbmltcG9ydCB7IG51bWJlclZhbHVlVHlwZXMgfSBmcm9tICcuL251bWJlci5tanMnO1xuXG4vKipcbiAqIEEgbWFwIG9mIGRlZmF1bHQgdmFsdWUgdHlwZXMgZm9yIGNvbW1vbiB2YWx1ZXNcbiAqL1xudmFyIGRlZmF1bHRWYWx1ZVR5cGVzID0gX19hc3NpZ24oX19hc3NpZ24oe30sIG51bWJlclZhbHVlVHlwZXMpLCB7IFxuICAgIC8vIENvbG9yIHByb3BzXG4gICAgY29sb3I6IGNvbG9yLCBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLCBvdXRsaW5lQ29sb3I6IGNvbG9yLCBmaWxsOiBjb2xvciwgc3Ryb2tlOiBjb2xvciwgXG4gICAgLy8gQm9yZGVyIHByb3BzXG4gICAgYm9yZGVyQ29sb3I6IGNvbG9yLCBib3JkZXJUb3BDb2xvcjogY29sb3IsIGJvcmRlclJpZ2h0Q29sb3I6IGNvbG9yLCBib3JkZXJCb3R0b21Db2xvcjogY29sb3IsIGJvcmRlckxlZnRDb2xvcjogY29sb3IsIGZpbHRlcjogZmlsdGVyLCBXZWJraXRGaWx0ZXI6IGZpbHRlciB9KTtcbi8qKlxuICogR2V0cyB0aGUgZGVmYXVsdCBWYWx1ZVR5cGUgZm9yIHRoZSBwcm92aWRlZCB2YWx1ZSBrZXlcbiAqL1xudmFyIGdldERlZmF1bHRWYWx1ZVR5cGUgPSBmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBkZWZhdWx0VmFsdWVUeXBlc1trZXldOyB9O1xuXG5leHBvcnQgeyBkZWZhdWx0VmFsdWVUeXBlcywgZ2V0RGVmYXVsdFZhbHVlVHlwZSB9O1xuIiwiaW1wb3J0IHsgZmlsdGVyLCBjb21wbGV4IH0gZnJvbSAnc3R5bGUtdmFsdWUtdHlwZXMnO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFZhbHVlVHlwZSB9IGZyb20gJy4vZGVmYXVsdHMubWpzJztcblxuZnVuY3Rpb24gZ2V0QW5pbWF0YWJsZU5vbmUoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBfYTtcbiAgICB2YXIgZGVmYXVsdFZhbHVlVHlwZSA9IGdldERlZmF1bHRWYWx1ZVR5cGUoa2V5KTtcbiAgICBpZiAoZGVmYXVsdFZhbHVlVHlwZSAhPT0gZmlsdGVyKVxuICAgICAgICBkZWZhdWx0VmFsdWVUeXBlID0gY29tcGxleDtcbiAgICAvLyBJZiB2YWx1ZSBpcyBub3QgcmVjb2duaXNlZCBhcyBhbmltYXRhYmxlLCBpZSBcIm5vbmVcIiwgY3JlYXRlIGFuIGFuaW1hdGFibGUgdmVyc2lvbiBvcmlnaW4gYmFzZWQgb24gdGhlIHRhcmdldFxuICAgIHJldHVybiAoX2EgPSBkZWZhdWx0VmFsdWVUeXBlLmdldEFuaW1hdGFibGVOb25lKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChkZWZhdWx0VmFsdWVUeXBlLCB2YWx1ZSk7XG59XG5cbmV4cG9ydCB7IGdldEFuaW1hdGFibGVOb25lIH07XG4iLCJ2YXIgaW5zdGFudEFuaW1hdGlvblN0YXRlID0ge1xuICAgIGN1cnJlbnQ6IGZhbHNlLFxufTtcblxuZXhwb3J0IHsgaW5zdGFudEFuaW1hdGlvblN0YXRlIH07XG4iLCJpbXBvcnQgeyBfX2Fzc2lnbiwgX19yZXN0LCBfX3NwcmVhZEFycmF5LCBfX3JlYWQgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBpbmVydGlhLCBhbmltYXRlIH0gZnJvbSAncG9wbW90aW9uJztcbmltcG9ydCB7IHNlY29uZHNUb01pbGxpc2Vjb25kcyB9IGZyb20gJy4uLy4uL3V0aWxzL3RpbWUtY29udmVyc2lvbi5tanMnO1xuaW1wb3J0IHsgaXNFYXNpbmdBcnJheSwgZWFzaW5nRGVmaW5pdGlvblRvRnVuY3Rpb24gfSBmcm9tICcuL2Vhc2luZy5tanMnO1xuaW1wb3J0IHsgaXNBbmltYXRhYmxlIH0gZnJvbSAnLi9pcy1hbmltYXRhYmxlLm1qcyc7XG5pbXBvcnQgeyBnZXREZWZhdWx0VHJhbnNpdGlvbiB9IGZyb20gJy4vZGVmYXVsdC10cmFuc2l0aW9ucy5tanMnO1xuaW1wb3J0IHsgd2FybmluZyB9IGZyb20gJ2hleS1saXN0ZW4nO1xuaW1wb3J0IHsgZ2V0QW5pbWF0YWJsZU5vbmUgfSBmcm9tICcuLi8uLi9yZW5kZXIvZG9tL3ZhbHVlLXR5cGVzL2FuaW1hdGFibGUtbm9uZS5tanMnO1xuaW1wb3J0IHsgaW5zdGFudEFuaW1hdGlvblN0YXRlIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXNlLWluc3RhbnQtdHJhbnNpdGlvbi1zdGF0ZS5tanMnO1xuaW1wb3J0IHsgcmVzb2x2ZUZpbmFsVmFsdWVJbktleWZyYW1lcyB9IGZyb20gJy4uLy4uL3V0aWxzL3Jlc29sdmUtdmFsdWUubWpzJztcblxuLyoqXG4gKiBEZWNpZGUgd2hldGhlciBhIHRyYW5zaXRpb24gaXMgZGVmaW5lZCBvbiBhIGdpdmVuIFRyYW5zaXRpb24uXG4gKiBUaGlzIGZpbHRlcnMgb3V0IG9yY2hlc3RyYXRpb24gb3B0aW9ucyBhbmQgcmV0dXJucyB0cnVlXG4gKiBpZiBhbnkgb3B0aW9ucyBhcmUgbGVmdC5cbiAqL1xuZnVuY3Rpb24gaXNUcmFuc2l0aW9uRGVmaW5lZChfYSkge1xuICAgIF9hLndoZW47IF9hLmRlbGF5OyBfYS5kZWxheUNoaWxkcmVuOyBfYS5zdGFnZ2VyQ2hpbGRyZW47IF9hLnN0YWdnZXJEaXJlY3Rpb247IF9hLnJlcGVhdDsgX2EucmVwZWF0VHlwZTsgX2EucmVwZWF0RGVsYXk7IF9hLmZyb207IHZhciB0cmFuc2l0aW9uID0gX19yZXN0KF9hLCBbXCJ3aGVuXCIsIFwiZGVsYXlcIiwgXCJkZWxheUNoaWxkcmVuXCIsIFwic3RhZ2dlckNoaWxkcmVuXCIsIFwic3RhZ2dlckRpcmVjdGlvblwiLCBcInJlcGVhdFwiLCBcInJlcGVhdFR5cGVcIiwgXCJyZXBlYXREZWxheVwiLCBcImZyb21cIl0pO1xuICAgIHJldHVybiAhIU9iamVjdC5rZXlzKHRyYW5zaXRpb24pLmxlbmd0aDtcbn1cbnZhciBsZWdhY3lSZXBlYXRXYXJuaW5nID0gZmFsc2U7XG4vKipcbiAqIENvbnZlcnQgRnJhbWVyIE1vdGlvbidzIFRyYW5zaXRpb24gdHlwZSBpbnRvIFBvcG1vdGlvbi1jb21wYXRpYmxlIG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUcmFuc2l0aW9uVG9BbmltYXRpb25PcHRpb25zKF9hKSB7XG4gICAgdmFyIGVhc2UgPSBfYS5lYXNlLCB0aW1lcyA9IF9hLnRpbWVzLCB5b3lvID0gX2EueW95bywgZmxpcCA9IF9hLmZsaXAsIGxvb3AgPSBfYS5sb29wLCB0cmFuc2l0aW9uID0gX19yZXN0KF9hLCBbXCJlYXNlXCIsIFwidGltZXNcIiwgXCJ5b3lvXCIsIFwiZmxpcFwiLCBcImxvb3BcIl0pO1xuICAgIHZhciBvcHRpb25zID0gX19hc3NpZ24oe30sIHRyYW5zaXRpb24pO1xuICAgIGlmICh0aW1lcylcbiAgICAgICAgb3B0aW9uc1tcIm9mZnNldFwiXSA9IHRpbWVzO1xuICAgIC8qKlxuICAgICAqIENvbnZlcnQgYW55IGV4aXN0aW5nIGR1cmF0aW9ucyBmcm9tIHNlY29uZHMgdG8gbWlsbGlzZWNvbmRzXG4gICAgICovXG4gICAgaWYgKHRyYW5zaXRpb24uZHVyYXRpb24pXG4gICAgICAgIG9wdGlvbnNbXCJkdXJhdGlvblwiXSA9IHNlY29uZHNUb01pbGxpc2Vjb25kcyh0cmFuc2l0aW9uLmR1cmF0aW9uKTtcbiAgICBpZiAodHJhbnNpdGlvbi5yZXBlYXREZWxheSlcbiAgICAgICAgb3B0aW9ucy5yZXBlYXREZWxheSA9IHNlY29uZHNUb01pbGxpc2Vjb25kcyh0cmFuc2l0aW9uLnJlcGVhdERlbGF5KTtcbiAgICAvKipcbiAgICAgKiBNYXAgZWFzaW5nIG5hbWVzIHRvIFBvcG1vdGlvbidzIGVhc2luZyBmdW5jdGlvbnNcbiAgICAgKi9cbiAgICBpZiAoZWFzZSkge1xuICAgICAgICBvcHRpb25zW1wiZWFzZVwiXSA9IGlzRWFzaW5nQXJyYXkoZWFzZSlcbiAgICAgICAgICAgID8gZWFzZS5tYXAoZWFzaW5nRGVmaW5pdGlvblRvRnVuY3Rpb24pXG4gICAgICAgICAgICA6IGVhc2luZ0RlZmluaXRpb25Ub0Z1bmN0aW9uKGVhc2UpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdXBwb3J0IGxlZ2FjeSB0cmFuc2l0aW9uIEFQSVxuICAgICAqL1xuICAgIGlmICh0cmFuc2l0aW9uLnR5cGUgPT09IFwidHdlZW5cIilcbiAgICAgICAgb3B0aW9ucy50eXBlID0gXCJrZXlmcmFtZXNcIjtcbiAgICAvKipcbiAgICAgKiBUT0RPOiBUaGVzZSBvcHRpb25zIGFyZSBvZmZpY2lhbGx5IHJlbW92ZWQgZnJvbSB0aGUgQVBJLlxuICAgICAqL1xuICAgIGlmICh5b3lvIHx8IGxvb3AgfHwgZmxpcCkge1xuICAgICAgICB3YXJuaW5nKCFsZWdhY3lSZXBlYXRXYXJuaW5nLCBcInlveW8sIGxvb3AgYW5kIGZsaXAgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgQVBJLiBSZXBsYWNlIHdpdGggcmVwZWF0IGFuZCByZXBlYXRUeXBlIG9wdGlvbnMuXCIpO1xuICAgICAgICBsZWdhY3lSZXBlYXRXYXJuaW5nID0gdHJ1ZTtcbiAgICAgICAgaWYgKHlveW8pIHtcbiAgICAgICAgICAgIG9wdGlvbnMucmVwZWF0VHlwZSA9IFwicmV2ZXJzZVwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxvb3ApIHtcbiAgICAgICAgICAgIG9wdGlvbnMucmVwZWF0VHlwZSA9IFwibG9vcFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZsaXApIHtcbiAgICAgICAgICAgIG9wdGlvbnMucmVwZWF0VHlwZSA9IFwibWlycm9yXCI7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5yZXBlYXQgPSBsb29wIHx8IHlveW8gfHwgZmxpcCB8fCB0cmFuc2l0aW9uLnJlcGVhdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVE9ETzogUG9wbW90aW9uIDkgaGFzIHRoZSBhYmlsaXR5IHRvIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoZXRoZXIgdG8gdXNlXG4gICAgICogYSBrZXlmcmFtZXMgb3Igc3ByaW5nIGFuaW1hdGlvbiwgYnV0IGRvZXMgc28gYnkgZGV0ZWN0aW5nIHZlbG9jaXR5IGFuZCBvdGhlciBzcHJpbmcgb3B0aW9ucy5cbiAgICAgKiBJdCdkIGJlIGdvb2QgdG8gaW50cm9kdWNlIGEgc2ltaWxhciB0aGluZyBoZXJlLlxuICAgICAqL1xuICAgIGlmICh0cmFuc2l0aW9uLnR5cGUgIT09IFwic3ByaW5nXCIpXG4gICAgICAgIG9wdGlvbnMudHlwZSA9IFwia2V5ZnJhbWVzXCI7XG4gICAgcmV0dXJuIG9wdGlvbnM7XG59XG4vKipcbiAqIEdldCB0aGUgZGVsYXkgZm9yIGEgdmFsdWUgYnkgY2hlY2tpbmcgVHJhbnNpdGlvbiB3aXRoIGRlY3JlYXNpbmcgc3BlY2lmaWNpdHkuXG4gKi9cbmZ1bmN0aW9uIGdldERlbGF5RnJvbVRyYW5zaXRpb24odHJhbnNpdGlvbiwga2V5KSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICB2YXIgdmFsdWVUcmFuc2l0aW9uID0gZ2V0VmFsdWVUcmFuc2l0aW9uKHRyYW5zaXRpb24sIGtleSkgfHwge307XG4gICAgcmV0dXJuIChfYiA9IChfYSA9IHZhbHVlVHJhbnNpdGlvbi5kZWxheSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdHJhbnNpdGlvbi5kZWxheSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogMDtcbn1cbmZ1bmN0aW9uIGh5ZHJhdGVLZXlmcmFtZXMob3B0aW9ucykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMudG8pICYmIG9wdGlvbnMudG9bMF0gPT09IG51bGwpIHtcbiAgICAgICAgb3B0aW9ucy50byA9IF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChvcHRpb25zLnRvKSwgZmFsc2UpO1xuICAgICAgICBvcHRpb25zLnRvWzBdID0gb3B0aW9ucy5mcm9tO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucztcbn1cbmZ1bmN0aW9uIGdldFBvcG1vdGlvbkFuaW1hdGlvbk9wdGlvbnModHJhbnNpdGlvbiwgb3B0aW9ucywga2V5KSB7XG4gICAgdmFyIF9hO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMudG8pKSB7XG4gICAgICAgIChfYSA9IHRyYW5zaXRpb24uZHVyYXRpb24pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICh0cmFuc2l0aW9uLmR1cmF0aW9uID0gMC44KTtcbiAgICB9XG4gICAgaHlkcmF0ZUtleWZyYW1lcyhvcHRpb25zKTtcbiAgICAvKipcbiAgICAgKiBHZXQgYSBkZWZhdWx0IHRyYW5zaXRpb24gaWYgbm9uZSBpcyBkZXRlcm1pbmVkIHRvIGJlIGRlZmluZWQuXG4gICAgICovXG4gICAgaWYgKCFpc1RyYW5zaXRpb25EZWZpbmVkKHRyYW5zaXRpb24pKSB7XG4gICAgICAgIHRyYW5zaXRpb24gPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgdHJhbnNpdGlvbiksIGdldERlZmF1bHRUcmFuc2l0aW9uKGtleSwgb3B0aW9ucy50bykpO1xuICAgIH1cbiAgICByZXR1cm4gX19hc3NpZ24oX19hc3NpZ24oe30sIG9wdGlvbnMpLCBjb252ZXJ0VHJhbnNpdGlvblRvQW5pbWF0aW9uT3B0aW9ucyh0cmFuc2l0aW9uKSk7XG59XG4vKipcbiAqXG4gKi9cbmZ1bmN0aW9uIGdldEFuaW1hdGlvbihrZXksIHZhbHVlLCB0YXJnZXQsIHRyYW5zaXRpb24sIG9uQ29tcGxldGUpIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIHZhbHVlVHJhbnNpdGlvbiA9IGdldFZhbHVlVHJhbnNpdGlvbih0cmFuc2l0aW9uLCBrZXkpO1xuICAgIHZhciBvcmlnaW4gPSAoX2EgPSB2YWx1ZVRyYW5zaXRpb24uZnJvbSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdmFsdWUuZ2V0KCk7XG4gICAgdmFyIGlzVGFyZ2V0QW5pbWF0YWJsZSA9IGlzQW5pbWF0YWJsZShrZXksIHRhcmdldCk7XG4gICAgaWYgKG9yaWdpbiA9PT0gXCJub25lXCIgJiYgaXNUYXJnZXRBbmltYXRhYmxlICYmIHR5cGVvZiB0YXJnZXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHdlJ3JlIHRyeWluZyB0byBhbmltYXRlIGZyb20gXCJub25lXCIsIHRyeSBhbmQgZ2V0IGFuIGFuaW1hdGFibGUgdmVyc2lvblxuICAgICAgICAgKiBvZiB0aGUgdGFyZ2V0LiBUaGlzIGNvdWxkIGJlIGltcHJvdmVkIHRvIHdvcmsgYm90aCB3YXlzLlxuICAgICAgICAgKi9cbiAgICAgICAgb3JpZ2luID0gZ2V0QW5pbWF0YWJsZU5vbmUoa2V5LCB0YXJnZXQpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1plcm8ob3JpZ2luKSAmJiB0eXBlb2YgdGFyZ2V0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIG9yaWdpbiA9IGdldFplcm9Vbml0KHRhcmdldCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KHRhcmdldCkgJiZcbiAgICAgICAgaXNaZXJvKHRhcmdldCkgJiZcbiAgICAgICAgdHlwZW9mIG9yaWdpbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0YXJnZXQgPSBnZXRaZXJvVW5pdChvcmlnaW4pO1xuICAgIH1cbiAgICB2YXIgaXNPcmlnaW5BbmltYXRhYmxlID0gaXNBbmltYXRhYmxlKGtleSwgb3JpZ2luKTtcbiAgICB3YXJuaW5nKGlzT3JpZ2luQW5pbWF0YWJsZSA9PT0gaXNUYXJnZXRBbmltYXRhYmxlLCBcIllvdSBhcmUgdHJ5aW5nIHRvIGFuaW1hdGUgXCIuY29uY2F0KGtleSwgXCIgZnJvbSBcXFwiXCIpLmNvbmNhdChvcmlnaW4sIFwiXFxcIiB0byBcXFwiXCIpLmNvbmNhdCh0YXJnZXQsIFwiXFxcIi4gXCIpLmNvbmNhdChvcmlnaW4sIFwiIGlzIG5vdCBhbiBhbmltYXRhYmxlIHZhbHVlIC0gdG8gZW5hYmxlIHRoaXMgYW5pbWF0aW9uIHNldCBcIikuY29uY2F0KG9yaWdpbiwgXCIgdG8gYSB2YWx1ZSBhbmltYXRhYmxlIHRvIFwiKS5jb25jYXQodGFyZ2V0LCBcIiB2aWEgdGhlIGBzdHlsZWAgcHJvcGVydHkuXCIpKTtcbiAgICBmdW5jdGlvbiBzdGFydCgpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBmcm9tOiBvcmlnaW4sXG4gICAgICAgICAgICB0bzogdGFyZ2V0LFxuICAgICAgICAgICAgdmVsb2NpdHk6IHZhbHVlLmdldFZlbG9jaXR5KCksXG4gICAgICAgICAgICBvbkNvbXBsZXRlOiBvbkNvbXBsZXRlLFxuICAgICAgICAgICAgb25VcGRhdGU6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2YWx1ZS5zZXQodik7IH0sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB2YWx1ZVRyYW5zaXRpb24udHlwZSA9PT0gXCJpbmVydGlhXCIgfHxcbiAgICAgICAgICAgIHZhbHVlVHJhbnNpdGlvbi50eXBlID09PSBcImRlY2F5XCJcbiAgICAgICAgICAgID8gaW5lcnRpYShfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb3B0aW9ucyksIHZhbHVlVHJhbnNpdGlvbikpXG4gICAgICAgICAgICA6IGFuaW1hdGUoX19hc3NpZ24oX19hc3NpZ24oe30sIGdldFBvcG1vdGlvbkFuaW1hdGlvbk9wdGlvbnModmFsdWVUcmFuc2l0aW9uLCBvcHRpb25zLCBrZXkpKSwgeyBvblVwZGF0ZTogZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9uVXBkYXRlKHYpO1xuICAgICAgICAgICAgICAgICAgICAoX2EgPSB2YWx1ZVRyYW5zaXRpb24ub25VcGRhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHZhbHVlVHJhbnNpdGlvbiwgdik7XG4gICAgICAgICAgICAgICAgfSwgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25Db21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAoX2EgPSB2YWx1ZVRyYW5zaXRpb24ub25Db21wbGV0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodmFsdWVUcmFuc2l0aW9uKTtcbiAgICAgICAgICAgICAgICB9IH0pKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0KCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICB2YXIgZmluYWxUYXJnZXQgPSByZXNvbHZlRmluYWxWYWx1ZUluS2V5ZnJhbWVzKHRhcmdldCk7XG4gICAgICAgIHZhbHVlLnNldChmaW5hbFRhcmdldCk7XG4gICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgICAgKF9hID0gdmFsdWVUcmFuc2l0aW9uID09PSBudWxsIHx8IHZhbHVlVHJhbnNpdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmFsdWVUcmFuc2l0aW9uLm9uVXBkYXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh2YWx1ZVRyYW5zaXRpb24sIGZpbmFsVGFyZ2V0KTtcbiAgICAgICAgKF9iID0gdmFsdWVUcmFuc2l0aW9uID09PSBudWxsIHx8IHZhbHVlVHJhbnNpdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmFsdWVUcmFuc2l0aW9uLm9uQ29tcGxldGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKHZhbHVlVHJhbnNpdGlvbik7XG4gICAgICAgIHJldHVybiB7IHN0b3A6IGZ1bmN0aW9uICgpIHsgfSB9O1xuICAgIH1cbiAgICByZXR1cm4gIWlzT3JpZ2luQW5pbWF0YWJsZSB8fFxuICAgICAgICAhaXNUYXJnZXRBbmltYXRhYmxlIHx8XG4gICAgICAgIHZhbHVlVHJhbnNpdGlvbi50eXBlID09PSBmYWxzZVxuICAgICAgICA/IHNldFxuICAgICAgICA6IHN0YXJ0O1xufVxuZnVuY3Rpb24gaXNaZXJvKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSA9PT0gMCB8fFxuICAgICAgICAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICBwYXJzZUZsb2F0KHZhbHVlKSA9PT0gMCAmJlxuICAgICAgICAgICAgdmFsdWUuaW5kZXhPZihcIiBcIikgPT09IC0xKSk7XG59XG5mdW5jdGlvbiBnZXRaZXJvVW5pdChwb3RlbnRpYWxVbml0VHlwZSkge1xuICAgIHJldHVybiB0eXBlb2YgcG90ZW50aWFsVW5pdFR5cGUgPT09IFwibnVtYmVyXCJcbiAgICAgICAgPyAwXG4gICAgICAgIDogZ2V0QW5pbWF0YWJsZU5vbmUoXCJcIiwgcG90ZW50aWFsVW5pdFR5cGUpO1xufVxuZnVuY3Rpb24gZ2V0VmFsdWVUcmFuc2l0aW9uKHRyYW5zaXRpb24sIGtleSkge1xuICAgIHJldHVybiB0cmFuc2l0aW9uW2tleV0gfHwgdHJhbnNpdGlvbltcImRlZmF1bHRcIl0gfHwgdHJhbnNpdGlvbjtcbn1cbi8qKlxuICogU3RhcnQgYW5pbWF0aW9uIG9uIGEgTW90aW9uVmFsdWUuIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW50ZXJmYWNlIGJldHdlZW5cbiAqIEZyYW1lciBNb3Rpb24gYW5kIFBvcG1vdGlvblxuICovXG5mdW5jdGlvbiBzdGFydEFuaW1hdGlvbihrZXksIHZhbHVlLCB0YXJnZXQsIHRyYW5zaXRpb24pIHtcbiAgICBpZiAodHJhbnNpdGlvbiA9PT0gdm9pZCAwKSB7IHRyYW5zaXRpb24gPSB7fTsgfVxuICAgIGlmIChpbnN0YW50QW5pbWF0aW9uU3RhdGUuY3VycmVudCkge1xuICAgICAgICB0cmFuc2l0aW9uID0geyB0eXBlOiBmYWxzZSB9O1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUuc3RhcnQoZnVuY3Rpb24gKG9uQ29tcGxldGUpIHtcbiAgICAgICAgdmFyIGRlbGF5VGltZXI7XG4gICAgICAgIHZhciBjb250cm9scztcbiAgICAgICAgdmFyIGFuaW1hdGlvbiA9IGdldEFuaW1hdGlvbihrZXksIHZhbHVlLCB0YXJnZXQsIHRyYW5zaXRpb24sIG9uQ29tcGxldGUpO1xuICAgICAgICB2YXIgZGVsYXkgPSBnZXREZWxheUZyb21UcmFuc2l0aW9uKHRyYW5zaXRpb24sIGtleSk7XG4gICAgICAgIHZhciBzdGFydCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIChjb250cm9scyA9IGFuaW1hdGlvbigpKTsgfTtcbiAgICAgICAgaWYgKGRlbGF5KSB7XG4gICAgICAgICAgICBkZWxheVRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoc3RhcnQsIHNlY29uZHNUb01pbGxpc2Vjb25kcyhkZWxheSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3RhcnQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlbGF5VGltZXIpO1xuICAgICAgICAgICAgY29udHJvbHMgPT09IG51bGwgfHwgY29udHJvbHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbnRyb2xzLnN0b3AoKTtcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IHsgY29udmVydFRyYW5zaXRpb25Ub0FuaW1hdGlvbk9wdGlvbnMsIGdldERlbGF5RnJvbVRyYW5zaXRpb24sIGdldFBvcG1vdGlvbkFuaW1hdGlvbk9wdGlvbnMsIGdldFZhbHVlVHJhbnNpdGlvbiwgZ2V0WmVyb1VuaXQsIGh5ZHJhdGVLZXlmcmFtZXMsIGlzVHJhbnNpdGlvbkRlZmluZWQsIGlzWmVybywgc3RhcnRBbmltYXRpb24gfTtcbiIsImltcG9ydCB7IGFuaW1hdGUgfSBmcm9tICcuL2luZGV4Lm1qcyc7XG5pbXBvcnQgeyB2ZWxvY2l0eVBlclNlY29uZCB9IGZyb20gJy4uL3V0aWxzL3ZlbG9jaXR5LXBlci1zZWNvbmQubWpzJztcbmltcG9ydCB7IGdldEZyYW1lRGF0YSB9IGZyb20gJ2ZyYW1lc3luYyc7XG5cbmZ1bmN0aW9uIGluZXJ0aWEoeyBmcm9tID0gMCwgdmVsb2NpdHkgPSAwLCBtaW4sIG1heCwgcG93ZXIgPSAwLjgsIHRpbWVDb25zdGFudCA9IDc1MCwgYm91bmNlU3RpZmZuZXNzID0gNTAwLCBib3VuY2VEYW1waW5nID0gMTAsIHJlc3REZWx0YSA9IDEsIG1vZGlmeVRhcmdldCwgZHJpdmVyLCBvblVwZGF0ZSwgb25Db21wbGV0ZSwgb25TdG9wLCB9KSB7XG4gICAgbGV0IGN1cnJlbnRBbmltYXRpb247XG4gICAgZnVuY3Rpb24gaXNPdXRPZkJvdW5kcyh2KSB7XG4gICAgICAgIHJldHVybiAobWluICE9PSB1bmRlZmluZWQgJiYgdiA8IG1pbikgfHwgKG1heCAhPT0gdW5kZWZpbmVkICYmIHYgPiBtYXgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBib3VuZGFyeU5lYXJlc3Qodikge1xuICAgICAgICBpZiAobWluID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gbWF4O1xuICAgICAgICBpZiAobWF4ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gbWluO1xuICAgICAgICByZXR1cm4gTWF0aC5hYnMobWluIC0gdikgPCBNYXRoLmFicyhtYXggLSB2KSA/IG1pbiA6IG1heDtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3RhcnRBbmltYXRpb24ob3B0aW9ucykge1xuICAgICAgICBjdXJyZW50QW5pbWF0aW9uID09PSBudWxsIHx8IGN1cnJlbnRBbmltYXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN1cnJlbnRBbmltYXRpb24uc3RvcCgpO1xuICAgICAgICBjdXJyZW50QW5pbWF0aW9uID0gYW5pbWF0ZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpLCB7IGRyaXZlciwgb25VcGRhdGU6ICh2KSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIG9uVXBkYXRlID09PSBudWxsIHx8IG9uVXBkYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblVwZGF0ZSh2KTtcbiAgICAgICAgICAgICAgICAoX2EgPSBvcHRpb25zLm9uVXBkYXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChvcHRpb25zLCB2KTtcbiAgICAgICAgICAgIH0sIG9uQ29tcGxldGUsXG4gICAgICAgICAgICBvblN0b3AgfSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdGFydFNwcmluZyhvcHRpb25zKSB7XG4gICAgICAgIHN0YXJ0QW5pbWF0aW9uKE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcInNwcmluZ1wiLCBzdGlmZm5lc3M6IGJvdW5jZVN0aWZmbmVzcywgZGFtcGluZzogYm91bmNlRGFtcGluZywgcmVzdERlbHRhIH0sIG9wdGlvbnMpKTtcbiAgICB9XG4gICAgaWYgKGlzT3V0T2ZCb3VuZHMoZnJvbSkpIHtcbiAgICAgICAgc3RhcnRTcHJpbmcoeyBmcm9tLCB2ZWxvY2l0eSwgdG86IGJvdW5kYXJ5TmVhcmVzdChmcm9tKSB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxldCB0YXJnZXQgPSBwb3dlciAqIHZlbG9jaXR5ICsgZnJvbTtcbiAgICAgICAgaWYgKHR5cGVvZiBtb2RpZnlUYXJnZXQgIT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICB0YXJnZXQgPSBtb2RpZnlUYXJnZXQodGFyZ2V0KTtcbiAgICAgICAgY29uc3QgYm91bmRhcnkgPSBib3VuZGFyeU5lYXJlc3QodGFyZ2V0KTtcbiAgICAgICAgY29uc3QgaGVhZGluZyA9IGJvdW5kYXJ5ID09PSBtaW4gPyAtMSA6IDE7XG4gICAgICAgIGxldCBwcmV2O1xuICAgICAgICBsZXQgY3VycmVudDtcbiAgICAgICAgY29uc3QgY2hlY2tCb3VuZGFyeSA9ICh2KSA9PiB7XG4gICAgICAgICAgICBwcmV2ID0gY3VycmVudDtcbiAgICAgICAgICAgIGN1cnJlbnQgPSB2O1xuICAgICAgICAgICAgdmVsb2NpdHkgPSB2ZWxvY2l0eVBlclNlY29uZCh2IC0gcHJldiwgZ2V0RnJhbWVEYXRhKCkuZGVsdGEpO1xuICAgICAgICAgICAgaWYgKChoZWFkaW5nID09PSAxICYmIHYgPiBib3VuZGFyeSkgfHxcbiAgICAgICAgICAgICAgICAoaGVhZGluZyA9PT0gLTEgJiYgdiA8IGJvdW5kYXJ5KSkge1xuICAgICAgICAgICAgICAgIHN0YXJ0U3ByaW5nKHsgZnJvbTogdiwgdG86IGJvdW5kYXJ5LCB2ZWxvY2l0eSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgc3RhcnRBbmltYXRpb24oe1xuICAgICAgICAgICAgdHlwZTogXCJkZWNheVwiLFxuICAgICAgICAgICAgZnJvbSxcbiAgICAgICAgICAgIHZlbG9jaXR5LFxuICAgICAgICAgICAgdGltZUNvbnN0YW50LFxuICAgICAgICAgICAgcG93ZXIsXG4gICAgICAgICAgICByZXN0RGVsdGEsXG4gICAgICAgICAgICBtb2RpZnlUYXJnZXQsXG4gICAgICAgICAgICBvblVwZGF0ZTogaXNPdXRPZkJvdW5kcyh0YXJnZXQpID8gY2hlY2tCb3VuZGFyeSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHN0b3A6ICgpID0+IGN1cnJlbnRBbmltYXRpb24gPT09IG51bGwgfHwgY3VycmVudEFuaW1hdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3VycmVudEFuaW1hdGlvbi5zdG9wKCksXG4gICAgfTtcbn1cblxuZXhwb3J0IHsgaW5lcnRpYSB9O1xuIiwiLyoqXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyBhIG51bWVyaWNhbCBzdHJpbmcsIGllIGEgc3RyaW5nIHRoYXQgaXMgcHVyZWx5IGEgbnVtYmVyIGVnIFwiMTAwXCIgb3IgXCItMTAwLjFcIlxuICovXG52YXIgaXNOdW1lcmljYWxTdHJpbmcgPSBmdW5jdGlvbiAodikgeyByZXR1cm4gL15cXC0/XFxkKlxcLj9cXGQrJC8udGVzdCh2KTsgfTtcblxuZXhwb3J0IHsgaXNOdW1lcmljYWxTdHJpbmcgfTtcbiIsIi8qKlxuICogQ2hlY2sgaWYgdGhlIHZhbHVlIGlzIGEgemVybyB2YWx1ZSBzdHJpbmcgbGlrZSBcIjBweFwiIG9yIFwiMCVcIlxuICovXG52YXIgaXNaZXJvVmFsdWVTdHJpbmcgPSBmdW5jdGlvbiAodikgeyByZXR1cm4gL14wW14uXFxzXSskLy50ZXN0KHYpOyB9O1xuXG5leHBvcnQgeyBpc1plcm9WYWx1ZVN0cmluZyB9O1xuIiwiaW1wb3J0IHsgX19yZWFkIH0gZnJvbSAndHNsaWInO1xuXG5mdW5jdGlvbiBhZGRVbmlxdWVJdGVtKGFyciwgaXRlbSkge1xuICAgIGFyci5pbmRleE9mKGl0ZW0pID09PSAtMSAmJiBhcnIucHVzaChpdGVtKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUl0ZW0oYXJyLCBpdGVtKSB7XG4gICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgaW5kZXggPiAtMSAmJiBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbn1cbi8vIEFkYXB0ZWQgZnJvbSBhcnJheS1tb3ZlXG5mdW5jdGlvbiBtb3ZlSXRlbShfYSwgZnJvbUluZGV4LCB0b0luZGV4KSB7XG4gICAgdmFyIF9iID0gX19yZWFkKF9hKSwgYXJyID0gX2Iuc2xpY2UoMCk7XG4gICAgdmFyIHN0YXJ0SW5kZXggPSBmcm9tSW5kZXggPCAwID8gYXJyLmxlbmd0aCArIGZyb21JbmRleCA6IGZyb21JbmRleDtcbiAgICBpZiAoc3RhcnRJbmRleCA+PSAwICYmIHN0YXJ0SW5kZXggPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgIHZhciBlbmRJbmRleCA9IHRvSW5kZXggPCAwID8gYXJyLmxlbmd0aCArIHRvSW5kZXggOiB0b0luZGV4O1xuICAgICAgICB2YXIgX2MgPSBfX3JlYWQoYXJyLnNwbGljZShmcm9tSW5kZXgsIDEpLCAxKSwgaXRlbSA9IF9jWzBdO1xuICAgICAgICBhcnIuc3BsaWNlKGVuZEluZGV4LCAwLCBpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycjtcbn1cblxuZXhwb3J0IHsgYWRkVW5pcXVlSXRlbSwgbW92ZUl0ZW0sIHJlbW92ZUl0ZW0gfTtcbiIsImltcG9ydCB7IGFkZFVuaXF1ZUl0ZW0sIHJlbW92ZUl0ZW0gfSBmcm9tICcuL2FycmF5Lm1qcyc7XG5cbnZhciBTdWJzY3JpcHRpb25NYW5hZ2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFN1YnNjcmlwdGlvbk1hbmFnZXIoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgIH1cbiAgICBTdWJzY3JpcHRpb25NYW5hZ2VyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoaGFuZGxlcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBhZGRVbmlxdWVJdGVtKHRoaXMuc3Vic2NyaXB0aW9ucywgaGFuZGxlcik7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiByZW1vdmVJdGVtKF90aGlzLnN1YnNjcmlwdGlvbnMsIGhhbmRsZXIpOyB9O1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uTWFuYWdlci5wcm90b3R5cGUubm90aWZ5ID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgICAgdmFyIG51bVN1YnNjcmlwdGlvbnMgPSB0aGlzLnN1YnNjcmlwdGlvbnMubGVuZ3RoO1xuICAgICAgICBpZiAoIW51bVN1YnNjcmlwdGlvbnMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChudW1TdWJzY3JpcHRpb25zID09PSAxKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHRoZXJlJ3Mgb25seSBhIHNpbmdsZSBoYW5kbGVyIHdlIGNhbiBqdXN0IGNhbGwgaXQgd2l0aG91dCBpbnZva2luZyBhIGxvb3AuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uc1swXShhLCBiLCBjKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtU3Vic2NyaXB0aW9uczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogQ2hlY2sgd2hldGhlciB0aGUgaGFuZGxlciBleGlzdHMgYmVmb3JlIGZpcmluZyBhcyBpdCdzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgICogdGhlIHN1YnNjcmlwdGlvbnMgd2VyZSBtb2RpZmllZCBkdXJpbmcgdGhpcyBsb29wIHJ1bm5pbmcuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSB0aGlzLnN1YnNjcmlwdGlvbnNbaV07XG4gICAgICAgICAgICAgICAgaGFuZGxlciAmJiBoYW5kbGVyKGEsIGIsIGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb25NYW5hZ2VyLnByb3RvdHlwZS5nZXRTaXplID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJzY3JpcHRpb25zLmxlbmd0aDtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbk1hbmFnZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMubGVuZ3RoID0gMDtcbiAgICB9O1xuICAgIHJldHVybiBTdWJzY3JpcHRpb25NYW5hZ2VyO1xufSgpKTtcblxuZXhwb3J0IHsgU3Vic2NyaXB0aW9uTWFuYWdlciB9O1xuIiwiaW1wb3J0IHN5bmMsIHsgZ2V0RnJhbWVEYXRhIH0gZnJvbSAnZnJhbWVzeW5jJztcbmltcG9ydCB7IHZlbG9jaXR5UGVyU2Vjb25kIH0gZnJvbSAncG9wbW90aW9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbk1hbmFnZXIgfSBmcm9tICcuLi91dGlscy9zdWJzY3JpcHRpb24tbWFuYWdlci5tanMnO1xuXG52YXIgaXNGbG9hdCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpO1xufTtcbi8qKlxuICogYE1vdGlvblZhbHVlYCBpcyB1c2VkIHRvIHRyYWNrIHRoZSBzdGF0ZSBhbmQgdmVsb2NpdHkgb2YgbW90aW9uIHZhbHVlcy5cbiAqXG4gKiBAcHVibGljXG4gKi9cbnZhciBNb3Rpb25WYWx1ZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gaW5pdCAtIFRoZSBpbml0aWF0aW5nIHZhbHVlXG4gICAgICogQHBhcmFtIGNvbmZpZyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgICAqXG4gICAgICogLSAgYHRyYW5zZm9ybWVyYDogQSBmdW5jdGlvbiB0byB0cmFuc2Zvcm0gaW5jb21pbmcgdmFsdWVzIHdpdGguXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBNb3Rpb25WYWx1ZShpbml0KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGlzIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIGJ1aWxkIHN0ZXAgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24gbnVtYmVyLlxuICAgICAgICAgKiBXaGVuIE1vdGlvblZhbHVlcyBhcmUgcHJvdmlkZWQgdG8gbW90aW9uIGNvbXBvbmVudHMsIHdhcm4gaWYgdmVyc2lvbnMgYXJlIG1peGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy52ZXJzaW9uID0gXCI2LjUuMVwiO1xuICAgICAgICAvKipcbiAgICAgICAgICogRHVyYXRpb24sIGluIG1pbGxpc2Vjb25kcywgc2luY2UgbGFzdCB1cGRhdGluZyBmcmFtZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGludGVybmFsXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRpbWVEZWx0YSA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaW1lc3RhbXAgb2YgdGhlIGxhc3QgdGltZSB0aGlzIGBNb3Rpb25WYWx1ZWAgd2FzIHVwZGF0ZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBpbnRlcm5hbFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5sYXN0VXBkYXRlZCA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGdW5jdGlvbnMgdG8gbm90aWZ5IHdoZW4gdGhlIGBNb3Rpb25WYWx1ZWAgdXBkYXRlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQGludGVybmFsXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnVwZGF0ZVN1YnNjcmliZXJzID0gbmV3IFN1YnNjcmlwdGlvbk1hbmFnZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZ1bmN0aW9ucyB0byBub3RpZnkgd2hlbiB0aGUgdmVsb2NpdHkgdXBkYXRlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQGludGVybmFsXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnZlbG9jaXR5VXBkYXRlU3Vic2NyaWJlcnMgPSBuZXcgU3Vic2NyaXB0aW9uTWFuYWdlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRnVuY3Rpb25zIHRvIG5vdGlmeSB3aGVuIHRoZSBgTW90aW9uVmFsdWVgIHVwZGF0ZXMgYW5kIGByZW5kZXJgIGlzIHNldCB0byBgdHJ1ZWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBpbnRlcm5hbFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZW5kZXJTdWJzY3JpYmVycyA9IG5ldyBTdWJzY3JpcHRpb25NYW5hZ2VyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUcmFja3Mgd2hldGhlciB0aGlzIHZhbHVlIGNhbiBvdXRwdXQgYSB2ZWxvY2l0eS4gQ3VycmVudGx5IHRoaXMgaXMgb25seSB0cnVlXG4gICAgICAgICAqIGlmIHRoZSB2YWx1ZSBpcyBudW1lcmljYWwsIGJ1dCB3ZSBtaWdodCBiZSBhYmxlIHRvIHdpZGVuIHRoZSBzY29wZSBoZXJlIGFuZCBzdXBwb3J0XG4gICAgICAgICAqIG90aGVyIHZhbHVlIHR5cGVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAaW50ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2FuVHJhY2tWZWxvY2l0eSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnVwZGF0ZUFuZE5vdGlmeSA9IGZ1bmN0aW9uICh2LCByZW5kZXIpIHtcbiAgICAgICAgICAgIGlmIChyZW5kZXIgPT09IHZvaWQgMCkgeyByZW5kZXIgPSB0cnVlOyB9XG4gICAgICAgICAgICBfdGhpcy5wcmV2ID0gX3RoaXMuY3VycmVudDtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICAgICAgLy8gVXBkYXRlIHRpbWVzdGFtcFxuICAgICAgICAgICAgdmFyIF9hID0gZ2V0RnJhbWVEYXRhKCksIGRlbHRhID0gX2EuZGVsdGEsIHRpbWVzdGFtcCA9IF9hLnRpbWVzdGFtcDtcbiAgICAgICAgICAgIGlmIChfdGhpcy5sYXN0VXBkYXRlZCAhPT0gdGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMudGltZURlbHRhID0gZGVsdGE7XG4gICAgICAgICAgICAgICAgX3RoaXMubGFzdFVwZGF0ZWQgPSB0aW1lc3RhbXA7XG4gICAgICAgICAgICAgICAgc3luYy5wb3N0UmVuZGVyKF90aGlzLnNjaGVkdWxlVmVsb2NpdHlDaGVjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBVcGRhdGUgdXBkYXRlIHN1YnNjcmliZXJzXG4gICAgICAgICAgICBpZiAoX3RoaXMucHJldiAhPT0gX3RoaXMuY3VycmVudCkge1xuICAgICAgICAgICAgICAgIF90aGlzLnVwZGF0ZVN1YnNjcmliZXJzLm5vdGlmeShfdGhpcy5jdXJyZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFVwZGF0ZSB2ZWxvY2l0eSBzdWJzY3JpYmVyc1xuICAgICAgICAgICAgaWYgKF90aGlzLnZlbG9jaXR5VXBkYXRlU3Vic2NyaWJlcnMuZ2V0U2l6ZSgpKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMudmVsb2NpdHlVcGRhdGVTdWJzY3JpYmVycy5ub3RpZnkoX3RoaXMuZ2V0VmVsb2NpdHkoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBVcGRhdGUgcmVuZGVyIHN1YnNjcmliZXJzXG4gICAgICAgICAgICBpZiAocmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMucmVuZGVyU3Vic2NyaWJlcnMubm90aWZ5KF90aGlzLmN1cnJlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogU2NoZWR1bGUgYSB2ZWxvY2l0eSBjaGVjayBmb3IgdGhlIG5leHQgZnJhbWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgaXMgYW4gaW5zdGFuY2VkIGFuZCBib3VuZCBmdW5jdGlvbiB0byBwcmV2ZW50IGdlbmVyYXRpbmcgYSBuZXdcbiAgICAgICAgICogZnVuY3Rpb24gb25jZSBwZXIgZnJhbWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBpbnRlcm5hbFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zY2hlZHVsZVZlbG9jaXR5Q2hlY2sgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBzeW5jLnBvc3RSZW5kZXIoX3RoaXMudmVsb2NpdHlDaGVjayk7IH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVcGRhdGVzIGBwcmV2YCB3aXRoIGBjdXJyZW50YCBpZiB0aGUgdmFsdWUgaGFzbid0IGJlZW4gdXBkYXRlZCB0aGlzIGZyYW1lLlxuICAgICAgICAgKiBUaGlzIGVuc3VyZXMgdmVsb2NpdHkgY2FsY3VsYXRpb25zIHJldHVybiBgMGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgaXMgYW4gaW5zdGFuY2VkIGFuZCBib3VuZCBmdW5jdGlvbiB0byBwcmV2ZW50IGdlbmVyYXRpbmcgYSBuZXdcbiAgICAgICAgICogZnVuY3Rpb24gb25jZSBwZXIgZnJhbWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBpbnRlcm5hbFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy52ZWxvY2l0eUNoZWNrID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICB2YXIgdGltZXN0YW1wID0gX2EudGltZXN0YW1wO1xuICAgICAgICAgICAgaWYgKHRpbWVzdGFtcCAhPT0gX3RoaXMubGFzdFVwZGF0ZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5wcmV2ID0gX3RoaXMuY3VycmVudDtcbiAgICAgICAgICAgICAgICBfdGhpcy52ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzLm5vdGlmeShfdGhpcy5nZXRWZWxvY2l0eSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5oYXNBbmltYXRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnByZXYgPSB0aGlzLmN1cnJlbnQgPSBpbml0O1xuICAgICAgICB0aGlzLmNhblRyYWNrVmVsb2NpdHkgPSBpc0Zsb2F0KHRoaXMuY3VycmVudCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgbm90aWZpZWQgd2hlbiB0aGUgYE1vdGlvblZhbHVlYCBpcyB1cGRhdGVkLlxuICAgICAqXG4gICAgICogSXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLCB3aWxsIGNhbmNlbCB0aGUgc3Vic2NyaXB0aW9uLlxuICAgICAqXG4gICAgICogV2hlbiBjYWxsaW5nIGBvbkNoYW5nZWAgaW5zaWRlIGEgUmVhY3QgY29tcG9uZW50LCBpdCBzaG91bGQgYmUgd3JhcHBlZCB3aXRoIHRoZVxuICAgICAqIGB1c2VFZmZlY3RgIGhvb2suIEFzIGl0IHJldHVybnMgYW4gdW5zdWJzY3JpYmUgZnVuY3Rpb24sIHRoaXMgc2hvdWxkIGJlIHJldHVybmVkXG4gICAgICogZnJvbSB0aGUgYHVzZUVmZmVjdGAgZnVuY3Rpb24gdG8gZW5zdXJlIHlvdSBkb24ndCBhZGQgZHVwbGljYXRlIHN1YnNjcmliZXJzLi5cbiAgICAgKlxuICAgICAqIGBgYGpzeFxuICAgICAqIGV4cG9ydCBjb25zdCBNeUNvbXBvbmVudCA9ICgpID0+IHtcbiAgICAgKiAgIGNvbnN0IHggPSB1c2VNb3Rpb25WYWx1ZSgwKVxuICAgICAqICAgY29uc3QgeSA9IHVzZU1vdGlvblZhbHVlKDApXG4gICAgICogICBjb25zdCBvcGFjaXR5ID0gdXNlTW90aW9uVmFsdWUoMSlcbiAgICAgKlxuICAgICAqICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgKiAgICAgZnVuY3Rpb24gdXBkYXRlT3BhY2l0eSgpIHtcbiAgICAgKiAgICAgICBjb25zdCBtYXhYWSA9IE1hdGgubWF4KHguZ2V0KCksIHkuZ2V0KCkpXG4gICAgICogICAgICAgY29uc3QgbmV3T3BhY2l0eSA9IHRyYW5zZm9ybShtYXhYWSwgWzAsIDEwMF0sIFsxLCAwXSlcbiAgICAgKiAgICAgICBvcGFjaXR5LnNldChuZXdPcGFjaXR5KVxuICAgICAqICAgICB9XG4gICAgICpcbiAgICAgKiAgICAgY29uc3QgdW5zdWJzY3JpYmVYID0geC5vbkNoYW5nZSh1cGRhdGVPcGFjaXR5KVxuICAgICAqICAgICBjb25zdCB1bnN1YnNjcmliZVkgPSB5Lm9uQ2hhbmdlKHVwZGF0ZU9wYWNpdHkpXG4gICAgICpcbiAgICAgKiAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgKiAgICAgICB1bnN1YnNjcmliZVgoKVxuICAgICAqICAgICAgIHVuc3Vic2NyaWJlWSgpXG4gICAgICogICAgIH1cbiAgICAgKiAgIH0sIFtdKVxuICAgICAqXG4gICAgICogICByZXR1cm4gPG1vdGlvbi5kaXYgc3R5bGU9e3sgeCB9fSAvPlxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwcml2YXRlUmVtYXJrc1xuICAgICAqXG4gICAgICogV2UgY291bGQgbG9vayBpbnRvIGEgYHVzZU9uQ2hhbmdlYCBob29rIGlmIHRoZSBhYm92ZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBwcm92ZXMgY29uZnVzaW5nLlxuICAgICAqXG4gICAgICogYGBganN4XG4gICAgICogdXNlT25DaGFuZ2UoeCwgKCkgPT4ge30pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3Vic2NyaWJlciAtIEEgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyB0aGUgbGF0ZXN0IHZhbHVlLlxuICAgICAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsIHdpbGwgY2FuY2VsIHRoaXMgc3Vic2NyaXB0aW9uLlxuICAgICAqXG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIE1vdGlvblZhbHVlLnByb3RvdHlwZS5vbkNoYW5nZSA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlU3Vic2NyaWJlcnMuYWRkKHN1YnNjcmlwdGlvbik7XG4gICAgfTtcbiAgICBNb3Rpb25WYWx1ZS5wcm90b3R5cGUuY2xlYXJMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU3Vic2NyaWJlcnMuY2xlYXIoKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEFkZHMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgbm90aWZpZWQgd2hlbiB0aGUgYE1vdGlvblZhbHVlYCByZXF1ZXN0cyBhIHJlbmRlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdWJzY3JpYmVyIC0gQSBmdW5jdGlvbiB0aGF0J3MgcHJvdmlkZWQgdGhlIGxhdGVzdCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLCB3aWxsIGNhbmNlbCB0aGlzIHN1YnNjcmlwdGlvbi5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIE1vdGlvblZhbHVlLnByb3RvdHlwZS5vblJlbmRlclJlcXVlc3QgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIC8vIFJlbmRlciBpbW1lZGlhdGVseVxuICAgICAgICBzdWJzY3JpcHRpb24odGhpcy5nZXQoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlclN1YnNjcmliZXJzLmFkZChzdWJzY3JpcHRpb24pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQXR0YWNoZXMgYSBwYXNzaXZlIGVmZmVjdCB0byB0aGUgYE1vdGlvblZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIE1vdGlvblZhbHVlLnByb3RvdHlwZS5hdHRhY2ggPSBmdW5jdGlvbiAocGFzc2l2ZUVmZmVjdCkge1xuICAgICAgICB0aGlzLnBhc3NpdmVFZmZlY3QgPSBwYXNzaXZlRWZmZWN0O1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RhdGUgb2YgdGhlIGBNb3Rpb25WYWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqXG4gICAgICogYGBganN4XG4gICAgICogY29uc3QgeCA9IHVzZU1vdGlvblZhbHVlKDApXG4gICAgICogeC5zZXQoMTApXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbGF0ZXN0IC0gTGF0ZXN0IHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcGFyYW0gcmVuZGVyIC0gV2hldGhlciB0byBub3RpZnkgcmVuZGVyIHN1YnNjcmliZXJzLiBEZWZhdWx0cyB0byBgdHJ1ZWBcbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBNb3Rpb25WYWx1ZS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHYsIHJlbmRlcikge1xuICAgICAgICBpZiAocmVuZGVyID09PSB2b2lkIDApIHsgcmVuZGVyID0gdHJ1ZTsgfVxuICAgICAgICBpZiAoIXJlbmRlciB8fCAhdGhpcy5wYXNzaXZlRWZmZWN0KSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFuZE5vdGlmeSh2LCByZW5kZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wYXNzaXZlRWZmZWN0KHYsIHRoaXMudXBkYXRlQW5kTm90aWZ5KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbGF0ZXN0IHN0YXRlIG9mIGBNb3Rpb25WYWx1ZWBcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIC0gVGhlIGxhdGVzdCBzdGF0ZSBvZiBgTW90aW9uVmFsdWVgXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICovXG4gICAgTW90aW9uVmFsdWUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudDtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBNb3Rpb25WYWx1ZS5wcm90b3R5cGUuZ2V0UHJldmlvdXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXY7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBsYXRlc3QgdmVsb2NpdHkgb2YgYE1vdGlvblZhbHVlYFxuICAgICAqXG4gICAgICogQHJldHVybnMgLSBUaGUgbGF0ZXN0IHZlbG9jaXR5IG9mIGBNb3Rpb25WYWx1ZWAuIFJldHVybnMgYDBgIGlmIHRoZSBzdGF0ZSBpcyBub24tbnVtZXJpY2FsLlxuICAgICAqXG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIE1vdGlvblZhbHVlLnByb3RvdHlwZS5nZXRWZWxvY2l0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBpc0Zsb2F0KHRoaXMucHJldikgJiYgaXNGbG9hdCh0aGlzLmN1cnJlbnQpLCBidXQgdGhhdCB3b3VsZCBiZSB3YXN0ZWZ1bFxuICAgICAgICByZXR1cm4gdGhpcy5jYW5UcmFja1ZlbG9jaXR5XG4gICAgICAgICAgICA/IC8vIFRoZXNlIGNhc3RzIGNvdWxkIGJlIGF2b2lkZWQgaWYgcGFyc2VGbG9hdCB3b3VsZCBiZSB0eXBlZCBiZXR0ZXJcbiAgICAgICAgICAgICAgICB2ZWxvY2l0eVBlclNlY29uZChwYXJzZUZsb2F0KHRoaXMuY3VycmVudCkgLVxuICAgICAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHRoaXMucHJldiksIHRoaXMudGltZURlbHRhKVxuICAgICAgICAgICAgOiAwO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXJzIGEgbmV3IGFuaW1hdGlvbiB0byBjb250cm9sIHRoaXMgYE1vdGlvblZhbHVlYC4gT25seSBvbmVcbiAgICAgKiBhbmltYXRpb24gY2FuIGRyaXZlIGEgYE1vdGlvblZhbHVlYCBhdCBvbmUgdGltZS5cbiAgICAgKlxuICAgICAqIGBgYGpzeFxuICAgICAqIHZhbHVlLnN0YXJ0KClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBhbmltYXRpb24gLSBBIGZ1bmN0aW9uIHRoYXQgc3RhcnRzIHRoZSBwcm92aWRlZCBhbmltYXRpb25cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIE1vdGlvblZhbHVlLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uIChhbmltYXRpb24pIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgX3RoaXMuaGFzQW5pbWF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgX3RoaXMuc3RvcEFuaW1hdGlvbiA9IGFuaW1hdGlvbihyZXNvbHZlKTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5jbGVhckFuaW1hdGlvbigpOyB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFN0b3AgdGhlIGN1cnJlbnRseSBhY3RpdmUgYW5pbWF0aW9uLlxuICAgICAqXG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIE1vdGlvblZhbHVlLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5zdG9wQW5pbWF0aW9uKVxuICAgICAgICAgICAgdGhpcy5zdG9wQW5pbWF0aW9uKCk7XG4gICAgICAgIHRoaXMuY2xlYXJBbmltYXRpb24oKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRoaXMgdmFsdWUgaXMgY3VycmVudGx5IGFuaW1hdGluZy5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBNb3Rpb25WYWx1ZS5wcm90b3R5cGUuaXNBbmltYXRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuc3RvcEFuaW1hdGlvbjtcbiAgICB9O1xuICAgIE1vdGlvblZhbHVlLnByb3RvdHlwZS5jbGVhckFuaW1hdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zdG9wQW5pbWF0aW9uID0gbnVsbDtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIERlc3Ryb3kgYW5kIGNsZWFuIHVwIHN1YnNjcmliZXJzIHRvIHRoaXMgYE1vdGlvblZhbHVlYC5cbiAgICAgKlxuICAgICAqIFRoZSBgTW90aW9uVmFsdWVgIGhvb2tzIGxpa2UgYHVzZU1vdGlvblZhbHVlYCBhbmQgYHVzZVRyYW5zZm9ybWAgYXV0b21hdGljYWxseVxuICAgICAqIGhhbmRsZSB0aGUgbGlmZWN5Y2xlIG9mIHRoZSByZXR1cm5lZCBgTW90aW9uVmFsdWVgLCBzbyB0aGlzIG1ldGhvZCBpcyBvbmx5IG5lY2Vzc2FyeSBpZiB5b3UndmUgbWFudWFsbHlcbiAgICAgKiBjcmVhdGVkIGEgYE1vdGlvblZhbHVlYCB2aWEgdGhlIGBtb3Rpb25WYWx1ZWAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICovXG4gICAgTW90aW9uVmFsdWUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU3Vic2NyaWJlcnMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJTdWJzY3JpYmVycy5jbGVhcigpO1xuICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICB9O1xuICAgIHJldHVybiBNb3Rpb25WYWx1ZTtcbn0oKSk7XG5mdW5jdGlvbiBtb3Rpb25WYWx1ZShpbml0KSB7XG4gICAgcmV0dXJuIG5ldyBNb3Rpb25WYWx1ZShpbml0KTtcbn1cblxuZXhwb3J0IHsgTW90aW9uVmFsdWUsIG1vdGlvblZhbHVlIH07XG4iLCIvKipcbiAqIFRlc3RzIGEgcHJvdmlkZWQgdmFsdWUgYWdhaW5zdCBhIFZhbHVlVHlwZVxuICovXG52YXIgdGVzdFZhbHVlVHlwZSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBmdW5jdGlvbiAodHlwZSkgeyByZXR1cm4gdHlwZS50ZXN0KHYpOyB9OyB9O1xuXG5leHBvcnQgeyB0ZXN0VmFsdWVUeXBlIH07XG4iLCJpbXBvcnQgeyBudW1iZXIsIHB4LCBwZXJjZW50LCBkZWdyZWVzLCB2dywgdmggfSBmcm9tICdzdHlsZS12YWx1ZS10eXBlcyc7XG5pbXBvcnQgeyB0ZXN0VmFsdWVUeXBlIH0gZnJvbSAnLi90ZXN0Lm1qcyc7XG5pbXBvcnQgeyBhdXRvIH0gZnJvbSAnLi90eXBlLWF1dG8ubWpzJztcblxuLyoqXG4gKiBBIGxpc3Qgb2YgdmFsdWUgdHlwZXMgY29tbW9ubHkgdXNlZCBmb3IgZGltZW5zaW9uc1xuICovXG52YXIgZGltZW5zaW9uVmFsdWVUeXBlcyA9IFtudW1iZXIsIHB4LCBwZXJjZW50LCBkZWdyZWVzLCB2dywgdmgsIGF1dG9dO1xuLyoqXG4gKiBUZXN0cyBhIGRpbWVuc2lvbmFsIHZhbHVlIGFnYWluc3QgdGhlIGxpc3Qgb2YgZGltZW5zaW9uIFZhbHVlVHlwZXNcbiAqL1xudmFyIGZpbmREaW1lbnNpb25WYWx1ZVR5cGUgPSBmdW5jdGlvbiAodikge1xuICAgIHJldHVybiBkaW1lbnNpb25WYWx1ZVR5cGVzLmZpbmQodGVzdFZhbHVlVHlwZSh2KSk7XG59O1xuXG5leHBvcnQgeyBkaW1lbnNpb25WYWx1ZVR5cGVzLCBmaW5kRGltZW5zaW9uVmFsdWVUeXBlIH07XG4iLCIvKipcbiAqIFZhbHVlVHlwZSBmb3IgXCJhdXRvXCJcbiAqL1xudmFyIGF1dG8gPSB7XG4gICAgdGVzdDogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgPT09IFwiYXV0b1wiOyB9LFxuICAgIHBhcnNlOiBmdW5jdGlvbiAodikgeyByZXR1cm4gdjsgfSxcbn07XG5cbmV4cG9ydCB7IGF1dG8gfTtcbiIsImltcG9ydCB7IF9fc3ByZWFkQXJyYXksIF9fcmVhZCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IGNvbG9yLCBjb21wbGV4IH0gZnJvbSAnc3R5bGUtdmFsdWUtdHlwZXMnO1xuaW1wb3J0IHsgZGltZW5zaW9uVmFsdWVUeXBlcyB9IGZyb20gJy4vZGltZW5zaW9ucy5tanMnO1xuaW1wb3J0IHsgdGVzdFZhbHVlVHlwZSB9IGZyb20gJy4vdGVzdC5tanMnO1xuXG4vKipcbiAqIEEgbGlzdCBvZiBhbGwgVmFsdWVUeXBlc1xuICovXG52YXIgdmFsdWVUeXBlcyA9IF9fc3ByZWFkQXJyYXkoX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGRpbWVuc2lvblZhbHVlVHlwZXMpLCBmYWxzZSksIFtjb2xvciwgY29tcGxleF0sIGZhbHNlKTtcbi8qKlxuICogVGVzdHMgYSB2YWx1ZSBhZ2FpbnN0IHRoZSBsaXN0IG9mIFZhbHVlVHlwZXNcbiAqL1xudmFyIGZpbmRWYWx1ZVR5cGUgPSBmdW5jdGlvbiAodikgeyByZXR1cm4gdmFsdWVUeXBlcy5maW5kKHRlc3RWYWx1ZVR5cGUodikpOyB9O1xuXG5leHBvcnQgeyBmaW5kVmFsdWVUeXBlIH07XG4iLCJpbXBvcnQgeyBfX3Jlc3QsIF9fYXNzaWduLCBfX3NwcmVhZEFycmF5LCBfX3JlYWQgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBjb21wbGV4IH0gZnJvbSAnc3R5bGUtdmFsdWUtdHlwZXMnO1xuaW1wb3J0IHsgaXNOdW1lcmljYWxTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscy9pcy1udW1lcmljYWwtc3RyaW5nLm1qcyc7XG5pbXBvcnQgeyBpc1plcm9WYWx1ZVN0cmluZyB9IGZyb20gJy4uLy4uL3V0aWxzL2lzLXplcm8tdmFsdWUtc3RyaW5nLm1qcyc7XG5pbXBvcnQgeyByZXNvbHZlRmluYWxWYWx1ZUluS2V5ZnJhbWVzIH0gZnJvbSAnLi4vLi4vdXRpbHMvcmVzb2x2ZS12YWx1ZS5tanMnO1xuaW1wb3J0IHsgbW90aW9uVmFsdWUgfSBmcm9tICcuLi8uLi92YWx1ZS9pbmRleC5tanMnO1xuaW1wb3J0IHsgZ2V0QW5pbWF0YWJsZU5vbmUgfSBmcm9tICcuLi9kb20vdmFsdWUtdHlwZXMvYW5pbWF0YWJsZS1ub25lLm1qcyc7XG5pbXBvcnQgeyBmaW5kVmFsdWVUeXBlIH0gZnJvbSAnLi4vZG9tL3ZhbHVlLXR5cGVzL2ZpbmQubWpzJztcbmltcG9ydCB7IHJlc29sdmVWYXJpYW50IH0gZnJvbSAnLi92YXJpYW50cy5tanMnO1xuXG4vKipcbiAqIFNldCBWaXN1YWxFbGVtZW50J3MgTW90aW9uVmFsdWUsIGNyZWF0aW5nIGEgbmV3IE1vdGlvblZhbHVlIGZvciBpdCBpZlxuICogaXQgZG9lc24ndCBleGlzdC5cbiAqL1xuZnVuY3Rpb24gc2V0TW90aW9uVmFsdWUodmlzdWFsRWxlbWVudCwga2V5LCB2YWx1ZSkge1xuICAgIGlmICh2aXN1YWxFbGVtZW50Lmhhc1ZhbHVlKGtleSkpIHtcbiAgICAgICAgdmlzdWFsRWxlbWVudC5nZXRWYWx1ZShrZXkpLnNldCh2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2aXN1YWxFbGVtZW50LmFkZFZhbHVlKGtleSwgbW90aW9uVmFsdWUodmFsdWUpKTtcbiAgICB9XG59XG5mdW5jdGlvbiBzZXRUYXJnZXQodmlzdWFsRWxlbWVudCwgZGVmaW5pdGlvbikge1xuICAgIHZhciByZXNvbHZlZCA9IHJlc29sdmVWYXJpYW50KHZpc3VhbEVsZW1lbnQsIGRlZmluaXRpb24pO1xuICAgIHZhciBfYSA9IHJlc29sdmVkID8gdmlzdWFsRWxlbWVudC5tYWtlVGFyZ2V0QW5pbWF0YWJsZShyZXNvbHZlZCwgZmFsc2UpIDoge30sIF9iID0gX2EudHJhbnNpdGlvbkVuZCwgdHJhbnNpdGlvbkVuZCA9IF9iID09PSB2b2lkIDAgPyB7fSA6IF9iOyBfYS50cmFuc2l0aW9uOyB2YXIgdGFyZ2V0ID0gX19yZXN0KF9hLCBbXCJ0cmFuc2l0aW9uRW5kXCIsIFwidHJhbnNpdGlvblwiXSk7XG4gICAgdGFyZ2V0ID0gX19hc3NpZ24oX19hc3NpZ24oe30sIHRhcmdldCksIHRyYW5zaXRpb25FbmQpO1xuICAgIGZvciAodmFyIGtleSBpbiB0YXJnZXQpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gcmVzb2x2ZUZpbmFsVmFsdWVJbktleWZyYW1lcyh0YXJnZXRba2V5XSk7XG4gICAgICAgIHNldE1vdGlvblZhbHVlKHZpc3VhbEVsZW1lbnQsIGtleSwgdmFsdWUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHNldFZhcmlhbnRzKHZpc3VhbEVsZW1lbnQsIHZhcmlhbnRMYWJlbHMpIHtcbiAgICB2YXIgcmV2ZXJzZWRMYWJlbHMgPSBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQodmFyaWFudExhYmVscyksIGZhbHNlKS5yZXZlcnNlKCk7XG4gICAgcmV2ZXJzZWRMYWJlbHMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdmFyIHZhcmlhbnQgPSB2aXN1YWxFbGVtZW50LmdldFZhcmlhbnQoa2V5KTtcbiAgICAgICAgdmFyaWFudCAmJiBzZXRUYXJnZXQodmlzdWFsRWxlbWVudCwgdmFyaWFudCk7XG4gICAgICAgIChfYSA9IHZpc3VhbEVsZW1lbnQudmFyaWFudENoaWxkcmVuKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgICAgIHNldFZhcmlhbnRzKGNoaWxkLCB2YXJpYW50TGFiZWxzKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBzZXRWYWx1ZXModmlzdWFsRWxlbWVudCwgZGVmaW5pdGlvbikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRlZmluaXRpb24pKSB7XG4gICAgICAgIHJldHVybiBzZXRWYXJpYW50cyh2aXN1YWxFbGVtZW50LCBkZWZpbml0aW9uKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluaXRpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHNldFZhcmlhbnRzKHZpc3VhbEVsZW1lbnQsIFtkZWZpbml0aW9uXSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBzZXRUYXJnZXQodmlzdWFsRWxlbWVudCwgZGVmaW5pdGlvbik7XG4gICAgfVxufVxuZnVuY3Rpb24gY2hlY2tUYXJnZXRGb3JOZXdWYWx1ZXModmlzdWFsRWxlbWVudCwgdGFyZ2V0LCBvcmlnaW4pIHtcbiAgICB2YXIgX2EsIF9iLCBfYztcbiAgICB2YXIgX2Q7XG4gICAgdmFyIG5ld1ZhbHVlS2V5cyA9IE9iamVjdC5rZXlzKHRhcmdldCkuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuICF2aXN1YWxFbGVtZW50Lmhhc1ZhbHVlKGtleSk7IH0pO1xuICAgIHZhciBudW1OZXdWYWx1ZXMgPSBuZXdWYWx1ZUtleXMubGVuZ3RoO1xuICAgIGlmICghbnVtTmV3VmFsdWVzKVxuICAgICAgICByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1OZXdWYWx1ZXM7IGkrKykge1xuICAgICAgICB2YXIga2V5ID0gbmV3VmFsdWVLZXlzW2ldO1xuICAgICAgICB2YXIgdGFyZ2V0VmFsdWUgPSB0YXJnZXRba2V5XTtcbiAgICAgICAgdmFyIHZhbHVlID0gbnVsbDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHRoZSB0YXJnZXQgaXMgYSBzZXJpZXMgb2Yga2V5ZnJhbWVzLCB3ZSBjYW4gdXNlIHRoZSBmaXJzdCB2YWx1ZVxuICAgICAgICAgKiBpbiB0aGUgYXJyYXkuIElmIHRoaXMgZmlyc3QgdmFsdWUgaXMgbnVsbCwgd2UnbGwgc3RpbGwgbmVlZCB0byByZWFkIGZyb20gdGhlIERPTS5cbiAgICAgICAgICovXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRhcmdldFZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSB0YXJnZXRWYWx1ZVswXTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhlIHRhcmdldCBpc24ndCBrZXlmcmFtZXMsIG9yIHRoZSBmaXJzdCBrZXlmcmFtZSB3YXMgbnVsbCwgd2UgbmVlZCB0b1xuICAgICAgICAgKiBmaXJzdCBjaGVjayBpZiBhbiBvcmlnaW4gdmFsdWUgd2FzIGV4cGxpY2l0bHkgZGVmaW5lZCBpbiB0aGUgdHJhbnNpdGlvbiBhcyBcImZyb21cIixcbiAgICAgICAgICogaWYgbm90IHJlYWQgdGhlIHZhbHVlIGZyb20gdGhlIERPTS4gQXMgYW4gYWJzb2x1dGUgZmFsbGJhY2ssIHRha2UgdGhlIGRlZmluZWQgdGFyZ2V0IHZhbHVlLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IChfYiA9IChfYSA9IG9yaWdpbltrZXldKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB2aXN1YWxFbGVtZW50LnJlYWRWYWx1ZShrZXkpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB0YXJnZXRba2V5XTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdmFsdWUgaXMgc3RpbGwgdW5kZWZpbmVkIG9yIG51bGwsIGlnbm9yZSBpdC4gUHJlZmVyYWJseSB0aGlzIHdvdWxkIHRocm93LFxuICAgICAgICAgKiBidXQgdGhpcyB3YXMgY2F1c2luZyBpc3N1ZXMgaW4gRnJhbWVyLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgKGlzTnVtZXJpY2FsU3RyaW5nKHZhbHVlKSB8fCBpc1plcm9WYWx1ZVN0cmluZyh2YWx1ZSkpKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgbnVtYmVyIHJlYWQgYXMgYSBzdHJpbmcsIGllIFwiMFwiIG9yIFwiMjAwXCIsIGNvbnZlcnQgaXQgdG8gYSBudW1iZXJcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWZpbmRWYWx1ZVR5cGUodmFsdWUpICYmIGNvbXBsZXgudGVzdCh0YXJnZXRWYWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gZ2V0QW5pbWF0YWJsZU5vbmUoa2V5LCB0YXJnZXRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmlzdWFsRWxlbWVudC5hZGRWYWx1ZShrZXksIG1vdGlvblZhbHVlKHZhbHVlKSk7XG4gICAgICAgIChfYyA9IChfZCA9IG9yaWdpbilba2V5XSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogKF9kW2tleV0gPSB2YWx1ZSk7XG4gICAgICAgIHZpc3VhbEVsZW1lbnQuc2V0QmFzZVRhcmdldChrZXksIHZhbHVlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRPcmlnaW5Gcm9tVHJhbnNpdGlvbihrZXksIHRyYW5zaXRpb24pIHtcbiAgICBpZiAoIXRyYW5zaXRpb24pXG4gICAgICAgIHJldHVybjtcbiAgICB2YXIgdmFsdWVUcmFuc2l0aW9uID0gdHJhbnNpdGlvbltrZXldIHx8IHRyYW5zaXRpb25bXCJkZWZhdWx0XCJdIHx8IHRyYW5zaXRpb247XG4gICAgcmV0dXJuIHZhbHVlVHJhbnNpdGlvbi5mcm9tO1xufVxuZnVuY3Rpb24gZ2V0T3JpZ2luKHRhcmdldCwgdHJhbnNpdGlvbiwgdmlzdWFsRWxlbWVudCkge1xuICAgIHZhciBfYSwgX2I7XG4gICAgdmFyIG9yaWdpbiA9IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiB0YXJnZXQpIHtcbiAgICAgICAgb3JpZ2luW2tleV0gPVxuICAgICAgICAgICAgKF9hID0gZ2V0T3JpZ2luRnJvbVRyYW5zaXRpb24oa2V5LCB0cmFuc2l0aW9uKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKF9iID0gdmlzdWFsRWxlbWVudC5nZXRWYWx1ZShrZXkpKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZ2V0KCk7XG4gICAgfVxuICAgIHJldHVybiBvcmlnaW47XG59XG5cbmV4cG9ydCB7IGNoZWNrVGFyZ2V0Rm9yTmV3VmFsdWVzLCBnZXRPcmlnaW4sIGdldE9yaWdpbkZyb21UcmFuc2l0aW9uLCBzZXRUYXJnZXQsIHNldFZhbHVlcyB9O1xuIiwiaW1wb3J0IHsgX19yZWFkLCBfX3Jlc3QsIF9fYXNzaWduIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgc3RhcnRBbmltYXRpb24gfSBmcm9tICcuLi8uLi9hbmltYXRpb24vdXRpbHMvdHJhbnNpdGlvbnMubWpzJztcbmltcG9ydCB7IHNldFRhcmdldCB9IGZyb20gJy4vc2V0dGVycy5tanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhcmlhbnQgfSBmcm9tICcuL3ZhcmlhbnRzLm1qcyc7XG5pbXBvcnQgeyBpc1RyYW5zZm9ybVByb3AgfSBmcm9tICcuLi9odG1sL3V0aWxzL3RyYW5zZm9ybS5tanMnO1xuXG5mdW5jdGlvbiBhbmltYXRlVmlzdWFsRWxlbWVudCh2aXN1YWxFbGVtZW50LCBkZWZpbml0aW9uLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2aXN1YWxFbGVtZW50Lm5vdGlmeUFuaW1hdGlvblN0YXJ0KGRlZmluaXRpb24pO1xuICAgIHZhciBhbmltYXRpb247XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgdmFyIGFuaW1hdGlvbnMgPSBkZWZpbml0aW9uLm1hcChmdW5jdGlvbiAodmFyaWFudCkge1xuICAgICAgICAgICAgcmV0dXJuIGFuaW1hdGVWYXJpYW50KHZpc3VhbEVsZW1lbnQsIHZhcmlhbnQsIG9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICAgICAgYW5pbWF0aW9uID0gUHJvbWlzZS5hbGwoYW5pbWF0aW9ucyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbml0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGFuaW1hdGlvbiA9IGFuaW1hdGVWYXJpYW50KHZpc3VhbEVsZW1lbnQsIGRlZmluaXRpb24sIG9wdGlvbnMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHJlc29sdmVkRGVmaW5pdGlvbiA9IHR5cGVvZiBkZWZpbml0aW9uID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgID8gcmVzb2x2ZVZhcmlhbnQodmlzdWFsRWxlbWVudCwgZGVmaW5pdGlvbiwgb3B0aW9ucy5jdXN0b20pXG4gICAgICAgICAgICA6IGRlZmluaXRpb247XG4gICAgICAgIGFuaW1hdGlvbiA9IGFuaW1hdGVUYXJnZXQodmlzdWFsRWxlbWVudCwgcmVzb2x2ZWREZWZpbml0aW9uLCBvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIGFuaW1hdGlvbi50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZpc3VhbEVsZW1lbnQubm90aWZ5QW5pbWF0aW9uQ29tcGxldGUoZGVmaW5pdGlvbik7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBhbmltYXRlVmFyaWFudCh2aXN1YWxFbGVtZW50LCB2YXJpYW50LCBvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIHJlc29sdmVkID0gcmVzb2x2ZVZhcmlhbnQodmlzdWFsRWxlbWVudCwgdmFyaWFudCwgb3B0aW9ucy5jdXN0b20pO1xuICAgIHZhciBfYiA9IChyZXNvbHZlZCB8fCB7fSkudHJhbnNpdGlvbiwgdHJhbnNpdGlvbiA9IF9iID09PSB2b2lkIDAgPyB2aXN1YWxFbGVtZW50LmdldERlZmF1bHRUcmFuc2l0aW9uKCkgfHwge30gOiBfYjtcbiAgICBpZiAob3B0aW9ucy50cmFuc2l0aW9uT3ZlcnJpZGUpIHtcbiAgICAgICAgdHJhbnNpdGlvbiA9IG9wdGlvbnMudHJhbnNpdGlvbk92ZXJyaWRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB3ZSBoYXZlIGEgdmFyaWFudCwgY3JlYXRlIGEgY2FsbGJhY2sgdGhhdCBydW5zIGl0IGFzIGFuIGFuaW1hdGlvbi5cbiAgICAgKiBPdGhlcndpc2UsIHdlIHJlc29sdmUgYSBQcm9taXNlIGltbWVkaWF0ZWx5IGZvciBhIGNvbXBvc2FibGUgbm8tb3AuXG4gICAgICovXG4gICAgdmFyIGdldEFuaW1hdGlvbiA9IHJlc29sdmVkXG4gICAgICAgID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gYW5pbWF0ZVRhcmdldCh2aXN1YWxFbGVtZW50LCByZXNvbHZlZCwgb3B0aW9ucyk7IH1cbiAgICAgICAgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsgfTtcbiAgICAvKipcbiAgICAgKiBJZiB3ZSBoYXZlIGNoaWxkcmVuLCBjcmVhdGUgYSBjYWxsYmFjayB0aGF0IHJ1bnMgYWxsIHRoZWlyIGFuaW1hdGlvbnMuXG4gICAgICogT3RoZXJ3aXNlLCB3ZSByZXNvbHZlIGEgUHJvbWlzZSBpbW1lZGlhdGVseSBmb3IgYSBjb21wb3NhYmxlIG5vLW9wLlxuICAgICAqL1xuICAgIHZhciBnZXRDaGlsZEFuaW1hdGlvbnMgPSAoKF9hID0gdmlzdWFsRWxlbWVudC52YXJpYW50Q2hpbGRyZW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zaXplKVxuICAgICAgICA/IGZ1bmN0aW9uIChmb3J3YXJkRGVsYXkpIHtcbiAgICAgICAgICAgIGlmIChmb3J3YXJkRGVsYXkgPT09IHZvaWQgMCkgeyBmb3J3YXJkRGVsYXkgPSAwOyB9XG4gICAgICAgICAgICB2YXIgX2EgPSB0cmFuc2l0aW9uLmRlbGF5Q2hpbGRyZW4sIGRlbGF5Q2hpbGRyZW4gPSBfYSA9PT0gdm9pZCAwID8gMCA6IF9hLCBzdGFnZ2VyQ2hpbGRyZW4gPSB0cmFuc2l0aW9uLnN0YWdnZXJDaGlsZHJlbiwgc3RhZ2dlckRpcmVjdGlvbiA9IHRyYW5zaXRpb24uc3RhZ2dlckRpcmVjdGlvbjtcbiAgICAgICAgICAgIHJldHVybiBhbmltYXRlQ2hpbGRyZW4odmlzdWFsRWxlbWVudCwgdmFyaWFudCwgZGVsYXlDaGlsZHJlbiArIGZvcndhcmREZWxheSwgc3RhZ2dlckNoaWxkcmVuLCBzdGFnZ2VyRGlyZWN0aW9uLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOyB9O1xuICAgIC8qKlxuICAgICAqIElmIHRoZSB0cmFuc2l0aW9uIGV4cGxpY2l0bHkgZGVmaW5lcyBhIFwid2hlblwiIG9wdGlvbiwgd2UgbmVlZCB0byByZXNvbHZlIGVpdGhlclxuICAgICAqIHRoaXMgYW5pbWF0aW9uIG9yIGFsbCBjaGlsZHJlbiBhbmltYXRpb25zIGJlZm9yZSBwbGF5aW5nIHRoZSBvdGhlci5cbiAgICAgKi9cbiAgICB2YXIgd2hlbiA9IHRyYW5zaXRpb24ud2hlbjtcbiAgICBpZiAod2hlbikge1xuICAgICAgICB2YXIgX2MgPSBfX3JlYWQod2hlbiA9PT0gXCJiZWZvcmVDaGlsZHJlblwiXG4gICAgICAgICAgICA/IFtnZXRBbmltYXRpb24sIGdldENoaWxkQW5pbWF0aW9uc11cbiAgICAgICAgICAgIDogW2dldENoaWxkQW5pbWF0aW9ucywgZ2V0QW5pbWF0aW9uXSwgMiksIGZpcnN0ID0gX2NbMF0sIGxhc3QgPSBfY1sxXTtcbiAgICAgICAgcmV0dXJuIGZpcnN0KCkudGhlbihsYXN0KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbZ2V0QW5pbWF0aW9uKCksIGdldENoaWxkQW5pbWF0aW9ucyhvcHRpb25zLmRlbGF5KV0pO1xuICAgIH1cbn1cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGFuaW1hdGVUYXJnZXQodmlzdWFsRWxlbWVudCwgZGVmaW5pdGlvbiwgX2EpIHtcbiAgICB2YXIgX2I7XG4gICAgdmFyIF9jID0gX2EgPT09IHZvaWQgMCA/IHt9IDogX2EsIF9kID0gX2MuZGVsYXksIGRlbGF5ID0gX2QgPT09IHZvaWQgMCA/IDAgOiBfZCwgdHJhbnNpdGlvbk92ZXJyaWRlID0gX2MudHJhbnNpdGlvbk92ZXJyaWRlLCB0eXBlID0gX2MudHlwZTtcbiAgICB2YXIgX2UgPSB2aXN1YWxFbGVtZW50Lm1ha2VUYXJnZXRBbmltYXRhYmxlKGRlZmluaXRpb24pLCBfZiA9IF9lLnRyYW5zaXRpb24sIHRyYW5zaXRpb24gPSBfZiA9PT0gdm9pZCAwID8gdmlzdWFsRWxlbWVudC5nZXREZWZhdWx0VHJhbnNpdGlvbigpIDogX2YsIHRyYW5zaXRpb25FbmQgPSBfZS50cmFuc2l0aW9uRW5kLCB0YXJnZXQgPSBfX3Jlc3QoX2UsIFtcInRyYW5zaXRpb25cIiwgXCJ0cmFuc2l0aW9uRW5kXCJdKTtcbiAgICBpZiAodHJhbnNpdGlvbk92ZXJyaWRlKVxuICAgICAgICB0cmFuc2l0aW9uID0gdHJhbnNpdGlvbk92ZXJyaWRlO1xuICAgIHZhciBhbmltYXRpb25zID0gW107XG4gICAgdmFyIGFuaW1hdGlvblR5cGVTdGF0ZSA9IHR5cGUgJiYgKChfYiA9IHZpc3VhbEVsZW1lbnQuYW5pbWF0aW9uU3RhdGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5nZXRTdGF0ZSgpW3R5cGVdKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGFyZ2V0KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHZpc3VhbEVsZW1lbnQuZ2V0VmFsdWUoa2V5KTtcbiAgICAgICAgdmFyIHZhbHVlVGFyZ2V0ID0gdGFyZ2V0W2tleV07XG4gICAgICAgIGlmICghdmFsdWUgfHxcbiAgICAgICAgICAgIHZhbHVlVGFyZ2V0ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIChhbmltYXRpb25UeXBlU3RhdGUgJiZcbiAgICAgICAgICAgICAgICBzaG91bGRCbG9ja0FuaW1hdGlvbihhbmltYXRpb25UeXBlU3RhdGUsIGtleSkpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdmFsdWVUcmFuc2l0aW9uID0gX19hc3NpZ24oeyBkZWxheTogZGVsYXkgfSwgdHJhbnNpdGlvbik7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBNYWtlIGFuaW1hdGlvbiBpbnN0YW50IGlmIHRoaXMgaXMgYSB0cmFuc2Zvcm0gcHJvcCBhbmQgd2Ugc2hvdWxkIHJlZHVjZSBtb3Rpb24uXG4gICAgICAgICAqL1xuICAgICAgICBpZiAodmlzdWFsRWxlbWVudC5zaG91bGRSZWR1Y2VNb3Rpb24gJiYgaXNUcmFuc2Zvcm1Qcm9wKGtleSkpIHtcbiAgICAgICAgICAgIHZhbHVlVHJhbnNpdGlvbiA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCB2YWx1ZVRyYW5zaXRpb24pLCB7IHR5cGU6IGZhbHNlLCBkZWxheTogMCB9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYW5pbWF0aW9uID0gc3RhcnRBbmltYXRpb24oa2V5LCB2YWx1ZSwgdmFsdWVUYXJnZXQsIHZhbHVlVHJhbnNpdGlvbik7XG4gICAgICAgIGFuaW1hdGlvbnMucHVzaChhbmltYXRpb24pO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoYW5pbWF0aW9ucykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRyYW5zaXRpb25FbmQgJiYgc2V0VGFyZ2V0KHZpc3VhbEVsZW1lbnQsIHRyYW5zaXRpb25FbmQpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gYW5pbWF0ZUNoaWxkcmVuKHZpc3VhbEVsZW1lbnQsIHZhcmlhbnQsIGRlbGF5Q2hpbGRyZW4sIHN0YWdnZXJDaGlsZHJlbiwgc3RhZ2dlckRpcmVjdGlvbiwgb3B0aW9ucykge1xuICAgIGlmIChkZWxheUNoaWxkcmVuID09PSB2b2lkIDApIHsgZGVsYXlDaGlsZHJlbiA9IDA7IH1cbiAgICBpZiAoc3RhZ2dlckNoaWxkcmVuID09PSB2b2lkIDApIHsgc3RhZ2dlckNoaWxkcmVuID0gMDsgfVxuICAgIGlmIChzdGFnZ2VyRGlyZWN0aW9uID09PSB2b2lkIDApIHsgc3RhZ2dlckRpcmVjdGlvbiA9IDE7IH1cbiAgICB2YXIgYW5pbWF0aW9ucyA9IFtdO1xuICAgIHZhciBtYXhTdGFnZ2VyRHVyYXRpb24gPSAodmlzdWFsRWxlbWVudC52YXJpYW50Q2hpbGRyZW4uc2l6ZSAtIDEpICogc3RhZ2dlckNoaWxkcmVuO1xuICAgIHZhciBnZW5lcmF0ZVN0YWdnZXJEdXJhdGlvbiA9IHN0YWdnZXJEaXJlY3Rpb24gPT09IDFcbiAgICAgICAgPyBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgaWYgKGkgPT09IHZvaWQgMCkgeyBpID0gMDsgfVxuICAgICAgICAgICAgcmV0dXJuIGkgKiBzdGFnZ2VyQ2hpbGRyZW47XG4gICAgICAgIH1cbiAgICAgICAgOiBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgaWYgKGkgPT09IHZvaWQgMCkgeyBpID0gMDsgfVxuICAgICAgICAgICAgcmV0dXJuIG1heFN0YWdnZXJEdXJhdGlvbiAtIGkgKiBzdGFnZ2VyQ2hpbGRyZW47XG4gICAgICAgIH07XG4gICAgQXJyYXkuZnJvbSh2aXN1YWxFbGVtZW50LnZhcmlhbnRDaGlsZHJlbilcbiAgICAgICAgLnNvcnQoc29ydEJ5VHJlZU9yZGVyKVxuICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQsIGkpIHtcbiAgICAgICAgYW5pbWF0aW9ucy5wdXNoKGFuaW1hdGVWYXJpYW50KGNoaWxkLCB2YXJpYW50LCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb3B0aW9ucyksIHsgZGVsYXk6IGRlbGF5Q2hpbGRyZW4gKyBnZW5lcmF0ZVN0YWdnZXJEdXJhdGlvbihpKSB9KSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiBjaGlsZC5ub3RpZnlBbmltYXRpb25Db21wbGV0ZSh2YXJpYW50KTsgfSkpO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChhbmltYXRpb25zKTtcbn1cbmZ1bmN0aW9uIHN0b3BBbmltYXRpb24odmlzdWFsRWxlbWVudCkge1xuICAgIHZpc3VhbEVsZW1lbnQuZm9yRWFjaFZhbHVlKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gdmFsdWUuc3RvcCgpOyB9KTtcbn1cbmZ1bmN0aW9uIHNvcnRCeVRyZWVPcmRlcihhLCBiKSB7XG4gICAgcmV0dXJuIGEuc29ydE5vZGVQb3NpdGlvbihiKTtcbn1cbi8qKlxuICogRGVjaWRlIHdoZXRoZXIgd2Ugc2hvdWxkIGJsb2NrIHRoaXMgYW5pbWF0aW9uLiBQcmV2aW91c2x5LCB3ZSBhY2hpZXZlZCB0aGlzXG4gKiBqdXN0IGJ5IGNoZWNraW5nIHdoZXRoZXIgdGhlIGtleSB3YXMgbGlzdGVkIGluIHByb3RlY3RlZEtleXMsIGJ1dCB0aGlzXG4gKiBwb3NlZCBwcm9ibGVtcyBpZiBhbiBhbmltYXRpb24gd2FzIHRyaWdnZXJlZCBieSBhZnRlckNoaWxkcmVuIGFuZCBwcm90ZWN0ZWRLZXlzXG4gKiBoYWQgYmVlbiBzZXQgdG8gdHJ1ZSBpbiB0aGUgbWVhbnRpbWUuXG4gKi9cbmZ1bmN0aW9uIHNob3VsZEJsb2NrQW5pbWF0aW9uKF9hLCBrZXkpIHtcbiAgICB2YXIgcHJvdGVjdGVkS2V5cyA9IF9hLnByb3RlY3RlZEtleXMsIG5lZWRzQW5pbWF0aW5nID0gX2EubmVlZHNBbmltYXRpbmc7XG4gICAgdmFyIHNob3VsZEJsb2NrID0gcHJvdGVjdGVkS2V5cy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIG5lZWRzQW5pbWF0aW5nW2tleV0gIT09IHRydWU7XG4gICAgbmVlZHNBbmltYXRpbmdba2V5XSA9IGZhbHNlO1xuICAgIHJldHVybiBzaG91bGRCbG9jaztcbn1cblxuZXhwb3J0IHsgYW5pbWF0ZVZpc3VhbEVsZW1lbnQsIHNvcnRCeVRyZWVPcmRlciwgc3RvcEFuaW1hdGlvbiB9O1xuIiwiaW1wb3J0IHsgX19zcHJlYWRBcnJheSwgX19yZWFkLCBfX2Fzc2lnbiwgX19yZXN0IH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgaXNBbmltYXRpb25Db250cm9scyB9IGZyb20gJy4uLy4uL2FuaW1hdGlvbi91dGlscy9pcy1hbmltYXRpb24tY29udHJvbHMubWpzJztcbmltcG9ydCB7IGlzS2V5ZnJhbWVzVGFyZ2V0IH0gZnJvbSAnLi4vLi4vYW5pbWF0aW9uL3V0aWxzL2lzLWtleWZyYW1lcy10YXJnZXQubWpzJztcbmltcG9ydCB7IHNoYWxsb3dDb21wYXJlIH0gZnJvbSAnLi4vLi4vdXRpbHMvc2hhbGxvdy1jb21wYXJlLm1qcyc7XG5pbXBvcnQgeyBhbmltYXRlVmlzdWFsRWxlbWVudCB9IGZyb20gJy4vYW5pbWF0aW9uLm1qcyc7XG5pbXBvcnQgeyBBbmltYXRpb25UeXBlIH0gZnJvbSAnLi90eXBlcy5tanMnO1xuaW1wb3J0IHsgaXNWYXJpYW50TGFiZWxzLCByZXNvbHZlVmFyaWFudCwgaXNWYXJpYW50TGFiZWwgfSBmcm9tICcuL3ZhcmlhbnRzLm1qcyc7XG5cbnZhciB2YXJpYW50UHJpb3JpdHlPcmRlciA9IFtcbiAgICBBbmltYXRpb25UeXBlLkFuaW1hdGUsXG4gICAgQW5pbWF0aW9uVHlwZS5JblZpZXcsXG4gICAgQW5pbWF0aW9uVHlwZS5Gb2N1cyxcbiAgICBBbmltYXRpb25UeXBlLkhvdmVyLFxuICAgIEFuaW1hdGlvblR5cGUuVGFwLFxuICAgIEFuaW1hdGlvblR5cGUuRHJhZyxcbiAgICBBbmltYXRpb25UeXBlLkV4aXQsXG5dO1xudmFyIHJldmVyc2VQcmlvcml0eU9yZGVyID0gX19zcHJlYWRBcnJheShbXSwgX19yZWFkKHZhcmlhbnRQcmlvcml0eU9yZGVyKSwgZmFsc2UpLnJldmVyc2UoKTtcbnZhciBudW1BbmltYXRpb25UeXBlcyA9IHZhcmlhbnRQcmlvcml0eU9yZGVyLmxlbmd0aDtcbmZ1bmN0aW9uIGFuaW1hdGVMaXN0KHZpc3VhbEVsZW1lbnQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFuaW1hdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGFuaW1hdGlvbnMubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgdmFyIGFuaW1hdGlvbiA9IF9hLmFuaW1hdGlvbiwgb3B0aW9ucyA9IF9hLm9wdGlvbnM7XG4gICAgICAgICAgICByZXR1cm4gYW5pbWF0ZVZpc3VhbEVsZW1lbnQodmlzdWFsRWxlbWVudCwgYW5pbWF0aW9uLCBvcHRpb25zKTtcbiAgICAgICAgfSkpO1xuICAgIH07XG59XG5mdW5jdGlvbiBjcmVhdGVBbmltYXRpb25TdGF0ZSh2aXN1YWxFbGVtZW50KSB7XG4gICAgdmFyIGFuaW1hdGUgPSBhbmltYXRlTGlzdCh2aXN1YWxFbGVtZW50KTtcbiAgICB2YXIgc3RhdGUgPSBjcmVhdGVTdGF0ZSgpO1xuICAgIHZhciBhbGxBbmltYXRlZEtleXMgPSB7fTtcbiAgICB2YXIgaXNJbml0aWFsUmVuZGVyID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCB0byByZWR1Y2UgdGhlIGFuaW1hdGlvbiBkZWZpbml0aW9ucyBmb3JcbiAgICAgKiBlYWNoIGFjdGl2ZSBhbmltYXRpb24gdHlwZSBpbnRvIGFuIG9iamVjdCBvZiByZXNvbHZlZCB2YWx1ZXMgZm9yIGl0LlxuICAgICAqL1xuICAgIHZhciBidWlsZFJlc29sdmVkVHlwZVZhbHVlcyA9IGZ1bmN0aW9uIChhY2MsIGRlZmluaXRpb24pIHtcbiAgICAgICAgdmFyIHJlc29sdmVkID0gcmVzb2x2ZVZhcmlhbnQodmlzdWFsRWxlbWVudCwgZGVmaW5pdGlvbik7XG4gICAgICAgIGlmIChyZXNvbHZlZCkge1xuICAgICAgICAgICAgcmVzb2x2ZWQudHJhbnNpdGlvbjsgdmFyIHRyYW5zaXRpb25FbmQgPSByZXNvbHZlZC50cmFuc2l0aW9uRW5kLCB0YXJnZXQgPSBfX3Jlc3QocmVzb2x2ZWQsIFtcInRyYW5zaXRpb25cIiwgXCJ0cmFuc2l0aW9uRW5kXCJdKTtcbiAgICAgICAgICAgIGFjYyA9IF9fYXNzaWduKF9fYXNzaWduKF9fYXNzaWduKHt9LCBhY2MpLCB0YXJnZXQpLCB0cmFuc2l0aW9uRW5kKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH07XG4gICAgZnVuY3Rpb24gaXNBbmltYXRlZChrZXkpIHtcbiAgICAgICAgcmV0dXJuIGFsbEFuaW1hdGVkS2V5c1trZXldICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMganVzdCBhbGxvd3MgdXMgdG8gaW5qZWN0IG1vY2tlZCBhbmltYXRpb24gZnVuY3Rpb25zXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2V0QW5pbWF0ZUZ1bmN0aW9uKG1ha2VBbmltYXRvcikge1xuICAgICAgICBhbmltYXRlID0gbWFrZUFuaW1hdG9yKHZpc3VhbEVsZW1lbnQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXaGVuIHdlIHJlY2VpdmUgbmV3IHByb3BzLCB3ZSBuZWVkIHRvOlxuICAgICAqIDEuIENyZWF0ZSBhIGxpc3Qgb2YgcHJvdGVjdGVkIGtleXMgZm9yIGVhY2ggdHlwZS4gVGhpcyBpcyBhIGRpcmVjdG9yeSBvZlxuICAgICAqICAgIHZhbHVlIGtleXMgdGhhdCBhcmUgY3VycmVudGx5IGJlaW5nIFwiaGFuZGxlZFwiIGJ5IHR5cGVzIG9mIGEgaGlnaGVyIHByaW9yaXR5XG4gICAgICogICAgc28gdGhhdCB3aGVuZXZlciBhbiBhbmltYXRpb24gaXMgcGxheWVkIG9mIGEgZ2l2ZW4gdHlwZSwgdGhlc2UgdmFsdWVzIGFyZVxuICAgICAqICAgIHByb3RlY3RlZCBmcm9tIGJlaW5nIGFuaW1hdGVkLlxuICAgICAqIDIuIERldGVybWluZSBpZiBhbiBhbmltYXRpb24gdHlwZSBuZWVkcyBhbmltYXRpbmcuXG4gICAgICogMy4gRGV0ZXJtaW5lIGlmIGFueSB2YWx1ZXMgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSBhIHR5cGUgYW5kIGZpZ3VyZSBvdXRcbiAgICAgKiAgICB3aGF0IHRvIGFuaW1hdGUgdGhvc2UgdG8uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYW5pbWF0ZUNoYW5nZXMob3B0aW9ucywgY2hhbmdlZEFjdGl2ZVR5cGUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgcHJvcHMgPSB2aXN1YWxFbGVtZW50LmdldFByb3BzKCk7XG4gICAgICAgIHZhciBjb250ZXh0ID0gdmlzdWFsRWxlbWVudC5nZXRWYXJpYW50Q29udGV4dCh0cnVlKSB8fCB7fTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgbGlzdCBvZiBhbmltYXRpb25zIHRoYXQgd2UnbGwgYnVpbGQgaW50byBhcyB3ZSBpdGVyYXRlIHRocm91Z2ggdGhlIGFuaW1hdGlvblxuICAgICAgICAgKiB0eXBlcy4gVGhpcyB3aWxsIGdldCBleGVjdXRlZCBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbi5cbiAgICAgICAgICovXG4gICAgICAgIHZhciBhbmltYXRpb25zID0gW107XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBLZWVwIHRyYWNrIG9mIHdoaWNoIHZhbHVlcyBoYXZlIGJlZW4gcmVtb3ZlZC4gVGhlbiwgYXMgd2UgaGl0IGxvd2VyIHByaW9yaXR5XG4gICAgICAgICAqIGFuaW1hdGlvbiB0eXBlcywgd2UgY2FuIGNoZWNrIGlmIHRoZXkgY29udGFpbiByZW1vdmVkIHZhbHVlcyBhbmQgYW5pbWF0ZSB0byB0aGF0LlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIHJlbW92ZWRLZXlzID0gbmV3IFNldCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBkaWN0aW9uYXJ5IG9mIGFsbCBlbmNvdW50ZXJlZCBrZXlzLiBUaGlzIGlzIGFuIG9iamVjdCB0byBsZXQgdXMgYnVpbGQgaW50byBhbmRcbiAgICAgICAgICogY29weSBpdCB3aXRob3V0IGl0ZXJhdGlvbi4gRWFjaCB0aW1lIHdlIGhpdCBhbiBhbmltYXRpb24gdHlwZSB3ZSBzZXQgaXRzIHByb3RlY3RlZFxuICAgICAgICAgKiBrZXlzIC0gdGhlIGtleXMgaXRzIG5vdCBhbGxvd2VkIHRvIGFuaW1hdGUgLSB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBvYmplY3QuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgZW5jb3VudGVyZWRLZXlzID0ge307XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBhIHZhcmlhbnQgaGFzIGJlZW4gcmVtb3ZlZCBhdCBhIGdpdmVuIGluZGV4LCBhbmQgdGhpcyBjb21wb25lbnQgaXMgY29udHJvbGxpbmdcbiAgICAgICAgICogdmFyaWFudCBhbmltYXRpb25zLCB3ZSB3YW50IHRvIGVuc3VyZSBsb3dlci1wcmlvcml0eSB2YXJpYW50cyBhcmUgZm9yY2VkIHRvIGFuaW1hdGUuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgcmVtb3ZlZFZhcmlhbnRJbmRleCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICB2YXIgdHlwZSA9IHJldmVyc2VQcmlvcml0eU9yZGVyW2ldO1xuICAgICAgICAgICAgdmFyIHR5cGVTdGF0ZSA9IHN0YXRlW3R5cGVdO1xuICAgICAgICAgICAgdmFyIHByb3AgPSAoX2EgPSBwcm9wc1t0eXBlXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogY29udGV4dFt0eXBlXTtcbiAgICAgICAgICAgIHZhciBwcm9wSXNWYXJpYW50ID0gaXNWYXJpYW50TGFiZWwocHJvcCk7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHRoaXMgdHlwZSBoYXMgKmp1c3QqIGNoYW5nZWQgaXNBY3RpdmUgc3RhdHVzLCBzZXQgYWN0aXZlRGVsdGFcbiAgICAgICAgICAgICAqIHRvIHRoYXQgc3RhdHVzLiBPdGhlcndpc2Ugc2V0IHRvIG51bGwuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhciBhY3RpdmVEZWx0YSA9IHR5cGUgPT09IGNoYW5nZWRBY3RpdmVUeXBlID8gdHlwZVN0YXRlLmlzQWN0aXZlIDogbnVsbDtcbiAgICAgICAgICAgIGlmIChhY3RpdmVEZWx0YSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmVtb3ZlZFZhcmlhbnRJbmRleCA9IGk7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHRoaXMgcHJvcCBpcyBhbiBpbmhlcml0ZWQgdmFyaWFudCwgcmF0aGVyIHRoYW4gYmVlbiBzZXQgZGlyZWN0bHkgb24gdGhlXG4gICAgICAgICAgICAgKiBjb21wb25lbnQgaXRzZWxmLCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBhbGxvdyB0aGUgcGFyZW50IHRvIHRyaWdnZXIgYW5pbWF0aW9ucy5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBUT0RPOiBDYW4gcHJvYmFibHkgY2hhbmdlIHRoaXMgdG8gYSAhaXNDb250cm9sbGluZ1ZhcmlhbnRzIGNoZWNrXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhciBpc0luaGVyaXRlZCA9IHByb3AgPT09IGNvbnRleHRbdHlwZV0gJiYgcHJvcCAhPT0gcHJvcHNbdHlwZV0gJiYgcHJvcElzVmFyaWFudDtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKGlzSW5oZXJpdGVkICYmXG4gICAgICAgICAgICAgICAgaXNJbml0aWFsUmVuZGVyICYmXG4gICAgICAgICAgICAgICAgdmlzdWFsRWxlbWVudC5tYW51YWxseUFuaW1hdGVPbk1vdW50KSB7XG4gICAgICAgICAgICAgICAgaXNJbmhlcml0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogU2V0IGFsbCBlbmNvdW50ZXJlZCBrZXlzIHNvIGZhciBhcyB0aGUgcHJvdGVjdGVkIGtleXMgZm9yIHRoaXMgdHlwZS4gVGhpcyB3aWxsXG4gICAgICAgICAgICAgKiBiZSBhbnkga2V5IHRoYXQgaGFzIGJlZW4gYW5pbWF0ZWQgb3Igb3RoZXJ3aXNlIGhhbmRsZWQgYnkgYWN0aXZlLCBoaWdoZXItcHJpb3J0aXkgdHlwZXMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHR5cGVTdGF0ZS5wcm90ZWN0ZWRLZXlzID0gX19hc3NpZ24oe30sIGVuY291bnRlcmVkS2V5cyk7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBjYW4gc2tpcCBhbmFseXNpbmcgdGhpcyBwcm9wIGVhcmx5XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAvLyBJZiBpdCBpc24ndCBhY3RpdmUgYW5kIGhhc24ndCAqanVzdCogYmVlbiBzZXQgYXMgaW5hY3RpdmVcbiAgICAgICAgICAgICghdHlwZVN0YXRlLmlzQWN0aXZlICYmIGFjdGl2ZURlbHRhID09PSBudWxsKSB8fFxuICAgICAgICAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBhbmQgZG9uJ3QgaGF2ZSBhbnkgZGVmaW5lZCBwcm9wIGZvciB0aGlzIGFuaW1hdGlvbiB0eXBlXG4gICAgICAgICAgICAgICAgKCFwcm9wICYmICF0eXBlU3RhdGUucHJldlByb3ApIHx8XG4gICAgICAgICAgICAgICAgLy8gT3IgaWYgdGhlIHByb3AgZG9lc24ndCBkZWZpbmUgYW4gYW5pbWF0aW9uXG4gICAgICAgICAgICAgICAgaXNBbmltYXRpb25Db250cm9scyhwcm9wKSB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEFzIHdlIGdvIGxvb2sgdGhyb3VnaCB0aGUgdmFsdWVzIGRlZmluZWQgb24gdGhpcyB0eXBlLCBpZiB3ZSBkZXRlY3RcbiAgICAgICAgICAgICAqIGEgY2hhbmdlZCB2YWx1ZSBvciBhIHZhbHVlIHRoYXQgd2FzIHJlbW92ZWQgaW4gYSBoaWdoZXIgcHJpb3JpdHksIHdlIHNldFxuICAgICAgICAgICAgICogdGhpcyB0byB0cnVlIGFuZCBhZGQgdGhpcyBwcm9wIHRvIHRoZSBhbmltYXRpb24gbGlzdC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdmFyIHZhcmlhbnREaWRDaGFuZ2UgPSBjaGVja1ZhcmlhbnRzRGlkQ2hhbmdlKHR5cGVTdGF0ZS5wcmV2UHJvcCwgcHJvcCk7XG4gICAgICAgICAgICB2YXIgc2hvdWxkQW5pbWF0ZVR5cGUgPSB2YXJpYW50RGlkQ2hhbmdlIHx8XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgbWFraW5nIHRoaXMgdmFyaWFudCBhY3RpdmUsIHdlIHdhbnQgdG8gYWx3YXlzIG1ha2UgaXQgYWN0aXZlXG4gICAgICAgICAgICAgICAgKHR5cGUgPT09IGNoYW5nZWRBY3RpdmVUeXBlICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVTdGF0ZS5pc0FjdGl2ZSAmJlxuICAgICAgICAgICAgICAgICAgICAhaXNJbmhlcml0ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgcHJvcElzVmFyaWFudCkgfHxcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSByZW1vdmVkIGEgaGlnaGVyLXByaW9yaXR5IHZhcmlhbnQgKGkgaXMgaW4gcmV2ZXJzZSBvcmRlcilcbiAgICAgICAgICAgICAgICAoaSA+IHJlbW92ZWRWYXJpYW50SW5kZXggJiYgcHJvcElzVmFyaWFudCk7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEFzIGFuaW1hdGlvbnMgY2FuIGJlIHNldCBhcyB2YXJpYW50IGxpc3RzLCB2YXJpYW50cyBvciB0YXJnZXQgb2JqZWN0cywgd2VcbiAgICAgICAgICAgICAqIGNvZXJjZSBldmVyeXRoaW5nIHRvIGFuIGFycmF5IGlmIGl0IGlzbid0IG9uZSBhbHJlYWR5XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhciBkZWZpbml0aW9uTGlzdCA9IEFycmF5LmlzQXJyYXkocHJvcCkgPyBwcm9wIDogW3Byb3BdO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBCdWlsZCBhbiBvYmplY3Qgb2YgYWxsIHRoZSByZXNvbHZlZCB2YWx1ZXMuIFdlJ2xsIHVzZSB0aGlzIGluIHRoZSBzdWJzZXF1ZW50XG4gICAgICAgICAgICAgKiBhbmltYXRlQ2hhbmdlcyBjYWxscyB0byBkZXRlcm1pbmUgd2hldGhlciBhIHZhbHVlIGhhcyBjaGFuZ2VkLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB2YXIgcmVzb2x2ZWRWYWx1ZXMgPSBkZWZpbml0aW9uTGlzdC5yZWR1Y2UoYnVpbGRSZXNvbHZlZFR5cGVWYWx1ZXMsIHt9KTtcbiAgICAgICAgICAgIGlmIChhY3RpdmVEZWx0YSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZXMgPSB7fTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogTm93IHdlIG5lZWQgdG8gbG9vcCB0aHJvdWdoIGFsbCB0aGUga2V5cyBpbiB0aGUgcHJldiBwcm9wIGFuZCB0aGlzIHByb3AsXG4gICAgICAgICAgICAgKiBhbmQgZGVjaWRlOlxuICAgICAgICAgICAgICogMS4gSWYgdGhlIHZhbHVlIGhhcyBjaGFuZ2VkLCBhbmQgbmVlZHMgYW5pbWF0aW5nXG4gICAgICAgICAgICAgKiAyLiBJZiBpdCBoYXMgYmVlbiByZW1vdmVkLCBhbmQgbmVlZHMgYWRkaW5nIHRvIHRoZSByZW1vdmVkS2V5cyBzZXRcbiAgICAgICAgICAgICAqIDMuIElmIGl0IGhhcyBiZWVuIHJlbW92ZWQgaW4gYSBoaWdoZXIgcHJpb3JpdHkgdHlwZSBhbmQgbmVlZHMgYW5pbWF0aW5nXG4gICAgICAgICAgICAgKiA0LiBJZiBpdCBoYXNuJ3QgYmVlbiByZW1vdmVkIGluIGEgaGlnaGVyIHByaW9yaXR5IGJ1dCBoYXNuJ3QgY2hhbmdlZCwgYW5kXG4gICAgICAgICAgICAgKiAgICBuZWVkcyBhZGRpbmcgdG8gdGhlIHR5cGUncyBwcm90ZWN0ZWRLZXlzIGxpc3QuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhciBfYiA9IHR5cGVTdGF0ZS5wcmV2UmVzb2x2ZWRWYWx1ZXMsIHByZXZSZXNvbHZlZFZhbHVlcyA9IF9iID09PSB2b2lkIDAgPyB7fSA6IF9iO1xuICAgICAgICAgICAgdmFyIGFsbEtleXMgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcHJldlJlc29sdmVkVmFsdWVzKSwgcmVzb2x2ZWRWYWx1ZXMpO1xuICAgICAgICAgICAgdmFyIG1hcmtUb0FuaW1hdGUgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgc2hvdWxkQW5pbWF0ZVR5cGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJlbW92ZWRLZXlzLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgICAgIHR5cGVTdGF0ZS5uZWVkc0FuaW1hdGluZ1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gYWxsS2V5cykge1xuICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gcmVzb2x2ZWRWYWx1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICB2YXIgcHJldiA9IHByZXZSZXNvbHZlZFZhbHVlc1trZXldO1xuICAgICAgICAgICAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCB0aGlzIHdlIGNhbiBqdXN0IHNraXAgYWhlYWRcbiAgICAgICAgICAgICAgICBpZiAoZW5jb3VudGVyZWRLZXlzLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIElmIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZCwgd2UgcHJvYmFibHkgd2FudCB0byBhbmltYXRlIGl0LlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGlmIChuZXh0ICE9PSBwcmV2KSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBJZiBib3RoIHZhbHVlcyBhcmUga2V5ZnJhbWVzLCB3ZSBuZWVkIHRvIHNoYWxsb3cgY29tcGFyZSB0aGVtIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIGRldGVjdCB3aGV0aGVyIGFueSB2YWx1ZSBoYXMgY2hhbmdlZC4gSWYgaXQgaGFzLCB3ZSBhbmltYXRlIGl0LlxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzS2V5ZnJhbWVzVGFyZ2V0KG5leHQpICYmIGlzS2V5ZnJhbWVzVGFyZ2V0KHByZXYpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNoYWxsb3dDb21wYXJlKG5leHQsIHByZXYpIHx8IHZhcmlhbnREaWRDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrVG9BbmltYXRlKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBJZiBpdCBoYXNuJ3QgY2hhbmdlZCwgd2Ugd2FudCB0byBlbnN1cmUgaXQgZG9lc24ndCBhbmltYXRlIGJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYWRkaW5nIGl0IHRvIHRoZSBsaXN0IG9mIHByb3RlY3RlZCBrZXlzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVTdGF0ZS5wcm90ZWN0ZWRLZXlzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgbmV4dCBpcyBkZWZpbmVkIGFuZCBkb2Vzbid0IGVxdWFsIHByZXYsIGl0IG5lZWRzIGFuaW1hdGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFya1RvQW5pbWF0ZShrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgaXQncyB1bmRlZmluZWQsIGl0J3MgYmVlbiByZW1vdmVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZEtleXMuYWRkKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobmV4dCAhPT0gdW5kZWZpbmVkICYmIHJlbW92ZWRLZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBJZiBuZXh0IGhhc24ndCBjaGFuZ2VkIGFuZCBpdCBpc24ndCB1bmRlZmluZWQsIHdlIHdhbnQgdG8gY2hlY2sgaWYgaXQnc1xuICAgICAgICAgICAgICAgICAgICAgKiBiZWVuIHJlbW92ZWQgYnkgYSBoaWdoZXIgcHJpb3JpdHlcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIG1hcmtUb0FuaW1hdGUoa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBJZiBpdCBoYXNuJ3QgY2hhbmdlZCwgd2UgYWRkIGl0IHRvIHRoZSBsaXN0IG9mIHByb3RlY3RlZCB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgICogdG8gZW5zdXJlIGl0IGRvZXNuJ3QgZ2V0IGFuaW1hdGVkLlxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgdHlwZVN0YXRlLnByb3RlY3RlZEtleXNba2V5XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBVcGRhdGUgdGhlIHR5cGVTdGF0ZSBzbyBuZXh0IHRpbWUgYW5pbWF0ZUNoYW5nZXMgaXMgY2FsbGVkIHdlIGNhbiBjb21wYXJlIHRoZVxuICAgICAgICAgICAgICogbGF0ZXN0IHByb3AgYW5kIHJlc29sdmVkVmFsdWVzIHRvIHRoZXNlLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0eXBlU3RhdGUucHJldlByb3AgPSBwcm9wO1xuICAgICAgICAgICAgdHlwZVN0YXRlLnByZXZSZXNvbHZlZFZhbHVlcyA9IHJlc29sdmVkVmFsdWVzO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAodHlwZVN0YXRlLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgZW5jb3VudGVyZWRLZXlzID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGVuY291bnRlcmVkS2V5cyksIHJlc29sdmVkVmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0luaXRpYWxSZW5kZXIgJiYgdmlzdWFsRWxlbWVudC5ibG9ja0luaXRpYWxBbmltYXRpb24pIHtcbiAgICAgICAgICAgICAgICBzaG91bGRBbmltYXRlVHlwZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB0aGlzIGlzIGFuIGluaGVyaXRlZCBwcm9wIHdlIHdhbnQgdG8gaGFyZC1ibG9jayBhbmltYXRpb25zXG4gICAgICAgICAgICAgKiBUT0RPOiBUZXN0IGFzIHRoaXMgc2hvdWxkIHByb2JhYmx5IHN0aWxsIGhhbmRsZSBhbmltYXRpb25zIHRyaWdnZXJlZFxuICAgICAgICAgICAgICogYnkgcmVtb3ZlZCB2YWx1ZXM/XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmIChzaG91bGRBbmltYXRlVHlwZSAmJiAhaXNJbmhlcml0ZWQpIHtcbiAgICAgICAgICAgICAgICBhbmltYXRpb25zLnB1c2guYXBwbHkoYW5pbWF0aW9ucywgX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGRlZmluaXRpb25MaXN0Lm1hcChmdW5jdGlvbiAoYW5pbWF0aW9uKSB7IHJldHVybiAoe1xuICAgICAgICAgICAgICAgICAgICBhbmltYXRpb246IGFuaW1hdGlvbixcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogX19hc3NpZ24oeyB0eXBlOiB0eXBlIH0sIG9wdGlvbnMpLFxuICAgICAgICAgICAgICAgIH0pOyB9KSksIGZhbHNlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJdGVyYXRlIHRocm91Z2ggYWxsIGFuaW1hdGlvbiB0eXBlcyBpbiByZXZlcnNlIHByaW9yaXR5IG9yZGVyLiBGb3IgZWFjaCwgd2Ugd2FudCB0b1xuICAgICAgICAgKiBkZXRlY3Qgd2hpY2ggdmFsdWVzIGl0J3MgaGFuZGxpbmcgYW5kIHdoZXRoZXIgb3Igbm90IHRoZXkndmUgY2hhbmdlZCAoYW5kIHRoZXJlZm9yZVxuICAgICAgICAgKiBuZWVkIHRvIGJlIGFuaW1hdGVkKS4gSWYgYW55IHZhbHVlcyBoYXZlIGJlZW4gcmVtb3ZlZCwgd2Ugd2FudCB0byBkZXRlY3QgdGhvc2UgaW5cbiAgICAgICAgICogbG93ZXIgcHJpb3JpdHkgcHJvcHMgYW5kIGZsYWcgZm9yIGFuaW1hdGlvbi5cbiAgICAgICAgICovXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtQW5pbWF0aW9uVHlwZXM7IGkrKykge1xuICAgICAgICAgICAgX2xvb3BfMShpKTtcbiAgICAgICAgfVxuICAgICAgICBhbGxBbmltYXRlZEtleXMgPSBfX2Fzc2lnbih7fSwgZW5jb3VudGVyZWRLZXlzKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHRoZXJlIGFyZSBzb21lIHJlbW92ZWQgdmFsdWUgdGhhdCBoYXZlbid0IGJlZW4gZGVhbHQgd2l0aCxcbiAgICAgICAgICogd2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgYW5pbWF0aW9uIHRoYXQgZmFsbHMgYmFjayBlaXRoZXIgdG8gdGhlIHZhbHVlXG4gICAgICAgICAqIGRlZmluZWQgaW4gdGhlIHN0eWxlIHByb3AsIG9yIHRoZSBsYXN0IHJlYWQgdmFsdWUuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAocmVtb3ZlZEtleXMuc2l6ZSkge1xuICAgICAgICAgICAgdmFyIGZhbGxiYWNrQW5pbWF0aW9uXzEgPSB7fTtcbiAgICAgICAgICAgIHJlbW92ZWRLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIHZhciBmYWxsYmFja1RhcmdldCA9IHZpc3VhbEVsZW1lbnQuZ2V0QmFzZVRhcmdldChrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChmYWxsYmFja1RhcmdldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrQW5pbWF0aW9uXzFba2V5XSA9IGZhbGxiYWNrVGFyZ2V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYW5pbWF0aW9ucy5wdXNoKHsgYW5pbWF0aW9uOiBmYWxsYmFja0FuaW1hdGlvbl8xIH0pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzaG91bGRBbmltYXRlID0gQm9vbGVhbihhbmltYXRpb25zLmxlbmd0aCk7XG4gICAgICAgIGlmIChpc0luaXRpYWxSZW5kZXIgJiZcbiAgICAgICAgICAgIHByb3BzLmluaXRpYWwgPT09IGZhbHNlICYmXG4gICAgICAgICAgICAhdmlzdWFsRWxlbWVudC5tYW51YWxseUFuaW1hdGVPbk1vdW50KSB7XG4gICAgICAgICAgICBzaG91bGRBbmltYXRlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaXNJbml0aWFsUmVuZGVyID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzaG91bGRBbmltYXRlID8gYW5pbWF0ZShhbmltYXRpb25zKSA6IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2Ugd2hldGhlciBhIGNlcnRhaW4gYW5pbWF0aW9uIHR5cGUgaXMgYWN0aXZlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNldEFjdGl2ZSh0eXBlLCBpc0FjdGl2ZSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIC8vIElmIHRoZSBhY3RpdmUgc3RhdGUgaGFzbid0IGNoYW5nZWQsIHdlIGNhbiBzYWZlbHkgZG8gbm90aGluZyBoZXJlXG4gICAgICAgIGlmIChzdGF0ZVt0eXBlXS5pc0FjdGl2ZSA9PT0gaXNBY3RpdmUpXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIC8vIFByb3BhZ2F0ZSBhY3RpdmUgY2hhbmdlIHRvIGNoaWxkcmVuXG4gICAgICAgIChfYSA9IHZpc3VhbEVsZW1lbnQudmFyaWFudENoaWxkcmVuKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHsgdmFyIF9hOyByZXR1cm4gKF9hID0gY2hpbGQuYW5pbWF0aW9uU3RhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZXRBY3RpdmUodHlwZSwgaXNBY3RpdmUpOyB9KTtcbiAgICAgICAgc3RhdGVbdHlwZV0uaXNBY3RpdmUgPSBpc0FjdGl2ZTtcbiAgICAgICAgdmFyIGFuaW1hdGlvbnMgPSBhbmltYXRlQ2hhbmdlcyhvcHRpb25zLCB0eXBlKTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHN0YXRlKSB7XG4gICAgICAgICAgICBzdGF0ZVtrZXldLnByb3RlY3RlZEtleXMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYW5pbWF0aW9ucztcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaXNBbmltYXRlZDogaXNBbmltYXRlZCxcbiAgICAgICAgYW5pbWF0ZUNoYW5nZXM6IGFuaW1hdGVDaGFuZ2VzLFxuICAgICAgICBzZXRBY3RpdmU6IHNldEFjdGl2ZSxcbiAgICAgICAgc2V0QW5pbWF0ZUZ1bmN0aW9uOiBzZXRBbmltYXRlRnVuY3Rpb24sXG4gICAgICAgIGdldFN0YXRlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBzdGF0ZTsgfSxcbiAgICB9O1xufVxuZnVuY3Rpb24gY2hlY2tWYXJpYW50c0RpZENoYW5nZShwcmV2LCBuZXh0KSB7XG4gICAgaWYgKHR5cGVvZiBuZXh0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBuZXh0ICE9PSBwcmV2O1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1ZhcmlhbnRMYWJlbHMobmV4dCkpIHtcbiAgICAgICAgcmV0dXJuICFzaGFsbG93Q29tcGFyZShuZXh0LCBwcmV2KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gY3JlYXRlVHlwZVN0YXRlKGlzQWN0aXZlKSB7XG4gICAgaWYgKGlzQWN0aXZlID09PSB2b2lkIDApIHsgaXNBY3RpdmUgPSBmYWxzZTsgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGlzQWN0aXZlOiBpc0FjdGl2ZSxcbiAgICAgICAgcHJvdGVjdGVkS2V5czoge30sXG4gICAgICAgIG5lZWRzQW5pbWF0aW5nOiB7fSxcbiAgICAgICAgcHJldlJlc29sdmVkVmFsdWVzOiB7fSxcbiAgICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlU3RhdGUoKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiBfYSA9IHt9LFxuICAgICAgICBfYVtBbmltYXRpb25UeXBlLkFuaW1hdGVdID0gY3JlYXRlVHlwZVN0YXRlKHRydWUpLFxuICAgICAgICBfYVtBbmltYXRpb25UeXBlLkluVmlld10gPSBjcmVhdGVUeXBlU3RhdGUoKSxcbiAgICAgICAgX2FbQW5pbWF0aW9uVHlwZS5Ib3Zlcl0gPSBjcmVhdGVUeXBlU3RhdGUoKSxcbiAgICAgICAgX2FbQW5pbWF0aW9uVHlwZS5UYXBdID0gY3JlYXRlVHlwZVN0YXRlKCksXG4gICAgICAgIF9hW0FuaW1hdGlvblR5cGUuRHJhZ10gPSBjcmVhdGVUeXBlU3RhdGUoKSxcbiAgICAgICAgX2FbQW5pbWF0aW9uVHlwZS5Gb2N1c10gPSBjcmVhdGVUeXBlU3RhdGUoKSxcbiAgICAgICAgX2FbQW5pbWF0aW9uVHlwZS5FeGl0XSA9IGNyZWF0ZVR5cGVTdGF0ZSgpLFxuICAgICAgICBfYTtcbn1cblxuZXhwb3J0IHsgY2hlY2tWYXJpYW50c0RpZENoYW5nZSwgY3JlYXRlQW5pbWF0aW9uU3RhdGUsIHZhcmlhbnRQcmlvcml0eU9yZGVyIH07XG4iLCJpbXBvcnQgeyBfX3JlYWQgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0FuaW1hdGlvbkNvbnRyb2xzIH0gZnJvbSAnLi4vLi4vYW5pbWF0aW9uL3V0aWxzL2lzLWFuaW1hdGlvbi1jb250cm9scy5tanMnO1xuaW1wb3J0IHsgdXNlUHJlc2VuY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL0FuaW1hdGVQcmVzZW5jZS91c2UtcHJlc2VuY2UubWpzJztcbmltcG9ydCB7IFByZXNlbmNlQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvUHJlc2VuY2VDb250ZXh0Lm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVBbmltYXRpb25TdGF0ZSB9IGZyb20gJy4uLy4uL3JlbmRlci91dGlscy9hbmltYXRpb24tc3RhdGUubWpzJztcbmltcG9ydCB7IEFuaW1hdGlvblR5cGUgfSBmcm9tICcuLi8uLi9yZW5kZXIvdXRpbHMvdHlwZXMubWpzJztcbmltcG9ydCB7IG1ha2VSZW5kZXJsZXNzQ29tcG9uZW50IH0gZnJvbSAnLi4vdXRpbHMvbWFrZS1yZW5kZXJsZXNzLWNvbXBvbmVudC5tanMnO1xuXG52YXIgYW5pbWF0aW9ucyA9IHtcbiAgICBhbmltYXRpb246IG1ha2VSZW5kZXJsZXNzQ29tcG9uZW50KGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgdmlzdWFsRWxlbWVudCA9IF9hLnZpc3VhbEVsZW1lbnQsIGFuaW1hdGUgPSBfYS5hbmltYXRlO1xuICAgICAgICAvKipcbiAgICAgICAgICogV2UgZHluYW1pY2FsbHkgZ2VuZXJhdGUgdGhlIEFuaW1hdGlvblN0YXRlIG1hbmFnZXIgYXMgaXQgY29udGFpbnMgYSByZWZlcmVuY2VcbiAgICAgICAgICogdG8gdGhlIHVuZGVybHlpbmcgYW5pbWF0aW9uIGxpYnJhcnkuIFdlIG9ubHkgd2FudCB0byBsb2FkIHRoYXQgaWYgd2UgbG9hZCB0aGlzLFxuICAgICAgICAgKiBzbyBwZW9wbGUgY2FuIG9wdGlvbmFsbHkgY29kZSBzcGxpdCBpdCBvdXQgdXNpbmcgdGhlIGBtYCBjb21wb25lbnQuXG4gICAgICAgICAqL1xuICAgICAgICB2aXN1YWxFbGVtZW50LmFuaW1hdGlvblN0YXRlIHx8ICh2aXN1YWxFbGVtZW50LmFuaW1hdGlvblN0YXRlID0gY3JlYXRlQW5pbWF0aW9uU3RhdGUodmlzdWFsRWxlbWVudCkpO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3Vic2NyaWJlIGFueSBwcm92aWRlZCBBbmltYXRpb25Db250cm9scyB0byB0aGUgY29tcG9uZW50J3MgVmlzdWFsRWxlbWVudFxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKGlzQW5pbWF0aW9uQ29udHJvbHMoYW5pbWF0ZSkpIHtcbiAgICAgICAgICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7IHJldHVybiBhbmltYXRlLnN1YnNjcmliZSh2aXN1YWxFbGVtZW50KTsgfSwgW2FuaW1hdGVdKTtcbiAgICAgICAgfVxuICAgIH0pLFxuICAgIGV4aXQ6IG1ha2VSZW5kZXJsZXNzQ29tcG9uZW50KGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgY3VzdG9tID0gcHJvcHMuY3VzdG9tLCB2aXN1YWxFbGVtZW50ID0gcHJvcHMudmlzdWFsRWxlbWVudDtcbiAgICAgICAgdmFyIF9hID0gX19yZWFkKHVzZVByZXNlbmNlKCksIDIpLCBpc1ByZXNlbnQgPSBfYVswXSwgc2FmZVRvUmVtb3ZlID0gX2FbMV07XG4gICAgICAgIHZhciBwcmVzZW5jZUNvbnRleHQgPSB1c2VDb250ZXh0KFByZXNlbmNlQ29udGV4dCk7XG4gICAgICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgdmlzdWFsRWxlbWVudC5pc1ByZXNlbnQgPSBpc1ByZXNlbnQ7XG4gICAgICAgICAgICB2YXIgYW5pbWF0aW9uID0gKF9hID0gdmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNldEFjdGl2ZShBbmltYXRpb25UeXBlLkV4aXQsICFpc1ByZXNlbnQsIHsgY3VzdG9tOiAoX2IgPSBwcmVzZW5jZUNvbnRleHQgPT09IG51bGwgfHwgcHJlc2VuY2VDb250ZXh0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcmVzZW5jZUNvbnRleHQuY3VzdG9tKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBjdXN0b20gfSk7XG4gICAgICAgICAgICAhaXNQcmVzZW50ICYmIChhbmltYXRpb24gPT09IG51bGwgfHwgYW5pbWF0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhbmltYXRpb24udGhlbihzYWZlVG9SZW1vdmUpKTtcbiAgICAgICAgfSwgW2lzUHJlc2VudF0pO1xuICAgIH0pLFxufTtcblxuZXhwb3J0IHsgYW5pbWF0aW9ucyB9O1xuIiwiY29uc3QgaXNQb2ludCA9IChwb2ludCkgPT4gcG9pbnQuaGFzT3duUHJvcGVydHkoJ3gnKSAmJiBwb2ludC5oYXNPd25Qcm9wZXJ0eSgneScpO1xuXG5leHBvcnQgeyBpc1BvaW50IH07XG4iLCJpbXBvcnQgeyBpc1BvaW50IH0gZnJvbSAnLi9pcy1wb2ludC5tanMnO1xuXG5jb25zdCBpc1BvaW50M0QgPSAocG9pbnQpID0+IGlzUG9pbnQocG9pbnQpICYmIHBvaW50Lmhhc093blByb3BlcnR5KCd6Jyk7XG5cbmV4cG9ydCB7IGlzUG9pbnQzRCB9O1xuIiwiaW1wb3J0IHsgaXNQb2ludCB9IGZyb20gJy4vaXMtcG9pbnQubWpzJztcbmltcG9ydCB7IGlzUG9pbnQzRCB9IGZyb20gJy4vaXMtcG9pbnQtM2QubWpzJztcbmltcG9ydCB7IGlzTnVtIH0gZnJvbSAnLi9pbmMubWpzJztcblxuY29uc3QgZGlzdGFuY2UxRCA9IChhLCBiKSA9PiBNYXRoLmFicyhhIC0gYik7XG5mdW5jdGlvbiBkaXN0YW5jZShhLCBiKSB7XG4gICAgaWYgKGlzTnVtKGEpICYmIGlzTnVtKGIpKSB7XG4gICAgICAgIHJldHVybiBkaXN0YW5jZTFEKGEsIGIpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1BvaW50KGEpICYmIGlzUG9pbnQoYikpIHtcbiAgICAgICAgY29uc3QgeERlbHRhID0gZGlzdGFuY2UxRChhLngsIGIueCk7XG4gICAgICAgIGNvbnN0IHlEZWx0YSA9IGRpc3RhbmNlMUQoYS55LCBiLnkpO1xuICAgICAgICBjb25zdCB6RGVsdGEgPSBpc1BvaW50M0QoYSkgJiYgaXNQb2ludDNEKGIpID8gZGlzdGFuY2UxRChhLnosIGIueikgOiAwO1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHhEZWx0YSwgMikgKyBNYXRoLnBvdyh5RGVsdGEsIDIpICsgTWF0aC5wb3coekRlbHRhLCAyKSk7XG4gICAgfVxufVxuXG5leHBvcnQgeyBkaXN0YW5jZSB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBpc01vdXNlRXZlbnQsIGlzVG91Y2hFdmVudCB9IGZyb20gJy4vdXRpbHMvZXZlbnQtdHlwZS5tanMnO1xuaW1wb3J0IHsgZXh0cmFjdEV2ZW50SW5mbyB9IGZyb20gJy4uL2V2ZW50cy9ldmVudC1pbmZvLm1qcyc7XG5pbXBvcnQgc3luYywgeyBnZXRGcmFtZURhdGEsIGNhbmNlbFN5bmMgfSBmcm9tICdmcmFtZXN5bmMnO1xuaW1wb3J0IHsgc2Vjb25kc1RvTWlsbGlzZWNvbmRzIH0gZnJvbSAnLi4vdXRpbHMvdGltZS1jb252ZXJzaW9uLm1qcyc7XG5pbXBvcnQgeyBhZGRQb2ludGVyRXZlbnQgfSBmcm9tICcuLi9ldmVudHMvdXNlLXBvaW50ZXItZXZlbnQubWpzJztcbmltcG9ydCB7IGRpc3RhbmNlLCBwaXBlIH0gZnJvbSAncG9wbW90aW9uJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xudmFyIFBhblNlc3Npb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUGFuU2Vzc2lvbihldmVudCwgaGFuZGxlcnMsIF9hKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYiA9IF9hID09PSB2b2lkIDAgPyB7fSA6IF9hLCB0cmFuc2Zvcm1QYWdlUG9pbnQgPSBfYi50cmFuc2Zvcm1QYWdlUG9pbnQ7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaW50ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc3RhcnRFdmVudCA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaW50ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubGFzdE1vdmVFdmVudCA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaW50ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubGFzdE1vdmVFdmVudEluZm8gPSBudWxsO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGludGVybmFsXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmhhbmRsZXJzID0ge307XG4gICAgICAgIHRoaXMudXBkYXRlUG9pbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIShfdGhpcy5sYXN0TW92ZUV2ZW50ICYmIF90aGlzLmxhc3RNb3ZlRXZlbnRJbmZvKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgaW5mbyA9IGdldFBhbkluZm8oX3RoaXMubGFzdE1vdmVFdmVudEluZm8sIF90aGlzLmhpc3RvcnkpO1xuICAgICAgICAgICAgdmFyIGlzUGFuU3RhcnRlZCA9IF90aGlzLnN0YXJ0RXZlbnQgIT09IG51bGw7XG4gICAgICAgICAgICAvLyBPbmx5IHN0YXJ0IHBhbm5pbmcgaWYgdGhlIG9mZnNldCBpcyBsYXJnZXIgdGhhbiAzIHBpeGVscy4gSWYgd2UgbWFrZSBpdFxuICAgICAgICAgICAgLy8gYW55IGxhcmdlciB0aGFuIHRoaXMgd2UnbGwgd2FudCB0byByZXNldCB0aGUgcG9pbnRlciBoaXN0b3J5XG4gICAgICAgICAgICAvLyBvbiB0aGUgZmlyc3QgdXBkYXRlIHRvIGF2b2lkIHZpc3VhbCBzbmFwcGluZyB0byB0aGUgY3Vyc29lLlxuICAgICAgICAgICAgdmFyIGlzRGlzdGFuY2VQYXN0VGhyZXNob2xkID0gZGlzdGFuY2UoaW5mby5vZmZzZXQsIHsgeDogMCwgeTogMCB9KSA+PSAzO1xuICAgICAgICAgICAgaWYgKCFpc1BhblN0YXJ0ZWQgJiYgIWlzRGlzdGFuY2VQYXN0VGhyZXNob2xkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBwb2ludCA9IGluZm8ucG9pbnQ7XG4gICAgICAgICAgICB2YXIgdGltZXN0YW1wID0gZ2V0RnJhbWVEYXRhKCkudGltZXN0YW1wO1xuICAgICAgICAgICAgX3RoaXMuaGlzdG9yeS5wdXNoKF9fYXNzaWduKF9fYXNzaWduKHt9LCBwb2ludCksIHsgdGltZXN0YW1wOiB0aW1lc3RhbXAgfSkpO1xuICAgICAgICAgICAgdmFyIF9hID0gX3RoaXMuaGFuZGxlcnMsIG9uU3RhcnQgPSBfYS5vblN0YXJ0LCBvbk1vdmUgPSBfYS5vbk1vdmU7XG4gICAgICAgICAgICBpZiAoIWlzUGFuU3RhcnRlZCkge1xuICAgICAgICAgICAgICAgIG9uU3RhcnQgJiYgb25TdGFydChfdGhpcy5sYXN0TW92ZUV2ZW50LCBpbmZvKTtcbiAgICAgICAgICAgICAgICBfdGhpcy5zdGFydEV2ZW50ID0gX3RoaXMubGFzdE1vdmVFdmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uTW92ZSAmJiBvbk1vdmUoX3RoaXMubGFzdE1vdmVFdmVudCwgaW5mbyk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlck1vdmUgPSBmdW5jdGlvbiAoZXZlbnQsIGluZm8pIHtcbiAgICAgICAgICAgIF90aGlzLmxhc3RNb3ZlRXZlbnQgPSBldmVudDtcbiAgICAgICAgICAgIF90aGlzLmxhc3RNb3ZlRXZlbnRJbmZvID0gdHJhbnNmb3JtUG9pbnQoaW5mbywgX3RoaXMudHJhbnNmb3JtUGFnZVBvaW50KTtcbiAgICAgICAgICAgIC8vIEJlY2F1c2UgU2FmYXJpIGRvZXNuJ3QgdHJpZ2dlciBtb3VzZXVwIGV2ZW50cyB3aGVuIGl0J3MgYWJvdmUgYSBgPHNlbGVjdD5gXG4gICAgICAgICAgICBpZiAoaXNNb3VzZUV2ZW50KGV2ZW50KSAmJiBldmVudC5idXR0b25zID09PSAwKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaGFuZGxlUG9pbnRlclVwKGV2ZW50LCBpbmZvKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUaHJvdHRsZSBtb3VzZSBtb3ZlIGV2ZW50IHRvIG9uY2UgcGVyIGZyYW1lXG4gICAgICAgICAgICBzeW5jLnVwZGF0ZShfdGhpcy51cGRhdGVQb2ludCwgdHJ1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlclVwID0gZnVuY3Rpb24gKGV2ZW50LCBpbmZvKSB7XG4gICAgICAgICAgICBfdGhpcy5lbmQoKTtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLmhhbmRsZXJzLCBvbkVuZCA9IF9hLm9uRW5kLCBvblNlc3Npb25FbmQgPSBfYS5vblNlc3Npb25FbmQ7XG4gICAgICAgICAgICB2YXIgcGFuSW5mbyA9IGdldFBhbkluZm8odHJhbnNmb3JtUG9pbnQoaW5mbywgX3RoaXMudHJhbnNmb3JtUGFnZVBvaW50KSwgX3RoaXMuaGlzdG9yeSk7XG4gICAgICAgICAgICBpZiAoX3RoaXMuc3RhcnRFdmVudCAmJiBvbkVuZCkge1xuICAgICAgICAgICAgICAgIG9uRW5kKGV2ZW50LCBwYW5JbmZvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uU2Vzc2lvbkVuZCAmJiBvblNlc3Npb25FbmQoZXZlbnQsIHBhbkluZm8pO1xuICAgICAgICB9O1xuICAgICAgICAvLyBJZiB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgdG91Y2gsIGRvbid0IHN0YXJ0IGRldGVjdGluZyB0aGlzIGdlc3R1cmVcbiAgICAgICAgaWYgKGlzVG91Y2hFdmVudChldmVudCkgJiYgZXZlbnQudG91Y2hlcy5sZW5ndGggPiAxKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmhhbmRsZXJzID0gaGFuZGxlcnM7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtUGFnZVBvaW50ID0gdHJhbnNmb3JtUGFnZVBvaW50O1xuICAgICAgICB2YXIgaW5mbyA9IGV4dHJhY3RFdmVudEluZm8oZXZlbnQpO1xuICAgICAgICB2YXIgaW5pdGlhbEluZm8gPSB0cmFuc2Zvcm1Qb2ludChpbmZvLCB0aGlzLnRyYW5zZm9ybVBhZ2VQb2ludCk7XG4gICAgICAgIHZhciBwb2ludCA9IGluaXRpYWxJbmZvLnBvaW50O1xuICAgICAgICB2YXIgdGltZXN0YW1wID0gZ2V0RnJhbWVEYXRhKCkudGltZXN0YW1wO1xuICAgICAgICB0aGlzLmhpc3RvcnkgPSBbX19hc3NpZ24oX19hc3NpZ24oe30sIHBvaW50KSwgeyB0aW1lc3RhbXA6IHRpbWVzdGFtcCB9KV07XG4gICAgICAgIHZhciBvblNlc3Npb25TdGFydCA9IGhhbmRsZXJzLm9uU2Vzc2lvblN0YXJ0O1xuICAgICAgICBvblNlc3Npb25TdGFydCAmJlxuICAgICAgICAgICAgb25TZXNzaW9uU3RhcnQoZXZlbnQsIGdldFBhbkluZm8oaW5pdGlhbEluZm8sIHRoaXMuaGlzdG9yeSkpO1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVycyA9IHBpcGUoYWRkUG9pbnRlckV2ZW50KHdpbmRvdywgXCJwb2ludGVybW92ZVwiLCB0aGlzLmhhbmRsZVBvaW50ZXJNb3ZlKSwgYWRkUG9pbnRlckV2ZW50KHdpbmRvdywgXCJwb2ludGVydXBcIiwgdGhpcy5oYW5kbGVQb2ludGVyVXApLCBhZGRQb2ludGVyRXZlbnQod2luZG93LCBcInBvaW50ZXJjYW5jZWxcIiwgdGhpcy5oYW5kbGVQb2ludGVyVXApKTtcbiAgICB9XG4gICAgUGFuU2Vzc2lvbi5wcm90b3R5cGUudXBkYXRlSGFuZGxlcnMgPSBmdW5jdGlvbiAoaGFuZGxlcnMpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVycyA9IGhhbmRsZXJzO1xuICAgIH07XG4gICAgUGFuU2Vzc2lvbi5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVycyAmJiB0aGlzLnJlbW92ZUxpc3RlbmVycygpO1xuICAgICAgICBjYW5jZWxTeW5jLnVwZGF0ZSh0aGlzLnVwZGF0ZVBvaW50KTtcbiAgICB9O1xuICAgIHJldHVybiBQYW5TZXNzaW9uO1xufSgpKTtcbmZ1bmN0aW9uIHRyYW5zZm9ybVBvaW50KGluZm8sIHRyYW5zZm9ybVBhZ2VQb2ludCkge1xuICAgIHJldHVybiB0cmFuc2Zvcm1QYWdlUG9pbnQgPyB7IHBvaW50OiB0cmFuc2Zvcm1QYWdlUG9pbnQoaW5mby5wb2ludCkgfSA6IGluZm87XG59XG5mdW5jdGlvbiBzdWJ0cmFjdFBvaW50KGEsIGIpIHtcbiAgICByZXR1cm4geyB4OiBhLnggLSBiLngsIHk6IGEueSAtIGIueSB9O1xufVxuZnVuY3Rpb24gZ2V0UGFuSW5mbyhfYSwgaGlzdG9yeSkge1xuICAgIHZhciBwb2ludCA9IF9hLnBvaW50O1xuICAgIHJldHVybiB7XG4gICAgICAgIHBvaW50OiBwb2ludCxcbiAgICAgICAgZGVsdGE6IHN1YnRyYWN0UG9pbnQocG9pbnQsIGxhc3REZXZpY2VQb2ludChoaXN0b3J5KSksXG4gICAgICAgIG9mZnNldDogc3VidHJhY3RQb2ludChwb2ludCwgc3RhcnREZXZpY2VQb2ludChoaXN0b3J5KSksXG4gICAgICAgIHZlbG9jaXR5OiBnZXRWZWxvY2l0eShoaXN0b3J5LCAwLjEpLFxuICAgIH07XG59XG5mdW5jdGlvbiBzdGFydERldmljZVBvaW50KGhpc3RvcnkpIHtcbiAgICByZXR1cm4gaGlzdG9yeVswXTtcbn1cbmZ1bmN0aW9uIGxhc3REZXZpY2VQb2ludChoaXN0b3J5KSB7XG4gICAgcmV0dXJuIGhpc3RvcnlbaGlzdG9yeS5sZW5ndGggLSAxXTtcbn1cbmZ1bmN0aW9uIGdldFZlbG9jaXR5KGhpc3RvcnksIHRpbWVEZWx0YSkge1xuICAgIGlmIChoaXN0b3J5Lmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIHsgeDogMCwgeTogMCB9O1xuICAgIH1cbiAgICB2YXIgaSA9IGhpc3RvcnkubGVuZ3RoIC0gMTtcbiAgICB2YXIgdGltZXN0YW1wZWRQb2ludCA9IG51bGw7XG4gICAgdmFyIGxhc3RQb2ludCA9IGxhc3REZXZpY2VQb2ludChoaXN0b3J5KTtcbiAgICB3aGlsZSAoaSA+PSAwKSB7XG4gICAgICAgIHRpbWVzdGFtcGVkUG9pbnQgPSBoaXN0b3J5W2ldO1xuICAgICAgICBpZiAobGFzdFBvaW50LnRpbWVzdGFtcCAtIHRpbWVzdGFtcGVkUG9pbnQudGltZXN0YW1wID5cbiAgICAgICAgICAgIHNlY29uZHNUb01pbGxpc2Vjb25kcyh0aW1lRGVsdGEpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpLS07XG4gICAgfVxuICAgIGlmICghdGltZXN0YW1wZWRQb2ludCkge1xuICAgICAgICByZXR1cm4geyB4OiAwLCB5OiAwIH07XG4gICAgfVxuICAgIHZhciB0aW1lID0gKGxhc3RQb2ludC50aW1lc3RhbXAgLSB0aW1lc3RhbXBlZFBvaW50LnRpbWVzdGFtcCkgLyAxMDAwO1xuICAgIGlmICh0aW1lID09PSAwKSB7XG4gICAgICAgIHJldHVybiB7IHg6IDAsIHk6IDAgfTtcbiAgICB9XG4gICAgdmFyIGN1cnJlbnRWZWxvY2l0eSA9IHtcbiAgICAgICAgeDogKGxhc3RQb2ludC54IC0gdGltZXN0YW1wZWRQb2ludC54KSAvIHRpbWUsXG4gICAgICAgIHk6IChsYXN0UG9pbnQueSAtIHRpbWVzdGFtcGVkUG9pbnQueSkgLyB0aW1lLFxuICAgIH07XG4gICAgaWYgKGN1cnJlbnRWZWxvY2l0eS54ID09PSBJbmZpbml0eSkge1xuICAgICAgICBjdXJyZW50VmVsb2NpdHkueCA9IDA7XG4gICAgfVxuICAgIGlmIChjdXJyZW50VmVsb2NpdHkueSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgY3VycmVudFZlbG9jaXR5LnkgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudFZlbG9jaXR5O1xufVxuXG5leHBvcnQgeyBQYW5TZXNzaW9uIH07XG4iLCJpbXBvcnQgeyBtaXgsIGRpc3RhbmNlIH0gZnJvbSAncG9wbW90aW9uJztcblxuZnVuY3Rpb24gY2FsY0xlbmd0aChheGlzKSB7XG4gICAgcmV0dXJuIGF4aXMubWF4IC0gYXhpcy5taW47XG59XG5mdW5jdGlvbiBpc05lYXIodmFsdWUsIHRhcmdldCwgbWF4RGlzdGFuY2UpIHtcbiAgICBpZiAodGFyZ2V0ID09PSB2b2lkIDApIHsgdGFyZ2V0ID0gMDsgfVxuICAgIGlmIChtYXhEaXN0YW5jZSA9PT0gdm9pZCAwKSB7IG1heERpc3RhbmNlID0gMC4wMTsgfVxuICAgIHJldHVybiBkaXN0YW5jZSh2YWx1ZSwgdGFyZ2V0KSA8IG1heERpc3RhbmNlO1xufVxuZnVuY3Rpb24gY2FsY0F4aXNEZWx0YShkZWx0YSwgc291cmNlLCB0YXJnZXQsIG9yaWdpbikge1xuICAgIGlmIChvcmlnaW4gPT09IHZvaWQgMCkgeyBvcmlnaW4gPSAwLjU7IH1cbiAgICBkZWx0YS5vcmlnaW4gPSBvcmlnaW47XG4gICAgZGVsdGEub3JpZ2luUG9pbnQgPSBtaXgoc291cmNlLm1pbiwgc291cmNlLm1heCwgZGVsdGEub3JpZ2luKTtcbiAgICBkZWx0YS5zY2FsZSA9IGNhbGNMZW5ndGgodGFyZ2V0KSAvIGNhbGNMZW5ndGgoc291cmNlKTtcbiAgICBpZiAoaXNOZWFyKGRlbHRhLnNjYWxlLCAxLCAwLjAwMDEpIHx8IGlzTmFOKGRlbHRhLnNjYWxlKSlcbiAgICAgICAgZGVsdGEuc2NhbGUgPSAxO1xuICAgIGRlbHRhLnRyYW5zbGF0ZSA9XG4gICAgICAgIG1peCh0YXJnZXQubWluLCB0YXJnZXQubWF4LCBkZWx0YS5vcmlnaW4pIC0gZGVsdGEub3JpZ2luUG9pbnQ7XG4gICAgaWYgKGlzTmVhcihkZWx0YS50cmFuc2xhdGUpIHx8IGlzTmFOKGRlbHRhLnRyYW5zbGF0ZSkpXG4gICAgICAgIGRlbHRhLnRyYW5zbGF0ZSA9IDA7XG59XG5mdW5jdGlvbiBjYWxjQm94RGVsdGEoZGVsdGEsIHNvdXJjZSwgdGFyZ2V0LCBvcmlnaW4pIHtcbiAgICBjYWxjQXhpc0RlbHRhKGRlbHRhLngsIHNvdXJjZS54LCB0YXJnZXQueCwgb3JpZ2luID09PSBudWxsIHx8IG9yaWdpbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3JpZ2luLm9yaWdpblgpO1xuICAgIGNhbGNBeGlzRGVsdGEoZGVsdGEueSwgc291cmNlLnksIHRhcmdldC55LCBvcmlnaW4gPT09IG51bGwgfHwgb3JpZ2luID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcmlnaW4ub3JpZ2luWSk7XG59XG5mdW5jdGlvbiBjYWxjUmVsYXRpdmVBeGlzKHRhcmdldCwgcmVsYXRpdmUsIHBhcmVudCkge1xuICAgIHRhcmdldC5taW4gPSBwYXJlbnQubWluICsgcmVsYXRpdmUubWluO1xuICAgIHRhcmdldC5tYXggPSB0YXJnZXQubWluICsgY2FsY0xlbmd0aChyZWxhdGl2ZSk7XG59XG5mdW5jdGlvbiBjYWxjUmVsYXRpdmVCb3godGFyZ2V0LCByZWxhdGl2ZSwgcGFyZW50KSB7XG4gICAgY2FsY1JlbGF0aXZlQXhpcyh0YXJnZXQueCwgcmVsYXRpdmUueCwgcGFyZW50LngpO1xuICAgIGNhbGNSZWxhdGl2ZUF4aXModGFyZ2V0LnksIHJlbGF0aXZlLnksIHBhcmVudC55KTtcbn1cbmZ1bmN0aW9uIGNhbGNSZWxhdGl2ZUF4aXNQb3NpdGlvbih0YXJnZXQsIGxheW91dCwgcGFyZW50KSB7XG4gICAgdGFyZ2V0Lm1pbiA9IGxheW91dC5taW4gLSBwYXJlbnQubWluO1xuICAgIHRhcmdldC5tYXggPSB0YXJnZXQubWluICsgY2FsY0xlbmd0aChsYXlvdXQpO1xufVxuZnVuY3Rpb24gY2FsY1JlbGF0aXZlUG9zaXRpb24odGFyZ2V0LCBsYXlvdXQsIHBhcmVudCkge1xuICAgIGNhbGNSZWxhdGl2ZUF4aXNQb3NpdGlvbih0YXJnZXQueCwgbGF5b3V0LngsIHBhcmVudC54KTtcbiAgICBjYWxjUmVsYXRpdmVBeGlzUG9zaXRpb24odGFyZ2V0LnksIGxheW91dC55LCBwYXJlbnQueSk7XG59XG5cbmV4cG9ydCB7IGNhbGNBeGlzRGVsdGEsIGNhbGNCb3hEZWx0YSwgY2FsY0xlbmd0aCwgY2FsY1JlbGF0aXZlQXhpcywgY2FsY1JlbGF0aXZlQXhpc1Bvc2l0aW9uLCBjYWxjUmVsYXRpdmVCb3gsIGNhbGNSZWxhdGl2ZVBvc2l0aW9uLCBpc05lYXIgfTtcbiIsImltcG9ydCB7IF9fcmVhZCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IGNsYW1wLCBtaXgsIHByb2dyZXNzIH0gZnJvbSAncG9wbW90aW9uJztcbmltcG9ydCB7IGNhbGNMZW5ndGggfSBmcm9tICcuLi8uLi8uLi9wcm9qZWN0aW9uL2dlb21ldHJ5L2RlbHRhLWNhbGMubWpzJztcblxuLyoqXG4gKiBBcHBseSBjb25zdHJhaW50cyB0byBhIHBvaW50LiBUaGVzZSBjb25zdHJhaW50cyBhcmUgYm90aCBwaHlzaWNhbCBhbG9uZyBhblxuICogYXhpcywgYW5kIGFuIGVsYXN0aWMgZmFjdG9yIHRoYXQgZGV0ZXJtaW5lcyBob3cgbXVjaCB0byBjb25zdHJhaW4gdGhlIHBvaW50XG4gKiBieSBpZiBpdCBkb2VzIGxpZSBvdXRzaWRlIHRoZSBkZWZpbmVkIHBhcmFtZXRlcnMuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5Q29uc3RyYWludHMocG9pbnQsIF9hLCBlbGFzdGljKSB7XG4gICAgdmFyIG1pbiA9IF9hLm1pbiwgbWF4ID0gX2EubWF4O1xuICAgIGlmIChtaW4gIT09IHVuZGVmaW5lZCAmJiBwb2ludCA8IG1pbikge1xuICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgbWluIHBvaW50IGRlZmluZWQsIGFuZCB0aGlzIGlzIG91dHNpZGUgb2YgdGhhdCwgY29uc3RyYWluXG4gICAgICAgIHBvaW50ID0gZWxhc3RpYyA/IG1peChtaW4sIHBvaW50LCBlbGFzdGljLm1pbikgOiBNYXRoLm1heChwb2ludCwgbWluKTtcbiAgICB9XG4gICAgZWxzZSBpZiAobWF4ICE9PSB1bmRlZmluZWQgJiYgcG9pbnQgPiBtYXgpIHtcbiAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIG1heCBwb2ludCBkZWZpbmVkLCBhbmQgdGhpcyBpcyBvdXRzaWRlIG9mIHRoYXQsIGNvbnN0cmFpblxuICAgICAgICBwb2ludCA9IGVsYXN0aWMgPyBtaXgobWF4LCBwb2ludCwgZWxhc3RpYy5tYXgpIDogTWF0aC5taW4ocG9pbnQsIG1heCk7XG4gICAgfVxuICAgIHJldHVybiBwb2ludDtcbn1cbi8qKlxuICogQ2FsY3VsYXRlIGNvbnN0cmFpbnRzIGluIHRlcm1zIG9mIHRoZSB2aWV3cG9ydCB3aGVuIGRlZmluZWQgcmVsYXRpdmVseSB0byB0aGVcbiAqIG1lYXN1cmVkIGF4aXMuIFRoaXMgaXMgbWVhc3VyZWQgZnJvbSB0aGUgbmVhcmVzdCBlZGdlLCBzbyBhIG1heCBjb25zdHJhaW50IG9mIDIwMFxuICogb24gYW4gYXhpcyB3aXRoIGEgbWF4IHZhbHVlIG9mIDMwMCB3b3VsZCByZXR1cm4gYSBjb25zdHJhaW50IG9mIDUwMCAtIGF4aXMgbGVuZ3RoXG4gKi9cbmZ1bmN0aW9uIGNhbGNSZWxhdGl2ZUF4aXNDb25zdHJhaW50cyhheGlzLCBtaW4sIG1heCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG1pbjogbWluICE9PSB1bmRlZmluZWQgPyBheGlzLm1pbiArIG1pbiA6IHVuZGVmaW5lZCxcbiAgICAgICAgbWF4OiBtYXggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBheGlzLm1heCArIG1heCAtIChheGlzLm1heCAtIGF4aXMubWluKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlIGNvbnN0cmFpbnRzIGluIHRlcm1zIG9mIHRoZSB2aWV3cG9ydCB3aGVuXG4gKiBkZWZpbmVkIHJlbGF0aXZlbHkgdG8gdGhlIG1lYXN1cmVkIGJvdW5kaW5nIGJveC5cbiAqL1xuZnVuY3Rpb24gY2FsY1JlbGF0aXZlQ29uc3RyYWludHMobGF5b3V0Qm94LCBfYSkge1xuICAgIHZhciB0b3AgPSBfYS50b3AsIGxlZnQgPSBfYS5sZWZ0LCBib3R0b20gPSBfYS5ib3R0b20sIHJpZ2h0ID0gX2EucmlnaHQ7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogY2FsY1JlbGF0aXZlQXhpc0NvbnN0cmFpbnRzKGxheW91dEJveC54LCBsZWZ0LCByaWdodCksXG4gICAgICAgIHk6IGNhbGNSZWxhdGl2ZUF4aXNDb25zdHJhaW50cyhsYXlvdXRCb3gueSwgdG9wLCBib3R0b20pLFxuICAgIH07XG59XG4vKipcbiAqIENhbGN1bGF0ZSB2aWV3cG9ydCBjb25zdHJhaW50cyB3aGVuIGRlZmluZWQgYXMgYW5vdGhlciB2aWV3cG9ydC1yZWxhdGl2ZSBheGlzXG4gKi9cbmZ1bmN0aW9uIGNhbGNWaWV3cG9ydEF4aXNDb25zdHJhaW50cyhsYXlvdXRBeGlzLCBjb25zdHJhaW50c0F4aXMpIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIG1pbiA9IGNvbnN0cmFpbnRzQXhpcy5taW4gLSBsYXlvdXRBeGlzLm1pbjtcbiAgICB2YXIgbWF4ID0gY29uc3RyYWludHNBeGlzLm1heCAtIGxheW91dEF4aXMubWF4O1xuICAgIC8vIElmIHRoZSBjb25zdHJhaW50cyBheGlzIGlzIGFjdHVhbGx5IHNtYWxsZXIgdGhhbiB0aGUgbGF5b3V0IGF4aXMgdGhlbiB3ZSBjYW5cbiAgICAvLyBmbGlwIHRoZSBjb25zdHJhaW50c1xuICAgIGlmIChjb25zdHJhaW50c0F4aXMubWF4IC0gY29uc3RyYWludHNBeGlzLm1pbiA8XG4gICAgICAgIGxheW91dEF4aXMubWF4IC0gbGF5b3V0QXhpcy5taW4pIHtcbiAgICAgICAgX2EgPSBfX3JlYWQoW21heCwgbWluXSwgMiksIG1pbiA9IF9hWzBdLCBtYXggPSBfYVsxXTtcbiAgICB9XG4gICAgcmV0dXJuIHsgbWluOiBtaW4sIG1heDogbWF4IH07XG59XG4vKipcbiAqIENhbGN1bGF0ZSB2aWV3cG9ydCBjb25zdHJhaW50cyB3aGVuIGRlZmluZWQgYXMgYW5vdGhlciB2aWV3cG9ydC1yZWxhdGl2ZSBib3hcbiAqL1xuZnVuY3Rpb24gY2FsY1ZpZXdwb3J0Q29uc3RyYWludHMobGF5b3V0Qm94LCBjb25zdHJhaW50c0JveCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHg6IGNhbGNWaWV3cG9ydEF4aXNDb25zdHJhaW50cyhsYXlvdXRCb3gueCwgY29uc3RyYWludHNCb3gueCksXG4gICAgICAgIHk6IGNhbGNWaWV3cG9ydEF4aXNDb25zdHJhaW50cyhsYXlvdXRCb3gueSwgY29uc3RyYWludHNCb3gueSksXG4gICAgfTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlIGEgdHJhbnNmb3JtIG9yaWdpbiByZWxhdGl2ZSB0byB0aGUgc291cmNlIGF4aXMsIGJldHdlZW4gMC0xLCB0aGF0IHJlc3VsdHNcbiAqIGluIGFuIGFzdGhldGljYWxseSBwbGVhc2luZyBzY2FsZS90cmFuc2Zvcm0gbmVlZGVkIHRvIHByb2plY3QgZnJvbSBzb3VyY2UgdG8gdGFyZ2V0LlxuICovXG5mdW5jdGlvbiBjYWxjT3JpZ2luKHNvdXJjZSwgdGFyZ2V0KSB7XG4gICAgdmFyIG9yaWdpbiA9IDAuNTtcbiAgICB2YXIgc291cmNlTGVuZ3RoID0gY2FsY0xlbmd0aChzb3VyY2UpO1xuICAgIHZhciB0YXJnZXRMZW5ndGggPSBjYWxjTGVuZ3RoKHRhcmdldCk7XG4gICAgaWYgKHRhcmdldExlbmd0aCA+IHNvdXJjZUxlbmd0aCkge1xuICAgICAgICBvcmlnaW4gPSBwcm9ncmVzcyh0YXJnZXQubWluLCB0YXJnZXQubWF4IC0gc291cmNlTGVuZ3RoLCBzb3VyY2UubWluKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc291cmNlTGVuZ3RoID4gdGFyZ2V0TGVuZ3RoKSB7XG4gICAgICAgIG9yaWdpbiA9IHByb2dyZXNzKHNvdXJjZS5taW4sIHNvdXJjZS5tYXggLSB0YXJnZXRMZW5ndGgsIHRhcmdldC5taW4pO1xuICAgIH1cbiAgICByZXR1cm4gY2xhbXAoMCwgMSwgb3JpZ2luKTtcbn1cbi8qKlxuICogUmViYXNlIHRoZSBjYWxjdWxhdGVkIHZpZXdwb3J0IGNvbnN0cmFpbnRzIHJlbGF0aXZlIHRvIHRoZSBsYXlvdXQubWluIHBvaW50LlxuICovXG5mdW5jdGlvbiByZWJhc2VBeGlzQ29uc3RyYWludHMobGF5b3V0LCBjb25zdHJhaW50cykge1xuICAgIHZhciByZWxhdGl2ZUNvbnN0cmFpbnRzID0ge307XG4gICAgaWYgKGNvbnN0cmFpbnRzLm1pbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlbGF0aXZlQ29uc3RyYWludHMubWluID0gY29uc3RyYWludHMubWluIC0gbGF5b3V0Lm1pbjtcbiAgICB9XG4gICAgaWYgKGNvbnN0cmFpbnRzLm1heCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlbGF0aXZlQ29uc3RyYWludHMubWF4ID0gY29uc3RyYWludHMubWF4IC0gbGF5b3V0Lm1pbjtcbiAgICB9XG4gICAgcmV0dXJuIHJlbGF0aXZlQ29uc3RyYWludHM7XG59XG52YXIgZGVmYXVsdEVsYXN0aWMgPSAwLjM1O1xuLyoqXG4gKiBBY2NlcHRzIGEgZHJhZ0VsYXN0aWMgcHJvcCBhbmQgcmV0dXJucyByZXNvbHZlZCBlbGFzdGljIHZhbHVlcyBmb3IgZWFjaCBheGlzLlxuICovXG5mdW5jdGlvbiByZXNvbHZlRHJhZ0VsYXN0aWMoZHJhZ0VsYXN0aWMpIHtcbiAgICBpZiAoZHJhZ0VsYXN0aWMgPT09IHZvaWQgMCkgeyBkcmFnRWxhc3RpYyA9IGRlZmF1bHRFbGFzdGljOyB9XG4gICAgaWYgKGRyYWdFbGFzdGljID09PSBmYWxzZSkge1xuICAgICAgICBkcmFnRWxhc3RpYyA9IDA7XG4gICAgfVxuICAgIGVsc2UgaWYgKGRyYWdFbGFzdGljID09PSB0cnVlKSB7XG4gICAgICAgIGRyYWdFbGFzdGljID0gZGVmYXVsdEVsYXN0aWM7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHJlc29sdmVBeGlzRWxhc3RpYyhkcmFnRWxhc3RpYywgXCJsZWZ0XCIsIFwicmlnaHRcIiksXG4gICAgICAgIHk6IHJlc29sdmVBeGlzRWxhc3RpYyhkcmFnRWxhc3RpYywgXCJ0b3BcIiwgXCJib3R0b21cIiksXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVBeGlzRWxhc3RpYyhkcmFnRWxhc3RpYywgbWluTGFiZWwsIG1heExhYmVsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbWluOiByZXNvbHZlUG9pbnRFbGFzdGljKGRyYWdFbGFzdGljLCBtaW5MYWJlbCksXG4gICAgICAgIG1heDogcmVzb2x2ZVBvaW50RWxhc3RpYyhkcmFnRWxhc3RpYywgbWF4TGFiZWwpLFxuICAgIH07XG59XG5mdW5jdGlvbiByZXNvbHZlUG9pbnRFbGFzdGljKGRyYWdFbGFzdGljLCBsYWJlbCkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gdHlwZW9mIGRyYWdFbGFzdGljID09PSBcIm51bWJlclwiXG4gICAgICAgID8gZHJhZ0VsYXN0aWNcbiAgICAgICAgOiAoX2EgPSBkcmFnRWxhc3RpY1tsYWJlbF0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDA7XG59XG5cbmV4cG9ydCB7IGFwcGx5Q29uc3RyYWludHMsIGNhbGNPcmlnaW4sIGNhbGNSZWxhdGl2ZUF4aXNDb25zdHJhaW50cywgY2FsY1JlbGF0aXZlQ29uc3RyYWludHMsIGNhbGNWaWV3cG9ydEF4aXNDb25zdHJhaW50cywgY2FsY1ZpZXdwb3J0Q29uc3RyYWludHMsIGRlZmF1bHRFbGFzdGljLCByZWJhc2VBeGlzQ29uc3RyYWludHMsIHJlc29sdmVBeGlzRWxhc3RpYywgcmVzb2x2ZURyYWdFbGFzdGljLCByZXNvbHZlUG9pbnRFbGFzdGljIH07XG4iLCJ2YXIgY3JlYXRlQXhpc0RlbHRhID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gKHtcbiAgICB0cmFuc2xhdGU6IDAsXG4gICAgc2NhbGU6IDEsXG4gICAgb3JpZ2luOiAwLFxuICAgIG9yaWdpblBvaW50OiAwLFxufSk7IH07XG52YXIgY3JlYXRlRGVsdGEgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAoe1xuICAgIHg6IGNyZWF0ZUF4aXNEZWx0YSgpLFxuICAgIHk6IGNyZWF0ZUF4aXNEZWx0YSgpLFxufSk7IH07XG52YXIgY3JlYXRlQXhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7IG1pbjogMCwgbWF4OiAwIH0pOyB9O1xudmFyIGNyZWF0ZUJveCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7XG4gICAgeDogY3JlYXRlQXhpcygpLFxuICAgIHk6IGNyZWF0ZUF4aXMoKSxcbn0pOyB9O1xuXG5leHBvcnQgeyBjcmVhdGVBeGlzLCBjcmVhdGVBeGlzRGVsdGEsIGNyZWF0ZUJveCwgY3JlYXRlRGVsdGEgfTtcbiIsImZ1bmN0aW9uIGVhY2hBeGlzKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIFtjYWxsYmFjayhcInhcIiksIGNhbGxiYWNrKFwieVwiKV07XG59XG5cbmV4cG9ydCB7IGVhY2hBeGlzIH07XG4iLCIvKipcbiAqIEJvdW5kaW5nIGJveGVzIHRlbmQgdG8gYmUgZGVmaW5lZCBhcyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20uIEZvciB2YXJpb3VzIG9wZXJhdGlvbnNcbiAqIGl0J3MgZWFzaWVyIHRvIGNvbnNpZGVyIGVhY2ggYXhpcyBpbmRpdmlkdWFsbHkuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGJvdW5kaW5nIGJveFxuICogYXMgYSBtYXAgb2Ygc2luZ2xlLWF4aXMgbWluL21heCB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRCb3VuZGluZ0JveFRvQm94KF9hKSB7XG4gICAgdmFyIHRvcCA9IF9hLnRvcCwgbGVmdCA9IF9hLmxlZnQsIHJpZ2h0ID0gX2EucmlnaHQsIGJvdHRvbSA9IF9hLmJvdHRvbTtcbiAgICByZXR1cm4ge1xuICAgICAgICB4OiB7IG1pbjogbGVmdCwgbWF4OiByaWdodCB9LFxuICAgICAgICB5OiB7IG1pbjogdG9wLCBtYXg6IGJvdHRvbSB9LFxuICAgIH07XG59XG5mdW5jdGlvbiBjb252ZXJ0Qm94VG9Cb3VuZGluZ0JveChfYSkge1xuICAgIHZhciB4ID0gX2EueCwgeSA9IF9hLnk7XG4gICAgcmV0dXJuIHsgdG9wOiB5Lm1pbiwgcmlnaHQ6IHgubWF4LCBib3R0b206IHkubWF4LCBsZWZ0OiB4Lm1pbiB9O1xufVxuLyoqXG4gKiBBcHBsaWVzIGEgVHJhbnNmb3JtUG9pbnQgZnVuY3Rpb24gdG8gYSBib3VuZGluZyBib3guIFRyYW5zZm9ybVBvaW50IGlzIHVzdWFsbHkgYSBmdW5jdGlvblxuICogcHJvdmlkZWQgYnkgRnJhbWVyIHRvIGFsbG93IG1lYXN1cmVkIHBvaW50cyB0byBiZSBjb3JyZWN0ZWQgZm9yIGRldmljZSBzY2FsaW5nLiBUaGlzIGlzIHVzZWRcbiAqIHdoZW4gbWVhc3VyaW5nIERPTSBlbGVtZW50cyBhbmQgRE9NIGV2ZW50IHBvaW50cy5cbiAqL1xuZnVuY3Rpb24gdHJhbnNmb3JtQm94UG9pbnRzKHBvaW50LCB0cmFuc2Zvcm1Qb2ludCkge1xuICAgIGlmICghdHJhbnNmb3JtUG9pbnQpXG4gICAgICAgIHJldHVybiBwb2ludDtcbiAgICB2YXIgdG9wTGVmdCA9IHRyYW5zZm9ybVBvaW50KHsgeDogcG9pbnQubGVmdCwgeTogcG9pbnQudG9wIH0pO1xuICAgIHZhciBib3R0b21SaWdodCA9IHRyYW5zZm9ybVBvaW50KHsgeDogcG9pbnQucmlnaHQsIHk6IHBvaW50LmJvdHRvbSB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICB0b3A6IHRvcExlZnQueSxcbiAgICAgICAgbGVmdDogdG9wTGVmdC54LFxuICAgICAgICBib3R0b206IGJvdHRvbVJpZ2h0LnksXG4gICAgICAgIHJpZ2h0OiBib3R0b21SaWdodC54LFxuICAgIH07XG59XG5cbmV4cG9ydCB7IGNvbnZlcnRCb3VuZGluZ0JveFRvQm94LCBjb252ZXJ0Qm94VG9Cb3VuZGluZ0JveCwgdHJhbnNmb3JtQm94UG9pbnRzIH07XG4iLCJmdW5jdGlvbiBpc0lkZW50aXR5U2NhbGUoc2NhbGUpIHtcbiAgICByZXR1cm4gc2NhbGUgPT09IHVuZGVmaW5lZCB8fCBzY2FsZSA9PT0gMTtcbn1cbmZ1bmN0aW9uIGhhc1NjYWxlKF9hKSB7XG4gICAgdmFyIHNjYWxlID0gX2Euc2NhbGUsIHNjYWxlWCA9IF9hLnNjYWxlWCwgc2NhbGVZID0gX2Euc2NhbGVZO1xuICAgIHJldHVybiAoIWlzSWRlbnRpdHlTY2FsZShzY2FsZSkgfHxcbiAgICAgICAgIWlzSWRlbnRpdHlTY2FsZShzY2FsZVgpIHx8XG4gICAgICAgICFpc0lkZW50aXR5U2NhbGUoc2NhbGVZKSk7XG59XG5mdW5jdGlvbiBoYXNUcmFuc2Zvcm0odmFsdWVzKSB7XG4gICAgcmV0dXJuIChoYXNTY2FsZSh2YWx1ZXMpIHx8XG4gICAgICAgIGhhc1RyYW5zbGF0ZSh2YWx1ZXMueCkgfHxcbiAgICAgICAgaGFzVHJhbnNsYXRlKHZhbHVlcy55KSB8fFxuICAgICAgICB2YWx1ZXMueiB8fFxuICAgICAgICB2YWx1ZXMucm90YXRlIHx8XG4gICAgICAgIHZhbHVlcy5yb3RhdGVYIHx8XG4gICAgICAgIHZhbHVlcy5yb3RhdGVZKTtcbn1cbmZ1bmN0aW9uIGhhc1RyYW5zbGF0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZSAhPT0gXCIwJVwiO1xufVxuXG5leHBvcnQgeyBoYXNTY2FsZSwgaGFzVHJhbnNmb3JtIH07XG4iLCJpbXBvcnQgeyBfX3JlYWQgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBtaXggfSBmcm9tICdwb3Btb3Rpb24nO1xuaW1wb3J0IHsgaGFzVHJhbnNmb3JtIH0gZnJvbSAnLi4vdXRpbHMvaGFzLXRyYW5zZm9ybS5tanMnO1xuXG4vKipcbiAqIFNjYWxlcyBhIHBvaW50IGJhc2VkIG9uIGEgZmFjdG9yIGFuZCBhbiBvcmlnaW5Qb2ludFxuICovXG5mdW5jdGlvbiBzY2FsZVBvaW50KHBvaW50LCBzY2FsZSwgb3JpZ2luUG9pbnQpIHtcbiAgICB2YXIgZGlzdGFuY2VGcm9tT3JpZ2luID0gcG9pbnQgLSBvcmlnaW5Qb2ludDtcbiAgICB2YXIgc2NhbGVkID0gc2NhbGUgKiBkaXN0YW5jZUZyb21PcmlnaW47XG4gICAgcmV0dXJuIG9yaWdpblBvaW50ICsgc2NhbGVkO1xufVxuLyoqXG4gKiBBcHBsaWVzIGEgdHJhbnNsYXRlL3NjYWxlIGRlbHRhIHRvIGEgcG9pbnRcbiAqL1xuZnVuY3Rpb24gYXBwbHlQb2ludERlbHRhKHBvaW50LCB0cmFuc2xhdGUsIHNjYWxlLCBvcmlnaW5Qb2ludCwgYm94U2NhbGUpIHtcbiAgICBpZiAoYm94U2NhbGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwb2ludCA9IHNjYWxlUG9pbnQocG9pbnQsIGJveFNjYWxlLCBvcmlnaW5Qb2ludCk7XG4gICAgfVxuICAgIHJldHVybiBzY2FsZVBvaW50KHBvaW50LCBzY2FsZSwgb3JpZ2luUG9pbnQpICsgdHJhbnNsYXRlO1xufVxuLyoqXG4gKiBBcHBsaWVzIGEgdHJhbnNsYXRlL3NjYWxlIGRlbHRhIHRvIGFuIGF4aXNcbiAqL1xuZnVuY3Rpb24gYXBwbHlBeGlzRGVsdGEoYXhpcywgdHJhbnNsYXRlLCBzY2FsZSwgb3JpZ2luUG9pbnQsIGJveFNjYWxlKSB7XG4gICAgaWYgKHRyYW5zbGF0ZSA9PT0gdm9pZCAwKSB7IHRyYW5zbGF0ZSA9IDA7IH1cbiAgICBpZiAoc2NhbGUgPT09IHZvaWQgMCkgeyBzY2FsZSA9IDE7IH1cbiAgICBheGlzLm1pbiA9IGFwcGx5UG9pbnREZWx0YShheGlzLm1pbiwgdHJhbnNsYXRlLCBzY2FsZSwgb3JpZ2luUG9pbnQsIGJveFNjYWxlKTtcbiAgICBheGlzLm1heCA9IGFwcGx5UG9pbnREZWx0YShheGlzLm1heCwgdHJhbnNsYXRlLCBzY2FsZSwgb3JpZ2luUG9pbnQsIGJveFNjYWxlKTtcbn1cbi8qKlxuICogQXBwbGllcyBhIHRyYW5zbGF0ZS9zY2FsZSBkZWx0YSB0byBhIGJveFxuICovXG5mdW5jdGlvbiBhcHBseUJveERlbHRhKGJveCwgX2EpIHtcbiAgICB2YXIgeCA9IF9hLngsIHkgPSBfYS55O1xuICAgIGFwcGx5QXhpc0RlbHRhKGJveC54LCB4LnRyYW5zbGF0ZSwgeC5zY2FsZSwgeC5vcmlnaW5Qb2ludCk7XG4gICAgYXBwbHlBeGlzRGVsdGEoYm94LnksIHkudHJhbnNsYXRlLCB5LnNjYWxlLCB5Lm9yaWdpblBvaW50KTtcbn1cbi8qKlxuICogQXBwbHkgYSB0cmVlIG9mIGRlbHRhcyB0byBhIGJveC4gV2UgZG8gdGhpcyB0byBjYWxjdWxhdGUgdGhlIGVmZmVjdCBvZiBhbGwgdGhlIHRyYW5zZm9ybXNcbiAqIGluIGEgdHJlZSB1cG9uIG91ciBib3ggYmVmb3JlIHRoZW4gY2FsY3VsYXRpbmcgaG93IHRvIHByb2plY3QgaXQgaW50byBvdXIgZGVzaXJlZCB2aWV3cG9ydC1yZWxhdGl2ZSBib3hcbiAqXG4gKiBUaGlzIGlzIHRoZSBmaW5hbCBuZXN0ZWQgbG9vcCB3aXRoaW4gdXBkYXRlTGF5b3V0RGVsdGEgZm9yIGZ1dHVyZSByZWZhY3RvcmluZ1xuICovXG5mdW5jdGlvbiBhcHBseVRyZWVEZWx0YXMoYm94LCB0cmVlU2NhbGUsIHRyZWVQYXRoLCBpc1NoYXJlZFRyYW5zaXRpb24pIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGlmIChpc1NoYXJlZFRyYW5zaXRpb24gPT09IHZvaWQgMCkgeyBpc1NoYXJlZFRyYW5zaXRpb24gPSBmYWxzZTsgfVxuICAgIHZhciB0cmVlTGVuZ3RoID0gdHJlZVBhdGgubGVuZ3RoO1xuICAgIGlmICghdHJlZUxlbmd0aClcbiAgICAgICAgcmV0dXJuO1xuICAgIC8vIFJlc2V0IHRoZSB0cmVlU2NhbGVcbiAgICB0cmVlU2NhbGUueCA9IHRyZWVTY2FsZS55ID0gMTtcbiAgICB2YXIgbm9kZTtcbiAgICB2YXIgZGVsdGE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmVlTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbm9kZSA9IHRyZWVQYXRoW2ldO1xuICAgICAgICBkZWx0YSA9IG5vZGUucHJvamVjdGlvbkRlbHRhO1xuICAgICAgICBpZiAoKChfYiA9IChfYSA9IG5vZGUuaW5zdGFuY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdHlsZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmRpc3BsYXkpID09PSBcImNvbnRlbnRzXCIpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKGlzU2hhcmVkVHJhbnNpdGlvbiAmJlxuICAgICAgICAgICAgbm9kZS5vcHRpb25zLmxheW91dFNjcm9sbCAmJlxuICAgICAgICAgICAgbm9kZS5zY3JvbGwgJiZcbiAgICAgICAgICAgIG5vZGUgIT09IG5vZGUucm9vdCkge1xuICAgICAgICAgICAgdHJhbnNmb3JtQm94KGJveCwgeyB4OiAtbm9kZS5zY3JvbGwueCwgeTogLW5vZGUuc2Nyb2xsLnkgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlbHRhKSB7XG4gICAgICAgICAgICAvLyBJbmNvcG9yYXRlIGVhY2ggYW5jZXN0b3IncyBzY2FsZSBpbnRvIGEgY3VsbXVsYXRpdmUgdHJlZVNjYWxlIGZvciB0aGlzIGNvbXBvbmVudFxuICAgICAgICAgICAgdHJlZVNjYWxlLnggKj0gZGVsdGEueC5zY2FsZTtcbiAgICAgICAgICAgIHRyZWVTY2FsZS55ICo9IGRlbHRhLnkuc2NhbGU7XG4gICAgICAgICAgICAvLyBBcHBseSBlYWNoIGFuY2VzdG9yJ3MgY2FsY3VsYXRlZCBkZWx0YSBpbnRvIHRoaXMgY29tcG9uZW50J3MgcmVjb3JkZWQgbGF5b3V0IGJveFxuICAgICAgICAgICAgYXBwbHlCb3hEZWx0YShib3gsIGRlbHRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTaGFyZWRUcmFuc2l0aW9uICYmIGhhc1RyYW5zZm9ybShub2RlLmxhdGVzdFZhbHVlcykpIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybUJveChib3gsIG5vZGUubGF0ZXN0VmFsdWVzKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHRyYW5zbGF0ZUF4aXMoYXhpcywgZGlzdGFuY2UpIHtcbiAgICBheGlzLm1pbiA9IGF4aXMubWluICsgZGlzdGFuY2U7XG4gICAgYXhpcy5tYXggPSBheGlzLm1heCArIGRpc3RhbmNlO1xufVxuLyoqXG4gKiBBcHBseSBhIHRyYW5zZm9ybSB0byBhbiBheGlzIGZyb20gdGhlIGxhdGVzdCByZXNvbHZlZCBtb3Rpb24gdmFsdWVzLlxuICogVGhpcyBmdW5jdGlvbiBiYXNpY2FsbHkgYWN0cyBhcyBhIGJyaWRnZSBiZXR3ZWVuIGEgZmxhdCBtb3Rpb24gdmFsdWUgbWFwXG4gKiBhbmQgYXBwbHlBeGlzRGVsdGFcbiAqL1xuZnVuY3Rpb24gdHJhbnNmb3JtQXhpcyhheGlzLCB0cmFuc2Zvcm1zLCBfYSkge1xuICAgIHZhciBfYiA9IF9fcmVhZChfYSwgMyksIGtleSA9IF9iWzBdLCBzY2FsZUtleSA9IF9iWzFdLCBvcmlnaW5LZXkgPSBfYlsyXTtcbiAgICB2YXIgYXhpc09yaWdpbiA9IHRyYW5zZm9ybXNbb3JpZ2luS2V5XSAhPT0gdW5kZWZpbmVkID8gdHJhbnNmb3Jtc1tvcmlnaW5LZXldIDogMC41O1xuICAgIHZhciBvcmlnaW5Qb2ludCA9IG1peChheGlzLm1pbiwgYXhpcy5tYXgsIGF4aXNPcmlnaW4pO1xuICAgIC8vIEFwcGx5IHRoZSBheGlzIGRlbHRhIHRvIHRoZSBmaW5hbCBheGlzXG4gICAgYXBwbHlBeGlzRGVsdGEoYXhpcywgdHJhbnNmb3Jtc1trZXldLCB0cmFuc2Zvcm1zW3NjYWxlS2V5XSwgb3JpZ2luUG9pbnQsIHRyYW5zZm9ybXMuc2NhbGUpO1xufVxuLyoqXG4gKiBUaGUgbmFtZXMgb2YgdGhlIG1vdGlvbiB2YWx1ZXMgd2Ugd2FudCB0byBhcHBseSBhcyB0cmFuc2xhdGlvbiwgc2NhbGUgYW5kIG9yaWdpbi5cbiAqL1xudmFyIHhLZXlzID0gW1wieFwiLCBcInNjYWxlWFwiLCBcIm9yaWdpblhcIl07XG52YXIgeUtleXMgPSBbXCJ5XCIsIFwic2NhbGVZXCIsIFwib3JpZ2luWVwiXTtcbi8qKlxuICogQXBwbHkgYSB0cmFuc2Zvcm0gdG8gYSBib3ggZnJvbSB0aGUgbGF0ZXN0IHJlc29sdmVkIG1vdGlvbiB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybUJveChib3gsIHRyYW5zZm9ybSkge1xuICAgIHRyYW5zZm9ybUF4aXMoYm94LngsIHRyYW5zZm9ybSwgeEtleXMpO1xuICAgIHRyYW5zZm9ybUF4aXMoYm94LnksIHRyYW5zZm9ybSwgeUtleXMpO1xufVxuXG5leHBvcnQgeyBhcHBseUF4aXNEZWx0YSwgYXBwbHlCb3hEZWx0YSwgYXBwbHlQb2ludERlbHRhLCBhcHBseVRyZWVEZWx0YXMsIHNjYWxlUG9pbnQsIHRyYW5zZm9ybUF4aXMsIHRyYW5zZm9ybUJveCwgdHJhbnNsYXRlQXhpcyB9O1xuIiwiaW1wb3J0IHsgY29udmVydEJvdW5kaW5nQm94VG9Cb3gsIHRyYW5zZm9ybUJveFBvaW50cyB9IGZyb20gJy4uL2dlb21ldHJ5L2NvbnZlcnNpb24ubWpzJztcbmltcG9ydCB7IHRyYW5zbGF0ZUF4aXMgfSBmcm9tICcuLi9nZW9tZXRyeS9kZWx0YS1hcHBseS5tanMnO1xuXG5mdW5jdGlvbiBtZWFzdXJlVmlld3BvcnRCb3goaW5zdGFuY2UsIHRyYW5zZm9ybVBvaW50KSB7XG4gICAgcmV0dXJuIGNvbnZlcnRCb3VuZGluZ0JveFRvQm94KHRyYW5zZm9ybUJveFBvaW50cyhpbnN0YW5jZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgdHJhbnNmb3JtUG9pbnQpKTtcbn1cbmZ1bmN0aW9uIG1lYXN1cmVQYWdlQm94KGVsZW1lbnQsIHJvb3RQcm9qZWN0aW9uTm9kZSwgdHJhbnNmb3JtUGFnZVBvaW50KSB7XG4gICAgdmFyIHZpZXdwb3J0Qm94ID0gbWVhc3VyZVZpZXdwb3J0Qm94KGVsZW1lbnQsIHRyYW5zZm9ybVBhZ2VQb2ludCk7XG4gICAgdmFyIHNjcm9sbCA9IHJvb3RQcm9qZWN0aW9uTm9kZS5zY3JvbGw7XG4gICAgaWYgKHNjcm9sbCkge1xuICAgICAgICB0cmFuc2xhdGVBeGlzKHZpZXdwb3J0Qm94LngsIHNjcm9sbC54KTtcbiAgICAgICAgdHJhbnNsYXRlQXhpcyh2aWV3cG9ydEJveC55LCBzY3JvbGwueSk7XG4gICAgfVxuICAgIHJldHVybiB2aWV3cG9ydEJveDtcbn1cblxuZXhwb3J0IHsgbWVhc3VyZVBhZ2VCb3gsIG1lYXN1cmVWaWV3cG9ydEJveCB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBpbnZhcmlhbnQgfSBmcm9tICdoZXktbGlzdGVuJztcbmltcG9ydCB7IFBhblNlc3Npb24gfSBmcm9tICcuLi9QYW5TZXNzaW9uLm1qcyc7XG5pbXBvcnQgeyBnZXRHbG9iYWxMb2NrIH0gZnJvbSAnLi91dGlscy9sb2NrLm1qcyc7XG5pbXBvcnQgeyBpc1JlZk9iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzL2lzLXJlZi1vYmplY3QubWpzJztcbmltcG9ydCB7IGFkZFBvaW50ZXJFdmVudCB9IGZyb20gJy4uLy4uL2V2ZW50cy91c2UtcG9pbnRlci1ldmVudC5tanMnO1xuaW1wb3J0IHsgYXBwbHlDb25zdHJhaW50cywgY2FsY1JlbGF0aXZlQ29uc3RyYWludHMsIHJlc29sdmVEcmFnRWxhc3RpYywgcmViYXNlQXhpc0NvbnN0cmFpbnRzLCBjYWxjVmlld3BvcnRDb25zdHJhaW50cywgY2FsY09yaWdpbiwgZGVmYXVsdEVsYXN0aWMgfSBmcm9tICcuL3V0aWxzL2NvbnN0cmFpbnRzLm1qcyc7XG5pbXBvcnQgeyBBbmltYXRpb25UeXBlIH0gZnJvbSAnLi4vLi4vcmVuZGVyL3V0aWxzL3R5cGVzLm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVCb3ggfSBmcm9tICcuLi8uLi9wcm9qZWN0aW9uL2dlb21ldHJ5L21vZGVscy5tanMnO1xuaW1wb3J0IHsgZWFjaEF4aXMgfSBmcm9tICcuLi8uLi9wcm9qZWN0aW9uL3V0aWxzL2VhY2gtYXhpcy5tanMnO1xuaW1wb3J0IHsgbWVhc3VyZVBhZ2VCb3ggfSBmcm9tICcuLi8uLi9wcm9qZWN0aW9uL3V0aWxzL21lYXN1cmUubWpzJztcbmltcG9ydCB7IGV4dHJhY3RFdmVudEluZm8gfSBmcm9tICcuLi8uLi9ldmVudHMvZXZlbnQtaW5mby5tanMnO1xuaW1wb3J0IHsgc3RhcnRBbmltYXRpb24gfSBmcm9tICcuLi8uLi9hbmltYXRpb24vdXRpbHMvdHJhbnNpdGlvbnMubWpzJztcbmltcG9ydCB7IGNvbnZlcnRCb3hUb0JvdW5kaW5nQm94LCBjb252ZXJ0Qm91bmRpbmdCb3hUb0JveCB9IGZyb20gJy4uLy4uL3Byb2plY3Rpb24vZ2VvbWV0cnkvY29udmVyc2lvbi5tanMnO1xuaW1wb3J0IHsgYWRkRG9tRXZlbnQgfSBmcm9tICcuLi8uLi9ldmVudHMvdXNlLWRvbS1ldmVudC5tanMnO1xuaW1wb3J0IHsgbWl4IH0gZnJvbSAncG9wbW90aW9uJztcbmltcG9ydCB7IHBlcmNlbnQgfSBmcm9tICdzdHlsZS12YWx1ZS10eXBlcyc7XG5pbXBvcnQgeyBjYWxjTGVuZ3RoIH0gZnJvbSAnLi4vLi4vcHJvamVjdGlvbi9nZW9tZXRyeS9kZWx0YS1jYWxjLm1qcyc7XG5cbnZhciBlbGVtZW50RHJhZ0NvbnRyb2xzID0gbmV3IFdlYWtNYXAoKTtcbi8qKlxuICpcbiAqL1xuLy8gbGV0IGxhdGVzdFBvaW50ZXJFdmVudDogQW55UG9pbnRlckV2ZW50XG52YXIgVmlzdWFsRWxlbWVudERyYWdDb250cm9scyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzKHZpc3VhbEVsZW1lbnQpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIGRyYWcgZ2VzdHVyZSBsb2NrLCBlbnN1cmluZyBvbmx5IG9uZSBjb21wb25lbnRcbiAgICAgICAgLy8gY2FuIFwiY2FwdHVyZVwiIHRoZSBkcmFnIG9mIG9uZSBvciBib3RoIGF4ZXMuXG4gICAgICAgIC8vIFRPRE86IExvb2sgaW50byBtb3ZpbmcgdGhpcyBpbnRvIHBhbnNlc3Npb24/XG4gICAgICAgIHRoaXMub3Blbkdsb2JhbExvY2sgPSBudWxsO1xuICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jdXJyZW50RGlyZWN0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5vcmlnaW5Qb2ludCA9IHsgeDogMCwgeTogMCB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIHBlcm1pdHRlZCBib3VuZGFyaWVzIG9mIHRyYXZlbCwgaW4gcGl4ZWxzLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb25zdHJhaW50cyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhhc011dGF0ZWRDb25zdHJhaW50cyA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIHBlci1heGlzIHJlc29sdmVkIGVsYXN0aWMgdmFsdWVzLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5lbGFzdGljID0gY3JlYXRlQm94KCk7XG4gICAgICAgIHRoaXMudmlzdWFsRWxlbWVudCA9IHZpc3VhbEVsZW1lbnQ7XG4gICAgfVxuICAgIFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHMucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKG9yaWdpbkV2ZW50LCBfYSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgX2IgPSBfYSA9PT0gdm9pZCAwID8ge30gOiBfYSwgX2MgPSBfYi5zbmFwVG9DdXJzb3IsIHNuYXBUb0N1cnNvciA9IF9jID09PSB2b2lkIDAgPyBmYWxzZSA6IF9jO1xuICAgICAgICAvKipcbiAgICAgICAgICogRG9uJ3Qgc3RhcnQgZHJhZ2dpbmcgaWYgdGhpcyBjb21wb25lbnQgaXMgZXhpdGluZ1xuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHRoaXMudmlzdWFsRWxlbWVudC5pc1ByZXNlbnQgPT09IGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgb25TZXNzaW9uU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIC8vIFN0b3AgYW55IGFuaW1hdGlvbnMgb24gYm90aCBheGlzIHZhbHVlcyBpbW1lZGlhdGVseS4gVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gdGhyb3cgYW5kIGNhdGNoXG4gICAgICAgICAgICAvLyB0aGUgY29tcG9uZW50LlxuICAgICAgICAgICAgX3RoaXMuc3RvcEFuaW1hdGlvbigpO1xuICAgICAgICAgICAgaWYgKHNuYXBUb0N1cnNvcikge1xuICAgICAgICAgICAgICAgIF90aGlzLnNuYXBUb0N1cnNvcihleHRyYWN0RXZlbnRJbmZvKGV2ZW50LCBcInBhZ2VcIikucG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgb25TdGFydCA9IGZ1bmN0aW9uIChldmVudCwgaW5mbykge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBncmFiIHRoZSBnbG9iYWwgZHJhZyBnZXN0dXJlIGxvY2sgLSBtYXliZSBtYWtlIHRoaXMgcGFydCBvZiBQYW5TZXNzaW9uXG4gICAgICAgICAgICB2YXIgX2IgPSBfdGhpcy5nZXRQcm9wcygpLCBkcmFnID0gX2IuZHJhZywgZHJhZ1Byb3BhZ2F0aW9uID0gX2IuZHJhZ1Byb3BhZ2F0aW9uLCBvbkRyYWdTdGFydCA9IF9iLm9uRHJhZ1N0YXJ0O1xuICAgICAgICAgICAgaWYgKGRyYWcgJiYgIWRyYWdQcm9wYWdhdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5vcGVuR2xvYmFsTG9jaylcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMub3Blbkdsb2JhbExvY2soKTtcbiAgICAgICAgICAgICAgICBfdGhpcy5vcGVuR2xvYmFsTG9jayA9IGdldEdsb2JhbExvY2soZHJhZyk7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgZG9uICd0IGhhdmUgdGhlIGxvY2ssIGRvbid0IHN0YXJ0IGRyYWdnaW5nXG4gICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5vcGVuR2xvYmFsTG9jaylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMuaXNEcmFnZ2luZyA9IHRydWU7XG4gICAgICAgICAgICBfdGhpcy5jdXJyZW50RGlyZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIF90aGlzLnJlc29sdmVDb25zdHJhaW50cygpO1xuICAgICAgICAgICAgaWYgKF90aGlzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbikge1xuICAgICAgICAgICAgICAgIF90aGlzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbi5pc0FuaW1hdGlvbkJsb2NrZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIF90aGlzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbi50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFJlY29yZCBnZXN0dXJlIG9yaWdpblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBlYWNoQXhpcyhmdW5jdGlvbiAoYXhpcykge1xuICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBfdGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoYXhpcykuZ2V0KCkgfHwgMDtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBJZiB0aGUgTW90aW9uVmFsdWUgaXMgYSBwZXJjZW50YWdlIHZhbHVlIGNvbnZlcnQgdG8gcHhcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBpZiAocGVyY2VudC50ZXN0KGN1cnJlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtZWFzdXJlZEF4aXMgPSAoX2IgPSAoX2EgPSBfdGhpcy52aXN1YWxFbGVtZW50LnByb2plY3Rpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sYXlvdXQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5hY3R1YWxbYXhpc107XG4gICAgICAgICAgICAgICAgICAgIGlmIChtZWFzdXJlZEF4aXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGhfMSA9IGNhbGNMZW5ndGgobWVhc3VyZWRBeGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBsZW5ndGhfMSAqIChwYXJzZUZsb2F0KGN1cnJlbnQpIC8gMTAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfdGhpcy5vcmlnaW5Qb2ludFtheGlzXSA9IGN1cnJlbnQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIEZpcmUgb25EcmFnU3RhcnQgZXZlbnRcbiAgICAgICAgICAgIG9uRHJhZ1N0YXJ0ID09PSBudWxsIHx8IG9uRHJhZ1N0YXJ0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkRyYWdTdGFydChldmVudCwgaW5mbyk7XG4gICAgICAgICAgICAoX2EgPSBfdGhpcy52aXN1YWxFbGVtZW50LmFuaW1hdGlvblN0YXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2V0QWN0aXZlKEFuaW1hdGlvblR5cGUuRHJhZywgdHJ1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvbk1vdmUgPSBmdW5jdGlvbiAoZXZlbnQsIGluZm8pIHtcbiAgICAgICAgICAgIC8vIGxhdGVzdFBvaW50ZXJFdmVudCA9IGV2ZW50XG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcy5nZXRQcm9wcygpLCBkcmFnUHJvcGFnYXRpb24gPSBfYS5kcmFnUHJvcGFnYXRpb24sIGRyYWdEaXJlY3Rpb25Mb2NrID0gX2EuZHJhZ0RpcmVjdGlvbkxvY2ssIG9uRGlyZWN0aW9uTG9jayA9IF9hLm9uRGlyZWN0aW9uTG9jaywgb25EcmFnID0gX2Eub25EcmFnO1xuICAgICAgICAgICAgLy8gSWYgd2UgZGlkbid0IHN1Y2Nlc3NmdWxseSByZWNlaXZlIHRoZSBnZXN0dXJlIGxvY2ssIGVhcmx5IHJldHVybi5cbiAgICAgICAgICAgIGlmICghZHJhZ1Byb3BhZ2F0aW9uICYmICFfdGhpcy5vcGVuR2xvYmFsTG9jaylcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gaW5mby5vZmZzZXQ7XG4gICAgICAgICAgICAvLyBBdHRlbXB0IHRvIGRldGVjdCBkcmFnIGRpcmVjdGlvbiBpZiBkaXJlY3Rpb25Mb2NrIGlzIHRydWVcbiAgICAgICAgICAgIGlmIChkcmFnRGlyZWN0aW9uTG9jayAmJiBfdGhpcy5jdXJyZW50RGlyZWN0aW9uID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudERpcmVjdGlvbiA9IGdldEN1cnJlbnREaXJlY3Rpb24ob2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSd2ZSBzdWNjZXNzZnVsbHkgc2V0IGEgZGlyZWN0aW9uLCBub3RpZnkgbGlzdGVuZXJcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMuY3VycmVudERpcmVjdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBvbkRpcmVjdGlvbkxvY2sgPT09IG51bGwgfHwgb25EaXJlY3Rpb25Mb2NrID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkRpcmVjdGlvbkxvY2soX3RoaXMuY3VycmVudERpcmVjdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFVwZGF0ZSBlYWNoIHBvaW50IHdpdGggdGhlIGxhdGVzdCBwb3NpdGlvblxuICAgICAgICAgICAgX3RoaXMudXBkYXRlQXhpcyhcInhcIiwgaW5mby5wb2ludCwgb2Zmc2V0KTtcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZUF4aXMoXCJ5XCIsIGluZm8ucG9pbnQsIG9mZnNldCk7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElkZWFsbHkgd2Ugd291bGQgbGVhdmUgdGhlIHJlbmRlcmVyIHRvIGZpcmUgbmF0dXJhbGx5IGF0IHRoZSBlbmQgb2ZcbiAgICAgICAgICAgICAqIHRoaXMgZnJhbWUgYnV0IGlmIHRoZSBlbGVtZW50IGlzIGFib3V0IHRvIGNoYW5nZSBsYXlvdXQgYXMgdGhlIHJlc3VsdFxuICAgICAgICAgICAgICogb2YgYSByZS1yZW5kZXIgd2Ugd2FudCB0byBlbnN1cmUgdGhlIGJyb3dzZXIgY2FuIHJlYWQgdGhlIGxhdGVzdFxuICAgICAgICAgICAgICogYm91bmRpbmcgYm94IHRvIGVuc3VyZSB0aGUgcG9pbnRlciBhbmQgZWxlbWVudCBkb24ndCBmYWxsIG91dCBvZiBzeW5jLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBfdGhpcy52aXN1YWxFbGVtZW50LnN5bmNSZW5kZXIoKTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhpcyBtdXN0IGZpcmUgYWZ0ZXIgdGhlIHN5bmNSZW5kZXIgY2FsbCBhcyBpdCBtaWdodCB0cmlnZ2VyIGEgc3RhdGVcbiAgICAgICAgICAgICAqIGNoYW5nZSB3aGljaCBpdHNlbGYgbWlnaHQgdHJpZ2dlciBhIGxheW91dCB1cGRhdGUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIG9uRHJhZyA9PT0gbnVsbCB8fCBvbkRyYWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRHJhZyhldmVudCwgaW5mbyk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvblNlc3Npb25FbmQgPSBmdW5jdGlvbiAoZXZlbnQsIGluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5zdG9wKGV2ZW50LCBpbmZvKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5wYW5TZXNzaW9uID0gbmV3IFBhblNlc3Npb24ob3JpZ2luRXZlbnQsIHtcbiAgICAgICAgICAgIG9uU2Vzc2lvblN0YXJ0OiBvblNlc3Npb25TdGFydCxcbiAgICAgICAgICAgIG9uU3RhcnQ6IG9uU3RhcnQsXG4gICAgICAgICAgICBvbk1vdmU6IG9uTW92ZSxcbiAgICAgICAgICAgIG9uU2Vzc2lvbkVuZDogb25TZXNzaW9uRW5kLFxuICAgICAgICB9LCB7IHRyYW5zZm9ybVBhZ2VQb2ludDogdGhpcy52aXN1YWxFbGVtZW50LmdldFRyYW5zZm9ybVBhZ2VQb2ludCgpIH0pO1xuICAgIH07XG4gICAgVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uIChldmVudCwgaW5mbykge1xuICAgICAgICB2YXIgaXNEcmFnZ2luZyA9IHRoaXMuaXNEcmFnZ2luZztcbiAgICAgICAgdGhpcy5jYW5jZWwoKTtcbiAgICAgICAgaWYgKCFpc0RyYWdnaW5nKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgdmVsb2NpdHkgPSBpbmZvLnZlbG9jaXR5O1xuICAgICAgICB0aGlzLnN0YXJ0QW5pbWF0aW9uKHZlbG9jaXR5KTtcbiAgICAgICAgdmFyIG9uRHJhZ0VuZCA9IHRoaXMuZ2V0UHJvcHMoKS5vbkRyYWdFbmQ7XG4gICAgICAgIG9uRHJhZ0VuZCA9PT0gbnVsbCB8fCBvbkRyYWdFbmQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRHJhZ0VuZChldmVudCwgaW5mbyk7XG4gICAgfTtcbiAgICBWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzLnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy52aXN1YWxFbGVtZW50LnByb2plY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMudmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uLmlzQW5pbWF0aW9uQmxvY2tlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIChfYSA9IHRoaXMucGFuU2Vzc2lvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVuZCgpO1xuICAgICAgICB0aGlzLnBhblNlc3Npb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBkcmFnUHJvcGFnYXRpb24gPSB0aGlzLmdldFByb3BzKCkuZHJhZ1Byb3BhZ2F0aW9uO1xuICAgICAgICBpZiAoIWRyYWdQcm9wYWdhdGlvbiAmJiB0aGlzLm9wZW5HbG9iYWxMb2NrKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5HbG9iYWxMb2NrKCk7XG4gICAgICAgICAgICB0aGlzLm9wZW5HbG9iYWxMb2NrID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAoX2IgPSB0aGlzLnZpc3VhbEVsZW1lbnQuYW5pbWF0aW9uU3RhdGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zZXRBY3RpdmUoQW5pbWF0aW9uVHlwZS5EcmFnLCBmYWxzZSk7XG4gICAgfTtcbiAgICBWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzLnByb3RvdHlwZS51cGRhdGVBeGlzID0gZnVuY3Rpb24gKGF4aXMsIF9wb2ludCwgb2Zmc2V0KSB7XG4gICAgICAgIHZhciBkcmFnID0gdGhpcy5nZXRQcm9wcygpLmRyYWc7XG4gICAgICAgIC8vIElmIHdlJ3JlIG5vdCBkcmFnZ2luZyB0aGlzIGF4aXMsIGRvIGFuIGVhcmx5IHJldHVybi5cbiAgICAgICAgaWYgKCFvZmZzZXQgfHwgIXNob3VsZERyYWcoYXhpcywgZHJhZywgdGhpcy5jdXJyZW50RGlyZWN0aW9uKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGF4aXNWYWx1ZSA9IHRoaXMuZ2V0QXhpc01vdGlvblZhbHVlKGF4aXMpO1xuICAgICAgICB2YXIgbmV4dCA9IHRoaXMub3JpZ2luUG9pbnRbYXhpc10gKyBvZmZzZXRbYXhpc107XG4gICAgICAgIC8vIEFwcGx5IGNvbnN0cmFpbnRzXG4gICAgICAgIGlmICh0aGlzLmNvbnN0cmFpbnRzICYmIHRoaXMuY29uc3RyYWludHNbYXhpc10pIHtcbiAgICAgICAgICAgIG5leHQgPSBhcHBseUNvbnN0cmFpbnRzKG5leHQsIHRoaXMuY29uc3RyYWludHNbYXhpc10sIHRoaXMuZWxhc3RpY1theGlzXSk7XG4gICAgICAgIH1cbiAgICAgICAgYXhpc1ZhbHVlLnNldChuZXh0KTtcbiAgICB9O1xuICAgIFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHMucHJvdG90eXBlLnJlc29sdmVDb25zdHJhaW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcy5nZXRQcm9wcygpLCBkcmFnQ29uc3RyYWludHMgPSBfYS5kcmFnQ29uc3RyYWludHMsIGRyYWdFbGFzdGljID0gX2EuZHJhZ0VsYXN0aWM7XG4gICAgICAgIHZhciBsYXlvdXQgPSAodGhpcy52aXN1YWxFbGVtZW50LnByb2plY3Rpb24gfHwge30pLmxheW91dDtcbiAgICAgICAgdmFyIHByZXZDb25zdHJhaW50cyA9IHRoaXMuY29uc3RyYWludHM7XG4gICAgICAgIGlmIChkcmFnQ29uc3RyYWludHMgJiYgaXNSZWZPYmplY3QoZHJhZ0NvbnN0cmFpbnRzKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnN0cmFpbnRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25zdHJhaW50cyA9IHRoaXMucmVzb2x2ZVJlZkNvbnN0cmFpbnRzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZHJhZ0NvbnN0cmFpbnRzICYmIGxheW91dCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uc3RyYWludHMgPSBjYWxjUmVsYXRpdmVDb25zdHJhaW50cyhsYXlvdXQuYWN0dWFsLCBkcmFnQ29uc3RyYWludHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25zdHJhaW50cyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWxhc3RpYyA9IHJlc29sdmVEcmFnRWxhc3RpYyhkcmFnRWxhc3RpYyk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiB3ZSdyZSBvdXRwdXR0aW5nIHRvIGV4dGVybmFsIE1vdGlvblZhbHVlcywgd2Ugd2FudCB0byByZWJhc2UgdGhlIG1lYXN1cmVkIGNvbnN0cmFpbnRzXG4gICAgICAgICAqIGZyb20gdmlld3BvcnQtcmVsYXRpdmUgdG8gY29tcG9uZW50LXJlbGF0aXZlLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHByZXZDb25zdHJhaW50cyAhPT0gdGhpcy5jb25zdHJhaW50cyAmJlxuICAgICAgICAgICAgbGF5b3V0ICYmXG4gICAgICAgICAgICB0aGlzLmNvbnN0cmFpbnRzICYmXG4gICAgICAgICAgICAhdGhpcy5oYXNNdXRhdGVkQ29uc3RyYWludHMpIHtcbiAgICAgICAgICAgIGVhY2hBeGlzKGZ1bmN0aW9uIChheGlzKSB7XG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLmdldEF4aXNNb3Rpb25WYWx1ZShheGlzKSkge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jb25zdHJhaW50c1theGlzXSA9IHJlYmFzZUF4aXNDb25zdHJhaW50cyhsYXlvdXQuYWN0dWFsW2F4aXNdLCBfdGhpcy5jb25zdHJhaW50c1theGlzXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHMucHJvdG90eXBlLnJlc29sdmVSZWZDb25zdHJhaW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcy5nZXRQcm9wcygpLCBjb25zdHJhaW50cyA9IF9hLmRyYWdDb25zdHJhaW50cywgb25NZWFzdXJlRHJhZ0NvbnN0cmFpbnRzID0gX2Eub25NZWFzdXJlRHJhZ0NvbnN0cmFpbnRzO1xuICAgICAgICBpZiAoIWNvbnN0cmFpbnRzIHx8ICFpc1JlZk9iamVjdChjb25zdHJhaW50cykpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBjb25zdHJhaW50c0VsZW1lbnQgPSBjb25zdHJhaW50cy5jdXJyZW50O1xuICAgICAgICBpbnZhcmlhbnQoY29uc3RyYWludHNFbGVtZW50ICE9PSBudWxsLCBcIklmIGBkcmFnQ29uc3RyYWludHNgIGlzIHNldCBhcyBhIFJlYWN0IHJlZiwgdGhhdCByZWYgbXVzdCBiZSBwYXNzZWQgdG8gYW5vdGhlciBjb21wb25lbnQncyBgcmVmYCBwcm9wLlwiKTtcbiAgICAgICAgdmFyIHByb2plY3Rpb24gPSB0aGlzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbjtcbiAgICAgICAgLy8gVE9ET1xuICAgICAgICBpZiAoIXByb2plY3Rpb24gfHwgIXByb2plY3Rpb24ubGF5b3V0KVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgY29uc3RyYWludHNCb3ggPSBtZWFzdXJlUGFnZUJveChjb25zdHJhaW50c0VsZW1lbnQsIHByb2plY3Rpb24ucm9vdCwgdGhpcy52aXN1YWxFbGVtZW50LmdldFRyYW5zZm9ybVBhZ2VQb2ludCgpKTtcbiAgICAgICAgdmFyIG1lYXN1cmVkQ29uc3RyYWludHMgPSBjYWxjVmlld3BvcnRDb25zdHJhaW50cyhwcm9qZWN0aW9uLmxheW91dC5hY3R1YWwsIGNvbnN0cmFpbnRzQm94KTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHRoZXJlJ3MgYW4gb25NZWFzdXJlRHJhZ0NvbnN0cmFpbnRzIGxpc3RlbmVyIHdlIGNhbGwgaXQgYW5kXG4gICAgICAgICAqIGlmIGRpZmZlcmVudCBjb25zdHJhaW50cyBhcmUgcmV0dXJuZWQsIHNldCBjb25zdHJhaW50cyB0byB0aGF0XG4gICAgICAgICAqL1xuICAgICAgICBpZiAob25NZWFzdXJlRHJhZ0NvbnN0cmFpbnRzKSB7XG4gICAgICAgICAgICB2YXIgdXNlckNvbnN0cmFpbnRzID0gb25NZWFzdXJlRHJhZ0NvbnN0cmFpbnRzKGNvbnZlcnRCb3hUb0JvdW5kaW5nQm94KG1lYXN1cmVkQ29uc3RyYWludHMpKTtcbiAgICAgICAgICAgIHRoaXMuaGFzTXV0YXRlZENvbnN0cmFpbnRzID0gISF1c2VyQ29uc3RyYWludHM7XG4gICAgICAgICAgICBpZiAodXNlckNvbnN0cmFpbnRzKSB7XG4gICAgICAgICAgICAgICAgbWVhc3VyZWRDb25zdHJhaW50cyA9IGNvbnZlcnRCb3VuZGluZ0JveFRvQm94KHVzZXJDb25zdHJhaW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lYXN1cmVkQ29uc3RyYWludHM7XG4gICAgfTtcbiAgICBWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzLnByb3RvdHlwZS5zdGFydEFuaW1hdGlvbiA9IGZ1bmN0aW9uICh2ZWxvY2l0eSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLmdldFByb3BzKCksIGRyYWcgPSBfYS5kcmFnLCBkcmFnTW9tZW50dW0gPSBfYS5kcmFnTW9tZW50dW0sIGRyYWdFbGFzdGljID0gX2EuZHJhZ0VsYXN0aWMsIGRyYWdUcmFuc2l0aW9uID0gX2EuZHJhZ1RyYW5zaXRpb24sIGRyYWdTbmFwVG9PcmlnaW4gPSBfYS5kcmFnU25hcFRvT3JpZ2luLCBvbkRyYWdUcmFuc2l0aW9uRW5kID0gX2Eub25EcmFnVHJhbnNpdGlvbkVuZDtcbiAgICAgICAgdmFyIGNvbnN0cmFpbnRzID0gdGhpcy5jb25zdHJhaW50cyB8fCB7fTtcbiAgICAgICAgdmFyIG1vbWVudHVtQW5pbWF0aW9ucyA9IGVhY2hBeGlzKGZ1bmN0aW9uIChheGlzKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAoIXNob3VsZERyYWcoYXhpcywgZHJhZywgX3RoaXMuY3VycmVudERpcmVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdHJhbnNpdGlvbiA9IChfYSA9IGNvbnN0cmFpbnRzID09PSBudWxsIHx8IGNvbnN0cmFpbnRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25zdHJhaW50c1theGlzXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge307XG4gICAgICAgICAgICBpZiAoZHJhZ1NuYXBUb09yaWdpbilcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uID0geyBtaW46IDAsIG1heDogMCB9O1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBPdmVyZGFtcCB0aGUgYm91bmRhcnkgc3ByaW5nIGlmIGBkcmFnRWxhc3RpY2AgaXMgZGlzYWJsZWQuIFRoZXJlJ3Mgc3RpbGwgYSBmcmFtZVxuICAgICAgICAgICAgICogb2Ygc3ByaW5nIGFuaW1hdGlvbnMgc28gd2Ugc2hvdWxkIGxvb2sgaW50byBhZGRpbmcgYSBkaXNhYmxlIHNwcmluZyBvcHRpb24gdG8gYGluZXJ0aWFgLlxuICAgICAgICAgICAgICogV2UgY291bGQgZG8gc29tZXRoaW5nIGhlcmUgd2hlcmUgd2UgYWZmZWN0IHRoZSBgYm91bmNlU3RpZmZuZXNzYCBhbmQgYGJvdW5jZURhbXBpbmdgXG4gICAgICAgICAgICAgKiB1c2luZyB0aGUgdmFsdWUgb2YgYGRyYWdFbGFzdGljYC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdmFyIGJvdW5jZVN0aWZmbmVzcyA9IGRyYWdFbGFzdGljID8gMjAwIDogMTAwMDAwMDtcbiAgICAgICAgICAgIHZhciBib3VuY2VEYW1waW5nID0gZHJhZ0VsYXN0aWMgPyA0MCA6IDEwMDAwMDAwO1xuICAgICAgICAgICAgdmFyIGluZXJ0aWEgPSBfX2Fzc2lnbihfX2Fzc2lnbih7IHR5cGU6IFwiaW5lcnRpYVwiLCB2ZWxvY2l0eTogZHJhZ01vbWVudHVtID8gdmVsb2NpdHlbYXhpc10gOiAwLCBib3VuY2VTdGlmZm5lc3M6IGJvdW5jZVN0aWZmbmVzcywgYm91bmNlRGFtcGluZzogYm91bmNlRGFtcGluZywgdGltZUNvbnN0YW50OiA3NTAsIHJlc3REZWx0YTogMSwgcmVzdFNwZWVkOiAxMCB9LCBkcmFnVHJhbnNpdGlvbiksIHRyYW5zaXRpb24pO1xuICAgICAgICAgICAgLy8gSWYgd2UncmUgbm90IGFuaW1hdGluZyBvbiBhbiBleHRlcm5hbGx5LXByb3ZpZGVkIGBNb3Rpb25WYWx1ZWAgd2UgY2FuIHVzZSB0aGVcbiAgICAgICAgICAgIC8vIGNvbXBvbmVudCdzIGFuaW1hdGlvbiBjb250cm9scyB3aGljaCB3aWxsIGhhbmRsZSBpbnRlcmFjdGlvbnMgd2l0aCB3aGlsZUhvdmVyIChldGMpLFxuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHdlIGp1c3QgaGF2ZSB0byBhbmltYXRlIHRoZSBgTW90aW9uVmFsdWVgIGl0c2VsZi5cbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5zdGFydEF4aXNWYWx1ZUFuaW1hdGlvbihheGlzLCBpbmVydGlhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFJ1biBhbGwgYW5pbWF0aW9ucyBhbmQgdGhlbiByZXNvbHZlIHRoZSBuZXcgZHJhZyBjb25zdHJhaW50cy5cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKG1vbWVudHVtQW5pbWF0aW9ucykudGhlbihvbkRyYWdUcmFuc2l0aW9uRW5kKTtcbiAgICB9O1xuICAgIFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHMucHJvdG90eXBlLnN0YXJ0QXhpc1ZhbHVlQW5pbWF0aW9uID0gZnVuY3Rpb24gKGF4aXMsIHRyYW5zaXRpb24pIHtcbiAgICAgICAgdmFyIGF4aXNWYWx1ZSA9IHRoaXMuZ2V0QXhpc01vdGlvblZhbHVlKGF4aXMpO1xuICAgICAgICByZXR1cm4gc3RhcnRBbmltYXRpb24oYXhpcywgYXhpc1ZhbHVlLCAwLCB0cmFuc2l0aW9uKTtcbiAgICB9O1xuICAgIFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHMucHJvdG90eXBlLnN0b3BBbmltYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVhY2hBeGlzKGZ1bmN0aW9uIChheGlzKSB7IHJldHVybiBfdGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoYXhpcykuc3RvcCgpOyB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIERyYWcgd29ya3MgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHdoaWNoIHByb3BzIGFyZSBwcm92aWRlZC5cbiAgICAgKlxuICAgICAqIC0gSWYgX2RyYWdYIGFuZCBfZHJhZ1kgYXJlIHByb3ZpZGVkLCB3ZSBvdXRwdXQgdGhlIGdlc3R1cmUgZGVsdGEgZGlyZWN0bHkgdG8gdGhvc2UgbW90aW9uIHZhbHVlcy5cbiAgICAgKiAtIE90aGVyd2lzZSwgd2UgYXBwbHkgdGhlIGRlbHRhIHRvIHRoZSB4L3kgbW90aW9uIHZhbHVlcy5cbiAgICAgKi9cbiAgICBWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzLnByb3RvdHlwZS5nZXRBeGlzTW90aW9uVmFsdWUgPSBmdW5jdGlvbiAoYXhpcykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICB2YXIgZHJhZ0tleSA9IFwiX2RyYWdcIiArIGF4aXMudG9VcHBlckNhc2UoKTtcbiAgICAgICAgdmFyIGV4dGVybmFsTW90aW9uVmFsdWUgPSB0aGlzLnZpc3VhbEVsZW1lbnQuZ2V0UHJvcHMoKVtkcmFnS2V5XTtcbiAgICAgICAgcmV0dXJuIGV4dGVybmFsTW90aW9uVmFsdWVcbiAgICAgICAgICAgID8gZXh0ZXJuYWxNb3Rpb25WYWx1ZVxuICAgICAgICAgICAgOiB0aGlzLnZpc3VhbEVsZW1lbnQuZ2V0VmFsdWUoYXhpcywgKF9iID0gKF9hID0gdGhpcy52aXN1YWxFbGVtZW50LmdldFByb3BzKCkuaW5pdGlhbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW2F4aXNdKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAwKTtcbiAgICB9O1xuICAgIFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHMucHJvdG90eXBlLnNuYXBUb0N1cnNvciA9IGZ1bmN0aW9uIChwb2ludCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlYWNoQXhpcyhmdW5jdGlvbiAoYXhpcykge1xuICAgICAgICAgICAgdmFyIGRyYWcgPSBfdGhpcy5nZXRQcm9wcygpLmRyYWc7XG4gICAgICAgICAgICAvLyBJZiB3ZSdyZSBub3QgZHJhZ2dpbmcgdGhpcyBheGlzLCBkbyBhbiBlYXJseSByZXR1cm4uXG4gICAgICAgICAgICBpZiAoIXNob3VsZERyYWcoYXhpcywgZHJhZywgX3RoaXMuY3VycmVudERpcmVjdGlvbikpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIHByb2plY3Rpb24gPSBfdGhpcy52aXN1YWxFbGVtZW50LnByb2plY3Rpb247XG4gICAgICAgICAgICB2YXIgYXhpc1ZhbHVlID0gX3RoaXMuZ2V0QXhpc01vdGlvblZhbHVlKGF4aXMpO1xuICAgICAgICAgICAgaWYgKHByb2plY3Rpb24gJiYgcHJvamVjdGlvbi5sYXlvdXQpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2EgPSBwcm9qZWN0aW9uLmxheW91dC5hY3R1YWxbYXhpc10sIG1pbiA9IF9hLm1pbiwgbWF4ID0gX2EubWF4O1xuICAgICAgICAgICAgICAgIGF4aXNWYWx1ZS5zZXQocG9pbnRbYXhpc10gLSBtaXgobWluLCBtYXgsIDAuNSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFdoZW4gdGhlIHZpZXdwb3J0IHJlc2l6ZXMgd2Ugd2FudCB0byBjaGVjayBpZiB0aGUgbWVhc3VyZWQgY29uc3RyYWludHNcbiAgICAgKiBoYXZlIGNoYW5nZWQgYW5kLCBpZiBzbywgcmVwb3NpdGlvbiB0aGUgZWxlbWVudCB3aXRoaW4gdGhvc2UgbmV3IGNvbnN0cmFpbnRzXG4gICAgICogcmVsYXRpdmUgdG8gd2hlcmUgaXQgd2FzIGJlZm9yZSB0aGUgcmVzaXplLlxuICAgICAqL1xuICAgIFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHMucHJvdG90eXBlLnNjYWxlUG9zaXRpb25XaXRoaW5Db25zdHJhaW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgX2IgPSB0aGlzLmdldFByb3BzKCksIGRyYWcgPSBfYi5kcmFnLCBkcmFnQ29uc3RyYWludHMgPSBfYi5kcmFnQ29uc3RyYWludHM7XG4gICAgICAgIHZhciBwcm9qZWN0aW9uID0gdGhpcy52aXN1YWxFbGVtZW50LnByb2plY3Rpb247XG4gICAgICAgIGlmICghaXNSZWZPYmplY3QoZHJhZ0NvbnN0cmFpbnRzKSB8fCAhcHJvamVjdGlvbiB8fCAhdGhpcy5jb25zdHJhaW50cylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN0b3AgY3VycmVudCBhbmltYXRpb25zIGFzIHRoZXJlIGNhbiBiZSB2aXN1YWwgZ2xpdGNoaW5nIGlmIHdlIHRyeSB0byBkb1xuICAgICAgICAgKiB0aGlzIG1pZC1hbmltYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc3RvcEFuaW1hdGlvbigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogUmVjb3JkIHRoZSByZWxhdGl2ZSBwb3NpdGlvbiBvZiB0aGUgZHJhZ2dlZCBlbGVtZW50IHJlbGF0aXZlIHRvIHRoZVxuICAgICAgICAgKiBjb25zdHJhaW50cyBib3ggYW5kIHNhdmUgYXMgYSBwcm9ncmVzcyB2YWx1ZS5cbiAgICAgICAgICovXG4gICAgICAgIHZhciBib3hQcm9ncmVzcyA9IHsgeDogMCwgeTogMCB9O1xuICAgICAgICBlYWNoQXhpcyhmdW5jdGlvbiAoYXhpcykge1xuICAgICAgICAgICAgdmFyIGF4aXNWYWx1ZSA9IF90aGlzLmdldEF4aXNNb3Rpb25WYWx1ZShheGlzKTtcbiAgICAgICAgICAgIGlmIChheGlzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGF0ZXN0ID0gYXhpc1ZhbHVlLmdldCgpO1xuICAgICAgICAgICAgICAgIGJveFByb2dyZXNzW2F4aXNdID0gY2FsY09yaWdpbih7IG1pbjogbGF0ZXN0LCBtYXg6IGxhdGVzdCB9LCBfdGhpcy5jb25zdHJhaW50c1theGlzXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvKipcbiAgICAgICAgICogVXBkYXRlIHRoZSBsYXlvdXQgb2YgdGhpcyBlbGVtZW50IGFuZCByZXNvbHZlIHRoZSBsYXRlc3QgZHJhZyBjb25zdHJhaW50c1xuICAgICAgICAgKi9cbiAgICAgICAgdmFyIHRyYW5zZm9ybVRlbXBsYXRlID0gdGhpcy52aXN1YWxFbGVtZW50LmdldFByb3BzKCkudHJhbnNmb3JtVGVtcGxhdGU7XG4gICAgICAgIHRoaXMudmlzdWFsRWxlbWVudC5nZXRJbnN0YW5jZSgpLnN0eWxlLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVRlbXBsYXRlXG4gICAgICAgICAgICA/IHRyYW5zZm9ybVRlbXBsYXRlKHt9LCBcIlwiKVxuICAgICAgICAgICAgOiBcIm5vbmVcIjtcbiAgICAgICAgKF9hID0gcHJvamVjdGlvbi5yb290KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudXBkYXRlU2Nyb2xsKCk7XG4gICAgICAgIHByb2plY3Rpb24udXBkYXRlTGF5b3V0KCk7XG4gICAgICAgIHRoaXMucmVzb2x2ZUNvbnN0cmFpbnRzKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGb3IgZWFjaCBheGlzLCBjYWxjdWxhdGUgdGhlIGN1cnJlbnQgcHJvZ3Jlc3Mgb2YgdGhlIGxheW91dCBheGlzXG4gICAgICAgICAqIHdpdGhpbiB0aGUgbmV3IGNvbnN0cmFpbnRzLlxuICAgICAgICAgKi9cbiAgICAgICAgZWFjaEF4aXMoZnVuY3Rpb24gKGF4aXMpIHtcbiAgICAgICAgICAgIGlmICghc2hvdWxkRHJhZyhheGlzLCBkcmFnLCBudWxsKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIENhbGN1bGF0ZSBhIG5ldyB0cmFuc2Zvcm0gYmFzZWQgb24gdGhlIHByZXZpb3VzIGJveCBwcm9ncmVzc1xuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB2YXIgYXhpc1ZhbHVlID0gX3RoaXMuZ2V0QXhpc01vdGlvblZhbHVlKGF4aXMpO1xuICAgICAgICAgICAgdmFyIF9hID0gX3RoaXMuY29uc3RyYWludHNbYXhpc10sIG1pbiA9IF9hLm1pbiwgbWF4ID0gX2EubWF4O1xuICAgICAgICAgICAgYXhpc1ZhbHVlLnNldChtaXgobWluLCBtYXgsIGJveFByb2dyZXNzW2F4aXNdKSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5wcm90b3R5cGUuYWRkTGlzdGVuZXJzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGVsZW1lbnREcmFnQ29udHJvbHMuc2V0KHRoaXMudmlzdWFsRWxlbWVudCwgdGhpcyk7XG4gICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy52aXN1YWxFbGVtZW50LmdldEluc3RhbmNlKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBdHRhY2ggYSBwb2ludGVyZG93biBldmVudCBsaXN0ZW5lciBvbiB0aGlzIERPTSBlbGVtZW50IHRvIGluaXRpYXRlIGRyYWcgdHJhY2tpbmcuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgc3RvcFBvaW50ZXJMaXN0ZW5lciA9IGFkZFBvaW50ZXJFdmVudChlbGVtZW50LCBcInBvaW50ZXJkb3duXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgdmFyIF9hID0gX3RoaXMuZ2V0UHJvcHMoKSwgZHJhZyA9IF9hLmRyYWcsIF9iID0gX2EuZHJhZ0xpc3RlbmVyLCBkcmFnTGlzdGVuZXIgPSBfYiA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9iO1xuICAgICAgICAgICAgZHJhZyAmJiBkcmFnTGlzdGVuZXIgJiYgX3RoaXMuc3RhcnQoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIG1lYXN1cmVEcmFnQ29uc3RyYWludHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZHJhZ0NvbnN0cmFpbnRzID0gX3RoaXMuZ2V0UHJvcHMoKS5kcmFnQ29uc3RyYWludHM7XG4gICAgICAgICAgICBpZiAoaXNSZWZPYmplY3QoZHJhZ0NvbnN0cmFpbnRzKSkge1xuICAgICAgICAgICAgICAgIF90aGlzLmNvbnN0cmFpbnRzID0gX3RoaXMucmVzb2x2ZVJlZkNvbnN0cmFpbnRzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciBwcm9qZWN0aW9uID0gdGhpcy52aXN1YWxFbGVtZW50LnByb2plY3Rpb247XG4gICAgICAgIHZhciBzdG9wTWVhc3VyZUxheW91dExpc3RlbmVyID0gcHJvamVjdGlvbi5hZGRFdmVudExpc3RlbmVyKFwibWVhc3VyZVwiLCBtZWFzdXJlRHJhZ0NvbnN0cmFpbnRzKTtcbiAgICAgICAgaWYgKHByb2plY3Rpb24gJiYgIXByb2plY3Rpb24ubGF5b3V0KSB7XG4gICAgICAgICAgICAoX2EgPSBwcm9qZWN0aW9uLnJvb3QpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS51cGRhdGVTY3JvbGwoKTtcbiAgICAgICAgICAgIHByb2plY3Rpb24udXBkYXRlTGF5b3V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgbWVhc3VyZURyYWdDb25zdHJhaW50cygpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQXR0YWNoIGEgd2luZG93IHJlc2l6ZSBsaXN0ZW5lciB0byBzY2FsZSB0aGUgZHJhZ2dhYmxlIHRhcmdldCB3aXRoaW4gaXRzIGRlZmluZWRcbiAgICAgICAgICogY29uc3RyYWludHMgYXMgdGhlIHdpbmRvdyByZXNpemVzLlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIHN0b3BSZXNpemVMaXN0ZW5lciA9IGFkZERvbUV2ZW50KHdpbmRvdywgXCJyZXNpemVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLnNjYWxlUG9zaXRpb25XaXRoaW5Db25zdHJhaW50cygpO1xuICAgICAgICB9KTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHRoZSBlbGVtZW50J3MgbGF5b3V0IGNoYW5nZXMsIGNhbGN1bGF0ZSB0aGUgZGVsdGEgYW5kIGFwcGx5IHRoYXQgdG9cbiAgICAgICAgICogdGhlIGRyYWcgZ2VzdHVyZSdzIG9yaWdpbiBwb2ludC5cbiAgICAgICAgICovXG4gICAgICAgIHByb2plY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcihcImRpZFVwZGF0ZVwiLCAoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICB2YXIgZGVsdGEgPSBfYS5kZWx0YSwgaGFzTGF5b3V0Q2hhbmdlZCA9IF9hLmhhc0xheW91dENoYW5nZWQ7XG4gICAgICAgICAgICBpZiAoX3RoaXMuaXNEcmFnZ2luZyAmJiBoYXNMYXlvdXRDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgZWFjaEF4aXMoZnVuY3Rpb24gKGF4aXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1vdGlvblZhbHVlID0gX3RoaXMuZ2V0QXhpc01vdGlvblZhbHVlKGF4aXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW1vdGlvblZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5vcmlnaW5Qb2ludFtheGlzXSArPSBkZWx0YVtheGlzXS50cmFuc2xhdGU7XG4gICAgICAgICAgICAgICAgICAgIG1vdGlvblZhbHVlLnNldChtb3Rpb25WYWx1ZS5nZXQoKSArIGRlbHRhW2F4aXNdLnRyYW5zbGF0ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgX3RoaXMudmlzdWFsRWxlbWVudC5zeW5jUmVuZGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN0b3BSZXNpemVMaXN0ZW5lcigpO1xuICAgICAgICAgICAgc3RvcFBvaW50ZXJMaXN0ZW5lcigpO1xuICAgICAgICAgICAgc3RvcE1lYXN1cmVMYXlvdXRMaXN0ZW5lcigpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5wcm90b3R5cGUuZ2V0UHJvcHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwcm9wcyA9IHRoaXMudmlzdWFsRWxlbWVudC5nZXRQcm9wcygpO1xuICAgICAgICB2YXIgX2EgPSBwcm9wcy5kcmFnLCBkcmFnID0gX2EgPT09IHZvaWQgMCA/IGZhbHNlIDogX2EsIF9iID0gcHJvcHMuZHJhZ0RpcmVjdGlvbkxvY2ssIGRyYWdEaXJlY3Rpb25Mb2NrID0gX2IgPT09IHZvaWQgMCA/IGZhbHNlIDogX2IsIF9jID0gcHJvcHMuZHJhZ1Byb3BhZ2F0aW9uLCBkcmFnUHJvcGFnYXRpb24gPSBfYyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfYywgX2QgPSBwcm9wcy5kcmFnQ29uc3RyYWludHMsIGRyYWdDb25zdHJhaW50cyA9IF9kID09PSB2b2lkIDAgPyBmYWxzZSA6IF9kLCBfZSA9IHByb3BzLmRyYWdFbGFzdGljLCBkcmFnRWxhc3RpYyA9IF9lID09PSB2b2lkIDAgPyBkZWZhdWx0RWxhc3RpYyA6IF9lLCBfZiA9IHByb3BzLmRyYWdNb21lbnR1bSwgZHJhZ01vbWVudHVtID0gX2YgPT09IHZvaWQgMCA/IHRydWUgOiBfZjtcbiAgICAgICAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCBwcm9wcyksIHsgZHJhZzogZHJhZywgZHJhZ0RpcmVjdGlvbkxvY2s6IGRyYWdEaXJlY3Rpb25Mb2NrLCBkcmFnUHJvcGFnYXRpb246IGRyYWdQcm9wYWdhdGlvbiwgZHJhZ0NvbnN0cmFpbnRzOiBkcmFnQ29uc3RyYWludHMsIGRyYWdFbGFzdGljOiBkcmFnRWxhc3RpYywgZHJhZ01vbWVudHVtOiBkcmFnTW9tZW50dW0gfSk7XG4gICAgfTtcbiAgICByZXR1cm4gVmlzdWFsRWxlbWVudERyYWdDb250cm9scztcbn0oKSk7XG5mdW5jdGlvbiBzaG91bGREcmFnKGRpcmVjdGlvbiwgZHJhZywgY3VycmVudERpcmVjdGlvbikge1xuICAgIHJldHVybiAoKGRyYWcgPT09IHRydWUgfHwgZHJhZyA9PT0gZGlyZWN0aW9uKSAmJlxuICAgICAgICAoY3VycmVudERpcmVjdGlvbiA9PT0gbnVsbCB8fCBjdXJyZW50RGlyZWN0aW9uID09PSBkaXJlY3Rpb24pKTtcbn1cbi8qKlxuICogQmFzZWQgb24gYW4geC95IG9mZnNldCBkZXRlcm1pbmUgdGhlIGN1cnJlbnQgZHJhZyBkaXJlY3Rpb24uIElmIGJvdGggYXhpcycgb2Zmc2V0cyBhcmUgbG93ZXJcbiAqIHRoYW4gdGhlIHByb3ZpZGVkIHRocmVzaG9sZCwgcmV0dXJuIGBudWxsYC5cbiAqXG4gKiBAcGFyYW0gb2Zmc2V0IC0gVGhlIHgveSBvZmZzZXQgZnJvbSBvcmlnaW4uXG4gKiBAcGFyYW0gbG9ja1RocmVzaG9sZCAtIChPcHRpb25hbCkgLSB0aGUgbWluaW11bSBhYnNvbHV0ZSBvZmZzZXQgYmVmb3JlIHdlIGNhbiBkZXRlcm1pbmUgYSBkcmFnIGRpcmVjdGlvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0Q3VycmVudERpcmVjdGlvbihvZmZzZXQsIGxvY2tUaHJlc2hvbGQpIHtcbiAgICBpZiAobG9ja1RocmVzaG9sZCA9PT0gdm9pZCAwKSB7IGxvY2tUaHJlc2hvbGQgPSAxMDsgfVxuICAgIHZhciBkaXJlY3Rpb24gPSBudWxsO1xuICAgIGlmIChNYXRoLmFicyhvZmZzZXQueSkgPiBsb2NrVGhyZXNob2xkKSB7XG4gICAgICAgIGRpcmVjdGlvbiA9IFwieVwiO1xuICAgIH1cbiAgICBlbHNlIGlmIChNYXRoLmFicyhvZmZzZXQueCkgPiBsb2NrVGhyZXNob2xkKSB7XG4gICAgICAgIGRpcmVjdGlvbiA9IFwieFwiO1xuICAgIH1cbiAgICByZXR1cm4gZGlyZWN0aW9uO1xufVxuXG5leHBvcnQgeyBWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzLCBlbGVtZW50RHJhZ0NvbnRyb2xzIH07XG4iLCJpbXBvcnQgeyB1c2VEcmFnIH0gZnJvbSAnLi4vLi4vZ2VzdHVyZXMvZHJhZy91c2UtZHJhZy5tanMnO1xuaW1wb3J0IHsgdXNlUGFuR2VzdHVyZSB9IGZyb20gJy4uLy4uL2dlc3R1cmVzL3VzZS1wYW4tZ2VzdHVyZS5tanMnO1xuaW1wb3J0IHsgbWFrZVJlbmRlcmxlc3NDb21wb25lbnQgfSBmcm9tICcuLi91dGlscy9tYWtlLXJlbmRlcmxlc3MtY29tcG9uZW50Lm1qcyc7XG5cbnZhciBkcmFnID0ge1xuICAgIHBhbjogbWFrZVJlbmRlcmxlc3NDb21wb25lbnQodXNlUGFuR2VzdHVyZSksXG4gICAgZHJhZzogbWFrZVJlbmRlcmxlc3NDb21wb25lbnQodXNlRHJhZyksXG59O1xuXG5leHBvcnQgeyBkcmFnIH07XG4iLCJpbXBvcnQgeyB1c2VSZWYsIHVzZUNvbnRleHQsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE1vdGlvbkNvbmZpZ0NvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0L01vdGlvbkNvbmZpZ0NvbnRleHQubWpzJztcbmltcG9ydCB7IHVzZVVubW91bnRFZmZlY3QgfSBmcm9tICcuLi91dGlscy91c2UtdW5tb3VudC1lZmZlY3QubWpzJztcbmltcG9ydCB7IHVzZVBvaW50ZXJFdmVudCB9IGZyb20gJy4uL2V2ZW50cy91c2UtcG9pbnRlci1ldmVudC5tanMnO1xuaW1wb3J0IHsgUGFuU2Vzc2lvbiB9IGZyb20gJy4vUGFuU2Vzc2lvbi5tanMnO1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gaGFuZGxlcnMgLVxuICogQHBhcmFtIHJlZiAtXG4gKlxuICogQHByaXZhdGVSZW1hcmtzXG4gKiBDdXJyZW50bHkgdGhpcyBzZXRzIG5ldyBwYW4gZ2VzdHVyZSBmdW5jdGlvbnMgZXZlcnkgcmVuZGVyLiBUaGUgbWVtbyByb3V0ZSBoYXMgYmVlbiBleHBsb3JlZFxuICogaW4gdGhlIHBhc3QgYnV0IHVsdGltYXRlbHkgd2UncmUgc3RpbGwgY3JlYXRpbmcgbmV3IGZ1bmN0aW9ucyBldmVyeSByZW5kZXIuIEFuIG9wdGltaXNhdGlvblxuICogdG8gZXhwbG9yZSBpcyBjcmVhdGluZyB0aGUgcGFuIGdlc3R1cmVzIGFuZCBsb2FkaW5nIHRoZW0gaW50byBhIGByZWZgLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiB1c2VQYW5HZXN0dXJlKF9hKSB7XG4gICAgdmFyIG9uUGFuID0gX2Eub25QYW4sIG9uUGFuU3RhcnQgPSBfYS5vblBhblN0YXJ0LCBvblBhbkVuZCA9IF9hLm9uUGFuRW5kLCBvblBhblNlc3Npb25TdGFydCA9IF9hLm9uUGFuU2Vzc2lvblN0YXJ0LCB2aXN1YWxFbGVtZW50ID0gX2EudmlzdWFsRWxlbWVudDtcbiAgICB2YXIgaGFzUGFuRXZlbnRzID0gb25QYW4gfHwgb25QYW5TdGFydCB8fCBvblBhbkVuZCB8fCBvblBhblNlc3Npb25TdGFydDtcbiAgICB2YXIgcGFuU2Vzc2lvbiA9IHVzZVJlZihudWxsKTtcbiAgICB2YXIgdHJhbnNmb3JtUGFnZVBvaW50ID0gdXNlQ29udGV4dChNb3Rpb25Db25maWdDb250ZXh0KS50cmFuc2Zvcm1QYWdlUG9pbnQ7XG4gICAgdmFyIGhhbmRsZXJzID0ge1xuICAgICAgICBvblNlc3Npb25TdGFydDogb25QYW5TZXNzaW9uU3RhcnQsXG4gICAgICAgIG9uU3RhcnQ6IG9uUGFuU3RhcnQsXG4gICAgICAgIG9uTW92ZTogb25QYW4sXG4gICAgICAgIG9uRW5kOiBmdW5jdGlvbiAoZXZlbnQsIGluZm8pIHtcbiAgICAgICAgICAgIHBhblNlc3Npb24uY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgICBvblBhbkVuZCAmJiBvblBhbkVuZChldmVudCwgaW5mbyk7XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAocGFuU2Vzc2lvbi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwYW5TZXNzaW9uLmN1cnJlbnQudXBkYXRlSGFuZGxlcnMoaGFuZGxlcnMpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gb25Qb2ludGVyRG93bihldmVudCkge1xuICAgICAgICBwYW5TZXNzaW9uLmN1cnJlbnQgPSBuZXcgUGFuU2Vzc2lvbihldmVudCwgaGFuZGxlcnMsIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybVBhZ2VQb2ludDogdHJhbnNmb3JtUGFnZVBvaW50LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdXNlUG9pbnRlckV2ZW50KHZpc3VhbEVsZW1lbnQsIFwicG9pbnRlcmRvd25cIiwgaGFzUGFuRXZlbnRzICYmIG9uUG9pbnRlckRvd24pO1xuICAgIHVzZVVubW91bnRFZmZlY3QoZnVuY3Rpb24gKCkgeyByZXR1cm4gcGFuU2Vzc2lvbi5jdXJyZW50ICYmIHBhblNlc3Npb24uY3VycmVudC5lbmQoKTsgfSk7XG59XG5cbmV4cG9ydCB7IHVzZVBhbkdlc3R1cmUgfTtcbiIsImltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHMgfSBmcm9tICcuL1Zpc3VhbEVsZW1lbnREcmFnQ29udHJvbHMubWpzJztcbmltcG9ydCB7IHVzZUNvbnN0YW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvdXNlLWNvbnN0YW50Lm1qcyc7XG5cbi8qKlxuICogQSBob29rIHRoYXQgYWxsb3dzIGFuIGVsZW1lbnQgdG8gYmUgZHJhZ2dlZC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gdXNlRHJhZyhwcm9wcykge1xuICAgIHZhciBncm91cERyYWdDb250cm9scyA9IHByb3BzLmRyYWdDb250cm9scywgdmlzdWFsRWxlbWVudCA9IHByb3BzLnZpc3VhbEVsZW1lbnQ7XG4gICAgdmFyIGRyYWdDb250cm9scyA9IHVzZUNvbnN0YW50KGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzKHZpc3VhbEVsZW1lbnQpOyB9KTtcbiAgICAvLyBJZiB3ZSd2ZSBiZWVuIHByb3ZpZGVkIGEgRHJhZ0NvbnRyb2xzIGZvciBtYW51YWwgY29udHJvbCBvdmVyIHRoZSBkcmFnIGdlc3R1cmUsXG4gICAgLy8gc3Vic2NyaWJlIHRoaXMgY29tcG9uZW50IHRvIGl0IG9uIG1vdW50LlxuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7IHJldHVybiBncm91cERyYWdDb250cm9scyAmJiBncm91cERyYWdDb250cm9scy5zdWJzY3JpYmUoZHJhZ0NvbnRyb2xzKTsgfSwgW2RyYWdDb250cm9scywgZ3JvdXBEcmFnQ29udHJvbHNdKTtcbiAgICAvLyBBcHBseSB0aGUgZXZlbnQgbGlzdGVuZXJzIHRvIHRoZSBlbGVtZW50XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRyYWdDb250cm9scy5hZGRMaXN0ZW5lcnMoKTsgfSwgW2RyYWdDb250cm9sc10pO1xufVxuXG5leHBvcnQgeyB1c2VEcmFnIH07XG4iLCJpbXBvcnQgeyBfX3NwcmVhZEFycmF5LCBfX3JlYWQgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25NYW5hZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3Vic2NyaXB0aW9uLW1hbmFnZXIubWpzJztcblxudmFyIG5hbWVzID0gW1xuICAgIFwiTGF5b3V0TWVhc3VyZVwiLFxuICAgIFwiQmVmb3JlTGF5b3V0TWVhc3VyZVwiLFxuICAgIFwiTGF5b3V0VXBkYXRlXCIsXG4gICAgXCJWaWV3cG9ydEJveFVwZGF0ZVwiLFxuICAgIFwiVXBkYXRlXCIsXG4gICAgXCJSZW5kZXJcIixcbiAgICBcIkFuaW1hdGlvbkNvbXBsZXRlXCIsXG4gICAgXCJMYXlvdXRBbmltYXRpb25Db21wbGV0ZVwiLFxuICAgIFwiQW5pbWF0aW9uU3RhcnRcIixcbiAgICBcIkxheW91dEFuaW1hdGlvblN0YXJ0XCIsXG4gICAgXCJTZXRBeGlzVGFyZ2V0XCIsXG4gICAgXCJVbm1vdW50XCIsXG5dO1xuZnVuY3Rpb24gY3JlYXRlTGlmZWN5Y2xlcygpIHtcbiAgICB2YXIgbWFuYWdlcnMgPSBuYW1lcy5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbk1hbmFnZXIoKTsgfSk7XG4gICAgdmFyIHByb3BTdWJzY3JpcHRpb25zID0ge307XG4gICAgdmFyIGxpZmVjeWNsZXMgPSB7XG4gICAgICAgIGNsZWFyQWxsTGlzdGVuZXJzOiBmdW5jdGlvbiAoKSB7IHJldHVybiBtYW5hZ2Vycy5mb3JFYWNoKGZ1bmN0aW9uIChtYW5hZ2VyKSB7IHJldHVybiBtYW5hZ2VyLmNsZWFyKCk7IH0pOyB9LFxuICAgICAgICB1cGRhdGVQcm9wTGlzdGVuZXJzOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgICAgIG5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgdmFyIG9uID0gXCJvblwiICsgbmFtZTtcbiAgICAgICAgICAgICAgICB2YXIgcHJvcExpc3RlbmVyID0gcHJvcHNbb25dO1xuICAgICAgICAgICAgICAgIC8vIFVuc3Vic2NyaWJlIGV4aXN0aW5nIHN1YnNjcmlwdGlvblxuICAgICAgICAgICAgICAgIChfYSA9IHByb3BTdWJzY3JpcHRpb25zW25hbWVdKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChwcm9wU3Vic2NyaXB0aW9ucyk7XG4gICAgICAgICAgICAgICAgLy8gQWRkIG5ldyBzdWJzY3JpcHRpb25cbiAgICAgICAgICAgICAgICBpZiAocHJvcExpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BTdWJzY3JpcHRpb25zW25hbWVdID0gbGlmZWN5Y2xlc1tvbl0ocHJvcExpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIG1hbmFnZXJzLmZvckVhY2goZnVuY3Rpb24gKG1hbmFnZXIsIGkpIHtcbiAgICAgICAgbGlmZWN5Y2xlc1tcIm9uXCIgKyBuYW1lc1tpXV0gPSBmdW5jdGlvbiAoaGFuZGxlcikgeyByZXR1cm4gbWFuYWdlci5hZGQoaGFuZGxlcik7IH07XG4gICAgICAgIGxpZmVjeWNsZXNbXCJub3RpZnlcIiArIG5hbWVzW2ldXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtYW5hZ2VyLm5vdGlmeS5hcHBseShtYW5hZ2VyLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoYXJncyksIGZhbHNlKSk7XG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIGxpZmVjeWNsZXM7XG59XG5cbmV4cG9ydCB7IGNyZWF0ZUxpZmVjeWNsZXMgfTtcbiIsImltcG9ydCB7IF9fYXNzaWduLCBfX3NwcmVhZEFycmF5LCBfX3JlYWQgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgc3luYywgeyBjYW5jZWxTeW5jIH0gZnJvbSAnZnJhbWVzeW5jJztcbmltcG9ydCB7IG1vdGlvblZhbHVlIH0gZnJvbSAnLi4vdmFsdWUvaW5kZXgubWpzJztcbmltcG9ydCB7IGlzTW90aW9uVmFsdWUgfSBmcm9tICcuLi92YWx1ZS91dGlscy9pcy1tb3Rpb24tdmFsdWUubWpzJztcbmltcG9ydCB7IHZhcmlhbnRQcmlvcml0eU9yZGVyIH0gZnJvbSAnLi91dGlscy9hbmltYXRpb24tc3RhdGUubWpzJztcbmltcG9ydCB7IGNyZWF0ZUxpZmVjeWNsZXMgfSBmcm9tICcuL3V0aWxzL2xpZmVjeWNsZXMubWpzJztcbmltcG9ydCB7IHVwZGF0ZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyB9IGZyb20gJy4vdXRpbHMvbW90aW9uLXZhbHVlcy5tanMnO1xuaW1wb3J0IHsgY2hlY2tJZkNvbnRyb2xsaW5nVmFyaWFudHMsIGNoZWNrSWZWYXJpYW50Tm9kZSwgaXNWYXJpYW50TGFiZWwgfSBmcm9tICcuL3V0aWxzL3ZhcmlhbnRzLm1qcyc7XG5cbnZhciB2aXN1YWxFbGVtZW50ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIF9iID0gX2EudHJlZVR5cGUsIHRyZWVUeXBlID0gX2IgPT09IHZvaWQgMCA/IFwiXCIgOiBfYiwgYnVpbGQgPSBfYS5idWlsZCwgZ2V0QmFzZVRhcmdldCA9IF9hLmdldEJhc2VUYXJnZXQsIG1ha2VUYXJnZXRBbmltYXRhYmxlID0gX2EubWFrZVRhcmdldEFuaW1hdGFibGUsIG1lYXN1cmVWaWV3cG9ydEJveCA9IF9hLm1lYXN1cmVWaWV3cG9ydEJveCwgcmVuZGVySW5zdGFuY2UgPSBfYS5yZW5kZXIsIHJlYWRWYWx1ZUZyb21JbnN0YW5jZSA9IF9hLnJlYWRWYWx1ZUZyb21JbnN0YW5jZSwgcmVtb3ZlVmFsdWVGcm9tUmVuZGVyU3RhdGUgPSBfYS5yZW1vdmVWYWx1ZUZyb21SZW5kZXJTdGF0ZSwgc29ydE5vZGVQb3NpdGlvbiA9IF9hLnNvcnROb2RlUG9zaXRpb24sIHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyA9IF9hLnNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcztcbiAgICByZXR1cm4gZnVuY3Rpb24gKF9hLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBwYXJlbnQgPSBfYS5wYXJlbnQsIHByb3BzID0gX2EucHJvcHMsIHByZXNlbmNlSWQgPSBfYS5wcmVzZW5jZUlkLCBibG9ja0luaXRpYWxBbmltYXRpb24gPSBfYS5ibG9ja0luaXRpYWxBbmltYXRpb24sIHZpc3VhbFN0YXRlID0gX2EudmlzdWFsU3RhdGUsIHNob3VsZFJlZHVjZU1vdGlvbiA9IF9hLnNob3VsZFJlZHVjZU1vdGlvbjtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICAgICAgdmFyIGlzTW91bnRlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgbGF0ZXN0VmFsdWVzID0gdmlzdWFsU3RhdGUubGF0ZXN0VmFsdWVzLCByZW5kZXJTdGF0ZSA9IHZpc3VhbFN0YXRlLnJlbmRlclN0YXRlO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGluc3RhbmNlIG9mIHRoZSByZW5kZXItc3BlY2lmaWMgbm9kZSB0aGF0IHdpbGwgYmUgaHlkcmF0ZWQgYnkgdGhlXG4gICAgICAgICAqIGV4cG9zZWQgUmVhY3QgcmVmLiBTbyBmb3IgZXhhbXBsZSwgdGhpcyB2aXN1YWwgZWxlbWVudCBjYW4gaG9zdCBhXG4gICAgICAgICAqIEhUTUxFbGVtZW50LCBwbGFpbiBvYmplY3QsIG9yIFRocmVlLmpzIG9iamVjdC4gVGhlIGZ1bmN0aW9ucyBwcm92aWRlZFxuICAgICAgICAgKiBpbiBWaXN1YWxFbGVtZW50Q29uZmlnIGFsbG93IHVzIHRvIGludGVyZmFjZSB3aXRoIHRoaXMgaW5zdGFuY2UuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgaW5zdGFuY2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBNYW5hZ2VzIHRoZSBzdWJzY3JpcHRpb25zIGZvciBhIHZpc3VhbCBlbGVtZW50J3MgbGlmZWN5Y2xlLCBmb3IgaW5zdGFuY2VcbiAgICAgICAgICogb25SZW5kZXJcbiAgICAgICAgICovXG4gICAgICAgIHZhciBsaWZlY3ljbGVzID0gY3JlYXRlTGlmZWN5Y2xlcygpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBtYXAgb2YgYWxsIG1vdGlvbiB2YWx1ZXMgYXR0YWNoZWQgdG8gdGhpcyB2aXN1YWwgZWxlbWVudC4gTW90aW9uXG4gICAgICAgICAqIHZhbHVlcyBhcmUgc291cmNlIG9mIHRydXRoIGZvciBhbnkgZ2l2ZW4gYW5pbWF0ZWQgdmFsdWUuIEEgbW90aW9uXG4gICAgICAgICAqIHZhbHVlIG1pZ2h0IGJlIHByb3ZpZGVkIGV4dGVybmFsbHkgYnkgdGhlIGNvbXBvbmVudCB2aWEgcHJvcHMuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgdmFsdWVzID0gbmV3IE1hcCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBtYXAgb2YgZXZlcnkgc3Vic2NyaXB0aW9uIHRoYXQgYmluZHMgdGhlIHByb3ZpZGVkIG9yIGdlbmVyYXRlZFxuICAgICAgICAgKiBtb3Rpb24gdmFsdWVzIG9uQ2hhbmdlIGxpc3RlbmVycyB0byB0aGlzIHZpc3VhbCBlbGVtZW50LlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIHZhbHVlU3Vic2NyaXB0aW9ucyA9IG5ldyBNYXAoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBwcmV2aW91c2x5LXByb3ZpZGVkIG1vdGlvbiB2YWx1ZXMgYXMgcmV0dXJuZWRcbiAgICAgICAgICogZnJvbSBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMuIFdlIHVzZSB0aGUga2V5cyBpbiBoZXJlIHRvIGRldGVybWluZVxuICAgICAgICAgKiBpZiBhbnkgbW90aW9uIHZhbHVlcyBuZWVkIHRvIGJlIHJlbW92ZWQgYWZ0ZXIgcHJvcHMgYXJlIHVwZGF0ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgcHJldk1vdGlvblZhbHVlcyA9IHt9O1xuICAgICAgICAvKipcbiAgICAgICAgICogV2hlbiB2YWx1ZXMgYXJlIHJlbW92ZWQgZnJvbSBhbGwgYW5pbWF0aW9uIHByb3BzIHdlIG5lZWQgdG8gc2VhcmNoXG4gICAgICAgICAqIGZvciBhIGZhbGxiYWNrIHZhbHVlIHRvIGFuaW1hdGUgdG8uIFRoZXNlIHZhbHVlcyBhcmUgdHJhY2tlZCBpbiBiYXNlVGFyZ2V0LlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGJhc2VUYXJnZXQgPSBfX2Fzc2lnbih7fSwgbGF0ZXN0VmFsdWVzKTtcbiAgICAgICAgLy8gSW50ZXJuYWwgbWV0aG9kcyA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE9uIG1vdW50LCB0aGlzIHdpbGwgYmUgaHlkcmF0ZWQgd2l0aCBhIGNhbGxiYWNrIHRvIGRpc2Nvbm5lY3RcbiAgICAgICAgICogdGhpcyB2aXN1YWwgZWxlbWVudCBmcm9tIGl0cyBwYXJlbnQgb24gdW5tb3VudC5cbiAgICAgICAgICovXG4gICAgICAgIHZhciByZW1vdmVGcm9tVmFyaWFudFRyZWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZW5kZXIgdGhlIGVsZW1lbnQgd2l0aCB0aGUgbGF0ZXN0IHN0eWxlcyBvdXRzaWRlIG9mIHRoZSBSZWFjdFxuICAgICAgICAgKiByZW5kZXIgbGlmZWN5Y2xlXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgICAgICBpZiAoIWluc3RhbmNlIHx8ICFpc01vdW50ZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdHJpZ2dlckJ1aWxkKCk7XG4gICAgICAgICAgICByZW5kZXJJbnN0YW5jZShpbnN0YW5jZSwgcmVuZGVyU3RhdGUsIHByb3BzLnN0eWxlLCBlbGVtZW50LnByb2plY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRyaWdnZXJCdWlsZCgpIHtcbiAgICAgICAgICAgIGJ1aWxkKGVsZW1lbnQsIHJlbmRlclN0YXRlLCBsYXRlc3RWYWx1ZXMsIG9wdGlvbnMsIHByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICAgICAgICBsaWZlY3ljbGVzLm5vdGlmeVVwZGF0ZShsYXRlc3RWYWx1ZXMpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gYmluZFRvTW90aW9uVmFsdWUoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIHJlbW92ZU9uQ2hhbmdlID0gdmFsdWUub25DaGFuZ2UoZnVuY3Rpb24gKGxhdGVzdFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbGF0ZXN0VmFsdWVzW2tleV0gPSBsYXRlc3RWYWx1ZTtcbiAgICAgICAgICAgICAgICBwcm9wcy5vblVwZGF0ZSAmJiBzeW5jLnVwZGF0ZSh1cGRhdGUsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHJlbW92ZU9uUmVuZGVyUmVxdWVzdCA9IHZhbHVlLm9uUmVuZGVyUmVxdWVzdChlbGVtZW50LnNjaGVkdWxlUmVuZGVyKTtcbiAgICAgICAgICAgIHZhbHVlU3Vic2NyaXB0aW9ucy5zZXQoa2V5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlT25DaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICByZW1vdmVPblJlbmRlclJlcXVlc3QoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbnkgbW90aW9uIHZhbHVlcyB0aGF0IGFyZSBwcm92aWRlZCB0byB0aGUgZWxlbWVudCB3aGVuIGNyZWF0ZWRcbiAgICAgICAgICogYXJlbid0IHlldCBib3VuZCB0byB0aGUgZWxlbWVudCwgYXMgdGhpcyB3b3VsZCB0ZWNobmljYWxseSBiZSBpbXB1cmUuXG4gICAgICAgICAqIEhvd2V2ZXIsIHdlIGl0ZXJhdGUgdGhyb3VnaCB0aGUgbW90aW9uIHZhbHVlcyBhbmQgc2V0IHRoZW0gdG8gdGhlXG4gICAgICAgICAqIGluaXRpYWwgdmFsdWVzIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICAgICAgICpcbiAgICAgICAgICogVE9ETzogVGhpcyBpcyBpbXB1cmUgYW5kIHdlIHNob3VsZCBsb29rIGF0IGNoYW5naW5nIHRoaXMgdG8gcnVuIG9uIG1vdW50LlxuICAgICAgICAgKiBEb2luZyBzbyB3aWxsIGJyZWFrIHNvbWUgdGVzdHMgYnV0IHRoaXMgaXNuJ3QgbmVjY2Vzc2FyaWx5IGEgYnJlYWtpbmcgY2hhbmdlLFxuICAgICAgICAgKiBtb3JlIGEgcmVmbGVjdGlvbiBvZiB0aGUgdGVzdC5cbiAgICAgICAgICovXG4gICAgICAgIHZhciBpbml0aWFsTW90aW9uVmFsdWVzID0gc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzKHByb3BzKTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGluaXRpYWxNb3Rpb25WYWx1ZXMpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGluaXRpYWxNb3Rpb25WYWx1ZXNba2V5XTtcbiAgICAgICAgICAgIGlmIChsYXRlc3RWYWx1ZXNba2V5XSAhPT0gdW5kZWZpbmVkICYmIGlzTW90aW9uVmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuc2V0KGxhdGVzdFZhbHVlc1trZXldLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZSB3aGF0IHJvbGUgdGhpcyB2aXN1YWwgZWxlbWVudCBzaG91bGQgdGFrZSBpbiB0aGUgdmFyaWFudCB0cmVlLlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGlzQ29udHJvbGxpbmdWYXJpYW50cyA9IGNoZWNrSWZDb250cm9sbGluZ1ZhcmlhbnRzKHByb3BzKTtcbiAgICAgICAgdmFyIGlzVmFyaWFudE5vZGUgPSBjaGVja0lmVmFyaWFudE5vZGUocHJvcHMpO1xuICAgICAgICB2YXIgZWxlbWVudCA9IF9fYXNzaWduKF9fYXNzaWduKHsgdHJlZVR5cGU6IHRyZWVUeXBlLCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhpcyBpcyBhIG1pcnJvciBvZiB0aGUgaW50ZXJuYWwgaW5zdGFuY2UgcHJvcCwgd2hpY2gga2VlcHNcbiAgICAgICAgICAgICAqIFZpc3VhbEVsZW1lbnQgdHlwZS1jb21wYXRpYmxlIHdpdGggUmVhY3QncyBSZWZPYmplY3QuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGN1cnJlbnQ6IG51bGwsIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgZGVwdGggb2YgdGhpcyB2aXN1YWwgZWxlbWVudCB3aXRoaW4gdGhlIHZpc3VhbCBlbGVtZW50IHRyZWUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGRlcHRoOiBwYXJlbnQgPyBwYXJlbnQuZGVwdGggKyAxIDogMCwgcGFyZW50OiBwYXJlbnQsIGNoaWxkcmVuOiBuZXcgU2V0KCksIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBwcmVzZW5jZUlkOiBwcmVzZW5jZUlkLCBzaG91bGRSZWR1Y2VNb3Rpb246IHNob3VsZFJlZHVjZU1vdGlvbiwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHRoaXMgY29tcG9uZW50IGlzIHBhcnQgb2YgdGhlIHZhcmlhbnQgdHJlZSwgaXQgc2hvdWxkIHRyYWNrXG4gICAgICAgICAgICAgKiBhbnkgY2hpbGRyZW4gdGhhdCBhcmUgYWxzbyBwYXJ0IG9mIHRoZSB0cmVlLiBUaGlzIGlzIGVzc2VudGlhbGx5XG4gICAgICAgICAgICAgKiBhIHNoYWRvdyB0cmVlIHRvIHNpbXBsaWZ5IGxvZ2ljIGFyb3VuZCBob3cgdG8gc3RhZ2dlciBvdmVyIGNoaWxkcmVuLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB2YXJpYW50Q2hpbGRyZW46IGlzVmFyaWFudE5vZGUgPyBuZXcgU2V0KCkgOiB1bmRlZmluZWQsIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXaGV0aGVyIHRoaXMgaW5zdGFuY2UgaXMgdmlzaWJsZS4gVGhpcyBjYW4gYmUgY2hhbmdlZCBpbXBlcmF0aXZlbHlcbiAgICAgICAgICAgICAqIGJ5IHRoZSBwcm9qZWN0aW9uIHRyZWUsIGlzIGFuYWxvZ291cyB0byBDU1MncyB2aXNpYmlsaXR5IGluIHRoYXRcbiAgICAgICAgICAgICAqIGhpZGRlbiBlbGVtZW50cyBzaG91bGQgdGFrZSB1cCBsYXlvdXQsIGFuZCBuZWVkcyBlbmFjdGluZyBieSB0aGUgY29uZmlndXJlZFxuICAgICAgICAgICAgICogcmVuZGVyIGZ1bmN0aW9uLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpc1Zpc2libGU6IHVuZGVmaW5lZCwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIE5vcm1hbGx5LCBpZiBhIGNvbXBvbmVudCBpcyBjb250cm9sbGVkIGJ5IGEgcGFyZW50J3MgdmFyaWFudHMsIGl0IGNhblxuICAgICAgICAgICAgICogcmVseSBvbiB0aGF0IGFuY2VzdG9yIHRvIHRyaWdnZXIgYW5pbWF0aW9ucyBmdXJ0aGVyIGRvd24gdGhlIHRyZWUuXG4gICAgICAgICAgICAgKiBIb3dldmVyLCBpZiBhIGNvbXBvbmVudCBpcyBjcmVhdGVkIGFmdGVyIGl0cyBwYXJlbnQgaXMgbW91bnRlZCwgdGhlIHBhcmVudFxuICAgICAgICAgICAgICogd29uJ3QgdHJpZ2dlciB0aGF0IG1vdW50IGFuaW1hdGlvbiBzbyB0aGUgY2hpbGQgbmVlZHMgdG8uXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogVE9ETzogVGhpcyBtaWdodCBiZSBiZXR0ZXIgcmVwbGFjZWQgd2l0aCBhIG1ldGhvZCBpc1BhcmVudE1vdW50ZWRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbWFudWFsbHlBbmltYXRlT25Nb3VudDogQm9vbGVhbihwYXJlbnQgPT09IG51bGwgfHwgcGFyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJlbnQuaXNNb3VudGVkKCkpLCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhpcyBjYW4gYmUgc2V0IGJ5IEFuaW1hdGVQcmVzZW5jZSB0byBmb3JjZSBjb21wb25lbnRzIHRoYXQgbW91bnRcbiAgICAgICAgICAgICAqIGF0IHRoZSBzYW1lIHRpbWUgYXMgaXQgdG8gbW91bnQgYXMgaWYgdGhleSBoYXZlIGluaXRpYWw9e2ZhbHNlfSBzZXQuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGJsb2NrSW5pdGlhbEFuaW1hdGlvbjogYmxvY2tJbml0aWFsQW5pbWF0aW9uLCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBjb21wb25lbnQgaGFzIG1vdW50ZWQgeWV0LiBUaGlzIGlzIG1vc3RseSB1c2VkXG4gICAgICAgICAgICAgKiBieSB2YXJpYW50IGNoaWxkcmVuIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZXkgbmVlZCB0byB0cmlnZ2VyIHRoZWlyXG4gICAgICAgICAgICAgKiBvd24gYW5pbWF0aW9ucyBvbiBtb3VudC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaXNNb3VudGVkOiBmdW5jdGlvbiAoKSB7IHJldHVybiBCb29sZWFuKGluc3RhbmNlKTsgfSwgbW91bnQ6IGZ1bmN0aW9uIChuZXdJbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIGlzTW91bnRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UgPSBlbGVtZW50LmN1cnJlbnQgPSBuZXdJbnN0YW5jZTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5wcm9qZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucHJvamVjdGlvbi5tb3VudChuZXdJbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc1ZhcmlhbnROb2RlICYmIHBhcmVudCAmJiAhaXNDb250cm9sbGluZ1ZhcmlhbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUZyb21WYXJpYW50VHJlZSA9IHBhcmVudCA9PT0gbnVsbCB8fCBwYXJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmVudC5hZGRWYXJpYW50Q2hpbGQoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7IHJldHVybiBiaW5kVG9Nb3Rpb25WYWx1ZShrZXksIHZhbHVlKTsgfSk7XG4gICAgICAgICAgICAgICAgcGFyZW50ID09PSBudWxsIHx8IHBhcmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyZW50LmNoaWxkcmVuLmFkZChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnNldFByb3BzKHByb3BzKTtcbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB1bm1vdW50OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIChfYSA9IGVsZW1lbnQucHJvamVjdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnVubW91bnQoKTtcbiAgICAgICAgICAgICAgICBjYW5jZWxTeW5jLnVwZGF0ZSh1cGRhdGUpO1xuICAgICAgICAgICAgICAgIGNhbmNlbFN5bmMucmVuZGVyKHJlbmRlcik7XG4gICAgICAgICAgICAgICAgdmFsdWVTdWJzY3JpcHRpb25zLmZvckVhY2goZnVuY3Rpb24gKHJlbW92ZSkgeyByZXR1cm4gcmVtb3ZlKCk7IH0pO1xuICAgICAgICAgICAgICAgIHJlbW92ZUZyb21WYXJpYW50VHJlZSA9PT0gbnVsbCB8fCByZW1vdmVGcm9tVmFyaWFudFRyZWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlbW92ZUZyb21WYXJpYW50VHJlZSgpO1xuICAgICAgICAgICAgICAgIHBhcmVudCA9PT0gbnVsbCB8fCBwYXJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmVudC5jaGlsZHJlbi5kZWxldGUoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgbGlmZWN5Y2xlcy5jbGVhckFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgICAgIGluc3RhbmNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlzTW91bnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEFkZCBhIGNoaWxkIHZpc3VhbCBlbGVtZW50IHRvIG91ciBzZXQgb2YgY2hpbGRyZW4uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGFkZFZhcmlhbnRDaGlsZDogZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIHZhciBjbG9zZXN0VmFyaWFudE5vZGUgPSBlbGVtZW50LmdldENsb3Nlc3RWYXJpYW50Tm9kZSgpO1xuICAgICAgICAgICAgICAgIGlmIChjbG9zZXN0VmFyaWFudE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgKF9hID0gY2xvc2VzdFZhcmlhbnROb2RlLnZhcmlhbnRDaGlsZHJlbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFkZChjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xvc2VzdFZhcmlhbnROb2RlLnZhcmlhbnRDaGlsZHJlbi5kZWxldGUoY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHNvcnROb2RlUG9zaXRpb246IGZ1bmN0aW9uIChvdGhlcikge1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIElmIHRoZXNlIG5vZGVzIGFyZW4ndCBldmVuIG9mIHRoZSBzYW1lIHR5cGUgd2UgY2FuJ3QgY29tcGFyZSB0aGVpciBkZXB0aC5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBpZiAoIXNvcnROb2RlUG9zaXRpb24gfHwgdHJlZVR5cGUgIT09IG90aGVyLnRyZWVUeXBlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gc29ydE5vZGVQb3NpdGlvbihlbGVtZW50LmdldEluc3RhbmNlKCksIG90aGVyLmdldEluc3RhbmNlKCkpO1xuICAgICAgICAgICAgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFJldHVybnMgdGhlIGNsb3Nlc3QgdmFyaWFudCBub2RlIGluIHRoZSB0cmVlIHN0YXJ0aW5nIGZyb21cbiAgICAgICAgICAgICAqIHRoaXMgdmlzdWFsIGVsZW1lbnQuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGdldENsb3Nlc3RWYXJpYW50Tm9kZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc1ZhcmlhbnROb2RlID8gZWxlbWVudCA6IHBhcmVudCA9PT0gbnVsbCB8fCBwYXJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmVudC5nZXRDbG9zZXN0VmFyaWFudE5vZGUoKTtcbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBFeHBvc2UgdGhlIGxhdGVzdCBsYXlvdXRJZCBwcm9wLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBnZXRMYXlvdXRJZDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJvcHMubGF5b3V0SWQ7IH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGluc3RhbmNlLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBnZXRJbnN0YW5jZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5zdGFuY2U7IH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBHZXQvc2V0IHRoZSBsYXRlc3Qgc3RhdGljIHZhbHVlcy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZ2V0U3RhdGljVmFsdWU6IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGxhdGVzdFZhbHVlc1trZXldOyB9LCBzZXRTdGF0aWNWYWx1ZTogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsgcmV0dXJuIChsYXRlc3RWYWx1ZXNba2V5XSA9IHZhbHVlKTsgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFJldHVybnMgdGhlIGxhdGVzdCBtb3Rpb24gdmFsdWUgc3RhdGUuIEN1cnJlbnRseSBvbmx5IHVzZWQgdG8gdGFrZVxuICAgICAgICAgICAgICogYSBzbmFwc2hvdCBvZiB0aGUgdmlzdWFsIGVsZW1lbnQgLSBwZXJoYXBzIHRoaXMgY2FuIHJldHVybiB0aGUgd2hvbGVcbiAgICAgICAgICAgICAqIHZpc3VhbCBzdGF0ZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBnZXRMYXRlc3RWYWx1ZXM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxhdGVzdFZhbHVlczsgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFNldCB0aGUgdmlzaWJsaXR5IG9mIHRoZSB2aXN1YWwgZWxlbWVudC4gSWYgaXQncyBjaGFuZ2VkLCBzY2hlZHVsZVxuICAgICAgICAgICAgICogYSByZW5kZXIgdG8gcmVmbGVjdCB0aGVzZSBjaGFuZ2VzLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBzZXRWaXNpYmlsaXR5OiBmdW5jdGlvbiAodmlzaWJpbGl0eSkge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmlzVmlzaWJsZSA9PT0gdmlzaWJpbGl0eSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuaXNWaXNpYmxlID0gdmlzaWJpbGl0eTtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnNjaGVkdWxlUmVuZGVyKCk7XG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogTWFrZSBhIHRhcmdldCBhbmltYXRhYmxlIGJ5IFBvcG1vdGlvbi4gRm9yIGluc3RhbmNlLCBpZiB3ZSdyZVxuICAgICAgICAgICAgICogdHJ5aW5nIHRvIGFuaW1hdGUgd2lkdGggZnJvbSAxMDBweCB0byAxMDB2dyB3ZSBuZWVkIHRvIG1lYXN1cmUgMTAwdndcbiAgICAgICAgICAgICAqIGluIHBpeGVscyB0byBkZXRlcm1pbmUgd2hhdCB3ZSByZWFsbHkgbmVlZCB0byBhbmltYXRlIHRvLiBUaGlzIGlzIGFsc29cbiAgICAgICAgICAgICAqIHBsdWdnYWJsZSB0byBzdXBwb3J0IEZyYW1lcidzIGN1c3RvbSB2YWx1ZSB0eXBlcyBsaWtlIENvbG9yLFxuICAgICAgICAgICAgICogYW5kIENTUyB2YXJpYWJsZXMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIG1ha2VUYXJnZXRBbmltYXRhYmxlOiBmdW5jdGlvbiAodGFyZ2V0LCBjYW5NdXRhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FuTXV0YXRlID09PSB2b2lkIDApIHsgY2FuTXV0YXRlID0gdHJ1ZTsgfVxuICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVGFyZ2V0QW5pbWF0YWJsZShlbGVtZW50LCB0YXJnZXQsIHByb3BzLCBjYW5NdXRhdGUpO1xuICAgICAgICAgICAgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIE1lYXN1cmUgdGhlIGN1cnJlbnQgdmlld3BvcnQgYm94IHdpdGggb3Igd2l0aG91dCB0cmFuc2Zvcm1zLlxuICAgICAgICAgICAgICogT25seSBtZWFzdXJlcyBheGlzLWFsaWduZWQgYm94ZXMsIHJvdGF0ZSBhbmQgc2tldyBtdXN0IGJlIG1hbnVhbGx5XG4gICAgICAgICAgICAgKiByZW1vdmVkIHdpdGggYSByZS1yZW5kZXIgdG8gd29yay5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbWVhc3VyZVZpZXdwb3J0Qm94OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lYXN1cmVWaWV3cG9ydEJveChpbnN0YW5jZSwgcHJvcHMpO1xuICAgICAgICAgICAgfSwgXG4gICAgICAgICAgICAvLyBNb3Rpb24gdmFsdWVzID09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBBZGQgYSBtb3Rpb24gdmFsdWUgYW5kIGJpbmQgaXQgdG8gdGhpcyB2aXN1YWwgZWxlbWVudC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYWRkVmFsdWU6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGV4aXN0aW5nIHZhbHVlIGlmIGl0IGV4aXN0c1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lmhhc1ZhbHVlKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlVmFsdWUoa2V5KTtcbiAgICAgICAgICAgICAgICB2YWx1ZXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGxhdGVzdFZhbHVlc1trZXldID0gdmFsdWUuZ2V0KCk7XG4gICAgICAgICAgICAgICAgYmluZFRvTW90aW9uVmFsdWUoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmVtb3ZlIGEgbW90aW9uIHZhbHVlIGFuZCB1bmJpbmQgYW55IGFjdGl2ZSBzdWJzY3JpcHRpb25zLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICByZW1vdmVWYWx1ZTogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICB2YWx1ZXMuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICAgICAgKF9hID0gdmFsdWVTdWJzY3JpcHRpb25zLmdldChrZXkpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EoKTtcbiAgICAgICAgICAgICAgICB2YWx1ZVN1YnNjcmlwdGlvbnMuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGxhdGVzdFZhbHVlc1trZXldO1xuICAgICAgICAgICAgICAgIHJlbW92ZVZhbHVlRnJvbVJlbmRlclN0YXRlKGtleSwgcmVuZGVyU3RhdGUpO1xuICAgICAgICAgICAgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSBhIG1vdGlvbiB2YWx1ZSBmb3IgdGhpcyBrZXlcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaGFzVmFsdWU6IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIHZhbHVlcy5oYXMoa2V5KTsgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEdldCBhIG1vdGlvbiB2YWx1ZSBmb3IgdGhpcyBrZXkuIElmIGNhbGxlZCB3aXRoIGEgZGVmYXVsdFxuICAgICAgICAgICAgICogdmFsdWUsIHdlJ2xsIGNyZWF0ZSBvbmUgaWYgbm9uZSBleGlzdHMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGdldFZhbHVlOiBmdW5jdGlvbiAoa2V5LCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB2YWx1ZXMuZ2V0KGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtb3Rpb25WYWx1ZShkZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmFkZFZhbHVlKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSXRlcmF0ZSBvdmVyIG91ciBtb3Rpb24gdmFsdWVzLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBmb3JFYWNoVmFsdWU6IGZ1bmN0aW9uIChjYWxsYmFjaykgeyByZXR1cm4gdmFsdWVzLmZvckVhY2goY2FsbGJhY2spOyB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgd2UncmUgdHJ5aW5nIHRvIGFuaW1hdGUgdG8gYSBwcmV2aW91c2x5IHVuZW5jb3VudGVyZWQgdmFsdWUsXG4gICAgICAgICAgICAgKiB3ZSBuZWVkIHRvIGNoZWNrIGZvciBpdCBpbiBvdXIgc3RhdGUgYW5kIGFzIGEgbGFzdCByZXNvcnQgcmVhZCBpdFxuICAgICAgICAgICAgICogZGlyZWN0bHkgZnJvbSB0aGUgaW5zdGFuY2UgKHdoaWNoIG1pZ2h0IGhhdmUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zKS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgcmVhZFZhbHVlOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIHJldHVybiAoX2EgPSBsYXRlc3RWYWx1ZXNba2V5XSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcmVhZFZhbHVlRnJvbUluc3RhbmNlKGluc3RhbmNlLCBrZXksIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFNldCB0aGUgYmFzZSB0YXJnZXQgdG8gbGF0ZXIgYW5pbWF0ZSBiYWNrIHRvLiBUaGlzIGlzIGN1cnJlbnRseVxuICAgICAgICAgICAgICogb25seSBoeWRyYXRlZCBvbiBjcmVhdGlvbiBhbmQgd2hlbiB3ZSBmaXJzdCByZWFkIGEgdmFsdWUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHNldEJhc2VUYXJnZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgYmFzZVRhcmdldFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogRmluZCB0aGUgYmFzZSB0YXJnZXQgZm9yIGEgdmFsdWUgdGhhdHMgYmVlbiByZW1vdmVkIGZyb20gYWxsIGFuaW1hdGlvblxuICAgICAgICAgICAgICogcHJvcHMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGdldEJhc2VUYXJnZXQ6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0QmFzZVRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gZ2V0QmFzZVRhcmdldChwcm9wcywga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPT0gdW5kZWZpbmVkICYmICFpc01vdGlvblZhbHVlKHRhcmdldCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYmFzZVRhcmdldFtrZXldO1xuICAgICAgICAgICAgfSB9LCBsaWZlY3ljbGVzKSwgeyBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQnVpbGQgdGhlIHJlbmRlcmVyIHN0YXRlIGJhc2VkIG9uIHRoZSBsYXRlc3QgdmlzdWFsIHN0YXRlLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBidWlsZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJCdWlsZCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJTdGF0ZTtcbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBTY2hlZHVsZSBhIHJlbmRlciBvbiB0aGUgbmV4dCBhbmltYXRpb24gZnJhbWUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHNjaGVkdWxlUmVuZGVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3luYy5yZW5kZXIocmVuZGVyLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogU3luY2hyb25vdXNseSBmaXJlIHJlbmRlci4gSXQncyBwcmVmZXJlZCB0aGF0IHdlIGJhdGNoIHJlbmRlcnMgYnV0XG4gICAgICAgICAgICAgKiBpbiBtYW55IGNpcmN1bXN0YW5jZXMsIGxpa2UgbGF5b3V0IG1lYXN1cmVtZW50LCB3ZSBuZWVkIHRvIHJ1biB0aGlzXG4gICAgICAgICAgICAgKiBzeW5jaHJvbm91c2x5LiBIb3dldmVyIGluIHRob3NlIGluc3RhbmNlcyBvdGhlciBtZWFzdXJlcyBzaG91bGQgYmUgdGFrZW5cbiAgICAgICAgICAgICAqIHRvIGJhdGNoIHJlYWRzL3dyaXRlcy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgc3luY1JlbmRlcjogcmVuZGVyLCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVXBkYXRlIHRoZSBwcm92aWRlZCBwcm9wcy4gRW5zdXJlIGFueSBuZXdseS1hZGRlZCBtb3Rpb24gdmFsdWVzIGFyZVxuICAgICAgICAgICAgICogYWRkZWQgdG8gb3VyIG1hcCwgb2xkIG9uZXMgcmVtb3ZlZCwgYW5kIGxpc3RlbmVycyB1cGRhdGVkLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBzZXRQcm9wczogZnVuY3Rpb24gKG5ld1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5ld1Byb3BzLnRyYW5zZm9ybVRlbXBsYXRlIHx8IHByb3BzLnRyYW5zZm9ybVRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2NoZWR1bGVSZW5kZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvcHMgPSBuZXdQcm9wcztcbiAgICAgICAgICAgICAgICBsaWZlY3ljbGVzLnVwZGF0ZVByb3BMaXN0ZW5lcnMobmV3UHJvcHMpO1xuICAgICAgICAgICAgICAgIHByZXZNb3Rpb25WYWx1ZXMgPSB1cGRhdGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMoZWxlbWVudCwgc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzKHByb3BzKSwgcHJldk1vdGlvblZhbHVlcyk7XG4gICAgICAgICAgICB9LCBnZXRQcm9wczogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJvcHM7IH0sIFxuICAgICAgICAgICAgLy8gVmFyaWFudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFJldHVybnMgdGhlIHZhcmlhbnQgZGVmaW5pdGlvbiB3aXRoIGEgZ2l2ZW4gbmFtZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZ2V0VmFyaWFudDogZnVuY3Rpb24gKG5hbWUpIHsgdmFyIF9hOyByZXR1cm4gKF9hID0gcHJvcHMudmFyaWFudHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVtuYW1lXTsgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFJldHVybnMgdGhlIGRlZmluZWQgZGVmYXVsdCB0cmFuc2l0aW9uIG9uIHRoaXMgY29tcG9uZW50LlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBnZXREZWZhdWx0VHJhbnNpdGlvbjogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJvcHMudHJhbnNpdGlvbjsgfSwgZ2V0VHJhbnNmb3JtUGFnZVBvaW50OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRyYW5zZm9ybVBhZ2VQb2ludDtcbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBVc2VkIGJ5IGNoaWxkIHZhcmlhbnQgbm9kZXMgdG8gZ2V0IHRoZSBjbG9zZXN0IGFuY2VzdG9yIHZhcmlhbnQgcHJvcHMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGdldFZhcmlhbnRDb250ZXh0OiBmdW5jdGlvbiAoc3RhcnRBdFBhcmVudCkge1xuICAgICAgICAgICAgICAgIGlmIChzdGFydEF0UGFyZW50ID09PSB2b2lkIDApIHsgc3RhcnRBdFBhcmVudCA9IGZhbHNlOyB9XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0QXRQYXJlbnQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnQgPT09IG51bGwgfHwgcGFyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJlbnQuZ2V0VmFyaWFudENvbnRleHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzQ29udHJvbGxpbmdWYXJpYW50cykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dF8xID0gKHBhcmVudCA9PT0gbnVsbCB8fCBwYXJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmVudC5nZXRWYXJpYW50Q29udGV4dCgpKSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BzLmluaXRpYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dF8xLmluaXRpYWwgPSBwcm9wcy5pbml0aWFsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0XzE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0ge307XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1WYXJpYW50UHJvcHM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZV8xID0gdmFyaWFudFByb3BzW2ldO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcCA9IHByb3BzW25hbWVfMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhcmlhbnRMYWJlbChwcm9wKSB8fCBwcm9wID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dFtuYW1lXzFdID0gcHJvcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgICAgIH0gfSk7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH07XG59O1xudmFyIHZhcmlhbnRQcm9wcyA9IF9fc3ByZWFkQXJyYXkoW1wiaW5pdGlhbFwiXSwgX19yZWFkKHZhcmlhbnRQcmlvcml0eU9yZGVyKSwgZmFsc2UpO1xudmFyIG51bVZhcmlhbnRQcm9wcyA9IHZhcmlhbnRQcm9wcy5sZW5ndGg7XG5cbmV4cG9ydCB7IHZpc3VhbEVsZW1lbnQgfTtcbiIsImltcG9ydCB7IHdhcm5PbmNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvd2Fybi1vbmNlLm1qcyc7XG5pbXBvcnQgeyBtb3Rpb25WYWx1ZSB9IGZyb20gJy4uLy4uL3ZhbHVlL2luZGV4Lm1qcyc7XG5pbXBvcnQgeyBpc01vdGlvblZhbHVlIH0gZnJvbSAnLi4vLi4vdmFsdWUvdXRpbHMvaXMtbW90aW9uLXZhbHVlLm1qcyc7XG5cbmZ1bmN0aW9uIHVwZGF0ZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyhlbGVtZW50LCBuZXh0LCBwcmV2KSB7XG4gICAgdmFyIF9hO1xuICAgIGZvciAodmFyIGtleSBpbiBuZXh0KSB7XG4gICAgICAgIHZhciBuZXh0VmFsdWUgPSBuZXh0W2tleV07XG4gICAgICAgIHZhciBwcmV2VmFsdWUgPSBwcmV2W2tleV07XG4gICAgICAgIGlmIChpc01vdGlvblZhbHVlKG5leHRWYWx1ZSkpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgdGhpcyBpcyBhIG1vdGlvbiB2YWx1ZSBmb3VuZCBpbiBwcm9wcyBvciBzdHlsZSwgd2Ugd2FudCB0byBhZGQgaXRcbiAgICAgICAgICAgICAqIHRvIG91ciB2aXN1YWwgZWxlbWVudCdzIG1vdGlvbiB2YWx1ZSBtYXAuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGVsZW1lbnQuYWRkVmFsdWUoa2V5LCBuZXh0VmFsdWUpO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBDaGVjayB0aGUgdmVyc2lvbiBvZiB0aGUgaW5jb21pbmcgbW90aW9uIHZhbHVlIHdpdGggdGhpcyB2ZXJzaW9uXG4gICAgICAgICAgICAgKiBhbmQgd2FybiBhZ2FpbnN0IG1pc21hdGNoZXMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XG4gICAgICAgICAgICAgICAgd2Fybk9uY2UobmV4dFZhbHVlLnZlcnNpb24gPT09IFwiNi41LjFcIiwgXCJBdHRlbXB0aW5nIHRvIG1peCBGcmFtZXIgTW90aW9uIHZlcnNpb25zIFwiLmNvbmNhdChuZXh0VmFsdWUudmVyc2lvbiwgXCIgd2l0aCA2LjUuMSBtYXkgbm90IHdvcmsgYXMgZXhwZWN0ZWQuXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc01vdGlvblZhbHVlKHByZXZWYWx1ZSkpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgd2UncmUgc3dhcHBpbmcgdG8gYSBuZXcgbW90aW9uIHZhbHVlLCBjcmVhdGUgYSBuZXcgbW90aW9uIHZhbHVlXG4gICAgICAgICAgICAgKiBmcm9tIHRoYXRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZWxlbWVudC5hZGRWYWx1ZShrZXksIG1vdGlvblZhbHVlKG5leHRWYWx1ZSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByZXZWYWx1ZSAhPT0gbmV4dFZhbHVlKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHRoaXMgaXMgYSBmbGF0IHZhbHVlIHRoYXQgaGFzIGNoYW5nZWQsIHVwZGF0ZSB0aGUgbW90aW9uIHZhbHVlXG4gICAgICAgICAgICAgKiBvciBjcmVhdGUgb25lIGlmIGl0IGRvZXNuJ3QgZXhpc3QuIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIGlmIHdlJ3JlXG4gICAgICAgICAgICAgKiBub3QgaGFuZGxpbmcgdGhlIHZhbHVlIHdpdGggb3VyIGFuaW1hdGlvbiBzdGF0ZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQuaGFzVmFsdWUoa2V5KSkge1xuICAgICAgICAgICAgICAgIHZhciBleGlzdGluZ1ZhbHVlID0gZWxlbWVudC5nZXRWYWx1ZShrZXkpO1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IE9ubHkgdXBkYXRlIHZhbHVlcyB0aGF0IGFyZW4ndCBiZWluZyBhbmltYXRlZCBvciBldmVuIGxvb2tlZCBhdFxuICAgICAgICAgICAgICAgICFleGlzdGluZ1ZhbHVlLmhhc0FuaW1hdGVkICYmIGV4aXN0aW5nVmFsdWUuc2V0KG5leHRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmFkZFZhbHVlKGtleSwgbW90aW9uVmFsdWUoKF9hID0gZWxlbWVudC5nZXRTdGF0aWNWYWx1ZShrZXkpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBuZXh0VmFsdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBIYW5kbGUgcmVtb3ZlZCB2YWx1ZXNcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJldikge1xuICAgICAgICBpZiAobmV4dFtrZXldID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZVZhbHVlKGtleSk7XG4gICAgfVxuICAgIHJldHVybiBuZXh0O1xufVxuXG5leHBvcnQgeyB1cGRhdGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMgfTtcbiIsImltcG9ydCB7IF9fcmVzdCwgX19hc3NpZ24sIF9fcmVhZCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IGludmFyaWFudCB9IGZyb20gJ2hleS1saXN0ZW4nO1xuXG5mdW5jdGlvbiBpc0NTU1ZhcmlhYmxlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS5zdGFydHNXaXRoKFwidmFyKC0tXCIpO1xufVxuLyoqXG4gKiBQYXJzZSBGcmFtZXIncyBzcGVjaWFsIENTUyB2YXJpYWJsZSBmb3JtYXQgaW50byBhIENTUyB0b2tlbiBhbmQgYSBmYWxsYmFjay5cbiAqXG4gKiBgYGBcbiAqIGB2YXIoLS1mb28sICNmZmYpYCA9PiBbYC0tZm9vYCwgJyNmZmYnXVxuICogYGBgXG4gKlxuICogQHBhcmFtIGN1cnJlbnRcbiAqL1xudmFyIGNzc1ZhcmlhYmxlUmVnZXggPSAvdmFyXFwoKC0tW2EtekEtWjAtOS1fXSspLD8gPyhbYS16QS1aMC05ICgpJSMuLC1dKyk/XFwpLztcbmZ1bmN0aW9uIHBhcnNlQ1NTVmFyaWFibGUoY3VycmVudCkge1xuICAgIHZhciBtYXRjaCA9IGNzc1ZhcmlhYmxlUmVnZXguZXhlYyhjdXJyZW50KTtcbiAgICBpZiAoIW1hdGNoKVxuICAgICAgICByZXR1cm4gWyxdO1xuICAgIHZhciBfYSA9IF9fcmVhZChtYXRjaCwgMyksIHRva2VuID0gX2FbMV0sIGZhbGxiYWNrID0gX2FbMl07XG4gICAgcmV0dXJuIFt0b2tlbiwgZmFsbGJhY2tdO1xufVxudmFyIG1heERlcHRoID0gNDtcbmZ1bmN0aW9uIGdldFZhcmlhYmxlVmFsdWUoY3VycmVudCwgZWxlbWVudCwgZGVwdGgpIHtcbiAgICBpZiAoZGVwdGggPT09IHZvaWQgMCkgeyBkZXB0aCA9IDE7IH1cbiAgICBpbnZhcmlhbnQoZGVwdGggPD0gbWF4RGVwdGgsIFwiTWF4IENTUyB2YXJpYWJsZSBmYWxsYmFjayBkZXB0aCBkZXRlY3RlZCBpbiBwcm9wZXJ0eSBcXFwiXCIuY29uY2F0KGN1cnJlbnQsIFwiXFxcIi4gVGhpcyBtYXkgaW5kaWNhdGUgYSBjaXJjdWxhciBmYWxsYmFjayBkZXBlbmRlbmN5LlwiKSk7XG4gICAgdmFyIF9hID0gX19yZWFkKHBhcnNlQ1NTVmFyaWFibGUoY3VycmVudCksIDIpLCB0b2tlbiA9IF9hWzBdLCBmYWxsYmFjayA9IF9hWzFdO1xuICAgIC8vIE5vIENTUyB2YXJpYWJsZSBkZXRlY3RlZFxuICAgIGlmICghdG9rZW4pXG4gICAgICAgIHJldHVybjtcbiAgICAvLyBBdHRlbXB0IHRvIHJlYWQgdGhpcyBDU1MgdmFyaWFibGUgb2ZmIHRoZSBlbGVtZW50XG4gICAgdmFyIHJlc29sdmVkID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZSh0b2tlbik7XG4gICAgaWYgKHJlc29sdmVkKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlZC50cmltKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQ1NTVmFyaWFibGUoZmFsbGJhY2spKSB7XG4gICAgICAgIC8vIFRoZSBmYWxsYmFjayBtaWdodCBpdHNlbGYgYmUgYSBDU1MgdmFyaWFibGUsIGluIHdoaWNoIGNhc2Ugd2UgYXR0ZW1wdCB0byByZXNvbHZlIGl0IHRvby5cbiAgICAgICAgcmV0dXJuIGdldFZhcmlhYmxlVmFsdWUoZmFsbGJhY2ssIGVsZW1lbnQsIGRlcHRoICsgMSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgfVxufVxuLyoqXG4gKiBSZXNvbHZlIENTUyB2YXJpYWJsZXMgZnJvbVxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiByZXNvbHZlQ1NTVmFyaWFibGVzKHZpc3VhbEVsZW1lbnQsIF9hLCB0cmFuc2l0aW9uRW5kKSB7XG4gICAgdmFyIF9iO1xuICAgIHZhciB0YXJnZXQgPSBfX3Jlc3QoX2EsIFtdKTtcbiAgICB2YXIgZWxlbWVudCA9IHZpc3VhbEVsZW1lbnQuZ2V0SW5zdGFuY2UoKTtcbiAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudCkpXG4gICAgICAgIHJldHVybiB7IHRhcmdldDogdGFyZ2V0LCB0cmFuc2l0aW9uRW5kOiB0cmFuc2l0aW9uRW5kIH07XG4gICAgLy8gSWYgYHRyYW5zaXRpb25FbmRgIGlzbid0IGB1bmRlZmluZWRgLCBjbG9uZSBpdC4gV2UgY291bGQgY2xvbmUgYHRhcmdldGAgYW5kIGB0cmFuc2l0aW9uRW5kYFxuICAgIC8vIG9ubHkgaWYgdGhleSBjaGFuZ2UgYnV0IEkgdGhpbmsgdGhpcyByZWFkcyBjbGVhcmVyIGFuZCB0aGlzIGlzbid0IGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgcGF0aC5cbiAgICBpZiAodHJhbnNpdGlvbkVuZCkge1xuICAgICAgICB0cmFuc2l0aW9uRW5kID0gX19hc3NpZ24oe30sIHRyYW5zaXRpb25FbmQpO1xuICAgIH1cbiAgICAvLyBHbyB0aHJvdWdoIGV4aXN0aW5nIGBNb3Rpb25WYWx1ZWBzIGFuZCBlbnN1cmUgYW55IGV4aXN0aW5nIENTUyB2YXJpYWJsZXMgYXJlIHJlc29sdmVkXG4gICAgdmlzdWFsRWxlbWVudC5mb3JFYWNoVmFsdWUoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBjdXJyZW50ID0gdmFsdWUuZ2V0KCk7XG4gICAgICAgIGlmICghaXNDU1NWYXJpYWJsZShjdXJyZW50KSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHJlc29sdmVkID0gZ2V0VmFyaWFibGVWYWx1ZShjdXJyZW50LCBlbGVtZW50KTtcbiAgICAgICAgaWYgKHJlc29sdmVkKVxuICAgICAgICAgICAgdmFsdWUuc2V0KHJlc29sdmVkKTtcbiAgICB9KTtcbiAgICAvLyBDeWNsZSB0aHJvdWdoIGV2ZXJ5IHRhcmdldCBwcm9wZXJ0eSBhbmQgcmVzb2x2ZSBDU1MgdmFyaWFibGVzLiBDdXJyZW50bHlcbiAgICAvLyB3ZSBvbmx5IHJlYWQgc2luZ2xlLXZhciBwcm9wZXJ0aWVzIGxpa2UgYHZhcigtLWZvbylgLCBub3QgYGNhbGModmFyKC0tZm9vKSArIDIwcHgpYFxuICAgIGZvciAodmFyIGtleSBpbiB0YXJnZXQpIHtcbiAgICAgICAgdmFyIGN1cnJlbnQgPSB0YXJnZXRba2V5XTtcbiAgICAgICAgaWYgKCFpc0NTU1ZhcmlhYmxlKGN1cnJlbnQpKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIHZhciByZXNvbHZlZCA9IGdldFZhcmlhYmxlVmFsdWUoY3VycmVudCwgZWxlbWVudCk7XG4gICAgICAgIGlmICghcmVzb2x2ZWQpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgLy8gQ2xvbmUgdGFyZ2V0IGlmIGl0IGhhc24ndCBhbHJlYWR5IGJlZW5cbiAgICAgICAgdGFyZ2V0W2tleV0gPSByZXNvbHZlZDtcbiAgICAgICAgLy8gSWYgdGhlIHVzZXIgaGFzbid0IGFscmVhZHkgc2V0IHRoaXMga2V5IG9uIGB0cmFuc2l0aW9uRW5kYCwgc2V0IGl0IHRvIHRoZSB1bnJlc29sdmVkXG4gICAgICAgIC8vIENTUyB2YXJpYWJsZS4gVGhpcyB3aWxsIGVuc3VyZSB0aGF0IGFmdGVyIHRoZSBhbmltYXRpb24gdGhlIGNvbXBvbmVudCB3aWxsIHJlZmxlY3RcbiAgICAgICAgLy8gY2hhbmdlcyBpbiB0aGUgdmFsdWUgb2YgdGhlIENTUyB2YXJpYWJsZS5cbiAgICAgICAgaWYgKHRyYW5zaXRpb25FbmQpXG4gICAgICAgICAgICAoX2IgPSB0cmFuc2l0aW9uRW5kW2tleV0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICh0cmFuc2l0aW9uRW5kW2tleV0gPSBjdXJyZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHsgdGFyZ2V0OiB0YXJnZXQsIHRyYW5zaXRpb25FbmQ6IHRyYW5zaXRpb25FbmQgfTtcbn1cblxuZXhwb3J0IHsgY3NzVmFyaWFibGVSZWdleCwgcGFyc2VDU1NWYXJpYWJsZSwgcmVzb2x2ZUNTU1ZhcmlhYmxlcyB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24sIF9fcmVhZCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IG51bWJlciwgcHggfSBmcm9tICdzdHlsZS12YWx1ZS10eXBlcyc7XG5pbXBvcnQgeyBpc0tleWZyYW1lc1RhcmdldCB9IGZyb20gJy4uLy4uLy4uL2FuaW1hdGlvbi91dGlscy9pcy1rZXlmcmFtZXMtdGFyZ2V0Lm1qcyc7XG5pbXBvcnQgeyBpbnZhcmlhbnQgfSBmcm9tICdoZXktbGlzdGVuJztcbmltcG9ydCB7IHRyYW5zZm9ybVByb3BzIH0gZnJvbSAnLi4vLi4vaHRtbC91dGlscy90cmFuc2Zvcm0ubWpzJztcbmltcG9ydCB7IGZpbmREaW1lbnNpb25WYWx1ZVR5cGUgfSBmcm9tICcuLi92YWx1ZS10eXBlcy9kaW1lbnNpb25zLm1qcyc7XG5cbnZhciBwb3NpdGlvbmFsS2V5cyA9IG5ldyBTZXQoW1xuICAgIFwid2lkdGhcIixcbiAgICBcImhlaWdodFwiLFxuICAgIFwidG9wXCIsXG4gICAgXCJsZWZ0XCIsXG4gICAgXCJyaWdodFwiLFxuICAgIFwiYm90dG9tXCIsXG4gICAgXCJ4XCIsXG4gICAgXCJ5XCIsXG5dKTtcbnZhciBpc1Bvc2l0aW9uYWxLZXkgPSBmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBwb3NpdGlvbmFsS2V5cy5oYXMoa2V5KTsgfTtcbnZhciBoYXNQb3NpdGlvbmFsS2V5ID0gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0YXJnZXQpLnNvbWUoaXNQb3NpdGlvbmFsS2V5KTtcbn07XG52YXIgc2V0QW5kUmVzZXRWZWxvY2l0eSA9IGZ1bmN0aW9uICh2YWx1ZSwgdG8pIHtcbiAgICAvLyBMb29rcyBvZGQgYnV0IHNldHRpbmcgaXQgdHdpY2UgZG9lc24ndCByZW5kZXIsIGl0J2xsIGp1c3RcbiAgICAvLyBzZXQgYm90aCBwcmV2IGFuZCBjdXJyZW50IHRvIHRoZSBsYXRlc3QgdmFsdWVcbiAgICB2YWx1ZS5zZXQodG8sIGZhbHNlKTtcbiAgICB2YWx1ZS5zZXQodG8pO1xufTtcbnZhciBpc051bU9yUHhUeXBlID0gZnVuY3Rpb24gKHYpIHtcbiAgICByZXR1cm4gdiA9PT0gbnVtYmVyIHx8IHYgPT09IHB4O1xufTtcbnZhciBCb3VuZGluZ0JveERpbWVuc2lvbjtcbihmdW5jdGlvbiAoQm91bmRpbmdCb3hEaW1lbnNpb24pIHtcbiAgICBCb3VuZGluZ0JveERpbWVuc2lvbltcIndpZHRoXCJdID0gXCJ3aWR0aFwiO1xuICAgIEJvdW5kaW5nQm94RGltZW5zaW9uW1wiaGVpZ2h0XCJdID0gXCJoZWlnaHRcIjtcbiAgICBCb3VuZGluZ0JveERpbWVuc2lvbltcImxlZnRcIl0gPSBcImxlZnRcIjtcbiAgICBCb3VuZGluZ0JveERpbWVuc2lvbltcInJpZ2h0XCJdID0gXCJyaWdodFwiO1xuICAgIEJvdW5kaW5nQm94RGltZW5zaW9uW1widG9wXCJdID0gXCJ0b3BcIjtcbiAgICBCb3VuZGluZ0JveERpbWVuc2lvbltcImJvdHRvbVwiXSA9IFwiYm90dG9tXCI7XG59KShCb3VuZGluZ0JveERpbWVuc2lvbiB8fCAoQm91bmRpbmdCb3hEaW1lbnNpb24gPSB7fSkpO1xudmFyIGdldFBvc0Zyb21NYXRyaXggPSBmdW5jdGlvbiAobWF0cml4LCBwb3MpIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdChtYXRyaXguc3BsaXQoXCIsIFwiKVtwb3NdKTtcbn07XG52YXIgZ2V0VHJhbnNsYXRlRnJvbU1hdHJpeCA9IGZ1bmN0aW9uIChwb3MyLCBwb3MzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChfYmJveCwgX2EpIHtcbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IF9hLnRyYW5zZm9ybTtcbiAgICAgICAgaWYgKHRyYW5zZm9ybSA9PT0gXCJub25lXCIgfHwgIXRyYW5zZm9ybSlcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB2YXIgbWF0cml4M2QgPSB0cmFuc2Zvcm0ubWF0Y2goL15tYXRyaXgzZFxcKCguKylcXCkkLyk7XG4gICAgICAgIGlmIChtYXRyaXgzZCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldFBvc0Zyb21NYXRyaXgobWF0cml4M2RbMV0sIHBvczMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIG1hdHJpeCA9IHRyYW5zZm9ybS5tYXRjaCgvXm1hdHJpeFxcKCguKylcXCkkLyk7XG4gICAgICAgICAgICBpZiAobWF0cml4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldFBvc0Zyb21NYXRyaXgobWF0cml4WzFdLCBwb3MyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn07XG52YXIgdHJhbnNmb3JtS2V5cyA9IG5ldyBTZXQoW1wieFwiLCBcInlcIiwgXCJ6XCJdKTtcbnZhciBub25UcmFuc2xhdGlvbmFsVHJhbnNmb3JtS2V5cyA9IHRyYW5zZm9ybVByb3BzLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7IHJldHVybiAhdHJhbnNmb3JtS2V5cy5oYXMoa2V5KTsgfSk7XG5mdW5jdGlvbiByZW1vdmVOb25UcmFuc2xhdGlvbmFsVHJhbnNmb3JtKHZpc3VhbEVsZW1lbnQpIHtcbiAgICB2YXIgcmVtb3ZlZFRyYW5zZm9ybXMgPSBbXTtcbiAgICBub25UcmFuc2xhdGlvbmFsVHJhbnNmb3JtS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gdmlzdWFsRWxlbWVudC5nZXRWYWx1ZShrZXkpO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVtb3ZlZFRyYW5zZm9ybXMucHVzaChba2V5LCB2YWx1ZS5nZXQoKV0pO1xuICAgICAgICAgICAgdmFsdWUuc2V0KGtleS5zdGFydHNXaXRoKFwic2NhbGVcIikgPyAxIDogMCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBBcHBseSBjaGFuZ2VzIHRvIGVsZW1lbnQgYmVmb3JlIG1lYXN1cmVtZW50XG4gICAgaWYgKHJlbW92ZWRUcmFuc2Zvcm1zLmxlbmd0aClcbiAgICAgICAgdmlzdWFsRWxlbWVudC5zeW5jUmVuZGVyKCk7XG4gICAgcmV0dXJuIHJlbW92ZWRUcmFuc2Zvcm1zO1xufVxudmFyIHBvc2l0aW9uYWxWYWx1ZXMgPSB7XG4gICAgLy8gRGltZW5zaW9uc1xuICAgIHdpZHRoOiBmdW5jdGlvbiAoX2EsIF9iKSB7XG4gICAgICAgIHZhciB4ID0gX2EueDtcbiAgICAgICAgdmFyIF9jID0gX2IucGFkZGluZ0xlZnQsIHBhZGRpbmdMZWZ0ID0gX2MgPT09IHZvaWQgMCA/IFwiMFwiIDogX2MsIF9kID0gX2IucGFkZGluZ1JpZ2h0LCBwYWRkaW5nUmlnaHQgPSBfZCA9PT0gdm9pZCAwID8gXCIwXCIgOiBfZDtcbiAgICAgICAgcmV0dXJuIHgubWF4IC0geC5taW4gLSBwYXJzZUZsb2F0KHBhZGRpbmdMZWZ0KSAtIHBhcnNlRmxvYXQocGFkZGluZ1JpZ2h0KTtcbiAgICB9LFxuICAgIGhlaWdodDogZnVuY3Rpb24gKF9hLCBfYikge1xuICAgICAgICB2YXIgeSA9IF9hLnk7XG4gICAgICAgIHZhciBfYyA9IF9iLnBhZGRpbmdUb3AsIHBhZGRpbmdUb3AgPSBfYyA9PT0gdm9pZCAwID8gXCIwXCIgOiBfYywgX2QgPSBfYi5wYWRkaW5nQm90dG9tLCBwYWRkaW5nQm90dG9tID0gX2QgPT09IHZvaWQgMCA/IFwiMFwiIDogX2Q7XG4gICAgICAgIHJldHVybiB5Lm1heCAtIHkubWluIC0gcGFyc2VGbG9hdChwYWRkaW5nVG9wKSAtIHBhcnNlRmxvYXQocGFkZGluZ0JvdHRvbSk7XG4gICAgfSxcbiAgICB0b3A6IGZ1bmN0aW9uIChfYmJveCwgX2EpIHtcbiAgICAgICAgdmFyIHRvcCA9IF9hLnRvcDtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodG9wKTtcbiAgICB9LFxuICAgIGxlZnQ6IGZ1bmN0aW9uIChfYmJveCwgX2EpIHtcbiAgICAgICAgdmFyIGxlZnQgPSBfYS5sZWZ0O1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChsZWZ0KTtcbiAgICB9LFxuICAgIGJvdHRvbTogZnVuY3Rpb24gKF9hLCBfYikge1xuICAgICAgICB2YXIgeSA9IF9hLnk7XG4gICAgICAgIHZhciB0b3AgPSBfYi50b3A7XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHRvcCkgKyAoeS5tYXggLSB5Lm1pbik7XG4gICAgfSxcbiAgICByaWdodDogZnVuY3Rpb24gKF9hLCBfYikge1xuICAgICAgICB2YXIgeCA9IF9hLng7XG4gICAgICAgIHZhciBsZWZ0ID0gX2IubGVmdDtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQobGVmdCkgKyAoeC5tYXggLSB4Lm1pbik7XG4gICAgfSxcbiAgICAvLyBUcmFuc2Zvcm1cbiAgICB4OiBnZXRUcmFuc2xhdGVGcm9tTWF0cml4KDQsIDEzKSxcbiAgICB5OiBnZXRUcmFuc2xhdGVGcm9tTWF0cml4KDUsIDE0KSxcbn07XG52YXIgY29udmVydENoYW5nZWRWYWx1ZVR5cGVzID0gZnVuY3Rpb24gKHRhcmdldCwgdmlzdWFsRWxlbWVudCwgY2hhbmdlZEtleXMpIHtcbiAgICB2YXIgb3JpZ2luQmJveCA9IHZpc3VhbEVsZW1lbnQubWVhc3VyZVZpZXdwb3J0Qm94KCk7XG4gICAgdmFyIGVsZW1lbnQgPSB2aXN1YWxFbGVtZW50LmdldEluc3RhbmNlKCk7XG4gICAgdmFyIGVsZW1lbnRDb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgICB2YXIgZGlzcGxheSA9IGVsZW1lbnRDb21wdXRlZFN0eWxlLmRpc3BsYXk7XG4gICAgdmFyIG9yaWdpbiA9IHt9O1xuICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGN1cnJlbnRseSBzZXQgdG8gZGlzcGxheTogXCJub25lXCIsIG1ha2UgaXQgdmlzaWJsZSBiZWZvcmVcbiAgICAvLyBtZWFzdXJpbmcgdGhlIHRhcmdldCBib3VuZGluZyBib3hcbiAgICBpZiAoZGlzcGxheSA9PT0gXCJub25lXCIpIHtcbiAgICAgICAgdmlzdWFsRWxlbWVudC5zZXRTdGF0aWNWYWx1ZShcImRpc3BsYXlcIiwgdGFyZ2V0LmRpc3BsYXkgfHwgXCJibG9ja1wiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVjb3JkIG9yaWdpbnMgYmVmb3JlIHdlIHJlbmRlciBhbmQgdXBkYXRlIHN0eWxlc1xuICAgICAqL1xuICAgIGNoYW5nZWRLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBvcmlnaW5ba2V5XSA9IHBvc2l0aW9uYWxWYWx1ZXNba2V5XShvcmlnaW5CYm94LCBlbGVtZW50Q29tcHV0ZWRTdHlsZSk7XG4gICAgfSk7XG4gICAgLy8gQXBwbHkgdGhlIGxhdGVzdCB2YWx1ZXMgKGFzIHNldCBpbiBjaGVja0FuZENvbnZlcnRDaGFuZ2VkVmFsdWVUeXBlcylcbiAgICB2aXN1YWxFbGVtZW50LnN5bmNSZW5kZXIoKTtcbiAgICB2YXIgdGFyZ2V0QmJveCA9IHZpc3VhbEVsZW1lbnQubWVhc3VyZVZpZXdwb3J0Qm94KCk7XG4gICAgY2hhbmdlZEtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIC8vIFJlc3RvcmUgc3R5bGVzIHRvIHRoZWlyICoqY2FsY3VsYXRlZCBjb21wdXRlZCBzdHlsZSoqLCBub3QgdGhlaXIgYWN0dWFsXG4gICAgICAgIC8vIG9yaWdpbmFsbHkgc2V0IHN0eWxlLiBUaGlzIGFsbG93cyB1cyB0byBhbmltYXRlIGJldHdlZW4gZXF1aXZhbGVudCBwaXhlbCB1bml0cy5cbiAgICAgICAgdmFyIHZhbHVlID0gdmlzdWFsRWxlbWVudC5nZXRWYWx1ZShrZXkpO1xuICAgICAgICBzZXRBbmRSZXNldFZlbG9jaXR5KHZhbHVlLCBvcmlnaW5ba2V5XSk7XG4gICAgICAgIHRhcmdldFtrZXldID0gcG9zaXRpb25hbFZhbHVlc1trZXldKHRhcmdldEJib3gsIGVsZW1lbnRDb21wdXRlZFN0eWxlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGFyZ2V0O1xufTtcbnZhciBjaGVja0FuZENvbnZlcnRDaGFuZ2VkVmFsdWVUeXBlcyA9IGZ1bmN0aW9uICh2aXN1YWxFbGVtZW50LCB0YXJnZXQsIG9yaWdpbiwgdHJhbnNpdGlvbkVuZCkge1xuICAgIGlmIChvcmlnaW4gPT09IHZvaWQgMCkgeyBvcmlnaW4gPSB7fTsgfVxuICAgIGlmICh0cmFuc2l0aW9uRW5kID09PSB2b2lkIDApIHsgdHJhbnNpdGlvbkVuZCA9IHt9OyB9XG4gICAgdGFyZ2V0ID0gX19hc3NpZ24oe30sIHRhcmdldCk7XG4gICAgdHJhbnNpdGlvbkVuZCA9IF9fYXNzaWduKHt9LCB0cmFuc2l0aW9uRW5kKTtcbiAgICB2YXIgdGFyZ2V0UG9zaXRpb25hbEtleXMgPSBPYmplY3Qua2V5cyh0YXJnZXQpLmZpbHRlcihpc1Bvc2l0aW9uYWxLZXkpO1xuICAgIC8vIFdlIHdhbnQgdG8gcmVtb3ZlIGFueSB0cmFuc2Zvcm0gdmFsdWVzIHRoYXQgY291bGQgYWZmZWN0IHRoZSBlbGVtZW50J3MgYm91bmRpbmcgYm94IGJlZm9yZVxuICAgIC8vIGl0J3MgbWVhc3VyZWQuIFdlJ2xsIHJlYXBwbHkgdGhlc2UgbGF0ZXIuXG4gICAgdmFyIHJlbW92ZWRUcmFuc2Zvcm1WYWx1ZXMgPSBbXTtcbiAgICB2YXIgaGFzQXR0ZW1wdGVkVG9SZW1vdmVUcmFuc2Zvcm1WYWx1ZXMgPSBmYWxzZTtcbiAgICB2YXIgY2hhbmdlZFZhbHVlVHlwZUtleXMgPSBbXTtcbiAgICB0YXJnZXRQb3NpdGlvbmFsS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gdmlzdWFsRWxlbWVudC5nZXRWYWx1ZShrZXkpO1xuICAgICAgICBpZiAoIXZpc3VhbEVsZW1lbnQuaGFzVmFsdWUoa2V5KSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGZyb20gPSBvcmlnaW5ba2V5XTtcbiAgICAgICAgdmFyIGZyb21UeXBlID0gZmluZERpbWVuc2lvblZhbHVlVHlwZShmcm9tKTtcbiAgICAgICAgdmFyIHRvID0gdGFyZ2V0W2tleV07XG4gICAgICAgIHZhciB0b1R5cGU7XG4gICAgICAgIC8vIFRPRE86IFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgYmFzaWNhbGx5IHRocm93cyBhbiBlcnJvclxuICAgICAgICAvLyBpZiB5b3UgdHJ5IGFuZCBkbyB2YWx1ZSBjb252ZXJzaW9uIHZpYSBrZXlmcmFtZXMuIFRoZXJlJ3MgcHJvYmFibHlcbiAgICAgICAgLy8gYSB3YXkgb2YgZG9pbmcgdGhpcyBidXQgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyB3b3VsZCBuZWVkIGdyZWF0ZXIgc2NydXRpbnksXG4gICAgICAgIC8vIGFzIGl0J2QgYmUgZG9pbmcgbXVsdGlwbGUgcmVzaXplLXJlbWVhc3VyZSBvcGVyYXRpb25zLlxuICAgICAgICBpZiAoaXNLZXlmcmFtZXNUYXJnZXQodG8pKSB7XG4gICAgICAgICAgICB2YXIgbnVtS2V5ZnJhbWVzID0gdG8ubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGZyb21JbmRleCA9IHRvWzBdID09PSBudWxsID8gMSA6IDA7XG4gICAgICAgICAgICBmcm9tID0gdG9bZnJvbUluZGV4XTtcbiAgICAgICAgICAgIGZyb21UeXBlID0gZmluZERpbWVuc2lvblZhbHVlVHlwZShmcm9tKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBmcm9tSW5kZXg7IGkgPCBudW1LZXlmcmFtZXM7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghdG9UeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvVHlwZSA9IGZpbmREaW1lbnNpb25WYWx1ZVR5cGUodG9baV0pO1xuICAgICAgICAgICAgICAgICAgICBpbnZhcmlhbnQodG9UeXBlID09PSBmcm9tVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKGlzTnVtT3JQeFR5cGUoZnJvbVR5cGUpICYmIGlzTnVtT3JQeFR5cGUodG9UeXBlKSksIFwiS2V5ZnJhbWVzIG11c3QgYmUgb2YgdGhlIHNhbWUgZGltZW5zaW9uIGFzIHRoZSBjdXJyZW50IHZhbHVlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaW52YXJpYW50KGZpbmREaW1lbnNpb25WYWx1ZVR5cGUodG9baV0pID09PSB0b1R5cGUsIFwiQWxsIGtleWZyYW1lcyBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGVcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdG9UeXBlID0gZmluZERpbWVuc2lvblZhbHVlVHlwZSh0byk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZyb21UeXBlICE9PSB0b1R5cGUpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZXkncmUgYm90aCBqdXN0IG51bWJlciBvciBweCwgY29udmVydCB0aGVtIGJvdGggdG8gbnVtYmVycyByYXRoZXIgdGhhblxuICAgICAgICAgICAgLy8gcmVseWluZyBvbiByZXNpemUvcmVtZWFzdXJlIHRvIGNvbnZlcnQgKHdoaWNoIGlzIHdhc3RlZnVsIGluIHRoaXMgc2l0dWF0aW9uKVxuICAgICAgICAgICAgaWYgKGlzTnVtT3JQeFR5cGUoZnJvbVR5cGUpICYmIGlzTnVtT3JQeFR5cGUodG9UeXBlKSkge1xuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gdmFsdWUuZ2V0KCk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLnNldChwYXJzZUZsb2F0KGN1cnJlbnQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0byA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHBhcnNlRmxvYXQodG8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRvKSAmJiB0b1R5cGUgPT09IHB4KSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gdG8ubWFwKHBhcnNlRmxvYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKChmcm9tVHlwZSA9PT0gbnVsbCB8fCBmcm9tVHlwZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZnJvbVR5cGUudHJhbnNmb3JtKSAmJlxuICAgICAgICAgICAgICAgICh0b1R5cGUgPT09IG51bGwgfHwgdG9UeXBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0b1R5cGUudHJhbnNmb3JtKSAmJlxuICAgICAgICAgICAgICAgIChmcm9tID09PSAwIHx8IHRvID09PSAwKSkge1xuICAgICAgICAgICAgICAgIC8vIElmIG9uZSBvciB0aGUgb3RoZXIgdmFsdWUgaXMgMCwgaXQncyBzYWZlIHRvIGNvZXJjZSBpdCB0byB0aGVcbiAgICAgICAgICAgICAgICAvLyB0eXBlIG9mIHRoZSBvdGhlciB3aXRob3V0IG1lYXN1cmVtZW50XG4gICAgICAgICAgICAgICAgaWYgKGZyb20gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUuc2V0KHRvVHlwZS50cmFuc2Zvcm0oZnJvbSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBmcm9tVHlwZS50cmFuc2Zvcm0odG8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIGdvaW5nIHRvIGRvIHZhbHVlIGNvbnZlcnNpb24gdmlhIERPTSBtZWFzdXJlbWVudHMsIHdlIGZpcnN0XG4gICAgICAgICAgICAgICAgLy8gbmVlZCB0byByZW1vdmUgbm9uLXBvc2l0aW9uYWwgdHJhbnNmb3JtIHZhbHVlcyB0aGF0IGNvdWxkIGFmZmVjdCB0aGUgYmJveCBtZWFzdXJlbWVudHMuXG4gICAgICAgICAgICAgICAgaWYgKCFoYXNBdHRlbXB0ZWRUb1JlbW92ZVRyYW5zZm9ybVZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVkVHJhbnNmb3JtVmFsdWVzID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZU5vblRyYW5zbGF0aW9uYWxUcmFuc2Zvcm0odmlzdWFsRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGhhc0F0dGVtcHRlZFRvUmVtb3ZlVHJhbnNmb3JtVmFsdWVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2hhbmdlZFZhbHVlVHlwZUtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIHRyYW5zaXRpb25FbmRba2V5XSA9XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25FbmRba2V5XSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRyYW5zaXRpb25FbmRba2V5XVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0YXJnZXRba2V5XTtcbiAgICAgICAgICAgICAgICBzZXRBbmRSZXNldFZlbG9jaXR5KHZhbHVlLCB0byk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoY2hhbmdlZFZhbHVlVHlwZUtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBzY3JvbGxZXzEgPSBjaGFuZ2VkVmFsdWVUeXBlS2V5cy5pbmRleE9mKFwiaGVpZ2h0XCIpID49IDBcbiAgICAgICAgICAgID8gd2luZG93LnBhZ2VZT2Zmc2V0XG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIHZhciBjb252ZXJ0ZWRUYXJnZXQgPSBjb252ZXJ0Q2hhbmdlZFZhbHVlVHlwZXModGFyZ2V0LCB2aXN1YWxFbGVtZW50LCBjaGFuZ2VkVmFsdWVUeXBlS2V5cyk7XG4gICAgICAgIC8vIElmIHdlIHJlbW92ZWQgdHJhbnNmb3JtIHZhbHVlcywgcmVhcHBseSB0aGVtIGJlZm9yZSB0aGUgbmV4dCByZW5kZXJcbiAgICAgICAgaWYgKHJlbW92ZWRUcmFuc2Zvcm1WYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZW1vdmVkVHJhbnNmb3JtVmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9iID0gX19yZWFkKF9hLCAyKSwga2V5ID0gX2JbMF0sIHZhbHVlID0gX2JbMV07XG4gICAgICAgICAgICAgICAgdmlzdWFsRWxlbWVudC5nZXRWYWx1ZShrZXkpLnNldCh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZWFwcGx5IG9yaWdpbmFsIHZhbHVlc1xuICAgICAgICB2aXN1YWxFbGVtZW50LnN5bmNSZW5kZXIoKTtcbiAgICAgICAgLy8gUmVzdG9yZSBzY3JvbGwgcG9zaXRpb25cbiAgICAgICAgaWYgKHNjcm9sbFlfMSAhPT0gbnVsbClcbiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogc2Nyb2xsWV8xIH0pO1xuICAgICAgICByZXR1cm4geyB0YXJnZXQ6IGNvbnZlcnRlZFRhcmdldCwgdHJhbnNpdGlvbkVuZDogdHJhbnNpdGlvbkVuZCB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHsgdGFyZ2V0OiB0YXJnZXQsIHRyYW5zaXRpb25FbmQ6IHRyYW5zaXRpb25FbmQgfTtcbiAgICB9XG59O1xuLyoqXG4gKiBDb252ZXJ0IHZhbHVlIHR5cGVzIGZvciB4L3kvd2lkdGgvaGVpZ2h0L3RvcC9sZWZ0L2JvdHRvbS9yaWdodFxuICpcbiAqIEFsbG93cyBhbmltYXRpb24gYmV0d2VlbiBgJ2F1dG8nYCAtPiBgJzEwMCUnYCBvciBgMGAgLT4gYCdjYWxjKDUwJSAtIDEwdncpJ2BcbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gdW5pdENvbnZlcnNpb24odmlzdWFsRWxlbWVudCwgdGFyZ2V0LCBvcmlnaW4sIHRyYW5zaXRpb25FbmQpIHtcbiAgICByZXR1cm4gaGFzUG9zaXRpb25hbEtleSh0YXJnZXQpXG4gICAgICAgID8gY2hlY2tBbmRDb252ZXJ0Q2hhbmdlZFZhbHVlVHlwZXModmlzdWFsRWxlbWVudCwgdGFyZ2V0LCBvcmlnaW4sIHRyYW5zaXRpb25FbmQpXG4gICAgICAgIDogeyB0YXJnZXQ6IHRhcmdldCwgdHJhbnNpdGlvbkVuZDogdHJhbnNpdGlvbkVuZCB9O1xufVxuXG5leHBvcnQgeyBCb3VuZGluZ0JveERpbWVuc2lvbiwgcG9zaXRpb25hbFZhbHVlcywgdW5pdENvbnZlcnNpb24gfTtcbiIsImltcG9ydCB7IHJlc29sdmVDU1NWYXJpYWJsZXMgfSBmcm9tICcuL2Nzcy12YXJpYWJsZXMtY29udmVyc2lvbi5tanMnO1xuaW1wb3J0IHsgdW5pdENvbnZlcnNpb24gfSBmcm9tICcuL3VuaXQtY29udmVyc2lvbi5tanMnO1xuXG4vKipcbiAqIFBhcnNlIGEgRE9NIHZhcmlhbnQgdG8gbWFrZSBpdCBhbmltYXRhYmxlLiBUaGlzIGludm9sdmVzIHJlc29sdmluZyBDU1MgdmFyaWFibGVzXG4gKiBhbmQgZW5zdXJpbmcgYW5pbWF0aW9ucyBsaWtlIFwiMjAlXCIgPT4gXCJjYWxjKDUwdncpXCIgYXJlIHBlcmZvcm1lZCBpbiBwaXhlbHMuXG4gKi9cbnZhciBwYXJzZURvbVZhcmlhbnQgPSBmdW5jdGlvbiAodmlzdWFsRWxlbWVudCwgdGFyZ2V0LCBvcmlnaW4sIHRyYW5zaXRpb25FbmQpIHtcbiAgICB2YXIgcmVzb2x2ZWQgPSByZXNvbHZlQ1NTVmFyaWFibGVzKHZpc3VhbEVsZW1lbnQsIHRhcmdldCwgdHJhbnNpdGlvbkVuZCk7XG4gICAgdGFyZ2V0ID0gcmVzb2x2ZWQudGFyZ2V0O1xuICAgIHRyYW5zaXRpb25FbmQgPSByZXNvbHZlZC50cmFuc2l0aW9uRW5kO1xuICAgIHJldHVybiB1bml0Q29udmVyc2lvbih2aXN1YWxFbGVtZW50LCB0YXJnZXQsIG9yaWdpbiwgdHJhbnNpdGlvbkVuZCk7XG59O1xuXG5leHBvcnQgeyBwYXJzZURvbVZhcmlhbnQgfTtcbiIsImltcG9ydCB7IF9fcmVzdCwgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyB2aXN1YWxFbGVtZW50IH0gZnJvbSAnLi4vaW5kZXgubWpzJztcbmltcG9ydCB7IGdldE9yaWdpbiwgY2hlY2tUYXJnZXRGb3JOZXdWYWx1ZXMgfSBmcm9tICcuLi91dGlscy9zZXR0ZXJzLm1qcyc7XG5pbXBvcnQgeyBidWlsZEhUTUxTdHlsZXMgfSBmcm9tICcuL3V0aWxzL2J1aWxkLXN0eWxlcy5tanMnO1xuaW1wb3J0IHsgaXNDU1NWYXJpYWJsZSB9IGZyb20gJy4uL2RvbS91dGlscy9pcy1jc3MtdmFyaWFibGUubWpzJztcbmltcG9ydCB7IHBhcnNlRG9tVmFyaWFudCB9IGZyb20gJy4uL2RvbS91dGlscy9wYXJzZS1kb20tdmFyaWFudC5tanMnO1xuaW1wb3J0IHsgaXNUcmFuc2Zvcm1Qcm9wIH0gZnJvbSAnLi91dGlscy90cmFuc2Zvcm0ubWpzJztcbmltcG9ydCB7IHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyB9IGZyb20gJy4vdXRpbHMvc2NyYXBlLW1vdGlvbi12YWx1ZXMubWpzJztcbmltcG9ydCB7IHJlbmRlckhUTUwgfSBmcm9tICcuL3V0aWxzL3JlbmRlci5tanMnO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFZhbHVlVHlwZSB9IGZyb20gJy4uL2RvbS92YWx1ZS10eXBlcy9kZWZhdWx0cy5tanMnO1xuaW1wb3J0IHsgbWVhc3VyZVZpZXdwb3J0Qm94IH0gZnJvbSAnLi4vLi4vcHJvamVjdGlvbi91dGlscy9tZWFzdXJlLm1qcyc7XG5cbmZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkge1xuICAgIHJldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbn1cbnZhciBodG1sQ29uZmlnID0ge1xuICAgIHRyZWVUeXBlOiBcImRvbVwiLFxuICAgIHJlYWRWYWx1ZUZyb21JbnN0YW5jZTogZnVuY3Rpb24gKGRvbUVsZW1lbnQsIGtleSkge1xuICAgICAgICBpZiAoaXNUcmFuc2Zvcm1Qcm9wKGtleSkpIHtcbiAgICAgICAgICAgIHZhciBkZWZhdWx0VHlwZSA9IGdldERlZmF1bHRWYWx1ZVR5cGUoa2V5KTtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VHlwZSA/IGRlZmF1bHRUeXBlLmRlZmF1bHQgfHwgMCA6IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgY29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZG9tRWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm4gKChpc0NTU1ZhcmlhYmxlKGtleSlcbiAgICAgICAgICAgICAgICA/IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShrZXkpXG4gICAgICAgICAgICAgICAgOiBjb21wdXRlZFN0eWxlW2tleV0pIHx8IDApO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBzb3J0Tm9kZVBvc2l0aW9uOiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAvKipcbiAgICAgICAgICogY29tcGFyZURvY3VtZW50UG9zaXRpb24gcmV0dXJucyBhIGJpdG1hc2ssIGJ5IHVzaW5nIHRoZSBiaXR3aXNlICZcbiAgICAgICAgICogd2UncmUgcmV0dXJuaW5nIHRydWUgaWYgMiBpbiB0aGF0IGJpdG1hc2sgaXMgc2V0IHRvIHRydWUuIDIgaXMgc2V0XG4gICAgICAgICAqIHRvIHRydWUgaWYgYiBwcmVjZWVkcyBhLlxuICAgICAgICAgKi9cbiAgICAgICAgcmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiAyID8gMSA6IC0xO1xuICAgIH0sXG4gICAgZ2V0QmFzZVRhcmdldDogZnVuY3Rpb24gKHByb3BzLCBrZXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gcHJvcHMuc3R5bGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVtrZXldO1xuICAgIH0sXG4gICAgbWVhc3VyZVZpZXdwb3J0Qm94OiBmdW5jdGlvbiAoZWxlbWVudCwgX2EpIHtcbiAgICAgICAgdmFyIHRyYW5zZm9ybVBhZ2VQb2ludCA9IF9hLnRyYW5zZm9ybVBhZ2VQb2ludDtcbiAgICAgICAgcmV0dXJuIG1lYXN1cmVWaWV3cG9ydEJveChlbGVtZW50LCB0cmFuc2Zvcm1QYWdlUG9pbnQpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogUmVzZXQgdGhlIHRyYW5zZm9ybSBvbiB0aGUgY3VycmVudCBFbGVtZW50LiBUaGlzIGlzIGNhbGxlZCBhcyBwYXJ0XG4gICAgICogb2YgYSBiYXRjaGVkIHByb2Nlc3MgYWNyb3NzIHRoZSBlbnRpcmUgbGF5b3V0IHRyZWUuIFRvIHJlbW92ZSB0aGlzIHdyaXRlXG4gICAgICogY3ljbGUgaXQnZCBiZSBpbnRlcmVzdGluZyB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBcInVuZG9cIiBhbGwgdGhlIGN1cnJlbnRcbiAgICAgKiBsYXlvdXQgdHJhbnNmb3JtcyB1cCB0aGUgdHJlZSBpbiB0aGUgc2FtZSB3YXkgdGhpcy5nZXRCb3VuZGluZ0JveFdpdGhvdXRUcmFuc2Zvcm1zXG4gICAgICogd29ya3NcbiAgICAgKi9cbiAgICByZXNldFRyYW5zZm9ybTogZnVuY3Rpb24gKGVsZW1lbnQsIGRvbUVsZW1lbnQsIHByb3BzKSB7XG4gICAgICAgIHZhciB0cmFuc2Zvcm1UZW1wbGF0ZSA9IHByb3BzLnRyYW5zZm9ybVRlbXBsYXRlO1xuICAgICAgICBkb21FbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVRlbXBsYXRlXG4gICAgICAgICAgICA/IHRyYW5zZm9ybVRlbXBsYXRlKHt9LCBcIlwiKVxuICAgICAgICAgICAgOiBcIm5vbmVcIjtcbiAgICAgICAgLy8gRW5zdXJlIHRoYXQgd2hhdGV2ZXIgaGFwcGVucyBuZXh0LCB3ZSByZXN0b3JlIG91ciB0cmFuc2Zvcm0gb24gdGhlIG5leHQgZnJhbWVcbiAgICAgICAgZWxlbWVudC5zY2hlZHVsZVJlbmRlcigpO1xuICAgIH0sXG4gICAgcmVzdG9yZVRyYW5zZm9ybTogZnVuY3Rpb24gKGluc3RhbmNlLCBtdXRhYmxlU3RhdGUpIHtcbiAgICAgICAgaW5zdGFuY2Uuc3R5bGUudHJhbnNmb3JtID0gbXV0YWJsZVN0YXRlLnN0eWxlLnRyYW5zZm9ybTtcbiAgICB9LFxuICAgIHJlbW92ZVZhbHVlRnJvbVJlbmRlclN0YXRlOiBmdW5jdGlvbiAoa2V5LCBfYSkge1xuICAgICAgICB2YXIgdmFycyA9IF9hLnZhcnMsIHN0eWxlID0gX2Euc3R5bGU7XG4gICAgICAgIGRlbGV0ZSB2YXJzW2tleV07XG4gICAgICAgIGRlbGV0ZSBzdHlsZVtrZXldO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogRW5zdXJlIHRoYXQgSFRNTCBhbmQgRnJhbWVyLXNwZWNpZmljIHZhbHVlIHR5cGVzIGxpa2UgYHB4YC0+YCVgIGFuZCBgQ29sb3JgXG4gICAgICogY2FuIGJlIGFuaW1hdGVkIGJ5IE1vdGlvbi5cbiAgICAgKi9cbiAgICBtYWtlVGFyZ2V0QW5pbWF0YWJsZTogZnVuY3Rpb24gKGVsZW1lbnQsIF9hLCBfYiwgaXNNb3VudGVkKSB7XG4gICAgICAgIHZhciB0cmFuc2Zvcm1WYWx1ZXMgPSBfYi50cmFuc2Zvcm1WYWx1ZXM7XG4gICAgICAgIGlmIChpc01vdW50ZWQgPT09IHZvaWQgMCkgeyBpc01vdW50ZWQgPSB0cnVlOyB9XG4gICAgICAgIHZhciB0cmFuc2l0aW9uID0gX2EudHJhbnNpdGlvbiwgdHJhbnNpdGlvbkVuZCA9IF9hLnRyYW5zaXRpb25FbmQsIHRhcmdldCA9IF9fcmVzdChfYSwgW1widHJhbnNpdGlvblwiLCBcInRyYW5zaXRpb25FbmRcIl0pO1xuICAgICAgICB2YXIgb3JpZ2luID0gZ2V0T3JpZ2luKHRhcmdldCwgdHJhbnNpdGlvbiB8fCB7fSwgZWxlbWVudCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBGcmFtZXIgaGFzIHByb3ZpZGVkIGEgZnVuY3Rpb24gdG8gY29udmVydCBgQ29sb3JgIGV0YyB2YWx1ZSB0eXBlcywgY29udmVydCB0aGVtXG4gICAgICAgICAqL1xuICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWVzKSB7XG4gICAgICAgICAgICBpZiAodHJhbnNpdGlvbkVuZClcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uRW5kID0gdHJhbnNmb3JtVmFsdWVzKHRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgICAgaWYgKHRhcmdldClcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSB0cmFuc2Zvcm1WYWx1ZXModGFyZ2V0KTtcbiAgICAgICAgICAgIGlmIChvcmlnaW4pXG4gICAgICAgICAgICAgICAgb3JpZ2luID0gdHJhbnNmb3JtVmFsdWVzKG9yaWdpbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTW91bnRlZCkge1xuICAgICAgICAgICAgY2hlY2tUYXJnZXRGb3JOZXdWYWx1ZXMoZWxlbWVudCwgdGFyZ2V0LCBvcmlnaW4pO1xuICAgICAgICAgICAgdmFyIHBhcnNlZCA9IHBhcnNlRG9tVmFyaWFudChlbGVtZW50LCB0YXJnZXQsIG9yaWdpbiwgdHJhbnNpdGlvbkVuZCk7XG4gICAgICAgICAgICB0cmFuc2l0aW9uRW5kID0gcGFyc2VkLnRyYW5zaXRpb25FbmQ7XG4gICAgICAgICAgICB0YXJnZXQgPSBwYXJzZWQudGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfX2Fzc2lnbih7IHRyYW5zaXRpb246IHRyYW5zaXRpb24sIHRyYW5zaXRpb25FbmQ6IHRyYW5zaXRpb25FbmQgfSwgdGFyZ2V0KTtcbiAgICB9LFxuICAgIHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wczogc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzLFxuICAgIGJ1aWxkOiBmdW5jdGlvbiAoZWxlbWVudCwgcmVuZGVyU3RhdGUsIGxhdGVzdFZhbHVlcywgb3B0aW9ucywgcHJvcHMpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQuaXNWaXNpYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlbmRlclN0YXRlLnN0eWxlLnZpc2liaWxpdHkgPSBlbGVtZW50LmlzVmlzaWJsZVxuICAgICAgICAgICAgICAgID8gXCJ2aXNpYmxlXCJcbiAgICAgICAgICAgICAgICA6IFwiaGlkZGVuXCI7XG4gICAgICAgIH1cbiAgICAgICAgYnVpbGRIVE1MU3R5bGVzKHJlbmRlclN0YXRlLCBsYXRlc3RWYWx1ZXMsIG9wdGlvbnMsIHByb3BzLnRyYW5zZm9ybVRlbXBsYXRlKTtcbiAgICB9LFxuICAgIHJlbmRlcjogcmVuZGVySFRNTCxcbn07XG52YXIgaHRtbFZpc3VhbEVsZW1lbnQgPSB2aXN1YWxFbGVtZW50KGh0bWxDb25maWcpO1xuXG5leHBvcnQgeyBnZXRDb21wdXRlZFN0eWxlLCBodG1sQ29uZmlnLCBodG1sVmlzdWFsRWxlbWVudCB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyB2aXN1YWxFbGVtZW50IH0gZnJvbSAnLi4vaW5kZXgubWpzJztcbmltcG9ydCB7IHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyB9IGZyb20gJy4vdXRpbHMvc2NyYXBlLW1vdGlvbi12YWx1ZXMubWpzJztcbmltcG9ydCB7IGh0bWxDb25maWcgfSBmcm9tICcuLi9odG1sL3Zpc3VhbC1lbGVtZW50Lm1qcyc7XG5pbXBvcnQgeyBidWlsZFNWR0F0dHJzIH0gZnJvbSAnLi91dGlscy9idWlsZC1hdHRycy5tanMnO1xuaW1wb3J0IHsgY2FtZWxUb0Rhc2ggfSBmcm9tICcuLi9kb20vdXRpbHMvY2FtZWwtdG8tZGFzaC5tanMnO1xuaW1wb3J0IHsgY2FtZWxDYXNlQXR0cmlidXRlcyB9IGZyb20gJy4vdXRpbHMvY2FtZWwtY2FzZS1hdHRycy5tanMnO1xuaW1wb3J0IHsgaXNUcmFuc2Zvcm1Qcm9wIH0gZnJvbSAnLi4vaHRtbC91dGlscy90cmFuc2Zvcm0ubWpzJztcbmltcG9ydCB7IHJlbmRlclNWRyB9IGZyb20gJy4vdXRpbHMvcmVuZGVyLm1qcyc7XG5pbXBvcnQgeyBnZXREZWZhdWx0VmFsdWVUeXBlIH0gZnJvbSAnLi4vZG9tL3ZhbHVlLXR5cGVzL2RlZmF1bHRzLm1qcyc7XG5cbnZhciBzdmdWaXN1YWxFbGVtZW50ID0gdmlzdWFsRWxlbWVudChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgaHRtbENvbmZpZyksIHsgZ2V0QmFzZVRhcmdldDogZnVuY3Rpb24gKHByb3BzLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIHByb3BzW2tleV07XG4gICAgfSwgcmVhZFZhbHVlRnJvbUluc3RhbmNlOiBmdW5jdGlvbiAoZG9tRWxlbWVudCwga2V5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGlzVHJhbnNmb3JtUHJvcChrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gKChfYSA9IGdldERlZmF1bHRWYWx1ZVR5cGUoa2V5KSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRlZmF1bHQpIHx8IDA7XG4gICAgICAgIH1cbiAgICAgICAga2V5ID0gIWNhbWVsQ2FzZUF0dHJpYnV0ZXMuaGFzKGtleSkgPyBjYW1lbFRvRGFzaChrZXkpIDoga2V5O1xuICAgICAgICByZXR1cm4gZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5KTtcbiAgICB9LCBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6IHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcywgYnVpbGQ6IGZ1bmN0aW9uIChfZWxlbWVudCwgcmVuZGVyU3RhdGUsIGxhdGVzdFZhbHVlcywgb3B0aW9ucywgcHJvcHMpIHtcbiAgICAgICAgYnVpbGRTVkdBdHRycyhyZW5kZXJTdGF0ZSwgbGF0ZXN0VmFsdWVzLCBvcHRpb25zLCBwcm9wcy50cmFuc2Zvcm1UZW1wbGF0ZSk7XG4gICAgfSwgcmVuZGVyOiByZW5kZXJTVkcgfSkpO1xuXG5leHBvcnQgeyBzdmdWaXN1YWxFbGVtZW50IH07XG4iLCJpbXBvcnQgeyBodG1sVmlzdWFsRWxlbWVudCB9IGZyb20gJy4uL2h0bWwvdmlzdWFsLWVsZW1lbnQubWpzJztcbmltcG9ydCB7IHN2Z1Zpc3VhbEVsZW1lbnQgfSBmcm9tICcuLi9zdmcvdmlzdWFsLWVsZW1lbnQubWpzJztcbmltcG9ydCB7IGlzU1ZHQ29tcG9uZW50IH0gZnJvbSAnLi91dGlscy9pcy1zdmctY29tcG9uZW50Lm1qcyc7XG5cbnZhciBjcmVhdGVEb21WaXN1YWxFbGVtZW50ID0gZnVuY3Rpb24gKENvbXBvbmVudCwgb3B0aW9ucykge1xuICAgIHJldHVybiBpc1NWR0NvbXBvbmVudChDb21wb25lbnQpXG4gICAgICAgID8gc3ZnVmlzdWFsRWxlbWVudChvcHRpb25zLCB7IGVuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uOiBmYWxzZSB9KVxuICAgICAgICA6IGh0bWxWaXN1YWxFbGVtZW50KG9wdGlvbnMsIHsgZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb246IHRydWUgfSk7XG59O1xuXG5leHBvcnQgeyBjcmVhdGVEb21WaXN1YWxFbGVtZW50IH07XG4iLCJpbXBvcnQgeyBweCB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcblxuZnVuY3Rpb24gcGl4ZWxzVG9QZXJjZW50KHBpeGVscywgYXhpcykge1xuICAgIGlmIChheGlzLm1heCA9PT0gYXhpcy5taW4pXG4gICAgICAgIHJldHVybiAwO1xuICAgIHJldHVybiAocGl4ZWxzIC8gKGF4aXMubWF4IC0gYXhpcy5taW4pKSAqIDEwMDtcbn1cbi8qKlxuICogV2UgYWx3YXlzIGNvcnJlY3QgYm9yZGVyUmFkaXVzIGFzIGEgcGVyY2VudGFnZSByYXRoZXIgdGhhbiBwaXhlbHMgdG8gcmVkdWNlIHBhaW50cy5cbiAqIEZvciBleGFtcGxlLCBpZiB5b3UgYXJlIHByb2plY3RpbmcgYSBib3ggdGhhdCBpcyAxMDBweCB3aWRlIHdpdGggYSAxMHB4IGJvcmRlclJhZGl1c1xuICogaW50byBhIGJveCB0aGF0IGlzIDIwMHB4IHdpZGUgd2l0aCBhIDIwcHggYm9yZGVyUmFkaXVzLCB0aGF0IGlzIGFjdHVhbGx5IGEgMTAlXG4gKiBib3JkZXJSYWRpdXMgaW4gYm90aCBzdGF0ZXMuIElmIHdlIGFuaW1hdGUgYmV0d2VlbiB0aGUgdHdvIGluIHBpeGVscyB0aGF0IHdpbGwgdHJpZ2dlclxuICogYSBwYWludCBlYWNoIHRpbWUuIElmIHdlIGFuaW1hdGUgYmV0d2VlbiB0aGUgdHdvIGluIHBlcmNlbnRhZ2Ugd2UnbGwgYXZvaWQgYSBwYWludC5cbiAqL1xudmFyIGNvcnJlY3RCb3JkZXJSYWRpdXMgPSB7XG4gICAgY29ycmVjdDogZnVuY3Rpb24gKGxhdGVzdCwgbm9kZSkge1xuICAgICAgICBpZiAoIW5vZGUudGFyZ2V0KVxuICAgICAgICAgICAgcmV0dXJuIGxhdGVzdDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIGxhdGVzdCBpcyBhIHN0cmluZywgaWYgaXQncyBhIHBlcmNlbnRhZ2Ugd2UgY2FuIHJldHVybiBpbW1lZGlhdGVseSBhcyBpdCdzXG4gICAgICAgICAqIGdvaW5nIHRvIGJlIHN0cmV0Y2hlZCBhcHByb3ByaWF0ZWx5LiBPdGhlcndpc2UsIGlmIGl0J3MgYSBwaXhlbCwgY29udmVydCBpdCB0byBhIG51bWJlci5cbiAgICAgICAgICovXG4gICAgICAgIGlmICh0eXBlb2YgbGF0ZXN0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBpZiAocHgudGVzdChsYXRlc3QpKSB7XG4gICAgICAgICAgICAgICAgbGF0ZXN0ID0gcGFyc2VGbG9hdChsYXRlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhdGVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogSWYgbGF0ZXN0IGlzIGEgbnVtYmVyLCBpdCdzIGEgcGl4ZWwgdmFsdWUuIFdlIHVzZSB0aGUgY3VycmVudCB2aWV3cG9ydEJveCB0byBjYWxjdWxhdGUgdGhhdFxuICAgICAgICAgKiBwaXhlbCB2YWx1ZSBhcyBhIHBlcmNlbnRhZ2Ugb2YgZWFjaCBheGlzXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgeCA9IHBpeGVsc1RvUGVyY2VudChsYXRlc3QsIG5vZGUudGFyZ2V0LngpO1xuICAgICAgICB2YXIgeSA9IHBpeGVsc1RvUGVyY2VudChsYXRlc3QsIG5vZGUudGFyZ2V0LnkpO1xuICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQoeCwgXCIlIFwiKS5jb25jYXQoeSwgXCIlXCIpO1xuICAgIH0sXG59O1xuXG5leHBvcnQgeyBjb3JyZWN0Qm9yZGVyUmFkaXVzLCBwaXhlbHNUb1BlcmNlbnQgfTtcbiIsImltcG9ydCB7IG1peCB9IGZyb20gJ3BvcG1vdGlvbic7XG5pbXBvcnQgeyBjb21wbGV4IH0gZnJvbSAnc3R5bGUtdmFsdWUtdHlwZXMnO1xuaW1wb3J0IHsgY3NzVmFyaWFibGVSZWdleCB9IGZyb20gJy4uLy4uL3JlbmRlci9kb20vdXRpbHMvY3NzLXZhcmlhYmxlcy1jb252ZXJzaW9uLm1qcyc7XG5cbnZhciB2YXJUb2tlbiA9IFwiXyRjc3NcIjtcbnZhciBjb3JyZWN0Qm94U2hhZG93ID0ge1xuICAgIGNvcnJlY3Q6IGZ1bmN0aW9uIChsYXRlc3QsIF9hKSB7XG4gICAgICAgIHZhciB0cmVlU2NhbGUgPSBfYS50cmVlU2NhbGUsIHByb2plY3Rpb25EZWx0YSA9IF9hLnByb2plY3Rpb25EZWx0YTtcbiAgICAgICAgdmFyIG9yaWdpbmFsID0gbGF0ZXN0O1xuICAgICAgICAvKipcbiAgICAgICAgICogV2UgbmVlZCB0byBmaXJzdCBzdHJpcCBhbmQgc3RvcmUgQ1NTIHZhcmlhYmxlcyBmcm9tIHRoZSBzdHJpbmcuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgY29udGFpbnNDU1NWYXJpYWJsZXMgPSBsYXRlc3QuaW5jbHVkZXMoXCJ2YXIoXCIpO1xuICAgICAgICB2YXIgY3NzVmFyaWFibGVzID0gW107XG4gICAgICAgIGlmIChjb250YWluc0NTU1ZhcmlhYmxlcykge1xuICAgICAgICAgICAgbGF0ZXN0ID0gbGF0ZXN0LnJlcGxhY2UoY3NzVmFyaWFibGVSZWdleCwgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgY3NzVmFyaWFibGVzLnB1c2gobWF0Y2gpO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YXJUb2tlbjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzaGFkb3cgPSBjb21wbGV4LnBhcnNlKGxhdGVzdCk7XG4gICAgICAgIC8vIFRPRE86IERvZXNuJ3Qgc3VwcG9ydCBtdWx0aXBsZSBzaGFkb3dzXG4gICAgICAgIGlmIChzaGFkb3cubGVuZ3RoID4gNSlcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbDtcbiAgICAgICAgdmFyIHRlbXBsYXRlID0gY29tcGxleC5jcmVhdGVUcmFuc2Zvcm1lcihsYXRlc3QpO1xuICAgICAgICB2YXIgb2Zmc2V0ID0gdHlwZW9mIHNoYWRvd1swXSAhPT0gXCJudW1iZXJcIiA/IDEgOiAwO1xuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIG92ZXJhbGwgY29udGV4dCBzY2FsZVxuICAgICAgICB2YXIgeFNjYWxlID0gcHJvamVjdGlvbkRlbHRhLnguc2NhbGUgKiB0cmVlU2NhbGUueDtcbiAgICAgICAgdmFyIHlTY2FsZSA9IHByb2plY3Rpb25EZWx0YS55LnNjYWxlICogdHJlZVNjYWxlLnk7XG4gICAgICAgIHNoYWRvd1swICsgb2Zmc2V0XSAvPSB4U2NhbGU7XG4gICAgICAgIHNoYWRvd1sxICsgb2Zmc2V0XSAvPSB5U2NhbGU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZGVhbGx5IHdlJ2QgY29ycmVjdCB4IGFuZCB5IHNjYWxlcyBpbmRpdmlkdWFsbHksIGJ1dCBiZWNhdXNlIGJsdXIgYW5kXG4gICAgICAgICAqIHNwcmVhZCBhcHBseSB0byBib3RoIHdlIGhhdmUgdG8gdGFrZSBhIHNjYWxlIGF2ZXJhZ2UgYW5kIGFwcGx5IHRoYXQgaW5zdGVhZC5cbiAgICAgICAgICogV2UgY291bGQgcG90ZW50aWFsbHkgaW1wcm92ZSB0aGUgb3V0Y29tZSBvZiB0aGlzIGJ5IGluY29ycG9yYXRpbmcgdGhlIHJhdGlvIGJldHdlZW5cbiAgICAgICAgICogdGhlIHR3byBzY2FsZXMuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgYXZlcmFnZVNjYWxlID0gbWl4KHhTY2FsZSwgeVNjYWxlLCAwLjUpO1xuICAgICAgICAvLyBCbHVyXG4gICAgICAgIGlmICh0eXBlb2Ygc2hhZG93WzIgKyBvZmZzZXRdID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgc2hhZG93WzIgKyBvZmZzZXRdIC89IGF2ZXJhZ2VTY2FsZTtcbiAgICAgICAgLy8gU3ByZWFkXG4gICAgICAgIGlmICh0eXBlb2Ygc2hhZG93WzMgKyBvZmZzZXRdID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgc2hhZG93WzMgKyBvZmZzZXRdIC89IGF2ZXJhZ2VTY2FsZTtcbiAgICAgICAgdmFyIG91dHB1dCA9IHRlbXBsYXRlKHNoYWRvdyk7XG4gICAgICAgIGlmIChjb250YWluc0NTU1ZhcmlhYmxlcykge1xuICAgICAgICAgICAgdmFyIGlfMSA9IDA7XG4gICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQucmVwbGFjZSh2YXJUb2tlbiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBjc3NWYXJpYWJsZSA9IGNzc1ZhcmlhYmxlc1tpXzFdO1xuICAgICAgICAgICAgICAgIGlfMSsrO1xuICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYXJpYWJsZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfSxcbn07XG5cbmV4cG9ydCB7IGNvcnJlY3RCb3hTaGFkb3cgfTtcbiIsImltcG9ydCB7IF9fZXh0ZW5kcywgX19hc3NpZ24sIF9fcmVhZCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCBzeW5jIGZyb20gJ2ZyYW1lc3luYyc7XG5pbXBvcnQgUmVhY3RfX2RlZmF1bHQsIHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVByZXNlbmNlIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9BbmltYXRlUHJlc2VuY2UvdXNlLXByZXNlbmNlLm1qcyc7XG5pbXBvcnQgeyBMYXlvdXRHcm91cENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L0xheW91dEdyb3VwQ29udGV4dC5tanMnO1xuaW1wb3J0IHsgU3dpdGNoTGF5b3V0R3JvdXBDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9Td2l0Y2hMYXlvdXRHcm91cENvbnRleHQubWpzJztcbmltcG9ydCB7IGdsb2JhbFByb2plY3Rpb25TdGF0ZSB9IGZyb20gJy4uLy4uLy4uL3Byb2plY3Rpb24vbm9kZS9zdGF0ZS5tanMnO1xuaW1wb3J0IHsgY29ycmVjdEJvcmRlclJhZGl1cyB9IGZyb20gJy4uLy4uLy4uL3Byb2plY3Rpb24vc3R5bGVzL3NjYWxlLWJvcmRlci1yYWRpdXMubWpzJztcbmltcG9ydCB7IGNvcnJlY3RCb3hTaGFkb3cgfSBmcm9tICcuLi8uLi8uLi9wcm9qZWN0aW9uL3N0eWxlcy9zY2FsZS1ib3gtc2hhZG93Lm1qcyc7XG5pbXBvcnQgeyBhZGRTY2FsZUNvcnJlY3RvciB9IGZyb20gJy4uLy4uLy4uL3Byb2plY3Rpb24vc3R5bGVzL3NjYWxlLWNvcnJlY3Rpb24ubWpzJztcblxudmFyIE1lYXN1cmVMYXlvdXRXaXRoQ29udGV4dCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoTWVhc3VyZUxheW91dFdpdGhDb250ZXh0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE1lYXN1cmVMYXlvdXRXaXRoQ29udGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIG9ubHkgbW91bnRzIHByb2plY3Rpb24gbm9kZXMgZm9yIGNvbXBvbmVudHMgdGhhdFxuICAgICAqIG5lZWQgbWVhc3VyaW5nLCB3ZSBtaWdodCB3YW50IHRvIGRvIGl0IGZvciBhbGwgY29tcG9uZW50c1xuICAgICAqIGluIG9yZGVyIHRvIGluY29ycG9yYXRlIHRyYW5zZm9ybXNcbiAgICAgKi9cbiAgICBNZWFzdXJlTGF5b3V0V2l0aENvbnRleHQucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLnByb3BzLCB2aXN1YWxFbGVtZW50ID0gX2EudmlzdWFsRWxlbWVudCwgbGF5b3V0R3JvdXAgPSBfYS5sYXlvdXRHcm91cCwgc3dpdGNoTGF5b3V0R3JvdXAgPSBfYS5zd2l0Y2hMYXlvdXRHcm91cCwgbGF5b3V0SWQgPSBfYS5sYXlvdXRJZDtcbiAgICAgICAgdmFyIHByb2plY3Rpb24gPSB2aXN1YWxFbGVtZW50LnByb2plY3Rpb247XG4gICAgICAgIGFkZFNjYWxlQ29ycmVjdG9yKGRlZmF1bHRTY2FsZUNvcnJlY3RvcnMpO1xuICAgICAgICBpZiAocHJvamVjdGlvbikge1xuICAgICAgICAgICAgaWYgKGxheW91dEdyb3VwID09PSBudWxsIHx8IGxheW91dEdyb3VwID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsYXlvdXRHcm91cC5ncm91cClcbiAgICAgICAgICAgICAgICBsYXlvdXRHcm91cC5ncm91cC5hZGQocHJvamVjdGlvbik7XG4gICAgICAgICAgICBpZiAoKHN3aXRjaExheW91dEdyb3VwID09PSBudWxsIHx8IHN3aXRjaExheW91dEdyb3VwID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzd2l0Y2hMYXlvdXRHcm91cC5yZWdpc3RlcikgJiYgbGF5b3V0SWQpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2hMYXlvdXRHcm91cC5yZWdpc3Rlcihwcm9qZWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb2plY3Rpb24ucm9vdC5kaWRVcGRhdGUoKTtcbiAgICAgICAgICAgIHByb2plY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcihcImFuaW1hdGlvbkNvbXBsZXRlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5zYWZlVG9SZW1vdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcHJvamVjdGlvbi5zZXRPcHRpb25zKF9fYXNzaWduKF9fYXNzaWduKHt9LCBwcm9qZWN0aW9uLm9wdGlvbnMpLCB7IG9uRXhpdENvbXBsZXRlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5zYWZlVG9SZW1vdmUoKTsgfSB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2xvYmFsUHJvamVjdGlvblN0YXRlLmhhc0V2ZXJVcGRhdGVkID0gdHJ1ZTtcbiAgICB9O1xuICAgIE1lYXN1cmVMYXlvdXRXaXRoQ29udGV4dC5wcm90b3R5cGUuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPSBmdW5jdGlvbiAocHJldlByb3BzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9IHRoaXMucHJvcHMsIGxheW91dERlcGVuZGVuY3kgPSBfYS5sYXlvdXREZXBlbmRlbmN5LCB2aXN1YWxFbGVtZW50ID0gX2EudmlzdWFsRWxlbWVudCwgZHJhZyA9IF9hLmRyYWcsIGlzUHJlc2VudCA9IF9hLmlzUHJlc2VudDtcbiAgICAgICAgdmFyIHByb2plY3Rpb24gPSB2aXN1YWxFbGVtZW50LnByb2plY3Rpb247XG4gICAgICAgIGlmICghcHJvamVjdGlvbilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAvKipcbiAgICAgICAgICogVE9ETzogV2UgdXNlIHRoaXMgZGF0YSBpbiByZWxlZ2F0ZSB0byBkZXRlcm1pbmUgd2hldGhlciB0b1xuICAgICAgICAgKiBwcm9tb3RlIGEgcHJldmlvdXMgZWxlbWVudC4gVGhlcmUncyBubyBndWFyYW50ZWUgaXRzIHByZXNlbmNlIGRhdGFcbiAgICAgICAgICogd2lsbCBoYXZlIHVwZGF0ZWQgYnkgdGhpcyBwb2ludCAtIGlmIGEgYnVnIGxpa2UgdGhpcyBhcmlzZXMgaXQgd2lsbFxuICAgICAgICAgKiBoYXZlIHRvIGJlIHRoYXQgd2UgbWFya0ZvclJlbGVnYXRpb24gYW5kIHRoZW4gZmluZCBhIG5ldyBsZWFkIHNvbWUgb3RoZXIgd2F5LFxuICAgICAgICAgKiBwZXJoYXBzIGluIGRpZFVwZGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgcHJvamVjdGlvbi5pc1ByZXNlbnQgPSBpc1ByZXNlbnQ7XG4gICAgICAgIGlmIChkcmFnIHx8XG4gICAgICAgICAgICBwcmV2UHJvcHMubGF5b3V0RGVwZW5kZW5jeSAhPT0gbGF5b3V0RGVwZW5kZW5jeSB8fFxuICAgICAgICAgICAgbGF5b3V0RGVwZW5kZW5jeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwcm9qZWN0aW9uLndpbGxVcGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2FmZVRvUmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXZQcm9wcy5pc1ByZXNlbnQgIT09IGlzUHJlc2VudCkge1xuICAgICAgICAgICAgaWYgKGlzUHJlc2VudCkge1xuICAgICAgICAgICAgICAgIHByb2plY3Rpb24ucHJvbW90ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIXByb2plY3Rpb24ucmVsZWdhdGUoKSkge1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIElmIHRoZXJlJ3MgYW5vdGhlciBzdGFjayBtZW1iZXIgdGFraW5nIG92ZXIgZnJvbSB0aGlzIG9uZSxcbiAgICAgICAgICAgICAgICAgKiBpdCdzIGluIGNoYXJnZSBvZiB0aGUgZXhpdCBhbmltYXRpb24gYW5kIHRoZXJlZm9yZSBzaG91bGRcbiAgICAgICAgICAgICAgICAgKiBiZSBpbiBjaGFyZ2Ugb2YgdGhlIHNhZmUgdG8gcmVtb3ZlLiBPdGhlcndpc2Ugd2UgY2FsbCBpdCBoZXJlLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHN5bmMucG9zdFJlbmRlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoKF9hID0gcHJvamVjdGlvbi5nZXRTdGFjaygpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubWVtYmVycy5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5zYWZlVG9SZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgTWVhc3VyZUxheW91dFdpdGhDb250ZXh0LnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwcm9qZWN0aW9uID0gdGhpcy5wcm9wcy52aXN1YWxFbGVtZW50LnByb2plY3Rpb247XG4gICAgICAgIGlmIChwcm9qZWN0aW9uKSB7XG4gICAgICAgICAgICBwcm9qZWN0aW9uLnJvb3QuZGlkVXBkYXRlKCk7XG4gICAgICAgICAgICBpZiAoIXByb2plY3Rpb24uY3VycmVudEFuaW1hdGlvbiAmJiBwcm9qZWN0aW9uLmlzTGVhZCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zYWZlVG9SZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgTWVhc3VyZUxheW91dFdpdGhDb250ZXh0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcy5wcm9wcywgdmlzdWFsRWxlbWVudCA9IF9hLnZpc3VhbEVsZW1lbnQsIGxheW91dEdyb3VwID0gX2EubGF5b3V0R3JvdXAsIHByb21vdGVDb250ZXh0ID0gX2Euc3dpdGNoTGF5b3V0R3JvdXA7XG4gICAgICAgIHZhciBwcm9qZWN0aW9uID0gdmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uO1xuICAgICAgICBpZiAocHJvamVjdGlvbikge1xuICAgICAgICAgICAgcHJvamVjdGlvbi5zY2hlZHVsZUNoZWNrQWZ0ZXJVbm1vdW50KCk7XG4gICAgICAgICAgICBpZiAobGF5b3V0R3JvdXAgPT09IG51bGwgfHwgbGF5b3V0R3JvdXAgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxheW91dEdyb3VwLmdyb3VwKVxuICAgICAgICAgICAgICAgIGxheW91dEdyb3VwLmdyb3VwLnJlbW92ZShwcm9qZWN0aW9uKTtcbiAgICAgICAgICAgIGlmIChwcm9tb3RlQ29udGV4dCA9PT0gbnVsbCB8fCBwcm9tb3RlQ29udGV4dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJvbW90ZUNvbnRleHQuZGVyZWdpc3RlcilcbiAgICAgICAgICAgICAgICBwcm9tb3RlQ29udGV4dC5kZXJlZ2lzdGVyKHByb2plY3Rpb24pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBNZWFzdXJlTGF5b3V0V2l0aENvbnRleHQucHJvdG90eXBlLnNhZmVUb1JlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNhZmVUb1JlbW92ZSA9IHRoaXMucHJvcHMuc2FmZVRvUmVtb3ZlO1xuICAgICAgICBzYWZlVG9SZW1vdmUgPT09IG51bGwgfHwgc2FmZVRvUmVtb3ZlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzYWZlVG9SZW1vdmUoKTtcbiAgICB9O1xuICAgIE1lYXN1cmVMYXlvdXRXaXRoQ29udGV4dC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIHJldHVybiBNZWFzdXJlTGF5b3V0V2l0aENvbnRleHQ7XG59KFJlYWN0X19kZWZhdWx0LkNvbXBvbmVudCkpO1xuZnVuY3Rpb24gTWVhc3VyZUxheW91dChwcm9wcykge1xuICAgIHZhciBfYSA9IF9fcmVhZCh1c2VQcmVzZW5jZSgpLCAyKSwgaXNQcmVzZW50ID0gX2FbMF0sIHNhZmVUb1JlbW92ZSA9IF9hWzFdO1xuICAgIHZhciBsYXlvdXRHcm91cCA9IHVzZUNvbnRleHQoTGF5b3V0R3JvdXBDb250ZXh0KTtcbiAgICByZXR1cm4gKFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTWVhc3VyZUxheW91dFdpdGhDb250ZXh0LCBfX2Fzc2lnbih7fSwgcHJvcHMsIHsgbGF5b3V0R3JvdXA6IGxheW91dEdyb3VwLCBzd2l0Y2hMYXlvdXRHcm91cDogdXNlQ29udGV4dChTd2l0Y2hMYXlvdXRHcm91cENvbnRleHQpLCBpc1ByZXNlbnQ6IGlzUHJlc2VudCwgc2FmZVRvUmVtb3ZlOiBzYWZlVG9SZW1vdmUgfSkpKTtcbn1cbnZhciBkZWZhdWx0U2NhbGVDb3JyZWN0b3JzID0ge1xuICAgIGJvcmRlclJhZGl1czogX19hc3NpZ24oX19hc3NpZ24oe30sIGNvcnJlY3RCb3JkZXJSYWRpdXMpLCB7IGFwcGx5VG86IFtcbiAgICAgICAgICAgIFwiYm9yZGVyVG9wTGVmdFJhZGl1c1wiLFxuICAgICAgICAgICAgXCJib3JkZXJUb3BSaWdodFJhZGl1c1wiLFxuICAgICAgICAgICAgXCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzXCIsXG4gICAgICAgICAgICBcImJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzXCIsXG4gICAgICAgIF0gfSksXG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogY29ycmVjdEJvcmRlclJhZGl1cyxcbiAgICBib3JkZXJUb3BSaWdodFJhZGl1czogY29ycmVjdEJvcmRlclJhZGl1cyxcbiAgICBib3JkZXJCb3R0b21MZWZ0UmFkaXVzOiBjb3JyZWN0Qm9yZGVyUmFkaXVzLFxuICAgIGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiBjb3JyZWN0Qm9yZGVyUmFkaXVzLFxuICAgIGJveFNoYWRvdzogY29ycmVjdEJveFNoYWRvdyxcbn07XG5cbmV4cG9ydCB7IE1lYXN1cmVMYXlvdXQgfTtcbiIsImltcG9ydCB7IE1lYXN1cmVMYXlvdXQgfSBmcm9tICcuL01lYXN1cmVMYXlvdXQubWpzJztcblxudmFyIGxheW91dEZlYXR1cmVzID0ge1xuICAgIG1lYXN1cmVMYXlvdXQ6IE1lYXN1cmVMYXlvdXQsXG59O1xuXG5leHBvcnQgeyBsYXlvdXRGZWF0dXJlcyB9O1xuIiwiaW1wb3J0IHsgbWl4LCBwcm9ncmVzcywgbGluZWFyLCBjaXJjT3V0IH0gZnJvbSAncG9wbW90aW9uJztcbmltcG9ydCB7IHB4LCBwZXJjZW50IH0gZnJvbSAnc3R5bGUtdmFsdWUtdHlwZXMnO1xuXG52YXIgYm9yZGVycyA9IFtcIlRvcExlZnRcIiwgXCJUb3BSaWdodFwiLCBcIkJvdHRvbUxlZnRcIiwgXCJCb3R0b21SaWdodFwiXTtcbnZhciBudW1Cb3JkZXJzID0gYm9yZGVycy5sZW5ndGg7XG52YXIgYXNOdW1iZXIgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gcGFyc2VGbG9hdCh2YWx1ZSkgOiB2YWx1ZTtcbn07XG52YXIgaXNQeCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgcHgudGVzdCh2YWx1ZSk7XG59O1xuZnVuY3Rpb24gbWl4VmFsdWVzKHRhcmdldCwgZm9sbG93LCBsZWFkLCBwcm9ncmVzcywgc2hvdWxkQ3Jvc3NmYWRlT3BhY2l0eSwgaXNPbmx5TWVtYmVyKSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgIGlmIChzaG91bGRDcm9zc2ZhZGVPcGFjaXR5KSB7XG4gICAgICAgIHRhcmdldC5vcGFjaXR5ID0gbWl4KDAsIFxuICAgICAgICAvLyAoZm9sbG93Py5vcGFjaXR5IGFzIG51bWJlcikgPz8gMCxcbiAgICAgICAgLy8gVE9ETyBSZWluc3RhdGUgdGhpcyBpZiBvbmx5IGNoaWxkXG4gICAgICAgIChfYSA9IGxlYWQub3BhY2l0eSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMSwgZWFzZUNyb3NzZmFkZUluKHByb2dyZXNzKSk7XG4gICAgICAgIHRhcmdldC5vcGFjaXR5RXhpdCA9IG1peCgoX2IgPSBmb2xsb3cub3BhY2l0eSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogMSwgMCwgZWFzZUNyb3NzZmFkZU91dChwcm9ncmVzcykpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc09ubHlNZW1iZXIpIHtcbiAgICAgICAgdGFyZ2V0Lm9wYWNpdHkgPSBtaXgoKF9jID0gZm9sbG93Lm9wYWNpdHkpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IDEsIChfZCA9IGxlYWQub3BhY2l0eSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogMSwgcHJvZ3Jlc3MpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNaXggYm9yZGVyIHJhZGl1c1xuICAgICAqL1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtQm9yZGVyczsgaSsrKSB7XG4gICAgICAgIHZhciBib3JkZXJMYWJlbCA9IFwiYm9yZGVyXCIuY29uY2F0KGJvcmRlcnNbaV0sIFwiUmFkaXVzXCIpO1xuICAgICAgICB2YXIgZm9sbG93UmFkaXVzID0gZ2V0UmFkaXVzKGZvbGxvdywgYm9yZGVyTGFiZWwpO1xuICAgICAgICB2YXIgbGVhZFJhZGl1cyA9IGdldFJhZGl1cyhsZWFkLCBib3JkZXJMYWJlbCk7XG4gICAgICAgIGlmIChmb2xsb3dSYWRpdXMgPT09IHVuZGVmaW5lZCAmJiBsZWFkUmFkaXVzID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZm9sbG93UmFkaXVzIHx8IChmb2xsb3dSYWRpdXMgPSAwKTtcbiAgICAgICAgbGVhZFJhZGl1cyB8fCAobGVhZFJhZGl1cyA9IDApO1xuICAgICAgICB2YXIgY2FuTWl4ID0gZm9sbG93UmFkaXVzID09PSAwIHx8XG4gICAgICAgICAgICBsZWFkUmFkaXVzID09PSAwIHx8XG4gICAgICAgICAgICBpc1B4KGZvbGxvd1JhZGl1cykgPT09IGlzUHgobGVhZFJhZGl1cyk7XG4gICAgICAgIGlmIChjYW5NaXgpIHtcbiAgICAgICAgICAgIHRhcmdldFtib3JkZXJMYWJlbF0gPSBNYXRoLm1heChtaXgoYXNOdW1iZXIoZm9sbG93UmFkaXVzKSwgYXNOdW1iZXIobGVhZFJhZGl1cyksIHByb2dyZXNzKSwgMCk7XG4gICAgICAgICAgICBpZiAocGVyY2VudC50ZXN0KGxlYWRSYWRpdXMpIHx8IHBlcmNlbnQudGVzdChmb2xsb3dSYWRpdXMpKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2JvcmRlckxhYmVsXSArPSBcIiVcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldFtib3JkZXJMYWJlbF0gPSBsZWFkUmFkaXVzO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1peCByb3RhdGlvblxuICAgICAqL1xuICAgIGlmIChmb2xsb3cucm90YXRlIHx8IGxlYWQucm90YXRlKSB7XG4gICAgICAgIHRhcmdldC5yb3RhdGUgPSBtaXgoZm9sbG93LnJvdGF0ZSB8fCAwLCBsZWFkLnJvdGF0ZSB8fCAwLCBwcm9ncmVzcyk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0UmFkaXVzKHZhbHVlcywgcmFkaXVzTmFtZSkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gdmFsdWVzW3JhZGl1c05hbWVdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB2YWx1ZXMuYm9yZGVyUmFkaXVzO1xufVxuLy8gLyoqXG4vLyAgKiBXZSBvbmx5IHdhbnQgdG8gbWl4IHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGlmIHRoZXJlJ3MgYSBmb2xsb3cgZWxlbWVudFxuLy8gICogdGhhdCB3ZSdyZSBub3QgY3Jvc3NmYWRpbmcgb3BhY2l0eSBiZXR3ZWVuLiBGb3IgaW5zdGFuY2Ugd2l0aCBzd2l0Y2hcbi8vICAqIEFuaW1hdGVTaGFyZWRMYXlvdXQgYW5pbWF0aW9ucywgdGhpcyBoZWxwcyB0aGUgaWxsdXNpb24gb2YgYSBjb250aW51b3VzXG4vLyAgKiBlbGVtZW50IGJlaW5nIGFuaW1hdGVkIGJ1dCBhbHNvIGN1dHMgZG93biBvbiB0aGUgbnVtYmVyIG9mIHBhaW50cyB0cmlnZ2VyZWRcbi8vICAqIGZvciBlbGVtZW50cyB3aGVyZSBvcGFjaXR5IGlzIGRvaW5nIHRoYXQgd29yayBmb3IgdXMuXG4vLyAgKi9cbi8vIGlmIChcbi8vICAgICAhaGFzRm9sbG93RWxlbWVudCAmJlxuLy8gICAgIGxhdGVzdExlYWRWYWx1ZXMuYmFja2dyb3VuZENvbG9yICYmXG4vLyAgICAgbGF0ZXN0Rm9sbG93VmFsdWVzLmJhY2tncm91bmRDb2xvclxuLy8gKSB7XG4vLyAgICAgLyoqXG4vLyAgICAgICogVGhpcyBpc24ndCBpZGVhbCBwZXJmb3JtYW5jZS13aXNlIGFzIG1peENvbG9yIGlzIGNyZWF0aW5nIGEgbmV3IGZ1bmN0aW9uIGV2ZXJ5IGZyYW1lLlxuLy8gICAgICAqIFdlIGNvdWxkIHByb2JhYmx5IGNyZWF0ZSBhIG1peGVyIHRoYXQgcnVucyBhdCB0aGUgc3RhcnQgb2YgdGhlIGFuaW1hdGlvbiBidXRcbi8vICAgICAgKiB0aGUgaWRlYSBiZWhpbmQgdGhlIGNyb3NzZmFkZXIgaXMgdGhhdCBpdCBydW5zIGR5bmFtaWNhbGx5IGJldHdlZW4gdHdvIHBvdGVudGlhbGx5XG4vLyAgICAgICogY2hhbmdpbmcgdGFyZ2V0cyAoaWUgb3BhY2l0eSBvciBib3JkZXJSYWRpdXMgbWF5IGJlIGFuaW1hdGluZyBpbmRlcGVuZGVudGx5IHZpYSB2YXJpYW50cylcbi8vICAgICAgKi9cbi8vICAgICBsZWFkU3RhdGUuYmFja2dyb3VuZENvbG9yID0gZm9sbG93U3RhdGUuYmFja2dyb3VuZENvbG9yID0gbWl4Q29sb3IoXG4vLyAgICAgICAgIGxhdGVzdEZvbGxvd1ZhbHVlcy5iYWNrZ3JvdW5kQ29sb3IgYXMgc3RyaW5nLFxuLy8gICAgICAgICBsYXRlc3RMZWFkVmFsdWVzLmJhY2tncm91bmRDb2xvciBhcyBzdHJpbmdcbi8vICAgICApKHApXG4vLyB9XG52YXIgZWFzZUNyb3NzZmFkZUluID0gY29tcHJlc3MoMCwgMC41LCBjaXJjT3V0KTtcbnZhciBlYXNlQ3Jvc3NmYWRlT3V0ID0gY29tcHJlc3MoMC41LCAwLjk1LCBsaW5lYXIpO1xuZnVuY3Rpb24gY29tcHJlc3MobWluLCBtYXgsIGVhc2luZykge1xuICAgIHJldHVybiBmdW5jdGlvbiAocCkge1xuICAgICAgICAvLyBDb3VsZCByZXBsYWNlIGlmcyB3aXRoIGNsYW1wXG4gICAgICAgIGlmIChwIDwgbWluKVxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIGlmIChwID4gbWF4KVxuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIHJldHVybiBlYXNpbmcocHJvZ3Jlc3MobWluLCBtYXgsIHApKTtcbiAgICB9O1xufVxuXG5leHBvcnQgeyBtaXhWYWx1ZXMgfTtcbiIsIi8qKlxuICogUmVzZXQgYW4gYXhpcyB0byB0aGUgcHJvdmlkZWQgb3JpZ2luIGJveC5cbiAqXG4gKiBUaGlzIGlzIGEgbXV0YXRpdmUgb3BlcmF0aW9uLlxuICovXG5mdW5jdGlvbiBjb3B5QXhpc0ludG8oYXhpcywgb3JpZ2luQXhpcykge1xuICAgIGF4aXMubWluID0gb3JpZ2luQXhpcy5taW47XG4gICAgYXhpcy5tYXggPSBvcmlnaW5BeGlzLm1heDtcbn1cbi8qKlxuICogUmVzZXQgYSBib3ggdG8gdGhlIHByb3ZpZGVkIG9yaWdpbiBib3guXG4gKlxuICogVGhpcyBpcyBhIG11dGF0aXZlIG9wZXJhdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29weUJveEludG8oYm94LCBvcmlnaW5Cb3gpIHtcbiAgICBjb3B5QXhpc0ludG8oYm94LngsIG9yaWdpbkJveC54KTtcbiAgICBjb3B5QXhpc0ludG8oYm94LnksIG9yaWdpbkJveC55KTtcbn1cblxuZXhwb3J0IHsgY29weUF4aXNJbnRvLCBjb3B5Qm94SW50byB9O1xuIiwiaW1wb3J0IHsgX19yZWFkIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgbWl4IH0gZnJvbSAncG9wbW90aW9uJztcbmltcG9ydCB7IHBlcmNlbnQgfSBmcm9tICdzdHlsZS12YWx1ZS10eXBlcyc7XG5pbXBvcnQgeyBzY2FsZVBvaW50IH0gZnJvbSAnLi9kZWx0YS1hcHBseS5tanMnO1xuXG4vKipcbiAqIFJlbW92ZSBhIGRlbHRhIGZyb20gYSBwb2ludC4gVGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgc3RlcHMgb2YgYXBwbHlQb2ludERlbHRhIGluIHJldmVyc2VcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlUG9pbnREZWx0YShwb2ludCwgdHJhbnNsYXRlLCBzY2FsZSwgb3JpZ2luUG9pbnQsIGJveFNjYWxlKSB7XG4gICAgcG9pbnQgLT0gdHJhbnNsYXRlO1xuICAgIHBvaW50ID0gc2NhbGVQb2ludChwb2ludCwgMSAvIHNjYWxlLCBvcmlnaW5Qb2ludCk7XG4gICAgaWYgKGJveFNjYWxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcG9pbnQgPSBzY2FsZVBvaW50KHBvaW50LCAxIC8gYm94U2NhbGUsIG9yaWdpblBvaW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHBvaW50O1xufVxuLyoqXG4gKiBSZW1vdmUgYSBkZWx0YSBmcm9tIGFuIGF4aXMuIFRoaXMgaXMgZXNzZW50aWFsbHkgdGhlIHN0ZXBzIG9mIGFwcGx5QXhpc0RlbHRhIGluIHJldmVyc2VcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQXhpc0RlbHRhKGF4aXMsIHRyYW5zbGF0ZSwgc2NhbGUsIG9yaWdpbiwgYm94U2NhbGUsIG9yaWdpbkF4aXMsIHNvdXJjZUF4aXMpIHtcbiAgICBpZiAodHJhbnNsYXRlID09PSB2b2lkIDApIHsgdHJhbnNsYXRlID0gMDsgfVxuICAgIGlmIChzY2FsZSA9PT0gdm9pZCAwKSB7IHNjYWxlID0gMTsgfVxuICAgIGlmIChvcmlnaW4gPT09IHZvaWQgMCkgeyBvcmlnaW4gPSAwLjU7IH1cbiAgICBpZiAob3JpZ2luQXhpcyA9PT0gdm9pZCAwKSB7IG9yaWdpbkF4aXMgPSBheGlzOyB9XG4gICAgaWYgKHNvdXJjZUF4aXMgPT09IHZvaWQgMCkgeyBzb3VyY2VBeGlzID0gYXhpczsgfVxuICAgIGlmIChwZXJjZW50LnRlc3QodHJhbnNsYXRlKSkge1xuICAgICAgICB0cmFuc2xhdGUgPSBwYXJzZUZsb2F0KHRyYW5zbGF0ZSk7XG4gICAgICAgIHZhciByZWxhdGl2ZVByb2dyZXNzID0gbWl4KHNvdXJjZUF4aXMubWluLCBzb3VyY2VBeGlzLm1heCwgdHJhbnNsYXRlIC8gMTAwKTtcbiAgICAgICAgdHJhbnNsYXRlID0gcmVsYXRpdmVQcm9ncmVzcyAtIHNvdXJjZUF4aXMubWluO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRyYW5zbGF0ZSAhPT0gXCJudW1iZXJcIilcbiAgICAgICAgcmV0dXJuO1xuICAgIHZhciBvcmlnaW5Qb2ludCA9IG1peChvcmlnaW5BeGlzLm1pbiwgb3JpZ2luQXhpcy5tYXgsIG9yaWdpbik7XG4gICAgaWYgKGF4aXMgPT09IG9yaWdpbkF4aXMpXG4gICAgICAgIG9yaWdpblBvaW50IC09IHRyYW5zbGF0ZTtcbiAgICBheGlzLm1pbiA9IHJlbW92ZVBvaW50RGVsdGEoYXhpcy5taW4sIHRyYW5zbGF0ZSwgc2NhbGUsIG9yaWdpblBvaW50LCBib3hTY2FsZSk7XG4gICAgYXhpcy5tYXggPSByZW1vdmVQb2ludERlbHRhKGF4aXMubWF4LCB0cmFuc2xhdGUsIHNjYWxlLCBvcmlnaW5Qb2ludCwgYm94U2NhbGUpO1xufVxuLyoqXG4gKiBSZW1vdmUgYSB0cmFuc2Zvcm1zIGZyb20gYW4gYXhpcy4gVGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgc3RlcHMgb2YgYXBwbHlBeGlzVHJhbnNmb3JtcyBpbiByZXZlcnNlXG4gKiBhbmQgYWN0cyBhcyBhIGJyaWRnZSBiZXR3ZWVuIG1vdGlvbiB2YWx1ZXMgYW5kIHJlbW92ZUF4aXNEZWx0YVxuICovXG5mdW5jdGlvbiByZW1vdmVBeGlzVHJhbnNmb3JtcyhheGlzLCB0cmFuc2Zvcm1zLCBfYSwgb3JpZ2luLCBzb3VyY2VBeGlzKSB7XG4gICAgdmFyIF9iID0gX19yZWFkKF9hLCAzKSwga2V5ID0gX2JbMF0sIHNjYWxlS2V5ID0gX2JbMV0sIG9yaWdpbktleSA9IF9iWzJdO1xuICAgIHJlbW92ZUF4aXNEZWx0YShheGlzLCB0cmFuc2Zvcm1zW2tleV0sIHRyYW5zZm9ybXNbc2NhbGVLZXldLCB0cmFuc2Zvcm1zW29yaWdpbktleV0sIHRyYW5zZm9ybXMuc2NhbGUsIG9yaWdpbiwgc291cmNlQXhpcyk7XG59XG4vKipcbiAqIFRoZSBuYW1lcyBvZiB0aGUgbW90aW9uIHZhbHVlcyB3ZSB3YW50IHRvIGFwcGx5IGFzIHRyYW5zbGF0aW9uLCBzY2FsZSBhbmQgb3JpZ2luLlxuICovXG52YXIgeEtleXMgPSBbXCJ4XCIsIFwic2NhbGVYXCIsIFwib3JpZ2luWFwiXTtcbnZhciB5S2V5cyA9IFtcInlcIiwgXCJzY2FsZVlcIiwgXCJvcmlnaW5ZXCJdO1xuLyoqXG4gKiBSZW1vdmUgYSB0cmFuc2Zvcm1zIGZyb20gYW4gYm94LiBUaGlzIGlzIGVzc2VudGlhbGx5IHRoZSBzdGVwcyBvZiBhcHBseUF4aXNCb3ggaW4gcmV2ZXJzZVxuICogYW5kIGFjdHMgYXMgYSBicmlkZ2UgYmV0d2VlbiBtb3Rpb24gdmFsdWVzIGFuZCByZW1vdmVBeGlzRGVsdGFcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQm94VHJhbnNmb3Jtcyhib3gsIHRyYW5zZm9ybXMsIG9yaWdpbkJveCwgc291cmNlQm94KSB7XG4gICAgcmVtb3ZlQXhpc1RyYW5zZm9ybXMoYm94LngsIHRyYW5zZm9ybXMsIHhLZXlzLCBvcmlnaW5Cb3ggPT09IG51bGwgfHwgb3JpZ2luQm94ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcmlnaW5Cb3gueCwgc291cmNlQm94ID09PSBudWxsIHx8IHNvdXJjZUJveCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlQm94LngpO1xuICAgIHJlbW92ZUF4aXNUcmFuc2Zvcm1zKGJveC55LCB0cmFuc2Zvcm1zLCB5S2V5cywgb3JpZ2luQm94ID09PSBudWxsIHx8IG9yaWdpbkJveCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3JpZ2luQm94LnksIHNvdXJjZUJveCA9PT0gbnVsbCB8fCBzb3VyY2VCb3ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNvdXJjZUJveC55KTtcbn1cblxuZXhwb3J0IHsgcmVtb3ZlQXhpc0RlbHRhLCByZW1vdmVBeGlzVHJhbnNmb3JtcywgcmVtb3ZlQm94VHJhbnNmb3JtcywgcmVtb3ZlUG9pbnREZWx0YSB9O1xuIiwiZnVuY3Rpb24gaXNBeGlzRGVsdGFaZXJvKGRlbHRhKSB7XG4gICAgcmV0dXJuIGRlbHRhLnRyYW5zbGF0ZSA9PT0gMCAmJiBkZWx0YS5zY2FsZSA9PT0gMTtcbn1cbmZ1bmN0aW9uIGlzRGVsdGFaZXJvKGRlbHRhKSB7XG4gICAgcmV0dXJuIGlzQXhpc0RlbHRhWmVybyhkZWx0YS54KSAmJiBpc0F4aXNEZWx0YVplcm8oZGVsdGEueSk7XG59XG5mdW5jdGlvbiBib3hFcXVhbHMoYSwgYikge1xuICAgIHJldHVybiAoYS54Lm1pbiA9PT0gYi54Lm1pbiAmJlxuICAgICAgICBhLngubWF4ID09PSBiLngubWF4ICYmXG4gICAgICAgIGEueS5taW4gPT09IGIueS5taW4gJiZcbiAgICAgICAgYS55Lm1heCA9PT0gYi55Lm1heCk7XG59XG5cbmV4cG9ydCB7IGJveEVxdWFscywgaXNEZWx0YVplcm8gfTtcbiIsImltcG9ydCB7IGFkZFVuaXF1ZUl0ZW0sIHJlbW92ZUl0ZW0gfSBmcm9tICcuLi8uLi91dGlscy9hcnJheS5tanMnO1xuXG52YXIgTm9kZVN0YWNrID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vZGVTdGFjaygpIHtcbiAgICAgICAgdGhpcy5tZW1iZXJzID0gW107XG4gICAgfVxuICAgIE5vZGVTdGFjay5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgYWRkVW5pcXVlSXRlbSh0aGlzLm1lbWJlcnMsIG5vZGUpO1xuICAgICAgICBub2RlLnNjaGVkdWxlUmVuZGVyKCk7XG4gICAgfTtcbiAgICBOb2RlU3RhY2sucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIHJlbW92ZUl0ZW0odGhpcy5tZW1iZXJzLCBub2RlKTtcbiAgICAgICAgaWYgKG5vZGUgPT09IHRoaXMucHJldkxlYWQpIHtcbiAgICAgICAgICAgIHRoaXMucHJldkxlYWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUgPT09IHRoaXMubGVhZCkge1xuICAgICAgICAgICAgdmFyIHByZXZMZWFkID0gdGhpcy5tZW1iZXJzW3RoaXMubWVtYmVycy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGlmIChwcmV2TGVhZCkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvbW90ZShwcmV2TGVhZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE5vZGVTdGFjay5wcm90b3R5cGUucmVsZWdhdGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICB2YXIgaW5kZXhPZk5vZGUgPSB0aGlzLm1lbWJlcnMuZmluZEluZGV4KGZ1bmN0aW9uIChtZW1iZXIpIHsgcmV0dXJuIG5vZGUgPT09IG1lbWJlcjsgfSk7XG4gICAgICAgIGlmIChpbmRleE9mTm9kZSA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpbmQgdGhlIG5leHQgcHJvamVjdGlvbiBub2RlIHRoYXQgaXMgcHJlc2VudFxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIHByZXZMZWFkO1xuICAgICAgICBmb3IgKHZhciBpID0gaW5kZXhPZk5vZGU7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICB2YXIgbWVtYmVyID0gdGhpcy5tZW1iZXJzW2ldO1xuICAgICAgICAgICAgaWYgKG1lbWJlci5pc1ByZXNlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcHJldkxlYWQgPSBtZW1iZXI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXZMZWFkKSB7XG4gICAgICAgICAgICB0aGlzLnByb21vdGUocHJldkxlYWQpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE5vZGVTdGFjay5wcm90b3R5cGUucHJvbW90ZSA9IGZ1bmN0aW9uIChub2RlLCBwcmVzZXJ2ZUZvbGxvd09wYWNpdHkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgcHJldkxlYWQgPSB0aGlzLmxlYWQ7XG4gICAgICAgIGlmIChub2RlID09PSBwcmV2TGVhZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5wcmV2TGVhZCA9IHByZXZMZWFkO1xuICAgICAgICB0aGlzLmxlYWQgPSBub2RlO1xuICAgICAgICBub2RlLnNob3coKTtcbiAgICAgICAgaWYgKHByZXZMZWFkKSB7XG4gICAgICAgICAgICBwcmV2TGVhZC5pbnN0YW5jZSAmJiBwcmV2TGVhZC5zY2hlZHVsZVJlbmRlcigpO1xuICAgICAgICAgICAgbm9kZS5zY2hlZHVsZVJlbmRlcigpO1xuICAgICAgICAgICAgbm9kZS5yZXN1bWVGcm9tID0gcHJldkxlYWQ7XG4gICAgICAgICAgICBpZiAocHJlc2VydmVGb2xsb3dPcGFjaXR5KSB7XG4gICAgICAgICAgICAgICAgbm9kZS5yZXN1bWVGcm9tLnByZXNlcnZlT3BhY2l0eSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJldkxlYWQuc25hcHNob3QpIHtcbiAgICAgICAgICAgICAgICBub2RlLnNuYXBzaG90ID0gcHJldkxlYWQuc25hcHNob3Q7XG4gICAgICAgICAgICAgICAgbm9kZS5zbmFwc2hvdC5sYXRlc3RWYWx1ZXMgPVxuICAgICAgICAgICAgICAgICAgICBwcmV2TGVhZC5hbmltYXRpb25WYWx1ZXMgfHwgcHJldkxlYWQubGF0ZXN0VmFsdWVzO1xuICAgICAgICAgICAgICAgIG5vZGUuc25hcHNob3QuaXNTaGFyZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChfYSA9IG5vZGUucm9vdCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmlzVXBkYXRpbmcpIHtcbiAgICAgICAgICAgICAgICBub2RlLmlzTGF5b3V0RGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNyb3NzZmFkZSA9IG5vZGUub3B0aW9ucy5jcm9zc2ZhZGU7XG4gICAgICAgICAgICBpZiAoY3Jvc3NmYWRlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHByZXZMZWFkLmhpZGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVE9ETzpcbiAgICAgICAgICAgICAqICAgLSBUZXN0IGJvcmRlciByYWRpdXMgd2hlbiBwcmV2aW91cyBub2RlIHdhcyBkZWxldGVkXG4gICAgICAgICAgICAgKiAgIC0gYm94U2hhZG93IG1peGluZ1xuICAgICAgICAgICAgICogICAtIFNoYXJlZCBiZXR3ZWVuIGVsZW1lbnQgQSBpbiBzY3JvbGxlZCBjb250YWluZXIgYW5kIGVsZW1lbnQgQiAoc2Nyb2xsIHN0YXlzIHRoZSBzYW1lIG9yIGNoYW5nZXMpXG4gICAgICAgICAgICAgKiAgIC0gU2hhcmVkIGJldHdlZW4gZWxlbWVudCBBIGluIHRyYW5zZm9ybWVkIGNvbnRhaW5lciBhbmQgZWxlbWVudCBCICh0cmFuc2Zvcm0gc3RheXMgdGhlIHNhbWUgb3IgY2hhbmdlcylcbiAgICAgICAgICAgICAqICAgLSBTaGFyZWQgYmV0d2VlbiBlbGVtZW50IEEgaW4gc2Nyb2xsZWQgcGFnZSBhbmQgZWxlbWVudCBCIChzY3JvbGwgc3RheXMgdGhlIHNhbWUgb3IgY2hhbmdlcylcbiAgICAgICAgICAgICAqIC0tLVxuICAgICAgICAgICAgICogICAtIENyb3NzZmFkZSBvcGFjaXR5IG9mIHJvb3Qgbm9kZXNcbiAgICAgICAgICAgICAqICAgLSBsYXlvdXRJZCBjaGFuZ2VzIGFmdGVyIGFuaW1hdGlvblxuICAgICAgICAgICAgICogICAtIGxheW91dElkIGNoYW5nZXMgbWlkIGFuaW1hdGlvblxuICAgICAgICAgICAgICovXG4gICAgICAgIH1cbiAgICB9O1xuICAgIE5vZGVTdGFjay5wcm90b3R5cGUuZXhpdEFuaW1hdGlvbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm1lbWJlcnMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICAgICAgICAgIChfYiA9IChfYSA9IG5vZGUub3B0aW9ucykub25FeGl0Q29tcGxldGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgICAgICAgICAgIChfZSA9IChfYyA9IG5vZGUucmVzdW1pbmdGcm9tKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kID0gX2Mub3B0aW9ucykub25FeGl0Q29tcGxldGUpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5jYWxsKF9kKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBOb2RlU3RhY2sucHJvdG90eXBlLnNjaGVkdWxlUmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm1lbWJlcnMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgbm9kZS5pbnN0YW5jZSAmJiBub2RlLnNjaGVkdWxlUmVuZGVyKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDbGVhciBhbnkgbGVhZHMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCB0aGlzIHJlbmRlciB0byBwcmV2ZW50IHRoZW0gZnJvbSBiZWluZ1xuICAgICAqIHVzZWQgaW4gZnV0dXJlIGFuaW1hdGlvbnMgYW5kIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzXG4gICAgICovXG4gICAgTm9kZVN0YWNrLnByb3RvdHlwZS5yZW1vdmVMZWFkU25hcHNob3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmxlYWQgJiYgdGhpcy5sZWFkLnNuYXBzaG90KSB7XG4gICAgICAgICAgICB0aGlzLmxlYWQuc25hcHNob3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBOb2RlU3RhY2s7XG59KCkpO1xuXG5leHBvcnQgeyBOb2RlU3RhY2sgfTtcbiIsInZhciBpZGVudGl0eVByb2plY3Rpb24gPSBcInRyYW5zbGF0ZTNkKDBweCwgMHB4LCAwKSBzY2FsZSgxLCAxKSBzY2FsZSgxLCAxKVwiO1xuZnVuY3Rpb24gYnVpbGRQcm9qZWN0aW9uVHJhbnNmb3JtKGRlbHRhLCB0cmVlU2NhbGUsIGxhdGVzdFRyYW5zZm9ybSkge1xuICAgIC8qKlxuICAgICAqIFRoZSB0cmFuc2xhdGlvbnMgd2UgdXNlIHRvIGNhbGN1bGF0ZSBhcmUgYWx3YXlzIHJlbGF0aXZlIHRvIHRoZSB2aWV3cG9ydCBjb29yZGluYXRlIHNwYWNlLlxuICAgICAqIEJ1dCB3aGVuIHdlIGFwcGx5IHNjYWxlcywgd2UgYWxzbyBzY2FsZSB0aGUgY29vcmRpbmF0ZSBzcGFjZSBvZiBhbiBlbGVtZW50IGFuZCBpdHMgY2hpbGRyZW4uXG4gICAgICogRm9yIGluc3RhbmNlIGlmIHdlIGhhdmUgYSB0cmVlU2NhbGUgKHRoZSBjdWxtaW5hdGlvbiBvZiBhbGwgcGFyZW50IHNjYWxlcykgb2YgMC41IGFuZCB3ZSBuZWVkXG4gICAgICogdG8gbW92ZSBhbiBlbGVtZW50IDEwMCBwaXhlbHMsIHdlIGFjdHVhbGx5IG5lZWQgdG8gbW92ZSBpdCAyMDAgaW4gd2l0aGluIHRoYXQgc2NhbGVkIHNwYWNlLlxuICAgICAqL1xuICAgIHZhciB4VHJhbnNsYXRlID0gZGVsdGEueC50cmFuc2xhdGUgLyB0cmVlU2NhbGUueDtcbiAgICB2YXIgeVRyYW5zbGF0ZSA9IGRlbHRhLnkudHJhbnNsYXRlIC8gdHJlZVNjYWxlLnk7XG4gICAgdmFyIHRyYW5zZm9ybSA9IFwidHJhbnNsYXRlM2QoXCIuY29uY2F0KHhUcmFuc2xhdGUsIFwicHgsIFwiKS5jb25jYXQoeVRyYW5zbGF0ZSwgXCJweCwgMCkgXCIpO1xuICAgIC8qKlxuICAgICAqIEFwcGx5IHNjYWxlIGNvcnJlY3Rpb24gZm9yIHRoZSB0cmVlIHRyYW5zZm9ybS5cbiAgICAgKiBUaGlzIHdpbGwgYXBwbHkgc2NhbGUgdG8gdGhlIHNjcmVlbi1vcmllbnRhdGVkIGF4ZXMuXG4gICAgICovXG4gICAgdHJhbnNmb3JtICs9IFwic2NhbGUoXCIuY29uY2F0KDEgLyB0cmVlU2NhbGUueCwgXCIsIFwiKS5jb25jYXQoMSAvIHRyZWVTY2FsZS55LCBcIikgXCIpO1xuICAgIGlmIChsYXRlc3RUcmFuc2Zvcm0pIHtcbiAgICAgICAgdmFyIHJvdGF0ZSA9IGxhdGVzdFRyYW5zZm9ybS5yb3RhdGUsIHJvdGF0ZVggPSBsYXRlc3RUcmFuc2Zvcm0ucm90YXRlWCwgcm90YXRlWSA9IGxhdGVzdFRyYW5zZm9ybS5yb3RhdGVZO1xuICAgICAgICBpZiAocm90YXRlKVxuICAgICAgICAgICAgdHJhbnNmb3JtICs9IFwicm90YXRlKFwiLmNvbmNhdChyb3RhdGUsIFwiZGVnKSBcIik7XG4gICAgICAgIGlmIChyb3RhdGVYKVxuICAgICAgICAgICAgdHJhbnNmb3JtICs9IFwicm90YXRlWChcIi5jb25jYXQocm90YXRlWCwgXCJkZWcpIFwiKTtcbiAgICAgICAgaWYgKHJvdGF0ZVkpXG4gICAgICAgICAgICB0cmFuc2Zvcm0gKz0gXCJyb3RhdGVZKFwiLmNvbmNhdChyb3RhdGVZLCBcImRlZykgXCIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBcHBseSBzY2FsZSB0byBtYXRjaCB0aGUgc2l6ZSBvZiB0aGUgZWxlbWVudCB0byB0aGUgc2l6ZSB3ZSB3YW50IGl0LlxuICAgICAqIFRoaXMgd2lsbCBhcHBseSBzY2FsZSB0byB0aGUgZWxlbWVudC1vcmllbnRhdGVkIGF4ZXMuXG4gICAgICovXG4gICAgdmFyIGVsZW1lbnRTY2FsZVggPSBkZWx0YS54LnNjYWxlICogdHJlZVNjYWxlLng7XG4gICAgdmFyIGVsZW1lbnRTY2FsZVkgPSBkZWx0YS55LnNjYWxlICogdHJlZVNjYWxlLnk7XG4gICAgdHJhbnNmb3JtICs9IFwic2NhbGUoXCIuY29uY2F0KGVsZW1lbnRTY2FsZVgsIFwiLCBcIikuY29uY2F0KGVsZW1lbnRTY2FsZVksIFwiKVwiKTtcbiAgICByZXR1cm4gdHJhbnNmb3JtID09PSBpZGVudGl0eVByb2plY3Rpb24gPyBcIm5vbmVcIiA6IHRyYW5zZm9ybTtcbn1cblxuZXhwb3J0IHsgYnVpbGRQcm9qZWN0aW9uVHJhbnNmb3JtLCBpZGVudGl0eVByb2plY3Rpb24gfTtcbiIsInZhciBjb21wYXJlQnlEZXB0aCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGEuZGVwdGggLSBiLmRlcHRoO1xufTtcblxuZXhwb3J0IHsgY29tcGFyZUJ5RGVwdGggfTtcbiIsImltcG9ydCB7IGFkZFVuaXF1ZUl0ZW0sIHJlbW92ZUl0ZW0gfSBmcm9tICcuLi8uLi91dGlscy9hcnJheS5tanMnO1xuaW1wb3J0IHsgY29tcGFyZUJ5RGVwdGggfSBmcm9tICcuL2NvbXBhcmUtYnktZGVwdGgubWpzJztcblxudmFyIEZsYXRUcmVlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEZsYXRUcmVlKCkge1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMuaXNEaXJ0eSA9IGZhbHNlO1xuICAgIH1cbiAgICBGbGF0VHJlZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIGFkZFVuaXF1ZUl0ZW0odGhpcy5jaGlsZHJlbiwgY2hpbGQpO1xuICAgICAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICAgIH07XG4gICAgRmxhdFRyZWUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZW1vdmVJdGVtKHRoaXMuY2hpbGRyZW4sIGNoaWxkKTtcbiAgICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICB9O1xuICAgIEZsYXRUcmVlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuaXNEaXJ0eSAmJiB0aGlzLmNoaWxkcmVuLnNvcnQoY29tcGFyZUJ5RGVwdGgpO1xuICAgICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIHJldHVybiBGbGF0VHJlZTtcbn0oKSk7XG5cbmV4cG9ydCB7IEZsYXRUcmVlIH07XG4iLCJpbXBvcnQgeyBfX3NwcmVhZEFycmF5LCBfX3JlYWQsIF9fYXNzaWduIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHN5bmMsIHsgY2FuY2VsU3luYywgZmx1c2hTeW5jIH0gZnJvbSAnZnJhbWVzeW5jJztcbmltcG9ydCB7IG1peCB9IGZyb20gJ3BvcG1vdGlvbic7XG5pbXBvcnQgeyBhbmltYXRlIH0gZnJvbSAnLi4vLi4vYW5pbWF0aW9uL2FuaW1hdGUubWpzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbk1hbmFnZXIgfSBmcm9tICcuLi8uLi91dGlscy9zdWJzY3JpcHRpb24tbWFuYWdlci5tanMnO1xuaW1wb3J0IHsgbWl4VmFsdWVzIH0gZnJvbSAnLi4vYW5pbWF0aW9uL21peC12YWx1ZXMubWpzJztcbmltcG9ydCB7IGNvcHlCb3hJbnRvIH0gZnJvbSAnLi4vZ2VvbWV0cnkvY29weS5tanMnO1xuaW1wb3J0IHsgdHJhbnNsYXRlQXhpcywgdHJhbnNmb3JtQm94LCBhcHBseUJveERlbHRhLCBhcHBseVRyZWVEZWx0YXMgfSBmcm9tICcuLi9nZW9tZXRyeS9kZWx0YS1hcHBseS5tanMnO1xuaW1wb3J0IHsgY2FsY1JlbGF0aXZlUG9zaXRpb24sIGNhbGNSZWxhdGl2ZUJveCwgY2FsY0JveERlbHRhLCBjYWxjTGVuZ3RoIH0gZnJvbSAnLi4vZ2VvbWV0cnkvZGVsdGEtY2FsYy5tanMnO1xuaW1wb3J0IHsgcmVtb3ZlQm94VHJhbnNmb3JtcyB9IGZyb20gJy4uL2dlb21ldHJ5L2RlbHRhLXJlbW92ZS5tanMnO1xuaW1wb3J0IHsgY3JlYXRlQm94LCBjcmVhdGVEZWx0YSB9IGZyb20gJy4uL2dlb21ldHJ5L21vZGVscy5tanMnO1xuaW1wb3J0IHsgZ2V0VmFsdWVUcmFuc2l0aW9uIH0gZnJvbSAnLi4vLi4vYW5pbWF0aW9uL3V0aWxzL3RyYW5zaXRpb25zLm1qcyc7XG5pbXBvcnQgeyBib3hFcXVhbHMsIGlzRGVsdGFaZXJvIH0gZnJvbSAnLi4vZ2VvbWV0cnkvdXRpbHMubWpzJztcbmltcG9ydCB7IE5vZGVTdGFjayB9IGZyb20gJy4uL3NoYXJlZC9zdGFjay5tanMnO1xuaW1wb3J0IHsgc2NhbGVDb3JyZWN0b3JzIH0gZnJvbSAnLi4vc3R5bGVzL3NjYWxlLWNvcnJlY3Rpb24ubWpzJztcbmltcG9ydCB7IGJ1aWxkUHJvamVjdGlvblRyYW5zZm9ybSB9IGZyb20gJy4uL3N0eWxlcy90cmFuc2Zvcm0ubWpzJztcbmltcG9ydCB7IGVhY2hBeGlzIH0gZnJvbSAnLi4vdXRpbHMvZWFjaC1heGlzLm1qcyc7XG5pbXBvcnQgeyBoYXNUcmFuc2Zvcm0sIGhhc1NjYWxlIH0gZnJvbSAnLi4vdXRpbHMvaGFzLXRyYW5zZm9ybS5tanMnO1xuaW1wb3J0IHsgdHJhbnNmb3JtQXhlcyB9IGZyb20gJy4uLy4uL3JlbmRlci9odG1sL3V0aWxzL3RyYW5zZm9ybS5tanMnO1xuaW1wb3J0IHsgRmxhdFRyZWUgfSBmcm9tICcuLi8uLi9yZW5kZXIvdXRpbHMvZmxhdC10cmVlLm1qcyc7XG5pbXBvcnQgeyByZXNvbHZlTW90aW9uVmFsdWUgfSBmcm9tICcuLi8uLi92YWx1ZS91dGlscy9yZXNvbHZlLW1vdGlvbi12YWx1ZS5tanMnO1xuaW1wb3J0IHsgZ2xvYmFsUHJvamVjdGlvblN0YXRlIH0gZnJvbSAnLi9zdGF0ZS5tanMnO1xuXG4vKipcbiAqIFdlIHVzZSAxMDAwIGFzIHRoZSBhbmltYXRpb24gdGFyZ2V0IGFzIDAtMTAwMCBtYXBzIGJldHRlciB0byBwaXhlbHMgdGhhbiAwLTFcbiAqIHdoaWNoIGhhcyBhIG5vdGljZWFibGUgZGlmZmVyZW5jZSBpbiBzcHJpbmcgYW5pbWF0aW9uc1xuICovXG52YXIgYW5pbWF0aW9uVGFyZ2V0ID0gMTAwMDtcbmZ1bmN0aW9uIGNyZWF0ZVByb2plY3Rpb25Ob2RlKF9hKSB7XG4gICAgdmFyIGF0dGFjaFJlc2l6ZUxpc3RlbmVyID0gX2EuYXR0YWNoUmVzaXplTGlzdGVuZXIsIGRlZmF1bHRQYXJlbnQgPSBfYS5kZWZhdWx0UGFyZW50LCBtZWFzdXJlU2Nyb2xsID0gX2EubWVhc3VyZVNjcm9sbCwgY2hlY2tJc1Njcm9sbFJvb3QgPSBfYS5jaGVja0lzU2Nyb2xsUm9vdCwgcmVzZXRUcmFuc2Zvcm0gPSBfYS5yZXNldFRyYW5zZm9ybTtcbiAgICByZXR1cm4gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgICAgICBmdW5jdGlvbiBQcm9qZWN0aW9uTm9kZShpZCwgbGF0ZXN0VmFsdWVzLCBwYXJlbnQpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICBpZiAobGF0ZXN0VmFsdWVzID09PSB2b2lkIDApIHsgbGF0ZXN0VmFsdWVzID0ge307IH1cbiAgICAgICAgICAgIGlmIChwYXJlbnQgPT09IHZvaWQgMCkgeyBwYXJlbnQgPSBkZWZhdWx0UGFyZW50ID09PSBudWxsIHx8IGRlZmF1bHRQYXJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlZmF1bHRQYXJlbnQoKTsgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBBIFNldCBjb250YWluaW5nIGFsbCB0aGlzIGNvbXBvbmVudCdzIGNoaWxkcmVuLiBUaGlzIGlzIHVzZWQgdG8gaXRlcmF0ZVxuICAgICAgICAgICAgICogdGhyb3VnaCB0aGUgY2hpbGRyZW4uXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogVE9ETzogVGhpcyBjb3VsZCBiZSBmYXN0ZXIgdG8gaXRlcmF0ZSBhcyBhIGZsYXQgYXJyYXkgc3RvcmVkIG9uIHRoZSByb290IG5vZGUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4gPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIE9wdGlvbnMgZm9yIHRoZSBub2RlLiBXZSB1c2UgdGhpcyB0byBjb25maWd1cmUgd2hhdCBraW5kIG9mIGxheW91dCBhbmltYXRpb25zXG4gICAgICAgICAgICAgKiB3ZSBzaG91bGQgcGVyZm9ybSAoaWYgYW55KS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFdlIHVzZSB0aGlzIHRvIGRldGVjdCB3aGVuIGl0cyBzYWZlIHRvIHNodXQgZG93biBwYXJ0IG9mIGEgcHJvamVjdGlvbiB0cmVlLlxuICAgICAgICAgICAgICogV2UgaGF2ZSB0byBrZWVwIHByb2plY3RpbmcgY2hpbGRyZW4gZm9yIHNjYWxlIGNvcnJlY3Rpb24gYW5kIHJlbGF0aXZlIHByb2plY3Rpb25cbiAgICAgICAgICAgICAqIHVudGlsIGFsbCB0aGVpciBwYXJlbnRzIHN0b3AgcGVyZm9ybWluZyBsYXlvdXQgYW5pbWF0aW9ucy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5pc1RyZWVBbmltYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaXNBbmltYXRpb25CbG9ja2VkID0gZmFsc2U7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEZsYWcgdG8gdHJ1ZSBpZiB3ZSB0aGluayB0aGlzIGxheW91dCBoYXMgYmVlbiBjaGFuZ2VkLiBXZSBjYW4ndCBhbHdheXMga25vdyB0aGlzLFxuICAgICAgICAgICAgICogY3VycmVudGx5IHdlIHNldCBpdCB0byB0cnVlIGV2ZXJ5IHRpbWUgYSBjb21wb25lbnQgcmVuZGVycywgb3IgaWYgaXQgaGFzIGEgbGF5b3V0RGVwZW5kZW5jeVxuICAgICAgICAgICAgICogaWYgdGhhdCBoYXMgY2hhbmdlZCBiZXR3ZWVuIHJlbmRlcnMuIEFkZGl0aW9uYWxseSwgY29tcG9uZW50cyBjYW4gYmUgZ3JvdXBlZCBieSBMYXlvdXRHcm91cFxuICAgICAgICAgICAgICogYW5kIGlmIG9uZSBub2RlIGlzIGRpcnRpZWQsIHRoZXkgYWxsIGFyZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5pc0xheW91dERpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEJsb2NrIGxheW91dCB1cGRhdGVzIGZvciBpbnN0YW50IGxheW91dCB0cmFuc2l0aW9ucyB0aHJvdWdob3V0IHRoZSB0cmVlLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1hbnVhbGx5QmxvY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVCbG9ja2VkQnlSZXNpemUgPSBmYWxzZTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogU2V0IHRvIHRydWUgYmV0d2VlbiB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IGB3aWxsVXBkYXRlYCBjYWxsIGFuZCB0aGUgZW5kIG9mIHRoZSBgZGlkVXBkYXRlYFxuICAgICAgICAgICAgICogY2FsbC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5pc1VwZGF0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHRoaXMgaXMgYW4gU1ZHIGVsZW1lbnQgd2UgY3VycmVudGx5IGRpc2FibGUgcHJvamVjdGlvbiB0cmFuc2Zvcm1zXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuaXNTVkcgPSBmYWxzZTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogRmxhZyB0byB0cnVlIChkdXJpbmcgcHJvbW90aW9uKSBpZiBhIG5vZGUgZG9pbmcgYW4gaW5zdGFudCBsYXlvdXQgdHJhbnNpdGlvbiBuZWVkcyB0byByZXNldFxuICAgICAgICAgICAgICogaXRzIHByb2plY3Rpb24gc3R5bGVzLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLm5lZWRzUmVzZXQgPSBmYWxzZTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogRmxhZ3Mgd2hldGhlciB0aGlzIG5vZGUgc2hvdWxkIGhhdmUgaXRzIHRyYW5zZm9ybSByZXNldCBwcmlvciB0byBtZWFzdXJpbmcuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuc2hvdWxkUmVzZXRUcmFuc2Zvcm0gPSBmYWxzZTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY2FsY3VsYXRlZCBjb250ZXh0dWFsL2FjY3VtdWxhdGVkL3RyZWUgc2NhbGUuXG4gICAgICAgICAgICAgKiBUaGlzIHdpbGwgYmUgdXNlZCB0byBzY2FsZSBjYWxjdWxjYXRlZCBwcm9qZWN0aW9uIHRyYW5zZm9ybXMsIGFzIHRoZXNlIGFyZVxuICAgICAgICAgICAgICogY2FsY3VsYXRlZCBpbiBzY3JlZW4tc3BhY2UgYnV0IG5lZWQgdG8gYmUgc2NhbGVkIGZvciBlbGVtZW50cyB0byBhY3R1YWxseVxuICAgICAgICAgICAgICogbWFrZSBpdCB0byB0aGVpciBjYWxjdWxhdGVkIGRlc3RpbmF0aW9ucy5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBUT0RPOiBMYXp5LWluaXRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy50cmVlU2NhbGUgPSB7IHg6IDEsIHk6IDEgfTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXJzID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgLy8gTm90ZTogQ3VycmVudGx5IG9ubHkgcnVubmluZyBvbiByb290IG5vZGVcbiAgICAgICAgICAgIHRoaXMucG90ZW50aWFsTm9kZXMgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrVXBkYXRlRmFpbGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5pc1VwZGF0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmlzVXBkYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY2xlYXJBbGxTbmFwc2hvdHMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQcm9qZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIF90aGlzLm5vZGVzLmZvckVhY2gocmVzb2x2ZVRhcmdldERlbHRhKTtcbiAgICAgICAgICAgICAgICBfdGhpcy5ub2Rlcy5mb3JFYWNoKGNhbGNQcm9qZWN0aW9uKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmhhc1Byb2plY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5pc1Zpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5hbmltYXRpb25Qcm9ncmVzcyA9IDA7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFNoYXJlZCBsYXlvdXRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgLy8gVE9ETyBPbmx5IHJ1bm5pbmcgb24gcm9vdCBub2RlXG4gICAgICAgICAgICB0aGlzLnNoYXJlZE5vZGVzID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgdGhpcy5pZCA9IGlkO1xuICAgICAgICAgICAgdGhpcy5sYXRlc3RWYWx1ZXMgPSBsYXRlc3RWYWx1ZXM7XG4gICAgICAgICAgICB0aGlzLnJvb3QgPSBwYXJlbnQgPyBwYXJlbnQucm9vdCB8fCBwYXJlbnQgOiB0aGlzO1xuICAgICAgICAgICAgdGhpcy5wYXRoID0gcGFyZW50ID8gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQocGFyZW50LnBhdGgpLCBmYWxzZSksIFtwYXJlbnRdLCBmYWxzZSkgOiBbXTtcbiAgICAgICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICAgICAgdGhpcy5kZXB0aCA9IHBhcmVudCA/IHBhcmVudC5kZXB0aCArIDEgOiAwO1xuICAgICAgICAgICAgaWQgJiYgdGhpcy5yb290LnJlZ2lzdGVyUG90ZW50aWFsTm9kZShpZCwgdGhpcyk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMucGF0aFtpXS5zaG91bGRSZXNldFRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5yb290ID09PSB0aGlzKVxuICAgICAgICAgICAgICAgIHRoaXMubm9kZXMgPSBuZXcgRmxhdFRyZWUoKTtcbiAgICAgICAgfVxuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChuYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZXZlbnRIYW5kbGVycy5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlcnMuc2V0KG5hbWUsIG5ldyBTdWJzY3JpcHRpb25NYW5hZ2VyKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRIYW5kbGVycy5nZXQobmFtZSkuYWRkKGhhbmRsZXIpO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUubm90aWZ5TGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgIGFyZ3NbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgc3Vic2NyaXB0aW9uTWFuYWdlciA9IHRoaXMuZXZlbnRIYW5kbGVycy5nZXQobmFtZSk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb25NYW5hZ2VyID09PSBudWxsIHx8IHN1YnNjcmlwdGlvbk1hbmFnZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN1YnNjcmlwdGlvbk1hbmFnZXIubm90aWZ5LmFwcGx5KHN1YnNjcmlwdGlvbk1hbmFnZXIsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSwgZmFsc2UpKTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmhhc0xpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ldmVudEhhbmRsZXJzLmhhcyhuYW1lKTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnJlZ2lzdGVyUG90ZW50aWFsTm9kZSA9IGZ1bmN0aW9uIChpZCwgbm9kZSkge1xuICAgICAgICAgICAgdGhpcy5wb3RlbnRpYWxOb2Rlcy5zZXQoaWQsIG5vZGUpO1xuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogTGlmZWN5Y2xlc1xuICAgICAgICAgKi9cbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLm1vdW50ID0gZnVuY3Rpb24gKGluc3RhbmNlLCBpc0xheW91dERpcnR5KSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKGlzTGF5b3V0RGlydHkgPT09IHZvaWQgMCkgeyBpc0xheW91dERpcnR5ID0gZmFsc2U7IH1cbiAgICAgICAgICAgIGlmICh0aGlzLmluc3RhbmNlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuaXNTVkcgPVxuICAgICAgICAgICAgICAgIGluc3RhbmNlIGluc3RhbmNlb2YgU1ZHRWxlbWVudCAmJiBpbnN0YW5jZS50YWdOYW1lICE9PSBcInN2Z1wiO1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgICAgICAgdmFyIF9iID0gdGhpcy5vcHRpb25zLCBsYXlvdXRJZCA9IF9iLmxheW91dElkLCBsYXlvdXQgPSBfYi5sYXlvdXQsIHZpc3VhbEVsZW1lbnQgPSBfYi52aXN1YWxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKHZpc3VhbEVsZW1lbnQgJiYgIXZpc3VhbEVsZW1lbnQuZ2V0SW5zdGFuY2UoKSkge1xuICAgICAgICAgICAgICAgIHZpc3VhbEVsZW1lbnQubW91bnQoaW5zdGFuY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yb290Lm5vZGVzLmFkZCh0aGlzKTtcbiAgICAgICAgICAgIChfYSA9IHRoaXMucGFyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2hpbGRyZW4uYWRkKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5pZCAmJiB0aGlzLnJvb3QucG90ZW50aWFsTm9kZXMuZGVsZXRlKHRoaXMuaWQpO1xuICAgICAgICAgICAgaWYgKGlzTGF5b3V0RGlydHkgJiYgKGxheW91dCB8fCBsYXlvdXRJZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTGF5b3V0RGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGF0dGFjaFJlc2l6ZUxpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgdmFyIHVuYmxvY2tUaW1lb3V0XzE7XG4gICAgICAgICAgICAgICAgdmFyIHJlc2l6ZVVuYmxvY2tVcGRhdGVfMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChfdGhpcy5yb290LnVwZGF0ZUJsb2NrZWRCeVJlc2l6ZSA9IGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGF0dGFjaFJlc2l6ZUxpc3RlbmVyKGluc3RhbmNlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnJvb3QudXBkYXRlQmxvY2tlZEJ5UmVzaXplID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHVuYmxvY2tUaW1lb3V0XzEpO1xuICAgICAgICAgICAgICAgICAgICB1bmJsb2NrVGltZW91dF8xID0gd2luZG93LnNldFRpbWVvdXQocmVzaXplVW5ibG9ja1VwZGF0ZV8xLCAyNTApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsUHJvamVjdGlvblN0YXRlLmhhc0FuaW1hdGVkU2luY2VSZXNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbFByb2plY3Rpb25TdGF0ZS5oYXNBbmltYXRlZFNpbmNlUmVzaXplID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5ub2Rlcy5mb3JFYWNoKGZpbmlzaEFuaW1hdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsYXlvdXRJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMucm9vdC5yZWdpc3RlclNoYXJlZE5vZGUobGF5b3V0SWQsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gT25seSByZWdpc3RlciB0aGUgaGFuZGxlciBpZiBpdCByZXF1aXJlcyBsYXlvdXQgYW5pbWF0aW9uXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmFuaW1hdGUgIT09IGZhbHNlICYmXG4gICAgICAgICAgICAgICAgdmlzdWFsRWxlbWVudCAmJlxuICAgICAgICAgICAgICAgIChsYXlvdXRJZCB8fCBsYXlvdXQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKFwiZGlkVXBkYXRlXCIsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2IsIF9jLCBfZCwgX2UsIF9mO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGVsdGEgPSBfYS5kZWx0YSwgaGFzTGF5b3V0Q2hhbmdlZCA9IF9hLmhhc0xheW91dENoYW5nZWQsIGhhc1JlbGF0aXZlVGFyZ2V0Q2hhbmdlZCA9IF9hLmhhc1JlbGF0aXZlVGFyZ2V0Q2hhbmdlZCwgbmV3TGF5b3V0ID0gX2EubGF5b3V0O1xuICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuaXNUcmVlQW5pbWF0aW9uQmxvY2tlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5yZWxhdGl2ZVRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBDaGVjayBoZXJlIGlmIGFuIGFuaW1hdGlvbiBleGlzdHNcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxheW91dFRyYW5zaXRpb24gPSAoX2MgPSAoX2IgPSBfdGhpcy5vcHRpb25zLnRyYW5zaXRpb24pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHZpc3VhbEVsZW1lbnQuZ2V0RGVmYXVsdFRyYW5zaXRpb24oKSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogZGVmYXVsdExheW91dFRyYW5zaXRpb247XG4gICAgICAgICAgICAgICAgICAgIHZhciBfZyA9IHZpc3VhbEVsZW1lbnQuZ2V0UHJvcHMoKSwgb25MYXlvdXRBbmltYXRpb25TdGFydCA9IF9nLm9uTGF5b3V0QW5pbWF0aW9uU3RhcnQsIG9uTGF5b3V0QW5pbWF0aW9uQ29tcGxldGUgPSBfZy5vbkxheW91dEFuaW1hdGlvbkNvbXBsZXRlO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogVGhlIHRhcmdldCBsYXlvdXQgb2YgdGhlIGVsZW1lbnQgbWlnaHQgc3RheSB0aGUgc2FtZSxcbiAgICAgICAgICAgICAgICAgICAgICogYnV0IGl0cyBwb3NpdGlvbiByZWxhdGl2ZSB0byBpdHMgcGFyZW50IGhhcyBjaGFuZ2VkLlxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldENoYW5nZWQgPSAhX3RoaXMudGFyZ2V0TGF5b3V0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAhYm94RXF1YWxzKF90aGlzLnRhcmdldExheW91dCwgbmV3TGF5b3V0KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzUmVsYXRpdmVUYXJnZXRDaGFuZ2VkO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogSWYgdGhlIGxheW91dCBoYXNuJ3Qgc2VlbWVkIHRvIGhhdmUgY2hhbmdlZCwgaXQgbWlnaHQgYmUgdGhhdCB0aGVcbiAgICAgICAgICAgICAgICAgICAgICogZWxlbWVudCBpcyB2aXN1YWxseSBpbiB0aGUgc2FtZSBwbGFjZSBpbiB0aGUgZG9jdW1lbnQgYnV0IGl0cyBwb3NpdGlvblxuICAgICAgICAgICAgICAgICAgICAgKiByZWxhdGl2ZSB0byBpdHMgcGFyZW50IGhhcyBpbmRlZWQgY2hhbmdlZC4gU28gaGVyZSB3ZSBjaGVjayBmb3IgdGhhdC5cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIHZhciBoYXNPbmx5UmVsYXRpdmVUYXJnZXRDaGFuZ2VkID0gIWhhc0xheW91dENoYW5nZWQgJiYgaGFzUmVsYXRpdmVUYXJnZXRDaGFuZ2VkO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKChfZCA9IF90aGlzLnJlc3VtZUZyb20pID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5pbnN0YW5jZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc09ubHlSZWxhdGl2ZVRhcmdldENoYW5nZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChoYXNMYXlvdXRDaGFuZ2VkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhcmdldENoYW5nZWQgfHwgIV90aGlzLmN1cnJlbnRBbmltYXRpb24pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLnJlc3VtZUZyb20pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5yZXN1bWluZ0Zyb20gPSBfdGhpcy5yZXN1bWVGcm9tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnJlc3VtaW5nRnJvbS5yZXN1bWluZ0Zyb20gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5zZXRBbmltYXRpb25PcmlnaW4oZGVsdGEsIGhhc09ubHlSZWxhdGl2ZVRhcmdldENoYW5nZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFuaW1hdGlvbk9wdGlvbnMgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZ2V0VmFsdWVUcmFuc2l0aW9uKGxheW91dFRyYW5zaXRpb24sIFwibGF5b3V0XCIpKSwgeyBvblBsYXk6IG9uTGF5b3V0QW5pbWF0aW9uU3RhcnQsIG9uQ29tcGxldGU6IG9uTGF5b3V0QW5pbWF0aW9uQ29tcGxldGUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmlzdWFsRWxlbWVudC5zaG91bGRSZWR1Y2VNb3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25PcHRpb25zLmRlbGF5ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25PcHRpb25zLnR5cGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnN0YXJ0QW5pbWF0aW9uKGFuaW1hdGlvbk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBJZiB0aGUgbGF5b3V0IGhhc24ndCBjaGFuZ2VkIGFuZCB3ZSBoYXZlIGFuIGFuaW1hdGlvbiB0aGF0IGhhc24ndCBzdGFydGVkIHlldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIGZpbmlzaCBpdCBpbW1lZGlhdGVseS4gT3RoZXJ3aXNlIGl0IHdpbGwgYmUgYW5pbWF0aW5nIGZyb20gYSBsb2NhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICogdGhhdCB3YXMgcHJvYmFibHkgbmV2ZXIgY29tbWl0ZWQgdG8gc2NyZWVuIGFuZCBsb29rIGxpa2UgYSBqdW1weSBib3guXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzTGF5b3V0Q2hhbmdlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmFuaW1hdGlvblByb2dyZXNzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuZmluaXNoQW5pbWF0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5pc0xlYWQoKSAmJiAoKF9mID0gKF9lID0gX3RoaXMub3B0aW9ucykub25FeGl0Q29tcGxldGUpID09PSBudWxsIHx8IF9mID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZi5jYWxsKF9lKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgX3RoaXMudGFyZ2V0TGF5b3V0ID0gbmV3TGF5b3V0O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUudW5tb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubGF5b3V0SWQgJiYgdGhpcy53aWxsVXBkYXRlKCk7XG4gICAgICAgICAgICB0aGlzLnJvb3Qubm9kZXMucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgKF9hID0gdGhpcy5nZXRTdGFjaygpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgKF9iID0gdGhpcy5wYXJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jaGlsZHJlbi5kZWxldGUodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY2FuY2VsU3luYy5wcmVSZW5kZXIodGhpcy51cGRhdGVQcm9qZWN0aW9uKTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gb25seSBvbiB0aGUgcm9vdFxuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuYmxvY2tVcGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1hbnVhbGx5QmxvY2tlZCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS51bmJsb2NrVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVNYW51YWxseUJsb2NrZWQgPSBmYWxzZTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmlzVXBkYXRlQmxvY2tlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU1hbnVhbGx5QmxvY2tlZCB8fCB0aGlzLnVwZGF0ZUJsb2NrZWRCeVJlc2l6ZTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmlzVHJlZUFuaW1hdGlvbkJsb2NrZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuaXNBbmltYXRpb25CbG9ja2VkIHx8XG4gICAgICAgICAgICAgICAgKChfYSA9IHRoaXMucGFyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaXNUcmVlQW5pbWF0aW9uQmxvY2tlZCgpKSB8fFxuICAgICAgICAgICAgICAgIGZhbHNlKTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gTm90ZTogY3VycmVudGx5IG9ubHkgcnVubmluZyBvbiByb290IG5vZGVcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnN0YXJ0VXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNVcGRhdGVCbG9ja2VkKCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5pc1VwZGF0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIChfYSA9IHRoaXMubm9kZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb3JFYWNoKHJlc2V0Um90YXRpb24pO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUud2lsbFVwZGF0ZSA9IGZ1bmN0aW9uIChzaG91bGROb3RpZnlMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgaWYgKHNob3VsZE5vdGlmeUxpc3RlbmVycyA9PT0gdm9pZCAwKSB7IHNob3VsZE5vdGlmeUxpc3RlbmVycyA9IHRydWU7IH1cbiAgICAgICAgICAgIGlmICh0aGlzLnJvb3QuaXNVcGRhdGVCbG9ja2VkKCkpIHtcbiAgICAgICAgICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLm9wdGlvbnMpLm9uRXhpdENvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgIXRoaXMucm9vdC5pc1VwZGF0aW5nICYmIHRoaXMucm9vdC5zdGFydFVwZGF0ZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNMYXlvdXREaXJ0eSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLmlzTGF5b3V0RGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMucGF0aFtpXTtcbiAgICAgICAgICAgICAgICBub2RlLnNob3VsZFJlc2V0VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBUT0RPOiBDaGVjayB3ZSBoYXZlbid0IHVwZGF0ZWQgdGhlIHNjcm9sbFxuICAgICAgICAgICAgICAgICAqIHNpbmNlIHRoZSBsYXN0IGRpZFVwZGF0ZVxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIG5vZGUudXBkYXRlU2Nyb2xsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX2QgPSB0aGlzLm9wdGlvbnMsIGxheW91dElkID0gX2QubGF5b3V0SWQsIGxheW91dCA9IF9kLmxheW91dDtcbiAgICAgICAgICAgIGlmIChsYXlvdXRJZCA9PT0gdW5kZWZpbmVkICYmICFsYXlvdXQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVRlbXBsYXRlID0gKF9jID0gdGhpcy5vcHRpb25zLnZpc3VhbEVsZW1lbnQpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5nZXRQcm9wcygpLnRyYW5zZm9ybVRlbXBsYXRlO1xuICAgICAgICAgICAgdGhpcy5wcmV2VHJhbnNmb3JtVGVtcGxhdGVWYWx1ZSA9IHRyYW5zZm9ybVRlbXBsYXRlID09PSBudWxsIHx8IHRyYW5zZm9ybVRlbXBsYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0cmFuc2Zvcm1UZW1wbGF0ZSh0aGlzLmxhdGVzdFZhbHVlcywgXCJcIik7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNuYXBzaG90KCk7XG4gICAgICAgICAgICBzaG91bGROb3RpZnlMaXN0ZW5lcnMgJiYgdGhpcy5ub3RpZnlMaXN0ZW5lcnMoXCJ3aWxsVXBkYXRlXCIpO1xuICAgICAgICB9O1xuICAgICAgICAvLyBOb3RlOiBDdXJyZW50bHkgb25seSBydW5uaW5nIG9uIHJvb3Qgbm9kZVxuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuZGlkVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHVwZGF0ZVdhc0Jsb2NrZWQgPSB0aGlzLmlzVXBkYXRlQmxvY2tlZCgpO1xuICAgICAgICAgICAgLy8gV2hlbiBkb2luZyBhbiBpbnN0YW50IHRyYW5zaXRpb24sIHdlIHNraXAgdGhlIGxheW91dCB1cGRhdGUsXG4gICAgICAgICAgICAvLyBidXQgc2hvdWxkIHN0aWxsIGNsZWFuIHVwIHRoZSBtZWFzdXJlbWVudHMgc28gdGhhdCB0aGUgbmV4dFxuICAgICAgICAgICAgLy8gc25hcHNob3QgY291bGQgYmUgdGFrZW4gY29ycmVjdGx5LlxuICAgICAgICAgICAgaWYgKHVwZGF0ZVdhc0Jsb2NrZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVuYmxvY2tVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyQWxsU25hcHNob3RzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2Rlcy5mb3JFYWNoKGNsZWFyTWVhc3VyZW1lbnRzKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNVcGRhdGluZylcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLmlzVXBkYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogU2VhcmNoIGZvciBhbmQgbW91bnQgbmV3bHktYWRkZWQgcHJvamVjdGlvbiBlbGVtZW50cy5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBUT0RPOiBFdmVyeSB0aW1lIGEgbmV3IGNvbXBvbmVudCBpcyByZW5kZXJlZCB3ZSBjb3VsZCBzZWFyY2ggdXAgdGhlIHRyZWUgZm9yXG4gICAgICAgICAgICAgKiB0aGUgY2xvc2VzdCBtb3VudGVkIG5vZGUgYW5kIHF1ZXJ5IGZyb20gdGhlcmUgcmF0aGVyIHRoYW4gZG9jdW1lbnQuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICh0aGlzLnBvdGVudGlhbE5vZGVzLnNpemUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvdGVudGlhbE5vZGVzLmZvckVhY2gobW91bnROb2RlRWFybHkpO1xuICAgICAgICAgICAgICAgIHRoaXMucG90ZW50aWFsTm9kZXMuY2xlYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV3JpdGVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5ub2Rlcy5mb3JFYWNoKHJlc2V0VHJhbnNmb3JtU3R5bGUpO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZWFkID09PT09PT09PT09PT09PT09PVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICAvLyBVcGRhdGUgbGF5b3V0IG1lYXN1cmVtZW50cyBvZiB1cGRhdGVkIGNoaWxkcmVuXG4gICAgICAgICAgICB0aGlzLm5vZGVzLmZvckVhY2godXBkYXRlTGF5b3V0KTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV3JpdGVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgLy8gTm90aWZ5IGxpc3RlbmVycyB0aGF0IHRoZSBsYXlvdXQgaXMgdXBkYXRlZFxuICAgICAgICAgICAgdGhpcy5ub2Rlcy5mb3JFYWNoKG5vdGlmeUxheW91dFVwZGF0ZSk7XG4gICAgICAgICAgICB0aGlzLmNsZWFyQWxsU25hcHNob3RzKCk7XG4gICAgICAgICAgICAvLyBGbHVzaCBhbnkgc2NoZWR1bGVkIHVwZGF0ZXNcbiAgICAgICAgICAgIGZsdXNoU3luYy51cGRhdGUoKTtcbiAgICAgICAgICAgIGZsdXNoU3luYy5wcmVSZW5kZXIoKTtcbiAgICAgICAgICAgIGZsdXNoU3luYy5yZW5kZXIoKTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmNsZWFyQWxsU25hcHNob3RzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5ub2Rlcy5mb3JFYWNoKGNsZWFyU25hcHNob3QpO1xuICAgICAgICAgICAgdGhpcy5zaGFyZWROb2Rlcy5mb3JFYWNoKHJlbW92ZUxlYWRTbmFwc2hvdHMpO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuc2NoZWR1bGVVcGRhdGVQcm9qZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3luYy5wcmVSZW5kZXIodGhpcy51cGRhdGVQcm9qZWN0aW9uLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5zY2hlZHVsZUNoZWNrQWZ0ZXJVbm1vdW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgdGhlIHVubW91bnRpbmcgbm9kZSBpcyBpbiBhIGxheW91dEdyb3VwIGFuZCBkaWQgdHJpZ2dlciBhIHdpbGxVcGRhdGUsXG4gICAgICAgICAgICAgKiB3ZSBtYW51YWxseSBjYWxsIGRpZFVwZGF0ZSB0byBnaXZlIGEgY2hhbmNlIHRvIHRoZSBzaWJsaW5ncyB0byBhbmltYXRlLlxuICAgICAgICAgICAgICogT3RoZXJ3aXNlLCBjbGVhbnVwIGFsbCBzbmFwc2hvdHMgdG8gcHJldmVudHMgZnV0dXJlIG5vZGVzIGZyb20gcmV1c2luZyB0aGVtLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBzeW5jLnBvc3RSZW5kZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5pc0xheW91dERpcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnJvb3QuZGlkVXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5yb290LmNoZWNrVXBkYXRlRmFpbGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVcGRhdGUgbWVhc3VyZW1lbnRzXG4gICAgICAgICAqL1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUudXBkYXRlU25hcHNob3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zbmFwc2hvdCB8fCAhdGhpcy5pbnN0YW5jZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgbWVhc3VyZWQgPSB0aGlzLm1lYXN1cmUoKTtcbiAgICAgICAgICAgIHZhciBsYXlvdXQgPSB0aGlzLnJlbW92ZVRyYW5zZm9ybSh0aGlzLnJlbW92ZUVsZW1lbnRTY3JvbGwobWVhc3VyZWQpKTtcbiAgICAgICAgICAgIHJvdW5kQm94KGxheW91dCk7XG4gICAgICAgICAgICB0aGlzLnNuYXBzaG90ID0ge1xuICAgICAgICAgICAgICAgIG1lYXN1cmVkOiBtZWFzdXJlZCxcbiAgICAgICAgICAgICAgICBsYXlvdXQ6IGxheW91dCxcbiAgICAgICAgICAgICAgICBsYXRlc3RWYWx1ZXM6IHt9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnVwZGF0ZUxheW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAvLyBUT0RPOiBJbmNvcnBvcmF0ZSBpbnRvIGEgZm9yd2FyZGVkIHNjcm9sbCBvZmZzZXRcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsKCk7XG4gICAgICAgICAgICBpZiAoISh0aGlzLm9wdGlvbnMuYWx3YXlzTWVhc3VyZUxheW91dCAmJiB0aGlzLmlzTGVhZCgpKSAmJlxuICAgICAgICAgICAgICAgICF0aGlzLmlzTGF5b3V0RGlydHkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFdoZW4gYSBub2RlIGlzIG1vdW50ZWQsIGl0IHNpbXBseSByZXN1bWVzIGZyb20gdGhlIHByZXZMZWFkJ3NcbiAgICAgICAgICAgICAqIHNuYXBzaG90IGluc3RlYWQgb2YgdGFraW5nIGEgbmV3IG9uZSwgYnV0IHRoZSBhbmNlc3RvcnMgc2Nyb2xsXG4gICAgICAgICAgICAgKiBtaWdodCBoYXZlIHVwZGF0ZWQgd2hpbGUgdGhlIHByZXZMZWFkIGlzIHVubW91bnRlZC4gV2UgbmVlZCB0b1xuICAgICAgICAgICAgICogdXBkYXRlIHRoZSBzY3JvbGwgYWdhaW4gdG8gbWFrZSBzdXJlIHRoZSBsYXlvdXQgd2UgbWVhc3VyZSBpc1xuICAgICAgICAgICAgICogdXAgdG8gZGF0ZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKHRoaXMucmVzdW1lRnJvbSAmJiAhdGhpcy5yZXN1bWVGcm9tLmluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnBhdGhbaV07XG4gICAgICAgICAgICAgICAgICAgIG5vZGUudXBkYXRlU2Nyb2xsKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG1lYXN1cmVkID0gdGhpcy5tZWFzdXJlKCk7XG4gICAgICAgICAgICByb3VuZEJveChtZWFzdXJlZCk7XG4gICAgICAgICAgICB2YXIgcHJldkxheW91dCA9IHRoaXMubGF5b3V0O1xuICAgICAgICAgICAgdGhpcy5sYXlvdXQgPSB7XG4gICAgICAgICAgICAgICAgbWVhc3VyZWQ6IG1lYXN1cmVkLFxuICAgICAgICAgICAgICAgIGFjdHVhbDogdGhpcy5yZW1vdmVFbGVtZW50U2Nyb2xsKG1lYXN1cmVkKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmxheW91dENvcnJlY3RlZCA9IGNyZWF0ZUJveCgpO1xuICAgICAgICAgICAgdGhpcy5pc0xheW91dERpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnByb2plY3Rpb25EZWx0YSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5TGlzdGVuZXJzKFwibWVhc3VyZVwiLCB0aGlzLmxheW91dC5hY3R1YWwpO1xuICAgICAgICAgICAgKF9hID0gdGhpcy5vcHRpb25zLnZpc3VhbEVsZW1lbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5ub3RpZnlMYXlvdXRNZWFzdXJlKHRoaXMubGF5b3V0LmFjdHVhbCwgcHJldkxheW91dCA9PT0gbnVsbCB8fCBwcmV2TGF5b3V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcmV2TGF5b3V0LmFjdHVhbCk7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS51cGRhdGVTY3JvbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxheW91dFNjcm9sbCAmJiB0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1Njcm9sbFJvb3QgPSBjaGVja0lzU2Nyb2xsUm9vdCh0aGlzLmluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbCA9IG1lYXN1cmVTY3JvbGwodGhpcy5pbnN0YW5jZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5yZXNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICghcmVzZXRUcmFuc2Zvcm0pXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGlzUmVzZXRSZXF1ZXN0ZWQgPSB0aGlzLmlzTGF5b3V0RGlydHkgfHwgdGhpcy5zaG91bGRSZXNldFRyYW5zZm9ybTtcbiAgICAgICAgICAgIHZhciBoYXNQcm9qZWN0aW9uID0gdGhpcy5wcm9qZWN0aW9uRGVsdGEgJiYgIWlzRGVsdGFaZXJvKHRoaXMucHJvamVjdGlvbkRlbHRhKTtcbiAgICAgICAgICAgIHZhciB0cmFuc2Zvcm1UZW1wbGF0ZSA9IChfYSA9IHRoaXMub3B0aW9ucy52aXN1YWxFbGVtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0UHJvcHMoKS50cmFuc2Zvcm1UZW1wbGF0ZTtcbiAgICAgICAgICAgIHZhciB0cmFuc2Zvcm1UZW1wbGF0ZVZhbHVlID0gdHJhbnNmb3JtVGVtcGxhdGUgPT09IG51bGwgfHwgdHJhbnNmb3JtVGVtcGxhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRyYW5zZm9ybVRlbXBsYXRlKHRoaXMubGF0ZXN0VmFsdWVzLCBcIlwiKTtcbiAgICAgICAgICAgIHZhciB0cmFuc2Zvcm1UZW1wbGF0ZUhhc0NoYW5nZWQgPSB0cmFuc2Zvcm1UZW1wbGF0ZVZhbHVlICE9PSB0aGlzLnByZXZUcmFuc2Zvcm1UZW1wbGF0ZVZhbHVlO1xuICAgICAgICAgICAgaWYgKGlzUmVzZXRSZXF1ZXN0ZWQgJiZcbiAgICAgICAgICAgICAgICAoaGFzUHJvamVjdGlvbiB8fFxuICAgICAgICAgICAgICAgICAgICBoYXNUcmFuc2Zvcm0odGhpcy5sYXRlc3RWYWx1ZXMpIHx8XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVRlbXBsYXRlSGFzQ2hhbmdlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNldFRyYW5zZm9ybSh0aGlzLmluc3RhbmNlLCB0cmFuc2Zvcm1UZW1wbGF0ZVZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3VsZFJlc2V0VHJhbnNmb3JtID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2hlZHVsZVJlbmRlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUubWVhc3VyZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB2aXN1YWxFbGVtZW50ID0gdGhpcy5vcHRpb25zLnZpc3VhbEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIXZpc3VhbEVsZW1lbnQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUJveCgpO1xuICAgICAgICAgICAgdmFyIGJveCA9IHZpc3VhbEVsZW1lbnQubWVhc3VyZVZpZXdwb3J0Qm94KCk7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdmlld3BvcnQgc2Nyb2xsIHRvIGdpdmUgcGFnZS1yZWxhdGl2ZSBjb29yZGluYXRlc1xuICAgICAgICAgICAgdmFyIHNjcm9sbCA9IHRoaXMucm9vdC5zY3JvbGw7XG4gICAgICAgICAgICBpZiAoc2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlQXhpcyhib3gueCwgc2Nyb2xsLngpO1xuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZUF4aXMoYm94LnksIHNjcm9sbC55KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBib3g7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5yZW1vdmVFbGVtZW50U2Nyb2xsID0gZnVuY3Rpb24gKGJveCkge1xuICAgICAgICAgICAgdmFyIGJveFdpdGhvdXRTY3JvbGwgPSBjcmVhdGVCb3goKTtcbiAgICAgICAgICAgIGNvcHlCb3hJbnRvKGJveFdpdGhvdXRTY3JvbGwsIGJveCk7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFBlcmZvcm1hbmNlIFRPRE86IEtlZXAgYSBjdW11bGF0aXZlIHNjcm9sbCBvZmZzZXQgZG93biB0aGUgdHJlZVxuICAgICAgICAgICAgICogcmF0aGVyIHRoYW4gbG9vcCBiYWNrIHVwIHRoZSBwYXRoLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5wYXRoW2ldO1xuICAgICAgICAgICAgICAgIHZhciBzY3JvbGxfMSA9IG5vZGUuc2Nyb2xsLCBvcHRpb25zID0gbm9kZS5vcHRpb25zLCBpc1Njcm9sbFJvb3QgPSBub2RlLmlzU2Nyb2xsUm9vdDtcbiAgICAgICAgICAgICAgICBpZiAobm9kZSAhPT0gdGhpcy5yb290ICYmIHNjcm9sbF8xICYmIG9wdGlvbnMubGF5b3V0U2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBJZiB0aGlzIGlzIGEgbmV3IHNjcm9sbCByb290LCB3ZSB3YW50IHRvIHJlbW92ZSBhbGwgcHJldmlvdXMgc2Nyb2xsc1xuICAgICAgICAgICAgICAgICAgICAgKiBmcm9tIHRoZSB2aWV3cG9ydCBib3guXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNTY3JvbGxSb290KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb3B5Qm94SW50byhib3hXaXRob3V0U2Nyb2xsLCBib3gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvb3RTY3JvbGwgPSB0aGlzLnJvb3Quc2Nyb2xsO1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBVbmRvIHRoZSBhcHBsaWNhdGlvbiBvZiBwYWdlIHNjcm9sbCB0aGF0IHdhcyBvcmlnaW5hbGx5IGFkZGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiB0byB0aGUgbWVhc3VyZWQgYm91bmRpbmcgYm94LlxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocm9vdFNjcm9sbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZUF4aXMoYm94V2l0aG91dFNjcm9sbC54LCAtcm9vdFNjcm9sbC54KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVBeGlzKGJveFdpdGhvdXRTY3JvbGwueSwgLXJvb3RTY3JvbGwueSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlQXhpcyhib3hXaXRob3V0U2Nyb2xsLngsIHNjcm9sbF8xLngpO1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVBeGlzKGJveFdpdGhvdXRTY3JvbGwueSwgc2Nyb2xsXzEueSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJveFdpdGhvdXRTY3JvbGw7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5hcHBseVRyYW5zZm9ybSA9IGZ1bmN0aW9uIChib3gsIHRyYW5zZm9ybU9ubHkpIHtcbiAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1Pbmx5ID09PSB2b2lkIDApIHsgdHJhbnNmb3JtT25seSA9IGZhbHNlOyB9XG4gICAgICAgICAgICB2YXIgd2l0aFRyYW5zZm9ybXMgPSBjcmVhdGVCb3goKTtcbiAgICAgICAgICAgIGNvcHlCb3hJbnRvKHdpdGhUcmFuc2Zvcm1zLCBib3gpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMucGF0aFtpXTtcbiAgICAgICAgICAgICAgICBpZiAoIXRyYW5zZm9ybU9ubHkgJiZcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5vcHRpb25zLmxheW91dFNjcm9sbCAmJlxuICAgICAgICAgICAgICAgICAgICBub2RlLnNjcm9sbCAmJlxuICAgICAgICAgICAgICAgICAgICBub2RlICE9PSBub2RlLnJvb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtQm94KHdpdGhUcmFuc2Zvcm1zLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAtbm9kZS5zY3JvbGwueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IC1ub2RlLnNjcm9sbC55LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNUcmFuc2Zvcm0obm9kZS5sYXRlc3RWYWx1ZXMpKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1Cb3god2l0aFRyYW5zZm9ybXMsIG5vZGUubGF0ZXN0VmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNUcmFuc2Zvcm0odGhpcy5sYXRlc3RWYWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtQm94KHdpdGhUcmFuc2Zvcm1zLCB0aGlzLmxhdGVzdFZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gd2l0aFRyYW5zZm9ybXM7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5yZW1vdmVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoYm94KSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB2YXIgYm94V2l0aG91dFRyYW5zZm9ybSA9IGNyZWF0ZUJveCgpO1xuICAgICAgICAgICAgY29weUJveEludG8oYm94V2l0aG91dFRyYW5zZm9ybSwgYm94KTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnBhdGhbaV07XG4gICAgICAgICAgICAgICAgaWYgKCFub2RlLmluc3RhbmNlKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAoIWhhc1RyYW5zZm9ybShub2RlLmxhdGVzdFZhbHVlcykpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGhhc1NjYWxlKG5vZGUubGF0ZXN0VmFsdWVzKSAmJiBub2RlLnVwZGF0ZVNuYXBzaG90KCk7XG4gICAgICAgICAgICAgICAgdmFyIHNvdXJjZUJveCA9IGNyZWF0ZUJveCgpO1xuICAgICAgICAgICAgICAgIHZhciBub2RlQm94ID0gbm9kZS5tZWFzdXJlKCk7XG4gICAgICAgICAgICAgICAgY29weUJveEludG8oc291cmNlQm94LCBub2RlQm94KTtcbiAgICAgICAgICAgICAgICByZW1vdmVCb3hUcmFuc2Zvcm1zKGJveFdpdGhvdXRUcmFuc2Zvcm0sIG5vZGUubGF0ZXN0VmFsdWVzLCAoX2EgPSBub2RlLnNuYXBzaG90KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGF5b3V0LCBzb3VyY2VCb3gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhhc1RyYW5zZm9ybSh0aGlzLmxhdGVzdFZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVCb3hUcmFuc2Zvcm1zKGJveFdpdGhvdXRUcmFuc2Zvcm0sIHRoaXMubGF0ZXN0VmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBib3hXaXRob3V0VHJhbnNmb3JtO1xuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICpcbiAgICAgICAgICovXG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5zZXRUYXJnZXREZWx0YSA9IGZ1bmN0aW9uIChkZWx0YSkge1xuICAgICAgICAgICAgdGhpcy50YXJnZXREZWx0YSA9IGRlbHRhO1xuICAgICAgICAgICAgdGhpcy5yb290LnNjaGVkdWxlVXBkYXRlUHJvamVjdGlvbigpO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuc2V0T3B0aW9ucyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBfX2Fzc2lnbihfX2Fzc2lnbihfX2Fzc2lnbih7fSwgdGhpcy5vcHRpb25zKSwgb3B0aW9ucyksIHsgY3Jvc3NmYWRlOiAoX2EgPSBvcHRpb25zLmNyb3NzZmFkZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdHJ1ZSB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmNsZWFyTWVhc3VyZW1lbnRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGwgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmxheW91dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnByZXZUcmFuc2Zvcm1UZW1wbGF0ZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy50YXJnZXREZWx0YSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5pc0xheW91dERpcnR5ID0gZmFsc2U7XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGcmFtZSBjYWxjdWxhdGlvbnNcbiAgICAgICAgICovXG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5yZXNvbHZlVGFyZ2V0RGVsdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB2YXIgX2IgPSB0aGlzLm9wdGlvbnMsIGxheW91dCA9IF9iLmxheW91dCwgbGF5b3V0SWQgPSBfYi5sYXlvdXRJZDtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgd2UgaGF2ZSBubyBsYXlvdXQsIHdlIGNhbid0IHBlcmZvcm0gcHJvamVjdGlvbiwgc28gZWFybHkgcmV0dXJuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICghdGhpcy5sYXlvdXQgfHwgIShsYXlvdXQgfHwgbGF5b3V0SWQpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgd2UgZG9uJ3QgaGF2ZSBhIHRhcmdldERlbHRhIGJ1dCBkbyBoYXZlIGEgbGF5b3V0LCB3ZSBjYW4gYXR0ZW1wdCB0byByZXNvbHZlXG4gICAgICAgICAgICAgKiBhIHJlbGF0aXZlUGFyZW50LiBUaGlzIHdpbGwgYWxsb3cgYSBjb21wb25lbnQgdG8gcGVyZm9ybSBzY2FsZSBjb3JyZWN0aW9uXG4gICAgICAgICAgICAgKiBldmVuIGlmIG5vIGFuaW1hdGlvbiBoYXMgc3RhcnRlZC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgLy8gVE9ETyBJZiB0aGlzIGlzIHVuc3VjY2Vzc2Z1bCB0aGlzIGN1cnJlbnRseSBoYXBwZW5zIGV2ZXJ5IGZyYW1lXG4gICAgICAgICAgICBpZiAoIXRoaXMudGFyZ2V0RGVsdGEgJiYgIXRoaXMucmVsYXRpdmVUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBUaGlzIGlzIGEgc2VtaS1yZXBldGl0aW9uIG9mIGZ1cnRoZXIgZG93biB0aGlzIGZ1bmN0aW9uLCBtYWtlIERSWVxuICAgICAgICAgICAgICAgIHRoaXMucmVsYXRpdmVQYXJlbnQgPSB0aGlzLmdldENsb3Nlc3RQcm9qZWN0aW5nUGFyZW50KCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVsYXRpdmVQYXJlbnQgJiYgdGhpcy5yZWxhdGl2ZVBhcmVudC5sYXlvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZVRhcmdldCA9IGNyZWF0ZUJveCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlVGFyZ2V0T3JpZ2luID0gY3JlYXRlQm94KCk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGNSZWxhdGl2ZVBvc2l0aW9uKHRoaXMucmVsYXRpdmVUYXJnZXRPcmlnaW4sIHRoaXMubGF5b3V0LmFjdHVhbCwgdGhpcy5yZWxhdGl2ZVBhcmVudC5sYXlvdXQuYWN0dWFsKTtcbiAgICAgICAgICAgICAgICAgICAgY29weUJveEludG8odGhpcy5yZWxhdGl2ZVRhcmdldCwgdGhpcy5yZWxhdGl2ZVRhcmdldE9yaWdpbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB3ZSBoYXZlIG5vIHJlbGF0aXZlIHRhcmdldCBvciBubyB0YXJnZXQgZGVsdGEgb3VyIHRhcmdldCBpc24ndCB2YWxpZFxuICAgICAgICAgICAgICogZm9yIHRoaXMgZnJhbWUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICghdGhpcy5yZWxhdGl2ZVRhcmdldCAmJiAhdGhpcy50YXJnZXREZWx0YSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIExhenktaW5pdCB0YXJnZXQgZGF0YSBzdHJ1Y3R1cmVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKCF0aGlzLnRhcmdldCkge1xuICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gY3JlYXRlQm94KCk7XG4gICAgICAgICAgICAgICAgdGhpcy50YXJnZXRXaXRoVHJhbnNmb3JtcyA9IGNyZWF0ZUJveCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB3ZSd2ZSBnb3QgYSByZWxhdGl2ZSBib3ggZm9yIHRoaXMgY29tcG9uZW50LCByZXNvbHZlIGl0IGludG8gYSB0YXJnZXQgcmVsYXRpdmUgdG8gdGhlIHBhcmVudC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKHRoaXMucmVsYXRpdmVUYXJnZXQgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlVGFyZ2V0T3JpZ2luICYmXG4gICAgICAgICAgICAgICAgKChfYSA9IHRoaXMucmVsYXRpdmVQYXJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgY2FsY1JlbGF0aXZlQm94KHRoaXMudGFyZ2V0LCB0aGlzLnJlbGF0aXZlVGFyZ2V0LCB0aGlzLnJlbGF0aXZlUGFyZW50LnRhcmdldCk7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogSWYgd2UndmUgb25seSBnb3QgYSB0YXJnZXREZWx0YSwgcmVzb2x2ZSBpdCBpbnRvIGEgdGFyZ2V0XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnRhcmdldERlbHRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKEJvb2xlYW4odGhpcy5yZXN1bWluZ0Zyb20pKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFRoaXMgaXMgY3JlYXRpbmcgYSBuZXcgb2JqZWN0IGV2ZXJ5IGZyYW1lXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gdGhpcy5hcHBseVRyYW5zZm9ybSh0aGlzLmxheW91dC5hY3R1YWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29weUJveEludG8odGhpcy50YXJnZXQsIHRoaXMubGF5b3V0LmFjdHVhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFwcGx5Qm94RGVsdGEodGhpcy50YXJnZXQsIHRoaXMudGFyZ2V0RGVsdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogSWYgbm8gdGFyZ2V0LCB1c2Ugb3duIGxheW91dCBhcyB0YXJnZXRcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBjb3B5Qm94SW50byh0aGlzLnRhcmdldCwgdGhpcy5sYXlvdXQuYWN0dWFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgd2UndmUgYmVlbiB0b2xkIHRvIGF0dGVtcHQgdG8gcmVzb2x2ZSBhIHJlbGF0aXZlIHRhcmdldCwgZG8gc28uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICh0aGlzLmF0dGVtcHRUb1Jlc29sdmVSZWxhdGl2ZVRhcmdldCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXR0ZW1wdFRvUmVzb2x2ZVJlbGF0aXZlVGFyZ2V0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZVBhcmVudCA9IHRoaXMuZ2V0Q2xvc2VzdFByb2plY3RpbmdQYXJlbnQoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWxhdGl2ZVBhcmVudCAmJlxuICAgICAgICAgICAgICAgICAgICBCb29sZWFuKHRoaXMucmVsYXRpdmVQYXJlbnQucmVzdW1pbmdGcm9tKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIEJvb2xlYW4odGhpcy5yZXN1bWluZ0Zyb20pICYmXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLnJlbGF0aXZlUGFyZW50Lm9wdGlvbnMubGF5b3V0U2Nyb2xsICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVsYXRpdmVQYXJlbnQudGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVsYXRpdmVUYXJnZXQgPSBjcmVhdGVCb3goKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZVRhcmdldE9yaWdpbiA9IGNyZWF0ZUJveCgpO1xuICAgICAgICAgICAgICAgICAgICBjYWxjUmVsYXRpdmVQb3NpdGlvbih0aGlzLnJlbGF0aXZlVGFyZ2V0T3JpZ2luLCB0aGlzLnRhcmdldCwgdGhpcy5yZWxhdGl2ZVBhcmVudC50YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICBjb3B5Qm94SW50byh0aGlzLnJlbGF0aXZlVGFyZ2V0LCB0aGlzLnJlbGF0aXZlVGFyZ2V0T3JpZ2luKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5nZXRDbG9zZXN0UHJvamVjdGluZ1BhcmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5wYXJlbnQgfHwgaGFzVHJhbnNmb3JtKHRoaXMucGFyZW50LmxhdGVzdFZhbHVlcykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICgodGhpcy5wYXJlbnQucmVsYXRpdmVUYXJnZXQgfHwgdGhpcy5wYXJlbnQudGFyZ2V0RGVsdGEpICYmXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQubGF5b3V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmdldENsb3Nlc3RQcm9qZWN0aW5nUGFyZW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5jYWxjUHJvamVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHZhciBfYiA9IHRoaXMub3B0aW9ucywgbGF5b3V0ID0gX2IubGF5b3V0LCBsYXlvdXRJZCA9IF9iLmxheW91dElkO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB0aGlzIHNlY3Rpb24gb2YgdGhlIHRyZWUgaXNuJ3QgYW5pbWF0aW5nIHdlIGNhblxuICAgICAgICAgICAgICogZGVsZXRlIG91ciB0YXJnZXQgc291cmNlcyBmb3IgdGhlIGZvbGxvd2luZyBmcmFtZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5pc1RyZWVBbmltYXRpbmcgPSBCb29sZWFuKCgoX2EgPSB0aGlzLnBhcmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmlzVHJlZUFuaW1hdGluZykgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBbmltYXRpb24gfHxcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdBbmltYXRpb24pO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVHJlZUFuaW1hdGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0RGVsdGEgPSB0aGlzLnJlbGF0aXZlVGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmxheW91dCB8fCAhKGxheW91dCB8fCBsYXlvdXRJZCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGxlYWQgPSB0aGlzLmdldExlYWQoKTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmVzZXQgdGhlIGNvcnJlY3RlZCBib3ggd2l0aCB0aGUgbGF0ZXN0IHZhbHVlcyBmcm9tIGJveCwgYXMgd2UncmUgdGhlbiBnb2luZ1xuICAgICAgICAgICAgICogdG8gcGVyZm9ybSBtdXRhdGl2ZSBvcGVyYXRpb25zIG9uIGl0LlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjb3B5Qm94SW50byh0aGlzLmxheW91dENvcnJlY3RlZCwgdGhpcy5sYXlvdXQuYWN0dWFsKTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQXBwbHkgYWxsIHRoZSBwYXJlbnQgZGVsdGFzIHRvIHRoaXMgYm94IHRvIHByb2R1Y2UgdGhlIGNvcnJlY3RlZCBib3guIFRoaXNcbiAgICAgICAgICAgICAqIGlzIHRoZSBsYXlvdXQgYm94LCBhcyBpdCB3aWxsIGFwcGVhciBvbiBzY3JlZW4gYXMgYSByZXN1bHQgb2YgdGhlIHRyYW5zZm9ybXMgb2YgaXRzIHBhcmVudHMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGFwcGx5VHJlZURlbHRhcyh0aGlzLmxheW91dENvcnJlY3RlZCwgdGhpcy50cmVlU2NhbGUsIHRoaXMucGF0aCwgQm9vbGVhbih0aGlzLnJlc3VtaW5nRnJvbSkgfHwgdGhpcyAhPT0gbGVhZCk7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gbGVhZC50YXJnZXQ7XG4gICAgICAgICAgICBpZiAoIXRhcmdldClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBpZiAoIXRoaXMucHJvamVjdGlvbkRlbHRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9qZWN0aW9uRGVsdGEgPSBjcmVhdGVEZWx0YSgpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvamVjdGlvbkRlbHRhV2l0aFRyYW5zZm9ybSA9IGNyZWF0ZURlbHRhKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcHJldlRyZWVTY2FsZVggPSB0aGlzLnRyZWVTY2FsZS54O1xuICAgICAgICAgICAgdmFyIHByZXZUcmVlU2NhbGVZID0gdGhpcy50cmVlU2NhbGUueTtcbiAgICAgICAgICAgIHZhciBwcmV2UHJvamVjdGlvblRyYW5zZm9ybSA9IHRoaXMucHJvamVjdGlvblRyYW5zZm9ybTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVXBkYXRlIHRoZSBkZWx0YSBiZXR3ZWVuIHRoZSBjb3JyZWN0ZWQgYm94IGFuZCB0aGUgdGFyZ2V0IGJveCBiZWZvcmUgdXNlci1zZXQgdHJhbnNmb3JtcyB3ZXJlIGFwcGxpZWQuXG4gICAgICAgICAgICAgKiBUaGlzIHdpbGwgYWxsb3cgdXMgdG8gY2FsY3VsYXRlIHRoZSBjb3JyZWN0ZWQgYm9yZGVyUmFkaXVzIGFuZCBib3hTaGFkb3cgdG8gY29tcGVuc2F0ZVxuICAgICAgICAgICAgICogZm9yIG91ciBsYXlvdXQgcmVwcm9qZWN0aW9uLCBidXQgc3RpbGwgYWxsb3cgdGhlbSB0byBiZSBzY2FsZWQgY29ycmVjdGx5IGJ5IHRoZSB1c2VyLlxuICAgICAgICAgICAgICogSXQgbWlnaHQgYmUgdGhhdCB0byBzaW1wbGlmeSB0aGlzIHdlIG1heSB3YW50IHRvIGFjY2VwdCB0aGF0IHVzZXItc2V0IHNjYWxlIGlzIGFsc28gY29ycmVjdGVkXG4gICAgICAgICAgICAgKiBhbmQgd2Ugd291bGRuJ3QgaGF2ZSB0byBrZWVwIGFuZCBjYWxjIGJvdGggZGVsdGFzLCBPUiB3ZSBjb3VsZCBzdXBwb3J0IGEgdXNlciBzZXR0aW5nXG4gICAgICAgICAgICAgKiB0byBhbGxvdyBwZW9wbGUgdG8gY2hvb3NlIHdoZXRoZXIgdGhlc2Ugc3R5bGVzIGFyZSBjb3JyZWN0ZWQgYmFzZWQgb24ganVzdCB0aGVcbiAgICAgICAgICAgICAqIGxheW91dCByZXByb2plY3Rpb24gb3IgdGhlIGZpbmFsIGJvdW5kaW5nIGJveC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY2FsY0JveERlbHRhKHRoaXMucHJvamVjdGlvbkRlbHRhLCB0aGlzLmxheW91dENvcnJlY3RlZCwgdGFyZ2V0LCB0aGlzLmxhdGVzdFZhbHVlcyk7XG4gICAgICAgICAgICB0aGlzLnByb2plY3Rpb25UcmFuc2Zvcm0gPSBidWlsZFByb2plY3Rpb25UcmFuc2Zvcm0odGhpcy5wcm9qZWN0aW9uRGVsdGEsIHRoaXMudHJlZVNjYWxlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2plY3Rpb25UcmFuc2Zvcm0gIT09IHByZXZQcm9qZWN0aW9uVHJhbnNmb3JtIHx8XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlU2NhbGUueCAhPT0gcHJldlRyZWVTY2FsZVggfHxcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVTY2FsZS55ICE9PSBwcmV2VHJlZVNjYWxlWSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzUHJvamVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNjaGVkdWxlUmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlMaXN0ZW5lcnMoXCJwcm9qZWN0aW9uVXBkYXRlXCIsIHRhcmdldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5oaWRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5pc1Zpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIFRPRE86IFNjaGVkdWxlIHJlbmRlclxuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuc2hvdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIFRPRE86IFNjaGVkdWxlIHJlbmRlclxuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuc2NoZWR1bGVSZW5kZXIgPSBmdW5jdGlvbiAobm90aWZ5QWxsKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgICAgIGlmIChub3RpZnlBbGwgPT09IHZvaWQgMCkgeyBub3RpZnlBbGwgPSB0cnVlOyB9XG4gICAgICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLm9wdGlvbnMpLnNjaGVkdWxlUmVuZGVyKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gICAgICAgICAgICBub3RpZnlBbGwgJiYgKChfYyA9IHRoaXMuZ2V0U3RhY2soKSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnNjaGVkdWxlUmVuZGVyKCkpO1xuICAgICAgICAgICAgaWYgKHRoaXMucmVzdW1pbmdGcm9tICYmICF0aGlzLnJlc3VtaW5nRnJvbS5pbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdW1pbmdGcm9tID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuc2V0QW5pbWF0aW9uT3JpZ2luID0gZnVuY3Rpb24gKGRlbHRhLCBoYXNPbmx5UmVsYXRpdmVUYXJnZXRDaGFuZ2VkKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKGhhc09ubHlSZWxhdGl2ZVRhcmdldENoYW5nZWQgPT09IHZvaWQgMCkgeyBoYXNPbmx5UmVsYXRpdmVUYXJnZXRDaGFuZ2VkID0gZmFsc2U7IH1cbiAgICAgICAgICAgIHZhciBzbmFwc2hvdCA9IHRoaXMuc25hcHNob3Q7XG4gICAgICAgICAgICB2YXIgc25hcHNob3RMYXRlc3RWYWx1ZXMgPSAoc25hcHNob3QgPT09IG51bGwgfHwgc25hcHNob3QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNuYXBzaG90LmxhdGVzdFZhbHVlcykgfHwge307XG4gICAgICAgICAgICB2YXIgbWl4ZWRWYWx1ZXMgPSBfX2Fzc2lnbih7fSwgdGhpcy5sYXRlc3RWYWx1ZXMpO1xuICAgICAgICAgICAgdmFyIHRhcmdldERlbHRhID0gY3JlYXRlRGVsdGEoKTtcbiAgICAgICAgICAgIHRoaXMucmVsYXRpdmVUYXJnZXQgPSB0aGlzLnJlbGF0aXZlVGFyZ2V0T3JpZ2luID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5hdHRlbXB0VG9SZXNvbHZlUmVsYXRpdmVUYXJnZXQgPSAhaGFzT25seVJlbGF0aXZlVGFyZ2V0Q2hhbmdlZDtcbiAgICAgICAgICAgIHZhciByZWxhdGl2ZUxheW91dCA9IGNyZWF0ZUJveCgpO1xuICAgICAgICAgICAgdmFyIGlzU2hhcmVkTGF5b3V0QW5pbWF0aW9uID0gc25hcHNob3QgPT09IG51bGwgfHwgc25hcHNob3QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNuYXBzaG90LmlzU2hhcmVkO1xuICAgICAgICAgICAgdmFyIGlzT25seU1lbWJlciA9ICgoKF9hID0gdGhpcy5nZXRTdGFjaygpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubWVtYmVycy5sZW5ndGgpIHx8IDApIDw9IDE7XG4gICAgICAgICAgICB2YXIgc2hvdWxkQ3Jvc3NmYWRlT3BhY2l0eSA9IEJvb2xlYW4oaXNTaGFyZWRMYXlvdXRBbmltYXRpb24gJiZcbiAgICAgICAgICAgICAgICAhaXNPbmx5TWVtYmVyICYmXG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNyb3NzZmFkZSA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgICAgICF0aGlzLnBhdGguc29tZShoYXNPcGFjaXR5Q3Jvc3NmYWRlKSk7XG4gICAgICAgICAgICB0aGlzLmFuaW1hdGlvblByb2dyZXNzID0gMDtcbiAgICAgICAgICAgIHRoaXMubWl4VGFyZ2V0RGVsdGEgPSBmdW5jdGlvbiAobGF0ZXN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIHZhciBwcm9ncmVzcyA9IGxhdGVzdCAvIDEwMDA7XG4gICAgICAgICAgICAgICAgbWl4QXhpc0RlbHRhKHRhcmdldERlbHRhLngsIGRlbHRhLngsIHByb2dyZXNzKTtcbiAgICAgICAgICAgICAgICBtaXhBeGlzRGVsdGEodGFyZ2V0RGVsdGEueSwgZGVsdGEueSwgcHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICAgIF90aGlzLnNldFRhcmdldERlbHRhKHRhcmdldERlbHRhKTtcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMucmVsYXRpdmVUYXJnZXQgJiZcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMucmVsYXRpdmVUYXJnZXRPcmlnaW4gJiZcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMubGF5b3V0ICYmXG4gICAgICAgICAgICAgICAgICAgICgoX2EgPSBfdGhpcy5yZWxhdGl2ZVBhcmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxheW91dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsY1JlbGF0aXZlUG9zaXRpb24ocmVsYXRpdmVMYXlvdXQsIF90aGlzLmxheW91dC5hY3R1YWwsIF90aGlzLnJlbGF0aXZlUGFyZW50LmxheW91dC5hY3R1YWwpO1xuICAgICAgICAgICAgICAgICAgICBtaXhCb3goX3RoaXMucmVsYXRpdmVUYXJnZXQsIF90aGlzLnJlbGF0aXZlVGFyZ2V0T3JpZ2luLCByZWxhdGl2ZUxheW91dCwgcHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNTaGFyZWRMYXlvdXRBbmltYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuYW5pbWF0aW9uVmFsdWVzID0gbWl4ZWRWYWx1ZXM7XG4gICAgICAgICAgICAgICAgICAgIG1peFZhbHVlcyhtaXhlZFZhbHVlcywgc25hcHNob3RMYXRlc3RWYWx1ZXMsIF90aGlzLmxhdGVzdFZhbHVlcywgcHJvZ3Jlc3MsIHNob3VsZENyb3NzZmFkZU9wYWNpdHksIGlzT25seU1lbWJlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF90aGlzLnJvb3Quc2NoZWR1bGVVcGRhdGVQcm9qZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgX3RoaXMuc2NoZWR1bGVSZW5kZXIoKTtcbiAgICAgICAgICAgICAgICBfdGhpcy5hbmltYXRpb25Qcm9ncmVzcyA9IHByb2dyZXNzO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMubWl4VGFyZ2V0RGVsdGEoMCk7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5zdGFydEFuaW1hdGlvbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5TGlzdGVuZXJzKFwiYW5pbWF0aW9uU3RhcnRcIik7XG4gICAgICAgICAgICAoX2EgPSB0aGlzLmN1cnJlbnRBbmltYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdG9wKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5yZXN1bWluZ0Zyb20pIHtcbiAgICAgICAgICAgICAgICAoX2IgPSB0aGlzLnJlc3VtaW5nRnJvbS5jdXJyZW50QW5pbWF0aW9uKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc3RvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMucGVuZGluZ0FuaW1hdGlvbikge1xuICAgICAgICAgICAgICAgIGNhbmNlbFN5bmMudXBkYXRlKHRoaXMucGVuZGluZ0FuaW1hdGlvbik7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQW5pbWF0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBTdGFydCB0aGUgYW5pbWF0aW9uIGluIHRoZSBuZXh0IGZyYW1lIHRvIGhhdmUgYSBmcmFtZSB3aXRoIHByb2dyZXNzIDAsXG4gICAgICAgICAgICAgKiB3aGVyZSB0aGUgdGFyZ2V0IGlzIHRoZSBzYW1lIGFzIHdoZW4gdGhlIGFuaW1hdGlvbiBzdGFydGVkLCBzbyB3ZSBjYW5cbiAgICAgICAgICAgICAqIGNhbGN1bGF0ZSB0aGUgcmVsYXRpdmUgcG9zaXRpb25zIGNvcnJlY3RseSBmb3IgaW5zdGFudCB0cmFuc2l0aW9ucy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nQW5pbWF0aW9uID0gc3luYy51cGRhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGdsb2JhbFByb2plY3Rpb25TdGF0ZS5oYXNBbmltYXRlZFNpbmNlUmVzaXplID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBfdGhpcy5jdXJyZW50QW5pbWF0aW9uID0gYW5pbWF0ZSgwLCBhbmltYXRpb25UYXJnZXQsIF9fYXNzaWduKF9fYXNzaWduKHt9LCBvcHRpb25zKSwgeyBvblVwZGF0ZTogZnVuY3Rpb24gKGxhdGVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMubWl4VGFyZ2V0RGVsdGEobGF0ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIChfYSA9IG9wdGlvbnMub25VcGRhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKG9wdGlvbnMsIGxhdGVzdCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIChfYSA9IG9wdGlvbnMub25Db21wbGV0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5jb21wbGV0ZUFuaW1hdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICB9IH0pKTtcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMucmVzdW1pbmdGcm9tKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnJlc3VtaW5nRnJvbS5jdXJyZW50QW5pbWF0aW9uID0gX3RoaXMuY3VycmVudEFuaW1hdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX3RoaXMucGVuZGluZ0FuaW1hdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuY29tcGxldGVBbmltYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAodGhpcy5yZXN1bWluZ0Zyb20pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VtaW5nRnJvbS5jdXJyZW50QW5pbWF0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdW1pbmdGcm9tLnByZXNlcnZlT3BhY2l0eSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIChfYSA9IHRoaXMuZ2V0U3RhY2soKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmV4aXRBbmltYXRpb25Db21wbGV0ZSgpO1xuICAgICAgICAgICAgdGhpcy5yZXN1bWluZ0Zyb20gPVxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEFuaW1hdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uVmFsdWVzID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5TGlzdGVuZXJzKFwiYW5pbWF0aW9uQ29tcGxldGVcIik7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5maW5pc2hBbmltYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50QW5pbWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgKF9hID0gdGhpcy5taXhUYXJnZXREZWx0YSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGhpcywgYW5pbWF0aW9uVGFyZ2V0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBbmltYXRpb24uc3RvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZUFuaW1hdGlvbigpO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuYXBwbHlUcmFuc2Zvcm1zVG9UYXJnZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSB0aGlzLmdldExlYWQoKSwgdGFyZ2V0V2l0aFRyYW5zZm9ybXMgPSBfYS50YXJnZXRXaXRoVHJhbnNmb3JtcywgdGFyZ2V0ID0gX2EudGFyZ2V0LCBsYXlvdXQgPSBfYS5sYXlvdXQsIGxhdGVzdFZhbHVlcyA9IF9hLmxhdGVzdFZhbHVlcztcbiAgICAgICAgICAgIGlmICghdGFyZ2V0V2l0aFRyYW5zZm9ybXMgfHwgIXRhcmdldCB8fCAhbGF5b3V0KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvcHlCb3hJbnRvKHRhcmdldFdpdGhUcmFuc2Zvcm1zLCB0YXJnZXQpO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBBcHBseSB0aGUgbGF0ZXN0IHVzZXItc2V0IHRyYW5zZm9ybXMgdG8gdGhlIHRhcmdldEJveCB0byBwcm9kdWNlIHRoZSB0YXJnZXRCb3hGaW5hbC5cbiAgICAgICAgICAgICAqIFRoaXMgaXMgdGhlIGZpbmFsIGJveCB0aGF0IHdlIHdpbGwgdGhlbiBwcm9qZWN0IGludG8gYnkgY2FsY3VsYXRpbmcgYSB0cmFuc2Zvcm0gZGVsdGEgYW5kXG4gICAgICAgICAgICAgKiBhcHBseWluZyBpdCB0byB0aGUgY29ycmVjdGVkIGJveC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdHJhbnNmb3JtQm94KHRhcmdldFdpdGhUcmFuc2Zvcm1zLCBsYXRlc3RWYWx1ZXMpO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBVcGRhdGUgdGhlIGRlbHRhIGJldHdlZW4gdGhlIGNvcnJlY3RlZCBib3ggYW5kIHRoZSBmaW5hbCB0YXJnZXQgYm94LCBhZnRlclxuICAgICAgICAgICAgICogdXNlci1zZXQgdHJhbnNmb3JtcyBhcmUgYXBwbGllZCB0byBpdC4gVGhpcyB3aWxsIGJlIHVzZWQgYnkgdGhlIHJlbmRlcmVyIHRvXG4gICAgICAgICAgICAgKiBjcmVhdGUgYSB0cmFuc2Zvcm0gc3R5bGUgdGhhdCB3aWxsIHJlcHJvamVjdCB0aGUgZWxlbWVudCBmcm9tIGl0cyBhY3R1YWwgbGF5b3V0XG4gICAgICAgICAgICAgKiBpbnRvIHRoZSBkZXNpcmVkIGJvdW5kaW5nIGJveC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY2FsY0JveERlbHRhKHRoaXMucHJvamVjdGlvbkRlbHRhV2l0aFRyYW5zZm9ybSwgdGhpcy5sYXlvdXRDb3JyZWN0ZWQsIHRhcmdldFdpdGhUcmFuc2Zvcm1zLCBsYXRlc3RWYWx1ZXMpO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUucmVnaXN0ZXJTaGFyZWROb2RlID0gZnVuY3Rpb24gKGxheW91dElkLCBub2RlKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWROb2Rlcy5oYXMobGF5b3V0SWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFyZWROb2Rlcy5zZXQobGF5b3V0SWQsIG5ldyBOb2RlU3RhY2soKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgc3RhY2sgPSB0aGlzLnNoYXJlZE5vZGVzLmdldChsYXlvdXRJZCk7XG4gICAgICAgICAgICBzdGFjay5hZGQobm9kZSk7XG4gICAgICAgICAgICBub2RlLnByb21vdGUoe1xuICAgICAgICAgICAgICAgIHRyYW5zaXRpb246IChfYSA9IG5vZGUub3B0aW9ucy5pbml0aWFsUHJvbW90aW9uQ29uZmlnKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudHJhbnNpdGlvbixcbiAgICAgICAgICAgICAgICBwcmVzZXJ2ZUZvbGxvd09wYWNpdHk6IChfYyA9IChfYiA9IG5vZGUub3B0aW9ucy5pbml0aWFsUHJvbW90aW9uQ29uZmlnKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2hvdWxkUHJlc2VydmVGb2xsb3dPcGFjaXR5KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuY2FsbChfYiwgbm9kZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmlzTGVhZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBzdGFjayA9IHRoaXMuZ2V0U3RhY2soKTtcbiAgICAgICAgICAgIHJldHVybiBzdGFjayA/IHN0YWNrLmxlYWQgPT09IHRoaXMgOiB0cnVlO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuZ2V0TGVhZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHZhciBsYXlvdXRJZCA9IHRoaXMub3B0aW9ucy5sYXlvdXRJZDtcbiAgICAgICAgICAgIHJldHVybiBsYXlvdXRJZCA/ICgoX2EgPSB0aGlzLmdldFN0YWNrKCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZWFkKSB8fCB0aGlzIDogdGhpcztcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmdldFByZXZMZWFkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgdmFyIGxheW91dElkID0gdGhpcy5vcHRpb25zLmxheW91dElkO1xuICAgICAgICAgICAgcmV0dXJuIGxheW91dElkID8gKF9hID0gdGhpcy5nZXRTdGFjaygpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucHJldkxlYWQgOiB1bmRlZmluZWQ7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5nZXRTdGFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBsYXlvdXRJZCA9IHRoaXMub3B0aW9ucy5sYXlvdXRJZDtcbiAgICAgICAgICAgIGlmIChsYXlvdXRJZClcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yb290LnNoYXJlZE5vZGVzLmdldChsYXlvdXRJZCk7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5wcm9tb3RlID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICB2YXIgX2IgPSBfYSA9PT0gdm9pZCAwID8ge30gOiBfYSwgbmVlZHNSZXNldCA9IF9iLm5lZWRzUmVzZXQsIHRyYW5zaXRpb24gPSBfYi50cmFuc2l0aW9uLCBwcmVzZXJ2ZUZvbGxvd09wYWNpdHkgPSBfYi5wcmVzZXJ2ZUZvbGxvd09wYWNpdHk7XG4gICAgICAgICAgICB2YXIgc3RhY2sgPSB0aGlzLmdldFN0YWNrKCk7XG4gICAgICAgICAgICBpZiAoc3RhY2spXG4gICAgICAgICAgICAgICAgc3RhY2sucHJvbW90ZSh0aGlzLCBwcmVzZXJ2ZUZvbGxvd09wYWNpdHkpO1xuICAgICAgICAgICAgaWYgKG5lZWRzUmVzZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2plY3Rpb25EZWx0YSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLm5lZWRzUmVzZXQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24pXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25zKHsgdHJhbnNpdGlvbjogdHJhbnNpdGlvbiB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnJlbGVnYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHN0YWNrID0gdGhpcy5nZXRTdGFjaygpO1xuICAgICAgICAgICAgaWYgKHN0YWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YWNrLnJlbGVnYXRlKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUucmVzZXRSb3RhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB2aXN1YWxFbGVtZW50ID0gdGhpcy5vcHRpb25zLnZpc3VhbEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIXZpc3VhbEVsZW1lbnQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBubyBkZXRlY3RlZCByb3RhdGlvbiB2YWx1ZXMsIHdlIGNhbiBlYXJseSByZXR1cm4gd2l0aG91dCBhIGZvcmNlZCByZW5kZXIuXG4gICAgICAgICAgICB2YXIgaGFzUm90YXRlID0gZmFsc2U7XG4gICAgICAgICAgICAvLyBLZWVwIGEgcmVjb3JkIG9mIGFsbCB0aGUgdmFsdWVzIHdlJ3ZlIHJlc2V0XG4gICAgICAgICAgICB2YXIgcmVzZXRWYWx1ZXMgPSB7fTtcbiAgICAgICAgICAgIC8vIENoZWNrIHRoZSByb3RhdGUgdmFsdWUgb2YgYWxsIGF4ZXMgYW5kIHJlc2V0IHRvIDBcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJhbnNmb3JtQXhlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBheGlzID0gdHJhbnNmb3JtQXhlc1tpXTtcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gXCJyb3RhdGVcIiArIGF4aXM7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyByb3RhdGlvbiBkb2Vzbid0IGV4aXN0IGFzIGEgbW90aW9uIHZhbHVlLCB0aGVuIHdlIGRvbid0XG4gICAgICAgICAgICAgICAgLy8gbmVlZCB0byByZXNldCBpdFxuICAgICAgICAgICAgICAgIGlmICghdmlzdWFsRWxlbWVudC5nZXRTdGF0aWNWYWx1ZShrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoYXNSb3RhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIC8vIFJlY29yZCB0aGUgcm90YXRpb24gYW5kIHRoZW4gdGVtcG9yYXJpbHkgc2V0IGl0IHRvIDBcbiAgICAgICAgICAgICAgICByZXNldFZhbHVlc1trZXldID0gdmlzdWFsRWxlbWVudC5nZXRTdGF0aWNWYWx1ZShrZXkpO1xuICAgICAgICAgICAgICAgIHZpc3VhbEVsZW1lbnQuc2V0U3RhdGljVmFsdWUoa2V5LCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gcm90YXRpb24gdmFsdWVzLCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueSBtb3JlLlxuICAgICAgICAgICAgaWYgKCFoYXNSb3RhdGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgLy8gRm9yY2UgYSByZW5kZXIgb2YgdGhpcyBlbGVtZW50IHRvIGFwcGx5IHRoZSB0cmFuc2Zvcm0gd2l0aCBhbGwgcm90YXRpb25zXG4gICAgICAgICAgICAvLyBzZXQgdG8gMC5cbiAgICAgICAgICAgIHZpc3VhbEVsZW1lbnQgPT09IG51bGwgfHwgdmlzdWFsRWxlbWVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmlzdWFsRWxlbWVudC5zeW5jUmVuZGVyKCk7XG4gICAgICAgICAgICAvLyBQdXQgYmFjayBhbGwgdGhlIHZhbHVlcyB3ZSByZXNldFxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHJlc2V0VmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgdmlzdWFsRWxlbWVudC5zZXRTdGF0aWNWYWx1ZShrZXksIHJlc2V0VmFsdWVzW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2NoZWR1bGUgYSByZW5kZXIgZm9yIHRoZSBuZXh0IGZyYW1lLiBUaGlzIGVuc3VyZXMgd2Ugd29uJ3QgdmlzdWFsbHlcbiAgICAgICAgICAgIC8vIHNlZSB0aGUgZWxlbWVudCB3aXRoIHRoZSByZXNldCByb3RhdGUgdmFsdWUgYXBwbGllZC5cbiAgICAgICAgICAgIHZpc3VhbEVsZW1lbnQuc2NoZWR1bGVSZW5kZXIoKTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmdldFByb2plY3Rpb25TdHlsZXMgPSBmdW5jdGlvbiAoc3R5bGVQcm9wKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZjtcbiAgICAgICAgICAgIGlmIChzdHlsZVByb3AgPT09IHZvaWQgMCkgeyBzdHlsZVByb3AgPSB7fTsgfVxuICAgICAgICAgICAgLy8gVE9ETzogUmV0dXJuIGxpZmVjeWNsZS1wZXJzaXN0ZW50IG9iamVjdFxuICAgICAgICAgICAgdmFyIHN0eWxlcyA9IHt9O1xuICAgICAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlIHx8IHRoaXMuaXNTVkcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1Zpc2libGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2aXNpYmlsaXR5OiBcImhpZGRlblwiIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdHlsZXMudmlzaWJpbGl0eSA9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdHJhbnNmb3JtVGVtcGxhdGUgPSAoX2EgPSB0aGlzLm9wdGlvbnMudmlzdWFsRWxlbWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldFByb3BzKCkudHJhbnNmb3JtVGVtcGxhdGU7XG4gICAgICAgICAgICBpZiAodGhpcy5uZWVkc1Jlc2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZWVkc1Jlc2V0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc3R5bGVzLm9wYWNpdHkgPSBcIlwiO1xuICAgICAgICAgICAgICAgIHN0eWxlcy5wb2ludGVyRXZlbnRzID1cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZU1vdGlvblZhbHVlKHN0eWxlUHJvcC5wb2ludGVyRXZlbnRzKSB8fCBcIlwiO1xuICAgICAgICAgICAgICAgIHN0eWxlcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1UZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICA/IHRyYW5zZm9ybVRlbXBsYXRlKHRoaXMubGF0ZXN0VmFsdWVzLCBcIlwiKVxuICAgICAgICAgICAgICAgICAgICA6IFwibm9uZVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbGVhZCA9IHRoaXMuZ2V0TGVhZCgpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnByb2plY3Rpb25EZWx0YSB8fCAhdGhpcy5sYXlvdXQgfHwgIWxlYWQudGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGVtcHR5U3R5bGVzID0ge307XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sYXlvdXRJZCkge1xuICAgICAgICAgICAgICAgICAgICBlbXB0eVN0eWxlcy5vcGFjaXR5ID0gKF9iID0gdGhpcy5sYXRlc3RWYWx1ZXMub3BhY2l0eSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogMTtcbiAgICAgICAgICAgICAgICAgICAgZW1wdHlTdHlsZXMucG9pbnRlckV2ZW50cyA9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlTW90aW9uVmFsdWUoc3R5bGVQcm9wLnBvaW50ZXJFdmVudHMpIHx8IFwiXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc1Byb2plY3RlZCAmJiAhaGFzVHJhbnNmb3JtKHRoaXMubGF0ZXN0VmFsdWVzKSkge1xuICAgICAgICAgICAgICAgICAgICBlbXB0eVN0eWxlcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1UZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0cmFuc2Zvcm1UZW1wbGF0ZSh7fSwgXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJub25lXCI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzUHJvamVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBlbXB0eVN0eWxlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB2YWx1ZXNUb1JlbmRlciA9IGxlYWQuYW5pbWF0aW9uVmFsdWVzIHx8IGxlYWQubGF0ZXN0VmFsdWVzO1xuICAgICAgICAgICAgdGhpcy5hcHBseVRyYW5zZm9ybXNUb1RhcmdldCgpO1xuICAgICAgICAgICAgc3R5bGVzLnRyYW5zZm9ybSA9IGJ1aWxkUHJvamVjdGlvblRyYW5zZm9ybSh0aGlzLnByb2plY3Rpb25EZWx0YVdpdGhUcmFuc2Zvcm0sIHRoaXMudHJlZVNjYWxlLCB2YWx1ZXNUb1JlbmRlcik7XG4gICAgICAgICAgICBpZiAodHJhbnNmb3JtVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICBzdHlsZXMudHJhbnNmb3JtID0gdHJhbnNmb3JtVGVtcGxhdGUodmFsdWVzVG9SZW5kZXIsIHN0eWxlcy50cmFuc2Zvcm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIF9nID0gdGhpcy5wcm9qZWN0aW9uRGVsdGEsIHggPSBfZy54LCB5ID0gX2cueTtcbiAgICAgICAgICAgIHN0eWxlcy50cmFuc2Zvcm1PcmlnaW4gPSBcIlwiLmNvbmNhdCh4Lm9yaWdpbiAqIDEwMCwgXCIlIFwiKS5jb25jYXQoeS5vcmlnaW4gKiAxMDAsIFwiJSAwXCIpO1xuICAgICAgICAgICAgaWYgKGxlYWQuYW5pbWF0aW9uVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogSWYgdGhlIGxlYWQgY29tcG9uZW50IGlzIGFuaW1hdGluZywgYXNzaWduIHRoaXMgZWl0aGVyIHRoZSBlbnRlcmluZy9sZWF2aW5nXG4gICAgICAgICAgICAgICAgICogb3BhY2l0eVxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHN0eWxlcy5vcGFjaXR5ID1cbiAgICAgICAgICAgICAgICAgICAgbGVhZCA9PT0gdGhpc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAoX2QgPSAoX2MgPSB2YWx1ZXNUb1JlbmRlci5vcGFjaXR5KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiB0aGlzLmxhdGVzdFZhbHVlcy5vcGFjaXR5KSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAxXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMucHJlc2VydmVPcGFjaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmxhdGVzdFZhbHVlcy5vcGFjaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZXNUb1JlbmRlci5vcGFjaXR5RXhpdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIE9yIHdlJ3JlIG5vdCBhbmltYXRpbmcgYXQgYWxsLCBzZXQgdGhlIGxlYWQgY29tcG9uZW50IHRvIGl0cyBhY3R1YWxcbiAgICAgICAgICAgICAgICAgKiBvcGFjaXR5IGFuZCBvdGhlciBjb21wb25lbnRzIHRvIGhpZGRlbi5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBzdHlsZXMub3BhY2l0eSA9XG4gICAgICAgICAgICAgICAgICAgIGxlYWQgPT09IHRoaXNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKF9lID0gdmFsdWVzVG9SZW5kZXIub3BhY2l0eSkgIT09IG51bGwgJiYgX2UgIT09IHZvaWQgMCA/IF9lIDogXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgOiAoX2YgPSB2YWx1ZXNUb1JlbmRlci5vcGFjaXR5RXhpdCkgIT09IG51bGwgJiYgX2YgIT09IHZvaWQgMCA/IF9mIDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQXBwbHkgc2NhbGUgY29ycmVjdGlvblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gc2NhbGVDb3JyZWN0b3JzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlc1RvUmVuZGVyW2tleV0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgdmFyIF9oID0gc2NhbGVDb3JyZWN0b3JzW2tleV0sIGNvcnJlY3QgPSBfaC5jb3JyZWN0LCBhcHBseVRvID0gX2guYXBwbHlUbztcbiAgICAgICAgICAgICAgICB2YXIgY29ycmVjdGVkID0gY29ycmVjdCh2YWx1ZXNUb1JlbmRlcltrZXldLCBsZWFkKTtcbiAgICAgICAgICAgICAgICBpZiAoYXBwbHlUbykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0gYXBwbHlUby5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlc1thcHBseVRvW2ldXSA9IGNvcnJlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVzW2tleV0gPSBjb3JyZWN0ZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBEaXNhYmxlIHBvaW50ZXIgZXZlbnRzIG9uIGZvbGxvdyBjb21wb25lbnRzLiBUaGlzIGlzIHRvIGVuc3VyZVxuICAgICAgICAgICAgICogdGhhdCBpZiBhIGZvbGxvdyBjb21wb25lbnQgY292ZXJzIGEgbGVhZCBjb21wb25lbnQgaXQgZG9lc24ndCBibG9ja1xuICAgICAgICAgICAgICogcG9pbnRlciBldmVudHMgb24gdGhlIGxlYWQuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGF5b3V0SWQpIHtcbiAgICAgICAgICAgICAgICBzdHlsZXMucG9pbnRlckV2ZW50cyA9XG4gICAgICAgICAgICAgICAgICAgIGxlYWQgPT09IHRoaXNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcmVzb2x2ZU1vdGlvblZhbHVlKHN0eWxlUHJvcC5wb2ludGVyRXZlbnRzKSB8fCBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwibm9uZVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmNsZWFyU25hcHNob3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3VtZUZyb20gPSB0aGlzLnNuYXBzaG90ID0gdW5kZWZpbmVkO1xuICAgICAgICB9O1xuICAgICAgICAvLyBPbmx5IHJ1biBvbiByb290XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5yZXNldFRyZWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLnJvb3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkgeyB2YXIgX2E7IHJldHVybiAoX2EgPSBub2RlLmN1cnJlbnRBbmltYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdG9wKCk7IH0pO1xuICAgICAgICAgICAgdGhpcy5yb290Lm5vZGVzLmZvckVhY2goY2xlYXJNZWFzdXJlbWVudHMpO1xuICAgICAgICAgICAgdGhpcy5yb290LnNoYXJlZE5vZGVzLmNsZWFyKCk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBQcm9qZWN0aW9uTm9kZTtcbiAgICB9KCkpO1xufVxuZnVuY3Rpb24gdXBkYXRlTGF5b3V0KG5vZGUpIHtcbiAgICBub2RlLnVwZGF0ZUxheW91dCgpO1xufVxuZnVuY3Rpb24gbm90aWZ5TGF5b3V0VXBkYXRlKG5vZGUpIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgdmFyIHNuYXBzaG90ID0gKF9iID0gKF9hID0gbm9kZS5yZXN1bWVGcm9tKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc25hcHNob3QpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IG5vZGUuc25hcHNob3Q7XG4gICAgaWYgKG5vZGUuaXNMZWFkKCkgJiZcbiAgICAgICAgbm9kZS5sYXlvdXQgJiZcbiAgICAgICAgc25hcHNob3QgJiZcbiAgICAgICAgbm9kZS5oYXNMaXN0ZW5lcnMoXCJkaWRVcGRhdGVcIikpIHtcbiAgICAgICAgdmFyIF9lID0gbm9kZS5sYXlvdXQsIGxheW91dF8xID0gX2UuYWN0dWFsLCBtZWFzdXJlZExheW91dCA9IF9lLm1lYXN1cmVkO1xuICAgICAgICAvLyBUT0RPIE1heWJlIHdlIHdhbnQgdG8gYWxzbyByZXNpemUgdGhlIGxheW91dCBzbmFwc2hvdCBzbyB3ZSBkb24ndCB0cmlnZ2VyXG4gICAgICAgIC8vIGFuaW1hdGlvbnMgZm9yIGluc3RhbmNlIGlmIGxheW91dD1cInNpemVcIiBhbmQgYW4gZWxlbWVudCBoYXMgb25seSBjaGFuZ2VkIHBvc2l0aW9uXG4gICAgICAgIGlmIChub2RlLm9wdGlvbnMuYW5pbWF0aW9uVHlwZSA9PT0gXCJzaXplXCIpIHtcbiAgICAgICAgICAgIGVhY2hBeGlzKGZ1bmN0aW9uIChheGlzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGF4aXNTbmFwc2hvdCA9IHNuYXBzaG90LmlzU2hhcmVkXG4gICAgICAgICAgICAgICAgICAgID8gc25hcHNob3QubWVhc3VyZWRbYXhpc11cbiAgICAgICAgICAgICAgICAgICAgOiBzbmFwc2hvdC5sYXlvdXRbYXhpc107XG4gICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGNhbGNMZW5ndGgoYXhpc1NuYXBzaG90KTtcbiAgICAgICAgICAgICAgICBheGlzU25hcHNob3QubWluID0gbGF5b3V0XzFbYXhpc10ubWluO1xuICAgICAgICAgICAgICAgIGF4aXNTbmFwc2hvdC5tYXggPSBheGlzU25hcHNob3QubWluICsgbGVuZ3RoO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobm9kZS5vcHRpb25zLmFuaW1hdGlvblR5cGUgPT09IFwicG9zaXRpb25cIikge1xuICAgICAgICAgICAgZWFjaEF4aXMoZnVuY3Rpb24gKGF4aXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXhpc1NuYXBzaG90ID0gc25hcHNob3QuaXNTaGFyZWRcbiAgICAgICAgICAgICAgICAgICAgPyBzbmFwc2hvdC5tZWFzdXJlZFtheGlzXVxuICAgICAgICAgICAgICAgICAgICA6IHNuYXBzaG90LmxheW91dFtheGlzXTtcbiAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gY2FsY0xlbmd0aChsYXlvdXRfMVtheGlzXSk7XG4gICAgICAgICAgICAgICAgYXhpc1NuYXBzaG90Lm1heCA9IGF4aXNTbmFwc2hvdC5taW4gKyBsZW5ndGg7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbGF5b3V0RGVsdGEgPSBjcmVhdGVEZWx0YSgpO1xuICAgICAgICBjYWxjQm94RGVsdGEobGF5b3V0RGVsdGEsIGxheW91dF8xLCBzbmFwc2hvdC5sYXlvdXQpO1xuICAgICAgICB2YXIgdmlzdWFsRGVsdGEgPSBjcmVhdGVEZWx0YSgpO1xuICAgICAgICBpZiAoc25hcHNob3QuaXNTaGFyZWQpIHtcbiAgICAgICAgICAgIGNhbGNCb3hEZWx0YSh2aXN1YWxEZWx0YSwgbm9kZS5hcHBseVRyYW5zZm9ybShtZWFzdXJlZExheW91dCwgdHJ1ZSksIHNuYXBzaG90Lm1lYXN1cmVkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGNCb3hEZWx0YSh2aXN1YWxEZWx0YSwgbGF5b3V0XzEsIHNuYXBzaG90LmxheW91dCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGhhc0xheW91dENoYW5nZWQgPSAhaXNEZWx0YVplcm8obGF5b3V0RGVsdGEpO1xuICAgICAgICB2YXIgaGFzUmVsYXRpdmVUYXJnZXRDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGlmICghbm9kZS5yZXN1bWVGcm9tKSB7XG4gICAgICAgICAgICBub2RlLnJlbGF0aXZlUGFyZW50ID0gbm9kZS5nZXRDbG9zZXN0UHJvamVjdGluZ1BhcmVudCgpO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB0aGUgcmVsYXRpdmVQYXJlbnQgaXMgaXRzZWxmIHJlc3VtaW5nIGZyb20gYSBkaWZmZXJlbnQgZWxlbWVudCB0aGVuXG4gICAgICAgICAgICAgKiB0aGUgcmVsYXRpdmUgc25hcHNob3QgaXMgbm90IHJlbGF2ZW50XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmIChub2RlLnJlbGF0aXZlUGFyZW50ICYmICFub2RlLnJlbGF0aXZlUGFyZW50LnJlc3VtZUZyb20pIHtcbiAgICAgICAgICAgICAgICB2YXIgX2YgPSBub2RlLnJlbGF0aXZlUGFyZW50LCBwYXJlbnRTbmFwc2hvdCA9IF9mLnNuYXBzaG90LCBwYXJlbnRMYXlvdXQgPSBfZi5sYXlvdXQ7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudFNuYXBzaG90ICYmIHBhcmVudExheW91dCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVsYXRpdmVTbmFwc2hvdCA9IGNyZWF0ZUJveCgpO1xuICAgICAgICAgICAgICAgICAgICBjYWxjUmVsYXRpdmVQb3NpdGlvbihyZWxhdGl2ZVNuYXBzaG90LCBzbmFwc2hvdC5sYXlvdXQsIHBhcmVudFNuYXBzaG90LmxheW91dCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZWxhdGl2ZUxheW91dCA9IGNyZWF0ZUJveCgpO1xuICAgICAgICAgICAgICAgICAgICBjYWxjUmVsYXRpdmVQb3NpdGlvbihyZWxhdGl2ZUxheW91dCwgbGF5b3V0XzEsIHBhcmVudExheW91dC5hY3R1YWwpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWJveEVxdWFscyhyZWxhdGl2ZVNuYXBzaG90LCByZWxhdGl2ZUxheW91dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc1JlbGF0aXZlVGFyZ2V0Q2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5ub3RpZnlMaXN0ZW5lcnMoXCJkaWRVcGRhdGVcIiwge1xuICAgICAgICAgICAgbGF5b3V0OiBsYXlvdXRfMSxcbiAgICAgICAgICAgIHNuYXBzaG90OiBzbmFwc2hvdCxcbiAgICAgICAgICAgIGRlbHRhOiB2aXN1YWxEZWx0YSxcbiAgICAgICAgICAgIGxheW91dERlbHRhOiBsYXlvdXREZWx0YSxcbiAgICAgICAgICAgIGhhc0xheW91dENoYW5nZWQ6IGhhc0xheW91dENoYW5nZWQsXG4gICAgICAgICAgICBoYXNSZWxhdGl2ZVRhcmdldENoYW5nZWQ6IGhhc1JlbGF0aXZlVGFyZ2V0Q2hhbmdlZCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vZGUuaXNMZWFkKCkpIHtcbiAgICAgICAgKF9kID0gKF9jID0gbm9kZS5vcHRpb25zKS5vbkV4aXRDb21wbGV0ZSkgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmNhbGwoX2MpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbGVhcmluZyB0cmFuc2l0aW9uXG4gICAgICogVE9ETzogSW52ZXN0aWdhdGUgd2h5IHRoaXMgdHJhbnNpdGlvbiBpcyBiZWluZyBwYXNzZWQgaW4gYXMge3R5cGU6IGZhbHNlIH0gZnJvbSBGcmFtZXJcbiAgICAgKiBhbmQgd2h5IHdlIG5lZWQgaXQgYXQgYWxsXG4gICAgICovXG4gICAgbm9kZS5vcHRpb25zLnRyYW5zaXRpb24gPSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBjbGVhclNuYXBzaG90KG5vZGUpIHtcbiAgICBub2RlLmNsZWFyU25hcHNob3QoKTtcbn1cbmZ1bmN0aW9uIGNsZWFyTWVhc3VyZW1lbnRzKG5vZGUpIHtcbiAgICBub2RlLmNsZWFyTWVhc3VyZW1lbnRzKCk7XG59XG5mdW5jdGlvbiByZXNldFRyYW5zZm9ybVN0eWxlKG5vZGUpIHtcbiAgICB2YXIgdmlzdWFsRWxlbWVudCA9IG5vZGUub3B0aW9ucy52aXN1YWxFbGVtZW50O1xuICAgIGlmICh2aXN1YWxFbGVtZW50ID09PSBudWxsIHx8IHZpc3VhbEVsZW1lbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZpc3VhbEVsZW1lbnQuZ2V0UHJvcHMoKS5vbkJlZm9yZUxheW91dE1lYXN1cmUpIHtcbiAgICAgICAgdmlzdWFsRWxlbWVudC5ub3RpZnlCZWZvcmVMYXlvdXRNZWFzdXJlKCk7XG4gICAgfVxuICAgIG5vZGUucmVzZXRUcmFuc2Zvcm0oKTtcbn1cbmZ1bmN0aW9uIGZpbmlzaEFuaW1hdGlvbihub2RlKSB7XG4gICAgbm9kZS5maW5pc2hBbmltYXRpb24oKTtcbiAgICBub2RlLnRhcmdldERlbHRhID0gbm9kZS5yZWxhdGl2ZVRhcmdldCA9IG5vZGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gcmVzb2x2ZVRhcmdldERlbHRhKG5vZGUpIHtcbiAgICBub2RlLnJlc29sdmVUYXJnZXREZWx0YSgpO1xufVxuZnVuY3Rpb24gY2FsY1Byb2plY3Rpb24obm9kZSkge1xuICAgIG5vZGUuY2FsY1Byb2plY3Rpb24oKTtcbn1cbmZ1bmN0aW9uIHJlc2V0Um90YXRpb24obm9kZSkge1xuICAgIG5vZGUucmVzZXRSb3RhdGlvbigpO1xufVxuZnVuY3Rpb24gcmVtb3ZlTGVhZFNuYXBzaG90cyhzdGFjaykge1xuICAgIHN0YWNrLnJlbW92ZUxlYWRTbmFwc2hvdCgpO1xufVxuZnVuY3Rpb24gbWl4QXhpc0RlbHRhKG91dHB1dCwgZGVsdGEsIHApIHtcbiAgICBvdXRwdXQudHJhbnNsYXRlID0gbWl4KGRlbHRhLnRyYW5zbGF0ZSwgMCwgcCk7XG4gICAgb3V0cHV0LnNjYWxlID0gbWl4KGRlbHRhLnNjYWxlLCAxLCBwKTtcbiAgICBvdXRwdXQub3JpZ2luID0gZGVsdGEub3JpZ2luO1xuICAgIG91dHB1dC5vcmlnaW5Qb2ludCA9IGRlbHRhLm9yaWdpblBvaW50O1xufVxuZnVuY3Rpb24gbWl4QXhpcyhvdXRwdXQsIGZyb20sIHRvLCBwKSB7XG4gICAgb3V0cHV0Lm1pbiA9IG1peChmcm9tLm1pbiwgdG8ubWluLCBwKTtcbiAgICBvdXRwdXQubWF4ID0gbWl4KGZyb20ubWF4LCB0by5tYXgsIHApO1xufVxuZnVuY3Rpb24gbWl4Qm94KG91dHB1dCwgZnJvbSwgdG8sIHApIHtcbiAgICBtaXhBeGlzKG91dHB1dC54LCBmcm9tLngsIHRvLngsIHApO1xuICAgIG1peEF4aXMob3V0cHV0LnksIGZyb20ueSwgdG8ueSwgcCk7XG59XG5mdW5jdGlvbiBoYXNPcGFjaXR5Q3Jvc3NmYWRlKG5vZGUpIHtcbiAgICByZXR1cm4gKG5vZGUuYW5pbWF0aW9uVmFsdWVzICYmIG5vZGUuYW5pbWF0aW9uVmFsdWVzLm9wYWNpdHlFeGl0ICE9PSB1bmRlZmluZWQpO1xufVxudmFyIGRlZmF1bHRMYXlvdXRUcmFuc2l0aW9uID0ge1xuICAgIGR1cmF0aW9uOiAwLjQ1LFxuICAgIGVhc2U6IFswLjQsIDAsIDAuMSwgMV0sXG59O1xuZnVuY3Rpb24gbW91bnROb2RlRWFybHkobm9kZSwgaWQpIHtcbiAgICAvKipcbiAgICAgKiBSYXRoZXIgdGhhbiBzZWFyY2hpbmcgdGhlIERPTSBmcm9tIGRvY3VtZW50IHdlIGNhbiBzZWFyY2ggdGhlXG4gICAgICogcGF0aCBmb3IgdGhlIGRlZXBlc3QgbW91bnRlZCBhbmNlc3RvciBhbmQgc2VhcmNoIGZyb20gdGhlcmVcbiAgICAgKi9cbiAgICB2YXIgc2VhcmNoTm9kZSA9IG5vZGUucm9vdDtcbiAgICBmb3IgKHZhciBpID0gbm9kZS5wYXRoLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGlmIChCb29sZWFuKG5vZGUucGF0aFtpXS5pbnN0YW5jZSkpIHtcbiAgICAgICAgICAgIHNlYXJjaE5vZGUgPSBub2RlLnBhdGhbaV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc2VhcmNoRWxlbWVudCA9IHNlYXJjaE5vZGUgJiYgc2VhcmNoTm9kZSAhPT0gbm9kZS5yb290ID8gc2VhcmNoTm9kZS5pbnN0YW5jZSA6IGRvY3VtZW50O1xuICAgIHZhciBlbGVtZW50ID0gc2VhcmNoRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiW2RhdGEtcHJvamVjdGlvbi1pZD1cXFwiXCIuY29uY2F0KGlkLCBcIlxcXCJdXCIpKTtcbiAgICBpZiAoZWxlbWVudClcbiAgICAgICAgbm9kZS5tb3VudChlbGVtZW50LCB0cnVlKTtcbn1cbmZ1bmN0aW9uIHJvdW5kQXhpcyhheGlzKSB7XG4gICAgYXhpcy5taW4gPSBNYXRoLnJvdW5kKGF4aXMubWluKTtcbiAgICBheGlzLm1heCA9IE1hdGgucm91bmQoYXhpcy5tYXgpO1xufVxuZnVuY3Rpb24gcm91bmRCb3goYm94KSB7XG4gICAgcm91bmRBeGlzKGJveC54KTtcbiAgICByb3VuZEF4aXMoYm94LnkpO1xufVxuXG5leHBvcnQgeyBjcmVhdGVQcm9qZWN0aW9uTm9kZSwgbWl4QXhpcywgbWl4QXhpc0RlbHRhLCBtaXhCb3ggfTtcbiIsImltcG9ydCB7IG1vdGlvblZhbHVlIH0gZnJvbSAnLi4vdmFsdWUvaW5kZXgubWpzJztcbmltcG9ydCB7IGlzTW90aW9uVmFsdWUgfSBmcm9tICcuLi92YWx1ZS91dGlscy9pcy1tb3Rpb24tdmFsdWUubWpzJztcbmltcG9ydCB7IHN0YXJ0QW5pbWF0aW9uIH0gZnJvbSAnLi91dGlscy90cmFuc2l0aW9ucy5tanMnO1xuXG4vKipcbiAqIEFuaW1hdGUgYSBzaW5nbGUgdmFsdWUgb3IgYSBgTW90aW9uVmFsdWVgLlxuICpcbiAqIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBlaXRoZXIgYSBgTW90aW9uVmFsdWVgIHRvIGFuaW1hdGUsIG9yIGFuIGluaXRpYWwgYW5pbWF0aW9uIHZhbHVlLlxuICpcbiAqIFRoZSBzZWNvbmQgaXMgZWl0aGVyIGEgdmFsdWUgdG8gYW5pbWF0ZSB0bywgb3IgYW4gYXJyYXkgb2Yga2V5ZnJhbWVzIHRvIGFuaW1hdGUgdGhyb3VnaC5cbiAqXG4gKiBUaGUgdGhpcmQgYXJndW1lbnQgY2FuIGJlIGVpdGhlciB0d2VlbiBvciBzcHJpbmcgb3B0aW9ucywgYW5kIG9wdGlvbmFsIGxpZmVjeWNsZSBtZXRob2RzOiBgb25VcGRhdGVgLCBgb25QbGF5YCwgYG9uQ29tcGxldGVgLCBgb25SZXBlYXRgIGFuZCBgb25TdG9wYC5cbiAqXG4gKiBSZXR1cm5zIGBBbmltYXRpb25QbGF5YmFja0NvbnRyb2xzYCwgY3VycmVudGx5IGp1c3QgYSBgc3RvcGAgbWV0aG9kLlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGNvbnN0IHggPSB1c2VNb3Rpb25WYWx1ZSgwKVxuICpcbiAqIHVzZUVmZmVjdCgoKSA9PiB7XG4gKiAgIGNvbnN0IGNvbnRyb2xzID0gYW5pbWF0ZSh4LCAxMDAsIHtcbiAqICAgICB0eXBlOiBcInNwcmluZ1wiLFxuICogICAgIHN0aWZmbmVzczogMjAwMCxcbiAqICAgICBvbkNvbXBsZXRlOiB2ID0+IHt9XG4gKiAgIH0pXG4gKlxuICogICByZXR1cm4gY29udHJvbHMuc3RvcFxuICogfSlcbiAqIGBgYFxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gYW5pbWF0ZShmcm9tLCB0bywgdHJhbnNpdGlvbikge1xuICAgIGlmICh0cmFuc2l0aW9uID09PSB2b2lkIDApIHsgdHJhbnNpdGlvbiA9IHt9OyB9XG4gICAgdmFyIHZhbHVlID0gaXNNb3Rpb25WYWx1ZShmcm9tKSA/IGZyb20gOiBtb3Rpb25WYWx1ZShmcm9tKTtcbiAgICBzdGFydEFuaW1hdGlvbihcIlwiLCB2YWx1ZSwgdG8sIHRyYW5zaXRpb24pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0b3A6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlLnN0b3AoKTsgfSxcbiAgICAgICAgaXNBbmltYXRpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlLmlzQW5pbWF0aW5nKCk7IH0sXG4gICAgfTtcbn1cblxuZXhwb3J0IHsgYW5pbWF0ZSB9O1xuIiwiaW1wb3J0IHsgY3JlYXRlUHJvamVjdGlvbk5vZGUgfSBmcm9tICcuL2NyZWF0ZS1wcm9qZWN0aW9uLW5vZGUubWpzJztcbmltcG9ydCB7IGFkZERvbUV2ZW50IH0gZnJvbSAnLi4vLi4vZXZlbnRzL3VzZS1kb20tZXZlbnQubWpzJztcblxudmFyIERvY3VtZW50UHJvamVjdGlvbk5vZGUgPSBjcmVhdGVQcm9qZWN0aW9uTm9kZSh7XG4gICAgYXR0YWNoUmVzaXplTGlzdGVuZXI6IGZ1bmN0aW9uIChyZWYsIG5vdGlmeSkgeyByZXR1cm4gYWRkRG9tRXZlbnQocmVmLCBcInJlc2l6ZVwiLCBub3RpZnkpOyB9LFxuICAgIG1lYXN1cmVTY3JvbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7XG4gICAgICAgIHg6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCxcbiAgICAgICAgeTogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCxcbiAgICB9KTsgfSxcbiAgICBjaGVja0lzU2Nyb2xsUm9vdDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfSxcbn0pO1xuXG5leHBvcnQgeyBEb2N1bWVudFByb2plY3Rpb25Ob2RlIH07XG4iLCJpbXBvcnQgeyBjcmVhdGVQcm9qZWN0aW9uTm9kZSB9IGZyb20gJy4vY3JlYXRlLXByb2plY3Rpb24tbm9kZS5tanMnO1xuaW1wb3J0IHsgRG9jdW1lbnRQcm9qZWN0aW9uTm9kZSB9IGZyb20gJy4vRG9jdW1lbnRQcm9qZWN0aW9uTm9kZS5tanMnO1xuXG52YXIgcm9vdFByb2plY3Rpb25Ob2RlID0ge1xuICAgIGN1cnJlbnQ6IHVuZGVmaW5lZCxcbn07XG52YXIgSFRNTFByb2plY3Rpb25Ob2RlID0gY3JlYXRlUHJvamVjdGlvbk5vZGUoe1xuICAgIG1lYXN1cmVTY3JvbGw6IGZ1bmN0aW9uIChpbnN0YW5jZSkgeyByZXR1cm4gKHtcbiAgICAgICAgeDogaW5zdGFuY2Uuc2Nyb2xsTGVmdCxcbiAgICAgICAgeTogaW5zdGFuY2Uuc2Nyb2xsVG9wLFxuICAgIH0pOyB9LFxuICAgIGRlZmF1bHRQYXJlbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFyb290UHJvamVjdGlvbk5vZGUuY3VycmVudCkge1xuICAgICAgICAgICAgdmFyIGRvY3VtZW50Tm9kZSA9IG5ldyBEb2N1bWVudFByb2plY3Rpb25Ob2RlKDAsIHt9KTtcbiAgICAgICAgICAgIGRvY3VtZW50Tm9kZS5tb3VudCh3aW5kb3cpO1xuICAgICAgICAgICAgZG9jdW1lbnROb2RlLnNldE9wdGlvbnMoeyBsYXlvdXRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgICAgICByb290UHJvamVjdGlvbk5vZGUuY3VycmVudCA9IGRvY3VtZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm9vdFByb2plY3Rpb25Ob2RlLmN1cnJlbnQ7XG4gICAgfSxcbiAgICByZXNldFRyYW5zZm9ybTogZnVuY3Rpb24gKGluc3RhbmNlLCB2YWx1ZSkge1xuICAgICAgICBpbnN0YW5jZS5zdHlsZS50cmFuc2Zvcm0gPSB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdm9pZCAwID8gdmFsdWUgOiBcIm5vbmVcIjtcbiAgICB9LFxuICAgIGNoZWNrSXNTY3JvbGxSb290OiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4od2luZG93LmdldENvbXB1dGVkU3R5bGUoaW5zdGFuY2UpLnBvc2l0aW9uID09PSBcImZpeGVkXCIpO1xuICAgIH0sXG59KTtcblxuZXhwb3J0IHsgSFRNTFByb2plY3Rpb25Ob2RlLCByb290UHJvamVjdGlvbk5vZGUgfTtcbiIsImltcG9ydCB7IF9fYXNzaWduIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgY3JlYXRlTW90aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW90aW9uL2luZGV4Lm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVNb3Rpb25Qcm94eSB9IGZyb20gJy4vbW90aW9uLXByb3h5Lm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVEb21Nb3Rpb25Db25maWcgfSBmcm9tICcuL3V0aWxzL2NyZWF0ZS1jb25maWcubWpzJztcbmltcG9ydCB7IGdlc3R1cmVBbmltYXRpb25zIH0gZnJvbSAnLi4vLi4vbW90aW9uL2ZlYXR1cmVzL2dlc3R1cmVzLm1qcyc7XG5pbXBvcnQgeyBhbmltYXRpb25zIH0gZnJvbSAnLi4vLi4vbW90aW9uL2ZlYXR1cmVzL2FuaW1hdGlvbnMubWpzJztcbmltcG9ydCB7IGRyYWcgfSBmcm9tICcuLi8uLi9tb3Rpb24vZmVhdHVyZXMvZHJhZy5tanMnO1xuaW1wb3J0IHsgY3JlYXRlRG9tVmlzdWFsRWxlbWVudCB9IGZyb20gJy4vY3JlYXRlLXZpc3VhbC1lbGVtZW50Lm1qcyc7XG5pbXBvcnQgeyBsYXlvdXRGZWF0dXJlcyB9IGZyb20gJy4uLy4uL21vdGlvbi9mZWF0dXJlcy9sYXlvdXQvaW5kZXgubWpzJztcbmltcG9ydCB7IEhUTUxQcm9qZWN0aW9uTm9kZSB9IGZyb20gJy4uLy4uL3Byb2plY3Rpb24vbm9kZS9IVE1MUHJvamVjdGlvbk5vZGUubWpzJztcblxudmFyIGZlYXR1cmVCdW5kbGUgPSBfX2Fzc2lnbihfX2Fzc2lnbihfX2Fzc2lnbihfX2Fzc2lnbih7fSwgYW5pbWF0aW9ucyksIGdlc3R1cmVBbmltYXRpb25zKSwgZHJhZyksIGxheW91dEZlYXR1cmVzKTtcbi8qKlxuICogSFRNTCAmIFNWRyBjb21wb25lbnRzLCBvcHRpbWlzZWQgZm9yIHVzZSB3aXRoIGdlc3R1cmVzIGFuZCBhbmltYXRpb24uIFRoZXNlIGNhbiBiZSB1c2VkIGFzXG4gKiBkcm9wLWluIHJlcGxhY2VtZW50cyBmb3IgYW55IEhUTUwgJiBTVkcgY29tcG9uZW50LCBhbGwgQ1NTICYgU1ZHIHByb3BlcnRpZXMgYXJlIHN1cHBvcnRlZC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbnZhciBtb3Rpb24gPSAvKkBfX1BVUkVfXyovIGNyZWF0ZU1vdGlvblByb3h5KGZ1bmN0aW9uIChDb21wb25lbnQsIGNvbmZpZykge1xuICAgIHJldHVybiBjcmVhdGVEb21Nb3Rpb25Db25maWcoQ29tcG9uZW50LCBjb25maWcsIGZlYXR1cmVCdW5kbGUsIGNyZWF0ZURvbVZpc3VhbEVsZW1lbnQsIEhUTUxQcm9qZWN0aW9uTm9kZSk7XG59KTtcbi8qKlxuICogQ3JlYXRlIGEgRE9NIGBtb3Rpb25gIGNvbXBvbmVudCB3aXRoIHRoZSBwcm92aWRlZCBzdHJpbmcuIFRoaXMgaXMgcHJpbWFyaWx5IGludGVuZGVkXG4gKiBhcyBhIGZ1bGwgYWx0ZXJuYXRpdmUgdG8gYG1vdGlvbmAgZm9yIGNvbnN1bWVycyB3aG8gaGF2ZSB0byBzdXBwb3J0IGVudmlyb25tZW50cyB0aGF0IGRvbid0XG4gKiBzdXBwb3J0IGBQcm94eWAuXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgY3JlYXRlRG9tTW90aW9uQ29tcG9uZW50IH0gZnJvbSBcImZyYW1lci1tb3Rpb25cIlxuICpcbiAqIGNvbnN0IG1vdGlvbiA9IHtcbiAqICAgZGl2OiBjcmVhdGVEb21Nb3Rpb25Db21wb25lbnQoJ2RpdicpXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURvbU1vdGlvbkNvbXBvbmVudChrZXkpIHtcbiAgICByZXR1cm4gY3JlYXRlTW90aW9uQ29tcG9uZW50KGNyZWF0ZURvbU1vdGlvbkNvbmZpZyhrZXksIHsgZm9yd2FyZE1vdGlvblByb3BzOiBmYWxzZSB9LCBmZWF0dXJlQnVuZGxlLCBjcmVhdGVEb21WaXN1YWxFbGVtZW50LCBIVE1MUHJvamVjdGlvbk5vZGUpKTtcbn1cblxuZXhwb3J0IHsgY3JlYXRlRG9tTW90aW9uQ29tcG9uZW50LCBtb3Rpb24gfTtcbiIsImltcG9ydCB7IF9fYXNzaWduIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgaXNTVkdDb21wb25lbnQgfSBmcm9tICcuL2lzLXN2Zy1jb21wb25lbnQubWpzJztcbmltcG9ydCB7IGNyZWF0ZVVzZVJlbmRlciB9IGZyb20gJy4uL3VzZS1yZW5kZXIubWpzJztcbmltcG9ydCB7IHN2Z01vdGlvbkNvbmZpZyB9IGZyb20gJy4uLy4uL3N2Zy9jb25maWctbW90aW9uLm1qcyc7XG5pbXBvcnQgeyBodG1sTW90aW9uQ29uZmlnIH0gZnJvbSAnLi4vLi4vaHRtbC9jb25maWctbW90aW9uLm1qcyc7XG5cbmZ1bmN0aW9uIGNyZWF0ZURvbU1vdGlvbkNvbmZpZyhDb21wb25lbnQsIF9hLCBwcmVsb2FkZWRGZWF0dXJlcywgY3JlYXRlVmlzdWFsRWxlbWVudCwgcHJvamVjdGlvbk5vZGVDb25zdHJ1Y3Rvcikge1xuICAgIHZhciBfYiA9IF9hLmZvcndhcmRNb3Rpb25Qcm9wcywgZm9yd2FyZE1vdGlvblByb3BzID0gX2IgPT09IHZvaWQgMCA/IGZhbHNlIDogX2I7XG4gICAgdmFyIGJhc2VDb25maWcgPSBpc1NWR0NvbXBvbmVudChDb21wb25lbnQpXG4gICAgICAgID8gc3ZnTW90aW9uQ29uZmlnXG4gICAgICAgIDogaHRtbE1vdGlvbkNvbmZpZztcbiAgICByZXR1cm4gX19hc3NpZ24oX19hc3NpZ24oe30sIGJhc2VDb25maWcpLCB7IHByZWxvYWRlZEZlYXR1cmVzOiBwcmVsb2FkZWRGZWF0dXJlcywgdXNlUmVuZGVyOiBjcmVhdGVVc2VSZW5kZXIoZm9yd2FyZE1vdGlvblByb3BzKSwgY3JlYXRlVmlzdWFsRWxlbWVudDogY3JlYXRlVmlzdWFsRWxlbWVudCwgcHJvamVjdGlvbk5vZGVDb25zdHJ1Y3RvcjogcHJvamVjdGlvbk5vZGVDb25zdHJ1Y3RvciwgQ29tcG9uZW50OiBDb21wb25lbnQgfSk7XG59XG5cbmV4cG9ydCB7IGNyZWF0ZURvbU1vdGlvbkNvbmZpZyB9O1xuIiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJyZWFjdC1kb21cIik7IiwiZXhwb3J0IGNvbnN0IEFwcFBhdGhzID0ge1xuICBTSE9XUk9PTTogXCIvc2hvd3Jvb21cIixcbiAgU0VORE9VVFM6IFwiL3NlbmRvdXRzXCIsXG4gIFNFTkRPVVRTX0NNUzogXCIvc2VuZG91dHMtY21zXCIsXG4gIE1BUktFVElOR19FTkdJTkU6IFwiL21lZGlhXCIsXG4gIFVTRVJfTUFOQUdFTUVOVDogXCIvdXNlcnNcIixcbiAgVEVOQU5UUzogXCIvdGVuYW50c1wiLFxuICBEQVNIQk9BUkQ6IFwiL2Rhc2hib2FyZFwiLFxuICBEQVNIQk9BUkRfQ1JFQVRFX1dPUktTUEFDRV9NT0RBTDogXCIvZGFzaGJvYXJkL2NyZWF0ZS13b3Jrc3BhY2VcIixcbn07XG5cbmV4cG9ydCBjb25zdCBURU5BTlRTX1RJRVJfV0lEVEggPSAzMDA7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05TX1RJRVJfV0lEVEggPSAzMDA7XG4iLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcIkB0b3VjaHRlY2gvd2ViLWF1dGhcIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJAdG91Y2h0ZWNoL3dlYi10ZW5hbnQtaWQtcHJvdmlkZXJcIik7IiwiaW1wb3J0IFJlYWN0LCB7XG4gIHVzZUNhbGxiYWNrLFxuICB1c2VDb250ZXh0LFxuICB1c2VFZmZlY3QsXG4gIHVzZU1lbW8sXG4gIHVzZVN0YXRlLFxufSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHtcbiAgQXV0aENvbnRleHQsXG4gIFByaXZpbGVnZXMsXG4gIHVzZXJIYXNUZW5hbnRBY2Nlc3MsXG59IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1hdXRoXCI7XG5pbXBvcnQgeyBUZW5hbnRJZENvbnRleHQgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItdGVuYW50LWlkLXByb3ZpZGVyXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgb25OYXZpZ2F0aW9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xufTtcblxudHlwZSBOYXZpZ2F0aW9uVmlld1N0YXRlID0ge1xuICBzZWxlY3RlZFRlbmFudElkOiBzdHJpbmc7XG4gIGN1cnJlbnRQb3NpdGlvbjogTmF2aWdhdGlvblBvc2l0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgTmF2aWdhdGlvbkNvbnRleHRWYWx1ZSA9IHtcbiAgaGFzTWFya2V0aW5nRW5naW5lQWNjZXNzOiBib29sZWFuO1xuICBoYXNTaG93cm9vbUFjY2VzczogYm9vbGVhbjtcbiAgaGFzU2VuZG91dHNBY2Nlc3M6IGJvb2xlYW47XG4gIGhhc1NlbmRvdXRzQ21zQWNjZXNzOiBib29sZWFuO1xuICBoYXNVc2VyTWFuYWdlbWVudEFjY2VzczogYm9vbGVhbjtcbiAgdmlld1N0YXRlOiBOYXZpZ2F0aW9uVmlld1N0YXRlO1xuICB1cGRhdGVWaWV3U3RhdGU6ICh2aWV3U3RhdGVVcGRhdGU6IFBhcnRpYWw8TmF2aWdhdGlvblZpZXdTdGF0ZT4pID0+IHZvaWQ7XG4gIHNpZ25PdXQ6ICgpID0+IHZvaWQ7XG4gIHRvZ2dsZVRlbmFudHM6ICgpID0+IHZvaWQ7XG4gIG9uTmF2aWdhdGlvbkNsb3NlOiAoKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IGVudW0gTmF2aWdhdGlvblBvc2l0aW9uIHtcbiAgT1BFTiA9IFwiT1BFTlwiLFxuICBISURERU4gPSBcIkhJRERFTlwiLFxuICBFWFBBTkRFRCA9IFwiRVhQQU5ERURcIixcbn1cblxuZXhwb3J0IGNvbnN0IE5hdmlnYXRpb25Db250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxOYXZpZ2F0aW9uQ29udGV4dFZhbHVlPihcbiAge30gYXMgTmF2aWdhdGlvbkNvbnRleHRWYWx1ZVxuKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZU5hdmlnYXRpb25Db250ZXh0KCkge1xuICByZXR1cm4gdXNlQ29udGV4dChOYXZpZ2F0aW9uQ29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBOYXZpZ2F0aW9uQ29udGV4dFByb3ZpZGVyKHtcbiAgY2hpbGRyZW4sXG4gIGlzT3BlbixcbiAgb25OYXZpZ2F0aW9uQ2xvc2UgPSAoKSA9PiB7fSxcbn06IFByb3BzKSB7XG4gIGNvbnN0IFt0ZW5hbnRJZF0gPSB1c2VDb250ZXh0KFRlbmFudElkQ29udGV4dCk7XG4gIGNvbnN0IFt2aWV3U3RhdGUsIHNldFZpZXdTdGF0ZV0gPSB1c2VTdGF0ZTxOYXZpZ2F0aW9uVmlld1N0YXRlPih7XG4gICAgc2VsZWN0ZWRUZW5hbnRJZDogdGVuYW50SWQgYXMgc3RyaW5nLFxuICAgIGN1cnJlbnRQb3NpdGlvbjogTmF2aWdhdGlvblBvc2l0aW9uLkhJRERFTixcbiAgfSk7XG5cbiAgY29uc3QgeyB1c2VyLCBhdXRoU2VydmljZSwgY2FuU2lnbk91dCB9ID0gdXNlQ29udGV4dChBdXRoQ29udGV4dCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNPcGVuKSB7XG4gICAgICBzZXRWaWV3U3RhdGUoKHByZXZWaWV3U3RhdGUpID0+ICh7XG4gICAgICAgIC4uLnByZXZWaWV3U3RhdGUsXG4gICAgICAgIHNlbGVjdGVkVGVuYW50SWQ6IHRlbmFudElkIGFzIHN0cmluZyxcbiAgICAgICAgY3VycmVudFBvc2l0aW9uOiBOYXZpZ2F0aW9uUG9zaXRpb24uT1BFTixcbiAgICAgIH0pKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldFZpZXdTdGF0ZSgocHJldlZpZXdTdGF0ZSkgPT4gKHtcbiAgICAgIC4uLnByZXZWaWV3U3RhdGUsXG4gICAgICBjdXJyZW50UG9zaXRpb246IE5hdmlnYXRpb25Qb3NpdGlvbi5ISURERU4sXG4gICAgfSkpO1xuICB9LCBbdGVuYW50SWQsIGlzT3Blbiwgc2V0Vmlld1N0YXRlXSk7XG5cbiAgLy8gcmVmcmVzaCB0aGUgdG9rZW4gdG8gZ2V0IHRoZSBwb3NzaWJseSB1cGRhdGVkIHByaXZpbGVnZXMvYXBwcy90ZW5hbnRzIHdpdGhcbiAgLy8gY29vbGRvd24gb2YgNSBtaW51dGVzIHRvIG5vdCB0cmlnZ2VyIHJlZnJlc2ggdG9rZW4gb24gZXZlcnkgbmF2aWdhdGlvbiBvcGVuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzT3Blbikge1xuICAgICAgYXV0aFNlcnZpY2UucmVmcmVzaFVzZXIoMzAwKTtcbiAgICB9XG4gIH0sIFthdXRoU2VydmljZSwgaXNPcGVuXSk7XG5cbiAgY29uc3QgaGFzTWFya2V0aW5nRW5naW5lQWNjZXNzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgdXNlclxuICAgICAgICA/IHVzZXJIYXNUZW5hbnRBY2Nlc3MoXG4gICAgICAgICAgICB1c2VyLFxuICAgICAgICAgICAgdmlld1N0YXRlLnNlbGVjdGVkVGVuYW50SWQsXG4gICAgICAgICAgICBQcml2aWxlZ2VzLk1BUktFVElOR19FTkdJTkVfQVBQXG4gICAgICAgICAgKVxuICAgICAgICA6IGZhbHNlLFxuICAgIFt2aWV3U3RhdGUuc2VsZWN0ZWRUZW5hbnRJZCwgdXNlcl1cbiAgKTtcblxuICBjb25zdCBoYXNTaG93cm9vbUFjY2VzcyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHVzZXJcbiAgICAgICAgPyB1c2VySGFzVGVuYW50QWNjZXNzKFxuICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICAgIHZpZXdTdGF0ZS5zZWxlY3RlZFRlbmFudElkLFxuICAgICAgICAgICAgUHJpdmlsZWdlcy5TSE9XUk9PTV9BUFBcbiAgICAgICAgICApXG4gICAgICAgIDogZmFsc2UsXG4gICAgW3ZpZXdTdGF0ZS5zZWxlY3RlZFRlbmFudElkLCB1c2VyXVxuICApO1xuXG4gIGNvbnN0IGhhc1NlbmRvdXRzQWNjZXNzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgdXNlclxuICAgICAgICA/IHVzZXJIYXNUZW5hbnRBY2Nlc3MoXG4gICAgICAgICAgICB1c2VyLFxuICAgICAgICAgICAgdmlld1N0YXRlLnNlbGVjdGVkVGVuYW50SWQsXG4gICAgICAgICAgICBQcml2aWxlZ2VzLlNFTkRPVVRTX0FQUFxuICAgICAgICAgIClcbiAgICAgICAgOiBmYWxzZSxcbiAgICBbdmlld1N0YXRlLnNlbGVjdGVkVGVuYW50SWQsIHVzZXJdXG4gICk7XG5cbiAgY29uc3QgaGFzU2VuZG91dHNDbXNBY2Nlc3MgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICB1c2VyXG4gICAgICAgID8gdXNlckhhc1RlbmFudEFjY2VzcyhcbiAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICB2aWV3U3RhdGUuc2VsZWN0ZWRUZW5hbnRJZCxcbiAgICAgICAgICAgIFByaXZpbGVnZXMuU0VORE9VVFNfQ01TX0FQUFxuICAgICAgICAgIClcbiAgICAgICAgOiBmYWxzZSxcbiAgICBbdmlld1N0YXRlLnNlbGVjdGVkVGVuYW50SWQsIHVzZXJdXG4gICk7XG5cbiAgY29uc3QgaGFzVXNlck1hbmFnZW1lbnRBY2Nlc3MgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICB1c2VyXG4gICAgICAgID8gdXNlckhhc1RlbmFudEFjY2VzcyhcbiAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICB2aWV3U3RhdGUuc2VsZWN0ZWRUZW5hbnRJZCxcbiAgICAgICAgICAgIFByaXZpbGVnZXMuVVNFUl9NQU5BR0VNRU5UX0FQUFxuICAgICAgICAgIClcbiAgICAgICAgOiBmYWxzZSxcbiAgICBbdmlld1N0YXRlLnNlbGVjdGVkVGVuYW50SWQsIHVzZXJdXG4gICk7XG5cbiAgY29uc3QgdXBkYXRlVmlld1N0YXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKHZpZXdTdGF0ZVVwZGF0ZTogUGFydGlhbDxOYXZpZ2F0aW9uVmlld1N0YXRlPikgPT5cbiAgICAgIHNldFZpZXdTdGF0ZSgocHJldlZpZXdTdGF0ZSkgPT4gKHtcbiAgICAgICAgLi4ucHJldlZpZXdTdGF0ZSxcbiAgICAgICAgLi4udmlld1N0YXRlVXBkYXRlLFxuICAgICAgfSkpLFxuICAgIFtdXG4gICk7XG5cbiAgY29uc3Qgc2lnbk91dCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoY2FuU2lnbk91dCkge1xuICAgICAgYXdhaXQgYXV0aFNlcnZpY2Uuc2lnbk91dCgpO1xuICAgIH1cbiAgfSwgW2F1dGhTZXJ2aWNlLCBjYW5TaWduT3V0XSk7XG5cbiAgY29uc3QgdG9nZ2xlVGVuYW50cyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAodmlld1N0YXRlLmN1cnJlbnRQb3NpdGlvbiA9PT0gTmF2aWdhdGlvblBvc2l0aW9uLk9QRU4pIHtcbiAgICAgIHVwZGF0ZVZpZXdTdGF0ZSh7XG4gICAgICAgIGN1cnJlbnRQb3NpdGlvbjogTmF2aWdhdGlvblBvc2l0aW9uLkVYUEFOREVELFxuICAgICAgICBzZWxlY3RlZFRlbmFudElkOiB0ZW5hbnRJZCBhcyBzdHJpbmcsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodmlld1N0YXRlLmN1cnJlbnRQb3NpdGlvbiA9PT0gTmF2aWdhdGlvblBvc2l0aW9uLkVYUEFOREVEKSB7XG4gICAgICB1cGRhdGVWaWV3U3RhdGUoeyBjdXJyZW50UG9zaXRpb246IE5hdmlnYXRpb25Qb3NpdGlvbi5PUEVOIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSwgW3RlbmFudElkLCB1cGRhdGVWaWV3U3RhdGUsIHZpZXdTdGF0ZS5jdXJyZW50UG9zaXRpb25dKTtcblxuICBjb25zdCBjdHggPSB1c2VNZW1vPE5hdmlnYXRpb25Db250ZXh0VmFsdWU+KFxuICAgICgpID0+ICh7XG4gICAgICBoYXNNYXJrZXRpbmdFbmdpbmVBY2Nlc3MsXG4gICAgICBoYXNTaG93cm9vbUFjY2VzcyxcbiAgICAgIGhhc1NlbmRvdXRzQWNjZXNzLFxuICAgICAgaGFzU2VuZG91dHNDbXNBY2Nlc3MsXG4gICAgICBoYXNVc2VyTWFuYWdlbWVudEFjY2VzcyxcbiAgICAgIHZpZXdTdGF0ZSxcbiAgICAgIHVwZGF0ZVZpZXdTdGF0ZSxcbiAgICAgIHNpZ25PdXQsXG4gICAgICB0b2dnbGVUZW5hbnRzLFxuICAgICAgb25OYXZpZ2F0aW9uQ2xvc2UsXG4gICAgfSksXG4gICAgW1xuICAgICAgaGFzTWFya2V0aW5nRW5naW5lQWNjZXNzLFxuICAgICAgaGFzU2VuZG91dHNBY2Nlc3MsXG4gICAgICBoYXNTZW5kb3V0c0Ntc0FjY2VzcyxcbiAgICAgIGhhc1Nob3dyb29tQWNjZXNzLFxuICAgICAgaGFzVXNlck1hbmFnZW1lbnRBY2Nlc3MsXG4gICAgICB2aWV3U3RhdGUsXG4gICAgICB1cGRhdGVWaWV3U3RhdGUsXG4gICAgICBzaWduT3V0LFxuICAgICAgdG9nZ2xlVGVuYW50cyxcbiAgICAgIG9uTmF2aWdhdGlvbkNsb3NlLFxuICAgIF1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxOYXZpZ2F0aW9uQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y3R4fT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L05hdmlnYXRpb25Db250ZXh0LlByb3ZpZGVyPlxuICApO1xufVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJuYXZpZ2F0aW9uXCI6XCJ0S3lnUTRMTURpa0hzNUhzaDBRa1wifTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcIkB0b3VjaHRlY2gvYmFzZWxheWVyLXVpXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwic3dyXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiQHRvdWNodGVjaC93ZWItYXBpLWNsaWVudFwiKTsiLCJpbXBvcnQgdXNlU1dSIGZyb20gXCJzd3JcIjtcblxuaW1wb3J0IHsgY3JlYXRlVXJsLCB1c2VBcGkgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItYXBpLWNsaWVudFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGVuYW50c1ZpZXdVcmwoKSB7XG4gIGNvbnN0IGJhc2VVcmwgPVxuICAgIHByb2Nlc3MuZW52LlRFTkFOVFNfU0VSVklDRV9VUkwgPz9cbiAgICBwcm9jZXNzLmVudi5SRUFDVF9BUFBfVEVOQU5UU19TRVJWSUNFX1VSTDtcblxuICBpZiAoIWJhc2VVcmwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIlRFTkFOVFNfU0VSVklDRV9VUkwgb3IgUkVBQ1RfQVBQX1RFTkFOVFNfU0VSVklDRV9VUkwgbXVzdCBiZSBzZXRcIlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlVXJsKGJhc2VVcmwsIFwiL2FwaS9UZW5hbnRzL3ZpZXdcIik7XG59XG5cbmV4cG9ydCB0eXBlIFRlbmFudCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgbG9nb1VybDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU3RhdGUgPSB7XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgZXJyb3I/OiBFcnJvcjtcbiAgdGVuYW50czogQXJyYXk8VGVuYW50Pjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRlbmFudHMoKTogU3RhdGUge1xuICBjb25zdCBhcGkgPSB1c2VBcGkoKTtcbiAgY29uc3QgdXJsID0gY3JlYXRlVGVuYW50c1ZpZXdVcmwoKTtcblxuICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSB1c2VTV1IodXJsLCBhcGkuZ2V0KTtcblxuICByZXR1cm4ge1xuICAgIHRlbmFudHM6IChkYXRhID8/IFtdKSBhcyBBcnJheTxUZW5hbnQ+LFxuICAgIGlzTG9hZGluZzogIWRhdGEgJiYgIWVycm9yLFxuICAgIGVycm9yLFxuICB9O1xufVxuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgSW1hZ2UsIEltYWdlUHJvcHMgfSBmcm9tIFwiQHRvdWNodGVjaC9iYXNlbGF5ZXItdWlcIjtcblxuaW1wb3J0IHVzZVRlbmFudHMgZnJvbSBcIi4uLy4uLy4uL2hvb2tzL3VzZVRlbmFudHNcIjtcbmltcG9ydCB7IHVzZU5hdmlnYXRpb25Db250ZXh0IH0gZnJvbSBcIi4uL0NvbnRleHRcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgbGF5b3V0PzogSW1hZ2VQcm9wc1tcImxheW91dFwiXTtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBMb2dvKHsgbGF5b3V0IH06IFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICB2aWV3U3RhdGU6IHsgc2VsZWN0ZWRUZW5hbnRJZCB9LFxuICB9ID0gdXNlTmF2aWdhdGlvbkNvbnRleHQoKTtcblxuICBjb25zdCB7IHRlbmFudHMgfSA9IHVzZVRlbmFudHMoKTtcblxuICBjb25zdCB0ZW5hbnQgPSB1c2VNZW1vKFxuICAgICgpID0+IHRlbmFudHMuZmluZCgodGVuYW50KSA9PiB0ZW5hbnQuaWQgPT09IHNlbGVjdGVkVGVuYW50SWQpLFxuICAgIFtzZWxlY3RlZFRlbmFudElkLCB0ZW5hbnRzXVxuICApO1xuXG4gIGlmICghdGVuYW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gPEltYWdlIHNyYz17dGVuYW50LmxvZ29Vcmx9IGxheW91dD17bGF5b3V0fSAvPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9nbztcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNjKG5hbWVzKSB7XG4gIGlmICh0eXBlb2YgbmFtZXMgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIG5hbWVzID09PSBcIm51bWJlclwiKSByZXR1cm4gXCJcIiArIG5hbWVzXG5cbiAgbGV0IG91dCA9IFwiXCJcblxuICBpZiAoQXJyYXkuaXNBcnJheShuYW1lcykpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgdG1wOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICgodG1wID0gY2MobmFtZXNbaV0pKSAhPT0gXCJcIikge1xuICAgICAgICBvdXQgKz0gKG91dCAmJiBcIiBcIikgKyB0bXBcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChsZXQgayBpbiBuYW1lcykge1xuICAgICAgaWYgKG5hbWVzW2tdKSBvdXQgKz0gKG91dCAmJiBcIiBcIikgKyBrXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG91dFxufVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0aWVyXCI6XCJhbGt4alp2VGdBY3N6MEpSa202Y1wiLFwiaGlkZGVuXCI6XCJxT1dRYjBCQ19tdFdtRHd2Zmk2WlwiLFwidGllckhlYWRlclwiOlwicDRKUGI0RHptR29aT0loTzA5d3NcIixcImJvcmRlclwiOlwieDBfVkYzQlhiV1V0bENDZ090UVpcIixcInRpZXJNYWluXCI6XCJqV1BCWnU4aUxEeXlUbjZlVzZrd1wiLFwidGllckZvb3RlclwiOlwiZ2I2dDgyeHBaVTd5bWtVZFN1eF9cIn07IiwiaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgY3NzIGZyb20gXCIuL1RpZXIubW9kdWxlLmNzc1wiO1xuXG50eXBlIFByb3BzID0ge1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgaGVhZGVyPzogUmVhY3QuUmVhY3ROb2RlO1xuICBzaG93SGVhZGVyQm9yZGVyPzogYm9vbGVhbjtcbiAgZm9vdGVyPzogUmVhY3QuUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHdpZHRoPzogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gVGllcih7XG4gIGNoaWxkcmVuLFxuICBoZWFkZXIsXG4gIGZvb3RlcixcbiAgY2xhc3NOYW1lLFxuICB3aWR0aCxcbiAgc2hvd0hlYWRlckJvcmRlcixcbn06IFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtjc3MudGllciwgY2xhc3NOYW1lXSl9IHN0eWxlPXt7IHdpZHRoIH19PlxuICAgICAgeyEhaGVhZGVyICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgY3NzLnRpZXJIZWFkZXIsXG4gICAgICAgICAgICB7IFtjc3MuYm9yZGVyXTogc2hvd0hlYWRlckJvcmRlciB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICA+XG4gICAgICAgICAge2hlYWRlcn1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy50aWVyTWFpbn0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgeyEhZm9vdGVyICYmIDxkaXYgY2xhc3NOYW1lPXtjc3MudGllckZvb3Rlcn0+e2Zvb3Rlcn08L2Rpdj59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRpZXI7XG4iLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcInJlYWN0LXJvdXRlci1kb21cIik7IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJuYXZpZ2F0aW9uQnV0dG9uXCI6XCJSdVl5VTRaVTk4MklCZ2RiMU5yMlwiLFwiYWN0aXZlXCI6XCJtRFZQQzQ1MnNJWjFBWjEySHVwdVwifTsiLCJpbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IG1hdGNoUGF0aCB9IGZyb20gXCJyZWFjdC1yb3V0ZXItZG9tXCI7XG5cbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCJAdG91Y2h0ZWNoL2Jhc2VsYXllci11aVwiO1xuaW1wb3J0IHsgVGVuYW50SWRDb250ZXh0IH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLXRlbmFudC1pZC1wcm92aWRlclwiO1xuXG5pbXBvcnQgeyB1c2VOYXZpZ2F0aW9uQ29udGV4dCB9IGZyb20gXCIuLi8uLi8uLi9Db250ZXh0XCI7XG5pbXBvcnQgY3NzIGZyb20gXCIuL0FwcGxpY2F0aW9uTGluay5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBzdHJpbmc7XG4gIHRvOiBzdHJpbmc7XG4gIGhpZGRlbj86IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBBcHBsaWNhdGlvbkxpbmsoeyBjaGlsZHJlbiwgdG8sIGhpZGRlbiB9OiBQcm9wcykge1xuICBjb25zdCBbY3VycmVudFRlbmFudElkLCBzZXRDdXJyZW50VGVuYW50SWRdID0gdXNlQ29udGV4dChUZW5hbnRJZENvbnRleHQpO1xuICBjb25zdCBbaXNSZWRpcmVjdGluZywgc2V0SXNSZWRpcmVjdGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3Qge1xuICAgIHZpZXdTdGF0ZTogeyBzZWxlY3RlZFRlbmFudElkIH0sXG4gIH0gPSB1c2VOYXZpZ2F0aW9uQ29udGV4dCgpO1xuXG4gIC8qKlxuICAgKiBXb3JrYXJvdW5kIGZvcjpcbiAgICpcbiAgICogVXNlciBBIGhhcyBhY2Nlc3MgdG8gdGVuYW50czogMSAoVXNlcnMgYXBwIG9ubHkpIGFuZCAyIChNZWRpYSBsaWJyYXJ5IGFwcCBvbmx5KVxuICAgKlxuICAgKiBVc2VyIEEgaXMgbG9nZ2VkIGluIHRvIFVzZXJzIGFwcCAodGVuYW50IDEpIGFuZCBuYXZpZ2F0ZXMgdG8gTWVkaWEgbGlicmFyeSBhcHAgKHRlbmFudCAyKVxuICAgKiBieSBzZWxlY3RpbmcgY29ycmVzcG9uZGluZyB0ZW5hbnQgKDIpIGFuZCBhdmFpbGFibGUgYXBwIChNZWRpYSBsaWJyYXJ5KSBpbiB0aGUgbmF2aWdhdGlvbiBtZW51XG4gICAqXG4gICAqIFVzZXIgQSBlbmRzIHVwIGluIFRlbmFudHMgcGlja2VyIHBhZ2UgYmVjYXVzZSBvZiBQcm90ZWN0ZWQgcm91dGUgaW4gdGhlIHBhcmVudCBhcHAgKFVzZXJzIGFwcClcbiAgICogdGhhdCByZWRpcmVjdHMgdG8gdW5hdXRob3JpemVkVXJsIChUZW5hbnRzIHBpY2tlciBwYWdlKSBpZiB1c2VyIGRvZXNuJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGFwcFxuICAgKiBoZSBpcyBjdXJyZW50bHkgaW4gKFVzZXJzIGFwcCBvZiB0ZW5hbnQgMSlcbiAgICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlVW5sb2FkID0gKCkgPT4ge1xuICAgICAgaWYgKGN1cnJlbnRUZW5hbnRJZCAhPT0gc2VsZWN0ZWRUZW5hbnRJZCAmJiBpc1JlZGlyZWN0aW5nKSB7XG4gICAgICAgIHNldEN1cnJlbnRUZW5hbnRJZChzZWxlY3RlZFRlbmFudElkKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gdW5sb2FkIGV2ZW50IGlzIGZpcmVkIHdoZW4gd2luZG93LmFzc2lnbiBpcyBjYWxsZWRcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInVubG9hZFwiLCBoYW5kbGVVbmxvYWQpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidW5sb2FkXCIsIGhhbmRsZVVubG9hZCk7XG4gICAgfTtcbiAgfSwgW3NldEN1cnJlbnRUZW5hbnRJZCwgY3VycmVudFRlbmFudElkLCBzZWxlY3RlZFRlbmFudElkLCBpc1JlZGlyZWN0aW5nXSk7XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SXNSZWRpcmVjdGluZyh0cnVlKTtcbiAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHRvKTtcbiAgfSwgW3RvXSk7XG5cbiAgY29uc3QgaXNBY3RpdmUgPVxuICAgICEhbWF0Y2hQYXRoKGAke3RvfS8qYCwgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKSAmJlxuICAgIGN1cnJlbnRUZW5hbnRJZCA9PT0gc2VsZWN0ZWRUZW5hbnRJZDtcblxuICByZXR1cm4gIWhpZGRlbiA/IChcbiAgICA8QnV0dG9uXG4gICAgICBhbGlnbj1cImxlZnRcIlxuICAgICAgbm9Cb3JkZXJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW2Nzcy5uYXZpZ2F0aW9uQnV0dG9uLCB7IFtjc3MuYWN0aXZlXTogaXNBY3RpdmUgfV0pfVxuICAgICAgbm9TaGFkb3dcbiAgICAgIGRpc2FibGVkPXtpc0FjdGl2ZX1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0J1dHRvbj5cbiAgKSA6IG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFwcGxpY2F0aW9uTGluaztcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiYXBwbGljYXRpb25zXCI6XCJ4cTJOaE05QkVpX1c0bndUM3loMlwiLFwiYXBwbGljYXRpb25zSGVhZGVyXCI6XCJCR2pFdFZqNHJfR0wxWFJQZ2dkS1wiLFwiYXBwbGljYXRpb25zSGVhZGVyQnJhbmRcIjpcIlZhb1M5c1hURUNBVHY1QWxoZVdBXCIsXCJhcHBsaWNhdGlvbnNIZWFkZXJMb2dvXCI6XCJXdVRyR3ozVVUzcEgxZlZUaUNUWlwiLFwiYXBwbGljYXRpb25zSGVhZGVyQ2xvc2VJY29uXCI6XCJDb2gyREZyQ05ZcWp1SF9yN012R1wiLFwiYXBwbGljYXRpb25zSGVhZGVyQ2hhbmdlQnJhbmRCdXR0b25cIjpcIk1PWDlJQjBuU3g1Y2ZMSHJjb09aXCIsXCJhcHBsaWNhdGlvbnNNYWluXCI6XCJtd09GaUNNSlVjd1FnTjcxZTdzQ1wiLFwiYXBwbGljYXRpb25zTWFpbkNvbnRlbnRcIjpcIkFWRzdrQjlGeXZiYjZqVzNGQTBCXCIsXCJhcHBsaWNhdGlvbnNNYWluTGlzdFwiOlwiVktzSEpPWGNRaTE3NHM5NHFtT29cIixcImFwcGxpY2F0aW9uc01haW5Vc2VyXCI6XCJTV25BMjBuQUVrUjZnb1dHbEZyZVwiLFwiYXBwbGljYXRpb25zTWFpblVzZXJOYW1lXCI6XCJIZURheVpwTWFpYU13b1h2UkZvRFwiLFwiYXBwbGljYXRpb25zTWFpblVzZXJFbWFpbFwiOlwiWEYyRl9ZR0U2UG14UzB0RVZ2UDJcIixcImFwcGxpY2F0aW9uc0Zvb3RlclwiOlwiVjNJWkwxeVZiTVdJcG9zalFBTDhcIixcImFwcGxpY2F0aW9uc0Zvb3RlclNpZ25PdXRcIjpcIlpneDhEcHkycEFkT29xVHRNTVFpXCIsXCJhcHBsaWNhdGlvbnNGb290ZXJTaWduT3V0SWNvblwiOlwiQVpubEZielRHRXhHdHBZaDRfTFlcIixcImFwcGxpY2F0aW9uc0Zvb3RlclNpZ25PdXRMYWJlbFwiOlwicTh2anZSb1B5V3hQXzRiaU83eWVcIn07IiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQnV0dG9uLCBJY29uIH0gZnJvbSBcIkB0b3VjaHRlY2gvYmFzZWxheWVyLXVpXCI7XG5pbXBvcnQgeyBBdXRoQ29udGV4dCB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1hdXRoXCI7XG5cbmltcG9ydCBjbG9zZUljb24gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2Fzc2V0cy9pY29ucy9jbG9zZS5zdmdcIjtcbmltcG9ydCBsb2dvdXRJY29uIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hc3NldHMvaWNvbnMvbG9nb3V0LnN2Z1wiO1xuaW1wb3J0IHsgQVBQTElDQVRJT05TX1RJRVJfV0lEVEgsIEFwcFBhdGhzIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgdXNlTmF2aWdhdGlvbkNvbnRleHQgfSBmcm9tIFwiLi4vLi4vQ29udGV4dFwiO1xuaW1wb3J0IExvZ28gZnJvbSBcIi4uLy4uL0xvZ29cIjtcbmltcG9ydCBUaWVyIGZyb20gXCIuLi9UaWVyXCI7XG5pbXBvcnQgQXBwbGljYXRpb25MaW5rIGZyb20gXCIuL0FwcGxpY2F0aW9uTGlua1wiO1xuaW1wb3J0IGNzcyBmcm9tIFwiLi9BcHBsaWNhdGlvbnMubW9kdWxlLmNzc1wiO1xuXG5mdW5jdGlvbiBBcHBsaWNhdGlvbnMoKSB7XG4gIGNvbnN0IHsgdXNlciB9ID0gdXNlQ29udGV4dChBdXRoQ29udGV4dCk7XG4gIGNvbnN0IHsgdG9nZ2xlVGVuYW50cyB9ID0gdXNlTmF2aWdhdGlvbkNvbnRleHQoKTtcbiAgY29uc3Qge1xuICAgIHNpZ25PdXQsXG4gICAgb25OYXZpZ2F0aW9uQ2xvc2UsXG4gICAgaGFzU2hvd3Jvb21BY2Nlc3MsXG4gICAgaGFzTWFya2V0aW5nRW5naW5lQWNjZXNzLFxuICAgIGhhc1NlbmRvdXRzQWNjZXNzLFxuICAgIGhhc1NlbmRvdXRzQ21zQWNjZXNzLFxuICAgIGhhc1VzZXJNYW5hZ2VtZW50QWNjZXNzLFxuICB9ID0gdXNlTmF2aWdhdGlvbkNvbnRleHQoKTtcblxuICByZXR1cm4gKFxuICAgIDxUaWVyXG4gICAgICBjbGFzc05hbWU9e2Nzcy5hcHBsaWNhdGlvbnN9XG4gICAgICB3aWR0aD17QVBQTElDQVRJT05TX1RJRVJfV0lEVEh9XG4gICAgICBzaG93SGVhZGVyQm9yZGVyXG4gICAgICBoZWFkZXI9e1xuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmFwcGxpY2F0aW9uc0hlYWRlcn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5hcHBsaWNhdGlvbnNIZWFkZXJCcmFuZH0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmFwcGxpY2F0aW9uc0hlYWRlckxvZ299PlxuICAgICAgICAgICAgICA8TG9nbyAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzLmFwcGxpY2F0aW9uc0hlYWRlckNsb3NlSWNvbn1cbiAgICAgICAgICAgICAgb25DbGljaz17b25OYXZpZ2F0aW9uQ2xvc2V9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJY29uIHNyYz17Y2xvc2VJY29ufSBzaXplPVwibGFyZ2VcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgYWxpZ249XCJsZWZ0XCJcbiAgICAgICAgICAgIG5vQm9yZGVyXG4gICAgICAgICAgICB0cmFuc3BhcmVudFxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjc3MuYXBwbGljYXRpb25zSGVhZGVyQ2hhbmdlQnJhbmRCdXR0b259XG4gICAgICAgICAgICBvbkNsaWNrPXt0b2dnbGVUZW5hbnRzfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIENoYW5nZSBicmFuZFxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIGZvb3Rlcj17XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MuYXBwbGljYXRpb25zRm9vdGVyfSBvbkNsaWNrPXtzaWduT3V0fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmFwcGxpY2F0aW9uc0Zvb3RlclNpZ25PdXR9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5hcHBsaWNhdGlvbnNGb290ZXJTaWduT3V0SWNvbn0+XG4gICAgICAgICAgICAgIDxJY29uIHNyYz17bG9nb3V0SWNvbn0gc2l6ZT1cIm1lZGl1bVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MuYXBwbGljYXRpb25zRm9vdGVyU2lnbk91dExhYmVsfT5TaWduIG91dDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmFwcGxpY2F0aW9uc01haW59PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmFwcGxpY2F0aW9uc01haW5Db250ZW50fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmFwcGxpY2F0aW9uc01haW5MaXN0fT5cbiAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxpbmsgdG89e0FwcFBhdGhzLkRBU0hCT0FSRH0+RGFzaGJvYXJkPC9BcHBsaWNhdGlvbkxpbms+XG4gICAgICAgICAgICA8QXBwbGljYXRpb25MaW5rIGhpZGRlbj17IWhhc1Nob3dyb29tQWNjZXNzfSB0bz17QXBwUGF0aHMuU0hPV1JPT019PlxuICAgICAgICAgICAgICBQcmVzZW50YXRpb25zIChTaG93cm9vbSlcbiAgICAgICAgICAgIDwvQXBwbGljYXRpb25MaW5rPlxuICAgICAgICAgICAgPEFwcGxpY2F0aW9uTGluayBoaWRkZW49eyFoYXNTZW5kb3V0c0FjY2Vzc30gdG89e0FwcFBhdGhzLlNFTkRPVVRTfT5cbiAgICAgICAgICAgICAgU2VuZG91dHNcbiAgICAgICAgICAgIDwvQXBwbGljYXRpb25MaW5rPlxuICAgICAgICAgICAgPEFwcGxpY2F0aW9uTGlua1xuICAgICAgICAgICAgICBoaWRkZW49eyFoYXNNYXJrZXRpbmdFbmdpbmVBY2Nlc3N9XG4gICAgICAgICAgICAgIHRvPXtBcHBQYXRocy5NQVJLRVRJTkdfRU5HSU5FfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBNZWRpYSBMaWJyYXJ5XG4gICAgICAgICAgICA8L0FwcGxpY2F0aW9uTGluaz5cbiAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxpbmtcbiAgICAgICAgICAgICAgaGlkZGVuPXshaGFzU2VuZG91dHNDbXNBY2Nlc3N9XG4gICAgICAgICAgICAgIHRvPXtBcHBQYXRocy5TRU5ET1VUU19DTVN9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFNlbmRvdXRzIENNU1xuICAgICAgICAgICAgPC9BcHBsaWNhdGlvbkxpbms+XG4gICAgICAgICAgICA8QXBwbGljYXRpb25MaW5rXG4gICAgICAgICAgICAgIGhpZGRlbj17IWhhc1VzZXJNYW5hZ2VtZW50QWNjZXNzfVxuICAgICAgICAgICAgICB0bz17QXBwUGF0aHMuVVNFUl9NQU5BR0VNRU5UfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBVc2Vyc1xuICAgICAgICAgICAgPC9BcHBsaWNhdGlvbkxpbms+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge3VzZXIgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5hcHBsaWNhdGlvbnNNYWluVXNlcn0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MuYXBwbGljYXRpb25zTWFpblVzZXJOYW1lfT5cbiAgICAgICAgICAgICAgICB7dXNlci5maXJzdE5hbWV9IHt1c2VyLmxhc3ROYW1lfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5hcHBsaWNhdGlvbnNNYWluVXNlckVtYWlsfT57dXNlci5lbWFpbH08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9UaWVyPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBBcHBsaWNhdGlvbnM7XG4iLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzIwJyBoZWlnaHQ9JzIwJyB2aWV3Qm94PScwIDAgMjAgMjAnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMC4zOTg0MzggMC4zOTk5MDJMMTkuNTk4NCAxOS41OTk5TTAuMzk4NDM4IDE5LjU5OTlMMTkuNTk4NCAwLjM5OTkwMicgc3Ryb2tlPSdibGFjaycvJTNlICUzYy9zdmclM2VcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTQnIGhlaWdodD0nMTUnIHZpZXdCb3g9JzAgMCAxNCAxNScgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J003IDEuNTk5OUwxMC40NjY3IDQuNzk5OU03IDEuNTk5OUwzLjggNC43OTk5TTcgMS41OTk5TDcgMTEuNzMzMk0xMy40IDcuNDY2NTdMMTMuNCAxNC4zOTk5TDAuNjAwMDAyIDE0LjM5OTlMMC42MDAwMDIgNy40NjY1Nycgc3Ryb2tlPSclMjMyRDJEMzMnLyUzZSAlM2Mvc3ZnJTNlXCIiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm1vZGFsXCI6XCJWMXFvVzNWNVhiMmlhRUJoUWxGWlwiLFwiYm9sZFwiOlwiVFBCbDRybzViOHNnak9hZ0pSV1NcIn07IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBCdXR0b24sIENvbmZpcm1hdGlvbk1vZGFsIH0gZnJvbSBcIkB0b3VjaHRlY2gvYmFzZWxheWVyLXVpXCI7XG5cbmltcG9ydCBjc3MgZnJvbSBcIi4vTW9kYWxDcmVhdGVUZW5hbnQubW9kdWxlLmNzc1wiO1xuXG50eXBlIFByb3BzID0ge1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gTW9kYWxDcmVhdGVUZW5hbnQoeyBvbkNsb3NlIH06IFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPENvbmZpcm1hdGlvbk1vZGFsXG4gICAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgICAgaGVhZGVyPVwiQ3JlYXRlIGEgbmV3IEJyYW5kIFdvcmtzcGFjZVwiXG4gICAgICBidXR0b25zUmlnaHQ9e1tcbiAgICAgICAgPEJ1dHRvbiBrZXk9XCJjbG9zZVwiIG9uQ2xpY2s9e29uQ2xvc2V9IHJvdW5kZWQ+XG4gICAgICAgICAgQ2xvc2VcbiAgICAgICAgPC9CdXR0b24+LFxuICAgICAgXX1cbiAgICAgIGlzT3BlblxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MubW9kYWx9PlxuICAgICAgICBQbGVhc2UgZW1haWwgPHNwYW4gY2xhc3NOYW1lPXtjc3MuYm9sZH0+c3VwcG9ydEB0b3VjaHRlY2guY29tPC9zcGFuPiBhbmRcbiAgICAgICAgd2Ugd2lsbCBoZWxwIHlvdSBzZXR1cCB5b3VyIEJyYW5kIFdvcmtzcGFjZS4gWW91IHdpbGwgYmUgZ3VpZGVkXG4gICAgICAgIHRocm91Z2hvdXQgdGhlIHByb2Nlc3Mgb2YgdXBsb2FkaW5nIHlvdXIgY29udGVudC5cbiAgICAgIDwvZGl2PlxuICAgIDwvQ29uZmlybWF0aW9uTW9kYWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1vZGFsQ3JlYXRlVGVuYW50O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0ZW5hbnRCdXR0b25cIjpcIm9ldVdNTWNKdkx6R1Z5emxrenJpXCIsXCJhY3RpdmVcIjpcImJiVUh3WGRtVG1MeDFCbTE0QXRuXCIsXCJ0ZW5hbnRCdXR0b25JY29uXCI6XCJJclNVdFN5Sl95SFUwNnA1WTFKM1wifTsiLCJpbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCJAdG91Y2h0ZWNoL2Jhc2VsYXllci11aVwiO1xuXG5pbXBvcnQgeyBUZW5hbnQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vaG9va3MvdXNlVGVuYW50c1wiO1xuaW1wb3J0IHsgTmF2aWdhdGlvblBvc2l0aW9uLCB1c2VOYXZpZ2F0aW9uQ29udGV4dCB9IGZyb20gXCIuLi8uLi8uLi9Db250ZXh0XCI7XG5pbXBvcnQgY3NzIGZyb20gXCIuL1RlbmFudEJ1dHRvbi5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHRlbmFudDogVGVuYW50O1xufTtcblxuZnVuY3Rpb24gVGVuYW50QnV0dG9uKHsgdGVuYW50IH06IFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICB2aWV3U3RhdGU6IHsgc2VsZWN0ZWRUZW5hbnRJZCB9LFxuICAgIHVwZGF0ZVZpZXdTdGF0ZSxcbiAgfSA9IHVzZU5hdmlnYXRpb25Db250ZXh0KCk7XG5cbiAgY29uc3QgaXNBY3RpdmUgPSBzZWxlY3RlZFRlbmFudElkID09PSB0ZW5hbnQuaWQ7XG5cbiAgcmV0dXJuIChcbiAgICA8QnV0dG9uXG4gICAgICBrZXk9e3RlbmFudC5pZH1cbiAgICAgIGFsaWduPVwibGVmdFwiXG4gICAgICBub0JvcmRlclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbY3NzLnRlbmFudEJ1dHRvbiwgeyBbY3NzLmFjdGl2ZV06IGlzQWN0aXZlIH1dKX1cbiAgICAgIG5vU2hhZG93XG4gICAgICBkaXNhYmxlZD17aXNBY3RpdmV9XG4gICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgIHVwZGF0ZVZpZXdTdGF0ZSh7XG4gICAgICAgICAgc2VsZWN0ZWRUZW5hbnRJZDogdGVuYW50LmlkLFxuICAgICAgICAgIGN1cnJlbnRQb3NpdGlvbjogTmF2aWdhdGlvblBvc2l0aW9uLk9QRU4sXG4gICAgICAgIH0pO1xuICAgICAgfX1cbiAgICA+XG4gICAgICB7dGVuYW50LmxhYmVsfVxuICAgIDwvQnV0dG9uPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUZW5hbnRCdXR0b247XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRlbmFudHNcIjpcIlRJbUNzaG5qYjdVUFZrMlI0bFpQXCIsXCJ0ZW5hbnRzSGVhZGVyXCI6XCJQTE9XekRHTkdYekxBSnJIMFJLM1wiLFwidGVuYW50c0hlYWRlckFycm93SWNvblwiOlwieGRFT196SVpaNHRGcmZhcGtGRlRcIixcInRlbmFudHNNYWluXCI6XCJBczEydnluVFFrX2prblFJbEo4QVwiLFwidGVuYW50c0Zvb3RlclwiOlwicTJ3czdheEw1QXAxaFFXM20xNk5cIixcInRlbmFudHNGb290ZXJDcmVhdGVCcmFuZFwiOlwiellrek51TlFodklkV0taaG9RR3JcIixcInRlbmFudHNGb290ZXJDcmVhdGVCcmFuZEljb25cIjpcInh4Y3U2eXRYUmNQbDFHWkoydmQ5XCIsXCJ0ZW5hbnRzRm9vdGVyQ3JlYXRlQnJhbmRMYWJlbFwiOlwiUVloY3ZacWJaeGdlbkc0MWt3TnFcIn07IiwiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEljb24gfSBmcm9tIFwiQHRvdWNodGVjaC9iYXNlbGF5ZXItdWlcIjtcblxuaW1wb3J0IGFkZEljb24gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2Fzc2V0cy9pY29ucy9hZGQuc3ZnXCI7XG5pbXBvcnQgYXJyb3dMZWZ0SWNvbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXNzZXRzL2ljb25zL2Fycm93LWxlZnQuc3ZnXCI7XG5pbXBvcnQgeyBBcHBQYXRocywgVEVOQU5UU19USUVSX1dJRFRIIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHVzZVRlbmFudHMgZnJvbSBcIi4uLy4uLy4uLy4uL2hvb2tzL3VzZVRlbmFudHNcIjtcbmltcG9ydCB7IHVzZU5hdmlnYXRpb25Db250ZXh0IH0gZnJvbSBcIi4uLy4uL0NvbnRleHRcIjtcbmltcG9ydCBUaWVyIGZyb20gXCIuLi9UaWVyXCI7XG5pbXBvcnQgTW9kYWxDcmVhdGVUZW5hbnQgZnJvbSBcIi4vTW9kYWxDcmVhdGVUZW5hbnRcIjtcbmltcG9ydCBUZW5hbnRCdXR0b24gZnJvbSBcIi4vVGVuYW50QnV0dG9uXCI7XG5pbXBvcnQgY3NzIGZyb20gXCIuL1RlbmFudHMubW9kdWxlLmNzc1wiO1xuXG5mdW5jdGlvbiBUZW5hbnRzKCkge1xuICBjb25zdCBbaXNDcmVhdGVUZW5hbnRNb2RhbE9wZW4sIHNldElzQ3JlYXRlVGVuYW50TW9kYWxPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCB7IHRvZ2dsZVRlbmFudHMgfSA9IHVzZU5hdmlnYXRpb25Db250ZXh0KCk7XG5cbiAgY29uc3QgeyB0ZW5hbnRzIH0gPSB1c2VUZW5hbnRzKCk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLnRlbmFudHN9PlxuICAgICAgPFRpZXJcbiAgICAgICAgd2lkdGg9e1RFTkFOVFNfVElFUl9XSURUSH1cbiAgICAgICAgaGVhZGVyPXtcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLnRlbmFudHNIZWFkZXJ9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy50ZW5hbnRzSGVhZGVyQXJyb3dJY29ufSBvbkNsaWNrPXt0b2dnbGVUZW5hbnRzfT5cbiAgICAgICAgICAgICAgPEljb24gc3JjPXthcnJvd0xlZnRJY29ufSBzaXplPVwibGFyZ2VcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgZm9vdGVyPXtcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2Nzcy50ZW5hbnRzRm9vdGVyfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihBcHBQYXRocy5EQVNIQk9BUkRfQ1JFQVRFX1dPUktTUEFDRV9NT0RBTClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLnRlbmFudHNGb290ZXJDcmVhdGVCcmFuZH0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MudGVuYW50c0Zvb3RlckNyZWF0ZUJyYW5kSWNvbn0+XG4gICAgICAgICAgICAgICAgPEljb24gc3JjPXthZGRJY29ufSBzaXplPVwibWVkaXVtXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MudGVuYW50c0Zvb3RlckNyZWF0ZUJyYW5kTGFiZWx9PlxuICAgICAgICAgICAgICAgIENyZWF0ZSBhIGJyYW5kIHdvcmtzcGFjZVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MudGVuYW50c01haW59PlxuICAgICAgICAgIHt0ZW5hbnRzLm1hcCgodGVuYW50KSA9PiAoXG4gICAgICAgICAgICA8VGVuYW50QnV0dG9uIHRlbmFudD17dGVuYW50fSBrZXk9e3RlbmFudC5pZH0gLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1RpZXI+XG4gICAgICB7aXNDcmVhdGVUZW5hbnRNb2RhbE9wZW4gJiYgKFxuICAgICAgICA8TW9kYWxDcmVhdGVUZW5hbnRcbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiB7XG4gICAgICAgICAgICBzZXRJc0NyZWF0ZVRlbmFudE1vZGFsT3BlbihmYWxzZSk7XG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRlbmFudHM7XG4iLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzIyJyBoZWlnaHQ9JzE0JyB2aWV3Qm94PScwIDAgMjIgMTQnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMS42MDAxIDcuMDAwMzlMOC4wMDAxIDEzLjQwMDRNMS42MDAxIDcuMDAwMzlMOC4wMDAxIDAuNjAwMzkxTTEuNjAwMSA3LjAwMDM5TDIxLjYwMDEgNy4wMDAzOScgc3Ryb2tlPSclMjMyNjI2MjYnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE0JyBoZWlnaHQ9JzE0JyB2aWV3Qm94PScwIDAgMTQgMTQnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMC4wMDE3MDkwNiA3TDEzLjAwMTcgN002LjUwMTcxIDEzLjVMNi41MDE3MSAwLjUnIHN0cm9rZT0nJTIzMkQyRDMzJy8lM2UgJTNjL3N2ZyUzZVwiIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0aWVyc1wiOlwieDRDY25LUDBoc01wZjhhVFYxdmNcIn07IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgQXBwbGljYXRpb25zIGZyb20gXCIuL0FwcGxpY2F0aW9uc1wiO1xuaW1wb3J0IFRlbmFudHMgZnJvbSBcIi4vVGVuYW50c1wiO1xuaW1wb3J0IGNzcyBmcm9tIFwiLi9UaWVycy5tb2R1bGUuY3NzXCI7XG5cbmZ1bmN0aW9uIFRpZXJzKCkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MudGllcnN9PlxuICAgICAgPEFwcGxpY2F0aW9ucyAvPlxuICAgICAgPFRlbmFudHMgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGllcnM7XG4iLCJpbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIFRyYW5zaXRpb24sIFZhcmlhbnQsIG1vdGlvbiB9IGZyb20gXCJmcmFtZXItbW90aW9uXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmltcG9ydCB7IEFQUExJQ0FUSU9OU19USUVSX1dJRFRILCBURU5BTlRTX1RJRVJfV0lEVEggfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQge1xuICBOYXZpZ2F0aW9uQ29udGV4dCxcbiAgTmF2aWdhdGlvbkNvbnRleHRQcm92aWRlcixcbiAgTmF2aWdhdGlvblBvc2l0aW9uLFxufSBmcm9tIFwiLi9Db250ZXh0XCI7XG5pbXBvcnQgY3NzIGZyb20gXCIuL05hdmlnYXRpb24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IFRpZXJzIGZyb20gXCIuL1RpZXJzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgcG9ydGFsQ29udGFpbmVyPzogRWxlbWVudCB8IERvY3VtZW50RnJhZ21lbnQ7XG4gIG9uQ2xvc2U6ICgpID0+IHZvaWQ7XG59O1xuXG5jb25zdCBFWFBBTkRFRF9OQVZJR0FUSU9OX1dJRFRIID0gQVBQTElDQVRJT05TX1RJRVJfV0lEVEggKyBURU5BTlRTX1RJRVJfV0lEVEg7XG5cbmNvbnN0IEFOSU1BVElPTl9UUkFOU0lUSU9OOiBUcmFuc2l0aW9uID0geyBlYXNlOiBcImVhc2VPdXRcIiwgZHVyYXRpb246IDAuMyB9O1xuY29uc3QgQU5JTUFUSU9OX1ZBUklBTlRTOiBSZWNvcmQ8TmF2aWdhdGlvblBvc2l0aW9uLCBWYXJpYW50PiA9IHtcbiAgW05hdmlnYXRpb25Qb3NpdGlvbi5ISURERU5dOiB7XG4gICAgbGVmdDogLUVYUEFOREVEX05BVklHQVRJT05fV0lEVEgsXG4gICAgdHJhbnNpdGlvbjogQU5JTUFUSU9OX1RSQU5TSVRJT04sXG4gIH0sXG4gIFtOYXZpZ2F0aW9uUG9zaXRpb24uT1BFTl06IHtcbiAgICBsZWZ0OiAtQVBQTElDQVRJT05TX1RJRVJfV0lEVEgsXG4gICAgdHJhbnNpdGlvbjogQU5JTUFUSU9OX1RSQU5TSVRJT04sXG4gIH0sXG4gIFtOYXZpZ2F0aW9uUG9zaXRpb24uRVhQQU5ERURdOiB7IGxlZnQ6IDAsIHRyYW5zaXRpb246IEFOSU1BVElPTl9UUkFOU0lUSU9OIH0sXG59O1xuXG5mdW5jdGlvbiBOYXZpZ2F0aW9uKHtcbiAgaXNPcGVuLFxuICBwb3J0YWxDb250YWluZXIgPSBkb2N1bWVudC5ib2R5LFxuICBvbkNsb3NlLFxufTogUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICAvLyBVc2luZyBmcmFtZXItbW90aW9uIGxpYiB0byBhbmltYXRlIHRoZSBuYXZpZ2F0aW9uIGNvbXBvbmVudCBvbiBtb3VudC91bm1vdW50XG4gICAgLy8gQWxzbyB0byBwcmV2ZW50IGFueSBhcGkgY2FsbHMgZnJvbSBiZWluZyBtYWRlIHdoZW4gdGhlIG5hdmlnYXRpb24gKFRpZXJzIGNvbXBvbmVudCkgaXMgaGlkZGVuXG4gICAgPE5hdmlnYXRpb25Db250ZXh0UHJvdmlkZXIgb25OYXZpZ2F0aW9uQ2xvc2U9e29uQ2xvc2V9IGlzT3Blbj17aXNPcGVufT5cbiAgICAgIDxOYXZpZ2F0aW9uQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgeyh7IHZpZXdTdGF0ZTogeyBjdXJyZW50UG9zaXRpb24gfSB9KSA9PlxuICAgICAgICAgIGNyZWF0ZVBvcnRhbChcbiAgICAgICAgICAgIDxBbmltYXRlUHJlc2VuY2U+XG4gICAgICAgICAgICAgIHtjdXJyZW50UG9zaXRpb24gIT09IE5hdmlnYXRpb25Qb3NpdGlvbi5ISURERU4gJiYgKFxuICAgICAgICAgICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nzcy5uYXZpZ2F0aW9ufVxuICAgICAgICAgICAgICAgICAgaW5pdGlhbD17TmF2aWdhdGlvblBvc2l0aW9uLkhJRERFTn1cbiAgICAgICAgICAgICAgICAgIHZhcmlhbnRzPXtBTklNQVRJT05fVkFSSUFOVFN9XG4gICAgICAgICAgICAgICAgICBhbmltYXRlPXtjdXJyZW50UG9zaXRpb259XG4gICAgICAgICAgICAgICAgICBleGl0PXtOYXZpZ2F0aW9uUG9zaXRpb24uSElEREVOfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxUaWVycyAvPlxuICAgICAgICAgICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPixcbiAgICAgICAgICAgIHBvcnRhbENvbnRhaW5lclxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgPC9OYXZpZ2F0aW9uQ29udGV4dC5Db25zdW1lcj5cbiAgICA8L05hdmlnYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5hdmlnYXRpb247XG4iLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE0JyBoZWlnaHQ9JzE1JyB2aWV3Qm94PScwIDAgMTQgMTEnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMCAxLjVIMTRNMCA1LjVIMTRNMCA5LjVIMTRNMCcgc3Ryb2tlPSdibGFjaycvJTNlICUzYy9zdmclM2VcIiIsImltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSBcIkB0b3VjaHRlY2gvYmFzZWxheWVyLXVpXCI7XG5pbXBvcnQgeyB1c2VUb2dnbGUgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItaG9va3NcIjtcblxuaW1wb3J0IG1lbnVJY29uIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvaWNvbnMvbWVudS5zdmdcIjtcbmltcG9ydCBOYXZpZ2F0aW9uIGZyb20gXCIuL05hdmlnYXRpb25cIjtcblxudHlwZSBJY29uQnV0dG9uUHJvcHMgPSBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgSWNvbkJ1dHRvbj47XG50eXBlIFByb3BzID0gUGFydGlhbDxJY29uQnV0dG9uUHJvcHM+ICYge1xuICBwb3J0YWxDb250YWluZXI/OiBFbGVtZW50IHwgRG9jdW1lbnRGcmFnbWVudDtcbn07XG5cbmZ1bmN0aW9uIE5hdmlnYXRpb25CdXR0b24oe1xuICBzaXplID0gXCJtZWRpdW1cIixcbiAgYWx0ID0gXCJUb2dnbGUgbmF2aWdhdGlvbiBtZW51XCIsXG4gIHNyYyA9IG1lbnVJY29uLFxuICBwb3J0YWxDb250YWluZXIgPSBkb2N1bWVudC5ib2R5LFxuICAuLi5wcm9wc1xufTogUHJvcHMpIHtcbiAgY29uc3QgW2lzTmF2aWdhdGlvbk9wZW4sIHRvZ2dsZUlzTmF2aWdhdGlvbk9wZW5dID0gdXNlVG9nZ2xlKGZhbHNlKTtcblxuICByZXR1cm4gKFxuICAgIDxGcmFnbWVudD5cbiAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIGFsdD17YWx0fVxuICAgICAgICBzcmM9e3NyY31cbiAgICAgICAgb25DbGljaz17KCkgPT4gdG9nZ2xlSXNOYXZpZ2F0aW9uT3BlbigpfVxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAvPlxuICAgICAgPE5hdmlnYXRpb25cbiAgICAgICAgaXNPcGVuPXtpc05hdmlnYXRpb25PcGVufVxuICAgICAgICBwb3J0YWxDb250YWluZXI9e3BvcnRhbENvbnRhaW5lcn1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gdG9nZ2xlSXNOYXZpZ2F0aW9uT3BlbigpfVxuICAgICAgLz5cbiAgICA8L0ZyYWdtZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBOYXZpZ2F0aW9uQnV0dG9uO1xuIiwiaW1wb3J0IHsgX19yZWFkIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRvZ2dsZShpbml0aWFsVmFsdWUpIHtcbiAgICBpZiAoaW5pdGlhbFZhbHVlID09PSB2b2lkIDApIHsgaW5pdGlhbFZhbHVlID0gZmFsc2U7IH1cbiAgICB2YXIgX2EgPSBfX3JlYWQodXNlU3RhdGUoaW5pdGlhbFZhbHVlKSwgMiksIHZhbHVlID0gX2FbMF0sIHNldFZhbHVlID0gX2FbMV07XG4gICAgdmFyIHRvZ2dsZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIG5ld1ZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2V0VmFsdWUoZnVuY3Rpb24gKHByZXZWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhcHJldlZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIFt2YWx1ZSwgdG9nZ2xlXTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZVRvZ2dsZS5qcy5tYXAiXSwibmFtZXMiOlsiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZSIsImdldHRlciIsIl9fZXNNb2R1bGUiLCJkIiwiYSIsImV4cG9ydHMiLCJkZWZpbml0aW9uIiwia2V5IiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsIm9iaiIsInByb3AiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwiZXh0ZW5kU3RhdGljcyIsImIiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsIkFycmF5IiwicCIsIl9fZXh0ZW5kcyIsIlR5cGVFcnJvciIsIlN0cmluZyIsIl9fIiwidGhpcyIsImNvbnN0cnVjdG9yIiwiY3JlYXRlIiwiX19hc3NpZ24iLCJhc3NpZ24iLCJ0IiwicyIsImkiLCJuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXBwbHkiLCJfX3Jlc3QiLCJlIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwibSIsIml0ZXJhdG9yIiwiciIsImFyIiwibmV4dCIsImRvbmUiLCJwdXNoIiwiZXJyb3IiLCJ0byIsImZyb20iLCJwYWNrIiwibCIsInNsaWNlIiwiY29uY2F0IiwicmVxdWlyZSIsImVudiIsInByb2Nlc3MiLCJkZWZhdWx0VGltZXN0ZXAiLCJnZXRDdXJyZW50VGltZSIsInBlcmZvcm1hbmNlIiwibm93IiwiRGF0ZSIsIm9uTmV4dEZyYW1lIiwid2luZG93IiwiY2FsbGJhY2siLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJzZXRUaW1lb3V0IiwidXNlRGVmYXVsdEVsYXBzZWQiLCJydW5OZXh0RnJhbWUiLCJpc1Byb2Nlc3NpbmciLCJkZWx0YSIsInRpbWVzdGFtcCIsInN0ZXBzT3JkZXIiLCJzdGVwcyIsInJlZHVjZSIsImFjYyIsInRvUnVuIiwidG9SdW5OZXh0RnJhbWUiLCJudW1Ub1J1biIsImZsdXNoTmV4dEZyYW1lIiwidG9LZWVwQWxpdmUiLCJXZWFrU2V0Iiwic3RlcCIsInNjaGVkdWxlIiwia2VlcEFsaXZlIiwiaW1tZWRpYXRlIiwiYWRkVG9DdXJyZW50RnJhbWUiLCJidWZmZXIiLCJhZGQiLCJjYW5jZWwiLCJpbmRleCIsInNwbGljZSIsImRlbGV0ZSIsImZyYW1lRGF0YSIsImhhcyIsImNyZWF0ZVJlbmRlclN0ZXAiLCJzeW5jIiwic3RhcnRMb29wIiwiY2FuY2VsU3luYyIsImZsdXNoU3luYyIsInByb2Nlc3NTdGVwIiwic3RlcElkIiwicHJvY2Vzc0ZyYW1lIiwiTWF0aCIsIm1heCIsIm1pbiIsImZvckVhY2giLCJnZXRGcmFtZURhdGEiLCJpc0Jyb3dzZXIiLCJkb2N1bWVudCIsInVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VFZmZlY3QiLCJ1c2VJc01vdW50ZWQiLCJpc01vdW50ZWQiLCJ1c2VSZWYiLCJjdXJyZW50IiwiY3JlYXRlQ29udGV4dCIsInVzZUNvbnN0YW50IiwiaW5pdCIsInJlZiIsImNvdW50ZXIiLCJpbmNyZW1lbnRJZCIsInVzZUlkIiwiUHJlc2VuY2VDaGlsZCIsIl9hIiwiY2hpbGRyZW4iLCJpbml0aWFsIiwiaXNQcmVzZW50Iiwib25FeGl0Q29tcGxldGUiLCJjdXN0b20iLCJwcmVzZW5jZUFmZmVjdHNMYXlvdXQiLCJwcmVzZW5jZUNoaWxkcmVuIiwibmV3Q2hpbGRyZW5NYXAiLCJpZCIsImNvbnRleHQiLCJ1c2VNZW1vIiwiY2hpbGRJZCIsImVfMSIsInNldCIsIl9iIiwiX192YWx1ZXMiLCJ2YWx1ZXMiLCJfYyIsImVfMV8xIiwicmV0dXJuIiwicmVnaXN0ZXIiLCJ1bmRlZmluZWQiLCJfIiwic2l6ZSIsIk1hcCIsIkxheW91dEdyb3VwQ29udGV4dCIsInVzZVVubW91bnRFZmZlY3QiLCJnZXRDaGlsZEtleSIsImNoaWxkIiwiQW5pbWF0ZVByZXNlbmNlIiwiZXhpdEJlZm9yZUVudGVyIiwiX2QiLCJ1c2VTdGF0ZSIsImZvcmNlZFJlbmRlckNvdW50Iiwic2V0Rm9yY2VkUmVuZGVyQ291bnQiLCJmb3JjZVJlbmRlciIsInVzZUNhbGxiYWNrIiwidXNlRm9yY2VVcGRhdGUiLCJmb3JjZVJlbmRlckxheW91dEdyb3VwIiwidXNlQ29udGV4dCIsImZpbHRlcmVkQ2hpbGRyZW4iLCJmaWx0ZXJlZCIsIkNoaWxkcmVuIiwiaXNWYWxpZEVsZW1lbnQiLCJvbmx5RWxlbWVudHMiLCJjaGlsZHJlblRvUmVuZGVyIiwiZXhpdGluZyIsIlNldCIsInByZXNlbnRDaGlsZHJlbiIsImFsbENoaWxkcmVuIiwiaXNJbml0aWFsUmVuZGVyIiwidXBkYXRlQ2hpbGRMb29rdXAiLCJjbGVhciIsIm1hcCIsInByZXNlbnRLZXlzIiwidGFyZ2V0S2V5cyIsIm51bVByZXNlbnQiLCJpbnNlcnRpb25JbmRleCIsInJlbW92ZUluZGV4IiwiZmluZEluZGV4IiwicHJlc2VudENoaWxkIiwiY29uc29sZSIsIndhcm4iLCJjbG9uZUVsZW1lbnQiLCJjcmVhdGVEZWZpbml0aW9uIiwicHJvcE5hbWVzIiwiaXNFbmFibGVkIiwicHJvcHMiLCJzb21lIiwibmFtZSIsImZlYXR1cmVEZWZpbml0aW9ucyIsIm1lYXN1cmVMYXlvdXQiLCJhbmltYXRpb24iLCJleGl0IiwiZHJhZyIsImZvY3VzIiwiaG92ZXIiLCJ0YXAiLCJwYW4iLCJpblZpZXciLCJ3YXJuaW5nIiwiaW52YXJpYW50IiwiTGF6eUNvbnRleHQiLCJzdHJpY3QiLCJmZWF0dXJlTmFtZXMiLCJrZXlzIiwibnVtRmVhdHVyZXMiLCJNb3Rpb25Db25maWdDb250ZXh0IiwidHJhbnNmb3JtUGFnZVBvaW50IiwiaXNTdGF0aWMiLCJyZWR1Y2VkTW90aW9uIiwiTW90aW9uQ29udGV4dCIsInByZWZlcnNSZWR1Y2VkTW90aW9uIiwiaGFzRGV0ZWN0ZWQiLCJ1c2VWaXN1YWxFbGVtZW50IiwiQ29tcG9uZW50IiwidmlzdWFsU3RhdGUiLCJjcmVhdGVWaXN1YWxFbGVtZW50IiwicmVkdWNlZE1vdGlvblByZWZlcmVuY2UiLCJsYXp5Q29udGV4dCIsInBhcmVudCIsInZpc3VhbEVsZW1lbnQiLCJwcmVzZW5jZUNvbnRleHQiLCJzaG91bGRSZWR1Y2VNb3Rpb24iLCJtYXRjaE1lZGlhIiwibW90aW9uTWVkaWFRdWVyeV8xIiwic2V0UmVkdWNlZE1vdGlvblByZWZlcmVuY2VzIiwibWF0Y2hlcyIsImFkZExpc3RlbmVyIiwiaW5pdFByZWZlcnNSZWR1Y2VkTW90aW9uIiwidmlzdWFsRWxlbWVudFJlZiIsInJlbmRlcmVyIiwicHJlc2VuY2VJZCIsImJsb2NrSW5pdGlhbEFuaW1hdGlvbiIsInN5bmNSZW5kZXIiLCJhbmltYXRpb25TdGF0ZSIsImFuaW1hdGVDaGFuZ2VzIiwibm90aWZ5VW5tb3VudCIsImlzUmVmT2JqZWN0IiwiaXNWYXJpYW50TGFiZWxzIiwidiIsImlzQXJyYXkiLCJpc1ZhcmlhbnRMYWJlbCIsInJlc29sdmVWYXJpYW50RnJvbVByb3BzIiwiY3VycmVudFZhbHVlcyIsImN1cnJlbnRWZWxvY2l0eSIsInZhcmlhbnRzIiwicmVzb2x2ZVZhcmlhbnQiLCJnZXRQcm9wcyIsImZvckVhY2hWYWx1ZSIsImdldEN1cnJlbnQiLCJ2ZWxvY2l0eSIsImdldFZlbG9jaXR5IiwiY2hlY2tJZkNvbnRyb2xsaW5nVmFyaWFudHMiLCJhbmltYXRlIiwic3RhcnQiLCJ3aGlsZUhvdmVyIiwid2hpbGVEcmFnIiwid2hpbGVUYXAiLCJ3aGlsZUZvY3VzIiwiY2hlY2tJZlZhcmlhbnROb2RlIiwiQm9vbGVhbiIsInZhcmlhbnRMYWJlbHNBc0RlcGVuZGVuY3kiLCJqb2luIiwiZ2xvYmFsUHJvamVjdGlvblN0YXRlIiwiaGFzQW5pbWF0ZWRTaW5jZVJlc2l6ZSIsImhhc0V2ZXJVcGRhdGVkIiwiU3dpdGNoTGF5b3V0R3JvdXBDb250ZXh0IiwiVmlzdWFsRWxlbWVudEhhbmRsZXIiLCJfc3VwZXIiLCJnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSIsInVwZGF0ZVByb3BzIiwiY29tcG9uZW50RGlkVXBkYXRlIiwic2V0UHJvcHMiLCJyZW5kZXIiLCJwcmVsb2FkZWRGZWF0dXJlcyIsInByb2plY3Rpb25Ob2RlQ29uc3RydWN0b3IiLCJ1c2VSZW5kZXIiLCJ1c2VWaXN1YWxTdGF0ZSIsImZlYXR1cmVzIiwibG9hZEZlYXR1cmVzIiwiZm9yd2FyZFJlZiIsImV4dGVybmFsUmVmIiwibGF5b3V0SWQiLCJsYXlvdXRHcm91cElkIiwidXNlTGF5b3V0SWQiLCJjb25maWciLCJpbmhlcml0IiwiZ2V0Q3VycmVudFRyZWVWYXJpYW50cyIsInVzZUNyZWF0ZU1vdGlvbkNvbnRleHQiLCJwcm9qZWN0aW9uSWQiLCJQcm9qZWN0aW9uTm9kZUNvbnN0cnVjdG9yIiwibGF5b3V0IiwiZHJhZ0NvbnN0cmFpbnRzIiwibGF5b3V0U2Nyb2xsIiwiaW5pdGlhbFByb21vdGlvbkNvbmZpZyIsInByb2plY3Rpb24iLCJnZXRMYXRlc3RWYWx1ZXMiLCJzZXRPcHRpb25zIiwiYWx3YXlzTWVhc3VyZUxheW91dCIsInNjaGVkdWxlUmVuZGVyIiwiYW5pbWF0aW9uVHlwZSIsInVzZVByb2plY3Rpb24iLCJuYW1lXzEiLCJ1c2VGZWF0dXJlcyIsIlByb3ZpZGVyIiwiaW5zdGFuY2UiLCJtb3VudCIsInVubW91bnQiLCJ1c2VNb3Rpb25SZWYiLCJjcmVhdGVNb3Rpb25Qcm94eSIsImNyZWF0ZUNvbmZpZyIsImN1c3RvbU1vdGlvbkNvbXBvbmVudENvbmZpZyIsIlByb3h5IiwiY29tcG9uZW50Q2FjaGUiLCJfdGFyZ2V0IiwibG93ZXJjYXNlU1ZHRWxlbWVudHMiLCJpc1NWR0NvbXBvbmVudCIsImluY2x1ZGVzIiwidGVzdCIsInNjYWxlQ29ycmVjdG9ycyIsInRyYW5zZm9ybUF4ZXMiLCJ0cmFuc2Zvcm1Qcm9wcyIsInNvcnRUcmFuc2Zvcm1Qcm9wcyIsIm9wZXJhdGlvbktleSIsImF4ZXNLZXkiLCJ0cmFuc2Zvcm1Qcm9wU2V0IiwiaXNUcmFuc2Zvcm1Qcm9wIiwidHJhbnNmb3JtT3JpZ2luUHJvcHMiLCJpc1RyYW5zZm9ybU9yaWdpblByb3AiLCJpc0ZvcmNlZE1vdGlvblZhbHVlIiwiaXNNb3Rpb25WYWx1ZSIsInRyYW5zbGF0ZUFsaWFzIiwieCIsInkiLCJ6IiwidHJhbnNmb3JtUGVyc3BlY3RpdmUiLCJpc0NTU1ZhcmlhYmxlIiwic3RhcnRzV2l0aCIsImdldFZhbHVlQXNUeXBlIiwidHlwZSIsInRyYW5zZm9ybSIsImNsYW1wIiwic2FuaXRpemUiLCJOdW1iZXIiLCJ0b0ZpeGVkIiwiZmxvYXRSZWdleCIsImNvbG9yUmVnZXgiLCJzaW5nbGVDb2xvclJlZ2V4IiwiaXNTdHJpbmciLCJjcmVhdGVVbml0VHlwZSIsInVuaXQiLCJlbmRzV2l0aCIsInNwbGl0IiwicGFyc2UiLCJwYXJzZUZsb2F0IiwiZGVncmVlcyIsInBlcmNlbnQiLCJweCIsInZoIiwidnciLCJwcm9ncmVzc1BlcmNlbnRhZ2UiLCJudW1iZXIiLCJhbHBoYSIsInNjYWxlIiwiZGVmYXVsdCIsInJvdW5kIiwibnVtYmVyVmFsdWVUeXBlcyIsImJvcmRlcldpZHRoIiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyQm90dG9tV2lkdGgiLCJib3JkZXJMZWZ0V2lkdGgiLCJib3JkZXJSYWRpdXMiLCJyYWRpdXMiLCJib3JkZXJUb3BMZWZ0UmFkaXVzIiwiYm9yZGVyVG9wUmlnaHRSYWRpdXMiLCJib3JkZXJCb3R0b21SaWdodFJhZGl1cyIsImJvcmRlckJvdHRvbUxlZnRSYWRpdXMiLCJ3aWR0aCIsIm1heFdpZHRoIiwiaGVpZ2h0IiwibWF4SGVpZ2h0IiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0IiwicGFkZGluZyIsInBhZGRpbmdUb3AiLCJwYWRkaW5nUmlnaHQiLCJwYWRkaW5nQm90dG9tIiwicGFkZGluZ0xlZnQiLCJtYXJnaW4iLCJtYXJnaW5Ub3AiLCJtYXJnaW5SaWdodCIsIm1hcmdpbkJvdHRvbSIsIm1hcmdpbkxlZnQiLCJyb3RhdGUiLCJyb3RhdGVYIiwicm90YXRlWSIsInJvdGF0ZVoiLCJzY2FsZVgiLCJzY2FsZVkiLCJzY2FsZVoiLCJza2V3Iiwic2tld1giLCJza2V3WSIsImRpc3RhbmNlIiwidHJhbnNsYXRlWCIsInRyYW5zbGF0ZVkiLCJ0cmFuc2xhdGVaIiwicGVyc3BlY3RpdmUiLCJvcGFjaXR5Iiwib3JpZ2luWCIsIm9yaWdpblkiLCJvcmlnaW5aIiwiekluZGV4IiwiZmlsbE9wYWNpdHkiLCJzdHJva2VPcGFjaXR5IiwibnVtT2N0YXZlcyIsImJ1aWxkSFRNTFN0eWxlcyIsInN0YXRlIiwibGF0ZXN0VmFsdWVzIiwib3B0aW9ucyIsInRyYW5zZm9ybVRlbXBsYXRlIiwic3R5bGUiLCJ2YXJzIiwidHJhbnNmb3JtS2V5cyIsInRyYW5zZm9ybU9yaWdpbiIsImhhc1RyYW5zZm9ybSIsImhhc1RyYW5zZm9ybU9yaWdpbiIsInRyYW5zZm9ybUlzTm9uZSIsInZhbHVlVHlwZSIsInZhbHVlQXNUeXBlIiwidHJhbnNmb3JtSXNEZWZhdWx0IiwiZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb24iLCJhbGxvd1RyYW5zZm9ybU5vbmUiLCJ0cmFuc2Zvcm1TdHJpbmciLCJzb3J0IiwidHJhbnNmb3JtSGFzWiIsIm51bVRyYW5zZm9ybUtleXMiLCJ0cmltIiwiYnVpbGRUcmFuc2Zvcm0iLCJidWlsZFRyYW5zZm9ybU9yaWdpbiIsImNyZWF0ZUh0bWxSZW5kZXJTdGF0ZSIsImNvcHlSYXdWYWx1ZXNPbmx5IiwidGFyZ2V0Iiwic291cmNlIiwidXNlSFRNTFByb3BzIiwiaHRtbFByb3BzIiwidXNlSW5pdGlhbE1vdGlvblZhbHVlcyIsInRyYW5zZm9ybVZhbHVlcyIsInVzZVN0eWxlIiwiZHJhZ0xpc3RlbmVyIiwiZHJhZ2dhYmxlIiwidXNlclNlbGVjdCIsIldlYmtpdFVzZXJTZWxlY3QiLCJXZWJraXRUb3VjaENhbGxvdXQiLCJ0b3VjaEFjdGlvbiIsInZhbGlkTW90aW9uUHJvcHMiLCJpc1ZhbGlkTW90aW9uUHJvcCIsImlzVmFsaWRQcm9wIiwic2hvdWxkRm9yd2FyZCIsImNhbGNPcmlnaW4iLCJvcmlnaW4iLCJvZmZzZXQiLCJkYXNoS2V5cyIsImFycmF5IiwiY2FtZWxLZXlzIiwiYnVpbGRTVkdBdHRycyIsImF0dHJYIiwiYXR0clkiLCJwYXRoTGVuZ3RoIiwicGF0aFNwYWNpbmciLCJwYXRoT2Zmc2V0IiwiYXR0cnMiLCJkaW1lbnNpb25zIiwicHhPcmlnaW5YIiwicHhPcmlnaW5ZIiwiY2FsY1NWR1RyYW5zZm9ybU9yaWdpbiIsInNwYWNpbmciLCJ1c2VEYXNoQ2FzZSIsImJ1aWxkU1ZHUGF0aCIsImNyZWF0ZVN2Z1JlbmRlclN0YXRlIiwidXNlU1ZHUHJvcHMiLCJ2aXN1YWxQcm9wcyIsInJhd1N0eWxlcyIsImNyZWF0ZVVzZVJlbmRlciIsImZvcndhcmRNb3Rpb25Qcm9wcyIsImZpbHRlcmVkUHJvcHMiLCJpc0RvbSIsImZpbHRlclByb3BzIiwiZWxlbWVudFByb3BzIiwiY3JlYXRlRWxlbWVudCIsIkNBTUVMX0NBU0VfUEFUVEVSTiIsImNhbWVsVG9EYXNoIiwic3RyIiwicmVwbGFjZSIsInRvTG93ZXJDYXNlIiwicmVuZGVySFRNTCIsImVsZW1lbnQiLCJzdHlsZVByb3AiLCJnZXRQcm9qZWN0aW9uU3R5bGVzIiwic2V0UHJvcGVydHkiLCJjYW1lbENhc2VBdHRyaWJ1dGVzIiwicmVuZGVyU1ZHIiwicmVuZGVyU3RhdGUiLCJfc3R5bGVQcm9wIiwic2V0QXR0cmlidXRlIiwic2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzIiwibmV3VmFsdWVzIiwidG9VcHBlckNhc2UiLCJpc0FuaW1hdGlvbkNvbnRyb2xzIiwiaXNLZXlmcmFtZXNUYXJnZXQiLCJpc0N1c3RvbVZhbHVlIiwibWl4IiwidG9WYWx1ZSIsInJlc29sdmVGaW5hbFZhbHVlSW5LZXlmcmFtZXMiLCJyZXNvbHZlTW90aW9uVmFsdWUiLCJ1bndyYXBwZWRWYWx1ZSIsIm1ha2VTdGF0ZSIsImNyZWF0ZVJlbmRlclN0YXRlIiwib25Nb3VudCIsIm1ha2VMYXRlc3RWYWx1ZXMiLCJtYWtlVXNlVmlzdWFsU3RhdGUiLCJzY3JhcGVNb3Rpb25WYWx1ZXMiLCJtb3Rpb25WYWx1ZXMiLCJpc0NvbnRyb2xsaW5nVmFyaWFudHMiLCJpc1ZhcmlhbnROb2RlIiwiaW5pdGlhbEFuaW1hdGlvbklzQmxvY2tlZCIsInZhcmlhbnRUb1NldCIsInJlc29sdmVkIiwidHJhbnNpdGlvbkVuZCIsInRyYW5zaXRpb24iLCJ2YWx1ZVRhcmdldCIsIkFuaW1hdGlvblR5cGUiLCJzdmdNb3Rpb25Db25maWciLCJnZXRCQm94IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaHRtbE1vdGlvbkNvbmZpZyIsImFkZERvbUV2ZW50IiwiZXZlbnROYW1lIiwiaGFuZGxlciIsInBhc3NpdmUiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInVzZURvbUV2ZW50IiwiaXNNb3VzZUV2ZW50IiwiZXZlbnQiLCJQb2ludGVyRXZlbnQiLCJwb2ludGVyVHlwZSIsIk1vdXNlRXZlbnQiLCJpc1RvdWNoRXZlbnQiLCJ0b3VjaGVzIiwiZGVmYXVsdFBhZ2VQb2ludCIsInBhZ2VYIiwicGFnZVkiLCJwb2ludEZyb21Ub3VjaCIsInBvaW50VHlwZSIsInBvaW50IiwiY2hhbmdlZFRvdWNoZXMiLCJwb2ludEZyb21Nb3VzZSIsImV4dHJhY3RFdmVudEluZm8iLCJ3cmFwSGFuZGxlciIsInNob3VsZEZpbHRlclByaW1hcnlQb2ludGVyIiwiZXZlbnRIYW5kbGVyIiwibGlzdGVuZXIiLCJidXR0b24iLCJzdXBwb3J0c1BvaW50ZXJFdmVudHMiLCJvbnBvaW50ZXJkb3duIiwic3VwcG9ydHNUb3VjaEV2ZW50cyIsIm9udG91Y2hzdGFydCIsInN1cHBvcnRzTW91c2VFdmVudHMiLCJvbm1vdXNlZG93biIsIm1vdXNlRXZlbnROYW1lcyIsInBvaW50ZXJkb3duIiwicG9pbnRlcm1vdmUiLCJwb2ludGVydXAiLCJwb2ludGVyY2FuY2VsIiwicG9pbnRlcm92ZXIiLCJwb2ludGVyb3V0IiwicG9pbnRlcmVudGVyIiwicG9pbnRlcmxlYXZlIiwidG91Y2hFdmVudE5hbWVzIiwiZ2V0UG9pbnRlckV2ZW50TmFtZSIsImFkZFBvaW50ZXJFdmVudCIsInVzZVBvaW50ZXJFdmVudCIsImNyZWF0ZUxvY2siLCJsb2NrIiwiZ2xvYmFsSG9yaXpvbnRhbExvY2siLCJnbG9iYWxWZXJ0aWNhbExvY2siLCJnZXRHbG9iYWxMb2NrIiwib3Blbkhvcml6b250YWxfMSIsIm9wZW5WZXJ0aWNhbF8xIiwiaXNEcmFnQWN0aXZlIiwib3Blbkdlc3R1cmVMb2NrIiwiY3JlYXRlSG92ZXJFdmVudCIsImlzQWN0aXZlIiwiaW5mbyIsInNldEFjdGl2ZSIsIkhvdmVyIiwiaXNOb2RlT3JDaGlsZCIsInBhcmVudEVsZW1lbnQiLCJjb21iaW5lRnVuY3Rpb25zIiwicGlwZSIsInRyYW5zZm9ybWVycyIsIndhcm5lZCIsIm9ic2VydmVyQ2FsbGJhY2tzIiwiV2Vha01hcCIsIm9ic2VydmVycyIsImZpcmVPYnNlcnZlckNhbGxiYWNrIiwiZW50cnkiLCJmaXJlQWxsT2JzZXJ2ZXJDYWxsYmFja3MiLCJlbnRyaWVzIiwidGhyZXNob2xkTmFtZXMiLCJhbGwiLCJ1c2VJbnRlcnNlY3Rpb25PYnNlcnZlciIsInNob3VsZE9ic2VydmUiLCJyb290Iiwicm9vdE1hcmdpbiIsImFtb3VudCIsIm9uY2UiLCJ0aHJlc2hvbGQiLCJyb290SW50ZXJlc2VjdGlvbk9ic2VydmVyIiwibG9va3VwUm9vdCIsInJvb3RPYnNlcnZlcnMiLCJKU09OIiwic3RyaW5naWZ5IiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJpbml0SW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJvYnNlcnZlIiwidW5vYnNlcnZlIiwib2JzZXJ2ZUludGVyc2VjdGlvbiIsImdldEluc3RhbmNlIiwiaXNJbnRlcnNlY3RpbmciLCJpc0luVmlldyIsImhhc0VudGVyZWRWaWV3IiwiSW5WaWV3Iiwib25WaWV3cG9ydEVudGVyIiwib25WaWV3cG9ydExlYXZlIiwidXNlTWlzc2luZ0ludGVyc2VjdGlvbk9ic2VydmVyIiwiZmFsbGJhY2siLCJtZXNzYWdlIiwibWFrZVJlbmRlcmxlc3NDb21wb25lbnQiLCJob29rIiwiZ2VzdHVyZUFuaW1hdGlvbnMiLCJ3aGlsZUluVmlldyIsInZpZXdwb3J0Iiwib25UYXAiLCJvblRhcFN0YXJ0Iiwib25UYXBDYW5jZWwiLCJoYXNQcmVzc0xpc3RlbmVycyIsImlzUHJlc3NpbmciLCJjYW5jZWxQb2ludGVyRW5kTGlzdGVuZXJzIiwiZXZlbnRPcHRpb25zIiwib25Qb2ludGVyRG93biIsInJlbW92ZVBvaW50ZXJFbmRMaXN0ZW5lciIsImNoZWNrUG9pbnRlckVuZCIsIlRhcCIsIm9uUG9pbnRlclVwIiwib25Qb2ludGVyQ2FuY2VsIiwiRm9jdXMiLCJvbkhvdmVyU3RhcnQiLCJvbkhvdmVyRW5kIiwidXNlUHJlc2VuY2UiLCJzaGFsbG93Q29tcGFyZSIsInByZXYiLCJwcmV2TGVuZ3RoIiwic2FmZU1pbiIsIm1pbkR1cmF0aW9uIiwibWF4RHVyYXRpb24iLCJtaW5EYW1waW5nIiwibWF4RGFtcGluZyIsInJvb3RJdGVyYXRpb25zIiwiY2FsY0FuZ3VsYXJGcmVxIiwidW5kYW1wZWRGcmVxIiwiZGFtcGluZ1JhdGlvIiwic3FydCIsImR1cmF0aW9uS2V5cyIsInBoeXNpY3NLZXlzIiwiaXNTcHJpbmdUeXBlIiwic3ByaW5nIiwicmVzdFNwZWVkIiwicmVzdERlbHRhIiwic3RpZmZuZXNzIiwiZGFtcGluZyIsIm1hc3MiLCJkdXJhdGlvbiIsImlzUmVzb2x2ZWRGcm9tRHVyYXRpb24iLCJzcHJpbmdPcHRpb25zIiwiZGVyaXZlZCIsImJvdW5jZSIsImVudmVsb3BlIiwiZGVyaXZhdGl2ZSIsImV4cG9uZW50aWFsRGVjYXkiLCJjIiwiZXhwIiwicG93IiwiZiIsImciLCJpbml0aWFsR3Vlc3MiLCJyZXN1bHQiLCJhcHByb3hpbWF0ZVJvb3QiLCJpc05hTiIsImZpbmRTcHJpbmciLCJnZXRTcHJpbmdPcHRpb25zIiwicmVzb2x2ZVNwcmluZyIsInplcm8iLCJyZXNvbHZlVmVsb2NpdHkiLCJjcmVhdGVTcHJpbmciLCJpbml0aWFsVmVsb2NpdHkiLCJpbml0aWFsRGVsdGEiLCJ1bmRhbXBlZEFuZ3VsYXJGcmVxIiwiYWJzIiwiYW5ndWxhckZyZXEiLCJzaW4iLCJjb3MiLCJkYW1wZWRBbmd1bGFyRnJlcSIsImZyZXFGb3JUIiwic2luaCIsImNvc2giLCJpc0JlbG93VmVsb2NpdHlUaHJlc2hvbGQiLCJpc0JlbG93RGlzcGxhY2VtZW50VGhyZXNob2xkIiwiZmxpcFRhcmdldCIsIm5lZWRzSW50ZXJwb2xhdGlvbiIsIl90IiwicHJvZ3Jlc3MiLCJ0b0Zyb21EaWZmZXJlbmNlIiwiaXNDb2xvclN0cmluZyIsInRlc3RQcm9wIiwic3BsaXRDb2xvciIsImFOYW1lIiwiYk5hbWUiLCJjTmFtZSIsIm1hdGNoIiwiY2xhbXBSZ2JVbml0IiwicmdiVW5pdCIsInJnYmEiLCJyZWQiLCJncmVlbiIsImJsdWUiLCJhbHBoYSQxIiwiaGV4Iiwic3Vic3RyIiwicGFyc2VJbnQiLCJoc2xhIiwiaHVlIiwic2F0dXJhdGlvbiIsImxpZ2h0bmVzcyIsImh1ZVRvUmdiIiwicSIsImhzbGFUb1JnYmEiLCJtaXhMaW5lYXJDb2xvciIsImZyb21FeHBvIiwidG9FeHBvIiwiY29sb3JUeXBlcyIsImdldENvbG9yVHlwZSIsImZpbmQiLCJub3RBbmltYXRhYmxlIiwiY29sb3IiLCJtaXhDb2xvciIsImZyb21Db2xvclR5cGUiLCJ0b0NvbG9yVHlwZSIsImZyb21Db2xvciIsInRvQ29sb3IiLCJibGVuZGVkIiwiY29sb3JUb2tlbiIsIm51bWJlclRva2VuIiwiYW5hbHlzZSIsIm51bUNvbG9ycyIsImNvbG9ycyIsIm51bWJlcnMiLCJ0b2tlbmlzZWQiLCJjcmVhdGVUcmFuc2Zvcm1lciIsIm51bVZhbHVlcyIsIm91dHB1dCIsImNvbnZlcnROdW1iZXJzVG9aZXJvIiwiY29tcGxleCIsImdldEFuaW1hdGFibGVOb25lIiwicGFyc2VkIiwidHJhbnNmb3JtZXIiLCJpc051bSIsImdldE1peGVyIiwibWl4Q29tcGxleCIsIm1peEFycmF5IiwiYmxlbmRWYWx1ZSIsImZyb21UaGlzIiwibWl4T2JqZWN0IiwibnVtTnVtYmVycyIsIm51bVJHQiIsIm51bUhTTCIsInRlbXBsYXRlIiwib3JpZ2luU3RhdHMiLCJ0YXJnZXRTdGF0cyIsIm1peE51bWJlciIsImludGVycG9sYXRlIiwiaW5wdXQiLCJpc0NsYW1wIiwiZWFzZSIsIm1peGVyIiwiaW5wdXRMZW5ndGgiLCJyZXZlcnNlIiwibWl4ZXJzIiwiY3VzdG9tTWl4ZXIiLCJtaXhlckZhY3RvcnkiLCJudW1NaXhlcnMiLCJlYXNpbmdGdW5jdGlvbiIsImNyZWF0ZU1peGVycyIsImludGVycG9sYXRvciIsImZhc3RJbnRlcnBvbGF0ZSIsImxhc3RJbnB1dEluZGV4IiwibWl4ZXJJbmRleCIsImZvdW5kTWl4ZXJJbmRleCIsInByb2dyZXNzSW5SYW5nZSIsInNsb3dJbnRlcnBvbGF0ZSIsInJldmVyc2VFYXNpbmciLCJlYXNpbmciLCJtaXJyb3JFYXNpbmciLCJjcmVhdGVCYWNrSW4iLCJwb3dlciIsImxpbmVhciIsImVhc2VJbiIsImVhc2VPdXQiLCJlYXNlSW5PdXQiLCJjaXJjSW4iLCJhY29zIiwiY2lyY091dCIsImNpcmNJbk91dCIsImJhY2tJbiIsImJhY2tPdXQiLCJiYWNrSW5PdXQiLCJhbnRpY2lwYXRlIiwiYmFja0Vhc2luZyIsImNyZWF0ZUFudGljaXBhdGUiLCJib3VuY2VPdXQiLCJwMiIsImJvdW5jZUluIiwiZGVmYXVsdEVhc2luZyIsImtleWZyYW1lcyIsInRpbWVzIiwiY29udmVydE9mZnNldFRvVGltZXMiLCJfdmFsdWUiLCJkZWZhdWx0T2Zmc2V0IiwiY3JlYXRlSW50ZXJwb2xhdG9yIiwidHlwZXMiLCJ0aW1lQ29uc3RhbnQiLCJtb2RpZnlUYXJnZXQiLCJhbXBsaXR1ZGUiLCJpZGVhbCIsImxvb3BFbGFwc2VkIiwiZWxhcHNlZCIsImRlbGF5IiwiZnJhbWVzeW5jIiwidXBkYXRlIiwicGFzc1RpbWVzdGFtcCIsInN0b3AiLCJhdXRvcGxheSIsImRyaXZlciIsInJlcGVhdCIsInJlcGVhdE1heCIsInJlcGVhdFR5cGUiLCJyZXBlYXREZWxheSIsIm9uUGxheSIsIm9uU3RvcCIsIm9uQ29tcGxldGUiLCJvblJlcGVhdCIsIm9uVXBkYXRlIiwiZHJpdmVyQ29udHJvbHMiLCJsYXRlc3QiLCJpbnRlcnBvbGF0ZUZyb21OdW1iZXIiLCJyZXBlYXRDb3VudCIsImNvbXB1dGVkRHVyYXRpb24iLCJpc0NvbXBsZXRlIiwiaXNGb3J3YXJkUGxheWJhY2siLCJhbmltYXRvciIsImRldGVjdEFuaW1hdGlvbkZyb21PcHRpb25zIiwiaGFzUmVwZWF0RGVsYXlFbGFwc2VkIiwicmV2ZXJzZUVsYXBzZWQiLCJ2ZWxvY2l0eVBlclNlY29uZCIsImZyYW1lRHVyYXRpb24iLCJzZWNvbmRzVG9NaWxsaXNlY29uZHMiLCJzZWNvbmRzIiwiYTEiLCJhMiIsImNhbGNCZXppZXIiLCJnZXRTbG9wZSIsInN1YmRpdmlzaW9uUHJlY2lzaW9uIiwic3ViZGl2aXNpb25NYXhJdGVyYXRpb25zIiwibmV3dG9uSXRlcmF0aW9ucyIsIm5ld3Rvbk1pblNsb3BlIiwia1NwbGluZVRhYmxlU2l6ZSIsImtTYW1wbGVTdGVwU2l6ZSIsImN1YmljQmV6aWVyIiwibVgxIiwibVkxIiwibVgyIiwibVkyIiwic2FtcGxlVmFsdWVzIiwiRmxvYXQzMkFycmF5IiwiYVgiLCJpbnRlcnZhbFN0YXJ0IiwiY3VycmVudFNhbXBsZSIsImxhc3RTYW1wbGUiLCJndWVzc0ZvclQiLCJpbml0aWFsU2xvcGUiLCJhR3Vlc3NUIiwiY3VycmVudFNsb3BlIiwibmV3dG9uUmFwaHNvbkl0ZXJhdGUiLCJhQSIsImFCIiwiY3VycmVudFgiLCJjdXJyZW50VCIsImJpbmFyeVN1YmRpdmlkZSIsImdldFRGb3JYIiwiZWFzaW5nTG9va3VwIiwiYm91bmNlSW5PdXQiLCJlYXNpbmdEZWZpbml0aW9uVG9GdW5jdGlvbiIsImlzRWFzaW5nQXJyYXkiLCJpc0FuaW1hdGFibGUiLCJ1bmRlckRhbXBlZFNwcmluZyIsImNyaXRpY2FsbHlEYW1wZWRTcHJpbmciLCJsaW5lYXJUd2VlbiIsImRlZmF1bHRUcmFuc2l0aW9ucyIsImJhY2tncm91bmRDb2xvciIsImdldERlZmF1bHRUcmFuc2l0aW9uIiwidmFsdWVLZXkiLCJ0cmFuc2l0aW9uRmFjdG9yeSIsIm1heERlZmF1bHRzIiwiYXBwbHlEZWZhdWx0RmlsdGVyIiwiZGVmYXVsdFZhbHVlIiwiZnVuY3Rpb25SZWdleCIsImZpbHRlciIsImZ1bmN0aW9ucyIsImRlZmF1bHRWYWx1ZVR5cGVzIiwib3V0bGluZUNvbG9yIiwiZmlsbCIsInN0cm9rZSIsImJvcmRlckNvbG9yIiwiYm9yZGVyVG9wQ29sb3IiLCJib3JkZXJSaWdodENvbG9yIiwiYm9yZGVyQm90dG9tQ29sb3IiLCJib3JkZXJMZWZ0Q29sb3IiLCJXZWJraXRGaWx0ZXIiLCJnZXREZWZhdWx0VmFsdWVUeXBlIiwiZGVmYXVsdFZhbHVlVHlwZSIsImluc3RhbnRBbmltYXRpb25TdGF0ZSIsImxlZ2FjeVJlcGVhdFdhcm5pbmciLCJnZXRBbmltYXRpb24iLCJ2YWx1ZVRyYW5zaXRpb24iLCJnZXRWYWx1ZVRyYW5zaXRpb24iLCJpc1RhcmdldEFuaW1hdGFibGUiLCJpc1plcm8iLCJnZXRaZXJvVW5pdCIsImlzT3JpZ2luQW5pbWF0YWJsZSIsImJvdW5jZVN0aWZmbmVzcyIsImJvdW5jZURhbXBpbmciLCJjdXJyZW50QW5pbWF0aW9uIiwiaXNPdXRPZkJvdW5kcyIsImJvdW5kYXJ5TmVhcmVzdCIsInN0YXJ0QW5pbWF0aW9uIiwic3RhcnRTcHJpbmciLCJib3VuZGFyeSIsImhlYWRpbmciLCJjaGVja0JvdW5kYXJ5IiwiaW5lcnRpYSIsImh5ZHJhdGVLZXlmcmFtZXMiLCJ3aGVuIiwiZGVsYXlDaGlsZHJlbiIsInN0YWdnZXJDaGlsZHJlbiIsInN0YWdnZXJEaXJlY3Rpb24iLCJpc1RyYW5zaXRpb25EZWZpbmVkIiwieW95byIsImZsaXAiLCJsb29wIiwiY29udmVydFRyYW5zaXRpb25Ub0FuaW1hdGlvbk9wdGlvbnMiLCJnZXRQb3Btb3Rpb25BbmltYXRpb25PcHRpb25zIiwiZmluYWxUYXJnZXQiLCJwb3RlbnRpYWxVbml0VHlwZSIsImRlbGF5VGltZXIiLCJjb250cm9scyIsImdldERlbGF5RnJvbVRyYW5zaXRpb24iLCJjbGVhclRpbWVvdXQiLCJpc1plcm9WYWx1ZVN0cmluZyIsImFkZFVuaXF1ZUl0ZW0iLCJhcnIiLCJpdGVtIiwicmVtb3ZlSXRlbSIsIlN1YnNjcmlwdGlvbk1hbmFnZXIiLCJzdWJzY3JpcHRpb25zIiwiX3RoaXMiLCJub3RpZnkiLCJudW1TdWJzY3JpcHRpb25zIiwiZ2V0U2l6ZSIsImlzRmxvYXQiLCJNb3Rpb25WYWx1ZSIsInZlcnNpb24iLCJ0aW1lRGVsdGEiLCJsYXN0VXBkYXRlZCIsInVwZGF0ZVN1YnNjcmliZXJzIiwidmVsb2NpdHlVcGRhdGVTdWJzY3JpYmVycyIsInJlbmRlclN1YnNjcmliZXJzIiwiY2FuVHJhY2tWZWxvY2l0eSIsInVwZGF0ZUFuZE5vdGlmeSIsInNjaGVkdWxlVmVsb2NpdHlDaGVjayIsInZlbG9jaXR5Q2hlY2siLCJoYXNBbmltYXRlZCIsIm9uQ2hhbmdlIiwic3Vic2NyaXB0aW9uIiwiY2xlYXJMaXN0ZW5lcnMiLCJvblJlbmRlclJlcXVlc3QiLCJhdHRhY2giLCJwYXNzaXZlRWZmZWN0IiwiZ2V0UHJldmlvdXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInN0b3BBbmltYXRpb24iLCJ0aGVuIiwiY2xlYXJBbmltYXRpb24iLCJpc0FuaW1hdGluZyIsImRlc3Ryb3kiLCJtb3Rpb25WYWx1ZSIsInRlc3RWYWx1ZVR5cGUiLCJkaW1lbnNpb25WYWx1ZVR5cGVzIiwiZmluZERpbWVuc2lvblZhbHVlVHlwZSIsInZhbHVlVHlwZXMiLCJmaW5kVmFsdWVUeXBlIiwic2V0TW90aW9uVmFsdWUiLCJoYXNWYWx1ZSIsImdldFZhbHVlIiwiYWRkVmFsdWUiLCJnZXRPcmlnaW5Gcm9tVHJhbnNpdGlvbiIsImFuaW1hdGVWYXJpYW50IiwidmFyaWFudCIsInRyYW5zaXRpb25PdmVycmlkZSIsImFuaW1hdGVUYXJnZXQiLCJnZXRDaGlsZEFuaW1hdGlvbnMiLCJ2YXJpYW50Q2hpbGRyZW4iLCJmb3J3YXJkRGVsYXkiLCJhbmltYXRpb25zIiwibWF4U3RhZ2dlckR1cmF0aW9uIiwiZ2VuZXJhdGVTdGFnZ2VyRHVyYXRpb24iLCJzb3J0QnlUcmVlT3JkZXIiLCJub3RpZnlBbmltYXRpb25Db21wbGV0ZSIsImFuaW1hdGVDaGlsZHJlbiIsImZpcnN0IiwibGFzdCIsIl9lIiwibWFrZVRhcmdldEFuaW1hdGFibGUiLCJfZiIsImFuaW1hdGlvblR5cGVTdGF0ZSIsImdldFN0YXRlIiwic2hvdWxkQmxvY2tBbmltYXRpb24iLCJzZXRUYXJnZXQiLCJzb3J0Tm9kZVBvc2l0aW9uIiwicHJvdGVjdGVkS2V5cyIsIm5lZWRzQW5pbWF0aW5nIiwic2hvdWxkQmxvY2siLCJ2YXJpYW50UHJpb3JpdHlPcmRlciIsIkFuaW1hdGUiLCJEcmFnIiwiRXhpdCIsInJldmVyc2VQcmlvcml0eU9yZGVyIiwibnVtQW5pbWF0aW9uVHlwZXMiLCJjcmVhdGVBbmltYXRpb25TdGF0ZSIsIm5vdGlmeUFuaW1hdGlvblN0YXJ0IiwicmVzb2x2ZWREZWZpbml0aW9uIiwiYW5pbWF0ZVZpc3VhbEVsZW1lbnQiLCJhbmltYXRlTGlzdCIsImNyZWF0ZVR5cGVTdGF0ZSIsImFsbEFuaW1hdGVkS2V5cyIsImJ1aWxkUmVzb2x2ZWRUeXBlVmFsdWVzIiwiY2hhbmdlZEFjdGl2ZVR5cGUiLCJnZXRWYXJpYW50Q29udGV4dCIsInJlbW92ZWRLZXlzIiwiZW5jb3VudGVyZWRLZXlzIiwicmVtb3ZlZFZhcmlhbnRJbmRleCIsIkluZmluaXR5IiwiX2xvb3BfMSIsInR5cGVTdGF0ZSIsInByb3BJc1ZhcmlhbnQiLCJhY3RpdmVEZWx0YSIsImlzSW5oZXJpdGVkIiwibWFudWFsbHlBbmltYXRlT25Nb3VudCIsInByZXZQcm9wIiwidmFyaWFudERpZENoYW5nZSIsImNoZWNrVmFyaWFudHNEaWRDaGFuZ2UiLCJzaG91bGRBbmltYXRlVHlwZSIsImRlZmluaXRpb25MaXN0IiwicmVzb2x2ZWRWYWx1ZXMiLCJwcmV2UmVzb2x2ZWRWYWx1ZXMiLCJhbGxLZXlzIiwibWFya1RvQW5pbWF0ZSIsImZhbGxiYWNrQW5pbWF0aW9uXzEiLCJmYWxsYmFja1RhcmdldCIsImdldEJhc2VUYXJnZXQiLCJzaG91bGRBbmltYXRlIiwiaXNBbmltYXRlZCIsInNldEFuaW1hdGVGdW5jdGlvbiIsIm1ha2VBbmltYXRvciIsInN1YnNjcmliZSIsInNhZmVUb1JlbW92ZSIsImlzUG9pbnQiLCJpc1BvaW50M0QiLCJkaXN0YW5jZTFEIiwieERlbHRhIiwieURlbHRhIiwiekRlbHRhIiwiUGFuU2Vzc2lvbiIsImhhbmRsZXJzIiwic3RhcnRFdmVudCIsImxhc3RNb3ZlRXZlbnQiLCJsYXN0TW92ZUV2ZW50SW5mbyIsInVwZGF0ZVBvaW50IiwiZ2V0UGFuSW5mbyIsImhpc3RvcnkiLCJpc1BhblN0YXJ0ZWQiLCJpc0Rpc3RhbmNlUGFzdFRocmVzaG9sZCIsIm9uU3RhcnQiLCJvbk1vdmUiLCJoYW5kbGVQb2ludGVyTW92ZSIsInRyYW5zZm9ybVBvaW50IiwiYnV0dG9ucyIsImhhbmRsZVBvaW50ZXJVcCIsImVuZCIsIm9uRW5kIiwib25TZXNzaW9uRW5kIiwicGFuSW5mbyIsImluaXRpYWxJbmZvIiwib25TZXNzaW9uU3RhcnQiLCJyZW1vdmVMaXN0ZW5lcnMiLCJ1cGRhdGVIYW5kbGVycyIsInN1YnRyYWN0UG9pbnQiLCJsYXN0RGV2aWNlUG9pbnQiLCJzdGFydERldmljZVBvaW50IiwidGltZXN0YW1wZWRQb2ludCIsImxhc3RQb2ludCIsInRpbWUiLCJjYWxjTGVuZ3RoIiwiYXhpcyIsImlzTmVhciIsIm1heERpc3RhbmNlIiwiY2FsY0F4aXNEZWx0YSIsIm9yaWdpblBvaW50IiwidHJhbnNsYXRlIiwiY2FsY0JveERlbHRhIiwiY2FsY1JlbGF0aXZlQXhpcyIsInJlbGF0aXZlIiwiY2FsY1JlbGF0aXZlQXhpc1Bvc2l0aW9uIiwiY2FsY1JlbGF0aXZlUG9zaXRpb24iLCJjYWxjUmVsYXRpdmVBeGlzQ29uc3RyYWludHMiLCJjYWxjVmlld3BvcnRBeGlzQ29uc3RyYWludHMiLCJsYXlvdXRBeGlzIiwiY29uc3RyYWludHNBeGlzIiwiZGVmYXVsdEVsYXN0aWMiLCJyZXNvbHZlQXhpc0VsYXN0aWMiLCJkcmFnRWxhc3RpYyIsIm1pbkxhYmVsIiwibWF4TGFiZWwiLCJyZXNvbHZlUG9pbnRFbGFzdGljIiwibGFiZWwiLCJjcmVhdGVEZWx0YSIsImNyZWF0ZUJveCIsImVhY2hBeGlzIiwiY29udmVydEJvdW5kaW5nQm94VG9Cb3giLCJpc0lkZW50aXR5U2NhbGUiLCJoYXNTY2FsZSIsImhhc1RyYW5zbGF0ZSIsInNjYWxlUG9pbnQiLCJhcHBseVBvaW50RGVsdGEiLCJib3hTY2FsZSIsImFwcGx5QXhpc0RlbHRhIiwiYXBwbHlCb3hEZWx0YSIsImJveCIsInRyYW5zbGF0ZUF4aXMiLCJ0cmFuc2Zvcm1BeGlzIiwidHJhbnNmb3JtcyIsInNjYWxlS2V5Iiwib3JpZ2luS2V5IiwiYXhpc09yaWdpbiIsInhLZXlzIiwieUtleXMiLCJ0cmFuc2Zvcm1Cb3giLCJtZWFzdXJlVmlld3BvcnRCb3giLCJ0b3BMZWZ0IiwiYm90dG9tUmlnaHQiLCJ0cmFuc2Zvcm1Cb3hQb2ludHMiLCJlbGVtZW50RHJhZ0NvbnRyb2xzIiwiVmlzdWFsRWxlbWVudERyYWdDb250cm9scyIsIm9wZW5HbG9iYWxMb2NrIiwiaXNEcmFnZ2luZyIsImN1cnJlbnREaXJlY3Rpb24iLCJjb25zdHJhaW50cyIsImhhc011dGF0ZWRDb25zdHJhaW50cyIsImVsYXN0aWMiLCJvcmlnaW5FdmVudCIsInNuYXBUb0N1cnNvciIsInBhblNlc3Npb24iLCJkcmFnUHJvcGFnYXRpb24iLCJvbkRyYWdTdGFydCIsInJlc29sdmVDb25zdHJhaW50cyIsImlzQW5pbWF0aW9uQmxvY2tlZCIsImdldEF4aXNNb3Rpb25WYWx1ZSIsIm1lYXN1cmVkQXhpcyIsImFjdHVhbCIsImRyYWdEaXJlY3Rpb25Mb2NrIiwib25EaXJlY3Rpb25Mb2NrIiwib25EcmFnIiwibG9ja1RocmVzaG9sZCIsImRpcmVjdGlvbiIsImdldEN1cnJlbnREaXJlY3Rpb24iLCJ1cGRhdGVBeGlzIiwiZ2V0VHJhbnNmb3JtUGFnZVBvaW50Iiwib25EcmFnRW5kIiwiX3BvaW50Iiwic2hvdWxkRHJhZyIsImF4aXNWYWx1ZSIsInByZXZDb25zdHJhaW50cyIsInJlc29sdmVSZWZDb25zdHJhaW50cyIsImxheW91dEJveCIsImNhbGNSZWxhdGl2ZUNvbnN0cmFpbnRzIiwicmVzb2x2ZURyYWdFbGFzdGljIiwicmVsYXRpdmVDb25zdHJhaW50cyIsInJlYmFzZUF4aXNDb25zdHJhaW50cyIsIm9uTWVhc3VyZURyYWdDb25zdHJhaW50cyIsImNvbnN0cmFpbnRzRWxlbWVudCIsImNvbnN0cmFpbnRzQm94Iiwicm9vdFByb2plY3Rpb25Ob2RlIiwidmlld3BvcnRCb3giLCJzY3JvbGwiLCJtZWFzdXJlUGFnZUJveCIsIm1lYXN1cmVkQ29uc3RyYWludHMiLCJjYWxjVmlld3BvcnRDb25zdHJhaW50cyIsInVzZXJDb25zdHJhaW50cyIsImNvbnZlcnRCb3hUb0JvdW5kaW5nQm94IiwiZHJhZ01vbWVudHVtIiwiZHJhZ1RyYW5zaXRpb24iLCJkcmFnU25hcFRvT3JpZ2luIiwib25EcmFnVHJhbnNpdGlvbkVuZCIsIm1vbWVudHVtQW5pbWF0aW9ucyIsInN0YXJ0QXhpc1ZhbHVlQW5pbWF0aW9uIiwiZHJhZ0tleSIsInNjYWxlUG9zaXRpb25XaXRoaW5Db25zdHJhaW50cyIsImJveFByb2dyZXNzIiwic291cmNlTGVuZ3RoIiwidGFyZ2V0TGVuZ3RoIiwidXBkYXRlU2Nyb2xsIiwidXBkYXRlTGF5b3V0IiwiYWRkTGlzdGVuZXJzIiwic3RvcFBvaW50ZXJMaXN0ZW5lciIsIm1lYXN1cmVEcmFnQ29uc3RyYWludHMiLCJzdG9wTWVhc3VyZUxheW91dExpc3RlbmVyIiwic3RvcFJlc2l6ZUxpc3RlbmVyIiwiaGFzTGF5b3V0Q2hhbmdlZCIsIm9uUGFuIiwib25QYW5TdGFydCIsIm9uUGFuRW5kIiwib25QYW5TZXNzaW9uU3RhcnQiLCJoYXNQYW5FdmVudHMiLCJncm91cERyYWdDb250cm9scyIsImRyYWdDb250cm9scyIsIm5hbWVzIiwidHJlZVR5cGUiLCJidWlsZCIsInJlbmRlckluc3RhbmNlIiwicmVhZFZhbHVlRnJvbUluc3RhbmNlIiwicmVtb3ZlVmFsdWVGcm9tUmVuZGVyU3RhdGUiLCJyZW1vdmVGcm9tVmFyaWFudFRyZWUiLCJsaWZlY3ljbGVzIiwibWFuYWdlcnMiLCJwcm9wU3Vic2NyaXB0aW9ucyIsImNsZWFyQWxsTGlzdGVuZXJzIiwibWFuYWdlciIsInVwZGF0ZVByb3BMaXN0ZW5lcnMiLCJvbiIsInByb3BMaXN0ZW5lciIsImFyZ3MiLCJfaSIsImNyZWF0ZUxpZmVjeWNsZXMiLCJ2YWx1ZVN1YnNjcmlwdGlvbnMiLCJwcmV2TW90aW9uVmFsdWVzIiwiYmFzZVRhcmdldCIsInRyaWdnZXJCdWlsZCIsIm5vdGlmeVVwZGF0ZSIsImJpbmRUb01vdGlvblZhbHVlIiwicmVtb3ZlT25DaGFuZ2UiLCJsYXRlc3RWYWx1ZSIsInJlbW92ZU9uUmVuZGVyUmVxdWVzdCIsImluaXRpYWxNb3Rpb25WYWx1ZXMiLCJkZXB0aCIsImlzVmlzaWJsZSIsIm5ld0luc3RhbmNlIiwiYWRkVmFyaWFudENoaWxkIiwicmVtb3ZlIiwiY2xvc2VzdFZhcmlhbnROb2RlIiwiZ2V0Q2xvc2VzdFZhcmlhbnROb2RlIiwib3RoZXIiLCJnZXRMYXlvdXRJZCIsImdldFN0YXRpY1ZhbHVlIiwic2V0U3RhdGljVmFsdWUiLCJzZXRWaXNpYmlsaXR5IiwidmlzaWJpbGl0eSIsImNhbk11dGF0ZSIsInJlbW92ZVZhbHVlIiwicmVhZFZhbHVlIiwic2V0QmFzZVRhcmdldCIsIm5ld1Byb3BzIiwibmV4dFZhbHVlIiwicHJldlZhbHVlIiwiZXhpc3RpbmdWYWx1ZSIsInVwZGF0ZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyIsImdldFZhcmlhbnQiLCJzdGFydEF0UGFyZW50IiwiY29udGV4dF8xIiwibnVtVmFyaWFudFByb3BzIiwidmFyaWFudFByb3BzIiwiY3NzVmFyaWFibGVSZWdleCIsIm1heERlcHRoIiwiZ2V0VmFyaWFibGVWYWx1ZSIsImV4ZWMiLCJwYXJzZUNTU1ZhcmlhYmxlIiwidG9rZW4iLCJnZXRDb21wdXRlZFN0eWxlIiwiZ2V0UHJvcGVydHlWYWx1ZSIsIkJvdW5kaW5nQm94RGltZW5zaW9uIiwicG9zaXRpb25hbEtleXMiLCJpc1Bvc2l0aW9uYWxLZXkiLCJzZXRBbmRSZXNldFZlbG9jaXR5IiwiaXNOdW1PclB4VHlwZSIsImdldFBvc0Zyb21NYXRyaXgiLCJtYXRyaXgiLCJwb3MiLCJnZXRUcmFuc2xhdGVGcm9tTWF0cml4IiwicG9zMiIsInBvczMiLCJfYmJveCIsIm1hdHJpeDNkIiwibm9uVHJhbnNsYXRpb25hbFRyYW5zZm9ybUtleXMiLCJwb3NpdGlvbmFsVmFsdWVzIiwicGFyc2VEb21WYXJpYW50IiwiRWxlbWVudCIsInJlc29sdmVDU1NWYXJpYWJsZXMiLCJoYXNQb3NpdGlvbmFsS2V5IiwidGFyZ2V0UG9zaXRpb25hbEtleXMiLCJyZW1vdmVkVHJhbnNmb3JtVmFsdWVzIiwiaGFzQXR0ZW1wdGVkVG9SZW1vdmVUcmFuc2Zvcm1WYWx1ZXMiLCJjaGFuZ2VkVmFsdWVUeXBlS2V5cyIsInRvVHlwZSIsImZyb21UeXBlIiwibnVtS2V5ZnJhbWVzIiwiZnJvbUluZGV4IiwicmVtb3ZlZFRyYW5zZm9ybXMiLCJyZW1vdmVOb25UcmFuc2xhdGlvbmFsVHJhbnNmb3JtIiwic2Nyb2xsWV8xIiwicGFnZVlPZmZzZXQiLCJjb252ZXJ0ZWRUYXJnZXQiLCJjaGFuZ2VkS2V5cyIsIm9yaWdpbkJib3giLCJlbGVtZW50Q29tcHV0ZWRTdHlsZSIsImRpc3BsYXkiLCJ0YXJnZXRCYm94IiwiY29udmVydENoYW5nZWRWYWx1ZVR5cGVzIiwic2Nyb2xsVG8iLCJjaGVja0FuZENvbnZlcnRDaGFuZ2VkVmFsdWVUeXBlcyIsInVuaXRDb252ZXJzaW9uIiwiaHRtbENvbmZpZyIsImRvbUVsZW1lbnQiLCJkZWZhdWx0VHlwZSIsImNvbXB1dGVkU3R5bGUiLCJjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiIsInJlc2V0VHJhbnNmb3JtIiwicmVzdG9yZVRyYW5zZm9ybSIsIm11dGFibGVTdGF0ZSIsImdldE9yaWdpbiIsIm5ld1ZhbHVlS2V5cyIsIm51bU5ld1ZhbHVlcyIsInRhcmdldFZhbHVlIiwiY2hlY2tUYXJnZXRGb3JOZXdWYWx1ZXMiLCJodG1sVmlzdWFsRWxlbWVudCIsInN2Z1Zpc3VhbEVsZW1lbnQiLCJnZXRBdHRyaWJ1dGUiLCJfZWxlbWVudCIsInBpeGVsc1RvUGVyY2VudCIsInBpeGVscyIsImNvcnJlY3RCb3JkZXJSYWRpdXMiLCJjb3JyZWN0Iiwibm9kZSIsInZhclRva2VuIiwiY29ycmVjdEJveFNoYWRvdyIsInRyZWVTY2FsZSIsInByb2plY3Rpb25EZWx0YSIsIm9yaWdpbmFsIiwiY29udGFpbnNDU1NWYXJpYWJsZXMiLCJjc3NWYXJpYWJsZXMiLCJzaGFkb3ciLCJ4U2NhbGUiLCJ5U2NhbGUiLCJhdmVyYWdlU2NhbGUiLCJpXzEiLCJjc3NWYXJpYWJsZSIsIk1lYXN1cmVMYXlvdXRXaXRoQ29udGV4dCIsImNvbXBvbmVudERpZE1vdW50IiwiY29ycmVjdG9ycyIsImxheW91dEdyb3VwIiwic3dpdGNoTGF5b3V0R3JvdXAiLCJkZWZhdWx0U2NhbGVDb3JyZWN0b3JzIiwiZ3JvdXAiLCJkaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJsYXlvdXREZXBlbmRlbmN5Iiwid2lsbFVwZGF0ZSIsInByb21vdGUiLCJyZWxlZ2F0ZSIsImdldFN0YWNrIiwibWVtYmVycyIsImlzTGVhZCIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicHJvbW90ZUNvbnRleHQiLCJzY2hlZHVsZUNoZWNrQWZ0ZXJVbm1vdW50IiwiZGVyZWdpc3RlciIsImFwcGx5VG8iLCJib3hTaGFkb3ciLCJsYXlvdXRGZWF0dXJlcyIsImJvcmRlcnMiLCJudW1Cb3JkZXJzIiwiYXNOdW1iZXIiLCJpc1B4IiwiZ2V0UmFkaXVzIiwicmFkaXVzTmFtZSIsImVhc2VDcm9zc2ZhZGVJbiIsImNvbXByZXNzIiwiZWFzZUNyb3NzZmFkZU91dCIsImNvcHlBeGlzSW50byIsIm9yaWdpbkF4aXMiLCJjb3B5Qm94SW50byIsIm9yaWdpbkJveCIsInJlbW92ZVBvaW50RGVsdGEiLCJyZW1vdmVBeGlzVHJhbnNmb3JtcyIsInNvdXJjZUF4aXMiLCJyZW1vdmVBeGlzRGVsdGEiLCJyZW1vdmVCb3hUcmFuc2Zvcm1zIiwic291cmNlQm94IiwiaXNBeGlzRGVsdGFaZXJvIiwiaXNEZWx0YVplcm8iLCJib3hFcXVhbHMiLCJOb2RlU3RhY2siLCJwcmV2TGVhZCIsImxlYWQiLCJpbmRleE9mTm9kZSIsIm1lbWJlciIsInByZXNlcnZlRm9sbG93T3BhY2l0eSIsInNob3ciLCJyZXN1bWVGcm9tIiwicHJlc2VydmVPcGFjaXR5Iiwic25hcHNob3QiLCJhbmltYXRpb25WYWx1ZXMiLCJpc1NoYXJlZCIsImlzVXBkYXRpbmciLCJpc0xheW91dERpcnR5IiwiY3Jvc3NmYWRlIiwiaGlkZSIsImV4aXRBbmltYXRpb25Db21wbGV0ZSIsInJlc3VtaW5nRnJvbSIsInJlbW92ZUxlYWRTbmFwc2hvdCIsImlkZW50aXR5UHJvamVjdGlvbiIsImJ1aWxkUHJvamVjdGlvblRyYW5zZm9ybSIsImxhdGVzdFRyYW5zZm9ybSIsInhUcmFuc2xhdGUiLCJ5VHJhbnNsYXRlIiwiZWxlbWVudFNjYWxlWCIsImVsZW1lbnRTY2FsZVkiLCJjb21wYXJlQnlEZXB0aCIsIkZsYXRUcmVlIiwiaXNEaXJ0eSIsImFuaW1hdGlvblRhcmdldCIsImNyZWF0ZVByb2plY3Rpb25Ob2RlIiwiYXR0YWNoUmVzaXplTGlzdGVuZXIiLCJkZWZhdWx0UGFyZW50IiwibWVhc3VyZVNjcm9sbCIsImNoZWNrSXNTY3JvbGxSb290IiwiUHJvamVjdGlvbk5vZGUiLCJpc1RyZWVBbmltYXRpbmciLCJ1cGRhdGVNYW51YWxseUJsb2NrZWQiLCJ1cGRhdGVCbG9ja2VkQnlSZXNpemUiLCJpc1NWRyIsIm5lZWRzUmVzZXQiLCJzaG91bGRSZXNldFRyYW5zZm9ybSIsImV2ZW50SGFuZGxlcnMiLCJwb3RlbnRpYWxOb2RlcyIsImNoZWNrVXBkYXRlRmFpbGVkIiwiY2xlYXJBbGxTbmFwc2hvdHMiLCJ1cGRhdGVQcm9qZWN0aW9uIiwibm9kZXMiLCJyZXNvbHZlVGFyZ2V0RGVsdGEiLCJjYWxjUHJvamVjdGlvbiIsImhhc1Byb2plY3RlZCIsImFuaW1hdGlvblByb2dyZXNzIiwic2hhcmVkTm9kZXMiLCJwYXRoIiwicmVnaXN0ZXJQb3RlbnRpYWxOb2RlIiwibm90aWZ5TGlzdGVuZXJzIiwic3Vic2NyaXB0aW9uTWFuYWdlciIsImhhc0xpc3RlbmVycyIsIlNWR0VsZW1lbnQiLCJ0YWdOYW1lIiwidW5ibG9ja1RpbWVvdXRfMSIsInJlc2l6ZVVuYmxvY2tVcGRhdGVfMSIsImZpbmlzaEFuaW1hdGlvbiIsInJlZ2lzdGVyU2hhcmVkTm9kZSIsImhhc1JlbGF0aXZlVGFyZ2V0Q2hhbmdlZCIsIm5ld0xheW91dCIsImlzVHJlZUFuaW1hdGlvbkJsb2NrZWQiLCJyZWxhdGl2ZVRhcmdldCIsImxheW91dFRyYW5zaXRpb24iLCJkZWZhdWx0TGF5b3V0VHJhbnNpdGlvbiIsIl9nIiwib25MYXlvdXRBbmltYXRpb25TdGFydCIsIm9uTGF5b3V0QW5pbWF0aW9uQ29tcGxldGUiLCJ0YXJnZXRDaGFuZ2VkIiwidGFyZ2V0TGF5b3V0IiwiaGFzT25seVJlbGF0aXZlVGFyZ2V0Q2hhbmdlZCIsInNldEFuaW1hdGlvbk9yaWdpbiIsImFuaW1hdGlvbk9wdGlvbnMiLCJwcmVSZW5kZXIiLCJibG9ja1VwZGF0ZSIsInVuYmxvY2tVcGRhdGUiLCJpc1VwZGF0ZUJsb2NrZWQiLCJzdGFydFVwZGF0ZSIsInJlc2V0Um90YXRpb24iLCJzaG91bGROb3RpZnlMaXN0ZW5lcnMiLCJwcmV2VHJhbnNmb3JtVGVtcGxhdGVWYWx1ZSIsInVwZGF0ZVNuYXBzaG90IiwiY2xlYXJNZWFzdXJlbWVudHMiLCJtb3VudE5vZGVFYXJseSIsInJlc2V0VHJhbnNmb3JtU3R5bGUiLCJub3RpZnlMYXlvdXRVcGRhdGUiLCJjbGVhclNuYXBzaG90IiwicmVtb3ZlTGVhZFNuYXBzaG90cyIsInNjaGVkdWxlVXBkYXRlUHJvamVjdGlvbiIsIm1lYXN1cmVkIiwibWVhc3VyZSIsInJlbW92ZVRyYW5zZm9ybSIsInJlbW92ZUVsZW1lbnRTY3JvbGwiLCJyb3VuZEJveCIsInByZXZMYXlvdXQiLCJsYXlvdXRDb3JyZWN0ZWQiLCJub3RpZnlMYXlvdXRNZWFzdXJlIiwiaXNTY3JvbGxSb290IiwiaXNSZXNldFJlcXVlc3RlZCIsImhhc1Byb2plY3Rpb24iLCJ0cmFuc2Zvcm1UZW1wbGF0ZVZhbHVlIiwidHJhbnNmb3JtVGVtcGxhdGVIYXNDaGFuZ2VkIiwiYm94V2l0aG91dFNjcm9sbCIsInNjcm9sbF8xIiwicm9vdFNjcm9sbCIsImFwcGx5VHJhbnNmb3JtIiwidHJhbnNmb3JtT25seSIsIndpdGhUcmFuc2Zvcm1zIiwiYm94V2l0aG91dFRyYW5zZm9ybSIsInNldFRhcmdldERlbHRhIiwidGFyZ2V0RGVsdGEiLCJyZWxhdGl2ZVBhcmVudCIsImdldENsb3Nlc3RQcm9qZWN0aW5nUGFyZW50IiwicmVsYXRpdmVUYXJnZXRPcmlnaW4iLCJ0YXJnZXRXaXRoVHJhbnNmb3JtcyIsImF0dGVtcHRUb1Jlc29sdmVSZWxhdGl2ZVRhcmdldCIsInBlbmRpbmdBbmltYXRpb24iLCJnZXRMZWFkIiwidHJlZVBhdGgiLCJpc1NoYXJlZFRyYW5zaXRpb24iLCJ0cmVlTGVuZ3RoIiwiYXBwbHlUcmVlRGVsdGFzIiwicHJvamVjdGlvbkRlbHRhV2l0aFRyYW5zZm9ybSIsInByZXZUcmVlU2NhbGVYIiwicHJldlRyZWVTY2FsZVkiLCJwcmV2UHJvamVjdGlvblRyYW5zZm9ybSIsInByb2plY3Rpb25UcmFuc2Zvcm0iLCJub3RpZnlBbGwiLCJzbmFwc2hvdExhdGVzdFZhbHVlcyIsIm1peGVkVmFsdWVzIiwicmVsYXRpdmVMYXlvdXQiLCJpc1NoYXJlZExheW91dEFuaW1hdGlvbiIsImlzT25seU1lbWJlciIsInNob3VsZENyb3NzZmFkZU9wYWNpdHkiLCJoYXNPcGFjaXR5Q3Jvc3NmYWRlIiwibWl4VGFyZ2V0RGVsdGEiLCJtaXhBeGlzRGVsdGEiLCJtaXhBeGlzIiwiZm9sbG93Iiwib3BhY2l0eUV4aXQiLCJib3JkZXJMYWJlbCIsImZvbGxvd1JhZGl1cyIsImxlYWRSYWRpdXMiLCJtaXhWYWx1ZXMiLCJjb21wbGV0ZUFuaW1hdGlvbiIsImFwcGx5VHJhbnNmb3Jtc1RvVGFyZ2V0Iiwic2hvdWxkUHJlc2VydmVGb2xsb3dPcGFjaXR5Iiwic3RhY2siLCJnZXRQcmV2TGVhZCIsImhhc1JvdGF0ZSIsInJlc2V0VmFsdWVzIiwic3R5bGVzIiwicG9pbnRlckV2ZW50cyIsImVtcHR5U3R5bGVzIiwidmFsdWVzVG9SZW5kZXIiLCJfaCIsImNvcnJlY3RlZCIsIm51bSIsInJlc2V0VHJlZSIsImxheW91dF8xIiwibWVhc3VyZWRMYXlvdXQiLCJheGlzU25hcHNob3QiLCJsYXlvdXREZWx0YSIsInZpc3VhbERlbHRhIiwicGFyZW50U25hcHNob3QiLCJwYXJlbnRMYXlvdXQiLCJyZWxhdGl2ZVNuYXBzaG90Iiwib25CZWZvcmVMYXlvdXRNZWFzdXJlIiwibm90aWZ5QmVmb3JlTGF5b3V0TWVhc3VyZSIsInNlYXJjaE5vZGUiLCJxdWVyeVNlbGVjdG9yIiwicm91bmRBeGlzIiwiRG9jdW1lbnRQcm9qZWN0aW9uTm9kZSIsImRvY3VtZW50RWxlbWVudCIsInNjcm9sbExlZnQiLCJib2R5Iiwic2Nyb2xsVG9wIiwiZG9jdW1lbnROb2RlIiwicG9zaXRpb24iLCJmZWF0dXJlQnVuZGxlIiwibW90aW9uIiwiYmFzZUNvbmZpZyIsIkFwcFBhdGhzIiwiU0hPV1JPT00iLCJTRU5ET1VUUyIsIlNFTkRPVVRTX0NNUyIsIk1BUktFVElOR19FTkdJTkUiLCJVU0VSX01BTkFHRU1FTlQiLCJURU5BTlRTIiwiREFTSEJPQVJEIiwiREFTSEJPQVJEX0NSRUFURV9XT1JLU1BBQ0VfTU9EQUwiLCJURU5BTlRTX1RJRVJfV0lEVEgiLCJBUFBMSUNBVElPTlNfVElFUl9XSURUSCIsIk5hdmlnYXRpb25Qb3NpdGlvbiIsIk5hdmlnYXRpb25Db250ZXh0IiwidXNlTmF2aWdhdGlvbkNvbnRleHQiLCJOYXZpZ2F0aW9uQ29udGV4dFByb3ZpZGVyIiwiaXNPcGVuIiwib25OYXZpZ2F0aW9uQ2xvc2UiLCJ0ZW5hbnRJZCIsIlRlbmFudElkQ29udGV4dCIsInZpZXdTdGF0ZSIsInNldFZpZXdTdGF0ZSIsInNlbGVjdGVkVGVuYW50SWQiLCJjdXJyZW50UG9zaXRpb24iLCJISURERU4iLCJ1c2VyIiwiYXV0aFNlcnZpY2UiLCJjYW5TaWduT3V0IiwiQXV0aENvbnRleHQiLCJwcmV2Vmlld1N0YXRlIiwiT1BFTiIsInJlZnJlc2hVc2VyIiwiaGFzTWFya2V0aW5nRW5naW5lQWNjZXNzIiwidXNlckhhc1RlbmFudEFjY2VzcyIsIlByaXZpbGVnZXMiLCJoYXNTaG93cm9vbUFjY2VzcyIsImhhc1NlbmRvdXRzQWNjZXNzIiwiaGFzU2VuZG91dHNDbXNBY2Nlc3MiLCJoYXNVc2VyTWFuYWdlbWVudEFjY2VzcyIsInVwZGF0ZVZpZXdTdGF0ZSIsInZpZXdTdGF0ZVVwZGF0ZSIsInNpZ25PdXQiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsImdlbmVyYXRvciIsIlAiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInRvZ2dsZVRlbmFudHMiLCJFWFBBTkRFRCIsImN0eCIsInVzZVRlbmFudHMiLCJhcGkiLCJ1c2VBcGkiLCJ1cmwiLCJiYXNlVXJsIiwiVEVOQU5UU19TRVJWSUNFX1VSTCIsIlJFQUNUX0FQUF9URU5BTlRTX1NFUlZJQ0VfVVJMIiwiRXJyb3IiLCJjcmVhdGVVcmwiLCJjcmVhdGVUZW5hbnRzVmlld1VybCIsImRhdGEiLCJ0ZW5hbnRzIiwiaXNMb2FkaW5nIiwidGVuYW50IiwiSW1hZ2UiLCJzcmMiLCJsb2dvVXJsIiwib3V0IiwidG1wIiwiayIsImhlYWRlciIsImZvb3RlciIsImNsYXNzTmFtZSIsInNob3dIZWFkZXJCb3JkZXIiLCJoaWRkZW4iLCJjdXJyZW50VGVuYW50SWQiLCJzZXRDdXJyZW50VGVuYW50SWQiLCJpc1JlZGlyZWN0aW5nIiwic2V0SXNSZWRpcmVjdGluZyIsImhhbmRsZVVubG9hZCIsImhhbmRsZUNsaWNrIiwibG9jYXRpb24iLCJtYXRjaFBhdGgiLCJwYXRobmFtZSIsIkJ1dHRvbiIsImFsaWduIiwibm9Cb3JkZXIiLCJub1NoYWRvdyIsImRpc2FibGVkIiwib25DbGljayIsIkljb24iLCJ0cmFuc3BhcmVudCIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwiZW1haWwiLCJvbkNsb3NlIiwiQ29uZmlybWF0aW9uTW9kYWwiLCJidXR0b25zUmlnaHQiLCJyb3VuZGVkIiwiaXNDcmVhdGVUZW5hbnRNb2RhbE9wZW4iLCJzZXRJc0NyZWF0ZVRlbmFudE1vZGFsT3BlbiIsIkVYUEFOREVEX05BVklHQVRJT05fV0lEVEgiLCJBTklNQVRJT05fVFJBTlNJVElPTiIsIkFOSU1BVElPTl9WQVJJQU5UUyIsInBvcnRhbENvbnRhaW5lciIsIkNvbnN1bWVyIiwiY3JlYXRlUG9ydGFsIiwiZGl2IiwiYWx0IiwibWVudSIsImlzTmF2aWdhdGlvbk9wZW4iLCJ0b2dnbGVJc05hdmlnYXRpb25PcGVuIiwiaW5pdGlhbFZhbHVlIiwic2V0VmFsdWUiLCJuZXdWYWx1ZSIsInVzZVRvZ2dsZSIsIkZyYWdtZW50IiwiSWNvbkJ1dHRvbiJdLCJzb3VyY2VSb290IjoiIn0=