@vonage/ml-transformers 5.1.0 → 5.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ml-transformers.es.js +2391 -2385
- package/dist/ml-transformers.min.js +2 -2
- package/dist/ml-transformers.static.js +2391 -2385
- package/dist/ml-transformers.umd.js +41 -41
- package/dist/types/lib/src/filters/background-filter.d.ts +2 -0
- package/dist/types/lib/src/renderers/canvas2d/renderers/video-background.d.ts +2 -1
- package/dist/types/lib/src/renderers/interfaces/renderers/video-background.d.ts +2 -1
- package/dist/types/lib/src/renderers/webgl/pipelines/background-video.d.ts +2 -1
- package/dist/types/lib/src/renderers/webgl/renderers/video-background.d.ts +2 -1
- package/package.json +1 -1
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
(function(Ue,Dn){typeof exports=="object"&&typeof module<"u"?Dn(exports):typeof define=="function"&&define.amd?define(["exports"],Dn):(Ue=typeof globalThis<"u"?globalThis:Ue||self,Dn(Ue["ml-transformers"]={}))})(this,function(Ue){"use strict";var Q3=Object.defineProperty;var D3=(Ue,Dn,Zr)=>Dn in Ue?Q3(Ue,Dn,{enumerable:!0,configurable:!0,writable:!0,value:Zr}):Ue[Dn]=Zr;var
|
|
2
|
-
data: ${x}`)})}logIfDebugEnabled(n,r,f){(vr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,f)}on(n,r){mi(r),n=Array.isArray(n)?n:[n];for(const f of n)wr(f),Hr(this,f).add(r),this.logIfDebugEnabled("subscribe",f,void 0),go(f)||this.emit(hi,{eventName:f,listener:r});return this.off.bind(this,n,r)}off(n,r){mi(r),n=Array.isArray(n)?n:[n];for(const f of n)wr(f),Hr(this,f).delete(r),this.logIfDebugEnabled("unsubscribe",f,void 0),go(f)||this.emit(fi,{eventName:f,listener:r})}once(n){return new Promise(r=>{const f=this.on(n,Z=>{f(),r(Z)})})}events(n){n=Array.isArray(n)?n:[n];for(const r of n)wr(r);return gs(this,n)}async emit(n,r){wr(n),this.logIfDebugEnabled("emit",n,r),y2(this,n,r);const f=Hr(this,n),Z=sr.get(this),x=[...f],H=go(n)?[]:[...Z];await ys,await Promise.all([...x.map(async T=>{if(f.has(T))return T(r)}),...H.map(async T=>{if(Z.has(T))return T(n,r)})])}async emitSerial(n,r){wr(n),this.logIfDebugEnabled("emitSerial",n,r);const f=Hr(this,n),Z=sr.get(this),x=[...f],H=[...Z];await ys;for(const T of x)f.has(T)&&await T(r);for(const T of H)Z.has(T)&&await T(n,r)}onAny(n){return mi(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),sr.get(this).add(n),this.emit(hi,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return gs(this)}offAny(n){mi(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(fi,{listener:n}),sr.get(this).delete(n)}clearListeners(n){n=Array.isArray(n)?n:[n];for(const r of n)if(this.logIfDebugEnabled("clear",r,void 0),typeof r=="string"||typeof r=="symbol"){Hr(this,r).clear();const f=_r(this,r);for(const Z of f)Z.finish();f.clear()}else{sr.get(this).clear();for(const f of di.get(this).values())f.clear();for(const f of Pr.get(this).values()){for(const Z of f)Z.finish();f.clear()}}}listenerCount(n){n=Array.isArray(n)?n:[n];let r=0;for(const f of n){if(typeof f=="string"){r+=sr.get(this).size+Hr(this,f).size+_r(this,f).size+_r(this).size;continue}typeof f<"u"&&wr(f),r+=sr.get(this).size;for(const Z of di.get(this).values())r+=Z.size;for(const Z of Pr.get(this).values())r+=Z.size}return r}bindMethods(n,r){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");r=Zs(r);for(const f of r){if(n[f]!==void 0)throw new Error(`The property \`${f}\` already exists on \`target\``);Object.defineProperty(n,f,{enumerable:!1,value:this[f].bind(this)})}}}const vs=Object.getOwnPropertyNames(vr.prototype).filter(i=>i!=="constructor");Object.defineProperty(vr,"listenerAdded",{value:hi,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(vr,"listenerRemoved",{value:fi,writable:!1,enumerable:!0,configurable:!1});var Zo=vr;function g2(i){return typeof i=="object"&&i!==null&&"message"in i&&typeof i.message=="string"}function Z2(i){if(g2(i))return i;try{return new Error(JSON.stringify(i))}catch{return new Error(String(i))}}function vo(i){return Z2(i).message}var v2=Object.defineProperty,G2=(i,n,r)=>n in i?v2(i,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[n]=r,X2=(i,n,r)=>(G2(i,typeof n!="symbol"?n+"":n,r),r);const V2="hlg.tokbox.com/prod/logging/vcp_webrtc",W2="https://",R2=1e4;let pi;const I2=new Uint8Array(16);function x2(){if(!pi&&(pi=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!pi))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return pi(I2)}const Kn=[];for(let i=0;i<256;++i)Kn.push((i+256).toString(16).slice(1));function S2(i,n=0){return(Kn[i[n+0]]+Kn[i[n+1]]+Kn[i[n+2]]+Kn[i[n+3]]+"-"+Kn[i[n+4]]+Kn[i[n+5]]+"-"+Kn[i[n+6]]+Kn[i[n+7]]+"-"+Kn[i[n+8]]+Kn[i[n+9]]+"-"+Kn[i[n+10]]+Kn[i[n+11]]+Kn[i[n+12]]+Kn[i[n+13]]+Kn[i[n+14]]+Kn[i[n+15]]).toLowerCase()}const T2=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),Gs={randomUUID:T2};function L2(i,n,r){if(Gs.randomUUID&&!n&&!i)return Gs.randomUUID();i=i||{};const f=i.random||(i.rng||x2)();if(f[6]=f[6]&15|64,f[8]=f[8]&63|128,n){r=r||0;for(let Z=0;Z<16;++Z)n[r+Z]=f[Z];return n}return S2(f)}function Go(i,n){globalThis.vonage||(globalThis.vonage={}),globalThis.vonage.workerizer||(globalThis.vonage.workerizer={});let r=globalThis.vonage.workerizer;return r[i]||(r[i]=n),r[i]}const lr=Go("globals",{});var Gr=(i=>(i.INIT="INIT",i.FORWARD="FORWARD",i.TERMINATE="TERMINATE",i.GLOBALS_SYNC="GLOBALS_SYNC",i))(Gr||{});function Xs(i){return[ImageBitmap,ReadableStream,WritableStream].some(n=>i instanceof n)}let Y2=0;function w2(i,n,r,f,Z){const x=Y2++;return i.postMessage({id:x,type:n,functionName:r,args:f},f.filter(H=>Xs(H))),new Promise(H=>{Z==null||Z.set(x,H)})}function Qr(i,n){const{id:r,type:f}=i,Z=Array.isArray(n)?n:[n];postMessage({id:r,type:f,result:n},Z.filter(x=>Xs(x)))}const Vs=Go("workerized",{});function Ws(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function H2(){if(Ws())Qr({type:Gr.GLOBALS_SYNC},lr);else{const i=[];for(const n in Vs){const{worker:r,resolvers:f}=Vs[n].workerContext;r&&i.push(w2(r,Gr.GLOBALS_SYNC,"",[lr],f))}await Promise.all(i)}}function bi(i,n){if(Array.isArray(n))n.splice(0,n.length);else if(typeof n=="object")for(const r in n)delete n[r];for(const r in i)Array.isArray(i[r])?(n[r]=[],bi(i[r],n[r])):typeof i[r]=="object"?(n[r]={},bi(i[r],n[r])):n[r]=i[r]}async function F2(i,n){const{functionName:r,args:f}=i;if(!n.instance)throw"instance not initialized";if(!r)throw"missing function name to call";if(!n.instance[r])throw`undefined function [${r}] in class ${n.instance.constructor.workerId}`;Qr(i,await n.instance[r](...f!=null?f:[]))}const C2=Go("registeredWorkers",{});function J2(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,f]=i.args,Z=C2[r];if(Z)n.instance=new Z(i.args.slice(1));else throw`unknown worker class ${r}`;bi(f,lr),Qr(i,typeof n.instance!==void 0)}async function k2(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let f;n.instance.terminate&&(f=await n.instance.terminate(...r!=null?r:[])),Qr(i,f)}function N2(i){if(!i.args)throw"Missing globals while syncing";bi(i.args[0],lr),Qr(i,{})}function E2(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case Gr.INIT:J2(r,i);break;case Gr.FORWARD:F2(r,i);break;case Gr.TERMINATE:k2(r,i);break;case Gr.GLOBALS_SYNC:N2(r);break}}}Ws()&&E2();function U2(i,n){return lr[i]||(lr[i]=n),[()=>lr[i],async r=>{lr[i]=r,await H2()}]}function K2(i,n){return U2(i,n)}const[B2,M2]=K2("metadata");function A2(i){M2(i)}function yi(){return B2()}class Xo{constructor(n){X2(this,"uuid",L2()),this.config=n}async send(n){var r,f,Z;const{appId:x,sourceType:H}=(r=yi())!=null?r:{};if(!x||!H)return"metadata missing";const T=new AbortController,J=setTimeout(()=>T.abort(),R2);return await((Z=(f=this.config)==null?void 0:f.fetch)!=null?Z:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(n)),signal:T.signal}),clearTimeout(J),"success"}getUrl(){var n;let r=(n=yi().proxyUrl)!=null?n:W2;return r+=(r.at(-1)==="/"?"":"/")+V2,r}getHeaders(){return{"Content-Type":"application/json"}}buildReport(n){const r=yi();return{guid:this.uuid,...n,applicationId:r.appId,timestamp:Date.now(),proxyUrl:r.proxyUrl,source:r.sourceType}}}const gi="2.0.3";class z2{constructor(n){Me(this,"frameTransformedCount",0),Me(this,"frameFromSourceCount",0),Me(this,"startAt",0),Me(this,"reporter"),this.config=n,this.reporter=new Xo(n)}async onFrameFromSource(){this.frameFromSourceCount++}get fps(){const{startAt:n,frameFromSourceCount:r}=this,f=(Date.now()-n)/1e3;return r/f}async onFrameTransformed(n={},r=!1){this.startAt===0&&(this.startAt=Date.now()),this.frameTransformedCount++;const{startAt:f,frameTransformedCount:Z,frameFromSourceCount:x}=this,H=Date.now(),T=(H-f)/1e3,J=Z/T,et=x/T;return r||this.frameTransformedCount>=this.config.loggingIntervalFrameCount?(this.frameFromSourceCount=0,this.frameTransformedCount=0,this.startAt=H,this.reporter.config=this.config,this.reporter.send({...this.config.report,variation:"QoS",fps:et,transformedFps:J,framesTransformed:Z,...n})):"success"}}var Rs=(i=>(i.FPS_DROP="fps_drop",i))(Rs||{}),Is=(i=>(i.start="start",i.transform="transform",i.flush="flush",i))(Is||{}),Zi=(i=>(i.pipeline_ended="pipeline_ended",i.pipeline_ended_with_error="pipeline_ended_with_error",i.pipeline_started="pipeline_started",i.pipeline_started_with_error="pipeline_started_with_error",i.pipeline_restarted="pipeline_restarted",i.pipeline_restarted_with_error="pipeline_restarted_with_error",i))(Zi||{});const j2=500,O2=.8;class P2 extends Zo{constructor(n,r){super(),Me(this,"reporter_",new Xo),Me(this,"reporterQos_",new z2({loggingIntervalFrameCount:j2,report:{version:gi}})),Me(this,"transformerType_"),Me(this,"transformer_"),Me(this,"shouldStop_"),Me(this,"isFlashed_"),Me(this,"mediaTransformerQosReportStartTimestamp_"),Me(this,"videoHeight_"),Me(this,"videoWidth_"),Me(this,"trackExpectedRate_"),Me(this,"index_"),Me(this,"controller_"),this.index_=r,this.transformer_=n,this.shouldStop_=!1,this.isFlashed_=!1,this.mediaTransformerQosReportStartTimestamp_=0,this.videoHeight_=0,this.videoWidth_=0,this.trackExpectedRate_=-1,this.transformerType_="Custom","getTransformerType"in n&&(this.transformerType_=n.getTransformerType()),this.report({variation:"Create"})}setTrackExpectedRate(n){this.trackExpectedRate_=n}async start(n){if(this.controller_=n,this.transformer_&&typeof this.transformer_.start=="function")try{await this.transformer_.start(n)}catch(r){this.report({message:nr.errors.transformer_start,variation:"Error",error:vo(r)});const f={eventMetaData:{transformerIndex:this.index_},error:r,function:"start"};this.emit("error",f)}}async transform(n,r){var f,Z,x,H;if(this.mediaTransformerQosReportStartTimestamp_===0&&(this.mediaTransformerQosReportStartTimestamp_=Date.now()),n instanceof VideoFrame&&(this.videoHeight_=(f=n==null?void 0:n.displayHeight)!=null?f:0,this.videoWidth_=(Z=n==null?void 0:n.displayWidth)!=null?Z:0),this.reporterQos_.onFrameFromSource(),this.transformer_)if(this.shouldStop_)console.warn("[Pipeline] flush from transform"),n.close(),this.flush(r),r.terminate();else{try{await((H=(x=this.transformer_).transform)==null?void 0:H.call(x,n,r)),this.reportQos()}catch(T){this.report({message:nr.errors.transformer_transform,variation:"Error",error:vo(T)});const J={eventMetaData:{transformerIndex:this.index_},error:T,function:"transform"};this.emit("error",J)}if(this.trackExpectedRate_!=-1&&this.trackExpectedRate_*O2>this.reporterQos_.fps){const T={eventMetaData:{transformerIndex:this.index_},warningType:"fps_drop",dropInfo:{requested:this.trackExpectedRate_,current:this.reporterQos_.fps}};this.emit("warn",T)}}}async flush(n){if(this.transformer_&&typeof this.transformer_.flush=="function"&&!this.isFlashed_){this.isFlashed_=!0;try{await this.transformer_.flush(n)}catch(r){this.report({message:nr.errors.transformer_flush,variation:"Error",error:vo(r)});const f={eventMetaData:{transformerIndex:this.index_},error:r,function:"flush"};this.emit("error",f)}}this.reportQos(!0),this.report({variation:"Delete"})}stop(){console.log("[Pipeline] Stop stream."),this.controller_&&(this.flush(this.controller_),this.controller_.terminate()),this.shouldStop_=!0}report(n){this.reporter_.send({version:gi,action:"MediaTransformer",transformerType:this.transformerType_,...n})}reportQos(n=!1){this.reporterQos_.config={...this.reporterQos_.config},this.reporterQos_.onFrameTransformed({version:gi,action:"MediaTransformer",transformerType:this.transformerType_,videoWidth:this.videoWidth_,videoHeight:this.videoHeight_},n)}}class _2 extends Zo{constructor(n){super(),Me(this,"transformers_"),Me(this,"trackExpectedRate_"),this.transformers_=[],this.trackExpectedRate_=-1;for(let r=0;r<n.length;r++){let f=new P2(n[r],r);f.on("error",Z=>{this.emit("error",Z)}),f.on("warn",Z=>{this.emit("warn",Z)}),this.transformers_.push(f)}}setTrackExpectedRate(n){this.trackExpectedRate_=n;for(let r of this.transformers_)r.setTrackExpectedRate(this.trackExpectedRate_)}async start(n,r){if(!this.transformers_||this.transformers_.length===0){console.log("[Pipeline] No transformers.");return}try{let f=n;for(let Z of this.transformers_)n=n.pipeThrough(new TransformStream(Z));n.pipeTo(r).then(async()=>{console.log("[Pipeline] Setup."),await r.abort(),await f.cancel(),this.emit("pipelineInfo","pipeline_ended")}).catch(async Z=>{n.cancel().then(()=>{console.log("[Pipeline] Shutting down streams after abort.")}).catch(x=>{console.error("[Pipeline] Error from stream transform:",x)}),await r.abort(Z),await f.cancel(Z),this.emit("pipelineInfo","pipeline_ended_with_error")})}catch{this.emit("pipelineInfo","pipeline_started_with_error"),this.destroy();return}this.emit("pipelineInfo","pipeline_started"),console.log("[Pipeline] Pipeline started.")}async destroy(){console.log("[Pipeline] Destroying Pipeline.");for(let n of this.transformers_)n.stop()}}class Q2 extends Zo{constructor(){super(),Me(this,"reporter_"),Me(this,"pipeline_"),Me(this,"transformers_"),Me(this,"readable_"),Me(this,"writable_"),Me(this,"trackExpectedRate_"),this.reporter_=new Xo,this.trackExpectedRate_=-1,this.report({variation:"Create"})}setTrackExpectedRate(n){this.trackExpectedRate_=n,this.pipeline_&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_)}transform(n,r){return this.readable_=n,this.writable_=r,this.transformInternal()}transformInternal(){return new Promise(async(n,r)=>{if(!this.transformers_||this.transformers_.length===0){this.report({message:nr.errors.transformer_none,variation:"Error"}),r("[MediaProcessor] Need to set transformers.");return}if(!this.readable_){this.report({variation:"Error",message:nr.errors.readable_null}),r("[MediaProcessor] Readable is null.");return}if(!this.writable_){this.report({variation:"Error",message:nr.errors.writable_null}),r("[MediaProcessor] Writable is null.");return}let f=!1;this.pipeline_&&(f=!0,this.pipeline_.clearListeners(),this.pipeline_.destroy()),this.pipeline_=new _2(this.transformers_),this.pipeline_.on("warn",Z=>{this.emit("warn",Z)}),this.pipeline_.on("error",Z=>{this.emit("error",Z)}),this.pipeline_.on("pipelineInfo",Z=>{f&&(Z==="pipeline_started"?Z=Zi.pipeline_restarted:Z==="pipeline_started_with_error"&&(Z=Zi.pipeline_restarted_with_error)),this.emit("pipelineInfo",Z)}),this.trackExpectedRate_!=-1&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_),this.pipeline_.start(this.readable_,this.writable_).then(()=>{n()}).catch(Z=>{r(Z)})})}setTransformers(n){return this.report({variation:"Update",message:nr.updates.transformer_new}),this.transformers_=n,this.readable_&&this.writable_?this.transformInternal():Promise.resolve()}destroy(){return new Promise(async n=>{this.pipeline_&&this.pipeline_.destroy(),this.report({variation:"Delete"}),n()})}report(n){this.reporter_.send({version:gi,action:"MediaProcessor",...n})}}class D2{constructor(){Me(this,"processor_"),Me(this,"generator_"),this.processor_=null,this.generator_=null}init(n){return new Promise((r,f)=>{try{this.processor_=new MediaStreamTrackProcessor(n)}catch(Z){console.log(`[InsertableStreamHelper] MediaStreamTrackProcessor failed: ${Z}`),f(Z)}try{n.kind==="audio"?this.generator_=new MediaStreamTrackGenerator({kind:"audio"}):n.kind==="video"?this.generator_=new MediaStreamTrackGenerator({kind:"video"}):f("kind not supported")}catch(Z){console.log(`[InsertableStreamHelper] MediaStreamTrackGenerator failed: ${Z}`),f(Z)}r()})}getReadable(){return this.processor_.readable}getWriteable(){return this.generator_.writable}getProccesorTrack(){return this.generator_}}class $2{constructor(n){Me(this,"insertableStreamHelper_"),Me(this,"mediaProcessor_"),this.insertableStreamHelper_=new D2,this.mediaProcessor_=n}setTrack(n){return new Promise((r,f)=>{this.insertableStreamHelper_.init(n).then(()=>{this.mediaProcessor_.transform(this.insertableStreamHelper_.getReadable(),this.insertableStreamHelper_.getWriteable()).then(()=>{r(this.insertableStreamHelper_.getProccesorTrack())}).catch(Z=>{f(Z)})}).catch(Z=>{f(Z)})})}destroy(){return new Promise((n,r)=>{this.mediaProcessor_?this.mediaProcessor_.destroy().then(()=>{n()}).catch(f=>{r(f)}):r("no processor")})}}var Dr=(i=>(i.Low="Low",i.High="High",i))(Dr||{}),xs=(i=>(i.BackgroundBlur="BackgroundBlur",i.VirtualBackground="VirtualBackground",i.VideoBackground="VideoBackground",i.SilhouetteBlur="SilhouetteBlur",i))(xs||{}),vi=(i=>(i.FAST="FAST",i.PRECISE="PRECISE",i))(vi||{}),$r=(i=>(i.CANVAS="CANVAS",i.WEBGL="WEBGL",i))($r||{});const q2=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]));var tc=function(){var i=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return function(n){n=n||{};var r=typeof n<"u"?n:{},f,Z;r.ready=new Promise(function(tt,it){f=tt,Z=it});var x={},H;for(H in r)r.hasOwnProperty(H)&&(x[H]=r[H]);var T="./this.program",J=function(tt,it){throw it},et=!0,lt="";function pt(tt){return r.locateFile?r.locateFile(tt,lt):lt+tt}var Lt;typeof document<"u"&&document.currentScript&&(lt=document.currentScript.src),i&&(lt=i),lt.indexOf("blob:")!==0?lt=lt.substr(0,lt.replace(/[?#].*/,"").lastIndexOf("/")+1):lt="";var wt=r.print||console.log.bind(console),at=r.printErr||console.warn.bind(console);for(H in x)x.hasOwnProperty(H)&&(r[H]=x[H]);x=null,r.arguments&&r.arguments,r.thisProgram&&(T=r.thisProgram),r.quit&&(J=r.quit);var dt;r.wasmBinary&&(dt=r.wasmBinary);var Kt=r.noExitRuntime||!0;typeof WebAssembly!="object"&&he("no native wasm support detected");var Nt,ee=!1,P=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function $e(tt,it,ut){for(var _t=it+ut,de=it;tt[de]&&!(de>=_t);)++de;if(de-it>16&&tt.subarray&&P)return P.decode(tt.subarray(it,de));for(var ue="";it<de;){var St=tt[it++];if(!(St&128)){ue+=String.fromCharCode(St);continue}var me=tt[it++]&63;if((St&224)==192){ue+=String.fromCharCode((St&31)<<6|me);continue}var Ce=tt[it++]&63;if((St&240)==224?St=(St&15)<<12|me<<6|Ce:St=(St&7)<<18|me<<12|Ce<<6|tt[it++]&63,St<65536)ue+=String.fromCharCode(St);else{var en=St-65536;ue+=String.fromCharCode(55296|en>>10,56320|en&1023)}}return ue}function je(tt,it){return tt?$e(gt,tt,it):""}function Ve(tt,it,ut){for(var _t=0;_t<tt.length;++_t)ne[it++>>0]=tt.charCodeAt(_t);ut||(ne[it>>0]=0)}function zt(tt,it){return tt%it>0&&(tt+=it-tt%it),tt}var Jn,ne,gt,qe;function zn(tt){Jn=tt,r.HEAP8=ne=new Int8Array(tt),r.HEAP16=new Int16Array(tt),r.HEAP32=qe=new Int32Array(tt),r.HEAPU8=gt=new Uint8Array(tt),r.HEAPU16=new Uint16Array(tt),r.HEAPU32=new Uint32Array(tt),r.HEAPF32=new Float32Array(tt),r.HEAPF64=new Float64Array(tt)}r.INITIAL_MEMORY;var Re,Ct=[],Te=[],ln=[],Xn=0;function Hn(){return Kt||Xn>0}function In(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)bn(r.preRun.shift());Qt(Ct)}function kn(){Qt(Te)}function hn(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)Fn(r.postRun.shift());Qt(ln)}function bn(tt){Ct.unshift(tt)}function En(tt){Te.unshift(tt)}function Fn(tt){ln.unshift(tt)}var Oe=0,Ae=null;function xn(tt){Oe++,r.monitorRunDependencies&&r.monitorRunDependencies(Oe)}function Vn(tt){if(Oe--,r.monitorRunDependencies&&r.monitorRunDependencies(Oe),Oe==0&&Ae){var it=Ae;Ae=null,it()}}r.preloadedImages={},r.preloadedAudios={};function he(tt){r.onAbort&&r.onAbort(tt),tt="Aborted("+tt+")",at(tt),ee=!0,tt+=". Build with -s ASSERTIONS=1 for more info.";var it=new WebAssembly.RuntimeError(tt);throw Z(it),it}var Se="data:application/octet-stream;base64,";function Pe(tt){return tt.startsWith(Se)}var re;re="tflite-simd.wasm",Pe(re)||(re=pt(re));function We(tt){try{if(tt==re&&dt)return new Uint8Array(dt);if(!Lt)throw"both async and sync fetching of the wasm failed"}catch(it){he(it)}}function cn(){return!dt&&et&&typeof fetch=="function"?fetch(re,{credentials:"same-origin"}).then(function(tt){if(!tt.ok)throw"failed to load wasm binary file at '"+re+"'";return tt.arrayBuffer()}).catch(function(){return We(re)}):Promise.resolve().then(function(){return We(re)})}function Ke(){var tt={a:fe};function it(St,me){var Ce=St.exports;r.asm=Ce,Nt=r.asm.q,zn(Nt.buffer),Re=r.asm.E,En(r.asm.r),Vn()}xn();function ut(St){it(St.instance)}function _t(St){return cn().then(function(me){return WebAssembly.instantiate(me,tt)}).then(function(me){return me}).then(St,function(me){at("failed to asynchronously prepare wasm: "+me),he(me)})}function de(){return!dt&&typeof WebAssembly.instantiateStreaming=="function"&&!Pe(re)&&typeof fetch=="function"?fetch(re,{credentials:"same-origin"}).then(function(St){var me=WebAssembly.instantiateStreaming(St,tt);return me.then(ut,function(Ce){return at("wasm streaming compile failed: "+Ce),at("falling back to ArrayBuffer instantiation"),_t(ut)})}):_t(ut)}if(r.instantiateWasm)try{var ue=r.instantiateWasm(tt,it);return ue}catch(St){return at("Module.instantiateWasm callback failed with error: "+St),!1}return de().catch(Z),{}}function Qt(tt){for(;tt.length>0;){var it=tt.shift();if(typeof it=="function"){it(r);continue}var ut=it.func;typeof ut=="number"?it.arg===void 0?Re.get(ut)():Re.get(ut)(it.arg):ut(it.arg===void 0?null:it.arg)}}function Ze(tt,it,ut,_t){he("Assertion failed: "+je(tt)+", at: "+[it?je(it):"unknown filename",ut,_t?je(_t):"unknown function"])}function Fe(tt,it){he("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function Mt(tt,it){he("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function Ie(){he("")}var jt;jt=function(){return performance.now()};var ye=!0;function Le(tt){return qe[Ft()>>2]=tt,tt}function tn(tt,it){var ut;if(tt===0)ut=Date.now();else if((tt===1||tt===4)&&ye)ut=jt();else return Le(28),-1;return qe[it>>2]=ut/1e3|0,qe[it+4>>2]=ut%1e3*1e3*1e3|0,0}function Xe(){return 2147483648}function Ot(tt,it,ut){gt.copyWithin(tt,it,it+ut)}function ze(tt){try{return Nt.grow(tt-Jn.byteLength+65535>>>16),zn(Nt.buffer),1}catch{}}function _e(tt){var it=gt.length;tt=tt>>>0;var ut=2147483648;if(tt>ut)return!1;for(var _t=1;_t<=4;_t*=2){var de=it*(1+.2/_t);de=Math.min(de,tt+100663296);var ue=Math.min(ut,zt(Math.max(tt,de),65536)),St=ze(ue);if(St)return!0}return!1}function xe(tt){for(var it=jt();jt()-it<tt;);}var Wn={};function un(){return T||"./this.program"}function Qe(){if(!Qe.strings){var tt=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",it={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:tt,_:un()};for(var ut in Wn)Wn[ut]===void 0?delete it[ut]:it[ut]=Wn[ut];var _t=[];for(var ut in it)_t.push(ut+"="+it[ut]);Qe.strings=_t}return Qe.strings}var an={mappings:{},buffers:[null,[],[]],printChar:function(tt,it){var ut=an.buffers[tt];it===0||it===10?((tt===1?wt:at)($e(ut,0)),ut.length=0):ut.push(it)},varargs:void 0,get:function(){an.varargs+=4;var tt=qe[an.varargs-4>>2];return tt},getStr:function(tt){var it=je(tt);return it},get64:function(tt,it){return tt}};function ve(tt,it){var ut=0;return Qe().forEach(function(_t,de){var ue=it+ut;qe[tt+de*4>>2]=ue,Ve(_t,ue),ut+=_t.length+1}),0}function Ye(tt,it){var ut=Qe();qe[tt>>2]=ut.length;var _t=0;return ut.forEach(function(de){_t+=de.length+1}),qe[it>>2]=_t,0}function Ge(tt){te(tt)}function ie(tt){return 0}function De(tt,it,ut,_t,de){}function qt(tt,it,ut,_t){for(var de=0,ue=0;ue<ut;ue++){for(var St=qe[it+ue*8>>2],me=qe[it+(ue*8+4)>>2],Ce=0;Ce<me;Ce++)an.printChar(tt,gt[St+Ce]);de+=me}return qe[_t>>2]=de,0}function Pt(){if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function"){var tt=new Uint8Array(1);return function(){return crypto.getRandomValues(tt),tt[0]}}else return function(){he("randomDevice")}}function fn(tt,it){fn.randomDevice||(fn.randomDevice=Pt());for(var ut=0;ut<it;ut++)ne[tt+ut>>0]=fn.randomDevice();return 0}var fe={a:Ze,e:Fe,d:Mt,b:Ie,n:tn,h:Xe,l:Ot,m:_e,p:xe,f:ve,g:Ye,j:Ge,i:ie,k:De,c:qt,o:fn};Ke(),r.___wasm_call_ctors=function(){return(r.___wasm_call_ctors=r.asm.r).apply(null,arguments)},r._getModelBufferMemoryOffset=function(){return(r._getModelBufferMemoryOffset=r.asm.s).apply(null,arguments)},r._getInputMemoryOffset=function(){return(r._getInputMemoryOffset=r.asm.t).apply(null,arguments)},r._getInputHeight=function(){return(r._getInputHeight=r.asm.u).apply(null,arguments)},r._getInputWidth=function(){return(r._getInputWidth=r.asm.v).apply(null,arguments)},r._getInputChannelCount=function(){return(r._getInputChannelCount=r.asm.w).apply(null,arguments)},r._getOutputMemoryOffset=function(){return(r._getOutputMemoryOffset=r.asm.x).apply(null,arguments)},r._getOutputHeight=function(){return(r._getOutputHeight=r.asm.y).apply(null,arguments)},r._getOutputWidth=function(){return(r._getOutputWidth=r.asm.z).apply(null,arguments)},r._getOutputChannelCount=function(){return(r._getOutputChannelCount=r.asm.A).apply(null,arguments)},r._loadModel=function(){return(r._loadModel=r.asm.B).apply(null,arguments)},r._runInference=function(){return(r._runInference=r.asm.C).apply(null,arguments)},r._isGPUEnabled=function(){return(r._isGPUEnabled=r.asm.D).apply(null,arguments)};var Ft=r.___errno_location=function(){return(Ft=r.___errno_location=r.asm.F).apply(null,arguments)},Wt;function oe(tt){this.name="ExitStatus",this.message="Program terminated with exit("+tt+")",this.status=tt}Ae=function tt(){Wt||we(),Wt||(Ae=tt)};function we(tt){if(Oe>0||(In(),Oe>0))return;function it(){Wt||(Wt=!0,r.calledRun=!0,!ee&&(kn(),f(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),hn()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),it()},1)):it()}r.run=we;function te(tt,it){se(tt)}function se(tt){Hn()||(r.onExit&&r.onExit(tt),ee=!0),J(tt,new oe(tt))}if(r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return we(),n.ready}}();class ec{constructor(){Zt(this,"selectedTFLite");Zt(this,"isSIMDSupported",!1);Zt(this,"isThreadsSupported",!1);Zt(this,"inputWidth",0);Zt(this,"inputHeight",0);Zt(this,"inputChannelCount",0);Zt(this,"inputMemoryOffset",0);Zt(this,"outputWidth",0);Zt(this,"outputHeight",0);Zt(this,"outputChannelCount",0);Zt(this,"outputMemoryOffset",0)}}const nc="https://d3opqjmqzxf057.cloudfront.net/vonage-tensorflow-wasm/tflite-simd-wasm/1.1.3/",rc="https://d3opqjmqzxf057.cloudfront.net/ml/selfie_segmentation/4.0.0/";async function ic(i=nc,n=rc){let r=new ec;var f=new Promise(function(Z,x){async function H(){return tc({locateFile:function(et){return i+et}})}async function T(J){return new Promise(async(et,lt)=>{const pt=J;if(typeof pt>"u")return lt("TFLite backend unavailable: wasmSimd");const Lt="selfie_segmentation_landscape";console.log("Loading tflite model:",Lt);let wt=n+`${Lt}.tflite`;console.log("TFLite modelUrl: "+wt);try{const dt=await(await fetch(wt)).arrayBuffer();console.log("Model buffer size:",dt.byteLength);const Kt=pt._getModelBufferMemoryOffset();console.log("Model buffer memory offset:",Kt),console.log("Loading model buffer..."),pt.HEAPU8.set(new Uint8Array(dt),Kt);const Nt=pt._loadModel(dt.byteLength);if(console.log("Load model result:",Nt),Nt!==0){lt("Cannot load model");return}r.inputWidth=pt._getInputWidth(),r.inputHeight=pt._getInputHeight(),r.inputChannelCount=pt._getInputChannelCount(),r.inputMemoryOffset=pt._getInputMemoryOffset(),console.log("Input memory offset:",r.inputMemoryOffset),console.log("Input height:",r.inputHeight),console.log("Input width:",r.inputWidth),console.log("Input channels:",r.inputChannelCount),r.outputMemoryOffset=pt._getOutputMemoryOffset(),r.outputWidth=pt._getOutputWidth(),r.outputHeight=pt._getOutputHeight(),r.outputChannelCount=pt._getOutputChannelCount(),console.log("Output memory offset:",r.outputMemoryOffset),console.log("Output height:",r.outputHeight),console.log("Output width:",r.outputWidth),console.log("Output channels:",r.outputChannelCount),r.selectedTFLite=pt}catch(at){lt(at);return}et()})}H().then(J=>{if(J===null)throw console.error("loadTFLite null"),"loadTFLite null";T(J).then(et=>{Z(r)}).catch(et=>{console.error("loadTFLiteModel error"),x("loadTFLiteModel error")})}).catch(J=>{console.error("loadTFLite error:",J),x("loadTFLite error:"+J)})});return f}class Ss{constructor(){Zt(this,"canvas",new OffscreenCanvas(0,0));Zt(this,"context",this.canvas.getContext("2d",{willReadFrequently:!0}));Zt(this,"pixelCount",0);Zt(this,"inputOffset",0);Zt(this,"outputOffset",0);Zt(this,"infos");Zt(this,"mask")}async init(n,r){await this.initWasm(n,r),this.infos&&(this.canvas.width=this.infos.inputWidth,this.canvas.height=this.infos.inputHeight,this.pixelCount=this.infos.inputWidth*this.infos.inputHeight,this.mask=new ImageData(this.infos.inputWidth,this.infos.inputHeight),this.inputOffset=this.infos.inputMemoryOffset/4,this.outputOffset=this.infos.outputMemoryOffset/4)}async initWasm(n,r){this.infos=await ic(n,r)}getOutputDimensions(){var n,r,f,Z;return{width:(r=(n=this.infos)==null?void 0:n.outputWidth)!=null?r:0,height:(Z=(f=this.infos)==null?void 0:f.outputHeight)!=null?Z:0}}async process(n){if(!this.mask||!this.infos)return;const r=this.infos.inputWidth,f=this.infos.inputHeight;this.context.drawImage(n,0,0,n.width,n.height,0,0,r,f);const Z=this.context.getImageData(0,0,r,f),x=this.infos.selectedTFLite.HEAPF32;for(let H=0;H<this.pixelCount;H++){const T=this.inputOffset+H*3;x[T]=Z.data[H*4]/255,x[T+1]=Z.data[H*4+1]/255,x[T+2]=Z.data[H*4+2]/255}this.infos.selectedTFLite._runInference();for(let H=0;H<this.pixelCount;H++){const T=this.infos.selectedTFLite.HEAPF32[this.outputOffset+H];this.mask.data[H*4]=this.mask.data[H*4+3]=255*T}return createImageBitmap(this.mask)}isGpuSupported(){var n,r,f;return(f=(r=(n=this.infos)==null?void 0:n.selectedTFLite)==null?void 0:r._isGPUEnabled())!=null?f:!1}}async function oc(i,n){const{wasm:r,insertableStreams:f,simd:Z,webgl:x}=await Ts(i,n);if(!r.supported)throw r.message;if(!f.supported)throw f.message;if(!Z.supported)throw Z.message;if(!x.supported)throw x.message}async function Ts(i,n){const r=new Ss;await r.initWasm(i,n);const f={wasm:{supported:typeof WebAssembly=="object"&&typeof WebAssembly.instantiate=="function",message:"Your browser does not support WebAssembly features."},simd:{supported:await q2(),message:"Your browser does not support simd features."},insertableStreams:{supported:!0},gpu:{supported:r.isGpuSupported(),message:"Your browser does not support gpu features."},webgl:sc(),performance:Ls()};try{await b2()}catch(Z){f.insertableStreams.supported=!1,f.insertableStreams.message=Z}return f}function sc(){return OffscreenCanvas?new OffscreenCanvas(0,0).getContext("webgl2")?{supported:!0}:{supported:!1,message:"Your browser does not support webgl 2"}:{supported:!1,message:"Your browser does not support offscreen canvas"}}function Ls(){return new OffscreenCanvas(0,0).getContext("webgl2",{failIfMajorPerformanceCaveat:!0})?{supported:!0}:{supported:!1,message:"Your hardware does not perform good enough to run the library efficiently"}}const Gi={};(function(){var i;function n(p){var V=0;return function(){return V<p.length?{done:!1,value:p[V++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(p,V,W){return p==Array.prototype||p==Object.prototype||(p[V]=W.value),p};function f(p){p=[typeof globalThis=="object"&&globalThis,p,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var V=0;V<p.length;++V){var W=p[V];if(W&&W.Math==Math)return W}throw Error("Cannot find global object")}var Z=f(this);function x(p,V){if(V)t:{var W=Z;p=p.split(".");for(var E=0;E<p.length-1;E++){var O=p[E];if(!(O in W))break t;W=W[O]}p=p[p.length-1],E=W[p],V=V(E),V!=E&&V!=null&&r(W,p,{configurable:!0,writable:!0,value:V})}}x("Symbol",function(p){function V(ot){if(this instanceof V)throw new TypeError("Symbol is not a constructor");return new W(E+(ot||"")+"_"+O++,ot)}function W(ot,j){this.g=ot,r(this,"description",{configurable:!0,writable:!0,value:j})}if(p)return p;W.prototype.toString=function(){return this.g};var E="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",O=0;return V}),x("Symbol.iterator",function(p){if(p)return p;p=Symbol("Symbol.iterator");for(var V="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),W=0;W<V.length;W++){var E=Z[V[W]];typeof E=="function"&&typeof E.prototype[p]!="function"&&r(E.prototype,p,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return p});function H(p){return p={next:p},p[Symbol.iterator]=function(){return this},p}function T(p){var V=typeof Symbol<"u"&&Symbol.iterator&&p[Symbol.iterator];return V?V.call(p):{next:n(p)}}function J(p){if(!(p instanceof Array)){p=T(p);for(var V,W=[];!(V=p.next()).done;)W.push(V.value);p=W}return p}var et=typeof Object.create=="function"?Object.create:function(p){function V(){}return V.prototype=p,new V},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Lt={a:!0},wt={};try{wt.__proto__=Lt,pt=wt.a;break t}catch{}pt=!1}lt=pt?function(p,V){if(p.__proto__=V,p.__proto__!==V)throw new TypeError(p+" is not extensible");return p}:null}var at=lt;function dt(p,V){if(p.prototype=et(V.prototype),p.prototype.constructor=p,at)at(p,V);else for(var W in V)if(W!="prototype")if(Object.defineProperties){var E=Object.getOwnPropertyDescriptor(V,W);E&&Object.defineProperty(p,W,E)}else p[W]=V[W];p.ea=V.prototype}function Kt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Nt(p){if(p.l)throw new TypeError("Generator is already running");p.l=!0}Kt.prototype.o=function(p){this.h=p};function ee(p,V){p.j={U:V,V:!0},p.g=p.m||p.s}Kt.prototype.return=function(p){this.j={return:p},this.g=this.s};function P(p,V,W){return p.g=W,{value:V}}function $e(p){this.g=new Kt,this.h=p}function je(p,V){Nt(p.g);var W=p.g.i;return W?Ve(p,"return"in W?W.return:function(E){return{value:E,done:!0}},V,p.g.return):(p.g.return(V),zt(p))}function Ve(p,V,W,E){try{var O=V.call(p.g.i,W);if(!(O instanceof Object))throw new TypeError("Iterator result "+O+" is not an object");if(!O.done)return p.g.l=!1,O;var ot=O.value}catch(j){return p.g.i=null,ee(p.g,j),zt(p)}return p.g.i=null,E.call(p.g,ot),zt(p)}function zt(p){for(;p.g.g;)try{var V=p.h(p.g);if(V)return p.g.l=!1,{value:V.value,done:!1}}catch(W){p.g.h=void 0,ee(p.g,W)}if(p.g.l=!1,p.g.j){if(V=p.g.j,p.g.j=null,V.V)throw V.U;return{value:V.return,done:!0}}return{value:void 0,done:!0}}function Jn(p){this.next=function(V){return Nt(p.g),p.g.i?V=Ve(p,p.g.i.next,V,p.g.o):(p.g.o(V),V=zt(p)),V},this.throw=function(V){return Nt(p.g),p.g.i?V=Ve(p,p.g.i.throw,V,p.g.o):(ee(p.g,V),V=zt(p)),V},this.return=function(V){return je(p,V)},this[Symbol.iterator]=function(){return this}}function ne(p,V){return V=new Jn(new $e(V)),at&&p.prototype&&at(V,p.prototype),V}function gt(p,V){p instanceof String&&(p+="");var W=0,E=!1,O={next:function(){if(!E&&W<p.length){var ot=W++;return{value:V(ot,p[ot]),done:!1}}return E=!0,{done:!0,value:void 0}}};return O[Symbol.iterator]=function(){return O},O}var qe=typeof Object.assign=="function"?Object.assign:function(p,V){for(var W=1;W<arguments.length;W++){var E=arguments[W];if(E)for(var O in E)Object.prototype.hasOwnProperty.call(E,O)&&(p[O]=E[O])}return p};x("Object.assign",function(p){return p||qe}),x("Promise",function(p){function V(j){this.h=0,this.i=void 0,this.g=[],this.o=!1;var rt=this.j();try{j(rt.resolve,rt.reject)}catch(bt){rt.reject(bt)}}function W(){this.g=null}function E(j){return j instanceof V?j:new V(function(rt){rt(j)})}if(p)return p;W.prototype.h=function(j){if(this.g==null){this.g=[];var rt=this;this.i(function(){rt.l()})}this.g.push(j)};var O=Z.setTimeout;W.prototype.i=function(j){O(j,0)},W.prototype.l=function(){for(;this.g&&this.g.length;){var j=this.g;this.g=[];for(var rt=0;rt<j.length;++rt){var bt=j[rt];j[rt]=null;try{bt()}catch(Rt){this.j(Rt)}}}this.g=null},W.prototype.j=function(j){this.i(function(){throw j})},V.prototype.j=function(){function j(Rt){return function(Ut){bt||(bt=!0,Rt.call(rt,Ut))}}var rt=this,bt=!1;return{resolve:j(this.C),reject:j(this.l)}},V.prototype.C=function(j){if(j===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(j instanceof V)this.F(j);else{t:switch(typeof j){case"object":var rt=j!=null;break t;case"function":rt=!0;break t;default:rt=!1}rt?this.u(j):this.m(j)}},V.prototype.u=function(j){var rt=void 0;try{rt=j.then}catch(bt){this.l(bt);return}typeof rt=="function"?this.G(rt,j):this.m(j)},V.prototype.l=function(j){this.s(2,j)},V.prototype.m=function(j){this.s(1,j)},V.prototype.s=function(j,rt){if(this.h!=0)throw Error("Cannot settle("+j+", "+rt+"): Promise already settled in state"+this.h);this.h=j,this.i=rt,this.h===2&&this.D(),this.A()},V.prototype.D=function(){var j=this;O(function(){if(j.B()){var rt=Z.console;typeof rt<"u"&&rt.error(j.i)}},1)},V.prototype.B=function(){if(this.o)return!1;var j=Z.CustomEvent,rt=Z.Event,bt=Z.dispatchEvent;return typeof bt>"u"?!0:(typeof j=="function"?j=new j("unhandledrejection",{cancelable:!0}):typeof rt=="function"?j=new rt("unhandledrejection",{cancelable:!0}):(j=Z.document.createEvent("CustomEvent"),j.initCustomEvent("unhandledrejection",!1,!0,j)),j.promise=this,j.reason=this.i,bt(j))},V.prototype.A=function(){if(this.g!=null){for(var j=0;j<this.g.length;++j)ot.h(this.g[j]);this.g=null}};var ot=new W;return V.prototype.F=function(j){var rt=this.j();j.J(rt.resolve,rt.reject)},V.prototype.G=function(j,rt){var bt=this.j();try{j.call(rt,bt.resolve,bt.reject)}catch(Rt){bt.reject(Rt)}},V.prototype.then=function(j,rt){function bt($t,kt){return typeof $t=="function"?function(Tt){try{Rt($t(Tt))}catch(Et){Ut(Et)}}:kt}var Rt,Ut,Jt=new V(function($t,kt){Rt=$t,Ut=kt});return this.J(bt(j,Rt),bt(rt,Ut)),Jt},V.prototype.catch=function(j){return this.then(void 0,j)},V.prototype.J=function(j,rt){function bt(){switch(Rt.h){case 1:j(Rt.i);break;case 2:rt(Rt.i);break;default:throw Error("Unexpected state: "+Rt.h)}}var Rt=this;this.g==null?ot.h(bt):this.g.push(bt),this.o=!0},V.resolve=E,V.reject=function(j){return new V(function(rt,bt){bt(j)})},V.race=function(j){return new V(function(rt,bt){for(var Rt=T(j),Ut=Rt.next();!Ut.done;Ut=Rt.next())E(Ut.value).J(rt,bt)})},V.all=function(j){var rt=T(j),bt=rt.next();return bt.done?E([]):new V(function(Rt,Ut){function Jt(Tt){return function(Et){$t[Tt]=Et,kt--,kt==0&&Rt($t)}}var $t=[],kt=0;do $t.push(void 0),kt++,E(bt.value).J(Jt($t.length-1),Ut),bt=rt.next();while(!bt.done)})},V}),x("Object.is",function(p){return p||function(V,W){return V===W?V!==0||1/V===1/W:V!==V&&W!==W}}),x("Array.prototype.includes",function(p){return p||function(V,W){var E=this;E instanceof String&&(E=String(E));var O=E.length;for(W=W||0,0>W&&(W=Math.max(W+O,0));W<O;W++){var ot=E[W];if(ot===V||Object.is(ot,V))return!0}return!1}}),x("String.prototype.includes",function(p){return p||function(V,W){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(V instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(V,W||0)!==-1}}),x("Array.prototype.keys",function(p){return p||function(){return gt(this,function(V){return V})}});var zn=this||self;function Re(p,V){p=p.split(".");var W=zn;p[0]in W||typeof W.execScript>"u"||W.execScript("var "+p[0]);for(var E;p.length&&(E=p.shift());)p.length||V===void 0?W[E]&&W[E]!==Object.prototype[E]?W=W[E]:W=W[E]={}:W[E]=V}function Ct(p,V){return V=String.fromCharCode.apply(null,V),p==null?V:p+V}var Te,ln=typeof TextDecoder<"u",Xn,Hn=typeof TextEncoder<"u";function In(p){if(Hn)p=(Xn||(Xn=new TextEncoder)).encode(p);else{var V=void 0;V=V===void 0?!1:V;for(var W=0,E=new Uint8Array(3*p.length),O=0;O<p.length;O++){var ot=p.charCodeAt(O);if(128>ot)E[W++]=ot;else{if(2048>ot)E[W++]=ot>>6|192;else{if(55296<=ot&&57343>=ot){if(56319>=ot&&O<p.length){var j=p.charCodeAt(++O);if(56320<=j&&57343>=j){ot=1024*(ot-55296)+j-56320+65536,E[W++]=ot>>18|240,E[W++]=ot>>12&63|128,E[W++]=ot>>6&63|128,E[W++]=ot&63|128;continue}else O--}if(V)throw Error("Found an unpaired surrogate");ot=65533}E[W++]=ot>>12|224,E[W++]=ot>>6&63|128}E[W++]=ot&63|128}}p=E.subarray(0,W)}return p}var kn={},hn=null;function bn(p,V){V===void 0&&(V=0),Oe(),V=kn[V];for(var W=Array(Math.floor(p.length/3)),E=V[64]||"",O=0,ot=0;O<p.length-2;O+=3){var j=p[O],rt=p[O+1],bt=p[O+2],Rt=V[j>>2];j=V[(j&3)<<4|rt>>4],rt=V[(rt&15)<<2|bt>>6],bt=V[bt&63],W[ot++]=Rt+j+rt+bt}switch(Rt=0,bt=E,p.length-O){case 2:Rt=p[O+1],bt=V[(Rt&15)<<2]||E;case 1:p=p[O],W[ot]=V[p>>2]+V[(p&3)<<4|Rt>>4]+bt+E}return W.join("")}function En(p){var V=p.length,W=3*V/4;W%3?W=Math.floor(W):"=.".indexOf(p[V-1])!=-1&&(W="=.".indexOf(p[V-2])!=-1?W-2:W-1);var E=new Uint8Array(W),O=0;return Fn(p,function(ot){E[O++]=ot}),E.subarray(0,O)}function Fn(p,V){function W(bt){for(;E<p.length;){var Rt=p.charAt(E++),Ut=hn[Rt];if(Ut!=null)return Ut;if(!/^[\s\xa0]*$/.test(Rt))throw Error("Unknown base64 encoding at char: "+Rt)}return bt}Oe();for(var E=0;;){var O=W(-1),ot=W(0),j=W(64),rt=W(64);if(rt===64&&O===-1)break;V(O<<2|ot>>4),j!=64&&(V(ot<<4&240|j>>2),rt!=64&&V(j<<6&192|rt))}}function Oe(){if(!hn){hn={};for(var p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),V=["+/=","+/","-_=","-_.","-_"],W=0;5>W;W++){var E=p.concat(V[W].split(""));kn[W]=E;for(var O=0;O<E.length;O++){var ot=E[O];hn[ot]===void 0&&(hn[ot]=O)}}}}var Ae=typeof Uint8Array.prototype.slice=="function",xn;function Vn(p,V,W){return V===W?xn||(xn=new Uint8Array(0)):Ae?p.slice(V,W):new Uint8Array(p.subarray(V,W))}var he=0,Se=0;function Pe(p,V){V=V===void 0?{}:V,V=V.v===void 0?!1:V.v,this.h=null,this.g=this.i=this.j=0,this.l=!1,this.v=V,p&&re(this,p)}function re(p,V){V=V.constructor===Uint8Array?V:V.constructor===ArrayBuffer?new Uint8Array(V):V.constructor===Array?new Uint8Array(V):V.constructor===String?En(V):V instanceof Uint8Array?new Uint8Array(V.buffer,V.byteOffset,V.byteLength):new Uint8Array(0),p.h=V,p.j=0,p.i=p.h.length,p.g=p.j}Pe.prototype.reset=function(){this.g=this.j};function We(p){var V=p.h,W=V[p.g],E=W&127;return 128>W?(p.g+=1,E):(W=V[p.g+1],E|=(W&127)<<7,128>W?(p.g+=2,E):(W=V[p.g+2],E|=(W&127)<<14,128>W?(p.g+=3,E):(W=V[p.g+3],E|=(W&127)<<21,128>W?(p.g+=4,E):(W=V[p.g+4],E|=(W&15)<<28,128>W?(p.g+=5,E>>>0):(p.g+=5,128<=V[p.g++]&&128<=V[p.g++]&&128<=V[p.g++]&&128<=V[p.g++]&&p.g++,E)))))}function cn(p){var V=p.h[p.g],W=p.h[p.g+1],E=p.h[p.g+2],O=p.h[p.g+3];return p.g+=4,W=(V<<0|W<<8|E<<16|O<<24)>>>0,p=2*(W>>31)+1,V=W>>>23&255,W&=8388607,V==255?W?NaN:1/0*p:V==0?p*Math.pow(2,-149)*W:p*Math.pow(2,V-150)*(W+Math.pow(2,23))}var Ke=[];function Qt(){this.g=new Uint8Array(64),this.h=0}Qt.prototype.push=function(p){if(!(this.h+1<this.g.length)){var V=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(V)}this.g[this.h++]=p},Qt.prototype.length=function(){return this.h},Qt.prototype.end=function(){var p=this.g,V=this.h;return this.h=0,Vn(p,0,V)};function Ze(p,V){for(;127<V;)p.push(V&127|128),V>>>=7;p.push(V)}function Fe(p){var V={},W=V.N===void 0?!1:V.N;this.o={v:V.v===void 0?!1:V.v},this.N=W,V=this.o,Ke.length?(W=Ke.pop(),V&&(W.v=V.v),p&&re(W,p),p=W):p=new Pe(p,V),this.g=p,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}Fe.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};function Mt(p){var V=p.g;if((V=V.g==V.i)||(V=p.j)||(V=p.g,V=V.l||0>V.g||V.g>V.i),V)return!1;p.m=p.g.g,V=We(p.g);var W=V&7;return W!=0&&W!=5&&W!=1&&W!=2&&W!=3&&W!=4?(p.j=!0,!1):(p.i=V,p.l=V>>>3,p.h=W,!0)}function Ie(p){switch(p.h){case 0:if(p.h!=0)Ie(p);else{for(p=p.g;p.h[p.g]&128;)p.g++;p.g++}break;case 1:p.h!=1?Ie(p):(p=p.g,p.g+=8);break;case 2:if(p.h!=2)Ie(p);else{var V=We(p.g);p=p.g,p.g+=V}break;case 5:p.h!=5?Ie(p):(p=p.g,p.g+=4);break;case 3:V=p.l;do{if(!Mt(p)){p.j=!0;break}if(p.h==4){p.l!=V&&(p.j=!0);break}Ie(p)}while(1);break;default:p.j=!0}}function jt(p,V,W){var E=p.g.i,O=We(p.g);return O=p.g.g+O,p.g.i=O,W(V,p),p.g.g=O,p.g.i=E,V}function ye(p){var V=We(p.g);p=p.g;var W=p.g;p.g+=V,p=p.h;var E;if(ln)(E=Te)||(E=Te=new TextDecoder("utf-8",{fatal:!1})),E=E.decode(p.subarray(W,W+V));else{V=W+V;for(var O=[],ot=null,j,rt,bt;W<V;)j=p[W++],128>j?O.push(j):224>j?W>=V?O.push(65533):(rt=p[W++],194>j||(rt&192)!==128?(W--,O.push(65533)):O.push((j&31)<<6|rt&63)):240>j?W>=V-1?O.push(65533):(rt=p[W++],(rt&192)!==128||j===224&&160>rt||j===237&&160<=rt||((E=p[W++])&192)!==128?(W--,O.push(65533)):O.push((j&15)<<12|(rt&63)<<6|E&63)):244>=j?W>=V-2?O.push(65533):(rt=p[W++],(rt&192)!==128||(j<<28)+(rt-144)>>30!==0||((E=p[W++])&192)!==128||((bt=p[W++])&192)!==128?(W--,O.push(65533)):(j=(j&7)<<18|(rt&63)<<12|(E&63)<<6|bt&63,j-=65536,O.push((j>>10&1023)+55296,(j&1023)+56320))):O.push(65533),8192<=O.length&&(ot=Ct(ot,O),O.length=0);E=Ct(ot,O)}return E}function Le(){this.h=[],this.i=0,this.g=new Qt}function tn(p,V){V.length!==0&&(p.h.push(V),p.i+=V.length)}function Xe(p){var V=p.i+p.g.length();if(V===0)return new Uint8Array(0);V=new Uint8Array(V);for(var W=p.h,E=W.length,O=0,ot=0;ot<E;ot++){var j=W[ot];j.length!==0&&(V.set(j,O),O+=j.length)}return W=p.g,E=W.h,E!==0&&(V.set(W.g.subarray(0,E),O),W.h=0),p.h=[V],V}function Ot(p,V,W){if(W!=null){Ze(p.g,8*V+5),p=p.g;var E=W;E=(W=0>E?1:0)?-E:E,E===0?0<1/E?he=Se=0:(Se=0,he=2147483648):isNaN(E)?(Se=0,he=2147483647):34028234663852886e22<E?(Se=0,he=(W<<31|2139095040)>>>0):11754943508222875e-54>E?(E=Math.round(E/Math.pow(2,-149)),Se=0,he=(W<<31|E)>>>0):(V=Math.floor(Math.log(E)/Math.LN2),E*=Math.pow(2,-V),E=Math.round(8388608*E)&8388607,Se=0,he=(W<<31|V+127<<23|E)>>>0),W=he,p.push(W>>>0&255),p.push(W>>>8&255),p.push(W>>>16&255),p.push(W>>>24&255)}}var ze=typeof Uint8Array=="function";function _e(p,V,W){if(p!=null)return typeof p=="object"?ze&&p instanceof Uint8Array?W(p):xe(p,V,W):V(p)}function xe(p,V,W){if(Array.isArray(p)){for(var E=Array(p.length),O=0;O<p.length;O++)E[O]=_e(p[O],V,W);return Array.isArray(p)&&p.W&&Qe(E),E}E={};for(O in p)E[O]=_e(p[O],V,W);return E}function Wn(p){return typeof p=="number"?isFinite(p)?p:String(p):p}var un={W:{value:!0,configurable:!0}};function Qe(p){return Array.isArray(p)&&!Object.isFrozen(p)&&Object.defineProperties(p,un),p}var an;function ve(p,V,W){var E=an;an=null,p||(p=E),E=this.constructor.ca,p||(p=E?[E]:[]),this.j=E?0:-1,this.i=null,this.g=p;t:{if(E=this.g.length,p=E-1,E&&(E=this.g[p],E!==null&&typeof E=="object"&&E.constructor===Object)){this.l=p-this.j,this.h=E;break t}V!==void 0&&-1<V?(this.l=Math.max(V,p+1-this.j),this.h=null):this.l=Number.MAX_VALUE}if(W)for(V=0;V<W.length;V++)p=W[V],p<this.l?(p+=this.j,(E=this.g[p])?Qe(E):this.g[p]=Ye):(Ge(this),(E=this.h[p])?Qe(E):this.h[p]=Ye)}var Ye=Object.freeze(Qe([]));function Ge(p){var V=p.l+p.j;p.g[V]||(p.h=p.g[V]={})}function ie(p,V,W){return V===-1?null:(W===void 0?0:W)||V>=p.l?p.h?p.h[V]:void 0:p.g[V+p.j]}function De(p){var V=V===void 0?!1:V,W=ie(p,1,V);return W==null&&(W=Ye),W===Ye&&(W=Qe([]),Pt(p,1,W,V)),W}function qt(p,V,W){return p=ie(p,V),p=p==null?p:+p,p==null?W===void 0?0:W:p}function Pt(p,V,W,E){(E===void 0?0:E)||V>=p.l?(Ge(p),p.h[V]=W):p.g[V+p.j]=W}function fn(p,V){p.i||(p.i={});var W=p.i[1];if(!W){var E=De(p);W=[];for(var O=0;O<E.length;O++)W[O]=new V(E[O]);p.i[1]=W}return W}function fe(p,V,W,E){var O=fn(p,W);V=V||new W,p=De(p),E!=null?(O.splice(E,0,V),p.splice(E,0,Ft(V))):(O.push(V),p.push(Ft(V)))}ve.prototype.toJSON=function(){var p=Ft(this);return xe(p,Wn,bn)};function Ft(p,V){if(p.i)for(var W in p.i){var E=p.i[W];if(Array.isArray(E))for(var O=0;O<E.length;O++)E[O]&&Ft(E[O]);else E&&Ft(E)}return p.g}ve.prototype.toString=function(){return Ft(this).toString()};function Wt(p,V){return p=ie(p,V),p==null?0:p}function oe(p,V){return p=ie(p,V),p==null?"":p}function we(p,V){if(p=p.m){tn(V,V.g.end());for(var W=0;W<p.length;W++)tn(V,p[W])}}function te(p,V){if(V.h==4)return!1;var W=V.m;return Ie(V),V.N||(V=Vn(V.g.h,W,V.g.g),(W=p.m)?W.push(V):p.m=[V]),!0}function se(p,V){var W=void 0;return new(W||(W=Promise))(function(E,O){function ot(bt){try{rt(V.next(bt))}catch(Rt){O(Rt)}}function j(bt){try{rt(V.throw(bt))}catch(Rt){O(Rt)}}function rt(bt){bt.done?E(bt.value):new W(function(Rt){Rt(bt.value)}).then(ot,j)}rt((V=V.apply(p,void 0)).next())})}function tt(p){ve.call(this,p)}dt(tt,ve);function it(p,V){for(;Mt(V);)switch(V.i){case 8:var W=We(V.g);Pt(p,1,W);break;case 21:W=cn(V.g),Pt(p,2,W);break;case 26:W=ye(V),Pt(p,3,W);break;case 34:W=ye(V),Pt(p,4,W);break;default:if(!te(p,V))return p}return p}function ut(p){ve.call(this,p,-1,_t)}dt(ut,ve),ut.prototype.addClassification=function(p,V){fe(this,p,tt,V)};var _t=[1];function de(p){ve.call(this,p)}dt(de,ve);function ue(p,V){for(;Mt(V);)switch(V.i){case 13:var W=cn(V.g);Pt(p,1,W);break;case 21:W=cn(V.g),Pt(p,2,W);break;case 29:W=cn(V.g),Pt(p,3,W);break;case 37:W=cn(V.g),Pt(p,4,W);break;case 45:W=cn(V.g),Pt(p,5,W);break;default:if(!te(p,V))return p}return p}function St(p){ve.call(this,p,-1,me)}dt(St,ve);var me=[1];function Ce(p){ve.call(this,p)}dt(Ce,ve);function en(p,V,W){if(W=p.createShader(W===0?p.VERTEX_SHADER:p.FRAGMENT_SHADER),p.shaderSource(W,V),p.compileShader(W),!p.getShaderParameter(W,p.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
1
|
+
(function(Ue,Dn){typeof exports=="object"&&typeof module<"u"?Dn(exports):typeof define=="function"&&define.amd?define(["exports"],Dn):(Ue=typeof globalThis<"u"?globalThis:Ue||self,Dn(Ue["ml-transformers"]={}))})(this,function(Ue){"use strict";var Q3=Object.defineProperty;var D3=(Ue,Dn,Zr)=>Dn in Ue?Q3(Ue,Dn,{enumerable:!0,configurable:!0,writable:!0,value:Zr}):Ue[Dn]=Zr;var gt=(Ue,Dn,Zr)=>(D3(Ue,typeof Dn!="symbol"?Dn+"":Dn,Zr),Zr);var Dn=Object.defineProperty,Zr=(i,n,r)=>n in i?Dn(i,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[n]=r,Me=(i,n,r)=>(Zr(i,typeof n!="symbol"?n+"":n,r),r);function bc(){return new Promise((i,n)=>{typeof MediaStreamTrackProcessor>"u"||typeof MediaStreamTrackGenerator>"u"?n("Your browser does not support the MediaStreamTrack API for Insertable Streams of Media."):i()})}class nr{}Me(nr,"updates",{transformer_new:"New transformer",transformer_null:"Null transformer"}),Me(nr,"errors",{transformer_none:"No transformers provided",transformer_start:"Cannot start transformer",transformer_transform:"Cannot transform frame",transformer_flush:"Cannot flush transformer",readable_null:"Readable is null",writable_null:"Writable is null"});const sr=new WeakMap,di=new WeakMap,Or=new WeakMap,bo=Symbol("anyProducer"),ys=Promise.resolve(),hi=Symbol("listenerAdded"),fi=Symbol("listenerRemoved");let yo=!1;function Lr(i){if(typeof i!="string"&&typeof i!="symbol")throw new TypeError("eventName must be a string or a symbol")}function mi(i){if(typeof i!="function")throw new TypeError("listener must be a function")}function Hr(i,n){const r=di.get(i);return r.has(n)||r.set(n,new Set),r.get(n)}function _r(i,n){const r=typeof n=="string"||typeof n=="symbol"?n:bo,f=Or.get(i);return f.has(r)||f.set(r,new Set),f.get(r)}function yc(i,n,r){const f=Or.get(i);if(f.has(n))for(const Z of f.get(n))Z.enqueue(r);if(f.has(bo)){const Z=Promise.all([n,r]);for(const x of f.get(bo))x.enqueue(Z)}}function gs(i,n){n=Array.isArray(n)?n:[n];let r=!1,f=()=>{},Z=[];const x={enqueue(H){Z.push(H),f()},finish(){r=!0,f()}};for(const H of n)_r(i,H).add(x);return{async next(){return Z?Z.length===0?r?(Z=void 0,this.next()):(await new Promise(H=>{f=H}),this.next()):{done:!1,value:await Z.shift()}:{done:!0}},async return(H){Z=void 0;for(const T of n)_r(i,T).delete(x);return f(),arguments.length>0?{done:!0,value:await H}:{done:!0}},[Symbol.asyncIterator](){return this}}}function Zs(i){if(i===void 0)return vs;if(!Array.isArray(i))throw new TypeError("`methodNames` must be an array of strings");for(const n of i)if(!vs.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return i}const go=i=>i===hi||i===fi;class vr{static mixin(n,r){return r=Zs(r),f=>{if(typeof f!="function")throw new TypeError("`target` must be function");for(const H of r)if(f.prototype[H]!==void 0)throw new Error(`The property \`${H}\` already exists on \`target\``);function Z(){return Object.defineProperty(this,n,{enumerable:!1,value:new vr}),this[n]}Object.defineProperty(f.prototype,n,{enumerable:!1,get:Z});const x=H=>function(...T){return this[n][H](...T)};for(const H of r)Object.defineProperty(f.prototype,H,{enumerable:!1,value:x(H)});return f}}static get isDebugEnabled(){if(typeof process!="object")return yo;const{env:n}=process||{env:{}};return n.DEBUG==="emittery"||n.DEBUG==="*"||yo}static set isDebugEnabled(n){yo=n}constructor(n={}){sr.set(this,new Set),di.set(this,new Map),Or.set(this,new Map),this.debug=n.debug||{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(r,f,Z,x)=>{try{x=JSON.stringify(x)}catch{x=`Object with the following keys failed to stringify: ${Object.keys(x).join(",")}`}typeof Z=="symbol"&&(Z=Z.toString());const H=new Date,T=`${H.getHours()}:${H.getMinutes()}:${H.getSeconds()}.${H.getMilliseconds()}`;console.log(`[${T}][emittery:${r}][${f}] Event Name: ${Z}
|
|
2
|
+
data: ${x}`)})}logIfDebugEnabled(n,r,f){(vr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,f)}on(n,r){mi(r),n=Array.isArray(n)?n:[n];for(const f of n)Lr(f),Hr(this,f).add(r),this.logIfDebugEnabled("subscribe",f,void 0),go(f)||this.emit(hi,{eventName:f,listener:r});return this.off.bind(this,n,r)}off(n,r){mi(r),n=Array.isArray(n)?n:[n];for(const f of n)Lr(f),Hr(this,f).delete(r),this.logIfDebugEnabled("unsubscribe",f,void 0),go(f)||this.emit(fi,{eventName:f,listener:r})}once(n){return new Promise(r=>{const f=this.on(n,Z=>{f(),r(Z)})})}events(n){n=Array.isArray(n)?n:[n];for(const r of n)Lr(r);return gs(this,n)}async emit(n,r){Lr(n),this.logIfDebugEnabled("emit",n,r),yc(this,n,r);const f=Hr(this,n),Z=sr.get(this),x=[...f],H=go(n)?[]:[...Z];await ys,await Promise.all([...x.map(async T=>{if(f.has(T))return T(r)}),...H.map(async T=>{if(Z.has(T))return T(n,r)})])}async emitSerial(n,r){Lr(n),this.logIfDebugEnabled("emitSerial",n,r);const f=Hr(this,n),Z=sr.get(this),x=[...f],H=[...Z];await ys;for(const T of x)f.has(T)&&await T(r);for(const T of H)Z.has(T)&&await T(n,r)}onAny(n){return mi(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),sr.get(this).add(n),this.emit(hi,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return gs(this)}offAny(n){mi(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(fi,{listener:n}),sr.get(this).delete(n)}clearListeners(n){n=Array.isArray(n)?n:[n];for(const r of n)if(this.logIfDebugEnabled("clear",r,void 0),typeof r=="string"||typeof r=="symbol"){Hr(this,r).clear();const f=_r(this,r);for(const Z of f)Z.finish();f.clear()}else{sr.get(this).clear();for(const f of di.get(this).values())f.clear();for(const f of Or.get(this).values()){for(const Z of f)Z.finish();f.clear()}}}listenerCount(n){n=Array.isArray(n)?n:[n];let r=0;for(const f of n){if(typeof f=="string"){r+=sr.get(this).size+Hr(this,f).size+_r(this,f).size+_r(this).size;continue}typeof f<"u"&&Lr(f),r+=sr.get(this).size;for(const Z of di.get(this).values())r+=Z.size;for(const Z of Or.get(this).values())r+=Z.size}return r}bindMethods(n,r){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");r=Zs(r);for(const f of r){if(n[f]!==void 0)throw new Error(`The property \`${f}\` already exists on \`target\``);Object.defineProperty(n,f,{enumerable:!1,value:this[f].bind(this)})}}}const vs=Object.getOwnPropertyNames(vr.prototype).filter(i=>i!=="constructor");Object.defineProperty(vr,"listenerAdded",{value:hi,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(vr,"listenerRemoved",{value:fi,writable:!1,enumerable:!0,configurable:!1});var Zo=vr;function gc(i){return typeof i=="object"&&i!==null&&"message"in i&&typeof i.message=="string"}function Zc(i){if(gc(i))return i;try{return new Error(JSON.stringify(i))}catch{return new Error(String(i))}}function vo(i){return Zc(i).message}var vc=Object.defineProperty,Gc=(i,n,r)=>n in i?vc(i,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[n]=r,Xc=(i,n,r)=>(Gc(i,typeof n!="symbol"?n+"":n,r),r);const Wc="hlg.tokbox.com/prod/logging/vcp_webrtc",Vc="https://",Rc=1e4;let pi;const Ic=new Uint8Array(16);function xc(){if(!pi&&(pi=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!pi))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return pi(Ic)}const Bn=[];for(let i=0;i<256;++i)Bn.push((i+256).toString(16).slice(1));function Sc(i,n=0){return(Bn[i[n+0]]+Bn[i[n+1]]+Bn[i[n+2]]+Bn[i[n+3]]+"-"+Bn[i[n+4]]+Bn[i[n+5]]+"-"+Bn[i[n+6]]+Bn[i[n+7]]+"-"+Bn[i[n+8]]+Bn[i[n+9]]+"-"+Bn[i[n+10]]+Bn[i[n+11]]+Bn[i[n+12]]+Bn[i[n+13]]+Bn[i[n+14]]+Bn[i[n+15]]).toLowerCase()}const Tc=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),Gs={randomUUID:Tc};function Yc(i,n,r){if(Gs.randomUUID&&!n&&!i)return Gs.randomUUID();i=i||{};const f=i.random||(i.rng||xc)();if(f[6]=f[6]&15|64,f[8]=f[8]&63|128,n){r=r||0;for(let Z=0;Z<16;++Z)n[r+Z]=f[Z];return n}return Sc(f)}function Go(i,n){globalThis.vonage||(globalThis.vonage={}),globalThis.vonage.workerizer||(globalThis.vonage.workerizer={});let r=globalThis.vonage.workerizer;return r[i]||(r[i]=n),r[i]}const lr=Go("globals",{});var Gr=(i=>(i.INIT="INIT",i.FORWARD="FORWARD",i.TERMINATE="TERMINATE",i.GLOBALS_SYNC="GLOBALS_SYNC",i))(Gr||{});function Xs(i){return[ImageBitmap,ReadableStream,WritableStream].some(n=>i instanceof n)}let wc=0;function Lc(i,n,r,f,Z){const x=wc++;return i.postMessage({id:x,type:n,functionName:r,args:f},f.filter(H=>Xs(H))),new Promise(H=>{Z==null||Z.set(x,H)})}function Qr(i,n){const{id:r,type:f}=i,Z=Array.isArray(n)?n:[n];postMessage({id:r,type:f,result:n},Z.filter(x=>Xs(x)))}const Ws=Go("workerized",{});function Vs(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function Hc(){if(Vs())Qr({type:Gr.GLOBALS_SYNC},lr);else{const i=[];for(const n in Ws){const{worker:r,resolvers:f}=Ws[n].workerContext;r&&i.push(Lc(r,Gr.GLOBALS_SYNC,"",[lr],f))}await Promise.all(i)}}function bi(i,n){if(Array.isArray(n))n.splice(0,n.length);else if(typeof n=="object")for(const r in n)delete n[r];for(const r in i)Array.isArray(i[r])?(n[r]=[],bi(i[r],n[r])):typeof i[r]=="object"?(n[r]={},bi(i[r],n[r])):n[r]=i[r]}async function Fc(i,n){const{functionName:r,args:f}=i;if(!n.instance)throw"instance not initialized";if(!r)throw"missing function name to call";if(!n.instance[r])throw`undefined function [${r}] in class ${n.instance.constructor.workerId}`;Qr(i,await n.instance[r](...f!=null?f:[]))}const Cc=Go("registeredWorkers",{});function Jc(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,f]=i.args,Z=Cc[r];if(Z)n.instance=new Z(i.args.slice(1));else throw`unknown worker class ${r}`;bi(f,lr),Qr(i,typeof n.instance!==void 0)}async function kc(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let f;n.instance.terminate&&(f=await n.instance.terminate(...r!=null?r:[])),Qr(i,f)}function Nc(i){if(!i.args)throw"Missing globals while syncing";bi(i.args[0],lr),Qr(i,{})}function Ec(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case Gr.INIT:Jc(r,i);break;case Gr.FORWARD:Fc(r,i);break;case Gr.TERMINATE:kc(r,i);break;case Gr.GLOBALS_SYNC:Nc(r);break}}}Vs()&&Ec();function Uc(i,n){return lr[i]||(lr[i]=n),[()=>lr[i],async r=>{lr[i]=r,await Hc()}]}function Bc(i,n){return Uc(i,n)}const[Kc,Mc]=Bc("metadata");function Ac(i){Mc(i)}function yi(){return Kc()}class Xo{constructor(n){Xc(this,"uuid",Yc()),this.config=n}async send(n){var r,f,Z;const{appId:x,sourceType:H}=(r=yi())!=null?r:{};if(!x||!H)return"metadata missing";const T=new AbortController,J=setTimeout(()=>T.abort(),Rc);return await((Z=(f=this.config)==null?void 0:f.fetch)!=null?Z:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(n)),signal:T.signal}),clearTimeout(J),"success"}getUrl(){var n;let r=(n=yi().proxyUrl)!=null?n:Vc;return r+=(r.at(-1)==="/"?"":"/")+Wc,r}getHeaders(){return{"Content-Type":"application/json"}}buildReport(n){const r=yi();return{guid:this.uuid,...n,applicationId:r.appId,timestamp:Date.now(),proxyUrl:r.proxyUrl,source:r.sourceType}}}const gi="2.0.3";class zc{constructor(n){Me(this,"frameTransformedCount",0),Me(this,"frameFromSourceCount",0),Me(this,"startAt",0),Me(this,"reporter"),this.config=n,this.reporter=new Xo(n)}async onFrameFromSource(){this.frameFromSourceCount++}get fps(){const{startAt:n,frameFromSourceCount:r}=this,f=(Date.now()-n)/1e3;return r/f}async onFrameTransformed(n={},r=!1){this.startAt===0&&(this.startAt=Date.now()),this.frameTransformedCount++;const{startAt:f,frameTransformedCount:Z,frameFromSourceCount:x}=this,H=Date.now(),T=(H-f)/1e3,J=Z/T,et=x/T;return r||this.frameTransformedCount>=this.config.loggingIntervalFrameCount?(this.frameFromSourceCount=0,this.frameTransformedCount=0,this.startAt=H,this.reporter.config=this.config,this.reporter.send({...this.config.report,variation:"QoS",fps:et,transformedFps:J,framesTransformed:Z,...n})):"success"}}var Rs=(i=>(i.FPS_DROP="fps_drop",i))(Rs||{}),Is=(i=>(i.start="start",i.transform="transform",i.flush="flush",i))(Is||{}),Zi=(i=>(i.pipeline_ended="pipeline_ended",i.pipeline_ended_with_error="pipeline_ended_with_error",i.pipeline_started="pipeline_started",i.pipeline_started_with_error="pipeline_started_with_error",i.pipeline_restarted="pipeline_restarted",i.pipeline_restarted_with_error="pipeline_restarted_with_error",i))(Zi||{});const jc=500,Pc=.8;class Oc extends Zo{constructor(n,r){super(),Me(this,"reporter_",new Xo),Me(this,"reporterQos_",new zc({loggingIntervalFrameCount:jc,report:{version:gi}})),Me(this,"transformerType_"),Me(this,"transformer_"),Me(this,"shouldStop_"),Me(this,"isFlashed_"),Me(this,"mediaTransformerQosReportStartTimestamp_"),Me(this,"videoHeight_"),Me(this,"videoWidth_"),Me(this,"trackExpectedRate_"),Me(this,"index_"),Me(this,"controller_"),this.index_=r,this.transformer_=n,this.shouldStop_=!1,this.isFlashed_=!1,this.mediaTransformerQosReportStartTimestamp_=0,this.videoHeight_=0,this.videoWidth_=0,this.trackExpectedRate_=-1,this.transformerType_="Custom","getTransformerType"in n&&(this.transformerType_=n.getTransformerType()),this.report({variation:"Create"})}setTrackExpectedRate(n){this.trackExpectedRate_=n}async start(n){if(this.controller_=n,this.transformer_&&typeof this.transformer_.start=="function")try{await this.transformer_.start(n)}catch(r){this.report({message:nr.errors.transformer_start,variation:"Error",error:vo(r)});const f={eventMetaData:{transformerIndex:this.index_},error:r,function:"start"};this.emit("error",f)}}async transform(n,r){var f,Z,x,H;if(this.mediaTransformerQosReportStartTimestamp_===0&&(this.mediaTransformerQosReportStartTimestamp_=Date.now()),n instanceof VideoFrame&&(this.videoHeight_=(f=n==null?void 0:n.displayHeight)!=null?f:0,this.videoWidth_=(Z=n==null?void 0:n.displayWidth)!=null?Z:0),this.reporterQos_.onFrameFromSource(),this.transformer_)if(this.shouldStop_)console.warn("[Pipeline] flush from transform"),n.close(),this.flush(r),r.terminate();else{try{await((H=(x=this.transformer_).transform)==null?void 0:H.call(x,n,r)),this.reportQos()}catch(T){this.report({message:nr.errors.transformer_transform,variation:"Error",error:vo(T)});const J={eventMetaData:{transformerIndex:this.index_},error:T,function:"transform"};this.emit("error",J)}if(this.trackExpectedRate_!=-1&&this.trackExpectedRate_*Pc>this.reporterQos_.fps){const T={eventMetaData:{transformerIndex:this.index_},warningType:"fps_drop",dropInfo:{requested:this.trackExpectedRate_,current:this.reporterQos_.fps}};this.emit("warn",T)}}}async flush(n){if(this.transformer_&&typeof this.transformer_.flush=="function"&&!this.isFlashed_){this.isFlashed_=!0;try{await this.transformer_.flush(n)}catch(r){this.report({message:nr.errors.transformer_flush,variation:"Error",error:vo(r)});const f={eventMetaData:{transformerIndex:this.index_},error:r,function:"flush"};this.emit("error",f)}}this.reportQos(!0),this.report({variation:"Delete"})}stop(){console.log("[Pipeline] Stop stream."),this.controller_&&(this.flush(this.controller_),this.controller_.terminate()),this.shouldStop_=!0}report(n){this.reporter_.send({version:gi,action:"MediaTransformer",transformerType:this.transformerType_,...n})}reportQos(n=!1){this.reporterQos_.config={...this.reporterQos_.config},this.reporterQos_.onFrameTransformed({version:gi,action:"MediaTransformer",transformerType:this.transformerType_,videoWidth:this.videoWidth_,videoHeight:this.videoHeight_},n)}}class _c extends Zo{constructor(n){super(),Me(this,"transformers_"),Me(this,"trackExpectedRate_"),this.transformers_=[],this.trackExpectedRate_=-1;for(let r=0;r<n.length;r++){let f=new Oc(n[r],r);f.on("error",Z=>{this.emit("error",Z)}),f.on("warn",Z=>{this.emit("warn",Z)}),this.transformers_.push(f)}}setTrackExpectedRate(n){this.trackExpectedRate_=n;for(let r of this.transformers_)r.setTrackExpectedRate(this.trackExpectedRate_)}async start(n,r){if(!this.transformers_||this.transformers_.length===0){console.log("[Pipeline] No transformers.");return}try{let f=n;for(let Z of this.transformers_)n=n.pipeThrough(new TransformStream(Z));n.pipeTo(r).then(async()=>{console.log("[Pipeline] Setup."),await r.abort(),await f.cancel(),this.emit("pipelineInfo","pipeline_ended")}).catch(async Z=>{n.cancel().then(()=>{console.log("[Pipeline] Shutting down streams after abort.")}).catch(x=>{console.error("[Pipeline] Error from stream transform:",x)}),await r.abort(Z),await f.cancel(Z),this.emit("pipelineInfo","pipeline_ended_with_error")})}catch{this.emit("pipelineInfo","pipeline_started_with_error"),this.destroy();return}this.emit("pipelineInfo","pipeline_started"),console.log("[Pipeline] Pipeline started.")}async destroy(){console.log("[Pipeline] Destroying Pipeline.");for(let n of this.transformers_)n.stop()}}class Qc extends Zo{constructor(){super(),Me(this,"reporter_"),Me(this,"pipeline_"),Me(this,"transformers_"),Me(this,"readable_"),Me(this,"writable_"),Me(this,"trackExpectedRate_"),this.reporter_=new Xo,this.trackExpectedRate_=-1,this.report({variation:"Create"})}setTrackExpectedRate(n){this.trackExpectedRate_=n,this.pipeline_&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_)}transform(n,r){return this.readable_=n,this.writable_=r,this.transformInternal()}transformInternal(){return new Promise(async(n,r)=>{if(!this.transformers_||this.transformers_.length===0){this.report({message:nr.errors.transformer_none,variation:"Error"}),r("[MediaProcessor] Need to set transformers.");return}if(!this.readable_){this.report({variation:"Error",message:nr.errors.readable_null}),r("[MediaProcessor] Readable is null.");return}if(!this.writable_){this.report({variation:"Error",message:nr.errors.writable_null}),r("[MediaProcessor] Writable is null.");return}let f=!1;this.pipeline_&&(f=!0,this.pipeline_.clearListeners(),this.pipeline_.destroy()),this.pipeline_=new _c(this.transformers_),this.pipeline_.on("warn",Z=>{this.emit("warn",Z)}),this.pipeline_.on("error",Z=>{this.emit("error",Z)}),this.pipeline_.on("pipelineInfo",Z=>{f&&(Z==="pipeline_started"?Z=Zi.pipeline_restarted:Z==="pipeline_started_with_error"&&(Z=Zi.pipeline_restarted_with_error)),this.emit("pipelineInfo",Z)}),this.trackExpectedRate_!=-1&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_),this.pipeline_.start(this.readable_,this.writable_).then(()=>{n()}).catch(Z=>{r(Z)})})}setTransformers(n){return this.report({variation:"Update",message:nr.updates.transformer_new}),this.transformers_=n,this.readable_&&this.writable_?this.transformInternal():Promise.resolve()}destroy(){return new Promise(async n=>{this.pipeline_&&this.pipeline_.destroy(),this.report({variation:"Delete"}),n()})}report(n){this.reporter_.send({version:gi,action:"MediaProcessor",...n})}}class Dc{constructor(){Me(this,"processor_"),Me(this,"generator_"),this.processor_=null,this.generator_=null}init(n){return new Promise((r,f)=>{try{this.processor_=new MediaStreamTrackProcessor(n)}catch(Z){console.log(`[InsertableStreamHelper] MediaStreamTrackProcessor failed: ${Z}`),f(Z)}try{n.kind==="audio"?this.generator_=new MediaStreamTrackGenerator({kind:"audio"}):n.kind==="video"?this.generator_=new MediaStreamTrackGenerator({kind:"video"}):f("kind not supported")}catch(Z){console.log(`[InsertableStreamHelper] MediaStreamTrackGenerator failed: ${Z}`),f(Z)}r()})}getReadable(){return this.processor_.readable}getWriteable(){return this.generator_.writable}getProccesorTrack(){return this.generator_}}class $c{constructor(n){Me(this,"insertableStreamHelper_"),Me(this,"mediaProcessor_"),this.insertableStreamHelper_=new Dc,this.mediaProcessor_=n}setTrack(n){return new Promise((r,f)=>{this.insertableStreamHelper_.init(n).then(()=>{this.mediaProcessor_.transform(this.insertableStreamHelper_.getReadable(),this.insertableStreamHelper_.getWriteable()).then(()=>{r(this.insertableStreamHelper_.getProccesorTrack())}).catch(Z=>{f(Z)})}).catch(Z=>{f(Z)})})}destroy(){return new Promise((n,r)=>{this.mediaProcessor_?this.mediaProcessor_.destroy().then(()=>{n()}).catch(f=>{r(f)}):r("no processor")})}}var Dr=(i=>(i.Low="Low",i.High="High",i))(Dr||{}),xs=(i=>(i.BackgroundBlur="BackgroundBlur",i.VirtualBackground="VirtualBackground",i.VideoBackground="VideoBackground",i.SilhouetteBlur="SilhouetteBlur",i))(xs||{}),vi=(i=>(i.FAST="FAST",i.PRECISE="PRECISE",i))(vi||{}),$r=(i=>(i.CANVAS="CANVAS",i.WEBGL="WEBGL",i))($r||{});const qc=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]));var t2=function(){var i=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return function(n){n=n||{};var r=typeof n<"u"?n:{},f,Z;r.ready=new Promise(function(tt,it){f=tt,Z=it});var x={},H;for(H in r)r.hasOwnProperty(H)&&(x[H]=r[H]);var T="./this.program",J=function(tt,it){throw it},et=!0,lt="";function pt(tt){return r.locateFile?r.locateFile(tt,lt):lt+tt}var Yt;typeof document<"u"&&document.currentScript&&(lt=document.currentScript.src),i&&(lt=i),lt.indexOf("blob:")!==0?lt=lt.substr(0,lt.replace(/[?#].*/,"").lastIndexOf("/")+1):lt="";var Lt=r.print||console.log.bind(console),at=r.printErr||console.warn.bind(console);for(H in x)x.hasOwnProperty(H)&&(r[H]=x[H]);x=null,r.arguments&&r.arguments,r.thisProgram&&(T=r.thisProgram),r.quit&&(J=r.quit);var dt;r.wasmBinary&&(dt=r.wasmBinary);var Bt=r.noExitRuntime||!0;typeof WebAssembly!="object"&&he("no native wasm support detected");var Nt,ee=!1,O=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function $e(tt,it,ut){for(var _t=it+ut,de=it;tt[de]&&!(de>=_t);)++de;if(de-it>16&&tt.subarray&&O)return O.decode(tt.subarray(it,de));for(var ue="";it<de;){var St=tt[it++];if(!(St&128)){ue+=String.fromCharCode(St);continue}var me=tt[it++]&63;if((St&224)==192){ue+=String.fromCharCode((St&31)<<6|me);continue}var Ce=tt[it++]&63;if((St&240)==224?St=(St&15)<<12|me<<6|Ce:St=(St&7)<<18|me<<12|Ce<<6|tt[it++]&63,St<65536)ue+=String.fromCharCode(St);else{var en=St-65536;ue+=String.fromCharCode(55296|en>>10,56320|en&1023)}}return ue}function je(tt,it){return tt?$e(Zt,tt,it):""}function We(tt,it,ut){for(var _t=0;_t<tt.length;++_t)ne[it++>>0]=tt.charCodeAt(_t);ut||(ne[it>>0]=0)}function zt(tt,it){return tt%it>0&&(tt+=it-tt%it),tt}var Jn,ne,Zt,qe;function zn(tt){Jn=tt,r.HEAP8=ne=new Int8Array(tt),r.HEAP16=new Int16Array(tt),r.HEAP32=qe=new Int32Array(tt),r.HEAPU8=Zt=new Uint8Array(tt),r.HEAPU16=new Uint16Array(tt),r.HEAPU32=new Uint32Array(tt),r.HEAPF32=new Float32Array(tt),r.HEAPF64=new Float64Array(tt)}r.INITIAL_MEMORY;var Re,Ct=[],Te=[],ln=[],Xn=0;function Hn(){return Bt||Xn>0}function In(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)bn(r.preRun.shift());Qt(Ct)}function kn(){Qt(Te)}function hn(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)Fn(r.postRun.shift());Qt(ln)}function bn(tt){Ct.unshift(tt)}function En(tt){Te.unshift(tt)}function Fn(tt){ln.unshift(tt)}var Pe=0,Ae=null;function xn(tt){Pe++,r.monitorRunDependencies&&r.monitorRunDependencies(Pe)}function Wn(tt){if(Pe--,r.monitorRunDependencies&&r.monitorRunDependencies(Pe),Pe==0&&Ae){var it=Ae;Ae=null,it()}}r.preloadedImages={},r.preloadedAudios={};function he(tt){r.onAbort&&r.onAbort(tt),tt="Aborted("+tt+")",at(tt),ee=!0,tt+=". Build with -s ASSERTIONS=1 for more info.";var it=new WebAssembly.RuntimeError(tt);throw Z(it),it}var Se="data:application/octet-stream;base64,";function Oe(tt){return tt.startsWith(Se)}var re;re="tflite-simd.wasm",Oe(re)||(re=pt(re));function Ve(tt){try{if(tt==re&&dt)return new Uint8Array(dt);if(!Yt)throw"both async and sync fetching of the wasm failed"}catch(it){he(it)}}function cn(){return!dt&&et&&typeof fetch=="function"?fetch(re,{credentials:"same-origin"}).then(function(tt){if(!tt.ok)throw"failed to load wasm binary file at '"+re+"'";return tt.arrayBuffer()}).catch(function(){return Ve(re)}):Promise.resolve().then(function(){return Ve(re)})}function Be(){var tt={a:fe};function it(St,me){var Ce=St.exports;r.asm=Ce,Nt=r.asm.q,zn(Nt.buffer),Re=r.asm.E,En(r.asm.r),Wn()}xn();function ut(St){it(St.instance)}function _t(St){return cn().then(function(me){return WebAssembly.instantiate(me,tt)}).then(function(me){return me}).then(St,function(me){at("failed to asynchronously prepare wasm: "+me),he(me)})}function de(){return!dt&&typeof WebAssembly.instantiateStreaming=="function"&&!Oe(re)&&typeof fetch=="function"?fetch(re,{credentials:"same-origin"}).then(function(St){var me=WebAssembly.instantiateStreaming(St,tt);return me.then(ut,function(Ce){return at("wasm streaming compile failed: "+Ce),at("falling back to ArrayBuffer instantiation"),_t(ut)})}):_t(ut)}if(r.instantiateWasm)try{var ue=r.instantiateWasm(tt,it);return ue}catch(St){return at("Module.instantiateWasm callback failed with error: "+St),!1}return de().catch(Z),{}}function Qt(tt){for(;tt.length>0;){var it=tt.shift();if(typeof it=="function"){it(r);continue}var ut=it.func;typeof ut=="number"?it.arg===void 0?Re.get(ut)():Re.get(ut)(it.arg):ut(it.arg===void 0?null:it.arg)}}function Ze(tt,it,ut,_t){he("Assertion failed: "+je(tt)+", at: "+[it?je(it):"unknown filename",ut,_t?je(_t):"unknown function"])}function Fe(tt,it){he("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function Mt(tt,it){he("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function Ie(){he("")}var jt;jt=function(){return performance.now()};var ye=!0;function Ye(tt){return qe[Ft()>>2]=tt,tt}function tn(tt,it){var ut;if(tt===0)ut=Date.now();else if((tt===1||tt===4)&&ye)ut=jt();else return Ye(28),-1;return qe[it>>2]=ut/1e3|0,qe[it+4>>2]=ut%1e3*1e3*1e3|0,0}function Xe(){return 2147483648}function Pt(tt,it,ut){Zt.copyWithin(tt,it,it+ut)}function ze(tt){try{return Nt.grow(tt-Jn.byteLength+65535>>>16),zn(Nt.buffer),1}catch{}}function _e(tt){var it=Zt.length;tt=tt>>>0;var ut=2147483648;if(tt>ut)return!1;for(var _t=1;_t<=4;_t*=2){var de=it*(1+.2/_t);de=Math.min(de,tt+100663296);var ue=Math.min(ut,zt(Math.max(tt,de),65536)),St=ze(ue);if(St)return!0}return!1}function xe(tt){for(var it=jt();jt()-it<tt;);}var Vn={};function un(){return T||"./this.program"}function Qe(){if(!Qe.strings){var tt=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",it={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:tt,_:un()};for(var ut in Vn)Vn[ut]===void 0?delete it[ut]:it[ut]=Vn[ut];var _t=[];for(var ut in it)_t.push(ut+"="+it[ut]);Qe.strings=_t}return Qe.strings}var an={mappings:{},buffers:[null,[],[]],printChar:function(tt,it){var ut=an.buffers[tt];it===0||it===10?((tt===1?Lt:at)($e(ut,0)),ut.length=0):ut.push(it)},varargs:void 0,get:function(){an.varargs+=4;var tt=qe[an.varargs-4>>2];return tt},getStr:function(tt){var it=je(tt);return it},get64:function(tt,it){return tt}};function ve(tt,it){var ut=0;return Qe().forEach(function(_t,de){var ue=it+ut;qe[tt+de*4>>2]=ue,We(_t,ue),ut+=_t.length+1}),0}function we(tt,it){var ut=Qe();qe[tt>>2]=ut.length;var _t=0;return ut.forEach(function(de){_t+=de.length+1}),qe[it>>2]=_t,0}function Ge(tt){te(tt)}function ie(tt){return 0}function De(tt,it,ut,_t,de){}function qt(tt,it,ut,_t){for(var de=0,ue=0;ue<ut;ue++){for(var St=qe[it+ue*8>>2],me=qe[it+(ue*8+4)>>2],Ce=0;Ce<me;Ce++)an.printChar(tt,Zt[St+Ce]);de+=me}return qe[_t>>2]=de,0}function Ot(){if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function"){var tt=new Uint8Array(1);return function(){return crypto.getRandomValues(tt),tt[0]}}else return function(){he("randomDevice")}}function fn(tt,it){fn.randomDevice||(fn.randomDevice=Ot());for(var ut=0;ut<it;ut++)ne[tt+ut>>0]=fn.randomDevice();return 0}var fe={a:Ze,e:Fe,d:Mt,b:Ie,n:tn,h:Xe,l:Pt,m:_e,p:xe,f:ve,g:we,j:Ge,i:ie,k:De,c:qt,o:fn};Be(),r.___wasm_call_ctors=function(){return(r.___wasm_call_ctors=r.asm.r).apply(null,arguments)},r._getModelBufferMemoryOffset=function(){return(r._getModelBufferMemoryOffset=r.asm.s).apply(null,arguments)},r._getInputMemoryOffset=function(){return(r._getInputMemoryOffset=r.asm.t).apply(null,arguments)},r._getInputHeight=function(){return(r._getInputHeight=r.asm.u).apply(null,arguments)},r._getInputWidth=function(){return(r._getInputWidth=r.asm.v).apply(null,arguments)},r._getInputChannelCount=function(){return(r._getInputChannelCount=r.asm.w).apply(null,arguments)},r._getOutputMemoryOffset=function(){return(r._getOutputMemoryOffset=r.asm.x).apply(null,arguments)},r._getOutputHeight=function(){return(r._getOutputHeight=r.asm.y).apply(null,arguments)},r._getOutputWidth=function(){return(r._getOutputWidth=r.asm.z).apply(null,arguments)},r._getOutputChannelCount=function(){return(r._getOutputChannelCount=r.asm.A).apply(null,arguments)},r._loadModel=function(){return(r._loadModel=r.asm.B).apply(null,arguments)},r._runInference=function(){return(r._runInference=r.asm.C).apply(null,arguments)},r._isGPUEnabled=function(){return(r._isGPUEnabled=r.asm.D).apply(null,arguments)};var Ft=r.___errno_location=function(){return(Ft=r.___errno_location=r.asm.F).apply(null,arguments)},Vt;function oe(tt){this.name="ExitStatus",this.message="Program terminated with exit("+tt+")",this.status=tt}Ae=function tt(){Vt||Le(),Vt||(Ae=tt)};function Le(tt){if(Pe>0||(In(),Pe>0))return;function it(){Vt||(Vt=!0,r.calledRun=!0,!ee&&(kn(),f(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),hn()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),it()},1)):it()}r.run=Le;function te(tt,it){se(tt)}function se(tt){Hn()||(r.onExit&&r.onExit(tt),ee=!0),J(tt,new oe(tt))}if(r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return Le(),n.ready}}();class e2{constructor(){gt(this,"selectedTFLite");gt(this,"isSIMDSupported",!1);gt(this,"isThreadsSupported",!1);gt(this,"inputWidth",0);gt(this,"inputHeight",0);gt(this,"inputChannelCount",0);gt(this,"inputMemoryOffset",0);gt(this,"outputWidth",0);gt(this,"outputHeight",0);gt(this,"outputChannelCount",0);gt(this,"outputMemoryOffset",0)}}const n2="https://d3opqjmqzxf057.cloudfront.net/vonage-tensorflow-wasm/tflite-simd-wasm/1.1.3/",r2="https://d3opqjmqzxf057.cloudfront.net/ml/selfie_segmentation/4.0.0/";async function i2(i=n2,n=r2){let r=new e2;var f=new Promise(function(Z,x){async function H(){return t2({locateFile:function(et){return i+et}})}async function T(J){return new Promise(async(et,lt)=>{const pt=J;if(typeof pt>"u")return lt("TFLite backend unavailable: wasmSimd");const Yt="selfie_segmentation_landscape";console.log("Loading tflite model:",Yt);let Lt=n+`${Yt}.tflite`;console.log("TFLite modelUrl: "+Lt);try{const dt=await(await fetch(Lt)).arrayBuffer();console.log("Model buffer size:",dt.byteLength);const Bt=pt._getModelBufferMemoryOffset();console.log("Model buffer memory offset:",Bt),console.log("Loading model buffer..."),pt.HEAPU8.set(new Uint8Array(dt),Bt);const Nt=pt._loadModel(dt.byteLength);if(console.log("Load model result:",Nt),Nt!==0){lt("Cannot load model");return}r.inputWidth=pt._getInputWidth(),r.inputHeight=pt._getInputHeight(),r.inputChannelCount=pt._getInputChannelCount(),r.inputMemoryOffset=pt._getInputMemoryOffset(),console.log("Input memory offset:",r.inputMemoryOffset),console.log("Input height:",r.inputHeight),console.log("Input width:",r.inputWidth),console.log("Input channels:",r.inputChannelCount),r.outputMemoryOffset=pt._getOutputMemoryOffset(),r.outputWidth=pt._getOutputWidth(),r.outputHeight=pt._getOutputHeight(),r.outputChannelCount=pt._getOutputChannelCount(),console.log("Output memory offset:",r.outputMemoryOffset),console.log("Output height:",r.outputHeight),console.log("Output width:",r.outputWidth),console.log("Output channels:",r.outputChannelCount),r.selectedTFLite=pt}catch(at){lt(at);return}et()})}H().then(J=>{if(J===null)throw console.error("loadTFLite null"),"loadTFLite null";T(J).then(et=>{Z(r)}).catch(et=>{console.error("loadTFLiteModel error"),x("loadTFLiteModel error")})}).catch(J=>{console.error("loadTFLite error:",J),x("loadTFLite error:"+J)})});return f}class Ss{constructor(){gt(this,"canvas",new OffscreenCanvas(0,0));gt(this,"context",this.canvas.getContext("2d",{willReadFrequently:!0}));gt(this,"pixelCount",0);gt(this,"inputOffset",0);gt(this,"outputOffset",0);gt(this,"infos");gt(this,"mask")}async init(n,r){await this.initWasm(n,r),this.infos&&(this.canvas.width=this.infos.inputWidth,this.canvas.height=this.infos.inputHeight,this.pixelCount=this.infos.inputWidth*this.infos.inputHeight,this.mask=new ImageData(this.infos.inputWidth,this.infos.inputHeight),this.inputOffset=this.infos.inputMemoryOffset/4,this.outputOffset=this.infos.outputMemoryOffset/4)}async initWasm(n,r){this.infos=await i2(n,r)}getOutputDimensions(){var n,r,f,Z;return{width:(r=(n=this.infos)==null?void 0:n.outputWidth)!=null?r:0,height:(Z=(f=this.infos)==null?void 0:f.outputHeight)!=null?Z:0}}async process(n){if(!this.mask||!this.infos)return;const r=this.infos.inputWidth,f=this.infos.inputHeight;this.context.drawImage(n,0,0,n.width,n.height,0,0,r,f);const Z=this.context.getImageData(0,0,r,f),x=this.infos.selectedTFLite.HEAPF32;for(let H=0;H<this.pixelCount;H++){const T=this.inputOffset+H*3;x[T]=Z.data[H*4]/255,x[T+1]=Z.data[H*4+1]/255,x[T+2]=Z.data[H*4+2]/255}this.infos.selectedTFLite._runInference();for(let H=0;H<this.pixelCount;H++){const T=this.infos.selectedTFLite.HEAPF32[this.outputOffset+H];this.mask.data[H*4]=this.mask.data[H*4+3]=255*T}return createImageBitmap(this.mask)}isGpuSupported(){var n,r,f;return(f=(r=(n=this.infos)==null?void 0:n.selectedTFLite)==null?void 0:r._isGPUEnabled())!=null?f:!1}}async function o2(i,n){const{wasm:r,insertableStreams:f,simd:Z,webgl:x}=await Ts(i,n);if(!r.supported)throw r.message;if(!f.supported)throw f.message;if(!Z.supported)throw Z.message;if(!x.supported)throw x.message}async function Ts(i,n){const r=new Ss;await r.initWasm(i,n);const f={wasm:{supported:typeof WebAssembly=="object"&&typeof WebAssembly.instantiate=="function",message:"Your browser does not support WebAssembly features."},simd:{supported:await qc(),message:"Your browser does not support simd features."},insertableStreams:{supported:!0},gpu:{supported:r.isGpuSupported(),message:"Your browser does not support gpu features."},webgl:s2(),performance:Ys()};try{await bc()}catch(Z){f.insertableStreams.supported=!1,f.insertableStreams.message=Z}return f}function s2(){return OffscreenCanvas?new OffscreenCanvas(0,0).getContext("webgl2")?{supported:!0}:{supported:!1,message:"Your browser does not support webgl 2"}:{supported:!1,message:"Your browser does not support offscreen canvas"}}function Ys(){return new OffscreenCanvas(0,0).getContext("webgl2",{failIfMajorPerformanceCaveat:!0})?{supported:!0}:{supported:!1,message:"Your hardware does not perform good enough to run the library efficiently"}}const Gi={};(function(){var i;function n(p){var W=0;return function(){return W<p.length?{done:!1,value:p[W++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(p,W,V){return p==Array.prototype||p==Object.prototype||(p[W]=V.value),p};function f(p){p=[typeof globalThis=="object"&&globalThis,p,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var W=0;W<p.length;++W){var V=p[W];if(V&&V.Math==Math)return V}throw Error("Cannot find global object")}var Z=f(this);function x(p,W){if(W)t:{var V=Z;p=p.split(".");for(var E=0;E<p.length-1;E++){var P=p[E];if(!(P in V))break t;V=V[P]}p=p[p.length-1],E=V[p],W=W(E),W!=E&&W!=null&&r(V,p,{configurable:!0,writable:!0,value:W})}}x("Symbol",function(p){function W(ot){if(this instanceof W)throw new TypeError("Symbol is not a constructor");return new V(E+(ot||"")+"_"+P++,ot)}function V(ot,j){this.g=ot,r(this,"description",{configurable:!0,writable:!0,value:j})}if(p)return p;V.prototype.toString=function(){return this.g};var E="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",P=0;return W}),x("Symbol.iterator",function(p){if(p)return p;p=Symbol("Symbol.iterator");for(var W="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),V=0;V<W.length;V++){var E=Z[W[V]];typeof E=="function"&&typeof E.prototype[p]!="function"&&r(E.prototype,p,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return p});function H(p){return p={next:p},p[Symbol.iterator]=function(){return this},p}function T(p){var W=typeof Symbol<"u"&&Symbol.iterator&&p[Symbol.iterator];return W?W.call(p):{next:n(p)}}function J(p){if(!(p instanceof Array)){p=T(p);for(var W,V=[];!(W=p.next()).done;)V.push(W.value);p=V}return p}var et=typeof Object.create=="function"?Object.create:function(p){function W(){}return W.prototype=p,new W},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(p,W){if(p.__proto__=W,p.__proto__!==W)throw new TypeError(p+" is not extensible");return p}:null}var at=lt;function dt(p,W){if(p.prototype=et(W.prototype),p.prototype.constructor=p,at)at(p,W);else for(var V in W)if(V!="prototype")if(Object.defineProperties){var E=Object.getOwnPropertyDescriptor(W,V);E&&Object.defineProperty(p,V,E)}else p[V]=W[V];p.ea=W.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Nt(p){if(p.l)throw new TypeError("Generator is already running");p.l=!0}Bt.prototype.o=function(p){this.h=p};function ee(p,W){p.j={U:W,V:!0},p.g=p.m||p.s}Bt.prototype.return=function(p){this.j={return:p},this.g=this.s};function O(p,W,V){return p.g=V,{value:W}}function $e(p){this.g=new Bt,this.h=p}function je(p,W){Nt(p.g);var V=p.g.i;return V?We(p,"return"in V?V.return:function(E){return{value:E,done:!0}},W,p.g.return):(p.g.return(W),zt(p))}function We(p,W,V,E){try{var P=W.call(p.g.i,V);if(!(P instanceof Object))throw new TypeError("Iterator result "+P+" is not an object");if(!P.done)return p.g.l=!1,P;var ot=P.value}catch(j){return p.g.i=null,ee(p.g,j),zt(p)}return p.g.i=null,E.call(p.g,ot),zt(p)}function zt(p){for(;p.g.g;)try{var W=p.h(p.g);if(W)return p.g.l=!1,{value:W.value,done:!1}}catch(V){p.g.h=void 0,ee(p.g,V)}if(p.g.l=!1,p.g.j){if(W=p.g.j,p.g.j=null,W.V)throw W.U;return{value:W.return,done:!0}}return{value:void 0,done:!0}}function Jn(p){this.next=function(W){return Nt(p.g),p.g.i?W=We(p,p.g.i.next,W,p.g.o):(p.g.o(W),W=zt(p)),W},this.throw=function(W){return Nt(p.g),p.g.i?W=We(p,p.g.i.throw,W,p.g.o):(ee(p.g,W),W=zt(p)),W},this.return=function(W){return je(p,W)},this[Symbol.iterator]=function(){return this}}function ne(p,W){return W=new Jn(new $e(W)),at&&p.prototype&&at(W,p.prototype),W}function Zt(p,W){p instanceof String&&(p+="");var V=0,E=!1,P={next:function(){if(!E&&V<p.length){var ot=V++;return{value:W(ot,p[ot]),done:!1}}return E=!0,{done:!0,value:void 0}}};return P[Symbol.iterator]=function(){return P},P}var qe=typeof Object.assign=="function"?Object.assign:function(p,W){for(var V=1;V<arguments.length;V++){var E=arguments[V];if(E)for(var P in E)Object.prototype.hasOwnProperty.call(E,P)&&(p[P]=E[P])}return p};x("Object.assign",function(p){return p||qe}),x("Promise",function(p){function W(j){this.h=0,this.i=void 0,this.g=[],this.o=!1;var rt=this.j();try{j(rt.resolve,rt.reject)}catch(bt){rt.reject(bt)}}function V(){this.g=null}function E(j){return j instanceof W?j:new W(function(rt){rt(j)})}if(p)return p;V.prototype.h=function(j){if(this.g==null){this.g=[];var rt=this;this.i(function(){rt.l()})}this.g.push(j)};var P=Z.setTimeout;V.prototype.i=function(j){P(j,0)},V.prototype.l=function(){for(;this.g&&this.g.length;){var j=this.g;this.g=[];for(var rt=0;rt<j.length;++rt){var bt=j[rt];j[rt]=null;try{bt()}catch(Rt){this.j(Rt)}}}this.g=null},V.prototype.j=function(j){this.i(function(){throw j})},W.prototype.j=function(){function j(Rt){return function(Ut){bt||(bt=!0,Rt.call(rt,Ut))}}var rt=this,bt=!1;return{resolve:j(this.C),reject:j(this.l)}},W.prototype.C=function(j){if(j===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(j instanceof W)this.F(j);else{t:switch(typeof j){case"object":var rt=j!=null;break t;case"function":rt=!0;break t;default:rt=!1}rt?this.u(j):this.m(j)}},W.prototype.u=function(j){var rt=void 0;try{rt=j.then}catch(bt){this.l(bt);return}typeof rt=="function"?this.G(rt,j):this.m(j)},W.prototype.l=function(j){this.s(2,j)},W.prototype.m=function(j){this.s(1,j)},W.prototype.s=function(j,rt){if(this.h!=0)throw Error("Cannot settle("+j+", "+rt+"): Promise already settled in state"+this.h);this.h=j,this.i=rt,this.h===2&&this.D(),this.A()},W.prototype.D=function(){var j=this;P(function(){if(j.B()){var rt=Z.console;typeof rt<"u"&&rt.error(j.i)}},1)},W.prototype.B=function(){if(this.o)return!1;var j=Z.CustomEvent,rt=Z.Event,bt=Z.dispatchEvent;return typeof bt>"u"?!0:(typeof j=="function"?j=new j("unhandledrejection",{cancelable:!0}):typeof rt=="function"?j=new rt("unhandledrejection",{cancelable:!0}):(j=Z.document.createEvent("CustomEvent"),j.initCustomEvent("unhandledrejection",!1,!0,j)),j.promise=this,j.reason=this.i,bt(j))},W.prototype.A=function(){if(this.g!=null){for(var j=0;j<this.g.length;++j)ot.h(this.g[j]);this.g=null}};var ot=new V;return W.prototype.F=function(j){var rt=this.j();j.J(rt.resolve,rt.reject)},W.prototype.G=function(j,rt){var bt=this.j();try{j.call(rt,bt.resolve,bt.reject)}catch(Rt){bt.reject(Rt)}},W.prototype.then=function(j,rt){function bt($t,kt){return typeof $t=="function"?function(Tt){try{Rt($t(Tt))}catch(Et){Ut(Et)}}:kt}var Rt,Ut,Jt=new W(function($t,kt){Rt=$t,Ut=kt});return this.J(bt(j,Rt),bt(rt,Ut)),Jt},W.prototype.catch=function(j){return this.then(void 0,j)},W.prototype.J=function(j,rt){function bt(){switch(Rt.h){case 1:j(Rt.i);break;case 2:rt(Rt.i);break;default:throw Error("Unexpected state: "+Rt.h)}}var Rt=this;this.g==null?ot.h(bt):this.g.push(bt),this.o=!0},W.resolve=E,W.reject=function(j){return new W(function(rt,bt){bt(j)})},W.race=function(j){return new W(function(rt,bt){for(var Rt=T(j),Ut=Rt.next();!Ut.done;Ut=Rt.next())E(Ut.value).J(rt,bt)})},W.all=function(j){var rt=T(j),bt=rt.next();return bt.done?E([]):new W(function(Rt,Ut){function Jt(Tt){return function(Et){$t[Tt]=Et,kt--,kt==0&&Rt($t)}}var $t=[],kt=0;do $t.push(void 0),kt++,E(bt.value).J(Jt($t.length-1),Ut),bt=rt.next();while(!bt.done)})},W}),x("Object.is",function(p){return p||function(W,V){return W===V?W!==0||1/W===1/V:W!==W&&V!==V}}),x("Array.prototype.includes",function(p){return p||function(W,V){var E=this;E instanceof String&&(E=String(E));var P=E.length;for(V=V||0,0>V&&(V=Math.max(V+P,0));V<P;V++){var ot=E[V];if(ot===W||Object.is(ot,W))return!0}return!1}}),x("String.prototype.includes",function(p){return p||function(W,V){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(W instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(W,V||0)!==-1}}),x("Array.prototype.keys",function(p){return p||function(){return Zt(this,function(W){return W})}});var zn=this||self;function Re(p,W){p=p.split(".");var V=zn;p[0]in V||typeof V.execScript>"u"||V.execScript("var "+p[0]);for(var E;p.length&&(E=p.shift());)p.length||W===void 0?V[E]&&V[E]!==Object.prototype[E]?V=V[E]:V=V[E]={}:V[E]=W}function Ct(p,W){return W=String.fromCharCode.apply(null,W),p==null?W:p+W}var Te,ln=typeof TextDecoder<"u",Xn,Hn=typeof TextEncoder<"u";function In(p){if(Hn)p=(Xn||(Xn=new TextEncoder)).encode(p);else{var W=void 0;W=W===void 0?!1:W;for(var V=0,E=new Uint8Array(3*p.length),P=0;P<p.length;P++){var ot=p.charCodeAt(P);if(128>ot)E[V++]=ot;else{if(2048>ot)E[V++]=ot>>6|192;else{if(55296<=ot&&57343>=ot){if(56319>=ot&&P<p.length){var j=p.charCodeAt(++P);if(56320<=j&&57343>=j){ot=1024*(ot-55296)+j-56320+65536,E[V++]=ot>>18|240,E[V++]=ot>>12&63|128,E[V++]=ot>>6&63|128,E[V++]=ot&63|128;continue}else P--}if(W)throw Error("Found an unpaired surrogate");ot=65533}E[V++]=ot>>12|224,E[V++]=ot>>6&63|128}E[V++]=ot&63|128}}p=E.subarray(0,V)}return p}var kn={},hn=null;function bn(p,W){W===void 0&&(W=0),Pe(),W=kn[W];for(var V=Array(Math.floor(p.length/3)),E=W[64]||"",P=0,ot=0;P<p.length-2;P+=3){var j=p[P],rt=p[P+1],bt=p[P+2],Rt=W[j>>2];j=W[(j&3)<<4|rt>>4],rt=W[(rt&15)<<2|bt>>6],bt=W[bt&63],V[ot++]=Rt+j+rt+bt}switch(Rt=0,bt=E,p.length-P){case 2:Rt=p[P+1],bt=W[(Rt&15)<<2]||E;case 1:p=p[P],V[ot]=W[p>>2]+W[(p&3)<<4|Rt>>4]+bt+E}return V.join("")}function En(p){var W=p.length,V=3*W/4;V%3?V=Math.floor(V):"=.".indexOf(p[W-1])!=-1&&(V="=.".indexOf(p[W-2])!=-1?V-2:V-1);var E=new Uint8Array(V),P=0;return Fn(p,function(ot){E[P++]=ot}),E.subarray(0,P)}function Fn(p,W){function V(bt){for(;E<p.length;){var Rt=p.charAt(E++),Ut=hn[Rt];if(Ut!=null)return Ut;if(!/^[\s\xa0]*$/.test(Rt))throw Error("Unknown base64 encoding at char: "+Rt)}return bt}Pe();for(var E=0;;){var P=V(-1),ot=V(0),j=V(64),rt=V(64);if(rt===64&&P===-1)break;W(P<<2|ot>>4),j!=64&&(W(ot<<4&240|j>>2),rt!=64&&W(j<<6&192|rt))}}function Pe(){if(!hn){hn={};for(var p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),W=["+/=","+/","-_=","-_.","-_"],V=0;5>V;V++){var E=p.concat(W[V].split(""));kn[V]=E;for(var P=0;P<E.length;P++){var ot=E[P];hn[ot]===void 0&&(hn[ot]=P)}}}}var Ae=typeof Uint8Array.prototype.slice=="function",xn;function Wn(p,W,V){return W===V?xn||(xn=new Uint8Array(0)):Ae?p.slice(W,V):new Uint8Array(p.subarray(W,V))}var he=0,Se=0;function Oe(p,W){W=W===void 0?{}:W,W=W.v===void 0?!1:W.v,this.h=null,this.g=this.i=this.j=0,this.l=!1,this.v=W,p&&re(this,p)}function re(p,W){W=W.constructor===Uint8Array?W:W.constructor===ArrayBuffer?new Uint8Array(W):W.constructor===Array?new Uint8Array(W):W.constructor===String?En(W):W instanceof Uint8Array?new Uint8Array(W.buffer,W.byteOffset,W.byteLength):new Uint8Array(0),p.h=W,p.j=0,p.i=p.h.length,p.g=p.j}Oe.prototype.reset=function(){this.g=this.j};function Ve(p){var W=p.h,V=W[p.g],E=V&127;return 128>V?(p.g+=1,E):(V=W[p.g+1],E|=(V&127)<<7,128>V?(p.g+=2,E):(V=W[p.g+2],E|=(V&127)<<14,128>V?(p.g+=3,E):(V=W[p.g+3],E|=(V&127)<<21,128>V?(p.g+=4,E):(V=W[p.g+4],E|=(V&15)<<28,128>V?(p.g+=5,E>>>0):(p.g+=5,128<=W[p.g++]&&128<=W[p.g++]&&128<=W[p.g++]&&128<=W[p.g++]&&p.g++,E)))))}function cn(p){var W=p.h[p.g],V=p.h[p.g+1],E=p.h[p.g+2],P=p.h[p.g+3];return p.g+=4,V=(W<<0|V<<8|E<<16|P<<24)>>>0,p=2*(V>>31)+1,W=V>>>23&255,V&=8388607,W==255?V?NaN:1/0*p:W==0?p*Math.pow(2,-149)*V:p*Math.pow(2,W-150)*(V+Math.pow(2,23))}var Be=[];function Qt(){this.g=new Uint8Array(64),this.h=0}Qt.prototype.push=function(p){if(!(this.h+1<this.g.length)){var W=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(W)}this.g[this.h++]=p},Qt.prototype.length=function(){return this.h},Qt.prototype.end=function(){var p=this.g,W=this.h;return this.h=0,Wn(p,0,W)};function Ze(p,W){for(;127<W;)p.push(W&127|128),W>>>=7;p.push(W)}function Fe(p){var W={},V=W.N===void 0?!1:W.N;this.o={v:W.v===void 0?!1:W.v},this.N=V,W=this.o,Be.length?(V=Be.pop(),W&&(V.v=W.v),p&&re(V,p),p=V):p=new Oe(p,W),this.g=p,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}Fe.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};function Mt(p){var W=p.g;if((W=W.g==W.i)||(W=p.j)||(W=p.g,W=W.l||0>W.g||W.g>W.i),W)return!1;p.m=p.g.g,W=Ve(p.g);var V=W&7;return V!=0&&V!=5&&V!=1&&V!=2&&V!=3&&V!=4?(p.j=!0,!1):(p.i=W,p.l=W>>>3,p.h=V,!0)}function Ie(p){switch(p.h){case 0:if(p.h!=0)Ie(p);else{for(p=p.g;p.h[p.g]&128;)p.g++;p.g++}break;case 1:p.h!=1?Ie(p):(p=p.g,p.g+=8);break;case 2:if(p.h!=2)Ie(p);else{var W=Ve(p.g);p=p.g,p.g+=W}break;case 5:p.h!=5?Ie(p):(p=p.g,p.g+=4);break;case 3:W=p.l;do{if(!Mt(p)){p.j=!0;break}if(p.h==4){p.l!=W&&(p.j=!0);break}Ie(p)}while(1);break;default:p.j=!0}}function jt(p,W,V){var E=p.g.i,P=Ve(p.g);return P=p.g.g+P,p.g.i=P,V(W,p),p.g.g=P,p.g.i=E,W}function ye(p){var W=Ve(p.g);p=p.g;var V=p.g;p.g+=W,p=p.h;var E;if(ln)(E=Te)||(E=Te=new TextDecoder("utf-8",{fatal:!1})),E=E.decode(p.subarray(V,V+W));else{W=V+W;for(var P=[],ot=null,j,rt,bt;V<W;)j=p[V++],128>j?P.push(j):224>j?V>=W?P.push(65533):(rt=p[V++],194>j||(rt&192)!==128?(V--,P.push(65533)):P.push((j&31)<<6|rt&63)):240>j?V>=W-1?P.push(65533):(rt=p[V++],(rt&192)!==128||j===224&&160>rt||j===237&&160<=rt||((E=p[V++])&192)!==128?(V--,P.push(65533)):P.push((j&15)<<12|(rt&63)<<6|E&63)):244>=j?V>=W-2?P.push(65533):(rt=p[V++],(rt&192)!==128||(j<<28)+(rt-144)>>30!==0||((E=p[V++])&192)!==128||((bt=p[V++])&192)!==128?(V--,P.push(65533)):(j=(j&7)<<18|(rt&63)<<12|(E&63)<<6|bt&63,j-=65536,P.push((j>>10&1023)+55296,(j&1023)+56320))):P.push(65533),8192<=P.length&&(ot=Ct(ot,P),P.length=0);E=Ct(ot,P)}return E}function Ye(){this.h=[],this.i=0,this.g=new Qt}function tn(p,W){W.length!==0&&(p.h.push(W),p.i+=W.length)}function Xe(p){var W=p.i+p.g.length();if(W===0)return new Uint8Array(0);W=new Uint8Array(W);for(var V=p.h,E=V.length,P=0,ot=0;ot<E;ot++){var j=V[ot];j.length!==0&&(W.set(j,P),P+=j.length)}return V=p.g,E=V.h,E!==0&&(W.set(V.g.subarray(0,E),P),V.h=0),p.h=[W],W}function Pt(p,W,V){if(V!=null){Ze(p.g,8*W+5),p=p.g;var E=V;E=(V=0>E?1:0)?-E:E,E===0?0<1/E?he=Se=0:(Se=0,he=2147483648):isNaN(E)?(Se=0,he=2147483647):34028234663852886e22<E?(Se=0,he=(V<<31|2139095040)>>>0):11754943508222875e-54>E?(E=Math.round(E/Math.pow(2,-149)),Se=0,he=(V<<31|E)>>>0):(W=Math.floor(Math.log(E)/Math.LN2),E*=Math.pow(2,-W),E=Math.round(8388608*E)&8388607,Se=0,he=(V<<31|W+127<<23|E)>>>0),V=he,p.push(V>>>0&255),p.push(V>>>8&255),p.push(V>>>16&255),p.push(V>>>24&255)}}var ze=typeof Uint8Array=="function";function _e(p,W,V){if(p!=null)return typeof p=="object"?ze&&p instanceof Uint8Array?V(p):xe(p,W,V):W(p)}function xe(p,W,V){if(Array.isArray(p)){for(var E=Array(p.length),P=0;P<p.length;P++)E[P]=_e(p[P],W,V);return Array.isArray(p)&&p.W&&Qe(E),E}E={};for(P in p)E[P]=_e(p[P],W,V);return E}function Vn(p){return typeof p=="number"?isFinite(p)?p:String(p):p}var un={W:{value:!0,configurable:!0}};function Qe(p){return Array.isArray(p)&&!Object.isFrozen(p)&&Object.defineProperties(p,un),p}var an;function ve(p,W,V){var E=an;an=null,p||(p=E),E=this.constructor.ca,p||(p=E?[E]:[]),this.j=E?0:-1,this.i=null,this.g=p;t:{if(E=this.g.length,p=E-1,E&&(E=this.g[p],E!==null&&typeof E=="object"&&E.constructor===Object)){this.l=p-this.j,this.h=E;break t}W!==void 0&&-1<W?(this.l=Math.max(W,p+1-this.j),this.h=null):this.l=Number.MAX_VALUE}if(V)for(W=0;W<V.length;W++)p=V[W],p<this.l?(p+=this.j,(E=this.g[p])?Qe(E):this.g[p]=we):(Ge(this),(E=this.h[p])?Qe(E):this.h[p]=we)}var we=Object.freeze(Qe([]));function Ge(p){var W=p.l+p.j;p.g[W]||(p.h=p.g[W]={})}function ie(p,W,V){return W===-1?null:(V===void 0?0:V)||W>=p.l?p.h?p.h[W]:void 0:p.g[W+p.j]}function De(p){var W=W===void 0?!1:W,V=ie(p,1,W);return V==null&&(V=we),V===we&&(V=Qe([]),Ot(p,1,V,W)),V}function qt(p,W,V){return p=ie(p,W),p=p==null?p:+p,p==null?V===void 0?0:V:p}function Ot(p,W,V,E){(E===void 0?0:E)||W>=p.l?(Ge(p),p.h[W]=V):p.g[W+p.j]=V}function fn(p,W){p.i||(p.i={});var V=p.i[1];if(!V){var E=De(p);V=[];for(var P=0;P<E.length;P++)V[P]=new W(E[P]);p.i[1]=V}return V}function fe(p,W,V,E){var P=fn(p,V);W=W||new V,p=De(p),E!=null?(P.splice(E,0,W),p.splice(E,0,Ft(W))):(P.push(W),p.push(Ft(W)))}ve.prototype.toJSON=function(){var p=Ft(this);return xe(p,Vn,bn)};function Ft(p,W){if(p.i)for(var V in p.i){var E=p.i[V];if(Array.isArray(E))for(var P=0;P<E.length;P++)E[P]&&Ft(E[P]);else E&&Ft(E)}return p.g}ve.prototype.toString=function(){return Ft(this).toString()};function Vt(p,W){return p=ie(p,W),p==null?0:p}function oe(p,W){return p=ie(p,W),p==null?"":p}function Le(p,W){if(p=p.m){tn(W,W.g.end());for(var V=0;V<p.length;V++)tn(W,p[V])}}function te(p,W){if(W.h==4)return!1;var V=W.m;return Ie(W),W.N||(W=Wn(W.g.h,V,W.g.g),(V=p.m)?V.push(W):p.m=[W]),!0}function se(p,W){var V=void 0;return new(V||(V=Promise))(function(E,P){function ot(bt){try{rt(W.next(bt))}catch(Rt){P(Rt)}}function j(bt){try{rt(W.throw(bt))}catch(Rt){P(Rt)}}function rt(bt){bt.done?E(bt.value):new V(function(Rt){Rt(bt.value)}).then(ot,j)}rt((W=W.apply(p,void 0)).next())})}function tt(p){ve.call(this,p)}dt(tt,ve);function it(p,W){for(;Mt(W);)switch(W.i){case 8:var V=Ve(W.g);Ot(p,1,V);break;case 21:V=cn(W.g),Ot(p,2,V);break;case 26:V=ye(W),Ot(p,3,V);break;case 34:V=ye(W),Ot(p,4,V);break;default:if(!te(p,W))return p}return p}function ut(p){ve.call(this,p,-1,_t)}dt(ut,ve),ut.prototype.addClassification=function(p,W){fe(this,p,tt,W)};var _t=[1];function de(p){ve.call(this,p)}dt(de,ve);function ue(p,W){for(;Mt(W);)switch(W.i){case 13:var V=cn(W.g);Ot(p,1,V);break;case 21:V=cn(W.g),Ot(p,2,V);break;case 29:V=cn(W.g),Ot(p,3,V);break;case 37:V=cn(W.g),Ot(p,4,V);break;case 45:V=cn(W.g),Ot(p,5,V);break;default:if(!te(p,W))return p}return p}function St(p){ve.call(this,p,-1,me)}dt(St,ve);var me=[1];function Ce(p){ve.call(this,p)}dt(Ce,ve);function en(p,W,V){if(V=p.createShader(V===0?p.VERTEX_SHADER:p.FRAGMENT_SHADER),p.shaderSource(V,W),p.compileShader(V),!p.getShaderParameter(V,p.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
3
3
|
|
|
4
|
-
`+p.getShaderInfoLog(
|
|
4
|
+
`+p.getShaderInfoLog(V));return V}function nn(p){return fn(p,tt).map(function(W){return{index:Vt(W,1),Y:qt(W,2),label:ie(W,3)!=null?oe(W,3):void 0,displayName:ie(W,4)!=null?oe(W,4):void 0}})}function mn(p){return{x:qt(p,1),y:qt(p,2),z:qt(p,3),visibility:ie(p,4)!=null?qt(p,4):void 0}}function yn(p,W){this.h=p,this.g=W,this.l=0}function He(p,W,V){return rn(p,W),typeof p.g.canvas.transferToImageBitmap=="function"?Promise.resolve(p.g.canvas.transferToImageBitmap()):V?Promise.resolve(p.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(p.g.canvas):(p.i===void 0&&(p.i=document.createElement("canvas")),new Promise(function(E){p.i.height=p.g.canvas.height,p.i.width=p.g.canvas.width,p.i.getContext("2d",{}).drawImage(p.g.canvas,0,0,p.g.canvas.width,p.g.canvas.height),E(p.i)}))}function rn(p,W){var V=p.g;if(p.m===void 0){var E=en(V,`
|
|
5
5
|
attribute vec2 aVertex;
|
|
6
6
|
attribute vec2 aTex;
|
|
7
7
|
varying vec2 vTex;
|
|
8
8
|
void main(void) {
|
|
9
9
|
gl_Position = vec4(aVertex, 0.0, 1.0);
|
|
10
10
|
vTex = aTex;
|
|
11
|
-
}`,0),
|
|
11
|
+
}`,0),P=en(V,`
|
|
12
12
|
precision mediump float;
|
|
13
13
|
varying vec2 vTex;
|
|
14
14
|
uniform sampler2D sampler0;
|
|
15
15
|
void main(){
|
|
16
16
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
17
|
-
}`,1),ot=
|
|
17
|
+
}`,1),ot=V.createProgram();if(V.attachShader(ot,E),V.attachShader(ot,P),V.linkProgram(ot),!V.getProgramParameter(ot,V.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
18
18
|
|
|
19
|
-
`+W.getProgramInfoLog(ot));E=p.m=ot,W.useProgram(E),O=W.getUniformLocation(E,"sampler0"),p.j={I:W.getAttribLocation(E,"aVertex"),H:W.getAttribLocation(E,"aTex"),da:O},p.s=W.createBuffer(),W.bindBuffer(W.ARRAY_BUFFER,p.s),W.enableVertexAttribArray(p.j.I),W.vertexAttribPointer(p.j.I,2,W.FLOAT,!1,0,0),W.bufferData(W.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),W.STATIC_DRAW),W.bindBuffer(W.ARRAY_BUFFER,null),p.o=W.createBuffer(),W.bindBuffer(W.ARRAY_BUFFER,p.o),W.enableVertexAttribArray(p.j.H),W.vertexAttribPointer(p.j.H,2,W.FLOAT,!1,0,0),W.bufferData(W.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),W.STATIC_DRAW),W.bindBuffer(W.ARRAY_BUFFER,null),W.uniform1i(O,0)}E=p.j,W.useProgram(p.m),W.canvas.width=V.width,W.canvas.height=V.height,W.viewport(0,0,V.width,V.height),W.activeTexture(W.TEXTURE0),p.h.bindTexture2d(V.glName),W.enableVertexAttribArray(E.I),W.bindBuffer(W.ARRAY_BUFFER,p.s),W.vertexAttribPointer(E.I,2,W.FLOAT,!1,0,0),W.enableVertexAttribArray(E.H),W.bindBuffer(W.ARRAY_BUFFER,p.o),W.vertexAttribPointer(E.H,2,W.FLOAT,!1,0,0),W.bindFramebuffer(W.DRAW_FRAMEBUFFER?W.DRAW_FRAMEBUFFER:W.FRAMEBUFFER,null),W.clearColor(0,0,0,0),W.clear(W.COLOR_BUFFER_BIT),W.colorMask(!0,!0,!0,!0),W.drawArrays(W.TRIANGLE_FAN,0,4),W.disableVertexAttribArray(E.I),W.disableVertexAttribArray(E.H),W.bindBuffer(W.ARRAY_BUFFER,null),p.h.bindTexture2d(0)}function jn(p){this.g=p}var on=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Je(p,V){return V+p}function Zn(p,V){window[p]=V}function Sn(p){var V=document.createElement("script");return V.setAttribute("src",p),V.setAttribute("crossorigin","anonymous"),new Promise(function(W){V.addEventListener("load",function(){W()},!1),V.addEventListener("error",function(){W()},!1),document.body.appendChild(V)})}function Be(){return se(this,function p(){return ne(p,function(V){switch(V.g){case 1:return V.m=2,P(V,WebAssembly.instantiate(on),4);case 4:V.g=3,V.m=0;break;case 2:return V.m=0,V.j=null,V.return(!1);case 3:return V.return(!0)}})})}function Un(p){if(this.g=p,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=p&&p.locateFile||Je,typeof window=="object")var V=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")V=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=V,p.options){V=T(Object.keys(p.options));for(var W=V.next();!W.done;W=V.next()){W=W.value;var E=p.options[W].default;E!==void 0&&(this.j[W]=typeof E=="function"?E():E)}}}i=Un.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function sn(p,V){return p.g.files===void 0?[]:typeof p.g.files=="function"?p.g.files(V):p.g.files}function vn(p){return se(p,function V(){var W=this,E,O,ot,j,rt,bt,Rt,Ut,Jt,$t,kt;return ne(V,function(Tt){switch(Tt.g){case 1:return E=W,W.R?(O=sn(W,W.j),P(Tt,Be(),2)):Tt.return();case 2:if(ot=Tt.h,typeof window=="object")return Zn("createMediapipeSolutionsWasm",{locateFile:W.locateFile}),Zn("createMediapipeSolutionsPackedAssets",{locateFile:W.locateFile}),bt=O.filter(function(Et){return Et.data!==void 0}),Rt=O.filter(function(Et){return Et.data===void 0}),Ut=Promise.all(bt.map(function(Et){var Dt=dn(E,Et.url);if(Et.path!==void 0){var ae=Et.path;Dt=Dt.then(function(pe){return E.overrideFile(ae,pe),Promise.resolve(pe)})}return Dt})),Jt=Promise.all(Rt.map(function(Et){return Et.simd===void 0||Et.simd&&ot||!Et.simd&&!ot?Sn(E.locateFile(Et.url,E.S)):Promise.resolve()})).then(function(){return se(E,function Et(){var Dt,ae,pe=this;return ne(Et,function(ge){if(ge.g==1)return Dt=window.createMediapipeSolutionsWasm,ae=window.createMediapipeSolutionsPackedAssets,P(ge,Dt(ae),2);pe.h=ge.h,ge.g=0})})}),$t=function(){return se(E,function Et(){var Dt=this;return ne(Et,function(ae){return Dt.g.graph&&Dt.g.graph.url?ae=P(ae,dn(Dt,Dt.g.graph.url),0):(ae.g=0,ae=void 0),ae})})}(),P(Tt,Promise.all([Jt,Ut,$t]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return j=O.filter(function(Et){return Et.simd===void 0||Et.simd&&ot||!Et.simd&&!ot}).map(function(Et){return E.locateFile(Et.url,E.S)}),importScripts.apply(null,J(j)),P(Tt,createMediapipeSolutionsWasm(Module),6);case 6:W.h=Tt.h,W.l=new OffscreenCanvas(1,1),W.h.canvas=W.l,rt=W.h.GL.createContext(W.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),W.h.GL.makeContextCurrent(rt),Tt.g=4;break;case 7:if(W.l=document.createElement("canvas"),kt=W.l.getContext("webgl2",{}),!kt&&(kt=W.l.getContext("webgl",{}),!kt))return alert("Failed to create WebGL canvas context when passing video frame."),Tt.return();W.D=kt,W.h.canvas=W.l,W.h.createContext(W.l,!0,!0,{});case 4:W.i=new W.h.SolutionWasm,W.R=!1,Tt.g=0}})})}function Tn(p){return se(p,function V(){var W=this,E,O,ot,j,rt,bt,Rt,Ut;return ne(V,function(Jt){if(Jt.g==1){if(W.g.graph&&W.g.graph.url&&W.P===W.g.graph.url)return Jt.return();if(W.o=!0,!W.g.graph||!W.g.graph.url){Jt.g=2;return}return W.P=W.g.graph.url,P(Jt,dn(W,W.g.graph.url),3)}for(Jt.g!=2&&(E=Jt.h,W.i.loadGraph(E)),O=T(Object.keys(W.B)),ot=O.next();!ot.done;ot=O.next())j=ot.value,W.i.overrideFile(j,W.B[j]);if(W.B={},W.g.listeners)for(rt=T(W.g.listeners),bt=rt.next();!bt.done;bt=rt.next())Rt=bt.value,Qn(W,Rt);Ut=W.j,W.j={},W.setOptions(Ut),Jt.g=0})})}i.reset=function(){return se(this,function p(){var V=this;return ne(p,function(W){V.i&&(V.i.reset(),V.m={},V.s={}),W.g=0})})},i.setOptions=function(p,V){var W=this;if(V=V||this.g.options){for(var E=[],O=[],ot={},j=T(Object.keys(p)),rt=j.next();!rt.done;ot={K:ot.K,L:ot.L},rt=j.next()){var bt=rt.value;bt in this.j&&this.j[bt]===p[bt]||(this.j[bt]=p[bt],rt=V[bt],rt!==void 0&&(rt.onChange&&(ot.K=rt.onChange,ot.L=p[bt],E.push(function(Rt){return function(){return se(W,function Ut(){var Jt,$t=this;return ne(Ut,function(kt){if(kt.g==1)return P(kt,Rt.K(Rt.L),2);Jt=kt.h,Jt===!0&&($t.o=!0),kt.g=0})})}}(ot))),rt.graphOptionXref&&(bt={valueNumber:rt.type===1?p[bt]:0,valueBoolean:rt.type===0?p[bt]:!1,valueString:rt.type===2?p[bt]:""},rt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),rt.graphOptionXref),bt),O.push(rt))))}(E.length!==0||O.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(O),this.u=(this.u===void 0?[]:this.u).concat(E))}};function Mn(p){return se(p,function V(){var W=this,E,O,ot,j,rt,bt,Rt;return ne(V,function(Ut){switch(Ut.g){case 1:if(!W.o)return Ut.return();if(!W.u){Ut.g=2;break}E=T(W.u),O=E.next();case 3:if(O.done){Ut.g=5;break}return ot=O.value,P(Ut,ot(),4);case 4:O=E.next(),Ut.g=3;break;case 5:W.u=void 0;case 2:if(W.A){for(j=new W.h.GraphOptionChangeRequestList,rt=T(W.A),bt=rt.next();!bt.done;bt=rt.next())Rt=bt.value,j.push_back(Rt);W.i.changeOptions(j),j.delete(),W.A=void 0}W.o=!1,Ut.g=0}})})}i.initialize=function(){return se(this,function p(){var V=this;return ne(p,function(W){return W.g==1?P(W,vn(V),2):W.g!=3?P(W,Tn(V),3):P(W,Mn(V),0)})})};function dn(p,V){return se(p,function W(){var E=this,O,ot;return ne(W,function(j){return V in E.F?j.return(E.F[V]):(O=E.locateFile(V,""),ot=fetch(O).then(function(rt){return rt.arrayBuffer()}),E.F[V]=ot,j.return(ot))})})}i.overrideFile=function(p,V){this.i?this.i.overrideFile(p,V):this.B[p]=V},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(p,V){return se(this,function W(){var E=this,O,ot,j,rt,bt,Rt,Ut,Jt,$t;return ne(W,function(kt){switch(kt.g){case 1:return E.g.inputs?(O=1e3*(V==null?performance.now():V),P(kt,E.C,2)):kt.return();case 2:return P(kt,E.initialize(),3);case 3:for(ot=new E.h.PacketDataList,j=T(Object.keys(p)),rt=j.next();!rt.done;rt=j.next())if(bt=rt.value,Rt=E.g.inputs[bt]){t:{var Tt=E,Et=p[bt];switch(Rt.type){case"video":var Dt=Tt.m[Rt.stream];if(Dt||(Dt=new yn(Tt.h,Tt.D),Tt.m[Rt.stream]=Dt),Tt=Dt,Tt.l===0&&(Tt.l=Tt.h.createTexture()),typeof HTMLVideoElement<"u"&&Et instanceof HTMLVideoElement){var ae=Et.videoWidth;Dt=Et.videoHeight}else typeof HTMLImageElement<"u"&&Et instanceof HTMLImageElement?(ae=Et.naturalWidth,Dt=Et.naturalHeight):(ae=Et.width,Dt=Et.height);Dt={glName:Tt.l,width:ae,height:Dt},ae=Tt.g,ae.canvas.width=Dt.width,ae.canvas.height=Dt.height,ae.activeTexture(ae.TEXTURE0),Tt.h.bindTexture2d(Tt.l),ae.texImage2D(ae.TEXTURE_2D,0,ae.RGBA,ae.RGBA,ae.UNSIGNED_BYTE,Et),Tt.h.bindTexture2d(0),Tt=Dt;break t;case"detections":for(Dt=Tt.m[Rt.stream],Dt||(Dt=new jn(Tt.h),Tt.m[Rt.stream]=Dt),Tt=Dt,Tt.data||(Tt.data=new Tt.g.DetectionListData),Tt.data.reset(Et.length),Dt=0;Dt<Et.length;++Dt){ae=Et[Dt];var pe=Tt.data,ge=pe.setBoundingBox,ke=Dt,h=ae.T,y=new Ce;Pt(y,1,h.Z),Pt(y,2,h.$),Pt(y,3,h.height),Pt(y,4,h.width),Pt(y,5,h.rotation),Pt(y,6,h.X);var G=h=new Le;Ot(G,1,ie(y,1)),Ot(G,2,ie(y,2)),Ot(G,3,ie(y,3)),Ot(G,4,ie(y,4)),Ot(G,5,ie(y,5));var C=ie(y,6);if(C!=null&&C!=null){Ze(G.g,48);var B=G.g,_=C;C=0>_,_=Math.abs(_);var M=_>>>0;for(_=Math.floor((_-M)/4294967296),_>>>=0,C&&(_=~_>>>0,M=(~M>>>0)+1,4294967295<M&&(M=0,_++,4294967295<_&&(_=0))),he=M,Se=_,C=he,M=Se;0<M||127<C;)B.push(C&127|128),C=(C>>>7|M<<25)>>>0,M>>>=7;B.push(C)}if(we(y,G),h=Xe(h),ge.call(pe,ke,h),ae.O)for(pe=0;pe<ae.O.length;++pe)y=ae.O[pe],G=!!y.visibility,ge=Tt.data,ke=ge.addNormalizedLandmark,h=Dt,y=Object.assign(Object.assign({},y),{visibility:G?y.visibility:0}),G=new de,Pt(G,1,y.x),Pt(G,2,y.y),Pt(G,3,y.z),y.visibility&&Pt(G,4,y.visibility),B=y=new Le,Ot(B,1,ie(G,1)),Ot(B,2,ie(G,2)),Ot(B,3,ie(G,3)),Ot(B,4,ie(G,4)),Ot(B,5,ie(G,5)),we(G,B),y=Xe(y),ke.call(ge,h,y);if(ae.M)for(pe=0;pe<ae.M.length;++pe){if(ge=Tt.data,ke=ge.addClassification,h=Dt,y=ae.M[pe],G=new tt,Pt(G,2,y.Y),y.index&&Pt(G,1,y.index),y.label&&Pt(G,3,y.label),y.displayName&&Pt(G,4,y.displayName),B=y=new Le,M=ie(G,1),M!=null&&M!=null)if(Ze(B.g,8),C=B.g,0<=M)Ze(C,M);else{for(_=0;9>_;_++)C.push(M&127|128),M>>=7;C.push(1)}Ot(B,2,ie(G,2)),C=ie(G,3),C!=null&&(C=In(C),Ze(B.g,26),Ze(B.g,C.length),tn(B,B.g.end()),tn(B,C)),C=ie(G,4),C!=null&&(C=In(C),Ze(B.g,34),Ze(B.g,C.length),tn(B,B.g.end()),tn(B,C)),we(G,B),y=Xe(y),ke.call(ge,h,y)}}Tt=Tt.data;break t;default:Tt={}}}switch(Ut=Tt,Jt=Rt.stream,Rt.type){case"video":ot.pushTexture2d(Object.assign(Object.assign({},Ut),{stream:Jt,timestamp:O}));break;case"detections":$t=Ut,$t.stream=Jt,$t.timestamp=O,ot.pushDetectionList($t);break;default:throw Error("Unknown input config type: '"+Rt.type+"'")}}return E.i.send(ot),P(kt,E.C,4);case 4:ot.delete(),kt.g=0}})})};function Ln(p,V,W){return se(p,function E(){var O,ot,j,rt,bt,Rt,Ut=this,Jt,$t,kt,Tt,Et,Dt,ae,pe;return ne(E,function(ge){switch(ge.g){case 1:if(!W)return ge.return(V);for(O={},ot=0,j=T(Object.keys(W)),rt=j.next();!rt.done;rt=j.next())bt=rt.value,Rt=W[bt],typeof Rt!="string"&&Rt.type==="texture"&&V[Rt.stream]!==void 0&&++ot;1<ot&&(Ut.G=!1),Jt=T(Object.keys(W)),rt=Jt.next();case 2:if(rt.done){ge.g=4;break}if($t=rt.value,kt=W[$t],typeof kt=="string")return ae=O,pe=$t,P(ge,_n(Ut,$t,V[kt]),14);if(Tt=V[kt.stream],kt.type==="detection_list"){if(Tt){for(var ke=Tt.getRectList(),h=Tt.getLandmarksList(),y=Tt.getClassificationsList(),G=[],C=0;C<ke.size();++C){var B=ke.get(C);t:{var _=new Ce;for(B=new Fe(B);Mt(B);)switch(B.i){case 13:var M=cn(B.g);Pt(_,1,M);break;case 21:M=cn(B.g),Pt(_,2,M);break;case 29:M=cn(B.g),Pt(_,3,M);break;case 37:M=cn(B.g),Pt(_,4,M);break;case 45:M=cn(B.g),Pt(_,5,M);break;case 48:for(var q=B.g,ct=128,s=0,X=M=0;4>X&&128<=ct;X++)ct=q.h[q.g++],s|=(ct&127)<<7*X;if(128<=ct&&(ct=q.h[q.g++],s|=(ct&127)<<28,M|=(ct&127)>>4),128<=ct)for(X=0;5>X&&128<=ct;X++)ct=q.h[q.g++],M|=(ct&127)<<7*X+3;128>ct?(q=s>>>0,ct=M>>>0,(M=ct&2147483648)&&(q=~q+1>>>0,ct=~ct>>>0,q==0&&(ct=ct+1>>>0)),q=4294967296*ct+(q>>>0),M=M?-q:q):(q.l=!0,M=void 0),Pt(_,6,M);break;default:if(!te(_,B))break t}}_={Z:qt(_,1),$:qt(_,2),height:qt(_,3),width:qt(_,4),rotation:qt(_,5,0),X:Wt(_,6)},M=h.get(C);t:for(B=new St,M=new Fe(M);Mt(M);)switch(M.i){case 10:q=jt(M,new de,ue),fe(B,q,de,void 0);break;default:if(!te(B,M))break t}B=fn(B,de).map(mn),q=y.get(C);t:for(M=new ut,q=new Fe(q);Mt(q);)switch(q.i){case 10:M.addClassification(jt(q,new tt,it));break;default:if(!te(M,q))break t}_={T:_,O:B,M:nn(M)},G.push(_)}ke=G}else ke=[];O[$t]=ke,ge.g=7;break}if(kt.type==="proto_list"){if(Tt){for(ke=Array(Tt.size()),h=0;h<Tt.size();h++)ke[h]=Tt.get(h);Tt.delete()}else ke=[];O[$t]=ke,ge.g=7;break}if(Tt===void 0){ge.g=3;break}if(kt.type==="float_list"){O[$t]=Tt,ge.g=7;break}if(kt.type==="proto"){O[$t]=Tt,ge.g=7;break}if(kt.type!=="texture")throw Error("Unknown output config type: '"+kt.type+"'");return Et=Ut.s[$t],Et||(Et=new yn(Ut.h,Ut.D),Ut.s[$t]=Et),P(ge,He(Et,Tt,Ut.G),13);case 13:Dt=ge.h,O[$t]=Dt;case 7:kt.transform&&O[$t]&&(O[$t]=kt.transform(O[$t])),ge.g=3;break;case 14:ae[pe]=ge.h;case 3:rt=Jt.next(),ge.g=2;break;case 4:return ge.return(O)}})})}function _n(p,V,W){return se(p,function E(){var O=this,ot;return ne(E,function(j){return typeof W=="number"||W instanceof Uint8Array||W instanceof O.h.Uint8BlobList?j.return(W):W instanceof O.h.Texture2dDataOut?(ot=O.s[V],ot||(ot=new yn(O.h,O.D),O.s[V]=ot),j.return(He(ot,W,O.G))):j.return(void 0)})})}function Qn(p,V){for(var W=V.name||"$",E=[].concat(J(V.wants)),O=new p.h.StringList,ot=T(V.wants),j=ot.next();!j.done;j=ot.next())O.push_back(j.value);ot=p.h.PacketListener.implement({onResults:function(rt){for(var bt={},Rt=0;Rt<V.wants.length;++Rt)bt[E[Rt]]=rt.get(Rt);var Ut=p.listeners[W];Ut&&(p.C=Ln(p,bt,V.outs).then(function(Jt){Jt=Ut(Jt);for(var $t=0;$t<V.wants.length;++$t){var kt=bt[E[$t]];typeof kt=="object"&&kt.hasOwnProperty&&kt.hasOwnProperty("delete")&&kt.delete()}Jt&&(p.C=Jt)}))}}),p.i.attachMultiListener(O,ot),O.delete()}i.onResults=function(p,V){this.listeners[V||"$"]=p},Re("Solution",Un),Re("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function Yn(p){switch(p===void 0&&(p=0),p){case 1:return"selfie_segmentation_landscape.tflite";default:return"selfie_segmentation.tflite"}}function Cn(p){var V=this;p=p||{},this.g=new Un({locateFile:p.locateFile,files:function(W){return[{simd:!0,url:"selfie_segmentation_solution_simd_wasm_bin.js"},{simd:!1,url:"selfie_segmentation_solution_wasm_bin.js"},{data:!0,url:Yn(W.modelSelection)}]},graph:{url:"selfie_segmentation.binarypb"},listeners:[{wants:["segmentation_mask","image_transformed"],outs:{image:{type:"texture",stream:"image_transformed"},segmentationMask:{type:"texture",stream:"segmentation_mask"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelSelection:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelSelection",fieldName:"int_value"},onChange:function(W){return se(V,function E(){var O,ot,j=this,rt;return ne(E,function(bt){return bt.g==1?(O=Yn(W),ot="third_party/mediapipe/modules/selfie_segmentation/"+O,P(bt,dn(j.g,O),2)):(rt=bt.h,j.g.overrideFile(ot,rt),bt.return(!0))})})}}}})}i=Cn.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(p){this.g.onResults(p)},i.initialize=function(){return se(this,function p(){var V=this;return ne(p,function(W){return P(W,V.g.initialize(),0)})})},i.reset=function(){this.g.reset()},i.send=function(p){return se(this,function V(){var W=this;return ne(V,function(E){return P(E,W.g.send(p),0)})})},i.setOptions=function(p){this.g.setOptions(p)},Re("SelfieSegmentation",Cn),Re("VERSION","0.1.1632777926")}).call(Gi);const Xi={};(function(){var i;function n(l){var v=0;return function(){return v<l.length?{done:!1,value:l[v++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(l,v,I){return l==Array.prototype||l==Object.prototype||(l[v]=I.value),l};function f(l){l=[typeof globalThis=="object"&&globalThis,l,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var v=0;v<l.length;++v){var I=l[v];if(I&&I.Math==Math)return I}throw Error("Cannot find global object")}var Z=f(this);function x(l,v){if(v)t:{var I=Z;l=l.split(".");for(var L=0;L<l.length-1;L++){var N=l[L];if(!(N in I))break t;I=I[N]}l=l[l.length-1],L=I[l],v=v(L),v!=L&&v!=null&&r(I,l,{configurable:!0,writable:!0,value:v})}}x("Symbol",function(l){function v(o){if(this instanceof v)throw new TypeError("Symbol is not a constructor");return new I(L+(o||"")+"_"+N++,o)}function I(o,d){this.g=o,r(this,"description",{configurable:!0,writable:!0,value:d})}if(l)return l;I.prototype.toString=function(){return this.g};var L="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",N=0;return v}),x("Symbol.iterator",function(l){if(l)return l;l=Symbol("Symbol.iterator");for(var v="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),I=0;I<v.length;I++){var L=Z[v[I]];typeof L=="function"&&typeof L.prototype[l]!="function"&&r(L.prototype,l,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return l});function H(l){return l={next:l},l[Symbol.iterator]=function(){return this},l}function T(l){var v=typeof Symbol<"u"&&Symbol.iterator&&l[Symbol.iterator];return v?v.call(l):{next:n(l)}}function J(l){if(!(l instanceof Array)){l=T(l);for(var v,I=[];!(v=l.next()).done;)I.push(v.value);l=I}return l}var et=typeof Object.create=="function"?Object.create:function(l){function v(){}return v.prototype=l,new v},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Lt={a:!0},wt={};try{wt.__proto__=Lt,pt=wt.a;break t}catch{}pt=!1}lt=pt?function(l,v){if(l.__proto__=v,l.__proto__!==v)throw new TypeError(l+" is not extensible");return l}:null}var at=lt;function dt(l,v){if(l.prototype=et(v.prototype),l.prototype.constructor=l,at)at(l,v);else for(var I in v)if(I!="prototype")if(Object.defineProperties){var L=Object.getOwnPropertyDescriptor(v,I);L&&Object.defineProperty(l,I,L)}else l[I]=v[I];l.ra=v.prototype}function Kt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function Nt(l){if(l.l)throw new TypeError("Generator is already running");l.l=!0}Kt.prototype.s=function(l){this.h=l};function ee(l,v){l.j={fa:v,ga:!0},l.g=l.o||l.u}Kt.prototype.return=function(l){this.j={return:l},this.g=this.u};function P(l,v,I){return l.g=I,{value:v}}function $e(l){this.g=new Kt,this.h=l}function je(l,v){Nt(l.g);var I=l.g.i;return I?Ve(l,"return"in I?I.return:function(L){return{value:L,done:!0}},v,l.g.return):(l.g.return(v),zt(l))}function Ve(l,v,I,L){try{var N=v.call(l.g.i,I);if(!(N instanceof Object))throw new TypeError("Iterator result "+N+" is not an object");if(!N.done)return l.g.l=!1,N;var o=N.value}catch(d){return l.g.i=null,ee(l.g,d),zt(l)}return l.g.i=null,L.call(l.g,o),zt(l)}function zt(l){for(;l.g.g;)try{var v=l.h(l.g);if(v)return l.g.l=!1,{value:v.value,done:!1}}catch(I){l.g.h=void 0,ee(l.g,I)}if(l.g.l=!1,l.g.j){if(v=l.g.j,l.g.j=null,v.ga)throw v.fa;return{value:v.return,done:!0}}return{value:void 0,done:!0}}function Jn(l){this.next=function(v){return Nt(l.g),l.g.i?v=Ve(l,l.g.i.next,v,l.g.s):(l.g.s(v),v=zt(l)),v},this.throw=function(v){return Nt(l.g),l.g.i?v=Ve(l,l.g.i.throw,v,l.g.s):(ee(l.g,v),v=zt(l)),v},this.return=function(v){return je(l,v)},this[Symbol.iterator]=function(){return this}}function ne(l){function v(L){return l.next(L)}function I(L){return l.throw(L)}return new Promise(function(L,N){function o(d){d.done?L(d.value):Promise.resolve(d.value).then(v,I).then(o,N)}o(l.next())})}function gt(l){return ne(new Jn(new $e(l)))}x("Promise",function(l){function v(d){this.h=0,this.i=void 0,this.g=[],this.s=!1;var g=this.j();try{d(g.resolve,g.reject)}catch(e){g.reject(e)}}function I(){this.g=null}function L(d){return d instanceof v?d:new v(function(g){g(d)})}if(l)return l;I.prototype.h=function(d){if(this.g==null){this.g=[];var g=this;this.i(function(){g.l()})}this.g.push(d)};var N=Z.setTimeout;I.prototype.i=function(d){N(d,0)},I.prototype.l=function(){for(;this.g&&this.g.length;){var d=this.g;this.g=[];for(var g=0;g<d.length;++g){var e=d[g];d[g]=null;try{e()}catch(u){this.j(u)}}}this.g=null},I.prototype.j=function(d){this.i(function(){throw d})},v.prototype.j=function(){function d(u){return function(m){e||(e=!0,u.call(g,m))}}var g=this,e=!1;return{resolve:d(this.D),reject:d(this.l)}},v.prototype.D=function(d){if(d===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(d instanceof v)this.H(d);else{t:switch(typeof d){case"object":var g=d!=null;break t;case"function":g=!0;break t;default:g=!1}g?this.A(d):this.o(d)}},v.prototype.A=function(d){var g=void 0;try{g=d.then}catch(e){this.l(e);return}typeof g=="function"?this.I(g,d):this.o(d)},v.prototype.l=function(d){this.u(2,d)},v.prototype.o=function(d){this.u(1,d)},v.prototype.u=function(d,g){if(this.h!=0)throw Error("Cannot settle("+d+", "+g+"): Promise already settled in state"+this.h);this.h=d,this.i=g,this.h===2&&this.G(),this.B()},v.prototype.G=function(){var d=this;N(function(){if(d.C()){var g=Z.console;typeof g<"u"&&g.error(d.i)}},1)},v.prototype.C=function(){if(this.s)return!1;var d=Z.CustomEvent,g=Z.Event,e=Z.dispatchEvent;return typeof e>"u"?!0:(typeof d=="function"?d=new d("unhandledrejection",{cancelable:!0}):typeof g=="function"?d=new g("unhandledrejection",{cancelable:!0}):(d=Z.document.createEvent("CustomEvent"),d.initCustomEvent("unhandledrejection",!1,!0,d)),d.promise=this,d.reason=this.i,e(d))},v.prototype.B=function(){if(this.g!=null){for(var d=0;d<this.g.length;++d)o.h(this.g[d]);this.g=null}};var o=new I;return v.prototype.H=function(d){var g=this.j();d.M(g.resolve,g.reject)},v.prototype.I=function(d,g){var e=this.j();try{d.call(g,e.resolve,e.reject)}catch(u){e.reject(u)}},v.prototype.then=function(d,g){function e(c,a){return typeof c=="function"?function(b){try{u(c(b))}catch(S){m(S)}}:a}var u,m,t=new v(function(c,a){u=c,m=a});return this.M(e(d,u),e(g,m)),t},v.prototype.catch=function(d){return this.then(void 0,d)},v.prototype.M=function(d,g){function e(){switch(u.h){case 1:d(u.i);break;case 2:g(u.i);break;default:throw Error("Unexpected state: "+u.h)}}var u=this;this.g==null?o.h(e):this.g.push(e),this.s=!0},v.resolve=L,v.reject=function(d){return new v(function(g,e){e(d)})},v.race=function(d){return new v(function(g,e){for(var u=T(d),m=u.next();!m.done;m=u.next())L(m.value).M(g,e)})},v.all=function(d){var g=T(d),e=g.next();return e.done?L([]):new v(function(u,m){function t(b){return function(S){c[b]=S,a--,a==0&&u(c)}}var c=[],a=0;do c.push(void 0),a++,L(e.value).M(t(c.length-1),m),e=g.next();while(!e.done)})},v});function qe(l,v){l instanceof String&&(l+="");var I=0,L=!1,N={next:function(){if(!L&&I<l.length){var o=I++;return{value:v(o,l[o]),done:!1}}return L=!0,{done:!0,value:void 0}}};return N[Symbol.iterator]=function(){return N},N}var zn=typeof Object.assign=="function"?Object.assign:function(l,v){for(var I=1;I<arguments.length;I++){var L=arguments[I];if(L)for(var N in L)Object.prototype.hasOwnProperty.call(L,N)&&(l[N]=L[N])}return l};x("Object.assign",function(l){return l||zn}),x("Object.is",function(l){return l||function(v,I){return v===I?v!==0||1/v===1/I:v!==v&&I!==I}}),x("Array.prototype.includes",function(l){return l||function(v,I){var L=this;L instanceof String&&(L=String(L));var N=L.length;for(I=I||0,0>I&&(I=Math.max(I+N,0));I<N;I++){var o=L[I];if(o===v||Object.is(o,v))return!0}return!1}}),x("String.prototype.includes",function(l){return l||function(v,I){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(v instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(v,I||0)!==-1}}),x("Array.prototype.keys",function(l){return l||function(){return qe(this,function(v){return v})}});var Re=this||self;function Ct(l,v){l=l.split(".");var I=Re;l[0]in I||typeof I.execScript>"u"||I.execScript("var "+l[0]);for(var L;l.length&&(L=l.shift());)l.length||v===void 0?I[L]&&I[L]!==Object.prototype[L]?I=I[L]:I=I[L]={}:I[L]=v}function Te(){throw Error("Invalid UTF8")}function ln(l,v){return v=String.fromCharCode.apply(null,v),l==null?v:l+v}var Xn,Hn=typeof TextDecoder<"u",In,kn=typeof TextEncoder<"u",hn={},bn=null;function En(l){var v;v===void 0&&(v=0),Ae(),v=hn[v];for(var I=Array(Math.floor(l.length/3)),L=v[64]||"",N=0,o=0;N<l.length-2;N+=3){var d=l[N],g=l[N+1],e=l[N+2],u=v[d>>2];d=v[(d&3)<<4|g>>4],g=v[(g&15)<<2|e>>6],e=v[e&63],I[o++]=u+d+g+e}switch(u=0,e=L,l.length-N){case 2:u=l[N+1],e=v[(u&15)<<2]||L;case 1:l=l[N],I[o]=v[l>>2]+v[(l&3)<<4|u>>4]+e+L}return I.join("")}function Fn(l){var v=l.length,I=3*v/4;I%3?I=Math.floor(I):"=.".indexOf(l[v-1])!=-1&&(I="=.".indexOf(l[v-2])!=-1?I-2:I-1);var L=new Uint8Array(I),N=0;return Oe(l,function(o){L[N++]=o}),N!==I?L.subarray(0,N):L}function Oe(l,v){function I(e){for(;L<l.length;){var u=l.charAt(L++),m=bn[u];if(m!=null)return m;if(!/^[\s\xa0]*$/.test(u))throw Error("Unknown base64 encoding at char: "+u)}return e}Ae();for(var L=0;;){var N=I(-1),o=I(0),d=I(64),g=I(64);if(g===64&&N===-1)break;v(N<<2|o>>4),d!=64&&(v(o<<4&240|d>>2),g!=64&&v(d<<6&192|g))}}function Ae(){if(!bn){bn={};for(var l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),v=["+/=","+/","-_=","-_.","-_"],I=0;5>I;I++){var L=l.concat(v[I].split(""));hn[I]=L;for(var N=0;N<L.length;N++){var o=L[N];bn[o]===void 0&&(bn[o]=N)}}}}var xn=typeof Uint8Array=="function";function Vn(l){return xn&&l!=null&&l instanceof Uint8Array}var he;function Se(l){if(this.L=l,l!==null&&l.length===0)throw Error("ByteString should be constructed with non-empty values")}var Pe=typeof Uint8Array.prototype.slice=="function",re=0,We=0;function cn(l,v){if(l.constructor===Uint8Array)return l;if(l.constructor===ArrayBuffer)return new Uint8Array(l);if(l.constructor===Array)return new Uint8Array(l);if(l.constructor===String)return Fn(l);if(l.constructor===Se)return!v&&(v=l.L)&&v.constructor===Uint8Array?v:(v=l.L,v=v==null||Vn(v)?v:typeof v=="string"?Fn(v):null,(l=l.L=v)?new Uint8Array(l):he||(he=new Uint8Array(0)));if(l instanceof Uint8Array)return new Uint8Array(l.buffer,l.byteOffset,l.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Ke(l,v){return Error("Invalid wire type: "+l+" (at position "+v+")")}function Qt(){return Error("Failed to read varint, encoding is invalid.")}function Ze(l,v){v=v===void 0?{}:v,v=v.v===void 0?!1:v.v,this.h=null,this.g=this.i=this.j=0,this.v=v,l&&Fe(this,l)}function Fe(l,v){l.h=cn(v,l.v),l.j=0,l.i=l.h.length,l.g=l.j}Ze.prototype.reset=function(){this.g=this.j};function Mt(l){if(l.g>l.i)throw Error("Tried to read past the end of the data "+l.g+" > "+l.i)}function Ie(l){var v=l.h,I=v[l.g],L=I&127;if(128>I)return l.g+=1,Mt(l),L;if(I=v[l.g+1],L|=(I&127)<<7,128>I)return l.g+=2,Mt(l),L;if(I=v[l.g+2],L|=(I&127)<<14,128>I)return l.g+=3,Mt(l),L;if(I=v[l.g+3],L|=(I&127)<<21,128>I)return l.g+=4,Mt(l),L;if(I=v[l.g+4],l.g+=5,L|=(I&15)<<28,128>I)return Mt(l),L;if(128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++])throw Qt();return Mt(l),L}var jt=[];function ye(){this.g=[]}ye.prototype.length=function(){return this.g.length},ye.prototype.end=function(){var l=this.g;return this.g=[],l};function Le(l,v){for(;127<v;)l.g.push(v&127|128),v>>>=7;l.g.push(v)}function tn(l){var v={},I=v.W===void 0?!1:v.W;this.l={v:v.v===void 0?!1:v.v},this.W=I,v=this.l,jt.length?(I=jt.pop(),v&&(I.v=v.v),l&&Fe(I,l),l=I):l=new Ze(l,v),this.g=l,this.j=this.g.g,this.h=this.i=-1}tn.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};function Xe(l){var v=l.g;if(v.g==v.i)return!1;l.j=l.g.g;var I=Ie(l.g)>>>0;if(v=I>>>3,I&=7,!(0<=I&&5>=I))throw Ke(I,l.j);if(1>v)throw Error("Invalid field number: "+v+" (at position "+l.j+")");return l.i=v,l.h=I,!0}function Ot(l){switch(l.h){case 0:if(l.h!=0)Ot(l);else t:{l=l.g;for(var v=l.g,I=v+10;v<I;)if((l.h[v++]&128)===0){l.g=v,Mt(l);break t}throw Qt()}break;case 1:l=l.g,l.g+=8,Mt(l);break;case 2:l.h!=2?Ot(l):(v=Ie(l.g)>>>0,l=l.g,l.g+=v,Mt(l));break;case 5:l=l.g,l.g+=4,Mt(l);break;case 3:v=l.i;do{if(!Xe(l))throw Error("Unmatched start-group tag: stream EOF");if(l.h==4){if(l.i!=v)throw Error("Unmatched end-group tag");break}Ot(l)}while(1);break;default:throw Ke(l.h,l.j)}}var ze=[];function _e(){this.i=[],this.h=0,this.g=new ye}function xe(l,v){v.length!==0&&(l.i.push(v),l.h+=v.length)}function Wn(l,v){if(v=v.ca){xe(l,l.g.end());for(var I=0;I<v.length;I++)xe(l,v[I])}}var un=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Qe(l,v){Object.isFrozen(l)||(un?l[un]|=v:l.N!==void 0?l.N|=v:Object.defineProperties(l,{N:{value:v,configurable:!0,writable:!0,enumerable:!1}}))}function an(l){var v;return un?v=l[un]:v=l.N,v==null?0:v}function ve(l){return Qe(l,1),l}function Ye(l){return Array.isArray(l)?!!(an(l)&2):!1}function Ge(l){if(!Array.isArray(l))throw Error("cannot mark non-array as immutable");Qe(l,2)}function ie(l){return l!==null&&typeof l=="object"&&!Array.isArray(l)&&l.constructor===Object}var De=Object.freeze(ve([]));function qt(l){if(Ye(l.m))throw Error("Cannot mutate an immutable Message")}var Pt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function fn(l){return{value:l,configurable:!1,writable:!1,enumerable:!1}}function fe(l,v,I){return v===-1?null:v>=l.i?l.g?l.g[v]:void 0:(I===void 0?0:I)&&l.g&&(I=l.g[v],I!=null)?I:l.m[v+l.h]}function Ft(l,v,I,L){L=L===void 0?!1:L,qt(l),v<l.i&&!L?l.m[v+l.h]=I:(l.g||(l.g=l.m[l.i+l.h]={}))[v]=I}function Wt(l,v,I,L){I=I===void 0?!0:I,L=L===void 0?!1:L;var N=fe(l,v,L);return N==null&&(N=De),Ye(l.m)?I&&(Ge(N),Object.freeze(N)):(N===De||Ye(N))&&(N=ve(N.slice()),Ft(l,v,N,L)),N}function oe(l,v,I){return l=fe(l,v),l=l==null?l:+l,l==null?I===void 0?0:I:l}function we(l,v,I,L){l.j||(l.j={});var N=Ye(l.m),o=l.j[I];if(!o){L=Wt(l,I,!0,L===void 0?!1:L),o=[],N=N||Ye(L);for(var d=0;d<L.length;d++)o[d]=new v(L[d]),N&&Ge(o[d].m);N&&(Ge(o),Object.freeze(o)),l.j[I]=o}return o}function te(l,v,I,L,N){var o=o===void 0?!1:o;return qt(l),o=we(l,I,v,o),I=L||new I,l=Wt(l,v),N!=null?(o.splice(N,0,I),l.splice(N,0,I.m)):(o.push(I),l.push(I.m)),I}function se(l,v){return l=fe(l,v),l==null?0:l}function tt(l,v){return l=fe(l,v),l==null?"":l}function it(l){switch(typeof l){case"number":return isFinite(l)?l:String(l);case"object":if(l&&!Array.isArray(l)){if(Vn(l))return En(l);if(l instanceof Se){var v=l.L;return v=v==null||typeof v=="string"?v:xn&&v instanceof Uint8Array?En(v):null,(l.L=v)||""}}}return l}function ut(l){var v=ue;return v=v===void 0?St:v,de(l,v)}function _t(l,v){if(l!=null){if(Array.isArray(l))l=de(l,v);else if(ie(l)){var I={},L;for(L in l)I[L]=_t(l[L],v);l=I}else l=v(l);return l}}function de(l,v){for(var I=l.slice(),L=0;L<I.length;L++)I[L]=_t(I[L],v);return Array.isArray(l)&&an(l)&1&&ve(I),I}function ue(l){return l&&typeof l=="object"&&l.toJSON?l.toJSON():(l=it(l),Array.isArray(l)?ut(l):l)}function St(l){return Vn(l)?new Uint8Array(l):l}function me(l,v,I){l||(l=Ce),Ce=null;var L=this.constructor.h;l||(l=L?[L]:[]),this.h=(L?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=l;t:{if(L=this.m.length,l=L-1,L&&(L=this.m[l],ie(L))){this.i=l-this.h,this.g=L;break t}v!==void 0&&-1<v?(this.i=Math.max(v,l+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE}if(I)for(v=0;v<I.length;v++)if(l=I[v],l<this.i)l+=this.h,(L=this.m[l])?Array.isArray(L)&&ve(L):this.m[l]=De;else{L=this.g||(this.g=this.m[this.i+this.h]={});var N=L[l];N?Array.isArray(N)&&ve(N):L[l]=De}}me.prototype.toJSON=function(){return ut(this.m)},me.prototype.toString=function(){return this.m.toString()};var Ce;function en(){me.apply(this,arguments)}if(dt(en,me),Pt){var nn={};Object.defineProperties(en,(nn[Symbol.hasInstance]=fn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),nn))}function mn(l,v,I){if(I){var L={},N;for(N in I){var o=I[N],d=o.ja;d||(L.F=o.pa||o.ha.P,o.ba?(L.U=Sn(o.ba),d=function(g){return function(e,u,m){return g.F(e,u,m,g.U)}}(L)):o.da?(L.T=Be(o.X.g,o.da),d=function(g){return function(e,u,m){return g.F(e,u,m,g.T)}}(L)):d=L.F,o.ja=d),d(v,l,o.X),L={F:L.F,U:L.U,T:L.T}}}Wn(v,l)}var yn=Symbol();function He(l,v,I){return l[yn]||(l[yn]=function(L,N){return v(L,N,I)})}function rn(l){var v=l[yn];if(!v){var I=p(l);v=function(L,N){return V(L,N,I)},l[yn]=v}return v}function jn(l){var v=l.ba;if(v)return rn(v);if(v=l.oa)return He(l.X.g,v,l.da)}function on(l){var v=jn(l),I=l.X,L=l.ha.O;return v?function(N,o){return L(N,o,I,v)}:function(N,o){return L(N,o,I)}}function Je(l,v,I,L,N,o){l=l();var d=0;for(l.length&&typeof l[0]!="number"&&(I(v,l[0]),d++);d<l.length;){I=l[d++];for(var g=d+1;g<l.length&&typeof l[g]!="number";)g++;var e=l[d++];switch(g-=d,g){case 0:L(v,I,e);break;case 1:L(v,I,e,l[d++]);break;case 2:N(v,I,e,l[d++],l[d++]);break;case 3:g=l[d++];var u=l[d++],m=l[d++];Array.isArray(m)?N(v,I,e,g,u,m):o(v,I,e,g,u,m);break;case 4:o(v,I,e,l[d++],l[d++],l[d++],l[d++]);break;default:throw Error("unexpected number of binary field arguments: "+g)}}return v}var Zn=Symbol();function Sn(l){var v=l[Zn];if(!v){var I=dn(l);v=function(L,N){return E(L,N,I)},l[Zn]=v}return v}function Be(l,v){var I=l[Zn];return I||(I=function(L,N){return mn(L,N,v)},l[Zn]=I),I}var Un=Symbol();function sn(l,v){l.push(v)}function vn(l,v,I){l.push(v,I.P)}function Tn(l,v,I,L,N){var o=Sn(N),d=I.P;l.push(v,function(g,e,u){return d(g,e,u,L,o)})}function Mn(l,v,I,L,N,o){var d=Be(L,o),g=I.P;l.push(v,function(e,u,m){return g(e,u,m,L,d)})}function dn(l){var v=l[Un];return v||Je(l,l[Un]=[],sn,vn,Tn,Mn)}var Ln=Symbol();function _n(l,v){l[0]=v}function Qn(l,v,I,L){var N=I.O;l[v]=L?function(o,d,g){return N(o,d,g,L)}:N}function Yn(l,v,I,L,N,o){var d=I.O,g=rn(N);l[v]=function(e,u,m){return d(e,u,m,L,g,o)}}function Cn(l,v,I,L,N,o,d){var g=I.O,e=He(L,N,o);l[v]=function(u,m,t){return g(u,m,t,L,e,d)}}function p(l){var v=l[Ln];return v||Je(l,l[Ln]={},_n,Qn,Yn,Cn)}function V(l,v,I){for(;Xe(v)&&v.h!=4;){var L=v.i,N=I[L];if(!N){var o=I[0];o&&(o=o[L])&&(N=I[L]=on(o))}if((!N||!N(v,l,L))&&(N=v,L=l,o=N.j,Ot(N),!N.W)){var d=N.g.h;N=N.g.g,N=o===N?he||(he=new Uint8Array(0)):Pe?d.slice(o,N):new Uint8Array(d.subarray(o,N)),(o=L.ca)?o.push(N):L.ca=[N]}}return l}function W(l,v,I){if(ze.length){var L=ze.pop();l&&(Fe(L.g,l),L.i=-1,L.h=-1),l=L}else l=new tn(l);try{return V(new v,l,p(I))}finally{v=l.g,v.h=null,v.j=0,v.i=0,v.g=0,v.v=!1,l.i=-1,l.h=-1,100>ze.length&&ze.push(l)}}function E(l,v,I){for(var L=I.length,N=L%2==1,o=N?1:0;o<L;o+=2)(0,I[o+1])(v,l,I[o]);mn(l,v,N?I[0]:void 0)}function O(l,v){var I=new _e;E(l,I,dn(v)),xe(I,I.g.end()),l=new Uint8Array(I.h),v=I.i;for(var L=v.length,N=0,o=0;o<L;o++){var d=v[o];l.set(d,N),N+=d.length}return I.i=[l],l}function ot(l,v){return{O:l,P:v}}var j=ot(function(l,v,I){if(l.h!==5)return!1;l=l.g;var L=l.h[l.g],N=l.h[l.g+1],o=l.h[l.g+2],d=l.h[l.g+3];return l.g+=4,Mt(l),N=(L<<0|N<<8|o<<16|d<<24)>>>0,l=2*(N>>31)+1,L=N>>>23&255,N&=8388607,Ft(v,I,L==255?N?NaN:1/0*l:L==0?l*Math.pow(2,-149)*N:l*Math.pow(2,L-150)*(N+Math.pow(2,23))),!0},function(l,v,I){if(v=fe(v,I),v!=null){Le(l.g,8*I+5),l=l.g;var L=v;L=(I=0>L?1:0)?-L:L,L===0?0<1/L?re=We=0:(We=0,re=2147483648):isNaN(L)?(We=0,re=2147483647):34028234663852886e22<L?(We=0,re=(I<<31|2139095040)>>>0):11754943508222875e-54>L?(L=Math.round(L/Math.pow(2,-149)),We=0,re=(I<<31|L)>>>0):(v=Math.floor(Math.log(L)/Math.LN2),L*=Math.pow(2,-v),L=Math.round(8388608*L),16777216<=L&&++v,We=0,re=(I<<31|v+127<<23|L&8388607)>>>0),I=re,l.g.push(I>>>0&255),l.g.push(I>>>8&255),l.g.push(I>>>16&255),l.g.push(I>>>24&255)}}),rt=ot(function(l,v,I){if(l.h!==0)return!1;for(var L=l.g,N=128,o=0,d=l=0;4>d&&128<=N;d++)N=L.h[L.g++],Mt(L),o|=(N&127)<<7*d;if(128<=N&&(N=L.h[L.g++],Mt(L),o|=(N&127)<<28,l|=(N&127)>>4),128<=N)for(d=0;5>d&&128<=N;d++)N=L.h[L.g++],Mt(L),l|=(N&127)<<7*d+3;if(128>N)L=o>>>0,N=l>>>0,(l=N&2147483648)&&(L=~L+1>>>0,N=~N>>>0,L==0&&(N=N+1>>>0)),L=4294967296*N+(L>>>0);else throw Qt();return Ft(v,I,l?-L:L),!0},function(l,v,I){if(v=fe(v,I),v!=null&&v!=null){Le(l.g,8*I),l=l.g;var L=v;for(I=0>L,L=Math.abs(L),v=L>>>0,L=Math.floor((L-v)/4294967296),L>>>=0,I&&(L=~L>>>0,v=(~v>>>0)+1,4294967295<v&&(v=0,L++,4294967295<L&&(L=0))),re=v,We=L,I=re,v=We;0<v||127<I;)l.g.push(I&127|128),I=(I>>>7|v<<25)>>>0,v>>>=7;l.g.push(I)}}),bt=ot(function(l,v,I){return l.h!==0?!1:(Ft(v,I,Ie(l.g)),!0)},function(l,v,I){if(v=fe(v,I),v!=null&&v!=null)if(Le(l.g,8*I),l=l.g,I=v,0<=I)Le(l,I);else{for(v=0;9>v;v++)l.g.push(I&127|128),I>>=7;l.g.push(1)}}),Rt=ot(function(l,v,I){if(l.h!==2)return!1;var L=Ie(l.g)>>>0;l=l.g;var N=l.g;l.g+=L,Mt(l),l=l.h;var o;if(Hn)(o=Xn)||(o=Xn=new TextDecoder("utf-8",{fatal:!0})),o=o.decode(l.subarray(N,N+L));else{L=N+L;for(var d=[],g=null,e,u,m;N<L;)e=l[N++],128>e?d.push(e):224>e?N>=L?Te():(u=l[N++],194>e||(u&192)!==128?(N--,Te()):d.push((e&31)<<6|u&63)):240>e?N>=L-1?Te():(u=l[N++],(u&192)!==128||e===224&&160>u||e===237&&160<=u||((o=l[N++])&192)!==128?(N--,Te()):d.push((e&15)<<12|(u&63)<<6|o&63)):244>=e?N>=L-2?Te():(u=l[N++],(u&192)!==128||(e<<28)+(u-144)>>30!==0||((o=l[N++])&192)!==128||((m=l[N++])&192)!==128?(N--,Te()):(e=(e&7)<<18|(u&63)<<12|(o&63)<<6|m&63,e-=65536,d.push((e>>10&1023)+55296,(e&1023)+56320))):Te(),8192<=d.length&&(g=ln(g,d),d.length=0);o=ln(g,d)}return Ft(v,I,o),!0},function(l,v,I){if(v=fe(v,I),v!=null){var L=!1;if(L=L===void 0?!1:L,kn){if(L&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(v))throw Error("Found an unpaired surrogate");v=(In||(In=new TextEncoder)).encode(v)}else{for(var N=0,o=new Uint8Array(3*v.length),d=0;d<v.length;d++){var g=v.charCodeAt(d);if(128>g)o[N++]=g;else{if(2048>g)o[N++]=g>>6|192;else{if(55296<=g&&57343>=g){if(56319>=g&&d<v.length){var e=v.charCodeAt(++d);if(56320<=e&&57343>=e){g=1024*(g-55296)+e-56320+65536,o[N++]=g>>18|240,o[N++]=g>>12&63|128,o[N++]=g>>6&63|128,o[N++]=g&63|128;continue}else d--}if(L)throw Error("Found an unpaired surrogate");g=65533}o[N++]=g>>12|224,o[N++]=g>>6&63|128}o[N++]=g&63|128}}v=o.subarray(0,N)}Le(l.g,8*I+2),Le(l.g,v.length),xe(l,l.g.end()),xe(l,v)}}),Ut=ot(function(l,v,I,L,N){if(l.h!==2)return!1;v=te(v,I,L),I=l.g.i,L=Ie(l.g)>>>0;var o=l.g.g+L,d=o-I;if(0>=d&&(l.g.i=o,N(v,l),d=o-l.g.g),d)throw Error("Message parsing ended unexpectedly. Expected to read "+(L+" bytes, instead read "+(L-d)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return l.g.g=o,l.g.i=I,!0},function(l,v,I,L,N){if(v=we(v,L,I),v!=null)for(L=0;L<v.length;L++){var o=l;Le(o.g,8*I+2);var d=o.g.end();xe(o,d),d.push(o.h),o=d,N(v[L],l),d=l;var g=o.pop();for(g=d.h+d.g.length()-g;127<g;)o.push(g&127|128),g>>>=7,d.h++;o.push(g),d.h++}});function Jt(){en.apply(this,arguments)}if(dt(Jt,en),Pt){var $t={};Object.defineProperties(Jt,($t[Symbol.hasInstance]=fn(Object[Symbol.hasInstance]),$t))}function kt(l){Jt.call(this,l)}dt(kt,Jt);function Tt(){return[1,bt,2,j,3,Rt,4,Rt]}function Et(l){Jt.call(this,l,-1,ae)}dt(Et,Jt),Et.prototype.addClassification=function(l,v){return te(this,1,kt,l,v),this};function Dt(){return[1,Ut,kt,Tt]}var ae=[1];function pe(l){Jt.call(this,l)}dt(pe,Jt);function ge(){return[1,j,2,j,3,j,4,j,5,j]}function ke(l){Jt.call(this,l,-1,y)}dt(ke,Jt);function h(){return[1,Ut,pe,ge]}var y=[1];function G(l){Jt.call(this,l)}dt(G,Jt);function C(){return[1,j,2,j,3,j,4,j,5,j,6,rt]}function B(l,v,I){if(I=l.createShader(I===0?l.VERTEX_SHADER:l.FRAGMENT_SHADER),l.shaderSource(I,v),l.compileShader(I),!l.getShaderParameter(I,l.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
19
|
+
`+V.getProgramInfoLog(ot));E=p.m=ot,V.useProgram(E),P=V.getUniformLocation(E,"sampler0"),p.j={I:V.getAttribLocation(E,"aVertex"),H:V.getAttribLocation(E,"aTex"),da:P},p.s=V.createBuffer(),V.bindBuffer(V.ARRAY_BUFFER,p.s),V.enableVertexAttribArray(p.j.I),V.vertexAttribPointer(p.j.I,2,V.FLOAT,!1,0,0),V.bufferData(V.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),V.STATIC_DRAW),V.bindBuffer(V.ARRAY_BUFFER,null),p.o=V.createBuffer(),V.bindBuffer(V.ARRAY_BUFFER,p.o),V.enableVertexAttribArray(p.j.H),V.vertexAttribPointer(p.j.H,2,V.FLOAT,!1,0,0),V.bufferData(V.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),V.STATIC_DRAW),V.bindBuffer(V.ARRAY_BUFFER,null),V.uniform1i(P,0)}E=p.j,V.useProgram(p.m),V.canvas.width=W.width,V.canvas.height=W.height,V.viewport(0,0,W.width,W.height),V.activeTexture(V.TEXTURE0),p.h.bindTexture2d(W.glName),V.enableVertexAttribArray(E.I),V.bindBuffer(V.ARRAY_BUFFER,p.s),V.vertexAttribPointer(E.I,2,V.FLOAT,!1,0,0),V.enableVertexAttribArray(E.H),V.bindBuffer(V.ARRAY_BUFFER,p.o),V.vertexAttribPointer(E.H,2,V.FLOAT,!1,0,0),V.bindFramebuffer(V.DRAW_FRAMEBUFFER?V.DRAW_FRAMEBUFFER:V.FRAMEBUFFER,null),V.clearColor(0,0,0,0),V.clear(V.COLOR_BUFFER_BIT),V.colorMask(!0,!0,!0,!0),V.drawArrays(V.TRIANGLE_FAN,0,4),V.disableVertexAttribArray(E.I),V.disableVertexAttribArray(E.H),V.bindBuffer(V.ARRAY_BUFFER,null),p.h.bindTexture2d(0)}function jn(p){this.g=p}var on=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Je(p,W){return W+p}function Zn(p,W){window[p]=W}function Sn(p){var W=document.createElement("script");return W.setAttribute("src",p),W.setAttribute("crossorigin","anonymous"),new Promise(function(V){W.addEventListener("load",function(){V()},!1),W.addEventListener("error",function(){V()},!1),document.body.appendChild(W)})}function Ke(){return se(this,function p(){return ne(p,function(W){switch(W.g){case 1:return W.m=2,O(W,WebAssembly.instantiate(on),4);case 4:W.g=3,W.m=0;break;case 2:return W.m=0,W.j=null,W.return(!1);case 3:return W.return(!0)}})})}function Un(p){if(this.g=p,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=p&&p.locateFile||Je,typeof window=="object")var W=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")W=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=W,p.options){W=T(Object.keys(p.options));for(var V=W.next();!V.done;V=W.next()){V=V.value;var E=p.options[V].default;E!==void 0&&(this.j[V]=typeof E=="function"?E():E)}}}i=Un.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function sn(p,W){return p.g.files===void 0?[]:typeof p.g.files=="function"?p.g.files(W):p.g.files}function vn(p){return se(p,function W(){var V=this,E,P,ot,j,rt,bt,Rt,Ut,Jt,$t,kt;return ne(W,function(Tt){switch(Tt.g){case 1:return E=V,V.R?(P=sn(V,V.j),O(Tt,Ke(),2)):Tt.return();case 2:if(ot=Tt.h,typeof window=="object")return Zn("createMediapipeSolutionsWasm",{locateFile:V.locateFile}),Zn("createMediapipeSolutionsPackedAssets",{locateFile:V.locateFile}),bt=P.filter(function(Et){return Et.data!==void 0}),Rt=P.filter(function(Et){return Et.data===void 0}),Ut=Promise.all(bt.map(function(Et){var Dt=dn(E,Et.url);if(Et.path!==void 0){var ae=Et.path;Dt=Dt.then(function(pe){return E.overrideFile(ae,pe),Promise.resolve(pe)})}return Dt})),Jt=Promise.all(Rt.map(function(Et){return Et.simd===void 0||Et.simd&&ot||!Et.simd&&!ot?Sn(E.locateFile(Et.url,E.S)):Promise.resolve()})).then(function(){return se(E,function Et(){var Dt,ae,pe=this;return ne(Et,function(ge){if(ge.g==1)return Dt=window.createMediapipeSolutionsWasm,ae=window.createMediapipeSolutionsPackedAssets,O(ge,Dt(ae),2);pe.h=ge.h,ge.g=0})})}),$t=function(){return se(E,function Et(){var Dt=this;return ne(Et,function(ae){return Dt.g.graph&&Dt.g.graph.url?ae=O(ae,dn(Dt,Dt.g.graph.url),0):(ae.g=0,ae=void 0),ae})})}(),O(Tt,Promise.all([Jt,Ut,$t]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return j=P.filter(function(Et){return Et.simd===void 0||Et.simd&&ot||!Et.simd&&!ot}).map(function(Et){return E.locateFile(Et.url,E.S)}),importScripts.apply(null,J(j)),O(Tt,createMediapipeSolutionsWasm(Module),6);case 6:V.h=Tt.h,V.l=new OffscreenCanvas(1,1),V.h.canvas=V.l,rt=V.h.GL.createContext(V.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),V.h.GL.makeContextCurrent(rt),Tt.g=4;break;case 7:if(V.l=document.createElement("canvas"),kt=V.l.getContext("webgl2",{}),!kt&&(kt=V.l.getContext("webgl",{}),!kt))return alert("Failed to create WebGL canvas context when passing video frame."),Tt.return();V.D=kt,V.h.canvas=V.l,V.h.createContext(V.l,!0,!0,{});case 4:V.i=new V.h.SolutionWasm,V.R=!1,Tt.g=0}})})}function Tn(p){return se(p,function W(){var V=this,E,P,ot,j,rt,bt,Rt,Ut;return ne(W,function(Jt){if(Jt.g==1){if(V.g.graph&&V.g.graph.url&&V.P===V.g.graph.url)return Jt.return();if(V.o=!0,!V.g.graph||!V.g.graph.url){Jt.g=2;return}return V.P=V.g.graph.url,O(Jt,dn(V,V.g.graph.url),3)}for(Jt.g!=2&&(E=Jt.h,V.i.loadGraph(E)),P=T(Object.keys(V.B)),ot=P.next();!ot.done;ot=P.next())j=ot.value,V.i.overrideFile(j,V.B[j]);if(V.B={},V.g.listeners)for(rt=T(V.g.listeners),bt=rt.next();!bt.done;bt=rt.next())Rt=bt.value,Qn(V,Rt);Ut=V.j,V.j={},V.setOptions(Ut),Jt.g=0})})}i.reset=function(){return se(this,function p(){var W=this;return ne(p,function(V){W.i&&(W.i.reset(),W.m={},W.s={}),V.g=0})})},i.setOptions=function(p,W){var V=this;if(W=W||this.g.options){for(var E=[],P=[],ot={},j=T(Object.keys(p)),rt=j.next();!rt.done;ot={K:ot.K,L:ot.L},rt=j.next()){var bt=rt.value;bt in this.j&&this.j[bt]===p[bt]||(this.j[bt]=p[bt],rt=W[bt],rt!==void 0&&(rt.onChange&&(ot.K=rt.onChange,ot.L=p[bt],E.push(function(Rt){return function(){return se(V,function Ut(){var Jt,$t=this;return ne(Ut,function(kt){if(kt.g==1)return O(kt,Rt.K(Rt.L),2);Jt=kt.h,Jt===!0&&($t.o=!0),kt.g=0})})}}(ot))),rt.graphOptionXref&&(bt={valueNumber:rt.type===1?p[bt]:0,valueBoolean:rt.type===0?p[bt]:!1,valueString:rt.type===2?p[bt]:""},rt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),rt.graphOptionXref),bt),P.push(rt))))}(E.length!==0||P.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(P),this.u=(this.u===void 0?[]:this.u).concat(E))}};function Mn(p){return se(p,function W(){var V=this,E,P,ot,j,rt,bt,Rt;return ne(W,function(Ut){switch(Ut.g){case 1:if(!V.o)return Ut.return();if(!V.u){Ut.g=2;break}E=T(V.u),P=E.next();case 3:if(P.done){Ut.g=5;break}return ot=P.value,O(Ut,ot(),4);case 4:P=E.next(),Ut.g=3;break;case 5:V.u=void 0;case 2:if(V.A){for(j=new V.h.GraphOptionChangeRequestList,rt=T(V.A),bt=rt.next();!bt.done;bt=rt.next())Rt=bt.value,j.push_back(Rt);V.i.changeOptions(j),j.delete(),V.A=void 0}V.o=!1,Ut.g=0}})})}i.initialize=function(){return se(this,function p(){var W=this;return ne(p,function(V){return V.g==1?O(V,vn(W),2):V.g!=3?O(V,Tn(W),3):O(V,Mn(W),0)})})};function dn(p,W){return se(p,function V(){var E=this,P,ot;return ne(V,function(j){return W in E.F?j.return(E.F[W]):(P=E.locateFile(W,""),ot=fetch(P).then(function(rt){return rt.arrayBuffer()}),E.F[W]=ot,j.return(ot))})})}i.overrideFile=function(p,W){this.i?this.i.overrideFile(p,W):this.B[p]=W},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(p,W){return se(this,function V(){var E=this,P,ot,j,rt,bt,Rt,Ut,Jt,$t;return ne(V,function(kt){switch(kt.g){case 1:return E.g.inputs?(P=1e3*(W==null?performance.now():W),O(kt,E.C,2)):kt.return();case 2:return O(kt,E.initialize(),3);case 3:for(ot=new E.h.PacketDataList,j=T(Object.keys(p)),rt=j.next();!rt.done;rt=j.next())if(bt=rt.value,Rt=E.g.inputs[bt]){t:{var Tt=E,Et=p[bt];switch(Rt.type){case"video":var Dt=Tt.m[Rt.stream];if(Dt||(Dt=new yn(Tt.h,Tt.D),Tt.m[Rt.stream]=Dt),Tt=Dt,Tt.l===0&&(Tt.l=Tt.h.createTexture()),typeof HTMLVideoElement<"u"&&Et instanceof HTMLVideoElement){var ae=Et.videoWidth;Dt=Et.videoHeight}else typeof HTMLImageElement<"u"&&Et instanceof HTMLImageElement?(ae=Et.naturalWidth,Dt=Et.naturalHeight):(ae=Et.width,Dt=Et.height);Dt={glName:Tt.l,width:ae,height:Dt},ae=Tt.g,ae.canvas.width=Dt.width,ae.canvas.height=Dt.height,ae.activeTexture(ae.TEXTURE0),Tt.h.bindTexture2d(Tt.l),ae.texImage2D(ae.TEXTURE_2D,0,ae.RGBA,ae.RGBA,ae.UNSIGNED_BYTE,Et),Tt.h.bindTexture2d(0),Tt=Dt;break t;case"detections":for(Dt=Tt.m[Rt.stream],Dt||(Dt=new jn(Tt.h),Tt.m[Rt.stream]=Dt),Tt=Dt,Tt.data||(Tt.data=new Tt.g.DetectionListData),Tt.data.reset(Et.length),Dt=0;Dt<Et.length;++Dt){ae=Et[Dt];var pe=Tt.data,ge=pe.setBoundingBox,ke=Dt,h=ae.T,y=new Ce;Ot(y,1,h.Z),Ot(y,2,h.$),Ot(y,3,h.height),Ot(y,4,h.width),Ot(y,5,h.rotation),Ot(y,6,h.X);var G=h=new Ye;Pt(G,1,ie(y,1)),Pt(G,2,ie(y,2)),Pt(G,3,ie(y,3)),Pt(G,4,ie(y,4)),Pt(G,5,ie(y,5));var C=ie(y,6);if(C!=null&&C!=null){Ze(G.g,48);var K=G.g,_=C;C=0>_,_=Math.abs(_);var M=_>>>0;for(_=Math.floor((_-M)/4294967296),_>>>=0,C&&(_=~_>>>0,M=(~M>>>0)+1,4294967295<M&&(M=0,_++,4294967295<_&&(_=0))),he=M,Se=_,C=he,M=Se;0<M||127<C;)K.push(C&127|128),C=(C>>>7|M<<25)>>>0,M>>>=7;K.push(C)}if(Le(y,G),h=Xe(h),ge.call(pe,ke,h),ae.O)for(pe=0;pe<ae.O.length;++pe)y=ae.O[pe],G=!!y.visibility,ge=Tt.data,ke=ge.addNormalizedLandmark,h=Dt,y=Object.assign(Object.assign({},y),{visibility:G?y.visibility:0}),G=new de,Ot(G,1,y.x),Ot(G,2,y.y),Ot(G,3,y.z),y.visibility&&Ot(G,4,y.visibility),K=y=new Ye,Pt(K,1,ie(G,1)),Pt(K,2,ie(G,2)),Pt(K,3,ie(G,3)),Pt(K,4,ie(G,4)),Pt(K,5,ie(G,5)),Le(G,K),y=Xe(y),ke.call(ge,h,y);if(ae.M)for(pe=0;pe<ae.M.length;++pe){if(ge=Tt.data,ke=ge.addClassification,h=Dt,y=ae.M[pe],G=new tt,Ot(G,2,y.Y),y.index&&Ot(G,1,y.index),y.label&&Ot(G,3,y.label),y.displayName&&Ot(G,4,y.displayName),K=y=new Ye,M=ie(G,1),M!=null&&M!=null)if(Ze(K.g,8),C=K.g,0<=M)Ze(C,M);else{for(_=0;9>_;_++)C.push(M&127|128),M>>=7;C.push(1)}Pt(K,2,ie(G,2)),C=ie(G,3),C!=null&&(C=In(C),Ze(K.g,26),Ze(K.g,C.length),tn(K,K.g.end()),tn(K,C)),C=ie(G,4),C!=null&&(C=In(C),Ze(K.g,34),Ze(K.g,C.length),tn(K,K.g.end()),tn(K,C)),Le(G,K),y=Xe(y),ke.call(ge,h,y)}}Tt=Tt.data;break t;default:Tt={}}}switch(Ut=Tt,Jt=Rt.stream,Rt.type){case"video":ot.pushTexture2d(Object.assign(Object.assign({},Ut),{stream:Jt,timestamp:P}));break;case"detections":$t=Ut,$t.stream=Jt,$t.timestamp=P,ot.pushDetectionList($t);break;default:throw Error("Unknown input config type: '"+Rt.type+"'")}}return E.i.send(ot),O(kt,E.C,4);case 4:ot.delete(),kt.g=0}})})};function Yn(p,W,V){return se(p,function E(){var P,ot,j,rt,bt,Rt,Ut=this,Jt,$t,kt,Tt,Et,Dt,ae,pe;return ne(E,function(ge){switch(ge.g){case 1:if(!V)return ge.return(W);for(P={},ot=0,j=T(Object.keys(V)),rt=j.next();!rt.done;rt=j.next())bt=rt.value,Rt=V[bt],typeof Rt!="string"&&Rt.type==="texture"&&W[Rt.stream]!==void 0&&++ot;1<ot&&(Ut.G=!1),Jt=T(Object.keys(V)),rt=Jt.next();case 2:if(rt.done){ge.g=4;break}if($t=rt.value,kt=V[$t],typeof kt=="string")return ae=P,pe=$t,O(ge,_n(Ut,$t,W[kt]),14);if(Tt=W[kt.stream],kt.type==="detection_list"){if(Tt){for(var ke=Tt.getRectList(),h=Tt.getLandmarksList(),y=Tt.getClassificationsList(),G=[],C=0;C<ke.size();++C){var K=ke.get(C);t:{var _=new Ce;for(K=new Fe(K);Mt(K);)switch(K.i){case 13:var M=cn(K.g);Ot(_,1,M);break;case 21:M=cn(K.g),Ot(_,2,M);break;case 29:M=cn(K.g),Ot(_,3,M);break;case 37:M=cn(K.g),Ot(_,4,M);break;case 45:M=cn(K.g),Ot(_,5,M);break;case 48:for(var q=K.g,ct=128,s=0,X=M=0;4>X&&128<=ct;X++)ct=q.h[q.g++],s|=(ct&127)<<7*X;if(128<=ct&&(ct=q.h[q.g++],s|=(ct&127)<<28,M|=(ct&127)>>4),128<=ct)for(X=0;5>X&&128<=ct;X++)ct=q.h[q.g++],M|=(ct&127)<<7*X+3;128>ct?(q=s>>>0,ct=M>>>0,(M=ct&2147483648)&&(q=~q+1>>>0,ct=~ct>>>0,q==0&&(ct=ct+1>>>0)),q=4294967296*ct+(q>>>0),M=M?-q:q):(q.l=!0,M=void 0),Ot(_,6,M);break;default:if(!te(_,K))break t}}_={Z:qt(_,1),$:qt(_,2),height:qt(_,3),width:qt(_,4),rotation:qt(_,5,0),X:Vt(_,6)},M=h.get(C);t:for(K=new St,M=new Fe(M);Mt(M);)switch(M.i){case 10:q=jt(M,new de,ue),fe(K,q,de,void 0);break;default:if(!te(K,M))break t}K=fn(K,de).map(mn),q=y.get(C);t:for(M=new ut,q=new Fe(q);Mt(q);)switch(q.i){case 10:M.addClassification(jt(q,new tt,it));break;default:if(!te(M,q))break t}_={T:_,O:K,M:nn(M)},G.push(_)}ke=G}else ke=[];P[$t]=ke,ge.g=7;break}if(kt.type==="proto_list"){if(Tt){for(ke=Array(Tt.size()),h=0;h<Tt.size();h++)ke[h]=Tt.get(h);Tt.delete()}else ke=[];P[$t]=ke,ge.g=7;break}if(Tt===void 0){ge.g=3;break}if(kt.type==="float_list"){P[$t]=Tt,ge.g=7;break}if(kt.type==="proto"){P[$t]=Tt,ge.g=7;break}if(kt.type!=="texture")throw Error("Unknown output config type: '"+kt.type+"'");return Et=Ut.s[$t],Et||(Et=new yn(Ut.h,Ut.D),Ut.s[$t]=Et),O(ge,He(Et,Tt,Ut.G),13);case 13:Dt=ge.h,P[$t]=Dt;case 7:kt.transform&&P[$t]&&(P[$t]=kt.transform(P[$t])),ge.g=3;break;case 14:ae[pe]=ge.h;case 3:rt=Jt.next(),ge.g=2;break;case 4:return ge.return(P)}})})}function _n(p,W,V){return se(p,function E(){var P=this,ot;return ne(E,function(j){return typeof V=="number"||V instanceof Uint8Array||V instanceof P.h.Uint8BlobList?j.return(V):V instanceof P.h.Texture2dDataOut?(ot=P.s[W],ot||(ot=new yn(P.h,P.D),P.s[W]=ot),j.return(He(ot,V,P.G))):j.return(void 0)})})}function Qn(p,W){for(var V=W.name||"$",E=[].concat(J(W.wants)),P=new p.h.StringList,ot=T(W.wants),j=ot.next();!j.done;j=ot.next())P.push_back(j.value);ot=p.h.PacketListener.implement({onResults:function(rt){for(var bt={},Rt=0;Rt<W.wants.length;++Rt)bt[E[Rt]]=rt.get(Rt);var Ut=p.listeners[V];Ut&&(p.C=Yn(p,bt,W.outs).then(function(Jt){Jt=Ut(Jt);for(var $t=0;$t<W.wants.length;++$t){var kt=bt[E[$t]];typeof kt=="object"&&kt.hasOwnProperty&&kt.hasOwnProperty("delete")&&kt.delete()}Jt&&(p.C=Jt)}))}}),p.i.attachMultiListener(P,ot),P.delete()}i.onResults=function(p,W){this.listeners[W||"$"]=p},Re("Solution",Un),Re("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function wn(p){switch(p===void 0&&(p=0),p){case 1:return"selfie_segmentation_landscape.tflite";default:return"selfie_segmentation.tflite"}}function Cn(p){var W=this;p=p||{},this.g=new Un({locateFile:p.locateFile,files:function(V){return[{simd:!0,url:"selfie_segmentation_solution_simd_wasm_bin.js"},{simd:!1,url:"selfie_segmentation_solution_wasm_bin.js"},{data:!0,url:wn(V.modelSelection)}]},graph:{url:"selfie_segmentation.binarypb"},listeners:[{wants:["segmentation_mask","image_transformed"],outs:{image:{type:"texture",stream:"image_transformed"},segmentationMask:{type:"texture",stream:"segmentation_mask"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelSelection:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelSelection",fieldName:"int_value"},onChange:function(V){return se(W,function E(){var P,ot,j=this,rt;return ne(E,function(bt){return bt.g==1?(P=wn(V),ot="third_party/mediapipe/modules/selfie_segmentation/"+P,O(bt,dn(j.g,P),2)):(rt=bt.h,j.g.overrideFile(ot,rt),bt.return(!0))})})}}}})}i=Cn.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(p){this.g.onResults(p)},i.initialize=function(){return se(this,function p(){var W=this;return ne(p,function(V){return O(V,W.g.initialize(),0)})})},i.reset=function(){this.g.reset()},i.send=function(p){return se(this,function W(){var V=this;return ne(W,function(E){return O(E,V.g.send(p),0)})})},i.setOptions=function(p){this.g.setOptions(p)},Re("SelfieSegmentation",Cn),Re("VERSION","0.1.1632777926")}).call(Gi);const Xi={};(function(){var i;function n(l){var v=0;return function(){return v<l.length?{done:!1,value:l[v++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(l,v,I){return l==Array.prototype||l==Object.prototype||(l[v]=I.value),l};function f(l){l=[typeof globalThis=="object"&&globalThis,l,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var v=0;v<l.length;++v){var I=l[v];if(I&&I.Math==Math)return I}throw Error("Cannot find global object")}var Z=f(this);function x(l,v){if(v)t:{var I=Z;l=l.split(".");for(var Y=0;Y<l.length-1;Y++){var N=l[Y];if(!(N in I))break t;I=I[N]}l=l[l.length-1],Y=I[l],v=v(Y),v!=Y&&v!=null&&r(I,l,{configurable:!0,writable:!0,value:v})}}x("Symbol",function(l){function v(o){if(this instanceof v)throw new TypeError("Symbol is not a constructor");return new I(Y+(o||"")+"_"+N++,o)}function I(o,d){this.g=o,r(this,"description",{configurable:!0,writable:!0,value:d})}if(l)return l;I.prototype.toString=function(){return this.g};var Y="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",N=0;return v}),x("Symbol.iterator",function(l){if(l)return l;l=Symbol("Symbol.iterator");for(var v="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),I=0;I<v.length;I++){var Y=Z[v[I]];typeof Y=="function"&&typeof Y.prototype[l]!="function"&&r(Y.prototype,l,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return l});function H(l){return l={next:l},l[Symbol.iterator]=function(){return this},l}function T(l){var v=typeof Symbol<"u"&&Symbol.iterator&&l[Symbol.iterator];return v?v.call(l):{next:n(l)}}function J(l){if(!(l instanceof Array)){l=T(l);for(var v,I=[];!(v=l.next()).done;)I.push(v.value);l=I}return l}var et=typeof Object.create=="function"?Object.create:function(l){function v(){}return v.prototype=l,new v},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(l,v){if(l.__proto__=v,l.__proto__!==v)throw new TypeError(l+" is not extensible");return l}:null}var at=lt;function dt(l,v){if(l.prototype=et(v.prototype),l.prototype.constructor=l,at)at(l,v);else for(var I in v)if(I!="prototype")if(Object.defineProperties){var Y=Object.getOwnPropertyDescriptor(v,I);Y&&Object.defineProperty(l,I,Y)}else l[I]=v[I];l.ra=v.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function Nt(l){if(l.l)throw new TypeError("Generator is already running");l.l=!0}Bt.prototype.s=function(l){this.h=l};function ee(l,v){l.j={fa:v,ga:!0},l.g=l.o||l.u}Bt.prototype.return=function(l){this.j={return:l},this.g=this.u};function O(l,v,I){return l.g=I,{value:v}}function $e(l){this.g=new Bt,this.h=l}function je(l,v){Nt(l.g);var I=l.g.i;return I?We(l,"return"in I?I.return:function(Y){return{value:Y,done:!0}},v,l.g.return):(l.g.return(v),zt(l))}function We(l,v,I,Y){try{var N=v.call(l.g.i,I);if(!(N instanceof Object))throw new TypeError("Iterator result "+N+" is not an object");if(!N.done)return l.g.l=!1,N;var o=N.value}catch(d){return l.g.i=null,ee(l.g,d),zt(l)}return l.g.i=null,Y.call(l.g,o),zt(l)}function zt(l){for(;l.g.g;)try{var v=l.h(l.g);if(v)return l.g.l=!1,{value:v.value,done:!1}}catch(I){l.g.h=void 0,ee(l.g,I)}if(l.g.l=!1,l.g.j){if(v=l.g.j,l.g.j=null,v.ga)throw v.fa;return{value:v.return,done:!0}}return{value:void 0,done:!0}}function Jn(l){this.next=function(v){return Nt(l.g),l.g.i?v=We(l,l.g.i.next,v,l.g.s):(l.g.s(v),v=zt(l)),v},this.throw=function(v){return Nt(l.g),l.g.i?v=We(l,l.g.i.throw,v,l.g.s):(ee(l.g,v),v=zt(l)),v},this.return=function(v){return je(l,v)},this[Symbol.iterator]=function(){return this}}function ne(l){function v(Y){return l.next(Y)}function I(Y){return l.throw(Y)}return new Promise(function(Y,N){function o(d){d.done?Y(d.value):Promise.resolve(d.value).then(v,I).then(o,N)}o(l.next())})}function Zt(l){return ne(new Jn(new $e(l)))}x("Promise",function(l){function v(d){this.h=0,this.i=void 0,this.g=[],this.s=!1;var g=this.j();try{d(g.resolve,g.reject)}catch(e){g.reject(e)}}function I(){this.g=null}function Y(d){return d instanceof v?d:new v(function(g){g(d)})}if(l)return l;I.prototype.h=function(d){if(this.g==null){this.g=[];var g=this;this.i(function(){g.l()})}this.g.push(d)};var N=Z.setTimeout;I.prototype.i=function(d){N(d,0)},I.prototype.l=function(){for(;this.g&&this.g.length;){var d=this.g;this.g=[];for(var g=0;g<d.length;++g){var e=d[g];d[g]=null;try{e()}catch(u){this.j(u)}}}this.g=null},I.prototype.j=function(d){this.i(function(){throw d})},v.prototype.j=function(){function d(u){return function(m){e||(e=!0,u.call(g,m))}}var g=this,e=!1;return{resolve:d(this.D),reject:d(this.l)}},v.prototype.D=function(d){if(d===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(d instanceof v)this.H(d);else{t:switch(typeof d){case"object":var g=d!=null;break t;case"function":g=!0;break t;default:g=!1}g?this.A(d):this.o(d)}},v.prototype.A=function(d){var g=void 0;try{g=d.then}catch(e){this.l(e);return}typeof g=="function"?this.I(g,d):this.o(d)},v.prototype.l=function(d){this.u(2,d)},v.prototype.o=function(d){this.u(1,d)},v.prototype.u=function(d,g){if(this.h!=0)throw Error("Cannot settle("+d+", "+g+"): Promise already settled in state"+this.h);this.h=d,this.i=g,this.h===2&&this.G(),this.B()},v.prototype.G=function(){var d=this;N(function(){if(d.C()){var g=Z.console;typeof g<"u"&&g.error(d.i)}},1)},v.prototype.C=function(){if(this.s)return!1;var d=Z.CustomEvent,g=Z.Event,e=Z.dispatchEvent;return typeof e>"u"?!0:(typeof d=="function"?d=new d("unhandledrejection",{cancelable:!0}):typeof g=="function"?d=new g("unhandledrejection",{cancelable:!0}):(d=Z.document.createEvent("CustomEvent"),d.initCustomEvent("unhandledrejection",!1,!0,d)),d.promise=this,d.reason=this.i,e(d))},v.prototype.B=function(){if(this.g!=null){for(var d=0;d<this.g.length;++d)o.h(this.g[d]);this.g=null}};var o=new I;return v.prototype.H=function(d){var g=this.j();d.M(g.resolve,g.reject)},v.prototype.I=function(d,g){var e=this.j();try{d.call(g,e.resolve,e.reject)}catch(u){e.reject(u)}},v.prototype.then=function(d,g){function e(c,a){return typeof c=="function"?function(b){try{u(c(b))}catch(S){m(S)}}:a}var u,m,t=new v(function(c,a){u=c,m=a});return this.M(e(d,u),e(g,m)),t},v.prototype.catch=function(d){return this.then(void 0,d)},v.prototype.M=function(d,g){function e(){switch(u.h){case 1:d(u.i);break;case 2:g(u.i);break;default:throw Error("Unexpected state: "+u.h)}}var u=this;this.g==null?o.h(e):this.g.push(e),this.s=!0},v.resolve=Y,v.reject=function(d){return new v(function(g,e){e(d)})},v.race=function(d){return new v(function(g,e){for(var u=T(d),m=u.next();!m.done;m=u.next())Y(m.value).M(g,e)})},v.all=function(d){var g=T(d),e=g.next();return e.done?Y([]):new v(function(u,m){function t(b){return function(S){c[b]=S,a--,a==0&&u(c)}}var c=[],a=0;do c.push(void 0),a++,Y(e.value).M(t(c.length-1),m),e=g.next();while(!e.done)})},v});function qe(l,v){l instanceof String&&(l+="");var I=0,Y=!1,N={next:function(){if(!Y&&I<l.length){var o=I++;return{value:v(o,l[o]),done:!1}}return Y=!0,{done:!0,value:void 0}}};return N[Symbol.iterator]=function(){return N},N}var zn=typeof Object.assign=="function"?Object.assign:function(l,v){for(var I=1;I<arguments.length;I++){var Y=arguments[I];if(Y)for(var N in Y)Object.prototype.hasOwnProperty.call(Y,N)&&(l[N]=Y[N])}return l};x("Object.assign",function(l){return l||zn}),x("Object.is",function(l){return l||function(v,I){return v===I?v!==0||1/v===1/I:v!==v&&I!==I}}),x("Array.prototype.includes",function(l){return l||function(v,I){var Y=this;Y instanceof String&&(Y=String(Y));var N=Y.length;for(I=I||0,0>I&&(I=Math.max(I+N,0));I<N;I++){var o=Y[I];if(o===v||Object.is(o,v))return!0}return!1}}),x("String.prototype.includes",function(l){return l||function(v,I){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(v instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(v,I||0)!==-1}}),x("Array.prototype.keys",function(l){return l||function(){return qe(this,function(v){return v})}});var Re=this||self;function Ct(l,v){l=l.split(".");var I=Re;l[0]in I||typeof I.execScript>"u"||I.execScript("var "+l[0]);for(var Y;l.length&&(Y=l.shift());)l.length||v===void 0?I[Y]&&I[Y]!==Object.prototype[Y]?I=I[Y]:I=I[Y]={}:I[Y]=v}function Te(){throw Error("Invalid UTF8")}function ln(l,v){return v=String.fromCharCode.apply(null,v),l==null?v:l+v}var Xn,Hn=typeof TextDecoder<"u",In,kn=typeof TextEncoder<"u",hn={},bn=null;function En(l){var v;v===void 0&&(v=0),Ae(),v=hn[v];for(var I=Array(Math.floor(l.length/3)),Y=v[64]||"",N=0,o=0;N<l.length-2;N+=3){var d=l[N],g=l[N+1],e=l[N+2],u=v[d>>2];d=v[(d&3)<<4|g>>4],g=v[(g&15)<<2|e>>6],e=v[e&63],I[o++]=u+d+g+e}switch(u=0,e=Y,l.length-N){case 2:u=l[N+1],e=v[(u&15)<<2]||Y;case 1:l=l[N],I[o]=v[l>>2]+v[(l&3)<<4|u>>4]+e+Y}return I.join("")}function Fn(l){var v=l.length,I=3*v/4;I%3?I=Math.floor(I):"=.".indexOf(l[v-1])!=-1&&(I="=.".indexOf(l[v-2])!=-1?I-2:I-1);var Y=new Uint8Array(I),N=0;return Pe(l,function(o){Y[N++]=o}),N!==I?Y.subarray(0,N):Y}function Pe(l,v){function I(e){for(;Y<l.length;){var u=l.charAt(Y++),m=bn[u];if(m!=null)return m;if(!/^[\s\xa0]*$/.test(u))throw Error("Unknown base64 encoding at char: "+u)}return e}Ae();for(var Y=0;;){var N=I(-1),o=I(0),d=I(64),g=I(64);if(g===64&&N===-1)break;v(N<<2|o>>4),d!=64&&(v(o<<4&240|d>>2),g!=64&&v(d<<6&192|g))}}function Ae(){if(!bn){bn={};for(var l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),v=["+/=","+/","-_=","-_.","-_"],I=0;5>I;I++){var Y=l.concat(v[I].split(""));hn[I]=Y;for(var N=0;N<Y.length;N++){var o=Y[N];bn[o]===void 0&&(bn[o]=N)}}}}var xn=typeof Uint8Array=="function";function Wn(l){return xn&&l!=null&&l instanceof Uint8Array}var he;function Se(l){if(this.L=l,l!==null&&l.length===0)throw Error("ByteString should be constructed with non-empty values")}var Oe=typeof Uint8Array.prototype.slice=="function",re=0,Ve=0;function cn(l,v){if(l.constructor===Uint8Array)return l;if(l.constructor===ArrayBuffer)return new Uint8Array(l);if(l.constructor===Array)return new Uint8Array(l);if(l.constructor===String)return Fn(l);if(l.constructor===Se)return!v&&(v=l.L)&&v.constructor===Uint8Array?v:(v=l.L,v=v==null||Wn(v)?v:typeof v=="string"?Fn(v):null,(l=l.L=v)?new Uint8Array(l):he||(he=new Uint8Array(0)));if(l instanceof Uint8Array)return new Uint8Array(l.buffer,l.byteOffset,l.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Be(l,v){return Error("Invalid wire type: "+l+" (at position "+v+")")}function Qt(){return Error("Failed to read varint, encoding is invalid.")}function Ze(l,v){v=v===void 0?{}:v,v=v.v===void 0?!1:v.v,this.h=null,this.g=this.i=this.j=0,this.v=v,l&&Fe(this,l)}function Fe(l,v){l.h=cn(v,l.v),l.j=0,l.i=l.h.length,l.g=l.j}Ze.prototype.reset=function(){this.g=this.j};function Mt(l){if(l.g>l.i)throw Error("Tried to read past the end of the data "+l.g+" > "+l.i)}function Ie(l){var v=l.h,I=v[l.g],Y=I&127;if(128>I)return l.g+=1,Mt(l),Y;if(I=v[l.g+1],Y|=(I&127)<<7,128>I)return l.g+=2,Mt(l),Y;if(I=v[l.g+2],Y|=(I&127)<<14,128>I)return l.g+=3,Mt(l),Y;if(I=v[l.g+3],Y|=(I&127)<<21,128>I)return l.g+=4,Mt(l),Y;if(I=v[l.g+4],l.g+=5,Y|=(I&15)<<28,128>I)return Mt(l),Y;if(128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++])throw Qt();return Mt(l),Y}var jt=[];function ye(){this.g=[]}ye.prototype.length=function(){return this.g.length},ye.prototype.end=function(){var l=this.g;return this.g=[],l};function Ye(l,v){for(;127<v;)l.g.push(v&127|128),v>>>=7;l.g.push(v)}function tn(l){var v={},I=v.W===void 0?!1:v.W;this.l={v:v.v===void 0?!1:v.v},this.W=I,v=this.l,jt.length?(I=jt.pop(),v&&(I.v=v.v),l&&Fe(I,l),l=I):l=new Ze(l,v),this.g=l,this.j=this.g.g,this.h=this.i=-1}tn.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};function Xe(l){var v=l.g;if(v.g==v.i)return!1;l.j=l.g.g;var I=Ie(l.g)>>>0;if(v=I>>>3,I&=7,!(0<=I&&5>=I))throw Be(I,l.j);if(1>v)throw Error("Invalid field number: "+v+" (at position "+l.j+")");return l.i=v,l.h=I,!0}function Pt(l){switch(l.h){case 0:if(l.h!=0)Pt(l);else t:{l=l.g;for(var v=l.g,I=v+10;v<I;)if((l.h[v++]&128)===0){l.g=v,Mt(l);break t}throw Qt()}break;case 1:l=l.g,l.g+=8,Mt(l);break;case 2:l.h!=2?Pt(l):(v=Ie(l.g)>>>0,l=l.g,l.g+=v,Mt(l));break;case 5:l=l.g,l.g+=4,Mt(l);break;case 3:v=l.i;do{if(!Xe(l))throw Error("Unmatched start-group tag: stream EOF");if(l.h==4){if(l.i!=v)throw Error("Unmatched end-group tag");break}Pt(l)}while(1);break;default:throw Be(l.h,l.j)}}var ze=[];function _e(){this.i=[],this.h=0,this.g=new ye}function xe(l,v){v.length!==0&&(l.i.push(v),l.h+=v.length)}function Vn(l,v){if(v=v.ca){xe(l,l.g.end());for(var I=0;I<v.length;I++)xe(l,v[I])}}var un=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Qe(l,v){Object.isFrozen(l)||(un?l[un]|=v:l.N!==void 0?l.N|=v:Object.defineProperties(l,{N:{value:v,configurable:!0,writable:!0,enumerable:!1}}))}function an(l){var v;return un?v=l[un]:v=l.N,v==null?0:v}function ve(l){return Qe(l,1),l}function we(l){return Array.isArray(l)?!!(an(l)&2):!1}function Ge(l){if(!Array.isArray(l))throw Error("cannot mark non-array as immutable");Qe(l,2)}function ie(l){return l!==null&&typeof l=="object"&&!Array.isArray(l)&&l.constructor===Object}var De=Object.freeze(ve([]));function qt(l){if(we(l.m))throw Error("Cannot mutate an immutable Message")}var Ot=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function fn(l){return{value:l,configurable:!1,writable:!1,enumerable:!1}}function fe(l,v,I){return v===-1?null:v>=l.i?l.g?l.g[v]:void 0:(I===void 0?0:I)&&l.g&&(I=l.g[v],I!=null)?I:l.m[v+l.h]}function Ft(l,v,I,Y){Y=Y===void 0?!1:Y,qt(l),v<l.i&&!Y?l.m[v+l.h]=I:(l.g||(l.g=l.m[l.i+l.h]={}))[v]=I}function Vt(l,v,I,Y){I=I===void 0?!0:I,Y=Y===void 0?!1:Y;var N=fe(l,v,Y);return N==null&&(N=De),we(l.m)?I&&(Ge(N),Object.freeze(N)):(N===De||we(N))&&(N=ve(N.slice()),Ft(l,v,N,Y)),N}function oe(l,v,I){return l=fe(l,v),l=l==null?l:+l,l==null?I===void 0?0:I:l}function Le(l,v,I,Y){l.j||(l.j={});var N=we(l.m),o=l.j[I];if(!o){Y=Vt(l,I,!0,Y===void 0?!1:Y),o=[],N=N||we(Y);for(var d=0;d<Y.length;d++)o[d]=new v(Y[d]),N&&Ge(o[d].m);N&&(Ge(o),Object.freeze(o)),l.j[I]=o}return o}function te(l,v,I,Y,N){var o=o===void 0?!1:o;return qt(l),o=Le(l,I,v,o),I=Y||new I,l=Vt(l,v),N!=null?(o.splice(N,0,I),l.splice(N,0,I.m)):(o.push(I),l.push(I.m)),I}function se(l,v){return l=fe(l,v),l==null?0:l}function tt(l,v){return l=fe(l,v),l==null?"":l}function it(l){switch(typeof l){case"number":return isFinite(l)?l:String(l);case"object":if(l&&!Array.isArray(l)){if(Wn(l))return En(l);if(l instanceof Se){var v=l.L;return v=v==null||typeof v=="string"?v:xn&&v instanceof Uint8Array?En(v):null,(l.L=v)||""}}}return l}function ut(l){var v=ue;return v=v===void 0?St:v,de(l,v)}function _t(l,v){if(l!=null){if(Array.isArray(l))l=de(l,v);else if(ie(l)){var I={},Y;for(Y in l)I[Y]=_t(l[Y],v);l=I}else l=v(l);return l}}function de(l,v){for(var I=l.slice(),Y=0;Y<I.length;Y++)I[Y]=_t(I[Y],v);return Array.isArray(l)&&an(l)&1&&ve(I),I}function ue(l){return l&&typeof l=="object"&&l.toJSON?l.toJSON():(l=it(l),Array.isArray(l)?ut(l):l)}function St(l){return Wn(l)?new Uint8Array(l):l}function me(l,v,I){l||(l=Ce),Ce=null;var Y=this.constructor.h;l||(l=Y?[Y]:[]),this.h=(Y?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=l;t:{if(Y=this.m.length,l=Y-1,Y&&(Y=this.m[l],ie(Y))){this.i=l-this.h,this.g=Y;break t}v!==void 0&&-1<v?(this.i=Math.max(v,l+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE}if(I)for(v=0;v<I.length;v++)if(l=I[v],l<this.i)l+=this.h,(Y=this.m[l])?Array.isArray(Y)&&ve(Y):this.m[l]=De;else{Y=this.g||(this.g=this.m[this.i+this.h]={});var N=Y[l];N?Array.isArray(N)&&ve(N):Y[l]=De}}me.prototype.toJSON=function(){return ut(this.m)},me.prototype.toString=function(){return this.m.toString()};var Ce;function en(){me.apply(this,arguments)}if(dt(en,me),Ot){var nn={};Object.defineProperties(en,(nn[Symbol.hasInstance]=fn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),nn))}function mn(l,v,I){if(I){var Y={},N;for(N in I){var o=I[N],d=o.ja;d||(Y.F=o.pa||o.ha.P,o.ba?(Y.U=Sn(o.ba),d=function(g){return function(e,u,m){return g.F(e,u,m,g.U)}}(Y)):o.da?(Y.T=Ke(o.X.g,o.da),d=function(g){return function(e,u,m){return g.F(e,u,m,g.T)}}(Y)):d=Y.F,o.ja=d),d(v,l,o.X),Y={F:Y.F,U:Y.U,T:Y.T}}}Vn(v,l)}var yn=Symbol();function He(l,v,I){return l[yn]||(l[yn]=function(Y,N){return v(Y,N,I)})}function rn(l){var v=l[yn];if(!v){var I=p(l);v=function(Y,N){return W(Y,N,I)},l[yn]=v}return v}function jn(l){var v=l.ba;if(v)return rn(v);if(v=l.oa)return He(l.X.g,v,l.da)}function on(l){var v=jn(l),I=l.X,Y=l.ha.O;return v?function(N,o){return Y(N,o,I,v)}:function(N,o){return Y(N,o,I)}}function Je(l,v,I,Y,N,o){l=l();var d=0;for(l.length&&typeof l[0]!="number"&&(I(v,l[0]),d++);d<l.length;){I=l[d++];for(var g=d+1;g<l.length&&typeof l[g]!="number";)g++;var e=l[d++];switch(g-=d,g){case 0:Y(v,I,e);break;case 1:Y(v,I,e,l[d++]);break;case 2:N(v,I,e,l[d++],l[d++]);break;case 3:g=l[d++];var u=l[d++],m=l[d++];Array.isArray(m)?N(v,I,e,g,u,m):o(v,I,e,g,u,m);break;case 4:o(v,I,e,l[d++],l[d++],l[d++],l[d++]);break;default:throw Error("unexpected number of binary field arguments: "+g)}}return v}var Zn=Symbol();function Sn(l){var v=l[Zn];if(!v){var I=dn(l);v=function(Y,N){return E(Y,N,I)},l[Zn]=v}return v}function Ke(l,v){var I=l[Zn];return I||(I=function(Y,N){return mn(Y,N,v)},l[Zn]=I),I}var Un=Symbol();function sn(l,v){l.push(v)}function vn(l,v,I){l.push(v,I.P)}function Tn(l,v,I,Y,N){var o=Sn(N),d=I.P;l.push(v,function(g,e,u){return d(g,e,u,Y,o)})}function Mn(l,v,I,Y,N,o){var d=Ke(Y,o),g=I.P;l.push(v,function(e,u,m){return g(e,u,m,Y,d)})}function dn(l){var v=l[Un];return v||Je(l,l[Un]=[],sn,vn,Tn,Mn)}var Yn=Symbol();function _n(l,v){l[0]=v}function Qn(l,v,I,Y){var N=I.O;l[v]=Y?function(o,d,g){return N(o,d,g,Y)}:N}function wn(l,v,I,Y,N,o){var d=I.O,g=rn(N);l[v]=function(e,u,m){return d(e,u,m,Y,g,o)}}function Cn(l,v,I,Y,N,o,d){var g=I.O,e=He(Y,N,o);l[v]=function(u,m,t){return g(u,m,t,Y,e,d)}}function p(l){var v=l[Yn];return v||Je(l,l[Yn]={},_n,Qn,wn,Cn)}function W(l,v,I){for(;Xe(v)&&v.h!=4;){var Y=v.i,N=I[Y];if(!N){var o=I[0];o&&(o=o[Y])&&(N=I[Y]=on(o))}if((!N||!N(v,l,Y))&&(N=v,Y=l,o=N.j,Pt(N),!N.W)){var d=N.g.h;N=N.g.g,N=o===N?he||(he=new Uint8Array(0)):Oe?d.slice(o,N):new Uint8Array(d.subarray(o,N)),(o=Y.ca)?o.push(N):Y.ca=[N]}}return l}function V(l,v,I){if(ze.length){var Y=ze.pop();l&&(Fe(Y.g,l),Y.i=-1,Y.h=-1),l=Y}else l=new tn(l);try{return W(new v,l,p(I))}finally{v=l.g,v.h=null,v.j=0,v.i=0,v.g=0,v.v=!1,l.i=-1,l.h=-1,100>ze.length&&ze.push(l)}}function E(l,v,I){for(var Y=I.length,N=Y%2==1,o=N?1:0;o<Y;o+=2)(0,I[o+1])(v,l,I[o]);mn(l,v,N?I[0]:void 0)}function P(l,v){var I=new _e;E(l,I,dn(v)),xe(I,I.g.end()),l=new Uint8Array(I.h),v=I.i;for(var Y=v.length,N=0,o=0;o<Y;o++){var d=v[o];l.set(d,N),N+=d.length}return I.i=[l],l}function ot(l,v){return{O:l,P:v}}var j=ot(function(l,v,I){if(l.h!==5)return!1;l=l.g;var Y=l.h[l.g],N=l.h[l.g+1],o=l.h[l.g+2],d=l.h[l.g+3];return l.g+=4,Mt(l),N=(Y<<0|N<<8|o<<16|d<<24)>>>0,l=2*(N>>31)+1,Y=N>>>23&255,N&=8388607,Ft(v,I,Y==255?N?NaN:1/0*l:Y==0?l*Math.pow(2,-149)*N:l*Math.pow(2,Y-150)*(N+Math.pow(2,23))),!0},function(l,v,I){if(v=fe(v,I),v!=null){Ye(l.g,8*I+5),l=l.g;var Y=v;Y=(I=0>Y?1:0)?-Y:Y,Y===0?0<1/Y?re=Ve=0:(Ve=0,re=2147483648):isNaN(Y)?(Ve=0,re=2147483647):34028234663852886e22<Y?(Ve=0,re=(I<<31|2139095040)>>>0):11754943508222875e-54>Y?(Y=Math.round(Y/Math.pow(2,-149)),Ve=0,re=(I<<31|Y)>>>0):(v=Math.floor(Math.log(Y)/Math.LN2),Y*=Math.pow(2,-v),Y=Math.round(8388608*Y),16777216<=Y&&++v,Ve=0,re=(I<<31|v+127<<23|Y&8388607)>>>0),I=re,l.g.push(I>>>0&255),l.g.push(I>>>8&255),l.g.push(I>>>16&255),l.g.push(I>>>24&255)}}),rt=ot(function(l,v,I){if(l.h!==0)return!1;for(var Y=l.g,N=128,o=0,d=l=0;4>d&&128<=N;d++)N=Y.h[Y.g++],Mt(Y),o|=(N&127)<<7*d;if(128<=N&&(N=Y.h[Y.g++],Mt(Y),o|=(N&127)<<28,l|=(N&127)>>4),128<=N)for(d=0;5>d&&128<=N;d++)N=Y.h[Y.g++],Mt(Y),l|=(N&127)<<7*d+3;if(128>N)Y=o>>>0,N=l>>>0,(l=N&2147483648)&&(Y=~Y+1>>>0,N=~N>>>0,Y==0&&(N=N+1>>>0)),Y=4294967296*N+(Y>>>0);else throw Qt();return Ft(v,I,l?-Y:Y),!0},function(l,v,I){if(v=fe(v,I),v!=null&&v!=null){Ye(l.g,8*I),l=l.g;var Y=v;for(I=0>Y,Y=Math.abs(Y),v=Y>>>0,Y=Math.floor((Y-v)/4294967296),Y>>>=0,I&&(Y=~Y>>>0,v=(~v>>>0)+1,4294967295<v&&(v=0,Y++,4294967295<Y&&(Y=0))),re=v,Ve=Y,I=re,v=Ve;0<v||127<I;)l.g.push(I&127|128),I=(I>>>7|v<<25)>>>0,v>>>=7;l.g.push(I)}}),bt=ot(function(l,v,I){return l.h!==0?!1:(Ft(v,I,Ie(l.g)),!0)},function(l,v,I){if(v=fe(v,I),v!=null&&v!=null)if(Ye(l.g,8*I),l=l.g,I=v,0<=I)Ye(l,I);else{for(v=0;9>v;v++)l.g.push(I&127|128),I>>=7;l.g.push(1)}}),Rt=ot(function(l,v,I){if(l.h!==2)return!1;var Y=Ie(l.g)>>>0;l=l.g;var N=l.g;l.g+=Y,Mt(l),l=l.h;var o;if(Hn)(o=Xn)||(o=Xn=new TextDecoder("utf-8",{fatal:!0})),o=o.decode(l.subarray(N,N+Y));else{Y=N+Y;for(var d=[],g=null,e,u,m;N<Y;)e=l[N++],128>e?d.push(e):224>e?N>=Y?Te():(u=l[N++],194>e||(u&192)!==128?(N--,Te()):d.push((e&31)<<6|u&63)):240>e?N>=Y-1?Te():(u=l[N++],(u&192)!==128||e===224&&160>u||e===237&&160<=u||((o=l[N++])&192)!==128?(N--,Te()):d.push((e&15)<<12|(u&63)<<6|o&63)):244>=e?N>=Y-2?Te():(u=l[N++],(u&192)!==128||(e<<28)+(u-144)>>30!==0||((o=l[N++])&192)!==128||((m=l[N++])&192)!==128?(N--,Te()):(e=(e&7)<<18|(u&63)<<12|(o&63)<<6|m&63,e-=65536,d.push((e>>10&1023)+55296,(e&1023)+56320))):Te(),8192<=d.length&&(g=ln(g,d),d.length=0);o=ln(g,d)}return Ft(v,I,o),!0},function(l,v,I){if(v=fe(v,I),v!=null){var Y=!1;if(Y=Y===void 0?!1:Y,kn){if(Y&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(v))throw Error("Found an unpaired surrogate");v=(In||(In=new TextEncoder)).encode(v)}else{for(var N=0,o=new Uint8Array(3*v.length),d=0;d<v.length;d++){var g=v.charCodeAt(d);if(128>g)o[N++]=g;else{if(2048>g)o[N++]=g>>6|192;else{if(55296<=g&&57343>=g){if(56319>=g&&d<v.length){var e=v.charCodeAt(++d);if(56320<=e&&57343>=e){g=1024*(g-55296)+e-56320+65536,o[N++]=g>>18|240,o[N++]=g>>12&63|128,o[N++]=g>>6&63|128,o[N++]=g&63|128;continue}else d--}if(Y)throw Error("Found an unpaired surrogate");g=65533}o[N++]=g>>12|224,o[N++]=g>>6&63|128}o[N++]=g&63|128}}v=o.subarray(0,N)}Ye(l.g,8*I+2),Ye(l.g,v.length),xe(l,l.g.end()),xe(l,v)}}),Ut=ot(function(l,v,I,Y,N){if(l.h!==2)return!1;v=te(v,I,Y),I=l.g.i,Y=Ie(l.g)>>>0;var o=l.g.g+Y,d=o-I;if(0>=d&&(l.g.i=o,N(v,l),d=o-l.g.g),d)throw Error("Message parsing ended unexpectedly. Expected to read "+(Y+" bytes, instead read "+(Y-d)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return l.g.g=o,l.g.i=I,!0},function(l,v,I,Y,N){if(v=Le(v,Y,I),v!=null)for(Y=0;Y<v.length;Y++){var o=l;Ye(o.g,8*I+2);var d=o.g.end();xe(o,d),d.push(o.h),o=d,N(v[Y],l),d=l;var g=o.pop();for(g=d.h+d.g.length()-g;127<g;)o.push(g&127|128),g>>>=7,d.h++;o.push(g),d.h++}});function Jt(){en.apply(this,arguments)}if(dt(Jt,en),Ot){var $t={};Object.defineProperties(Jt,($t[Symbol.hasInstance]=fn(Object[Symbol.hasInstance]),$t))}function kt(l){Jt.call(this,l)}dt(kt,Jt);function Tt(){return[1,bt,2,j,3,Rt,4,Rt]}function Et(l){Jt.call(this,l,-1,ae)}dt(Et,Jt),Et.prototype.addClassification=function(l,v){return te(this,1,kt,l,v),this};function Dt(){return[1,Ut,kt,Tt]}var ae=[1];function pe(l){Jt.call(this,l)}dt(pe,Jt);function ge(){return[1,j,2,j,3,j,4,j,5,j]}function ke(l){Jt.call(this,l,-1,y)}dt(ke,Jt);function h(){return[1,Ut,pe,ge]}var y=[1];function G(l){Jt.call(this,l)}dt(G,Jt);function C(){return[1,j,2,j,3,j,4,j,5,j,6,rt]}function K(l,v,I){if(I=l.createShader(I===0?l.VERTEX_SHADER:l.FRAGMENT_SHADER),l.shaderSource(I,v),l.compileShader(I),!l.getShaderParameter(I,l.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
20
20
|
|
|
21
|
-
`+l.getShaderInfoLog(I));return I}function _(l){return
|
|
21
|
+
`+l.getShaderInfoLog(I));return I}function _(l){return Le(l,kt,1).map(function(v){return{index:se(v,1),score:oe(v,2),label:fe(v,3)!=null?tt(v,3):void 0,displayName:fe(v,4)!=null?tt(v,4):void 0}})}function M(l){return{x:oe(l,1),y:oe(l,2),z:oe(l,3),visibility:fe(l,4)!=null?oe(l,4):void 0}}function q(l){return l.map(function(v){return Le(V(v,ke,h),pe,1).map(M)})}function ct(l,v){this.h=l,this.g=v,this.l=0}function s(l,v,I){return X(l,v),typeof l.g.canvas.transferToImageBitmap=="function"?Promise.resolve(l.g.canvas.transferToImageBitmap()):I?Promise.resolve(l.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(l.g.canvas):(l.i===void 0&&(l.i=document.createElement("canvas")),new Promise(function(Y){l.i.height=l.g.canvas.height,l.i.width=l.g.canvas.width,l.i.getContext("2d",{}).drawImage(l.g.canvas,0,0,l.g.canvas.width,l.g.canvas.height),Y(l.i)}))}function X(l,v){var I=l.g;if(l.o===void 0){var Y=K(I,`
|
|
22
22
|
attribute vec2 aVertex;
|
|
23
23
|
attribute vec2 aTex;
|
|
24
24
|
varying vec2 vTex;
|
|
25
25
|
void main(void) {
|
|
26
26
|
gl_Position = vec4(aVertex, 0.0, 1.0);
|
|
27
27
|
vTex = aTex;
|
|
28
|
-
}`,0),N=
|
|
28
|
+
}`,0),N=K(I,`
|
|
29
29
|
precision mediump float;
|
|
30
30
|
varying vec2 vTex;
|
|
31
31
|
uniform sampler2D sampler0;
|
|
32
32
|
void main(){
|
|
33
33
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
34
|
-
}`,1),o=I.createProgram();if(I.attachShader(o,
|
|
34
|
+
}`,1),o=I.createProgram();if(I.attachShader(o,Y),I.attachShader(o,N),I.linkProgram(o),!I.getProgramParameter(o,I.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
35
35
|
|
|
36
|
-
`+I.getProgramInfoLog(o));L=l.o=o,I.useProgram(L),N=I.getUniformLocation(L,"sampler0"),l.j={K:I.getAttribLocation(L,"aVertex"),J:I.getAttribLocation(L,"aTex"),qa:N},l.u=I.createBuffer(),I.bindBuffer(I.ARRAY_BUFFER,l.u),I.enableVertexAttribArray(l.j.K),I.vertexAttribPointer(l.j.K,2,I.FLOAT,!1,0,0),I.bufferData(I.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),I.STATIC_DRAW),I.bindBuffer(I.ARRAY_BUFFER,null),l.s=I.createBuffer(),I.bindBuffer(I.ARRAY_BUFFER,l.s),I.enableVertexAttribArray(l.j.J),I.vertexAttribPointer(l.j.J,2,I.FLOAT,!1,0,0),I.bufferData(I.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),I.STATIC_DRAW),I.bindBuffer(I.ARRAY_BUFFER,null),I.uniform1i(N,0)}L=l.j,I.useProgram(l.o),I.canvas.width=v.width,I.canvas.height=v.height,I.viewport(0,0,v.width,v.height),I.activeTexture(I.TEXTURE0),l.h.bindTexture2d(v.glName),I.enableVertexAttribArray(L.K),I.bindBuffer(I.ARRAY_BUFFER,l.u),I.vertexAttribPointer(L.K,2,I.FLOAT,!1,0,0),I.enableVertexAttribArray(L.J),I.bindBuffer(I.ARRAY_BUFFER,l.s),I.vertexAttribPointer(L.J,2,I.FLOAT,!1,0,0),I.bindFramebuffer(I.DRAW_FRAMEBUFFER?I.DRAW_FRAMEBUFFER:I.FRAMEBUFFER,null),I.clearColor(0,0,0,0),I.clear(I.COLOR_BUFFER_BIT),I.colorMask(!0,!0,!0,!0),I.drawArrays(I.TRIANGLE_FAN,0,4),I.disableVertexAttribArray(L.K),I.disableVertexAttribArray(L.J),I.bindBuffer(I.ARRAY_BUFFER,null),l.h.bindTexture2d(0)}function R(l){this.g=l}var Y=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function k(l,v){return v+l}function A(l,v){window[l]=v}function K(l){var v=document.createElement("script");return v.setAttribute("src",l),v.setAttribute("crossorigin","anonymous"),new Promise(function(I){v.addEventListener("load",function(){I()},!1),v.addEventListener("error",function(){I()},!1),document.body.appendChild(v)})}function nt(){return gt(function(l){switch(l.g){case 1:return l.o=2,P(l,WebAssembly.instantiate(Y),4);case 4:l.g=3,l.o=0;break;case 2:return l.o=0,l.j=null,l.return(!1);case 3:return l.return(!0)}})}function $(l){if(this.g=l,this.listeners={},this.j={},this.H={},this.o={},this.u={},this.I=this.s=this.$=!0,this.D=Promise.resolve(),this.Z="",this.C={},this.locateFile=l&&l.locateFile||k,typeof window=="object")var v=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")v=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.aa=v,l.options){v=T(Object.keys(l.options));for(var I=v.next();!I.done;I=v.next()){I=I.value;var L=l.options[I].default;L!==void 0&&(this.j[I]=typeof L=="function"?L():L)}}}i=$.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function yt(l){var v,I,L,N,o,d,g,e,u,m,t;return gt(function(c){switch(c.g){case 1:return l.$?(v=l.g.files===void 0?[]:typeof l.g.files=="function"?l.g.files(l.j):l.g.files,P(c,nt(),2)):c.return();case 2:if(I=c.h,typeof window=="object")return A("createMediapipeSolutionsWasm",{locateFile:l.locateFile}),A("createMediapipeSolutionsPackedAssets",{locateFile:l.locateFile}),d=v.filter(function(a){return a.data!==void 0}),g=v.filter(function(a){return a.data===void 0}),e=Promise.all(d.map(function(a){var b=It(l,a.url);if(a.path!==void 0){var S=a.path;b=b.then(function(w){return l.overrideFile(S,w),Promise.resolve(w)})}return b})),u=Promise.all(g.map(function(a){return a.simd===void 0||a.simd&&I||!a.simd&&!I?K(l.locateFile(a.url,l.aa)):Promise.resolve()})).then(function(){var a,b,S;return gt(function(w){if(w.g==1)return a=window.createMediapipeSolutionsWasm,b=window.createMediapipeSolutionsPackedAssets,S=l,P(w,a(b),2);S.h=w.h,w.g=0})}),m=function(){return gt(function(a){return l.g.graph&&l.g.graph.url?a=P(a,It(l,l.g.graph.url),0):(a.g=0,a=void 0),a})}(),P(c,Promise.all([u,e,m]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return L=v.filter(function(a){return a.simd===void 0||a.simd&&I||!a.simd&&!I}).map(function(a){return l.locateFile(a.url,l.aa)}),importScripts.apply(null,J(L)),N=l,P(c,createMediapipeSolutionsWasm(Module),6);case 6:N.h=c.h,l.l=new OffscreenCanvas(1,1),l.h.canvas=l.l,o=l.h.GL.createContext(l.l,{antialias:!1,alpha:!1,na:typeof WebGL2RenderingContext<"u"?2:1}),l.h.GL.makeContextCurrent(o),c.g=4;break;case 7:if(l.l=document.createElement("canvas"),t=l.l.getContext("webgl2",{}),!t&&(t=l.l.getContext("webgl",{}),!t))return alert("Failed to create WebGL canvas context when passing video frame."),c.return();l.G=t,l.h.canvas=l.l,l.h.createContext(l.l,!0,!0,{});case 4:l.i=new l.h.SolutionWasm,l.$=!1,c.g=0}})}function Xt(l){var v,I,L,N,o,d,g,e;return gt(function(u){if(u.g==1){if(l.g.graph&&l.g.graph.url&&l.Z===l.g.graph.url)return u.return();if(l.s=!0,!l.g.graph||!l.g.graph.url){u.g=2;return}return l.Z=l.g.graph.url,P(u,It(l,l.g.graph.url),3)}for(u.g!=2&&(v=u.h,l.i.loadGraph(v)),I=T(Object.keys(l.C)),L=I.next();!L.done;L=I.next())N=L.value,l.i.overrideFile(N,l.C[N]);if(l.C={},l.g.listeners)for(o=T(l.g.listeners),d=o.next();!d.done;d=o.next())g=d.value,xt(l,g);e=l.j,l.j={},l.setOptions(e),u.g=0})}i.reset=function(){var l=this;return gt(function(v){l.i&&(l.i.reset(),l.o={},l.u={}),v.g=0})},i.setOptions=function(l,v){var I=this;if(v=v||this.g.options){for(var L=[],N=[],o={},d=T(Object.keys(l)),g=d.next();!g.done;o={R:o.R,S:o.S},g=d.next()){var e=g.value;e in this.j&&this.j[e]===l[e]||(this.j[e]=l[e],g=v[e],g!==void 0&&(g.onChange&&(o.R=g.onChange,o.S=l[e],L.push(function(u){return function(){var m;return gt(function(t){if(t.g==1)return P(t,u.R(u.S),2);m=t.h,m===!0&&(I.s=!0),t.g=0})}}(o))),g.graphOptionXref&&(e={valueNumber:g.type===1?l[e]:0,valueBoolean:g.type===0?l[e]:!1,valueString:g.type===2?l[e]:""},g=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),g.graphOptionXref),e),N.push(g))))}(L.length!==0||N.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(N),this.A=(this.A===void 0?[]:this.A).concat(L))}};function Bt(l){var v,I,L,N,o,d,g;return gt(function(e){switch(e.g){case 1:if(!l.s)return e.return();if(!l.A){e.g=2;break}v=T(l.A),I=v.next();case 3:if(I.done){e.g=5;break}return L=I.value,P(e,L(),4);case 4:I=v.next(),e.g=3;break;case 5:l.A=void 0;case 2:if(l.B){for(N=new l.h.GraphOptionChangeRequestList,o=T(l.B),d=o.next();!d.done;d=o.next())g=d.value,N.push_back(g);l.i.changeOptions(N),N.delete(),l.B=void 0}l.s=!1,e.g=0}})}i.initialize=function(){var l=this;return gt(function(v){return v.g==1?P(v,yt(l),2):v.g!=3?P(v,Xt(l),3):P(v,Bt(l),0)})};function It(l,v){var I,L;return gt(function(N){return v in l.H?N.return(l.H[v]):(I=l.locateFile(v,""),L=fetch(I).then(function(o){return o.arrayBuffer()}),l.H[v]=L,N.return(L))})}i.overrideFile=function(l,v){this.i?this.i.overrideFile(l,v):this.C[l]=v},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(l,v){var I=this,L,N,o,d,g,e,u,m,t;return gt(function(c){switch(c.g){case 1:return I.g.inputs?(L=1e3*(v==null?performance.now():v),P(c,I.D,2)):c.return();case 2:return P(c,I.initialize(),3);case 3:for(N=new I.h.PacketDataList,o=T(Object.keys(l)),d=o.next();!d.done;d=o.next())if(g=d.value,e=I.g.inputs[g]){t:{var a=l[g];switch(e.type){case"video":var b=I.o[e.stream];if(b||(b=new ct(I.h,I.G),I.o[e.stream]=b),b.l===0&&(b.l=b.h.createTexture()),typeof HTMLVideoElement<"u"&&a instanceof HTMLVideoElement)var S=a.videoWidth,w=a.videoHeight;else typeof HTMLImageElement<"u"&&a instanceof HTMLImageElement?(S=a.naturalWidth,w=a.naturalHeight):(S=a.width,w=a.height);w={glName:b.l,width:S,height:w},S=b.g,S.canvas.width=w.width,S.canvas.height=w.height,S.activeTexture(S.TEXTURE0),b.h.bindTexture2d(b.l),S.texImage2D(S.TEXTURE_2D,0,S.RGBA,S.RGBA,S.UNSIGNED_BYTE,a),b.h.bindTexture2d(0),b=w;break t;case"detections":for(b=I.o[e.stream],b||(b=new R(I.h),I.o[e.stream]=b),b.data||(b.data=new b.g.DetectionListData),b.data.reset(a.length),w=0;w<a.length;++w){S=a[w];var F=b.data,U=F.setBoundingBox,z=w,Q=S.ea,D=new G;if(Ft(D,1,Q.ka),Ft(D,2,Q.la),Ft(D,3,Q.height),Ft(D,4,Q.width),Ft(D,5,Q.rotation),Ft(D,6,Q.ia),Q=O(D,C),U.call(F,z,Q),S.Y)for(F=0;F<S.Y.length;++F){D=S.Y[F];var st=!!D.visibility;U=b.data,z=U.addNormalizedLandmark,Q=w,D=Object.assign(Object.assign({},D),{visibility:st?D.visibility:0}),st=new pe,Ft(st,1,D.x),Ft(st,2,D.y),Ft(st,3,D.z),D.visibility&&Ft(st,4,D.visibility),D=O(st,ge),z.call(U,Q,D)}if(S.V)for(F=0;F<S.V.length;++F)U=b.data,z=U.addClassification,Q=w,D=S.V[F],st=new kt,Ft(st,2,D.score),D.index&&Ft(st,1,D.index),D.label&&Ft(st,3,D.label),D.displayName&&Ft(st,4,D.displayName),D=O(st,Tt),z.call(U,Q,D)}b=b.data;break t;default:b={}}}switch(u=b,m=e.stream,e.type){case"video":N.pushTexture2d(Object.assign(Object.assign({},u),{stream:m,timestamp:L}));break;case"detections":t=u,t.stream=m,t.timestamp=L,N.pushDetectionList(t);break;default:throw Error("Unknown input config type: '"+e.type+"'")}}return I.i.send(N),P(c,I.D,4);case 4:N.delete(),c.g=0}})};function ht(l,v,I){var L,N,o,d,g,e,u,m,t,c,a,b,S,w;return gt(function(F){switch(F.g){case 1:if(!I)return F.return(v);for(L={},N=0,o=T(Object.keys(I)),d=o.next();!d.done;d=o.next())g=d.value,e=I[g],typeof e!="string"&&e.type==="texture"&&v[e.stream]!==void 0&&++N;1<N&&(l.I=!1),u=T(Object.keys(I)),d=u.next();case 2:if(d.done){F.g=4;break}if(m=d.value,t=I[m],typeof t=="string")return S=L,w=m,P(F,Vt(l,m,v[t]),14);if(c=v[t.stream],t.type==="detection_list"){if(c){for(var U=c.getRectList(),z=c.getLandmarksList(),Q=c.getClassificationsList(),D=[],st=0;st<U.size();++st){var ft=W(U.get(st),G,C);ft={ea:{ka:oe(ft,1),la:oe(ft,2),height:oe(ft,3),width:oe(ft,4),rotation:oe(ft,5,0),ia:se(ft,6)},Y:we(W(z.get(st),ke,h),pe,1).map(M),V:_(W(Q.get(st),Et,Dt))},D.push(ft)}U=D}else U=[];L[m]=U,F.g=7;break}if(t.type==="proto_list"){if(c){for(U=Array(c.size()),z=0;z<c.size();z++)U[z]=c.get(z);c.delete()}else U=[];L[m]=U,F.g=7;break}if(c===void 0){F.g=3;break}if(t.type==="float_list"){L[m]=c,F.g=7;break}if(t.type==="proto"){L[m]=c,F.g=7;break}if(t.type!=="texture")throw Error("Unknown output config type: '"+t.type+"'");return a=l.u[m],a||(a=new ct(l.h,l.G),l.u[m]=a),P(F,s(a,c,l.I),13);case 13:b=F.h,L[m]=b;case 7:t.transform&&L[m]&&(L[m]=t.transform(L[m])),F.g=3;break;case 14:S[w]=F.h;case 3:d=u.next(),F.g=2;break;case 4:return F.return(L)}})}function Vt(l,v,I){var L;return gt(function(N){return typeof I=="number"||I instanceof Uint8Array||I instanceof l.h.Uint8BlobList?N.return(I):I instanceof l.h.Texture2dDataOut?(L=l.u[v],L||(L=new ct(l.h,l.G),l.u[v]=L),N.return(s(L,I,l.I))):N.return(void 0)})}function xt(l,v){for(var I=v.name||"$",L=[].concat(J(v.wants)),N=new l.h.StringList,o=T(v.wants),d=o.next();!d.done;d=o.next())N.push_back(d.value);o=l.h.PacketListener.implement({onResults:function(g){for(var e={},u=0;u<v.wants.length;++u)e[L[u]]=g.get(u);var m=l.listeners[I];m&&(l.D=ht(l,e,v.outs).then(function(t){t=m(t);for(var c=0;c<v.wants.length;++c){var a=e[L[c]];typeof a=="object"&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}t&&(l.D=t)}))}}),l.i.attachMultiListener(N,o),N.delete()}i.onResults=function(l,v){this.listeners[v||"$"]=l},Ct("Solution",$),Ct("OptionType",{BOOL:0,NUMBER:1,ma:2,0:"BOOL",1:"NUMBER",2:"STRING"});function Yt(l){return l===void 0&&(l=0),l===1?"hand_landmark_full.tflite":"hand_landmark_lite.tflite"}function Ht(l){var v=this;l=l||{},this.g=new $({locateFile:l.locateFile,files:function(I){return[{url:"hands_solution_packed_assets_loader.js"},{simd:!1,url:"hands_solution_wasm_bin.js"},{simd:!0,url:"hands_solution_simd_wasm_bin.js"},{data:!0,url:Yt(I.modelComplexity)}]},graph:{url:"hands.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:["multi_hand_landmarks","multi_hand_world_landmarks","image_transformed","multi_handedness"],outs:{image:"image_transformed",multiHandLandmarks:{type:"proto_list",stream:"multi_hand_landmarks",transform:q},multiHandWorldLandmarks:{type:"proto_list",stream:"multi_hand_world_landmarks",transform:q},multiHandedness:{type:"proto_list",stream:"multi_handedness",transform:function(I){return I.map(function(L){return _(W(L,Et,Dt))[0]})}}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumHands:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculator",fieldName:"int_value"}},modelComplexity:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(I){var L,N,o;return gt(function(d){return d.g==1?(L=Yt(I),N="third_party/mediapipe/modules/hand_landmark/"+L,P(d,It(v.g,L),2)):(o=d.h,v.g.overrideFile(N,o),d.return(!0))})}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"handlandmarktrackinggpu__palmdetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"handlandmarktrackinggpu__handlandmarkgpu__ThresholdingCalculator",fieldName:"threshold"}}}})}i=Ht.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(l){this.g.onResults(l)},i.initialize=function(){var l=this;return gt(function(v){return P(v,l.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(l){var v=this;return gt(function(I){return P(I,v.g.send(l),0)})},i.setOptions=function(l){this.g.setOptions(l)},Ct("Hands",Ht),Ct("HAND_CONNECTIONS",[[0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]]),Ct("VERSION","0.4.1646424915")}).call(Xi);var Vi={};(function(){var i;function n(e){var u=0;return function(){return u<e.length?{done:!1,value:e[u++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(e,u,m){return e==Array.prototype||e==Object.prototype||(e[u]=m.value),e};function f(e){e=[typeof globalThis=="object"&&globalThis,e,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var u=0;u<e.length;++u){var m=e[u];if(m&&m.Math==Math)return m}throw Error("Cannot find global object")}var Z=f(this);function x(e,u){if(u)t:{var m=Z;e=e.split(".");for(var t=0;t<e.length-1;t++){var c=e[t];if(!(c in m))break t;m=m[c]}e=e[e.length-1],t=m[e],u=u(t),u!=t&&u!=null&&r(m,e,{configurable:!0,writable:!0,value:u})}}x("Symbol",function(e){function u(a){if(this instanceof u)throw new TypeError("Symbol is not a constructor");return new m(t+(a||"")+"_"+c++,a)}function m(a,b){this.g=a,r(this,"description",{configurable:!0,writable:!0,value:b})}if(e)return e;m.prototype.toString=function(){return this.g};var t="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",c=0;return u}),x("Symbol.iterator",function(e){if(e)return e;e=Symbol("Symbol.iterator");for(var u="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),m=0;m<u.length;m++){var t=Z[u[m]];typeof t=="function"&&typeof t.prototype[e]!="function"&&r(t.prototype,e,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return e});function H(e){return e={next:e},e[Symbol.iterator]=function(){return this},e}function T(e){var u=typeof Symbol<"u"&&Symbol.iterator&&e[Symbol.iterator];return u?u.call(e):{next:n(e)}}function J(e){if(!(e instanceof Array)){e=T(e);for(var u,m=[];!(u=e.next()).done;)m.push(u.value);e=m}return e}var et=typeof Object.create=="function"?Object.create:function(e){function u(){}return u.prototype=e,new u},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Lt={a:!0},wt={};try{wt.__proto__=Lt,pt=wt.a;break t}catch{}pt=!1}lt=pt?function(e,u){if(e.__proto__=u,e.__proto__!==u)throw new TypeError(e+" is not extensible");return e}:null}var at=lt;function dt(e,u){if(e.prototype=et(u.prototype),e.prototype.constructor=e,at)at(e,u);else for(var m in u)if(m!="prototype")if(Object.defineProperties){var t=Object.getOwnPropertyDescriptor(u,m);t&&Object.defineProperty(e,m,t)}else e[m]=u[m];e.da=u.prototype}function Kt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Nt(e){if(e.l)throw new TypeError("Generator is already running");e.l=!0}Kt.prototype.o=function(e){this.h=e};function ee(e,u){e.j={U:u,V:!0},e.g=e.m||e.s}Kt.prototype.return=function(e){this.j={return:e},this.g=this.s};function P(e,u,m){return e.g=m,{value:u}}function $e(e){this.g=new Kt,this.h=e}function je(e,u){Nt(e.g);var m=e.g.i;return m?Ve(e,"return"in m?m.return:function(t){return{value:t,done:!0}},u,e.g.return):(e.g.return(u),zt(e))}function Ve(e,u,m,t){try{var c=u.call(e.g.i,m);if(!(c instanceof Object))throw new TypeError("Iterator result "+c+" is not an object");if(!c.done)return e.g.l=!1,c;var a=c.value}catch(b){return e.g.i=null,ee(e.g,b),zt(e)}return e.g.i=null,t.call(e.g,a),zt(e)}function zt(e){for(;e.g.g;)try{var u=e.h(e.g);if(u)return e.g.l=!1,{value:u.value,done:!1}}catch(m){e.g.h=void 0,ee(e.g,m)}if(e.g.l=!1,e.g.j){if(u=e.g.j,e.g.j=null,u.V)throw u.U;return{value:u.return,done:!0}}return{value:void 0,done:!0}}function Jn(e){this.next=function(u){return Nt(e.g),e.g.i?u=Ve(e,e.g.i.next,u,e.g.o):(e.g.o(u),u=zt(e)),u},this.throw=function(u){return Nt(e.g),e.g.i?u=Ve(e,e.g.i.throw,u,e.g.o):(ee(e.g,u),u=zt(e)),u},this.return=function(u){return je(e,u)},this[Symbol.iterator]=function(){return this}}function ne(e){function u(t){return e.next(t)}function m(t){return e.throw(t)}return new Promise(function(t,c){function a(b){b.done?t(b.value):Promise.resolve(b.value).then(u,m).then(a,c)}a(e.next())})}function gt(e){return ne(new Jn(new $e(e)))}x("Promise",function(e){function u(b){this.h=0,this.i=void 0,this.g=[],this.o=!1;var S=this.j();try{b(S.resolve,S.reject)}catch(w){S.reject(w)}}function m(){this.g=null}function t(b){return b instanceof u?b:new u(function(S){S(b)})}if(e)return e;m.prototype.h=function(b){if(this.g==null){this.g=[];var S=this;this.i(function(){S.l()})}this.g.push(b)};var c=Z.setTimeout;m.prototype.i=function(b){c(b,0)},m.prototype.l=function(){for(;this.g&&this.g.length;){var b=this.g;this.g=[];for(var S=0;S<b.length;++S){var w=b[S];b[S]=null;try{w()}catch(F){this.j(F)}}}this.g=null},m.prototype.j=function(b){this.i(function(){throw b})},u.prototype.j=function(){function b(F){return function(U){w||(w=!0,F.call(S,U))}}var S=this,w=!1;return{resolve:b(this.C),reject:b(this.l)}},u.prototype.C=function(b){if(b===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(b instanceof u)this.F(b);else{t:switch(typeof b){case"object":var S=b!=null;break t;case"function":S=!0;break t;default:S=!1}S?this.v(b):this.m(b)}},u.prototype.v=function(b){var S=void 0;try{S=b.then}catch(w){this.l(w);return}typeof S=="function"?this.G(S,b):this.m(b)},u.prototype.l=function(b){this.s(2,b)},u.prototype.m=function(b){this.s(1,b)},u.prototype.s=function(b,S){if(this.h!=0)throw Error("Cannot settle("+b+", "+S+"): Promise already settled in state"+this.h);this.h=b,this.i=S,this.h===2&&this.D(),this.A()},u.prototype.D=function(){var b=this;c(function(){if(b.B()){var S=Z.console;typeof S<"u"&&S.error(b.i)}},1)},u.prototype.B=function(){if(this.o)return!1;var b=Z.CustomEvent,S=Z.Event,w=Z.dispatchEvent;return typeof w>"u"?!0:(typeof b=="function"?b=new b("unhandledrejection",{cancelable:!0}):typeof S=="function"?b=new S("unhandledrejection",{cancelable:!0}):(b=Z.document.createEvent("CustomEvent"),b.initCustomEvent("unhandledrejection",!1,!0,b)),b.promise=this,b.reason=this.i,w(b))},u.prototype.A=function(){if(this.g!=null){for(var b=0;b<this.g.length;++b)a.h(this.g[b]);this.g=null}};var a=new m;return u.prototype.F=function(b){var S=this.j();b.J(S.resolve,S.reject)},u.prototype.G=function(b,S){var w=this.j();try{b.call(S,w.resolve,w.reject)}catch(F){w.reject(F)}},u.prototype.then=function(b,S){function w(Q,D){return typeof Q=="function"?function(st){try{F(Q(st))}catch(ft){U(ft)}}:D}var F,U,z=new u(function(Q,D){F=Q,U=D});return this.J(w(b,F),w(S,U)),z},u.prototype.catch=function(b){return this.then(void 0,b)},u.prototype.J=function(b,S){function w(){switch(F.h){case 1:b(F.i);break;case 2:S(F.i);break;default:throw Error("Unexpected state: "+F.h)}}var F=this;this.g==null?a.h(w):this.g.push(w),this.o=!0},u.resolve=t,u.reject=function(b){return new u(function(S,w){w(b)})},u.race=function(b){return new u(function(S,w){for(var F=T(b),U=F.next();!U.done;U=F.next())t(U.value).J(S,w)})},u.all=function(b){var S=T(b),w=S.next();return w.done?t([]):new u(function(F,U){function z(st){return function(ft){Q[st]=ft,D--,D==0&&F(Q)}}var Q=[],D=0;do Q.push(void 0),D++,t(w.value).J(z(Q.length-1),U),w=S.next();while(!w.done)})},u});function qe(e,u){e instanceof String&&(e+="");var m=0,t=!1,c={next:function(){if(!t&&m<e.length){var a=m++;return{value:u(a,e[a]),done:!1}}return t=!0,{done:!0,value:void 0}}};return c[Symbol.iterator]=function(){return c},c}var zn=typeof Object.assign=="function"?Object.assign:function(e,u){for(var m=1;m<arguments.length;m++){var t=arguments[m];if(t)for(var c in t)Object.prototype.hasOwnProperty.call(t,c)&&(e[c]=t[c])}return e};x("Object.assign",function(e){return e||zn}),x("Object.is",function(e){return e||function(u,m){return u===m?u!==0||1/u===1/m:u!==u&&m!==m}}),x("Array.prototype.includes",function(e){return e||function(u,m){var t=this;t instanceof String&&(t=String(t));var c=t.length;for(m=m||0,0>m&&(m=Math.max(m+c,0));m<c;m++){var a=t[m];if(a===u||Object.is(a,u))return!0}return!1}}),x("String.prototype.includes",function(e){return e||function(u,m){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(u instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(u,m||0)!==-1}}),x("Array.prototype.keys",function(e){return e||function(){return qe(this,function(u){return u})}});var Re=this||self;function Ct(e,u){e=e.split(".");var m=Re;e[0]in m||typeof m.execScript>"u"||m.execScript("var "+e[0]);for(var t;e.length&&(t=e.shift());)e.length||u===void 0?m[t]&&m[t]!==Object.prototype[t]?m=m[t]:m=m[t]={}:m[t]=u}function Te(e){Re.setTimeout(function(){throw e},0)}function ln(e){Te(e)}function Xn(e,u){ln(Error("Invalid wire type: "+e+" (at position "+u+")"))}function Hn(){ln(Error("Failed to read varint, encoding is invalid."))}function In(e,u){return u=String.fromCharCode.apply(null,u),e==null?u:e+u}var kn,hn=typeof TextDecoder<"u",bn,En=typeof TextEncoder<"u";function Fn(e){if(En)e=(bn||(bn=new TextEncoder)).encode(e);else{var u=void 0;u=u===void 0?!1:u;for(var m=0,t=new Uint8Array(3*e.length),c=0;c<e.length;c++){var a=e.charCodeAt(c);if(128>a)t[m++]=a;else{if(2048>a)t[m++]=a>>6|192;else{if(55296<=a&&57343>=a){if(56319>=a&&c<e.length){var b=e.charCodeAt(++c);if(56320<=b&&57343>=b){a=1024*(a-55296)+b-56320+65536,t[m++]=a>>18|240,t[m++]=a>>12&63|128,t[m++]=a>>6&63|128,t[m++]=a&63|128;continue}else c--}if(u)throw Error("Found an unpaired surrogate");a=65533}t[m++]=a>>12|224,t[m++]=a>>6&63|128}t[m++]=a&63|128}}e=t.subarray(0,m)}return e}var Oe={},Ae=null;function xn(e){var u;u===void 0&&(u=0),Se(),u=Oe[u];for(var m=Array(Math.floor(e.length/3)),t=u[64]||"",c=0,a=0;c<e.length-2;c+=3){var b=e[c],S=e[c+1],w=e[c+2],F=u[b>>2];b=u[(b&3)<<4|S>>4],S=u[(S&15)<<2|w>>6],w=u[w&63],m[a++]=F+b+S+w}switch(F=0,w=t,e.length-c){case 2:F=e[c+1],w=u[(F&15)<<2]||t;case 1:e=e[c],m[a]=u[e>>2]+u[(e&3)<<4|F>>4]+w+t}return m.join("")}function Vn(e){var u=e.length,m=3*u/4;m%3?m=Math.floor(m):"=.".indexOf(e[u-1])!=-1&&(m="=.".indexOf(e[u-2])!=-1?m-2:m-1);var t=new Uint8Array(m),c=0;return he(e,function(a){t[c++]=a}),t.subarray(0,c)}function he(e,u){function m(w){for(;t<e.length;){var F=e.charAt(t++),U=Ae[F];if(U!=null)return U;if(!/^[\s\xa0]*$/.test(F))throw Error("Unknown base64 encoding at char: "+F)}return w}Se();for(var t=0;;){var c=m(-1),a=m(0),b=m(64),S=m(64);if(S===64&&c===-1)break;u(c<<2|a>>4),b!=64&&(u(a<<4&240|b>>2),S!=64&&u(b<<6&192|S))}}function Se(){if(!Ae){Ae={};for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),u=["+/=","+/","-_=","-_.","-_"],m=0;5>m;m++){var t=e.concat(u[m].split(""));Oe[m]=t;for(var c=0;c<t.length;c++){var a=t[c];Ae[a]===void 0&&(Ae[a]=c)}}}}var Pe=typeof Uint8Array=="function",re;function We(e){if(this.g=e,e!==null&&e.length===0)throw Error("ByteString should be constructed with non-empty values")}We.prototype.toJSON=function(){if(this.g==null)var e="";else e=this.g,e=this.g=e==null||typeof e=="string"?e:Pe&&e instanceof Uint8Array?xn(e):null;return e};var cn=typeof Uint8Array.prototype.slice=="function";function Ke(e,u,m){return u===m?re||(re=new Uint8Array(0)):cn?e.slice(u,m):new Uint8Array(e.subarray(u,m))}var Qt=0,Ze=0;function Fe(e){if(e.constructor===Uint8Array)return e;if(e.constructor===ArrayBuffer)return new Uint8Array(e);if(e.constructor===Array)return new Uint8Array(e);if(e.constructor===String)return Vn(e);if(e.constructor===We){if(e.g==null)var u=re||(re=new Uint8Array(0));else{u=Uint8Array;var m=e.g;m=m==null||Pe&&m!=null&&m instanceof Uint8Array?m:typeof m=="string"?Vn(m):null,e=e.g=m,u=new u(e)}return u}if(e instanceof Uint8Array)return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Mt(e,u){u=u===void 0?{}:u,u=u.u===void 0?!1:u.u,this.h=null,this.g=this.i=this.m=0,this.l=!1,this.u=u,e&&Ie(this,e)}function Ie(e,u){e.h=Fe(u),e.m=0,e.i=e.h.length,e.g=e.m}Mt.prototype.reset=function(){this.g=this.m};function jt(e){for(var u=128,m=0,t=0,c=0;4>c&&128<=u;c++)u=e.h[e.g++],m|=(u&127)<<7*c;if(128<=u&&(u=e.h[e.g++],m|=(u&127)<<28,t|=(u&127)>>4),128<=u)for(c=0;5>c&&128<=u;c++)u=e.h[e.g++],t|=(u&127)<<7*c+3;if(128>u)return e=m>>>0,u=t>>>0,(t=u&2147483648)&&(e=~e+1>>>0,u=~u>>>0,e==0&&(u=u+1>>>0)),e=4294967296*u+(e>>>0),t?-e:e;e.l=!0,Hn()}function ye(e){e.g>e.i&&(e.l=!0,ln(Error("Tried to read past the end of the data "+e.g+" > "+e.i)))}Mt.prototype.j=function(){var e=this.h,u=e[this.g],m=u&127;return 128>u?(this.g+=1,ye(this),m):(u=e[this.g+1],m|=(u&127)<<7,128>u?(this.g+=2,ye(this),m):(u=e[this.g+2],m|=(u&127)<<14,128>u?(this.g+=3,ye(this),m):(u=e[this.g+3],m|=(u&127)<<21,128>u?(this.g+=4,ye(this),m):(u=e[this.g+4],m|=(u&15)<<28,128>u?(this.g+=5,ye(this),m>>>0):(this.g+=5,128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]?(this.l=!0,Hn(),m):(ye(this),m))))))},Mt.prototype.o=function(){var e=this.h[this.g],u=this.h[this.g+1],m=this.h[this.g+2],t=this.h[this.g+3];return this.g+=4,ye(this),m=(e<<0|u<<8|m<<16|t<<24)>>>0,e=2*(m>>31)+1,u=m>>>23&255,m&=8388607,u==255?m?NaN:1/0*e:u==0?e*Math.pow(2,-149)*m:e*Math.pow(2,u-150)*(m+Math.pow(2,23))};var Le=[];function tn(){this.g=new Uint8Array(64),this.h=0}function Xe(e,u){if(!(e.h+1<e.g.length)){var m=e.g;e.g=new Uint8Array(Math.ceil(1+2*e.g.length)),e.g.set(m)}e.g[e.h++]=u}tn.prototype.length=function(){return this.h},tn.prototype.end=function(){var e=this.g,u=this.h;return this.h=0,Ke(e,0,u)};function Ot(e,u){for(;127<u;)Xe(e,u&127|128),u>>>=7;Xe(e,u)}function ze(e){var u={},m=u.N===void 0?!1:u.N;this.m={u:u.u===void 0?!1:u.u},this.N=m,u=this.m,Le.length?(m=Le.pop(),u&&(m.u=u.u),e&&Ie(m,e),e=m):e=new Mt(e,u),this.g=e,this.l=this.g.g,this.h=this.i=-1,this.j=!1}ze.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function _e(e){var u=e.g;if((u=u.g==u.i)||(u=e.j)||(u=e.g,u=u.l||0>u.g||u.g>u.i),u)return!1;e.l=e.g.g;var m=e.g.j();return u=m>>>3,m&=7,0<=m&&5>=m?(e.i=u,e.h=m,!0):(e.j=!0,Xn(m,e.l),!1)}function xe(e){switch(e.h){case 0:if(e.h!=0)xe(e);else t:{e=e.g;for(var u=e.g,m=0;10>m;m++){if((e.h[u]&128)===0){e.g=u+1,ye(e);break t}u++}e.l=!0,Hn()}break;case 1:e=e.g,e.g+=8,ye(e);break;case 2:e.h!=2?xe(e):(u=e.g.j(),e=e.g,e.g+=u,ye(e));break;case 5:e=e.g,e.g+=4,ye(e);break;case 3:u=e.i;do{if(!_e(e)){e.j=!0,ln(Error("Unmatched start-group tag: stream EOF"));break}if(e.h==4){e.i!=u&&(e.j=!0,ln(Error("Unmatched end-group tag")));break}xe(e)}while(1);break;default:e.j=!0,Xn(e.h,e.l)}}function Wn(e,u,m){e.N||(e=Ke(e.g.h,m,e.g.g),(m=u.o)?m.push(e):u.o=[e])}function un(e,u,m){var t=e.g.i,c=e.g.j(),a=e.g.g+c;if(e.g.i=a,m(u,e),m=a-e.g.g,m!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(c+" bytes, instead read "+(c-m)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return e.g.g=a,e.g.i=t,u}function Qe(e,u,m){var t=e.g.j();for(t=e.g.g+t;e.g.g<t;)m.push(u.call(e.g))}var an=[];function ve(){this.h=[],this.i=0,this.g=new tn}function Ye(e,u){u.length!==0&&(e.h.push(u),e.i+=u.length)}function Ge(e,u,m){Ot(e.g,8*u+2),Ot(e.g,m.length),Ye(e,e.g.end()),Ye(e,m)}var ie=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function De(e,u){Object.isFrozen(e)||(ie?e[ie]|=u:e.g!==void 0?e.g|=u:Object.defineProperties(e,{g:{value:u,configurable:!0,writable:!0,enumerable:!1}}))}function qt(e){if(!e)return 0;var u;return ie?u=e[ie]:u=e.g,u==null?0:u}function Pt(e){return Array.isArray(e)&&De(e,1),e}function fn(e){if(!Array.isArray(e))throw Error("cannot mark non-array as immutable");De(e,2)}function fe(e){return e!==null&&typeof e=="object"&&e.constructor===Object}function Ft(e){switch(typeof e){case"number":return isFinite(e)?e:String(e);case"object":return Pe&&e!=null&&e instanceof Uint8Array?xn(e):e;default:return e}}function Wt(e,u){if(e!=null)return Array.isArray(e)||fe(e)?oe(e,u):u(e)}function oe(e,u){if(Array.isArray(e)){for(var m=Array(e.length),t=0;t<e.length;t++)m[t]=Wt(e[t],u);return qt(e)&1&&Pt(m),m}m={};for(t in e)m[t]=Wt(e[t],u);return m}var we;function te(e,u,m){var t=we;we=null,e||(e=t),t=this.constructor.ba,e||(e=t?[t]:[]),this.j=(t?0:-1)-(this.constructor.$||0),this.m=this.g=null,this.h=e;t:{if(t=this.h.length,e=t-1,t&&(t=this.h[e],fe(t))){this.l=e-this.j,this.i=t;break t}u!==void 0&&-1<u?(this.l=Math.max(u,e+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(m)for(u=0;u<m.length;u++)e=m[u],e<this.l?(e+=this.j,(t=this.h[e])?Pt(t):this.h[e]=se):(tt(this),(t=this.i[e])?Pt(t):this.i[e]=se)}var se=Object.freeze(Pt([]));function tt(e){var u=e.l+e.j;e.h[u]||(e.i=e.h[u]={})}function it(e,u,m){return u===-1?null:(m===void 0?0:m)||u>=e.l?e.i?e.i[u]:void 0:e.h[u+e.j]}function ut(e,u,m){m=m===void 0?!0:m;var t=t===void 0?!1:t,c=it(e,u,t);return c==null&&(c=se),c===se?(c=Pt([]),St(e,u,c,t)):m&&Array.isArray(c)&&qt(c)&2&&(c=c.slice(),St(e,u,c,t)),c}function _t(e){var u=ut(e,3,!1);if(e.m||(e.m={}),!e.m[3]){for(var m=0;m<u.length;m++)u[m]=+u[m];e.m[3]=!0}return u}function de(e,u,m){return e=it(e,u),e==null?m:e}function ue(e,u,m){return e=it(e,u),e=e==null?e:+e,e==null?m===void 0?0:m:e}function St(e,u,m,t){(t===void 0?0:t)||u>=e.l?(tt(e),e.i[u]=m):e.h[u+e.j]=m}function me(e,u,m){if(m===-1)return null;e.g||(e.g={});var t=e.g[m];if(t)return t;var c=it(e,m,!1);return c==null?t:(u=new u(c),e.g[m]=u)}function Ce(e,u,m){e.g||(e.g={});var t=e.g[m];if(!t){var c=ut(e,m,!1);t=[];for(var a=Array.isArray(c)?!!(qt(c)&2):!1,b=0;b<c.length;b++)t[b]=new u(c[b]),a&&fn(t[b].h);a&&(fn(t),Object.freeze(t)),e.g[m]=t}return t}function en(e,u,m,t,c){var a=Ce(e,t,u);m=m||new t,e=ut(e,u),c!=null?(a.splice(c,0,m),e.splice(c,0,nn(m))):(a.push(m),e.push(nn(m)))}te.prototype.toJSON=function(){var e=nn(this);return oe(e,Ft)};function nn(e){if(e.g)for(var u in e.g){var m=e.g[u];if(Array.isArray(m))for(var t=0;t<m.length;t++)m[t]&&nn(m[t]);else m&&nn(m)}return e.h}te.prototype.toString=function(){return nn(this).toString()};function mn(e,u){if(e=e.o){Ye(u,u.g.end());for(var m=0;m<e.length;m++)Ye(u,e[m])}}function yn(e){var u=e[0];switch(e.length){case 2:var m=e[1];return function(w,F,U){return u(w,F,U,m)};case 3:var t=e[1],c=e[2];return function(w,F,U){return u(w,F,U,t,c)};case 4:var a=e[1],b=e[2],S=e[3];return function(w,F,U){return u(w,F,U,a,b,S)};default:throw Error("unsupported number of parameters, expected [2-4], got "+e.length)}}function He(e,u,m){for(;_e(u)&&u.h!=4;){var t=u.i,c=m[t];if(c){if(Array.isArray(c)&&(c=m[t]=yn(c)),!c(u,e,t)){t=u,c=e;var a=t.l;xe(t),Wn(t,c,a)}}else t=u,c=e,a=t.l,xe(t),Wn(t,c,a)}return e}function rn(e,u){var m=new ve;if(u(e,m),e=m.i+m.g.length(),e===0)m=new Uint8Array(0);else{e=new Uint8Array(e);for(var t=m.h,c=t.length,a=u=0;a<c;a++){var b=t[a];b.length!==0&&(e.set(b,u),u+=b.length)}t=m.g,c=t.h,c!==0&&(e.set(t.g.subarray(0,c),u),t.h=0),m.h=[e],m=e}return m}function jn(e,u,m){if(an.length){var t=an.pop();e&&(Ie(t.g,e),t.i=-1,t.h=-1),e=t}else e=new ze(e);try{return m(new u,e)}finally{u=e.g,u.h=null,u.m=0,u.i=0,u.g=0,u.l=!1,u.u=!1,e.i=-1,e.h=-1,e.j=!1,100>an.length&&an.push(e)}}function on(e,u,m){if(u=it(u,m),u!=null){Ot(e.g,8*m+5),e=e.g;var t=u;t=(m=0>t?1:0)?-t:t,t===0?0<1/t?Qt=Ze=0:(Ze=0,Qt=2147483648):isNaN(t)?(Ze=0,Qt=2147483647):34028234663852886e22<t?(Ze=0,Qt=(m<<31|2139095040)>>>0):11754943508222875e-54>t?(t=Math.round(t/Math.pow(2,-149)),Ze=0,Qt=(m<<31|t)>>>0):(u=Math.floor(Math.log(t)/Math.LN2),t*=Math.pow(2,-u),t=Math.round(8388608*t),16777216<=t&&++u,Ze=0,Qt=(m<<31|u+127<<23|t&8388607)>>>0),m=Qt,Xe(e,m>>>0&255),Xe(e,m>>>8&255),Xe(e,m>>>16&255),Xe(e,m>>>24&255)}}function Je(e,u,m){return e.h!==5?!1:(St(u,m,e.g.o()),!0)}function Zn(e,u,m){return e.h!==5&&e.h!==2?!1:(u=ut(u,m),e.h==2?Qe(e,Mt.prototype.o,u):u.push(e.g.o()),!0)}function Sn(e,u,m){return e.h!==0?!1:(St(u,m,jt(e.g)),!0)}function Be(e,u,m){return e.h!==0?!1:(St(u,m,e.g.j()),!0)}function Un(e,u,m){if(e.h!==2)return!1;var t=e.g.j();e=e.g;var c=e.g;e.g+=t,ye(e),e=e.h;var a;if(hn)(a=kn)||(a=kn=new TextDecoder("utf-8",{fatal:!1})),a=a.decode(e.subarray(c,c+t));else{t=c+t;for(var b=[],S=null,w,F,U;c<t;)w=e[c++],128>w?b.push(w):224>w?c>=t?b.push(65533):(F=e[c++],194>w||(F&192)!==128?(c--,b.push(65533)):b.push((w&31)<<6|F&63)):240>w?c>=t-1?b.push(65533):(F=e[c++],(F&192)!==128||w===224&&160>F||w===237&&160<=F||((a=e[c++])&192)!==128?(c--,b.push(65533)):b.push((w&15)<<12|(F&63)<<6|a&63)):244>=w?c>=t-2?b.push(65533):(F=e[c++],(F&192)!==128||(w<<28)+(F-144)>>30!==0||((a=e[c++])&192)!==128||((U=e[c++])&192)!==128?(c--,b.push(65533)):(w=(w&7)<<18|(F&63)<<12|(a&63)<<6|U&63,w-=65536,b.push((w>>10&1023)+55296,(w&1023)+56320))):b.push(65533),8192<=b.length&&(S=In(S,b),b.length=0);a=In(S,b)}return St(u,m,a),!0}function sn(e,u,m,t,c){if(e.h!==2)return!1;e=un(e,new t,c);var a=a===void 0?!1:a;return u.g||(u.g={}),t=e&&nn(e),u.g[m]=e,St(u,m,t,a),!0}function vn(e,u,m,t,c){return e.h!==2?!1:(e=un(e,new t,c),en(u,m,e,t,void 0),!0)}function Tn(e,u,m){return e.h!==0&&e.h!==2?!1:(u=ut(u,m),e.h==2?Qe(e,Mt.prototype.j,u):u.push(e.g.j()),!0)}function Mn(e,u,m){return e.h!==0?!1:(St(u,m,jt(e.g)),!0)}function dn(e){te.call(this,e,-1,Qn)}var Ln;dt(dn,te),dn.prototype.getRows=function(){return it(this,1)},dn.prototype.getCols=function(){return it(this,2)},dn.prototype.getPackedDataList=function(){return _t(this)},dn.prototype.getLayout=function(){return de(this,4,0)};function _n(e,u){return He(e,u,Ln||(Ln={1:Be,2:Be,3:Zn,4:Mn}))}var Qn=[3];function Yn(e){te.call(this,e)}var Cn;dt(Yn,te);function p(e,u){var m=it(e,1);if(m!=null&&m!=null){Ot(u.g,8);var t=u.g;if(0<=m)Ot(t,m);else{for(var c=0;9>c;c++)Xe(t,m&127|128),m>>=7;Xe(t,1)}}on(u,e,2),t=it(e,3),t!=null&&Ge(u,3,Fn(t)),t=it(e,4),t!=null&&Ge(u,4,Fn(t)),mn(e,u)}function V(e,u){return He(e,u,Cn||(Cn={1:Be,2:Je,3:Un,4:Un}))}function W(e){te.call(this,e,-1,ot)}var E;dt(W,te),W.prototype.addClassification=function(e,u){return en(this,1,e,Yn,u),this};function O(e,u){return He(e,u,E||(E={1:[vn,Yn,V]}))}var ot=[1];function j(e){te.call(this,e)}var rt;dt(j,te);function bt(e,u){on(u,e,1),on(u,e,2),on(u,e,3),on(u,e,4),on(u,e,5),mn(e,u)}function Rt(e,u){return He(e,u,rt||(rt={1:Je,2:Je,3:Je,4:Je,5:Je}))}function Ut(e){te.call(this,e,-1,kt)}var Jt;dt(Ut,te);function $t(e,u){return He(e,u,Jt||(Jt={1:[vn,j,Rt]}))}var kt=[1];function Tt(e){te.call(this,e)}var Et;dt(Tt,te);function Dt(e,u){on(u,e,1),on(u,e,2),on(u,e,3),on(u,e,4),on(u,e,5);var m=it(e,6);if(m!=null&&m!=null){Ot(u.g,48);var t=u.g,c=m;m=0>c,c=Math.abs(c);var a=c>>>0;for(c=Math.floor((c-a)/4294967296),c>>>=0,m&&(c=~c>>>0,a=(~a>>>0)+1,4294967295<a&&(a=0,c++,4294967295<c&&(c=0))),Qt=a,Ze=c,m=Qt,a=Ze;0<a||127<m;)Xe(t,m&127|128),m=(m>>>7|a<<25)>>>0,a>>>=7;Xe(t,m)}mn(e,u)}function ae(e,u){return He(e,u,Et||(Et={1:Je,2:Je,3:Je,4:Je,5:Je,6:Sn}))}function pe(e){te.call(this,e,-1,h)}var ge;dt(pe,te),pe.prototype.getVertexType=function(){return de(this,1,0)},pe.prototype.getPrimitiveType=function(){return de(this,2,0)},pe.prototype.getVertexBufferList=function(){return _t(this)},pe.prototype.getIndexBufferList=function(){return ut(this,4)};function ke(e,u){return He(e,u,ge||(ge={1:Mn,2:Mn,3:Zn,4:Tn}))}var h=[3,4];function y(e){te.call(this,e)}var G;dt(y,te),y.prototype.getMesh=function(){return me(this,pe,1)},y.prototype.getPoseTransformMatrix=function(){return me(this,dn,2)};function C(e,u){return He(e,u,G||(G={1:[sn,pe,ke],2:[sn,dn,_n]}))}var B=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],_=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],M=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],q=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ct=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],s=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],X=[].concat(J(B),J(_),J(M),J(q),J(ct),J(s));function R(e,u,m){if(m=e.createShader(m===0?e.VERTEX_SHADER:e.FRAGMENT_SHADER),e.shaderSource(m,u),e.compileShader(m),!e.getShaderParameter(m,e.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
36
|
+
`+I.getProgramInfoLog(o));Y=l.o=o,I.useProgram(Y),N=I.getUniformLocation(Y,"sampler0"),l.j={K:I.getAttribLocation(Y,"aVertex"),J:I.getAttribLocation(Y,"aTex"),qa:N},l.u=I.createBuffer(),I.bindBuffer(I.ARRAY_BUFFER,l.u),I.enableVertexAttribArray(l.j.K),I.vertexAttribPointer(l.j.K,2,I.FLOAT,!1,0,0),I.bufferData(I.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),I.STATIC_DRAW),I.bindBuffer(I.ARRAY_BUFFER,null),l.s=I.createBuffer(),I.bindBuffer(I.ARRAY_BUFFER,l.s),I.enableVertexAttribArray(l.j.J),I.vertexAttribPointer(l.j.J,2,I.FLOAT,!1,0,0),I.bufferData(I.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),I.STATIC_DRAW),I.bindBuffer(I.ARRAY_BUFFER,null),I.uniform1i(N,0)}Y=l.j,I.useProgram(l.o),I.canvas.width=v.width,I.canvas.height=v.height,I.viewport(0,0,v.width,v.height),I.activeTexture(I.TEXTURE0),l.h.bindTexture2d(v.glName),I.enableVertexAttribArray(Y.K),I.bindBuffer(I.ARRAY_BUFFER,l.u),I.vertexAttribPointer(Y.K,2,I.FLOAT,!1,0,0),I.enableVertexAttribArray(Y.J),I.bindBuffer(I.ARRAY_BUFFER,l.s),I.vertexAttribPointer(Y.J,2,I.FLOAT,!1,0,0),I.bindFramebuffer(I.DRAW_FRAMEBUFFER?I.DRAW_FRAMEBUFFER:I.FRAMEBUFFER,null),I.clearColor(0,0,0,0),I.clear(I.COLOR_BUFFER_BIT),I.colorMask(!0,!0,!0,!0),I.drawArrays(I.TRIANGLE_FAN,0,4),I.disableVertexAttribArray(Y.K),I.disableVertexAttribArray(Y.J),I.bindBuffer(I.ARRAY_BUFFER,null),l.h.bindTexture2d(0)}function R(l){this.g=l}var w=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function k(l,v){return v+l}function A(l,v){window[l]=v}function B(l){var v=document.createElement("script");return v.setAttribute("src",l),v.setAttribute("crossorigin","anonymous"),new Promise(function(I){v.addEventListener("load",function(){I()},!1),v.addEventListener("error",function(){I()},!1),document.body.appendChild(v)})}function nt(){return Zt(function(l){switch(l.g){case 1:return l.o=2,O(l,WebAssembly.instantiate(w),4);case 4:l.g=3,l.o=0;break;case 2:return l.o=0,l.j=null,l.return(!1);case 3:return l.return(!0)}})}function $(l){if(this.g=l,this.listeners={},this.j={},this.H={},this.o={},this.u={},this.I=this.s=this.$=!0,this.D=Promise.resolve(),this.Z="",this.C={},this.locateFile=l&&l.locateFile||k,typeof window=="object")var v=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")v=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.aa=v,l.options){v=T(Object.keys(l.options));for(var I=v.next();!I.done;I=v.next()){I=I.value;var Y=l.options[I].default;Y!==void 0&&(this.j[I]=typeof Y=="function"?Y():Y)}}}i=$.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function yt(l){var v,I,Y,N,o,d,g,e,u,m,t;return Zt(function(c){switch(c.g){case 1:return l.$?(v=l.g.files===void 0?[]:typeof l.g.files=="function"?l.g.files(l.j):l.g.files,O(c,nt(),2)):c.return();case 2:if(I=c.h,typeof window=="object")return A("createMediapipeSolutionsWasm",{locateFile:l.locateFile}),A("createMediapipeSolutionsPackedAssets",{locateFile:l.locateFile}),d=v.filter(function(a){return a.data!==void 0}),g=v.filter(function(a){return a.data===void 0}),e=Promise.all(d.map(function(a){var b=It(l,a.url);if(a.path!==void 0){var S=a.path;b=b.then(function(L){return l.overrideFile(S,L),Promise.resolve(L)})}return b})),u=Promise.all(g.map(function(a){return a.simd===void 0||a.simd&&I||!a.simd&&!I?B(l.locateFile(a.url,l.aa)):Promise.resolve()})).then(function(){var a,b,S;return Zt(function(L){if(L.g==1)return a=window.createMediapipeSolutionsWasm,b=window.createMediapipeSolutionsPackedAssets,S=l,O(L,a(b),2);S.h=L.h,L.g=0})}),m=function(){return Zt(function(a){return l.g.graph&&l.g.graph.url?a=O(a,It(l,l.g.graph.url),0):(a.g=0,a=void 0),a})}(),O(c,Promise.all([u,e,m]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return Y=v.filter(function(a){return a.simd===void 0||a.simd&&I||!a.simd&&!I}).map(function(a){return l.locateFile(a.url,l.aa)}),importScripts.apply(null,J(Y)),N=l,O(c,createMediapipeSolutionsWasm(Module),6);case 6:N.h=c.h,l.l=new OffscreenCanvas(1,1),l.h.canvas=l.l,o=l.h.GL.createContext(l.l,{antialias:!1,alpha:!1,na:typeof WebGL2RenderingContext<"u"?2:1}),l.h.GL.makeContextCurrent(o),c.g=4;break;case 7:if(l.l=document.createElement("canvas"),t=l.l.getContext("webgl2",{}),!t&&(t=l.l.getContext("webgl",{}),!t))return alert("Failed to create WebGL canvas context when passing video frame."),c.return();l.G=t,l.h.canvas=l.l,l.h.createContext(l.l,!0,!0,{});case 4:l.i=new l.h.SolutionWasm,l.$=!1,c.g=0}})}function Xt(l){var v,I,Y,N,o,d,g,e;return Zt(function(u){if(u.g==1){if(l.g.graph&&l.g.graph.url&&l.Z===l.g.graph.url)return u.return();if(l.s=!0,!l.g.graph||!l.g.graph.url){u.g=2;return}return l.Z=l.g.graph.url,O(u,It(l,l.g.graph.url),3)}for(u.g!=2&&(v=u.h,l.i.loadGraph(v)),I=T(Object.keys(l.C)),Y=I.next();!Y.done;Y=I.next())N=Y.value,l.i.overrideFile(N,l.C[N]);if(l.C={},l.g.listeners)for(o=T(l.g.listeners),d=o.next();!d.done;d=o.next())g=d.value,xt(l,g);e=l.j,l.j={},l.setOptions(e),u.g=0})}i.reset=function(){var l=this;return Zt(function(v){l.i&&(l.i.reset(),l.o={},l.u={}),v.g=0})},i.setOptions=function(l,v){var I=this;if(v=v||this.g.options){for(var Y=[],N=[],o={},d=T(Object.keys(l)),g=d.next();!g.done;o={R:o.R,S:o.S},g=d.next()){var e=g.value;e in this.j&&this.j[e]===l[e]||(this.j[e]=l[e],g=v[e],g!==void 0&&(g.onChange&&(o.R=g.onChange,o.S=l[e],Y.push(function(u){return function(){var m;return Zt(function(t){if(t.g==1)return O(t,u.R(u.S),2);m=t.h,m===!0&&(I.s=!0),t.g=0})}}(o))),g.graphOptionXref&&(e={valueNumber:g.type===1?l[e]:0,valueBoolean:g.type===0?l[e]:!1,valueString:g.type===2?l[e]:""},g=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),g.graphOptionXref),e),N.push(g))))}(Y.length!==0||N.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(N),this.A=(this.A===void 0?[]:this.A).concat(Y))}};function Kt(l){var v,I,Y,N,o,d,g;return Zt(function(e){switch(e.g){case 1:if(!l.s)return e.return();if(!l.A){e.g=2;break}v=T(l.A),I=v.next();case 3:if(I.done){e.g=5;break}return Y=I.value,O(e,Y(),4);case 4:I=v.next(),e.g=3;break;case 5:l.A=void 0;case 2:if(l.B){for(N=new l.h.GraphOptionChangeRequestList,o=T(l.B),d=o.next();!d.done;d=o.next())g=d.value,N.push_back(g);l.i.changeOptions(N),N.delete(),l.B=void 0}l.s=!1,e.g=0}})}i.initialize=function(){var l=this;return Zt(function(v){return v.g==1?O(v,yt(l),2):v.g!=3?O(v,Xt(l),3):O(v,Kt(l),0)})};function It(l,v){var I,Y;return Zt(function(N){return v in l.H?N.return(l.H[v]):(I=l.locateFile(v,""),Y=fetch(I).then(function(o){return o.arrayBuffer()}),l.H[v]=Y,N.return(Y))})}i.overrideFile=function(l,v){this.i?this.i.overrideFile(l,v):this.C[l]=v},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(l,v){var I=this,Y,N,o,d,g,e,u,m,t;return Zt(function(c){switch(c.g){case 1:return I.g.inputs?(Y=1e3*(v==null?performance.now():v),O(c,I.D,2)):c.return();case 2:return O(c,I.initialize(),3);case 3:for(N=new I.h.PacketDataList,o=T(Object.keys(l)),d=o.next();!d.done;d=o.next())if(g=d.value,e=I.g.inputs[g]){t:{var a=l[g];switch(e.type){case"video":var b=I.o[e.stream];if(b||(b=new ct(I.h,I.G),I.o[e.stream]=b),b.l===0&&(b.l=b.h.createTexture()),typeof HTMLVideoElement<"u"&&a instanceof HTMLVideoElement)var S=a.videoWidth,L=a.videoHeight;else typeof HTMLImageElement<"u"&&a instanceof HTMLImageElement?(S=a.naturalWidth,L=a.naturalHeight):(S=a.width,L=a.height);L={glName:b.l,width:S,height:L},S=b.g,S.canvas.width=L.width,S.canvas.height=L.height,S.activeTexture(S.TEXTURE0),b.h.bindTexture2d(b.l),S.texImage2D(S.TEXTURE_2D,0,S.RGBA,S.RGBA,S.UNSIGNED_BYTE,a),b.h.bindTexture2d(0),b=L;break t;case"detections":for(b=I.o[e.stream],b||(b=new R(I.h),I.o[e.stream]=b),b.data||(b.data=new b.g.DetectionListData),b.data.reset(a.length),L=0;L<a.length;++L){S=a[L];var F=b.data,U=F.setBoundingBox,z=L,Q=S.ea,D=new G;if(Ft(D,1,Q.ka),Ft(D,2,Q.la),Ft(D,3,Q.height),Ft(D,4,Q.width),Ft(D,5,Q.rotation),Ft(D,6,Q.ia),Q=P(D,C),U.call(F,z,Q),S.Y)for(F=0;F<S.Y.length;++F){D=S.Y[F];var st=!!D.visibility;U=b.data,z=U.addNormalizedLandmark,Q=L,D=Object.assign(Object.assign({},D),{visibility:st?D.visibility:0}),st=new pe,Ft(st,1,D.x),Ft(st,2,D.y),Ft(st,3,D.z),D.visibility&&Ft(st,4,D.visibility),D=P(st,ge),z.call(U,Q,D)}if(S.V)for(F=0;F<S.V.length;++F)U=b.data,z=U.addClassification,Q=L,D=S.V[F],st=new kt,Ft(st,2,D.score),D.index&&Ft(st,1,D.index),D.label&&Ft(st,3,D.label),D.displayName&&Ft(st,4,D.displayName),D=P(st,Tt),z.call(U,Q,D)}b=b.data;break t;default:b={}}}switch(u=b,m=e.stream,e.type){case"video":N.pushTexture2d(Object.assign(Object.assign({},u),{stream:m,timestamp:Y}));break;case"detections":t=u,t.stream=m,t.timestamp=Y,N.pushDetectionList(t);break;default:throw Error("Unknown input config type: '"+e.type+"'")}}return I.i.send(N),O(c,I.D,4);case 4:N.delete(),c.g=0}})};function ht(l,v,I){var Y,N,o,d,g,e,u,m,t,c,a,b,S,L;return Zt(function(F){switch(F.g){case 1:if(!I)return F.return(v);for(Y={},N=0,o=T(Object.keys(I)),d=o.next();!d.done;d=o.next())g=d.value,e=I[g],typeof e!="string"&&e.type==="texture"&&v[e.stream]!==void 0&&++N;1<N&&(l.I=!1),u=T(Object.keys(I)),d=u.next();case 2:if(d.done){F.g=4;break}if(m=d.value,t=I[m],typeof t=="string")return S=Y,L=m,O(F,Wt(l,m,v[t]),14);if(c=v[t.stream],t.type==="detection_list"){if(c){for(var U=c.getRectList(),z=c.getLandmarksList(),Q=c.getClassificationsList(),D=[],st=0;st<U.size();++st){var ft=V(U.get(st),G,C);ft={ea:{ka:oe(ft,1),la:oe(ft,2),height:oe(ft,3),width:oe(ft,4),rotation:oe(ft,5,0),ia:se(ft,6)},Y:Le(V(z.get(st),ke,h),pe,1).map(M),V:_(V(Q.get(st),Et,Dt))},D.push(ft)}U=D}else U=[];Y[m]=U,F.g=7;break}if(t.type==="proto_list"){if(c){for(U=Array(c.size()),z=0;z<c.size();z++)U[z]=c.get(z);c.delete()}else U=[];Y[m]=U,F.g=7;break}if(c===void 0){F.g=3;break}if(t.type==="float_list"){Y[m]=c,F.g=7;break}if(t.type==="proto"){Y[m]=c,F.g=7;break}if(t.type!=="texture")throw Error("Unknown output config type: '"+t.type+"'");return a=l.u[m],a||(a=new ct(l.h,l.G),l.u[m]=a),O(F,s(a,c,l.I),13);case 13:b=F.h,Y[m]=b;case 7:t.transform&&Y[m]&&(Y[m]=t.transform(Y[m])),F.g=3;break;case 14:S[L]=F.h;case 3:d=u.next(),F.g=2;break;case 4:return F.return(Y)}})}function Wt(l,v,I){var Y;return Zt(function(N){return typeof I=="number"||I instanceof Uint8Array||I instanceof l.h.Uint8BlobList?N.return(I):I instanceof l.h.Texture2dDataOut?(Y=l.u[v],Y||(Y=new ct(l.h,l.G),l.u[v]=Y),N.return(s(Y,I,l.I))):N.return(void 0)})}function xt(l,v){for(var I=v.name||"$",Y=[].concat(J(v.wants)),N=new l.h.StringList,o=T(v.wants),d=o.next();!d.done;d=o.next())N.push_back(d.value);o=l.h.PacketListener.implement({onResults:function(g){for(var e={},u=0;u<v.wants.length;++u)e[Y[u]]=g.get(u);var m=l.listeners[I];m&&(l.D=ht(l,e,v.outs).then(function(t){t=m(t);for(var c=0;c<v.wants.length;++c){var a=e[Y[c]];typeof a=="object"&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}t&&(l.D=t)}))}}),l.i.attachMultiListener(N,o),N.delete()}i.onResults=function(l,v){this.listeners[v||"$"]=l},Ct("Solution",$),Ct("OptionType",{BOOL:0,NUMBER:1,ma:2,0:"BOOL",1:"NUMBER",2:"STRING"});function wt(l){return l===void 0&&(l=0),l===1?"hand_landmark_full.tflite":"hand_landmark_lite.tflite"}function Ht(l){var v=this;l=l||{},this.g=new $({locateFile:l.locateFile,files:function(I){return[{url:"hands_solution_packed_assets_loader.js"},{simd:!1,url:"hands_solution_wasm_bin.js"},{simd:!0,url:"hands_solution_simd_wasm_bin.js"},{data:!0,url:wt(I.modelComplexity)}]},graph:{url:"hands.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:["multi_hand_landmarks","multi_hand_world_landmarks","image_transformed","multi_handedness"],outs:{image:"image_transformed",multiHandLandmarks:{type:"proto_list",stream:"multi_hand_landmarks",transform:q},multiHandWorldLandmarks:{type:"proto_list",stream:"multi_hand_world_landmarks",transform:q},multiHandedness:{type:"proto_list",stream:"multi_handedness",transform:function(I){return I.map(function(Y){return _(V(Y,Et,Dt))[0]})}}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumHands:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculator",fieldName:"int_value"}},modelComplexity:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(I){var Y,N,o;return Zt(function(d){return d.g==1?(Y=wt(I),N="third_party/mediapipe/modules/hand_landmark/"+Y,O(d,It(v.g,Y),2)):(o=d.h,v.g.overrideFile(N,o),d.return(!0))})}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"handlandmarktrackinggpu__palmdetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"handlandmarktrackinggpu__handlandmarkgpu__ThresholdingCalculator",fieldName:"threshold"}}}})}i=Ht.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(l){this.g.onResults(l)},i.initialize=function(){var l=this;return Zt(function(v){return O(v,l.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(l){var v=this;return Zt(function(I){return O(I,v.g.send(l),0)})},i.setOptions=function(l){this.g.setOptions(l)},Ct("Hands",Ht),Ct("HAND_CONNECTIONS",[[0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]]),Ct("VERSION","0.4.1646424915")}).call(Xi);var Wi={};(function(){var i;function n(e){var u=0;return function(){return u<e.length?{done:!1,value:e[u++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(e,u,m){return e==Array.prototype||e==Object.prototype||(e[u]=m.value),e};function f(e){e=[typeof globalThis=="object"&&globalThis,e,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var u=0;u<e.length;++u){var m=e[u];if(m&&m.Math==Math)return m}throw Error("Cannot find global object")}var Z=f(this);function x(e,u){if(u)t:{var m=Z;e=e.split(".");for(var t=0;t<e.length-1;t++){var c=e[t];if(!(c in m))break t;m=m[c]}e=e[e.length-1],t=m[e],u=u(t),u!=t&&u!=null&&r(m,e,{configurable:!0,writable:!0,value:u})}}x("Symbol",function(e){function u(a){if(this instanceof u)throw new TypeError("Symbol is not a constructor");return new m(t+(a||"")+"_"+c++,a)}function m(a,b){this.g=a,r(this,"description",{configurable:!0,writable:!0,value:b})}if(e)return e;m.prototype.toString=function(){return this.g};var t="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",c=0;return u}),x("Symbol.iterator",function(e){if(e)return e;e=Symbol("Symbol.iterator");for(var u="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),m=0;m<u.length;m++){var t=Z[u[m]];typeof t=="function"&&typeof t.prototype[e]!="function"&&r(t.prototype,e,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return e});function H(e){return e={next:e},e[Symbol.iterator]=function(){return this},e}function T(e){var u=typeof Symbol<"u"&&Symbol.iterator&&e[Symbol.iterator];return u?u.call(e):{next:n(e)}}function J(e){if(!(e instanceof Array)){e=T(e);for(var u,m=[];!(u=e.next()).done;)m.push(u.value);e=m}return e}var et=typeof Object.create=="function"?Object.create:function(e){function u(){}return u.prototype=e,new u},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(e,u){if(e.__proto__=u,e.__proto__!==u)throw new TypeError(e+" is not extensible");return e}:null}var at=lt;function dt(e,u){if(e.prototype=et(u.prototype),e.prototype.constructor=e,at)at(e,u);else for(var m in u)if(m!="prototype")if(Object.defineProperties){var t=Object.getOwnPropertyDescriptor(u,m);t&&Object.defineProperty(e,m,t)}else e[m]=u[m];e.da=u.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Nt(e){if(e.l)throw new TypeError("Generator is already running");e.l=!0}Bt.prototype.o=function(e){this.h=e};function ee(e,u){e.j={U:u,V:!0},e.g=e.m||e.s}Bt.prototype.return=function(e){this.j={return:e},this.g=this.s};function O(e,u,m){return e.g=m,{value:u}}function $e(e){this.g=new Bt,this.h=e}function je(e,u){Nt(e.g);var m=e.g.i;return m?We(e,"return"in m?m.return:function(t){return{value:t,done:!0}},u,e.g.return):(e.g.return(u),zt(e))}function We(e,u,m,t){try{var c=u.call(e.g.i,m);if(!(c instanceof Object))throw new TypeError("Iterator result "+c+" is not an object");if(!c.done)return e.g.l=!1,c;var a=c.value}catch(b){return e.g.i=null,ee(e.g,b),zt(e)}return e.g.i=null,t.call(e.g,a),zt(e)}function zt(e){for(;e.g.g;)try{var u=e.h(e.g);if(u)return e.g.l=!1,{value:u.value,done:!1}}catch(m){e.g.h=void 0,ee(e.g,m)}if(e.g.l=!1,e.g.j){if(u=e.g.j,e.g.j=null,u.V)throw u.U;return{value:u.return,done:!0}}return{value:void 0,done:!0}}function Jn(e){this.next=function(u){return Nt(e.g),e.g.i?u=We(e,e.g.i.next,u,e.g.o):(e.g.o(u),u=zt(e)),u},this.throw=function(u){return Nt(e.g),e.g.i?u=We(e,e.g.i.throw,u,e.g.o):(ee(e.g,u),u=zt(e)),u},this.return=function(u){return je(e,u)},this[Symbol.iterator]=function(){return this}}function ne(e){function u(t){return e.next(t)}function m(t){return e.throw(t)}return new Promise(function(t,c){function a(b){b.done?t(b.value):Promise.resolve(b.value).then(u,m).then(a,c)}a(e.next())})}function Zt(e){return ne(new Jn(new $e(e)))}x("Promise",function(e){function u(b){this.h=0,this.i=void 0,this.g=[],this.o=!1;var S=this.j();try{b(S.resolve,S.reject)}catch(L){S.reject(L)}}function m(){this.g=null}function t(b){return b instanceof u?b:new u(function(S){S(b)})}if(e)return e;m.prototype.h=function(b){if(this.g==null){this.g=[];var S=this;this.i(function(){S.l()})}this.g.push(b)};var c=Z.setTimeout;m.prototype.i=function(b){c(b,0)},m.prototype.l=function(){for(;this.g&&this.g.length;){var b=this.g;this.g=[];for(var S=0;S<b.length;++S){var L=b[S];b[S]=null;try{L()}catch(F){this.j(F)}}}this.g=null},m.prototype.j=function(b){this.i(function(){throw b})},u.prototype.j=function(){function b(F){return function(U){L||(L=!0,F.call(S,U))}}var S=this,L=!1;return{resolve:b(this.C),reject:b(this.l)}},u.prototype.C=function(b){if(b===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(b instanceof u)this.F(b);else{t:switch(typeof b){case"object":var S=b!=null;break t;case"function":S=!0;break t;default:S=!1}S?this.v(b):this.m(b)}},u.prototype.v=function(b){var S=void 0;try{S=b.then}catch(L){this.l(L);return}typeof S=="function"?this.G(S,b):this.m(b)},u.prototype.l=function(b){this.s(2,b)},u.prototype.m=function(b){this.s(1,b)},u.prototype.s=function(b,S){if(this.h!=0)throw Error("Cannot settle("+b+", "+S+"): Promise already settled in state"+this.h);this.h=b,this.i=S,this.h===2&&this.D(),this.A()},u.prototype.D=function(){var b=this;c(function(){if(b.B()){var S=Z.console;typeof S<"u"&&S.error(b.i)}},1)},u.prototype.B=function(){if(this.o)return!1;var b=Z.CustomEvent,S=Z.Event,L=Z.dispatchEvent;return typeof L>"u"?!0:(typeof b=="function"?b=new b("unhandledrejection",{cancelable:!0}):typeof S=="function"?b=new S("unhandledrejection",{cancelable:!0}):(b=Z.document.createEvent("CustomEvent"),b.initCustomEvent("unhandledrejection",!1,!0,b)),b.promise=this,b.reason=this.i,L(b))},u.prototype.A=function(){if(this.g!=null){for(var b=0;b<this.g.length;++b)a.h(this.g[b]);this.g=null}};var a=new m;return u.prototype.F=function(b){var S=this.j();b.J(S.resolve,S.reject)},u.prototype.G=function(b,S){var L=this.j();try{b.call(S,L.resolve,L.reject)}catch(F){L.reject(F)}},u.prototype.then=function(b,S){function L(Q,D){return typeof Q=="function"?function(st){try{F(Q(st))}catch(ft){U(ft)}}:D}var F,U,z=new u(function(Q,D){F=Q,U=D});return this.J(L(b,F),L(S,U)),z},u.prototype.catch=function(b){return this.then(void 0,b)},u.prototype.J=function(b,S){function L(){switch(F.h){case 1:b(F.i);break;case 2:S(F.i);break;default:throw Error("Unexpected state: "+F.h)}}var F=this;this.g==null?a.h(L):this.g.push(L),this.o=!0},u.resolve=t,u.reject=function(b){return new u(function(S,L){L(b)})},u.race=function(b){return new u(function(S,L){for(var F=T(b),U=F.next();!U.done;U=F.next())t(U.value).J(S,L)})},u.all=function(b){var S=T(b),L=S.next();return L.done?t([]):new u(function(F,U){function z(st){return function(ft){Q[st]=ft,D--,D==0&&F(Q)}}var Q=[],D=0;do Q.push(void 0),D++,t(L.value).J(z(Q.length-1),U),L=S.next();while(!L.done)})},u});function qe(e,u){e instanceof String&&(e+="");var m=0,t=!1,c={next:function(){if(!t&&m<e.length){var a=m++;return{value:u(a,e[a]),done:!1}}return t=!0,{done:!0,value:void 0}}};return c[Symbol.iterator]=function(){return c},c}var zn=typeof Object.assign=="function"?Object.assign:function(e,u){for(var m=1;m<arguments.length;m++){var t=arguments[m];if(t)for(var c in t)Object.prototype.hasOwnProperty.call(t,c)&&(e[c]=t[c])}return e};x("Object.assign",function(e){return e||zn}),x("Object.is",function(e){return e||function(u,m){return u===m?u!==0||1/u===1/m:u!==u&&m!==m}}),x("Array.prototype.includes",function(e){return e||function(u,m){var t=this;t instanceof String&&(t=String(t));var c=t.length;for(m=m||0,0>m&&(m=Math.max(m+c,0));m<c;m++){var a=t[m];if(a===u||Object.is(a,u))return!0}return!1}}),x("String.prototype.includes",function(e){return e||function(u,m){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(u instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(u,m||0)!==-1}}),x("Array.prototype.keys",function(e){return e||function(){return qe(this,function(u){return u})}});var Re=this||self;function Ct(e,u){e=e.split(".");var m=Re;e[0]in m||typeof m.execScript>"u"||m.execScript("var "+e[0]);for(var t;e.length&&(t=e.shift());)e.length||u===void 0?m[t]&&m[t]!==Object.prototype[t]?m=m[t]:m=m[t]={}:m[t]=u}function Te(e){Re.setTimeout(function(){throw e},0)}function ln(e){Te(e)}function Xn(e,u){ln(Error("Invalid wire type: "+e+" (at position "+u+")"))}function Hn(){ln(Error("Failed to read varint, encoding is invalid."))}function In(e,u){return u=String.fromCharCode.apply(null,u),e==null?u:e+u}var kn,hn=typeof TextDecoder<"u",bn,En=typeof TextEncoder<"u";function Fn(e){if(En)e=(bn||(bn=new TextEncoder)).encode(e);else{var u=void 0;u=u===void 0?!1:u;for(var m=0,t=new Uint8Array(3*e.length),c=0;c<e.length;c++){var a=e.charCodeAt(c);if(128>a)t[m++]=a;else{if(2048>a)t[m++]=a>>6|192;else{if(55296<=a&&57343>=a){if(56319>=a&&c<e.length){var b=e.charCodeAt(++c);if(56320<=b&&57343>=b){a=1024*(a-55296)+b-56320+65536,t[m++]=a>>18|240,t[m++]=a>>12&63|128,t[m++]=a>>6&63|128,t[m++]=a&63|128;continue}else c--}if(u)throw Error("Found an unpaired surrogate");a=65533}t[m++]=a>>12|224,t[m++]=a>>6&63|128}t[m++]=a&63|128}}e=t.subarray(0,m)}return e}var Pe={},Ae=null;function xn(e){var u;u===void 0&&(u=0),Se(),u=Pe[u];for(var m=Array(Math.floor(e.length/3)),t=u[64]||"",c=0,a=0;c<e.length-2;c+=3){var b=e[c],S=e[c+1],L=e[c+2],F=u[b>>2];b=u[(b&3)<<4|S>>4],S=u[(S&15)<<2|L>>6],L=u[L&63],m[a++]=F+b+S+L}switch(F=0,L=t,e.length-c){case 2:F=e[c+1],L=u[(F&15)<<2]||t;case 1:e=e[c],m[a]=u[e>>2]+u[(e&3)<<4|F>>4]+L+t}return m.join("")}function Wn(e){var u=e.length,m=3*u/4;m%3?m=Math.floor(m):"=.".indexOf(e[u-1])!=-1&&(m="=.".indexOf(e[u-2])!=-1?m-2:m-1);var t=new Uint8Array(m),c=0;return he(e,function(a){t[c++]=a}),t.subarray(0,c)}function he(e,u){function m(L){for(;t<e.length;){var F=e.charAt(t++),U=Ae[F];if(U!=null)return U;if(!/^[\s\xa0]*$/.test(F))throw Error("Unknown base64 encoding at char: "+F)}return L}Se();for(var t=0;;){var c=m(-1),a=m(0),b=m(64),S=m(64);if(S===64&&c===-1)break;u(c<<2|a>>4),b!=64&&(u(a<<4&240|b>>2),S!=64&&u(b<<6&192|S))}}function Se(){if(!Ae){Ae={};for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),u=["+/=","+/","-_=","-_.","-_"],m=0;5>m;m++){var t=e.concat(u[m].split(""));Pe[m]=t;for(var c=0;c<t.length;c++){var a=t[c];Ae[a]===void 0&&(Ae[a]=c)}}}}var Oe=typeof Uint8Array=="function",re;function Ve(e){if(this.g=e,e!==null&&e.length===0)throw Error("ByteString should be constructed with non-empty values")}Ve.prototype.toJSON=function(){if(this.g==null)var e="";else e=this.g,e=this.g=e==null||typeof e=="string"?e:Oe&&e instanceof Uint8Array?xn(e):null;return e};var cn=typeof Uint8Array.prototype.slice=="function";function Be(e,u,m){return u===m?re||(re=new Uint8Array(0)):cn?e.slice(u,m):new Uint8Array(e.subarray(u,m))}var Qt=0,Ze=0;function Fe(e){if(e.constructor===Uint8Array)return e;if(e.constructor===ArrayBuffer)return new Uint8Array(e);if(e.constructor===Array)return new Uint8Array(e);if(e.constructor===String)return Wn(e);if(e.constructor===Ve){if(e.g==null)var u=re||(re=new Uint8Array(0));else{u=Uint8Array;var m=e.g;m=m==null||Oe&&m!=null&&m instanceof Uint8Array?m:typeof m=="string"?Wn(m):null,e=e.g=m,u=new u(e)}return u}if(e instanceof Uint8Array)return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Mt(e,u){u=u===void 0?{}:u,u=u.u===void 0?!1:u.u,this.h=null,this.g=this.i=this.m=0,this.l=!1,this.u=u,e&&Ie(this,e)}function Ie(e,u){e.h=Fe(u),e.m=0,e.i=e.h.length,e.g=e.m}Mt.prototype.reset=function(){this.g=this.m};function jt(e){for(var u=128,m=0,t=0,c=0;4>c&&128<=u;c++)u=e.h[e.g++],m|=(u&127)<<7*c;if(128<=u&&(u=e.h[e.g++],m|=(u&127)<<28,t|=(u&127)>>4),128<=u)for(c=0;5>c&&128<=u;c++)u=e.h[e.g++],t|=(u&127)<<7*c+3;if(128>u)return e=m>>>0,u=t>>>0,(t=u&2147483648)&&(e=~e+1>>>0,u=~u>>>0,e==0&&(u=u+1>>>0)),e=4294967296*u+(e>>>0),t?-e:e;e.l=!0,Hn()}function ye(e){e.g>e.i&&(e.l=!0,ln(Error("Tried to read past the end of the data "+e.g+" > "+e.i)))}Mt.prototype.j=function(){var e=this.h,u=e[this.g],m=u&127;return 128>u?(this.g+=1,ye(this),m):(u=e[this.g+1],m|=(u&127)<<7,128>u?(this.g+=2,ye(this),m):(u=e[this.g+2],m|=(u&127)<<14,128>u?(this.g+=3,ye(this),m):(u=e[this.g+3],m|=(u&127)<<21,128>u?(this.g+=4,ye(this),m):(u=e[this.g+4],m|=(u&15)<<28,128>u?(this.g+=5,ye(this),m>>>0):(this.g+=5,128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]?(this.l=!0,Hn(),m):(ye(this),m))))))},Mt.prototype.o=function(){var e=this.h[this.g],u=this.h[this.g+1],m=this.h[this.g+2],t=this.h[this.g+3];return this.g+=4,ye(this),m=(e<<0|u<<8|m<<16|t<<24)>>>0,e=2*(m>>31)+1,u=m>>>23&255,m&=8388607,u==255?m?NaN:1/0*e:u==0?e*Math.pow(2,-149)*m:e*Math.pow(2,u-150)*(m+Math.pow(2,23))};var Ye=[];function tn(){this.g=new Uint8Array(64),this.h=0}function Xe(e,u){if(!(e.h+1<e.g.length)){var m=e.g;e.g=new Uint8Array(Math.ceil(1+2*e.g.length)),e.g.set(m)}e.g[e.h++]=u}tn.prototype.length=function(){return this.h},tn.prototype.end=function(){var e=this.g,u=this.h;return this.h=0,Be(e,0,u)};function Pt(e,u){for(;127<u;)Xe(e,u&127|128),u>>>=7;Xe(e,u)}function ze(e){var u={},m=u.N===void 0?!1:u.N;this.m={u:u.u===void 0?!1:u.u},this.N=m,u=this.m,Ye.length?(m=Ye.pop(),u&&(m.u=u.u),e&&Ie(m,e),e=m):e=new Mt(e,u),this.g=e,this.l=this.g.g,this.h=this.i=-1,this.j=!1}ze.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function _e(e){var u=e.g;if((u=u.g==u.i)||(u=e.j)||(u=e.g,u=u.l||0>u.g||u.g>u.i),u)return!1;e.l=e.g.g;var m=e.g.j();return u=m>>>3,m&=7,0<=m&&5>=m?(e.i=u,e.h=m,!0):(e.j=!0,Xn(m,e.l),!1)}function xe(e){switch(e.h){case 0:if(e.h!=0)xe(e);else t:{e=e.g;for(var u=e.g,m=0;10>m;m++){if((e.h[u]&128)===0){e.g=u+1,ye(e);break t}u++}e.l=!0,Hn()}break;case 1:e=e.g,e.g+=8,ye(e);break;case 2:e.h!=2?xe(e):(u=e.g.j(),e=e.g,e.g+=u,ye(e));break;case 5:e=e.g,e.g+=4,ye(e);break;case 3:u=e.i;do{if(!_e(e)){e.j=!0,ln(Error("Unmatched start-group tag: stream EOF"));break}if(e.h==4){e.i!=u&&(e.j=!0,ln(Error("Unmatched end-group tag")));break}xe(e)}while(1);break;default:e.j=!0,Xn(e.h,e.l)}}function Vn(e,u,m){e.N||(e=Be(e.g.h,m,e.g.g),(m=u.o)?m.push(e):u.o=[e])}function un(e,u,m){var t=e.g.i,c=e.g.j(),a=e.g.g+c;if(e.g.i=a,m(u,e),m=a-e.g.g,m!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(c+" bytes, instead read "+(c-m)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return e.g.g=a,e.g.i=t,u}function Qe(e,u,m){var t=e.g.j();for(t=e.g.g+t;e.g.g<t;)m.push(u.call(e.g))}var an=[];function ve(){this.h=[],this.i=0,this.g=new tn}function we(e,u){u.length!==0&&(e.h.push(u),e.i+=u.length)}function Ge(e,u,m){Pt(e.g,8*u+2),Pt(e.g,m.length),we(e,e.g.end()),we(e,m)}var ie=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function De(e,u){Object.isFrozen(e)||(ie?e[ie]|=u:e.g!==void 0?e.g|=u:Object.defineProperties(e,{g:{value:u,configurable:!0,writable:!0,enumerable:!1}}))}function qt(e){if(!e)return 0;var u;return ie?u=e[ie]:u=e.g,u==null?0:u}function Ot(e){return Array.isArray(e)&&De(e,1),e}function fn(e){if(!Array.isArray(e))throw Error("cannot mark non-array as immutable");De(e,2)}function fe(e){return e!==null&&typeof e=="object"&&e.constructor===Object}function Ft(e){switch(typeof e){case"number":return isFinite(e)?e:String(e);case"object":return Oe&&e!=null&&e instanceof Uint8Array?xn(e):e;default:return e}}function Vt(e,u){if(e!=null)return Array.isArray(e)||fe(e)?oe(e,u):u(e)}function oe(e,u){if(Array.isArray(e)){for(var m=Array(e.length),t=0;t<e.length;t++)m[t]=Vt(e[t],u);return qt(e)&1&&Ot(m),m}m={};for(t in e)m[t]=Vt(e[t],u);return m}var Le;function te(e,u,m){var t=Le;Le=null,e||(e=t),t=this.constructor.ba,e||(e=t?[t]:[]),this.j=(t?0:-1)-(this.constructor.$||0),this.m=this.g=null,this.h=e;t:{if(t=this.h.length,e=t-1,t&&(t=this.h[e],fe(t))){this.l=e-this.j,this.i=t;break t}u!==void 0&&-1<u?(this.l=Math.max(u,e+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(m)for(u=0;u<m.length;u++)e=m[u],e<this.l?(e+=this.j,(t=this.h[e])?Ot(t):this.h[e]=se):(tt(this),(t=this.i[e])?Ot(t):this.i[e]=se)}var se=Object.freeze(Ot([]));function tt(e){var u=e.l+e.j;e.h[u]||(e.i=e.h[u]={})}function it(e,u,m){return u===-1?null:(m===void 0?0:m)||u>=e.l?e.i?e.i[u]:void 0:e.h[u+e.j]}function ut(e,u,m){m=m===void 0?!0:m;var t=t===void 0?!1:t,c=it(e,u,t);return c==null&&(c=se),c===se?(c=Ot([]),St(e,u,c,t)):m&&Array.isArray(c)&&qt(c)&2&&(c=c.slice(),St(e,u,c,t)),c}function _t(e){var u=ut(e,3,!1);if(e.m||(e.m={}),!e.m[3]){for(var m=0;m<u.length;m++)u[m]=+u[m];e.m[3]=!0}return u}function de(e,u,m){return e=it(e,u),e==null?m:e}function ue(e,u,m){return e=it(e,u),e=e==null?e:+e,e==null?m===void 0?0:m:e}function St(e,u,m,t){(t===void 0?0:t)||u>=e.l?(tt(e),e.i[u]=m):e.h[u+e.j]=m}function me(e,u,m){if(m===-1)return null;e.g||(e.g={});var t=e.g[m];if(t)return t;var c=it(e,m,!1);return c==null?t:(u=new u(c),e.g[m]=u)}function Ce(e,u,m){e.g||(e.g={});var t=e.g[m];if(!t){var c=ut(e,m,!1);t=[];for(var a=Array.isArray(c)?!!(qt(c)&2):!1,b=0;b<c.length;b++)t[b]=new u(c[b]),a&&fn(t[b].h);a&&(fn(t),Object.freeze(t)),e.g[m]=t}return t}function en(e,u,m,t,c){var a=Ce(e,t,u);m=m||new t,e=ut(e,u),c!=null?(a.splice(c,0,m),e.splice(c,0,nn(m))):(a.push(m),e.push(nn(m)))}te.prototype.toJSON=function(){var e=nn(this);return oe(e,Ft)};function nn(e){if(e.g)for(var u in e.g){var m=e.g[u];if(Array.isArray(m))for(var t=0;t<m.length;t++)m[t]&&nn(m[t]);else m&&nn(m)}return e.h}te.prototype.toString=function(){return nn(this).toString()};function mn(e,u){if(e=e.o){we(u,u.g.end());for(var m=0;m<e.length;m++)we(u,e[m])}}function yn(e){var u=e[0];switch(e.length){case 2:var m=e[1];return function(L,F,U){return u(L,F,U,m)};case 3:var t=e[1],c=e[2];return function(L,F,U){return u(L,F,U,t,c)};case 4:var a=e[1],b=e[2],S=e[3];return function(L,F,U){return u(L,F,U,a,b,S)};default:throw Error("unsupported number of parameters, expected [2-4], got "+e.length)}}function He(e,u,m){for(;_e(u)&&u.h!=4;){var t=u.i,c=m[t];if(c){if(Array.isArray(c)&&(c=m[t]=yn(c)),!c(u,e,t)){t=u,c=e;var a=t.l;xe(t),Vn(t,c,a)}}else t=u,c=e,a=t.l,xe(t),Vn(t,c,a)}return e}function rn(e,u){var m=new ve;if(u(e,m),e=m.i+m.g.length(),e===0)m=new Uint8Array(0);else{e=new Uint8Array(e);for(var t=m.h,c=t.length,a=u=0;a<c;a++){var b=t[a];b.length!==0&&(e.set(b,u),u+=b.length)}t=m.g,c=t.h,c!==0&&(e.set(t.g.subarray(0,c),u),t.h=0),m.h=[e],m=e}return m}function jn(e,u,m){if(an.length){var t=an.pop();e&&(Ie(t.g,e),t.i=-1,t.h=-1),e=t}else e=new ze(e);try{return m(new u,e)}finally{u=e.g,u.h=null,u.m=0,u.i=0,u.g=0,u.l=!1,u.u=!1,e.i=-1,e.h=-1,e.j=!1,100>an.length&&an.push(e)}}function on(e,u,m){if(u=it(u,m),u!=null){Pt(e.g,8*m+5),e=e.g;var t=u;t=(m=0>t?1:0)?-t:t,t===0?0<1/t?Qt=Ze=0:(Ze=0,Qt=2147483648):isNaN(t)?(Ze=0,Qt=2147483647):34028234663852886e22<t?(Ze=0,Qt=(m<<31|2139095040)>>>0):11754943508222875e-54>t?(t=Math.round(t/Math.pow(2,-149)),Ze=0,Qt=(m<<31|t)>>>0):(u=Math.floor(Math.log(t)/Math.LN2),t*=Math.pow(2,-u),t=Math.round(8388608*t),16777216<=t&&++u,Ze=0,Qt=(m<<31|u+127<<23|t&8388607)>>>0),m=Qt,Xe(e,m>>>0&255),Xe(e,m>>>8&255),Xe(e,m>>>16&255),Xe(e,m>>>24&255)}}function Je(e,u,m){return e.h!==5?!1:(St(u,m,e.g.o()),!0)}function Zn(e,u,m){return e.h!==5&&e.h!==2?!1:(u=ut(u,m),e.h==2?Qe(e,Mt.prototype.o,u):u.push(e.g.o()),!0)}function Sn(e,u,m){return e.h!==0?!1:(St(u,m,jt(e.g)),!0)}function Ke(e,u,m){return e.h!==0?!1:(St(u,m,e.g.j()),!0)}function Un(e,u,m){if(e.h!==2)return!1;var t=e.g.j();e=e.g;var c=e.g;e.g+=t,ye(e),e=e.h;var a;if(hn)(a=kn)||(a=kn=new TextDecoder("utf-8",{fatal:!1})),a=a.decode(e.subarray(c,c+t));else{t=c+t;for(var b=[],S=null,L,F,U;c<t;)L=e[c++],128>L?b.push(L):224>L?c>=t?b.push(65533):(F=e[c++],194>L||(F&192)!==128?(c--,b.push(65533)):b.push((L&31)<<6|F&63)):240>L?c>=t-1?b.push(65533):(F=e[c++],(F&192)!==128||L===224&&160>F||L===237&&160<=F||((a=e[c++])&192)!==128?(c--,b.push(65533)):b.push((L&15)<<12|(F&63)<<6|a&63)):244>=L?c>=t-2?b.push(65533):(F=e[c++],(F&192)!==128||(L<<28)+(F-144)>>30!==0||((a=e[c++])&192)!==128||((U=e[c++])&192)!==128?(c--,b.push(65533)):(L=(L&7)<<18|(F&63)<<12|(a&63)<<6|U&63,L-=65536,b.push((L>>10&1023)+55296,(L&1023)+56320))):b.push(65533),8192<=b.length&&(S=In(S,b),b.length=0);a=In(S,b)}return St(u,m,a),!0}function sn(e,u,m,t,c){if(e.h!==2)return!1;e=un(e,new t,c);var a=a===void 0?!1:a;return u.g||(u.g={}),t=e&&nn(e),u.g[m]=e,St(u,m,t,a),!0}function vn(e,u,m,t,c){return e.h!==2?!1:(e=un(e,new t,c),en(u,m,e,t,void 0),!0)}function Tn(e,u,m){return e.h!==0&&e.h!==2?!1:(u=ut(u,m),e.h==2?Qe(e,Mt.prototype.j,u):u.push(e.g.j()),!0)}function Mn(e,u,m){return e.h!==0?!1:(St(u,m,jt(e.g)),!0)}function dn(e){te.call(this,e,-1,Qn)}var Yn;dt(dn,te),dn.prototype.getRows=function(){return it(this,1)},dn.prototype.getCols=function(){return it(this,2)},dn.prototype.getPackedDataList=function(){return _t(this)},dn.prototype.getLayout=function(){return de(this,4,0)};function _n(e,u){return He(e,u,Yn||(Yn={1:Ke,2:Ke,3:Zn,4:Mn}))}var Qn=[3];function wn(e){te.call(this,e)}var Cn;dt(wn,te);function p(e,u){var m=it(e,1);if(m!=null&&m!=null){Pt(u.g,8);var t=u.g;if(0<=m)Pt(t,m);else{for(var c=0;9>c;c++)Xe(t,m&127|128),m>>=7;Xe(t,1)}}on(u,e,2),t=it(e,3),t!=null&&Ge(u,3,Fn(t)),t=it(e,4),t!=null&&Ge(u,4,Fn(t)),mn(e,u)}function W(e,u){return He(e,u,Cn||(Cn={1:Ke,2:Je,3:Un,4:Un}))}function V(e){te.call(this,e,-1,ot)}var E;dt(V,te),V.prototype.addClassification=function(e,u){return en(this,1,e,wn,u),this};function P(e,u){return He(e,u,E||(E={1:[vn,wn,W]}))}var ot=[1];function j(e){te.call(this,e)}var rt;dt(j,te);function bt(e,u){on(u,e,1),on(u,e,2),on(u,e,3),on(u,e,4),on(u,e,5),mn(e,u)}function Rt(e,u){return He(e,u,rt||(rt={1:Je,2:Je,3:Je,4:Je,5:Je}))}function Ut(e){te.call(this,e,-1,kt)}var Jt;dt(Ut,te);function $t(e,u){return He(e,u,Jt||(Jt={1:[vn,j,Rt]}))}var kt=[1];function Tt(e){te.call(this,e)}var Et;dt(Tt,te);function Dt(e,u){on(u,e,1),on(u,e,2),on(u,e,3),on(u,e,4),on(u,e,5);var m=it(e,6);if(m!=null&&m!=null){Pt(u.g,48);var t=u.g,c=m;m=0>c,c=Math.abs(c);var a=c>>>0;for(c=Math.floor((c-a)/4294967296),c>>>=0,m&&(c=~c>>>0,a=(~a>>>0)+1,4294967295<a&&(a=0,c++,4294967295<c&&(c=0))),Qt=a,Ze=c,m=Qt,a=Ze;0<a||127<m;)Xe(t,m&127|128),m=(m>>>7|a<<25)>>>0,a>>>=7;Xe(t,m)}mn(e,u)}function ae(e,u){return He(e,u,Et||(Et={1:Je,2:Je,3:Je,4:Je,5:Je,6:Sn}))}function pe(e){te.call(this,e,-1,h)}var ge;dt(pe,te),pe.prototype.getVertexType=function(){return de(this,1,0)},pe.prototype.getPrimitiveType=function(){return de(this,2,0)},pe.prototype.getVertexBufferList=function(){return _t(this)},pe.prototype.getIndexBufferList=function(){return ut(this,4)};function ke(e,u){return He(e,u,ge||(ge={1:Mn,2:Mn,3:Zn,4:Tn}))}var h=[3,4];function y(e){te.call(this,e)}var G;dt(y,te),y.prototype.getMesh=function(){return me(this,pe,1)},y.prototype.getPoseTransformMatrix=function(){return me(this,dn,2)};function C(e,u){return He(e,u,G||(G={1:[sn,pe,ke],2:[sn,dn,_n]}))}var K=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],_=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],M=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],q=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ct=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],s=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],X=[].concat(J(K),J(_),J(M),J(q),J(ct),J(s));function R(e,u,m){if(m=e.createShader(m===0?e.VERTEX_SHADER:e.FRAGMENT_SHADER),e.shaderSource(m,u),e.compileShader(m),!e.getShaderParameter(m,e.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
37
37
|
|
|
38
|
-
`+e.getShaderInfoLog(m));return m}function
|
|
38
|
+
`+e.getShaderInfoLog(m));return m}function w(e){return Ce(e,wn,1).map(function(u){return{index:de(u,1,0),score:ue(u,2),label:it(u,3)!=null?de(u,3,""):void 0,displayName:it(u,4)!=null?de(u,4,""):void 0}})}function k(e){return{x:ue(e,1),y:ue(e,2),z:ue(e,3),visibility:it(e,4)!=null?ue(e,4):void 0}}function A(e){return Ce(jn(e,Ut,$t),j,1).map(k)}function B(e,u){this.h=e,this.g=u,this.l=0}function nt(e,u,m){return $(e,u),typeof e.g.canvas.transferToImageBitmap=="function"?Promise.resolve(e.g.canvas.transferToImageBitmap()):m?Promise.resolve(e.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(e.g.canvas):(e.i===void 0&&(e.i=document.createElement("canvas")),new Promise(function(t){e.i.height=e.g.canvas.height,e.i.width=e.g.canvas.width,e.i.getContext("2d",{}).drawImage(e.g.canvas,0,0,e.g.canvas.width,e.g.canvas.height),t(e.i)}))}function $(e,u){var m=e.g;if(e.m===void 0){var t=R(m,`
|
|
39
39
|
attribute vec2 aVertex;
|
|
40
40
|
attribute vec2 aTex;
|
|
41
41
|
varying vec2 vTex;
|
|
@@ -50,9 +50,9 @@
|
|
|
50
50
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
51
51
|
}`,1),a=m.createProgram();if(m.attachShader(a,t),m.attachShader(a,c),m.linkProgram(a),!m.getProgramParameter(a,m.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
52
52
|
|
|
53
|
-
`+m.getProgramInfoLog(a));t=e.m=a,m.useProgram(t),c=m.getUniformLocation(t,"sampler0"),e.j={I:m.getAttribLocation(t,"aVertex"),H:m.getAttribLocation(t,"aTex"),ca:c},e.s=m.createBuffer(),m.bindBuffer(m.ARRAY_BUFFER,e.s),m.enableVertexAttribArray(e.j.I),m.vertexAttribPointer(e.j.I,2,m.FLOAT,!1,0,0),m.bufferData(m.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),m.STATIC_DRAW),m.bindBuffer(m.ARRAY_BUFFER,null),e.o=m.createBuffer(),m.bindBuffer(m.ARRAY_BUFFER,e.o),m.enableVertexAttribArray(e.j.H),m.vertexAttribPointer(e.j.H,2,m.FLOAT,!1,0,0),m.bufferData(m.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),m.STATIC_DRAW),m.bindBuffer(m.ARRAY_BUFFER,null),m.uniform1i(c,0)}t=e.j,m.useProgram(e.m),m.canvas.width=u.width,m.canvas.height=u.height,m.viewport(0,0,u.width,u.height),m.activeTexture(m.TEXTURE0),e.h.bindTexture2d(u.glName),m.enableVertexAttribArray(t.I),m.bindBuffer(m.ARRAY_BUFFER,e.s),m.vertexAttribPointer(t.I,2,m.FLOAT,!1,0,0),m.enableVertexAttribArray(t.H),m.bindBuffer(m.ARRAY_BUFFER,e.o),m.vertexAttribPointer(t.H,2,m.FLOAT,!1,0,0),m.bindFramebuffer(m.DRAW_FRAMEBUFFER?m.DRAW_FRAMEBUFFER:m.FRAMEBUFFER,null),m.clearColor(0,0,0,0),m.clear(m.COLOR_BUFFER_BIT),m.colorMask(!0,!0,!0,!0),m.drawArrays(m.TRIANGLE_FAN,0,4),m.disableVertexAttribArray(t.I),m.disableVertexAttribArray(t.H),m.bindBuffer(m.ARRAY_BUFFER,null),e.h.bindTexture2d(0)}function yt(e){this.g=e}var Xt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Bt(e,u){return u+e}function It(e,u){window[e]=u}function ht(e){var u=document.createElement("script");return u.setAttribute("src",e),u.setAttribute("crossorigin","anonymous"),new Promise(function(m){u.addEventListener("load",function(){m()},!1),u.addEventListener("error",function(){m()},!1),document.body.appendChild(u)})}function Vt(){return gt(function(e){switch(e.g){case 1:return e.m=2,P(e,WebAssembly.instantiate(Xt),4);case 4:e.g=3,e.m=0;break;case 2:return e.m=0,e.j=null,e.return(!1);case 3:return e.return(!0)}})}function xt(e){if(this.g=e,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=e&&e.locateFile||Bt,typeof window=="object")var u=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")u=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=u,e.options){u=T(Object.keys(e.options));for(var m=u.next();!m.done;m=u.next()){m=m.value;var t=e.options[m].default;t!==void 0&&(this.j[m]=typeof t=="function"?t():t)}}}i=xt.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function Yt(e){var u,m,t,c,a,b,S,w,F,U,z;return gt(function(Q){switch(Q.g){case 1:return e.R?(u=e.g.files===void 0?[]:typeof e.g.files=="function"?e.g.files(e.j):e.g.files,P(Q,Vt(),2)):Q.return();case 2:if(m=Q.h,typeof window=="object")return It("createMediapipeSolutionsWasm",{locateFile:e.locateFile}),It("createMediapipeSolutionsPackedAssets",{locateFile:e.locateFile}),b=u.filter(function(D){return D.data!==void 0}),S=u.filter(function(D){return D.data===void 0}),w=Promise.all(b.map(function(D){var st=v(e,D.url);if(D.path!==void 0){var ft=D.path;st=st.then(function(mt){return e.overrideFile(ft,mt),Promise.resolve(mt)})}return st})),F=Promise.all(S.map(function(D){return D.simd===void 0||D.simd&&m||!D.simd&&!m?ht(e.locateFile(D.url,e.S)):Promise.resolve()})).then(function(){var D,st,ft;return gt(function(mt){if(mt.g==1)return D=window.createMediapipeSolutionsWasm,st=window.createMediapipeSolutionsPackedAssets,ft=e,P(mt,D(st),2);ft.h=mt.h,mt.g=0})}),U=function(){return gt(function(D){return e.g.graph&&e.g.graph.url?D=P(D,v(e,e.g.graph.url),0):(D.g=0,D=void 0),D})}(),P(Q,Promise.all([F,w,U]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return t=u.filter(function(D){return D.simd===void 0||D.simd&&m||!D.simd&&!m}).map(function(D){return e.locateFile(D.url,e.S)}),importScripts.apply(null,J(t)),c=e,P(Q,createMediapipeSolutionsWasm(Module),6);case 6:c.h=Q.h,e.l=new OffscreenCanvas(1,1),e.h.canvas=e.l,a=e.h.GL.createContext(e.l,{antialias:!1,alpha:!1,aa:typeof WebGL2RenderingContext<"u"?2:1}),e.h.GL.makeContextCurrent(a),Q.g=4;break;case 7:if(e.l=document.createElement("canvas"),z=e.l.getContext("webgl2",{}),!z&&(z=e.l.getContext("webgl",{}),!z))return alert("Failed to create WebGL canvas context when passing video frame."),Q.return();e.D=z,e.h.canvas=e.l,e.h.createContext(e.l,!0,!0,{});case 4:e.i=new e.h.SolutionWasm,e.R=!1,Q.g=0}})}function Ht(e){var u,m,t,c,a,b,S,w;return gt(function(F){if(F.g==1){if(e.g.graph&&e.g.graph.url&&e.P===e.g.graph.url)return F.return();if(e.o=!0,!e.g.graph||!e.g.graph.url){F.g=2;return}return e.P=e.g.graph.url,P(F,v(e,e.g.graph.url),3)}for(F.g!=2&&(u=F.h,e.i.loadGraph(u)),m=T(Object.keys(e.B)),t=m.next();!t.done;t=m.next())c=t.value,e.i.overrideFile(c,e.B[c]);if(e.B={},e.g.listeners)for(a=T(e.g.listeners),b=a.next();!b.done;b=a.next())S=b.value,N(e,S);w=e.j,e.j={},e.setOptions(w),F.g=0})}i.reset=function(){var e=this;return gt(function(u){e.i&&(e.i.reset(),e.m={},e.s={}),u.g=0})},i.setOptions=function(e,u){var m=this;if(u=u||this.g.options){for(var t=[],c=[],a={},b=T(Object.keys(e)),S=b.next();!S.done;a={K:a.K,L:a.L},S=b.next()){var w=S.value;w in this.j&&this.j[w]===e[w]||(this.j[w]=e[w],S=u[w],S!==void 0&&(S.onChange&&(a.K=S.onChange,a.L=e[w],t.push(function(F){return function(){var U;return gt(function(z){if(z.g==1)return P(z,F.K(F.L),2);U=z.h,U===!0&&(m.o=!0),z.g=0})}}(a))),S.graphOptionXref&&(w={valueNumber:S.type===1?e[w]:0,valueBoolean:S.type===0?e[w]:!1,valueString:S.type===2?e[w]:""},S=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),S.graphOptionXref),w),c.push(S))))}(t.length!==0||c.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(c),this.v=(this.v===void 0?[]:this.v).concat(t))}};function l(e){var u,m,t,c,a,b,S;return gt(function(w){switch(w.g){case 1:if(!e.o)return w.return();if(!e.v){w.g=2;break}u=T(e.v),m=u.next();case 3:if(m.done){w.g=5;break}return t=m.value,P(w,t(),4);case 4:m=u.next(),w.g=3;break;case 5:e.v=void 0;case 2:if(e.A){for(c=new e.h.GraphOptionChangeRequestList,a=T(e.A),b=a.next();!b.done;b=a.next())S=b.value,c.push_back(S);e.i.changeOptions(c),c.delete(),e.A=void 0}e.o=!1,w.g=0}})}i.initialize=function(){var e=this;return gt(function(u){return u.g==1?P(u,Yt(e),2):u.g!=3?P(u,Ht(e),3):P(u,l(e),0)})};function v(e,u){var m,t;return gt(function(c){return u in e.F?c.return(e.F[u]):(m=e.locateFile(u,""),t=fetch(m).then(function(a){return a.arrayBuffer()}),e.F[u]=t,c.return(t))})}i.overrideFile=function(e,u){this.i?this.i.overrideFile(e,u):this.B[e]=u},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(e,u){var m=this,t,c,a,b,S,w,F,U,z;return gt(function(Q){switch(Q.g){case 1:return m.g.inputs?(t=1e3*(u==null?performance.now():u),P(Q,m.C,2)):Q.return();case 2:return P(Q,m.initialize(),3);case 3:for(c=new m.h.PacketDataList,a=T(Object.keys(e)),b=a.next();!b.done;b=a.next())if(S=b.value,w=m.g.inputs[S]){t:{var D=e[S];switch(w.type){case"video":var st=m.m[w.stream];if(st||(st=new K(m.h,m.D),m.m[w.stream]=st),st.l===0&&(st.l=st.h.createTexture()),typeof HTMLVideoElement<"u"&&D instanceof HTMLVideoElement)var ft=D.videoWidth,mt=D.videoHeight;else typeof HTMLImageElement<"u"&&D instanceof HTMLImageElement?(ft=D.naturalWidth,mt=D.naturalHeight):(ft=D.width,mt=D.height);mt={glName:st.l,width:ft,height:mt},ft=st.g,ft.canvas.width=mt.width,ft.canvas.height=mt.height,ft.activeTexture(ft.TEXTURE0),st.h.bindTexture2d(st.l),ft.texImage2D(ft.TEXTURE_2D,0,ft.RGBA,ft.RGBA,ft.UNSIGNED_BYTE,D),st.h.bindTexture2d(0),st=mt;break t;case"detections":for(st=m.m[w.stream],st||(st=new yt(m.h),m.m[w.stream]=st),st.data||(st.data=new st.g.DetectionListData),st.data.reset(D.length),mt=0;mt<D.length;++mt){ft=D[mt];var Gt=st.data,vt=Gt.setBoundingBox,At=mt,le=ft.T,ce=new Tt;if(St(ce,1,le.X),St(ce,2,le.Y),St(ce,3,le.height),St(ce,4,le.width),St(ce,5,le.rotation),St(ce,6,le.W),le=rn(ce,Dt),vt.call(Gt,At,le),ft.O)for(Gt=0;Gt<ft.O.length;++Gt){ce=ft.O[Gt];var Ne=!!ce.visibility;vt=st.data,At=vt.addNormalizedLandmark,le=mt,ce=Object.assign(Object.assign({},ce),{visibility:Ne?ce.visibility:0}),Ne=new j,St(Ne,1,ce.x),St(Ne,2,ce.y),St(Ne,3,ce.z),ce.visibility&&St(Ne,4,ce.visibility),ce=rn(Ne,bt),At.call(vt,le,ce)}if(ft.M)for(Gt=0;Gt<ft.M.length;++Gt)vt=st.data,At=vt.addClassification,le=mt,ce=ft.M[Gt],Ne=new Yn,St(Ne,2,ce.score),ce.index&&St(Ne,1,ce.index),ce.label&&St(Ne,3,ce.label),ce.displayName&&St(Ne,4,ce.displayName),ce=rn(Ne,p),At.call(vt,le,ce)}st=st.data;break t;default:st={}}}switch(F=st,U=w.stream,w.type){case"video":c.pushTexture2d(Object.assign(Object.assign({},F),{stream:U,timestamp:t}));break;case"detections":z=F,z.stream=U,z.timestamp=t,c.pushDetectionList(z);break;default:throw Error("Unknown input config type: '"+w.type+"'")}}return m.i.send(c),P(Q,m.C,4);case 4:c.delete(),Q.g=0}})};function I(e,u,m){var t,c,a,b,S,w,F,U,z,Q,D,st,ft,mt;return gt(function(Gt){switch(Gt.g){case 1:if(!m)return Gt.return(u);for(t={},c=0,a=T(Object.keys(m)),b=a.next();!b.done;b=a.next())S=b.value,w=m[S],typeof w!="string"&&w.type==="texture"&&u[w.stream]!==void 0&&++c;1<c&&(e.G=!1),F=T(Object.keys(m)),b=F.next();case 2:if(b.done){Gt.g=4;break}if(U=b.value,z=m[U],typeof z=="string")return ft=t,mt=U,P(Gt,L(e,U,u[z]),14);if(Q=u[z.stream],z.type==="detection_list"){if(Q){for(var vt=Q.getRectList(),At=Q.getLandmarksList(),le=Q.getClassificationsList(),ce=[],Ne=0;Ne<vt.size();++Ne){var Rn=jn(vt.get(Ne),Tt,ae);Rn={T:{X:ue(Rn,1),Y:ue(Rn,2),height:ue(Rn,3),width:ue(Rn,4),rotation:ue(Rn,5,0),W:de(Rn,6,0)},O:A(At.get(Ne)),M:Y(jn(le.get(Ne),W,O))},ce.push(Rn)}vt=ce}else vt=[];t[U]=vt,Gt.g=7;break}if(z.type==="proto_list"){if(Q){for(vt=Array(Q.size()),At=0;At<Q.size();At++)vt[At]=Q.get(At);Q.delete()}else vt=[];t[U]=vt,Gt.g=7;break}if(Q===void 0){Gt.g=3;break}if(z.type==="float_list"){t[U]=Q,Gt.g=7;break}if(z.type==="proto"){t[U]=Q,Gt.g=7;break}if(z.type!=="texture")throw Error("Unknown output config type: '"+z.type+"'");return D=e.s[U],D||(D=new K(e.h,e.D),e.s[U]=D),P(Gt,nt(D,Q,e.G),13);case 13:st=Gt.h,t[U]=st;case 7:z.transform&&t[U]&&(t[U]=z.transform(t[U])),Gt.g=3;break;case 14:ft[mt]=Gt.h;case 3:b=F.next(),Gt.g=2;break;case 4:return Gt.return(t)}})}function L(e,u,m){var t;return gt(function(c){return typeof m=="number"||m instanceof Uint8Array||m instanceof e.h.Uint8BlobList?c.return(m):m instanceof e.h.Texture2dDataOut?(t=e.s[u],t||(t=new K(e.h,e.D),e.s[u]=t),c.return(nt(t,m,e.G))):c.return(void 0)})}function N(e,u){for(var m=u.name||"$",t=[].concat(J(u.wants)),c=new e.h.StringList,a=T(u.wants),b=a.next();!b.done;b=a.next())c.push_back(b.value);a=e.h.PacketListener.implement({onResults:function(S){for(var w={},F=0;F<u.wants.length;++F)w[t[F]]=S.get(F);var U=e.listeners[m];U&&(e.C=I(e,w,u.outs).then(function(z){z=U(z);for(var Q=0;Q<u.wants.length;++Q){var D=w[t[Q]];typeof D=="object"&&D.hasOwnProperty&&D.hasOwnProperty("delete")&&D.delete()}z&&(e.C=z)}))}}),e.i.attachMultiListener(c,a),c.delete()}i.onResults=function(e,u){this.listeners[u||"$"]=e},Ct("Solution",xt),Ct("OptionType",{BOOL:0,NUMBER:1,Z:2,0:"BOOL",1:"NUMBER",2:"STRING"});function o(e){return e.map(d)}function d(e){e=jn(e,y,C);var u=e.getMesh();if(!u)return e;var m=new Float32Array(u.getVertexBufferList());u.getVertexBufferList=function(){return m};var t=new Uint32Array(u.getIndexBufferList());return u.getIndexBufferList=function(){return t},e}function g(e){var u=this;e=e||{},this.g=new xt({locateFile:e.locateFile,files:[{url:"holistic_solution_packed_assets_loader.js"},{simd:!1,url:"holistic_solution_wasm_bin.js"},{simd:!0,url:"holistic_solution_simd_wasm_bin.js"}],graph:{url:"holistic.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:"left_hand_landmarks right_hand_landmarks face_landmarks pose_landmarks world_landmarks segmentation_mask image_transformed multi_face_geometry".split(" "),outs:{image:{type:"texture",stream:"image_transformed"},leftHandLandmarks:{type:"proto",stream:"left_hand_landmarks",transform:A},rightHandLandmarks:{type:"proto",stream:"right_hand_landmarks",transform:A},faceLandmarks:{type:"proto",stream:"face_landmarks",transform:A},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:A},ea:{type:"proto",stream:"world_landmarks",transform:A},segmentationMask:{type:"texture",stream:"segmentation_mask"},multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:o}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},enableFaceGeometry:{type:0,graphOptionXref:{calculatorName:"EnableFaceGeometryConstant",calculatorType:"ConstantSidePacketCalculator",fieldName:"bool_value"}},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelComplexity:{type:1,default:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(m){var t,c,a,b;return gt(function(S){if(S.g==1){switch(t="",m){case 1:t="pose_landmark_full.tflite";break;case 2:t="pose_landmark_heavy.tflite";break;default:t="pose_landmark_lite.tflite"}return c="third_party/mediapipe/modules/pose_landmark/"+t,a=u.g.locateFile(t,""),P(S,fetch(a),3)}return S.g!=2?P(S,S.h.arrayBuffer(),2):(b=S.h,u.g.overrideFile(c,b),P(S,u.g.reset(),0))})}},smoothLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothLandmarks",fieldName:"bool_value"}},enableSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorEnableSegmentation",fieldName:"bool_value"}},smoothSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothSegmentation",fieldName:"bool_value"}},refineFaceLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorRefineFaceLandmarks",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"holisticlandmarkgpu__poselandmarkgpu__posedetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"holisticlandmarkgpu__poselandmarkgpu__poselandmarkbyroigpu__tensorstoposelandmarksandsegmentation__ThresholdingCalculator",fieldName:"threshold"}},cameraNear:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"near"}},cameraFar:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"far"}},cameraVerticalFovDegrees:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"vertical_fov_degrees"}}}})}i=g.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(e){this.g.onResults(e)},i.initialize=function(){var e=this;return gt(function(u){return P(u,e.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(e){var u=this;return gt(function(m){return P(m,u.g.send(e),0)})},i.setOptions=function(e){this.g.setOptions(e)},Ct("Holistic",g),Ct("FACE_GEOMETRY",{Layout:{COLUMN_MAJOR:0,ROW_MAJOR:1,0:"COLUMN_MAJOR",1:"ROW_MAJOR"},PrimitiveType:{TRIANGLE:0,0:"TRIANGLE"},VertexType:{VERTEX_PT:0,0:"VERTEX_PT"},DEFAULT_CAMERA_PARAMS:{verticalFovDegrees:63,near:1,far:1e4}}),Ct("FACEMESH_LIPS",B),Ct("FACEMESH_LEFT_EYE",_),Ct("FACEMESH_LEFT_EYEBROW",M),Ct("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Ct("FACEMESH_RIGHT_EYE",q),Ct("FACEMESH_RIGHT_EYEBROW",ct),Ct("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Ct("FACEMESH_FACE_OVAL",s),Ct("FACEMESH_CONTOURS",X),Ct("FACEMESH_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Ct("HAND_CONNECTIONS",[[0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]]),Ct("POSE_CONNECTIONS",[[0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]]),Ct("POSE_LANDMARKS",{NOSE:0,LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,LEFT_EAR:7,RIGHT_EAR:8,LEFT_RIGHT:9,RIGHT_LEFT:10,LEFT_SHOULDER:11,RIGHT_SHOULDER:12,LEFT_ELBOW:13,RIGHT_ELBOW:14,LEFT_WRIST:15,RIGHT_WRIST:16,LEFT_PINKY:17,RIGHT_PINKY:18,LEFT_INDEX:19,RIGHT_INDEX:20,LEFT_THUMB:21,RIGHT_THUMB:22,LEFT_HIP:23,RIGHT_HIP:24,LEFT_KNEE:25,RIGHT_KNEE:26,LEFT_ANKLE:27,RIGHT_ANKLE:28,LEFT_HEEL:29,RIGHT_HEEL:30,LEFT_FOOT_INDEX:31,RIGHT_FOOT_INDEX:32}),Ct("POSE_LANDMARKS_LEFT",{LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,LEFT_EAR:7,LEFT_RIGHT:9,LEFT_SHOULDER:11,LEFT_ELBOW:13,LEFT_WRIST:15,LEFT_PINKY:17,LEFT_INDEX:19,LEFT_THUMB:21,LEFT_HIP:23,LEFT_KNEE:25,LEFT_ANKLE:27,LEFT_HEEL:29,LEFT_FOOT_INDEX:31}),Ct("POSE_LANDMARKS_RIGHT",{RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,RIGHT_EAR:8,RIGHT_LEFT:10,RIGHT_SHOULDER:12,RIGHT_ELBOW:14,RIGHT_WRIST:16,RIGHT_PINKY:18,RIGHT_INDEX:20,RIGHT_THUMB:22,RIGHT_HIP:24,RIGHT_KNEE:26,RIGHT_ANKLE:28,RIGHT_HEEL:30,RIGHT_FOOT_INDEX:32}),Ct("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Ct("matrixDataToMatrix",function(e){for(var u=e.getCols(),m=e.getRows(),t=e.getPackedDataList(),c=[],a=0;a<m;a++)c.push(Array(u));for(a=0;a<m;a++)for(var b=0;b<u;b++){var S=e.getLayout()===1?a*u+b:b*m+a;c[a][b]=t[S]}return c}),Ct("VERSION","0.5.1635989137")}).call(Vi);const Wi={};(function(){var i;function n(o){var d=0;return function(){return d<o.length?{done:!1,value:o[d++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(o,d,g){return o==Array.prototype||o==Object.prototype||(o[d]=g.value),o};function f(o){o=[typeof globalThis=="object"&&globalThis,o,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var d=0;d<o.length;++d){var g=o[d];if(g&&g.Math==Math)return g}throw Error("Cannot find global object")}var Z=f(this);function x(o,d){if(d)t:{var g=Z;o=o.split(".");for(var e=0;e<o.length-1;e++){var u=o[e];if(!(u in g))break t;g=g[u]}o=o[o.length-1],e=g[o],d=d(e),d!=e&&d!=null&&r(g,o,{configurable:!0,writable:!0,value:d})}}x("Symbol",function(o){function d(m){if(this instanceof d)throw new TypeError("Symbol is not a constructor");return new g(e+(m||"")+"_"+u++,m)}function g(m,t){this.g=m,r(this,"description",{configurable:!0,writable:!0,value:t})}if(o)return o;g.prototype.toString=function(){return this.g};var e="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",u=0;return d}),x("Symbol.iterator",function(o){if(o)return o;o=Symbol("Symbol.iterator");for(var d="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),g=0;g<d.length;g++){var e=Z[d[g]];typeof e=="function"&&typeof e.prototype[o]!="function"&&r(e.prototype,o,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return o});function H(o){return o={next:o},o[Symbol.iterator]=function(){return this},o}function T(o){var d=typeof Symbol<"u"&&Symbol.iterator&&o[Symbol.iterator];return d?d.call(o):{next:n(o)}}function J(o){if(!(o instanceof Array)){o=T(o);for(var d,g=[];!(d=o.next()).done;)g.push(d.value);o=g}return o}var et=typeof Object.create=="function"?Object.create:function(o){function d(){}return d.prototype=o,new d},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Lt={a:!0},wt={};try{wt.__proto__=Lt,pt=wt.a;break t}catch{}pt=!1}lt=pt?function(o,d){if(o.__proto__=d,o.__proto__!==d)throw new TypeError(o+" is not extensible");return o}:null}var at=lt;function dt(o,d){if(o.prototype=et(d.prototype),o.prototype.constructor=o,at)at(o,d);else for(var g in d)if(g!="prototype")if(Object.defineProperties){var e=Object.getOwnPropertyDescriptor(d,g);e&&Object.defineProperty(o,g,e)}else o[g]=d[g];o.na=d.prototype}function Kt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function Nt(o){if(o.l)throw new TypeError("Generator is already running");o.l=!0}Kt.prototype.s=function(o){this.h=o};function ee(o,d){o.j={da:d,ea:!0},o.g=o.o||o.u}Kt.prototype.return=function(o){this.j={return:o},this.g=this.u};function P(o,d,g){return o.g=g,{value:d}}function $e(o){this.g=new Kt,this.h=o}function je(o,d){Nt(o.g);var g=o.g.i;return g?Ve(o,"return"in g?g.return:function(e){return{value:e,done:!0}},d,o.g.return):(o.g.return(d),zt(o))}function Ve(o,d,g,e){try{var u=d.call(o.g.i,g);if(!(u instanceof Object))throw new TypeError("Iterator result "+u+" is not an object");if(!u.done)return o.g.l=!1,u;var m=u.value}catch(t){return o.g.i=null,ee(o.g,t),zt(o)}return o.g.i=null,e.call(o.g,m),zt(o)}function zt(o){for(;o.g.g;)try{var d=o.h(o.g);if(d)return o.g.l=!1,{value:d.value,done:!1}}catch(g){o.g.h=void 0,ee(o.g,g)}if(o.g.l=!1,o.g.j){if(d=o.g.j,o.g.j=null,d.ea)throw d.da;return{value:d.return,done:!0}}return{value:void 0,done:!0}}function Jn(o){this.next=function(d){return Nt(o.g),o.g.i?d=Ve(o,o.g.i.next,d,o.g.s):(o.g.s(d),d=zt(o)),d},this.throw=function(d){return Nt(o.g),o.g.i?d=Ve(o,o.g.i.throw,d,o.g.s):(ee(o.g,d),d=zt(o)),d},this.return=function(d){return je(o,d)},this[Symbol.iterator]=function(){return this}}function ne(o){function d(e){return o.next(e)}function g(e){return o.throw(e)}return new Promise(function(e,u){function m(t){t.done?e(t.value):Promise.resolve(t.value).then(d,g).then(m,u)}m(o.next())})}function gt(o){return ne(new Jn(new $e(o)))}x("Promise",function(o){function d(t){this.h=0,this.i=void 0,this.g=[],this.s=!1;var c=this.j();try{t(c.resolve,c.reject)}catch(a){c.reject(a)}}function g(){this.g=null}function e(t){return t instanceof d?t:new d(function(c){c(t)})}if(o)return o;g.prototype.h=function(t){if(this.g==null){this.g=[];var c=this;this.i(function(){c.l()})}this.g.push(t)};var u=Z.setTimeout;g.prototype.i=function(t){u(t,0)},g.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var c=0;c<t.length;++c){var a=t[c];t[c]=null;try{a()}catch(b){this.j(b)}}}this.g=null},g.prototype.j=function(t){this.i(function(){throw t})},d.prototype.j=function(){function t(b){return function(S){a||(a=!0,b.call(c,S))}}var c=this,a=!1;return{resolve:t(this.D),reject:t(this.l)}},d.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof d)this.H(t);else{t:switch(typeof t){case"object":var c=t!=null;break t;case"function":c=!0;break t;default:c=!1}c?this.A(t):this.o(t)}},d.prototype.A=function(t){var c=void 0;try{c=t.then}catch(a){this.l(a);return}typeof c=="function"?this.I(c,t):this.o(t)},d.prototype.l=function(t){this.u(2,t)},d.prototype.o=function(t){this.u(1,t)},d.prototype.u=function(t,c){if(this.h!=0)throw Error("Cannot settle("+t+", "+c+"): Promise already settled in state"+this.h);this.h=t,this.i=c,this.h===2&&this.G(),this.B()},d.prototype.G=function(){var t=this;u(function(){if(t.C()){var c=Z.console;typeof c<"u"&&c.error(t.i)}},1)},d.prototype.C=function(){if(this.s)return!1;var t=Z.CustomEvent,c=Z.Event,a=Z.dispatchEvent;return typeof a>"u"?!0:(typeof t=="function"?t=new t("unhandledrejection",{cancelable:!0}):typeof c=="function"?t=new c("unhandledrejection",{cancelable:!0}):(t=Z.document.createEvent("CustomEvent"),t.initCustomEvent("unhandledrejection",!1,!0,t)),t.promise=this,t.reason=this.i,a(t))},d.prototype.B=function(){if(this.g!=null){for(var t=0;t<this.g.length;++t)m.h(this.g[t]);this.g=null}};var m=new g;return d.prototype.H=function(t){var c=this.j();t.M(c.resolve,c.reject)},d.prototype.I=function(t,c){var a=this.j();try{t.call(c,a.resolve,a.reject)}catch(b){a.reject(b)}},d.prototype.then=function(t,c){function a(F,U){return typeof F=="function"?function(z){try{b(F(z))}catch(Q){S(Q)}}:U}var b,S,w=new d(function(F,U){b=F,S=U});return this.M(a(t,b),a(c,S)),w},d.prototype.catch=function(t){return this.then(void 0,t)},d.prototype.M=function(t,c){function a(){switch(b.h){case 1:t(b.i);break;case 2:c(b.i);break;default:throw Error("Unexpected state: "+b.h)}}var b=this;this.g==null?m.h(a):this.g.push(a),this.s=!0},d.resolve=e,d.reject=function(t){return new d(function(c,a){a(t)})},d.race=function(t){return new d(function(c,a){for(var b=T(t),S=b.next();!S.done;S=b.next())e(S.value).M(c,a)})},d.all=function(t){var c=T(t),a=c.next();return a.done?e([]):new d(function(b,S){function w(z){return function(Q){F[z]=Q,U--,U==0&&b(F)}}var F=[],U=0;do F.push(void 0),U++,e(a.value).M(w(F.length-1),S),a=c.next();while(!a.done)})},d});function qe(o,d){o instanceof String&&(o+="");var g=0,e=!1,u={next:function(){if(!e&&g<o.length){var m=g++;return{value:d(m,o[m]),done:!1}}return e=!0,{done:!0,value:void 0}}};return u[Symbol.iterator]=function(){return u},u}var zn=typeof Object.assign=="function"?Object.assign:function(o,d){for(var g=1;g<arguments.length;g++){var e=arguments[g];if(e)for(var u in e)Object.prototype.hasOwnProperty.call(e,u)&&(o[u]=e[u])}return o};x("Object.assign",function(o){return o||zn}),x("Object.is",function(o){return o||function(d,g){return d===g?d!==0||1/d===1/g:d!==d&&g!==g}}),x("Array.prototype.includes",function(o){return o||function(d,g){var e=this;e instanceof String&&(e=String(e));var u=e.length;for(g=g||0,0>g&&(g=Math.max(g+u,0));g<u;g++){var m=e[g];if(m===d||Object.is(m,d))return!0}return!1}}),x("String.prototype.includes",function(o){return o||function(d,g){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(d instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(d,g||0)!==-1}}),x("Array.prototype.keys",function(o){return o||function(){return qe(this,function(d){return d})}});var Re=this||self;function Ct(o,d){o=o.split(".");var g=Re;o[0]in g||typeof g.execScript>"u"||g.execScript("var "+o[0]);for(var e;o.length&&(e=o.shift());)o.length||d===void 0?g[e]&&g[e]!==Object.prototype[e]?g=g[e]:g=g[e]={}:g[e]=d}function Te(){throw Error("Invalid UTF8")}function ln(o,d){return d=String.fromCharCode.apply(null,d),o==null?d:o+d}var Xn,Hn=typeof TextDecoder<"u",In,kn=typeof TextEncoder<"u",hn={},bn=null;function En(o){var d;d===void 0&&(d=0),Ae(),d=hn[d];for(var g=Array(Math.floor(o.length/3)),e=d[64]||"",u=0,m=0;u<o.length-2;u+=3){var t=o[u],c=o[u+1],a=o[u+2],b=d[t>>2];t=d[(t&3)<<4|c>>4],c=d[(c&15)<<2|a>>6],a=d[a&63],g[m++]=b+t+c+a}switch(b=0,a=e,o.length-u){case 2:b=o[u+1],a=d[(b&15)<<2]||e;case 1:o=o[u],g[m]=d[o>>2]+d[(o&3)<<4|b>>4]+a+e}return g.join("")}function Fn(o){var d=o.length,g=3*d/4;g%3?g=Math.floor(g):"=.".indexOf(o[d-1])!=-1&&(g="=.".indexOf(o[d-2])!=-1?g-2:g-1);var e=new Uint8Array(g),u=0;return Oe(o,function(m){e[u++]=m}),u!==g?e.subarray(0,u):e}function Oe(o,d){function g(a){for(;e<o.length;){var b=o.charAt(e++),S=bn[b];if(S!=null)return S;if(!/^[\s\xa0]*$/.test(b))throw Error("Unknown base64 encoding at char: "+b)}return a}Ae();for(var e=0;;){var u=g(-1),m=g(0),t=g(64),c=g(64);if(c===64&&u===-1)break;d(u<<2|m>>4),t!=64&&(d(m<<4&240|t>>2),c!=64&&d(t<<6&192|c))}}function Ae(){if(!bn){bn={};for(var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),d=["+/=","+/","-_=","-_.","-_"],g=0;5>g;g++){var e=o.concat(d[g].split(""));hn[g]=e;for(var u=0;u<e.length;u++){var m=e[u];bn[m]===void 0&&(bn[m]=u)}}}}var xn=typeof Uint8Array=="function";function Vn(o){return xn&&o!=null&&o instanceof Uint8Array}var he;function Se(o){if(this.L=o,o!==null&&o.length===0)throw Error("ByteString should be constructed with non-empty values")}var Pe=typeof Uint8Array.prototype.slice=="function",re=0,We=0;function cn(o,d){if(o.constructor===Uint8Array)return o;if(o.constructor===ArrayBuffer)return new Uint8Array(o);if(o.constructor===Array)return new Uint8Array(o);if(o.constructor===String)return Fn(o);if(o.constructor===Se)return!d&&(d=o.L)&&d.constructor===Uint8Array?d:(d=o.L,d=d==null||Vn(d)?d:typeof d=="string"?Fn(d):null,(o=o.L=d)?new Uint8Array(o):he||(he=new Uint8Array(0)));if(o instanceof Uint8Array)return new Uint8Array(o.buffer,o.byteOffset,o.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Ke(o,d){return Error("Invalid wire type: "+o+" (at position "+d+")")}function Qt(){return Error("Failed to read varint, encoding is invalid.")}function Ze(o,d){d=d===void 0?{}:d,d=d.v===void 0?!1:d.v,this.h=null,this.g=this.i=this.j=0,this.v=d,o&&Fe(this,o)}function Fe(o,d){o.h=cn(d,o.v),o.j=0,o.i=o.h.length,o.g=o.j}Ze.prototype.reset=function(){this.g=this.j};function Mt(o){if(o.g>o.i)throw Error("Tried to read past the end of the data "+o.g+" > "+o.i)}function Ie(o){var d=o.h,g=d[o.g],e=g&127;if(128>g)return o.g+=1,Mt(o),e;if(g=d[o.g+1],e|=(g&127)<<7,128>g)return o.g+=2,Mt(o),e;if(g=d[o.g+2],e|=(g&127)<<14,128>g)return o.g+=3,Mt(o),e;if(g=d[o.g+3],e|=(g&127)<<21,128>g)return o.g+=4,Mt(o),e;if(g=d[o.g+4],o.g+=5,e|=(g&15)<<28,128>g)return Mt(o),e;if(128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++])throw Qt();return Mt(o),e}var jt=[];function ye(){this.g=[]}ye.prototype.length=function(){return this.g.length},ye.prototype.end=function(){var o=this.g;return this.g=[],o};function Le(o,d){for(;127<d;)o.g.push(d&127|128),d>>>=7;o.g.push(d)}function tn(o){var d={},g=d.W===void 0?!1:d.W;this.l={v:d.v===void 0?!1:d.v},this.W=g,d=this.l,jt.length?(g=jt.pop(),d&&(g.v=d.v),o&&Fe(g,o),o=g):o=new Ze(o,d),this.g=o,this.j=this.g.g,this.h=this.i=-1}tn.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};function Xe(o){var d=o.g;if(d.g==d.i)return!1;o.j=o.g.g;var g=Ie(o.g)>>>0;if(d=g>>>3,g&=7,!(0<=g&&5>=g))throw Ke(g,o.j);if(1>d)throw Error("Invalid field number: "+d+" (at position "+o.j+")");return o.i=d,o.h=g,!0}function Ot(o){switch(o.h){case 0:if(o.h!=0)Ot(o);else t:{o=o.g;for(var d=o.g,g=d+10;d<g;)if((o.h[d++]&128)===0){o.g=d,Mt(o);break t}throw Qt()}break;case 1:o=o.g,o.g+=8,Mt(o);break;case 2:o.h!=2?Ot(o):(d=Ie(o.g)>>>0,o=o.g,o.g+=d,Mt(o));break;case 5:o=o.g,o.g+=4,Mt(o);break;case 3:d=o.i;do{if(!Xe(o))throw Error("Unmatched start-group tag: stream EOF");if(o.h==4){if(o.i!=d)throw Error("Unmatched end-group tag");break}Ot(o)}while(1);break;default:throw Ke(o.h,o.j)}}var ze=[];function _e(){this.i=[],this.h=0,this.g=new ye}function xe(o,d){d.length!==0&&(o.i.push(d),o.h+=d.length)}function Wn(o,d){if(d=d.ba){xe(o,o.g.end());for(var g=0;g<d.length;g++)xe(o,d[g])}}var un=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Qe(o,d){Object.isFrozen(o)||(un?o[un]|=d:o.N!==void 0?o.N|=d:Object.defineProperties(o,{N:{value:d,configurable:!0,writable:!0,enumerable:!1}}))}function an(o){var d;return un?d=o[un]:d=o.N,d==null?0:d}function ve(o){return Qe(o,1),o}function Ye(o){return Array.isArray(o)?!!(an(o)&2):!1}function Ge(o){if(!Array.isArray(o))throw Error("cannot mark non-array as immutable");Qe(o,2)}function ie(o){return o!==null&&typeof o=="object"&&!Array.isArray(o)&&o.constructor===Object}var De=Object.freeze(ve([]));function qt(o){if(Ye(o.m))throw Error("Cannot mutate an immutable Message")}var Pt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function fn(o){return{value:o,configurable:!1,writable:!1,enumerable:!1}}function fe(o,d,g){return d===-1?null:d>=o.i?o.g?o.g[d]:void 0:(g===void 0?0:g)&&o.g&&(g=o.g[d],g!=null)?g:o.m[d+o.h]}function Ft(o,d,g,e){e=e===void 0?!1:e,qt(o),d<o.i&&!e?o.m[d+o.h]=g:(o.g||(o.g=o.m[o.i+o.h]={}))[d]=g}function Wt(o,d,g,e){g=g===void 0?!0:g,e=e===void 0?!1:e;var u=fe(o,d,e);return u==null&&(u=De),Ye(o.m)?g&&(Ge(u),Object.freeze(u)):(u===De||Ye(u))&&(u=ve(u.slice()),Ft(o,d,u,e)),u}function oe(o,d,g){return o=fe(o,d),o=o==null?o:+o,o==null?g===void 0?0:g:o}function we(o,d,g,e){o.j||(o.j={});var u=Ye(o.m),m=o.j[g];if(!m){e=Wt(o,g,!0,e===void 0?!1:e),m=[],u=u||Ye(e);for(var t=0;t<e.length;t++)m[t]=new d(e[t]),u&&Ge(m[t].m);u&&(Ge(m),Object.freeze(m)),o.j[g]=m}return m}function te(o,d,g,e,u){var m=m===void 0?!1:m;return qt(o),m=we(o,g,d,m),g=e||new g,o=Wt(o,d),u!=null?(m.splice(u,0,g),o.splice(u,0,g.m)):(m.push(g),o.push(g.m)),g}function se(o,d){return o=fe(o,d),o==null?0:o}function tt(o,d){return o=fe(o,d),o==null?"":o}function it(o){switch(typeof o){case"number":return isFinite(o)?o:String(o);case"object":if(o&&!Array.isArray(o)){if(Vn(o))return En(o);if(o instanceof Se){var d=o.L;return d=d==null||typeof d=="string"?d:xn&&d instanceof Uint8Array?En(d):null,(o.L=d)||""}}}return o}function ut(o){var d=ue;return d=d===void 0?St:d,de(o,d)}function _t(o,d){if(o!=null){if(Array.isArray(o))o=de(o,d);else if(ie(o)){var g={},e;for(e in o)g[e]=_t(o[e],d);o=g}else o=d(o);return o}}function de(o,d){for(var g=o.slice(),e=0;e<g.length;e++)g[e]=_t(g[e],d);return Array.isArray(o)&&an(o)&1&&ve(g),g}function ue(o){return o&&typeof o=="object"&&o.toJSON?o.toJSON():(o=it(o),Array.isArray(o)?ut(o):o)}function St(o){return Vn(o)?new Uint8Array(o):o}function me(o,d,g){o||(o=Ce),Ce=null;var e=this.constructor.h;o||(o=e?[e]:[]),this.h=(e?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=o;t:{if(e=this.m.length,o=e-1,e&&(e=this.m[o],ie(e))){this.i=o-this.h,this.g=e;break t}d!==void 0&&-1<d?(this.i=Math.max(d,o+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE}if(g)for(d=0;d<g.length;d++)if(o=g[d],o<this.i)o+=this.h,(e=this.m[o])?Array.isArray(e)&&ve(e):this.m[o]=De;else{e=this.g||(this.g=this.m[this.i+this.h]={});var u=e[o];u?Array.isArray(u)&&ve(u):e[o]=De}}me.prototype.toJSON=function(){return ut(this.m)},me.prototype.toString=function(){return this.m.toString()};var Ce;function en(){me.apply(this,arguments)}if(dt(en,me),Pt){var nn={};Object.defineProperties(en,(nn[Symbol.hasInstance]=fn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),nn))}function mn(o,d,g){if(g){var e={},u;for(u in g){var m=g[u],t=m.ha;t||(e.F=m.la||m.fa.P,m.aa?(e.U=Sn(m.aa),t=function(c){return function(a,b,S){return c.F(a,b,S,c.U)}}(e)):m.ca?(e.T=Be(m.X.g,m.ca),t=function(c){return function(a,b,S){return c.F(a,b,S,c.T)}}(e)):t=e.F,m.ha=t),t(d,o,m.X),e={F:e.F,U:e.U,T:e.T}}}Wn(d,o)}var yn=Symbol();function He(o,d,g){return o[yn]||(o[yn]=function(e,u){return d(e,u,g)})}function rn(o){var d=o[yn];if(!d){var g=p(o);d=function(e,u){return V(e,u,g)},o[yn]=d}return d}function jn(o){var d=o.aa;if(d)return rn(d);if(d=o.ka)return He(o.X.g,d,o.ca)}function on(o){var d=jn(o),g=o.X,e=o.fa.O;return d?function(u,m){return e(u,m,g,d)}:function(u,m){return e(u,m,g)}}function Je(o,d,g,e,u,m){o=o();var t=0;for(o.length&&typeof o[0]!="number"&&(g(d,o[0]),t++);t<o.length;){g=o[t++];for(var c=t+1;c<o.length&&typeof o[c]!="number";)c++;var a=o[t++];switch(c-=t,c){case 0:e(d,g,a);break;case 1:e(d,g,a,o[t++]);break;case 2:u(d,g,a,o[t++],o[t++]);break;case 3:c=o[t++];var b=o[t++],S=o[t++];Array.isArray(S)?u(d,g,a,c,b,S):m(d,g,a,c,b,S);break;case 4:m(d,g,a,o[t++],o[t++],o[t++],o[t++]);break;default:throw Error("unexpected number of binary field arguments: "+c)}}return d}var Zn=Symbol();function Sn(o){var d=o[Zn];if(!d){var g=dn(o);d=function(e,u){return E(e,u,g)},o[Zn]=d}return d}function Be(o,d){var g=o[Zn];return g||(g=function(e,u){return mn(e,u,d)},o[Zn]=g),g}var Un=Symbol();function sn(o,d){o.push(d)}function vn(o,d,g){o.push(d,g.P)}function Tn(o,d,g,e,u){var m=Sn(u),t=g.P;o.push(d,function(c,a,b){return t(c,a,b,e,m)})}function Mn(o,d,g,e,u,m){var t=Be(e,m),c=g.P;o.push(d,function(a,b,S){return c(a,b,S,e,t)})}function dn(o){var d=o[Un];return d||Je(o,o[Un]=[],sn,vn,Tn,Mn)}var Ln=Symbol();function _n(o,d){o[0]=d}function Qn(o,d,g,e){var u=g.O;o[d]=e?function(m,t,c){return u(m,t,c,e)}:u}function Yn(o,d,g,e,u,m){var t=g.O,c=rn(u);o[d]=function(a,b,S){return t(a,b,S,e,c,m)}}function Cn(o,d,g,e,u,m,t){var c=g.O,a=He(e,u,m);o[d]=function(b,S,w){return c(b,S,w,e,a,t)}}function p(o){var d=o[Ln];return d||Je(o,o[Ln]={},_n,Qn,Yn,Cn)}function V(o,d,g){for(;Xe(d)&&d.h!=4;){var e=d.i,u=g[e];if(!u){var m=g[0];m&&(m=m[e])&&(u=g[e]=on(m))}if((!u||!u(d,o,e))&&(u=d,e=o,m=u.j,Ot(u),!u.W)){var t=u.g.h;u=u.g.g,u=m===u?he||(he=new Uint8Array(0)):Pe?t.slice(m,u):new Uint8Array(t.subarray(m,u)),(m=e.ba)?m.push(u):e.ba=[u]}}return o}function W(o,d,g){if(ze.length){var e=ze.pop();o&&(Fe(e.g,o),e.i=-1,e.h=-1),o=e}else o=new tn(o);try{return V(new d,o,p(g))}finally{d=o.g,d.h=null,d.j=0,d.i=0,d.g=0,d.v=!1,o.i=-1,o.h=-1,100>ze.length&&ze.push(o)}}function E(o,d,g){for(var e=g.length,u=e%2==1,m=u?1:0;m<e;m+=2)(0,g[m+1])(d,o,g[m]);mn(o,d,u?g[0]:void 0)}function O(o,d){var g=new _e;E(o,g,dn(d)),xe(g,g.g.end()),o=new Uint8Array(g.h),d=g.i;for(var e=d.length,u=0,m=0;m<e;m++){var t=d[m];o.set(t,u),u+=t.length}return g.i=[o],o}function ot(o,d){return{O:o,P:d}}var j=ot(function(o,d,g){if(o.h!==5)return!1;o=o.g;var e=o.h[o.g],u=o.h[o.g+1],m=o.h[o.g+2],t=o.h[o.g+3];return o.g+=4,Mt(o),u=(e<<0|u<<8|m<<16|t<<24)>>>0,o=2*(u>>31)+1,e=u>>>23&255,u&=8388607,Ft(d,g,e==255?u?NaN:1/0*o:e==0?o*Math.pow(2,-149)*u:o*Math.pow(2,e-150)*(u+Math.pow(2,23))),!0},function(o,d,g){if(d=fe(d,g),d!=null){Le(o.g,8*g+5),o=o.g;var e=d;e=(g=0>e?1:0)?-e:e,e===0?0<1/e?re=We=0:(We=0,re=2147483648):isNaN(e)?(We=0,re=2147483647):34028234663852886e22<e?(We=0,re=(g<<31|2139095040)>>>0):11754943508222875e-54>e?(e=Math.round(e/Math.pow(2,-149)),We=0,re=(g<<31|e)>>>0):(d=Math.floor(Math.log(e)/Math.LN2),e*=Math.pow(2,-d),e=Math.round(8388608*e),16777216<=e&&++d,We=0,re=(g<<31|d+127<<23|e&8388607)>>>0),g=re,o.g.push(g>>>0&255),o.g.push(g>>>8&255),o.g.push(g>>>16&255),o.g.push(g>>>24&255)}}),rt=ot(function(o,d,g){if(o.h!==0)return!1;for(var e=o.g,u=128,m=0,t=o=0;4>t&&128<=u;t++)u=e.h[e.g++],Mt(e),m|=(u&127)<<7*t;if(128<=u&&(u=e.h[e.g++],Mt(e),m|=(u&127)<<28,o|=(u&127)>>4),128<=u)for(t=0;5>t&&128<=u;t++)u=e.h[e.g++],Mt(e),o|=(u&127)<<7*t+3;if(128>u)e=m>>>0,u=o>>>0,(o=u&2147483648)&&(e=~e+1>>>0,u=~u>>>0,e==0&&(u=u+1>>>0)),e=4294967296*u+(e>>>0);else throw Qt();return Ft(d,g,o?-e:e),!0},function(o,d,g){if(d=fe(d,g),d!=null&&d!=null){Le(o.g,8*g),o=o.g;var e=d;for(g=0>e,e=Math.abs(e),d=e>>>0,e=Math.floor((e-d)/4294967296),e>>>=0,g&&(e=~e>>>0,d=(~d>>>0)+1,4294967295<d&&(d=0,e++,4294967295<e&&(e=0))),re=d,We=e,g=re,d=We;0<d||127<g;)o.g.push(g&127|128),g=(g>>>7|d<<25)>>>0,d>>>=7;o.g.push(g)}}),bt=ot(function(o,d,g){return o.h!==0?!1:(Ft(d,g,Ie(o.g)),!0)},function(o,d,g){if(d=fe(d,g),d!=null&&d!=null)if(Le(o.g,8*g),o=o.g,g=d,0<=g)Le(o,g);else{for(d=0;9>d;d++)o.g.push(g&127|128),g>>=7;o.g.push(1)}}),Rt=ot(function(o,d,g){if(o.h!==2)return!1;var e=Ie(o.g)>>>0;o=o.g;var u=o.g;o.g+=e,Mt(o),o=o.h;var m;if(Hn)(m=Xn)||(m=Xn=new TextDecoder("utf-8",{fatal:!0})),m=m.decode(o.subarray(u,u+e));else{e=u+e;for(var t=[],c=null,a,b,S;u<e;)a=o[u++],128>a?t.push(a):224>a?u>=e?Te():(b=o[u++],194>a||(b&192)!==128?(u--,Te()):t.push((a&31)<<6|b&63)):240>a?u>=e-1?Te():(b=o[u++],(b&192)!==128||a===224&&160>b||a===237&&160<=b||((m=o[u++])&192)!==128?(u--,Te()):t.push((a&15)<<12|(b&63)<<6|m&63)):244>=a?u>=e-2?Te():(b=o[u++],(b&192)!==128||(a<<28)+(b-144)>>30!==0||((m=o[u++])&192)!==128||((S=o[u++])&192)!==128?(u--,Te()):(a=(a&7)<<18|(b&63)<<12|(m&63)<<6|S&63,a-=65536,t.push((a>>10&1023)+55296,(a&1023)+56320))):Te(),8192<=t.length&&(c=ln(c,t),t.length=0);m=ln(c,t)}return Ft(d,g,m),!0},function(o,d,g){if(d=fe(d,g),d!=null){var e=!1;if(e=e===void 0?!1:e,kn){if(e&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(d))throw Error("Found an unpaired surrogate");d=(In||(In=new TextEncoder)).encode(d)}else{for(var u=0,m=new Uint8Array(3*d.length),t=0;t<d.length;t++){var c=d.charCodeAt(t);if(128>c)m[u++]=c;else{if(2048>c)m[u++]=c>>6|192;else{if(55296<=c&&57343>=c){if(56319>=c&&t<d.length){var a=d.charCodeAt(++t);if(56320<=a&&57343>=a){c=1024*(c-55296)+a-56320+65536,m[u++]=c>>18|240,m[u++]=c>>12&63|128,m[u++]=c>>6&63|128,m[u++]=c&63|128;continue}else t--}if(e)throw Error("Found an unpaired surrogate");c=65533}m[u++]=c>>12|224,m[u++]=c>>6&63|128}m[u++]=c&63|128}}d=m.subarray(0,u)}Le(o.g,8*g+2),Le(o.g,d.length),xe(o,o.g.end()),xe(o,d)}}),Ut=ot(function(o,d,g,e,u){if(o.h!==2)return!1;d=te(d,g,e),g=o.g.i,e=Ie(o.g)>>>0;var m=o.g.g+e,t=m-g;if(0>=t&&(o.g.i=m,u(d,o),t=m-o.g.g),t)throw Error("Message parsing ended unexpectedly. Expected to read "+(e+" bytes, instead read "+(e-t)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return o.g.g=m,o.g.i=g,!0},function(o,d,g,e,u){if(d=we(d,e,g),d!=null)for(e=0;e<d.length;e++){var m=o;Le(m.g,8*g+2);var t=m.g.end();xe(m,t),t.push(m.h),m=t,u(d[e],o),t=o;var c=m.pop();for(c=t.h+t.g.length()-c;127<c;)m.push(c&127|128),c>>>=7,t.h++;m.push(c),t.h++}});function Jt(){en.apply(this,arguments)}if(dt(Jt,en),Pt){var $t={};Object.defineProperties(Jt,($t[Symbol.hasInstance]=fn(Object[Symbol.hasInstance]),$t))}function kt(o){Jt.call(this,o)}dt(kt,Jt);function Tt(){return[1,bt,2,j,3,Rt,4,Rt]}function Et(o){Jt.call(this,o,-1,ae)}dt(Et,Jt),Et.prototype.addClassification=function(o,d){return te(this,1,kt,o,d),this};function Dt(){return[1,Ut,kt,Tt]}var ae=[1];function pe(o){Jt.call(this,o)}dt(pe,Jt);function ge(){return[1,j,2,j,3,j,4,j,5,j]}function ke(o){Jt.call(this,o,-1,y)}dt(ke,Jt);function h(){return[1,Ut,pe,ge]}var y=[1];function G(o){Jt.call(this,o)}dt(G,Jt);function C(){return[1,j,2,j,3,j,4,j,5,j,6,rt]}var B=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],_=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],M=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],q=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ct=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],s=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],X=[].concat(J(B),J(_),J(M),J(q),J(ct),J(s));function R(o,d,g){if(g=o.createShader(g===0?o.VERTEX_SHADER:o.FRAGMENT_SHADER),o.shaderSource(g,d),o.compileShader(g),!o.getShaderParameter(g,o.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
53
|
+
`+m.getProgramInfoLog(a));t=e.m=a,m.useProgram(t),c=m.getUniformLocation(t,"sampler0"),e.j={I:m.getAttribLocation(t,"aVertex"),H:m.getAttribLocation(t,"aTex"),ca:c},e.s=m.createBuffer(),m.bindBuffer(m.ARRAY_BUFFER,e.s),m.enableVertexAttribArray(e.j.I),m.vertexAttribPointer(e.j.I,2,m.FLOAT,!1,0,0),m.bufferData(m.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),m.STATIC_DRAW),m.bindBuffer(m.ARRAY_BUFFER,null),e.o=m.createBuffer(),m.bindBuffer(m.ARRAY_BUFFER,e.o),m.enableVertexAttribArray(e.j.H),m.vertexAttribPointer(e.j.H,2,m.FLOAT,!1,0,0),m.bufferData(m.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),m.STATIC_DRAW),m.bindBuffer(m.ARRAY_BUFFER,null),m.uniform1i(c,0)}t=e.j,m.useProgram(e.m),m.canvas.width=u.width,m.canvas.height=u.height,m.viewport(0,0,u.width,u.height),m.activeTexture(m.TEXTURE0),e.h.bindTexture2d(u.glName),m.enableVertexAttribArray(t.I),m.bindBuffer(m.ARRAY_BUFFER,e.s),m.vertexAttribPointer(t.I,2,m.FLOAT,!1,0,0),m.enableVertexAttribArray(t.H),m.bindBuffer(m.ARRAY_BUFFER,e.o),m.vertexAttribPointer(t.H,2,m.FLOAT,!1,0,0),m.bindFramebuffer(m.DRAW_FRAMEBUFFER?m.DRAW_FRAMEBUFFER:m.FRAMEBUFFER,null),m.clearColor(0,0,0,0),m.clear(m.COLOR_BUFFER_BIT),m.colorMask(!0,!0,!0,!0),m.drawArrays(m.TRIANGLE_FAN,0,4),m.disableVertexAttribArray(t.I),m.disableVertexAttribArray(t.H),m.bindBuffer(m.ARRAY_BUFFER,null),e.h.bindTexture2d(0)}function yt(e){this.g=e}var Xt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Kt(e,u){return u+e}function It(e,u){window[e]=u}function ht(e){var u=document.createElement("script");return u.setAttribute("src",e),u.setAttribute("crossorigin","anonymous"),new Promise(function(m){u.addEventListener("load",function(){m()},!1),u.addEventListener("error",function(){m()},!1),document.body.appendChild(u)})}function Wt(){return Zt(function(e){switch(e.g){case 1:return e.m=2,O(e,WebAssembly.instantiate(Xt),4);case 4:e.g=3,e.m=0;break;case 2:return e.m=0,e.j=null,e.return(!1);case 3:return e.return(!0)}})}function xt(e){if(this.g=e,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=e&&e.locateFile||Kt,typeof window=="object")var u=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")u=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=u,e.options){u=T(Object.keys(e.options));for(var m=u.next();!m.done;m=u.next()){m=m.value;var t=e.options[m].default;t!==void 0&&(this.j[m]=typeof t=="function"?t():t)}}}i=xt.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function wt(e){var u,m,t,c,a,b,S,L,F,U,z;return Zt(function(Q){switch(Q.g){case 1:return e.R?(u=e.g.files===void 0?[]:typeof e.g.files=="function"?e.g.files(e.j):e.g.files,O(Q,Wt(),2)):Q.return();case 2:if(m=Q.h,typeof window=="object")return It("createMediapipeSolutionsWasm",{locateFile:e.locateFile}),It("createMediapipeSolutionsPackedAssets",{locateFile:e.locateFile}),b=u.filter(function(D){return D.data!==void 0}),S=u.filter(function(D){return D.data===void 0}),L=Promise.all(b.map(function(D){var st=v(e,D.url);if(D.path!==void 0){var ft=D.path;st=st.then(function(mt){return e.overrideFile(ft,mt),Promise.resolve(mt)})}return st})),F=Promise.all(S.map(function(D){return D.simd===void 0||D.simd&&m||!D.simd&&!m?ht(e.locateFile(D.url,e.S)):Promise.resolve()})).then(function(){var D,st,ft;return Zt(function(mt){if(mt.g==1)return D=window.createMediapipeSolutionsWasm,st=window.createMediapipeSolutionsPackedAssets,ft=e,O(mt,D(st),2);ft.h=mt.h,mt.g=0})}),U=function(){return Zt(function(D){return e.g.graph&&e.g.graph.url?D=O(D,v(e,e.g.graph.url),0):(D.g=0,D=void 0),D})}(),O(Q,Promise.all([F,L,U]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return t=u.filter(function(D){return D.simd===void 0||D.simd&&m||!D.simd&&!m}).map(function(D){return e.locateFile(D.url,e.S)}),importScripts.apply(null,J(t)),c=e,O(Q,createMediapipeSolutionsWasm(Module),6);case 6:c.h=Q.h,e.l=new OffscreenCanvas(1,1),e.h.canvas=e.l,a=e.h.GL.createContext(e.l,{antialias:!1,alpha:!1,aa:typeof WebGL2RenderingContext<"u"?2:1}),e.h.GL.makeContextCurrent(a),Q.g=4;break;case 7:if(e.l=document.createElement("canvas"),z=e.l.getContext("webgl2",{}),!z&&(z=e.l.getContext("webgl",{}),!z))return alert("Failed to create WebGL canvas context when passing video frame."),Q.return();e.D=z,e.h.canvas=e.l,e.h.createContext(e.l,!0,!0,{});case 4:e.i=new e.h.SolutionWasm,e.R=!1,Q.g=0}})}function Ht(e){var u,m,t,c,a,b,S,L;return Zt(function(F){if(F.g==1){if(e.g.graph&&e.g.graph.url&&e.P===e.g.graph.url)return F.return();if(e.o=!0,!e.g.graph||!e.g.graph.url){F.g=2;return}return e.P=e.g.graph.url,O(F,v(e,e.g.graph.url),3)}for(F.g!=2&&(u=F.h,e.i.loadGraph(u)),m=T(Object.keys(e.B)),t=m.next();!t.done;t=m.next())c=t.value,e.i.overrideFile(c,e.B[c]);if(e.B={},e.g.listeners)for(a=T(e.g.listeners),b=a.next();!b.done;b=a.next())S=b.value,N(e,S);L=e.j,e.j={},e.setOptions(L),F.g=0})}i.reset=function(){var e=this;return Zt(function(u){e.i&&(e.i.reset(),e.m={},e.s={}),u.g=0})},i.setOptions=function(e,u){var m=this;if(u=u||this.g.options){for(var t=[],c=[],a={},b=T(Object.keys(e)),S=b.next();!S.done;a={K:a.K,L:a.L},S=b.next()){var L=S.value;L in this.j&&this.j[L]===e[L]||(this.j[L]=e[L],S=u[L],S!==void 0&&(S.onChange&&(a.K=S.onChange,a.L=e[L],t.push(function(F){return function(){var U;return Zt(function(z){if(z.g==1)return O(z,F.K(F.L),2);U=z.h,U===!0&&(m.o=!0),z.g=0})}}(a))),S.graphOptionXref&&(L={valueNumber:S.type===1?e[L]:0,valueBoolean:S.type===0?e[L]:!1,valueString:S.type===2?e[L]:""},S=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),S.graphOptionXref),L),c.push(S))))}(t.length!==0||c.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(c),this.v=(this.v===void 0?[]:this.v).concat(t))}};function l(e){var u,m,t,c,a,b,S;return Zt(function(L){switch(L.g){case 1:if(!e.o)return L.return();if(!e.v){L.g=2;break}u=T(e.v),m=u.next();case 3:if(m.done){L.g=5;break}return t=m.value,O(L,t(),4);case 4:m=u.next(),L.g=3;break;case 5:e.v=void 0;case 2:if(e.A){for(c=new e.h.GraphOptionChangeRequestList,a=T(e.A),b=a.next();!b.done;b=a.next())S=b.value,c.push_back(S);e.i.changeOptions(c),c.delete(),e.A=void 0}e.o=!1,L.g=0}})}i.initialize=function(){var e=this;return Zt(function(u){return u.g==1?O(u,wt(e),2):u.g!=3?O(u,Ht(e),3):O(u,l(e),0)})};function v(e,u){var m,t;return Zt(function(c){return u in e.F?c.return(e.F[u]):(m=e.locateFile(u,""),t=fetch(m).then(function(a){return a.arrayBuffer()}),e.F[u]=t,c.return(t))})}i.overrideFile=function(e,u){this.i?this.i.overrideFile(e,u):this.B[e]=u},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(e,u){var m=this,t,c,a,b,S,L,F,U,z;return Zt(function(Q){switch(Q.g){case 1:return m.g.inputs?(t=1e3*(u==null?performance.now():u),O(Q,m.C,2)):Q.return();case 2:return O(Q,m.initialize(),3);case 3:for(c=new m.h.PacketDataList,a=T(Object.keys(e)),b=a.next();!b.done;b=a.next())if(S=b.value,L=m.g.inputs[S]){t:{var D=e[S];switch(L.type){case"video":var st=m.m[L.stream];if(st||(st=new B(m.h,m.D),m.m[L.stream]=st),st.l===0&&(st.l=st.h.createTexture()),typeof HTMLVideoElement<"u"&&D instanceof HTMLVideoElement)var ft=D.videoWidth,mt=D.videoHeight;else typeof HTMLImageElement<"u"&&D instanceof HTMLImageElement?(ft=D.naturalWidth,mt=D.naturalHeight):(ft=D.width,mt=D.height);mt={glName:st.l,width:ft,height:mt},ft=st.g,ft.canvas.width=mt.width,ft.canvas.height=mt.height,ft.activeTexture(ft.TEXTURE0),st.h.bindTexture2d(st.l),ft.texImage2D(ft.TEXTURE_2D,0,ft.RGBA,ft.RGBA,ft.UNSIGNED_BYTE,D),st.h.bindTexture2d(0),st=mt;break t;case"detections":for(st=m.m[L.stream],st||(st=new yt(m.h),m.m[L.stream]=st),st.data||(st.data=new st.g.DetectionListData),st.data.reset(D.length),mt=0;mt<D.length;++mt){ft=D[mt];var Gt=st.data,vt=Gt.setBoundingBox,At=mt,le=ft.T,ce=new Tt;if(St(ce,1,le.X),St(ce,2,le.Y),St(ce,3,le.height),St(ce,4,le.width),St(ce,5,le.rotation),St(ce,6,le.W),le=rn(ce,Dt),vt.call(Gt,At,le),ft.O)for(Gt=0;Gt<ft.O.length;++Gt){ce=ft.O[Gt];var Ne=!!ce.visibility;vt=st.data,At=vt.addNormalizedLandmark,le=mt,ce=Object.assign(Object.assign({},ce),{visibility:Ne?ce.visibility:0}),Ne=new j,St(Ne,1,ce.x),St(Ne,2,ce.y),St(Ne,3,ce.z),ce.visibility&&St(Ne,4,ce.visibility),ce=rn(Ne,bt),At.call(vt,le,ce)}if(ft.M)for(Gt=0;Gt<ft.M.length;++Gt)vt=st.data,At=vt.addClassification,le=mt,ce=ft.M[Gt],Ne=new wn,St(Ne,2,ce.score),ce.index&&St(Ne,1,ce.index),ce.label&&St(Ne,3,ce.label),ce.displayName&&St(Ne,4,ce.displayName),ce=rn(Ne,p),At.call(vt,le,ce)}st=st.data;break t;default:st={}}}switch(F=st,U=L.stream,L.type){case"video":c.pushTexture2d(Object.assign(Object.assign({},F),{stream:U,timestamp:t}));break;case"detections":z=F,z.stream=U,z.timestamp=t,c.pushDetectionList(z);break;default:throw Error("Unknown input config type: '"+L.type+"'")}}return m.i.send(c),O(Q,m.C,4);case 4:c.delete(),Q.g=0}})};function I(e,u,m){var t,c,a,b,S,L,F,U,z,Q,D,st,ft,mt;return Zt(function(Gt){switch(Gt.g){case 1:if(!m)return Gt.return(u);for(t={},c=0,a=T(Object.keys(m)),b=a.next();!b.done;b=a.next())S=b.value,L=m[S],typeof L!="string"&&L.type==="texture"&&u[L.stream]!==void 0&&++c;1<c&&(e.G=!1),F=T(Object.keys(m)),b=F.next();case 2:if(b.done){Gt.g=4;break}if(U=b.value,z=m[U],typeof z=="string")return ft=t,mt=U,O(Gt,Y(e,U,u[z]),14);if(Q=u[z.stream],z.type==="detection_list"){if(Q){for(var vt=Q.getRectList(),At=Q.getLandmarksList(),le=Q.getClassificationsList(),ce=[],Ne=0;Ne<vt.size();++Ne){var Rn=jn(vt.get(Ne),Tt,ae);Rn={T:{X:ue(Rn,1),Y:ue(Rn,2),height:ue(Rn,3),width:ue(Rn,4),rotation:ue(Rn,5,0),W:de(Rn,6,0)},O:A(At.get(Ne)),M:w(jn(le.get(Ne),V,P))},ce.push(Rn)}vt=ce}else vt=[];t[U]=vt,Gt.g=7;break}if(z.type==="proto_list"){if(Q){for(vt=Array(Q.size()),At=0;At<Q.size();At++)vt[At]=Q.get(At);Q.delete()}else vt=[];t[U]=vt,Gt.g=7;break}if(Q===void 0){Gt.g=3;break}if(z.type==="float_list"){t[U]=Q,Gt.g=7;break}if(z.type==="proto"){t[U]=Q,Gt.g=7;break}if(z.type!=="texture")throw Error("Unknown output config type: '"+z.type+"'");return D=e.s[U],D||(D=new B(e.h,e.D),e.s[U]=D),O(Gt,nt(D,Q,e.G),13);case 13:st=Gt.h,t[U]=st;case 7:z.transform&&t[U]&&(t[U]=z.transform(t[U])),Gt.g=3;break;case 14:ft[mt]=Gt.h;case 3:b=F.next(),Gt.g=2;break;case 4:return Gt.return(t)}})}function Y(e,u,m){var t;return Zt(function(c){return typeof m=="number"||m instanceof Uint8Array||m instanceof e.h.Uint8BlobList?c.return(m):m instanceof e.h.Texture2dDataOut?(t=e.s[u],t||(t=new B(e.h,e.D),e.s[u]=t),c.return(nt(t,m,e.G))):c.return(void 0)})}function N(e,u){for(var m=u.name||"$",t=[].concat(J(u.wants)),c=new e.h.StringList,a=T(u.wants),b=a.next();!b.done;b=a.next())c.push_back(b.value);a=e.h.PacketListener.implement({onResults:function(S){for(var L={},F=0;F<u.wants.length;++F)L[t[F]]=S.get(F);var U=e.listeners[m];U&&(e.C=I(e,L,u.outs).then(function(z){z=U(z);for(var Q=0;Q<u.wants.length;++Q){var D=L[t[Q]];typeof D=="object"&&D.hasOwnProperty&&D.hasOwnProperty("delete")&&D.delete()}z&&(e.C=z)}))}}),e.i.attachMultiListener(c,a),c.delete()}i.onResults=function(e,u){this.listeners[u||"$"]=e},Ct("Solution",xt),Ct("OptionType",{BOOL:0,NUMBER:1,Z:2,0:"BOOL",1:"NUMBER",2:"STRING"});function o(e){return e.map(d)}function d(e){e=jn(e,y,C);var u=e.getMesh();if(!u)return e;var m=new Float32Array(u.getVertexBufferList());u.getVertexBufferList=function(){return m};var t=new Uint32Array(u.getIndexBufferList());return u.getIndexBufferList=function(){return t},e}function g(e){var u=this;e=e||{},this.g=new xt({locateFile:e.locateFile,files:[{url:"holistic_solution_packed_assets_loader.js"},{simd:!1,url:"holistic_solution_wasm_bin.js"},{simd:!0,url:"holistic_solution_simd_wasm_bin.js"}],graph:{url:"holistic.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:"left_hand_landmarks right_hand_landmarks face_landmarks pose_landmarks world_landmarks segmentation_mask image_transformed multi_face_geometry".split(" "),outs:{image:{type:"texture",stream:"image_transformed"},leftHandLandmarks:{type:"proto",stream:"left_hand_landmarks",transform:A},rightHandLandmarks:{type:"proto",stream:"right_hand_landmarks",transform:A},faceLandmarks:{type:"proto",stream:"face_landmarks",transform:A},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:A},ea:{type:"proto",stream:"world_landmarks",transform:A},segmentationMask:{type:"texture",stream:"segmentation_mask"},multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:o}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},enableFaceGeometry:{type:0,graphOptionXref:{calculatorName:"EnableFaceGeometryConstant",calculatorType:"ConstantSidePacketCalculator",fieldName:"bool_value"}},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelComplexity:{type:1,default:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(m){var t,c,a,b;return Zt(function(S){if(S.g==1){switch(t="",m){case 1:t="pose_landmark_full.tflite";break;case 2:t="pose_landmark_heavy.tflite";break;default:t="pose_landmark_lite.tflite"}return c="third_party/mediapipe/modules/pose_landmark/"+t,a=u.g.locateFile(t,""),O(S,fetch(a),3)}return S.g!=2?O(S,S.h.arrayBuffer(),2):(b=S.h,u.g.overrideFile(c,b),O(S,u.g.reset(),0))})}},smoothLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothLandmarks",fieldName:"bool_value"}},enableSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorEnableSegmentation",fieldName:"bool_value"}},smoothSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothSegmentation",fieldName:"bool_value"}},refineFaceLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorRefineFaceLandmarks",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"holisticlandmarkgpu__poselandmarkgpu__posedetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"holisticlandmarkgpu__poselandmarkgpu__poselandmarkbyroigpu__tensorstoposelandmarksandsegmentation__ThresholdingCalculator",fieldName:"threshold"}},cameraNear:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"near"}},cameraFar:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"far"}},cameraVerticalFovDegrees:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"vertical_fov_degrees"}}}})}i=g.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(e){this.g.onResults(e)},i.initialize=function(){var e=this;return Zt(function(u){return O(u,e.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(e){var u=this;return Zt(function(m){return O(m,u.g.send(e),0)})},i.setOptions=function(e){this.g.setOptions(e)},Ct("Holistic",g),Ct("FACE_GEOMETRY",{Layout:{COLUMN_MAJOR:0,ROW_MAJOR:1,0:"COLUMN_MAJOR",1:"ROW_MAJOR"},PrimitiveType:{TRIANGLE:0,0:"TRIANGLE"},VertexType:{VERTEX_PT:0,0:"VERTEX_PT"},DEFAULT_CAMERA_PARAMS:{verticalFovDegrees:63,near:1,far:1e4}}),Ct("FACEMESH_LIPS",K),Ct("FACEMESH_LEFT_EYE",_),Ct("FACEMESH_LEFT_EYEBROW",M),Ct("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Ct("FACEMESH_RIGHT_EYE",q),Ct("FACEMESH_RIGHT_EYEBROW",ct),Ct("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Ct("FACEMESH_FACE_OVAL",s),Ct("FACEMESH_CONTOURS",X),Ct("FACEMESH_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Ct("HAND_CONNECTIONS",[[0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]]),Ct("POSE_CONNECTIONS",[[0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]]),Ct("POSE_LANDMARKS",{NOSE:0,LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,LEFT_EAR:7,RIGHT_EAR:8,LEFT_RIGHT:9,RIGHT_LEFT:10,LEFT_SHOULDER:11,RIGHT_SHOULDER:12,LEFT_ELBOW:13,RIGHT_ELBOW:14,LEFT_WRIST:15,RIGHT_WRIST:16,LEFT_PINKY:17,RIGHT_PINKY:18,LEFT_INDEX:19,RIGHT_INDEX:20,LEFT_THUMB:21,RIGHT_THUMB:22,LEFT_HIP:23,RIGHT_HIP:24,LEFT_KNEE:25,RIGHT_KNEE:26,LEFT_ANKLE:27,RIGHT_ANKLE:28,LEFT_HEEL:29,RIGHT_HEEL:30,LEFT_FOOT_INDEX:31,RIGHT_FOOT_INDEX:32}),Ct("POSE_LANDMARKS_LEFT",{LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,LEFT_EAR:7,LEFT_RIGHT:9,LEFT_SHOULDER:11,LEFT_ELBOW:13,LEFT_WRIST:15,LEFT_PINKY:17,LEFT_INDEX:19,LEFT_THUMB:21,LEFT_HIP:23,LEFT_KNEE:25,LEFT_ANKLE:27,LEFT_HEEL:29,LEFT_FOOT_INDEX:31}),Ct("POSE_LANDMARKS_RIGHT",{RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,RIGHT_EAR:8,RIGHT_LEFT:10,RIGHT_SHOULDER:12,RIGHT_ELBOW:14,RIGHT_WRIST:16,RIGHT_PINKY:18,RIGHT_INDEX:20,RIGHT_THUMB:22,RIGHT_HIP:24,RIGHT_KNEE:26,RIGHT_ANKLE:28,RIGHT_HEEL:30,RIGHT_FOOT_INDEX:32}),Ct("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Ct("matrixDataToMatrix",function(e){for(var u=e.getCols(),m=e.getRows(),t=e.getPackedDataList(),c=[],a=0;a<m;a++)c.push(Array(u));for(a=0;a<m;a++)for(var b=0;b<u;b++){var S=e.getLayout()===1?a*u+b:b*m+a;c[a][b]=t[S]}return c}),Ct("VERSION","0.5.1635989137")}).call(Wi);const Vi={};(function(){var i;function n(o){var d=0;return function(){return d<o.length?{done:!1,value:o[d++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(o,d,g){return o==Array.prototype||o==Object.prototype||(o[d]=g.value),o};function f(o){o=[typeof globalThis=="object"&&globalThis,o,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var d=0;d<o.length;++d){var g=o[d];if(g&&g.Math==Math)return g}throw Error("Cannot find global object")}var Z=f(this);function x(o,d){if(d)t:{var g=Z;o=o.split(".");for(var e=0;e<o.length-1;e++){var u=o[e];if(!(u in g))break t;g=g[u]}o=o[o.length-1],e=g[o],d=d(e),d!=e&&d!=null&&r(g,o,{configurable:!0,writable:!0,value:d})}}x("Symbol",function(o){function d(m){if(this instanceof d)throw new TypeError("Symbol is not a constructor");return new g(e+(m||"")+"_"+u++,m)}function g(m,t){this.g=m,r(this,"description",{configurable:!0,writable:!0,value:t})}if(o)return o;g.prototype.toString=function(){return this.g};var e="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",u=0;return d}),x("Symbol.iterator",function(o){if(o)return o;o=Symbol("Symbol.iterator");for(var d="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),g=0;g<d.length;g++){var e=Z[d[g]];typeof e=="function"&&typeof e.prototype[o]!="function"&&r(e.prototype,o,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return o});function H(o){return o={next:o},o[Symbol.iterator]=function(){return this},o}function T(o){var d=typeof Symbol<"u"&&Symbol.iterator&&o[Symbol.iterator];return d?d.call(o):{next:n(o)}}function J(o){if(!(o instanceof Array)){o=T(o);for(var d,g=[];!(d=o.next()).done;)g.push(d.value);o=g}return o}var et=typeof Object.create=="function"?Object.create:function(o){function d(){}return d.prototype=o,new d},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(o,d){if(o.__proto__=d,o.__proto__!==d)throw new TypeError(o+" is not extensible");return o}:null}var at=lt;function dt(o,d){if(o.prototype=et(d.prototype),o.prototype.constructor=o,at)at(o,d);else for(var g in d)if(g!="prototype")if(Object.defineProperties){var e=Object.getOwnPropertyDescriptor(d,g);e&&Object.defineProperty(o,g,e)}else o[g]=d[g];o.na=d.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function Nt(o){if(o.l)throw new TypeError("Generator is already running");o.l=!0}Bt.prototype.s=function(o){this.h=o};function ee(o,d){o.j={da:d,ea:!0},o.g=o.o||o.u}Bt.prototype.return=function(o){this.j={return:o},this.g=this.u};function O(o,d,g){return o.g=g,{value:d}}function $e(o){this.g=new Bt,this.h=o}function je(o,d){Nt(o.g);var g=o.g.i;return g?We(o,"return"in g?g.return:function(e){return{value:e,done:!0}},d,o.g.return):(o.g.return(d),zt(o))}function We(o,d,g,e){try{var u=d.call(o.g.i,g);if(!(u instanceof Object))throw new TypeError("Iterator result "+u+" is not an object");if(!u.done)return o.g.l=!1,u;var m=u.value}catch(t){return o.g.i=null,ee(o.g,t),zt(o)}return o.g.i=null,e.call(o.g,m),zt(o)}function zt(o){for(;o.g.g;)try{var d=o.h(o.g);if(d)return o.g.l=!1,{value:d.value,done:!1}}catch(g){o.g.h=void 0,ee(o.g,g)}if(o.g.l=!1,o.g.j){if(d=o.g.j,o.g.j=null,d.ea)throw d.da;return{value:d.return,done:!0}}return{value:void 0,done:!0}}function Jn(o){this.next=function(d){return Nt(o.g),o.g.i?d=We(o,o.g.i.next,d,o.g.s):(o.g.s(d),d=zt(o)),d},this.throw=function(d){return Nt(o.g),o.g.i?d=We(o,o.g.i.throw,d,o.g.s):(ee(o.g,d),d=zt(o)),d},this.return=function(d){return je(o,d)},this[Symbol.iterator]=function(){return this}}function ne(o){function d(e){return o.next(e)}function g(e){return o.throw(e)}return new Promise(function(e,u){function m(t){t.done?e(t.value):Promise.resolve(t.value).then(d,g).then(m,u)}m(o.next())})}function Zt(o){return ne(new Jn(new $e(o)))}x("Promise",function(o){function d(t){this.h=0,this.i=void 0,this.g=[],this.s=!1;var c=this.j();try{t(c.resolve,c.reject)}catch(a){c.reject(a)}}function g(){this.g=null}function e(t){return t instanceof d?t:new d(function(c){c(t)})}if(o)return o;g.prototype.h=function(t){if(this.g==null){this.g=[];var c=this;this.i(function(){c.l()})}this.g.push(t)};var u=Z.setTimeout;g.prototype.i=function(t){u(t,0)},g.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var c=0;c<t.length;++c){var a=t[c];t[c]=null;try{a()}catch(b){this.j(b)}}}this.g=null},g.prototype.j=function(t){this.i(function(){throw t})},d.prototype.j=function(){function t(b){return function(S){a||(a=!0,b.call(c,S))}}var c=this,a=!1;return{resolve:t(this.D),reject:t(this.l)}},d.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof d)this.H(t);else{t:switch(typeof t){case"object":var c=t!=null;break t;case"function":c=!0;break t;default:c=!1}c?this.A(t):this.o(t)}},d.prototype.A=function(t){var c=void 0;try{c=t.then}catch(a){this.l(a);return}typeof c=="function"?this.I(c,t):this.o(t)},d.prototype.l=function(t){this.u(2,t)},d.prototype.o=function(t){this.u(1,t)},d.prototype.u=function(t,c){if(this.h!=0)throw Error("Cannot settle("+t+", "+c+"): Promise already settled in state"+this.h);this.h=t,this.i=c,this.h===2&&this.G(),this.B()},d.prototype.G=function(){var t=this;u(function(){if(t.C()){var c=Z.console;typeof c<"u"&&c.error(t.i)}},1)},d.prototype.C=function(){if(this.s)return!1;var t=Z.CustomEvent,c=Z.Event,a=Z.dispatchEvent;return typeof a>"u"?!0:(typeof t=="function"?t=new t("unhandledrejection",{cancelable:!0}):typeof c=="function"?t=new c("unhandledrejection",{cancelable:!0}):(t=Z.document.createEvent("CustomEvent"),t.initCustomEvent("unhandledrejection",!1,!0,t)),t.promise=this,t.reason=this.i,a(t))},d.prototype.B=function(){if(this.g!=null){for(var t=0;t<this.g.length;++t)m.h(this.g[t]);this.g=null}};var m=new g;return d.prototype.H=function(t){var c=this.j();t.M(c.resolve,c.reject)},d.prototype.I=function(t,c){var a=this.j();try{t.call(c,a.resolve,a.reject)}catch(b){a.reject(b)}},d.prototype.then=function(t,c){function a(F,U){return typeof F=="function"?function(z){try{b(F(z))}catch(Q){S(Q)}}:U}var b,S,L=new d(function(F,U){b=F,S=U});return this.M(a(t,b),a(c,S)),L},d.prototype.catch=function(t){return this.then(void 0,t)},d.prototype.M=function(t,c){function a(){switch(b.h){case 1:t(b.i);break;case 2:c(b.i);break;default:throw Error("Unexpected state: "+b.h)}}var b=this;this.g==null?m.h(a):this.g.push(a),this.s=!0},d.resolve=e,d.reject=function(t){return new d(function(c,a){a(t)})},d.race=function(t){return new d(function(c,a){for(var b=T(t),S=b.next();!S.done;S=b.next())e(S.value).M(c,a)})},d.all=function(t){var c=T(t),a=c.next();return a.done?e([]):new d(function(b,S){function L(z){return function(Q){F[z]=Q,U--,U==0&&b(F)}}var F=[],U=0;do F.push(void 0),U++,e(a.value).M(L(F.length-1),S),a=c.next();while(!a.done)})},d});function qe(o,d){o instanceof String&&(o+="");var g=0,e=!1,u={next:function(){if(!e&&g<o.length){var m=g++;return{value:d(m,o[m]),done:!1}}return e=!0,{done:!0,value:void 0}}};return u[Symbol.iterator]=function(){return u},u}var zn=typeof Object.assign=="function"?Object.assign:function(o,d){for(var g=1;g<arguments.length;g++){var e=arguments[g];if(e)for(var u in e)Object.prototype.hasOwnProperty.call(e,u)&&(o[u]=e[u])}return o};x("Object.assign",function(o){return o||zn}),x("Object.is",function(o){return o||function(d,g){return d===g?d!==0||1/d===1/g:d!==d&&g!==g}}),x("Array.prototype.includes",function(o){return o||function(d,g){var e=this;e instanceof String&&(e=String(e));var u=e.length;for(g=g||0,0>g&&(g=Math.max(g+u,0));g<u;g++){var m=e[g];if(m===d||Object.is(m,d))return!0}return!1}}),x("String.prototype.includes",function(o){return o||function(d,g){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(d instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(d,g||0)!==-1}}),x("Array.prototype.keys",function(o){return o||function(){return qe(this,function(d){return d})}});var Re=this||self;function Ct(o,d){o=o.split(".");var g=Re;o[0]in g||typeof g.execScript>"u"||g.execScript("var "+o[0]);for(var e;o.length&&(e=o.shift());)o.length||d===void 0?g[e]&&g[e]!==Object.prototype[e]?g=g[e]:g=g[e]={}:g[e]=d}function Te(){throw Error("Invalid UTF8")}function ln(o,d){return d=String.fromCharCode.apply(null,d),o==null?d:o+d}var Xn,Hn=typeof TextDecoder<"u",In,kn=typeof TextEncoder<"u",hn={},bn=null;function En(o){var d;d===void 0&&(d=0),Ae(),d=hn[d];for(var g=Array(Math.floor(o.length/3)),e=d[64]||"",u=0,m=0;u<o.length-2;u+=3){var t=o[u],c=o[u+1],a=o[u+2],b=d[t>>2];t=d[(t&3)<<4|c>>4],c=d[(c&15)<<2|a>>6],a=d[a&63],g[m++]=b+t+c+a}switch(b=0,a=e,o.length-u){case 2:b=o[u+1],a=d[(b&15)<<2]||e;case 1:o=o[u],g[m]=d[o>>2]+d[(o&3)<<4|b>>4]+a+e}return g.join("")}function Fn(o){var d=o.length,g=3*d/4;g%3?g=Math.floor(g):"=.".indexOf(o[d-1])!=-1&&(g="=.".indexOf(o[d-2])!=-1?g-2:g-1);var e=new Uint8Array(g),u=0;return Pe(o,function(m){e[u++]=m}),u!==g?e.subarray(0,u):e}function Pe(o,d){function g(a){for(;e<o.length;){var b=o.charAt(e++),S=bn[b];if(S!=null)return S;if(!/^[\s\xa0]*$/.test(b))throw Error("Unknown base64 encoding at char: "+b)}return a}Ae();for(var e=0;;){var u=g(-1),m=g(0),t=g(64),c=g(64);if(c===64&&u===-1)break;d(u<<2|m>>4),t!=64&&(d(m<<4&240|t>>2),c!=64&&d(t<<6&192|c))}}function Ae(){if(!bn){bn={};for(var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),d=["+/=","+/","-_=","-_.","-_"],g=0;5>g;g++){var e=o.concat(d[g].split(""));hn[g]=e;for(var u=0;u<e.length;u++){var m=e[u];bn[m]===void 0&&(bn[m]=u)}}}}var xn=typeof Uint8Array=="function";function Wn(o){return xn&&o!=null&&o instanceof Uint8Array}var he;function Se(o){if(this.L=o,o!==null&&o.length===0)throw Error("ByteString should be constructed with non-empty values")}var Oe=typeof Uint8Array.prototype.slice=="function",re=0,Ve=0;function cn(o,d){if(o.constructor===Uint8Array)return o;if(o.constructor===ArrayBuffer)return new Uint8Array(o);if(o.constructor===Array)return new Uint8Array(o);if(o.constructor===String)return Fn(o);if(o.constructor===Se)return!d&&(d=o.L)&&d.constructor===Uint8Array?d:(d=o.L,d=d==null||Wn(d)?d:typeof d=="string"?Fn(d):null,(o=o.L=d)?new Uint8Array(o):he||(he=new Uint8Array(0)));if(o instanceof Uint8Array)return new Uint8Array(o.buffer,o.byteOffset,o.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Be(o,d){return Error("Invalid wire type: "+o+" (at position "+d+")")}function Qt(){return Error("Failed to read varint, encoding is invalid.")}function Ze(o,d){d=d===void 0?{}:d,d=d.v===void 0?!1:d.v,this.h=null,this.g=this.i=this.j=0,this.v=d,o&&Fe(this,o)}function Fe(o,d){o.h=cn(d,o.v),o.j=0,o.i=o.h.length,o.g=o.j}Ze.prototype.reset=function(){this.g=this.j};function Mt(o){if(o.g>o.i)throw Error("Tried to read past the end of the data "+o.g+" > "+o.i)}function Ie(o){var d=o.h,g=d[o.g],e=g&127;if(128>g)return o.g+=1,Mt(o),e;if(g=d[o.g+1],e|=(g&127)<<7,128>g)return o.g+=2,Mt(o),e;if(g=d[o.g+2],e|=(g&127)<<14,128>g)return o.g+=3,Mt(o),e;if(g=d[o.g+3],e|=(g&127)<<21,128>g)return o.g+=4,Mt(o),e;if(g=d[o.g+4],o.g+=5,e|=(g&15)<<28,128>g)return Mt(o),e;if(128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++])throw Qt();return Mt(o),e}var jt=[];function ye(){this.g=[]}ye.prototype.length=function(){return this.g.length},ye.prototype.end=function(){var o=this.g;return this.g=[],o};function Ye(o,d){for(;127<d;)o.g.push(d&127|128),d>>>=7;o.g.push(d)}function tn(o){var d={},g=d.W===void 0?!1:d.W;this.l={v:d.v===void 0?!1:d.v},this.W=g,d=this.l,jt.length?(g=jt.pop(),d&&(g.v=d.v),o&&Fe(g,o),o=g):o=new Ze(o,d),this.g=o,this.j=this.g.g,this.h=this.i=-1}tn.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};function Xe(o){var d=o.g;if(d.g==d.i)return!1;o.j=o.g.g;var g=Ie(o.g)>>>0;if(d=g>>>3,g&=7,!(0<=g&&5>=g))throw Be(g,o.j);if(1>d)throw Error("Invalid field number: "+d+" (at position "+o.j+")");return o.i=d,o.h=g,!0}function Pt(o){switch(o.h){case 0:if(o.h!=0)Pt(o);else t:{o=o.g;for(var d=o.g,g=d+10;d<g;)if((o.h[d++]&128)===0){o.g=d,Mt(o);break t}throw Qt()}break;case 1:o=o.g,o.g+=8,Mt(o);break;case 2:o.h!=2?Pt(o):(d=Ie(o.g)>>>0,o=o.g,o.g+=d,Mt(o));break;case 5:o=o.g,o.g+=4,Mt(o);break;case 3:d=o.i;do{if(!Xe(o))throw Error("Unmatched start-group tag: stream EOF");if(o.h==4){if(o.i!=d)throw Error("Unmatched end-group tag");break}Pt(o)}while(1);break;default:throw Be(o.h,o.j)}}var ze=[];function _e(){this.i=[],this.h=0,this.g=new ye}function xe(o,d){d.length!==0&&(o.i.push(d),o.h+=d.length)}function Vn(o,d){if(d=d.ba){xe(o,o.g.end());for(var g=0;g<d.length;g++)xe(o,d[g])}}var un=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Qe(o,d){Object.isFrozen(o)||(un?o[un]|=d:o.N!==void 0?o.N|=d:Object.defineProperties(o,{N:{value:d,configurable:!0,writable:!0,enumerable:!1}}))}function an(o){var d;return un?d=o[un]:d=o.N,d==null?0:d}function ve(o){return Qe(o,1),o}function we(o){return Array.isArray(o)?!!(an(o)&2):!1}function Ge(o){if(!Array.isArray(o))throw Error("cannot mark non-array as immutable");Qe(o,2)}function ie(o){return o!==null&&typeof o=="object"&&!Array.isArray(o)&&o.constructor===Object}var De=Object.freeze(ve([]));function qt(o){if(we(o.m))throw Error("Cannot mutate an immutable Message")}var Ot=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function fn(o){return{value:o,configurable:!1,writable:!1,enumerable:!1}}function fe(o,d,g){return d===-1?null:d>=o.i?o.g?o.g[d]:void 0:(g===void 0?0:g)&&o.g&&(g=o.g[d],g!=null)?g:o.m[d+o.h]}function Ft(o,d,g,e){e=e===void 0?!1:e,qt(o),d<o.i&&!e?o.m[d+o.h]=g:(o.g||(o.g=o.m[o.i+o.h]={}))[d]=g}function Vt(o,d,g,e){g=g===void 0?!0:g,e=e===void 0?!1:e;var u=fe(o,d,e);return u==null&&(u=De),we(o.m)?g&&(Ge(u),Object.freeze(u)):(u===De||we(u))&&(u=ve(u.slice()),Ft(o,d,u,e)),u}function oe(o,d,g){return o=fe(o,d),o=o==null?o:+o,o==null?g===void 0?0:g:o}function Le(o,d,g,e){o.j||(o.j={});var u=we(o.m),m=o.j[g];if(!m){e=Vt(o,g,!0,e===void 0?!1:e),m=[],u=u||we(e);for(var t=0;t<e.length;t++)m[t]=new d(e[t]),u&&Ge(m[t].m);u&&(Ge(m),Object.freeze(m)),o.j[g]=m}return m}function te(o,d,g,e,u){var m=m===void 0?!1:m;return qt(o),m=Le(o,g,d,m),g=e||new g,o=Vt(o,d),u!=null?(m.splice(u,0,g),o.splice(u,0,g.m)):(m.push(g),o.push(g.m)),g}function se(o,d){return o=fe(o,d),o==null?0:o}function tt(o,d){return o=fe(o,d),o==null?"":o}function it(o){switch(typeof o){case"number":return isFinite(o)?o:String(o);case"object":if(o&&!Array.isArray(o)){if(Wn(o))return En(o);if(o instanceof Se){var d=o.L;return d=d==null||typeof d=="string"?d:xn&&d instanceof Uint8Array?En(d):null,(o.L=d)||""}}}return o}function ut(o){var d=ue;return d=d===void 0?St:d,de(o,d)}function _t(o,d){if(o!=null){if(Array.isArray(o))o=de(o,d);else if(ie(o)){var g={},e;for(e in o)g[e]=_t(o[e],d);o=g}else o=d(o);return o}}function de(o,d){for(var g=o.slice(),e=0;e<g.length;e++)g[e]=_t(g[e],d);return Array.isArray(o)&&an(o)&1&&ve(g),g}function ue(o){return o&&typeof o=="object"&&o.toJSON?o.toJSON():(o=it(o),Array.isArray(o)?ut(o):o)}function St(o){return Wn(o)?new Uint8Array(o):o}function me(o,d,g){o||(o=Ce),Ce=null;var e=this.constructor.h;o||(o=e?[e]:[]),this.h=(e?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=o;t:{if(e=this.m.length,o=e-1,e&&(e=this.m[o],ie(e))){this.i=o-this.h,this.g=e;break t}d!==void 0&&-1<d?(this.i=Math.max(d,o+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE}if(g)for(d=0;d<g.length;d++)if(o=g[d],o<this.i)o+=this.h,(e=this.m[o])?Array.isArray(e)&&ve(e):this.m[o]=De;else{e=this.g||(this.g=this.m[this.i+this.h]={});var u=e[o];u?Array.isArray(u)&&ve(u):e[o]=De}}me.prototype.toJSON=function(){return ut(this.m)},me.prototype.toString=function(){return this.m.toString()};var Ce;function en(){me.apply(this,arguments)}if(dt(en,me),Ot){var nn={};Object.defineProperties(en,(nn[Symbol.hasInstance]=fn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),nn))}function mn(o,d,g){if(g){var e={},u;for(u in g){var m=g[u],t=m.ha;t||(e.F=m.la||m.fa.P,m.aa?(e.U=Sn(m.aa),t=function(c){return function(a,b,S){return c.F(a,b,S,c.U)}}(e)):m.ca?(e.T=Ke(m.X.g,m.ca),t=function(c){return function(a,b,S){return c.F(a,b,S,c.T)}}(e)):t=e.F,m.ha=t),t(d,o,m.X),e={F:e.F,U:e.U,T:e.T}}}Vn(d,o)}var yn=Symbol();function He(o,d,g){return o[yn]||(o[yn]=function(e,u){return d(e,u,g)})}function rn(o){var d=o[yn];if(!d){var g=p(o);d=function(e,u){return W(e,u,g)},o[yn]=d}return d}function jn(o){var d=o.aa;if(d)return rn(d);if(d=o.ka)return He(o.X.g,d,o.ca)}function on(o){var d=jn(o),g=o.X,e=o.fa.O;return d?function(u,m){return e(u,m,g,d)}:function(u,m){return e(u,m,g)}}function Je(o,d,g,e,u,m){o=o();var t=0;for(o.length&&typeof o[0]!="number"&&(g(d,o[0]),t++);t<o.length;){g=o[t++];for(var c=t+1;c<o.length&&typeof o[c]!="number";)c++;var a=o[t++];switch(c-=t,c){case 0:e(d,g,a);break;case 1:e(d,g,a,o[t++]);break;case 2:u(d,g,a,o[t++],o[t++]);break;case 3:c=o[t++];var b=o[t++],S=o[t++];Array.isArray(S)?u(d,g,a,c,b,S):m(d,g,a,c,b,S);break;case 4:m(d,g,a,o[t++],o[t++],o[t++],o[t++]);break;default:throw Error("unexpected number of binary field arguments: "+c)}}return d}var Zn=Symbol();function Sn(o){var d=o[Zn];if(!d){var g=dn(o);d=function(e,u){return E(e,u,g)},o[Zn]=d}return d}function Ke(o,d){var g=o[Zn];return g||(g=function(e,u){return mn(e,u,d)},o[Zn]=g),g}var Un=Symbol();function sn(o,d){o.push(d)}function vn(o,d,g){o.push(d,g.P)}function Tn(o,d,g,e,u){var m=Sn(u),t=g.P;o.push(d,function(c,a,b){return t(c,a,b,e,m)})}function Mn(o,d,g,e,u,m){var t=Ke(e,m),c=g.P;o.push(d,function(a,b,S){return c(a,b,S,e,t)})}function dn(o){var d=o[Un];return d||Je(o,o[Un]=[],sn,vn,Tn,Mn)}var Yn=Symbol();function _n(o,d){o[0]=d}function Qn(o,d,g,e){var u=g.O;o[d]=e?function(m,t,c){return u(m,t,c,e)}:u}function wn(o,d,g,e,u,m){var t=g.O,c=rn(u);o[d]=function(a,b,S){return t(a,b,S,e,c,m)}}function Cn(o,d,g,e,u,m,t){var c=g.O,a=He(e,u,m);o[d]=function(b,S,L){return c(b,S,L,e,a,t)}}function p(o){var d=o[Yn];return d||Je(o,o[Yn]={},_n,Qn,wn,Cn)}function W(o,d,g){for(;Xe(d)&&d.h!=4;){var e=d.i,u=g[e];if(!u){var m=g[0];m&&(m=m[e])&&(u=g[e]=on(m))}if((!u||!u(d,o,e))&&(u=d,e=o,m=u.j,Pt(u),!u.W)){var t=u.g.h;u=u.g.g,u=m===u?he||(he=new Uint8Array(0)):Oe?t.slice(m,u):new Uint8Array(t.subarray(m,u)),(m=e.ba)?m.push(u):e.ba=[u]}}return o}function V(o,d,g){if(ze.length){var e=ze.pop();o&&(Fe(e.g,o),e.i=-1,e.h=-1),o=e}else o=new tn(o);try{return W(new d,o,p(g))}finally{d=o.g,d.h=null,d.j=0,d.i=0,d.g=0,d.v=!1,o.i=-1,o.h=-1,100>ze.length&&ze.push(o)}}function E(o,d,g){for(var e=g.length,u=e%2==1,m=u?1:0;m<e;m+=2)(0,g[m+1])(d,o,g[m]);mn(o,d,u?g[0]:void 0)}function P(o,d){var g=new _e;E(o,g,dn(d)),xe(g,g.g.end()),o=new Uint8Array(g.h),d=g.i;for(var e=d.length,u=0,m=0;m<e;m++){var t=d[m];o.set(t,u),u+=t.length}return g.i=[o],o}function ot(o,d){return{O:o,P:d}}var j=ot(function(o,d,g){if(o.h!==5)return!1;o=o.g;var e=o.h[o.g],u=o.h[o.g+1],m=o.h[o.g+2],t=o.h[o.g+3];return o.g+=4,Mt(o),u=(e<<0|u<<8|m<<16|t<<24)>>>0,o=2*(u>>31)+1,e=u>>>23&255,u&=8388607,Ft(d,g,e==255?u?NaN:1/0*o:e==0?o*Math.pow(2,-149)*u:o*Math.pow(2,e-150)*(u+Math.pow(2,23))),!0},function(o,d,g){if(d=fe(d,g),d!=null){Ye(o.g,8*g+5),o=o.g;var e=d;e=(g=0>e?1:0)?-e:e,e===0?0<1/e?re=Ve=0:(Ve=0,re=2147483648):isNaN(e)?(Ve=0,re=2147483647):34028234663852886e22<e?(Ve=0,re=(g<<31|2139095040)>>>0):11754943508222875e-54>e?(e=Math.round(e/Math.pow(2,-149)),Ve=0,re=(g<<31|e)>>>0):(d=Math.floor(Math.log(e)/Math.LN2),e*=Math.pow(2,-d),e=Math.round(8388608*e),16777216<=e&&++d,Ve=0,re=(g<<31|d+127<<23|e&8388607)>>>0),g=re,o.g.push(g>>>0&255),o.g.push(g>>>8&255),o.g.push(g>>>16&255),o.g.push(g>>>24&255)}}),rt=ot(function(o,d,g){if(o.h!==0)return!1;for(var e=o.g,u=128,m=0,t=o=0;4>t&&128<=u;t++)u=e.h[e.g++],Mt(e),m|=(u&127)<<7*t;if(128<=u&&(u=e.h[e.g++],Mt(e),m|=(u&127)<<28,o|=(u&127)>>4),128<=u)for(t=0;5>t&&128<=u;t++)u=e.h[e.g++],Mt(e),o|=(u&127)<<7*t+3;if(128>u)e=m>>>0,u=o>>>0,(o=u&2147483648)&&(e=~e+1>>>0,u=~u>>>0,e==0&&(u=u+1>>>0)),e=4294967296*u+(e>>>0);else throw Qt();return Ft(d,g,o?-e:e),!0},function(o,d,g){if(d=fe(d,g),d!=null&&d!=null){Ye(o.g,8*g),o=o.g;var e=d;for(g=0>e,e=Math.abs(e),d=e>>>0,e=Math.floor((e-d)/4294967296),e>>>=0,g&&(e=~e>>>0,d=(~d>>>0)+1,4294967295<d&&(d=0,e++,4294967295<e&&(e=0))),re=d,Ve=e,g=re,d=Ve;0<d||127<g;)o.g.push(g&127|128),g=(g>>>7|d<<25)>>>0,d>>>=7;o.g.push(g)}}),bt=ot(function(o,d,g){return o.h!==0?!1:(Ft(d,g,Ie(o.g)),!0)},function(o,d,g){if(d=fe(d,g),d!=null&&d!=null)if(Ye(o.g,8*g),o=o.g,g=d,0<=g)Ye(o,g);else{for(d=0;9>d;d++)o.g.push(g&127|128),g>>=7;o.g.push(1)}}),Rt=ot(function(o,d,g){if(o.h!==2)return!1;var e=Ie(o.g)>>>0;o=o.g;var u=o.g;o.g+=e,Mt(o),o=o.h;var m;if(Hn)(m=Xn)||(m=Xn=new TextDecoder("utf-8",{fatal:!0})),m=m.decode(o.subarray(u,u+e));else{e=u+e;for(var t=[],c=null,a,b,S;u<e;)a=o[u++],128>a?t.push(a):224>a?u>=e?Te():(b=o[u++],194>a||(b&192)!==128?(u--,Te()):t.push((a&31)<<6|b&63)):240>a?u>=e-1?Te():(b=o[u++],(b&192)!==128||a===224&&160>b||a===237&&160<=b||((m=o[u++])&192)!==128?(u--,Te()):t.push((a&15)<<12|(b&63)<<6|m&63)):244>=a?u>=e-2?Te():(b=o[u++],(b&192)!==128||(a<<28)+(b-144)>>30!==0||((m=o[u++])&192)!==128||((S=o[u++])&192)!==128?(u--,Te()):(a=(a&7)<<18|(b&63)<<12|(m&63)<<6|S&63,a-=65536,t.push((a>>10&1023)+55296,(a&1023)+56320))):Te(),8192<=t.length&&(c=ln(c,t),t.length=0);m=ln(c,t)}return Ft(d,g,m),!0},function(o,d,g){if(d=fe(d,g),d!=null){var e=!1;if(e=e===void 0?!1:e,kn){if(e&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(d))throw Error("Found an unpaired surrogate");d=(In||(In=new TextEncoder)).encode(d)}else{for(var u=0,m=new Uint8Array(3*d.length),t=0;t<d.length;t++){var c=d.charCodeAt(t);if(128>c)m[u++]=c;else{if(2048>c)m[u++]=c>>6|192;else{if(55296<=c&&57343>=c){if(56319>=c&&t<d.length){var a=d.charCodeAt(++t);if(56320<=a&&57343>=a){c=1024*(c-55296)+a-56320+65536,m[u++]=c>>18|240,m[u++]=c>>12&63|128,m[u++]=c>>6&63|128,m[u++]=c&63|128;continue}else t--}if(e)throw Error("Found an unpaired surrogate");c=65533}m[u++]=c>>12|224,m[u++]=c>>6&63|128}m[u++]=c&63|128}}d=m.subarray(0,u)}Ye(o.g,8*g+2),Ye(o.g,d.length),xe(o,o.g.end()),xe(o,d)}}),Ut=ot(function(o,d,g,e,u){if(o.h!==2)return!1;d=te(d,g,e),g=o.g.i,e=Ie(o.g)>>>0;var m=o.g.g+e,t=m-g;if(0>=t&&(o.g.i=m,u(d,o),t=m-o.g.g),t)throw Error("Message parsing ended unexpectedly. Expected to read "+(e+" bytes, instead read "+(e-t)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return o.g.g=m,o.g.i=g,!0},function(o,d,g,e,u){if(d=Le(d,e,g),d!=null)for(e=0;e<d.length;e++){var m=o;Ye(m.g,8*g+2);var t=m.g.end();xe(m,t),t.push(m.h),m=t,u(d[e],o),t=o;var c=m.pop();for(c=t.h+t.g.length()-c;127<c;)m.push(c&127|128),c>>>=7,t.h++;m.push(c),t.h++}});function Jt(){en.apply(this,arguments)}if(dt(Jt,en),Ot){var $t={};Object.defineProperties(Jt,($t[Symbol.hasInstance]=fn(Object[Symbol.hasInstance]),$t))}function kt(o){Jt.call(this,o)}dt(kt,Jt);function Tt(){return[1,bt,2,j,3,Rt,4,Rt]}function Et(o){Jt.call(this,o,-1,ae)}dt(Et,Jt),Et.prototype.addClassification=function(o,d){return te(this,1,kt,o,d),this};function Dt(){return[1,Ut,kt,Tt]}var ae=[1];function pe(o){Jt.call(this,o)}dt(pe,Jt);function ge(){return[1,j,2,j,3,j,4,j,5,j]}function ke(o){Jt.call(this,o,-1,y)}dt(ke,Jt);function h(){return[1,Ut,pe,ge]}var y=[1];function G(o){Jt.call(this,o)}dt(G,Jt);function C(){return[1,j,2,j,3,j,4,j,5,j,6,rt]}var K=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],_=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],M=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],q=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ct=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],s=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],X=[].concat(J(K),J(_),J(M),J(q),J(ct),J(s));function R(o,d,g){if(g=o.createShader(g===0?o.VERTEX_SHADER:o.FRAGMENT_SHADER),o.shaderSource(g,d),o.compileShader(g),!o.getShaderParameter(g,o.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
54
54
|
|
|
55
|
-
`+o.getShaderInfoLog(g));return g}function
|
|
55
|
+
`+o.getShaderInfoLog(g));return g}function w(o){return Le(o,kt,1).map(function(d){return{index:se(d,1),ga:oe(d,2),label:fe(d,3)!=null?tt(d,3):void 0,displayName:fe(d,4)!=null?tt(d,4):void 0}})}function k(o){return{x:oe(o,1),y:oe(o,2),z:oe(o,3),visibility:fe(o,4)!=null?oe(o,4):void 0}}function A(o,d){this.h=o,this.g=d,this.l=0}function B(o,d,g){return nt(o,d),typeof o.g.canvas.transferToImageBitmap=="function"?Promise.resolve(o.g.canvas.transferToImageBitmap()):g?Promise.resolve(o.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(o.g.canvas):(o.i===void 0&&(o.i=document.createElement("canvas")),new Promise(function(e){o.i.height=o.g.canvas.height,o.i.width=o.g.canvas.width,o.i.getContext("2d",{}).drawImage(o.g.canvas,0,0,o.g.canvas.width,o.g.canvas.height),e(o.i)}))}function nt(o,d){var g=o.g;if(o.o===void 0){var e=R(g,`
|
|
56
56
|
attribute vec2 aVertex;
|
|
57
57
|
attribute vec2 aTex;
|
|
58
58
|
varying vec2 vTex;
|
|
@@ -67,43 +67,43 @@
|
|
|
67
67
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
68
68
|
}`,1),m=g.createProgram();if(g.attachShader(m,e),g.attachShader(m,u),g.linkProgram(m),!g.getProgramParameter(m,g.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
69
69
|
|
|
70
|
-
`+g.getProgramInfoLog(m));e=o.o=m,g.useProgram(e),u=g.getUniformLocation(e,"sampler0"),o.j={K:g.getAttribLocation(e,"aVertex"),J:g.getAttribLocation(e,"aTex"),ma:u},o.u=g.createBuffer(),g.bindBuffer(g.ARRAY_BUFFER,o.u),g.enableVertexAttribArray(o.j.K),g.vertexAttribPointer(o.j.K,2,g.FLOAT,!1,0,0),g.bufferData(g.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),g.STATIC_DRAW),g.bindBuffer(g.ARRAY_BUFFER,null),o.s=g.createBuffer(),g.bindBuffer(g.ARRAY_BUFFER,o.s),g.enableVertexAttribArray(o.j.J),g.vertexAttribPointer(o.j.J,2,g.FLOAT,!1,0,0),g.bufferData(g.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),g.STATIC_DRAW),g.bindBuffer(g.ARRAY_BUFFER,null),g.uniform1i(u,0)}e=o.j,g.useProgram(o.o),g.canvas.width=d.width,g.canvas.height=d.height,g.viewport(0,0,d.width,d.height),g.activeTexture(g.TEXTURE0),o.h.bindTexture2d(d.glName),g.enableVertexAttribArray(e.K),g.bindBuffer(g.ARRAY_BUFFER,o.u),g.vertexAttribPointer(e.K,2,g.FLOAT,!1,0,0),g.enableVertexAttribArray(e.J),g.bindBuffer(g.ARRAY_BUFFER,o.s),g.vertexAttribPointer(e.J,2,g.FLOAT,!1,0,0),g.bindFramebuffer(g.DRAW_FRAMEBUFFER?g.DRAW_FRAMEBUFFER:g.FRAMEBUFFER,null),g.clearColor(0,0,0,0),g.clear(g.COLOR_BUFFER_BIT),g.colorMask(!0,!0,!0,!0),g.drawArrays(g.TRIANGLE_FAN,0,4),g.disableVertexAttribArray(e.K),g.disableVertexAttribArray(e.J),g.bindBuffer(g.ARRAY_BUFFER,null),o.h.bindTexture2d(0)}function $(o){this.g=o}var yt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Xt(o,d){return d+o}function Bt(o,d){window[o]=d}function It(o){var d=document.createElement("script");return d.setAttribute("src",o),d.setAttribute("crossorigin","anonymous"),new Promise(function(g){d.addEventListener("load",function(){g()},!1),d.addEventListener("error",function(){g()},!1),document.body.appendChild(d)})}function ht(){return gt(function(o){switch(o.g){case 1:return o.o=2,P(o,WebAssembly.instantiate(yt),4);case 4:o.g=3,o.o=0;break;case 2:return o.o=0,o.j=null,o.return(!1);case 3:return o.return(!0)}})}function Vt(o){if(this.g=o,this.listeners={},this.j={},this.H={},this.o={},this.u={},this.I=this.s=this.Z=!0,this.D=Promise.resolve(),this.Y="",this.C={},this.locateFile=o&&o.locateFile||Xt,typeof window=="object")var d=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")d=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.$=d,o.options){d=T(Object.keys(o.options));for(var g=d.next();!g.done;g=d.next()){g=g.value;var e=o.options[g].default;e!==void 0&&(this.j[g]=typeof e=="function"?e():e)}}}i=Vt.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function xt(o){var d,g,e,u,m,t,c,a,b,S,w;return gt(function(F){switch(F.g){case 1:return o.Z?(d=o.g.files===void 0?[]:typeof o.g.files=="function"?o.g.files(o.j):o.g.files,P(F,ht(),2)):F.return();case 2:if(g=F.h,typeof window=="object")return Bt("createMediapipeSolutionsWasm",{locateFile:o.locateFile}),Bt("createMediapipeSolutionsPackedAssets",{locateFile:o.locateFile}),t=d.filter(function(U){return U.data!==void 0}),c=d.filter(function(U){return U.data===void 0}),a=Promise.all(t.map(function(U){var z=l(o,U.url);if(U.path!==void 0){var Q=U.path;z=z.then(function(D){return o.overrideFile(Q,D),Promise.resolve(D)})}return z})),b=Promise.all(c.map(function(U){return U.simd===void 0||U.simd&&g||!U.simd&&!g?It(o.locateFile(U.url,o.$)):Promise.resolve()})).then(function(){var U,z,Q;return gt(function(D){if(D.g==1)return U=window.createMediapipeSolutionsWasm,z=window.createMediapipeSolutionsPackedAssets,Q=o,P(D,U(z),2);Q.h=D.h,D.g=0})}),S=function(){return gt(function(U){return o.g.graph&&o.g.graph.url?U=P(U,l(o,o.g.graph.url),0):(U.g=0,U=void 0),U})}(),P(F,Promise.all([b,a,S]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return e=d.filter(function(U){return U.simd===void 0||U.simd&&g||!U.simd&&!g}).map(function(U){return o.locateFile(U.url,o.$)}),importScripts.apply(null,J(e)),u=o,P(F,createMediapipeSolutionsWasm(Module),6);case 6:u.h=F.h,o.l=new OffscreenCanvas(1,1),o.h.canvas=o.l,m=o.h.GL.createContext(o.l,{antialias:!1,alpha:!1,ja:typeof WebGL2RenderingContext<"u"?2:1}),o.h.GL.makeContextCurrent(m),F.g=4;break;case 7:if(o.l=document.createElement("canvas"),w=o.l.getContext("webgl2",{}),!w&&(w=o.l.getContext("webgl",{}),!w))return alert("Failed to create WebGL canvas context when passing video frame."),F.return();o.G=w,o.h.canvas=o.l,o.h.createContext(o.l,!0,!0,{});case 4:o.i=new o.h.SolutionWasm,o.Z=!1,F.g=0}})}function Yt(o){var d,g,e,u,m,t,c,a;return gt(function(b){if(b.g==1){if(o.g.graph&&o.g.graph.url&&o.Y===o.g.graph.url)return b.return();if(o.s=!0,!o.g.graph||!o.g.graph.url){b.g=2;return}return o.Y=o.g.graph.url,P(b,l(o,o.g.graph.url),3)}for(b.g!=2&&(d=b.h,o.i.loadGraph(d)),g=T(Object.keys(o.C)),e=g.next();!e.done;e=g.next())u=e.value,o.i.overrideFile(u,o.C[u]);if(o.C={},o.g.listeners)for(m=T(o.g.listeners),t=m.next();!t.done;t=m.next())c=t.value,L(o,c);a=o.j,o.j={},o.setOptions(a),b.g=0})}i.reset=function(){var o=this;return gt(function(d){o.i&&(o.i.reset(),o.o={},o.u={}),d.g=0})},i.setOptions=function(o,d){var g=this;if(d=d||this.g.options){for(var e=[],u=[],m={},t=T(Object.keys(o)),c=t.next();!c.done;m={R:m.R,S:m.S},c=t.next()){var a=c.value;a in this.j&&this.j[a]===o[a]||(this.j[a]=o[a],c=d[a],c!==void 0&&(c.onChange&&(m.R=c.onChange,m.S=o[a],e.push(function(b){return function(){var S;return gt(function(w){if(w.g==1)return P(w,b.R(b.S),2);S=w.h,S===!0&&(g.s=!0),w.g=0})}}(m))),c.graphOptionXref&&(a={valueNumber:c.type===1?o[a]:0,valueBoolean:c.type===0?o[a]:!1,valueString:c.type===2?o[a]:""},c=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),c.graphOptionXref),a),u.push(c))))}(e.length!==0||u.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(u),this.A=(this.A===void 0?[]:this.A).concat(e))}};function Ht(o){var d,g,e,u,m,t,c;return gt(function(a){switch(a.g){case 1:if(!o.s)return a.return();if(!o.A){a.g=2;break}d=T(o.A),g=d.next();case 3:if(g.done){a.g=5;break}return e=g.value,P(a,e(),4);case 4:g=d.next(),a.g=3;break;case 5:o.A=void 0;case 2:if(o.B){for(u=new o.h.GraphOptionChangeRequestList,m=T(o.B),t=m.next();!t.done;t=m.next())c=t.value,u.push_back(c);o.i.changeOptions(u),u.delete(),o.B=void 0}o.s=!1,a.g=0}})}i.initialize=function(){var o=this;return gt(function(d){return d.g==1?P(d,xt(o),2):d.g!=3?P(d,Yt(o),3):P(d,Ht(o),0)})};function l(o,d){var g,e;return gt(function(u){return d in o.H?u.return(o.H[d]):(g=o.locateFile(d,""),e=fetch(g).then(function(m){return m.arrayBuffer()}),o.H[d]=e,u.return(e))})}i.overrideFile=function(o,d){this.i?this.i.overrideFile(o,d):this.C[o]=d},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(o,d){var g=this,e,u,m,t,c,a,b,S,w;return gt(function(F){switch(F.g){case 1:return g.g.inputs?(e=1e3*(d==null?performance.now():d),P(F,g.D,2)):F.return();case 2:return P(F,g.initialize(),3);case 3:for(u=new g.h.PacketDataList,m=T(Object.keys(o)),t=m.next();!t.done;t=m.next())if(c=t.value,a=g.g.inputs[c]){t:{var U=o[c];switch(a.type){case"video":var z=g.o[a.stream];if(z||(z=new A(g.h,g.G),g.o[a.stream]=z),z.l===0&&(z.l=z.h.createTexture()),typeof HTMLVideoElement<"u"&&U instanceof HTMLVideoElement)var Q=U.videoWidth,D=U.videoHeight;else typeof HTMLImageElement<"u"&&U instanceof HTMLImageElement?(Q=U.naturalWidth,D=U.naturalHeight):(Q=U.width,D=U.height);D={glName:z.l,width:Q,height:D},Q=z.g,Q.canvas.width=D.width,Q.canvas.height=D.height,Q.activeTexture(Q.TEXTURE0),z.h.bindTexture2d(z.l),Q.texImage2D(Q.TEXTURE_2D,0,Q.RGBA,Q.RGBA,Q.UNSIGNED_BYTE,U),z.h.bindTexture2d(0),z=D;break t;case"detections":for(z=g.o[a.stream],z||(z=new $(g.h),g.o[a.stream]=z),z.data||(z.data=new z.g.DetectionListData),z.data.reset(U.length),D=0;D<U.length;++D){Q=U[D];var st=z.data,ft=st.setBoundingBox,mt=D,Gt=Q.boundingBox,vt=new G;if(Ft(vt,1,Gt.xCenter),Ft(vt,2,Gt.yCenter),Ft(vt,3,Gt.height),Ft(vt,4,Gt.width),Ft(vt,5,Gt.rotation),Ft(vt,6,Gt.rectId),Gt=O(vt,C),ft.call(st,mt,Gt),Q.landmarks)for(st=0;st<Q.landmarks.length;++st){vt=Q.landmarks[st];var At=!!vt.visibility;ft=z.data,mt=ft.addNormalizedLandmark,Gt=D,vt=Object.assign(Object.assign({},vt),{visibility:At?vt.visibility:0}),At=new pe,Ft(At,1,vt.x),Ft(At,2,vt.y),Ft(At,3,vt.z),vt.visibility&&Ft(At,4,vt.visibility),vt=O(At,ge),mt.call(ft,Gt,vt)}if(Q.V)for(st=0;st<Q.V.length;++st)ft=z.data,mt=ft.addClassification,Gt=D,vt=Q.V[st],At=new kt,Ft(At,2,vt.ga),vt.index&&Ft(At,1,vt.index),vt.label&&Ft(At,3,vt.label),vt.displayName&&Ft(At,4,vt.displayName),vt=O(At,Tt),mt.call(ft,Gt,vt)}z=z.data;break t;default:z={}}}switch(b=z,S=a.stream,a.type){case"video":u.pushTexture2d(Object.assign(Object.assign({},b),{stream:S,timestamp:e}));break;case"detections":w=b,w.stream=S,w.timestamp=e,u.pushDetectionList(w);break;default:throw Error("Unknown input config type: '"+a.type+"'")}}return g.i.send(u),P(F,g.D,4);case 4:u.delete(),F.g=0}})};function v(o,d,g){var e,u,m,t,c,a,b,S,w,F,U,z,Q,D;return gt(function(st){switch(st.g){case 1:if(!g)return st.return(d);for(e={},u=0,m=T(Object.keys(g)),t=m.next();!t.done;t=m.next())c=t.value,a=g[c],typeof a!="string"&&a.type==="texture"&&d[a.stream]!==void 0&&++u;1<u&&(o.I=!1),b=T(Object.keys(g)),t=b.next();case 2:if(t.done){st.g=4;break}if(S=t.value,w=g[S],typeof w=="string")return Q=e,D=S,P(st,I(o,S,d[w]),14);if(F=d[w.stream],w.type==="detection_list"){if(F){for(var ft=F.getRectList(),mt=F.getLandmarksList(),Gt=F.getClassificationsList(),vt=[],At=0;At<ft.size();++At){var le=W(ft.get(At),G,C);le={boundingBox:{xCenter:oe(le,1),yCenter:oe(le,2),height:oe(le,3),width:oe(le,4),rotation:oe(le,5,0),rectId:se(le,6)},landmarks:we(W(mt.get(At),ke,h),pe,1).map(k),V:Y(W(Gt.get(At),Et,Dt))},vt.push(le)}ft=vt}else ft=[];e[S]=ft,st.g=7;break}if(w.type==="proto_list"){if(F){for(ft=Array(F.size()),mt=0;mt<F.size();mt++)ft[mt]=F.get(mt);F.delete()}else ft=[];e[S]=ft,st.g=7;break}if(F===void 0){st.g=3;break}if(w.type==="float_list"){e[S]=F,st.g=7;break}if(w.type==="proto"){e[S]=F,st.g=7;break}if(w.type!=="texture")throw Error("Unknown output config type: '"+w.type+"'");return U=o.u[S],U||(U=new A(o.h,o.G),o.u[S]=U),P(st,K(U,F,o.I),13);case 13:z=st.h,e[S]=z;case 7:w.transform&&e[S]&&(e[S]=w.transform(e[S])),st.g=3;break;case 14:Q[D]=st.h;case 3:t=b.next(),st.g=2;break;case 4:return st.return(e)}})}function I(o,d,g){var e;return gt(function(u){return typeof g=="number"||g instanceof Uint8Array||g instanceof o.h.Uint8BlobList?u.return(g):g instanceof o.h.Texture2dDataOut?(e=o.u[d],e||(e=new A(o.h,o.G),o.u[d]=e),u.return(K(e,g,o.I))):u.return(void 0)})}function L(o,d){for(var g=d.name||"$",e=[].concat(J(d.wants)),u=new o.h.StringList,m=T(d.wants),t=m.next();!t.done;t=m.next())u.push_back(t.value);m=o.h.PacketListener.implement({onResults:function(c){for(var a={},b=0;b<d.wants.length;++b)a[e[b]]=c.get(b);var S=o.listeners[g];S&&(o.D=v(o,a,d.outs).then(function(w){w=S(w);for(var F=0;F<d.wants.length;++F){var U=a[e[F]];typeof U=="object"&&U.hasOwnProperty&&U.hasOwnProperty("delete")&&U.delete()}w&&(o.D=w)}))}}),o.i.attachMultiListener(u,m),u.delete()}i.onResults=function(o,d){this.listeners[d||"$"]=o},Ct("Solution",Vt),Ct("OptionType",{BOOL:0,NUMBER:1,ia:2,0:"BOOL",1:"NUMBER",2:"STRING"});function N(o){var d=this;o=o||{};var g={url:"face_detection_short.binarypb"},e={type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}};this.g=new Vt({locateFile:o.locateFile,files:[{data:!0,url:"face_detection_short.binarypb"},{data:!0,url:"face_detection_short_range.tflite"},{simd:!0,url:"face_detection_solution_simd_wasm_bin.js"},{simd:!1,url:"face_detection_solution_wasm_bin.js"}],graph:g,listeners:[{wants:["detections","image_transformed"],outs:{image:"image_transformed",detections:{type:"detection_list",stream:"detections"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},model:{type:0,onChange:function(u){var m,t,c,a,b,S;return gt(function(w){switch(w.g){case 1:m=u==="short"?["face_detection_short_range.tflite"]:["face_detection_full_range_sparse.tflite"],t=T(m),c=t.next();case 2:if(c.done){w.g=4;break}return a=c.value,b="third_party/mediapipe/modules/face_detection/"+a,P(w,l(d.g,a),5);case 5:S=w.h,d.g.overrideFile(b,S),c=t.next(),w.g=2;break;case 4:return g.url=u==="short"?"face_detection_short.binarypb":"face_detection_full.binarypb",e.graphOptionXref.calculatorName=u==="short"?"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator":"facedetectionfullrangegpu__facedetectionfullrangecommon__TensorsToDetectionsCalculator",w.return(!0)}})}},minDetectionConfidence:e}})}i=N.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(o){this.g.onResults(o)},i.initialize=function(){var o=this;return gt(function(d){return P(d,o.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(o){var d=this;return gt(function(g){return P(g,d.g.send(o),0)})},i.setOptions=function(o){this.g.setOptions(o)},Ct("FaceDetection",N),Ct("FACEDETECTION_LIPS",B),Ct("FACEDETECTION_LEFT_EYE",_),Ct("FACEDETECTION_LEFT_EYEBROW",M),Ct("FACEDETECTION_RIGHT_EYE",q),Ct("FACEDETECTION_RIGHT_EYEBROW",ct),Ct("FACEDETECTION_FACE_OVAL",s),Ct("FACEDETECTION_CONTOURS",X),Ct("FACEDETECTION_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Ct("VERSION","0.4.1646425229")}).call(Wi);const Ri={};(function(){var i;function n(h){var y=0;return function(){return y<h.length?{done:!1,value:h[y++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(h,y,G){return h==Array.prototype||h==Object.prototype||(h[y]=G.value),h};function f(h){h=[typeof globalThis=="object"&&globalThis,h,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var y=0;y<h.length;++y){var G=h[y];if(G&&G.Math==Math)return G}throw Error("Cannot find global object")}var Z=f(this);function x(h,y){if(y)t:{var G=Z;h=h.split(".");for(var C=0;C<h.length-1;C++){var B=h[C];if(!(B in G))break t;G=G[B]}h=h[h.length-1],C=G[h],y=y(C),y!=C&&y!=null&&r(G,h,{configurable:!0,writable:!0,value:y})}}x("Symbol",function(h){function y(_){if(this instanceof y)throw new TypeError("Symbol is not a constructor");return new G(C+(_||"")+"_"+B++,_)}function G(_,M){this.g=_,r(this,"description",{configurable:!0,writable:!0,value:M})}if(h)return h;G.prototype.toString=function(){return this.g};var C="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",B=0;return y}),x("Symbol.iterator",function(h){if(h)return h;h=Symbol("Symbol.iterator");for(var y="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),G=0;G<y.length;G++){var C=Z[y[G]];typeof C=="function"&&typeof C.prototype[h]!="function"&&r(C.prototype,h,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return h});function H(h){return h={next:h},h[Symbol.iterator]=function(){return this},h}function T(h){var y=typeof Symbol<"u"&&Symbol.iterator&&h[Symbol.iterator];return y?y.call(h):{next:n(h)}}function J(h){if(!(h instanceof Array)){h=T(h);for(var y,G=[];!(y=h.next()).done;)G.push(y.value);h=G}return h}var et=typeof Object.create=="function"?Object.create:function(h){function y(){}return y.prototype=h,new y},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Lt={a:!0},wt={};try{wt.__proto__=Lt,pt=wt.a;break t}catch{}pt=!1}lt=pt?function(h,y){if(h.__proto__=y,h.__proto__!==y)throw new TypeError(h+" is not extensible");return h}:null}var at=lt;function dt(h,y){if(h.prototype=et(y.prototype),h.prototype.constructor=h,at)at(h,y);else for(var G in y)if(G!="prototype")if(Object.defineProperties){var C=Object.getOwnPropertyDescriptor(y,G);C&&Object.defineProperty(h,G,C)}else h[G]=y[G];h.ea=y.prototype}function Kt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Nt(h){if(h.l)throw new TypeError("Generator is already running");h.l=!0}Kt.prototype.o=function(h){this.h=h};function ee(h,y){h.j={U:y,V:!0},h.g=h.m||h.s}Kt.prototype.return=function(h){this.j={return:h},this.g=this.s};function P(h,y,G){return h.g=G,{value:y}}function $e(h){this.g=new Kt,this.h=h}function je(h,y){Nt(h.g);var G=h.g.i;return G?Ve(h,"return"in G?G.return:function(C){return{value:C,done:!0}},y,h.g.return):(h.g.return(y),zt(h))}function Ve(h,y,G,C){try{var B=y.call(h.g.i,G);if(!(B instanceof Object))throw new TypeError("Iterator result "+B+" is not an object");if(!B.done)return h.g.l=!1,B;var _=B.value}catch(M){return h.g.i=null,ee(h.g,M),zt(h)}return h.g.i=null,C.call(h.g,_),zt(h)}function zt(h){for(;h.g.g;)try{var y=h.h(h.g);if(y)return h.g.l=!1,{value:y.value,done:!1}}catch(G){h.g.h=void 0,ee(h.g,G)}if(h.g.l=!1,h.g.j){if(y=h.g.j,h.g.j=null,y.V)throw y.U;return{value:y.return,done:!0}}return{value:void 0,done:!0}}function Jn(h){this.next=function(y){return Nt(h.g),h.g.i?y=Ve(h,h.g.i.next,y,h.g.o):(h.g.o(y),y=zt(h)),y},this.throw=function(y){return Nt(h.g),h.g.i?y=Ve(h,h.g.i.throw,y,h.g.o):(ee(h.g,y),y=zt(h)),y},this.return=function(y){return je(h,y)},this[Symbol.iterator]=function(){return this}}function ne(h,y){return y=new Jn(new $e(y)),at&&h.prototype&&at(y,h.prototype),y}function gt(h,y){h instanceof String&&(h+="");var G=0,C=!1,B={next:function(){if(!C&&G<h.length){var _=G++;return{value:y(_,h[_]),done:!1}}return C=!0,{done:!0,value:void 0}}};return B[Symbol.iterator]=function(){return B},B}var qe=typeof Object.assign=="function"?Object.assign:function(h,y){for(var G=1;G<arguments.length;G++){var C=arguments[G];if(C)for(var B in C)Object.prototype.hasOwnProperty.call(C,B)&&(h[B]=C[B])}return h};x("Object.assign",function(h){return h||qe}),x("Promise",function(h){function y(M){this.h=0,this.i=void 0,this.g=[],this.o=!1;var q=this.j();try{M(q.resolve,q.reject)}catch(ct){q.reject(ct)}}function G(){this.g=null}function C(M){return M instanceof y?M:new y(function(q){q(M)})}if(h)return h;G.prototype.h=function(M){if(this.g==null){this.g=[];var q=this;this.i(function(){q.l()})}this.g.push(M)};var B=Z.setTimeout;G.prototype.i=function(M){B(M,0)},G.prototype.l=function(){for(;this.g&&this.g.length;){var M=this.g;this.g=[];for(var q=0;q<M.length;++q){var ct=M[q];M[q]=null;try{ct()}catch(s){this.j(s)}}}this.g=null},G.prototype.j=function(M){this.i(function(){throw M})},y.prototype.j=function(){function M(s){return function(X){ct||(ct=!0,s.call(q,X))}}var q=this,ct=!1;return{resolve:M(this.C),reject:M(this.l)}},y.prototype.C=function(M){if(M===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(M instanceof y)this.F(M);else{t:switch(typeof M){case"object":var q=M!=null;break t;case"function":q=!0;break t;default:q=!1}q?this.u(M):this.m(M)}},y.prototype.u=function(M){var q=void 0;try{q=M.then}catch(ct){this.l(ct);return}typeof q=="function"?this.G(q,M):this.m(M)},y.prototype.l=function(M){this.s(2,M)},y.prototype.m=function(M){this.s(1,M)},y.prototype.s=function(M,q){if(this.h!=0)throw Error("Cannot settle("+M+", "+q+"): Promise already settled in state"+this.h);this.h=M,this.i=q,this.h===2&&this.D(),this.A()},y.prototype.D=function(){var M=this;B(function(){if(M.B()){var q=Z.console;typeof q<"u"&&q.error(M.i)}},1)},y.prototype.B=function(){if(this.o)return!1;var M=Z.CustomEvent,q=Z.Event,ct=Z.dispatchEvent;return typeof ct>"u"?!0:(typeof M=="function"?M=new M("unhandledrejection",{cancelable:!0}):typeof q=="function"?M=new q("unhandledrejection",{cancelable:!0}):(M=Z.document.createEvent("CustomEvent"),M.initCustomEvent("unhandledrejection",!1,!0,M)),M.promise=this,M.reason=this.i,ct(M))},y.prototype.A=function(){if(this.g!=null){for(var M=0;M<this.g.length;++M)_.h(this.g[M]);this.g=null}};var _=new G;return y.prototype.F=function(M){var q=this.j();M.J(q.resolve,q.reject)},y.prototype.G=function(M,q){var ct=this.j();try{M.call(q,ct.resolve,ct.reject)}catch(s){ct.reject(s)}},y.prototype.then=function(M,q){function ct(Y,k){return typeof Y=="function"?function(A){try{s(Y(A))}catch(K){X(K)}}:k}var s,X,R=new y(function(Y,k){s=Y,X=k});return this.J(ct(M,s),ct(q,X)),R},y.prototype.catch=function(M){return this.then(void 0,M)},y.prototype.J=function(M,q){function ct(){switch(s.h){case 1:M(s.i);break;case 2:q(s.i);break;default:throw Error("Unexpected state: "+s.h)}}var s=this;this.g==null?_.h(ct):this.g.push(ct),this.o=!0},y.resolve=C,y.reject=function(M){return new y(function(q,ct){ct(M)})},y.race=function(M){return new y(function(q,ct){for(var s=T(M),X=s.next();!X.done;X=s.next())C(X.value).J(q,ct)})},y.all=function(M){var q=T(M),ct=q.next();return ct.done?C([]):new y(function(s,X){function R(A){return function(K){Y[A]=K,k--,k==0&&s(Y)}}var Y=[],k=0;do Y.push(void 0),k++,C(ct.value).J(R(Y.length-1),X),ct=q.next();while(!ct.done)})},y}),x("Object.is",function(h){return h||function(y,G){return y===G?y!==0||1/y===1/G:y!==y&&G!==G}}),x("Array.prototype.includes",function(h){return h||function(y,G){var C=this;C instanceof String&&(C=String(C));var B=C.length;for(G=G||0,0>G&&(G=Math.max(G+B,0));G<B;G++){var _=C[G];if(_===y||Object.is(_,y))return!0}return!1}}),x("String.prototype.includes",function(h){return h||function(y,G){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(y instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(y,G||0)!==-1}}),x("Array.prototype.keys",function(h){return h||function(){return gt(this,function(y){return y})}});var zn=this||self;function Re(h,y){h=h.split(".");var G=zn;h[0]in G||typeof G.execScript>"u"||G.execScript("var "+h[0]);for(var C;h.length&&(C=h.shift());)h.length||y===void 0?G[C]&&G[C]!==Object.prototype[C]?G=G[C]:G=G[C]={}:G[C]=y}function Ct(h,y){return y=String.fromCharCode.apply(null,y),h==null?y:h+y}var Te,ln=typeof TextDecoder<"u",Xn,Hn=typeof TextEncoder<"u";function In(h){if(Hn)h=(Xn||(Xn=new TextEncoder)).encode(h);else{var y=void 0;y=y===void 0?!1:y;for(var G=0,C=new Uint8Array(3*h.length),B=0;B<h.length;B++){var _=h.charCodeAt(B);if(128>_)C[G++]=_;else{if(2048>_)C[G++]=_>>6|192;else{if(55296<=_&&57343>=_){if(56319>=_&&B<h.length){var M=h.charCodeAt(++B);if(56320<=M&&57343>=M){_=1024*(_-55296)+M-56320+65536,C[G++]=_>>18|240,C[G++]=_>>12&63|128,C[G++]=_>>6&63|128,C[G++]=_&63|128;continue}else B--}if(y)throw Error("Found an unpaired surrogate");_=65533}C[G++]=_>>12|224,C[G++]=_>>6&63|128}C[G++]=_&63|128}}h=C.subarray(0,G)}return h}var kn={},hn=null;function bn(h,y){y===void 0&&(y=0),Oe(),y=kn[y];for(var G=Array(Math.floor(h.length/3)),C=y[64]||"",B=0,_=0;B<h.length-2;B+=3){var M=h[B],q=h[B+1],ct=h[B+2],s=y[M>>2];M=y[(M&3)<<4|q>>4],q=y[(q&15)<<2|ct>>6],ct=y[ct&63],G[_++]=s+M+q+ct}switch(s=0,ct=C,h.length-B){case 2:s=h[B+1],ct=y[(s&15)<<2]||C;case 1:h=h[B],G[_]=y[h>>2]+y[(h&3)<<4|s>>4]+ct+C}return G.join("")}function En(h){var y=h.length,G=3*y/4;G%3?G=Math.floor(G):"=.".indexOf(h[y-1])!=-1&&(G="=.".indexOf(h[y-2])!=-1?G-2:G-1);var C=new Uint8Array(G),B=0;return Fn(h,function(_){C[B++]=_}),C.subarray(0,B)}function Fn(h,y){function G(ct){for(;C<h.length;){var s=h.charAt(C++),X=hn[s];if(X!=null)return X;if(!/^[\s\xa0]*$/.test(s))throw Error("Unknown base64 encoding at char: "+s)}return ct}Oe();for(var C=0;;){var B=G(-1),_=G(0),M=G(64),q=G(64);if(q===64&&B===-1)break;y(B<<2|_>>4),M!=64&&(y(_<<4&240|M>>2),q!=64&&y(M<<6&192|q))}}function Oe(){if(!hn){hn={};for(var h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),y=["+/=","+/","-_=","-_.","-_"],G=0;5>G;G++){var C=h.concat(y[G].split(""));kn[G]=C;for(var B=0;B<C.length;B++){var _=C[B];hn[_]===void 0&&(hn[_]=B)}}}}var Ae=typeof Uint8Array.prototype.slice=="function",xn;function Vn(h,y,G){return y===G?xn||(xn=new Uint8Array(0)):Ae?h.slice(y,G):new Uint8Array(h.subarray(y,G))}var he=0,Se=0;function Pe(h,y){y=y===void 0?{}:y,y=y.v===void 0?!1:y.v,this.h=null,this.g=this.j=this.l=0,this.m=!1,this.v=y,h&&re(this,h)}function re(h,y){y=y.constructor===Uint8Array?y:y.constructor===ArrayBuffer?new Uint8Array(y):y.constructor===Array?new Uint8Array(y):y.constructor===String?En(y):y instanceof Uint8Array?new Uint8Array(y.buffer,y.byteOffset,y.byteLength):new Uint8Array(0),h.h=y,h.l=0,h.j=h.h.length,h.g=h.l}Pe.prototype.reset=function(){this.g=this.l};function We(h){for(var y=128,G=0,C=0,B=0;4>B&&128<=y;B++)y=h.h[h.g++],G|=(y&127)<<7*B;if(128<=y&&(y=h.h[h.g++],G|=(y&127)<<28,C|=(y&127)>>4),128<=y)for(B=0;5>B&&128<=y;B++)y=h.h[h.g++],C|=(y&127)<<7*B+3;if(128>y)return h=G>>>0,y=C>>>0,(C=y&2147483648)&&(h=~h+1>>>0,y=~y>>>0,h==0&&(y=y+1>>>0)),h=4294967296*y+(h>>>0),C?-h:h;h.m=!0}Pe.prototype.i=function(){var h=this.h,y=h[this.g],G=y&127;return 128>y?(this.g+=1,G):(y=h[this.g+1],G|=(y&127)<<7,128>y?(this.g+=2,G):(y=h[this.g+2],G|=(y&127)<<14,128>y?(this.g+=3,G):(y=h[this.g+3],G|=(y&127)<<21,128>y?(this.g+=4,G):(y=h[this.g+4],G|=(y&15)<<28,128>y?(this.g+=5,G>>>0):(this.g+=5,128<=h[this.g++]&&128<=h[this.g++]&&128<=h[this.g++]&&128<=h[this.g++]&&this.g++,G)))))},Pe.prototype.o=function(){var h=this.h[this.g],y=this.h[this.g+1],G=this.h[this.g+2],C=this.h[this.g+3];return this.g+=4,G=(h<<0|y<<8|G<<16|C<<24)>>>0,h=2*(G>>31)+1,y=G>>>23&255,G&=8388607,y==255?G?NaN:1/0*h:y==0?h*Math.pow(2,-149)*G:h*Math.pow(2,y-150)*(G+Math.pow(2,23))};var cn=[];function Ke(){this.g=new Uint8Array(64),this.h=0}Ke.prototype.push=function(h){if(!(this.h+1<this.g.length)){var y=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(y)}this.g[this.h++]=h},Ke.prototype.length=function(){return this.h},Ke.prototype.end=function(){var h=this.g,y=this.h;return this.h=0,Vn(h,0,y)};function Qt(h,y){for(;127<y;)h.push(y&127|128),y>>>=7;h.push(y)}function Ze(h){var y={},G=y.N===void 0?!1:y.N;this.o={v:y.v===void 0?!1:y.v},this.N=G,y=this.o,cn.length?(G=cn.pop(),y&&(G.v=y.v),h&&re(G,h),h=G):h=new Pe(h,y),this.g=h,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}Ze.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};function Fe(h){var y=h.g;if((y=y.g==y.j)||(y=h.j)||(y=h.g,y=y.m||0>y.g||y.g>y.j),y)return!1;h.m=h.g.g,y=h.g.i();var G=y&7;return G!=0&&G!=5&&G!=1&&G!=2&&G!=3&&G!=4?(h.j=!0,!1):(h.i=y,h.l=y>>>3,h.h=G,!0)}function Mt(h){switch(h.h){case 0:if(h.h!=0)Mt(h);else{for(h=h.g;h.h[h.g]&128;)h.g++;h.g++}break;case 1:h.h!=1?Mt(h):(h=h.g,h.g+=8);break;case 2:if(h.h!=2)Mt(h);else{var y=h.g.i();h=h.g,h.g+=y}break;case 5:h.h!=5?Mt(h):(h=h.g,h.g+=4);break;case 3:y=h.l;do{if(!Fe(h)){h.j=!0;break}if(h.h==4){h.l!=y&&(h.j=!0);break}Mt(h)}while(1);break;default:h.j=!0}}function Ie(h,y,G){var C=h.g.j,B=h.g.i(),_=h.g.g+B;if(h.g.j=_,G(y,h),G=_-h.g.g,G!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+B+" bytes, instead read "+(B-G)+" bytes, either the data ended unexpectedly or the message misreported its own length");return h.g.g=_,h.g.j=C,y}function jt(h){return h.g.o()}function ye(h){var y=h.g.i();h=h.g;var G=h.g;h.g+=y,h=h.h;var C;if(ln)(C=Te)||(C=Te=new TextDecoder("utf-8",{fatal:!1})),C=C.decode(h.subarray(G,G+y));else{y=G+y;for(var B=[],_=null,M,q,ct;G<y;)M=h[G++],128>M?B.push(M):224>M?G>=y?B.push(65533):(q=h[G++],194>M||(q&192)!==128?(G--,B.push(65533)):B.push((M&31)<<6|q&63)):240>M?G>=y-1?B.push(65533):(q=h[G++],(q&192)!==128||M===224&&160>q||M===237&&160<=q||((C=h[G++])&192)!==128?(G--,B.push(65533)):B.push((M&15)<<12|(q&63)<<6|C&63)):244>=M?G>=y-2?B.push(65533):(q=h[G++],(q&192)!==128||(M<<28)+(q-144)>>30!==0||((C=h[G++])&192)!==128||((ct=h[G++])&192)!==128?(G--,B.push(65533)):(M=(M&7)<<18|(q&63)<<12|(C&63)<<6|ct&63,M-=65536,B.push((M>>10&1023)+55296,(M&1023)+56320))):B.push(65533),8192<=B.length&&(_=Ct(_,B),B.length=0);C=Ct(_,B)}return C}function Le(h,y,G){var C=h.g.i();for(C=h.g.g+C;h.g.g<C;)G.push(y.call(h.g))}function tn(h,y){h.h==2?Le(h,Pe.prototype.o,y):y.push(jt(h))}function Xe(){this.h=[],this.i=0,this.g=new Ke}function Ot(h,y){y.length!==0&&(h.h.push(y),h.i+=y.length)}function ze(h){var y=h.i+h.g.length();if(y===0)return new Uint8Array(0);y=new Uint8Array(y);for(var G=h.h,C=G.length,B=0,_=0;_<C;_++){var M=G[_];M.length!==0&&(y.set(M,B),B+=M.length)}return G=h.g,C=G.h,C!==0&&(y.set(G.g.subarray(0,C),B),G.h=0),h.h=[y],y}function _e(h,y,G){if(G!=null){Qt(h.g,8*y+5),h=h.g;var C=G;C=(G=0>C?1:0)?-C:C,C===0?0<1/C?he=Se=0:(Se=0,he=2147483648):isNaN(C)?(Se=0,he=2147483647):34028234663852886e22<C?(Se=0,he=(G<<31|2139095040)>>>0):11754943508222875e-54>C?(C=Math.round(C/Math.pow(2,-149)),Se=0,he=(G<<31|C)>>>0):(y=Math.floor(Math.log(C)/Math.LN2),C*=Math.pow(2,-y),C=Math.round(8388608*C),16777216<=C&&++y,Se=0,he=(G<<31|y+127<<23|C&8388607)>>>0),G=he,h.push(G>>>0&255),h.push(G>>>8&255),h.push(G>>>16&255),h.push(G>>>24&255)}}var xe=typeof Uint8Array=="function";function Wn(h,y,G){if(h!=null)return typeof h=="object"?xe&&h instanceof Uint8Array?G(h):un(h,y,G):y(h)}function un(h,y,G){if(Array.isArray(h)){for(var C=Array(h.length),B=0;B<h.length;B++)C[B]=Wn(h[B],y,G);return Array.isArray(h)&&h.W&&ve(C),C}C={};for(B in h)C[B]=Wn(h[B],y,G);return C}function Qe(h){return typeof h=="number"?isFinite(h)?h:String(h):h}var an={W:{value:!0,configurable:!0}};function ve(h){return Array.isArray(h)&&!Object.isFrozen(h)&&Object.defineProperties(h,an),h}var Ye;function Ge(h,y,G){var C=Ye;Ye=null,h||(h=C),C=this.constructor.ca,h||(h=C?[C]:[]),this.j=C?0:-1,this.m=this.g=null,this.h=h;t:{if(C=this.h.length,h=C-1,C&&(C=this.h[h],!(C===null||typeof C!="object"||Array.isArray(C)||xe&&C instanceof Uint8Array))){this.l=h-this.j,this.i=C;break t}y!==void 0&&-1<y?(this.l=Math.max(y,h+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(G)for(y=0;y<G.length;y++)h=G[y],h<this.l?(h+=this.j,(C=this.h[h])?ve(C):this.h[h]=ie):(De(this),(C=this.i[h])?ve(C):this.i[h]=ie)}var ie=Object.freeze(ve([]));function De(h){var y=h.l+h.j;h.h[y]||(h.i=h.h[y]={})}function qt(h,y,G){return y===-1?null:(G===void 0?0:G)||y>=h.l?h.i?h.i[y]:void 0:h.h[y+h.j]}function Pt(h,y){var G=G===void 0?!1:G,C=qt(h,y,G);return C==null&&(C=ie),C===ie&&(C=ve([]),Wt(h,y,C,G)),C}function fn(h){var y=Pt(h,3);if(h.m||(h.m={}),!h.m[3]){for(var G=0;G<y.length;G++)y[G]=+y[G];h.m[3]=!0}return y}function fe(h,y,G){return h=qt(h,y),h==null?G:h}function Ft(h,y,G){return h=qt(h,y),h=h==null?h:+h,h==null?G===void 0?0:G:h}function Wt(h,y,G,C){(C===void 0?0:C)||y>=h.l?(De(h),h.i[y]=G):h.h[y+h.j]=G}function oe(h,y,G){if(G===-1)return null;if(h.g||(h.g={}),!h.g[G]){var C=qt(h,G,!1);C&&(h.g[G]=new y(C))}return h.g[G]}function we(h,y){h.g||(h.g={});var G=h.g[1];if(!G){var C=Pt(h,1);G=[];for(var B=0;B<C.length;B++)G[B]=new y(C[B]);h.g[1]=G}return G}function te(h,y,G){var C=C===void 0?!1:C;h.g||(h.g={});var B=G&&tt(G);h.g[y]=G,Wt(h,y,B,C)}function se(h,y,G,C){var B=we(h,G);y=y||new G,h=Pt(h,1),C!=null?(B.splice(C,0,y),h.splice(C,0,tt(y))):(B.push(y),h.push(tt(y)))}Ge.prototype.toJSON=function(){var h=tt(this);return un(h,Qe,bn)};function tt(h,y){if(h.g)for(var G in h.g){var C=h.g[G];if(Array.isArray(C))for(var B=0;B<C.length;B++)C[B]&&tt(C[B]);else C&&tt(C)}return h.h}Ge.prototype.toString=function(){return tt(this).toString()};function it(h,y){if(h=h.o){Ot(y,y.g.end());for(var G=0;G<h.length;G++)Ot(y,h[G])}}function ut(h,y){if(y.h==4)return!1;var G=y.m;return Mt(y),y.N||(y=Vn(y.g.h,G,y.g.g),(G=h.o)?G.push(y):h.o=[y]),!0}function _t(h){Ge.call(this,h,-1,ue)}dt(_t,Ge),_t.prototype.getRows=function(){return qt(this,1)},_t.prototype.getCols=function(){return qt(this,2)},_t.prototype.getPackedDataList=function(){return fn(this)},_t.prototype.getLayout=function(){return fe(this,4,0)};function de(h,y){for(;Fe(y);)switch(y.i){case 8:var G=y.g.i();Wt(h,1,G);break;case 16:G=y.g.i(),Wt(h,2,G);break;case 29:case 26:tn(y,h.getPackedDataList());break;case 32:G=We(y.g),Wt(h,4,G);break;default:if(!ut(h,y))return h}return h}var ue=[3];function St(h,y){var G=void 0;return new(G||(G=Promise))(function(C,B){function _(ct){try{q(y.next(ct))}catch(s){B(s)}}function M(ct){try{q(y.throw(ct))}catch(s){B(s)}}function q(ct){ct.done?C(ct.value):new G(function(s){s(ct.value)}).then(_,M)}q((y=y.apply(h,void 0)).next())})}function me(h){Ge.call(this,h)}dt(me,Ge);function Ce(h,y){for(;Fe(y);)switch(y.i){case 8:var G=y.g.i();Wt(h,1,G);break;case 21:G=jt(y),Wt(h,2,G);break;case 26:G=ye(y),Wt(h,3,G);break;case 34:G=ye(y),Wt(h,4,G);break;default:if(!ut(h,y))return h}return h}function en(h){Ge.call(this,h,-1,nn)}dt(en,Ge),en.prototype.addClassification=function(h,y){return se(this,h,me,y),this};var nn=[1];function mn(h){Ge.call(this,h)}dt(mn,Ge);function yn(h,y){for(;Fe(y);)switch(y.i){case 13:var G=jt(y);Wt(h,1,G);break;case 21:G=jt(y),Wt(h,2,G);break;case 29:G=jt(y),Wt(h,3,G);break;case 37:G=jt(y),Wt(h,4,G);break;case 45:G=jt(y),Wt(h,5,G);break;default:if(!ut(h,y))return h}return h}function He(h){Ge.call(this,h,-1,jn)}dt(He,Ge);function rn(h){t:{var y=new He;for(h=new Ze(h);Fe(h);)switch(h.i){case 10:var G=Ie(h,new mn,yn);se(y,G,mn,void 0);break;default:if(!ut(y,h))break t}}return y}var jn=[1];function on(h){Ge.call(this,h)}dt(on,Ge);function Je(h){Ge.call(this,h,-1,Sn)}dt(Je,Ge),Je.prototype.getVertexType=function(){return fe(this,1,0)},Je.prototype.getPrimitiveType=function(){return fe(this,2,0)},Je.prototype.getVertexBufferList=function(){return fn(this)},Je.prototype.getIndexBufferList=function(){return Pt(this,4)};function Zn(h,y){for(;Fe(y);)switch(y.i){case 8:var G=We(y.g);Wt(h,1,G);break;case 16:G=We(y.g),Wt(h,2,G);break;case 29:case 26:tn(y,h.getVertexBufferList());break;case 32:case 34:G=y;var C=h.getIndexBufferList();G.h==2?Le(G,Pe.prototype.i,C):C.push(G.g.i());break;default:if(!ut(h,y))return h}return h}var Sn=[3,4];function Be(h){Ge.call(this,h)}dt(Be,Ge),Be.prototype.getMesh=function(){return oe(this,Je,1)},Be.prototype.getPoseTransformMatrix=function(){return oe(this,_t,2)};function Un(h){t:{var y=new Be;for(h=new Ze(h);Fe(h);)switch(h.i){case 10:var G=Ie(h,new Je,Zn);te(y,1,G);break;case 18:G=Ie(h,new _t,de),te(y,2,G);break;default:if(!ut(y,h))break t}}return y}function sn(h,y,G){if(G=h.createShader(G===0?h.VERTEX_SHADER:h.FRAGMENT_SHADER),h.shaderSource(G,y),h.compileShader(G),!h.getShaderParameter(G,h.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
70
|
+
`+g.getProgramInfoLog(m));e=o.o=m,g.useProgram(e),u=g.getUniformLocation(e,"sampler0"),o.j={K:g.getAttribLocation(e,"aVertex"),J:g.getAttribLocation(e,"aTex"),ma:u},o.u=g.createBuffer(),g.bindBuffer(g.ARRAY_BUFFER,o.u),g.enableVertexAttribArray(o.j.K),g.vertexAttribPointer(o.j.K,2,g.FLOAT,!1,0,0),g.bufferData(g.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),g.STATIC_DRAW),g.bindBuffer(g.ARRAY_BUFFER,null),o.s=g.createBuffer(),g.bindBuffer(g.ARRAY_BUFFER,o.s),g.enableVertexAttribArray(o.j.J),g.vertexAttribPointer(o.j.J,2,g.FLOAT,!1,0,0),g.bufferData(g.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),g.STATIC_DRAW),g.bindBuffer(g.ARRAY_BUFFER,null),g.uniform1i(u,0)}e=o.j,g.useProgram(o.o),g.canvas.width=d.width,g.canvas.height=d.height,g.viewport(0,0,d.width,d.height),g.activeTexture(g.TEXTURE0),o.h.bindTexture2d(d.glName),g.enableVertexAttribArray(e.K),g.bindBuffer(g.ARRAY_BUFFER,o.u),g.vertexAttribPointer(e.K,2,g.FLOAT,!1,0,0),g.enableVertexAttribArray(e.J),g.bindBuffer(g.ARRAY_BUFFER,o.s),g.vertexAttribPointer(e.J,2,g.FLOAT,!1,0,0),g.bindFramebuffer(g.DRAW_FRAMEBUFFER?g.DRAW_FRAMEBUFFER:g.FRAMEBUFFER,null),g.clearColor(0,0,0,0),g.clear(g.COLOR_BUFFER_BIT),g.colorMask(!0,!0,!0,!0),g.drawArrays(g.TRIANGLE_FAN,0,4),g.disableVertexAttribArray(e.K),g.disableVertexAttribArray(e.J),g.bindBuffer(g.ARRAY_BUFFER,null),o.h.bindTexture2d(0)}function $(o){this.g=o}var yt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Xt(o,d){return d+o}function Kt(o,d){window[o]=d}function It(o){var d=document.createElement("script");return d.setAttribute("src",o),d.setAttribute("crossorigin","anonymous"),new Promise(function(g){d.addEventListener("load",function(){g()},!1),d.addEventListener("error",function(){g()},!1),document.body.appendChild(d)})}function ht(){return Zt(function(o){switch(o.g){case 1:return o.o=2,O(o,WebAssembly.instantiate(yt),4);case 4:o.g=3,o.o=0;break;case 2:return o.o=0,o.j=null,o.return(!1);case 3:return o.return(!0)}})}function Wt(o){if(this.g=o,this.listeners={},this.j={},this.H={},this.o={},this.u={},this.I=this.s=this.Z=!0,this.D=Promise.resolve(),this.Y="",this.C={},this.locateFile=o&&o.locateFile||Xt,typeof window=="object")var d=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")d=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.$=d,o.options){d=T(Object.keys(o.options));for(var g=d.next();!g.done;g=d.next()){g=g.value;var e=o.options[g].default;e!==void 0&&(this.j[g]=typeof e=="function"?e():e)}}}i=Wt.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function xt(o){var d,g,e,u,m,t,c,a,b,S,L;return Zt(function(F){switch(F.g){case 1:return o.Z?(d=o.g.files===void 0?[]:typeof o.g.files=="function"?o.g.files(o.j):o.g.files,O(F,ht(),2)):F.return();case 2:if(g=F.h,typeof window=="object")return Kt("createMediapipeSolutionsWasm",{locateFile:o.locateFile}),Kt("createMediapipeSolutionsPackedAssets",{locateFile:o.locateFile}),t=d.filter(function(U){return U.data!==void 0}),c=d.filter(function(U){return U.data===void 0}),a=Promise.all(t.map(function(U){var z=l(o,U.url);if(U.path!==void 0){var Q=U.path;z=z.then(function(D){return o.overrideFile(Q,D),Promise.resolve(D)})}return z})),b=Promise.all(c.map(function(U){return U.simd===void 0||U.simd&&g||!U.simd&&!g?It(o.locateFile(U.url,o.$)):Promise.resolve()})).then(function(){var U,z,Q;return Zt(function(D){if(D.g==1)return U=window.createMediapipeSolutionsWasm,z=window.createMediapipeSolutionsPackedAssets,Q=o,O(D,U(z),2);Q.h=D.h,D.g=0})}),S=function(){return Zt(function(U){return o.g.graph&&o.g.graph.url?U=O(U,l(o,o.g.graph.url),0):(U.g=0,U=void 0),U})}(),O(F,Promise.all([b,a,S]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return e=d.filter(function(U){return U.simd===void 0||U.simd&&g||!U.simd&&!g}).map(function(U){return o.locateFile(U.url,o.$)}),importScripts.apply(null,J(e)),u=o,O(F,createMediapipeSolutionsWasm(Module),6);case 6:u.h=F.h,o.l=new OffscreenCanvas(1,1),o.h.canvas=o.l,m=o.h.GL.createContext(o.l,{antialias:!1,alpha:!1,ja:typeof WebGL2RenderingContext<"u"?2:1}),o.h.GL.makeContextCurrent(m),F.g=4;break;case 7:if(o.l=document.createElement("canvas"),L=o.l.getContext("webgl2",{}),!L&&(L=o.l.getContext("webgl",{}),!L))return alert("Failed to create WebGL canvas context when passing video frame."),F.return();o.G=L,o.h.canvas=o.l,o.h.createContext(o.l,!0,!0,{});case 4:o.i=new o.h.SolutionWasm,o.Z=!1,F.g=0}})}function wt(o){var d,g,e,u,m,t,c,a;return Zt(function(b){if(b.g==1){if(o.g.graph&&o.g.graph.url&&o.Y===o.g.graph.url)return b.return();if(o.s=!0,!o.g.graph||!o.g.graph.url){b.g=2;return}return o.Y=o.g.graph.url,O(b,l(o,o.g.graph.url),3)}for(b.g!=2&&(d=b.h,o.i.loadGraph(d)),g=T(Object.keys(o.C)),e=g.next();!e.done;e=g.next())u=e.value,o.i.overrideFile(u,o.C[u]);if(o.C={},o.g.listeners)for(m=T(o.g.listeners),t=m.next();!t.done;t=m.next())c=t.value,Y(o,c);a=o.j,o.j={},o.setOptions(a),b.g=0})}i.reset=function(){var o=this;return Zt(function(d){o.i&&(o.i.reset(),o.o={},o.u={}),d.g=0})},i.setOptions=function(o,d){var g=this;if(d=d||this.g.options){for(var e=[],u=[],m={},t=T(Object.keys(o)),c=t.next();!c.done;m={R:m.R,S:m.S},c=t.next()){var a=c.value;a in this.j&&this.j[a]===o[a]||(this.j[a]=o[a],c=d[a],c!==void 0&&(c.onChange&&(m.R=c.onChange,m.S=o[a],e.push(function(b){return function(){var S;return Zt(function(L){if(L.g==1)return O(L,b.R(b.S),2);S=L.h,S===!0&&(g.s=!0),L.g=0})}}(m))),c.graphOptionXref&&(a={valueNumber:c.type===1?o[a]:0,valueBoolean:c.type===0?o[a]:!1,valueString:c.type===2?o[a]:""},c=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),c.graphOptionXref),a),u.push(c))))}(e.length!==0||u.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(u),this.A=(this.A===void 0?[]:this.A).concat(e))}};function Ht(o){var d,g,e,u,m,t,c;return Zt(function(a){switch(a.g){case 1:if(!o.s)return a.return();if(!o.A){a.g=2;break}d=T(o.A),g=d.next();case 3:if(g.done){a.g=5;break}return e=g.value,O(a,e(),4);case 4:g=d.next(),a.g=3;break;case 5:o.A=void 0;case 2:if(o.B){for(u=new o.h.GraphOptionChangeRequestList,m=T(o.B),t=m.next();!t.done;t=m.next())c=t.value,u.push_back(c);o.i.changeOptions(u),u.delete(),o.B=void 0}o.s=!1,a.g=0}})}i.initialize=function(){var o=this;return Zt(function(d){return d.g==1?O(d,xt(o),2):d.g!=3?O(d,wt(o),3):O(d,Ht(o),0)})};function l(o,d){var g,e;return Zt(function(u){return d in o.H?u.return(o.H[d]):(g=o.locateFile(d,""),e=fetch(g).then(function(m){return m.arrayBuffer()}),o.H[d]=e,u.return(e))})}i.overrideFile=function(o,d){this.i?this.i.overrideFile(o,d):this.C[o]=d},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(o,d){var g=this,e,u,m,t,c,a,b,S,L;return Zt(function(F){switch(F.g){case 1:return g.g.inputs?(e=1e3*(d==null?performance.now():d),O(F,g.D,2)):F.return();case 2:return O(F,g.initialize(),3);case 3:for(u=new g.h.PacketDataList,m=T(Object.keys(o)),t=m.next();!t.done;t=m.next())if(c=t.value,a=g.g.inputs[c]){t:{var U=o[c];switch(a.type){case"video":var z=g.o[a.stream];if(z||(z=new A(g.h,g.G),g.o[a.stream]=z),z.l===0&&(z.l=z.h.createTexture()),typeof HTMLVideoElement<"u"&&U instanceof HTMLVideoElement)var Q=U.videoWidth,D=U.videoHeight;else typeof HTMLImageElement<"u"&&U instanceof HTMLImageElement?(Q=U.naturalWidth,D=U.naturalHeight):(Q=U.width,D=U.height);D={glName:z.l,width:Q,height:D},Q=z.g,Q.canvas.width=D.width,Q.canvas.height=D.height,Q.activeTexture(Q.TEXTURE0),z.h.bindTexture2d(z.l),Q.texImage2D(Q.TEXTURE_2D,0,Q.RGBA,Q.RGBA,Q.UNSIGNED_BYTE,U),z.h.bindTexture2d(0),z=D;break t;case"detections":for(z=g.o[a.stream],z||(z=new $(g.h),g.o[a.stream]=z),z.data||(z.data=new z.g.DetectionListData),z.data.reset(U.length),D=0;D<U.length;++D){Q=U[D];var st=z.data,ft=st.setBoundingBox,mt=D,Gt=Q.boundingBox,vt=new G;if(Ft(vt,1,Gt.xCenter),Ft(vt,2,Gt.yCenter),Ft(vt,3,Gt.height),Ft(vt,4,Gt.width),Ft(vt,5,Gt.rotation),Ft(vt,6,Gt.rectId),Gt=P(vt,C),ft.call(st,mt,Gt),Q.landmarks)for(st=0;st<Q.landmarks.length;++st){vt=Q.landmarks[st];var At=!!vt.visibility;ft=z.data,mt=ft.addNormalizedLandmark,Gt=D,vt=Object.assign(Object.assign({},vt),{visibility:At?vt.visibility:0}),At=new pe,Ft(At,1,vt.x),Ft(At,2,vt.y),Ft(At,3,vt.z),vt.visibility&&Ft(At,4,vt.visibility),vt=P(At,ge),mt.call(ft,Gt,vt)}if(Q.V)for(st=0;st<Q.V.length;++st)ft=z.data,mt=ft.addClassification,Gt=D,vt=Q.V[st],At=new kt,Ft(At,2,vt.ga),vt.index&&Ft(At,1,vt.index),vt.label&&Ft(At,3,vt.label),vt.displayName&&Ft(At,4,vt.displayName),vt=P(At,Tt),mt.call(ft,Gt,vt)}z=z.data;break t;default:z={}}}switch(b=z,S=a.stream,a.type){case"video":u.pushTexture2d(Object.assign(Object.assign({},b),{stream:S,timestamp:e}));break;case"detections":L=b,L.stream=S,L.timestamp=e,u.pushDetectionList(L);break;default:throw Error("Unknown input config type: '"+a.type+"'")}}return g.i.send(u),O(F,g.D,4);case 4:u.delete(),F.g=0}})};function v(o,d,g){var e,u,m,t,c,a,b,S,L,F,U,z,Q,D;return Zt(function(st){switch(st.g){case 1:if(!g)return st.return(d);for(e={},u=0,m=T(Object.keys(g)),t=m.next();!t.done;t=m.next())c=t.value,a=g[c],typeof a!="string"&&a.type==="texture"&&d[a.stream]!==void 0&&++u;1<u&&(o.I=!1),b=T(Object.keys(g)),t=b.next();case 2:if(t.done){st.g=4;break}if(S=t.value,L=g[S],typeof L=="string")return Q=e,D=S,O(st,I(o,S,d[L]),14);if(F=d[L.stream],L.type==="detection_list"){if(F){for(var ft=F.getRectList(),mt=F.getLandmarksList(),Gt=F.getClassificationsList(),vt=[],At=0;At<ft.size();++At){var le=V(ft.get(At),G,C);le={boundingBox:{xCenter:oe(le,1),yCenter:oe(le,2),height:oe(le,3),width:oe(le,4),rotation:oe(le,5,0),rectId:se(le,6)},landmarks:Le(V(mt.get(At),ke,h),pe,1).map(k),V:w(V(Gt.get(At),Et,Dt))},vt.push(le)}ft=vt}else ft=[];e[S]=ft,st.g=7;break}if(L.type==="proto_list"){if(F){for(ft=Array(F.size()),mt=0;mt<F.size();mt++)ft[mt]=F.get(mt);F.delete()}else ft=[];e[S]=ft,st.g=7;break}if(F===void 0){st.g=3;break}if(L.type==="float_list"){e[S]=F,st.g=7;break}if(L.type==="proto"){e[S]=F,st.g=7;break}if(L.type!=="texture")throw Error("Unknown output config type: '"+L.type+"'");return U=o.u[S],U||(U=new A(o.h,o.G),o.u[S]=U),O(st,B(U,F,o.I),13);case 13:z=st.h,e[S]=z;case 7:L.transform&&e[S]&&(e[S]=L.transform(e[S])),st.g=3;break;case 14:Q[D]=st.h;case 3:t=b.next(),st.g=2;break;case 4:return st.return(e)}})}function I(o,d,g){var e;return Zt(function(u){return typeof g=="number"||g instanceof Uint8Array||g instanceof o.h.Uint8BlobList?u.return(g):g instanceof o.h.Texture2dDataOut?(e=o.u[d],e||(e=new A(o.h,o.G),o.u[d]=e),u.return(B(e,g,o.I))):u.return(void 0)})}function Y(o,d){for(var g=d.name||"$",e=[].concat(J(d.wants)),u=new o.h.StringList,m=T(d.wants),t=m.next();!t.done;t=m.next())u.push_back(t.value);m=o.h.PacketListener.implement({onResults:function(c){for(var a={},b=0;b<d.wants.length;++b)a[e[b]]=c.get(b);var S=o.listeners[g];S&&(o.D=v(o,a,d.outs).then(function(L){L=S(L);for(var F=0;F<d.wants.length;++F){var U=a[e[F]];typeof U=="object"&&U.hasOwnProperty&&U.hasOwnProperty("delete")&&U.delete()}L&&(o.D=L)}))}}),o.i.attachMultiListener(u,m),u.delete()}i.onResults=function(o,d){this.listeners[d||"$"]=o},Ct("Solution",Wt),Ct("OptionType",{BOOL:0,NUMBER:1,ia:2,0:"BOOL",1:"NUMBER",2:"STRING"});function N(o){var d=this;o=o||{};var g={url:"face_detection_short.binarypb"},e={type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}};this.g=new Wt({locateFile:o.locateFile,files:[{data:!0,url:"face_detection_short.binarypb"},{data:!0,url:"face_detection_short_range.tflite"},{simd:!0,url:"face_detection_solution_simd_wasm_bin.js"},{simd:!1,url:"face_detection_solution_wasm_bin.js"}],graph:g,listeners:[{wants:["detections","image_transformed"],outs:{image:"image_transformed",detections:{type:"detection_list",stream:"detections"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},model:{type:0,onChange:function(u){var m,t,c,a,b,S;return Zt(function(L){switch(L.g){case 1:m=u==="short"?["face_detection_short_range.tflite"]:["face_detection_full_range_sparse.tflite"],t=T(m),c=t.next();case 2:if(c.done){L.g=4;break}return a=c.value,b="third_party/mediapipe/modules/face_detection/"+a,O(L,l(d.g,a),5);case 5:S=L.h,d.g.overrideFile(b,S),c=t.next(),L.g=2;break;case 4:return g.url=u==="short"?"face_detection_short.binarypb":"face_detection_full.binarypb",e.graphOptionXref.calculatorName=u==="short"?"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator":"facedetectionfullrangegpu__facedetectionfullrangecommon__TensorsToDetectionsCalculator",L.return(!0)}})}},minDetectionConfidence:e}})}i=N.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(o){this.g.onResults(o)},i.initialize=function(){var o=this;return Zt(function(d){return O(d,o.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(o){var d=this;return Zt(function(g){return O(g,d.g.send(o),0)})},i.setOptions=function(o){this.g.setOptions(o)},Ct("FaceDetection",N),Ct("FACEDETECTION_LIPS",K),Ct("FACEDETECTION_LEFT_EYE",_),Ct("FACEDETECTION_LEFT_EYEBROW",M),Ct("FACEDETECTION_RIGHT_EYE",q),Ct("FACEDETECTION_RIGHT_EYEBROW",ct),Ct("FACEDETECTION_FACE_OVAL",s),Ct("FACEDETECTION_CONTOURS",X),Ct("FACEDETECTION_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Ct("VERSION","0.4.1646425229")}).call(Vi);const Ri={};(function(){var i;function n(h){var y=0;return function(){return y<h.length?{done:!1,value:h[y++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(h,y,G){return h==Array.prototype||h==Object.prototype||(h[y]=G.value),h};function f(h){h=[typeof globalThis=="object"&&globalThis,h,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var y=0;y<h.length;++y){var G=h[y];if(G&&G.Math==Math)return G}throw Error("Cannot find global object")}var Z=f(this);function x(h,y){if(y)t:{var G=Z;h=h.split(".");for(var C=0;C<h.length-1;C++){var K=h[C];if(!(K in G))break t;G=G[K]}h=h[h.length-1],C=G[h],y=y(C),y!=C&&y!=null&&r(G,h,{configurable:!0,writable:!0,value:y})}}x("Symbol",function(h){function y(_){if(this instanceof y)throw new TypeError("Symbol is not a constructor");return new G(C+(_||"")+"_"+K++,_)}function G(_,M){this.g=_,r(this,"description",{configurable:!0,writable:!0,value:M})}if(h)return h;G.prototype.toString=function(){return this.g};var C="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",K=0;return y}),x("Symbol.iterator",function(h){if(h)return h;h=Symbol("Symbol.iterator");for(var y="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),G=0;G<y.length;G++){var C=Z[y[G]];typeof C=="function"&&typeof C.prototype[h]!="function"&&r(C.prototype,h,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return h});function H(h){return h={next:h},h[Symbol.iterator]=function(){return this},h}function T(h){var y=typeof Symbol<"u"&&Symbol.iterator&&h[Symbol.iterator];return y?y.call(h):{next:n(h)}}function J(h){if(!(h instanceof Array)){h=T(h);for(var y,G=[];!(y=h.next()).done;)G.push(y.value);h=G}return h}var et=typeof Object.create=="function"?Object.create:function(h){function y(){}return y.prototype=h,new y},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(h,y){if(h.__proto__=y,h.__proto__!==y)throw new TypeError(h+" is not extensible");return h}:null}var at=lt;function dt(h,y){if(h.prototype=et(y.prototype),h.prototype.constructor=h,at)at(h,y);else for(var G in y)if(G!="prototype")if(Object.defineProperties){var C=Object.getOwnPropertyDescriptor(y,G);C&&Object.defineProperty(h,G,C)}else h[G]=y[G];h.ea=y.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Nt(h){if(h.l)throw new TypeError("Generator is already running");h.l=!0}Bt.prototype.o=function(h){this.h=h};function ee(h,y){h.j={U:y,V:!0},h.g=h.m||h.s}Bt.prototype.return=function(h){this.j={return:h},this.g=this.s};function O(h,y,G){return h.g=G,{value:y}}function $e(h){this.g=new Bt,this.h=h}function je(h,y){Nt(h.g);var G=h.g.i;return G?We(h,"return"in G?G.return:function(C){return{value:C,done:!0}},y,h.g.return):(h.g.return(y),zt(h))}function We(h,y,G,C){try{var K=y.call(h.g.i,G);if(!(K instanceof Object))throw new TypeError("Iterator result "+K+" is not an object");if(!K.done)return h.g.l=!1,K;var _=K.value}catch(M){return h.g.i=null,ee(h.g,M),zt(h)}return h.g.i=null,C.call(h.g,_),zt(h)}function zt(h){for(;h.g.g;)try{var y=h.h(h.g);if(y)return h.g.l=!1,{value:y.value,done:!1}}catch(G){h.g.h=void 0,ee(h.g,G)}if(h.g.l=!1,h.g.j){if(y=h.g.j,h.g.j=null,y.V)throw y.U;return{value:y.return,done:!0}}return{value:void 0,done:!0}}function Jn(h){this.next=function(y){return Nt(h.g),h.g.i?y=We(h,h.g.i.next,y,h.g.o):(h.g.o(y),y=zt(h)),y},this.throw=function(y){return Nt(h.g),h.g.i?y=We(h,h.g.i.throw,y,h.g.o):(ee(h.g,y),y=zt(h)),y},this.return=function(y){return je(h,y)},this[Symbol.iterator]=function(){return this}}function ne(h,y){return y=new Jn(new $e(y)),at&&h.prototype&&at(y,h.prototype),y}function Zt(h,y){h instanceof String&&(h+="");var G=0,C=!1,K={next:function(){if(!C&&G<h.length){var _=G++;return{value:y(_,h[_]),done:!1}}return C=!0,{done:!0,value:void 0}}};return K[Symbol.iterator]=function(){return K},K}var qe=typeof Object.assign=="function"?Object.assign:function(h,y){for(var G=1;G<arguments.length;G++){var C=arguments[G];if(C)for(var K in C)Object.prototype.hasOwnProperty.call(C,K)&&(h[K]=C[K])}return h};x("Object.assign",function(h){return h||qe}),x("Promise",function(h){function y(M){this.h=0,this.i=void 0,this.g=[],this.o=!1;var q=this.j();try{M(q.resolve,q.reject)}catch(ct){q.reject(ct)}}function G(){this.g=null}function C(M){return M instanceof y?M:new y(function(q){q(M)})}if(h)return h;G.prototype.h=function(M){if(this.g==null){this.g=[];var q=this;this.i(function(){q.l()})}this.g.push(M)};var K=Z.setTimeout;G.prototype.i=function(M){K(M,0)},G.prototype.l=function(){for(;this.g&&this.g.length;){var M=this.g;this.g=[];for(var q=0;q<M.length;++q){var ct=M[q];M[q]=null;try{ct()}catch(s){this.j(s)}}}this.g=null},G.prototype.j=function(M){this.i(function(){throw M})},y.prototype.j=function(){function M(s){return function(X){ct||(ct=!0,s.call(q,X))}}var q=this,ct=!1;return{resolve:M(this.C),reject:M(this.l)}},y.prototype.C=function(M){if(M===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(M instanceof y)this.F(M);else{t:switch(typeof M){case"object":var q=M!=null;break t;case"function":q=!0;break t;default:q=!1}q?this.u(M):this.m(M)}},y.prototype.u=function(M){var q=void 0;try{q=M.then}catch(ct){this.l(ct);return}typeof q=="function"?this.G(q,M):this.m(M)},y.prototype.l=function(M){this.s(2,M)},y.prototype.m=function(M){this.s(1,M)},y.prototype.s=function(M,q){if(this.h!=0)throw Error("Cannot settle("+M+", "+q+"): Promise already settled in state"+this.h);this.h=M,this.i=q,this.h===2&&this.D(),this.A()},y.prototype.D=function(){var M=this;K(function(){if(M.B()){var q=Z.console;typeof q<"u"&&q.error(M.i)}},1)},y.prototype.B=function(){if(this.o)return!1;var M=Z.CustomEvent,q=Z.Event,ct=Z.dispatchEvent;return typeof ct>"u"?!0:(typeof M=="function"?M=new M("unhandledrejection",{cancelable:!0}):typeof q=="function"?M=new q("unhandledrejection",{cancelable:!0}):(M=Z.document.createEvent("CustomEvent"),M.initCustomEvent("unhandledrejection",!1,!0,M)),M.promise=this,M.reason=this.i,ct(M))},y.prototype.A=function(){if(this.g!=null){for(var M=0;M<this.g.length;++M)_.h(this.g[M]);this.g=null}};var _=new G;return y.prototype.F=function(M){var q=this.j();M.J(q.resolve,q.reject)},y.prototype.G=function(M,q){var ct=this.j();try{M.call(q,ct.resolve,ct.reject)}catch(s){ct.reject(s)}},y.prototype.then=function(M,q){function ct(w,k){return typeof w=="function"?function(A){try{s(w(A))}catch(B){X(B)}}:k}var s,X,R=new y(function(w,k){s=w,X=k});return this.J(ct(M,s),ct(q,X)),R},y.prototype.catch=function(M){return this.then(void 0,M)},y.prototype.J=function(M,q){function ct(){switch(s.h){case 1:M(s.i);break;case 2:q(s.i);break;default:throw Error("Unexpected state: "+s.h)}}var s=this;this.g==null?_.h(ct):this.g.push(ct),this.o=!0},y.resolve=C,y.reject=function(M){return new y(function(q,ct){ct(M)})},y.race=function(M){return new y(function(q,ct){for(var s=T(M),X=s.next();!X.done;X=s.next())C(X.value).J(q,ct)})},y.all=function(M){var q=T(M),ct=q.next();return ct.done?C([]):new y(function(s,X){function R(A){return function(B){w[A]=B,k--,k==0&&s(w)}}var w=[],k=0;do w.push(void 0),k++,C(ct.value).J(R(w.length-1),X),ct=q.next();while(!ct.done)})},y}),x("Object.is",function(h){return h||function(y,G){return y===G?y!==0||1/y===1/G:y!==y&&G!==G}}),x("Array.prototype.includes",function(h){return h||function(y,G){var C=this;C instanceof String&&(C=String(C));var K=C.length;for(G=G||0,0>G&&(G=Math.max(G+K,0));G<K;G++){var _=C[G];if(_===y||Object.is(_,y))return!0}return!1}}),x("String.prototype.includes",function(h){return h||function(y,G){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(y instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(y,G||0)!==-1}}),x("Array.prototype.keys",function(h){return h||function(){return Zt(this,function(y){return y})}});var zn=this||self;function Re(h,y){h=h.split(".");var G=zn;h[0]in G||typeof G.execScript>"u"||G.execScript("var "+h[0]);for(var C;h.length&&(C=h.shift());)h.length||y===void 0?G[C]&&G[C]!==Object.prototype[C]?G=G[C]:G=G[C]={}:G[C]=y}function Ct(h,y){return y=String.fromCharCode.apply(null,y),h==null?y:h+y}var Te,ln=typeof TextDecoder<"u",Xn,Hn=typeof TextEncoder<"u";function In(h){if(Hn)h=(Xn||(Xn=new TextEncoder)).encode(h);else{var y=void 0;y=y===void 0?!1:y;for(var G=0,C=new Uint8Array(3*h.length),K=0;K<h.length;K++){var _=h.charCodeAt(K);if(128>_)C[G++]=_;else{if(2048>_)C[G++]=_>>6|192;else{if(55296<=_&&57343>=_){if(56319>=_&&K<h.length){var M=h.charCodeAt(++K);if(56320<=M&&57343>=M){_=1024*(_-55296)+M-56320+65536,C[G++]=_>>18|240,C[G++]=_>>12&63|128,C[G++]=_>>6&63|128,C[G++]=_&63|128;continue}else K--}if(y)throw Error("Found an unpaired surrogate");_=65533}C[G++]=_>>12|224,C[G++]=_>>6&63|128}C[G++]=_&63|128}}h=C.subarray(0,G)}return h}var kn={},hn=null;function bn(h,y){y===void 0&&(y=0),Pe(),y=kn[y];for(var G=Array(Math.floor(h.length/3)),C=y[64]||"",K=0,_=0;K<h.length-2;K+=3){var M=h[K],q=h[K+1],ct=h[K+2],s=y[M>>2];M=y[(M&3)<<4|q>>4],q=y[(q&15)<<2|ct>>6],ct=y[ct&63],G[_++]=s+M+q+ct}switch(s=0,ct=C,h.length-K){case 2:s=h[K+1],ct=y[(s&15)<<2]||C;case 1:h=h[K],G[_]=y[h>>2]+y[(h&3)<<4|s>>4]+ct+C}return G.join("")}function En(h){var y=h.length,G=3*y/4;G%3?G=Math.floor(G):"=.".indexOf(h[y-1])!=-1&&(G="=.".indexOf(h[y-2])!=-1?G-2:G-1);var C=new Uint8Array(G),K=0;return Fn(h,function(_){C[K++]=_}),C.subarray(0,K)}function Fn(h,y){function G(ct){for(;C<h.length;){var s=h.charAt(C++),X=hn[s];if(X!=null)return X;if(!/^[\s\xa0]*$/.test(s))throw Error("Unknown base64 encoding at char: "+s)}return ct}Pe();for(var C=0;;){var K=G(-1),_=G(0),M=G(64),q=G(64);if(q===64&&K===-1)break;y(K<<2|_>>4),M!=64&&(y(_<<4&240|M>>2),q!=64&&y(M<<6&192|q))}}function Pe(){if(!hn){hn={};for(var h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),y=["+/=","+/","-_=","-_.","-_"],G=0;5>G;G++){var C=h.concat(y[G].split(""));kn[G]=C;for(var K=0;K<C.length;K++){var _=C[K];hn[_]===void 0&&(hn[_]=K)}}}}var Ae=typeof Uint8Array.prototype.slice=="function",xn;function Wn(h,y,G){return y===G?xn||(xn=new Uint8Array(0)):Ae?h.slice(y,G):new Uint8Array(h.subarray(y,G))}var he=0,Se=0;function Oe(h,y){y=y===void 0?{}:y,y=y.v===void 0?!1:y.v,this.h=null,this.g=this.j=this.l=0,this.m=!1,this.v=y,h&&re(this,h)}function re(h,y){y=y.constructor===Uint8Array?y:y.constructor===ArrayBuffer?new Uint8Array(y):y.constructor===Array?new Uint8Array(y):y.constructor===String?En(y):y instanceof Uint8Array?new Uint8Array(y.buffer,y.byteOffset,y.byteLength):new Uint8Array(0),h.h=y,h.l=0,h.j=h.h.length,h.g=h.l}Oe.prototype.reset=function(){this.g=this.l};function Ve(h){for(var y=128,G=0,C=0,K=0;4>K&&128<=y;K++)y=h.h[h.g++],G|=(y&127)<<7*K;if(128<=y&&(y=h.h[h.g++],G|=(y&127)<<28,C|=(y&127)>>4),128<=y)for(K=0;5>K&&128<=y;K++)y=h.h[h.g++],C|=(y&127)<<7*K+3;if(128>y)return h=G>>>0,y=C>>>0,(C=y&2147483648)&&(h=~h+1>>>0,y=~y>>>0,h==0&&(y=y+1>>>0)),h=4294967296*y+(h>>>0),C?-h:h;h.m=!0}Oe.prototype.i=function(){var h=this.h,y=h[this.g],G=y&127;return 128>y?(this.g+=1,G):(y=h[this.g+1],G|=(y&127)<<7,128>y?(this.g+=2,G):(y=h[this.g+2],G|=(y&127)<<14,128>y?(this.g+=3,G):(y=h[this.g+3],G|=(y&127)<<21,128>y?(this.g+=4,G):(y=h[this.g+4],G|=(y&15)<<28,128>y?(this.g+=5,G>>>0):(this.g+=5,128<=h[this.g++]&&128<=h[this.g++]&&128<=h[this.g++]&&128<=h[this.g++]&&this.g++,G)))))},Oe.prototype.o=function(){var h=this.h[this.g],y=this.h[this.g+1],G=this.h[this.g+2],C=this.h[this.g+3];return this.g+=4,G=(h<<0|y<<8|G<<16|C<<24)>>>0,h=2*(G>>31)+1,y=G>>>23&255,G&=8388607,y==255?G?NaN:1/0*h:y==0?h*Math.pow(2,-149)*G:h*Math.pow(2,y-150)*(G+Math.pow(2,23))};var cn=[];function Be(){this.g=new Uint8Array(64),this.h=0}Be.prototype.push=function(h){if(!(this.h+1<this.g.length)){var y=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(y)}this.g[this.h++]=h},Be.prototype.length=function(){return this.h},Be.prototype.end=function(){var h=this.g,y=this.h;return this.h=0,Wn(h,0,y)};function Qt(h,y){for(;127<y;)h.push(y&127|128),y>>>=7;h.push(y)}function Ze(h){var y={},G=y.N===void 0?!1:y.N;this.o={v:y.v===void 0?!1:y.v},this.N=G,y=this.o,cn.length?(G=cn.pop(),y&&(G.v=y.v),h&&re(G,h),h=G):h=new Oe(h,y),this.g=h,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}Ze.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};function Fe(h){var y=h.g;if((y=y.g==y.j)||(y=h.j)||(y=h.g,y=y.m||0>y.g||y.g>y.j),y)return!1;h.m=h.g.g,y=h.g.i();var G=y&7;return G!=0&&G!=5&&G!=1&&G!=2&&G!=3&&G!=4?(h.j=!0,!1):(h.i=y,h.l=y>>>3,h.h=G,!0)}function Mt(h){switch(h.h){case 0:if(h.h!=0)Mt(h);else{for(h=h.g;h.h[h.g]&128;)h.g++;h.g++}break;case 1:h.h!=1?Mt(h):(h=h.g,h.g+=8);break;case 2:if(h.h!=2)Mt(h);else{var y=h.g.i();h=h.g,h.g+=y}break;case 5:h.h!=5?Mt(h):(h=h.g,h.g+=4);break;case 3:y=h.l;do{if(!Fe(h)){h.j=!0;break}if(h.h==4){h.l!=y&&(h.j=!0);break}Mt(h)}while(1);break;default:h.j=!0}}function Ie(h,y,G){var C=h.g.j,K=h.g.i(),_=h.g.g+K;if(h.g.j=_,G(y,h),G=_-h.g.g,G!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+K+" bytes, instead read "+(K-G)+" bytes, either the data ended unexpectedly or the message misreported its own length");return h.g.g=_,h.g.j=C,y}function jt(h){return h.g.o()}function ye(h){var y=h.g.i();h=h.g;var G=h.g;h.g+=y,h=h.h;var C;if(ln)(C=Te)||(C=Te=new TextDecoder("utf-8",{fatal:!1})),C=C.decode(h.subarray(G,G+y));else{y=G+y;for(var K=[],_=null,M,q,ct;G<y;)M=h[G++],128>M?K.push(M):224>M?G>=y?K.push(65533):(q=h[G++],194>M||(q&192)!==128?(G--,K.push(65533)):K.push((M&31)<<6|q&63)):240>M?G>=y-1?K.push(65533):(q=h[G++],(q&192)!==128||M===224&&160>q||M===237&&160<=q||((C=h[G++])&192)!==128?(G--,K.push(65533)):K.push((M&15)<<12|(q&63)<<6|C&63)):244>=M?G>=y-2?K.push(65533):(q=h[G++],(q&192)!==128||(M<<28)+(q-144)>>30!==0||((C=h[G++])&192)!==128||((ct=h[G++])&192)!==128?(G--,K.push(65533)):(M=(M&7)<<18|(q&63)<<12|(C&63)<<6|ct&63,M-=65536,K.push((M>>10&1023)+55296,(M&1023)+56320))):K.push(65533),8192<=K.length&&(_=Ct(_,K),K.length=0);C=Ct(_,K)}return C}function Ye(h,y,G){var C=h.g.i();for(C=h.g.g+C;h.g.g<C;)G.push(y.call(h.g))}function tn(h,y){h.h==2?Ye(h,Oe.prototype.o,y):y.push(jt(h))}function Xe(){this.h=[],this.i=0,this.g=new Be}function Pt(h,y){y.length!==0&&(h.h.push(y),h.i+=y.length)}function ze(h){var y=h.i+h.g.length();if(y===0)return new Uint8Array(0);y=new Uint8Array(y);for(var G=h.h,C=G.length,K=0,_=0;_<C;_++){var M=G[_];M.length!==0&&(y.set(M,K),K+=M.length)}return G=h.g,C=G.h,C!==0&&(y.set(G.g.subarray(0,C),K),G.h=0),h.h=[y],y}function _e(h,y,G){if(G!=null){Qt(h.g,8*y+5),h=h.g;var C=G;C=(G=0>C?1:0)?-C:C,C===0?0<1/C?he=Se=0:(Se=0,he=2147483648):isNaN(C)?(Se=0,he=2147483647):34028234663852886e22<C?(Se=0,he=(G<<31|2139095040)>>>0):11754943508222875e-54>C?(C=Math.round(C/Math.pow(2,-149)),Se=0,he=(G<<31|C)>>>0):(y=Math.floor(Math.log(C)/Math.LN2),C*=Math.pow(2,-y),C=Math.round(8388608*C),16777216<=C&&++y,Se=0,he=(G<<31|y+127<<23|C&8388607)>>>0),G=he,h.push(G>>>0&255),h.push(G>>>8&255),h.push(G>>>16&255),h.push(G>>>24&255)}}var xe=typeof Uint8Array=="function";function Vn(h,y,G){if(h!=null)return typeof h=="object"?xe&&h instanceof Uint8Array?G(h):un(h,y,G):y(h)}function un(h,y,G){if(Array.isArray(h)){for(var C=Array(h.length),K=0;K<h.length;K++)C[K]=Vn(h[K],y,G);return Array.isArray(h)&&h.W&&ve(C),C}C={};for(K in h)C[K]=Vn(h[K],y,G);return C}function Qe(h){return typeof h=="number"?isFinite(h)?h:String(h):h}var an={W:{value:!0,configurable:!0}};function ve(h){return Array.isArray(h)&&!Object.isFrozen(h)&&Object.defineProperties(h,an),h}var we;function Ge(h,y,G){var C=we;we=null,h||(h=C),C=this.constructor.ca,h||(h=C?[C]:[]),this.j=C?0:-1,this.m=this.g=null,this.h=h;t:{if(C=this.h.length,h=C-1,C&&(C=this.h[h],!(C===null||typeof C!="object"||Array.isArray(C)||xe&&C instanceof Uint8Array))){this.l=h-this.j,this.i=C;break t}y!==void 0&&-1<y?(this.l=Math.max(y,h+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(G)for(y=0;y<G.length;y++)h=G[y],h<this.l?(h+=this.j,(C=this.h[h])?ve(C):this.h[h]=ie):(De(this),(C=this.i[h])?ve(C):this.i[h]=ie)}var ie=Object.freeze(ve([]));function De(h){var y=h.l+h.j;h.h[y]||(h.i=h.h[y]={})}function qt(h,y,G){return y===-1?null:(G===void 0?0:G)||y>=h.l?h.i?h.i[y]:void 0:h.h[y+h.j]}function Ot(h,y){var G=G===void 0?!1:G,C=qt(h,y,G);return C==null&&(C=ie),C===ie&&(C=ve([]),Vt(h,y,C,G)),C}function fn(h){var y=Ot(h,3);if(h.m||(h.m={}),!h.m[3]){for(var G=0;G<y.length;G++)y[G]=+y[G];h.m[3]=!0}return y}function fe(h,y,G){return h=qt(h,y),h==null?G:h}function Ft(h,y,G){return h=qt(h,y),h=h==null?h:+h,h==null?G===void 0?0:G:h}function Vt(h,y,G,C){(C===void 0?0:C)||y>=h.l?(De(h),h.i[y]=G):h.h[y+h.j]=G}function oe(h,y,G){if(G===-1)return null;if(h.g||(h.g={}),!h.g[G]){var C=qt(h,G,!1);C&&(h.g[G]=new y(C))}return h.g[G]}function Le(h,y){h.g||(h.g={});var G=h.g[1];if(!G){var C=Ot(h,1);G=[];for(var K=0;K<C.length;K++)G[K]=new y(C[K]);h.g[1]=G}return G}function te(h,y,G){var C=C===void 0?!1:C;h.g||(h.g={});var K=G&&tt(G);h.g[y]=G,Vt(h,y,K,C)}function se(h,y,G,C){var K=Le(h,G);y=y||new G,h=Ot(h,1),C!=null?(K.splice(C,0,y),h.splice(C,0,tt(y))):(K.push(y),h.push(tt(y)))}Ge.prototype.toJSON=function(){var h=tt(this);return un(h,Qe,bn)};function tt(h,y){if(h.g)for(var G in h.g){var C=h.g[G];if(Array.isArray(C))for(var K=0;K<C.length;K++)C[K]&&tt(C[K]);else C&&tt(C)}return h.h}Ge.prototype.toString=function(){return tt(this).toString()};function it(h,y){if(h=h.o){Pt(y,y.g.end());for(var G=0;G<h.length;G++)Pt(y,h[G])}}function ut(h,y){if(y.h==4)return!1;var G=y.m;return Mt(y),y.N||(y=Wn(y.g.h,G,y.g.g),(G=h.o)?G.push(y):h.o=[y]),!0}function _t(h){Ge.call(this,h,-1,ue)}dt(_t,Ge),_t.prototype.getRows=function(){return qt(this,1)},_t.prototype.getCols=function(){return qt(this,2)},_t.prototype.getPackedDataList=function(){return fn(this)},_t.prototype.getLayout=function(){return fe(this,4,0)};function de(h,y){for(;Fe(y);)switch(y.i){case 8:var G=y.g.i();Vt(h,1,G);break;case 16:G=y.g.i(),Vt(h,2,G);break;case 29:case 26:tn(y,h.getPackedDataList());break;case 32:G=Ve(y.g),Vt(h,4,G);break;default:if(!ut(h,y))return h}return h}var ue=[3];function St(h,y){var G=void 0;return new(G||(G=Promise))(function(C,K){function _(ct){try{q(y.next(ct))}catch(s){K(s)}}function M(ct){try{q(y.throw(ct))}catch(s){K(s)}}function q(ct){ct.done?C(ct.value):new G(function(s){s(ct.value)}).then(_,M)}q((y=y.apply(h,void 0)).next())})}function me(h){Ge.call(this,h)}dt(me,Ge);function Ce(h,y){for(;Fe(y);)switch(y.i){case 8:var G=y.g.i();Vt(h,1,G);break;case 21:G=jt(y),Vt(h,2,G);break;case 26:G=ye(y),Vt(h,3,G);break;case 34:G=ye(y),Vt(h,4,G);break;default:if(!ut(h,y))return h}return h}function en(h){Ge.call(this,h,-1,nn)}dt(en,Ge),en.prototype.addClassification=function(h,y){return se(this,h,me,y),this};var nn=[1];function mn(h){Ge.call(this,h)}dt(mn,Ge);function yn(h,y){for(;Fe(y);)switch(y.i){case 13:var G=jt(y);Vt(h,1,G);break;case 21:G=jt(y),Vt(h,2,G);break;case 29:G=jt(y),Vt(h,3,G);break;case 37:G=jt(y),Vt(h,4,G);break;case 45:G=jt(y),Vt(h,5,G);break;default:if(!ut(h,y))return h}return h}function He(h){Ge.call(this,h,-1,jn)}dt(He,Ge);function rn(h){t:{var y=new He;for(h=new Ze(h);Fe(h);)switch(h.i){case 10:var G=Ie(h,new mn,yn);se(y,G,mn,void 0);break;default:if(!ut(y,h))break t}}return y}var jn=[1];function on(h){Ge.call(this,h)}dt(on,Ge);function Je(h){Ge.call(this,h,-1,Sn)}dt(Je,Ge),Je.prototype.getVertexType=function(){return fe(this,1,0)},Je.prototype.getPrimitiveType=function(){return fe(this,2,0)},Je.prototype.getVertexBufferList=function(){return fn(this)},Je.prototype.getIndexBufferList=function(){return Ot(this,4)};function Zn(h,y){for(;Fe(y);)switch(y.i){case 8:var G=Ve(y.g);Vt(h,1,G);break;case 16:G=Ve(y.g),Vt(h,2,G);break;case 29:case 26:tn(y,h.getVertexBufferList());break;case 32:case 34:G=y;var C=h.getIndexBufferList();G.h==2?Ye(G,Oe.prototype.i,C):C.push(G.g.i());break;default:if(!ut(h,y))return h}return h}var Sn=[3,4];function Ke(h){Ge.call(this,h)}dt(Ke,Ge),Ke.prototype.getMesh=function(){return oe(this,Je,1)},Ke.prototype.getPoseTransformMatrix=function(){return oe(this,_t,2)};function Un(h){t:{var y=new Ke;for(h=new Ze(h);Fe(h);)switch(h.i){case 10:var G=Ie(h,new Je,Zn);te(y,1,G);break;case 18:G=Ie(h,new _t,de),te(y,2,G);break;default:if(!ut(y,h))break t}}return y}function sn(h,y,G){if(G=h.createShader(G===0?h.VERTEX_SHADER:h.FRAGMENT_SHADER),h.shaderSource(G,y),h.compileShader(G),!h.getShaderParameter(G,h.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
71
71
|
|
|
72
|
-
`+h.getShaderInfoLog(G));return G}function vn(h){return
|
|
72
|
+
`+h.getShaderInfoLog(G));return G}function vn(h){return Le(h,me).map(function(y){return{index:fe(y,1,0),Y:Ft(y,2),label:qt(y,3)!=null?fe(y,3,""):void 0,displayName:qt(y,4)!=null?fe(y,4,""):void 0}})}function Tn(h){return{x:Ft(h,1),y:Ft(h,2),z:Ft(h,3),visibility:qt(h,4)!=null?Ft(h,4):void 0}}function Mn(h,y){this.h=h,this.g=y,this.l=0}function dn(h,y,G){return Yn(h,y),typeof h.g.canvas.transferToImageBitmap=="function"?Promise.resolve(h.g.canvas.transferToImageBitmap()):G?Promise.resolve(h.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(h.g.canvas):(h.i===void 0&&(h.i=document.createElement("canvas")),new Promise(function(C){h.i.height=h.g.canvas.height,h.i.width=h.g.canvas.width,h.i.getContext("2d",{}).drawImage(h.g.canvas,0,0,h.g.canvas.width,h.g.canvas.height),C(h.i)}))}function Yn(h,y){var G=h.g;if(h.m===void 0){var C=sn(G,`
|
|
73
73
|
attribute vec2 aVertex;
|
|
74
74
|
attribute vec2 aTex;
|
|
75
75
|
varying vec2 vTex;
|
|
76
76
|
void main(void) {
|
|
77
77
|
gl_Position = vec4(aVertex, 0.0, 1.0);
|
|
78
78
|
vTex = aTex;
|
|
79
|
-
}`,0),
|
|
79
|
+
}`,0),K=sn(G,`
|
|
80
80
|
precision mediump float;
|
|
81
81
|
varying vec2 vTex;
|
|
82
82
|
uniform sampler2D sampler0;
|
|
83
83
|
void main(){
|
|
84
84
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
85
|
-
}`,1),_=G.createProgram();if(G.attachShader(_,C),G.attachShader(_,
|
|
85
|
+
}`,1),_=G.createProgram();if(G.attachShader(_,C),G.attachShader(_,K),G.linkProgram(_),!G.getProgramParameter(_,G.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
86
86
|
|
|
87
|
-
`+G.getProgramInfoLog(_));C=h.m=_,G.useProgram(C),B=G.getUniformLocation(C,"sampler0"),h.j={I:G.getAttribLocation(C,"aVertex"),H:G.getAttribLocation(C,"aTex"),da:B},h.s=G.createBuffer(),G.bindBuffer(G.ARRAY_BUFFER,h.s),G.enableVertexAttribArray(h.j.I),G.vertexAttribPointer(h.j.I,2,G.FLOAT,!1,0,0),G.bufferData(G.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),G.STATIC_DRAW),G.bindBuffer(G.ARRAY_BUFFER,null),h.o=G.createBuffer(),G.bindBuffer(G.ARRAY_BUFFER,h.o),G.enableVertexAttribArray(h.j.H),G.vertexAttribPointer(h.j.H,2,G.FLOAT,!1,0,0),G.bufferData(G.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),G.STATIC_DRAW),G.bindBuffer(G.ARRAY_BUFFER,null),G.uniform1i(B,0)}C=h.j,G.useProgram(h.m),G.canvas.width=y.width,G.canvas.height=y.height,G.viewport(0,0,y.width,y.height),G.activeTexture(G.TEXTURE0),h.h.bindTexture2d(y.glName),G.enableVertexAttribArray(C.I),G.bindBuffer(G.ARRAY_BUFFER,h.s),G.vertexAttribPointer(C.I,2,G.FLOAT,!1,0,0),G.enableVertexAttribArray(C.H),G.bindBuffer(G.ARRAY_BUFFER,h.o),G.vertexAttribPointer(C.H,2,G.FLOAT,!1,0,0),G.bindFramebuffer(G.DRAW_FRAMEBUFFER?G.DRAW_FRAMEBUFFER:G.FRAMEBUFFER,null),G.clearColor(0,0,0,0),G.clear(G.COLOR_BUFFER_BIT),G.colorMask(!0,!0,!0,!0),G.drawArrays(G.TRIANGLE_FAN,0,4),G.disableVertexAttribArray(C.I),G.disableVertexAttribArray(C.H),G.bindBuffer(G.ARRAY_BUFFER,null),h.h.bindTexture2d(0)}function _n(h){this.g=h}var Qn=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Yn(h,y){return y+h}function Cn(h,y){window[h]=y}function p(h){var y=document.createElement("script");return y.setAttribute("src",h),y.setAttribute("crossorigin","anonymous"),new Promise(function(G){y.addEventListener("load",function(){G()},!1),y.addEventListener("error",function(){G()},!1),document.body.appendChild(y)})}function V(){return St(this,function h(){return ne(h,function(y){switch(y.g){case 1:return y.m=2,P(y,WebAssembly.instantiate(Qn),4);case 4:y.g=3,y.m=0;break;case 2:return y.m=0,y.j=null,y.return(!1);case 3:return y.return(!0)}})})}function W(h){if(this.g=h,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=h&&h.locateFile||Yn,typeof window=="object")var y=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")y=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=y,h.options){y=T(Object.keys(h.options));for(var G=y.next();!G.done;G=y.next()){G=G.value;var C=h.options[G].default;C!==void 0&&(this.j[G]=typeof C=="function"?C():C)}}}i=W.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function E(h,y){return h.g.files===void 0?[]:typeof h.g.files=="function"?h.g.files(y):h.g.files}function O(h){return St(h,function y(){var G=this,C,B,_,M,q,ct,s,X,R,Y,k;return ne(y,function(A){switch(A.g){case 1:return C=G,G.R?(B=E(G,G.j),P(A,V(),2)):A.return();case 2:if(_=A.h,typeof window=="object")return Cn("createMediapipeSolutionsWasm",{locateFile:G.locateFile}),Cn("createMediapipeSolutionsPackedAssets",{locateFile:G.locateFile}),ct=B.filter(function(K){return K.data!==void 0}),s=B.filter(function(K){return K.data===void 0}),X=Promise.all(ct.map(function(K){var nt=rt(C,K.url);if(K.path!==void 0){var $=K.path;nt=nt.then(function(yt){return C.overrideFile($,yt),Promise.resolve(yt)})}return nt})),R=Promise.all(s.map(function(K){return K.simd===void 0||K.simd&&_||!K.simd&&!_?p(C.locateFile(K.url,C.S)):Promise.resolve()})).then(function(){return St(C,function K(){var nt,$,yt=this;return ne(K,function(Xt){if(Xt.g==1)return nt=window.createMediapipeSolutionsWasm,$=window.createMediapipeSolutionsPackedAssets,P(Xt,nt($),2);yt.h=Xt.h,Xt.g=0})})}),Y=function(){return St(C,function K(){var nt=this;return ne(K,function($){return nt.g.graph&&nt.g.graph.url?$=P($,rt(nt,nt.g.graph.url),0):($.g=0,$=void 0),$})})}(),P(A,Promise.all([R,X,Y]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return M=B.filter(function(K){return K.simd===void 0||K.simd&&_||!K.simd&&!_}).map(function(K){return C.locateFile(K.url,C.S)}),importScripts.apply(null,J(M)),P(A,createMediapipeSolutionsWasm(Module),6);case 6:G.h=A.h,G.l=new OffscreenCanvas(1,1),G.h.canvas=G.l,q=G.h.GL.createContext(G.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),G.h.GL.makeContextCurrent(q),A.g=4;break;case 7:if(G.l=document.createElement("canvas"),k=G.l.getContext("webgl2",{}),!k&&(k=G.l.getContext("webgl",{}),!k))return alert("Failed to create WebGL canvas context when passing video frame."),A.return();G.D=k,G.h.canvas=G.l,G.h.createContext(G.l,!0,!0,{});case 4:G.i=new G.h.SolutionWasm,G.R=!1,A.g=0}})})}function ot(h){return St(h,function y(){var G=this,C,B,_,M,q,ct,s,X;return ne(y,function(R){if(R.g==1){if(G.g.graph&&G.g.graph.url&&G.P===G.g.graph.url)return R.return();if(G.o=!0,!G.g.graph||!G.g.graph.url){R.g=2;return}return G.P=G.g.graph.url,P(R,rt(G,G.g.graph.url),3)}for(R.g!=2&&(C=R.h,G.i.loadGraph(C)),B=T(Object.keys(G.B)),_=B.next();!_.done;_=B.next())M=_.value,G.i.overrideFile(M,G.B[M]);if(G.B={},G.g.listeners)for(q=T(G.g.listeners),ct=q.next();!ct.done;ct=q.next())s=ct.value,Ut(G,s);X=G.j,G.j={},G.setOptions(X),R.g=0})})}i.reset=function(){return St(this,function h(){var y=this;return ne(h,function(G){y.i&&(y.i.reset(),y.m={},y.s={}),G.g=0})})},i.setOptions=function(h,y){var G=this;if(y=y||this.g.options){for(var C=[],B=[],_={},M=T(Object.keys(h)),q=M.next();!q.done;_={K:_.K,L:_.L},q=M.next()){var ct=q.value;ct in this.j&&this.j[ct]===h[ct]||(this.j[ct]=h[ct],q=y[ct],q!==void 0&&(q.onChange&&(_.K=q.onChange,_.L=h[ct],C.push(function(s){return function(){return St(G,function X(){var R,Y=this;return ne(X,function(k){if(k.g==1)return P(k,s.K(s.L),2);R=k.h,R===!0&&(Y.o=!0),k.g=0})})}}(_))),q.graphOptionXref&&(ct={valueNumber:q.type===1?h[ct]:0,valueBoolean:q.type===0?h[ct]:!1,valueString:q.type===2?h[ct]:""},q=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),q.graphOptionXref),ct),B.push(q))))}(C.length!==0||B.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(B),this.u=(this.u===void 0?[]:this.u).concat(C))}};function j(h){return St(h,function y(){var G=this,C,B,_,M,q,ct,s;return ne(y,function(X){switch(X.g){case 1:if(!G.o)return X.return();if(!G.u){X.g=2;break}C=T(G.u),B=C.next();case 3:if(B.done){X.g=5;break}return _=B.value,P(X,_(),4);case 4:B=C.next(),X.g=3;break;case 5:G.u=void 0;case 2:if(G.A){for(M=new G.h.GraphOptionChangeRequestList,q=T(G.A),ct=q.next();!ct.done;ct=q.next())s=ct.value,M.push_back(s);G.i.changeOptions(M),M.delete(),G.A=void 0}G.o=!1,X.g=0}})})}i.initialize=function(){return St(this,function h(){var y=this;return ne(h,function(G){return G.g==1?P(G,O(y),2):G.g!=3?P(G,ot(y),3):P(G,j(y),0)})})};function rt(h,y){return St(h,function G(){var C=this,B,_;return ne(G,function(M){return y in C.F?M.return(C.F[y]):(B=C.locateFile(y,""),_=fetch(B).then(function(q){return q.arrayBuffer()}),C.F[y]=_,M.return(_))})})}i.overrideFile=function(h,y){this.i?this.i.overrideFile(h,y):this.B[h]=y},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(h,y){return St(this,function G(){var C=this,B,_,M,q,ct,s,X,R,Y;return ne(G,function(k){switch(k.g){case 1:return C.g.inputs?(B=1e3*(y==null?performance.now():y),P(k,C.C,2)):k.return();case 2:return P(k,C.initialize(),3);case 3:for(_=new C.h.PacketDataList,M=T(Object.keys(h)),q=M.next();!q.done;q=M.next())if(ct=q.value,s=C.g.inputs[ct]){t:{var A=C,K=h[ct];switch(s.type){case"video":var nt=A.m[s.stream];if(nt||(nt=new Mn(A.h,A.D),A.m[s.stream]=nt),A=nt,A.l===0&&(A.l=A.h.createTexture()),typeof HTMLVideoElement<"u"&&K instanceof HTMLVideoElement){var $=K.videoWidth;nt=K.videoHeight}else typeof HTMLImageElement<"u"&&K instanceof HTMLImageElement?($=K.naturalWidth,nt=K.naturalHeight):($=K.width,nt=K.height);nt={glName:A.l,width:$,height:nt},$=A.g,$.canvas.width=nt.width,$.canvas.height=nt.height,$.activeTexture($.TEXTURE0),A.h.bindTexture2d(A.l),$.texImage2D($.TEXTURE_2D,0,$.RGBA,$.RGBA,$.UNSIGNED_BYTE,K),A.h.bindTexture2d(0),A=nt;break t;case"detections":for(nt=A.m[s.stream],nt||(nt=new _n(A.h),A.m[s.stream]=nt),A=nt,A.data||(A.data=new A.g.DetectionListData),A.data.reset(K.length),nt=0;nt<K.length;++nt){$=K[nt];var yt=A.data,Xt=yt.setBoundingBox,Bt=nt,It=$.T,ht=new on;Wt(ht,1,It.Z),Wt(ht,2,It.$),Wt(ht,3,It.height),Wt(ht,4,It.width),Wt(ht,5,It.rotation),Wt(ht,6,It.X);var Vt=It=new Xe;_e(Vt,1,qt(ht,1)),_e(Vt,2,qt(ht,2)),_e(Vt,3,qt(ht,3)),_e(Vt,4,qt(ht,4)),_e(Vt,5,qt(ht,5));var xt=qt(ht,6);if(xt!=null&&xt!=null){Qt(Vt.g,48);var Yt=Vt.g,Ht=xt;xt=0>Ht,Ht=Math.abs(Ht);var l=Ht>>>0;for(Ht=Math.floor((Ht-l)/4294967296),Ht>>>=0,xt&&(Ht=~Ht>>>0,l=(~l>>>0)+1,4294967295<l&&(l=0,Ht++,4294967295<Ht&&(Ht=0))),he=l,Se=Ht,xt=he,l=Se;0<l||127<xt;)Yt.push(xt&127|128),xt=(xt>>>7|l<<25)>>>0,l>>>=7;Yt.push(xt)}if(it(ht,Vt),It=ze(It),Xt.call(yt,Bt,It),$.O)for(yt=0;yt<$.O.length;++yt)ht=$.O[yt],Vt=!!ht.visibility,Xt=A.data,Bt=Xt.addNormalizedLandmark,It=nt,ht=Object.assign(Object.assign({},ht),{visibility:Vt?ht.visibility:0}),Vt=new mn,Wt(Vt,1,ht.x),Wt(Vt,2,ht.y),Wt(Vt,3,ht.z),ht.visibility&&Wt(Vt,4,ht.visibility),Yt=ht=new Xe,_e(Yt,1,qt(Vt,1)),_e(Yt,2,qt(Vt,2)),_e(Yt,3,qt(Vt,3)),_e(Yt,4,qt(Vt,4)),_e(Yt,5,qt(Vt,5)),it(Vt,Yt),ht=ze(ht),Bt.call(Xt,It,ht);if($.M)for(yt=0;yt<$.M.length;++yt){if(Xt=A.data,Bt=Xt.addClassification,It=nt,ht=$.M[yt],Vt=new me,Wt(Vt,2,ht.Y),ht.index&&Wt(Vt,1,ht.index),ht.label&&Wt(Vt,3,ht.label),ht.displayName&&Wt(Vt,4,ht.displayName),Yt=ht=new Xe,l=qt(Vt,1),l!=null&&l!=null)if(Qt(Yt.g,8),xt=Yt.g,0<=l)Qt(xt,l);else{for(Ht=0;9>Ht;Ht++)xt.push(l&127|128),l>>=7;xt.push(1)}_e(Yt,2,qt(Vt,2)),xt=qt(Vt,3),xt!=null&&(xt=In(xt),Qt(Yt.g,26),Qt(Yt.g,xt.length),Ot(Yt,Yt.g.end()),Ot(Yt,xt)),xt=qt(Vt,4),xt!=null&&(xt=In(xt),Qt(Yt.g,34),Qt(Yt.g,xt.length),Ot(Yt,Yt.g.end()),Ot(Yt,xt)),it(Vt,Yt),ht=ze(ht),Bt.call(Xt,It,ht)}}A=A.data;break t;default:A={}}}switch(X=A,R=s.stream,s.type){case"video":_.pushTexture2d(Object.assign(Object.assign({},X),{stream:R,timestamp:B}));break;case"detections":Y=X,Y.stream=R,Y.timestamp=B,_.pushDetectionList(Y);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return C.i.send(_),P(k,C.C,4);case 4:_.delete(),k.g=0}})})};function bt(h,y,G){return St(h,function C(){var B,_,M,q,ct,s,X=this,R,Y,k,A,K,nt,$,yt;return ne(C,function(Xt){switch(Xt.g){case 1:if(!G)return Xt.return(y);for(B={},_=0,M=T(Object.keys(G)),q=M.next();!q.done;q=M.next())ct=q.value,s=G[ct],typeof s!="string"&&s.type==="texture"&&y[s.stream]!==void 0&&++_;1<_&&(X.G=!1),R=T(Object.keys(G)),q=R.next();case 2:if(q.done){Xt.g=4;break}if(Y=q.value,k=G[Y],typeof k=="string")return $=B,yt=Y,P(Xt,Rt(X,Y,y[k]),14);if(A=y[k.stream],k.type==="detection_list"){if(A){for(var Bt=A.getRectList(),It=A.getLandmarksList(),ht=A.getClassificationsList(),Vt=[],xt=0;xt<Bt.size();++xt){var Yt=Bt.get(xt);t:{var Ht=new on;for(Yt=new Ze(Yt);Fe(Yt);)switch(Yt.i){case 13:var l=jt(Yt);Wt(Ht,1,l);break;case 21:l=jt(Yt),Wt(Ht,2,l);break;case 29:l=jt(Yt),Wt(Ht,3,l);break;case 37:l=jt(Yt),Wt(Ht,4,l);break;case 45:l=jt(Yt),Wt(Ht,5,l);break;case 48:l=We(Yt.g),Wt(Ht,6,l);break;default:if(!ut(Ht,Yt))break t}}Ht={Z:Ft(Ht,1),$:Ft(Ht,2),height:Ft(Ht,3),width:Ft(Ht,4),rotation:Ft(Ht,5,0),X:fe(Ht,6,0)},Yt=we(rn(It.get(xt)),mn).map(Tn);var v=ht.get(xt);t:for(l=new en,v=new Ze(v);Fe(v);)switch(v.i){case 10:l.addClassification(Ie(v,new me,Ce));break;default:if(!ut(l,v))break t}Ht={T:Ht,O:Yt,M:vn(l)},Vt.push(Ht)}Bt=Vt}else Bt=[];B[Y]=Bt,Xt.g=7;break}if(k.type==="proto_list"){if(A){for(Bt=Array(A.size()),It=0;It<A.size();It++)Bt[It]=A.get(It);A.delete()}else Bt=[];B[Y]=Bt,Xt.g=7;break}if(A===void 0){Xt.g=3;break}if(k.type==="float_list"){B[Y]=A,Xt.g=7;break}if(k.type==="proto"){B[Y]=A,Xt.g=7;break}if(k.type!=="texture")throw Error("Unknown output config type: '"+k.type+"'");return K=X.s[Y],K||(K=new Mn(X.h,X.D),X.s[Y]=K),P(Xt,dn(K,A,X.G),13);case 13:nt=Xt.h,B[Y]=nt;case 7:k.transform&&B[Y]&&(B[Y]=k.transform(B[Y])),Xt.g=3;break;case 14:$[yt]=Xt.h;case 3:q=R.next(),Xt.g=2;break;case 4:return Xt.return(B)}})})}function Rt(h,y,G){return St(h,function C(){var B=this,_;return ne(C,function(M){return typeof G=="number"||G instanceof Uint8Array||G instanceof B.h.Uint8BlobList?M.return(G):G instanceof B.h.Texture2dDataOut?(_=B.s[y],_||(_=new Mn(B.h,B.D),B.s[y]=_),M.return(dn(_,G,B.G))):M.return(void 0)})})}function Ut(h,y){for(var G=y.name||"$",C=[].concat(J(y.wants)),B=new h.h.StringList,_=T(y.wants),M=_.next();!M.done;M=_.next())B.push_back(M.value);_=h.h.PacketListener.implement({onResults:function(q){for(var ct={},s=0;s<y.wants.length;++s)ct[C[s]]=q.get(s);var X=h.listeners[G];X&&(h.C=bt(h,ct,y.outs).then(function(R){R=X(R);for(var Y=0;Y<y.wants.length;++Y){var k=ct[C[Y]];typeof k=="object"&&k.hasOwnProperty&&k.hasOwnProperty("delete")&&k.delete()}R&&(h.C=R)}))}}),h.i.attachMultiListener(B,_),B.delete()}i.onResults=function(h,y){this.listeners[y||"$"]=h},Re("Solution",W),Re("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function Jt(h){h=Un(h);var y=h.getMesh();if(!y)return h;var G=new Float32Array(y.getVertexBufferList());y.getVertexBufferList=function(){return G};var C=new Uint32Array(y.getIndexBufferList());return y.getIndexBufferList=function(){return C},h}var $t={files:[{url:"face_mesh_solution_packed_assets_loader.js"},{simd:!0,url:"face_mesh_solution_simd_wasm_bin.js"},{simd:!1,url:"face_mesh_solution_wasm_bin.js"}],graph:{url:"face_mesh.binarypb"},listeners:[{wants:["multi_face_geometry","image_transformed","multi_face_landmarks"],outs:{image:"image_transformed",multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:function(h){return h.map(Jt)}},multiFaceLandmarks:{type:"proto_list",stream:"multi_face_landmarks",transform:function(h){return h.map(function(y){return we(rn(y),mn).map(Tn)})}}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},enableFaceGeometry:{type:0,graphOptionXref:{calculatorName:"EnableFaceGeometryConstant",calculatorType:"ConstantSidePacketCalculator",fieldName:"bool_value"}},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumFaces:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorNumFaces",fieldName:"int_value"}},refineLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorRefineLandmarks",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facelandmarkfrontgpu__facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"facelandmarkfrontgpu__facelandmarkgpu__ThresholdingCalculator",fieldName:"threshold"}},cameraNear:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"near"}},cameraFar:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"far"}},cameraVerticalFovDegrees:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"vertical_fov_degrees"}}}},kt=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Tt=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Et=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Dt=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ae=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],pe=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],ge=[].concat(J(kt),J(Tt),J(Et),J(Dt),J(ae),J(pe));function ke(h){h=h||{},h=Object.assign(Object.assign({},$t),h),this.g=new W(h)}i=ke.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(h){this.g.onResults(h)},i.initialize=function(){return St(this,function h(){var y=this;return ne(h,function(G){return P(G,y.g.initialize(),0)})})},i.reset=function(){this.g.reset()},i.send=function(h){return St(this,function y(){var G=this;return ne(y,function(C){return P(C,G.g.send(h),0)})})},i.setOptions=function(h){this.g.setOptions(h)},Re("FACE_GEOMETRY",{Layout:{COLUMN_MAJOR:0,ROW_MAJOR:1,0:"COLUMN_MAJOR",1:"ROW_MAJOR"},PrimitiveType:{TRIANGLE:0,0:"TRIANGLE"},VertexType:{VERTEX_PT:0,0:"VERTEX_PT"},DEFAULT_CAMERA_PARAMS:{verticalFovDegrees:63,near:1,far:1e4}}),Re("FaceMesh",ke),Re("FACEMESH_LIPS",kt),Re("FACEMESH_LEFT_EYE",Tt),Re("FACEMESH_LEFT_EYEBROW",Et),Re("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Re("FACEMESH_RIGHT_EYE",Dt),Re("FACEMESH_RIGHT_EYEBROW",ae),Re("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Re("FACEMESH_FACE_OVAL",pe),Re("FACEMESH_CONTOURS",ge),Re("FACEMESH_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Re("matrixDataToMatrix",function(h){for(var y=h.getCols(),G=h.getRows(),C=h.getPackedDataList(),B=[],_=0;_<G;_++)B.push(Array(y));for(_=0;_<G;_++)for(var M=0;M<y;M++){var q=h.getLayout()===1?_*y+M:M*G+_;B[_][M]=C[q]}return B}),Re("VERSION","0.4.1633559619")}).call(Ri);const Ii={};(function(){var i;function n(t){var c=0;return function(){return c<t.length?{done:!1,value:t[c++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(t,c,a){return t==Array.prototype||t==Object.prototype||(t[c]=a.value),t};function f(t){t=[typeof globalThis=="object"&&globalThis,t,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var c=0;c<t.length;++c){var a=t[c];if(a&&a.Math==Math)return a}throw Error("Cannot find global object")}var Z=f(this);function x(t,c){if(c)t:{var a=Z;t=t.split(".");for(var b=0;b<t.length-1;b++){var S=t[b];if(!(S in a))break t;a=a[S]}t=t[t.length-1],b=a[t],c=c(b),c!=b&&c!=null&&r(a,t,{configurable:!0,writable:!0,value:c})}}x("Symbol",function(t){function c(w){if(this instanceof c)throw new TypeError("Symbol is not a constructor");return new a(b+(w||"")+"_"+S++,w)}function a(w,F){this.g=w,r(this,"description",{configurable:!0,writable:!0,value:F})}if(t)return t;a.prototype.toString=function(){return this.g};var b="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",S=0;return c}),x("Symbol.iterator",function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var c="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<c.length;a++){var b=Z[c[a]];typeof b=="function"&&typeof b.prototype[t]!="function"&&r(b.prototype,t,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return t});function H(t){return t={next:t},t[Symbol.iterator]=function(){return this},t}function T(t){var c=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return c?c.call(t):{next:n(t)}}function J(t){if(!(t instanceof Array)){t=T(t);for(var c,a=[];!(c=t.next()).done;)a.push(c.value);t=a}return t}var et=typeof Object.create=="function"?Object.create:function(t){function c(){}return c.prototype=t,new c},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Lt={a:!0},wt={};try{wt.__proto__=Lt,pt=wt.a;break t}catch{}pt=!1}lt=pt?function(t,c){if(t.__proto__=c,t.__proto__!==c)throw new TypeError(t+" is not extensible");return t}:null}var at=lt;function dt(t,c){if(t.prototype=et(c.prototype),t.prototype.constructor=t,at)at(t,c);else for(var a in c)if(a!="prototype")if(Object.defineProperties){var b=Object.getOwnPropertyDescriptor(c,a);b&&Object.defineProperty(t,a,b)}else t[a]=c[a];t.ka=c.prototype}function Kt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Nt(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}Kt.prototype.o=function(t){this.h=t};function ee(t,c){t.j={V:c,X:!0},t.g=t.m||t.s}Kt.prototype.return=function(t){this.j={return:t},this.g=this.s};function P(t,c,a){return t.g=a,{value:c}}function $e(t){this.g=new Kt,this.h=t}function je(t,c){Nt(t.g);var a=t.g.i;return a?Ve(t,"return"in a?a.return:function(b){return{value:b,done:!0}},c,t.g.return):(t.g.return(c),zt(t))}function Ve(t,c,a,b){try{var S=c.call(t.g.i,a);if(!(S instanceof Object))throw new TypeError("Iterator result "+S+" is not an object");if(!S.done)return t.g.l=!1,S;var w=S.value}catch(F){return t.g.i=null,ee(t.g,F),zt(t)}return t.g.i=null,b.call(t.g,w),zt(t)}function zt(t){for(;t.g.g;)try{var c=t.h(t.g);if(c)return t.g.l=!1,{value:c.value,done:!1}}catch(a){t.g.h=void 0,ee(t.g,a)}if(t.g.l=!1,t.g.j){if(c=t.g.j,t.g.j=null,c.X)throw c.V;return{value:c.return,done:!0}}return{value:void 0,done:!0}}function Jn(t){this.next=function(c){return Nt(t.g),t.g.i?c=Ve(t,t.g.i.next,c,t.g.o):(t.g.o(c),c=zt(t)),c},this.throw=function(c){return Nt(t.g),t.g.i?c=Ve(t,t.g.i.throw,c,t.g.o):(ee(t.g,c),c=zt(t)),c},this.return=function(c){return je(t,c)},this[Symbol.iterator]=function(){return this}}function ne(t){function c(b){return t.next(b)}function a(b){return t.throw(b)}return new Promise(function(b,S){function w(F){F.done?b(F.value):Promise.resolve(F.value).then(c,a).then(w,S)}w(t.next())})}function gt(t){return ne(new Jn(new $e(t)))}x("Promise",function(t){function c(F){this.h=0,this.i=void 0,this.g=[],this.o=!1;var U=this.j();try{F(U.resolve,U.reject)}catch(z){U.reject(z)}}function a(){this.g=null}function b(F){return F instanceof c?F:new c(function(U){U(F)})}if(t)return t;a.prototype.h=function(F){if(this.g==null){this.g=[];var U=this;this.i(function(){U.l()})}this.g.push(F)};var S=Z.setTimeout;a.prototype.i=function(F){S(F,0)},a.prototype.l=function(){for(;this.g&&this.g.length;){var F=this.g;this.g=[];for(var U=0;U<F.length;++U){var z=F[U];F[U]=null;try{z()}catch(Q){this.j(Q)}}}this.g=null},a.prototype.j=function(F){this.i(function(){throw F})},c.prototype.j=function(){function F(Q){return function(D){z||(z=!0,Q.call(U,D))}}var U=this,z=!1;return{resolve:F(this.D),reject:F(this.l)}},c.prototype.D=function(F){if(F===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(F instanceof c)this.G(F);else{t:switch(typeof F){case"object":var U=F!=null;break t;case"function":U=!0;break t;default:U=!1}U?this.A(F):this.m(F)}},c.prototype.A=function(F){var U=void 0;try{U=F.then}catch(z){this.l(z);return}typeof U=="function"?this.H(U,F):this.m(F)},c.prototype.l=function(F){this.s(2,F)},c.prototype.m=function(F){this.s(1,F)},c.prototype.s=function(F,U){if(this.h!=0)throw Error("Cannot settle("+F+", "+U+"): Promise already settled in state"+this.h);this.h=F,this.i=U,this.h===2&&this.F(),this.B()},c.prototype.F=function(){var F=this;S(function(){if(F.C()){var U=Z.console;typeof U<"u"&&U.error(F.i)}},1)},c.prototype.C=function(){if(this.o)return!1;var F=Z.CustomEvent,U=Z.Event,z=Z.dispatchEvent;return typeof z>"u"?!0:(typeof F=="function"?F=new F("unhandledrejection",{cancelable:!0}):typeof U=="function"?F=new U("unhandledrejection",{cancelable:!0}):(F=Z.document.createEvent("CustomEvent"),F.initCustomEvent("unhandledrejection",!1,!0,F)),F.promise=this,F.reason=this.i,z(F))},c.prototype.B=function(){if(this.g!=null){for(var F=0;F<this.g.length;++F)w.h(this.g[F]);this.g=null}};var w=new a;return c.prototype.G=function(F){var U=this.j();F.K(U.resolve,U.reject)},c.prototype.H=function(F,U){var z=this.j();try{F.call(U,z.resolve,z.reject)}catch(Q){z.reject(Q)}},c.prototype.then=function(F,U){function z(ft,mt){return typeof ft=="function"?function(Gt){try{Q(ft(Gt))}catch(vt){D(vt)}}:mt}var Q,D,st=new c(function(ft,mt){Q=ft,D=mt});return this.K(z(F,Q),z(U,D)),st},c.prototype.catch=function(F){return this.then(void 0,F)},c.prototype.K=function(F,U){function z(){switch(Q.h){case 1:F(Q.i);break;case 2:U(Q.i);break;default:throw Error("Unexpected state: "+Q.h)}}var Q=this;this.g==null?w.h(z):this.g.push(z),this.o=!0},c.resolve=b,c.reject=function(F){return new c(function(U,z){z(F)})},c.race=function(F){return new c(function(U,z){for(var Q=T(F),D=Q.next();!D.done;D=Q.next())b(D.value).K(U,z)})},c.all=function(F){var U=T(F),z=U.next();return z.done?b([]):new c(function(Q,D){function st(Gt){return function(vt){ft[Gt]=vt,mt--,mt==0&&Q(ft)}}var ft=[],mt=0;do ft.push(void 0),mt++,b(z.value).K(st(ft.length-1),D),z=U.next();while(!z.done)})},c});function qe(t,c){t instanceof String&&(t+="");var a=0,b=!1,S={next:function(){if(!b&&a<t.length){var w=a++;return{value:c(w,t[w]),done:!1}}return b=!0,{done:!0,value:void 0}}};return S[Symbol.iterator]=function(){return S},S}var zn=typeof Object.assign=="function"?Object.assign:function(t,c){for(var a=1;a<arguments.length;a++){var b=arguments[a];if(b)for(var S in b)Object.prototype.hasOwnProperty.call(b,S)&&(t[S]=b[S])}return t};x("Object.assign",function(t){return t||zn}),x("Object.is",function(t){return t||function(c,a){return c===a?c!==0||1/c===1/a:c!==c&&a!==a}}),x("Array.prototype.includes",function(t){return t||function(c,a){var b=this;b instanceof String&&(b=String(b));var S=b.length;for(a=a||0,0>a&&(a=Math.max(a+S,0));a<S;a++){var w=b[a];if(w===c||Object.is(w,c))return!0}return!1}}),x("String.prototype.includes",function(t){return t||function(c,a){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(c instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(c,a||0)!==-1}}),x("Array.prototype.keys",function(t){return t||function(){return qe(this,function(c){return c})}});var Re=this||self;function Ct(t,c){t=t.split(".");var a=Re;t[0]in a||typeof a.execScript>"u"||a.execScript("var "+t[0]);for(var b;t.length&&(b=t.shift());)t.length||c===void 0?a[b]&&a[b]!==Object.prototype[b]?a=a[b]:a=a[b]={}:a[b]=c}function Te(t){throw t}function ln(t,c){Te(Error("Invalid wire type: "+t+" (at position "+c+")"))}function Xn(){Te(Error("Failed to read varint, encoding is invalid."))}function Hn(t,c){return c=String.fromCharCode.apply(null,c),t==null?c:t+c}var In,kn=typeof TextDecoder<"u",hn,bn=typeof TextEncoder<"u";function En(t){if(bn)t=(hn||(hn=new TextEncoder)).encode(t);else{var c=void 0;c=c===void 0?!1:c;for(var a=0,b=new Uint8Array(3*t.length),S=0;S<t.length;S++){var w=t.charCodeAt(S);if(128>w)b[a++]=w;else{if(2048>w)b[a++]=w>>6|192;else{if(55296<=w&&57343>=w){if(56319>=w&&S<t.length){var F=t.charCodeAt(++S);if(56320<=F&&57343>=F){w=1024*(w-55296)+F-56320+65536,b[a++]=w>>18|240,b[a++]=w>>12&63|128,b[a++]=w>>6&63|128,b[a++]=w&63|128;continue}else S--}if(c)throw Error("Found an unpaired surrogate");w=65533}b[a++]=w>>12|224,b[a++]=w>>6&63|128}b[a++]=w&63|128}}t=b.subarray(0,a)}return t}var Fn={},Oe=null;function Ae(t){var c;c===void 0&&(c=0),he(),c=Fn[c];for(var a=Array(Math.floor(t.length/3)),b=c[64]||"",S=0,w=0;S<t.length-2;S+=3){var F=t[S],U=t[S+1],z=t[S+2],Q=c[F>>2];F=c[(F&3)<<4|U>>4],U=c[(U&15)<<2|z>>6],z=c[z&63],a[w++]=Q+F+U+z}switch(Q=0,z=b,t.length-S){case 2:Q=t[S+1],z=c[(Q&15)<<2]||b;case 1:t=t[S],a[w]=c[t>>2]+c[(t&3)<<4|Q>>4]+z+b}return a.join("")}function xn(t){var c=t.length,a=3*c/4;a%3?a=Math.floor(a):"=.".indexOf(t[c-1])!=-1&&(a="=.".indexOf(t[c-2])!=-1?a-2:a-1);var b=new Uint8Array(a),S=0;return Vn(t,function(w){b[S++]=w}),b.subarray(0,S)}function Vn(t,c){function a(z){for(;b<t.length;){var Q=t.charAt(b++),D=Oe[Q];if(D!=null)return D;if(!/^[\s\xa0]*$/.test(Q))throw Error("Unknown base64 encoding at char: "+Q)}return z}he();for(var b=0;;){var S=a(-1),w=a(0),F=a(64),U=a(64);if(U===64&&S===-1)break;c(S<<2|w>>4),F!=64&&(c(w<<4&240|F>>2),U!=64&&c(F<<6&192|U))}}function he(){if(!Oe){Oe={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),c=["+/=","+/","-_=","-_.","-_"],a=0;5>a;a++){var b=t.concat(c[a].split(""));Fn[a]=b;for(var S=0;S<b.length;S++){var w=b[S];Oe[w]===void 0&&(Oe[w]=S)}}}}var Se=typeof Uint8Array=="function",Pe;function re(t){if(this.g=t,t!==null&&t.length===0)throw Error("ByteString should be constructed with non-empty values")}var We=typeof Uint8Array.prototype.slice=="function";function cn(t,c,a){return c===a?Pe||(Pe=new Uint8Array(0)):We?t.slice(c,a):new Uint8Array(t.subarray(c,a))}var Ke=0,Qt=0;function Ze(t){if(t.constructor===Uint8Array)return t;if(t.constructor===ArrayBuffer)return new Uint8Array(t);if(t.constructor===Array)return new Uint8Array(t);if(t.constructor===String)return xn(t);if(t.constructor===re){if(t.g==null)var c=Pe||(Pe=new Uint8Array(0));else{c=Uint8Array;var a=t.g;a=a==null||Se&&a!=null&&a instanceof Uint8Array?a:typeof a=="string"?xn(a):null,t=t.g=a,c=new c(t)}return c}if(t instanceof Uint8Array)return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Fe(t,c){c=c===void 0?{}:c,c=c.v===void 0?!1:c.v,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.v=c,t&&Mt(this,t)}function Mt(t,c){t.h=Ze(c),t.l=0,t.i=t.h.length,t.g=t.l}Fe.prototype.reset=function(){this.g=this.l};function Ie(t){for(var c=128,a=0,b=0,S=0;4>S&&128<=c;S++)c=t.h[t.g++],a|=(c&127)<<7*S;if(128<=c&&(c=t.h[t.g++],a|=(c&127)<<28,b|=(c&127)>>4),128<=c)for(S=0;5>S&&128<=c;S++)c=t.h[t.g++],b|=(c&127)<<7*S+3;if(128>c)return t=a>>>0,c=b>>>0,(b=c&2147483648)&&(t=~t+1>>>0,c=~c>>>0,t==0&&(c=c+1>>>0)),t=4294967296*c+(t>>>0),b?-t:t;t.j=!0,Xn()}function jt(t){t.g>t.i&&(t.j=!0,Te(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}function ye(t){var c=t.h,a=c[t.g],b=a&127;return 128>a?(t.g+=1,jt(t),b):(a=c[t.g+1],b|=(a&127)<<7,128>a?(t.g+=2,jt(t),b):(a=c[t.g+2],b|=(a&127)<<14,128>a?(t.g+=3,jt(t),b):(a=c[t.g+3],b|=(a&127)<<21,128>a?(t.g+=4,jt(t),b):(a=c[t.g+4],b|=(a&15)<<28,128>a?(t.g+=5,jt(t),b>>>0):(t.g+=5,128<=c[t.g++]&&128<=c[t.g++]&&128<=c[t.g++]&&128<=c[t.g++]&&128<=c[t.g++]?(t.j=!0,Xn(),b):(jt(t),b))))))}function Le(t){var c=t.h[t.g],a=t.h[t.g+1],b=t.h[t.g+2],S=t.h[t.g+3];return t.g+=4,jt(t),(c<<0|a<<8|b<<16|S<<24)>>>0}Fe.prototype.m=function(){var t=Le(this),c=2*(t>>31)+1,a=t>>>23&255;return t&=8388607,a==255?t?NaN:1/0*c:a==0?c*Math.pow(2,-149)*t:c*Math.pow(2,a-150)*(t+Math.pow(2,23))};var tn=[];function Xe(){this.g=new Uint8Array(64),this.h=0}function Ot(t,c){if(!(t.h+1<t.g.length)){var a=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(a)}t.g[t.h++]=c}Xe.prototype.length=function(){return this.h},Xe.prototype.end=function(){var t=this.g,c=this.h;return this.h=0,cn(t,0,c)};function ze(t,c){for(;127<c;)Ot(t,c&127|128),c>>>=7;Ot(t,c)}function _e(t){var c={},a=c.O===void 0?!1:c.O;this.m={v:c.v===void 0?!1:c.v},this.O=a,c=this.m,tn.length?(a=tn.pop(),c&&(a.v=c.v),t&&Mt(a,t),t=a):t=new Fe(t,c),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}_e.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function xe(t){var c=t.g;if((c=c.g==c.i)||(c=t.j)||(c=t.g,c=c.j||0>c.g||c.g>c.i),c)return!1;t.l=t.g.g;var a=ye(t.g);return c=a>>>3,a&=7,0<=a&&5>=a?(t.i=c,t.h=a,!0):(t.j=!0,ln(a,t.l),!1)}function Wn(t){switch(t.h){case 0:if(t.h!=0)Wn(t);else t:{t=t.g;for(var c=t.g,a=0;10>a;a++){if((t.h[c]&128)===0){t.g=c+1,jt(t);break t}c++}t.j=!0,Xn()}break;case 1:t=t.g,t.g+=8,jt(t);break;case 2:t.h!=2?Wn(t):(c=ye(t.g),t=t.g,t.g+=c,jt(t));break;case 5:t=t.g,t.g+=4,jt(t);break;case 3:c=t.i;do{if(!xe(t)){t.j=!0,Te(Error("Unmatched start-group tag: stream EOF"));break}if(t.h==4){t.i!=c&&(t.j=!0,Te(Error("Unmatched end-group tag")));break}Wn(t)}while(1);break;default:t.j=!0,ln(t.h,t.l)}}function un(t,c,a){var b=t.g.i,S=ye(t.g),w=t.g.g+S;if(t.g.i=w,a(c,t),a=w-t.g.g,a!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(S+" bytes, instead read "+(S-a)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return t.g.g=w,t.g.i=b,c}var Qe=[];function an(){this.h=[],this.i=0,this.g=new Xe}function ve(t,c){c.length!==0&&(t.h.push(c),t.i+=c.length)}function Ye(t,c,a){ze(t.g,8*c+2),ze(t.g,a.length),ve(t,t.g.end()),ve(t,a)}var Ge=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function ie(t){return Object.isFrozen(t)||(Ge?t[Ge]|=1:t.g!==void 0?t.g|=1:Object.defineProperties(t,{g:{value:1,configurable:!0,writable:!0,enumerable:!1}})),t}function De(t){return t!==null&&typeof t=="object"&&t.constructor===Object}function qt(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(Se&&t!=null&&t instanceof Uint8Array)return Ae(t);if(t instanceof re){if(t.g==null)t="";else{var c=t.g;c=c==null||typeof c=="string"?c:Se&&c instanceof Uint8Array?Ae(c):null,t=t.g=c}return t}}return t}function Pt(t,c){if(t!=null)return Array.isArray(t)||De(t)?fn(t,c):c(t)}function fn(t,c){if(Array.isArray(t)){for(var a=Array(t.length),b=0;b<t.length;b++)a[b]=Pt(t[b],c);if(c=Array.isArray(t)){var S;Ge?S=t[Ge]:S=t.g,c=(S==null?0:S)&1}return c&&ie(a),a}S={};for(a in t)S[a]=Pt(t[a],c);return S}function fe(t){return t=qt(t),Array.isArray(t)?fn(t,fe):t}var Ft;function Wt(t,c,a){var b=Ft;Ft=null,t||(t=b),b=this.constructor.ha,t||(t=b?[b]:[]),this.i=(b?0:-1)-(this.constructor.fa||0),this.l=this.g=null,this.u=t;t:{if(b=this.u.length,t=b-1,b&&(b=this.u[t],De(b))){this.j=t-this.i,this.h=b;break t}c!==void 0&&-1<c?(this.j=Math.max(c,t+1-this.i),this.h=null):this.j=Number.MAX_VALUE}if(a)for(c=0;c<a.length;c++)t=a[c],t<this.j?(t+=this.i,(b=this.u[t])?Array.isArray(b)&&ie(b):this.u[t]=oe):(we(this),(b=this.h[t])?Array.isArray(b)&&ie(b):this.h[t]=oe)}var oe=Object.freeze(ie([]));function we(t){var c=t.j+t.i;t.u[c]||(t.h=t.u[c]={})}function te(t,c,a){return c===-1?null:(a===void 0?0:a)||c>=t.j?t.h?t.h[c]:void 0:t.u[c+t.i]}function se(t,c,a){a=a===void 0?!1:a;var b=te(t,c,a);return b==null&&(b=oe),b===oe&&(b=ie(b.slice()),ut(t,c,b,a)),b}function tt(t,c){var a=se(t,c);if(t.l||(t.l={}),!t.l[c]){for(var b=0;b<a.length;b++)a[b]=+a[b];t.l[c]=!0}return a}function it(t,c,a){return t=te(t,c),t=t==null?t:+t,t==null?a===void 0?0:a:t}function ut(t,c,a,b){(b===void 0?0:b)||c>=t.j?(we(t),t.h[c]=a):t.u[c+t.i]=a}function _t(t,c,a,b){a!==b?ut(t,c,a):ut(t,c,void 0,!1)}function de(t,c,a){if(a===-1)return null;t.g||(t.g={});var b=t.g[a];if(b)return b;var S=te(t,a,!1);return S==null?b:(c=new c(S),t.g[a]=c)}function ue(t,c,a){t.g||(t.g={});var b=t.g[a];if(!b){var S=se(t,a,!1);b=[];for(var w=0;w<S.length;w++)b[w]=new c(S[w]);t.g[a]=b}return b}function St(t,c,a,b,S){var w=ue(t,b,c);a=a||new b,t=se(t,c),S!=null?(w.splice(S,0,a),t.splice(S,0,a.u)):(w.push(a),t.push(a.u))}Wt.prototype.toJSON=function(){return fn(this.u,fe)},Wt.prototype.toString=function(){return this.u.toString()};function me(t,c){return t=te(t,c),t==null?0:t}function Ce(t,c){return t=te(t,c),t==null?"":t}function en(t,c){if(t=t.m){ve(c,c.g.end());for(var a=0;a<t.length;a++)ve(c,t[a])}}var nn=Symbol();function mn(t,c,a){return t[nn]||(t[nn]=function(b,S){return c(b,S,a)})}function yn(t){var c=t[nn];if(!c){var a=t[on]||(t[on]=t());c=function(b,S){return Je(b,S,a)},t[nn]=c}return c}function He(t){var c=t.da;if(c)return yn(c);if(c=t.ia){var a=t.Y;return delete t.Y,mn(t.W.g,c,a)}}function rn(t){var c=He(t),a=t.W,b=t.ea;return c?function(S,w){return b(S,w,a,c)}:function(S,w){return b(S,w,a)}}function jn(t){var c=t[0];switch(t.length){case 2:var a=t[1];return function(mt,Gt,vt){return c(mt,Gt,vt,a)};case 3:var b=t[1],S=yn(t[2]);return function(mt,Gt,vt){return c(mt,Gt,vt,b,S)};case 4:var w=t[1],F=t[3],U=yn(t[2]);return function(mt,Gt,vt){return c(mt,Gt,vt,w,U,F)};case 5:var z=t[1],Q=mn(z,t[3],t[4]);return function(mt,Gt,vt){return c(mt,Gt,vt,z,Q)};case 6:var D=t[1],st=t[5],ft=mn(D,t[3],t[4]);return function(mt,Gt,vt){return c(mt,Gt,vt,D,ft,st)};default:throw Error("Unsupported number of parameters, expected [2-6], got "+t.length)}}var on=Symbol();function Je(t,c,a){for(;xe(c)&&c.h!=4;){var b=c.i,S=a[b];if(S)Array.isArray(S)&&(S=a[b]=jn(S));else{var w=a[0];w&&(w=w[b])&&(S=a[b]=rn(w))}S&&S(c,t,b)||(S=c,b=t,w=S.l,Wn(S),S.O||(S=cn(S.g.h,w,S.g.g),(w=b.m)?w.push(S):b.m=[S]))}return t}function Zn(t,c){var a=new an;if(c(t,a),t=a.i+a.g.length(),t===0)a=new Uint8Array(0);else{t=new Uint8Array(t);for(var b=a.h,S=b.length,w=c=0;w<S;w++){var F=b[w];F.length!==0&&(t.set(F,c),c+=F.length)}b=a.g,S=b.h,S!==0&&(t.set(b.g.subarray(0,S),c),b.h=0),a.h=[t],a=t}return a}function Sn(t,c,a){if(Qe.length){var b=Qe.pop();t&&(Mt(b.g,t),b.i=-1,b.h=-1),t=b}else t=new _e(t);try{var S=new c;return Je(S,t,a[on]||(a[on]=a()))}finally{c=t.g,c.h=null,c.l=0,c.i=0,c.g=0,c.j=!1,c.v=!1,t.i=-1,t.h=-1,t.j=!1,100>Qe.length&&Qe.push(t)}}function Be(t,c,a){if(c=te(c,a),c!=null){ze(t.g,8*a+5),t=t.g;var b=c;b=(a=0>b?1:0)?-b:b,b===0?0<1/b?Ke=Qt=0:(Qt=0,Ke=2147483648):isNaN(b)?(Qt=0,Ke=2147483647):34028234663852886e22<b?(Qt=0,Ke=(a<<31|2139095040)>>>0):11754943508222875e-54>b?(b=Math.round(b/Math.pow(2,-149)),Qt=0,Ke=(a<<31|b)>>>0):(c=Math.floor(Math.log(b)/Math.LN2),b*=Math.pow(2,-c),b=Math.round(8388608*b),16777216<=b&&++c,Qt=0,Ke=(a<<31|c+127<<23|b&8388607)>>>0),a=Ke,Ot(t,a>>>0&255),Ot(t,a>>>8&255),Ot(t,a>>>16&255),Ot(t,a>>>24&255)}}function Un(t,c,a){if(t.h!==1)return!1;var b=t.g;t=Le(b);var S=Le(b);b=2*(S>>31)+1;var w=S>>>20&2047;return t=4294967296*(S&1048575)+t,_t(c,a,w==2047?t?NaN:1/0*b:w==0?b*Math.pow(2,-1074)*t:b*Math.pow(2,w-1075)*(t+4503599627370496),0),!0}function sn(t,c,a){return t.h!==5?!1:(ut(c,a,t.g.m()),!0)}function vn(t,c,a){if(t.h!==5&&t.h!==2)return!1;if(c=se(c,a),t.h==2){a=Fe.prototype.m;var b=ye(t.g);for(b=t.g.g+b;t.g.g<b;)c.push(a.call(t.g))}else c.push(t.g.m());return!0}function Tn(t,c,a){return t.h!==5?!1:(t=t.g.m(),_t(c,a,t,0),!0)}function Mn(t,c,a){return t.h!==0?!1:(ut(c,a,Ie(t.g)),!0)}function dn(t,c,a){return t.h!==0?!1:(ut(c,a,ye(t.g)),!0)}function Ln(t,c,a){return t.h!==0?!1:(t=ye(t.g),_t(c,a,t,0),!0)}function _n(t,c,a){return t.h!==0?!1:(t=!!ye(t.g),_t(c,a,t,!1),!0)}function Qn(t,c,a){if(t.h!==2)return!1;var b=ye(t.g);t=t.g;var S=t.g;t.g+=b,jt(t),t=t.h;var w;if(kn)(w=In)||(w=In=new TextDecoder("utf-8",{fatal:!1})),w=w.decode(t.subarray(S,S+b));else{b=S+b;for(var F=[],U=null,z,Q,D;S<b;)z=t[S++],128>z?F.push(z):224>z?S>=b?F.push(65533):(Q=t[S++],194>z||(Q&192)!==128?(S--,F.push(65533)):F.push((z&31)<<6|Q&63)):240>z?S>=b-1?F.push(65533):(Q=t[S++],(Q&192)!==128||z===224&&160>Q||z===237&&160<=Q||((w=t[S++])&192)!==128?(S--,F.push(65533)):F.push((z&15)<<12|(Q&63)<<6|w&63)):244>=z?S>=b-2?F.push(65533):(Q=t[S++],(Q&192)!==128||(z<<28)+(Q-144)>>30!==0||((w=t[S++])&192)!==128||((D=t[S++])&192)!==128?(S--,F.push(65533)):(z=(z&7)<<18|(Q&63)<<12|(w&63)<<6|D&63,z-=65536,F.push((z>>10&1023)+55296,(z&1023)+56320))):F.push(65533),8192<=F.length&&(U=Hn(U,F),F.length=0);w=Hn(U,F)}return ut(c,a,w),!0}function Yn(t,c,a,b,S){return t.h!==2?!1:(t=un(t,new b,S),c.g||(c.g={}),b=t&&t.u,c.g[a]=t,ut(c,a,b,!1),!0)}function Cn(t,c,a,b,S){return t.h!==2?!1:(t=un(t,new b,S),St(c,a,t,b,void 0),!0)}function p(t,c,a){return t.h!==0?!1:(ut(c,a,Ie(t.g)),!0)}function V(t){Wt.call(this,t)}dt(V,Wt);function W(){return{1:dn,2:sn,3:Qn,4:Qn}}function E(t,c){var a=te(t,1);if(a!=null&&a!=null){ze(c.g,8);var b=c.g;if(0<=a)ze(b,a);else{for(var S=0;9>S;S++)Ot(b,a&127|128),a>>=7;Ot(b,1)}}Be(c,t,2),b=te(t,3),b!=null&&Ye(c,3,En(b)),b=te(t,4),b!=null&&Ye(c,4,En(b)),en(t,c)}function O(t){Wt.call(this,t,-1,j)}dt(O,Wt),O.prototype.addClassification=function(t,c){return St(this,1,t,V,c),this};function ot(){return{1:[Cn,V,W]}}var j=[1];function rt(t){Wt.call(this,t)}dt(rt,Wt);function bt(){return{1:sn,2:sn,3:sn,4:sn,5:sn}}function Rt(t,c){Be(c,t,1),Be(c,t,2),Be(c,t,3),Be(c,t,4),Be(c,t,5),en(t,c)}function Ut(t){Wt.call(this,t,-1,$t)}dt(Ut,Wt);function Jt(){return{1:[Cn,rt,bt]}}var $t=[1];function kt(t){Wt.call(this,t)}dt(kt,Wt);function Tt(){return{1:sn,2:sn,3:sn,4:sn,5:sn,6:Mn}}function Et(t,c){Be(c,t,1),Be(c,t,2),Be(c,t,3),Be(c,t,4),Be(c,t,5);var a=te(t,6);if(a!=null&&a!=null){ze(c.g,48);var b=c.g,S=a;a=0>S,S=Math.abs(S);var w=S>>>0;for(S=Math.floor((S-w)/4294967296),S>>>=0,a&&(S=~S>>>0,w=(~w>>>0)+1,4294967295<w&&(w=0,S++,4294967295<S&&(S=0))),Ke=w,Qt=S,a=Ke,w=Qt;0<w||127<a;)Ot(b,a&127|128),a=(a>>>7|w<<25)>>>0,w>>>=7;Ot(b,a)}en(t,c)}function Dt(t){Wt.call(this,t,-1,ke)}dt(Dt,Wt);function ae(){return{1:p,2:p,3:vn,4:[Yn,pe,ge],5:dn,6:dn,7:vn,8:vn,9:vn}}function pe(t){Wt.call(this,t)}dt(pe,Wt);function ge(){return{1:sn,2:sn,3:sn}}var ke=[3,7,8,9];function h(t){Wt.call(this,t)}dt(h,Wt);function y(){return{1:Tn,2:Tn,3:Tn}}function G(t){Wt.call(this,t)}dt(G,Wt);function C(){return{1:Tn,2:Tn,3:Tn}}function B(t){Wt.call(this,t)}dt(B,Wt);function _(){return{1:Ln,2:[Yn,G,C],3:[Yn,h,y],4:_n}}function M(t){Wt.call(this,t,-1,ct)}dt(M,Wt);function q(){return{1:Ln,2:[Cn,B,_],3:Tn,4:vn,5:vn,6:vn}}var ct=[2,4,5,6];function s(t){Wt.call(this,t,-1,R)}dt(s,Wt);function X(){return{1:Ln,2:[Cn,M,q],3:[Yn,Dt,ae],4:Un,5:vn,6:vn}}var R=[2,5,6];function Y(t,c,a){if(a=t.createShader(a===0?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(a,c),t.compileShader(a),!t.getShaderParameter(a,t.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
87
|
+
`+G.getProgramInfoLog(_));C=h.m=_,G.useProgram(C),K=G.getUniformLocation(C,"sampler0"),h.j={I:G.getAttribLocation(C,"aVertex"),H:G.getAttribLocation(C,"aTex"),da:K},h.s=G.createBuffer(),G.bindBuffer(G.ARRAY_BUFFER,h.s),G.enableVertexAttribArray(h.j.I),G.vertexAttribPointer(h.j.I,2,G.FLOAT,!1,0,0),G.bufferData(G.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),G.STATIC_DRAW),G.bindBuffer(G.ARRAY_BUFFER,null),h.o=G.createBuffer(),G.bindBuffer(G.ARRAY_BUFFER,h.o),G.enableVertexAttribArray(h.j.H),G.vertexAttribPointer(h.j.H,2,G.FLOAT,!1,0,0),G.bufferData(G.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),G.STATIC_DRAW),G.bindBuffer(G.ARRAY_BUFFER,null),G.uniform1i(K,0)}C=h.j,G.useProgram(h.m),G.canvas.width=y.width,G.canvas.height=y.height,G.viewport(0,0,y.width,y.height),G.activeTexture(G.TEXTURE0),h.h.bindTexture2d(y.glName),G.enableVertexAttribArray(C.I),G.bindBuffer(G.ARRAY_BUFFER,h.s),G.vertexAttribPointer(C.I,2,G.FLOAT,!1,0,0),G.enableVertexAttribArray(C.H),G.bindBuffer(G.ARRAY_BUFFER,h.o),G.vertexAttribPointer(C.H,2,G.FLOAT,!1,0,0),G.bindFramebuffer(G.DRAW_FRAMEBUFFER?G.DRAW_FRAMEBUFFER:G.FRAMEBUFFER,null),G.clearColor(0,0,0,0),G.clear(G.COLOR_BUFFER_BIT),G.colorMask(!0,!0,!0,!0),G.drawArrays(G.TRIANGLE_FAN,0,4),G.disableVertexAttribArray(C.I),G.disableVertexAttribArray(C.H),G.bindBuffer(G.ARRAY_BUFFER,null),h.h.bindTexture2d(0)}function _n(h){this.g=h}var Qn=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function wn(h,y){return y+h}function Cn(h,y){window[h]=y}function p(h){var y=document.createElement("script");return y.setAttribute("src",h),y.setAttribute("crossorigin","anonymous"),new Promise(function(G){y.addEventListener("load",function(){G()},!1),y.addEventListener("error",function(){G()},!1),document.body.appendChild(y)})}function W(){return St(this,function h(){return ne(h,function(y){switch(y.g){case 1:return y.m=2,O(y,WebAssembly.instantiate(Qn),4);case 4:y.g=3,y.m=0;break;case 2:return y.m=0,y.j=null,y.return(!1);case 3:return y.return(!0)}})})}function V(h){if(this.g=h,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=h&&h.locateFile||wn,typeof window=="object")var y=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")y=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=y,h.options){y=T(Object.keys(h.options));for(var G=y.next();!G.done;G=y.next()){G=G.value;var C=h.options[G].default;C!==void 0&&(this.j[G]=typeof C=="function"?C():C)}}}i=V.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function E(h,y){return h.g.files===void 0?[]:typeof h.g.files=="function"?h.g.files(y):h.g.files}function P(h){return St(h,function y(){var G=this,C,K,_,M,q,ct,s,X,R,w,k;return ne(y,function(A){switch(A.g){case 1:return C=G,G.R?(K=E(G,G.j),O(A,W(),2)):A.return();case 2:if(_=A.h,typeof window=="object")return Cn("createMediapipeSolutionsWasm",{locateFile:G.locateFile}),Cn("createMediapipeSolutionsPackedAssets",{locateFile:G.locateFile}),ct=K.filter(function(B){return B.data!==void 0}),s=K.filter(function(B){return B.data===void 0}),X=Promise.all(ct.map(function(B){var nt=rt(C,B.url);if(B.path!==void 0){var $=B.path;nt=nt.then(function(yt){return C.overrideFile($,yt),Promise.resolve(yt)})}return nt})),R=Promise.all(s.map(function(B){return B.simd===void 0||B.simd&&_||!B.simd&&!_?p(C.locateFile(B.url,C.S)):Promise.resolve()})).then(function(){return St(C,function B(){var nt,$,yt=this;return ne(B,function(Xt){if(Xt.g==1)return nt=window.createMediapipeSolutionsWasm,$=window.createMediapipeSolutionsPackedAssets,O(Xt,nt($),2);yt.h=Xt.h,Xt.g=0})})}),w=function(){return St(C,function B(){var nt=this;return ne(B,function($){return nt.g.graph&&nt.g.graph.url?$=O($,rt(nt,nt.g.graph.url),0):($.g=0,$=void 0),$})})}(),O(A,Promise.all([R,X,w]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return M=K.filter(function(B){return B.simd===void 0||B.simd&&_||!B.simd&&!_}).map(function(B){return C.locateFile(B.url,C.S)}),importScripts.apply(null,J(M)),O(A,createMediapipeSolutionsWasm(Module),6);case 6:G.h=A.h,G.l=new OffscreenCanvas(1,1),G.h.canvas=G.l,q=G.h.GL.createContext(G.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),G.h.GL.makeContextCurrent(q),A.g=4;break;case 7:if(G.l=document.createElement("canvas"),k=G.l.getContext("webgl2",{}),!k&&(k=G.l.getContext("webgl",{}),!k))return alert("Failed to create WebGL canvas context when passing video frame."),A.return();G.D=k,G.h.canvas=G.l,G.h.createContext(G.l,!0,!0,{});case 4:G.i=new G.h.SolutionWasm,G.R=!1,A.g=0}})})}function ot(h){return St(h,function y(){var G=this,C,K,_,M,q,ct,s,X;return ne(y,function(R){if(R.g==1){if(G.g.graph&&G.g.graph.url&&G.P===G.g.graph.url)return R.return();if(G.o=!0,!G.g.graph||!G.g.graph.url){R.g=2;return}return G.P=G.g.graph.url,O(R,rt(G,G.g.graph.url),3)}for(R.g!=2&&(C=R.h,G.i.loadGraph(C)),K=T(Object.keys(G.B)),_=K.next();!_.done;_=K.next())M=_.value,G.i.overrideFile(M,G.B[M]);if(G.B={},G.g.listeners)for(q=T(G.g.listeners),ct=q.next();!ct.done;ct=q.next())s=ct.value,Ut(G,s);X=G.j,G.j={},G.setOptions(X),R.g=0})})}i.reset=function(){return St(this,function h(){var y=this;return ne(h,function(G){y.i&&(y.i.reset(),y.m={},y.s={}),G.g=0})})},i.setOptions=function(h,y){var G=this;if(y=y||this.g.options){for(var C=[],K=[],_={},M=T(Object.keys(h)),q=M.next();!q.done;_={K:_.K,L:_.L},q=M.next()){var ct=q.value;ct in this.j&&this.j[ct]===h[ct]||(this.j[ct]=h[ct],q=y[ct],q!==void 0&&(q.onChange&&(_.K=q.onChange,_.L=h[ct],C.push(function(s){return function(){return St(G,function X(){var R,w=this;return ne(X,function(k){if(k.g==1)return O(k,s.K(s.L),2);R=k.h,R===!0&&(w.o=!0),k.g=0})})}}(_))),q.graphOptionXref&&(ct={valueNumber:q.type===1?h[ct]:0,valueBoolean:q.type===0?h[ct]:!1,valueString:q.type===2?h[ct]:""},q=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),q.graphOptionXref),ct),K.push(q))))}(C.length!==0||K.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(K),this.u=(this.u===void 0?[]:this.u).concat(C))}};function j(h){return St(h,function y(){var G=this,C,K,_,M,q,ct,s;return ne(y,function(X){switch(X.g){case 1:if(!G.o)return X.return();if(!G.u){X.g=2;break}C=T(G.u),K=C.next();case 3:if(K.done){X.g=5;break}return _=K.value,O(X,_(),4);case 4:K=C.next(),X.g=3;break;case 5:G.u=void 0;case 2:if(G.A){for(M=new G.h.GraphOptionChangeRequestList,q=T(G.A),ct=q.next();!ct.done;ct=q.next())s=ct.value,M.push_back(s);G.i.changeOptions(M),M.delete(),G.A=void 0}G.o=!1,X.g=0}})})}i.initialize=function(){return St(this,function h(){var y=this;return ne(h,function(G){return G.g==1?O(G,P(y),2):G.g!=3?O(G,ot(y),3):O(G,j(y),0)})})};function rt(h,y){return St(h,function G(){var C=this,K,_;return ne(G,function(M){return y in C.F?M.return(C.F[y]):(K=C.locateFile(y,""),_=fetch(K).then(function(q){return q.arrayBuffer()}),C.F[y]=_,M.return(_))})})}i.overrideFile=function(h,y){this.i?this.i.overrideFile(h,y):this.B[h]=y},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(h,y){return St(this,function G(){var C=this,K,_,M,q,ct,s,X,R,w;return ne(G,function(k){switch(k.g){case 1:return C.g.inputs?(K=1e3*(y==null?performance.now():y),O(k,C.C,2)):k.return();case 2:return O(k,C.initialize(),3);case 3:for(_=new C.h.PacketDataList,M=T(Object.keys(h)),q=M.next();!q.done;q=M.next())if(ct=q.value,s=C.g.inputs[ct]){t:{var A=C,B=h[ct];switch(s.type){case"video":var nt=A.m[s.stream];if(nt||(nt=new Mn(A.h,A.D),A.m[s.stream]=nt),A=nt,A.l===0&&(A.l=A.h.createTexture()),typeof HTMLVideoElement<"u"&&B instanceof HTMLVideoElement){var $=B.videoWidth;nt=B.videoHeight}else typeof HTMLImageElement<"u"&&B instanceof HTMLImageElement?($=B.naturalWidth,nt=B.naturalHeight):($=B.width,nt=B.height);nt={glName:A.l,width:$,height:nt},$=A.g,$.canvas.width=nt.width,$.canvas.height=nt.height,$.activeTexture($.TEXTURE0),A.h.bindTexture2d(A.l),$.texImage2D($.TEXTURE_2D,0,$.RGBA,$.RGBA,$.UNSIGNED_BYTE,B),A.h.bindTexture2d(0),A=nt;break t;case"detections":for(nt=A.m[s.stream],nt||(nt=new _n(A.h),A.m[s.stream]=nt),A=nt,A.data||(A.data=new A.g.DetectionListData),A.data.reset(B.length),nt=0;nt<B.length;++nt){$=B[nt];var yt=A.data,Xt=yt.setBoundingBox,Kt=nt,It=$.T,ht=new on;Vt(ht,1,It.Z),Vt(ht,2,It.$),Vt(ht,3,It.height),Vt(ht,4,It.width),Vt(ht,5,It.rotation),Vt(ht,6,It.X);var Wt=It=new Xe;_e(Wt,1,qt(ht,1)),_e(Wt,2,qt(ht,2)),_e(Wt,3,qt(ht,3)),_e(Wt,4,qt(ht,4)),_e(Wt,5,qt(ht,5));var xt=qt(ht,6);if(xt!=null&&xt!=null){Qt(Wt.g,48);var wt=Wt.g,Ht=xt;xt=0>Ht,Ht=Math.abs(Ht);var l=Ht>>>0;for(Ht=Math.floor((Ht-l)/4294967296),Ht>>>=0,xt&&(Ht=~Ht>>>0,l=(~l>>>0)+1,4294967295<l&&(l=0,Ht++,4294967295<Ht&&(Ht=0))),he=l,Se=Ht,xt=he,l=Se;0<l||127<xt;)wt.push(xt&127|128),xt=(xt>>>7|l<<25)>>>0,l>>>=7;wt.push(xt)}if(it(ht,Wt),It=ze(It),Xt.call(yt,Kt,It),$.O)for(yt=0;yt<$.O.length;++yt)ht=$.O[yt],Wt=!!ht.visibility,Xt=A.data,Kt=Xt.addNormalizedLandmark,It=nt,ht=Object.assign(Object.assign({},ht),{visibility:Wt?ht.visibility:0}),Wt=new mn,Vt(Wt,1,ht.x),Vt(Wt,2,ht.y),Vt(Wt,3,ht.z),ht.visibility&&Vt(Wt,4,ht.visibility),wt=ht=new Xe,_e(wt,1,qt(Wt,1)),_e(wt,2,qt(Wt,2)),_e(wt,3,qt(Wt,3)),_e(wt,4,qt(Wt,4)),_e(wt,5,qt(Wt,5)),it(Wt,wt),ht=ze(ht),Kt.call(Xt,It,ht);if($.M)for(yt=0;yt<$.M.length;++yt){if(Xt=A.data,Kt=Xt.addClassification,It=nt,ht=$.M[yt],Wt=new me,Vt(Wt,2,ht.Y),ht.index&&Vt(Wt,1,ht.index),ht.label&&Vt(Wt,3,ht.label),ht.displayName&&Vt(Wt,4,ht.displayName),wt=ht=new Xe,l=qt(Wt,1),l!=null&&l!=null)if(Qt(wt.g,8),xt=wt.g,0<=l)Qt(xt,l);else{for(Ht=0;9>Ht;Ht++)xt.push(l&127|128),l>>=7;xt.push(1)}_e(wt,2,qt(Wt,2)),xt=qt(Wt,3),xt!=null&&(xt=In(xt),Qt(wt.g,26),Qt(wt.g,xt.length),Pt(wt,wt.g.end()),Pt(wt,xt)),xt=qt(Wt,4),xt!=null&&(xt=In(xt),Qt(wt.g,34),Qt(wt.g,xt.length),Pt(wt,wt.g.end()),Pt(wt,xt)),it(Wt,wt),ht=ze(ht),Kt.call(Xt,It,ht)}}A=A.data;break t;default:A={}}}switch(X=A,R=s.stream,s.type){case"video":_.pushTexture2d(Object.assign(Object.assign({},X),{stream:R,timestamp:K}));break;case"detections":w=X,w.stream=R,w.timestamp=K,_.pushDetectionList(w);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return C.i.send(_),O(k,C.C,4);case 4:_.delete(),k.g=0}})})};function bt(h,y,G){return St(h,function C(){var K,_,M,q,ct,s,X=this,R,w,k,A,B,nt,$,yt;return ne(C,function(Xt){switch(Xt.g){case 1:if(!G)return Xt.return(y);for(K={},_=0,M=T(Object.keys(G)),q=M.next();!q.done;q=M.next())ct=q.value,s=G[ct],typeof s!="string"&&s.type==="texture"&&y[s.stream]!==void 0&&++_;1<_&&(X.G=!1),R=T(Object.keys(G)),q=R.next();case 2:if(q.done){Xt.g=4;break}if(w=q.value,k=G[w],typeof k=="string")return $=K,yt=w,O(Xt,Rt(X,w,y[k]),14);if(A=y[k.stream],k.type==="detection_list"){if(A){for(var Kt=A.getRectList(),It=A.getLandmarksList(),ht=A.getClassificationsList(),Wt=[],xt=0;xt<Kt.size();++xt){var wt=Kt.get(xt);t:{var Ht=new on;for(wt=new Ze(wt);Fe(wt);)switch(wt.i){case 13:var l=jt(wt);Vt(Ht,1,l);break;case 21:l=jt(wt),Vt(Ht,2,l);break;case 29:l=jt(wt),Vt(Ht,3,l);break;case 37:l=jt(wt),Vt(Ht,4,l);break;case 45:l=jt(wt),Vt(Ht,5,l);break;case 48:l=Ve(wt.g),Vt(Ht,6,l);break;default:if(!ut(Ht,wt))break t}}Ht={Z:Ft(Ht,1),$:Ft(Ht,2),height:Ft(Ht,3),width:Ft(Ht,4),rotation:Ft(Ht,5,0),X:fe(Ht,6,0)},wt=Le(rn(It.get(xt)),mn).map(Tn);var v=ht.get(xt);t:for(l=new en,v=new Ze(v);Fe(v);)switch(v.i){case 10:l.addClassification(Ie(v,new me,Ce));break;default:if(!ut(l,v))break t}Ht={T:Ht,O:wt,M:vn(l)},Wt.push(Ht)}Kt=Wt}else Kt=[];K[w]=Kt,Xt.g=7;break}if(k.type==="proto_list"){if(A){for(Kt=Array(A.size()),It=0;It<A.size();It++)Kt[It]=A.get(It);A.delete()}else Kt=[];K[w]=Kt,Xt.g=7;break}if(A===void 0){Xt.g=3;break}if(k.type==="float_list"){K[w]=A,Xt.g=7;break}if(k.type==="proto"){K[w]=A,Xt.g=7;break}if(k.type!=="texture")throw Error("Unknown output config type: '"+k.type+"'");return B=X.s[w],B||(B=new Mn(X.h,X.D),X.s[w]=B),O(Xt,dn(B,A,X.G),13);case 13:nt=Xt.h,K[w]=nt;case 7:k.transform&&K[w]&&(K[w]=k.transform(K[w])),Xt.g=3;break;case 14:$[yt]=Xt.h;case 3:q=R.next(),Xt.g=2;break;case 4:return Xt.return(K)}})})}function Rt(h,y,G){return St(h,function C(){var K=this,_;return ne(C,function(M){return typeof G=="number"||G instanceof Uint8Array||G instanceof K.h.Uint8BlobList?M.return(G):G instanceof K.h.Texture2dDataOut?(_=K.s[y],_||(_=new Mn(K.h,K.D),K.s[y]=_),M.return(dn(_,G,K.G))):M.return(void 0)})})}function Ut(h,y){for(var G=y.name||"$",C=[].concat(J(y.wants)),K=new h.h.StringList,_=T(y.wants),M=_.next();!M.done;M=_.next())K.push_back(M.value);_=h.h.PacketListener.implement({onResults:function(q){for(var ct={},s=0;s<y.wants.length;++s)ct[C[s]]=q.get(s);var X=h.listeners[G];X&&(h.C=bt(h,ct,y.outs).then(function(R){R=X(R);for(var w=0;w<y.wants.length;++w){var k=ct[C[w]];typeof k=="object"&&k.hasOwnProperty&&k.hasOwnProperty("delete")&&k.delete()}R&&(h.C=R)}))}}),h.i.attachMultiListener(K,_),K.delete()}i.onResults=function(h,y){this.listeners[y||"$"]=h},Re("Solution",V),Re("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function Jt(h){h=Un(h);var y=h.getMesh();if(!y)return h;var G=new Float32Array(y.getVertexBufferList());y.getVertexBufferList=function(){return G};var C=new Uint32Array(y.getIndexBufferList());return y.getIndexBufferList=function(){return C},h}var $t={files:[{url:"face_mesh_solution_packed_assets_loader.js"},{simd:!0,url:"face_mesh_solution_simd_wasm_bin.js"},{simd:!1,url:"face_mesh_solution_wasm_bin.js"}],graph:{url:"face_mesh.binarypb"},listeners:[{wants:["multi_face_geometry","image_transformed","multi_face_landmarks"],outs:{image:"image_transformed",multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:function(h){return h.map(Jt)}},multiFaceLandmarks:{type:"proto_list",stream:"multi_face_landmarks",transform:function(h){return h.map(function(y){return Le(rn(y),mn).map(Tn)})}}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},enableFaceGeometry:{type:0,graphOptionXref:{calculatorName:"EnableFaceGeometryConstant",calculatorType:"ConstantSidePacketCalculator",fieldName:"bool_value"}},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumFaces:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorNumFaces",fieldName:"int_value"}},refineLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorRefineLandmarks",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facelandmarkfrontgpu__facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"facelandmarkfrontgpu__facelandmarkgpu__ThresholdingCalculator",fieldName:"threshold"}},cameraNear:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"near"}},cameraFar:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"far"}},cameraVerticalFovDegrees:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"vertical_fov_degrees"}}}},kt=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Tt=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Et=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Dt=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ae=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],pe=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],ge=[].concat(J(kt),J(Tt),J(Et),J(Dt),J(ae),J(pe));function ke(h){h=h||{},h=Object.assign(Object.assign({},$t),h),this.g=new V(h)}i=ke.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(h){this.g.onResults(h)},i.initialize=function(){return St(this,function h(){var y=this;return ne(h,function(G){return O(G,y.g.initialize(),0)})})},i.reset=function(){this.g.reset()},i.send=function(h){return St(this,function y(){var G=this;return ne(y,function(C){return O(C,G.g.send(h),0)})})},i.setOptions=function(h){this.g.setOptions(h)},Re("FACE_GEOMETRY",{Layout:{COLUMN_MAJOR:0,ROW_MAJOR:1,0:"COLUMN_MAJOR",1:"ROW_MAJOR"},PrimitiveType:{TRIANGLE:0,0:"TRIANGLE"},VertexType:{VERTEX_PT:0,0:"VERTEX_PT"},DEFAULT_CAMERA_PARAMS:{verticalFovDegrees:63,near:1,far:1e4}}),Re("FaceMesh",ke),Re("FACEMESH_LIPS",kt),Re("FACEMESH_LEFT_EYE",Tt),Re("FACEMESH_LEFT_EYEBROW",Et),Re("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Re("FACEMESH_RIGHT_EYE",Dt),Re("FACEMESH_RIGHT_EYEBROW",ae),Re("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Re("FACEMESH_FACE_OVAL",pe),Re("FACEMESH_CONTOURS",ge),Re("FACEMESH_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Re("matrixDataToMatrix",function(h){for(var y=h.getCols(),G=h.getRows(),C=h.getPackedDataList(),K=[],_=0;_<G;_++)K.push(Array(y));for(_=0;_<G;_++)for(var M=0;M<y;M++){var q=h.getLayout()===1?_*y+M:M*G+_;K[_][M]=C[q]}return K}),Re("VERSION","0.4.1633559619")}).call(Ri);const Ii={};(function(){var i;function n(t){var c=0;return function(){return c<t.length?{done:!1,value:t[c++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(t,c,a){return t==Array.prototype||t==Object.prototype||(t[c]=a.value),t};function f(t){t=[typeof globalThis=="object"&&globalThis,t,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var c=0;c<t.length;++c){var a=t[c];if(a&&a.Math==Math)return a}throw Error("Cannot find global object")}var Z=f(this);function x(t,c){if(c)t:{var a=Z;t=t.split(".");for(var b=0;b<t.length-1;b++){var S=t[b];if(!(S in a))break t;a=a[S]}t=t[t.length-1],b=a[t],c=c(b),c!=b&&c!=null&&r(a,t,{configurable:!0,writable:!0,value:c})}}x("Symbol",function(t){function c(L){if(this instanceof c)throw new TypeError("Symbol is not a constructor");return new a(b+(L||"")+"_"+S++,L)}function a(L,F){this.g=L,r(this,"description",{configurable:!0,writable:!0,value:F})}if(t)return t;a.prototype.toString=function(){return this.g};var b="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",S=0;return c}),x("Symbol.iterator",function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var c="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<c.length;a++){var b=Z[c[a]];typeof b=="function"&&typeof b.prototype[t]!="function"&&r(b.prototype,t,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return t});function H(t){return t={next:t},t[Symbol.iterator]=function(){return this},t}function T(t){var c=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return c?c.call(t):{next:n(t)}}function J(t){if(!(t instanceof Array)){t=T(t);for(var c,a=[];!(c=t.next()).done;)a.push(c.value);t=a}return t}var et=typeof Object.create=="function"?Object.create:function(t){function c(){}return c.prototype=t,new c},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(t,c){if(t.__proto__=c,t.__proto__!==c)throw new TypeError(t+" is not extensible");return t}:null}var at=lt;function dt(t,c){if(t.prototype=et(c.prototype),t.prototype.constructor=t,at)at(t,c);else for(var a in c)if(a!="prototype")if(Object.defineProperties){var b=Object.getOwnPropertyDescriptor(c,a);b&&Object.defineProperty(t,a,b)}else t[a]=c[a];t.ka=c.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Nt(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}Bt.prototype.o=function(t){this.h=t};function ee(t,c){t.j={V:c,X:!0},t.g=t.m||t.s}Bt.prototype.return=function(t){this.j={return:t},this.g=this.s};function O(t,c,a){return t.g=a,{value:c}}function $e(t){this.g=new Bt,this.h=t}function je(t,c){Nt(t.g);var a=t.g.i;return a?We(t,"return"in a?a.return:function(b){return{value:b,done:!0}},c,t.g.return):(t.g.return(c),zt(t))}function We(t,c,a,b){try{var S=c.call(t.g.i,a);if(!(S instanceof Object))throw new TypeError("Iterator result "+S+" is not an object");if(!S.done)return t.g.l=!1,S;var L=S.value}catch(F){return t.g.i=null,ee(t.g,F),zt(t)}return t.g.i=null,b.call(t.g,L),zt(t)}function zt(t){for(;t.g.g;)try{var c=t.h(t.g);if(c)return t.g.l=!1,{value:c.value,done:!1}}catch(a){t.g.h=void 0,ee(t.g,a)}if(t.g.l=!1,t.g.j){if(c=t.g.j,t.g.j=null,c.X)throw c.V;return{value:c.return,done:!0}}return{value:void 0,done:!0}}function Jn(t){this.next=function(c){return Nt(t.g),t.g.i?c=We(t,t.g.i.next,c,t.g.o):(t.g.o(c),c=zt(t)),c},this.throw=function(c){return Nt(t.g),t.g.i?c=We(t,t.g.i.throw,c,t.g.o):(ee(t.g,c),c=zt(t)),c},this.return=function(c){return je(t,c)},this[Symbol.iterator]=function(){return this}}function ne(t){function c(b){return t.next(b)}function a(b){return t.throw(b)}return new Promise(function(b,S){function L(F){F.done?b(F.value):Promise.resolve(F.value).then(c,a).then(L,S)}L(t.next())})}function Zt(t){return ne(new Jn(new $e(t)))}x("Promise",function(t){function c(F){this.h=0,this.i=void 0,this.g=[],this.o=!1;var U=this.j();try{F(U.resolve,U.reject)}catch(z){U.reject(z)}}function a(){this.g=null}function b(F){return F instanceof c?F:new c(function(U){U(F)})}if(t)return t;a.prototype.h=function(F){if(this.g==null){this.g=[];var U=this;this.i(function(){U.l()})}this.g.push(F)};var S=Z.setTimeout;a.prototype.i=function(F){S(F,0)},a.prototype.l=function(){for(;this.g&&this.g.length;){var F=this.g;this.g=[];for(var U=0;U<F.length;++U){var z=F[U];F[U]=null;try{z()}catch(Q){this.j(Q)}}}this.g=null},a.prototype.j=function(F){this.i(function(){throw F})},c.prototype.j=function(){function F(Q){return function(D){z||(z=!0,Q.call(U,D))}}var U=this,z=!1;return{resolve:F(this.D),reject:F(this.l)}},c.prototype.D=function(F){if(F===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(F instanceof c)this.G(F);else{t:switch(typeof F){case"object":var U=F!=null;break t;case"function":U=!0;break t;default:U=!1}U?this.A(F):this.m(F)}},c.prototype.A=function(F){var U=void 0;try{U=F.then}catch(z){this.l(z);return}typeof U=="function"?this.H(U,F):this.m(F)},c.prototype.l=function(F){this.s(2,F)},c.prototype.m=function(F){this.s(1,F)},c.prototype.s=function(F,U){if(this.h!=0)throw Error("Cannot settle("+F+", "+U+"): Promise already settled in state"+this.h);this.h=F,this.i=U,this.h===2&&this.F(),this.B()},c.prototype.F=function(){var F=this;S(function(){if(F.C()){var U=Z.console;typeof U<"u"&&U.error(F.i)}},1)},c.prototype.C=function(){if(this.o)return!1;var F=Z.CustomEvent,U=Z.Event,z=Z.dispatchEvent;return typeof z>"u"?!0:(typeof F=="function"?F=new F("unhandledrejection",{cancelable:!0}):typeof U=="function"?F=new U("unhandledrejection",{cancelable:!0}):(F=Z.document.createEvent("CustomEvent"),F.initCustomEvent("unhandledrejection",!1,!0,F)),F.promise=this,F.reason=this.i,z(F))},c.prototype.B=function(){if(this.g!=null){for(var F=0;F<this.g.length;++F)L.h(this.g[F]);this.g=null}};var L=new a;return c.prototype.G=function(F){var U=this.j();F.K(U.resolve,U.reject)},c.prototype.H=function(F,U){var z=this.j();try{F.call(U,z.resolve,z.reject)}catch(Q){z.reject(Q)}},c.prototype.then=function(F,U){function z(ft,mt){return typeof ft=="function"?function(Gt){try{Q(ft(Gt))}catch(vt){D(vt)}}:mt}var Q,D,st=new c(function(ft,mt){Q=ft,D=mt});return this.K(z(F,Q),z(U,D)),st},c.prototype.catch=function(F){return this.then(void 0,F)},c.prototype.K=function(F,U){function z(){switch(Q.h){case 1:F(Q.i);break;case 2:U(Q.i);break;default:throw Error("Unexpected state: "+Q.h)}}var Q=this;this.g==null?L.h(z):this.g.push(z),this.o=!0},c.resolve=b,c.reject=function(F){return new c(function(U,z){z(F)})},c.race=function(F){return new c(function(U,z){for(var Q=T(F),D=Q.next();!D.done;D=Q.next())b(D.value).K(U,z)})},c.all=function(F){var U=T(F),z=U.next();return z.done?b([]):new c(function(Q,D){function st(Gt){return function(vt){ft[Gt]=vt,mt--,mt==0&&Q(ft)}}var ft=[],mt=0;do ft.push(void 0),mt++,b(z.value).K(st(ft.length-1),D),z=U.next();while(!z.done)})},c});function qe(t,c){t instanceof String&&(t+="");var a=0,b=!1,S={next:function(){if(!b&&a<t.length){var L=a++;return{value:c(L,t[L]),done:!1}}return b=!0,{done:!0,value:void 0}}};return S[Symbol.iterator]=function(){return S},S}var zn=typeof Object.assign=="function"?Object.assign:function(t,c){for(var a=1;a<arguments.length;a++){var b=arguments[a];if(b)for(var S in b)Object.prototype.hasOwnProperty.call(b,S)&&(t[S]=b[S])}return t};x("Object.assign",function(t){return t||zn}),x("Object.is",function(t){return t||function(c,a){return c===a?c!==0||1/c===1/a:c!==c&&a!==a}}),x("Array.prototype.includes",function(t){return t||function(c,a){var b=this;b instanceof String&&(b=String(b));var S=b.length;for(a=a||0,0>a&&(a=Math.max(a+S,0));a<S;a++){var L=b[a];if(L===c||Object.is(L,c))return!0}return!1}}),x("String.prototype.includes",function(t){return t||function(c,a){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(c instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(c,a||0)!==-1}}),x("Array.prototype.keys",function(t){return t||function(){return qe(this,function(c){return c})}});var Re=this||self;function Ct(t,c){t=t.split(".");var a=Re;t[0]in a||typeof a.execScript>"u"||a.execScript("var "+t[0]);for(var b;t.length&&(b=t.shift());)t.length||c===void 0?a[b]&&a[b]!==Object.prototype[b]?a=a[b]:a=a[b]={}:a[b]=c}function Te(t){throw t}function ln(t,c){Te(Error("Invalid wire type: "+t+" (at position "+c+")"))}function Xn(){Te(Error("Failed to read varint, encoding is invalid."))}function Hn(t,c){return c=String.fromCharCode.apply(null,c),t==null?c:t+c}var In,kn=typeof TextDecoder<"u",hn,bn=typeof TextEncoder<"u";function En(t){if(bn)t=(hn||(hn=new TextEncoder)).encode(t);else{var c=void 0;c=c===void 0?!1:c;for(var a=0,b=new Uint8Array(3*t.length),S=0;S<t.length;S++){var L=t.charCodeAt(S);if(128>L)b[a++]=L;else{if(2048>L)b[a++]=L>>6|192;else{if(55296<=L&&57343>=L){if(56319>=L&&S<t.length){var F=t.charCodeAt(++S);if(56320<=F&&57343>=F){L=1024*(L-55296)+F-56320+65536,b[a++]=L>>18|240,b[a++]=L>>12&63|128,b[a++]=L>>6&63|128,b[a++]=L&63|128;continue}else S--}if(c)throw Error("Found an unpaired surrogate");L=65533}b[a++]=L>>12|224,b[a++]=L>>6&63|128}b[a++]=L&63|128}}t=b.subarray(0,a)}return t}var Fn={},Pe=null;function Ae(t){var c;c===void 0&&(c=0),he(),c=Fn[c];for(var a=Array(Math.floor(t.length/3)),b=c[64]||"",S=0,L=0;S<t.length-2;S+=3){var F=t[S],U=t[S+1],z=t[S+2],Q=c[F>>2];F=c[(F&3)<<4|U>>4],U=c[(U&15)<<2|z>>6],z=c[z&63],a[L++]=Q+F+U+z}switch(Q=0,z=b,t.length-S){case 2:Q=t[S+1],z=c[(Q&15)<<2]||b;case 1:t=t[S],a[L]=c[t>>2]+c[(t&3)<<4|Q>>4]+z+b}return a.join("")}function xn(t){var c=t.length,a=3*c/4;a%3?a=Math.floor(a):"=.".indexOf(t[c-1])!=-1&&(a="=.".indexOf(t[c-2])!=-1?a-2:a-1);var b=new Uint8Array(a),S=0;return Wn(t,function(L){b[S++]=L}),b.subarray(0,S)}function Wn(t,c){function a(z){for(;b<t.length;){var Q=t.charAt(b++),D=Pe[Q];if(D!=null)return D;if(!/^[\s\xa0]*$/.test(Q))throw Error("Unknown base64 encoding at char: "+Q)}return z}he();for(var b=0;;){var S=a(-1),L=a(0),F=a(64),U=a(64);if(U===64&&S===-1)break;c(S<<2|L>>4),F!=64&&(c(L<<4&240|F>>2),U!=64&&c(F<<6&192|U))}}function he(){if(!Pe){Pe={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),c=["+/=","+/","-_=","-_.","-_"],a=0;5>a;a++){var b=t.concat(c[a].split(""));Fn[a]=b;for(var S=0;S<b.length;S++){var L=b[S];Pe[L]===void 0&&(Pe[L]=S)}}}}var Se=typeof Uint8Array=="function",Oe;function re(t){if(this.g=t,t!==null&&t.length===0)throw Error("ByteString should be constructed with non-empty values")}var Ve=typeof Uint8Array.prototype.slice=="function";function cn(t,c,a){return c===a?Oe||(Oe=new Uint8Array(0)):Ve?t.slice(c,a):new Uint8Array(t.subarray(c,a))}var Be=0,Qt=0;function Ze(t){if(t.constructor===Uint8Array)return t;if(t.constructor===ArrayBuffer)return new Uint8Array(t);if(t.constructor===Array)return new Uint8Array(t);if(t.constructor===String)return xn(t);if(t.constructor===re){if(t.g==null)var c=Oe||(Oe=new Uint8Array(0));else{c=Uint8Array;var a=t.g;a=a==null||Se&&a!=null&&a instanceof Uint8Array?a:typeof a=="string"?xn(a):null,t=t.g=a,c=new c(t)}return c}if(t instanceof Uint8Array)return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Fe(t,c){c=c===void 0?{}:c,c=c.v===void 0?!1:c.v,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.v=c,t&&Mt(this,t)}function Mt(t,c){t.h=Ze(c),t.l=0,t.i=t.h.length,t.g=t.l}Fe.prototype.reset=function(){this.g=this.l};function Ie(t){for(var c=128,a=0,b=0,S=0;4>S&&128<=c;S++)c=t.h[t.g++],a|=(c&127)<<7*S;if(128<=c&&(c=t.h[t.g++],a|=(c&127)<<28,b|=(c&127)>>4),128<=c)for(S=0;5>S&&128<=c;S++)c=t.h[t.g++],b|=(c&127)<<7*S+3;if(128>c)return t=a>>>0,c=b>>>0,(b=c&2147483648)&&(t=~t+1>>>0,c=~c>>>0,t==0&&(c=c+1>>>0)),t=4294967296*c+(t>>>0),b?-t:t;t.j=!0,Xn()}function jt(t){t.g>t.i&&(t.j=!0,Te(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}function ye(t){var c=t.h,a=c[t.g],b=a&127;return 128>a?(t.g+=1,jt(t),b):(a=c[t.g+1],b|=(a&127)<<7,128>a?(t.g+=2,jt(t),b):(a=c[t.g+2],b|=(a&127)<<14,128>a?(t.g+=3,jt(t),b):(a=c[t.g+3],b|=(a&127)<<21,128>a?(t.g+=4,jt(t),b):(a=c[t.g+4],b|=(a&15)<<28,128>a?(t.g+=5,jt(t),b>>>0):(t.g+=5,128<=c[t.g++]&&128<=c[t.g++]&&128<=c[t.g++]&&128<=c[t.g++]&&128<=c[t.g++]?(t.j=!0,Xn(),b):(jt(t),b))))))}function Ye(t){var c=t.h[t.g],a=t.h[t.g+1],b=t.h[t.g+2],S=t.h[t.g+3];return t.g+=4,jt(t),(c<<0|a<<8|b<<16|S<<24)>>>0}Fe.prototype.m=function(){var t=Ye(this),c=2*(t>>31)+1,a=t>>>23&255;return t&=8388607,a==255?t?NaN:1/0*c:a==0?c*Math.pow(2,-149)*t:c*Math.pow(2,a-150)*(t+Math.pow(2,23))};var tn=[];function Xe(){this.g=new Uint8Array(64),this.h=0}function Pt(t,c){if(!(t.h+1<t.g.length)){var a=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(a)}t.g[t.h++]=c}Xe.prototype.length=function(){return this.h},Xe.prototype.end=function(){var t=this.g,c=this.h;return this.h=0,cn(t,0,c)};function ze(t,c){for(;127<c;)Pt(t,c&127|128),c>>>=7;Pt(t,c)}function _e(t){var c={},a=c.O===void 0?!1:c.O;this.m={v:c.v===void 0?!1:c.v},this.O=a,c=this.m,tn.length?(a=tn.pop(),c&&(a.v=c.v),t&&Mt(a,t),t=a):t=new Fe(t,c),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}_e.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function xe(t){var c=t.g;if((c=c.g==c.i)||(c=t.j)||(c=t.g,c=c.j||0>c.g||c.g>c.i),c)return!1;t.l=t.g.g;var a=ye(t.g);return c=a>>>3,a&=7,0<=a&&5>=a?(t.i=c,t.h=a,!0):(t.j=!0,ln(a,t.l),!1)}function Vn(t){switch(t.h){case 0:if(t.h!=0)Vn(t);else t:{t=t.g;for(var c=t.g,a=0;10>a;a++){if((t.h[c]&128)===0){t.g=c+1,jt(t);break t}c++}t.j=!0,Xn()}break;case 1:t=t.g,t.g+=8,jt(t);break;case 2:t.h!=2?Vn(t):(c=ye(t.g),t=t.g,t.g+=c,jt(t));break;case 5:t=t.g,t.g+=4,jt(t);break;case 3:c=t.i;do{if(!xe(t)){t.j=!0,Te(Error("Unmatched start-group tag: stream EOF"));break}if(t.h==4){t.i!=c&&(t.j=!0,Te(Error("Unmatched end-group tag")));break}Vn(t)}while(1);break;default:t.j=!0,ln(t.h,t.l)}}function un(t,c,a){var b=t.g.i,S=ye(t.g),L=t.g.g+S;if(t.g.i=L,a(c,t),a=L-t.g.g,a!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(S+" bytes, instead read "+(S-a)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return t.g.g=L,t.g.i=b,c}var Qe=[];function an(){this.h=[],this.i=0,this.g=new Xe}function ve(t,c){c.length!==0&&(t.h.push(c),t.i+=c.length)}function we(t,c,a){ze(t.g,8*c+2),ze(t.g,a.length),ve(t,t.g.end()),ve(t,a)}var Ge=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function ie(t){return Object.isFrozen(t)||(Ge?t[Ge]|=1:t.g!==void 0?t.g|=1:Object.defineProperties(t,{g:{value:1,configurable:!0,writable:!0,enumerable:!1}})),t}function De(t){return t!==null&&typeof t=="object"&&t.constructor===Object}function qt(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(Se&&t!=null&&t instanceof Uint8Array)return Ae(t);if(t instanceof re){if(t.g==null)t="";else{var c=t.g;c=c==null||typeof c=="string"?c:Se&&c instanceof Uint8Array?Ae(c):null,t=t.g=c}return t}}return t}function Ot(t,c){if(t!=null)return Array.isArray(t)||De(t)?fn(t,c):c(t)}function fn(t,c){if(Array.isArray(t)){for(var a=Array(t.length),b=0;b<t.length;b++)a[b]=Ot(t[b],c);if(c=Array.isArray(t)){var S;Ge?S=t[Ge]:S=t.g,c=(S==null?0:S)&1}return c&&ie(a),a}S={};for(a in t)S[a]=Ot(t[a],c);return S}function fe(t){return t=qt(t),Array.isArray(t)?fn(t,fe):t}var Ft;function Vt(t,c,a){var b=Ft;Ft=null,t||(t=b),b=this.constructor.ha,t||(t=b?[b]:[]),this.i=(b?0:-1)-(this.constructor.fa||0),this.l=this.g=null,this.u=t;t:{if(b=this.u.length,t=b-1,b&&(b=this.u[t],De(b))){this.j=t-this.i,this.h=b;break t}c!==void 0&&-1<c?(this.j=Math.max(c,t+1-this.i),this.h=null):this.j=Number.MAX_VALUE}if(a)for(c=0;c<a.length;c++)t=a[c],t<this.j?(t+=this.i,(b=this.u[t])?Array.isArray(b)&&ie(b):this.u[t]=oe):(Le(this),(b=this.h[t])?Array.isArray(b)&&ie(b):this.h[t]=oe)}var oe=Object.freeze(ie([]));function Le(t){var c=t.j+t.i;t.u[c]||(t.h=t.u[c]={})}function te(t,c,a){return c===-1?null:(a===void 0?0:a)||c>=t.j?t.h?t.h[c]:void 0:t.u[c+t.i]}function se(t,c,a){a=a===void 0?!1:a;var b=te(t,c,a);return b==null&&(b=oe),b===oe&&(b=ie(b.slice()),ut(t,c,b,a)),b}function tt(t,c){var a=se(t,c);if(t.l||(t.l={}),!t.l[c]){for(var b=0;b<a.length;b++)a[b]=+a[b];t.l[c]=!0}return a}function it(t,c,a){return t=te(t,c),t=t==null?t:+t,t==null?a===void 0?0:a:t}function ut(t,c,a,b){(b===void 0?0:b)||c>=t.j?(Le(t),t.h[c]=a):t.u[c+t.i]=a}function _t(t,c,a,b){a!==b?ut(t,c,a):ut(t,c,void 0,!1)}function de(t,c,a){if(a===-1)return null;t.g||(t.g={});var b=t.g[a];if(b)return b;var S=te(t,a,!1);return S==null?b:(c=new c(S),t.g[a]=c)}function ue(t,c,a){t.g||(t.g={});var b=t.g[a];if(!b){var S=se(t,a,!1);b=[];for(var L=0;L<S.length;L++)b[L]=new c(S[L]);t.g[a]=b}return b}function St(t,c,a,b,S){var L=ue(t,b,c);a=a||new b,t=se(t,c),S!=null?(L.splice(S,0,a),t.splice(S,0,a.u)):(L.push(a),t.push(a.u))}Vt.prototype.toJSON=function(){return fn(this.u,fe)},Vt.prototype.toString=function(){return this.u.toString()};function me(t,c){return t=te(t,c),t==null?0:t}function Ce(t,c){return t=te(t,c),t==null?"":t}function en(t,c){if(t=t.m){ve(c,c.g.end());for(var a=0;a<t.length;a++)ve(c,t[a])}}var nn=Symbol();function mn(t,c,a){return t[nn]||(t[nn]=function(b,S){return c(b,S,a)})}function yn(t){var c=t[nn];if(!c){var a=t[on]||(t[on]=t());c=function(b,S){return Je(b,S,a)},t[nn]=c}return c}function He(t){var c=t.da;if(c)return yn(c);if(c=t.ia){var a=t.Y;return delete t.Y,mn(t.W.g,c,a)}}function rn(t){var c=He(t),a=t.W,b=t.ea;return c?function(S,L){return b(S,L,a,c)}:function(S,L){return b(S,L,a)}}function jn(t){var c=t[0];switch(t.length){case 2:var a=t[1];return function(mt,Gt,vt){return c(mt,Gt,vt,a)};case 3:var b=t[1],S=yn(t[2]);return function(mt,Gt,vt){return c(mt,Gt,vt,b,S)};case 4:var L=t[1],F=t[3],U=yn(t[2]);return function(mt,Gt,vt){return c(mt,Gt,vt,L,U,F)};case 5:var z=t[1],Q=mn(z,t[3],t[4]);return function(mt,Gt,vt){return c(mt,Gt,vt,z,Q)};case 6:var D=t[1],st=t[5],ft=mn(D,t[3],t[4]);return function(mt,Gt,vt){return c(mt,Gt,vt,D,ft,st)};default:throw Error("Unsupported number of parameters, expected [2-6], got "+t.length)}}var on=Symbol();function Je(t,c,a){for(;xe(c)&&c.h!=4;){var b=c.i,S=a[b];if(S)Array.isArray(S)&&(S=a[b]=jn(S));else{var L=a[0];L&&(L=L[b])&&(S=a[b]=rn(L))}S&&S(c,t,b)||(S=c,b=t,L=S.l,Vn(S),S.O||(S=cn(S.g.h,L,S.g.g),(L=b.m)?L.push(S):b.m=[S]))}return t}function Zn(t,c){var a=new an;if(c(t,a),t=a.i+a.g.length(),t===0)a=new Uint8Array(0);else{t=new Uint8Array(t);for(var b=a.h,S=b.length,L=c=0;L<S;L++){var F=b[L];F.length!==0&&(t.set(F,c),c+=F.length)}b=a.g,S=b.h,S!==0&&(t.set(b.g.subarray(0,S),c),b.h=0),a.h=[t],a=t}return a}function Sn(t,c,a){if(Qe.length){var b=Qe.pop();t&&(Mt(b.g,t),b.i=-1,b.h=-1),t=b}else t=new _e(t);try{var S=new c;return Je(S,t,a[on]||(a[on]=a()))}finally{c=t.g,c.h=null,c.l=0,c.i=0,c.g=0,c.j=!1,c.v=!1,t.i=-1,t.h=-1,t.j=!1,100>Qe.length&&Qe.push(t)}}function Ke(t,c,a){if(c=te(c,a),c!=null){ze(t.g,8*a+5),t=t.g;var b=c;b=(a=0>b?1:0)?-b:b,b===0?0<1/b?Be=Qt=0:(Qt=0,Be=2147483648):isNaN(b)?(Qt=0,Be=2147483647):34028234663852886e22<b?(Qt=0,Be=(a<<31|2139095040)>>>0):11754943508222875e-54>b?(b=Math.round(b/Math.pow(2,-149)),Qt=0,Be=(a<<31|b)>>>0):(c=Math.floor(Math.log(b)/Math.LN2),b*=Math.pow(2,-c),b=Math.round(8388608*b),16777216<=b&&++c,Qt=0,Be=(a<<31|c+127<<23|b&8388607)>>>0),a=Be,Pt(t,a>>>0&255),Pt(t,a>>>8&255),Pt(t,a>>>16&255),Pt(t,a>>>24&255)}}function Un(t,c,a){if(t.h!==1)return!1;var b=t.g;t=Ye(b);var S=Ye(b);b=2*(S>>31)+1;var L=S>>>20&2047;return t=4294967296*(S&1048575)+t,_t(c,a,L==2047?t?NaN:1/0*b:L==0?b*Math.pow(2,-1074)*t:b*Math.pow(2,L-1075)*(t+4503599627370496),0),!0}function sn(t,c,a){return t.h!==5?!1:(ut(c,a,t.g.m()),!0)}function vn(t,c,a){if(t.h!==5&&t.h!==2)return!1;if(c=se(c,a),t.h==2){a=Fe.prototype.m;var b=ye(t.g);for(b=t.g.g+b;t.g.g<b;)c.push(a.call(t.g))}else c.push(t.g.m());return!0}function Tn(t,c,a){return t.h!==5?!1:(t=t.g.m(),_t(c,a,t,0),!0)}function Mn(t,c,a){return t.h!==0?!1:(ut(c,a,Ie(t.g)),!0)}function dn(t,c,a){return t.h!==0?!1:(ut(c,a,ye(t.g)),!0)}function Yn(t,c,a){return t.h!==0?!1:(t=ye(t.g),_t(c,a,t,0),!0)}function _n(t,c,a){return t.h!==0?!1:(t=!!ye(t.g),_t(c,a,t,!1),!0)}function Qn(t,c,a){if(t.h!==2)return!1;var b=ye(t.g);t=t.g;var S=t.g;t.g+=b,jt(t),t=t.h;var L;if(kn)(L=In)||(L=In=new TextDecoder("utf-8",{fatal:!1})),L=L.decode(t.subarray(S,S+b));else{b=S+b;for(var F=[],U=null,z,Q,D;S<b;)z=t[S++],128>z?F.push(z):224>z?S>=b?F.push(65533):(Q=t[S++],194>z||(Q&192)!==128?(S--,F.push(65533)):F.push((z&31)<<6|Q&63)):240>z?S>=b-1?F.push(65533):(Q=t[S++],(Q&192)!==128||z===224&&160>Q||z===237&&160<=Q||((L=t[S++])&192)!==128?(S--,F.push(65533)):F.push((z&15)<<12|(Q&63)<<6|L&63)):244>=z?S>=b-2?F.push(65533):(Q=t[S++],(Q&192)!==128||(z<<28)+(Q-144)>>30!==0||((L=t[S++])&192)!==128||((D=t[S++])&192)!==128?(S--,F.push(65533)):(z=(z&7)<<18|(Q&63)<<12|(L&63)<<6|D&63,z-=65536,F.push((z>>10&1023)+55296,(z&1023)+56320))):F.push(65533),8192<=F.length&&(U=Hn(U,F),F.length=0);L=Hn(U,F)}return ut(c,a,L),!0}function wn(t,c,a,b,S){return t.h!==2?!1:(t=un(t,new b,S),c.g||(c.g={}),b=t&&t.u,c.g[a]=t,ut(c,a,b,!1),!0)}function Cn(t,c,a,b,S){return t.h!==2?!1:(t=un(t,new b,S),St(c,a,t,b,void 0),!0)}function p(t,c,a){return t.h!==0?!1:(ut(c,a,Ie(t.g)),!0)}function W(t){Vt.call(this,t)}dt(W,Vt);function V(){return{1:dn,2:sn,3:Qn,4:Qn}}function E(t,c){var a=te(t,1);if(a!=null&&a!=null){ze(c.g,8);var b=c.g;if(0<=a)ze(b,a);else{for(var S=0;9>S;S++)Pt(b,a&127|128),a>>=7;Pt(b,1)}}Ke(c,t,2),b=te(t,3),b!=null&&we(c,3,En(b)),b=te(t,4),b!=null&&we(c,4,En(b)),en(t,c)}function P(t){Vt.call(this,t,-1,j)}dt(P,Vt),P.prototype.addClassification=function(t,c){return St(this,1,t,W,c),this};function ot(){return{1:[Cn,W,V]}}var j=[1];function rt(t){Vt.call(this,t)}dt(rt,Vt);function bt(){return{1:sn,2:sn,3:sn,4:sn,5:sn}}function Rt(t,c){Ke(c,t,1),Ke(c,t,2),Ke(c,t,3),Ke(c,t,4),Ke(c,t,5),en(t,c)}function Ut(t){Vt.call(this,t,-1,$t)}dt(Ut,Vt);function Jt(){return{1:[Cn,rt,bt]}}var $t=[1];function kt(t){Vt.call(this,t)}dt(kt,Vt);function Tt(){return{1:sn,2:sn,3:sn,4:sn,5:sn,6:Mn}}function Et(t,c){Ke(c,t,1),Ke(c,t,2),Ke(c,t,3),Ke(c,t,4),Ke(c,t,5);var a=te(t,6);if(a!=null&&a!=null){ze(c.g,48);var b=c.g,S=a;a=0>S,S=Math.abs(S);var L=S>>>0;for(S=Math.floor((S-L)/4294967296),S>>>=0,a&&(S=~S>>>0,L=(~L>>>0)+1,4294967295<L&&(L=0,S++,4294967295<S&&(S=0))),Be=L,Qt=S,a=Be,L=Qt;0<L||127<a;)Pt(b,a&127|128),a=(a>>>7|L<<25)>>>0,L>>>=7;Pt(b,a)}en(t,c)}function Dt(t){Vt.call(this,t,-1,ke)}dt(Dt,Vt);function ae(){return{1:p,2:p,3:vn,4:[wn,pe,ge],5:dn,6:dn,7:vn,8:vn,9:vn}}function pe(t){Vt.call(this,t)}dt(pe,Vt);function ge(){return{1:sn,2:sn,3:sn}}var ke=[3,7,8,9];function h(t){Vt.call(this,t)}dt(h,Vt);function y(){return{1:Tn,2:Tn,3:Tn}}function G(t){Vt.call(this,t)}dt(G,Vt);function C(){return{1:Tn,2:Tn,3:Tn}}function K(t){Vt.call(this,t)}dt(K,Vt);function _(){return{1:Yn,2:[wn,G,C],3:[wn,h,y],4:_n}}function M(t){Vt.call(this,t,-1,ct)}dt(M,Vt);function q(){return{1:Yn,2:[Cn,K,_],3:Tn,4:vn,5:vn,6:vn}}var ct=[2,4,5,6];function s(t){Vt.call(this,t,-1,R)}dt(s,Vt);function X(){return{1:Yn,2:[Cn,M,q],3:[wn,Dt,ae],4:Un,5:vn,6:vn}}var R=[2,5,6];function w(t,c,a){if(a=t.createShader(a===0?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(a,c),t.compileShader(a),!t.getShaderParameter(a,t.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
88
88
|
|
|
89
|
-
`+t.getShaderInfoLog(a));return a}function k(t){return ue(t,
|
|
89
|
+
`+t.getShaderInfoLog(a));return a}function k(t){return ue(t,W,1).map(function(c){return{index:me(c,1),$:it(c,2),label:te(c,3)!=null?Ce(c,3):void 0,displayName:te(c,4)!=null?Ce(c,4):void 0}})}function A(t){return{x:it(t,1),y:it(t,2),z:it(t,3),visibility:te(t,4)!=null?it(t,4):void 0}}function B(t,c){this.h=t,this.g=c,this.l=0}function nt(t,c,a){return $(t,c),typeof t.g.canvas.transferToImageBitmap=="function"?Promise.resolve(t.g.canvas.transferToImageBitmap()):a?Promise.resolve(t.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(t.g.canvas):(t.i===void 0&&(t.i=document.createElement("canvas")),new Promise(function(b){t.i.height=t.g.canvas.height,t.i.width=t.g.canvas.width,t.i.getContext("2d",{}).drawImage(t.g.canvas,0,0,t.g.canvas.width,t.g.canvas.height),b(t.i)}))}function $(t,c){var a=t.g;if(t.m===void 0){var b=w(a,`
|
|
90
90
|
attribute vec2 aVertex;
|
|
91
91
|
attribute vec2 aTex;
|
|
92
92
|
varying vec2 vTex;
|
|
93
93
|
void main(void) {
|
|
94
94
|
gl_Position = vec4(aVertex, 0.0, 1.0);
|
|
95
95
|
vTex = aTex;
|
|
96
|
-
}`,0),S=
|
|
96
|
+
}`,0),S=w(a,`
|
|
97
97
|
precision mediump float;
|
|
98
98
|
varying vec2 vTex;
|
|
99
99
|
uniform sampler2D sampler0;
|
|
100
100
|
void main(){
|
|
101
101
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
102
|
-
}`,1),
|
|
102
|
+
}`,1),L=a.createProgram();if(a.attachShader(L,b),a.attachShader(L,S),a.linkProgram(L),!a.getProgramParameter(L,a.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
103
103
|
|
|
104
|
-
`+a.getProgramInfoLog(w));b=t.m=w,a.useProgram(b),S=a.getUniformLocation(b,"sampler0"),t.j={J:a.getAttribLocation(b,"aVertex"),I:a.getAttribLocation(b,"aTex"),ja:S},t.s=a.createBuffer(),a.bindBuffer(a.ARRAY_BUFFER,t.s),a.enableVertexAttribArray(t.j.J),a.vertexAttribPointer(t.j.J,2,a.FLOAT,!1,0,0),a.bufferData(a.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,null),t.o=a.createBuffer(),a.bindBuffer(a.ARRAY_BUFFER,t.o),a.enableVertexAttribArray(t.j.I),a.vertexAttribPointer(t.j.I,2,a.FLOAT,!1,0,0),a.bufferData(a.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,null),a.uniform1i(S,0)}b=t.j,a.useProgram(t.m),a.canvas.width=c.width,a.canvas.height=c.height,a.viewport(0,0,c.width,c.height),a.activeTexture(a.TEXTURE0),t.h.bindTexture2d(c.glName),a.enableVertexAttribArray(b.J),a.bindBuffer(a.ARRAY_BUFFER,t.s),a.vertexAttribPointer(b.J,2,a.FLOAT,!1,0,0),a.enableVertexAttribArray(b.I),a.bindBuffer(a.ARRAY_BUFFER,t.o),a.vertexAttribPointer(b.I,2,a.FLOAT,!1,0,0),a.bindFramebuffer(a.DRAW_FRAMEBUFFER?a.DRAW_FRAMEBUFFER:a.FRAMEBUFFER,null),a.clearColor(0,0,0,0),a.clear(a.COLOR_BUFFER_BIT),a.colorMask(!0,!0,!0,!0),a.drawArrays(a.TRIANGLE_FAN,0,4),a.disableVertexAttribArray(b.J),a.disableVertexAttribArray(b.I),a.bindBuffer(a.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}function yt(t){this.g=t}var Xt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Bt(t,c){return c+t}function It(t,c){window[t]=c}function ht(t){var c=document.createElement("script");return c.setAttribute("src",t),c.setAttribute("crossorigin","anonymous"),new Promise(function(a){c.addEventListener("load",function(){a()},!1),c.addEventListener("error",function(){a()},!1),document.body.appendChild(c)})}function Vt(){return gt(function(t){switch(t.g){case 1:return t.m=2,P(t,WebAssembly.instantiate(Xt),4);case 4:t.g=3,t.m=0;break;case 2:return t.m=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})}function xt(t){if(this.g=t,this.listeners={},this.j={},this.G={},this.m={},this.s={},this.H=this.o=this.S=!0,this.D=Promise.resolve(),this.R="",this.C={},this.locateFile=t&&t.locateFile||Bt,typeof window=="object")var c=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")c=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.T=c,t.options){c=T(Object.keys(t.options));for(var a=c.next();!a.done;a=c.next()){a=a.value;var b=t.options[a].default;b!==void 0&&(this.j[a]=typeof b=="function"?b():b)}}}i=xt.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function Yt(t){var c,a,b,S,w,F,U,z,Q,D,st;return gt(function(ft){switch(ft.g){case 1:return t.S?(c=t.g.files===void 0?[]:typeof t.g.files=="function"?t.g.files(t.j):t.g.files,P(ft,Vt(),2)):ft.return();case 2:if(a=ft.h,typeof window=="object")return It("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),It("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),F=c.filter(function(mt){return mt.data!==void 0}),U=c.filter(function(mt){return mt.data===void 0}),z=Promise.all(F.map(function(mt){var Gt=v(t,mt.url);if(mt.path!==void 0){var vt=mt.path;Gt=Gt.then(function(At){return t.overrideFile(vt,At),Promise.resolve(At)})}return Gt})),Q=Promise.all(U.map(function(mt){return mt.simd===void 0||mt.simd&&a||!mt.simd&&!a?ht(t.locateFile(mt.url,t.T)):Promise.resolve()})).then(function(){var mt,Gt,vt;return gt(function(At){if(At.g==1)return mt=window.createMediapipeSolutionsWasm,Gt=window.createMediapipeSolutionsPackedAssets,vt=t,P(At,mt(Gt),2);vt.h=At.h,At.g=0})}),D=function(){return gt(function(mt){return t.g.graph&&t.g.graph.url?mt=P(mt,v(t,t.g.graph.url),0):(mt.g=0,mt=void 0),mt})}(),P(ft,Promise.all([Q,z,D]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return b=c.filter(function(mt){return mt.simd===void 0||mt.simd&&a||!mt.simd&&!a}).map(function(mt){return t.locateFile(mt.url,t.T)}),importScripts.apply(null,J(b)),S=t,P(ft,createMediapipeSolutionsWasm(Module),6);case 6:S.h=ft.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,w=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ga:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(w),ft.g=4;break;case 7:if(t.l=document.createElement("canvas"),st=t.l.getContext("webgl2",{}),!st&&(st=t.l.getContext("webgl",{}),!st))return alert("Failed to create WebGL canvas context when passing video frame."),ft.return();t.F=st,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.S=!1,ft.g=0}})}function Ht(t){var c,a,b,S,w,F,U,z;return gt(function(Q){if(Q.g==1){if(t.g.graph&&t.g.graph.url&&t.R===t.g.graph.url)return Q.return();if(t.o=!0,!t.g.graph||!t.g.graph.url){Q.g=2;return}return t.R=t.g.graph.url,P(Q,v(t,t.g.graph.url),3)}for(Q.g!=2&&(c=Q.h,t.i.loadGraph(c)),a=T(Object.keys(t.C)),b=a.next();!b.done;b=a.next())S=b.value,t.i.overrideFile(S,t.C[S]);if(t.C={},t.g.listeners)for(w=T(t.g.listeners),F=w.next();!F.done;F=w.next())U=F.value,N(t,U);z=t.j,t.j={},t.setOptions(z),Q.g=0})}i.reset=function(){var t=this;return gt(function(c){t.i&&(t.i.reset(),t.m={},t.s={}),c.g=0})},i.setOptions=function(t,c){var a=this;if(c=c||this.g.options){for(var b=[],S=[],w={},F=T(Object.keys(t)),U=F.next();!U.done;w={L:w.L,M:w.M},U=F.next()){var z=U.value;z in this.j&&this.j[z]===t[z]||(this.j[z]=t[z],U=c[z],U!==void 0&&(U.onChange&&(w.L=U.onChange,w.M=t[z],b.push(function(Q){return function(){var D;return gt(function(st){if(st.g==1)return P(st,Q.L(Q.M),2);D=st.h,D===!0&&(a.o=!0),st.g=0})}}(w))),U.graphOptionXref&&(z={valueNumber:U.type===1?t[z]:0,valueBoolean:U.type===0?t[z]:!1,valueString:U.type===2?t[z]:""},U=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),U.graphOptionXref),z),S.push(U))))}(b.length!==0||S.length!==0)&&(this.o=!0,this.B=(this.B===void 0?[]:this.B).concat(S),this.A=(this.A===void 0?[]:this.A).concat(b))}};function l(t){var c,a,b,S,w,F,U;return gt(function(z){switch(z.g){case 1:if(!t.o)return z.return();if(!t.A){z.g=2;break}c=T(t.A),a=c.next();case 3:if(a.done){z.g=5;break}return b=a.value,P(z,b(),4);case 4:a=c.next(),z.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(S=new t.h.GraphOptionChangeRequestList,w=T(t.B),F=w.next();!F.done;F=w.next())U=F.value,S.push_back(U);t.i.changeOptions(S),S.delete(),t.B=void 0}t.o=!1,z.g=0}})}i.initialize=function(){var t=this;return gt(function(c){return c.g==1?P(c,Yt(t),2):c.g!=3?P(c,Ht(t),3):P(c,l(t),0)})};function v(t,c){var a,b;return gt(function(S){return c in t.G?S.return(t.G[c]):(a=t.locateFile(c,""),b=fetch(a).then(function(w){return w.arrayBuffer()}),t.G[c]=b,S.return(b))})}i.overrideFile=function(t,c){this.i?this.i.overrideFile(t,c):this.C[t]=c},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(t,c){var a=this,b,S,w,F,U,z,Q,D,st;return gt(function(ft){switch(ft.g){case 1:return a.g.inputs?(b=1e3*(c==null?performance.now():c),P(ft,a.D,2)):ft.return();case 2:return P(ft,a.initialize(),3);case 3:for(S=new a.h.PacketDataList,w=T(Object.keys(t)),F=w.next();!F.done;F=w.next())if(U=F.value,z=a.g.inputs[U]){t:{var mt=t[U];switch(z.type){case"video":var Gt=a.m[z.stream];if(Gt||(Gt=new K(a.h,a.F),a.m[z.stream]=Gt),Gt.l===0&&(Gt.l=Gt.h.createTexture()),typeof HTMLVideoElement<"u"&&mt instanceof HTMLVideoElement)var vt=mt.videoWidth,At=mt.videoHeight;else typeof HTMLImageElement<"u"&&mt instanceof HTMLImageElement?(vt=mt.naturalWidth,At=mt.naturalHeight):(vt=mt.width,At=mt.height);At={glName:Gt.l,width:vt,height:At},vt=Gt.g,vt.canvas.width=At.width,vt.canvas.height=At.height,vt.activeTexture(vt.TEXTURE0),Gt.h.bindTexture2d(Gt.l),vt.texImage2D(vt.TEXTURE_2D,0,vt.RGBA,vt.RGBA,vt.UNSIGNED_BYTE,mt),Gt.h.bindTexture2d(0),Gt=At;break t;case"detections":for(Gt=a.m[z.stream],Gt||(Gt=new yt(a.h),a.m[z.stream]=Gt),Gt.data||(Gt.data=new Gt.g.DetectionListData),Gt.data.reset(mt.length),At=0;At<mt.length;++At){vt=mt[At];var le=Gt.data,ce=le.setBoundingBox,Ne=At,Rn=vt.U,Ee=new kt;if(ut(Ee,1,Rn.aa),ut(Ee,2,Rn.ba),ut(Ee,3,Rn.height),ut(Ee,4,Rn.width),ut(Ee,5,Rn.rotation),ut(Ee,6,Rn.Z),Rn=Zn(Ee,Et),ce.call(le,Ne,Rn),vt.P)for(le=0;le<vt.P.length;++le){Ee=vt.P[le];var Nn=!!Ee.visibility;ce=Gt.data,Ne=ce.addNormalizedLandmark,Rn=At,Ee=Object.assign(Object.assign({},Ee),{visibility:Nn?Ee.visibility:0}),Nn=new rt,ut(Nn,1,Ee.x),ut(Nn,2,Ee.y),ut(Nn,3,Ee.z),Ee.visibility&&ut(Nn,4,Ee.visibility),Ee=Zn(Nn,Rt),Ne.call(ce,Rn,Ee)}if(vt.N)for(le=0;le<vt.N.length;++le)ce=Gt.data,Ne=ce.addClassification,Rn=At,Ee=vt.N[le],Nn=new V,ut(Nn,2,Ee.$),Ee.index&&ut(Nn,1,Ee.index),Ee.label&&ut(Nn,3,Ee.label),Ee.displayName&&ut(Nn,4,Ee.displayName),Ee=Zn(Nn,E),Ne.call(ce,Rn,Ee)}Gt=Gt.data;break t;default:Gt={}}}switch(Q=Gt,D=z.stream,z.type){case"video":S.pushTexture2d(Object.assign(Object.assign({},Q),{stream:D,timestamp:b}));break;case"detections":st=Q,st.stream=D,st.timestamp=b,S.pushDetectionList(st);break;default:throw Error("Unknown input config type: '"+z.type+"'")}}return a.i.send(S),P(ft,a.D,4);case 4:S.delete(),ft.g=0}})};function I(t,c,a){var b,S,w,F,U,z,Q,D,st,ft,mt,Gt,vt,At;return gt(function(le){switch(le.g){case 1:if(!a)return le.return(c);for(b={},S=0,w=T(Object.keys(a)),F=w.next();!F.done;F=w.next())U=F.value,z=a[U],typeof z!="string"&&z.type==="texture"&&c[z.stream]!==void 0&&++S;1<S&&(t.H=!1),Q=T(Object.keys(a)),F=Q.next();case 2:if(F.done){le.g=4;break}if(D=F.value,st=a[D],typeof st=="string")return vt=b,At=D,P(le,L(t,D,c[st]),14);if(ft=c[st.stream],st.type==="detection_list"){if(ft){for(var ce=ft.getRectList(),Ne=ft.getLandmarksList(),Rn=ft.getClassificationsList(),Ee=[],Nn=0;Nn<ce.size();++Nn){var gr=Sn(ce.get(Nn),kt,Tt);gr={U:{aa:it(gr,1),ba:it(gr,2),height:it(gr,3),width:it(gr,4),rotation:it(gr,5,0),Z:me(gr,6)},P:ue(Sn(Ne.get(Nn),Ut,Jt),rt,1).map(A),N:k(Sn(Rn.get(Nn),O,ot))},Ee.push(gr)}ce=Ee}else ce=[];b[D]=ce,le.g=7;break}if(st.type==="proto_list"){if(ft){for(ce=Array(ft.size()),Ne=0;Ne<ft.size();Ne++)ce[Ne]=ft.get(Ne);ft.delete()}else ce=[];b[D]=ce,le.g=7;break}if(ft===void 0){le.g=3;break}if(st.type==="float_list"){b[D]=ft,le.g=7;break}if(st.type==="proto"){b[D]=ft,le.g=7;break}if(st.type!=="texture")throw Error("Unknown output config type: '"+st.type+"'");return mt=t.s[D],mt||(mt=new K(t.h,t.F),t.s[D]=mt),P(le,nt(mt,ft,t.H),13);case 13:Gt=le.h,b[D]=Gt;case 7:st.transform&&b[D]&&(b[D]=st.transform(b[D])),le.g=3;break;case 14:vt[At]=le.h;case 3:F=Q.next(),le.g=2;break;case 4:return le.return(b)}})}function L(t,c,a){var b;return gt(function(S){return typeof a=="number"||a instanceof Uint8Array||a instanceof t.h.Uint8BlobList?S.return(a):a instanceof t.h.Texture2dDataOut?(b=t.s[c],b||(b=new K(t.h,t.F),t.s[c]=b),S.return(nt(b,a,t.H))):S.return(void 0)})}function N(t,c){for(var a=c.name||"$",b=[].concat(J(c.wants)),S=new t.h.StringList,w=T(c.wants),F=w.next();!F.done;F=w.next())S.push_back(F.value);w=t.h.PacketListener.implement({onResults:function(U){for(var z={},Q=0;Q<c.wants.length;++Q)z[b[Q]]=U.get(Q);var D=t.listeners[a];D&&(t.D=I(t,z,c.outs).then(function(st){st=D(st);for(var ft=0;ft<c.wants.length;++ft){var mt=z[b[ft]];typeof mt=="object"&&mt.hasOwnProperty&&mt.hasOwnProperty("delete")&&mt.delete()}st&&(t.D=st)}))}}),t.i.attachMultiListener(S,w),S.delete()}i.onResults=function(t,c){this.listeners[c||"$"]=t},Ct("Solution",xt),Ct("OptionType",{BOOL:0,NUMBER:1,ca:2,0:"BOOL",1:"NUMBER",2:"STRING"});function o(t){var c=me(t,1),a=de(t,h,3);return a={x:it(a,1),y:it(a,2),depth:it(a,3)},t=de(t,G,2),{id:c,point2d:a,point3d:{x:it(t,1),y:it(t,2),z:it(t,3)}}}function d(t){var c=Sn(t,s,X);t=[],c=ue(c,M,2);for(var a=0;a<c.length;a++)t.push({id:me(c[a],1),keypoints:ue(c[a],B,2).map(o),visibility:it(c[a],3),scale:tt(c[a],6),translation:tt(c[a],5),rotation:tt(c[a],4)});return t}function g(t){switch(t){case"Camera":return"object_detection_3d_camera.tflite";case"Chair":return"object_detection_3d_chair.tflite";case"Cup":return"object_detection_3d_cup.tflite";default:return"object_detection_3d_sneakers.tflite"}}function e(t){switch(t){case"Camera":return"Camera";case"Chair":return"Chair";case"Cup":return"Coffee cup, Mug";default:return"Footwear"}}var u={focalX:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_focal_x"}},focalY:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_focal_y"}},principalX:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_principal_point_x"}},principalY:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_principal_point_y"}},allowedLabels:{type:2,graphOptionXref:{calculatorName:"ConstantSidePacketCalculatorAllowedLabels",calculatorType:"ConstantSidePacketCalculator",fieldName:"string_value"}}};function m(t){var c=this;t=t||{},this.g=new xt({locateFile:t.locateFile,files:[{url:"objectron_solution_packed_assets_loader.js"},{simd:!1,url:"objectron_solution_wasm_bin.js"},{simd:!0,url:"objectron_solution_simd_wasm_bin.js"}],graph:{url:"objectron.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:["lifted_objects","image_transformed"],outs:{image:"image_transformed",objectDetections:{type:"proto",stream:"lifted_objects",transform:d}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,default:!1,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumObjects:{type:1,default:5,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorMaxNumObjects",fieldName:"int_value"}},staticImageMode:{type:0,default:!0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"objectrongpusubgraph__ConstantSidePacketCalculator",fieldName:"bool_value"}},minDetectionConfidence:{type:1,default:.5,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"objectrongpusubgraph__objectdetectionoidv4subgraph__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,default:.99,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"objectrongpusubgraph__boxlandmarksubgraph__ThresholdingCalculator",fieldName:"threshold"}},modelName:{default:"Shoe",onChange:function(a){var b,S,w,F;return gt(function(U){return U.g==1?(b=a,c.g.setOptions({allowedLabels:e(b)},u),S=g(b),w="object_detection_3d.tflite",P(U,v(c.g,S),2)):(F=U.h,c.g.overrideFile(w,F),U.return(!0))})}},focalLength:{default:[1,1],onChange:function(a){var b;return gt(function(S){return b=a,c.h=b,c.g.setOptions({focalX:b[0],focalY:b[1]},u),S.return(!0)})}},principalPoint:{default:[0,0],onChange:function(a){var b;return gt(function(S){return b=a,c.i=b,c.g.setOptions({principalX:b[0],principalY:b[1]},u),S.return(!0)})}},imageSize:{onChange:function(a){var b,S,w,F;return gt(function(U){if(c.h===void 0||c.i===void 0)return console.error('"focalLength" and "principalPoint" must be set if setting image size'),U.return();b=a,S=[b[0]/2,b[1]/2],w=[c.h[0]/S[0],c.h[1]/S[1]],F=[c.i[0]/S[0],c.i[1]/S[1]],c.setOptions({focalLength:w,principalPoint:F}),U.g=0})}}}})}i=m.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(t){this.g.onResults(t)},i.initialize=function(){var t=this;return gt(function(c){return P(c,t.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(t){var c=this;return gt(function(a){return P(a,c.g.send(t),0)})},i.setOptions=function(t){this.g.setOptions(t)},Ct("Objectron",m),Ct("BOX_CONNECTIONS",[[1,2],[2,4],[4,3],[3,1],[5,6],[6,8],[8,7],[7,5],[1,5],[2,6],[3,7],[4,8]]),Ct("BOX_KEYPOINTS",{CENTER:0,BACK_BOTTOM_LEFT:1,FRONT_BOTTOM_LEFT:2,BACK_TOP_LEFT:3,FRONT_TOP_LEFT:4,BACK_BOTTOM_RIGHT:5,FRONT_BOTTOM_RIGHT:6,BACK_TOP_RIGHT:7,FRONT_TOP_RIGHT:8}),Ct("VERSION","0.4.1636596145")}).call(Ii);const xi={};(function(){var i;function n(s){var X=0;return function(){return X<s.length?{done:!1,value:s[X++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(s,X,R){return s==Array.prototype||s==Object.prototype||(s[X]=R.value),s};function f(s){s=[typeof globalThis=="object"&&globalThis,s,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var X=0;X<s.length;++X){var R=s[X];if(R&&R.Math==Math)return R}throw Error("Cannot find global object")}var Z=f(this);function x(s,X){if(X)t:{var R=Z;s=s.split(".");for(var Y=0;Y<s.length-1;Y++){var k=s[Y];if(!(k in R))break t;R=R[k]}s=s[s.length-1],Y=R[s],X=X(Y),X!=Y&&X!=null&&r(R,s,{configurable:!0,writable:!0,value:X})}}x("Symbol",function(s){function X(A){if(this instanceof X)throw new TypeError("Symbol is not a constructor");return new R(Y+(A||"")+"_"+k++,A)}function R(A,K){this.g=A,r(this,"description",{configurable:!0,writable:!0,value:K})}if(s)return s;R.prototype.toString=function(){return this.g};var Y="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",k=0;return X}),x("Symbol.iterator",function(s){if(s)return s;s=Symbol("Symbol.iterator");for(var X="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),R=0;R<X.length;R++){var Y=Z[X[R]];typeof Y=="function"&&typeof Y.prototype[s]!="function"&&r(Y.prototype,s,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return s});function H(s){return s={next:s},s[Symbol.iterator]=function(){return this},s}function T(s){var X=typeof Symbol<"u"&&Symbol.iterator&&s[Symbol.iterator];return X?X.call(s):{next:n(s)}}function J(s){if(!(s instanceof Array)){s=T(s);for(var X,R=[];!(X=s.next()).done;)R.push(X.value);s=R}return s}var et=typeof Object.create=="function"?Object.create:function(s){function X(){}return X.prototype=s,new X},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Lt={a:!0},wt={};try{wt.__proto__=Lt,pt=wt.a;break t}catch{}pt=!1}lt=pt?function(s,X){if(s.__proto__=X,s.__proto__!==X)throw new TypeError(s+" is not extensible");return s}:null}var at=lt;function dt(s,X){if(s.prototype=et(X.prototype),s.prototype.constructor=s,at)at(s,X);else for(var R in X)if(R!="prototype")if(Object.defineProperties){var Y=Object.getOwnPropertyDescriptor(X,R);Y&&Object.defineProperty(s,R,Y)}else s[R]=X[R];s.ea=X.prototype}function Kt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Nt(s){if(s.l)throw new TypeError("Generator is already running");s.l=!0}Kt.prototype.o=function(s){this.h=s};function ee(s,X){s.j={U:X,V:!0},s.g=s.m||s.s}Kt.prototype.return=function(s){this.j={return:s},this.g=this.s};function P(s,X,R){return s.g=R,{value:X}}function $e(s){this.g=new Kt,this.h=s}function je(s,X){Nt(s.g);var R=s.g.i;return R?Ve(s,"return"in R?R.return:function(Y){return{value:Y,done:!0}},X,s.g.return):(s.g.return(X),zt(s))}function Ve(s,X,R,Y){try{var k=X.call(s.g.i,R);if(!(k instanceof Object))throw new TypeError("Iterator result "+k+" is not an object");if(!k.done)return s.g.l=!1,k;var A=k.value}catch(K){return s.g.i=null,ee(s.g,K),zt(s)}return s.g.i=null,Y.call(s.g,A),zt(s)}function zt(s){for(;s.g.g;)try{var X=s.h(s.g);if(X)return s.g.l=!1,{value:X.value,done:!1}}catch(R){s.g.h=void 0,ee(s.g,R)}if(s.g.l=!1,s.g.j){if(X=s.g.j,s.g.j=null,X.V)throw X.U;return{value:X.return,done:!0}}return{value:void 0,done:!0}}function Jn(s){this.next=function(X){return Nt(s.g),s.g.i?X=Ve(s,s.g.i.next,X,s.g.o):(s.g.o(X),X=zt(s)),X},this.throw=function(X){return Nt(s.g),s.g.i?X=Ve(s,s.g.i.throw,X,s.g.o):(ee(s.g,X),X=zt(s)),X},this.return=function(X){return je(s,X)},this[Symbol.iterator]=function(){return this}}function ne(s){function X(Y){return s.next(Y)}function R(Y){return s.throw(Y)}return new Promise(function(Y,k){function A(K){K.done?Y(K.value):Promise.resolve(K.value).then(X,R).then(A,k)}A(s.next())})}function gt(s){return ne(new Jn(new $e(s)))}x("Promise",function(s){function X(K){this.h=0,this.i=void 0,this.g=[],this.o=!1;var nt=this.j();try{K(nt.resolve,nt.reject)}catch($){nt.reject($)}}function R(){this.g=null}function Y(K){return K instanceof X?K:new X(function(nt){nt(K)})}if(s)return s;R.prototype.h=function(K){if(this.g==null){this.g=[];var nt=this;this.i(function(){nt.l()})}this.g.push(K)};var k=Z.setTimeout;R.prototype.i=function(K){k(K,0)},R.prototype.l=function(){for(;this.g&&this.g.length;){var K=this.g;this.g=[];for(var nt=0;nt<K.length;++nt){var $=K[nt];K[nt]=null;try{$()}catch(yt){this.j(yt)}}}this.g=null},R.prototype.j=function(K){this.i(function(){throw K})},X.prototype.j=function(){function K(yt){return function(Xt){$||($=!0,yt.call(nt,Xt))}}var nt=this,$=!1;return{resolve:K(this.C),reject:K(this.l)}},X.prototype.C=function(K){if(K===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(K instanceof X)this.F(K);else{t:switch(typeof K){case"object":var nt=K!=null;break t;case"function":nt=!0;break t;default:nt=!1}nt?this.v(K):this.m(K)}},X.prototype.v=function(K){var nt=void 0;try{nt=K.then}catch($){this.l($);return}typeof nt=="function"?this.G(nt,K):this.m(K)},X.prototype.l=function(K){this.s(2,K)},X.prototype.m=function(K){this.s(1,K)},X.prototype.s=function(K,nt){if(this.h!=0)throw Error("Cannot settle("+K+", "+nt+"): Promise already settled in state"+this.h);this.h=K,this.i=nt,this.h===2&&this.D(),this.A()},X.prototype.D=function(){var K=this;k(function(){if(K.B()){var nt=Z.console;typeof nt<"u"&&nt.error(K.i)}},1)},X.prototype.B=function(){if(this.o)return!1;var K=Z.CustomEvent,nt=Z.Event,$=Z.dispatchEvent;return typeof $>"u"?!0:(typeof K=="function"?K=new K("unhandledrejection",{cancelable:!0}):typeof nt=="function"?K=new nt("unhandledrejection",{cancelable:!0}):(K=Z.document.createEvent("CustomEvent"),K.initCustomEvent("unhandledrejection",!1,!0,K)),K.promise=this,K.reason=this.i,$(K))},X.prototype.A=function(){if(this.g!=null){for(var K=0;K<this.g.length;++K)A.h(this.g[K]);this.g=null}};var A=new R;return X.prototype.F=function(K){var nt=this.j();K.J(nt.resolve,nt.reject)},X.prototype.G=function(K,nt){var $=this.j();try{K.call(nt,$.resolve,$.reject)}catch(yt){$.reject(yt)}},X.prototype.then=function(K,nt){function $(It,ht){return typeof It=="function"?function(Vt){try{yt(It(Vt))}catch(xt){Xt(xt)}}:ht}var yt,Xt,Bt=new X(function(It,ht){yt=It,Xt=ht});return this.J($(K,yt),$(nt,Xt)),Bt},X.prototype.catch=function(K){return this.then(void 0,K)},X.prototype.J=function(K,nt){function $(){switch(yt.h){case 1:K(yt.i);break;case 2:nt(yt.i);break;default:throw Error("Unexpected state: "+yt.h)}}var yt=this;this.g==null?A.h($):this.g.push($),this.o=!0},X.resolve=Y,X.reject=function(K){return new X(function(nt,$){$(K)})},X.race=function(K){return new X(function(nt,$){for(var yt=T(K),Xt=yt.next();!Xt.done;Xt=yt.next())Y(Xt.value).J(nt,$)})},X.all=function(K){var nt=T(K),$=nt.next();return $.done?Y([]):new X(function(yt,Xt){function Bt(Vt){return function(xt){It[Vt]=xt,ht--,ht==0&&yt(It)}}var It=[],ht=0;do It.push(void 0),ht++,Y($.value).J(Bt(It.length-1),Xt),$=nt.next();while(!$.done)})},X});function qe(s,X){s instanceof String&&(s+="");var R=0,Y=!1,k={next:function(){if(!Y&&R<s.length){var A=R++;return{value:X(A,s[A]),done:!1}}return Y=!0,{done:!0,value:void 0}}};return k[Symbol.iterator]=function(){return k},k}var zn=typeof Object.assign=="function"?Object.assign:function(s,X){for(var R=1;R<arguments.length;R++){var Y=arguments[R];if(Y)for(var k in Y)Object.prototype.hasOwnProperty.call(Y,k)&&(s[k]=Y[k])}return s};x("Object.assign",function(s){return s||zn}),x("Object.is",function(s){return s||function(X,R){return X===R?X!==0||1/X===1/R:X!==X&&R!==R}}),x("Array.prototype.includes",function(s){return s||function(X,R){var Y=this;Y instanceof String&&(Y=String(Y));var k=Y.length;for(R=R||0,0>R&&(R=Math.max(R+k,0));R<k;R++){var A=Y[R];if(A===X||Object.is(A,X))return!0}return!1}}),x("String.prototype.includes",function(s){return s||function(X,R){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(X instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(X,R||0)!==-1}}),x("Array.prototype.keys",function(s){return s||function(){return qe(this,function(X){return X})}});var Re=this||self;function Ct(s,X){s=s.split(".");var R=Re;s[0]in R||typeof R.execScript>"u"||R.execScript("var "+s[0]);for(var Y;s.length&&(Y=s.shift());)s.length||X===void 0?R[Y]&&R[Y]!==Object.prototype[Y]?R=R[Y]:R=R[Y]={}:R[Y]=X}function Te(s){Re.setTimeout(function(){throw s},0)}function ln(s){Te(s)}function Xn(s,X){ln(Error("Invalid wire type: "+s+" (at position "+X+")"))}function Hn(){ln(Error("Failed to read varint, encoding is invalid."))}function In(s,X){return X=String.fromCharCode.apply(null,X),s==null?X:s+X}var kn,hn=typeof TextDecoder<"u",bn,En=typeof TextEncoder<"u";function Fn(s){if(En)s=(bn||(bn=new TextEncoder)).encode(s);else{var X=void 0;X=X===void 0?!1:X;for(var R=0,Y=new Uint8Array(3*s.length),k=0;k<s.length;k++){var A=s.charCodeAt(k);if(128>A)Y[R++]=A;else{if(2048>A)Y[R++]=A>>6|192;else{if(55296<=A&&57343>=A){if(56319>=A&&k<s.length){var K=s.charCodeAt(++k);if(56320<=K&&57343>=K){A=1024*(A-55296)+K-56320+65536,Y[R++]=A>>18|240,Y[R++]=A>>12&63|128,Y[R++]=A>>6&63|128,Y[R++]=A&63|128;continue}else k--}if(X)throw Error("Found an unpaired surrogate");A=65533}Y[R++]=A>>12|224,Y[R++]=A>>6&63|128}Y[R++]=A&63|128}}s=Y.subarray(0,R)}return s}var Oe={},Ae=null;function xn(s){var X;X===void 0&&(X=0),Se(),X=Oe[X];for(var R=Array(Math.floor(s.length/3)),Y=X[64]||"",k=0,A=0;k<s.length-2;k+=3){var K=s[k],nt=s[k+1],$=s[k+2],yt=X[K>>2];K=X[(K&3)<<4|nt>>4],nt=X[(nt&15)<<2|$>>6],$=X[$&63],R[A++]=yt+K+nt+$}switch(yt=0,$=Y,s.length-k){case 2:yt=s[k+1],$=X[(yt&15)<<2]||Y;case 1:s=s[k],R[A]=X[s>>2]+X[(s&3)<<4|yt>>4]+$+Y}return R.join("")}function Vn(s){var X=s.length,R=3*X/4;R%3?R=Math.floor(R):"=.".indexOf(s[X-1])!=-1&&(R="=.".indexOf(s[X-2])!=-1?R-2:R-1);var Y=new Uint8Array(R),k=0;return he(s,function(A){Y[k++]=A}),Y.subarray(0,k)}function he(s,X){function R($){for(;Y<s.length;){var yt=s.charAt(Y++),Xt=Ae[yt];if(Xt!=null)return Xt;if(!/^[\s\xa0]*$/.test(yt))throw Error("Unknown base64 encoding at char: "+yt)}return $}Se();for(var Y=0;;){var k=R(-1),A=R(0),K=R(64),nt=R(64);if(nt===64&&k===-1)break;X(k<<2|A>>4),K!=64&&(X(A<<4&240|K>>2),nt!=64&&X(K<<6&192|nt))}}function Se(){if(!Ae){Ae={};for(var s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),X=["+/=","+/","-_=","-_.","-_"],R=0;5>R;R++){var Y=s.concat(X[R].split(""));Oe[R]=Y;for(var k=0;k<Y.length;k++){var A=Y[k];Ae[A]===void 0&&(Ae[A]=k)}}}}var Pe=typeof Uint8Array=="function",re;function We(s){if(this.g=s,s!==null&&s.length===0)throw Error("ByteString should be constructed with non-empty values")}We.prototype.toJSON=function(){if(this.g==null)var s="";else s=this.g,s=this.g=s==null||typeof s=="string"?s:Pe&&s instanceof Uint8Array?xn(s):null;return s};var cn=typeof Uint8Array.prototype.slice=="function";function Ke(s,X,R){return X===R?re||(re=new Uint8Array(0)):cn?s.slice(X,R):new Uint8Array(s.subarray(X,R))}var Qt=0,Ze=0;function Fe(s){if(s.constructor===Uint8Array)return s;if(s.constructor===ArrayBuffer)return new Uint8Array(s);if(s.constructor===Array)return new Uint8Array(s);if(s.constructor===String)return Vn(s);if(s.constructor===We){if(s.g==null)var X=re||(re=new Uint8Array(0));else{X=Uint8Array;var R=s.g;R=R==null||Pe&&R!=null&&R instanceof Uint8Array?R:typeof R=="string"?Vn(R):null,s=s.g=R,X=new X(s)}return X}if(s instanceof Uint8Array)return new Uint8Array(s.buffer,s.byteOffset,s.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Mt(s,X){X=X===void 0?{}:X,X=X.u===void 0?!1:X.u,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.u=X,s&&Ie(this,s)}function Ie(s,X){s.h=Fe(X),s.l=0,s.i=s.h.length,s.g=s.l}Mt.prototype.reset=function(){this.g=this.l};function jt(s){s.g>s.i&&(s.j=!0,ln(Error("Tried to read past the end of the data "+s.g+" > "+s.i)))}function ye(s){var X=s.h,R=X[s.g],Y=R&127;return 128>R?(s.g+=1,jt(s),Y):(R=X[s.g+1],Y|=(R&127)<<7,128>R?(s.g+=2,jt(s),Y):(R=X[s.g+2],Y|=(R&127)<<14,128>R?(s.g+=3,jt(s),Y):(R=X[s.g+3],Y|=(R&127)<<21,128>R?(s.g+=4,jt(s),Y):(R=X[s.g+4],Y|=(R&15)<<28,128>R?(s.g+=5,jt(s),Y>>>0):(s.g+=5,128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]?(s.j=!0,Hn(),Y):(jt(s),Y))))))}var Le=[];function tn(){this.g=new Uint8Array(64),this.h=0}function Xe(s,X){if(!(s.h+1<s.g.length)){var R=s.g;s.g=new Uint8Array(Math.ceil(1+2*s.g.length)),s.g.set(R)}s.g[s.h++]=X}tn.prototype.length=function(){return this.h},tn.prototype.end=function(){var s=this.g,X=this.h;return this.h=0,Ke(s,0,X)};function Ot(s,X){for(;127<X;)Xe(s,X&127|128),X>>>=7;Xe(s,X)}function ze(s){var X={},R=X.N===void 0?!1:X.N;this.m={u:X.u===void 0?!1:X.u},this.N=R,X=this.m,Le.length?(R=Le.pop(),X&&(R.u=X.u),s&&Ie(R,s),s=R):s=new Mt(s,X),this.g=s,this.l=this.g.g,this.h=this.i=-1,this.j=!1}ze.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function _e(s){var X=s.g;if((X=X.g==X.i)||(X=s.j)||(X=s.g,X=X.j||0>X.g||X.g>X.i),X)return!1;s.l=s.g.g;var R=ye(s.g);return X=R>>>3,R&=7,0<=R&&5>=R?(s.i=X,s.h=R,!0):(s.j=!0,Xn(R,s.l),!1)}function xe(s){switch(s.h){case 0:if(s.h!=0)xe(s);else t:{s=s.g;for(var X=s.g,R=0;10>R;R++){if((s.h[X]&128)===0){s.g=X+1,jt(s);break t}X++}s.j=!0,Hn()}break;case 1:s=s.g,s.g+=8,jt(s);break;case 2:s.h!=2?xe(s):(X=ye(s.g),s=s.g,s.g+=X,jt(s));break;case 5:s=s.g,s.g+=4,jt(s);break;case 3:X=s.i;do{if(!_e(s)){s.j=!0,ln(Error("Unmatched start-group tag: stream EOF"));break}if(s.h==4){s.i!=X&&(s.j=!0,ln(Error("Unmatched end-group tag")));break}xe(s)}while(1);break;default:s.j=!0,Xn(s.h,s.l)}}function Wn(s,X,R){s.N||(s=Ke(s.g.h,R,s.g.g),(R=X.m)?R.push(s):X.m=[s])}var un=[];function Qe(){this.h=[],this.i=0,this.g=new tn}function an(s,X){X.length!==0&&(s.h.push(X),s.i+=X.length)}function ve(s,X,R){Ot(s.g,8*X+2),Ot(s.g,R.length),an(s,s.g.end()),an(s,R)}var Ye=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Ge(s,X){Object.isFrozen(s)||(Ye?s[Ye]|=X:s.g!==void 0?s.g|=X:Object.defineProperties(s,{g:{value:X,configurable:!0,writable:!0,enumerable:!1}}))}function ie(s){if(!s)return 0;var X;return Ye?X=s[Ye]:X=s.g,X==null?0:X}function De(s){return Array.isArray(s)&&Ge(s,1),s}function qt(s){if(!Array.isArray(s))throw Error("cannot mark non-array as immutable");Ge(s,2)}function Pt(s){return s!==null&&typeof s=="object"&&s.constructor===Object}function fn(s){switch(typeof s){case"number":return isFinite(s)?s:String(s);case"object":return Pe&&s!=null&&s instanceof Uint8Array?xn(s):s;default:return s}}function fe(s,X){if(s!=null)return Array.isArray(s)||Pt(s)?Ft(s,X):X(s)}function Ft(s,X){if(Array.isArray(s)){for(var R=Array(s.length),Y=0;Y<s.length;Y++)R[Y]=fe(s[Y],X);return ie(s)&1&&De(R),R}R={};for(Y in s)R[Y]=fe(s[Y],X);return R}var Wt;function oe(s,X,R){var Y=Wt;Wt=null,s||(s=Y),Y=this.constructor.ca,s||(s=Y?[Y]:[]),this.j=(Y?0:-1)-(this.constructor.aa||0),this.i=null,this.g=s;t:{if(Y=this.g.length,s=Y-1,Y&&(Y=this.g[s],Pt(Y))){this.l=s-this.j,this.h=Y;break t}X!==void 0&&-1<X?(this.l=Math.max(X,s+1-this.j),this.h=null):this.l=Number.MAX_VALUE}if(R)for(X=0;X<R.length;X++)s=R[X],s<this.l?(s+=this.j,(Y=this.g[s])?De(Y):this.g[s]=we):(te(this),(Y=this.h[s])?De(Y):this.h[s]=we)}var we=Object.freeze(De([]));function te(s){var X=s.l+s.j;s.g[X]||(s.h=s.g[X]={})}function se(s,X,R){return X===-1?null:(R===void 0?0:R)||X>=s.l?s.h?s.h[X]:void 0:s.g[X+s.j]}function tt(s,X,R){R=R===void 0?!0:R;var Y=Y===void 0?!1:Y,k=se(s,X,Y);return k==null&&(k=we),k===we?(k=De([]),ut(s,X,k,Y)):R&&Array.isArray(k)&&ie(k)&2&&(k=k.slice(),ut(s,X,k,Y)),k}function it(s,X,R){return s=se(s,X),s=s==null?s:+s,s==null?R===void 0?0:R:s}function ut(s,X,R,Y){(Y===void 0?0:Y)||X>=s.l?(te(s),s.h[X]=R):s.g[X+s.j]=R}function _t(s,X,R){s.i||(s.i={});var Y=s.i[R];if(!Y){var k=tt(s,R,!1);Y=[];for(var A=Array.isArray(k)?!!(ie(k)&2):!1,K=0;K<k.length;K++)Y[K]=new X(k[K]),A&&qt(Y[K].g);A&&(qt(Y),Object.freeze(Y)),s.i[R]=Y}return Y}function de(s,X,R,Y,k){var A=_t(s,Y,X);R=R||new Y,s=tt(s,X),k!=null?(A.splice(k,0,R),s.splice(k,0,ue(R))):(A.push(R),s.push(ue(R)))}oe.prototype.toJSON=function(){var s=ue(this);return Ft(s,fn)};function ue(s){if(s.i)for(var X in s.i){var R=s.i[X];if(Array.isArray(R))for(var Y=0;Y<R.length;Y++)R[Y]&&ue(R[Y]);else R&&ue(R)}return s.g}oe.prototype.toString=function(){return ue(this).toString()};function St(s,X){return s=se(s,X),s==null?0:s}function me(s,X){return s=se(s,X),s==null?"":s}function Ce(s,X){if(s=s.m){an(X,X.g.end());for(var R=0;R<s.length;R++)an(X,s[R])}}function en(s){var X=s[0];switch(s.length){case 2:var R=s[1];return function($,yt,Xt){return X($,yt,Xt,R)};case 3:var Y=s[1],k=s[2];return function($,yt,Xt){return X($,yt,Xt,Y,k)};case 4:var A=s[1],K=s[2],nt=s[3];return function($,yt,Xt){return X($,yt,Xt,A,K,nt)};default:throw Error("unsupported number of parameters, expected [2-4], got "+s.length)}}function nn(s,X,R){for(;_e(X)&&X.h!=4;){var Y=X.i,k=R[Y];if(k){if(Array.isArray(k)&&(k=R[Y]=en(k)),!k(X,s,Y)){Y=X,k=s;var A=Y.l;xe(Y),Wn(Y,k,A)}}else Y=X,k=s,A=Y.l,xe(Y),Wn(Y,k,A)}return s}function mn(s,X){var R=new Qe;if(X(s,R),s=R.i+R.g.length(),s===0)R=new Uint8Array(0);else{s=new Uint8Array(s);for(var Y=R.h,k=Y.length,A=X=0;A<k;A++){var K=Y[A];K.length!==0&&(s.set(K,X),X+=K.length)}Y=R.g,k=Y.h,k!==0&&(s.set(Y.g.subarray(0,k),X),Y.h=0),R.h=[s],R=s}return R}function yn(s,X,R){if(un.length){var Y=un.pop();s&&(Ie(Y.g,s),Y.i=-1,Y.h=-1),s=Y}else s=new ze(s);try{return R(new X,s)}finally{X=s.g,X.h=null,X.l=0,X.i=0,X.g=0,X.j=!1,X.u=!1,s.i=-1,s.h=-1,s.j=!1,100>un.length&&un.push(s)}}function He(s,X,R){if(X=se(X,R),X!=null){Ot(s.g,8*R+5),s=s.g;var Y=X;Y=(R=0>Y?1:0)?-Y:Y,Y===0?0<1/Y?Qt=Ze=0:(Ze=0,Qt=2147483648):isNaN(Y)?(Ze=0,Qt=2147483647):34028234663852886e22<Y?(Ze=0,Qt=(R<<31|2139095040)>>>0):11754943508222875e-54>Y?(Y=Math.round(Y/Math.pow(2,-149)),Ze=0,Qt=(R<<31|Y)>>>0):(X=Math.floor(Math.log(Y)/Math.LN2),Y*=Math.pow(2,-X),Y=Math.round(8388608*Y),16777216<=Y&&++X,Ze=0,Qt=(R<<31|X+127<<23|Y&8388607)>>>0),R=Qt,Xe(s,R>>>0&255),Xe(s,R>>>8&255),Xe(s,R>>>16&255),Xe(s,R>>>24&255)}}function rn(s,X,R){if(s.h!==5)return!1;s=s.g;var Y=s.h[s.g],k=s.h[s.g+1],A=s.h[s.g+2],K=s.h[s.g+3];return s.g+=4,jt(s),k=(Y<<0|k<<8|A<<16|K<<24)>>>0,s=2*(k>>31)+1,Y=k>>>23&255,k&=8388607,ut(X,R,Y==255?k?NaN:1/0*s:Y==0?s*Math.pow(2,-149)*k:s*Math.pow(2,Y-150)*(k+Math.pow(2,23))),!0}function jn(s,X,R){if(s.h!==0)return!1;for(var Y=s.g,k=128,A=0,K=s=0;4>K&&128<=k;K++)k=Y.h[Y.g++],A|=(k&127)<<7*K;if(128<=k&&(k=Y.h[Y.g++],A|=(k&127)<<28,s|=(k&127)>>4),128<=k)for(K=0;5>K&&128<=k;K++)k=Y.h[Y.g++],s|=(k&127)<<7*K+3;return 128>k?(Y=A>>>0,k=s>>>0,(s=k&2147483648)&&(Y=~Y+1>>>0,k=~k>>>0,Y==0&&(k=k+1>>>0)),Y=4294967296*k+(Y>>>0),s=s?-Y:Y):(Y.j=!0,Hn(),s=void 0),ut(X,R,s),!0}function on(s,X,R){return s.h!==0?!1:(ut(X,R,ye(s.g)),!0)}function Je(s,X,R){if(s.h!==2)return!1;var Y=ye(s.g);s=s.g;var k=s.g;s.g+=Y,jt(s),s=s.h;var A;if(hn)(A=kn)||(A=kn=new TextDecoder("utf-8",{fatal:!1})),A=A.decode(s.subarray(k,k+Y));else{Y=k+Y;for(var K=[],nt=null,$,yt,Xt;k<Y;)$=s[k++],128>$?K.push($):224>$?k>=Y?K.push(65533):(yt=s[k++],194>$||(yt&192)!==128?(k--,K.push(65533)):K.push(($&31)<<6|yt&63)):240>$?k>=Y-1?K.push(65533):(yt=s[k++],(yt&192)!==128||$===224&&160>yt||$===237&&160<=yt||((A=s[k++])&192)!==128?(k--,K.push(65533)):K.push(($&15)<<12|(yt&63)<<6|A&63)):244>=$?k>=Y-2?K.push(65533):(yt=s[k++],(yt&192)!==128||($<<28)+(yt-144)>>30!==0||((A=s[k++])&192)!==128||((Xt=s[k++])&192)!==128?(k--,K.push(65533)):($=($&7)<<18|(yt&63)<<12|(A&63)<<6|Xt&63,$-=65536,K.push(($>>10&1023)+55296,($&1023)+56320))):K.push(65533),8192<=K.length&&(nt=In(nt,K),K.length=0);A=In(nt,K)}return ut(X,R,A),!0}function Zn(s,X,R,Y,k){if(s.h!==2)return!1;var A=new Y,K=s.g.i,nt=ye(s.g),$=s.g.g+nt;if(s.g.i=$,k(A,s),k=$-s.g.g,k!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(nt+" bytes, instead read "+(nt-k)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return s.g.g=$,s.g.i=K,de(X,R,A,Y,void 0),!0}function Sn(s){oe.call(this,s)}var Be;dt(Sn,oe);function Un(s,X){var R=se(s,1);if(R!=null&&R!=null){Ot(X.g,8);var Y=X.g;if(0<=R)Ot(Y,R);else{for(var k=0;9>k;k++)Xe(Y,R&127|128),R>>=7;Xe(Y,1)}}He(X,s,2),Y=se(s,3),Y!=null&&ve(X,3,Fn(Y)),Y=se(s,4),Y!=null&&ve(X,4,Fn(Y)),Ce(s,X)}function sn(s,X){return nn(s,X,Be||(Be={1:on,2:rn,3:Je,4:Je}))}function vn(s){oe.call(this,s,-1,dn)}var Tn;dt(vn,oe),vn.prototype.addClassification=function(s,X){return de(this,1,s,Sn,X),this};function Mn(s,X){return nn(s,X,Tn||(Tn={1:[Zn,Sn,sn]}))}var dn=[1];function Ln(s){oe.call(this,s)}var _n;dt(Ln,oe);function Qn(s,X){He(X,s,1),He(X,s,2),He(X,s,3),He(X,s,4),He(X,s,5),Ce(s,X)}function Yn(s,X){return nn(s,X,_n||(_n={1:rn,2:rn,3:rn,4:rn,5:rn}))}function Cn(s){oe.call(this,s,-1,W)}var p;dt(Cn,oe);function V(s,X){return nn(s,X,p||(p={1:[Zn,Ln,Yn]}))}var W=[1];function E(s){oe.call(this,s)}var O;dt(E,oe);function ot(s,X){He(X,s,1),He(X,s,2),He(X,s,3),He(X,s,4),He(X,s,5);var R=se(s,6);if(R!=null&&R!=null){Ot(X.g,48);var Y=X.g,k=R;R=0>k,k=Math.abs(k);var A=k>>>0;for(k=Math.floor((k-A)/4294967296),k>>>=0,R&&(k=~k>>>0,A=(~A>>>0)+1,4294967295<A&&(A=0,k++,4294967295<k&&(k=0))),Qt=A,Ze=k,R=Qt,A=Ze;0<A||127<R;)Xe(Y,R&127|128),R=(R>>>7|A<<25)>>>0,A>>>=7;Xe(Y,R)}Ce(s,X)}function j(s,X){return nn(s,X,O||(O={1:rn,2:rn,3:rn,4:rn,5:rn,6:jn}))}function rt(s,X,R){if(R=s.createShader(R===0?s.VERTEX_SHADER:s.FRAGMENT_SHADER),s.shaderSource(R,X),s.compileShader(R),!s.getShaderParameter(R,s.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
104
|
+
`+a.getProgramInfoLog(L));b=t.m=L,a.useProgram(b),S=a.getUniformLocation(b,"sampler0"),t.j={J:a.getAttribLocation(b,"aVertex"),I:a.getAttribLocation(b,"aTex"),ja:S},t.s=a.createBuffer(),a.bindBuffer(a.ARRAY_BUFFER,t.s),a.enableVertexAttribArray(t.j.J),a.vertexAttribPointer(t.j.J,2,a.FLOAT,!1,0,0),a.bufferData(a.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,null),t.o=a.createBuffer(),a.bindBuffer(a.ARRAY_BUFFER,t.o),a.enableVertexAttribArray(t.j.I),a.vertexAttribPointer(t.j.I,2,a.FLOAT,!1,0,0),a.bufferData(a.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,null),a.uniform1i(S,0)}b=t.j,a.useProgram(t.m),a.canvas.width=c.width,a.canvas.height=c.height,a.viewport(0,0,c.width,c.height),a.activeTexture(a.TEXTURE0),t.h.bindTexture2d(c.glName),a.enableVertexAttribArray(b.J),a.bindBuffer(a.ARRAY_BUFFER,t.s),a.vertexAttribPointer(b.J,2,a.FLOAT,!1,0,0),a.enableVertexAttribArray(b.I),a.bindBuffer(a.ARRAY_BUFFER,t.o),a.vertexAttribPointer(b.I,2,a.FLOAT,!1,0,0),a.bindFramebuffer(a.DRAW_FRAMEBUFFER?a.DRAW_FRAMEBUFFER:a.FRAMEBUFFER,null),a.clearColor(0,0,0,0),a.clear(a.COLOR_BUFFER_BIT),a.colorMask(!0,!0,!0,!0),a.drawArrays(a.TRIANGLE_FAN,0,4),a.disableVertexAttribArray(b.J),a.disableVertexAttribArray(b.I),a.bindBuffer(a.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}function yt(t){this.g=t}var Xt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Kt(t,c){return c+t}function It(t,c){window[t]=c}function ht(t){var c=document.createElement("script");return c.setAttribute("src",t),c.setAttribute("crossorigin","anonymous"),new Promise(function(a){c.addEventListener("load",function(){a()},!1),c.addEventListener("error",function(){a()},!1),document.body.appendChild(c)})}function Wt(){return Zt(function(t){switch(t.g){case 1:return t.m=2,O(t,WebAssembly.instantiate(Xt),4);case 4:t.g=3,t.m=0;break;case 2:return t.m=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})}function xt(t){if(this.g=t,this.listeners={},this.j={},this.G={},this.m={},this.s={},this.H=this.o=this.S=!0,this.D=Promise.resolve(),this.R="",this.C={},this.locateFile=t&&t.locateFile||Kt,typeof window=="object")var c=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")c=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.T=c,t.options){c=T(Object.keys(t.options));for(var a=c.next();!a.done;a=c.next()){a=a.value;var b=t.options[a].default;b!==void 0&&(this.j[a]=typeof b=="function"?b():b)}}}i=xt.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function wt(t){var c,a,b,S,L,F,U,z,Q,D,st;return Zt(function(ft){switch(ft.g){case 1:return t.S?(c=t.g.files===void 0?[]:typeof t.g.files=="function"?t.g.files(t.j):t.g.files,O(ft,Wt(),2)):ft.return();case 2:if(a=ft.h,typeof window=="object")return It("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),It("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),F=c.filter(function(mt){return mt.data!==void 0}),U=c.filter(function(mt){return mt.data===void 0}),z=Promise.all(F.map(function(mt){var Gt=v(t,mt.url);if(mt.path!==void 0){var vt=mt.path;Gt=Gt.then(function(At){return t.overrideFile(vt,At),Promise.resolve(At)})}return Gt})),Q=Promise.all(U.map(function(mt){return mt.simd===void 0||mt.simd&&a||!mt.simd&&!a?ht(t.locateFile(mt.url,t.T)):Promise.resolve()})).then(function(){var mt,Gt,vt;return Zt(function(At){if(At.g==1)return mt=window.createMediapipeSolutionsWasm,Gt=window.createMediapipeSolutionsPackedAssets,vt=t,O(At,mt(Gt),2);vt.h=At.h,At.g=0})}),D=function(){return Zt(function(mt){return t.g.graph&&t.g.graph.url?mt=O(mt,v(t,t.g.graph.url),0):(mt.g=0,mt=void 0),mt})}(),O(ft,Promise.all([Q,z,D]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return b=c.filter(function(mt){return mt.simd===void 0||mt.simd&&a||!mt.simd&&!a}).map(function(mt){return t.locateFile(mt.url,t.T)}),importScripts.apply(null,J(b)),S=t,O(ft,createMediapipeSolutionsWasm(Module),6);case 6:S.h=ft.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,L=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ga:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(L),ft.g=4;break;case 7:if(t.l=document.createElement("canvas"),st=t.l.getContext("webgl2",{}),!st&&(st=t.l.getContext("webgl",{}),!st))return alert("Failed to create WebGL canvas context when passing video frame."),ft.return();t.F=st,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.S=!1,ft.g=0}})}function Ht(t){var c,a,b,S,L,F,U,z;return Zt(function(Q){if(Q.g==1){if(t.g.graph&&t.g.graph.url&&t.R===t.g.graph.url)return Q.return();if(t.o=!0,!t.g.graph||!t.g.graph.url){Q.g=2;return}return t.R=t.g.graph.url,O(Q,v(t,t.g.graph.url),3)}for(Q.g!=2&&(c=Q.h,t.i.loadGraph(c)),a=T(Object.keys(t.C)),b=a.next();!b.done;b=a.next())S=b.value,t.i.overrideFile(S,t.C[S]);if(t.C={},t.g.listeners)for(L=T(t.g.listeners),F=L.next();!F.done;F=L.next())U=F.value,N(t,U);z=t.j,t.j={},t.setOptions(z),Q.g=0})}i.reset=function(){var t=this;return Zt(function(c){t.i&&(t.i.reset(),t.m={},t.s={}),c.g=0})},i.setOptions=function(t,c){var a=this;if(c=c||this.g.options){for(var b=[],S=[],L={},F=T(Object.keys(t)),U=F.next();!U.done;L={L:L.L,M:L.M},U=F.next()){var z=U.value;z in this.j&&this.j[z]===t[z]||(this.j[z]=t[z],U=c[z],U!==void 0&&(U.onChange&&(L.L=U.onChange,L.M=t[z],b.push(function(Q){return function(){var D;return Zt(function(st){if(st.g==1)return O(st,Q.L(Q.M),2);D=st.h,D===!0&&(a.o=!0),st.g=0})}}(L))),U.graphOptionXref&&(z={valueNumber:U.type===1?t[z]:0,valueBoolean:U.type===0?t[z]:!1,valueString:U.type===2?t[z]:""},U=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),U.graphOptionXref),z),S.push(U))))}(b.length!==0||S.length!==0)&&(this.o=!0,this.B=(this.B===void 0?[]:this.B).concat(S),this.A=(this.A===void 0?[]:this.A).concat(b))}};function l(t){var c,a,b,S,L,F,U;return Zt(function(z){switch(z.g){case 1:if(!t.o)return z.return();if(!t.A){z.g=2;break}c=T(t.A),a=c.next();case 3:if(a.done){z.g=5;break}return b=a.value,O(z,b(),4);case 4:a=c.next(),z.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(S=new t.h.GraphOptionChangeRequestList,L=T(t.B),F=L.next();!F.done;F=L.next())U=F.value,S.push_back(U);t.i.changeOptions(S),S.delete(),t.B=void 0}t.o=!1,z.g=0}})}i.initialize=function(){var t=this;return Zt(function(c){return c.g==1?O(c,wt(t),2):c.g!=3?O(c,Ht(t),3):O(c,l(t),0)})};function v(t,c){var a,b;return Zt(function(S){return c in t.G?S.return(t.G[c]):(a=t.locateFile(c,""),b=fetch(a).then(function(L){return L.arrayBuffer()}),t.G[c]=b,S.return(b))})}i.overrideFile=function(t,c){this.i?this.i.overrideFile(t,c):this.C[t]=c},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(t,c){var a=this,b,S,L,F,U,z,Q,D,st;return Zt(function(ft){switch(ft.g){case 1:return a.g.inputs?(b=1e3*(c==null?performance.now():c),O(ft,a.D,2)):ft.return();case 2:return O(ft,a.initialize(),3);case 3:for(S=new a.h.PacketDataList,L=T(Object.keys(t)),F=L.next();!F.done;F=L.next())if(U=F.value,z=a.g.inputs[U]){t:{var mt=t[U];switch(z.type){case"video":var Gt=a.m[z.stream];if(Gt||(Gt=new B(a.h,a.F),a.m[z.stream]=Gt),Gt.l===0&&(Gt.l=Gt.h.createTexture()),typeof HTMLVideoElement<"u"&&mt instanceof HTMLVideoElement)var vt=mt.videoWidth,At=mt.videoHeight;else typeof HTMLImageElement<"u"&&mt instanceof HTMLImageElement?(vt=mt.naturalWidth,At=mt.naturalHeight):(vt=mt.width,At=mt.height);At={glName:Gt.l,width:vt,height:At},vt=Gt.g,vt.canvas.width=At.width,vt.canvas.height=At.height,vt.activeTexture(vt.TEXTURE0),Gt.h.bindTexture2d(Gt.l),vt.texImage2D(vt.TEXTURE_2D,0,vt.RGBA,vt.RGBA,vt.UNSIGNED_BYTE,mt),Gt.h.bindTexture2d(0),Gt=At;break t;case"detections":for(Gt=a.m[z.stream],Gt||(Gt=new yt(a.h),a.m[z.stream]=Gt),Gt.data||(Gt.data=new Gt.g.DetectionListData),Gt.data.reset(mt.length),At=0;At<mt.length;++At){vt=mt[At];var le=Gt.data,ce=le.setBoundingBox,Ne=At,Rn=vt.U,Ee=new kt;if(ut(Ee,1,Rn.aa),ut(Ee,2,Rn.ba),ut(Ee,3,Rn.height),ut(Ee,4,Rn.width),ut(Ee,5,Rn.rotation),ut(Ee,6,Rn.Z),Rn=Zn(Ee,Et),ce.call(le,Ne,Rn),vt.P)for(le=0;le<vt.P.length;++le){Ee=vt.P[le];var Nn=!!Ee.visibility;ce=Gt.data,Ne=ce.addNormalizedLandmark,Rn=At,Ee=Object.assign(Object.assign({},Ee),{visibility:Nn?Ee.visibility:0}),Nn=new rt,ut(Nn,1,Ee.x),ut(Nn,2,Ee.y),ut(Nn,3,Ee.z),Ee.visibility&&ut(Nn,4,Ee.visibility),Ee=Zn(Nn,Rt),Ne.call(ce,Rn,Ee)}if(vt.N)for(le=0;le<vt.N.length;++le)ce=Gt.data,Ne=ce.addClassification,Rn=At,Ee=vt.N[le],Nn=new W,ut(Nn,2,Ee.$),Ee.index&&ut(Nn,1,Ee.index),Ee.label&&ut(Nn,3,Ee.label),Ee.displayName&&ut(Nn,4,Ee.displayName),Ee=Zn(Nn,E),Ne.call(ce,Rn,Ee)}Gt=Gt.data;break t;default:Gt={}}}switch(Q=Gt,D=z.stream,z.type){case"video":S.pushTexture2d(Object.assign(Object.assign({},Q),{stream:D,timestamp:b}));break;case"detections":st=Q,st.stream=D,st.timestamp=b,S.pushDetectionList(st);break;default:throw Error("Unknown input config type: '"+z.type+"'")}}return a.i.send(S),O(ft,a.D,4);case 4:S.delete(),ft.g=0}})};function I(t,c,a){var b,S,L,F,U,z,Q,D,st,ft,mt,Gt,vt,At;return Zt(function(le){switch(le.g){case 1:if(!a)return le.return(c);for(b={},S=0,L=T(Object.keys(a)),F=L.next();!F.done;F=L.next())U=F.value,z=a[U],typeof z!="string"&&z.type==="texture"&&c[z.stream]!==void 0&&++S;1<S&&(t.H=!1),Q=T(Object.keys(a)),F=Q.next();case 2:if(F.done){le.g=4;break}if(D=F.value,st=a[D],typeof st=="string")return vt=b,At=D,O(le,Y(t,D,c[st]),14);if(ft=c[st.stream],st.type==="detection_list"){if(ft){for(var ce=ft.getRectList(),Ne=ft.getLandmarksList(),Rn=ft.getClassificationsList(),Ee=[],Nn=0;Nn<ce.size();++Nn){var gr=Sn(ce.get(Nn),kt,Tt);gr={U:{aa:it(gr,1),ba:it(gr,2),height:it(gr,3),width:it(gr,4),rotation:it(gr,5,0),Z:me(gr,6)},P:ue(Sn(Ne.get(Nn),Ut,Jt),rt,1).map(A),N:k(Sn(Rn.get(Nn),P,ot))},Ee.push(gr)}ce=Ee}else ce=[];b[D]=ce,le.g=7;break}if(st.type==="proto_list"){if(ft){for(ce=Array(ft.size()),Ne=0;Ne<ft.size();Ne++)ce[Ne]=ft.get(Ne);ft.delete()}else ce=[];b[D]=ce,le.g=7;break}if(ft===void 0){le.g=3;break}if(st.type==="float_list"){b[D]=ft,le.g=7;break}if(st.type==="proto"){b[D]=ft,le.g=7;break}if(st.type!=="texture")throw Error("Unknown output config type: '"+st.type+"'");return mt=t.s[D],mt||(mt=new B(t.h,t.F),t.s[D]=mt),O(le,nt(mt,ft,t.H),13);case 13:Gt=le.h,b[D]=Gt;case 7:st.transform&&b[D]&&(b[D]=st.transform(b[D])),le.g=3;break;case 14:vt[At]=le.h;case 3:F=Q.next(),le.g=2;break;case 4:return le.return(b)}})}function Y(t,c,a){var b;return Zt(function(S){return typeof a=="number"||a instanceof Uint8Array||a instanceof t.h.Uint8BlobList?S.return(a):a instanceof t.h.Texture2dDataOut?(b=t.s[c],b||(b=new B(t.h,t.F),t.s[c]=b),S.return(nt(b,a,t.H))):S.return(void 0)})}function N(t,c){for(var a=c.name||"$",b=[].concat(J(c.wants)),S=new t.h.StringList,L=T(c.wants),F=L.next();!F.done;F=L.next())S.push_back(F.value);L=t.h.PacketListener.implement({onResults:function(U){for(var z={},Q=0;Q<c.wants.length;++Q)z[b[Q]]=U.get(Q);var D=t.listeners[a];D&&(t.D=I(t,z,c.outs).then(function(st){st=D(st);for(var ft=0;ft<c.wants.length;++ft){var mt=z[b[ft]];typeof mt=="object"&&mt.hasOwnProperty&&mt.hasOwnProperty("delete")&&mt.delete()}st&&(t.D=st)}))}}),t.i.attachMultiListener(S,L),S.delete()}i.onResults=function(t,c){this.listeners[c||"$"]=t},Ct("Solution",xt),Ct("OptionType",{BOOL:0,NUMBER:1,ca:2,0:"BOOL",1:"NUMBER",2:"STRING"});function o(t){var c=me(t,1),a=de(t,h,3);return a={x:it(a,1),y:it(a,2),depth:it(a,3)},t=de(t,G,2),{id:c,point2d:a,point3d:{x:it(t,1),y:it(t,2),z:it(t,3)}}}function d(t){var c=Sn(t,s,X);t=[],c=ue(c,M,2);for(var a=0;a<c.length;a++)t.push({id:me(c[a],1),keypoints:ue(c[a],K,2).map(o),visibility:it(c[a],3),scale:tt(c[a],6),translation:tt(c[a],5),rotation:tt(c[a],4)});return t}function g(t){switch(t){case"Camera":return"object_detection_3d_camera.tflite";case"Chair":return"object_detection_3d_chair.tflite";case"Cup":return"object_detection_3d_cup.tflite";default:return"object_detection_3d_sneakers.tflite"}}function e(t){switch(t){case"Camera":return"Camera";case"Chair":return"Chair";case"Cup":return"Coffee cup, Mug";default:return"Footwear"}}var u={focalX:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_focal_x"}},focalY:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_focal_y"}},principalX:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_principal_point_x"}},principalY:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_principal_point_y"}},allowedLabels:{type:2,graphOptionXref:{calculatorName:"ConstantSidePacketCalculatorAllowedLabels",calculatorType:"ConstantSidePacketCalculator",fieldName:"string_value"}}};function m(t){var c=this;t=t||{},this.g=new xt({locateFile:t.locateFile,files:[{url:"objectron_solution_packed_assets_loader.js"},{simd:!1,url:"objectron_solution_wasm_bin.js"},{simd:!0,url:"objectron_solution_simd_wasm_bin.js"}],graph:{url:"objectron.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:["lifted_objects","image_transformed"],outs:{image:"image_transformed",objectDetections:{type:"proto",stream:"lifted_objects",transform:d}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,default:!1,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumObjects:{type:1,default:5,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorMaxNumObjects",fieldName:"int_value"}},staticImageMode:{type:0,default:!0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"objectrongpusubgraph__ConstantSidePacketCalculator",fieldName:"bool_value"}},minDetectionConfidence:{type:1,default:.5,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"objectrongpusubgraph__objectdetectionoidv4subgraph__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,default:.99,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"objectrongpusubgraph__boxlandmarksubgraph__ThresholdingCalculator",fieldName:"threshold"}},modelName:{default:"Shoe",onChange:function(a){var b,S,L,F;return Zt(function(U){return U.g==1?(b=a,c.g.setOptions({allowedLabels:e(b)},u),S=g(b),L="object_detection_3d.tflite",O(U,v(c.g,S),2)):(F=U.h,c.g.overrideFile(L,F),U.return(!0))})}},focalLength:{default:[1,1],onChange:function(a){var b;return Zt(function(S){return b=a,c.h=b,c.g.setOptions({focalX:b[0],focalY:b[1]},u),S.return(!0)})}},principalPoint:{default:[0,0],onChange:function(a){var b;return Zt(function(S){return b=a,c.i=b,c.g.setOptions({principalX:b[0],principalY:b[1]},u),S.return(!0)})}},imageSize:{onChange:function(a){var b,S,L,F;return Zt(function(U){if(c.h===void 0||c.i===void 0)return console.error('"focalLength" and "principalPoint" must be set if setting image size'),U.return();b=a,S=[b[0]/2,b[1]/2],L=[c.h[0]/S[0],c.h[1]/S[1]],F=[c.i[0]/S[0],c.i[1]/S[1]],c.setOptions({focalLength:L,principalPoint:F}),U.g=0})}}}})}i=m.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(t){this.g.onResults(t)},i.initialize=function(){var t=this;return Zt(function(c){return O(c,t.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(t){var c=this;return Zt(function(a){return O(a,c.g.send(t),0)})},i.setOptions=function(t){this.g.setOptions(t)},Ct("Objectron",m),Ct("BOX_CONNECTIONS",[[1,2],[2,4],[4,3],[3,1],[5,6],[6,8],[8,7],[7,5],[1,5],[2,6],[3,7],[4,8]]),Ct("BOX_KEYPOINTS",{CENTER:0,BACK_BOTTOM_LEFT:1,FRONT_BOTTOM_LEFT:2,BACK_TOP_LEFT:3,FRONT_TOP_LEFT:4,BACK_BOTTOM_RIGHT:5,FRONT_BOTTOM_RIGHT:6,BACK_TOP_RIGHT:7,FRONT_TOP_RIGHT:8}),Ct("VERSION","0.4.1636596145")}).call(Ii);const xi={};(function(){var i;function n(s){var X=0;return function(){return X<s.length?{done:!1,value:s[X++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(s,X,R){return s==Array.prototype||s==Object.prototype||(s[X]=R.value),s};function f(s){s=[typeof globalThis=="object"&&globalThis,s,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var X=0;X<s.length;++X){var R=s[X];if(R&&R.Math==Math)return R}throw Error("Cannot find global object")}var Z=f(this);function x(s,X){if(X)t:{var R=Z;s=s.split(".");for(var w=0;w<s.length-1;w++){var k=s[w];if(!(k in R))break t;R=R[k]}s=s[s.length-1],w=R[s],X=X(w),X!=w&&X!=null&&r(R,s,{configurable:!0,writable:!0,value:X})}}x("Symbol",function(s){function X(A){if(this instanceof X)throw new TypeError("Symbol is not a constructor");return new R(w+(A||"")+"_"+k++,A)}function R(A,B){this.g=A,r(this,"description",{configurable:!0,writable:!0,value:B})}if(s)return s;R.prototype.toString=function(){return this.g};var w="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",k=0;return X}),x("Symbol.iterator",function(s){if(s)return s;s=Symbol("Symbol.iterator");for(var X="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),R=0;R<X.length;R++){var w=Z[X[R]];typeof w=="function"&&typeof w.prototype[s]!="function"&&r(w.prototype,s,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return s});function H(s){return s={next:s},s[Symbol.iterator]=function(){return this},s}function T(s){var X=typeof Symbol<"u"&&Symbol.iterator&&s[Symbol.iterator];return X?X.call(s):{next:n(s)}}function J(s){if(!(s instanceof Array)){s=T(s);for(var X,R=[];!(X=s.next()).done;)R.push(X.value);s=R}return s}var et=typeof Object.create=="function"?Object.create:function(s){function X(){}return X.prototype=s,new X},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(s,X){if(s.__proto__=X,s.__proto__!==X)throw new TypeError(s+" is not extensible");return s}:null}var at=lt;function dt(s,X){if(s.prototype=et(X.prototype),s.prototype.constructor=s,at)at(s,X);else for(var R in X)if(R!="prototype")if(Object.defineProperties){var w=Object.getOwnPropertyDescriptor(X,R);w&&Object.defineProperty(s,R,w)}else s[R]=X[R];s.ea=X.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Nt(s){if(s.l)throw new TypeError("Generator is already running");s.l=!0}Bt.prototype.o=function(s){this.h=s};function ee(s,X){s.j={U:X,V:!0},s.g=s.m||s.s}Bt.prototype.return=function(s){this.j={return:s},this.g=this.s};function O(s,X,R){return s.g=R,{value:X}}function $e(s){this.g=new Bt,this.h=s}function je(s,X){Nt(s.g);var R=s.g.i;return R?We(s,"return"in R?R.return:function(w){return{value:w,done:!0}},X,s.g.return):(s.g.return(X),zt(s))}function We(s,X,R,w){try{var k=X.call(s.g.i,R);if(!(k instanceof Object))throw new TypeError("Iterator result "+k+" is not an object");if(!k.done)return s.g.l=!1,k;var A=k.value}catch(B){return s.g.i=null,ee(s.g,B),zt(s)}return s.g.i=null,w.call(s.g,A),zt(s)}function zt(s){for(;s.g.g;)try{var X=s.h(s.g);if(X)return s.g.l=!1,{value:X.value,done:!1}}catch(R){s.g.h=void 0,ee(s.g,R)}if(s.g.l=!1,s.g.j){if(X=s.g.j,s.g.j=null,X.V)throw X.U;return{value:X.return,done:!0}}return{value:void 0,done:!0}}function Jn(s){this.next=function(X){return Nt(s.g),s.g.i?X=We(s,s.g.i.next,X,s.g.o):(s.g.o(X),X=zt(s)),X},this.throw=function(X){return Nt(s.g),s.g.i?X=We(s,s.g.i.throw,X,s.g.o):(ee(s.g,X),X=zt(s)),X},this.return=function(X){return je(s,X)},this[Symbol.iterator]=function(){return this}}function ne(s){function X(w){return s.next(w)}function R(w){return s.throw(w)}return new Promise(function(w,k){function A(B){B.done?w(B.value):Promise.resolve(B.value).then(X,R).then(A,k)}A(s.next())})}function Zt(s){return ne(new Jn(new $e(s)))}x("Promise",function(s){function X(B){this.h=0,this.i=void 0,this.g=[],this.o=!1;var nt=this.j();try{B(nt.resolve,nt.reject)}catch($){nt.reject($)}}function R(){this.g=null}function w(B){return B instanceof X?B:new X(function(nt){nt(B)})}if(s)return s;R.prototype.h=function(B){if(this.g==null){this.g=[];var nt=this;this.i(function(){nt.l()})}this.g.push(B)};var k=Z.setTimeout;R.prototype.i=function(B){k(B,0)},R.prototype.l=function(){for(;this.g&&this.g.length;){var B=this.g;this.g=[];for(var nt=0;nt<B.length;++nt){var $=B[nt];B[nt]=null;try{$()}catch(yt){this.j(yt)}}}this.g=null},R.prototype.j=function(B){this.i(function(){throw B})},X.prototype.j=function(){function B(yt){return function(Xt){$||($=!0,yt.call(nt,Xt))}}var nt=this,$=!1;return{resolve:B(this.C),reject:B(this.l)}},X.prototype.C=function(B){if(B===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(B instanceof X)this.F(B);else{t:switch(typeof B){case"object":var nt=B!=null;break t;case"function":nt=!0;break t;default:nt=!1}nt?this.v(B):this.m(B)}},X.prototype.v=function(B){var nt=void 0;try{nt=B.then}catch($){this.l($);return}typeof nt=="function"?this.G(nt,B):this.m(B)},X.prototype.l=function(B){this.s(2,B)},X.prototype.m=function(B){this.s(1,B)},X.prototype.s=function(B,nt){if(this.h!=0)throw Error("Cannot settle("+B+", "+nt+"): Promise already settled in state"+this.h);this.h=B,this.i=nt,this.h===2&&this.D(),this.A()},X.prototype.D=function(){var B=this;k(function(){if(B.B()){var nt=Z.console;typeof nt<"u"&&nt.error(B.i)}},1)},X.prototype.B=function(){if(this.o)return!1;var B=Z.CustomEvent,nt=Z.Event,$=Z.dispatchEvent;return typeof $>"u"?!0:(typeof B=="function"?B=new B("unhandledrejection",{cancelable:!0}):typeof nt=="function"?B=new nt("unhandledrejection",{cancelable:!0}):(B=Z.document.createEvent("CustomEvent"),B.initCustomEvent("unhandledrejection",!1,!0,B)),B.promise=this,B.reason=this.i,$(B))},X.prototype.A=function(){if(this.g!=null){for(var B=0;B<this.g.length;++B)A.h(this.g[B]);this.g=null}};var A=new R;return X.prototype.F=function(B){var nt=this.j();B.J(nt.resolve,nt.reject)},X.prototype.G=function(B,nt){var $=this.j();try{B.call(nt,$.resolve,$.reject)}catch(yt){$.reject(yt)}},X.prototype.then=function(B,nt){function $(It,ht){return typeof It=="function"?function(Wt){try{yt(It(Wt))}catch(xt){Xt(xt)}}:ht}var yt,Xt,Kt=new X(function(It,ht){yt=It,Xt=ht});return this.J($(B,yt),$(nt,Xt)),Kt},X.prototype.catch=function(B){return this.then(void 0,B)},X.prototype.J=function(B,nt){function $(){switch(yt.h){case 1:B(yt.i);break;case 2:nt(yt.i);break;default:throw Error("Unexpected state: "+yt.h)}}var yt=this;this.g==null?A.h($):this.g.push($),this.o=!0},X.resolve=w,X.reject=function(B){return new X(function(nt,$){$(B)})},X.race=function(B){return new X(function(nt,$){for(var yt=T(B),Xt=yt.next();!Xt.done;Xt=yt.next())w(Xt.value).J(nt,$)})},X.all=function(B){var nt=T(B),$=nt.next();return $.done?w([]):new X(function(yt,Xt){function Kt(Wt){return function(xt){It[Wt]=xt,ht--,ht==0&&yt(It)}}var It=[],ht=0;do It.push(void 0),ht++,w($.value).J(Kt(It.length-1),Xt),$=nt.next();while(!$.done)})},X});function qe(s,X){s instanceof String&&(s+="");var R=0,w=!1,k={next:function(){if(!w&&R<s.length){var A=R++;return{value:X(A,s[A]),done:!1}}return w=!0,{done:!0,value:void 0}}};return k[Symbol.iterator]=function(){return k},k}var zn=typeof Object.assign=="function"?Object.assign:function(s,X){for(var R=1;R<arguments.length;R++){var w=arguments[R];if(w)for(var k in w)Object.prototype.hasOwnProperty.call(w,k)&&(s[k]=w[k])}return s};x("Object.assign",function(s){return s||zn}),x("Object.is",function(s){return s||function(X,R){return X===R?X!==0||1/X===1/R:X!==X&&R!==R}}),x("Array.prototype.includes",function(s){return s||function(X,R){var w=this;w instanceof String&&(w=String(w));var k=w.length;for(R=R||0,0>R&&(R=Math.max(R+k,0));R<k;R++){var A=w[R];if(A===X||Object.is(A,X))return!0}return!1}}),x("String.prototype.includes",function(s){return s||function(X,R){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(X instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(X,R||0)!==-1}}),x("Array.prototype.keys",function(s){return s||function(){return qe(this,function(X){return X})}});var Re=this||self;function Ct(s,X){s=s.split(".");var R=Re;s[0]in R||typeof R.execScript>"u"||R.execScript("var "+s[0]);for(var w;s.length&&(w=s.shift());)s.length||X===void 0?R[w]&&R[w]!==Object.prototype[w]?R=R[w]:R=R[w]={}:R[w]=X}function Te(s){Re.setTimeout(function(){throw s},0)}function ln(s){Te(s)}function Xn(s,X){ln(Error("Invalid wire type: "+s+" (at position "+X+")"))}function Hn(){ln(Error("Failed to read varint, encoding is invalid."))}function In(s,X){return X=String.fromCharCode.apply(null,X),s==null?X:s+X}var kn,hn=typeof TextDecoder<"u",bn,En=typeof TextEncoder<"u";function Fn(s){if(En)s=(bn||(bn=new TextEncoder)).encode(s);else{var X=void 0;X=X===void 0?!1:X;for(var R=0,w=new Uint8Array(3*s.length),k=0;k<s.length;k++){var A=s.charCodeAt(k);if(128>A)w[R++]=A;else{if(2048>A)w[R++]=A>>6|192;else{if(55296<=A&&57343>=A){if(56319>=A&&k<s.length){var B=s.charCodeAt(++k);if(56320<=B&&57343>=B){A=1024*(A-55296)+B-56320+65536,w[R++]=A>>18|240,w[R++]=A>>12&63|128,w[R++]=A>>6&63|128,w[R++]=A&63|128;continue}else k--}if(X)throw Error("Found an unpaired surrogate");A=65533}w[R++]=A>>12|224,w[R++]=A>>6&63|128}w[R++]=A&63|128}}s=w.subarray(0,R)}return s}var Pe={},Ae=null;function xn(s){var X;X===void 0&&(X=0),Se(),X=Pe[X];for(var R=Array(Math.floor(s.length/3)),w=X[64]||"",k=0,A=0;k<s.length-2;k+=3){var B=s[k],nt=s[k+1],$=s[k+2],yt=X[B>>2];B=X[(B&3)<<4|nt>>4],nt=X[(nt&15)<<2|$>>6],$=X[$&63],R[A++]=yt+B+nt+$}switch(yt=0,$=w,s.length-k){case 2:yt=s[k+1],$=X[(yt&15)<<2]||w;case 1:s=s[k],R[A]=X[s>>2]+X[(s&3)<<4|yt>>4]+$+w}return R.join("")}function Wn(s){var X=s.length,R=3*X/4;R%3?R=Math.floor(R):"=.".indexOf(s[X-1])!=-1&&(R="=.".indexOf(s[X-2])!=-1?R-2:R-1);var w=new Uint8Array(R),k=0;return he(s,function(A){w[k++]=A}),w.subarray(0,k)}function he(s,X){function R($){for(;w<s.length;){var yt=s.charAt(w++),Xt=Ae[yt];if(Xt!=null)return Xt;if(!/^[\s\xa0]*$/.test(yt))throw Error("Unknown base64 encoding at char: "+yt)}return $}Se();for(var w=0;;){var k=R(-1),A=R(0),B=R(64),nt=R(64);if(nt===64&&k===-1)break;X(k<<2|A>>4),B!=64&&(X(A<<4&240|B>>2),nt!=64&&X(B<<6&192|nt))}}function Se(){if(!Ae){Ae={};for(var s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),X=["+/=","+/","-_=","-_.","-_"],R=0;5>R;R++){var w=s.concat(X[R].split(""));Pe[R]=w;for(var k=0;k<w.length;k++){var A=w[k];Ae[A]===void 0&&(Ae[A]=k)}}}}var Oe=typeof Uint8Array=="function",re;function Ve(s){if(this.g=s,s!==null&&s.length===0)throw Error("ByteString should be constructed with non-empty values")}Ve.prototype.toJSON=function(){if(this.g==null)var s="";else s=this.g,s=this.g=s==null||typeof s=="string"?s:Oe&&s instanceof Uint8Array?xn(s):null;return s};var cn=typeof Uint8Array.prototype.slice=="function";function Be(s,X,R){return X===R?re||(re=new Uint8Array(0)):cn?s.slice(X,R):new Uint8Array(s.subarray(X,R))}var Qt=0,Ze=0;function Fe(s){if(s.constructor===Uint8Array)return s;if(s.constructor===ArrayBuffer)return new Uint8Array(s);if(s.constructor===Array)return new Uint8Array(s);if(s.constructor===String)return Wn(s);if(s.constructor===Ve){if(s.g==null)var X=re||(re=new Uint8Array(0));else{X=Uint8Array;var R=s.g;R=R==null||Oe&&R!=null&&R instanceof Uint8Array?R:typeof R=="string"?Wn(R):null,s=s.g=R,X=new X(s)}return X}if(s instanceof Uint8Array)return new Uint8Array(s.buffer,s.byteOffset,s.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Mt(s,X){X=X===void 0?{}:X,X=X.u===void 0?!1:X.u,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.u=X,s&&Ie(this,s)}function Ie(s,X){s.h=Fe(X),s.l=0,s.i=s.h.length,s.g=s.l}Mt.prototype.reset=function(){this.g=this.l};function jt(s){s.g>s.i&&(s.j=!0,ln(Error("Tried to read past the end of the data "+s.g+" > "+s.i)))}function ye(s){var X=s.h,R=X[s.g],w=R&127;return 128>R?(s.g+=1,jt(s),w):(R=X[s.g+1],w|=(R&127)<<7,128>R?(s.g+=2,jt(s),w):(R=X[s.g+2],w|=(R&127)<<14,128>R?(s.g+=3,jt(s),w):(R=X[s.g+3],w|=(R&127)<<21,128>R?(s.g+=4,jt(s),w):(R=X[s.g+4],w|=(R&15)<<28,128>R?(s.g+=5,jt(s),w>>>0):(s.g+=5,128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]?(s.j=!0,Hn(),w):(jt(s),w))))))}var Ye=[];function tn(){this.g=new Uint8Array(64),this.h=0}function Xe(s,X){if(!(s.h+1<s.g.length)){var R=s.g;s.g=new Uint8Array(Math.ceil(1+2*s.g.length)),s.g.set(R)}s.g[s.h++]=X}tn.prototype.length=function(){return this.h},tn.prototype.end=function(){var s=this.g,X=this.h;return this.h=0,Be(s,0,X)};function Pt(s,X){for(;127<X;)Xe(s,X&127|128),X>>>=7;Xe(s,X)}function ze(s){var X={},R=X.N===void 0?!1:X.N;this.m={u:X.u===void 0?!1:X.u},this.N=R,X=this.m,Ye.length?(R=Ye.pop(),X&&(R.u=X.u),s&&Ie(R,s),s=R):s=new Mt(s,X),this.g=s,this.l=this.g.g,this.h=this.i=-1,this.j=!1}ze.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function _e(s){var X=s.g;if((X=X.g==X.i)||(X=s.j)||(X=s.g,X=X.j||0>X.g||X.g>X.i),X)return!1;s.l=s.g.g;var R=ye(s.g);return X=R>>>3,R&=7,0<=R&&5>=R?(s.i=X,s.h=R,!0):(s.j=!0,Xn(R,s.l),!1)}function xe(s){switch(s.h){case 0:if(s.h!=0)xe(s);else t:{s=s.g;for(var X=s.g,R=0;10>R;R++){if((s.h[X]&128)===0){s.g=X+1,jt(s);break t}X++}s.j=!0,Hn()}break;case 1:s=s.g,s.g+=8,jt(s);break;case 2:s.h!=2?xe(s):(X=ye(s.g),s=s.g,s.g+=X,jt(s));break;case 5:s=s.g,s.g+=4,jt(s);break;case 3:X=s.i;do{if(!_e(s)){s.j=!0,ln(Error("Unmatched start-group tag: stream EOF"));break}if(s.h==4){s.i!=X&&(s.j=!0,ln(Error("Unmatched end-group tag")));break}xe(s)}while(1);break;default:s.j=!0,Xn(s.h,s.l)}}function Vn(s,X,R){s.N||(s=Be(s.g.h,R,s.g.g),(R=X.m)?R.push(s):X.m=[s])}var un=[];function Qe(){this.h=[],this.i=0,this.g=new tn}function an(s,X){X.length!==0&&(s.h.push(X),s.i+=X.length)}function ve(s,X,R){Pt(s.g,8*X+2),Pt(s.g,R.length),an(s,s.g.end()),an(s,R)}var we=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Ge(s,X){Object.isFrozen(s)||(we?s[we]|=X:s.g!==void 0?s.g|=X:Object.defineProperties(s,{g:{value:X,configurable:!0,writable:!0,enumerable:!1}}))}function ie(s){if(!s)return 0;var X;return we?X=s[we]:X=s.g,X==null?0:X}function De(s){return Array.isArray(s)&&Ge(s,1),s}function qt(s){if(!Array.isArray(s))throw Error("cannot mark non-array as immutable");Ge(s,2)}function Ot(s){return s!==null&&typeof s=="object"&&s.constructor===Object}function fn(s){switch(typeof s){case"number":return isFinite(s)?s:String(s);case"object":return Oe&&s!=null&&s instanceof Uint8Array?xn(s):s;default:return s}}function fe(s,X){if(s!=null)return Array.isArray(s)||Ot(s)?Ft(s,X):X(s)}function Ft(s,X){if(Array.isArray(s)){for(var R=Array(s.length),w=0;w<s.length;w++)R[w]=fe(s[w],X);return ie(s)&1&&De(R),R}R={};for(w in s)R[w]=fe(s[w],X);return R}var Vt;function oe(s,X,R){var w=Vt;Vt=null,s||(s=w),w=this.constructor.ca,s||(s=w?[w]:[]),this.j=(w?0:-1)-(this.constructor.aa||0),this.i=null,this.g=s;t:{if(w=this.g.length,s=w-1,w&&(w=this.g[s],Ot(w))){this.l=s-this.j,this.h=w;break t}X!==void 0&&-1<X?(this.l=Math.max(X,s+1-this.j),this.h=null):this.l=Number.MAX_VALUE}if(R)for(X=0;X<R.length;X++)s=R[X],s<this.l?(s+=this.j,(w=this.g[s])?De(w):this.g[s]=Le):(te(this),(w=this.h[s])?De(w):this.h[s]=Le)}var Le=Object.freeze(De([]));function te(s){var X=s.l+s.j;s.g[X]||(s.h=s.g[X]={})}function se(s,X,R){return X===-1?null:(R===void 0?0:R)||X>=s.l?s.h?s.h[X]:void 0:s.g[X+s.j]}function tt(s,X,R){R=R===void 0?!0:R;var w=w===void 0?!1:w,k=se(s,X,w);return k==null&&(k=Le),k===Le?(k=De([]),ut(s,X,k,w)):R&&Array.isArray(k)&&ie(k)&2&&(k=k.slice(),ut(s,X,k,w)),k}function it(s,X,R){return s=se(s,X),s=s==null?s:+s,s==null?R===void 0?0:R:s}function ut(s,X,R,w){(w===void 0?0:w)||X>=s.l?(te(s),s.h[X]=R):s.g[X+s.j]=R}function _t(s,X,R){s.i||(s.i={});var w=s.i[R];if(!w){var k=tt(s,R,!1);w=[];for(var A=Array.isArray(k)?!!(ie(k)&2):!1,B=0;B<k.length;B++)w[B]=new X(k[B]),A&&qt(w[B].g);A&&(qt(w),Object.freeze(w)),s.i[R]=w}return w}function de(s,X,R,w,k){var A=_t(s,w,X);R=R||new w,s=tt(s,X),k!=null?(A.splice(k,0,R),s.splice(k,0,ue(R))):(A.push(R),s.push(ue(R)))}oe.prototype.toJSON=function(){var s=ue(this);return Ft(s,fn)};function ue(s){if(s.i)for(var X in s.i){var R=s.i[X];if(Array.isArray(R))for(var w=0;w<R.length;w++)R[w]&&ue(R[w]);else R&&ue(R)}return s.g}oe.prototype.toString=function(){return ue(this).toString()};function St(s,X){return s=se(s,X),s==null?0:s}function me(s,X){return s=se(s,X),s==null?"":s}function Ce(s,X){if(s=s.m){an(X,X.g.end());for(var R=0;R<s.length;R++)an(X,s[R])}}function en(s){var X=s[0];switch(s.length){case 2:var R=s[1];return function($,yt,Xt){return X($,yt,Xt,R)};case 3:var w=s[1],k=s[2];return function($,yt,Xt){return X($,yt,Xt,w,k)};case 4:var A=s[1],B=s[2],nt=s[3];return function($,yt,Xt){return X($,yt,Xt,A,B,nt)};default:throw Error("unsupported number of parameters, expected [2-4], got "+s.length)}}function nn(s,X,R){for(;_e(X)&&X.h!=4;){var w=X.i,k=R[w];if(k){if(Array.isArray(k)&&(k=R[w]=en(k)),!k(X,s,w)){w=X,k=s;var A=w.l;xe(w),Vn(w,k,A)}}else w=X,k=s,A=w.l,xe(w),Vn(w,k,A)}return s}function mn(s,X){var R=new Qe;if(X(s,R),s=R.i+R.g.length(),s===0)R=new Uint8Array(0);else{s=new Uint8Array(s);for(var w=R.h,k=w.length,A=X=0;A<k;A++){var B=w[A];B.length!==0&&(s.set(B,X),X+=B.length)}w=R.g,k=w.h,k!==0&&(s.set(w.g.subarray(0,k),X),w.h=0),R.h=[s],R=s}return R}function yn(s,X,R){if(un.length){var w=un.pop();s&&(Ie(w.g,s),w.i=-1,w.h=-1),s=w}else s=new ze(s);try{return R(new X,s)}finally{X=s.g,X.h=null,X.l=0,X.i=0,X.g=0,X.j=!1,X.u=!1,s.i=-1,s.h=-1,s.j=!1,100>un.length&&un.push(s)}}function He(s,X,R){if(X=se(X,R),X!=null){Pt(s.g,8*R+5),s=s.g;var w=X;w=(R=0>w?1:0)?-w:w,w===0?0<1/w?Qt=Ze=0:(Ze=0,Qt=2147483648):isNaN(w)?(Ze=0,Qt=2147483647):34028234663852886e22<w?(Ze=0,Qt=(R<<31|2139095040)>>>0):11754943508222875e-54>w?(w=Math.round(w/Math.pow(2,-149)),Ze=0,Qt=(R<<31|w)>>>0):(X=Math.floor(Math.log(w)/Math.LN2),w*=Math.pow(2,-X),w=Math.round(8388608*w),16777216<=w&&++X,Ze=0,Qt=(R<<31|X+127<<23|w&8388607)>>>0),R=Qt,Xe(s,R>>>0&255),Xe(s,R>>>8&255),Xe(s,R>>>16&255),Xe(s,R>>>24&255)}}function rn(s,X,R){if(s.h!==5)return!1;s=s.g;var w=s.h[s.g],k=s.h[s.g+1],A=s.h[s.g+2],B=s.h[s.g+3];return s.g+=4,jt(s),k=(w<<0|k<<8|A<<16|B<<24)>>>0,s=2*(k>>31)+1,w=k>>>23&255,k&=8388607,ut(X,R,w==255?k?NaN:1/0*s:w==0?s*Math.pow(2,-149)*k:s*Math.pow(2,w-150)*(k+Math.pow(2,23))),!0}function jn(s,X,R){if(s.h!==0)return!1;for(var w=s.g,k=128,A=0,B=s=0;4>B&&128<=k;B++)k=w.h[w.g++],A|=(k&127)<<7*B;if(128<=k&&(k=w.h[w.g++],A|=(k&127)<<28,s|=(k&127)>>4),128<=k)for(B=0;5>B&&128<=k;B++)k=w.h[w.g++],s|=(k&127)<<7*B+3;return 128>k?(w=A>>>0,k=s>>>0,(s=k&2147483648)&&(w=~w+1>>>0,k=~k>>>0,w==0&&(k=k+1>>>0)),w=4294967296*k+(w>>>0),s=s?-w:w):(w.j=!0,Hn(),s=void 0),ut(X,R,s),!0}function on(s,X,R){return s.h!==0?!1:(ut(X,R,ye(s.g)),!0)}function Je(s,X,R){if(s.h!==2)return!1;var w=ye(s.g);s=s.g;var k=s.g;s.g+=w,jt(s),s=s.h;var A;if(hn)(A=kn)||(A=kn=new TextDecoder("utf-8",{fatal:!1})),A=A.decode(s.subarray(k,k+w));else{w=k+w;for(var B=[],nt=null,$,yt,Xt;k<w;)$=s[k++],128>$?B.push($):224>$?k>=w?B.push(65533):(yt=s[k++],194>$||(yt&192)!==128?(k--,B.push(65533)):B.push(($&31)<<6|yt&63)):240>$?k>=w-1?B.push(65533):(yt=s[k++],(yt&192)!==128||$===224&&160>yt||$===237&&160<=yt||((A=s[k++])&192)!==128?(k--,B.push(65533)):B.push(($&15)<<12|(yt&63)<<6|A&63)):244>=$?k>=w-2?B.push(65533):(yt=s[k++],(yt&192)!==128||($<<28)+(yt-144)>>30!==0||((A=s[k++])&192)!==128||((Xt=s[k++])&192)!==128?(k--,B.push(65533)):($=($&7)<<18|(yt&63)<<12|(A&63)<<6|Xt&63,$-=65536,B.push(($>>10&1023)+55296,($&1023)+56320))):B.push(65533),8192<=B.length&&(nt=In(nt,B),B.length=0);A=In(nt,B)}return ut(X,R,A),!0}function Zn(s,X,R,w,k){if(s.h!==2)return!1;var A=new w,B=s.g.i,nt=ye(s.g),$=s.g.g+nt;if(s.g.i=$,k(A,s),k=$-s.g.g,k!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(nt+" bytes, instead read "+(nt-k)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return s.g.g=$,s.g.i=B,de(X,R,A,w,void 0),!0}function Sn(s){oe.call(this,s)}var Ke;dt(Sn,oe);function Un(s,X){var R=se(s,1);if(R!=null&&R!=null){Pt(X.g,8);var w=X.g;if(0<=R)Pt(w,R);else{for(var k=0;9>k;k++)Xe(w,R&127|128),R>>=7;Xe(w,1)}}He(X,s,2),w=se(s,3),w!=null&&ve(X,3,Fn(w)),w=se(s,4),w!=null&&ve(X,4,Fn(w)),Ce(s,X)}function sn(s,X){return nn(s,X,Ke||(Ke={1:on,2:rn,3:Je,4:Je}))}function vn(s){oe.call(this,s,-1,dn)}var Tn;dt(vn,oe),vn.prototype.addClassification=function(s,X){return de(this,1,s,Sn,X),this};function Mn(s,X){return nn(s,X,Tn||(Tn={1:[Zn,Sn,sn]}))}var dn=[1];function Yn(s){oe.call(this,s)}var _n;dt(Yn,oe);function Qn(s,X){He(X,s,1),He(X,s,2),He(X,s,3),He(X,s,4),He(X,s,5),Ce(s,X)}function wn(s,X){return nn(s,X,_n||(_n={1:rn,2:rn,3:rn,4:rn,5:rn}))}function Cn(s){oe.call(this,s,-1,V)}var p;dt(Cn,oe);function W(s,X){return nn(s,X,p||(p={1:[Zn,Yn,wn]}))}var V=[1];function E(s){oe.call(this,s)}var P;dt(E,oe);function ot(s,X){He(X,s,1),He(X,s,2),He(X,s,3),He(X,s,4),He(X,s,5);var R=se(s,6);if(R!=null&&R!=null){Pt(X.g,48);var w=X.g,k=R;R=0>k,k=Math.abs(k);var A=k>>>0;for(k=Math.floor((k-A)/4294967296),k>>>=0,R&&(k=~k>>>0,A=(~A>>>0)+1,4294967295<A&&(A=0,k++,4294967295<k&&(k=0))),Qt=A,Ze=k,R=Qt,A=Ze;0<A||127<R;)Xe(w,R&127|128),R=(R>>>7|A<<25)>>>0,A>>>=7;Xe(w,R)}Ce(s,X)}function j(s,X){return nn(s,X,P||(P={1:rn,2:rn,3:rn,4:rn,5:rn,6:jn}))}function rt(s,X,R){if(R=s.createShader(R===0?s.VERTEX_SHADER:s.FRAGMENT_SHADER),s.shaderSource(R,X),s.compileShader(R),!s.getShaderParameter(R,s.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
105
105
|
|
|
106
|
-
`+s.getShaderInfoLog(R));return R}function bt(s){return _t(s,Sn,1).map(function(X){return{index:St(X,1),X:it(X,2),label:se(X,3)!=null?me(X,3):void 0,displayName:se(X,4)!=null?me(X,4):void 0}})}function Rt(s){return{x:it(s,1),y:it(s,2),z:it(s,3),visibility:se(s,4)!=null?it(s,4):void 0}}function Ut(s){return _t(yn(s,Cn,
|
|
106
|
+
`+s.getShaderInfoLog(R));return R}function bt(s){return _t(s,Sn,1).map(function(X){return{index:St(X,1),X:it(X,2),label:se(X,3)!=null?me(X,3):void 0,displayName:se(X,4)!=null?me(X,4):void 0}})}function Rt(s){return{x:it(s,1),y:it(s,2),z:it(s,3),visibility:se(s,4)!=null?it(s,4):void 0}}function Ut(s){return _t(yn(s,Cn,W),Yn,1).map(Rt)}function Jt(s,X){this.h=s,this.g=X,this.l=0}function $t(s,X,R){return kt(s,X),typeof s.g.canvas.transferToImageBitmap=="function"?Promise.resolve(s.g.canvas.transferToImageBitmap()):R?Promise.resolve(s.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(s.g.canvas):(s.i===void 0&&(s.i=document.createElement("canvas")),new Promise(function(w){s.i.height=s.g.canvas.height,s.i.width=s.g.canvas.width,s.i.getContext("2d",{}).drawImage(s.g.canvas,0,0,s.g.canvas.width,s.g.canvas.height),w(s.i)}))}function kt(s,X){var R=s.g;if(s.m===void 0){var w=rt(R,`
|
|
107
107
|
attribute vec2 aVertex;
|
|
108
108
|
attribute vec2 aTex;
|
|
109
109
|
varying vec2 vTex;
|
|
@@ -116,23 +116,23 @@
|
|
|
116
116
|
uniform sampler2D sampler0;
|
|
117
117
|
void main(){
|
|
118
118
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
119
|
-
}`,1),A=R.createProgram();if(R.attachShader(A,
|
|
119
|
+
}`,1),A=R.createProgram();if(R.attachShader(A,w),R.attachShader(A,k),R.linkProgram(A),!R.getProgramParameter(A,R.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
120
120
|
|
|
121
|
-
`+R.getProgramInfoLog(A));Y=s.m=A,R.useProgram(Y),k=R.getUniformLocation(Y,"sampler0"),s.j={I:R.getAttribLocation(Y,"aVertex"),H:R.getAttribLocation(Y,"aTex"),da:k},s.s=R.createBuffer(),R.bindBuffer(R.ARRAY_BUFFER,s.s),R.enableVertexAttribArray(s.j.I),R.vertexAttribPointer(s.j.I,2,R.FLOAT,!1,0,0),R.bufferData(R.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),R.STATIC_DRAW),R.bindBuffer(R.ARRAY_BUFFER,null),s.o=R.createBuffer(),R.bindBuffer(R.ARRAY_BUFFER,s.o),R.enableVertexAttribArray(s.j.H),R.vertexAttribPointer(s.j.H,2,R.FLOAT,!1,0,0),R.bufferData(R.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),R.STATIC_DRAW),R.bindBuffer(R.ARRAY_BUFFER,null),R.uniform1i(k,0)}Y=s.j,R.useProgram(s.m),R.canvas.width=X.width,R.canvas.height=X.height,R.viewport(0,0,X.width,X.height),R.activeTexture(R.TEXTURE0),s.h.bindTexture2d(X.glName),R.enableVertexAttribArray(Y.I),R.bindBuffer(R.ARRAY_BUFFER,s.s),R.vertexAttribPointer(Y.I,2,R.FLOAT,!1,0,0),R.enableVertexAttribArray(Y.H),R.bindBuffer(R.ARRAY_BUFFER,s.o),R.vertexAttribPointer(Y.H,2,R.FLOAT,!1,0,0),R.bindFramebuffer(R.DRAW_FRAMEBUFFER?R.DRAW_FRAMEBUFFER:R.FRAMEBUFFER,null),R.clearColor(0,0,0,0),R.clear(R.COLOR_BUFFER_BIT),R.colorMask(!0,!0,!0,!0),R.drawArrays(R.TRIANGLE_FAN,0,4),R.disableVertexAttribArray(Y.I),R.disableVertexAttribArray(Y.H),R.bindBuffer(R.ARRAY_BUFFER,null),s.h.bindTexture2d(0)}function Tt(s){this.g=s}var Et=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Dt(s,X){return X+s}function ae(s,X){window[s]=X}function pe(s){var X=document.createElement("script");return X.setAttribute("src",s),X.setAttribute("crossorigin","anonymous"),new Promise(function(R){X.addEventListener("load",function(){R()},!1),X.addEventListener("error",function(){R()},!1),document.body.appendChild(X)})}function ge(){return gt(function(s){switch(s.g){case 1:return s.m=2,P(s,WebAssembly.instantiate(Et),4);case 4:s.g=3,s.m=0;break;case 2:return s.m=0,s.j=null,s.return(!1);case 3:return s.return(!0)}})}function ke(s){if(this.g=s,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=s&&s.locateFile||Dt,typeof window=="object")var X=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")X=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=X,s.options){X=T(Object.keys(s.options));for(var R=X.next();!R.done;R=X.next()){R=R.value;var Y=s.options[R].default;Y!==void 0&&(this.j[R]=typeof Y=="function"?Y():Y)}}}i=ke.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function h(s){var X,R,Y,k,A,K,nt,$,yt,Xt,Bt;return gt(function(It){switch(It.g){case 1:return s.R?(X=s.g.files===void 0?[]:typeof s.g.files=="function"?s.g.files(s.j):s.g.files,P(It,ge(),2)):It.return();case 2:if(R=It.h,typeof window=="object")return ae("createMediapipeSolutionsWasm",{locateFile:s.locateFile}),ae("createMediapipeSolutionsPackedAssets",{locateFile:s.locateFile}),K=X.filter(function(ht){return ht.data!==void 0}),nt=X.filter(function(ht){return ht.data===void 0}),$=Promise.all(K.map(function(ht){var Vt=C(s,ht.url);if(ht.path!==void 0){var xt=ht.path;Vt=Vt.then(function(Yt){return s.overrideFile(xt,Yt),Promise.resolve(Yt)})}return Vt})),yt=Promise.all(nt.map(function(ht){return ht.simd===void 0||ht.simd&&R||!ht.simd&&!R?pe(s.locateFile(ht.url,s.S)):Promise.resolve()})).then(function(){var ht,Vt,xt;return gt(function(Yt){if(Yt.g==1)return ht=window.createMediapipeSolutionsWasm,Vt=window.createMediapipeSolutionsPackedAssets,xt=s,P(Yt,ht(Vt),2);xt.h=Yt.h,Yt.g=0})}),Xt=function(){return gt(function(ht){return s.g.graph&&s.g.graph.url?ht=P(ht,C(s,s.g.graph.url),0):(ht.g=0,ht=void 0),ht})}(),P(It,Promise.all([yt,$,Xt]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return Y=X.filter(function(ht){return ht.simd===void 0||ht.simd&&R||!ht.simd&&!R}).map(function(ht){return s.locateFile(ht.url,s.S)}),importScripts.apply(null,J(Y)),k=s,P(It,createMediapipeSolutionsWasm(Module),6);case 6:k.h=It.h,s.l=new OffscreenCanvas(1,1),s.h.canvas=s.l,A=s.h.GL.createContext(s.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),s.h.GL.makeContextCurrent(A),It.g=4;break;case 7:if(s.l=document.createElement("canvas"),Bt=s.l.getContext("webgl2",{}),!Bt&&(Bt=s.l.getContext("webgl",{}),!Bt))return alert("Failed to create WebGL canvas context when passing video frame."),It.return();s.D=Bt,s.h.canvas=s.l,s.h.createContext(s.l,!0,!0,{});case 4:s.i=new s.h.SolutionWasm,s.R=!1,It.g=0}})}function y(s){var X,R,Y,k,A,K,nt,$;return gt(function(yt){if(yt.g==1){if(s.g.graph&&s.g.graph.url&&s.P===s.g.graph.url)return yt.return();if(s.o=!0,!s.g.graph||!s.g.graph.url){yt.g=2;return}return s.P=s.g.graph.url,P(yt,C(s,s.g.graph.url),3)}for(yt.g!=2&&(X=yt.h,s.i.loadGraph(X)),R=T(Object.keys(s.B)),Y=R.next();!Y.done;Y=R.next())k=Y.value,s.i.overrideFile(k,s.B[k]);if(s.B={},s.g.listeners)for(A=T(s.g.listeners),K=A.next();!K.done;K=A.next())nt=K.value,M(s,nt);$=s.j,s.j={},s.setOptions($),yt.g=0})}i.reset=function(){var s=this;return gt(function(X){s.i&&(s.i.reset(),s.m={},s.s={}),X.g=0})},i.setOptions=function(s,X){var R=this;if(X=X||this.g.options){for(var Y=[],k=[],A={},K=T(Object.keys(s)),nt=K.next();!nt.done;A={K:A.K,L:A.L},nt=K.next()){var $=nt.value;$ in this.j&&this.j[$]===s[$]||(this.j[$]=s[$],nt=X[$],nt!==void 0&&(nt.onChange&&(A.K=nt.onChange,A.L=s[$],Y.push(function(yt){return function(){var Xt;return gt(function(Bt){if(Bt.g==1)return P(Bt,yt.K(yt.L),2);Xt=Bt.h,Xt===!0&&(R.o=!0),Bt.g=0})}}(A))),nt.graphOptionXref&&($={valueNumber:nt.type===1?s[$]:0,valueBoolean:nt.type===0?s[$]:!1,valueString:nt.type===2?s[$]:""},nt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),nt.graphOptionXref),$),k.push(nt))))}(Y.length!==0||k.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(k),this.v=(this.v===void 0?[]:this.v).concat(Y))}};function G(s){var X,R,Y,k,A,K,nt;return gt(function($){switch($.g){case 1:if(!s.o)return $.return();if(!s.v){$.g=2;break}X=T(s.v),R=X.next();case 3:if(R.done){$.g=5;break}return Y=R.value,P($,Y(),4);case 4:R=X.next(),$.g=3;break;case 5:s.v=void 0;case 2:if(s.A){for(k=new s.h.GraphOptionChangeRequestList,A=T(s.A),K=A.next();!K.done;K=A.next())nt=K.value,k.push_back(nt);s.i.changeOptions(k),k.delete(),s.A=void 0}s.o=!1,$.g=0}})}i.initialize=function(){var s=this;return gt(function(X){return X.g==1?P(X,h(s),2):X.g!=3?P(X,y(s),3):P(X,G(s),0)})};function C(s,X){var R,Y;return gt(function(k){return X in s.F?k.return(s.F[X]):(R=s.locateFile(X,""),Y=fetch(R).then(function(A){return A.arrayBuffer()}),s.F[X]=Y,k.return(Y))})}i.overrideFile=function(s,X){this.i?this.i.overrideFile(s,X):this.B[s]=X},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(s,X){var R=this,Y,k,A,K,nt,$,yt,Xt,Bt;return gt(function(It){switch(It.g){case 1:return R.g.inputs?(Y=1e3*(X==null?performance.now():X),P(It,R.C,2)):It.return();case 2:return P(It,R.initialize(),3);case 3:for(k=new R.h.PacketDataList,A=T(Object.keys(s)),K=A.next();!K.done;K=A.next())if(nt=K.value,$=R.g.inputs[nt]){t:{var ht=s[nt];switch($.type){case"video":var Vt=R.m[$.stream];if(Vt||(Vt=new Jt(R.h,R.D),R.m[$.stream]=Vt),Vt.l===0&&(Vt.l=Vt.h.createTexture()),typeof HTMLVideoElement<"u"&&ht instanceof HTMLVideoElement)var xt=ht.videoWidth,Yt=ht.videoHeight;else typeof HTMLImageElement<"u"&&ht instanceof HTMLImageElement?(xt=ht.naturalWidth,Yt=ht.naturalHeight):(xt=ht.width,Yt=ht.height);Yt={glName:Vt.l,width:xt,height:Yt},xt=Vt.g,xt.canvas.width=Yt.width,xt.canvas.height=Yt.height,xt.activeTexture(xt.TEXTURE0),Vt.h.bindTexture2d(Vt.l),xt.texImage2D(xt.TEXTURE_2D,0,xt.RGBA,xt.RGBA,xt.UNSIGNED_BYTE,ht),Vt.h.bindTexture2d(0),Vt=Yt;break t;case"detections":for(Vt=R.m[$.stream],Vt||(Vt=new Tt(R.h),R.m[$.stream]=Vt),Vt.data||(Vt.data=new Vt.g.DetectionListData),Vt.data.reset(ht.length),Yt=0;Yt<ht.length;++Yt){xt=ht[Yt];var Ht=Vt.data,l=Ht.setBoundingBox,v=Yt,I=xt.T,L=new E;if(ut(L,1,I.Y),ut(L,2,I.Z),ut(L,3,I.height),ut(L,4,I.width),ut(L,5,I.rotation),ut(L,6,I.W),I=mn(L,ot),l.call(Ht,v,I),xt.O)for(Ht=0;Ht<xt.O.length;++Ht){L=xt.O[Ht];var N=!!L.visibility;l=Vt.data,v=l.addNormalizedLandmark,I=Yt,L=Object.assign(Object.assign({},L),{visibility:N?L.visibility:0}),N=new Ln,ut(N,1,L.x),ut(N,2,L.y),ut(N,3,L.z),L.visibility&&ut(N,4,L.visibility),L=mn(N,Qn),v.call(l,I,L)}if(xt.M)for(Ht=0;Ht<xt.M.length;++Ht)l=Vt.data,v=l.addClassification,I=Yt,L=xt.M[Ht],N=new Sn,ut(N,2,L.X),L.index&&ut(N,1,L.index),L.label&&ut(N,3,L.label),L.displayName&&ut(N,4,L.displayName),L=mn(N,Un),v.call(l,I,L)}Vt=Vt.data;break t;default:Vt={}}}switch(yt=Vt,Xt=$.stream,$.type){case"video":k.pushTexture2d(Object.assign(Object.assign({},yt),{stream:Xt,timestamp:Y}));break;case"detections":Bt=yt,Bt.stream=Xt,Bt.timestamp=Y,k.pushDetectionList(Bt);break;default:throw Error("Unknown input config type: '"+$.type+"'")}}return R.i.send(k),P(It,R.C,4);case 4:k.delete(),It.g=0}})};function B(s,X,R){var Y,k,A,K,nt,$,yt,Xt,Bt,It,ht,Vt,xt,Yt;return gt(function(Ht){switch(Ht.g){case 1:if(!R)return Ht.return(X);for(Y={},k=0,A=T(Object.keys(R)),K=A.next();!K.done;K=A.next())nt=K.value,$=R[nt],typeof $!="string"&&$.type==="texture"&&X[$.stream]!==void 0&&++k;1<k&&(s.G=!1),yt=T(Object.keys(R)),K=yt.next();case 2:if(K.done){Ht.g=4;break}if(Xt=K.value,Bt=R[Xt],typeof Bt=="string")return xt=Y,Yt=Xt,P(Ht,_(s,Xt,X[Bt]),14);if(It=X[Bt.stream],Bt.type==="detection_list"){if(It){for(var l=It.getRectList(),v=It.getLandmarksList(),I=It.getClassificationsList(),L=[],N=0;N<l.size();++N){var o=yn(l.get(N),E,j);o={T:{Y:it(o,1),Z:it(o,2),height:it(o,3),width:it(o,4),rotation:it(o,5,0),W:St(o,6)},O:Ut(v.get(N)),M:bt(yn(I.get(N),vn,Mn))},L.push(o)}l=L}else l=[];Y[Xt]=l,Ht.g=7;break}if(Bt.type==="proto_list"){if(It){for(l=Array(It.size()),v=0;v<It.size();v++)l[v]=It.get(v);It.delete()}else l=[];Y[Xt]=l,Ht.g=7;break}if(It===void 0){Ht.g=3;break}if(Bt.type==="float_list"){Y[Xt]=It,Ht.g=7;break}if(Bt.type==="proto"){Y[Xt]=It,Ht.g=7;break}if(Bt.type!=="texture")throw Error("Unknown output config type: '"+Bt.type+"'");return ht=s.s[Xt],ht||(ht=new Jt(s.h,s.D),s.s[Xt]=ht),P(Ht,$t(ht,It,s.G),13);case 13:Vt=Ht.h,Y[Xt]=Vt;case 7:Bt.transform&&Y[Xt]&&(Y[Xt]=Bt.transform(Y[Xt])),Ht.g=3;break;case 14:xt[Yt]=Ht.h;case 3:K=yt.next(),Ht.g=2;break;case 4:return Ht.return(Y)}})}function _(s,X,R){var Y;return gt(function(k){return typeof R=="number"||R instanceof Uint8Array||R instanceof s.h.Uint8BlobList?k.return(R):R instanceof s.h.Texture2dDataOut?(Y=s.s[X],Y||(Y=new Jt(s.h,s.D),s.s[X]=Y),k.return($t(Y,R,s.G))):k.return(void 0)})}function M(s,X){for(var R=X.name||"$",Y=[].concat(J(X.wants)),k=new s.h.StringList,A=T(X.wants),K=A.next();!K.done;K=A.next())k.push_back(K.value);A=s.h.PacketListener.implement({onResults:function(nt){for(var $={},yt=0;yt<X.wants.length;++yt)$[Y[yt]]=nt.get(yt);var Xt=s.listeners[R];Xt&&(s.C=B(s,$,X.outs).then(function(Bt){Bt=Xt(Bt);for(var It=0;It<X.wants.length;++It){var ht=$[Y[It]];typeof ht=="object"&&ht.hasOwnProperty&&ht.hasOwnProperty("delete")&&ht.delete()}Bt&&(s.C=Bt)}))}}),s.i.attachMultiListener(k,A),k.delete()}i.onResults=function(s,X){this.listeners[X||"$"]=s},Ct("Solution",ke),Ct("OptionType",{BOOL:0,NUMBER:1,$:2,0:"BOOL",1:"NUMBER",2:"STRING"});function q(s){switch(s===void 0&&(s=0),s){case 1:return"pose_landmark_full.tflite";case 2:return"pose_landmark_heavy.tflite";default:return"pose_landmark_lite.tflite"}}function ct(s){var X=this;s=s||{},this.g=new ke({locateFile:s.locateFile,files:function(R){return[{url:"pose_solution_packed_assets_loader.js"},{simd:!1,url:"pose_solution_wasm_bin.js"},{simd:!0,url:"pose_solution_simd_wasm_bin.js"},{data:!0,url:q(R.modelComplexity)}]},graph:{url:"pose_web.binarypb"},listeners:[{wants:["pose_landmarks","world_landmarks","segmentation_mask","image_transformed"],outs:{image:{type:"texture",stream:"image_transformed"},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:Ut},poseWorldLandmarks:{type:"proto",stream:"world_landmarks",transform:Ut},segmentationMask:{type:"texture",stream:"segmentation_mask"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelComplexity:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(R){var Y,k,A;return gt(function(K){return K.g==1?(Y=q(R),k="third_party/mediapipe/modules/pose_landmark/"+Y,P(K,C(X.g,Y),2)):(A=K.h,X.g.overrideFile(k,A),K.return(!0))})}},smoothLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothLandmarks",fieldName:"bool_value"}},enableSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorEnableSegmentation",fieldName:"bool_value"}},smoothSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothSegmentation",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"poselandmarkgpu__posedetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"poselandmarkgpu__poselandmarkbyroigpu__tensorstoposelandmarksandsegmentation__ThresholdingCalculator",fieldName:"threshold"}}}})}i=ct.prototype,i.reset=function(){this.g.reset()},i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(s){this.g.onResults(s)},i.initialize=function(){var s=this;return gt(function(X){return P(X,s.g.initialize(),0)})},i.send=function(s,X){var R=this;return gt(function(Y){return P(Y,R.g.send(s,X),0)})},i.setOptions=function(s){this.g.setOptions(s)},Ct("Pose",ct),Ct("POSE_CONNECTIONS",[[0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]]),Ct("POSE_LANDMARKS",{NOSE:0,LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,LEFT_EAR:7,RIGHT_EAR:8,LEFT_RIGHT:9,RIGHT_LEFT:10,LEFT_SHOULDER:11,RIGHT_SHOULDER:12,LEFT_ELBOW:13,RIGHT_ELBOW:14,LEFT_WRIST:15,RIGHT_WRIST:16,LEFT_PINKY:17,RIGHT_PINKY:18,LEFT_INDEX:19,RIGHT_INDEX:20,LEFT_THUMB:21,RIGHT_THUMB:22,LEFT_HIP:23,RIGHT_HIP:24,LEFT_KNEE:25,RIGHT_KNEE:26,LEFT_ANKLE:27,RIGHT_ANKLE:28,LEFT_HEEL:29,RIGHT_HEEL:30,LEFT_FOOT_INDEX:31,RIGHT_FOOT_INDEX:32}),Ct("POSE_LANDMARKS_LEFT",{LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,LEFT_EAR:7,LEFT_RIGHT:9,LEFT_SHOULDER:11,LEFT_ELBOW:13,LEFT_WRIST:15,LEFT_PINKY:17,LEFT_INDEX:19,LEFT_THUMB:21,LEFT_HIP:23,LEFT_KNEE:25,LEFT_ANKLE:27,LEFT_HEEL:29,LEFT_FOOT_INDEX:31}),Ct("POSE_LANDMARKS_RIGHT",{RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,RIGHT_EAR:8,RIGHT_LEFT:10,RIGHT_SHOULDER:12,RIGHT_ELBOW:14,RIGHT_WRIST:16,RIGHT_PINKY:18,RIGHT_INDEX:20,RIGHT_THUMB:22,RIGHT_HIP:24,RIGHT_KNEE:26,RIGHT_ANKLE:28,RIGHT_HEEL:30,RIGHT_FOOT_INDEX:32}),Ct("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Ct("VERSION","0.5.1635988162")}).call(xi);const or=class{constructor(){Zt(this,"mediapipeMap_",new Map)}getVersion(n){switch(n){case"face_detection":return Wi.VERSION;case"face_mesh":return Ri.VERSION;case"hands":return Xi.VERSION;case"holistic":return Vi.VERSION;case"objectron":return Ii.VERSION;case"selfie_segmentation":return Gi.VERSION;case"pose":return xi.VERSION;default:return""}}initialize(n){return new Promise(async(r,f)=>{if(n.mediaPipeModelConfigArray.length==0){f("no model was selected");return}for(let Z=0;Z<n.mediaPipeModelConfigArray.length;Z++){const x=n.mediaPipeModelConfigArray[Z];if(this.mediapipeMap_.has(x.modelType)){f("setting same type is not supported");return}if(typeof x.listener!="function"){f(`[${x.modelType}] ResultsListener must be provided`);return}let H;switch(x.modelType){case"face_mesh":H=new Ri.FaceMesh({locateFile:(T,J)=>(x.assetsUri||or.defaultAssetsBaseUrl+"face_mesh/"+this.getVersion("face_mesh"))+"/"+T});break;case"face_detection":H=new Wi.FaceDetection({locateFile:(T,J)=>(x.assetsUri||or.defaultAssetsBaseUrl+"face_detection/"+this.getVersion("face_detection"))+"/"+T});break;case"hands":H=new Xi.Hands({locateFile:(T,J)=>(x.assetsUri||or.defaultAssetsBaseUrl+"hands/"+this.getVersion("hands"))+"/"+T});break;case"holistic":H=new Vi.Holistic({locateFile:(T,J)=>(x.assetsUri||or.defaultAssetsBaseUrl+"holistic/"+this.getVersion("holistic"))+"/"+T});break;case"objectron":H=new Ii.Objectron({locateFile:(T,J)=>(x.assetsUri||or.defaultAssetsBaseUrl+"objectron/"+this.getVersion("objectron"))+"/"+T});break;case"selfie_segmentation":H=new Gi.SelfieSegmentation({locateFile:(T,J)=>(x.assetsUri||or.defaultAssetsBaseUrl+"selfie_segmentation/"+this.getVersion("selfie_segmentation"))+"/"+T});break;case"pose":H=new xi.Pose({locateFile:(T,J)=>(x.assetsUri||or.defaultAssetsBaseUrl+"pose/"+this.getVersion("pose"))+"/"+T});break;default:f("unknown model type");return}H.onResults(x.listener),x.options&&H.setOptions(x.options);try{await H.initialize(),this.mediapipeMap_.set(x.modelType,H)}catch(T){f(T);return}}r()})}close(n){return new Promise((r,f)=>{let Z=[];if(n){let x=this.mediapipeMap_.get(n);if(x)this.mediapipeMap_.delete(n),Z.push(x.close());else{f("model not exit");return}}else{for(const[x,H]of this.mediapipeMap_.entries())Z.push(H.close());this.mediapipeMap_.clear()}Promise.all(Z).then(()=>{r()}).catch(x=>{f(x)})})}send(n,r){return new Promise((f,Z)=>{let x=[];if(r){let H=this.mediapipeMap_.get(r);if(H)x.push(H.send({image:n}));else{Z("model not exit");return}}else for(const[H,T]of this.mediapipeMap_.entries())x.push(T.send({image:n}));Promise.all(x).then(()=>{f()}).catch(H=>{Z(H)})})}reset(n){if(n){let r=this.mediapipeMap_.get(n);r&&typeof r.reset=="function"&&r.reset()}else for(const[r,f]of this.mediapipeMap_.entries())f&&typeof f.reset=="function"&&f.reset()}};let Si=or;Zt(Si,"defaultAssetsBaseUrl","https://d3opqjmqzxf057.cloudfront.net/ml/mediapipe/");const cr=new WeakMap,Xr=new WeakMap,rr=new WeakMap,Ti=Symbol("anyProducer"),Ys=Promise.resolve(),Li=Symbol("listenerAdded"),Yi=Symbol("listenerRemoved");let wi=!1,Vo=!1;function Fr(i){if(typeof i!="string"&&typeof i!="symbol"&&typeof i!="number")throw new TypeError("`eventName` must be a string, symbol, or number")}function Hi(i){if(typeof i!="function")throw new TypeError("listener must be a function")}function Cr(i,n){const r=Xr.get(i);if(!!r.has(n))return r.get(n)}function qr(i,n){const r=typeof n=="string"||typeof n=="symbol"||typeof n=="number"?n:Ti,f=rr.get(i);if(!!f.has(r))return f.get(r)}function lc(i,n,r){const f=rr.get(i);if(f.has(n))for(const Z of f.get(n))Z.enqueue(r);if(f.has(Ti)){const Z=Promise.all([n,r]);for(const x of f.get(Ti))x.enqueue(Z)}}function ws(i,n){n=Array.isArray(n)?n:[n];let r=!1,f=()=>{},Z=[];const x={enqueue(H){Z.push(H),f()},finish(){r=!0,f()}};for(const H of n){let T=qr(i,H);T||(T=new Set,rr.get(i).set(H,T)),T.add(x)}return{async next(){return Z?Z.length===0?r?(Z=void 0,this.next()):(await new Promise(H=>{f=H}),this.next()):{done:!1,value:await Z.shift()}:{done:!0}},async return(H){Z=void 0;for(const T of n){const J=qr(i,T);J&&(J.delete(x),J.size===0&&rr.get(i).delete(T))}return f(),arguments.length>0?{done:!0,value:await H}:{done:!0}},[Symbol.asyncIterator](){return this}}}function Hs(i){if(i===void 0)return Fs;if(!Array.isArray(i))throw new TypeError("`methodNames` must be an array of strings");for(const n of i)if(!Fs.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return i}const Jr=i=>i===Li||i===Yi;function Fi(i,n,r){if(Jr(n))try{wi=!0,i.emit(n,r)}finally{wi=!1}}class ur{static mixin(n,r){return r=Hs(r),f=>{if(typeof f!="function")throw new TypeError("`target` must be function");for(const H of r)if(f.prototype[H]!==void 0)throw new Error(`The property \`${H}\` already exists on \`target\``);function Z(){return Object.defineProperty(this,n,{enumerable:!1,value:new ur}),this[n]}Object.defineProperty(f.prototype,n,{enumerable:!1,get:Z});const x=H=>function(...T){return this[n][H](...T)};for(const H of r)Object.defineProperty(f.prototype,H,{enumerable:!1,value:x(H)});return f}}static get isDebugEnabled(){var r,f;if(typeof((r=globalThis.process)==null?void 0:r.env)!="object")return Vo;const{env:n}=(f=globalThis.process)!=null?f:{env:{}};return n.DEBUG==="emittery"||n.DEBUG==="*"||Vo}static set isDebugEnabled(n){Vo=n}constructor(n={}){var r;cr.set(this,new Set),Xr.set(this,new Map),rr.set(this,new Map),rr.get(this).set(Ti,new Set),this.debug=(r=n.debug)!=null?r:{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(f,Z,x,H)=>{try{H=JSON.stringify(H)}catch{H=`Object with the following keys failed to stringify: ${Object.keys(H).join(",")}`}(typeof x=="symbol"||typeof x=="number")&&(x=x.toString());const T=new Date,J=`${T.getHours()}:${T.getMinutes()}:${T.getSeconds()}.${T.getMilliseconds()}`;console.log(`[${J}][emittery:${f}][${Z}] Event Name: ${x}
|
|
122
|
-
data: ${H}`)})}logIfDebugEnabled(n,r,f){(ur.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,f)}on(n,r){Hi(r),n=Array.isArray(n)?n:[n];for(const f of n){Fr(f);let Z=Cr(this,f);Z||(Z=new Set,Xr.get(this).set(f,Z)),Z.add(r),this.logIfDebugEnabled("subscribe",f,void 0),Jr(f)||Fi(this,
|
|
123
|
-
data: ${H}`)})}logIfDebugEnabled(n,r,f){(Wr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,f)}on(n,r){Ki(r),n=Array.isArray(n)?n:[n];for(const f of n){Er(f);let Z=Ur(this,f);Z||(Z=new Set,Vr.get(this).set(f,Z)),Z.add(r),this.logIfDebugEnabled("subscribe",f,void 0),Kr(f)||Bi(this,Ni,{eventName:f,listener:r})}return this.off.bind(this,n,r)}off(n,r){Ki(r),n=Array.isArray(n)?n:[n];for(const f of n){Er(f);const Z=Ur(this,f);Z&&(Z.delete(r),Z.size===0&&Vr.get(this).delete(f)),this.logIfDebugEnabled("unsubscribe",f,void 0),Kr(f)||Bi(this,Ei,{eventName:f,listener:r})}}once(n){let r;const f=new Promise(Z=>{r=this.on(n,x=>{r(),Z(x)})});return f.off=r,f}events(n){n=Array.isArray(n)?n:[n];for(const r of n)Er(r);return ks(this,n)}async emit(n,r){var f;if(Er(n),Kr(n)&&!Ui)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emit",n,r),dc(this,n,r);const Z=(f=Ur(this,n))!=null?f:new Set,x=ar.get(this),H=[...Z],T=Kr(n)?[]:[...x];await Js,await Promise.all([...H.map(async J=>{if(Z.has(J))return J(r)}),...T.map(async J=>{if(x.has(J))return J(n,r)})])}async emitSerial(n,r){var f;if(Er(n),Kr(n)&&!Ui)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emitSerial",n,r);const Z=(f=Ur(this,n))!=null?f:new Set,x=ar.get(this),H=[...Z],T=[...x];await Js;for(const J of H)Z.has(J)&&await J(r);for(const J of T)x.has(J)&&await J(n,r)}onAny(n){return Ki(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),ar.get(this).add(n),Bi(this,Ni,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return ks(this)}offAny(n){Ki(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),Bi(this,Ei,{listener:n}),ar.get(this).delete(n)}clearListeners(n){n=Array.isArray(n)?n:[n];for(const r of n)if(this.logIfDebugEnabled("clear",r,void 0),typeof r=="string"||typeof r=="symbol"||typeof r=="number"){const f=Ur(this,r);f&&f.clear();const Z=ei(this,r);if(Z){for(const x of Z)x.finish();Z.clear()}}else{ar.get(this).clear();for(const[f,Z]of Vr.get(this).entries())Z.clear(),Vr.get(this).delete(f);for(const[f,Z]of ir.get(this).entries()){for(const x of Z)x.finish();Z.clear(),ir.get(this).delete(f)}}}listenerCount(n){var r,f,Z,x,H,T;n=Array.isArray(n)?n:[n];let J=0;for(const et of n){if(typeof et=="string"){J+=ar.get(this).size+((f=(r=Ur(this,et))==null?void 0:r.size)!=null?f:0)+((x=(Z=ei(this,et))==null?void 0:Z.size)!=null?x:0)+((T=(H=ei(this))==null?void 0:H.size)!=null?T:0);continue}typeof et<"u"&&Er(et),J+=ar.get(this).size;for(const lt of Vr.get(this).values())J+=lt.size;for(const lt of ir.get(this).values())J+=lt.size}return J}bindMethods(n,r){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");r=Ns(r);for(const f of r){if(n[f]!==void 0)throw new Error(`The property \`${f}\` already exists on \`target\``);Object.defineProperty(n,f,{enumerable:!1,value:this[f].bind(this)})}}}const Es=Object.getOwnPropertyNames(Wr.prototype).filter(i=>i!=="constructor");Object.defineProperty(Wr,"listenerAdded",{value:Ni,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(Wr,"listenerRemoved",{value:Ei,writable:!1,enumerable:!0,configurable:!1});function hc(i){return i.onAny&&i.emit}function fc(i){return i.prototype.onAny&&i.prototype.emit}let mc=0;async function pc(i,n,r){const Z=fc(i)?new Wr:{},x=mc++;return Object.getOwnPropertyNames(i.prototype).forEach(H=>{Z[H]=(...T)=>Ci(n,$n.FORWARD,H,T,r)}),Z.terminate=async(...H)=>{const T=await Ci(n,$n.TERMINATE,"",H,r);return delete Ji[x],n.terminate(),Z.workerContext.worker=void 0,T},Z.workerContext={id:x,worker:n,resolvers:r},Ji[x]=Z,Z}async function bc(i,n){const r=new Map;let f;const Z=await ac(i,n,r,(x,H)=>{f!=null&&f.emit&&(f==null||f.emit(x,H))});return f=await pc(i,Z,r),f}async function yc(i,n){const{functionName:r,args:f}=i;if(!n.instance)throw"instance not initialized";if(!r)throw"missing function name to call";if(!n.instance[r])throw`undefined function [${r}] in class ${n.instance.constructor.workerId}`;Nr(i,await n.instance[r](...f!=null?f:[]))}const Us=Wo("registeredWorkers",{});function gc(i,n){n.workerId=i,Ro()&&(Us[n.workerId]=n)}function Zc(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,f]=i.args,Z=Us[r];if(Z)n.instance=new Z(i.args.slice(1));else throw`unknown worker class ${r}`;ti(f,kr),hc(n.instance)&&n.instance.onAny((x,H)=>{Nr({type:$n.EVENT},{name:x,data:H})}),Nr(i,typeof n.instance!==void 0)}async function vc(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let f;n.instance.terminate&&(f=await n.instance.terminate(...r!=null?r:[])),Nr(i,f)}function Gc(i){if(!i.args)throw"Missing globals while syncing";ti(i.args[0],kr),Nr(i,{})}function Xc(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case $n.INIT:Zc(r,i);break;case $n.FORWARD:yc(r,i);break;case $n.TERMINATE:vc(r,i);break;case $n.GLOBALS_SYNC:Gc(r);break}}}Ro()&&Xc();class Ks{static async createVideoReadable(n){return new Promise((r,f)=>{const Z=document.createElement("video");let x=new AbortController,H=new AbortController;Z.addEventListener("canplay",()=>{x.abort(),Z.muted=!0,Z.loop=!0,Z.play().then(()=>{try{const T=Z.captureStream(),J=new MediaStreamTrackProcessor(T.getVideoTracks()[0]);r(J.readable)}catch(T){f(T)}})},{once:!0,signal:H.signal}),Z.addEventListener("error",T=>{H.abort(),f("loading error:"+T)},{once:!0,signal:x.signal}),Z.crossOrigin="anonymous",Z.src=n})}static async createImageCanvas(n){const f=await(await fetch(n)).blob();return await createImageBitmap(f)}}var Vc=Object.defineProperty,Wc=(i,n,r)=>n in i?Vc(i,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[n]=r,Rc=(i,n,r)=>(Wc(i,typeof n!="symbol"?n+"":n,r),r);const Ic="hlg.tokbox.com/prod/logging/vcp_webrtc",xc="https://",Sc=1e4;let Mi;const Tc=new Uint8Array(16);function Lc(){if(!Mi&&(Mi=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!Mi))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Mi(Tc)}const Bn=[];for(let i=0;i<256;++i)Bn.push((i+256).toString(16).slice(1));function Yc(i,n=0){return(Bn[i[n+0]]+Bn[i[n+1]]+Bn[i[n+2]]+Bn[i[n+3]]+"-"+Bn[i[n+4]]+Bn[i[n+5]]+"-"+Bn[i[n+6]]+Bn[i[n+7]]+"-"+Bn[i[n+8]]+Bn[i[n+9]]+"-"+Bn[i[n+10]]+Bn[i[n+11]]+Bn[i[n+12]]+Bn[i[n+13]]+Bn[i[n+14]]+Bn[i[n+15]]).toLowerCase()}const wc=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),Bs={randomUUID:wc};function Hc(i,n,r){if(Bs.randomUUID&&!n&&!i)return Bs.randomUUID();i=i||{};const f=i.random||(i.rng||Lc)();if(f[6]=f[6]&15|64,f[8]=f[8]&63|128,n){r=r||0;for(let Z=0;Z<16;++Z)n[r+Z]=f[Z];return n}return Yc(f)}function xo(i,n){globalThis.vonage||(globalThis.vonage={}),globalThis.vonage.workerizer||(globalThis.vonage.workerizer={});let r=globalThis.vonage.workerizer;return r[i]||(r[i]=n),r[i]}const dr=xo("globals",{});var Rr=(i=>(i.INIT="INIT",i.FORWARD="FORWARD",i.TERMINATE="TERMINATE",i.GLOBALS_SYNC="GLOBALS_SYNC",i))(Rr||{});function Ms(i){return[ImageBitmap,ReadableStream,WritableStream].some(n=>i instanceof n)}let Fc=0;function Cc(i,n,r,f,Z){const x=Fc++;return i.postMessage({id:x,type:n,functionName:r,args:f},f.filter(H=>Ms(H))),new Promise(H=>{Z==null||Z.set(x,H)})}function ni(i,n){const{id:r,type:f}=i,Z=Array.isArray(n)?n:[n];postMessage({id:r,type:f,result:n},Z.filter(x=>Ms(x)))}const As=xo("workerized",{});function zs(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function Jc(){if(zs())ni({type:Rr.GLOBALS_SYNC},dr);else{const i=[];for(const n in As){const{worker:r,resolvers:f}=As[n].workerContext;r&&i.push(Cc(r,Rr.GLOBALS_SYNC,"",[dr],f))}await Promise.all(i)}}function Ai(i,n){if(Array.isArray(n))n.splice(0,n.length);else if(typeof n=="object")for(const r in n)delete n[r];for(const r in i)Array.isArray(i[r])?(n[r]=[],Ai(i[r],n[r])):typeof i[r]=="object"?(n[r]={},Ai(i[r],n[r])):n[r]=i[r]}async function kc(i,n){const{functionName:r,args:f}=i;if(!n.instance)throw"instance not initialized";if(!r)throw"missing function name to call";if(!n.instance[r])throw`undefined function [${r}] in class ${n.instance.constructor.workerId}`;ni(i,await n.instance[r](...f!=null?f:[]))}const Nc=xo("registeredWorkers",{});function Ec(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,f]=i.args,Z=Nc[r];if(Z)n.instance=new Z(i.args.slice(1));else throw`unknown worker class ${r}`;Ai(f,dr),ni(i,typeof n.instance!==void 0)}async function Uc(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let f;n.instance.terminate&&(f=await n.instance.terminate(...r!=null?r:[])),ni(i,f)}function Kc(i){if(!i.args)throw"Missing globals while syncing";Ai(i.args[0],dr),ni(i,{})}function Bc(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case Rr.INIT:Ec(r,i);break;case Rr.FORWARD:kc(r,i);break;case Rr.TERMINATE:Uc(r,i);break;case Rr.GLOBALS_SYNC:Kc(r);break}}}zs()&&Bc();function Mc(i,n){return dr[i]||(dr[i]=n),[()=>dr[i],async r=>{dr[i]=r,await Jc()}]}function Ac(i,n){return Mc(i,n)}const[zc,$3]=Ac("metadata");function So(){return zc()}class jc{constructor(n){Rc(this,"uuid",Hc()),this.config=n}async send(n){var r,f,Z;const{appId:x,sourceType:H}=(r=So())!=null?r:{};if(!x||!H)return"metadata missing";const T=new AbortController,J=setTimeout(()=>T.abort(),Sc);return await((Z=(f=this.config)==null?void 0:f.fetch)!=null?Z:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(n)),signal:T.signal}),clearTimeout(J),"success"}getUrl(){var n;let r=(n=So().proxyUrl)!=null?n:xc;return r+=(r.at(-1)==="/"?"":"/")+Ic,r}getHeaders(){return{"Content-Type":"application/json"}}buildReport(n){const r=So();return{guid:this.uuid,...n,applicationId:r.appId,timestamp:Date.now(),proxyUrl:r.proxyUrl,source:r.sourceType}}}const Oc="5.1.0";class To{constructor(){Zt(this,"canvas");Zt(this,"context");const n=new OffscreenCanvas(0,0),r=n.getContext("2d");if(!r)throw"Fail to retrieve webgl2 context";this.canvas=n,this.context=r}setFlickeringOptions(n){}enablePostProcessing(){}disablePostProcessing(){}async profileWebgl(n){return[]}async render(n,r){return this.canvas}resizeCanvas(n){const{width:r,height:f}=n;this.canvas.width=r,this.canvas.height=f}renderSilhouette(n,r,f="none"){const{width:Z,height:x}=n;this.context.save(),this.context.drawImage(r,0,0,r.width,r.height,0,0,Z,x),this.context.globalCompositeOperation="source-in",this.context.filter=f,this.context.drawImage(n,0,0,Z,x,0,0,this.canvas.width,this.canvas.height),this.context.restore()}}class Pc extends To{constructor(n){super(),this.radius=n}async render(n,r){return super.resizeCanvas(n),this.renderSilhouette(n,r),this.context.save(),this.context.filter=`blur(${this.radius}px)`,this.context.globalCompositeOperation="destination-over",this.context.drawImage(n,0,0,n.width,n.height),this.context.restore(),super.render(n,r)}}class _c extends To{constructor(n){super(),this.radius=n}async render(n,r){return super.resizeCanvas(n),this.renderSilhouette(n,r,`blur(${this.radius}px)`),this.context.save(),this.context.filter="none",this.context.globalCompositeOperation="destination-over",this.context.drawImage(n,0,0,n.width,n.height),this.context.restore(),super.render(n,r)}}class Qc extends To{constructor(){super(...arguments);Zt(this,"backgroundImage")}setBackgroundImage(r){this.backgroundImage=r}async render(r,f){return super.resizeCanvas(r),this.renderSilhouette(r,f),this.backgroundImage&&(this.context.save(),this.context.filter="none",this.context.globalCompositeOperation="destination-over",this.context.drawImage(this.backgroundImage,0,0,this.backgroundImage.width,this.backgroundImage.height,0,0,r.width,r.height),this.context.restore()),super.render(r,f)}}/* @license twgl.js 5.5.1 Copyright (c) 2015, Gregg Tavares All Rights Reserved.
|
|
121
|
+
`+R.getProgramInfoLog(A));w=s.m=A,R.useProgram(w),k=R.getUniformLocation(w,"sampler0"),s.j={I:R.getAttribLocation(w,"aVertex"),H:R.getAttribLocation(w,"aTex"),da:k},s.s=R.createBuffer(),R.bindBuffer(R.ARRAY_BUFFER,s.s),R.enableVertexAttribArray(s.j.I),R.vertexAttribPointer(s.j.I,2,R.FLOAT,!1,0,0),R.bufferData(R.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),R.STATIC_DRAW),R.bindBuffer(R.ARRAY_BUFFER,null),s.o=R.createBuffer(),R.bindBuffer(R.ARRAY_BUFFER,s.o),R.enableVertexAttribArray(s.j.H),R.vertexAttribPointer(s.j.H,2,R.FLOAT,!1,0,0),R.bufferData(R.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),R.STATIC_DRAW),R.bindBuffer(R.ARRAY_BUFFER,null),R.uniform1i(k,0)}w=s.j,R.useProgram(s.m),R.canvas.width=X.width,R.canvas.height=X.height,R.viewport(0,0,X.width,X.height),R.activeTexture(R.TEXTURE0),s.h.bindTexture2d(X.glName),R.enableVertexAttribArray(w.I),R.bindBuffer(R.ARRAY_BUFFER,s.s),R.vertexAttribPointer(w.I,2,R.FLOAT,!1,0,0),R.enableVertexAttribArray(w.H),R.bindBuffer(R.ARRAY_BUFFER,s.o),R.vertexAttribPointer(w.H,2,R.FLOAT,!1,0,0),R.bindFramebuffer(R.DRAW_FRAMEBUFFER?R.DRAW_FRAMEBUFFER:R.FRAMEBUFFER,null),R.clearColor(0,0,0,0),R.clear(R.COLOR_BUFFER_BIT),R.colorMask(!0,!0,!0,!0),R.drawArrays(R.TRIANGLE_FAN,0,4),R.disableVertexAttribArray(w.I),R.disableVertexAttribArray(w.H),R.bindBuffer(R.ARRAY_BUFFER,null),s.h.bindTexture2d(0)}function Tt(s){this.g=s}var Et=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Dt(s,X){return X+s}function ae(s,X){window[s]=X}function pe(s){var X=document.createElement("script");return X.setAttribute("src",s),X.setAttribute("crossorigin","anonymous"),new Promise(function(R){X.addEventListener("load",function(){R()},!1),X.addEventListener("error",function(){R()},!1),document.body.appendChild(X)})}function ge(){return Zt(function(s){switch(s.g){case 1:return s.m=2,O(s,WebAssembly.instantiate(Et),4);case 4:s.g=3,s.m=0;break;case 2:return s.m=0,s.j=null,s.return(!1);case 3:return s.return(!0)}})}function ke(s){if(this.g=s,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=s&&s.locateFile||Dt,typeof window=="object")var X=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")X=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=X,s.options){X=T(Object.keys(s.options));for(var R=X.next();!R.done;R=X.next()){R=R.value;var w=s.options[R].default;w!==void 0&&(this.j[R]=typeof w=="function"?w():w)}}}i=ke.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function h(s){var X,R,w,k,A,B,nt,$,yt,Xt,Kt;return Zt(function(It){switch(It.g){case 1:return s.R?(X=s.g.files===void 0?[]:typeof s.g.files=="function"?s.g.files(s.j):s.g.files,O(It,ge(),2)):It.return();case 2:if(R=It.h,typeof window=="object")return ae("createMediapipeSolutionsWasm",{locateFile:s.locateFile}),ae("createMediapipeSolutionsPackedAssets",{locateFile:s.locateFile}),B=X.filter(function(ht){return ht.data!==void 0}),nt=X.filter(function(ht){return ht.data===void 0}),$=Promise.all(B.map(function(ht){var Wt=C(s,ht.url);if(ht.path!==void 0){var xt=ht.path;Wt=Wt.then(function(wt){return s.overrideFile(xt,wt),Promise.resolve(wt)})}return Wt})),yt=Promise.all(nt.map(function(ht){return ht.simd===void 0||ht.simd&&R||!ht.simd&&!R?pe(s.locateFile(ht.url,s.S)):Promise.resolve()})).then(function(){var ht,Wt,xt;return Zt(function(wt){if(wt.g==1)return ht=window.createMediapipeSolutionsWasm,Wt=window.createMediapipeSolutionsPackedAssets,xt=s,O(wt,ht(Wt),2);xt.h=wt.h,wt.g=0})}),Xt=function(){return Zt(function(ht){return s.g.graph&&s.g.graph.url?ht=O(ht,C(s,s.g.graph.url),0):(ht.g=0,ht=void 0),ht})}(),O(It,Promise.all([yt,$,Xt]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return w=X.filter(function(ht){return ht.simd===void 0||ht.simd&&R||!ht.simd&&!R}).map(function(ht){return s.locateFile(ht.url,s.S)}),importScripts.apply(null,J(w)),k=s,O(It,createMediapipeSolutionsWasm(Module),6);case 6:k.h=It.h,s.l=new OffscreenCanvas(1,1),s.h.canvas=s.l,A=s.h.GL.createContext(s.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),s.h.GL.makeContextCurrent(A),It.g=4;break;case 7:if(s.l=document.createElement("canvas"),Kt=s.l.getContext("webgl2",{}),!Kt&&(Kt=s.l.getContext("webgl",{}),!Kt))return alert("Failed to create WebGL canvas context when passing video frame."),It.return();s.D=Kt,s.h.canvas=s.l,s.h.createContext(s.l,!0,!0,{});case 4:s.i=new s.h.SolutionWasm,s.R=!1,It.g=0}})}function y(s){var X,R,w,k,A,B,nt,$;return Zt(function(yt){if(yt.g==1){if(s.g.graph&&s.g.graph.url&&s.P===s.g.graph.url)return yt.return();if(s.o=!0,!s.g.graph||!s.g.graph.url){yt.g=2;return}return s.P=s.g.graph.url,O(yt,C(s,s.g.graph.url),3)}for(yt.g!=2&&(X=yt.h,s.i.loadGraph(X)),R=T(Object.keys(s.B)),w=R.next();!w.done;w=R.next())k=w.value,s.i.overrideFile(k,s.B[k]);if(s.B={},s.g.listeners)for(A=T(s.g.listeners),B=A.next();!B.done;B=A.next())nt=B.value,M(s,nt);$=s.j,s.j={},s.setOptions($),yt.g=0})}i.reset=function(){var s=this;return Zt(function(X){s.i&&(s.i.reset(),s.m={},s.s={}),X.g=0})},i.setOptions=function(s,X){var R=this;if(X=X||this.g.options){for(var w=[],k=[],A={},B=T(Object.keys(s)),nt=B.next();!nt.done;A={K:A.K,L:A.L},nt=B.next()){var $=nt.value;$ in this.j&&this.j[$]===s[$]||(this.j[$]=s[$],nt=X[$],nt!==void 0&&(nt.onChange&&(A.K=nt.onChange,A.L=s[$],w.push(function(yt){return function(){var Xt;return Zt(function(Kt){if(Kt.g==1)return O(Kt,yt.K(yt.L),2);Xt=Kt.h,Xt===!0&&(R.o=!0),Kt.g=0})}}(A))),nt.graphOptionXref&&($={valueNumber:nt.type===1?s[$]:0,valueBoolean:nt.type===0?s[$]:!1,valueString:nt.type===2?s[$]:""},nt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),nt.graphOptionXref),$),k.push(nt))))}(w.length!==0||k.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(k),this.v=(this.v===void 0?[]:this.v).concat(w))}};function G(s){var X,R,w,k,A,B,nt;return Zt(function($){switch($.g){case 1:if(!s.o)return $.return();if(!s.v){$.g=2;break}X=T(s.v),R=X.next();case 3:if(R.done){$.g=5;break}return w=R.value,O($,w(),4);case 4:R=X.next(),$.g=3;break;case 5:s.v=void 0;case 2:if(s.A){for(k=new s.h.GraphOptionChangeRequestList,A=T(s.A),B=A.next();!B.done;B=A.next())nt=B.value,k.push_back(nt);s.i.changeOptions(k),k.delete(),s.A=void 0}s.o=!1,$.g=0}})}i.initialize=function(){var s=this;return Zt(function(X){return X.g==1?O(X,h(s),2):X.g!=3?O(X,y(s),3):O(X,G(s),0)})};function C(s,X){var R,w;return Zt(function(k){return X in s.F?k.return(s.F[X]):(R=s.locateFile(X,""),w=fetch(R).then(function(A){return A.arrayBuffer()}),s.F[X]=w,k.return(w))})}i.overrideFile=function(s,X){this.i?this.i.overrideFile(s,X):this.B[s]=X},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(s,X){var R=this,w,k,A,B,nt,$,yt,Xt,Kt;return Zt(function(It){switch(It.g){case 1:return R.g.inputs?(w=1e3*(X==null?performance.now():X),O(It,R.C,2)):It.return();case 2:return O(It,R.initialize(),3);case 3:for(k=new R.h.PacketDataList,A=T(Object.keys(s)),B=A.next();!B.done;B=A.next())if(nt=B.value,$=R.g.inputs[nt]){t:{var ht=s[nt];switch($.type){case"video":var Wt=R.m[$.stream];if(Wt||(Wt=new Jt(R.h,R.D),R.m[$.stream]=Wt),Wt.l===0&&(Wt.l=Wt.h.createTexture()),typeof HTMLVideoElement<"u"&&ht instanceof HTMLVideoElement)var xt=ht.videoWidth,wt=ht.videoHeight;else typeof HTMLImageElement<"u"&&ht instanceof HTMLImageElement?(xt=ht.naturalWidth,wt=ht.naturalHeight):(xt=ht.width,wt=ht.height);wt={glName:Wt.l,width:xt,height:wt},xt=Wt.g,xt.canvas.width=wt.width,xt.canvas.height=wt.height,xt.activeTexture(xt.TEXTURE0),Wt.h.bindTexture2d(Wt.l),xt.texImage2D(xt.TEXTURE_2D,0,xt.RGBA,xt.RGBA,xt.UNSIGNED_BYTE,ht),Wt.h.bindTexture2d(0),Wt=wt;break t;case"detections":for(Wt=R.m[$.stream],Wt||(Wt=new Tt(R.h),R.m[$.stream]=Wt),Wt.data||(Wt.data=new Wt.g.DetectionListData),Wt.data.reset(ht.length),wt=0;wt<ht.length;++wt){xt=ht[wt];var Ht=Wt.data,l=Ht.setBoundingBox,v=wt,I=xt.T,Y=new E;if(ut(Y,1,I.Y),ut(Y,2,I.Z),ut(Y,3,I.height),ut(Y,4,I.width),ut(Y,5,I.rotation),ut(Y,6,I.W),I=mn(Y,ot),l.call(Ht,v,I),xt.O)for(Ht=0;Ht<xt.O.length;++Ht){Y=xt.O[Ht];var N=!!Y.visibility;l=Wt.data,v=l.addNormalizedLandmark,I=wt,Y=Object.assign(Object.assign({},Y),{visibility:N?Y.visibility:0}),N=new Yn,ut(N,1,Y.x),ut(N,2,Y.y),ut(N,3,Y.z),Y.visibility&&ut(N,4,Y.visibility),Y=mn(N,Qn),v.call(l,I,Y)}if(xt.M)for(Ht=0;Ht<xt.M.length;++Ht)l=Wt.data,v=l.addClassification,I=wt,Y=xt.M[Ht],N=new Sn,ut(N,2,Y.X),Y.index&&ut(N,1,Y.index),Y.label&&ut(N,3,Y.label),Y.displayName&&ut(N,4,Y.displayName),Y=mn(N,Un),v.call(l,I,Y)}Wt=Wt.data;break t;default:Wt={}}}switch(yt=Wt,Xt=$.stream,$.type){case"video":k.pushTexture2d(Object.assign(Object.assign({},yt),{stream:Xt,timestamp:w}));break;case"detections":Kt=yt,Kt.stream=Xt,Kt.timestamp=w,k.pushDetectionList(Kt);break;default:throw Error("Unknown input config type: '"+$.type+"'")}}return R.i.send(k),O(It,R.C,4);case 4:k.delete(),It.g=0}})};function K(s,X,R){var w,k,A,B,nt,$,yt,Xt,Kt,It,ht,Wt,xt,wt;return Zt(function(Ht){switch(Ht.g){case 1:if(!R)return Ht.return(X);for(w={},k=0,A=T(Object.keys(R)),B=A.next();!B.done;B=A.next())nt=B.value,$=R[nt],typeof $!="string"&&$.type==="texture"&&X[$.stream]!==void 0&&++k;1<k&&(s.G=!1),yt=T(Object.keys(R)),B=yt.next();case 2:if(B.done){Ht.g=4;break}if(Xt=B.value,Kt=R[Xt],typeof Kt=="string")return xt=w,wt=Xt,O(Ht,_(s,Xt,X[Kt]),14);if(It=X[Kt.stream],Kt.type==="detection_list"){if(It){for(var l=It.getRectList(),v=It.getLandmarksList(),I=It.getClassificationsList(),Y=[],N=0;N<l.size();++N){var o=yn(l.get(N),E,j);o={T:{Y:it(o,1),Z:it(o,2),height:it(o,3),width:it(o,4),rotation:it(o,5,0),W:St(o,6)},O:Ut(v.get(N)),M:bt(yn(I.get(N),vn,Mn))},Y.push(o)}l=Y}else l=[];w[Xt]=l,Ht.g=7;break}if(Kt.type==="proto_list"){if(It){for(l=Array(It.size()),v=0;v<It.size();v++)l[v]=It.get(v);It.delete()}else l=[];w[Xt]=l,Ht.g=7;break}if(It===void 0){Ht.g=3;break}if(Kt.type==="float_list"){w[Xt]=It,Ht.g=7;break}if(Kt.type==="proto"){w[Xt]=It,Ht.g=7;break}if(Kt.type!=="texture")throw Error("Unknown output config type: '"+Kt.type+"'");return ht=s.s[Xt],ht||(ht=new Jt(s.h,s.D),s.s[Xt]=ht),O(Ht,$t(ht,It,s.G),13);case 13:Wt=Ht.h,w[Xt]=Wt;case 7:Kt.transform&&w[Xt]&&(w[Xt]=Kt.transform(w[Xt])),Ht.g=3;break;case 14:xt[wt]=Ht.h;case 3:B=yt.next(),Ht.g=2;break;case 4:return Ht.return(w)}})}function _(s,X,R){var w;return Zt(function(k){return typeof R=="number"||R instanceof Uint8Array||R instanceof s.h.Uint8BlobList?k.return(R):R instanceof s.h.Texture2dDataOut?(w=s.s[X],w||(w=new Jt(s.h,s.D),s.s[X]=w),k.return($t(w,R,s.G))):k.return(void 0)})}function M(s,X){for(var R=X.name||"$",w=[].concat(J(X.wants)),k=new s.h.StringList,A=T(X.wants),B=A.next();!B.done;B=A.next())k.push_back(B.value);A=s.h.PacketListener.implement({onResults:function(nt){for(var $={},yt=0;yt<X.wants.length;++yt)$[w[yt]]=nt.get(yt);var Xt=s.listeners[R];Xt&&(s.C=K(s,$,X.outs).then(function(Kt){Kt=Xt(Kt);for(var It=0;It<X.wants.length;++It){var ht=$[w[It]];typeof ht=="object"&&ht.hasOwnProperty&&ht.hasOwnProperty("delete")&&ht.delete()}Kt&&(s.C=Kt)}))}}),s.i.attachMultiListener(k,A),k.delete()}i.onResults=function(s,X){this.listeners[X||"$"]=s},Ct("Solution",ke),Ct("OptionType",{BOOL:0,NUMBER:1,$:2,0:"BOOL",1:"NUMBER",2:"STRING"});function q(s){switch(s===void 0&&(s=0),s){case 1:return"pose_landmark_full.tflite";case 2:return"pose_landmark_heavy.tflite";default:return"pose_landmark_lite.tflite"}}function ct(s){var X=this;s=s||{},this.g=new ke({locateFile:s.locateFile,files:function(R){return[{url:"pose_solution_packed_assets_loader.js"},{simd:!1,url:"pose_solution_wasm_bin.js"},{simd:!0,url:"pose_solution_simd_wasm_bin.js"},{data:!0,url:q(R.modelComplexity)}]},graph:{url:"pose_web.binarypb"},listeners:[{wants:["pose_landmarks","world_landmarks","segmentation_mask","image_transformed"],outs:{image:{type:"texture",stream:"image_transformed"},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:Ut},poseWorldLandmarks:{type:"proto",stream:"world_landmarks",transform:Ut},segmentationMask:{type:"texture",stream:"segmentation_mask"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelComplexity:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(R){var w,k,A;return Zt(function(B){return B.g==1?(w=q(R),k="third_party/mediapipe/modules/pose_landmark/"+w,O(B,C(X.g,w),2)):(A=B.h,X.g.overrideFile(k,A),B.return(!0))})}},smoothLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothLandmarks",fieldName:"bool_value"}},enableSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorEnableSegmentation",fieldName:"bool_value"}},smoothSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothSegmentation",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"poselandmarkgpu__posedetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"poselandmarkgpu__poselandmarkbyroigpu__tensorstoposelandmarksandsegmentation__ThresholdingCalculator",fieldName:"threshold"}}}})}i=ct.prototype,i.reset=function(){this.g.reset()},i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(s){this.g.onResults(s)},i.initialize=function(){var s=this;return Zt(function(X){return O(X,s.g.initialize(),0)})},i.send=function(s,X){var R=this;return Zt(function(w){return O(w,R.g.send(s,X),0)})},i.setOptions=function(s){this.g.setOptions(s)},Ct("Pose",ct),Ct("POSE_CONNECTIONS",[[0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]]),Ct("POSE_LANDMARKS",{NOSE:0,LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,LEFT_EAR:7,RIGHT_EAR:8,LEFT_RIGHT:9,RIGHT_LEFT:10,LEFT_SHOULDER:11,RIGHT_SHOULDER:12,LEFT_ELBOW:13,RIGHT_ELBOW:14,LEFT_WRIST:15,RIGHT_WRIST:16,LEFT_PINKY:17,RIGHT_PINKY:18,LEFT_INDEX:19,RIGHT_INDEX:20,LEFT_THUMB:21,RIGHT_THUMB:22,LEFT_HIP:23,RIGHT_HIP:24,LEFT_KNEE:25,RIGHT_KNEE:26,LEFT_ANKLE:27,RIGHT_ANKLE:28,LEFT_HEEL:29,RIGHT_HEEL:30,LEFT_FOOT_INDEX:31,RIGHT_FOOT_INDEX:32}),Ct("POSE_LANDMARKS_LEFT",{LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,LEFT_EAR:7,LEFT_RIGHT:9,LEFT_SHOULDER:11,LEFT_ELBOW:13,LEFT_WRIST:15,LEFT_PINKY:17,LEFT_INDEX:19,LEFT_THUMB:21,LEFT_HIP:23,LEFT_KNEE:25,LEFT_ANKLE:27,LEFT_HEEL:29,LEFT_FOOT_INDEX:31}),Ct("POSE_LANDMARKS_RIGHT",{RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,RIGHT_EAR:8,RIGHT_LEFT:10,RIGHT_SHOULDER:12,RIGHT_ELBOW:14,RIGHT_WRIST:16,RIGHT_PINKY:18,RIGHT_INDEX:20,RIGHT_THUMB:22,RIGHT_HIP:24,RIGHT_KNEE:26,RIGHT_ANKLE:28,RIGHT_HEEL:30,RIGHT_FOOT_INDEX:32}),Ct("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Ct("VERSION","0.5.1635988162")}).call(xi);const or=class{constructor(){gt(this,"mediapipeMap_",new Map)}getVersion(n){switch(n){case"face_detection":return Vi.VERSION;case"face_mesh":return Ri.VERSION;case"hands":return Xi.VERSION;case"holistic":return Wi.VERSION;case"objectron":return Ii.VERSION;case"selfie_segmentation":return Gi.VERSION;case"pose":return xi.VERSION;default:return""}}initialize(n){return new Promise(async(r,f)=>{if(n.mediaPipeModelConfigArray.length==0){f("no model was selected");return}for(let Z=0;Z<n.mediaPipeModelConfigArray.length;Z++){const x=n.mediaPipeModelConfigArray[Z];if(this.mediapipeMap_.has(x.modelType)){f("setting same type is not supported");return}if(typeof x.listener!="function"){f(`[${x.modelType}] ResultsListener must be provided`);return}let H;switch(x.modelType){case"face_mesh":H=new Ri.FaceMesh({locateFile:(T,J)=>(x.assetsUri||or.defaultAssetsBaseUrl+"face_mesh/"+this.getVersion("face_mesh"))+"/"+T});break;case"face_detection":H=new Vi.FaceDetection({locateFile:(T,J)=>(x.assetsUri||or.defaultAssetsBaseUrl+"face_detection/"+this.getVersion("face_detection"))+"/"+T});break;case"hands":H=new Xi.Hands({locateFile:(T,J)=>(x.assetsUri||or.defaultAssetsBaseUrl+"hands/"+this.getVersion("hands"))+"/"+T});break;case"holistic":H=new Wi.Holistic({locateFile:(T,J)=>(x.assetsUri||or.defaultAssetsBaseUrl+"holistic/"+this.getVersion("holistic"))+"/"+T});break;case"objectron":H=new Ii.Objectron({locateFile:(T,J)=>(x.assetsUri||or.defaultAssetsBaseUrl+"objectron/"+this.getVersion("objectron"))+"/"+T});break;case"selfie_segmentation":H=new Gi.SelfieSegmentation({locateFile:(T,J)=>(x.assetsUri||or.defaultAssetsBaseUrl+"selfie_segmentation/"+this.getVersion("selfie_segmentation"))+"/"+T});break;case"pose":H=new xi.Pose({locateFile:(T,J)=>(x.assetsUri||or.defaultAssetsBaseUrl+"pose/"+this.getVersion("pose"))+"/"+T});break;default:f("unknown model type");return}H.onResults(x.listener),x.options&&H.setOptions(x.options);try{await H.initialize(),this.mediapipeMap_.set(x.modelType,H)}catch(T){f(T);return}}r()})}close(n){return new Promise((r,f)=>{let Z=[];if(n){let x=this.mediapipeMap_.get(n);if(x)this.mediapipeMap_.delete(n),Z.push(x.close());else{f("model not exit");return}}else{for(const[x,H]of this.mediapipeMap_.entries())Z.push(H.close());this.mediapipeMap_.clear()}Promise.all(Z).then(()=>{r()}).catch(x=>{f(x)})})}send(n,r){return new Promise((f,Z)=>{let x=[];if(r){let H=this.mediapipeMap_.get(r);if(H)x.push(H.send({image:n}));else{Z("model not exit");return}}else for(const[H,T]of this.mediapipeMap_.entries())x.push(T.send({image:n}));Promise.all(x).then(()=>{f()}).catch(H=>{Z(H)})})}reset(n){if(n){let r=this.mediapipeMap_.get(n);r&&typeof r.reset=="function"&&r.reset()}else for(const[r,f]of this.mediapipeMap_.entries())f&&typeof f.reset=="function"&&f.reset()}};let Si=or;gt(Si,"defaultAssetsBaseUrl","https://d3opqjmqzxf057.cloudfront.net/ml/mediapipe/");const cr=new WeakMap,Xr=new WeakMap,rr=new WeakMap,Ti=Symbol("anyProducer"),ws=Promise.resolve(),Yi=Symbol("listenerAdded"),wi=Symbol("listenerRemoved");let Li=!1,Wo=!1;function Fr(i){if(typeof i!="string"&&typeof i!="symbol"&&typeof i!="number")throw new TypeError("`eventName` must be a string, symbol, or number")}function Hi(i){if(typeof i!="function")throw new TypeError("listener must be a function")}function Cr(i,n){const r=Xr.get(i);if(!!r.has(n))return r.get(n)}function qr(i,n){const r=typeof n=="string"||typeof n=="symbol"||typeof n=="number"?n:Ti,f=rr.get(i);if(!!f.has(r))return f.get(r)}function l2(i,n,r){const f=rr.get(i);if(f.has(n))for(const Z of f.get(n))Z.enqueue(r);if(f.has(Ti)){const Z=Promise.all([n,r]);for(const x of f.get(Ti))x.enqueue(Z)}}function Ls(i,n){n=Array.isArray(n)?n:[n];let r=!1,f=()=>{},Z=[];const x={enqueue(H){Z.push(H),f()},finish(){r=!0,f()}};for(const H of n){let T=qr(i,H);T||(T=new Set,rr.get(i).set(H,T)),T.add(x)}return{async next(){return Z?Z.length===0?r?(Z=void 0,this.next()):(await new Promise(H=>{f=H}),this.next()):{done:!1,value:await Z.shift()}:{done:!0}},async return(H){Z=void 0;for(const T of n){const J=qr(i,T);J&&(J.delete(x),J.size===0&&rr.get(i).delete(T))}return f(),arguments.length>0?{done:!0,value:await H}:{done:!0}},[Symbol.asyncIterator](){return this}}}function Hs(i){if(i===void 0)return Fs;if(!Array.isArray(i))throw new TypeError("`methodNames` must be an array of strings");for(const n of i)if(!Fs.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return i}const Jr=i=>i===Yi||i===wi;function Fi(i,n,r){if(Jr(n))try{Li=!0,i.emit(n,r)}finally{Li=!1}}class ur{static mixin(n,r){return r=Hs(r),f=>{if(typeof f!="function")throw new TypeError("`target` must be function");for(const H of r)if(f.prototype[H]!==void 0)throw new Error(`The property \`${H}\` already exists on \`target\``);function Z(){return Object.defineProperty(this,n,{enumerable:!1,value:new ur}),this[n]}Object.defineProperty(f.prototype,n,{enumerable:!1,get:Z});const x=H=>function(...T){return this[n][H](...T)};for(const H of r)Object.defineProperty(f.prototype,H,{enumerable:!1,value:x(H)});return f}}static get isDebugEnabled(){var r,f;if(typeof((r=globalThis.process)==null?void 0:r.env)!="object")return Wo;const{env:n}=(f=globalThis.process)!=null?f:{env:{}};return n.DEBUG==="emittery"||n.DEBUG==="*"||Wo}static set isDebugEnabled(n){Wo=n}constructor(n={}){var r;cr.set(this,new Set),Xr.set(this,new Map),rr.set(this,new Map),rr.get(this).set(Ti,new Set),this.debug=(r=n.debug)!=null?r:{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(f,Z,x,H)=>{try{H=JSON.stringify(H)}catch{H=`Object with the following keys failed to stringify: ${Object.keys(H).join(",")}`}(typeof x=="symbol"||typeof x=="number")&&(x=x.toString());const T=new Date,J=`${T.getHours()}:${T.getMinutes()}:${T.getSeconds()}.${T.getMilliseconds()}`;console.log(`[${J}][emittery:${f}][${Z}] Event Name: ${x}
|
|
122
|
+
data: ${H}`)})}logIfDebugEnabled(n,r,f){(ur.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,f)}on(n,r){Hi(r),n=Array.isArray(n)?n:[n];for(const f of n){Fr(f);let Z=Cr(this,f);Z||(Z=new Set,Xr.get(this).set(f,Z)),Z.add(r),this.logIfDebugEnabled("subscribe",f,void 0),Jr(f)||Fi(this,Yi,{eventName:f,listener:r})}return this.off.bind(this,n,r)}off(n,r){Hi(r),n=Array.isArray(n)?n:[n];for(const f of n){Fr(f);const Z=Cr(this,f);Z&&(Z.delete(r),Z.size===0&&Xr.get(this).delete(f)),this.logIfDebugEnabled("unsubscribe",f,void 0),Jr(f)||Fi(this,wi,{eventName:f,listener:r})}}once(n){let r;const f=new Promise(Z=>{r=this.on(n,x=>{r(),Z(x)})});return f.off=r,f}events(n){n=Array.isArray(n)?n:[n];for(const r of n)Fr(r);return Ls(this,n)}async emit(n,r){var T;if(Fr(n),Jr(n)&&!Li)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emit",n,r),l2(this,n,r);const f=(T=Cr(this,n))!=null?T:new Set,Z=cr.get(this),x=[...f],H=Jr(n)?[]:[...Z];await ws,await Promise.all([...x.map(async J=>{if(f.has(J))return J(r)}),...H.map(async J=>{if(Z.has(J))return J(n,r)})])}async emitSerial(n,r){var T;if(Fr(n),Jr(n)&&!Li)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emitSerial",n,r);const f=(T=Cr(this,n))!=null?T:new Set,Z=cr.get(this),x=[...f],H=[...Z];await ws;for(const J of x)f.has(J)&&await J(r);for(const J of H)Z.has(J)&&await J(n,r)}onAny(n){return Hi(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),cr.get(this).add(n),Fi(this,Yi,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return Ls(this)}offAny(n){Hi(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),Fi(this,wi,{listener:n}),cr.get(this).delete(n)}clearListeners(n){n=Array.isArray(n)?n:[n];for(const r of n)if(this.logIfDebugEnabled("clear",r,void 0),typeof r=="string"||typeof r=="symbol"||typeof r=="number"){const f=Cr(this,r);f&&f.clear();const Z=qr(this,r);if(Z){for(const x of Z)x.finish();Z.clear()}}else{cr.get(this).clear();for(const[f,Z]of Xr.get(this).entries())Z.clear(),Xr.get(this).delete(f);for(const[f,Z]of rr.get(this).entries()){for(const x of Z)x.finish();Z.clear(),rr.get(this).delete(f)}}}listenerCount(n){var f,Z,x,H,T,J;n=Array.isArray(n)?n:[n];let r=0;for(const et of n){if(typeof et=="string"){r+=cr.get(this).size+((Z=(f=Cr(this,et))==null?void 0:f.size)!=null?Z:0)+((H=(x=qr(this,et))==null?void 0:x.size)!=null?H:0)+((J=(T=qr(this))==null?void 0:T.size)!=null?J:0);continue}typeof et<"u"&&Fr(et),r+=cr.get(this).size;for(const lt of Xr.get(this).values())r+=lt.size;for(const lt of rr.get(this).values())r+=lt.size}return r}bindMethods(n,r){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");r=Hs(r);for(const f of r){if(n[f]!==void 0)throw new Error(`The property \`${f}\` already exists on \`target\``);Object.defineProperty(n,f,{enumerable:!1,value:this[f].bind(this)})}}}const Fs=Object.getOwnPropertyNames(ur.prototype).filter(i=>i!=="constructor");Object.defineProperty(ur,"listenerAdded",{value:Yi,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(ur,"listenerRemoved",{value:wi,writable:!1,enumerable:!0,configurable:!1});function Vo(i,n){globalThis.vonage||(globalThis.vonage={}),globalThis.vonage.workerizer||(globalThis.vonage.workerizer={});let r=globalThis.vonage.workerizer;return r[i]||(r[i]=n),r[i]}const kr=Vo("globals",{});var $n=(i=>(i.INIT="INIT",i.FORWARD="FORWARD",i.TERMINATE="TERMINATE",i.GLOBALS_SYNC="GLOBALS_SYNC",i.EVENT="EVENT",i))($n||{});function Cs(i){return[ImageBitmap,ReadableStream,WritableStream].some(r=>i instanceof r)}let c2=0;function Ci(i,n,r,f,Z){const x=c2++;return i.postMessage({id:x,type:n,functionName:r,args:f},f.filter(T=>Cs(T))),new Promise(T=>{Z==null||Z.set(x,T)})}function Nr(i,n){const{id:r,type:f}=i,Z=Array.isArray(n)?n:[n];postMessage({id:r,type:f,result:n},Z.filter(x=>Cs(x)))}const Ji=Vo("workerized",{});function Ro(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function u2(){if(Ro())Nr({type:$n.GLOBALS_SYNC},kr);else{const i=[];for(const n in Ji){const{worker:r,resolvers:f}=Ji[n].workerContext;r&&i.push(Ci(r,$n.GLOBALS_SYNC,"",[kr],f))}await Promise.all(i)}}function ti(i,n){if(Array.isArray(n))n.splice(0,n.length);else if(typeof n=="object")for(const r in n)delete n[r];for(const r in i)Array.isArray(i[r])?(n[r]=[],ti(i[r],n[r])):typeof i[r]=="object"?(n[r]={},ti(i[r],n[r])):n[r]=i[r]}async function a2(i,n,r,f){const Z=new n;if(Z.addEventListener("message",async({data:H})=>{var T,J,et,lt,pt,Yt,Lt;switch(H.type){case $n.GLOBALS_SYNC:H.id?((J=r.get((T=H.id)!=null?T:-1))==null||J(H.result),r.delete((et=H.id)!=null?et:-1)):(ti((lt=H.result)!=null?lt:{},kr),await u2());break;case $n.EVENT:const{result:at}=H,dt=at;if((dt==null?void 0:dt.name)==null)throw"Missing event name";f(dt.name,dt.data);break;default:(Yt=r.get((pt=H.id)!=null?pt:-1))==null||Yt(H.result),r.delete((Lt=H.id)!=null?Lt:-1)}}),!await Ci(Z,$n.INIT,"",[i.workerId,kr],r))throw"Failed to instantiate workerized class";return Z}const ar=new WeakMap,Wr=new WeakMap,ir=new WeakMap,ki=Symbol("anyProducer"),Js=Promise.resolve(),Ni=Symbol("listenerAdded"),Ei=Symbol("listenerRemoved");let Ui=!1,Io=!1;function Er(i){if(typeof i!="string"&&typeof i!="symbol"&&typeof i!="number")throw new TypeError("`eventName` must be a string, symbol, or number")}function Bi(i){if(typeof i!="function")throw new TypeError("listener must be a function")}function Ur(i,n){const r=Wr.get(i);if(!!r.has(n))return r.get(n)}function ei(i,n){const r=typeof n=="string"||typeof n=="symbol"||typeof n=="number"?n:ki,f=ir.get(i);if(!!f.has(r))return f.get(r)}function d2(i,n,r){const f=ir.get(i);if(f.has(n))for(const Z of f.get(n))Z.enqueue(r);if(f.has(ki)){const Z=Promise.all([n,r]);for(const x of f.get(ki))x.enqueue(Z)}}function ks(i,n){n=Array.isArray(n)?n:[n];let r=!1,f=()=>{},Z=[];const x={enqueue(H){Z.push(H),f()},finish(){r=!0,f()}};for(const H of n){let T=ei(i,H);T||(T=new Set,ir.get(i).set(H,T)),T.add(x)}return{async next(){return Z?Z.length===0?r?(Z=void 0,this.next()):(await new Promise(H=>{f=H}),this.next()):{done:!1,value:await Z.shift()}:{done:!0}},async return(H){Z=void 0;for(const T of n){const J=ei(i,T);J&&(J.delete(x),J.size===0&&ir.get(i).delete(T))}return f(),arguments.length>0?{done:!0,value:await H}:{done:!0}},[Symbol.asyncIterator](){return this}}}function Ns(i){if(i===void 0)return Es;if(!Array.isArray(i))throw new TypeError("`methodNames` must be an array of strings");for(const n of i)if(!Es.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return i}const Br=i=>i===Ni||i===Ei;function Ki(i,n,r){if(Br(n))try{Ui=!0,i.emit(n,r)}finally{Ui=!1}}class Vr{static mixin(n,r){return r=Ns(r),f=>{if(typeof f!="function")throw new TypeError("`target` must be function");for(const H of r)if(f.prototype[H]!==void 0)throw new Error(`The property \`${H}\` already exists on \`target\``);function Z(){return Object.defineProperty(this,n,{enumerable:!1,value:new Vr}),this[n]}Object.defineProperty(f.prototype,n,{enumerable:!1,get:Z});const x=H=>function(...T){return this[n][H](...T)};for(const H of r)Object.defineProperty(f.prototype,H,{enumerable:!1,value:x(H)});return f}}static get isDebugEnabled(){var n,r;if(typeof((n=globalThis.process)==null?void 0:n.env)!="object")return Io;const{env:f}=(r=globalThis.process)!=null?r:{env:{}};return f.DEBUG==="emittery"||f.DEBUG==="*"||Io}static set isDebugEnabled(n){Io=n}constructor(n={}){var r;ar.set(this,new Set),Wr.set(this,new Map),ir.set(this,new Map),ir.get(this).set(ki,new Set),this.debug=(r=n.debug)!=null?r:{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(f,Z,x,H)=>{try{H=JSON.stringify(H)}catch{H=`Object with the following keys failed to stringify: ${Object.keys(H).join(",")}`}(typeof x=="symbol"||typeof x=="number")&&(x=x.toString());const T=new Date,J=`${T.getHours()}:${T.getMinutes()}:${T.getSeconds()}.${T.getMilliseconds()}`;console.log(`[${J}][emittery:${f}][${Z}] Event Name: ${x}
|
|
123
|
+
data: ${H}`)})}logIfDebugEnabled(n,r,f){(Vr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,f)}on(n,r){Bi(r),n=Array.isArray(n)?n:[n];for(const f of n){Er(f);let Z=Ur(this,f);Z||(Z=new Set,Wr.get(this).set(f,Z)),Z.add(r),this.logIfDebugEnabled("subscribe",f,void 0),Br(f)||Ki(this,Ni,{eventName:f,listener:r})}return this.off.bind(this,n,r)}off(n,r){Bi(r),n=Array.isArray(n)?n:[n];for(const f of n){Er(f);const Z=Ur(this,f);Z&&(Z.delete(r),Z.size===0&&Wr.get(this).delete(f)),this.logIfDebugEnabled("unsubscribe",f,void 0),Br(f)||Ki(this,Ei,{eventName:f,listener:r})}}once(n){let r;const f=new Promise(Z=>{r=this.on(n,x=>{r(),Z(x)})});return f.off=r,f}events(n){n=Array.isArray(n)?n:[n];for(const r of n)Er(r);return ks(this,n)}async emit(n,r){var f;if(Er(n),Br(n)&&!Ui)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emit",n,r),d2(this,n,r);const Z=(f=Ur(this,n))!=null?f:new Set,x=ar.get(this),H=[...Z],T=Br(n)?[]:[...x];await Js,await Promise.all([...H.map(async J=>{if(Z.has(J))return J(r)}),...T.map(async J=>{if(x.has(J))return J(n,r)})])}async emitSerial(n,r){var f;if(Er(n),Br(n)&&!Ui)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emitSerial",n,r);const Z=(f=Ur(this,n))!=null?f:new Set,x=ar.get(this),H=[...Z],T=[...x];await Js;for(const J of H)Z.has(J)&&await J(r);for(const J of T)x.has(J)&&await J(n,r)}onAny(n){return Bi(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),ar.get(this).add(n),Ki(this,Ni,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return ks(this)}offAny(n){Bi(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),Ki(this,Ei,{listener:n}),ar.get(this).delete(n)}clearListeners(n){n=Array.isArray(n)?n:[n];for(const r of n)if(this.logIfDebugEnabled("clear",r,void 0),typeof r=="string"||typeof r=="symbol"||typeof r=="number"){const f=Ur(this,r);f&&f.clear();const Z=ei(this,r);if(Z){for(const x of Z)x.finish();Z.clear()}}else{ar.get(this).clear();for(const[f,Z]of Wr.get(this).entries())Z.clear(),Wr.get(this).delete(f);for(const[f,Z]of ir.get(this).entries()){for(const x of Z)x.finish();Z.clear(),ir.get(this).delete(f)}}}listenerCount(n){var r,f,Z,x,H,T;n=Array.isArray(n)?n:[n];let J=0;for(const et of n){if(typeof et=="string"){J+=ar.get(this).size+((f=(r=Ur(this,et))==null?void 0:r.size)!=null?f:0)+((x=(Z=ei(this,et))==null?void 0:Z.size)!=null?x:0)+((T=(H=ei(this))==null?void 0:H.size)!=null?T:0);continue}typeof et<"u"&&Er(et),J+=ar.get(this).size;for(const lt of Wr.get(this).values())J+=lt.size;for(const lt of ir.get(this).values())J+=lt.size}return J}bindMethods(n,r){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");r=Ns(r);for(const f of r){if(n[f]!==void 0)throw new Error(`The property \`${f}\` already exists on \`target\``);Object.defineProperty(n,f,{enumerable:!1,value:this[f].bind(this)})}}}const Es=Object.getOwnPropertyNames(Vr.prototype).filter(i=>i!=="constructor");Object.defineProperty(Vr,"listenerAdded",{value:Ni,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(Vr,"listenerRemoved",{value:Ei,writable:!1,enumerable:!0,configurable:!1});function h2(i){return i.onAny&&i.emit}function f2(i){return i.prototype.onAny&&i.prototype.emit}let m2=0;async function p2(i,n,r){const Z=f2(i)?new Vr:{},x=m2++;return Object.getOwnPropertyNames(i.prototype).forEach(H=>{Z[H]=(...T)=>Ci(n,$n.FORWARD,H,T,r)}),Z.terminate=async(...H)=>{const T=await Ci(n,$n.TERMINATE,"",H,r);return delete Ji[x],n.terminate(),Z.workerContext.worker=void 0,T},Z.workerContext={id:x,worker:n,resolvers:r},Ji[x]=Z,Z}async function b2(i,n){const r=new Map;let f;const Z=await a2(i,n,r,(x,H)=>{f!=null&&f.emit&&(f==null||f.emit(x,H))});return f=await p2(i,Z,r),f}async function y2(i,n){const{functionName:r,args:f}=i;if(!n.instance)throw"instance not initialized";if(!r)throw"missing function name to call";if(!n.instance[r])throw`undefined function [${r}] in class ${n.instance.constructor.workerId}`;Nr(i,await n.instance[r](...f!=null?f:[]))}const Us=Vo("registeredWorkers",{});function g2(i,n){n.workerId=i,Ro()&&(Us[n.workerId]=n)}function Z2(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,f]=i.args,Z=Us[r];if(Z)n.instance=new Z(i.args.slice(1));else throw`unknown worker class ${r}`;ti(f,kr),h2(n.instance)&&n.instance.onAny((x,H)=>{Nr({type:$n.EVENT},{name:x,data:H})}),Nr(i,typeof n.instance!==void 0)}async function v2(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let f;n.instance.terminate&&(f=await n.instance.terminate(...r!=null?r:[])),Nr(i,f)}function G2(i){if(!i.args)throw"Missing globals while syncing";ti(i.args[0],kr),Nr(i,{})}function X2(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case $n.INIT:Z2(r,i);break;case $n.FORWARD:y2(r,i);break;case $n.TERMINATE:v2(r,i);break;case $n.GLOBALS_SYNC:G2(r);break}}}Ro()&&X2();class Bs{static async createVideoReadable(n){return new Promise((r,f)=>{const Z=document.createElement("video");let x=new AbortController,H=new AbortController;Z.addEventListener("canplay",()=>{x.abort(),Z.muted=!0,Z.loop=!0,Z.play().then(()=>{try{const T=Z.captureStream(),J=new MediaStreamTrackProcessor(T.getVideoTracks()[0]);r(J.readable)}catch(T){f(T)}})},{once:!0,signal:H.signal}),Z.addEventListener("error",T=>{H.abort(),f("loading error:"+T)},{once:!0,signal:x.signal}),Z.crossOrigin="anonymous",Z.src=n})}static async createImageCanvas(n){const f=await(await fetch(n)).blob();return await createImageBitmap(f)}}var W2=Object.defineProperty,V2=(i,n,r)=>n in i?W2(i,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[n]=r,R2=(i,n,r)=>(V2(i,typeof n!="symbol"?n+"":n,r),r);const I2="hlg.tokbox.com/prod/logging/vcp_webrtc",x2="https://",S2=1e4;let Mi;const T2=new Uint8Array(16);function Y2(){if(!Mi&&(Mi=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!Mi))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Mi(T2)}const Kn=[];for(let i=0;i<256;++i)Kn.push((i+256).toString(16).slice(1));function w2(i,n=0){return(Kn[i[n+0]]+Kn[i[n+1]]+Kn[i[n+2]]+Kn[i[n+3]]+"-"+Kn[i[n+4]]+Kn[i[n+5]]+"-"+Kn[i[n+6]]+Kn[i[n+7]]+"-"+Kn[i[n+8]]+Kn[i[n+9]]+"-"+Kn[i[n+10]]+Kn[i[n+11]]+Kn[i[n+12]]+Kn[i[n+13]]+Kn[i[n+14]]+Kn[i[n+15]]).toLowerCase()}const L2=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),Ks={randomUUID:L2};function H2(i,n,r){if(Ks.randomUUID&&!n&&!i)return Ks.randomUUID();i=i||{};const f=i.random||(i.rng||Y2)();if(f[6]=f[6]&15|64,f[8]=f[8]&63|128,n){r=r||0;for(let Z=0;Z<16;++Z)n[r+Z]=f[Z];return n}return w2(f)}function xo(i,n){globalThis.vonage||(globalThis.vonage={}),globalThis.vonage.workerizer||(globalThis.vonage.workerizer={});let r=globalThis.vonage.workerizer;return r[i]||(r[i]=n),r[i]}const dr=xo("globals",{});var Rr=(i=>(i.INIT="INIT",i.FORWARD="FORWARD",i.TERMINATE="TERMINATE",i.GLOBALS_SYNC="GLOBALS_SYNC",i))(Rr||{});function Ms(i){return[ImageBitmap,ReadableStream,WritableStream].some(n=>i instanceof n)}let F2=0;function C2(i,n,r,f,Z){const x=F2++;return i.postMessage({id:x,type:n,functionName:r,args:f},f.filter(H=>Ms(H))),new Promise(H=>{Z==null||Z.set(x,H)})}function ni(i,n){const{id:r,type:f}=i,Z=Array.isArray(n)?n:[n];postMessage({id:r,type:f,result:n},Z.filter(x=>Ms(x)))}const As=xo("workerized",{});function zs(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function J2(){if(zs())ni({type:Rr.GLOBALS_SYNC},dr);else{const i=[];for(const n in As){const{worker:r,resolvers:f}=As[n].workerContext;r&&i.push(C2(r,Rr.GLOBALS_SYNC,"",[dr],f))}await Promise.all(i)}}function Ai(i,n){if(Array.isArray(n))n.splice(0,n.length);else if(typeof n=="object")for(const r in n)delete n[r];for(const r in i)Array.isArray(i[r])?(n[r]=[],Ai(i[r],n[r])):typeof i[r]=="object"?(n[r]={},Ai(i[r],n[r])):n[r]=i[r]}async function k2(i,n){const{functionName:r,args:f}=i;if(!n.instance)throw"instance not initialized";if(!r)throw"missing function name to call";if(!n.instance[r])throw`undefined function [${r}] in class ${n.instance.constructor.workerId}`;ni(i,await n.instance[r](...f!=null?f:[]))}const N2=xo("registeredWorkers",{});function E2(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,f]=i.args,Z=N2[r];if(Z)n.instance=new Z(i.args.slice(1));else throw`unknown worker class ${r}`;Ai(f,dr),ni(i,typeof n.instance!==void 0)}async function U2(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let f;n.instance.terminate&&(f=await n.instance.terminate(...r!=null?r:[])),ni(i,f)}function B2(i){if(!i.args)throw"Missing globals while syncing";Ai(i.args[0],dr),ni(i,{})}function K2(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case Rr.INIT:E2(r,i);break;case Rr.FORWARD:k2(r,i);break;case Rr.TERMINATE:U2(r,i);break;case Rr.GLOBALS_SYNC:B2(r);break}}}zs()&&K2();function M2(i,n){return dr[i]||(dr[i]=n),[()=>dr[i],async r=>{dr[i]=r,await J2()}]}function A2(i,n){return M2(i,n)}const[z2,$3]=A2("metadata");function So(){return z2()}class j2{constructor(n){R2(this,"uuid",H2()),this.config=n}async send(n){var r,f,Z;const{appId:x,sourceType:H}=(r=So())!=null?r:{};if(!x||!H)return"metadata missing";const T=new AbortController,J=setTimeout(()=>T.abort(),S2);return await((Z=(f=this.config)==null?void 0:f.fetch)!=null?Z:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(n)),signal:T.signal}),clearTimeout(J),"success"}getUrl(){var n;let r=(n=So().proxyUrl)!=null?n:x2;return r+=(r.at(-1)==="/"?"":"/")+I2,r}getHeaders(){return{"Content-Type":"application/json"}}buildReport(n){const r=So();return{guid:this.uuid,...n,applicationId:r.appId,timestamp:Date.now(),proxyUrl:r.proxyUrl,source:r.sourceType}}}const P2="5.1.2";class To{constructor(){gt(this,"canvas");gt(this,"context");const n=new OffscreenCanvas(0,0),r=n.getContext("2d");if(!r)throw"Fail to retrieve webgl2 context";this.canvas=n,this.context=r}setFlickeringOptions(n){}enablePostProcessing(){}disablePostProcessing(){}async profileWebgl(n){return[]}async render(n,r){return this.canvas}resizeCanvas(n){const{width:r,height:f}=n;this.canvas.width=r,this.canvas.height=f}renderSilhouette(n,r,f="none"){const{width:Z,height:x}=n;this.context.save(),this.context.drawImage(r,0,0,r.width,r.height,0,0,Z,x),this.context.globalCompositeOperation="source-in",this.context.filter=f,this.context.drawImage(n,0,0,Z,x,0,0,this.canvas.width,this.canvas.height),this.context.restore()}}class O2 extends To{constructor(n){super(),this.radius=n}async render(n,r){return super.resizeCanvas(n),this.renderSilhouette(n,r),this.context.save(),this.context.filter=`blur(${this.radius}px)`,this.context.globalCompositeOperation="destination-over",this.context.drawImage(n,0,0,n.width,n.height),this.context.restore(),super.render(n,r)}}class _2 extends To{constructor(n){super(),this.radius=n}async render(n,r){return super.resizeCanvas(n),this.renderSilhouette(n,r,`blur(${this.radius}px)`),this.context.save(),this.context.filter="none",this.context.globalCompositeOperation="destination-over",this.context.drawImage(n,0,0,n.width,n.height),this.context.restore(),super.render(n,r)}}class Q2 extends To{constructor(){super(...arguments);gt(this,"backgroundImage")}setBackgroundImage(r){this.backgroundImage=r}async render(r,f){return super.resizeCanvas(r),this.renderSilhouette(r,f),this.backgroundImage&&(this.context.save(),this.context.filter="none",this.context.globalCompositeOperation="destination-over",this.context.drawImage(this.backgroundImage,0,0,this.backgroundImage.width,this.backgroundImage.height,0,0,r.width,r.height),this.context.restore()),super.render(r,f)}}/* @license twgl.js 5.5.1 Copyright (c) 2015, Gregg Tavares All Rights Reserved.
|
|
124
124
|
Available via the MIT license.
|
|
125
|
-
see: http://github.com/greggman/twgl.js for details */const Lo=5120,ri=5121,Yo=5122,wo=5123,Ho=5124,Fo=5125,Co=5126,Dc=32819,$c=32820,qc=33635,tu=5131,eu=33640,nu=35899,ru=35902,iu=36269,ou=34042,js={};{const i=js;i[Lo]=Int8Array,i[ri]=Uint8Array,i[Yo]=Int16Array,i[wo]=Uint16Array,i[Ho]=Int32Array,i[Fo]=Uint32Array,i[Co]=Float32Array,i[Dc]=Uint16Array,i[$c]=Uint16Array,i[qc]=Uint16Array,i[tu]=Uint16Array,i[eu]=Uint32Array,i[nu]=Uint32Array,i[ru]=Uint32Array,i[iu]=Uint32Array,i[ou]=Uint32Array}function Jo(i){if(i instanceof Int8Array)return Lo;if(i instanceof Uint8Array||i instanceof Uint8ClampedArray)return ri;if(i instanceof Int16Array)return Yo;if(i instanceof Uint16Array)return wo;if(i instanceof Int32Array)return Ho;if(i instanceof Uint32Array)return Fo;if(i instanceof Float32Array)return Co;throw new Error("unsupported typed array type")}function Os(i){if(i===Int8Array)return Lo;if(i===Uint8Array||i===Uint8ClampedArray)return ri;if(i===Int16Array)return Yo;if(i===Uint16Array)return wo;if(i===Int32Array)return Ho;if(i===Uint32Array)return Fo;if(i===Float32Array)return Co;throw new Error("unsupported typed array type")}function Ps(i){const n=js[i];if(!n)throw new Error("unknown gl type");return n}const zi=typeof SharedArrayBuffer<"u"?function(n){return n&&n.buffer&&(n.buffer instanceof ArrayBuffer||n.buffer instanceof SharedArrayBuffer)}:function(n){return n&&n.buffer&&n.buffer instanceof ArrayBuffer};function _s(...i){console.error(...i)}const Qs=new Map;function ji(i,n){if(!i||typeof i!="object")return!1;let r=Qs.get(n);r||(r=new WeakMap,Qs.set(n,r));let f=r.get(i);if(f===void 0){const Z=Object.prototype.toString.call(i);f=Z.substring(8,Z.length-1)===n,r.set(i,f)}return f}function su(i,n){return typeof WebGLBuffer<"u"&&ji(n,"WebGLBuffer")}function lu(i,n){return typeof WebGLRenderbuffer<"u"&&ji(n,"WebGLRenderbuffer")}function ko(i,n){return typeof WebGLTexture<"u"&&ji(n,"WebGLTexture")}function cu(i,n){return typeof WebGLSampler<"u"&&ji(n,"WebGLSampler")}const Ds=35044,Ir=34962,uu=34963,au=34660,du=5120,hu=5121,fu=5122,mu=5123,pu=5124,bu=5125,$s=5126,qs={attribPrefix:""};function yu(i,n,r,f,Z){i.bindBuffer(n,r),i.bufferData(n,f,Z||Ds)}function tl(i,n,r,f){if(su(i,n))return n;r=r||Ir;const Z=i.createBuffer();return yu(i,r,Z,n,f),Z}function el(i){return i==="indices"}function gu(i){return i===Int8Array||i===Uint8Array}function Zu(i){return i.length?i:i.data}const vu=/coord|texture/i,Gu=/color|colour/i;function Xu(i,n){let r;if(vu.test(i)?r=2:Gu.test(i)?r=4:r=3,n%r>0)throw new Error(`Can not guess numComponents for attribute '${i}'. Tried ${r} but ${n} values is not evenly divisible by ${r}. You should specify it.`);return r}function Vu(i,n,r){return i.numComponents||i.size||Xu(n,r||Zu(i).length)}function nl(i,n){if(zi(i))return i;if(zi(i.data))return i.data;Array.isArray(i)&&(i={data:i});let r=i.type?No(i.type):void 0;return r||(el(n)?r=Uint16Array:r=Float32Array),new r(i.data)}function Wu(i){return typeof i=="number"?i:i?Os(i):$s}function No(i){return typeof i=="number"?Ps(i):i||Float32Array}function Ru(i,n){return{buffer:n.buffer,numValues:2*3*4,type:Wu(n.type),arrayType:No(n.type)}}function Iu(i,n){const r=n.data||n,f=No(n.type),Z=r*f.BYTES_PER_ELEMENT,x=i.createBuffer();return i.bindBuffer(Ir,x),i.bufferData(Ir,Z,n.drawType||Ds),{buffer:x,numValues:r,type:Os(f),arrayType:f}}function xu(i,n,r){const f=nl(n,r);return{arrayType:f.constructor,buffer:tl(i,f,void 0,n.drawType),type:Jo(f),numValues:0}}function Su(i,n){const r={};return Object.keys(n).forEach(function(f){if(!el(f)){const Z=n[f],x=Z.attrib||Z.name||Z.attribName||qs.attribPrefix+f;if(Z.value){if(!Array.isArray(Z.value)&&!zi(Z.value))throw new Error("array.value is not array or typedarray");r[x]={value:Z.value}}else{let H;Z.buffer&&Z.buffer instanceof WebGLBuffer?H=Ru:typeof Z=="number"||typeof Z.data=="number"?H=Iu:H=xu;const{buffer:T,type:J,numValues:et,arrayType:lt}=H(i,Z,f),pt=Z.normalize!==void 0?Z.normalize:gu(lt),Lt=Vu(Z,f,et);r[x]={buffer:T,numComponents:Lt,type:J,normalize:pt,stride:Z.stride||0,offset:Z.offset||0,divisor:Z.divisor===void 0?void 0:Z.divisor,drawType:Z.drawType}}}}),i.bindBuffer(Ir,null),r}function Tu(i,n){return n===du||n===hu?1:n===fu||n===mu?2:n===pu||n===bu||n===$s?4:0}const Eo=["position","positions","a_position"];function Lu(i,n){let r,f;for(f=0;f<Eo.length&&(r=Eo[f],!(r in n||(r=qs.attribPrefix+r,r in n)));++f);f===Eo.length&&(r=Object.keys(n)[0]);const Z=n[r];if(!Z.buffer)return 1;i.bindBuffer(Ir,Z.buffer);const x=i.getBufferParameter(Ir,au);i.bindBuffer(Ir,null);const H=Tu(i,Z.type),T=x/H,J=Z.numComponents||Z.size,et=T/J;if(et%1!==0)throw new Error(`numComponents ${J} not correct for length ${length}`);return et}function Yu(i,n,r){const f=Su(i,n),Z=Object.assign({},r||{});Z.attribs=Object.assign({},r?r.attribs:{},f);const x=n.indices;if(x){const H=nl(x,"indices");Z.indices=tl(i,H,uu),Z.numElements=H.length,Z.elementType=Jo(H)}else Z.numElements||(Z.numElements=Lu(i,Z.attribs));return Z}function ii(i){return!!i.texStorage2D}const rl=function(){const i={},n={};function r(f){const Z=f.constructor.name;if(!i[Z]){for(const x in f)if(typeof f[x]=="number"){const H=n[f[x]];n[f[x]]=H?`${H} | ${x}`:x}i[Z]=!0}}return function(Z,x){return r(Z),n[x]||(typeof x=="number"?`0x${x.toString(16)}`:x)}}(),hr={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},oi=zi,il=function(){let i;return function(){return i=i||(typeof document<"u"&&document.createElement?document.createElement("canvas").getContext("2d"):null),i}}(),ol=6406,er=6407,Gn=6408,sl=6409,ll=6410,si=6402,cl=34041,Oi=33071,wu=9728,Hu=9729,fr=3553,mr=34067,xr=32879,Sr=35866,Uo=34069,Fu=34070,Cu=34071,Ju=34072,ku=34073,Nu=34074,Ko=10241,Bo=10240,Pi=10242,_i=10243,ul=32882,Eu=33082,Uu=33083,Ku=33084,Bu=33085,Mu=34892,Au=34893,Mo=3317,al=3314,dl=32878,hl=3316,fl=3315,ml=32877,zu=37443,ju=37441,Ou=37440,Pu=33321,_u=36756,Qu=33325,Du=33326,$u=33330,qu=33329,t1=33338,e1=33337,n1=33340,r1=33339,i1=33323,o1=36757,s1=33327,l1=33328,c1=33336,u1=33335,a1=33332,d1=33331,h1=33334,f1=33333,m1=32849,p1=35905,b1=36194,y1=36758,g1=35898,Z1=35901,v1=34843,G1=34837,X1=36221,V1=36239,W1=36215,R1=36233,I1=36209,x1=36227,S1=32856,T1=35907,L1=36759,Y1=32855,w1=32854,H1=32857,F1=34842,C1=34836,J1=36220,k1=36238,N1=36975,E1=36214,U1=36232,K1=36226,B1=36208,M1=33189,A1=33190,z1=36012,j1=36013,O1=35056,pr=5120,gn=5121,Qi=5122,Br=5123,Di=5124,Tr=5125,An=5126,pl=32819,bl=32820,yl=33635,qn=5131,li=36193,Ao=33640,P1=35899,_1=35902,Q1=36269,D1=34042,$i=33319,Mr=33320,qi=6403,Ar=36244,zr=36248,Lr=36249;let zo;function to(i){if(!zo){const n={};n[ol]={textureFormat:ol,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[gn,qn,li,An]},n[sl]={textureFormat:sl,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[gn,qn,li,An]},n[ll]={textureFormat:ll,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[gn,qn,li,An]},n[er]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[gn,qn,li,An,yl]},n[Gn]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[gn,qn,li,An,pl,bl]},n[si]={textureFormat:si,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Tr,Br]},n[Pu]={textureFormat:qi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[gn]},n[_u]={textureFormat:qi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[pr]},n[Qu]={textureFormat:qi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[An,qn]},n[Du]={textureFormat:qi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[An]},n[$u]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[gn]},n[qu]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[pr]},n[a1]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Br]},n[d1]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Qi]},n[h1]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Tr]},n[f1]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Di]},n[i1]={textureFormat:$i,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[gn]},n[o1]={textureFormat:$i,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[pr]},n[s1]={textureFormat:$i,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[An,qn]},n[l1]={textureFormat:$i,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[An]},n[c1]={textureFormat:Mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[gn]},n[u1]={textureFormat:Mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[pr]},n[t1]={textureFormat:Mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Br]},n[e1]={textureFormat:Mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Qi]},n[n1]={textureFormat:Mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Tr]},n[r1]={textureFormat:Mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Di]},n[m1]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[gn]},n[p1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[gn]},n[b1]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[gn,yl]},n[y1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[pr]},n[g1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[An,qn,P1]},n[Z1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[An,qn,_1]},n[v1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[An,qn]},n[G1]={textureFormat:er,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[An]},n[X1]={textureFormat:zr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[gn]},n[V1]={textureFormat:zr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[pr]},n[W1]={textureFormat:zr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Br]},n[R1]={textureFormat:zr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Qi]},n[I1]={textureFormat:zr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Tr]},n[x1]={textureFormat:zr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Di]},n[S1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[gn]},n[T1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[gn]},n[L1]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[pr]},n[Y1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[gn,bl,Ao]},n[w1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[gn,pl]},n[H1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Ao]},n[F1]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[An,qn]},n[C1]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[An]},n[J1]={textureFormat:Lr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[gn]},n[k1]={textureFormat:Lr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[pr]},n[N1]={textureFormat:Lr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Ao]},n[E1]={textureFormat:Lr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Br]},n[U1]={textureFormat:Lr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Qi]},n[K1]={textureFormat:Lr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Di]},n[B1]={textureFormat:Lr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Tr]},n[M1]={textureFormat:si,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Br,Tr]},n[A1]={textureFormat:si,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Tr]},n[z1]={textureFormat:si,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[An]},n[O1]={textureFormat:cl,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[D1]},n[j1]={textureFormat:cl,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Q1]},Object.keys(n).forEach(function(r){const f=n[r];f.bytesPerElementMap={},f.bytesPerElement.forEach(function(Z,x){const H=f.type[x];f.bytesPerElementMap[H]=Z})}),zo=n}return zo[i]}function $1(i,n){const r=to(i);if(!r)throw"unknown internal format";const f=r.bytesPerElementMap[n];if(f===void 0)throw"unknown internal format";return f}function ci(i){const n=to(i);if(!n)throw"unknown internal format";return{format:n.textureFormat,type:n.type[0]}}function gl(i){return(i&i-1)===0}function q1(i,n,r,f){if(!ii(i))return gl(n)&&gl(r);const Z=to(f);if(!Z)throw"unknown internal format";return Z.colorRenderable&&Z.textureFilterable}function ta(i){const n=to(i);if(!n)throw"unknown internal format";return n.textureFilterable}function ea(i,n,r){return oi(n)?Jo(n):r||gn}function eo(i,n,r,f,Z){if(Z%1!==0)throw"can't guess dimensions";if(!r&&!f){const x=Math.sqrt(Z/(n===mr?6:1));x%1===0?(r=x,f=x):(r=Z,f=1)}else if(f){if(!r&&(r=Z/f,r%1))throw"can't guess dimensions"}else if(f=Z/r,f%1)throw"can't guess dimensions";return{width:r,height:f}}function jr(i,n){n.colorspaceConversion!==void 0&&i.pixelStorei(zu,n.colorspaceConversion),n.premultiplyAlpha!==void 0&&i.pixelStorei(ju,n.premultiplyAlpha),n.flipY!==void 0&&i.pixelStorei(Ou,n.flipY)}function Zl(i){i.pixelStorei(Mo,4),ii(i)&&(i.pixelStorei(al,0),i.pixelStorei(dl,0),i.pixelStorei(hl,0),i.pixelStorei(fl,0),i.pixelStorei(ml,0))}function na(i,n,r,f){f.minMag&&(r.call(i,n,Ko,f.minMag),r.call(i,n,Bo,f.minMag)),f.min&&r.call(i,n,Ko,f.min),f.mag&&r.call(i,n,Bo,f.mag),f.wrap&&(r.call(i,n,Pi,f.wrap),r.call(i,n,_i,f.wrap),(n===xr||cu(i,n))&&r.call(i,n,ul,f.wrap)),f.wrapR&&r.call(i,n,ul,f.wrapR),f.wrapS&&r.call(i,n,Pi,f.wrapS),f.wrapT&&r.call(i,n,_i,f.wrapT),f.minLod!==void 0&&r.call(i,n,Eu,f.minLod),f.maxLod!==void 0&&r.call(i,n,Uu,f.maxLod),f.baseLevel!==void 0&&r.call(i,n,Ku,f.baseLevel),f.maxLevel!==void 0&&r.call(i,n,Bu,f.maxLevel),f.compareFunc!==void 0&&r.call(i,n,Au,f.compareFunc),f.compareMode!==void 0&&r.call(i,n,Mu,f.compareMode)}function vl(i,n,r){const f=r.target||fr;i.bindTexture(f,n),na(i,f,i.texParameteri,r)}function ra(i){return i=i||hr.textureColor,oi(i)?i:new Uint8Array([i[0]*255,i[1]*255,i[2]*255,i[3]*255])}function jo(i,n,r,f,Z,x){r=r||hr.textureOptions,x=x||Gn;const H=r.target||fr;if(f=f||r.width,Z=Z||r.height,i.bindTexture(H,n),q1(i,f,Z,x))i.generateMipmap(H);else{const T=ta(x)?Hu:wu;i.texParameteri(H,Ko,T),i.texParameteri(H,Bo,T),i.texParameteri(H,Pi,Oi),i.texParameteri(H,_i,Oi)}}function ui(i){return i.auto===!0||i.auto===void 0&&i.level===void 0}function Oo(i,n){return n=n||{},n.cubeFaceOrder||[Uo,Fu,Cu,Ju,ku,Nu]}function Po(i,n){const f=Oo(i,n).map(function(Z,x){return{face:Z,ndx:x}});return f.sort(function(Z,x){return Z.face-x.face}),f}function Gl(i,n,r,f){f=f||hr.textureOptions;const Z=f.target||fr,x=f.level||0;let H=r.width,T=r.height;const J=f.internalFormat||f.format||Gn,et=ci(J),lt=f.format||et.format,pt=f.type||et.type;if(jr(i,f),i.bindTexture(Z,n),Z===mr){const Lt=r.width,wt=r.height;let at,dt;if(Lt/6===wt)at=wt,dt=[0,0,1,0,2,0,3,0,4,0,5,0];else if(wt/6===Lt)at=Lt,dt=[0,0,0,1,0,2,0,3,0,4,0,5];else if(Lt/3===wt/2)at=Lt/3,dt=[0,0,1,0,2,0,0,1,1,1,2,1];else if(Lt/2===wt/3)at=Lt/2,dt=[0,0,1,0,0,1,1,1,0,2,1,2];else throw"can't figure out cube map from element: "+(r.src?r.src:r.nodeName);const Kt=il();Kt?(Kt.canvas.width=at,Kt.canvas.height=at,H=at,T=at,Po(i,f).forEach(function(Nt){const ee=dt[Nt.ndx*2+0]*at,P=dt[Nt.ndx*2+1]*at;Kt.drawImage(r,ee,P,at,at,0,0,at,at),i.texImage2D(Nt.face,x,J,lt,pt,Kt.canvas)}),Kt.canvas.width=1,Kt.canvas.height=1):typeof createImageBitmap<"u"&&(H=at,T=at,Po(i,f).forEach(function(Nt){const ee=dt[Nt.ndx*2+0]*at,P=dt[Nt.ndx*2+1]*at;i.texImage2D(Nt.face,x,J,at,at,0,lt,pt,null),createImageBitmap(r,ee,P,at,at,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then(function($e){jr(i,f),i.bindTexture(Z,n),i.texImage2D(Nt.face,x,J,lt,pt,$e),ui(f)&&jo(i,n,f,H,T,J)})}))}else if(Z===xr||Z===Sr){const Lt=Math.min(r.width,r.height),wt=Math.max(r.width,r.height),at=wt/Lt;if(at%1!==0)throw"can not compute 3D dimensions of element";const dt=r.width===wt?1:0,Kt=r.height===wt?1:0;i.pixelStorei(Mo,1),i.pixelStorei(al,r.width),i.pixelStorei(dl,0),i.pixelStorei(ml,0),i.texImage3D(Z,x,J,Lt,Lt,Lt,0,lt,pt,null);for(let Nt=0;Nt<at;++Nt){const ee=Nt*Lt*dt,P=Nt*Lt*Kt;i.pixelStorei(hl,ee),i.pixelStorei(fl,P),i.texSubImage3D(Z,x,0,0,Nt,Lt,Lt,1,lt,pt,r)}Zl(i)}else i.texImage2D(Z,x,J,lt,pt,r);ui(f)&&jo(i,n,f,H,T,J),vl(i,n,f)}function ai(){}function ia(i){if(typeof document<"u"){const n=document.createElement("a");return n.href=i,n.hostname===location.hostname&&n.port===location.port&&n.protocol===location.protocol}else{const n=new URL(location.href).origin;return new URL(i,location.href).origin===n}}function oa(i,n){return n===void 0&&!ia(i)?"anonymous":n}function sa(i,n,r){r=r||ai;let f;if(n=n!==void 0?n:hr.crossOrigin,n=oa(i,n),typeof Image<"u"){f=new Image,n!==void 0&&(f.crossOrigin=n);const Z=function(){f.removeEventListener("error",x),f.removeEventListener("load",H),f=null},x=function(){const J="couldn't load image: "+i;_s(J),r(J,f),Z()},H=function(){r(null,f),Z()};return f.addEventListener("error",x),f.addEventListener("load",H),f.src=i,f}else if(typeof ImageBitmap<"u"){let Z,x;const H=function(){r(Z,x)},T={};n&&(T.mode="cors"),fetch(i,T).then(function(J){if(!J.ok)throw J;return J.blob()}).then(function(J){return createImageBitmap(J,{premultiplyAlpha:"none",colorSpaceConversion:"none"})}).then(function(J){x=J,setTimeout(H)}).catch(function(J){Z=J,setTimeout(H)}),f=null}return f}function Xl(i){return typeof ImageBitmap<"u"&&i instanceof ImageBitmap||typeof ImageData<"u"&&i instanceof ImageData||typeof HTMLElement<"u"&&i instanceof HTMLElement}function _o(i,n,r){return Xl(i)?(setTimeout(function(){r(null,i)}),i):sa(i,n,r)}function Qo(i,n,r){r=r||hr.textureOptions;const f=r.target||fr;if(i.bindTexture(f,n),r.color===!1)return;const Z=ra(r.color);if(f===mr)for(let x=0;x<6;++x)i.texImage2D(Uo+x,0,Gn,1,1,0,Gn,gn,Z);else f===xr||f===Sr?i.texImage3D(f,0,Gn,1,1,1,0,Gn,gn,Z):i.texImage2D(f,0,Gn,1,1,0,Gn,gn,Z)}function la(i,n,r,f){return f=f||ai,r=r||hr.textureOptions,Qo(i,n,r),r=Object.assign({},r),_o(r.src,r.crossOrigin,function(x,H){x?f(x,n,H):(Gl(i,n,H,r),f(null,n,H))})}function ca(i,n,r,f){f=f||ai;const Z=r.src;if(Z.length!==6)throw"there must be 6 urls for a cubemap";const x=r.level||0,H=r.internalFormat||r.format||Gn,T=ci(H),J=r.format||T.format,et=r.type||gn,lt=r.target||fr;if(lt!==mr)throw"target must be TEXTURE_CUBE_MAP";Qo(i,n,r),r=Object.assign({},r);let pt=6;const Lt=[],wt=Oo(i,r);let at;function dt(Kt){return function(Nt,ee){--pt,Nt?Lt.push(Nt):ee.width!==ee.height?Lt.push("cubemap face img is not a square: "+ee.src):(jr(i,r),i.bindTexture(lt,n),pt===5?Oo().forEach(function(P){i.texImage2D(P,x,H,J,et,ee)}):i.texImage2D(Kt,x,H,J,et,ee),ui(r)&&i.generateMipmap(lt)),pt===0&&f(Lt.length?Lt:void 0,n,at)}}at=Z.map(function(Kt,Nt){return _o(Kt,r.crossOrigin,dt(wt[Nt]))})}function ua(i,n,r,f){f=f||ai;const Z=r.src,x=r.internalFormat||r.format||Gn,H=ci(x),T=r.format||H.format,J=r.type||gn,et=r.target||Sr;if(et!==xr&&et!==Sr)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";Qo(i,n,r),r=Object.assign({},r);let lt=Z.length;const pt=[];let Lt;const wt=r.level||0;let at=r.width,dt=r.height;const Kt=Z.length;let Nt=!0;function ee(P){return function($e,je){if(--lt,$e)pt.push($e);else{if(jr(i,r),i.bindTexture(et,n),Nt){Nt=!1,at=r.width||je.width,dt=r.height||je.height,i.texImage3D(et,wt,x,at,dt,Kt,0,T,J,null);for(let Ve=0;Ve<Kt;++Ve)i.texSubImage3D(et,wt,0,0,Ve,at,dt,1,T,J,je)}else{let Ve=je,zt;(je.width!==at||je.height!==dt)&&(zt=il(),Ve=zt.canvas,zt.canvas.width=at,zt.canvas.height=dt,zt.drawImage(je,0,0,at,dt)),i.texSubImage3D(et,wt,0,0,P,at,dt,1,T,J,Ve),zt&&Ve===zt.canvas&&(zt.canvas.width=0,zt.canvas.height=0)}ui(r)&&i.generateMipmap(et)}lt===0&&f(pt.length?pt:void 0,n,Lt)}}Lt=Z.map(function(P,$e){return _o(P,r.crossOrigin,ee($e))})}function aa(i,n,r,f){f=f||hr.textureOptions;const Z=f.target||fr;i.bindTexture(Z,n);let x=f.width,H=f.height,T=f.depth;const J=f.level||0,et=f.internalFormat||f.format||Gn,lt=ci(et),pt=f.format||lt.format,Lt=f.type||ea(i,r,lt.type);if(oi(r))r instanceof Uint8ClampedArray&&(r=new Uint8Array(r.buffer));else{const Kt=Ps(Lt);r=new Kt(r)}const wt=$1(et,Lt),at=r.byteLength/wt;if(at%1)throw"length wrong size for format: "+rl(i,pt);let dt;if(Z===xr||Z===Sr)if(!x&&!H&&!T){const Kt=Math.cbrt(at);if(Kt%1!==0)throw"can't guess cube size of array of numElements: "+at;x=Kt,H=Kt,T=Kt}else x&&(!H||!T)?(dt=eo(i,Z,H,T,at/x),H=dt.width,T=dt.height):H&&(!x||!T)?(dt=eo(i,Z,x,T,at/H),x=dt.width,T=dt.height):(dt=eo(i,Z,x,H,at/T),x=dt.width,H=dt.height);else dt=eo(i,Z,x,H,at),x=dt.width,H=dt.height;if(Zl(i),i.pixelStorei(Mo,f.unpackAlignment||1),jr(i,f),Z===mr){const Kt=wt/r.BYTES_PER_ELEMENT,Nt=at/6*Kt;Po(i,f).forEach(ee=>{const P=Nt*ee.ndx,$e=r.subarray(P,P+Nt);i.texImage2D(ee.face,J,et,x,H,0,pt,Lt,$e)})}else Z===xr||Z===Sr?i.texImage3D(Z,J,et,x,H,T,0,pt,Lt,r):i.texImage2D(Z,J,et,x,H,0,pt,Lt,r);return{width:x,height:H,depth:T,type:Lt}}function da(i,n,r){const f=r.target||fr;i.bindTexture(f,n);const Z=r.level||0,x=r.internalFormat||r.format||Gn,H=ci(x),T=r.format||H.format,J=r.type||H.type;if(jr(i,r),f===mr)for(let et=0;et<6;++et)i.texImage2D(Uo+et,Z,x,r.width,r.height,0,T,J,null);else f===xr||f===Sr?i.texImage3D(f,Z,x,r.width,r.height,r.depth,0,T,J,null):i.texImage2D(f,Z,x,r.width,r.height,0,T,J,null)}function Vl(i,n,r){r=r||ai,n=n||hr.textureOptions;const f=i.createTexture(),Z=n.target||fr;let x=n.width||1,H=n.height||1;const T=n.internalFormat||Gn;i.bindTexture(Z,f),Z===mr&&(i.texParameteri(Z,Pi,Oi),i.texParameteri(Z,_i,Oi));let J=n.src;if(J)if(typeof J=="function"&&(J=J(i,n)),typeof J=="string")la(i,f,n,r);else if(oi(J)||Array.isArray(J)&&(typeof J[0]=="number"||Array.isArray(J[0])||oi(J[0]))){const et=aa(i,f,J,n);x=et.width,H=et.height}else Array.isArray(J)&&(typeof J[0]=="string"||Xl(J[0]))?Z===mr?ca(i,f,n,r):ua(i,f,n,r):(Gl(i,f,J,n),x=J.width,H=J.height);else da(i,f,n);return ui(n)&&jo(i,f,n,x,H,T),vl(i,f,n),f}const Do=_s;function Wl(i){return typeof document<"u"&&document.getElementById?document.getElementById(i):null}const no=33984,ro=34962,ha=34963,fa=35713,ma=35714,pa=35632,ba=35633,ya=35981,Rl=35718,ga=35721,Za=35971,va=35382,Ga=35396,Xa=35398,Va=35392,Wa=35395,io=5126,Il=35664,xl=35665,Sl=35666,$o=5124,Tl=35667,Ll=35668,Yl=35669,wl=35670,Hl=35671,Fl=35672,Cl=35673,Jl=35674,kl=35675,Nl=35676,Ra=35678,Ia=35680,xa=35679,Sa=35682,Ta=35685,La=35686,Ya=35687,wa=35688,Ha=35689,Fa=35690,Ca=36289,Ja=36292,ka=36293,qo=5125,El=36294,Ul=36295,Kl=36296,Na=36298,Ea=36299,Ua=36300,Ka=36303,Ba=36306,Ma=36307,Aa=36308,za=36311,oo=3553,so=34067,ts=32879,lo=35866,be={};function Bl(i,n){return be[n].bindPoint}function ja(i,n){return function(r){i.uniform1f(n,r)}}function Oa(i,n){return function(r){i.uniform1fv(n,r)}}function Pa(i,n){return function(r){i.uniform2fv(n,r)}}function _a(i,n){return function(r){i.uniform3fv(n,r)}}function Qa(i,n){return function(r){i.uniform4fv(n,r)}}function Ml(i,n){return function(r){i.uniform1i(n,r)}}function Al(i,n){return function(r){i.uniform1iv(n,r)}}function zl(i,n){return function(r){i.uniform2iv(n,r)}}function jl(i,n){return function(r){i.uniform3iv(n,r)}}function Ol(i,n){return function(r){i.uniform4iv(n,r)}}function Da(i,n){return function(r){i.uniform1ui(n,r)}}function $a(i,n){return function(r){i.uniform1uiv(n,r)}}function qa(i,n){return function(r){i.uniform2uiv(n,r)}}function t0(i,n){return function(r){i.uniform3uiv(n,r)}}function e0(i,n){return function(r){i.uniform4uiv(n,r)}}function n0(i,n){return function(r){i.uniformMatrix2fv(n,!1,r)}}function r0(i,n){return function(r){i.uniformMatrix3fv(n,!1,r)}}function i0(i,n){return function(r){i.uniformMatrix4fv(n,!1,r)}}function o0(i,n){return function(r){i.uniformMatrix2x3fv(n,!1,r)}}function s0(i,n){return function(r){i.uniformMatrix3x2fv(n,!1,r)}}function l0(i,n){return function(r){i.uniformMatrix2x4fv(n,!1,r)}}function c0(i,n){return function(r){i.uniformMatrix4x2fv(n,!1,r)}}function u0(i,n){return function(r){i.uniformMatrix3x4fv(n,!1,r)}}function a0(i,n){return function(r){i.uniformMatrix4x3fv(n,!1,r)}}function On(i,n,r,f){const Z=Bl(i,n);return ii(i)?function(x){let H,T;!x||ko(i,x)?(H=x,T=null):(H=x.texture,T=x.sampler),i.uniform1i(f,r),i.activeTexture(no+r),i.bindTexture(Z,H),i.bindSampler(r,T)}:function(x){i.uniform1i(f,r),i.activeTexture(no+r),i.bindTexture(Z,x)}}function Pn(i,n,r,f,Z){const x=Bl(i,n),H=new Int32Array(Z);for(let T=0;T<Z;++T)H[T]=r+T;return ii(i)?function(T){i.uniform1iv(f,H),T.forEach(function(J,et){i.activeTexture(no+H[et]);let lt,pt;!J||ko(i,J)?(lt=J,pt=null):(lt=J.texture,pt=J.sampler),i.bindSampler(r,pt),i.bindTexture(x,lt)})}:function(T){i.uniform1iv(f,H),T.forEach(function(J,et){i.activeTexture(no+H[et]),i.bindTexture(x,J)})}}be[io]={Type:Float32Array,size:4,setter:ja,arraySetter:Oa},be[Il]={Type:Float32Array,size:8,setter:Pa,cols:2},be[xl]={Type:Float32Array,size:12,setter:_a,cols:3},be[Sl]={Type:Float32Array,size:16,setter:Qa,cols:4},be[$o]={Type:Int32Array,size:4,setter:Ml,arraySetter:Al},be[Tl]={Type:Int32Array,size:8,setter:zl,cols:2},be[Ll]={Type:Int32Array,size:12,setter:jl,cols:3},be[Yl]={Type:Int32Array,size:16,setter:Ol,cols:4},be[qo]={Type:Uint32Array,size:4,setter:Da,arraySetter:$a},be[El]={Type:Uint32Array,size:8,setter:qa,cols:2},be[Ul]={Type:Uint32Array,size:12,setter:t0,cols:3},be[Kl]={Type:Uint32Array,size:16,setter:e0,cols:4},be[wl]={Type:Uint32Array,size:4,setter:Ml,arraySetter:Al},be[Hl]={Type:Uint32Array,size:8,setter:zl,cols:2},be[Fl]={Type:Uint32Array,size:12,setter:jl,cols:3},be[Cl]={Type:Uint32Array,size:16,setter:Ol,cols:4},be[Jl]={Type:Float32Array,size:32,setter:n0,rows:2,cols:2},be[kl]={Type:Float32Array,size:48,setter:r0,rows:3,cols:3},be[Nl]={Type:Float32Array,size:64,setter:i0,rows:4,cols:4},be[Ta]={Type:Float32Array,size:32,setter:o0,rows:2,cols:3},be[La]={Type:Float32Array,size:32,setter:l0,rows:2,cols:4},be[Ya]={Type:Float32Array,size:48,setter:s0,rows:3,cols:2},be[wa]={Type:Float32Array,size:48,setter:u0,rows:3,cols:4},be[Ha]={Type:Float32Array,size:64,setter:c0,rows:4,cols:2},be[Fa]={Type:Float32Array,size:64,setter:a0,rows:4,cols:3},be[Ra]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:oo},be[Ia]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:so},be[xa]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:ts},be[Sa]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:oo},be[Ca]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:lo},be[Ja]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:lo},be[ka]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:so},be[Na]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:oo},be[Ea]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:ts},be[Ua]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:so},be[Ka]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:lo},be[Ba]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:oo},be[Ma]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:ts},be[Aa]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:so},be[za]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:lo};function co(i,n){return function(r){if(r.value)switch(i.disableVertexAttribArray(n),r.value.length){case 4:i.vertexAttrib4fv(n,r.value);break;case 3:i.vertexAttrib3fv(n,r.value);break;case 2:i.vertexAttrib2fv(n,r.value);break;case 1:i.vertexAttrib1fv(n,r.value);break;default:throw new Error("the length of a float constant value must be between 1 and 4!")}else i.bindBuffer(ro,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribPointer(n,r.numComponents||r.size,r.type||io,r.normalize||!1,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function br(i,n){return function(r){if(r.value)if(i.disableVertexAttribArray(n),r.value.length===4)i.vertexAttrib4iv(n,r.value);else throw new Error("The length of an integer constant value must be 4!");else i.bindBuffer(ro,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribIPointer(n,r.numComponents||r.size,r.type||$o,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function uo(i,n){return function(r){if(r.value)if(i.disableVertexAttribArray(n),r.value.length===4)i.vertexAttrib4uiv(n,r.value);else throw new Error("The length of an unsigned integer constant value must be 4!");else i.bindBuffer(ro,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribIPointer(n,r.numComponents||r.size,r.type||qo,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function es(i,n,r){const f=r.size,Z=r.count;return function(x){i.bindBuffer(ro,x.buffer);const H=x.size||x.numComponents||f,T=H/Z,J=x.type||io,lt=be[J].size*H,pt=x.normalize||!1,Lt=x.offset||0,wt=lt/Z;for(let at=0;at<Z;++at)i.enableVertexAttribArray(n+at),i.vertexAttribPointer(n+at,T,J,pt,lt,Lt+wt*at),i.vertexAttribDivisor&&i.vertexAttribDivisor(n+at,x.divisor||0)}}const wn={};wn[io]={size:4,setter:co},wn[Il]={size:8,setter:co},wn[xl]={size:12,setter:co},wn[Sl]={size:16,setter:co},wn[$o]={size:4,setter:br},wn[Tl]={size:8,setter:br},wn[Ll]={size:12,setter:br},wn[Yl]={size:16,setter:br},wn[qo]={size:4,setter:uo},wn[El]={size:8,setter:uo},wn[Ul]={size:12,setter:uo},wn[Kl]={size:16,setter:uo},wn[wl]={size:4,setter:br},wn[Hl]={size:8,setter:br},wn[Fl]={size:12,setter:br},wn[Cl]={size:16,setter:br},wn[Jl]={size:4,setter:es,count:2},wn[kl]={size:9,setter:es,count:3},wn[Nl]={size:16,setter:es,count:4};const d0=/ERROR:\s*\d+:(\d+)/gi;function h0(i,n="",r=0){const f=[...n.matchAll(d0)],Z=new Map(f.map((x,H)=>{const T=parseInt(x[1]),J=f[H+1],et=J?J.index:n.length,lt=n.substring(x.index,et);return[T-1,lt]}));return i.split(`
|
|
125
|
+
see: http://github.com/greggman/twgl.js for details */const Yo=5120,ri=5121,wo=5122,Lo=5123,Ho=5124,Fo=5125,Co=5126,D2=32819,$2=32820,q2=33635,tu=5131,eu=33640,nu=35899,ru=35902,iu=36269,ou=34042,js={};{const i=js;i[Yo]=Int8Array,i[ri]=Uint8Array,i[wo]=Int16Array,i[Lo]=Uint16Array,i[Ho]=Int32Array,i[Fo]=Uint32Array,i[Co]=Float32Array,i[D2]=Uint16Array,i[$2]=Uint16Array,i[q2]=Uint16Array,i[tu]=Uint16Array,i[eu]=Uint32Array,i[nu]=Uint32Array,i[ru]=Uint32Array,i[iu]=Uint32Array,i[ou]=Uint32Array}function Jo(i){if(i instanceof Int8Array)return Yo;if(i instanceof Uint8Array||i instanceof Uint8ClampedArray)return ri;if(i instanceof Int16Array)return wo;if(i instanceof Uint16Array)return Lo;if(i instanceof Int32Array)return Ho;if(i instanceof Uint32Array)return Fo;if(i instanceof Float32Array)return Co;throw new Error("unsupported typed array type")}function Ps(i){if(i===Int8Array)return Yo;if(i===Uint8Array||i===Uint8ClampedArray)return ri;if(i===Int16Array)return wo;if(i===Uint16Array)return Lo;if(i===Int32Array)return Ho;if(i===Uint32Array)return Fo;if(i===Float32Array)return Co;throw new Error("unsupported typed array type")}function Os(i){const n=js[i];if(!n)throw new Error("unknown gl type");return n}const zi=typeof SharedArrayBuffer<"u"?function(n){return n&&n.buffer&&(n.buffer instanceof ArrayBuffer||n.buffer instanceof SharedArrayBuffer)}:function(n){return n&&n.buffer&&n.buffer instanceof ArrayBuffer};function _s(...i){console.error(...i)}const Qs=new Map;function ji(i,n){if(!i||typeof i!="object")return!1;let r=Qs.get(n);r||(r=new WeakMap,Qs.set(n,r));let f=r.get(i);if(f===void 0){const Z=Object.prototype.toString.call(i);f=Z.substring(8,Z.length-1)===n,r.set(i,f)}return f}function su(i,n){return typeof WebGLBuffer<"u"&&ji(n,"WebGLBuffer")}function lu(i,n){return typeof WebGLRenderbuffer<"u"&&ji(n,"WebGLRenderbuffer")}function ko(i,n){return typeof WebGLTexture<"u"&&ji(n,"WebGLTexture")}function cu(i,n){return typeof WebGLSampler<"u"&&ji(n,"WebGLSampler")}const Ds=35044,Ir=34962,uu=34963,au=34660,du=5120,hu=5121,fu=5122,mu=5123,pu=5124,bu=5125,$s=5126,qs={attribPrefix:""};function yu(i,n,r,f,Z){i.bindBuffer(n,r),i.bufferData(n,f,Z||Ds)}function tl(i,n,r,f){if(su(i,n))return n;r=r||Ir;const Z=i.createBuffer();return yu(i,r,Z,n,f),Z}function el(i){return i==="indices"}function gu(i){return i===Int8Array||i===Uint8Array}function Zu(i){return i.length?i:i.data}const vu=/coord|texture/i,Gu=/color|colour/i;function Xu(i,n){let r;if(vu.test(i)?r=2:Gu.test(i)?r=4:r=3,n%r>0)throw new Error(`Can not guess numComponents for attribute '${i}'. Tried ${r} but ${n} values is not evenly divisible by ${r}. You should specify it.`);return r}function Wu(i,n,r){return i.numComponents||i.size||Xu(n,r||Zu(i).length)}function nl(i,n){if(zi(i))return i;if(zi(i.data))return i.data;Array.isArray(i)&&(i={data:i});let r=i.type?No(i.type):void 0;return r||(el(n)?r=Uint16Array:r=Float32Array),new r(i.data)}function Vu(i){return typeof i=="number"?i:i?Ps(i):$s}function No(i){return typeof i=="number"?Os(i):i||Float32Array}function Ru(i,n){return{buffer:n.buffer,numValues:2*3*4,type:Vu(n.type),arrayType:No(n.type)}}function Iu(i,n){const r=n.data||n,f=No(n.type),Z=r*f.BYTES_PER_ELEMENT,x=i.createBuffer();return i.bindBuffer(Ir,x),i.bufferData(Ir,Z,n.drawType||Ds),{buffer:x,numValues:r,type:Ps(f),arrayType:f}}function xu(i,n,r){const f=nl(n,r);return{arrayType:f.constructor,buffer:tl(i,f,void 0,n.drawType),type:Jo(f),numValues:0}}function Su(i,n){const r={};return Object.keys(n).forEach(function(f){if(!el(f)){const Z=n[f],x=Z.attrib||Z.name||Z.attribName||qs.attribPrefix+f;if(Z.value){if(!Array.isArray(Z.value)&&!zi(Z.value))throw new Error("array.value is not array or typedarray");r[x]={value:Z.value}}else{let H;Z.buffer&&Z.buffer instanceof WebGLBuffer?H=Ru:typeof Z=="number"||typeof Z.data=="number"?H=Iu:H=xu;const{buffer:T,type:J,numValues:et,arrayType:lt}=H(i,Z,f),pt=Z.normalize!==void 0?Z.normalize:gu(lt),Yt=Wu(Z,f,et);r[x]={buffer:T,numComponents:Yt,type:J,normalize:pt,stride:Z.stride||0,offset:Z.offset||0,divisor:Z.divisor===void 0?void 0:Z.divisor,drawType:Z.drawType}}}}),i.bindBuffer(Ir,null),r}function Tu(i,n){return n===du||n===hu?1:n===fu||n===mu?2:n===pu||n===bu||n===$s?4:0}const Eo=["position","positions","a_position"];function Yu(i,n){let r,f;for(f=0;f<Eo.length&&(r=Eo[f],!(r in n||(r=qs.attribPrefix+r,r in n)));++f);f===Eo.length&&(r=Object.keys(n)[0]);const Z=n[r];if(!Z.buffer)return 1;i.bindBuffer(Ir,Z.buffer);const x=i.getBufferParameter(Ir,au);i.bindBuffer(Ir,null);const H=Tu(i,Z.type),T=x/H,J=Z.numComponents||Z.size,et=T/J;if(et%1!==0)throw new Error(`numComponents ${J} not correct for length ${length}`);return et}function wu(i,n,r){const f=Su(i,n),Z=Object.assign({},r||{});Z.attribs=Object.assign({},r?r.attribs:{},f);const x=n.indices;if(x){const H=nl(x,"indices");Z.indices=tl(i,H,uu),Z.numElements=H.length,Z.elementType=Jo(H)}else Z.numElements||(Z.numElements=Yu(i,Z.attribs));return Z}function ii(i){return!!i.texStorage2D}const rl=function(){const i={},n={};function r(f){const Z=f.constructor.name;if(!i[Z]){for(const x in f)if(typeof f[x]=="number"){const H=n[f[x]];n[f[x]]=H?`${H} | ${x}`:x}i[Z]=!0}}return function(Z,x){return r(Z),n[x]||(typeof x=="number"?`0x${x.toString(16)}`:x)}}(),hr={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},oi=zi,il=function(){let i;return function(){return i=i||(typeof document<"u"&&document.createElement?document.createElement("canvas").getContext("2d"):null),i}}(),ol=6406,er=6407,Gn=6408,sl=6409,ll=6410,si=6402,cl=34041,Pi=33071,Lu=9728,Hu=9729,fr=3553,mr=34067,xr=32879,Sr=35866,Uo=34069,Fu=34070,Cu=34071,Ju=34072,ku=34073,Nu=34074,Bo=10241,Ko=10240,Oi=10242,_i=10243,ul=32882,Eu=33082,Uu=33083,Bu=33084,Ku=33085,Mu=34892,Au=34893,Mo=3317,al=3314,dl=32878,hl=3316,fl=3315,ml=32877,zu=37443,ju=37441,Pu=37440,Ou=33321,_u=36756,Qu=33325,Du=33326,$u=33330,qu=33329,t1=33338,e1=33337,n1=33340,r1=33339,i1=33323,o1=36757,s1=33327,l1=33328,c1=33336,u1=33335,a1=33332,d1=33331,h1=33334,f1=33333,m1=32849,p1=35905,b1=36194,y1=36758,g1=35898,Z1=35901,v1=34843,G1=34837,X1=36221,W1=36239,V1=36215,R1=36233,I1=36209,x1=36227,S1=32856,T1=35907,Y1=36759,w1=32855,L1=32854,H1=32857,F1=34842,C1=34836,J1=36220,k1=36238,N1=36975,E1=36214,U1=36232,B1=36226,K1=36208,M1=33189,A1=33190,z1=36012,j1=36013,P1=35056,pr=5120,gn=5121,Qi=5122,Kr=5123,Di=5124,Tr=5125,An=5126,pl=32819,bl=32820,yl=33635,qn=5131,li=36193,Ao=33640,O1=35899,_1=35902,Q1=36269,D1=34042,$i=33319,Mr=33320,qi=6403,Ar=36244,zr=36248,Yr=36249;let zo;function to(i){if(!zo){const n={};n[ol]={textureFormat:ol,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[gn,qn,li,An]},n[sl]={textureFormat:sl,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[gn,qn,li,An]},n[ll]={textureFormat:ll,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[gn,qn,li,An]},n[er]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[gn,qn,li,An,yl]},n[Gn]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[gn,qn,li,An,pl,bl]},n[si]={textureFormat:si,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Tr,Kr]},n[Ou]={textureFormat:qi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[gn]},n[_u]={textureFormat:qi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[pr]},n[Qu]={textureFormat:qi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[An,qn]},n[Du]={textureFormat:qi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[An]},n[$u]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[gn]},n[qu]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[pr]},n[a1]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Kr]},n[d1]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Qi]},n[h1]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Tr]},n[f1]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Di]},n[i1]={textureFormat:$i,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[gn]},n[o1]={textureFormat:$i,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[pr]},n[s1]={textureFormat:$i,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[An,qn]},n[l1]={textureFormat:$i,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[An]},n[c1]={textureFormat:Mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[gn]},n[u1]={textureFormat:Mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[pr]},n[t1]={textureFormat:Mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Kr]},n[e1]={textureFormat:Mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Qi]},n[n1]={textureFormat:Mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Tr]},n[r1]={textureFormat:Mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Di]},n[m1]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[gn]},n[p1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[gn]},n[b1]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[gn,yl]},n[y1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[pr]},n[g1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[An,qn,O1]},n[Z1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[An,qn,_1]},n[v1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[An,qn]},n[G1]={textureFormat:er,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[An]},n[X1]={textureFormat:zr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[gn]},n[W1]={textureFormat:zr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[pr]},n[V1]={textureFormat:zr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Kr]},n[R1]={textureFormat:zr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Qi]},n[I1]={textureFormat:zr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Tr]},n[x1]={textureFormat:zr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Di]},n[S1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[gn]},n[T1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[gn]},n[Y1]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[pr]},n[w1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[gn,bl,Ao]},n[L1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[gn,pl]},n[H1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Ao]},n[F1]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[An,qn]},n[C1]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[An]},n[J1]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[gn]},n[k1]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[pr]},n[N1]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Ao]},n[E1]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Kr]},n[U1]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Qi]},n[B1]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Di]},n[K1]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Tr]},n[M1]={textureFormat:si,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Kr,Tr]},n[A1]={textureFormat:si,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Tr]},n[z1]={textureFormat:si,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[An]},n[P1]={textureFormat:cl,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[D1]},n[j1]={textureFormat:cl,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Q1]},Object.keys(n).forEach(function(r){const f=n[r];f.bytesPerElementMap={},f.bytesPerElement.forEach(function(Z,x){const H=f.type[x];f.bytesPerElementMap[H]=Z})}),zo=n}return zo[i]}function $1(i,n){const r=to(i);if(!r)throw"unknown internal format";const f=r.bytesPerElementMap[n];if(f===void 0)throw"unknown internal format";return f}function ci(i){const n=to(i);if(!n)throw"unknown internal format";return{format:n.textureFormat,type:n.type[0]}}function gl(i){return(i&i-1)===0}function q1(i,n,r,f){if(!ii(i))return gl(n)&&gl(r);const Z=to(f);if(!Z)throw"unknown internal format";return Z.colorRenderable&&Z.textureFilterable}function ta(i){const n=to(i);if(!n)throw"unknown internal format";return n.textureFilterable}function ea(i,n,r){return oi(n)?Jo(n):r||gn}function eo(i,n,r,f,Z){if(Z%1!==0)throw"can't guess dimensions";if(!r&&!f){const x=Math.sqrt(Z/(n===mr?6:1));x%1===0?(r=x,f=x):(r=Z,f=1)}else if(f){if(!r&&(r=Z/f,r%1))throw"can't guess dimensions"}else if(f=Z/r,f%1)throw"can't guess dimensions";return{width:r,height:f}}function jr(i,n){n.colorspaceConversion!==void 0&&i.pixelStorei(zu,n.colorspaceConversion),n.premultiplyAlpha!==void 0&&i.pixelStorei(ju,n.premultiplyAlpha),n.flipY!==void 0&&i.pixelStorei(Pu,n.flipY)}function Zl(i){i.pixelStorei(Mo,4),ii(i)&&(i.pixelStorei(al,0),i.pixelStorei(dl,0),i.pixelStorei(hl,0),i.pixelStorei(fl,0),i.pixelStorei(ml,0))}function na(i,n,r,f){f.minMag&&(r.call(i,n,Bo,f.minMag),r.call(i,n,Ko,f.minMag)),f.min&&r.call(i,n,Bo,f.min),f.mag&&r.call(i,n,Ko,f.mag),f.wrap&&(r.call(i,n,Oi,f.wrap),r.call(i,n,_i,f.wrap),(n===xr||cu(i,n))&&r.call(i,n,ul,f.wrap)),f.wrapR&&r.call(i,n,ul,f.wrapR),f.wrapS&&r.call(i,n,Oi,f.wrapS),f.wrapT&&r.call(i,n,_i,f.wrapT),f.minLod!==void 0&&r.call(i,n,Eu,f.minLod),f.maxLod!==void 0&&r.call(i,n,Uu,f.maxLod),f.baseLevel!==void 0&&r.call(i,n,Bu,f.baseLevel),f.maxLevel!==void 0&&r.call(i,n,Ku,f.maxLevel),f.compareFunc!==void 0&&r.call(i,n,Au,f.compareFunc),f.compareMode!==void 0&&r.call(i,n,Mu,f.compareMode)}function vl(i,n,r){const f=r.target||fr;i.bindTexture(f,n),na(i,f,i.texParameteri,r)}function ra(i){return i=i||hr.textureColor,oi(i)?i:new Uint8Array([i[0]*255,i[1]*255,i[2]*255,i[3]*255])}function jo(i,n,r,f,Z,x){r=r||hr.textureOptions,x=x||Gn;const H=r.target||fr;if(f=f||r.width,Z=Z||r.height,i.bindTexture(H,n),q1(i,f,Z,x))i.generateMipmap(H);else{const T=ta(x)?Hu:Lu;i.texParameteri(H,Bo,T),i.texParameteri(H,Ko,T),i.texParameteri(H,Oi,Pi),i.texParameteri(H,_i,Pi)}}function ui(i){return i.auto===!0||i.auto===void 0&&i.level===void 0}function Po(i,n){return n=n||{},n.cubeFaceOrder||[Uo,Fu,Cu,Ju,ku,Nu]}function Oo(i,n){const f=Po(i,n).map(function(Z,x){return{face:Z,ndx:x}});return f.sort(function(Z,x){return Z.face-x.face}),f}function Gl(i,n,r,f){f=f||hr.textureOptions;const Z=f.target||fr,x=f.level||0;let H=r.width,T=r.height;const J=f.internalFormat||f.format||Gn,et=ci(J),lt=f.format||et.format,pt=f.type||et.type;if(jr(i,f),i.bindTexture(Z,n),Z===mr){const Yt=r.width,Lt=r.height;let at,dt;if(Yt/6===Lt)at=Lt,dt=[0,0,1,0,2,0,3,0,4,0,5,0];else if(Lt/6===Yt)at=Yt,dt=[0,0,0,1,0,2,0,3,0,4,0,5];else if(Yt/3===Lt/2)at=Yt/3,dt=[0,0,1,0,2,0,0,1,1,1,2,1];else if(Yt/2===Lt/3)at=Yt/2,dt=[0,0,1,0,0,1,1,1,0,2,1,2];else throw"can't figure out cube map from element: "+(r.src?r.src:r.nodeName);const Bt=il();Bt?(Bt.canvas.width=at,Bt.canvas.height=at,H=at,T=at,Oo(i,f).forEach(function(Nt){const ee=dt[Nt.ndx*2+0]*at,O=dt[Nt.ndx*2+1]*at;Bt.drawImage(r,ee,O,at,at,0,0,at,at),i.texImage2D(Nt.face,x,J,lt,pt,Bt.canvas)}),Bt.canvas.width=1,Bt.canvas.height=1):typeof createImageBitmap<"u"&&(H=at,T=at,Oo(i,f).forEach(function(Nt){const ee=dt[Nt.ndx*2+0]*at,O=dt[Nt.ndx*2+1]*at;i.texImage2D(Nt.face,x,J,at,at,0,lt,pt,null),createImageBitmap(r,ee,O,at,at,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then(function($e){jr(i,f),i.bindTexture(Z,n),i.texImage2D(Nt.face,x,J,lt,pt,$e),ui(f)&&jo(i,n,f,H,T,J)})}))}else if(Z===xr||Z===Sr){const Yt=Math.min(r.width,r.height),Lt=Math.max(r.width,r.height),at=Lt/Yt;if(at%1!==0)throw"can not compute 3D dimensions of element";const dt=r.width===Lt?1:0,Bt=r.height===Lt?1:0;i.pixelStorei(Mo,1),i.pixelStorei(al,r.width),i.pixelStorei(dl,0),i.pixelStorei(ml,0),i.texImage3D(Z,x,J,Yt,Yt,Yt,0,lt,pt,null);for(let Nt=0;Nt<at;++Nt){const ee=Nt*Yt*dt,O=Nt*Yt*Bt;i.pixelStorei(hl,ee),i.pixelStorei(fl,O),i.texSubImage3D(Z,x,0,0,Nt,Yt,Yt,1,lt,pt,r)}Zl(i)}else i.texImage2D(Z,x,J,lt,pt,r);ui(f)&&jo(i,n,f,H,T,J),vl(i,n,f)}function ai(){}function ia(i){if(typeof document<"u"){const n=document.createElement("a");return n.href=i,n.hostname===location.hostname&&n.port===location.port&&n.protocol===location.protocol}else{const n=new URL(location.href).origin;return new URL(i,location.href).origin===n}}function oa(i,n){return n===void 0&&!ia(i)?"anonymous":n}function sa(i,n,r){r=r||ai;let f;if(n=n!==void 0?n:hr.crossOrigin,n=oa(i,n),typeof Image<"u"){f=new Image,n!==void 0&&(f.crossOrigin=n);const Z=function(){f.removeEventListener("error",x),f.removeEventListener("load",H),f=null},x=function(){const J="couldn't load image: "+i;_s(J),r(J,f),Z()},H=function(){r(null,f),Z()};return f.addEventListener("error",x),f.addEventListener("load",H),f.src=i,f}else if(typeof ImageBitmap<"u"){let Z,x;const H=function(){r(Z,x)},T={};n&&(T.mode="cors"),fetch(i,T).then(function(J){if(!J.ok)throw J;return J.blob()}).then(function(J){return createImageBitmap(J,{premultiplyAlpha:"none",colorSpaceConversion:"none"})}).then(function(J){x=J,setTimeout(H)}).catch(function(J){Z=J,setTimeout(H)}),f=null}return f}function Xl(i){return typeof ImageBitmap<"u"&&i instanceof ImageBitmap||typeof ImageData<"u"&&i instanceof ImageData||typeof HTMLElement<"u"&&i instanceof HTMLElement}function _o(i,n,r){return Xl(i)?(setTimeout(function(){r(null,i)}),i):sa(i,n,r)}function Qo(i,n,r){r=r||hr.textureOptions;const f=r.target||fr;if(i.bindTexture(f,n),r.color===!1)return;const Z=ra(r.color);if(f===mr)for(let x=0;x<6;++x)i.texImage2D(Uo+x,0,Gn,1,1,0,Gn,gn,Z);else f===xr||f===Sr?i.texImage3D(f,0,Gn,1,1,1,0,Gn,gn,Z):i.texImage2D(f,0,Gn,1,1,0,Gn,gn,Z)}function la(i,n,r,f){return f=f||ai,r=r||hr.textureOptions,Qo(i,n,r),r=Object.assign({},r),_o(r.src,r.crossOrigin,function(x,H){x?f(x,n,H):(Gl(i,n,H,r),f(null,n,H))})}function ca(i,n,r,f){f=f||ai;const Z=r.src;if(Z.length!==6)throw"there must be 6 urls for a cubemap";const x=r.level||0,H=r.internalFormat||r.format||Gn,T=ci(H),J=r.format||T.format,et=r.type||gn,lt=r.target||fr;if(lt!==mr)throw"target must be TEXTURE_CUBE_MAP";Qo(i,n,r),r=Object.assign({},r);let pt=6;const Yt=[],Lt=Po(i,r);let at;function dt(Bt){return function(Nt,ee){--pt,Nt?Yt.push(Nt):ee.width!==ee.height?Yt.push("cubemap face img is not a square: "+ee.src):(jr(i,r),i.bindTexture(lt,n),pt===5?Po().forEach(function(O){i.texImage2D(O,x,H,J,et,ee)}):i.texImage2D(Bt,x,H,J,et,ee),ui(r)&&i.generateMipmap(lt)),pt===0&&f(Yt.length?Yt:void 0,n,at)}}at=Z.map(function(Bt,Nt){return _o(Bt,r.crossOrigin,dt(Lt[Nt]))})}function ua(i,n,r,f){f=f||ai;const Z=r.src,x=r.internalFormat||r.format||Gn,H=ci(x),T=r.format||H.format,J=r.type||gn,et=r.target||Sr;if(et!==xr&&et!==Sr)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";Qo(i,n,r),r=Object.assign({},r);let lt=Z.length;const pt=[];let Yt;const Lt=r.level||0;let at=r.width,dt=r.height;const Bt=Z.length;let Nt=!0;function ee(O){return function($e,je){if(--lt,$e)pt.push($e);else{if(jr(i,r),i.bindTexture(et,n),Nt){Nt=!1,at=r.width||je.width,dt=r.height||je.height,i.texImage3D(et,Lt,x,at,dt,Bt,0,T,J,null);for(let We=0;We<Bt;++We)i.texSubImage3D(et,Lt,0,0,We,at,dt,1,T,J,je)}else{let We=je,zt;(je.width!==at||je.height!==dt)&&(zt=il(),We=zt.canvas,zt.canvas.width=at,zt.canvas.height=dt,zt.drawImage(je,0,0,at,dt)),i.texSubImage3D(et,Lt,0,0,O,at,dt,1,T,J,We),zt&&We===zt.canvas&&(zt.canvas.width=0,zt.canvas.height=0)}ui(r)&&i.generateMipmap(et)}lt===0&&f(pt.length?pt:void 0,n,Yt)}}Yt=Z.map(function(O,$e){return _o(O,r.crossOrigin,ee($e))})}function aa(i,n,r,f){f=f||hr.textureOptions;const Z=f.target||fr;i.bindTexture(Z,n);let x=f.width,H=f.height,T=f.depth;const J=f.level||0,et=f.internalFormat||f.format||Gn,lt=ci(et),pt=f.format||lt.format,Yt=f.type||ea(i,r,lt.type);if(oi(r))r instanceof Uint8ClampedArray&&(r=new Uint8Array(r.buffer));else{const Bt=Os(Yt);r=new Bt(r)}const Lt=$1(et,Yt),at=r.byteLength/Lt;if(at%1)throw"length wrong size for format: "+rl(i,pt);let dt;if(Z===xr||Z===Sr)if(!x&&!H&&!T){const Bt=Math.cbrt(at);if(Bt%1!==0)throw"can't guess cube size of array of numElements: "+at;x=Bt,H=Bt,T=Bt}else x&&(!H||!T)?(dt=eo(i,Z,H,T,at/x),H=dt.width,T=dt.height):H&&(!x||!T)?(dt=eo(i,Z,x,T,at/H),x=dt.width,T=dt.height):(dt=eo(i,Z,x,H,at/T),x=dt.width,H=dt.height);else dt=eo(i,Z,x,H,at),x=dt.width,H=dt.height;if(Zl(i),i.pixelStorei(Mo,f.unpackAlignment||1),jr(i,f),Z===mr){const Bt=Lt/r.BYTES_PER_ELEMENT,Nt=at/6*Bt;Oo(i,f).forEach(ee=>{const O=Nt*ee.ndx,$e=r.subarray(O,O+Nt);i.texImage2D(ee.face,J,et,x,H,0,pt,Yt,$e)})}else Z===xr||Z===Sr?i.texImage3D(Z,J,et,x,H,T,0,pt,Yt,r):i.texImage2D(Z,J,et,x,H,0,pt,Yt,r);return{width:x,height:H,depth:T,type:Yt}}function da(i,n,r){const f=r.target||fr;i.bindTexture(f,n);const Z=r.level||0,x=r.internalFormat||r.format||Gn,H=ci(x),T=r.format||H.format,J=r.type||H.type;if(jr(i,r),f===mr)for(let et=0;et<6;++et)i.texImage2D(Uo+et,Z,x,r.width,r.height,0,T,J,null);else f===xr||f===Sr?i.texImage3D(f,Z,x,r.width,r.height,r.depth,0,T,J,null):i.texImage2D(f,Z,x,r.width,r.height,0,T,J,null)}function Wl(i,n,r){r=r||ai,n=n||hr.textureOptions;const f=i.createTexture(),Z=n.target||fr;let x=n.width||1,H=n.height||1;const T=n.internalFormat||Gn;i.bindTexture(Z,f),Z===mr&&(i.texParameteri(Z,Oi,Pi),i.texParameteri(Z,_i,Pi));let J=n.src;if(J)if(typeof J=="function"&&(J=J(i,n)),typeof J=="string")la(i,f,n,r);else if(oi(J)||Array.isArray(J)&&(typeof J[0]=="number"||Array.isArray(J[0])||oi(J[0]))){const et=aa(i,f,J,n);x=et.width,H=et.height}else Array.isArray(J)&&(typeof J[0]=="string"||Xl(J[0]))?Z===mr?ca(i,f,n,r):ua(i,f,n,r):(Gl(i,f,J,n),x=J.width,H=J.height);else da(i,f,n);return ui(n)&&jo(i,f,n,x,H,T),vl(i,f,n),f}const Do=_s;function Vl(i){return typeof document<"u"&&document.getElementById?document.getElementById(i):null}const no=33984,ro=34962,ha=34963,fa=35713,ma=35714,pa=35632,ba=35633,ya=35981,Rl=35718,ga=35721,Za=35971,va=35382,Ga=35396,Xa=35398,Wa=35392,Va=35395,io=5126,Il=35664,xl=35665,Sl=35666,$o=5124,Tl=35667,Yl=35668,wl=35669,Ll=35670,Hl=35671,Fl=35672,Cl=35673,Jl=35674,kl=35675,Nl=35676,Ra=35678,Ia=35680,xa=35679,Sa=35682,Ta=35685,Ya=35686,wa=35687,La=35688,Ha=35689,Fa=35690,Ca=36289,Ja=36292,ka=36293,qo=5125,El=36294,Ul=36295,Bl=36296,Na=36298,Ea=36299,Ua=36300,Ba=36303,Ka=36306,Ma=36307,Aa=36308,za=36311,oo=3553,so=34067,ts=32879,lo=35866,be={};function Kl(i,n){return be[n].bindPoint}function ja(i,n){return function(r){i.uniform1f(n,r)}}function Pa(i,n){return function(r){i.uniform1fv(n,r)}}function Oa(i,n){return function(r){i.uniform2fv(n,r)}}function _a(i,n){return function(r){i.uniform3fv(n,r)}}function Qa(i,n){return function(r){i.uniform4fv(n,r)}}function Ml(i,n){return function(r){i.uniform1i(n,r)}}function Al(i,n){return function(r){i.uniform1iv(n,r)}}function zl(i,n){return function(r){i.uniform2iv(n,r)}}function jl(i,n){return function(r){i.uniform3iv(n,r)}}function Pl(i,n){return function(r){i.uniform4iv(n,r)}}function Da(i,n){return function(r){i.uniform1ui(n,r)}}function $a(i,n){return function(r){i.uniform1uiv(n,r)}}function qa(i,n){return function(r){i.uniform2uiv(n,r)}}function t0(i,n){return function(r){i.uniform3uiv(n,r)}}function e0(i,n){return function(r){i.uniform4uiv(n,r)}}function n0(i,n){return function(r){i.uniformMatrix2fv(n,!1,r)}}function r0(i,n){return function(r){i.uniformMatrix3fv(n,!1,r)}}function i0(i,n){return function(r){i.uniformMatrix4fv(n,!1,r)}}function o0(i,n){return function(r){i.uniformMatrix2x3fv(n,!1,r)}}function s0(i,n){return function(r){i.uniformMatrix3x2fv(n,!1,r)}}function l0(i,n){return function(r){i.uniformMatrix2x4fv(n,!1,r)}}function c0(i,n){return function(r){i.uniformMatrix4x2fv(n,!1,r)}}function u0(i,n){return function(r){i.uniformMatrix3x4fv(n,!1,r)}}function a0(i,n){return function(r){i.uniformMatrix4x3fv(n,!1,r)}}function Pn(i,n,r,f){const Z=Kl(i,n);return ii(i)?function(x){let H,T;!x||ko(i,x)?(H=x,T=null):(H=x.texture,T=x.sampler),i.uniform1i(f,r),i.activeTexture(no+r),i.bindTexture(Z,H),i.bindSampler(r,T)}:function(x){i.uniform1i(f,r),i.activeTexture(no+r),i.bindTexture(Z,x)}}function On(i,n,r,f,Z){const x=Kl(i,n),H=new Int32Array(Z);for(let T=0;T<Z;++T)H[T]=r+T;return ii(i)?function(T){i.uniform1iv(f,H),T.forEach(function(J,et){i.activeTexture(no+H[et]);let lt,pt;!J||ko(i,J)?(lt=J,pt=null):(lt=J.texture,pt=J.sampler),i.bindSampler(r,pt),i.bindTexture(x,lt)})}:function(T){i.uniform1iv(f,H),T.forEach(function(J,et){i.activeTexture(no+H[et]),i.bindTexture(x,J)})}}be[io]={Type:Float32Array,size:4,setter:ja,arraySetter:Pa},be[Il]={Type:Float32Array,size:8,setter:Oa,cols:2},be[xl]={Type:Float32Array,size:12,setter:_a,cols:3},be[Sl]={Type:Float32Array,size:16,setter:Qa,cols:4},be[$o]={Type:Int32Array,size:4,setter:Ml,arraySetter:Al},be[Tl]={Type:Int32Array,size:8,setter:zl,cols:2},be[Yl]={Type:Int32Array,size:12,setter:jl,cols:3},be[wl]={Type:Int32Array,size:16,setter:Pl,cols:4},be[qo]={Type:Uint32Array,size:4,setter:Da,arraySetter:$a},be[El]={Type:Uint32Array,size:8,setter:qa,cols:2},be[Ul]={Type:Uint32Array,size:12,setter:t0,cols:3},be[Bl]={Type:Uint32Array,size:16,setter:e0,cols:4},be[Ll]={Type:Uint32Array,size:4,setter:Ml,arraySetter:Al},be[Hl]={Type:Uint32Array,size:8,setter:zl,cols:2},be[Fl]={Type:Uint32Array,size:12,setter:jl,cols:3},be[Cl]={Type:Uint32Array,size:16,setter:Pl,cols:4},be[Jl]={Type:Float32Array,size:32,setter:n0,rows:2,cols:2},be[kl]={Type:Float32Array,size:48,setter:r0,rows:3,cols:3},be[Nl]={Type:Float32Array,size:64,setter:i0,rows:4,cols:4},be[Ta]={Type:Float32Array,size:32,setter:o0,rows:2,cols:3},be[Ya]={Type:Float32Array,size:32,setter:l0,rows:2,cols:4},be[wa]={Type:Float32Array,size:48,setter:s0,rows:3,cols:2},be[La]={Type:Float32Array,size:48,setter:u0,rows:3,cols:4},be[Ha]={Type:Float32Array,size:64,setter:c0,rows:4,cols:2},be[Fa]={Type:Float32Array,size:64,setter:a0,rows:4,cols:3},be[Ra]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:oo},be[Ia]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:so},be[xa]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:ts},be[Sa]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:oo},be[Ca]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:lo},be[Ja]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:lo},be[ka]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:so},be[Na]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:oo},be[Ea]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:ts},be[Ua]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:so},be[Ba]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:lo},be[Ka]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:oo},be[Ma]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:ts},be[Aa]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:so},be[za]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:lo};function co(i,n){return function(r){if(r.value)switch(i.disableVertexAttribArray(n),r.value.length){case 4:i.vertexAttrib4fv(n,r.value);break;case 3:i.vertexAttrib3fv(n,r.value);break;case 2:i.vertexAttrib2fv(n,r.value);break;case 1:i.vertexAttrib1fv(n,r.value);break;default:throw new Error("the length of a float constant value must be between 1 and 4!")}else i.bindBuffer(ro,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribPointer(n,r.numComponents||r.size,r.type||io,r.normalize||!1,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function br(i,n){return function(r){if(r.value)if(i.disableVertexAttribArray(n),r.value.length===4)i.vertexAttrib4iv(n,r.value);else throw new Error("The length of an integer constant value must be 4!");else i.bindBuffer(ro,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribIPointer(n,r.numComponents||r.size,r.type||$o,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function uo(i,n){return function(r){if(r.value)if(i.disableVertexAttribArray(n),r.value.length===4)i.vertexAttrib4uiv(n,r.value);else throw new Error("The length of an unsigned integer constant value must be 4!");else i.bindBuffer(ro,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribIPointer(n,r.numComponents||r.size,r.type||qo,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function es(i,n,r){const f=r.size,Z=r.count;return function(x){i.bindBuffer(ro,x.buffer);const H=x.size||x.numComponents||f,T=H/Z,J=x.type||io,lt=be[J].size*H,pt=x.normalize||!1,Yt=x.offset||0,Lt=lt/Z;for(let at=0;at<Z;++at)i.enableVertexAttribArray(n+at),i.vertexAttribPointer(n+at,T,J,pt,lt,Yt+Lt*at),i.vertexAttribDivisor&&i.vertexAttribDivisor(n+at,x.divisor||0)}}const Ln={};Ln[io]={size:4,setter:co},Ln[Il]={size:8,setter:co},Ln[xl]={size:12,setter:co},Ln[Sl]={size:16,setter:co},Ln[$o]={size:4,setter:br},Ln[Tl]={size:8,setter:br},Ln[Yl]={size:12,setter:br},Ln[wl]={size:16,setter:br},Ln[qo]={size:4,setter:uo},Ln[El]={size:8,setter:uo},Ln[Ul]={size:12,setter:uo},Ln[Bl]={size:16,setter:uo},Ln[Ll]={size:4,setter:br},Ln[Hl]={size:8,setter:br},Ln[Fl]={size:12,setter:br},Ln[Cl]={size:16,setter:br},Ln[Jl]={size:4,setter:es,count:2},Ln[kl]={size:9,setter:es,count:3},Ln[Nl]={size:16,setter:es,count:4};const d0=/ERROR:\s*\d+:(\d+)/gi;function h0(i,n="",r=0){const f=[...n.matchAll(d0)],Z=new Map(f.map((x,H)=>{const T=parseInt(x[1]),J=f[H+1],et=J?J.index:n.length,lt=n.substring(x.index,et);return[T-1,lt]}));return i.split(`
|
|
126
126
|
`).map((x,H)=>{const T=Z.get(H);return`${H+1+r}: ${x}${T?`
|
|
127
127
|
|
|
128
128
|
^^^ ${T}`:""}`}).join(`
|
|
129
|
-
`)}const
|
|
129
|
+
`)}const Ol=/^[ \t]*\n/;function _l(i){let n=0;return Ol.test(i)&&(n=1,i=i.replace(Ol,"")),{lineOffset:n,shaderSource:i}}function f0(i,n){return i.errorCallback(n),i.callback&&setTimeout(()=>{i.callback(`${n}
|
|
130
130
|
${i.errors.join(`
|
|
131
131
|
`)}`)}),null}function m0(i,n,r,f){if(f=f||Do,!i.getShaderParameter(r,fa)){const x=i.getShaderInfoLog(r),{lineOffset:H,shaderSource:T}=_l(i.getShaderSource(r)),J=`${h0(T,x,H)}
|
|
132
|
-
Error compiling ${rl(i,n)}: ${x}`;return f(J),J}return""}function ns(i,n,r){let f,Z,x;if(typeof n=="function"&&(r=n,n=void 0),typeof i=="function")r=i,i=void 0;else if(i&&!Array.isArray(i)){const et=i;r=et.errorCallback,i=et.attribLocations,f=et.transformFeedbackVaryings,Z=et.transformFeedbackMode,x=et.callback}const H=r||Do,T=[],J={errorCallback(et,...lt){T.push(et),H(et,...lt)},transformFeedbackVaryings:f,transformFeedbackMode:Z,callback:x,errors:T};{let et={};Array.isArray(i)?i.forEach(function(lt,pt){et[lt]=n?n[pt]:pt}):et=i||{},J.attribLocations=et}return J}const p0=["VERTEX_SHADER","FRAGMENT_SHADER"];function b0(i,n){if(n.indexOf("frag")>=0)return pa;if(n.indexOf("vert")>=0)return ba}function y0(i,n,r){const f=i.getAttachedShaders(n);for(const Z of f)r.has(Z)&&i.deleteShader(Z);i.deleteProgram(n)}const g0=(i=0)=>new Promise(n=>setTimeout(n,i));function Z0(i,n,r){const f=i.createProgram(),{attribLocations:Z,transformFeedbackVaryings:x,transformFeedbackMode:H}=ns(r);for(let T=0;T<n.length;++T){let J=n[T];if(typeof J=="string"){const et=
|
|
132
|
+
Error compiling ${rl(i,n)}: ${x}`;return f(J),J}return""}function ns(i,n,r){let f,Z,x;if(typeof n=="function"&&(r=n,n=void 0),typeof i=="function")r=i,i=void 0;else if(i&&!Array.isArray(i)){const et=i;r=et.errorCallback,i=et.attribLocations,f=et.transformFeedbackVaryings,Z=et.transformFeedbackMode,x=et.callback}const H=r||Do,T=[],J={errorCallback(et,...lt){T.push(et),H(et,...lt)},transformFeedbackVaryings:f,transformFeedbackMode:Z,callback:x,errors:T};{let et={};Array.isArray(i)?i.forEach(function(lt,pt){et[lt]=n?n[pt]:pt}):et=i||{},J.attribLocations=et}return J}const p0=["VERTEX_SHADER","FRAGMENT_SHADER"];function b0(i,n){if(n.indexOf("frag")>=0)return pa;if(n.indexOf("vert")>=0)return ba}function y0(i,n,r){const f=i.getAttachedShaders(n);for(const Z of f)r.has(Z)&&i.deleteShader(Z);i.deleteProgram(n)}const g0=(i=0)=>new Promise(n=>setTimeout(n,i));function Z0(i,n,r){const f=i.createProgram(),{attribLocations:Z,transformFeedbackVaryings:x,transformFeedbackMode:H}=ns(r);for(let T=0;T<n.length;++T){let J=n[T];if(typeof J=="string"){const et=Vl(J),lt=et?et.text:J;let pt=i[p0[T]];et&&et.type&&(pt=b0(i,et.type)||pt),J=i.createShader(pt),i.shaderSource(J,_l(lt).shaderSource),i.compileShader(J),i.attachShader(f,J)}}Object.entries(Z).forEach(([T,J])=>i.bindAttribLocation(f,J,T));{let T=x;T&&(T.attribs&&(T=T.attribs),Array.isArray(T)||(T=Object.keys(T)),i.transformFeedbackVaryings(f,T,H||ya))}return i.linkProgram(f),f}function v0(i,n,r,f,Z){const x=ns(r,f,Z),H=new Set(n),T=Z0(i,n,x);function J(et,lt){const pt=X0(et,lt,x.errorCallback);return pt&&y0(et,lt,H),pt}if(x.callback){G0(i,T).then(()=>{const et=J(i,T);x.callback(et,et?void 0:T)});return}return J(i,T)?void 0:T}async function G0(i,n){const r=i.getExtension("KHR_parallel_shader_compile"),f=r?(x,H)=>x.getProgramParameter(H,r.COMPLETION_STATUS_KHR):()=>!0;let Z=0;do await g0(Z),Z=1e3/60;while(!f(i,n))}function X0(i,n,r){if(r=r||Do,!i.getProgramParameter(n,ma)){const Z=i.getProgramInfoLog(n);r(`Error in program linking: ${Z}`);const H=i.getAttachedShaders(n).map(T=>m0(i,i.getShaderParameter(T,i.SHADER_TYPE),T,r));return`${Z}
|
|
133
133
|
${H.filter(T=>T).join(`
|
|
134
|
-
`)}`}}function
|
|
135
|
-
`;return n}run(n){var Z,x,H,T,J,et;(Z=this.profiler)==null||Z.pushContext(`[${this.id}] PROG : ${this.constructor.name}`),(x=this.profiler)==null||x.pushContext(`[${this.id}] UNIFORMS`);for(const lt in n)typeof n[lt]=="function"&&((H=this.profiler)==null||H.pushContext(`[${this.id}] UNI : ${lt}`),n[lt]=n[lt](),(T=this.profiler)==null||T.popContext(`[${this.id}] UNI : ${lt}`));(J=this.profiler)==null||J.popContext(`[${this.id}] UNIFORMS`);const r=Date.now();let f=0;this.lastRun&&(f=(r-this.lastRun)/1e3),this.lastRun=r,this.context.viewport(0,0,this.context.canvas.width,this.context.canvas.height),this.context.useProgram(this.programInfo.program),
|
|
134
|
+
`)}`}}function W0(i,n,r,f,Z){return v0(i,n,r,f,Z)}function Ql(i){const n=i.name;return n.startsWith("gl_")||n.startsWith("webgl_")}const V0=/(\.|\[|]|\w+)/g,R0=i=>i>="0"&&i<="9";function I0(i,n,r,f){const Z=i.split(V0).filter(T=>T!=="");let x=0,H="";for(;;){const T=Z[x++];H+=T;const J=R0(T[0]),et=J?parseInt(T):T;if(J&&(H+=Z[x++]),x===Z.length){r[et]=n;break}else{const pt=Z[x++],Yt=pt==="[",Lt=r[et]||(Yt?[]:{});r[et]=Lt,r=Lt,f[H]=f[H]||function(at){return function(dt){Dl(at,dt)}}(Lt),H+=pt}}}function x0(i,n){let r=0;function f(T,J,et){const lt=J.name.endsWith("[0]"),pt=J.type,Yt=be[pt];if(!Yt)throw new Error(`unknown type: 0x${pt.toString(16)}`);let Lt;if(Yt.bindPoint){const at=r;r+=J.size,lt?Lt=Yt.arraySetter(i,pt,at,et,J.size):Lt=Yt.setter(i,pt,at,et,J.size)}else Yt.arraySetter&<?Lt=Yt.arraySetter(i,et):Lt=Yt.setter(i,et);return Lt.location=et,Lt}const Z={},x={},H=i.getProgramParameter(n,Rl);for(let T=0;T<H;++T){const J=i.getActiveUniform(n,T);if(Ql(J))continue;let et=J.name;et.endsWith("[0]")&&(et=et.substr(0,et.length-3));const lt=i.getUniformLocation(n,J.name);if(lt){const pt=f(n,J,lt);Z[et]=pt,I0(et,pt,x,Z)}}return Z}function S0(i,n){const r={},f=i.getProgramParameter(n,Za);for(let Z=0;Z<f;++Z){const x=i.getTransformFeedbackVarying(n,Z);r[x.name]={index:Z,type:x.type,size:x.size}}return r}function T0(i,n){const r=i.getProgramParameter(n,Rl),f=[],Z=[];for(let T=0;T<r;++T){Z.push(T),f.push({});const J=i.getActiveUniform(n,T);f[T].name=J.name}[["UNIFORM_TYPE","type"],["UNIFORM_SIZE","size"],["UNIFORM_BLOCK_INDEX","blockNdx"],["UNIFORM_OFFSET","offset"]].forEach(function(T){const J=T[0],et=T[1];i.getActiveUniforms(n,Z,i[J]).forEach(function(lt,pt){f[pt][et]=lt})});const x={},H=i.getProgramParameter(n,va);for(let T=0;T<H;++T){const J=i.getActiveUniformBlockName(n,T),et={index:i.getUniformBlockIndex(n,J),usedByVertexShader:i.getActiveUniformBlockParameter(n,T,Ga),usedByFragmentShader:i.getActiveUniformBlockParameter(n,T,Xa),size:i.getActiveUniformBlockParameter(n,T,Wa),uniformIndices:i.getActiveUniformBlockParameter(n,T,Va)};et.used=et.usedByVertexShader||et.usedByFragmentShader,x[J]=et}return{blockSpecs:x,uniformData:f}}function Dl(i,n){for(const r in n){const f=i[r];typeof f=="function"?f(n[r]):Dl(i[r],n[r])}}function $l(i,...n){const r=i.uniformSetters||i,f=n.length;for(let Z=0;Z<f;++Z){const x=n[Z];if(Array.isArray(x)){const H=x.length;for(let T=0;T<H;++T)$l(r,x[T])}else for(const H in x){const T=r[H];T&&T(x[H])}}}function Y0(i,n){const r={},f=i.getProgramParameter(n,ga);for(let Z=0;Z<f;++Z){const x=i.getActiveAttrib(n,Z);if(Ql(x))continue;const H=i.getAttribLocation(n,x.name),T=Ln[x.type],J=T.setter(i,H,T);J.location=H,r[x.name]=J}return r}function w0(i,n){for(const r in n){const f=i[r];f&&f(n[r])}}function L0(i,n,r){r.vertexArrayObject?i.bindVertexArray(r.vertexArrayObject):(w0(n.attribSetters||n,r.attribs),r.indices&&i.bindBuffer(ha,r.indices))}function ql(i,n){const r=x0(i,n),f=Y0(i,n),Z={program:n,uniformSetters:r,attribSetters:f};return ii(i)&&(Z.uniformBlockSpec=T0(i,n),Z.transformFeedbackInfo=S0(i,n)),Z}const H0=/\s|{|}|;/;function F0(i,n,r,f,Z){const x=ns(r,f,Z),H=[];if(n=n.map(function(et){if(!H0.test(et)){const lt=Vl(et);if(lt)et=lt.text;else{const pt=`no element with id: ${et}`;x.errorCallback(pt),H.push(pt)}}return et}),H.length)return f0(x,"");const T=x.callback;T&&(x.callback=(et,lt)=>{T(et,et?void 0:ql(i,lt))});const J=W0(i,n,x);return J?ql(i,J):null}const C0=4,tc=5123;function J0(i,n,r,f,Z,x){r=r===void 0?C0:r;const H=n.indices,T=n.elementType,J=f===void 0?n.numElements:f;Z=Z===void 0?0:Z,T||H?x!==void 0?i.drawElementsInstanced(r,J,T===void 0?tc:n.elementType,Z,x):i.drawElements(r,J,T===void 0?tc:n.elementType,Z):x!==void 0?i.drawArraysInstanced(r,Z,J,x):i.drawArrays(r,Z,J)}const ec=36160,ao=36161,k0=3553,N0=5121,E0=6402,U0=6408,B0=33190,K0=36012,M0=35056,A0=36013,z0=32854,j0=32855,P0=36194,nc=33189,rc=6401,ic=36168,rs=34041,is=36064,ho=36096,oc=36128,os=33306,ss=33071,ls=9729,O0=[{format:U0,type:N0,min:ls,wrap:ss},{format:rs}],tr={};tr[rs]=os,tr[rc]=oc,tr[ic]=oc,tr[E0]=ho,tr[nc]=ho,tr[B0]=ho,tr[K0]=ho,tr[M0]=os,tr[A0]=os;function _0(i,n){return tr[i]||tr[n]}const yr={};yr[z0]=!0,yr[j0]=!0,yr[P0]=!0,yr[rs]=!0,yr[nc]=!0,yr[rc]=!0,yr[ic]=!0;function Q0(i){return yr[i]}const D0=32;function $0(i){return i>=is&&i<is+D0}function fo(i,n,r,f){const Z=ec,x=i.createFramebuffer();i.bindFramebuffer(Z,x),r=r||i.drawingBufferWidth,f=f||i.drawingBufferHeight,n=n||O0;const H=[],T={framebuffer:x,attachments:[],width:r,height:f};return n.forEach(function(J,et){let lt=J.attachment;const pt=J.samples,Yt=J.format;let Lt=J.attachmentPoint||_0(Yt,J.internalFormat);if(Lt||(Lt=is+et),$0(Lt)&&H.push(Lt),!lt)if(pt!==void 0||Q0(Yt))lt=i.createRenderbuffer(),i.bindRenderbuffer(ao,lt),pt>1?i.renderbufferStorageMultisample(ao,pt,Yt,r,f):i.renderbufferStorage(ao,Yt,r,f);else{const at=Object.assign({},J);at.width=r,at.height=f,at.auto===void 0&&(at.auto=!1,at.min=at.min||at.minMag||ls,at.mag=at.mag||at.minMag||ls,at.wrapS=at.wrapS||at.wrap||ss,at.wrapT=at.wrapT||at.wrap||ss),lt=Wl(i,at)}if(lu(i,lt))i.framebufferRenderbuffer(Z,Lt,ao,lt);else if(ko(i,lt))J.layer!==void 0?i.framebufferTextureLayer(Z,Lt,lt,J.level||0,J.layer):i.framebufferTexture2D(Z,Lt,J.target||k0,lt,J.level||0);else throw new Error("unknown attachment type");T.attachments.push(lt)}),i.drawBuffers&&i.drawBuffers(H),T}function q0(i,n,r){r=r||ec,n?(i.bindFramebuffer(r,n.framebuffer),i.viewport(0,0,n.width,n.height)):(i.bindFramebuffer(r,null),i.viewport(0,0,i.drawingBufferWidth,i.drawingBufferHeight))}function pn(i,n){return()=>n instanceof WebGLTexture?n:Wl(i,{src:n,wrap:i.CLAMP_TO_EDGE})}const Pr=2;class wr{constructor(n){gt(this,"id","_");gt(this,"context");gt(this,"output");gt(this,"fbi");gt(this,"options");gt(this,"programInfo");gt(this,"bufferInfo");gt(this,"profiler");gt(this,"lastRun");const{context:r,width:f,height:Z}=n;this.context=r,this.options=n;const x=this.buildDefines();this.programInfo=F0(this.context,[x+this.getVertexShader(),x+this.getFragmentShader()]),this.bufferInfo=wu(this.context,this.getBuffers()),this.fbi=fo(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],f,Z),this.output=this.fbi.attachments[0]}resizeOutput(n,r){this.fbi=fo(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],n,r),this.options.width=n,this.options.height=r,this.output=this.fbi.attachments[0]}getDefines(){return{}}getBuffers(){return{position:{numComponents:2,data:[-1,-1,-1,1,1,-1,1,1,-1,1,1,-1]},texture_coord:{numComponents:2,data:[0,0,0,1,1,0,1,1,0,1,1,0]}}}buildDefines(){let n="";const r=this.getDefines();for(let f in r)n+=`#define ${f} ${r[f].toFixed(1)}
|
|
135
|
+
`;return n}run(n){var Z,x,H,T,J,et;(Z=this.profiler)==null||Z.pushContext(`[${this.id}] PROG : ${this.constructor.name}`),(x=this.profiler)==null||x.pushContext(`[${this.id}] UNIFORMS`);for(const lt in n)typeof n[lt]=="function"&&((H=this.profiler)==null||H.pushContext(`[${this.id}] UNI : ${lt}`),n[lt]=n[lt](),(T=this.profiler)==null||T.popContext(`[${this.id}] UNI : ${lt}`));(J=this.profiler)==null||J.popContext(`[${this.id}] UNIFORMS`);const r=Date.now();let f=0;this.lastRun&&(f=(r-this.lastRun)/1e3),this.lastRun=r,this.context.viewport(0,0,this.context.canvas.width,this.context.canvas.height),this.context.useProgram(this.programInfo.program),L0(this.context,this.programInfo,this.bufferInfo),$l(this.programInfo,{delta:f,canvas:[this.context.canvas.width,this.context.canvas.height],...n}),q0(this.context,this.options.disableFramebuffer?null:this.fbi),J0(this.context,this.bufferInfo),(et=this.profiler)==null||et.popContext(`[${this.id}] PROG : ${this.constructor.name}`)}setProfiler(n){this.profiler=n}}const t3=`precision mediump float;
|
|
136
136
|
|
|
137
137
|
varying vec2 _texture_coord;
|
|
138
138
|
|
|
@@ -157,7 +157,7 @@ void main() {
|
|
|
157
157
|
_texture_coord = texture_coord;
|
|
158
158
|
_texture_coord.y = 1. - texture_coord.y;
|
|
159
159
|
}
|
|
160
|
-
`;class cs extends
|
|
160
|
+
`;class cs extends wr{getFragmentShader(){return t3}getVertexShader(){return e3}}class us{constructor(){gt(this,"steps",[]);gt(this,"profiler")}addStep(n){this.steps.push(n)}async run(){for(const n of this.steps)n.program.run(n.getUniforms())}resizeOutput(n,r){var f,Z;(f=this.profiler)==null||f.pushContext(`PIP [${this.constructor.name}]`);for(const x of this.steps)x.preventResize||x.program.resizeOutput(n,r);(Z=this.profiler)==null||Z.popContext(`PIP [${this.constructor.name}]`)}setProfiler(n){this.profiler=n;for(const r of this.steps)r.program.setProfiler(n)}setId(n){for(const r of this.steps)r.program.id=n}}class as extends us{constructor(){super(...arguments);gt(this,"preciseMaskEnabled",!1)}}class sc extends as{constructor(r){super();gt(this,"inputImage");gt(this,"inputBackgroundImage");gt(this,"inputMask");gt(this,"preciseMaskEnabled",!0);this.context=r;const f={context:r,height:r.canvas.height,width:r.canvas.width},Z=new cs({...f,disableFramebuffer:!0});this.addStep({program:Z,getUniforms:()=>({background:pn(r,this.inputBackgroundImage),foreground:pn(r,this.inputImage),threshold:pn(r,this.inputMask)})})}setData(r,f){this.inputImage=r,this.inputMask=f}}const n3=`precision mediump float;
|
|
161
161
|
|
|
162
162
|
varying vec2 _texture_coord;
|
|
163
163
|
uniform sampler2D texture;
|
|
@@ -176,7 +176,7 @@ void main() {
|
|
|
176
176
|
_texture_coord.y = 1. - texture_coord.y;
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
|
-
`;class i3 extends
|
|
179
|
+
`;class i3 extends wr{getFragmentShader(){return n3}getVertexShader(){return r3}}class o3 extends us{constructor(r,f,Z){super();gt(this,"inputImage");this.context=r;const x={context:r,height:Z,width:f};this.addStep({program:new i3({...x,disableFramebuffer:!0}),getUniforms:()=>({texture:pn(r,this.inputImage),invert_y:!0})})}setData(r){this.inputImage=r}}async function lc(i){return new Promise(n=>{setTimeout(()=>{n()},i)})}const s3=`precision mediump float;
|
|
180
180
|
|
|
181
181
|
varying vec2 _texture_coord;
|
|
182
182
|
|
|
@@ -195,7 +195,7 @@ void main() {
|
|
|
195
195
|
gl_Position = vec4(position, 0., 1.);
|
|
196
196
|
_texture_coord = texture_coord;
|
|
197
197
|
}
|
|
198
|
-
`;var ds=(i=>(i[i.LINEAR=0]="LINEAR",i[i.GAUSSIAN=1]="GAUSSIAN",i))(ds||{});class
|
|
198
|
+
`;var ds=(i=>(i[i.LINEAR=0]="LINEAR",i[i.GAUSSIAN=1]="GAUSSIAN",i))(ds||{});class cc extends wr{getDefines(){var n;return{RADIUS:(n=this.options.radius)!=null?n:1}}getFragmentShader(){return s3+this.createLoopFunction()}getVertexShader(){return l3}createLoopFunction(){var r;let n=(r=this.options.radius)!=null?r:1;return`
|
|
199
199
|
|
|
200
200
|
vec4 loop() {
|
|
201
201
|
vec4 result = vec4(0,0,0,0);
|
|
@@ -216,7 +216,7 @@ void main() {
|
|
|
216
216
|
diff.x = normalizedRadius.x;
|
|
217
217
|
}
|
|
218
218
|
return result / factorSum;
|
|
219
|
-
}`}getFactor(n,r){switch(this.options.type){case 1:return this.getLinearFactor(n,r);case 0:default:return this.getLinearFactor(n,r)}}getLinearFactor(n,r){return 1}getGaussianFactor(n,r){var J;const f=Math.PI*2,Z=Math.max((J=this.options.radius)!=null?J:1,1),x=1/(f*Z**2),H=-(n**2+r**2),T=x*H;return x*Math.E**T}}class hs extends
|
|
219
|
+
}`}getFactor(n,r){switch(this.options.type){case 1:return this.getLinearFactor(n,r);case 0:default:return this.getLinearFactor(n,r)}}getLinearFactor(n,r){return 1}getGaussianFactor(n,r){var J;const f=Math.PI*2,Z=Math.max((J=this.options.radius)!=null?J:1,1),x=1/(f*Z**2),H=-(n**2+r**2),T=x*H;return x*Math.E**T}}class hs extends wr{constructor(r){super(r);gt(this,"fbi2");this.fbi2=fo(r.context,[{format:r.context.RGBA,type:r.context.UNSIGNED_BYTE,min:r.context.LINEAR,mag:r.context.LINEAR,wrap:r.context.CLAMP_TO_EDGE}],r.width,r.height)}run(r){const f=this.fbi;this.fbi=this.fbi2,this.fbi2=f,this.output=this.fbi.attachments[0],super.run({...r,previous_rendering:this.fbi2.attachments[0]})}resizeOutput(r,f){super.resizeOutput(r,f),this.fbi2=fo(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],r,f)}}const c3=`precision mediump float;
|
|
220
220
|
|
|
221
221
|
varying vec2 _texture_coord;
|
|
222
222
|
|
|
@@ -331,7 +331,7 @@ out vec2 _texture_coord;
|
|
|
331
331
|
void main() {
|
|
332
332
|
gl_Position = vec4(position, 0.0, 1.0);
|
|
333
333
|
_texture_coord = texture_coord;
|
|
334
|
-
}`;class f3 extends
|
|
334
|
+
}`;class f3 extends wr{getFragmentShader(){return d3}getVertexShader(){return h3}}const m3=`precision mediump float;
|
|
335
335
|
|
|
336
336
|
varying vec2 _texture_coord;
|
|
337
337
|
|
|
@@ -362,7 +362,7 @@ void main() {
|
|
|
362
362
|
gl_Position = vec4(position, 0., 1.);
|
|
363
363
|
_texture_coord = texture_coord;
|
|
364
364
|
}
|
|
365
|
-
`;class b3 extends
|
|
365
|
+
`;class b3 extends wr{getFragmentShader(){return m3}getVertexShader(){return p3}}const y3=`precision mediump float;
|
|
366
366
|
|
|
367
367
|
varying vec2 _texture_coord;
|
|
368
368
|
|
|
@@ -413,7 +413,7 @@ void main() {
|
|
|
413
413
|
gl_Position = vec4(position, 0., 1.);
|
|
414
414
|
_texture_coord = texture_coord;
|
|
415
415
|
}
|
|
416
|
-
`;class X3 extends hs{getFragmentShader(){return v3}getVertexShader(){return G3}}class
|
|
416
|
+
`;class X3 extends hs{getFragmentShader(){return v3}getVertexShader(){return G3}}class W3 extends us{constructor(r,f,Z){super();gt(this,"inputImage");gt(this,"inputMask");gt(this,"previousInputImage");gt(this,"previousInputMask");gt(this,"output");gt(this,"options",{currentThresholdMinimum:0,currentThresholdMaximum:1,previousThresholdMinimum:0,previousThresholdMaximum:1,thresholdMinimum:0,thresholdMaximum:1,thresholdFactor:1});gt(this,"jointBilateral");this.context=r;const x={context:r,height:Z,width:f},H=new a3(x),T=new cc({...x,radius:1,type:ds.GAUSSIAN}),J=new X3(x),et=new Z3(x),lt=new b3(x);this.jointBilateral=new f3(x),this.addStep({program:H,getUniforms:()=>({image_now:pn(r,this.inputImage),image_before:pn(r,this.previousInputImage),mask_now:pn(r,this.inputMask),mask_before:pn(r,this.previousInputMask),current_threshold_minimum:this.options.currentThresholdMinimum,current_threshold_maximum:this.options.currentThresholdMaximum,previous_threshold_minimum:this.options.previousThresholdMinimum,previous_threshold_maximum:this.options.previousThresholdMaximum,threshold_minimum:this.options.thresholdMinimum,threshold_maximum:this.options.thresholdMaximum,threshold_factor:this.options.thresholdFactor})}),this.addStep({program:J,getUniforms:()=>({inputs:pn(r,this.inputMask),threshold:pn(r,H.output)})}),this.addStep({program:lt,getUniforms:()=>({texture:pn(r,J.output)})}),this.addStep({program:et,getUniforms:()=>({texture:pn(r,lt.output)})}),this.addStep({program:T,getUniforms:()=>({texture:pn(r,et.output)})}),this.addStep({program:this.jointBilateral,getUniforms:()=>{var $e,je,We,zt,Jn,ne,Zt,qe;const Yt=(je=($e=this.inputImage)==null?void 0:$e.width)!=null?je:1,Lt=(zt=(We=this.inputImage)==null?void 0:We.height)!=null?zt:1,at=(ne=(Jn=this.inputMask)==null?void 0:Jn.width)!=null?ne:1,dt=(qe=(Zt=this.inputMask)==null?void 0:Zt.height)!=null?qe:1,Bt=Math.max(Yt/at,Lt/dt),Nt=Math.max(1,Math.sqrt(Bt)*.66),ee=1/Yt,O=1/Lt;return{input_frame:pn(r,this.inputImage),segmentation_mask:pn(r,this.inputMask),threshold:pn(r,T.output),texel_size:[ee,O],step:Nt,radius:Bt,offset:Nt>1?Nt*.5:0,sigma_texel:Math.max(ee,O)*Bt,sigma_color:.1}}}),this.output=this.jointBilateral.output}setData(r,f){this.previousInputImage=this.inputImage?this.inputImage:r,this.previousInputMask=this.inputMask?this.inputMask:f,this.inputImage=r,this.inputMask=f}setOptions(r){this.options=r}resizeOutput(r,f){super.resizeOutput(r,f),this.output=this.jointBilateral.output}}var uc=(i=>(i.PUSH="PUSH",i.POP="POP",i))(uc||{});class V3{constructor(n){gt(this,"context");gt(this,"extension");gt(this,"queries",[]);gt(this,"activeQuery");this.context=n,this.extension=n.getExtension("EXT_disjoint_timer_query_webgl2")}start(){}stop(){this.activeQuery&&this.context.endQuery(this.extension.TIME_ELAPSED_EXT)}pushContext(n){this.createQuery("PUSH",n)}popContext(n){this.createQuery("POP",n)}createQuery(n,r){this.activeQuery&&this.context.endQuery(this.extension.TIME_ELAPSED_EXT),this.activeQuery=this.context.createQuery(),this.context.beginQuery(this.extension.TIME_ELAPSED_EXT,this.activeQuery),this.queries.push({name:r,action:n,query:this.activeQuery})}async getResolvedQueries(){const n=(await Promise.all([...this.queries].map(r=>this.resolveQuery(r)))).filter(r=>r);for(let r=1;r<n.length;++r)n[r].timestamp+=n[r-1].duration+n[r-1].timestamp;return n}async resolveQuery(n){if(!await this.awaitQueryAvailable(n)){console.log("Unawaitable query",n);return}if(this.context.getParameter(this.extension.GPU_DISJOINT_EXT)){console.log("Disjointed query",n);return}return{...n,duration:this.context.getQueryParameter(n.query,this.context.QUERY_RESULT),timestamp:0}}async awaitQueryAvailable(n){for(let r=0;r<10;++r){if(this.context.getQueryParameter(n.query,this.context.QUERY_RESULT_AVAILABLE))return n;await lc(200)}}}class mo{constructor(){gt(this,"canvas");gt(this,"context");gt(this,"pipeline");gt(this,"previousImageWidth",0);gt(this,"previousImageHeight",0);gt(this,"previousMaskWidth",Pr);gt(this,"previousMaskHeight",Pr);gt(this,"profiler");gt(this,"postProcessingEnabled",!0);gt(this,"improveMask");const n=new OffscreenCanvas(0,0),r=n.getContext("webgl2");if(!r)throw"Fail to retrieve webgl2 context";this.canvas=n,this.context=r,this.improveMask=new W3(this.context,Pr,Pr)}setFlickeringOptions(n){this.improveMask.setOptions(n)}enablePostProcessing(){this.postProcessingEnabled=!0}disablePostProcessing(){this.postProcessingEnabled=!1}async profileWebgl(n){const r=new V3(this.context);return this.profiler=r,r.start(),await lc(n),this.profiler=void 0,r.stop(),r.getResolvedQueries()}async render(n,r){var x,H;if(!this.pipeline)throw"missing pipeline";(this.previousImageHeight!==n.height||this.previousImageWidth!==n.width)&&this.resizeOutput(n.width,n.height),(this.previousMaskHeight!==r.height||this.previousMaskWidth!==r.width)&&(this.improveMask.resizeOutput(r.width,r.height),this.previousMaskWidth=r.width,this.previousMaskHeight=r.height);const f="renderer";(x=this.profiler)==null||x.pushContext(f),this.improveMask.setProfiler(this.profiler),this.pipeline.setProfiler(this.profiler);let Z=r;return this.postProcessingEnabled&&(this.improveMask.setData(n,r),this.improveMask.run(),Z=this.improveMask.output),this.pipeline.setData(n,Z),await this.pipeline.run(),(H=this.profiler)==null||H.popContext(f),this.canvas}resizeOutput(n,r){var f;this.canvas.width=n,this.canvas.height=r,(f=this.pipeline)==null||f.resizeOutput(n,r),this.previousImageWidth=n,this.previousImageHeight=r}}class ac extends mo{constructor(){super();gt(this,"pipeline");gt(this,"backgroundImage");gt(this,"backgroundImageResizerCanvas");gt(this,"backgroundImageResizerContext");gt(this,"backgroundImageResizer");this.pipeline=new sc(this.context);const r=new OffscreenCanvas(0,0),f=r.getContext("webgl2");if(!f)throw"Fail to retrieve webgl context";this.backgroundImageResizerCanvas=r,this.backgroundImageResizerContext=f,this.backgroundImageResizer=new o3(this.backgroundImageResizerContext,0,0)}setBackgroundImage(r){this.backgroundImage=r,this.updateBackgroundImage()}updateBackgroundImage(){const{width:r,height:f}=this.canvas;this.backgroundImageResizer.resizeOutput(r,f),this.backgroundImageResizer.setData(this.backgroundImage),this.backgroundImageResizer.run(),this.pipeline.inputBackgroundImage=this.backgroundImageResizerCanvas}resizeOutput(r,f){super.resizeOutput(r,f),this.backgroundImageResizerCanvas.width=r,this.backgroundImageResizerCanvas.height=f,this.backgroundImageResizer.resizeOutput(r,f),this.updateBackgroundImage()}}class R3 extends ac{constructor(){super(...arguments);gt(this,"frameReader")}setBackgroundVideo(r){this.frameReader=r}async render(r,f){return await this.readNextVideoFrame(),super.render(r,f)}async readNextVideoFrame(){var f;const r=await((f=this.frameReader)==null?void 0:f.read());if(r!=null&&r.value){const Z=await createImageBitmap(r.value);this.setBackgroundImage(Z),r.value.close()}}}class dc{blurBackground(n){return new O2(n)}blurSilhouette(n){return new _2(n)}imageBackground(){return new Q2}videoBackground(){return new R3}}const I3=`precision mediump float;
|
|
417
417
|
|
|
418
418
|
varying vec2 _texture_coord;
|
|
419
419
|
|
|
@@ -433,7 +433,7 @@ void main() {
|
|
|
433
433
|
gl_Position = vec4(position, 0., 1.);
|
|
434
434
|
_texture_coord = texture_coord;
|
|
435
435
|
}
|
|
436
|
-
`;class S3 extends
|
|
436
|
+
`;class S3 extends wr{getDefines(){var n;return{RADIUS:(n=this.options.radius)!=null?n:1}}getFragmentShader(){return I3+this.createLoopFunction()}getVertexShader(){return x3}createLoopFunction(){var r;let n=(r=this.options.radius)!=null?r:1;return`
|
|
437
437
|
|
|
438
438
|
vec4 loop() {
|
|
439
439
|
vec4 result = vec4(0,0,0,0);
|
|
@@ -455,4 +455,4 @@ void main() {
|
|
|
455
455
|
diff.x = normalizedRadius.x;
|
|
456
456
|
}
|
|
457
457
|
return result / factorSum;
|
|
458
|
-
}`}}const T3=10,L3=2,Y3=8;class w3 extends as{constructor(r,f){super();Zt(this,"inputImage");Zt(this,"inputMask");Zt(this,"blur");this.context=r,this.radius=f;const Z={context:r,height:r.canvas.height,width:r.canvas.width};this.blur=new S3({...Z,radius:f,...this.getBlurTextureSize(r.canvas.width,r.canvas.height)});const x=new cs({...Z,disableFramebuffer:!0});this.addStep({program:this.blur,preventResize:!0,getUniforms:()=>({texture:pn(r,this.inputImage),mask:pn(r,this.inputMask)})}),this.addStep({program:x,getUniforms:()=>({background:pn(r,this.blur.output),foreground:pn(r,this.inputImage),threshold:pn(r,this.inputMask)})})}getBlurTextureSize(r,f){const Z=this.radius>T3?Y3:L3;return{width:Math.max(Or,r/Z),height:Math.max(Or,f/Z)}}setData(r,f){this.inputImage=r,this.inputMask=f}resizeOutput(r,f){super.resizeOutput(r,f);const Z=this.getBlurTextureSize(r,f);this.blur.resizeOutput(Z.width,Z.height)}}class H3 extends mo{constructor(r){super();Zt(this,"pipeline");this.pipeline=new w3(this.context,r),this.disablePostProcessing()}}class F3 extends as{constructor(r,f){super();Zt(this,"inputImage");Zt(this,"inputMask");this.context=r;const Z={context:r,height:r.canvas.height,width:r.canvas.width},x=new c2({...Z,radius:f,type:ds.GAUSSIAN}),H=new cs({...Z,disableFramebuffer:!0});this.addStep({program:x,getUniforms:()=>({texture:pn(r,this.inputImage)})}),this.addStep({program:H,getUniforms:()=>({background:pn(r,this.inputImage),foreground:pn(r,x.output),threshold:pn(r,this.inputMask)})})}setData(r,f){this.inputImage=r,this.inputMask=f}}class C3 extends mo{constructor(r){super();Zt(this,"pipeline");this.pipeline=new F3(this.context,r),this.disablePostProcessing()}}class J3 extends s2{constructor(){super(...arguments);Zt(this,"frameReader");Zt(this,"preciseMaskEnabled",!0)}set inputVideo(r){this.frameReader=r.getReader(),this.readNextVideoFrame()}async run(){this.frameReader&&(await super.run(),this.readNextVideoFrame())}async readNextVideoFrame(){var f;const r=await((f=this.frameReader)==null?void 0:f.read());r!=null&&r.value&&(this.inputBackgroundImage=await createImageBitmap(r.value),r.value.close())}}class k3 extends mo{constructor(){super();Zt(this,"pipeline");this.pipeline=new J3(this.context)}setBackgroundVideo(r){this.pipeline.inputVideo=r}}class h2{blurBackground(n){return new H3(n)}blurSilhouette(n){return new C3(n)}imageBackground(){return new a2}videoBackground(){return new k3}}class N3{constructor(n){Zt(this,"factory");switch(n){case $r.CANVAS:this.factory=new d2;break;case $r.WEBGL:this.factory=new h2;break;default:const r=Ls();this.factory=r.supported?new h2:new d2}}blurBackground(n){return this.getFactory().blurBackground(n)}blurSilhouette(n){return this.getFactory().blurSilhouette(n)}imageBackground(){return this.getFactory().imageBackground()}videoBackground(){return this.getFactory().videoBackground()}getFactory(){if(!this.factory)throw"Factory is not initialized";return this.factory}}class E3{constructor(){Zt(this,"renderer")}setBackgroundOptions(n){var f,Z;const r=new N3((f=n.renderingOptions)==null?void 0:f.type);switch(n.transformerType){case"BackgroundBlur":this.renderer=r.blurBackground(this.getBlurSize(n.radius));break;case"SilhouetteBlur":this.renderer=r.blurSilhouette(this.getBlurSize(n.radius));break;case"VideoBackground":this.renderer=r.videoBackground();break;case"VirtualBackground":this.renderer=r.imageBackground();break;default:throw`Unknown rendering type [${n.transformerType}]`}((Z=n.renderingOptions)==null?void 0:Z.type)===$r.WEBGL&&(n.renderingOptions.selfieSegmentationType===vi.PRECISE?this.renderer.enablePostProcessing():n.renderingOptions.selfieSegmentationType===vi.FAST&&this.renderer.disablePostProcessing())}setFlickeringOptions(n){var r;(r=this.renderer)==null||r.setFlickeringOptions(n)}setVideoBGReadable(n){const r=this.renderer;r.setBackgroundVideo&&r.setBackgroundVideo(n)}async setVirtualBGImage(n){const r=this.renderer;r.setBackgroundImage&&r.setBackgroundImage(n)}async process(n,r){if(this.renderer)return this.renderer.render(n,r)}async resizeForeground(n,r){}getBlurSize(n=Dr.Low){switch(n){case Dr.Low:return 5;case Dr.High:return 12}return n}async profile(n){var r,f;return(f=(r=this.renderer)==null?void 0:r.profileWebgl(n))!=null?f:[]}}class f2{constructor(){Zt(this,"selfieSegmentation",new Ss);Zt(this,"backgroundFilter");Zt(this,"reporter",new jc);Zt(this,"isEnabled",!0);Zt(this,"backgroundOptions")}async init(n,r){await this.selfieSegmentation.init(r.wasmAssetUriPath,r.tfliteAssetUriPath),this.backgroundFilter=new E3,this.report({variation:"Create"})}async transform(n,r){var T,J;if(!this.isEnabled)return r.enqueue(n);let f;const Z=(T=n.timestamp)!=null?T:0,x=await createImageBitmap(n),H=await this.selfieSegmentation.process(x);H&&(f=await((J=this.backgroundFilter)==null?void 0:J.process(x,H))),f?(n.close(),r.enqueue(new VideoFrame(f,{timestamp:Z,alpha:"discard"}))):r.enqueue(n)}async setBackgroundOptions(n){var r;this.backgroundOptions=n,await((r=this.backgroundFilter)==null?void 0:r.setBackgroundOptions(n)),this.report({variation:"Update"})}async setVideoBGReadable(n){var r;await((r=this.backgroundFilter)==null?void 0:r.setVideoBGReadable(n))}async setVirtualBGImage(n){var r;await((r=this.backgroundFilter)==null?void 0:r.setVirtualBGImage(n))}setFlickeringOptions(n){var r;(r=this.backgroundFilter)==null||r.setFlickeringOptions(n),this.report({variation:"Update"})}async profile(n){var r,f;return(f=(r=this.backgroundFilter)==null?void 0:r.profile(n))!=null?f:[]}getTransformerType(){var n,r;return(r=(n=this.backgroundOptions)==null?void 0:n.transformerType)!=null?r:"Undefined"}enable(){this.isEnabled=!0}disable(){this.isEnabled=!1}report(n){var r;this.reporter.send({version:Oc,action:"MlTransformers",transformerType:(r=this.backgroundOptions)==null?void 0:r.transformerType,config:JSON.stringify(this.backgroundOptions),...n})}}const ps=class{constructor(){Zt(this,"backgroundTransformer",new f2);Zt(this,"mediaProcessor",new Q2);Zt(this,"rate",30);Zt(this,"resolveOnMediaProcessor");Zt(this,"eventsQueue",[])}async init(n,r){await this.backgroundTransformer.init(n,r),await this.mediaProcessor.setTransformers([this.backgroundTransformer]),this.mediaProcessor.setTrackExpectedRate(this.rate),this.mediaProcessor.onAny((f,Z)=>{this.resolveOnMediaProcessor?(this.resolveOnMediaProcessor({name:f,data:Z}),this.resolveOnMediaProcessor=void 0):this.eventsQueue.push({name:f,data:Z})})}enable(){this.backgroundTransformer.enable()}disable(){this.backgroundTransformer.disable()}async onMediaProcessorEvent(){return await new Promise(n=>{this.eventsQueue.length>0?n(this.eventsQueue.shift()):this.resolveOnMediaProcessor=n})}async setTrackExpectedRate(n){this.rate=n,this.mediaProcessor.setTrackExpectedRate(n)}async transform(n,r){this.mediaProcessor.transform(n,r)}async setBackgroundOptions(n){var r;await((r=this.backgroundTransformer)==null?void 0:r.setBackgroundOptions(n))}setVideoBGReadable(n){this.backgroundTransformer.setVideoBGReadable(n)}async setVirtualBGImage(n){await this.backgroundTransformer.setVirtualBGImage(n)}async terminate(){await this.mediaProcessor.destroy()}setFlickeringOptions(n){this.backgroundTransformer.setFlickeringOptions(n)}setVonageMetadata(n){A2(n)}async profile(n){return JSON.stringify(await this.backgroundTransformer.profile(n))}};let fs=ps;(()=>{gc("ProcessorWorker",ps)})();const m2="dmFyICRsPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgV2w9KEosUSxWKT0+USBpbiBKPyRsKEosUSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Vn0pOkpbUV09Vjt2YXIgbD0oSixRLFYpPT4oV2woSix0eXBlb2YgUSE9InN5bWJvbCI/USsiIjpRLFYpLFYpOyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBKKHIsZSl7Z2xvYmFsVGhpcy52b25hZ2V8fChnbG9iYWxUaGlzLnZvbmFnZT17fSksZ2xvYmFsVGhpcy52b25hZ2Uud29ya2VyaXplcnx8KGdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI9e30pO2xldCB0PWdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI7cmV0dXJuIHRbcl18fCh0W3JdPWUpLHRbcl19Y29uc3QgUT1KKCJnbG9iYWxzIix7fSk7dmFyIFY9KHI9PihyLklOSVQ9IklOSVQiLHIuRk9SV0FSRD0iRk9SV0FSRCIsci5URVJNSU5BVEU9IlRFUk1JTkFURSIsci5HTE9CQUxTX1NZTkM9IkdMT0JBTFNfU1lOQyIsci5FVkVOVD0iRVZFTlQiLHIpKShWfHx7fSk7ZnVuY3Rpb24gR2kocil7cmV0dXJuW0ltYWdlQml0bWFwLFJlYWRhYmxlU3RyZWFtLFdyaXRhYmxlU3RyZWFtXS5zb21lKHQ9PnIgaW5zdGFuY2VvZiB0KX1mdW5jdGlvbiBVZShyLGUpe2NvbnN0e2lkOnQsdHlwZTpufT1yLGk9QXJyYXkuaXNBcnJheShlKT9lOltlXTtwb3N0TWVzc2FnZSh7aWQ6dCx0eXBlOm4scmVzdWx0OmV9LGkuZmlsdGVyKG89PkdpKG8pKSl9Sigid29ya2VyaXplZCIse30pO2Z1bmN0aW9uIFlyKCl7cmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZX1mdW5jdGlvbiBldChyLGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpZS5zcGxpY2UoMCxlLmxlbmd0aCk7ZWxzZSBpZih0eXBlb2YgZT09Im9iamVjdCIpZm9yKGNvbnN0IHQgaW4gZSlkZWxldGUgZVt0XTtmb3IoY29uc3QgdCBpbiByKUFycmF5LmlzQXJyYXkoclt0XSk/KGVbdF09W10sZXQoclt0XSxlW3RdKSk6dHlwZW9mIHJbdF09PSJvYmplY3QiPyhlW3RdPXt9LGV0KHJbdF0sZVt0XSkpOmVbdF09clt0XX1jb25zdCB0ZT1uZXcgV2Vha01hcCxoZT1uZXcgV2Vha01hcCxaPW5ldyBXZWFrTWFwLHR0PVN5bWJvbCgiYW55UHJvZHVjZXIiKSxYcj1Qcm9taXNlLnJlc29sdmUoKSxydD1TeW1ib2woImxpc3RlbmVyQWRkZWQiKSxudD1TeW1ib2woImxpc3RlbmVyUmVtb3ZlZCIpO2xldCBpdD0hMSxIdD0hMTtmdW5jdGlvbiBBZShyKXtpZih0eXBlb2YgciE9InN0cmluZyImJnR5cGVvZiByIT0ic3ltYm9sIiYmdHlwZW9mIHIhPSJudW1iZXIiKXRocm93IG5ldyBUeXBlRXJyb3IoImBldmVudE5hbWVgIG11c3QgYmUgYSBzdHJpbmcsIHN5bWJvbCwgb3IgbnVtYmVyIil9ZnVuY3Rpb24gb3Qocil7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gSWUocixlKXtjb25zdCB0PWhlLmdldChyKTtpZighIXQuaGFzKGUpKXJldHVybiB0LmdldChlKX1mdW5jdGlvbiBOZShyLGUpe2NvbnN0IHQ9dHlwZW9mIGU9PSJzdHJpbmcifHx0eXBlb2YgZT09InN5bWJvbCJ8fHR5cGVvZiBlPT0ibnVtYmVyIj9lOnR0LG49Wi5nZXQocik7aWYoISFuLmhhcyh0KSlyZXR1cm4gbi5nZXQodCl9ZnVuY3Rpb24gJGkocixlLHQpe2NvbnN0IG49Wi5nZXQocik7aWYobi5oYXMoZSkpZm9yKGNvbnN0IGkgb2Ygbi5nZXQoZSkpaS5lbnF1ZXVlKHQpO2lmKG4uaGFzKHR0KSl7Y29uc3QgaT1Qcm9taXNlLmFsbChbZSx0XSk7Zm9yKGNvbnN0IG8gb2Ygbi5nZXQodHQpKW8uZW5xdWV1ZShpKX19ZnVuY3Rpb24gUXIocixlKXtlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07bGV0IHQ9ITEsbj0oKT0+e30saT1bXTtjb25zdCBvPXtlbnF1ZXVlKHMpe2kucHVzaChzKSxuKCl9LGZpbmlzaCgpe3Q9ITAsbigpfX07Zm9yKGNvbnN0IHMgb2YgZSl7bGV0IGE9TmUocixzKTthfHwoYT1uZXcgU2V0LFouZ2V0KHIpLnNldChzLGEpKSxhLmFkZChvKX1yZXR1cm57YXN5bmMgbmV4dCgpe3JldHVybiBpP2kubGVuZ3RoPT09MD90PyhpPXZvaWQgMCx0aGlzLm5leHQoKSk6KGF3YWl0IG5ldyBQcm9taXNlKHM9PntuPXN9KSx0aGlzLm5leHQoKSk6e2RvbmU6ITEsdmFsdWU6YXdhaXQgaS5zaGlmdCgpfTp7ZG9uZTohMH19LGFzeW5jIHJldHVybihzKXtpPXZvaWQgMDtmb3IoY29uc3QgYSBvZiBlKXtjb25zdCB1PU5lKHIsYSk7dSYmKHUuZGVsZXRlKG8pLHUuc2l6ZT09PTAmJlouZ2V0KHIpLmRlbGV0ZShhKSl9cmV0dXJuIG4oKSxhcmd1bWVudHMubGVuZ3RoPjA/e2RvbmU6ITAsdmFsdWU6YXdhaXQgc306e2RvbmU6ITB9fSxbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9fX1mdW5jdGlvbiBxcihyKXtpZihyPT09dm9pZCAwKXJldHVybiBLcjtpZighQXJyYXkuaXNBcnJheShyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyIpO2Zvcihjb25zdCBlIG9mIHIpaWYoIUtyLmluY2x1ZGVzKGUpKXRocm93IHR5cGVvZiBlIT0ic3RyaW5nIj9uZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIGVsZW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpOm5ldyBFcnJvcihgJHtlfSBpcyBub3QgRW1pdHRlcnkgbWV0aG9kYCk7cmV0dXJuIHJ9Y29uc3QgU2U9cj0+cj09PXJ0fHxyPT09bnQ7ZnVuY3Rpb24gc3QocixlLHQpe2lmKFNlKGUpKXRyeXtpdD0hMCxyLmVtaXQoZSx0KX1maW5hbGx5e2l0PSExfX1jbGFzcyBSZXtzdGF0aWMgbWl4aW4oZSx0KXtyZXR1cm4gdD1xcih0KSxuPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBmdW5jdGlvbiIpO2Zvcihjb25zdCBzIG9mIHQpaWYobi5wcm90b3R5cGVbc10hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke3N9XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO2Z1bmN0aW9uIGkoKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7ZW51bWVyYWJsZTohMSx2YWx1ZTpuZXcgUmV9KSx0aGlzW2VdfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxlLHtlbnVtZXJhYmxlOiExLGdldDppfSk7Y29uc3Qgbz1zPT5mdW5jdGlvbiguLi5hKXtyZXR1cm4gdGhpc1tlXVtzXSguLi5hKX07Zm9yKGNvbnN0IHMgb2YgdClPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUscyx7ZW51bWVyYWJsZTohMSx2YWx1ZTpvKHMpfSk7cmV0dXJuIG59fXN0YXRpYyBnZXQgaXNEZWJ1Z0VuYWJsZWQoKXt2YXIgZSx0O2lmKHR5cGVvZigoZT1nbG9iYWxUaGlzLnByb2Nlc3MpPT1udWxsP3ZvaWQgMDplLmVudikhPSJvYmplY3QiKXJldHVybiBIdDtjb25zdHtlbnY6bn09KHQ9Z2xvYmFsVGhpcy5wcm9jZXNzKSE9bnVsbD90OntlbnY6e319O3JldHVybiBuLkRFQlVHPT09ImVtaXR0ZXJ5Inx8bi5ERUJVRz09PSIqInx8SHR9c3RhdGljIHNldCBpc0RlYnVnRW5hYmxlZChlKXtIdD1lfWNvbnN0cnVjdG9yKGU9e30pe3ZhciB0O3RlLnNldCh0aGlzLG5ldyBTZXQpLGhlLnNldCh0aGlzLG5ldyBNYXApLFouc2V0KHRoaXMsbmV3IE1hcCksWi5nZXQodGhpcykuc2V0KHR0LG5ldyBTZXQpLHRoaXMuZGVidWc9KHQ9ZS5kZWJ1ZykhPW51bGw/dDp7fSx0aGlzLmRlYnVnLmVuYWJsZWQ9PT12b2lkIDAmJih0aGlzLmRlYnVnLmVuYWJsZWQ9ITEpLHRoaXMuZGVidWcubG9nZ2VyfHwodGhpcy5kZWJ1Zy5sb2dnZXI9KG4saSxvLHMpPT57dHJ5e3M9SlNPTi5zdHJpbmdpZnkocyl9Y2F0Y2h7cz1gT2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBrZXlzIGZhaWxlZCB0byBzdHJpbmdpZnk6ICR7T2JqZWN0LmtleXMocykuam9pbigiLCIpfWB9KHR5cGVvZiBvPT0ic3ltYm9sInx8dHlwZW9mIG89PSJudW1iZXIiKSYmKG89by50b1N0cmluZygpKTtjb25zdCBhPW5ldyBEYXRlLHU9YCR7YS5nZXRIb3VycygpfToke2EuZ2V0TWludXRlcygpfToke2EuZ2V0U2Vjb25kcygpfS4ke2EuZ2V0TWlsbGlzZWNvbmRzKCl9YDtjb25zb2xlLmxvZyhgWyR7dX1dW2VtaXR0ZXJ5OiR7bn1dWyR7aX1dIEV2ZW50IE5hbWU6ICR7b30KCWRhdGE6ICR7c31gKX0pfWxvZ0lmRGVidWdFbmFibGVkKGUsdCxuKXsoUmUuaXNEZWJ1Z0VuYWJsZWR8fHRoaXMuZGVidWcuZW5hYmxlZCkmJnRoaXMuZGVidWcubG9nZ2VyKGUsdGhpcy5kZWJ1Zy5uYW1lLHQsbil9b24oZSx0KXtvdCh0KSxlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IG4gb2YgZSl7QWUobik7bGV0IGk9SWUodGhpcyxuKTtpfHwoaT1uZXcgU2V0LGhlLmdldCh0aGlzKS5zZXQobixpKSksaS5hZGQodCksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlIixuLHZvaWQgMCksU2Uobil8fHN0KHRoaXMscnQse2V2ZW50TmFtZTpuLGxpc3RlbmVyOnR9KX1yZXR1cm4gdGhpcy5vZmYuYmluZCh0aGlzLGUsdCl9b2ZmKGUsdCl7b3QodCksZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCBuIG9mIGUpe0FlKG4pO2NvbnN0IGk9SWUodGhpcyxuKTtpJiYoaS5kZWxldGUodCksaS5zaXplPT09MCYmaGUuZ2V0KHRoaXMpLmRlbGV0ZShuKSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmUiLG4sdm9pZCAwKSxTZShuKXx8c3QodGhpcyxudCx7ZXZlbnROYW1lOm4sbGlzdGVuZXI6dH0pfX1vbmNlKGUpe2xldCB0O2NvbnN0IG49bmV3IFByb21pc2UoaT0+e3Q9dGhpcy5vbihlLG89Pnt0KCksaShvKX0pfSk7cmV0dXJuIG4ub2ZmPXQsbn1ldmVudHMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpQWUodCk7cmV0dXJuIFFyKHRoaXMsZSl9YXN5bmMgZW1pdChlLHQpe3ZhciBuO2lmKEFlKGUpLFNlKGUpJiYhaXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiYGV2ZW50TmFtZWAgY2Fubm90IGJlIG1ldGEgZXZlbnQgYGxpc3RlbmVyQWRkZWRgIG9yIGBsaXN0ZW5lclJlbW92ZWRgIik7dGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiZW1pdCIsZSx0KSwkaSh0aGlzLGUsdCk7Y29uc3QgaT0obj1JZSh0aGlzLGUpKSE9bnVsbD9uOm5ldyBTZXQsbz10ZS5nZXQodGhpcykscz1bLi4uaV0sYT1TZShlKT9bXTpbLi4ub107YXdhaXQgWHIsYXdhaXQgUHJvbWlzZS5hbGwoWy4uLnMubWFwKGFzeW5jIHU9PntpZihpLmhhcyh1KSlyZXR1cm4gdSh0KX0pLC4uLmEubWFwKGFzeW5jIHU9PntpZihvLmhhcyh1KSlyZXR1cm4gdShlLHQpfSldKX1hc3luYyBlbWl0U2VyaWFsKGUsdCl7dmFyIG47aWYoQWUoZSksU2UoZSkmJiFpdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJgZXZlbnROYW1lYCBjYW5ub3QgYmUgbWV0YSBldmVudCBgbGlzdGVuZXJBZGRlZGAgb3IgYGxpc3RlbmVyUmVtb3ZlZGAiKTt0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJlbWl0U2VyaWFsIixlLHQpO2NvbnN0IGk9KG49SWUodGhpcyxlKSkhPW51bGw/bjpuZXcgU2V0LG89dGUuZ2V0KHRoaXMpLHM9Wy4uLmldLGE9Wy4uLm9dO2F3YWl0IFhyO2Zvcihjb25zdCB1IG9mIHMpaS5oYXModSkmJmF3YWl0IHUodCk7Zm9yKGNvbnN0IHUgb2YgYSlvLmhhcyh1KSYmYXdhaXQgdShlLHQpfW9uQW55KGUpe3JldHVybiBvdChlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJzdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLHRlLmdldCh0aGlzKS5hZGQoZSksc3QodGhpcyxydCx7bGlzdGVuZXI6ZX0pLHRoaXMub2ZmQW55LmJpbmQodGhpcyxlKX1hbnlFdmVudCgpe3JldHVybiBRcih0aGlzKX1vZmZBbnkoZSl7b3QoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLHN0KHRoaXMsbnQse2xpc3RlbmVyOmV9KSx0ZS5nZXQodGhpcykuZGVsZXRlKGUpfWNsZWFyTGlzdGVuZXJzKGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgdCBvZiBlKWlmKHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoImNsZWFyIix0LHZvaWQgMCksdHlwZW9mIHQ9PSJzdHJpbmcifHx0eXBlb2YgdD09InN5bWJvbCJ8fHR5cGVvZiB0PT0ibnVtYmVyIil7Y29uc3Qgbj1JZSh0aGlzLHQpO24mJm4uY2xlYXIoKTtjb25zdCBpPU5lKHRoaXMsdCk7aWYoaSl7Zm9yKGNvbnN0IG8gb2YgaSlvLmZpbmlzaCgpO2kuY2xlYXIoKX19ZWxzZXt0ZS5nZXQodGhpcykuY2xlYXIoKTtmb3IoY29uc3RbbixpXW9mIGhlLmdldCh0aGlzKS5lbnRyaWVzKCkpaS5jbGVhcigpLGhlLmdldCh0aGlzKS5kZWxldGUobik7Zm9yKGNvbnN0W24saV1vZiBaLmdldCh0aGlzKS5lbnRyaWVzKCkpe2Zvcihjb25zdCBvIG9mIGkpby5maW5pc2goKTtpLmNsZWFyKCksWi5nZXQodGhpcykuZGVsZXRlKG4pfX19bGlzdGVuZXJDb3VudChlKXt2YXIgdCxuLGksbyxzLGE7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2xldCB1PTA7Zm9yKGNvbnN0IGYgb2YgZSl7aWYodHlwZW9mIGY9PSJzdHJpbmciKXt1Kz10ZS5nZXQodGhpcykuc2l6ZSsoKG49KHQ9SWUodGhpcyxmKSk9PW51bGw/dm9pZCAwOnQuc2l6ZSkhPW51bGw/bjowKSsoKG89KGk9TmUodGhpcyxmKSk9PW51bGw/dm9pZCAwOmkuc2l6ZSkhPW51bGw/bzowKSsoKGE9KHM9TmUodGhpcykpPT1udWxsP3ZvaWQgMDpzLnNpemUpIT1udWxsP2E6MCk7Y29udGludWV9dHlwZW9mIGY8InUiJiZBZShmKSx1Kz10ZS5nZXQodGhpcykuc2l6ZTtmb3IoY29uc3QgZCBvZiBoZS5nZXQodGhpcykudmFsdWVzKCkpdSs9ZC5zaXplO2Zvcihjb25zdCBkIG9mIFouZ2V0KHRoaXMpLnZhbHVlcygpKXUrPWQuc2l6ZX1yZXR1cm4gdX1iaW5kTWV0aG9kcyhlLHQpe2lmKHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBhbiBvYmplY3QiKTt0PXFyKHQpO2Zvcihjb25zdCBuIG9mIHQpe2lmKGVbbl0hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke259XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITEsdmFsdWU6dGhpc1tuXS5iaW5kKHRoaXMpfSl9fX1jb25zdCBLcj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhSZS5wcm90b3R5cGUpLmZpbHRlcihyPT5yIT09ImNvbnN0cnVjdG9yIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFJlLCJsaXN0ZW5lckFkZGVkIix7dmFsdWU6cnQsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUmUsImxpc3RlbmVyUmVtb3ZlZCIse3ZhbHVlOm50LHdyaXRhYmxlOiExLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExfSk7ZnVuY3Rpb24gV2kocil7cmV0dXJuIHIub25BbnkmJnIuZW1pdH1hc3luYyBmdW5jdGlvbiBWaShyLGUpe2NvbnN0e2Z1bmN0aW9uTmFtZTp0LGFyZ3M6bn09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2lmKCF0KXRocm93Im1pc3NpbmcgZnVuY3Rpb24gbmFtZSB0byBjYWxsIjtpZighZS5pbnN0YW5jZVt0XSl0aHJvd2B1bmRlZmluZWQgZnVuY3Rpb24gWyR7dH1dIGluIGNsYXNzICR7ZS5pbnN0YW5jZS5jb25zdHJ1Y3Rvci53b3JrZXJJZH1gO1VlKHIsYXdhaXQgZS5pbnN0YW5jZVt0XSguLi5uIT1udWxsP246W10pKX1jb25zdCBKcj1KKCJyZWdpc3RlcmVkV29ya2VycyIse30pO2Z1bmN0aW9uIEhpKHIsZSl7ZS53b3JrZXJJZD1yLFlyKCkmJihKcltlLndvcmtlcklkXT1lKX1mdW5jdGlvbiBqaShyLGUpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBjbGFzc05hbWUgd2hpbGUgaW5pdGlhbGl6aW5nIHdvcmtlciI7Y29uc3RbdCxuXT1yLmFyZ3MsaT1Kclt0XTtpZihpKWUuaW5zdGFuY2U9bmV3IGkoci5hcmdzLnNsaWNlKDEpKTtlbHNlIHRocm93YHVua25vd24gd29ya2VyIGNsYXNzICR7dH1gO2V0KG4sUSksV2koZS5pbnN0YW5jZSkmJmUuaW5zdGFuY2Uub25BbnkoKG8scyk9PntVZSh7dHlwZTpWLkVWRU5UfSx7bmFtZTpvLGRhdGE6c30pfSksVWUocix0eXBlb2YgZS5pbnN0YW5jZSE9PXZvaWQgMCl9YXN5bmMgZnVuY3Rpb24gWWkocixlKXtjb25zdHthcmdzOnR9PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtsZXQgbjtlLmluc3RhbmNlLnRlcm1pbmF0ZSYmKG49YXdhaXQgZS5pbnN0YW5jZS50ZXJtaW5hdGUoLi4udCE9bnVsbD90OltdKSksVWUocixuKX1mdW5jdGlvbiBYaShyKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgZ2xvYmFscyB3aGlsZSBzeW5jaW5nIjtldChyLmFyZ3NbMF0sUSksVWUocix7fSl9ZnVuY3Rpb24gUWkoKXtjb25zdCByPXt9O29ubWVzc2FnZT1hc3luYyBlPT57Y29uc3QgdD1lLmRhdGE7c3dpdGNoKHQudHlwZSl7Y2FzZSBWLklOSVQ6amkodCxyKTticmVhaztjYXNlIFYuRk9SV0FSRDpWaSh0LHIpO2JyZWFrO2Nhc2UgVi5URVJNSU5BVEU6WWkodCxyKTticmVhaztjYXNlIFYuR0xPQkFMU19TWU5DOlhpKHQpO2JyZWFrfX19WXIoKSYmUWkoKTt2YXIgcWk9T2JqZWN0LmRlZmluZVByb3BlcnR5LEtpPShyLGUsdCk9PmUgaW4gcj9xaShyLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnR9KTpyW2VdPXQsdz0ocixlLHQpPT4oS2kocix0eXBlb2YgZSE9InN5bWJvbCI/ZSsiIjplLHQpLHQpO2NsYXNzIGVle313KGVlLCJ1cGRhdGVzIix7dHJhbnNmb3JtZXJfbmV3OiJOZXcgdHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyX251bGw6Ik51bGwgdHJhbnNmb3JtZXIifSksdyhlZSwiZXJyb3JzIix7dHJhbnNmb3JtZXJfbm9uZToiTm8gdHJhbnNmb3JtZXJzIHByb3ZpZGVkIix0cmFuc2Zvcm1lcl9zdGFydDoiQ2Fubm90IHN0YXJ0IHRyYW5zZm9ybWVyIix0cmFuc2Zvcm1lcl90cmFuc2Zvcm06IkNhbm5vdCB0cmFuc2Zvcm0gZnJhbWUiLHRyYW5zZm9ybWVyX2ZsdXNoOiJDYW5ub3QgZmx1c2ggdHJhbnNmb3JtZXIiLHJlYWRhYmxlX251bGw6IlJlYWRhYmxlIGlzIG51bGwiLHdyaXRhYmxlX251bGw6IldyaXRhYmxlIGlzIG51bGwifSk7Y29uc3QgcmU9bmV3IFdlYWtNYXAsYXQ9bmV3IFdlYWtNYXAsTGU9bmV3IFdlYWtNYXAsanQ9U3ltYm9sKCJhbnlQcm9kdWNlciIpLFpyPVByb21pc2UucmVzb2x2ZSgpLHV0PVN5bWJvbCgibGlzdGVuZXJBZGRlZCIpLGN0PVN5bWJvbCgibGlzdGVuZXJSZW1vdmVkIik7bGV0IFl0PSExO2Z1bmN0aW9uIEZlKHIpe2lmKHR5cGVvZiByIT0ic3RyaW5nIiYmdHlwZW9mIHIhPSJzeW1ib2wiKXRocm93IG5ldyBUeXBlRXJyb3IoImV2ZW50TmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgc3ltYm9sIil9ZnVuY3Rpb24gZnQocil7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gUGUocixlKXtjb25zdCB0PWF0LmdldChyKTtyZXR1cm4gdC5oYXMoZSl8fHQuc2V0KGUsbmV3IFNldCksdC5nZXQoZSl9ZnVuY3Rpb24gemUocixlKXtjb25zdCB0PXR5cGVvZiBlPT0ic3RyaW5nInx8dHlwZW9mIGU9PSJzeW1ib2wiP2U6anQsbj1MZS5nZXQocik7cmV0dXJuIG4uaGFzKHQpfHxuLnNldCh0LG5ldyBTZXQpLG4uZ2V0KHQpfWZ1bmN0aW9uIEppKHIsZSx0KXtjb25zdCBuPUxlLmdldChyKTtpZihuLmhhcyhlKSlmb3IoY29uc3QgaSBvZiBuLmdldChlKSlpLmVucXVldWUodCk7aWYobi5oYXMoanQpKXtjb25zdCBpPVByb21pc2UuYWxsKFtlLHRdKTtmb3IoY29uc3QgbyBvZiBuLmdldChqdCkpby5lbnF1ZXVlKGkpfX1mdW5jdGlvbiBlbihyLGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtsZXQgdD0hMSxuPSgpPT57fSxpPVtdO2NvbnN0IG89e2VucXVldWUocyl7aS5wdXNoKHMpLG4oKX0sZmluaXNoKCl7dD0hMCxuKCl9fTtmb3IoY29uc3QgcyBvZiBlKXplKHIscykuYWRkKG8pO3JldHVybnthc3luYyBuZXh0KCl7cmV0dXJuIGk/aS5sZW5ndGg9PT0wP3Q/KGk9dm9pZCAwLHRoaXMubmV4dCgpKTooYXdhaXQgbmV3IFByb21pc2Uocz0+e249c30pLHRoaXMubmV4dCgpKTp7ZG9uZTohMSx2YWx1ZTphd2FpdCBpLnNoaWZ0KCl9Ontkb25lOiEwfX0sYXN5bmMgcmV0dXJuKHMpe2k9dm9pZCAwO2Zvcihjb25zdCBhIG9mIGUpemUocixhKS5kZWxldGUobyk7cmV0dXJuIG4oKSxhcmd1bWVudHMubGVuZ3RoPjA/e2RvbmU6ITAsdmFsdWU6YXdhaXQgc306e2RvbmU6ITB9fSxbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9fX1mdW5jdGlvbiB0bihyKXtpZihyPT09dm9pZCAwKXJldHVybiBybjtpZighQXJyYXkuaXNBcnJheShyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyIpO2Zvcihjb25zdCBlIG9mIHIpaWYoIXJuLmluY2x1ZGVzKGUpKXRocm93IHR5cGVvZiBlIT0ic3RyaW5nIj9uZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIGVsZW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpOm5ldyBFcnJvcihgJHtlfSBpcyBub3QgRW1pdHRlcnkgbWV0aG9kYCk7cmV0dXJuIHJ9Y29uc3QgWHQ9cj0+cj09PXV0fHxyPT09Y3Q7Y2xhc3MgbWV7c3RhdGljIG1peGluKGUsdCl7cmV0dXJuIHQ9dG4odCksbj0+e2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImB0YXJnZXRgIG11c3QgYmUgZnVuY3Rpb24iKTtmb3IoY29uc3QgcyBvZiB0KWlmKG4ucHJvdG90eXBlW3NdIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgVGhlIHByb3BlcnR5IFxgJHtzfVxgIGFscmVhZHkgZXhpc3RzIG9uIFxgdGFyZ2V0XGBgKTtmdW5jdGlvbiBpKCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGUse2VudW1lcmFibGU6ITEsdmFsdWU6bmV3IG1lfSksdGhpc1tlXX1PYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsZSx7ZW51bWVyYWJsZTohMSxnZXQ6aX0pO2NvbnN0IG89cz0+ZnVuY3Rpb24oLi4uYSl7cmV0dXJuIHRoaXNbZV1bc10oLi4uYSl9O2Zvcihjb25zdCBzIG9mIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLHMse2VudW1lcmFibGU6ITEsdmFsdWU6byhzKX0pO3JldHVybiBufX1zdGF0aWMgZ2V0IGlzRGVidWdFbmFibGVkKCl7aWYodHlwZW9mIHByb2Nlc3MhPSJvYmplY3QiKXJldHVybiBZdDtjb25zdHtlbnY6ZX09cHJvY2Vzc3x8e2Vudjp7fX07cmV0dXJuIGUuREVCVUc9PT0iZW1pdHRlcnkifHxlLkRFQlVHPT09IioifHxZdH1zdGF0aWMgc2V0IGlzRGVidWdFbmFibGVkKGUpe1l0PWV9Y29uc3RydWN0b3IoZT17fSl7cmUuc2V0KHRoaXMsbmV3IFNldCksYXQuc2V0KHRoaXMsbmV3IE1hcCksTGUuc2V0KHRoaXMsbmV3IE1hcCksdGhpcy5kZWJ1Zz1lLmRlYnVnfHx7fSx0aGlzLmRlYnVnLmVuYWJsZWQ9PT12b2lkIDAmJih0aGlzLmRlYnVnLmVuYWJsZWQ9ITEpLHRoaXMuZGVidWcubG9nZ2VyfHwodGhpcy5kZWJ1Zy5sb2dnZXI9KHQsbixpLG8pPT57dHJ5e289SlNPTi5zdHJpbmdpZnkobyl9Y2F0Y2h7bz1gT2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBrZXlzIGZhaWxlZCB0byBzdHJpbmdpZnk6ICR7T2JqZWN0LmtleXMobykuam9pbigiLCIpfWB9dHlwZW9mIGk9PSJzeW1ib2wiJiYoaT1pLnRvU3RyaW5nKCkpO2NvbnN0IHM9bmV3IERhdGUsYT1gJHtzLmdldEhvdXJzKCl9OiR7cy5nZXRNaW51dGVzKCl9OiR7cy5nZXRTZWNvbmRzKCl9LiR7cy5nZXRNaWxsaXNlY29uZHMoKX1gO2NvbnNvbGUubG9nKGBbJHthfV1bZW1pdHRlcnk6JHt0fV1bJHtufV0gRXZlbnQgTmFtZTogJHtpfQoJZGF0YTogJHtvfWApfSl9bG9nSWZEZWJ1Z0VuYWJsZWQoZSx0LG4peyhtZS5pc0RlYnVnRW5hYmxlZHx8dGhpcy5kZWJ1Zy5lbmFibGVkKSYmdGhpcy5kZWJ1Zy5sb2dnZXIoZSx0aGlzLmRlYnVnLm5hbWUsdCxuKX1vbihlLHQpe2Z0KHQpLGU9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgbiBvZiBlKUZlKG4pLFBlKHRoaXMsbikuYWRkKHQpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoInN1YnNjcmliZSIsbix2b2lkIDApLFh0KG4pfHx0aGlzLmVtaXQodXQse2V2ZW50TmFtZTpuLGxpc3RlbmVyOnR9KTtyZXR1cm4gdGhpcy5vZmYuYmluZCh0aGlzLGUsdCl9b2ZmKGUsdCl7ZnQodCksZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCBuIG9mIGUpRmUobiksUGUodGhpcyxuKS5kZWxldGUodCksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmUiLG4sdm9pZCAwKSxYdChuKXx8dGhpcy5lbWl0KGN0LHtldmVudE5hbWU6bixsaXN0ZW5lcjp0fSl9b25jZShlKXtyZXR1cm4gbmV3IFByb21pc2UodD0+e2NvbnN0IG49dGhpcy5vbihlLGk9PntuKCksdChpKX0pfSl9ZXZlbnRzKGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgdCBvZiBlKUZlKHQpO3JldHVybiBlbih0aGlzLGUpfWFzeW5jIGVtaXQoZSx0KXtGZShlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJlbWl0IixlLHQpLEppKHRoaXMsZSx0KTtjb25zdCBuPVBlKHRoaXMsZSksaT1yZS5nZXQodGhpcyksbz1bLi4ubl0scz1YdChlKT9bXTpbLi4uaV07YXdhaXQgWnIsYXdhaXQgUHJvbWlzZS5hbGwoWy4uLm8ubWFwKGFzeW5jIGE9PntpZihuLmhhcyhhKSlyZXR1cm4gYSh0KX0pLC4uLnMubWFwKGFzeW5jIGE9PntpZihpLmhhcyhhKSlyZXR1cm4gYShlLHQpfSldKX1hc3luYyBlbWl0U2VyaWFsKGUsdCl7RmUoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiZW1pdFNlcmlhbCIsZSx0KTtjb25zdCBuPVBlKHRoaXMsZSksaT1yZS5nZXQodGhpcyksbz1bLi4ubl0scz1bLi4uaV07YXdhaXQgWnI7Zm9yKGNvbnN0IGEgb2YgbyluLmhhcyhhKSYmYXdhaXQgYSh0KTtmb3IoY29uc3QgYSBvZiBzKWkuaGFzKGEpJiZhd2FpdCBhKGUsdCl9b25BbnkoZSl7cmV0dXJuIGZ0KGUpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoInN1YnNjcmliZUFueSIsdm9pZCAwLHZvaWQgMCkscmUuZ2V0KHRoaXMpLmFkZChlKSx0aGlzLmVtaXQodXQse2xpc3RlbmVyOmV9KSx0aGlzLm9mZkFueS5iaW5kKHRoaXMsZSl9YW55RXZlbnQoKXtyZXR1cm4gZW4odGhpcyl9b2ZmQW55KGUpe2Z0KGUpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoInVuc3Vic2NyaWJlQW55Iix2b2lkIDAsdm9pZCAwKSx0aGlzLmVtaXQoY3Qse2xpc3RlbmVyOmV9KSxyZS5nZXQodGhpcykuZGVsZXRlKGUpfWNsZWFyTGlzdGVuZXJzKGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgdCBvZiBlKWlmKHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoImNsZWFyIix0LHZvaWQgMCksdHlwZW9mIHQ9PSJzdHJpbmcifHx0eXBlb2YgdD09InN5bWJvbCIpe1BlKHRoaXMsdCkuY2xlYXIoKTtjb25zdCBuPXplKHRoaXMsdCk7Zm9yKGNvbnN0IGkgb2YgbilpLmZpbmlzaCgpO24uY2xlYXIoKX1lbHNle3JlLmdldCh0aGlzKS5jbGVhcigpO2Zvcihjb25zdCBuIG9mIGF0LmdldCh0aGlzKS52YWx1ZXMoKSluLmNsZWFyKCk7Zm9yKGNvbnN0IG4gb2YgTGUuZ2V0KHRoaXMpLnZhbHVlcygpKXtmb3IoY29uc3QgaSBvZiBuKWkuZmluaXNoKCk7bi5jbGVhcigpfX19bGlzdGVuZXJDb3VudChlKXtlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07bGV0IHQ9MDtmb3IoY29uc3QgbiBvZiBlKXtpZih0eXBlb2Ygbj09InN0cmluZyIpe3QrPXJlLmdldCh0aGlzKS5zaXplK1BlKHRoaXMsbikuc2l6ZSt6ZSh0aGlzLG4pLnNpemUremUodGhpcykuc2l6ZTtjb250aW51ZX10eXBlb2YgbjwidSImJkZlKG4pLHQrPXJlLmdldCh0aGlzKS5zaXplO2Zvcihjb25zdCBpIG9mIGF0LmdldCh0aGlzKS52YWx1ZXMoKSl0Kz1pLnNpemU7Zm9yKGNvbnN0IGkgb2YgTGUuZ2V0KHRoaXMpLnZhbHVlcygpKXQrPWkuc2l6ZX1yZXR1cm4gdH1iaW5kTWV0aG9kcyhlLHQpe2lmKHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBhbiBvYmplY3QiKTt0PXRuKHQpO2Zvcihjb25zdCBuIG9mIHQpe2lmKGVbbl0hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke259XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITEsdmFsdWU6dGhpc1tuXS5iaW5kKHRoaXMpfSl9fX1jb25zdCBybj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhtZS5wcm90b3R5cGUpLmZpbHRlcihyPT5yIT09ImNvbnN0cnVjdG9yIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KG1lLCJsaXN0ZW5lckFkZGVkIix7dmFsdWU6dXQsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobWUsImxpc3RlbmVyUmVtb3ZlZCIse3ZhbHVlOmN0LHdyaXRhYmxlOiExLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExfSk7dmFyIFF0PW1lO2Z1bmN0aW9uIFppKHIpe3JldHVybiB0eXBlb2Ygcj09Im9iamVjdCImJnIhPT1udWxsJiYibWVzc2FnZSJpbiByJiZ0eXBlb2Ygci5tZXNzYWdlPT0ic3RyaW5nIn1mdW5jdGlvbiBlbyhyKXtpZihaaShyKSlyZXR1cm4gcjt0cnl7cmV0dXJuIG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeShyKSl9Y2F0Y2h7cmV0dXJuIG5ldyBFcnJvcihTdHJpbmcocikpfX1mdW5jdGlvbiBxdChyKXtyZXR1cm4gZW8ocikubWVzc2FnZX12YXIgdG89T2JqZWN0LmRlZmluZVByb3BlcnR5LHJvPShyLGUsdCk9PmUgaW4gcj90byhyLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnR9KTpyW2VdPXQsbm89KHIsZSx0KT0+KHJvKHIsdHlwZW9mIGUhPSJzeW1ib2wiP2UrIiI6ZSx0KSx0KTtjb25zdCBpbz0iaGxnLnRva2JveC5jb20vcHJvZC9sb2dnaW5nL3ZjcF93ZWJydGMiLG9vPSJodHRwczovLyIsc289MWU0O2xldCBsdDtjb25zdCBhbz1uZXcgVWludDhBcnJheSgxNik7ZnVuY3Rpb24gdW8oKXtpZighbHQmJihsdD10eXBlb2YgY3J5cHRvPCJ1IiYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byksIWx0KSl0aHJvdyBuZXcgRXJyb3IoImNyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkIik7cmV0dXJuIGx0KGFvKX1jb25zdCBDPVtdO2ZvcihsZXQgcj0wO3I8MjU2OysrcilDLnB1c2goKHIrMjU2KS50b1N0cmluZygxNikuc2xpY2UoMSkpO2Z1bmN0aW9uIGNvKHIsZT0wKXtyZXR1cm4oQ1tyW2UrMF1dK0NbcltlKzFdXStDW3JbZSsyXV0rQ1tyW2UrM11dKyItIitDW3JbZSs0XV0rQ1tyW2UrNV1dKyItIitDW3JbZSs2XV0rQ1tyW2UrN11dKyItIitDW3JbZSs4XV0rQ1tyW2UrOV1dKyItIitDW3JbZSsxMF1dK0NbcltlKzExXV0rQ1tyW2UrMTJdXStDW3JbZSsxM11dK0NbcltlKzE0XV0rQ1tyW2UrMTVdXSkudG9Mb3dlckNhc2UoKX1jb25zdCBmbz10eXBlb2YgY3J5cHRvPCJ1IiYmY3J5cHRvLnJhbmRvbVVVSUQmJmNyeXB0by5yYW5kb21VVUlELmJpbmQoY3J5cHRvKSxubj17cmFuZG9tVVVJRDpmb307ZnVuY3Rpb24gbG8ocixlLHQpe2lmKG5uLnJhbmRvbVVVSUQmJiFlJiYhcilyZXR1cm4gbm4ucmFuZG9tVVVJRCgpO3I9cnx8e307Y29uc3Qgbj1yLnJhbmRvbXx8KHIucm5nfHx1bykoKTtpZihuWzZdPW5bNl0mMTV8NjQsbls4XT1uWzhdJjYzfDEyOCxlKXt0PXR8fDA7Zm9yKGxldCBpPTA7aTwxNjsrK2kpZVt0K2ldPW5baV07cmV0dXJuIGV9cmV0dXJuIGNvKG4pfWZ1bmN0aW9uIEt0KHIsZSl7Z2xvYmFsVGhpcy52b25hZ2V8fChnbG9iYWxUaGlzLnZvbmFnZT17fSksZ2xvYmFsVGhpcy52b25hZ2Uud29ya2VyaXplcnx8KGdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI9e30pO2xldCB0PWdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI7cmV0dXJuIHRbcl18fCh0W3JdPWUpLHRbcl19Y29uc3QgbmU9S3QoImdsb2JhbHMiLHt9KTt2YXIgcGU9KHI9PihyLklOSVQ9IklOSVQiLHIuRk9SV0FSRD0iRk9SV0FSRCIsci5URVJNSU5BVEU9IlRFUk1JTkFURSIsci5HTE9CQUxTX1NZTkM9IkdMT0JBTFNfU1lOQyIscikpKHBlfHx7fSk7ZnVuY3Rpb24gb24ocil7cmV0dXJuW0ltYWdlQml0bWFwLFJlYWRhYmxlU3RyZWFtLFdyaXRhYmxlU3RyZWFtXS5zb21lKGU9PnIgaW5zdGFuY2VvZiBlKX1sZXQgaG89MDtmdW5jdGlvbiBtbyhyLGUsdCxuLGkpe2NvbnN0IG89aG8rKztyZXR1cm4gci5wb3N0TWVzc2FnZSh7aWQ6byx0eXBlOmUsZnVuY3Rpb25OYW1lOnQsYXJnczpufSxuLmZpbHRlcihzPT5vbihzKSkpLG5ldyBQcm9taXNlKHM9PntpPT1udWxsfHxpLnNldChvLHMpfSl9ZnVuY3Rpb24gR2UocixlKXtjb25zdHtpZDp0LHR5cGU6bn09cixpPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07cG9zdE1lc3NhZ2Uoe2lkOnQsdHlwZTpuLHJlc3VsdDplfSxpLmZpbHRlcihvPT5vbihvKSkpfWNvbnN0IHNuPUt0KCJ3b3JrZXJpemVkIix7fSk7ZnVuY3Rpb24gYW4oKXtyZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlfWFzeW5jIGZ1bmN0aW9uIHBvKCl7aWYoYW4oKSlHZSh7dHlwZTpwZS5HTE9CQUxTX1NZTkN9LG5lKTtlbHNle2NvbnN0IHI9W107Zm9yKGNvbnN0IGUgaW4gc24pe2NvbnN0e3dvcmtlcjp0LHJlc29sdmVyczpufT1zbltlXS53b3JrZXJDb250ZXh0O3QmJnIucHVzaChtbyh0LHBlLkdMT0JBTFNfU1lOQywiIixbbmVdLG4pKX1hd2FpdCBQcm9taXNlLmFsbChyKX19ZnVuY3Rpb24gZHQocixlKXtpZihBcnJheS5pc0FycmF5KGUpKWUuc3BsaWNlKDAsZS5sZW5ndGgpO2Vsc2UgaWYodHlwZW9mIGU9PSJvYmplY3QiKWZvcihjb25zdCB0IGluIGUpZGVsZXRlIGVbdF07Zm9yKGNvbnN0IHQgaW4gcilBcnJheS5pc0FycmF5KHJbdF0pPyhlW3RdPVtdLGR0KHJbdF0sZVt0XSkpOnR5cGVvZiByW3RdPT0ib2JqZWN0Ij8oZVt0XT17fSxkdChyW3RdLGVbdF0pKTplW3RdPXJbdF19YXN5bmMgZnVuY3Rpb24gZ28ocixlKXtjb25zdHtmdW5jdGlvbk5hbWU6dCxhcmdzOm59PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtpZighdCl0aHJvdyJtaXNzaW5nIGZ1bmN0aW9uIG5hbWUgdG8gY2FsbCI7aWYoIWUuaW5zdGFuY2VbdF0pdGhyb3dgdW5kZWZpbmVkIGZ1bmN0aW9uIFske3R9XSBpbiBjbGFzcyAke2UuaW5zdGFuY2UuY29uc3RydWN0b3Iud29ya2VySWR9YDtHZShyLGF3YWl0IGUuaW5zdGFuY2VbdF0oLi4ubiE9bnVsbD9uOltdKSl9Y29uc3QgeW89S3QoInJlZ2lzdGVyZWRXb3JrZXJzIix7fSk7ZnVuY3Rpb24gYm8ocixlKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgY2xhc3NOYW1lIHdoaWxlIGluaXRpYWxpemluZyB3b3JrZXIiO2NvbnN0W3Qsbl09ci5hcmdzLGk9eW9bdF07aWYoaSllLmluc3RhbmNlPW5ldyBpKHIuYXJncy5zbGljZSgxKSk7ZWxzZSB0aHJvd2B1bmtub3duIHdvcmtlciBjbGFzcyAke3R9YDtkdChuLG5lKSxHZShyLHR5cGVvZiBlLmluc3RhbmNlIT09dm9pZCAwKX1hc3luYyBmdW5jdGlvbiB4byhyLGUpe2NvbnN0e2FyZ3M6dH09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2xldCBuO2UuaW5zdGFuY2UudGVybWluYXRlJiYobj1hd2FpdCBlLmluc3RhbmNlLnRlcm1pbmF0ZSguLi50IT1udWxsP3Q6W10pKSxHZShyLG4pfWZ1bmN0aW9uIF9vKHIpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBnbG9iYWxzIHdoaWxlIHN5bmNpbmciO2R0KHIuYXJnc1swXSxuZSksR2Uocix7fSl9ZnVuY3Rpb24gdm8oKXtjb25zdCByPXt9O29ubWVzc2FnZT1hc3luYyBlPT57Y29uc3QgdD1lLmRhdGE7c3dpdGNoKHQudHlwZSl7Y2FzZSBwZS5JTklUOmJvKHQscik7YnJlYWs7Y2FzZSBwZS5GT1JXQVJEOmdvKHQscik7YnJlYWs7Y2FzZSBwZS5URVJNSU5BVEU6eG8odCxyKTticmVhaztjYXNlIHBlLkdMT0JBTFNfU1lOQzpfbyh0KTticmVha319fWFuKCkmJnZvKCk7ZnVuY3Rpb24gRW8ocixlKXtyZXR1cm4gbmVbcl18fChuZVtyXT1lKSxbKCk9Pm5lW3JdLGFzeW5jIHQ9PntuZVtyXT10LGF3YWl0IHBvKCl9XX1mdW5jdGlvbiBUbyhyLGUpe3JldHVybiBFbyhyLGUpfWNvbnN0W3dvLEFvXT1UbygibWV0YWRhdGEiKTtmdW5jdGlvbiBJbyhyKXtBbyhyKX1mdW5jdGlvbiBKdCgpe3JldHVybiB3bygpfWNsYXNzIFp0e2NvbnN0cnVjdG9yKGUpe25vKHRoaXMsInV1aWQiLGxvKCkpLHRoaXMuY29uZmlnPWV9YXN5bmMgc2VuZChlKXt2YXIgdCxuLGk7Y29uc3R7YXBwSWQ6byxzb3VyY2VUeXBlOnN9PSh0PUp0KCkpIT1udWxsP3Q6e307aWYoIW98fCFzKXJldHVybiJtZXRhZGF0YSBtaXNzaW5nIjtjb25zdCBhPW5ldyBBYm9ydENvbnRyb2xsZXIsdT1zZXRUaW1lb3V0KCgpPT5hLmFib3J0KCksc28pO3JldHVybiBhd2FpdCgoaT0obj10aGlzLmNvbmZpZyk9PW51bGw/dm9pZCAwOm4uZmV0Y2gpIT1udWxsP2k6ZmV0Y2gpKHRoaXMuZ2V0VXJsKCkse21ldGhvZDoiUE9TVCIsaGVhZGVyczp0aGlzLmdldEhlYWRlcnMoKSxib2R5OkpTT04uc3RyaW5naWZ5KHRoaXMuYnVpbGRSZXBvcnQoZSkpLHNpZ25hbDphLnNpZ25hbH0pLGNsZWFyVGltZW91dCh1KSwic3VjY2VzcyJ9Z2V0VXJsKCl7dmFyIGU7bGV0IHQ9KGU9SnQoKS5wcm94eVVybCkhPW51bGw/ZTpvbztyZXR1cm4gdCs9KHQuYXQoLTEpPT09Ii8iPyIiOiIvIikraW8sdH1nZXRIZWFkZXJzKCl7cmV0dXJueyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn19YnVpbGRSZXBvcnQoZSl7Y29uc3QgdD1KdCgpO3JldHVybntndWlkOnRoaXMudXVpZCwuLi5lLGFwcGxpY2F0aW9uSWQ6dC5hcHBJZCx0aW1lc3RhbXA6RGF0ZS5ub3coKSxwcm94eVVybDp0LnByb3h5VXJsLHNvdXJjZTp0LnNvdXJjZVR5cGV9fX1jb25zdCBodD0iMi4wLjMiO2NsYXNzIFNve2NvbnN0cnVjdG9yKGUpe3codGhpcywiZnJhbWVUcmFuc2Zvcm1lZENvdW50IiwwKSx3KHRoaXMsImZyYW1lRnJvbVNvdXJjZUNvdW50IiwwKSx3KHRoaXMsInN0YXJ0QXQiLDApLHcodGhpcywicmVwb3J0ZXIiKSx0aGlzLmNvbmZpZz1lLHRoaXMucmVwb3J0ZXI9bmV3IFp0KGUpfWFzeW5jIG9uRnJhbWVGcm9tU291cmNlKCl7dGhpcy5mcmFtZUZyb21Tb3VyY2VDb3VudCsrfWdldCBmcHMoKXtjb25zdHtzdGFydEF0OmUsZnJhbWVGcm9tU291cmNlQ291bnQ6dH09dGhpcyxuPShEYXRlLm5vdygpLWUpLzFlMztyZXR1cm4gdC9ufWFzeW5jIG9uRnJhbWVUcmFuc2Zvcm1lZChlPXt9LHQ9ITEpe3RoaXMuc3RhcnRBdD09PTAmJih0aGlzLnN0YXJ0QXQ9RGF0ZS5ub3coKSksdGhpcy5mcmFtZVRyYW5zZm9ybWVkQ291bnQrKztjb25zdHtzdGFydEF0Om4sZnJhbWVUcmFuc2Zvcm1lZENvdW50OmksZnJhbWVGcm9tU291cmNlQ291bnQ6b309dGhpcyxzPURhdGUubm93KCksYT0ocy1uKS8xZTMsdT1pL2EsZj1vL2E7cmV0dXJuIHR8fHRoaXMuZnJhbWVUcmFuc2Zvcm1lZENvdW50Pj10aGlzLmNvbmZpZy5sb2dnaW5nSW50ZXJ2YWxGcmFtZUNvdW50Pyh0aGlzLmZyYW1lRnJvbVNvdXJjZUNvdW50PTAsdGhpcy5mcmFtZVRyYW5zZm9ybWVkQ291bnQ9MCx0aGlzLnN0YXJ0QXQ9cyx0aGlzLnJlcG9ydGVyLmNvbmZpZz10aGlzLmNvbmZpZyx0aGlzLnJlcG9ydGVyLnNlbmQoey4uLnRoaXMuY29uZmlnLnJlcG9ydCx2YXJpYXRpb246IlFvUyIsZnBzOmYsdHJhbnNmb3JtZWRGcHM6dSxmcmFtZXNUcmFuc2Zvcm1lZDppLC4uLmV9KSk6InN1Y2Nlc3MifX12YXIgZXI9KHI9PihyLnBpcGVsaW5lX2VuZGVkPSJwaXBlbGluZV9lbmRlZCIsci5waXBlbGluZV9lbmRlZF93aXRoX2Vycm9yPSJwaXBlbGluZV9lbmRlZF93aXRoX2Vycm9yIixyLnBpcGVsaW5lX3N0YXJ0ZWQ9InBpcGVsaW5lX3N0YXJ0ZWQiLHIucGlwZWxpbmVfc3RhcnRlZF93aXRoX2Vycm9yPSJwaXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3IiLHIucGlwZWxpbmVfcmVzdGFydGVkPSJwaXBlbGluZV9yZXN0YXJ0ZWQiLHIucGlwZWxpbmVfcmVzdGFydGVkX3dpdGhfZXJyb3I9InBpcGVsaW5lX3Jlc3RhcnRlZF93aXRoX2Vycm9yIixyKSkoZXJ8fHt9KTtjb25zdCBSbz01MDAsRm89Ljg7Y2xhc3MgUG8gZXh0ZW5kcyBRdHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKCksdyh0aGlzLCJyZXBvcnRlcl8iLG5ldyBadCksdyh0aGlzLCJyZXBvcnRlclFvc18iLG5ldyBTbyh7bG9nZ2luZ0ludGVydmFsRnJhbWVDb3VudDpSbyxyZXBvcnQ6e3ZlcnNpb246aHR9fSkpLHcodGhpcywidHJhbnNmb3JtZXJUeXBlXyIpLHcodGhpcywidHJhbnNmb3JtZXJfIiksdyh0aGlzLCJzaG91bGRTdG9wXyIpLHcodGhpcywiaXNGbGFzaGVkXyIpLHcodGhpcywibWVkaWFUcmFuc2Zvcm1lclFvc1JlcG9ydFN0YXJ0VGltZXN0YW1wXyIpLHcodGhpcywidmlkZW9IZWlnaHRfIiksdyh0aGlzLCJ2aWRlb1dpZHRoXyIpLHcodGhpcywidHJhY2tFeHBlY3RlZFJhdGVfIiksdyh0aGlzLCJpbmRleF8iKSx3KHRoaXMsImNvbnRyb2xsZXJfIiksdGhpcy5pbmRleF89dCx0aGlzLnRyYW5zZm9ybWVyXz1lLHRoaXMuc2hvdWxkU3RvcF89ITEsdGhpcy5pc0ZsYXNoZWRfPSExLHRoaXMubWVkaWFUcmFuc2Zvcm1lclFvc1JlcG9ydFN0YXJ0VGltZXN0YW1wXz0wLHRoaXMudmlkZW9IZWlnaHRfPTAsdGhpcy52aWRlb1dpZHRoXz0wLHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfPS0xLHRoaXMudHJhbnNmb3JtZXJUeXBlXz0iQ3VzdG9tIiwiZ2V0VHJhbnNmb3JtZXJUeXBlImluIGUmJih0aGlzLnRyYW5zZm9ybWVyVHlwZV89ZS5nZXRUcmFuc2Zvcm1lclR5cGUoKSksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiQ3JlYXRlIn0pfXNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMudHJhY2tFeHBlY3RlZFJhdGVfPWV9YXN5bmMgc3RhcnQoZSl7aWYodGhpcy5jb250cm9sbGVyXz1lLHRoaXMudHJhbnNmb3JtZXJfJiZ0eXBlb2YgdGhpcy50cmFuc2Zvcm1lcl8uc3RhcnQ9PSJmdW5jdGlvbiIpdHJ5e2F3YWl0IHRoaXMudHJhbnNmb3JtZXJfLnN0YXJ0KGUpfWNhdGNoKHQpe3RoaXMucmVwb3J0KHttZXNzYWdlOmVlLmVycm9ycy50cmFuc2Zvcm1lcl9zdGFydCx2YXJpYXRpb246IkVycm9yIixlcnJvcjpxdCh0KX0pO2NvbnN0IG49e2V2ZW50TWV0YURhdGE6e3RyYW5zZm9ybWVySW5kZXg6dGhpcy5pbmRleF99LGVycm9yOnQsZnVuY3Rpb246InN0YXJ0In07dGhpcy5lbWl0KCJlcnJvciIsbil9fWFzeW5jIHRyYW5zZm9ybShlLHQpe3ZhciBuLGksbyxzO2lmKHRoaXMubWVkaWFUcmFuc2Zvcm1lclFvc1JlcG9ydFN0YXJ0VGltZXN0YW1wXz09PTAmJih0aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnRTdGFydFRpbWVzdGFtcF89RGF0ZS5ub3coKSksZSBpbnN0YW5jZW9mIFZpZGVvRnJhbWUmJih0aGlzLnZpZGVvSGVpZ2h0Xz0obj1lPT1udWxsP3ZvaWQgMDplLmRpc3BsYXlIZWlnaHQpIT1udWxsP246MCx0aGlzLnZpZGVvV2lkdGhfPShpPWU9PW51bGw/dm9pZCAwOmUuZGlzcGxheVdpZHRoKSE9bnVsbD9pOjApLHRoaXMucmVwb3J0ZXJRb3NfLm9uRnJhbWVGcm9tU291cmNlKCksdGhpcy50cmFuc2Zvcm1lcl8paWYodGhpcy5zaG91bGRTdG9wXyljb25zb2xlLndhcm4oIltQaXBlbGluZV0gZmx1c2ggZnJvbSB0cmFuc2Zvcm0iKSxlLmNsb3NlKCksdGhpcy5mbHVzaCh0KSx0LnRlcm1pbmF0ZSgpO2Vsc2V7dHJ5e2F3YWl0KChzPShvPXRoaXMudHJhbnNmb3JtZXJfKS50cmFuc2Zvcm0pPT1udWxsP3ZvaWQgMDpzLmNhbGwobyxlLHQpKSx0aGlzLnJlcG9ydFFvcygpfWNhdGNoKGEpe3RoaXMucmVwb3J0KHttZXNzYWdlOmVlLmVycm9ycy50cmFuc2Zvcm1lcl90cmFuc2Zvcm0sdmFyaWF0aW9uOiJFcnJvciIsZXJyb3I6cXQoYSl9KTtjb25zdCB1PXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjphLGZ1bmN0aW9uOiJ0cmFuc2Zvcm0ifTt0aGlzLmVtaXQoImVycm9yIix1KX1pZih0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyE9LTEmJnRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKkZvPnRoaXMucmVwb3J0ZXJRb3NfLmZwcyl7Y29uc3QgYT17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sd2FybmluZ1R5cGU6ImZwc19kcm9wIixkcm9wSW5mbzp7cmVxdWVzdGVkOnRoaXMudHJhY2tFeHBlY3RlZFJhdGVfLGN1cnJlbnQ6dGhpcy5yZXBvcnRlclFvc18uZnBzfX07dGhpcy5lbWl0KCJ3YXJuIixhKX19fWFzeW5jIGZsdXNoKGUpe2lmKHRoaXMudHJhbnNmb3JtZXJfJiZ0eXBlb2YgdGhpcy50cmFuc2Zvcm1lcl8uZmx1c2g9PSJmdW5jdGlvbiImJiF0aGlzLmlzRmxhc2hlZF8pe3RoaXMuaXNGbGFzaGVkXz0hMDt0cnl7YXdhaXQgdGhpcy50cmFuc2Zvcm1lcl8uZmx1c2goZSl9Y2F0Y2godCl7dGhpcy5yZXBvcnQoe21lc3NhZ2U6ZWUuZXJyb3JzLnRyYW5zZm9ybWVyX2ZsdXNoLHZhcmlhdGlvbjoiRXJyb3IiLGVycm9yOnF0KHQpfSk7Y29uc3Qgbj17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sZXJyb3I6dCxmdW5jdGlvbjoiZmx1c2gifTt0aGlzLmVtaXQoImVycm9yIixuKX19dGhpcy5yZXBvcnRRb3MoITApLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IkRlbGV0ZSJ9KX1zdG9wKCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gU3RvcCBzdHJlYW0uIiksdGhpcy5jb250cm9sbGVyXyYmKHRoaXMuZmx1c2godGhpcy5jb250cm9sbGVyXyksdGhpcy5jb250cm9sbGVyXy50ZXJtaW5hdGUoKSksdGhpcy5zaG91bGRTdG9wXz0hMH1yZXBvcnQoZSl7dGhpcy5yZXBvcnRlcl8uc2VuZCh7dmVyc2lvbjpodCxhY3Rpb246Ik1lZGlhVHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyVHlwZTp0aGlzLnRyYW5zZm9ybWVyVHlwZV8sLi4uZX0pfXJlcG9ydFFvcyhlPSExKXt0aGlzLnJlcG9ydGVyUW9zXy5jb25maWc9ey4uLnRoaXMucmVwb3J0ZXJRb3NfLmNvbmZpZ30sdGhpcy5yZXBvcnRlclFvc18ub25GcmFtZVRyYW5zZm9ybWVkKHt2ZXJzaW9uOmh0LGFjdGlvbjoiTWVkaWFUcmFuc2Zvcm1lciIsdHJhbnNmb3JtZXJUeXBlOnRoaXMudHJhbnNmb3JtZXJUeXBlXyx2aWRlb1dpZHRoOnRoaXMudmlkZW9XaWR0aF8sdmlkZW9IZWlnaHQ6dGhpcy52aWRlb0hlaWdodF99LGUpfX1jbGFzcyBrbyBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdyh0aGlzLCJ0cmFuc2Zvcm1lcnNfIiksdyh0aGlzLCJ0cmFja0V4cGVjdGVkUmF0ZV8iKSx0aGlzLnRyYW5zZm9ybWVyc189W10sdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTE7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCBuPW5ldyBQbyhlW3RdLHQpO24ub24oImVycm9yIixpPT57dGhpcy5lbWl0KCJlcnJvciIsaSl9KSxuLm9uKCJ3YXJuIixpPT57dGhpcy5lbWl0KCJ3YXJuIixpKX0pLHRoaXMudHJhbnNmb3JtZXJzXy5wdXNoKG4pfX1zZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz1lO2ZvcihsZXQgdCBvZiB0aGlzLnRyYW5zZm9ybWVyc18pdC5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyl9YXN5bmMgc3RhcnQoZSx0KXtpZighdGhpcy50cmFuc2Zvcm1lcnNffHx0aGlzLnRyYW5zZm9ybWVyc18ubGVuZ3RoPT09MCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gTm8gdHJhbnNmb3JtZXJzLiIpO3JldHVybn10cnl7bGV0IG49ZTtmb3IobGV0IGkgb2YgdGhpcy50cmFuc2Zvcm1lcnNfKWU9ZS5waXBlVGhyb3VnaChuZXcgVHJhbnNmb3JtU3RyZWFtKGkpKTtlLnBpcGVUbyh0KS50aGVuKGFzeW5jKCk9Pntjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTZXR1cC4iKSxhd2FpdCB0LmFib3J0KCksYXdhaXQgbi5jYW5jZWwoKSx0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX2VuZGVkIil9KS5jYXRjaChhc3luYyBpPT57ZS5jYW5jZWwoKS50aGVuKCgpPT57Y29uc29sZS5sb2coIltQaXBlbGluZV0gU2h1dHRpbmcgZG93biBzdHJlYW1zIGFmdGVyIGFib3J0LiIpfSkuY2F0Y2gobz0+e2NvbnNvbGUuZXJyb3IoIltQaXBlbGluZV0gRXJyb3IgZnJvbSBzdHJlYW0gdHJhbnNmb3JtOiIsbyl9KSxhd2FpdCB0LmFib3J0KGkpLGF3YWl0IG4uY2FuY2VsKGkpLHRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIiwicGlwZWxpbmVfZW5kZWRfd2l0aF9lcnJvciIpfSl9Y2F0Y2h7dGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3IiKSx0aGlzLmRlc3Ryb3koKTtyZXR1cm59dGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9zdGFydGVkIiksY29uc29sZS5sb2coIltQaXBlbGluZV0gUGlwZWxpbmUgc3RhcnRlZC4iKX1hc3luYyBkZXN0cm95KCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gRGVzdHJveWluZyBQaXBlbGluZS4iKTtmb3IobGV0IGUgb2YgdGhpcy50cmFuc2Zvcm1lcnNfKWUuc3RvcCgpfX1jbGFzcyBEbyBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx3KHRoaXMsInJlcG9ydGVyXyIpLHcodGhpcywicGlwZWxpbmVfIiksdyh0aGlzLCJ0cmFuc2Zvcm1lcnNfIiksdyh0aGlzLCJyZWFkYWJsZV8iKSx3KHRoaXMsIndyaXRhYmxlXyIpLHcodGhpcywidHJhY2tFeHBlY3RlZFJhdGVfIiksdGhpcy5yZXBvcnRlcl89bmV3IFp0LHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfPS0xLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IkNyZWF0ZSJ9KX1zZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz1lLHRoaXMucGlwZWxpbmVfJiZ0aGlzLnBpcGVsaW5lXy5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyl9dHJhbnNmb3JtKGUsdCl7cmV0dXJuIHRoaXMucmVhZGFibGVfPWUsdGhpcy53cml0YWJsZV89dCx0aGlzLnRyYW5zZm9ybUludGVybmFsKCl9dHJhbnNmb3JtSW50ZXJuYWwoKXtyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMoZSx0KT0+e2lmKCF0aGlzLnRyYW5zZm9ybWVyc198fHRoaXMudHJhbnNmb3JtZXJzXy5sZW5ndGg9PT0wKXt0aGlzLnJlcG9ydCh7bWVzc2FnZTplZS5lcnJvcnMudHJhbnNmb3JtZXJfbm9uZSx2YXJpYXRpb246IkVycm9yIn0pLHQoIltNZWRpYVByb2Nlc3Nvcl0gTmVlZCB0byBzZXQgdHJhbnNmb3JtZXJzLiIpO3JldHVybn1pZighdGhpcy5yZWFkYWJsZV8pe3RoaXMucmVwb3J0KHt2YXJpYXRpb246IkVycm9yIixtZXNzYWdlOmVlLmVycm9ycy5yZWFkYWJsZV9udWxsfSksdCgiW01lZGlhUHJvY2Vzc29yXSBSZWFkYWJsZSBpcyBudWxsLiIpO3JldHVybn1pZighdGhpcy53cml0YWJsZV8pe3RoaXMucmVwb3J0KHt2YXJpYXRpb246IkVycm9yIixtZXNzYWdlOmVlLmVycm9ycy53cml0YWJsZV9udWxsfSksdCgiW01lZGlhUHJvY2Vzc29yXSBXcml0YWJsZSBpcyBudWxsLiIpO3JldHVybn1sZXQgbj0hMTt0aGlzLnBpcGVsaW5lXyYmKG49ITAsdGhpcy5waXBlbGluZV8uY2xlYXJMaXN0ZW5lcnMoKSx0aGlzLnBpcGVsaW5lXy5kZXN0cm95KCkpLHRoaXMucGlwZWxpbmVfPW5ldyBrbyh0aGlzLnRyYW5zZm9ybWVyc18pLHRoaXMucGlwZWxpbmVfLm9uKCJ3YXJuIixpPT57dGhpcy5lbWl0KCJ3YXJuIixpKX0pLHRoaXMucGlwZWxpbmVfLm9uKCJlcnJvciIsaT0+e3RoaXMuZW1pdCgiZXJyb3IiLGkpfSksdGhpcy5waXBlbGluZV8ub24oInBpcGVsaW5lSW5mbyIsaT0+e24mJihpPT09InBpcGVsaW5lX3N0YXJ0ZWQiP2k9ZXIucGlwZWxpbmVfcmVzdGFydGVkOmk9PT0icGlwZWxpbmVfc3RhcnRlZF93aXRoX2Vycm9yIiYmKGk9ZXIucGlwZWxpbmVfcmVzdGFydGVkX3dpdGhfZXJyb3IpKSx0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsaSl9KSx0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyE9LTEmJnRoaXMucGlwZWxpbmVfLnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKSx0aGlzLnBpcGVsaW5lXy5zdGFydCh0aGlzLnJlYWRhYmxlXyx0aGlzLndyaXRhYmxlXykudGhlbigoKT0+e2UoKX0pLmNhdGNoKGk9Pnt0KGkpfSl9KX1zZXRUcmFuc2Zvcm1lcnMoZSl7cmV0dXJuIHRoaXMucmVwb3J0KHt2YXJpYXRpb246IlVwZGF0ZSIsbWVzc2FnZTplZS51cGRhdGVzLnRyYW5zZm9ybWVyX25ld30pLHRoaXMudHJhbnNmb3JtZXJzXz1lLHRoaXMucmVhZGFibGVfJiZ0aGlzLndyaXRhYmxlXz90aGlzLnRyYW5zZm9ybUludGVybmFsKCk6UHJvbWlzZS5yZXNvbHZlKCl9ZGVzdHJveSgpe3JldHVybiBuZXcgUHJvbWlzZShhc3luYyBlPT57dGhpcy5waXBlbGluZV8mJnRoaXMucGlwZWxpbmVfLmRlc3Ryb3koKSx0aGlzLnJlcG9ydCh7dmFyaWF0aW9uOiJEZWxldGUifSksZSgpfSl9cmVwb3J0KGUpe3RoaXMucmVwb3J0ZXJfLnNlbmQoe3ZlcnNpb246aHQsYWN0aW9uOiJNZWRpYVByb2Nlc3NvciIsLi4uZX0pfX12YXIgQ289T2JqZWN0LmRlZmluZVByb3BlcnR5LE1vPShyLGUsdCk9PmUgaW4gcj9DbyhyLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnR9KTpyW2VdPXQsQm89KHIsZSx0KT0+KE1vKHIsdHlwZW9mIGUhPSJzeW1ib2wiP2UrIiI6ZSx0KSx0KTtjb25zdCBPbz0iaGxnLnRva2JveC5jb20vcHJvZC9sb2dnaW5nL3ZjcF93ZWJydGMiLFVvPSJodHRwczovLyIsTm89MWU0O2xldCBtdDtjb25zdCBMbz1uZXcgVWludDhBcnJheSgxNik7ZnVuY3Rpb24gem8oKXtpZighbXQmJihtdD10eXBlb2YgY3J5cHRvPCJ1IiYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byksIW10KSl0aHJvdyBuZXcgRXJyb3IoImNyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkIik7cmV0dXJuIG10KExvKX1jb25zdCBNPVtdO2ZvcihsZXQgcj0wO3I8MjU2OysrcilNLnB1c2goKHIrMjU2KS50b1N0cmluZygxNikuc2xpY2UoMSkpO2Z1bmN0aW9uIEdvKHIsZT0wKXtyZXR1cm4oTVtyW2UrMF1dK01bcltlKzFdXStNW3JbZSsyXV0rTVtyW2UrM11dKyItIitNW3JbZSs0XV0rTVtyW2UrNV1dKyItIitNW3JbZSs2XV0rTVtyW2UrN11dKyItIitNW3JbZSs4XV0rTVtyW2UrOV1dKyItIitNW3JbZSsxMF1dK01bcltlKzExXV0rTVtyW2UrMTJdXStNW3JbZSsxM11dK01bcltlKzE0XV0rTVtyW2UrMTVdXSkudG9Mb3dlckNhc2UoKX1jb25zdCAkbz10eXBlb2YgY3J5cHRvPCJ1IiYmY3J5cHRvLnJhbmRvbVVVSUQmJmNyeXB0by5yYW5kb21VVUlELmJpbmQoY3J5cHRvKSx1bj17cmFuZG9tVVVJRDokb307ZnVuY3Rpb24gV28ocixlLHQpe2lmKHVuLnJhbmRvbVVVSUQmJiFlJiYhcilyZXR1cm4gdW4ucmFuZG9tVVVJRCgpO3I9cnx8e307Y29uc3Qgbj1yLnJhbmRvbXx8KHIucm5nfHx6bykoKTtpZihuWzZdPW5bNl0mMTV8NjQsbls4XT1uWzhdJjYzfDEyOCxlKXt0PXR8fDA7Zm9yKGxldCBpPTA7aTwxNjsrK2kpZVt0K2ldPW5baV07cmV0dXJuIGV9cmV0dXJuIEdvKG4pfWZ1bmN0aW9uIHRyKHIsZSl7Z2xvYmFsVGhpcy52b25hZ2V8fChnbG9iYWxUaGlzLnZvbmFnZT17fSksZ2xvYmFsVGhpcy52b25hZ2Uud29ya2VyaXplcnx8KGdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI9e30pO2xldCB0PWdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI7cmV0dXJuIHRbcl18fCh0W3JdPWUpLHRbcl19Y29uc3QgaWU9dHIoImdsb2JhbHMiLHt9KTt2YXIgZ2U9KHI9PihyLklOSVQ9IklOSVQiLHIuRk9SV0FSRD0iRk9SV0FSRCIsci5URVJNSU5BVEU9IlRFUk1JTkFURSIsci5HTE9CQUxTX1NZTkM9IkdMT0JBTFNfU1lOQyIscikpKGdlfHx7fSk7ZnVuY3Rpb24gY24ocil7cmV0dXJuW0ltYWdlQml0bWFwLFJlYWRhYmxlU3RyZWFtLFdyaXRhYmxlU3RyZWFtXS5zb21lKGU9PnIgaW5zdGFuY2VvZiBlKX1sZXQgVm89MDtmdW5jdGlvbiBIbyhyLGUsdCxuLGkpe2NvbnN0IG89Vm8rKztyZXR1cm4gci5wb3N0TWVzc2FnZSh7aWQ6byx0eXBlOmUsZnVuY3Rpb25OYW1lOnQsYXJnczpufSxuLmZpbHRlcihzPT5jbihzKSkpLG5ldyBQcm9taXNlKHM9PntpPT1udWxsfHxpLnNldChvLHMpfSl9ZnVuY3Rpb24gJGUocixlKXtjb25zdHtpZDp0LHR5cGU6bn09cixpPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07cG9zdE1lc3NhZ2Uoe2lkOnQsdHlwZTpuLHJlc3VsdDplfSxpLmZpbHRlcihvPT5jbihvKSkpfWNvbnN0IGZuPXRyKCJ3b3JrZXJpemVkIix7fSk7ZnVuY3Rpb24gbG4oKXtyZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlfWFzeW5jIGZ1bmN0aW9uIGpvKCl7aWYobG4oKSkkZSh7dHlwZTpnZS5HTE9CQUxTX1NZTkN9LGllKTtlbHNle2NvbnN0IHI9W107Zm9yKGNvbnN0IGUgaW4gZm4pe2NvbnN0e3dvcmtlcjp0LHJlc29sdmVyczpufT1mbltlXS53b3JrZXJDb250ZXh0O3QmJnIucHVzaChIbyh0LGdlLkdMT0JBTFNfU1lOQywiIixbaWVdLG4pKX1hd2FpdCBQcm9taXNlLmFsbChyKX19ZnVuY3Rpb24gcHQocixlKXtpZihBcnJheS5pc0FycmF5KGUpKWUuc3BsaWNlKDAsZS5sZW5ndGgpO2Vsc2UgaWYodHlwZW9mIGU9PSJvYmplY3QiKWZvcihjb25zdCB0IGluIGUpZGVsZXRlIGVbdF07Zm9yKGNvbnN0IHQgaW4gcilBcnJheS5pc0FycmF5KHJbdF0pPyhlW3RdPVtdLHB0KHJbdF0sZVt0XSkpOnR5cGVvZiByW3RdPT0ib2JqZWN0Ij8oZVt0XT17fSxwdChyW3RdLGVbdF0pKTplW3RdPXJbdF19YXN5bmMgZnVuY3Rpb24gWW8ocixlKXtjb25zdHtmdW5jdGlvbk5hbWU6dCxhcmdzOm59PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtpZighdCl0aHJvdyJtaXNzaW5nIGZ1bmN0aW9uIG5hbWUgdG8gY2FsbCI7aWYoIWUuaW5zdGFuY2VbdF0pdGhyb3dgdW5kZWZpbmVkIGZ1bmN0aW9uIFske3R9XSBpbiBjbGFzcyAke2UuaW5zdGFuY2UuY29uc3RydWN0b3Iud29ya2VySWR9YDskZShyLGF3YWl0IGUuaW5zdGFuY2VbdF0oLi4ubiE9bnVsbD9uOltdKSl9Y29uc3QgWG89dHIoInJlZ2lzdGVyZWRXb3JrZXJzIix7fSk7ZnVuY3Rpb24gUW8ocixlKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgY2xhc3NOYW1lIHdoaWxlIGluaXRpYWxpemluZyB3b3JrZXIiO2NvbnN0W3Qsbl09ci5hcmdzLGk9WG9bdF07aWYoaSllLmluc3RhbmNlPW5ldyBpKHIuYXJncy5zbGljZSgxKSk7ZWxzZSB0aHJvd2B1bmtub3duIHdvcmtlciBjbGFzcyAke3R9YDtwdChuLGllKSwkZShyLHR5cGVvZiBlLmluc3RhbmNlIT09dm9pZCAwKX1hc3luYyBmdW5jdGlvbiBxbyhyLGUpe2NvbnN0e2FyZ3M6dH09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2xldCBuO2UuaW5zdGFuY2UudGVybWluYXRlJiYobj1hd2FpdCBlLmluc3RhbmNlLnRlcm1pbmF0ZSguLi50IT1udWxsP3Q6W10pKSwkZShyLG4pfWZ1bmN0aW9uIEtvKHIpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBnbG9iYWxzIHdoaWxlIHN5bmNpbmciO3B0KHIuYXJnc1swXSxpZSksJGUocix7fSl9ZnVuY3Rpb24gSm8oKXtjb25zdCByPXt9O29ubWVzc2FnZT1hc3luYyBlPT57Y29uc3QgdD1lLmRhdGE7c3dpdGNoKHQudHlwZSl7Y2FzZSBnZS5JTklUOlFvKHQscik7YnJlYWs7Y2FzZSBnZS5GT1JXQVJEOllvKHQscik7YnJlYWs7Y2FzZSBnZS5URVJNSU5BVEU6cW8odCxyKTticmVhaztjYXNlIGdlLkdMT0JBTFNfU1lOQzpLbyh0KTticmVha319fWxuKCkmJkpvKCk7ZnVuY3Rpb24gWm8ocixlKXtyZXR1cm4gaWVbcl18fChpZVtyXT1lKSxbKCk9PmllW3JdLGFzeW5jIHQ9PntpZVtyXT10LGF3YWl0IGpvKCl9XX1mdW5jdGlvbiBlcyhyLGUpe3JldHVybiBabyhyLGUpfWNvbnN0W3RzLFZsXT1lcygibWV0YWRhdGEiKTtmdW5jdGlvbiBycigpe3JldHVybiB0cygpfWNsYXNzIHJze2NvbnN0cnVjdG9yKGUpe0JvKHRoaXMsInV1aWQiLFdvKCkpLHRoaXMuY29uZmlnPWV9YXN5bmMgc2VuZChlKXt2YXIgdCxuLGk7Y29uc3R7YXBwSWQ6byxzb3VyY2VUeXBlOnN9PSh0PXJyKCkpIT1udWxsP3Q6e307aWYoIW98fCFzKXJldHVybiJtZXRhZGF0YSBtaXNzaW5nIjtjb25zdCBhPW5ldyBBYm9ydENvbnRyb2xsZXIsdT1zZXRUaW1lb3V0KCgpPT5hLmFib3J0KCksTm8pO3JldHVybiBhd2FpdCgoaT0obj10aGlzLmNvbmZpZyk9PW51bGw/dm9pZCAwOm4uZmV0Y2gpIT1udWxsP2k6ZmV0Y2gpKHRoaXMuZ2V0VXJsKCkse21ldGhvZDoiUE9TVCIsaGVhZGVyczp0aGlzLmdldEhlYWRlcnMoKSxib2R5OkpTT04uc3RyaW5naWZ5KHRoaXMuYnVpbGRSZXBvcnQoZSkpLHNpZ25hbDphLnNpZ25hbH0pLGNsZWFyVGltZW91dCh1KSwic3VjY2VzcyJ9Z2V0VXJsKCl7dmFyIGU7bGV0IHQ9KGU9cnIoKS5wcm94eVVybCkhPW51bGw/ZTpVbztyZXR1cm4gdCs9KHQuYXQoLTEpPT09Ii8iPyIiOiIvIikrT28sdH1nZXRIZWFkZXJzKCl7cmV0dXJueyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn19YnVpbGRSZXBvcnQoZSl7Y29uc3QgdD1ycigpO3JldHVybntndWlkOnRoaXMudXVpZCwuLi5lLGFwcGxpY2F0aW9uSWQ6dC5hcHBJZCx0aW1lc3RhbXA6RGF0ZS5ub3coKSxwcm94eVVybDp0LnByb3h5VXJsLHNvdXJjZTp0LnNvdXJjZVR5cGV9fX1jb25zdCBucz0iNS4xLjAiO3ZhciBndD0ocj0+KHIuTG93PSJMb3ciLHIuSGlnaD0iSGlnaCIscikpKGd0fHx7fSksbnI9KHI9PihyLkZBU1Q9IkZBU1QiLHIuUFJFQ0lTRT0iUFJFQ0lTRSIscikpKG5yfHx7fSkseXQ9KHI9PihyLkNBTlZBUz0iQ0FOVkFTIixyLldFQkdMPSJXRUJHTCIscikpKHl0fHx7fSksaXM9ZnVuY3Rpb24oKXt2YXIgcj10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jdXJyZW50U2NyaXB0P2RvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjOnZvaWQgMDtyZXR1cm4gZnVuY3Rpb24oZSl7ZT1lfHx7fTt2YXIgdD10eXBlb2YgZTwidSI/ZTp7fSxuLGk7dC5yZWFkeT1uZXcgUHJvbWlzZShmdW5jdGlvbihjLG0pe249YyxpPW19KTt2YXIgbz17fSxzO2ZvcihzIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShzKSYmKG9bc109dFtzXSk7dmFyIGE9Ii4vdGhpcy5wcm9ncmFtIix1PWZ1bmN0aW9uKGMsbSl7dGhyb3cgbX0sZj0hMCxkPSIiO2Z1bmN0aW9uIHAoYyl7cmV0dXJuIHQubG9jYXRlRmlsZT90LmxvY2F0ZUZpbGUoYyxkKTpkK2N9dmFyIGc7dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3VycmVudFNjcmlwdCYmKGQ9ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpLHImJihkPXIpLGQuaW5kZXhPZigiYmxvYjoiKSE9PTA/ZD1kLnN1YnN0cigwLGQucmVwbGFjZSgvWz8jXS4qLywiIikubGFzdEluZGV4T2YoIi8iKSsxKTpkPSIiO3ZhciBiPXQucHJpbnR8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksaD10LnByaW50RXJyfHxjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtmb3IocyBpbiBvKW8uaGFzT3duUHJvcGVydHkocykmJih0W3NdPW9bc10pO289bnVsbCx0LmFyZ3VtZW50cyYmdC5hcmd1bWVudHMsdC50aGlzUHJvZ3JhbSYmKGE9dC50aGlzUHJvZ3JhbSksdC5xdWl0JiYodT10LnF1aXQpO3ZhciB4O3Qud2FzbUJpbmFyeSYmKHg9dC53YXNtQmluYXJ5KTt2YXIgRT10Lm5vRXhpdFJ1bnRpbWV8fCEwO3R5cGVvZiBXZWJBc3NlbWJseSE9Im9iamVjdCImJmRlKCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkIik7dmFyIHYsRj0hMSxrPXR5cGVvZiBUZXh0RGVjb2RlcjwidSI/bmV3IFRleHREZWNvZGVyKCJ1dGY4Iik6dm9pZCAwO2Z1bmN0aW9uIEcoYyxtLHkpe2Zvcih2YXIgVD1tK3ksRD1tO2NbRF0mJiEoRD49VCk7KSsrRDtpZihELW0+MTYmJmMuc3ViYXJyYXkmJmspcmV0dXJuIGsuZGVjb2RlKGMuc3ViYXJyYXkobSxEKSk7Zm9yKHZhciBCPSIiO208RDspe3ZhciBBPWNbbSsrXTtpZighKEEmMTI4KSl7Qis9U3RyaW5nLmZyb21DaGFyQ29kZShBKTtjb250aW51ZX12YXIgVT1jW20rK10mNjM7aWYoKEEmMjI0KT09MTkyKXtCKz1TdHJpbmcuZnJvbUNoYXJDb2RlKChBJjMxKTw8NnxVKTtjb250aW51ZX12YXIgSz1jW20rK10mNjM7aWYoKEEmMjQwKT09MjI0P0E9KEEmMTUpPDwxMnxVPDw2fEs6QT0oQSY3KTw8MTh8VTw8MTJ8Szw8NnxjW20rK10mNjMsQTw2NTUzNilCKz1TdHJpbmcuZnJvbUNoYXJDb2RlKEEpO2Vsc2V7dmFyIHppPUEtNjU1MzY7Qis9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5Nnx6aT4+MTAsNTYzMjB8emkmMTAyMyl9fXJldHVybiBCfWZ1bmN0aW9uIHooYyxtKXtyZXR1cm4gYz9HKGxlLGMsbSk6IiJ9ZnVuY3Rpb24gSChjLG0seSl7Zm9yKHZhciBUPTA7VDxjLmxlbmd0aDsrK1QpVGVbbSsrPj4wXT1jLmNoYXJDb2RlQXQoVCk7eXx8KFRlW20+PjBdPTApfWZ1bmN0aW9uICQoYyxtKXtyZXR1cm4gYyVtPjAmJihjKz1tLWMlbSksY312YXIgS2UsVGUsbGUsVztmdW5jdGlvbiBDaShjKXtLZT1jLHQuSEVBUDg9VGU9bmV3IEludDhBcnJheShjKSx0LkhFQVAxNj1uZXcgSW50MTZBcnJheShjKSx0LkhFQVAzMj1XPW5ldyBJbnQzMkFycmF5KGMpLHQuSEVBUFU4PWxlPW5ldyBVaW50OEFycmF5KGMpLHQuSEVBUFUxNj1uZXcgVWludDE2QXJyYXkoYyksdC5IRUFQVTMyPW5ldyBVaW50MzJBcnJheShjKSx0LkhFQVBGMzI9bmV3IEZsb2F0MzJBcnJheShjKSx0LkhFQVBGNjQ9bmV3IEZsb2F0NjRBcnJheShjKX10LklOSVRJQUxfTUVNT1JZO3ZhciBXcixNaT1bXSxCaT1bXSxPaT1bXSxvbD0wO2Z1bmN0aW9uIHNsKCl7cmV0dXJuIEV8fG9sPjB9ZnVuY3Rpb24gYWwoKXtpZih0LnByZVJ1bilmb3IodHlwZW9mIHQucHJlUnVuPT0iZnVuY3Rpb24iJiYodC5wcmVSdW49W3QucHJlUnVuXSk7dC5wcmVSdW4ubGVuZ3RoOylmbCh0LnByZVJ1bi5zaGlmdCgpKTtWcihNaSl9ZnVuY3Rpb24gdWwoKXtWcihCaSl9ZnVuY3Rpb24gY2woKXtpZih0LnBvc3RSdW4pZm9yKHR5cGVvZiB0LnBvc3RSdW49PSJmdW5jdGlvbiImJih0LnBvc3RSdW49W3QucG9zdFJ1bl0pO3QucG9zdFJ1bi5sZW5ndGg7KWRsKHQucG9zdFJ1bi5zaGlmdCgpKTtWcihPaSl9ZnVuY3Rpb24gZmwoYyl7TWkudW5zaGlmdChjKX1mdW5jdGlvbiBsbChjKXtCaS51bnNoaWZ0KGMpfWZ1bmN0aW9uIGRsKGMpe09pLnVuc2hpZnQoYyl9dmFyIHdlPTAsSmU9bnVsbDtmdW5jdGlvbiBobChjKXt3ZSsrLHQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKHdlKX1mdW5jdGlvbiBtbChjKXtpZih3ZS0tLHQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKHdlKSx3ZT09MCYmSmUpe3ZhciBtPUplO0plPW51bGwsbSgpfX10LnByZWxvYWRlZEltYWdlcz17fSx0LnByZWxvYWRlZEF1ZGlvcz17fTtmdW5jdGlvbiBkZShjKXt0Lm9uQWJvcnQmJnQub25BYm9ydChjKSxjPSJBYm9ydGVkKCIrYysiKSIsaChjKSxGPSEwLGMrPSIuIEJ1aWxkIHdpdGggLXMgQVNTRVJUSU9OUz0xIGZvciBtb3JlIGluZm8uIjt2YXIgbT1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKGMpO3Rocm93IGkobSksbX12YXIgcGw9ImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwiO2Z1bmN0aW9uIFVpKGMpe3JldHVybiBjLnN0YXJ0c1dpdGgocGwpfXZhciBYO1g9InRmbGl0ZS1zaW1kLndhc20iLFVpKFgpfHwoWD1wKFgpKTtmdW5jdGlvbiBOaShjKXt0cnl7aWYoYz09WCYmeClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoeCk7aWYoIWcpdGhyb3ciYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWQifWNhdGNoKG0pe2RlKG0pfX1mdW5jdGlvbiBnbCgpe3JldHVybiF4JiZmJiZ0eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiI/ZmV0Y2goWCx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24oYyl7aWYoIWMub2spdGhyb3ciZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnIitYKyInIjtyZXR1cm4gYy5hcnJheUJ1ZmZlcigpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gTmkoWCl9KTpQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIE5pKFgpfSl9ZnVuY3Rpb24geWwoKXt2YXIgYz17YTpObH07ZnVuY3Rpb24gbShBLFUpe3ZhciBLPUEuZXhwb3J0czt0LmFzbT1LLHY9dC5hc20ucSxDaSh2LmJ1ZmZlciksV3I9dC5hc20uRSxsbCh0LmFzbS5yKSxtbCgpfWhsKCk7ZnVuY3Rpb24geShBKXttKEEuaW5zdGFuY2UpfWZ1bmN0aW9uIFQoQSl7cmV0dXJuIGdsKCkudGhlbihmdW5jdGlvbihVKXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoVSxjKX0pLnRoZW4oZnVuY3Rpb24oVSl7cmV0dXJuIFV9KS50aGVuKEEsZnVuY3Rpb24oVSl7aCgiZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogIitVKSxkZShVKX0pfWZ1bmN0aW9uIEQoKXtyZXR1cm4heCYmdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nPT0iZnVuY3Rpb24iJiYhVWkoWCkmJnR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIj9mZXRjaChYLHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSkudGhlbihmdW5jdGlvbihBKXt2YXIgVT1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhBLGMpO3JldHVybiBVLnRoZW4oeSxmdW5jdGlvbihLKXtyZXR1cm4gaCgid2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICIrSyksaCgiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSxUKHkpfSl9KTpUKHkpfWlmKHQuaW5zdGFudGlhdGVXYXNtKXRyeXt2YXIgQj10Lmluc3RhbnRpYXRlV2FzbShjLG0pO3JldHVybiBCfWNhdGNoKEEpe3JldHVybiBoKCJNb2R1bGUuaW5zdGFudGlhdGVXYXNtIGNhbGxiYWNrIGZhaWxlZCB3aXRoIGVycm9yOiAiK0EpLCExfXJldHVybiBEKCkuY2F0Y2goaSkse319ZnVuY3Rpb24gVnIoYyl7Zm9yKDtjLmxlbmd0aD4wOyl7dmFyIG09Yy5zaGlmdCgpO2lmKHR5cGVvZiBtPT0iZnVuY3Rpb24iKXttKHQpO2NvbnRpbnVlfXZhciB5PW0uZnVuYzt0eXBlb2YgeT09Im51bWJlciI/bS5hcmc9PT12b2lkIDA/V3IuZ2V0KHkpKCk6V3IuZ2V0KHkpKG0uYXJnKTp5KG0uYXJnPT09dm9pZCAwP251bGw6bS5hcmcpfX1mdW5jdGlvbiBibChjLG0seSxUKXtkZSgiQXNzZXJ0aW9uIGZhaWxlZDogIit6KGMpKyIsIGF0OiAiK1ttP3oobSk6InVua25vd24gZmlsZW5hbWUiLHksVD96KFQpOiJ1bmtub3duIGZ1bmN0aW9uIl0pfWZ1bmN0aW9uIHhsKGMsbSl7ZGUoIlRvIHVzZSBkbG9wZW4sIHlvdSBuZWVkIHRvIHVzZSBFbXNjcmlwdGVuJ3MgbGlua2luZyBzdXBwb3J0LCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Vtc2NyaXB0ZW4tY29yZS9lbXNjcmlwdGVuL3dpa2kvTGlua2luZyIpfWZ1bmN0aW9uIF9sKGMsbSl7ZGUoIlRvIHVzZSBkbG9wZW4sIHlvdSBuZWVkIHRvIHVzZSBFbXNjcmlwdGVuJ3MgbGlua2luZyBzdXBwb3J0LCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Vtc2NyaXB0ZW4tY29yZS9lbXNjcmlwdGVuL3dpa2kvTGlua2luZyIpfWZ1bmN0aW9uIHZsKCl7ZGUoIiIpfXZhciBHdDtHdD1mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX07dmFyIEVsPSEwO2Z1bmN0aW9uIFRsKGMpe3JldHVybiBXW0xpKCk+PjJdPWMsY31mdW5jdGlvbiB3bChjLG0pe3ZhciB5O2lmKGM9PT0wKXk9RGF0ZS5ub3coKTtlbHNlIGlmKChjPT09MXx8Yz09PTQpJiZFbCl5PUd0KCk7ZWxzZSByZXR1cm4gVGwoMjgpLC0xO3JldHVybiBXW20+PjJdPXkvMWUzfDAsV1ttKzQ+PjJdPXklMWUzKjFlMyoxZTN8MCwwfWZ1bmN0aW9uIEFsKCl7cmV0dXJuIDIxNDc0ODM2NDh9ZnVuY3Rpb24gSWwoYyxtLHkpe2xlLmNvcHlXaXRoaW4oYyxtLG0reSl9ZnVuY3Rpb24gU2woYyl7dHJ5e3JldHVybiB2Lmdyb3coYy1LZS5ieXRlTGVuZ3RoKzY1NTM1Pj4+MTYpLENpKHYuYnVmZmVyKSwxfWNhdGNoe319ZnVuY3Rpb24gUmwoYyl7dmFyIG09bGUubGVuZ3RoO2M9Yz4+PjA7dmFyIHk9MjE0NzQ4MzY0ODtpZihjPnkpcmV0dXJuITE7Zm9yKHZhciBUPTE7VDw9NDtUKj0yKXt2YXIgRD1tKigxKy4yL1QpO0Q9TWF0aC5taW4oRCxjKzEwMDY2MzI5Nik7dmFyIEI9TWF0aC5taW4oeSwkKE1hdGgubWF4KGMsRCksNjU1MzYpKSxBPVNsKEIpO2lmKEEpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gRmwoYyl7Zm9yKHZhciBtPUd0KCk7R3QoKS1tPGM7KTt9dmFyIEhyPXt9O2Z1bmN0aW9uIFBsKCl7cmV0dXJuIGF8fCIuL3RoaXMucHJvZ3JhbSJ9ZnVuY3Rpb24gWmUoKXtpZighWmUuc3RyaW5ncyl7dmFyIGM9KHR5cGVvZiBuYXZpZ2F0b3I9PSJvYmplY3QiJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdfHwiQyIpLnJlcGxhY2UoIi0iLCJfIikrIi5VVEYtOCIsbT17VVNFUjoid2ViX3VzZXIiLExPR05BTUU6IndlYl91c2VyIixQQVRIOiIvIixQV0Q6Ii8iLEhPTUU6Ii9ob21lL3dlYl91c2VyIixMQU5HOmMsXzpQbCgpfTtmb3IodmFyIHkgaW4gSHIpSHJbeV09PT12b2lkIDA/ZGVsZXRlIG1beV06bVt5XT1Iclt5XTt2YXIgVD1bXTtmb3IodmFyIHkgaW4gbSlULnB1c2goeSsiPSIrbVt5XSk7WmUuc3RyaW5ncz1UfXJldHVybiBaZS5zdHJpbmdzfXZhciAkdD17bWFwcGluZ3M6e30sYnVmZmVyczpbbnVsbCxbXSxbXV0scHJpbnRDaGFyOmZ1bmN0aW9uKGMsbSl7dmFyIHk9JHQuYnVmZmVyc1tjXTttPT09MHx8bT09PTEwPygoYz09PTE/YjpoKShHKHksMCkpLHkubGVuZ3RoPTApOnkucHVzaChtKX0sdmFyYXJnczp2b2lkIDAsZ2V0OmZ1bmN0aW9uKCl7JHQudmFyYXJncys9NDt2YXIgYz1XWyR0LnZhcmFyZ3MtND4+Ml07cmV0dXJuIGN9LGdldFN0cjpmdW5jdGlvbihjKXt2YXIgbT16KGMpO3JldHVybiBtfSxnZXQ2NDpmdW5jdGlvbihjLG0pe3JldHVybiBjfX07ZnVuY3Rpb24ga2woYyxtKXt2YXIgeT0wO3JldHVybiBaZSgpLmZvckVhY2goZnVuY3Rpb24oVCxEKXt2YXIgQj1tK3k7V1tjK0QqND4+Ml09QixIKFQsQikseSs9VC5sZW5ndGgrMX0pLDB9ZnVuY3Rpb24gRGwoYyxtKXt2YXIgeT1aZSgpO1dbYz4+Ml09eS5sZW5ndGg7dmFyIFQ9MDtyZXR1cm4geS5mb3JFYWNoKGZ1bmN0aW9uKEQpe1QrPUQubGVuZ3RoKzF9KSxXW20+PjJdPVQsMH1mdW5jdGlvbiBDbChjKXt6bChjKX1mdW5jdGlvbiBNbChjKXtyZXR1cm4gMH1mdW5jdGlvbiBCbChjLG0seSxULEQpe31mdW5jdGlvbiBPbChjLG0seSxUKXtmb3IodmFyIEQ9MCxCPTA7Qjx5O0IrKyl7Zm9yKHZhciBBPVdbbStCKjg+PjJdLFU9V1ttKyhCKjgrNCk+PjJdLEs9MDtLPFU7SysrKSR0LnByaW50Q2hhcihjLGxlW0ErS10pO0QrPVV9cmV0dXJuIFdbVD4+Ml09RCwwfWZ1bmN0aW9uIFVsKCl7aWYodHlwZW9mIGNyeXB0bz09Im9iamVjdCImJnR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzPT0iZnVuY3Rpb24iKXt2YXIgYz1uZXcgVWludDhBcnJheSgxKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhjKSxjWzBdfX1lbHNlIHJldHVybiBmdW5jdGlvbigpe2RlKCJyYW5kb21EZXZpY2UiKX19ZnVuY3Rpb24gV3QoYyxtKXtXdC5yYW5kb21EZXZpY2V8fChXdC5yYW5kb21EZXZpY2U9VWwoKSk7Zm9yKHZhciB5PTA7eTxtO3krKylUZVtjK3k+PjBdPVd0LnJhbmRvbURldmljZSgpO3JldHVybiAwfXZhciBObD17YTpibCxlOnhsLGQ6X2wsYjp2bCxuOndsLGg6QWwsbDpJbCxtOlJsLHA6RmwsZjprbCxnOkRsLGo6Q2wsaTpNbCxrOkJsLGM6T2wsbzpXdH07eWwoKSx0Ll9fX3dhc21fY2FsbF9jdG9ycz1mdW5jdGlvbigpe3JldHVybih0Ll9fX3dhc21fY2FsbF9jdG9ycz10LmFzbS5yKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE1vZGVsQnVmZmVyTWVtb3J5T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldE1vZGVsQnVmZmVyTWVtb3J5T2Zmc2V0PXQuYXNtLnMpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0SW5wdXRNZW1vcnlPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0SW5wdXRNZW1vcnlPZmZzZXQ9dC5hc20udCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRJbnB1dEhlaWdodD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRJbnB1dEhlaWdodD10LmFzbS51KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldElucHV0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0SW5wdXRXaWR0aD10LmFzbS52KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldElucHV0Q2hhbm5lbENvdW50PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldElucHV0Q2hhbm5lbENvdW50PXQuYXNtLncpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0T3V0cHV0TWVtb3J5T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldE91dHB1dE1lbW9yeU9mZnNldD10LmFzbS54KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE91dHB1dEhlaWdodD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRPdXRwdXRIZWlnaHQ9dC5hc20ueSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRPdXRwdXRXaWR0aD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRPdXRwdXRXaWR0aD10LmFzbS56KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE91dHB1dENoYW5uZWxDb3VudD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRPdXRwdXRDaGFubmVsQ291bnQ9dC5hc20uQSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9sb2FkTW9kZWw9ZnVuY3Rpb24oKXtyZXR1cm4odC5fbG9hZE1vZGVsPXQuYXNtLkIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fcnVuSW5mZXJlbmNlPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX3J1bkluZmVyZW5jZT10LmFzbS5DKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2lzR1BVRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybih0Ll9pc0dQVUVuYWJsZWQ9dC5hc20uRCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgTGk9dC5fX19lcnJub19sb2NhdGlvbj1mdW5jdGlvbigpe3JldHVybihMaT10Ll9fX2Vycm5vX2xvY2F0aW9uPXQuYXNtLkYpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVnQ7ZnVuY3Rpb24gTGwoYyl7dGhpcy5uYW1lPSJFeGl0U3RhdHVzIix0aGlzLm1lc3NhZ2U9IlByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoIitjKyIpIix0aGlzLnN0YXR1cz1jfUplPWZ1bmN0aW9uIGMoKXtWdHx8anIoKSxWdHx8KEplPWMpfTtmdW5jdGlvbiBqcihjKXtpZih3ZT4wfHwoYWwoKSx3ZT4wKSlyZXR1cm47ZnVuY3Rpb24gbSgpe1Z0fHwoVnQ9ITAsdC5jYWxsZWRSdW49ITAsIUYmJih1bCgpLG4odCksdC5vblJ1bnRpbWVJbml0aWFsaXplZCYmdC5vblJ1bnRpbWVJbml0aWFsaXplZCgpLGNsKCkpKX10LnNldFN0YXR1cz8odC5zZXRTdGF0dXMoIlJ1bm5pbmcuLi4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe3Quc2V0U3RhdHVzKCIiKX0sMSksbSgpfSwxKSk6bSgpfXQucnVuPWpyO2Z1bmN0aW9uIHpsKGMsbSl7R2woYyl9ZnVuY3Rpb24gR2woYyl7c2woKXx8KHQub25FeGl0JiZ0Lm9uRXhpdChjKSxGPSEwKSx1KGMsbmV3IExsKGMpKX1pZih0LnByZUluaXQpZm9yKHR5cGVvZiB0LnByZUluaXQ9PSJmdW5jdGlvbiImJih0LnByZUluaXQ9W3QucHJlSW5pdF0pO3QucHJlSW5pdC5sZW5ndGg+MDspdC5wcmVJbml0LnBvcCgpKCk7cmV0dXJuIGpyKCksZS5yZWFkeX19KCk7Y2xhc3Mgb3N7Y29uc3RydWN0b3IoKXtsKHRoaXMsInNlbGVjdGVkVEZMaXRlIik7bCh0aGlzLCJpc1NJTURTdXBwb3J0ZWQiLCExKTtsKHRoaXMsImlzVGhyZWFkc1N1cHBvcnRlZCIsITEpO2wodGhpcywiaW5wdXRXaWR0aCIsMCk7bCh0aGlzLCJpbnB1dEhlaWdodCIsMCk7bCh0aGlzLCJpbnB1dENoYW5uZWxDb3VudCIsMCk7bCh0aGlzLCJpbnB1dE1lbW9yeU9mZnNldCIsMCk7bCh0aGlzLCJvdXRwdXRXaWR0aCIsMCk7bCh0aGlzLCJvdXRwdXRIZWlnaHQiLDApO2wodGhpcywib3V0cHV0Q2hhbm5lbENvdW50IiwwKTtsKHRoaXMsIm91dHB1dE1lbW9yeU9mZnNldCIsMCl9fWNvbnN0IHNzPSJodHRwczovL2Qzb3Bxam1xenhmMDU3LmNsb3VkZnJvbnQubmV0L3ZvbmFnZS10ZW5zb3JmbG93LXdhc20vdGZsaXRlLXNpbWQtd2FzbS8xLjEuMy8iLGFzPSJodHRwczovL2Qzb3Bxam1xenhmMDU3LmNsb3VkZnJvbnQubmV0L21sL3NlbGZpZV9zZWdtZW50YXRpb24vNC4wLjAvIjthc3luYyBmdW5jdGlvbiB1cyhyPXNzLGU9YXMpe2xldCB0PW5ldyBvczt2YXIgbj1uZXcgUHJvbWlzZShmdW5jdGlvbihpLG8pe2FzeW5jIGZ1bmN0aW9uIHMoKXtyZXR1cm4gaXMoe2xvY2F0ZUZpbGU6ZnVuY3Rpb24oZil7cmV0dXJuIHIrZn19KX1hc3luYyBmdW5jdGlvbiBhKHUpe3JldHVybiBuZXcgUHJvbWlzZShhc3luYyhmLGQpPT57Y29uc3QgcD11O2lmKHR5cGVvZiBwPiJ1IilyZXR1cm4gZCgiVEZMaXRlIGJhY2tlbmQgdW5hdmFpbGFibGU6IHdhc21TaW1kIik7Y29uc3QgZz0ic2VsZmllX3NlZ21lbnRhdGlvbl9sYW5kc2NhcGUiO2NvbnNvbGUubG9nKCJMb2FkaW5nIHRmbGl0ZSBtb2RlbDoiLGcpO2xldCBiPWUrYCR7Z30udGZsaXRlYDtjb25zb2xlLmxvZygiVEZMaXRlIG1vZGVsVXJsOiAiK2IpO3RyeXtjb25zdCB4PWF3YWl0KGF3YWl0IGZldGNoKGIpKS5hcnJheUJ1ZmZlcigpO2NvbnNvbGUubG9nKCJNb2RlbCBidWZmZXIgc2l6ZToiLHguYnl0ZUxlbmd0aCk7Y29uc3QgRT1wLl9nZXRNb2RlbEJ1ZmZlck1lbW9yeU9mZnNldCgpO2NvbnNvbGUubG9nKCJNb2RlbCBidWZmZXIgbWVtb3J5IG9mZnNldDoiLEUpLGNvbnNvbGUubG9nKCJMb2FkaW5nIG1vZGVsIGJ1ZmZlci4uLiIpLHAuSEVBUFU4LnNldChuZXcgVWludDhBcnJheSh4KSxFKTtjb25zdCB2PXAuX2xvYWRNb2RlbCh4LmJ5dGVMZW5ndGgpO2lmKGNvbnNvbGUubG9nKCJMb2FkIG1vZGVsIHJlc3VsdDoiLHYpLHYhPT0wKXtkKCJDYW5ub3QgbG9hZCBtb2RlbCIpO3JldHVybn10LmlucHV0V2lkdGg9cC5fZ2V0SW5wdXRXaWR0aCgpLHQuaW5wdXRIZWlnaHQ9cC5fZ2V0SW5wdXRIZWlnaHQoKSx0LmlucHV0Q2hhbm5lbENvdW50PXAuX2dldElucHV0Q2hhbm5lbENvdW50KCksdC5pbnB1dE1lbW9yeU9mZnNldD1wLl9nZXRJbnB1dE1lbW9yeU9mZnNldCgpLGNvbnNvbGUubG9nKCJJbnB1dCBtZW1vcnkgb2Zmc2V0OiIsdC5pbnB1dE1lbW9yeU9mZnNldCksY29uc29sZS5sb2coIklucHV0IGhlaWdodDoiLHQuaW5wdXRIZWlnaHQpLGNvbnNvbGUubG9nKCJJbnB1dCB3aWR0aDoiLHQuaW5wdXRXaWR0aCksY29uc29sZS5sb2coIklucHV0IGNoYW5uZWxzOiIsdC5pbnB1dENoYW5uZWxDb3VudCksdC5vdXRwdXRNZW1vcnlPZmZzZXQ9cC5fZ2V0T3V0cHV0TWVtb3J5T2Zmc2V0KCksdC5vdXRwdXRXaWR0aD1wLl9nZXRPdXRwdXRXaWR0aCgpLHQub3V0cHV0SGVpZ2h0PXAuX2dldE91dHB1dEhlaWdodCgpLHQub3V0cHV0Q2hhbm5lbENvdW50PXAuX2dldE91dHB1dENoYW5uZWxDb3VudCgpLGNvbnNvbGUubG9nKCJPdXRwdXQgbWVtb3J5IG9mZnNldDoiLHQub3V0cHV0TWVtb3J5T2Zmc2V0KSxjb25zb2xlLmxvZygiT3V0cHV0IGhlaWdodDoiLHQub3V0cHV0SGVpZ2h0KSxjb25zb2xlLmxvZygiT3V0cHV0IHdpZHRoOiIsdC5vdXRwdXRXaWR0aCksY29uc29sZS5sb2coIk91dHB1dCBjaGFubmVsczoiLHQub3V0cHV0Q2hhbm5lbENvdW50KSx0LnNlbGVjdGVkVEZMaXRlPXB9Y2F0Y2goaCl7ZChoKTtyZXR1cm59ZigpfSl9cygpLnRoZW4odT0+e2lmKHU9PT1udWxsKXRocm93IGNvbnNvbGUuZXJyb3IoImxvYWRURkxpdGUgbnVsbCIpLCJsb2FkVEZMaXRlIG51bGwiO2EodSkudGhlbihmPT57aSh0KX0pLmNhdGNoKGY9Pntjb25zb2xlLmVycm9yKCJsb2FkVEZMaXRlTW9kZWwgZXJyb3IiKSxvKCJsb2FkVEZMaXRlTW9kZWwgZXJyb3IiKX0pfSkuY2F0Y2godT0+e2NvbnNvbGUuZXJyb3IoImxvYWRURkxpdGUgZXJyb3I6Iix1KSxvKCJsb2FkVEZMaXRlIGVycm9yOiIrdSl9KX0pO3JldHVybiBufWNsYXNzIGNze2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJjYW52YXMiLG5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSk7bCh0aGlzLCJjb250ZXh0Iix0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCIyZCIse3dpbGxSZWFkRnJlcXVlbnRseTohMH0pKTtsKHRoaXMsInBpeGVsQ291bnQiLDApO2wodGhpcywiaW5wdXRPZmZzZXQiLDApO2wodGhpcywib3V0cHV0T2Zmc2V0IiwwKTtsKHRoaXMsImluZm9zIik7bCh0aGlzLCJtYXNrIil9YXN5bmMgaW5pdChlLHQpe2F3YWl0IHRoaXMuaW5pdFdhc20oZSx0KSx0aGlzLmluZm9zJiYodGhpcy5jYW52YXMud2lkdGg9dGhpcy5pbmZvcy5pbnB1dFdpZHRoLHRoaXMuY2FudmFzLmhlaWdodD10aGlzLmluZm9zLmlucHV0SGVpZ2h0LHRoaXMucGl4ZWxDb3VudD10aGlzLmluZm9zLmlucHV0V2lkdGgqdGhpcy5pbmZvcy5pbnB1dEhlaWdodCx0aGlzLm1hc2s9bmV3IEltYWdlRGF0YSh0aGlzLmluZm9zLmlucHV0V2lkdGgsdGhpcy5pbmZvcy5pbnB1dEhlaWdodCksdGhpcy5pbnB1dE9mZnNldD10aGlzLmluZm9zLmlucHV0TWVtb3J5T2Zmc2V0LzQsdGhpcy5vdXRwdXRPZmZzZXQ9dGhpcy5pbmZvcy5vdXRwdXRNZW1vcnlPZmZzZXQvNCl9YXN5bmMgaW5pdFdhc20oZSx0KXt0aGlzLmluZm9zPWF3YWl0IHVzKGUsdCl9Z2V0T3V0cHV0RGltZW5zaW9ucygpe3ZhciBlLHQsbixpO3JldHVybnt3aWR0aDoodD0oZT10aGlzLmluZm9zKT09bnVsbD92b2lkIDA6ZS5vdXRwdXRXaWR0aCkhPW51bGw/dDowLGhlaWdodDooaT0obj10aGlzLmluZm9zKT09bnVsbD92b2lkIDA6bi5vdXRwdXRIZWlnaHQpIT1udWxsP2k6MH19YXN5bmMgcHJvY2VzcyhlKXtpZighdGhpcy5tYXNrfHwhdGhpcy5pbmZvcylyZXR1cm47Y29uc3QgdD10aGlzLmluZm9zLmlucHV0V2lkdGgsbj10aGlzLmluZm9zLmlucHV0SGVpZ2h0O3RoaXMuY29udGV4dC5kcmF3SW1hZ2UoZSwwLDAsZS53aWR0aCxlLmhlaWdodCwwLDAsdCxuKTtjb25zdCBpPXRoaXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwwLHQsbiksbz10aGlzLmluZm9zLnNlbGVjdGVkVEZMaXRlLkhFQVBGMzI7Zm9yKGxldCBzPTA7czx0aGlzLnBpeGVsQ291bnQ7cysrKXtjb25zdCBhPXRoaXMuaW5wdXRPZmZzZXQrcyozO29bYV09aS5kYXRhW3MqNF0vMjU1LG9bYSsxXT1pLmRhdGFbcyo0KzFdLzI1NSxvW2ErMl09aS5kYXRhW3MqNCsyXS8yNTV9dGhpcy5pbmZvcy5zZWxlY3RlZFRGTGl0ZS5fcnVuSW5mZXJlbmNlKCk7Zm9yKGxldCBzPTA7czx0aGlzLnBpeGVsQ291bnQ7cysrKXtjb25zdCBhPXRoaXMuaW5mb3Muc2VsZWN0ZWRURkxpdGUuSEVBUEYzMlt0aGlzLm91dHB1dE9mZnNldCtzXTt0aGlzLm1hc2suZGF0YVtzKjRdPXRoaXMubWFzay5kYXRhW3MqNCszXT0yNTUqYX1yZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAodGhpcy5tYXNrKX1pc0dwdVN1cHBvcnRlZCgpe3ZhciBlLHQsbjtyZXR1cm4obj0odD0oZT10aGlzLmluZm9zKT09bnVsbD92b2lkIDA6ZS5zZWxlY3RlZFRGTGl0ZSk9PW51bGw/dm9pZCAwOnQuX2lzR1BVRW5hYmxlZCgpKSE9bnVsbD9uOiExfX1mdW5jdGlvbiBmcygpe3JldHVybiBuZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCkuZ2V0Q29udGV4dCgid2ViZ2wyIix7ZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDohMH0pP3tzdXBwb3J0ZWQ6ITB9OntzdXBwb3J0ZWQ6ITEsbWVzc2FnZToiWW91ciBoYXJkd2FyZSBkb2VzIG5vdCBwZXJmb3JtIGdvb2QgZW5vdWdoIHRvIHJ1biB0aGUgbGlicmFyeSBlZmZpY2llbnRseSJ9fWNsYXNzIGlye2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJjYW52YXMiKTtsKHRoaXMsImNvbnRleHQiKTtjb25zdCBlPW5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSx0PWUuZ2V0Q29udGV4dCgiMmQiKTtpZighdCl0aHJvdyJGYWlsIHRvIHJldHJpZXZlIHdlYmdsMiBjb250ZXh0Ijt0aGlzLmNhbnZhcz1lLHRoaXMuY29udGV4dD10fXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe31lbmFibGVQb3N0UHJvY2Vzc2luZygpe31kaXNhYmxlUG9zdFByb2Nlc3NpbmcoKXt9YXN5bmMgcHJvZmlsZVdlYmdsKGUpe3JldHVybltdfWFzeW5jIHJlbmRlcihlLHQpe3JldHVybiB0aGlzLmNhbnZhc31yZXNpemVDYW52YXMoZSl7Y29uc3R7d2lkdGg6dCxoZWlnaHQ6bn09ZTt0aGlzLmNhbnZhcy53aWR0aD10LHRoaXMuY2FudmFzLmhlaWdodD1ufXJlbmRlclNpbGhvdWV0dGUoZSx0LG49Im5vbmUiKXtjb25zdHt3aWR0aDppLGhlaWdodDpvfT1lO3RoaXMuY29udGV4dC5zYXZlKCksdGhpcy5jb250ZXh0LmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0LDAsMCxpLG8pLHRoaXMuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1pbiIsdGhpcy5jb250ZXh0LmZpbHRlcj1uLHRoaXMuY29udGV4dC5kcmF3SW1hZ2UoZSwwLDAsaSxvLDAsMCx0aGlzLmNhbnZhcy53aWR0aCx0aGlzLmNhbnZhcy5oZWlnaHQpLHRoaXMuY29udGV4dC5yZXN0b3JlKCl9fWNsYXNzIGxzIGV4dGVuZHMgaXJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnJhZGl1cz1lfWFzeW5jIHJlbmRlcihlLHQpe3JldHVybiBzdXBlci5yZXNpemVDYW52YXMoZSksdGhpcy5yZW5kZXJTaWxob3VldHRlKGUsdCksdGhpcy5jb250ZXh0LnNhdmUoKSx0aGlzLmNvbnRleHQuZmlsdGVyPWBibHVyKCR7dGhpcy5yYWRpdXN9cHgpYCx0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdmVyIix0aGlzLmNvbnRleHQuZHJhd0ltYWdlKGUsMCwwLGUud2lkdGgsZS5oZWlnaHQpLHRoaXMuY29udGV4dC5yZXN0b3JlKCksc3VwZXIucmVuZGVyKGUsdCl9fWNsYXNzIGRzIGV4dGVuZHMgaXJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnJhZGl1cz1lfWFzeW5jIHJlbmRlcihlLHQpe3JldHVybiBzdXBlci5yZXNpemVDYW52YXMoZSksdGhpcy5yZW5kZXJTaWxob3VldHRlKGUsdCxgYmx1cigke3RoaXMucmFkaXVzfXB4KWApLHRoaXMuY29udGV4dC5zYXZlKCksdGhpcy5jb250ZXh0LmZpbHRlcj0ibm9uZSIsdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0iZGVzdGluYXRpb24tb3ZlciIsdGhpcy5jb250ZXh0LmRyYXdJbWFnZShlLDAsMCxlLndpZHRoLGUuaGVpZ2h0KSx0aGlzLmNvbnRleHQucmVzdG9yZSgpLHN1cGVyLnJlbmRlcihlLHQpfX1jbGFzcyBocyBleHRlbmRzIGlye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKTtsKHRoaXMsImJhY2tncm91bmRJbWFnZSIpfXNldEJhY2tncm91bmRJbWFnZSh0KXt0aGlzLmJhY2tncm91bmRJbWFnZT10fWFzeW5jIHJlbmRlcih0LG4pe3JldHVybiBzdXBlci5yZXNpemVDYW52YXModCksdGhpcy5yZW5kZXJTaWxob3VldHRlKHQsbiksdGhpcy5iYWNrZ3JvdW5kSW1hZ2UmJih0aGlzLmNvbnRleHQuc2F2ZSgpLHRoaXMuY29udGV4dC5maWx0ZXI9Im5vbmUiLHRoaXMuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW92ZXIiLHRoaXMuY29udGV4dC5kcmF3SW1hZ2UodGhpcy5iYWNrZ3JvdW5kSW1hZ2UsMCwwLHRoaXMuYmFja2dyb3VuZEltYWdlLndpZHRoLHRoaXMuYmFja2dyb3VuZEltYWdlLmhlaWdodCwwLDAsdC53aWR0aCx0LmhlaWdodCksdGhpcy5jb250ZXh0LnJlc3RvcmUoKSksc3VwZXIucmVuZGVyKHQsbil9fS8qIEBsaWNlbnNlIHR3Z2wuanMgNS41LjEgQ29weXJpZ2h0IChjKSAyMDE1LCBHcmVnZyBUYXZhcmVzIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCkF2YWlsYWJsZSB2aWEgdGhlIE1JVCBsaWNlbnNlLgpzZWU6IGh0dHA6Ly9naXRodWIuY29tL2dyZWdnbWFuL3R3Z2wuanMgZm9yIGRldGFpbHMgKi9jb25zdCBvcj01MTIwLFdlPTUxMjEsc3I9NTEyMixhcj01MTIzLHVyPTUxMjQsY3I9NTEyNSxmcj01MTI2LG1zPTMyODE5LHBzPTMyODIwLGdzPTMzNjM1LHlzPTUxMzEsYnM9MzM2NDAseHM9MzU4OTksX3M9MzU5MDIsdnM9MzYyNjksRXM9MzQwNDIsZG49e307e2NvbnN0IHI9ZG47cltvcl09SW50OEFycmF5LHJbV2VdPVVpbnQ4QXJyYXkscltzcl09SW50MTZBcnJheSxyW2FyXT1VaW50MTZBcnJheSxyW3VyXT1JbnQzMkFycmF5LHJbY3JdPVVpbnQzMkFycmF5LHJbZnJdPUZsb2F0MzJBcnJheSxyW21zXT1VaW50MTZBcnJheSxyW3BzXT1VaW50MTZBcnJheSxyW2dzXT1VaW50MTZBcnJheSxyW3lzXT1VaW50MTZBcnJheSxyW2JzXT1VaW50MzJBcnJheSxyW3hzXT1VaW50MzJBcnJheSxyW19zXT1VaW50MzJBcnJheSxyW3ZzXT1VaW50MzJBcnJheSxyW0VzXT1VaW50MzJBcnJheX1mdW5jdGlvbiBscihyKXtpZihyIGluc3RhbmNlb2YgSW50OEFycmF5KXJldHVybiBvcjtpZihyIGluc3RhbmNlb2YgVWludDhBcnJheXx8ciBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KXJldHVybiBXZTtpZihyIGluc3RhbmNlb2YgSW50MTZBcnJheSlyZXR1cm4gc3I7aWYociBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KXJldHVybiBhcjtpZihyIGluc3RhbmNlb2YgSW50MzJBcnJheSlyZXR1cm4gdXI7aWYociBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KXJldHVybiBjcjtpZihyIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KXJldHVybiBmcjt0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIHR5cGVkIGFycmF5IHR5cGUiKX1mdW5jdGlvbiBobihyKXtpZihyPT09SW50OEFycmF5KXJldHVybiBvcjtpZihyPT09VWludDhBcnJheXx8cj09PVVpbnQ4Q2xhbXBlZEFycmF5KXJldHVybiBXZTtpZihyPT09SW50MTZBcnJheSlyZXR1cm4gc3I7aWYocj09PVVpbnQxNkFycmF5KXJldHVybiBhcjtpZihyPT09SW50MzJBcnJheSlyZXR1cm4gdXI7aWYocj09PVVpbnQzMkFycmF5KXJldHVybiBjcjtpZihyPT09RmxvYXQzMkFycmF5KXJldHVybiBmcjt0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIHR5cGVkIGFycmF5IHR5cGUiKX1mdW5jdGlvbiBtbihyKXtjb25zdCBlPWRuW3JdO2lmKCFlKXRocm93IG5ldyBFcnJvcigidW5rbm93biBnbCB0eXBlIik7cmV0dXJuIGV9Y29uc3QgYnQ9dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1Ij9mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5idWZmZXImJihlLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxlLmJ1ZmZlciBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyKX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuYnVmZmVyJiZlLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfTtmdW5jdGlvbiBwbiguLi5yKXtjb25zb2xlLmVycm9yKC4uLnIpfWNvbnN0IGduPW5ldyBNYXA7ZnVuY3Rpb24geHQocixlKXtpZighcnx8dHlwZW9mIHIhPSJvYmplY3QiKXJldHVybiExO2xldCB0PWduLmdldChlKTt0fHwodD1uZXcgV2Vha01hcCxnbi5zZXQoZSx0KSk7bGV0IG49dC5nZXQocik7aWYobj09PXZvaWQgMCl7Y29uc3QgaT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocik7bj1pLnN1YnN0cmluZyg4LGkubGVuZ3RoLTEpPT09ZSx0LnNldChyLG4pfXJldHVybiBufWZ1bmN0aW9uIFRzKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTEJ1ZmZlcjwidSImJnh0KGUsIldlYkdMQnVmZmVyIil9ZnVuY3Rpb24gd3MocixlKXtyZXR1cm4gdHlwZW9mIFdlYkdMUmVuZGVyYnVmZmVyPCJ1IiYmeHQoZSwiV2ViR0xSZW5kZXJidWZmZXIiKX1mdW5jdGlvbiBkcihyLGUpe3JldHVybiB0eXBlb2YgV2ViR0xUZXh0dXJlPCJ1IiYmeHQoZSwiV2ViR0xUZXh0dXJlIil9ZnVuY3Rpb24gQXMocixlKXtyZXR1cm4gdHlwZW9mIFdlYkdMU2FtcGxlcjwidSImJnh0KGUsIldlYkdMU2FtcGxlciIpfWNvbnN0IHluPTM1MDQ0LHllPTM0OTYyLElzPTM0OTYzLFNzPTM0NjYwLFJzPTUxMjAsRnM9NTEyMSxQcz01MTIyLGtzPTUxMjMsRHM9NTEyNCxDcz01MTI1LGJuPTUxMjYseG49e2F0dHJpYlByZWZpeDoiIn07ZnVuY3Rpb24gTXMocixlLHQsbixpKXtyLmJpbmRCdWZmZXIoZSx0KSxyLmJ1ZmZlckRhdGEoZSxuLGl8fHluKX1mdW5jdGlvbiBfbihyLGUsdCxuKXtpZihUcyhyLGUpKXJldHVybiBlO3Q9dHx8eWU7Y29uc3QgaT1yLmNyZWF0ZUJ1ZmZlcigpO3JldHVybiBNcyhyLHQsaSxlLG4pLGl9ZnVuY3Rpb24gdm4ocil7cmV0dXJuIHI9PT0iaW5kaWNlcyJ9ZnVuY3Rpb24gQnMocil7cmV0dXJuIHI9PT1JbnQ4QXJyYXl8fHI9PT1VaW50OEFycmF5fWZ1bmN0aW9uIE9zKHIpe3JldHVybiByLmxlbmd0aD9yOnIuZGF0YX1jb25zdCBVcz0vY29vcmR8dGV4dHVyZS9pLE5zPS9jb2xvcnxjb2xvdXIvaTtmdW5jdGlvbiBMcyhyLGUpe2xldCB0O2lmKFVzLnRlc3Qocik/dD0yOk5zLnRlc3Qocik/dD00OnQ9MyxlJXQ+MCl0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgZ3Vlc3MgbnVtQ29tcG9uZW50cyBmb3IgYXR0cmlidXRlICcke3J9Jy4gVHJpZWQgJHt0fSBidXQgJHtlfSB2YWx1ZXMgaXMgbm90IGV2ZW5seSBkaXZpc2libGUgYnkgJHt0fS4gWW91IHNob3VsZCBzcGVjaWZ5IGl0LmApO3JldHVybiB0fWZ1bmN0aW9uIHpzKHIsZSx0KXtyZXR1cm4gci5udW1Db21wb25lbnRzfHxyLnNpemV8fExzKGUsdHx8T3MocikubGVuZ3RoKX1mdW5jdGlvbiBFbihyLGUpe2lmKGJ0KHIpKXJldHVybiByO2lmKGJ0KHIuZGF0YSkpcmV0dXJuIHIuZGF0YTtBcnJheS5pc0FycmF5KHIpJiYocj17ZGF0YTpyfSk7bGV0IHQ9ci50eXBlP2hyKHIudHlwZSk6dm9pZCAwO3JldHVybiB0fHwodm4oZSk/dD1VaW50MTZBcnJheTp0PUZsb2F0MzJBcnJheSksbmV3IHQoci5kYXRhKX1mdW5jdGlvbiBHcyhyKXtyZXR1cm4gdHlwZW9mIHI9PSJudW1iZXIiP3I6cj9obihyKTpibn1mdW5jdGlvbiBocihyKXtyZXR1cm4gdHlwZW9mIHI9PSJudW1iZXIiP21uKHIpOnJ8fEZsb2F0MzJBcnJheX1mdW5jdGlvbiAkcyhyLGUpe3JldHVybntidWZmZXI6ZS5idWZmZXIsbnVtVmFsdWVzOjIqMyo0LHR5cGU6R3MoZS50eXBlKSxhcnJheVR5cGU6aHIoZS50eXBlKX19ZnVuY3Rpb24gV3MocixlKXtjb25zdCB0PWUuZGF0YXx8ZSxuPWhyKGUudHlwZSksaT10Km4uQllURVNfUEVSX0VMRU1FTlQsbz1yLmNyZWF0ZUJ1ZmZlcigpO3JldHVybiByLmJpbmRCdWZmZXIoeWUsbyksci5idWZmZXJEYXRhKHllLGksZS5kcmF3VHlwZXx8eW4pLHtidWZmZXI6byxudW1WYWx1ZXM6dCx0eXBlOmhuKG4pLGFycmF5VHlwZTpufX1mdW5jdGlvbiBWcyhyLGUsdCl7Y29uc3Qgbj1FbihlLHQpO3JldHVybnthcnJheVR5cGU6bi5jb25zdHJ1Y3RvcixidWZmZXI6X24ocixuLHZvaWQgMCxlLmRyYXdUeXBlKSx0eXBlOmxyKG4pLG51bVZhbHVlczowfX1mdW5jdGlvbiBIcyhyLGUpe2NvbnN0IHQ9e307cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24obil7aWYoIXZuKG4pKXtjb25zdCBpPWVbbl0sbz1pLmF0dHJpYnx8aS5uYW1lfHxpLmF0dHJpYk5hbWV8fHhuLmF0dHJpYlByZWZpeCtuO2lmKGkudmFsdWUpe2lmKCFBcnJheS5pc0FycmF5KGkudmFsdWUpJiYhYnQoaS52YWx1ZSkpdGhyb3cgbmV3IEVycm9yKCJhcnJheS52YWx1ZSBpcyBub3QgYXJyYXkgb3IgdHlwZWRhcnJheSIpO3Rbb109e3ZhbHVlOmkudmFsdWV9fWVsc2V7bGV0IHM7aS5idWZmZXImJmkuYnVmZmVyIGluc3RhbmNlb2YgV2ViR0xCdWZmZXI/cz0kczp0eXBlb2YgaT09Im51bWJlciJ8fHR5cGVvZiBpLmRhdGE9PSJudW1iZXIiP3M9V3M6cz1Wcztjb25zdHtidWZmZXI6YSx0eXBlOnUsbnVtVmFsdWVzOmYsYXJyYXlUeXBlOmR9PXMocixpLG4pLHA9aS5ub3JtYWxpemUhPT12b2lkIDA/aS5ub3JtYWxpemU6QnMoZCksZz16cyhpLG4sZik7dFtvXT17YnVmZmVyOmEsbnVtQ29tcG9uZW50czpnLHR5cGU6dSxub3JtYWxpemU6cCxzdHJpZGU6aS5zdHJpZGV8fDAsb2Zmc2V0Omkub2Zmc2V0fHwwLGRpdmlzb3I6aS5kaXZpc29yPT09dm9pZCAwP3ZvaWQgMDppLmRpdmlzb3IsZHJhd1R5cGU6aS5kcmF3VHlwZX19fX0pLHIuYmluZEJ1ZmZlcih5ZSxudWxsKSx0fWZ1bmN0aW9uIGpzKHIsZSl7cmV0dXJuIGU9PT1Sc3x8ZT09PUZzPzE6ZT09PVBzfHxlPT09a3M/MjplPT09RHN8fGU9PT1Dc3x8ZT09PWJuPzQ6MH1jb25zdCBtcj1bInBvc2l0aW9uIiwicG9zaXRpb25zIiwiYV9wb3NpdGlvbiJdO2Z1bmN0aW9uIFlzKHIsZSl7bGV0IHQsbjtmb3Iobj0wO248bXIubGVuZ3RoJiYodD1tcltuXSwhKHQgaW4gZXx8KHQ9eG4uYXR0cmliUHJlZml4K3QsdCBpbiBlKSkpOysrbik7bj09PW1yLmxlbmd0aCYmKHQ9T2JqZWN0LmtleXMoZSlbMF0pO2NvbnN0IGk9ZVt0XTtpZighaS5idWZmZXIpcmV0dXJuIDE7ci5iaW5kQnVmZmVyKHllLGkuYnVmZmVyKTtjb25zdCBvPXIuZ2V0QnVmZmVyUGFyYW1ldGVyKHllLFNzKTtyLmJpbmRCdWZmZXIoeWUsbnVsbCk7Y29uc3Qgcz1qcyhyLGkudHlwZSksYT1vL3MsdT1pLm51bUNvbXBvbmVudHN8fGkuc2l6ZSxmPWEvdTtpZihmJTEhPT0wKXRocm93IG5ldyBFcnJvcihgbnVtQ29tcG9uZW50cyAke3V9IG5vdCBjb3JyZWN0IGZvciBsZW5ndGggJHtsZW5ndGh9YCk7cmV0dXJuIGZ9ZnVuY3Rpb24gWHMocixlLHQpe2NvbnN0IG49SHMocixlKSxpPU9iamVjdC5hc3NpZ24oe30sdHx8e30pO2kuYXR0cmlicz1PYmplY3QuYXNzaWduKHt9LHQ/dC5hdHRyaWJzOnt9LG4pO2NvbnN0IG89ZS5pbmRpY2VzO2lmKG8pe2NvbnN0IHM9RW4obywiaW5kaWNlcyIpO2kuaW5kaWNlcz1fbihyLHMsSXMpLGkubnVtRWxlbWVudHM9cy5sZW5ndGgsaS5lbGVtZW50VHlwZT1scihzKX1lbHNlIGkubnVtRWxlbWVudHN8fChpLm51bUVsZW1lbnRzPVlzKHIsaS5hdHRyaWJzKSk7cmV0dXJuIGl9ZnVuY3Rpb24gVmUocil7cmV0dXJuISFyLnRleFN0b3JhZ2UyRH1jb25zdCBUbj1mdW5jdGlvbigpe2NvbnN0IHI9e30sZT17fTtmdW5jdGlvbiB0KG4pe2NvbnN0IGk9bi5jb25zdHJ1Y3Rvci5uYW1lO2lmKCFyW2ldKXtmb3IoY29uc3QgbyBpbiBuKWlmKHR5cGVvZiBuW29dPT0ibnVtYmVyIil7Y29uc3Qgcz1lW25bb11dO2VbbltvXV09cz9gJHtzfSB8ICR7b31gOm99cltpXT0hMH19cmV0dXJuIGZ1bmN0aW9uKGksbyl7cmV0dXJuIHQoaSksZVtvXXx8KHR5cGVvZiBvPT0ibnVtYmVyIj9gMHgke28udG9TdHJpbmcoMTYpfWA6byl9fSgpLG9lPXt0ZXh0dXJlQ29sb3I6bmV3IFVpbnQ4QXJyYXkoWzEyOCwxOTIsMjU1LDI1NV0pLHRleHR1cmVPcHRpb25zOnt9LGNyb3NzT3JpZ2luOnZvaWQgMH0sSGU9YnQsd249ZnVuY3Rpb24oKXtsZXQgcjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcj1yfHwodHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3JlYXRlRWxlbWVudD9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpOm51bGwpLHJ9fSgpLEFuPTY0MDYscT02NDA3LFI9NjQwOCxJbj02NDA5LFNuPTY0MTAsamU9NjQwMixSbj0zNDA0MSxfdD0zMzA3MSxRcz05NzI4LHFzPTk3Mjksc2U9MzU1MyxhZT0zNDA2NyxiZT0zMjg3OSx4ZT0zNTg2Nixwcj0zNDA2OSxLcz0zNDA3MCxKcz0zNDA3MSxacz0zNDA3MixlYT0zNDA3Myx0YT0zNDA3NCxncj0xMDI0MSx5cj0xMDI0MCx2dD0xMDI0MixFdD0xMDI0MyxGbj0zMjg4MixyYT0zMzA4MixuYT0zMzA4MyxpYT0zMzA4NCxvYT0zMzA4NSxzYT0zNDg5MixhYT0zNDg5Myxicj0zMzE3LFBuPTMzMTQsa249MzI4NzgsRG49MzMxNixDbj0zMzE1LE1uPTMyODc3LHVhPTM3NDQzLGNhPTM3NDQxLGZhPTM3NDQwLGxhPTMzMzIxLGRhPTM2NzU2LGhhPTMzMzI1LG1hPTMzMzI2LHBhPTMzMzMwLGdhPTMzMzI5LHlhPTMzMzM4LGJhPTMzMzM3LHhhPTMzMzQwLF9hPTMzMzM5LHZhPTMzMzIzLEVhPTM2NzU3LFRhPTMzMzI3LHdhPTMzMzI4LEFhPTMzMzM2LElhPTMzMzM1LFNhPTMzMzMyLFJhPTMzMzMxLEZhPTMzMzM0LFBhPTMzMzMzLGthPTMyODQ5LERhPTM1OTA1LENhPTM2MTk0LE1hPTM2NzU4LEJhPTM1ODk4LE9hPTM1OTAxLFVhPTM0ODQzLE5hPTM0ODM3LExhPTM2MjIxLHphPTM2MjM5LEdhPTM2MjE1LCRhPTM2MjMzLFdhPTM2MjA5LFZhPTM2MjI3LEhhPTMyODU2LGphPTM1OTA3LFlhPTM2NzU5LFhhPTMyODU1LFFhPTMyODU0LHFhPTMyODU3LEthPTM0ODQyLEphPTM0ODM2LFphPTM2MjIwLGV1PTM2MjM4LHR1PTM2OTc1LHJ1PTM2MjE0LG51PTM2MjMyLGl1PTM2MjI2LG91PTM2MjA4LHN1PTMzMTg5LGF1PTMzMTkwLHV1PTM2MDEyLGN1PTM2MDEzLGZ1PTM1MDU2LHVlPTUxMjAsUz01MTIxLFR0PTUxMjIsa2U9NTEyMyx3dD01MTI0LF9lPTUxMjUsTz01MTI2LEJuPTMyODE5LE9uPTMyODIwLFVuPTMzNjM1LGo9NTEzMSxZZT0zNjE5Myx4cj0zMzY0MCxsdT0zNTg5OSxkdT0zNTkwMixodT0zNjI2OSxtdT0zNDA0MixBdD0zMzMxOSxEZT0zMzMyMCxJdD02NDAzLENlPTM2MjQ0LE1lPTM2MjQ4LHZlPTM2MjQ5O2xldCBfcjtmdW5jdGlvbiBTdChyKXtpZighX3Ipe2NvbnN0IGU9e307ZVtBbl09e3RleHR1cmVGb3JtYXQ6QW4sY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMSwyLDIsNF0sdHlwZTpbUyxqLFllLE9dfSxlW0luXT17dGV4dHVyZUZvcm1hdDpJbixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxLDIsMiw0XSx0eXBlOltTLGosWWUsT119LGVbU25dPXt0ZXh0dXJlRm9ybWF0OlNuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzIsNCw0LDhdLHR5cGU6W1MsaixZZSxPXX0sZVtxXT17dGV4dHVyZUZvcm1hdDpxLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzMsNiw2LDEyLDJdLHR5cGU6W1MsaixZZSxPLFVuXX0sZVtSXT17dGV4dHVyZUZvcm1hdDpSLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsOCw4LDE2LDIsMl0sdHlwZTpbUyxqLFllLE8sQm4sT25dfSxlW2plXT17dGV4dHVyZUZvcm1hdDpqZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyLDRdLHR5cGU6W19lLGtlXX0sZVtsYV09e3RleHR1cmVGb3JtYXQ6SXQsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMV0sdHlwZTpbU119LGVbZGFdPXt0ZXh0dXJlRm9ybWF0Okl0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W3VlXX0sZVtoYV09e3RleHR1cmVGb3JtYXQ6SXQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNCwyXSx0eXBlOltPLGpdfSxlW21hXT17dGV4dHVyZUZvcm1hdDpJdCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltPXX0sZVtwYV09e3RleHR1cmVGb3JtYXQ6Q2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMV0sdHlwZTpbU119LGVbZ2FdPXt0ZXh0dXJlRm9ybWF0OkNlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W3VlXX0sZVtTYV09e3RleHR1cmVGb3JtYXQ6Q2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpba2VdfSxlW1JhXT17dGV4dHVyZUZvcm1hdDpDZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltUdF19LGVbRmFdPXt0ZXh0dXJlRm9ybWF0OkNlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W19lXX0sZVtQYV09e3RleHR1cmVGb3JtYXQ6Q2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbd3RdfSxlW3ZhXT17dGV4dHVyZUZvcm1hdDpBdCxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltTXX0sZVtFYV09e3RleHR1cmVGb3JtYXQ6QXQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbdWVdfSxlW1RhXT17dGV4dHVyZUZvcm1hdDpBdCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols4LDRdLHR5cGU6W08sal19LGVbd2FdPXt0ZXh0dXJlRm9ybWF0OkF0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W09dfSxlW0FhXT17dGV4dHVyZUZvcm1hdDpEZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltTXX0sZVtJYV09e3RleHR1cmVGb3JtYXQ6RGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbdWVdfSxlW3lhXT17dGV4dHVyZUZvcm1hdDpEZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltrZV19LGVbYmFdPXt0ZXh0dXJlRm9ybWF0OkRlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W1R0XX0sZVt4YV09e3RleHR1cmVGb3JtYXQ6RGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbX2VdfSxlW19hXT17dGV4dHVyZUZvcm1hdDpEZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOlt3dF19LGVba2FdPXt0ZXh0dXJlRm9ybWF0OnEsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbU119LGVbRGFdPXt0ZXh0dXJlRm9ybWF0OnEsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbU119LGVbQ2FdPXt0ZXh0dXJlRm9ybWF0OnEsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMywyXSx0eXBlOltTLFVuXX0sZVtNYV09e3RleHR1cmVGb3JtYXQ6cSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlszXSx0eXBlOlt1ZV19LGVbQmFdPXt0ZXh0dXJlRm9ybWF0OnEsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTIsNiw0XSx0eXBlOltPLGosbHVdfSxlW09hXT17dGV4dHVyZUZvcm1hdDpxLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEyLDYsNF0sdHlwZTpbTyxqLGR1XX0sZVtVYV09e3RleHR1cmVGb3JtYXQ6cSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxMiw2XSx0eXBlOltPLGpdfSxlW05hXT17dGV4dHVyZUZvcm1hdDpxLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOltPXX0sZVtMYV09e3RleHR1cmVGb3JtYXQ6TWUsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbU119LGVbemFdPXt0ZXh0dXJlRm9ybWF0Ok1lLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W3VlXX0sZVtHYV09e3RleHR1cmVGb3JtYXQ6TWUsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNl0sdHlwZTpba2VdfSxlWyRhXT17dGV4dHVyZUZvcm1hdDpNZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols2XSx0eXBlOltUdF19LGVbV2FdPXt0ZXh0dXJlRm9ybWF0Ok1lLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOltfZV19LGVbVmFdPXt0ZXh0dXJlRm9ybWF0Ok1lLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOlt3dF19LGVbSGFdPXt0ZXh0dXJlRm9ybWF0OlIsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbU119LGVbamFdPXt0ZXh0dXJlRm9ybWF0OlIsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbU119LGVbWWFdPXt0ZXh0dXJlRm9ybWF0OlIsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbdWVdfSxlW1hhXT17dGV4dHVyZUZvcm1hdDpSLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsMiw0XSx0eXBlOltTLE9uLHhyXX0sZVtRYV09e3RleHR1cmVGb3JtYXQ6Uixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDJdLHR5cGU6W1MsQm5dfSxlW3FhXT17dGV4dHVyZUZvcm1hdDpSLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W3hyXX0sZVtLYV09e3RleHR1cmVGb3JtYXQ6Uixjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxNiw4XSx0eXBlOltPLGpdfSxlW0phXT17dGV4dHVyZUZvcm1hdDpSLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOltPXX0sZVtaYV09e3RleHR1cmVGb3JtYXQ6dmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbU119LGVbZXVdPXt0ZXh0dXJlRm9ybWF0OnZlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W3VlXX0sZVt0dV09e3RleHR1cmVGb3JtYXQ6dmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbeHJdfSxlW3J1XT17dGV4dHVyZUZvcm1hdDp2ZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltrZV19LGVbbnVdPXt0ZXh0dXJlRm9ybWF0OnZlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W1R0XX0sZVtpdV09e3RleHR1cmVGb3JtYXQ6dmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMTZdLHR5cGU6W3d0XX0sZVtvdV09e3RleHR1cmVGb3JtYXQ6dmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMTZdLHR5cGU6W19lXX0sZVtzdV09e3RleHR1cmVGb3JtYXQ6amUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMiw0XSx0eXBlOltrZSxfZV19LGVbYXVdPXt0ZXh0dXJlRm9ybWF0OmplLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W19lXX0sZVt1dV09e3RleHR1cmVGb3JtYXQ6amUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbT119LGVbZnVdPXt0ZXh0dXJlRm9ybWF0OlJuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W211XX0sZVtjdV09e3RleHR1cmVGb3JtYXQ6Um4sY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbaHVdfSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2NvbnN0IG49ZVt0XTtuLmJ5dGVzUGVyRWxlbWVudE1hcD17fSxuLmJ5dGVzUGVyRWxlbWVudC5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7Y29uc3Qgcz1uLnR5cGVbb107bi5ieXRlc1BlckVsZW1lbnRNYXBbc109aX0pfSksX3I9ZX1yZXR1cm4gX3Jbcl19ZnVuY3Rpb24gcHUocixlKXtjb25zdCB0PVN0KHIpO2lmKCF0KXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0Ijtjb25zdCBuPXQuYnl0ZXNQZXJFbGVtZW50TWFwW2VdO2lmKG49PT12b2lkIDApdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybiBufWZ1bmN0aW9uIFhlKHIpe2NvbnN0IGU9U3Qocik7aWYoIWUpdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybntmb3JtYXQ6ZS50ZXh0dXJlRm9ybWF0LHR5cGU6ZS50eXBlWzBdfX1mdW5jdGlvbiBObihyKXtyZXR1cm4ociZyLTEpPT09MH1mdW5jdGlvbiBndShyLGUsdCxuKXtpZighVmUocikpcmV0dXJuIE5uKGUpJiZObih0KTtjb25zdCBpPVN0KG4pO2lmKCFpKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm4gaS5jb2xvclJlbmRlcmFibGUmJmkudGV4dHVyZUZpbHRlcmFibGV9ZnVuY3Rpb24geXUocil7Y29uc3QgZT1TdChyKTtpZighZSl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7cmV0dXJuIGUudGV4dHVyZUZpbHRlcmFibGV9ZnVuY3Rpb24gYnUocixlLHQpe3JldHVybiBIZShlKT9scihlKTp0fHxTfWZ1bmN0aW9uIFJ0KHIsZSx0LG4saSl7aWYoaSUxIT09MCl0aHJvdyJjYW4ndCBndWVzcyBkaW1lbnNpb25zIjtpZighdCYmIW4pe2NvbnN0IG89TWF0aC5zcXJ0KGkvKGU9PT1hZT82OjEpKTtvJTE9PT0wPyh0PW8sbj1vKToodD1pLG49MSl9ZWxzZSBpZihuKXtpZighdCYmKHQ9aS9uLHQlMSkpdGhyb3ciY2FuJ3QgZ3Vlc3MgZGltZW5zaW9ucyJ9ZWxzZSBpZihuPWkvdCxuJTEpdGhyb3ciY2FuJ3QgZ3Vlc3MgZGltZW5zaW9ucyI7cmV0dXJue3dpZHRoOnQsaGVpZ2h0Om59fWZ1bmN0aW9uIEJlKHIsZSl7ZS5jb2xvcnNwYWNlQ29udmVyc2lvbiE9PXZvaWQgMCYmci5waXhlbFN0b3JlaSh1YSxlLmNvbG9yc3BhY2VDb252ZXJzaW9uKSxlLnByZW11bHRpcGx5QWxwaGEhPT12b2lkIDAmJnIucGl4ZWxTdG9yZWkoY2EsZS5wcmVtdWx0aXBseUFscGhhKSxlLmZsaXBZIT09dm9pZCAwJiZyLnBpeGVsU3RvcmVpKGZhLGUuZmxpcFkpfWZ1bmN0aW9uIExuKHIpe3IucGl4ZWxTdG9yZWkoYnIsNCksVmUocikmJihyLnBpeGVsU3RvcmVpKFBuLDApLHIucGl4ZWxTdG9yZWkoa24sMCksci5waXhlbFN0b3JlaShEbiwwKSxyLnBpeGVsU3RvcmVpKENuLDApLHIucGl4ZWxTdG9yZWkoTW4sMCkpfWZ1bmN0aW9uIHh1KHIsZSx0LG4pe24ubWluTWFnJiYodC5jYWxsKHIsZSxncixuLm1pbk1hZyksdC5jYWxsKHIsZSx5cixuLm1pbk1hZykpLG4ubWluJiZ0LmNhbGwocixlLGdyLG4ubWluKSxuLm1hZyYmdC5jYWxsKHIsZSx5cixuLm1hZyksbi53cmFwJiYodC5jYWxsKHIsZSx2dCxuLndyYXApLHQuY2FsbChyLGUsRXQsbi53cmFwKSwoZT09PWJlfHxBcyhyLGUpKSYmdC5jYWxsKHIsZSxGbixuLndyYXApKSxuLndyYXBSJiZ0LmNhbGwocixlLEZuLG4ud3JhcFIpLG4ud3JhcFMmJnQuY2FsbChyLGUsdnQsbi53cmFwUyksbi53cmFwVCYmdC5jYWxsKHIsZSxFdCxuLndyYXBUKSxuLm1pbkxvZCE9PXZvaWQgMCYmdC5jYWxsKHIsZSxyYSxuLm1pbkxvZCksbi5tYXhMb2QhPT12b2lkIDAmJnQuY2FsbChyLGUsbmEsbi5tYXhMb2QpLG4uYmFzZUxldmVsIT09dm9pZCAwJiZ0LmNhbGwocixlLGlhLG4uYmFzZUxldmVsKSxuLm1heExldmVsIT09dm9pZCAwJiZ0LmNhbGwocixlLG9hLG4ubWF4TGV2ZWwpLG4uY29tcGFyZUZ1bmMhPT12b2lkIDAmJnQuY2FsbChyLGUsYWEsbi5jb21wYXJlRnVuYyksbi5jb21wYXJlTW9kZSE9PXZvaWQgMCYmdC5jYWxsKHIsZSxzYSxuLmNvbXBhcmVNb2RlKX1mdW5jdGlvbiB6bihyLGUsdCl7Y29uc3Qgbj10LnRhcmdldHx8c2U7ci5iaW5kVGV4dHVyZShuLGUpLHh1KHIsbixyLnRleFBhcmFtZXRlcmksdCl9ZnVuY3Rpb24gX3Uocil7cmV0dXJuIHI9cnx8b2UudGV4dHVyZUNvbG9yLEhlKHIpP3I6bmV3IFVpbnQ4QXJyYXkoW3JbMF0qMjU1LHJbMV0qMjU1LHJbMl0qMjU1LHJbM10qMjU1XSl9ZnVuY3Rpb24gdnIocixlLHQsbixpLG8pe3Q9dHx8b2UudGV4dHVyZU9wdGlvbnMsbz1vfHxSO2NvbnN0IHM9dC50YXJnZXR8fHNlO2lmKG49bnx8dC53aWR0aCxpPWl8fHQuaGVpZ2h0LHIuYmluZFRleHR1cmUocyxlKSxndShyLG4saSxvKSlyLmdlbmVyYXRlTWlwbWFwKHMpO2Vsc2V7Y29uc3QgYT15dShvKT9xczpRcztyLnRleFBhcmFtZXRlcmkocyxncixhKSxyLnRleFBhcmFtZXRlcmkocyx5cixhKSxyLnRleFBhcmFtZXRlcmkocyx2dCxfdCksci50ZXhQYXJhbWV0ZXJpKHMsRXQsX3QpfX1mdW5jdGlvbiBRZShyKXtyZXR1cm4gci5hdXRvPT09ITB8fHIuYXV0bz09PXZvaWQgMCYmci5sZXZlbD09PXZvaWQgMH1mdW5jdGlvbiBFcihyLGUpe3JldHVybiBlPWV8fHt9LGUuY3ViZUZhY2VPcmRlcnx8W3ByLEtzLEpzLFpzLGVhLHRhXX1mdW5jdGlvbiBUcihyLGUpe2NvbnN0IG49RXIocixlKS5tYXAoZnVuY3Rpb24oaSxvKXtyZXR1cm57ZmFjZTppLG5keDpvfX0pO3JldHVybiBuLnNvcnQoZnVuY3Rpb24oaSxvKXtyZXR1cm4gaS5mYWNlLW8uZmFjZX0pLG59ZnVuY3Rpb24gR24ocixlLHQsbil7bj1ufHxvZS50ZXh0dXJlT3B0aW9ucztjb25zdCBpPW4udGFyZ2V0fHxzZSxvPW4ubGV2ZWx8fDA7bGV0IHM9dC53aWR0aCxhPXQuaGVpZ2h0O2NvbnN0IHU9bi5pbnRlcm5hbEZvcm1hdHx8bi5mb3JtYXR8fFIsZj1YZSh1KSxkPW4uZm9ybWF0fHxmLmZvcm1hdCxwPW4udHlwZXx8Zi50eXBlO2lmKEJlKHIsbiksci5iaW5kVGV4dHVyZShpLGUpLGk9PT1hZSl7Y29uc3QgZz10LndpZHRoLGI9dC5oZWlnaHQ7bGV0IGgseDtpZihnLzY9PT1iKWg9Yix4PVswLDAsMSwwLDIsMCwzLDAsNCwwLDUsMF07ZWxzZSBpZihiLzY9PT1nKWg9Zyx4PVswLDAsMCwxLDAsMiwwLDMsMCw0LDAsNV07ZWxzZSBpZihnLzM9PT1iLzIpaD1nLzMseD1bMCwwLDEsMCwyLDAsMCwxLDEsMSwyLDFdO2Vsc2UgaWYoZy8yPT09Yi8zKWg9Zy8yLHg9WzAsMCwxLDAsMCwxLDEsMSwwLDIsMSwyXTtlbHNlIHRocm93ImNhbid0IGZpZ3VyZSBvdXQgY3ViZSBtYXAgZnJvbSBlbGVtZW50OiAiKyh0LnNyYz90LnNyYzp0Lm5vZGVOYW1lKTtjb25zdCBFPXduKCk7RT8oRS5jYW52YXMud2lkdGg9aCxFLmNhbnZhcy5oZWlnaHQ9aCxzPWgsYT1oLFRyKHIsbikuZm9yRWFjaChmdW5jdGlvbih2KXtjb25zdCBGPXhbdi5uZHgqMiswXSpoLGs9eFt2Lm5keCoyKzFdKmg7RS5kcmF3SW1hZ2UodCxGLGssaCxoLDAsMCxoLGgpLHIudGV4SW1hZ2UyRCh2LmZhY2Usbyx1LGQscCxFLmNhbnZhcyl9KSxFLmNhbnZhcy53aWR0aD0xLEUuY2FudmFzLmhlaWdodD0xKTp0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA8InUiJiYocz1oLGE9aCxUcihyLG4pLmZvckVhY2goZnVuY3Rpb24odil7Y29uc3QgRj14W3YubmR4KjIrMF0qaCxrPXhbdi5uZHgqMisxXSpoO3IudGV4SW1hZ2UyRCh2LmZhY2Usbyx1LGgsaCwwLGQscCxudWxsKSxjcmVhdGVJbWFnZUJpdG1hcCh0LEYsayxoLGgse3ByZW11bHRpcGx5QWxwaGE6Im5vbmUiLGNvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pLnRoZW4oZnVuY3Rpb24oRyl7QmUocixuKSxyLmJpbmRUZXh0dXJlKGksZSksci50ZXhJbWFnZTJEKHYuZmFjZSxvLHUsZCxwLEcpLFFlKG4pJiZ2cihyLGUsbixzLGEsdSl9KX0pKX1lbHNlIGlmKGk9PT1iZXx8aT09PXhlKXtjb25zdCBnPU1hdGgubWluKHQud2lkdGgsdC5oZWlnaHQpLGI9TWF0aC5tYXgodC53aWR0aCx0LmhlaWdodCksaD1iL2c7aWYoaCUxIT09MCl0aHJvdyJjYW4gbm90IGNvbXB1dGUgM0QgZGltZW5zaW9ucyBvZiBlbGVtZW50Ijtjb25zdCB4PXQud2lkdGg9PT1iPzE6MCxFPXQuaGVpZ2h0PT09Yj8xOjA7ci5waXhlbFN0b3JlaShiciwxKSxyLnBpeGVsU3RvcmVpKFBuLHQud2lkdGgpLHIucGl4ZWxTdG9yZWkoa24sMCksci5waXhlbFN0b3JlaShNbiwwKSxyLnRleEltYWdlM0QoaSxvLHUsZyxnLGcsMCxkLHAsbnVsbCk7Zm9yKGxldCB2PTA7djxoOysrdil7Y29uc3QgRj12KmcqeCxrPXYqZypFO3IucGl4ZWxTdG9yZWkoRG4sRiksci5waXhlbFN0b3JlaShDbixrKSxyLnRleFN1YkltYWdlM0QoaSxvLDAsMCx2LGcsZywxLGQscCx0KX1MbihyKX1lbHNlIHIudGV4SW1hZ2UyRChpLG8sdSxkLHAsdCk7UWUobikmJnZyKHIsZSxuLHMsYSx1KSx6bihyLGUsbil9ZnVuY3Rpb24gcWUoKXt9ZnVuY3Rpb24gdnUocil7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iil7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7cmV0dXJuIGUuaHJlZj1yLGUuaG9zdG5hbWU9PT1sb2NhdGlvbi5ob3N0bmFtZSYmZS5wb3J0PT09bG9jYXRpb24ucG9ydCYmZS5wcm90b2NvbD09PWxvY2F0aW9uLnByb3RvY29sfWVsc2V7Y29uc3QgZT1uZXcgVVJMKGxvY2F0aW9uLmhyZWYpLm9yaWdpbjtyZXR1cm4gbmV3IFVSTChyLGxvY2F0aW9uLmhyZWYpLm9yaWdpbj09PWV9fWZ1bmN0aW9uIEV1KHIsZSl7cmV0dXJuIGU9PT12b2lkIDAmJiF2dShyKT8iYW5vbnltb3VzIjplfWZ1bmN0aW9uIFR1KHIsZSx0KXt0PXR8fHFlO2xldCBuO2lmKGU9ZSE9PXZvaWQgMD9lOm9lLmNyb3NzT3JpZ2luLGU9RXUocixlKSx0eXBlb2YgSW1hZ2U8InUiKXtuPW5ldyBJbWFnZSxlIT09dm9pZCAwJiYobi5jcm9zc09yaWdpbj1lKTtjb25zdCBpPWZ1bmN0aW9uKCl7bi5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsbyksbi5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixzKSxuPW51bGx9LG89ZnVuY3Rpb24oKXtjb25zdCB1PSJjb3VsZG4ndCBsb2FkIGltYWdlOiAiK3I7cG4odSksdCh1LG4pLGkoKX0scz1mdW5jdGlvbigpe3QobnVsbCxuKSxpKCl9O3JldHVybiBuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixvKSxuLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHMpLG4uc3JjPXIsbn1lbHNlIGlmKHR5cGVvZiBJbWFnZUJpdG1hcDwidSIpe2xldCBpLG87Y29uc3Qgcz1mdW5jdGlvbigpe3QoaSxvKX0sYT17fTtlJiYoYS5tb2RlPSJjb3JzIiksZmV0Y2gocixhKS50aGVuKGZ1bmN0aW9uKHUpe2lmKCF1Lm9rKXRocm93IHU7cmV0dXJuIHUuYmxvYigpfSkudGhlbihmdW5jdGlvbih1KXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAodSx7cHJlbXVsdGlwbHlBbHBoYToibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSl9KS50aGVuKGZ1bmN0aW9uKHUpe289dSxzZXRUaW1lb3V0KHMpfSkuY2F0Y2goZnVuY3Rpb24odSl7aT11LHNldFRpbWVvdXQocyl9KSxuPW51bGx9cmV0dXJuIG59ZnVuY3Rpb24gJG4ocil7cmV0dXJuIHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJnIgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcHx8dHlwZW9mIEltYWdlRGF0YTwidSImJnIgaW5zdGFuY2VvZiBJbWFnZURhdGF8fHR5cGVvZiBIVE1MRWxlbWVudDwidSImJnIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH1mdW5jdGlvbiB3cihyLGUsdCl7cmV0dXJuICRuKHIpPyhzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dChudWxsLHIpfSkscik6VHUocixlLHQpfWZ1bmN0aW9uIEFyKHIsZSx0KXt0PXR8fG9lLnRleHR1cmVPcHRpb25zO2NvbnN0IG49dC50YXJnZXR8fHNlO2lmKHIuYmluZFRleHR1cmUobixlKSx0LmNvbG9yPT09ITEpcmV0dXJuO2NvbnN0IGk9X3UodC5jb2xvcik7aWYobj09PWFlKWZvcihsZXQgbz0wO288NjsrK28pci50ZXhJbWFnZTJEKHByK28sMCxSLDEsMSwwLFIsUyxpKTtlbHNlIG49PT1iZXx8bj09PXhlP3IudGV4SW1hZ2UzRChuLDAsUiwxLDEsMSwwLFIsUyxpKTpyLnRleEltYWdlMkQobiwwLFIsMSwxLDAsUixTLGkpfWZ1bmN0aW9uIHd1KHIsZSx0LG4pe3JldHVybiBuPW58fHFlLHQ9dHx8b2UudGV4dHVyZU9wdGlvbnMsQXIocixlLHQpLHQ9T2JqZWN0LmFzc2lnbih7fSx0KSx3cih0LnNyYyx0LmNyb3NzT3JpZ2luLGZ1bmN0aW9uKG8scyl7bz9uKG8sZSxzKTooR24ocixlLHMsdCksbihudWxsLGUscykpfSl9ZnVuY3Rpb24gQXUocixlLHQsbil7bj1ufHxxZTtjb25zdCBpPXQuc3JjO2lmKGkubGVuZ3RoIT09Nil0aHJvdyJ0aGVyZSBtdXN0IGJlIDYgdXJscyBmb3IgYSBjdWJlbWFwIjtjb25zdCBvPXQubGV2ZWx8fDAscz10LmludGVybmFsRm9ybWF0fHx0LmZvcm1hdHx8UixhPVhlKHMpLHU9dC5mb3JtYXR8fGEuZm9ybWF0LGY9dC50eXBlfHxTLGQ9dC50YXJnZXR8fHNlO2lmKGQhPT1hZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFX0NVQkVfTUFQIjtBcihyLGUsdCksdD1PYmplY3QuYXNzaWduKHt9LHQpO2xldCBwPTY7Y29uc3QgZz1bXSxiPUVyKHIsdCk7bGV0IGg7ZnVuY3Rpb24geChFKXtyZXR1cm4gZnVuY3Rpb24odixGKXstLXAsdj9nLnB1c2godik6Ri53aWR0aCE9PUYuaGVpZ2h0P2cucHVzaCgiY3ViZW1hcCBmYWNlIGltZyBpcyBub3QgYSBzcXVhcmU6ICIrRi5zcmMpOihCZShyLHQpLHIuYmluZFRleHR1cmUoZCxlKSxwPT09NT9FcigpLmZvckVhY2goZnVuY3Rpb24oayl7ci50ZXhJbWFnZTJEKGssbyxzLHUsZixGKX0pOnIudGV4SW1hZ2UyRChFLG8scyx1LGYsRiksUWUodCkmJnIuZ2VuZXJhdGVNaXBtYXAoZCkpLHA9PT0wJiZuKGcubGVuZ3RoP2c6dm9pZCAwLGUsaCl9fWg9aS5tYXAoZnVuY3Rpb24oRSx2KXtyZXR1cm4gd3IoRSx0LmNyb3NzT3JpZ2luLHgoYlt2XSkpfSl9ZnVuY3Rpb24gSXUocixlLHQsbil7bj1ufHxxZTtjb25zdCBpPXQuc3JjLG89dC5pbnRlcm5hbEZvcm1hdHx8dC5mb3JtYXR8fFIscz1YZShvKSxhPXQuZm9ybWF0fHxzLmZvcm1hdCx1PXQudHlwZXx8UyxmPXQudGFyZ2V0fHx4ZTtpZihmIT09YmUmJmYhPT14ZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFXzNEIG9yIFRFWFRVUkVfMkRfQVJSQVkiO0FyKHIsZSx0KSx0PU9iamVjdC5hc3NpZ24oe30sdCk7bGV0IGQ9aS5sZW5ndGg7Y29uc3QgcD1bXTtsZXQgZztjb25zdCBiPXQubGV2ZWx8fDA7bGV0IGg9dC53aWR0aCx4PXQuaGVpZ2h0O2NvbnN0IEU9aS5sZW5ndGg7bGV0IHY9ITA7ZnVuY3Rpb24gRihrKXtyZXR1cm4gZnVuY3Rpb24oRyx6KXtpZigtLWQsRylwLnB1c2goRyk7ZWxzZXtpZihCZShyLHQpLHIuYmluZFRleHR1cmUoZixlKSx2KXt2PSExLGg9dC53aWR0aHx8ei53aWR0aCx4PXQuaGVpZ2h0fHx6LmhlaWdodCxyLnRleEltYWdlM0QoZixiLG8saCx4LEUsMCxhLHUsbnVsbCk7Zm9yKGxldCBIPTA7SDxFOysrSClyLnRleFN1YkltYWdlM0QoZixiLDAsMCxILGgseCwxLGEsdSx6KX1lbHNle2xldCBIPXosJDsoei53aWR0aCE9PWh8fHouaGVpZ2h0IT09eCkmJigkPXduKCksSD0kLmNhbnZhcywkLmNhbnZhcy53aWR0aD1oLCQuY2FudmFzLmhlaWdodD14LCQuZHJhd0ltYWdlKHosMCwwLGgseCkpLHIudGV4U3ViSW1hZ2UzRChmLGIsMCwwLGssaCx4LDEsYSx1LEgpLCQmJkg9PT0kLmNhbnZhcyYmKCQuY2FudmFzLndpZHRoPTAsJC5jYW52YXMuaGVpZ2h0PTApfVFlKHQpJiZyLmdlbmVyYXRlTWlwbWFwKGYpfWQ9PT0wJiZuKHAubGVuZ3RoP3A6dm9pZCAwLGUsZyl9fWc9aS5tYXAoZnVuY3Rpb24oayxHKXtyZXR1cm4gd3Ioayx0LmNyb3NzT3JpZ2luLEYoRykpfSl9ZnVuY3Rpb24gU3UocixlLHQsbil7bj1ufHxvZS50ZXh0dXJlT3B0aW9ucztjb25zdCBpPW4udGFyZ2V0fHxzZTtyLmJpbmRUZXh0dXJlKGksZSk7bGV0IG89bi53aWR0aCxzPW4uaGVpZ2h0LGE9bi5kZXB0aDtjb25zdCB1PW4ubGV2ZWx8fDAsZj1uLmludGVybmFsRm9ybWF0fHxuLmZvcm1hdHx8UixkPVhlKGYpLHA9bi5mb3JtYXR8fGQuZm9ybWF0LGc9bi50eXBlfHxidShyLHQsZC50eXBlKTtpZihIZSh0KSl0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkmJih0PW5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSk7ZWxzZXtjb25zdCBFPW1uKGcpO3Q9bmV3IEUodCl9Y29uc3QgYj1wdShmLGcpLGg9dC5ieXRlTGVuZ3RoL2I7aWYoaCUxKXRocm93Imxlbmd0aCB3cm9uZyBzaXplIGZvciBmb3JtYXQ6ICIrVG4ocixwKTtsZXQgeDtpZihpPT09YmV8fGk9PT14ZSlpZighbyYmIXMmJiFhKXtjb25zdCBFPU1hdGguY2JydChoKTtpZihFJTEhPT0wKXRocm93ImNhbid0IGd1ZXNzIGN1YmUgc2l6ZSBvZiBhcnJheSBvZiBudW1FbGVtZW50czogIitoO289RSxzPUUsYT1FfWVsc2UgbyYmKCFzfHwhYSk/KHg9UnQocixpLHMsYSxoL28pLHM9eC53aWR0aCxhPXguaGVpZ2h0KTpzJiYoIW98fCFhKT8oeD1SdChyLGksbyxhLGgvcyksbz14LndpZHRoLGE9eC5oZWlnaHQpOih4PVJ0KHIsaSxvLHMsaC9hKSxvPXgud2lkdGgscz14LmhlaWdodCk7ZWxzZSB4PVJ0KHIsaSxvLHMsaCksbz14LndpZHRoLHM9eC5oZWlnaHQ7aWYoTG4ociksci5waXhlbFN0b3JlaShicixuLnVucGFja0FsaWdubWVudHx8MSksQmUocixuKSxpPT09YWUpe2NvbnN0IEU9Yi90LkJZVEVTX1BFUl9FTEVNRU5ULHY9aC82KkU7VHIocixuKS5mb3JFYWNoKEY9Pntjb25zdCBrPXYqRi5uZHgsRz10LnN1YmFycmF5KGssayt2KTtyLnRleEltYWdlMkQoRi5mYWNlLHUsZixvLHMsMCxwLGcsRyl9KX1lbHNlIGk9PT1iZXx8aT09PXhlP3IudGV4SW1hZ2UzRChpLHUsZixvLHMsYSwwLHAsZyx0KTpyLnRleEltYWdlMkQoaSx1LGYsbyxzLDAscCxnLHQpO3JldHVybnt3aWR0aDpvLGhlaWdodDpzLGRlcHRoOmEsdHlwZTpnfX1mdW5jdGlvbiBSdShyLGUsdCl7Y29uc3Qgbj10LnRhcmdldHx8c2U7ci5iaW5kVGV4dHVyZShuLGUpO2NvbnN0IGk9dC5sZXZlbHx8MCxvPXQuaW50ZXJuYWxGb3JtYXR8fHQuZm9ybWF0fHxSLHM9WGUobyksYT10LmZvcm1hdHx8cy5mb3JtYXQsdT10LnR5cGV8fHMudHlwZTtpZihCZShyLHQpLG49PT1hZSlmb3IobGV0IGY9MDtmPDY7KytmKXIudGV4SW1hZ2UyRChwcitmLGksbyx0LndpZHRoLHQuaGVpZ2h0LDAsYSx1LG51bGwpO2Vsc2Ugbj09PWJlfHxuPT09eGU/ci50ZXhJbWFnZTNEKG4saSxvLHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCwwLGEsdSxudWxsKTpyLnRleEltYWdlMkQobixpLG8sdC53aWR0aCx0LmhlaWdodCwwLGEsdSxudWxsKX1mdW5jdGlvbiBXbihyLGUsdCl7dD10fHxxZSxlPWV8fG9lLnRleHR1cmVPcHRpb25zO2NvbnN0IG49ci5jcmVhdGVUZXh0dXJlKCksaT1lLnRhcmdldHx8c2U7bGV0IG89ZS53aWR0aHx8MSxzPWUuaGVpZ2h0fHwxO2NvbnN0IGE9ZS5pbnRlcm5hbEZvcm1hdHx8UjtyLmJpbmRUZXh0dXJlKGksbiksaT09PWFlJiYoci50ZXhQYXJhbWV0ZXJpKGksdnQsX3QpLHIudGV4UGFyYW1ldGVyaShpLEV0LF90KSk7bGV0IHU9ZS5zcmM7aWYodSlpZih0eXBlb2YgdT09ImZ1bmN0aW9uIiYmKHU9dShyLGUpKSx0eXBlb2YgdT09InN0cmluZyIpd3UocixuLGUsdCk7ZWxzZSBpZihIZSh1KXx8QXJyYXkuaXNBcnJheSh1KSYmKHR5cGVvZiB1WzBdPT0ibnVtYmVyInx8QXJyYXkuaXNBcnJheSh1WzBdKXx8SGUodVswXSkpKXtjb25zdCBmPVN1KHIsbix1LGUpO289Zi53aWR0aCxzPWYuaGVpZ2h0fWVsc2UgQXJyYXkuaXNBcnJheSh1KSYmKHR5cGVvZiB1WzBdPT0ic3RyaW5nInx8JG4odVswXSkpP2k9PT1hZT9BdShyLG4sZSx0KTpJdShyLG4sZSx0KTooR24ocixuLHUsZSksbz11LndpZHRoLHM9dS5oZWlnaHQpO2Vsc2UgUnUocixuLGUpO3JldHVybiBRZShlKSYmdnIocixuLGUsbyxzLGEpLHpuKHIsbixlKSxufWNvbnN0IElyPXBuO2Z1bmN0aW9uIFZuKHIpe3JldHVybiB0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5nZXRFbGVtZW50QnlJZD9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChyKTpudWxsfWNvbnN0IEZ0PTMzOTg0LFB0PTM0OTYyLEZ1PTM0OTYzLFB1PTM1NzEzLGt1PTM1NzE0LER1PTM1NjMyLEN1PTM1NjMzLE11PTM1OTgxLEhuPTM1NzE4LEJ1PTM1NzIxLE91PTM1OTcxLFV1PTM1MzgyLE51PTM1Mzk2LEx1PTM1Mzk4LHp1PTM1MzkyLEd1PTM1Mzk1LGt0PTUxMjYsam49MzU2NjQsWW49MzU2NjUsWG49MzU2NjYsU3I9NTEyNCxRbj0zNTY2Nyxxbj0zNTY2OCxLbj0zNTY2OSxKbj0zNTY3MCxabj0zNTY3MSxlaT0zNTY3Mix0aT0zNTY3MyxyaT0zNTY3NCxuaT0zNTY3NSxpaT0zNTY3NiwkdT0zNTY3OCxXdT0zNTY4MCxWdT0zNTY3OSxIdT0zNTY4MixqdT0zNTY4NSxZdT0zNTY4NixYdT0zNTY4NyxRdT0zNTY4OCxxdT0zNTY4OSxLdT0zNTY5MCxKdT0zNjI4OSxadT0zNjI5MixlYz0zNjI5MyxScj01MTI1LG9pPTM2Mjk0LHNpPTM2Mjk1LGFpPTM2Mjk2LHRjPTM2Mjk4LHJjPTM2Mjk5LG5jPTM2MzAwLGljPTM2MzAzLG9jPTM2MzA2LHNjPTM2MzA3LGFjPTM2MzA4LHVjPTM2MzExLER0PTM1NTMsQ3Q9MzQwNjcsRnI9MzI4NzksTXQ9MzU4NjYsXz17fTtmdW5jdGlvbiB1aShyLGUpe3JldHVybiBfW2VdLmJpbmRQb2ludH1mdW5jdGlvbiBjYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xZihlLHQpfX1mdW5jdGlvbiBmYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xZnYoZSx0KX19ZnVuY3Rpb24gbGMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMmZ2KGUsdCl9fWZ1bmN0aW9uIGRjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTNmdihlLHQpfX1mdW5jdGlvbiBoYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm00ZnYoZSx0KX19ZnVuY3Rpb24gY2kocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWkoZSx0KX19ZnVuY3Rpb24gZmkocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWl2KGUsdCl9fWZ1bmN0aW9uIGxpKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTJpdihlLHQpfX1mdW5jdGlvbiBkaShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0zaXYoZSx0KX19ZnVuY3Rpb24gaGkocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtNGl2KGUsdCl9fWZ1bmN0aW9uIG1jKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTF1aShlLHQpfX1mdW5jdGlvbiBwYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xdWl2KGUsdCl9fWZ1bmN0aW9uIGdjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTJ1aXYoZSx0KX19ZnVuY3Rpb24geWMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtM3VpdihlLHQpfX1mdW5jdGlvbiBiYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm00dWl2KGUsdCl9fWZ1bmN0aW9uIHhjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJmdihlLCExLHQpfX1mdW5jdGlvbiBfYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgzZnYoZSwhMSx0KX19ZnVuY3Rpb24gdmMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIEVjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJ4M2Z2KGUsITEsdCl9fWZ1bmN0aW9uIFRjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDN4MmZ2KGUsITEsdCl9fWZ1bmN0aW9uIHdjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJ4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIEFjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDR4MmZ2KGUsITEsdCl9fWZ1bmN0aW9uIEljKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDN4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIFNjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDR4M2Z2KGUsITEsdCl9fWZ1bmN0aW9uIE4ocixlLHQsbil7Y29uc3QgaT11aShyLGUpO3JldHVybiBWZShyKT9mdW5jdGlvbihvKXtsZXQgcyxhOyFvfHxkcihyLG8pPyhzPW8sYT1udWxsKToocz1vLnRleHR1cmUsYT1vLnNhbXBsZXIpLHIudW5pZm9ybTFpKG4sdCksci5hY3RpdmVUZXh0dXJlKEZ0K3QpLHIuYmluZFRleHR1cmUoaSxzKSxyLmJpbmRTYW1wbGVyKHQsYSl9OmZ1bmN0aW9uKG8pe3IudW5pZm9ybTFpKG4sdCksci5hY3RpdmVUZXh0dXJlKEZ0K3QpLHIuYmluZFRleHR1cmUoaSxvKX19ZnVuY3Rpb24gTChyLGUsdCxuLGkpe2NvbnN0IG89dWkocixlKSxzPW5ldyBJbnQzMkFycmF5KGkpO2ZvcihsZXQgYT0wO2E8aTsrK2Epc1thXT10K2E7cmV0dXJuIFZlKHIpP2Z1bmN0aW9uKGEpe3IudW5pZm9ybTFpdihuLHMpLGEuZm9yRWFjaChmdW5jdGlvbih1LGYpe3IuYWN0aXZlVGV4dHVyZShGdCtzW2ZdKTtsZXQgZCxwOyF1fHxkcihyLHUpPyhkPXUscD1udWxsKTooZD11LnRleHR1cmUscD11LnNhbXBsZXIpLHIuYmluZFNhbXBsZXIodCxwKSxyLmJpbmRUZXh0dXJlKG8sZCl9KX06ZnVuY3Rpb24oYSl7ci51bmlmb3JtMWl2KG4scyksYS5mb3JFYWNoKGZ1bmN0aW9uKHUsZil7ci5hY3RpdmVUZXh0dXJlKEZ0K3NbZl0pLHIuYmluZFRleHR1cmUobyx1KX0pfX1fW2t0XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0LHNldHRlcjpjYyxhcnJheVNldHRlcjpmY30sX1tqbl09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6OCxzZXR0ZXI6bGMsY29sczoyfSxfW1luXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6ZGMsY29sczozfSxfW1huXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6aGMsY29sczo0fSxfW1NyXT17VHlwZTpJbnQzMkFycmF5LHNpemU6NCxzZXR0ZXI6Y2ksYXJyYXlTZXR0ZXI6Zml9LF9bUW5dPXtUeXBlOkludDMyQXJyYXksc2l6ZTo4LHNldHRlcjpsaSxjb2xzOjJ9LF9bcW5dPXtUeXBlOkludDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6ZGksY29sczozfSxfW0tuXT17VHlwZTpJbnQzMkFycmF5LHNpemU6MTYsc2V0dGVyOmhpLGNvbHM6NH0sX1tScl09e1R5cGU6VWludDMyQXJyYXksc2l6ZTo0LHNldHRlcjptYyxhcnJheVNldHRlcjpwY30sX1tvaV09e1R5cGU6VWludDMyQXJyYXksc2l6ZTo4LHNldHRlcjpnYyxjb2xzOjJ9LF9bc2ldPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6MTIsc2V0dGVyOnljLGNvbHM6M30sX1thaV09e1R5cGU6VWludDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6YmMsY29sczo0fSxfW0puXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjQsc2V0dGVyOmNpLGFycmF5U2V0dGVyOmZpfSxfW1puXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjgsc2V0dGVyOmxpLGNvbHM6Mn0sX1tlaV09e1R5cGU6VWludDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6ZGksY29sczozfSxfW3RpXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjE2LHNldHRlcjpoaSxjb2xzOjR9LF9bcmldPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjMyLHNldHRlcjp4Yyxyb3dzOjIsY29sczoyfSxfW25pXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0OCxzZXR0ZXI6X2Mscm93czozLGNvbHM6M30sX1tpaV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NjQsc2V0dGVyOnZjLHJvd3M6NCxjb2xzOjR9LF9banVdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjMyLHNldHRlcjpFYyxyb3dzOjIsY29sczozfSxfW1l1XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTozMixzZXR0ZXI6d2Mscm93czoyLGNvbHM6NH0sX1tYdV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NDgsc2V0dGVyOlRjLHJvd3M6Myxjb2xzOjJ9LF9bUXVdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQ4LHNldHRlcjpJYyxyb3dzOjMsY29sczo0fSxfW3F1XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6QWMscm93czo0LGNvbHM6Mn0sX1tLdV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NjQsc2V0dGVyOlNjLHJvd3M6NCxjb2xzOjN9LF9bJHVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpOLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OkR0fSxfW1d1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TixhcnJheVNldHRlcjpMLGJpbmRQb2ludDpDdH0sX1tWdV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOk4sYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6RnJ9LF9bSHVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpOLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OkR0fSxfW0p1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TixhcnJheVNldHRlcjpMLGJpbmRQb2ludDpNdH0sX1tadV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOk4sYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6TXR9LF9bZWNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpOLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OkN0fSxfW3RjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TixhcnJheVNldHRlcjpMLGJpbmRQb2ludDpEdH0sX1tyY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOk4sYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6RnJ9LF9bbmNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpOLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OkN0fSxfW2ljXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TixhcnJheVNldHRlcjpMLGJpbmRQb2ludDpNdH0sX1tvY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOk4sYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6RHR9LF9bc2NdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpOLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OkZyfSxfW2FjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TixhcnJheVNldHRlcjpMLGJpbmRQb2ludDpDdH0sX1t1Y109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOk4sYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6TXR9O2Z1bmN0aW9uIEJ0KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHQudmFsdWUpc3dpdGNoKHIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHQudmFsdWUubGVuZ3RoKXtjYXNlIDQ6ci52ZXJ0ZXhBdHRyaWI0ZnYoZSx0LnZhbHVlKTticmVhaztjYXNlIDM6ci52ZXJ0ZXhBdHRyaWIzZnYoZSx0LnZhbHVlKTticmVhaztjYXNlIDI6ci52ZXJ0ZXhBdHRyaWIyZnYoZSx0LnZhbHVlKTticmVhaztjYXNlIDE6ci52ZXJ0ZXhBdHRyaWIxZnYoZSx0LnZhbHVlKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidGhlIGxlbmd0aCBvZiBhIGZsb2F0IGNvbnN0YW50IHZhbHVlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA0ISIpfWVsc2Ugci5iaW5kQnVmZmVyKFB0LHQuYnVmZmVyKSxyLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHIudmVydGV4QXR0cmliUG9pbnRlcihlLHQubnVtQ29tcG9uZW50c3x8dC5zaXplLHQudHlwZXx8a3QsdC5ub3JtYWxpemV8fCExLHQuc3RyaWRlfHwwLHQub2Zmc2V0fHwwKSxyLnZlcnRleEF0dHJpYkRpdmlzb3ImJnIudmVydGV4QXR0cmliRGl2aXNvcihlLHQuZGl2aXNvcnx8MCl9fWZ1bmN0aW9uIGNlKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHQudmFsdWUpaWYoci5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZSksdC52YWx1ZS5sZW5ndGg9PT00KXIudmVydGV4QXR0cmliNGl2KGUsdC52YWx1ZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlRoZSBsZW5ndGggb2YgYW4gaW50ZWdlciBjb25zdGFudCB2YWx1ZSBtdXN0IGJlIDQhIik7ZWxzZSByLmJpbmRCdWZmZXIoUHQsdC5idWZmZXIpLHIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihlLHQubnVtQ29tcG9uZW50c3x8dC5zaXplLHQudHlwZXx8U3IsdC5zdHJpZGV8fDAsdC5vZmZzZXR8fDApLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUsdC5kaXZpc29yfHwwKX19ZnVuY3Rpb24gT3QocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYodC52YWx1ZSlpZihyLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSx0LnZhbHVlLmxlbmd0aD09PTQpci52ZXJ0ZXhBdHRyaWI0dWl2KGUsdC52YWx1ZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlRoZSBsZW5ndGggb2YgYW4gdW5zaWduZWQgaW50ZWdlciBjb25zdGFudCB2YWx1ZSBtdXN0IGJlIDQhIik7ZWxzZSByLmJpbmRCdWZmZXIoUHQsdC5idWZmZXIpLHIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihlLHQubnVtQ29tcG9uZW50c3x8dC5zaXplLHQudHlwZXx8UnIsdC5zdHJpZGV8fDAsdC5vZmZzZXR8fDApLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUsdC5kaXZpc29yfHwwKX19ZnVuY3Rpb24gUHIocixlLHQpe2NvbnN0IG49dC5zaXplLGk9dC5jb3VudDtyZXR1cm4gZnVuY3Rpb24obyl7ci5iaW5kQnVmZmVyKFB0LG8uYnVmZmVyKTtjb25zdCBzPW8uc2l6ZXx8by5udW1Db21wb25lbnRzfHxuLGE9cy9pLHU9by50eXBlfHxrdCxkPV9bdV0uc2l6ZSpzLHA9by5ub3JtYWxpemV8fCExLGc9by5vZmZzZXR8fDAsYj1kL2k7Zm9yKGxldCBoPTA7aDxpOysraClyLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGUraCksci52ZXJ0ZXhBdHRyaWJQb2ludGVyKGUraCxhLHUscCxkLGcrYipoKSxyLnZlcnRleEF0dHJpYkRpdmlzb3ImJnIudmVydGV4QXR0cmliRGl2aXNvcihlK2gsby5kaXZpc29yfHwwKX19Y29uc3QgUD17fTtQW2t0XT17c2l6ZTo0LHNldHRlcjpCdH0sUFtqbl09e3NpemU6OCxzZXR0ZXI6QnR9LFBbWW5dPXtzaXplOjEyLHNldHRlcjpCdH0sUFtYbl09e3NpemU6MTYsc2V0dGVyOkJ0fSxQW1NyXT17c2l6ZTo0LHNldHRlcjpjZX0sUFtRbl09e3NpemU6OCxzZXR0ZXI6Y2V9LFBbcW5dPXtzaXplOjEyLHNldHRlcjpjZX0sUFtLbl09e3NpemU6MTYsc2V0dGVyOmNlfSxQW1JyXT17c2l6ZTo0LHNldHRlcjpPdH0sUFtvaV09e3NpemU6OCxzZXR0ZXI6T3R9LFBbc2ldPXtzaXplOjEyLHNldHRlcjpPdH0sUFthaV09e3NpemU6MTYsc2V0dGVyOk90fSxQW0puXT17c2l6ZTo0LHNldHRlcjpjZX0sUFtabl09e3NpemU6OCxzZXR0ZXI6Y2V9LFBbZWldPXtzaXplOjEyLHNldHRlcjpjZX0sUFt0aV09e3NpemU6MTYsc2V0dGVyOmNlfSxQW3JpXT17c2l6ZTo0LHNldHRlcjpQcixjb3VudDoyfSxQW25pXT17c2l6ZTo5LHNldHRlcjpQcixjb3VudDozfSxQW2lpXT17c2l6ZToxNixzZXR0ZXI6UHIsY291bnQ6NH07Y29uc3QgUmM9L0VSUk9SOlxzKlxkKzooXGQrKS9naTtmdW5jdGlvbiBGYyhyLGU9IiIsdD0wKXtjb25zdCBuPVsuLi5lLm1hdGNoQWxsKFJjKV0saT1uZXcgTWFwKG4ubWFwKChvLHMpPT57Y29uc3QgYT1wYXJzZUludChvWzFdKSx1PW5bcysxXSxmPXU/dS5pbmRleDplLmxlbmd0aCxkPWUuc3Vic3RyaW5nKG8uaW5kZXgsZik7cmV0dXJuW2EtMSxkXX0pKTtyZXR1cm4gci5zcGxpdChgCmApLm1hcCgobyxzKT0+e2NvbnN0IGE9aS5nZXQocyk7cmV0dXJuYCR7cysxK3R9OiAke299JHthP2AKCl5eXiAke2F9YDoiIn1gfSkuam9pbihgCmApfWNvbnN0IG1pPS9eWyBcdF0qXG4vO2Z1bmN0aW9uIHBpKHIpe2xldCBlPTA7cmV0dXJuIG1pLnRlc3QocikmJihlPTEscj1yLnJlcGxhY2UobWksIiIpKSx7bGluZU9mZnNldDplLHNoYWRlclNvdXJjZTpyfX1mdW5jdGlvbiBQYyhyLGUpe3JldHVybiByLmVycm9yQ2FsbGJhY2soZSksci5jYWxsYmFjayYmc2V0VGltZW91dCgoKT0+e3IuY2FsbGJhY2soYCR7ZX0KJHtyLmVycm9ycy5qb2luKGAKYCl9YCl9KSxudWxsfWZ1bmN0aW9uIGtjKHIsZSx0LG4pe2lmKG49bnx8SXIsIXIuZ2V0U2hhZGVyUGFyYW1ldGVyKHQsUHUpKXtjb25zdCBvPXIuZ2V0U2hhZGVySW5mb0xvZyh0KSx7bGluZU9mZnNldDpzLHNoYWRlclNvdXJjZTphfT1waShyLmdldFNoYWRlclNvdXJjZSh0KSksdT1gJHtGYyhhLG8scyl9CkVycm9yIGNvbXBpbGluZyAke1RuKHIsZSl9OiAke299YDtyZXR1cm4gbih1KSx1fXJldHVybiIifWZ1bmN0aW9uIGtyKHIsZSx0KXtsZXQgbixpLG87aWYodHlwZW9mIGU9PSJmdW5jdGlvbiImJih0PWUsZT12b2lkIDApLHR5cGVvZiByPT0iZnVuY3Rpb24iKXQ9cixyPXZvaWQgMDtlbHNlIGlmKHImJiFBcnJheS5pc0FycmF5KHIpKXtjb25zdCBmPXI7dD1mLmVycm9yQ2FsbGJhY2sscj1mLmF0dHJpYkxvY2F0aW9ucyxuPWYudHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyxpPWYudHJhbnNmb3JtRmVlZGJhY2tNb2RlLG89Zi5jYWxsYmFja31jb25zdCBzPXR8fElyLGE9W10sdT17ZXJyb3JDYWxsYmFjayhmLC4uLmQpe2EucHVzaChmKSxzKGYsLi4uZCl9LHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3M6bix0cmFuc2Zvcm1GZWVkYmFja01vZGU6aSxjYWxsYmFjazpvLGVycm9yczphfTt7bGV0IGY9e307QXJyYXkuaXNBcnJheShyKT9yLmZvckVhY2goZnVuY3Rpb24oZCxwKXtmW2RdPWU/ZVtwXTpwfSk6Zj1yfHx7fSx1LmF0dHJpYkxvY2F0aW9ucz1mfXJldHVybiB1fWNvbnN0IERjPVsiVkVSVEVYX1NIQURFUiIsIkZSQUdNRU5UX1NIQURFUiJdO2Z1bmN0aW9uIENjKHIsZSl7aWYoZS5pbmRleE9mKCJmcmFnIik+PTApcmV0dXJuIER1O2lmKGUuaW5kZXhPZigidmVydCIpPj0wKXJldHVybiBDdX1mdW5jdGlvbiBNYyhyLGUsdCl7Y29uc3Qgbj1yLmdldEF0dGFjaGVkU2hhZGVycyhlKTtmb3IoY29uc3QgaSBvZiBuKXQuaGFzKGkpJiZyLmRlbGV0ZVNoYWRlcihpKTtyLmRlbGV0ZVByb2dyYW0oZSl9Y29uc3QgQmM9KHI9MCk9Pm5ldyBQcm9taXNlKGU9PnNldFRpbWVvdXQoZSxyKSk7ZnVuY3Rpb24gT2MocixlLHQpe2NvbnN0IG49ci5jcmVhdGVQcm9ncmFtKCkse2F0dHJpYkxvY2F0aW9uczppLHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3M6byx0cmFuc2Zvcm1GZWVkYmFja01vZGU6c309a3IodCk7Zm9yKGxldCBhPTA7YTxlLmxlbmd0aDsrK2Epe2xldCB1PWVbYV07aWYodHlwZW9mIHU9PSJzdHJpbmciKXtjb25zdCBmPVZuKHUpLGQ9Zj9mLnRleHQ6dTtsZXQgcD1yW0RjW2FdXTtmJiZmLnR5cGUmJihwPUNjKHIsZi50eXBlKXx8cCksdT1yLmNyZWF0ZVNoYWRlcihwKSxyLnNoYWRlclNvdXJjZSh1LHBpKGQpLnNoYWRlclNvdXJjZSksci5jb21waWxlU2hhZGVyKHUpLHIuYXR0YWNoU2hhZGVyKG4sdSl9fU9iamVjdC5lbnRyaWVzKGkpLmZvckVhY2goKFthLHVdKT0+ci5iaW5kQXR0cmliTG9jYXRpb24obix1LGEpKTt7bGV0IGE9bzthJiYoYS5hdHRyaWJzJiYoYT1hLmF0dHJpYnMpLEFycmF5LmlzQXJyYXkoYSl8fChhPU9iamVjdC5rZXlzKGEpKSxyLnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MobixhLHN8fE11KSl9cmV0dXJuIHIubGlua1Byb2dyYW0obiksbn1mdW5jdGlvbiBVYyhyLGUsdCxuLGkpe2NvbnN0IG89a3IodCxuLGkpLHM9bmV3IFNldChlKSxhPU9jKHIsZSxvKTtmdW5jdGlvbiB1KGYsZCl7Y29uc3QgcD1MYyhmLGQsby5lcnJvckNhbGxiYWNrKTtyZXR1cm4gcCYmTWMoZixkLHMpLHB9aWYoby5jYWxsYmFjayl7TmMocixhKS50aGVuKCgpPT57Y29uc3QgZj11KHIsYSk7by5jYWxsYmFjayhmLGY/dm9pZCAwOmEpfSk7cmV0dXJufXJldHVybiB1KHIsYSk/dm9pZCAwOmF9YXN5bmMgZnVuY3Rpb24gTmMocixlKXtjb25zdCB0PXIuZ2V0RXh0ZW5zaW9uKCJLSFJfcGFyYWxsZWxfc2hhZGVyX2NvbXBpbGUiKSxuPXQ/KG8scyk9Pm8uZ2V0UHJvZ3JhbVBhcmFtZXRlcihzLHQuQ09NUExFVElPTl9TVEFUVVNfS0hSKTooKT0+ITA7bGV0IGk9MDtkbyBhd2FpdCBCYyhpKSxpPTFlMy82MDt3aGlsZSghbihyLGUpKX1mdW5jdGlvbiBMYyhyLGUsdCl7aWYodD10fHxJciwhci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsa3UpKXtjb25zdCBpPXIuZ2V0UHJvZ3JhbUluZm9Mb2coZSk7dChgRXJyb3IgaW4gcHJvZ3JhbSBsaW5raW5nOiAke2l9YCk7Y29uc3Qgcz1yLmdldEF0dGFjaGVkU2hhZGVycyhlKS5tYXAoYT0+a2MocixyLmdldFNoYWRlclBhcmFtZXRlcihhLHIuU0hBREVSX1RZUEUpLGEsdCkpO3JldHVybmAke2l9CiR7cy5maWx0ZXIoYT0+YSkuam9pbihgCmApfWB9fWZ1bmN0aW9uIHpjKHIsZSx0LG4saSl7cmV0dXJuIFVjKHIsZSx0LG4saSl9ZnVuY3Rpb24gZ2kocil7Y29uc3QgZT1yLm5hbWU7cmV0dXJuIGUuc3RhcnRzV2l0aCgiZ2xfIil8fGUuc3RhcnRzV2l0aCgid2ViZ2xfIil9Y29uc3QgR2M9LyhcLnxcW3xdfFx3KykvZywkYz1yPT5yPj0iMCImJnI8PSI5IjtmdW5jdGlvbiBXYyhyLGUsdCxuKXtjb25zdCBpPXIuc3BsaXQoR2MpLmZpbHRlcihhPT5hIT09IiIpO2xldCBvPTAscz0iIjtmb3IoOzspe2NvbnN0IGE9aVtvKytdO3MrPWE7Y29uc3QgdT0kYyhhWzBdKSxmPXU/cGFyc2VJbnQoYSk6YTtpZih1JiYocys9aVtvKytdKSxvPT09aS5sZW5ndGgpe3RbZl09ZTticmVha31lbHNle2NvbnN0IHA9aVtvKytdLGc9cD09PSJbIixiPXRbZl18fChnP1tdOnt9KTt0W2ZdPWIsdD1iLG5bc109bltzXXx8ZnVuY3Rpb24oaCl7cmV0dXJuIGZ1bmN0aW9uKHgpe3lpKGgseCl9fShiKSxzKz1wfX19ZnVuY3Rpb24gVmMocixlKXtsZXQgdD0wO2Z1bmN0aW9uIG4oYSx1LGYpe2NvbnN0IGQ9dS5uYW1lLmVuZHNXaXRoKCJbMF0iKSxwPXUudHlwZSxnPV9bcF07aWYoIWcpdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIHR5cGU6IDB4JHtwLnRvU3RyaW5nKDE2KX1gKTtsZXQgYjtpZihnLmJpbmRQb2ludCl7Y29uc3QgaD10O3QrPXUuc2l6ZSxkP2I9Zy5hcnJheVNldHRlcihyLHAsaCxmLHUuc2l6ZSk6Yj1nLnNldHRlcihyLHAsaCxmLHUuc2l6ZSl9ZWxzZSBnLmFycmF5U2V0dGVyJiZkP2I9Zy5hcnJheVNldHRlcihyLGYpOmI9Zy5zZXR0ZXIocixmKTtyZXR1cm4gYi5sb2NhdGlvbj1mLGJ9Y29uc3QgaT17fSxvPXt9LHM9ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsSG4pO2ZvcihsZXQgYT0wO2E8czsrK2Epe2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtKGUsYSk7aWYoZ2kodSkpY29udGludWU7bGV0IGY9dS5uYW1lO2YuZW5kc1dpdGgoIlswXSIpJiYoZj1mLnN1YnN0cigwLGYubGVuZ3RoLTMpKTtjb25zdCBkPXIuZ2V0VW5pZm9ybUxvY2F0aW9uKGUsdS5uYW1lKTtpZihkKXtjb25zdCBwPW4oZSx1LGQpO2lbZl09cCxXYyhmLHAsbyxpKX19cmV0dXJuIGl9ZnVuY3Rpb24gSGMocixlKXtjb25zdCB0PXt9LG49ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsT3UpO2ZvcihsZXQgaT0wO2k8bjsrK2kpe2NvbnN0IG89ci5nZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoZSxpKTt0W28ubmFtZV09e2luZGV4OmksdHlwZTpvLnR5cGUsc2l6ZTpvLnNpemV9fXJldHVybiB0fWZ1bmN0aW9uIGpjKHIsZSl7Y29uc3QgdD1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxIbiksbj1bXSxpPVtdO2ZvcihsZXQgYT0wO2E8dDsrK2Epe2kucHVzaChhKSxuLnB1c2goe30pO2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtKGUsYSk7blthXS5uYW1lPXUubmFtZX1bWyJVTklGT1JNX1RZUEUiLCJ0eXBlIl0sWyJVTklGT1JNX1NJWkUiLCJzaXplIl0sWyJVTklGT1JNX0JMT0NLX0lOREVYIiwiYmxvY2tOZHgiXSxbIlVOSUZPUk1fT0ZGU0VUIiwib2Zmc2V0Il1dLmZvckVhY2goZnVuY3Rpb24oYSl7Y29uc3QgdT1hWzBdLGY9YVsxXTtyLmdldEFjdGl2ZVVuaWZvcm1zKGUsaSxyW3VdKS5mb3JFYWNoKGZ1bmN0aW9uKGQscCl7bltwXVtmXT1kfSl9KTtjb25zdCBvPXt9LHM9ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsVXUpO2ZvcihsZXQgYT0wO2E8czsrK2Epe2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKGUsYSksZj17aW5kZXg6ci5nZXRVbmlmb3JtQmxvY2tJbmRleChlLHUpLHVzZWRCeVZlcnRleFNoYWRlcjpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEsTnUpLHVzZWRCeUZyYWdtZW50U2hhZGVyOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSxMdSksc2l6ZTpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEsenUpLHVuaWZvcm1JbmRpY2VzOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSxHdSl9O2YudXNlZD1mLnVzZWRCeVZlcnRleFNoYWRlcnx8Zi51c2VkQnlGcmFnbWVudFNoYWRlcixvW3VdPWZ9cmV0dXJue2Jsb2NrU3BlY3M6byx1bmlmb3JtRGF0YTpufX1mdW5jdGlvbiB5aShyLGUpe2Zvcihjb25zdCB0IGluIGUpe2NvbnN0IG49clt0XTt0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uKGVbdF0pOnlpKHJbdF0sZVt0XSl9fWZ1bmN0aW9uIGJpKHIsLi4uZSl7Y29uc3QgdD1yLnVuaWZvcm1TZXR0ZXJzfHxyLG49ZS5sZW5ndGg7Zm9yKGxldCBpPTA7aTxuOysraSl7Y29uc3Qgbz1lW2ldO2lmKEFycmF5LmlzQXJyYXkobykpe2NvbnN0IHM9by5sZW5ndGg7Zm9yKGxldCBhPTA7YTxzOysrYSliaSh0LG9bYV0pfWVsc2UgZm9yKGNvbnN0IHMgaW4gbyl7Y29uc3QgYT10W3NdO2EmJmEob1tzXSl9fX1mdW5jdGlvbiBZYyhyLGUpe2NvbnN0IHQ9e30sbj1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxCdSk7Zm9yKGxldCBpPTA7aTxuOysraSl7Y29uc3Qgbz1yLmdldEFjdGl2ZUF0dHJpYihlLGkpO2lmKGdpKG8pKWNvbnRpbnVlO2NvbnN0IHM9ci5nZXRBdHRyaWJMb2NhdGlvbihlLG8ubmFtZSksYT1QW28udHlwZV0sdT1hLnNldHRlcihyLHMsYSk7dS5sb2NhdGlvbj1zLHRbby5uYW1lXT11fXJldHVybiB0fWZ1bmN0aW9uIFhjKHIsZSl7Zm9yKGNvbnN0IHQgaW4gZSl7Y29uc3Qgbj1yW3RdO24mJm4oZVt0XSl9fWZ1bmN0aW9uIFFjKHIsZSx0KXt0LnZlcnRleEFycmF5T2JqZWN0P3IuYmluZFZlcnRleEFycmF5KHQudmVydGV4QXJyYXlPYmplY3QpOihYYyhlLmF0dHJpYlNldHRlcnN8fGUsdC5hdHRyaWJzKSx0LmluZGljZXMmJnIuYmluZEJ1ZmZlcihGdSx0LmluZGljZXMpKX1mdW5jdGlvbiB4aShyLGUpe2NvbnN0IHQ9VmMocixlKSxuPVljKHIsZSksaT17cHJvZ3JhbTplLHVuaWZvcm1TZXR0ZXJzOnQsYXR0cmliU2V0dGVyczpufTtyZXR1cm4gVmUocikmJihpLnVuaWZvcm1CbG9ja1NwZWM9amMocixlKSxpLnRyYW5zZm9ybUZlZWRiYWNrSW5mbz1IYyhyLGUpKSxpfWNvbnN0IHFjPS9cc3x7fH18Oy87ZnVuY3Rpb24gS2MocixlLHQsbixpKXtjb25zdCBvPWtyKHQsbixpKSxzPVtdO2lmKGU9ZS5tYXAoZnVuY3Rpb24oZil7aWYoIXFjLnRlc3QoZikpe2NvbnN0IGQ9Vm4oZik7aWYoZClmPWQudGV4dDtlbHNle2NvbnN0IHA9YG5vIGVsZW1lbnQgd2l0aCBpZDogJHtmfWA7by5lcnJvckNhbGxiYWNrKHApLHMucHVzaChwKX19cmV0dXJuIGZ9KSxzLmxlbmd0aClyZXR1cm4gUGMobywiIik7Y29uc3QgYT1vLmNhbGxiYWNrO2EmJihvLmNhbGxiYWNrPShmLGQpPT57YShmLGY/dm9pZCAwOnhpKHIsZCkpfSk7Y29uc3QgdT16YyhyLGUsbyk7cmV0dXJuIHU/eGkocix1KTpudWxsfWNvbnN0IEpjPTQsX2k9NTEyMztmdW5jdGlvbiBaYyhyLGUsdCxuLGksbyl7dD10PT09dm9pZCAwP0pjOnQ7Y29uc3Qgcz1lLmluZGljZXMsYT1lLmVsZW1lbnRUeXBlLHU9bj09PXZvaWQgMD9lLm51bUVsZW1lbnRzOm47aT1pPT09dm9pZCAwPzA6aSxhfHxzP28hPT12b2lkIDA/ci5kcmF3RWxlbWVudHNJbnN0YW5jZWQodCx1LGE9PT12b2lkIDA/X2k6ZS5lbGVtZW50VHlwZSxpLG8pOnIuZHJhd0VsZW1lbnRzKHQsdSxhPT09dm9pZCAwP19pOmUuZWxlbWVudFR5cGUsaSk6byE9PXZvaWQgMD9yLmRyYXdBcnJheXNJbnN0YW5jZWQodCxpLHUsbyk6ci5kcmF3QXJyYXlzKHQsaSx1KX1jb25zdCB2aT0zNjE2MCxVdD0zNjE2MSxlZj0zNTUzLHRmPTUxMjEscmY9NjQwMixuZj02NDA4LG9mPTMzMTkwLHNmPTM2MDEyLGFmPTM1MDU2LHVmPTM2MDEzLGNmPTMyODU0LGZmPTMyODU1LGxmPTM2MTk0LEVpPTMzMTg5LFRpPTY0MDEsd2k9MzYxNjgsRHI9MzQwNDEsQ3I9MzYwNjQsTnQ9MzYwOTYsQWk9MzYxMjgsTXI9MzMzMDYsQnI9MzMwNzEsT3I9OTcyOSxkZj1be2Zvcm1hdDpuZix0eXBlOnRmLG1pbjpPcix3cmFwOkJyfSx7Zm9ybWF0OkRyfV0sWT17fTtZW0RyXT1NcixZW1RpXT1BaSxZW3dpXT1BaSxZW3JmXT1OdCxZW0VpXT1OdCxZW29mXT1OdCxZW3NmXT1OdCxZW2FmXT1NcixZW3VmXT1NcjtmdW5jdGlvbiBoZihyLGUpe3JldHVybiBZW3JdfHxZW2VdfWNvbnN0IGZlPXt9O2ZlW2NmXT0hMCxmZVtmZl09ITAsZmVbbGZdPSEwLGZlW0RyXT0hMCxmZVtFaV09ITAsZmVbVGldPSEwLGZlW3dpXT0hMDtmdW5jdGlvbiBtZihyKXtyZXR1cm4gZmVbcl19Y29uc3QgcGY9MzI7ZnVuY3Rpb24gZ2Yocil7cmV0dXJuIHI+PUNyJiZyPENyK3BmfWZ1bmN0aW9uIEx0KHIsZSx0LG4pe2NvbnN0IGk9dmksbz1yLmNyZWF0ZUZyYW1lYnVmZmVyKCk7ci5iaW5kRnJhbWVidWZmZXIoaSxvKSx0PXR8fHIuZHJhd2luZ0J1ZmZlcldpZHRoLG49bnx8ci5kcmF3aW5nQnVmZmVySGVpZ2h0LGU9ZXx8ZGY7Y29uc3Qgcz1bXSxhPXtmcmFtZWJ1ZmZlcjpvLGF0dGFjaG1lbnRzOltdLHdpZHRoOnQsaGVpZ2h0Om59O3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24odSxmKXtsZXQgZD11LmF0dGFjaG1lbnQ7Y29uc3QgcD11LnNhbXBsZXMsZz11LmZvcm1hdDtsZXQgYj11LmF0dGFjaG1lbnRQb2ludHx8aGYoZyx1LmludGVybmFsRm9ybWF0KTtpZihifHwoYj1DcitmKSxnZihiKSYmcy5wdXNoKGIpLCFkKWlmKHAhPT12b2lkIDB8fG1mKGcpKWQ9ci5jcmVhdGVSZW5kZXJidWZmZXIoKSxyLmJpbmRSZW5kZXJidWZmZXIoVXQsZCkscD4xP3IucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKFV0LHAsZyx0LG4pOnIucmVuZGVyYnVmZmVyU3RvcmFnZShVdCxnLHQsbik7ZWxzZXtjb25zdCBoPU9iamVjdC5hc3NpZ24oe30sdSk7aC53aWR0aD10LGguaGVpZ2h0PW4saC5hdXRvPT09dm9pZCAwJiYoaC5hdXRvPSExLGgubWluPWgubWlufHxoLm1pbk1hZ3x8T3IsaC5tYWc9aC5tYWd8fGgubWluTWFnfHxPcixoLndyYXBTPWgud3JhcFN8fGgud3JhcHx8QnIsaC53cmFwVD1oLndyYXBUfHxoLndyYXB8fEJyKSxkPVduKHIsaCl9aWYod3MocixkKSlyLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGksYixVdCxkKTtlbHNlIGlmKGRyKHIsZCkpdS5sYXllciE9PXZvaWQgMD9yLmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKGksYixkLHUubGV2ZWx8fDAsdS5sYXllcik6ci5mcmFtZWJ1ZmZlclRleHR1cmUyRChpLGIsdS50YXJnZXR8fGVmLGQsdS5sZXZlbHx8MCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoInVua25vd24gYXR0YWNobWVudCB0eXBlIik7YS5hdHRhY2htZW50cy5wdXNoKGQpfSksci5kcmF3QnVmZmVycyYmci5kcmF3QnVmZmVycyhzKSxhfWZ1bmN0aW9uIHlmKHIsZSx0KXt0PXR8fHZpLGU/KHIuYmluZEZyYW1lYnVmZmVyKHQsZS5mcmFtZWJ1ZmZlciksci52aWV3cG9ydCgwLDAsZS53aWR0aCxlLmhlaWdodCkpOihyLmJpbmRGcmFtZWJ1ZmZlcih0LG51bGwpLHIudmlld3BvcnQoMCwwLHIuZHJhd2luZ0J1ZmZlcldpZHRoLHIuZHJhd2luZ0J1ZmZlckhlaWdodCkpfWZ1bmN0aW9uIEkocixlKXtyZXR1cm4oKT0+ZSBpbnN0YW5jZW9mIFdlYkdMVGV4dHVyZT9lOlduKHIse3NyYzplLHdyYXA6ci5DTEFNUF9UT19FREdFfSl9Y29uc3QgT2U9MjtjbGFzcyBFZXtjb25zdHJ1Y3RvcihlKXtsKHRoaXMsImlkIiwiXyIpO2wodGhpcywiY29udGV4dCIpO2wodGhpcywib3V0cHV0Iik7bCh0aGlzLCJmYmkiKTtsKHRoaXMsIm9wdGlvbnMiKTtsKHRoaXMsInByb2dyYW1JbmZvIik7bCh0aGlzLCJidWZmZXJJbmZvIik7bCh0aGlzLCJwcm9maWxlciIpO2wodGhpcywibGFzdFJ1biIpO2NvbnN0e2NvbnRleHQ6dCx3aWR0aDpuLGhlaWdodDppfT1lO3RoaXMuY29udGV4dD10LHRoaXMub3B0aW9ucz1lO2NvbnN0IG89dGhpcy5idWlsZERlZmluZXMoKTt0aGlzLnByb2dyYW1JbmZvPUtjKHRoaXMuY29udGV4dCxbbyt0aGlzLmdldFZlcnRleFNoYWRlcigpLG8rdGhpcy5nZXRGcmFnbWVudFNoYWRlcigpXSksdGhpcy5idWZmZXJJbmZvPVhzKHRoaXMuY29udGV4dCx0aGlzLmdldEJ1ZmZlcnMoKSksdGhpcy5mYmk9THQodGhpcy5jb250ZXh0LFt7Zm9ybWF0OnRoaXMuY29udGV4dC5SR0JBLHR5cGU6dGhpcy5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnRoaXMuY29udGV4dC5MSU5FQVIsd3JhcDp0aGlzLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLG4saSksdGhpcy5vdXRwdXQ9dGhpcy5mYmkuYXR0YWNobWVudHNbMF19cmVzaXplT3V0cHV0KGUsdCl7dGhpcy5mYmk9THQodGhpcy5jb250ZXh0LFt7Zm9ybWF0OnRoaXMuY29udGV4dC5SR0JBLHR5cGU6dGhpcy5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnRoaXMuY29udGV4dC5MSU5FQVIsd3JhcDp0aGlzLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLGUsdCksdGhpcy5vcHRpb25zLndpZHRoPWUsdGhpcy5vcHRpb25zLmhlaWdodD10LHRoaXMub3V0cHV0PXRoaXMuZmJpLmF0dGFjaG1lbnRzWzBdfWdldERlZmluZXMoKXtyZXR1cm57fX1nZXRCdWZmZXJzKCl7cmV0dXJue3Bvc2l0aW9uOntudW1Db21wb25lbnRzOjIsZGF0YTpbLTEsLTEsLTEsMSwxLC0xLDEsMSwtMSwxLDEsLTFdfSx0ZXh0dXJlX2Nvb3JkOntudW1Db21wb25lbnRzOjIsZGF0YTpbMCwwLDAsMSwxLDAsMSwxLDAsMSwxLDBdfX19YnVpbGREZWZpbmVzKCl7bGV0IGU9IiI7Y29uc3QgdD10aGlzLmdldERlZmluZXMoKTtmb3IobGV0IG4gaW4gdCllKz1gI2RlZmluZSAke259ICR7dFtuXS50b0ZpeGVkKDEpfQpgO3JldHVybiBlfXJ1bihlKXt2YXIgaSxvLHMsYSx1LGY7KGk9dGhpcy5wcm9maWxlcik9PW51bGx8fGkucHVzaENvbnRleHQoYFske3RoaXMuaWR9XSBQUk9HIDogJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9YCksKG89dGhpcy5wcm9maWxlcik9PW51bGx8fG8ucHVzaENvbnRleHQoYFske3RoaXMuaWR9XSBVTklGT1JNU2ApO2Zvcihjb25zdCBkIGluIGUpdHlwZW9mIGVbZF09PSJmdW5jdGlvbiImJigocz10aGlzLnByb2ZpbGVyKT09bnVsbHx8cy5wdXNoQ29udGV4dChgWyR7dGhpcy5pZH1dIFVOSSA6ICR7ZH1gKSxlW2RdPWVbZF0oKSwoYT10aGlzLnByb2ZpbGVyKT09bnVsbHx8YS5wb3BDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JIDogJHtkfWApKTsodT10aGlzLnByb2ZpbGVyKT09bnVsbHx8dS5wb3BDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JRk9STVNgKTtjb25zdCB0PURhdGUubm93KCk7bGV0IG49MDt0aGlzLmxhc3RSdW4mJihuPSh0LXRoaXMubGFzdFJ1bikvMWUzKSx0aGlzLmxhc3RSdW49dCx0aGlzLmNvbnRleHQudmlld3BvcnQoMCwwLHRoaXMuY29udGV4dC5jYW52YXMud2lkdGgsdGhpcy5jb250ZXh0LmNhbnZhcy5oZWlnaHQpLHRoaXMuY29udGV4dC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbUluZm8ucHJvZ3JhbSksUWModGhpcy5jb250ZXh0LHRoaXMucHJvZ3JhbUluZm8sdGhpcy5idWZmZXJJbmZvKSxiaSh0aGlzLnByb2dyYW1JbmZvLHtkZWx0YTpuLGNhbnZhczpbdGhpcy5jb250ZXh0LmNhbnZhcy53aWR0aCx0aGlzLmNvbnRleHQuY2FudmFzLmhlaWdodF0sLi4uZX0pLHlmKHRoaXMuY29udGV4dCx0aGlzLm9wdGlvbnMuZGlzYWJsZUZyYW1lYnVmZmVyP251bGw6dGhpcy5mYmkpLFpjKHRoaXMuY29udGV4dCx0aGlzLmJ1ZmZlckluZm8pLChmPXRoaXMucHJvZmlsZXIpPT1udWxsfHxmLnBvcENvbnRleHQoYFske3RoaXMuaWR9XSBQUk9HIDogJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9YCl9c2V0UHJvZmlsZXIoZSl7dGhpcy5wcm9maWxlcj1lfX12YXIgYmY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSBzYW1wbGVyMkQgYmFja2dyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgZm9yZWdyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgdGhyZXNob2xkOwoKdm9pZCBtYWluKCkgewogIHZlYzQgYmFja2dyb3VuZENvbG9yID0gdGV4dHVyZTJEKGJhY2tncm91bmQsIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IGZvcmVncm91bmRDb2xvciA9IHRleHR1cmUyRChmb3JlZ3JvdW5kLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCB0cmVzaG9sZENvbG9yID0gdGV4dHVyZTJEKHRocmVzaG9sZCwgX3RleHR1cmVfY29vcmQpOwogIGdsX0ZyYWdDb2xvciA9IGZvcmVncm91bmRDb2xvciAqIHRyZXNob2xkQ29sb3IuYSArCiAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yICogKDEuIC0gdHJlc2hvbGRDb2xvci5hKTsKfQpgLHhmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwogIF90ZXh0dXJlX2Nvb3JkLnkgPSAxLiAtIHRleHR1cmVfY29vcmQueTsKfQpgO2NsYXNzIFVyIGV4dGVuZHMgRWV7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gYmZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIHhmfX1jbGFzcyBOcntjb25zdHJ1Y3Rvcigpe2wodGhpcywic3RlcHMiLFtdKTtsKHRoaXMsInByb2ZpbGVyIil9YWRkU3RlcChlKXt0aGlzLnN0ZXBzLnB1c2goZSl9YXN5bmMgcnVuKCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5zdGVwcyllLnByb2dyYW0ucnVuKGUuZ2V0VW5pZm9ybXMoKSl9cmVzaXplT3V0cHV0KGUsdCl7dmFyIG4saTsobj10aGlzLnByb2ZpbGVyKT09bnVsbHx8bi5wdXNoQ29udGV4dChgUElQIFske3RoaXMuY29uc3RydWN0b3IubmFtZX1dYCk7Zm9yKGNvbnN0IG8gb2YgdGhpcy5zdGVwcylvLnByZXZlbnRSZXNpemV8fG8ucHJvZ3JhbS5yZXNpemVPdXRwdXQoZSx0KTsoaT10aGlzLnByb2ZpbGVyKT09bnVsbHx8aS5wb3BDb250ZXh0KGBQSVAgWyR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfV1gKX1zZXRQcm9maWxlcihlKXt0aGlzLnByb2ZpbGVyPWU7Zm9yKGNvbnN0IHQgb2YgdGhpcy5zdGVwcyl0LnByb2dyYW0uc2V0UHJvZmlsZXIoZSl9c2V0SWQoZSl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5zdGVwcyl0LnByb2dyYW0uaWQ9ZX19Y2xhc3MgTHIgZXh0ZW5kcyBOcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7bCh0aGlzLCJwcmVjaXNlTWFza0VuYWJsZWQiLCExKX19Y2xhc3MgSWkgZXh0ZW5kcyBMcntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpO2wodGhpcywiaW5wdXRJbWFnZSIpO2wodGhpcywiaW5wdXRCYWNrZ3JvdW5kSW1hZ2UiKTtsKHRoaXMsImlucHV0TWFzayIpO2wodGhpcywicHJlY2lzZU1hc2tFbmFibGVkIiwhMCk7dGhpcy5jb250ZXh0PXQ7Y29uc3Qgbj17Y29udGV4dDp0LGhlaWdodDp0LmNhbnZhcy5oZWlnaHQsd2lkdGg6dC5jYW52YXMud2lkdGh9LGk9bmV3IFVyKHsuLi5uLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTppLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6SSh0LHRoaXMuaW5wdXRCYWNrZ3JvdW5kSW1hZ2UpLGZvcmVncm91bmQ6SSh0LHRoaXMuaW5wdXRJbWFnZSksdGhyZXNob2xkOkkodCx0aGlzLmlucHV0TWFzayl9KX0pfXNldERhdGEodCxuKXt0aGlzLmlucHV0SW1hZ2U9dCx0aGlzLmlucHV0TWFzaz1ufX12YXIgX2Y9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQpOyB9CmAsdmY9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwp1bmlmb3JtIGJvb2wgaW52ZXJ0X3k7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKICBpZiAoaW52ZXJ0X3kpIHsKICAgIF90ZXh0dXJlX2Nvb3JkLnkgPSAxLiAtIHRleHR1cmVfY29vcmQueTsKICB9Cn0KYDtjbGFzcyBFZiBleHRlbmRzIEVle2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIF9mfWdldFZlcnRleFNoYWRlcigpe3JldHVybiB2Zn19Y2xhc3MgVGYgZXh0ZW5kcyBOcntjb25zdHJ1Y3Rvcih0LG4saSl7c3VwZXIoKTtsKHRoaXMsImlucHV0SW1hZ2UiKTt0aGlzLmNvbnRleHQ9dDtjb25zdCBvPXtjb250ZXh0OnQsaGVpZ2h0Omksd2lkdGg6bn07dGhpcy5hZGRTdGVwKHtwcm9ncmFtOm5ldyBFZih7Li4ubyxkaXNhYmxlRnJhbWVidWZmZXI6ITB9KSxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOkkodCx0aGlzLmlucHV0SW1hZ2UpLGludmVydF95OiEwfSl9KX1zZXREYXRhKHQpe3RoaXMuaW5wdXRJbWFnZT10fX1hc3luYyBmdW5jdGlvbiBTaShyKXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3NldFRpbWVvdXQoKCk9PntlKCl9LHIpfSl9dmFyIHdmPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gdmVjMiBjYW52YXM7CnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7Cgp2ZWM0IGxvb3AoKTsKCnZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gbG9vcCgpOyB9CmAsQWY9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYCx6cj0ocj0+KHJbci5MSU5FQVI9MF09IkxJTkVBUiIscltyLkdBVVNTSUFOPTFdPSJHQVVTU0lBTiIscikpKHpyfHx7fSk7Y2xhc3MgUmkgZXh0ZW5kcyBFZXtnZXREZWZpbmVzKCl7dmFyIGU7cmV0dXJue1JBRElVUzooZT10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD9lOjF9fWdldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIHdmK3RoaXMuY3JlYXRlTG9vcEZ1bmN0aW9uKCl9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIEFmfWNyZWF0ZUxvb3BGdW5jdGlvbigpe3ZhciB0O2xldCBlPSh0PXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP3Q6MTtyZXR1cm5gCgogICAgICAgIHZlYzQgbG9vcCgpIHsgCiAgICAgICAgICAgIHZlYzQgcmVzdWx0ID0gdmVjNCgwLDAsMCwwKTsKICAgICAgICAgICAgZmxvYXQgZmFjdG9yU3VtID0gMC47CgogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRSYWRpdXMgPSB2ZWMyKC0ke2V9LikgLyBjYW52YXM7CiAgICAgICAgICAgIHZlYzIgbm9ybWFsaXplZEluY3JlbWVudCA9IHZlYzIoMS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIGRpZmYgPSBub3JtYWxpemVkUmFkaXVzOwoKICAgICAgICAgICAgZm9yKGludCB5PS0ke2V9OyB5PCR7ZSsxfTsgKyt5KSB7CiAgICAgICAgICAgICAgICBmb3IoaW50IHg9LSR7ZX07IHg8JHtlKzF9OyArK3gpIHsKICAgICAgICAgICAgICAgICAgICBmbG9hdCBmYWN0b3IgPSAxLjsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gZmFjdG9yICogdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkICsgZGlmZik7CiAgICAgICAgICAgICAgICAgICAgZmFjdG9yU3VtICs9IGZhY3RvcjsKICAgICAgICAgICAgICAgICAgICBkaWZmLnggKz0gbm9ybWFsaXplZEluY3JlbWVudC54OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZGlmZi55ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueTsKICAgICAgICAgICAgICAgIGRpZmYueCA9IG5vcm1hbGl6ZWRSYWRpdXMueDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVzdWx0IC8gZmFjdG9yU3VtOwogICAgICAgIH1gfWdldEZhY3RvcihlLHQpe3N3aXRjaCh0aGlzLm9wdGlvbnMudHlwZSl7Y2FzZSAxOnJldHVybiB0aGlzLmdldExpbmVhckZhY3RvcihlLHQpO2Nhc2UgMDpkZWZhdWx0OnJldHVybiB0aGlzLmdldExpbmVhckZhY3RvcihlLHQpfX1nZXRMaW5lYXJGYWN0b3IoZSx0KXtyZXR1cm4gMX1nZXRHYXVzc2lhbkZhY3RvcihlLHQpe3ZhciB1O2NvbnN0IG49TWF0aC5QSSoyLGk9TWF0aC5tYXgoKHU9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/dToxLDEpLG89MS8obippKioyKSxzPS0oZSoqMit0KioyKSxhPW8qcztyZXR1cm4gbypNYXRoLkUqKmF9fWNsYXNzIEdyIGV4dGVuZHMgRWV7Y29uc3RydWN0b3IodCl7c3VwZXIodCk7bCh0aGlzLCJmYmkyIik7dGhpcy5mYmkyPUx0KHQuY29udGV4dCxbe2Zvcm1hdDp0LmNvbnRleHQuUkdCQSx0eXBlOnQuY29udGV4dC5VTlNJR05FRF9CWVRFLG1pbjp0LmNvbnRleHQuTElORUFSLG1hZzp0LmNvbnRleHQuTElORUFSLHdyYXA6dC5jb250ZXh0LkNMQU1QX1RPX0VER0V9XSx0LndpZHRoLHQuaGVpZ2h0KX1ydW4odCl7Y29uc3Qgbj10aGlzLmZiaTt0aGlzLmZiaT10aGlzLmZiaTIsdGhpcy5mYmkyPW4sdGhpcy5vdXRwdXQ9dGhpcy5mYmkuYXR0YWNobWVudHNbMF0sc3VwZXIucnVuKHsuLi50LHByZXZpb3VzX3JlbmRlcmluZzp0aGlzLmZiaTIuYXR0YWNobWVudHNbMF19KX1yZXNpemVPdXRwdXQodCxuKXtzdXBlci5yZXNpemVPdXRwdXQodCxuKSx0aGlzLmZiaTI9THQodGhpcy5jb250ZXh0LFt7Zm9ybWF0OnRoaXMuY29udGV4dC5SR0JBLHR5cGU6dGhpcy5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnRoaXMuY29udGV4dC5MSU5FQVIsd3JhcDp0aGlzLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLHQsbil9fXZhciBJZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgovLyB1bmlmb3JtIGZsb2F0IHRyZXNob2xkOwp1bmlmb3JtIHNhbXBsZXIyRCBpbWFnZV9ub3c7CnVuaWZvcm0gc2FtcGxlcjJEIGltYWdlX2JlZm9yZTsKdW5pZm9ybSBzYW1wbGVyMkQgbWFza19ub3c7CnVuaWZvcm0gc2FtcGxlcjJEIG1hc2tfYmVmb3JlOwp1bmlmb3JtIHNhbXBsZXIyRCBwcmV2aW91c19yZW5kZXJpbmc7CnVuaWZvcm0gdmVjMiBjYW52YXM7Cgp1bmlmb3JtIGZsb2F0IGRlbHRhOwoKZmxvYXQgY3VycmVudF9mYWN0b3IgPSAwLjY5OwpmbG9hdCBwcmV2aW91c19mYWN0b3IgPSAwLjc0OwpmbG9hdCB0aHJlc2hvbGRfYWN0aXZhdGlvbiA9IDAuNTQ7CgpmbG9hdCBtYXAoZmxvYXQgdmFsdWUsIGZsb2F0IG1pbjEsIGZsb2F0IG1heDEsIGZsb2F0IG1pbjIsIGZsb2F0IG1heDIpIHsKICByZXR1cm4gbWluMiArICh2YWx1ZSAtIG1pbjEpICogKG1heDIgLSBtaW4yKSAvIChtYXgxIC0gbWluMSk7Cn0KCmZsb2F0IGdldFRocmVzaG9sZCgpIHsKICB2ZWM0IGNvbG9yID0gdmVjNCgwLik7CiAgZm9yIChmbG9hdCB5ID0gLTYuOyB5IDwgNy47IHkgKz0gMS4pIHsKICAgIGZvciAoZmxvYXQgeCA9IC02LjsgeCA8IDcuOyB4ICs9IDEuKSB7CiAgICAgIHZlYzQgaW1hZ2Vfbm93X2NvbG9yID0KICAgICAgICAgIHRleHR1cmUyRChpbWFnZV9ub3csIF90ZXh0dXJlX2Nvb3JkICsgdmVjMih4LCB5KSAvIGNhbnZhcyk7CiAgICAgIHZlYzQgaW1hZ2VfYmVmb3JlX2NvbG9yID0KICAgICAgICAgIHRleHR1cmUyRChpbWFnZV9iZWZvcmUsIF90ZXh0dXJlX2Nvb3JkICsgdmVjMih4LCB5KSAvIGNhbnZhcyk7CiAgICAgIGNvbG9yICs9IGFicyhpbWFnZV9iZWZvcmVfY29sb3IgLSBpbWFnZV9ub3dfY29sb3IpOwogICAgfQogIH0KICByZXR1cm4gKGNvbG9yLnggKyBjb2xvci55ICsgY29sb3IueikgLyAoMy4gKiA5Lik7Cn0KCnZvaWQgbWFpbigpIHsKICBmbG9hdCB0cmVzaG9sZF9pbnB1dCA9IC40OwogIGZsb2F0IHRyZXNob2xkX3ByZXZpb3VzX3JlbmRlcmluZyA9IC45ODsKCiAgdmVjNCBtYXNrX25vd19jb2xvciA9IHRleHR1cmUyRChtYXNrX25vdywgX3RleHR1cmVfY29vcmQpOwogIHZlYzQgbWFza19iZWZvcmVfY29sb3IgPSB0ZXh0dXJlMkQobWFza19iZWZvcmUsIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IHByZXZpb3VzX3JlbmRlcmluZ19jb2xvciA9IHRleHR1cmUyRChwcmV2aW91c19yZW5kZXJpbmcsIF90ZXh0dXJlX2Nvb3JkKTsKCiAgdmVjMyBtYXNrX2RpZmYgPSBhYnMobWFza19iZWZvcmVfY29sb3IueHl6IC0gbWFza19ub3dfY29sb3IueHl6KTsKICBmbG9hdCBmbGlja2VyaW5nID0gbWFza19kaWZmLng7CiAgZmxvYXQgdGhyZXNob2xkID0gZ2V0VGhyZXNob2xkKCk7CiAgaWYgKHRocmVzaG9sZCA8IHRocmVzaG9sZF9hY3RpdmF0aW9uKSB7CiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGZsaWNrZXJpbmcsIDAuLCAwLiwgMS4pICogY3VycmVudF9mYWN0b3IgKwogICAgICAgICAgICAgICAgICAgcHJldmlvdXNfcmVuZGVyaW5nX2NvbG9yICogcHJldmlvdXNfZmFjdG9yOwogICAgZ2xfRnJhZ0NvbG9yICo9ICgxLiAtIHRocmVzaG9sZCk7CiAgfQp9CmAsU2Y9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYDtjbGFzcyBSZiBleHRlbmRzIEdye2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIElmfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBTZn19dmFyIEZmPWAjdmVyc2lvbiAzMDAgZXMKLy8gaHR0cHM6Ly9naXRodWIuY29tL1ZvbGNvbWl4L3ZpcnR1YWwtYmFja2dyb3VuZC9ibG9iL21haW4vc3JjL3BpcGVsaW5lcy93ZWJnbDIvam9pbnRCaWxhdGVyYWxGaWx0ZXJTdGFnZS50cwoKcHJlY2lzaW9uIGhpZ2hwIGZsb2F0Owp1bmlmb3JtIHNhbXBsZXIyRCBpbnB1dF9mcmFtZTsKdW5pZm9ybSBzYW1wbGVyMkQgc2VnbWVudGF0aW9uX21hc2s7CnVuaWZvcm0gc2FtcGxlcjJEIHRocmVzaG9sZDsKdW5pZm9ybSB2ZWMyIHRleGVsX3NpemU7CnVuaWZvcm0gZmxvYXQgc3RlcDsKdW5pZm9ybSBmbG9hdCByYWRpdXM7CnVuaWZvcm0gZmxvYXQgb2Zmc2V0Owp1bmlmb3JtIGZsb2F0IHNpZ21hX3RleGVsOwp1bmlmb3JtIGZsb2F0IHNpZ21hX2NvbG9yOwoKaW4gdmVjMiBfdGV4dHVyZV9jb29yZDsKb3V0IHZlYzQgb3V0Q29sb3I7CgpmbG9hdCBnYXVzc2lhbihmbG9hdCB4LCBmbG9hdCBzaWdtYSkgewogIGZsb2F0IGNvZWZmID0gLTAuNSAvIChzaWdtYSAqIHNpZ21hICogNC4wICsgMS4wZS02KTsKICByZXR1cm4gZXhwKCh4ICogeCkgKiBjb2VmZik7Cn0KCnZvaWQgbWFpbigpIHsKICB2ZWMyIGNlbnRlckNvb3JkID0gX3RleHR1cmVfY29vcmQ7CiAgdmVjMyBjZW50ZXJDb2xvciA9IHRleHR1cmUoaW5wdXRfZnJhbWUsIGNlbnRlckNvb3JkKS5yZ2I7CiAgZmxvYXQgbmV3VmFsID0gMC4wOwogIGZsb2F0IHNwYWNlV2VpZ2h0ID0gMC4wOwogIGZsb2F0IGNvbG9yV2VpZ2h0ID0gMC4wOwogIGZsb2F0IHRvdGFsV2VpZ2h0ID0gMC4wOwogIC8vIFN1YnNhbXBsZSBrZXJuZWwgc3BhY2UuCiAgZm9yIChmbG9hdCBpID0gLXJhZGl1cyArIG9mZnNldDsgaSA8PSByYWRpdXM7IGkgKz0gc3RlcCkgewogICAgZm9yIChmbG9hdCBqID0gLXJhZGl1cyArIG9mZnNldDsgaiA8PSByYWRpdXM7IGogKz0gc3RlcCkgewogICAgICB2ZWMyIHNoaWZ0ID0gdmVjMihqLCBpKSAqIHRleGVsX3NpemU7CiAgICAgIHZlYzIgY29vcmQgPSB2ZWMyKGNlbnRlckNvb3JkICsgc2hpZnQpOwogICAgICB2ZWMzIGZyYW1lQ29sb3IgPSB0ZXh0dXJlKGlucHV0X2ZyYW1lLCBjb29yZCkucmdiOwogICAgICBmbG9hdCB0aHJlc2hvbGQgPSB0ZXh0dXJlKHRocmVzaG9sZCwgY29vcmQpLmE7CiAgICAgIGZsb2F0IG91dFZhbCA9IHRleHR1cmUoc2VnbWVudGF0aW9uX21hc2ssIGNvb3JkKS5hOwoKICAgICAgc3BhY2VXZWlnaHQgPSBnYXVzc2lhbihkaXN0YW5jZShjZW50ZXJDb29yZCwgY29vcmQpLCBzaWdtYV90ZXhlbCk7CiAgICAgIGNvbG9yV2VpZ2h0ID0gZ2F1c3NpYW4oZGlzdGFuY2UoY2VudGVyQ29sb3IsIGZyYW1lQ29sb3IpLCBzaWdtYV9jb2xvcik7CiAgICAgIHRvdGFsV2VpZ2h0ICs9IHNwYWNlV2VpZ2h0ICogY29sb3JXZWlnaHQ7CiAgICAgIG5ld1ZhbCArPSBzcGFjZVdlaWdodCAqIGNvbG9yV2VpZ2h0ICogb3V0VmFsICogdGhyZXNob2xkOwogICAgfQogIH0KICBuZXdWYWwgLz0gdG90YWxXZWlnaHQ7CiAgb3V0Q29sb3IgPSB2ZWM0KHZlYzMoMC4pLCBuZXdWYWwpOwp9YCxQZj1gI3ZlcnNpb24gMzAwIGVzCmluIHZlYzIgcG9zaXRpb247CmluIHZlYzIgdGV4dHVyZV9jb29yZDsKb3V0IHZlYzIgX3RleHR1cmVfY29vcmQ7CnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn1gO2NsYXNzIGtmIGV4dGVuZHMgRWV7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gRmZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIFBmfX12YXIgRGY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSB2ZWMyIGNhbnZhczsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKCnZvaWQgbWFpbigpIHsKICBpbnQgY291bnQgPSAwOwogIGZvciAoZmxvYXQgeSA9IC0xLjsgeSA8IDIuOyB5ICs9IDEuKSB7CiAgICBmb3IgKGZsb2F0IHggPSAtMS47IHggPCAyLjsgeCArPSAxLikgewogICAgICB2ZWMyIGNvb3JkID0gX3RleHR1cmVfY29vcmQgKyB2ZWMyKHksIHgpIC8gY2FudmFzOwogICAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmUsIGNvb3JkKTsKICAgICAgaWYgKGNvbG9yLnIgPiAuMSkgewogICAgICAgIGNvdW50Kys7CiAgICAgIH0KICAgIH0KICB9CiAgaWYgKGNvdW50ID4gNSkgewogICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkKTsKICB9Cn0KYCxDZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIE1mIGV4dGVuZHMgRWV7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gRGZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIENmfX12YXIgQmY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSB2ZWMyIGNhbnZhczsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKCnZvaWQgbWFpbigpIHsKICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkKTsKICBmb3IgKGZsb2F0IHkgPSAtMi47IHkgPCAzLjsgeSArPSAxLikgewogICAgZm9yIChmbG9hdCB4ID0gLTIuOyB4IDwgMy47IHggKz0gMS4pIHsKICAgICAgdmVjMiBjb29yZCA9IF90ZXh0dXJlX2Nvb3JkOwogICAgICBjb29yZCArPSB2ZWMyKHksIHgpIC8gY2FudmFzOwogICAgICBjb2xvciArPSB0ZXh0dXJlMkQodGV4dHVyZSwgY29vcmQpICogKDEuIC8gNC4pOwogICAgfQogIH0KCiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7Cn0KYCxPZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIFVmIGV4dGVuZHMgR3J7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gQmZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIE9mfX12YXIgTmY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSBzYW1wbGVyMkQgdGhyZXNob2xkOwp1bmlmb3JtIHNhbXBsZXIyRCBpbnB1dHM7Cgp2b2lkIG1haW4oKSB7CiAgdmVjNCBpbnB1dHNfY29sb3IgPSB0ZXh0dXJlMkQoaW5wdXRzLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCB0aHJlc2hvbGRfY29sb3IgPSB0ZXh0dXJlMkQodGhyZXNob2xkLCBfdGV4dHVyZV9jb29yZCk7CiAgaWYgKHRocmVzaG9sZF9jb2xvci5yIDwgLjEgJiYgaW5wdXRzX2NvbG9yLnIgPiAuNSkgewogICAgZ2xfRnJhZ0NvbG9yID0gaW5wdXRzX2NvbG9yOwogIH0KfQpgLExmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgemYgZXh0ZW5kcyBHcntnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBOZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gTGZ9fWNsYXNzIEdmIGV4dGVuZHMgTnJ7Y29uc3RydWN0b3IodCxuLGkpe3N1cGVyKCk7bCh0aGlzLCJpbnB1dEltYWdlIik7bCh0aGlzLCJpbnB1dE1hc2siKTtsKHRoaXMsInByZXZpb3VzSW5wdXRJbWFnZSIpO2wodGhpcywicHJldmlvdXNJbnB1dE1hc2siKTtsKHRoaXMsIm91dHB1dCIpO2wodGhpcywib3B0aW9ucyIse2N1cnJlbnRUaHJlc2hvbGRNaW5pbXVtOjAsY3VycmVudFRocmVzaG9sZE1heGltdW06MSxwcmV2aW91c1RocmVzaG9sZE1pbmltdW06MCxwcmV2aW91c1RocmVzaG9sZE1heGltdW06MSx0aHJlc2hvbGRNaW5pbXVtOjAsdGhyZXNob2xkTWF4aW11bToxLHRocmVzaG9sZEZhY3RvcjoxfSk7bCh0aGlzLCJqb2ludEJpbGF0ZXJhbCIpO3RoaXMuY29udGV4dD10O2NvbnN0IG89e2NvbnRleHQ6dCxoZWlnaHQ6aSx3aWR0aDpufSxzPW5ldyBSZihvKSxhPW5ldyBSaSh7Li4ubyxyYWRpdXM6MSx0eXBlOnpyLkdBVVNTSUFOfSksdT1uZXcgemYobyksZj1uZXcgVWYobyksZD1uZXcgTWYobyk7dGhpcy5qb2ludEJpbGF0ZXJhbD1uZXcga2YobyksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOnMsZ2V0VW5pZm9ybXM6KCk9Pih7aW1hZ2Vfbm93OkkodCx0aGlzLmlucHV0SW1hZ2UpLGltYWdlX2JlZm9yZTpJKHQsdGhpcy5wcmV2aW91c0lucHV0SW1hZ2UpLG1hc2tfbm93OkkodCx0aGlzLmlucHV0TWFzayksbWFza19iZWZvcmU6SSh0LHRoaXMucHJldmlvdXNJbnB1dE1hc2spLGN1cnJlbnRfdGhyZXNob2xkX21pbmltdW06dGhpcy5vcHRpb25zLmN1cnJlbnRUaHJlc2hvbGRNaW5pbXVtLGN1cnJlbnRfdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLmN1cnJlbnRUaHJlc2hvbGRNYXhpbXVtLHByZXZpb3VzX3RocmVzaG9sZF9taW5pbXVtOnRoaXMub3B0aW9ucy5wcmV2aW91c1RocmVzaG9sZE1pbmltdW0scHJldmlvdXNfdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLnByZXZpb3VzVGhyZXNob2xkTWF4aW11bSx0aHJlc2hvbGRfbWluaW11bTp0aGlzLm9wdGlvbnMudGhyZXNob2xkTWluaW11bSx0aHJlc2hvbGRfbWF4aW11bTp0aGlzLm9wdGlvbnMudGhyZXNob2xkTWF4aW11bSx0aHJlc2hvbGRfZmFjdG9yOnRoaXMub3B0aW9ucy50aHJlc2hvbGRGYWN0b3J9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTp1LGdldFVuaWZvcm1zOigpPT4oe2lucHV0czpJKHQsdGhpcy5pbnB1dE1hc2spLHRocmVzaG9sZDpJKHQscy5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06ZCxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOkkodCx1Lm91dHB1dCl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpmLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6SSh0LGQub3V0cHV0KX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmEsZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpJKHQsZi5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06dGhpcy5qb2ludEJpbGF0ZXJhbCxnZXRVbmlmb3JtczooKT0+e3ZhciBHLHosSCwkLEtlLFRlLGxlLFc7Y29uc3QgZz0oej0oRz10aGlzLmlucHV0SW1hZ2UpPT1udWxsP3ZvaWQgMDpHLndpZHRoKSE9bnVsbD96OjEsYj0oJD0oSD10aGlzLmlucHV0SW1hZ2UpPT1udWxsP3ZvaWQgMDpILmhlaWdodCkhPW51bGw/JDoxLGg9KFRlPShLZT10aGlzLmlucHV0TWFzayk9PW51bGw/dm9pZCAwOktlLndpZHRoKSE9bnVsbD9UZToxLHg9KFc9KGxlPXRoaXMuaW5wdXRNYXNrKT09bnVsbD92b2lkIDA6bGUuaGVpZ2h0KSE9bnVsbD9XOjEsRT1NYXRoLm1heChnL2gsYi94KSx2PU1hdGgubWF4KDEsTWF0aC5zcXJ0KEUpKi42NiksRj0xL2csaz0xL2I7cmV0dXJue2lucHV0X2ZyYW1lOkkodCx0aGlzLmlucHV0SW1hZ2UpLHNlZ21lbnRhdGlvbl9tYXNrOkkodCx0aGlzLmlucHV0TWFzayksdGhyZXNob2xkOkkodCxhLm91dHB1dCksdGV4ZWxfc2l6ZTpbRixrXSxzdGVwOnYscmFkaXVzOkUsb2Zmc2V0OnY+MT92Ki41OjAsc2lnbWFfdGV4ZWw6TWF0aC5tYXgoRixrKSpFLHNpZ21hX2NvbG9yOi4xfX19KSx0aGlzLm91dHB1dD10aGlzLmpvaW50QmlsYXRlcmFsLm91dHB1dH1zZXREYXRhKHQsbil7dGhpcy5wcmV2aW91c0lucHV0SW1hZ2U9dGhpcy5pbnB1dEltYWdlP3RoaXMuaW5wdXRJbWFnZTp0LHRoaXMucHJldmlvdXNJbnB1dE1hc2s9dGhpcy5pbnB1dE1hc2s/dGhpcy5pbnB1dE1hc2s6bix0aGlzLmlucHV0SW1hZ2U9dCx0aGlzLmlucHV0TWFzaz1ufXNldE9wdGlvbnModCl7dGhpcy5vcHRpb25zPXR9cmVzaXplT3V0cHV0KHQsbil7c3VwZXIucmVzaXplT3V0cHV0KHQsbiksdGhpcy5vdXRwdXQ9dGhpcy5qb2ludEJpbGF0ZXJhbC5vdXRwdXR9fWNsYXNzICRme2NvbnN0cnVjdG9yKGUpe2wodGhpcywiY29udGV4dCIpO2wodGhpcywiZXh0ZW5zaW9uIik7bCh0aGlzLCJxdWVyaWVzIixbXSk7bCh0aGlzLCJhY3RpdmVRdWVyeSIpO3RoaXMuY29udGV4dD1lLHRoaXMuZXh0ZW5zaW9uPWUuZ2V0RXh0ZW5zaW9uKCJFWFRfZGlzam9pbnRfdGltZXJfcXVlcnlfd2ViZ2wyIil9c3RhcnQoKXt9c3RvcCgpe3RoaXMuYWN0aXZlUXVlcnkmJnRoaXMuY29udGV4dC5lbmRRdWVyeSh0aGlzLmV4dGVuc2lvbi5USU1FX0VMQVBTRURfRVhUKX1wdXNoQ29udGV4dChlKXt0aGlzLmNyZWF0ZVF1ZXJ5KCJQVVNIIixlKX1wb3BDb250ZXh0KGUpe3RoaXMuY3JlYXRlUXVlcnkoIlBPUCIsZSl9Y3JlYXRlUXVlcnkoZSx0KXt0aGlzLmFjdGl2ZVF1ZXJ5JiZ0aGlzLmNvbnRleHQuZW5kUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCksdGhpcy5hY3RpdmVRdWVyeT10aGlzLmNvbnRleHQuY3JlYXRlUXVlcnkoKSx0aGlzLmNvbnRleHQuYmVnaW5RdWVyeSh0aGlzLmV4dGVuc2lvbi5USU1FX0VMQVBTRURfRVhULHRoaXMuYWN0aXZlUXVlcnkpLHRoaXMucXVlcmllcy5wdXNoKHtuYW1lOnQsYWN0aW9uOmUscXVlcnk6dGhpcy5hY3RpdmVRdWVyeX0pfWFzeW5jIGdldFJlc29sdmVkUXVlcmllcygpe2NvbnN0IGU9KGF3YWl0IFByb21pc2UuYWxsKFsuLi50aGlzLnF1ZXJpZXNdLm1hcCh0PT50aGlzLnJlc29sdmVRdWVyeSh0KSkpKS5maWx0ZXIodD0+dCk7Zm9yKGxldCB0PTE7dDxlLmxlbmd0aDsrK3QpZVt0XS50aW1lc3RhbXArPWVbdC0xXS5kdXJhdGlvbitlW3QtMV0udGltZXN0YW1wO3JldHVybiBlfWFzeW5jIHJlc29sdmVRdWVyeShlKXtpZighYXdhaXQgdGhpcy5hd2FpdFF1ZXJ5QXZhaWxhYmxlKGUpKXtjb25zb2xlLmxvZygiVW5hd2FpdGFibGUgcXVlcnkiLGUpO3JldHVybn1pZih0aGlzLmNvbnRleHQuZ2V0UGFyYW1ldGVyKHRoaXMuZXh0ZW5zaW9uLkdQVV9ESVNKT0lOVF9FWFQpKXtjb25zb2xlLmxvZygiRGlzam9pbnRlZCBxdWVyeSIsZSk7cmV0dXJufXJldHVybnsuLi5lLGR1cmF0aW9uOnRoaXMuY29udGV4dC5nZXRRdWVyeVBhcmFtZXRlcihlLnF1ZXJ5LHRoaXMuY29udGV4dC5RVUVSWV9SRVNVTFQpLHRpbWVzdGFtcDowfX1hc3luYyBhd2FpdFF1ZXJ5QXZhaWxhYmxlKGUpe2ZvcihsZXQgdD0wO3Q8MTA7Kyt0KXtpZih0aGlzLmNvbnRleHQuZ2V0UXVlcnlQYXJhbWV0ZXIoZS5xdWVyeSx0aGlzLmNvbnRleHQuUVVFUllfUkVTVUxUX0FWQUlMQUJMRSkpcmV0dXJuIGU7YXdhaXQgU2koMjAwKX19fWNsYXNzIHp0e2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJjYW52YXMiKTtsKHRoaXMsImNvbnRleHQiKTtsKHRoaXMsInBpcGVsaW5lIik7bCh0aGlzLCJwcmV2aW91c0ltYWdlV2lkdGgiLDApO2wodGhpcywicHJldmlvdXNJbWFnZUhlaWdodCIsMCk7bCh0aGlzLCJwcmV2aW91c01hc2tXaWR0aCIsT2UpO2wodGhpcywicHJldmlvdXNNYXNrSGVpZ2h0IixPZSk7bCh0aGlzLCJwcm9maWxlciIpO2wodGhpcywicG9zdFByb2Nlc3NpbmdFbmFibGVkIiwhMCk7bCh0aGlzLCJpbXByb3ZlTWFzayIpO2NvbnN0IGU9bmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLHQ9ZS5nZXRDb250ZXh0KCJ3ZWJnbDIiKTtpZighdCl0aHJvdyJGYWlsIHRvIHJldHJpZXZlIHdlYmdsMiBjb250ZXh0Ijt0aGlzLmNhbnZhcz1lLHRoaXMuY29udGV4dD10LHRoaXMuaW1wcm92ZU1hc2s9bmV3IEdmKHRoaXMuY29udGV4dCxPZSxPZSl9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dGhpcy5pbXByb3ZlTWFzay5zZXRPcHRpb25zKGUpfWVuYWJsZVBvc3RQcm9jZXNzaW5nKCl7dGhpcy5wb3N0UHJvY2Vzc2luZ0VuYWJsZWQ9ITB9ZGlzYWJsZVBvc3RQcm9jZXNzaW5nKCl7dGhpcy5wb3N0UHJvY2Vzc2luZ0VuYWJsZWQ9ITF9YXN5bmMgcHJvZmlsZVdlYmdsKGUpe2NvbnN0IHQ9bmV3ICRmKHRoaXMuY29udGV4dCk7cmV0dXJuIHRoaXMucHJvZmlsZXI9dCx0LnN0YXJ0KCksYXdhaXQgU2koZSksdGhpcy5wcm9maWxlcj12b2lkIDAsdC5zdG9wKCksdC5nZXRSZXNvbHZlZFF1ZXJpZXMoKX1hc3luYyByZW5kZXIoZSx0KXt2YXIgbyxzO2lmKCF0aGlzLnBpcGVsaW5lKXRocm93Im1pc3NpbmcgcGlwZWxpbmUiOyh0aGlzLnByZXZpb3VzSW1hZ2VIZWlnaHQhPT1lLmhlaWdodHx8dGhpcy5wcmV2aW91c0ltYWdlV2lkdGghPT1lLndpZHRoKSYmdGhpcy5yZXNpemVPdXRwdXQoZS53aWR0aCxlLmhlaWdodCksKHRoaXMucHJldmlvdXNNYXNrSGVpZ2h0IT09dC5oZWlnaHR8fHRoaXMucHJldmlvdXNNYXNrV2lkdGghPT10LndpZHRoKSYmKHRoaXMuaW1wcm92ZU1hc2sucmVzaXplT3V0cHV0KHQud2lkdGgsdC5oZWlnaHQpLHRoaXMucHJldmlvdXNNYXNrV2lkdGg9dC53aWR0aCx0aGlzLnByZXZpb3VzTWFza0hlaWdodD10LmhlaWdodCk7Y29uc3Qgbj0icmVuZGVyZXIiOyhvPXRoaXMucHJvZmlsZXIpPT1udWxsfHxvLnB1c2hDb250ZXh0KG4pLHRoaXMuaW1wcm92ZU1hc2suc2V0UHJvZmlsZXIodGhpcy5wcm9maWxlciksdGhpcy5waXBlbGluZS5zZXRQcm9maWxlcih0aGlzLnByb2ZpbGVyKTtsZXQgaT10O3JldHVybiB0aGlzLnBvc3RQcm9jZXNzaW5nRW5hYmxlZCYmKHRoaXMuaW1wcm92ZU1hc2suc2V0RGF0YShlLHQpLHRoaXMuaW1wcm92ZU1hc2sucnVuKCksaT10aGlzLmltcHJvdmVNYXNrLm91dHB1dCksdGhpcy5waXBlbGluZS5zZXREYXRhKGUsaSksYXdhaXQgdGhpcy5waXBlbGluZS5ydW4oKSwocz10aGlzLnByb2ZpbGVyKT09bnVsbHx8cy5wb3BDb250ZXh0KG4pLHRoaXMuY2FudmFzfXJlc2l6ZU91dHB1dChlLHQpe3ZhciBuO3RoaXMuY2FudmFzLndpZHRoPWUsdGhpcy5jYW52YXMuaGVpZ2h0PXQsKG49dGhpcy5waXBlbGluZSk9PW51bGx8fG4ucmVzaXplT3V0cHV0KGUsdCksdGhpcy5wcmV2aW91c0ltYWdlV2lkdGg9ZSx0aGlzLnByZXZpb3VzSW1hZ2VIZWlnaHQ9dH19Y2xhc3MgRmkgZXh0ZW5kcyB6dHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCk7bCh0aGlzLCJwaXBlbGluZSIpO2wodGhpcywiYmFja2dyb3VuZEltYWdlIik7bCh0aGlzLCJiYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzIik7bCh0aGlzLCJiYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ29udGV4dCIpO2wodGhpcywiYmFja2dyb3VuZEltYWdlUmVzaXplciIpO3RoaXMucGlwZWxpbmU9bmV3IElpKHRoaXMuY29udGV4dCk7Y29uc3QgdD1uZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCksbj10LmdldENvbnRleHQoIndlYmdsMiIpO2lmKCFuKXRocm93IkZhaWwgdG8gcmV0cmlldmUgd2ViZ2wgY29udGV4dCI7dGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzPXQsdGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ29udGV4dD1uLHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplcj1uZXcgVGYodGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ29udGV4dCwwLDApfXNldEJhY2tncm91bmRJbWFnZSh0KXt0aGlzLmJhY2tncm91bmRJbWFnZT10LHRoaXMudXBkYXRlQmFja2dyb3VuZEltYWdlKCl9dXBkYXRlQmFja2dyb3VuZEltYWdlKCl7Y29uc3R7d2lkdGg6dCxoZWlnaHQ6bn09dGhpcy5jYW52YXM7dGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyLnJlc2l6ZU91dHB1dCh0LG4pLHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplci5zZXREYXRhKHRoaXMuYmFja2dyb3VuZEltYWdlKSx0aGlzLmJhY2tncm91bmRJbWFnZVJlc2l6ZXIucnVuKCksdGhpcy5waXBlbGluZS5pbnB1dEJhY2tncm91bmRJbWFnZT10aGlzLmJhY2tncm91bmRJbWFnZVJlc2l6ZXJDYW52YXN9cmVzaXplT3V0cHV0KHQsbil7c3VwZXIucmVzaXplT3V0cHV0KHQsbiksdGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzLndpZHRoPXQsdGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzLmhlaWdodD1uLHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplci5yZXNpemVPdXRwdXQodCxuKSx0aGlzLnVwZGF0ZUJhY2tncm91bmRJbWFnZSgpfX1jbGFzcyBXZiBleHRlbmRzIEZpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKTtsKHRoaXMsImZyYW1lUmVhZGVyIil9c2V0QmFja2dyb3VuZFZpZGVvKHQpe3RoaXMuZnJhbWVSZWFkZXI9dC5nZXRSZWFkZXIoKSx0aGlzLnJlYWROZXh0VmlkZW9GcmFtZSgpfWFzeW5jIHJlbmRlcih0LG4pe3JldHVybiBhd2FpdCB0aGlzLnJlYWROZXh0VmlkZW9GcmFtZSgpLHN1cGVyLnJlbmRlcih0LG4pfWFzeW5jIHJlYWROZXh0VmlkZW9GcmFtZSgpe3ZhciBuO2NvbnN0IHQ9YXdhaXQoKG49dGhpcy5mcmFtZVJlYWRlcik9PW51bGw/dm9pZCAwOm4ucmVhZCgpKTtpZih0IT1udWxsJiZ0LnZhbHVlKXtjb25zdCBpPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKHQudmFsdWUpO3RoaXMuc2V0QmFja2dyb3VuZEltYWdlKGkpLHQudmFsdWUuY2xvc2UoKX19fWNsYXNzIFBpe2JsdXJCYWNrZ3JvdW5kKGUpe3JldHVybiBuZXcgbHMoZSl9Ymx1clNpbGhvdWV0dGUoZSl7cmV0dXJuIG5ldyBkcyhlKX1pbWFnZUJhY2tncm91bmQoKXtyZXR1cm4gbmV3IGhzfXZpZGVvQmFja2dyb3VuZCgpe3JldHVybiBuZXcgV2Z9fXZhciBWZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwp1bmlmb3JtIHNhbXBsZXIyRCBtYXNrOwoKdmVjNCBsb29wKCk7Cgp2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IGxvb3AoKTsgfQpgLEhmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgamYgZXh0ZW5kcyBFZXtnZXREZWZpbmVzKCl7dmFyIGU7cmV0dXJue1JBRElVUzooZT10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD9lOjF9fWdldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIFZmK3RoaXMuY3JlYXRlTG9vcEZ1bmN0aW9uKCl9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIEhmfWNyZWF0ZUxvb3BGdW5jdGlvbigpe3ZhciB0O2xldCBlPSh0PXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP3Q6MTtyZXR1cm5gCgogICAgICAgIHZlYzQgbG9vcCgpIHsgCiAgICAgICAgICAgIHZlYzQgcmVzdWx0ID0gdmVjNCgwLDAsMCwwKTsKICAgICAgICAgICAgZmxvYXQgZmFjdG9yU3VtID0gMC47CgogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRSYWRpdXMgPSB2ZWMyKC0ke2V9LikgLyBjYW52YXM7CiAgICAgICAgICAgIHZlYzIgbm9ybWFsaXplZEluY3JlbWVudCA9IHZlYzIoMS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIGRpZmYgPSBub3JtYWxpemVkUmFkaXVzOwogICAgICAgICAgICBmbG9hdCBtYXhMZW5ndGggPSBsZW5ndGgobm9ybWFsaXplZFJhZGl1cyk7CgogICAgICAgICAgICBmb3IoaW50IHk9LSR7ZX07IHk8JHtlKzF9OyArK3kpIHsKICAgICAgICAgICAgICAgIGZvcihpbnQgeD0tJHtlfTsgeDwke2UrMX07ICsreCkgewogICAgICAgICAgICAgICAgICAgIGZsb2F0IGZhY3RvciA9ICgxLi0gdGV4dHVyZTJEKG1hc2ssIF90ZXh0dXJlX2Nvb3JkICsgZGlmZikuYSkgKiAobWF4TGVuZ3RoIC0gbGVuZ3RoKGRpZmYpKSAvIG1heExlbmd0aDsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gZmFjdG9yICogdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkICsgZGlmZik7CiAgICAgICAgICAgICAgICAgICAgZmFjdG9yU3VtICs9IGZhY3RvcjsKICAgICAgICAgICAgICAgICAgICBkaWZmLnggKz0gbm9ybWFsaXplZEluY3JlbWVudC54OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZGlmZi55ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueTsKICAgICAgICAgICAgICAgIGRpZmYueCA9IG5vcm1hbGl6ZWRSYWRpdXMueDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVzdWx0IC8gZmFjdG9yU3VtOwogICAgICAgIH1gfX1jb25zdCBZZj0xMCxYZj0yLFFmPTg7Y2xhc3MgcWYgZXh0ZW5kcyBMcntjb25zdHJ1Y3Rvcih0LG4pe3N1cGVyKCk7bCh0aGlzLCJpbnB1dEltYWdlIik7bCh0aGlzLCJpbnB1dE1hc2siKTtsKHRoaXMsImJsdXIiKTt0aGlzLmNvbnRleHQ9dCx0aGlzLnJhZGl1cz1uO2NvbnN0IGk9e2NvbnRleHQ6dCxoZWlnaHQ6dC5jYW52YXMuaGVpZ2h0LHdpZHRoOnQuY2FudmFzLndpZHRofTt0aGlzLmJsdXI9bmV3IGpmKHsuLi5pLHJhZGl1czpuLC4uLnRoaXMuZ2V0Qmx1clRleHR1cmVTaXplKHQuY2FudmFzLndpZHRoLHQuY2FudmFzLmhlaWdodCl9KTtjb25zdCBvPW5ldyBVcih7Li4uaSxkaXNhYmxlRnJhbWVidWZmZXI6ITB9KTt0aGlzLmFkZFN0ZXAoe3Byb2dyYW06dGhpcy5ibHVyLHByZXZlbnRSZXNpemU6ITAsZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpJKHQsdGhpcy5pbnB1dEltYWdlKSxtYXNrOkkodCx0aGlzLmlucHV0TWFzayl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpvLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6SSh0LHRoaXMuYmx1ci5vdXRwdXQpLGZvcmVncm91bmQ6SSh0LHRoaXMuaW5wdXRJbWFnZSksdGhyZXNob2xkOkkodCx0aGlzLmlucHV0TWFzayl9KX0pfWdldEJsdXJUZXh0dXJlU2l6ZSh0LG4pe2NvbnN0IGk9dGhpcy5yYWRpdXM+WWY/UWY6WGY7cmV0dXJue3dpZHRoOk1hdGgubWF4KE9lLHQvaSksaGVpZ2h0Ok1hdGgubWF4KE9lLG4vaSl9fXNldERhdGEodCxuKXt0aGlzLmlucHV0SW1hZ2U9dCx0aGlzLmlucHV0TWFzaz1ufXJlc2l6ZU91dHB1dCh0LG4pe3N1cGVyLnJlc2l6ZU91dHB1dCh0LG4pO2NvbnN0IGk9dGhpcy5nZXRCbHVyVGV4dHVyZVNpemUodCxuKTt0aGlzLmJsdXIucmVzaXplT3V0cHV0KGkud2lkdGgsaS5oZWlnaHQpfX1jbGFzcyBLZiBleHRlbmRzIHp0e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCk7bCh0aGlzLCJwaXBlbGluZSIpO3RoaXMucGlwZWxpbmU9bmV3IHFmKHRoaXMuY29udGV4dCx0KSx0aGlzLmRpc2FibGVQb3N0UHJvY2Vzc2luZygpfX1jbGFzcyBKZiBleHRlbmRzIExye2NvbnN0cnVjdG9yKHQsbil7c3VwZXIoKTtsKHRoaXMsImlucHV0SW1hZ2UiKTtsKHRoaXMsImlucHV0TWFzayIpO3RoaXMuY29udGV4dD10O2NvbnN0IGk9e2NvbnRleHQ6dCxoZWlnaHQ6dC5jYW52YXMuaGVpZ2h0LHdpZHRoOnQuY2FudmFzLndpZHRofSxvPW5ldyBSaSh7Li4uaSxyYWRpdXM6bix0eXBlOnpyLkdBVVNTSUFOfSkscz1uZXcgVXIoey4uLmksZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSk7dGhpcy5hZGRTdGVwKHtwcm9ncmFtOm8sZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpJKHQsdGhpcy5pbnB1dEltYWdlKX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOnMsZ2V0VW5pZm9ybXM6KCk9Pih7YmFja2dyb3VuZDpJKHQsdGhpcy5pbnB1dEltYWdlKSxmb3JlZ3JvdW5kOkkodCxvLm91dHB1dCksdGhyZXNob2xkOkkodCx0aGlzLmlucHV0TWFzayl9KX0pfXNldERhdGEodCxuKXt0aGlzLmlucHV0SW1hZ2U9dCx0aGlzLmlucHV0TWFzaz1ufX1jbGFzcyBaZiBleHRlbmRzIHp0e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCk7bCh0aGlzLCJwaXBlbGluZSIpO3RoaXMucGlwZWxpbmU9bmV3IEpmKHRoaXMuY29udGV4dCx0KSx0aGlzLmRpc2FibGVQb3N0UHJvY2Vzc2luZygpfX1jbGFzcyBlbCBleHRlbmRzIElpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKTtsKHRoaXMsImZyYW1lUmVhZGVyIik7bCh0aGlzLCJwcmVjaXNlTWFza0VuYWJsZWQiLCEwKX1zZXQgaW5wdXRWaWRlbyh0KXt0aGlzLmZyYW1lUmVhZGVyPXQuZ2V0UmVhZGVyKCksdGhpcy5yZWFkTmV4dFZpZGVvRnJhbWUoKX1hc3luYyBydW4oKXt0aGlzLmZyYW1lUmVhZGVyJiYoYXdhaXQgc3VwZXIucnVuKCksdGhpcy5yZWFkTmV4dFZpZGVvRnJhbWUoKSl9YXN5bmMgcmVhZE5leHRWaWRlb0ZyYW1lKCl7dmFyIG47Y29uc3QgdD1hd2FpdCgobj10aGlzLmZyYW1lUmVhZGVyKT09bnVsbD92b2lkIDA6bi5yZWFkKCkpO3QhPW51bGwmJnQudmFsdWUmJih0aGlzLmlucHV0QmFja2dyb3VuZEltYWdlPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKHQudmFsdWUpLHQudmFsdWUuY2xvc2UoKSl9fWNsYXNzIHRsIGV4dGVuZHMgenR7Y29uc3RydWN0b3IoKXtzdXBlcigpO2wodGhpcywicGlwZWxpbmUiKTt0aGlzLnBpcGVsaW5lPW5ldyBlbCh0aGlzLmNvbnRleHQpfXNldEJhY2tncm91bmRWaWRlbyh0KXt0aGlzLnBpcGVsaW5lLmlucHV0VmlkZW89dH19Y2xhc3Mga2l7Ymx1ckJhY2tncm91bmQoZSl7cmV0dXJuIG5ldyBLZihlKX1ibHVyU2lsaG91ZXR0ZShlKXtyZXR1cm4gbmV3IFpmKGUpfWltYWdlQmFja2dyb3VuZCgpe3JldHVybiBuZXcgRml9dmlkZW9CYWNrZ3JvdW5kKCl7cmV0dXJuIG5ldyB0bH19Y2xhc3Mgcmx7Y29uc3RydWN0b3IoZSl7bCh0aGlzLCJmYWN0b3J5Iik7c3dpdGNoKGUpe2Nhc2UgeXQuQ0FOVkFTOnRoaXMuZmFjdG9yeT1uZXcgUGk7YnJlYWs7Y2FzZSB5dC5XRUJHTDp0aGlzLmZhY3Rvcnk9bmV3IGtpO2JyZWFrO2RlZmF1bHQ6Y29uc3QgdD1mcygpO3RoaXMuZmFjdG9yeT10LnN1cHBvcnRlZD9uZXcga2k6bmV3IFBpfX1ibHVyQmFja2dyb3VuZChlKXtyZXR1cm4gdGhpcy5nZXRGYWN0b3J5KCkuYmx1ckJhY2tncm91bmQoZSl9Ymx1clNpbGhvdWV0dGUoZSl7cmV0dXJuIHRoaXMuZ2V0RmFjdG9yeSgpLmJsdXJTaWxob3VldHRlKGUpfWltYWdlQmFja2dyb3VuZCgpe3JldHVybiB0aGlzLmdldEZhY3RvcnkoKS5pbWFnZUJhY2tncm91bmQoKX12aWRlb0JhY2tncm91bmQoKXtyZXR1cm4gdGhpcy5nZXRGYWN0b3J5KCkudmlkZW9CYWNrZ3JvdW5kKCl9Z2V0RmFjdG9yeSgpe2lmKCF0aGlzLmZhY3RvcnkpdGhyb3ciRmFjdG9yeSBpcyBub3QgaW5pdGlhbGl6ZWQiO3JldHVybiB0aGlzLmZhY3Rvcnl9fWNsYXNzIG5se2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJyZW5kZXJlciIpfXNldEJhY2tncm91bmRPcHRpb25zKGUpe3ZhciBuLGk7Y29uc3QgdD1uZXcgcmwoKG49ZS5yZW5kZXJpbmdPcHRpb25zKT09bnVsbD92b2lkIDA6bi50eXBlKTtzd2l0Y2goZS50cmFuc2Zvcm1lclR5cGUpe2Nhc2UiQmFja2dyb3VuZEJsdXIiOnRoaXMucmVuZGVyZXI9dC5ibHVyQmFja2dyb3VuZCh0aGlzLmdldEJsdXJTaXplKGUucmFkaXVzKSk7YnJlYWs7Y2FzZSJTaWxob3VldHRlQmx1ciI6dGhpcy5yZW5kZXJlcj10LmJsdXJTaWxob3VldHRlKHRoaXMuZ2V0Qmx1clNpemUoZS5yYWRpdXMpKTticmVhaztjYXNlIlZpZGVvQmFja2dyb3VuZCI6dGhpcy5yZW5kZXJlcj10LnZpZGVvQmFja2dyb3VuZCgpO2JyZWFrO2Nhc2UiVmlydHVhbEJhY2tncm91bmQiOnRoaXMucmVuZGVyZXI9dC5pbWFnZUJhY2tncm91bmQoKTticmVhaztkZWZhdWx0OnRocm93YFVua25vd24gcmVuZGVyaW5nIHR5cGUgWyR7ZS50cmFuc2Zvcm1lclR5cGV9XWB9KChpPWUucmVuZGVyaW5nT3B0aW9ucyk9PW51bGw/dm9pZCAwOmkudHlwZSk9PT15dC5XRUJHTCYmKGUucmVuZGVyaW5nT3B0aW9ucy5zZWxmaWVTZWdtZW50YXRpb25UeXBlPT09bnIuUFJFQ0lTRT90aGlzLnJlbmRlcmVyLmVuYWJsZVBvc3RQcm9jZXNzaW5nKCk6ZS5yZW5kZXJpbmdPcHRpb25zLnNlbGZpZVNlZ21lbnRhdGlvblR5cGU9PT1uci5GQVNUJiZ0aGlzLnJlbmRlcmVyLmRpc2FibGVQb3N0UHJvY2Vzc2luZygpKX1zZXRGbGlja2VyaW5nT3B0aW9ucyhlKXt2YXIgdDsodD10aGlzLnJlbmRlcmVyKT09bnVsbHx8dC5zZXRGbGlja2VyaW5nT3B0aW9ucyhlKX1zZXRWaWRlb0JHUmVhZGFibGUoZSl7Y29uc3QgdD10aGlzLnJlbmRlcmVyO3Quc2V0QmFja2dyb3VuZFZpZGVvJiZ0LnNldEJhY2tncm91bmRWaWRlbyhlKX1hc3luYyBzZXRWaXJ0dWFsQkdJbWFnZShlKXtjb25zdCB0PXRoaXMucmVuZGVyZXI7dC5zZXRCYWNrZ3JvdW5kSW1hZ2UmJnQuc2V0QmFja2dyb3VuZEltYWdlKGUpfWFzeW5jIHByb2Nlc3MoZSx0KXtpZih0aGlzLnJlbmRlcmVyKXJldHVybiB0aGlzLnJlbmRlcmVyLnJlbmRlcihlLHQpfWFzeW5jIHJlc2l6ZUZvcmVncm91bmQoZSx0KXt9Z2V0Qmx1clNpemUoZT1ndC5Mb3cpe3N3aXRjaChlKXtjYXNlIGd0LkxvdzpyZXR1cm4gNTtjYXNlIGd0LkhpZ2g6cmV0dXJuIDEyfXJldHVybiBlfWFzeW5jIHByb2ZpbGUoZSl7dmFyIHQsbjtyZXR1cm4obj0odD10aGlzLnJlbmRlcmVyKT09bnVsbD92b2lkIDA6dC5wcm9maWxlV2ViZ2woZSkpIT1udWxsP246W119fWNsYXNzIGlse2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJzZWxmaWVTZWdtZW50YXRpb24iLG5ldyBjcyk7bCh0aGlzLCJiYWNrZ3JvdW5kRmlsdGVyIik7bCh0aGlzLCJyZXBvcnRlciIsbmV3IHJzKTtsKHRoaXMsImlzRW5hYmxlZCIsITApO2wodGhpcywiYmFja2dyb3VuZE9wdGlvbnMiKX1hc3luYyBpbml0KGUsdCl7YXdhaXQgdGhpcy5zZWxmaWVTZWdtZW50YXRpb24uaW5pdCh0Lndhc21Bc3NldFVyaVBhdGgsdC50ZmxpdGVBc3NldFVyaVBhdGgpLHRoaXMuYmFja2dyb3VuZEZpbHRlcj1uZXcgbmwsdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiQ3JlYXRlIn0pfWFzeW5jIHRyYW5zZm9ybShlLHQpe3ZhciBhLHU7aWYoIXRoaXMuaXNFbmFibGVkKXJldHVybiB0LmVucXVldWUoZSk7bGV0IG47Y29uc3QgaT0oYT1lLnRpbWVzdGFtcCkhPW51bGw/YTowLG89YXdhaXQgY3JlYXRlSW1hZ2VCaXRtYXAoZSkscz1hd2FpdCB0aGlzLnNlbGZpZVNlZ21lbnRhdGlvbi5wcm9jZXNzKG8pO3MmJihuPWF3YWl0KCh1PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnUucHJvY2VzcyhvLHMpKSksbj8oZS5jbG9zZSgpLHQuZW5xdWV1ZShuZXcgVmlkZW9GcmFtZShuLHt0aW1lc3RhbXA6aSxhbHBoYToiZGlzY2FyZCJ9KSkpOnQuZW5xdWV1ZShlKX1hc3luYyBzZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKXt2YXIgdDt0aGlzLmJhY2tncm91bmRPcHRpb25zPWUsYXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dC5zZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKSksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiVXBkYXRlIn0pfWFzeW5jIHNldFZpZGVvQkdSZWFkYWJsZShlKXt2YXIgdDthd2FpdCgodD10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp0LnNldFZpZGVvQkdSZWFkYWJsZShlKSl9YXN5bmMgc2V0VmlydHVhbEJHSW1hZ2UoZSl7dmFyIHQ7YXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dC5zZXRWaXJ0dWFsQkdJbWFnZShlKSl9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dmFyIHQ7KHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbHx8dC5zZXRGbGlja2VyaW5nT3B0aW9ucyhlKSx0aGlzLnJlcG9ydCh7dmFyaWF0aW9uOiJVcGRhdGUifSl9YXN5bmMgcHJvZmlsZShlKXt2YXIgdCxuO3JldHVybihuPSh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnQucHJvZmlsZShlKSkhPW51bGw/bjpbXX1nZXRUcmFuc2Zvcm1lclR5cGUoKXt2YXIgZSx0O3JldHVybih0PShlPXRoaXMuYmFja2dyb3VuZE9wdGlvbnMpPT1udWxsP3ZvaWQgMDplLnRyYW5zZm9ybWVyVHlwZSkhPW51bGw/dDoiVW5kZWZpbmVkIn1lbmFibGUoKXt0aGlzLmlzRW5hYmxlZD0hMH1kaXNhYmxlKCl7dGhpcy5pc0VuYWJsZWQ9ITF9cmVwb3J0KGUpe3ZhciB0O3RoaXMucmVwb3J0ZXIuc2VuZCh7dmVyc2lvbjpucyxhY3Rpb246Ik1sVHJhbnNmb3JtZXJzIix0cmFuc2Zvcm1lclR5cGU6KHQ9dGhpcy5iYWNrZ3JvdW5kT3B0aW9ucyk9PW51bGw/dm9pZCAwOnQudHJhbnNmb3JtZXJUeXBlLGNvbmZpZzpKU09OLnN0cmluZ2lmeSh0aGlzLmJhY2tncm91bmRPcHRpb25zKSwuLi5lfSl9fWNvbnN0ICRyPWNsYXNze2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJiYWNrZ3JvdW5kVHJhbnNmb3JtZXIiLG5ldyBpbCk7bCh0aGlzLCJtZWRpYVByb2Nlc3NvciIsbmV3IERvKTtsKHRoaXMsInJhdGUiLDMwKTtsKHRoaXMsInJlc29sdmVPbk1lZGlhUHJvY2Vzc29yIik7bCh0aGlzLCJldmVudHNRdWV1ZSIsW10pfWFzeW5jIGluaXQoZSx0KXthd2FpdCB0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5pbml0KGUsdCksYXdhaXQgdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFuc2Zvcm1lcnMoW3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyXSksdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnJhdGUpLHRoaXMubWVkaWFQcm9jZXNzb3Iub25BbnkoKG4saSk9Pnt0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yPyh0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yKHtuYW1lOm4sZGF0YTppfSksdGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcj12b2lkIDApOnRoaXMuZXZlbnRzUXVldWUucHVzaCh7bmFtZTpuLGRhdGE6aX0pfSl9ZW5hYmxlKCl7dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuZW5hYmxlKCl9ZGlzYWJsZSgpe3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLmRpc2FibGUoKX1hc3luYyBvbk1lZGlhUHJvY2Vzc29yRXZlbnQoKXtyZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoZT0+e3RoaXMuZXZlbnRzUXVldWUubGVuZ3RoPjA/ZSh0aGlzLmV2ZW50c1F1ZXVlLnNoaWZ0KCkpOnRoaXMucmVzb2x2ZU9uTWVkaWFQcm9jZXNzb3I9ZX0pfWFzeW5jIHNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMucmF0ZT1lLHRoaXMubWVkaWFQcm9jZXNzb3Iuc2V0VHJhY2tFeHBlY3RlZFJhdGUoZSl9YXN5bmMgdHJhbnNmb3JtKGUsdCl7dGhpcy5tZWRpYVByb2Nlc3Nvci50cmFuc2Zvcm0oZSx0KX1hc3luYyBzZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKXt2YXIgdDthd2FpdCgodD10aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lcik9PW51bGw/dm9pZCAwOnQuc2V0QmFja2dyb3VuZE9wdGlvbnMoZSkpfXNldFZpZGVvQkdSZWFkYWJsZShlKXt0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5zZXRWaWRlb0JHUmVhZGFibGUoZSl9YXN5bmMgc2V0VmlydHVhbEJHSW1hZ2UoZSl7YXdhaXQgdGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuc2V0VmlydHVhbEJHSW1hZ2UoZSl9YXN5bmMgdGVybWluYXRlKCl7YXdhaXQgdGhpcy5tZWRpYVByb2Nlc3Nvci5kZXN0cm95KCl9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuc2V0RmxpY2tlcmluZ09wdGlvbnMoZSl9c2V0Vm9uYWdlTWV0YWRhdGEoZSl7SW8oZSl9YXN5bmMgcHJvZmlsZShlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXdhaXQgdGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIucHJvZmlsZShlKSl9fTtsZXQgRGk9JHI7KCgpPT57SGkoIlByb2Nlc3NvcldvcmtlciIsJHIpfSkoKX0pKCk7Cg==",p2=typeof window<"u"&&window.Blob&&new Blob([atob(m2)],{type:"text/javascript;charset=utf-8"});function U3(){const i=p2&&(window.URL||window.webkitURL).createObjectURL(p2);try{return i?new Worker(i):new Worker("data:application/javascript;base64,"+m2)}finally{i&&(window.URL||window.webkitURL).revokeObjectURL(i)}}const bs=class extends ur{constructor(r){super();Zt(this,"rate",30);Zt(this,"worker");Zt(this,"config");Zt(this,"backgroundOptions");Zt(this,"isEnabled",!0);this.config=r}async setTrackExpectedRate(r){var f;await this.startWorker(),await((f=this.worker)==null?void 0:f.setTrackExpectedRate(r))}async setBackgroundOptions(r){this.backgroundOptions=r,await this.updateBackgroundOptions(r)}async transform(r,f){var Z;await this.startWorker(),await((Z=this.worker)==null?void 0:Z.transform(r,f))}async destroy(){var r;await((r=this.worker)==null?void 0:r.terminate()),this.worker=void 0}async setFlickeringOptions(r){var f;await this.startWorker(),await((f=this.worker)==null?void 0:f.setFlickeringOptions(r))}async profile(r){var Z;const f=await((Z=this.worker)==null?void 0:Z.profile(r));return JSON.parse(f!=null?f:"[]")}async enable(){var r;this.isEnabled=!0,await((r=this.worker)==null?void 0:r.enable())}async disable(){var r;this.isEnabled=!1,await((r=this.worker)==null?void 0:r.disable())}async listenWorker(){var r,f;for(;(r=this.worker)!=null&&r.workerContext.worker;){const{name:Z,data:x}=await((f=this.worker)==null?void 0:f.onMediaProcessorEvent());switch(Z){case"error":case"warn":this.emit(Z,x);break;case"pipelineInfo":switch(this.emit(Z,x),x){case"pipeline_ended":case"pipeline_ended_with_error":await this.destroy();return}break}}}async startWorker(){!this.config||this.worker||(this.worker=await bc(fs,U3),this.isEnabled||await this.worker.disable(),await this.worker.init(`worker_${bs.initCount++}`,this.config),this.backgroundOptions&&await this.updateBackgroundOptions(this.backgroundOptions),await this.worker.setVonageMetadata(yi()),await this.setBackgroundOptions(this.config),this.listenWorker())}async updateBackgroundOptions(r){var Z,x,H;await this.startWorker(),await((Z=this.worker)==null?void 0:Z.setBackgroundOptions(r));const{transformerType:f}=r;switch(f){case"VideoBackground":await((x=this.worker)==null?void 0:x.setVideoBGReadable(await Ks.createVideoReadable(r.backgroundAssetUri)));break;case"VirtualBackground":await((H=this.worker)==null?void 0:H.setVirtualBGImage(await Ks.createImageCanvas(r.backgroundAssetUri)));break}}};let po=bs;Zt(po,"initCount",0);class K3{constructor(n){this.queries=n}async downloadSpeedscope(){this.download(await this.convertToSpeedscope())}download(n){const r=document.createElement("a");r.href=URL.createObjectURL(new Blob([n],{type:"application/json"})),r.download=`profile-${+new Date}.speedscope.json`,document.body.appendChild(r),r.click(),document.body.removeChild(r)}convertToSpeedscope(){const n=[],r={},f=[];let Z=0;for(const H of this.queries){const T=[];for(const J of H)r[J.name]===void 0&&(r[J.name]=n.length,n.push({name:J.name})),T.push({type:J.action==u2.PUSH?"O":"C",frame:r[J.name],at:J.timestamp}),Z=Math.max(Z,J.timestamp+J.duration);f.push({events:T,type:"evented",name:"GPU Profile",unit:"nanoseconds",startValue:0,endValue:Z})}const x={$schema:"https://www.speedscope.app/file-format-schema.json",shared:{frames:n},profiles:f};return JSON.stringify(x,null,2)}}class ms extends ur{constructor(r){super();Zt(this,"worker");Zt(this,"connector");this.worker=new po(r),this.connector=new $2(this.worker),this.worker.onAny((f,Z)=>this.emit(f,Z))}async setBackgroundOptions(r){await this.worker.setBackgroundOptions(r)}async enable(){await this.worker.enable()}async disable(){await this.worker.disable()}setTrackExpectedRate(r){this.worker.setTrackExpectedRate(r)}getConnector(){return this.connector}async profile(r){return this.worker.profile(r)}static async profile(r){const f=await Promise.all(this.instances.map(Z=>Z.profile(r)));return new K3(f)}static async create(r){const f=new this(r);return this.instances.push(f),f}}Zt(ms,"instances",[]);function B3(){return Gi}function M3(){return Xi}function A3(){return Vi}function z3(){return Wi}function j3(){return Ri}function O3(){return Ii}function P3(){return xi}async function _3(i){return await ms.create(i)}Ue.BackgroundTransformer=f2,Ue.BackgroundTransformerType=xs,Ue.BlurRadius=Dr,Ue.ErrorFunction=Is,Ue.MediapipeHelper=Si,Ue.PipelineInfoData=Zi,Ue.RenderingType=$r,Ue.VonageMediaProcessor=ms,Ue.WarningType=Rs,Ue.WebglSelfieSegmentationType=vi,Ue.createVonageMediaProcessor=_3,Ue.getSupportedBrowserFeatures=Ts,Ue.getVonageFaceDetection=z3,Ue.getVonageFaceMash=j3,Ue.getVonageHands=M3,Ue.getVonageHolistic=A3,Ue.getVonageObjectron=O3,Ue.getVonagePose=P3,Ue.getVonageSelfieSegmentation=B3,Ue.isSupported=oc,Object.defineProperties(Ue,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
458
|
+
}`}}const T3=10,Y3=2,w3=8;class L3 extends as{constructor(r,f){super();gt(this,"inputImage");gt(this,"inputMask");gt(this,"blur");this.context=r,this.radius=f;const Z={context:r,height:r.canvas.height,width:r.canvas.width};this.blur=new S3({...Z,radius:f,...this.getBlurTextureSize(r.canvas.width,r.canvas.height)});const x=new cs({...Z,disableFramebuffer:!0});this.addStep({program:this.blur,preventResize:!0,getUniforms:()=>({texture:pn(r,this.inputImage),mask:pn(r,this.inputMask)})}),this.addStep({program:x,getUniforms:()=>({background:pn(r,this.blur.output),foreground:pn(r,this.inputImage),threshold:pn(r,this.inputMask)})})}getBlurTextureSize(r,f){const Z=this.radius>T3?w3:Y3;return{width:Math.max(Pr,r/Z),height:Math.max(Pr,f/Z)}}setData(r,f){this.inputImage=r,this.inputMask=f}resizeOutput(r,f){super.resizeOutput(r,f);const Z=this.getBlurTextureSize(r,f);this.blur.resizeOutput(Z.width,Z.height)}}class H3 extends mo{constructor(r){super();gt(this,"pipeline");this.pipeline=new L3(this.context,r),this.disablePostProcessing()}}class F3 extends as{constructor(r,f){super();gt(this,"inputImage");gt(this,"inputMask");this.context=r;const Z={context:r,height:r.canvas.height,width:r.canvas.width},x=new cc({...Z,radius:f,type:ds.GAUSSIAN}),H=new cs({...Z,disableFramebuffer:!0});this.addStep({program:x,getUniforms:()=>({texture:pn(r,this.inputImage)})}),this.addStep({program:H,getUniforms:()=>({background:pn(r,this.inputImage),foreground:pn(r,x.output),threshold:pn(r,this.inputMask)})})}setData(r,f){this.inputImage=r,this.inputMask=f}}class C3 extends mo{constructor(r){super();gt(this,"pipeline");this.pipeline=new F3(this.context,r),this.disablePostProcessing()}}class J3 extends sc{constructor(){super(...arguments);gt(this,"frameReader");gt(this,"preciseMaskEnabled",!0)}set reader(r){this.frameReader=r}async run(){this.frameReader&&(await this.readNextVideoFrame(),await super.run())}async readNextVideoFrame(){var f;const r=await((f=this.frameReader)==null?void 0:f.read());r!=null&&r.value&&(this.inputBackgroundImage=await createImageBitmap(r.value),r.value.close())}}class k3 extends mo{constructor(){super();gt(this,"pipeline");this.pipeline=new J3(this.context)}setBackgroundVideo(r){this.pipeline.reader=r}}class hc{blurBackground(n){return new H3(n)}blurSilhouette(n){return new C3(n)}imageBackground(){return new ac}videoBackground(){return new k3}}class N3{constructor(n){gt(this,"factory");switch(n){case $r.CANVAS:this.factory=new dc;break;case $r.WEBGL:this.factory=new hc;break;default:const r=Ys();this.factory=r.supported?new hc:new dc}}blurBackground(n){return this.getFactory().blurBackground(n)}blurSilhouette(n){return this.getFactory().blurSilhouette(n)}imageBackground(){return this.getFactory().imageBackground()}videoBackground(){return this.getFactory().videoBackground()}getFactory(){if(!this.factory)throw"Factory is not initialized";return this.factory}}class E3{constructor(){gt(this,"renderer");gt(this,"backgroundVideo");gt(this,"backgroundImage")}setBackgroundOptions(n){var f,Z;const r=new N3((f=n.renderingOptions)==null?void 0:f.type);switch(n.transformerType){case"BackgroundBlur":this.renderer=r.blurBackground(this.getBlurSize(n.radius));break;case"SilhouetteBlur":this.renderer=r.blurSilhouette(this.getBlurSize(n.radius));break;case"VideoBackground":const x=r.videoBackground();this.backgroundVideo&&x.setBackgroundVideo(this.backgroundVideo),this.renderer=x;break;case"VirtualBackground":const H=r.imageBackground();this.backgroundImage&&H.setBackgroundImage(this.backgroundImage),this.renderer=H;break;default:throw`Unknown rendering type [${n.transformerType}]`}((Z=n.renderingOptions)==null?void 0:Z.type)===$r.WEBGL&&(n.renderingOptions.selfieSegmentationType===vi.PRECISE?this.renderer.enablePostProcessing():n.renderingOptions.selfieSegmentationType===vi.FAST&&this.renderer.disablePostProcessing())}setFlickeringOptions(n){var r;(r=this.renderer)==null||r.setFlickeringOptions(n)}setVideoBGReadable(n){this.backgroundVideo=n.getReader();const r=this.renderer;r!=null&&r.setBackgroundVideo&&r.setBackgroundVideo(this.backgroundVideo)}async setVirtualBGImage(n){const r=this.renderer;r!=null&&r.setBackgroundImage&&r.setBackgroundImage(n),this.backgroundImage=n}async process(n,r){if(this.renderer)return this.renderer.render(n,r)}async resizeForeground(n,r){}getBlurSize(n=Dr.Low){switch(n){case Dr.Low:return 5;case Dr.High:return 12}return n}async profile(n){var r,f;return(f=(r=this.renderer)==null?void 0:r.profileWebgl(n))!=null?f:[]}}class fc{constructor(){gt(this,"selfieSegmentation",new Ss);gt(this,"backgroundFilter");gt(this,"reporter",new j2);gt(this,"isEnabled",!0);gt(this,"backgroundOptions")}async init(n,r){await this.selfieSegmentation.init(r.wasmAssetUriPath,r.tfliteAssetUriPath),this.backgroundFilter=new E3,this.report({variation:"Create"})}async transform(n,r){var T,J;if(!this.isEnabled)return r.enqueue(n);let f;const Z=(T=n.timestamp)!=null?T:0,x=await createImageBitmap(n),H=await this.selfieSegmentation.process(x);H&&(f=await((J=this.backgroundFilter)==null?void 0:J.process(x,H))),f?(n.close(),r.enqueue(new VideoFrame(f,{timestamp:Z,alpha:"discard"}))):r.enqueue(n)}async setBackgroundOptions(n){var r;this.backgroundOptions=n,await((r=this.backgroundFilter)==null?void 0:r.setBackgroundOptions(n)),this.report({variation:"Update"})}async setVideoBGReadable(n){var r;await((r=this.backgroundFilter)==null?void 0:r.setVideoBGReadable(n))}async setVirtualBGImage(n){var r;await((r=this.backgroundFilter)==null?void 0:r.setVirtualBGImage(n))}setFlickeringOptions(n){var r;(r=this.backgroundFilter)==null||r.setFlickeringOptions(n),this.report({variation:"Update"})}async profile(n){var r,f;return(f=(r=this.backgroundFilter)==null?void 0:r.profile(n))!=null?f:[]}getTransformerType(){var n,r;return(r=(n=this.backgroundOptions)==null?void 0:n.transformerType)!=null?r:"Undefined"}enable(){this.isEnabled=!0}disable(){this.isEnabled=!1}report(n){var r;this.reporter.send({version:P2,action:"MlTransformers",transformerType:(r=this.backgroundOptions)==null?void 0:r.transformerType,config:JSON.stringify(this.backgroundOptions),...n})}}const ps=class{constructor(){gt(this,"backgroundTransformer",new fc);gt(this,"mediaProcessor",new Qc);gt(this,"rate",30);gt(this,"resolveOnMediaProcessor");gt(this,"eventsQueue",[])}async init(n,r){await this.backgroundTransformer.init(n,r),await this.mediaProcessor.setTransformers([this.backgroundTransformer]),this.mediaProcessor.setTrackExpectedRate(this.rate),this.mediaProcessor.onAny((f,Z)=>{this.resolveOnMediaProcessor?(this.resolveOnMediaProcessor({name:f,data:Z}),this.resolveOnMediaProcessor=void 0):this.eventsQueue.push({name:f,data:Z})})}enable(){this.backgroundTransformer.enable()}disable(){this.backgroundTransformer.disable()}async onMediaProcessorEvent(){return await new Promise(n=>{this.eventsQueue.length>0?n(this.eventsQueue.shift()):this.resolveOnMediaProcessor=n})}async setTrackExpectedRate(n){this.rate=n,this.mediaProcessor.setTrackExpectedRate(n)}async transform(n,r){this.mediaProcessor.transform(n,r)}async setBackgroundOptions(n){var r;await((r=this.backgroundTransformer)==null?void 0:r.setBackgroundOptions(n))}setVideoBGReadable(n){this.backgroundTransformer.setVideoBGReadable(n)}async setVirtualBGImage(n){await this.backgroundTransformer.setVirtualBGImage(n)}async terminate(){await this.mediaProcessor.destroy()}setFlickeringOptions(n){this.backgroundTransformer.setFlickeringOptions(n)}setVonageMetadata(n){Ac(n)}async profile(n){return JSON.stringify(await this.backgroundTransformer.profile(n))}};let fs=ps;(()=>{g2("ProcessorWorker",ps)})();const mc="dmFyICRsPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgV2w9KEosUSxWKT0+USBpbiBKPyRsKEosUSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Vn0pOkpbUV09Vjt2YXIgbD0oSixRLFYpPT4oV2woSix0eXBlb2YgUSE9InN5bWJvbCI/USsiIjpRLFYpLFYpOyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBKKHIsZSl7Z2xvYmFsVGhpcy52b25hZ2V8fChnbG9iYWxUaGlzLnZvbmFnZT17fSksZ2xvYmFsVGhpcy52b25hZ2Uud29ya2VyaXplcnx8KGdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI9e30pO2xldCB0PWdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI7cmV0dXJuIHRbcl18fCh0W3JdPWUpLHRbcl19Y29uc3QgUT1KKCJnbG9iYWxzIix7fSk7dmFyIFY9KHI9PihyLklOSVQ9IklOSVQiLHIuRk9SV0FSRD0iRk9SV0FSRCIsci5URVJNSU5BVEU9IlRFUk1JTkFURSIsci5HTE9CQUxTX1NZTkM9IkdMT0JBTFNfU1lOQyIsci5FVkVOVD0iRVZFTlQiLHIpKShWfHx7fSk7ZnVuY3Rpb24gJG8ocil7cmV0dXJuW0ltYWdlQml0bWFwLFJlYWRhYmxlU3RyZWFtLFdyaXRhYmxlU3RyZWFtXS5zb21lKHQ9PnIgaW5zdGFuY2VvZiB0KX1mdW5jdGlvbiBVZShyLGUpe2NvbnN0e2lkOnQsdHlwZTpufT1yLG89QXJyYXkuaXNBcnJheShlKT9lOltlXTtwb3N0TWVzc2FnZSh7aWQ6dCx0eXBlOm4scmVzdWx0OmV9LG8uZmlsdGVyKGk9PiRvKGkpKSl9Sigid29ya2VyaXplZCIse30pO2Z1bmN0aW9uIFlyKCl7cmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZX1mdW5jdGlvbiBldChyLGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpZS5zcGxpY2UoMCxlLmxlbmd0aCk7ZWxzZSBpZih0eXBlb2YgZT09Im9iamVjdCIpZm9yKGNvbnN0IHQgaW4gZSlkZWxldGUgZVt0XTtmb3IoY29uc3QgdCBpbiByKUFycmF5LmlzQXJyYXkoclt0XSk/KGVbdF09W10sZXQoclt0XSxlW3RdKSk6dHlwZW9mIHJbdF09PSJvYmplY3QiPyhlW3RdPXt9LGV0KHJbdF0sZVt0XSkpOmVbdF09clt0XX1jb25zdCB0ZT1uZXcgV2Vha01hcCxoZT1uZXcgV2Vha01hcCxaPW5ldyBXZWFrTWFwLHR0PVN5bWJvbCgiYW55UHJvZHVjZXIiKSxYcj1Qcm9taXNlLnJlc29sdmUoKSxydD1TeW1ib2woImxpc3RlbmVyQWRkZWQiKSxudD1TeW1ib2woImxpc3RlbmVyUmVtb3ZlZCIpO2xldCBvdD0hMSxIdD0hMTtmdW5jdGlvbiBBZShyKXtpZih0eXBlb2YgciE9InN0cmluZyImJnR5cGVvZiByIT0ic3ltYm9sIiYmdHlwZW9mIHIhPSJudW1iZXIiKXRocm93IG5ldyBUeXBlRXJyb3IoImBldmVudE5hbWVgIG11c3QgYmUgYSBzdHJpbmcsIHN5bWJvbCwgb3IgbnVtYmVyIil9ZnVuY3Rpb24gaXQocil7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gSWUocixlKXtjb25zdCB0PWhlLmdldChyKTtpZighIXQuaGFzKGUpKXJldHVybiB0LmdldChlKX1mdW5jdGlvbiBOZShyLGUpe2NvbnN0IHQ9dHlwZW9mIGU9PSJzdHJpbmcifHx0eXBlb2YgZT09InN5bWJvbCJ8fHR5cGVvZiBlPT0ibnVtYmVyIj9lOnR0LG49Wi5nZXQocik7aWYoISFuLmhhcyh0KSlyZXR1cm4gbi5nZXQodCl9ZnVuY3Rpb24gV28ocixlLHQpe2NvbnN0IG49Wi5nZXQocik7aWYobi5oYXMoZSkpZm9yKGNvbnN0IG8gb2Ygbi5nZXQoZSkpby5lbnF1ZXVlKHQpO2lmKG4uaGFzKHR0KSl7Y29uc3Qgbz1Qcm9taXNlLmFsbChbZSx0XSk7Zm9yKGNvbnN0IGkgb2Ygbi5nZXQodHQpKWkuZW5xdWV1ZShvKX19ZnVuY3Rpb24gUXIocixlKXtlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07bGV0IHQ9ITEsbj0oKT0+e30sbz1bXTtjb25zdCBpPXtlbnF1ZXVlKHMpe28ucHVzaChzKSxuKCl9LGZpbmlzaCgpe3Q9ITAsbigpfX07Zm9yKGNvbnN0IHMgb2YgZSl7bGV0IGE9TmUocixzKTthfHwoYT1uZXcgU2V0LFouZ2V0KHIpLnNldChzLGEpKSxhLmFkZChpKX1yZXR1cm57YXN5bmMgbmV4dCgpe3JldHVybiBvP28ubGVuZ3RoPT09MD90PyhvPXZvaWQgMCx0aGlzLm5leHQoKSk6KGF3YWl0IG5ldyBQcm9taXNlKHM9PntuPXN9KSx0aGlzLm5leHQoKSk6e2RvbmU6ITEsdmFsdWU6YXdhaXQgby5zaGlmdCgpfTp7ZG9uZTohMH19LGFzeW5jIHJldHVybihzKXtvPXZvaWQgMDtmb3IoY29uc3QgYSBvZiBlKXtjb25zdCB1PU5lKHIsYSk7dSYmKHUuZGVsZXRlKGkpLHUuc2l6ZT09PTAmJlouZ2V0KHIpLmRlbGV0ZShhKSl9cmV0dXJuIG4oKSxhcmd1bWVudHMubGVuZ3RoPjA/e2RvbmU6ITAsdmFsdWU6YXdhaXQgc306e2RvbmU6ITB9fSxbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9fX1mdW5jdGlvbiBxcihyKXtpZihyPT09dm9pZCAwKXJldHVybiBLcjtpZighQXJyYXkuaXNBcnJheShyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyIpO2Zvcihjb25zdCBlIG9mIHIpaWYoIUtyLmluY2x1ZGVzKGUpKXRocm93IHR5cGVvZiBlIT0ic3RyaW5nIj9uZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIGVsZW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpOm5ldyBFcnJvcihgJHtlfSBpcyBub3QgRW1pdHRlcnkgbWV0aG9kYCk7cmV0dXJuIHJ9Y29uc3QgU2U9cj0+cj09PXJ0fHxyPT09bnQ7ZnVuY3Rpb24gc3QocixlLHQpe2lmKFNlKGUpKXRyeXtvdD0hMCxyLmVtaXQoZSx0KX1maW5hbGx5e290PSExfX1jbGFzcyBSZXtzdGF0aWMgbWl4aW4oZSx0KXtyZXR1cm4gdD1xcih0KSxuPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBmdW5jdGlvbiIpO2Zvcihjb25zdCBzIG9mIHQpaWYobi5wcm90b3R5cGVbc10hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke3N9XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO2Z1bmN0aW9uIG8oKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7ZW51bWVyYWJsZTohMSx2YWx1ZTpuZXcgUmV9KSx0aGlzW2VdfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxlLHtlbnVtZXJhYmxlOiExLGdldDpvfSk7Y29uc3QgaT1zPT5mdW5jdGlvbiguLi5hKXtyZXR1cm4gdGhpc1tlXVtzXSguLi5hKX07Zm9yKGNvbnN0IHMgb2YgdClPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUscyx7ZW51bWVyYWJsZTohMSx2YWx1ZTppKHMpfSk7cmV0dXJuIG59fXN0YXRpYyBnZXQgaXNEZWJ1Z0VuYWJsZWQoKXt2YXIgZSx0O2lmKHR5cGVvZigoZT1nbG9iYWxUaGlzLnByb2Nlc3MpPT1udWxsP3ZvaWQgMDplLmVudikhPSJvYmplY3QiKXJldHVybiBIdDtjb25zdHtlbnY6bn09KHQ9Z2xvYmFsVGhpcy5wcm9jZXNzKSE9bnVsbD90OntlbnY6e319O3JldHVybiBuLkRFQlVHPT09ImVtaXR0ZXJ5Inx8bi5ERUJVRz09PSIqInx8SHR9c3RhdGljIHNldCBpc0RlYnVnRW5hYmxlZChlKXtIdD1lfWNvbnN0cnVjdG9yKGU9e30pe3ZhciB0O3RlLnNldCh0aGlzLG5ldyBTZXQpLGhlLnNldCh0aGlzLG5ldyBNYXApLFouc2V0KHRoaXMsbmV3IE1hcCksWi5nZXQodGhpcykuc2V0KHR0LG5ldyBTZXQpLHRoaXMuZGVidWc9KHQ9ZS5kZWJ1ZykhPW51bGw/dDp7fSx0aGlzLmRlYnVnLmVuYWJsZWQ9PT12b2lkIDAmJih0aGlzLmRlYnVnLmVuYWJsZWQ9ITEpLHRoaXMuZGVidWcubG9nZ2VyfHwodGhpcy5kZWJ1Zy5sb2dnZXI9KG4sbyxpLHMpPT57dHJ5e3M9SlNPTi5zdHJpbmdpZnkocyl9Y2F0Y2h7cz1gT2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBrZXlzIGZhaWxlZCB0byBzdHJpbmdpZnk6ICR7T2JqZWN0LmtleXMocykuam9pbigiLCIpfWB9KHR5cGVvZiBpPT0ic3ltYm9sInx8dHlwZW9mIGk9PSJudW1iZXIiKSYmKGk9aS50b1N0cmluZygpKTtjb25zdCBhPW5ldyBEYXRlLHU9YCR7YS5nZXRIb3VycygpfToke2EuZ2V0TWludXRlcygpfToke2EuZ2V0U2Vjb25kcygpfS4ke2EuZ2V0TWlsbGlzZWNvbmRzKCl9YDtjb25zb2xlLmxvZyhgWyR7dX1dW2VtaXR0ZXJ5OiR7bn1dWyR7b31dIEV2ZW50IE5hbWU6ICR7aX0KCWRhdGE6ICR7c31gKX0pfWxvZ0lmRGVidWdFbmFibGVkKGUsdCxuKXsoUmUuaXNEZWJ1Z0VuYWJsZWR8fHRoaXMuZGVidWcuZW5hYmxlZCkmJnRoaXMuZGVidWcubG9nZ2VyKGUsdGhpcy5kZWJ1Zy5uYW1lLHQsbil9b24oZSx0KXtpdCh0KSxlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IG4gb2YgZSl7QWUobik7bGV0IG89SWUodGhpcyxuKTtvfHwobz1uZXcgU2V0LGhlLmdldCh0aGlzKS5zZXQobixvKSksby5hZGQodCksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlIixuLHZvaWQgMCksU2Uobil8fHN0KHRoaXMscnQse2V2ZW50TmFtZTpuLGxpc3RlbmVyOnR9KX1yZXR1cm4gdGhpcy5vZmYuYmluZCh0aGlzLGUsdCl9b2ZmKGUsdCl7aXQodCksZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCBuIG9mIGUpe0FlKG4pO2NvbnN0IG89SWUodGhpcyxuKTtvJiYoby5kZWxldGUodCksby5zaXplPT09MCYmaGUuZ2V0KHRoaXMpLmRlbGV0ZShuKSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmUiLG4sdm9pZCAwKSxTZShuKXx8c3QodGhpcyxudCx7ZXZlbnROYW1lOm4sbGlzdGVuZXI6dH0pfX1vbmNlKGUpe2xldCB0O2NvbnN0IG49bmV3IFByb21pc2Uobz0+e3Q9dGhpcy5vbihlLGk9Pnt0KCksbyhpKX0pfSk7cmV0dXJuIG4ub2ZmPXQsbn1ldmVudHMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpQWUodCk7cmV0dXJuIFFyKHRoaXMsZSl9YXN5bmMgZW1pdChlLHQpe3ZhciBuO2lmKEFlKGUpLFNlKGUpJiYhb3QpdGhyb3cgbmV3IFR5cGVFcnJvcigiYGV2ZW50TmFtZWAgY2Fubm90IGJlIG1ldGEgZXZlbnQgYGxpc3RlbmVyQWRkZWRgIG9yIGBsaXN0ZW5lclJlbW92ZWRgIik7dGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiZW1pdCIsZSx0KSxXbyh0aGlzLGUsdCk7Y29uc3Qgbz0obj1JZSh0aGlzLGUpKSE9bnVsbD9uOm5ldyBTZXQsaT10ZS5nZXQodGhpcykscz1bLi4ub10sYT1TZShlKT9bXTpbLi4uaV07YXdhaXQgWHIsYXdhaXQgUHJvbWlzZS5hbGwoWy4uLnMubWFwKGFzeW5jIHU9PntpZihvLmhhcyh1KSlyZXR1cm4gdSh0KX0pLC4uLmEubWFwKGFzeW5jIHU9PntpZihpLmhhcyh1KSlyZXR1cm4gdShlLHQpfSldKX1hc3luYyBlbWl0U2VyaWFsKGUsdCl7dmFyIG47aWYoQWUoZSksU2UoZSkmJiFvdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJgZXZlbnROYW1lYCBjYW5ub3QgYmUgbWV0YSBldmVudCBgbGlzdGVuZXJBZGRlZGAgb3IgYGxpc3RlbmVyUmVtb3ZlZGAiKTt0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJlbWl0U2VyaWFsIixlLHQpO2NvbnN0IG89KG49SWUodGhpcyxlKSkhPW51bGw/bjpuZXcgU2V0LGk9dGUuZ2V0KHRoaXMpLHM9Wy4uLm9dLGE9Wy4uLmldO2F3YWl0IFhyO2Zvcihjb25zdCB1IG9mIHMpby5oYXModSkmJmF3YWl0IHUodCk7Zm9yKGNvbnN0IHUgb2YgYSlpLmhhcyh1KSYmYXdhaXQgdShlLHQpfW9uQW55KGUpe3JldHVybiBpdChlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJzdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLHRlLmdldCh0aGlzKS5hZGQoZSksc3QodGhpcyxydCx7bGlzdGVuZXI6ZX0pLHRoaXMub2ZmQW55LmJpbmQodGhpcyxlKX1hbnlFdmVudCgpe3JldHVybiBRcih0aGlzKX1vZmZBbnkoZSl7aXQoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLHN0KHRoaXMsbnQse2xpc3RlbmVyOmV9KSx0ZS5nZXQodGhpcykuZGVsZXRlKGUpfWNsZWFyTGlzdGVuZXJzKGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgdCBvZiBlKWlmKHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoImNsZWFyIix0LHZvaWQgMCksdHlwZW9mIHQ9PSJzdHJpbmcifHx0eXBlb2YgdD09InN5bWJvbCJ8fHR5cGVvZiB0PT0ibnVtYmVyIil7Y29uc3Qgbj1JZSh0aGlzLHQpO24mJm4uY2xlYXIoKTtjb25zdCBvPU5lKHRoaXMsdCk7aWYobyl7Zm9yKGNvbnN0IGkgb2YgbylpLmZpbmlzaCgpO28uY2xlYXIoKX19ZWxzZXt0ZS5nZXQodGhpcykuY2xlYXIoKTtmb3IoY29uc3RbbixvXW9mIGhlLmdldCh0aGlzKS5lbnRyaWVzKCkpby5jbGVhcigpLGhlLmdldCh0aGlzKS5kZWxldGUobik7Zm9yKGNvbnN0W24sb11vZiBaLmdldCh0aGlzKS5lbnRyaWVzKCkpe2Zvcihjb25zdCBpIG9mIG8paS5maW5pc2goKTtvLmNsZWFyKCksWi5nZXQodGhpcykuZGVsZXRlKG4pfX19bGlzdGVuZXJDb3VudChlKXt2YXIgdCxuLG8saSxzLGE7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2xldCB1PTA7Zm9yKGNvbnN0IGYgb2YgZSl7aWYodHlwZW9mIGY9PSJzdHJpbmciKXt1Kz10ZS5nZXQodGhpcykuc2l6ZSsoKG49KHQ9SWUodGhpcyxmKSk9PW51bGw/dm9pZCAwOnQuc2l6ZSkhPW51bGw/bjowKSsoKGk9KG89TmUodGhpcyxmKSk9PW51bGw/dm9pZCAwOm8uc2l6ZSkhPW51bGw/aTowKSsoKGE9KHM9TmUodGhpcykpPT1udWxsP3ZvaWQgMDpzLnNpemUpIT1udWxsP2E6MCk7Y29udGludWV9dHlwZW9mIGY8InUiJiZBZShmKSx1Kz10ZS5nZXQodGhpcykuc2l6ZTtmb3IoY29uc3QgZCBvZiBoZS5nZXQodGhpcykudmFsdWVzKCkpdSs9ZC5zaXplO2Zvcihjb25zdCBkIG9mIFouZ2V0KHRoaXMpLnZhbHVlcygpKXUrPWQuc2l6ZX1yZXR1cm4gdX1iaW5kTWV0aG9kcyhlLHQpe2lmKHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBhbiBvYmplY3QiKTt0PXFyKHQpO2Zvcihjb25zdCBuIG9mIHQpe2lmKGVbbl0hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke259XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITEsdmFsdWU6dGhpc1tuXS5iaW5kKHRoaXMpfSl9fX1jb25zdCBLcj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhSZS5wcm90b3R5cGUpLmZpbHRlcihyPT5yIT09ImNvbnN0cnVjdG9yIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFJlLCJsaXN0ZW5lckFkZGVkIix7dmFsdWU6cnQsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUmUsImxpc3RlbmVyUmVtb3ZlZCIse3ZhbHVlOm50LHdyaXRhYmxlOiExLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExfSk7ZnVuY3Rpb24gVm8ocil7cmV0dXJuIHIub25BbnkmJnIuZW1pdH1hc3luYyBmdW5jdGlvbiBIbyhyLGUpe2NvbnN0e2Z1bmN0aW9uTmFtZTp0LGFyZ3M6bn09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2lmKCF0KXRocm93Im1pc3NpbmcgZnVuY3Rpb24gbmFtZSB0byBjYWxsIjtpZighZS5pbnN0YW5jZVt0XSl0aHJvd2B1bmRlZmluZWQgZnVuY3Rpb24gWyR7dH1dIGluIGNsYXNzICR7ZS5pbnN0YW5jZS5jb25zdHJ1Y3Rvci53b3JrZXJJZH1gO1VlKHIsYXdhaXQgZS5pbnN0YW5jZVt0XSguLi5uIT1udWxsP246W10pKX1jb25zdCBKcj1KKCJyZWdpc3RlcmVkV29ya2VycyIse30pO2Z1bmN0aW9uIGpvKHIsZSl7ZS53b3JrZXJJZD1yLFlyKCkmJihKcltlLndvcmtlcklkXT1lKX1mdW5jdGlvbiBZbyhyLGUpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBjbGFzc05hbWUgd2hpbGUgaW5pdGlhbGl6aW5nIHdvcmtlciI7Y29uc3RbdCxuXT1yLmFyZ3Msbz1Kclt0XTtpZihvKWUuaW5zdGFuY2U9bmV3IG8oci5hcmdzLnNsaWNlKDEpKTtlbHNlIHRocm93YHVua25vd24gd29ya2VyIGNsYXNzICR7dH1gO2V0KG4sUSksVm8oZS5pbnN0YW5jZSkmJmUuaW5zdGFuY2Uub25BbnkoKGkscyk9PntVZSh7dHlwZTpWLkVWRU5UfSx7bmFtZTppLGRhdGE6c30pfSksVWUocix0eXBlb2YgZS5pbnN0YW5jZSE9PXZvaWQgMCl9YXN5bmMgZnVuY3Rpb24gWG8ocixlKXtjb25zdHthcmdzOnR9PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtsZXQgbjtlLmluc3RhbmNlLnRlcm1pbmF0ZSYmKG49YXdhaXQgZS5pbnN0YW5jZS50ZXJtaW5hdGUoLi4udCE9bnVsbD90OltdKSksVWUocixuKX1mdW5jdGlvbiBRbyhyKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgZ2xvYmFscyB3aGlsZSBzeW5jaW5nIjtldChyLmFyZ3NbMF0sUSksVWUocix7fSl9ZnVuY3Rpb24gcW8oKXtjb25zdCByPXt9O29ubWVzc2FnZT1hc3luYyBlPT57Y29uc3QgdD1lLmRhdGE7c3dpdGNoKHQudHlwZSl7Y2FzZSBWLklOSVQ6WW8odCxyKTticmVhaztjYXNlIFYuRk9SV0FSRDpIbyh0LHIpO2JyZWFrO2Nhc2UgVi5URVJNSU5BVEU6WG8odCxyKTticmVhaztjYXNlIFYuR0xPQkFMU19TWU5DOlFvKHQpO2JyZWFrfX19WXIoKSYmcW8oKTt2YXIgS289T2JqZWN0LmRlZmluZVByb3BlcnR5LEpvPShyLGUsdCk9PmUgaW4gcj9LbyhyLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnR9KTpyW2VdPXQsdz0ocixlLHQpPT4oSm8ocix0eXBlb2YgZSE9InN5bWJvbCI/ZSsiIjplLHQpLHQpO2NsYXNzIGVle313KGVlLCJ1cGRhdGVzIix7dHJhbnNmb3JtZXJfbmV3OiJOZXcgdHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyX251bGw6Ik51bGwgdHJhbnNmb3JtZXIifSksdyhlZSwiZXJyb3JzIix7dHJhbnNmb3JtZXJfbm9uZToiTm8gdHJhbnNmb3JtZXJzIHByb3ZpZGVkIix0cmFuc2Zvcm1lcl9zdGFydDoiQ2Fubm90IHN0YXJ0IHRyYW5zZm9ybWVyIix0cmFuc2Zvcm1lcl90cmFuc2Zvcm06IkNhbm5vdCB0cmFuc2Zvcm0gZnJhbWUiLHRyYW5zZm9ybWVyX2ZsdXNoOiJDYW5ub3QgZmx1c2ggdHJhbnNmb3JtZXIiLHJlYWRhYmxlX251bGw6IlJlYWRhYmxlIGlzIG51bGwiLHdyaXRhYmxlX251bGw6IldyaXRhYmxlIGlzIG51bGwifSk7Y29uc3QgcmU9bmV3IFdlYWtNYXAsYXQ9bmV3IFdlYWtNYXAsTGU9bmV3IFdlYWtNYXAsanQ9U3ltYm9sKCJhbnlQcm9kdWNlciIpLFpyPVByb21pc2UucmVzb2x2ZSgpLHV0PVN5bWJvbCgibGlzdGVuZXJBZGRlZCIpLGN0PVN5bWJvbCgibGlzdGVuZXJSZW1vdmVkIik7bGV0IFl0PSExO2Z1bmN0aW9uIEZlKHIpe2lmKHR5cGVvZiByIT0ic3RyaW5nIiYmdHlwZW9mIHIhPSJzeW1ib2wiKXRocm93IG5ldyBUeXBlRXJyb3IoImV2ZW50TmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgc3ltYm9sIil9ZnVuY3Rpb24gZnQocil7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gUGUocixlKXtjb25zdCB0PWF0LmdldChyKTtyZXR1cm4gdC5oYXMoZSl8fHQuc2V0KGUsbmV3IFNldCksdC5nZXQoZSl9ZnVuY3Rpb24gemUocixlKXtjb25zdCB0PXR5cGVvZiBlPT0ic3RyaW5nInx8dHlwZW9mIGU9PSJzeW1ib2wiP2U6anQsbj1MZS5nZXQocik7cmV0dXJuIG4uaGFzKHQpfHxuLnNldCh0LG5ldyBTZXQpLG4uZ2V0KHQpfWZ1bmN0aW9uIFpvKHIsZSx0KXtjb25zdCBuPUxlLmdldChyKTtpZihuLmhhcyhlKSlmb3IoY29uc3QgbyBvZiBuLmdldChlKSlvLmVucXVldWUodCk7aWYobi5oYXMoanQpKXtjb25zdCBvPVByb21pc2UuYWxsKFtlLHRdKTtmb3IoY29uc3QgaSBvZiBuLmdldChqdCkpaS5lbnF1ZXVlKG8pfX1mdW5jdGlvbiBlbihyLGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtsZXQgdD0hMSxuPSgpPT57fSxvPVtdO2NvbnN0IGk9e2VucXVldWUocyl7by5wdXNoKHMpLG4oKX0sZmluaXNoKCl7dD0hMCxuKCl9fTtmb3IoY29uc3QgcyBvZiBlKXplKHIscykuYWRkKGkpO3JldHVybnthc3luYyBuZXh0KCl7cmV0dXJuIG8/by5sZW5ndGg9PT0wP3Q/KG89dm9pZCAwLHRoaXMubmV4dCgpKTooYXdhaXQgbmV3IFByb21pc2Uocz0+e249c30pLHRoaXMubmV4dCgpKTp7ZG9uZTohMSx2YWx1ZTphd2FpdCBvLnNoaWZ0KCl9Ontkb25lOiEwfX0sYXN5bmMgcmV0dXJuKHMpe289dm9pZCAwO2Zvcihjb25zdCBhIG9mIGUpemUocixhKS5kZWxldGUoaSk7cmV0dXJuIG4oKSxhcmd1bWVudHMubGVuZ3RoPjA/e2RvbmU6ITAsdmFsdWU6YXdhaXQgc306e2RvbmU6ITB9fSxbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9fX1mdW5jdGlvbiB0bihyKXtpZihyPT09dm9pZCAwKXJldHVybiBybjtpZighQXJyYXkuaXNBcnJheShyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyIpO2Zvcihjb25zdCBlIG9mIHIpaWYoIXJuLmluY2x1ZGVzKGUpKXRocm93IHR5cGVvZiBlIT0ic3RyaW5nIj9uZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIGVsZW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpOm5ldyBFcnJvcihgJHtlfSBpcyBub3QgRW1pdHRlcnkgbWV0aG9kYCk7cmV0dXJuIHJ9Y29uc3QgWHQ9cj0+cj09PXV0fHxyPT09Y3Q7Y2xhc3MgbWV7c3RhdGljIG1peGluKGUsdCl7cmV0dXJuIHQ9dG4odCksbj0+e2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImB0YXJnZXRgIG11c3QgYmUgZnVuY3Rpb24iKTtmb3IoY29uc3QgcyBvZiB0KWlmKG4ucHJvdG90eXBlW3NdIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgVGhlIHByb3BlcnR5IFxgJHtzfVxgIGFscmVhZHkgZXhpc3RzIG9uIFxgdGFyZ2V0XGBgKTtmdW5jdGlvbiBvKCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGUse2VudW1lcmFibGU6ITEsdmFsdWU6bmV3IG1lfSksdGhpc1tlXX1PYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsZSx7ZW51bWVyYWJsZTohMSxnZXQ6b30pO2NvbnN0IGk9cz0+ZnVuY3Rpb24oLi4uYSl7cmV0dXJuIHRoaXNbZV1bc10oLi4uYSl9O2Zvcihjb25zdCBzIG9mIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLHMse2VudW1lcmFibGU6ITEsdmFsdWU6aShzKX0pO3JldHVybiBufX1zdGF0aWMgZ2V0IGlzRGVidWdFbmFibGVkKCl7aWYodHlwZW9mIHByb2Nlc3MhPSJvYmplY3QiKXJldHVybiBZdDtjb25zdHtlbnY6ZX09cHJvY2Vzc3x8e2Vudjp7fX07cmV0dXJuIGUuREVCVUc9PT0iZW1pdHRlcnkifHxlLkRFQlVHPT09IioifHxZdH1zdGF0aWMgc2V0IGlzRGVidWdFbmFibGVkKGUpe1l0PWV9Y29uc3RydWN0b3IoZT17fSl7cmUuc2V0KHRoaXMsbmV3IFNldCksYXQuc2V0KHRoaXMsbmV3IE1hcCksTGUuc2V0KHRoaXMsbmV3IE1hcCksdGhpcy5kZWJ1Zz1lLmRlYnVnfHx7fSx0aGlzLmRlYnVnLmVuYWJsZWQ9PT12b2lkIDAmJih0aGlzLmRlYnVnLmVuYWJsZWQ9ITEpLHRoaXMuZGVidWcubG9nZ2VyfHwodGhpcy5kZWJ1Zy5sb2dnZXI9KHQsbixvLGkpPT57dHJ5e2k9SlNPTi5zdHJpbmdpZnkoaSl9Y2F0Y2h7aT1gT2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBrZXlzIGZhaWxlZCB0byBzdHJpbmdpZnk6ICR7T2JqZWN0LmtleXMoaSkuam9pbigiLCIpfWB9dHlwZW9mIG89PSJzeW1ib2wiJiYobz1vLnRvU3RyaW5nKCkpO2NvbnN0IHM9bmV3IERhdGUsYT1gJHtzLmdldEhvdXJzKCl9OiR7cy5nZXRNaW51dGVzKCl9OiR7cy5nZXRTZWNvbmRzKCl9LiR7cy5nZXRNaWxsaXNlY29uZHMoKX1gO2NvbnNvbGUubG9nKGBbJHthfV1bZW1pdHRlcnk6JHt0fV1bJHtufV0gRXZlbnQgTmFtZTogJHtvfQoJZGF0YTogJHtpfWApfSl9bG9nSWZEZWJ1Z0VuYWJsZWQoZSx0LG4peyhtZS5pc0RlYnVnRW5hYmxlZHx8dGhpcy5kZWJ1Zy5lbmFibGVkKSYmdGhpcy5kZWJ1Zy5sb2dnZXIoZSx0aGlzLmRlYnVnLm5hbWUsdCxuKX1vbihlLHQpe2Z0KHQpLGU9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgbiBvZiBlKUZlKG4pLFBlKHRoaXMsbikuYWRkKHQpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoInN1YnNjcmliZSIsbix2b2lkIDApLFh0KG4pfHx0aGlzLmVtaXQodXQse2V2ZW50TmFtZTpuLGxpc3RlbmVyOnR9KTtyZXR1cm4gdGhpcy5vZmYuYmluZCh0aGlzLGUsdCl9b2ZmKGUsdCl7ZnQodCksZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCBuIG9mIGUpRmUobiksUGUodGhpcyxuKS5kZWxldGUodCksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmUiLG4sdm9pZCAwKSxYdChuKXx8dGhpcy5lbWl0KGN0LHtldmVudE5hbWU6bixsaXN0ZW5lcjp0fSl9b25jZShlKXtyZXR1cm4gbmV3IFByb21pc2UodD0+e2NvbnN0IG49dGhpcy5vbihlLG89PntuKCksdChvKX0pfSl9ZXZlbnRzKGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgdCBvZiBlKUZlKHQpO3JldHVybiBlbih0aGlzLGUpfWFzeW5jIGVtaXQoZSx0KXtGZShlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJlbWl0IixlLHQpLFpvKHRoaXMsZSx0KTtjb25zdCBuPVBlKHRoaXMsZSksbz1yZS5nZXQodGhpcyksaT1bLi4ubl0scz1YdChlKT9bXTpbLi4ub107YXdhaXQgWnIsYXdhaXQgUHJvbWlzZS5hbGwoWy4uLmkubWFwKGFzeW5jIGE9PntpZihuLmhhcyhhKSlyZXR1cm4gYSh0KX0pLC4uLnMubWFwKGFzeW5jIGE9PntpZihvLmhhcyhhKSlyZXR1cm4gYShlLHQpfSldKX1hc3luYyBlbWl0U2VyaWFsKGUsdCl7RmUoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiZW1pdFNlcmlhbCIsZSx0KTtjb25zdCBuPVBlKHRoaXMsZSksbz1yZS5nZXQodGhpcyksaT1bLi4ubl0scz1bLi4ub107YXdhaXQgWnI7Zm9yKGNvbnN0IGEgb2YgaSluLmhhcyhhKSYmYXdhaXQgYSh0KTtmb3IoY29uc3QgYSBvZiBzKW8uaGFzKGEpJiZhd2FpdCBhKGUsdCl9b25BbnkoZSl7cmV0dXJuIGZ0KGUpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoInN1YnNjcmliZUFueSIsdm9pZCAwLHZvaWQgMCkscmUuZ2V0KHRoaXMpLmFkZChlKSx0aGlzLmVtaXQodXQse2xpc3RlbmVyOmV9KSx0aGlzLm9mZkFueS5iaW5kKHRoaXMsZSl9YW55RXZlbnQoKXtyZXR1cm4gZW4odGhpcyl9b2ZmQW55KGUpe2Z0KGUpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoInVuc3Vic2NyaWJlQW55Iix2b2lkIDAsdm9pZCAwKSx0aGlzLmVtaXQoY3Qse2xpc3RlbmVyOmV9KSxyZS5nZXQodGhpcykuZGVsZXRlKGUpfWNsZWFyTGlzdGVuZXJzKGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgdCBvZiBlKWlmKHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoImNsZWFyIix0LHZvaWQgMCksdHlwZW9mIHQ9PSJzdHJpbmcifHx0eXBlb2YgdD09InN5bWJvbCIpe1BlKHRoaXMsdCkuY2xlYXIoKTtjb25zdCBuPXplKHRoaXMsdCk7Zm9yKGNvbnN0IG8gb2YgbilvLmZpbmlzaCgpO24uY2xlYXIoKX1lbHNle3JlLmdldCh0aGlzKS5jbGVhcigpO2Zvcihjb25zdCBuIG9mIGF0LmdldCh0aGlzKS52YWx1ZXMoKSluLmNsZWFyKCk7Zm9yKGNvbnN0IG4gb2YgTGUuZ2V0KHRoaXMpLnZhbHVlcygpKXtmb3IoY29uc3QgbyBvZiBuKW8uZmluaXNoKCk7bi5jbGVhcigpfX19bGlzdGVuZXJDb3VudChlKXtlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07bGV0IHQ9MDtmb3IoY29uc3QgbiBvZiBlKXtpZih0eXBlb2Ygbj09InN0cmluZyIpe3QrPXJlLmdldCh0aGlzKS5zaXplK1BlKHRoaXMsbikuc2l6ZSt6ZSh0aGlzLG4pLnNpemUremUodGhpcykuc2l6ZTtjb250aW51ZX10eXBlb2YgbjwidSImJkZlKG4pLHQrPXJlLmdldCh0aGlzKS5zaXplO2Zvcihjb25zdCBvIG9mIGF0LmdldCh0aGlzKS52YWx1ZXMoKSl0Kz1vLnNpemU7Zm9yKGNvbnN0IG8gb2YgTGUuZ2V0KHRoaXMpLnZhbHVlcygpKXQrPW8uc2l6ZX1yZXR1cm4gdH1iaW5kTWV0aG9kcyhlLHQpe2lmKHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBhbiBvYmplY3QiKTt0PXRuKHQpO2Zvcihjb25zdCBuIG9mIHQpe2lmKGVbbl0hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke259XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITEsdmFsdWU6dGhpc1tuXS5iaW5kKHRoaXMpfSl9fX1jb25zdCBybj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhtZS5wcm90b3R5cGUpLmZpbHRlcihyPT5yIT09ImNvbnN0cnVjdG9yIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KG1lLCJsaXN0ZW5lckFkZGVkIix7dmFsdWU6dXQsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobWUsImxpc3RlbmVyUmVtb3ZlZCIse3ZhbHVlOmN0LHdyaXRhYmxlOiExLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExfSk7dmFyIFF0PW1lO2Z1bmN0aW9uIGVpKHIpe3JldHVybiB0eXBlb2Ygcj09Im9iamVjdCImJnIhPT1udWxsJiYibWVzc2FnZSJpbiByJiZ0eXBlb2Ygci5tZXNzYWdlPT0ic3RyaW5nIn1mdW5jdGlvbiB0aShyKXtpZihlaShyKSlyZXR1cm4gcjt0cnl7cmV0dXJuIG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeShyKSl9Y2F0Y2h7cmV0dXJuIG5ldyBFcnJvcihTdHJpbmcocikpfX1mdW5jdGlvbiBxdChyKXtyZXR1cm4gdGkocikubWVzc2FnZX12YXIgcmk9T2JqZWN0LmRlZmluZVByb3BlcnR5LG5pPShyLGUsdCk9PmUgaW4gcj9yaShyLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnR9KTpyW2VdPXQsb2k9KHIsZSx0KT0+KG5pKHIsdHlwZW9mIGUhPSJzeW1ib2wiP2UrIiI6ZSx0KSx0KTtjb25zdCBpaT0iaGxnLnRva2JveC5jb20vcHJvZC9sb2dnaW5nL3ZjcF93ZWJydGMiLHNpPSJodHRwczovLyIsYWk9MWU0O2xldCBsdDtjb25zdCB1aT1uZXcgVWludDhBcnJheSgxNik7ZnVuY3Rpb24gY2koKXtpZighbHQmJihsdD10eXBlb2YgY3J5cHRvPCJ1IiYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byksIWx0KSl0aHJvdyBuZXcgRXJyb3IoImNyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkIik7cmV0dXJuIGx0KHVpKX1jb25zdCBDPVtdO2ZvcihsZXQgcj0wO3I8MjU2OysrcilDLnB1c2goKHIrMjU2KS50b1N0cmluZygxNikuc2xpY2UoMSkpO2Z1bmN0aW9uIGZpKHIsZT0wKXtyZXR1cm4oQ1tyW2UrMF1dK0NbcltlKzFdXStDW3JbZSsyXV0rQ1tyW2UrM11dKyItIitDW3JbZSs0XV0rQ1tyW2UrNV1dKyItIitDW3JbZSs2XV0rQ1tyW2UrN11dKyItIitDW3JbZSs4XV0rQ1tyW2UrOV1dKyItIitDW3JbZSsxMF1dK0NbcltlKzExXV0rQ1tyW2UrMTJdXStDW3JbZSsxM11dK0NbcltlKzE0XV0rQ1tyW2UrMTVdXSkudG9Mb3dlckNhc2UoKX1jb25zdCBsaT10eXBlb2YgY3J5cHRvPCJ1IiYmY3J5cHRvLnJhbmRvbVVVSUQmJmNyeXB0by5yYW5kb21VVUlELmJpbmQoY3J5cHRvKSxubj17cmFuZG9tVVVJRDpsaX07ZnVuY3Rpb24gZGkocixlLHQpe2lmKG5uLnJhbmRvbVVVSUQmJiFlJiYhcilyZXR1cm4gbm4ucmFuZG9tVVVJRCgpO3I9cnx8e307Y29uc3Qgbj1yLnJhbmRvbXx8KHIucm5nfHxjaSkoKTtpZihuWzZdPW5bNl0mMTV8NjQsbls4XT1uWzhdJjYzfDEyOCxlKXt0PXR8fDA7Zm9yKGxldCBvPTA7bzwxNjsrK28pZVt0K29dPW5bb107cmV0dXJuIGV9cmV0dXJuIGZpKG4pfWZ1bmN0aW9uIEt0KHIsZSl7Z2xvYmFsVGhpcy52b25hZ2V8fChnbG9iYWxUaGlzLnZvbmFnZT17fSksZ2xvYmFsVGhpcy52b25hZ2Uud29ya2VyaXplcnx8KGdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI9e30pO2xldCB0PWdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI7cmV0dXJuIHRbcl18fCh0W3JdPWUpLHRbcl19Y29uc3QgbmU9S3QoImdsb2JhbHMiLHt9KTt2YXIgcGU9KHI9PihyLklOSVQ9IklOSVQiLHIuRk9SV0FSRD0iRk9SV0FSRCIsci5URVJNSU5BVEU9IlRFUk1JTkFURSIsci5HTE9CQUxTX1NZTkM9IkdMT0JBTFNfU1lOQyIscikpKHBlfHx7fSk7ZnVuY3Rpb24gb24ocil7cmV0dXJuW0ltYWdlQml0bWFwLFJlYWRhYmxlU3RyZWFtLFdyaXRhYmxlU3RyZWFtXS5zb21lKGU9PnIgaW5zdGFuY2VvZiBlKX1sZXQgaGk9MDtmdW5jdGlvbiBtaShyLGUsdCxuLG8pe2NvbnN0IGk9aGkrKztyZXR1cm4gci5wb3N0TWVzc2FnZSh7aWQ6aSx0eXBlOmUsZnVuY3Rpb25OYW1lOnQsYXJnczpufSxuLmZpbHRlcihzPT5vbihzKSkpLG5ldyBQcm9taXNlKHM9PntvPT1udWxsfHxvLnNldChpLHMpfSl9ZnVuY3Rpb24gR2UocixlKXtjb25zdHtpZDp0LHR5cGU6bn09cixvPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07cG9zdE1lc3NhZ2Uoe2lkOnQsdHlwZTpuLHJlc3VsdDplfSxvLmZpbHRlcihpPT5vbihpKSkpfWNvbnN0IHNuPUt0KCJ3b3JrZXJpemVkIix7fSk7ZnVuY3Rpb24gYW4oKXtyZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlfWFzeW5jIGZ1bmN0aW9uIHBpKCl7aWYoYW4oKSlHZSh7dHlwZTpwZS5HTE9CQUxTX1NZTkN9LG5lKTtlbHNle2NvbnN0IHI9W107Zm9yKGNvbnN0IGUgaW4gc24pe2NvbnN0e3dvcmtlcjp0LHJlc29sdmVyczpufT1zbltlXS53b3JrZXJDb250ZXh0O3QmJnIucHVzaChtaSh0LHBlLkdMT0JBTFNfU1lOQywiIixbbmVdLG4pKX1hd2FpdCBQcm9taXNlLmFsbChyKX19ZnVuY3Rpb24gZHQocixlKXtpZihBcnJheS5pc0FycmF5KGUpKWUuc3BsaWNlKDAsZS5sZW5ndGgpO2Vsc2UgaWYodHlwZW9mIGU9PSJvYmplY3QiKWZvcihjb25zdCB0IGluIGUpZGVsZXRlIGVbdF07Zm9yKGNvbnN0IHQgaW4gcilBcnJheS5pc0FycmF5KHJbdF0pPyhlW3RdPVtdLGR0KHJbdF0sZVt0XSkpOnR5cGVvZiByW3RdPT0ib2JqZWN0Ij8oZVt0XT17fSxkdChyW3RdLGVbdF0pKTplW3RdPXJbdF19YXN5bmMgZnVuY3Rpb24gZ2kocixlKXtjb25zdHtmdW5jdGlvbk5hbWU6dCxhcmdzOm59PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtpZighdCl0aHJvdyJtaXNzaW5nIGZ1bmN0aW9uIG5hbWUgdG8gY2FsbCI7aWYoIWUuaW5zdGFuY2VbdF0pdGhyb3dgdW5kZWZpbmVkIGZ1bmN0aW9uIFske3R9XSBpbiBjbGFzcyAke2UuaW5zdGFuY2UuY29uc3RydWN0b3Iud29ya2VySWR9YDtHZShyLGF3YWl0IGUuaW5zdGFuY2VbdF0oLi4ubiE9bnVsbD9uOltdKSl9Y29uc3QgeWk9S3QoInJlZ2lzdGVyZWRXb3JrZXJzIix7fSk7ZnVuY3Rpb24gYmkocixlKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgY2xhc3NOYW1lIHdoaWxlIGluaXRpYWxpemluZyB3b3JrZXIiO2NvbnN0W3Qsbl09ci5hcmdzLG89eWlbdF07aWYobyllLmluc3RhbmNlPW5ldyBvKHIuYXJncy5zbGljZSgxKSk7ZWxzZSB0aHJvd2B1bmtub3duIHdvcmtlciBjbGFzcyAke3R9YDtkdChuLG5lKSxHZShyLHR5cGVvZiBlLmluc3RhbmNlIT09dm9pZCAwKX1hc3luYyBmdW5jdGlvbiB4aShyLGUpe2NvbnN0e2FyZ3M6dH09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2xldCBuO2UuaW5zdGFuY2UudGVybWluYXRlJiYobj1hd2FpdCBlLmluc3RhbmNlLnRlcm1pbmF0ZSguLi50IT1udWxsP3Q6W10pKSxHZShyLG4pfWZ1bmN0aW9uIF9pKHIpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBnbG9iYWxzIHdoaWxlIHN5bmNpbmciO2R0KHIuYXJnc1swXSxuZSksR2Uocix7fSl9ZnVuY3Rpb24gdmkoKXtjb25zdCByPXt9O29ubWVzc2FnZT1hc3luYyBlPT57Y29uc3QgdD1lLmRhdGE7c3dpdGNoKHQudHlwZSl7Y2FzZSBwZS5JTklUOmJpKHQscik7YnJlYWs7Y2FzZSBwZS5GT1JXQVJEOmdpKHQscik7YnJlYWs7Y2FzZSBwZS5URVJNSU5BVEU6eGkodCxyKTticmVhaztjYXNlIHBlLkdMT0JBTFNfU1lOQzpfaSh0KTticmVha319fWFuKCkmJnZpKCk7ZnVuY3Rpb24gRWkocixlKXtyZXR1cm4gbmVbcl18fChuZVtyXT1lKSxbKCk9Pm5lW3JdLGFzeW5jIHQ9PntuZVtyXT10LGF3YWl0IHBpKCl9XX1mdW5jdGlvbiBUaShyLGUpe3JldHVybiBFaShyLGUpfWNvbnN0W3dpLEFpXT1UaSgibWV0YWRhdGEiKTtmdW5jdGlvbiBJaShyKXtBaShyKX1mdW5jdGlvbiBKdCgpe3JldHVybiB3aSgpfWNsYXNzIFp0e2NvbnN0cnVjdG9yKGUpe29pKHRoaXMsInV1aWQiLGRpKCkpLHRoaXMuY29uZmlnPWV9YXN5bmMgc2VuZChlKXt2YXIgdCxuLG87Y29uc3R7YXBwSWQ6aSxzb3VyY2VUeXBlOnN9PSh0PUp0KCkpIT1udWxsP3Q6e307aWYoIWl8fCFzKXJldHVybiJtZXRhZGF0YSBtaXNzaW5nIjtjb25zdCBhPW5ldyBBYm9ydENvbnRyb2xsZXIsdT1zZXRUaW1lb3V0KCgpPT5hLmFib3J0KCksYWkpO3JldHVybiBhd2FpdCgobz0obj10aGlzLmNvbmZpZyk9PW51bGw/dm9pZCAwOm4uZmV0Y2gpIT1udWxsP286ZmV0Y2gpKHRoaXMuZ2V0VXJsKCkse21ldGhvZDoiUE9TVCIsaGVhZGVyczp0aGlzLmdldEhlYWRlcnMoKSxib2R5OkpTT04uc3RyaW5naWZ5KHRoaXMuYnVpbGRSZXBvcnQoZSkpLHNpZ25hbDphLnNpZ25hbH0pLGNsZWFyVGltZW91dCh1KSwic3VjY2VzcyJ9Z2V0VXJsKCl7dmFyIGU7bGV0IHQ9KGU9SnQoKS5wcm94eVVybCkhPW51bGw/ZTpzaTtyZXR1cm4gdCs9KHQuYXQoLTEpPT09Ii8iPyIiOiIvIikraWksdH1nZXRIZWFkZXJzKCl7cmV0dXJueyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn19YnVpbGRSZXBvcnQoZSl7Y29uc3QgdD1KdCgpO3JldHVybntndWlkOnRoaXMudXVpZCwuLi5lLGFwcGxpY2F0aW9uSWQ6dC5hcHBJZCx0aW1lc3RhbXA6RGF0ZS5ub3coKSxwcm94eVVybDp0LnByb3h5VXJsLHNvdXJjZTp0LnNvdXJjZVR5cGV9fX1jb25zdCBodD0iMi4wLjMiO2NsYXNzIFNpe2NvbnN0cnVjdG9yKGUpe3codGhpcywiZnJhbWVUcmFuc2Zvcm1lZENvdW50IiwwKSx3KHRoaXMsImZyYW1lRnJvbVNvdXJjZUNvdW50IiwwKSx3KHRoaXMsInN0YXJ0QXQiLDApLHcodGhpcywicmVwb3J0ZXIiKSx0aGlzLmNvbmZpZz1lLHRoaXMucmVwb3J0ZXI9bmV3IFp0KGUpfWFzeW5jIG9uRnJhbWVGcm9tU291cmNlKCl7dGhpcy5mcmFtZUZyb21Tb3VyY2VDb3VudCsrfWdldCBmcHMoKXtjb25zdHtzdGFydEF0OmUsZnJhbWVGcm9tU291cmNlQ291bnQ6dH09dGhpcyxuPShEYXRlLm5vdygpLWUpLzFlMztyZXR1cm4gdC9ufWFzeW5jIG9uRnJhbWVUcmFuc2Zvcm1lZChlPXt9LHQ9ITEpe3RoaXMuc3RhcnRBdD09PTAmJih0aGlzLnN0YXJ0QXQ9RGF0ZS5ub3coKSksdGhpcy5mcmFtZVRyYW5zZm9ybWVkQ291bnQrKztjb25zdHtzdGFydEF0Om4sZnJhbWVUcmFuc2Zvcm1lZENvdW50Om8sZnJhbWVGcm9tU291cmNlQ291bnQ6aX09dGhpcyxzPURhdGUubm93KCksYT0ocy1uKS8xZTMsdT1vL2EsZj1pL2E7cmV0dXJuIHR8fHRoaXMuZnJhbWVUcmFuc2Zvcm1lZENvdW50Pj10aGlzLmNvbmZpZy5sb2dnaW5nSW50ZXJ2YWxGcmFtZUNvdW50Pyh0aGlzLmZyYW1lRnJvbVNvdXJjZUNvdW50PTAsdGhpcy5mcmFtZVRyYW5zZm9ybWVkQ291bnQ9MCx0aGlzLnN0YXJ0QXQ9cyx0aGlzLnJlcG9ydGVyLmNvbmZpZz10aGlzLmNvbmZpZyx0aGlzLnJlcG9ydGVyLnNlbmQoey4uLnRoaXMuY29uZmlnLnJlcG9ydCx2YXJpYXRpb246IlFvUyIsZnBzOmYsdHJhbnNmb3JtZWRGcHM6dSxmcmFtZXNUcmFuc2Zvcm1lZDpvLC4uLmV9KSk6InN1Y2Nlc3MifX12YXIgZXI9KHI9PihyLnBpcGVsaW5lX2VuZGVkPSJwaXBlbGluZV9lbmRlZCIsci5waXBlbGluZV9lbmRlZF93aXRoX2Vycm9yPSJwaXBlbGluZV9lbmRlZF93aXRoX2Vycm9yIixyLnBpcGVsaW5lX3N0YXJ0ZWQ9InBpcGVsaW5lX3N0YXJ0ZWQiLHIucGlwZWxpbmVfc3RhcnRlZF93aXRoX2Vycm9yPSJwaXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3IiLHIucGlwZWxpbmVfcmVzdGFydGVkPSJwaXBlbGluZV9yZXN0YXJ0ZWQiLHIucGlwZWxpbmVfcmVzdGFydGVkX3dpdGhfZXJyb3I9InBpcGVsaW5lX3Jlc3RhcnRlZF93aXRoX2Vycm9yIixyKSkoZXJ8fHt9KTtjb25zdCBSaT01MDAsRmk9Ljg7Y2xhc3MgUGkgZXh0ZW5kcyBRdHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKCksdyh0aGlzLCJyZXBvcnRlcl8iLG5ldyBadCksdyh0aGlzLCJyZXBvcnRlclFvc18iLG5ldyBTaSh7bG9nZ2luZ0ludGVydmFsRnJhbWVDb3VudDpSaSxyZXBvcnQ6e3ZlcnNpb246aHR9fSkpLHcodGhpcywidHJhbnNmb3JtZXJUeXBlXyIpLHcodGhpcywidHJhbnNmb3JtZXJfIiksdyh0aGlzLCJzaG91bGRTdG9wXyIpLHcodGhpcywiaXNGbGFzaGVkXyIpLHcodGhpcywibWVkaWFUcmFuc2Zvcm1lclFvc1JlcG9ydFN0YXJ0VGltZXN0YW1wXyIpLHcodGhpcywidmlkZW9IZWlnaHRfIiksdyh0aGlzLCJ2aWRlb1dpZHRoXyIpLHcodGhpcywidHJhY2tFeHBlY3RlZFJhdGVfIiksdyh0aGlzLCJpbmRleF8iKSx3KHRoaXMsImNvbnRyb2xsZXJfIiksdGhpcy5pbmRleF89dCx0aGlzLnRyYW5zZm9ybWVyXz1lLHRoaXMuc2hvdWxkU3RvcF89ITEsdGhpcy5pc0ZsYXNoZWRfPSExLHRoaXMubWVkaWFUcmFuc2Zvcm1lclFvc1JlcG9ydFN0YXJ0VGltZXN0YW1wXz0wLHRoaXMudmlkZW9IZWlnaHRfPTAsdGhpcy52aWRlb1dpZHRoXz0wLHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfPS0xLHRoaXMudHJhbnNmb3JtZXJUeXBlXz0iQ3VzdG9tIiwiZ2V0VHJhbnNmb3JtZXJUeXBlImluIGUmJih0aGlzLnRyYW5zZm9ybWVyVHlwZV89ZS5nZXRUcmFuc2Zvcm1lclR5cGUoKSksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiQ3JlYXRlIn0pfXNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMudHJhY2tFeHBlY3RlZFJhdGVfPWV9YXN5bmMgc3RhcnQoZSl7aWYodGhpcy5jb250cm9sbGVyXz1lLHRoaXMudHJhbnNmb3JtZXJfJiZ0eXBlb2YgdGhpcy50cmFuc2Zvcm1lcl8uc3RhcnQ9PSJmdW5jdGlvbiIpdHJ5e2F3YWl0IHRoaXMudHJhbnNmb3JtZXJfLnN0YXJ0KGUpfWNhdGNoKHQpe3RoaXMucmVwb3J0KHttZXNzYWdlOmVlLmVycm9ycy50cmFuc2Zvcm1lcl9zdGFydCx2YXJpYXRpb246IkVycm9yIixlcnJvcjpxdCh0KX0pO2NvbnN0IG49e2V2ZW50TWV0YURhdGE6e3RyYW5zZm9ybWVySW5kZXg6dGhpcy5pbmRleF99LGVycm9yOnQsZnVuY3Rpb246InN0YXJ0In07dGhpcy5lbWl0KCJlcnJvciIsbil9fWFzeW5jIHRyYW5zZm9ybShlLHQpe3ZhciBuLG8saSxzO2lmKHRoaXMubWVkaWFUcmFuc2Zvcm1lclFvc1JlcG9ydFN0YXJ0VGltZXN0YW1wXz09PTAmJih0aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnRTdGFydFRpbWVzdGFtcF89RGF0ZS5ub3coKSksZSBpbnN0YW5jZW9mIFZpZGVvRnJhbWUmJih0aGlzLnZpZGVvSGVpZ2h0Xz0obj1lPT1udWxsP3ZvaWQgMDplLmRpc3BsYXlIZWlnaHQpIT1udWxsP246MCx0aGlzLnZpZGVvV2lkdGhfPShvPWU9PW51bGw/dm9pZCAwOmUuZGlzcGxheVdpZHRoKSE9bnVsbD9vOjApLHRoaXMucmVwb3J0ZXJRb3NfLm9uRnJhbWVGcm9tU291cmNlKCksdGhpcy50cmFuc2Zvcm1lcl8paWYodGhpcy5zaG91bGRTdG9wXyljb25zb2xlLndhcm4oIltQaXBlbGluZV0gZmx1c2ggZnJvbSB0cmFuc2Zvcm0iKSxlLmNsb3NlKCksdGhpcy5mbHVzaCh0KSx0LnRlcm1pbmF0ZSgpO2Vsc2V7dHJ5e2F3YWl0KChzPShpPXRoaXMudHJhbnNmb3JtZXJfKS50cmFuc2Zvcm0pPT1udWxsP3ZvaWQgMDpzLmNhbGwoaSxlLHQpKSx0aGlzLnJlcG9ydFFvcygpfWNhdGNoKGEpe3RoaXMucmVwb3J0KHttZXNzYWdlOmVlLmVycm9ycy50cmFuc2Zvcm1lcl90cmFuc2Zvcm0sdmFyaWF0aW9uOiJFcnJvciIsZXJyb3I6cXQoYSl9KTtjb25zdCB1PXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjphLGZ1bmN0aW9uOiJ0cmFuc2Zvcm0ifTt0aGlzLmVtaXQoImVycm9yIix1KX1pZih0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyE9LTEmJnRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKkZpPnRoaXMucmVwb3J0ZXJRb3NfLmZwcyl7Y29uc3QgYT17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sd2FybmluZ1R5cGU6ImZwc19kcm9wIixkcm9wSW5mbzp7cmVxdWVzdGVkOnRoaXMudHJhY2tFeHBlY3RlZFJhdGVfLGN1cnJlbnQ6dGhpcy5yZXBvcnRlclFvc18uZnBzfX07dGhpcy5lbWl0KCJ3YXJuIixhKX19fWFzeW5jIGZsdXNoKGUpe2lmKHRoaXMudHJhbnNmb3JtZXJfJiZ0eXBlb2YgdGhpcy50cmFuc2Zvcm1lcl8uZmx1c2g9PSJmdW5jdGlvbiImJiF0aGlzLmlzRmxhc2hlZF8pe3RoaXMuaXNGbGFzaGVkXz0hMDt0cnl7YXdhaXQgdGhpcy50cmFuc2Zvcm1lcl8uZmx1c2goZSl9Y2F0Y2godCl7dGhpcy5yZXBvcnQoe21lc3NhZ2U6ZWUuZXJyb3JzLnRyYW5zZm9ybWVyX2ZsdXNoLHZhcmlhdGlvbjoiRXJyb3IiLGVycm9yOnF0KHQpfSk7Y29uc3Qgbj17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sZXJyb3I6dCxmdW5jdGlvbjoiZmx1c2gifTt0aGlzLmVtaXQoImVycm9yIixuKX19dGhpcy5yZXBvcnRRb3MoITApLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IkRlbGV0ZSJ9KX1zdG9wKCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gU3RvcCBzdHJlYW0uIiksdGhpcy5jb250cm9sbGVyXyYmKHRoaXMuZmx1c2godGhpcy5jb250cm9sbGVyXyksdGhpcy5jb250cm9sbGVyXy50ZXJtaW5hdGUoKSksdGhpcy5zaG91bGRTdG9wXz0hMH1yZXBvcnQoZSl7dGhpcy5yZXBvcnRlcl8uc2VuZCh7dmVyc2lvbjpodCxhY3Rpb246Ik1lZGlhVHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyVHlwZTp0aGlzLnRyYW5zZm9ybWVyVHlwZV8sLi4uZX0pfXJlcG9ydFFvcyhlPSExKXt0aGlzLnJlcG9ydGVyUW9zXy5jb25maWc9ey4uLnRoaXMucmVwb3J0ZXJRb3NfLmNvbmZpZ30sdGhpcy5yZXBvcnRlclFvc18ub25GcmFtZVRyYW5zZm9ybWVkKHt2ZXJzaW9uOmh0LGFjdGlvbjoiTWVkaWFUcmFuc2Zvcm1lciIsdHJhbnNmb3JtZXJUeXBlOnRoaXMudHJhbnNmb3JtZXJUeXBlXyx2aWRlb1dpZHRoOnRoaXMudmlkZW9XaWR0aF8sdmlkZW9IZWlnaHQ6dGhpcy52aWRlb0hlaWdodF99LGUpfX1jbGFzcyBraSBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdyh0aGlzLCJ0cmFuc2Zvcm1lcnNfIiksdyh0aGlzLCJ0cmFja0V4cGVjdGVkUmF0ZV8iKSx0aGlzLnRyYW5zZm9ybWVyc189W10sdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTE7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCBuPW5ldyBQaShlW3RdLHQpO24ub24oImVycm9yIixvPT57dGhpcy5lbWl0KCJlcnJvciIsbyl9KSxuLm9uKCJ3YXJuIixvPT57dGhpcy5lbWl0KCJ3YXJuIixvKX0pLHRoaXMudHJhbnNmb3JtZXJzXy5wdXNoKG4pfX1zZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz1lO2ZvcihsZXQgdCBvZiB0aGlzLnRyYW5zZm9ybWVyc18pdC5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyl9YXN5bmMgc3RhcnQoZSx0KXtpZighdGhpcy50cmFuc2Zvcm1lcnNffHx0aGlzLnRyYW5zZm9ybWVyc18ubGVuZ3RoPT09MCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gTm8gdHJhbnNmb3JtZXJzLiIpO3JldHVybn10cnl7bGV0IG49ZTtmb3IobGV0IG8gb2YgdGhpcy50cmFuc2Zvcm1lcnNfKWU9ZS5waXBlVGhyb3VnaChuZXcgVHJhbnNmb3JtU3RyZWFtKG8pKTtlLnBpcGVUbyh0KS50aGVuKGFzeW5jKCk9Pntjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTZXR1cC4iKSxhd2FpdCB0LmFib3J0KCksYXdhaXQgbi5jYW5jZWwoKSx0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX2VuZGVkIil9KS5jYXRjaChhc3luYyBvPT57ZS5jYW5jZWwoKS50aGVuKCgpPT57Y29uc29sZS5sb2coIltQaXBlbGluZV0gU2h1dHRpbmcgZG93biBzdHJlYW1zIGFmdGVyIGFib3J0LiIpfSkuY2F0Y2goaT0+e2NvbnNvbGUuZXJyb3IoIltQaXBlbGluZV0gRXJyb3IgZnJvbSBzdHJlYW0gdHJhbnNmb3JtOiIsaSl9KSxhd2FpdCB0LmFib3J0KG8pLGF3YWl0IG4uY2FuY2VsKG8pLHRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIiwicGlwZWxpbmVfZW5kZWRfd2l0aF9lcnJvciIpfSl9Y2F0Y2h7dGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3IiKSx0aGlzLmRlc3Ryb3koKTtyZXR1cm59dGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9zdGFydGVkIiksY29uc29sZS5sb2coIltQaXBlbGluZV0gUGlwZWxpbmUgc3RhcnRlZC4iKX1hc3luYyBkZXN0cm95KCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gRGVzdHJveWluZyBQaXBlbGluZS4iKTtmb3IobGV0IGUgb2YgdGhpcy50cmFuc2Zvcm1lcnNfKWUuc3RvcCgpfX1jbGFzcyBEaSBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx3KHRoaXMsInJlcG9ydGVyXyIpLHcodGhpcywicGlwZWxpbmVfIiksdyh0aGlzLCJ0cmFuc2Zvcm1lcnNfIiksdyh0aGlzLCJyZWFkYWJsZV8iKSx3KHRoaXMsIndyaXRhYmxlXyIpLHcodGhpcywidHJhY2tFeHBlY3RlZFJhdGVfIiksdGhpcy5yZXBvcnRlcl89bmV3IFp0LHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfPS0xLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IkNyZWF0ZSJ9KX1zZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz1lLHRoaXMucGlwZWxpbmVfJiZ0aGlzLnBpcGVsaW5lXy5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyl9dHJhbnNmb3JtKGUsdCl7cmV0dXJuIHRoaXMucmVhZGFibGVfPWUsdGhpcy53cml0YWJsZV89dCx0aGlzLnRyYW5zZm9ybUludGVybmFsKCl9dHJhbnNmb3JtSW50ZXJuYWwoKXtyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMoZSx0KT0+e2lmKCF0aGlzLnRyYW5zZm9ybWVyc198fHRoaXMudHJhbnNmb3JtZXJzXy5sZW5ndGg9PT0wKXt0aGlzLnJlcG9ydCh7bWVzc2FnZTplZS5lcnJvcnMudHJhbnNmb3JtZXJfbm9uZSx2YXJpYXRpb246IkVycm9yIn0pLHQoIltNZWRpYVByb2Nlc3Nvcl0gTmVlZCB0byBzZXQgdHJhbnNmb3JtZXJzLiIpO3JldHVybn1pZighdGhpcy5yZWFkYWJsZV8pe3RoaXMucmVwb3J0KHt2YXJpYXRpb246IkVycm9yIixtZXNzYWdlOmVlLmVycm9ycy5yZWFkYWJsZV9udWxsfSksdCgiW01lZGlhUHJvY2Vzc29yXSBSZWFkYWJsZSBpcyBudWxsLiIpO3JldHVybn1pZighdGhpcy53cml0YWJsZV8pe3RoaXMucmVwb3J0KHt2YXJpYXRpb246IkVycm9yIixtZXNzYWdlOmVlLmVycm9ycy53cml0YWJsZV9udWxsfSksdCgiW01lZGlhUHJvY2Vzc29yXSBXcml0YWJsZSBpcyBudWxsLiIpO3JldHVybn1sZXQgbj0hMTt0aGlzLnBpcGVsaW5lXyYmKG49ITAsdGhpcy5waXBlbGluZV8uY2xlYXJMaXN0ZW5lcnMoKSx0aGlzLnBpcGVsaW5lXy5kZXN0cm95KCkpLHRoaXMucGlwZWxpbmVfPW5ldyBraSh0aGlzLnRyYW5zZm9ybWVyc18pLHRoaXMucGlwZWxpbmVfLm9uKCJ3YXJuIixvPT57dGhpcy5lbWl0KCJ3YXJuIixvKX0pLHRoaXMucGlwZWxpbmVfLm9uKCJlcnJvciIsbz0+e3RoaXMuZW1pdCgiZXJyb3IiLG8pfSksdGhpcy5waXBlbGluZV8ub24oInBpcGVsaW5lSW5mbyIsbz0+e24mJihvPT09InBpcGVsaW5lX3N0YXJ0ZWQiP289ZXIucGlwZWxpbmVfcmVzdGFydGVkOm89PT0icGlwZWxpbmVfc3RhcnRlZF93aXRoX2Vycm9yIiYmKG89ZXIucGlwZWxpbmVfcmVzdGFydGVkX3dpdGhfZXJyb3IpKSx0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsbyl9KSx0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyE9LTEmJnRoaXMucGlwZWxpbmVfLnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKSx0aGlzLnBpcGVsaW5lXy5zdGFydCh0aGlzLnJlYWRhYmxlXyx0aGlzLndyaXRhYmxlXykudGhlbigoKT0+e2UoKX0pLmNhdGNoKG89Pnt0KG8pfSl9KX1zZXRUcmFuc2Zvcm1lcnMoZSl7cmV0dXJuIHRoaXMucmVwb3J0KHt2YXJpYXRpb246IlVwZGF0ZSIsbWVzc2FnZTplZS51cGRhdGVzLnRyYW5zZm9ybWVyX25ld30pLHRoaXMudHJhbnNmb3JtZXJzXz1lLHRoaXMucmVhZGFibGVfJiZ0aGlzLndyaXRhYmxlXz90aGlzLnRyYW5zZm9ybUludGVybmFsKCk6UHJvbWlzZS5yZXNvbHZlKCl9ZGVzdHJveSgpe3JldHVybiBuZXcgUHJvbWlzZShhc3luYyBlPT57dGhpcy5waXBlbGluZV8mJnRoaXMucGlwZWxpbmVfLmRlc3Ryb3koKSx0aGlzLnJlcG9ydCh7dmFyaWF0aW9uOiJEZWxldGUifSksZSgpfSl9cmVwb3J0KGUpe3RoaXMucmVwb3J0ZXJfLnNlbmQoe3ZlcnNpb246aHQsYWN0aW9uOiJNZWRpYVByb2Nlc3NvciIsLi4uZX0pfX12YXIgQ2k9T2JqZWN0LmRlZmluZVByb3BlcnR5LEJpPShyLGUsdCk9PmUgaW4gcj9DaShyLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnR9KTpyW2VdPXQsTWk9KHIsZSx0KT0+KEJpKHIsdHlwZW9mIGUhPSJzeW1ib2wiP2UrIiI6ZSx0KSx0KTtjb25zdCBPaT0iaGxnLnRva2JveC5jb20vcHJvZC9sb2dnaW5nL3ZjcF93ZWJydGMiLFVpPSJodHRwczovLyIsTmk9MWU0O2xldCBtdDtjb25zdCBMaT1uZXcgVWludDhBcnJheSgxNik7ZnVuY3Rpb24gemkoKXtpZighbXQmJihtdD10eXBlb2YgY3J5cHRvPCJ1IiYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byksIW10KSl0aHJvdyBuZXcgRXJyb3IoImNyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkIik7cmV0dXJuIG10KExpKX1jb25zdCBCPVtdO2ZvcihsZXQgcj0wO3I8MjU2OysrcilCLnB1c2goKHIrMjU2KS50b1N0cmluZygxNikuc2xpY2UoMSkpO2Z1bmN0aW9uIEdpKHIsZT0wKXtyZXR1cm4oQltyW2UrMF1dK0JbcltlKzFdXStCW3JbZSsyXV0rQltyW2UrM11dKyItIitCW3JbZSs0XV0rQltyW2UrNV1dKyItIitCW3JbZSs2XV0rQltyW2UrN11dKyItIitCW3JbZSs4XV0rQltyW2UrOV1dKyItIitCW3JbZSsxMF1dK0JbcltlKzExXV0rQltyW2UrMTJdXStCW3JbZSsxM11dK0JbcltlKzE0XV0rQltyW2UrMTVdXSkudG9Mb3dlckNhc2UoKX1jb25zdCAkaT10eXBlb2YgY3J5cHRvPCJ1IiYmY3J5cHRvLnJhbmRvbVVVSUQmJmNyeXB0by5yYW5kb21VVUlELmJpbmQoY3J5cHRvKSx1bj17cmFuZG9tVVVJRDokaX07ZnVuY3Rpb24gV2kocixlLHQpe2lmKHVuLnJhbmRvbVVVSUQmJiFlJiYhcilyZXR1cm4gdW4ucmFuZG9tVVVJRCgpO3I9cnx8e307Y29uc3Qgbj1yLnJhbmRvbXx8KHIucm5nfHx6aSkoKTtpZihuWzZdPW5bNl0mMTV8NjQsbls4XT1uWzhdJjYzfDEyOCxlKXt0PXR8fDA7Zm9yKGxldCBvPTA7bzwxNjsrK28pZVt0K29dPW5bb107cmV0dXJuIGV9cmV0dXJuIEdpKG4pfWZ1bmN0aW9uIHRyKHIsZSl7Z2xvYmFsVGhpcy52b25hZ2V8fChnbG9iYWxUaGlzLnZvbmFnZT17fSksZ2xvYmFsVGhpcy52b25hZ2Uud29ya2VyaXplcnx8KGdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI9e30pO2xldCB0PWdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI7cmV0dXJuIHRbcl18fCh0W3JdPWUpLHRbcl19Y29uc3Qgb2U9dHIoImdsb2JhbHMiLHt9KTt2YXIgZ2U9KHI9PihyLklOSVQ9IklOSVQiLHIuRk9SV0FSRD0iRk9SV0FSRCIsci5URVJNSU5BVEU9IlRFUk1JTkFURSIsci5HTE9CQUxTX1NZTkM9IkdMT0JBTFNfU1lOQyIscikpKGdlfHx7fSk7ZnVuY3Rpb24gY24ocil7cmV0dXJuW0ltYWdlQml0bWFwLFJlYWRhYmxlU3RyZWFtLFdyaXRhYmxlU3RyZWFtXS5zb21lKGU9PnIgaW5zdGFuY2VvZiBlKX1sZXQgVmk9MDtmdW5jdGlvbiBIaShyLGUsdCxuLG8pe2NvbnN0IGk9VmkrKztyZXR1cm4gci5wb3N0TWVzc2FnZSh7aWQ6aSx0eXBlOmUsZnVuY3Rpb25OYW1lOnQsYXJnczpufSxuLmZpbHRlcihzPT5jbihzKSkpLG5ldyBQcm9taXNlKHM9PntvPT1udWxsfHxvLnNldChpLHMpfSl9ZnVuY3Rpb24gJGUocixlKXtjb25zdHtpZDp0LHR5cGU6bn09cixvPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07cG9zdE1lc3NhZ2Uoe2lkOnQsdHlwZTpuLHJlc3VsdDplfSxvLmZpbHRlcihpPT5jbihpKSkpfWNvbnN0IGZuPXRyKCJ3b3JrZXJpemVkIix7fSk7ZnVuY3Rpb24gbG4oKXtyZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlfWFzeW5jIGZ1bmN0aW9uIGppKCl7aWYobG4oKSkkZSh7dHlwZTpnZS5HTE9CQUxTX1NZTkN9LG9lKTtlbHNle2NvbnN0IHI9W107Zm9yKGNvbnN0IGUgaW4gZm4pe2NvbnN0e3dvcmtlcjp0LHJlc29sdmVyczpufT1mbltlXS53b3JrZXJDb250ZXh0O3QmJnIucHVzaChIaSh0LGdlLkdMT0JBTFNfU1lOQywiIixbb2VdLG4pKX1hd2FpdCBQcm9taXNlLmFsbChyKX19ZnVuY3Rpb24gcHQocixlKXtpZihBcnJheS5pc0FycmF5KGUpKWUuc3BsaWNlKDAsZS5sZW5ndGgpO2Vsc2UgaWYodHlwZW9mIGU9PSJvYmplY3QiKWZvcihjb25zdCB0IGluIGUpZGVsZXRlIGVbdF07Zm9yKGNvbnN0IHQgaW4gcilBcnJheS5pc0FycmF5KHJbdF0pPyhlW3RdPVtdLHB0KHJbdF0sZVt0XSkpOnR5cGVvZiByW3RdPT0ib2JqZWN0Ij8oZVt0XT17fSxwdChyW3RdLGVbdF0pKTplW3RdPXJbdF19YXN5bmMgZnVuY3Rpb24gWWkocixlKXtjb25zdHtmdW5jdGlvbk5hbWU6dCxhcmdzOm59PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtpZighdCl0aHJvdyJtaXNzaW5nIGZ1bmN0aW9uIG5hbWUgdG8gY2FsbCI7aWYoIWUuaW5zdGFuY2VbdF0pdGhyb3dgdW5kZWZpbmVkIGZ1bmN0aW9uIFske3R9XSBpbiBjbGFzcyAke2UuaW5zdGFuY2UuY29uc3RydWN0b3Iud29ya2VySWR9YDskZShyLGF3YWl0IGUuaW5zdGFuY2VbdF0oLi4ubiE9bnVsbD9uOltdKSl9Y29uc3QgWGk9dHIoInJlZ2lzdGVyZWRXb3JrZXJzIix7fSk7ZnVuY3Rpb24gUWkocixlKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgY2xhc3NOYW1lIHdoaWxlIGluaXRpYWxpemluZyB3b3JrZXIiO2NvbnN0W3Qsbl09ci5hcmdzLG89WGlbdF07aWYobyllLmluc3RhbmNlPW5ldyBvKHIuYXJncy5zbGljZSgxKSk7ZWxzZSB0aHJvd2B1bmtub3duIHdvcmtlciBjbGFzcyAke3R9YDtwdChuLG9lKSwkZShyLHR5cGVvZiBlLmluc3RhbmNlIT09dm9pZCAwKX1hc3luYyBmdW5jdGlvbiBxaShyLGUpe2NvbnN0e2FyZ3M6dH09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2xldCBuO2UuaW5zdGFuY2UudGVybWluYXRlJiYobj1hd2FpdCBlLmluc3RhbmNlLnRlcm1pbmF0ZSguLi50IT1udWxsP3Q6W10pKSwkZShyLG4pfWZ1bmN0aW9uIEtpKHIpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBnbG9iYWxzIHdoaWxlIHN5bmNpbmciO3B0KHIuYXJnc1swXSxvZSksJGUocix7fSl9ZnVuY3Rpb24gSmkoKXtjb25zdCByPXt9O29ubWVzc2FnZT1hc3luYyBlPT57Y29uc3QgdD1lLmRhdGE7c3dpdGNoKHQudHlwZSl7Y2FzZSBnZS5JTklUOlFpKHQscik7YnJlYWs7Y2FzZSBnZS5GT1JXQVJEOllpKHQscik7YnJlYWs7Y2FzZSBnZS5URVJNSU5BVEU6cWkodCxyKTticmVhaztjYXNlIGdlLkdMT0JBTFNfU1lOQzpLaSh0KTticmVha319fWxuKCkmJkppKCk7ZnVuY3Rpb24gWmkocixlKXtyZXR1cm4gb2Vbcl18fChvZVtyXT1lKSxbKCk9Pm9lW3JdLGFzeW5jIHQ9PntvZVtyXT10LGF3YWl0IGppKCl9XX1mdW5jdGlvbiBlcyhyLGUpe3JldHVybiBaaShyLGUpfWNvbnN0W3RzLFZsXT1lcygibWV0YWRhdGEiKTtmdW5jdGlvbiBycigpe3JldHVybiB0cygpfWNsYXNzIHJze2NvbnN0cnVjdG9yKGUpe01pKHRoaXMsInV1aWQiLFdpKCkpLHRoaXMuY29uZmlnPWV9YXN5bmMgc2VuZChlKXt2YXIgdCxuLG87Y29uc3R7YXBwSWQ6aSxzb3VyY2VUeXBlOnN9PSh0PXJyKCkpIT1udWxsP3Q6e307aWYoIWl8fCFzKXJldHVybiJtZXRhZGF0YSBtaXNzaW5nIjtjb25zdCBhPW5ldyBBYm9ydENvbnRyb2xsZXIsdT1zZXRUaW1lb3V0KCgpPT5hLmFib3J0KCksTmkpO3JldHVybiBhd2FpdCgobz0obj10aGlzLmNvbmZpZyk9PW51bGw/dm9pZCAwOm4uZmV0Y2gpIT1udWxsP286ZmV0Y2gpKHRoaXMuZ2V0VXJsKCkse21ldGhvZDoiUE9TVCIsaGVhZGVyczp0aGlzLmdldEhlYWRlcnMoKSxib2R5OkpTT04uc3RyaW5naWZ5KHRoaXMuYnVpbGRSZXBvcnQoZSkpLHNpZ25hbDphLnNpZ25hbH0pLGNsZWFyVGltZW91dCh1KSwic3VjY2VzcyJ9Z2V0VXJsKCl7dmFyIGU7bGV0IHQ9KGU9cnIoKS5wcm94eVVybCkhPW51bGw/ZTpVaTtyZXR1cm4gdCs9KHQuYXQoLTEpPT09Ii8iPyIiOiIvIikrT2ksdH1nZXRIZWFkZXJzKCl7cmV0dXJueyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn19YnVpbGRSZXBvcnQoZSl7Y29uc3QgdD1ycigpO3JldHVybntndWlkOnRoaXMudXVpZCwuLi5lLGFwcGxpY2F0aW9uSWQ6dC5hcHBJZCx0aW1lc3RhbXA6RGF0ZS5ub3coKSxwcm94eVVybDp0LnByb3h5VXJsLHNvdXJjZTp0LnNvdXJjZVR5cGV9fX1jb25zdCBucz0iNS4xLjIiO3ZhciBndD0ocj0+KHIuTG93PSJMb3ciLHIuSGlnaD0iSGlnaCIscikpKGd0fHx7fSksbnI9KHI9PihyLkZBU1Q9IkZBU1QiLHIuUFJFQ0lTRT0iUFJFQ0lTRSIscikpKG5yfHx7fSkseXQ9KHI9PihyLkNBTlZBUz0iQ0FOVkFTIixyLldFQkdMPSJXRUJHTCIscikpKHl0fHx7fSksb3M9ZnVuY3Rpb24oKXt2YXIgcj10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jdXJyZW50U2NyaXB0P2RvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjOnZvaWQgMDtyZXR1cm4gZnVuY3Rpb24oZSl7ZT1lfHx7fTt2YXIgdD10eXBlb2YgZTwidSI/ZTp7fSxuLG87dC5yZWFkeT1uZXcgUHJvbWlzZShmdW5jdGlvbihjLG0pe249YyxvPW19KTt2YXIgaT17fSxzO2ZvcihzIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShzKSYmKGlbc109dFtzXSk7dmFyIGE9Ii4vdGhpcy5wcm9ncmFtIix1PWZ1bmN0aW9uKGMsbSl7dGhyb3cgbX0sZj0hMCxkPSIiO2Z1bmN0aW9uIHAoYyl7cmV0dXJuIHQubG9jYXRlRmlsZT90LmxvY2F0ZUZpbGUoYyxkKTpkK2N9dmFyIGc7dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3VycmVudFNjcmlwdCYmKGQ9ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpLHImJihkPXIpLGQuaW5kZXhPZigiYmxvYjoiKSE9PTA/ZD1kLnN1YnN0cigwLGQucmVwbGFjZSgvWz8jXS4qLywiIikubGFzdEluZGV4T2YoIi8iKSsxKTpkPSIiO3ZhciBiPXQucHJpbnR8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksaD10LnByaW50RXJyfHxjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtmb3IocyBpbiBpKWkuaGFzT3duUHJvcGVydHkocykmJih0W3NdPWlbc10pO2k9bnVsbCx0LmFyZ3VtZW50cyYmdC5hcmd1bWVudHMsdC50aGlzUHJvZ3JhbSYmKGE9dC50aGlzUHJvZ3JhbSksdC5xdWl0JiYodT10LnF1aXQpO3ZhciB4O3Qud2FzbUJpbmFyeSYmKHg9dC53YXNtQmluYXJ5KTt2YXIgRT10Lm5vRXhpdFJ1bnRpbWV8fCEwO3R5cGVvZiBXZWJBc3NlbWJseSE9Im9iamVjdCImJmRlKCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkIik7dmFyIHYsRj0hMSxrPXR5cGVvZiBUZXh0RGVjb2RlcjwidSI/bmV3IFRleHREZWNvZGVyKCJ1dGY4Iik6dm9pZCAwO2Z1bmN0aW9uIEcoYyxtLHkpe2Zvcih2YXIgVD1tK3ksRD1tO2NbRF0mJiEoRD49VCk7KSsrRDtpZihELW0+MTYmJmMuc3ViYXJyYXkmJmspcmV0dXJuIGsuZGVjb2RlKGMuc3ViYXJyYXkobSxEKSk7Zm9yKHZhciBNPSIiO208RDspe3ZhciBBPWNbbSsrXTtpZighKEEmMTI4KSl7TSs9U3RyaW5nLmZyb21DaGFyQ29kZShBKTtjb250aW51ZX12YXIgVT1jW20rK10mNjM7aWYoKEEmMjI0KT09MTkyKXtNKz1TdHJpbmcuZnJvbUNoYXJDb2RlKChBJjMxKTw8NnxVKTtjb250aW51ZX12YXIgSz1jW20rK10mNjM7aWYoKEEmMjQwKT09MjI0P0E9KEEmMTUpPDwxMnxVPDw2fEs6QT0oQSY3KTw8MTh8VTw8MTJ8Szw8NnxjW20rK10mNjMsQTw2NTUzNilNKz1TdHJpbmcuZnJvbUNoYXJDb2RlKEEpO2Vsc2V7dmFyIEdvPUEtNjU1MzY7TSs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxHbz4+MTAsNTYzMjB8R28mMTAyMyl9fXJldHVybiBNfWZ1bmN0aW9uIHooYyxtKXtyZXR1cm4gYz9HKGxlLGMsbSk6IiJ9ZnVuY3Rpb24gSChjLG0seSl7Zm9yKHZhciBUPTA7VDxjLmxlbmd0aDsrK1QpVGVbbSsrPj4wXT1jLmNoYXJDb2RlQXQoVCk7eXx8KFRlW20+PjBdPTApfWZ1bmN0aW9uICQoYyxtKXtyZXR1cm4gYyVtPjAmJihjKz1tLWMlbSksY312YXIgS2UsVGUsbGUsVztmdW5jdGlvbiBCbyhjKXtLZT1jLHQuSEVBUDg9VGU9bmV3IEludDhBcnJheShjKSx0LkhFQVAxNj1uZXcgSW50MTZBcnJheShjKSx0LkhFQVAzMj1XPW5ldyBJbnQzMkFycmF5KGMpLHQuSEVBUFU4PWxlPW5ldyBVaW50OEFycmF5KGMpLHQuSEVBUFUxNj1uZXcgVWludDE2QXJyYXkoYyksdC5IRUFQVTMyPW5ldyBVaW50MzJBcnJheShjKSx0LkhFQVBGMzI9bmV3IEZsb2F0MzJBcnJheShjKSx0LkhFQVBGNjQ9bmV3IEZsb2F0NjRBcnJheShjKX10LklOSVRJQUxfTUVNT1JZO3ZhciBXcixNbz1bXSxPbz1bXSxVbz1bXSxpbD0wO2Z1bmN0aW9uIHNsKCl7cmV0dXJuIEV8fGlsPjB9ZnVuY3Rpb24gYWwoKXtpZih0LnByZVJ1bilmb3IodHlwZW9mIHQucHJlUnVuPT0iZnVuY3Rpb24iJiYodC5wcmVSdW49W3QucHJlUnVuXSk7dC5wcmVSdW4ubGVuZ3RoOylmbCh0LnByZVJ1bi5zaGlmdCgpKTtWcihNbyl9ZnVuY3Rpb24gdWwoKXtWcihPbyl9ZnVuY3Rpb24gY2woKXtpZih0LnBvc3RSdW4pZm9yKHR5cGVvZiB0LnBvc3RSdW49PSJmdW5jdGlvbiImJih0LnBvc3RSdW49W3QucG9zdFJ1bl0pO3QucG9zdFJ1bi5sZW5ndGg7KWRsKHQucG9zdFJ1bi5zaGlmdCgpKTtWcihVbyl9ZnVuY3Rpb24gZmwoYyl7TW8udW5zaGlmdChjKX1mdW5jdGlvbiBsbChjKXtPby51bnNoaWZ0KGMpfWZ1bmN0aW9uIGRsKGMpe1VvLnVuc2hpZnQoYyl9dmFyIHdlPTAsSmU9bnVsbDtmdW5jdGlvbiBobChjKXt3ZSsrLHQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKHdlKX1mdW5jdGlvbiBtbChjKXtpZih3ZS0tLHQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKHdlKSx3ZT09MCYmSmUpe3ZhciBtPUplO0plPW51bGwsbSgpfX10LnByZWxvYWRlZEltYWdlcz17fSx0LnByZWxvYWRlZEF1ZGlvcz17fTtmdW5jdGlvbiBkZShjKXt0Lm9uQWJvcnQmJnQub25BYm9ydChjKSxjPSJBYm9ydGVkKCIrYysiKSIsaChjKSxGPSEwLGMrPSIuIEJ1aWxkIHdpdGggLXMgQVNTRVJUSU9OUz0xIGZvciBtb3JlIGluZm8uIjt2YXIgbT1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKGMpO3Rocm93IG8obSksbX12YXIgcGw9ImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwiO2Z1bmN0aW9uIE5vKGMpe3JldHVybiBjLnN0YXJ0c1dpdGgocGwpfXZhciBYO1g9InRmbGl0ZS1zaW1kLndhc20iLE5vKFgpfHwoWD1wKFgpKTtmdW5jdGlvbiBMbyhjKXt0cnl7aWYoYz09WCYmeClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoeCk7aWYoIWcpdGhyb3ciYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWQifWNhdGNoKG0pe2RlKG0pfX1mdW5jdGlvbiBnbCgpe3JldHVybiF4JiZmJiZ0eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiI/ZmV0Y2goWCx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24oYyl7aWYoIWMub2spdGhyb3ciZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnIitYKyInIjtyZXR1cm4gYy5hcnJheUJ1ZmZlcigpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gTG8oWCl9KTpQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIExvKFgpfSl9ZnVuY3Rpb24geWwoKXt2YXIgYz17YTpObH07ZnVuY3Rpb24gbShBLFUpe3ZhciBLPUEuZXhwb3J0czt0LmFzbT1LLHY9dC5hc20ucSxCbyh2LmJ1ZmZlciksV3I9dC5hc20uRSxsbCh0LmFzbS5yKSxtbCgpfWhsKCk7ZnVuY3Rpb24geShBKXttKEEuaW5zdGFuY2UpfWZ1bmN0aW9uIFQoQSl7cmV0dXJuIGdsKCkudGhlbihmdW5jdGlvbihVKXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoVSxjKX0pLnRoZW4oZnVuY3Rpb24oVSl7cmV0dXJuIFV9KS50aGVuKEEsZnVuY3Rpb24oVSl7aCgiZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogIitVKSxkZShVKX0pfWZ1bmN0aW9uIEQoKXtyZXR1cm4heCYmdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nPT0iZnVuY3Rpb24iJiYhTm8oWCkmJnR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIj9mZXRjaChYLHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSkudGhlbihmdW5jdGlvbihBKXt2YXIgVT1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhBLGMpO3JldHVybiBVLnRoZW4oeSxmdW5jdGlvbihLKXtyZXR1cm4gaCgid2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICIrSyksaCgiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSxUKHkpfSl9KTpUKHkpfWlmKHQuaW5zdGFudGlhdGVXYXNtKXRyeXt2YXIgTT10Lmluc3RhbnRpYXRlV2FzbShjLG0pO3JldHVybiBNfWNhdGNoKEEpe3JldHVybiBoKCJNb2R1bGUuaW5zdGFudGlhdGVXYXNtIGNhbGxiYWNrIGZhaWxlZCB3aXRoIGVycm9yOiAiK0EpLCExfXJldHVybiBEKCkuY2F0Y2gobykse319ZnVuY3Rpb24gVnIoYyl7Zm9yKDtjLmxlbmd0aD4wOyl7dmFyIG09Yy5zaGlmdCgpO2lmKHR5cGVvZiBtPT0iZnVuY3Rpb24iKXttKHQpO2NvbnRpbnVlfXZhciB5PW0uZnVuYzt0eXBlb2YgeT09Im51bWJlciI/bS5hcmc9PT12b2lkIDA/V3IuZ2V0KHkpKCk6V3IuZ2V0KHkpKG0uYXJnKTp5KG0uYXJnPT09dm9pZCAwP251bGw6bS5hcmcpfX1mdW5jdGlvbiBibChjLG0seSxUKXtkZSgiQXNzZXJ0aW9uIGZhaWxlZDogIit6KGMpKyIsIGF0OiAiK1ttP3oobSk6InVua25vd24gZmlsZW5hbWUiLHksVD96KFQpOiJ1bmtub3duIGZ1bmN0aW9uIl0pfWZ1bmN0aW9uIHhsKGMsbSl7ZGUoIlRvIHVzZSBkbG9wZW4sIHlvdSBuZWVkIHRvIHVzZSBFbXNjcmlwdGVuJ3MgbGlua2luZyBzdXBwb3J0LCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Vtc2NyaXB0ZW4tY29yZS9lbXNjcmlwdGVuL3dpa2kvTGlua2luZyIpfWZ1bmN0aW9uIF9sKGMsbSl7ZGUoIlRvIHVzZSBkbG9wZW4sIHlvdSBuZWVkIHRvIHVzZSBFbXNjcmlwdGVuJ3MgbGlua2luZyBzdXBwb3J0LCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Vtc2NyaXB0ZW4tY29yZS9lbXNjcmlwdGVuL3dpa2kvTGlua2luZyIpfWZ1bmN0aW9uIHZsKCl7ZGUoIiIpfXZhciBHdDtHdD1mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX07dmFyIEVsPSEwO2Z1bmN0aW9uIFRsKGMpe3JldHVybiBXW3pvKCk+PjJdPWMsY31mdW5jdGlvbiB3bChjLG0pe3ZhciB5O2lmKGM9PT0wKXk9RGF0ZS5ub3coKTtlbHNlIGlmKChjPT09MXx8Yz09PTQpJiZFbCl5PUd0KCk7ZWxzZSByZXR1cm4gVGwoMjgpLC0xO3JldHVybiBXW20+PjJdPXkvMWUzfDAsV1ttKzQ+PjJdPXklMWUzKjFlMyoxZTN8MCwwfWZ1bmN0aW9uIEFsKCl7cmV0dXJuIDIxNDc0ODM2NDh9ZnVuY3Rpb24gSWwoYyxtLHkpe2xlLmNvcHlXaXRoaW4oYyxtLG0reSl9ZnVuY3Rpb24gU2woYyl7dHJ5e3JldHVybiB2Lmdyb3coYy1LZS5ieXRlTGVuZ3RoKzY1NTM1Pj4+MTYpLEJvKHYuYnVmZmVyKSwxfWNhdGNoe319ZnVuY3Rpb24gUmwoYyl7dmFyIG09bGUubGVuZ3RoO2M9Yz4+PjA7dmFyIHk9MjE0NzQ4MzY0ODtpZihjPnkpcmV0dXJuITE7Zm9yKHZhciBUPTE7VDw9NDtUKj0yKXt2YXIgRD1tKigxKy4yL1QpO0Q9TWF0aC5taW4oRCxjKzEwMDY2MzI5Nik7dmFyIE09TWF0aC5taW4oeSwkKE1hdGgubWF4KGMsRCksNjU1MzYpKSxBPVNsKE0pO2lmKEEpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gRmwoYyl7Zm9yKHZhciBtPUd0KCk7R3QoKS1tPGM7KTt9dmFyIEhyPXt9O2Z1bmN0aW9uIFBsKCl7cmV0dXJuIGF8fCIuL3RoaXMucHJvZ3JhbSJ9ZnVuY3Rpb24gWmUoKXtpZighWmUuc3RyaW5ncyl7dmFyIGM9KHR5cGVvZiBuYXZpZ2F0b3I9PSJvYmplY3QiJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdfHwiQyIpLnJlcGxhY2UoIi0iLCJfIikrIi5VVEYtOCIsbT17VVNFUjoid2ViX3VzZXIiLExPR05BTUU6IndlYl91c2VyIixQQVRIOiIvIixQV0Q6Ii8iLEhPTUU6Ii9ob21lL3dlYl91c2VyIixMQU5HOmMsXzpQbCgpfTtmb3IodmFyIHkgaW4gSHIpSHJbeV09PT12b2lkIDA/ZGVsZXRlIG1beV06bVt5XT1Iclt5XTt2YXIgVD1bXTtmb3IodmFyIHkgaW4gbSlULnB1c2goeSsiPSIrbVt5XSk7WmUuc3RyaW5ncz1UfXJldHVybiBaZS5zdHJpbmdzfXZhciAkdD17bWFwcGluZ3M6e30sYnVmZmVyczpbbnVsbCxbXSxbXV0scHJpbnRDaGFyOmZ1bmN0aW9uKGMsbSl7dmFyIHk9JHQuYnVmZmVyc1tjXTttPT09MHx8bT09PTEwPygoYz09PTE/YjpoKShHKHksMCkpLHkubGVuZ3RoPTApOnkucHVzaChtKX0sdmFyYXJnczp2b2lkIDAsZ2V0OmZ1bmN0aW9uKCl7JHQudmFyYXJncys9NDt2YXIgYz1XWyR0LnZhcmFyZ3MtND4+Ml07cmV0dXJuIGN9LGdldFN0cjpmdW5jdGlvbihjKXt2YXIgbT16KGMpO3JldHVybiBtfSxnZXQ2NDpmdW5jdGlvbihjLG0pe3JldHVybiBjfX07ZnVuY3Rpb24ga2woYyxtKXt2YXIgeT0wO3JldHVybiBaZSgpLmZvckVhY2goZnVuY3Rpb24oVCxEKXt2YXIgTT1tK3k7V1tjK0QqND4+Ml09TSxIKFQsTSkseSs9VC5sZW5ndGgrMX0pLDB9ZnVuY3Rpb24gRGwoYyxtKXt2YXIgeT1aZSgpO1dbYz4+Ml09eS5sZW5ndGg7dmFyIFQ9MDtyZXR1cm4geS5mb3JFYWNoKGZ1bmN0aW9uKEQpe1QrPUQubGVuZ3RoKzF9KSxXW20+PjJdPVQsMH1mdW5jdGlvbiBDbChjKXt6bChjKX1mdW5jdGlvbiBCbChjKXtyZXR1cm4gMH1mdW5jdGlvbiBNbChjLG0seSxULEQpe31mdW5jdGlvbiBPbChjLG0seSxUKXtmb3IodmFyIEQ9MCxNPTA7TTx5O00rKyl7Zm9yKHZhciBBPVdbbStNKjg+PjJdLFU9V1ttKyhNKjgrNCk+PjJdLEs9MDtLPFU7SysrKSR0LnByaW50Q2hhcihjLGxlW0ErS10pO0QrPVV9cmV0dXJuIFdbVD4+Ml09RCwwfWZ1bmN0aW9uIFVsKCl7aWYodHlwZW9mIGNyeXB0bz09Im9iamVjdCImJnR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzPT0iZnVuY3Rpb24iKXt2YXIgYz1uZXcgVWludDhBcnJheSgxKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhjKSxjWzBdfX1lbHNlIHJldHVybiBmdW5jdGlvbigpe2RlKCJyYW5kb21EZXZpY2UiKX19ZnVuY3Rpb24gV3QoYyxtKXtXdC5yYW5kb21EZXZpY2V8fChXdC5yYW5kb21EZXZpY2U9VWwoKSk7Zm9yKHZhciB5PTA7eTxtO3krKylUZVtjK3k+PjBdPVd0LnJhbmRvbURldmljZSgpO3JldHVybiAwfXZhciBObD17YTpibCxlOnhsLGQ6X2wsYjp2bCxuOndsLGg6QWwsbDpJbCxtOlJsLHA6RmwsZjprbCxnOkRsLGo6Q2wsaTpCbCxrOk1sLGM6T2wsbzpXdH07eWwoKSx0Ll9fX3dhc21fY2FsbF9jdG9ycz1mdW5jdGlvbigpe3JldHVybih0Ll9fX3dhc21fY2FsbF9jdG9ycz10LmFzbS5yKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE1vZGVsQnVmZmVyTWVtb3J5T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldE1vZGVsQnVmZmVyTWVtb3J5T2Zmc2V0PXQuYXNtLnMpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0SW5wdXRNZW1vcnlPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0SW5wdXRNZW1vcnlPZmZzZXQ9dC5hc20udCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRJbnB1dEhlaWdodD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRJbnB1dEhlaWdodD10LmFzbS51KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldElucHV0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0SW5wdXRXaWR0aD10LmFzbS52KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldElucHV0Q2hhbm5lbENvdW50PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldElucHV0Q2hhbm5lbENvdW50PXQuYXNtLncpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0T3V0cHV0TWVtb3J5T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldE91dHB1dE1lbW9yeU9mZnNldD10LmFzbS54KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE91dHB1dEhlaWdodD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRPdXRwdXRIZWlnaHQ9dC5hc20ueSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRPdXRwdXRXaWR0aD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRPdXRwdXRXaWR0aD10LmFzbS56KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE91dHB1dENoYW5uZWxDb3VudD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRPdXRwdXRDaGFubmVsQ291bnQ9dC5hc20uQSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9sb2FkTW9kZWw9ZnVuY3Rpb24oKXtyZXR1cm4odC5fbG9hZE1vZGVsPXQuYXNtLkIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fcnVuSW5mZXJlbmNlPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX3J1bkluZmVyZW5jZT10LmFzbS5DKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2lzR1BVRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybih0Ll9pc0dQVUVuYWJsZWQ9dC5hc20uRCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgem89dC5fX19lcnJub19sb2NhdGlvbj1mdW5jdGlvbigpe3JldHVybih6bz10Ll9fX2Vycm5vX2xvY2F0aW9uPXQuYXNtLkYpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVnQ7ZnVuY3Rpb24gTGwoYyl7dGhpcy5uYW1lPSJFeGl0U3RhdHVzIix0aGlzLm1lc3NhZ2U9IlByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoIitjKyIpIix0aGlzLnN0YXR1cz1jfUplPWZ1bmN0aW9uIGMoKXtWdHx8anIoKSxWdHx8KEplPWMpfTtmdW5jdGlvbiBqcihjKXtpZih3ZT4wfHwoYWwoKSx3ZT4wKSlyZXR1cm47ZnVuY3Rpb24gbSgpe1Z0fHwoVnQ9ITAsdC5jYWxsZWRSdW49ITAsIUYmJih1bCgpLG4odCksdC5vblJ1bnRpbWVJbml0aWFsaXplZCYmdC5vblJ1bnRpbWVJbml0aWFsaXplZCgpLGNsKCkpKX10LnNldFN0YXR1cz8odC5zZXRTdGF0dXMoIlJ1bm5pbmcuLi4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe3Quc2V0U3RhdHVzKCIiKX0sMSksbSgpfSwxKSk6bSgpfXQucnVuPWpyO2Z1bmN0aW9uIHpsKGMsbSl7R2woYyl9ZnVuY3Rpb24gR2woYyl7c2woKXx8KHQub25FeGl0JiZ0Lm9uRXhpdChjKSxGPSEwKSx1KGMsbmV3IExsKGMpKX1pZih0LnByZUluaXQpZm9yKHR5cGVvZiB0LnByZUluaXQ9PSJmdW5jdGlvbiImJih0LnByZUluaXQ9W3QucHJlSW5pdF0pO3QucHJlSW5pdC5sZW5ndGg+MDspdC5wcmVJbml0LnBvcCgpKCk7cmV0dXJuIGpyKCksZS5yZWFkeX19KCk7Y2xhc3MgaXN7Y29uc3RydWN0b3IoKXtsKHRoaXMsInNlbGVjdGVkVEZMaXRlIik7bCh0aGlzLCJpc1NJTURTdXBwb3J0ZWQiLCExKTtsKHRoaXMsImlzVGhyZWFkc1N1cHBvcnRlZCIsITEpO2wodGhpcywiaW5wdXRXaWR0aCIsMCk7bCh0aGlzLCJpbnB1dEhlaWdodCIsMCk7bCh0aGlzLCJpbnB1dENoYW5uZWxDb3VudCIsMCk7bCh0aGlzLCJpbnB1dE1lbW9yeU9mZnNldCIsMCk7bCh0aGlzLCJvdXRwdXRXaWR0aCIsMCk7bCh0aGlzLCJvdXRwdXRIZWlnaHQiLDApO2wodGhpcywib3V0cHV0Q2hhbm5lbENvdW50IiwwKTtsKHRoaXMsIm91dHB1dE1lbW9yeU9mZnNldCIsMCl9fWNvbnN0IHNzPSJodHRwczovL2Qzb3Bxam1xenhmMDU3LmNsb3VkZnJvbnQubmV0L3ZvbmFnZS10ZW5zb3JmbG93LXdhc20vdGZsaXRlLXNpbWQtd2FzbS8xLjEuMy8iLGFzPSJodHRwczovL2Qzb3Bxam1xenhmMDU3LmNsb3VkZnJvbnQubmV0L21sL3NlbGZpZV9zZWdtZW50YXRpb24vNC4wLjAvIjthc3luYyBmdW5jdGlvbiB1cyhyPXNzLGU9YXMpe2xldCB0PW5ldyBpczt2YXIgbj1uZXcgUHJvbWlzZShmdW5jdGlvbihvLGkpe2FzeW5jIGZ1bmN0aW9uIHMoKXtyZXR1cm4gb3Moe2xvY2F0ZUZpbGU6ZnVuY3Rpb24oZil7cmV0dXJuIHIrZn19KX1hc3luYyBmdW5jdGlvbiBhKHUpe3JldHVybiBuZXcgUHJvbWlzZShhc3luYyhmLGQpPT57Y29uc3QgcD11O2lmKHR5cGVvZiBwPiJ1IilyZXR1cm4gZCgiVEZMaXRlIGJhY2tlbmQgdW5hdmFpbGFibGU6IHdhc21TaW1kIik7Y29uc3QgZz0ic2VsZmllX3NlZ21lbnRhdGlvbl9sYW5kc2NhcGUiO2NvbnNvbGUubG9nKCJMb2FkaW5nIHRmbGl0ZSBtb2RlbDoiLGcpO2xldCBiPWUrYCR7Z30udGZsaXRlYDtjb25zb2xlLmxvZygiVEZMaXRlIG1vZGVsVXJsOiAiK2IpO3RyeXtjb25zdCB4PWF3YWl0KGF3YWl0IGZldGNoKGIpKS5hcnJheUJ1ZmZlcigpO2NvbnNvbGUubG9nKCJNb2RlbCBidWZmZXIgc2l6ZToiLHguYnl0ZUxlbmd0aCk7Y29uc3QgRT1wLl9nZXRNb2RlbEJ1ZmZlck1lbW9yeU9mZnNldCgpO2NvbnNvbGUubG9nKCJNb2RlbCBidWZmZXIgbWVtb3J5IG9mZnNldDoiLEUpLGNvbnNvbGUubG9nKCJMb2FkaW5nIG1vZGVsIGJ1ZmZlci4uLiIpLHAuSEVBUFU4LnNldChuZXcgVWludDhBcnJheSh4KSxFKTtjb25zdCB2PXAuX2xvYWRNb2RlbCh4LmJ5dGVMZW5ndGgpO2lmKGNvbnNvbGUubG9nKCJMb2FkIG1vZGVsIHJlc3VsdDoiLHYpLHYhPT0wKXtkKCJDYW5ub3QgbG9hZCBtb2RlbCIpO3JldHVybn10LmlucHV0V2lkdGg9cC5fZ2V0SW5wdXRXaWR0aCgpLHQuaW5wdXRIZWlnaHQ9cC5fZ2V0SW5wdXRIZWlnaHQoKSx0LmlucHV0Q2hhbm5lbENvdW50PXAuX2dldElucHV0Q2hhbm5lbENvdW50KCksdC5pbnB1dE1lbW9yeU9mZnNldD1wLl9nZXRJbnB1dE1lbW9yeU9mZnNldCgpLGNvbnNvbGUubG9nKCJJbnB1dCBtZW1vcnkgb2Zmc2V0OiIsdC5pbnB1dE1lbW9yeU9mZnNldCksY29uc29sZS5sb2coIklucHV0IGhlaWdodDoiLHQuaW5wdXRIZWlnaHQpLGNvbnNvbGUubG9nKCJJbnB1dCB3aWR0aDoiLHQuaW5wdXRXaWR0aCksY29uc29sZS5sb2coIklucHV0IGNoYW5uZWxzOiIsdC5pbnB1dENoYW5uZWxDb3VudCksdC5vdXRwdXRNZW1vcnlPZmZzZXQ9cC5fZ2V0T3V0cHV0TWVtb3J5T2Zmc2V0KCksdC5vdXRwdXRXaWR0aD1wLl9nZXRPdXRwdXRXaWR0aCgpLHQub3V0cHV0SGVpZ2h0PXAuX2dldE91dHB1dEhlaWdodCgpLHQub3V0cHV0Q2hhbm5lbENvdW50PXAuX2dldE91dHB1dENoYW5uZWxDb3VudCgpLGNvbnNvbGUubG9nKCJPdXRwdXQgbWVtb3J5IG9mZnNldDoiLHQub3V0cHV0TWVtb3J5T2Zmc2V0KSxjb25zb2xlLmxvZygiT3V0cHV0IGhlaWdodDoiLHQub3V0cHV0SGVpZ2h0KSxjb25zb2xlLmxvZygiT3V0cHV0IHdpZHRoOiIsdC5vdXRwdXRXaWR0aCksY29uc29sZS5sb2coIk91dHB1dCBjaGFubmVsczoiLHQub3V0cHV0Q2hhbm5lbENvdW50KSx0LnNlbGVjdGVkVEZMaXRlPXB9Y2F0Y2goaCl7ZChoKTtyZXR1cm59ZigpfSl9cygpLnRoZW4odT0+e2lmKHU9PT1udWxsKXRocm93IGNvbnNvbGUuZXJyb3IoImxvYWRURkxpdGUgbnVsbCIpLCJsb2FkVEZMaXRlIG51bGwiO2EodSkudGhlbihmPT57byh0KX0pLmNhdGNoKGY9Pntjb25zb2xlLmVycm9yKCJsb2FkVEZMaXRlTW9kZWwgZXJyb3IiKSxpKCJsb2FkVEZMaXRlTW9kZWwgZXJyb3IiKX0pfSkuY2F0Y2godT0+e2NvbnNvbGUuZXJyb3IoImxvYWRURkxpdGUgZXJyb3I6Iix1KSxpKCJsb2FkVEZMaXRlIGVycm9yOiIrdSl9KX0pO3JldHVybiBufWNsYXNzIGNze2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJjYW52YXMiLG5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSk7bCh0aGlzLCJjb250ZXh0Iix0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCIyZCIse3dpbGxSZWFkRnJlcXVlbnRseTohMH0pKTtsKHRoaXMsInBpeGVsQ291bnQiLDApO2wodGhpcywiaW5wdXRPZmZzZXQiLDApO2wodGhpcywib3V0cHV0T2Zmc2V0IiwwKTtsKHRoaXMsImluZm9zIik7bCh0aGlzLCJtYXNrIil9YXN5bmMgaW5pdChlLHQpe2F3YWl0IHRoaXMuaW5pdFdhc20oZSx0KSx0aGlzLmluZm9zJiYodGhpcy5jYW52YXMud2lkdGg9dGhpcy5pbmZvcy5pbnB1dFdpZHRoLHRoaXMuY2FudmFzLmhlaWdodD10aGlzLmluZm9zLmlucHV0SGVpZ2h0LHRoaXMucGl4ZWxDb3VudD10aGlzLmluZm9zLmlucHV0V2lkdGgqdGhpcy5pbmZvcy5pbnB1dEhlaWdodCx0aGlzLm1hc2s9bmV3IEltYWdlRGF0YSh0aGlzLmluZm9zLmlucHV0V2lkdGgsdGhpcy5pbmZvcy5pbnB1dEhlaWdodCksdGhpcy5pbnB1dE9mZnNldD10aGlzLmluZm9zLmlucHV0TWVtb3J5T2Zmc2V0LzQsdGhpcy5vdXRwdXRPZmZzZXQ9dGhpcy5pbmZvcy5vdXRwdXRNZW1vcnlPZmZzZXQvNCl9YXN5bmMgaW5pdFdhc20oZSx0KXt0aGlzLmluZm9zPWF3YWl0IHVzKGUsdCl9Z2V0T3V0cHV0RGltZW5zaW9ucygpe3ZhciBlLHQsbixvO3JldHVybnt3aWR0aDoodD0oZT10aGlzLmluZm9zKT09bnVsbD92b2lkIDA6ZS5vdXRwdXRXaWR0aCkhPW51bGw/dDowLGhlaWdodDoobz0obj10aGlzLmluZm9zKT09bnVsbD92b2lkIDA6bi5vdXRwdXRIZWlnaHQpIT1udWxsP286MH19YXN5bmMgcHJvY2VzcyhlKXtpZighdGhpcy5tYXNrfHwhdGhpcy5pbmZvcylyZXR1cm47Y29uc3QgdD10aGlzLmluZm9zLmlucHV0V2lkdGgsbj10aGlzLmluZm9zLmlucHV0SGVpZ2h0O3RoaXMuY29udGV4dC5kcmF3SW1hZ2UoZSwwLDAsZS53aWR0aCxlLmhlaWdodCwwLDAsdCxuKTtjb25zdCBvPXRoaXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwwLHQsbiksaT10aGlzLmluZm9zLnNlbGVjdGVkVEZMaXRlLkhFQVBGMzI7Zm9yKGxldCBzPTA7czx0aGlzLnBpeGVsQ291bnQ7cysrKXtjb25zdCBhPXRoaXMuaW5wdXRPZmZzZXQrcyozO2lbYV09by5kYXRhW3MqNF0vMjU1LGlbYSsxXT1vLmRhdGFbcyo0KzFdLzI1NSxpW2ErMl09by5kYXRhW3MqNCsyXS8yNTV9dGhpcy5pbmZvcy5zZWxlY3RlZFRGTGl0ZS5fcnVuSW5mZXJlbmNlKCk7Zm9yKGxldCBzPTA7czx0aGlzLnBpeGVsQ291bnQ7cysrKXtjb25zdCBhPXRoaXMuaW5mb3Muc2VsZWN0ZWRURkxpdGUuSEVBUEYzMlt0aGlzLm91dHB1dE9mZnNldCtzXTt0aGlzLm1hc2suZGF0YVtzKjRdPXRoaXMubWFzay5kYXRhW3MqNCszXT0yNTUqYX1yZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAodGhpcy5tYXNrKX1pc0dwdVN1cHBvcnRlZCgpe3ZhciBlLHQsbjtyZXR1cm4obj0odD0oZT10aGlzLmluZm9zKT09bnVsbD92b2lkIDA6ZS5zZWxlY3RlZFRGTGl0ZSk9PW51bGw/dm9pZCAwOnQuX2lzR1BVRW5hYmxlZCgpKSE9bnVsbD9uOiExfX1mdW5jdGlvbiBmcygpe3JldHVybiBuZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCkuZ2V0Q29udGV4dCgid2ViZ2wyIix7ZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDohMH0pP3tzdXBwb3J0ZWQ6ITB9OntzdXBwb3J0ZWQ6ITEsbWVzc2FnZToiWW91ciBoYXJkd2FyZSBkb2VzIG5vdCBwZXJmb3JtIGdvb2QgZW5vdWdoIHRvIHJ1biB0aGUgbGlicmFyeSBlZmZpY2llbnRseSJ9fWNsYXNzIG9ye2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJjYW52YXMiKTtsKHRoaXMsImNvbnRleHQiKTtjb25zdCBlPW5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSx0PWUuZ2V0Q29udGV4dCgiMmQiKTtpZighdCl0aHJvdyJGYWlsIHRvIHJldHJpZXZlIHdlYmdsMiBjb250ZXh0Ijt0aGlzLmNhbnZhcz1lLHRoaXMuY29udGV4dD10fXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe31lbmFibGVQb3N0UHJvY2Vzc2luZygpe31kaXNhYmxlUG9zdFByb2Nlc3NpbmcoKXt9YXN5bmMgcHJvZmlsZVdlYmdsKGUpe3JldHVybltdfWFzeW5jIHJlbmRlcihlLHQpe3JldHVybiB0aGlzLmNhbnZhc31yZXNpemVDYW52YXMoZSl7Y29uc3R7d2lkdGg6dCxoZWlnaHQ6bn09ZTt0aGlzLmNhbnZhcy53aWR0aD10LHRoaXMuY2FudmFzLmhlaWdodD1ufXJlbmRlclNpbGhvdWV0dGUoZSx0LG49Im5vbmUiKXtjb25zdHt3aWR0aDpvLGhlaWdodDppfT1lO3RoaXMuY29udGV4dC5zYXZlKCksdGhpcy5jb250ZXh0LmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0LDAsMCxvLGkpLHRoaXMuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1pbiIsdGhpcy5jb250ZXh0LmZpbHRlcj1uLHRoaXMuY29udGV4dC5kcmF3SW1hZ2UoZSwwLDAsbyxpLDAsMCx0aGlzLmNhbnZhcy53aWR0aCx0aGlzLmNhbnZhcy5oZWlnaHQpLHRoaXMuY29udGV4dC5yZXN0b3JlKCl9fWNsYXNzIGxzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnJhZGl1cz1lfWFzeW5jIHJlbmRlcihlLHQpe3JldHVybiBzdXBlci5yZXNpemVDYW52YXMoZSksdGhpcy5yZW5kZXJTaWxob3VldHRlKGUsdCksdGhpcy5jb250ZXh0LnNhdmUoKSx0aGlzLmNvbnRleHQuZmlsdGVyPWBibHVyKCR7dGhpcy5yYWRpdXN9cHgpYCx0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdmVyIix0aGlzLmNvbnRleHQuZHJhd0ltYWdlKGUsMCwwLGUud2lkdGgsZS5oZWlnaHQpLHRoaXMuY29udGV4dC5yZXN0b3JlKCksc3VwZXIucmVuZGVyKGUsdCl9fWNsYXNzIGRzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnJhZGl1cz1lfWFzeW5jIHJlbmRlcihlLHQpe3JldHVybiBzdXBlci5yZXNpemVDYW52YXMoZSksdGhpcy5yZW5kZXJTaWxob3VldHRlKGUsdCxgYmx1cigke3RoaXMucmFkaXVzfXB4KWApLHRoaXMuY29udGV4dC5zYXZlKCksdGhpcy5jb250ZXh0LmZpbHRlcj0ibm9uZSIsdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0iZGVzdGluYXRpb24tb3ZlciIsdGhpcy5jb250ZXh0LmRyYXdJbWFnZShlLDAsMCxlLndpZHRoLGUuaGVpZ2h0KSx0aGlzLmNvbnRleHQucmVzdG9yZSgpLHN1cGVyLnJlbmRlcihlLHQpfX1jbGFzcyBocyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKTtsKHRoaXMsImJhY2tncm91bmRJbWFnZSIpfXNldEJhY2tncm91bmRJbWFnZSh0KXt0aGlzLmJhY2tncm91bmRJbWFnZT10fWFzeW5jIHJlbmRlcih0LG4pe3JldHVybiBzdXBlci5yZXNpemVDYW52YXModCksdGhpcy5yZW5kZXJTaWxob3VldHRlKHQsbiksdGhpcy5iYWNrZ3JvdW5kSW1hZ2UmJih0aGlzLmNvbnRleHQuc2F2ZSgpLHRoaXMuY29udGV4dC5maWx0ZXI9Im5vbmUiLHRoaXMuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW92ZXIiLHRoaXMuY29udGV4dC5kcmF3SW1hZ2UodGhpcy5iYWNrZ3JvdW5kSW1hZ2UsMCwwLHRoaXMuYmFja2dyb3VuZEltYWdlLndpZHRoLHRoaXMuYmFja2dyb3VuZEltYWdlLmhlaWdodCwwLDAsdC53aWR0aCx0LmhlaWdodCksdGhpcy5jb250ZXh0LnJlc3RvcmUoKSksc3VwZXIucmVuZGVyKHQsbil9fS8qIEBsaWNlbnNlIHR3Z2wuanMgNS41LjEgQ29weXJpZ2h0IChjKSAyMDE1LCBHcmVnZyBUYXZhcmVzIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCkF2YWlsYWJsZSB2aWEgdGhlIE1JVCBsaWNlbnNlLgpzZWU6IGh0dHA6Ly9naXRodWIuY29tL2dyZWdnbWFuL3R3Z2wuanMgZm9yIGRldGFpbHMgKi9jb25zdCBpcj01MTIwLFdlPTUxMjEsc3I9NTEyMixhcj01MTIzLHVyPTUxMjQsY3I9NTEyNSxmcj01MTI2LG1zPTMyODE5LHBzPTMyODIwLGdzPTMzNjM1LHlzPTUxMzEsYnM9MzM2NDAseHM9MzU4OTksX3M9MzU5MDIsdnM9MzYyNjksRXM9MzQwNDIsZG49e307e2NvbnN0IHI9ZG47cltpcl09SW50OEFycmF5LHJbV2VdPVVpbnQ4QXJyYXkscltzcl09SW50MTZBcnJheSxyW2FyXT1VaW50MTZBcnJheSxyW3VyXT1JbnQzMkFycmF5LHJbY3JdPVVpbnQzMkFycmF5LHJbZnJdPUZsb2F0MzJBcnJheSxyW21zXT1VaW50MTZBcnJheSxyW3BzXT1VaW50MTZBcnJheSxyW2dzXT1VaW50MTZBcnJheSxyW3lzXT1VaW50MTZBcnJheSxyW2JzXT1VaW50MzJBcnJheSxyW3hzXT1VaW50MzJBcnJheSxyW19zXT1VaW50MzJBcnJheSxyW3ZzXT1VaW50MzJBcnJheSxyW0VzXT1VaW50MzJBcnJheX1mdW5jdGlvbiBscihyKXtpZihyIGluc3RhbmNlb2YgSW50OEFycmF5KXJldHVybiBpcjtpZihyIGluc3RhbmNlb2YgVWludDhBcnJheXx8ciBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KXJldHVybiBXZTtpZihyIGluc3RhbmNlb2YgSW50MTZBcnJheSlyZXR1cm4gc3I7aWYociBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KXJldHVybiBhcjtpZihyIGluc3RhbmNlb2YgSW50MzJBcnJheSlyZXR1cm4gdXI7aWYociBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KXJldHVybiBjcjtpZihyIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KXJldHVybiBmcjt0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIHR5cGVkIGFycmF5IHR5cGUiKX1mdW5jdGlvbiBobihyKXtpZihyPT09SW50OEFycmF5KXJldHVybiBpcjtpZihyPT09VWludDhBcnJheXx8cj09PVVpbnQ4Q2xhbXBlZEFycmF5KXJldHVybiBXZTtpZihyPT09SW50MTZBcnJheSlyZXR1cm4gc3I7aWYocj09PVVpbnQxNkFycmF5KXJldHVybiBhcjtpZihyPT09SW50MzJBcnJheSlyZXR1cm4gdXI7aWYocj09PVVpbnQzMkFycmF5KXJldHVybiBjcjtpZihyPT09RmxvYXQzMkFycmF5KXJldHVybiBmcjt0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIHR5cGVkIGFycmF5IHR5cGUiKX1mdW5jdGlvbiBtbihyKXtjb25zdCBlPWRuW3JdO2lmKCFlKXRocm93IG5ldyBFcnJvcigidW5rbm93biBnbCB0eXBlIik7cmV0dXJuIGV9Y29uc3QgYnQ9dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1Ij9mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5idWZmZXImJihlLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxlLmJ1ZmZlciBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyKX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuYnVmZmVyJiZlLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfTtmdW5jdGlvbiBwbiguLi5yKXtjb25zb2xlLmVycm9yKC4uLnIpfWNvbnN0IGduPW5ldyBNYXA7ZnVuY3Rpb24geHQocixlKXtpZighcnx8dHlwZW9mIHIhPSJvYmplY3QiKXJldHVybiExO2xldCB0PWduLmdldChlKTt0fHwodD1uZXcgV2Vha01hcCxnbi5zZXQoZSx0KSk7bGV0IG49dC5nZXQocik7aWYobj09PXZvaWQgMCl7Y29uc3Qgbz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocik7bj1vLnN1YnN0cmluZyg4LG8ubGVuZ3RoLTEpPT09ZSx0LnNldChyLG4pfXJldHVybiBufWZ1bmN0aW9uIFRzKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTEJ1ZmZlcjwidSImJnh0KGUsIldlYkdMQnVmZmVyIil9ZnVuY3Rpb24gd3MocixlKXtyZXR1cm4gdHlwZW9mIFdlYkdMUmVuZGVyYnVmZmVyPCJ1IiYmeHQoZSwiV2ViR0xSZW5kZXJidWZmZXIiKX1mdW5jdGlvbiBkcihyLGUpe3JldHVybiB0eXBlb2YgV2ViR0xUZXh0dXJlPCJ1IiYmeHQoZSwiV2ViR0xUZXh0dXJlIil9ZnVuY3Rpb24gQXMocixlKXtyZXR1cm4gdHlwZW9mIFdlYkdMU2FtcGxlcjwidSImJnh0KGUsIldlYkdMU2FtcGxlciIpfWNvbnN0IHluPTM1MDQ0LHllPTM0OTYyLElzPTM0OTYzLFNzPTM0NjYwLFJzPTUxMjAsRnM9NTEyMSxQcz01MTIyLGtzPTUxMjMsRHM9NTEyNCxDcz01MTI1LGJuPTUxMjYseG49e2F0dHJpYlByZWZpeDoiIn07ZnVuY3Rpb24gQnMocixlLHQsbixvKXtyLmJpbmRCdWZmZXIoZSx0KSxyLmJ1ZmZlckRhdGEoZSxuLG98fHluKX1mdW5jdGlvbiBfbihyLGUsdCxuKXtpZihUcyhyLGUpKXJldHVybiBlO3Q9dHx8eWU7Y29uc3Qgbz1yLmNyZWF0ZUJ1ZmZlcigpO3JldHVybiBCcyhyLHQsbyxlLG4pLG99ZnVuY3Rpb24gdm4ocil7cmV0dXJuIHI9PT0iaW5kaWNlcyJ9ZnVuY3Rpb24gTXMocil7cmV0dXJuIHI9PT1JbnQ4QXJyYXl8fHI9PT1VaW50OEFycmF5fWZ1bmN0aW9uIE9zKHIpe3JldHVybiByLmxlbmd0aD9yOnIuZGF0YX1jb25zdCBVcz0vY29vcmR8dGV4dHVyZS9pLE5zPS9jb2xvcnxjb2xvdXIvaTtmdW5jdGlvbiBMcyhyLGUpe2xldCB0O2lmKFVzLnRlc3Qocik/dD0yOk5zLnRlc3Qocik/dD00OnQ9MyxlJXQ+MCl0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgZ3Vlc3MgbnVtQ29tcG9uZW50cyBmb3IgYXR0cmlidXRlICcke3J9Jy4gVHJpZWQgJHt0fSBidXQgJHtlfSB2YWx1ZXMgaXMgbm90IGV2ZW5seSBkaXZpc2libGUgYnkgJHt0fS4gWW91IHNob3VsZCBzcGVjaWZ5IGl0LmApO3JldHVybiB0fWZ1bmN0aW9uIHpzKHIsZSx0KXtyZXR1cm4gci5udW1Db21wb25lbnRzfHxyLnNpemV8fExzKGUsdHx8T3MocikubGVuZ3RoKX1mdW5jdGlvbiBFbihyLGUpe2lmKGJ0KHIpKXJldHVybiByO2lmKGJ0KHIuZGF0YSkpcmV0dXJuIHIuZGF0YTtBcnJheS5pc0FycmF5KHIpJiYocj17ZGF0YTpyfSk7bGV0IHQ9ci50eXBlP2hyKHIudHlwZSk6dm9pZCAwO3JldHVybiB0fHwodm4oZSk/dD1VaW50MTZBcnJheTp0PUZsb2F0MzJBcnJheSksbmV3IHQoci5kYXRhKX1mdW5jdGlvbiBHcyhyKXtyZXR1cm4gdHlwZW9mIHI9PSJudW1iZXIiP3I6cj9obihyKTpibn1mdW5jdGlvbiBocihyKXtyZXR1cm4gdHlwZW9mIHI9PSJudW1iZXIiP21uKHIpOnJ8fEZsb2F0MzJBcnJheX1mdW5jdGlvbiAkcyhyLGUpe3JldHVybntidWZmZXI6ZS5idWZmZXIsbnVtVmFsdWVzOjIqMyo0LHR5cGU6R3MoZS50eXBlKSxhcnJheVR5cGU6aHIoZS50eXBlKX19ZnVuY3Rpb24gV3MocixlKXtjb25zdCB0PWUuZGF0YXx8ZSxuPWhyKGUudHlwZSksbz10Km4uQllURVNfUEVSX0VMRU1FTlQsaT1yLmNyZWF0ZUJ1ZmZlcigpO3JldHVybiByLmJpbmRCdWZmZXIoeWUsaSksci5idWZmZXJEYXRhKHllLG8sZS5kcmF3VHlwZXx8eW4pLHtidWZmZXI6aSxudW1WYWx1ZXM6dCx0eXBlOmhuKG4pLGFycmF5VHlwZTpufX1mdW5jdGlvbiBWcyhyLGUsdCl7Y29uc3Qgbj1FbihlLHQpO3JldHVybnthcnJheVR5cGU6bi5jb25zdHJ1Y3RvcixidWZmZXI6X24ocixuLHZvaWQgMCxlLmRyYXdUeXBlKSx0eXBlOmxyKG4pLG51bVZhbHVlczowfX1mdW5jdGlvbiBIcyhyLGUpe2NvbnN0IHQ9e307cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24obil7aWYoIXZuKG4pKXtjb25zdCBvPWVbbl0saT1vLmF0dHJpYnx8by5uYW1lfHxvLmF0dHJpYk5hbWV8fHhuLmF0dHJpYlByZWZpeCtuO2lmKG8udmFsdWUpe2lmKCFBcnJheS5pc0FycmF5KG8udmFsdWUpJiYhYnQoby52YWx1ZSkpdGhyb3cgbmV3IEVycm9yKCJhcnJheS52YWx1ZSBpcyBub3QgYXJyYXkgb3IgdHlwZWRhcnJheSIpO3RbaV09e3ZhbHVlOm8udmFsdWV9fWVsc2V7bGV0IHM7by5idWZmZXImJm8uYnVmZmVyIGluc3RhbmNlb2YgV2ViR0xCdWZmZXI/cz0kczp0eXBlb2Ygbz09Im51bWJlciJ8fHR5cGVvZiBvLmRhdGE9PSJudW1iZXIiP3M9V3M6cz1Wcztjb25zdHtidWZmZXI6YSx0eXBlOnUsbnVtVmFsdWVzOmYsYXJyYXlUeXBlOmR9PXMocixvLG4pLHA9by5ub3JtYWxpemUhPT12b2lkIDA/by5ub3JtYWxpemU6TXMoZCksZz16cyhvLG4sZik7dFtpXT17YnVmZmVyOmEsbnVtQ29tcG9uZW50czpnLHR5cGU6dSxub3JtYWxpemU6cCxzdHJpZGU6by5zdHJpZGV8fDAsb2Zmc2V0Om8ub2Zmc2V0fHwwLGRpdmlzb3I6by5kaXZpc29yPT09dm9pZCAwP3ZvaWQgMDpvLmRpdmlzb3IsZHJhd1R5cGU6by5kcmF3VHlwZX19fX0pLHIuYmluZEJ1ZmZlcih5ZSxudWxsKSx0fWZ1bmN0aW9uIGpzKHIsZSl7cmV0dXJuIGU9PT1Sc3x8ZT09PUZzPzE6ZT09PVBzfHxlPT09a3M/MjplPT09RHN8fGU9PT1Dc3x8ZT09PWJuPzQ6MH1jb25zdCBtcj1bInBvc2l0aW9uIiwicG9zaXRpb25zIiwiYV9wb3NpdGlvbiJdO2Z1bmN0aW9uIFlzKHIsZSl7bGV0IHQsbjtmb3Iobj0wO248bXIubGVuZ3RoJiYodD1tcltuXSwhKHQgaW4gZXx8KHQ9eG4uYXR0cmliUHJlZml4K3QsdCBpbiBlKSkpOysrbik7bj09PW1yLmxlbmd0aCYmKHQ9T2JqZWN0LmtleXMoZSlbMF0pO2NvbnN0IG89ZVt0XTtpZighby5idWZmZXIpcmV0dXJuIDE7ci5iaW5kQnVmZmVyKHllLG8uYnVmZmVyKTtjb25zdCBpPXIuZ2V0QnVmZmVyUGFyYW1ldGVyKHllLFNzKTtyLmJpbmRCdWZmZXIoeWUsbnVsbCk7Y29uc3Qgcz1qcyhyLG8udHlwZSksYT1pL3MsdT1vLm51bUNvbXBvbmVudHN8fG8uc2l6ZSxmPWEvdTtpZihmJTEhPT0wKXRocm93IG5ldyBFcnJvcihgbnVtQ29tcG9uZW50cyAke3V9IG5vdCBjb3JyZWN0IGZvciBsZW5ndGggJHtsZW5ndGh9YCk7cmV0dXJuIGZ9ZnVuY3Rpb24gWHMocixlLHQpe2NvbnN0IG49SHMocixlKSxvPU9iamVjdC5hc3NpZ24oe30sdHx8e30pO28uYXR0cmlicz1PYmplY3QuYXNzaWduKHt9LHQ/dC5hdHRyaWJzOnt9LG4pO2NvbnN0IGk9ZS5pbmRpY2VzO2lmKGkpe2NvbnN0IHM9RW4oaSwiaW5kaWNlcyIpO28uaW5kaWNlcz1fbihyLHMsSXMpLG8ubnVtRWxlbWVudHM9cy5sZW5ndGgsby5lbGVtZW50VHlwZT1scihzKX1lbHNlIG8ubnVtRWxlbWVudHN8fChvLm51bUVsZW1lbnRzPVlzKHIsby5hdHRyaWJzKSk7cmV0dXJuIG99ZnVuY3Rpb24gVmUocil7cmV0dXJuISFyLnRleFN0b3JhZ2UyRH1jb25zdCBUbj1mdW5jdGlvbigpe2NvbnN0IHI9e30sZT17fTtmdW5jdGlvbiB0KG4pe2NvbnN0IG89bi5jb25zdHJ1Y3Rvci5uYW1lO2lmKCFyW29dKXtmb3IoY29uc3QgaSBpbiBuKWlmKHR5cGVvZiBuW2ldPT0ibnVtYmVyIil7Y29uc3Qgcz1lW25baV1dO2VbbltpXV09cz9gJHtzfSB8ICR7aX1gOml9cltvXT0hMH19cmV0dXJuIGZ1bmN0aW9uKG8saSl7cmV0dXJuIHQobyksZVtpXXx8KHR5cGVvZiBpPT0ibnVtYmVyIj9gMHgke2kudG9TdHJpbmcoMTYpfWA6aSl9fSgpLGllPXt0ZXh0dXJlQ29sb3I6bmV3IFVpbnQ4QXJyYXkoWzEyOCwxOTIsMjU1LDI1NV0pLHRleHR1cmVPcHRpb25zOnt9LGNyb3NzT3JpZ2luOnZvaWQgMH0sSGU9YnQsd249ZnVuY3Rpb24oKXtsZXQgcjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcj1yfHwodHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3JlYXRlRWxlbWVudD9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpOm51bGwpLHJ9fSgpLEFuPTY0MDYscT02NDA3LFI9NjQwOCxJbj02NDA5LFNuPTY0MTAsamU9NjQwMixSbj0zNDA0MSxfdD0zMzA3MSxRcz05NzI4LHFzPTk3Mjksc2U9MzU1MyxhZT0zNDA2NyxiZT0zMjg3OSx4ZT0zNTg2Nixwcj0zNDA2OSxLcz0zNDA3MCxKcz0zNDA3MSxacz0zNDA3MixlYT0zNDA3Myx0YT0zNDA3NCxncj0xMDI0MSx5cj0xMDI0MCx2dD0xMDI0MixFdD0xMDI0MyxGbj0zMjg4MixyYT0zMzA4MixuYT0zMzA4MyxvYT0zMzA4NCxpYT0zMzA4NSxzYT0zNDg5MixhYT0zNDg5Myxicj0zMzE3LFBuPTMzMTQsa249MzI4NzgsRG49MzMxNixDbj0zMzE1LEJuPTMyODc3LHVhPTM3NDQzLGNhPTM3NDQxLGZhPTM3NDQwLGxhPTMzMzIxLGRhPTM2NzU2LGhhPTMzMzI1LG1hPTMzMzI2LHBhPTMzMzMwLGdhPTMzMzI5LHlhPTMzMzM4LGJhPTMzMzM3LHhhPTMzMzQwLF9hPTMzMzM5LHZhPTMzMzIzLEVhPTM2NzU3LFRhPTMzMzI3LHdhPTMzMzI4LEFhPTMzMzM2LElhPTMzMzM1LFNhPTMzMzMyLFJhPTMzMzMxLEZhPTMzMzM0LFBhPTMzMzMzLGthPTMyODQ5LERhPTM1OTA1LENhPTM2MTk0LEJhPTM2NzU4LE1hPTM1ODk4LE9hPTM1OTAxLFVhPTM0ODQzLE5hPTM0ODM3LExhPTM2MjIxLHphPTM2MjM5LEdhPTM2MjE1LCRhPTM2MjMzLFdhPTM2MjA5LFZhPTM2MjI3LEhhPTMyODU2LGphPTM1OTA3LFlhPTM2NzU5LFhhPTMyODU1LFFhPTMyODU0LHFhPTMyODU3LEthPTM0ODQyLEphPTM0ODM2LFphPTM2MjIwLGV1PTM2MjM4LHR1PTM2OTc1LHJ1PTM2MjE0LG51PTM2MjMyLG91PTM2MjI2LGl1PTM2MjA4LHN1PTMzMTg5LGF1PTMzMTkwLHV1PTM2MDEyLGN1PTM2MDEzLGZ1PTM1MDU2LHVlPTUxMjAsUz01MTIxLFR0PTUxMjIsa2U9NTEyMyx3dD01MTI0LF9lPTUxMjUsTz01MTI2LE1uPTMyODE5LE9uPTMyODIwLFVuPTMzNjM1LGo9NTEzMSxZZT0zNjE5Myx4cj0zMzY0MCxsdT0zNTg5OSxkdT0zNTkwMixodT0zNjI2OSxtdT0zNDA0MixBdD0zMzMxOSxEZT0zMzMyMCxJdD02NDAzLENlPTM2MjQ0LEJlPTM2MjQ4LHZlPTM2MjQ5O2xldCBfcjtmdW5jdGlvbiBTdChyKXtpZighX3Ipe2NvbnN0IGU9e307ZVtBbl09e3RleHR1cmVGb3JtYXQ6QW4sY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMSwyLDIsNF0sdHlwZTpbUyxqLFllLE9dfSxlW0luXT17dGV4dHVyZUZvcm1hdDpJbixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxLDIsMiw0XSx0eXBlOltTLGosWWUsT119LGVbU25dPXt0ZXh0dXJlRm9ybWF0OlNuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzIsNCw0LDhdLHR5cGU6W1MsaixZZSxPXX0sZVtxXT17dGV4dHVyZUZvcm1hdDpxLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzMsNiw2LDEyLDJdLHR5cGU6W1MsaixZZSxPLFVuXX0sZVtSXT17dGV4dHVyZUZvcm1hdDpSLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsOCw4LDE2LDIsMl0sdHlwZTpbUyxqLFllLE8sTW4sT25dfSxlW2plXT17dGV4dHVyZUZvcm1hdDpqZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyLDRdLHR5cGU6W19lLGtlXX0sZVtsYV09e3RleHR1cmVGb3JtYXQ6SXQsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMV0sdHlwZTpbU119LGVbZGFdPXt0ZXh0dXJlRm9ybWF0Okl0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W3VlXX0sZVtoYV09e3RleHR1cmVGb3JtYXQ6SXQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNCwyXSx0eXBlOltPLGpdfSxlW21hXT17dGV4dHVyZUZvcm1hdDpJdCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltPXX0sZVtwYV09e3RleHR1cmVGb3JtYXQ6Q2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMV0sdHlwZTpbU119LGVbZ2FdPXt0ZXh0dXJlRm9ybWF0OkNlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W3VlXX0sZVtTYV09e3RleHR1cmVGb3JtYXQ6Q2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpba2VdfSxlW1JhXT17dGV4dHVyZUZvcm1hdDpDZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltUdF19LGVbRmFdPXt0ZXh0dXJlRm9ybWF0OkNlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W19lXX0sZVtQYV09e3RleHR1cmVGb3JtYXQ6Q2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbd3RdfSxlW3ZhXT17dGV4dHVyZUZvcm1hdDpBdCxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltTXX0sZVtFYV09e3RleHR1cmVGb3JtYXQ6QXQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbdWVdfSxlW1RhXT17dGV4dHVyZUZvcm1hdDpBdCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols4LDRdLHR5cGU6W08sal19LGVbd2FdPXt0ZXh0dXJlRm9ybWF0OkF0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W09dfSxlW0FhXT17dGV4dHVyZUZvcm1hdDpEZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltTXX0sZVtJYV09e3RleHR1cmVGb3JtYXQ6RGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbdWVdfSxlW3lhXT17dGV4dHVyZUZvcm1hdDpEZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltrZV19LGVbYmFdPXt0ZXh0dXJlRm9ybWF0OkRlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W1R0XX0sZVt4YV09e3RleHR1cmVGb3JtYXQ6RGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbX2VdfSxlW19hXT17dGV4dHVyZUZvcm1hdDpEZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOlt3dF19LGVba2FdPXt0ZXh0dXJlRm9ybWF0OnEsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbU119LGVbRGFdPXt0ZXh0dXJlRm9ybWF0OnEsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbU119LGVbQ2FdPXt0ZXh0dXJlRm9ybWF0OnEsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMywyXSx0eXBlOltTLFVuXX0sZVtCYV09e3RleHR1cmVGb3JtYXQ6cSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlszXSx0eXBlOlt1ZV19LGVbTWFdPXt0ZXh0dXJlRm9ybWF0OnEsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTIsNiw0XSx0eXBlOltPLGosbHVdfSxlW09hXT17dGV4dHVyZUZvcm1hdDpxLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEyLDYsNF0sdHlwZTpbTyxqLGR1XX0sZVtVYV09e3RleHR1cmVGb3JtYXQ6cSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxMiw2XSx0eXBlOltPLGpdfSxlW05hXT17dGV4dHVyZUZvcm1hdDpxLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOltPXX0sZVtMYV09e3RleHR1cmVGb3JtYXQ6QmUsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbU119LGVbemFdPXt0ZXh0dXJlRm9ybWF0OkJlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W3VlXX0sZVtHYV09e3RleHR1cmVGb3JtYXQ6QmUsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNl0sdHlwZTpba2VdfSxlWyRhXT17dGV4dHVyZUZvcm1hdDpCZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols2XSx0eXBlOltUdF19LGVbV2FdPXt0ZXh0dXJlRm9ybWF0OkJlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOltfZV19LGVbVmFdPXt0ZXh0dXJlRm9ybWF0OkJlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOlt3dF19LGVbSGFdPXt0ZXh0dXJlRm9ybWF0OlIsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbU119LGVbamFdPXt0ZXh0dXJlRm9ybWF0OlIsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbU119LGVbWWFdPXt0ZXh0dXJlRm9ybWF0OlIsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbdWVdfSxlW1hhXT17dGV4dHVyZUZvcm1hdDpSLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsMiw0XSx0eXBlOltTLE9uLHhyXX0sZVtRYV09e3RleHR1cmVGb3JtYXQ6Uixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDJdLHR5cGU6W1MsTW5dfSxlW3FhXT17dGV4dHVyZUZvcm1hdDpSLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W3hyXX0sZVtLYV09e3RleHR1cmVGb3JtYXQ6Uixjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxNiw4XSx0eXBlOltPLGpdfSxlW0phXT17dGV4dHVyZUZvcm1hdDpSLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOltPXX0sZVtaYV09e3RleHR1cmVGb3JtYXQ6dmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbU119LGVbZXVdPXt0ZXh0dXJlRm9ybWF0OnZlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W3VlXX0sZVt0dV09e3RleHR1cmVGb3JtYXQ6dmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbeHJdfSxlW3J1XT17dGV4dHVyZUZvcm1hdDp2ZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltrZV19LGVbbnVdPXt0ZXh0dXJlRm9ybWF0OnZlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W1R0XX0sZVtvdV09e3RleHR1cmVGb3JtYXQ6dmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMTZdLHR5cGU6W3d0XX0sZVtpdV09e3RleHR1cmVGb3JtYXQ6dmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMTZdLHR5cGU6W19lXX0sZVtzdV09e3RleHR1cmVGb3JtYXQ6amUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMiw0XSx0eXBlOltrZSxfZV19LGVbYXVdPXt0ZXh0dXJlRm9ybWF0OmplLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W19lXX0sZVt1dV09e3RleHR1cmVGb3JtYXQ6amUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbT119LGVbZnVdPXt0ZXh0dXJlRm9ybWF0OlJuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W211XX0sZVtjdV09e3RleHR1cmVGb3JtYXQ6Um4sY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbaHVdfSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2NvbnN0IG49ZVt0XTtuLmJ5dGVzUGVyRWxlbWVudE1hcD17fSxuLmJ5dGVzUGVyRWxlbWVudC5mb3JFYWNoKGZ1bmN0aW9uKG8saSl7Y29uc3Qgcz1uLnR5cGVbaV07bi5ieXRlc1BlckVsZW1lbnRNYXBbc109b30pfSksX3I9ZX1yZXR1cm4gX3Jbcl19ZnVuY3Rpb24gcHUocixlKXtjb25zdCB0PVN0KHIpO2lmKCF0KXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0Ijtjb25zdCBuPXQuYnl0ZXNQZXJFbGVtZW50TWFwW2VdO2lmKG49PT12b2lkIDApdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybiBufWZ1bmN0aW9uIFhlKHIpe2NvbnN0IGU9U3Qocik7aWYoIWUpdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybntmb3JtYXQ6ZS50ZXh0dXJlRm9ybWF0LHR5cGU6ZS50eXBlWzBdfX1mdW5jdGlvbiBObihyKXtyZXR1cm4ociZyLTEpPT09MH1mdW5jdGlvbiBndShyLGUsdCxuKXtpZighVmUocikpcmV0dXJuIE5uKGUpJiZObih0KTtjb25zdCBvPVN0KG4pO2lmKCFvKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm4gby5jb2xvclJlbmRlcmFibGUmJm8udGV4dHVyZUZpbHRlcmFibGV9ZnVuY3Rpb24geXUocil7Y29uc3QgZT1TdChyKTtpZighZSl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7cmV0dXJuIGUudGV4dHVyZUZpbHRlcmFibGV9ZnVuY3Rpb24gYnUocixlLHQpe3JldHVybiBIZShlKT9scihlKTp0fHxTfWZ1bmN0aW9uIFJ0KHIsZSx0LG4sbyl7aWYobyUxIT09MCl0aHJvdyJjYW4ndCBndWVzcyBkaW1lbnNpb25zIjtpZighdCYmIW4pe2NvbnN0IGk9TWF0aC5zcXJ0KG8vKGU9PT1hZT82OjEpKTtpJTE9PT0wPyh0PWksbj1pKToodD1vLG49MSl9ZWxzZSBpZihuKXtpZighdCYmKHQ9by9uLHQlMSkpdGhyb3ciY2FuJ3QgZ3Vlc3MgZGltZW5zaW9ucyJ9ZWxzZSBpZihuPW8vdCxuJTEpdGhyb3ciY2FuJ3QgZ3Vlc3MgZGltZW5zaW9ucyI7cmV0dXJue3dpZHRoOnQsaGVpZ2h0Om59fWZ1bmN0aW9uIE1lKHIsZSl7ZS5jb2xvcnNwYWNlQ29udmVyc2lvbiE9PXZvaWQgMCYmci5waXhlbFN0b3JlaSh1YSxlLmNvbG9yc3BhY2VDb252ZXJzaW9uKSxlLnByZW11bHRpcGx5QWxwaGEhPT12b2lkIDAmJnIucGl4ZWxTdG9yZWkoY2EsZS5wcmVtdWx0aXBseUFscGhhKSxlLmZsaXBZIT09dm9pZCAwJiZyLnBpeGVsU3RvcmVpKGZhLGUuZmxpcFkpfWZ1bmN0aW9uIExuKHIpe3IucGl4ZWxTdG9yZWkoYnIsNCksVmUocikmJihyLnBpeGVsU3RvcmVpKFBuLDApLHIucGl4ZWxTdG9yZWkoa24sMCksci5waXhlbFN0b3JlaShEbiwwKSxyLnBpeGVsU3RvcmVpKENuLDApLHIucGl4ZWxTdG9yZWkoQm4sMCkpfWZ1bmN0aW9uIHh1KHIsZSx0LG4pe24ubWluTWFnJiYodC5jYWxsKHIsZSxncixuLm1pbk1hZyksdC5jYWxsKHIsZSx5cixuLm1pbk1hZykpLG4ubWluJiZ0LmNhbGwocixlLGdyLG4ubWluKSxuLm1hZyYmdC5jYWxsKHIsZSx5cixuLm1hZyksbi53cmFwJiYodC5jYWxsKHIsZSx2dCxuLndyYXApLHQuY2FsbChyLGUsRXQsbi53cmFwKSwoZT09PWJlfHxBcyhyLGUpKSYmdC5jYWxsKHIsZSxGbixuLndyYXApKSxuLndyYXBSJiZ0LmNhbGwocixlLEZuLG4ud3JhcFIpLG4ud3JhcFMmJnQuY2FsbChyLGUsdnQsbi53cmFwUyksbi53cmFwVCYmdC5jYWxsKHIsZSxFdCxuLndyYXBUKSxuLm1pbkxvZCE9PXZvaWQgMCYmdC5jYWxsKHIsZSxyYSxuLm1pbkxvZCksbi5tYXhMb2QhPT12b2lkIDAmJnQuY2FsbChyLGUsbmEsbi5tYXhMb2QpLG4uYmFzZUxldmVsIT09dm9pZCAwJiZ0LmNhbGwocixlLG9hLG4uYmFzZUxldmVsKSxuLm1heExldmVsIT09dm9pZCAwJiZ0LmNhbGwocixlLGlhLG4ubWF4TGV2ZWwpLG4uY29tcGFyZUZ1bmMhPT12b2lkIDAmJnQuY2FsbChyLGUsYWEsbi5jb21wYXJlRnVuYyksbi5jb21wYXJlTW9kZSE9PXZvaWQgMCYmdC5jYWxsKHIsZSxzYSxuLmNvbXBhcmVNb2RlKX1mdW5jdGlvbiB6bihyLGUsdCl7Y29uc3Qgbj10LnRhcmdldHx8c2U7ci5iaW5kVGV4dHVyZShuLGUpLHh1KHIsbixyLnRleFBhcmFtZXRlcmksdCl9ZnVuY3Rpb24gX3Uocil7cmV0dXJuIHI9cnx8aWUudGV4dHVyZUNvbG9yLEhlKHIpP3I6bmV3IFVpbnQ4QXJyYXkoW3JbMF0qMjU1LHJbMV0qMjU1LHJbMl0qMjU1LHJbM10qMjU1XSl9ZnVuY3Rpb24gdnIocixlLHQsbixvLGkpe3Q9dHx8aWUudGV4dHVyZU9wdGlvbnMsaT1pfHxSO2NvbnN0IHM9dC50YXJnZXR8fHNlO2lmKG49bnx8dC53aWR0aCxvPW98fHQuaGVpZ2h0LHIuYmluZFRleHR1cmUocyxlKSxndShyLG4sbyxpKSlyLmdlbmVyYXRlTWlwbWFwKHMpO2Vsc2V7Y29uc3QgYT15dShpKT9xczpRcztyLnRleFBhcmFtZXRlcmkocyxncixhKSxyLnRleFBhcmFtZXRlcmkocyx5cixhKSxyLnRleFBhcmFtZXRlcmkocyx2dCxfdCksci50ZXhQYXJhbWV0ZXJpKHMsRXQsX3QpfX1mdW5jdGlvbiBRZShyKXtyZXR1cm4gci5hdXRvPT09ITB8fHIuYXV0bz09PXZvaWQgMCYmci5sZXZlbD09PXZvaWQgMH1mdW5jdGlvbiBFcihyLGUpe3JldHVybiBlPWV8fHt9LGUuY3ViZUZhY2VPcmRlcnx8W3ByLEtzLEpzLFpzLGVhLHRhXX1mdW5jdGlvbiBUcihyLGUpe2NvbnN0IG49RXIocixlKS5tYXAoZnVuY3Rpb24obyxpKXtyZXR1cm57ZmFjZTpvLG5keDppfX0pO3JldHVybiBuLnNvcnQoZnVuY3Rpb24obyxpKXtyZXR1cm4gby5mYWNlLWkuZmFjZX0pLG59ZnVuY3Rpb24gR24ocixlLHQsbil7bj1ufHxpZS50ZXh0dXJlT3B0aW9ucztjb25zdCBvPW4udGFyZ2V0fHxzZSxpPW4ubGV2ZWx8fDA7bGV0IHM9dC53aWR0aCxhPXQuaGVpZ2h0O2NvbnN0IHU9bi5pbnRlcm5hbEZvcm1hdHx8bi5mb3JtYXR8fFIsZj1YZSh1KSxkPW4uZm9ybWF0fHxmLmZvcm1hdCxwPW4udHlwZXx8Zi50eXBlO2lmKE1lKHIsbiksci5iaW5kVGV4dHVyZShvLGUpLG89PT1hZSl7Y29uc3QgZz10LndpZHRoLGI9dC5oZWlnaHQ7bGV0IGgseDtpZihnLzY9PT1iKWg9Yix4PVswLDAsMSwwLDIsMCwzLDAsNCwwLDUsMF07ZWxzZSBpZihiLzY9PT1nKWg9Zyx4PVswLDAsMCwxLDAsMiwwLDMsMCw0LDAsNV07ZWxzZSBpZihnLzM9PT1iLzIpaD1nLzMseD1bMCwwLDEsMCwyLDAsMCwxLDEsMSwyLDFdO2Vsc2UgaWYoZy8yPT09Yi8zKWg9Zy8yLHg9WzAsMCwxLDAsMCwxLDEsMSwwLDIsMSwyXTtlbHNlIHRocm93ImNhbid0IGZpZ3VyZSBvdXQgY3ViZSBtYXAgZnJvbSBlbGVtZW50OiAiKyh0LnNyYz90LnNyYzp0Lm5vZGVOYW1lKTtjb25zdCBFPXduKCk7RT8oRS5jYW52YXMud2lkdGg9aCxFLmNhbnZhcy5oZWlnaHQ9aCxzPWgsYT1oLFRyKHIsbikuZm9yRWFjaChmdW5jdGlvbih2KXtjb25zdCBGPXhbdi5uZHgqMiswXSpoLGs9eFt2Lm5keCoyKzFdKmg7RS5kcmF3SW1hZ2UodCxGLGssaCxoLDAsMCxoLGgpLHIudGV4SW1hZ2UyRCh2LmZhY2UsaSx1LGQscCxFLmNhbnZhcyl9KSxFLmNhbnZhcy53aWR0aD0xLEUuY2FudmFzLmhlaWdodD0xKTp0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA8InUiJiYocz1oLGE9aCxUcihyLG4pLmZvckVhY2goZnVuY3Rpb24odil7Y29uc3QgRj14W3YubmR4KjIrMF0qaCxrPXhbdi5uZHgqMisxXSpoO3IudGV4SW1hZ2UyRCh2LmZhY2UsaSx1LGgsaCwwLGQscCxudWxsKSxjcmVhdGVJbWFnZUJpdG1hcCh0LEYsayxoLGgse3ByZW11bHRpcGx5QWxwaGE6Im5vbmUiLGNvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pLnRoZW4oZnVuY3Rpb24oRyl7TWUocixuKSxyLmJpbmRUZXh0dXJlKG8sZSksci50ZXhJbWFnZTJEKHYuZmFjZSxpLHUsZCxwLEcpLFFlKG4pJiZ2cihyLGUsbixzLGEsdSl9KX0pKX1lbHNlIGlmKG89PT1iZXx8bz09PXhlKXtjb25zdCBnPU1hdGgubWluKHQud2lkdGgsdC5oZWlnaHQpLGI9TWF0aC5tYXgodC53aWR0aCx0LmhlaWdodCksaD1iL2c7aWYoaCUxIT09MCl0aHJvdyJjYW4gbm90IGNvbXB1dGUgM0QgZGltZW5zaW9ucyBvZiBlbGVtZW50Ijtjb25zdCB4PXQud2lkdGg9PT1iPzE6MCxFPXQuaGVpZ2h0PT09Yj8xOjA7ci5waXhlbFN0b3JlaShiciwxKSxyLnBpeGVsU3RvcmVpKFBuLHQud2lkdGgpLHIucGl4ZWxTdG9yZWkoa24sMCksci5waXhlbFN0b3JlaShCbiwwKSxyLnRleEltYWdlM0QobyxpLHUsZyxnLGcsMCxkLHAsbnVsbCk7Zm9yKGxldCB2PTA7djxoOysrdil7Y29uc3QgRj12KmcqeCxrPXYqZypFO3IucGl4ZWxTdG9yZWkoRG4sRiksci5waXhlbFN0b3JlaShDbixrKSxyLnRleFN1YkltYWdlM0QobyxpLDAsMCx2LGcsZywxLGQscCx0KX1MbihyKX1lbHNlIHIudGV4SW1hZ2UyRChvLGksdSxkLHAsdCk7UWUobikmJnZyKHIsZSxuLHMsYSx1KSx6bihyLGUsbil9ZnVuY3Rpb24gcWUoKXt9ZnVuY3Rpb24gdnUocil7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iil7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7cmV0dXJuIGUuaHJlZj1yLGUuaG9zdG5hbWU9PT1sb2NhdGlvbi5ob3N0bmFtZSYmZS5wb3J0PT09bG9jYXRpb24ucG9ydCYmZS5wcm90b2NvbD09PWxvY2F0aW9uLnByb3RvY29sfWVsc2V7Y29uc3QgZT1uZXcgVVJMKGxvY2F0aW9uLmhyZWYpLm9yaWdpbjtyZXR1cm4gbmV3IFVSTChyLGxvY2F0aW9uLmhyZWYpLm9yaWdpbj09PWV9fWZ1bmN0aW9uIEV1KHIsZSl7cmV0dXJuIGU9PT12b2lkIDAmJiF2dShyKT8iYW5vbnltb3VzIjplfWZ1bmN0aW9uIFR1KHIsZSx0KXt0PXR8fHFlO2xldCBuO2lmKGU9ZSE9PXZvaWQgMD9lOmllLmNyb3NzT3JpZ2luLGU9RXUocixlKSx0eXBlb2YgSW1hZ2U8InUiKXtuPW5ldyBJbWFnZSxlIT09dm9pZCAwJiYobi5jcm9zc09yaWdpbj1lKTtjb25zdCBvPWZ1bmN0aW9uKCl7bi5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsaSksbi5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixzKSxuPW51bGx9LGk9ZnVuY3Rpb24oKXtjb25zdCB1PSJjb3VsZG4ndCBsb2FkIGltYWdlOiAiK3I7cG4odSksdCh1LG4pLG8oKX0scz1mdW5jdGlvbigpe3QobnVsbCxuKSxvKCl9O3JldHVybiBuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixpKSxuLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHMpLG4uc3JjPXIsbn1lbHNlIGlmKHR5cGVvZiBJbWFnZUJpdG1hcDwidSIpe2xldCBvLGk7Y29uc3Qgcz1mdW5jdGlvbigpe3QobyxpKX0sYT17fTtlJiYoYS5tb2RlPSJjb3JzIiksZmV0Y2gocixhKS50aGVuKGZ1bmN0aW9uKHUpe2lmKCF1Lm9rKXRocm93IHU7cmV0dXJuIHUuYmxvYigpfSkudGhlbihmdW5jdGlvbih1KXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAodSx7cHJlbXVsdGlwbHlBbHBoYToibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSl9KS50aGVuKGZ1bmN0aW9uKHUpe2k9dSxzZXRUaW1lb3V0KHMpfSkuY2F0Y2goZnVuY3Rpb24odSl7bz11LHNldFRpbWVvdXQocyl9KSxuPW51bGx9cmV0dXJuIG59ZnVuY3Rpb24gJG4ocil7cmV0dXJuIHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJnIgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcHx8dHlwZW9mIEltYWdlRGF0YTwidSImJnIgaW5zdGFuY2VvZiBJbWFnZURhdGF8fHR5cGVvZiBIVE1MRWxlbWVudDwidSImJnIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH1mdW5jdGlvbiB3cihyLGUsdCl7cmV0dXJuICRuKHIpPyhzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dChudWxsLHIpfSkscik6VHUocixlLHQpfWZ1bmN0aW9uIEFyKHIsZSx0KXt0PXR8fGllLnRleHR1cmVPcHRpb25zO2NvbnN0IG49dC50YXJnZXR8fHNlO2lmKHIuYmluZFRleHR1cmUobixlKSx0LmNvbG9yPT09ITEpcmV0dXJuO2NvbnN0IG89X3UodC5jb2xvcik7aWYobj09PWFlKWZvcihsZXQgaT0wO2k8NjsrK2kpci50ZXhJbWFnZTJEKHByK2ksMCxSLDEsMSwwLFIsUyxvKTtlbHNlIG49PT1iZXx8bj09PXhlP3IudGV4SW1hZ2UzRChuLDAsUiwxLDEsMSwwLFIsUyxvKTpyLnRleEltYWdlMkQobiwwLFIsMSwxLDAsUixTLG8pfWZ1bmN0aW9uIHd1KHIsZSx0LG4pe3JldHVybiBuPW58fHFlLHQ9dHx8aWUudGV4dHVyZU9wdGlvbnMsQXIocixlLHQpLHQ9T2JqZWN0LmFzc2lnbih7fSx0KSx3cih0LnNyYyx0LmNyb3NzT3JpZ2luLGZ1bmN0aW9uKGkscyl7aT9uKGksZSxzKTooR24ocixlLHMsdCksbihudWxsLGUscykpfSl9ZnVuY3Rpb24gQXUocixlLHQsbil7bj1ufHxxZTtjb25zdCBvPXQuc3JjO2lmKG8ubGVuZ3RoIT09Nil0aHJvdyJ0aGVyZSBtdXN0IGJlIDYgdXJscyBmb3IgYSBjdWJlbWFwIjtjb25zdCBpPXQubGV2ZWx8fDAscz10LmludGVybmFsRm9ybWF0fHx0LmZvcm1hdHx8UixhPVhlKHMpLHU9dC5mb3JtYXR8fGEuZm9ybWF0LGY9dC50eXBlfHxTLGQ9dC50YXJnZXR8fHNlO2lmKGQhPT1hZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFX0NVQkVfTUFQIjtBcihyLGUsdCksdD1PYmplY3QuYXNzaWduKHt9LHQpO2xldCBwPTY7Y29uc3QgZz1bXSxiPUVyKHIsdCk7bGV0IGg7ZnVuY3Rpb24geChFKXtyZXR1cm4gZnVuY3Rpb24odixGKXstLXAsdj9nLnB1c2godik6Ri53aWR0aCE9PUYuaGVpZ2h0P2cucHVzaCgiY3ViZW1hcCBmYWNlIGltZyBpcyBub3QgYSBzcXVhcmU6ICIrRi5zcmMpOihNZShyLHQpLHIuYmluZFRleHR1cmUoZCxlKSxwPT09NT9FcigpLmZvckVhY2goZnVuY3Rpb24oayl7ci50ZXhJbWFnZTJEKGssaSxzLHUsZixGKX0pOnIudGV4SW1hZ2UyRChFLGkscyx1LGYsRiksUWUodCkmJnIuZ2VuZXJhdGVNaXBtYXAoZCkpLHA9PT0wJiZuKGcubGVuZ3RoP2c6dm9pZCAwLGUsaCl9fWg9by5tYXAoZnVuY3Rpb24oRSx2KXtyZXR1cm4gd3IoRSx0LmNyb3NzT3JpZ2luLHgoYlt2XSkpfSl9ZnVuY3Rpb24gSXUocixlLHQsbil7bj1ufHxxZTtjb25zdCBvPXQuc3JjLGk9dC5pbnRlcm5hbEZvcm1hdHx8dC5mb3JtYXR8fFIscz1YZShpKSxhPXQuZm9ybWF0fHxzLmZvcm1hdCx1PXQudHlwZXx8UyxmPXQudGFyZ2V0fHx4ZTtpZihmIT09YmUmJmYhPT14ZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFXzNEIG9yIFRFWFRVUkVfMkRfQVJSQVkiO0FyKHIsZSx0KSx0PU9iamVjdC5hc3NpZ24oe30sdCk7bGV0IGQ9by5sZW5ndGg7Y29uc3QgcD1bXTtsZXQgZztjb25zdCBiPXQubGV2ZWx8fDA7bGV0IGg9dC53aWR0aCx4PXQuaGVpZ2h0O2NvbnN0IEU9by5sZW5ndGg7bGV0IHY9ITA7ZnVuY3Rpb24gRihrKXtyZXR1cm4gZnVuY3Rpb24oRyx6KXtpZigtLWQsRylwLnB1c2goRyk7ZWxzZXtpZihNZShyLHQpLHIuYmluZFRleHR1cmUoZixlKSx2KXt2PSExLGg9dC53aWR0aHx8ei53aWR0aCx4PXQuaGVpZ2h0fHx6LmhlaWdodCxyLnRleEltYWdlM0QoZixiLGksaCx4LEUsMCxhLHUsbnVsbCk7Zm9yKGxldCBIPTA7SDxFOysrSClyLnRleFN1YkltYWdlM0QoZixiLDAsMCxILGgseCwxLGEsdSx6KX1lbHNle2xldCBIPXosJDsoei53aWR0aCE9PWh8fHouaGVpZ2h0IT09eCkmJigkPXduKCksSD0kLmNhbnZhcywkLmNhbnZhcy53aWR0aD1oLCQuY2FudmFzLmhlaWdodD14LCQuZHJhd0ltYWdlKHosMCwwLGgseCkpLHIudGV4U3ViSW1hZ2UzRChmLGIsMCwwLGssaCx4LDEsYSx1LEgpLCQmJkg9PT0kLmNhbnZhcyYmKCQuY2FudmFzLndpZHRoPTAsJC5jYW52YXMuaGVpZ2h0PTApfVFlKHQpJiZyLmdlbmVyYXRlTWlwbWFwKGYpfWQ9PT0wJiZuKHAubGVuZ3RoP3A6dm9pZCAwLGUsZyl9fWc9by5tYXAoZnVuY3Rpb24oayxHKXtyZXR1cm4gd3Ioayx0LmNyb3NzT3JpZ2luLEYoRykpfSl9ZnVuY3Rpb24gU3UocixlLHQsbil7bj1ufHxpZS50ZXh0dXJlT3B0aW9ucztjb25zdCBvPW4udGFyZ2V0fHxzZTtyLmJpbmRUZXh0dXJlKG8sZSk7bGV0IGk9bi53aWR0aCxzPW4uaGVpZ2h0LGE9bi5kZXB0aDtjb25zdCB1PW4ubGV2ZWx8fDAsZj1uLmludGVybmFsRm9ybWF0fHxuLmZvcm1hdHx8UixkPVhlKGYpLHA9bi5mb3JtYXR8fGQuZm9ybWF0LGc9bi50eXBlfHxidShyLHQsZC50eXBlKTtpZihIZSh0KSl0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkmJih0PW5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSk7ZWxzZXtjb25zdCBFPW1uKGcpO3Q9bmV3IEUodCl9Y29uc3QgYj1wdShmLGcpLGg9dC5ieXRlTGVuZ3RoL2I7aWYoaCUxKXRocm93Imxlbmd0aCB3cm9uZyBzaXplIGZvciBmb3JtYXQ6ICIrVG4ocixwKTtsZXQgeDtpZihvPT09YmV8fG89PT14ZSlpZighaSYmIXMmJiFhKXtjb25zdCBFPU1hdGguY2JydChoKTtpZihFJTEhPT0wKXRocm93ImNhbid0IGd1ZXNzIGN1YmUgc2l6ZSBvZiBhcnJheSBvZiBudW1FbGVtZW50czogIitoO2k9RSxzPUUsYT1FfWVsc2UgaSYmKCFzfHwhYSk/KHg9UnQocixvLHMsYSxoL2kpLHM9eC53aWR0aCxhPXguaGVpZ2h0KTpzJiYoIWl8fCFhKT8oeD1SdChyLG8saSxhLGgvcyksaT14LndpZHRoLGE9eC5oZWlnaHQpOih4PVJ0KHIsbyxpLHMsaC9hKSxpPXgud2lkdGgscz14LmhlaWdodCk7ZWxzZSB4PVJ0KHIsbyxpLHMsaCksaT14LndpZHRoLHM9eC5oZWlnaHQ7aWYoTG4ociksci5waXhlbFN0b3JlaShicixuLnVucGFja0FsaWdubWVudHx8MSksTWUocixuKSxvPT09YWUpe2NvbnN0IEU9Yi90LkJZVEVTX1BFUl9FTEVNRU5ULHY9aC82KkU7VHIocixuKS5mb3JFYWNoKEY9Pntjb25zdCBrPXYqRi5uZHgsRz10LnN1YmFycmF5KGssayt2KTtyLnRleEltYWdlMkQoRi5mYWNlLHUsZixpLHMsMCxwLGcsRyl9KX1lbHNlIG89PT1iZXx8bz09PXhlP3IudGV4SW1hZ2UzRChvLHUsZixpLHMsYSwwLHAsZyx0KTpyLnRleEltYWdlMkQobyx1LGYsaSxzLDAscCxnLHQpO3JldHVybnt3aWR0aDppLGhlaWdodDpzLGRlcHRoOmEsdHlwZTpnfX1mdW5jdGlvbiBSdShyLGUsdCl7Y29uc3Qgbj10LnRhcmdldHx8c2U7ci5iaW5kVGV4dHVyZShuLGUpO2NvbnN0IG89dC5sZXZlbHx8MCxpPXQuaW50ZXJuYWxGb3JtYXR8fHQuZm9ybWF0fHxSLHM9WGUoaSksYT10LmZvcm1hdHx8cy5mb3JtYXQsdT10LnR5cGV8fHMudHlwZTtpZihNZShyLHQpLG49PT1hZSlmb3IobGV0IGY9MDtmPDY7KytmKXIudGV4SW1hZ2UyRChwcitmLG8saSx0LndpZHRoLHQuaGVpZ2h0LDAsYSx1LG51bGwpO2Vsc2Ugbj09PWJlfHxuPT09eGU/ci50ZXhJbWFnZTNEKG4sbyxpLHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCwwLGEsdSxudWxsKTpyLnRleEltYWdlMkQobixvLGksdC53aWR0aCx0LmhlaWdodCwwLGEsdSxudWxsKX1mdW5jdGlvbiBXbihyLGUsdCl7dD10fHxxZSxlPWV8fGllLnRleHR1cmVPcHRpb25zO2NvbnN0IG49ci5jcmVhdGVUZXh0dXJlKCksbz1lLnRhcmdldHx8c2U7bGV0IGk9ZS53aWR0aHx8MSxzPWUuaGVpZ2h0fHwxO2NvbnN0IGE9ZS5pbnRlcm5hbEZvcm1hdHx8UjtyLmJpbmRUZXh0dXJlKG8sbiksbz09PWFlJiYoci50ZXhQYXJhbWV0ZXJpKG8sdnQsX3QpLHIudGV4UGFyYW1ldGVyaShvLEV0LF90KSk7bGV0IHU9ZS5zcmM7aWYodSlpZih0eXBlb2YgdT09ImZ1bmN0aW9uIiYmKHU9dShyLGUpKSx0eXBlb2YgdT09InN0cmluZyIpd3UocixuLGUsdCk7ZWxzZSBpZihIZSh1KXx8QXJyYXkuaXNBcnJheSh1KSYmKHR5cGVvZiB1WzBdPT0ibnVtYmVyInx8QXJyYXkuaXNBcnJheSh1WzBdKXx8SGUodVswXSkpKXtjb25zdCBmPVN1KHIsbix1LGUpO2k9Zi53aWR0aCxzPWYuaGVpZ2h0fWVsc2UgQXJyYXkuaXNBcnJheSh1KSYmKHR5cGVvZiB1WzBdPT0ic3RyaW5nInx8JG4odVswXSkpP289PT1hZT9BdShyLG4sZSx0KTpJdShyLG4sZSx0KTooR24ocixuLHUsZSksaT11LndpZHRoLHM9dS5oZWlnaHQpO2Vsc2UgUnUocixuLGUpO3JldHVybiBRZShlKSYmdnIocixuLGUsaSxzLGEpLHpuKHIsbixlKSxufWNvbnN0IElyPXBuO2Z1bmN0aW9uIFZuKHIpe3JldHVybiB0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5nZXRFbGVtZW50QnlJZD9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChyKTpudWxsfWNvbnN0IEZ0PTMzOTg0LFB0PTM0OTYyLEZ1PTM0OTYzLFB1PTM1NzEzLGt1PTM1NzE0LER1PTM1NjMyLEN1PTM1NjMzLEJ1PTM1OTgxLEhuPTM1NzE4LE11PTM1NzIxLE91PTM1OTcxLFV1PTM1MzgyLE51PTM1Mzk2LEx1PTM1Mzk4LHp1PTM1MzkyLEd1PTM1Mzk1LGt0PTUxMjYsam49MzU2NjQsWW49MzU2NjUsWG49MzU2NjYsU3I9NTEyNCxRbj0zNTY2Nyxxbj0zNTY2OCxLbj0zNTY2OSxKbj0zNTY3MCxabj0zNTY3MSxlbz0zNTY3Mix0bz0zNTY3Myxybz0zNTY3NCxubz0zNTY3NSxvbz0zNTY3NiwkdT0zNTY3OCxXdT0zNTY4MCxWdT0zNTY3OSxIdT0zNTY4MixqdT0zNTY4NSxZdT0zNTY4NixYdT0zNTY4NyxRdT0zNTY4OCxxdT0zNTY4OSxLdT0zNTY5MCxKdT0zNjI4OSxadT0zNjI5MixlYz0zNjI5MyxScj01MTI1LGlvPTM2Mjk0LHNvPTM2Mjk1LGFvPTM2Mjk2LHRjPTM2Mjk4LHJjPTM2Mjk5LG5jPTM2MzAwLG9jPTM2MzAzLGljPTM2MzA2LHNjPTM2MzA3LGFjPTM2MzA4LHVjPTM2MzExLER0PTM1NTMsQ3Q9MzQwNjcsRnI9MzI4NzksQnQ9MzU4NjYsXz17fTtmdW5jdGlvbiB1byhyLGUpe3JldHVybiBfW2VdLmJpbmRQb2ludH1mdW5jdGlvbiBjYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xZihlLHQpfX1mdW5jdGlvbiBmYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xZnYoZSx0KX19ZnVuY3Rpb24gbGMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMmZ2KGUsdCl9fWZ1bmN0aW9uIGRjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTNmdihlLHQpfX1mdW5jdGlvbiBoYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm00ZnYoZSx0KX19ZnVuY3Rpb24gY28ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWkoZSx0KX19ZnVuY3Rpb24gZm8ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWl2KGUsdCl9fWZ1bmN0aW9uIGxvKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTJpdihlLHQpfX1mdW5jdGlvbiBobyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0zaXYoZSx0KX19ZnVuY3Rpb24gbW8ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtNGl2KGUsdCl9fWZ1bmN0aW9uIG1jKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTF1aShlLHQpfX1mdW5jdGlvbiBwYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xdWl2KGUsdCl9fWZ1bmN0aW9uIGdjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTJ1aXYoZSx0KX19ZnVuY3Rpb24geWMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtM3VpdihlLHQpfX1mdW5jdGlvbiBiYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm00dWl2KGUsdCl9fWZ1bmN0aW9uIHhjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJmdihlLCExLHQpfX1mdW5jdGlvbiBfYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgzZnYoZSwhMSx0KX19ZnVuY3Rpb24gdmMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIEVjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJ4M2Z2KGUsITEsdCl9fWZ1bmN0aW9uIFRjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDN4MmZ2KGUsITEsdCl9fWZ1bmN0aW9uIHdjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJ4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIEFjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDR4MmZ2KGUsITEsdCl9fWZ1bmN0aW9uIEljKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDN4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIFNjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDR4M2Z2KGUsITEsdCl9fWZ1bmN0aW9uIE4ocixlLHQsbil7Y29uc3Qgbz11byhyLGUpO3JldHVybiBWZShyKT9mdW5jdGlvbihpKXtsZXQgcyxhOyFpfHxkcihyLGkpPyhzPWksYT1udWxsKToocz1pLnRleHR1cmUsYT1pLnNhbXBsZXIpLHIudW5pZm9ybTFpKG4sdCksci5hY3RpdmVUZXh0dXJlKEZ0K3QpLHIuYmluZFRleHR1cmUobyxzKSxyLmJpbmRTYW1wbGVyKHQsYSl9OmZ1bmN0aW9uKGkpe3IudW5pZm9ybTFpKG4sdCksci5hY3RpdmVUZXh0dXJlKEZ0K3QpLHIuYmluZFRleHR1cmUobyxpKX19ZnVuY3Rpb24gTChyLGUsdCxuLG8pe2NvbnN0IGk9dW8ocixlKSxzPW5ldyBJbnQzMkFycmF5KG8pO2ZvcihsZXQgYT0wO2E8bzsrK2Epc1thXT10K2E7cmV0dXJuIFZlKHIpP2Z1bmN0aW9uKGEpe3IudW5pZm9ybTFpdihuLHMpLGEuZm9yRWFjaChmdW5jdGlvbih1LGYpe3IuYWN0aXZlVGV4dHVyZShGdCtzW2ZdKTtsZXQgZCxwOyF1fHxkcihyLHUpPyhkPXUscD1udWxsKTooZD11LnRleHR1cmUscD11LnNhbXBsZXIpLHIuYmluZFNhbXBsZXIodCxwKSxyLmJpbmRUZXh0dXJlKGksZCl9KX06ZnVuY3Rpb24oYSl7ci51bmlmb3JtMWl2KG4scyksYS5mb3JFYWNoKGZ1bmN0aW9uKHUsZil7ci5hY3RpdmVUZXh0dXJlKEZ0K3NbZl0pLHIuYmluZFRleHR1cmUoaSx1KX0pfX1fW2t0XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0LHNldHRlcjpjYyxhcnJheVNldHRlcjpmY30sX1tqbl09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6OCxzZXR0ZXI6bGMsY29sczoyfSxfW1luXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6ZGMsY29sczozfSxfW1huXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6aGMsY29sczo0fSxfW1NyXT17VHlwZTpJbnQzMkFycmF5LHNpemU6NCxzZXR0ZXI6Y28sYXJyYXlTZXR0ZXI6Zm99LF9bUW5dPXtUeXBlOkludDMyQXJyYXksc2l6ZTo4LHNldHRlcjpsbyxjb2xzOjJ9LF9bcW5dPXtUeXBlOkludDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6aG8sY29sczozfSxfW0tuXT17VHlwZTpJbnQzMkFycmF5LHNpemU6MTYsc2V0dGVyOm1vLGNvbHM6NH0sX1tScl09e1R5cGU6VWludDMyQXJyYXksc2l6ZTo0LHNldHRlcjptYyxhcnJheVNldHRlcjpwY30sX1tpb109e1R5cGU6VWludDMyQXJyYXksc2l6ZTo4LHNldHRlcjpnYyxjb2xzOjJ9LF9bc29dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6MTIsc2V0dGVyOnljLGNvbHM6M30sX1thb109e1R5cGU6VWludDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6YmMsY29sczo0fSxfW0puXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjQsc2V0dGVyOmNvLGFycmF5U2V0dGVyOmZvfSxfW1puXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjgsc2V0dGVyOmxvLGNvbHM6Mn0sX1tlb109e1R5cGU6VWludDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6aG8sY29sczozfSxfW3RvXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjE2LHNldHRlcjptbyxjb2xzOjR9LF9bcm9dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjMyLHNldHRlcjp4Yyxyb3dzOjIsY29sczoyfSxfW25vXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0OCxzZXR0ZXI6X2Mscm93czozLGNvbHM6M30sX1tvb109e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NjQsc2V0dGVyOnZjLHJvd3M6NCxjb2xzOjR9LF9banVdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjMyLHNldHRlcjpFYyxyb3dzOjIsY29sczozfSxfW1l1XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTozMixzZXR0ZXI6d2Mscm93czoyLGNvbHM6NH0sX1tYdV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NDgsc2V0dGVyOlRjLHJvd3M6Myxjb2xzOjJ9LF9bUXVdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQ4LHNldHRlcjpJYyxyb3dzOjMsY29sczo0fSxfW3F1XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6QWMscm93czo0LGNvbHM6Mn0sX1tLdV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NjQsc2V0dGVyOlNjLHJvd3M6NCxjb2xzOjN9LF9bJHVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpOLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OkR0fSxfW1d1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TixhcnJheVNldHRlcjpMLGJpbmRQb2ludDpDdH0sX1tWdV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOk4sYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6RnJ9LF9bSHVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpOLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OkR0fSxfW0p1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TixhcnJheVNldHRlcjpMLGJpbmRQb2ludDpCdH0sX1tadV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOk4sYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6QnR9LF9bZWNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpOLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OkN0fSxfW3RjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TixhcnJheVNldHRlcjpMLGJpbmRQb2ludDpEdH0sX1tyY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOk4sYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6RnJ9LF9bbmNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpOLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OkN0fSxfW29jXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TixhcnJheVNldHRlcjpMLGJpbmRQb2ludDpCdH0sX1tpY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOk4sYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6RHR9LF9bc2NdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpOLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OkZyfSxfW2FjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TixhcnJheVNldHRlcjpMLGJpbmRQb2ludDpDdH0sX1t1Y109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOk4sYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6QnR9O2Z1bmN0aW9uIE10KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHQudmFsdWUpc3dpdGNoKHIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHQudmFsdWUubGVuZ3RoKXtjYXNlIDQ6ci52ZXJ0ZXhBdHRyaWI0ZnYoZSx0LnZhbHVlKTticmVhaztjYXNlIDM6ci52ZXJ0ZXhBdHRyaWIzZnYoZSx0LnZhbHVlKTticmVhaztjYXNlIDI6ci52ZXJ0ZXhBdHRyaWIyZnYoZSx0LnZhbHVlKTticmVhaztjYXNlIDE6ci52ZXJ0ZXhBdHRyaWIxZnYoZSx0LnZhbHVlKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidGhlIGxlbmd0aCBvZiBhIGZsb2F0IGNvbnN0YW50IHZhbHVlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA0ISIpfWVsc2Ugci5iaW5kQnVmZmVyKFB0LHQuYnVmZmVyKSxyLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHIudmVydGV4QXR0cmliUG9pbnRlcihlLHQubnVtQ29tcG9uZW50c3x8dC5zaXplLHQudHlwZXx8a3QsdC5ub3JtYWxpemV8fCExLHQuc3RyaWRlfHwwLHQub2Zmc2V0fHwwKSxyLnZlcnRleEF0dHJpYkRpdmlzb3ImJnIudmVydGV4QXR0cmliRGl2aXNvcihlLHQuZGl2aXNvcnx8MCl9fWZ1bmN0aW9uIGNlKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHQudmFsdWUpaWYoci5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZSksdC52YWx1ZS5sZW5ndGg9PT00KXIudmVydGV4QXR0cmliNGl2KGUsdC52YWx1ZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlRoZSBsZW5ndGggb2YgYW4gaW50ZWdlciBjb25zdGFudCB2YWx1ZSBtdXN0IGJlIDQhIik7ZWxzZSByLmJpbmRCdWZmZXIoUHQsdC5idWZmZXIpLHIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihlLHQubnVtQ29tcG9uZW50c3x8dC5zaXplLHQudHlwZXx8U3IsdC5zdHJpZGV8fDAsdC5vZmZzZXR8fDApLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUsdC5kaXZpc29yfHwwKX19ZnVuY3Rpb24gT3QocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYodC52YWx1ZSlpZihyLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSx0LnZhbHVlLmxlbmd0aD09PTQpci52ZXJ0ZXhBdHRyaWI0dWl2KGUsdC52YWx1ZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlRoZSBsZW5ndGggb2YgYW4gdW5zaWduZWQgaW50ZWdlciBjb25zdGFudCB2YWx1ZSBtdXN0IGJlIDQhIik7ZWxzZSByLmJpbmRCdWZmZXIoUHQsdC5idWZmZXIpLHIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihlLHQubnVtQ29tcG9uZW50c3x8dC5zaXplLHQudHlwZXx8UnIsdC5zdHJpZGV8fDAsdC5vZmZzZXR8fDApLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUsdC5kaXZpc29yfHwwKX19ZnVuY3Rpb24gUHIocixlLHQpe2NvbnN0IG49dC5zaXplLG89dC5jb3VudDtyZXR1cm4gZnVuY3Rpb24oaSl7ci5iaW5kQnVmZmVyKFB0LGkuYnVmZmVyKTtjb25zdCBzPWkuc2l6ZXx8aS5udW1Db21wb25lbnRzfHxuLGE9cy9vLHU9aS50eXBlfHxrdCxkPV9bdV0uc2l6ZSpzLHA9aS5ub3JtYWxpemV8fCExLGc9aS5vZmZzZXR8fDAsYj1kL287Zm9yKGxldCBoPTA7aDxvOysraClyLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGUraCksci52ZXJ0ZXhBdHRyaWJQb2ludGVyKGUraCxhLHUscCxkLGcrYipoKSxyLnZlcnRleEF0dHJpYkRpdmlzb3ImJnIudmVydGV4QXR0cmliRGl2aXNvcihlK2gsaS5kaXZpc29yfHwwKX19Y29uc3QgUD17fTtQW2t0XT17c2l6ZTo0LHNldHRlcjpNdH0sUFtqbl09e3NpemU6OCxzZXR0ZXI6TXR9LFBbWW5dPXtzaXplOjEyLHNldHRlcjpNdH0sUFtYbl09e3NpemU6MTYsc2V0dGVyOk10fSxQW1NyXT17c2l6ZTo0LHNldHRlcjpjZX0sUFtRbl09e3NpemU6OCxzZXR0ZXI6Y2V9LFBbcW5dPXtzaXplOjEyLHNldHRlcjpjZX0sUFtLbl09e3NpemU6MTYsc2V0dGVyOmNlfSxQW1JyXT17c2l6ZTo0LHNldHRlcjpPdH0sUFtpb109e3NpemU6OCxzZXR0ZXI6T3R9LFBbc29dPXtzaXplOjEyLHNldHRlcjpPdH0sUFthb109e3NpemU6MTYsc2V0dGVyOk90fSxQW0puXT17c2l6ZTo0LHNldHRlcjpjZX0sUFtabl09e3NpemU6OCxzZXR0ZXI6Y2V9LFBbZW9dPXtzaXplOjEyLHNldHRlcjpjZX0sUFt0b109e3NpemU6MTYsc2V0dGVyOmNlfSxQW3JvXT17c2l6ZTo0LHNldHRlcjpQcixjb3VudDoyfSxQW25vXT17c2l6ZTo5LHNldHRlcjpQcixjb3VudDozfSxQW29vXT17c2l6ZToxNixzZXR0ZXI6UHIsY291bnQ6NH07Y29uc3QgUmM9L0VSUk9SOlxzKlxkKzooXGQrKS9naTtmdW5jdGlvbiBGYyhyLGU9IiIsdD0wKXtjb25zdCBuPVsuLi5lLm1hdGNoQWxsKFJjKV0sbz1uZXcgTWFwKG4ubWFwKChpLHMpPT57Y29uc3QgYT1wYXJzZUludChpWzFdKSx1PW5bcysxXSxmPXU/dS5pbmRleDplLmxlbmd0aCxkPWUuc3Vic3RyaW5nKGkuaW5kZXgsZik7cmV0dXJuW2EtMSxkXX0pKTtyZXR1cm4gci5zcGxpdChgCmApLm1hcCgoaSxzKT0+e2NvbnN0IGE9by5nZXQocyk7cmV0dXJuYCR7cysxK3R9OiAke2l9JHthP2AKCl5eXiAke2F9YDoiIn1gfSkuam9pbihgCmApfWNvbnN0IHBvPS9eWyBcdF0qXG4vO2Z1bmN0aW9uIGdvKHIpe2xldCBlPTA7cmV0dXJuIHBvLnRlc3QocikmJihlPTEscj1yLnJlcGxhY2UocG8sIiIpKSx7bGluZU9mZnNldDplLHNoYWRlclNvdXJjZTpyfX1mdW5jdGlvbiBQYyhyLGUpe3JldHVybiByLmVycm9yQ2FsbGJhY2soZSksci5jYWxsYmFjayYmc2V0VGltZW91dCgoKT0+e3IuY2FsbGJhY2soYCR7ZX0KJHtyLmVycm9ycy5qb2luKGAKYCl9YCl9KSxudWxsfWZ1bmN0aW9uIGtjKHIsZSx0LG4pe2lmKG49bnx8SXIsIXIuZ2V0U2hhZGVyUGFyYW1ldGVyKHQsUHUpKXtjb25zdCBpPXIuZ2V0U2hhZGVySW5mb0xvZyh0KSx7bGluZU9mZnNldDpzLHNoYWRlclNvdXJjZTphfT1nbyhyLmdldFNoYWRlclNvdXJjZSh0KSksdT1gJHtGYyhhLGkscyl9CkVycm9yIGNvbXBpbGluZyAke1RuKHIsZSl9OiAke2l9YDtyZXR1cm4gbih1KSx1fXJldHVybiIifWZ1bmN0aW9uIGtyKHIsZSx0KXtsZXQgbixvLGk7aWYodHlwZW9mIGU9PSJmdW5jdGlvbiImJih0PWUsZT12b2lkIDApLHR5cGVvZiByPT0iZnVuY3Rpb24iKXQ9cixyPXZvaWQgMDtlbHNlIGlmKHImJiFBcnJheS5pc0FycmF5KHIpKXtjb25zdCBmPXI7dD1mLmVycm9yQ2FsbGJhY2sscj1mLmF0dHJpYkxvY2F0aW9ucyxuPWYudHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyxvPWYudHJhbnNmb3JtRmVlZGJhY2tNb2RlLGk9Zi5jYWxsYmFja31jb25zdCBzPXR8fElyLGE9W10sdT17ZXJyb3JDYWxsYmFjayhmLC4uLmQpe2EucHVzaChmKSxzKGYsLi4uZCl9LHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3M6bix0cmFuc2Zvcm1GZWVkYmFja01vZGU6byxjYWxsYmFjazppLGVycm9yczphfTt7bGV0IGY9e307QXJyYXkuaXNBcnJheShyKT9yLmZvckVhY2goZnVuY3Rpb24oZCxwKXtmW2RdPWU/ZVtwXTpwfSk6Zj1yfHx7fSx1LmF0dHJpYkxvY2F0aW9ucz1mfXJldHVybiB1fWNvbnN0IERjPVsiVkVSVEVYX1NIQURFUiIsIkZSQUdNRU5UX1NIQURFUiJdO2Z1bmN0aW9uIENjKHIsZSl7aWYoZS5pbmRleE9mKCJmcmFnIik+PTApcmV0dXJuIER1O2lmKGUuaW5kZXhPZigidmVydCIpPj0wKXJldHVybiBDdX1mdW5jdGlvbiBCYyhyLGUsdCl7Y29uc3Qgbj1yLmdldEF0dGFjaGVkU2hhZGVycyhlKTtmb3IoY29uc3QgbyBvZiBuKXQuaGFzKG8pJiZyLmRlbGV0ZVNoYWRlcihvKTtyLmRlbGV0ZVByb2dyYW0oZSl9Y29uc3QgTWM9KHI9MCk9Pm5ldyBQcm9taXNlKGU9PnNldFRpbWVvdXQoZSxyKSk7ZnVuY3Rpb24gT2MocixlLHQpe2NvbnN0IG49ci5jcmVhdGVQcm9ncmFtKCkse2F0dHJpYkxvY2F0aW9uczpvLHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3M6aSx0cmFuc2Zvcm1GZWVkYmFja01vZGU6c309a3IodCk7Zm9yKGxldCBhPTA7YTxlLmxlbmd0aDsrK2Epe2xldCB1PWVbYV07aWYodHlwZW9mIHU9PSJzdHJpbmciKXtjb25zdCBmPVZuKHUpLGQ9Zj9mLnRleHQ6dTtsZXQgcD1yW0RjW2FdXTtmJiZmLnR5cGUmJihwPUNjKHIsZi50eXBlKXx8cCksdT1yLmNyZWF0ZVNoYWRlcihwKSxyLnNoYWRlclNvdXJjZSh1LGdvKGQpLnNoYWRlclNvdXJjZSksci5jb21waWxlU2hhZGVyKHUpLHIuYXR0YWNoU2hhZGVyKG4sdSl9fU9iamVjdC5lbnRyaWVzKG8pLmZvckVhY2goKFthLHVdKT0+ci5iaW5kQXR0cmliTG9jYXRpb24obix1LGEpKTt7bGV0IGE9aTthJiYoYS5hdHRyaWJzJiYoYT1hLmF0dHJpYnMpLEFycmF5LmlzQXJyYXkoYSl8fChhPU9iamVjdC5rZXlzKGEpKSxyLnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MobixhLHN8fEJ1KSl9cmV0dXJuIHIubGlua1Byb2dyYW0obiksbn1mdW5jdGlvbiBVYyhyLGUsdCxuLG8pe2NvbnN0IGk9a3IodCxuLG8pLHM9bmV3IFNldChlKSxhPU9jKHIsZSxpKTtmdW5jdGlvbiB1KGYsZCl7Y29uc3QgcD1MYyhmLGQsaS5lcnJvckNhbGxiYWNrKTtyZXR1cm4gcCYmQmMoZixkLHMpLHB9aWYoaS5jYWxsYmFjayl7TmMocixhKS50aGVuKCgpPT57Y29uc3QgZj11KHIsYSk7aS5jYWxsYmFjayhmLGY/dm9pZCAwOmEpfSk7cmV0dXJufXJldHVybiB1KHIsYSk/dm9pZCAwOmF9YXN5bmMgZnVuY3Rpb24gTmMocixlKXtjb25zdCB0PXIuZ2V0RXh0ZW5zaW9uKCJLSFJfcGFyYWxsZWxfc2hhZGVyX2NvbXBpbGUiKSxuPXQ/KGkscyk9PmkuZ2V0UHJvZ3JhbVBhcmFtZXRlcihzLHQuQ09NUExFVElPTl9TVEFUVVNfS0hSKTooKT0+ITA7bGV0IG89MDtkbyBhd2FpdCBNYyhvKSxvPTFlMy82MDt3aGlsZSghbihyLGUpKX1mdW5jdGlvbiBMYyhyLGUsdCl7aWYodD10fHxJciwhci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsa3UpKXtjb25zdCBvPXIuZ2V0UHJvZ3JhbUluZm9Mb2coZSk7dChgRXJyb3IgaW4gcHJvZ3JhbSBsaW5raW5nOiAke299YCk7Y29uc3Qgcz1yLmdldEF0dGFjaGVkU2hhZGVycyhlKS5tYXAoYT0+a2MocixyLmdldFNoYWRlclBhcmFtZXRlcihhLHIuU0hBREVSX1RZUEUpLGEsdCkpO3JldHVybmAke299CiR7cy5maWx0ZXIoYT0+YSkuam9pbihgCmApfWB9fWZ1bmN0aW9uIHpjKHIsZSx0LG4sbyl7cmV0dXJuIFVjKHIsZSx0LG4sbyl9ZnVuY3Rpb24geW8ocil7Y29uc3QgZT1yLm5hbWU7cmV0dXJuIGUuc3RhcnRzV2l0aCgiZ2xfIil8fGUuc3RhcnRzV2l0aCgid2ViZ2xfIil9Y29uc3QgR2M9LyhcLnxcW3xdfFx3KykvZywkYz1yPT5yPj0iMCImJnI8PSI5IjtmdW5jdGlvbiBXYyhyLGUsdCxuKXtjb25zdCBvPXIuc3BsaXQoR2MpLmZpbHRlcihhPT5hIT09IiIpO2xldCBpPTAscz0iIjtmb3IoOzspe2NvbnN0IGE9b1tpKytdO3MrPWE7Y29uc3QgdT0kYyhhWzBdKSxmPXU/cGFyc2VJbnQoYSk6YTtpZih1JiYocys9b1tpKytdKSxpPT09by5sZW5ndGgpe3RbZl09ZTticmVha31lbHNle2NvbnN0IHA9b1tpKytdLGc9cD09PSJbIixiPXRbZl18fChnP1tdOnt9KTt0W2ZdPWIsdD1iLG5bc109bltzXXx8ZnVuY3Rpb24oaCl7cmV0dXJuIGZ1bmN0aW9uKHgpe2JvKGgseCl9fShiKSxzKz1wfX19ZnVuY3Rpb24gVmMocixlKXtsZXQgdD0wO2Z1bmN0aW9uIG4oYSx1LGYpe2NvbnN0IGQ9dS5uYW1lLmVuZHNXaXRoKCJbMF0iKSxwPXUudHlwZSxnPV9bcF07aWYoIWcpdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIHR5cGU6IDB4JHtwLnRvU3RyaW5nKDE2KX1gKTtsZXQgYjtpZihnLmJpbmRQb2ludCl7Y29uc3QgaD10O3QrPXUuc2l6ZSxkP2I9Zy5hcnJheVNldHRlcihyLHAsaCxmLHUuc2l6ZSk6Yj1nLnNldHRlcihyLHAsaCxmLHUuc2l6ZSl9ZWxzZSBnLmFycmF5U2V0dGVyJiZkP2I9Zy5hcnJheVNldHRlcihyLGYpOmI9Zy5zZXR0ZXIocixmKTtyZXR1cm4gYi5sb2NhdGlvbj1mLGJ9Y29uc3Qgbz17fSxpPXt9LHM9ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsSG4pO2ZvcihsZXQgYT0wO2E8czsrK2Epe2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtKGUsYSk7aWYoeW8odSkpY29udGludWU7bGV0IGY9dS5uYW1lO2YuZW5kc1dpdGgoIlswXSIpJiYoZj1mLnN1YnN0cigwLGYubGVuZ3RoLTMpKTtjb25zdCBkPXIuZ2V0VW5pZm9ybUxvY2F0aW9uKGUsdS5uYW1lKTtpZihkKXtjb25zdCBwPW4oZSx1LGQpO29bZl09cCxXYyhmLHAsaSxvKX19cmV0dXJuIG99ZnVuY3Rpb24gSGMocixlKXtjb25zdCB0PXt9LG49ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsT3UpO2ZvcihsZXQgbz0wO288bjsrK28pe2NvbnN0IGk9ci5nZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoZSxvKTt0W2kubmFtZV09e2luZGV4Om8sdHlwZTppLnR5cGUsc2l6ZTppLnNpemV9fXJldHVybiB0fWZ1bmN0aW9uIGpjKHIsZSl7Y29uc3QgdD1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxIbiksbj1bXSxvPVtdO2ZvcihsZXQgYT0wO2E8dDsrK2Epe28ucHVzaChhKSxuLnB1c2goe30pO2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtKGUsYSk7blthXS5uYW1lPXUubmFtZX1bWyJVTklGT1JNX1RZUEUiLCJ0eXBlIl0sWyJVTklGT1JNX1NJWkUiLCJzaXplIl0sWyJVTklGT1JNX0JMT0NLX0lOREVYIiwiYmxvY2tOZHgiXSxbIlVOSUZPUk1fT0ZGU0VUIiwib2Zmc2V0Il1dLmZvckVhY2goZnVuY3Rpb24oYSl7Y29uc3QgdT1hWzBdLGY9YVsxXTtyLmdldEFjdGl2ZVVuaWZvcm1zKGUsbyxyW3VdKS5mb3JFYWNoKGZ1bmN0aW9uKGQscCl7bltwXVtmXT1kfSl9KTtjb25zdCBpPXt9LHM9ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsVXUpO2ZvcihsZXQgYT0wO2E8czsrK2Epe2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKGUsYSksZj17aW5kZXg6ci5nZXRVbmlmb3JtQmxvY2tJbmRleChlLHUpLHVzZWRCeVZlcnRleFNoYWRlcjpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEsTnUpLHVzZWRCeUZyYWdtZW50U2hhZGVyOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSxMdSksc2l6ZTpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEsenUpLHVuaWZvcm1JbmRpY2VzOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSxHdSl9O2YudXNlZD1mLnVzZWRCeVZlcnRleFNoYWRlcnx8Zi51c2VkQnlGcmFnbWVudFNoYWRlcixpW3VdPWZ9cmV0dXJue2Jsb2NrU3BlY3M6aSx1bmlmb3JtRGF0YTpufX1mdW5jdGlvbiBibyhyLGUpe2Zvcihjb25zdCB0IGluIGUpe2NvbnN0IG49clt0XTt0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uKGVbdF0pOmJvKHJbdF0sZVt0XSl9fWZ1bmN0aW9uIHhvKHIsLi4uZSl7Y29uc3QgdD1yLnVuaWZvcm1TZXR0ZXJzfHxyLG49ZS5sZW5ndGg7Zm9yKGxldCBvPTA7bzxuOysrbyl7Y29uc3QgaT1lW29dO2lmKEFycmF5LmlzQXJyYXkoaSkpe2NvbnN0IHM9aS5sZW5ndGg7Zm9yKGxldCBhPTA7YTxzOysrYSl4byh0LGlbYV0pfWVsc2UgZm9yKGNvbnN0IHMgaW4gaSl7Y29uc3QgYT10W3NdO2EmJmEoaVtzXSl9fX1mdW5jdGlvbiBZYyhyLGUpe2NvbnN0IHQ9e30sbj1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxNdSk7Zm9yKGxldCBvPTA7bzxuOysrbyl7Y29uc3QgaT1yLmdldEFjdGl2ZUF0dHJpYihlLG8pO2lmKHlvKGkpKWNvbnRpbnVlO2NvbnN0IHM9ci5nZXRBdHRyaWJMb2NhdGlvbihlLGkubmFtZSksYT1QW2kudHlwZV0sdT1hLnNldHRlcihyLHMsYSk7dS5sb2NhdGlvbj1zLHRbaS5uYW1lXT11fXJldHVybiB0fWZ1bmN0aW9uIFhjKHIsZSl7Zm9yKGNvbnN0IHQgaW4gZSl7Y29uc3Qgbj1yW3RdO24mJm4oZVt0XSl9fWZ1bmN0aW9uIFFjKHIsZSx0KXt0LnZlcnRleEFycmF5T2JqZWN0P3IuYmluZFZlcnRleEFycmF5KHQudmVydGV4QXJyYXlPYmplY3QpOihYYyhlLmF0dHJpYlNldHRlcnN8fGUsdC5hdHRyaWJzKSx0LmluZGljZXMmJnIuYmluZEJ1ZmZlcihGdSx0LmluZGljZXMpKX1mdW5jdGlvbiBfbyhyLGUpe2NvbnN0IHQ9VmMocixlKSxuPVljKHIsZSksbz17cHJvZ3JhbTplLHVuaWZvcm1TZXR0ZXJzOnQsYXR0cmliU2V0dGVyczpufTtyZXR1cm4gVmUocikmJihvLnVuaWZvcm1CbG9ja1NwZWM9amMocixlKSxvLnRyYW5zZm9ybUZlZWRiYWNrSW5mbz1IYyhyLGUpKSxvfWNvbnN0IHFjPS9cc3x7fH18Oy87ZnVuY3Rpb24gS2MocixlLHQsbixvKXtjb25zdCBpPWtyKHQsbixvKSxzPVtdO2lmKGU9ZS5tYXAoZnVuY3Rpb24oZil7aWYoIXFjLnRlc3QoZikpe2NvbnN0IGQ9Vm4oZik7aWYoZClmPWQudGV4dDtlbHNle2NvbnN0IHA9YG5vIGVsZW1lbnQgd2l0aCBpZDogJHtmfWA7aS5lcnJvckNhbGxiYWNrKHApLHMucHVzaChwKX19cmV0dXJuIGZ9KSxzLmxlbmd0aClyZXR1cm4gUGMoaSwiIik7Y29uc3QgYT1pLmNhbGxiYWNrO2EmJihpLmNhbGxiYWNrPShmLGQpPT57YShmLGY/dm9pZCAwOl9vKHIsZCkpfSk7Y29uc3QgdT16YyhyLGUsaSk7cmV0dXJuIHU/X28ocix1KTpudWxsfWNvbnN0IEpjPTQsdm89NTEyMztmdW5jdGlvbiBaYyhyLGUsdCxuLG8saSl7dD10PT09dm9pZCAwP0pjOnQ7Y29uc3Qgcz1lLmluZGljZXMsYT1lLmVsZW1lbnRUeXBlLHU9bj09PXZvaWQgMD9lLm51bUVsZW1lbnRzOm47bz1vPT09dm9pZCAwPzA6byxhfHxzP2khPT12b2lkIDA/ci5kcmF3RWxlbWVudHNJbnN0YW5jZWQodCx1LGE9PT12b2lkIDA/dm86ZS5lbGVtZW50VHlwZSxvLGkpOnIuZHJhd0VsZW1lbnRzKHQsdSxhPT09dm9pZCAwP3ZvOmUuZWxlbWVudFR5cGUsbyk6aSE9PXZvaWQgMD9yLmRyYXdBcnJheXNJbnN0YW5jZWQodCxvLHUsaSk6ci5kcmF3QXJyYXlzKHQsbyx1KX1jb25zdCBFbz0zNjE2MCxVdD0zNjE2MSxlZj0zNTUzLHRmPTUxMjEscmY9NjQwMixuZj02NDA4LG9mPTMzMTkwLHNmPTM2MDEyLGFmPTM1MDU2LHVmPTM2MDEzLGNmPTMyODU0LGZmPTMyODU1LGxmPTM2MTk0LFRvPTMzMTg5LHdvPTY0MDEsQW89MzYxNjgsRHI9MzQwNDEsQ3I9MzYwNjQsTnQ9MzYwOTYsSW89MzYxMjgsQnI9MzMzMDYsTXI9MzMwNzEsT3I9OTcyOSxkZj1be2Zvcm1hdDpuZix0eXBlOnRmLG1pbjpPcix3cmFwOk1yfSx7Zm9ybWF0OkRyfV0sWT17fTtZW0RyXT1CcixZW3dvXT1JbyxZW0FvXT1JbyxZW3JmXT1OdCxZW1RvXT1OdCxZW29mXT1OdCxZW3NmXT1OdCxZW2FmXT1CcixZW3VmXT1CcjtmdW5jdGlvbiBoZihyLGUpe3JldHVybiBZW3JdfHxZW2VdfWNvbnN0IGZlPXt9O2ZlW2NmXT0hMCxmZVtmZl09ITAsZmVbbGZdPSEwLGZlW0RyXT0hMCxmZVtUb109ITAsZmVbd29dPSEwLGZlW0FvXT0hMDtmdW5jdGlvbiBtZihyKXtyZXR1cm4gZmVbcl19Y29uc3QgcGY9MzI7ZnVuY3Rpb24gZ2Yocil7cmV0dXJuIHI+PUNyJiZyPENyK3BmfWZ1bmN0aW9uIEx0KHIsZSx0LG4pe2NvbnN0IG89RW8saT1yLmNyZWF0ZUZyYW1lYnVmZmVyKCk7ci5iaW5kRnJhbWVidWZmZXIobyxpKSx0PXR8fHIuZHJhd2luZ0J1ZmZlcldpZHRoLG49bnx8ci5kcmF3aW5nQnVmZmVySGVpZ2h0LGU9ZXx8ZGY7Y29uc3Qgcz1bXSxhPXtmcmFtZWJ1ZmZlcjppLGF0dGFjaG1lbnRzOltdLHdpZHRoOnQsaGVpZ2h0Om59O3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24odSxmKXtsZXQgZD11LmF0dGFjaG1lbnQ7Y29uc3QgcD11LnNhbXBsZXMsZz11LmZvcm1hdDtsZXQgYj11LmF0dGFjaG1lbnRQb2ludHx8aGYoZyx1LmludGVybmFsRm9ybWF0KTtpZihifHwoYj1DcitmKSxnZihiKSYmcy5wdXNoKGIpLCFkKWlmKHAhPT12b2lkIDB8fG1mKGcpKWQ9ci5jcmVhdGVSZW5kZXJidWZmZXIoKSxyLmJpbmRSZW5kZXJidWZmZXIoVXQsZCkscD4xP3IucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKFV0LHAsZyx0LG4pOnIucmVuZGVyYnVmZmVyU3RvcmFnZShVdCxnLHQsbik7ZWxzZXtjb25zdCBoPU9iamVjdC5hc3NpZ24oe30sdSk7aC53aWR0aD10LGguaGVpZ2h0PW4saC5hdXRvPT09dm9pZCAwJiYoaC5hdXRvPSExLGgubWluPWgubWlufHxoLm1pbk1hZ3x8T3IsaC5tYWc9aC5tYWd8fGgubWluTWFnfHxPcixoLndyYXBTPWgud3JhcFN8fGgud3JhcHx8TXIsaC53cmFwVD1oLndyYXBUfHxoLndyYXB8fE1yKSxkPVduKHIsaCl9aWYod3MocixkKSlyLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKG8sYixVdCxkKTtlbHNlIGlmKGRyKHIsZCkpdS5sYXllciE9PXZvaWQgMD9yLmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKG8sYixkLHUubGV2ZWx8fDAsdS5sYXllcik6ci5mcmFtZWJ1ZmZlclRleHR1cmUyRChvLGIsdS50YXJnZXR8fGVmLGQsdS5sZXZlbHx8MCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoInVua25vd24gYXR0YWNobWVudCB0eXBlIik7YS5hdHRhY2htZW50cy5wdXNoKGQpfSksci5kcmF3QnVmZmVycyYmci5kcmF3QnVmZmVycyhzKSxhfWZ1bmN0aW9uIHlmKHIsZSx0KXt0PXR8fEVvLGU/KHIuYmluZEZyYW1lYnVmZmVyKHQsZS5mcmFtZWJ1ZmZlciksci52aWV3cG9ydCgwLDAsZS53aWR0aCxlLmhlaWdodCkpOihyLmJpbmRGcmFtZWJ1ZmZlcih0LG51bGwpLHIudmlld3BvcnQoMCwwLHIuZHJhd2luZ0J1ZmZlcldpZHRoLHIuZHJhd2luZ0J1ZmZlckhlaWdodCkpfWZ1bmN0aW9uIEkocixlKXtyZXR1cm4oKT0+ZSBpbnN0YW5jZW9mIFdlYkdMVGV4dHVyZT9lOlduKHIse3NyYzplLHdyYXA6ci5DTEFNUF9UT19FREdFfSl9Y29uc3QgT2U9MjtjbGFzcyBFZXtjb25zdHJ1Y3RvcihlKXtsKHRoaXMsImlkIiwiXyIpO2wodGhpcywiY29udGV4dCIpO2wodGhpcywib3V0cHV0Iik7bCh0aGlzLCJmYmkiKTtsKHRoaXMsIm9wdGlvbnMiKTtsKHRoaXMsInByb2dyYW1JbmZvIik7bCh0aGlzLCJidWZmZXJJbmZvIik7bCh0aGlzLCJwcm9maWxlciIpO2wodGhpcywibGFzdFJ1biIpO2NvbnN0e2NvbnRleHQ6dCx3aWR0aDpuLGhlaWdodDpvfT1lO3RoaXMuY29udGV4dD10LHRoaXMub3B0aW9ucz1lO2NvbnN0IGk9dGhpcy5idWlsZERlZmluZXMoKTt0aGlzLnByb2dyYW1JbmZvPUtjKHRoaXMuY29udGV4dCxbaSt0aGlzLmdldFZlcnRleFNoYWRlcigpLGkrdGhpcy5nZXRGcmFnbWVudFNoYWRlcigpXSksdGhpcy5idWZmZXJJbmZvPVhzKHRoaXMuY29udGV4dCx0aGlzLmdldEJ1ZmZlcnMoKSksdGhpcy5mYmk9THQodGhpcy5jb250ZXh0LFt7Zm9ybWF0OnRoaXMuY29udGV4dC5SR0JBLHR5cGU6dGhpcy5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnRoaXMuY29udGV4dC5MSU5FQVIsd3JhcDp0aGlzLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLG4sbyksdGhpcy5vdXRwdXQ9dGhpcy5mYmkuYXR0YWNobWVudHNbMF19cmVzaXplT3V0cHV0KGUsdCl7dGhpcy5mYmk9THQodGhpcy5jb250ZXh0LFt7Zm9ybWF0OnRoaXMuY29udGV4dC5SR0JBLHR5cGU6dGhpcy5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnRoaXMuY29udGV4dC5MSU5FQVIsd3JhcDp0aGlzLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLGUsdCksdGhpcy5vcHRpb25zLndpZHRoPWUsdGhpcy5vcHRpb25zLmhlaWdodD10LHRoaXMub3V0cHV0PXRoaXMuZmJpLmF0dGFjaG1lbnRzWzBdfWdldERlZmluZXMoKXtyZXR1cm57fX1nZXRCdWZmZXJzKCl7cmV0dXJue3Bvc2l0aW9uOntudW1Db21wb25lbnRzOjIsZGF0YTpbLTEsLTEsLTEsMSwxLC0xLDEsMSwtMSwxLDEsLTFdfSx0ZXh0dXJlX2Nvb3JkOntudW1Db21wb25lbnRzOjIsZGF0YTpbMCwwLDAsMSwxLDAsMSwxLDAsMSwxLDBdfX19YnVpbGREZWZpbmVzKCl7bGV0IGU9IiI7Y29uc3QgdD10aGlzLmdldERlZmluZXMoKTtmb3IobGV0IG4gaW4gdCllKz1gI2RlZmluZSAke259ICR7dFtuXS50b0ZpeGVkKDEpfQpgO3JldHVybiBlfXJ1bihlKXt2YXIgbyxpLHMsYSx1LGY7KG89dGhpcy5wcm9maWxlcik9PW51bGx8fG8ucHVzaENvbnRleHQoYFske3RoaXMuaWR9XSBQUk9HIDogJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9YCksKGk9dGhpcy5wcm9maWxlcik9PW51bGx8fGkucHVzaENvbnRleHQoYFske3RoaXMuaWR9XSBVTklGT1JNU2ApO2Zvcihjb25zdCBkIGluIGUpdHlwZW9mIGVbZF09PSJmdW5jdGlvbiImJigocz10aGlzLnByb2ZpbGVyKT09bnVsbHx8cy5wdXNoQ29udGV4dChgWyR7dGhpcy5pZH1dIFVOSSA6ICR7ZH1gKSxlW2RdPWVbZF0oKSwoYT10aGlzLnByb2ZpbGVyKT09bnVsbHx8YS5wb3BDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JIDogJHtkfWApKTsodT10aGlzLnByb2ZpbGVyKT09bnVsbHx8dS5wb3BDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JRk9STVNgKTtjb25zdCB0PURhdGUubm93KCk7bGV0IG49MDt0aGlzLmxhc3RSdW4mJihuPSh0LXRoaXMubGFzdFJ1bikvMWUzKSx0aGlzLmxhc3RSdW49dCx0aGlzLmNvbnRleHQudmlld3BvcnQoMCwwLHRoaXMuY29udGV4dC5jYW52YXMud2lkdGgsdGhpcy5jb250ZXh0LmNhbnZhcy5oZWlnaHQpLHRoaXMuY29udGV4dC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbUluZm8ucHJvZ3JhbSksUWModGhpcy5jb250ZXh0LHRoaXMucHJvZ3JhbUluZm8sdGhpcy5idWZmZXJJbmZvKSx4byh0aGlzLnByb2dyYW1JbmZvLHtkZWx0YTpuLGNhbnZhczpbdGhpcy5jb250ZXh0LmNhbnZhcy53aWR0aCx0aGlzLmNvbnRleHQuY2FudmFzLmhlaWdodF0sLi4uZX0pLHlmKHRoaXMuY29udGV4dCx0aGlzLm9wdGlvbnMuZGlzYWJsZUZyYW1lYnVmZmVyP251bGw6dGhpcy5mYmkpLFpjKHRoaXMuY29udGV4dCx0aGlzLmJ1ZmZlckluZm8pLChmPXRoaXMucHJvZmlsZXIpPT1udWxsfHxmLnBvcENvbnRleHQoYFske3RoaXMuaWR9XSBQUk9HIDogJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9YCl9c2V0UHJvZmlsZXIoZSl7dGhpcy5wcm9maWxlcj1lfX12YXIgYmY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSBzYW1wbGVyMkQgYmFja2dyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgZm9yZWdyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgdGhyZXNob2xkOwoKdm9pZCBtYWluKCkgewogIHZlYzQgYmFja2dyb3VuZENvbG9yID0gdGV4dHVyZTJEKGJhY2tncm91bmQsIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IGZvcmVncm91bmRDb2xvciA9IHRleHR1cmUyRChmb3JlZ3JvdW5kLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCB0cmVzaG9sZENvbG9yID0gdGV4dHVyZTJEKHRocmVzaG9sZCwgX3RleHR1cmVfY29vcmQpOwogIGdsX0ZyYWdDb2xvciA9IGZvcmVncm91bmRDb2xvciAqIHRyZXNob2xkQ29sb3IuYSArCiAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yICogKDEuIC0gdHJlc2hvbGRDb2xvci5hKTsKfQpgLHhmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwogIF90ZXh0dXJlX2Nvb3JkLnkgPSAxLiAtIHRleHR1cmVfY29vcmQueTsKfQpgO2NsYXNzIFVyIGV4dGVuZHMgRWV7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gYmZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIHhmfX1jbGFzcyBOcntjb25zdHJ1Y3Rvcigpe2wodGhpcywic3RlcHMiLFtdKTtsKHRoaXMsInByb2ZpbGVyIil9YWRkU3RlcChlKXt0aGlzLnN0ZXBzLnB1c2goZSl9YXN5bmMgcnVuKCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5zdGVwcyllLnByb2dyYW0ucnVuKGUuZ2V0VW5pZm9ybXMoKSl9cmVzaXplT3V0cHV0KGUsdCl7dmFyIG4sbzsobj10aGlzLnByb2ZpbGVyKT09bnVsbHx8bi5wdXNoQ29udGV4dChgUElQIFske3RoaXMuY29uc3RydWN0b3IubmFtZX1dYCk7Zm9yKGNvbnN0IGkgb2YgdGhpcy5zdGVwcylpLnByZXZlbnRSZXNpemV8fGkucHJvZ3JhbS5yZXNpemVPdXRwdXQoZSx0KTsobz10aGlzLnByb2ZpbGVyKT09bnVsbHx8by5wb3BDb250ZXh0KGBQSVAgWyR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfV1gKX1zZXRQcm9maWxlcihlKXt0aGlzLnByb2ZpbGVyPWU7Zm9yKGNvbnN0IHQgb2YgdGhpcy5zdGVwcyl0LnByb2dyYW0uc2V0UHJvZmlsZXIoZSl9c2V0SWQoZSl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5zdGVwcyl0LnByb2dyYW0uaWQ9ZX19Y2xhc3MgTHIgZXh0ZW5kcyBOcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7bCh0aGlzLCJwcmVjaXNlTWFza0VuYWJsZWQiLCExKX19Y2xhc3MgU28gZXh0ZW5kcyBMcntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpO2wodGhpcywiaW5wdXRJbWFnZSIpO2wodGhpcywiaW5wdXRCYWNrZ3JvdW5kSW1hZ2UiKTtsKHRoaXMsImlucHV0TWFzayIpO2wodGhpcywicHJlY2lzZU1hc2tFbmFibGVkIiwhMCk7dGhpcy5jb250ZXh0PXQ7Y29uc3Qgbj17Y29udGV4dDp0LGhlaWdodDp0LmNhbnZhcy5oZWlnaHQsd2lkdGg6dC5jYW52YXMud2lkdGh9LG89bmV3IFVyKHsuLi5uLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTpvLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6SSh0LHRoaXMuaW5wdXRCYWNrZ3JvdW5kSW1hZ2UpLGZvcmVncm91bmQ6SSh0LHRoaXMuaW5wdXRJbWFnZSksdGhyZXNob2xkOkkodCx0aGlzLmlucHV0TWFzayl9KX0pfXNldERhdGEodCxuKXt0aGlzLmlucHV0SW1hZ2U9dCx0aGlzLmlucHV0TWFzaz1ufX12YXIgX2Y9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQpOyB9CmAsdmY9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwp1bmlmb3JtIGJvb2wgaW52ZXJ0X3k7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKICBpZiAoaW52ZXJ0X3kpIHsKICAgIF90ZXh0dXJlX2Nvb3JkLnkgPSAxLiAtIHRleHR1cmVfY29vcmQueTsKICB9Cn0KYDtjbGFzcyBFZiBleHRlbmRzIEVle2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIF9mfWdldFZlcnRleFNoYWRlcigpe3JldHVybiB2Zn19Y2xhc3MgVGYgZXh0ZW5kcyBOcntjb25zdHJ1Y3Rvcih0LG4sbyl7c3VwZXIoKTtsKHRoaXMsImlucHV0SW1hZ2UiKTt0aGlzLmNvbnRleHQ9dDtjb25zdCBpPXtjb250ZXh0OnQsaGVpZ2h0Om8sd2lkdGg6bn07dGhpcy5hZGRTdGVwKHtwcm9ncmFtOm5ldyBFZih7Li4uaSxkaXNhYmxlRnJhbWVidWZmZXI6ITB9KSxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOkkodCx0aGlzLmlucHV0SW1hZ2UpLGludmVydF95OiEwfSl9KX1zZXREYXRhKHQpe3RoaXMuaW5wdXRJbWFnZT10fX1hc3luYyBmdW5jdGlvbiBSbyhyKXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3NldFRpbWVvdXQoKCk9PntlKCl9LHIpfSl9dmFyIHdmPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gdmVjMiBjYW52YXM7CnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7Cgp2ZWM0IGxvb3AoKTsKCnZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gbG9vcCgpOyB9CmAsQWY9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYCx6cj0ocj0+KHJbci5MSU5FQVI9MF09IkxJTkVBUiIscltyLkdBVVNTSUFOPTFdPSJHQVVTU0lBTiIscikpKHpyfHx7fSk7Y2xhc3MgRm8gZXh0ZW5kcyBFZXtnZXREZWZpbmVzKCl7dmFyIGU7cmV0dXJue1JBRElVUzooZT10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD9lOjF9fWdldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIHdmK3RoaXMuY3JlYXRlTG9vcEZ1bmN0aW9uKCl9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIEFmfWNyZWF0ZUxvb3BGdW5jdGlvbigpe3ZhciB0O2xldCBlPSh0PXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP3Q6MTtyZXR1cm5gCgogICAgICAgIHZlYzQgbG9vcCgpIHsgCiAgICAgICAgICAgIHZlYzQgcmVzdWx0ID0gdmVjNCgwLDAsMCwwKTsKICAgICAgICAgICAgZmxvYXQgZmFjdG9yU3VtID0gMC47CgogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRSYWRpdXMgPSB2ZWMyKC0ke2V9LikgLyBjYW52YXM7CiAgICAgICAgICAgIHZlYzIgbm9ybWFsaXplZEluY3JlbWVudCA9IHZlYzIoMS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIGRpZmYgPSBub3JtYWxpemVkUmFkaXVzOwoKICAgICAgICAgICAgZm9yKGludCB5PS0ke2V9OyB5PCR7ZSsxfTsgKyt5KSB7CiAgICAgICAgICAgICAgICBmb3IoaW50IHg9LSR7ZX07IHg8JHtlKzF9OyArK3gpIHsKICAgICAgICAgICAgICAgICAgICBmbG9hdCBmYWN0b3IgPSAxLjsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gZmFjdG9yICogdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkICsgZGlmZik7CiAgICAgICAgICAgICAgICAgICAgZmFjdG9yU3VtICs9IGZhY3RvcjsKICAgICAgICAgICAgICAgICAgICBkaWZmLnggKz0gbm9ybWFsaXplZEluY3JlbWVudC54OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZGlmZi55ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueTsKICAgICAgICAgICAgICAgIGRpZmYueCA9IG5vcm1hbGl6ZWRSYWRpdXMueDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVzdWx0IC8gZmFjdG9yU3VtOwogICAgICAgIH1gfWdldEZhY3RvcihlLHQpe3N3aXRjaCh0aGlzLm9wdGlvbnMudHlwZSl7Y2FzZSAxOnJldHVybiB0aGlzLmdldExpbmVhckZhY3RvcihlLHQpO2Nhc2UgMDpkZWZhdWx0OnJldHVybiB0aGlzLmdldExpbmVhckZhY3RvcihlLHQpfX1nZXRMaW5lYXJGYWN0b3IoZSx0KXtyZXR1cm4gMX1nZXRHYXVzc2lhbkZhY3RvcihlLHQpe3ZhciB1O2NvbnN0IG49TWF0aC5QSSoyLG89TWF0aC5tYXgoKHU9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/dToxLDEpLGk9MS8obipvKioyKSxzPS0oZSoqMit0KioyKSxhPWkqcztyZXR1cm4gaSpNYXRoLkUqKmF9fWNsYXNzIEdyIGV4dGVuZHMgRWV7Y29uc3RydWN0b3IodCl7c3VwZXIodCk7bCh0aGlzLCJmYmkyIik7dGhpcy5mYmkyPUx0KHQuY29udGV4dCxbe2Zvcm1hdDp0LmNvbnRleHQuUkdCQSx0eXBlOnQuY29udGV4dC5VTlNJR05FRF9CWVRFLG1pbjp0LmNvbnRleHQuTElORUFSLG1hZzp0LmNvbnRleHQuTElORUFSLHdyYXA6dC5jb250ZXh0LkNMQU1QX1RPX0VER0V9XSx0LndpZHRoLHQuaGVpZ2h0KX1ydW4odCl7Y29uc3Qgbj10aGlzLmZiaTt0aGlzLmZiaT10aGlzLmZiaTIsdGhpcy5mYmkyPW4sdGhpcy5vdXRwdXQ9dGhpcy5mYmkuYXR0YWNobWVudHNbMF0sc3VwZXIucnVuKHsuLi50LHByZXZpb3VzX3JlbmRlcmluZzp0aGlzLmZiaTIuYXR0YWNobWVudHNbMF19KX1yZXNpemVPdXRwdXQodCxuKXtzdXBlci5yZXNpemVPdXRwdXQodCxuKSx0aGlzLmZiaTI9THQodGhpcy5jb250ZXh0LFt7Zm9ybWF0OnRoaXMuY29udGV4dC5SR0JBLHR5cGU6dGhpcy5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnRoaXMuY29udGV4dC5MSU5FQVIsd3JhcDp0aGlzLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLHQsbil9fXZhciBJZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgovLyB1bmlmb3JtIGZsb2F0IHRyZXNob2xkOwp1bmlmb3JtIHNhbXBsZXIyRCBpbWFnZV9ub3c7CnVuaWZvcm0gc2FtcGxlcjJEIGltYWdlX2JlZm9yZTsKdW5pZm9ybSBzYW1wbGVyMkQgbWFza19ub3c7CnVuaWZvcm0gc2FtcGxlcjJEIG1hc2tfYmVmb3JlOwp1bmlmb3JtIHNhbXBsZXIyRCBwcmV2aW91c19yZW5kZXJpbmc7CnVuaWZvcm0gdmVjMiBjYW52YXM7Cgp1bmlmb3JtIGZsb2F0IGRlbHRhOwoKZmxvYXQgY3VycmVudF9mYWN0b3IgPSAwLjY5OwpmbG9hdCBwcmV2aW91c19mYWN0b3IgPSAwLjc0OwpmbG9hdCB0aHJlc2hvbGRfYWN0aXZhdGlvbiA9IDAuNTQ7CgpmbG9hdCBtYXAoZmxvYXQgdmFsdWUsIGZsb2F0IG1pbjEsIGZsb2F0IG1heDEsIGZsb2F0IG1pbjIsIGZsb2F0IG1heDIpIHsKICByZXR1cm4gbWluMiArICh2YWx1ZSAtIG1pbjEpICogKG1heDIgLSBtaW4yKSAvIChtYXgxIC0gbWluMSk7Cn0KCmZsb2F0IGdldFRocmVzaG9sZCgpIHsKICB2ZWM0IGNvbG9yID0gdmVjNCgwLik7CiAgZm9yIChmbG9hdCB5ID0gLTYuOyB5IDwgNy47IHkgKz0gMS4pIHsKICAgIGZvciAoZmxvYXQgeCA9IC02LjsgeCA8IDcuOyB4ICs9IDEuKSB7CiAgICAgIHZlYzQgaW1hZ2Vfbm93X2NvbG9yID0KICAgICAgICAgIHRleHR1cmUyRChpbWFnZV9ub3csIF90ZXh0dXJlX2Nvb3JkICsgdmVjMih4LCB5KSAvIGNhbnZhcyk7CiAgICAgIHZlYzQgaW1hZ2VfYmVmb3JlX2NvbG9yID0KICAgICAgICAgIHRleHR1cmUyRChpbWFnZV9iZWZvcmUsIF90ZXh0dXJlX2Nvb3JkICsgdmVjMih4LCB5KSAvIGNhbnZhcyk7CiAgICAgIGNvbG9yICs9IGFicyhpbWFnZV9iZWZvcmVfY29sb3IgLSBpbWFnZV9ub3dfY29sb3IpOwogICAgfQogIH0KICByZXR1cm4gKGNvbG9yLnggKyBjb2xvci55ICsgY29sb3IueikgLyAoMy4gKiA5Lik7Cn0KCnZvaWQgbWFpbigpIHsKICBmbG9hdCB0cmVzaG9sZF9pbnB1dCA9IC40OwogIGZsb2F0IHRyZXNob2xkX3ByZXZpb3VzX3JlbmRlcmluZyA9IC45ODsKCiAgdmVjNCBtYXNrX25vd19jb2xvciA9IHRleHR1cmUyRChtYXNrX25vdywgX3RleHR1cmVfY29vcmQpOwogIHZlYzQgbWFza19iZWZvcmVfY29sb3IgPSB0ZXh0dXJlMkQobWFza19iZWZvcmUsIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IHByZXZpb3VzX3JlbmRlcmluZ19jb2xvciA9IHRleHR1cmUyRChwcmV2aW91c19yZW5kZXJpbmcsIF90ZXh0dXJlX2Nvb3JkKTsKCiAgdmVjMyBtYXNrX2RpZmYgPSBhYnMobWFza19iZWZvcmVfY29sb3IueHl6IC0gbWFza19ub3dfY29sb3IueHl6KTsKICBmbG9hdCBmbGlja2VyaW5nID0gbWFza19kaWZmLng7CiAgZmxvYXQgdGhyZXNob2xkID0gZ2V0VGhyZXNob2xkKCk7CiAgaWYgKHRocmVzaG9sZCA8IHRocmVzaG9sZF9hY3RpdmF0aW9uKSB7CiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGZsaWNrZXJpbmcsIDAuLCAwLiwgMS4pICogY3VycmVudF9mYWN0b3IgKwogICAgICAgICAgICAgICAgICAgcHJldmlvdXNfcmVuZGVyaW5nX2NvbG9yICogcHJldmlvdXNfZmFjdG9yOwogICAgZ2xfRnJhZ0NvbG9yICo9ICgxLiAtIHRocmVzaG9sZCk7CiAgfQp9CmAsU2Y9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYDtjbGFzcyBSZiBleHRlbmRzIEdye2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIElmfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBTZn19dmFyIEZmPWAjdmVyc2lvbiAzMDAgZXMKLy8gaHR0cHM6Ly9naXRodWIuY29tL1ZvbGNvbWl4L3ZpcnR1YWwtYmFja2dyb3VuZC9ibG9iL21haW4vc3JjL3BpcGVsaW5lcy93ZWJnbDIvam9pbnRCaWxhdGVyYWxGaWx0ZXJTdGFnZS50cwoKcHJlY2lzaW9uIGhpZ2hwIGZsb2F0Owp1bmlmb3JtIHNhbXBsZXIyRCBpbnB1dF9mcmFtZTsKdW5pZm9ybSBzYW1wbGVyMkQgc2VnbWVudGF0aW9uX21hc2s7CnVuaWZvcm0gc2FtcGxlcjJEIHRocmVzaG9sZDsKdW5pZm9ybSB2ZWMyIHRleGVsX3NpemU7CnVuaWZvcm0gZmxvYXQgc3RlcDsKdW5pZm9ybSBmbG9hdCByYWRpdXM7CnVuaWZvcm0gZmxvYXQgb2Zmc2V0Owp1bmlmb3JtIGZsb2F0IHNpZ21hX3RleGVsOwp1bmlmb3JtIGZsb2F0IHNpZ21hX2NvbG9yOwoKaW4gdmVjMiBfdGV4dHVyZV9jb29yZDsKb3V0IHZlYzQgb3V0Q29sb3I7CgpmbG9hdCBnYXVzc2lhbihmbG9hdCB4LCBmbG9hdCBzaWdtYSkgewogIGZsb2F0IGNvZWZmID0gLTAuNSAvIChzaWdtYSAqIHNpZ21hICogNC4wICsgMS4wZS02KTsKICByZXR1cm4gZXhwKCh4ICogeCkgKiBjb2VmZik7Cn0KCnZvaWQgbWFpbigpIHsKICB2ZWMyIGNlbnRlckNvb3JkID0gX3RleHR1cmVfY29vcmQ7CiAgdmVjMyBjZW50ZXJDb2xvciA9IHRleHR1cmUoaW5wdXRfZnJhbWUsIGNlbnRlckNvb3JkKS5yZ2I7CiAgZmxvYXQgbmV3VmFsID0gMC4wOwogIGZsb2F0IHNwYWNlV2VpZ2h0ID0gMC4wOwogIGZsb2F0IGNvbG9yV2VpZ2h0ID0gMC4wOwogIGZsb2F0IHRvdGFsV2VpZ2h0ID0gMC4wOwogIC8vIFN1YnNhbXBsZSBrZXJuZWwgc3BhY2UuCiAgZm9yIChmbG9hdCBpID0gLXJhZGl1cyArIG9mZnNldDsgaSA8PSByYWRpdXM7IGkgKz0gc3RlcCkgewogICAgZm9yIChmbG9hdCBqID0gLXJhZGl1cyArIG9mZnNldDsgaiA8PSByYWRpdXM7IGogKz0gc3RlcCkgewogICAgICB2ZWMyIHNoaWZ0ID0gdmVjMihqLCBpKSAqIHRleGVsX3NpemU7CiAgICAgIHZlYzIgY29vcmQgPSB2ZWMyKGNlbnRlckNvb3JkICsgc2hpZnQpOwogICAgICB2ZWMzIGZyYW1lQ29sb3IgPSB0ZXh0dXJlKGlucHV0X2ZyYW1lLCBjb29yZCkucmdiOwogICAgICBmbG9hdCB0aHJlc2hvbGQgPSB0ZXh0dXJlKHRocmVzaG9sZCwgY29vcmQpLmE7CiAgICAgIGZsb2F0IG91dFZhbCA9IHRleHR1cmUoc2VnbWVudGF0aW9uX21hc2ssIGNvb3JkKS5hOwoKICAgICAgc3BhY2VXZWlnaHQgPSBnYXVzc2lhbihkaXN0YW5jZShjZW50ZXJDb29yZCwgY29vcmQpLCBzaWdtYV90ZXhlbCk7CiAgICAgIGNvbG9yV2VpZ2h0ID0gZ2F1c3NpYW4oZGlzdGFuY2UoY2VudGVyQ29sb3IsIGZyYW1lQ29sb3IpLCBzaWdtYV9jb2xvcik7CiAgICAgIHRvdGFsV2VpZ2h0ICs9IHNwYWNlV2VpZ2h0ICogY29sb3JXZWlnaHQ7CiAgICAgIG5ld1ZhbCArPSBzcGFjZVdlaWdodCAqIGNvbG9yV2VpZ2h0ICogb3V0VmFsICogdGhyZXNob2xkOwogICAgfQogIH0KICBuZXdWYWwgLz0gdG90YWxXZWlnaHQ7CiAgb3V0Q29sb3IgPSB2ZWM0KHZlYzMoMC4pLCBuZXdWYWwpOwp9YCxQZj1gI3ZlcnNpb24gMzAwIGVzCmluIHZlYzIgcG9zaXRpb247CmluIHZlYzIgdGV4dHVyZV9jb29yZDsKb3V0IHZlYzIgX3RleHR1cmVfY29vcmQ7CnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn1gO2NsYXNzIGtmIGV4dGVuZHMgRWV7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gRmZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIFBmfX12YXIgRGY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSB2ZWMyIGNhbnZhczsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKCnZvaWQgbWFpbigpIHsKICBpbnQgY291bnQgPSAwOwogIGZvciAoZmxvYXQgeSA9IC0xLjsgeSA8IDIuOyB5ICs9IDEuKSB7CiAgICBmb3IgKGZsb2F0IHggPSAtMS47IHggPCAyLjsgeCArPSAxLikgewogICAgICB2ZWMyIGNvb3JkID0gX3RleHR1cmVfY29vcmQgKyB2ZWMyKHksIHgpIC8gY2FudmFzOwogICAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmUsIGNvb3JkKTsKICAgICAgaWYgKGNvbG9yLnIgPiAuMSkgewogICAgICAgIGNvdW50Kys7CiAgICAgIH0KICAgIH0KICB9CiAgaWYgKGNvdW50ID4gNSkgewogICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkKTsKICB9Cn0KYCxDZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIEJmIGV4dGVuZHMgRWV7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gRGZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIENmfX12YXIgTWY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSB2ZWMyIGNhbnZhczsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKCnZvaWQgbWFpbigpIHsKICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkKTsKICBmb3IgKGZsb2F0IHkgPSAtMi47IHkgPCAzLjsgeSArPSAxLikgewogICAgZm9yIChmbG9hdCB4ID0gLTIuOyB4IDwgMy47IHggKz0gMS4pIHsKICAgICAgdmVjMiBjb29yZCA9IF90ZXh0dXJlX2Nvb3JkOwogICAgICBjb29yZCArPSB2ZWMyKHksIHgpIC8gY2FudmFzOwogICAgICBjb2xvciArPSB0ZXh0dXJlMkQodGV4dHVyZSwgY29vcmQpICogKDEuIC8gNC4pOwogICAgfQogIH0KCiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7Cn0KYCxPZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIFVmIGV4dGVuZHMgR3J7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gTWZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIE9mfX12YXIgTmY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSBzYW1wbGVyMkQgdGhyZXNob2xkOwp1bmlmb3JtIHNhbXBsZXIyRCBpbnB1dHM7Cgp2b2lkIG1haW4oKSB7CiAgdmVjNCBpbnB1dHNfY29sb3IgPSB0ZXh0dXJlMkQoaW5wdXRzLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCB0aHJlc2hvbGRfY29sb3IgPSB0ZXh0dXJlMkQodGhyZXNob2xkLCBfdGV4dHVyZV9jb29yZCk7CiAgaWYgKHRocmVzaG9sZF9jb2xvci5yIDwgLjEgJiYgaW5wdXRzX2NvbG9yLnIgPiAuNSkgewogICAgZ2xfRnJhZ0NvbG9yID0gaW5wdXRzX2NvbG9yOwogIH0KfQpgLExmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgemYgZXh0ZW5kcyBHcntnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBOZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gTGZ9fWNsYXNzIEdmIGV4dGVuZHMgTnJ7Y29uc3RydWN0b3IodCxuLG8pe3N1cGVyKCk7bCh0aGlzLCJpbnB1dEltYWdlIik7bCh0aGlzLCJpbnB1dE1hc2siKTtsKHRoaXMsInByZXZpb3VzSW5wdXRJbWFnZSIpO2wodGhpcywicHJldmlvdXNJbnB1dE1hc2siKTtsKHRoaXMsIm91dHB1dCIpO2wodGhpcywib3B0aW9ucyIse2N1cnJlbnRUaHJlc2hvbGRNaW5pbXVtOjAsY3VycmVudFRocmVzaG9sZE1heGltdW06MSxwcmV2aW91c1RocmVzaG9sZE1pbmltdW06MCxwcmV2aW91c1RocmVzaG9sZE1heGltdW06MSx0aHJlc2hvbGRNaW5pbXVtOjAsdGhyZXNob2xkTWF4aW11bToxLHRocmVzaG9sZEZhY3RvcjoxfSk7bCh0aGlzLCJqb2ludEJpbGF0ZXJhbCIpO3RoaXMuY29udGV4dD10O2NvbnN0IGk9e2NvbnRleHQ6dCxoZWlnaHQ6byx3aWR0aDpufSxzPW5ldyBSZihpKSxhPW5ldyBGbyh7Li4uaSxyYWRpdXM6MSx0eXBlOnpyLkdBVVNTSUFOfSksdT1uZXcgemYoaSksZj1uZXcgVWYoaSksZD1uZXcgQmYoaSk7dGhpcy5qb2ludEJpbGF0ZXJhbD1uZXcga2YoaSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOnMsZ2V0VW5pZm9ybXM6KCk9Pih7aW1hZ2Vfbm93OkkodCx0aGlzLmlucHV0SW1hZ2UpLGltYWdlX2JlZm9yZTpJKHQsdGhpcy5wcmV2aW91c0lucHV0SW1hZ2UpLG1hc2tfbm93OkkodCx0aGlzLmlucHV0TWFzayksbWFza19iZWZvcmU6SSh0LHRoaXMucHJldmlvdXNJbnB1dE1hc2spLGN1cnJlbnRfdGhyZXNob2xkX21pbmltdW06dGhpcy5vcHRpb25zLmN1cnJlbnRUaHJlc2hvbGRNaW5pbXVtLGN1cnJlbnRfdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLmN1cnJlbnRUaHJlc2hvbGRNYXhpbXVtLHByZXZpb3VzX3RocmVzaG9sZF9taW5pbXVtOnRoaXMub3B0aW9ucy5wcmV2aW91c1RocmVzaG9sZE1pbmltdW0scHJldmlvdXNfdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLnByZXZpb3VzVGhyZXNob2xkTWF4aW11bSx0aHJlc2hvbGRfbWluaW11bTp0aGlzLm9wdGlvbnMudGhyZXNob2xkTWluaW11bSx0aHJlc2hvbGRfbWF4aW11bTp0aGlzLm9wdGlvbnMudGhyZXNob2xkTWF4aW11bSx0aHJlc2hvbGRfZmFjdG9yOnRoaXMub3B0aW9ucy50aHJlc2hvbGRGYWN0b3J9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTp1LGdldFVuaWZvcm1zOigpPT4oe2lucHV0czpJKHQsdGhpcy5pbnB1dE1hc2spLHRocmVzaG9sZDpJKHQscy5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06ZCxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOkkodCx1Lm91dHB1dCl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpmLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6SSh0LGQub3V0cHV0KX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmEsZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpJKHQsZi5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06dGhpcy5qb2ludEJpbGF0ZXJhbCxnZXRVbmlmb3JtczooKT0+e3ZhciBHLHosSCwkLEtlLFRlLGxlLFc7Y29uc3QgZz0oej0oRz10aGlzLmlucHV0SW1hZ2UpPT1udWxsP3ZvaWQgMDpHLndpZHRoKSE9bnVsbD96OjEsYj0oJD0oSD10aGlzLmlucHV0SW1hZ2UpPT1udWxsP3ZvaWQgMDpILmhlaWdodCkhPW51bGw/JDoxLGg9KFRlPShLZT10aGlzLmlucHV0TWFzayk9PW51bGw/dm9pZCAwOktlLndpZHRoKSE9bnVsbD9UZToxLHg9KFc9KGxlPXRoaXMuaW5wdXRNYXNrKT09bnVsbD92b2lkIDA6bGUuaGVpZ2h0KSE9bnVsbD9XOjEsRT1NYXRoLm1heChnL2gsYi94KSx2PU1hdGgubWF4KDEsTWF0aC5zcXJ0KEUpKi42NiksRj0xL2csaz0xL2I7cmV0dXJue2lucHV0X2ZyYW1lOkkodCx0aGlzLmlucHV0SW1hZ2UpLHNlZ21lbnRhdGlvbl9tYXNrOkkodCx0aGlzLmlucHV0TWFzayksdGhyZXNob2xkOkkodCxhLm91dHB1dCksdGV4ZWxfc2l6ZTpbRixrXSxzdGVwOnYscmFkaXVzOkUsb2Zmc2V0OnY+MT92Ki41OjAsc2lnbWFfdGV4ZWw6TWF0aC5tYXgoRixrKSpFLHNpZ21hX2NvbG9yOi4xfX19KSx0aGlzLm91dHB1dD10aGlzLmpvaW50QmlsYXRlcmFsLm91dHB1dH1zZXREYXRhKHQsbil7dGhpcy5wcmV2aW91c0lucHV0SW1hZ2U9dGhpcy5pbnB1dEltYWdlP3RoaXMuaW5wdXRJbWFnZTp0LHRoaXMucHJldmlvdXNJbnB1dE1hc2s9dGhpcy5pbnB1dE1hc2s/dGhpcy5pbnB1dE1hc2s6bix0aGlzLmlucHV0SW1hZ2U9dCx0aGlzLmlucHV0TWFzaz1ufXNldE9wdGlvbnModCl7dGhpcy5vcHRpb25zPXR9cmVzaXplT3V0cHV0KHQsbil7c3VwZXIucmVzaXplT3V0cHV0KHQsbiksdGhpcy5vdXRwdXQ9dGhpcy5qb2ludEJpbGF0ZXJhbC5vdXRwdXR9fWNsYXNzICRme2NvbnN0cnVjdG9yKGUpe2wodGhpcywiY29udGV4dCIpO2wodGhpcywiZXh0ZW5zaW9uIik7bCh0aGlzLCJxdWVyaWVzIixbXSk7bCh0aGlzLCJhY3RpdmVRdWVyeSIpO3RoaXMuY29udGV4dD1lLHRoaXMuZXh0ZW5zaW9uPWUuZ2V0RXh0ZW5zaW9uKCJFWFRfZGlzam9pbnRfdGltZXJfcXVlcnlfd2ViZ2wyIil9c3RhcnQoKXt9c3RvcCgpe3RoaXMuYWN0aXZlUXVlcnkmJnRoaXMuY29udGV4dC5lbmRRdWVyeSh0aGlzLmV4dGVuc2lvbi5USU1FX0VMQVBTRURfRVhUKX1wdXNoQ29udGV4dChlKXt0aGlzLmNyZWF0ZVF1ZXJ5KCJQVVNIIixlKX1wb3BDb250ZXh0KGUpe3RoaXMuY3JlYXRlUXVlcnkoIlBPUCIsZSl9Y3JlYXRlUXVlcnkoZSx0KXt0aGlzLmFjdGl2ZVF1ZXJ5JiZ0aGlzLmNvbnRleHQuZW5kUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCksdGhpcy5hY3RpdmVRdWVyeT10aGlzLmNvbnRleHQuY3JlYXRlUXVlcnkoKSx0aGlzLmNvbnRleHQuYmVnaW5RdWVyeSh0aGlzLmV4dGVuc2lvbi5USU1FX0VMQVBTRURfRVhULHRoaXMuYWN0aXZlUXVlcnkpLHRoaXMucXVlcmllcy5wdXNoKHtuYW1lOnQsYWN0aW9uOmUscXVlcnk6dGhpcy5hY3RpdmVRdWVyeX0pfWFzeW5jIGdldFJlc29sdmVkUXVlcmllcygpe2NvbnN0IGU9KGF3YWl0IFByb21pc2UuYWxsKFsuLi50aGlzLnF1ZXJpZXNdLm1hcCh0PT50aGlzLnJlc29sdmVRdWVyeSh0KSkpKS5maWx0ZXIodD0+dCk7Zm9yKGxldCB0PTE7dDxlLmxlbmd0aDsrK3QpZVt0XS50aW1lc3RhbXArPWVbdC0xXS5kdXJhdGlvbitlW3QtMV0udGltZXN0YW1wO3JldHVybiBlfWFzeW5jIHJlc29sdmVRdWVyeShlKXtpZighYXdhaXQgdGhpcy5hd2FpdFF1ZXJ5QXZhaWxhYmxlKGUpKXtjb25zb2xlLmxvZygiVW5hd2FpdGFibGUgcXVlcnkiLGUpO3JldHVybn1pZih0aGlzLmNvbnRleHQuZ2V0UGFyYW1ldGVyKHRoaXMuZXh0ZW5zaW9uLkdQVV9ESVNKT0lOVF9FWFQpKXtjb25zb2xlLmxvZygiRGlzam9pbnRlZCBxdWVyeSIsZSk7cmV0dXJufXJldHVybnsuLi5lLGR1cmF0aW9uOnRoaXMuY29udGV4dC5nZXRRdWVyeVBhcmFtZXRlcihlLnF1ZXJ5LHRoaXMuY29udGV4dC5RVUVSWV9SRVNVTFQpLHRpbWVzdGFtcDowfX1hc3luYyBhd2FpdFF1ZXJ5QXZhaWxhYmxlKGUpe2ZvcihsZXQgdD0wO3Q8MTA7Kyt0KXtpZih0aGlzLmNvbnRleHQuZ2V0UXVlcnlQYXJhbWV0ZXIoZS5xdWVyeSx0aGlzLmNvbnRleHQuUVVFUllfUkVTVUxUX0FWQUlMQUJMRSkpcmV0dXJuIGU7YXdhaXQgUm8oMjAwKX19fWNsYXNzIHp0e2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJjYW52YXMiKTtsKHRoaXMsImNvbnRleHQiKTtsKHRoaXMsInBpcGVsaW5lIik7bCh0aGlzLCJwcmV2aW91c0ltYWdlV2lkdGgiLDApO2wodGhpcywicHJldmlvdXNJbWFnZUhlaWdodCIsMCk7bCh0aGlzLCJwcmV2aW91c01hc2tXaWR0aCIsT2UpO2wodGhpcywicHJldmlvdXNNYXNrSGVpZ2h0IixPZSk7bCh0aGlzLCJwcm9maWxlciIpO2wodGhpcywicG9zdFByb2Nlc3NpbmdFbmFibGVkIiwhMCk7bCh0aGlzLCJpbXByb3ZlTWFzayIpO2NvbnN0IGU9bmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLHQ9ZS5nZXRDb250ZXh0KCJ3ZWJnbDIiKTtpZighdCl0aHJvdyJGYWlsIHRvIHJldHJpZXZlIHdlYmdsMiBjb250ZXh0Ijt0aGlzLmNhbnZhcz1lLHRoaXMuY29udGV4dD10LHRoaXMuaW1wcm92ZU1hc2s9bmV3IEdmKHRoaXMuY29udGV4dCxPZSxPZSl9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dGhpcy5pbXByb3ZlTWFzay5zZXRPcHRpb25zKGUpfWVuYWJsZVBvc3RQcm9jZXNzaW5nKCl7dGhpcy5wb3N0UHJvY2Vzc2luZ0VuYWJsZWQ9ITB9ZGlzYWJsZVBvc3RQcm9jZXNzaW5nKCl7dGhpcy5wb3N0UHJvY2Vzc2luZ0VuYWJsZWQ9ITF9YXN5bmMgcHJvZmlsZVdlYmdsKGUpe2NvbnN0IHQ9bmV3ICRmKHRoaXMuY29udGV4dCk7cmV0dXJuIHRoaXMucHJvZmlsZXI9dCx0LnN0YXJ0KCksYXdhaXQgUm8oZSksdGhpcy5wcm9maWxlcj12b2lkIDAsdC5zdG9wKCksdC5nZXRSZXNvbHZlZFF1ZXJpZXMoKX1hc3luYyByZW5kZXIoZSx0KXt2YXIgaSxzO2lmKCF0aGlzLnBpcGVsaW5lKXRocm93Im1pc3NpbmcgcGlwZWxpbmUiOyh0aGlzLnByZXZpb3VzSW1hZ2VIZWlnaHQhPT1lLmhlaWdodHx8dGhpcy5wcmV2aW91c0ltYWdlV2lkdGghPT1lLndpZHRoKSYmdGhpcy5yZXNpemVPdXRwdXQoZS53aWR0aCxlLmhlaWdodCksKHRoaXMucHJldmlvdXNNYXNrSGVpZ2h0IT09dC5oZWlnaHR8fHRoaXMucHJldmlvdXNNYXNrV2lkdGghPT10LndpZHRoKSYmKHRoaXMuaW1wcm92ZU1hc2sucmVzaXplT3V0cHV0KHQud2lkdGgsdC5oZWlnaHQpLHRoaXMucHJldmlvdXNNYXNrV2lkdGg9dC53aWR0aCx0aGlzLnByZXZpb3VzTWFza0hlaWdodD10LmhlaWdodCk7Y29uc3Qgbj0icmVuZGVyZXIiOyhpPXRoaXMucHJvZmlsZXIpPT1udWxsfHxpLnB1c2hDb250ZXh0KG4pLHRoaXMuaW1wcm92ZU1hc2suc2V0UHJvZmlsZXIodGhpcy5wcm9maWxlciksdGhpcy5waXBlbGluZS5zZXRQcm9maWxlcih0aGlzLnByb2ZpbGVyKTtsZXQgbz10O3JldHVybiB0aGlzLnBvc3RQcm9jZXNzaW5nRW5hYmxlZCYmKHRoaXMuaW1wcm92ZU1hc2suc2V0RGF0YShlLHQpLHRoaXMuaW1wcm92ZU1hc2sucnVuKCksbz10aGlzLmltcHJvdmVNYXNrLm91dHB1dCksdGhpcy5waXBlbGluZS5zZXREYXRhKGUsbyksYXdhaXQgdGhpcy5waXBlbGluZS5ydW4oKSwocz10aGlzLnByb2ZpbGVyKT09bnVsbHx8cy5wb3BDb250ZXh0KG4pLHRoaXMuY2FudmFzfXJlc2l6ZU91dHB1dChlLHQpe3ZhciBuO3RoaXMuY2FudmFzLndpZHRoPWUsdGhpcy5jYW52YXMuaGVpZ2h0PXQsKG49dGhpcy5waXBlbGluZSk9PW51bGx8fG4ucmVzaXplT3V0cHV0KGUsdCksdGhpcy5wcmV2aW91c0ltYWdlV2lkdGg9ZSx0aGlzLnByZXZpb3VzSW1hZ2VIZWlnaHQ9dH19Y2xhc3MgUG8gZXh0ZW5kcyB6dHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCk7bCh0aGlzLCJwaXBlbGluZSIpO2wodGhpcywiYmFja2dyb3VuZEltYWdlIik7bCh0aGlzLCJiYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzIik7bCh0aGlzLCJiYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ29udGV4dCIpO2wodGhpcywiYmFja2dyb3VuZEltYWdlUmVzaXplciIpO3RoaXMucGlwZWxpbmU9bmV3IFNvKHRoaXMuY29udGV4dCk7Y29uc3QgdD1uZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCksbj10LmdldENvbnRleHQoIndlYmdsMiIpO2lmKCFuKXRocm93IkZhaWwgdG8gcmV0cmlldmUgd2ViZ2wgY29udGV4dCI7dGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzPXQsdGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ29udGV4dD1uLHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplcj1uZXcgVGYodGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ29udGV4dCwwLDApfXNldEJhY2tncm91bmRJbWFnZSh0KXt0aGlzLmJhY2tncm91bmRJbWFnZT10LHRoaXMudXBkYXRlQmFja2dyb3VuZEltYWdlKCl9dXBkYXRlQmFja2dyb3VuZEltYWdlKCl7Y29uc3R7d2lkdGg6dCxoZWlnaHQ6bn09dGhpcy5jYW52YXM7dGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyLnJlc2l6ZU91dHB1dCh0LG4pLHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplci5zZXREYXRhKHRoaXMuYmFja2dyb3VuZEltYWdlKSx0aGlzLmJhY2tncm91bmRJbWFnZVJlc2l6ZXIucnVuKCksdGhpcy5waXBlbGluZS5pbnB1dEJhY2tncm91bmRJbWFnZT10aGlzLmJhY2tncm91bmRJbWFnZVJlc2l6ZXJDYW52YXN9cmVzaXplT3V0cHV0KHQsbil7c3VwZXIucmVzaXplT3V0cHV0KHQsbiksdGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzLndpZHRoPXQsdGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzLmhlaWdodD1uLHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplci5yZXNpemVPdXRwdXQodCxuKSx0aGlzLnVwZGF0ZUJhY2tncm91bmRJbWFnZSgpfX1jbGFzcyBXZiBleHRlbmRzIFBve2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKTtsKHRoaXMsImZyYW1lUmVhZGVyIil9c2V0QmFja2dyb3VuZFZpZGVvKHQpe3RoaXMuZnJhbWVSZWFkZXI9dH1hc3luYyByZW5kZXIodCxuKXtyZXR1cm4gYXdhaXQgdGhpcy5yZWFkTmV4dFZpZGVvRnJhbWUoKSxzdXBlci5yZW5kZXIodCxuKX1hc3luYyByZWFkTmV4dFZpZGVvRnJhbWUoKXt2YXIgbjtjb25zdCB0PWF3YWl0KChuPXRoaXMuZnJhbWVSZWFkZXIpPT1udWxsP3ZvaWQgMDpuLnJlYWQoKSk7aWYodCE9bnVsbCYmdC52YWx1ZSl7Y29uc3Qgbz1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcCh0LnZhbHVlKTt0aGlzLnNldEJhY2tncm91bmRJbWFnZShvKSx0LnZhbHVlLmNsb3NlKCl9fX1jbGFzcyBrb3tibHVyQmFja2dyb3VuZChlKXtyZXR1cm4gbmV3IGxzKGUpfWJsdXJTaWxob3VldHRlKGUpe3JldHVybiBuZXcgZHMoZSl9aW1hZ2VCYWNrZ3JvdW5kKCl7cmV0dXJuIG5ldyBoc312aWRlb0JhY2tncm91bmQoKXtyZXR1cm4gbmV3IFdmfX12YXIgVmY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSB2ZWMyIGNhbnZhczsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKdW5pZm9ybSBzYW1wbGVyMkQgbWFzazsKCnZlYzQgbG9vcCgpOwoKdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSBsb29wKCk7IH0KYCxIZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIGpmIGV4dGVuZHMgRWV7Z2V0RGVmaW5lcygpe3ZhciBlO3JldHVybntSQURJVVM6KGU9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/ZToxfX1nZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBWZit0aGlzLmNyZWF0ZUxvb3BGdW5jdGlvbigpfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBIZn1jcmVhdGVMb29wRnVuY3Rpb24oKXt2YXIgdDtsZXQgZT0odD10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD90OjE7cmV0dXJuYAoKICAgICAgICB2ZWM0IGxvb3AoKSB7IAogICAgICAgICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMCwwLDAsMCk7CiAgICAgICAgICAgIGZsb2F0IGZhY3RvclN1bSA9IDAuOwoKICAgICAgICAgICAgdmVjMiBub3JtYWxpemVkUmFkaXVzID0gdmVjMigtJHtlfS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRJbmNyZW1lbnQgPSB2ZWMyKDEuKSAvIGNhbnZhczsKICAgICAgICAgICAgdmVjMiBkaWZmID0gbm9ybWFsaXplZFJhZGl1czsKICAgICAgICAgICAgZmxvYXQgbWF4TGVuZ3RoID0gbGVuZ3RoKG5vcm1hbGl6ZWRSYWRpdXMpOwoKICAgICAgICAgICAgZm9yKGludCB5PS0ke2V9OyB5PCR7ZSsxfTsgKyt5KSB7CiAgICAgICAgICAgICAgICBmb3IoaW50IHg9LSR7ZX07IHg8JHtlKzF9OyArK3gpIHsKICAgICAgICAgICAgICAgICAgICBmbG9hdCBmYWN0b3IgPSAoMS4tIHRleHR1cmUyRChtYXNrLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpLmEpICogKG1heExlbmd0aCAtIGxlbmd0aChkaWZmKSkgLyBtYXhMZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZhY3RvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpOwogICAgICAgICAgICAgICAgICAgIGZhY3RvclN1bSArPSBmYWN0b3I7CiAgICAgICAgICAgICAgICAgICAgZGlmZi54ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRpZmYueSArPSBub3JtYWxpemVkSW5jcmVtZW50Lnk7CiAgICAgICAgICAgICAgICBkaWZmLnggPSBub3JtYWxpemVkUmFkaXVzLng7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAvIGZhY3RvclN1bTsKICAgICAgICB9YH19Y29uc3QgWWY9MTAsWGY9MixRZj04O2NsYXNzIHFmIGV4dGVuZHMgTHJ7Y29uc3RydWN0b3IodCxuKXtzdXBlcigpO2wodGhpcywiaW5wdXRJbWFnZSIpO2wodGhpcywiaW5wdXRNYXNrIik7bCh0aGlzLCJibHVyIik7dGhpcy5jb250ZXh0PXQsdGhpcy5yYWRpdXM9bjtjb25zdCBvPXtjb250ZXh0OnQsaGVpZ2h0OnQuY2FudmFzLmhlaWdodCx3aWR0aDp0LmNhbnZhcy53aWR0aH07dGhpcy5ibHVyPW5ldyBqZih7Li4ubyxyYWRpdXM6biwuLi50aGlzLmdldEJsdXJUZXh0dXJlU2l6ZSh0LmNhbnZhcy53aWR0aCx0LmNhbnZhcy5oZWlnaHQpfSk7Y29uc3QgaT1uZXcgVXIoey4uLm8sZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSk7dGhpcy5hZGRTdGVwKHtwcm9ncmFtOnRoaXMuYmx1cixwcmV2ZW50UmVzaXplOiEwLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6SSh0LHRoaXMuaW5wdXRJbWFnZSksbWFzazpJKHQsdGhpcy5pbnB1dE1hc2spfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06aSxnZXRVbmlmb3JtczooKT0+KHtiYWNrZ3JvdW5kOkkodCx0aGlzLmJsdXIub3V0cHV0KSxmb3JlZ3JvdW5kOkkodCx0aGlzLmlucHV0SW1hZ2UpLHRocmVzaG9sZDpJKHQsdGhpcy5pbnB1dE1hc2spfSl9KX1nZXRCbHVyVGV4dHVyZVNpemUodCxuKXtjb25zdCBvPXRoaXMucmFkaXVzPllmP1FmOlhmO3JldHVybnt3aWR0aDpNYXRoLm1heChPZSx0L28pLGhlaWdodDpNYXRoLm1heChPZSxuL28pfX1zZXREYXRhKHQsbil7dGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn1yZXNpemVPdXRwdXQodCxuKXtzdXBlci5yZXNpemVPdXRwdXQodCxuKTtjb25zdCBvPXRoaXMuZ2V0Qmx1clRleHR1cmVTaXplKHQsbik7dGhpcy5ibHVyLnJlc2l6ZU91dHB1dChvLndpZHRoLG8uaGVpZ2h0KX19Y2xhc3MgS2YgZXh0ZW5kcyB6dHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpO2wodGhpcywicGlwZWxpbmUiKTt0aGlzLnBpcGVsaW5lPW5ldyBxZih0aGlzLmNvbnRleHQsdCksdGhpcy5kaXNhYmxlUG9zdFByb2Nlc3NpbmcoKX19Y2xhc3MgSmYgZXh0ZW5kcyBMcntjb25zdHJ1Y3Rvcih0LG4pe3N1cGVyKCk7bCh0aGlzLCJpbnB1dEltYWdlIik7bCh0aGlzLCJpbnB1dE1hc2siKTt0aGlzLmNvbnRleHQ9dDtjb25zdCBvPXtjb250ZXh0OnQsaGVpZ2h0OnQuY2FudmFzLmhlaWdodCx3aWR0aDp0LmNhbnZhcy53aWR0aH0saT1uZXcgRm8oey4uLm8scmFkaXVzOm4sdHlwZTp6ci5HQVVTU0lBTn0pLHM9bmV3IFVyKHsuLi5vLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTppLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6SSh0LHRoaXMuaW5wdXRJbWFnZSl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpzLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6SSh0LHRoaXMuaW5wdXRJbWFnZSksZm9yZWdyb3VuZDpJKHQsaS5vdXRwdXQpLHRocmVzaG9sZDpJKHQsdGhpcy5pbnB1dE1hc2spfSl9KX1zZXREYXRhKHQsbil7dGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn19Y2xhc3MgWmYgZXh0ZW5kcyB6dHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpO2wodGhpcywicGlwZWxpbmUiKTt0aGlzLnBpcGVsaW5lPW5ldyBKZih0aGlzLmNvbnRleHQsdCksdGhpcy5kaXNhYmxlUG9zdFByb2Nlc3NpbmcoKX19Y2xhc3MgZWwgZXh0ZW5kcyBTb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7bCh0aGlzLCJmcmFtZVJlYWRlciIpO2wodGhpcywicHJlY2lzZU1hc2tFbmFibGVkIiwhMCl9c2V0IHJlYWRlcih0KXt0aGlzLmZyYW1lUmVhZGVyPXR9YXN5bmMgcnVuKCl7dGhpcy5mcmFtZVJlYWRlciYmKGF3YWl0IHRoaXMucmVhZE5leHRWaWRlb0ZyYW1lKCksYXdhaXQgc3VwZXIucnVuKCkpfWFzeW5jIHJlYWROZXh0VmlkZW9GcmFtZSgpe3ZhciBuO2NvbnN0IHQ9YXdhaXQoKG49dGhpcy5mcmFtZVJlYWRlcik9PW51bGw/dm9pZCAwOm4ucmVhZCgpKTt0IT1udWxsJiZ0LnZhbHVlJiYodGhpcy5pbnB1dEJhY2tncm91bmRJbWFnZT1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcCh0LnZhbHVlKSx0LnZhbHVlLmNsb3NlKCkpfX1jbGFzcyB0bCBleHRlbmRzIHp0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKTtsKHRoaXMsInBpcGVsaW5lIik7dGhpcy5waXBlbGluZT1uZXcgZWwodGhpcy5jb250ZXh0KX1zZXRCYWNrZ3JvdW5kVmlkZW8odCl7dGhpcy5waXBlbGluZS5yZWFkZXI9dH19Y2xhc3MgRG97Ymx1ckJhY2tncm91bmQoZSl7cmV0dXJuIG5ldyBLZihlKX1ibHVyU2lsaG91ZXR0ZShlKXtyZXR1cm4gbmV3IFpmKGUpfWltYWdlQmFja2dyb3VuZCgpe3JldHVybiBuZXcgUG99dmlkZW9CYWNrZ3JvdW5kKCl7cmV0dXJuIG5ldyB0bH19Y2xhc3Mgcmx7Y29uc3RydWN0b3IoZSl7bCh0aGlzLCJmYWN0b3J5Iik7c3dpdGNoKGUpe2Nhc2UgeXQuQ0FOVkFTOnRoaXMuZmFjdG9yeT1uZXcga287YnJlYWs7Y2FzZSB5dC5XRUJHTDp0aGlzLmZhY3Rvcnk9bmV3IERvO2JyZWFrO2RlZmF1bHQ6Y29uc3QgdD1mcygpO3RoaXMuZmFjdG9yeT10LnN1cHBvcnRlZD9uZXcgRG86bmV3IGtvfX1ibHVyQmFja2dyb3VuZChlKXtyZXR1cm4gdGhpcy5nZXRGYWN0b3J5KCkuYmx1ckJhY2tncm91bmQoZSl9Ymx1clNpbGhvdWV0dGUoZSl7cmV0dXJuIHRoaXMuZ2V0RmFjdG9yeSgpLmJsdXJTaWxob3VldHRlKGUpfWltYWdlQmFja2dyb3VuZCgpe3JldHVybiB0aGlzLmdldEZhY3RvcnkoKS5pbWFnZUJhY2tncm91bmQoKX12aWRlb0JhY2tncm91bmQoKXtyZXR1cm4gdGhpcy5nZXRGYWN0b3J5KCkudmlkZW9CYWNrZ3JvdW5kKCl9Z2V0RmFjdG9yeSgpe2lmKCF0aGlzLmZhY3RvcnkpdGhyb3ciRmFjdG9yeSBpcyBub3QgaW5pdGlhbGl6ZWQiO3JldHVybiB0aGlzLmZhY3Rvcnl9fWNsYXNzIG5se2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJyZW5kZXJlciIpO2wodGhpcywiYmFja2dyb3VuZFZpZGVvIik7bCh0aGlzLCJiYWNrZ3JvdW5kSW1hZ2UiKX1zZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKXt2YXIgbixvO2NvbnN0IHQ9bmV3IHJsKChuPWUucmVuZGVyaW5nT3B0aW9ucyk9PW51bGw/dm9pZCAwOm4udHlwZSk7c3dpdGNoKGUudHJhbnNmb3JtZXJUeXBlKXtjYXNlIkJhY2tncm91bmRCbHVyIjp0aGlzLnJlbmRlcmVyPXQuYmx1ckJhY2tncm91bmQodGhpcy5nZXRCbHVyU2l6ZShlLnJhZGl1cykpO2JyZWFrO2Nhc2UiU2lsaG91ZXR0ZUJsdXIiOnRoaXMucmVuZGVyZXI9dC5ibHVyU2lsaG91ZXR0ZSh0aGlzLmdldEJsdXJTaXplKGUucmFkaXVzKSk7YnJlYWs7Y2FzZSJWaWRlb0JhY2tncm91bmQiOmNvbnN0IGk9dC52aWRlb0JhY2tncm91bmQoKTt0aGlzLmJhY2tncm91bmRWaWRlbyYmaS5zZXRCYWNrZ3JvdW5kVmlkZW8odGhpcy5iYWNrZ3JvdW5kVmlkZW8pLHRoaXMucmVuZGVyZXI9aTticmVhaztjYXNlIlZpcnR1YWxCYWNrZ3JvdW5kIjpjb25zdCBzPXQuaW1hZ2VCYWNrZ3JvdW5kKCk7dGhpcy5iYWNrZ3JvdW5kSW1hZ2UmJnMuc2V0QmFja2dyb3VuZEltYWdlKHRoaXMuYmFja2dyb3VuZEltYWdlKSx0aGlzLnJlbmRlcmVyPXM7YnJlYWs7ZGVmYXVsdDp0aHJvd2BVbmtub3duIHJlbmRlcmluZyB0eXBlIFske2UudHJhbnNmb3JtZXJUeXBlfV1gfSgobz1lLnJlbmRlcmluZ09wdGlvbnMpPT1udWxsP3ZvaWQgMDpvLnR5cGUpPT09eXQuV0VCR0wmJihlLnJlbmRlcmluZ09wdGlvbnMuc2VsZmllU2VnbWVudGF0aW9uVHlwZT09PW5yLlBSRUNJU0U/dGhpcy5yZW5kZXJlci5lbmFibGVQb3N0UHJvY2Vzc2luZygpOmUucmVuZGVyaW5nT3B0aW9ucy5zZWxmaWVTZWdtZW50YXRpb25UeXBlPT09bnIuRkFTVCYmdGhpcy5yZW5kZXJlci5kaXNhYmxlUG9zdFByb2Nlc3NpbmcoKSl9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dmFyIHQ7KHQ9dGhpcy5yZW5kZXJlcik9PW51bGx8fHQuc2V0RmxpY2tlcmluZ09wdGlvbnMoZSl9c2V0VmlkZW9CR1JlYWRhYmxlKGUpe3RoaXMuYmFja2dyb3VuZFZpZGVvPWUuZ2V0UmVhZGVyKCk7Y29uc3QgdD10aGlzLnJlbmRlcmVyO3QhPW51bGwmJnQuc2V0QmFja2dyb3VuZFZpZGVvJiZ0LnNldEJhY2tncm91bmRWaWRlbyh0aGlzLmJhY2tncm91bmRWaWRlbyl9YXN5bmMgc2V0VmlydHVhbEJHSW1hZ2UoZSl7Y29uc3QgdD10aGlzLnJlbmRlcmVyO3QhPW51bGwmJnQuc2V0QmFja2dyb3VuZEltYWdlJiZ0LnNldEJhY2tncm91bmRJbWFnZShlKSx0aGlzLmJhY2tncm91bmRJbWFnZT1lfWFzeW5jIHByb2Nlc3MoZSx0KXtpZih0aGlzLnJlbmRlcmVyKXJldHVybiB0aGlzLnJlbmRlcmVyLnJlbmRlcihlLHQpfWFzeW5jIHJlc2l6ZUZvcmVncm91bmQoZSx0KXt9Z2V0Qmx1clNpemUoZT1ndC5Mb3cpe3N3aXRjaChlKXtjYXNlIGd0LkxvdzpyZXR1cm4gNTtjYXNlIGd0LkhpZ2g6cmV0dXJuIDEyfXJldHVybiBlfWFzeW5jIHByb2ZpbGUoZSl7dmFyIHQsbjtyZXR1cm4obj0odD10aGlzLnJlbmRlcmVyKT09bnVsbD92b2lkIDA6dC5wcm9maWxlV2ViZ2woZSkpIT1udWxsP246W119fWNsYXNzIG9se2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJzZWxmaWVTZWdtZW50YXRpb24iLG5ldyBjcyk7bCh0aGlzLCJiYWNrZ3JvdW5kRmlsdGVyIik7bCh0aGlzLCJyZXBvcnRlciIsbmV3IHJzKTtsKHRoaXMsImlzRW5hYmxlZCIsITApO2wodGhpcywiYmFja2dyb3VuZE9wdGlvbnMiKX1hc3luYyBpbml0KGUsdCl7YXdhaXQgdGhpcy5zZWxmaWVTZWdtZW50YXRpb24uaW5pdCh0Lndhc21Bc3NldFVyaVBhdGgsdC50ZmxpdGVBc3NldFVyaVBhdGgpLHRoaXMuYmFja2dyb3VuZEZpbHRlcj1uZXcgbmwsdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiQ3JlYXRlIn0pfWFzeW5jIHRyYW5zZm9ybShlLHQpe3ZhciBhLHU7aWYoIXRoaXMuaXNFbmFibGVkKXJldHVybiB0LmVucXVldWUoZSk7bGV0IG47Y29uc3Qgbz0oYT1lLnRpbWVzdGFtcCkhPW51bGw/YTowLGk9YXdhaXQgY3JlYXRlSW1hZ2VCaXRtYXAoZSkscz1hd2FpdCB0aGlzLnNlbGZpZVNlZ21lbnRhdGlvbi5wcm9jZXNzKGkpO3MmJihuPWF3YWl0KCh1PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnUucHJvY2VzcyhpLHMpKSksbj8oZS5jbG9zZSgpLHQuZW5xdWV1ZShuZXcgVmlkZW9GcmFtZShuLHt0aW1lc3RhbXA6byxhbHBoYToiZGlzY2FyZCJ9KSkpOnQuZW5xdWV1ZShlKX1hc3luYyBzZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKXt2YXIgdDt0aGlzLmJhY2tncm91bmRPcHRpb25zPWUsYXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dC5zZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKSksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiVXBkYXRlIn0pfWFzeW5jIHNldFZpZGVvQkdSZWFkYWJsZShlKXt2YXIgdDthd2FpdCgodD10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp0LnNldFZpZGVvQkdSZWFkYWJsZShlKSl9YXN5bmMgc2V0VmlydHVhbEJHSW1hZ2UoZSl7dmFyIHQ7YXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dC5zZXRWaXJ0dWFsQkdJbWFnZShlKSl9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dmFyIHQ7KHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbHx8dC5zZXRGbGlja2VyaW5nT3B0aW9ucyhlKSx0aGlzLnJlcG9ydCh7dmFyaWF0aW9uOiJVcGRhdGUifSl9YXN5bmMgcHJvZmlsZShlKXt2YXIgdCxuO3JldHVybihuPSh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnQucHJvZmlsZShlKSkhPW51bGw/bjpbXX1nZXRUcmFuc2Zvcm1lclR5cGUoKXt2YXIgZSx0O3JldHVybih0PShlPXRoaXMuYmFja2dyb3VuZE9wdGlvbnMpPT1udWxsP3ZvaWQgMDplLnRyYW5zZm9ybWVyVHlwZSkhPW51bGw/dDoiVW5kZWZpbmVkIn1lbmFibGUoKXt0aGlzLmlzRW5hYmxlZD0hMH1kaXNhYmxlKCl7dGhpcy5pc0VuYWJsZWQ9ITF9cmVwb3J0KGUpe3ZhciB0O3RoaXMucmVwb3J0ZXIuc2VuZCh7dmVyc2lvbjpucyxhY3Rpb246Ik1sVHJhbnNmb3JtZXJzIix0cmFuc2Zvcm1lclR5cGU6KHQ9dGhpcy5iYWNrZ3JvdW5kT3B0aW9ucyk9PW51bGw/dm9pZCAwOnQudHJhbnNmb3JtZXJUeXBlLGNvbmZpZzpKU09OLnN0cmluZ2lmeSh0aGlzLmJhY2tncm91bmRPcHRpb25zKSwuLi5lfSl9fWNvbnN0ICRyPWNsYXNze2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJiYWNrZ3JvdW5kVHJhbnNmb3JtZXIiLG5ldyBvbCk7bCh0aGlzLCJtZWRpYVByb2Nlc3NvciIsbmV3IERpKTtsKHRoaXMsInJhdGUiLDMwKTtsKHRoaXMsInJlc29sdmVPbk1lZGlhUHJvY2Vzc29yIik7bCh0aGlzLCJldmVudHNRdWV1ZSIsW10pfWFzeW5jIGluaXQoZSx0KXthd2FpdCB0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5pbml0KGUsdCksYXdhaXQgdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFuc2Zvcm1lcnMoW3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyXSksdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnJhdGUpLHRoaXMubWVkaWFQcm9jZXNzb3Iub25BbnkoKG4sbyk9Pnt0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yPyh0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yKHtuYW1lOm4sZGF0YTpvfSksdGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcj12b2lkIDApOnRoaXMuZXZlbnRzUXVldWUucHVzaCh7bmFtZTpuLGRhdGE6b30pfSl9ZW5hYmxlKCl7dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuZW5hYmxlKCl9ZGlzYWJsZSgpe3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLmRpc2FibGUoKX1hc3luYyBvbk1lZGlhUHJvY2Vzc29yRXZlbnQoKXtyZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoZT0+e3RoaXMuZXZlbnRzUXVldWUubGVuZ3RoPjA/ZSh0aGlzLmV2ZW50c1F1ZXVlLnNoaWZ0KCkpOnRoaXMucmVzb2x2ZU9uTWVkaWFQcm9jZXNzb3I9ZX0pfWFzeW5jIHNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMucmF0ZT1lLHRoaXMubWVkaWFQcm9jZXNzb3Iuc2V0VHJhY2tFeHBlY3RlZFJhdGUoZSl9YXN5bmMgdHJhbnNmb3JtKGUsdCl7dGhpcy5tZWRpYVByb2Nlc3Nvci50cmFuc2Zvcm0oZSx0KX1hc3luYyBzZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKXt2YXIgdDthd2FpdCgodD10aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lcik9PW51bGw/dm9pZCAwOnQuc2V0QmFja2dyb3VuZE9wdGlvbnMoZSkpfXNldFZpZGVvQkdSZWFkYWJsZShlKXt0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5zZXRWaWRlb0JHUmVhZGFibGUoZSl9YXN5bmMgc2V0VmlydHVhbEJHSW1hZ2UoZSl7YXdhaXQgdGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuc2V0VmlydHVhbEJHSW1hZ2UoZSl9YXN5bmMgdGVybWluYXRlKCl7YXdhaXQgdGhpcy5tZWRpYVByb2Nlc3Nvci5kZXN0cm95KCl9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuc2V0RmxpY2tlcmluZ09wdGlvbnMoZSl9c2V0Vm9uYWdlTWV0YWRhdGEoZSl7SWkoZSl9YXN5bmMgcHJvZmlsZShlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXdhaXQgdGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIucHJvZmlsZShlKSl9fTtsZXQgQ289JHI7KCgpPT57am8oIlByb2Nlc3NvcldvcmtlciIsJHIpfSkoKX0pKCk7Cg==",pc=typeof window<"u"&&window.Blob&&new Blob([atob(mc)],{type:"text/javascript;charset=utf-8"});function U3(){const i=pc&&(window.URL||window.webkitURL).createObjectURL(pc);try{return i?new Worker(i):new Worker("data:application/javascript;base64,"+mc)}finally{i&&(window.URL||window.webkitURL).revokeObjectURL(i)}}const bs=class extends ur{constructor(r){super();gt(this,"rate",30);gt(this,"worker");gt(this,"config");gt(this,"backgroundOptions");gt(this,"isEnabled",!0);this.config=r}async setTrackExpectedRate(r){var f;await this.startWorker(),await((f=this.worker)==null?void 0:f.setTrackExpectedRate(r))}async setBackgroundOptions(r){this.backgroundOptions=r,await this.updateBackgroundOptions(r)}async transform(r,f){var Z;await this.startWorker(),await((Z=this.worker)==null?void 0:Z.transform(r,f))}async destroy(){var r;await((r=this.worker)==null?void 0:r.terminate()),this.worker=void 0}async setFlickeringOptions(r){var f;await this.startWorker(),await((f=this.worker)==null?void 0:f.setFlickeringOptions(r))}async profile(r){var Z;const f=await((Z=this.worker)==null?void 0:Z.profile(r));return JSON.parse(f!=null?f:"[]")}async enable(){var r;this.isEnabled=!0,await((r=this.worker)==null?void 0:r.enable())}async disable(){var r;this.isEnabled=!1,await((r=this.worker)==null?void 0:r.disable())}async listenWorker(){var r,f;for(;(r=this.worker)!=null&&r.workerContext.worker;){const{name:Z,data:x}=await((f=this.worker)==null?void 0:f.onMediaProcessorEvent());switch(Z){case"error":case"warn":this.emit(Z,x);break;case"pipelineInfo":switch(this.emit(Z,x),x){case"pipeline_ended":case"pipeline_ended_with_error":await this.destroy();return}break}}}async startWorker(){!this.config||this.worker||(this.worker=await b2(fs,U3),this.isEnabled||await this.worker.disable(),await this.worker.init(`worker_${bs.initCount++}`,this.config),this.backgroundOptions&&await this.updateBackgroundOptions(this.backgroundOptions),await this.worker.setVonageMetadata(yi()),await this.setBackgroundOptions(this.config),this.listenWorker())}async updateBackgroundOptions(r){var Z,x,H;await this.startWorker();const{transformerType:f}=r;switch(f){case"VideoBackground":await((Z=this.worker)==null?void 0:Z.setVideoBGReadable(await Bs.createVideoReadable(r.backgroundAssetUri)));break;case"VirtualBackground":await((x=this.worker)==null?void 0:x.setVirtualBGImage(await Bs.createImageCanvas(r.backgroundAssetUri)));break}await((H=this.worker)==null?void 0:H.setBackgroundOptions(r))}};let po=bs;gt(po,"initCount",0);class B3{constructor(n){this.queries=n}async downloadSpeedscope(){this.download(await this.convertToSpeedscope())}download(n){const r=document.createElement("a");r.href=URL.createObjectURL(new Blob([n],{type:"application/json"})),r.download=`profile-${+new Date}.speedscope.json`,document.body.appendChild(r),r.click(),document.body.removeChild(r)}convertToSpeedscope(){const n=[],r={},f=[];let Z=0;for(const H of this.queries){const T=[];for(const J of H)r[J.name]===void 0&&(r[J.name]=n.length,n.push({name:J.name})),T.push({type:J.action==uc.PUSH?"O":"C",frame:r[J.name],at:J.timestamp}),Z=Math.max(Z,J.timestamp+J.duration);f.push({events:T,type:"evented",name:"GPU Profile",unit:"nanoseconds",startValue:0,endValue:Z})}const x={$schema:"https://www.speedscope.app/file-format-schema.json",shared:{frames:n},profiles:f};return JSON.stringify(x,null,2)}}class ms extends ur{constructor(r){super();gt(this,"worker");gt(this,"connector");this.worker=new po(r),this.connector=new $c(this.worker),this.worker.onAny((f,Z)=>this.emit(f,Z))}async setBackgroundOptions(r){await this.worker.setBackgroundOptions(r)}async enable(){await this.worker.enable()}async disable(){await this.worker.disable()}setTrackExpectedRate(r){this.worker.setTrackExpectedRate(r)}getConnector(){return this.connector}async profile(r){return this.worker.profile(r)}static async profile(r){const f=await Promise.all(this.instances.map(Z=>Z.profile(r)));return new B3(f)}static async create(r){const f=new this(r);return this.instances.push(f),f}}gt(ms,"instances",[]);function K3(){return Gi}function M3(){return Xi}function A3(){return Wi}function z3(){return Vi}function j3(){return Ri}function P3(){return Ii}function O3(){return xi}async function _3(i){return await ms.create(i)}Ue.BackgroundTransformer=fc,Ue.BackgroundTransformerType=xs,Ue.BlurRadius=Dr,Ue.ErrorFunction=Is,Ue.MediapipeHelper=Si,Ue.PipelineInfoData=Zi,Ue.RenderingType=$r,Ue.VonageMediaProcessor=ms,Ue.WarningType=Rs,Ue.WebglSelfieSegmentationType=vi,Ue.createVonageMediaProcessor=_3,Ue.getSupportedBrowserFeatures=Ts,Ue.getVonageFaceDetection=z3,Ue.getVonageFaceMash=j3,Ue.getVonageHands=M3,Ue.getVonageHolistic=A3,Ue.getVonageObjectron=P3,Ue.getVonagePose=O3,Ue.getVonageSelfieSegmentation=K3,Ue.isSupported=o2,Object.defineProperties(Ue,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|