pup-recorder 0.4.4 → 0.4.6
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/build.ts +4 -4
- package/dist/app.cjs +6 -31
- package/dist/{chunk-UC6U2DFE.js → chunk-LQ5XNASZ.js} +2 -2
- package/dist/cli.js +1 -1
- package/dist/index.js +2 -2
- package/dist/runtime/iframe_preload.cjs +2 -2
- package/package.json +3 -3
- package/tsconfig.json +3 -2
- package/dist/_tsup-dts-rollup.d.ts +0 -1077
- package/dist/index.d.ts +0 -24
- /package/dist/{cli.d.ts → build.d.ts} +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
'use strict';require('source-map-support/register.js');function v(){if(window.__pup_tick__)return;let n=Date,t=n.now(),e=0,r=0,o=[],s={},a=1,u=()=>(r+=.01,r);function m(...i){return this instanceof m?i.length?new(Function.prototype.bind.apply(n,[null,...i])):new n(t+e+u()):new n(t+e).toString()}m.prototype=n.prototype,m.now=()=>t+e+u(),m.parse=n.parse,m.UTC=n.UTC,window.Date=m,performance.now=()=>e+u(),window.requestAnimationFrame=i=>{let c=a++;return o.push({id:c,cb:i}),c},window.cancelAnimationFrame=i=>{o=o.filter(c=>c.id!==i);},window.setTimeout=(i,c)=>{let d=a++;return s[d]={type:"timeout",cb:i,delay:c||0,next:e+(c||0)},d},window.clearTimeout=i=>{typeof i=="number"&&delete s[i];},window.setInterval=(i,c)=>{let d=a++,f=Math.max(c||0,1);return s[d]={type:"interval",cb:i,delay:f,next:e+f},d},window.clearInterval=i=>{typeof i=="number"&&delete s[i];};function g(i){try{typeof i=="string"?new Function(i)():i();}catch(c){console.error("[Tick] error:",c instanceof Error&&c.stack||c);}}function p(i,c){try{i(c);}catch(d){console.error("[Tick] error:",d instanceof Error&&d.stack||d);}}let T=new WeakMap;function h(i){let c;try{c=document.getAnimations();}catch{return}for(let d of c){let f=d.playState;if(f==="idle"||f==="finished"){T.delete(d);continue}let E=typeof d.playbackRate=="number"?d.playbackRate:1;if(E===0)continue;let w=T.get(d);if(!w){let N=typeof d.currentTime=="number"?d.currentTime:0;w={startMs:i-N/E,pausedAccum:0,pausedAt:-1},T.set(d,w);}if(f==="paused"){w.pausedAt<0&&(w.pausedAt=i);continue}w.pausedAt>=0&&(w.pausedAccum+=i-w.pausedAt,w.pausedAt=-1),d.currentTime=(i-w.startMs-w.pausedAccum)*E;}}function b(i){e=i,r=0;for(let d of Object.keys(s)){let f=s[Number(d)];if(f)for(;f.next<=e;){if(g(f.cb),f.type==="timeout"){delete s[Number(d)];break}f.next+=f.delay;}}let c=o.splice(0);for(let d of c)p(d.cb,e);h(e);}window.__pup_tick__={process:b};}var $=["borderRadius","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","transform","transformOrigin","filter","clipPath","boxShadow","opacity","mixBlendMode","mask","zIndex","position","left","top","right","bottom"];function R(n){return n.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}function _(n,t){let e=window.getComputedStyle(n);t.style.position="absolute",t.style.left=`${n.offsetLeft}px`,t.style.top=`${n.offsetTop}px`,t.style.width=`${n.offsetWidth}px`,t.style.height=`${n.offsetHeight}px`;for(let u of $){if(u==="position"||u==="left"||u==="top"||u==="right"||u==="bottom")continue;let m=e.getPropertyValue(R(u));m&&t.style.setProperty(R(u),m);}let r=n.getBoundingClientRect(),o=window.devicePixelRatio||1,s=Math.max(1,Math.round(r.width*o)),a=Math.max(1,Math.round(r.height*o));t.width!==s&&(t.width=s),t.height!==a&&(t.height=a);}function H(n,t){let e=document.createElement("canvas");if(e.dataset.pupVideoOverlay="1",e.style.pointerEvents="none",n.style.visibility="hidden",n.muted=true,(n.parentNode||document.body).insertBefore(e,n.nextSibling),_(n,e),t)try{e.getContext("2d").drawImage(t,0,0,e.width,e.height);}catch{}return e}function A(n,t,e,r,o){if(o==="none")return [(e-n)/2,(r-t)/2,n,t];if(o==="contain"||o==="scale-down"){let s=Math.min(e/n,r/t),a=o==="scale-down"?Math.min(1,s):s,u=a*n,m=a*t;return [(e-u)/2,(r-m)/2,u,m]}if(o==="cover"){let s=Math.max(e/n,r/t),a=s*n,u=s*t;return [(e-a)/2,(r-u)/2,a,u]}return [0,0,e,r]}var M="pup-frame://";var L="[VideoHook]";function V(n){return {length:n>0?1:0,start:()=>0,end:()=>n}}function l(n,t){n.dispatchEvent(new Event(t));}function j(n){if(n.rvfc.size===0)return;let t=[...n.rvfc.values()];n.rvfc.clear();let e=performance.now(),r={presentationTime:e,expectedDisplayTime:e,width:n.meta.frameWidth,height:n.meta.frameHeight,mediaTime:n.currentTime,presentedFrames:n.presentedFrames};for(let o of t)o(e,r);}async function W(n,t,e,r){let o=n.cache.cacheOf(e.meta.id);o.readers.set(e,r);let s=o.bitmaps.get(r);if(!s){n.cache.prefetch(e,r+1,9);let m=await n.cache.fetch(e,r);if(n.sessions.get(t)!==e)return;if(!m){!e.paused&&!e.waiting&&(e.waiting=true,l(t,"waiting"));return}s=m;}e.waiting&&(e.waiting=false,e.paused||l(t,"playing"));let a=e.cv,u=A(s.width,s.height,a.width,a.height,e.objectFit);e.ctx.clearRect(0,0,a.width,a.height),e.ctx.drawImage(s,u[0],u[1],u[2],u[3]),e.lastDrawnIdx=r,e.presentedFrames++,j(e),n.cache.prefetch(e,r+1,10),n.cache.evict(o);}function C(n,t){let e=Math.max(0,t-n.currMs)/1e3;n.currMs=t;let r=[];return document.querySelectorAll("video").forEach(o=>{let s=o,a=n.sessions.get(s);if(!a||a.dead||(_(s,a.cv),!a.meta))return;if(a.meta.frameWidth<a.meta.width&&a.cv.width>a.meta.frameWidth*1.05&&!n.attaching.has(s)){n.reattach(s,a);return}!a.paused&&!a.ended&&(a.currentTime+=e*(s.playbackRate||1),a.maxReached=Math.max(a.maxReached,a.currentTime),a.currentTime>=a.meta.duration?s.loop?a.currentTime=a.currentTime%a.meta.duration:(a.currentTime=a.meta.duration,a.paused=true,a.ended=true,l(s,"ended")):l(s,"timeupdate"));let u=Math.max(1,Math.round(a.currentTime*a.meta.fps));u!==a.lastDrawnIdx&&r.push(W(n,s,a,u));}),Promise.all(r)}var x=class{_caches=new Map;cacheOf(t){let e=this._caches.get(t);return e||(e={bitmaps:new Map,inFlight:new Map,readers:new Map},this._caches.set(t,e)),e}fetch(t,e){let r=t.meta;if(!r)return Promise.resolve(void 0);let o=this.cacheOf(r.id),s=o.inFlight.get(e);if(s)return s;let a=o.bitmaps.get(e);if(a)return Promise.resolve(a);let u=r.frameWidth,m=r.frameHeight,g=fetch(`${M}frame?id=${r.id}&idx=${e}`).then(p=>p.ok?p.arrayBuffer():void 0).then(p=>p&&p.byteLength===u*m*4?createImageBitmap(new ImageData(new Uint8ClampedArray(p),u,m)):void 0).then(p=>(o.inFlight.delete(e),p&&o.bitmaps.set(e,p),p)).catch(()=>{o.inFlight.delete(e);});return o.inFlight.set(e,g),g}prefetch(t,e,r){let o=t.meta;if(!o)return;let s=Math.max(1,Math.round(o.duration*o.fps));for(let a=e;a<e+r;a++)a<1||a>s||this.fetch(t,a);}evict(t){let e=1/0;if(t.readers.forEach(o=>{o<e&&(e=o);}),!Number.isFinite(e))return;let r=e-2;t.bitmaps.forEach((o,s)=>{s<r&&(o.close(),t.bitmaps.delete(s));});}release(t,e){let r=this._caches.get(t);r&&(r.readers.delete(e),!(r.readers.size>0)&&(r.bitmaps.forEach(o=>{o.close();}),this._caches.delete(t),fetch(`${M}close?id=${t}`,{keepalive:true})));}};function O(n){let t=HTMLVideoElement.prototype,e=HTMLMediaElement.prototype,r=i=>Object.getOwnPropertyDescriptor(t,i)||Object.getOwnPropertyDescriptor(e,i),o=r("currentTime"),s=r("src"),a=r("playbackRate"),u=t.pause,m=t.requestVideoFrameCallback,g=t.cancelVideoFrameCallback,p=t.getVideoPlaybackQuality,T=t.load,h=n.sessions,b=(i,c)=>{let d=r(i)?.get;if(!d)throw new Error(`media_shim: no native getter for ${i}`);Object.defineProperty(t,i,{configurable:true,get(){let f=h.get(this);return f?c(f):d.call(this)}});};if(b("paused",i=>i.paused),b("ended",i=>i.ended),b("readyState",i=>i.readyState),b("networkState",i=>i.networkState),b("error",i=>i.error??null),b("seeking",i=>i.seeking),b("buffered",i=>V(i.meta?i.meta.duration:0)),b("seekable",i=>V(i.meta?i.meta.duration:0)),b("played",i=>V(i.maxReached)),t.play=function(){let i=h.get(this);return i?(n.resume(this,i),Promise.resolve()):n.attach(this).then(c=>{c&&n.resume(this,c);})},t.pause=function(){let i=h.get(this);if(!i){u.call(this);return}i.paused||(i.paused=true,l(this,"pause"));},o?.get&&o.set){let i=o.get,c=o.set;Object.defineProperty(t,"currentTime",{configurable:true,get(){let d=h.get(this);return d?d.currentTime:i.call(this)},set(d){let f=h.get(this);if(!f){c.call(this,d);return}let E=f.meta?f.meta.duration:d;f.currentTime=Math.max(0,Math.min(d,E)),f.maxReached=Math.max(f.maxReached,f.currentTime),f.currentTime<E&&(f.ended=false),f.seeking=true,l(this,"seeking"),f.seeking=false,l(this,"seeked"),l(this,"timeupdate");}});}if(a?.set){let i=a.set;Object.defineProperty(t,"playbackRate",{configurable:true,get:a.get,set(c){i.call(this,c),h.has(this)&&l(this,"ratechange");}});}if(t.requestVideoFrameCallback=function(i){let c=h.get(this);if(!c)return m.call(this,i);let d=++n.rvfcSeq;return c.rvfc.set(d,i),d},t.cancelVideoFrameCallback=function(i){let c=h.get(this);if(!c){g.call(this,i);return}c.rvfc.delete(i);},t.getVideoPlaybackQuality=function(){let i=h.get(this);return i?{creationTime:performance.now(),totalVideoFrames:i.presentedFrames,droppedVideoFrames:0,corruptedVideoFrames:0}:p.call(this)},t.load=function(){if(!h.has(this))return T.call(this);n.detach(this),l(this,"emptied"),this.__pupLastSrc=void 0,n.attach(this);},s?.set){let i=s.set;Object.defineProperty(t,"src",{configurable:true,get:s.get,set(c){i.call(this,c),n.onSrcChange(this);}});}}function D(n,t){return {meta:void 0,cv:t,ctx:t.getContext("2d"),paused:!(n.autoplay||!n.paused),currentTime:0,ended:false,lastDrawnIdx:-1,dead:false,objectFit:window.getComputedStyle(n).objectFit||"fill",readyState:0,networkState:0,seeking:false,waiting:false,error:void 0,presentedFrames:0,maxReached:0,rvfc:new Map}}function F(n,t,e){t.dead=true,t.error=e,t.networkState=3,console.error(L,`${e.message} src=${n.src||n.currentSrc}`),l(n,"error");}async function P(n,t){let{video:e,state:r,src:o,birthMs:s,native:a}=t,u=Number.parseInt(e.dataset.pupFps||"30",10);r.networkState=2,l(e,"loadstart");let m;try{let p=a?"":`&w=${r.cv.width}&h=${r.cv.height}&fit=${encodeURIComponent(r.objectFit)}`;m=await fetch(`${M}open?src=${encodeURIComponent(o)}&fps=${u}${p}`);}catch(p){return F(e,r,{code:2,message:`open failed: ${p instanceof Error?p.message:String(p)}`})}if(n.sessions.get(e)!==r)return;if(!m.ok)return F(e,r,{code:3,message:`open ${m.status}: ${await m.text()}`});let g=await m.json();if(n.sessions.get(e)===r)return r.meta=g,r.currentTime=r.paused?0:Math.max(0,(n.currMs-s)/1e3),Object.defineProperty(e,"videoWidth",{value:g.width,configurable:true}),Object.defineProperty(e,"videoHeight",{value:g.height,configurable:true}),Object.defineProperty(e,"duration",{value:g.duration,configurable:true}),r.readyState=1,l(e,"durationchange"),l(e,"loadedmetadata"),r.readyState=4,l(e,"loadeddata"),l(e,"canplay"),l(e,"canplaythrough"),r.networkState=1,l(e,"suspend"),r.paused||(l(e,"play"),l(e,"playing")),n.cache.prefetch(r,1,10),r}var k=class{sessions=new WeakMap;attaching=new WeakMap;opening=new Set;cache=new x;rvfcSeq=0;currMs=0;_lastSnapshot=new WeakMap;install(){O(this),this.scan(document.documentElement),new MutationObserver(t=>{for(let e of t){if(e.type==="attributes"&&e.target instanceof HTMLVideoElement&&e.attributeName==="src"){this.onSrcChange(e.target);continue}e.addedNodes.forEach(r=>{r instanceof Element&&this.scan(r);}),e.removedNodes.forEach(r=>{r instanceof HTMLVideoElement&&this.detach(r);});}}).observe(document,{subtree:true,childList:true,attributes:true,attributeFilter:["src"]}),window.__pup_video__={advance:t=>C(this,t),ready:()=>this.ready()};}attach(t,e=false){let r=this.sessions.get(t);if(r)return Promise.resolve(r);let o=this.attaching.get(t);if(o)return o;let s=t.src||t.currentSrc;if(!s||/^(blob:|data:|mediastream:)/i.test(s))return Promise.resolve(void 0);let a=H(t,this._lastSnapshot.get(t)),u=D(t,a);this.sessions.set(t,u);let m=P(this,{video:t,state:u,src:s,birthMs:this.currMs,native:e}).finally(()=>{this.attaching.delete(t),this.opening.delete(m);});return this.attaching.set(t,m),this.opening.add(m),m}async ready(){await Promise.allSettled([...this.opening]);}resume(t,e){!e.paused&&!e.ended||(e.paused=false,e.ended=false,l(t,"play"),l(t,"playing"));}detach(t){let e=this.sessions.get(t);if(e){if(e.meta){if(e.lastDrawnIdx>=0)try{let r=new OffscreenCanvas(e.cv.width,e.cv.height),o=r.getContext("2d");if(!o)throw new Error("no 2d context");o.drawImage(e.cv,0,0),this._lastSnapshot.set(t,r);}catch{}this.cache.release(e.meta.id,e);}e.cv.remove(),this.sessions.delete(t),this.attaching.delete(t);}}onSrcChange(t){let e=t.src||t.currentSrc||"";t.__pupLastSrc!==e&&(t.__pupLastSrc=e,this.sessions.has(t)&&this.detach(t),this.attach(t));}reattach(t,e){let r=e.currentTime,o=e.paused,s=e.ended;this.detach(t),this.attach(t,true).then(a=>{a&&(a.currentTime=r,a.paused=o,a.ended=s);});}scan(t){t&&(t.tagName==="VIDEO"&&this.attach(t),t.querySelectorAll&&t.querySelectorAll("video").forEach(e=>{this.attach(e);}));}};function I(){window.__pup_video__||new k().install();}window.self!==window.top&&(v(),I());
|
|
1
|
+
'use strict';require('source-map-support/register.js');function v(){if(window.__pup_tick__)return;let n=Date,t=n.now(),e=0,r=0,o=[],s={},a=1,m=()=>(r+=.01,r);function u(...i){return this instanceof u?i.length?new(Function.prototype.bind.apply(n,[null,...i])):new n(t+e+m()):new n(t+e).toString()}u.prototype=n.prototype,u.now=()=>t+e+m(),u.parse=n.parse,u.UTC=n.UTC,window.Date=u,performance.now=()=>e+m(),window.requestAnimationFrame=i=>{let c=a++;return o.push({id:c,cb:i}),c},window.cancelAnimationFrame=i=>{o=o.filter(c=>c.id!==i);},window.setTimeout=(i,c)=>{let d=a++;return s[d]={type:"timeout",cb:i,delay:c||0,next:e+(c||0)},d},window.clearTimeout=i=>{typeof i=="number"&&delete s[i];},window.setInterval=(i,c)=>{let d=a++,f=Math.max(c||0,1);return s[d]={type:"interval",cb:i,delay:f,next:e+f},d},window.clearInterval=i=>{typeof i=="number"&&delete s[i];};function h(i){try{typeof i=="string"?new Function(i)():i();}catch(c){console.error("[Tick] error:",c instanceof Error&&c.stack||c);}}function p(i,c){try{i(c);}catch(d){console.error("[Tick] error:",d instanceof Error&&d.stack||d);}}let b=new WeakMap;function g(i){let c;try{c=document.getAnimations();}catch{return}for(let d of c){let f=d.playState;if(f==="idle"||f==="finished"){b.delete(d);continue}let T=typeof d.playbackRate=="number"?d.playbackRate:1;if(T===0)continue;let y=b.get(d);if(!y){let N=typeof d.currentTime=="number"?d.currentTime:0;y={startMs:i-N/T,pausedAccum:0,pausedAt:-1},b.set(d,y);}if(f==="paused"){y.pausedAt<0&&(y.pausedAt=i);continue}y.pausedAt>=0&&(y.pausedAccum+=i-y.pausedAt,y.pausedAt=-1),d.currentTime=(i-y.startMs-y.pausedAccum)*T;}}function w(i){e=i,r=0;for(let d of Object.keys(s)){let f=s[Number(d)];if(f)for(;f.next<=e;){if(h(f.cb),f.type==="timeout"){delete s[Number(d)];break}f.next+=f.delay;}}let c=o.splice(0);for(let d of c)p(d.cb,e);g(e);}window.__pup_tick__={process:w};}var $=["borderRadius","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","transform","transformOrigin","filter","clipPath","boxShadow","opacity","mixBlendMode","mask","zIndex","position","left","top","right","bottom"];function R(n){return n.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}function _(n,t){let e=window.getComputedStyle(n);t.style.position="absolute",t.style.left=`${n.offsetLeft}px`,t.style.top=`${n.offsetTop}px`,t.style.width=`${n.offsetWidth}px`,t.style.height=`${n.offsetHeight}px`;for(let u of $){if(u==="position"||u==="left"||u==="top"||u==="right"||u==="bottom")continue;let h=e.getPropertyValue(R(u));h&&t.style.setProperty(R(u),h);}let r=n.getBoundingClientRect(),o=window.devicePixelRatio||1,s=Math.max(1,Math.round(r.width*o)),a=Math.max(1,Math.round(r.height*o)),m=false;return t.width!==s&&(t.width=s,m=true),t.height!==a&&(t.height=a,m=true),m}function H(n,t){let e=document.createElement("canvas");if(e.dataset.pupVideoOverlay="1",e.style.pointerEvents="none",n.style.visibility="hidden",n.muted=true,(n.parentNode||document.body).insertBefore(e,n.nextSibling),_(n,e),t)try{e.getContext("2d").drawImage(t,0,0,e.width,e.height);}catch{}return e}function A(n,t,e,r,o){if(o==="none")return [(e-n)/2,(r-t)/2,n,t];if(o==="contain"||o==="scale-down"){let s=Math.min(e/n,r/t),a=o==="scale-down"?Math.min(1,s):s,m=a*n,u=a*t;return [(e-m)/2,(r-u)/2,m,u]}if(o==="cover"){let s=Math.max(e/n,r/t),a=s*n,m=s*t;return [(e-a)/2,(r-m)/2,a,m]}return [0,0,e,r]}var M="pup-frame://";var L="[VideoHook]";function V(n){return {length:n>0?1:0,start:()=>0,end:()=>n}}function l(n,t){n.dispatchEvent(new Event(t));}function j(n){if(n.rvfc.size===0)return;let t=[...n.rvfc.values()];n.rvfc.clear();let e=performance.now(),r={presentationTime:e,expectedDisplayTime:e,width:n.meta.frameWidth,height:n.meta.frameHeight,mediaTime:n.currentTime,presentedFrames:n.presentedFrames};for(let o of t)o(e,r);}async function W(n,t,e,r){let o=n.cache.cacheOf(e.meta.id);o.readers.set(e,r);let s=o.bitmaps.get(r);if(!s){n.cache.prefetch(e,r+1,9);let u=await n.cache.fetch(e,r);if(n.sessions.get(t)!==e)return;if(!u){!e.paused&&!e.waiting&&(e.waiting=true,l(t,"waiting"));return}s=u;}e.waiting&&(e.waiting=false,e.paused||l(t,"playing"));let a=e.cv,m=A(s.width,s.height,a.width,a.height,e.objectFit);e.ctx.clearRect(0,0,a.width,a.height),e.ctx.drawImage(s,m[0],m[1],m[2],m[3]),e.lastDrawnIdx=r,e.presentedFrames++,j(e),n.cache.prefetch(e,r+1,10),n.cache.evict(o);}function C(n,t){let e=Math.max(0,t-n.currMs)/1e3;n.currMs=t;let r=[];return document.querySelectorAll("video").forEach(o=>{let s=o,a=n.sessions.get(s);if(!a||a.dead||(_(s,a.cv)&&(a.lastDrawnIdx=-1),!a.meta))return;if(a.meta.frameWidth<a.meta.width&&a.cv.width>a.meta.frameWidth*1.05&&!n.attaching.has(s)){n.reattach(s,a);return}!a.paused&&!a.ended&&(a.currentTime+=e*(s.playbackRate||1),a.maxReached=Math.max(a.maxReached,a.currentTime),a.currentTime>=a.meta.duration?s.loop?a.currentTime=a.currentTime%a.meta.duration:(a.currentTime=a.meta.duration,a.paused=true,a.ended=true,l(s,"ended")):l(s,"timeupdate"));let m=Math.max(1,Math.round(a.currentTime*a.meta.fps));m!==a.lastDrawnIdx&&r.push(W(n,s,a,m));}),Promise.all(r)}var S=class{_caches=new Map;cacheOf(t){let e=this._caches.get(t);return e||(e={bitmaps:new Map,inFlight:new Map,readers:new Map},this._caches.set(t,e)),e}fetch(t,e){let r=t.meta;if(!r)return Promise.resolve(void 0);let o=this.cacheOf(r.id),s=o.inFlight.get(e);if(s)return s;let a=o.bitmaps.get(e);if(a)return Promise.resolve(a);let m=r.frameWidth,u=r.frameHeight,h=fetch(`${M}frame?id=${r.id}&idx=${e}`).then(p=>p.ok?p.arrayBuffer():void 0).then(p=>p&&p.byteLength===m*u*4?createImageBitmap(new ImageData(new Uint8ClampedArray(p),m,u)):void 0).then(p=>(o.inFlight.delete(e),p&&o.bitmaps.set(e,p),p)).catch(()=>{o.inFlight.delete(e);});return o.inFlight.set(e,h),h}prefetch(t,e,r){let o=t.meta;if(!o)return;let s=Math.max(1,Math.round(o.duration*o.fps));for(let a=e;a<e+r;a++)a<1||a>s||this.fetch(t,a);}evict(t){let e=1/0;if(t.readers.forEach(o=>{o<e&&(e=o);}),!Number.isFinite(e))return;let r=e-2;t.bitmaps.forEach((o,s)=>{s<r&&(o.close(),t.bitmaps.delete(s));});}release(t,e){let r=this._caches.get(t);r&&(r.readers.delete(e),!(r.readers.size>0)&&(r.bitmaps.forEach(o=>{o.close();}),this._caches.delete(t),fetch(`${M}close?id=${t}`,{keepalive:true})));}};function O(n){let t=HTMLVideoElement.prototype,e=HTMLMediaElement.prototype,r=i=>Object.getOwnPropertyDescriptor(t,i)||Object.getOwnPropertyDescriptor(e,i),o=r("currentTime"),s=r("src"),a=r("playbackRate"),m=t.pause,u=t.requestVideoFrameCallback,h=t.cancelVideoFrameCallback,p=t.getVideoPlaybackQuality,b=t.load,g=n.sessions,w=(i,c)=>{let d=r(i)?.get;if(!d)throw new Error(`media_shim: no native getter for ${i}`);Object.defineProperty(t,i,{configurable:true,get(){let f=g.get(this);return f?c(f):d.call(this)}});};if(w("paused",i=>i.paused),w("ended",i=>i.ended),w("readyState",i=>i.readyState),w("networkState",i=>i.networkState),w("error",i=>i.error??null),w("seeking",i=>i.seeking),w("buffered",i=>V(i.meta?i.meta.duration:0)),w("seekable",i=>V(i.meta?i.meta.duration:0)),w("played",i=>V(i.maxReached)),t.play=function(){let i=g.get(this);return i?(n.resume(this,i),Promise.resolve()):n.attach(this).then(c=>{c&&n.resume(this,c);})},t.pause=function(){let i=g.get(this);if(!i){m.call(this);return}i.paused||(i.paused=true,l(this,"pause"));},o?.get&&o.set){let i=o.get,c=o.set;Object.defineProperty(t,"currentTime",{configurable:true,get(){let d=g.get(this);return d?d.currentTime:i.call(this)},set(d){let f=g.get(this);if(!f){c.call(this,d);return}let T=f.meta?f.meta.duration:d;f.currentTime=Math.max(0,Math.min(d,T)),f.maxReached=Math.max(f.maxReached,f.currentTime),f.currentTime<T&&(f.ended=false),f.seeking=true,l(this,"seeking"),f.seeking=false,l(this,"seeked"),l(this,"timeupdate");}});}if(a?.set){let i=a.set;Object.defineProperty(t,"playbackRate",{configurable:true,get:a.get,set(c){i.call(this,c),g.has(this)&&l(this,"ratechange");}});}if(t.requestVideoFrameCallback=function(i){let c=g.get(this);if(!c)return u.call(this,i);let d=++n.rvfcSeq;return c.rvfc.set(d,i),d},t.cancelVideoFrameCallback=function(i){let c=g.get(this);if(!c){h.call(this,i);return}c.rvfc.delete(i);},t.getVideoPlaybackQuality=function(){let i=g.get(this);return i?{creationTime:performance.now(),totalVideoFrames:i.presentedFrames,droppedVideoFrames:0,corruptedVideoFrames:0}:p.call(this)},t.load=function(){if(!g.has(this))return b.call(this);n.detach(this),l(this,"emptied"),this.__pupLastSrc=void 0,n.attach(this);},s?.set){let i=s.set;Object.defineProperty(t,"src",{configurable:true,get:s.get,set(c){i.call(this,c),n.onSrcChange(this);}});}}function D(n,t){return {meta:void 0,cv:t,ctx:t.getContext("2d"),paused:!(n.autoplay||!n.paused),currentTime:0,ended:false,lastDrawnIdx:-1,dead:false,objectFit:window.getComputedStyle(n).objectFit||"fill",readyState:0,networkState:0,seeking:false,waiting:false,error:void 0,presentedFrames:0,maxReached:0,rvfc:new Map}}function F(n,t,e){t.dead=true,t.error=e,t.networkState=3,console.error(L,`${e.message} src=${n.src||n.currentSrc}`),l(n,"error");}async function P(n,t){let{video:e,state:r,src:o,birthMs:s,native:a}=t,m=Number.parseInt(e.dataset.pupFps||"30",10);r.networkState=2,l(e,"loadstart");let u;try{let b=a?"":`&w=${r.cv.width}&h=${r.cv.height}&fit=${encodeURIComponent(r.objectFit)}`;u=await fetch(`${M}open?src=${encodeURIComponent(o)}&fps=${m}${b}`);}catch(b){return F(e,r,{code:2,message:`open failed: ${b instanceof Error?b.message:String(b)}`})}if(n.sessions.get(e)!==r)return;if(!u.ok)return F(e,r,{code:3,message:`open ${u.status}: ${await u.text()}`});let h=await u.json();if(n.sessions.get(e)!==r)return;r.meta=h,r.currentTime=r.paused?0:Math.max(0,(n.currMs-s)/1e3);let p=e.videoWidth>0;return Object.defineProperty(e,"videoWidth",{value:h.width,configurable:true}),Object.defineProperty(e,"videoHeight",{value:h.height,configurable:true}),Object.defineProperty(e,"duration",{value:h.duration,configurable:true}),r.readyState=1,p||(l(e,"durationchange"),l(e,"loadedmetadata")),r.readyState=4,p||(l(e,"loadeddata"),l(e,"canplay"),l(e,"canplaythrough")),r.networkState=1,p||(l(e,"suspend"),r.paused||(l(e,"play"),l(e,"playing"))),n.cache.prefetch(r,1,10),r}var k=class{sessions=new WeakMap;attaching=new WeakMap;opening=new Set;cache=new S;rvfcSeq=0;currMs=0;_lastSnapshot=new WeakMap;install(){O(this),this.scan(document.documentElement),new MutationObserver(t=>{for(let e of t){if(e.type==="attributes"&&e.target instanceof HTMLVideoElement&&e.attributeName==="src"){this.onSrcChange(e.target);continue}e.addedNodes.forEach(r=>{r instanceof Element&&this.scan(r);}),e.removedNodes.forEach(r=>{r instanceof HTMLVideoElement&&this.detach(r);});}}).observe(document,{subtree:true,childList:true,attributes:true,attributeFilter:["src"]}),window.__pup_video__={advance:t=>C(this,t),ready:()=>this.ready()};}attach(t,e=false){let r=this.sessions.get(t);if(r)return Promise.resolve(r);let o=this.attaching.get(t);if(o)return o;let s=t.src||t.currentSrc;if(!s||/^(blob:|data:|mediastream:)/i.test(s))return Promise.resolve(void 0);let a=H(t,this._lastSnapshot.get(t)),m=D(t,a);this.sessions.set(t,m);let u=P(this,{video:t,state:m,src:s,birthMs:this.currMs,native:e}).finally(()=>{this.attaching.delete(t),this.opening.delete(u);});return this.attaching.set(t,u),this.opening.add(u),u}async ready(){await Promise.allSettled([...this.opening]);}resume(t,e){!e.paused&&!e.ended||(e.paused=false,e.ended=false,l(t,"play"),l(t,"playing"));}detach(t){let e=this.sessions.get(t);if(e){if(e.meta){if(e.lastDrawnIdx>=0)try{let r=new OffscreenCanvas(e.cv.width,e.cv.height),o=r.getContext("2d");if(!o)throw new Error("no 2d context");o.drawImage(e.cv,0,0),this._lastSnapshot.set(t,r);}catch{}this.cache.release(e.meta.id,e);}e.cv.remove(),this.sessions.delete(t),this.attaching.delete(t);}}onSrcChange(t){let e=t.src||t.currentSrc||"";t.__pupLastSrc!==e&&(t.__pupLastSrc=e,this.sessions.has(t)&&this.detach(t),this.attach(t));}reattach(t,e){let r=e.currentTime,o=e.paused,s=e.ended;this.detach(t),this.attach(t,true).then(a=>{a&&(a.currentTime=r,a.paused=o,a.ended=s);});}scan(t){t&&(t.tagName==="VIDEO"&&this.attach(t),t.querySelectorAll&&t.querySelectorAll("video").forEach(e=>{this.attach(e);}));}};function I(){window.__pup_video__||new k().install();}window.self!==window.top&&(v(),I());
|
|
2
2
|
//# sourceMappingURL=iframe_preload.cjs.map
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2lmcmFtZV9ob29rLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vb3ZlcmxheS50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3ZpZGVvL3R5cGVzLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vZHJpdmVyLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vZnJhbWVfY2FjaGUudHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9tZWRpYV9zaGltLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vc2Vzc2lvbi50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3ZpZGVvL2hvb2sudHMiLCIuLi8uLi9zcmMvcnVudGltZS9pZnJhbWVfcHJlbG9hZC50cyJdLCJuYW1lcyI6WyJpbnN0YWxsVGlja0hvb2siLCJSRUFMX0RBVEUiLCJkYXRlT3JpZ2luIiwiY3Vyck1zIiwidGltZU9mZnNldCIsInJhZlF1ZXVlIiwidGltZXJzIiwibmV4dElkIiwidGljayIsIkZha2VEYXRlIiwiYXJncyIsImNiIiwiaWQiLCJyIiwiZGVsYXkiLCJkIiwic2FmZUludm9rZVRpbWVyIiwiZm4iLCJlIiwic2FmZUludm9rZVJhZiIsInRzIiwiYW5pbVN0YXRlIiwic3luY0FuaW1hdGlvbnMiLCJtcyIsImFuaW1zIiwiYSIsInN0YXRlIiwicmF0ZSIsInMiLCJjdDAiLCJwcm9jZXNzIiwidGltZXN0YW1wTXMiLCJ0IiwicmFmcyIsIk1JUlJPUl9QUk9QUyIsImNzc0Nhc2UiLCJjIiwic3luY092ZXJsYXkiLCJ2aWRlbyIsImN2IiwiY3MiLCJwIiwidiIsInZyIiwiZHByIiwidyIsImgiLCJzZXR1cENhbnZhcyIsInNuYXAiLCJmaXRSZWN0Iiwic3JjVyIsInNyY0giLCJkc3RXIiwiZHN0SCIsImZpdCIsInNjIiwiayIsIndzIiwiaHMiLCJzYzIiLCJ3czIiLCJoczIiLCJTQ0hFTUUiLCJUQUciLCJ0aW1lUmFuZ2VzIiwiZW5kIiwiZmlyZSIsImVsIiwidHlwZSIsImZpcmVGcmFtZUNhbGxiYWNrcyIsImNicyIsIm5vdyIsIm1ldGEiLCJwYWludCIsImhvb2siLCJpZHgiLCJibSIsImZldGNoZWQiLCJhZHZhbmNlIiwiZHQiLCJwcyIsIkZyYW1lQ2FjaGUiLCJleGlzdGluZyIsImNhY2hlZCIsImJ1ZiIsImZyb21JZHgiLCJjb3VudCIsIm1heElkeCIsImkiLCJtaW5JZHgiLCJmbG9vciIsImluc3RhbGxNZWRpYVNoaW0iLCJIVkUiLCJNRURJQSIsIm1kZXNjIiwiY3REZXNjIiwic3JjRGVzYyIsInJhdGVEZXNjIiwib3JpZ1BhdXNlIiwib3JpZ1JWRkMiLCJvcmlnQ2FuY2VsUlZGQyIsIm9yaWdRdWFsaXR5Iiwib3JpZ0xvYWQiLCJzZXNzaW9ucyIsImRlZiIsInByb3AiLCJwaWNrIiwibmF0aXZlR2V0IiwibnMiLCJjdEdldCIsImN0U2V0IiwiZHVyIiwicmF0ZVNldCIsInNyY1NldCIsIm5ld1ZpZGVvU3RhdGUiLCJmYWlsT3BlbiIsImVycm9yIiwib3BlblNlc3Npb24iLCJzcmMiLCJiaXJ0aE1zIiwibmF0aXZlIiwiZnBzIiwicmVzIiwicSIsIlZpZGVvSG9vayIsIm11dHMiLCJtIiwibiIsInBlbmRpbmciLCJzY3R4IiwicGF1c2VkIiwiZW5kZWQiLCJyb290IiwiaW5zdGFsbFZpZGVvSG9vayJdLCJtYXBwaW5ncyI6InVEQXdCTyxTQUFTQSxHQUF3QixDQUN0QyxHQUFJLE9BQU8sWUFBQSxDQUNULE9BR0YsSUFBTUMsQ0FBQUEsQ0FBWSxJQUFBLENBQ1pDLENBQUFBLENBQWFELENBQUFBLENBQVUsS0FBSSxDQUM3QkUsQ0FBQUEsQ0FBUyxFQUNUQyxDQUFBQSxDQUFhLENBQUEsQ0FDYkMsRUFBdUIsRUFBQyxDQUN0QkMsQ0FBQUEsQ0FBNEMsR0FDOUNDLENBQUFBLENBQVMsQ0FBQSxDQUNQQyxFQUFPLEtBQ1hKLENBQUFBLEVBQWMsSUFDUEEsQ0FBQUEsQ0FBQUEsQ0FHVCxTQUFTSyxDQUFBQSxDQUFBQSxHQUEyQkMsQ0FBQUEsQ0FBZ0Ms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QUFNc0UsQ0FBQUEsRUFBTyxDQUNwQ0EsSUFHTEEsQ0FBQUEsQ0FBRyxXQUFBLENBQWM1RSxFQUNqQjRFLENBQUFBLENBQUcsTUFBQSxDQUFTc0IsRUFDWnRCLENBQUFBLENBQUcsS0FBQSxDQUFRdUIsR0FDYixDQUFDLEVBQ0gsQ0FFUSxJQUFBLENBQUtDLENBQUFBLENBQTRCLENBQ2xDQSxDQUFBQSxHQUdEQSxFQUFLLE9BQUEsR0FBWSxPQUFBLEVBQ25CLEtBQUssTUFBQSxDQUFPQSxDQUF3QixFQUVsQ0EsQ0FBQUEsQ0FBSyxnQkFBQSxFQUNQQSxDQUFBQSxDQUFLLGdCQUFBLENBQWlCLE9BQU8sQ0FBQSxDQUFFLE9BQUEsQ0FBUzFGLEdBQU0sQ0FDNUMsSUFBQSxDQUFLLE9BQU9BLENBQUMsRUFDZixDQUFDLENBQUEsRUFFTCxDQUNGLENBQUEsQ0FFTyxTQUFTMkYsR0FBeUIsQ0FDbkMsTUFBQSxDQUFPLGVBR1gsSUFBSVQsQ0FBQUEsR0FBWSxPQUFBLEdBQ2xCLENDbEtJLE1BQUEsQ0FBTyxJQUFBLEdBQVMsT0FBTyxHQUFBLEdBQ3pCNUgsQ0FBQUEsR0FDQXFJLENBQUFBLEVBQWlCLENBQUEiLCJmaWxlIjoiaWZyYW1lX3ByZWxvYWQuY2pzIiwic291cmNlc0NvbnRlbnQiOlsiZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBfX3B1cF90aWNrX18/OiB7IHByb2Nlc3M6IChtczogbnVtYmVyKSA9PiB2b2lkIH07XG4gIH1cbn1cblxuaW50ZXJmYWNlIFRpbWVyIHtcbiAgdHlwZTogXCJ0aW1lb3V0XCIgfCBcImludGVydmFsXCI7XG4gIGNiOiBUaW1lckhhbmRsZXI7XG4gIGRlbGF5OiBudW1iZXI7XG4gIG5leHQ6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFJhZkVudHJ5IHtcbiAgaWQ6IG51bWJlcjtcbiAgY2I6IEZyYW1lUmVxdWVzdENhbGxiYWNrO1xufVxuXG5pbnRlcmZhY2UgQW5pbUVudHJ5IHtcbiAgc3RhcnRNczogbnVtYmVyO1xuICBwYXVzZWRBY2N1bTogbnVtYmVyO1xuICBwYXVzZWRBdDogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbFRpY2tIb29rKCk6IHZvaWQge1xuICBpZiAod2luZG93Ll9fcHVwX3RpY2tfXykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IFJFQUxfREFURSA9IERhdGU7XG4gIGNvbnN0IGRhdGVPcmlnaW4gPSBSRUFMX0RBVEUubm93KCk7XG4gIGxldCBjdXJyTXMgPSAwO1xuICBsZXQgdGltZU9mZnNldCA9IDA7XG4gIGxldCByYWZRdWV1ZTogUmFmRW50cnlbXSA9IFtdO1xuICBjb25zdCB0aW1lcnM6IFJlY29yZDxudW1iZXIsIFRpbWVyIHwgdW5kZWZpbmVkPiA9IHt9O1xuICBsZXQgbmV4dElkID0gMTtcbiAgY29uc3QgdGljayA9ICgpID0+IHtcbiAgICB0aW1lT2Zmc2V0ICs9IDAuMDE7XG4gICAgcmV0dXJuIHRpbWVPZmZzZXQ7XG4gIH07XG5cbiAgZnVuY3Rpb24gRmFrZURhdGUodGhpczogdW5rbm93biwgLi4uYXJnczogdW5rbm93bltdKTogRGF0ZSB8IHN0cmluZyB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEZha2VEYXRlKSkge1xuICAgICAgcmV0dXJuIG5ldyBSRUFMX0RBVEUoZGF0ZU9yaWdpbiArIGN1cnJNcykudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3MubGVuZ3RoXG4gICAgICA/IG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoUkVBTF9EQVRFLCBbbnVsbCwgLi4uYXJnc10pKSgpXG4gICAgICA6IG5ldyBSRUFMX0RBVEUoZGF0ZU9yaWdpbiArIGN1cnJNcyArIHRpY2soKSk7XG4gIH1cbiAgRmFrZURhdGUucHJvdG90eXBlID0gUkVBTF9EQVRFLnByb3RvdHlwZTtcbiAgRmFrZURhdGUubm93ID0gKCkgPT4gZGF0ZU9yaWdpbiArIGN1cnJNcyArIHRpY2soKTtcbiAgRmFrZURhdGUucGFyc2UgPSBSRUFMX0RBVEUucGFyc2U7XG4gIEZha2VEYXRlLlVUQyA9IFJFQUxfREFURS5VVEM7XG4gICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IERhdGU6IHVua25vd24gfSkuRGF0ZSA9IEZha2VEYXRlO1xuICBwZXJmb3JtYW5jZS5ub3cgPSAoKSA9PiBjdXJyTXMgKyB0aWNrKCk7XG5cbiAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IChjYikgPT4ge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgcmFmUXVldWUucHVzaCh7IGlkLCBjYiB9KTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IChpZCkgPT4ge1xuICAgIHJhZlF1ZXVlID0gcmFmUXVldWUuZmlsdGVyKChyKSA9PiByLmlkICE9PSBpZCk7XG4gIH07XG4gICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IHNldFRpbWVvdXQ6IHVua25vd24gfSkuc2V0VGltZW91dCA9IChjYjogVGltZXJIYW5kbGVyLCBkZWxheT86IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgdGltZXJzW2lkXSA9IHsgdHlwZTogXCJ0aW1lb3V0XCIsIGNiLCBkZWxheTogZGVsYXkgfHwgMCwgbmV4dDogY3Vyck1zICsgKGRlbGF5IHx8IDApIH07XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2xlYXJUaW1lb3V0ID0gKGlkKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBpZCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgZGVsZXRlIHRpbWVyc1tpZF07XG4gICAgfVxuICB9O1xuICAod2luZG93IGFzIHVua25vd24gYXMgeyBzZXRJbnRlcnZhbDogdW5rbm93biB9KS5zZXRJbnRlcnZhbCA9IChjYjogVGltZXJIYW5kbGVyLCBkZWxheT86IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgY29uc3QgZCA9IE1hdGgubWF4KGRlbGF5IHx8IDAsIDEpO1xuICAgIHRpbWVyc1tpZF0gPSB7IHR5cGU6IFwiaW50ZXJ2YWxcIiwgY2IsIGRlbGF5OiBkLCBuZXh0OiBjdXJyTXMgKyBkIH07XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2xlYXJJbnRlcnZhbCA9IChpZCkgPT4ge1xuICAgIGlmICh0eXBlb2YgaWQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGRlbGV0ZSB0aW1lcnNbaWRdO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBzYWZlSW52b2tlVGltZXIoZm46IFRpbWVySGFuZGxlcikge1xuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIGZuID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIC8vIFN0cmluZyB0aW1lciBoYW5kbGVyIHJ1bnMgYXMgcGFnZSBzY3JpcHQgaW4gZ2xvYmFsIHNjb3BlIChIVE1MIHNwZWMpOyBGdW5jdGlvbiBjdG9yIG1hdGNoZXMgdGhhdCwgYXZvaWRzIGV2YWwuXG4gICAgICAgIG5ldyBGdW5jdGlvbihmbikoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIltUaWNrXSBlcnJvcjpcIiwgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLnN0YWNrKSB8fCBlKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gc2FmZUludm9rZVJhZihjYjogRnJhbWVSZXF1ZXN0Q2FsbGJhY2ssIHRzOiBudW1iZXIpIHtcbiAgICB0cnkge1xuICAgICAgY2IodHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJbVGlja10gZXJyb3I6XCIsIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5zdGFjaykgfHwgZSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYW5pbVN0YXRlID0gbmV3IFdlYWtNYXA8QW5pbWF0aW9uLCBBbmltRW50cnk+KCk7XG4gIGZ1bmN0aW9uIHN5bmNBbmltYXRpb25zKG1zOiBudW1iZXIpIHtcbiAgICBsZXQgYW5pbXM6IEFuaW1hdGlvbltdO1xuICAgIHRyeSB7XG4gICAgICBhbmltcyA9IGRvY3VtZW50LmdldEFuaW1hdGlvbnMoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBhIG9mIGFuaW1zKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IGEucGxheVN0YXRlO1xuICAgICAgaWYgKHN0YXRlID09PSBcImlkbGVcIiB8fCBzdGF0ZSA9PT0gXCJmaW5pc2hlZFwiKSB7XG4gICAgICAgIGFuaW1TdGF0ZS5kZWxldGUoYSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmF0ZSA9IHR5cGVvZiBhLnBsYXliYWNrUmF0ZSA9PT0gXCJudW1iZXJcIiA/IGEucGxheWJhY2tSYXRlIDogMTtcbiAgICAgIGlmIChyYXRlID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbGV0IHMgPSBhbmltU3RhdGUuZ2V0KGEpO1xuICAgICAgaWYgKCFzKSB7XG4gICAgICAgIGNvbnN0IGN0MCA9IHR5cGVvZiBhLmN1cnJlbnRUaW1lID09PSBcIm51bWJlclwiID8gYS5jdXJyZW50VGltZSA6IDA7XG4gICAgICAgIHMgPSB7IHN0YXJ0TXM6IG1zIC0gY3QwIC8gcmF0ZSwgcGF1c2VkQWNjdW06IDAsIHBhdXNlZEF0OiAtMSB9O1xuICAgICAgICBhbmltU3RhdGUuc2V0KGEsIHMpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlID09PSBcInBhdXNlZFwiKSB7XG4gICAgICAgIGlmIChzLnBhdXNlZEF0IDwgMCkge1xuICAgICAgICAgIHMucGF1c2VkQXQgPSBtcztcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChzLnBhdXNlZEF0ID49IDApIHtcbiAgICAgICAgcy5wYXVzZWRBY2N1bSArPSBtcyAtIHMucGF1c2VkQXQ7XG4gICAgICAgIHMucGF1c2VkQXQgPSAtMTtcbiAgICAgIH1cbiAgICAgIGEuY3VycmVudFRpbWUgPSAobXMgLSBzLnN0YXJ0TXMgLSBzLnBhdXNlZEFjY3VtKSAqIHJhdGU7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcHJvY2Vzcyh0aW1lc3RhbXBNczogbnVtYmVyKSB7XG4gICAgY3Vyck1zID0gdGltZXN0YW1wTXM7XG4gICAgdGltZU9mZnNldCA9IDA7XG4gICAgZm9yIChjb25zdCBpZCBvZiBPYmplY3Qua2V5cyh0aW1lcnMpKSB7XG4gICAgICBjb25zdCB0ID0gdGltZXJzW051bWJlcihpZCldO1xuICAgICAgaWYgKCF0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHQubmV4dCA8PSBjdXJyTXMpIHtcbiAgICAgICAgc2FmZUludm9rZVRpbWVyKHQuY2IpO1xuICAgICAgICBpZiAodC50eXBlID09PSBcInRpbWVvdXRcIikge1xuICAgICAgICAgIGRlbGV0ZSB0aW1lcnNbTnVtYmVyKGlkKV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdC5uZXh0ICs9IHQuZGVsYXk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJhZnMgPSByYWZRdWV1ZS5zcGxpY2UoMCk7XG4gICAgZm9yIChjb25zdCByIG9mIHJhZnMpIHtcbiAgICAgIHNhZmVJbnZva2VSYWYoci5jYiwgY3Vyck1zKTtcbiAgICB9XG4gICAgc3luY0FuaW1hdGlvbnMoY3Vyck1zKTtcbiAgfVxuXG4gIHdpbmRvdy5fX3B1cF90aWNrX18gPSB7IHByb2Nlc3MgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbnR5cGUgVmVjNCA9IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuXG5jb25zdCBNSVJST1JfUFJPUFMgPSBbXG4gIFwiYm9yZGVyUmFkaXVzXCIsXG4gIFwiYm9yZGVyVG9wTGVmdFJhZGl1c1wiLFxuICBcImJvcmRlclRvcFJpZ2h0UmFkaXVzXCIsXG4gIFwiYm9yZGVyQm90dG9tTGVmdFJhZGl1c1wiLFxuICBcImJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzXCIsXG4gIFwidHJhbnNmb3JtXCIsXG4gIFwidHJhbnNmb3JtT3JpZ2luXCIsXG4gIFwiZmlsdGVyXCIsXG4gIFwiY2xpcFBhdGhcIixcbiAgXCJib3hTaGFkb3dcIixcbiAgXCJvcGFjaXR5XCIsXG4gIFwibWl4QmxlbmRNb2RlXCIsXG4gIFwibWFza1wiLFxuICBcInpJbmRleFwiLFxuICBcInBvc2l0aW9uXCIsXG4gIFwibGVmdFwiLFxuICBcInRvcFwiLFxuICBcInJpZ2h0XCIsXG4gIFwiYm90dG9tXCIsXG5dIGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBjc3NDYXNlKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzLnJlcGxhY2UoL1tBLVpdL2csIChjKSA9PiBgLSR7Yy50b0xvd2VyQ2FzZSgpfWApO1xufVxuXG4vLyBUcmFjayB0aGUgb3ZlcmxheSBjYW52YXMgdG8gdGhlIHZpZGVvIGVsZW1lbnQncyBsaXZlIGJveCAocG9zaXRpb24sIHNpemXDl2RwciwgbWlycm9yZWQgdmlzdWFsIHN0eWxlcykuXG5leHBvcnQgZnVuY3Rpb24gc3luY092ZXJsYXkodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIGN2OiBIVE1MQ2FudmFzRWxlbWVudCk6IHZvaWQge1xuICBjb25zdCBjcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHZpZGVvKTtcbiAgY3Yuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gIC8vIG9mZnNldCogYXJlIHByZS10cmFuc2Zvcm0gY29vcmRzIGZyb20gb2Zmc2V0UGFyZW50J3MgcGFkZGluZyBlZGdlID0gdGhlIGFicyBjb250YWluaW5nLWJsb2NrIG9yaWdpbjsgbWFwIGRpcmVjdC5cbiAgY3Yuc3R5bGUubGVmdCA9IGAke3ZpZGVvLm9mZnNldExlZnR9cHhgO1xuICBjdi5zdHlsZS50b3AgPSBgJHt2aWRlby5vZmZzZXRUb3B9cHhgO1xuICBjdi5zdHlsZS53aWR0aCA9IGAke3ZpZGVvLm9mZnNldFdpZHRofXB4YDtcbiAgY3Yuc3R5bGUuaGVpZ2h0ID0gYCR7dmlkZW8ub2Zmc2V0SGVpZ2h0fXB4YDtcbiAgZm9yIChjb25zdCBwIG9mIE1JUlJPUl9QUk9QUykge1xuICAgIGlmIChwID09PSBcInBvc2l0aW9uXCIgfHwgcCA9PT0gXCJsZWZ0XCIgfHwgcCA9PT0gXCJ0b3BcIiB8fCBwID09PSBcInJpZ2h0XCIgfHwgcCA9PT0gXCJib3R0b21cIikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHYgPSBjcy5nZXRQcm9wZXJ0eVZhbHVlKGNzc0Nhc2UocCkpO1xuICAgIGlmICh2KSB7XG4gICAgICBjdi5zdHlsZS5zZXRQcm9wZXJ0eShjc3NDYXNlKHApLCB2KTtcbiAgICB9XG4gIH1cbiAgLy8gQmFja2luZyBzdG9yZSBhdCBvbi1zY3JlZW4gcGl4ZWwgc2l6ZSAocG9zdC10cmFuc2Zvcm0pIHNvIGRlY29kZSByZXNvbHV0aW9uIG1hdGNoZXMgZGlzcGxheWVkIHBpeGVscy5cbiAgY29uc3QgdnIgPSB2aWRlby5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgZHByID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgY29uc3QgdyA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQodnIud2lkdGggKiBkcHIpKTtcbiAgY29uc3QgaCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQodnIuaGVpZ2h0ICogZHByKSk7XG4gIGlmIChjdi53aWR0aCAhPT0gdykge1xuICAgIGN2LndpZHRoID0gdztcbiAgfVxuICBpZiAoY3YuaGVpZ2h0ICE9PSBoKSB7XG4gICAgY3YuaGVpZ2h0ID0gaDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBDYW52YXModmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIHNuYXA6IE9mZnNjcmVlbkNhbnZhcyB8IHVuZGVmaW5lZCk6IEhUTUxDYW52YXNFbGVtZW50IHtcbiAgY29uc3QgY3YgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICBjdi5kYXRhc2V0W1wicHVwVmlkZW9PdmVybGF5XCJdID0gXCIxXCI7XG4gIGN2LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcIm5vbmVcIjtcbiAgdmlkZW8uc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gIHZpZGVvLm11dGVkID0gdHJ1ZTtcbiAgY29uc3QgcGFyZW50ID0gdmlkZW8ucGFyZW50Tm9kZSB8fCBkb2N1bWVudC5ib2R5O1xuICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGN2LCB2aWRlby5uZXh0U2libGluZyk7XG4gIHN5bmNPdmVybGF5KHZpZGVvLCBjdik7XG4gIGlmIChzbmFwKSB7XG4gICAgdHJ5IHtcbiAgICAgIGN2LmdldENvbnRleHQoXCIyZFwiKSEuZHJhd0ltYWdlKHNuYXAsIDAsIDAsIGN2LndpZHRoLCBjdi5oZWlnaHQpO1xuICAgIH0gY2F0Y2gge31cbiAgfVxuICByZXR1cm4gY3Y7XG59XG5cbi8vIERyYXcgcmVjdCBmb3IgdGhlIGJpdG1hcCB3aXRoaW4gdGhlIGNhbnZhcyBwZXIgb2JqZWN0Rml0LlxuZXhwb3J0IGZ1bmN0aW9uIGZpdFJlY3Qoc3JjVzogbnVtYmVyLCBzcmNIOiBudW1iZXIsIGRzdFc6IG51bWJlciwgZHN0SDogbnVtYmVyLCBmaXQ6IHN0cmluZyk6IFZlYzQge1xuICBpZiAoZml0ID09PSBcIm5vbmVcIikge1xuICAgIHJldHVybiBbKGRzdFcgLSBzcmNXKSAvIDIsIChkc3RIIC0gc3JjSCkgLyAyLCBzcmNXLCBzcmNIXTtcbiAgfVxuICBpZiAoZml0ID09PSBcImNvbnRhaW5cIiB8fCBmaXQgPT09IFwic2NhbGUtZG93blwiKSB7XG4gICAgY29uc3Qgc2MgPSBNYXRoLm1pbihkc3RXIC8gc3JjVywgZHN0SCAvIHNyY0gpO1xuICAgIGNvbnN0IGsgPSBmaXQgPT09IFwic2NhbGUtZG93blwiID8gTWF0aC5taW4oMSwgc2MpIDogc2M7XG4gICAgY29uc3Qgd3MgPSBrICogc3JjVztcbiAgICBjb25zdCBocyA9IGsgKiBzcmNIO1xuICAgIHJldHVybiBbKGRzdFcgLSB3cykgLyAyLCAoZHN0SCAtIGhzKSAvIDIsIHdzLCBoc107XG4gIH1cbiAgaWYgKGZpdCA9PT0gXCJjb3ZlclwiKSB7XG4gICAgY29uc3Qgc2MyID0gTWF0aC5tYXgoZHN0VyAvIHNyY1csIGRzdEggLyBzcmNIKTtcbiAgICBjb25zdCB3czIgPSBzYzIgKiBzcmNXO1xuICAgIGNvbnN0IGhzMiA9IHNjMiAqIHNyY0g7XG4gICAgcmV0dXJuIFsoZHN0VyAtIHdzMikgLyAyLCAoZHN0SCAtIGhzMikgLyAyLCB3czIsIGhzMl07XG4gIH1cbiAgcmV0dXJuIFswLCAwLCBkc3RXLCBkc3RIXTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmV4cG9ydCBjb25zdCBTQ0hFTUUgPSBcInB1cC1mcmFtZTovL1wiO1xuZXhwb3J0IGNvbnN0IEFIRUFEID0gMTA7XG5leHBvcnQgY29uc3QgVEFHID0gXCJbVmlkZW9Ib29rXVwiO1xuXG5leHBvcnQgY29uc3QgTUVESUFfRVJSX05FVFdPUksgPSAyO1xuZXhwb3J0IGNvbnN0IE1FRElBX0VSUl9ERUNPREUgPSAzO1xuZXhwb3J0IGNvbnN0IEhBVkVfTk9USElORyA9IDA7XG5leHBvcnQgY29uc3QgSEFWRV9NRVRBREFUQSA9IDE7XG5leHBvcnQgY29uc3QgSEFWRV9FTk9VR0hfREFUQSA9IDQ7XG5leHBvcnQgY29uc3QgTkVUV09SS19FTVBUWSA9IDA7XG5leHBvcnQgY29uc3QgTkVUV09SS19JRExFID0gMTtcbmV4cG9ydCBjb25zdCBORVRXT1JLX0xPQURJTkcgPSAyO1xuZXhwb3J0IGNvbnN0IE5FVFdPUktfTk9fU09VUkNFID0gMztcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb01ldGEge1xuICBpZDogc3RyaW5nO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnJhbWVXaWR0aDogbnVtYmVyO1xuICBmcmFtZUhlaWdodDogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0ZyYW1lTWV0YSB7XG4gIHByZXNlbnRhdGlvblRpbWU6IG51bWJlcjtcbiAgZXhwZWN0ZWREaXNwbGF5VGltZTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgbWVkaWFUaW1lOiBudW1iZXI7XG4gIHByZXNlbnRlZEZyYW1lczogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBGcmFtZUNiID0gKG5vdzogbnVtYmVyLCBtZXRhOiBWaWRlb0ZyYW1lTWV0YSkgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBNZWRpYUVycm9yTGlrZSB7XG4gIGNvZGU6IG51bWJlcjtcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvQ2FjaGUge1xuICBiaXRtYXBzOiBNYXA8bnVtYmVyLCBJbWFnZUJpdG1hcD47XG4gIGluRmxpZ2h0OiBNYXA8bnVtYmVyLCBQcm9taXNlPEltYWdlQml0bWFwIHwgdW5kZWZpbmVkPj47XG4gIHJlYWRlcnM6IE1hcDxWaWRlb1N0YXRlLCBudW1iZXI+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvU3RhdGUge1xuICBtZXRhPzogVmlkZW9NZXRhO1xuICBjdjogSFRNTENhbnZhc0VsZW1lbnQ7XG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICBwYXVzZWQ6IGJvb2xlYW47XG4gIGN1cnJlbnRUaW1lOiBudW1iZXI7XG4gIGVuZGVkOiBib29sZWFuO1xuICBsYXN0RHJhd25JZHg6IG51bWJlcjtcbiAgZGVhZDogYm9vbGVhbjtcbiAgb2JqZWN0Rml0OiBzdHJpbmc7XG4gIHJlYWR5U3RhdGU6IG51bWJlcjtcbiAgbmV0d29ya1N0YXRlOiBudW1iZXI7XG4gIHNlZWtpbmc6IGJvb2xlYW47XG4gIHdhaXRpbmc6IGJvb2xlYW47XG4gIGVycm9yOiBNZWRpYUVycm9yTGlrZSB8IHVuZGVmaW5lZDtcbiAgcHJlc2VudGVkRnJhbWVzOiBudW1iZXI7XG4gIG1heFJlYWNoZWQ6IG51bWJlcjtcbiAgcnZmYzogTWFwPG51bWJlciwgRnJhbWVDYj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGltZVJhbmdlc0xpa2Uge1xuICBsZW5ndGg6IG51bWJlcjtcbiAgc3RhcnQoaTogbnVtYmVyKTogbnVtYmVyO1xuICBlbmQoaTogbnVtYmVyKTogbnVtYmVyO1xufVxuXG4vLyBXaG9sZSBjbGlwIGlzIGRlY29kZS1vbi1kZW1hbmQsIHNvIHRoZSBhdmFpbGFibGUgcmFuZ2UgaXMgYWx3YXlzIFswLCBlbmRdIChvbmUgVGltZVJhbmdlcyBlbnRyeSkuXG5leHBvcnQgZnVuY3Rpb24gdGltZVJhbmdlcyhlbmQ6IG51bWJlcik6IFRpbWVSYW5nZXNMaWtlIHtcbiAgcmV0dXJuIHsgbGVuZ3RoOiBlbmQgPiAwID8gMSA6IDAsIHN0YXJ0OiAoKSA9PiAwLCBlbmQ6ICgpID0+IGVuZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlyZShlbDogRXZlbnRUYXJnZXQsIHR5cGU6IHN0cmluZyk6IHZvaWQge1xuICBlbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCh0eXBlKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgdHlwZSB7IFZpZGVvSG9vayB9IGZyb20gXCIuL2hvb2tcIjtcbmltcG9ydCB7IGZpdFJlY3QsIHN5bmNPdmVybGF5IH0gZnJvbSBcIi4vb3ZlcmxheVwiO1xuaW1wb3J0IHsgQUhFQUQsIGZpcmUsIHR5cGUgVmlkZW9GcmFtZU1ldGEsIHR5cGUgVmlkZW9TdGF0ZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmZ1bmN0aW9uIGZpcmVGcmFtZUNhbGxiYWNrcyhzdGF0ZTogVmlkZW9TdGF0ZSk6IHZvaWQge1xuICBpZiAoc3RhdGUucnZmYy5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGNicyA9IFsuLi5zdGF0ZS5ydmZjLnZhbHVlcygpXTtcbiAgc3RhdGUucnZmYy5jbGVhcigpO1xuICBjb25zdCBub3cgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgY29uc3QgbWV0YTogVmlkZW9GcmFtZU1ldGEgPSB7XG4gICAgcHJlc2VudGF0aW9uVGltZTogbm93LFxuICAgIGV4cGVjdGVkRGlzcGxheVRpbWU6IG5vdyxcbiAgICB3aWR0aDogc3RhdGUubWV0YSEuZnJhbWVXaWR0aCxcbiAgICBoZWlnaHQ6IHN0YXRlLm1ldGEhLmZyYW1lSGVpZ2h0LFxuICAgIG1lZGlhVGltZTogc3RhdGUuY3VycmVudFRpbWUsXG4gICAgcHJlc2VudGVkRnJhbWVzOiBzdGF0ZS5wcmVzZW50ZWRGcmFtZXMsXG4gIH07XG4gIGZvciAoY29uc3QgY2Igb2YgY2JzKSB7XG4gICAgY2Iobm93LCBtZXRhKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBwYWludChob29rOiBWaWRlb0hvb2ssIHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBzdGF0ZTogVmlkZW9TdGF0ZSwgaWR4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYyA9IGhvb2suY2FjaGUuY2FjaGVPZihzdGF0ZS5tZXRhIS5pZCk7XG4gIGMucmVhZGVycy5zZXQoc3RhdGUsIGlkeCk7XG4gIGxldCBibSA9IGMuYml0bWFwcy5nZXQoaWR4KTtcbiAgaWYgKCFibSkge1xuICAgIGhvb2suY2FjaGUucHJlZmV0Y2goc3RhdGUsIGlkeCArIDEsIEFIRUFEIC0gMSk7XG4gICAgY29uc3QgZmV0Y2hlZCA9IGF3YWl0IGhvb2suY2FjaGUuZmV0Y2goc3RhdGUsIGlkeCk7XG4gICAgaWYgKGhvb2suc2Vzc2lvbnMuZ2V0KHZpZGVvKSAhPT0gc3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFmZXRjaGVkKSB7XG4gICAgICBpZiAoIXN0YXRlLnBhdXNlZCAmJiAhc3RhdGUud2FpdGluZykge1xuICAgICAgICBzdGF0ZS53YWl0aW5nID0gdHJ1ZTtcbiAgICAgICAgZmlyZSh2aWRlbywgXCJ3YWl0aW5nXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBibSA9IGZldGNoZWQ7XG4gIH1cbiAgaWYgKHN0YXRlLndhaXRpbmcpIHtcbiAgICBzdGF0ZS53YWl0aW5nID0gZmFsc2U7XG4gICAgaWYgKCFzdGF0ZS5wYXVzZWQpIHtcbiAgICAgIGZpcmUodmlkZW8sIFwicGxheWluZ1wiKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgY3YgPSBzdGF0ZS5jdjtcbiAgY29uc3QgciA9IGZpdFJlY3QoYm0ud2lkdGgsIGJtLmhlaWdodCwgY3Yud2lkdGgsIGN2LmhlaWdodCwgc3RhdGUub2JqZWN0Rml0KTtcbiAgc3RhdGUuY3R4LmNsZWFyUmVjdCgwLCAwLCBjdi53aWR0aCwgY3YuaGVpZ2h0KTtcbiAgc3RhdGUuY3R4LmRyYXdJbWFnZShibSwgclswXSwgclsxXSwgclsyXSwgclszXSk7XG4gIHN0YXRlLmxhc3REcmF3bklkeCA9IGlkeDtcbiAgc3RhdGUucHJlc2VudGVkRnJhbWVzKys7XG4gIGZpcmVGcmFtZUNhbGxiYWNrcyhzdGF0ZSk7XG4gIGhvb2suY2FjaGUucHJlZmV0Y2goc3RhdGUsIGlkeCArIDEsIEFIRUFEKTtcbiAgaG9vay5jYWNoZS5ldmljdChjKTtcbn1cblxuLy8gVmlydHVhbC10aW1lIHRpY2s6IHN5bmMgb3ZlcmxheXMsIGFkdmFuY2UgZWFjaCBob29rZWQgdmlkZW8ncyBjbG9jayAobG9vcC9lbmQpLCBwYWludCB0aGUgZHVlIGZyYW1lLlxuZXhwb3J0IGZ1bmN0aW9uIGFkdmFuY2UoaG9vazogVmlkZW9Ib29rLCB0aW1lc3RhbXBNczogbnVtYmVyKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIGNvbnN0IGR0ID0gTWF0aC5tYXgoMCwgdGltZXN0YW1wTXMgLSBob29rLmN1cnJNcykgLyAxMDAwO1xuICBob29rLmN1cnJNcyA9IHRpbWVzdGFtcE1zO1xuICBjb25zdCBwczogUHJvbWlzZTx1bmtub3duPltdID0gW107XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ2aWRlb1wiKS5mb3JFYWNoKChlbCkgPT4ge1xuICAgIGNvbnN0IHZpZGVvID0gZWwgYXMgSFRNTFZpZGVvRWxlbWVudDtcbiAgICBjb25zdCBzdGF0ZSA9IGhvb2suc2Vzc2lvbnMuZ2V0KHZpZGVvKTtcbiAgICBpZiAoIXN0YXRlIHx8IHN0YXRlLmRlYWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3luY092ZXJsYXkodmlkZW8sIHN0YXRlLmN2KTtcbiAgICBpZiAoIXN0YXRlLm1ldGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gRWxlbWVudCBncmV3IHBhc3QgdGhlIGRlY29kZWQgKGRvd25zY2FsZWQpIHJlcyDihpIgcmUtZGVjb2RlIGF0IG5hdGl2ZSwgb25lLXNob3QgKGNvdmVycyB6b29tKS5cbiAgICBpZiAoXG4gICAgICBzdGF0ZS5tZXRhLmZyYW1lV2lkdGggPCBzdGF0ZS5tZXRhLndpZHRoICYmXG4gICAgICBzdGF0ZS5jdi53aWR0aCA+IHN0YXRlLm1ldGEuZnJhbWVXaWR0aCAqIDEuMDUgJiZcbiAgICAgICFob29rLmF0dGFjaGluZy5oYXModmlkZW8pXG4gICAgKSB7XG4gICAgICBob29rLnJlYXR0YWNoKHZpZGVvLCBzdGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghc3RhdGUucGF1c2VkICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgc3RhdGUuY3VycmVudFRpbWUgKz0gZHQgKiAodmlkZW8ucGxheWJhY2tSYXRlIHx8IDEpO1xuICAgICAgc3RhdGUubWF4UmVhY2hlZCA9IE1hdGgubWF4KHN0YXRlLm1heFJlYWNoZWQsIHN0YXRlLmN1cnJlbnRUaW1lKTtcbiAgICAgIGlmIChzdGF0ZS5jdXJyZW50VGltZSA+PSBzdGF0ZS5tZXRhLmR1cmF0aW9uKSB7XG4gICAgICAgIGlmICh2aWRlby5sb29wKSB7XG4gICAgICAgICAgc3RhdGUuY3VycmVudFRpbWUgPSBzdGF0ZS5jdXJyZW50VGltZSAlIHN0YXRlLm1ldGEuZHVyYXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUuY3VycmVudFRpbWUgPSBzdGF0ZS5tZXRhLmR1cmF0aW9uO1xuICAgICAgICAgIHN0YXRlLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICAgICAgICAgIGZpcmUodmlkZW8sIFwiZW5kZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpcmUodmlkZW8sIFwidGltZXVwZGF0ZVwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaWR4ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChzdGF0ZS5jdXJyZW50VGltZSAqIHN0YXRlLm1ldGEuZnBzKSk7XG4gICAgaWYgKGlkeCA9PT0gc3RhdGUubGFzdERyYXduSWR4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHBzLnB1c2gocGFpbnQoaG9vaywgdmlkZW8sIHN0YXRlLCBpZHgpKTtcbiAgfSk7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcyk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgeyBTQ0hFTUUsIHR5cGUgVmlkZW9DYWNoZSwgdHlwZSBWaWRlb1N0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLy8gUGVyLXNlc3Npb24gYml0bWFwIGNhY2hlOiBmZXRjaGVzIFJHQkEgZnJhbWVzIGZyb20gdGhlIGZyYW1lIHByb3RvY29sLCBkZWR1cGVzIGluLWZsaWdodCwgZXZpY3RzIGJlaGluZCByZWFkZXJzLlxuZXhwb3J0IGNsYXNzIEZyYW1lQ2FjaGUge1xuICBwcml2YXRlIF9jYWNoZXMgPSBuZXcgTWFwPHN0cmluZywgVmlkZW9DYWNoZT4oKTtcblxuICBjYWNoZU9mKGlkOiBzdHJpbmcpOiBWaWRlb0NhY2hlIHtcbiAgICBsZXQgYyA9IHRoaXMuX2NhY2hlcy5nZXQoaWQpO1xuICAgIGlmICghYykge1xuICAgICAgYyA9IHsgYml0bWFwczogbmV3IE1hcCgpLCBpbkZsaWdodDogbmV3IE1hcCgpLCByZWFkZXJzOiBuZXcgTWFwKCkgfTtcbiAgICAgIHRoaXMuX2NhY2hlcy5zZXQoaWQsIGMpO1xuICAgIH1cbiAgICByZXR1cm4gYztcbiAgfVxuXG4gIGZldGNoKHN0YXRlOiBWaWRlb1N0YXRlLCBpZHg6IG51bWJlcik6IFByb21pc2U8SW1hZ2VCaXRtYXAgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBtZXRhID0gc3RhdGUubWV0YTtcbiAgICBpZiAoIW1ldGEpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgY29uc3QgYyA9IHRoaXMuY2FjaGVPZihtZXRhLmlkKTtcbiAgICBjb25zdCBleGlzdGluZyA9IGMuaW5GbGlnaHQuZ2V0KGlkeCk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICAgIGNvbnN0IGNhY2hlZCA9IGMuYml0bWFwcy5nZXQoaWR4KTtcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNhY2hlZCk7XG4gICAgfVxuICAgIGNvbnN0IHcgPSBtZXRhLmZyYW1lV2lkdGg7XG4gICAgY29uc3QgaCA9IG1ldGEuZnJhbWVIZWlnaHQ7XG4gICAgY29uc3QgcCA9IGZldGNoKGAke1NDSEVNRX1mcmFtZT9pZD0ke21ldGEuaWR9JmlkeD0ke2lkeH1gKVxuICAgICAgLnRoZW4oKHIpID0+IChyLm9rID8gci5hcnJheUJ1ZmZlcigpIDogdW5kZWZpbmVkKSlcbiAgICAgIC50aGVuKChidWYpID0+XG4gICAgICAgIGJ1ZiAmJiBidWYuYnl0ZUxlbmd0aCA9PT0gdyAqIGggKiA0XG4gICAgICAgICAgPyBjcmVhdGVJbWFnZUJpdG1hcChuZXcgSW1hZ2VEYXRhKG5ldyBVaW50OENsYW1wZWRBcnJheShidWYpLCB3LCBoKSlcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIClcbiAgICAgIC50aGVuKChibSkgPT4ge1xuICAgICAgICBjLmluRmxpZ2h0LmRlbGV0ZShpZHgpO1xuICAgICAgICBpZiAoYm0pIHtcbiAgICAgICAgICBjLmJpdG1hcHMuc2V0KGlkeCwgYm0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBibTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICBjLmluRmxpZ2h0LmRlbGV0ZShpZHgpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG4gICAgYy5pbkZsaWdodC5zZXQoaWR4LCBwKTtcbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIHByZWZldGNoKHN0YXRlOiBWaWRlb1N0YXRlLCBmcm9tSWR4OiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRhID0gc3RhdGUubWV0YTtcbiAgICBpZiAoIW1ldGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWF4SWR4ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChtZXRhLmR1cmF0aW9uICogbWV0YS5mcHMpKTtcbiAgICBmb3IgKGxldCBpID0gZnJvbUlkeDsgaSA8IGZyb21JZHggKyBjb3VudDsgaSsrKSB7XG4gICAgICBpZiAoaSA8IDEgfHwgaSA+IG1heElkeCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZvaWQgdGhpcy5mZXRjaChzdGF0ZSwgaSk7XG4gICAgfVxuICB9XG5cbiAgZXZpY3QoYzogVmlkZW9DYWNoZSk6IHZvaWQge1xuICAgIGxldCBtaW5JZHggPSBJbmZpbml0eTtcbiAgICBjLnJlYWRlcnMuZm9yRWFjaCgoaWR4KSA9PiB7XG4gICAgICBpZiAoaWR4IDwgbWluSWR4KSB7XG4gICAgICAgIG1pbklkeCA9IGlkeDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShtaW5JZHgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZsb29yID0gbWluSWR4IC0gMjtcbiAgICBjLmJpdG1hcHMuZm9yRWFjaCgoYm0sIGlkeCkgPT4ge1xuICAgICAgaWYgKGlkeCA8IGZsb29yKSB7XG4gICAgICAgIGJtLmNsb3NlKCk7XG4gICAgICAgIGMuYml0bWFwcy5kZWxldGUoaWR4KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIERyb3AgYSByZWFkZXI7IHdoZW4gdGhlIGxhc3QgbGVhdmVzLCBjbG9zZSBiaXRtYXBzIGFuZCB0ZWxsIHRoZSBzZXJ2ZXIgdG8gcmVsZWFzZSB0aGUgZGVjb2RlIHNlc3Npb24uXG4gIHJlbGVhc2UoaWQ6IHN0cmluZywgc3RhdGU6IFZpZGVvU3RhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBjID0gdGhpcy5fY2FjaGVzLmdldChpZCk7XG4gICAgaWYgKCFjKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGMucmVhZGVycy5kZWxldGUoc3RhdGUpO1xuICAgIGlmIChjLnJlYWRlcnMuc2l6ZSA+IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYy5iaXRtYXBzLmZvckVhY2goKGJtKSA9PiB7XG4gICAgICBibS5jbG9zZSgpO1xuICAgIH0pO1xuICAgIHRoaXMuX2NhY2hlcy5kZWxldGUoaWQpO1xuICAgIGZldGNoKGAke1NDSEVNRX1jbG9zZT9pZD0ke2lkfWAsIHsga2VlcGFsaXZlOiB0cnVlIH0pO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgdHlwZSB7IFZpZGVvSG9vayB9IGZyb20gXCIuL2hvb2tcIjtcbmltcG9ydCB7IHR5cGUgRnJhbWVDYiwgZmlyZSwgdGltZVJhbmdlcywgdHlwZSBWaWRlb1N0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLy8gT3ZlcnJpZGUgdGhlIEhUTUxNZWRpYUVsZW1lbnQgc3VyZmFjZSBmb3IgaG9va2VkIDx2aWRlbz47IHVuaG9va2VkIGVsZW1lbnRzIGZhbGwgdGhyb3VnaCB0byBuYXRpdmUuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbE1lZGlhU2hpbShob29rOiBWaWRlb0hvb2spOiB2b2lkIHtcbiAgY29uc3QgSFZFID0gSFRNTFZpZGVvRWxlbWVudC5wcm90b3R5cGU7XG4gIGNvbnN0IE1FRElBID0gSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGU7XG4gIGNvbnN0IG1kZXNjID0gKHA6IHN0cmluZykgPT4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVkUsIHApIHx8IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTUVESUEsIHApO1xuICBjb25zdCBjdERlc2MgPSBtZGVzYyhcImN1cnJlbnRUaW1lXCIpO1xuICBjb25zdCBzcmNEZXNjID0gbWRlc2MoXCJzcmNcIik7XG4gIGNvbnN0IHJhdGVEZXNjID0gbWRlc2MoXCJwbGF5YmFja1JhdGVcIik7XG4gIGNvbnN0IG9yaWdQYXVzZSA9IEhWRS5wYXVzZTtcbiAgY29uc3Qgb3JpZ1JWRkMgPSBIVkUucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjaztcbiAgY29uc3Qgb3JpZ0NhbmNlbFJWRkMgPSBIVkUuY2FuY2VsVmlkZW9GcmFtZUNhbGxiYWNrO1xuICBjb25zdCBvcmlnUXVhbGl0eSA9IEhWRS5nZXRWaWRlb1BsYXliYWNrUXVhbGl0eTtcbiAgY29uc3Qgb3JpZ0xvYWQgPSBIVkUubG9hZDtcbiAgY29uc3Qgc2Vzc2lvbnMgPSBob29rLnNlc3Npb25zO1xuXG4gIC8vIFNlc3Npb24tYmFja2VkIHJlYWQtb25seSBwcm9wZXJ0eSB3aXRoIG5hdGl2ZSBmYWxsYmFjayB3aGVuIHRoZSBlbGVtZW50IGlzbid0IGhvb2tlZC5cbiAgY29uc3QgZGVmID0gKHByb3A6IHN0cmluZywgcGljazogKHM6IFZpZGVvU3RhdGUpID0+IHVua25vd24pID0+IHtcbiAgICBjb25zdCBuYXRpdmVHZXQgPSBtZGVzYyhwcm9wKT8uZ2V0O1xuICAgIGlmICghbmF0aXZlR2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG1lZGlhX3NoaW06IG5vIG5hdGl2ZSBnZXR0ZXIgZm9yICR7cHJvcH1gKTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhWRSwgcHJvcCwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHMgPyBwaWNrKHMpIDogbmF0aXZlR2V0LmNhbGwodGhpcyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xuICBkZWYoXCJwYXVzZWRcIiwgKHMpID0+IHMucGF1c2VkKTtcbiAgZGVmKFwiZW5kZWRcIiwgKHMpID0+IHMuZW5kZWQpO1xuICBkZWYoXCJyZWFkeVN0YXRlXCIsIChzKSA9PiBzLnJlYWR5U3RhdGUpO1xuICBkZWYoXCJuZXR3b3JrU3RhdGVcIiwgKHMpID0+IHMubmV0d29ya1N0YXRlKTtcbiAgZGVmKFwiZXJyb3JcIiwgKHMpID0+IHMuZXJyb3IgPz8gbnVsbCk7XG4gIGRlZihcInNlZWtpbmdcIiwgKHMpID0+IHMuc2Vla2luZyk7XG4gIGRlZihcImJ1ZmZlcmVkXCIsIChzKSA9PiB0aW1lUmFuZ2VzKHMubWV0YSA/IHMubWV0YS5kdXJhdGlvbiA6IDApKTtcbiAgZGVmKFwic2Vla2FibGVcIiwgKHMpID0+IHRpbWVSYW5nZXMocy5tZXRhID8gcy5tZXRhLmR1cmF0aW9uIDogMCkpO1xuICBkZWYoXCJwbGF5ZWRcIiwgKHMpID0+IHRpbWVSYW5nZXMocy5tYXhSZWFjaGVkKSk7XG5cbiAgSFZFLnBsYXkgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzKSB7XG4gICAgICByZXR1cm4gaG9vay5hdHRhY2godGhpcykudGhlbigobnMpID0+IHtcbiAgICAgICAgaWYgKG5zKSB7XG4gICAgICAgICAgaG9vay5yZXN1bWUodGhpcywgbnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaG9vay5yZXN1bWUodGhpcywgcyk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9O1xuICBIVkUucGF1c2UgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzKSB7XG4gICAgICBvcmlnUGF1c2UuY2FsbCh0aGlzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFzLnBhdXNlZCkge1xuICAgICAgcy5wYXVzZWQgPSB0cnVlO1xuICAgICAgZmlyZSh0aGlzLCBcInBhdXNlXCIpO1xuICAgIH1cbiAgfTtcbiAgaWYgKGN0RGVzYz8uZ2V0ICYmIGN0RGVzYy5zZXQpIHtcbiAgICBjb25zdCBjdEdldCA9IGN0RGVzYy5nZXQ7XG4gICAgY29uc3QgY3RTZXQgPSBjdERlc2Muc2V0O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVkUsIFwiY3VycmVudFRpbWVcIiwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHMgPyBzLmN1cnJlbnRUaW1lIDogY3RHZXQuY2FsbCh0aGlzKTtcbiAgICAgIH0sXG4gICAgICBzZXQodGhpczogSFRNTFZpZGVvRWxlbWVudCwgdDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgICAgIGlmICghcykge1xuICAgICAgICAgIGN0U2V0LmNhbGwodGhpcywgdCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGR1ciA9IHMubWV0YSA/IHMubWV0YS5kdXJhdGlvbiA6IHQ7XG4gICAgICAgIHMuY3VycmVudFRpbWUgPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0LCBkdXIpKTtcbiAgICAgICAgcy5tYXhSZWFjaGVkID0gTWF0aC5tYXgocy5tYXhSZWFjaGVkLCBzLmN1cnJlbnRUaW1lKTtcbiAgICAgICAgaWYgKHMuY3VycmVudFRpbWUgPCBkdXIpIHtcbiAgICAgICAgICBzLmVuZGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcy5zZWVraW5nID0gdHJ1ZTtcbiAgICAgICAgZmlyZSh0aGlzLCBcInNlZWtpbmdcIik7XG4gICAgICAgIHMuc2Vla2luZyA9IGZhbHNlO1xuICAgICAgICBmaXJlKHRoaXMsIFwic2Vla2VkXCIpO1xuICAgICAgICBmaXJlKHRoaXMsIFwidGltZXVwZGF0ZVwiKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgaWYgKHJhdGVEZXNjPy5zZXQpIHtcbiAgICBjb25zdCByYXRlU2V0ID0gcmF0ZURlc2Muc2V0O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVkUsIFwicGxheWJhY2tSYXRlXCIsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogcmF0ZURlc2MuZ2V0LFxuICAgICAgc2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQsIHI6IG51bWJlcikge1xuICAgICAgICByYXRlU2V0LmNhbGwodGhpcywgcik7XG4gICAgICAgIGlmIChzZXNzaW9ucy5oYXModGhpcykpIHtcbiAgICAgICAgICBmaXJlKHRoaXMsIFwicmF0ZWNoYW5nZVwiKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBIVkUucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50LCBjYik6IG51bWJlciB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICBpZiAoIXMpIHtcbiAgICAgIHJldHVybiBvcmlnUlZGQy5jYWxsKHRoaXMsIGNiKTtcbiAgICB9XG4gICAgY29uc3QgaWQgPSArK2hvb2sucnZmY1NlcTtcbiAgICBzLnJ2ZmMuc2V0KGlkLCBjYiBhcyBGcmFtZUNiKTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIEhWRS5jYW5jZWxWaWRlb0ZyYW1lQ2FsbGJhY2sgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCwgaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzKSB7XG4gICAgICBvcmlnQ2FuY2VsUlZGQy5jYWxsKHRoaXMsIGlkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcy5ydmZjLmRlbGV0ZShpZCk7XG4gIH07XG4gIEhWRS5nZXRWaWRlb1BsYXliYWNrUXVhbGl0eSA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICBpZiAoIXMpIHtcbiAgICAgIHJldHVybiBvcmlnUXVhbGl0eS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRpb25UaW1lOiBwZXJmb3JtYW5jZS5ub3coKSxcbiAgICAgIHRvdGFsVmlkZW9GcmFtZXM6IHMucHJlc2VudGVkRnJhbWVzLFxuICAgICAgZHJvcHBlZFZpZGVvRnJhbWVzOiAwLFxuICAgICAgY29ycnVwdGVkVmlkZW9GcmFtZXM6IDAsXG4gICAgfSBhcyBWaWRlb1BsYXliYWNrUXVhbGl0eTtcbiAgfTtcbiAgSFZFLmxvYWQgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGlmICghc2Vzc2lvbnMuaGFzKHRoaXMpKSB7XG4gICAgICByZXR1cm4gb3JpZ0xvYWQuY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgaG9vay5kZXRhY2godGhpcyk7XG4gICAgZmlyZSh0aGlzLCBcImVtcHRpZWRcIik7XG4gICAgdGhpcy5fX3B1cExhc3RTcmMgPSB1bmRlZmluZWQ7XG4gICAgaG9vay5hdHRhY2godGhpcyk7XG4gIH07XG4gIGlmIChzcmNEZXNjPy5zZXQpIHtcbiAgICBjb25zdCBzcmNTZXQgPSBzcmNEZXNjLnNldDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFZFLCBcInNyY1wiLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IHNyY0Rlc2MuZ2V0LFxuICAgICAgc2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQsIHY6IHN0cmluZykge1xuICAgICAgICBzcmNTZXQuY2FsbCh0aGlzLCB2KTtcbiAgICAgICAgaG9vay5vblNyY0NoYW5nZSh0aGlzKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmltcG9ydCB0eXBlIHsgVmlkZW9Ib29rIH0gZnJvbSBcIi4vaG9va1wiO1xuaW1wb3J0IHtcbiAgQUhFQUQsXG4gIGZpcmUsXG4gIEhBVkVfRU5PVUdIX0RBVEEsXG4gIEhBVkVfTUVUQURBVEEsXG4gIEhBVkVfTk9USElORyxcbiAgTUVESUFfRVJSX0RFQ09ERSxcbiAgTUVESUFfRVJSX05FVFdPUkssXG4gIHR5cGUgTWVkaWFFcnJvckxpa2UsXG4gIE5FVFdPUktfRU1QVFksXG4gIE5FVFdPUktfSURMRSxcbiAgTkVUV09SS19MT0FESU5HLFxuICBORVRXT1JLX05PX1NPVVJDRSxcbiAgU0NIRU1FLFxuICBUQUcsXG4gIHR5cGUgVmlkZW9NZXRhLFxuICB0eXBlIFZpZGVvU3RhdGUsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0YWNoQXJncyB7XG4gIHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50O1xuICBzdGF0ZTogVmlkZW9TdGF0ZTtcbiAgc3JjOiBzdHJpbmc7XG4gIGJpcnRoTXM6IG51bWJlcjtcbiAgbmF0aXZlOiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmV3VmlkZW9TdGF0ZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgY3Y6IEhUTUxDYW52YXNFbGVtZW50KTogVmlkZW9TdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgbWV0YTogdW5kZWZpbmVkLFxuICAgIGN2LFxuICAgIGN0eDogY3YuZ2V0Q29udGV4dChcIjJkXCIpISxcbiAgICBwYXVzZWQ6ICEodmlkZW8uYXV0b3BsYXkgfHwgIXZpZGVvLnBhdXNlZCksXG4gICAgY3VycmVudFRpbWU6IDAsXG4gICAgZW5kZWQ6IGZhbHNlLFxuICAgIGxhc3REcmF3bklkeDogLTEsXG4gICAgZGVhZDogZmFsc2UsXG4gICAgb2JqZWN0Rml0OiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh2aWRlbykub2JqZWN0Rml0IHx8IFwiZmlsbFwiLFxuICAgIHJlYWR5U3RhdGU6IEhBVkVfTk9USElORyxcbiAgICBuZXR3b3JrU3RhdGU6IE5FVFdPUktfRU1QVFksXG4gICAgc2Vla2luZzogZmFsc2UsXG4gICAgd2FpdGluZzogZmFsc2UsXG4gICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICBwcmVzZW50ZWRGcmFtZXM6IDAsXG4gICAgbWF4UmVhY2hlZDogMCxcbiAgICBydmZjOiBuZXcgTWFwKCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGZhaWxPcGVuKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBzdGF0ZTogVmlkZW9TdGF0ZSwgZXJyb3I6IE1lZGlhRXJyb3JMaWtlKTogdW5kZWZpbmVkIHtcbiAgc3RhdGUuZGVhZCA9IHRydWU7XG4gIHN0YXRlLmVycm9yID0gZXJyb3I7XG4gIHN0YXRlLm5ldHdvcmtTdGF0ZSA9IE5FVFdPUktfTk9fU09VUkNFO1xuICBjb25zb2xlLmVycm9yKFRBRywgYCR7ZXJyb3IubWVzc2FnZX0gc3JjPSR7dmlkZW8uc3JjIHx8IHZpZGVvLmN1cnJlbnRTcmN9YCk7XG4gIGZpcmUodmlkZW8sIFwiZXJyb3JcIik7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8vIE9wZW4gdGhlIGZyYW1lIHNlcnZlciBzZXNzaW9uLCB0aGVuIGVtaXQgdGhlIEhUTUxNZWRpYUVsZW1lbnQgbG9hZCBzZXF1ZW5jZSAocmVhZHlTdGF0ZS9uZXR3b3JrU3RhdGUgKyBldmVudHMpLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5TZXNzaW9uKGhvb2s6IFZpZGVvSG9vaywgYXJnczogQXR0YWNoQXJncyk6IFByb21pc2U8VmlkZW9TdGF0ZSB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IHZpZGVvLCBzdGF0ZSwgc3JjLCBiaXJ0aE1zLCBuYXRpdmUgfSA9IGFyZ3M7XG4gIGNvbnN0IGZwcyA9IE51bWJlci5wYXJzZUludCh2aWRlby5kYXRhc2V0W1wicHVwRnBzXCJdIHx8IFwiMzBcIiwgMTApO1xuICBzdGF0ZS5uZXR3b3JrU3RhdGUgPSBORVRXT1JLX0xPQURJTkc7XG4gIGZpcmUodmlkZW8sIFwibG9hZHN0YXJ0XCIpO1xuICBsZXQgcmVzOiBSZXNwb25zZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBxID0gbmF0aXZlID8gXCJcIiA6IGAmdz0ke3N0YXRlLmN2LndpZHRofSZoPSR7c3RhdGUuY3YuaGVpZ2h0fSZmaXQ9JHtlbmNvZGVVUklDb21wb25lbnQoc3RhdGUub2JqZWN0Rml0KX1gO1xuICAgIHJlcyA9IGF3YWl0IGZldGNoKGAke1NDSEVNRX1vcGVuP3NyYz0ke2VuY29kZVVSSUNvbXBvbmVudChzcmMpfSZmcHM9JHtmcHN9JHtxfWApO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhaWxPcGVuKHZpZGVvLCBzdGF0ZSwge1xuICAgICAgY29kZTogTUVESUFfRVJSX05FVFdPUkssXG4gICAgICBtZXNzYWdlOiBgb3BlbiBmYWlsZWQ6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWAsXG4gICAgfSk7XG4gIH1cbiAgaWYgKGhvb2suc2Vzc2lvbnMuZ2V0KHZpZGVvKSAhPT0gc3RhdGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghcmVzLm9rKSB7XG4gICAgcmV0dXJuIGZhaWxPcGVuKHZpZGVvLCBzdGF0ZSwge1xuICAgICAgY29kZTogTUVESUFfRVJSX0RFQ09ERSxcbiAgICAgIG1lc3NhZ2U6IGBvcGVuICR7cmVzLnN0YXR1c306ICR7YXdhaXQgcmVzLnRleHQoKX1gLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1ldGEgPSAoYXdhaXQgcmVzLmpzb24oKSkgYXMgVmlkZW9NZXRhO1xuICBpZiAoaG9vay5zZXNzaW9ucy5nZXQodmlkZW8pICE9PSBzdGF0ZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgc3RhdGUubWV0YSA9IG1ldGE7XG4gIHN0YXRlLmN1cnJlbnRUaW1lID0gc3RhdGUucGF1c2VkID8gMCA6IE1hdGgubWF4KDAsIChob29rLmN1cnJNcyAtIGJpcnRoTXMpIC8gMTAwMCk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2aWRlbywgXCJ2aWRlb1dpZHRoXCIsIHsgdmFsdWU6IG1ldGEud2lkdGgsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpZGVvLCBcInZpZGVvSGVpZ2h0XCIsIHsgdmFsdWU6IG1ldGEuaGVpZ2h0LCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2aWRlbywgXCJkdXJhdGlvblwiLCB7IHZhbHVlOiBtZXRhLmR1cmF0aW9uLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIHN0YXRlLnJlYWR5U3RhdGUgPSBIQVZFX01FVEFEQVRBO1xuICBmaXJlKHZpZGVvLCBcImR1cmF0aW9uY2hhbmdlXCIpO1xuICBmaXJlKHZpZGVvLCBcImxvYWRlZG1ldGFkYXRhXCIpO1xuICBzdGF0ZS5yZWFkeVN0YXRlID0gSEFWRV9FTk9VR0hfREFUQTtcbiAgZmlyZSh2aWRlbywgXCJsb2FkZWRkYXRhXCIpO1xuICBmaXJlKHZpZGVvLCBcImNhbnBsYXlcIik7XG4gIGZpcmUodmlkZW8sIFwiY2FucGxheXRocm91Z2hcIik7XG4gIHN0YXRlLm5ldHdvcmtTdGF0ZSA9IE5FVFdPUktfSURMRTtcbiAgZmlyZSh2aWRlbywgXCJzdXNwZW5kXCIpO1xuICBpZiAoIXN0YXRlLnBhdXNlZCkge1xuICAgIGZpcmUodmlkZW8sIFwicGxheVwiKTtcbiAgICBmaXJlKHZpZGVvLCBcInBsYXlpbmdcIik7XG4gIH1cbiAgaG9vay5jYWNoZS5wcmVmZXRjaChzdGF0ZSwgMSwgQUhFQUQpO1xuICByZXR1cm4gc3RhdGU7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgeyBhZHZhbmNlIH0gZnJvbSBcIi4vZHJpdmVyXCI7XG5pbXBvcnQgeyBGcmFtZUNhY2hlIH0gZnJvbSBcIi4vZnJhbWVfY2FjaGVcIjtcbmltcG9ydCB7IGluc3RhbGxNZWRpYVNoaW0gfSBmcm9tIFwiLi9tZWRpYV9zaGltXCI7XG5pbXBvcnQgeyBzZXR1cENhbnZhcyB9IGZyb20gXCIuL292ZXJsYXlcIjtcbmltcG9ydCB7IG5ld1ZpZGVvU3RhdGUsIG9wZW5TZXNzaW9uIH0gZnJvbSBcIi4vc2Vzc2lvblwiO1xuaW1wb3J0IHsgZmlyZSwgdHlwZSBWaWRlb1N0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBfX3B1cF92aWRlb19fPzogeyBhZHZhbmNlOiAobXM6IG51bWJlcikgPT4gUHJvbWlzZTx1bmtub3duPjsgcmVhZHk6ICgpID0+IFByb21pc2U8dm9pZD4gfTtcbiAgfVxuICBpbnRlcmZhY2UgSFRNTFZpZGVvRWxlbWVudCB7XG4gICAgX19wdXBMYXN0U3JjPzogc3RyaW5nO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb0hvb2sge1xuICByZWFkb25seSBzZXNzaW9ucyA9IG5ldyBXZWFrTWFwPEhUTUxWaWRlb0VsZW1lbnQsIFZpZGVvU3RhdGU+KCk7XG4gIHJlYWRvbmx5IGF0dGFjaGluZyA9IG5ldyBXZWFrTWFwPEhUTUxWaWRlb0VsZW1lbnQsIFByb21pc2U8VmlkZW9TdGF0ZSB8IHVuZGVmaW5lZD4+KCk7XG4gIC8vIEVudW1lcmFibGUgbWlycm9yIG9mIGluLWZsaWdodCBvcGVucyAoV2Vha01hcCBpc24ndCBpdGVyYWJsZSkgc28gcmVhZHkoKSBjYW4gYXdhaXQgdGhlbS5cbiAgcmVhZG9ubHkgb3BlbmluZyA9IG5ldyBTZXQ8UHJvbWlzZTx1bmtub3duPj4oKTtcbiAgcmVhZG9ubHkgY2FjaGUgPSBuZXcgRnJhbWVDYWNoZSgpO1xuICBydmZjU2VxID0gMDtcbiAgY3Vyck1zID0gMDtcbiAgcHJpdmF0ZSBfbGFzdFNuYXBzaG90ID0gbmV3IFdlYWtNYXA8SFRNTFZpZGVvRWxlbWVudCwgT2Zmc2NyZWVuQ2FudmFzPigpO1xuXG4gIGluc3RhbGwoKTogdm9pZCB7XG4gICAgaW5zdGFsbE1lZGlhU2hpbSh0aGlzKTtcbiAgICB0aGlzLnNjYW4oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTtcbiAgICBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0cykgPT4ge1xuICAgICAgZm9yIChjb25zdCBtIG9mIG11dHMpIHtcbiAgICAgICAgaWYgKG0udHlwZSA9PT0gXCJhdHRyaWJ1dGVzXCIgJiYgbS50YXJnZXQgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50ICYmIG0uYXR0cmlidXRlTmFtZSA9PT0gXCJzcmNcIikge1xuICAgICAgICAgIHRoaXMub25TcmNDaGFuZ2UobS50YXJnZXQpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIG0uYWRkZWROb2Rlcy5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnNjYW4obik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbS5yZW1vdmVkTm9kZXMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICAgIGlmIChuIGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5kZXRhY2gobik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KS5vYnNlcnZlKGRvY3VtZW50LCB7IHN1YnRyZWU6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZSwgYXR0cmlidXRlczogdHJ1ZSwgYXR0cmlidXRlRmlsdGVyOiBbXCJzcmNcIl0gfSk7XG4gICAgd2luZG93Ll9fcHVwX3ZpZGVvX18gPSB7IGFkdmFuY2U6IChtcykgPT4gYWR2YW5jZSh0aGlzLCBtcyksIHJlYWR5OiAoKSA9PiB0aGlzLnJlYWR5KCkgfTtcbiAgfVxuXG4gIGF0dGFjaCh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgbmF0aXZlID0gZmFsc2UpOiBQcm9taXNlPFZpZGVvU3RhdGUgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuc2Vzc2lvbnMuZ2V0KHZpZGVvKTtcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZXhpc3RpbmcpO1xuICAgIH1cbiAgICBjb25zdCBwZW5kaW5nID0gdGhpcy5hdHRhY2hpbmcuZ2V0KHZpZGVvKTtcbiAgICBpZiAocGVuZGluZykge1xuICAgICAgcmV0dXJuIHBlbmRpbmc7XG4gICAgfVxuICAgIGNvbnN0IHNyYyA9IHZpZGVvLnNyYyB8fCB2aWRlby5jdXJyZW50U3JjO1xuICAgIGlmICghc3JjKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIGlmICgvXihibG9iOnxkYXRhOnxtZWRpYXN0cmVhbTopL2kudGVzdChzcmMpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIGNvbnN0IGN2ID0gc2V0dXBDYW52YXModmlkZW8sIHRoaXMuX2xhc3RTbmFwc2hvdC5nZXQodmlkZW8pKTtcbiAgICBjb25zdCBzdGF0ZSA9IG5ld1ZpZGVvU3RhdGUodmlkZW8sIGN2KTtcbiAgICB0aGlzLnNlc3Npb25zLnNldCh2aWRlbywgc3RhdGUpO1xuICAgIGNvbnN0IHAgPSBvcGVuU2Vzc2lvbih0aGlzLCB7IHZpZGVvLCBzdGF0ZSwgc3JjLCBiaXJ0aE1zOiB0aGlzLmN1cnJNcywgbmF0aXZlIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5hdHRhY2hpbmcuZGVsZXRlKHZpZGVvKTtcbiAgICAgIHRoaXMub3BlbmluZy5kZWxldGUocCk7XG4gICAgfSk7XG4gICAgdGhpcy5hdHRhY2hpbmcuc2V0KHZpZGVvLCBwKTtcbiAgICB0aGlzLm9wZW5pbmcuYWRkKHApO1xuICAgIHJldHVybiBwO1xuICB9XG5cbiAgLy8gQXdhaXQgb25seSB0aGUgb3BlbnMgaW4gZmxpZ2h0IHJpZ2h0IG5vdyDigJQgbmV2ZXIgY2hhc2UgbmV3bHktc3Bhd25lZCBvbmVzLCBvciBhIHJldHJ5aW5nIHBhZ2UgbG9vcHMgZm9yZXZlci5cbiAgYXN5bmMgcmVhZHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFsuLi50aGlzLm9wZW5pbmddKTtcbiAgfVxuXG4gIHJlc3VtZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgc3RhdGU6IFZpZGVvU3RhdGUpOiB2b2lkIHtcbiAgICBpZiAoIXN0YXRlLnBhdXNlZCAmJiAhc3RhdGUuZW5kZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3RhdGUucGF1c2VkID0gZmFsc2U7XG4gICAgc3RhdGUuZW5kZWQgPSBmYWxzZTtcbiAgICBmaXJlKHZpZGVvLCBcInBsYXlcIik7XG4gICAgZmlyZSh2aWRlbywgXCJwbGF5aW5nXCIpO1xuICB9XG5cbiAgZGV0YWNoKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnNlc3Npb25zLmdldCh2aWRlbyk7XG4gICAgaWYgKCFzdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc3RhdGUubWV0YSkge1xuICAgICAgaWYgKHN0YXRlLmxhc3REcmF3bklkeCA+PSAwKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc25hcCA9IG5ldyBPZmZzY3JlZW5DYW52YXMoc3RhdGUuY3Yud2lkdGgsIHN0YXRlLmN2LmhlaWdodCk7XG4gICAgICAgICAgY29uc3Qgc2N0eCA9IHNuYXAuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgICAgIGlmICghc2N0eCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm8gMmQgY29udGV4dFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2N0eC5kcmF3SW1hZ2Uoc3RhdGUuY3YsIDAsIDApO1xuICAgICAgICAgIHRoaXMuX2xhc3RTbmFwc2hvdC5zZXQodmlkZW8sIHNuYXApO1xuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9XG4gICAgICB0aGlzLmNhY2hlLnJlbGVhc2Uoc3RhdGUubWV0YS5pZCwgc3RhdGUpO1xuICAgIH1cbiAgICBzdGF0ZS5jdi5yZW1vdmUoKTtcbiAgICB0aGlzLnNlc3Npb25zLmRlbGV0ZSh2aWRlbyk7XG4gICAgdGhpcy5hdHRhY2hpbmcuZGVsZXRlKHZpZGVvKTtcbiAgfVxuXG4gIG9uU3JjQ2hhbmdlKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc3JjID0gdmlkZW8uc3JjIHx8IHZpZGVvLmN1cnJlbnRTcmMgfHwgXCJcIjtcbiAgICBpZiAodmlkZW8uX19wdXBMYXN0U3JjID09PSBzcmMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmlkZW8uX19wdXBMYXN0U3JjID0gc3JjO1xuICAgIGlmICh0aGlzLnNlc3Npb25zLmhhcyh2aWRlbykpIHtcbiAgICAgIHRoaXMuZGV0YWNoKHZpZGVvKTtcbiAgICB9XG4gICAgdGhpcy5hdHRhY2godmlkZW8pO1xuICB9XG5cbiAgLy8gUmUtb3BlbiBhdCBuYXRpdmUgcmVzb2x1dGlvbiAodGhlIGVsZW1lbnQgb3V0Z3JldyB0aGUgZG93bnNjYWxlZCBkZWNvZGUpLCBwcmVzZXJ2aW5nIHBsYXliYWNrIHN0YXRlLlxuICByZWF0dGFjaCh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgc3RhdGU6IFZpZGVvU3RhdGUpOiB2b2lkIHtcbiAgICBjb25zdCB0ID0gc3RhdGUuY3VycmVudFRpbWU7XG4gICAgY29uc3QgcGF1c2VkID0gc3RhdGUucGF1c2VkO1xuICAgIGNvbnN0IGVuZGVkID0gc3RhdGUuZW5kZWQ7XG4gICAgdGhpcy5kZXRhY2godmlkZW8pO1xuICAgIHZvaWQgdGhpcy5hdHRhY2godmlkZW8sIHRydWUpLnRoZW4oKG5zKSA9PiB7XG4gICAgICBpZiAoIW5zKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5zLmN1cnJlbnRUaW1lID0gdDtcbiAgICAgIG5zLnBhdXNlZCA9IHBhdXNlZDtcbiAgICAgIG5zLmVuZGVkID0gZW5kZWQ7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNjYW4ocm9vdDogRWxlbWVudCB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJvb3QudGFnTmFtZSA9PT0gXCJWSURFT1wiKSB7XG4gICAgICB0aGlzLmF0dGFjaChyb290IGFzIEhUTUxWaWRlb0VsZW1lbnQpO1xuICAgIH1cbiAgICBpZiAocm9vdC5xdWVyeVNlbGVjdG9yQWxsKSB7XG4gICAgICByb290LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ2aWRlb1wiKS5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgIHRoaXMuYXR0YWNoKHYpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsVmlkZW9Ib29rKCk6IHZvaWQge1xuICBpZiAod2luZG93Ll9fcHVwX3ZpZGVvX18pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbmV3IFZpZGVvSG9vaygpLmluc3RhbGwoKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMjYuXG5cbmltcG9ydCB7IGluc3RhbGxUaWNrSG9vayB9IGZyb20gXCIuL2lmcmFtZV9ob29rXCI7XG5pbXBvcnQgeyBpbnN0YWxsVmlkZW9Ib29rIH0gZnJvbSBcIi4vdmlkZW8vaG9va1wiO1xuXG5pZiAod2luZG93LnNlbGYgIT09IHdpbmRvdy50b3ApIHtcbiAgaW5zdGFsbFRpY2tIb29rKCk7XG4gIGluc3RhbGxWaWRlb0hvb2soKTtcbn1cbiJdfQ==
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2lmcmFtZV9ob29rLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vb3ZlcmxheS50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3ZpZGVvL3R5cGVzLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vZHJpdmVyLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vZnJhbWVfY2FjaGUudHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9tZWRpYV9zaGltLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vc2Vzc2lvbi50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3ZpZGVvL2hvb2sudHMiLCIuLi8uLi9zcmMvcnVudGltZS9pZnJhbWVfcHJlbG9hZC50cyJdLCJuYW1lcyI6WyJpbnN0YWxsVGlja0hvb2siLCJSRUFMX0RBVEUiLCJkYXRlT3JpZ2luIiwiY3Vyck1zIiwidGltZU9mZnNldCIsInJhZlF1ZXVlIiwidGltZXJzIiwibmV4dElkIiwidGljayIsIkZha2VEYXRlIiwiYXJncyIsImNiIiwiaWQiLCJyIiwiZGVsYXkiLCJkIiwic2FmZUludm9rZVRpbWVyIiwiZm4iLCJlIiwic2FmZUludm9rZVJhZiIsInRzIiwiYW5pbVN0YXRlIiwic3luY0FuaW1hdGlvbnMiLCJtcyIsImFuaW1zIiwiYSIsInN0YXRlIiwicmF0ZSIsInMiLCJjdDAiLCJwcm9jZXNzIiwidGltZXN0YW1wTXMiLCJ0IiwicmFmcyIsIk1JUlJPUl9QUk9QUyIsImNzc0Nhc2UiLCJjIiwic3luY092ZXJsYXkiLCJ2aWRlbyIsImN2IiwiY3MiLCJwIiwidiIsInZyIiwiZHByIiwidyIsImgiLCJyZXNpemVkIiwic2V0dXBDYW52YXMiLCJzbmFwIiwiZml0UmVjdCIsInNyY1ciLCJzcmNIIiwiZHN0VyIsImRzdEgiLCJmaXQiLCJzYyIsImsiLCJ3cyIsImhzIiwic2MyIiwid3MyIiwiaHMyIiwiU0NIRU1FIiwiVEFHIiwidGltZVJhbmdlcyIsImVuZCIsImZpcmUiLCJlbCIsInR5cGUiLCJmaXJlRnJhbWVDYWxsYmFja3MiLCJjYnMiLCJub3ciLCJtZXRhIiwicGFpbnQiLCJob29rIiwiaWR4IiwiYm0iLCJmZXRjaGVkIiwiYWR2YW5jZSIsImR0IiwicHMiLCJGcmFtZUNhY2hlIiwiZXhpc3RpbmciLCJjYWNoZWQiLCJidWYiLCJmcm9tSWR4IiwiY291bnQiLCJtYXhJZHgiLCJpIiwibWluSWR4IiwiZmxvb3IiLCJpbnN0YWxsTWVkaWFTaGltIiwiSFZFIiwiTUVESUEiLCJtZGVzYyIsImN0RGVzYyIsInNyY0Rlc2MiLCJyYXRlRGVzYyIsIm9yaWdQYXVzZSIsIm9yaWdSVkZDIiwib3JpZ0NhbmNlbFJWRkMiLCJvcmlnUXVhbGl0eSIsIm9yaWdMb2FkIiwic2Vzc2lvbnMiLCJkZWYiLCJwcm9wIiwicGljayIsIm5hdGl2ZUdldCIsIm5zIiwiY3RHZXQiLCJjdFNldCIsImR1ciIsInJhdGVTZXQiLCJzcmNTZXQiLCJuZXdWaWRlb1N0YXRlIiwiZmFpbE9wZW4iLCJlcnJvciIsIm9wZW5TZXNzaW9uIiwic3JjIiwiYmlydGhNcyIsIm5hdGl2ZSIsImZwcyIsInJlcyIsInEiLCJuYXRpdmVNZXRhIiwiVmlkZW9Ib29rIiwibXV0cyIsIm0iLCJuIiwicGVuZGluZyIsInNjdHgiLCJwYXVzZWQiLCJlbmRlZCIsInJvb3QiLCJpbnN0YWxsVmlkZW9Ib29rIl0sIm1hcHBpbmdzIjoidURBd0JPLFNBQVNBLEdBQXdCLENBQ3RDLEdBQUksT0FBTyxZQUFBLENBQ1QsT0FHRixJQUFNQyxDQUFBQSxDQUFZLElBQUEsQ0FDWkMsQ0FBQUEsQ0FBYUQsQ0FBQUEsQ0FBVSxLQUFJLENBQzdCRSxDQUFBQSxDQUFTLEVBQ1RDLENBQUFBLENBQWEsQ0FBQSxDQUNiQyxFQUF1QixFQUFDLENBQ3RCQyxDQUFBQSxDQUE0QyxHQUM5Q0MsQ0FBQUEsQ0FBUyxDQUFBLENBQ1BDLEVBQU8sS0FDWEosQ0FBQUEsRUFBYyxJQUNQQSxDQUFBQSxDQUFBQSxDQUdULFNBQVNLLEtBQTJCQyxD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IHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgX19wdXBfdGlja19fPzogeyBwcm9jZXNzOiAobXM6IG51bWJlcikgPT4gdm9pZCB9O1xuICB9XG59XG5cbmludGVyZmFjZSBUaW1lciB7XG4gIHR5cGU6IFwidGltZW91dFwiIHwgXCJpbnRlcnZhbFwiO1xuICBjYjogVGltZXJIYW5kbGVyO1xuICBkZWxheTogbnVtYmVyO1xuICBuZXh0OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBSYWZFbnRyeSB7XG4gIGlkOiBudW1iZXI7XG4gIGNiOiBGcmFtZVJlcXVlc3RDYWxsYmFjaztcbn1cblxuaW50ZXJmYWNlIEFuaW1FbnRyeSB7XG4gIHN0YXJ0TXM6IG51bWJlcjtcbiAgcGF1c2VkQWNjdW06IG51bWJlcjtcbiAgcGF1c2VkQXQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxUaWNrSG9vaygpOiB2b2lkIHtcbiAgaWYgKHdpbmRvdy5fX3B1cF90aWNrX18pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBSRUFMX0RBVEUgPSBEYXRlO1xuICBjb25zdCBkYXRlT3JpZ2luID0gUkVBTF9EQVRFLm5vdygpO1xuICBsZXQgY3Vyck1zID0gMDtcbiAgbGV0IHRpbWVPZmZzZXQgPSAwO1xuICBsZXQgcmFmUXVldWU6IFJhZkVudHJ5W10gPSBbXTtcbiAgY29uc3QgdGltZXJzOiBSZWNvcmQ8bnVtYmVyLCBUaW1lciB8IHVuZGVmaW5lZD4gPSB7fTtcbiAgbGV0IG5leHRJZCA9IDE7XG4gIGNvbnN0IHRpY2sgPSAoKSA9PiB7XG4gICAgdGltZU9mZnNldCArPSAwLjAxO1xuICAgIHJldHVybiB0aW1lT2Zmc2V0O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEZha2VEYXRlKHRoaXM6IHVua25vd24sIC4uLmFyZ3M6IHVua25vd25bXSk6IERhdGUgfCBzdHJpbmcge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBGYWtlRGF0ZSkpIHtcbiAgICAgIHJldHVybiBuZXcgUkVBTF9EQVRFKGRhdGVPcmlnaW4gKyBjdXJyTXMpLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzLmxlbmd0aFxuICAgICAgPyBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KFJFQUxfREFURSwgW251bGwsIC4uLmFyZ3NdKSkoKVxuICAgICAgOiBuZXcgUkVBTF9EQVRFKGRhdGVPcmlnaW4gKyBjdXJyTXMgKyB0aWNrKCkpO1xuICB9XG4gIEZha2VEYXRlLnByb3RvdHlwZSA9IFJFQUxfREFURS5wcm90b3R5cGU7XG4gIEZha2VEYXRlLm5vdyA9ICgpID0+IGRhdGVPcmlnaW4gKyBjdXJyTXMgKyB0aWNrKCk7XG4gIEZha2VEYXRlLnBhcnNlID0gUkVBTF9EQVRFLnBhcnNlO1xuICBGYWtlRGF0ZS5VVEMgPSBSRUFMX0RBVEUuVVRDO1xuICAod2luZG93IGFzIHVua25vd24gYXMgeyBEYXRlOiB1bmtub3duIH0pLkRhdGUgPSBGYWtlRGF0ZTtcbiAgcGVyZm9ybWFuY2Uubm93ID0gKCkgPT4gY3Vyck1zICsgdGljaygpO1xuXG4gIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSAoY2IpID0+IHtcbiAgICBjb25zdCBpZCA9IG5leHRJZCsrO1xuICAgIHJhZlF1ZXVlLnB1c2goeyBpZCwgY2IgfSk7XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSAoaWQpID0+IHtcbiAgICByYWZRdWV1ZSA9IHJhZlF1ZXVlLmZpbHRlcigocikgPT4gci5pZCAhPT0gaWQpO1xuICB9O1xuICAod2luZG93IGFzIHVua25vd24gYXMgeyBzZXRUaW1lb3V0OiB1bmtub3duIH0pLnNldFRpbWVvdXQgPSAoY2I6IFRpbWVySGFuZGxlciwgZGVsYXk/OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBpZCA9IG5leHRJZCsrO1xuICAgIHRpbWVyc1tpZF0gPSB7IHR5cGU6IFwidGltZW91dFwiLCBjYiwgZGVsYXk6IGRlbGF5IHx8IDAsIG5leHQ6IGN1cnJNcyArIChkZWxheSB8fCAwKSB9O1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNsZWFyVGltZW91dCA9IChpZCkgPT4ge1xuICAgIGlmICh0eXBlb2YgaWQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGRlbGV0ZSB0aW1lcnNbaWRdO1xuICAgIH1cbiAgfTtcbiAgKHdpbmRvdyBhcyB1bmtub3duIGFzIHsgc2V0SW50ZXJ2YWw6IHVua25vd24gfSkuc2V0SW50ZXJ2YWwgPSAoY2I6IFRpbWVySGFuZGxlciwgZGVsYXk/OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBpZCA9IG5leHRJZCsrO1xuICAgIGNvbnN0IGQgPSBNYXRoLm1heChkZWxheSB8fCAwLCAxKTtcbiAgICB0aW1lcnNbaWRdID0geyB0eXBlOiBcImludGVydmFsXCIsIGNiLCBkZWxheTogZCwgbmV4dDogY3Vyck1zICsgZCB9O1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNsZWFySW50ZXJ2YWwgPSAoaWQpID0+IHtcbiAgICBpZiAodHlwZW9mIGlkID09PSBcIm51bWJlclwiKSB7XG4gICAgICBkZWxldGUgdGltZXJzW2lkXTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gc2FmZUludm9rZVRpbWVyKGZuOiBUaW1lckhhbmRsZXIpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAvLyBTdHJpbmcgdGltZXIgaGFuZGxlciBydW5zIGFzIHBhZ2Ugc2NyaXB0IGluIGdsb2JhbCBzY29wZSAoSFRNTCBzcGVjKTsgRnVuY3Rpb24gY3RvciBtYXRjaGVzIHRoYXQsIGF2b2lkcyBldmFsLlxuICAgICAgICBuZXcgRnVuY3Rpb24oZm4pKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmbigpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJbVGlja10gZXJyb3I6XCIsIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5zdGFjaykgfHwgZSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHNhZmVJbnZva2VSYWYoY2I6IEZyYW1lUmVxdWVzdENhbGxiYWNrLCB0czogbnVtYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNiKHRzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiW1RpY2tdIGVycm9yOlwiLCAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUuc3RhY2spIHx8IGUpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFuaW1TdGF0ZSA9IG5ldyBXZWFrTWFwPEFuaW1hdGlvbiwgQW5pbUVudHJ5PigpO1xuICBmdW5jdGlvbiBzeW5jQW5pbWF0aW9ucyhtczogbnVtYmVyKSB7XG4gICAgbGV0IGFuaW1zOiBBbmltYXRpb25bXTtcbiAgICB0cnkge1xuICAgICAgYW5pbXMgPSBkb2N1bWVudC5nZXRBbmltYXRpb25zKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgYSBvZiBhbmltcykge1xuICAgICAgY29uc3Qgc3RhdGUgPSBhLnBsYXlTdGF0ZTtcbiAgICAgIGlmIChzdGF0ZSA9PT0gXCJpZGxlXCIgfHwgc3RhdGUgPT09IFwiZmluaXNoZWRcIikge1xuICAgICAgICBhbmltU3RhdGUuZGVsZXRlKGEpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJhdGUgPSB0eXBlb2YgYS5wbGF5YmFja1JhdGUgPT09IFwibnVtYmVyXCIgPyBhLnBsYXliYWNrUmF0ZSA6IDE7XG4gICAgICBpZiAocmF0ZSA9PT0gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGxldCBzID0gYW5pbVN0YXRlLmdldChhKTtcbiAgICAgIGlmICghcykge1xuICAgICAgICBjb25zdCBjdDAgPSB0eXBlb2YgYS5jdXJyZW50VGltZSA9PT0gXCJudW1iZXJcIiA/IGEuY3VycmVudFRpbWUgOiAwO1xuICAgICAgICBzID0geyBzdGFydE1zOiBtcyAtIGN0MCAvIHJhdGUsIHBhdXNlZEFjY3VtOiAwLCBwYXVzZWRBdDogLTEgfTtcbiAgICAgICAgYW5pbVN0YXRlLnNldChhLCBzKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZSA9PT0gXCJwYXVzZWRcIikge1xuICAgICAgICBpZiAocy5wYXVzZWRBdCA8IDApIHtcbiAgICAgICAgICBzLnBhdXNlZEF0ID0gbXM7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocy5wYXVzZWRBdCA+PSAwKSB7XG4gICAgICAgIHMucGF1c2VkQWNjdW0gKz0gbXMgLSBzLnBhdXNlZEF0O1xuICAgICAgICBzLnBhdXNlZEF0ID0gLTE7XG4gICAgICB9XG4gICAgICBhLmN1cnJlbnRUaW1lID0gKG1zIC0gcy5zdGFydE1zIC0gcy5wYXVzZWRBY2N1bSkgKiByYXRlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHByb2Nlc3ModGltZXN0YW1wTXM6IG51bWJlcikge1xuICAgIGN1cnJNcyA9IHRpbWVzdGFtcE1zO1xuICAgIHRpbWVPZmZzZXQgPSAwO1xuICAgIGZvciAoY29uc3QgaWQgb2YgT2JqZWN0LmtleXModGltZXJzKSkge1xuICAgICAgY29uc3QgdCA9IHRpbWVyc1tOdW1iZXIoaWQpXTtcbiAgICAgIGlmICghdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICh0Lm5leHQgPD0gY3Vyck1zKSB7XG4gICAgICAgIHNhZmVJbnZva2VUaW1lcih0LmNiKTtcbiAgICAgICAgaWYgKHQudHlwZSA9PT0gXCJ0aW1lb3V0XCIpIHtcbiAgICAgICAgICBkZWxldGUgdGltZXJzW051bWJlcihpZCldO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHQubmV4dCArPSB0LmRlbGF5O1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByYWZzID0gcmFmUXVldWUuc3BsaWNlKDApO1xuICAgIGZvciAoY29uc3QgciBvZiByYWZzKSB7XG4gICAgICBzYWZlSW52b2tlUmFmKHIuY2IsIGN1cnJNcyk7XG4gICAgfVxuICAgIHN5bmNBbmltYXRpb25zKGN1cnJNcyk7XG4gIH1cblxuICB3aW5kb3cuX19wdXBfdGlja19fID0geyBwcm9jZXNzIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG50eXBlIFZlYzQgPSBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcblxuY29uc3QgTUlSUk9SX1BST1BTID0gW1xuICBcImJvcmRlclJhZGl1c1wiLFxuICBcImJvcmRlclRvcExlZnRSYWRpdXNcIixcbiAgXCJib3JkZXJUb3BSaWdodFJhZGl1c1wiLFxuICBcImJvcmRlckJvdHRvbUxlZnRSYWRpdXNcIixcbiAgXCJib3JkZXJCb3R0b21SaWdodFJhZGl1c1wiLFxuICBcInRyYW5zZm9ybVwiLFxuICBcInRyYW5zZm9ybU9yaWdpblwiLFxuICBcImZpbHRlclwiLFxuICBcImNsaXBQYXRoXCIsXG4gIFwiYm94U2hhZG93XCIsXG4gIFwib3BhY2l0eVwiLFxuICBcIm1peEJsZW5kTW9kZVwiLFxuICBcIm1hc2tcIixcbiAgXCJ6SW5kZXhcIixcbiAgXCJwb3NpdGlvblwiLFxuICBcImxlZnRcIixcbiAgXCJ0b3BcIixcbiAgXCJyaWdodFwiLFxuICBcImJvdHRvbVwiLFxuXSBhcyBjb25zdDtcblxuZnVuY3Rpb24gY3NzQ2FzZShzOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcy5yZXBsYWNlKC9bQS1aXS9nLCAoYykgPT4gYC0ke2MudG9Mb3dlckNhc2UoKX1gKTtcbn1cblxuLy8gVHJhY2sgdGhlIG92ZXJsYXkgY2FudmFzIHRvIHRoZSB2aWRlbyBlbGVtZW50J3MgbGl2ZSBib3g7IHRydWUgPSBiYWNraW5nIHN0b3JlIHJlc2l6ZWQgKHdoaWNoIHdpcGVzIHRoZSBjYW52YXMpLlxuZXhwb3J0IGZ1bmN0aW9uIHN5bmNPdmVybGF5KHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBjdjogSFRNTENhbnZhc0VsZW1lbnQpOiBib29sZWFuIHtcbiAgY29uc3QgY3MgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh2aWRlbyk7XG4gIGN2LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAvLyBvZmZzZXQqIGFyZSBwcmUtdHJhbnNmb3JtIGNvb3JkcyBmcm9tIG9mZnNldFBhcmVudCdzIHBhZGRpbmcgZWRnZSA9IHRoZSBhYnMgY29udGFpbmluZy1ibG9jayBvcmlnaW47IG1hcCBkaXJlY3QuXG4gIGN2LnN0eWxlLmxlZnQgPSBgJHt2aWRlby5vZmZzZXRMZWZ0fXB4YDtcbiAgY3Yuc3R5bGUudG9wID0gYCR7dmlkZW8ub2Zmc2V0VG9wfXB4YDtcbiAgY3Yuc3R5bGUud2lkdGggPSBgJHt2aWRlby5vZmZzZXRXaWR0aH1weGA7XG4gIGN2LnN0eWxlLmhlaWdodCA9IGAke3ZpZGVvLm9mZnNldEhlaWdodH1weGA7XG4gIGZvciAoY29uc3QgcCBvZiBNSVJST1JfUFJPUFMpIHtcbiAgICBpZiAocCA9PT0gXCJwb3NpdGlvblwiIHx8IHAgPT09IFwibGVmdFwiIHx8IHAgPT09IFwidG9wXCIgfHwgcCA9PT0gXCJyaWdodFwiIHx8IHAgPT09IFwiYm90dG9tXCIpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCB2ID0gY3MuZ2V0UHJvcGVydHlWYWx1ZShjc3NDYXNlKHApKTtcbiAgICBpZiAodikge1xuICAgICAgY3Yuc3R5bGUuc2V0UHJvcGVydHkoY3NzQ2FzZShwKSwgdik7XG4gICAgfVxuICB9XG4gIC8vIEJhY2tpbmcgc3RvcmUgYXQgb24tc2NyZWVuIHBpeGVsIHNpemUgKHBvc3QtdHJhbnNmb3JtKSBzbyBkZWNvZGUgcmVzb2x1dGlvbiBtYXRjaGVzIGRpc3BsYXllZCBwaXhlbHMuXG4gIGNvbnN0IHZyID0gdmlkZW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IGRwciA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gIGNvbnN0IHcgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHZyLndpZHRoICogZHByKSk7XG4gIGNvbnN0IGggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHZyLmhlaWdodCAqIGRwcikpO1xuICBsZXQgcmVzaXplZCA9IGZhbHNlO1xuICBpZiAoY3Yud2lkdGggIT09IHcpIHtcbiAgICBjdi53aWR0aCA9IHc7XG4gICAgcmVzaXplZCA9IHRydWU7XG4gIH1cbiAgaWYgKGN2LmhlaWdodCAhPT0gaCkge1xuICAgIGN2LmhlaWdodCA9IGg7XG4gICAgcmVzaXplZCA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlc2l6ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cENhbnZhcyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgc25hcDogT2Zmc2NyZWVuQ2FudmFzIHwgdW5kZWZpbmVkKTogSFRNTENhbnZhc0VsZW1lbnQge1xuICBjb25zdCBjdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gIGN2LmRhdGFzZXRbXCJwdXBWaWRlb092ZXJsYXlcIl0gPSBcIjFcIjtcbiAgY3Yuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwibm9uZVwiO1xuICB2aWRlby5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgdmlkZW8ubXV0ZWQgPSB0cnVlO1xuICBjb25zdCBwYXJlbnQgPSB2aWRlby5wYXJlbnROb2RlIHx8IGRvY3VtZW50LmJvZHk7XG4gIHBhcmVudC5pbnNlcnRCZWZvcmUoY3YsIHZpZGVvLm5leHRTaWJsaW5nKTtcbiAgc3luY092ZXJsYXkodmlkZW8sIGN2KTtcbiAgaWYgKHNuYXApIHtcbiAgICB0cnkge1xuICAgICAgY3YuZ2V0Q29udGV4dChcIjJkXCIpIS5kcmF3SW1hZ2Uoc25hcCwgMCwgMCwgY3Yud2lkdGgsIGN2LmhlaWdodCk7XG4gICAgfSBjYXRjaCB7fVxuICB9XG4gIHJldHVybiBjdjtcbn1cblxuLy8gRHJhdyByZWN0IGZvciB0aGUgYml0bWFwIHdpdGhpbiB0aGUgY2FudmFzIHBlciBvYmplY3RGaXQuXG5leHBvcnQgZnVuY3Rpb24gZml0UmVjdChzcmNXOiBudW1iZXIsIHNyY0g6IG51bWJlciwgZHN0VzogbnVtYmVyLCBkc3RIOiBudW1iZXIsIGZpdDogc3RyaW5nKTogVmVjNCB7XG4gIGlmIChmaXQgPT09IFwibm9uZVwiKSB7XG4gICAgcmV0dXJuIFsoZHN0VyAtIHNyY1cpIC8gMiwgKGRzdEggLSBzcmNIKSAvIDIsIHNyY1csIHNyY0hdO1xuICB9XG4gIGlmIChmaXQgPT09IFwiY29udGFpblwiIHx8IGZpdCA9PT0gXCJzY2FsZS1kb3duXCIpIHtcbiAgICBjb25zdCBzYyA9IE1hdGgubWluKGRzdFcgLyBzcmNXLCBkc3RIIC8gc3JjSCk7XG4gICAgY29uc3QgayA9IGZpdCA9PT0gXCJzY2FsZS1kb3duXCIgPyBNYXRoLm1pbigxLCBzYykgOiBzYztcbiAgICBjb25zdCB3cyA9IGsgKiBzcmNXO1xuICAgIGNvbnN0IGhzID0gayAqIHNyY0g7XG4gICAgcmV0dXJuIFsoZHN0VyAtIHdzKSAvIDIsIChkc3RIIC0gaHMpIC8gMiwgd3MsIGhzXTtcbiAgfVxuICBpZiAoZml0ID09PSBcImNvdmVyXCIpIHtcbiAgICBjb25zdCBzYzIgPSBNYXRoLm1heChkc3RXIC8gc3JjVywgZHN0SCAvIHNyY0gpO1xuICAgIGNvbnN0IHdzMiA9IHNjMiAqIHNyY1c7XG4gICAgY29uc3QgaHMyID0gc2MyICogc3JjSDtcbiAgICByZXR1cm4gWyhkc3RXIC0gd3MyKSAvIDIsIChkc3RIIC0gaHMyKSAvIDIsIHdzMiwgaHMyXTtcbiAgfVxuICByZXR1cm4gWzAsIDAsIGRzdFcsIGRzdEhdO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxuZXhwb3J0IGNvbnN0IFNDSEVNRSA9IFwicHVwLWZyYW1lOi8vXCI7XG5leHBvcnQgY29uc3QgQUhFQUQgPSAxMDtcbmV4cG9ydCBjb25zdCBUQUcgPSBcIltWaWRlb0hvb2tdXCI7XG5cbmV4cG9ydCBjb25zdCBNRURJQV9FUlJfTkVUV09SSyA9IDI7XG5leHBvcnQgY29uc3QgTUVESUFfRVJSX0RFQ09ERSA9IDM7XG5leHBvcnQgY29uc3QgSEFWRV9OT1RISU5HID0gMDtcbmV4cG9ydCBjb25zdCBIQVZFX01FVEFEQVRBID0gMTtcbmV4cG9ydCBjb25zdCBIQVZFX0VOT1VHSF9EQVRBID0gNDtcbmV4cG9ydCBjb25zdCBORVRXT1JLX0VNUFRZID0gMDtcbmV4cG9ydCBjb25zdCBORVRXT1JLX0lETEUgPSAxO1xuZXhwb3J0IGNvbnN0IE5FVFdPUktfTE9BRElORyA9IDI7XG5leHBvcnQgY29uc3QgTkVUV09SS19OT19TT1VSQ0UgPSAzO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvTWV0YSB7XG4gIGlkOiBzdHJpbmc7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcmFtZVdpZHRoOiBudW1iZXI7XG4gIGZyYW1lSGVpZ2h0OiBudW1iZXI7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvRnJhbWVNZXRhIHtcbiAgcHJlc2VudGF0aW9uVGltZTogbnVtYmVyO1xuICBleHBlY3RlZERpc3BsYXlUaW1lOiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBtZWRpYVRpbWU6IG51bWJlcjtcbiAgcHJlc2VudGVkRnJhbWVzOiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIEZyYW1lQ2IgPSAobm93OiBudW1iZXIsIG1ldGE6IFZpZGVvRnJhbWVNZXRhKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1lZGlhRXJyb3JMaWtlIHtcbiAgY29kZTogbnVtYmVyO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9DYWNoZSB7XG4gIGJpdG1hcHM6IE1hcDxudW1iZXIsIEltYWdlQml0bWFwPjtcbiAgaW5GbGlnaHQ6IE1hcDxudW1iZXIsIFByb21pc2U8SW1hZ2VCaXRtYXAgfCB1bmRlZmluZWQ+PjtcbiAgcmVhZGVyczogTWFwPFZpZGVvU3RhdGUsIG51bWJlcj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9TdGF0ZSB7XG4gIG1ldGE/OiBWaWRlb01ldGE7XG4gIGN2OiBIVE1MQ2FudmFzRWxlbWVudDtcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gIHBhdXNlZDogYm9vbGVhbjtcbiAgY3VycmVudFRpbWU6IG51bWJlcjtcbiAgZW5kZWQ6IGJvb2xlYW47XG4gIGxhc3REcmF3bklkeDogbnVtYmVyO1xuICBkZWFkOiBib29sZWFuO1xuICBvYmplY3RGaXQ6IHN0cmluZztcbiAgcmVhZHlTdGF0ZTogbnVtYmVyO1xuICBuZXR3b3JrU3RhdGU6IG51bWJlcjtcbiAgc2Vla2luZzogYm9vbGVhbjtcbiAgd2FpdGluZzogYm9vbGVhbjtcbiAgZXJyb3I6IE1lZGlhRXJyb3JMaWtlIHwgdW5kZWZpbmVkO1xuICBwcmVzZW50ZWRGcmFtZXM6IG51bWJlcjtcbiAgbWF4UmVhY2hlZDogbnVtYmVyO1xuICBydmZjOiBNYXA8bnVtYmVyLCBGcmFtZUNiPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUaW1lUmFuZ2VzTGlrZSB7XG4gIGxlbmd0aDogbnVtYmVyO1xuICBzdGFydChpOiBudW1iZXIpOiBudW1iZXI7XG4gIGVuZChpOiBudW1iZXIpOiBudW1iZXI7XG59XG5cbi8vIFdob2xlIGNsaXAgaXMgZGVjb2RlLW9uLWRlbWFuZCwgc28gdGhlIGF2YWlsYWJsZSByYW5nZSBpcyBhbHdheXMgWzAsIGVuZF0gKG9uZSBUaW1lUmFuZ2VzIGVudHJ5KS5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lUmFuZ2VzKGVuZDogbnVtYmVyKTogVGltZVJhbmdlc0xpa2Uge1xuICByZXR1cm4geyBsZW5ndGg6IGVuZCA+IDAgPyAxIDogMCwgc3RhcnQ6ICgpID0+IDAsIGVuZDogKCkgPT4gZW5kIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJlKGVsOiBFdmVudFRhcmdldCwgdHlwZTogc3RyaW5nKTogdm9pZCB7XG4gIGVsLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KHR5cGUpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmltcG9ydCB0eXBlIHsgVmlkZW9Ib29rIH0gZnJvbSBcIi4vaG9va1wiO1xuaW1wb3J0IHsgZml0UmVjdCwgc3luY092ZXJsYXkgfSBmcm9tIFwiLi9vdmVybGF5XCI7XG5pbXBvcnQgeyBBSEVBRCwgZmlyZSwgdHlwZSBWaWRlb0ZyYW1lTWV0YSwgdHlwZSBWaWRlb1N0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZnVuY3Rpb24gZmlyZUZyYW1lQ2FsbGJhY2tzKHN0YXRlOiBWaWRlb1N0YXRlKTogdm9pZCB7XG4gIGlmIChzdGF0ZS5ydmZjLnNpemUgPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY2JzID0gWy4uLnN0YXRlLnJ2ZmMudmFsdWVzKCldO1xuICBzdGF0ZS5ydmZjLmNsZWFyKCk7XG4gIGNvbnN0IG5vdyA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBjb25zdCBtZXRhOiBWaWRlb0ZyYW1lTWV0YSA9IHtcbiAgICBwcmVzZW50YXRpb25UaW1lOiBub3csXG4gICAgZXhwZWN0ZWREaXNwbGF5VGltZTogbm93LFxuICAgIHdpZHRoOiBzdGF0ZS5tZXRhIS5mcmFtZVdpZHRoLFxuICAgIGhlaWdodDogc3RhdGUubWV0YSEuZnJhbWVIZWlnaHQsXG4gICAgbWVkaWFUaW1lOiBzdGF0ZS5jdXJyZW50VGltZSxcbiAgICBwcmVzZW50ZWRGcmFtZXM6IHN0YXRlLnByZXNlbnRlZEZyYW1lcyxcbiAgfTtcbiAgZm9yIChjb25zdCBjYiBvZiBjYnMpIHtcbiAgICBjYihub3csIG1ldGEpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhaW50KGhvb2s6IFZpZGVvSG9vaywgdmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIHN0YXRlOiBWaWRlb1N0YXRlLCBpZHg6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjID0gaG9vay5jYWNoZS5jYWNoZU9mKHN0YXRlLm1ldGEhLmlkKTtcbiAgYy5yZWFkZXJzLnNldChzdGF0ZSwgaWR4KTtcbiAgbGV0IGJtID0gYy5iaXRtYXBzLmdldChpZHgpO1xuICBpZiAoIWJtKSB7XG4gICAgaG9vay5jYWNoZS5wcmVmZXRjaChzdGF0ZSwgaWR4ICsgMSwgQUhFQUQgLSAxKTtcbiAgICBjb25zdCBmZXRjaGVkID0gYXdhaXQgaG9vay5jYWNoZS5mZXRjaChzdGF0ZSwgaWR4KTtcbiAgICBpZiAoaG9vay5zZXNzaW9ucy5nZXQodmlkZW8pICE9PSBzdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWZldGNoZWQpIHtcbiAgICAgIGlmICghc3RhdGUucGF1c2VkICYmICFzdGF0ZS53YWl0aW5nKSB7XG4gICAgICAgIHN0YXRlLndhaXRpbmcgPSB0cnVlO1xuICAgICAgICBmaXJlKHZpZGVvLCBcIndhaXRpbmdcIik7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGJtID0gZmV0Y2hlZDtcbiAgfVxuICBpZiAoc3RhdGUud2FpdGluZykge1xuICAgIHN0YXRlLndhaXRpbmcgPSBmYWxzZTtcbiAgICBpZiAoIXN0YXRlLnBhdXNlZCkge1xuICAgICAgZmlyZSh2aWRlbywgXCJwbGF5aW5nXCIpO1xuICAgIH1cbiAgfVxuICBjb25zdCBjdiA9IHN0YXRlLmN2O1xuICBjb25zdCByID0gZml0UmVjdChibS53aWR0aCwgYm0uaGVpZ2h0LCBjdi53aWR0aCwgY3YuaGVpZ2h0LCBzdGF0ZS5vYmplY3RGaXQpO1xuICBzdGF0ZS5jdHguY2xlYXJSZWN0KDAsIDAsIGN2LndpZHRoLCBjdi5oZWlnaHQpO1xuICBzdGF0ZS5jdHguZHJhd0ltYWdlKGJtLCByWzBdLCByWzFdLCByWzJdLCByWzNdKTtcbiAgc3RhdGUubGFzdERyYXduSWR4ID0gaWR4O1xuICBzdGF0ZS5wcmVzZW50ZWRGcmFtZXMrKztcbiAgZmlyZUZyYW1lQ2FsbGJhY2tzKHN0YXRlKTtcbiAgaG9vay5jYWNoZS5wcmVmZXRjaChzdGF0ZSwgaWR4ICsgMSwgQUhFQUQpO1xuICBob29rLmNhY2hlLmV2aWN0KGMpO1xufVxuXG4vLyBWaXJ0dWFsLXRpbWUgdGljazogc3luYyBvdmVybGF5cywgYWR2YW5jZSBlYWNoIGhvb2tlZCB2aWRlbydzIGNsb2NrIChsb29wL2VuZCksIHBhaW50IHRoZSBkdWUgZnJhbWUuXG5leHBvcnQgZnVuY3Rpb24gYWR2YW5jZShob29rOiBWaWRlb0hvb2ssIHRpbWVzdGFtcE1zOiBudW1iZXIpOiBQcm9taXNlPHVua25vd24+IHtcbiAgY29uc3QgZHQgPSBNYXRoLm1heCgwLCB0aW1lc3RhbXBNcyAtIGhvb2suY3Vyck1zKSAvIDEwMDA7XG4gIGhvb2suY3Vyck1zID0gdGltZXN0YW1wTXM7XG4gIGNvbnN0IHBzOiBQcm9taXNlPHVua25vd24+W10gPSBbXTtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInZpZGVvXCIpLmZvckVhY2goKGVsKSA9PiB7XG4gICAgY29uc3QgdmlkZW8gPSBlbCBhcyBIVE1MVmlkZW9FbGVtZW50O1xuICAgIGNvbnN0IHN0YXRlID0gaG9vay5zZXNzaW9ucy5nZXQodmlkZW8pO1xuICAgIGlmICghc3RhdGUgfHwgc3RhdGUuZGVhZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBBIGJhY2tpbmctc3RvcmUgcmVzaXplIChhbmltYXRlZCBjb250YWluZXIpIHdpcGVzIHRoZSBjYW52YXM7IGZvcmNlIGEgcmVkcmF3IGV2ZW4gb24gYW4gdW5jaGFuZ2VkIGZyYW1lIGlkeC5cbiAgICBpZiAoc3luY092ZXJsYXkodmlkZW8sIHN0YXRlLmN2KSkge1xuICAgICAgc3RhdGUubGFzdERyYXduSWR4ID0gLTE7XG4gICAgfVxuICAgIGlmICghc3RhdGUubWV0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBFbGVtZW50IGdyZXcgcGFzdCB0aGUgZGVjb2RlZCAoZG93bnNjYWxlZCkgcmVzIOKGkiByZS1kZWNvZGUgYXQgbmF0aXZlLCBvbmUtc2hvdCAoY292ZXJzIHpvb20pLlxuICAgIGlmIChcbiAgICAgIHN0YXRlLm1ldGEuZnJhbWVXaWR0aCA8IHN0YXRlLm1ldGEud2lkdGggJiZcbiAgICAgIHN0YXRlLmN2LndpZHRoID4gc3RhdGUubWV0YS5mcmFtZVdpZHRoICogMS4wNSAmJlxuICAgICAgIWhvb2suYXR0YWNoaW5nLmhhcyh2aWRlbylcbiAgICApIHtcbiAgICAgIGhvb2sucmVhdHRhY2godmlkZW8sIHN0YXRlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFzdGF0ZS5wYXVzZWQgJiYgIXN0YXRlLmVuZGVkKSB7XG4gICAgICBzdGF0ZS5jdXJyZW50VGltZSArPSBkdCAqICh2aWRlby5wbGF5YmFja1JhdGUgfHwgMSk7XG4gICAgICBzdGF0ZS5tYXhSZWFjaGVkID0gTWF0aC5tYXgoc3RhdGUubWF4UmVhY2hlZCwgc3RhdGUuY3VycmVudFRpbWUpO1xuICAgICAgaWYgKHN0YXRlLmN1cnJlbnRUaW1lID49IHN0YXRlLm1ldGEuZHVyYXRpb24pIHtcbiAgICAgICAgaWYgKHZpZGVvLmxvb3ApIHtcbiAgICAgICAgICBzdGF0ZS5jdXJyZW50VGltZSA9IHN0YXRlLmN1cnJlbnRUaW1lICUgc3RhdGUubWV0YS5kdXJhdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZS5jdXJyZW50VGltZSA9IHN0YXRlLm1ldGEuZHVyYXRpb247XG4gICAgICAgICAgc3RhdGUucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICBzdGF0ZS5lbmRlZCA9IHRydWU7XG4gICAgICAgICAgZmlyZSh2aWRlbywgXCJlbmRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlyZSh2aWRlbywgXCJ0aW1ldXBkYXRlXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBpZHggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHN0YXRlLmN1cnJlbnRUaW1lICogc3RhdGUubWV0YS5mcHMpKTtcbiAgICBpZiAoaWR4ID09PSBzdGF0ZS5sYXN0RHJhd25JZHgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcHMucHVzaChwYWludChob29rLCB2aWRlbywgc3RhdGUsIGlkeCkpO1xuICB9KTtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHBzKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmltcG9ydCB7IFNDSEVNRSwgdHlwZSBWaWRlb0NhY2hlLCB0eXBlIFZpZGVvU3RhdGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vLyBQZXItc2Vzc2lvbiBiaXRtYXAgY2FjaGU6IGZldGNoZXMgUkdCQSBmcmFtZXMgZnJvbSB0aGUgZnJhbWUgcHJvdG9jb2wsIGRlZHVwZXMgaW4tZmxpZ2h0LCBldmljdHMgYmVoaW5kIHJlYWRlcnMuXG5leHBvcnQgY2xhc3MgRnJhbWVDYWNoZSB7XG4gIHByaXZhdGUgX2NhY2hlcyA9IG5ldyBNYXA8c3RyaW5nLCBWaWRlb0NhY2hlPigpO1xuXG4gIGNhY2hlT2YoaWQ6IHN0cmluZyk6IFZpZGVvQ2FjaGUge1xuICAgIGxldCBjID0gdGhpcy5fY2FjaGVzLmdldChpZCk7XG4gICAgaWYgKCFjKSB7XG4gICAgICBjID0geyBiaXRtYXBzOiBuZXcgTWFwKCksIGluRmxpZ2h0OiBuZXcgTWFwKCksIHJlYWRlcnM6IG5ldyBNYXAoKSB9O1xuICAgICAgdGhpcy5fY2FjaGVzLnNldChpZCwgYyk7XG4gICAgfVxuICAgIHJldHVybiBjO1xuICB9XG5cbiAgZmV0Y2goc3RhdGU6IFZpZGVvU3RhdGUsIGlkeDogbnVtYmVyKTogUHJvbWlzZTxJbWFnZUJpdG1hcCB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IG1ldGEgPSBzdGF0ZS5tZXRhO1xuICAgIGlmICghbWV0YSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cbiAgICBjb25zdCBjID0gdGhpcy5jYWNoZU9mKG1ldGEuaWQpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gYy5pbkZsaWdodC5nZXQoaWR4KTtcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gICAgY29uc3QgY2FjaGVkID0gYy5iaXRtYXBzLmdldChpZHgpO1xuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY2FjaGVkKTtcbiAgICB9XG4gICAgY29uc3QgdyA9IG1ldGEuZnJhbWVXaWR0aDtcbiAgICBjb25zdCBoID0gbWV0YS5mcmFtZUhlaWdodDtcbiAgICBjb25zdCBwID0gZmV0Y2goYCR7U0NIRU1FfWZyYW1lP2lkPSR7bWV0YS5pZH0maWR4PSR7aWR4fWApXG4gICAgICAudGhlbigocikgPT4gKHIub2sgPyByLmFycmF5QnVmZmVyKCkgOiB1bmRlZmluZWQpKVxuICAgICAgLnRoZW4oKGJ1ZikgPT5cbiAgICAgICAgYnVmICYmIGJ1Zi5ieXRlTGVuZ3RoID09PSB3ICogaCAqIDRcbiAgICAgICAgICA/IGNyZWF0ZUltYWdlQml0bWFwKG5ldyBJbWFnZURhdGEobmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGJ1ZiksIHcsIGgpKVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgKVxuICAgICAgLnRoZW4oKGJtKSA9PiB7XG4gICAgICAgIGMuaW5GbGlnaHQuZGVsZXRlKGlkeCk7XG4gICAgICAgIGlmIChibSkge1xuICAgICAgICAgIGMuYml0bWFwcy5zZXQoaWR4LCBibSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJtO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIGMuaW5GbGlnaHQuZGVsZXRlKGlkeCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcbiAgICBjLmluRmxpZ2h0LnNldChpZHgsIHApO1xuICAgIHJldHVybiBwO1xuICB9XG5cbiAgcHJlZmV0Y2goc3RhdGU6IFZpZGVvU3RhdGUsIGZyb21JZHg6IG51bWJlciwgY291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG1ldGEgPSBzdGF0ZS5tZXRhO1xuICAgIGlmICghbWV0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtYXhJZHggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKG1ldGEuZHVyYXRpb24gKiBtZXRhLmZwcykpO1xuICAgIGZvciAobGV0IGkgPSBmcm9tSWR4OyBpIDwgZnJvbUlkeCArIGNvdW50OyBpKyspIHtcbiAgICAgIGlmIChpIDwgMSB8fCBpID4gbWF4SWR4KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdm9pZCB0aGlzLmZldGNoKHN0YXRlLCBpKTtcbiAgICB9XG4gIH1cblxuICBldmljdChjOiBWaWRlb0NhY2hlKTogdm9pZCB7XG4gICAgbGV0IG1pbklkeCA9IEluZmluaXR5O1xuICAgIGMucmVhZGVycy5mb3JFYWNoKChpZHgpID0+IHtcbiAgICAgIGlmIChpZHggPCBtaW5JZHgpIHtcbiAgICAgICAgbWluSWR4ID0gaWR4O1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG1pbklkeCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmxvb3IgPSBtaW5JZHggLSAyO1xuICAgIGMuYml0bWFwcy5mb3JFYWNoKChibSwgaWR4KSA9PiB7XG4gICAgICBpZiAoaWR4IDwgZmxvb3IpIHtcbiAgICAgICAgYm0uY2xvc2UoKTtcbiAgICAgICAgYy5iaXRtYXBzLmRlbGV0ZShpZHgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gRHJvcCBhIHJlYWRlcjsgd2hlbiB0aGUgbGFzdCBsZWF2ZXMsIGNsb3NlIGJpdG1hcHMgYW5kIHRlbGwgdGhlIHNlcnZlciB0byByZWxlYXNlIHRoZSBkZWNvZGUgc2Vzc2lvbi5cbiAgcmVsZWFzZShpZDogc3RyaW5nLCBzdGF0ZTogVmlkZW9TdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IGMgPSB0aGlzLl9jYWNoZXMuZ2V0KGlkKTtcbiAgICBpZiAoIWMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYy5yZWFkZXJzLmRlbGV0ZShzdGF0ZSk7XG4gICAgaWYgKGMucmVhZGVycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjLmJpdG1hcHMuZm9yRWFjaCgoYm0pID0+IHtcbiAgICAgIGJtLmNsb3NlKCk7XG4gICAgfSk7XG4gICAgdGhpcy5fY2FjaGVzLmRlbGV0ZShpZCk7XG4gICAgZmV0Y2goYCR7U0NIRU1FfWNsb3NlP2lkPSR7aWR9YCwgeyBrZWVwYWxpdmU6IHRydWUgfSk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmltcG9ydCB0eXBlIHsgVmlkZW9Ib29rIH0gZnJvbSBcIi4vaG9va1wiO1xuaW1wb3J0IHsgdHlwZSBGcmFtZUNiLCBmaXJlLCB0aW1lUmFuZ2VzLCB0eXBlIFZpZGVvU3RhdGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vLyBPdmVycmlkZSB0aGUgSFRNTE1lZGlhRWxlbWVudCBzdXJmYWNlIGZvciBob29rZWQgPHZpZGVvPjsgdW5ob29rZWQgZWxlbWVudHMgZmFsbCB0aHJvdWdoIHRvIG5hdGl2ZS5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsTWVkaWFTaGltKGhvb2s6IFZpZGVvSG9vayk6IHZvaWQge1xuICBjb25zdCBIVkUgPSBIVE1MVmlkZW9FbGVtZW50LnByb3RvdHlwZTtcbiAgY29uc3QgTUVESUEgPSBIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZTtcbiAgY29uc3QgbWRlc2MgPSAocDogc3RyaW5nKSA9PiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhWRSwgcCkgfHwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihNRURJQSwgcCk7XG4gIGNvbnN0IGN0RGVzYyA9IG1kZXNjKFwiY3VycmVudFRpbWVcIik7XG4gIGNvbnN0IHNyY0Rlc2MgPSBtZGVzYyhcInNyY1wiKTtcbiAgY29uc3QgcmF0ZURlc2MgPSBtZGVzYyhcInBsYXliYWNrUmF0ZVwiKTtcbiAgY29uc3Qgb3JpZ1BhdXNlID0gSFZFLnBhdXNlO1xuICBjb25zdCBvcmlnUlZGQyA9IEhWRS5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrO1xuICBjb25zdCBvcmlnQ2FuY2VsUlZGQyA9IEhWRS5jYW5jZWxWaWRlb0ZyYW1lQ2FsbGJhY2s7XG4gIGNvbnN0IG9yaWdRdWFsaXR5ID0gSFZFLmdldFZpZGVvUGxheWJhY2tRdWFsaXR5O1xuICBjb25zdCBvcmlnTG9hZCA9IEhWRS5sb2FkO1xuICBjb25zdCBzZXNzaW9ucyA9IGhvb2suc2Vzc2lvbnM7XG5cbiAgLy8gU2Vzc2lvbi1iYWNrZWQgcmVhZC1vbmx5IHByb3BlcnR5IHdpdGggbmF0aXZlIGZhbGxiYWNrIHdoZW4gdGhlIGVsZW1lbnQgaXNuJ3QgaG9va2VkLlxuICBjb25zdCBkZWYgPSAocHJvcDogc3RyaW5nLCBwaWNrOiAoczogVmlkZW9TdGF0ZSkgPT4gdW5rbm93bikgPT4ge1xuICAgIGNvbnN0IG5hdGl2ZUdldCA9IG1kZXNjKHByb3ApPy5nZXQ7XG4gICAgaWYgKCFuYXRpdmVHZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbWVkaWFfc2hpbTogbm8gbmF0aXZlIGdldHRlciBmb3IgJHtwcm9wfWApO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFZFLCBwcm9wLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgICAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgICAgICByZXR1cm4gcyA/IHBpY2socykgOiBuYXRpdmVHZXQuY2FsbCh0aGlzKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG4gIGRlZihcInBhdXNlZFwiLCAocykgPT4gcy5wYXVzZWQpO1xuICBkZWYoXCJlbmRlZFwiLCAocykgPT4gcy5lbmRlZCk7XG4gIGRlZihcInJlYWR5U3RhdGVcIiwgKHMpID0+IHMucmVhZHlTdGF0ZSk7XG4gIGRlZihcIm5ldHdvcmtTdGF0ZVwiLCAocykgPT4gcy5uZXR3b3JrU3RhdGUpO1xuICBkZWYoXCJlcnJvclwiLCAocykgPT4gcy5lcnJvciA/PyBudWxsKTtcbiAgZGVmKFwic2Vla2luZ1wiLCAocykgPT4gcy5zZWVraW5nKTtcbiAgZGVmKFwiYnVmZmVyZWRcIiwgKHMpID0+IHRpbWVSYW5nZXMocy5tZXRhID8gcy5tZXRhLmR1cmF0aW9uIDogMCkpO1xuICBkZWYoXCJzZWVrYWJsZVwiLCAocykgPT4gdGltZVJhbmdlcyhzLm1ldGEgPyBzLm1ldGEuZHVyYXRpb24gOiAwKSk7XG4gIGRlZihcInBsYXllZFwiLCAocykgPT4gdGltZVJhbmdlcyhzLm1heFJlYWNoZWQpKTtcblxuICBIVkUucGxheSA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICBpZiAoIXMpIHtcbiAgICAgIHJldHVybiBob29rLmF0dGFjaCh0aGlzKS50aGVuKChucykgPT4ge1xuICAgICAgICBpZiAobnMpIHtcbiAgICAgICAgICBob29rLnJlc3VtZSh0aGlzLCBucyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBob29rLnJlc3VtZSh0aGlzLCBzKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH07XG4gIEhWRS5wYXVzZSA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICBpZiAoIXMpIHtcbiAgICAgIG9yaWdQYXVzZS5jYWxsKHRoaXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXMucGF1c2VkKSB7XG4gICAgICBzLnBhdXNlZCA9IHRydWU7XG4gICAgICBmaXJlKHRoaXMsIFwicGF1c2VcIik7XG4gICAgfVxuICB9O1xuICBpZiAoY3REZXNjPy5nZXQgJiYgY3REZXNjLnNldCkge1xuICAgIGNvbnN0IGN0R2V0ID0gY3REZXNjLmdldDtcbiAgICBjb25zdCBjdFNldCA9IGN0RGVzYy5zZXQ7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhWRSwgXCJjdXJyZW50VGltZVwiLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgICAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgICAgICByZXR1cm4gcyA/IHMuY3VycmVudFRpbWUgOiBjdEdldC5jYWxsKHRoaXMpO1xuICAgICAgfSxcbiAgICAgIHNldCh0aGlzOiBIVE1MVmlkZW9FbGVtZW50LCB0OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICAgICAgaWYgKCFzKSB7XG4gICAgICAgICAgY3RTZXQuY2FsbCh0aGlzLCB0KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZHVyID0gcy5tZXRhID8gcy5tZXRhLmR1cmF0aW9uIDogdDtcbiAgICAgICAgcy5jdXJyZW50VGltZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKHQsIGR1cikpO1xuICAgICAgICBzLm1heFJlYWNoZWQgPSBNYXRoLm1heChzLm1heFJlYWNoZWQsIHMuY3VycmVudFRpbWUpO1xuICAgICAgICBpZiAocy5jdXJyZW50VGltZSA8IGR1cikge1xuICAgICAgICAgIHMuZW5kZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBzLnNlZWtpbmcgPSB0cnVlO1xuICAgICAgICBmaXJlKHRoaXMsIFwic2Vla2luZ1wiKTtcbiAgICAgICAgcy5zZWVraW5nID0gZmFsc2U7XG4gICAgICAgIGZpcmUodGhpcywgXCJzZWVrZWRcIik7XG4gICAgICAgIGZpcmUodGhpcywgXCJ0aW1ldXBkYXRlXCIpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBpZiAocmF0ZURlc2M/LnNldCkge1xuICAgIGNvbnN0IHJhdGVTZXQgPSByYXRlRGVzYy5zZXQ7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhWRSwgXCJwbGF5YmFja1JhdGVcIiwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiByYXRlRGVzYy5nZXQsXG4gICAgICBzZXQodGhpczogSFRNTFZpZGVvRWxlbWVudCwgcjogbnVtYmVyKSB7XG4gICAgICAgIHJhdGVTZXQuY2FsbCh0aGlzLCByKTtcbiAgICAgICAgaWYgKHNlc3Npb25zLmhhcyh0aGlzKSkge1xuICAgICAgICAgIGZpcmUodGhpcywgXCJyYXRlY2hhbmdlXCIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIEhWRS5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrID0gZnVuY3Rpb24gKHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQsIGNiKTogbnVtYmVyIHtcbiAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgIGlmICghcykge1xuICAgICAgcmV0dXJuIG9yaWdSVkZDLmNhbGwodGhpcywgY2IpO1xuICAgIH1cbiAgICBjb25zdCBpZCA9ICsraG9vay5ydmZjU2VxO1xuICAgIHMucnZmYy5zZXQoaWQsIGNiIGFzIEZyYW1lQ2IpO1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgSFZFLmNhbmNlbFZpZGVvRnJhbWVDYWxsYmFjayA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50LCBpZDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICBpZiAoIXMpIHtcbiAgICAgIG9yaWdDYW5jZWxSVkZDLmNhbGwodGhpcywgaWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzLnJ2ZmMuZGVsZXRlKGlkKTtcbiAgfTtcbiAgSFZFLmdldFZpZGVvUGxheWJhY2tRdWFsaXR5ID0gZnVuY3Rpb24gKHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgIGlmICghcykge1xuICAgICAgcmV0dXJuIG9yaWdRdWFsaXR5LmNhbGwodGhpcyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGlvblRpbWU6IHBlcmZvcm1hbmNlLm5vdygpLFxuICAgICAgdG90YWxWaWRlb0ZyYW1lczogcy5wcmVzZW50ZWRGcmFtZXMsXG4gICAgICBkcm9wcGVkVmlkZW9GcmFtZXM6IDAsXG4gICAgICBjb3JydXB0ZWRWaWRlb0ZyYW1lczogMCxcbiAgICB9IGFzIFZpZGVvUGxheWJhY2tRdWFsaXR5O1xuICB9O1xuICBIVkUubG9hZCA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgaWYgKCFzZXNzaW9ucy5oYXModGhpcykpIHtcbiAgICAgIHJldHVybiBvcmlnTG9hZC5jYWxsKHRoaXMpO1xuICAgIH1cbiAgICBob29rLmRldGFjaCh0aGlzKTtcbiAgICBmaXJlKHRoaXMsIFwiZW1wdGllZFwiKTtcbiAgICB0aGlzLl9fcHVwTGFzdFNyYyA9IHVuZGVmaW5lZDtcbiAgICBob29rLmF0dGFjaCh0aGlzKTtcbiAgfTtcbiAgaWYgKHNyY0Rlc2M/LnNldCkge1xuICAgIGNvbnN0IHNyY1NldCA9IHNyY0Rlc2Muc2V0O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVkUsIFwic3JjXCIsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogc3JjRGVzYy5nZXQsXG4gICAgICBzZXQodGhpczogSFRNTFZpZGVvRWxlbWVudCwgdjogc3RyaW5nKSB7XG4gICAgICAgIHNyY1NldC5jYWxsKHRoaXMsIHYpO1xuICAgICAgICBob29rLm9uU3JjQ2hhbmdlKHRoaXMpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxuaW1wb3J0IHR5cGUgeyBWaWRlb0hvb2sgfSBmcm9tIFwiLi9ob29rXCI7XG5pbXBvcnQge1xuICBBSEVBRCxcbiAgZmlyZSxcbiAgSEFWRV9FTk9VR0hfREFUQSxcbiAgSEFWRV9NRVRBREFUQSxcbiAgSEFWRV9OT1RISU5HLFxuICBNRURJQV9FUlJfREVDT0RFLFxuICBNRURJQV9FUlJfTkVUV09SSyxcbiAgdHlwZSBNZWRpYUVycm9yTGlrZSxcbiAgTkVUV09SS19FTVBUWSxcbiAgTkVUV09SS19JRExFLFxuICBORVRXT1JLX0xPQURJTkcsXG4gIE5FVFdPUktfTk9fU09VUkNFLFxuICBTQ0hFTUUsXG4gIFRBRyxcbiAgdHlwZSBWaWRlb01ldGEsXG4gIHR5cGUgVmlkZW9TdGF0ZSxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBdHRhY2hBcmdzIHtcbiAgdmlkZW86IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHN0YXRlOiBWaWRlb1N0YXRlO1xuICBzcmM6IHN0cmluZztcbiAgYmlydGhNczogbnVtYmVyO1xuICBuYXRpdmU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXdWaWRlb1N0YXRlKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBjdjogSFRNTENhbnZhc0VsZW1lbnQpOiBWaWRlb1N0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICBtZXRhOiB1bmRlZmluZWQsXG4gICAgY3YsXG4gICAgY3R4OiBjdi5nZXRDb250ZXh0KFwiMmRcIikhLFxuICAgIHBhdXNlZDogISh2aWRlby5hdXRvcGxheSB8fCAhdmlkZW8ucGF1c2VkKSxcbiAgICBjdXJyZW50VGltZTogMCxcbiAgICBlbmRlZDogZmFsc2UsXG4gICAgbGFzdERyYXduSWR4OiAtMSxcbiAgICBkZWFkOiBmYWxzZSxcbiAgICBvYmplY3RGaXQ6IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHZpZGVvKS5vYmplY3RGaXQgfHwgXCJmaWxsXCIsXG4gICAgcmVhZHlTdGF0ZTogSEFWRV9OT1RISU5HLFxuICAgIG5ldHdvcmtTdGF0ZTogTkVUV09SS19FTVBUWSxcbiAgICBzZWVraW5nOiBmYWxzZSxcbiAgICB3YWl0aW5nOiBmYWxzZSxcbiAgICBlcnJvcjogdW5kZWZpbmVkLFxuICAgIHByZXNlbnRlZEZyYW1lczogMCxcbiAgICBtYXhSZWFjaGVkOiAwLFxuICAgIHJ2ZmM6IG5ldyBNYXAoKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZmFpbE9wZW4odmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIHN0YXRlOiBWaWRlb1N0YXRlLCBlcnJvcjogTWVkaWFFcnJvckxpa2UpOiB1bmRlZmluZWQge1xuICBzdGF0ZS5kZWFkID0gdHJ1ZTtcbiAgc3RhdGUuZXJyb3IgPSBlcnJvcjtcbiAgc3RhdGUubmV0d29ya1N0YXRlID0gTkVUV09SS19OT19TT1VSQ0U7XG4gIGNvbnNvbGUuZXJyb3IoVEFHLCBgJHtlcnJvci5tZXNzYWdlfSBzcmM9JHt2aWRlby5zcmMgfHwgdmlkZW8uY3VycmVudFNyY31gKTtcbiAgZmlyZSh2aWRlbywgXCJlcnJvclwiKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLy8gT3BlbiB0aGUgZnJhbWUgc2VydmVyIHNlc3Npb24sIHRoZW4gZW1pdCB0aGUgSFRNTE1lZGlhRWxlbWVudCBsb2FkIHNlcXVlbmNlIChyZWFkeVN0YXRlL25ldHdvcmtTdGF0ZSArIGV2ZW50cykuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblNlc3Npb24oaG9vazogVmlkZW9Ib29rLCBhcmdzOiBBdHRhY2hBcmdzKTogUHJvbWlzZTxWaWRlb1N0YXRlIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHsgdmlkZW8sIHN0YXRlLCBzcmMsIGJpcnRoTXMsIG5hdGl2ZSB9ID0gYXJncztcbiAgY29uc3QgZnBzID0gTnVtYmVyLnBhcnNlSW50KHZpZGVvLmRhdGFzZXRbXCJwdXBGcHNcIl0gfHwgXCIzMFwiLCAxMCk7XG4gIHN0YXRlLm5ldHdvcmtTdGF0ZSA9IE5FVFdPUktfTE9BRElORztcbiAgZmlyZSh2aWRlbywgXCJsb2Fkc3RhcnRcIik7XG4gIGxldCByZXM6IFJlc3BvbnNlO1xuICB0cnkge1xuICAgIGNvbnN0IHEgPSBuYXRpdmUgPyBcIlwiIDogYCZ3PSR7c3RhdGUuY3Yud2lkdGh9Jmg9JHtzdGF0ZS5jdi5oZWlnaHR9JmZpdD0ke2VuY29kZVVSSUNvbXBvbmVudChzdGF0ZS5vYmplY3RGaXQpfWA7XG4gICAgcmVzID0gYXdhaXQgZmV0Y2goYCR7U0NIRU1FfW9wZW4/c3JjPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNyYyl9JmZwcz0ke2Zwc30ke3F9YCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFpbE9wZW4odmlkZW8sIHN0YXRlLCB7XG4gICAgICBjb2RlOiBNRURJQV9FUlJfTkVUV09SSyxcbiAgICAgIG1lc3NhZ2U6IGBvcGVuIGZhaWxlZDogJHtlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSl9YCxcbiAgICB9KTtcbiAgfVxuICBpZiAoaG9vay5zZXNzaW9ucy5nZXQodmlkZW8pICE9PSBzdGF0ZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKCFyZXMub2spIHtcbiAgICByZXR1cm4gZmFpbE9wZW4odmlkZW8sIHN0YXRlLCB7XG4gICAgICBjb2RlOiBNRURJQV9FUlJfREVDT0RFLFxuICAgICAgbWVzc2FnZTogYG9wZW4gJHtyZXMuc3RhdHVzfTogJHthd2FpdCByZXMudGV4dCgpfWAsXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgbWV0YSA9IChhd2FpdCByZXMuanNvbigpKSBhcyBWaWRlb01ldGE7XG4gIGlmIChob29rLnNlc3Npb25zLmdldCh2aWRlbykgIT09IHN0YXRlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBzdGF0ZS5tZXRhID0gbWV0YTtcbiAgc3RhdGUuY3VycmVudFRpbWUgPSBzdGF0ZS5wYXVzZWQgPyAwIDogTWF0aC5tYXgoMCwgKGhvb2suY3Vyck1zIC0gYmlydGhNcykgLyAxMDAwKTtcbiAgLy8gVGhlIHN0dWIgbWVkaWEgdXN1YWxseSBsb2FkcyBuYXRpdmVseSBmaXJzdDsgQmxpbmsgdGhlbiBvd25zIHRoZSByZWFsIGV2ZW50IHNlcXVlbmNlIOKAlCBkb24ndCBkdXBsaWNhdGUgaXQuXG4gIGNvbnN0IG5hdGl2ZU1ldGEgPSB2aWRlby52aWRlb1dpZHRoID4gMDtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpZGVvLCBcInZpZGVvV2lkdGhcIiwge1xuICAgIHZhbHVlOiBtZXRhLndpZHRoLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2aWRlbywgXCJ2aWRlb0hlaWdodFwiLCB7XG4gICAgdmFsdWU6IG1ldGEuaGVpZ2h0LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2aWRlbywgXCJkdXJhdGlvblwiLCB7XG4gICAgdmFsdWU6IG1ldGEuZHVyYXRpb24sXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICB9KTtcbiAgc3RhdGUucmVhZHlTdGF0ZSA9IEhBVkVfTUVUQURBVEE7XG4gIGlmICghbmF0aXZlTWV0YSkge1xuICAgIGZpcmUodmlkZW8sIFwiZHVyYXRpb25jaGFuZ2VcIik7XG4gICAgZmlyZSh2aWRlbywgXCJsb2FkZWRtZXRhZGF0YVwiKTtcbiAgfVxuICBzdGF0ZS5yZWFkeVN0YXRlID0gSEFWRV9FTk9VR0hfREFUQTtcbiAgaWYgKCFuYXRpdmVNZXRhKSB7XG4gICAgZmlyZSh2aWRlbywgXCJsb2FkZWRkYXRhXCIpO1xuICAgIGZpcmUodmlkZW8sIFwiY2FucGxheVwiKTtcbiAgICBmaXJlKHZpZGVvLCBcImNhbnBsYXl0aHJvdWdoXCIpO1xuICB9XG4gIHN0YXRlLm5ldHdvcmtTdGF0ZSA9IE5FVFdPUktfSURMRTtcbiAgaWYgKCFuYXRpdmVNZXRhKSB7XG4gICAgZmlyZSh2aWRlbywgXCJzdXNwZW5kXCIpO1xuICAgIGlmICghc3RhdGUucGF1c2VkKSB7XG4gICAgICBmaXJlKHZpZGVvLCBcInBsYXlcIik7XG4gICAgICBmaXJlKHZpZGVvLCBcInBsYXlpbmdcIik7XG4gICAgfVxuICB9XG4gIGhvb2suY2FjaGUucHJlZmV0Y2goc3RhdGUsIDEsIEFIRUFEKTtcbiAgcmV0dXJuIHN0YXRlO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxuaW1wb3J0IHsgYWR2YW5jZSB9IGZyb20gXCIuL2RyaXZlclwiO1xuaW1wb3J0IHsgRnJhbWVDYWNoZSB9IGZyb20gXCIuL2ZyYW1lX2NhY2hlXCI7XG5pbXBvcnQgeyBpbnN0YWxsTWVkaWFTaGltIH0gZnJvbSBcIi4vbWVkaWFfc2hpbVwiO1xuaW1wb3J0IHsgc2V0dXBDYW52YXMgfSBmcm9tIFwiLi9vdmVybGF5XCI7XG5pbXBvcnQgeyBuZXdWaWRlb1N0YXRlLCBvcGVuU2Vzc2lvbiB9IGZyb20gXCIuL3Nlc3Npb25cIjtcbmltcG9ydCB7IGZpcmUsIHR5cGUgVmlkZW9TdGF0ZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgX19wdXBfdmlkZW9fXz86IHsgYWR2YW5jZTogKG1zOiBudW1iZXIpID0+IFByb21pc2U8dW5rbm93bj47IHJlYWR5OiAoKSA9PiBQcm9taXNlPHZvaWQ+IH07XG4gIH1cbiAgaW50ZXJmYWNlIEhUTUxWaWRlb0VsZW1lbnQge1xuICAgIF9fcHVwTGFzdFNyYz86IHN0cmluZztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmlkZW9Ib29rIHtcbiAgcmVhZG9ubHkgc2Vzc2lvbnMgPSBuZXcgV2Vha01hcDxIVE1MVmlkZW9FbGVtZW50LCBWaWRlb1N0YXRlPigpO1xuICByZWFkb25seSBhdHRhY2hpbmcgPSBuZXcgV2Vha01hcDxIVE1MVmlkZW9FbGVtZW50LCBQcm9taXNlPFZpZGVvU3RhdGUgfCB1bmRlZmluZWQ+PigpO1xuICAvLyBFbnVtZXJhYmxlIG1pcnJvciBvZiBpbi1mbGlnaHQgb3BlbnMgKFdlYWtNYXAgaXNuJ3QgaXRlcmFibGUpIHNvIHJlYWR5KCkgY2FuIGF3YWl0IHRoZW0uXG4gIHJlYWRvbmx5IG9wZW5pbmcgPSBuZXcgU2V0PFByb21pc2U8dW5rbm93bj4+KCk7XG4gIHJlYWRvbmx5IGNhY2hlID0gbmV3IEZyYW1lQ2FjaGUoKTtcbiAgcnZmY1NlcSA9IDA7XG4gIGN1cnJNcyA9IDA7XG4gIHByaXZhdGUgX2xhc3RTbmFwc2hvdCA9IG5ldyBXZWFrTWFwPEhUTUxWaWRlb0VsZW1lbnQsIE9mZnNjcmVlbkNhbnZhcz4oKTtcblxuICBpbnN0YWxsKCk6IHZvaWQge1xuICAgIGluc3RhbGxNZWRpYVNoaW0odGhpcyk7XG4gICAgdGhpcy5zY2FuKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7XG4gICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dHMpID0+IHtcbiAgICAgIGZvciAoY29uc3QgbSBvZiBtdXRzKSB7XG4gICAgICAgIGlmIChtLnR5cGUgPT09IFwiYXR0cmlidXRlc1wiICYmIG0udGFyZ2V0IGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCAmJiBtLmF0dHJpYnV0ZU5hbWUgPT09IFwic3JjXCIpIHtcbiAgICAgICAgICB0aGlzLm9uU3JjQ2hhbmdlKG0udGFyZ2V0KTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBtLmFkZGVkTm9kZXMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICAgIGlmIChuIGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5zY2FuKG4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG0ucmVtb3ZlZE5vZGVzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgICBpZiAobiBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZGV0YWNoKG4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkub2JzZXJ2ZShkb2N1bWVudCwgeyBzdWJ0cmVlOiB0cnVlLCBjaGlsZExpc3Q6IHRydWUsIGF0dHJpYnV0ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogW1wic3JjXCJdIH0pO1xuICAgIHdpbmRvdy5fX3B1cF92aWRlb19fID0geyBhZHZhbmNlOiAobXMpID0+IGFkdmFuY2UodGhpcywgbXMpLCByZWFkeTogKCkgPT4gdGhpcy5yZWFkeSgpIH07XG4gIH1cblxuICBhdHRhY2godmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIG5hdGl2ZSA9IGZhbHNlKTogUHJvbWlzZTxWaWRlb1N0YXRlIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLnNlc3Npb25zLmdldCh2aWRlbyk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGV4aXN0aW5nKTtcbiAgICB9XG4gICAgY29uc3QgcGVuZGluZyA9IHRoaXMuYXR0YWNoaW5nLmdldCh2aWRlbyk7XG4gICAgaWYgKHBlbmRpbmcpIHtcbiAgICAgIHJldHVybiBwZW5kaW5nO1xuICAgIH1cbiAgICBjb25zdCBzcmMgPSB2aWRlby5zcmMgfHwgdmlkZW8uY3VycmVudFNyYztcbiAgICBpZiAoIXNyYykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cbiAgICBpZiAoL14oYmxvYjp8ZGF0YTp8bWVkaWFzdHJlYW06KS9pLnRlc3Qoc3JjKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cbiAgICBjb25zdCBjdiA9IHNldHVwQ2FudmFzKHZpZGVvLCB0aGlzLl9sYXN0U25hcHNob3QuZ2V0KHZpZGVvKSk7XG4gICAgY29uc3Qgc3RhdGUgPSBuZXdWaWRlb1N0YXRlKHZpZGVvLCBjdik7XG4gICAgdGhpcy5zZXNzaW9ucy5zZXQodmlkZW8sIHN0YXRlKTtcbiAgICBjb25zdCBwID0gb3BlblNlc3Npb24odGhpcywgeyB2aWRlbywgc3RhdGUsIHNyYywgYmlydGhNczogdGhpcy5jdXJyTXMsIG5hdGl2ZSB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMuYXR0YWNoaW5nLmRlbGV0ZSh2aWRlbyk7XG4gICAgICB0aGlzLm9wZW5pbmcuZGVsZXRlKHApO1xuICAgIH0pO1xuICAgIHRoaXMuYXR0YWNoaW5nLnNldCh2aWRlbywgcCk7XG4gICAgdGhpcy5vcGVuaW5nLmFkZChwKTtcbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIC8vIEF3YWl0IG9ubHkgdGhlIG9wZW5zIGluIGZsaWdodCByaWdodCBub3cg4oCUIG5ldmVyIGNoYXNlIG5ld2x5LXNwYXduZWQgb25lcywgb3IgYSByZXRyeWluZyBwYWdlIGxvb3BzIGZvcmV2ZXIuXG4gIGFzeW5jIHJlYWR5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbLi4udGhpcy5vcGVuaW5nXSk7XG4gIH1cblxuICByZXN1bWUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIHN0YXRlOiBWaWRlb1N0YXRlKTogdm9pZCB7XG4gICAgaWYgKCFzdGF0ZS5wYXVzZWQgJiYgIXN0YXRlLmVuZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0YXRlLnBhdXNlZCA9IGZhbHNlO1xuICAgIHN0YXRlLmVuZGVkID0gZmFsc2U7XG4gICAgZmlyZSh2aWRlbywgXCJwbGF5XCIpO1xuICAgIGZpcmUodmlkZW8sIFwicGxheWluZ1wiKTtcbiAgfVxuXG4gIGRldGFjaCh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zZXNzaW9ucy5nZXQodmlkZW8pO1xuICAgIGlmICghc3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHN0YXRlLm1ldGEpIHtcbiAgICAgIGlmIChzdGF0ZS5sYXN0RHJhd25JZHggPj0gMCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNuYXAgPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHN0YXRlLmN2LndpZHRoLCBzdGF0ZS5jdi5oZWlnaHQpO1xuICAgICAgICAgIGNvbnN0IHNjdHggPSBzbmFwLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgICAgICBpZiAoIXNjdHgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vIDJkIGNvbnRleHRcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNjdHguZHJhd0ltYWdlKHN0YXRlLmN2LCAwLCAwKTtcbiAgICAgICAgICB0aGlzLl9sYXN0U25hcHNob3Quc2V0KHZpZGVvLCBzbmFwKTtcbiAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgfVxuICAgICAgdGhpcy5jYWNoZS5yZWxlYXNlKHN0YXRlLm1ldGEuaWQsIHN0YXRlKTtcbiAgICB9XG4gICAgc3RhdGUuY3YucmVtb3ZlKCk7XG4gICAgdGhpcy5zZXNzaW9ucy5kZWxldGUodmlkZW8pO1xuICAgIHRoaXMuYXR0YWNoaW5nLmRlbGV0ZSh2aWRlbyk7XG4gIH1cblxuICBvblNyY0NoYW5nZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IHNyYyA9IHZpZGVvLnNyYyB8fCB2aWRlby5jdXJyZW50U3JjIHx8IFwiXCI7XG4gICAgaWYgKHZpZGVvLl9fcHVwTGFzdFNyYyA9PT0gc3JjKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZpZGVvLl9fcHVwTGFzdFNyYyA9IHNyYztcbiAgICBpZiAodGhpcy5zZXNzaW9ucy5oYXModmlkZW8pKSB7XG4gICAgICB0aGlzLmRldGFjaCh2aWRlbyk7XG4gICAgfVxuICAgIHRoaXMuYXR0YWNoKHZpZGVvKTtcbiAgfVxuXG4gIC8vIFJlLW9wZW4gYXQgbmF0aXZlIHJlc29sdXRpb24gKHRoZSBlbGVtZW50IG91dGdyZXcgdGhlIGRvd25zY2FsZWQgZGVjb2RlKSwgcHJlc2VydmluZyBwbGF5YmFjayBzdGF0ZS5cbiAgcmVhdHRhY2godmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIHN0YXRlOiBWaWRlb1N0YXRlKTogdm9pZCB7XG4gICAgY29uc3QgdCA9IHN0YXRlLmN1cnJlbnRUaW1lO1xuICAgIGNvbnN0IHBhdXNlZCA9IHN0YXRlLnBhdXNlZDtcbiAgICBjb25zdCBlbmRlZCA9IHN0YXRlLmVuZGVkO1xuICAgIHRoaXMuZGV0YWNoKHZpZGVvKTtcbiAgICB2b2lkIHRoaXMuYXR0YWNoKHZpZGVvLCB0cnVlKS50aGVuKChucykgPT4ge1xuICAgICAgaWYgKCFucykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBucy5jdXJyZW50VGltZSA9IHQ7XG4gICAgICBucy5wYXVzZWQgPSBwYXVzZWQ7XG4gICAgICBucy5lbmRlZCA9IGVuZGVkO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzY2FuKHJvb3Q6IEVsZW1lbnQgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKCFyb290KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyb290LnRhZ05hbWUgPT09IFwiVklERU9cIikge1xuICAgICAgdGhpcy5hdHRhY2gocm9vdCBhcyBIVE1MVmlkZW9FbGVtZW50KTtcbiAgICB9XG4gICAgaWYgKHJvb3QucXVlcnlTZWxlY3RvckFsbCkge1xuICAgICAgcm9vdC5xdWVyeVNlbGVjdG9yQWxsKFwidmlkZW9cIikuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICB0aGlzLmF0dGFjaCh2KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbFZpZGVvSG9vaygpOiB2b2lkIHtcbiAgaWYgKHdpbmRvdy5fX3B1cF92aWRlb19fKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIG5ldyBWaWRlb0hvb2soKS5pbnN0YWxsKCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzI2LlxuXG5pbXBvcnQgeyBpbnN0YWxsVGlja0hvb2sgfSBmcm9tIFwiLi9pZnJhbWVfaG9va1wiO1xuaW1wb3J0IHsgaW5zdGFsbFZpZGVvSG9vayB9IGZyb20gXCIuL3ZpZGVvL2hvb2tcIjtcblxuaWYgKHdpbmRvdy5zZWxmICE9PSB3aW5kb3cudG9wKSB7XG4gIGluc3RhbGxUaWNrSG9vaygpO1xuICBpbnN0YWxsVmlkZW9Ib29rKCk7XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pup-recorder",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.6",
|
|
4
4
|
"description": "Record web pages as video",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"exports": {
|
|
19
19
|
"./package.json": "./package.json",
|
|
20
20
|
".": {
|
|
21
|
-
"types": "./dist/index.d.ts",
|
|
21
|
+
"types": "./dist/src/index.d.ts",
|
|
22
22
|
"import": "./dist/index.js",
|
|
23
23
|
"require": "./dist/index.js"
|
|
24
24
|
}
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
"@microsoft/api-extractor": "latest",
|
|
65
65
|
"@types/bun": "latest",
|
|
66
66
|
"@types/node": "^22.0.0",
|
|
67
|
-
"
|
|
67
|
+
"typescript": "latest",
|
|
68
68
|
"tsup": "latest"
|
|
69
69
|
},
|
|
70
70
|
"scripts": {
|
package/tsconfig.json
CHANGED
|
@@ -7,9 +7,10 @@
|
|
|
7
7
|
"types": ["node"],
|
|
8
8
|
|
|
9
9
|
"moduleResolution": "bundler",
|
|
10
|
-
"allowImportingTsExtensions": true,
|
|
11
10
|
"verbatimModuleSyntax": true,
|
|
12
|
-
"
|
|
11
|
+
"declaration": true,
|
|
12
|
+
"emitDeclarationOnly": true,
|
|
13
|
+
"outDir": "dist",
|
|
13
14
|
|
|
14
15
|
"strict": true,
|
|
15
16
|
"skipLibCheck": true,
|