@vonage/ml-transformers 4.3.4 → 4.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ml-transformers.es.js +7970 -8309
- package/dist/ml-transformers.min.js +3 -3
- package/dist/ml-transformers.static.js +7970 -8309
- package/dist/ml-transformers.umd.js +62 -63
- package/dist/types/{main.d.ts → lib/main.d.ts} +1 -1
- package/dist/types/{src → lib/src}/facades/vonage-media-processor.d.ts +3 -0
- package/dist/types/{src → lib/src}/filters/background-filter.d.ts +0 -0
- package/dist/types/{src → lib/src}/filters/resize-filter.d.ts +0 -0
- package/dist/types/{src → lib/src}/processors/processor-main.d.ts +0 -0
- package/dist/types/{src → lib/src}/processors/processor-worker.d.ts +1 -1
- package/dist/types/{src → lib/src}/transformers/background-transformer.d.ts +4 -0
- package/dist/types/{src → lib/src}/types.d.ts +16 -10
- package/dist/types/{src → lib/src}/utils/assets-loader.d.ts +0 -0
- package/dist/types/{src → lib/src}/utils/async.d.ts +0 -0
- package/dist/types/{src → lib/src}/utils/error.d.ts +0 -0
- package/dist/types/{src → lib/src}/utils/mediapipe.d.ts +0 -0
- package/dist/types/{src → lib/src}/utils/support.d.ts +0 -0
- package/dist/types/{src → lib/src}/utils/webgl.d.ts +0 -2
- package/dist/types/{src → lib/src}/wasm/selfie-segmentation/loader.d.ts +0 -0
- package/dist/types/{src → lib/src}/wasm/selfie-segmentation/wrapper.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/pipelines/background-blur.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/pipelines/background-image.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/pipelines/background-video.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/pipelines/foreground-blur.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/pipelines/improve-segmentation-mask.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/pipelines/output-mask.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/pipelines/resize-image.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/programs/blur/blur.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/programs/blur-masked/blur-masked.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/programs/expend/expend.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/programs/flickering/flickering.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/programs/highpass/highpass.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/programs/joint-bilateral/joint-bilateral.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/programs/minimum-surface/minimum-surface.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/programs/mix/mix.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/programs/power/power.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/programs/refine-mask/refine-mask.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/programs/render-texture/render-texture.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/programs/smooth/smooth.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/programs/track/track.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/webgl-pipeline-program-double-buffer.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/webgl-pipeline-program.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/webgl-pipeline.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/webgl-profiler-reporter.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/webgl-profiler.d.ts +0 -0
- package/dist/types/{src → lib/src}/webgl/webgl-transormer-pipeline.d.ts +0 -0
- package/package.json +5 -4
|
@@ -1,138 +1,137 @@
|
|
|
1
|
-
(function(Ae,
|
|
2
|
-
`),function(Y){if(I=Y.indexOf(":"),m=to.trim(Y.substr(0,I)).toLowerCase(),y=to.trim(Y.substr(I+1)),m){if(r[m]&&Ou.indexOf(m)>=0)return;m==="set-cookie"?r[m]=(r[m]?r[m]:[]).concat([y]):r[m]=r[m]?r[m]+", "+y:y}}),r},fs=Qn,_u=fs.isStandardBrowserEnv()?function(){var n=/(msie|trident)/i.test(navigator.userAgent),r=document.createElement("a"),m;function y(I){var F=I;return n&&(r.setAttribute("href",F),F=r.href),r.setAttribute("href",F),{href:r.href,protocol:r.protocol?r.protocol.replace(/:$/,""):"",host:r.host,search:r.search?r.search.replace(/^\?/,""):"",hash:r.hash?r.hash.replace(/^#/,""):"",hostname:r.hostname,port:r.port,pathname:r.pathname.charAt(0)==="/"?r.pathname:"/"+r.pathname}}return m=y(window.location.href),function(F){var Y=fs.isString(F)?y(F):F;return Y.protocol===m.protocol&&Y.host===m.host}}():function(){return function(){return!0}}();function eo(o){this.message=o}eo.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},eo.prototype.__CANCEL__=!0;var ni=eo,ri=Qn,Qu=Ku,Du=Uu,$u=as,qu=zu,tc=Pu,ec=_u,no=hs,nc=oi,rc=ni,ms=function(n){return new Promise(function(m,y){var I=n.data,F=n.headers,Y=n.responseType,k;function et(){n.cancelToken&&n.cancelToken.unsubscribe(k),n.signal&&n.signal.removeEventListener("abort",k)}ri.isFormData(I)&&delete F["Content-Type"];var O=new XMLHttpRequest;if(n.auth){var st=n.auth.username||"",xt=n.auth.password?unescape(encodeURIComponent(n.auth.password)):"";F.Authorization="Basic "+btoa(st+":"+xt)}var Vt=qu(n.baseURL,n.url);O.open(n.method.toUpperCase(),$u(Vt,n.params,n.paramsSerializer),!0),O.timeout=n.timeout;function dt(){if(!!O){var Ht="getAllResponseHeaders"in O?tc(O.getAllResponseHeaders()):null,Lt=!Y||Y==="text"||Y==="json"?O.responseText:O.response,At={data:Lt,status:O.status,statusText:O.statusText,headers:Ht,config:n,request:O};Qu(function(Ee){m(Ee),et()},function(Ee){y(Ee),et()},At),O=null}}if("onloadend"in O?O.onloadend=dt:O.onreadystatechange=function(){!O||O.readyState!==4||O.status===0&&!(O.responseURL&&O.responseURL.indexOf("file:")===0)||setTimeout(dt)},O.onabort=function(){!O||(y(no("Request aborted",n,"ECONNABORTED",O)),O=null)},O.onerror=function(){y(no("Network Error",n,null,O)),O=null},O.ontimeout=function(){var Lt=n.timeout?"timeout of "+n.timeout+"ms exceeded":"timeout exceeded",At=n.transitional||nc.transitional;n.timeoutErrorMessage&&(Lt=n.timeoutErrorMessage),y(no(Lt,n,At.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",O)),O=null},ri.isStandardBrowserEnv()){var ht=(n.withCredentials||ec(Vt))&&n.xsrfCookieName?Du.read(n.xsrfCookieName):void 0;ht&&(F[n.xsrfHeaderName]=ht)}"setRequestHeader"in O&&ri.forEach(F,function(Lt,At){typeof I>"u"&&At.toLowerCase()==="content-type"?delete F[At]:O.setRequestHeader(At,Lt)}),ri.isUndefined(n.withCredentials)||(O.withCredentials=!!n.withCredentials),Y&&Y!=="json"&&(O.responseType=n.responseType),typeof n.onDownloadProgress=="function"&&O.addEventListener("progress",n.onDownloadProgress),typeof n.onUploadProgress=="function"&&O.upload&&O.upload.addEventListener("progress",n.onUploadProgress),(n.cancelToken||n.signal)&&(k=function(Ht){!O||(y(!Ht||Ht&&Ht.type?new rc("canceled"):Ht),O.abort(),O=null)},n.cancelToken&&n.cancelToken.subscribe(k),n.signal&&(n.signal.aborted?k():n.signal.addEventListener("abort",k))),I||(I=null),O.send(I)})},Kn=Qn,ps=Ju,ic=ds,oc={"Content-Type":"application/x-www-form-urlencoded"};function bs(o,n){!Kn.isUndefined(o)&&Kn.isUndefined(o["Content-Type"])&&(o["Content-Type"]=n)}function sc(){var o;return(typeof XMLHttpRequest<"u"||typeof process<"u"&&Object.prototype.toString.call(process)==="[object process]")&&(o=ms),o}function lc(o,n,r){if(Kn.isString(o))try{return(n||JSON.parse)(o),Kn.trim(o)}catch(m){if(m.name!=="SyntaxError")throw m}return(r||JSON.stringify)(o)}var ii={transitional:{silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},adapter:sc(),transformRequest:[function(n,r){return ps(r,"Accept"),ps(r,"Content-Type"),Kn.isFormData(n)||Kn.isArrayBuffer(n)||Kn.isBuffer(n)||Kn.isStream(n)||Kn.isFile(n)||Kn.isBlob(n)?n:Kn.isArrayBufferView(n)?n.buffer:Kn.isURLSearchParams(n)?(bs(r,"application/x-www-form-urlencoded;charset=utf-8"),n.toString()):Kn.isObject(n)||r&&r["Content-Type"]==="application/json"?(bs(r,"application/json"),lc(n)):n}],transformResponse:[function(n){var r=this.transitional||ii.transitional,m=r&&r.silentJSONParsing,y=r&&r.forcedJSONParsing,I=!m&&this.responseType==="json";if(I||y&&Kn.isString(n)&&n.length)try{return JSON.parse(n)}catch(F){if(I)throw F.name==="SyntaxError"?ic(F,this,"E_JSON_PARSE"):F}return n}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(n){return n>=200&&n<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};Kn.forEach(["delete","get","head"],function(n){ii.headers[n]={}}),Kn.forEach(["post","put","patch"],function(n){ii.headers[n]=Kn.merge(oc)});var oi=ii,uc=Qn,cc=oi,ac=function(n,r,m){var y=this||cc;return uc.forEach(m,function(F){n=F.call(y,n,r)}),n},ys=function(n){return!!(n&&n.__CANCEL__)},gs=Qn,ro=ac,dc=ys,hc=oi,fc=ni;function io(o){if(o.cancelToken&&o.cancelToken.throwIfRequested(),o.signal&&o.signal.aborted)throw new fc("canceled")}var mc=function(n){io(n),n.headers=n.headers||{},n.data=ro.call(n,n.data,n.headers,n.transformRequest),n.headers=gs.merge(n.headers.common||{},n.headers[n.method]||{},n.headers),gs.forEach(["delete","get","head","post","put","patch","common"],function(y){delete n.headers[y]});var r=n.adapter||hc.adapter;return r(n).then(function(y){return io(n),y.data=ro.call(n,y.data,y.headers,n.transformResponse),y},function(y){return dc(y)||(io(n),y&&y.response&&(y.response.data=ro.call(n,y.response.data,y.response.headers,n.transformResponse))),Promise.reject(y)})},tr=Qn,Zs=function(n,r){r=r||{};var m={};function y(O,st){return tr.isPlainObject(O)&&tr.isPlainObject(st)?tr.merge(O,st):tr.isPlainObject(st)?tr.merge({},st):tr.isArray(st)?st.slice():st}function I(O){if(tr.isUndefined(r[O])){if(!tr.isUndefined(n[O]))return y(void 0,n[O])}else return y(n[O],r[O])}function F(O){if(!tr.isUndefined(r[O]))return y(void 0,r[O])}function Y(O){if(tr.isUndefined(r[O])){if(!tr.isUndefined(n[O]))return y(void 0,n[O])}else return y(void 0,r[O])}function k(O){if(O in r)return y(n[O],r[O]);if(O in n)return y(void 0,n[O])}var et={url:F,method:F,data:F,baseURL:Y,transformRequest:Y,transformResponse:Y,paramsSerializer:Y,timeout:Y,timeoutMessage:Y,withCredentials:Y,adapter:Y,responseType:Y,xsrfCookieName:Y,xsrfHeaderName:Y,onUploadProgress:Y,onDownloadProgress:Y,decompress:Y,maxContentLength:Y,maxBodyLength:Y,transport:Y,httpAgent:Y,httpsAgent:Y,cancelToken:Y,socketPath:Y,responseEncoding:Y,validateStatus:k};return tr.forEach(Object.keys(n).concat(Object.keys(r)),function(st){var xt=et[st]||I,Vt=xt(st);tr.isUndefined(Vt)&&xt!==k||(m[st]=Vt)}),m},vs={version:"0.25.0"},pc=vs.version,oo={};["object","boolean","number","function","string","symbol"].forEach(function(o,n){oo[o]=function(m){return typeof m===o||"a"+(n<1?"n ":" ")+o}});var Gs={};oo.transitional=function(n,r,m){function y(I,F){return"[Axios v"+pc+"] Transitional option '"+I+"'"+F+(m?". "+m:"")}return function(I,F,Y){if(n===!1)throw new Error(y(F," has been removed"+(r?" in "+r:"")));return r&&!Gs[F]&&(Gs[F]=!0,console.warn(y(F," has been deprecated since v"+r+" and will be removed in the near future"))),n?n(I,F,Y):!0}};function bc(o,n,r){if(typeof o!="object")throw new TypeError("options must be an object");for(var m=Object.keys(o),y=m.length;y-- >0;){var I=m[y],F=n[I];if(F){var Y=o[I],k=Y===void 0||F(Y,I,o);if(k!==!0)throw new TypeError("option "+I+" must be "+k);continue}if(r!==!0)throw Error("Unknown option "+I)}}var yc={assertOptions:bc,validators:oo},Xs=Qn,gc=as,Vs=Cu,Ws=mc,si=Zs,Rs=yc,Sr=Rs.validators;function Er(o){this.defaults=o,this.interceptors={request:new Vs,response:new Vs}}Er.prototype.request=function(n,r){if(typeof n=="string"?(r=r||{},r.url=n):r=n||{},!r.url)throw new Error("Provided config url is not valid");r=si(this.defaults,r),r.method?r.method=r.method.toLowerCase():this.defaults.method?r.method=this.defaults.method.toLowerCase():r.method="get";var m=r.transitional;m!==void 0&&Rs.assertOptions(m,{silentJSONParsing:Sr.transitional(Sr.boolean),forcedJSONParsing:Sr.transitional(Sr.boolean),clarifyTimeoutError:Sr.transitional(Sr.boolean)},!1);var y=[],I=!0;this.interceptors.request.forEach(function(Vt){typeof Vt.runWhen=="function"&&Vt.runWhen(r)===!1||(I=I&&Vt.synchronous,y.unshift(Vt.fulfilled,Vt.rejected))});var F=[];this.interceptors.response.forEach(function(Vt){F.push(Vt.fulfilled,Vt.rejected)});var Y;if(!I){var k=[Ws,void 0];for(Array.prototype.unshift.apply(k,y),k=k.concat(F),Y=Promise.resolve(r);k.length;)Y=Y.then(k.shift(),k.shift());return Y}for(var et=r;y.length;){var O=y.shift(),st=y.shift();try{et=O(et)}catch(xt){st(xt);break}}try{Y=Ws(et)}catch(xt){return Promise.reject(xt)}for(;F.length;)Y=Y.then(F.shift(),F.shift());return Y},Er.prototype.getUri=function(n){if(!n.url)throw new Error("Provided config url is not valid");return n=si(this.defaults,n),gc(n.url,n.params,n.paramsSerializer).replace(/^\?/,"")},Xs.forEach(["delete","get","head","options"],function(n){Er.prototype[n]=function(r,m){return this.request(si(m||{},{method:n,url:r,data:(m||{}).data}))}}),Xs.forEach(["post","put","patch"],function(n){Er.prototype[n]=function(r,m,y){return this.request(si(y||{},{method:n,url:r,data:m}))}});var Zc=Er,vc=ni;function Yr(o){if(typeof o!="function")throw new TypeError("executor must be a function.");var n;this.promise=new Promise(function(y){n=y});var r=this;this.promise.then(function(m){if(!!r._listeners){var y,I=r._listeners.length;for(y=0;y<I;y++)r._listeners[y](m);r._listeners=null}}),this.promise.then=function(m){var y,I=new Promise(function(F){r.subscribe(F),y=F}).then(m);return I.cancel=function(){r.unsubscribe(y)},I},o(function(y){r.reason||(r.reason=new vc(y),n(r.reason))})}Yr.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},Yr.prototype.subscribe=function(n){if(this.reason){n(this.reason);return}this._listeners?this._listeners.push(n):this._listeners=[n]},Yr.prototype.unsubscribe=function(n){if(!!this._listeners){var r=this._listeners.indexOf(n);r!==-1&&this._listeners.splice(r,1)}},Yr.source=function(){var n,r=new Yr(function(y){n=y});return{token:r,cancel:n}};var Gc=Yr,Xc=function(n){return function(m){return n.apply(null,m)}},Vc=Qn,Wc=function(n){return Vc.isObject(n)&&n.isAxiosError===!0},xs=Qn,Rc=os,li=Zc,xc=Zs,Ic=oi;function Is(o){var n=new li(o),r=Rc(li.prototype.request,n);return xs.extend(r,li.prototype,n),xs.extend(r,n),r.create=function(y){return Is(xc(o,y))},r}var or=Is(Ic);or.Axios=li,or.Cancel=ni,or.CancelToken=Gc,or.isCancel=ys,or.VERSION=vs.version,or.all=function(n){return Promise.all(n)},or.spread=Xc,or.isAxiosError=Wc,_i.exports=or,_i.exports.default=or;var Sc=_i.exports;class xe{isEmpty(){return!this.isPresent()}static of(n){if(n!=null)return new Ss(n);throw new TypeError("The passed value was null or undefined.")}static ofNonNull(n){return xe.of(n)}static ofNullable(n){return n!=null?new Ss(n):new Ys}static empty(){return new Ys}static from(n){switch(n.kind){case"present":return xe.of(n.value);case"empty":return xe.empty();default:throw new TypeError("The passed value was not an Option type.")}}}class Ss extends xe{constructor(n){super(),this.payload=n}isPresent(){return!0}get(){return this.payload}ifPresent(n){n(this.payload)}ifPresentOrElse(n,r){n(this.payload)}filter(n){return n(this.payload)?this:xe.empty()}map(n){const r=n(this.payload);return xe.ofNullable(r)}flatMap(n){return n(this.payload)}or(n){return this}orElse(n){return this.payload}orElseGet(n){return this.payload}orElseThrow(n){return this.payload}orNull(){return this.payload}orUndefined(){return this.payload}toOption(){return{kind:"present",value:this.payload}}matches(n){return n.present(this.payload)}toJSON(n){return this.payload}}class Ys extends xe{isPresent(){return!1}constructor(){super()}get(){throw new TypeError("The optional is not present.")}ifPresent(n){}ifPresentOrElse(n,r){r()}filter(n){return this}map(n){return xe.empty()}flatMap(n){return xe.empty()}or(n){return n()}orElse(n){return n}orElseGet(n){return this.orElse(n())}orElseThrow(n){throw n()}orNull(){return null}orUndefined(){}toOption(){return{kind:"empty"}}matches(n){return n.empty()}toJSON(n){return null}}const Yc="2.0.0";function Tc(o){globalThis._vonageMediaProcessorMetadata=o}function Ts(){return globalThis._vonageMediaProcessorMetadata}class er{constructor(){const n=Ts();this._report={action:xe.empty(),applicationId:xe.ofNullable(n!==void 0&&n!=null?n.appId:null),timestamp:Date.now(),fps:xe.empty(),framesTransformed:xe.empty(),guid:xe.empty(),highestFrameTransformCpu:xe.empty(),message:xe.empty(),source:xe.ofNullable(n!==void 0&&n!=null?n.sourceType:null),transformedFps:xe.empty(),transformerType:xe.empty(),variation:xe.empty(),videoHeight:xe.empty(),videoWidth:xe.empty(),version:Yc,error:xe.empty(),proxyUrl:xe.ofNullable(n!==void 0&&n!=null?n.proxyUrl:null)}}action(n){return this._report.action=xe.ofNullable(n),this}framesTransformed(n){return this._report.framesTransformed=xe.ofNullable(n),this}fps(n){return this._report.fps=xe.ofNullable(n),this}guid(n){return this._report.guid=xe.ofNullable(n),this}message(n){return this._report.message=xe.ofNullable(n),this}transformedFps(n){return this._report.transformedFps=xe.ofNullable(n),this}transformerType(n){return this._report.transformerType=xe.ofNullable(n),this}variation(n){return this._report.variation=xe.ofNullable(n),this}videoHeight(n){return this._report.videoHeight=xe.ofNullable(n),this}videoWidth(n){return this._report.videoWidth=xe.ofNullable(n),this}error(n){return this._report.error=xe.ofNullable(n),this}build(){return this._report}}const wc=o=>JSON.stringify(o,(n,r)=>{if(r!==null)return r});class nr{static report(n){return new Promise((r,m)=>{if(n.applicationId.isEmpty()||n.source.isEmpty()){r("success");return}let y=Sc.create(),I={timeout:1e4,timeoutErrorMessage:"Request timeout",headers:{"Content-Type":"application/json"}},F="hlg.tokbox.com/prod/logging/vcp_webrtc";if(n.proxyUrl.isEmpty())F="https://"+F;else{let Y;n.proxyUrl.get().slice(n.proxyUrl.get().length-1)!=="/"?Y=n.proxyUrl.get()+"/":Y=n.proxyUrl.get(),F=Y+F}y.post(F,wc(n),I).then(Y=>{console.log(Y),r("success")}).catch(Y=>{console.log(Y),m(Y)})})}}var ui,Lc=new Uint8Array(16);function Fc(){if(!ui&&(ui=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!ui))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return ui(Lc)}var Hc=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Cc(o){return typeof o=="string"&&Hc.test(o)}for(var Un=[],so=0;so<256;++so)Un.push((so+256).toString(16).substr(1));function Nc(o){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,r=(Un[o[n+0]]+Un[o[n+1]]+Un[o[n+2]]+Un[o[n+3]]+"-"+Un[o[n+4]]+Un[o[n+5]]+"-"+Un[o[n+6]]+Un[o[n+7]]+"-"+Un[o[n+8]]+Un[o[n+9]]+"-"+Un[o[n+10]]+Un[o[n+11]]+Un[o[n+12]]+Un[o[n+13]]+Un[o[n+14]]+Un[o[n+15]]).toLowerCase();if(!Cc(r))throw TypeError("Stringified UUID is invalid");return r}function ws(o,n,r){o=o||{};var m=o.random||(o.rng||Fc)();if(m[6]=m[6]&15|64,m[8]=m[8]&63|128,n){r=r||0;for(var y=0;y<16;++y)n[r+y]=m[y];return n}return Nc(m)}const cr=new WeakMap,ci=new WeakMap,Kr=new WeakMap,lo=Symbol("anyProducer"),Ls=Promise.resolve(),ai=Symbol("listenerAdded"),di=Symbol("listenerRemoved");let uo=!1;function Tr(o){if(typeof o!="string"&&typeof o!="symbol")throw new TypeError("eventName must be a string or a symbol")}function hi(o){if(typeof o!="function")throw new TypeError("listener must be a function")}function wr(o,n){const r=ci.get(o);return r.has(n)||r.set(n,new Set),r.get(n)}function Ur(o,n){const r=typeof n=="string"||typeof n=="symbol"?n:lo,m=Kr.get(o);return m.has(r)||m.set(r,new Set),m.get(r)}function Jc(o,n,r){const m=Kr.get(o);if(m.has(n))for(const y of m.get(n))y.enqueue(r);if(m.has(lo)){const y=Promise.all([n,r]);for(const I of m.get(lo))I.enqueue(y)}}function Fs(o,n){n=Array.isArray(n)?n:[n];let r=!1,m=()=>{},y=[];const I={enqueue(F){y.push(F),m()},finish(){r=!0,m()}};for(const F of n)Ur(o,F).add(I);return{async next(){return y?y.length===0?r?(y=void 0,this.next()):(await new Promise(F=>{m=F}),this.next()):{done:!1,value:await y.shift()}:{done:!0}},async return(F){y=void 0;for(const Y of n)Ur(o,Y).delete(I);return m(),arguments.length>0?{done:!0,value:await F}:{done:!0}},[Symbol.asyncIterator](){return this}}}function Hs(o){if(o===void 0)return Cs;if(!Array.isArray(o))throw new TypeError("`methodNames` must be an array of strings");for(const n of o)if(!Cs.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return o}const co=o=>o===ai||o===di;class gr{static mixin(n,r){return r=Hs(r),m=>{if(typeof m!="function")throw new TypeError("`target` must be function");for(const F of r)if(m.prototype[F]!==void 0)throw new Error(`The property \`${F}\` already exists on \`target\``);function y(){return Object.defineProperty(this,n,{enumerable:!1,value:new gr}),this[n]}Object.defineProperty(m.prototype,n,{enumerable:!1,get:y});const I=F=>function(...Y){return this[n][F](...Y)};for(const F of r)Object.defineProperty(m.prototype,F,{enumerable:!1,value:I(F)});return m}}static get isDebugEnabled(){if(typeof process!="object")return uo;const{env:n}=process||{env:{}};return n.DEBUG==="emittery"||n.DEBUG==="*"||uo}static set isDebugEnabled(n){uo=n}constructor(n={}){cr.set(this,new Set),ci.set(this,new Map),Kr.set(this,new Map),this.debug=n.debug||{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(r,m,y,I)=>{I=JSON.stringify(I),typeof y=="symbol"&&(y=y.toString());const F=new Date,Y=`${F.getHours()}:${F.getMinutes()}:${F.getSeconds()}.${F.getMilliseconds()}`;console.log(`[${Y}][emittery:${r}][${m}] Event Name: ${y}
|
|
3
|
-
data: ${I}`)})}logIfDebugEnabled(n,r,m){(gr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,m)}on(n,r){hi(r),n=Array.isArray(n)?n:[n];for(const m of n)Tr(m),wr(this,m).add(r),this.logIfDebugEnabled("subscribe",m,void 0),co(m)||this.emit(ai,{eventName:m,listener:r});return this.off.bind(this,n,r)}off(n,r){hi(r),n=Array.isArray(n)?n:[n];for(const m of n)Tr(m),wr(this,m).delete(r),this.logIfDebugEnabled("unsubscribe",m,void 0),co(m)||this.emit(di,{eventName:m,listener:r})}once(n){return new Promise(r=>{const m=this.on(n,y=>{m(),r(y)})})}events(n){n=Array.isArray(n)?n:[n];for(const r of n)Tr(r);return Fs(this,n)}async emit(n,r){Tr(n),this.logIfDebugEnabled("emit",n,r),Jc(this,n,r);const m=wr(this,n),y=cr.get(this),I=[...m],F=co(n)?[]:[...y];await Ls,await Promise.all([...I.map(async Y=>{if(m.has(Y))return Y(r)}),...F.map(async Y=>{if(y.has(Y))return Y(n,r)})])}async emitSerial(n,r){Tr(n),this.logIfDebugEnabled("emitSerial",n,r);const m=wr(this,n),y=cr.get(this),I=[...m],F=[...y];await Ls;for(const Y of I)m.has(Y)&&await Y(r);for(const Y of F)y.has(Y)&&await Y(n,r)}onAny(n){return hi(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),cr.get(this).add(n),this.emit(ai,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return Fs(this)}offAny(n){hi(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(di,{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"){wr(this,r).clear();const m=Ur(this,r);for(const y of m)y.finish();m.clear()}else{cr.get(this).clear();for(const m of ci.get(this).values())m.clear();for(const m of Kr.get(this).values()){for(const y of m)y.finish();m.clear()}}}listenerCount(n){n=Array.isArray(n)?n:[n];let r=0;for(const m of n){if(typeof m=="string"){r+=cr.get(this).size+wr(this,m).size+Ur(this,m).size+Ur(this).size;continue}typeof m<"u"&&Tr(m),r+=cr.get(this).size;for(const y of ci.get(this).values())r+=y.size;for(const y of Kr.get(this).values())r+=y.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 m of r){if(n[m]!==void 0)throw new Error(`The property \`${m}\` already exists on \`target\``);Object.defineProperty(n,m,{enumerable:!1,value:this[m].bind(this)})}}}const Cs=Object.getOwnPropertyNames(gr.prototype).filter(o=>o!=="constructor");Object.defineProperty(gr,"listenerAdded",{value:ai,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(gr,"listenerRemoved",{value:di,writable:!1,enumerable:!0,configurable:!1});var ao=gr;function kc(o){return typeof o=="object"&&o!==null&&"message"in o&&typeof o.message=="string"}function Ec(o){if(kc(o))return o;try{return new Error(JSON.stringify(o))}catch{return new Error(String(o))}}function ho(o){return Ec(o).message}var Ns=(o=>(o.FPS_DROP="fps_drop",o))(Ns||{}),Js=(o=>(o.start="start",o.transform="transform",o.flush="flush",o))(Js||{}),fi=(o=>(o.pipeline_ended="pipeline_ended",o.pipeline_ended_with_error="pipeline_ended_with_error",o.pipeline_started="pipeline_started",o.pipeline_started_with_error="pipeline_started_with_error",o.pipeline_restarted="pipeline_restarted",o.pipeline_restarted_with_error="pipeline_restarted_with_error",o))(fi||{});const Kc=500,Uc=.8;class Mc extends ao{constructor(n,r){super(),this.index_=r,this.uuid_=ws(),this.framesTransformed_=0,this.transformer_=n,this.shouldStop_=!1,this.isFlashed_=!1,this.framesFromSource_=0,this.fps_=0,this.mediaTransformerQosReportStartTimestamp_=0,this.videoHeight_=0,this.videoWidth_=0,this.trackExpectedRate_=-1,this.transformerType_="Custom","getTransformerType"in n&&(this.transformerType_=n.getTransformerType());const m=new er().action("MediaTransformer").guid(this.uuid_).transformerType(this.transformerType_).variation("Create").build();nr.report(m)}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){const m=new er().action("MediaTransformer").guid(this.uuid_).message(On.errors.transformer_start).transformerType(this.transformerType_).variation("Error").error(ho(r)).build();nr.report(m);const y={eventMetaData:{transformerIndex:this.index_},error:r,function:"start"};this.emit("error",y)}}async transform(n,r){var m,y,I,F;if(this.mediaTransformerQosReportStartTimestamp_===0&&(this.mediaTransformerQosReportStartTimestamp_=Date.now()),n instanceof VideoFrame&&(this.videoHeight_=(m=n==null?void 0:n.displayHeight)!=null?m:0,this.videoWidth_=(y=n==null?void 0:n.displayWidth)!=null?y:0),++this.framesFromSource_,this.transformer_)if(this.shouldStop_)console.warn("[Pipeline] flush from transform"),n.close(),this.flush(r),r.terminate();else try{await((F=(I=this.transformer_).transform)==null?void 0:F.call(I,n,r)),++this.framesTransformed_,this.framesTransformed_===Kc&&this.mediaTransformerQosReport()}catch(Y){const k=new er().action("MediaTransformer").guid(this.uuid_).message(On.errors.transformer_transform).transformerType(this.transformerType_).variation("Error").error(ho(Y)).build();nr.report(k);const et={eventMetaData:{transformerIndex:this.index_},error:Y,function:"transform"};this.emit("error",et)}}async flush(n){if(this.transformer_&&typeof this.transformer_.flush=="function"&&!this.isFlashed_){this.isFlashed_=!0;try{await this.transformer_.flush(n)}catch(m){const y=new er().action("MediaTransformer").guid(this.uuid_).message(On.errors.transformer_flush).transformerType(this.transformerType_).variation("Error").error(ho(m)).build();nr.report(y);const I={eventMetaData:{transformerIndex:this.index_},error:m,function:"flush"};this.emit("error",I)}}this.mediaTransformerQosReport();const r=new er().action("MediaTransformer").guid(this.uuid_).transformerType(this.transformerType_).variation("Delete").build();nr.report(r)}stop(){console.log("[Pipeline] Stop stream."),this.controller_&&(this.flush(this.controller_),this.controller_.terminate()),this.shouldStop_=!0}mediaTransformerQosReport(){let n=(Date.now()-this.mediaTransformerQosReportStartTimestamp_)/1e3,r=this.framesFromSource_/n,m=this.framesTransformed_/n;if(this.trackExpectedRate_!=-1&&this.trackExpectedRate_*Uc>r){const I={eventMetaData:{transformerIndex:this.index_},warningType:"fps_drop",dropInfo:{requested:this.trackExpectedRate_,current:r}};this.emit("warn",I)}const y=new er().action("MediaTransformer").fps(r).transformedFps(m).framesTransformed(this.framesTransformed_).guid(this.uuid_).transformerType(this.transformerType_).videoHeight(this.videoHeight_).videoWidth(this.videoWidth_).variation("QoS").build();nr.report(y),this.mediaTransformerQosReportStartTimestamp_=0,this.framesFromSource_=0,this.framesTransformed_=0}}class Bc extends ao{constructor(n){super(),this.transformers_=[],this.trackExpectedRate_=-1;for(let r=0;r<n.length;r++){let m=new Mc(n[r],r);m.on("error",y=>{this.emit("error",y)}),m.on("warn",y=>{this.emit("warn",y)}),this.transformers_.push(m)}}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 m=n;for(let y of this.transformers_)n=n.pipeThrough(new TransformStream(y));n.pipeTo(r).then(async()=>{console.log("[Pipeline] Setup."),await r.abort(),await m.cancel(),this.emit("pipelineInfo","pipeline_ended")}).catch(async y=>{n.cancel().then(()=>{console.log("[Pipeline] Shutting down streams after abort.")}).catch(I=>{console.error("[Pipeline] Error from stream transform:",I)}),await r.abort(y),await m.cancel(y),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 Ac extends ao{constructor(){super(),this.uuid_=ws(),this.trackExpectedRate_=-1;const n=new er().action("MediaProcessor").guid(this.uuid_).variation("Create").build();nr.report(n)}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((n,r)=>{if(!this.transformers_||this.transformers_.length===0){const y=new er().action("MediaProcessor").guid(this.uuid_).message(On.errors.transformer_none).variation("Error").build();nr.report(y),r("[MediaProcessor] Need to set transformers.");return}if(!this.readable_){const y=new er().action("MediaProcessor").guid(this.uuid_).message(On.errors.readable_null).variation("Error").build();nr.report(y),r("[MediaProcessor] Readable is null.");return}if(!this.writable_){const y=new er().action("MediaProcessor").guid(this.uuid_).message(On.errors.writable_null).variation("Error").build();nr.report(y),r("[MediaProcessor] Writable is null.");return}let m=!1;this.pipeline_&&(m=!0,this.pipeline_.clearListeners(),this.pipeline_.destroy()),this.pipeline_=new Bc(this.transformers_),this.pipeline_.on("warn",y=>{this.emit("warn",y)}),this.pipeline_.on("error",y=>{this.emit("error",y)}),this.pipeline_.on("pipelineInfo",y=>{m&&(y==="pipeline_started"?y=fi.pipeline_restarted:y==="pipeline_started_with_error"&&(y=fi.pipeline_restarted_with_error)),this.emit("pipelineInfo",y)}),this.trackExpectedRate_!=-1&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_),this.pipeline_.start(this.readable_,this.writable_).then(()=>{n()}).catch(y=>{r(y)})})}setTransformers(n){const r=new er().action("MediaProcessor").guid(this.uuid_).message(On.updates.transformer_new).variation("Update").build();return nr.report(r),this.transformers_=n,this.readable_&&this.writable_?this.transformInternal():Promise.resolve()}destroy(){return new Promise(n=>{this.pipeline_&&this.pipeline_.destroy();const r=new er().action("MediaProcessor").guid(this.uuid_).variation("Delete").build();nr.report(r),n()})}}class jc{constructor(){this.processor_=null,this.generator_=null}init(n){return new Promise((r,m)=>{try{this.processor_=new MediaStreamTrackProcessor(n)}catch(y){console.log(`[InsertableStreamHelper] MediaStreamTrackProcessor failed: ${y}`),m(y)}try{n.kind==="audio"?this.generator_=new MediaStreamTrackGenerator({kind:"audio"}):n.kind==="video"?this.generator_=new MediaStreamTrackGenerator({kind:"video"}):m("kind not supported")}catch(y){console.log(`[InsertableStreamHelper] MediaStreamTrackGenerator failed: ${y}`),m(y)}r()})}getReadable(){return this.processor_.readable}getWriteable(){return this.generator_.writable}getProccesorTrack(){return this.generator_}}class zc{constructor(n){this.insertableStreamHelper_=new jc,this.mediaProcessor_=n}setTrack(n){return new Promise((r,m)=>{this.insertableStreamHelper_.init(n).then(()=>{this.mediaProcessor_.transform(this.insertableStreamHelper_.getReadable(),this.insertableStreamHelper_.getWriteable()).then(()=>{r(this.insertableStreamHelper_.getProccesorTrack())}).catch(y=>{m(y)})}).catch(y=>{m(y)})})}destroy(){return new Promise((n,r)=>{this.mediaProcessor_?this.mediaProcessor_.destroy().then(()=>{n()}).catch(m=>{r(m)}):r("no processor")})}}var Mr=(o=>(o.Low="Low",o.High="High",o))(Mr||{}),ks=(o=>(o.BackgroundBlur="BackgroundBlur",o.VirtualBackground="VirtualBackground",o.VideoBackground="VideoBackground",o.SilhouetteBlur="SilhouetteBlur",o))(ks||{}),Es=(o=>(o.FAST="FAST",o.PRECISE="PRECISE",o))(Es||{});const Oc=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 Pc=function(){var o=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return function(n){n=n||{};var r=typeof n<"u"?n:{},m,y;r.ready=new Promise(function(nt,ot){m=nt,y=ot});var I={},F;for(F in r)r.hasOwnProperty(F)&&(I[F]=r[F]);var Y="./this.program",k=function(nt,ot){throw ot},et=!0,O="";function st(nt){return r.locateFile?r.locateFile(nt,O):O+nt}var xt;typeof document<"u"&&document.currentScript&&(O=document.currentScript.src),o&&(O=o),O.indexOf("blob:")!==0?O=O.substr(0,O.replace(/[?#].*/,"").lastIndexOf("/")+1):O="";var Vt=r.print||console.log.bind(console),dt=r.printErr||console.warn.bind(console);for(F in I)I.hasOwnProperty(F)&&(r[F]=I[F]);I=null,r.arguments&&r.arguments,r.thisProgram&&(Y=r.thisProgram),r.quit&&(k=r.quit);var ht;r.wasmBinary&&(ht=r.wasmBinary);var Ht=r.noExitRuntime||!0;typeof WebAssembly!="object"&&he("no native wasm support detected");var Lt,At=!1,_=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function Ee(nt,ot,at){for(var _t=ot+at,ae=ot;nt[ae]&&!(ae>=_t);)++ae;if(ae-ot>16&&nt.subarray&&_)return _.decode(nt.subarray(ot,ae));for(var ue="";ot<ae;){var Tt=nt[ot++];if(!(Tt&128)){ue+=String.fromCharCode(Tt);continue}var me=nt[ot++]&63;if((Tt&224)==192){ue+=String.fromCharCode((Tt&31)<<6|me);continue}var Ne=nt[ot++]&63;if((Tt&240)==224?Tt=(Tt&15)<<12|me<<6|Ne:Tt=(Tt&7)<<18|me<<12|Ne<<6|nt[ot++]&63,Tt<65536)ue+=String.fromCharCode(Tt);else{var qe=Tt-65536;ue+=String.fromCharCode(55296|qe>>10,56320|qe&1023)}}return ue}function an(nt,ot){return nt?Ee(gt,nt,ot):""}function We(nt,ot,at){for(var _t=0;_t<nt.length;++_t)de[ot++>>0]=nt.charCodeAt(_t);at||(de[ot>>0]=0)}function $t(nt,ot){return nt%ot>0&&(nt+=ot-nt%ot),nt}var An,de,gt,pn;function jn(nt){An=nt,r.HEAP8=de=new Int8Array(nt),r.HEAP16=new Int16Array(nt),r.HEAP32=pn=new Int32Array(nt),r.HEAPU8=gt=new Uint8Array(nt),r.HEAPU16=new Uint16Array(nt),r.HEAPU32=new Uint32Array(nt),r.HEAPF32=new Float32Array(nt),r.HEAPF64=new Float64Array(nt)}r.INITIAL_MEMORY;var Re,Jt=[],Te=[],on=[],Xn=0;function Fn(){return Ht||Xn>0}function xn(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)bn(r.preRun.shift());Qt(Jt)}function Nn(){Qt(Te)}function dn(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)Hn(r.postRun.shift());Qt(on)}function bn(nt){Jt.unshift(nt)}function kn(nt){Te.unshift(nt)}function Hn(nt){on.unshift(nt)}var Oe=0,je=null;function In(nt){Oe++,r.monitorRunDependencies&&r.monitorRunDependencies(Oe)}function Vn(nt){if(Oe--,r.monitorRunDependencies&&r.monitorRunDependencies(Oe),Oe==0&&je){var ot=je;je=null,ot()}}r.preloadedImages={},r.preloadedAudios={};function he(nt){r.onAbort&&r.onAbort(nt),nt="Aborted("+nt+")",dt(nt),At=!0,nt+=". Build with -s ASSERTIONS=1 for more info.";var ot=new WebAssembly.RuntimeError(nt);throw y(ot),ot}var Ye="data:application/octet-stream;base64,";function Pe(nt){return nt.startsWith(Ye)}var ne;ne="tflite-simd.wasm",Pe(ne)||(ne=st(ne));function Ve(nt){try{if(nt==ne&&ht)return new Uint8Array(ht);if(!xt)throw"both async and sync fetching of the wasm failed"}catch(ot){he(ot)}}function sn(){return!ht&&et&&typeof fetch=="function"?fetch(ne,{credentials:"same-origin"}).then(function(nt){if(!nt.ok)throw"failed to load wasm binary file at '"+ne+"'";return nt.arrayBuffer()}).catch(function(){return Ve(ne)}):Promise.resolve().then(function(){return Ve(ne)})}function Me(){var nt={a:fe};function ot(Tt,me){var Ne=Tt.exports;r.asm=Ne,Lt=r.asm.q,jn(Lt.buffer),Re=r.asm.E,kn(r.asm.r),Vn()}In();function at(Tt){ot(Tt.instance)}function _t(Tt){return sn().then(function(me){return WebAssembly.instantiate(me,nt)}).then(function(me){return me}).then(Tt,function(me){dt("failed to asynchronously prepare wasm: "+me),he(me)})}function ae(){return!ht&&typeof WebAssembly.instantiateStreaming=="function"&&!Pe(ne)&&typeof fetch=="function"?fetch(ne,{credentials:"same-origin"}).then(function(Tt){var me=WebAssembly.instantiateStreaming(Tt,nt);return me.then(at,function(Ne){return dt("wasm streaming compile failed: "+Ne),dt("falling back to ArrayBuffer instantiation"),_t(at)})}):_t(at)}if(r.instantiateWasm)try{var ue=r.instantiateWasm(nt,ot);return ue}catch(Tt){return dt("Module.instantiateWasm callback failed with error: "+Tt),!1}return ae().catch(y),{}}function Qt(nt){for(;nt.length>0;){var ot=nt.shift();if(typeof ot=="function"){ot(r);continue}var at=ot.func;typeof at=="number"?ot.arg===void 0?Re.get(at)():Re.get(at)(ot.arg):at(ot.arg===void 0?null:ot.arg)}}function Ze(nt,ot,at,_t){he("Assertion failed: "+an(nt)+", at: "+[ot?an(ot):"unknown filename",at,_t?an(_t):"unknown function"])}function Ce(nt,ot){he("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function Bt(nt,ot){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 zt;zt=function(){return performance.now()};var ye=!0;function we(nt){return pn[Nt()>>2]=nt,nt}function $e(nt,ot){var at;if(nt===0)at=Date.now();else if((nt===1||nt===4)&&ye)at=zt();else return we(28),-1;return pn[ot>>2]=at/1e3|0,pn[ot+4>>2]=at%1e3*1e3*1e3|0,0}function Xe(){return 2147483648}function Ot(nt,ot,at){gt.copyWithin(nt,ot,ot+at)}function ze(nt){try{return Lt.grow(nt-An.byteLength+65535>>>16),jn(Lt.buffer),1}catch{}}function _e(nt){var ot=gt.length;nt=nt>>>0;var at=2147483648;if(nt>at)return!1;for(var _t=1;_t<=4;_t*=2){var ae=ot*(1+.2/_t);ae=Math.min(ae,nt+100663296);var ue=Math.min(at,$t(Math.max(nt,ae),65536)),Tt=ze(ue);if(Tt)return!0}return!1}function Se(nt){for(var ot=zt();zt()-ot<nt;);}var Wn={};function ln(){return Y||"./this.program"}function Qe(){if(!Qe.strings){var nt=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",ot={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:nt,_:ln()};for(var at in Wn)Wn[at]===void 0?delete ot[at]:ot[at]=Wn[at];var _t=[];for(var at in ot)_t.push(at+"="+ot[at]);Qe.strings=_t}return Qe.strings}var un={mappings:{},buffers:[null,[],[]],printChar:function(nt,ot){var at=un.buffers[nt];ot===0||ot===10?((nt===1?Vt:dt)(Ee(at,0)),at.length=0):at.push(ot)},varargs:void 0,get:function(){un.varargs+=4;var nt=pn[un.varargs-4>>2];return nt},getStr:function(nt){var ot=an(nt);return ot},get64:function(nt,ot){return nt}};function ve(nt,ot){var at=0;return Qe().forEach(function(_t,ae){var ue=ot+at;pn[nt+ae*4>>2]=ue,We(_t,ue),at+=_t.length+1}),0}function Le(nt,ot){var at=Qe();pn[nt>>2]=at.length;var _t=0;return at.forEach(function(ae){_t+=ae.length+1}),pn[ot>>2]=_t,0}function Ge(nt){ee(nt)}function re(nt){return 0}function De(nt,ot,at,_t,ae){}function te(nt,ot,at,_t){for(var ae=0,ue=0;ue<at;ue++){for(var Tt=pn[ot+ue*8>>2],me=pn[ot+(ue*8+4)>>2],Ne=0;Ne<me;Ne++)un.printChar(nt,gt[Tt+Ne]);ae+=me}return pn[_t>>2]=ae,0}function Pt(){if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function"){var nt=new Uint8Array(1);return function(){return crypto.getRandomValues(nt),nt[0]}}else return function(){he("randomDevice")}}function hn(nt,ot){hn.randomDevice||(hn.randomDevice=Pt());for(var at=0;at<ot;at++)de[nt+at>>0]=hn.randomDevice();return 0}var fe={a:Ze,e:Ce,d:Bt,b:Ie,n:$e,h:Xe,l:Ot,m:_e,p:Se,f:ve,g:Le,j:Ge,i:re,k:De,c:te,o:hn};Me(),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 Nt=r.___errno_location=function(){return(Nt=r.___errno_location=r.asm.F).apply(null,arguments)},Wt;function ie(nt){this.name="ExitStatus",this.message="Program terminated with exit("+nt+")",this.status=nt}je=function nt(){Wt||Fe(),Wt||(je=nt)};function Fe(nt){if(Oe>0||(xn(),Oe>0))return;function ot(){Wt||(Wt=!0,r.calledRun=!0,!At&&(Nn(),m(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),dn()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),ot()},1)):ot()}r.run=Fe;function ee(nt,ot){oe(nt)}function oe(nt){Fn()||(r.onExit&&r.onExit(nt),At=!0),k(nt,new ie(nt))}if(r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return Fe(),n.ready}}();class _c{constructor(){Rt(this,"selectedTFLite");Rt(this,"isSIMDSupported",!1);Rt(this,"isThreadsSupported",!1);Rt(this,"inputWidth",0);Rt(this,"inputHeight",0);Rt(this,"inputChannelCount",0);Rt(this,"inputMemoryOffset",0);Rt(this,"outputWidth",0);Rt(this,"outputHeight",0);Rt(this,"outputChannelCount",0);Rt(this,"outputMemoryOffset",0)}}const Qc="https://d3opqjmqzxf057.cloudfront.net/vonage-tensorflow-wasm/tflite-simd-wasm/1.1.3/",Dc="https://d3opqjmqzxf057.cloudfront.net/ml/selfie_segmentation/4.0.0/";async function $c(o=Qc,n=Dc){let r=new _c;var m=new Promise(function(y,I){async function F(){return Pc({locateFile:function(et){return o+et}})}async function Y(k){return new Promise(async(et,O)=>{const st=k;if(typeof st>"u")return O("TFLite backend unavailable: wasmSimd");const xt="selfie_segmentation_landscape";console.log("Loading tflite model:",xt);let Vt=n+`${xt}.tflite`;console.log("TFLite modelUrl: "+Vt);try{const ht=await(await fetch(Vt)).arrayBuffer();console.log("Model buffer size:",ht.byteLength);const Ht=st._getModelBufferMemoryOffset();console.log("Model buffer memory offset:",Ht),console.log("Loading model buffer..."),st.HEAPU8.set(new Uint8Array(ht),Ht);const Lt=st._loadModel(ht.byteLength);if(console.log("Load model result:",Lt),Lt!==0){O("Cannot load model");return}r.inputWidth=st._getInputWidth(),r.inputHeight=st._getInputHeight(),r.inputChannelCount=st._getInputChannelCount(),r.inputMemoryOffset=st._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=st._getOutputMemoryOffset(),r.outputWidth=st._getOutputWidth(),r.outputHeight=st._getOutputHeight(),r.outputChannelCount=st._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=st}catch(dt){O(dt);return}et()})}F().then(k=>{if(k===null)throw console.error("loadTFLite null"),"loadTFLite null";Y(k).then(et=>{y(r)}).catch(et=>{console.error("loadTFLiteModel error"),I("loadTFLiteModel error")})}).catch(k=>{console.error("loadTFLite error:",k),I("loadTFLite error:"+k)})});return m}class Ks{constructor(){Rt(this,"canvas",new OffscreenCanvas(0,0));Rt(this,"context",this.canvas.getContext("2d",{willReadFrequently:!0}));Rt(this,"pixelCount",0);Rt(this,"inputOffset",0);Rt(this,"outputOffset",0);Rt(this,"infos");Rt(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 $c(n,r)}getOutputDimensions(){var n,r,m,y;return{width:(r=(n=this.infos)==null?void 0:n.outputWidth)!=null?r:0,height:(y=(m=this.infos)==null?void 0:m.outputHeight)!=null?y:0}}async process(n){if(!this.mask||!this.infos)return;const r=this.infos.inputWidth,m=this.infos.inputHeight;this.context.drawImage(n,0,0,n.width,n.height,0,0,r,m);const y=this.context.getImageData(0,0,r,m),I=this.infos.selectedTFLite.HEAPF32;for(let F=0;F<this.pixelCount;F++){const Y=this.inputOffset+F*3;I[Y]=y.data[F*4]/255,I[Y+1]=y.data[F*4+1]/255,I[Y+2]=y.data[F*4+2]/255}this.infos.selectedTFLite._runInference();for(let F=0;F<this.pixelCount;F++){const Y=this.infos.selectedTFLite.HEAPF32[this.outputOffset+F];this.mask.data[F*4]=this.mask.data[F*4+3]=255*Y}return createImageBitmap(this.mask)}isGpuSupported(){var n,r,m;return(m=(r=(n=this.infos)==null?void 0:n.selectedTFLite)==null?void 0:r._isGPUEnabled())!=null?m:!1}}async function qc(o,n){const{wasm:r,insertableStreams:m,simd:y,webgl:I}=await Us(o,n);if(!r.supported)throw r.message;if(!m.supported)throw m.message;if(!y.supported)throw y.message;if(!I.supported)throw I.message}async function Us(o,n){const r=new Ks;await r.initWasm(o,n);const m={wasm:{supported:typeof WebAssembly=="object"&&typeof WebAssembly.instantiate=="function",message:"Your browser does not support WebAssembly features."},simd:{supported:await Oc(),message:"Your browser does not support simd features."},insertableStreams:{supported:!0},gpu:{supported:r.isGpuSupported(),message:"Your browser does not support gpu features."},webgl:t2()};try{await qn()}catch(y){m.insertableStreams.supported=!1,m.insertableStreams.message=y}return m}function t2(){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"}}const mi={};(function(){var o;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 m(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 y=m(this);function I(p,V){if(V)t:{var W=y;p=p.split(".");for(var E=0;E<p.length-1;E++){var P=p[E];if(!(P in W))break t;W=W[P]}p=p[p.length-1],E=W[p],V=V(E),V!=E&&V!=null&&r(W,p,{configurable:!0,writable:!0,value:V})}}I("Symbol",function(p){function V(lt){if(this instanceof V)throw new TypeError("Symbol is not a constructor");return new W(E+(lt||"")+"_"+P++,lt)}function W(lt,z){this.g=lt,r(this,"description",{configurable:!0,writable:!0,value:z})}if(p)return p;W.prototype.toString=function(){return this.g};var E="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",P=0;return V}),I("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=y[V[W]];typeof E=="function"&&typeof E.prototype[p]!="function"&&r(E.prototype,p,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return p});function F(p){return p={next:p},p[Symbol.iterator]=function(){return this},p}function Y(p){var V=typeof Symbol<"u"&&Symbol.iterator&&p[Symbol.iterator];return V?V.call(p):{next:n(p)}}function k(p){if(!(p instanceof Array)){p=Y(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},O;if(typeof Object.setPrototypeOf=="function")O=Object.setPrototypeOf;else{var st;t:{var xt={a:!0},Vt={};try{Vt.__proto__=xt,st=Vt.a;break t}catch{}st=!1}O=st?function(p,V){if(p.__proto__=V,p.__proto__!==V)throw new TypeError(p+" is not extensible");return p}:null}var dt=O;function ht(p,V){if(p.prototype=et(V.prototype),p.prototype.constructor=p,dt)dt(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 Ht(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Lt(p){if(p.l)throw new TypeError("Generator is already running");p.l=!0}Ht.prototype.o=function(p){this.h=p};function At(p,V){p.j={U:V,V:!0},p.g=p.m||p.s}Ht.prototype.return=function(p){this.j={return:p},this.g=this.s};function _(p,V,W){return p.g=W,{value:V}}function Ee(p){this.g=new Ht,this.h=p}function an(p,V){Lt(p.g);var W=p.g.i;return W?We(p,"return"in W?W.return:function(E){return{value:E,done:!0}},V,p.g.return):(p.g.return(V),$t(p))}function We(p,V,W,E){try{var P=V.call(p.g.i,W);if(!(P instanceof Object))throw new TypeError("Iterator result "+P+" is not an object");if(!P.done)return p.g.l=!1,P;var lt=P.value}catch(z){return p.g.i=null,At(p.g,z),$t(p)}return p.g.i=null,E.call(p.g,lt),$t(p)}function $t(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,At(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 An(p){this.next=function(V){return Lt(p.g),p.g.i?V=We(p,p.g.i.next,V,p.g.o):(p.g.o(V),V=$t(p)),V},this.throw=function(V){return Lt(p.g),p.g.i?V=We(p,p.g.i.throw,V,p.g.o):(At(p.g,V),V=$t(p)),V},this.return=function(V){return an(p,V)},this[Symbol.iterator]=function(){return this}}function de(p,V){return V=new An(new Ee(V)),dt&&p.prototype&&dt(V,p.prototype),V}function gt(p,V){p instanceof String&&(p+="");var W=0,E=!1,P={next:function(){if(!E&&W<p.length){var lt=W++;return{value:V(lt,p[lt]),done:!1}}return E=!0,{done:!0,value:void 0}}};return P[Symbol.iterator]=function(){return P},P}var pn=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 P in E)Object.prototype.hasOwnProperty.call(E,P)&&(p[P]=E[P])}return p};I("Object.assign",function(p){return p||pn}),I("Promise",function(p){function V(z){this.h=0,this.i=void 0,this.g=[],this.o=!1;var it=this.j();try{z(it.resolve,it.reject)}catch(bt){it.reject(bt)}}function W(){this.g=null}function E(z){return z instanceof V?z:new V(function(it){it(z)})}if(p)return p;W.prototype.h=function(z){if(this.g==null){this.g=[];var it=this;this.i(function(){it.l()})}this.g.push(z)};var P=y.setTimeout;W.prototype.i=function(z){P(z,0)},W.prototype.l=function(){for(;this.g&&this.g.length;){var z=this.g;this.g=[];for(var it=0;it<z.length;++it){var bt=z[it];z[it]=null;try{bt()}catch(It){this.j(It)}}}this.g=null},W.prototype.j=function(z){this.i(function(){throw z})},V.prototype.j=function(){function z(It){return function(Ut){bt||(bt=!0,It.call(it,Ut))}}var it=this,bt=!1;return{resolve:z(this.C),reject:z(this.l)}},V.prototype.C=function(z){if(z===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(z instanceof V)this.F(z);else{t:switch(typeof z){case"object":var it=z!=null;break t;case"function":it=!0;break t;default:it=!1}it?this.u(z):this.m(z)}},V.prototype.u=function(z){var it=void 0;try{it=z.then}catch(bt){this.l(bt);return}typeof it=="function"?this.G(it,z):this.m(z)},V.prototype.l=function(z){this.s(2,z)},V.prototype.m=function(z){this.s(1,z)},V.prototype.s=function(z,it){if(this.h!=0)throw Error("Cannot settle("+z+", "+it+"): Promise already settled in state"+this.h);this.h=z,this.i=it,this.h===2&&this.D(),this.A()},V.prototype.D=function(){var z=this;P(function(){if(z.B()){var it=y.console;typeof it<"u"&&it.error(z.i)}},1)},V.prototype.B=function(){if(this.o)return!1;var z=y.CustomEvent,it=y.Event,bt=y.dispatchEvent;return typeof bt>"u"?!0:(typeof z=="function"?z=new z("unhandledrejection",{cancelable:!0}):typeof it=="function"?z=new it("unhandledrejection",{cancelable:!0}):(z=y.document.createEvent("CustomEvent"),z.initCustomEvent("unhandledrejection",!1,!0,z)),z.promise=this,z.reason=this.i,bt(z))},V.prototype.A=function(){if(this.g!=null){for(var z=0;z<this.g.length;++z)lt.h(this.g[z]);this.g=null}};var lt=new W;return V.prototype.F=function(z){var it=this.j();z.J(it.resolve,it.reject)},V.prototype.G=function(z,it){var bt=this.j();try{z.call(it,bt.resolve,bt.reject)}catch(It){bt.reject(It)}},V.prototype.then=function(z,it){function bt(qt,Et){return typeof qt=="function"?function(wt){try{It(qt(wt))}catch(Kt){Ut(Kt)}}:Et}var It,Ut,kt=new V(function(qt,Et){It=qt,Ut=Et});return this.J(bt(z,It),bt(it,Ut)),kt},V.prototype.catch=function(z){return this.then(void 0,z)},V.prototype.J=function(z,it){function bt(){switch(It.h){case 1:z(It.i);break;case 2:it(It.i);break;default:throw Error("Unexpected state: "+It.h)}}var It=this;this.g==null?lt.h(bt):this.g.push(bt),this.o=!0},V.resolve=E,V.reject=function(z){return new V(function(it,bt){bt(z)})},V.race=function(z){return new V(function(it,bt){for(var It=Y(z),Ut=It.next();!Ut.done;Ut=It.next())E(Ut.value).J(it,bt)})},V.all=function(z){var it=Y(z),bt=it.next();return bt.done?E([]):new V(function(It,Ut){function kt(wt){return function(Kt){qt[wt]=Kt,Et--,Et==0&&It(qt)}}var qt=[],Et=0;do qt.push(void 0),Et++,E(bt.value).J(kt(qt.length-1),Ut),bt=it.next();while(!bt.done)})},V}),I("Object.is",function(p){return p||function(V,W){return V===W?V!==0||1/V===1/W:V!==V&&W!==W}}),I("Array.prototype.includes",function(p){return p||function(V,W){var E=this;E instanceof String&&(E=String(E));var P=E.length;for(W=W||0,0>W&&(W=Math.max(W+P,0));W<P;W++){var lt=E[W];if(lt===V||Object.is(lt,V))return!0}return!1}}),I("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}}),I("Array.prototype.keys",function(p){return p||function(){return gt(this,function(V){return V})}});var jn=this||self;function Re(p,V){p=p.split(".");var W=jn;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 Jt(p,V){return V=String.fromCharCode.apply(null,V),p==null?V:p+V}var Te,on=typeof TextDecoder<"u",Xn,Fn=typeof TextEncoder<"u";function xn(p){if(Fn)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),P=0;P<p.length;P++){var lt=p.charCodeAt(P);if(128>lt)E[W++]=lt;else{if(2048>lt)E[W++]=lt>>6|192;else{if(55296<=lt&&57343>=lt){if(56319>=lt&&P<p.length){var z=p.charCodeAt(++P);if(56320<=z&&57343>=z){lt=1024*(lt-55296)+z-56320+65536,E[W++]=lt>>18|240,E[W++]=lt>>12&63|128,E[W++]=lt>>6&63|128,E[W++]=lt&63|128;continue}else P--}if(V)throw Error("Found an unpaired surrogate");lt=65533}E[W++]=lt>>12|224,E[W++]=lt>>6&63|128}E[W++]=lt&63|128}}p=E.subarray(0,W)}return p}var Nn={},dn=null;function bn(p,V){V===void 0&&(V=0),Oe(),V=Nn[V];for(var W=Array(Math.floor(p.length/3)),E=V[64]||"",P=0,lt=0;P<p.length-2;P+=3){var z=p[P],it=p[P+1],bt=p[P+2],It=V[z>>2];z=V[(z&3)<<4|it>>4],it=V[(it&15)<<2|bt>>6],bt=V[bt&63],W[lt++]=It+z+it+bt}switch(It=0,bt=E,p.length-P){case 2:It=p[P+1],bt=V[(It&15)<<2]||E;case 1:p=p[P],W[lt]=V[p>>2]+V[(p&3)<<4|It>>4]+bt+E}return W.join("")}function kn(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),P=0;return Hn(p,function(lt){E[P++]=lt}),E.subarray(0,P)}function Hn(p,V){function W(bt){for(;E<p.length;){var It=p.charAt(E++),Ut=dn[It];if(Ut!=null)return Ut;if(!/^[\s\xa0]*$/.test(It))throw Error("Unknown base64 encoding at char: "+It)}return bt}Oe();for(var E=0;;){var P=W(-1),lt=W(0),z=W(64),it=W(64);if(it===64&&P===-1)break;V(P<<2|lt>>4),z!=64&&(V(lt<<4&240|z>>2),it!=64&&V(z<<6&192|it))}}function Oe(){if(!dn){dn={};for(var p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),V=["+/=","+/","-_=","-_.","-_"],W=0;5>W;W++){var E=p.concat(V[W].split(""));Nn[W]=E;for(var P=0;P<E.length;P++){var lt=E[P];dn[lt]===void 0&&(dn[lt]=P)}}}}var je=typeof Uint8Array.prototype.slice=="function",In;function Vn(p,V,W){return V===W?In||(In=new Uint8Array(0)):je?p.slice(V,W):new Uint8Array(p.subarray(V,W))}var he=0,Ye=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&&ne(this,p)}function ne(p,V){V=V.constructor===Uint8Array?V:V.constructor===ArrayBuffer?new Uint8Array(V):V.constructor===Array?new Uint8Array(V):V.constructor===String?kn(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 Ve(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 sn(p){var V=p.h[p.g],W=p.h[p.g+1],E=p.h[p.g+2],P=p.h[p.g+3];return p.g+=4,W=(V<<0|W<<8|E<<16|P<<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 Me=[];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 Ce(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,Me.length?(W=Me.pop(),V&&(W.v=V.v),p&&ne(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}Ce.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};function Bt(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=Ve(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=Ve(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(!Bt(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 zt(p,V,W){var E=p.g.i,P=Ve(p.g);return P=p.g.g+P,p.g.i=P,W(V,p),p.g.g=P,p.g.i=E,V}function ye(p){var V=Ve(p.g);p=p.g;var W=p.g;p.g+=V,p=p.h;var E;if(on)(E=Te)||(E=Te=new TextDecoder("utf-8",{fatal:!1})),E=E.decode(p.subarray(W,W+V));else{V=W+V;for(var P=[],lt=null,z,it,bt;W<V;)z=p[W++],128>z?P.push(z):224>z?W>=V?P.push(65533):(it=p[W++],194>z||(it&192)!==128?(W--,P.push(65533)):P.push((z&31)<<6|it&63)):240>z?W>=V-1?P.push(65533):(it=p[W++],(it&192)!==128||z===224&&160>it||z===237&&160<=it||((E=p[W++])&192)!==128?(W--,P.push(65533)):P.push((z&15)<<12|(it&63)<<6|E&63)):244>=z?W>=V-2?P.push(65533):(it=p[W++],(it&192)!==128||(z<<28)+(it-144)>>30!==0||((E=p[W++])&192)!==128||((bt=p[W++])&192)!==128?(W--,P.push(65533)):(z=(z&7)<<18|(it&63)<<12|(E&63)<<6|bt&63,z-=65536,P.push((z>>10&1023)+55296,(z&1023)+56320))):P.push(65533),8192<=P.length&&(lt=Jt(lt,P),P.length=0);E=Jt(lt,P)}return E}function we(){this.h=[],this.i=0,this.g=new Qt}function $e(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,P=0,lt=0;lt<E;lt++){var z=W[lt];z.length!==0&&(V.set(z,P),P+=z.length)}return W=p.g,E=W.h,E!==0&&(V.set(W.g.subarray(0,E),P),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=Ye=0:(Ye=0,he=2147483648):isNaN(E)?(Ye=0,he=2147483647):34028234663852886e22<E?(Ye=0,he=(W<<31|2139095040)>>>0):11754943508222875e-54>E?(E=Math.round(E/Math.pow(2,-149)),Ye=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,Ye=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):Se(p,V,W):V(p)}function Se(p,V,W){if(Array.isArray(p)){for(var E=Array(p.length),P=0;P<p.length;P++)E[P]=_e(p[P],V,W);return Array.isArray(p)&&p.W&&Qe(E),E}E={};for(P in p)E[P]=_e(p[P],V,W);return E}function Wn(p){return typeof p=="number"?isFinite(p)?p:String(p):p}var ln={W:{value:!0,configurable:!0}};function Qe(p){return Array.isArray(p)&&!Object.isFrozen(p)&&Object.defineProperties(p,ln),p}var un;function ve(p,V,W){var E=un;un=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]=Le):(Ge(this),(E=this.h[p])?Qe(E):this.h[p]=Le)}var Le=Object.freeze(Qe([]));function Ge(p){var V=p.l+p.j;p.g[V]||(p.h=p.g[V]={})}function re(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=re(p,1,V);return W==null&&(W=Le),W===Le&&(W=Qe([]),Pt(p,1,W,V)),W}function te(p,V,W){return p=re(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 hn(p,V){p.i||(p.i={});var W=p.i[1];if(!W){var E=De(p);W=[];for(var P=0;P<E.length;P++)W[P]=new V(E[P]);p.i[1]=W}return W}function fe(p,V,W,E){var P=hn(p,W);V=V||new W,p=De(p),E!=null?(P.splice(E,0,V),p.splice(E,0,Nt(V))):(P.push(V),p.push(Nt(V)))}ve.prototype.toJSON=function(){var p=Nt(this);return Se(p,Wn,bn)};function Nt(p,V){if(p.i)for(var W in p.i){var E=p.i[W];if(Array.isArray(E))for(var P=0;P<E.length;P++)E[P]&&Nt(E[P]);else E&&Nt(E)}return p.g}ve.prototype.toString=function(){return Nt(this).toString()};function Wt(p,V){return p=re(p,V),p==null?0:p}function ie(p,V){return p=re(p,V),p==null?"":p}function Fe(p,V){if(p=p.m){$e(V,V.g.end());for(var W=0;W<p.length;W++)$e(V,p[W])}}function ee(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 oe(p,V){var W=void 0;return new(W||(W=Promise))(function(E,P){function lt(bt){try{it(V.next(bt))}catch(It){P(It)}}function z(bt){try{it(V.throw(bt))}catch(It){P(It)}}function it(bt){bt.done?E(bt.value):new W(function(It){It(bt.value)}).then(lt,z)}it((V=V.apply(p,void 0)).next())})}function nt(p){ve.call(this,p)}ht(nt,ve);function ot(p,V){for(;Bt(V);)switch(V.i){case 8:var W=Ve(V.g);Pt(p,1,W);break;case 21:W=sn(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(!ee(p,V))return p}return p}function at(p){ve.call(this,p,-1,_t)}ht(at,ve),at.prototype.addClassification=function(p,V){fe(this,p,nt,V)};var _t=[1];function ae(p){ve.call(this,p)}ht(ae,ve);function ue(p,V){for(;Bt(V);)switch(V.i){case 13:var W=sn(V.g);Pt(p,1,W);break;case 21:W=sn(V.g),Pt(p,2,W);break;case 29:W=sn(V.g),Pt(p,3,W);break;case 37:W=sn(V.g),Pt(p,4,W);break;case 45:W=sn(V.g),Pt(p,5,W);break;default:if(!ee(p,V))return p}return p}function Tt(p){ve.call(this,p,-1,me)}ht(Tt,ve);var me=[1];function Ne(p){ve.call(this,p)}ht(Ne,ve);function qe(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(Ae,Dn){typeof exports=="object"&&typeof module<"u"?Dn(exports):typeof define=="function"&&define.amd?define(["exports"],Dn):(Ae=typeof globalThis<"u"?globalThis:Ae||self,Dn(Ae["ml-transformers"]={}))})(this,function(Ae){"use strict";var h3=Object.defineProperty;var f3=(Ae,Dn,yr)=>Dn in Ae?h3(Ae,Dn,{enumerable:!0,configurable:!0,writable:!0,value:yr}):Ae[Dn]=yr;var Wt=(Ae,Dn,yr)=>(f3(Ae,typeof Dn!="symbol"?Dn+"":Dn,yr),yr);var Dn=Object.defineProperty,yr=(i,n,r)=>n in i?Dn(i,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[n]=r,Me=(i,n,r)=>(yr(i,typeof n!="symbol"?n+"":n,r),r);function Kl(){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 or=new WeakMap,ei=new WeakMap,kr=new WeakMap,Di=Symbol("anyProducer"),Do=Promise.resolve(),ni=Symbol("listenerAdded"),ri=Symbol("listenerRemoved");let $i=!1;function Sr(i){if(typeof i!="string"&&typeof i!="symbol")throw new TypeError("eventName must be a string or a symbol")}function ii(i){if(typeof i!="function")throw new TypeError("listener must be a function")}function Tr(i,n){const r=ei.get(i);return r.has(n)||r.set(n,new Set),r.get(n)}function Ur(i,n){const r=typeof n=="string"||typeof n=="symbol"?n:Di,p=kr.get(i);return p.has(r)||p.set(r,new Set),p.get(r)}function jl(i,n,r){const p=kr.get(i);if(p.has(n))for(const G of p.get(n))G.enqueue(r);if(p.has(Di)){const G=Promise.all([n,r]);for(const S of p.get(Di))S.enqueue(G)}}function $o(i,n){n=Array.isArray(n)?n:[n];let r=!1,p=()=>{},G=[];const S={enqueue(H){G.push(H),p()},finish(){r=!0,p()}};for(const H of n)Ur(i,H).add(S);return{async next(){return G?G.length===0?r?(G=void 0,this.next()):(await new Promise(H=>{p=H}),this.next()):{done:!1,value:await G.shift()}:{done:!0}},async return(H){G=void 0;for(const w of n)Ur(i,w).delete(S);return p(),arguments.length>0?{done:!0,value:await H}:{done:!0}},[Symbol.asyncIterator](){return this}}}function qo(i){if(i===void 0)return ts;if(!Array.isArray(i))throw new TypeError("`methodNames` must be an array of strings");for(const n of i)if(!ts.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return i}const qi=i=>i===ni||i===ri;class gr{static mixin(n,r){return r=qo(r),p=>{if(typeof p!="function")throw new TypeError("`target` must be function");for(const H of r)if(p.prototype[H]!==void 0)throw new Error(`The property \`${H}\` already exists on \`target\``);function G(){return Object.defineProperty(this,n,{enumerable:!1,value:new gr}),this[n]}Object.defineProperty(p.prototype,n,{enumerable:!1,get:G});const S=H=>function(...w){return this[n][H](...w)};for(const H of r)Object.defineProperty(p.prototype,H,{enumerable:!1,value:S(H)});return p}}static get isDebugEnabled(){if(typeof process!="object")return $i;const{env:n}=process||{env:{}};return n.DEBUG==="emittery"||n.DEBUG==="*"||$i}static set isDebugEnabled(n){$i=n}constructor(n={}){or.set(this,new Set),ei.set(this,new Map),kr.set(this,new Map),this.debug=n.debug||{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(r,p,G,S)=>{try{S=JSON.stringify(S)}catch{S=`Object with the following keys failed to stringify: ${Object.keys(S).join(",")}`}typeof G=="symbol"&&(G=G.toString());const H=new Date,w=`${H.getHours()}:${H.getMinutes()}:${H.getSeconds()}.${H.getMilliseconds()}`;console.log(`[${w}][emittery:${r}][${p}] Event Name: ${G}
|
|
2
|
+
data: ${S}`)})}logIfDebugEnabled(n,r,p){(gr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,p)}on(n,r){ii(r),n=Array.isArray(n)?n:[n];for(const p of n)Sr(p),Tr(this,p).add(r),this.logIfDebugEnabled("subscribe",p,void 0),qi(p)||this.emit(ni,{eventName:p,listener:r});return this.off.bind(this,n,r)}off(n,r){ii(r),n=Array.isArray(n)?n:[n];for(const p of n)Sr(p),Tr(this,p).delete(r),this.logIfDebugEnabled("unsubscribe",p,void 0),qi(p)||this.emit(ri,{eventName:p,listener:r})}once(n){return new Promise(r=>{const p=this.on(n,G=>{p(),r(G)})})}events(n){n=Array.isArray(n)?n:[n];for(const r of n)Sr(r);return $o(this,n)}async emit(n,r){Sr(n),this.logIfDebugEnabled("emit",n,r),jl(this,n,r);const p=Tr(this,n),G=or.get(this),S=[...p],H=qi(n)?[]:[...G];await Do,await Promise.all([...S.map(async w=>{if(p.has(w))return w(r)}),...H.map(async w=>{if(G.has(w))return w(n,r)})])}async emitSerial(n,r){Sr(n),this.logIfDebugEnabled("emitSerial",n,r);const p=Tr(this,n),G=or.get(this),S=[...p],H=[...G];await Do;for(const w of S)p.has(w)&&await w(r);for(const w of H)G.has(w)&&await w(n,r)}onAny(n){return ii(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),or.get(this).add(n),this.emit(ni,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return $o(this)}offAny(n){ii(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(ri,{listener:n}),or.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"){Tr(this,r).clear();const p=Ur(this,r);for(const G of p)G.finish();p.clear()}else{or.get(this).clear();for(const p of ei.get(this).values())p.clear();for(const p of kr.get(this).values()){for(const G of p)G.finish();p.clear()}}}listenerCount(n){n=Array.isArray(n)?n:[n];let r=0;for(const p of n){if(typeof p=="string"){r+=or.get(this).size+Tr(this,p).size+Ur(this,p).size+Ur(this).size;continue}typeof p<"u"&&Sr(p),r+=or.get(this).size;for(const G of ei.get(this).values())r+=G.size;for(const G of kr.get(this).values())r+=G.size}return r}bindMethods(n,r){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");r=qo(r);for(const p of r){if(n[p]!==void 0)throw new Error(`The property \`${p}\` already exists on \`target\``);Object.defineProperty(n,p,{enumerable:!1,value:this[p].bind(this)})}}}const ts=Object.getOwnPropertyNames(gr.prototype).filter(i=>i!=="constructor");Object.defineProperty(gr,"listenerAdded",{value:ni,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(gr,"listenerRemoved",{value:ri,writable:!1,enumerable:!0,configurable:!1});var to=gr;function Ol(i){return typeof i=="object"&&i!==null&&"message"in i&&typeof i.message=="string"}function zl(i){if(Ol(i))return i;try{return new Error(JSON.stringify(i))}catch{return new Error(String(i))}}function eo(i){return zl(i).message}var Pl=Object.defineProperty,_l=(i,n,r)=>n in i?Pl(i,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[n]=r,Ql=(i,n,r)=>(_l(i,typeof n!="symbol"?n+"":n,r),r);const Dl="hlg.tokbox.com/prod/logging/vcp_webrtc",$l="https://",ql=1e4;let oi;const t2=new Uint8Array(16);function e2(){if(!oi&&(oi=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!oi))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return oi(t2)}const Un=[];for(let i=0;i<256;++i)Un.push((i+256).toString(16).slice(1));function n2(i,n=0){return(Un[i[n+0]]+Un[i[n+1]]+Un[i[n+2]]+Un[i[n+3]]+"-"+Un[i[n+4]]+Un[i[n+5]]+"-"+Un[i[n+6]]+Un[i[n+7]]+"-"+Un[i[n+8]]+Un[i[n+9]]+"-"+Un[i[n+10]]+Un[i[n+11]]+Un[i[n+12]]+Un[i[n+13]]+Un[i[n+14]]+Un[i[n+15]]).toLowerCase()}const r2=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),es={randomUUID:r2};function i2(i,n,r){if(es.randomUUID&&!n&&!i)return es.randomUUID();i=i||{};const p=i.random||(i.rng||e2)();if(p[6]=p[6]&15|64,p[8]=p[8]&63|128,n){r=r||0;for(let G=0;G<16;++G)n[r+G]=p[G];return n}return n2(p)}function no(i,n){return globalThis[i]||(globalThis[i]=n),globalThis[i]}const sr=no("globals",{});var Zr=(i=>(i.INIT="INIT",i.FORWARD="FORWARD",i.TERMINATE="TERMINATE",i.GLOBALS_SYNC="GLOBALS_SYNC",i))(Zr||{});function ns(i){return[ImageBitmap,ReadableStream,WritableStream].some(n=>i instanceof n)}let o2=0;function s2(i,n,r,p,G){const S=o2++;return i.postMessage({id:S,type:n,functionName:r,args:p},p.filter(H=>ns(H))),new Promise(H=>{G==null||G.set(S,H)})}function Br(i,n){const{id:r,type:p}=i,G=Array.isArray(n)?n:[n];postMessage({id:r,type:p,result:n},G.filter(S=>ns(S)))}const rs=no("workerized",{});function is(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function l2(){if(is())Br({type:Zr.GLOBALS_SYNC},sr);else{const i=[];for(const n in rs){const{worker:r,resolvers:p}=rs[n].workerContext;r&&i.push(s2(r,Zr.GLOBALS_SYNC,"",[sr],p))}await Promise.all(i)}}function si(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]=[],si(i[r],n[r])):typeof i[r]=="object"?(n[r]={},si(i[r],n[r])):n[r]=i[r]}async function c2(i,n){const{functionName:r,args:p}=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}`;Br(i,await n.instance[r](...p!=null?p:[]))}const u2=no("registeredWorkers",{});function a2(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,p]=i.args,G=u2[r];if(G)n.instance=new G(i.args.slice(1));else throw`unknown worker class ${r}`;si(p,sr),Br(i,typeof n.instance!==void 0)}async function d2(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let p;n.instance.terminate&&(p=await n.instance.terminate(...r!=null?r:[])),Br(i,p)}function h2(i){if(!i.args)throw"Missing globals while syncing";si(i.args[0],sr),Br(i,{})}function f2(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case Zr.INIT:a2(r,i);break;case Zr.FORWARD:c2(r,i);break;case Zr.TERMINATE:d2(r,i);break;case Zr.GLOBALS_SYNC:h2(r);break}}}is()&&f2();function m2(i,n){return sr[i]||(sr[i]=n),[()=>sr[i],async r=>{sr[i]=r,await l2()}]}function p2(i,n){return m2(i,n)}const[b2,y2]=p2("metadata");function g2(i){y2(i)}function li(){return b2()}class ro{constructor(n){Ql(this,"uuid",i2()),this.config=n}async send(n){var r,p,G;const{appId:S,sourceType:H}=(r=li())!=null?r:{};if(!S||!H)return"metadata missing";const w=new AbortController,E=setTimeout(()=>w.abort(),ql);return await((G=(p=this.config)==null?void 0:p.fetch)!=null?G:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(n)),signal:w.signal}),clearTimeout(E),"success"}getUrl(){var n;let r=(n=li().proxyUrl)!=null?n:$l;return r+=(r.at(-1)==="/"?"":"/")+Dl,r}getHeaders(){return{"Content-Type":"application/json"}}buildReport(n){const r=li();return{guid:this.uuid,...n,applicationId:r.appId,timestamp:Date.now(),proxyUrl:r.proxyUrl,source:r.sourceType}}}const ci="2.0.2";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 ro(n)}async onFrameFromSource(){this.frameFromSourceCount++}get fps(){const{startAt:n,frameFromSourceCount:r}=this,p=(Date.now()-n)/1e3;return r/p}async onFrameTransformed(n={},r=!1){this.startAt===0&&(this.startAt=Date.now()),this.frameTransformedCount++;const{startAt:p,frameTransformedCount:G,frameFromSourceCount:S}=this,H=Date.now(),w=(H-p)/1e3,E=G/w,et=S/w;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:E,framesTransformed:G,...n})):"success"}}var os=(i=>(i.FPS_DROP="fps_drop",i))(os||{}),ss=(i=>(i.start="start",i.transform="transform",i.flush="flush",i))(ss||{}),ui=(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))(ui||{});const v2=500,G2=.8;class X2 extends to{constructor(n,r){super(),Me(this,"reporter_",new ro),Me(this,"reporterQos_",new Z2({loggingIntervalFrameCount:v2,report:{version:ci}})),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:eo(r)});const p={eventMetaData:{transformerIndex:this.index_},error:r,function:"start"};this.emit("error",p)}}async transform(n,r){var p,G,S,H;if(this.mediaTransformerQosReportStartTimestamp_===0&&(this.mediaTransformerQosReportStartTimestamp_=Date.now()),n instanceof VideoFrame&&(this.videoHeight_=(p=n==null?void 0:n.displayHeight)!=null?p:0,this.videoWidth_=(G=n==null?void 0:n.displayWidth)!=null?G: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=(S=this.transformer_).transform)==null?void 0:H.call(S,n,r)),this.reportQos()}catch(w){this.report({message:nr.errors.transformer_transform,variation:"Error",error:eo(w)});const E={eventMetaData:{transformerIndex:this.index_},error:w,function:"transform"};this.emit("error",E)}if(this.trackExpectedRate_!=-1&&this.trackExpectedRate_*G2>this.reporterQos_.fps){const w={eventMetaData:{transformerIndex:this.index_},warningType:"fps_drop",dropInfo:{requested:this.trackExpectedRate_,current:this.reporterQos_.fps}};this.emit("warn",w)}}}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:eo(r)});const p={eventMetaData:{transformerIndex:this.index_},error:r,function:"flush"};this.emit("error",p)}}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:ci,action:"MediaTransformer",transformerType:this.transformerType_,...n})}reportQos(n=!1){this.reporterQos_.config={...this.reporterQos_.config},this.reporterQos_.onFrameTransformed({version:ci,action:"MediaTransformer",transformerType:this.transformerType_,videoWidth:this.videoWidth_,videoHeight:this.videoHeight_},n)}}class W2 extends to{constructor(n){super(),Me(this,"transformers_"),Me(this,"trackExpectedRate_"),this.transformers_=[],this.trackExpectedRate_=-1;for(let r=0;r<n.length;r++){let p=new X2(n[r],r);p.on("error",G=>{this.emit("error",G)}),p.on("warn",G=>{this.emit("warn",G)}),this.transformers_.push(p)}}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 p=n;for(let G of this.transformers_)n=n.pipeThrough(new TransformStream(G));n.pipeTo(r).then(async()=>{console.log("[Pipeline] Setup."),await r.abort(),await p.cancel(),this.emit("pipelineInfo","pipeline_ended")}).catch(async G=>{n.cancel().then(()=>{console.log("[Pipeline] Shutting down streams after abort.")}).catch(S=>{console.error("[Pipeline] Error from stream transform:",S)}),await r.abort(G),await p.cancel(G),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 V2 extends to{constructor(){super(),Me(this,"reporter_"),Me(this,"pipeline_"),Me(this,"transformers_"),Me(this,"readable_"),Me(this,"writable_"),Me(this,"trackExpectedRate_"),this.reporter_=new ro,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 p=!1;this.pipeline_&&(p=!0,this.pipeline_.clearListeners(),this.pipeline_.destroy()),this.pipeline_=new W2(this.transformers_),this.pipeline_.on("warn",G=>{this.emit("warn",G)}),this.pipeline_.on("error",G=>{this.emit("error",G)}),this.pipeline_.on("pipelineInfo",G=>{p&&(G==="pipeline_started"?G=ui.pipeline_restarted:G==="pipeline_started_with_error"&&(G=ui.pipeline_restarted_with_error)),this.emit("pipelineInfo",G)}),this.trackExpectedRate_!=-1&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_),this.pipeline_.start(this.readable_,this.writable_).then(()=>{n()}).catch(G=>{r(G)})})}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:ci,action:"MediaProcessor",...n})}}class R2{constructor(){Me(this,"processor_"),Me(this,"generator_"),this.processor_=null,this.generator_=null}init(n){return new Promise((r,p)=>{try{this.processor_=new MediaStreamTrackProcessor(n)}catch(G){console.log(`[InsertableStreamHelper] MediaStreamTrackProcessor failed: ${G}`),p(G)}try{n.kind==="audio"?this.generator_=new MediaStreamTrackGenerator({kind:"audio"}):n.kind==="video"?this.generator_=new MediaStreamTrackGenerator({kind:"video"}):p("kind not supported")}catch(G){console.log(`[InsertableStreamHelper] MediaStreamTrackGenerator failed: ${G}`),p(G)}r()})}getReadable(){return this.processor_.readable}getWriteable(){return this.generator_.writable}getProccesorTrack(){return this.generator_}}class x2{constructor(n){Me(this,"insertableStreamHelper_"),Me(this,"mediaProcessor_"),this.insertableStreamHelper_=new R2,this.mediaProcessor_=n}setTrack(n){return new Promise((r,p)=>{this.insertableStreamHelper_.init(n).then(()=>{this.mediaProcessor_.transform(this.insertableStreamHelper_.getReadable(),this.insertableStreamHelper_.getWriteable()).then(()=>{r(this.insertableStreamHelper_.getProccesorTrack())}).catch(G=>{p(G)})}).catch(G=>{p(G)})})}destroy(){return new Promise((n,r)=>{this.mediaProcessor_?this.mediaProcessor_.destroy().then(()=>{n()}).catch(p=>{r(p)}):r("no processor")})}}var Ar=(i=>(i.Low="Low",i.High="High",i))(Ar||{}),ls=(i=>(i.BackgroundBlur="BackgroundBlur",i.VirtualBackground="VirtualBackground",i.VideoBackground="VideoBackground",i.SilhouetteBlur="SilhouetteBlur",i))(ls||{}),cs=(i=>(i.FAST="FAST",i.PRECISE="PRECISE",i))(cs||{});const I2=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 S2=function(){var i=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return function(n){n=n||{};var r=typeof n<"u"?n:{},p,G;r.ready=new Promise(function(tt,it){p=tt,G=it});var S={},H;for(H in r)r.hasOwnProperty(H)&&(S[H]=r[H]);var w="./this.program",E=function(tt,it){throw it},et=!0,ct="";function dt(tt){return r.locateFile?r.locateFile(tt,ct):ct+tt}var Ft;typeof document<"u"&&document.currentScript&&(ct=document.currentScript.src),i&&(ct=i),ct.indexOf("blob:")!==0?ct=ct.substr(0,ct.replace(/[?#].*/,"").lastIndexOf("/")+1):ct="";var Lt=r.print||console.log.bind(console),at=r.printErr||console.warn.bind(console);for(H in S)S.hasOwnProperty(H)&&(r[H]=S[H]);S=null,r.arguments&&r.arguments,r.thisProgram&&(w=r.thisProgram),r.quit&&(E=r.quit);var pt;r.wasmBinary&&(pt=r.wasmBinary);var Mt=r.noExitRuntime||!0;typeof WebAssembly!="object"&&he("no native wasm support detected");var Jt,qt=!1,P=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function De(tt,it,ut){for(var Pt=it+ut,ae=it;tt[ae]&&!(ae>=Pt);)++ae;if(ae-it>16&&tt.subarray&&P)return P.decode(tt.subarray(it,ae));for(var ce="";it<ae;){var St=tt[it++];if(!(St&128)){ce+=String.fromCharCode(St);continue}var me=tt[it++]&63;if((St&224)==192){ce+=String.fromCharCode((St&31)<<6|me);continue}var He=tt[it++]&63;if((St&240)==224?St=(St&15)<<12|me<<6|He:St=(St&7)<<18|me<<12|He<<6|tt[it++]&63,St<65536)ce+=String.fromCharCode(St);else{var qe=St-65536;ce+=String.fromCharCode(55296|qe>>10,56320|qe&1023)}}return ce}function an(tt,it){return tt?De(gt,tt,it):""}function Ve(tt,it,ut){for(var Pt=0;Pt<tt.length;++Pt)de[it++>>0]=tt.charCodeAt(Pt);ut||(de[it>>0]=0)}function Dt(tt,it){return tt%it>0&&(tt+=it-tt%it),tt}var Kn,de,gt,pn;function jn(tt){Kn=tt,r.HEAP8=de=new Int8Array(tt),r.HEAP16=new Int16Array(tt),r.HEAP32=pn=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,Ht=[],Te=[],on=[],Xn=0;function Ln(){return Mt||Xn>0}function xn(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)bn(r.preRun.shift());_t(Ht)}function Nn(){_t(Te)}function dn(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)Cn(r.postRun.shift());_t(on)}function bn(tt){Ht.unshift(tt)}function En(tt){Te.unshift(tt)}function Cn(tt){on.unshift(tt)}var Oe=0,Ke=null;function In(tt){Oe++,r.monitorRunDependencies&&r.monitorRunDependencies(Oe)}function Wn(tt){if(Oe--,r.monitorRunDependencies&&r.monitorRunDependencies(Oe),Oe==0&&Ke){var it=Ke;Ke=null,it()}}r.preloadedImages={},r.preloadedAudios={};function he(tt){r.onAbort&&r.onAbort(tt),tt="Aborted("+tt+")",at(tt),qt=!0,tt+=". Build with -s ASSERTIONS=1 for more info.";var it=new WebAssembly.RuntimeError(tt);throw G(it),it}var Se="data:application/octet-stream;base64,";function ze(tt){return tt.startsWith(Se)}var ne;ne="tflite-simd.wasm",ze(ne)||(ne=dt(ne));function We(tt){try{if(tt==ne&&pt)return new Uint8Array(pt);if(!Ft)throw"both async and sync fetching of the wasm failed"}catch(it){he(it)}}function sn(){return!pt&&et&&typeof fetch=="function"?fetch(ne,{credentials:"same-origin"}).then(function(tt){if(!tt.ok)throw"failed to load wasm binary file at '"+ne+"'";return tt.arrayBuffer()}).catch(function(){return We(ne)}):Promise.resolve().then(function(){return We(ne)})}function Ue(){var tt={a:fe};function it(St,me){var He=St.exports;r.asm=He,Jt=r.asm.q,jn(Jt.buffer),Re=r.asm.E,En(r.asm.r),Wn()}In();function ut(St){it(St.instance)}function Pt(St){return sn().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 ae(){return!pt&&typeof WebAssembly.instantiateStreaming=="function"&&!ze(ne)&&typeof fetch=="function"?fetch(ne,{credentials:"same-origin"}).then(function(St){var me=WebAssembly.instantiateStreaming(St,tt);return me.then(ut,function(He){return at("wasm streaming compile failed: "+He),at("falling back to ArrayBuffer instantiation"),Pt(ut)})}):Pt(ut)}if(r.instantiateWasm)try{var ce=r.instantiateWasm(tt,it);return ce}catch(St){return at("Module.instantiateWasm callback failed with error: "+St),!1}return ae().catch(G),{}}function _t(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,Pt){he("Assertion failed: "+an(tt)+", at: "+[it?an(it):"unknown filename",ut,Pt?an(Pt):"unknown function"])}function Ce(tt,it){he("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function At(tt,it){he("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function xe(){he("")}var jt;jt=function(){return performance.now()};var ye=!0;function we(tt){return pn[Ct()>>2]=tt,tt}function $e(tt,it){var ut;if(tt===0)ut=Date.now();else if((tt===1||tt===4)&&ye)ut=jt();else return we(28),-1;return pn[it>>2]=ut/1e3|0,pn[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 je(tt){try{return Jt.grow(tt-Kn.byteLength+65535>>>16),jn(Jt.buffer),1}catch{}}function Pe(tt){var it=gt.length;tt=tt>>>0;var ut=2147483648;if(tt>ut)return!1;for(var Pt=1;Pt<=4;Pt*=2){var ae=it*(1+.2/Pt);ae=Math.min(ae,tt+100663296);var ce=Math.min(ut,Dt(Math.max(tt,ae),65536)),St=je(ce);if(St)return!0}return!1}function Ie(tt){for(var it=jt();jt()-it<tt;);}var Vn={};function ln(){return w||"./this.program"}function _e(){if(!_e.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,_:ln()};for(var ut in Vn)Vn[ut]===void 0?delete it[ut]:it[ut]=Vn[ut];var Pt=[];for(var ut in it)Pt.push(ut+"="+it[ut]);_e.strings=Pt}return _e.strings}var cn={mappings:{},buffers:[null,[],[]],printChar:function(tt,it){var ut=cn.buffers[tt];it===0||it===10?((tt===1?Lt:at)(De(ut,0)),ut.length=0):ut.push(it)},varargs:void 0,get:function(){cn.varargs+=4;var tt=pn[cn.varargs-4>>2];return tt},getStr:function(tt){var it=an(tt);return it},get64:function(tt,it){return tt}};function ve(tt,it){var ut=0;return _e().forEach(function(Pt,ae){var ce=it+ut;pn[tt+ae*4>>2]=ce,Ve(Pt,ce),ut+=Pt.length+1}),0}function Fe(tt,it){var ut=_e();pn[tt>>2]=ut.length;var Pt=0;return ut.forEach(function(ae){Pt+=ae.length+1}),pn[it>>2]=Pt,0}function Ge(tt){ee(tt)}function re(tt){return 0}function Qe(tt,it,ut,Pt,ae){}function te(tt,it,ut,Pt){for(var ae=0,ce=0;ce<ut;ce++){for(var St=pn[it+ce*8>>2],me=pn[it+(ce*8+4)>>2],He=0;He<me;He++)cn.printChar(tt,gt[St+He]);ae+=me}return pn[Pt>>2]=ae,0}function zt(){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 hn(tt,it){hn.randomDevice||(hn.randomDevice=zt());for(var ut=0;ut<it;ut++)de[tt+ut>>0]=hn.randomDevice();return 0}var fe={a:Ze,e:Ce,d:At,b:xe,n:$e,h:Xe,l:Ot,m:Pe,p:Ie,f:ve,g:Fe,j:Ge,i:re,k:Qe,c:te,o:hn};Ue(),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 Ct=r.___errno_location=function(){return(Ct=r.___errno_location=r.asm.F).apply(null,arguments)},Vt;function ie(tt){this.name="ExitStatus",this.message="Program terminated with exit("+tt+")",this.status=tt}Ke=function tt(){Vt||Ye(),Vt||(Ke=tt)};function Ye(tt){if(Oe>0||(xn(),Oe>0))return;function it(){Vt||(Vt=!0,r.calledRun=!0,!qt&&(Nn(),p(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),dn()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),it()},1)):it()}r.run=Ye;function ee(tt,it){oe(tt)}function oe(tt){Ln()||(r.onExit&&r.onExit(tt),qt=!0),E(tt,new ie(tt))}if(r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return Ye(),n.ready}}();class T2{constructor(){Wt(this,"selectedTFLite");Wt(this,"isSIMDSupported",!1);Wt(this,"isThreadsSupported",!1);Wt(this,"inputWidth",0);Wt(this,"inputHeight",0);Wt(this,"inputChannelCount",0);Wt(this,"inputMemoryOffset",0);Wt(this,"outputWidth",0);Wt(this,"outputHeight",0);Wt(this,"outputChannelCount",0);Wt(this,"outputMemoryOffset",0)}}const w2="https://d3opqjmqzxf057.cloudfront.net/vonage-tensorflow-wasm/tflite-simd-wasm/1.1.3/",F2="https://d3opqjmqzxf057.cloudfront.net/ml/selfie_segmentation/4.0.0/";async function Y2(i=w2,n=F2){let r=new T2;var p=new Promise(function(G,S){async function H(){return S2({locateFile:function(et){return i+et}})}async function w(E){return new Promise(async(et,ct)=>{const dt=E;if(typeof dt>"u")return ct("TFLite backend unavailable: wasmSimd");const Ft="selfie_segmentation_landscape";console.log("Loading tflite model:",Ft);let Lt=n+`${Ft}.tflite`;console.log("TFLite modelUrl: "+Lt);try{const pt=await(await fetch(Lt)).arrayBuffer();console.log("Model buffer size:",pt.byteLength);const Mt=dt._getModelBufferMemoryOffset();console.log("Model buffer memory offset:",Mt),console.log("Loading model buffer..."),dt.HEAPU8.set(new Uint8Array(pt),Mt);const Jt=dt._loadModel(pt.byteLength);if(console.log("Load model result:",Jt),Jt!==0){ct("Cannot load model");return}r.inputWidth=dt._getInputWidth(),r.inputHeight=dt._getInputHeight(),r.inputChannelCount=dt._getInputChannelCount(),r.inputMemoryOffset=dt._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=dt._getOutputMemoryOffset(),r.outputWidth=dt._getOutputWidth(),r.outputHeight=dt._getOutputHeight(),r.outputChannelCount=dt._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=dt}catch(at){ct(at);return}et()})}H().then(E=>{if(E===null)throw console.error("loadTFLite null"),"loadTFLite null";w(E).then(et=>{G(r)}).catch(et=>{console.error("loadTFLiteModel error"),S("loadTFLiteModel error")})}).catch(E=>{console.error("loadTFLite error:",E),S("loadTFLite error:"+E)})});return p}class us{constructor(){Wt(this,"canvas",new OffscreenCanvas(0,0));Wt(this,"context",this.canvas.getContext("2d",{willReadFrequently:!0}));Wt(this,"pixelCount",0);Wt(this,"inputOffset",0);Wt(this,"outputOffset",0);Wt(this,"infos");Wt(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 Y2(n,r)}getOutputDimensions(){var n,r,p,G;return{width:(r=(n=this.infos)==null?void 0:n.outputWidth)!=null?r:0,height:(G=(p=this.infos)==null?void 0:p.outputHeight)!=null?G:0}}async process(n){if(!this.mask||!this.infos)return;const r=this.infos.inputWidth,p=this.infos.inputHeight;this.context.drawImage(n,0,0,n.width,n.height,0,0,r,p);const G=this.context.getImageData(0,0,r,p),S=this.infos.selectedTFLite.HEAPF32;for(let H=0;H<this.pixelCount;H++){const w=this.inputOffset+H*3;S[w]=G.data[H*4]/255,S[w+1]=G.data[H*4+1]/255,S[w+2]=G.data[H*4+2]/255}this.infos.selectedTFLite._runInference();for(let H=0;H<this.pixelCount;H++){const w=this.infos.selectedTFLite.HEAPF32[this.outputOffset+H];this.mask.data[H*4]=this.mask.data[H*4+3]=255*w}return createImageBitmap(this.mask)}isGpuSupported(){var n,r,p;return(p=(r=(n=this.infos)==null?void 0:n.selectedTFLite)==null?void 0:r._isGPUEnabled())!=null?p:!1}}async function L2(i,n){const{wasm:r,insertableStreams:p,simd:G,webgl:S}=await as(i,n);if(!r.supported)throw r.message;if(!p.supported)throw p.message;if(!G.supported)throw G.message;if(!S.supported)throw S.message}async function as(i,n){const r=new us;await r.initWasm(i,n);const p={wasm:{supported:typeof WebAssembly=="object"&&typeof WebAssembly.instantiate=="function",message:"Your browser does not support WebAssembly features."},simd:{supported:await I2(),message:"Your browser does not support simd features."},insertableStreams:{supported:!0},gpu:{supported:r.isGpuSupported(),message:"Your browser does not support gpu features."},webgl:C2()};try{await Kl()}catch(G){p.insertableStreams.supported=!1,p.insertableStreams.message=G}return p}function C2(){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"}}const ai={};(function(){var i;function n(m){var W=0;return function(){return W<m.length?{done:!1,value:m[W++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(m,W,V){return m==Array.prototype||m==Object.prototype||(m[W]=V.value),m};function p(m){m=[typeof globalThis=="object"&&globalThis,m,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var W=0;W<m.length;++W){var V=m[W];if(V&&V.Math==Math)return V}throw Error("Cannot find global object")}var G=p(this);function S(m,W){if(W)t:{var V=G;m=m.split(".");for(var k=0;k<m.length-1;k++){var z=m[k];if(!(z in V))break t;V=V[z]}m=m[m.length-1],k=V[m],W=W(k),W!=k&&W!=null&&r(V,m,{configurable:!0,writable:!0,value:W})}}S("Symbol",function(m){function W(ot){if(this instanceof W)throw new TypeError("Symbol is not a constructor");return new V(k+(ot||"")+"_"+z++,ot)}function V(ot,O){this.g=ot,r(this,"description",{configurable:!0,writable:!0,value:O})}if(m)return m;V.prototype.toString=function(){return this.g};var k="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",z=0;return W}),S("Symbol.iterator",function(m){if(m)return m;m=Symbol("Symbol.iterator");for(var W="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),V=0;V<W.length;V++){var k=G[W[V]];typeof k=="function"&&typeof k.prototype[m]!="function"&&r(k.prototype,m,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return m});function H(m){return m={next:m},m[Symbol.iterator]=function(){return this},m}function w(m){var W=typeof Symbol<"u"&&Symbol.iterator&&m[Symbol.iterator];return W?W.call(m):{next:n(m)}}function E(m){if(!(m instanceof Array)){m=w(m);for(var W,V=[];!(W=m.next()).done;)V.push(W.value);m=V}return m}var et=typeof Object.create=="function"?Object.create:function(m){function W(){}return W.prototype=m,new W},ct;if(typeof Object.setPrototypeOf=="function")ct=Object.setPrototypeOf;else{var dt;t:{var Ft={a:!0},Lt={};try{Lt.__proto__=Ft,dt=Lt.a;break t}catch{}dt=!1}ct=dt?function(m,W){if(m.__proto__=W,m.__proto__!==W)throw new TypeError(m+" is not extensible");return m}:null}var at=ct;function pt(m,W){if(m.prototype=et(W.prototype),m.prototype.constructor=m,at)at(m,W);else for(var V in W)if(V!="prototype")if(Object.defineProperties){var k=Object.getOwnPropertyDescriptor(W,V);k&&Object.defineProperty(m,V,k)}else m[V]=W[V];m.ea=W.prototype}function Mt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Jt(m){if(m.l)throw new TypeError("Generator is already running");m.l=!0}Mt.prototype.o=function(m){this.h=m};function qt(m,W){m.j={U:W,V:!0},m.g=m.m||m.s}Mt.prototype.return=function(m){this.j={return:m},this.g=this.s};function P(m,W,V){return m.g=V,{value:W}}function De(m){this.g=new Mt,this.h=m}function an(m,W){Jt(m.g);var V=m.g.i;return V?Ve(m,"return"in V?V.return:function(k){return{value:k,done:!0}},W,m.g.return):(m.g.return(W),Dt(m))}function Ve(m,W,V,k){try{var z=W.call(m.g.i,V);if(!(z instanceof Object))throw new TypeError("Iterator result "+z+" is not an object");if(!z.done)return m.g.l=!1,z;var ot=z.value}catch(O){return m.g.i=null,qt(m.g,O),Dt(m)}return m.g.i=null,k.call(m.g,ot),Dt(m)}function Dt(m){for(;m.g.g;)try{var W=m.h(m.g);if(W)return m.g.l=!1,{value:W.value,done:!1}}catch(V){m.g.h=void 0,qt(m.g,V)}if(m.g.l=!1,m.g.j){if(W=m.g.j,m.g.j=null,W.V)throw W.U;return{value:W.return,done:!0}}return{value:void 0,done:!0}}function Kn(m){this.next=function(W){return Jt(m.g),m.g.i?W=Ve(m,m.g.i.next,W,m.g.o):(m.g.o(W),W=Dt(m)),W},this.throw=function(W){return Jt(m.g),m.g.i?W=Ve(m,m.g.i.throw,W,m.g.o):(qt(m.g,W),W=Dt(m)),W},this.return=function(W){return an(m,W)},this[Symbol.iterator]=function(){return this}}function de(m,W){return W=new Kn(new De(W)),at&&m.prototype&&at(W,m.prototype),W}function gt(m,W){m instanceof String&&(m+="");var V=0,k=!1,z={next:function(){if(!k&&V<m.length){var ot=V++;return{value:W(ot,m[ot]),done:!1}}return k=!0,{done:!0,value:void 0}}};return z[Symbol.iterator]=function(){return z},z}var pn=typeof Object.assign=="function"?Object.assign:function(m,W){for(var V=1;V<arguments.length;V++){var k=arguments[V];if(k)for(var z in k)Object.prototype.hasOwnProperty.call(k,z)&&(m[z]=k[z])}return m};S("Object.assign",function(m){return m||pn}),S("Promise",function(m){function W(O){this.h=0,this.i=void 0,this.g=[],this.o=!1;var rt=this.j();try{O(rt.resolve,rt.reject)}catch(bt){rt.reject(bt)}}function V(){this.g=null}function k(O){return O instanceof W?O:new W(function(rt){rt(O)})}if(m)return m;V.prototype.h=function(O){if(this.g==null){this.g=[];var rt=this;this.i(function(){rt.l()})}this.g.push(O)};var z=G.setTimeout;V.prototype.i=function(O){z(O,0)},V.prototype.l=function(){for(;this.g&&this.g.length;){var O=this.g;this.g=[];for(var rt=0;rt<O.length;++rt){var bt=O[rt];O[rt]=null;try{bt()}catch(Rt){this.j(Rt)}}}this.g=null},V.prototype.j=function(O){this.i(function(){throw O})},W.prototype.j=function(){function O(Rt){return function(Ut){bt||(bt=!0,Rt.call(rt,Ut))}}var rt=this,bt=!1;return{resolve:O(this.C),reject:O(this.l)}},W.prototype.C=function(O){if(O===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(O instanceof W)this.F(O);else{t:switch(typeof O){case"object":var rt=O!=null;break t;case"function":rt=!0;break t;default:rt=!1}rt?this.u(O):this.m(O)}},W.prototype.u=function(O){var rt=void 0;try{rt=O.then}catch(bt){this.l(bt);return}typeof rt=="function"?this.G(rt,O):this.m(O)},W.prototype.l=function(O){this.s(2,O)},W.prototype.m=function(O){this.s(1,O)},W.prototype.s=function(O,rt){if(this.h!=0)throw Error("Cannot settle("+O+", "+rt+"): Promise already settled in state"+this.h);this.h=O,this.i=rt,this.h===2&&this.D(),this.A()},W.prototype.D=function(){var O=this;z(function(){if(O.B()){var rt=G.console;typeof rt<"u"&&rt.error(O.i)}},1)},W.prototype.B=function(){if(this.o)return!1;var O=G.CustomEvent,rt=G.Event,bt=G.dispatchEvent;return typeof bt>"u"?!0:(typeof O=="function"?O=new O("unhandledrejection",{cancelable:!0}):typeof rt=="function"?O=new rt("unhandledrejection",{cancelable:!0}):(O=G.document.createEvent("CustomEvent"),O.initCustomEvent("unhandledrejection",!1,!0,O)),O.promise=this,O.reason=this.i,bt(O))},W.prototype.A=function(){if(this.g!=null){for(var O=0;O<this.g.length;++O)ot.h(this.g[O]);this.g=null}};var ot=new V;return W.prototype.F=function(O){var rt=this.j();O.J(rt.resolve,rt.reject)},W.prototype.G=function(O,rt){var bt=this.j();try{O.call(rt,bt.resolve,bt.reject)}catch(Rt){bt.reject(Rt)}},W.prototype.then=function(O,rt){function bt($t,Et){return typeof $t=="function"?function(Tt){try{Rt($t(Tt))}catch(kt){Ut(kt)}}:Et}var Rt,Ut,Nt=new W(function($t,Et){Rt=$t,Ut=Et});return this.J(bt(O,Rt),bt(rt,Ut)),Nt},W.prototype.catch=function(O){return this.then(void 0,O)},W.prototype.J=function(O,rt){function bt(){switch(Rt.h){case 1:O(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=k,W.reject=function(O){return new W(function(rt,bt){bt(O)})},W.race=function(O){return new W(function(rt,bt){for(var Rt=w(O),Ut=Rt.next();!Ut.done;Ut=Rt.next())k(Ut.value).J(rt,bt)})},W.all=function(O){var rt=w(O),bt=rt.next();return bt.done?k([]):new W(function(Rt,Ut){function Nt(Tt){return function(kt){$t[Tt]=kt,Et--,Et==0&&Rt($t)}}var $t=[],Et=0;do $t.push(void 0),Et++,k(bt.value).J(Nt($t.length-1),Ut),bt=rt.next();while(!bt.done)})},W}),S("Object.is",function(m){return m||function(W,V){return W===V?W!==0||1/W===1/V:W!==W&&V!==V}}),S("Array.prototype.includes",function(m){return m||function(W,V){var k=this;k instanceof String&&(k=String(k));var z=k.length;for(V=V||0,0>V&&(V=Math.max(V+z,0));V<z;V++){var ot=k[V];if(ot===W||Object.is(ot,W))return!0}return!1}}),S("String.prototype.includes",function(m){return m||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}}),S("Array.prototype.keys",function(m){return m||function(){return gt(this,function(W){return W})}});var jn=this||self;function Re(m,W){m=m.split(".");var V=jn;m[0]in V||typeof V.execScript>"u"||V.execScript("var "+m[0]);for(var k;m.length&&(k=m.shift());)m.length||W===void 0?V[k]&&V[k]!==Object.prototype[k]?V=V[k]:V=V[k]={}:V[k]=W}function Ht(m,W){return W=String.fromCharCode.apply(null,W),m==null?W:m+W}var Te,on=typeof TextDecoder<"u",Xn,Ln=typeof TextEncoder<"u";function xn(m){if(Ln)m=(Xn||(Xn=new TextEncoder)).encode(m);else{var W=void 0;W=W===void 0?!1:W;for(var V=0,k=new Uint8Array(3*m.length),z=0;z<m.length;z++){var ot=m.charCodeAt(z);if(128>ot)k[V++]=ot;else{if(2048>ot)k[V++]=ot>>6|192;else{if(55296<=ot&&57343>=ot){if(56319>=ot&&z<m.length){var O=m.charCodeAt(++z);if(56320<=O&&57343>=O){ot=1024*(ot-55296)+O-56320+65536,k[V++]=ot>>18|240,k[V++]=ot>>12&63|128,k[V++]=ot>>6&63|128,k[V++]=ot&63|128;continue}else z--}if(W)throw Error("Found an unpaired surrogate");ot=65533}k[V++]=ot>>12|224,k[V++]=ot>>6&63|128}k[V++]=ot&63|128}}m=k.subarray(0,V)}return m}var Nn={},dn=null;function bn(m,W){W===void 0&&(W=0),Oe(),W=Nn[W];for(var V=Array(Math.floor(m.length/3)),k=W[64]||"",z=0,ot=0;z<m.length-2;z+=3){var O=m[z],rt=m[z+1],bt=m[z+2],Rt=W[O>>2];O=W[(O&3)<<4|rt>>4],rt=W[(rt&15)<<2|bt>>6],bt=W[bt&63],V[ot++]=Rt+O+rt+bt}switch(Rt=0,bt=k,m.length-z){case 2:Rt=m[z+1],bt=W[(Rt&15)<<2]||k;case 1:m=m[z],V[ot]=W[m>>2]+W[(m&3)<<4|Rt>>4]+bt+k}return V.join("")}function En(m){var W=m.length,V=3*W/4;V%3?V=Math.floor(V):"=.".indexOf(m[W-1])!=-1&&(V="=.".indexOf(m[W-2])!=-1?V-2:V-1);var k=new Uint8Array(V),z=0;return Cn(m,function(ot){k[z++]=ot}),k.subarray(0,z)}function Cn(m,W){function V(bt){for(;k<m.length;){var Rt=m.charAt(k++),Ut=dn[Rt];if(Ut!=null)return Ut;if(!/^[\s\xa0]*$/.test(Rt))throw Error("Unknown base64 encoding at char: "+Rt)}return bt}Oe();for(var k=0;;){var z=V(-1),ot=V(0),O=V(64),rt=V(64);if(rt===64&&z===-1)break;W(z<<2|ot>>4),O!=64&&(W(ot<<4&240|O>>2),rt!=64&&W(O<<6&192|rt))}}function Oe(){if(!dn){dn={};for(var m="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),W=["+/=","+/","-_=","-_.","-_"],V=0;5>V;V++){var k=m.concat(W[V].split(""));Nn[V]=k;for(var z=0;z<k.length;z++){var ot=k[z];dn[ot]===void 0&&(dn[ot]=z)}}}}var Ke=typeof Uint8Array.prototype.slice=="function",In;function Wn(m,W,V){return W===V?In||(In=new Uint8Array(0)):Ke?m.slice(W,V):new Uint8Array(m.subarray(W,V))}var he=0,Se=0;function ze(m,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,m&&ne(this,m)}function ne(m,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),m.h=W,m.j=0,m.i=m.h.length,m.g=m.j}ze.prototype.reset=function(){this.g=this.j};function We(m){var W=m.h,V=W[m.g],k=V&127;return 128>V?(m.g+=1,k):(V=W[m.g+1],k|=(V&127)<<7,128>V?(m.g+=2,k):(V=W[m.g+2],k|=(V&127)<<14,128>V?(m.g+=3,k):(V=W[m.g+3],k|=(V&127)<<21,128>V?(m.g+=4,k):(V=W[m.g+4],k|=(V&15)<<28,128>V?(m.g+=5,k>>>0):(m.g+=5,128<=W[m.g++]&&128<=W[m.g++]&&128<=W[m.g++]&&128<=W[m.g++]&&m.g++,k)))))}function sn(m){var W=m.h[m.g],V=m.h[m.g+1],k=m.h[m.g+2],z=m.h[m.g+3];return m.g+=4,V=(W<<0|V<<8|k<<16|z<<24)>>>0,m=2*(V>>31)+1,W=V>>>23&255,V&=8388607,W==255?V?NaN:1/0*m:W==0?m*Math.pow(2,-149)*V:m*Math.pow(2,W-150)*(V+Math.pow(2,23))}var Ue=[];function _t(){this.g=new Uint8Array(64),this.h=0}_t.prototype.push=function(m){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++]=m},_t.prototype.length=function(){return this.h},_t.prototype.end=function(){var m=this.g,W=this.h;return this.h=0,Wn(m,0,W)};function Ze(m,W){for(;127<W;)m.push(W&127|128),W>>>=7;m.push(W)}function Ce(m){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,Ue.length?(V=Ue.pop(),W&&(V.v=W.v),m&&ne(V,m),m=V):m=new ze(m,W),this.g=m,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}Ce.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};function At(m){var W=m.g;if((W=W.g==W.i)||(W=m.j)||(W=m.g,W=W.l||0>W.g||W.g>W.i),W)return!1;m.m=m.g.g,W=We(m.g);var V=W&7;return V!=0&&V!=5&&V!=1&&V!=2&&V!=3&&V!=4?(m.j=!0,!1):(m.i=W,m.l=W>>>3,m.h=V,!0)}function xe(m){switch(m.h){case 0:if(m.h!=0)xe(m);else{for(m=m.g;m.h[m.g]&128;)m.g++;m.g++}break;case 1:m.h!=1?xe(m):(m=m.g,m.g+=8);break;case 2:if(m.h!=2)xe(m);else{var W=We(m.g);m=m.g,m.g+=W}break;case 5:m.h!=5?xe(m):(m=m.g,m.g+=4);break;case 3:W=m.l;do{if(!At(m)){m.j=!0;break}if(m.h==4){m.l!=W&&(m.j=!0);break}xe(m)}while(1);break;default:m.j=!0}}function jt(m,W,V){var k=m.g.i,z=We(m.g);return z=m.g.g+z,m.g.i=z,V(W,m),m.g.g=z,m.g.i=k,W}function ye(m){var W=We(m.g);m=m.g;var V=m.g;m.g+=W,m=m.h;var k;if(on)(k=Te)||(k=Te=new TextDecoder("utf-8",{fatal:!1})),k=k.decode(m.subarray(V,V+W));else{W=V+W;for(var z=[],ot=null,O,rt,bt;V<W;)O=m[V++],128>O?z.push(O):224>O?V>=W?z.push(65533):(rt=m[V++],194>O||(rt&192)!==128?(V--,z.push(65533)):z.push((O&31)<<6|rt&63)):240>O?V>=W-1?z.push(65533):(rt=m[V++],(rt&192)!==128||O===224&&160>rt||O===237&&160<=rt||((k=m[V++])&192)!==128?(V--,z.push(65533)):z.push((O&15)<<12|(rt&63)<<6|k&63)):244>=O?V>=W-2?z.push(65533):(rt=m[V++],(rt&192)!==128||(O<<28)+(rt-144)>>30!==0||((k=m[V++])&192)!==128||((bt=m[V++])&192)!==128?(V--,z.push(65533)):(O=(O&7)<<18|(rt&63)<<12|(k&63)<<6|bt&63,O-=65536,z.push((O>>10&1023)+55296,(O&1023)+56320))):z.push(65533),8192<=z.length&&(ot=Ht(ot,z),z.length=0);k=Ht(ot,z)}return k}function we(){this.h=[],this.i=0,this.g=new _t}function $e(m,W){W.length!==0&&(m.h.push(W),m.i+=W.length)}function Xe(m){var W=m.i+m.g.length();if(W===0)return new Uint8Array(0);W=new Uint8Array(W);for(var V=m.h,k=V.length,z=0,ot=0;ot<k;ot++){var O=V[ot];O.length!==0&&(W.set(O,z),z+=O.length)}return V=m.g,k=V.h,k!==0&&(W.set(V.g.subarray(0,k),z),V.h=0),m.h=[W],W}function Ot(m,W,V){if(V!=null){Ze(m.g,8*W+5),m=m.g;var k=V;k=(V=0>k?1:0)?-k:k,k===0?0<1/k?he=Se=0:(Se=0,he=2147483648):isNaN(k)?(Se=0,he=2147483647):34028234663852886e22<k?(Se=0,he=(V<<31|2139095040)>>>0):11754943508222875e-54>k?(k=Math.round(k/Math.pow(2,-149)),Se=0,he=(V<<31|k)>>>0):(W=Math.floor(Math.log(k)/Math.LN2),k*=Math.pow(2,-W),k=Math.round(8388608*k)&8388607,Se=0,he=(V<<31|W+127<<23|k)>>>0),V=he,m.push(V>>>0&255),m.push(V>>>8&255),m.push(V>>>16&255),m.push(V>>>24&255)}}var je=typeof Uint8Array=="function";function Pe(m,W,V){if(m!=null)return typeof m=="object"?je&&m instanceof Uint8Array?V(m):Ie(m,W,V):W(m)}function Ie(m,W,V){if(Array.isArray(m)){for(var k=Array(m.length),z=0;z<m.length;z++)k[z]=Pe(m[z],W,V);return Array.isArray(m)&&m.W&&_e(k),k}k={};for(z in m)k[z]=Pe(m[z],W,V);return k}function Vn(m){return typeof m=="number"?isFinite(m)?m:String(m):m}var ln={W:{value:!0,configurable:!0}};function _e(m){return Array.isArray(m)&&!Object.isFrozen(m)&&Object.defineProperties(m,ln),m}var cn;function ve(m,W,V){var k=cn;cn=null,m||(m=k),k=this.constructor.ca,m||(m=k?[k]:[]),this.j=k?0:-1,this.i=null,this.g=m;t:{if(k=this.g.length,m=k-1,k&&(k=this.g[m],k!==null&&typeof k=="object"&&k.constructor===Object)){this.l=m-this.j,this.h=k;break t}W!==void 0&&-1<W?(this.l=Math.max(W,m+1-this.j),this.h=null):this.l=Number.MAX_VALUE}if(V)for(W=0;W<V.length;W++)m=V[W],m<this.l?(m+=this.j,(k=this.g[m])?_e(k):this.g[m]=Fe):(Ge(this),(k=this.h[m])?_e(k):this.h[m]=Fe)}var Fe=Object.freeze(_e([]));function Ge(m){var W=m.l+m.j;m.g[W]||(m.h=m.g[W]={})}function re(m,W,V){return W===-1?null:(V===void 0?0:V)||W>=m.l?m.h?m.h[W]:void 0:m.g[W+m.j]}function Qe(m){var W=W===void 0?!1:W,V=re(m,1,W);return V==null&&(V=Fe),V===Fe&&(V=_e([]),zt(m,1,V,W)),V}function te(m,W,V){return m=re(m,W),m=m==null?m:+m,m==null?V===void 0?0:V:m}function zt(m,W,V,k){(k===void 0?0:k)||W>=m.l?(Ge(m),m.h[W]=V):m.g[W+m.j]=V}function hn(m,W){m.i||(m.i={});var V=m.i[1];if(!V){var k=Qe(m);V=[];for(var z=0;z<k.length;z++)V[z]=new W(k[z]);m.i[1]=V}return V}function fe(m,W,V,k){var z=hn(m,V);W=W||new V,m=Qe(m),k!=null?(z.splice(k,0,W),m.splice(k,0,Ct(W))):(z.push(W),m.push(Ct(W)))}ve.prototype.toJSON=function(){var m=Ct(this);return Ie(m,Vn,bn)};function Ct(m,W){if(m.i)for(var V in m.i){var k=m.i[V];if(Array.isArray(k))for(var z=0;z<k.length;z++)k[z]&&Ct(k[z]);else k&&Ct(k)}return m.g}ve.prototype.toString=function(){return Ct(this).toString()};function Vt(m,W){return m=re(m,W),m==null?0:m}function ie(m,W){return m=re(m,W),m==null?"":m}function Ye(m,W){if(m=m.m){$e(W,W.g.end());for(var V=0;V<m.length;V++)$e(W,m[V])}}function ee(m,W){if(W.h==4)return!1;var V=W.m;return xe(W),W.N||(W=Wn(W.g.h,V,W.g.g),(V=m.m)?V.push(W):m.m=[W]),!0}function oe(m,W){var V=void 0;return new(V||(V=Promise))(function(k,z){function ot(bt){try{rt(W.next(bt))}catch(Rt){z(Rt)}}function O(bt){try{rt(W.throw(bt))}catch(Rt){z(Rt)}}function rt(bt){bt.done?k(bt.value):new V(function(Rt){Rt(bt.value)}).then(ot,O)}rt((W=W.apply(m,void 0)).next())})}function tt(m){ve.call(this,m)}pt(tt,ve);function it(m,W){for(;At(W);)switch(W.i){case 8:var V=We(W.g);zt(m,1,V);break;case 21:V=sn(W.g),zt(m,2,V);break;case 26:V=ye(W),zt(m,3,V);break;case 34:V=ye(W),zt(m,4,V);break;default:if(!ee(m,W))return m}return m}function ut(m){ve.call(this,m,-1,Pt)}pt(ut,ve),ut.prototype.addClassification=function(m,W){fe(this,m,tt,W)};var Pt=[1];function ae(m){ve.call(this,m)}pt(ae,ve);function ce(m,W){for(;At(W);)switch(W.i){case 13:var V=sn(W.g);zt(m,1,V);break;case 21:V=sn(W.g),zt(m,2,V);break;case 29:V=sn(W.g),zt(m,3,V);break;case 37:V=sn(W.g),zt(m,4,V);break;case 45:V=sn(W.g),zt(m,5,V);break;default:if(!ee(m,W))return m}return m}function St(m){ve.call(this,m,-1,me)}pt(St,ve);var me=[1];function He(m){ve.call(this,m)}pt(He,ve);function qe(m,W,V){if(V=m.createShader(V===0?m.VERTEX_SHADER:m.FRAGMENT_SHADER),m.shaderSource(V,W),m.compileShader(V),!m.getShaderParameter(V,m.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
4
3
|
|
|
5
|
-
`+
|
|
4
|
+
`+m.getShaderInfoLog(V));return V}function tn(m){return hn(m,tt).map(function(W){return{index:Vt(W,1),Y:te(W,2),label:re(W,3)!=null?ie(W,3):void 0,displayName:re(W,4)!=null?ie(W,4):void 0}})}function fn(m){return{x:te(m,1),y:te(m,2),z:te(m,3),visibility:re(m,4)!=null?te(m,4):void 0}}function yn(m,W){this.h=m,this.g=W,this.l=0}function Le(m,W,V){return en(m,W),typeof m.g.canvas.transferToImageBitmap=="function"?Promise.resolve(m.g.canvas.transferToImageBitmap()):V?Promise.resolve(m.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(m.g.canvas):(m.i===void 0&&(m.i=document.createElement("canvas")),new Promise(function(k){m.i.height=m.g.canvas.height,m.i.width=m.g.canvas.width,m.i.getContext("2d",{}).drawImage(m.g.canvas,0,0,m.g.canvas.width,m.g.canvas.height),k(m.i)}))}function en(m,W){var V=m.g;if(m.m===void 0){var k=qe(V,`
|
|
6
5
|
attribute vec2 aVertex;
|
|
7
6
|
attribute vec2 aTex;
|
|
8
7
|
varying vec2 vTex;
|
|
9
8
|
void main(void) {
|
|
10
9
|
gl_Position = vec4(aVertex, 0.0, 1.0);
|
|
11
10
|
vTex = aTex;
|
|
12
|
-
}`,0),
|
|
11
|
+
}`,0),z=qe(V,`
|
|
13
12
|
precision mediump float;
|
|
14
13
|
varying vec2 vTex;
|
|
15
14
|
uniform sampler2D sampler0;
|
|
16
15
|
void main(){
|
|
17
16
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
18
|
-
}`,1),
|
|
17
|
+
}`,1),ot=V.createProgram();if(V.attachShader(ot,k),V.attachShader(ot,z),V.linkProgram(ot),!V.getProgramParameter(ot,V.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
19
18
|
|
|
20
|
-
`+W.getProgramInfoLog(lt));E=p.m=lt,W.useProgram(E),P=W.getUniformLocation(E,"sampler0"),p.j={I:W.getAttribLocation(E,"aVertex"),H:W.getAttribLocation(E,"aTex"),da:P},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(P,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 zn(p){this.g=p}var nn=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 oe(this,function p(){return de(p,function(V){switch(V.g){case 1:return V.m=2,_(V,WebAssembly.instantiate(nn),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 En(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=Y(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)}}}o=En.prototype,o.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function rn(p,V){return p.g.files===void 0?[]:typeof p.g.files=="function"?p.g.files(V):p.g.files}function vn(p){return oe(p,function V(){var W=this,E,P,lt,z,it,bt,It,Ut,kt,qt,Et;return de(V,function(wt){switch(wt.g){case 1:return E=W,W.R?(P=rn(W,W.j),_(wt,Be(),2)):wt.return();case 2:if(lt=wt.h,typeof window=="object")return Zn("createMediapipeSolutionsWasm",{locateFile:W.locateFile}),Zn("createMediapipeSolutionsPackedAssets",{locateFile:W.locateFile}),bt=P.filter(function(Kt){return Kt.data!==void 0}),It=P.filter(function(Kt){return Kt.data===void 0}),Ut=Promise.all(bt.map(function(Kt){var Dt=cn(E,Kt.url);if(Kt.path!==void 0){var ce=Kt.path;Dt=Dt.then(function(pe){return E.overrideFile(ce,pe),Promise.resolve(pe)})}return Dt})),kt=Promise.all(It.map(function(Kt){return Kt.simd===void 0||Kt.simd&<||!Kt.simd&&!lt?Sn(E.locateFile(Kt.url,E.S)):Promise.resolve()})).then(function(){return oe(E,function Kt(){var Dt,ce,pe=this;return de(Kt,function(ge){if(ge.g==1)return Dt=window.createMediapipeSolutionsWasm,ce=window.createMediapipeSolutionsPackedAssets,_(ge,Dt(ce),2);pe.h=ge.h,ge.g=0})})}),qt=function(){return oe(E,function Kt(){var Dt=this;return de(Kt,function(ce){return Dt.g.graph&&Dt.g.graph.url?ce=_(ce,cn(Dt,Dt.g.graph.url),0):(ce.g=0,ce=void 0),ce})})}(),_(wt,Promise.all([kt,Ut,qt]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return z=P.filter(function(Kt){return Kt.simd===void 0||Kt.simd&<||!Kt.simd&&!lt}).map(function(Kt){return E.locateFile(Kt.url,E.S)}),importScripts.apply(null,k(z)),_(wt,createMediapipeSolutionsWasm(Module),6);case 6:W.h=wt.h,W.l=new OffscreenCanvas(1,1),W.h.canvas=W.l,it=W.h.GL.createContext(W.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),W.h.GL.makeContextCurrent(it),wt.g=4;break;case 7:if(W.l=document.createElement("canvas"),Et=W.l.getContext("webgl2",{}),!Et&&(Et=W.l.getContext("webgl",{}),!Et))return alert("Failed to create WebGL canvas context when passing video frame."),wt.return();W.D=Et,W.h.canvas=W.l,W.h.createContext(W.l,!0,!0,{});case 4:W.i=new W.h.SolutionWasm,W.R=!1,wt.g=0}})})}function Yn(p){return oe(p,function V(){var W=this,E,P,lt,z,it,bt,It,Ut;return de(V,function(kt){if(kt.g==1){if(W.g.graph&&W.g.graph.url&&W.P===W.g.graph.url)return kt.return();if(W.o=!0,!W.g.graph||!W.g.graph.url){kt.g=2;return}return W.P=W.g.graph.url,_(kt,cn(W,W.g.graph.url),3)}for(kt.g!=2&&(E=kt.h,W.i.loadGraph(E)),P=Y(Object.keys(W.B)),lt=P.next();!lt.done;lt=P.next())z=lt.value,W.i.overrideFile(z,W.B[z]);if(W.B={},W.g.listeners)for(it=Y(W.g.listeners),bt=it.next();!bt.done;bt=it.next())It=bt.value,$n(W,It);Ut=W.j,W.j={},W.setOptions(Ut),kt.g=0})})}o.reset=function(){return oe(this,function p(){var V=this;return de(p,function(W){V.i&&(V.i.reset(),V.m={},V.s={}),W.g=0})})},o.setOptions=function(p,V){var W=this;if(V=V||this.g.options){for(var E=[],P=[],lt={},z=Y(Object.keys(p)),it=z.next();!it.done;lt={K:lt.K,L:lt.L},it=z.next()){var bt=it.value;bt in this.j&&this.j[bt]===p[bt]||(this.j[bt]=p[bt],it=V[bt],it!==void 0&&(it.onChange&&(lt.K=it.onChange,lt.L=p[bt],E.push(function(It){return function(){return oe(W,function Ut(){var kt,qt=this;return de(Ut,function(Et){if(Et.g==1)return _(Et,It.K(It.L),2);kt=Et.h,kt===!0&&(qt.o=!0),Et.g=0})})}}(lt))),it.graphOptionXref&&(bt={valueNumber:it.type===1?p[bt]:0,valueBoolean:it.type===0?p[bt]:!1,valueString:it.type===2?p[bt]:""},it=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),it.graphOptionXref),bt),P.push(it))))}(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 oe(p,function V(){var W=this,E,P,lt,z,it,bt,It;return de(V,function(Ut){switch(Ut.g){case 1:if(!W.o)return Ut.return();if(!W.u){Ut.g=2;break}E=Y(W.u),P=E.next();case 3:if(P.done){Ut.g=5;break}return lt=P.value,_(Ut,lt(),4);case 4:P=E.next(),Ut.g=3;break;case 5:W.u=void 0;case 2:if(W.A){for(z=new W.h.GraphOptionChangeRequestList,it=Y(W.A),bt=it.next();!bt.done;bt=it.next())It=bt.value,z.push_back(It);W.i.changeOptions(z),z.delete(),W.A=void 0}W.o=!1,Ut.g=0}})})}o.initialize=function(){return oe(this,function p(){var V=this;return de(p,function(W){return W.g==1?_(W,vn(V),2):W.g!=3?_(W,Yn(V),3):_(W,Mn(V),0)})})};function cn(p,V){return oe(p,function W(){var E=this,P,lt;return de(W,function(z){return V in E.F?z.return(E.F[V]):(P=E.locateFile(V,""),lt=fetch(P).then(function(it){return it.arrayBuffer()}),E.F[V]=lt,z.return(lt))})})}o.overrideFile=function(p,V){this.i?this.i.overrideFile(p,V):this.B[p]=V},o.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},o.send=function(p,V){return oe(this,function W(){var E=this,P,lt,z,it,bt,It,Ut,kt,qt;return de(W,function(Et){switch(Et.g){case 1:return E.g.inputs?(P=1e3*(V==null?performance.now():V),_(Et,E.C,2)):Et.return();case 2:return _(Et,E.initialize(),3);case 3:for(lt=new E.h.PacketDataList,z=Y(Object.keys(p)),it=z.next();!it.done;it=z.next())if(bt=it.value,It=E.g.inputs[bt]){t:{var wt=E,Kt=p[bt];switch(It.type){case"video":var Dt=wt.m[It.stream];if(Dt||(Dt=new yn(wt.h,wt.D),wt.m[It.stream]=Dt),wt=Dt,wt.l===0&&(wt.l=wt.h.createTexture()),typeof HTMLVideoElement<"u"&&Kt instanceof HTMLVideoElement){var ce=Kt.videoWidth;Dt=Kt.videoHeight}else typeof HTMLImageElement<"u"&&Kt instanceof HTMLImageElement?(ce=Kt.naturalWidth,Dt=Kt.naturalHeight):(ce=Kt.width,Dt=Kt.height);Dt={glName:wt.l,width:ce,height:Dt},ce=wt.g,ce.canvas.width=Dt.width,ce.canvas.height=Dt.height,ce.activeTexture(ce.TEXTURE0),wt.h.bindTexture2d(wt.l),ce.texImage2D(ce.TEXTURE_2D,0,ce.RGBA,ce.RGBA,ce.UNSIGNED_BYTE,Kt),wt.h.bindTexture2d(0),wt=Dt;break t;case"detections":for(Dt=wt.m[It.stream],Dt||(Dt=new zn(wt.h),wt.m[It.stream]=Dt),wt=Dt,wt.data||(wt.data=new wt.g.DetectionListData),wt.data.reset(Kt.length),Dt=0;Dt<Kt.length;++Dt){ce=Kt[Dt];var pe=wt.data,ge=pe.setBoundingBox,ke=Dt,h=ce.T,g=new Ne;Pt(g,1,h.Z),Pt(g,2,h.$),Pt(g,3,h.height),Pt(g,4,h.width),Pt(g,5,h.rotation),Pt(g,6,h.X);var G=h=new we;Ot(G,1,re(g,1)),Ot(G,2,re(g,2)),Ot(G,3,re(g,3)),Ot(G,4,re(g,4)),Ot(G,5,re(g,5));var C=re(g,6);if(C!=null&&C!=null){Ze(G.g,48);var M=G.g,Q=C;C=0>Q,Q=Math.abs(Q);var B=Q>>>0;for(Q=Math.floor((Q-B)/4294967296),Q>>>=0,C&&(Q=~Q>>>0,B=(~B>>>0)+1,4294967295<B&&(B=0,Q++,4294967295<Q&&(Q=0))),he=B,Ye=Q,C=he,B=Ye;0<B||127<C;)M.push(C&127|128),C=(C>>>7|B<<25)>>>0,B>>>=7;M.push(C)}if(Fe(g,G),h=Xe(h),ge.call(pe,ke,h),ce.O)for(pe=0;pe<ce.O.length;++pe)g=ce.O[pe],G=!!g.visibility,ge=wt.data,ke=ge.addNormalizedLandmark,h=Dt,g=Object.assign(Object.assign({},g),{visibility:G?g.visibility:0}),G=new ae,Pt(G,1,g.x),Pt(G,2,g.y),Pt(G,3,g.z),g.visibility&&Pt(G,4,g.visibility),M=g=new we,Ot(M,1,re(G,1)),Ot(M,2,re(G,2)),Ot(M,3,re(G,3)),Ot(M,4,re(G,4)),Ot(M,5,re(G,5)),Fe(G,M),g=Xe(g),ke.call(ge,h,g);if(ce.M)for(pe=0;pe<ce.M.length;++pe){if(ge=wt.data,ke=ge.addClassification,h=Dt,g=ce.M[pe],G=new nt,Pt(G,2,g.Y),g.index&&Pt(G,1,g.index),g.label&&Pt(G,3,g.label),g.displayName&&Pt(G,4,g.displayName),M=g=new we,B=re(G,1),B!=null&&B!=null)if(Ze(M.g,8),C=M.g,0<=B)Ze(C,B);else{for(Q=0;9>Q;Q++)C.push(B&127|128),B>>=7;C.push(1)}Ot(M,2,re(G,2)),C=re(G,3),C!=null&&(C=xn(C),Ze(M.g,26),Ze(M.g,C.length),$e(M,M.g.end()),$e(M,C)),C=re(G,4),C!=null&&(C=xn(C),Ze(M.g,34),Ze(M.g,C.length),$e(M,M.g.end()),$e(M,C)),Fe(G,M),g=Xe(g),ke.call(ge,h,g)}}wt=wt.data;break t;default:wt={}}}switch(Ut=wt,kt=It.stream,It.type){case"video":lt.pushTexture2d(Object.assign(Object.assign({},Ut),{stream:kt,timestamp:P}));break;case"detections":qt=Ut,qt.stream=kt,qt.timestamp=P,lt.pushDetectionList(qt);break;default:throw Error("Unknown input config type: '"+It.type+"'")}}return E.i.send(lt),_(Et,E.C,4);case 4:lt.delete(),Et.g=0}})})};function Tn(p,V,W){return oe(p,function E(){var P,lt,z,it,bt,It,Ut=this,kt,qt,Et,wt,Kt,Dt,ce,pe;return de(E,function(ge){switch(ge.g){case 1:if(!W)return ge.return(V);for(P={},lt=0,z=Y(Object.keys(W)),it=z.next();!it.done;it=z.next())bt=it.value,It=W[bt],typeof It!="string"&&It.type==="texture"&&V[It.stream]!==void 0&&++lt;1<lt&&(Ut.G=!1),kt=Y(Object.keys(W)),it=kt.next();case 2:if(it.done){ge.g=4;break}if(qt=it.value,Et=W[qt],typeof Et=="string")return ce=P,pe=qt,_(ge,Dn(Ut,qt,V[Et]),14);if(wt=V[Et.stream],Et.type==="detection_list"){if(wt){for(var ke=wt.getRectList(),h=wt.getLandmarksList(),g=wt.getClassificationsList(),G=[],C=0;C<ke.size();++C){var M=ke.get(C);t:{var Q=new Ne;for(M=new Ce(M);Bt(M);)switch(M.i){case 13:var B=sn(M.g);Pt(Q,1,B);break;case 21:B=sn(M.g),Pt(Q,2,B);break;case 29:B=sn(M.g),Pt(Q,3,B);break;case 37:B=sn(M.g),Pt(Q,4,B);break;case 45:B=sn(M.g),Pt(Q,5,B);break;case 48:for(var tt=M.g,ct=128,s=0,X=B=0;4>X&&128<=ct;X++)ct=tt.h[tt.g++],s|=(ct&127)<<7*X;if(128<=ct&&(ct=tt.h[tt.g++],s|=(ct&127)<<28,B|=(ct&127)>>4),128<=ct)for(X=0;5>X&&128<=ct;X++)ct=tt.h[tt.g++],B|=(ct&127)<<7*X+3;128>ct?(tt=s>>>0,ct=B>>>0,(B=ct&2147483648)&&(tt=~tt+1>>>0,ct=~ct>>>0,tt==0&&(ct=ct+1>>>0)),tt=4294967296*ct+(tt>>>0),B=B?-tt:tt):(tt.l=!0,B=void 0),Pt(Q,6,B);break;default:if(!ee(Q,M))break t}}Q={Z:te(Q,1),$:te(Q,2),height:te(Q,3),width:te(Q,4),rotation:te(Q,5,0),X:Wt(Q,6)},B=h.get(C);t:for(M=new Tt,B=new Ce(B);Bt(B);)switch(B.i){case 10:tt=zt(B,new ae,ue),fe(M,tt,ae,void 0);break;default:if(!ee(M,B))break t}M=hn(M,ae).map(fn),tt=g.get(C);t:for(B=new at,tt=new Ce(tt);Bt(tt);)switch(tt.i){case 10:B.addClassification(zt(tt,new nt,ot));break;default:if(!ee(B,tt))break t}Q={T:Q,O:M,M:tn(B)},G.push(Q)}ke=G}else ke=[];P[qt]=ke,ge.g=7;break}if(Et.type==="proto_list"){if(wt){for(ke=Array(wt.size()),h=0;h<wt.size();h++)ke[h]=wt.get(h);wt.delete()}else ke=[];P[qt]=ke,ge.g=7;break}if(wt===void 0){ge.g=3;break}if(Et.type==="float_list"){P[qt]=wt,ge.g=7;break}if(Et.type==="proto"){P[qt]=wt,ge.g=7;break}if(Et.type!=="texture")throw Error("Unknown output config type: '"+Et.type+"'");return Kt=Ut.s[qt],Kt||(Kt=new yn(Ut.h,Ut.D),Ut.s[qt]=Kt),_(ge,He(Kt,wt,Ut.G),13);case 13:Dt=ge.h,P[qt]=Dt;case 7:Et.transform&&P[qt]&&(P[qt]=Et.transform(P[qt])),ge.g=3;break;case 14:ce[pe]=ge.h;case 3:it=kt.next(),ge.g=2;break;case 4:return ge.return(P)}})})}function Dn(p,V,W){return oe(p,function E(){var P=this,lt;return de(E,function(z){return typeof W=="number"||W instanceof Uint8Array||W instanceof P.h.Uint8BlobList?z.return(W):W instanceof P.h.Texture2dDataOut?(lt=P.s[V],lt||(lt=new yn(P.h,P.D),P.s[V]=lt),z.return(He(lt,W,P.G))):z.return(void 0)})})}function $n(p,V){for(var W=V.name||"$",E=[].concat(k(V.wants)),P=new p.h.StringList,lt=Y(V.wants),z=lt.next();!z.done;z=lt.next())P.push_back(z.value);lt=p.h.PacketListener.implement({onResults:function(it){for(var bt={},It=0;It<V.wants.length;++It)bt[E[It]]=it.get(It);var Ut=p.listeners[W];Ut&&(p.C=Tn(p,bt,V.outs).then(function(kt){kt=Ut(kt);for(var qt=0;qt<V.wants.length;++qt){var Et=bt[E[qt]];typeof Et=="object"&&Et.hasOwnProperty&&Et.hasOwnProperty("delete")&&Et.delete()}kt&&(p.C=kt)}))}}),p.i.attachMultiListener(P,lt),P.delete()}o.onResults=function(p,V){this.listeners[V||"$"]=p},Re("Solution",En),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 V=this;p=p||{},this.g=new En({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:wn(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 oe(V,function E(){var P,lt,z=this,it;return de(E,function(bt){return bt.g==1?(P=wn(W),lt="third_party/mediapipe/modules/selfie_segmentation/"+P,_(bt,cn(z.g,P),2)):(it=bt.h,z.g.overrideFile(lt,it),bt.return(!0))})})}}}})}o=Cn.prototype,o.close=function(){return this.g.close(),Promise.resolve()},o.onResults=function(p){this.g.onResults(p)},o.initialize=function(){return oe(this,function p(){var V=this;return de(p,function(W){return _(W,V.g.initialize(),0)})})},o.reset=function(){this.g.reset()},o.send=function(p){return oe(this,function V(){var W=this;return de(V,function(E){return _(E,W.g.send(p),0)})})},o.setOptions=function(p){this.g.setOptions(p)},Re("SelfieSegmentation",Cn),Re("VERSION","0.1.1632777926")}).call(mi);const pi={};(function(){var o;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,x){return l==Array.prototype||l==Object.prototype||(l[v]=x.value),l};function m(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 x=l[v];if(x&&x.Math==Math)return x}throw Error("Cannot find global object")}var y=m(this);function I(l,v){if(v)t:{var x=y;l=l.split(".");for(var T=0;T<l.length-1;T++){var J=l[T];if(!(J in x))break t;x=x[J]}l=l[l.length-1],T=x[l],v=v(T),v!=T&&v!=null&&r(x,l,{configurable:!0,writable:!0,value:v})}}I("Symbol",function(l){function v(i){if(this instanceof v)throw new TypeError("Symbol is not a constructor");return new x(T+(i||"")+"_"+J++,i)}function x(i,d){this.g=i,r(this,"description",{configurable:!0,writable:!0,value:d})}if(l)return l;x.prototype.toString=function(){return this.g};var T="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",J=0;return v}),I("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(" "),x=0;x<v.length;x++){var T=y[v[x]];typeof T=="function"&&typeof T.prototype[l]!="function"&&r(T.prototype,l,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return l});function F(l){return l={next:l},l[Symbol.iterator]=function(){return this},l}function Y(l){var v=typeof Symbol<"u"&&Symbol.iterator&&l[Symbol.iterator];return v?v.call(l):{next:n(l)}}function k(l){if(!(l instanceof Array)){l=Y(l);for(var v,x=[];!(v=l.next()).done;)x.push(v.value);l=x}return l}var et=typeof Object.create=="function"?Object.create:function(l){function v(){}return v.prototype=l,new v},O;if(typeof Object.setPrototypeOf=="function")O=Object.setPrototypeOf;else{var st;t:{var xt={a:!0},Vt={};try{Vt.__proto__=xt,st=Vt.a;break t}catch{}st=!1}O=st?function(l,v){if(l.__proto__=v,l.__proto__!==v)throw new TypeError(l+" is not extensible");return l}:null}var dt=O;function ht(l,v){if(l.prototype=et(v.prototype),l.prototype.constructor=l,dt)dt(l,v);else for(var x in v)if(x!="prototype")if(Object.defineProperties){var T=Object.getOwnPropertyDescriptor(v,x);T&&Object.defineProperty(l,x,T)}else l[x]=v[x];l.ra=v.prototype}function Ht(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function Lt(l){if(l.l)throw new TypeError("Generator is already running");l.l=!0}Ht.prototype.s=function(l){this.h=l};function At(l,v){l.j={fa:v,ga:!0},l.g=l.o||l.u}Ht.prototype.return=function(l){this.j={return:l},this.g=this.u};function _(l,v,x){return l.g=x,{value:v}}function Ee(l){this.g=new Ht,this.h=l}function an(l,v){Lt(l.g);var x=l.g.i;return x?We(l,"return"in x?x.return:function(T){return{value:T,done:!0}},v,l.g.return):(l.g.return(v),$t(l))}function We(l,v,x,T){try{var J=v.call(l.g.i,x);if(!(J instanceof Object))throw new TypeError("Iterator result "+J+" is not an object");if(!J.done)return l.g.l=!1,J;var i=J.value}catch(d){return l.g.i=null,At(l.g,d),$t(l)}return l.g.i=null,T.call(l.g,i),$t(l)}function $t(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(x){l.g.h=void 0,At(l.g,x)}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 An(l){this.next=function(v){return Lt(l.g),l.g.i?v=We(l,l.g.i.next,v,l.g.s):(l.g.s(v),v=$t(l)),v},this.throw=function(v){return Lt(l.g),l.g.i?v=We(l,l.g.i.throw,v,l.g.s):(At(l.g,v),v=$t(l)),v},this.return=function(v){return an(l,v)},this[Symbol.iterator]=function(){return this}}function de(l){function v(T){return l.next(T)}function x(T){return l.throw(T)}return new Promise(function(T,J){function i(d){d.done?T(d.value):Promise.resolve(d.value).then(v,x).then(i,J)}i(l.next())})}function gt(l){return de(new An(new Ee(l)))}I("Promise",function(l){function v(d){this.h=0,this.i=void 0,this.g=[],this.s=!1;var Z=this.j();try{d(Z.resolve,Z.reject)}catch(e){Z.reject(e)}}function x(){this.g=null}function T(d){return d instanceof v?d:new v(function(Z){Z(d)})}if(l)return l;x.prototype.h=function(d){if(this.g==null){this.g=[];var Z=this;this.i(function(){Z.l()})}this.g.push(d)};var J=y.setTimeout;x.prototype.i=function(d){J(d,0)},x.prototype.l=function(){for(;this.g&&this.g.length;){var d=this.g;this.g=[];for(var Z=0;Z<d.length;++Z){var e=d[Z];d[Z]=null;try{e()}catch(c){this.j(c)}}}this.g=null},x.prototype.j=function(d){this.i(function(){throw d})},v.prototype.j=function(){function d(c){return function(f){e||(e=!0,c.call(Z,f))}}var Z=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 Z=d!=null;break t;case"function":Z=!0;break t;default:Z=!1}Z?this.A(d):this.o(d)}},v.prototype.A=function(d){var Z=void 0;try{Z=d.then}catch(e){this.l(e);return}typeof Z=="function"?this.I(Z,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,Z){if(this.h!=0)throw Error("Cannot settle("+d+", "+Z+"): Promise already settled in state"+this.h);this.h=d,this.i=Z,this.h===2&&this.G(),this.B()},v.prototype.G=function(){var d=this;J(function(){if(d.C()){var Z=y.console;typeof Z<"u"&&Z.error(d.i)}},1)},v.prototype.C=function(){if(this.s)return!1;var d=y.CustomEvent,Z=y.Event,e=y.dispatchEvent;return typeof e>"u"?!0:(typeof d=="function"?d=new d("unhandledrejection",{cancelable:!0}):typeof Z=="function"?d=new Z("unhandledrejection",{cancelable:!0}):(d=y.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)i.h(this.g[d]);this.g=null}};var i=new x;return v.prototype.H=function(d){var Z=this.j();d.M(Z.resolve,Z.reject)},v.prototype.I=function(d,Z){var e=this.j();try{d.call(Z,e.resolve,e.reject)}catch(c){e.reject(c)}},v.prototype.then=function(d,Z){function e(u,a){return typeof u=="function"?function(b){try{c(u(b))}catch(S){f(S)}}:a}var c,f,t=new v(function(u,a){c=u,f=a});return this.M(e(d,c),e(Z,f)),t},v.prototype.catch=function(d){return this.then(void 0,d)},v.prototype.M=function(d,Z){function e(){switch(c.h){case 1:d(c.i);break;case 2:Z(c.i);break;default:throw Error("Unexpected state: "+c.h)}}var c=this;this.g==null?i.h(e):this.g.push(e),this.s=!0},v.resolve=T,v.reject=function(d){return new v(function(Z,e){e(d)})},v.race=function(d){return new v(function(Z,e){for(var c=Y(d),f=c.next();!f.done;f=c.next())T(f.value).M(Z,e)})},v.all=function(d){var Z=Y(d),e=Z.next();return e.done?T([]):new v(function(c,f){function t(b){return function(S){u[b]=S,a--,a==0&&c(u)}}var u=[],a=0;do u.push(void 0),a++,T(e.value).M(t(u.length-1),f),e=Z.next();while(!e.done)})},v});function pn(l,v){l instanceof String&&(l+="");var x=0,T=!1,J={next:function(){if(!T&&x<l.length){var i=x++;return{value:v(i,l[i]),done:!1}}return T=!0,{done:!0,value:void 0}}};return J[Symbol.iterator]=function(){return J},J}var jn=typeof Object.assign=="function"?Object.assign:function(l,v){for(var x=1;x<arguments.length;x++){var T=arguments[x];if(T)for(var J in T)Object.prototype.hasOwnProperty.call(T,J)&&(l[J]=T[J])}return l};I("Object.assign",function(l){return l||jn}),I("Object.is",function(l){return l||function(v,x){return v===x?v!==0||1/v===1/x:v!==v&&x!==x}}),I("Array.prototype.includes",function(l){return l||function(v,x){var T=this;T instanceof String&&(T=String(T));var J=T.length;for(x=x||0,0>x&&(x=Math.max(x+J,0));x<J;x++){var i=T[x];if(i===v||Object.is(i,v))return!0}return!1}}),I("String.prototype.includes",function(l){return l||function(v,x){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,x||0)!==-1}}),I("Array.prototype.keys",function(l){return l||function(){return pn(this,function(v){return v})}});var Re=this||self;function Jt(l,v){l=l.split(".");var x=Re;l[0]in x||typeof x.execScript>"u"||x.execScript("var "+l[0]);for(var T;l.length&&(T=l.shift());)l.length||v===void 0?x[T]&&x[T]!==Object.prototype[T]?x=x[T]:x=x[T]={}:x[T]=v}function Te(){throw Error("Invalid UTF8")}function on(l,v){return v=String.fromCharCode.apply(null,v),l==null?v:l+v}var Xn,Fn=typeof TextDecoder<"u",xn,Nn=typeof TextEncoder<"u",dn={},bn=null;function kn(l){var v;v===void 0&&(v=0),je(),v=dn[v];for(var x=Array(Math.floor(l.length/3)),T=v[64]||"",J=0,i=0;J<l.length-2;J+=3){var d=l[J],Z=l[J+1],e=l[J+2],c=v[d>>2];d=v[(d&3)<<4|Z>>4],Z=v[(Z&15)<<2|e>>6],e=v[e&63],x[i++]=c+d+Z+e}switch(c=0,e=T,l.length-J){case 2:c=l[J+1],e=v[(c&15)<<2]||T;case 1:l=l[J],x[i]=v[l>>2]+v[(l&3)<<4|c>>4]+e+T}return x.join("")}function Hn(l){var v=l.length,x=3*v/4;x%3?x=Math.floor(x):"=.".indexOf(l[v-1])!=-1&&(x="=.".indexOf(l[v-2])!=-1?x-2:x-1);var T=new Uint8Array(x),J=0;return Oe(l,function(i){T[J++]=i}),J!==x?T.subarray(0,J):T}function Oe(l,v){function x(e){for(;T<l.length;){var c=l.charAt(T++),f=bn[c];if(f!=null)return f;if(!/^[\s\xa0]*$/.test(c))throw Error("Unknown base64 encoding at char: "+c)}return e}je();for(var T=0;;){var J=x(-1),i=x(0),d=x(64),Z=x(64);if(Z===64&&J===-1)break;v(J<<2|i>>4),d!=64&&(v(i<<4&240|d>>2),Z!=64&&v(d<<6&192|Z))}}function je(){if(!bn){bn={};for(var l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),v=["+/=","+/","-_=","-_.","-_"],x=0;5>x;x++){var T=l.concat(v[x].split(""));dn[x]=T;for(var J=0;J<T.length;J++){var i=T[J];bn[i]===void 0&&(bn[i]=J)}}}}var In=typeof Uint8Array=="function";function Vn(l){return In&&l!=null&&l instanceof Uint8Array}var he;function Ye(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",ne=0,Ve=0;function sn(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 Hn(l);if(l.constructor===Ye)return!v&&(v=l.L)&&v.constructor===Uint8Array?v:(v=l.L,v=v==null||Vn(v)?v:typeof v=="string"?Hn(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 Me(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&&Ce(this,l)}function Ce(l,v){l.h=sn(v,l.v),l.j=0,l.i=l.h.length,l.g=l.j}Ze.prototype.reset=function(){this.g=this.j};function Bt(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,x=v[l.g],T=x&127;if(128>x)return l.g+=1,Bt(l),T;if(x=v[l.g+1],T|=(x&127)<<7,128>x)return l.g+=2,Bt(l),T;if(x=v[l.g+2],T|=(x&127)<<14,128>x)return l.g+=3,Bt(l),T;if(x=v[l.g+3],T|=(x&127)<<21,128>x)return l.g+=4,Bt(l),T;if(x=v[l.g+4],l.g+=5,T|=(x&15)<<28,128>x)return Bt(l),T;if(128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++])throw Qt();return Bt(l),T}var zt=[];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 we(l,v){for(;127<v;)l.g.push(v&127|128),v>>>=7;l.g.push(v)}function $e(l){var v={},x=v.W===void 0?!1:v.W;this.l={v:v.v===void 0?!1:v.v},this.W=x,v=this.l,zt.length?(x=zt.pop(),v&&(x.v=v.v),l&&Ce(x,l),l=x):l=new Ze(l,v),this.g=l,this.j=this.g.g,this.h=this.i=-1}$e.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 x=Ie(l.g)>>>0;if(v=x>>>3,x&=7,!(0<=x&&5>=x))throw Me(x,l.j);if(1>v)throw Error("Invalid field number: "+v+" (at position "+l.j+")");return l.i=v,l.h=x,!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,x=v+10;v<x;)if((l.h[v++]&128)===0){l.g=v,Bt(l);break t}throw Qt()}break;case 1:l=l.g,l.g+=8,Bt(l);break;case 2:l.h!=2?Ot(l):(v=Ie(l.g)>>>0,l=l.g,l.g+=v,Bt(l));break;case 5:l=l.g,l.g+=4,Bt(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 Me(l.h,l.j)}}var ze=[];function _e(){this.i=[],this.h=0,this.g=new ye}function Se(l,v){v.length!==0&&(l.i.push(v),l.h+=v.length)}function Wn(l,v){if(v=v.ca){Se(l,l.g.end());for(var x=0;x<v.length;x++)Se(l,v[x])}}var ln=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Qe(l,v){Object.isFrozen(l)||(ln?l[ln]|=v:l.N!==void 0?l.N|=v:Object.defineProperties(l,{N:{value:v,configurable:!0,writable:!0,enumerable:!1}}))}function un(l){var v;return ln?v=l[ln]:v=l.N,v==null?0:v}function ve(l){return Qe(l,1),l}function Le(l){return Array.isArray(l)?!!(un(l)&2):!1}function Ge(l){if(!Array.isArray(l))throw Error("cannot mark non-array as immutable");Qe(l,2)}function re(l){return l!==null&&typeof l=="object"&&!Array.isArray(l)&&l.constructor===Object}var De=Object.freeze(ve([]));function te(l){if(Le(l.m))throw Error("Cannot mutate an immutable Message")}var Pt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function hn(l){return{value:l,configurable:!1,writable:!1,enumerable:!1}}function fe(l,v,x){return v===-1?null:v>=l.i?l.g?l.g[v]:void 0:(x===void 0?0:x)&&l.g&&(x=l.g[v],x!=null)?x:l.m[v+l.h]}function Nt(l,v,x,T){T=T===void 0?!1:T,te(l),v<l.i&&!T?l.m[v+l.h]=x:(l.g||(l.g=l.m[l.i+l.h]={}))[v]=x}function Wt(l,v,x,T){x=x===void 0?!0:x,T=T===void 0?!1:T;var J=fe(l,v,T);return J==null&&(J=De),Le(l.m)?x&&(Ge(J),Object.freeze(J)):(J===De||Le(J))&&(J=ve(J.slice()),Nt(l,v,J,T)),J}function ie(l,v,x){return l=fe(l,v),l=l==null?l:+l,l==null?x===void 0?0:x:l}function Fe(l,v,x,T){l.j||(l.j={});var J=Le(l.m),i=l.j[x];if(!i){T=Wt(l,x,!0,T===void 0?!1:T),i=[],J=J||Le(T);for(var d=0;d<T.length;d++)i[d]=new v(T[d]),J&&Ge(i[d].m);J&&(Ge(i),Object.freeze(i)),l.j[x]=i}return i}function ee(l,v,x,T,J){var i=i===void 0?!1:i;return te(l),i=Fe(l,x,v,i),x=T||new x,l=Wt(l,v),J!=null?(i.splice(J,0,x),l.splice(J,0,x.m)):(i.push(x),l.push(x.m)),x}function oe(l,v){return l=fe(l,v),l==null?0:l}function nt(l,v){return l=fe(l,v),l==null?"":l}function ot(l){switch(typeof l){case"number":return isFinite(l)?l:String(l);case"object":if(l&&!Array.isArray(l)){if(Vn(l))return kn(l);if(l instanceof Ye){var v=l.L;return v=v==null||typeof v=="string"?v:In&&v instanceof Uint8Array?kn(v):null,(l.L=v)||""}}}return l}function at(l){var v=ue;return v=v===void 0?Tt:v,ae(l,v)}function _t(l,v){if(l!=null){if(Array.isArray(l))l=ae(l,v);else if(re(l)){var x={},T;for(T in l)x[T]=_t(l[T],v);l=x}else l=v(l);return l}}function ae(l,v){for(var x=l.slice(),T=0;T<x.length;T++)x[T]=_t(x[T],v);return Array.isArray(l)&&un(l)&1&&ve(x),x}function ue(l){return l&&typeof l=="object"&&l.toJSON?l.toJSON():(l=ot(l),Array.isArray(l)?at(l):l)}function Tt(l){return Vn(l)?new Uint8Array(l):l}function me(l,v,x){l||(l=Ne),Ne=null;var T=this.constructor.h;l||(l=T?[T]:[]),this.h=(T?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=l;t:{if(T=this.m.length,l=T-1,T&&(T=this.m[l],re(T))){this.i=l-this.h,this.g=T;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(x)for(v=0;v<x.length;v++)if(l=x[v],l<this.i)l+=this.h,(T=this.m[l])?Array.isArray(T)&&ve(T):this.m[l]=De;else{T=this.g||(this.g=this.m[this.i+this.h]={});var J=T[l];J?Array.isArray(J)&&ve(J):T[l]=De}}me.prototype.toJSON=function(){return at(this.m)},me.prototype.toString=function(){return this.m.toString()};var Ne;function qe(){me.apply(this,arguments)}if(ht(qe,me),Pt){var tn={};Object.defineProperties(qe,(tn[Symbol.hasInstance]=hn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),tn))}function fn(l,v,x){if(x){var T={},J;for(J in x){var i=x[J],d=i.ja;d||(T.F=i.pa||i.ha.P,i.ba?(T.U=Sn(i.ba),d=function(Z){return function(e,c,f){return Z.F(e,c,f,Z.U)}}(T)):i.da?(T.T=Be(i.X.g,i.da),d=function(Z){return function(e,c,f){return Z.F(e,c,f,Z.T)}}(T)):d=T.F,i.ja=d),d(v,l,i.X),T={F:T.F,U:T.U,T:T.T}}}Wn(v,l)}var yn=Symbol();function He(l,v,x){return l[yn]||(l[yn]=function(T,J){return v(T,J,x)})}function en(l){var v=l[yn];if(!v){var x=p(l);v=function(T,J){return V(T,J,x)},l[yn]=v}return v}function zn(l){var v=l.ba;if(v)return en(v);if(v=l.oa)return He(l.X.g,v,l.da)}function nn(l){var v=zn(l),x=l.X,T=l.ha.O;return v?function(J,i){return T(J,i,x,v)}:function(J,i){return T(J,i,x)}}function Je(l,v,x,T,J,i){l=l();var d=0;for(l.length&&typeof l[0]!="number"&&(x(v,l[0]),d++);d<l.length;){x=l[d++];for(var Z=d+1;Z<l.length&&typeof l[Z]!="number";)Z++;var e=l[d++];switch(Z-=d,Z){case 0:T(v,x,e);break;case 1:T(v,x,e,l[d++]);break;case 2:J(v,x,e,l[d++],l[d++]);break;case 3:Z=l[d++];var c=l[d++],f=l[d++];Array.isArray(f)?J(v,x,e,Z,c,f):i(v,x,e,Z,c,f);break;case 4:i(v,x,e,l[d++],l[d++],l[d++],l[d++]);break;default:throw Error("unexpected number of binary field arguments: "+Z)}}return v}var Zn=Symbol();function Sn(l){var v=l[Zn];if(!v){var x=cn(l);v=function(T,J){return E(T,J,x)},l[Zn]=v}return v}function Be(l,v){var x=l[Zn];return x||(x=function(T,J){return fn(T,J,v)},l[Zn]=x),x}var En=Symbol();function rn(l,v){l.push(v)}function vn(l,v,x){l.push(v,x.P)}function Yn(l,v,x,T,J){var i=Sn(J),d=x.P;l.push(v,function(Z,e,c){return d(Z,e,c,T,i)})}function Mn(l,v,x,T,J,i){var d=Be(T,i),Z=x.P;l.push(v,function(e,c,f){return Z(e,c,f,T,d)})}function cn(l){var v=l[En];return v||Je(l,l[En]=[],rn,vn,Yn,Mn)}var Tn=Symbol();function Dn(l,v){l[0]=v}function $n(l,v,x,T){var J=x.O;l[v]=T?function(i,d,Z){return J(i,d,Z,T)}:J}function wn(l,v,x,T,J,i){var d=x.O,Z=en(J);l[v]=function(e,c,f){return d(e,c,f,T,Z,i)}}function Cn(l,v,x,T,J,i,d){var Z=x.O,e=He(T,J,i);l[v]=function(c,f,t){return Z(c,f,t,T,e,d)}}function p(l){var v=l[Tn];return v||Je(l,l[Tn]={},Dn,$n,wn,Cn)}function V(l,v,x){for(;Xe(v)&&v.h!=4;){var T=v.i,J=x[T];if(!J){var i=x[0];i&&(i=i[T])&&(J=x[T]=nn(i))}if((!J||!J(v,l,T))&&(J=v,T=l,i=J.j,Ot(J),!J.W)){var d=J.g.h;J=J.g.g,J=i===J?he||(he=new Uint8Array(0)):Pe?d.slice(i,J):new Uint8Array(d.subarray(i,J)),(i=T.ca)?i.push(J):T.ca=[J]}}return l}function W(l,v,x){if(ze.length){var T=ze.pop();l&&(Ce(T.g,l),T.i=-1,T.h=-1),l=T}else l=new $e(l);try{return V(new v,l,p(x))}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,x){for(var T=x.length,J=T%2==1,i=J?1:0;i<T;i+=2)(0,x[i+1])(v,l,x[i]);fn(l,v,J?x[0]:void 0)}function P(l,v){var x=new _e;E(l,x,cn(v)),Se(x,x.g.end()),l=new Uint8Array(x.h),v=x.i;for(var T=v.length,J=0,i=0;i<T;i++){var d=v[i];l.set(d,J),J+=d.length}return x.i=[l],l}function lt(l,v){return{O:l,P:v}}var z=lt(function(l,v,x){if(l.h!==5)return!1;l=l.g;var T=l.h[l.g],J=l.h[l.g+1],i=l.h[l.g+2],d=l.h[l.g+3];return l.g+=4,Bt(l),J=(T<<0|J<<8|i<<16|d<<24)>>>0,l=2*(J>>31)+1,T=J>>>23&255,J&=8388607,Nt(v,x,T==255?J?NaN:1/0*l:T==0?l*Math.pow(2,-149)*J:l*Math.pow(2,T-150)*(J+Math.pow(2,23))),!0},function(l,v,x){if(v=fe(v,x),v!=null){we(l.g,8*x+5),l=l.g;var T=v;T=(x=0>T?1:0)?-T:T,T===0?0<1/T?ne=Ve=0:(Ve=0,ne=2147483648):isNaN(T)?(Ve=0,ne=2147483647):34028234663852886e22<T?(Ve=0,ne=(x<<31|2139095040)>>>0):11754943508222875e-54>T?(T=Math.round(T/Math.pow(2,-149)),Ve=0,ne=(x<<31|T)>>>0):(v=Math.floor(Math.log(T)/Math.LN2),T*=Math.pow(2,-v),T=Math.round(8388608*T),16777216<=T&&++v,Ve=0,ne=(x<<31|v+127<<23|T&8388607)>>>0),x=ne,l.g.push(x>>>0&255),l.g.push(x>>>8&255),l.g.push(x>>>16&255),l.g.push(x>>>24&255)}}),it=lt(function(l,v,x){if(l.h!==0)return!1;for(var T=l.g,J=128,i=0,d=l=0;4>d&&128<=J;d++)J=T.h[T.g++],Bt(T),i|=(J&127)<<7*d;if(128<=J&&(J=T.h[T.g++],Bt(T),i|=(J&127)<<28,l|=(J&127)>>4),128<=J)for(d=0;5>d&&128<=J;d++)J=T.h[T.g++],Bt(T),l|=(J&127)<<7*d+3;if(128>J)T=i>>>0,J=l>>>0,(l=J&2147483648)&&(T=~T+1>>>0,J=~J>>>0,T==0&&(J=J+1>>>0)),T=4294967296*J+(T>>>0);else throw Qt();return Nt(v,x,l?-T:T),!0},function(l,v,x){if(v=fe(v,x),v!=null&&v!=null){we(l.g,8*x),l=l.g;var T=v;for(x=0>T,T=Math.abs(T),v=T>>>0,T=Math.floor((T-v)/4294967296),T>>>=0,x&&(T=~T>>>0,v=(~v>>>0)+1,4294967295<v&&(v=0,T++,4294967295<T&&(T=0))),ne=v,Ve=T,x=ne,v=Ve;0<v||127<x;)l.g.push(x&127|128),x=(x>>>7|v<<25)>>>0,v>>>=7;l.g.push(x)}}),bt=lt(function(l,v,x){return l.h!==0?!1:(Nt(v,x,Ie(l.g)),!0)},function(l,v,x){if(v=fe(v,x),v!=null&&v!=null)if(we(l.g,8*x),l=l.g,x=v,0<=x)we(l,x);else{for(v=0;9>v;v++)l.g.push(x&127|128),x>>=7;l.g.push(1)}}),It=lt(function(l,v,x){if(l.h!==2)return!1;var T=Ie(l.g)>>>0;l=l.g;var J=l.g;l.g+=T,Bt(l),l=l.h;var i;if(Fn)(i=Xn)||(i=Xn=new TextDecoder("utf-8",{fatal:!0})),i=i.decode(l.subarray(J,J+T));else{T=J+T;for(var d=[],Z=null,e,c,f;J<T;)e=l[J++],128>e?d.push(e):224>e?J>=T?Te():(c=l[J++],194>e||(c&192)!==128?(J--,Te()):d.push((e&31)<<6|c&63)):240>e?J>=T-1?Te():(c=l[J++],(c&192)!==128||e===224&&160>c||e===237&&160<=c||((i=l[J++])&192)!==128?(J--,Te()):d.push((e&15)<<12|(c&63)<<6|i&63)):244>=e?J>=T-2?Te():(c=l[J++],(c&192)!==128||(e<<28)+(c-144)>>30!==0||((i=l[J++])&192)!==128||((f=l[J++])&192)!==128?(J--,Te()):(e=(e&7)<<18|(c&63)<<12|(i&63)<<6|f&63,e-=65536,d.push((e>>10&1023)+55296,(e&1023)+56320))):Te(),8192<=d.length&&(Z=on(Z,d),d.length=0);i=on(Z,d)}return Nt(v,x,i),!0},function(l,v,x){if(v=fe(v,x),v!=null){var T=!1;if(T=T===void 0?!1:T,Nn){if(T&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(v))throw Error("Found an unpaired surrogate");v=(xn||(xn=new TextEncoder)).encode(v)}else{for(var J=0,i=new Uint8Array(3*v.length),d=0;d<v.length;d++){var Z=v.charCodeAt(d);if(128>Z)i[J++]=Z;else{if(2048>Z)i[J++]=Z>>6|192;else{if(55296<=Z&&57343>=Z){if(56319>=Z&&d<v.length){var e=v.charCodeAt(++d);if(56320<=e&&57343>=e){Z=1024*(Z-55296)+e-56320+65536,i[J++]=Z>>18|240,i[J++]=Z>>12&63|128,i[J++]=Z>>6&63|128,i[J++]=Z&63|128;continue}else d--}if(T)throw Error("Found an unpaired surrogate");Z=65533}i[J++]=Z>>12|224,i[J++]=Z>>6&63|128}i[J++]=Z&63|128}}v=i.subarray(0,J)}we(l.g,8*x+2),we(l.g,v.length),Se(l,l.g.end()),Se(l,v)}}),Ut=lt(function(l,v,x,T,J){if(l.h!==2)return!1;v=ee(v,x,T),x=l.g.i,T=Ie(l.g)>>>0;var i=l.g.g+T,d=i-x;if(0>=d&&(l.g.i=i,J(v,l),d=i-l.g.g),d)throw Error("Message parsing ended unexpectedly. Expected to read "+(T+" bytes, instead read "+(T-d)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return l.g.g=i,l.g.i=x,!0},function(l,v,x,T,J){if(v=Fe(v,T,x),v!=null)for(T=0;T<v.length;T++){var i=l;we(i.g,8*x+2);var d=i.g.end();Se(i,d),d.push(i.h),i=d,J(v[T],l),d=l;var Z=i.pop();for(Z=d.h+d.g.length()-Z;127<Z;)i.push(Z&127|128),Z>>>=7,d.h++;i.push(Z),d.h++}});function kt(){qe.apply(this,arguments)}if(ht(kt,qe),Pt){var qt={};Object.defineProperties(kt,(qt[Symbol.hasInstance]=hn(Object[Symbol.hasInstance]),qt))}function Et(l){kt.call(this,l)}ht(Et,kt);function wt(){return[1,bt,2,z,3,It,4,It]}function Kt(l){kt.call(this,l,-1,ce)}ht(Kt,kt),Kt.prototype.addClassification=function(l,v){return ee(this,1,Et,l,v),this};function Dt(){return[1,Ut,Et,wt]}var ce=[1];function pe(l){kt.call(this,l)}ht(pe,kt);function ge(){return[1,z,2,z,3,z,4,z,5,z]}function ke(l){kt.call(this,l,-1,g)}ht(ke,kt);function h(){return[1,Ut,pe,ge]}var g=[1];function G(l){kt.call(this,l)}ht(G,kt);function C(){return[1,z,2,z,3,z,4,z,5,z,6,it]}function M(l,v,x){if(x=l.createShader(x===0?l.VERTEX_SHADER:l.FRAGMENT_SHADER),l.shaderSource(x,v),l.compileShader(x),!l.getShaderParameter(x,l.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
19
|
+
`+V.getProgramInfoLog(ot));k=m.m=ot,V.useProgram(k),z=V.getUniformLocation(k,"sampler0"),m.j={I:V.getAttribLocation(k,"aVertex"),H:V.getAttribLocation(k,"aTex"),da:z},m.s=V.createBuffer(),V.bindBuffer(V.ARRAY_BUFFER,m.s),V.enableVertexAttribArray(m.j.I),V.vertexAttribPointer(m.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),m.o=V.createBuffer(),V.bindBuffer(V.ARRAY_BUFFER,m.o),V.enableVertexAttribArray(m.j.H),V.vertexAttribPointer(m.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(z,0)}k=m.j,V.useProgram(m.m),V.canvas.width=W.width,V.canvas.height=W.height,V.viewport(0,0,W.width,W.height),V.activeTexture(V.TEXTURE0),m.h.bindTexture2d(W.glName),V.enableVertexAttribArray(k.I),V.bindBuffer(V.ARRAY_BUFFER,m.s),V.vertexAttribPointer(k.I,2,V.FLOAT,!1,0,0),V.enableVertexAttribArray(k.H),V.bindBuffer(V.ARRAY_BUFFER,m.o),V.vertexAttribPointer(k.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(k.I),V.disableVertexAttribArray(k.H),V.bindBuffer(V.ARRAY_BUFFER,null),m.h.bindTexture2d(0)}function On(m){this.g=m}var nn=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 Ne(m,W){return W+m}function Zn(m,W){window[m]=W}function Sn(m){var W=document.createElement("script");return W.setAttribute("src",m),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 Be(){return oe(this,function m(){return de(m,function(W){switch(W.g){case 1:return W.m=2,P(W,WebAssembly.instantiate(nn),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 kn(m){if(this.g=m,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=m&&m.locateFile||Ne,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,m.options){W=w(Object.keys(m.options));for(var V=W.next();!V.done;V=W.next()){V=V.value;var k=m.options[V].default;k!==void 0&&(this.j[V]=typeof k=="function"?k():k)}}}i=kn.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function rn(m,W){return m.g.files===void 0?[]:typeof m.g.files=="function"?m.g.files(W):m.g.files}function vn(m){return oe(m,function W(){var V=this,k,z,ot,O,rt,bt,Rt,Ut,Nt,$t,Et;return de(W,function(Tt){switch(Tt.g){case 1:return k=V,V.R?(z=rn(V,V.j),P(Tt,Be(),2)):Tt.return();case 2:if(ot=Tt.h,typeof window=="object")return Zn("createMediapipeSolutionsWasm",{locateFile:V.locateFile}),Zn("createMediapipeSolutionsPackedAssets",{locateFile:V.locateFile}),bt=z.filter(function(kt){return kt.data!==void 0}),Rt=z.filter(function(kt){return kt.data===void 0}),Ut=Promise.all(bt.map(function(kt){var Qt=un(k,kt.url);if(kt.path!==void 0){var ue=kt.path;Qt=Qt.then(function(pe){return k.overrideFile(ue,pe),Promise.resolve(pe)})}return Qt})),Nt=Promise.all(Rt.map(function(kt){return kt.simd===void 0||kt.simd&&ot||!kt.simd&&!ot?Sn(k.locateFile(kt.url,k.S)):Promise.resolve()})).then(function(){return oe(k,function kt(){var Qt,ue,pe=this;return de(kt,function(ge){if(ge.g==1)return Qt=window.createMediapipeSolutionsWasm,ue=window.createMediapipeSolutionsPackedAssets,P(ge,Qt(ue),2);pe.h=ge.h,ge.g=0})})}),$t=function(){return oe(k,function kt(){var Qt=this;return de(kt,function(ue){return Qt.g.graph&&Qt.g.graph.url?ue=P(ue,un(Qt,Qt.g.graph.url),0):(ue.g=0,ue=void 0),ue})})}(),P(Tt,Promise.all([Nt,Ut,$t]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return O=z.filter(function(kt){return kt.simd===void 0||kt.simd&&ot||!kt.simd&&!ot}).map(function(kt){return k.locateFile(kt.url,k.S)}),importScripts.apply(null,E(O)),P(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"),Et=V.l.getContext("webgl2",{}),!Et&&(Et=V.l.getContext("webgl",{}),!Et))return alert("Failed to create WebGL canvas context when passing video frame."),Tt.return();V.D=Et,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(m){return oe(m,function W(){var V=this,k,z,ot,O,rt,bt,Rt,Ut;return de(W,function(Nt){if(Nt.g==1){if(V.g.graph&&V.g.graph.url&&V.P===V.g.graph.url)return Nt.return();if(V.o=!0,!V.g.graph||!V.g.graph.url){Nt.g=2;return}return V.P=V.g.graph.url,P(Nt,un(V,V.g.graph.url),3)}for(Nt.g!=2&&(k=Nt.h,V.i.loadGraph(k)),z=w(Object.keys(V.B)),ot=z.next();!ot.done;ot=z.next())O=ot.value,V.i.overrideFile(O,V.B[O]);if(V.B={},V.g.listeners)for(rt=w(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),Nt.g=0})})}i.reset=function(){return oe(this,function m(){var W=this;return de(m,function(V){W.i&&(W.i.reset(),W.m={},W.s={}),V.g=0})})},i.setOptions=function(m,W){var V=this;if(W=W||this.g.options){for(var k=[],z=[],ot={},O=w(Object.keys(m)),rt=O.next();!rt.done;ot={K:ot.K,L:ot.L},rt=O.next()){var bt=rt.value;bt in this.j&&this.j[bt]===m[bt]||(this.j[bt]=m[bt],rt=W[bt],rt!==void 0&&(rt.onChange&&(ot.K=rt.onChange,ot.L=m[bt],k.push(function(Rt){return function(){return oe(V,function Ut(){var Nt,$t=this;return de(Ut,function(Et){if(Et.g==1)return P(Et,Rt.K(Rt.L),2);Nt=Et.h,Nt===!0&&($t.o=!0),Et.g=0})})}}(ot))),rt.graphOptionXref&&(bt={valueNumber:rt.type===1?m[bt]:0,valueBoolean:rt.type===0?m[bt]:!1,valueString:rt.type===2?m[bt]:""},rt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),rt.graphOptionXref),bt),z.push(rt))))}(k.length!==0||z.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(z),this.u=(this.u===void 0?[]:this.u).concat(k))}};function An(m){return oe(m,function W(){var V=this,k,z,ot,O,rt,bt,Rt;return de(W,function(Ut){switch(Ut.g){case 1:if(!V.o)return Ut.return();if(!V.u){Ut.g=2;break}k=w(V.u),z=k.next();case 3:if(z.done){Ut.g=5;break}return ot=z.value,P(Ut,ot(),4);case 4:z=k.next(),Ut.g=3;break;case 5:V.u=void 0;case 2:if(V.A){for(O=new V.h.GraphOptionChangeRequestList,rt=w(V.A),bt=rt.next();!bt.done;bt=rt.next())Rt=bt.value,O.push_back(Rt);V.i.changeOptions(O),O.delete(),V.A=void 0}V.o=!1,Ut.g=0}})})}i.initialize=function(){return oe(this,function m(){var W=this;return de(m,function(V){return V.g==1?P(V,vn(W),2):V.g!=3?P(V,Tn(W),3):P(V,An(W),0)})})};function un(m,W){return oe(m,function V(){var k=this,z,ot;return de(V,function(O){return W in k.F?O.return(k.F[W]):(z=k.locateFile(W,""),ot=fetch(z).then(function(rt){return rt.arrayBuffer()}),k.F[W]=ot,O.return(ot))})})}i.overrideFile=function(m,W){this.i?this.i.overrideFile(m,W):this.B[m]=W},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(m,W){return oe(this,function V(){var k=this,z,ot,O,rt,bt,Rt,Ut,Nt,$t;return de(V,function(Et){switch(Et.g){case 1:return k.g.inputs?(z=1e3*(W==null?performance.now():W),P(Et,k.C,2)):Et.return();case 2:return P(Et,k.initialize(),3);case 3:for(ot=new k.h.PacketDataList,O=w(Object.keys(m)),rt=O.next();!rt.done;rt=O.next())if(bt=rt.value,Rt=k.g.inputs[bt]){t:{var Tt=k,kt=m[bt];switch(Rt.type){case"video":var Qt=Tt.m[Rt.stream];if(Qt||(Qt=new yn(Tt.h,Tt.D),Tt.m[Rt.stream]=Qt),Tt=Qt,Tt.l===0&&(Tt.l=Tt.h.createTexture()),typeof HTMLVideoElement<"u"&&kt instanceof HTMLVideoElement){var ue=kt.videoWidth;Qt=kt.videoHeight}else typeof HTMLImageElement<"u"&&kt instanceof HTMLImageElement?(ue=kt.naturalWidth,Qt=kt.naturalHeight):(ue=kt.width,Qt=kt.height);Qt={glName:Tt.l,width:ue,height:Qt},ue=Tt.g,ue.canvas.width=Qt.width,ue.canvas.height=Qt.height,ue.activeTexture(ue.TEXTURE0),Tt.h.bindTexture2d(Tt.l),ue.texImage2D(ue.TEXTURE_2D,0,ue.RGBA,ue.RGBA,ue.UNSIGNED_BYTE,kt),Tt.h.bindTexture2d(0),Tt=Qt;break t;case"detections":for(Qt=Tt.m[Rt.stream],Qt||(Qt=new On(Tt.h),Tt.m[Rt.stream]=Qt),Tt=Qt,Tt.data||(Tt.data=new Tt.g.DetectionListData),Tt.data.reset(kt.length),Qt=0;Qt<kt.length;++Qt){ue=kt[Qt];var pe=Tt.data,ge=pe.setBoundingBox,Je=Qt,h=ue.T,y=new He;zt(y,1,h.Z),zt(y,2,h.$),zt(y,3,h.height),zt(y,4,h.width),zt(y,5,h.rotation),zt(y,6,h.X);var v=h=new we;Ot(v,1,re(y,1)),Ot(v,2,re(y,2)),Ot(v,3,re(y,3)),Ot(v,4,re(y,4)),Ot(v,5,re(y,5));var C=re(y,6);if(C!=null&&C!=null){Ze(v.g,48);var A=v.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;)A.push(C&127|128),C=(C>>>7|M<<25)>>>0,M>>>=7;A.push(C)}if(Ye(y,v),h=Xe(h),ge.call(pe,Je,h),ue.O)for(pe=0;pe<ue.O.length;++pe)y=ue.O[pe],v=!!y.visibility,ge=Tt.data,Je=ge.addNormalizedLandmark,h=Qt,y=Object.assign(Object.assign({},y),{visibility:v?y.visibility:0}),v=new ae,zt(v,1,y.x),zt(v,2,y.y),zt(v,3,y.z),y.visibility&&zt(v,4,y.visibility),A=y=new we,Ot(A,1,re(v,1)),Ot(A,2,re(v,2)),Ot(A,3,re(v,3)),Ot(A,4,re(v,4)),Ot(A,5,re(v,5)),Ye(v,A),y=Xe(y),Je.call(ge,h,y);if(ue.M)for(pe=0;pe<ue.M.length;++pe){if(ge=Tt.data,Je=ge.addClassification,h=Qt,y=ue.M[pe],v=new tt,zt(v,2,y.Y),y.index&&zt(v,1,y.index),y.label&&zt(v,3,y.label),y.displayName&&zt(v,4,y.displayName),A=y=new we,M=re(v,1),M!=null&&M!=null)if(Ze(A.g,8),C=A.g,0<=M)Ze(C,M);else{for(_=0;9>_;_++)C.push(M&127|128),M>>=7;C.push(1)}Ot(A,2,re(v,2)),C=re(v,3),C!=null&&(C=xn(C),Ze(A.g,26),Ze(A.g,C.length),$e(A,A.g.end()),$e(A,C)),C=re(v,4),C!=null&&(C=xn(C),Ze(A.g,34),Ze(A.g,C.length),$e(A,A.g.end()),$e(A,C)),Ye(v,A),y=Xe(y),Je.call(ge,h,y)}}Tt=Tt.data;break t;default:Tt={}}}switch(Ut=Tt,Nt=Rt.stream,Rt.type){case"video":ot.pushTexture2d(Object.assign(Object.assign({},Ut),{stream:Nt,timestamp:z}));break;case"detections":$t=Ut,$t.stream=Nt,$t.timestamp=z,ot.pushDetectionList($t);break;default:throw Error("Unknown input config type: '"+Rt.type+"'")}}return k.i.send(ot),P(Et,k.C,4);case 4:ot.delete(),Et.g=0}})})};function wn(m,W,V){return oe(m,function k(){var z,ot,O,rt,bt,Rt,Ut=this,Nt,$t,Et,Tt,kt,Qt,ue,pe;return de(k,function(ge){switch(ge.g){case 1:if(!V)return ge.return(W);for(z={},ot=0,O=w(Object.keys(V)),rt=O.next();!rt.done;rt=O.next())bt=rt.value,Rt=V[bt],typeof Rt!="string"&&Rt.type==="texture"&&W[Rt.stream]!==void 0&&++ot;1<ot&&(Ut.G=!1),Nt=w(Object.keys(V)),rt=Nt.next();case 2:if(rt.done){ge.g=4;break}if($t=rt.value,Et=V[$t],typeof Et=="string")return ue=z,pe=$t,P(ge,_n(Ut,$t,W[Et]),14);if(Tt=W[Et.stream],Et.type==="detection_list"){if(Tt){for(var Je=Tt.getRectList(),h=Tt.getLandmarksList(),y=Tt.getClassificationsList(),v=[],C=0;C<Je.size();++C){var A=Je.get(C);t:{var _=new He;for(A=new Ce(A);At(A);)switch(A.i){case 13:var M=sn(A.g);zt(_,1,M);break;case 21:M=sn(A.g),zt(_,2,M);break;case 29:M=sn(A.g),zt(_,3,M);break;case 37:M=sn(A.g),zt(_,4,M);break;case 45:M=sn(A.g),zt(_,5,M);break;case 48:for(var q=A.g,lt=128,s=0,X=M=0;4>X&&128<=lt;X++)lt=q.h[q.g++],s|=(lt&127)<<7*X;if(128<=lt&&(lt=q.h[q.g++],s|=(lt&127)<<28,M|=(lt&127)>>4),128<=lt)for(X=0;5>X&&128<=lt;X++)lt=q.h[q.g++],M|=(lt&127)<<7*X+3;128>lt?(q=s>>>0,lt=M>>>0,(M=lt&2147483648)&&(q=~q+1>>>0,lt=~lt>>>0,q==0&&(lt=lt+1>>>0)),q=4294967296*lt+(q>>>0),M=M?-q:q):(q.l=!0,M=void 0),zt(_,6,M);break;default:if(!ee(_,A))break t}}_={Z:te(_,1),$:te(_,2),height:te(_,3),width:te(_,4),rotation:te(_,5,0),X:Vt(_,6)},M=h.get(C);t:for(A=new St,M=new Ce(M);At(M);)switch(M.i){case 10:q=jt(M,new ae,ce),fe(A,q,ae,void 0);break;default:if(!ee(A,M))break t}A=hn(A,ae).map(fn),q=y.get(C);t:for(M=new ut,q=new Ce(q);At(q);)switch(q.i){case 10:M.addClassification(jt(q,new tt,it));break;default:if(!ee(M,q))break t}_={T:_,O:A,M:tn(M)},v.push(_)}Je=v}else Je=[];z[$t]=Je,ge.g=7;break}if(Et.type==="proto_list"){if(Tt){for(Je=Array(Tt.size()),h=0;h<Tt.size();h++)Je[h]=Tt.get(h);Tt.delete()}else Je=[];z[$t]=Je,ge.g=7;break}if(Tt===void 0){ge.g=3;break}if(Et.type==="float_list"){z[$t]=Tt,ge.g=7;break}if(Et.type==="proto"){z[$t]=Tt,ge.g=7;break}if(Et.type!=="texture")throw Error("Unknown output config type: '"+Et.type+"'");return kt=Ut.s[$t],kt||(kt=new yn(Ut.h,Ut.D),Ut.s[$t]=kt),P(ge,Le(kt,Tt,Ut.G),13);case 13:Qt=ge.h,z[$t]=Qt;case 7:Et.transform&&z[$t]&&(z[$t]=Et.transform(z[$t])),ge.g=3;break;case 14:ue[pe]=ge.h;case 3:rt=Nt.next(),ge.g=2;break;case 4:return ge.return(z)}})})}function _n(m,W,V){return oe(m,function k(){var z=this,ot;return de(k,function(O){return typeof V=="number"||V instanceof Uint8Array||V instanceof z.h.Uint8BlobList?O.return(V):V instanceof z.h.Texture2dDataOut?(ot=z.s[W],ot||(ot=new yn(z.h,z.D),z.s[W]=ot),O.return(Le(ot,V,z.G))):O.return(void 0)})})}function Qn(m,W){for(var V=W.name||"$",k=[].concat(E(W.wants)),z=new m.h.StringList,ot=w(W.wants),O=ot.next();!O.done;O=ot.next())z.push_back(O.value);ot=m.h.PacketListener.implement({onResults:function(rt){for(var bt={},Rt=0;Rt<W.wants.length;++Rt)bt[k[Rt]]=rt.get(Rt);var Ut=m.listeners[V];Ut&&(m.C=wn(m,bt,W.outs).then(function(Nt){Nt=Ut(Nt);for(var $t=0;$t<W.wants.length;++$t){var Et=bt[k[$t]];typeof Et=="object"&&Et.hasOwnProperty&&Et.hasOwnProperty("delete")&&Et.delete()}Nt&&(m.C=Nt)}))}}),m.i.attachMultiListener(z,ot),z.delete()}i.onResults=function(m,W){this.listeners[W||"$"]=m},Re("Solution",kn),Re("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function Fn(m){switch(m===void 0&&(m=0),m){case 1:return"selfie_segmentation_landscape.tflite";default:return"selfie_segmentation.tflite"}}function Hn(m){var W=this;m=m||{},this.g=new kn({locateFile:m.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:Fn(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 oe(W,function k(){var z,ot,O=this,rt;return de(k,function(bt){return bt.g==1?(z=Fn(V),ot="third_party/mediapipe/modules/selfie_segmentation/"+z,P(bt,un(O.g,z),2)):(rt=bt.h,O.g.overrideFile(ot,rt),bt.return(!0))})})}}}})}i=Hn.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(m){this.g.onResults(m)},i.initialize=function(){return oe(this,function m(){var W=this;return de(m,function(V){return P(V,W.g.initialize(),0)})})},i.reset=function(){this.g.reset()},i.send=function(m){return oe(this,function W(){var V=this;return de(W,function(k){return P(k,V.g.send(m),0)})})},i.setOptions=function(m){this.g.setOptions(m)},Re("SelfieSegmentation",Hn),Re("VERSION","0.1.1632777926")}).call(ai);const di={};(function(){var i;function n(l){var Z=0;return function(){return Z<l.length?{done:!1,value:l[Z++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(l,Z,x){return l==Array.prototype||l==Object.prototype||(l[Z]=x.value),l};function p(l){l=[typeof globalThis=="object"&&globalThis,l,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var Z=0;Z<l.length;++Z){var x=l[Z];if(x&&x.Math==Math)return x}throw Error("Cannot find global object")}var G=p(this);function S(l,Z){if(Z)t:{var x=G;l=l.split(".");for(var T=0;T<l.length-1;T++){var J=l[T];if(!(J in x))break t;x=x[J]}l=l[l.length-1],T=x[l],Z=Z(T),Z!=T&&Z!=null&&r(x,l,{configurable:!0,writable:!0,value:Z})}}S("Symbol",function(l){function Z(o){if(this instanceof Z)throw new TypeError("Symbol is not a constructor");return new x(T+(o||"")+"_"+J++,o)}function x(o,d){this.g=o,r(this,"description",{configurable:!0,writable:!0,value:d})}if(l)return l;x.prototype.toString=function(){return this.g};var T="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",J=0;return Z}),S("Symbol.iterator",function(l){if(l)return l;l=Symbol("Symbol.iterator");for(var Z="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),x=0;x<Z.length;x++){var T=G[Z[x]];typeof T=="function"&&typeof T.prototype[l]!="function"&&r(T.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 w(l){var Z=typeof Symbol<"u"&&Symbol.iterator&&l[Symbol.iterator];return Z?Z.call(l):{next:n(l)}}function E(l){if(!(l instanceof Array)){l=w(l);for(var Z,x=[];!(Z=l.next()).done;)x.push(Z.value);l=x}return l}var et=typeof Object.create=="function"?Object.create:function(l){function Z(){}return Z.prototype=l,new Z},ct;if(typeof Object.setPrototypeOf=="function")ct=Object.setPrototypeOf;else{var dt;t:{var Ft={a:!0},Lt={};try{Lt.__proto__=Ft,dt=Lt.a;break t}catch{}dt=!1}ct=dt?function(l,Z){if(l.__proto__=Z,l.__proto__!==Z)throw new TypeError(l+" is not extensible");return l}:null}var at=ct;function pt(l,Z){if(l.prototype=et(Z.prototype),l.prototype.constructor=l,at)at(l,Z);else for(var x in Z)if(x!="prototype")if(Object.defineProperties){var T=Object.getOwnPropertyDescriptor(Z,x);T&&Object.defineProperty(l,x,T)}else l[x]=Z[x];l.ra=Z.prototype}function Mt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function Jt(l){if(l.l)throw new TypeError("Generator is already running");l.l=!0}Mt.prototype.s=function(l){this.h=l};function qt(l,Z){l.j={fa:Z,ga:!0},l.g=l.o||l.u}Mt.prototype.return=function(l){this.j={return:l},this.g=this.u};function P(l,Z,x){return l.g=x,{value:Z}}function De(l){this.g=new Mt,this.h=l}function an(l,Z){Jt(l.g);var x=l.g.i;return x?Ve(l,"return"in x?x.return:function(T){return{value:T,done:!0}},Z,l.g.return):(l.g.return(Z),Dt(l))}function Ve(l,Z,x,T){try{var J=Z.call(l.g.i,x);if(!(J instanceof Object))throw new TypeError("Iterator result "+J+" is not an object");if(!J.done)return l.g.l=!1,J;var o=J.value}catch(d){return l.g.i=null,qt(l.g,d),Dt(l)}return l.g.i=null,T.call(l.g,o),Dt(l)}function Dt(l){for(;l.g.g;)try{var Z=l.h(l.g);if(Z)return l.g.l=!1,{value:Z.value,done:!1}}catch(x){l.g.h=void 0,qt(l.g,x)}if(l.g.l=!1,l.g.j){if(Z=l.g.j,l.g.j=null,Z.ga)throw Z.fa;return{value:Z.return,done:!0}}return{value:void 0,done:!0}}function Kn(l){this.next=function(Z){return Jt(l.g),l.g.i?Z=Ve(l,l.g.i.next,Z,l.g.s):(l.g.s(Z),Z=Dt(l)),Z},this.throw=function(Z){return Jt(l.g),l.g.i?Z=Ve(l,l.g.i.throw,Z,l.g.s):(qt(l.g,Z),Z=Dt(l)),Z},this.return=function(Z){return an(l,Z)},this[Symbol.iterator]=function(){return this}}function de(l){function Z(T){return l.next(T)}function x(T){return l.throw(T)}return new Promise(function(T,J){function o(d){d.done?T(d.value):Promise.resolve(d.value).then(Z,x).then(o,J)}o(l.next())})}function gt(l){return de(new Kn(new De(l)))}S("Promise",function(l){function Z(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 x(){this.g=null}function T(d){return d instanceof Z?d:new Z(function(g){g(d)})}if(l)return l;x.prototype.h=function(d){if(this.g==null){this.g=[];var g=this;this.i(function(){g.l()})}this.g.push(d)};var J=G.setTimeout;x.prototype.i=function(d){J(d,0)},x.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},x.prototype.j=function(d){this.i(function(){throw d})},Z.prototype.j=function(){function d(u){return function(f){e||(e=!0,u.call(g,f))}}var g=this,e=!1;return{resolve:d(this.D),reject:d(this.l)}},Z.prototype.D=function(d){if(d===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(d instanceof Z)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)}},Z.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)},Z.prototype.l=function(d){this.u(2,d)},Z.prototype.o=function(d){this.u(1,d)},Z.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()},Z.prototype.G=function(){var d=this;J(function(){if(d.C()){var g=G.console;typeof g<"u"&&g.error(d.i)}},1)},Z.prototype.C=function(){if(this.s)return!1;var d=G.CustomEvent,g=G.Event,e=G.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=G.document.createEvent("CustomEvent"),d.initCustomEvent("unhandledrejection",!1,!0,d)),d.promise=this,d.reason=this.i,e(d))},Z.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 x;return Z.prototype.H=function(d){var g=this.j();d.M(g.resolve,g.reject)},Z.prototype.I=function(d,g){var e=this.j();try{d.call(g,e.resolve,e.reject)}catch(u){e.reject(u)}},Z.prototype.then=function(d,g){function e(c,a){return typeof c=="function"?function(b){try{u(c(b))}catch(I){f(I)}}:a}var u,f,t=new Z(function(c,a){u=c,f=a});return this.M(e(d,u),e(g,f)),t},Z.prototype.catch=function(d){return this.then(void 0,d)},Z.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},Z.resolve=T,Z.reject=function(d){return new Z(function(g,e){e(d)})},Z.race=function(d){return new Z(function(g,e){for(var u=w(d),f=u.next();!f.done;f=u.next())T(f.value).M(g,e)})},Z.all=function(d){var g=w(d),e=g.next();return e.done?T([]):new Z(function(u,f){function t(b){return function(I){c[b]=I,a--,a==0&&u(c)}}var c=[],a=0;do c.push(void 0),a++,T(e.value).M(t(c.length-1),f),e=g.next();while(!e.done)})},Z});function pn(l,Z){l instanceof String&&(l+="");var x=0,T=!1,J={next:function(){if(!T&&x<l.length){var o=x++;return{value:Z(o,l[o]),done:!1}}return T=!0,{done:!0,value:void 0}}};return J[Symbol.iterator]=function(){return J},J}var jn=typeof Object.assign=="function"?Object.assign:function(l,Z){for(var x=1;x<arguments.length;x++){var T=arguments[x];if(T)for(var J in T)Object.prototype.hasOwnProperty.call(T,J)&&(l[J]=T[J])}return l};S("Object.assign",function(l){return l||jn}),S("Object.is",function(l){return l||function(Z,x){return Z===x?Z!==0||1/Z===1/x:Z!==Z&&x!==x}}),S("Array.prototype.includes",function(l){return l||function(Z,x){var T=this;T instanceof String&&(T=String(T));var J=T.length;for(x=x||0,0>x&&(x=Math.max(x+J,0));x<J;x++){var o=T[x];if(o===Z||Object.is(o,Z))return!0}return!1}}),S("String.prototype.includes",function(l){return l||function(Z,x){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(Z instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(Z,x||0)!==-1}}),S("Array.prototype.keys",function(l){return l||function(){return pn(this,function(Z){return Z})}});var Re=this||self;function Ht(l,Z){l=l.split(".");var x=Re;l[0]in x||typeof x.execScript>"u"||x.execScript("var "+l[0]);for(var T;l.length&&(T=l.shift());)l.length||Z===void 0?x[T]&&x[T]!==Object.prototype[T]?x=x[T]:x=x[T]={}:x[T]=Z}function Te(){throw Error("Invalid UTF8")}function on(l,Z){return Z=String.fromCharCode.apply(null,Z),l==null?Z:l+Z}var Xn,Ln=typeof TextDecoder<"u",xn,Nn=typeof TextEncoder<"u",dn={},bn=null;function En(l){var Z;Z===void 0&&(Z=0),Ke(),Z=dn[Z];for(var x=Array(Math.floor(l.length/3)),T=Z[64]||"",J=0,o=0;J<l.length-2;J+=3){var d=l[J],g=l[J+1],e=l[J+2],u=Z[d>>2];d=Z[(d&3)<<4|g>>4],g=Z[(g&15)<<2|e>>6],e=Z[e&63],x[o++]=u+d+g+e}switch(u=0,e=T,l.length-J){case 2:u=l[J+1],e=Z[(u&15)<<2]||T;case 1:l=l[J],x[o]=Z[l>>2]+Z[(l&3)<<4|u>>4]+e+T}return x.join("")}function Cn(l){var Z=l.length,x=3*Z/4;x%3?x=Math.floor(x):"=.".indexOf(l[Z-1])!=-1&&(x="=.".indexOf(l[Z-2])!=-1?x-2:x-1);var T=new Uint8Array(x),J=0;return Oe(l,function(o){T[J++]=o}),J!==x?T.subarray(0,J):T}function Oe(l,Z){function x(e){for(;T<l.length;){var u=l.charAt(T++),f=bn[u];if(f!=null)return f;if(!/^[\s\xa0]*$/.test(u))throw Error("Unknown base64 encoding at char: "+u)}return e}Ke();for(var T=0;;){var J=x(-1),o=x(0),d=x(64),g=x(64);if(g===64&&J===-1)break;Z(J<<2|o>>4),d!=64&&(Z(o<<4&240|d>>2),g!=64&&Z(d<<6&192|g))}}function Ke(){if(!bn){bn={};for(var l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),Z=["+/=","+/","-_=","-_.","-_"],x=0;5>x;x++){var T=l.concat(Z[x].split(""));dn[x]=T;for(var J=0;J<T.length;J++){var o=T[J];bn[o]===void 0&&(bn[o]=J)}}}}var In=typeof Uint8Array=="function";function Wn(l){return In&&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 ze=typeof Uint8Array.prototype.slice=="function",ne=0,We=0;function sn(l,Z){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 Cn(l);if(l.constructor===Se)return!Z&&(Z=l.L)&&Z.constructor===Uint8Array?Z:(Z=l.L,Z=Z==null||Wn(Z)?Z:typeof Z=="string"?Cn(Z):null,(l=l.L=Z)?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 Ue(l,Z){return Error("Invalid wire type: "+l+" (at position "+Z+")")}function _t(){return Error("Failed to read varint, encoding is invalid.")}function Ze(l,Z){Z=Z===void 0?{}:Z,Z=Z.v===void 0?!1:Z.v,this.h=null,this.g=this.i=this.j=0,this.v=Z,l&&Ce(this,l)}function Ce(l,Z){l.h=sn(Z,l.v),l.j=0,l.i=l.h.length,l.g=l.j}Ze.prototype.reset=function(){this.g=this.j};function At(l){if(l.g>l.i)throw Error("Tried to read past the end of the data "+l.g+" > "+l.i)}function xe(l){var Z=l.h,x=Z[l.g],T=x&127;if(128>x)return l.g+=1,At(l),T;if(x=Z[l.g+1],T|=(x&127)<<7,128>x)return l.g+=2,At(l),T;if(x=Z[l.g+2],T|=(x&127)<<14,128>x)return l.g+=3,At(l),T;if(x=Z[l.g+3],T|=(x&127)<<21,128>x)return l.g+=4,At(l),T;if(x=Z[l.g+4],l.g+=5,T|=(x&15)<<28,128>x)return At(l),T;if(128<=Z[l.g++]&&128<=Z[l.g++]&&128<=Z[l.g++]&&128<=Z[l.g++]&&128<=Z[l.g++])throw _t();return At(l),T}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 we(l,Z){for(;127<Z;)l.g.push(Z&127|128),Z>>>=7;l.g.push(Z)}function $e(l){var Z={},x=Z.W===void 0?!1:Z.W;this.l={v:Z.v===void 0?!1:Z.v},this.W=x,Z=this.l,jt.length?(x=jt.pop(),Z&&(x.v=Z.v),l&&Ce(x,l),l=x):l=new Ze(l,Z),this.g=l,this.j=this.g.g,this.h=this.i=-1}$e.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};function Xe(l){var Z=l.g;if(Z.g==Z.i)return!1;l.j=l.g.g;var x=xe(l.g)>>>0;if(Z=x>>>3,x&=7,!(0<=x&&5>=x))throw Ue(x,l.j);if(1>Z)throw Error("Invalid field number: "+Z+" (at position "+l.j+")");return l.i=Z,l.h=x,!0}function Ot(l){switch(l.h){case 0:if(l.h!=0)Ot(l);else t:{l=l.g;for(var Z=l.g,x=Z+10;Z<x;)if((l.h[Z++]&128)===0){l.g=Z,At(l);break t}throw _t()}break;case 1:l=l.g,l.g+=8,At(l);break;case 2:l.h!=2?Ot(l):(Z=xe(l.g)>>>0,l=l.g,l.g+=Z,At(l));break;case 5:l=l.g,l.g+=4,At(l);break;case 3:Z=l.i;do{if(!Xe(l))throw Error("Unmatched start-group tag: stream EOF");if(l.h==4){if(l.i!=Z)throw Error("Unmatched end-group tag");break}Ot(l)}while(1);break;default:throw Ue(l.h,l.j)}}var je=[];function Pe(){this.i=[],this.h=0,this.g=new ye}function Ie(l,Z){Z.length!==0&&(l.i.push(Z),l.h+=Z.length)}function Vn(l,Z){if(Z=Z.ca){Ie(l,l.g.end());for(var x=0;x<Z.length;x++)Ie(l,Z[x])}}var ln=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function _e(l,Z){Object.isFrozen(l)||(ln?l[ln]|=Z:l.N!==void 0?l.N|=Z:Object.defineProperties(l,{N:{value:Z,configurable:!0,writable:!0,enumerable:!1}}))}function cn(l){var Z;return ln?Z=l[ln]:Z=l.N,Z==null?0:Z}function ve(l){return _e(l,1),l}function Fe(l){return Array.isArray(l)?!!(cn(l)&2):!1}function Ge(l){if(!Array.isArray(l))throw Error("cannot mark non-array as immutable");_e(l,2)}function re(l){return l!==null&&typeof l=="object"&&!Array.isArray(l)&&l.constructor===Object}var Qe=Object.freeze(ve([]));function te(l){if(Fe(l.m))throw Error("Cannot mutate an immutable Message")}var zt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function hn(l){return{value:l,configurable:!1,writable:!1,enumerable:!1}}function fe(l,Z,x){return Z===-1?null:Z>=l.i?l.g?l.g[Z]:void 0:(x===void 0?0:x)&&l.g&&(x=l.g[Z],x!=null)?x:l.m[Z+l.h]}function Ct(l,Z,x,T){T=T===void 0?!1:T,te(l),Z<l.i&&!T?l.m[Z+l.h]=x:(l.g||(l.g=l.m[l.i+l.h]={}))[Z]=x}function Vt(l,Z,x,T){x=x===void 0?!0:x,T=T===void 0?!1:T;var J=fe(l,Z,T);return J==null&&(J=Qe),Fe(l.m)?x&&(Ge(J),Object.freeze(J)):(J===Qe||Fe(J))&&(J=ve(J.slice()),Ct(l,Z,J,T)),J}function ie(l,Z,x){return l=fe(l,Z),l=l==null?l:+l,l==null?x===void 0?0:x:l}function Ye(l,Z,x,T){l.j||(l.j={});var J=Fe(l.m),o=l.j[x];if(!o){T=Vt(l,x,!0,T===void 0?!1:T),o=[],J=J||Fe(T);for(var d=0;d<T.length;d++)o[d]=new Z(T[d]),J&&Ge(o[d].m);J&&(Ge(o),Object.freeze(o)),l.j[x]=o}return o}function ee(l,Z,x,T,J){var o=o===void 0?!1:o;return te(l),o=Ye(l,x,Z,o),x=T||new x,l=Vt(l,Z),J!=null?(o.splice(J,0,x),l.splice(J,0,x.m)):(o.push(x),l.push(x.m)),x}function oe(l,Z){return l=fe(l,Z),l==null?0:l}function tt(l,Z){return l=fe(l,Z),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 Z=l.L;return Z=Z==null||typeof Z=="string"?Z:In&&Z instanceof Uint8Array?En(Z):null,(l.L=Z)||""}}}return l}function ut(l){var Z=ce;return Z=Z===void 0?St:Z,ae(l,Z)}function Pt(l,Z){if(l!=null){if(Array.isArray(l))l=ae(l,Z);else if(re(l)){var x={},T;for(T in l)x[T]=Pt(l[T],Z);l=x}else l=Z(l);return l}}function ae(l,Z){for(var x=l.slice(),T=0;T<x.length;T++)x[T]=Pt(x[T],Z);return Array.isArray(l)&&cn(l)&1&&ve(x),x}function ce(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,Z,x){l||(l=He),He=null;var T=this.constructor.h;l||(l=T?[T]:[]),this.h=(T?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=l;t:{if(T=this.m.length,l=T-1,T&&(T=this.m[l],re(T))){this.i=l-this.h,this.g=T;break t}Z!==void 0&&-1<Z?(this.i=Math.max(Z,l+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE}if(x)for(Z=0;Z<x.length;Z++)if(l=x[Z],l<this.i)l+=this.h,(T=this.m[l])?Array.isArray(T)&&ve(T):this.m[l]=Qe;else{T=this.g||(this.g=this.m[this.i+this.h]={});var J=T[l];J?Array.isArray(J)&&ve(J):T[l]=Qe}}me.prototype.toJSON=function(){return ut(this.m)},me.prototype.toString=function(){return this.m.toString()};var He;function qe(){me.apply(this,arguments)}if(pt(qe,me),zt){var tn={};Object.defineProperties(qe,(tn[Symbol.hasInstance]=hn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),tn))}function fn(l,Z,x){if(x){var T={},J;for(J in x){var o=x[J],d=o.ja;d||(T.F=o.pa||o.ha.P,o.ba?(T.U=Sn(o.ba),d=function(g){return function(e,u,f){return g.F(e,u,f,g.U)}}(T)):o.da?(T.T=Be(o.X.g,o.da),d=function(g){return function(e,u,f){return g.F(e,u,f,g.T)}}(T)):d=T.F,o.ja=d),d(Z,l,o.X),T={F:T.F,U:T.U,T:T.T}}}Vn(Z,l)}var yn=Symbol();function Le(l,Z,x){return l[yn]||(l[yn]=function(T,J){return Z(T,J,x)})}function en(l){var Z=l[yn];if(!Z){var x=m(l);Z=function(T,J){return W(T,J,x)},l[yn]=Z}return Z}function On(l){var Z=l.ba;if(Z)return en(Z);if(Z=l.oa)return Le(l.X.g,Z,l.da)}function nn(l){var Z=On(l),x=l.X,T=l.ha.O;return Z?function(J,o){return T(J,o,x,Z)}:function(J,o){return T(J,o,x)}}function Ne(l,Z,x,T,J,o){l=l();var d=0;for(l.length&&typeof l[0]!="number"&&(x(Z,l[0]),d++);d<l.length;){x=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:T(Z,x,e);break;case 1:T(Z,x,e,l[d++]);break;case 2:J(Z,x,e,l[d++],l[d++]);break;case 3:g=l[d++];var u=l[d++],f=l[d++];Array.isArray(f)?J(Z,x,e,g,u,f):o(Z,x,e,g,u,f);break;case 4:o(Z,x,e,l[d++],l[d++],l[d++],l[d++]);break;default:throw Error("unexpected number of binary field arguments: "+g)}}return Z}var Zn=Symbol();function Sn(l){var Z=l[Zn];if(!Z){var x=un(l);Z=function(T,J){return k(T,J,x)},l[Zn]=Z}return Z}function Be(l,Z){var x=l[Zn];return x||(x=function(T,J){return fn(T,J,Z)},l[Zn]=x),x}var kn=Symbol();function rn(l,Z){l.push(Z)}function vn(l,Z,x){l.push(Z,x.P)}function Tn(l,Z,x,T,J){var o=Sn(J),d=x.P;l.push(Z,function(g,e,u){return d(g,e,u,T,o)})}function An(l,Z,x,T,J,o){var d=Be(T,o),g=x.P;l.push(Z,function(e,u,f){return g(e,u,f,T,d)})}function un(l){var Z=l[kn];return Z||Ne(l,l[kn]=[],rn,vn,Tn,An)}var wn=Symbol();function _n(l,Z){l[0]=Z}function Qn(l,Z,x,T){var J=x.O;l[Z]=T?function(o,d,g){return J(o,d,g,T)}:J}function Fn(l,Z,x,T,J,o){var d=x.O,g=en(J);l[Z]=function(e,u,f){return d(e,u,f,T,g,o)}}function Hn(l,Z,x,T,J,o,d){var g=x.O,e=Le(T,J,o);l[Z]=function(u,f,t){return g(u,f,t,T,e,d)}}function m(l){var Z=l[wn];return Z||Ne(l,l[wn]={},_n,Qn,Fn,Hn)}function W(l,Z,x){for(;Xe(Z)&&Z.h!=4;){var T=Z.i,J=x[T];if(!J){var o=x[0];o&&(o=o[T])&&(J=x[T]=nn(o))}if((!J||!J(Z,l,T))&&(J=Z,T=l,o=J.j,Ot(J),!J.W)){var d=J.g.h;J=J.g.g,J=o===J?he||(he=new Uint8Array(0)):ze?d.slice(o,J):new Uint8Array(d.subarray(o,J)),(o=T.ca)?o.push(J):T.ca=[J]}}return l}function V(l,Z,x){if(je.length){var T=je.pop();l&&(Ce(T.g,l),T.i=-1,T.h=-1),l=T}else l=new $e(l);try{return W(new Z,l,m(x))}finally{Z=l.g,Z.h=null,Z.j=0,Z.i=0,Z.g=0,Z.v=!1,l.i=-1,l.h=-1,100>je.length&&je.push(l)}}function k(l,Z,x){for(var T=x.length,J=T%2==1,o=J?1:0;o<T;o+=2)(0,x[o+1])(Z,l,x[o]);fn(l,Z,J?x[0]:void 0)}function z(l,Z){var x=new Pe;k(l,x,un(Z)),Ie(x,x.g.end()),l=new Uint8Array(x.h),Z=x.i;for(var T=Z.length,J=0,o=0;o<T;o++){var d=Z[o];l.set(d,J),J+=d.length}return x.i=[l],l}function ot(l,Z){return{O:l,P:Z}}var O=ot(function(l,Z,x){if(l.h!==5)return!1;l=l.g;var T=l.h[l.g],J=l.h[l.g+1],o=l.h[l.g+2],d=l.h[l.g+3];return l.g+=4,At(l),J=(T<<0|J<<8|o<<16|d<<24)>>>0,l=2*(J>>31)+1,T=J>>>23&255,J&=8388607,Ct(Z,x,T==255?J?NaN:1/0*l:T==0?l*Math.pow(2,-149)*J:l*Math.pow(2,T-150)*(J+Math.pow(2,23))),!0},function(l,Z,x){if(Z=fe(Z,x),Z!=null){we(l.g,8*x+5),l=l.g;var T=Z;T=(x=0>T?1:0)?-T:T,T===0?0<1/T?ne=We=0:(We=0,ne=2147483648):isNaN(T)?(We=0,ne=2147483647):34028234663852886e22<T?(We=0,ne=(x<<31|2139095040)>>>0):11754943508222875e-54>T?(T=Math.round(T/Math.pow(2,-149)),We=0,ne=(x<<31|T)>>>0):(Z=Math.floor(Math.log(T)/Math.LN2),T*=Math.pow(2,-Z),T=Math.round(8388608*T),16777216<=T&&++Z,We=0,ne=(x<<31|Z+127<<23|T&8388607)>>>0),x=ne,l.g.push(x>>>0&255),l.g.push(x>>>8&255),l.g.push(x>>>16&255),l.g.push(x>>>24&255)}}),rt=ot(function(l,Z,x){if(l.h!==0)return!1;for(var T=l.g,J=128,o=0,d=l=0;4>d&&128<=J;d++)J=T.h[T.g++],At(T),o|=(J&127)<<7*d;if(128<=J&&(J=T.h[T.g++],At(T),o|=(J&127)<<28,l|=(J&127)>>4),128<=J)for(d=0;5>d&&128<=J;d++)J=T.h[T.g++],At(T),l|=(J&127)<<7*d+3;if(128>J)T=o>>>0,J=l>>>0,(l=J&2147483648)&&(T=~T+1>>>0,J=~J>>>0,T==0&&(J=J+1>>>0)),T=4294967296*J+(T>>>0);else throw _t();return Ct(Z,x,l?-T:T),!0},function(l,Z,x){if(Z=fe(Z,x),Z!=null&&Z!=null){we(l.g,8*x),l=l.g;var T=Z;for(x=0>T,T=Math.abs(T),Z=T>>>0,T=Math.floor((T-Z)/4294967296),T>>>=0,x&&(T=~T>>>0,Z=(~Z>>>0)+1,4294967295<Z&&(Z=0,T++,4294967295<T&&(T=0))),ne=Z,We=T,x=ne,Z=We;0<Z||127<x;)l.g.push(x&127|128),x=(x>>>7|Z<<25)>>>0,Z>>>=7;l.g.push(x)}}),bt=ot(function(l,Z,x){return l.h!==0?!1:(Ct(Z,x,xe(l.g)),!0)},function(l,Z,x){if(Z=fe(Z,x),Z!=null&&Z!=null)if(we(l.g,8*x),l=l.g,x=Z,0<=x)we(l,x);else{for(Z=0;9>Z;Z++)l.g.push(x&127|128),x>>=7;l.g.push(1)}}),Rt=ot(function(l,Z,x){if(l.h!==2)return!1;var T=xe(l.g)>>>0;l=l.g;var J=l.g;l.g+=T,At(l),l=l.h;var o;if(Ln)(o=Xn)||(o=Xn=new TextDecoder("utf-8",{fatal:!0})),o=o.decode(l.subarray(J,J+T));else{T=J+T;for(var d=[],g=null,e,u,f;J<T;)e=l[J++],128>e?d.push(e):224>e?J>=T?Te():(u=l[J++],194>e||(u&192)!==128?(J--,Te()):d.push((e&31)<<6|u&63)):240>e?J>=T-1?Te():(u=l[J++],(u&192)!==128||e===224&&160>u||e===237&&160<=u||((o=l[J++])&192)!==128?(J--,Te()):d.push((e&15)<<12|(u&63)<<6|o&63)):244>=e?J>=T-2?Te():(u=l[J++],(u&192)!==128||(e<<28)+(u-144)>>30!==0||((o=l[J++])&192)!==128||((f=l[J++])&192)!==128?(J--,Te()):(e=(e&7)<<18|(u&63)<<12|(o&63)<<6|f&63,e-=65536,d.push((e>>10&1023)+55296,(e&1023)+56320))):Te(),8192<=d.length&&(g=on(g,d),d.length=0);o=on(g,d)}return Ct(Z,x,o),!0},function(l,Z,x){if(Z=fe(Z,x),Z!=null){var T=!1;if(T=T===void 0?!1:T,Nn){if(T&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(Z))throw Error("Found an unpaired surrogate");Z=(xn||(xn=new TextEncoder)).encode(Z)}else{for(var J=0,o=new Uint8Array(3*Z.length),d=0;d<Z.length;d++){var g=Z.charCodeAt(d);if(128>g)o[J++]=g;else{if(2048>g)o[J++]=g>>6|192;else{if(55296<=g&&57343>=g){if(56319>=g&&d<Z.length){var e=Z.charCodeAt(++d);if(56320<=e&&57343>=e){g=1024*(g-55296)+e-56320+65536,o[J++]=g>>18|240,o[J++]=g>>12&63|128,o[J++]=g>>6&63|128,o[J++]=g&63|128;continue}else d--}if(T)throw Error("Found an unpaired surrogate");g=65533}o[J++]=g>>12|224,o[J++]=g>>6&63|128}o[J++]=g&63|128}}Z=o.subarray(0,J)}we(l.g,8*x+2),we(l.g,Z.length),Ie(l,l.g.end()),Ie(l,Z)}}),Ut=ot(function(l,Z,x,T,J){if(l.h!==2)return!1;Z=ee(Z,x,T),x=l.g.i,T=xe(l.g)>>>0;var o=l.g.g+T,d=o-x;if(0>=d&&(l.g.i=o,J(Z,l),d=o-l.g.g),d)throw Error("Message parsing ended unexpectedly. Expected to read "+(T+" bytes, instead read "+(T-d)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return l.g.g=o,l.g.i=x,!0},function(l,Z,x,T,J){if(Z=Ye(Z,T,x),Z!=null)for(T=0;T<Z.length;T++){var o=l;we(o.g,8*x+2);var d=o.g.end();Ie(o,d),d.push(o.h),o=d,J(Z[T],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 Nt(){qe.apply(this,arguments)}if(pt(Nt,qe),zt){var $t={};Object.defineProperties(Nt,($t[Symbol.hasInstance]=hn(Object[Symbol.hasInstance]),$t))}function Et(l){Nt.call(this,l)}pt(Et,Nt);function Tt(){return[1,bt,2,O,3,Rt,4,Rt]}function kt(l){Nt.call(this,l,-1,ue)}pt(kt,Nt),kt.prototype.addClassification=function(l,Z){return ee(this,1,Et,l,Z),this};function Qt(){return[1,Ut,Et,Tt]}var ue=[1];function pe(l){Nt.call(this,l)}pt(pe,Nt);function ge(){return[1,O,2,O,3,O,4,O,5,O]}function Je(l){Nt.call(this,l,-1,y)}pt(Je,Nt);function h(){return[1,Ut,pe,ge]}var y=[1];function v(l){Nt.call(this,l)}pt(v,Nt);function C(){return[1,O,2,O,3,O,4,O,5,O,6,rt]}function A(l,Z,x){if(x=l.createShader(x===0?l.VERTEX_SHADER:l.FRAGMENT_SHADER),l.shaderSource(x,Z),l.compileShader(x),!l.getShaderParameter(x,l.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
21
20
|
|
|
22
|
-
`+l.getShaderInfoLog(x));return x}function
|
|
21
|
+
`+l.getShaderInfoLog(x));return x}function _(l){return Ye(l,Et,1).map(function(Z){return{index:oe(Z,1),score:ie(Z,2),label:fe(Z,3)!=null?tt(Z,3):void 0,displayName:fe(Z,4)!=null?tt(Z,4):void 0}})}function M(l){return{x:ie(l,1),y:ie(l,2),z:ie(l,3),visibility:fe(l,4)!=null?ie(l,4):void 0}}function q(l){return l.map(function(Z){return Ye(V(Z,Je,h),pe,1).map(M)})}function lt(l,Z){this.h=l,this.g=Z,this.l=0}function s(l,Z,x){return X(l,Z),typeof l.g.canvas.transferToImageBitmap=="function"?Promise.resolve(l.g.canvas.transferToImageBitmap()):x?Promise.resolve(l.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(l.g.canvas):(l.i===void 0&&(l.i=document.createElement("canvas")),new Promise(function(T){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),T(l.i)}))}function X(l,Z){var x=l.g;if(l.o===void 0){var T=A(x,`
|
|
23
22
|
attribute vec2 aVertex;
|
|
24
23
|
attribute vec2 aTex;
|
|
25
24
|
varying vec2 vTex;
|
|
26
25
|
void main(void) {
|
|
27
26
|
gl_Position = vec4(aVertex, 0.0, 1.0);
|
|
28
27
|
vTex = aTex;
|
|
29
|
-
}`,0),J=
|
|
28
|
+
}`,0),J=A(x,`
|
|
30
29
|
precision mediump float;
|
|
31
30
|
varying vec2 vTex;
|
|
32
31
|
uniform sampler2D sampler0;
|
|
33
32
|
void main(){
|
|
34
33
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
35
|
-
}`,1),
|
|
34
|
+
}`,1),o=x.createProgram();if(x.attachShader(o,T),x.attachShader(o,J),x.linkProgram(o),!x.getProgramParameter(o,x.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
36
35
|
|
|
37
|
-
`+x.getProgramInfoLog(i));T=l.o=i,x.useProgram(T),J=x.getUniformLocation(T,"sampler0"),l.j={K:x.getAttribLocation(T,"aVertex"),J:x.getAttribLocation(T,"aTex"),qa:J},l.u=x.createBuffer(),x.bindBuffer(x.ARRAY_BUFFER,l.u),x.enableVertexAttribArray(l.j.K),x.vertexAttribPointer(l.j.K,2,x.FLOAT,!1,0,0),x.bufferData(x.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),x.STATIC_DRAW),x.bindBuffer(x.ARRAY_BUFFER,null),l.s=x.createBuffer(),x.bindBuffer(x.ARRAY_BUFFER,l.s),x.enableVertexAttribArray(l.j.J),x.vertexAttribPointer(l.j.J,2,x.FLOAT,!1,0,0),x.bufferData(x.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),x.STATIC_DRAW),x.bindBuffer(x.ARRAY_BUFFER,null),x.uniform1i(J,0)}T=l.j,x.useProgram(l.o),x.canvas.width=v.width,x.canvas.height=v.height,x.viewport(0,0,v.width,v.height),x.activeTexture(x.TEXTURE0),l.h.bindTexture2d(v.glName),x.enableVertexAttribArray(T.K),x.bindBuffer(x.ARRAY_BUFFER,l.u),x.vertexAttribPointer(T.K,2,x.FLOAT,!1,0,0),x.enableVertexAttribArray(T.J),x.bindBuffer(x.ARRAY_BUFFER,l.s),x.vertexAttribPointer(T.J,2,x.FLOAT,!1,0,0),x.bindFramebuffer(x.DRAW_FRAMEBUFFER?x.DRAW_FRAMEBUFFER:x.FRAMEBUFFER,null),x.clearColor(0,0,0,0),x.clear(x.COLOR_BUFFER_BIT),x.colorMask(!0,!0,!0,!0),x.drawArrays(x.TRIANGLE_FAN,0,4),x.disableVertexAttribArray(T.K),x.disableVertexAttribArray(T.J),x.bindBuffer(x.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 N(l,v){return v+l}function A(l,v){window[l]=v}function U(l){var v=document.createElement("script");return v.setAttribute("src",l),v.setAttribute("crossorigin","anonymous"),new Promise(function(x){v.addEventListener("load",function(){x()},!1),v.addEventListener("error",function(){x()},!1),document.body.appendChild(v)})}function rt(){return gt(function(l){switch(l.g){case 1:return l.o=2,_(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 q(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||N,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=Y(Object.keys(l.options));for(var x=v.next();!x.done;x=v.next()){x=x.value;var T=l.options[x].default;T!==void 0&&(this.j[x]=typeof T=="function"?T():T)}}}o=q.prototype,o.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function yt(l){var v,x,T,J,i,d,Z,e,c,f,t;return gt(function(u){switch(u.g){case 1:return l.$?(v=l.g.files===void 0?[]:typeof l.g.files=="function"?l.g.files(l.j):l.g.files,_(u,rt(),2)):u.return();case 2:if(x=u.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}),Z=v.filter(function(a){return a.data===void 0}),e=Promise.all(d.map(function(a){var b=St(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})),c=Promise.all(Z.map(function(a){return a.simd===void 0||a.simd&&x||!a.simd&&!x?U(l.locateFile(a.url,l.aa)):Promise.resolve()})).then(function(){var a,b,S;return gt(function(L){if(L.g==1)return a=window.createMediapipeSolutionsWasm,b=window.createMediapipeSolutionsPackedAssets,S=l,_(L,a(b),2);S.h=L.h,L.g=0})}),f=function(){return gt(function(a){return l.g.graph&&l.g.graph.url?a=_(a,St(l,l.g.graph.url),0):(a.g=0,a=void 0),a})}(),_(u,Promise.all([c,e,f]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return T=v.filter(function(a){return a.simd===void 0||a.simd&&x||!a.simd&&!x}).map(function(a){return l.locateFile(a.url,l.aa)}),importScripts.apply(null,k(T)),J=l,_(u,createMediapipeSolutionsWasm(Module),6);case 6:J.h=u.h,l.l=new OffscreenCanvas(1,1),l.h.canvas=l.l,i=l.h.GL.createContext(l.l,{antialias:!1,alpha:!1,na:typeof WebGL2RenderingContext<"u"?2:1}),l.h.GL.makeContextCurrent(i),u.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."),u.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,u.g=0}})}function Gt(l){var v,x,T,J,i,d,Z,e;return gt(function(c){if(c.g==1){if(l.g.graph&&l.g.graph.url&&l.Z===l.g.graph.url)return c.return();if(l.s=!0,!l.g.graph||!l.g.graph.url){c.g=2;return}return l.Z=l.g.graph.url,_(c,St(l,l.g.graph.url),3)}for(c.g!=2&&(v=c.h,l.i.loadGraph(v)),x=Y(Object.keys(l.C)),T=x.next();!T.done;T=x.next())J=T.value,l.i.overrideFile(J,l.C[J]);if(l.C={},l.g.listeners)for(i=Y(l.g.listeners),d=i.next();!d.done;d=i.next())Z=d.value,Yt(l,Z);e=l.j,l.j={},l.setOptions(e),c.g=0})}o.reset=function(){var l=this;return gt(function(v){l.i&&(l.i.reset(),l.o={},l.u={}),v.g=0})},o.setOptions=function(l,v){var x=this;if(v=v||this.g.options){for(var T=[],J=[],i={},d=Y(Object.keys(l)),Z=d.next();!Z.done;i={R:i.R,S:i.S},Z=d.next()){var e=Z.value;e in this.j&&this.j[e]===l[e]||(this.j[e]=l[e],Z=v[e],Z!==void 0&&(Z.onChange&&(i.R=Z.onChange,i.S=l[e],T.push(function(c){return function(){var f;return gt(function(t){if(t.g==1)return _(t,c.R(c.S),2);f=t.h,f===!0&&(x.s=!0),t.g=0})}}(i))),Z.graphOptionXref&&(e={valueNumber:Z.type===1?l[e]:0,valueBoolean:Z.type===0?l[e]:!1,valueString:Z.type===2?l[e]:""},Z=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),Z.graphOptionXref),e),J.push(Z))))}(T.length!==0||J.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(J),this.A=(this.A===void 0?[]:this.A).concat(T))}};function Mt(l){var v,x,T,J,i,d,Z;return gt(function(e){switch(e.g){case 1:if(!l.s)return e.return();if(!l.A){e.g=2;break}v=Y(l.A),x=v.next();case 3:if(x.done){e.g=5;break}return T=x.value,_(e,T(),4);case 4:x=v.next(),e.g=3;break;case 5:l.A=void 0;case 2:if(l.B){for(J=new l.h.GraphOptionChangeRequestList,i=Y(l.B),d=i.next();!d.done;d=i.next())Z=d.value,J.push_back(Z);l.i.changeOptions(J),J.delete(),l.B=void 0}l.s=!1,e.g=0}})}o.initialize=function(){var l=this;return gt(function(v){return v.g==1?_(v,yt(l),2):v.g!=3?_(v,Gt(l),3):_(v,Mt(l),0)})};function St(l,v){var x,T;return gt(function(J){return v in l.H?J.return(l.H[v]):(x=l.locateFile(v,""),T=fetch(x).then(function(i){return i.arrayBuffer()}),l.H[v]=T,J.return(T))})}o.overrideFile=function(l,v){this.i?this.i.overrideFile(l,v):this.C[l]=v},o.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},o.send=function(l,v){var x=this,T,J,i,d,Z,e,c,f,t;return gt(function(u){switch(u.g){case 1:return x.g.inputs?(T=1e3*(v==null?performance.now():v),_(u,x.D,2)):u.return();case 2:return _(u,x.initialize(),3);case 3:for(J=new x.h.PacketDataList,i=Y(Object.keys(l)),d=i.next();!d.done;d=i.next())if(Z=d.value,e=x.g.inputs[Z]){t:{var a=l[Z];switch(e.type){case"video":var b=x.o[e.stream];if(b||(b=new ct(x.h,x.G),x.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=x.o[e.stream],b||(b=new R(x.h),x.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 H=b.data,K=H.setBoundingBox,j=L,D=S.ea,$=new G;if(Nt($,1,D.ka),Nt($,2,D.la),Nt($,3,D.height),Nt($,4,D.width),Nt($,5,D.rotation),Nt($,6,D.ia),D=P($,C),K.call(H,j,D),S.Y)for(H=0;H<S.Y.length;++H){$=S.Y[H];var ut=!!$.visibility;K=b.data,j=K.addNormalizedLandmark,D=L,$=Object.assign(Object.assign({},$),{visibility:ut?$.visibility:0}),ut=new pe,Nt(ut,1,$.x),Nt(ut,2,$.y),Nt(ut,3,$.z),$.visibility&&Nt(ut,4,$.visibility),$=P(ut,ge),j.call(K,D,$)}if(S.V)for(H=0;H<S.V.length;++H)K=b.data,j=K.addClassification,D=L,$=S.V[H],ut=new Et,Nt(ut,2,$.score),$.index&&Nt(ut,1,$.index),$.label&&Nt(ut,3,$.label),$.displayName&&Nt(ut,4,$.displayName),$=P(ut,wt),j.call(K,D,$)}b=b.data;break t;default:b={}}}switch(c=b,f=e.stream,e.type){case"video":J.pushTexture2d(Object.assign(Object.assign({},c),{stream:f,timestamp:T}));break;case"detections":t=c,t.stream=f,t.timestamp=T,J.pushDetectionList(t);break;default:throw Error("Unknown input config type: '"+e.type+"'")}}return x.i.send(J),_(u,x.D,4);case 4:J.delete(),u.g=0}})};function ft(l,v,x){var T,J,i,d,Z,e,c,f,t,u,a,b,S,L;return gt(function(H){switch(H.g){case 1:if(!x)return H.return(v);for(T={},J=0,i=Y(Object.keys(x)),d=i.next();!d.done;d=i.next())Z=d.value,e=x[Z],typeof e!="string"&&e.type==="texture"&&v[e.stream]!==void 0&&++J;1<J&&(l.I=!1),c=Y(Object.keys(x)),d=c.next();case 2:if(d.done){H.g=4;break}if(f=d.value,t=x[f],typeof t=="string")return S=T,L=f,_(H,Xt(l,f,v[t]),14);if(u=v[t.stream],t.type==="detection_list"){if(u){for(var K=u.getRectList(),j=u.getLandmarksList(),D=u.getClassificationsList(),$=[],ut=0;ut<K.size();++ut){var mt=W(K.get(ut),G,C);mt={ea:{ka:ie(mt,1),la:ie(mt,2),height:ie(mt,3),width:ie(mt,4),rotation:ie(mt,5,0),ia:oe(mt,6)},Y:Fe(W(j.get(ut),ke,h),pe,1).map(B),V:Q(W(D.get(ut),Kt,Dt))},$.push(mt)}K=$}else K=[];T[f]=K,H.g=7;break}if(t.type==="proto_list"){if(u){for(K=Array(u.size()),j=0;j<u.size();j++)K[j]=u.get(j);u.delete()}else K=[];T[f]=K,H.g=7;break}if(u===void 0){H.g=3;break}if(t.type==="float_list"){T[f]=u,H.g=7;break}if(t.type==="proto"){T[f]=u,H.g=7;break}if(t.type!=="texture")throw Error("Unknown output config type: '"+t.type+"'");return a=l.u[f],a||(a=new ct(l.h,l.G),l.u[f]=a),_(H,s(a,u,l.I),13);case 13:b=H.h,T[f]=b;case 7:t.transform&&T[f]&&(T[f]=t.transform(T[f])),H.g=3;break;case 14:S[L]=H.h;case 3:d=c.next(),H.g=2;break;case 4:return H.return(T)}})}function Xt(l,v,x){var T;return gt(function(J){return typeof x=="number"||x instanceof Uint8Array||x instanceof l.h.Uint8BlobList?J.return(x):x instanceof l.h.Texture2dDataOut?(T=l.u[v],T||(T=new ct(l.h,l.G),l.u[v]=T),J.return(s(T,x,l.I))):J.return(void 0)})}function Yt(l,v){for(var x=v.name||"$",T=[].concat(k(v.wants)),J=new l.h.StringList,i=Y(v.wants),d=i.next();!d.done;d=i.next())J.push_back(d.value);i=l.h.PacketListener.implement({onResults:function(Z){for(var e={},c=0;c<v.wants.length;++c)e[T[c]]=Z.get(c);var f=l.listeners[x];f&&(l.D=ft(l,e,v.outs).then(function(t){t=f(t);for(var u=0;u<v.wants.length;++u){var a=e[T[u]];typeof a=="object"&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}t&&(l.D=t)}))}}),l.i.attachMultiListener(J,i),J.delete()}o.onResults=function(l,v){this.listeners[v||"$"]=l},Jt("Solution",q),Jt("OptionType",{BOOL:0,NUMBER:1,ma:2,0:"BOOL",1:"NUMBER",2:"STRING"});function Ft(l){return l===void 0&&(l=0),l===1?"hand_landmark_full.tflite":"hand_landmark_lite.tflite"}function Ct(l){var v=this;l=l||{},this.g=new q({locateFile:l.locateFile,files:function(x){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:Ft(x.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:tt},multiHandWorldLandmarks:{type:"proto_list",stream:"multi_hand_world_landmarks",transform:tt},multiHandedness:{type:"proto_list",stream:"multi_handedness",transform:function(x){return x.map(function(T){return Q(W(T,Kt,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(x){var T,J,i;return gt(function(d){return d.g==1?(T=Ft(x),J="third_party/mediapipe/modules/hand_landmark/"+T,_(d,St(v.g,T),2)):(i=d.h,v.g.overrideFile(J,i),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"}}}})}o=Ct.prototype,o.close=function(){return this.g.close(),Promise.resolve()},o.onResults=function(l){this.g.onResults(l)},o.initialize=function(){var l=this;return gt(function(v){return _(v,l.g.initialize(),0)})},o.reset=function(){this.g.reset()},o.send=function(l){var v=this;return gt(function(x){return _(x,v.g.send(l),0)})},o.setOptions=function(l){this.g.setOptions(l)},Jt("Hands",Ct),Jt("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]]),Jt("VERSION","0.4.1646424915")}).call(pi);var bi={};(function(){var o;function n(e){var c=0;return function(){return c<e.length?{done:!1,value:e[c++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(e,c,f){return e==Array.prototype||e==Object.prototype||(e[c]=f.value),e};function m(e){e=[typeof globalThis=="object"&&globalThis,e,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var c=0;c<e.length;++c){var f=e[c];if(f&&f.Math==Math)return f}throw Error("Cannot find global object")}var y=m(this);function I(e,c){if(c)t:{var f=y;e=e.split(".");for(var t=0;t<e.length-1;t++){var u=e[t];if(!(u in f))break t;f=f[u]}e=e[e.length-1],t=f[e],c=c(t),c!=t&&c!=null&&r(f,e,{configurable:!0,writable:!0,value:c})}}I("Symbol",function(e){function c(a){if(this instanceof c)throw new TypeError("Symbol is not a constructor");return new f(t+(a||"")+"_"+u++,a)}function f(a,b){this.g=a,r(this,"description",{configurable:!0,writable:!0,value:b})}if(e)return e;f.prototype.toString=function(){return this.g};var t="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",u=0;return c}),I("Symbol.iterator",function(e){if(e)return e;e=Symbol("Symbol.iterator");for(var c="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),f=0;f<c.length;f++){var t=y[c[f]];typeof t=="function"&&typeof t.prototype[e]!="function"&&r(t.prototype,e,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return e});function F(e){return e={next:e},e[Symbol.iterator]=function(){return this},e}function Y(e){var c=typeof Symbol<"u"&&Symbol.iterator&&e[Symbol.iterator];return c?c.call(e):{next:n(e)}}function k(e){if(!(e instanceof Array)){e=Y(e);for(var c,f=[];!(c=e.next()).done;)f.push(c.value);e=f}return e}var et=typeof Object.create=="function"?Object.create:function(e){function c(){}return c.prototype=e,new c},O;if(typeof Object.setPrototypeOf=="function")O=Object.setPrototypeOf;else{var st;t:{var xt={a:!0},Vt={};try{Vt.__proto__=xt,st=Vt.a;break t}catch{}st=!1}O=st?function(e,c){if(e.__proto__=c,e.__proto__!==c)throw new TypeError(e+" is not extensible");return e}:null}var dt=O;function ht(e,c){if(e.prototype=et(c.prototype),e.prototype.constructor=e,dt)dt(e,c);else for(var f in c)if(f!="prototype")if(Object.defineProperties){var t=Object.getOwnPropertyDescriptor(c,f);t&&Object.defineProperty(e,f,t)}else e[f]=c[f];e.da=c.prototype}function Ht(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Lt(e){if(e.l)throw new TypeError("Generator is already running");e.l=!0}Ht.prototype.o=function(e){this.h=e};function At(e,c){e.j={U:c,V:!0},e.g=e.m||e.s}Ht.prototype.return=function(e){this.j={return:e},this.g=this.s};function _(e,c,f){return e.g=f,{value:c}}function Ee(e){this.g=new Ht,this.h=e}function an(e,c){Lt(e.g);var f=e.g.i;return f?We(e,"return"in f?f.return:function(t){return{value:t,done:!0}},c,e.g.return):(e.g.return(c),$t(e))}function We(e,c,f,t){try{var u=c.call(e.g.i,f);if(!(u instanceof Object))throw new TypeError("Iterator result "+u+" is not an object");if(!u.done)return e.g.l=!1,u;var a=u.value}catch(b){return e.g.i=null,At(e.g,b),$t(e)}return e.g.i=null,t.call(e.g,a),$t(e)}function $t(e){for(;e.g.g;)try{var c=e.h(e.g);if(c)return e.g.l=!1,{value:c.value,done:!1}}catch(f){e.g.h=void 0,At(e.g,f)}if(e.g.l=!1,e.g.j){if(c=e.g.j,e.g.j=null,c.V)throw c.U;return{value:c.return,done:!0}}return{value:void 0,done:!0}}function An(e){this.next=function(c){return Lt(e.g),e.g.i?c=We(e,e.g.i.next,c,e.g.o):(e.g.o(c),c=$t(e)),c},this.throw=function(c){return Lt(e.g),e.g.i?c=We(e,e.g.i.throw,c,e.g.o):(At(e.g,c),c=$t(e)),c},this.return=function(c){return an(e,c)},this[Symbol.iterator]=function(){return this}}function de(e){function c(t){return e.next(t)}function f(t){return e.throw(t)}return new Promise(function(t,u){function a(b){b.done?t(b.value):Promise.resolve(b.value).then(c,f).then(a,u)}a(e.next())})}function gt(e){return de(new An(new Ee(e)))}I("Promise",function(e){function c(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 f(){this.g=null}function t(b){return b instanceof c?b:new c(function(S){S(b)})}if(e)return e;f.prototype.h=function(b){if(this.g==null){this.g=[];var S=this;this.i(function(){S.l()})}this.g.push(b)};var u=y.setTimeout;f.prototype.i=function(b){u(b,0)},f.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(H){this.j(H)}}}this.g=null},f.prototype.j=function(b){this.i(function(){throw b})},c.prototype.j=function(){function b(H){return function(K){L||(L=!0,H.call(S,K))}}var S=this,L=!1;return{resolve:b(this.C),reject:b(this.l)}},c.prototype.C=function(b){if(b===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(b instanceof c)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)}},c.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)},c.prototype.l=function(b){this.s(2,b)},c.prototype.m=function(b){this.s(1,b)},c.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()},c.prototype.D=function(){var b=this;u(function(){if(b.B()){var S=y.console;typeof S<"u"&&S.error(b.i)}},1)},c.prototype.B=function(){if(this.o)return!1;var b=y.CustomEvent,S=y.Event,L=y.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=y.document.createEvent("CustomEvent"),b.initCustomEvent("unhandledrejection",!1,!0,b)),b.promise=this,b.reason=this.i,L(b))},c.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 f;return c.prototype.F=function(b){var S=this.j();b.J(S.resolve,S.reject)},c.prototype.G=function(b,S){var L=this.j();try{b.call(S,L.resolve,L.reject)}catch(H){L.reject(H)}},c.prototype.then=function(b,S){function L(D,$){return typeof D=="function"?function(ut){try{H(D(ut))}catch(mt){K(mt)}}:$}var H,K,j=new c(function(D,$){H=D,K=$});return this.J(L(b,H),L(S,K)),j},c.prototype.catch=function(b){return this.then(void 0,b)},c.prototype.J=function(b,S){function L(){switch(H.h){case 1:b(H.i);break;case 2:S(H.i);break;default:throw Error("Unexpected state: "+H.h)}}var H=this;this.g==null?a.h(L):this.g.push(L),this.o=!0},c.resolve=t,c.reject=function(b){return new c(function(S,L){L(b)})},c.race=function(b){return new c(function(S,L){for(var H=Y(b),K=H.next();!K.done;K=H.next())t(K.value).J(S,L)})},c.all=function(b){var S=Y(b),L=S.next();return L.done?t([]):new c(function(H,K){function j(ut){return function(mt){D[ut]=mt,$--,$==0&&H(D)}}var D=[],$=0;do D.push(void 0),$++,t(L.value).J(j(D.length-1),K),L=S.next();while(!L.done)})},c});function pn(e,c){e instanceof String&&(e+="");var f=0,t=!1,u={next:function(){if(!t&&f<e.length){var a=f++;return{value:c(a,e[a]),done:!1}}return t=!0,{done:!0,value:void 0}}};return u[Symbol.iterator]=function(){return u},u}var jn=typeof Object.assign=="function"?Object.assign:function(e,c){for(var f=1;f<arguments.length;f++){var t=arguments[f];if(t)for(var u in t)Object.prototype.hasOwnProperty.call(t,u)&&(e[u]=t[u])}return e};I("Object.assign",function(e){return e||jn}),I("Object.is",function(e){return e||function(c,f){return c===f?c!==0||1/c===1/f:c!==c&&f!==f}}),I("Array.prototype.includes",function(e){return e||function(c,f){var t=this;t instanceof String&&(t=String(t));var u=t.length;for(f=f||0,0>f&&(f=Math.max(f+u,0));f<u;f++){var a=t[f];if(a===c||Object.is(a,c))return!0}return!1}}),I("String.prototype.includes",function(e){return e||function(c,f){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,f||0)!==-1}}),I("Array.prototype.keys",function(e){return e||function(){return pn(this,function(c){return c})}});var Re=this||self;function Jt(e,c){e=e.split(".");var f=Re;e[0]in f||typeof f.execScript>"u"||f.execScript("var "+e[0]);for(var t;e.length&&(t=e.shift());)e.length||c===void 0?f[t]&&f[t]!==Object.prototype[t]?f=f[t]:f=f[t]={}:f[t]=c}function Te(e){Re.setTimeout(function(){throw e},0)}function on(e){Te(e)}function Xn(e,c){on(Error("Invalid wire type: "+e+" (at position "+c+")"))}function Fn(){on(Error("Failed to read varint, encoding is invalid."))}function xn(e,c){return c=String.fromCharCode.apply(null,c),e==null?c:e+c}var Nn,dn=typeof TextDecoder<"u",bn,kn=typeof TextEncoder<"u";function Hn(e){if(kn)e=(bn||(bn=new TextEncoder)).encode(e);else{var c=void 0;c=c===void 0?!1:c;for(var f=0,t=new Uint8Array(3*e.length),u=0;u<e.length;u++){var a=e.charCodeAt(u);if(128>a)t[f++]=a;else{if(2048>a)t[f++]=a>>6|192;else{if(55296<=a&&57343>=a){if(56319>=a&&u<e.length){var b=e.charCodeAt(++u);if(56320<=b&&57343>=b){a=1024*(a-55296)+b-56320+65536,t[f++]=a>>18|240,t[f++]=a>>12&63|128,t[f++]=a>>6&63|128,t[f++]=a&63|128;continue}else u--}if(c)throw Error("Found an unpaired surrogate");a=65533}t[f++]=a>>12|224,t[f++]=a>>6&63|128}t[f++]=a&63|128}}e=t.subarray(0,f)}return e}var Oe={},je=null;function In(e){var c;c===void 0&&(c=0),Ye(),c=Oe[c];for(var f=Array(Math.floor(e.length/3)),t=c[64]||"",u=0,a=0;u<e.length-2;u+=3){var b=e[u],S=e[u+1],L=e[u+2],H=c[b>>2];b=c[(b&3)<<4|S>>4],S=c[(S&15)<<2|L>>6],L=c[L&63],f[a++]=H+b+S+L}switch(H=0,L=t,e.length-u){case 2:H=e[u+1],L=c[(H&15)<<2]||t;case 1:e=e[u],f[a]=c[e>>2]+c[(e&3)<<4|H>>4]+L+t}return f.join("")}function Vn(e){var c=e.length,f=3*c/4;f%3?f=Math.floor(f):"=.".indexOf(e[c-1])!=-1&&(f="=.".indexOf(e[c-2])!=-1?f-2:f-1);var t=new Uint8Array(f),u=0;return he(e,function(a){t[u++]=a}),t.subarray(0,u)}function he(e,c){function f(L){for(;t<e.length;){var H=e.charAt(t++),K=je[H];if(K!=null)return K;if(!/^[\s\xa0]*$/.test(H))throw Error("Unknown base64 encoding at char: "+H)}return L}Ye();for(var t=0;;){var u=f(-1),a=f(0),b=f(64),S=f(64);if(S===64&&u===-1)break;c(u<<2|a>>4),b!=64&&(c(a<<4&240|b>>2),S!=64&&c(b<<6&192|S))}}function Ye(){if(!je){je={};for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),c=["+/=","+/","-_=","-_.","-_"],f=0;5>f;f++){var t=e.concat(c[f].split(""));Oe[f]=t;for(var u=0;u<t.length;u++){var a=t[u];je[a]===void 0&&(je[a]=u)}}}}var Pe=typeof Uint8Array=="function",ne;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:Pe&&e instanceof Uint8Array?In(e):null;return e};var sn=typeof Uint8Array.prototype.slice=="function";function Me(e,c,f){return c===f?ne||(ne=new Uint8Array(0)):sn?e.slice(c,f):new Uint8Array(e.subarray(c,f))}var Qt=0,Ze=0;function Ce(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===Ve){if(e.g==null)var c=ne||(ne=new Uint8Array(0));else{c=Uint8Array;var f=e.g;f=f==null||Pe&&f!=null&&f instanceof Uint8Array?f:typeof f=="string"?Vn(f):null,e=e.g=f,c=new c(e)}return c}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 Bt(e,c){c=c===void 0?{}:c,c=c.u===void 0?!1:c.u,this.h=null,this.g=this.i=this.m=0,this.l=!1,this.u=c,e&&Ie(this,e)}function Ie(e,c){e.h=Ce(c),e.m=0,e.i=e.h.length,e.g=e.m}Bt.prototype.reset=function(){this.g=this.m};function zt(e){for(var c=128,f=0,t=0,u=0;4>u&&128<=c;u++)c=e.h[e.g++],f|=(c&127)<<7*u;if(128<=c&&(c=e.h[e.g++],f|=(c&127)<<28,t|=(c&127)>>4),128<=c)for(u=0;5>u&&128<=c;u++)c=e.h[e.g++],t|=(c&127)<<7*u+3;if(128>c)return e=f>>>0,c=t>>>0,(t=c&2147483648)&&(e=~e+1>>>0,c=~c>>>0,e==0&&(c=c+1>>>0)),e=4294967296*c+(e>>>0),t?-e:e;e.l=!0,Fn()}function ye(e){e.g>e.i&&(e.l=!0,on(Error("Tried to read past the end of the data "+e.g+" > "+e.i)))}Bt.prototype.j=function(){var e=this.h,c=e[this.g],f=c&127;return 128>c?(this.g+=1,ye(this),f):(c=e[this.g+1],f|=(c&127)<<7,128>c?(this.g+=2,ye(this),f):(c=e[this.g+2],f|=(c&127)<<14,128>c?(this.g+=3,ye(this),f):(c=e[this.g+3],f|=(c&127)<<21,128>c?(this.g+=4,ye(this),f):(c=e[this.g+4],f|=(c&15)<<28,128>c?(this.g+=5,ye(this),f>>>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,Fn(),f):(ye(this),f))))))},Bt.prototype.o=function(){var e=this.h[this.g],c=this.h[this.g+1],f=this.h[this.g+2],t=this.h[this.g+3];return this.g+=4,ye(this),f=(e<<0|c<<8|f<<16|t<<24)>>>0,e=2*(f>>31)+1,c=f>>>23&255,f&=8388607,c==255?f?NaN:1/0*e:c==0?e*Math.pow(2,-149)*f:e*Math.pow(2,c-150)*(f+Math.pow(2,23))};var we=[];function $e(){this.g=new Uint8Array(64),this.h=0}function Xe(e,c){if(!(e.h+1<e.g.length)){var f=e.g;e.g=new Uint8Array(Math.ceil(1+2*e.g.length)),e.g.set(f)}e.g[e.h++]=c}$e.prototype.length=function(){return this.h},$e.prototype.end=function(){var e=this.g,c=this.h;return this.h=0,Me(e,0,c)};function Ot(e,c){for(;127<c;)Xe(e,c&127|128),c>>>=7;Xe(e,c)}function ze(e){var c={},f=c.N===void 0?!1:c.N;this.m={u:c.u===void 0?!1:c.u},this.N=f,c=this.m,we.length?(f=we.pop(),c&&(f.u=c.u),e&&Ie(f,e),e=f):e=new Bt(e,c),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 c=e.g;if((c=c.g==c.i)||(c=e.j)||(c=e.g,c=c.l||0>c.g||c.g>c.i),c)return!1;e.l=e.g.g;var f=e.g.j();return c=f>>>3,f&=7,0<=f&&5>=f?(e.i=c,e.h=f,!0):(e.j=!0,Xn(f,e.l),!1)}function Se(e){switch(e.h){case 0:if(e.h!=0)Se(e);else t:{e=e.g;for(var c=e.g,f=0;10>f;f++){if((e.h[c]&128)===0){e.g=c+1,ye(e);break t}c++}e.l=!0,Fn()}break;case 1:e=e.g,e.g+=8,ye(e);break;case 2:e.h!=2?Se(e):(c=e.g.j(),e=e.g,e.g+=c,ye(e));break;case 5:e=e.g,e.g+=4,ye(e);break;case 3:c=e.i;do{if(!_e(e)){e.j=!0,on(Error("Unmatched start-group tag: stream EOF"));break}if(e.h==4){e.i!=c&&(e.j=!0,on(Error("Unmatched end-group tag")));break}Se(e)}while(1);break;default:e.j=!0,Xn(e.h,e.l)}}function Wn(e,c,f){e.N||(e=Me(e.g.h,f,e.g.g),(f=c.o)?f.push(e):c.o=[e])}function ln(e,c,f){var t=e.g.i,u=e.g.j(),a=e.g.g+u;if(e.g.i=a,f(c,e),f=a-e.g.g,f!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(u+" bytes, instead read "+(u-f)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return e.g.g=a,e.g.i=t,c}function Qe(e,c,f){var t=e.g.j();for(t=e.g.g+t;e.g.g<t;)f.push(c.call(e.g))}var un=[];function ve(){this.h=[],this.i=0,this.g=new $e}function Le(e,c){c.length!==0&&(e.h.push(c),e.i+=c.length)}function Ge(e,c,f){Ot(e.g,8*c+2),Ot(e.g,f.length),Le(e,e.g.end()),Le(e,f)}var re=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function De(e,c){Object.isFrozen(e)||(re?e[re]|=c:e.g!==void 0?e.g|=c:Object.defineProperties(e,{g:{value:c,configurable:!0,writable:!0,enumerable:!1}}))}function te(e){if(!e)return 0;var c;return re?c=e[re]:c=e.g,c==null?0:c}function Pt(e){return Array.isArray(e)&&De(e,1),e}function hn(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 Nt(e){switch(typeof e){case"number":return isFinite(e)?e:String(e);case"object":return Pe&&e!=null&&e instanceof Uint8Array?In(e):e;default:return e}}function Wt(e,c){if(e!=null)return Array.isArray(e)||fe(e)?ie(e,c):c(e)}function ie(e,c){if(Array.isArray(e)){for(var f=Array(e.length),t=0;t<e.length;t++)f[t]=Wt(e[t],c);return te(e)&1&&Pt(f),f}f={};for(t in e)f[t]=Wt(e[t],c);return f}var Fe;function ee(e,c,f){var t=Fe;Fe=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}c!==void 0&&-1<c?(this.l=Math.max(c,e+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(f)for(c=0;c<f.length;c++)e=f[c],e<this.l?(e+=this.j,(t=this.h[e])?Pt(t):this.h[e]=oe):(nt(this),(t=this.i[e])?Pt(t):this.i[e]=oe)}var oe=Object.freeze(Pt([]));function nt(e){var c=e.l+e.j;e.h[c]||(e.i=e.h[c]={})}function ot(e,c,f){return c===-1?null:(f===void 0?0:f)||c>=e.l?e.i?e.i[c]:void 0:e.h[c+e.j]}function at(e,c,f){f=f===void 0?!0:f;var t=t===void 0?!1:t,u=ot(e,c,t);return u==null&&(u=oe),u===oe?(u=Pt([]),Tt(e,c,u,t)):f&&Array.isArray(u)&&te(u)&2&&(u=u.slice(),Tt(e,c,u,t)),u}function _t(e){var c=at(e,3,!1);if(e.m||(e.m={}),!e.m[3]){for(var f=0;f<c.length;f++)c[f]=+c[f];e.m[3]=!0}return c}function ae(e,c,f){return e=ot(e,c),e==null?f:e}function ue(e,c,f){return e=ot(e,c),e=e==null?e:+e,e==null?f===void 0?0:f:e}function Tt(e,c,f,t){(t===void 0?0:t)||c>=e.l?(nt(e),e.i[c]=f):e.h[c+e.j]=f}function me(e,c,f){if(f===-1)return null;e.g||(e.g={});var t=e.g[f];if(t)return t;var u=ot(e,f,!1);return u==null?t:(c=new c(u),e.g[f]=c)}function Ne(e,c,f){e.g||(e.g={});var t=e.g[f];if(!t){var u=at(e,f,!1);t=[];for(var a=Array.isArray(u)?!!(te(u)&2):!1,b=0;b<u.length;b++)t[b]=new c(u[b]),a&&hn(t[b].h);a&&(hn(t),Object.freeze(t)),e.g[f]=t}return t}function qe(e,c,f,t,u){var a=Ne(e,t,c);f=f||new t,e=at(e,c),u!=null?(a.splice(u,0,f),e.splice(u,0,tn(f))):(a.push(f),e.push(tn(f)))}ee.prototype.toJSON=function(){var e=tn(this);return ie(e,Nt)};function tn(e){if(e.g)for(var c in e.g){var f=e.g[c];if(Array.isArray(f))for(var t=0;t<f.length;t++)f[t]&&tn(f[t]);else f&&tn(f)}return e.h}ee.prototype.toString=function(){return tn(this).toString()};function fn(e,c){if(e=e.o){Le(c,c.g.end());for(var f=0;f<e.length;f++)Le(c,e[f])}}function yn(e){var c=e[0];switch(e.length){case 2:var f=e[1];return function(L,H,K){return c(L,H,K,f)};case 3:var t=e[1],u=e[2];return function(L,H,K){return c(L,H,K,t,u)};case 4:var a=e[1],b=e[2],S=e[3];return function(L,H,K){return c(L,H,K,a,b,S)};default:throw Error("unsupported number of parameters, expected [2-4], got "+e.length)}}function He(e,c,f){for(;_e(c)&&c.h!=4;){var t=c.i,u=f[t];if(u){if(Array.isArray(u)&&(u=f[t]=yn(u)),!u(c,e,t)){t=c,u=e;var a=t.l;Se(t),Wn(t,u,a)}}else t=c,u=e,a=t.l,Se(t),Wn(t,u,a)}return e}function en(e,c){var f=new ve;if(c(e,f),e=f.i+f.g.length(),e===0)f=new Uint8Array(0);else{e=new Uint8Array(e);for(var t=f.h,u=t.length,a=c=0;a<u;a++){var b=t[a];b.length!==0&&(e.set(b,c),c+=b.length)}t=f.g,u=t.h,u!==0&&(e.set(t.g.subarray(0,u),c),t.h=0),f.h=[e],f=e}return f}function zn(e,c,f){if(un.length){var t=un.pop();e&&(Ie(t.g,e),t.i=-1,t.h=-1),e=t}else e=new ze(e);try{return f(new c,e)}finally{c=e.g,c.h=null,c.m=0,c.i=0,c.g=0,c.l=!1,c.u=!1,e.i=-1,e.h=-1,e.j=!1,100>un.length&&un.push(e)}}function nn(e,c,f){if(c=ot(c,f),c!=null){Ot(e.g,8*f+5),e=e.g;var t=c;t=(f=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=(f<<31|2139095040)>>>0):11754943508222875e-54>t?(t=Math.round(t/Math.pow(2,-149)),Ze=0,Qt=(f<<31|t)>>>0):(c=Math.floor(Math.log(t)/Math.LN2),t*=Math.pow(2,-c),t=Math.round(8388608*t),16777216<=t&&++c,Ze=0,Qt=(f<<31|c+127<<23|t&8388607)>>>0),f=Qt,Xe(e,f>>>0&255),Xe(e,f>>>8&255),Xe(e,f>>>16&255),Xe(e,f>>>24&255)}}function Je(e,c,f){return e.h!==5?!1:(Tt(c,f,e.g.o()),!0)}function Zn(e,c,f){return e.h!==5&&e.h!==2?!1:(c=at(c,f),e.h==2?Qe(e,Bt.prototype.o,c):c.push(e.g.o()),!0)}function Sn(e,c,f){return e.h!==0?!1:(Tt(c,f,zt(e.g)),!0)}function Be(e,c,f){return e.h!==0?!1:(Tt(c,f,e.g.j()),!0)}function En(e,c,f){if(e.h!==2)return!1;var t=e.g.j();e=e.g;var u=e.g;e.g+=t,ye(e),e=e.h;var a;if(dn)(a=Nn)||(a=Nn=new TextDecoder("utf-8",{fatal:!1})),a=a.decode(e.subarray(u,u+t));else{t=u+t;for(var b=[],S=null,L,H,K;u<t;)L=e[u++],128>L?b.push(L):224>L?u>=t?b.push(65533):(H=e[u++],194>L||(H&192)!==128?(u--,b.push(65533)):b.push((L&31)<<6|H&63)):240>L?u>=t-1?b.push(65533):(H=e[u++],(H&192)!==128||L===224&&160>H||L===237&&160<=H||((a=e[u++])&192)!==128?(u--,b.push(65533)):b.push((L&15)<<12|(H&63)<<6|a&63)):244>=L?u>=t-2?b.push(65533):(H=e[u++],(H&192)!==128||(L<<28)+(H-144)>>30!==0||((a=e[u++])&192)!==128||((K=e[u++])&192)!==128?(u--,b.push(65533)):(L=(L&7)<<18|(H&63)<<12|(a&63)<<6|K&63,L-=65536,b.push((L>>10&1023)+55296,(L&1023)+56320))):b.push(65533),8192<=b.length&&(S=xn(S,b),b.length=0);a=xn(S,b)}return Tt(c,f,a),!0}function rn(e,c,f,t,u){if(e.h!==2)return!1;e=ln(e,new t,u);var a=a===void 0?!1:a;return c.g||(c.g={}),t=e&&tn(e),c.g[f]=e,Tt(c,f,t,a),!0}function vn(e,c,f,t,u){return e.h!==2?!1:(e=ln(e,new t,u),qe(c,f,e,t,void 0),!0)}function Yn(e,c,f){return e.h!==0&&e.h!==2?!1:(c=at(c,f),e.h==2?Qe(e,Bt.prototype.j,c):c.push(e.g.j()),!0)}function Mn(e,c,f){return e.h!==0?!1:(Tt(c,f,zt(e.g)),!0)}function cn(e){ee.call(this,e,-1,$n)}var Tn;ht(cn,ee),cn.prototype.getRows=function(){return ot(this,1)},cn.prototype.getCols=function(){return ot(this,2)},cn.prototype.getPackedDataList=function(){return _t(this)},cn.prototype.getLayout=function(){return ae(this,4,0)};function Dn(e,c){return He(e,c,Tn||(Tn={1:Be,2:Be,3:Zn,4:Mn}))}var $n=[3];function wn(e){ee.call(this,e)}var Cn;ht(wn,ee);function p(e,c){var f=ot(e,1);if(f!=null&&f!=null){Ot(c.g,8);var t=c.g;if(0<=f)Ot(t,f);else{for(var u=0;9>u;u++)Xe(t,f&127|128),f>>=7;Xe(t,1)}}nn(c,e,2),t=ot(e,3),t!=null&&Ge(c,3,Hn(t)),t=ot(e,4),t!=null&&Ge(c,4,Hn(t)),fn(e,c)}function V(e,c){return He(e,c,Cn||(Cn={1:Be,2:Je,3:En,4:En}))}function W(e){ee.call(this,e,-1,lt)}var E;ht(W,ee),W.prototype.addClassification=function(e,c){return qe(this,1,e,wn,c),this};function P(e,c){return He(e,c,E||(E={1:[vn,wn,V]}))}var lt=[1];function z(e){ee.call(this,e)}var it;ht(z,ee);function bt(e,c){nn(c,e,1),nn(c,e,2),nn(c,e,3),nn(c,e,4),nn(c,e,5),fn(e,c)}function It(e,c){return He(e,c,it||(it={1:Je,2:Je,3:Je,4:Je,5:Je}))}function Ut(e){ee.call(this,e,-1,Et)}var kt;ht(Ut,ee);function qt(e,c){return He(e,c,kt||(kt={1:[vn,z,It]}))}var Et=[1];function wt(e){ee.call(this,e)}var Kt;ht(wt,ee);function Dt(e,c){nn(c,e,1),nn(c,e,2),nn(c,e,3),nn(c,e,4),nn(c,e,5);var f=ot(e,6);if(f!=null&&f!=null){Ot(c.g,48);var t=c.g,u=f;f=0>u,u=Math.abs(u);var a=u>>>0;for(u=Math.floor((u-a)/4294967296),u>>>=0,f&&(u=~u>>>0,a=(~a>>>0)+1,4294967295<a&&(a=0,u++,4294967295<u&&(u=0))),Qt=a,Ze=u,f=Qt,a=Ze;0<a||127<f;)Xe(t,f&127|128),f=(f>>>7|a<<25)>>>0,a>>>=7;Xe(t,f)}fn(e,c)}function ce(e,c){return He(e,c,Kt||(Kt={1:Je,2:Je,3:Je,4:Je,5:Je,6:Sn}))}function pe(e){ee.call(this,e,-1,h)}var ge;ht(pe,ee),pe.prototype.getVertexType=function(){return ae(this,1,0)},pe.prototype.getPrimitiveType=function(){return ae(this,2,0)},pe.prototype.getVertexBufferList=function(){return _t(this)},pe.prototype.getIndexBufferList=function(){return at(this,4)};function ke(e,c){return He(e,c,ge||(ge={1:Mn,2:Mn,3:Zn,4:Yn}))}var h=[3,4];function g(e){ee.call(this,e)}var G;ht(g,ee),g.prototype.getMesh=function(){return me(this,pe,1)},g.prototype.getPoseTransformMatrix=function(){return me(this,cn,2)};function C(e,c){return He(e,c,G||(G={1:[rn,pe,ke],2:[rn,cn,Dn]}))}var M=[[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]],Q=[[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]],B=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],tt=[[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(k(M),k(Q),k(B),k(tt),k(ct),k(s));function R(e,c,f){if(f=e.createShader(f===0?e.VERTEX_SHADER:e.FRAGMENT_SHADER),e.shaderSource(f,c),e.compileShader(f),!e.getShaderParameter(f,e.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
36
|
+
`+x.getProgramInfoLog(o));T=l.o=o,x.useProgram(T),J=x.getUniformLocation(T,"sampler0"),l.j={K:x.getAttribLocation(T,"aVertex"),J:x.getAttribLocation(T,"aTex"),qa:J},l.u=x.createBuffer(),x.bindBuffer(x.ARRAY_BUFFER,l.u),x.enableVertexAttribArray(l.j.K),x.vertexAttribPointer(l.j.K,2,x.FLOAT,!1,0,0),x.bufferData(x.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),x.STATIC_DRAW),x.bindBuffer(x.ARRAY_BUFFER,null),l.s=x.createBuffer(),x.bindBuffer(x.ARRAY_BUFFER,l.s),x.enableVertexAttribArray(l.j.J),x.vertexAttribPointer(l.j.J,2,x.FLOAT,!1,0,0),x.bufferData(x.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),x.STATIC_DRAW),x.bindBuffer(x.ARRAY_BUFFER,null),x.uniform1i(J,0)}T=l.j,x.useProgram(l.o),x.canvas.width=Z.width,x.canvas.height=Z.height,x.viewport(0,0,Z.width,Z.height),x.activeTexture(x.TEXTURE0),l.h.bindTexture2d(Z.glName),x.enableVertexAttribArray(T.K),x.bindBuffer(x.ARRAY_BUFFER,l.u),x.vertexAttribPointer(T.K,2,x.FLOAT,!1,0,0),x.enableVertexAttribArray(T.J),x.bindBuffer(x.ARRAY_BUFFER,l.s),x.vertexAttribPointer(T.J,2,x.FLOAT,!1,0,0),x.bindFramebuffer(x.DRAW_FRAMEBUFFER?x.DRAW_FRAMEBUFFER:x.FRAMEBUFFER,null),x.clearColor(0,0,0,0),x.clear(x.COLOR_BUFFER_BIT),x.colorMask(!0,!0,!0,!0),x.drawArrays(x.TRIANGLE_FAN,0,4),x.disableVertexAttribArray(T.K),x.disableVertexAttribArray(T.J),x.bindBuffer(x.ARRAY_BUFFER,null),l.h.bindTexture2d(0)}function R(l){this.g=l}var F=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 N(l,Z){return Z+l}function K(l,Z){window[l]=Z}function B(l){var Z=document.createElement("script");return Z.setAttribute("src",l),Z.setAttribute("crossorigin","anonymous"),new Promise(function(x){Z.addEventListener("load",function(){x()},!1),Z.addEventListener("error",function(){x()},!1),document.body.appendChild(Z)})}function nt(){return gt(function(l){switch(l.g){case 1:return l.o=2,P(l,WebAssembly.instantiate(F),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||N,typeof window=="object")var Z=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")Z=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=Z,l.options){Z=w(Object.keys(l.options));for(var x=Z.next();!x.done;x=Z.next()){x=x.value;var T=l.options[x].default;T!==void 0&&(this.j[x]=typeof T=="function"?T():T)}}}i=$.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function yt(l){var Z,x,T,J,o,d,g,e,u,f,t;return gt(function(c){switch(c.g){case 1:return l.$?(Z=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(x=c.h,typeof window=="object")return K("createMediapipeSolutionsWasm",{locateFile:l.locateFile}),K("createMediapipeSolutionsPackedAssets",{locateFile:l.locateFile}),d=Z.filter(function(a){return a.data!==void 0}),g=Z.filter(function(a){return a.data===void 0}),e=Promise.all(d.map(function(a){var b=xt(l,a.url);if(a.path!==void 0){var I=a.path;b=b.then(function(Y){return l.overrideFile(I,Y),Promise.resolve(Y)})}return b})),u=Promise.all(g.map(function(a){return a.simd===void 0||a.simd&&x||!a.simd&&!x?B(l.locateFile(a.url,l.aa)):Promise.resolve()})).then(function(){var a,b,I;return gt(function(Y){if(Y.g==1)return a=window.createMediapipeSolutionsWasm,b=window.createMediapipeSolutionsPackedAssets,I=l,P(Y,a(b),2);I.h=Y.h,Y.g=0})}),f=function(){return gt(function(a){return l.g.graph&&l.g.graph.url?a=P(a,xt(l,l.g.graph.url),0):(a.g=0,a=void 0),a})}(),P(c,Promise.all([u,e,f]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return T=Z.filter(function(a){return a.simd===void 0||a.simd&&x||!a.simd&&!x}).map(function(a){return l.locateFile(a.url,l.aa)}),importScripts.apply(null,E(T)),J=l,P(c,createMediapipeSolutionsWasm(Module),6);case 6:J.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 Gt(l){var Z,x,T,J,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,xt(l,l.g.graph.url),3)}for(u.g!=2&&(Z=u.h,l.i.loadGraph(Z)),x=w(Object.keys(l.C)),T=x.next();!T.done;T=x.next())J=T.value,l.i.overrideFile(J,l.C[J]);if(l.C={},l.g.listeners)for(o=w(l.g.listeners),d=o.next();!d.done;d=o.next())g=d.value,It(l,g);e=l.j,l.j={},l.setOptions(e),u.g=0})}i.reset=function(){var l=this;return gt(function(Z){l.i&&(l.i.reset(),l.o={},l.u={}),Z.g=0})},i.setOptions=function(l,Z){var x=this;if(Z=Z||this.g.options){for(var T=[],J=[],o={},d=w(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=Z[e],g!==void 0&&(g.onChange&&(o.R=g.onChange,o.S=l[e],T.push(function(u){return function(){var f;return gt(function(t){if(t.g==1)return P(t,u.R(u.S),2);f=t.h,f===!0&&(x.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),J.push(g))))}(T.length!==0||J.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(J),this.A=(this.A===void 0?[]:this.A).concat(T))}};function Bt(l){var Z,x,T,J,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}Z=w(l.A),x=Z.next();case 3:if(x.done){e.g=5;break}return T=x.value,P(e,T(),4);case 4:x=Z.next(),e.g=3;break;case 5:l.A=void 0;case 2:if(l.B){for(J=new l.h.GraphOptionChangeRequestList,o=w(l.B),d=o.next();!d.done;d=o.next())g=d.value,J.push_back(g);l.i.changeOptions(J),J.delete(),l.B=void 0}l.s=!1,e.g=0}})}i.initialize=function(){var l=this;return gt(function(Z){return Z.g==1?P(Z,yt(l),2):Z.g!=3?P(Z,Gt(l),3):P(Z,Bt(l),0)})};function xt(l,Z){var x,T;return gt(function(J){return Z in l.H?J.return(l.H[Z]):(x=l.locateFile(Z,""),T=fetch(x).then(function(o){return o.arrayBuffer()}),l.H[Z]=T,J.return(T))})}i.overrideFile=function(l,Z){this.i?this.i.overrideFile(l,Z):this.C[l]=Z},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(l,Z){var x=this,T,J,o,d,g,e,u,f,t;return gt(function(c){switch(c.g){case 1:return x.g.inputs?(T=1e3*(Z==null?performance.now():Z),P(c,x.D,2)):c.return();case 2:return P(c,x.initialize(),3);case 3:for(J=new x.h.PacketDataList,o=w(Object.keys(l)),d=o.next();!d.done;d=o.next())if(g=d.value,e=x.g.inputs[g]){t:{var a=l[g];switch(e.type){case"video":var b=x.o[e.stream];if(b||(b=new lt(x.h,x.G),x.o[e.stream]=b),b.l===0&&(b.l=b.h.createTexture()),typeof HTMLVideoElement<"u"&&a instanceof HTMLVideoElement)var I=a.videoWidth,Y=a.videoHeight;else typeof HTMLImageElement<"u"&&a instanceof HTMLImageElement?(I=a.naturalWidth,Y=a.naturalHeight):(I=a.width,Y=a.height);Y={glName:b.l,width:I,height:Y},I=b.g,I.canvas.width=Y.width,I.canvas.height=Y.height,I.activeTexture(I.TEXTURE0),b.h.bindTexture2d(b.l),I.texImage2D(I.TEXTURE_2D,0,I.RGBA,I.RGBA,I.UNSIGNED_BYTE,a),b.h.bindTexture2d(0),b=Y;break t;case"detections":for(b=x.o[e.stream],b||(b=new R(x.h),x.o[e.stream]=b),b.data||(b.data=new b.g.DetectionListData),b.data.reset(a.length),Y=0;Y<a.length;++Y){I=a[Y];var L=b.data,U=L.setBoundingBox,j=Y,Q=I.ea,D=new v;if(Ct(D,1,Q.ka),Ct(D,2,Q.la),Ct(D,3,Q.height),Ct(D,4,Q.width),Ct(D,5,Q.rotation),Ct(D,6,Q.ia),Q=z(D,C),U.call(L,j,Q),I.Y)for(L=0;L<I.Y.length;++L){D=I.Y[L];var st=!!D.visibility;U=b.data,j=U.addNormalizedLandmark,Q=Y,D=Object.assign(Object.assign({},D),{visibility:st?D.visibility:0}),st=new pe,Ct(st,1,D.x),Ct(st,2,D.y),Ct(st,3,D.z),D.visibility&&Ct(st,4,D.visibility),D=z(st,ge),j.call(U,Q,D)}if(I.V)for(L=0;L<I.V.length;++L)U=b.data,j=U.addClassification,Q=Y,D=I.V[L],st=new Et,Ct(st,2,D.score),D.index&&Ct(st,1,D.index),D.label&&Ct(st,3,D.label),D.displayName&&Ct(st,4,D.displayName),D=z(st,Tt),j.call(U,Q,D)}b=b.data;break t;default:b={}}}switch(u=b,f=e.stream,e.type){case"video":J.pushTexture2d(Object.assign(Object.assign({},u),{stream:f,timestamp:T}));break;case"detections":t=u,t.stream=f,t.timestamp=T,J.pushDetectionList(t);break;default:throw Error("Unknown input config type: '"+e.type+"'")}}return x.i.send(J),P(c,x.D,4);case 4:J.delete(),c.g=0}})};function ht(l,Z,x){var T,J,o,d,g,e,u,f,t,c,a,b,I,Y;return gt(function(L){switch(L.g){case 1:if(!x)return L.return(Z);for(T={},J=0,o=w(Object.keys(x)),d=o.next();!d.done;d=o.next())g=d.value,e=x[g],typeof e!="string"&&e.type==="texture"&&Z[e.stream]!==void 0&&++J;1<J&&(l.I=!1),u=w(Object.keys(x)),d=u.next();case 2:if(d.done){L.g=4;break}if(f=d.value,t=x[f],typeof t=="string")return I=T,Y=f,P(L,Xt(l,f,Z[t]),14);if(c=Z[t.stream],t.type==="detection_list"){if(c){for(var U=c.getRectList(),j=c.getLandmarksList(),Q=c.getClassificationsList(),D=[],st=0;st<U.size();++st){var ft=V(U.get(st),v,C);ft={ea:{ka:ie(ft,1),la:ie(ft,2),height:ie(ft,3),width:ie(ft,4),rotation:ie(ft,5,0),ia:oe(ft,6)},Y:Ye(V(j.get(st),Je,h),pe,1).map(M),V:_(V(Q.get(st),kt,Qt))},D.push(ft)}U=D}else U=[];T[f]=U,L.g=7;break}if(t.type==="proto_list"){if(c){for(U=Array(c.size()),j=0;j<c.size();j++)U[j]=c.get(j);c.delete()}else U=[];T[f]=U,L.g=7;break}if(c===void 0){L.g=3;break}if(t.type==="float_list"){T[f]=c,L.g=7;break}if(t.type==="proto"){T[f]=c,L.g=7;break}if(t.type!=="texture")throw Error("Unknown output config type: '"+t.type+"'");return a=l.u[f],a||(a=new lt(l.h,l.G),l.u[f]=a),P(L,s(a,c,l.I),13);case 13:b=L.h,T[f]=b;case 7:t.transform&&T[f]&&(T[f]=t.transform(T[f])),L.g=3;break;case 14:I[Y]=L.h;case 3:d=u.next(),L.g=2;break;case 4:return L.return(T)}})}function Xt(l,Z,x){var T;return gt(function(J){return typeof x=="number"||x instanceof Uint8Array||x instanceof l.h.Uint8BlobList?J.return(x):x instanceof l.h.Texture2dDataOut?(T=l.u[Z],T||(T=new lt(l.h,l.G),l.u[Z]=T),J.return(s(T,x,l.I))):J.return(void 0)})}function It(l,Z){for(var x=Z.name||"$",T=[].concat(E(Z.wants)),J=new l.h.StringList,o=w(Z.wants),d=o.next();!d.done;d=o.next())J.push_back(d.value);o=l.h.PacketListener.implement({onResults:function(g){for(var e={},u=0;u<Z.wants.length;++u)e[T[u]]=g.get(u);var f=l.listeners[x];f&&(l.D=ht(l,e,Z.outs).then(function(t){t=f(t);for(var c=0;c<Z.wants.length;++c){var a=e[T[c]];typeof a=="object"&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}t&&(l.D=t)}))}}),l.i.attachMultiListener(J,o),J.delete()}i.onResults=function(l,Z){this.listeners[Z||"$"]=l},Ht("Solution",$),Ht("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 Yt(l){var Z=this;l=l||{},this.g=new $({locateFile:l.locateFile,files:function(x){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(x.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(x){return x.map(function(T){return _(V(T,kt,Qt))[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(x){var T,J,o;return gt(function(d){return d.g==1?(T=wt(x),J="third_party/mediapipe/modules/hand_landmark/"+T,P(d,xt(Z.g,T),2)):(o=d.h,Z.g.overrideFile(J,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=Yt.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(Z){return P(Z,l.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(l){var Z=this;return gt(function(x){return P(x,Z.g.send(l),0)})},i.setOptions=function(l){this.g.setOptions(l)},Ht("Hands",Yt),Ht("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]]),Ht("VERSION","0.4.1646424915")}).call(di);var hi={};(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,f){return e==Array.prototype||e==Object.prototype||(e[u]=f.value),e};function p(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 f=e[u];if(f&&f.Math==Math)return f}throw Error("Cannot find global object")}var G=p(this);function S(e,u){if(u)t:{var f=G;e=e.split(".");for(var t=0;t<e.length-1;t++){var c=e[t];if(!(c in f))break t;f=f[c]}e=e[e.length-1],t=f[e],u=u(t),u!=t&&u!=null&&r(f,e,{configurable:!0,writable:!0,value:u})}}S("Symbol",function(e){function u(a){if(this instanceof u)throw new TypeError("Symbol is not a constructor");return new f(t+(a||"")+"_"+c++,a)}function f(a,b){this.g=a,r(this,"description",{configurable:!0,writable:!0,value:b})}if(e)return e;f.prototype.toString=function(){return this.g};var t="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",c=0;return u}),S("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(" "),f=0;f<u.length;f++){var t=G[u[f]];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 w(e){var u=typeof Symbol<"u"&&Symbol.iterator&&e[Symbol.iterator];return u?u.call(e):{next:n(e)}}function E(e){if(!(e instanceof Array)){e=w(e);for(var u,f=[];!(u=e.next()).done;)f.push(u.value);e=f}return e}var et=typeof Object.create=="function"?Object.create:function(e){function u(){}return u.prototype=e,new u},ct;if(typeof Object.setPrototypeOf=="function")ct=Object.setPrototypeOf;else{var dt;t:{var Ft={a:!0},Lt={};try{Lt.__proto__=Ft,dt=Lt.a;break t}catch{}dt=!1}ct=dt?function(e,u){if(e.__proto__=u,e.__proto__!==u)throw new TypeError(e+" is not extensible");return e}:null}var at=ct;function pt(e,u){if(e.prototype=et(u.prototype),e.prototype.constructor=e,at)at(e,u);else for(var f in u)if(f!="prototype")if(Object.defineProperties){var t=Object.getOwnPropertyDescriptor(u,f);t&&Object.defineProperty(e,f,t)}else e[f]=u[f];e.da=u.prototype}function Mt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Jt(e){if(e.l)throw new TypeError("Generator is already running");e.l=!0}Mt.prototype.o=function(e){this.h=e};function qt(e,u){e.j={U:u,V:!0},e.g=e.m||e.s}Mt.prototype.return=function(e){this.j={return:e},this.g=this.s};function P(e,u,f){return e.g=f,{value:u}}function De(e){this.g=new Mt,this.h=e}function an(e,u){Jt(e.g);var f=e.g.i;return f?Ve(e,"return"in f?f.return:function(t){return{value:t,done:!0}},u,e.g.return):(e.g.return(u),Dt(e))}function Ve(e,u,f,t){try{var c=u.call(e.g.i,f);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,qt(e.g,b),Dt(e)}return e.g.i=null,t.call(e.g,a),Dt(e)}function Dt(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(f){e.g.h=void 0,qt(e.g,f)}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 Kn(e){this.next=function(u){return Jt(e.g),e.g.i?u=Ve(e,e.g.i.next,u,e.g.o):(e.g.o(u),u=Dt(e)),u},this.throw=function(u){return Jt(e.g),e.g.i?u=Ve(e,e.g.i.throw,u,e.g.o):(qt(e.g,u),u=Dt(e)),u},this.return=function(u){return an(e,u)},this[Symbol.iterator]=function(){return this}}function de(e){function u(t){return e.next(t)}function f(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,f).then(a,c)}a(e.next())})}function gt(e){return de(new Kn(new De(e)))}S("Promise",function(e){function u(b){this.h=0,this.i=void 0,this.g=[],this.o=!1;var I=this.j();try{b(I.resolve,I.reject)}catch(Y){I.reject(Y)}}function f(){this.g=null}function t(b){return b instanceof u?b:new u(function(I){I(b)})}if(e)return e;f.prototype.h=function(b){if(this.g==null){this.g=[];var I=this;this.i(function(){I.l()})}this.g.push(b)};var c=G.setTimeout;f.prototype.i=function(b){c(b,0)},f.prototype.l=function(){for(;this.g&&this.g.length;){var b=this.g;this.g=[];for(var I=0;I<b.length;++I){var Y=b[I];b[I]=null;try{Y()}catch(L){this.j(L)}}}this.g=null},f.prototype.j=function(b){this.i(function(){throw b})},u.prototype.j=function(){function b(L){return function(U){Y||(Y=!0,L.call(I,U))}}var I=this,Y=!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 I=b!=null;break t;case"function":I=!0;break t;default:I=!1}I?this.v(b):this.m(b)}},u.prototype.v=function(b){var I=void 0;try{I=b.then}catch(Y){this.l(Y);return}typeof I=="function"?this.G(I,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,I){if(this.h!=0)throw Error("Cannot settle("+b+", "+I+"): Promise already settled in state"+this.h);this.h=b,this.i=I,this.h===2&&this.D(),this.A()},u.prototype.D=function(){var b=this;c(function(){if(b.B()){var I=G.console;typeof I<"u"&&I.error(b.i)}},1)},u.prototype.B=function(){if(this.o)return!1;var b=G.CustomEvent,I=G.Event,Y=G.dispatchEvent;return typeof Y>"u"?!0:(typeof b=="function"?b=new b("unhandledrejection",{cancelable:!0}):typeof I=="function"?b=new I("unhandledrejection",{cancelable:!0}):(b=G.document.createEvent("CustomEvent"),b.initCustomEvent("unhandledrejection",!1,!0,b)),b.promise=this,b.reason=this.i,Y(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 f;return u.prototype.F=function(b){var I=this.j();b.J(I.resolve,I.reject)},u.prototype.G=function(b,I){var Y=this.j();try{b.call(I,Y.resolve,Y.reject)}catch(L){Y.reject(L)}},u.prototype.then=function(b,I){function Y(Q,D){return typeof Q=="function"?function(st){try{L(Q(st))}catch(ft){U(ft)}}:D}var L,U,j=new u(function(Q,D){L=Q,U=D});return this.J(Y(b,L),Y(I,U)),j},u.prototype.catch=function(b){return this.then(void 0,b)},u.prototype.J=function(b,I){function Y(){switch(L.h){case 1:b(L.i);break;case 2:I(L.i);break;default:throw Error("Unexpected state: "+L.h)}}var L=this;this.g==null?a.h(Y):this.g.push(Y),this.o=!0},u.resolve=t,u.reject=function(b){return new u(function(I,Y){Y(b)})},u.race=function(b){return new u(function(I,Y){for(var L=w(b),U=L.next();!U.done;U=L.next())t(U.value).J(I,Y)})},u.all=function(b){var I=w(b),Y=I.next();return Y.done?t([]):new u(function(L,U){function j(st){return function(ft){Q[st]=ft,D--,D==0&&L(Q)}}var Q=[],D=0;do Q.push(void 0),D++,t(Y.value).J(j(Q.length-1),U),Y=I.next();while(!Y.done)})},u});function pn(e,u){e instanceof String&&(e+="");var f=0,t=!1,c={next:function(){if(!t&&f<e.length){var a=f++;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 jn=typeof Object.assign=="function"?Object.assign:function(e,u){for(var f=1;f<arguments.length;f++){var t=arguments[f];if(t)for(var c in t)Object.prototype.hasOwnProperty.call(t,c)&&(e[c]=t[c])}return e};S("Object.assign",function(e){return e||jn}),S("Object.is",function(e){return e||function(u,f){return u===f?u!==0||1/u===1/f:u!==u&&f!==f}}),S("Array.prototype.includes",function(e){return e||function(u,f){var t=this;t instanceof String&&(t=String(t));var c=t.length;for(f=f||0,0>f&&(f=Math.max(f+c,0));f<c;f++){var a=t[f];if(a===u||Object.is(a,u))return!0}return!1}}),S("String.prototype.includes",function(e){return e||function(u,f){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,f||0)!==-1}}),S("Array.prototype.keys",function(e){return e||function(){return pn(this,function(u){return u})}});var Re=this||self;function Ht(e,u){e=e.split(".");var f=Re;e[0]in f||typeof f.execScript>"u"||f.execScript("var "+e[0]);for(var t;e.length&&(t=e.shift());)e.length||u===void 0?f[t]&&f[t]!==Object.prototype[t]?f=f[t]:f=f[t]={}:f[t]=u}function Te(e){Re.setTimeout(function(){throw e},0)}function on(e){Te(e)}function Xn(e,u){on(Error("Invalid wire type: "+e+" (at position "+u+")"))}function Ln(){on(Error("Failed to read varint, encoding is invalid."))}function xn(e,u){return u=String.fromCharCode.apply(null,u),e==null?u:e+u}var Nn,dn=typeof TextDecoder<"u",bn,En=typeof TextEncoder<"u";function Cn(e){if(En)e=(bn||(bn=new TextEncoder)).encode(e);else{var u=void 0;u=u===void 0?!1:u;for(var f=0,t=new Uint8Array(3*e.length),c=0;c<e.length;c++){var a=e.charCodeAt(c);if(128>a)t[f++]=a;else{if(2048>a)t[f++]=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[f++]=a>>18|240,t[f++]=a>>12&63|128,t[f++]=a>>6&63|128,t[f++]=a&63|128;continue}else c--}if(u)throw Error("Found an unpaired surrogate");a=65533}t[f++]=a>>12|224,t[f++]=a>>6&63|128}t[f++]=a&63|128}}e=t.subarray(0,f)}return e}var Oe={},Ke=null;function In(e){var u;u===void 0&&(u=0),Se(),u=Oe[u];for(var f=Array(Math.floor(e.length/3)),t=u[64]||"",c=0,a=0;c<e.length-2;c+=3){var b=e[c],I=e[c+1],Y=e[c+2],L=u[b>>2];b=u[(b&3)<<4|I>>4],I=u[(I&15)<<2|Y>>6],Y=u[Y&63],f[a++]=L+b+I+Y}switch(L=0,Y=t,e.length-c){case 2:L=e[c+1],Y=u[(L&15)<<2]||t;case 1:e=e[c],f[a]=u[e>>2]+u[(e&3)<<4|L>>4]+Y+t}return f.join("")}function Wn(e){var u=e.length,f=3*u/4;f%3?f=Math.floor(f):"=.".indexOf(e[u-1])!=-1&&(f="=.".indexOf(e[u-2])!=-1?f-2:f-1);var t=new Uint8Array(f),c=0;return he(e,function(a){t[c++]=a}),t.subarray(0,c)}function he(e,u){function f(Y){for(;t<e.length;){var L=e.charAt(t++),U=Ke[L];if(U!=null)return U;if(!/^[\s\xa0]*$/.test(L))throw Error("Unknown base64 encoding at char: "+L)}return Y}Se();for(var t=0;;){var c=f(-1),a=f(0),b=f(64),I=f(64);if(I===64&&c===-1)break;u(c<<2|a>>4),b!=64&&(u(a<<4&240|b>>2),I!=64&&u(b<<6&192|I))}}function Se(){if(!Ke){Ke={};for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),u=["+/=","+/","-_=","-_.","-_"],f=0;5>f;f++){var t=e.concat(u[f].split(""));Oe[f]=t;for(var c=0;c<t.length;c++){var a=t[c];Ke[a]===void 0&&(Ke[a]=c)}}}}var ze=typeof Uint8Array=="function",ne;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:ze&&e instanceof Uint8Array?In(e):null;return e};var sn=typeof Uint8Array.prototype.slice=="function";function Ue(e,u,f){return u===f?ne||(ne=new Uint8Array(0)):sn?e.slice(u,f):new Uint8Array(e.subarray(u,f))}var _t=0,Ze=0;function Ce(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===We){if(e.g==null)var u=ne||(ne=new Uint8Array(0));else{u=Uint8Array;var f=e.g;f=f==null||ze&&f!=null&&f instanceof Uint8Array?f:typeof f=="string"?Wn(f):null,e=e.g=f,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 At(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&&xe(this,e)}function xe(e,u){e.h=Ce(u),e.m=0,e.i=e.h.length,e.g=e.m}At.prototype.reset=function(){this.g=this.m};function jt(e){for(var u=128,f=0,t=0,c=0;4>c&&128<=u;c++)u=e.h[e.g++],f|=(u&127)<<7*c;if(128<=u&&(u=e.h[e.g++],f|=(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=f>>>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,Ln()}function ye(e){e.g>e.i&&(e.l=!0,on(Error("Tried to read past the end of the data "+e.g+" > "+e.i)))}At.prototype.j=function(){var e=this.h,u=e[this.g],f=u&127;return 128>u?(this.g+=1,ye(this),f):(u=e[this.g+1],f|=(u&127)<<7,128>u?(this.g+=2,ye(this),f):(u=e[this.g+2],f|=(u&127)<<14,128>u?(this.g+=3,ye(this),f):(u=e[this.g+3],f|=(u&127)<<21,128>u?(this.g+=4,ye(this),f):(u=e[this.g+4],f|=(u&15)<<28,128>u?(this.g+=5,ye(this),f>>>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,Ln(),f):(ye(this),f))))))},At.prototype.o=function(){var e=this.h[this.g],u=this.h[this.g+1],f=this.h[this.g+2],t=this.h[this.g+3];return this.g+=4,ye(this),f=(e<<0|u<<8|f<<16|t<<24)>>>0,e=2*(f>>31)+1,u=f>>>23&255,f&=8388607,u==255?f?NaN:1/0*e:u==0?e*Math.pow(2,-149)*f:e*Math.pow(2,u-150)*(f+Math.pow(2,23))};var we=[];function $e(){this.g=new Uint8Array(64),this.h=0}function Xe(e,u){if(!(e.h+1<e.g.length)){var f=e.g;e.g=new Uint8Array(Math.ceil(1+2*e.g.length)),e.g.set(f)}e.g[e.h++]=u}$e.prototype.length=function(){return this.h},$e.prototype.end=function(){var e=this.g,u=this.h;return this.h=0,Ue(e,0,u)};function Ot(e,u){for(;127<u;)Xe(e,u&127|128),u>>>=7;Xe(e,u)}function je(e){var u={},f=u.N===void 0?!1:u.N;this.m={u:u.u===void 0?!1:u.u},this.N=f,u=this.m,we.length?(f=we.pop(),u&&(f.u=u.u),e&&xe(f,e),e=f):e=new At(e,u),this.g=e,this.l=this.g.g,this.h=this.i=-1,this.j=!1}je.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function Pe(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 f=e.g.j();return u=f>>>3,f&=7,0<=f&&5>=f?(e.i=u,e.h=f,!0):(e.j=!0,Xn(f,e.l),!1)}function Ie(e){switch(e.h){case 0:if(e.h!=0)Ie(e);else t:{e=e.g;for(var u=e.g,f=0;10>f;f++){if((e.h[u]&128)===0){e.g=u+1,ye(e);break t}u++}e.l=!0,Ln()}break;case 1:e=e.g,e.g+=8,ye(e);break;case 2:e.h!=2?Ie(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(!Pe(e)){e.j=!0,on(Error("Unmatched start-group tag: stream EOF"));break}if(e.h==4){e.i!=u&&(e.j=!0,on(Error("Unmatched end-group tag")));break}Ie(e)}while(1);break;default:e.j=!0,Xn(e.h,e.l)}}function Vn(e,u,f){e.N||(e=Ue(e.g.h,f,e.g.g),(f=u.o)?f.push(e):u.o=[e])}function ln(e,u,f){var t=e.g.i,c=e.g.j(),a=e.g.g+c;if(e.g.i=a,f(u,e),f=a-e.g.g,f!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(c+" bytes, instead read "+(c-f)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return e.g.g=a,e.g.i=t,u}function _e(e,u,f){var t=e.g.j();for(t=e.g.g+t;e.g.g<t;)f.push(u.call(e.g))}var cn=[];function ve(){this.h=[],this.i=0,this.g=new $e}function Fe(e,u){u.length!==0&&(e.h.push(u),e.i+=u.length)}function Ge(e,u,f){Ot(e.g,8*u+2),Ot(e.g,f.length),Fe(e,e.g.end()),Fe(e,f)}var re=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Qe(e,u){Object.isFrozen(e)||(re?e[re]|=u:e.g!==void 0?e.g|=u:Object.defineProperties(e,{g:{value:u,configurable:!0,writable:!0,enumerable:!1}}))}function te(e){if(!e)return 0;var u;return re?u=e[re]:u=e.g,u==null?0:u}function zt(e){return Array.isArray(e)&&Qe(e,1),e}function hn(e){if(!Array.isArray(e))throw Error("cannot mark non-array as immutable");Qe(e,2)}function fe(e){return e!==null&&typeof e=="object"&&e.constructor===Object}function Ct(e){switch(typeof e){case"number":return isFinite(e)?e:String(e);case"object":return ze&&e!=null&&e instanceof Uint8Array?In(e):e;default:return e}}function Vt(e,u){if(e!=null)return Array.isArray(e)||fe(e)?ie(e,u):u(e)}function ie(e,u){if(Array.isArray(e)){for(var f=Array(e.length),t=0;t<e.length;t++)f[t]=Vt(e[t],u);return te(e)&1&&zt(f),f}f={};for(t in e)f[t]=Vt(e[t],u);return f}var Ye;function ee(e,u,f){var t=Ye;Ye=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(f)for(u=0;u<f.length;u++)e=f[u],e<this.l?(e+=this.j,(t=this.h[e])?zt(t):this.h[e]=oe):(tt(this),(t=this.i[e])?zt(t):this.i[e]=oe)}var oe=Object.freeze(zt([]));function tt(e){var u=e.l+e.j;e.h[u]||(e.i=e.h[u]={})}function it(e,u,f){return u===-1?null:(f===void 0?0:f)||u>=e.l?e.i?e.i[u]:void 0:e.h[u+e.j]}function ut(e,u,f){f=f===void 0?!0:f;var t=t===void 0?!1:t,c=it(e,u,t);return c==null&&(c=oe),c===oe?(c=zt([]),St(e,u,c,t)):f&&Array.isArray(c)&&te(c)&2&&(c=c.slice(),St(e,u,c,t)),c}function Pt(e){var u=ut(e,3,!1);if(e.m||(e.m={}),!e.m[3]){for(var f=0;f<u.length;f++)u[f]=+u[f];e.m[3]=!0}return u}function ae(e,u,f){return e=it(e,u),e==null?f:e}function ce(e,u,f){return e=it(e,u),e=e==null?e:+e,e==null?f===void 0?0:f:e}function St(e,u,f,t){(t===void 0?0:t)||u>=e.l?(tt(e),e.i[u]=f):e.h[u+e.j]=f}function me(e,u,f){if(f===-1)return null;e.g||(e.g={});var t=e.g[f];if(t)return t;var c=it(e,f,!1);return c==null?t:(u=new u(c),e.g[f]=u)}function He(e,u,f){e.g||(e.g={});var t=e.g[f];if(!t){var c=ut(e,f,!1);t=[];for(var a=Array.isArray(c)?!!(te(c)&2):!1,b=0;b<c.length;b++)t[b]=new u(c[b]),a&&hn(t[b].h);a&&(hn(t),Object.freeze(t)),e.g[f]=t}return t}function qe(e,u,f,t,c){var a=He(e,t,u);f=f||new t,e=ut(e,u),c!=null?(a.splice(c,0,f),e.splice(c,0,tn(f))):(a.push(f),e.push(tn(f)))}ee.prototype.toJSON=function(){var e=tn(this);return ie(e,Ct)};function tn(e){if(e.g)for(var u in e.g){var f=e.g[u];if(Array.isArray(f))for(var t=0;t<f.length;t++)f[t]&&tn(f[t]);else f&&tn(f)}return e.h}ee.prototype.toString=function(){return tn(this).toString()};function fn(e,u){if(e=e.o){Fe(u,u.g.end());for(var f=0;f<e.length;f++)Fe(u,e[f])}}function yn(e){var u=e[0];switch(e.length){case 2:var f=e[1];return function(Y,L,U){return u(Y,L,U,f)};case 3:var t=e[1],c=e[2];return function(Y,L,U){return u(Y,L,U,t,c)};case 4:var a=e[1],b=e[2],I=e[3];return function(Y,L,U){return u(Y,L,U,a,b,I)};default:throw Error("unsupported number of parameters, expected [2-4], got "+e.length)}}function Le(e,u,f){for(;Pe(u)&&u.h!=4;){var t=u.i,c=f[t];if(c){if(Array.isArray(c)&&(c=f[t]=yn(c)),!c(u,e,t)){t=u,c=e;var a=t.l;Ie(t),Vn(t,c,a)}}else t=u,c=e,a=t.l,Ie(t),Vn(t,c,a)}return e}function en(e,u){var f=new ve;if(u(e,f),e=f.i+f.g.length(),e===0)f=new Uint8Array(0);else{e=new Uint8Array(e);for(var t=f.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=f.g,c=t.h,c!==0&&(e.set(t.g.subarray(0,c),u),t.h=0),f.h=[e],f=e}return f}function On(e,u,f){if(cn.length){var t=cn.pop();e&&(xe(t.g,e),t.i=-1,t.h=-1),e=t}else e=new je(e);try{return f(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>cn.length&&cn.push(e)}}function nn(e,u,f){if(u=it(u,f),u!=null){Ot(e.g,8*f+5),e=e.g;var t=u;t=(f=0>t?1:0)?-t:t,t===0?0<1/t?_t=Ze=0:(Ze=0,_t=2147483648):isNaN(t)?(Ze=0,_t=2147483647):34028234663852886e22<t?(Ze=0,_t=(f<<31|2139095040)>>>0):11754943508222875e-54>t?(t=Math.round(t/Math.pow(2,-149)),Ze=0,_t=(f<<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,_t=(f<<31|u+127<<23|t&8388607)>>>0),f=_t,Xe(e,f>>>0&255),Xe(e,f>>>8&255),Xe(e,f>>>16&255),Xe(e,f>>>24&255)}}function Ne(e,u,f){return e.h!==5?!1:(St(u,f,e.g.o()),!0)}function Zn(e,u,f){return e.h!==5&&e.h!==2?!1:(u=ut(u,f),e.h==2?_e(e,At.prototype.o,u):u.push(e.g.o()),!0)}function Sn(e,u,f){return e.h!==0?!1:(St(u,f,jt(e.g)),!0)}function Be(e,u,f){return e.h!==0?!1:(St(u,f,e.g.j()),!0)}function kn(e,u,f){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(dn)(a=Nn)||(a=Nn=new TextDecoder("utf-8",{fatal:!1})),a=a.decode(e.subarray(c,c+t));else{t=c+t;for(var b=[],I=null,Y,L,U;c<t;)Y=e[c++],128>Y?b.push(Y):224>Y?c>=t?b.push(65533):(L=e[c++],194>Y||(L&192)!==128?(c--,b.push(65533)):b.push((Y&31)<<6|L&63)):240>Y?c>=t-1?b.push(65533):(L=e[c++],(L&192)!==128||Y===224&&160>L||Y===237&&160<=L||((a=e[c++])&192)!==128?(c--,b.push(65533)):b.push((Y&15)<<12|(L&63)<<6|a&63)):244>=Y?c>=t-2?b.push(65533):(L=e[c++],(L&192)!==128||(Y<<28)+(L-144)>>30!==0||((a=e[c++])&192)!==128||((U=e[c++])&192)!==128?(c--,b.push(65533)):(Y=(Y&7)<<18|(L&63)<<12|(a&63)<<6|U&63,Y-=65536,b.push((Y>>10&1023)+55296,(Y&1023)+56320))):b.push(65533),8192<=b.length&&(I=xn(I,b),b.length=0);a=xn(I,b)}return St(u,f,a),!0}function rn(e,u,f,t,c){if(e.h!==2)return!1;e=ln(e,new t,c);var a=a===void 0?!1:a;return u.g||(u.g={}),t=e&&tn(e),u.g[f]=e,St(u,f,t,a),!0}function vn(e,u,f,t,c){return e.h!==2?!1:(e=ln(e,new t,c),qe(u,f,e,t,void 0),!0)}function Tn(e,u,f){return e.h!==0&&e.h!==2?!1:(u=ut(u,f),e.h==2?_e(e,At.prototype.j,u):u.push(e.g.j()),!0)}function An(e,u,f){return e.h!==0?!1:(St(u,f,jt(e.g)),!0)}function un(e){ee.call(this,e,-1,Qn)}var wn;pt(un,ee),un.prototype.getRows=function(){return it(this,1)},un.prototype.getCols=function(){return it(this,2)},un.prototype.getPackedDataList=function(){return Pt(this)},un.prototype.getLayout=function(){return ae(this,4,0)};function _n(e,u){return Le(e,u,wn||(wn={1:Be,2:Be,3:Zn,4:An}))}var Qn=[3];function Fn(e){ee.call(this,e)}var Hn;pt(Fn,ee);function m(e,u){var f=it(e,1);if(f!=null&&f!=null){Ot(u.g,8);var t=u.g;if(0<=f)Ot(t,f);else{for(var c=0;9>c;c++)Xe(t,f&127|128),f>>=7;Xe(t,1)}}nn(u,e,2),t=it(e,3),t!=null&&Ge(u,3,Cn(t)),t=it(e,4),t!=null&&Ge(u,4,Cn(t)),fn(e,u)}function W(e,u){return Le(e,u,Hn||(Hn={1:Be,2:Ne,3:kn,4:kn}))}function V(e){ee.call(this,e,-1,ot)}var k;pt(V,ee),V.prototype.addClassification=function(e,u){return qe(this,1,e,Fn,u),this};function z(e,u){return Le(e,u,k||(k={1:[vn,Fn,W]}))}var ot=[1];function O(e){ee.call(this,e)}var rt;pt(O,ee);function bt(e,u){nn(u,e,1),nn(u,e,2),nn(u,e,3),nn(u,e,4),nn(u,e,5),fn(e,u)}function Rt(e,u){return Le(e,u,rt||(rt={1:Ne,2:Ne,3:Ne,4:Ne,5:Ne}))}function Ut(e){ee.call(this,e,-1,Et)}var Nt;pt(Ut,ee);function $t(e,u){return Le(e,u,Nt||(Nt={1:[vn,O,Rt]}))}var Et=[1];function Tt(e){ee.call(this,e)}var kt;pt(Tt,ee);function Qt(e,u){nn(u,e,1),nn(u,e,2),nn(u,e,3),nn(u,e,4),nn(u,e,5);var f=it(e,6);if(f!=null&&f!=null){Ot(u.g,48);var t=u.g,c=f;f=0>c,c=Math.abs(c);var a=c>>>0;for(c=Math.floor((c-a)/4294967296),c>>>=0,f&&(c=~c>>>0,a=(~a>>>0)+1,4294967295<a&&(a=0,c++,4294967295<c&&(c=0))),_t=a,Ze=c,f=_t,a=Ze;0<a||127<f;)Xe(t,f&127|128),f=(f>>>7|a<<25)>>>0,a>>>=7;Xe(t,f)}fn(e,u)}function ue(e,u){return Le(e,u,kt||(kt={1:Ne,2:Ne,3:Ne,4:Ne,5:Ne,6:Sn}))}function pe(e){ee.call(this,e,-1,h)}var ge;pt(pe,ee),pe.prototype.getVertexType=function(){return ae(this,1,0)},pe.prototype.getPrimitiveType=function(){return ae(this,2,0)},pe.prototype.getVertexBufferList=function(){return Pt(this)},pe.prototype.getIndexBufferList=function(){return ut(this,4)};function Je(e,u){return Le(e,u,ge||(ge={1:An,2:An,3:Zn,4:Tn}))}var h=[3,4];function y(e){ee.call(this,e)}var v;pt(y,ee),y.prototype.getMesh=function(){return me(this,pe,1)},y.prototype.getPoseTransformMatrix=function(){return me(this,un,2)};function C(e,u){return Le(e,u,v||(v={1:[rn,pe,Je],2:[rn,un,_n]}))}var A=[[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]],lt=[[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(E(A),E(_),E(M),E(q),E(lt),E(s));function R(e,u,f){if(f=e.createShader(f===0?e.VERTEX_SHADER:e.FRAGMENT_SHADER),e.shaderSource(f,u),e.compileShader(f),!e.getShaderParameter(f,e.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
38
37
|
|
|
39
|
-
`+e.getShaderInfoLog(f));return f}function
|
|
38
|
+
`+e.getShaderInfoLog(f));return f}function F(e){return He(e,Fn,1).map(function(u){return{index:ae(u,1,0),score:ce(u,2),label:it(u,3)!=null?ae(u,3,""):void 0,displayName:it(u,4)!=null?ae(u,4,""):void 0}})}function N(e){return{x:ce(e,1),y:ce(e,2),z:ce(e,3),visibility:it(e,4)!=null?ce(e,4):void 0}}function K(e){return He(On(e,Ut,$t),O,1).map(N)}function B(e,u){this.h=e,this.g=u,this.l=0}function nt(e,u,f){return $(e,u),typeof e.g.canvas.transferToImageBitmap=="function"?Promise.resolve(e.g.canvas.transferToImageBitmap()):f?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 f=e.g;if(e.m===void 0){var t=R(f,`
|
|
40
39
|
attribute vec2 aVertex;
|
|
41
40
|
attribute vec2 aTex;
|
|
42
41
|
varying vec2 vTex;
|
|
43
42
|
void main(void) {
|
|
44
43
|
gl_Position = vec4(aVertex, 0.0, 1.0);
|
|
45
44
|
vTex = aTex;
|
|
46
|
-
}`,0),
|
|
45
|
+
}`,0),c=R(f,`
|
|
47
46
|
precision mediump float;
|
|
48
47
|
varying vec2 vTex;
|
|
49
48
|
uniform sampler2D sampler0;
|
|
50
49
|
void main(){
|
|
51
50
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
52
|
-
}`,1),a=f.createProgram();if(f.attachShader(a,t),f.attachShader(a,
|
|
51
|
+
}`,1),a=f.createProgram();if(f.attachShader(a,t),f.attachShader(a,c),f.linkProgram(a),!f.getProgramParameter(a,f.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
53
52
|
|
|
54
|
-
`+f.getProgramInfoLog(a));t=e.m=a,f.useProgram(t),u=f.getUniformLocation(t,"sampler0"),e.j={I:f.getAttribLocation(t,"aVertex"),H:f.getAttribLocation(t,"aTex"),ca:u},e.s=f.createBuffer(),f.bindBuffer(f.ARRAY_BUFFER,e.s),f.enableVertexAttribArray(e.j.I),f.vertexAttribPointer(e.j.I,2,f.FLOAT,!1,0,0),f.bufferData(f.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),f.STATIC_DRAW),f.bindBuffer(f.ARRAY_BUFFER,null),e.o=f.createBuffer(),f.bindBuffer(f.ARRAY_BUFFER,e.o),f.enableVertexAttribArray(e.j.H),f.vertexAttribPointer(e.j.H,2,f.FLOAT,!1,0,0),f.bufferData(f.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),f.STATIC_DRAW),f.bindBuffer(f.ARRAY_BUFFER,null),f.uniform1i(u,0)}t=e.j,f.useProgram(e.m),f.canvas.width=c.width,f.canvas.height=c.height,f.viewport(0,0,c.width,c.height),f.activeTexture(f.TEXTURE0),e.h.bindTexture2d(c.glName),f.enableVertexAttribArray(t.I),f.bindBuffer(f.ARRAY_BUFFER,e.s),f.vertexAttribPointer(t.I,2,f.FLOAT,!1,0,0),f.enableVertexAttribArray(t.H),f.bindBuffer(f.ARRAY_BUFFER,e.o),f.vertexAttribPointer(t.H,2,f.FLOAT,!1,0,0),f.bindFramebuffer(f.DRAW_FRAMEBUFFER?f.DRAW_FRAMEBUFFER:f.FRAMEBUFFER,null),f.clearColor(0,0,0,0),f.clear(f.COLOR_BUFFER_BIT),f.colorMask(!0,!0,!0,!0),f.drawArrays(f.TRIANGLE_FAN,0,4),f.disableVertexAttribArray(t.I),f.disableVertexAttribArray(t.H),f.bindBuffer(f.ARRAY_BUFFER,null),e.h.bindTexture2d(0)}function yt(e){this.g=e}var Gt=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 Mt(e,c){return c+e}function St(e,c){window[e]=c}function ft(e){var c=document.createElement("script");return c.setAttribute("src",e),c.setAttribute("crossorigin","anonymous"),new Promise(function(f){c.addEventListener("load",function(){f()},!1),c.addEventListener("error",function(){f()},!1),document.body.appendChild(c)})}function Xt(){return gt(function(e){switch(e.g){case 1:return e.m=2,_(e,WebAssembly.instantiate(Gt),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 Yt(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||Mt,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.S=c,e.options){c=Y(Object.keys(e.options));for(var f=c.next();!f.done;f=c.next()){f=f.value;var t=e.options[f].default;t!==void 0&&(this.j[f]=typeof t=="function"?t():t)}}}o=Yt.prototype,o.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function Ft(e){var c,f,t,u,a,b,S,L,H,K,j;return gt(function(D){switch(D.g){case 1:return e.R?(c=e.g.files===void 0?[]:typeof e.g.files=="function"?e.g.files(e.j):e.g.files,_(D,Xt(),2)):D.return();case 2:if(f=D.h,typeof window=="object")return St("createMediapipeSolutionsWasm",{locateFile:e.locateFile}),St("createMediapipeSolutionsPackedAssets",{locateFile:e.locateFile}),b=c.filter(function($){return $.data!==void 0}),S=c.filter(function($){return $.data===void 0}),L=Promise.all(b.map(function($){var ut=v(e,$.url);if($.path!==void 0){var mt=$.path;ut=ut.then(function(pt){return e.overrideFile(mt,pt),Promise.resolve(pt)})}return ut})),H=Promise.all(S.map(function($){return $.simd===void 0||$.simd&&f||!$.simd&&!f?ft(e.locateFile($.url,e.S)):Promise.resolve()})).then(function(){var $,ut,mt;return gt(function(pt){if(pt.g==1)return $=window.createMediapipeSolutionsWasm,ut=window.createMediapipeSolutionsPackedAssets,mt=e,_(pt,$(ut),2);mt.h=pt.h,pt.g=0})}),K=function(){return gt(function($){return e.g.graph&&e.g.graph.url?$=_($,v(e,e.g.graph.url),0):($.g=0,$=void 0),$})}(),_(D,Promise.all([H,L,K]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return t=c.filter(function($){return $.simd===void 0||$.simd&&f||!$.simd&&!f}).map(function($){return e.locateFile($.url,e.S)}),importScripts.apply(null,k(t)),u=e,_(D,createMediapipeSolutionsWasm(Module),6);case 6:u.h=D.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),D.g=4;break;case 7:if(e.l=document.createElement("canvas"),j=e.l.getContext("webgl2",{}),!j&&(j=e.l.getContext("webgl",{}),!j))return alert("Failed to create WebGL canvas context when passing video frame."),D.return();e.D=j,e.h.canvas=e.l,e.h.createContext(e.l,!0,!0,{});case 4:e.i=new e.h.SolutionWasm,e.R=!1,D.g=0}})}function Ct(e){var c,f,t,u,a,b,S,L;return gt(function(H){if(H.g==1){if(e.g.graph&&e.g.graph.url&&e.P===e.g.graph.url)return H.return();if(e.o=!0,!e.g.graph||!e.g.graph.url){H.g=2;return}return e.P=e.g.graph.url,_(H,v(e,e.g.graph.url),3)}for(H.g!=2&&(c=H.h,e.i.loadGraph(c)),f=Y(Object.keys(e.B)),t=f.next();!t.done;t=f.next())u=t.value,e.i.overrideFile(u,e.B[u]);if(e.B={},e.g.listeners)for(a=Y(e.g.listeners),b=a.next();!b.done;b=a.next())S=b.value,J(e,S);L=e.j,e.j={},e.setOptions(L),H.g=0})}o.reset=function(){var e=this;return gt(function(c){e.i&&(e.i.reset(),e.m={},e.s={}),c.g=0})},o.setOptions=function(e,c){var f=this;if(c=c||this.g.options){for(var t=[],u=[],a={},b=Y(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=c[L],S!==void 0&&(S.onChange&&(a.K=S.onChange,a.L=e[L],t.push(function(H){return function(){var K;return gt(function(j){if(j.g==1)return _(j,H.K(H.L),2);K=j.h,K===!0&&(f.o=!0),j.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),u.push(S))))}(t.length!==0||u.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(u),this.v=(this.v===void 0?[]:this.v).concat(t))}};function l(e){var c,f,t,u,a,b,S;return gt(function(L){switch(L.g){case 1:if(!e.o)return L.return();if(!e.v){L.g=2;break}c=Y(e.v),f=c.next();case 3:if(f.done){L.g=5;break}return t=f.value,_(L,t(),4);case 4:f=c.next(),L.g=3;break;case 5:e.v=void 0;case 2:if(e.A){for(u=new e.h.GraphOptionChangeRequestList,a=Y(e.A),b=a.next();!b.done;b=a.next())S=b.value,u.push_back(S);e.i.changeOptions(u),u.delete(),e.A=void 0}e.o=!1,L.g=0}})}o.initialize=function(){var e=this;return gt(function(c){return c.g==1?_(c,Ft(e),2):c.g!=3?_(c,Ct(e),3):_(c,l(e),0)})};function v(e,c){var f,t;return gt(function(u){return c in e.F?u.return(e.F[c]):(f=e.locateFile(c,""),t=fetch(f).then(function(a){return a.arrayBuffer()}),e.F[c]=t,u.return(t))})}o.overrideFile=function(e,c){this.i?this.i.overrideFile(e,c):this.B[e]=c},o.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},o.send=function(e,c){var f=this,t,u,a,b,S,L,H,K,j;return gt(function(D){switch(D.g){case 1:return f.g.inputs?(t=1e3*(c==null?performance.now():c),_(D,f.C,2)):D.return();case 2:return _(D,f.initialize(),3);case 3:for(u=new f.h.PacketDataList,a=Y(Object.keys(e)),b=a.next();!b.done;b=a.next())if(S=b.value,L=f.g.inputs[S]){t:{var $=e[S];switch(L.type){case"video":var ut=f.m[L.stream];if(ut||(ut=new U(f.h,f.D),f.m[L.stream]=ut),ut.l===0&&(ut.l=ut.h.createTexture()),typeof HTMLVideoElement<"u"&&$ instanceof HTMLVideoElement)var mt=$.videoWidth,pt=$.videoHeight;else typeof HTMLImageElement<"u"&&$ instanceof HTMLImageElement?(mt=$.naturalWidth,pt=$.naturalHeight):(mt=$.width,pt=$.height);pt={glName:ut.l,width:mt,height:pt},mt=ut.g,mt.canvas.width=pt.width,mt.canvas.height=pt.height,mt.activeTexture(mt.TEXTURE0),ut.h.bindTexture2d(ut.l),mt.texImage2D(mt.TEXTURE_2D,0,mt.RGBA,mt.RGBA,mt.UNSIGNED_BYTE,$),ut.h.bindTexture2d(0),ut=pt;break t;case"detections":for(ut=f.m[L.stream],ut||(ut=new yt(f.h),f.m[L.stream]=ut),ut.data||(ut.data=new ut.g.DetectionListData),ut.data.reset($.length),pt=0;pt<$.length;++pt){mt=$[pt];var vt=ut.data,Zt=vt.setBoundingBox,jt=pt,se=mt.T,le=new wt;if(Tt(le,1,se.X),Tt(le,2,se.Y),Tt(le,3,se.height),Tt(le,4,se.width),Tt(le,5,se.rotation),Tt(le,6,se.W),se=en(le,Dt),Zt.call(vt,jt,se),mt.O)for(vt=0;vt<mt.O.length;++vt){le=mt.O[vt];var Ke=!!le.visibility;Zt=ut.data,jt=Zt.addNormalizedLandmark,se=pt,le=Object.assign(Object.assign({},le),{visibility:Ke?le.visibility:0}),Ke=new z,Tt(Ke,1,le.x),Tt(Ke,2,le.y),Tt(Ke,3,le.z),le.visibility&&Tt(Ke,4,le.visibility),le=en(Ke,bt),jt.call(Zt,se,le)}if(mt.M)for(vt=0;vt<mt.M.length;++vt)Zt=ut.data,jt=Zt.addClassification,se=pt,le=mt.M[vt],Ke=new wn,Tt(Ke,2,le.score),le.index&&Tt(Ke,1,le.index),le.label&&Tt(Ke,3,le.label),le.displayName&&Tt(Ke,4,le.displayName),le=en(Ke,p),jt.call(Zt,se,le)}ut=ut.data;break t;default:ut={}}}switch(H=ut,K=L.stream,L.type){case"video":u.pushTexture2d(Object.assign(Object.assign({},H),{stream:K,timestamp:t}));break;case"detections":j=H,j.stream=K,j.timestamp=t,u.pushDetectionList(j);break;default:throw Error("Unknown input config type: '"+L.type+"'")}}return f.i.send(u),_(D,f.C,4);case 4:u.delete(),D.g=0}})};function x(e,c,f){var t,u,a,b,S,L,H,K,j,D,$,ut,mt,pt;return gt(function(vt){switch(vt.g){case 1:if(!f)return vt.return(c);for(t={},u=0,a=Y(Object.keys(f)),b=a.next();!b.done;b=a.next())S=b.value,L=f[S],typeof L!="string"&&L.type==="texture"&&c[L.stream]!==void 0&&++u;1<u&&(e.G=!1),H=Y(Object.keys(f)),b=H.next();case 2:if(b.done){vt.g=4;break}if(K=b.value,j=f[K],typeof j=="string")return mt=t,pt=K,_(vt,T(e,K,c[j]),14);if(D=c[j.stream],j.type==="detection_list"){if(D){for(var Zt=D.getRectList(),jt=D.getLandmarksList(),se=D.getClassificationsList(),le=[],Ke=0;Ke<Zt.size();++Ke){var Rn=zn(Zt.get(Ke),wt,ce);Rn={T:{X:ue(Rn,1),Y:ue(Rn,2),height:ue(Rn,3),width:ue(Rn,4),rotation:ue(Rn,5,0),W:ae(Rn,6,0)},O:A(jt.get(Ke)),M:w(zn(se.get(Ke),W,P))},le.push(Rn)}Zt=le}else Zt=[];t[K]=Zt,vt.g=7;break}if(j.type==="proto_list"){if(D){for(Zt=Array(D.size()),jt=0;jt<D.size();jt++)Zt[jt]=D.get(jt);D.delete()}else Zt=[];t[K]=Zt,vt.g=7;break}if(D===void 0){vt.g=3;break}if(j.type==="float_list"){t[K]=D,vt.g=7;break}if(j.type==="proto"){t[K]=D,vt.g=7;break}if(j.type!=="texture")throw Error("Unknown output config type: '"+j.type+"'");return $=e.s[K],$||($=new U(e.h,e.D),e.s[K]=$),_(vt,rt($,D,e.G),13);case 13:ut=vt.h,t[K]=ut;case 7:j.transform&&t[K]&&(t[K]=j.transform(t[K])),vt.g=3;break;case 14:mt[pt]=vt.h;case 3:b=H.next(),vt.g=2;break;case 4:return vt.return(t)}})}function T(e,c,f){var t;return gt(function(u){return typeof f=="number"||f instanceof Uint8Array||f instanceof e.h.Uint8BlobList?u.return(f):f instanceof e.h.Texture2dDataOut?(t=e.s[c],t||(t=new U(e.h,e.D),e.s[c]=t),u.return(rt(t,f,e.G))):u.return(void 0)})}function J(e,c){for(var f=c.name||"$",t=[].concat(k(c.wants)),u=new e.h.StringList,a=Y(c.wants),b=a.next();!b.done;b=a.next())u.push_back(b.value);a=e.h.PacketListener.implement({onResults:function(S){for(var L={},H=0;H<c.wants.length;++H)L[t[H]]=S.get(H);var K=e.listeners[f];K&&(e.C=x(e,L,c.outs).then(function(j){j=K(j);for(var D=0;D<c.wants.length;++D){var $=L[t[D]];typeof $=="object"&&$.hasOwnProperty&&$.hasOwnProperty("delete")&&$.delete()}j&&(e.C=j)}))}}),e.i.attachMultiListener(u,a),u.delete()}o.onResults=function(e,c){this.listeners[c||"$"]=e},Jt("Solution",Yt),Jt("OptionType",{BOOL:0,NUMBER:1,Z:2,0:"BOOL",1:"NUMBER",2:"STRING"});function i(e){return e.map(d)}function d(e){e=zn(e,g,C);var c=e.getMesh();if(!c)return e;var f=new Float32Array(c.getVertexBufferList());c.getVertexBufferList=function(){return f};var t=new Uint32Array(c.getIndexBufferList());return c.getIndexBufferList=function(){return t},e}function Z(e){var c=this;e=e||{},this.g=new Yt({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:i}}}],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(f){var t,u,a,b;return gt(function(S){if(S.g==1){switch(t="",f){case 1:t="pose_landmark_full.tflite";break;case 2:t="pose_landmark_heavy.tflite";break;default:t="pose_landmark_lite.tflite"}return u="third_party/mediapipe/modules/pose_landmark/"+t,a=c.g.locateFile(t,""),_(S,fetch(a),3)}return S.g!=2?_(S,S.h.arrayBuffer(),2):(b=S.h,c.g.overrideFile(u,b),_(S,c.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"}}}})}o=Z.prototype,o.close=function(){return this.g.close(),Promise.resolve()},o.onResults=function(e){this.g.onResults(e)},o.initialize=function(){var e=this;return gt(function(c){return _(c,e.g.initialize(),0)})},o.reset=function(){this.g.reset()},o.send=function(e){var c=this;return gt(function(f){return _(f,c.g.send(e),0)})},o.setOptions=function(e){this.g.setOptions(e)},Jt("Holistic",Z),Jt("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}}),Jt("FACEMESH_LIPS",M),Jt("FACEMESH_LEFT_EYE",Q),Jt("FACEMESH_LEFT_EYEBROW",B),Jt("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Jt("FACEMESH_RIGHT_EYE",tt),Jt("FACEMESH_RIGHT_EYEBROW",ct),Jt("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Jt("FACEMESH_FACE_OVAL",s),Jt("FACEMESH_CONTOURS",X),Jt("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]]),Jt("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]]),Jt("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]]),Jt("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}),Jt("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}),Jt("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}),Jt("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Jt("matrixDataToMatrix",function(e){for(var c=e.getCols(),f=e.getRows(),t=e.getPackedDataList(),u=[],a=0;a<f;a++)u.push(Array(c));for(a=0;a<f;a++)for(var b=0;b<c;b++){var S=e.getLayout()===1?a*c+b:b*f+a;u[a][b]=t[S]}return u}),Jt("VERSION","0.5.1635989137")}).call(bi);const yi={};(function(){var o;function n(i){var d=0;return function(){return d<i.length?{done:!1,value:i[d++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(i,d,Z){return i==Array.prototype||i==Object.prototype||(i[d]=Z.value),i};function m(i){i=[typeof globalThis=="object"&&globalThis,i,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var d=0;d<i.length;++d){var Z=i[d];if(Z&&Z.Math==Math)return Z}throw Error("Cannot find global object")}var y=m(this);function I(i,d){if(d)t:{var Z=y;i=i.split(".");for(var e=0;e<i.length-1;e++){var c=i[e];if(!(c in Z))break t;Z=Z[c]}i=i[i.length-1],e=Z[i],d=d(e),d!=e&&d!=null&&r(Z,i,{configurable:!0,writable:!0,value:d})}}I("Symbol",function(i){function d(f){if(this instanceof d)throw new TypeError("Symbol is not a constructor");return new Z(e+(f||"")+"_"+c++,f)}function Z(f,t){this.g=f,r(this,"description",{configurable:!0,writable:!0,value:t})}if(i)return i;Z.prototype.toString=function(){return this.g};var e="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",c=0;return d}),I("Symbol.iterator",function(i){if(i)return i;i=Symbol("Symbol.iterator");for(var d="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),Z=0;Z<d.length;Z++){var e=y[d[Z]];typeof e=="function"&&typeof e.prototype[i]!="function"&&r(e.prototype,i,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return i});function F(i){return i={next:i},i[Symbol.iterator]=function(){return this},i}function Y(i){var d=typeof Symbol<"u"&&Symbol.iterator&&i[Symbol.iterator];return d?d.call(i):{next:n(i)}}function k(i){if(!(i instanceof Array)){i=Y(i);for(var d,Z=[];!(d=i.next()).done;)Z.push(d.value);i=Z}return i}var et=typeof Object.create=="function"?Object.create:function(i){function d(){}return d.prototype=i,new d},O;if(typeof Object.setPrototypeOf=="function")O=Object.setPrototypeOf;else{var st;t:{var xt={a:!0},Vt={};try{Vt.__proto__=xt,st=Vt.a;break t}catch{}st=!1}O=st?function(i,d){if(i.__proto__=d,i.__proto__!==d)throw new TypeError(i+" is not extensible");return i}:null}var dt=O;function ht(i,d){if(i.prototype=et(d.prototype),i.prototype.constructor=i,dt)dt(i,d);else for(var Z in d)if(Z!="prototype")if(Object.defineProperties){var e=Object.getOwnPropertyDescriptor(d,Z);e&&Object.defineProperty(i,Z,e)}else i[Z]=d[Z];i.na=d.prototype}function Ht(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function Lt(i){if(i.l)throw new TypeError("Generator is already running");i.l=!0}Ht.prototype.s=function(i){this.h=i};function At(i,d){i.j={da:d,ea:!0},i.g=i.o||i.u}Ht.prototype.return=function(i){this.j={return:i},this.g=this.u};function _(i,d,Z){return i.g=Z,{value:d}}function Ee(i){this.g=new Ht,this.h=i}function an(i,d){Lt(i.g);var Z=i.g.i;return Z?We(i,"return"in Z?Z.return:function(e){return{value:e,done:!0}},d,i.g.return):(i.g.return(d),$t(i))}function We(i,d,Z,e){try{var c=d.call(i.g.i,Z);if(!(c instanceof Object))throw new TypeError("Iterator result "+c+" is not an object");if(!c.done)return i.g.l=!1,c;var f=c.value}catch(t){return i.g.i=null,At(i.g,t),$t(i)}return i.g.i=null,e.call(i.g,f),$t(i)}function $t(i){for(;i.g.g;)try{var d=i.h(i.g);if(d)return i.g.l=!1,{value:d.value,done:!1}}catch(Z){i.g.h=void 0,At(i.g,Z)}if(i.g.l=!1,i.g.j){if(d=i.g.j,i.g.j=null,d.ea)throw d.da;return{value:d.return,done:!0}}return{value:void 0,done:!0}}function An(i){this.next=function(d){return Lt(i.g),i.g.i?d=We(i,i.g.i.next,d,i.g.s):(i.g.s(d),d=$t(i)),d},this.throw=function(d){return Lt(i.g),i.g.i?d=We(i,i.g.i.throw,d,i.g.s):(At(i.g,d),d=$t(i)),d},this.return=function(d){return an(i,d)},this[Symbol.iterator]=function(){return this}}function de(i){function d(e){return i.next(e)}function Z(e){return i.throw(e)}return new Promise(function(e,c){function f(t){t.done?e(t.value):Promise.resolve(t.value).then(d,Z).then(f,c)}f(i.next())})}function gt(i){return de(new An(new Ee(i)))}I("Promise",function(i){function d(t){this.h=0,this.i=void 0,this.g=[],this.s=!1;var u=this.j();try{t(u.resolve,u.reject)}catch(a){u.reject(a)}}function Z(){this.g=null}function e(t){return t instanceof d?t:new d(function(u){u(t)})}if(i)return i;Z.prototype.h=function(t){if(this.g==null){this.g=[];var u=this;this.i(function(){u.l()})}this.g.push(t)};var c=y.setTimeout;Z.prototype.i=function(t){c(t,0)},Z.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var u=0;u<t.length;++u){var a=t[u];t[u]=null;try{a()}catch(b){this.j(b)}}}this.g=null},Z.prototype.j=function(t){this.i(function(){throw t})},d.prototype.j=function(){function t(b){return function(S){a||(a=!0,b.call(u,S))}}var u=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 u=t!=null;break t;case"function":u=!0;break t;default:u=!1}u?this.A(t):this.o(t)}},d.prototype.A=function(t){var u=void 0;try{u=t.then}catch(a){this.l(a);return}typeof u=="function"?this.I(u,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,u){if(this.h!=0)throw Error("Cannot settle("+t+", "+u+"): Promise already settled in state"+this.h);this.h=t,this.i=u,this.h===2&&this.G(),this.B()},d.prototype.G=function(){var t=this;c(function(){if(t.C()){var u=y.console;typeof u<"u"&&u.error(t.i)}},1)},d.prototype.C=function(){if(this.s)return!1;var t=y.CustomEvent,u=y.Event,a=y.dispatchEvent;return typeof a>"u"?!0:(typeof t=="function"?t=new t("unhandledrejection",{cancelable:!0}):typeof u=="function"?t=new u("unhandledrejection",{cancelable:!0}):(t=y.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)f.h(this.g[t]);this.g=null}};var f=new Z;return d.prototype.H=function(t){var u=this.j();t.M(u.resolve,u.reject)},d.prototype.I=function(t,u){var a=this.j();try{t.call(u,a.resolve,a.reject)}catch(b){a.reject(b)}},d.prototype.then=function(t,u){function a(H,K){return typeof H=="function"?function(j){try{b(H(j))}catch(D){S(D)}}:K}var b,S,L=new d(function(H,K){b=H,S=K});return this.M(a(t,b),a(u,S)),L},d.prototype.catch=function(t){return this.then(void 0,t)},d.prototype.M=function(t,u){function a(){switch(b.h){case 1:t(b.i);break;case 2:u(b.i);break;default:throw Error("Unexpected state: "+b.h)}}var b=this;this.g==null?f.h(a):this.g.push(a),this.s=!0},d.resolve=e,d.reject=function(t){return new d(function(u,a){a(t)})},d.race=function(t){return new d(function(u,a){for(var b=Y(t),S=b.next();!S.done;S=b.next())e(S.value).M(u,a)})},d.all=function(t){var u=Y(t),a=u.next();return a.done?e([]):new d(function(b,S){function L(j){return function(D){H[j]=D,K--,K==0&&b(H)}}var H=[],K=0;do H.push(void 0),K++,e(a.value).M(L(H.length-1),S),a=u.next();while(!a.done)})},d});function pn(i,d){i instanceof String&&(i+="");var Z=0,e=!1,c={next:function(){if(!e&&Z<i.length){var f=Z++;return{value:d(f,i[f]),done:!1}}return e=!0,{done:!0,value:void 0}}};return c[Symbol.iterator]=function(){return c},c}var jn=typeof Object.assign=="function"?Object.assign:function(i,d){for(var Z=1;Z<arguments.length;Z++){var e=arguments[Z];if(e)for(var c in e)Object.prototype.hasOwnProperty.call(e,c)&&(i[c]=e[c])}return i};I("Object.assign",function(i){return i||jn}),I("Object.is",function(i){return i||function(d,Z){return d===Z?d!==0||1/d===1/Z:d!==d&&Z!==Z}}),I("Array.prototype.includes",function(i){return i||function(d,Z){var e=this;e instanceof String&&(e=String(e));var c=e.length;for(Z=Z||0,0>Z&&(Z=Math.max(Z+c,0));Z<c;Z++){var f=e[Z];if(f===d||Object.is(f,d))return!0}return!1}}),I("String.prototype.includes",function(i){return i||function(d,Z){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,Z||0)!==-1}}),I("Array.prototype.keys",function(i){return i||function(){return pn(this,function(d){return d})}});var Re=this||self;function Jt(i,d){i=i.split(".");var Z=Re;i[0]in Z||typeof Z.execScript>"u"||Z.execScript("var "+i[0]);for(var e;i.length&&(e=i.shift());)i.length||d===void 0?Z[e]&&Z[e]!==Object.prototype[e]?Z=Z[e]:Z=Z[e]={}:Z[e]=d}function Te(){throw Error("Invalid UTF8")}function on(i,d){return d=String.fromCharCode.apply(null,d),i==null?d:i+d}var Xn,Fn=typeof TextDecoder<"u",xn,Nn=typeof TextEncoder<"u",dn={},bn=null;function kn(i){var d;d===void 0&&(d=0),je(),d=dn[d];for(var Z=Array(Math.floor(i.length/3)),e=d[64]||"",c=0,f=0;c<i.length-2;c+=3){var t=i[c],u=i[c+1],a=i[c+2],b=d[t>>2];t=d[(t&3)<<4|u>>4],u=d[(u&15)<<2|a>>6],a=d[a&63],Z[f++]=b+t+u+a}switch(b=0,a=e,i.length-c){case 2:b=i[c+1],a=d[(b&15)<<2]||e;case 1:i=i[c],Z[f]=d[i>>2]+d[(i&3)<<4|b>>4]+a+e}return Z.join("")}function Hn(i){var d=i.length,Z=3*d/4;Z%3?Z=Math.floor(Z):"=.".indexOf(i[d-1])!=-1&&(Z="=.".indexOf(i[d-2])!=-1?Z-2:Z-1);var e=new Uint8Array(Z),c=0;return Oe(i,function(f){e[c++]=f}),c!==Z?e.subarray(0,c):e}function Oe(i,d){function Z(a){for(;e<i.length;){var b=i.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}je();for(var e=0;;){var c=Z(-1),f=Z(0),t=Z(64),u=Z(64);if(u===64&&c===-1)break;d(c<<2|f>>4),t!=64&&(d(f<<4&240|t>>2),u!=64&&d(t<<6&192|u))}}function je(){if(!bn){bn={};for(var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),d=["+/=","+/","-_=","-_.","-_"],Z=0;5>Z;Z++){var e=i.concat(d[Z].split(""));dn[Z]=e;for(var c=0;c<e.length;c++){var f=e[c];bn[f]===void 0&&(bn[f]=c)}}}}var In=typeof Uint8Array=="function";function Vn(i){return In&&i!=null&&i instanceof Uint8Array}var he;function Ye(i){if(this.L=i,i!==null&&i.length===0)throw Error("ByteString should be constructed with non-empty values")}var Pe=typeof Uint8Array.prototype.slice=="function",ne=0,Ve=0;function sn(i,d){if(i.constructor===Uint8Array)return i;if(i.constructor===ArrayBuffer)return new Uint8Array(i);if(i.constructor===Array)return new Uint8Array(i);if(i.constructor===String)return Hn(i);if(i.constructor===Ye)return!d&&(d=i.L)&&d.constructor===Uint8Array?d:(d=i.L,d=d==null||Vn(d)?d:typeof d=="string"?Hn(d):null,(i=i.L=d)?new Uint8Array(i):he||(he=new Uint8Array(0)));if(i instanceof Uint8Array)return new Uint8Array(i.buffer,i.byteOffset,i.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Me(i,d){return Error("Invalid wire type: "+i+" (at position "+d+")")}function Qt(){return Error("Failed to read varint, encoding is invalid.")}function Ze(i,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,i&&Ce(this,i)}function Ce(i,d){i.h=sn(d,i.v),i.j=0,i.i=i.h.length,i.g=i.j}Ze.prototype.reset=function(){this.g=this.j};function Bt(i){if(i.g>i.i)throw Error("Tried to read past the end of the data "+i.g+" > "+i.i)}function Ie(i){var d=i.h,Z=d[i.g],e=Z&127;if(128>Z)return i.g+=1,Bt(i),e;if(Z=d[i.g+1],e|=(Z&127)<<7,128>Z)return i.g+=2,Bt(i),e;if(Z=d[i.g+2],e|=(Z&127)<<14,128>Z)return i.g+=3,Bt(i),e;if(Z=d[i.g+3],e|=(Z&127)<<21,128>Z)return i.g+=4,Bt(i),e;if(Z=d[i.g+4],i.g+=5,e|=(Z&15)<<28,128>Z)return Bt(i),e;if(128<=d[i.g++]&&128<=d[i.g++]&&128<=d[i.g++]&&128<=d[i.g++]&&128<=d[i.g++])throw Qt();return Bt(i),e}var zt=[];function ye(){this.g=[]}ye.prototype.length=function(){return this.g.length},ye.prototype.end=function(){var i=this.g;return this.g=[],i};function we(i,d){for(;127<d;)i.g.push(d&127|128),d>>>=7;i.g.push(d)}function $e(i){var d={},Z=d.W===void 0?!1:d.W;this.l={v:d.v===void 0?!1:d.v},this.W=Z,d=this.l,zt.length?(Z=zt.pop(),d&&(Z.v=d.v),i&&Ce(Z,i),i=Z):i=new Ze(i,d),this.g=i,this.j=this.g.g,this.h=this.i=-1}$e.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};function Xe(i){var d=i.g;if(d.g==d.i)return!1;i.j=i.g.g;var Z=Ie(i.g)>>>0;if(d=Z>>>3,Z&=7,!(0<=Z&&5>=Z))throw Me(Z,i.j);if(1>d)throw Error("Invalid field number: "+d+" (at position "+i.j+")");return i.i=d,i.h=Z,!0}function Ot(i){switch(i.h){case 0:if(i.h!=0)Ot(i);else t:{i=i.g;for(var d=i.g,Z=d+10;d<Z;)if((i.h[d++]&128)===0){i.g=d,Bt(i);break t}throw Qt()}break;case 1:i=i.g,i.g+=8,Bt(i);break;case 2:i.h!=2?Ot(i):(d=Ie(i.g)>>>0,i=i.g,i.g+=d,Bt(i));break;case 5:i=i.g,i.g+=4,Bt(i);break;case 3:d=i.i;do{if(!Xe(i))throw Error("Unmatched start-group tag: stream EOF");if(i.h==4){if(i.i!=d)throw Error("Unmatched end-group tag");break}Ot(i)}while(1);break;default:throw Me(i.h,i.j)}}var ze=[];function _e(){this.i=[],this.h=0,this.g=new ye}function Se(i,d){d.length!==0&&(i.i.push(d),i.h+=d.length)}function Wn(i,d){if(d=d.ba){Se(i,i.g.end());for(var Z=0;Z<d.length;Z++)Se(i,d[Z])}}var ln=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Qe(i,d){Object.isFrozen(i)||(ln?i[ln]|=d:i.N!==void 0?i.N|=d:Object.defineProperties(i,{N:{value:d,configurable:!0,writable:!0,enumerable:!1}}))}function un(i){var d;return ln?d=i[ln]:d=i.N,d==null?0:d}function ve(i){return Qe(i,1),i}function Le(i){return Array.isArray(i)?!!(un(i)&2):!1}function Ge(i){if(!Array.isArray(i))throw Error("cannot mark non-array as immutable");Qe(i,2)}function re(i){return i!==null&&typeof i=="object"&&!Array.isArray(i)&&i.constructor===Object}var De=Object.freeze(ve([]));function te(i){if(Le(i.m))throw Error("Cannot mutate an immutable Message")}var Pt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function hn(i){return{value:i,configurable:!1,writable:!1,enumerable:!1}}function fe(i,d,Z){return d===-1?null:d>=i.i?i.g?i.g[d]:void 0:(Z===void 0?0:Z)&&i.g&&(Z=i.g[d],Z!=null)?Z:i.m[d+i.h]}function Nt(i,d,Z,e){e=e===void 0?!1:e,te(i),d<i.i&&!e?i.m[d+i.h]=Z:(i.g||(i.g=i.m[i.i+i.h]={}))[d]=Z}function Wt(i,d,Z,e){Z=Z===void 0?!0:Z,e=e===void 0?!1:e;var c=fe(i,d,e);return c==null&&(c=De),Le(i.m)?Z&&(Ge(c),Object.freeze(c)):(c===De||Le(c))&&(c=ve(c.slice()),Nt(i,d,c,e)),c}function ie(i,d,Z){return i=fe(i,d),i=i==null?i:+i,i==null?Z===void 0?0:Z:i}function Fe(i,d,Z,e){i.j||(i.j={});var c=Le(i.m),f=i.j[Z];if(!f){e=Wt(i,Z,!0,e===void 0?!1:e),f=[],c=c||Le(e);for(var t=0;t<e.length;t++)f[t]=new d(e[t]),c&&Ge(f[t].m);c&&(Ge(f),Object.freeze(f)),i.j[Z]=f}return f}function ee(i,d,Z,e,c){var f=f===void 0?!1:f;return te(i),f=Fe(i,Z,d,f),Z=e||new Z,i=Wt(i,d),c!=null?(f.splice(c,0,Z),i.splice(c,0,Z.m)):(f.push(Z),i.push(Z.m)),Z}function oe(i,d){return i=fe(i,d),i==null?0:i}function nt(i,d){return i=fe(i,d),i==null?"":i}function ot(i){switch(typeof i){case"number":return isFinite(i)?i:String(i);case"object":if(i&&!Array.isArray(i)){if(Vn(i))return kn(i);if(i instanceof Ye){var d=i.L;return d=d==null||typeof d=="string"?d:In&&d instanceof Uint8Array?kn(d):null,(i.L=d)||""}}}return i}function at(i){var d=ue;return d=d===void 0?Tt:d,ae(i,d)}function _t(i,d){if(i!=null){if(Array.isArray(i))i=ae(i,d);else if(re(i)){var Z={},e;for(e in i)Z[e]=_t(i[e],d);i=Z}else i=d(i);return i}}function ae(i,d){for(var Z=i.slice(),e=0;e<Z.length;e++)Z[e]=_t(Z[e],d);return Array.isArray(i)&&un(i)&1&&ve(Z),Z}function ue(i){return i&&typeof i=="object"&&i.toJSON?i.toJSON():(i=ot(i),Array.isArray(i)?at(i):i)}function Tt(i){return Vn(i)?new Uint8Array(i):i}function me(i,d,Z){i||(i=Ne),Ne=null;var e=this.constructor.h;i||(i=e?[e]:[]),this.h=(e?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=i;t:{if(e=this.m.length,i=e-1,e&&(e=this.m[i],re(e))){this.i=i-this.h,this.g=e;break t}d!==void 0&&-1<d?(this.i=Math.max(d,i+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE}if(Z)for(d=0;d<Z.length;d++)if(i=Z[d],i<this.i)i+=this.h,(e=this.m[i])?Array.isArray(e)&&ve(e):this.m[i]=De;else{e=this.g||(this.g=this.m[this.i+this.h]={});var c=e[i];c?Array.isArray(c)&&ve(c):e[i]=De}}me.prototype.toJSON=function(){return at(this.m)},me.prototype.toString=function(){return this.m.toString()};var Ne;function qe(){me.apply(this,arguments)}if(ht(qe,me),Pt){var tn={};Object.defineProperties(qe,(tn[Symbol.hasInstance]=hn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),tn))}function fn(i,d,Z){if(Z){var e={},c;for(c in Z){var f=Z[c],t=f.ha;t||(e.F=f.la||f.fa.P,f.aa?(e.U=Sn(f.aa),t=function(u){return function(a,b,S){return u.F(a,b,S,u.U)}}(e)):f.ca?(e.T=Be(f.X.g,f.ca),t=function(u){return function(a,b,S){return u.F(a,b,S,u.T)}}(e)):t=e.F,f.ha=t),t(d,i,f.X),e={F:e.F,U:e.U,T:e.T}}}Wn(d,i)}var yn=Symbol();function He(i,d,Z){return i[yn]||(i[yn]=function(e,c){return d(e,c,Z)})}function en(i){var d=i[yn];if(!d){var Z=p(i);d=function(e,c){return V(e,c,Z)},i[yn]=d}return d}function zn(i){var d=i.aa;if(d)return en(d);if(d=i.ka)return He(i.X.g,d,i.ca)}function nn(i){var d=zn(i),Z=i.X,e=i.fa.O;return d?function(c,f){return e(c,f,Z,d)}:function(c,f){return e(c,f,Z)}}function Je(i,d,Z,e,c,f){i=i();var t=0;for(i.length&&typeof i[0]!="number"&&(Z(d,i[0]),t++);t<i.length;){Z=i[t++];for(var u=t+1;u<i.length&&typeof i[u]!="number";)u++;var a=i[t++];switch(u-=t,u){case 0:e(d,Z,a);break;case 1:e(d,Z,a,i[t++]);break;case 2:c(d,Z,a,i[t++],i[t++]);break;case 3:u=i[t++];var b=i[t++],S=i[t++];Array.isArray(S)?c(d,Z,a,u,b,S):f(d,Z,a,u,b,S);break;case 4:f(d,Z,a,i[t++],i[t++],i[t++],i[t++]);break;default:throw Error("unexpected number of binary field arguments: "+u)}}return d}var Zn=Symbol();function Sn(i){var d=i[Zn];if(!d){var Z=cn(i);d=function(e,c){return E(e,c,Z)},i[Zn]=d}return d}function Be(i,d){var Z=i[Zn];return Z||(Z=function(e,c){return fn(e,c,d)},i[Zn]=Z),Z}var En=Symbol();function rn(i,d){i.push(d)}function vn(i,d,Z){i.push(d,Z.P)}function Yn(i,d,Z,e,c){var f=Sn(c),t=Z.P;i.push(d,function(u,a,b){return t(u,a,b,e,f)})}function Mn(i,d,Z,e,c,f){var t=Be(e,f),u=Z.P;i.push(d,function(a,b,S){return u(a,b,S,e,t)})}function cn(i){var d=i[En];return d||Je(i,i[En]=[],rn,vn,Yn,Mn)}var Tn=Symbol();function Dn(i,d){i[0]=d}function $n(i,d,Z,e){var c=Z.O;i[d]=e?function(f,t,u){return c(f,t,u,e)}:c}function wn(i,d,Z,e,c,f){var t=Z.O,u=en(c);i[d]=function(a,b,S){return t(a,b,S,e,u,f)}}function Cn(i,d,Z,e,c,f,t){var u=Z.O,a=He(e,c,f);i[d]=function(b,S,L){return u(b,S,L,e,a,t)}}function p(i){var d=i[Tn];return d||Je(i,i[Tn]={},Dn,$n,wn,Cn)}function V(i,d,Z){for(;Xe(d)&&d.h!=4;){var e=d.i,c=Z[e];if(!c){var f=Z[0];f&&(f=f[e])&&(c=Z[e]=nn(f))}if((!c||!c(d,i,e))&&(c=d,e=i,f=c.j,Ot(c),!c.W)){var t=c.g.h;c=c.g.g,c=f===c?he||(he=new Uint8Array(0)):Pe?t.slice(f,c):new Uint8Array(t.subarray(f,c)),(f=e.ba)?f.push(c):e.ba=[c]}}return i}function W(i,d,Z){if(ze.length){var e=ze.pop();i&&(Ce(e.g,i),e.i=-1,e.h=-1),i=e}else i=new $e(i);try{return V(new d,i,p(Z))}finally{d=i.g,d.h=null,d.j=0,d.i=0,d.g=0,d.v=!1,i.i=-1,i.h=-1,100>ze.length&&ze.push(i)}}function E(i,d,Z){for(var e=Z.length,c=e%2==1,f=c?1:0;f<e;f+=2)(0,Z[f+1])(d,i,Z[f]);fn(i,d,c?Z[0]:void 0)}function P(i,d){var Z=new _e;E(i,Z,cn(d)),Se(Z,Z.g.end()),i=new Uint8Array(Z.h),d=Z.i;for(var e=d.length,c=0,f=0;f<e;f++){var t=d[f];i.set(t,c),c+=t.length}return Z.i=[i],i}function lt(i,d){return{O:i,P:d}}var z=lt(function(i,d,Z){if(i.h!==5)return!1;i=i.g;var e=i.h[i.g],c=i.h[i.g+1],f=i.h[i.g+2],t=i.h[i.g+3];return i.g+=4,Bt(i),c=(e<<0|c<<8|f<<16|t<<24)>>>0,i=2*(c>>31)+1,e=c>>>23&255,c&=8388607,Nt(d,Z,e==255?c?NaN:1/0*i:e==0?i*Math.pow(2,-149)*c:i*Math.pow(2,e-150)*(c+Math.pow(2,23))),!0},function(i,d,Z){if(d=fe(d,Z),d!=null){we(i.g,8*Z+5),i=i.g;var e=d;e=(Z=0>e?1:0)?-e:e,e===0?0<1/e?ne=Ve=0:(Ve=0,ne=2147483648):isNaN(e)?(Ve=0,ne=2147483647):34028234663852886e22<e?(Ve=0,ne=(Z<<31|2139095040)>>>0):11754943508222875e-54>e?(e=Math.round(e/Math.pow(2,-149)),Ve=0,ne=(Z<<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,ne=(Z<<31|d+127<<23|e&8388607)>>>0),Z=ne,i.g.push(Z>>>0&255),i.g.push(Z>>>8&255),i.g.push(Z>>>16&255),i.g.push(Z>>>24&255)}}),it=lt(function(i,d,Z){if(i.h!==0)return!1;for(var e=i.g,c=128,f=0,t=i=0;4>t&&128<=c;t++)c=e.h[e.g++],Bt(e),f|=(c&127)<<7*t;if(128<=c&&(c=e.h[e.g++],Bt(e),f|=(c&127)<<28,i|=(c&127)>>4),128<=c)for(t=0;5>t&&128<=c;t++)c=e.h[e.g++],Bt(e),i|=(c&127)<<7*t+3;if(128>c)e=f>>>0,c=i>>>0,(i=c&2147483648)&&(e=~e+1>>>0,c=~c>>>0,e==0&&(c=c+1>>>0)),e=4294967296*c+(e>>>0);else throw Qt();return Nt(d,Z,i?-e:e),!0},function(i,d,Z){if(d=fe(d,Z),d!=null&&d!=null){we(i.g,8*Z),i=i.g;var e=d;for(Z=0>e,e=Math.abs(e),d=e>>>0,e=Math.floor((e-d)/4294967296),e>>>=0,Z&&(e=~e>>>0,d=(~d>>>0)+1,4294967295<d&&(d=0,e++,4294967295<e&&(e=0))),ne=d,Ve=e,Z=ne,d=Ve;0<d||127<Z;)i.g.push(Z&127|128),Z=(Z>>>7|d<<25)>>>0,d>>>=7;i.g.push(Z)}}),bt=lt(function(i,d,Z){return i.h!==0?!1:(Nt(d,Z,Ie(i.g)),!0)},function(i,d,Z){if(d=fe(d,Z),d!=null&&d!=null)if(we(i.g,8*Z),i=i.g,Z=d,0<=Z)we(i,Z);else{for(d=0;9>d;d++)i.g.push(Z&127|128),Z>>=7;i.g.push(1)}}),It=lt(function(i,d,Z){if(i.h!==2)return!1;var e=Ie(i.g)>>>0;i=i.g;var c=i.g;i.g+=e,Bt(i),i=i.h;var f;if(Fn)(f=Xn)||(f=Xn=new TextDecoder("utf-8",{fatal:!0})),f=f.decode(i.subarray(c,c+e));else{e=c+e;for(var t=[],u=null,a,b,S;c<e;)a=i[c++],128>a?t.push(a):224>a?c>=e?Te():(b=i[c++],194>a||(b&192)!==128?(c--,Te()):t.push((a&31)<<6|b&63)):240>a?c>=e-1?Te():(b=i[c++],(b&192)!==128||a===224&&160>b||a===237&&160<=b||((f=i[c++])&192)!==128?(c--,Te()):t.push((a&15)<<12|(b&63)<<6|f&63)):244>=a?c>=e-2?Te():(b=i[c++],(b&192)!==128||(a<<28)+(b-144)>>30!==0||((f=i[c++])&192)!==128||((S=i[c++])&192)!==128?(c--,Te()):(a=(a&7)<<18|(b&63)<<12|(f&63)<<6|S&63,a-=65536,t.push((a>>10&1023)+55296,(a&1023)+56320))):Te(),8192<=t.length&&(u=on(u,t),t.length=0);f=on(u,t)}return Nt(d,Z,f),!0},function(i,d,Z){if(d=fe(d,Z),d!=null){var e=!1;if(e=e===void 0?!1:e,Nn){if(e&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(d))throw Error("Found an unpaired surrogate");d=(xn||(xn=new TextEncoder)).encode(d)}else{for(var c=0,f=new Uint8Array(3*d.length),t=0;t<d.length;t++){var u=d.charCodeAt(t);if(128>u)f[c++]=u;else{if(2048>u)f[c++]=u>>6|192;else{if(55296<=u&&57343>=u){if(56319>=u&&t<d.length){var a=d.charCodeAt(++t);if(56320<=a&&57343>=a){u=1024*(u-55296)+a-56320+65536,f[c++]=u>>18|240,f[c++]=u>>12&63|128,f[c++]=u>>6&63|128,f[c++]=u&63|128;continue}else t--}if(e)throw Error("Found an unpaired surrogate");u=65533}f[c++]=u>>12|224,f[c++]=u>>6&63|128}f[c++]=u&63|128}}d=f.subarray(0,c)}we(i.g,8*Z+2),we(i.g,d.length),Se(i,i.g.end()),Se(i,d)}}),Ut=lt(function(i,d,Z,e,c){if(i.h!==2)return!1;d=ee(d,Z,e),Z=i.g.i,e=Ie(i.g)>>>0;var f=i.g.g+e,t=f-Z;if(0>=t&&(i.g.i=f,c(d,i),t=f-i.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 i.g.g=f,i.g.i=Z,!0},function(i,d,Z,e,c){if(d=Fe(d,e,Z),d!=null)for(e=0;e<d.length;e++){var f=i;we(f.g,8*Z+2);var t=f.g.end();Se(f,t),t.push(f.h),f=t,c(d[e],i),t=i;var u=f.pop();for(u=t.h+t.g.length()-u;127<u;)f.push(u&127|128),u>>>=7,t.h++;f.push(u),t.h++}});function kt(){qe.apply(this,arguments)}if(ht(kt,qe),Pt){var qt={};Object.defineProperties(kt,(qt[Symbol.hasInstance]=hn(Object[Symbol.hasInstance]),qt))}function Et(i){kt.call(this,i)}ht(Et,kt);function wt(){return[1,bt,2,z,3,It,4,It]}function Kt(i){kt.call(this,i,-1,ce)}ht(Kt,kt),Kt.prototype.addClassification=function(i,d){return ee(this,1,Et,i,d),this};function Dt(){return[1,Ut,Et,wt]}var ce=[1];function pe(i){kt.call(this,i)}ht(pe,kt);function ge(){return[1,z,2,z,3,z,4,z,5,z]}function ke(i){kt.call(this,i,-1,g)}ht(ke,kt);function h(){return[1,Ut,pe,ge]}var g=[1];function G(i){kt.call(this,i)}ht(G,kt);function C(){return[1,z,2,z,3,z,4,z,5,z,6,it]}var M=[[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]],Q=[[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]],B=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],tt=[[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(k(M),k(Q),k(B),k(tt),k(ct),k(s));function R(i,d,Z){if(Z=i.createShader(Z===0?i.VERTEX_SHADER:i.FRAGMENT_SHADER),i.shaderSource(Z,d),i.compileShader(Z),!i.getShaderParameter(Z,i.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
53
|
+
`+f.getProgramInfoLog(a));t=e.m=a,f.useProgram(t),c=f.getUniformLocation(t,"sampler0"),e.j={I:f.getAttribLocation(t,"aVertex"),H:f.getAttribLocation(t,"aTex"),ca:c},e.s=f.createBuffer(),f.bindBuffer(f.ARRAY_BUFFER,e.s),f.enableVertexAttribArray(e.j.I),f.vertexAttribPointer(e.j.I,2,f.FLOAT,!1,0,0),f.bufferData(f.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),f.STATIC_DRAW),f.bindBuffer(f.ARRAY_BUFFER,null),e.o=f.createBuffer(),f.bindBuffer(f.ARRAY_BUFFER,e.o),f.enableVertexAttribArray(e.j.H),f.vertexAttribPointer(e.j.H,2,f.FLOAT,!1,0,0),f.bufferData(f.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),f.STATIC_DRAW),f.bindBuffer(f.ARRAY_BUFFER,null),f.uniform1i(c,0)}t=e.j,f.useProgram(e.m),f.canvas.width=u.width,f.canvas.height=u.height,f.viewport(0,0,u.width,u.height),f.activeTexture(f.TEXTURE0),e.h.bindTexture2d(u.glName),f.enableVertexAttribArray(t.I),f.bindBuffer(f.ARRAY_BUFFER,e.s),f.vertexAttribPointer(t.I,2,f.FLOAT,!1,0,0),f.enableVertexAttribArray(t.H),f.bindBuffer(f.ARRAY_BUFFER,e.o),f.vertexAttribPointer(t.H,2,f.FLOAT,!1,0,0),f.bindFramebuffer(f.DRAW_FRAMEBUFFER?f.DRAW_FRAMEBUFFER:f.FRAMEBUFFER,null),f.clearColor(0,0,0,0),f.clear(f.COLOR_BUFFER_BIT),f.colorMask(!0,!0,!0,!0),f.drawArrays(f.TRIANGLE_FAN,0,4),f.disableVertexAttribArray(t.I),f.disableVertexAttribArray(t.H),f.bindBuffer(f.ARRAY_BUFFER,null),e.h.bindTexture2d(0)}function yt(e){this.g=e}var Gt=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 xt(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(f){u.addEventListener("load",function(){f()},!1),u.addEventListener("error",function(){f()},!1),document.body.appendChild(u)})}function Xt(){return gt(function(e){switch(e.g){case 1:return e.m=2,P(e,WebAssembly.instantiate(Gt),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 It(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=w(Object.keys(e.options));for(var f=u.next();!f.done;f=u.next()){f=f.value;var t=e.options[f].default;t!==void 0&&(this.j[f]=typeof t=="function"?t():t)}}}i=It.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function wt(e){var u,f,t,c,a,b,I,Y,L,U,j;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,Xt(),2)):Q.return();case 2:if(f=Q.h,typeof window=="object")return xt("createMediapipeSolutionsWasm",{locateFile:e.locateFile}),xt("createMediapipeSolutionsPackedAssets",{locateFile:e.locateFile}),b=u.filter(function(D){return D.data!==void 0}),I=u.filter(function(D){return D.data===void 0}),Y=Promise.all(b.map(function(D){var st=Z(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})),L=Promise.all(I.map(function(D){return D.simd===void 0||D.simd&&f||!D.simd&&!f?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,Z(e,e.g.graph.url),0):(D.g=0,D=void 0),D})}(),P(Q,Promise.all([L,Y,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&&f||!D.simd&&!f}).map(function(D){return e.locateFile(D.url,e.S)}),importScripts.apply(null,E(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"),j=e.l.getContext("webgl2",{}),!j&&(j=e.l.getContext("webgl",{}),!j))return alert("Failed to create WebGL canvas context when passing video frame."),Q.return();e.D=j,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 Yt(e){var u,f,t,c,a,b,I,Y;return gt(function(L){if(L.g==1){if(e.g.graph&&e.g.graph.url&&e.P===e.g.graph.url)return L.return();if(e.o=!0,!e.g.graph||!e.g.graph.url){L.g=2;return}return e.P=e.g.graph.url,P(L,Z(e,e.g.graph.url),3)}for(L.g!=2&&(u=L.h,e.i.loadGraph(u)),f=w(Object.keys(e.B)),t=f.next();!t.done;t=f.next())c=t.value,e.i.overrideFile(c,e.B[c]);if(e.B={},e.g.listeners)for(a=w(e.g.listeners),b=a.next();!b.done;b=a.next())I=b.value,J(e,I);Y=e.j,e.j={},e.setOptions(Y),L.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 f=this;if(u=u||this.g.options){for(var t=[],c=[],a={},b=w(Object.keys(e)),I=b.next();!I.done;a={K:a.K,L:a.L},I=b.next()){var Y=I.value;Y in this.j&&this.j[Y]===e[Y]||(this.j[Y]=e[Y],I=u[Y],I!==void 0&&(I.onChange&&(a.K=I.onChange,a.L=e[Y],t.push(function(L){return function(){var U;return gt(function(j){if(j.g==1)return P(j,L.K(L.L),2);U=j.h,U===!0&&(f.o=!0),j.g=0})}}(a))),I.graphOptionXref&&(Y={valueNumber:I.type===1?e[Y]:0,valueBoolean:I.type===0?e[Y]:!1,valueString:I.type===2?e[Y]:""},I=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),I.graphOptionXref),Y),c.push(I))))}(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,f,t,c,a,b,I;return gt(function(Y){switch(Y.g){case 1:if(!e.o)return Y.return();if(!e.v){Y.g=2;break}u=w(e.v),f=u.next();case 3:if(f.done){Y.g=5;break}return t=f.value,P(Y,t(),4);case 4:f=u.next(),Y.g=3;break;case 5:e.v=void 0;case 2:if(e.A){for(c=new e.h.GraphOptionChangeRequestList,a=w(e.A),b=a.next();!b.done;b=a.next())I=b.value,c.push_back(I);e.i.changeOptions(c),c.delete(),e.A=void 0}e.o=!1,Y.g=0}})}i.initialize=function(){var e=this;return gt(function(u){return u.g==1?P(u,wt(e),2):u.g!=3?P(u,Yt(e),3):P(u,l(e),0)})};function Z(e,u){var f,t;return gt(function(c){return u in e.F?c.return(e.F[u]):(f=e.locateFile(u,""),t=fetch(f).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 f=this,t,c,a,b,I,Y,L,U,j;return gt(function(Q){switch(Q.g){case 1:return f.g.inputs?(t=1e3*(u==null?performance.now():u),P(Q,f.C,2)):Q.return();case 2:return P(Q,f.initialize(),3);case 3:for(c=new f.h.PacketDataList,a=w(Object.keys(e)),b=a.next();!b.done;b=a.next())if(I=b.value,Y=f.g.inputs[I]){t:{var D=e[I];switch(Y.type){case"video":var st=f.m[Y.stream];if(st||(st=new B(f.h,f.D),f.m[Y.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=f.m[Y.stream],st||(st=new yt(f.h),f.m[Y.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 vt=st.data,Zt=vt.setBoundingBox,Kt=mt,se=ft.T,le=new Tt;if(St(le,1,se.X),St(le,2,se.Y),St(le,3,se.height),St(le,4,se.width),St(le,5,se.rotation),St(le,6,se.W),se=en(le,Qt),Zt.call(vt,Kt,se),ft.O)for(vt=0;vt<ft.O.length;++vt){le=ft.O[vt];var Ee=!!le.visibility;Zt=st.data,Kt=Zt.addNormalizedLandmark,se=mt,le=Object.assign(Object.assign({},le),{visibility:Ee?le.visibility:0}),Ee=new O,St(Ee,1,le.x),St(Ee,2,le.y),St(Ee,3,le.z),le.visibility&&St(Ee,4,le.visibility),le=en(Ee,bt),Kt.call(Zt,se,le)}if(ft.M)for(vt=0;vt<ft.M.length;++vt)Zt=st.data,Kt=Zt.addClassification,se=mt,le=ft.M[vt],Ee=new Fn,St(Ee,2,le.score),le.index&&St(Ee,1,le.index),le.label&&St(Ee,3,le.label),le.displayName&&St(Ee,4,le.displayName),le=en(Ee,m),Kt.call(Zt,se,le)}st=st.data;break t;default:st={}}}switch(L=st,U=Y.stream,Y.type){case"video":c.pushTexture2d(Object.assign(Object.assign({},L),{stream:U,timestamp:t}));break;case"detections":j=L,j.stream=U,j.timestamp=t,c.pushDetectionList(j);break;default:throw Error("Unknown input config type: '"+Y.type+"'")}}return f.i.send(c),P(Q,f.C,4);case 4:c.delete(),Q.g=0}})};function x(e,u,f){var t,c,a,b,I,Y,L,U,j,Q,D,st,ft,mt;return gt(function(vt){switch(vt.g){case 1:if(!f)return vt.return(u);for(t={},c=0,a=w(Object.keys(f)),b=a.next();!b.done;b=a.next())I=b.value,Y=f[I],typeof Y!="string"&&Y.type==="texture"&&u[Y.stream]!==void 0&&++c;1<c&&(e.G=!1),L=w(Object.keys(f)),b=L.next();case 2:if(b.done){vt.g=4;break}if(U=b.value,j=f[U],typeof j=="string")return ft=t,mt=U,P(vt,T(e,U,u[j]),14);if(Q=u[j.stream],j.type==="detection_list"){if(Q){for(var Zt=Q.getRectList(),Kt=Q.getLandmarksList(),se=Q.getClassificationsList(),le=[],Ee=0;Ee<Zt.size();++Ee){var Rn=On(Zt.get(Ee),Tt,ue);Rn={T:{X:ce(Rn,1),Y:ce(Rn,2),height:ce(Rn,3),width:ce(Rn,4),rotation:ce(Rn,5,0),W:ae(Rn,6,0)},O:K(Kt.get(Ee)),M:F(On(se.get(Ee),V,z))},le.push(Rn)}Zt=le}else Zt=[];t[U]=Zt,vt.g=7;break}if(j.type==="proto_list"){if(Q){for(Zt=Array(Q.size()),Kt=0;Kt<Q.size();Kt++)Zt[Kt]=Q.get(Kt);Q.delete()}else Zt=[];t[U]=Zt,vt.g=7;break}if(Q===void 0){vt.g=3;break}if(j.type==="float_list"){t[U]=Q,vt.g=7;break}if(j.type==="proto"){t[U]=Q,vt.g=7;break}if(j.type!=="texture")throw Error("Unknown output config type: '"+j.type+"'");return D=e.s[U],D||(D=new B(e.h,e.D),e.s[U]=D),P(vt,nt(D,Q,e.G),13);case 13:st=vt.h,t[U]=st;case 7:j.transform&&t[U]&&(t[U]=j.transform(t[U])),vt.g=3;break;case 14:ft[mt]=vt.h;case 3:b=L.next(),vt.g=2;break;case 4:return vt.return(t)}})}function T(e,u,f){var t;return gt(function(c){return typeof f=="number"||f instanceof Uint8Array||f instanceof e.h.Uint8BlobList?c.return(f):f instanceof e.h.Texture2dDataOut?(t=e.s[u],t||(t=new B(e.h,e.D),e.s[u]=t),c.return(nt(t,f,e.G))):c.return(void 0)})}function J(e,u){for(var f=u.name||"$",t=[].concat(E(u.wants)),c=new e.h.StringList,a=w(u.wants),b=a.next();!b.done;b=a.next())c.push_back(b.value);a=e.h.PacketListener.implement({onResults:function(I){for(var Y={},L=0;L<u.wants.length;++L)Y[t[L]]=I.get(L);var U=e.listeners[f];U&&(e.C=x(e,Y,u.outs).then(function(j){j=U(j);for(var Q=0;Q<u.wants.length;++Q){var D=Y[t[Q]];typeof D=="object"&&D.hasOwnProperty&&D.hasOwnProperty("delete")&&D.delete()}j&&(e.C=j)}))}}),e.i.attachMultiListener(c,a),c.delete()}i.onResults=function(e,u){this.listeners[u||"$"]=e},Ht("Solution",It),Ht("OptionType",{BOOL:0,NUMBER:1,Z:2,0:"BOOL",1:"NUMBER",2:"STRING"});function o(e){return e.map(d)}function d(e){e=On(e,y,C);var u=e.getMesh();if(!u)return e;var f=new Float32Array(u.getVertexBufferList());u.getVertexBufferList=function(){return f};var t=new Uint32Array(u.getIndexBufferList());return u.getIndexBufferList=function(){return t},e}function g(e){var u=this;e=e||{},this.g=new It({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:K},rightHandLandmarks:{type:"proto",stream:"right_hand_landmarks",transform:K},faceLandmarks:{type:"proto",stream:"face_landmarks",transform:K},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:K},ea:{type:"proto",stream:"world_landmarks",transform:K},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(f){var t,c,a,b;return gt(function(I){if(I.g==1){switch(t="",f){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(I,fetch(a),3)}return I.g!=2?P(I,I.h.arrayBuffer(),2):(b=I.h,u.g.overrideFile(c,b),P(I,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(f){return P(f,u.g.send(e),0)})},i.setOptions=function(e){this.g.setOptions(e)},Ht("Holistic",g),Ht("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}}),Ht("FACEMESH_LIPS",A),Ht("FACEMESH_LEFT_EYE",_),Ht("FACEMESH_LEFT_EYEBROW",M),Ht("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Ht("FACEMESH_RIGHT_EYE",q),Ht("FACEMESH_RIGHT_EYEBROW",lt),Ht("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Ht("FACEMESH_FACE_OVAL",s),Ht("FACEMESH_CONTOURS",X),Ht("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]]),Ht("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]]),Ht("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]]),Ht("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}),Ht("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}),Ht("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}),Ht("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Ht("matrixDataToMatrix",function(e){for(var u=e.getCols(),f=e.getRows(),t=e.getPackedDataList(),c=[],a=0;a<f;a++)c.push(Array(u));for(a=0;a<f;a++)for(var b=0;b<u;b++){var I=e.getLayout()===1?a*u+b:b*f+a;c[a][b]=t[I]}return c}),Ht("VERSION","0.5.1635989137")}).call(hi);const fi={};(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 p(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 G=p(this);function S(o,d){if(d)t:{var g=G;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})}}S("Symbol",function(o){function d(f){if(this instanceof d)throw new TypeError("Symbol is not a constructor");return new g(e+(f||"")+"_"+u++,f)}function g(f,t){this.g=f,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}),S("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=G[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 w(o){var d=typeof Symbol<"u"&&Symbol.iterator&&o[Symbol.iterator];return d?d.call(o):{next:n(o)}}function E(o){if(!(o instanceof Array)){o=w(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},ct;if(typeof Object.setPrototypeOf=="function")ct=Object.setPrototypeOf;else{var dt;t:{var Ft={a:!0},Lt={};try{Lt.__proto__=Ft,dt=Lt.a;break t}catch{}dt=!1}ct=dt?function(o,d){if(o.__proto__=d,o.__proto__!==d)throw new TypeError(o+" is not extensible");return o}:null}var at=ct;function pt(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 Mt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function Jt(o){if(o.l)throw new TypeError("Generator is already running");o.l=!0}Mt.prototype.s=function(o){this.h=o};function qt(o,d){o.j={da:d,ea:!0},o.g=o.o||o.u}Mt.prototype.return=function(o){this.j={return:o},this.g=this.u};function P(o,d,g){return o.g=g,{value:d}}function De(o){this.g=new Mt,this.h=o}function an(o,d){Jt(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),Dt(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 f=u.value}catch(t){return o.g.i=null,qt(o.g,t),Dt(o)}return o.g.i=null,e.call(o.g,f),Dt(o)}function Dt(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,qt(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 Kn(o){this.next=function(d){return Jt(o.g),o.g.i?d=Ve(o,o.g.i.next,d,o.g.s):(o.g.s(d),d=Dt(o)),d},this.throw=function(d){return Jt(o.g),o.g.i?d=Ve(o,o.g.i.throw,d,o.g.s):(qt(o.g,d),d=Dt(o)),d},this.return=function(d){return an(o,d)},this[Symbol.iterator]=function(){return this}}function de(o){function d(e){return o.next(e)}function g(e){return o.throw(e)}return new Promise(function(e,u){function f(t){t.done?e(t.value):Promise.resolve(t.value).then(d,g).then(f,u)}f(o.next())})}function gt(o){return de(new Kn(new De(o)))}S("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=G.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(I){a||(a=!0,b.call(c,I))}}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=G.console;typeof c<"u"&&c.error(t.i)}},1)},d.prototype.C=function(){if(this.s)return!1;var t=G.CustomEvent,c=G.Event,a=G.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=G.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)f.h(this.g[t]);this.g=null}};var f=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(L,U){return typeof L=="function"?function(j){try{b(L(j))}catch(Q){I(Q)}}:U}var b,I,Y=new d(function(L,U){b=L,I=U});return this.M(a(t,b),a(c,I)),Y},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?f.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=w(t),I=b.next();!I.done;I=b.next())e(I.value).M(c,a)})},d.all=function(t){var c=w(t),a=c.next();return a.done?e([]):new d(function(b,I){function Y(j){return function(Q){L[j]=Q,U--,U==0&&b(L)}}var L=[],U=0;do L.push(void 0),U++,e(a.value).M(Y(L.length-1),I),a=c.next();while(!a.done)})},d});function pn(o,d){o instanceof String&&(o+="");var g=0,e=!1,u={next:function(){if(!e&&g<o.length){var f=g++;return{value:d(f,o[f]),done:!1}}return e=!0,{done:!0,value:void 0}}};return u[Symbol.iterator]=function(){return u},u}var jn=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};S("Object.assign",function(o){return o||jn}),S("Object.is",function(o){return o||function(d,g){return d===g?d!==0||1/d===1/g:d!==d&&g!==g}}),S("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 f=e[g];if(f===d||Object.is(f,d))return!0}return!1}}),S("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}}),S("Array.prototype.keys",function(o){return o||function(){return pn(this,function(d){return d})}});var Re=this||self;function Ht(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 on(o,d){return d=String.fromCharCode.apply(null,d),o==null?d:o+d}var Xn,Ln=typeof TextDecoder<"u",xn,Nn=typeof TextEncoder<"u",dn={},bn=null;function En(o){var d;d===void 0&&(d=0),Ke(),d=dn[d];for(var g=Array(Math.floor(o.length/3)),e=d[64]||"",u=0,f=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[f++]=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[f]=d[o>>2]+d[(o&3)<<4|b>>4]+a+e}return g.join("")}function Cn(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(f){e[u++]=f}),u!==g?e.subarray(0,u):e}function Oe(o,d){function g(a){for(;e<o.length;){var b=o.charAt(e++),I=bn[b];if(I!=null)return I;if(!/^[\s\xa0]*$/.test(b))throw Error("Unknown base64 encoding at char: "+b)}return a}Ke();for(var e=0;;){var u=g(-1),f=g(0),t=g(64),c=g(64);if(c===64&&u===-1)break;d(u<<2|f>>4),t!=64&&(d(f<<4&240|t>>2),c!=64&&d(t<<6&192|c))}}function Ke(){if(!bn){bn={};for(var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),d=["+/=","+/","-_=","-_.","-_"],g=0;5>g;g++){var e=o.concat(d[g].split(""));dn[g]=e;for(var u=0;u<e.length;u++){var f=e[u];bn[f]===void 0&&(bn[f]=u)}}}}var In=typeof Uint8Array=="function";function Wn(o){return In&&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 ze=typeof Uint8Array.prototype.slice=="function",ne=0,We=0;function sn(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 Cn(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"?Cn(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 Ue(o,d){return Error("Invalid wire type: "+o+" (at position "+d+")")}function _t(){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&&Ce(this,o)}function Ce(o,d){o.h=sn(d,o.v),o.j=0,o.i=o.h.length,o.g=o.j}Ze.prototype.reset=function(){this.g=this.j};function At(o){if(o.g>o.i)throw Error("Tried to read past the end of the data "+o.g+" > "+o.i)}function xe(o){var d=o.h,g=d[o.g],e=g&127;if(128>g)return o.g+=1,At(o),e;if(g=d[o.g+1],e|=(g&127)<<7,128>g)return o.g+=2,At(o),e;if(g=d[o.g+2],e|=(g&127)<<14,128>g)return o.g+=3,At(o),e;if(g=d[o.g+3],e|=(g&127)<<21,128>g)return o.g+=4,At(o),e;if(g=d[o.g+4],o.g+=5,e|=(g&15)<<28,128>g)return At(o),e;if(128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++])throw _t();return At(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 we(o,d){for(;127<d;)o.g.push(d&127|128),d>>>=7;o.g.push(d)}function $e(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&&Ce(g,o),o=g):o=new Ze(o,d),this.g=o,this.j=this.g.g,this.h=this.i=-1}$e.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=xe(o.g)>>>0;if(d=g>>>3,g&=7,!(0<=g&&5>=g))throw Ue(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,At(o);break t}throw _t()}break;case 1:o=o.g,o.g+=8,At(o);break;case 2:o.h!=2?Ot(o):(d=xe(o.g)>>>0,o=o.g,o.g+=d,At(o));break;case 5:o=o.g,o.g+=4,At(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 Ue(o.h,o.j)}}var je=[];function Pe(){this.i=[],this.h=0,this.g=new ye}function Ie(o,d){d.length!==0&&(o.i.push(d),o.h+=d.length)}function Vn(o,d){if(d=d.ba){Ie(o,o.g.end());for(var g=0;g<d.length;g++)Ie(o,d[g])}}var ln=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function _e(o,d){Object.isFrozen(o)||(ln?o[ln]|=d:o.N!==void 0?o.N|=d:Object.defineProperties(o,{N:{value:d,configurable:!0,writable:!0,enumerable:!1}}))}function cn(o){var d;return ln?d=o[ln]:d=o.N,d==null?0:d}function ve(o){return _e(o,1),o}function Fe(o){return Array.isArray(o)?!!(cn(o)&2):!1}function Ge(o){if(!Array.isArray(o))throw Error("cannot mark non-array as immutable");_e(o,2)}function re(o){return o!==null&&typeof o=="object"&&!Array.isArray(o)&&o.constructor===Object}var Qe=Object.freeze(ve([]));function te(o){if(Fe(o.m))throw Error("Cannot mutate an immutable Message")}var zt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function hn(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 Ct(o,d,g,e){e=e===void 0?!1:e,te(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=Qe),Fe(o.m)?g&&(Ge(u),Object.freeze(u)):(u===Qe||Fe(u))&&(u=ve(u.slice()),Ct(o,d,u,e)),u}function ie(o,d,g){return o=fe(o,d),o=o==null?o:+o,o==null?g===void 0?0:g:o}function Ye(o,d,g,e){o.j||(o.j={});var u=Fe(o.m),f=o.j[g];if(!f){e=Vt(o,g,!0,e===void 0?!1:e),f=[],u=u||Fe(e);for(var t=0;t<e.length;t++)f[t]=new d(e[t]),u&&Ge(f[t].m);u&&(Ge(f),Object.freeze(f)),o.j[g]=f}return f}function ee(o,d,g,e,u){var f=f===void 0?!1:f;return te(o),f=Ye(o,g,d,f),g=e||new g,o=Vt(o,d),u!=null?(f.splice(u,0,g),o.splice(u,0,g.m)):(f.push(g),o.push(g.m)),g}function oe(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:In&&d instanceof Uint8Array?En(d):null,(o.L=d)||""}}}return o}function ut(o){var d=ce;return d=d===void 0?St:d,ae(o,d)}function Pt(o,d){if(o!=null){if(Array.isArray(o))o=ae(o,d);else if(re(o)){var g={},e;for(e in o)g[e]=Pt(o[e],d);o=g}else o=d(o);return o}}function ae(o,d){for(var g=o.slice(),e=0;e<g.length;e++)g[e]=Pt(g[e],d);return Array.isArray(o)&&cn(o)&1&&ve(g),g}function ce(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=He),He=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],re(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]=Qe;else{e=this.g||(this.g=this.m[this.i+this.h]={});var u=e[o];u?Array.isArray(u)&&ve(u):e[o]=Qe}}me.prototype.toJSON=function(){return ut(this.m)},me.prototype.toString=function(){return this.m.toString()};var He;function qe(){me.apply(this,arguments)}if(pt(qe,me),zt){var tn={};Object.defineProperties(qe,(tn[Symbol.hasInstance]=hn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),tn))}function fn(o,d,g){if(g){var e={},u;for(u in g){var f=g[u],t=f.ha;t||(e.F=f.la||f.fa.P,f.aa?(e.U=Sn(f.aa),t=function(c){return function(a,b,I){return c.F(a,b,I,c.U)}}(e)):f.ca?(e.T=Be(f.X.g,f.ca),t=function(c){return function(a,b,I){return c.F(a,b,I,c.T)}}(e)):t=e.F,f.ha=t),t(d,o,f.X),e={F:e.F,U:e.U,T:e.T}}}Vn(d,o)}var yn=Symbol();function Le(o,d,g){return o[yn]||(o[yn]=function(e,u){return d(e,u,g)})}function en(o){var d=o[yn];if(!d){var g=m(o);d=function(e,u){return W(e,u,g)},o[yn]=d}return d}function On(o){var d=o.aa;if(d)return en(d);if(d=o.ka)return Le(o.X.g,d,o.ca)}function nn(o){var d=On(o),g=o.X,e=o.fa.O;return d?function(u,f){return e(u,f,g,d)}:function(u,f){return e(u,f,g)}}function Ne(o,d,g,e,u,f){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++],I=o[t++];Array.isArray(I)?u(d,g,a,c,b,I):f(d,g,a,c,b,I);break;case 4:f(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=un(o);d=function(e,u){return k(e,u,g)},o[Zn]=d}return d}function Be(o,d){var g=o[Zn];return g||(g=function(e,u){return fn(e,u,d)},o[Zn]=g),g}var kn=Symbol();function rn(o,d){o.push(d)}function vn(o,d,g){o.push(d,g.P)}function Tn(o,d,g,e,u){var f=Sn(u),t=g.P;o.push(d,function(c,a,b){return t(c,a,b,e,f)})}function An(o,d,g,e,u,f){var t=Be(e,f),c=g.P;o.push(d,function(a,b,I){return c(a,b,I,e,t)})}function un(o){var d=o[kn];return d||Ne(o,o[kn]=[],rn,vn,Tn,An)}var wn=Symbol();function _n(o,d){o[0]=d}function Qn(o,d,g,e){var u=g.O;o[d]=e?function(f,t,c){return u(f,t,c,e)}:u}function Fn(o,d,g,e,u,f){var t=g.O,c=en(u);o[d]=function(a,b,I){return t(a,b,I,e,c,f)}}function Hn(o,d,g,e,u,f,t){var c=g.O,a=Le(e,u,f);o[d]=function(b,I,Y){return c(b,I,Y,e,a,t)}}function m(o){var d=o[wn];return d||Ne(o,o[wn]={},_n,Qn,Fn,Hn)}function W(o,d,g){for(;Xe(d)&&d.h!=4;){var e=d.i,u=g[e];if(!u){var f=g[0];f&&(f=f[e])&&(u=g[e]=nn(f))}if((!u||!u(d,o,e))&&(u=d,e=o,f=u.j,Ot(u),!u.W)){var t=u.g.h;u=u.g.g,u=f===u?he||(he=new Uint8Array(0)):ze?t.slice(f,u):new Uint8Array(t.subarray(f,u)),(f=e.ba)?f.push(u):e.ba=[u]}}return o}function V(o,d,g){if(je.length){var e=je.pop();o&&(Ce(e.g,o),e.i=-1,e.h=-1),o=e}else o=new $e(o);try{return W(new d,o,m(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>je.length&&je.push(o)}}function k(o,d,g){for(var e=g.length,u=e%2==1,f=u?1:0;f<e;f+=2)(0,g[f+1])(d,o,g[f]);fn(o,d,u?g[0]:void 0)}function z(o,d){var g=new Pe;k(o,g,un(d)),Ie(g,g.g.end()),o=new Uint8Array(g.h),d=g.i;for(var e=d.length,u=0,f=0;f<e;f++){var t=d[f];o.set(t,u),u+=t.length}return g.i=[o],o}function ot(o,d){return{O:o,P:d}}var O=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],f=o.h[o.g+2],t=o.h[o.g+3];return o.g+=4,At(o),u=(e<<0|u<<8|f<<16|t<<24)>>>0,o=2*(u>>31)+1,e=u>>>23&255,u&=8388607,Ct(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){we(o.g,8*g+5),o=o.g;var e=d;e=(g=0>e?1:0)?-e:e,e===0?0<1/e?ne=We=0:(We=0,ne=2147483648):isNaN(e)?(We=0,ne=2147483647):34028234663852886e22<e?(We=0,ne=(g<<31|2139095040)>>>0):11754943508222875e-54>e?(e=Math.round(e/Math.pow(2,-149)),We=0,ne=(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,ne=(g<<31|d+127<<23|e&8388607)>>>0),g=ne,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,f=0,t=o=0;4>t&&128<=u;t++)u=e.h[e.g++],At(e),f|=(u&127)<<7*t;if(128<=u&&(u=e.h[e.g++],At(e),f|=(u&127)<<28,o|=(u&127)>>4),128<=u)for(t=0;5>t&&128<=u;t++)u=e.h[e.g++],At(e),o|=(u&127)<<7*t+3;if(128>u)e=f>>>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 _t();return Ct(d,g,o?-e:e),!0},function(o,d,g){if(d=fe(d,g),d!=null&&d!=null){we(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))),ne=d,We=e,g=ne,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:(Ct(d,g,xe(o.g)),!0)},function(o,d,g){if(d=fe(d,g),d!=null&&d!=null)if(we(o.g,8*g),o=o.g,g=d,0<=g)we(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=xe(o.g)>>>0;o=o.g;var u=o.g;o.g+=e,At(o),o=o.h;var f;if(Ln)(f=Xn)||(f=Xn=new TextDecoder("utf-8",{fatal:!0})),f=f.decode(o.subarray(u,u+e));else{e=u+e;for(var t=[],c=null,a,b,I;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||((f=o[u++])&192)!==128?(u--,Te()):t.push((a&15)<<12|(b&63)<<6|f&63)):244>=a?u>=e-2?Te():(b=o[u++],(b&192)!==128||(a<<28)+(b-144)>>30!==0||((f=o[u++])&192)!==128||((I=o[u++])&192)!==128?(u--,Te()):(a=(a&7)<<18|(b&63)<<12|(f&63)<<6|I&63,a-=65536,t.push((a>>10&1023)+55296,(a&1023)+56320))):Te(),8192<=t.length&&(c=on(c,t),t.length=0);f=on(c,t)}return Ct(d,g,f),!0},function(o,d,g){if(d=fe(d,g),d!=null){var e=!1;if(e=e===void 0?!1:e,Nn){if(e&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(d))throw Error("Found an unpaired surrogate");d=(xn||(xn=new TextEncoder)).encode(d)}else{for(var u=0,f=new Uint8Array(3*d.length),t=0;t<d.length;t++){var c=d.charCodeAt(t);if(128>c)f[u++]=c;else{if(2048>c)f[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,f[u++]=c>>18|240,f[u++]=c>>12&63|128,f[u++]=c>>6&63|128,f[u++]=c&63|128;continue}else t--}if(e)throw Error("Found an unpaired surrogate");c=65533}f[u++]=c>>12|224,f[u++]=c>>6&63|128}f[u++]=c&63|128}}d=f.subarray(0,u)}we(o.g,8*g+2),we(o.g,d.length),Ie(o,o.g.end()),Ie(o,d)}}),Ut=ot(function(o,d,g,e,u){if(o.h!==2)return!1;d=ee(d,g,e),g=o.g.i,e=xe(o.g)>>>0;var f=o.g.g+e,t=f-g;if(0>=t&&(o.g.i=f,u(d,o),t=f-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=f,o.g.i=g,!0},function(o,d,g,e,u){if(d=Ye(d,e,g),d!=null)for(e=0;e<d.length;e++){var f=o;we(f.g,8*g+2);var t=f.g.end();Ie(f,t),t.push(f.h),f=t,u(d[e],o),t=o;var c=f.pop();for(c=t.h+t.g.length()-c;127<c;)f.push(c&127|128),c>>>=7,t.h++;f.push(c),t.h++}});function Nt(){qe.apply(this,arguments)}if(pt(Nt,qe),zt){var $t={};Object.defineProperties(Nt,($t[Symbol.hasInstance]=hn(Object[Symbol.hasInstance]),$t))}function Et(o){Nt.call(this,o)}pt(Et,Nt);function Tt(){return[1,bt,2,O,3,Rt,4,Rt]}function kt(o){Nt.call(this,o,-1,ue)}pt(kt,Nt),kt.prototype.addClassification=function(o,d){return ee(this,1,Et,o,d),this};function Qt(){return[1,Ut,Et,Tt]}var ue=[1];function pe(o){Nt.call(this,o)}pt(pe,Nt);function ge(){return[1,O,2,O,3,O,4,O,5,O]}function Je(o){Nt.call(this,o,-1,y)}pt(Je,Nt);function h(){return[1,Ut,pe,ge]}var y=[1];function v(o){Nt.call(this,o)}pt(v,Nt);function C(){return[1,O,2,O,3,O,4,O,5,O,6,rt]}var A=[[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]],lt=[[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(E(A),E(_),E(M),E(q),E(lt),E(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.
|
|
55
54
|
|
|
56
|
-
`+
|
|
55
|
+
`+o.getShaderInfoLog(g));return g}function F(o){return Ye(o,Et,1).map(function(d){return{index:oe(d,1),ga:ie(d,2),label:fe(d,3)!=null?tt(d,3):void 0,displayName:fe(d,4)!=null?tt(d,4):void 0}})}function N(o){return{x:ie(o,1),y:ie(o,2),z:ie(o,3),visibility:fe(o,4)!=null?ie(o,4):void 0}}function K(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,`
|
|
57
56
|
attribute vec2 aVertex;
|
|
58
57
|
attribute vec2 aTex;
|
|
59
58
|
varying vec2 vTex;
|
|
60
59
|
void main(void) {
|
|
61
60
|
gl_Position = vec4(aVertex, 0.0, 1.0);
|
|
62
61
|
vTex = aTex;
|
|
63
|
-
}`,0),
|
|
62
|
+
}`,0),u=R(g,`
|
|
64
63
|
precision mediump float;
|
|
65
64
|
varying vec2 vTex;
|
|
66
65
|
uniform sampler2D sampler0;
|
|
67
66
|
void main(){
|
|
68
67
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
69
|
-
}`,1),f=
|
|
68
|
+
}`,1),f=g.createProgram();if(g.attachShader(f,e),g.attachShader(f,u),g.linkProgram(f),!g.getProgramParameter(f,g.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
70
69
|
|
|
71
|
-
`+Z.getProgramInfoLog(f));e=i.o=f,Z.useProgram(e),c=Z.getUniformLocation(e,"sampler0"),i.j={K:Z.getAttribLocation(e,"aVertex"),J:Z.getAttribLocation(e,"aTex"),ma:c},i.u=Z.createBuffer(),Z.bindBuffer(Z.ARRAY_BUFFER,i.u),Z.enableVertexAttribArray(i.j.K),Z.vertexAttribPointer(i.j.K,2,Z.FLOAT,!1,0,0),Z.bufferData(Z.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),Z.STATIC_DRAW),Z.bindBuffer(Z.ARRAY_BUFFER,null),i.s=Z.createBuffer(),Z.bindBuffer(Z.ARRAY_BUFFER,i.s),Z.enableVertexAttribArray(i.j.J),Z.vertexAttribPointer(i.j.J,2,Z.FLOAT,!1,0,0),Z.bufferData(Z.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),Z.STATIC_DRAW),Z.bindBuffer(Z.ARRAY_BUFFER,null),Z.uniform1i(c,0)}e=i.j,Z.useProgram(i.o),Z.canvas.width=d.width,Z.canvas.height=d.height,Z.viewport(0,0,d.width,d.height),Z.activeTexture(Z.TEXTURE0),i.h.bindTexture2d(d.glName),Z.enableVertexAttribArray(e.K),Z.bindBuffer(Z.ARRAY_BUFFER,i.u),Z.vertexAttribPointer(e.K,2,Z.FLOAT,!1,0,0),Z.enableVertexAttribArray(e.J),Z.bindBuffer(Z.ARRAY_BUFFER,i.s),Z.vertexAttribPointer(e.J,2,Z.FLOAT,!1,0,0),Z.bindFramebuffer(Z.DRAW_FRAMEBUFFER?Z.DRAW_FRAMEBUFFER:Z.FRAMEBUFFER,null),Z.clearColor(0,0,0,0),Z.clear(Z.COLOR_BUFFER_BIT),Z.colorMask(!0,!0,!0,!0),Z.drawArrays(Z.TRIANGLE_FAN,0,4),Z.disableVertexAttribArray(e.K),Z.disableVertexAttribArray(e.J),Z.bindBuffer(Z.ARRAY_BUFFER,null),i.h.bindTexture2d(0)}function q(i){this.g=i}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 Gt(i,d){return d+i}function Mt(i,d){window[i]=d}function St(i){var d=document.createElement("script");return d.setAttribute("src",i),d.setAttribute("crossorigin","anonymous"),new Promise(function(Z){d.addEventListener("load",function(){Z()},!1),d.addEventListener("error",function(){Z()},!1),document.body.appendChild(d)})}function ft(){return gt(function(i){switch(i.g){case 1:return i.o=2,_(i,WebAssembly.instantiate(yt),4);case 4:i.g=3,i.o=0;break;case 2:return i.o=0,i.j=null,i.return(!1);case 3:return i.return(!0)}})}function Xt(i){if(this.g=i,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=i&&i.locateFile||Gt,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,i.options){d=Y(Object.keys(i.options));for(var Z=d.next();!Z.done;Z=d.next()){Z=Z.value;var e=i.options[Z].default;e!==void 0&&(this.j[Z]=typeof e=="function"?e():e)}}}o=Xt.prototype,o.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function Yt(i){var d,Z,e,c,f,t,u,a,b,S,L;return gt(function(H){switch(H.g){case 1:return i.Z?(d=i.g.files===void 0?[]:typeof i.g.files=="function"?i.g.files(i.j):i.g.files,_(H,ft(),2)):H.return();case 2:if(Z=H.h,typeof window=="object")return Mt("createMediapipeSolutionsWasm",{locateFile:i.locateFile}),Mt("createMediapipeSolutionsPackedAssets",{locateFile:i.locateFile}),t=d.filter(function(K){return K.data!==void 0}),u=d.filter(function(K){return K.data===void 0}),a=Promise.all(t.map(function(K){var j=l(i,K.url);if(K.path!==void 0){var D=K.path;j=j.then(function($){return i.overrideFile(D,$),Promise.resolve($)})}return j})),b=Promise.all(u.map(function(K){return K.simd===void 0||K.simd&&Z||!K.simd&&!Z?St(i.locateFile(K.url,i.$)):Promise.resolve()})).then(function(){var K,j,D;return gt(function($){if($.g==1)return K=window.createMediapipeSolutionsWasm,j=window.createMediapipeSolutionsPackedAssets,D=i,_($,K(j),2);D.h=$.h,$.g=0})}),S=function(){return gt(function(K){return i.g.graph&&i.g.graph.url?K=_(K,l(i,i.g.graph.url),0):(K.g=0,K=void 0),K})}(),_(H,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(K){return K.simd===void 0||K.simd&&Z||!K.simd&&!Z}).map(function(K){return i.locateFile(K.url,i.$)}),importScripts.apply(null,k(e)),c=i,_(H,createMediapipeSolutionsWasm(Module),6);case 6:c.h=H.h,i.l=new OffscreenCanvas(1,1),i.h.canvas=i.l,f=i.h.GL.createContext(i.l,{antialias:!1,alpha:!1,ja:typeof WebGL2RenderingContext<"u"?2:1}),i.h.GL.makeContextCurrent(f),H.g=4;break;case 7:if(i.l=document.createElement("canvas"),L=i.l.getContext("webgl2",{}),!L&&(L=i.l.getContext("webgl",{}),!L))return alert("Failed to create WebGL canvas context when passing video frame."),H.return();i.G=L,i.h.canvas=i.l,i.h.createContext(i.l,!0,!0,{});case 4:i.i=new i.h.SolutionWasm,i.Z=!1,H.g=0}})}function Ft(i){var d,Z,e,c,f,t,u,a;return gt(function(b){if(b.g==1){if(i.g.graph&&i.g.graph.url&&i.Y===i.g.graph.url)return b.return();if(i.s=!0,!i.g.graph||!i.g.graph.url){b.g=2;return}return i.Y=i.g.graph.url,_(b,l(i,i.g.graph.url),3)}for(b.g!=2&&(d=b.h,i.i.loadGraph(d)),Z=Y(Object.keys(i.C)),e=Z.next();!e.done;e=Z.next())c=e.value,i.i.overrideFile(c,i.C[c]);if(i.C={},i.g.listeners)for(f=Y(i.g.listeners),t=f.next();!t.done;t=f.next())u=t.value,T(i,u);a=i.j,i.j={},i.setOptions(a),b.g=0})}o.reset=function(){var i=this;return gt(function(d){i.i&&(i.i.reset(),i.o={},i.u={}),d.g=0})},o.setOptions=function(i,d){var Z=this;if(d=d||this.g.options){for(var e=[],c=[],f={},t=Y(Object.keys(i)),u=t.next();!u.done;f={R:f.R,S:f.S},u=t.next()){var a=u.value;a in this.j&&this.j[a]===i[a]||(this.j[a]=i[a],u=d[a],u!==void 0&&(u.onChange&&(f.R=u.onChange,f.S=i[a],e.push(function(b){return function(){var S;return gt(function(L){if(L.g==1)return _(L,b.R(b.S),2);S=L.h,S===!0&&(Z.s=!0),L.g=0})}}(f))),u.graphOptionXref&&(a={valueNumber:u.type===1?i[a]:0,valueBoolean:u.type===0?i[a]:!1,valueString:u.type===2?i[a]:""},u=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),u.graphOptionXref),a),c.push(u))))}(e.length!==0||c.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(c),this.A=(this.A===void 0?[]:this.A).concat(e))}};function Ct(i){var d,Z,e,c,f,t,u;return gt(function(a){switch(a.g){case 1:if(!i.s)return a.return();if(!i.A){a.g=2;break}d=Y(i.A),Z=d.next();case 3:if(Z.done){a.g=5;break}return e=Z.value,_(a,e(),4);case 4:Z=d.next(),a.g=3;break;case 5:i.A=void 0;case 2:if(i.B){for(c=new i.h.GraphOptionChangeRequestList,f=Y(i.B),t=f.next();!t.done;t=f.next())u=t.value,c.push_back(u);i.i.changeOptions(c),c.delete(),i.B=void 0}i.s=!1,a.g=0}})}o.initialize=function(){var i=this;return gt(function(d){return d.g==1?_(d,Yt(i),2):d.g!=3?_(d,Ft(i),3):_(d,Ct(i),0)})};function l(i,d){var Z,e;return gt(function(c){return d in i.H?c.return(i.H[d]):(Z=i.locateFile(d,""),e=fetch(Z).then(function(f){return f.arrayBuffer()}),i.H[d]=e,c.return(e))})}o.overrideFile=function(i,d){this.i?this.i.overrideFile(i,d):this.C[i]=d},o.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},o.send=function(i,d){var Z=this,e,c,f,t,u,a,b,S,L;return gt(function(H){switch(H.g){case 1:return Z.g.inputs?(e=1e3*(d==null?performance.now():d),_(H,Z.D,2)):H.return();case 2:return _(H,Z.initialize(),3);case 3:for(c=new Z.h.PacketDataList,f=Y(Object.keys(i)),t=f.next();!t.done;t=f.next())if(u=t.value,a=Z.g.inputs[u]){t:{var K=i[u];switch(a.type){case"video":var j=Z.o[a.stream];if(j||(j=new A(Z.h,Z.G),Z.o[a.stream]=j),j.l===0&&(j.l=j.h.createTexture()),typeof HTMLVideoElement<"u"&&K instanceof HTMLVideoElement)var D=K.videoWidth,$=K.videoHeight;else typeof HTMLImageElement<"u"&&K instanceof HTMLImageElement?(D=K.naturalWidth,$=K.naturalHeight):(D=K.width,$=K.height);$={glName:j.l,width:D,height:$},D=j.g,D.canvas.width=$.width,D.canvas.height=$.height,D.activeTexture(D.TEXTURE0),j.h.bindTexture2d(j.l),D.texImage2D(D.TEXTURE_2D,0,D.RGBA,D.RGBA,D.UNSIGNED_BYTE,K),j.h.bindTexture2d(0),j=$;break t;case"detections":for(j=Z.o[a.stream],j||(j=new q(Z.h),Z.o[a.stream]=j),j.data||(j.data=new j.g.DetectionListData),j.data.reset(K.length),$=0;$<K.length;++$){D=K[$];var ut=j.data,mt=ut.setBoundingBox,pt=$,vt=D.boundingBox,Zt=new G;if(Nt(Zt,1,vt.xCenter),Nt(Zt,2,vt.yCenter),Nt(Zt,3,vt.height),Nt(Zt,4,vt.width),Nt(Zt,5,vt.rotation),Nt(Zt,6,vt.rectId),vt=P(Zt,C),mt.call(ut,pt,vt),D.landmarks)for(ut=0;ut<D.landmarks.length;++ut){Zt=D.landmarks[ut];var jt=!!Zt.visibility;mt=j.data,pt=mt.addNormalizedLandmark,vt=$,Zt=Object.assign(Object.assign({},Zt),{visibility:jt?Zt.visibility:0}),jt=new pe,Nt(jt,1,Zt.x),Nt(jt,2,Zt.y),Nt(jt,3,Zt.z),Zt.visibility&&Nt(jt,4,Zt.visibility),Zt=P(jt,ge),pt.call(mt,vt,Zt)}if(D.V)for(ut=0;ut<D.V.length;++ut)mt=j.data,pt=mt.addClassification,vt=$,Zt=D.V[ut],jt=new Et,Nt(jt,2,Zt.ga),Zt.index&&Nt(jt,1,Zt.index),Zt.label&&Nt(jt,3,Zt.label),Zt.displayName&&Nt(jt,4,Zt.displayName),Zt=P(jt,wt),pt.call(mt,vt,Zt)}j=j.data;break t;default:j={}}}switch(b=j,S=a.stream,a.type){case"video":c.pushTexture2d(Object.assign(Object.assign({},b),{stream:S,timestamp:e}));break;case"detections":L=b,L.stream=S,L.timestamp=e,c.pushDetectionList(L);break;default:throw Error("Unknown input config type: '"+a.type+"'")}}return Z.i.send(c),_(H,Z.D,4);case 4:c.delete(),H.g=0}})};function v(i,d,Z){var e,c,f,t,u,a,b,S,L,H,K,j,D,$;return gt(function(ut){switch(ut.g){case 1:if(!Z)return ut.return(d);for(e={},c=0,f=Y(Object.keys(Z)),t=f.next();!t.done;t=f.next())u=t.value,a=Z[u],typeof a!="string"&&a.type==="texture"&&d[a.stream]!==void 0&&++c;1<c&&(i.I=!1),b=Y(Object.keys(Z)),t=b.next();case 2:if(t.done){ut.g=4;break}if(S=t.value,L=Z[S],typeof L=="string")return D=e,$=S,_(ut,x(i,S,d[L]),14);if(H=d[L.stream],L.type==="detection_list"){if(H){for(var mt=H.getRectList(),pt=H.getLandmarksList(),vt=H.getClassificationsList(),Zt=[],jt=0;jt<mt.size();++jt){var se=W(mt.get(jt),G,C);se={boundingBox:{xCenter:ie(se,1),yCenter:ie(se,2),height:ie(se,3),width:ie(se,4),rotation:ie(se,5,0),rectId:oe(se,6)},landmarks:Fe(W(pt.get(jt),ke,h),pe,1).map(N),V:w(W(vt.get(jt),Kt,Dt))},Zt.push(se)}mt=Zt}else mt=[];e[S]=mt,ut.g=7;break}if(L.type==="proto_list"){if(H){for(mt=Array(H.size()),pt=0;pt<H.size();pt++)mt[pt]=H.get(pt);H.delete()}else mt=[];e[S]=mt,ut.g=7;break}if(H===void 0){ut.g=3;break}if(L.type==="float_list"){e[S]=H,ut.g=7;break}if(L.type==="proto"){e[S]=H,ut.g=7;break}if(L.type!=="texture")throw Error("Unknown output config type: '"+L.type+"'");return K=i.u[S],K||(K=new A(i.h,i.G),i.u[S]=K),_(ut,U(K,H,i.I),13);case 13:j=ut.h,e[S]=j;case 7:L.transform&&e[S]&&(e[S]=L.transform(e[S])),ut.g=3;break;case 14:D[$]=ut.h;case 3:t=b.next(),ut.g=2;break;case 4:return ut.return(e)}})}function x(i,d,Z){var e;return gt(function(c){return typeof Z=="number"||Z instanceof Uint8Array||Z instanceof i.h.Uint8BlobList?c.return(Z):Z instanceof i.h.Texture2dDataOut?(e=i.u[d],e||(e=new A(i.h,i.G),i.u[d]=e),c.return(U(e,Z,i.I))):c.return(void 0)})}function T(i,d){for(var Z=d.name||"$",e=[].concat(k(d.wants)),c=new i.h.StringList,f=Y(d.wants),t=f.next();!t.done;t=f.next())c.push_back(t.value);f=i.h.PacketListener.implement({onResults:function(u){for(var a={},b=0;b<d.wants.length;++b)a[e[b]]=u.get(b);var S=i.listeners[Z];S&&(i.D=v(i,a,d.outs).then(function(L){L=S(L);for(var H=0;H<d.wants.length;++H){var K=a[e[H]];typeof K=="object"&&K.hasOwnProperty&&K.hasOwnProperty("delete")&&K.delete()}L&&(i.D=L)}))}}),i.i.attachMultiListener(c,f),c.delete()}o.onResults=function(i,d){this.listeners[d||"$"]=i},Jt("Solution",Xt),Jt("OptionType",{BOOL:0,NUMBER:1,ia:2,0:"BOOL",1:"NUMBER",2:"STRING"});function J(i){var d=this;i=i||{};var Z={url:"face_detection_short.binarypb"},e={type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}};this.g=new Xt({locateFile:i.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:Z,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(c){var f,t,u,a,b,S;return gt(function(L){switch(L.g){case 1:f=c==="short"?["face_detection_short_range.tflite"]:["face_detection_full_range_sparse.tflite"],t=Y(f),u=t.next();case 2:if(u.done){L.g=4;break}return a=u.value,b="third_party/mediapipe/modules/face_detection/"+a,_(L,l(d.g,a),5);case 5:S=L.h,d.g.overrideFile(b,S),u=t.next(),L.g=2;break;case 4:return Z.url=c==="short"?"face_detection_short.binarypb":"face_detection_full.binarypb",e.graphOptionXref.calculatorName=c==="short"?"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator":"facedetectionfullrangegpu__facedetectionfullrangecommon__TensorsToDetectionsCalculator",L.return(!0)}})}},minDetectionConfidence:e}})}o=J.prototype,o.close=function(){return this.g.close(),Promise.resolve()},o.onResults=function(i){this.g.onResults(i)},o.initialize=function(){var i=this;return gt(function(d){return _(d,i.g.initialize(),0)})},o.reset=function(){this.g.reset()},o.send=function(i){var d=this;return gt(function(Z){return _(Z,d.g.send(i),0)})},o.setOptions=function(i){this.g.setOptions(i)},Jt("FaceDetection",J),Jt("FACEDETECTION_LIPS",M),Jt("FACEDETECTION_LEFT_EYE",Q),Jt("FACEDETECTION_LEFT_EYEBROW",B),Jt("FACEDETECTION_RIGHT_EYE",tt),Jt("FACEDETECTION_RIGHT_EYEBROW",ct),Jt("FACEDETECTION_FACE_OVAL",s),Jt("FACEDETECTION_CONTOURS",X),Jt("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]]),Jt("VERSION","0.4.1646425229")}).call(yi);const gi={};(function(){var o;function n(h){var g=0;return function(){return g<h.length?{done:!1,value:h[g++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(h,g,G){return h==Array.prototype||h==Object.prototype||(h[g]=G.value),h};function m(h){h=[typeof globalThis=="object"&&globalThis,h,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var g=0;g<h.length;++g){var G=h[g];if(G&&G.Math==Math)return G}throw Error("Cannot find global object")}var y=m(this);function I(h,g){if(g)t:{var G=y;h=h.split(".");for(var C=0;C<h.length-1;C++){var M=h[C];if(!(M in G))break t;G=G[M]}h=h[h.length-1],C=G[h],g=g(C),g!=C&&g!=null&&r(G,h,{configurable:!0,writable:!0,value:g})}}I("Symbol",function(h){function g(Q){if(this instanceof g)throw new TypeError("Symbol is not a constructor");return new G(C+(Q||"")+"_"+M++,Q)}function G(Q,B){this.g=Q,r(this,"description",{configurable:!0,writable:!0,value:B})}if(h)return h;G.prototype.toString=function(){return this.g};var C="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",M=0;return g}),I("Symbol.iterator",function(h){if(h)return h;h=Symbol("Symbol.iterator");for(var g="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),G=0;G<g.length;G++){var C=y[g[G]];typeof C=="function"&&typeof C.prototype[h]!="function"&&r(C.prototype,h,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return h});function F(h){return h={next:h},h[Symbol.iterator]=function(){return this},h}function Y(h){var g=typeof Symbol<"u"&&Symbol.iterator&&h[Symbol.iterator];return g?g.call(h):{next:n(h)}}function k(h){if(!(h instanceof Array)){h=Y(h);for(var g,G=[];!(g=h.next()).done;)G.push(g.value);h=G}return h}var et=typeof Object.create=="function"?Object.create:function(h){function g(){}return g.prototype=h,new g},O;if(typeof Object.setPrototypeOf=="function")O=Object.setPrototypeOf;else{var st;t:{var xt={a:!0},Vt={};try{Vt.__proto__=xt,st=Vt.a;break t}catch{}st=!1}O=st?function(h,g){if(h.__proto__=g,h.__proto__!==g)throw new TypeError(h+" is not extensible");return h}:null}var dt=O;function ht(h,g){if(h.prototype=et(g.prototype),h.prototype.constructor=h,dt)dt(h,g);else for(var G in g)if(G!="prototype")if(Object.defineProperties){var C=Object.getOwnPropertyDescriptor(g,G);C&&Object.defineProperty(h,G,C)}else h[G]=g[G];h.ea=g.prototype}function Ht(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Lt(h){if(h.l)throw new TypeError("Generator is already running");h.l=!0}Ht.prototype.o=function(h){this.h=h};function At(h,g){h.j={U:g,V:!0},h.g=h.m||h.s}Ht.prototype.return=function(h){this.j={return:h},this.g=this.s};function _(h,g,G){return h.g=G,{value:g}}function Ee(h){this.g=new Ht,this.h=h}function an(h,g){Lt(h.g);var G=h.g.i;return G?We(h,"return"in G?G.return:function(C){return{value:C,done:!0}},g,h.g.return):(h.g.return(g),$t(h))}function We(h,g,G,C){try{var M=g.call(h.g.i,G);if(!(M instanceof Object))throw new TypeError("Iterator result "+M+" is not an object");if(!M.done)return h.g.l=!1,M;var Q=M.value}catch(B){return h.g.i=null,At(h.g,B),$t(h)}return h.g.i=null,C.call(h.g,Q),$t(h)}function $t(h){for(;h.g.g;)try{var g=h.h(h.g);if(g)return h.g.l=!1,{value:g.value,done:!1}}catch(G){h.g.h=void 0,At(h.g,G)}if(h.g.l=!1,h.g.j){if(g=h.g.j,h.g.j=null,g.V)throw g.U;return{value:g.return,done:!0}}return{value:void 0,done:!0}}function An(h){this.next=function(g){return Lt(h.g),h.g.i?g=We(h,h.g.i.next,g,h.g.o):(h.g.o(g),g=$t(h)),g},this.throw=function(g){return Lt(h.g),h.g.i?g=We(h,h.g.i.throw,g,h.g.o):(At(h.g,g),g=$t(h)),g},this.return=function(g){return an(h,g)},this[Symbol.iterator]=function(){return this}}function de(h,g){return g=new An(new Ee(g)),dt&&h.prototype&&dt(g,h.prototype),g}function gt(h,g){h instanceof String&&(h+="");var G=0,C=!1,M={next:function(){if(!C&&G<h.length){var Q=G++;return{value:g(Q,h[Q]),done:!1}}return C=!0,{done:!0,value:void 0}}};return M[Symbol.iterator]=function(){return M},M}var pn=typeof Object.assign=="function"?Object.assign:function(h,g){for(var G=1;G<arguments.length;G++){var C=arguments[G];if(C)for(var M in C)Object.prototype.hasOwnProperty.call(C,M)&&(h[M]=C[M])}return h};I("Object.assign",function(h){return h||pn}),I("Promise",function(h){function g(B){this.h=0,this.i=void 0,this.g=[],this.o=!1;var tt=this.j();try{B(tt.resolve,tt.reject)}catch(ct){tt.reject(ct)}}function G(){this.g=null}function C(B){return B instanceof g?B:new g(function(tt){tt(B)})}if(h)return h;G.prototype.h=function(B){if(this.g==null){this.g=[];var tt=this;this.i(function(){tt.l()})}this.g.push(B)};var M=y.setTimeout;G.prototype.i=function(B){M(B,0)},G.prototype.l=function(){for(;this.g&&this.g.length;){var B=this.g;this.g=[];for(var tt=0;tt<B.length;++tt){var ct=B[tt];B[tt]=null;try{ct()}catch(s){this.j(s)}}}this.g=null},G.prototype.j=function(B){this.i(function(){throw B})},g.prototype.j=function(){function B(s){return function(X){ct||(ct=!0,s.call(tt,X))}}var tt=this,ct=!1;return{resolve:B(this.C),reject:B(this.l)}},g.prototype.C=function(B){if(B===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(B instanceof g)this.F(B);else{t:switch(typeof B){case"object":var tt=B!=null;break t;case"function":tt=!0;break t;default:tt=!1}tt?this.u(B):this.m(B)}},g.prototype.u=function(B){var tt=void 0;try{tt=B.then}catch(ct){this.l(ct);return}typeof tt=="function"?this.G(tt,B):this.m(B)},g.prototype.l=function(B){this.s(2,B)},g.prototype.m=function(B){this.s(1,B)},g.prototype.s=function(B,tt){if(this.h!=0)throw Error("Cannot settle("+B+", "+tt+"): Promise already settled in state"+this.h);this.h=B,this.i=tt,this.h===2&&this.D(),this.A()},g.prototype.D=function(){var B=this;M(function(){if(B.B()){var tt=y.console;typeof tt<"u"&&tt.error(B.i)}},1)},g.prototype.B=function(){if(this.o)return!1;var B=y.CustomEvent,tt=y.Event,ct=y.dispatchEvent;return typeof ct>"u"?!0:(typeof B=="function"?B=new B("unhandledrejection",{cancelable:!0}):typeof tt=="function"?B=new tt("unhandledrejection",{cancelable:!0}):(B=y.document.createEvent("CustomEvent"),B.initCustomEvent("unhandledrejection",!1,!0,B)),B.promise=this,B.reason=this.i,ct(B))},g.prototype.A=function(){if(this.g!=null){for(var B=0;B<this.g.length;++B)Q.h(this.g[B]);this.g=null}};var Q=new G;return g.prototype.F=function(B){var tt=this.j();B.J(tt.resolve,tt.reject)},g.prototype.G=function(B,tt){var ct=this.j();try{B.call(tt,ct.resolve,ct.reject)}catch(s){ct.reject(s)}},g.prototype.then=function(B,tt){function ct(w,N){return typeof w=="function"?function(A){try{s(w(A))}catch(U){X(U)}}:N}var s,X,R=new g(function(w,N){s=w,X=N});return this.J(ct(B,s),ct(tt,X)),R},g.prototype.catch=function(B){return this.then(void 0,B)},g.prototype.J=function(B,tt){function ct(){switch(s.h){case 1:B(s.i);break;case 2:tt(s.i);break;default:throw Error("Unexpected state: "+s.h)}}var s=this;this.g==null?Q.h(ct):this.g.push(ct),this.o=!0},g.resolve=C,g.reject=function(B){return new g(function(tt,ct){ct(B)})},g.race=function(B){return new g(function(tt,ct){for(var s=Y(B),X=s.next();!X.done;X=s.next())C(X.value).J(tt,ct)})},g.all=function(B){var tt=Y(B),ct=tt.next();return ct.done?C([]):new g(function(s,X){function R(A){return function(U){w[A]=U,N--,N==0&&s(w)}}var w=[],N=0;do w.push(void 0),N++,C(ct.value).J(R(w.length-1),X),ct=tt.next();while(!ct.done)})},g}),I("Object.is",function(h){return h||function(g,G){return g===G?g!==0||1/g===1/G:g!==g&&G!==G}}),I("Array.prototype.includes",function(h){return h||function(g,G){var C=this;C instanceof String&&(C=String(C));var M=C.length;for(G=G||0,0>G&&(G=Math.max(G+M,0));G<M;G++){var Q=C[G];if(Q===g||Object.is(Q,g))return!0}return!1}}),I("String.prototype.includes",function(h){return h||function(g,G){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(g instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(g,G||0)!==-1}}),I("Array.prototype.keys",function(h){return h||function(){return gt(this,function(g){return g})}});var jn=this||self;function Re(h,g){h=h.split(".");var G=jn;h[0]in G||typeof G.execScript>"u"||G.execScript("var "+h[0]);for(var C;h.length&&(C=h.shift());)h.length||g===void 0?G[C]&&G[C]!==Object.prototype[C]?G=G[C]:G=G[C]={}:G[C]=g}function Jt(h,g){return g=String.fromCharCode.apply(null,g),h==null?g:h+g}var Te,on=typeof TextDecoder<"u",Xn,Fn=typeof TextEncoder<"u";function xn(h){if(Fn)h=(Xn||(Xn=new TextEncoder)).encode(h);else{var g=void 0;g=g===void 0?!1:g;for(var G=0,C=new Uint8Array(3*h.length),M=0;M<h.length;M++){var Q=h.charCodeAt(M);if(128>Q)C[G++]=Q;else{if(2048>Q)C[G++]=Q>>6|192;else{if(55296<=Q&&57343>=Q){if(56319>=Q&&M<h.length){var B=h.charCodeAt(++M);if(56320<=B&&57343>=B){Q=1024*(Q-55296)+B-56320+65536,C[G++]=Q>>18|240,C[G++]=Q>>12&63|128,C[G++]=Q>>6&63|128,C[G++]=Q&63|128;continue}else M--}if(g)throw Error("Found an unpaired surrogate");Q=65533}C[G++]=Q>>12|224,C[G++]=Q>>6&63|128}C[G++]=Q&63|128}}h=C.subarray(0,G)}return h}var Nn={},dn=null;function bn(h,g){g===void 0&&(g=0),Oe(),g=Nn[g];for(var G=Array(Math.floor(h.length/3)),C=g[64]||"",M=0,Q=0;M<h.length-2;M+=3){var B=h[M],tt=h[M+1],ct=h[M+2],s=g[B>>2];B=g[(B&3)<<4|tt>>4],tt=g[(tt&15)<<2|ct>>6],ct=g[ct&63],G[Q++]=s+B+tt+ct}switch(s=0,ct=C,h.length-M){case 2:s=h[M+1],ct=g[(s&15)<<2]||C;case 1:h=h[M],G[Q]=g[h>>2]+g[(h&3)<<4|s>>4]+ct+C}return G.join("")}function kn(h){var g=h.length,G=3*g/4;G%3?G=Math.floor(G):"=.".indexOf(h[g-1])!=-1&&(G="=.".indexOf(h[g-2])!=-1?G-2:G-1);var C=new Uint8Array(G),M=0;return Hn(h,function(Q){C[M++]=Q}),C.subarray(0,M)}function Hn(h,g){function G(ct){for(;C<h.length;){var s=h.charAt(C++),X=dn[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 M=G(-1),Q=G(0),B=G(64),tt=G(64);if(tt===64&&M===-1)break;g(M<<2|Q>>4),B!=64&&(g(Q<<4&240|B>>2),tt!=64&&g(B<<6&192|tt))}}function Oe(){if(!dn){dn={};for(var h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),g=["+/=","+/","-_=","-_.","-_"],G=0;5>G;G++){var C=h.concat(g[G].split(""));Nn[G]=C;for(var M=0;M<C.length;M++){var Q=C[M];dn[Q]===void 0&&(dn[Q]=M)}}}}var je=typeof Uint8Array.prototype.slice=="function",In;function Vn(h,g,G){return g===G?In||(In=new Uint8Array(0)):je?h.slice(g,G):new Uint8Array(h.subarray(g,G))}var he=0,Ye=0;function Pe(h,g){g=g===void 0?{}:g,g=g.v===void 0?!1:g.v,this.h=null,this.g=this.j=this.l=0,this.m=!1,this.v=g,h&&ne(this,h)}function ne(h,g){g=g.constructor===Uint8Array?g:g.constructor===ArrayBuffer?new Uint8Array(g):g.constructor===Array?new Uint8Array(g):g.constructor===String?kn(g):g instanceof Uint8Array?new Uint8Array(g.buffer,g.byteOffset,g.byteLength):new Uint8Array(0),h.h=g,h.l=0,h.j=h.h.length,h.g=h.l}Pe.prototype.reset=function(){this.g=this.l};function Ve(h){for(var g=128,G=0,C=0,M=0;4>M&&128<=g;M++)g=h.h[h.g++],G|=(g&127)<<7*M;if(128<=g&&(g=h.h[h.g++],G|=(g&127)<<28,C|=(g&127)>>4),128<=g)for(M=0;5>M&&128<=g;M++)g=h.h[h.g++],C|=(g&127)<<7*M+3;if(128>g)return h=G>>>0,g=C>>>0,(C=g&2147483648)&&(h=~h+1>>>0,g=~g>>>0,h==0&&(g=g+1>>>0)),h=4294967296*g+(h>>>0),C?-h:h;h.m=!0}Pe.prototype.i=function(){var h=this.h,g=h[this.g],G=g&127;return 128>g?(this.g+=1,G):(g=h[this.g+1],G|=(g&127)<<7,128>g?(this.g+=2,G):(g=h[this.g+2],G|=(g&127)<<14,128>g?(this.g+=3,G):(g=h[this.g+3],G|=(g&127)<<21,128>g?(this.g+=4,G):(g=h[this.g+4],G|=(g&15)<<28,128>g?(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],g=this.h[this.g+1],G=this.h[this.g+2],C=this.h[this.g+3];return this.g+=4,G=(h<<0|g<<8|G<<16|C<<24)>>>0,h=2*(G>>31)+1,g=G>>>23&255,G&=8388607,g==255?G?NaN:1/0*h:g==0?h*Math.pow(2,-149)*G:h*Math.pow(2,g-150)*(G+Math.pow(2,23))};var sn=[];function Me(){this.g=new Uint8Array(64),this.h=0}Me.prototype.push=function(h){if(!(this.h+1<this.g.length)){var g=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(g)}this.g[this.h++]=h},Me.prototype.length=function(){return this.h},Me.prototype.end=function(){var h=this.g,g=this.h;return this.h=0,Vn(h,0,g)};function Qt(h,g){for(;127<g;)h.push(g&127|128),g>>>=7;h.push(g)}function Ze(h){var g={},G=g.N===void 0?!1:g.N;this.o={v:g.v===void 0?!1:g.v},this.N=G,g=this.o,sn.length?(G=sn.pop(),g&&(G.v=g.v),h&&ne(G,h),h=G):h=new Pe(h,g),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 Ce(h){var g=h.g;if((g=g.g==g.j)||(g=h.j)||(g=h.g,g=g.m||0>g.g||g.g>g.j),g)return!1;h.m=h.g.g,g=h.g.i();var G=g&7;return G!=0&&G!=5&&G!=1&&G!=2&&G!=3&&G!=4?(h.j=!0,!1):(h.i=g,h.l=g>>>3,h.h=G,!0)}function Bt(h){switch(h.h){case 0:if(h.h!=0)Bt(h);else{for(h=h.g;h.h[h.g]&128;)h.g++;h.g++}break;case 1:h.h!=1?Bt(h):(h=h.g,h.g+=8);break;case 2:if(h.h!=2)Bt(h);else{var g=h.g.i();h=h.g,h.g+=g}break;case 5:h.h!=5?Bt(h):(h=h.g,h.g+=4);break;case 3:g=h.l;do{if(!Ce(h)){h.j=!0;break}if(h.h==4){h.l!=g&&(h.j=!0);break}Bt(h)}while(1);break;default:h.j=!0}}function Ie(h,g,G){var C=h.g.j,M=h.g.i(),Q=h.g.g+M;if(h.g.j=Q,G(g,h),G=Q-h.g.g,G!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+M+" bytes, instead read "+(M-G)+" bytes, either the data ended unexpectedly or the message misreported its own length");return h.g.g=Q,h.g.j=C,g}function zt(h){return h.g.o()}function ye(h){var g=h.g.i();h=h.g;var G=h.g;h.g+=g,h=h.h;var C;if(on)(C=Te)||(C=Te=new TextDecoder("utf-8",{fatal:!1})),C=C.decode(h.subarray(G,G+g));else{g=G+g;for(var M=[],Q=null,B,tt,ct;G<g;)B=h[G++],128>B?M.push(B):224>B?G>=g?M.push(65533):(tt=h[G++],194>B||(tt&192)!==128?(G--,M.push(65533)):M.push((B&31)<<6|tt&63)):240>B?G>=g-1?M.push(65533):(tt=h[G++],(tt&192)!==128||B===224&&160>tt||B===237&&160<=tt||((C=h[G++])&192)!==128?(G--,M.push(65533)):M.push((B&15)<<12|(tt&63)<<6|C&63)):244>=B?G>=g-2?M.push(65533):(tt=h[G++],(tt&192)!==128||(B<<28)+(tt-144)>>30!==0||((C=h[G++])&192)!==128||((ct=h[G++])&192)!==128?(G--,M.push(65533)):(B=(B&7)<<18|(tt&63)<<12|(C&63)<<6|ct&63,B-=65536,M.push((B>>10&1023)+55296,(B&1023)+56320))):M.push(65533),8192<=M.length&&(Q=Jt(Q,M),M.length=0);C=Jt(Q,M)}return C}function we(h,g,G){var C=h.g.i();for(C=h.g.g+C;h.g.g<C;)G.push(g.call(h.g))}function $e(h,g){h.h==2?we(h,Pe.prototype.o,g):g.push(zt(h))}function Xe(){this.h=[],this.i=0,this.g=new Me}function Ot(h,g){g.length!==0&&(h.h.push(g),h.i+=g.length)}function ze(h){var g=h.i+h.g.length();if(g===0)return new Uint8Array(0);g=new Uint8Array(g);for(var G=h.h,C=G.length,M=0,Q=0;Q<C;Q++){var B=G[Q];B.length!==0&&(g.set(B,M),M+=B.length)}return G=h.g,C=G.h,C!==0&&(g.set(G.g.subarray(0,C),M),G.h=0),h.h=[g],g}function _e(h,g,G){if(G!=null){Qt(h.g,8*g+5),h=h.g;var C=G;C=(G=0>C?1:0)?-C:C,C===0?0<1/C?he=Ye=0:(Ye=0,he=2147483648):isNaN(C)?(Ye=0,he=2147483647):34028234663852886e22<C?(Ye=0,he=(G<<31|2139095040)>>>0):11754943508222875e-54>C?(C=Math.round(C/Math.pow(2,-149)),Ye=0,he=(G<<31|C)>>>0):(g=Math.floor(Math.log(C)/Math.LN2),C*=Math.pow(2,-g),C=Math.round(8388608*C),16777216<=C&&++g,Ye=0,he=(G<<31|g+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 Se=typeof Uint8Array=="function";function Wn(h,g,G){if(h!=null)return typeof h=="object"?Se&&h instanceof Uint8Array?G(h):ln(h,g,G):g(h)}function ln(h,g,G){if(Array.isArray(h)){for(var C=Array(h.length),M=0;M<h.length;M++)C[M]=Wn(h[M],g,G);return Array.isArray(h)&&h.W&&ve(C),C}C={};for(M in h)C[M]=Wn(h[M],g,G);return C}function Qe(h){return typeof h=="number"?isFinite(h)?h:String(h):h}var un={W:{value:!0,configurable:!0}};function ve(h){return Array.isArray(h)&&!Object.isFrozen(h)&&Object.defineProperties(h,un),h}var Le;function Ge(h,g,G){var C=Le;Le=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)||Se&&C instanceof Uint8Array))){this.l=h-this.j,this.i=C;break t}g!==void 0&&-1<g?(this.l=Math.max(g,h+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(G)for(g=0;g<G.length;g++)h=G[g],h<this.l?(h+=this.j,(C=this.h[h])?ve(C):this.h[h]=re):(De(this),(C=this.i[h])?ve(C):this.i[h]=re)}var re=Object.freeze(ve([]));function De(h){var g=h.l+h.j;h.h[g]||(h.i=h.h[g]={})}function te(h,g,G){return g===-1?null:(G===void 0?0:G)||g>=h.l?h.i?h.i[g]:void 0:h.h[g+h.j]}function Pt(h,g){var G=G===void 0?!1:G,C=te(h,g,G);return C==null&&(C=re),C===re&&(C=ve([]),Wt(h,g,C,G)),C}function hn(h){var g=Pt(h,3);if(h.m||(h.m={}),!h.m[3]){for(var G=0;G<g.length;G++)g[G]=+g[G];h.m[3]=!0}return g}function fe(h,g,G){return h=te(h,g),h==null?G:h}function Nt(h,g,G){return h=te(h,g),h=h==null?h:+h,h==null?G===void 0?0:G:h}function Wt(h,g,G,C){(C===void 0?0:C)||g>=h.l?(De(h),h.i[g]=G):h.h[g+h.j]=G}function ie(h,g,G){if(G===-1)return null;if(h.g||(h.g={}),!h.g[G]){var C=te(h,G,!1);C&&(h.g[G]=new g(C))}return h.g[G]}function Fe(h,g){h.g||(h.g={});var G=h.g[1];if(!G){var C=Pt(h,1);G=[];for(var M=0;M<C.length;M++)G[M]=new g(C[M]);h.g[1]=G}return G}function ee(h,g,G){var C=C===void 0?!1:C;h.g||(h.g={});var M=G&&nt(G);h.g[g]=G,Wt(h,g,M,C)}function oe(h,g,G,C){var M=Fe(h,G);g=g||new G,h=Pt(h,1),C!=null?(M.splice(C,0,g),h.splice(C,0,nt(g))):(M.push(g),h.push(nt(g)))}Ge.prototype.toJSON=function(){var h=nt(this);return ln(h,Qe,bn)};function nt(h,g){if(h.g)for(var G in h.g){var C=h.g[G];if(Array.isArray(C))for(var M=0;M<C.length;M++)C[M]&&nt(C[M]);else C&&nt(C)}return h.h}Ge.prototype.toString=function(){return nt(this).toString()};function ot(h,g){if(h=h.o){Ot(g,g.g.end());for(var G=0;G<h.length;G++)Ot(g,h[G])}}function at(h,g){if(g.h==4)return!1;var G=g.m;return Bt(g),g.N||(g=Vn(g.g.h,G,g.g.g),(G=h.o)?G.push(g):h.o=[g]),!0}function _t(h){Ge.call(this,h,-1,ue)}ht(_t,Ge),_t.prototype.getRows=function(){return te(this,1)},_t.prototype.getCols=function(){return te(this,2)},_t.prototype.getPackedDataList=function(){return hn(this)},_t.prototype.getLayout=function(){return fe(this,4,0)};function ae(h,g){for(;Ce(g);)switch(g.i){case 8:var G=g.g.i();Wt(h,1,G);break;case 16:G=g.g.i(),Wt(h,2,G);break;case 29:case 26:$e(g,h.getPackedDataList());break;case 32:G=Ve(g.g),Wt(h,4,G);break;default:if(!at(h,g))return h}return h}var ue=[3];function Tt(h,g){var G=void 0;return new(G||(G=Promise))(function(C,M){function Q(ct){try{tt(g.next(ct))}catch(s){M(s)}}function B(ct){try{tt(g.throw(ct))}catch(s){M(s)}}function tt(ct){ct.done?C(ct.value):new G(function(s){s(ct.value)}).then(Q,B)}tt((g=g.apply(h,void 0)).next())})}function me(h){Ge.call(this,h)}ht(me,Ge);function Ne(h,g){for(;Ce(g);)switch(g.i){case 8:var G=g.g.i();Wt(h,1,G);break;case 21:G=zt(g),Wt(h,2,G);break;case 26:G=ye(g),Wt(h,3,G);break;case 34:G=ye(g),Wt(h,4,G);break;default:if(!at(h,g))return h}return h}function qe(h){Ge.call(this,h,-1,tn)}ht(qe,Ge),qe.prototype.addClassification=function(h,g){return oe(this,h,me,g),this};var tn=[1];function fn(h){Ge.call(this,h)}ht(fn,Ge);function yn(h,g){for(;Ce(g);)switch(g.i){case 13:var G=zt(g);Wt(h,1,G);break;case 21:G=zt(g),Wt(h,2,G);break;case 29:G=zt(g),Wt(h,3,G);break;case 37:G=zt(g),Wt(h,4,G);break;case 45:G=zt(g),Wt(h,5,G);break;default:if(!at(h,g))return h}return h}function He(h){Ge.call(this,h,-1,zn)}ht(He,Ge);function en(h){t:{var g=new He;for(h=new Ze(h);Ce(h);)switch(h.i){case 10:var G=Ie(h,new fn,yn);oe(g,G,fn,void 0);break;default:if(!at(g,h))break t}}return g}var zn=[1];function nn(h){Ge.call(this,h)}ht(nn,Ge);function Je(h){Ge.call(this,h,-1,Sn)}ht(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 hn(this)},Je.prototype.getIndexBufferList=function(){return Pt(this,4)};function Zn(h,g){for(;Ce(g);)switch(g.i){case 8:var G=Ve(g.g);Wt(h,1,G);break;case 16:G=Ve(g.g),Wt(h,2,G);break;case 29:case 26:$e(g,h.getVertexBufferList());break;case 32:case 34:G=g;var C=h.getIndexBufferList();G.h==2?we(G,Pe.prototype.i,C):C.push(G.g.i());break;default:if(!at(h,g))return h}return h}var Sn=[3,4];function Be(h){Ge.call(this,h)}ht(Be,Ge),Be.prototype.getMesh=function(){return ie(this,Je,1)},Be.prototype.getPoseTransformMatrix=function(){return ie(this,_t,2)};function En(h){t:{var g=new Be;for(h=new Ze(h);Ce(h);)switch(h.i){case 10:var G=Ie(h,new Je,Zn);ee(g,1,G);break;case 18:G=Ie(h,new _t,ae),ee(g,2,G);break;default:if(!at(g,h))break t}}return g}function rn(h,g,G){if(G=h.createShader(G===0?h.VERTEX_SHADER:h.FRAGMENT_SHADER),h.shaderSource(G,g),h.compileShader(G),!h.getShaderParameter(G,h.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
70
|
+
`+g.getProgramInfoLog(f));e=o.o=f,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 Gt(o,d){return d+o}function Bt(o,d){window[o]=d}function xt(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 Xt(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||Gt,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=w(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=Xt.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function It(o){var d,g,e,u,f,t,c,a,b,I,Y;return gt(function(L){switch(L.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(L,ht(),2)):L.return();case 2:if(g=L.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 j=l(o,U.url);if(U.path!==void 0){var Q=U.path;j=j.then(function(D){return o.overrideFile(Q,D),Promise.resolve(D)})}return j})),b=Promise.all(c.map(function(U){return U.simd===void 0||U.simd&&g||!U.simd&&!g?xt(o.locateFile(U.url,o.$)):Promise.resolve()})).then(function(){var U,j,Q;return gt(function(D){if(D.g==1)return U=window.createMediapipeSolutionsWasm,j=window.createMediapipeSolutionsPackedAssets,Q=o,P(D,U(j),2);Q.h=D.h,D.g=0})}),I=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(L,Promise.all([b,a,I]),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,E(e)),u=o,P(L,createMediapipeSolutionsWasm(Module),6);case 6:u.h=L.h,o.l=new OffscreenCanvas(1,1),o.h.canvas=o.l,f=o.h.GL.createContext(o.l,{antialias:!1,alpha:!1,ja:typeof WebGL2RenderingContext<"u"?2:1}),o.h.GL.makeContextCurrent(f),L.g=4;break;case 7:if(o.l=document.createElement("canvas"),Y=o.l.getContext("webgl2",{}),!Y&&(Y=o.l.getContext("webgl",{}),!Y))return alert("Failed to create WebGL canvas context when passing video frame."),L.return();o.G=Y,o.h.canvas=o.l,o.h.createContext(o.l,!0,!0,{});case 4:o.i=new o.h.SolutionWasm,o.Z=!1,L.g=0}})}function wt(o){var d,g,e,u,f,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=w(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(f=w(o.g.listeners),t=f.next();!t.done;t=f.next())c=t.value,T(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=[],f={},t=w(Object.keys(o)),c=t.next();!c.done;f={R:f.R,S:f.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&&(f.R=c.onChange,f.S=o[a],e.push(function(b){return function(){var I;return gt(function(Y){if(Y.g==1)return P(Y,b.R(b.S),2);I=Y.h,I===!0&&(g.s=!0),Y.g=0})}}(f))),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 Yt(o){var d,g,e,u,f,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=w(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,f=w(o.B),t=f.next();!t.done;t=f.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,It(o),2):d.g!=3?P(d,wt(o),3):P(d,Yt(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(f){return f.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,f,t,c,a,b,I,Y;return gt(function(L){switch(L.g){case 1:return g.g.inputs?(e=1e3*(d==null?performance.now():d),P(L,g.D,2)):L.return();case 2:return P(L,g.initialize(),3);case 3:for(u=new g.h.PacketDataList,f=w(Object.keys(o)),t=f.next();!t.done;t=f.next())if(c=t.value,a=g.g.inputs[c]){t:{var U=o[c];switch(a.type){case"video":var j=g.o[a.stream];if(j||(j=new K(g.h,g.G),g.o[a.stream]=j),j.l===0&&(j.l=j.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:j.l,width:Q,height:D},Q=j.g,Q.canvas.width=D.width,Q.canvas.height=D.height,Q.activeTexture(Q.TEXTURE0),j.h.bindTexture2d(j.l),Q.texImage2D(Q.TEXTURE_2D,0,Q.RGBA,Q.RGBA,Q.UNSIGNED_BYTE,U),j.h.bindTexture2d(0),j=D;break t;case"detections":for(j=g.o[a.stream],j||(j=new $(g.h),g.o[a.stream]=j),j.data||(j.data=new j.g.DetectionListData),j.data.reset(U.length),D=0;D<U.length;++D){Q=U[D];var st=j.data,ft=st.setBoundingBox,mt=D,vt=Q.boundingBox,Zt=new v;if(Ct(Zt,1,vt.xCenter),Ct(Zt,2,vt.yCenter),Ct(Zt,3,vt.height),Ct(Zt,4,vt.width),Ct(Zt,5,vt.rotation),Ct(Zt,6,vt.rectId),vt=z(Zt,C),ft.call(st,mt,vt),Q.landmarks)for(st=0;st<Q.landmarks.length;++st){Zt=Q.landmarks[st];var Kt=!!Zt.visibility;ft=j.data,mt=ft.addNormalizedLandmark,vt=D,Zt=Object.assign(Object.assign({},Zt),{visibility:Kt?Zt.visibility:0}),Kt=new pe,Ct(Kt,1,Zt.x),Ct(Kt,2,Zt.y),Ct(Kt,3,Zt.z),Zt.visibility&&Ct(Kt,4,Zt.visibility),Zt=z(Kt,ge),mt.call(ft,vt,Zt)}if(Q.V)for(st=0;st<Q.V.length;++st)ft=j.data,mt=ft.addClassification,vt=D,Zt=Q.V[st],Kt=new Et,Ct(Kt,2,Zt.ga),Zt.index&&Ct(Kt,1,Zt.index),Zt.label&&Ct(Kt,3,Zt.label),Zt.displayName&&Ct(Kt,4,Zt.displayName),Zt=z(Kt,Tt),mt.call(ft,vt,Zt)}j=j.data;break t;default:j={}}}switch(b=j,I=a.stream,a.type){case"video":u.pushTexture2d(Object.assign(Object.assign({},b),{stream:I,timestamp:e}));break;case"detections":Y=b,Y.stream=I,Y.timestamp=e,u.pushDetectionList(Y);break;default:throw Error("Unknown input config type: '"+a.type+"'")}}return g.i.send(u),P(L,g.D,4);case 4:u.delete(),L.g=0}})};function Z(o,d,g){var e,u,f,t,c,a,b,I,Y,L,U,j,Q,D;return gt(function(st){switch(st.g){case 1:if(!g)return st.return(d);for(e={},u=0,f=w(Object.keys(g)),t=f.next();!t.done;t=f.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=w(Object.keys(g)),t=b.next();case 2:if(t.done){st.g=4;break}if(I=t.value,Y=g[I],typeof Y=="string")return Q=e,D=I,P(st,x(o,I,d[Y]),14);if(L=d[Y.stream],Y.type==="detection_list"){if(L){for(var ft=L.getRectList(),mt=L.getLandmarksList(),vt=L.getClassificationsList(),Zt=[],Kt=0;Kt<ft.size();++Kt){var se=V(ft.get(Kt),v,C);se={boundingBox:{xCenter:ie(se,1),yCenter:ie(se,2),height:ie(se,3),width:ie(se,4),rotation:ie(se,5,0),rectId:oe(se,6)},landmarks:Ye(V(mt.get(Kt),Je,h),pe,1).map(N),V:F(V(vt.get(Kt),kt,Qt))},Zt.push(se)}ft=Zt}else ft=[];e[I]=ft,st.g=7;break}if(Y.type==="proto_list"){if(L){for(ft=Array(L.size()),mt=0;mt<L.size();mt++)ft[mt]=L.get(mt);L.delete()}else ft=[];e[I]=ft,st.g=7;break}if(L===void 0){st.g=3;break}if(Y.type==="float_list"){e[I]=L,st.g=7;break}if(Y.type==="proto"){e[I]=L,st.g=7;break}if(Y.type!=="texture")throw Error("Unknown output config type: '"+Y.type+"'");return U=o.u[I],U||(U=new K(o.h,o.G),o.u[I]=U),P(st,B(U,L,o.I),13);case 13:j=st.h,e[I]=j;case 7:Y.transform&&e[I]&&(e[I]=Y.transform(e[I])),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 x(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 K(o.h,o.G),o.u[d]=e),u.return(B(e,g,o.I))):u.return(void 0)})}function T(o,d){for(var g=d.name||"$",e=[].concat(E(d.wants)),u=new o.h.StringList,f=w(d.wants),t=f.next();!t.done;t=f.next())u.push_back(t.value);f=o.h.PacketListener.implement({onResults:function(c){for(var a={},b=0;b<d.wants.length;++b)a[e[b]]=c.get(b);var I=o.listeners[g];I&&(o.D=Z(o,a,d.outs).then(function(Y){Y=I(Y);for(var L=0;L<d.wants.length;++L){var U=a[e[L]];typeof U=="object"&&U.hasOwnProperty&&U.hasOwnProperty("delete")&&U.delete()}Y&&(o.D=Y)}))}}),o.i.attachMultiListener(u,f),u.delete()}i.onResults=function(o,d){this.listeners[d||"$"]=o},Ht("Solution",Xt),Ht("OptionType",{BOOL:0,NUMBER:1,ia:2,0:"BOOL",1:"NUMBER",2:"STRING"});function J(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 Xt({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 f,t,c,a,b,I;return gt(function(Y){switch(Y.g){case 1:f=u==="short"?["face_detection_short_range.tflite"]:["face_detection_full_range_sparse.tflite"],t=w(f),c=t.next();case 2:if(c.done){Y.g=4;break}return a=c.value,b="third_party/mediapipe/modules/face_detection/"+a,P(Y,l(d.g,a),5);case 5:I=Y.h,d.g.overrideFile(b,I),c=t.next(),Y.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",Y.return(!0)}})}},minDetectionConfidence:e}})}i=J.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)},Ht("FaceDetection",J),Ht("FACEDETECTION_LIPS",A),Ht("FACEDETECTION_LEFT_EYE",_),Ht("FACEDETECTION_LEFT_EYEBROW",M),Ht("FACEDETECTION_RIGHT_EYE",q),Ht("FACEDETECTION_RIGHT_EYEBROW",lt),Ht("FACEDETECTION_FACE_OVAL",s),Ht("FACEDETECTION_CONTOURS",X),Ht("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]]),Ht("VERSION","0.4.1646425229")}).call(fi);const mi={};(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,v){return h==Array.prototype||h==Object.prototype||(h[y]=v.value),h};function p(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 v=h[y];if(v&&v.Math==Math)return v}throw Error("Cannot find global object")}var G=p(this);function S(h,y){if(y)t:{var v=G;h=h.split(".");for(var C=0;C<h.length-1;C++){var A=h[C];if(!(A in v))break t;v=v[A]}h=h[h.length-1],C=v[h],y=y(C),y!=C&&y!=null&&r(v,h,{configurable:!0,writable:!0,value:y})}}S("Symbol",function(h){function y(_){if(this instanceof y)throw new TypeError("Symbol is not a constructor");return new v(C+(_||"")+"_"+A++,_)}function v(_,M){this.g=_,r(this,"description",{configurable:!0,writable:!0,value:M})}if(h)return h;v.prototype.toString=function(){return this.g};var C="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",A=0;return y}),S("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(" "),v=0;v<y.length;v++){var C=G[y[v]];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 w(h){var y=typeof Symbol<"u"&&Symbol.iterator&&h[Symbol.iterator];return y?y.call(h):{next:n(h)}}function E(h){if(!(h instanceof Array)){h=w(h);for(var y,v=[];!(y=h.next()).done;)v.push(y.value);h=v}return h}var et=typeof Object.create=="function"?Object.create:function(h){function y(){}return y.prototype=h,new y},ct;if(typeof Object.setPrototypeOf=="function")ct=Object.setPrototypeOf;else{var dt;t:{var Ft={a:!0},Lt={};try{Lt.__proto__=Ft,dt=Lt.a;break t}catch{}dt=!1}ct=dt?function(h,y){if(h.__proto__=y,h.__proto__!==y)throw new TypeError(h+" is not extensible");return h}:null}var at=ct;function pt(h,y){if(h.prototype=et(y.prototype),h.prototype.constructor=h,at)at(h,y);else for(var v in y)if(v!="prototype")if(Object.defineProperties){var C=Object.getOwnPropertyDescriptor(y,v);C&&Object.defineProperty(h,v,C)}else h[v]=y[v];h.ea=y.prototype}function Mt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Jt(h){if(h.l)throw new TypeError("Generator is already running");h.l=!0}Mt.prototype.o=function(h){this.h=h};function qt(h,y){h.j={U:y,V:!0},h.g=h.m||h.s}Mt.prototype.return=function(h){this.j={return:h},this.g=this.s};function P(h,y,v){return h.g=v,{value:y}}function De(h){this.g=new Mt,this.h=h}function an(h,y){Jt(h.g);var v=h.g.i;return v?Ve(h,"return"in v?v.return:function(C){return{value:C,done:!0}},y,h.g.return):(h.g.return(y),Dt(h))}function Ve(h,y,v,C){try{var A=y.call(h.g.i,v);if(!(A instanceof Object))throw new TypeError("Iterator result "+A+" is not an object");if(!A.done)return h.g.l=!1,A;var _=A.value}catch(M){return h.g.i=null,qt(h.g,M),Dt(h)}return h.g.i=null,C.call(h.g,_),Dt(h)}function Dt(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(v){h.g.h=void 0,qt(h.g,v)}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 Kn(h){this.next=function(y){return Jt(h.g),h.g.i?y=Ve(h,h.g.i.next,y,h.g.o):(h.g.o(y),y=Dt(h)),y},this.throw=function(y){return Jt(h.g),h.g.i?y=Ve(h,h.g.i.throw,y,h.g.o):(qt(h.g,y),y=Dt(h)),y},this.return=function(y){return an(h,y)},this[Symbol.iterator]=function(){return this}}function de(h,y){return y=new Kn(new De(y)),at&&h.prototype&&at(y,h.prototype),y}function gt(h,y){h instanceof String&&(h+="");var v=0,C=!1,A={next:function(){if(!C&&v<h.length){var _=v++;return{value:y(_,h[_]),done:!1}}return C=!0,{done:!0,value:void 0}}};return A[Symbol.iterator]=function(){return A},A}var pn=typeof Object.assign=="function"?Object.assign:function(h,y){for(var v=1;v<arguments.length;v++){var C=arguments[v];if(C)for(var A in C)Object.prototype.hasOwnProperty.call(C,A)&&(h[A]=C[A])}return h};S("Object.assign",function(h){return h||pn}),S("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(lt){q.reject(lt)}}function v(){this.g=null}function C(M){return M instanceof y?M:new y(function(q){q(M)})}if(h)return h;v.prototype.h=function(M){if(this.g==null){this.g=[];var q=this;this.i(function(){q.l()})}this.g.push(M)};var A=G.setTimeout;v.prototype.i=function(M){A(M,0)},v.prototype.l=function(){for(;this.g&&this.g.length;){var M=this.g;this.g=[];for(var q=0;q<M.length;++q){var lt=M[q];M[q]=null;try{lt()}catch(s){this.j(s)}}}this.g=null},v.prototype.j=function(M){this.i(function(){throw M})},y.prototype.j=function(){function M(s){return function(X){lt||(lt=!0,s.call(q,X))}}var q=this,lt=!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(lt){this.l(lt);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;A(function(){if(M.B()){var q=G.console;typeof q<"u"&&q.error(M.i)}},1)},y.prototype.B=function(){if(this.o)return!1;var M=G.CustomEvent,q=G.Event,lt=G.dispatchEvent;return typeof lt>"u"?!0:(typeof M=="function"?M=new M("unhandledrejection",{cancelable:!0}):typeof q=="function"?M=new q("unhandledrejection",{cancelable:!0}):(M=G.document.createEvent("CustomEvent"),M.initCustomEvent("unhandledrejection",!1,!0,M)),M.promise=this,M.reason=this.i,lt(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 v;return y.prototype.F=function(M){var q=this.j();M.J(q.resolve,q.reject)},y.prototype.G=function(M,q){var lt=this.j();try{M.call(q,lt.resolve,lt.reject)}catch(s){lt.reject(s)}},y.prototype.then=function(M,q){function lt(F,N){return typeof F=="function"?function(K){try{s(F(K))}catch(B){X(B)}}:N}var s,X,R=new y(function(F,N){s=F,X=N});return this.J(lt(M,s),lt(q,X)),R},y.prototype.catch=function(M){return this.then(void 0,M)},y.prototype.J=function(M,q){function lt(){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(lt):this.g.push(lt),this.o=!0},y.resolve=C,y.reject=function(M){return new y(function(q,lt){lt(M)})},y.race=function(M){return new y(function(q,lt){for(var s=w(M),X=s.next();!X.done;X=s.next())C(X.value).J(q,lt)})},y.all=function(M){var q=w(M),lt=q.next();return lt.done?C([]):new y(function(s,X){function R(K){return function(B){F[K]=B,N--,N==0&&s(F)}}var F=[],N=0;do F.push(void 0),N++,C(lt.value).J(R(F.length-1),X),lt=q.next();while(!lt.done)})},y}),S("Object.is",function(h){return h||function(y,v){return y===v?y!==0||1/y===1/v:y!==y&&v!==v}}),S("Array.prototype.includes",function(h){return h||function(y,v){var C=this;C instanceof String&&(C=String(C));var A=C.length;for(v=v||0,0>v&&(v=Math.max(v+A,0));v<A;v++){var _=C[v];if(_===y||Object.is(_,y))return!0}return!1}}),S("String.prototype.includes",function(h){return h||function(y,v){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,v||0)!==-1}}),S("Array.prototype.keys",function(h){return h||function(){return gt(this,function(y){return y})}});var jn=this||self;function Re(h,y){h=h.split(".");var v=jn;h[0]in v||typeof v.execScript>"u"||v.execScript("var "+h[0]);for(var C;h.length&&(C=h.shift());)h.length||y===void 0?v[C]&&v[C]!==Object.prototype[C]?v=v[C]:v=v[C]={}:v[C]=y}function Ht(h,y){return y=String.fromCharCode.apply(null,y),h==null?y:h+y}var Te,on=typeof TextDecoder<"u",Xn,Ln=typeof TextEncoder<"u";function xn(h){if(Ln)h=(Xn||(Xn=new TextEncoder)).encode(h);else{var y=void 0;y=y===void 0?!1:y;for(var v=0,C=new Uint8Array(3*h.length),A=0;A<h.length;A++){var _=h.charCodeAt(A);if(128>_)C[v++]=_;else{if(2048>_)C[v++]=_>>6|192;else{if(55296<=_&&57343>=_){if(56319>=_&&A<h.length){var M=h.charCodeAt(++A);if(56320<=M&&57343>=M){_=1024*(_-55296)+M-56320+65536,C[v++]=_>>18|240,C[v++]=_>>12&63|128,C[v++]=_>>6&63|128,C[v++]=_&63|128;continue}else A--}if(y)throw Error("Found an unpaired surrogate");_=65533}C[v++]=_>>12|224,C[v++]=_>>6&63|128}C[v++]=_&63|128}}h=C.subarray(0,v)}return h}var Nn={},dn=null;function bn(h,y){y===void 0&&(y=0),Oe(),y=Nn[y];for(var v=Array(Math.floor(h.length/3)),C=y[64]||"",A=0,_=0;A<h.length-2;A+=3){var M=h[A],q=h[A+1],lt=h[A+2],s=y[M>>2];M=y[(M&3)<<4|q>>4],q=y[(q&15)<<2|lt>>6],lt=y[lt&63],v[_++]=s+M+q+lt}switch(s=0,lt=C,h.length-A){case 2:s=h[A+1],lt=y[(s&15)<<2]||C;case 1:h=h[A],v[_]=y[h>>2]+y[(h&3)<<4|s>>4]+lt+C}return v.join("")}function En(h){var y=h.length,v=3*y/4;v%3?v=Math.floor(v):"=.".indexOf(h[y-1])!=-1&&(v="=.".indexOf(h[y-2])!=-1?v-2:v-1);var C=new Uint8Array(v),A=0;return Cn(h,function(_){C[A++]=_}),C.subarray(0,A)}function Cn(h,y){function v(lt){for(;C<h.length;){var s=h.charAt(C++),X=dn[s];if(X!=null)return X;if(!/^[\s\xa0]*$/.test(s))throw Error("Unknown base64 encoding at char: "+s)}return lt}Oe();for(var C=0;;){var A=v(-1),_=v(0),M=v(64),q=v(64);if(q===64&&A===-1)break;y(A<<2|_>>4),M!=64&&(y(_<<4&240|M>>2),q!=64&&y(M<<6&192|q))}}function Oe(){if(!dn){dn={};for(var h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),y=["+/=","+/","-_=","-_.","-_"],v=0;5>v;v++){var C=h.concat(y[v].split(""));Nn[v]=C;for(var A=0;A<C.length;A++){var _=C[A];dn[_]===void 0&&(dn[_]=A)}}}}var Ke=typeof Uint8Array.prototype.slice=="function",In;function Wn(h,y,v){return y===v?In||(In=new Uint8Array(0)):Ke?h.slice(y,v):new Uint8Array(h.subarray(y,v))}var he=0,Se=0;function ze(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&&ne(this,h)}function ne(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}ze.prototype.reset=function(){this.g=this.l};function We(h){for(var y=128,v=0,C=0,A=0;4>A&&128<=y;A++)y=h.h[h.g++],v|=(y&127)<<7*A;if(128<=y&&(y=h.h[h.g++],v|=(y&127)<<28,C|=(y&127)>>4),128<=y)for(A=0;5>A&&128<=y;A++)y=h.h[h.g++],C|=(y&127)<<7*A+3;if(128>y)return h=v>>>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}ze.prototype.i=function(){var h=this.h,y=h[this.g],v=y&127;return 128>y?(this.g+=1,v):(y=h[this.g+1],v|=(y&127)<<7,128>y?(this.g+=2,v):(y=h[this.g+2],v|=(y&127)<<14,128>y?(this.g+=3,v):(y=h[this.g+3],v|=(y&127)<<21,128>y?(this.g+=4,v):(y=h[this.g+4],v|=(y&15)<<28,128>y?(this.g+=5,v>>>0):(this.g+=5,128<=h[this.g++]&&128<=h[this.g++]&&128<=h[this.g++]&&128<=h[this.g++]&&this.g++,v)))))},ze.prototype.o=function(){var h=this.h[this.g],y=this.h[this.g+1],v=this.h[this.g+2],C=this.h[this.g+3];return this.g+=4,v=(h<<0|y<<8|v<<16|C<<24)>>>0,h=2*(v>>31)+1,y=v>>>23&255,v&=8388607,y==255?v?NaN:1/0*h:y==0?h*Math.pow(2,-149)*v:h*Math.pow(2,y-150)*(v+Math.pow(2,23))};var sn=[];function Ue(){this.g=new Uint8Array(64),this.h=0}Ue.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},Ue.prototype.length=function(){return this.h},Ue.prototype.end=function(){var h=this.g,y=this.h;return this.h=0,Wn(h,0,y)};function _t(h,y){for(;127<y;)h.push(y&127|128),y>>>=7;h.push(y)}function Ze(h){var y={},v=y.N===void 0?!1:y.N;this.o={v:y.v===void 0?!1:y.v},this.N=v,y=this.o,sn.length?(v=sn.pop(),y&&(v.v=y.v),h&&ne(v,h),h=v):h=new ze(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 Ce(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 v=y&7;return v!=0&&v!=5&&v!=1&&v!=2&&v!=3&&v!=4?(h.j=!0,!1):(h.i=y,h.l=y>>>3,h.h=v,!0)}function At(h){switch(h.h){case 0:if(h.h!=0)At(h);else{for(h=h.g;h.h[h.g]&128;)h.g++;h.g++}break;case 1:h.h!=1?At(h):(h=h.g,h.g+=8);break;case 2:if(h.h!=2)At(h);else{var y=h.g.i();h=h.g,h.g+=y}break;case 5:h.h!=5?At(h):(h=h.g,h.g+=4);break;case 3:y=h.l;do{if(!Ce(h)){h.j=!0;break}if(h.h==4){h.l!=y&&(h.j=!0);break}At(h)}while(1);break;default:h.j=!0}}function xe(h,y,v){var C=h.g.j,A=h.g.i(),_=h.g.g+A;if(h.g.j=_,v(y,h),v=_-h.g.g,v!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+A+" bytes, instead read "+(A-v)+" 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 v=h.g;h.g+=y,h=h.h;var C;if(on)(C=Te)||(C=Te=new TextDecoder("utf-8",{fatal:!1})),C=C.decode(h.subarray(v,v+y));else{y=v+y;for(var A=[],_=null,M,q,lt;v<y;)M=h[v++],128>M?A.push(M):224>M?v>=y?A.push(65533):(q=h[v++],194>M||(q&192)!==128?(v--,A.push(65533)):A.push((M&31)<<6|q&63)):240>M?v>=y-1?A.push(65533):(q=h[v++],(q&192)!==128||M===224&&160>q||M===237&&160<=q||((C=h[v++])&192)!==128?(v--,A.push(65533)):A.push((M&15)<<12|(q&63)<<6|C&63)):244>=M?v>=y-2?A.push(65533):(q=h[v++],(q&192)!==128||(M<<28)+(q-144)>>30!==0||((C=h[v++])&192)!==128||((lt=h[v++])&192)!==128?(v--,A.push(65533)):(M=(M&7)<<18|(q&63)<<12|(C&63)<<6|lt&63,M-=65536,A.push((M>>10&1023)+55296,(M&1023)+56320))):A.push(65533),8192<=A.length&&(_=Ht(_,A),A.length=0);C=Ht(_,A)}return C}function we(h,y,v){var C=h.g.i();for(C=h.g.g+C;h.g.g<C;)v.push(y.call(h.g))}function $e(h,y){h.h==2?we(h,ze.prototype.o,y):y.push(jt(h))}function Xe(){this.h=[],this.i=0,this.g=new Ue}function Ot(h,y){y.length!==0&&(h.h.push(y),h.i+=y.length)}function je(h){var y=h.i+h.g.length();if(y===0)return new Uint8Array(0);y=new Uint8Array(y);for(var v=h.h,C=v.length,A=0,_=0;_<C;_++){var M=v[_];M.length!==0&&(y.set(M,A),A+=M.length)}return v=h.g,C=v.h,C!==0&&(y.set(v.g.subarray(0,C),A),v.h=0),h.h=[y],y}function Pe(h,y,v){if(v!=null){_t(h.g,8*y+5),h=h.g;var C=v;C=(v=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=(v<<31|2139095040)>>>0):11754943508222875e-54>C?(C=Math.round(C/Math.pow(2,-149)),Se=0,he=(v<<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=(v<<31|y+127<<23|C&8388607)>>>0),v=he,h.push(v>>>0&255),h.push(v>>>8&255),h.push(v>>>16&255),h.push(v>>>24&255)}}var Ie=typeof Uint8Array=="function";function Vn(h,y,v){if(h!=null)return typeof h=="object"?Ie&&h instanceof Uint8Array?v(h):ln(h,y,v):y(h)}function ln(h,y,v){if(Array.isArray(h)){for(var C=Array(h.length),A=0;A<h.length;A++)C[A]=Vn(h[A],y,v);return Array.isArray(h)&&h.W&&ve(C),C}C={};for(A in h)C[A]=Vn(h[A],y,v);return C}function _e(h){return typeof h=="number"?isFinite(h)?h:String(h):h}var cn={W:{value:!0,configurable:!0}};function ve(h){return Array.isArray(h)&&!Object.isFrozen(h)&&Object.defineProperties(h,cn),h}var Fe;function Ge(h,y,v){var C=Fe;Fe=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)||Ie&&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(v)for(y=0;y<v.length;y++)h=v[y],h<this.l?(h+=this.j,(C=this.h[h])?ve(C):this.h[h]=re):(Qe(this),(C=this.i[h])?ve(C):this.i[h]=re)}var re=Object.freeze(ve([]));function Qe(h){var y=h.l+h.j;h.h[y]||(h.i=h.h[y]={})}function te(h,y,v){return y===-1?null:(v===void 0?0:v)||y>=h.l?h.i?h.i[y]:void 0:h.h[y+h.j]}function zt(h,y){var v=v===void 0?!1:v,C=te(h,y,v);return C==null&&(C=re),C===re&&(C=ve([]),Vt(h,y,C,v)),C}function hn(h){var y=zt(h,3);if(h.m||(h.m={}),!h.m[3]){for(var v=0;v<y.length;v++)y[v]=+y[v];h.m[3]=!0}return y}function fe(h,y,v){return h=te(h,y),h==null?v:h}function Ct(h,y,v){return h=te(h,y),h=h==null?h:+h,h==null?v===void 0?0:v:h}function Vt(h,y,v,C){(C===void 0?0:C)||y>=h.l?(Qe(h),h.i[y]=v):h.h[y+h.j]=v}function ie(h,y,v){if(v===-1)return null;if(h.g||(h.g={}),!h.g[v]){var C=te(h,v,!1);C&&(h.g[v]=new y(C))}return h.g[v]}function Ye(h,y){h.g||(h.g={});var v=h.g[1];if(!v){var C=zt(h,1);v=[];for(var A=0;A<C.length;A++)v[A]=new y(C[A]);h.g[1]=v}return v}function ee(h,y,v){var C=C===void 0?!1:C;h.g||(h.g={});var A=v&&tt(v);h.g[y]=v,Vt(h,y,A,C)}function oe(h,y,v,C){var A=Ye(h,v);y=y||new v,h=zt(h,1),C!=null?(A.splice(C,0,y),h.splice(C,0,tt(y))):(A.push(y),h.push(tt(y)))}Ge.prototype.toJSON=function(){var h=tt(this);return ln(h,_e,bn)};function tt(h,y){if(h.g)for(var v in h.g){var C=h.g[v];if(Array.isArray(C))for(var A=0;A<C.length;A++)C[A]&&tt(C[A]);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 v=0;v<h.length;v++)Ot(y,h[v])}}function ut(h,y){if(y.h==4)return!1;var v=y.m;return At(y),y.N||(y=Wn(y.g.h,v,y.g.g),(v=h.o)?v.push(y):h.o=[y]),!0}function Pt(h){Ge.call(this,h,-1,ce)}pt(Pt,Ge),Pt.prototype.getRows=function(){return te(this,1)},Pt.prototype.getCols=function(){return te(this,2)},Pt.prototype.getPackedDataList=function(){return hn(this)},Pt.prototype.getLayout=function(){return fe(this,4,0)};function ae(h,y){for(;Ce(y);)switch(y.i){case 8:var v=y.g.i();Vt(h,1,v);break;case 16:v=y.g.i(),Vt(h,2,v);break;case 29:case 26:$e(y,h.getPackedDataList());break;case 32:v=We(y.g),Vt(h,4,v);break;default:if(!ut(h,y))return h}return h}var ce=[3];function St(h,y){var v=void 0;return new(v||(v=Promise))(function(C,A){function _(lt){try{q(y.next(lt))}catch(s){A(s)}}function M(lt){try{q(y.throw(lt))}catch(s){A(s)}}function q(lt){lt.done?C(lt.value):new v(function(s){s(lt.value)}).then(_,M)}q((y=y.apply(h,void 0)).next())})}function me(h){Ge.call(this,h)}pt(me,Ge);function He(h,y){for(;Ce(y);)switch(y.i){case 8:var v=y.g.i();Vt(h,1,v);break;case 21:v=jt(y),Vt(h,2,v);break;case 26:v=ye(y),Vt(h,3,v);break;case 34:v=ye(y),Vt(h,4,v);break;default:if(!ut(h,y))return h}return h}function qe(h){Ge.call(this,h,-1,tn)}pt(qe,Ge),qe.prototype.addClassification=function(h,y){return oe(this,h,me,y),this};var tn=[1];function fn(h){Ge.call(this,h)}pt(fn,Ge);function yn(h,y){for(;Ce(y);)switch(y.i){case 13:var v=jt(y);Vt(h,1,v);break;case 21:v=jt(y),Vt(h,2,v);break;case 29:v=jt(y),Vt(h,3,v);break;case 37:v=jt(y),Vt(h,4,v);break;case 45:v=jt(y),Vt(h,5,v);break;default:if(!ut(h,y))return h}return h}function Le(h){Ge.call(this,h,-1,On)}pt(Le,Ge);function en(h){t:{var y=new Le;for(h=new Ze(h);Ce(h);)switch(h.i){case 10:var v=xe(h,new fn,yn);oe(y,v,fn,void 0);break;default:if(!ut(y,h))break t}}return y}var On=[1];function nn(h){Ge.call(this,h)}pt(nn,Ge);function Ne(h){Ge.call(this,h,-1,Sn)}pt(Ne,Ge),Ne.prototype.getVertexType=function(){return fe(this,1,0)},Ne.prototype.getPrimitiveType=function(){return fe(this,2,0)},Ne.prototype.getVertexBufferList=function(){return hn(this)},Ne.prototype.getIndexBufferList=function(){return zt(this,4)};function Zn(h,y){for(;Ce(y);)switch(y.i){case 8:var v=We(y.g);Vt(h,1,v);break;case 16:v=We(y.g),Vt(h,2,v);break;case 29:case 26:$e(y,h.getVertexBufferList());break;case 32:case 34:v=y;var C=h.getIndexBufferList();v.h==2?we(v,ze.prototype.i,C):C.push(v.g.i());break;default:if(!ut(h,y))return h}return h}var Sn=[3,4];function Be(h){Ge.call(this,h)}pt(Be,Ge),Be.prototype.getMesh=function(){return ie(this,Ne,1)},Be.prototype.getPoseTransformMatrix=function(){return ie(this,Pt,2)};function kn(h){t:{var y=new Be;for(h=new Ze(h);Ce(h);)switch(h.i){case 10:var v=xe(h,new Ne,Zn);ee(y,1,v);break;case 18:v=xe(h,new Pt,ae),ee(y,2,v);break;default:if(!ut(y,h))break t}}return y}function rn(h,y,v){if(v=h.createShader(v===0?h.VERTEX_SHADER:h.FRAGMENT_SHADER),h.shaderSource(v,y),h.compileShader(v),!h.getShaderParameter(v,h.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
72
71
|
|
|
73
|
-
`+h.getShaderInfoLog(
|
|
72
|
+
`+h.getShaderInfoLog(v));return v}function vn(h){return Ye(h,me).map(function(y){return{index:fe(y,1,0),Y:Ct(y,2),label:te(y,3)!=null?fe(y,3,""):void 0,displayName:te(y,4)!=null?fe(y,4,""):void 0}})}function Tn(h){return{x:Ct(h,1),y:Ct(h,2),z:Ct(h,3),visibility:te(h,4)!=null?Ct(h,4):void 0}}function An(h,y){this.h=h,this.g=y,this.l=0}function un(h,y,v){return wn(h,y),typeof h.g.canvas.transferToImageBitmap=="function"?Promise.resolve(h.g.canvas.transferToImageBitmap()):v?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 wn(h,y){var v=h.g;if(h.m===void 0){var C=rn(v,`
|
|
74
73
|
attribute vec2 aVertex;
|
|
75
74
|
attribute vec2 aTex;
|
|
76
75
|
varying vec2 vTex;
|
|
77
76
|
void main(void) {
|
|
78
77
|
gl_Position = vec4(aVertex, 0.0, 1.0);
|
|
79
78
|
vTex = aTex;
|
|
80
|
-
}`,0),
|
|
79
|
+
}`,0),A=rn(v,`
|
|
81
80
|
precision mediump float;
|
|
82
81
|
varying vec2 vTex;
|
|
83
82
|
uniform sampler2D sampler0;
|
|
84
83
|
void main(){
|
|
85
84
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
86
|
-
}`,1),
|
|
85
|
+
}`,1),_=v.createProgram();if(v.attachShader(_,C),v.attachShader(_,A),v.linkProgram(_),!v.getProgramParameter(_,v.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
87
86
|
|
|
88
|
-
`+G.getProgramInfoLog(Q));C=h.m=Q,G.useProgram(C),M=G.getUniformLocation(C,"sampler0"),h.j={I:G.getAttribLocation(C,"aVertex"),H:G.getAttribLocation(C,"aTex"),da:M},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(M,0)}C=h.j,G.useProgram(h.m),G.canvas.width=g.width,G.canvas.height=g.height,G.viewport(0,0,g.width,g.height),G.activeTexture(G.TEXTURE0),h.h.bindTexture2d(g.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 Dn(h){this.g=h}var $n=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,g){return g+h}function Cn(h,g){window[h]=g}function p(h){var g=document.createElement("script");return g.setAttribute("src",h),g.setAttribute("crossorigin","anonymous"),new Promise(function(G){g.addEventListener("load",function(){G()},!1),g.addEventListener("error",function(){G()},!1),document.body.appendChild(g)})}function V(){return Tt(this,function h(){return de(h,function(g){switch(g.g){case 1:return g.m=2,_(g,WebAssembly.instantiate($n),4);case 4:g.g=3,g.m=0;break;case 2:return g.m=0,g.j=null,g.return(!1);case 3:return g.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||wn,typeof window=="object")var g=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")g=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=g,h.options){g=Y(Object.keys(h.options));for(var G=g.next();!G.done;G=g.next()){G=G.value;var C=h.options[G].default;C!==void 0&&(this.j[G]=typeof C=="function"?C():C)}}}o=W.prototype,o.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function E(h,g){return h.g.files===void 0?[]:typeof h.g.files=="function"?h.g.files(g):h.g.files}function P(h){return Tt(h,function g(){var G=this,C,M,Q,B,tt,ct,s,X,R,w,N;return de(g,function(A){switch(A.g){case 1:return C=G,G.R?(M=E(G,G.j),_(A,V(),2)):A.return();case 2:if(Q=A.h,typeof window=="object")return Cn("createMediapipeSolutionsWasm",{locateFile:G.locateFile}),Cn("createMediapipeSolutionsPackedAssets",{locateFile:G.locateFile}),ct=M.filter(function(U){return U.data!==void 0}),s=M.filter(function(U){return U.data===void 0}),X=Promise.all(ct.map(function(U){var rt=it(C,U.url);if(U.path!==void 0){var q=U.path;rt=rt.then(function(yt){return C.overrideFile(q,yt),Promise.resolve(yt)})}return rt})),R=Promise.all(s.map(function(U){return U.simd===void 0||U.simd&&Q||!U.simd&&!Q?p(C.locateFile(U.url,C.S)):Promise.resolve()})).then(function(){return Tt(C,function U(){var rt,q,yt=this;return de(U,function(Gt){if(Gt.g==1)return rt=window.createMediapipeSolutionsWasm,q=window.createMediapipeSolutionsPackedAssets,_(Gt,rt(q),2);yt.h=Gt.h,Gt.g=0})})}),w=function(){return Tt(C,function U(){var rt=this;return de(U,function(q){return rt.g.graph&&rt.g.graph.url?q=_(q,it(rt,rt.g.graph.url),0):(q.g=0,q=void 0),q})})}(),_(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 B=M.filter(function(U){return U.simd===void 0||U.simd&&Q||!U.simd&&!Q}).map(function(U){return C.locateFile(U.url,C.S)}),importScripts.apply(null,k(B)),_(A,createMediapipeSolutionsWasm(Module),6);case 6:G.h=A.h,G.l=new OffscreenCanvas(1,1),G.h.canvas=G.l,tt=G.h.GL.createContext(G.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),G.h.GL.makeContextCurrent(tt),A.g=4;break;case 7:if(G.l=document.createElement("canvas"),N=G.l.getContext("webgl2",{}),!N&&(N=G.l.getContext("webgl",{}),!N))return alert("Failed to create WebGL canvas context when passing video frame."),A.return();G.D=N,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 lt(h){return Tt(h,function g(){var G=this,C,M,Q,B,tt,ct,s,X;return de(g,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,_(R,it(G,G.g.graph.url),3)}for(R.g!=2&&(C=R.h,G.i.loadGraph(C)),M=Y(Object.keys(G.B)),Q=M.next();!Q.done;Q=M.next())B=Q.value,G.i.overrideFile(B,G.B[B]);if(G.B={},G.g.listeners)for(tt=Y(G.g.listeners),ct=tt.next();!ct.done;ct=tt.next())s=ct.value,Ut(G,s);X=G.j,G.j={},G.setOptions(X),R.g=0})})}o.reset=function(){return Tt(this,function h(){var g=this;return de(h,function(G){g.i&&(g.i.reset(),g.m={},g.s={}),G.g=0})})},o.setOptions=function(h,g){var G=this;if(g=g||this.g.options){for(var C=[],M=[],Q={},B=Y(Object.keys(h)),tt=B.next();!tt.done;Q={K:Q.K,L:Q.L},tt=B.next()){var ct=tt.value;ct in this.j&&this.j[ct]===h[ct]||(this.j[ct]=h[ct],tt=g[ct],tt!==void 0&&(tt.onChange&&(Q.K=tt.onChange,Q.L=h[ct],C.push(function(s){return function(){return Tt(G,function X(){var R,w=this;return de(X,function(N){if(N.g==1)return _(N,s.K(s.L),2);R=N.h,R===!0&&(w.o=!0),N.g=0})})}}(Q))),tt.graphOptionXref&&(ct={valueNumber:tt.type===1?h[ct]:0,valueBoolean:tt.type===0?h[ct]:!1,valueString:tt.type===2?h[ct]:""},tt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),tt.graphOptionXref),ct),M.push(tt))))}(C.length!==0||M.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(M),this.u=(this.u===void 0?[]:this.u).concat(C))}};function z(h){return Tt(h,function g(){var G=this,C,M,Q,B,tt,ct,s;return de(g,function(X){switch(X.g){case 1:if(!G.o)return X.return();if(!G.u){X.g=2;break}C=Y(G.u),M=C.next();case 3:if(M.done){X.g=5;break}return Q=M.value,_(X,Q(),4);case 4:M=C.next(),X.g=3;break;case 5:G.u=void 0;case 2:if(G.A){for(B=new G.h.GraphOptionChangeRequestList,tt=Y(G.A),ct=tt.next();!ct.done;ct=tt.next())s=ct.value,B.push_back(s);G.i.changeOptions(B),B.delete(),G.A=void 0}G.o=!1,X.g=0}})})}o.initialize=function(){return Tt(this,function h(){var g=this;return de(h,function(G){return G.g==1?_(G,P(g),2):G.g!=3?_(G,lt(g),3):_(G,z(g),0)})})};function it(h,g){return Tt(h,function G(){var C=this,M,Q;return de(G,function(B){return g in C.F?B.return(C.F[g]):(M=C.locateFile(g,""),Q=fetch(M).then(function(tt){return tt.arrayBuffer()}),C.F[g]=Q,B.return(Q))})})}o.overrideFile=function(h,g){this.i?this.i.overrideFile(h,g):this.B[h]=g},o.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},o.send=function(h,g){return Tt(this,function G(){var C=this,M,Q,B,tt,ct,s,X,R,w;return de(G,function(N){switch(N.g){case 1:return C.g.inputs?(M=1e3*(g==null?performance.now():g),_(N,C.C,2)):N.return();case 2:return _(N,C.initialize(),3);case 3:for(Q=new C.h.PacketDataList,B=Y(Object.keys(h)),tt=B.next();!tt.done;tt=B.next())if(ct=tt.value,s=C.g.inputs[ct]){t:{var A=C,U=h[ct];switch(s.type){case"video":var rt=A.m[s.stream];if(rt||(rt=new Mn(A.h,A.D),A.m[s.stream]=rt),A=rt,A.l===0&&(A.l=A.h.createTexture()),typeof HTMLVideoElement<"u"&&U instanceof HTMLVideoElement){var q=U.videoWidth;rt=U.videoHeight}else typeof HTMLImageElement<"u"&&U instanceof HTMLImageElement?(q=U.naturalWidth,rt=U.naturalHeight):(q=U.width,rt=U.height);rt={glName:A.l,width:q,height:rt},q=A.g,q.canvas.width=rt.width,q.canvas.height=rt.height,q.activeTexture(q.TEXTURE0),A.h.bindTexture2d(A.l),q.texImage2D(q.TEXTURE_2D,0,q.RGBA,q.RGBA,q.UNSIGNED_BYTE,U),A.h.bindTexture2d(0),A=rt;break t;case"detections":for(rt=A.m[s.stream],rt||(rt=new Dn(A.h),A.m[s.stream]=rt),A=rt,A.data||(A.data=new A.g.DetectionListData),A.data.reset(U.length),rt=0;rt<U.length;++rt){q=U[rt];var yt=A.data,Gt=yt.setBoundingBox,Mt=rt,St=q.T,ft=new nn;Wt(ft,1,St.Z),Wt(ft,2,St.$),Wt(ft,3,St.height),Wt(ft,4,St.width),Wt(ft,5,St.rotation),Wt(ft,6,St.X);var Xt=St=new Xe;_e(Xt,1,te(ft,1)),_e(Xt,2,te(ft,2)),_e(Xt,3,te(ft,3)),_e(Xt,4,te(ft,4)),_e(Xt,5,te(ft,5));var Yt=te(ft,6);if(Yt!=null&&Yt!=null){Qt(Xt.g,48);var Ft=Xt.g,Ct=Yt;Yt=0>Ct,Ct=Math.abs(Ct);var l=Ct>>>0;for(Ct=Math.floor((Ct-l)/4294967296),Ct>>>=0,Yt&&(Ct=~Ct>>>0,l=(~l>>>0)+1,4294967295<l&&(l=0,Ct++,4294967295<Ct&&(Ct=0))),he=l,Ye=Ct,Yt=he,l=Ye;0<l||127<Yt;)Ft.push(Yt&127|128),Yt=(Yt>>>7|l<<25)>>>0,l>>>=7;Ft.push(Yt)}if(ot(ft,Xt),St=ze(St),Gt.call(yt,Mt,St),q.O)for(yt=0;yt<q.O.length;++yt)ft=q.O[yt],Xt=!!ft.visibility,Gt=A.data,Mt=Gt.addNormalizedLandmark,St=rt,ft=Object.assign(Object.assign({},ft),{visibility:Xt?ft.visibility:0}),Xt=new fn,Wt(Xt,1,ft.x),Wt(Xt,2,ft.y),Wt(Xt,3,ft.z),ft.visibility&&Wt(Xt,4,ft.visibility),Ft=ft=new Xe,_e(Ft,1,te(Xt,1)),_e(Ft,2,te(Xt,2)),_e(Ft,3,te(Xt,3)),_e(Ft,4,te(Xt,4)),_e(Ft,5,te(Xt,5)),ot(Xt,Ft),ft=ze(ft),Mt.call(Gt,St,ft);if(q.M)for(yt=0;yt<q.M.length;++yt){if(Gt=A.data,Mt=Gt.addClassification,St=rt,ft=q.M[yt],Xt=new me,Wt(Xt,2,ft.Y),ft.index&&Wt(Xt,1,ft.index),ft.label&&Wt(Xt,3,ft.label),ft.displayName&&Wt(Xt,4,ft.displayName),Ft=ft=new Xe,l=te(Xt,1),l!=null&&l!=null)if(Qt(Ft.g,8),Yt=Ft.g,0<=l)Qt(Yt,l);else{for(Ct=0;9>Ct;Ct++)Yt.push(l&127|128),l>>=7;Yt.push(1)}_e(Ft,2,te(Xt,2)),Yt=te(Xt,3),Yt!=null&&(Yt=xn(Yt),Qt(Ft.g,26),Qt(Ft.g,Yt.length),Ot(Ft,Ft.g.end()),Ot(Ft,Yt)),Yt=te(Xt,4),Yt!=null&&(Yt=xn(Yt),Qt(Ft.g,34),Qt(Ft.g,Yt.length),Ot(Ft,Ft.g.end()),Ot(Ft,Yt)),ot(Xt,Ft),ft=ze(ft),Mt.call(Gt,St,ft)}}A=A.data;break t;default:A={}}}switch(X=A,R=s.stream,s.type){case"video":Q.pushTexture2d(Object.assign(Object.assign({},X),{stream:R,timestamp:M}));break;case"detections":w=X,w.stream=R,w.timestamp=M,Q.pushDetectionList(w);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return C.i.send(Q),_(N,C.C,4);case 4:Q.delete(),N.g=0}})})};function bt(h,g,G){return Tt(h,function C(){var M,Q,B,tt,ct,s,X=this,R,w,N,A,U,rt,q,yt;return de(C,function(Gt){switch(Gt.g){case 1:if(!G)return Gt.return(g);for(M={},Q=0,B=Y(Object.keys(G)),tt=B.next();!tt.done;tt=B.next())ct=tt.value,s=G[ct],typeof s!="string"&&s.type==="texture"&&g[s.stream]!==void 0&&++Q;1<Q&&(X.G=!1),R=Y(Object.keys(G)),tt=R.next();case 2:if(tt.done){Gt.g=4;break}if(w=tt.value,N=G[w],typeof N=="string")return q=M,yt=w,_(Gt,It(X,w,g[N]),14);if(A=g[N.stream],N.type==="detection_list"){if(A){for(var Mt=A.getRectList(),St=A.getLandmarksList(),ft=A.getClassificationsList(),Xt=[],Yt=0;Yt<Mt.size();++Yt){var Ft=Mt.get(Yt);t:{var Ct=new nn;for(Ft=new Ze(Ft);Ce(Ft);)switch(Ft.i){case 13:var l=zt(Ft);Wt(Ct,1,l);break;case 21:l=zt(Ft),Wt(Ct,2,l);break;case 29:l=zt(Ft),Wt(Ct,3,l);break;case 37:l=zt(Ft),Wt(Ct,4,l);break;case 45:l=zt(Ft),Wt(Ct,5,l);break;case 48:l=Ve(Ft.g),Wt(Ct,6,l);break;default:if(!at(Ct,Ft))break t}}Ct={Z:Nt(Ct,1),$:Nt(Ct,2),height:Nt(Ct,3),width:Nt(Ct,4),rotation:Nt(Ct,5,0),X:fe(Ct,6,0)},Ft=Fe(en(St.get(Yt)),fn).map(Yn);var v=ft.get(Yt);t:for(l=new qe,v=new Ze(v);Ce(v);)switch(v.i){case 10:l.addClassification(Ie(v,new me,Ne));break;default:if(!at(l,v))break t}Ct={T:Ct,O:Ft,M:vn(l)},Xt.push(Ct)}Mt=Xt}else Mt=[];M[w]=Mt,Gt.g=7;break}if(N.type==="proto_list"){if(A){for(Mt=Array(A.size()),St=0;St<A.size();St++)Mt[St]=A.get(St);A.delete()}else Mt=[];M[w]=Mt,Gt.g=7;break}if(A===void 0){Gt.g=3;break}if(N.type==="float_list"){M[w]=A,Gt.g=7;break}if(N.type==="proto"){M[w]=A,Gt.g=7;break}if(N.type!=="texture")throw Error("Unknown output config type: '"+N.type+"'");return U=X.s[w],U||(U=new Mn(X.h,X.D),X.s[w]=U),_(Gt,cn(U,A,X.G),13);case 13:rt=Gt.h,M[w]=rt;case 7:N.transform&&M[w]&&(M[w]=N.transform(M[w])),Gt.g=3;break;case 14:q[yt]=Gt.h;case 3:tt=R.next(),Gt.g=2;break;case 4:return Gt.return(M)}})})}function It(h,g,G){return Tt(h,function C(){var M=this,Q;return de(C,function(B){return typeof G=="number"||G instanceof Uint8Array||G instanceof M.h.Uint8BlobList?B.return(G):G instanceof M.h.Texture2dDataOut?(Q=M.s[g],Q||(Q=new Mn(M.h,M.D),M.s[g]=Q),B.return(cn(Q,G,M.G))):B.return(void 0)})})}function Ut(h,g){for(var G=g.name||"$",C=[].concat(k(g.wants)),M=new h.h.StringList,Q=Y(g.wants),B=Q.next();!B.done;B=Q.next())M.push_back(B.value);Q=h.h.PacketListener.implement({onResults:function(tt){for(var ct={},s=0;s<g.wants.length;++s)ct[C[s]]=tt.get(s);var X=h.listeners[G];X&&(h.C=bt(h,ct,g.outs).then(function(R){R=X(R);for(var w=0;w<g.wants.length;++w){var N=ct[C[w]];typeof N=="object"&&N.hasOwnProperty&&N.hasOwnProperty("delete")&&N.delete()}R&&(h.C=R)}))}}),h.i.attachMultiListener(M,Q),M.delete()}o.onResults=function(h,g){this.listeners[g||"$"]=h},Re("Solution",W),Re("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function kt(h){h=En(h);var g=h.getMesh();if(!g)return h;var G=new Float32Array(g.getVertexBufferList());g.getVertexBufferList=function(){return G};var C=new Uint32Array(g.getIndexBufferList());return g.getIndexBufferList=function(){return C},h}var qt={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(kt)}},multiFaceLandmarks:{type:"proto_list",stream:"multi_face_landmarks",transform:function(h){return h.map(function(g){return Fe(en(g),fn).map(Yn)})}}}}],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"}}}},Et=[[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]],wt=[[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]],Kt=[[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]],ce=[[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(k(Et),k(wt),k(Kt),k(Dt),k(ce),k(pe));function ke(h){h=h||{},h=Object.assign(Object.assign({},qt),h),this.g=new W(h)}o=ke.prototype,o.close=function(){return this.g.close(),Promise.resolve()},o.onResults=function(h){this.g.onResults(h)},o.initialize=function(){return Tt(this,function h(){var g=this;return de(h,function(G){return _(G,g.g.initialize(),0)})})},o.reset=function(){this.g.reset()},o.send=function(h){return Tt(this,function g(){var G=this;return de(g,function(C){return _(C,G.g.send(h),0)})})},o.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",Et),Re("FACEMESH_LEFT_EYE",wt),Re("FACEMESH_LEFT_EYEBROW",Kt),Re("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Re("FACEMESH_RIGHT_EYE",Dt),Re("FACEMESH_RIGHT_EYEBROW",ce),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 g=h.getCols(),G=h.getRows(),C=h.getPackedDataList(),M=[],Q=0;Q<G;Q++)M.push(Array(g));for(Q=0;Q<G;Q++)for(var B=0;B<g;B++){var tt=h.getLayout()===1?Q*g+B:B*G+Q;M[Q][B]=C[tt]}return M}),Re("VERSION","0.4.1633559619")}).call(gi);const Zi={};(function(){var o;function n(t){var u=0;return function(){return u<t.length?{done:!1,value:t[u++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(t,u,a){return t==Array.prototype||t==Object.prototype||(t[u]=a.value),t};function m(t){t=[typeof globalThis=="object"&&globalThis,t,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var u=0;u<t.length;++u){var a=t[u];if(a&&a.Math==Math)return a}throw Error("Cannot find global object")}var y=m(this);function I(t,u){if(u)t:{var a=y;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],u=u(b),u!=b&&u!=null&&r(a,t,{configurable:!0,writable:!0,value:u})}}I("Symbol",function(t){function u(L){if(this instanceof u)throw new TypeError("Symbol is not a constructor");return new a(b+(L||"")+"_"+S++,L)}function a(L,H){this.g=L,r(this,"description",{configurable:!0,writable:!0,value:H})}if(t)return t;a.prototype.toString=function(){return this.g};var b="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",S=0;return u}),I("Symbol.iterator",function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var u="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<u.length;a++){var b=y[u[a]];typeof b=="function"&&typeof b.prototype[t]!="function"&&r(b.prototype,t,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return t});function F(t){return t={next:t},t[Symbol.iterator]=function(){return this},t}function Y(t){var u=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return u?u.call(t):{next:n(t)}}function k(t){if(!(t instanceof Array)){t=Y(t);for(var u,a=[];!(u=t.next()).done;)a.push(u.value);t=a}return t}var et=typeof Object.create=="function"?Object.create:function(t){function u(){}return u.prototype=t,new u},O;if(typeof Object.setPrototypeOf=="function")O=Object.setPrototypeOf;else{var st;t:{var xt={a:!0},Vt={};try{Vt.__proto__=xt,st=Vt.a;break t}catch{}st=!1}O=st?function(t,u){if(t.__proto__=u,t.__proto__!==u)throw new TypeError(t+" is not extensible");return t}:null}var dt=O;function ht(t,u){if(t.prototype=et(u.prototype),t.prototype.constructor=t,dt)dt(t,u);else for(var a in u)if(a!="prototype")if(Object.defineProperties){var b=Object.getOwnPropertyDescriptor(u,a);b&&Object.defineProperty(t,a,b)}else t[a]=u[a];t.ka=u.prototype}function Ht(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Lt(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}Ht.prototype.o=function(t){this.h=t};function At(t,u){t.j={V:u,X:!0},t.g=t.m||t.s}Ht.prototype.return=function(t){this.j={return:t},this.g=this.s};function _(t,u,a){return t.g=a,{value:u}}function Ee(t){this.g=new Ht,this.h=t}function an(t,u){Lt(t.g);var a=t.g.i;return a?We(t,"return"in a?a.return:function(b){return{value:b,done:!0}},u,t.g.return):(t.g.return(u),$t(t))}function We(t,u,a,b){try{var S=u.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(H){return t.g.i=null,At(t.g,H),$t(t)}return t.g.i=null,b.call(t.g,L),$t(t)}function $t(t){for(;t.g.g;)try{var u=t.h(t.g);if(u)return t.g.l=!1,{value:u.value,done:!1}}catch(a){t.g.h=void 0,At(t.g,a)}if(t.g.l=!1,t.g.j){if(u=t.g.j,t.g.j=null,u.X)throw u.V;return{value:u.return,done:!0}}return{value:void 0,done:!0}}function An(t){this.next=function(u){return Lt(t.g),t.g.i?u=We(t,t.g.i.next,u,t.g.o):(t.g.o(u),u=$t(t)),u},this.throw=function(u){return Lt(t.g),t.g.i?u=We(t,t.g.i.throw,u,t.g.o):(At(t.g,u),u=$t(t)),u},this.return=function(u){return an(t,u)},this[Symbol.iterator]=function(){return this}}function de(t){function u(b){return t.next(b)}function a(b){return t.throw(b)}return new Promise(function(b,S){function L(H){H.done?b(H.value):Promise.resolve(H.value).then(u,a).then(L,S)}L(t.next())})}function gt(t){return de(new An(new Ee(t)))}I("Promise",function(t){function u(H){this.h=0,this.i=void 0,this.g=[],this.o=!1;var K=this.j();try{H(K.resolve,K.reject)}catch(j){K.reject(j)}}function a(){this.g=null}function b(H){return H instanceof u?H:new u(function(K){K(H)})}if(t)return t;a.prototype.h=function(H){if(this.g==null){this.g=[];var K=this;this.i(function(){K.l()})}this.g.push(H)};var S=y.setTimeout;a.prototype.i=function(H){S(H,0)},a.prototype.l=function(){for(;this.g&&this.g.length;){var H=this.g;this.g=[];for(var K=0;K<H.length;++K){var j=H[K];H[K]=null;try{j()}catch(D){this.j(D)}}}this.g=null},a.prototype.j=function(H){this.i(function(){throw H})},u.prototype.j=function(){function H(D){return function($){j||(j=!0,D.call(K,$))}}var K=this,j=!1;return{resolve:H(this.D),reject:H(this.l)}},u.prototype.D=function(H){if(H===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(H instanceof u)this.G(H);else{t:switch(typeof H){case"object":var K=H!=null;break t;case"function":K=!0;break t;default:K=!1}K?this.A(H):this.m(H)}},u.prototype.A=function(H){var K=void 0;try{K=H.then}catch(j){this.l(j);return}typeof K=="function"?this.H(K,H):this.m(H)},u.prototype.l=function(H){this.s(2,H)},u.prototype.m=function(H){this.s(1,H)},u.prototype.s=function(H,K){if(this.h!=0)throw Error("Cannot settle("+H+", "+K+"): Promise already settled in state"+this.h);this.h=H,this.i=K,this.h===2&&this.F(),this.B()},u.prototype.F=function(){var H=this;S(function(){if(H.C()){var K=y.console;typeof K<"u"&&K.error(H.i)}},1)},u.prototype.C=function(){if(this.o)return!1;var H=y.CustomEvent,K=y.Event,j=y.dispatchEvent;return typeof j>"u"?!0:(typeof H=="function"?H=new H("unhandledrejection",{cancelable:!0}):typeof K=="function"?H=new K("unhandledrejection",{cancelable:!0}):(H=y.document.createEvent("CustomEvent"),H.initCustomEvent("unhandledrejection",!1,!0,H)),H.promise=this,H.reason=this.i,j(H))},u.prototype.B=function(){if(this.g!=null){for(var H=0;H<this.g.length;++H)L.h(this.g[H]);this.g=null}};var L=new a;return u.prototype.G=function(H){var K=this.j();H.K(K.resolve,K.reject)},u.prototype.H=function(H,K){var j=this.j();try{H.call(K,j.resolve,j.reject)}catch(D){j.reject(D)}},u.prototype.then=function(H,K){function j(mt,pt){return typeof mt=="function"?function(vt){try{D(mt(vt))}catch(Zt){$(Zt)}}:pt}var D,$,ut=new u(function(mt,pt){D=mt,$=pt});return this.K(j(H,D),j(K,$)),ut},u.prototype.catch=function(H){return this.then(void 0,H)},u.prototype.K=function(H,K){function j(){switch(D.h){case 1:H(D.i);break;case 2:K(D.i);break;default:throw Error("Unexpected state: "+D.h)}}var D=this;this.g==null?L.h(j):this.g.push(j),this.o=!0},u.resolve=b,u.reject=function(H){return new u(function(K,j){j(H)})},u.race=function(H){return new u(function(K,j){for(var D=Y(H),$=D.next();!$.done;$=D.next())b($.value).K(K,j)})},u.all=function(H){var K=Y(H),j=K.next();return j.done?b([]):new u(function(D,$){function ut(vt){return function(Zt){mt[vt]=Zt,pt--,pt==0&&D(mt)}}var mt=[],pt=0;do mt.push(void 0),pt++,b(j.value).K(ut(mt.length-1),$),j=K.next();while(!j.done)})},u});function pn(t,u){t instanceof String&&(t+="");var a=0,b=!1,S={next:function(){if(!b&&a<t.length){var L=a++;return{value:u(L,t[L]),done:!1}}return b=!0,{done:!0,value:void 0}}};return S[Symbol.iterator]=function(){return S},S}var jn=typeof Object.assign=="function"?Object.assign:function(t,u){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};I("Object.assign",function(t){return t||jn}),I("Object.is",function(t){return t||function(u,a){return u===a?u!==0||1/u===1/a:u!==u&&a!==a}}),I("Array.prototype.includes",function(t){return t||function(u,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===u||Object.is(L,u))return!0}return!1}}),I("String.prototype.includes",function(t){return t||function(u,a){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,a||0)!==-1}}),I("Array.prototype.keys",function(t){return t||function(){return pn(this,function(u){return u})}});var Re=this||self;function Jt(t,u){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||u===void 0?a[b]&&a[b]!==Object.prototype[b]?a=a[b]:a=a[b]={}:a[b]=u}function Te(t){throw t}function on(t,u){Te(Error("Invalid wire type: "+t+" (at position "+u+")"))}function Xn(){Te(Error("Failed to read varint, encoding is invalid."))}function Fn(t,u){return u=String.fromCharCode.apply(null,u),t==null?u:t+u}var xn,Nn=typeof TextDecoder<"u",dn,bn=typeof TextEncoder<"u";function kn(t){if(bn)t=(dn||(dn=new TextEncoder)).encode(t);else{var u=void 0;u=u===void 0?!1:u;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 H=t.charCodeAt(++S);if(56320<=H&&57343>=H){L=1024*(L-55296)+H-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(u)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 Hn={},Oe=null;function je(t){var u;u===void 0&&(u=0),he(),u=Hn[u];for(var a=Array(Math.floor(t.length/3)),b=u[64]||"",S=0,L=0;S<t.length-2;S+=3){var H=t[S],K=t[S+1],j=t[S+2],D=u[H>>2];H=u[(H&3)<<4|K>>4],K=u[(K&15)<<2|j>>6],j=u[j&63],a[L++]=D+H+K+j}switch(D=0,j=b,t.length-S){case 2:D=t[S+1],j=u[(D&15)<<2]||b;case 1:t=t[S],a[L]=u[t>>2]+u[(t&3)<<4|D>>4]+j+b}return a.join("")}function In(t){var u=t.length,a=3*u/4;a%3?a=Math.floor(a):"=.".indexOf(t[u-1])!=-1&&(a="=.".indexOf(t[u-2])!=-1?a-2:a-1);var b=new Uint8Array(a),S=0;return Vn(t,function(L){b[S++]=L}),b.subarray(0,S)}function Vn(t,u){function a(j){for(;b<t.length;){var D=t.charAt(b++),$=Oe[D];if($!=null)return $;if(!/^[\s\xa0]*$/.test(D))throw Error("Unknown base64 encoding at char: "+D)}return j}he();for(var b=0;;){var S=a(-1),L=a(0),H=a(64),K=a(64);if(K===64&&S===-1)break;u(S<<2|L>>4),H!=64&&(u(L<<4&240|H>>2),K!=64&&u(H<<6&192|K))}}function he(){if(!Oe){Oe={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),u=["+/=","+/","-_=","-_.","-_"],a=0;5>a;a++){var b=t.concat(u[a].split(""));Hn[a]=b;for(var S=0;S<b.length;S++){var L=b[S];Oe[L]===void 0&&(Oe[L]=S)}}}}var Ye=typeof Uint8Array=="function",Pe;function ne(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 sn(t,u,a){return u===a?Pe||(Pe=new Uint8Array(0)):Ve?t.slice(u,a):new Uint8Array(t.subarray(u,a))}var Me=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 In(t);if(t.constructor===ne){if(t.g==null)var u=Pe||(Pe=new Uint8Array(0));else{u=Uint8Array;var a=t.g;a=a==null||Ye&&a!=null&&a instanceof Uint8Array?a:typeof a=="string"?In(a):null,t=t.g=a,u=new u(t)}return u}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 Ce(t,u){u=u===void 0?{}:u,u=u.v===void 0?!1:u.v,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.v=u,t&&Bt(this,t)}function Bt(t,u){t.h=Ze(u),t.l=0,t.i=t.h.length,t.g=t.l}Ce.prototype.reset=function(){this.g=this.l};function Ie(t){for(var u=128,a=0,b=0,S=0;4>S&&128<=u;S++)u=t.h[t.g++],a|=(u&127)<<7*S;if(128<=u&&(u=t.h[t.g++],a|=(u&127)<<28,b|=(u&127)>>4),128<=u)for(S=0;5>S&&128<=u;S++)u=t.h[t.g++],b|=(u&127)<<7*S+3;if(128>u)return t=a>>>0,u=b>>>0,(b=u&2147483648)&&(t=~t+1>>>0,u=~u>>>0,t==0&&(u=u+1>>>0)),t=4294967296*u+(t>>>0),b?-t:t;t.j=!0,Xn()}function zt(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 u=t.h,a=u[t.g],b=a&127;return 128>a?(t.g+=1,zt(t),b):(a=u[t.g+1],b|=(a&127)<<7,128>a?(t.g+=2,zt(t),b):(a=u[t.g+2],b|=(a&127)<<14,128>a?(t.g+=3,zt(t),b):(a=u[t.g+3],b|=(a&127)<<21,128>a?(t.g+=4,zt(t),b):(a=u[t.g+4],b|=(a&15)<<28,128>a?(t.g+=5,zt(t),b>>>0):(t.g+=5,128<=u[t.g++]&&128<=u[t.g++]&&128<=u[t.g++]&&128<=u[t.g++]&&128<=u[t.g++]?(t.j=!0,Xn(),b):(zt(t),b))))))}function we(t){var u=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,zt(t),(u<<0|a<<8|b<<16|S<<24)>>>0}Ce.prototype.m=function(){var t=we(this),u=2*(t>>31)+1,a=t>>>23&255;return t&=8388607,a==255?t?NaN:1/0*u:a==0?u*Math.pow(2,-149)*t:u*Math.pow(2,a-150)*(t+Math.pow(2,23))};var $e=[];function Xe(){this.g=new Uint8Array(64),this.h=0}function Ot(t,u){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++]=u}Xe.prototype.length=function(){return this.h},Xe.prototype.end=function(){var t=this.g,u=this.h;return this.h=0,sn(t,0,u)};function ze(t,u){for(;127<u;)Ot(t,u&127|128),u>>>=7;Ot(t,u)}function _e(t){var u={},a=u.O===void 0?!1:u.O;this.m={v:u.v===void 0?!1:u.v},this.O=a,u=this.m,$e.length?(a=$e.pop(),u&&(a.v=u.v),t&&Bt(a,t),t=a):t=new Ce(t,u),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 Se(t){var u=t.g;if((u=u.g==u.i)||(u=t.j)||(u=t.g,u=u.j||0>u.g||u.g>u.i),u)return!1;t.l=t.g.g;var a=ye(t.g);return u=a>>>3,a&=7,0<=a&&5>=a?(t.i=u,t.h=a,!0):(t.j=!0,on(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 u=t.g,a=0;10>a;a++){if((t.h[u]&128)===0){t.g=u+1,zt(t);break t}u++}t.j=!0,Xn()}break;case 1:t=t.g,t.g+=8,zt(t);break;case 2:t.h!=2?Wn(t):(u=ye(t.g),t=t.g,t.g+=u,zt(t));break;case 5:t=t.g,t.g+=4,zt(t);break;case 3:u=t.i;do{if(!Se(t)){t.j=!0,Te(Error("Unmatched start-group tag: stream EOF"));break}if(t.h==4){t.i!=u&&(t.j=!0,Te(Error("Unmatched end-group tag")));break}Wn(t)}while(1);break;default:t.j=!0,on(t.h,t.l)}}function ln(t,u,a){var b=t.g.i,S=ye(t.g),L=t.g.g+S;if(t.g.i=L,a(u,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,u}var Qe=[];function un(){this.h=[],this.i=0,this.g=new Xe}function ve(t,u){u.length!==0&&(t.h.push(u),t.i+=u.length)}function Le(t,u,a){ze(t.g,8*u+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 re(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 te(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(Ye&&t!=null&&t instanceof Uint8Array)return je(t);if(t instanceof ne){if(t.g==null)t="";else{var u=t.g;u=u==null||typeof u=="string"?u:Ye&&u instanceof Uint8Array?je(u):null,t=t.g=u}return t}}return t}function Pt(t,u){if(t!=null)return Array.isArray(t)||De(t)?hn(t,u):u(t)}function hn(t,u){if(Array.isArray(t)){for(var a=Array(t.length),b=0;b<t.length;b++)a[b]=Pt(t[b],u);if(u=Array.isArray(t)){var S;Ge?S=t[Ge]:S=t.g,u=(S==null?0:S)&1}return u&&re(a),a}S={};for(a in t)S[a]=Pt(t[a],u);return S}function fe(t){return t=te(t),Array.isArray(t)?hn(t,fe):t}var Nt;function Wt(t,u,a){var b=Nt;Nt=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}u!==void 0&&-1<u?(this.j=Math.max(u,t+1-this.i),this.h=null):this.j=Number.MAX_VALUE}if(a)for(u=0;u<a.length;u++)t=a[u],t<this.j?(t+=this.i,(b=this.u[t])?Array.isArray(b)&&re(b):this.u[t]=ie):(Fe(this),(b=this.h[t])?Array.isArray(b)&&re(b):this.h[t]=ie)}var ie=Object.freeze(re([]));function Fe(t){var u=t.j+t.i;t.u[u]||(t.h=t.u[u]={})}function ee(t,u,a){return u===-1?null:(a===void 0?0:a)||u>=t.j?t.h?t.h[u]:void 0:t.u[u+t.i]}function oe(t,u,a){a=a===void 0?!1:a;var b=ee(t,u,a);return b==null&&(b=ie),b===ie&&(b=re(b.slice()),at(t,u,b,a)),b}function nt(t,u){var a=oe(t,u);if(t.l||(t.l={}),!t.l[u]){for(var b=0;b<a.length;b++)a[b]=+a[b];t.l[u]=!0}return a}function ot(t,u,a){return t=ee(t,u),t=t==null?t:+t,t==null?a===void 0?0:a:t}function at(t,u,a,b){(b===void 0?0:b)||u>=t.j?(Fe(t),t.h[u]=a):t.u[u+t.i]=a}function _t(t,u,a,b){a!==b?at(t,u,a):at(t,u,void 0,!1)}function ae(t,u,a){if(a===-1)return null;t.g||(t.g={});var b=t.g[a];if(b)return b;var S=ee(t,a,!1);return S==null?b:(u=new u(S),t.g[a]=u)}function ue(t,u,a){t.g||(t.g={});var b=t.g[a];if(!b){var S=oe(t,a,!1);b=[];for(var L=0;L<S.length;L++)b[L]=new u(S[L]);t.g[a]=b}return b}function Tt(t,u,a,b,S){var L=ue(t,b,u);a=a||new b,t=oe(t,u),S!=null?(L.splice(S,0,a),t.splice(S,0,a.u)):(L.push(a),t.push(a.u))}Wt.prototype.toJSON=function(){return hn(this.u,fe)},Wt.prototype.toString=function(){return this.u.toString()};function me(t,u){return t=ee(t,u),t==null?0:t}function Ne(t,u){return t=ee(t,u),t==null?"":t}function qe(t,u){if(t=t.m){ve(u,u.g.end());for(var a=0;a<t.length;a++)ve(u,t[a])}}var tn=Symbol();function fn(t,u,a){return t[tn]||(t[tn]=function(b,S){return u(b,S,a)})}function yn(t){var u=t[tn];if(!u){var a=t[nn]||(t[nn]=t());u=function(b,S){return Je(b,S,a)},t[tn]=u}return u}function He(t){var u=t.da;if(u)return yn(u);if(u=t.ia){var a=t.Y;return delete t.Y,fn(t.W.g,u,a)}}function en(t){var u=He(t),a=t.W,b=t.ea;return u?function(S,L){return b(S,L,a,u)}:function(S,L){return b(S,L,a)}}function zn(t){var u=t[0];switch(t.length){case 2:var a=t[1];return function(pt,vt,Zt){return u(pt,vt,Zt,a)};case 3:var b=t[1],S=yn(t[2]);return function(pt,vt,Zt){return u(pt,vt,Zt,b,S)};case 4:var L=t[1],H=t[3],K=yn(t[2]);return function(pt,vt,Zt){return u(pt,vt,Zt,L,K,H)};case 5:var j=t[1],D=fn(j,t[3],t[4]);return function(pt,vt,Zt){return u(pt,vt,Zt,j,D)};case 6:var $=t[1],ut=t[5],mt=fn($,t[3],t[4]);return function(pt,vt,Zt){return u(pt,vt,Zt,$,mt,ut)};default:throw Error("Unsupported number of parameters, expected [2-6], got "+t.length)}}var nn=Symbol();function Je(t,u,a){for(;Se(u)&&u.h!=4;){var b=u.i,S=a[b];if(S)Array.isArray(S)&&(S=a[b]=zn(S));else{var L=a[0];L&&(L=L[b])&&(S=a[b]=en(L))}S&&S(u,t,b)||(S=u,b=t,L=S.l,Wn(S),S.O||(S=sn(S.g.h,L,S.g.g),(L=b.m)?L.push(S):b.m=[S]))}return t}function Zn(t,u){var a=new un;if(u(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=u=0;L<S;L++){var H=b[L];H.length!==0&&(t.set(H,u),u+=H.length)}b=a.g,S=b.h,S!==0&&(t.set(b.g.subarray(0,S),u),b.h=0),a.h=[t],a=t}return a}function Sn(t,u,a){if(Qe.length){var b=Qe.pop();t&&(Bt(b.g,t),b.i=-1,b.h=-1),t=b}else t=new _e(t);try{var S=new u;return Je(S,t,a[nn]||(a[nn]=a()))}finally{u=t.g,u.h=null,u.l=0,u.i=0,u.g=0,u.j=!1,u.v=!1,t.i=-1,t.h=-1,t.j=!1,100>Qe.length&&Qe.push(t)}}function Be(t,u,a){if(u=ee(u,a),u!=null){ze(t.g,8*a+5),t=t.g;var b=u;b=(a=0>b?1:0)?-b:b,b===0?0<1/b?Me=Qt=0:(Qt=0,Me=2147483648):isNaN(b)?(Qt=0,Me=2147483647):34028234663852886e22<b?(Qt=0,Me=(a<<31|2139095040)>>>0):11754943508222875e-54>b?(b=Math.round(b/Math.pow(2,-149)),Qt=0,Me=(a<<31|b)>>>0):(u=Math.floor(Math.log(b)/Math.LN2),b*=Math.pow(2,-u),b=Math.round(8388608*b),16777216<=b&&++u,Qt=0,Me=(a<<31|u+127<<23|b&8388607)>>>0),a=Me,Ot(t,a>>>0&255),Ot(t,a>>>8&255),Ot(t,a>>>16&255),Ot(t,a>>>24&255)}}function En(t,u,a){if(t.h!==1)return!1;var b=t.g;t=we(b);var S=we(b);b=2*(S>>31)+1;var L=S>>>20&2047;return t=4294967296*(S&1048575)+t,_t(u,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 rn(t,u,a){return t.h!==5?!1:(at(u,a,t.g.m()),!0)}function vn(t,u,a){if(t.h!==5&&t.h!==2)return!1;if(u=oe(u,a),t.h==2){a=Ce.prototype.m;var b=ye(t.g);for(b=t.g.g+b;t.g.g<b;)u.push(a.call(t.g))}else u.push(t.g.m());return!0}function Yn(t,u,a){return t.h!==5?!1:(t=t.g.m(),_t(u,a,t,0),!0)}function Mn(t,u,a){return t.h!==0?!1:(at(u,a,Ie(t.g)),!0)}function cn(t,u,a){return t.h!==0?!1:(at(u,a,ye(t.g)),!0)}function Tn(t,u,a){return t.h!==0?!1:(t=ye(t.g),_t(u,a,t,0),!0)}function Dn(t,u,a){return t.h!==0?!1:(t=!!ye(t.g),_t(u,a,t,!1),!0)}function $n(t,u,a){if(t.h!==2)return!1;var b=ye(t.g);t=t.g;var S=t.g;t.g+=b,zt(t),t=t.h;var L;if(Nn)(L=xn)||(L=xn=new TextDecoder("utf-8",{fatal:!1})),L=L.decode(t.subarray(S,S+b));else{b=S+b;for(var H=[],K=null,j,D,$;S<b;)j=t[S++],128>j?H.push(j):224>j?S>=b?H.push(65533):(D=t[S++],194>j||(D&192)!==128?(S--,H.push(65533)):H.push((j&31)<<6|D&63)):240>j?S>=b-1?H.push(65533):(D=t[S++],(D&192)!==128||j===224&&160>D||j===237&&160<=D||((L=t[S++])&192)!==128?(S--,H.push(65533)):H.push((j&15)<<12|(D&63)<<6|L&63)):244>=j?S>=b-2?H.push(65533):(D=t[S++],(D&192)!==128||(j<<28)+(D-144)>>30!==0||((L=t[S++])&192)!==128||(($=t[S++])&192)!==128?(S--,H.push(65533)):(j=(j&7)<<18|(D&63)<<12|(L&63)<<6|$&63,j-=65536,H.push((j>>10&1023)+55296,(j&1023)+56320))):H.push(65533),8192<=H.length&&(K=Fn(K,H),H.length=0);L=Fn(K,H)}return at(u,a,L),!0}function wn(t,u,a,b,S){return t.h!==2?!1:(t=ln(t,new b,S),u.g||(u.g={}),b=t&&t.u,u.g[a]=t,at(u,a,b,!1),!0)}function Cn(t,u,a,b,S){return t.h!==2?!1:(t=ln(t,new b,S),Tt(u,a,t,b,void 0),!0)}function p(t,u,a){return t.h!==0?!1:(at(u,a,Ie(t.g)),!0)}function V(t){Wt.call(this,t)}ht(V,Wt);function W(){return{1:cn,2:rn,3:$n,4:$n}}function E(t,u){var a=ee(t,1);if(a!=null&&a!=null){ze(u.g,8);var b=u.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(u,t,2),b=ee(t,3),b!=null&&Le(u,3,kn(b)),b=ee(t,4),b!=null&&Le(u,4,kn(b)),qe(t,u)}function P(t){Wt.call(this,t,-1,z)}ht(P,Wt),P.prototype.addClassification=function(t,u){return Tt(this,1,t,V,u),this};function lt(){return{1:[Cn,V,W]}}var z=[1];function it(t){Wt.call(this,t)}ht(it,Wt);function bt(){return{1:rn,2:rn,3:rn,4:rn,5:rn}}function It(t,u){Be(u,t,1),Be(u,t,2),Be(u,t,3),Be(u,t,4),Be(u,t,5),qe(t,u)}function Ut(t){Wt.call(this,t,-1,qt)}ht(Ut,Wt);function kt(){return{1:[Cn,it,bt]}}var qt=[1];function Et(t){Wt.call(this,t)}ht(Et,Wt);function wt(){return{1:rn,2:rn,3:rn,4:rn,5:rn,6:Mn}}function Kt(t,u){Be(u,t,1),Be(u,t,2),Be(u,t,3),Be(u,t,4),Be(u,t,5);var a=ee(t,6);if(a!=null&&a!=null){ze(u.g,48);var b=u.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))),Me=L,Qt=S,a=Me,L=Qt;0<L||127<a;)Ot(b,a&127|128),a=(a>>>7|L<<25)>>>0,L>>>=7;Ot(b,a)}qe(t,u)}function Dt(t){Wt.call(this,t,-1,ke)}ht(Dt,Wt);function ce(){return{1:p,2:p,3:vn,4:[wn,pe,ge],5:cn,6:cn,7:vn,8:vn,9:vn}}function pe(t){Wt.call(this,t)}ht(pe,Wt);function ge(){return{1:rn,2:rn,3:rn}}var ke=[3,7,8,9];function h(t){Wt.call(this,t)}ht(h,Wt);function g(){return{1:Yn,2:Yn,3:Yn}}function G(t){Wt.call(this,t)}ht(G,Wt);function C(){return{1:Yn,2:Yn,3:Yn}}function M(t){Wt.call(this,t)}ht(M,Wt);function Q(){return{1:Tn,2:[wn,G,C],3:[wn,h,g],4:Dn}}function B(t){Wt.call(this,t,-1,ct)}ht(B,Wt);function tt(){return{1:Tn,2:[Cn,M,Q],3:Yn,4:vn,5:vn,6:vn}}var ct=[2,4,5,6];function s(t){Wt.call(this,t,-1,R)}ht(s,Wt);function X(){return{1:Tn,2:[Cn,B,tt],3:[wn,Dt,ce],4:En,5:vn,6:vn}}var R=[2,5,6];function w(t,u,a){if(a=t.createShader(a===0?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(a,u),t.compileShader(a),!t.getShaderParameter(a,t.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
87
|
+
`+v.getProgramInfoLog(_));C=h.m=_,v.useProgram(C),A=v.getUniformLocation(C,"sampler0"),h.j={I:v.getAttribLocation(C,"aVertex"),H:v.getAttribLocation(C,"aTex"),da:A},h.s=v.createBuffer(),v.bindBuffer(v.ARRAY_BUFFER,h.s),v.enableVertexAttribArray(h.j.I),v.vertexAttribPointer(h.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),h.o=v.createBuffer(),v.bindBuffer(v.ARRAY_BUFFER,h.o),v.enableVertexAttribArray(h.j.H),v.vertexAttribPointer(h.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(A,0)}C=h.j,v.useProgram(h.m),v.canvas.width=y.width,v.canvas.height=y.height,v.viewport(0,0,y.width,y.height),v.activeTexture(v.TEXTURE0),h.h.bindTexture2d(y.glName),v.enableVertexAttribArray(C.I),v.bindBuffer(v.ARRAY_BUFFER,h.s),v.vertexAttribPointer(C.I,2,v.FLOAT,!1,0,0),v.enableVertexAttribArray(C.H),v.bindBuffer(v.ARRAY_BUFFER,h.o),v.vertexAttribPointer(C.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(C.I),v.disableVertexAttribArray(C.H),v.bindBuffer(v.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 Fn(h,y){return y+h}function Hn(h,y){window[h]=y}function m(h){var y=document.createElement("script");return y.setAttribute("src",h),y.setAttribute("crossorigin","anonymous"),new Promise(function(v){y.addEventListener("load",function(){v()},!1),y.addEventListener("error",function(){v()},!1),document.body.appendChild(y)})}function W(){return St(this,function h(){return de(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 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||Fn,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=w(Object.keys(h.options));for(var v=y.next();!v.done;v=y.next()){v=v.value;var C=h.options[v].default;C!==void 0&&(this.j[v]=typeof C=="function"?C():C)}}}i=V.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function k(h,y){return h.g.files===void 0?[]:typeof h.g.files=="function"?h.g.files(y):h.g.files}function z(h){return St(h,function y(){var v=this,C,A,_,M,q,lt,s,X,R,F,N;return de(y,function(K){switch(K.g){case 1:return C=v,v.R?(A=k(v,v.j),P(K,W(),2)):K.return();case 2:if(_=K.h,typeof window=="object")return Hn("createMediapipeSolutionsWasm",{locateFile:v.locateFile}),Hn("createMediapipeSolutionsPackedAssets",{locateFile:v.locateFile}),lt=A.filter(function(B){return B.data!==void 0}),s=A.filter(function(B){return B.data===void 0}),X=Promise.all(lt.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&&!_?m(C.locateFile(B.url,C.S)):Promise.resolve()})).then(function(){return St(C,function B(){var nt,$,yt=this;return de(B,function(Gt){if(Gt.g==1)return nt=window.createMediapipeSolutionsWasm,$=window.createMediapipeSolutionsPackedAssets,P(Gt,nt($),2);yt.h=Gt.h,Gt.g=0})})}),F=function(){return St(C,function B(){var nt=this;return de(B,function($){return nt.g.graph&&nt.g.graph.url?$=P($,rt(nt,nt.g.graph.url),0):($.g=0,$=void 0),$})})}(),P(K,Promise.all([R,X,F]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return M=A.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,E(M)),P(K,createMediapipeSolutionsWasm(Module),6);case 6:v.h=K.h,v.l=new OffscreenCanvas(1,1),v.h.canvas=v.l,q=v.h.GL.createContext(v.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),v.h.GL.makeContextCurrent(q),K.g=4;break;case 7:if(v.l=document.createElement("canvas"),N=v.l.getContext("webgl2",{}),!N&&(N=v.l.getContext("webgl",{}),!N))return alert("Failed to create WebGL canvas context when passing video frame."),K.return();v.D=N,v.h.canvas=v.l,v.h.createContext(v.l,!0,!0,{});case 4:v.i=new v.h.SolutionWasm,v.R=!1,K.g=0}})})}function ot(h){return St(h,function y(){var v=this,C,A,_,M,q,lt,s,X;return de(y,function(R){if(R.g==1){if(v.g.graph&&v.g.graph.url&&v.P===v.g.graph.url)return R.return();if(v.o=!0,!v.g.graph||!v.g.graph.url){R.g=2;return}return v.P=v.g.graph.url,P(R,rt(v,v.g.graph.url),3)}for(R.g!=2&&(C=R.h,v.i.loadGraph(C)),A=w(Object.keys(v.B)),_=A.next();!_.done;_=A.next())M=_.value,v.i.overrideFile(M,v.B[M]);if(v.B={},v.g.listeners)for(q=w(v.g.listeners),lt=q.next();!lt.done;lt=q.next())s=lt.value,Ut(v,s);X=v.j,v.j={},v.setOptions(X),R.g=0})})}i.reset=function(){return St(this,function h(){var y=this;return de(h,function(v){y.i&&(y.i.reset(),y.m={},y.s={}),v.g=0})})},i.setOptions=function(h,y){var v=this;if(y=y||this.g.options){for(var C=[],A=[],_={},M=w(Object.keys(h)),q=M.next();!q.done;_={K:_.K,L:_.L},q=M.next()){var lt=q.value;lt in this.j&&this.j[lt]===h[lt]||(this.j[lt]=h[lt],q=y[lt],q!==void 0&&(q.onChange&&(_.K=q.onChange,_.L=h[lt],C.push(function(s){return function(){return St(v,function X(){var R,F=this;return de(X,function(N){if(N.g==1)return P(N,s.K(s.L),2);R=N.h,R===!0&&(F.o=!0),N.g=0})})}}(_))),q.graphOptionXref&&(lt={valueNumber:q.type===1?h[lt]:0,valueBoolean:q.type===0?h[lt]:!1,valueString:q.type===2?h[lt]:""},q=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),q.graphOptionXref),lt),A.push(q))))}(C.length!==0||A.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(A),this.u=(this.u===void 0?[]:this.u).concat(C))}};function O(h){return St(h,function y(){var v=this,C,A,_,M,q,lt,s;return de(y,function(X){switch(X.g){case 1:if(!v.o)return X.return();if(!v.u){X.g=2;break}C=w(v.u),A=C.next();case 3:if(A.done){X.g=5;break}return _=A.value,P(X,_(),4);case 4:A=C.next(),X.g=3;break;case 5:v.u=void 0;case 2:if(v.A){for(M=new v.h.GraphOptionChangeRequestList,q=w(v.A),lt=q.next();!lt.done;lt=q.next())s=lt.value,M.push_back(s);v.i.changeOptions(M),M.delete(),v.A=void 0}v.o=!1,X.g=0}})})}i.initialize=function(){return St(this,function h(){var y=this;return de(h,function(v){return v.g==1?P(v,z(y),2):v.g!=3?P(v,ot(y),3):P(v,O(y),0)})})};function rt(h,y){return St(h,function v(){var C=this,A,_;return de(v,function(M){return y in C.F?M.return(C.F[y]):(A=C.locateFile(y,""),_=fetch(A).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 v(){var C=this,A,_,M,q,lt,s,X,R,F;return de(v,function(N){switch(N.g){case 1:return C.g.inputs?(A=1e3*(y==null?performance.now():y),P(N,C.C,2)):N.return();case 2:return P(N,C.initialize(),3);case 3:for(_=new C.h.PacketDataList,M=w(Object.keys(h)),q=M.next();!q.done;q=M.next())if(lt=q.value,s=C.g.inputs[lt]){t:{var K=C,B=h[lt];switch(s.type){case"video":var nt=K.m[s.stream];if(nt||(nt=new An(K.h,K.D),K.m[s.stream]=nt),K=nt,K.l===0&&(K.l=K.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:K.l,width:$,height:nt},$=K.g,$.canvas.width=nt.width,$.canvas.height=nt.height,$.activeTexture($.TEXTURE0),K.h.bindTexture2d(K.l),$.texImage2D($.TEXTURE_2D,0,$.RGBA,$.RGBA,$.UNSIGNED_BYTE,B),K.h.bindTexture2d(0),K=nt;break t;case"detections":for(nt=K.m[s.stream],nt||(nt=new _n(K.h),K.m[s.stream]=nt),K=nt,K.data||(K.data=new K.g.DetectionListData),K.data.reset(B.length),nt=0;nt<B.length;++nt){$=B[nt];var yt=K.data,Gt=yt.setBoundingBox,Bt=nt,xt=$.T,ht=new nn;Vt(ht,1,xt.Z),Vt(ht,2,xt.$),Vt(ht,3,xt.height),Vt(ht,4,xt.width),Vt(ht,5,xt.rotation),Vt(ht,6,xt.X);var Xt=xt=new Xe;Pe(Xt,1,te(ht,1)),Pe(Xt,2,te(ht,2)),Pe(Xt,3,te(ht,3)),Pe(Xt,4,te(ht,4)),Pe(Xt,5,te(ht,5));var It=te(ht,6);if(It!=null&&It!=null){_t(Xt.g,48);var wt=Xt.g,Yt=It;It=0>Yt,Yt=Math.abs(Yt);var l=Yt>>>0;for(Yt=Math.floor((Yt-l)/4294967296),Yt>>>=0,It&&(Yt=~Yt>>>0,l=(~l>>>0)+1,4294967295<l&&(l=0,Yt++,4294967295<Yt&&(Yt=0))),he=l,Se=Yt,It=he,l=Se;0<l||127<It;)wt.push(It&127|128),It=(It>>>7|l<<25)>>>0,l>>>=7;wt.push(It)}if(it(ht,Xt),xt=je(xt),Gt.call(yt,Bt,xt),$.O)for(yt=0;yt<$.O.length;++yt)ht=$.O[yt],Xt=!!ht.visibility,Gt=K.data,Bt=Gt.addNormalizedLandmark,xt=nt,ht=Object.assign(Object.assign({},ht),{visibility:Xt?ht.visibility:0}),Xt=new fn,Vt(Xt,1,ht.x),Vt(Xt,2,ht.y),Vt(Xt,3,ht.z),ht.visibility&&Vt(Xt,4,ht.visibility),wt=ht=new Xe,Pe(wt,1,te(Xt,1)),Pe(wt,2,te(Xt,2)),Pe(wt,3,te(Xt,3)),Pe(wt,4,te(Xt,4)),Pe(wt,5,te(Xt,5)),it(Xt,wt),ht=je(ht),Bt.call(Gt,xt,ht);if($.M)for(yt=0;yt<$.M.length;++yt){if(Gt=K.data,Bt=Gt.addClassification,xt=nt,ht=$.M[yt],Xt=new me,Vt(Xt,2,ht.Y),ht.index&&Vt(Xt,1,ht.index),ht.label&&Vt(Xt,3,ht.label),ht.displayName&&Vt(Xt,4,ht.displayName),wt=ht=new Xe,l=te(Xt,1),l!=null&&l!=null)if(_t(wt.g,8),It=wt.g,0<=l)_t(It,l);else{for(Yt=0;9>Yt;Yt++)It.push(l&127|128),l>>=7;It.push(1)}Pe(wt,2,te(Xt,2)),It=te(Xt,3),It!=null&&(It=xn(It),_t(wt.g,26),_t(wt.g,It.length),Ot(wt,wt.g.end()),Ot(wt,It)),It=te(Xt,4),It!=null&&(It=xn(It),_t(wt.g,34),_t(wt.g,It.length),Ot(wt,wt.g.end()),Ot(wt,It)),it(Xt,wt),ht=je(ht),Bt.call(Gt,xt,ht)}}K=K.data;break t;default:K={}}}switch(X=K,R=s.stream,s.type){case"video":_.pushTexture2d(Object.assign(Object.assign({},X),{stream:R,timestamp:A}));break;case"detections":F=X,F.stream=R,F.timestamp=A,_.pushDetectionList(F);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return C.i.send(_),P(N,C.C,4);case 4:_.delete(),N.g=0}})})};function bt(h,y,v){return St(h,function C(){var A,_,M,q,lt,s,X=this,R,F,N,K,B,nt,$,yt;return de(C,function(Gt){switch(Gt.g){case 1:if(!v)return Gt.return(y);for(A={},_=0,M=w(Object.keys(v)),q=M.next();!q.done;q=M.next())lt=q.value,s=v[lt],typeof s!="string"&&s.type==="texture"&&y[s.stream]!==void 0&&++_;1<_&&(X.G=!1),R=w(Object.keys(v)),q=R.next();case 2:if(q.done){Gt.g=4;break}if(F=q.value,N=v[F],typeof N=="string")return $=A,yt=F,P(Gt,Rt(X,F,y[N]),14);if(K=y[N.stream],N.type==="detection_list"){if(K){for(var Bt=K.getRectList(),xt=K.getLandmarksList(),ht=K.getClassificationsList(),Xt=[],It=0;It<Bt.size();++It){var wt=Bt.get(It);t:{var Yt=new nn;for(wt=new Ze(wt);Ce(wt);)switch(wt.i){case 13:var l=jt(wt);Vt(Yt,1,l);break;case 21:l=jt(wt),Vt(Yt,2,l);break;case 29:l=jt(wt),Vt(Yt,3,l);break;case 37:l=jt(wt),Vt(Yt,4,l);break;case 45:l=jt(wt),Vt(Yt,5,l);break;case 48:l=We(wt.g),Vt(Yt,6,l);break;default:if(!ut(Yt,wt))break t}}Yt={Z:Ct(Yt,1),$:Ct(Yt,2),height:Ct(Yt,3),width:Ct(Yt,4),rotation:Ct(Yt,5,0),X:fe(Yt,6,0)},wt=Ye(en(xt.get(It)),fn).map(Tn);var Z=ht.get(It);t:for(l=new qe,Z=new Ze(Z);Ce(Z);)switch(Z.i){case 10:l.addClassification(xe(Z,new me,He));break;default:if(!ut(l,Z))break t}Yt={T:Yt,O:wt,M:vn(l)},Xt.push(Yt)}Bt=Xt}else Bt=[];A[F]=Bt,Gt.g=7;break}if(N.type==="proto_list"){if(K){for(Bt=Array(K.size()),xt=0;xt<K.size();xt++)Bt[xt]=K.get(xt);K.delete()}else Bt=[];A[F]=Bt,Gt.g=7;break}if(K===void 0){Gt.g=3;break}if(N.type==="float_list"){A[F]=K,Gt.g=7;break}if(N.type==="proto"){A[F]=K,Gt.g=7;break}if(N.type!=="texture")throw Error("Unknown output config type: '"+N.type+"'");return B=X.s[F],B||(B=new An(X.h,X.D),X.s[F]=B),P(Gt,un(B,K,X.G),13);case 13:nt=Gt.h,A[F]=nt;case 7:N.transform&&A[F]&&(A[F]=N.transform(A[F])),Gt.g=3;break;case 14:$[yt]=Gt.h;case 3:q=R.next(),Gt.g=2;break;case 4:return Gt.return(A)}})})}function Rt(h,y,v){return St(h,function C(){var A=this,_;return de(C,function(M){return typeof v=="number"||v instanceof Uint8Array||v instanceof A.h.Uint8BlobList?M.return(v):v instanceof A.h.Texture2dDataOut?(_=A.s[y],_||(_=new An(A.h,A.D),A.s[y]=_),M.return(un(_,v,A.G))):M.return(void 0)})})}function Ut(h,y){for(var v=y.name||"$",C=[].concat(E(y.wants)),A=new h.h.StringList,_=w(y.wants),M=_.next();!M.done;M=_.next())A.push_back(M.value);_=h.h.PacketListener.implement({onResults:function(q){for(var lt={},s=0;s<y.wants.length;++s)lt[C[s]]=q.get(s);var X=h.listeners[v];X&&(h.C=bt(h,lt,y.outs).then(function(R){R=X(R);for(var F=0;F<y.wants.length;++F){var N=lt[C[F]];typeof N=="object"&&N.hasOwnProperty&&N.hasOwnProperty("delete")&&N.delete()}R&&(h.C=R)}))}}),h.i.attachMultiListener(A,_),A.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 Nt(h){h=kn(h);var y=h.getMesh();if(!y)return h;var v=new Float32Array(y.getVertexBufferList());y.getVertexBufferList=function(){return v};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(Nt)}},multiFaceLandmarks:{type:"proto_list",stream:"multi_face_landmarks",transform:function(h){return h.map(function(y){return Ye(en(y),fn).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"}}}},Et=[[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]],kt=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Qt=[[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]],ue=[[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(E(Et),E(Tt),E(kt),E(Qt),E(ue),E(pe));function Je(h){h=h||{},h=Object.assign(Object.assign({},$t),h),this.g=new V(h)}i=Je.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 de(h,function(v){return P(v,y.g.initialize(),0)})})},i.reset=function(){this.g.reset()},i.send=function(h){return St(this,function y(){var v=this;return de(y,function(C){return P(C,v.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",Je),Re("FACEMESH_LIPS",Et),Re("FACEMESH_LEFT_EYE",Tt),Re("FACEMESH_LEFT_EYEBROW",kt),Re("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Re("FACEMESH_RIGHT_EYE",Qt),Re("FACEMESH_RIGHT_EYEBROW",ue),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(),v=h.getRows(),C=h.getPackedDataList(),A=[],_=0;_<v;_++)A.push(Array(y));for(_=0;_<v;_++)for(var M=0;M<y;M++){var q=h.getLayout()===1?_*y+M:M*v+_;A[_][M]=C[q]}return A}),Re("VERSION","0.4.1633559619")}).call(mi);const pi={};(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 p(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 G=p(this);function S(t,c){if(c)t:{var a=G;t=t.split(".");for(var b=0;b<t.length-1;b++){var I=t[b];if(!(I in a))break t;a=a[I]}t=t[t.length-1],b=a[t],c=c(b),c!=b&&c!=null&&r(a,t,{configurable:!0,writable:!0,value:c})}}S("Symbol",function(t){function c(Y){if(this instanceof c)throw new TypeError("Symbol is not a constructor");return new a(b+(Y||"")+"_"+I++,Y)}function a(Y,L){this.g=Y,r(this,"description",{configurable:!0,writable:!0,value:L})}if(t)return t;a.prototype.toString=function(){return this.g};var b="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",I=0;return c}),S("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=G[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 w(t){var c=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return c?c.call(t):{next:n(t)}}function E(t){if(!(t instanceof Array)){t=w(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},ct;if(typeof Object.setPrototypeOf=="function")ct=Object.setPrototypeOf;else{var dt;t:{var Ft={a:!0},Lt={};try{Lt.__proto__=Ft,dt=Lt.a;break t}catch{}dt=!1}ct=dt?function(t,c){if(t.__proto__=c,t.__proto__!==c)throw new TypeError(t+" is not extensible");return t}:null}var at=ct;function pt(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 Mt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Jt(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}Mt.prototype.o=function(t){this.h=t};function qt(t,c){t.j={V:c,X:!0},t.g=t.m||t.s}Mt.prototype.return=function(t){this.j={return:t},this.g=this.s};function P(t,c,a){return t.g=a,{value:c}}function De(t){this.g=new Mt,this.h=t}function an(t,c){Jt(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),Dt(t))}function Ve(t,c,a,b){try{var I=c.call(t.g.i,a);if(!(I instanceof Object))throw new TypeError("Iterator result "+I+" is not an object");if(!I.done)return t.g.l=!1,I;var Y=I.value}catch(L){return t.g.i=null,qt(t.g,L),Dt(t)}return t.g.i=null,b.call(t.g,Y),Dt(t)}function Dt(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,qt(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 Kn(t){this.next=function(c){return Jt(t.g),t.g.i?c=Ve(t,t.g.i.next,c,t.g.o):(t.g.o(c),c=Dt(t)),c},this.throw=function(c){return Jt(t.g),t.g.i?c=Ve(t,t.g.i.throw,c,t.g.o):(qt(t.g,c),c=Dt(t)),c},this.return=function(c){return an(t,c)},this[Symbol.iterator]=function(){return this}}function de(t){function c(b){return t.next(b)}function a(b){return t.throw(b)}return new Promise(function(b,I){function Y(L){L.done?b(L.value):Promise.resolve(L.value).then(c,a).then(Y,I)}Y(t.next())})}function gt(t){return de(new Kn(new De(t)))}S("Promise",function(t){function c(L){this.h=0,this.i=void 0,this.g=[],this.o=!1;var U=this.j();try{L(U.resolve,U.reject)}catch(j){U.reject(j)}}function a(){this.g=null}function b(L){return L instanceof c?L:new c(function(U){U(L)})}if(t)return t;a.prototype.h=function(L){if(this.g==null){this.g=[];var U=this;this.i(function(){U.l()})}this.g.push(L)};var I=G.setTimeout;a.prototype.i=function(L){I(L,0)},a.prototype.l=function(){for(;this.g&&this.g.length;){var L=this.g;this.g=[];for(var U=0;U<L.length;++U){var j=L[U];L[U]=null;try{j()}catch(Q){this.j(Q)}}}this.g=null},a.prototype.j=function(L){this.i(function(){throw L})},c.prototype.j=function(){function L(Q){return function(D){j||(j=!0,Q.call(U,D))}}var U=this,j=!1;return{resolve:L(this.D),reject:L(this.l)}},c.prototype.D=function(L){if(L===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(L instanceof c)this.G(L);else{t:switch(typeof L){case"object":var U=L!=null;break t;case"function":U=!0;break t;default:U=!1}U?this.A(L):this.m(L)}},c.prototype.A=function(L){var U=void 0;try{U=L.then}catch(j){this.l(j);return}typeof U=="function"?this.H(U,L):this.m(L)},c.prototype.l=function(L){this.s(2,L)},c.prototype.m=function(L){this.s(1,L)},c.prototype.s=function(L,U){if(this.h!=0)throw Error("Cannot settle("+L+", "+U+"): Promise already settled in state"+this.h);this.h=L,this.i=U,this.h===2&&this.F(),this.B()},c.prototype.F=function(){var L=this;I(function(){if(L.C()){var U=G.console;typeof U<"u"&&U.error(L.i)}},1)},c.prototype.C=function(){if(this.o)return!1;var L=G.CustomEvent,U=G.Event,j=G.dispatchEvent;return typeof j>"u"?!0:(typeof L=="function"?L=new L("unhandledrejection",{cancelable:!0}):typeof U=="function"?L=new U("unhandledrejection",{cancelable:!0}):(L=G.document.createEvent("CustomEvent"),L.initCustomEvent("unhandledrejection",!1,!0,L)),L.promise=this,L.reason=this.i,j(L))},c.prototype.B=function(){if(this.g!=null){for(var L=0;L<this.g.length;++L)Y.h(this.g[L]);this.g=null}};var Y=new a;return c.prototype.G=function(L){var U=this.j();L.K(U.resolve,U.reject)},c.prototype.H=function(L,U){var j=this.j();try{L.call(U,j.resolve,j.reject)}catch(Q){j.reject(Q)}},c.prototype.then=function(L,U){function j(ft,mt){return typeof ft=="function"?function(vt){try{Q(ft(vt))}catch(Zt){D(Zt)}}:mt}var Q,D,st=new c(function(ft,mt){Q=ft,D=mt});return this.K(j(L,Q),j(U,D)),st},c.prototype.catch=function(L){return this.then(void 0,L)},c.prototype.K=function(L,U){function j(){switch(Q.h){case 1:L(Q.i);break;case 2:U(Q.i);break;default:throw Error("Unexpected state: "+Q.h)}}var Q=this;this.g==null?Y.h(j):this.g.push(j),this.o=!0},c.resolve=b,c.reject=function(L){return new c(function(U,j){j(L)})},c.race=function(L){return new c(function(U,j){for(var Q=w(L),D=Q.next();!D.done;D=Q.next())b(D.value).K(U,j)})},c.all=function(L){var U=w(L),j=U.next();return j.done?b([]):new c(function(Q,D){function st(vt){return function(Zt){ft[vt]=Zt,mt--,mt==0&&Q(ft)}}var ft=[],mt=0;do ft.push(void 0),mt++,b(j.value).K(st(ft.length-1),D),j=U.next();while(!j.done)})},c});function pn(t,c){t instanceof String&&(t+="");var a=0,b=!1,I={next:function(){if(!b&&a<t.length){var Y=a++;return{value:c(Y,t[Y]),done:!1}}return b=!0,{done:!0,value:void 0}}};return I[Symbol.iterator]=function(){return I},I}var jn=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 I in b)Object.prototype.hasOwnProperty.call(b,I)&&(t[I]=b[I])}return t};S("Object.assign",function(t){return t||jn}),S("Object.is",function(t){return t||function(c,a){return c===a?c!==0||1/c===1/a:c!==c&&a!==a}}),S("Array.prototype.includes",function(t){return t||function(c,a){var b=this;b instanceof String&&(b=String(b));var I=b.length;for(a=a||0,0>a&&(a=Math.max(a+I,0));a<I;a++){var Y=b[a];if(Y===c||Object.is(Y,c))return!0}return!1}}),S("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}}),S("Array.prototype.keys",function(t){return t||function(){return pn(this,function(c){return c})}});var Re=this||self;function Ht(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 on(t,c){Te(Error("Invalid wire type: "+t+" (at position "+c+")"))}function Xn(){Te(Error("Failed to read varint, encoding is invalid."))}function Ln(t,c){return c=String.fromCharCode.apply(null,c),t==null?c:t+c}var xn,Nn=typeof TextDecoder<"u",dn,bn=typeof TextEncoder<"u";function En(t){if(bn)t=(dn||(dn=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),I=0;I<t.length;I++){var Y=t.charCodeAt(I);if(128>Y)b[a++]=Y;else{if(2048>Y)b[a++]=Y>>6|192;else{if(55296<=Y&&57343>=Y){if(56319>=Y&&I<t.length){var L=t.charCodeAt(++I);if(56320<=L&&57343>=L){Y=1024*(Y-55296)+L-56320+65536,b[a++]=Y>>18|240,b[a++]=Y>>12&63|128,b[a++]=Y>>6&63|128,b[a++]=Y&63|128;continue}else I--}if(c)throw Error("Found an unpaired surrogate");Y=65533}b[a++]=Y>>12|224,b[a++]=Y>>6&63|128}b[a++]=Y&63|128}}t=b.subarray(0,a)}return t}var Cn={},Oe=null;function Ke(t){var c;c===void 0&&(c=0),he(),c=Cn[c];for(var a=Array(Math.floor(t.length/3)),b=c[64]||"",I=0,Y=0;I<t.length-2;I+=3){var L=t[I],U=t[I+1],j=t[I+2],Q=c[L>>2];L=c[(L&3)<<4|U>>4],U=c[(U&15)<<2|j>>6],j=c[j&63],a[Y++]=Q+L+U+j}switch(Q=0,j=b,t.length-I){case 2:Q=t[I+1],j=c[(Q&15)<<2]||b;case 1:t=t[I],a[Y]=c[t>>2]+c[(t&3)<<4|Q>>4]+j+b}return a.join("")}function In(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),I=0;return Wn(t,function(Y){b[I++]=Y}),b.subarray(0,I)}function Wn(t,c){function a(j){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 j}he();for(var b=0;;){var I=a(-1),Y=a(0),L=a(64),U=a(64);if(U===64&&I===-1)break;c(I<<2|Y>>4),L!=64&&(c(Y<<4&240|L>>2),U!=64&&c(L<<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(""));Cn[a]=b;for(var I=0;I<b.length;I++){var Y=b[I];Oe[Y]===void 0&&(Oe[Y]=I)}}}}var Se=typeof Uint8Array=="function",ze;function ne(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 sn(t,c,a){return c===a?ze||(ze=new Uint8Array(0)):We?t.slice(c,a):new Uint8Array(t.subarray(c,a))}var Ue=0,_t=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 In(t);if(t.constructor===ne){if(t.g==null)var c=ze||(ze=new Uint8Array(0));else{c=Uint8Array;var a=t.g;a=a==null||Se&&a!=null&&a instanceof Uint8Array?a:typeof a=="string"?In(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 Ce(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&&At(this,t)}function At(t,c){t.h=Ze(c),t.l=0,t.i=t.h.length,t.g=t.l}Ce.prototype.reset=function(){this.g=this.l};function xe(t){for(var c=128,a=0,b=0,I=0;4>I&&128<=c;I++)c=t.h[t.g++],a|=(c&127)<<7*I;if(128<=c&&(c=t.h[t.g++],a|=(c&127)<<28,b|=(c&127)>>4),128<=c)for(I=0;5>I&&128<=c;I++)c=t.h[t.g++],b|=(c&127)<<7*I+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 we(t){var c=t.h[t.g],a=t.h[t.g+1],b=t.h[t.g+2],I=t.h[t.g+3];return t.g+=4,jt(t),(c<<0|a<<8|b<<16|I<<24)>>>0}Ce.prototype.m=function(){var t=we(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 $e=[];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,sn(t,0,c)};function je(t,c){for(;127<c;)Ot(t,c&127|128),c>>>=7;Ot(t,c)}function Pe(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,$e.length?(a=$e.pop(),c&&(a.v=c.v),t&&At(a,t),t=a):t=new Ce(t,c),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}Pe.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function Ie(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,on(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(!Ie(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,on(t.h,t.l)}}function ln(t,c,a){var b=t.g.i,I=ye(t.g),Y=t.g.g+I;if(t.g.i=Y,a(c,t),a=Y-t.g.g,a!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(I+" bytes, instead read "+(I-a)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return t.g.g=Y,t.g.i=b,c}var _e=[];function cn(){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 Fe(t,c,a){je(t.g,8*c+2),je(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 re(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 Qe(t){return t!==null&&typeof t=="object"&&t.constructor===Object}function te(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(Se&&t!=null&&t instanceof Uint8Array)return Ke(t);if(t instanceof ne){if(t.g==null)t="";else{var c=t.g;c=c==null||typeof c=="string"?c:Se&&c instanceof Uint8Array?Ke(c):null,t=t.g=c}return t}}return t}function zt(t,c){if(t!=null)return Array.isArray(t)||Qe(t)?hn(t,c):c(t)}function hn(t,c){if(Array.isArray(t)){for(var a=Array(t.length),b=0;b<t.length;b++)a[b]=zt(t[b],c);if(c=Array.isArray(t)){var I;Ge?I=t[Ge]:I=t.g,c=(I==null?0:I)&1}return c&&re(a),a}I={};for(a in t)I[a]=zt(t[a],c);return I}function fe(t){return t=te(t),Array.isArray(t)?hn(t,fe):t}var Ct;function Vt(t,c,a){var b=Ct;Ct=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],Qe(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)&&re(b):this.u[t]=ie):(Ye(this),(b=this.h[t])?Array.isArray(b)&&re(b):this.h[t]=ie)}var ie=Object.freeze(re([]));function Ye(t){var c=t.j+t.i;t.u[c]||(t.h=t.u[c]={})}function ee(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 oe(t,c,a){a=a===void 0?!1:a;var b=ee(t,c,a);return b==null&&(b=ie),b===ie&&(b=re(b.slice()),ut(t,c,b,a)),b}function tt(t,c){var a=oe(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=ee(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?(Ye(t),t.h[c]=a):t.u[c+t.i]=a}function Pt(t,c,a,b){a!==b?ut(t,c,a):ut(t,c,void 0,!1)}function ae(t,c,a){if(a===-1)return null;t.g||(t.g={});var b=t.g[a];if(b)return b;var I=ee(t,a,!1);return I==null?b:(c=new c(I),t.g[a]=c)}function ce(t,c,a){t.g||(t.g={});var b=t.g[a];if(!b){var I=oe(t,a,!1);b=[];for(var Y=0;Y<I.length;Y++)b[Y]=new c(I[Y]);t.g[a]=b}return b}function St(t,c,a,b,I){var Y=ce(t,b,c);a=a||new b,t=oe(t,c),I!=null?(Y.splice(I,0,a),t.splice(I,0,a.u)):(Y.push(a),t.push(a.u))}Vt.prototype.toJSON=function(){return hn(this.u,fe)},Vt.prototype.toString=function(){return this.u.toString()};function me(t,c){return t=ee(t,c),t==null?0:t}function He(t,c){return t=ee(t,c),t==null?"":t}function qe(t,c){if(t=t.m){ve(c,c.g.end());for(var a=0;a<t.length;a++)ve(c,t[a])}}var tn=Symbol();function fn(t,c,a){return t[tn]||(t[tn]=function(b,I){return c(b,I,a)})}function yn(t){var c=t[tn];if(!c){var a=t[nn]||(t[nn]=t());c=function(b,I){return Ne(b,I,a)},t[tn]=c}return c}function Le(t){var c=t.da;if(c)return yn(c);if(c=t.ia){var a=t.Y;return delete t.Y,fn(t.W.g,c,a)}}function en(t){var c=Le(t),a=t.W,b=t.ea;return c?function(I,Y){return b(I,Y,a,c)}:function(I,Y){return b(I,Y,a)}}function On(t){var c=t[0];switch(t.length){case 2:var a=t[1];return function(mt,vt,Zt){return c(mt,vt,Zt,a)};case 3:var b=t[1],I=yn(t[2]);return function(mt,vt,Zt){return c(mt,vt,Zt,b,I)};case 4:var Y=t[1],L=t[3],U=yn(t[2]);return function(mt,vt,Zt){return c(mt,vt,Zt,Y,U,L)};case 5:var j=t[1],Q=fn(j,t[3],t[4]);return function(mt,vt,Zt){return c(mt,vt,Zt,j,Q)};case 6:var D=t[1],st=t[5],ft=fn(D,t[3],t[4]);return function(mt,vt,Zt){return c(mt,vt,Zt,D,ft,st)};default:throw Error("Unsupported number of parameters, expected [2-6], got "+t.length)}}var nn=Symbol();function Ne(t,c,a){for(;Ie(c)&&c.h!=4;){var b=c.i,I=a[b];if(I)Array.isArray(I)&&(I=a[b]=On(I));else{var Y=a[0];Y&&(Y=Y[b])&&(I=a[b]=en(Y))}I&&I(c,t,b)||(I=c,b=t,Y=I.l,Vn(I),I.O||(I=sn(I.g.h,Y,I.g.g),(Y=b.m)?Y.push(I):b.m=[I]))}return t}function Zn(t,c){var a=new cn;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,I=b.length,Y=c=0;Y<I;Y++){var L=b[Y];L.length!==0&&(t.set(L,c),c+=L.length)}b=a.g,I=b.h,I!==0&&(t.set(b.g.subarray(0,I),c),b.h=0),a.h=[t],a=t}return a}function Sn(t,c,a){if(_e.length){var b=_e.pop();t&&(At(b.g,t),b.i=-1,b.h=-1),t=b}else t=new Pe(t);try{var I=new c;return Ne(I,t,a[nn]||(a[nn]=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>_e.length&&_e.push(t)}}function Be(t,c,a){if(c=ee(c,a),c!=null){je(t.g,8*a+5),t=t.g;var b=c;b=(a=0>b?1:0)?-b:b,b===0?0<1/b?Ue=_t=0:(_t=0,Ue=2147483648):isNaN(b)?(_t=0,Ue=2147483647):34028234663852886e22<b?(_t=0,Ue=(a<<31|2139095040)>>>0):11754943508222875e-54>b?(b=Math.round(b/Math.pow(2,-149)),_t=0,Ue=(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,_t=0,Ue=(a<<31|c+127<<23|b&8388607)>>>0),a=Ue,Ot(t,a>>>0&255),Ot(t,a>>>8&255),Ot(t,a>>>16&255),Ot(t,a>>>24&255)}}function kn(t,c,a){if(t.h!==1)return!1;var b=t.g;t=we(b);var I=we(b);b=2*(I>>31)+1;var Y=I>>>20&2047;return t=4294967296*(I&1048575)+t,Pt(c,a,Y==2047?t?NaN:1/0*b:Y==0?b*Math.pow(2,-1074)*t:b*Math.pow(2,Y-1075)*(t+4503599627370496),0),!0}function rn(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=oe(c,a),t.h==2){a=Ce.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(),Pt(c,a,t,0),!0)}function An(t,c,a){return t.h!==0?!1:(ut(c,a,xe(t.g)),!0)}function un(t,c,a){return t.h!==0?!1:(ut(c,a,ye(t.g)),!0)}function wn(t,c,a){return t.h!==0?!1:(t=ye(t.g),Pt(c,a,t,0),!0)}function _n(t,c,a){return t.h!==0?!1:(t=!!ye(t.g),Pt(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 I=t.g;t.g+=b,jt(t),t=t.h;var Y;if(Nn)(Y=xn)||(Y=xn=new TextDecoder("utf-8",{fatal:!1})),Y=Y.decode(t.subarray(I,I+b));else{b=I+b;for(var L=[],U=null,j,Q,D;I<b;)j=t[I++],128>j?L.push(j):224>j?I>=b?L.push(65533):(Q=t[I++],194>j||(Q&192)!==128?(I--,L.push(65533)):L.push((j&31)<<6|Q&63)):240>j?I>=b-1?L.push(65533):(Q=t[I++],(Q&192)!==128||j===224&&160>Q||j===237&&160<=Q||((Y=t[I++])&192)!==128?(I--,L.push(65533)):L.push((j&15)<<12|(Q&63)<<6|Y&63)):244>=j?I>=b-2?L.push(65533):(Q=t[I++],(Q&192)!==128||(j<<28)+(Q-144)>>30!==0||((Y=t[I++])&192)!==128||((D=t[I++])&192)!==128?(I--,L.push(65533)):(j=(j&7)<<18|(Q&63)<<12|(Y&63)<<6|D&63,j-=65536,L.push((j>>10&1023)+55296,(j&1023)+56320))):L.push(65533),8192<=L.length&&(U=Ln(U,L),L.length=0);Y=Ln(U,L)}return ut(c,a,Y),!0}function Fn(t,c,a,b,I){return t.h!==2?!1:(t=ln(t,new b,I),c.g||(c.g={}),b=t&&t.u,c.g[a]=t,ut(c,a,b,!1),!0)}function Hn(t,c,a,b,I){return t.h!==2?!1:(t=ln(t,new b,I),St(c,a,t,b,void 0),!0)}function m(t,c,a){return t.h!==0?!1:(ut(c,a,xe(t.g)),!0)}function W(t){Vt.call(this,t)}pt(W,Vt);function V(){return{1:un,2:rn,3:Qn,4:Qn}}function k(t,c){var a=ee(t,1);if(a!=null&&a!=null){je(c.g,8);var b=c.g;if(0<=a)je(b,a);else{for(var I=0;9>I;I++)Ot(b,a&127|128),a>>=7;Ot(b,1)}}Be(c,t,2),b=ee(t,3),b!=null&&Fe(c,3,En(b)),b=ee(t,4),b!=null&&Fe(c,4,En(b)),qe(t,c)}function z(t){Vt.call(this,t,-1,O)}pt(z,Vt),z.prototype.addClassification=function(t,c){return St(this,1,t,W,c),this};function ot(){return{1:[Hn,W,V]}}var O=[1];function rt(t){Vt.call(this,t)}pt(rt,Vt);function bt(){return{1:rn,2:rn,3:rn,4:rn,5:rn}}function Rt(t,c){Be(c,t,1),Be(c,t,2),Be(c,t,3),Be(c,t,4),Be(c,t,5),qe(t,c)}function Ut(t){Vt.call(this,t,-1,$t)}pt(Ut,Vt);function Nt(){return{1:[Hn,rt,bt]}}var $t=[1];function Et(t){Vt.call(this,t)}pt(Et,Vt);function Tt(){return{1:rn,2:rn,3:rn,4:rn,5:rn,6:An}}function kt(t,c){Be(c,t,1),Be(c,t,2),Be(c,t,3),Be(c,t,4),Be(c,t,5);var a=ee(t,6);if(a!=null&&a!=null){je(c.g,48);var b=c.g,I=a;a=0>I,I=Math.abs(I);var Y=I>>>0;for(I=Math.floor((I-Y)/4294967296),I>>>=0,a&&(I=~I>>>0,Y=(~Y>>>0)+1,4294967295<Y&&(Y=0,I++,4294967295<I&&(I=0))),Ue=Y,_t=I,a=Ue,Y=_t;0<Y||127<a;)Ot(b,a&127|128),a=(a>>>7|Y<<25)>>>0,Y>>>=7;Ot(b,a)}qe(t,c)}function Qt(t){Vt.call(this,t,-1,Je)}pt(Qt,Vt);function ue(){return{1:m,2:m,3:vn,4:[Fn,pe,ge],5:un,6:un,7:vn,8:vn,9:vn}}function pe(t){Vt.call(this,t)}pt(pe,Vt);function ge(){return{1:rn,2:rn,3:rn}}var Je=[3,7,8,9];function h(t){Vt.call(this,t)}pt(h,Vt);function y(){return{1:Tn,2:Tn,3:Tn}}function v(t){Vt.call(this,t)}pt(v,Vt);function C(){return{1:Tn,2:Tn,3:Tn}}function A(t){Vt.call(this,t)}pt(A,Vt);function _(){return{1:wn,2:[Fn,v,C],3:[Fn,h,y],4:_n}}function M(t){Vt.call(this,t,-1,lt)}pt(M,Vt);function q(){return{1:wn,2:[Hn,A,_],3:Tn,4:vn,5:vn,6:vn}}var lt=[2,4,5,6];function s(t){Vt.call(this,t,-1,R)}pt(s,Vt);function X(){return{1:wn,2:[Hn,M,q],3:[Fn,Qt,ue],4:kn,5:vn,6:vn}}var R=[2,5,6];function F(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.
|
|
89
88
|
|
|
90
|
-
`+t.getShaderInfoLog(a));return a}function N(t){return
|
|
89
|
+
`+t.getShaderInfoLog(a));return a}function N(t){return ce(t,W,1).map(function(c){return{index:me(c,1),$:it(c,2),label:ee(c,3)!=null?He(c,3):void 0,displayName:ee(c,4)!=null?He(c,4):void 0}})}function K(t){return{x:it(t,1),y:it(t,2),z:it(t,3),visibility:ee(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=F(a,`
|
|
91
90
|
attribute vec2 aVertex;
|
|
92
91
|
attribute vec2 aTex;
|
|
93
92
|
varying vec2 vTex;
|
|
94
93
|
void main(void) {
|
|
95
94
|
gl_Position = vec4(aVertex, 0.0, 1.0);
|
|
96
95
|
vTex = aTex;
|
|
97
|
-
}`,0),
|
|
96
|
+
}`,0),I=F(a,`
|
|
98
97
|
precision mediump float;
|
|
99
98
|
varying vec2 vTex;
|
|
100
99
|
uniform sampler2D sampler0;
|
|
101
100
|
void main(){
|
|
102
101
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
103
|
-
}`,1),
|
|
102
|
+
}`,1),Y=a.createProgram();if(a.attachShader(Y,b),a.attachShader(Y,I),a.linkProgram(Y),!a.getProgramParameter(Y,a.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
104
103
|
|
|
105
|
-
`+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=u.width,a.canvas.height=u.height,a.viewport(0,0,u.width,u.height),a.activeTexture(a.TEXTURE0),t.h.bindTexture2d(u.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 Gt=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 Mt(t,u){return u+t}function St(t,u){window[t]=u}function ft(t){var u=document.createElement("script");return u.setAttribute("src",t),u.setAttribute("crossorigin","anonymous"),new Promise(function(a){u.addEventListener("load",function(){a()},!1),u.addEventListener("error",function(){a()},!1),document.body.appendChild(u)})}function Xt(){return gt(function(t){switch(t.g){case 1:return t.m=2,_(t,WebAssembly.instantiate(Gt),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 Yt(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||Mt,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.T=u,t.options){u=Y(Object.keys(t.options));for(var a=u.next();!a.done;a=u.next()){a=a.value;var b=t.options[a].default;b!==void 0&&(this.j[a]=typeof b=="function"?b():b)}}}o=Yt.prototype,o.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function Ft(t){var u,a,b,S,L,H,K,j,D,$,ut;return gt(function(mt){switch(mt.g){case 1:return t.S?(u=t.g.files===void 0?[]:typeof t.g.files=="function"?t.g.files(t.j):t.g.files,_(mt,Xt(),2)):mt.return();case 2:if(a=mt.h,typeof window=="object")return St("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),St("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),H=u.filter(function(pt){return pt.data!==void 0}),K=u.filter(function(pt){return pt.data===void 0}),j=Promise.all(H.map(function(pt){var vt=v(t,pt.url);if(pt.path!==void 0){var Zt=pt.path;vt=vt.then(function(jt){return t.overrideFile(Zt,jt),Promise.resolve(jt)})}return vt})),D=Promise.all(K.map(function(pt){return pt.simd===void 0||pt.simd&&a||!pt.simd&&!a?ft(t.locateFile(pt.url,t.T)):Promise.resolve()})).then(function(){var pt,vt,Zt;return gt(function(jt){if(jt.g==1)return pt=window.createMediapipeSolutionsWasm,vt=window.createMediapipeSolutionsPackedAssets,Zt=t,_(jt,pt(vt),2);Zt.h=jt.h,jt.g=0})}),$=function(){return gt(function(pt){return t.g.graph&&t.g.graph.url?pt=_(pt,v(t,t.g.graph.url),0):(pt.g=0,pt=void 0),pt})}(),_(mt,Promise.all([D,j,$]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return b=u.filter(function(pt){return pt.simd===void 0||pt.simd&&a||!pt.simd&&!a}).map(function(pt){return t.locateFile(pt.url,t.T)}),importScripts.apply(null,k(b)),S=t,_(mt,createMediapipeSolutionsWasm(Module),6);case 6:S.h=mt.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),mt.g=4;break;case 7:if(t.l=document.createElement("canvas"),ut=t.l.getContext("webgl2",{}),!ut&&(ut=t.l.getContext("webgl",{}),!ut))return alert("Failed to create WebGL canvas context when passing video frame."),mt.return();t.F=ut,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.S=!1,mt.g=0}})}function Ct(t){var u,a,b,S,L,H,K,j;return gt(function(D){if(D.g==1){if(t.g.graph&&t.g.graph.url&&t.R===t.g.graph.url)return D.return();if(t.o=!0,!t.g.graph||!t.g.graph.url){D.g=2;return}return t.R=t.g.graph.url,_(D,v(t,t.g.graph.url),3)}for(D.g!=2&&(u=D.h,t.i.loadGraph(u)),a=Y(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=Y(t.g.listeners),H=L.next();!H.done;H=L.next())K=H.value,J(t,K);j=t.j,t.j={},t.setOptions(j),D.g=0})}o.reset=function(){var t=this;return gt(function(u){t.i&&(t.i.reset(),t.m={},t.s={}),u.g=0})},o.setOptions=function(t,u){var a=this;if(u=u||this.g.options){for(var b=[],S=[],L={},H=Y(Object.keys(t)),K=H.next();!K.done;L={L:L.L,M:L.M},K=H.next()){var j=K.value;j in this.j&&this.j[j]===t[j]||(this.j[j]=t[j],K=u[j],K!==void 0&&(K.onChange&&(L.L=K.onChange,L.M=t[j],b.push(function(D){return function(){var $;return gt(function(ut){if(ut.g==1)return _(ut,D.L(D.M),2);$=ut.h,$===!0&&(a.o=!0),ut.g=0})}}(L))),K.graphOptionXref&&(j={valueNumber:K.type===1?t[j]:0,valueBoolean:K.type===0?t[j]:!1,valueString:K.type===2?t[j]:""},K=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),K.graphOptionXref),j),S.push(K))))}(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 u,a,b,S,L,H,K;return gt(function(j){switch(j.g){case 1:if(!t.o)return j.return();if(!t.A){j.g=2;break}u=Y(t.A),a=u.next();case 3:if(a.done){j.g=5;break}return b=a.value,_(j,b(),4);case 4:a=u.next(),j.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(S=new t.h.GraphOptionChangeRequestList,L=Y(t.B),H=L.next();!H.done;H=L.next())K=H.value,S.push_back(K);t.i.changeOptions(S),S.delete(),t.B=void 0}t.o=!1,j.g=0}})}o.initialize=function(){var t=this;return gt(function(u){return u.g==1?_(u,Ft(t),2):u.g!=3?_(u,Ct(t),3):_(u,l(t),0)})};function v(t,u){var a,b;return gt(function(S){return u in t.G?S.return(t.G[u]):(a=t.locateFile(u,""),b=fetch(a).then(function(L){return L.arrayBuffer()}),t.G[u]=b,S.return(b))})}o.overrideFile=function(t,u){this.i?this.i.overrideFile(t,u):this.C[t]=u},o.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},o.send=function(t,u){var a=this,b,S,L,H,K,j,D,$,ut;return gt(function(mt){switch(mt.g){case 1:return a.g.inputs?(b=1e3*(u==null?performance.now():u),_(mt,a.D,2)):mt.return();case 2:return _(mt,a.initialize(),3);case 3:for(S=new a.h.PacketDataList,L=Y(Object.keys(t)),H=L.next();!H.done;H=L.next())if(K=H.value,j=a.g.inputs[K]){t:{var pt=t[K];switch(j.type){case"video":var vt=a.m[j.stream];if(vt||(vt=new U(a.h,a.F),a.m[j.stream]=vt),vt.l===0&&(vt.l=vt.h.createTexture()),typeof HTMLVideoElement<"u"&&pt instanceof HTMLVideoElement)var Zt=pt.videoWidth,jt=pt.videoHeight;else typeof HTMLImageElement<"u"&&pt instanceof HTMLImageElement?(Zt=pt.naturalWidth,jt=pt.naturalHeight):(Zt=pt.width,jt=pt.height);jt={glName:vt.l,width:Zt,height:jt},Zt=vt.g,Zt.canvas.width=jt.width,Zt.canvas.height=jt.height,Zt.activeTexture(Zt.TEXTURE0),vt.h.bindTexture2d(vt.l),Zt.texImage2D(Zt.TEXTURE_2D,0,Zt.RGBA,Zt.RGBA,Zt.UNSIGNED_BYTE,pt),vt.h.bindTexture2d(0),vt=jt;break t;case"detections":for(vt=a.m[j.stream],vt||(vt=new yt(a.h),a.m[j.stream]=vt),vt.data||(vt.data=new vt.g.DetectionListData),vt.data.reset(pt.length),jt=0;jt<pt.length;++jt){Zt=pt[jt];var se=vt.data,le=se.setBoundingBox,Ke=jt,Rn=Zt.U,Ue=new Et;if(at(Ue,1,Rn.aa),at(Ue,2,Rn.ba),at(Ue,3,Rn.height),at(Ue,4,Rn.width),at(Ue,5,Rn.rotation),at(Ue,6,Rn.Z),Rn=Zn(Ue,Kt),le.call(se,Ke,Rn),Zt.P)for(se=0;se<Zt.P.length;++se){Ue=Zt.P[se];var Jn=!!Ue.visibility;le=vt.data,Ke=le.addNormalizedLandmark,Rn=jt,Ue=Object.assign(Object.assign({},Ue),{visibility:Jn?Ue.visibility:0}),Jn=new it,at(Jn,1,Ue.x),at(Jn,2,Ue.y),at(Jn,3,Ue.z),Ue.visibility&&at(Jn,4,Ue.visibility),Ue=Zn(Jn,It),Ke.call(le,Rn,Ue)}if(Zt.N)for(se=0;se<Zt.N.length;++se)le=vt.data,Ke=le.addClassification,Rn=jt,Ue=Zt.N[se],Jn=new V,at(Jn,2,Ue.$),Ue.index&&at(Jn,1,Ue.index),Ue.label&&at(Jn,3,Ue.label),Ue.displayName&&at(Jn,4,Ue.displayName),Ue=Zn(Jn,E),Ke.call(le,Rn,Ue)}vt=vt.data;break t;default:vt={}}}switch(D=vt,$=j.stream,j.type){case"video":S.pushTexture2d(Object.assign(Object.assign({},D),{stream:$,timestamp:b}));break;case"detections":ut=D,ut.stream=$,ut.timestamp=b,S.pushDetectionList(ut);break;default:throw Error("Unknown input config type: '"+j.type+"'")}}return a.i.send(S),_(mt,a.D,4);case 4:S.delete(),mt.g=0}})};function x(t,u,a){var b,S,L,H,K,j,D,$,ut,mt,pt,vt,Zt,jt;return gt(function(se){switch(se.g){case 1:if(!a)return se.return(u);for(b={},S=0,L=Y(Object.keys(a)),H=L.next();!H.done;H=L.next())K=H.value,j=a[K],typeof j!="string"&&j.type==="texture"&&u[j.stream]!==void 0&&++S;1<S&&(t.H=!1),D=Y(Object.keys(a)),H=D.next();case 2:if(H.done){se.g=4;break}if($=H.value,ut=a[$],typeof ut=="string")return Zt=b,jt=$,_(se,T(t,$,u[ut]),14);if(mt=u[ut.stream],ut.type==="detection_list"){if(mt){for(var le=mt.getRectList(),Ke=mt.getLandmarksList(),Rn=mt.getClassificationsList(),Ue=[],Jn=0;Jn<le.size();++Jn){var yr=Sn(le.get(Jn),Et,wt);yr={U:{aa:ot(yr,1),ba:ot(yr,2),height:ot(yr,3),width:ot(yr,4),rotation:ot(yr,5,0),Z:me(yr,6)},P:ue(Sn(Ke.get(Jn),Ut,kt),it,1).map(A),N:N(Sn(Rn.get(Jn),P,lt))},Ue.push(yr)}le=Ue}else le=[];b[$]=le,se.g=7;break}if(ut.type==="proto_list"){if(mt){for(le=Array(mt.size()),Ke=0;Ke<mt.size();Ke++)le[Ke]=mt.get(Ke);mt.delete()}else le=[];b[$]=le,se.g=7;break}if(mt===void 0){se.g=3;break}if(ut.type==="float_list"){b[$]=mt,se.g=7;break}if(ut.type==="proto"){b[$]=mt,se.g=7;break}if(ut.type!=="texture")throw Error("Unknown output config type: '"+ut.type+"'");return pt=t.s[$],pt||(pt=new U(t.h,t.F),t.s[$]=pt),_(se,rt(pt,mt,t.H),13);case 13:vt=se.h,b[$]=vt;case 7:ut.transform&&b[$]&&(b[$]=ut.transform(b[$])),se.g=3;break;case 14:Zt[jt]=se.h;case 3:H=D.next(),se.g=2;break;case 4:return se.return(b)}})}function T(t,u,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[u],b||(b=new U(t.h,t.F),t.s[u]=b),S.return(rt(b,a,t.H))):S.return(void 0)})}function J(t,u){for(var a=u.name||"$",b=[].concat(k(u.wants)),S=new t.h.StringList,L=Y(u.wants),H=L.next();!H.done;H=L.next())S.push_back(H.value);L=t.h.PacketListener.implement({onResults:function(K){for(var j={},D=0;D<u.wants.length;++D)j[b[D]]=K.get(D);var $=t.listeners[a];$&&(t.D=x(t,j,u.outs).then(function(ut){ut=$(ut);for(var mt=0;mt<u.wants.length;++mt){var pt=j[b[mt]];typeof pt=="object"&&pt.hasOwnProperty&&pt.hasOwnProperty("delete")&&pt.delete()}ut&&(t.D=ut)}))}}),t.i.attachMultiListener(S,L),S.delete()}o.onResults=function(t,u){this.listeners[u||"$"]=t},Jt("Solution",Yt),Jt("OptionType",{BOOL:0,NUMBER:1,ca:2,0:"BOOL",1:"NUMBER",2:"STRING"});function i(t){var u=me(t,1),a=ae(t,h,3);return a={x:ot(a,1),y:ot(a,2),depth:ot(a,3)},t=ae(t,G,2),{id:u,point2d:a,point3d:{x:ot(t,1),y:ot(t,2),z:ot(t,3)}}}function d(t){var u=Sn(t,s,X);t=[],u=ue(u,B,2);for(var a=0;a<u.length;a++)t.push({id:me(u[a],1),keypoints:ue(u[a],M,2).map(i),visibility:ot(u[a],3),scale:nt(u[a],6),translation:nt(u[a],5),rotation:nt(u[a],4)});return t}function Z(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 c={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 f(t){var u=this;t=t||{},this.g=new Yt({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,H;return gt(function(K){return K.g==1?(b=a,u.g.setOptions({allowedLabels:e(b)},c),S=Z(b),L="object_detection_3d.tflite",_(K,v(u.g,S),2)):(H=K.h,u.g.overrideFile(L,H),K.return(!0))})}},focalLength:{default:[1,1],onChange:function(a){var b;return gt(function(S){return b=a,u.h=b,u.g.setOptions({focalX:b[0],focalY:b[1]},c),S.return(!0)})}},principalPoint:{default:[0,0],onChange:function(a){var b;return gt(function(S){return b=a,u.i=b,u.g.setOptions({principalX:b[0],principalY:b[1]},c),S.return(!0)})}},imageSize:{onChange:function(a){var b,S,L,H;return gt(function(K){if(u.h===void 0||u.i===void 0)return console.error('"focalLength" and "principalPoint" must be set if setting image size'),K.return();b=a,S=[b[0]/2,b[1]/2],L=[u.h[0]/S[0],u.h[1]/S[1]],H=[u.i[0]/S[0],u.i[1]/S[1]],u.setOptions({focalLength:L,principalPoint:H}),K.g=0})}}}})}o=f.prototype,o.close=function(){return this.g.close(),Promise.resolve()},o.onResults=function(t){this.g.onResults(t)},o.initialize=function(){var t=this;return gt(function(u){return _(u,t.g.initialize(),0)})},o.reset=function(){this.g.reset()},o.send=function(t){var u=this;return gt(function(a){return _(a,u.g.send(t),0)})},o.setOptions=function(t){this.g.setOptions(t)},Jt("Objectron",f),Jt("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]]),Jt("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}),Jt("VERSION","0.4.1636596145")}).call(Zi);const vi={};(function(){var o;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 m(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 y=m(this);function I(s,X){if(X)t:{var R=y;s=s.split(".");for(var w=0;w<s.length-1;w++){var N=s[w];if(!(N in R))break t;R=R[N]}s=s[s.length-1],w=R[s],X=X(w),X!=w&&X!=null&&r(R,s,{configurable:!0,writable:!0,value:X})}}I("Symbol",function(s){function X(A){if(this instanceof X)throw new TypeError("Symbol is not a constructor");return new R(w+(A||"")+"_"+N++,A)}function R(A,U){this.g=A,r(this,"description",{configurable:!0,writable:!0,value:U})}if(s)return s;R.prototype.toString=function(){return this.g};var w="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",N=0;return X}),I("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=y[X[R]];typeof w=="function"&&typeof w.prototype[s]!="function"&&r(w.prototype,s,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return s});function F(s){return s={next:s},s[Symbol.iterator]=function(){return this},s}function Y(s){var X=typeof Symbol<"u"&&Symbol.iterator&&s[Symbol.iterator];return X?X.call(s):{next:n(s)}}function k(s){if(!(s instanceof Array)){s=Y(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},O;if(typeof Object.setPrototypeOf=="function")O=Object.setPrototypeOf;else{var st;t:{var xt={a:!0},Vt={};try{Vt.__proto__=xt,st=Vt.a;break t}catch{}st=!1}O=st?function(s,X){if(s.__proto__=X,s.__proto__!==X)throw new TypeError(s+" is not extensible");return s}:null}var dt=O;function ht(s,X){if(s.prototype=et(X.prototype),s.prototype.constructor=s,dt)dt(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 Ht(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Lt(s){if(s.l)throw new TypeError("Generator is already running");s.l=!0}Ht.prototype.o=function(s){this.h=s};function At(s,X){s.j={U:X,V:!0},s.g=s.m||s.s}Ht.prototype.return=function(s){this.j={return:s},this.g=this.s};function _(s,X,R){return s.g=R,{value:X}}function Ee(s){this.g=new Ht,this.h=s}function an(s,X){Lt(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),$t(s))}function We(s,X,R,w){try{var N=X.call(s.g.i,R);if(!(N instanceof Object))throw new TypeError("Iterator result "+N+" is not an object");if(!N.done)return s.g.l=!1,N;var A=N.value}catch(U){return s.g.i=null,At(s.g,U),$t(s)}return s.g.i=null,w.call(s.g,A),$t(s)}function $t(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,At(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 An(s){this.next=function(X){return Lt(s.g),s.g.i?X=We(s,s.g.i.next,X,s.g.o):(s.g.o(X),X=$t(s)),X},this.throw=function(X){return Lt(s.g),s.g.i?X=We(s,s.g.i.throw,X,s.g.o):(At(s.g,X),X=$t(s)),X},this.return=function(X){return an(s,X)},this[Symbol.iterator]=function(){return this}}function de(s){function X(w){return s.next(w)}function R(w){return s.throw(w)}return new Promise(function(w,N){function A(U){U.done?w(U.value):Promise.resolve(U.value).then(X,R).then(A,N)}A(s.next())})}function gt(s){return de(new An(new Ee(s)))}I("Promise",function(s){function X(U){this.h=0,this.i=void 0,this.g=[],this.o=!1;var rt=this.j();try{U(rt.resolve,rt.reject)}catch(q){rt.reject(q)}}function R(){this.g=null}function w(U){return U instanceof X?U:new X(function(rt){rt(U)})}if(s)return s;R.prototype.h=function(U){if(this.g==null){this.g=[];var rt=this;this.i(function(){rt.l()})}this.g.push(U)};var N=y.setTimeout;R.prototype.i=function(U){N(U,0)},R.prototype.l=function(){for(;this.g&&this.g.length;){var U=this.g;this.g=[];for(var rt=0;rt<U.length;++rt){var q=U[rt];U[rt]=null;try{q()}catch(yt){this.j(yt)}}}this.g=null},R.prototype.j=function(U){this.i(function(){throw U})},X.prototype.j=function(){function U(yt){return function(Gt){q||(q=!0,yt.call(rt,Gt))}}var rt=this,q=!1;return{resolve:U(this.C),reject:U(this.l)}},X.prototype.C=function(U){if(U===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(U instanceof X)this.F(U);else{t:switch(typeof U){case"object":var rt=U!=null;break t;case"function":rt=!0;break t;default:rt=!1}rt?this.v(U):this.m(U)}},X.prototype.v=function(U){var rt=void 0;try{rt=U.then}catch(q){this.l(q);return}typeof rt=="function"?this.G(rt,U):this.m(U)},X.prototype.l=function(U){this.s(2,U)},X.prototype.m=function(U){this.s(1,U)},X.prototype.s=function(U,rt){if(this.h!=0)throw Error("Cannot settle("+U+", "+rt+"): Promise already settled in state"+this.h);this.h=U,this.i=rt,this.h===2&&this.D(),this.A()},X.prototype.D=function(){var U=this;N(function(){if(U.B()){var rt=y.console;typeof rt<"u"&&rt.error(U.i)}},1)},X.prototype.B=function(){if(this.o)return!1;var U=y.CustomEvent,rt=y.Event,q=y.dispatchEvent;return typeof q>"u"?!0:(typeof U=="function"?U=new U("unhandledrejection",{cancelable:!0}):typeof rt=="function"?U=new rt("unhandledrejection",{cancelable:!0}):(U=y.document.createEvent("CustomEvent"),U.initCustomEvent("unhandledrejection",!1,!0,U)),U.promise=this,U.reason=this.i,q(U))},X.prototype.A=function(){if(this.g!=null){for(var U=0;U<this.g.length;++U)A.h(this.g[U]);this.g=null}};var A=new R;return X.prototype.F=function(U){var rt=this.j();U.J(rt.resolve,rt.reject)},X.prototype.G=function(U,rt){var q=this.j();try{U.call(rt,q.resolve,q.reject)}catch(yt){q.reject(yt)}},X.prototype.then=function(U,rt){function q(St,ft){return typeof St=="function"?function(Xt){try{yt(St(Xt))}catch(Yt){Gt(Yt)}}:ft}var yt,Gt,Mt=new X(function(St,ft){yt=St,Gt=ft});return this.J(q(U,yt),q(rt,Gt)),Mt},X.prototype.catch=function(U){return this.then(void 0,U)},X.prototype.J=function(U,rt){function q(){switch(yt.h){case 1:U(yt.i);break;case 2:rt(yt.i);break;default:throw Error("Unexpected state: "+yt.h)}}var yt=this;this.g==null?A.h(q):this.g.push(q),this.o=!0},X.resolve=w,X.reject=function(U){return new X(function(rt,q){q(U)})},X.race=function(U){return new X(function(rt,q){for(var yt=Y(U),Gt=yt.next();!Gt.done;Gt=yt.next())w(Gt.value).J(rt,q)})},X.all=function(U){var rt=Y(U),q=rt.next();return q.done?w([]):new X(function(yt,Gt){function Mt(Xt){return function(Yt){St[Xt]=Yt,ft--,ft==0&&yt(St)}}var St=[],ft=0;do St.push(void 0),ft++,w(q.value).J(Mt(St.length-1),Gt),q=rt.next();while(!q.done)})},X});function pn(s,X){s instanceof String&&(s+="");var R=0,w=!1,N={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 N[Symbol.iterator]=function(){return N},N}var jn=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 N in w)Object.prototype.hasOwnProperty.call(w,N)&&(s[N]=w[N])}return s};I("Object.assign",function(s){return s||jn}),I("Object.is",function(s){return s||function(X,R){return X===R?X!==0||1/X===1/R:X!==X&&R!==R}}),I("Array.prototype.includes",function(s){return s||function(X,R){var w=this;w instanceof String&&(w=String(w));var N=w.length;for(R=R||0,0>R&&(R=Math.max(R+N,0));R<N;R++){var A=w[R];if(A===X||Object.is(A,X))return!0}return!1}}),I("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}}),I("Array.prototype.keys",function(s){return s||function(){return pn(this,function(X){return X})}});var Re=this||self;function Jt(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 on(s){Te(s)}function Xn(s,X){on(Error("Invalid wire type: "+s+" (at position "+X+")"))}function Fn(){on(Error("Failed to read varint, encoding is invalid."))}function xn(s,X){return X=String.fromCharCode.apply(null,X),s==null?X:s+X}var Nn,dn=typeof TextDecoder<"u",bn,kn=typeof TextEncoder<"u";function Hn(s){if(kn)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),N=0;N<s.length;N++){var A=s.charCodeAt(N);if(128>A)w[R++]=A;else{if(2048>A)w[R++]=A>>6|192;else{if(55296<=A&&57343>=A){if(56319>=A&&N<s.length){var U=s.charCodeAt(++N);if(56320<=U&&57343>=U){A=1024*(A-55296)+U-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 N--}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 Oe={},je=null;function In(s){var X;X===void 0&&(X=0),Ye(),X=Oe[X];for(var R=Array(Math.floor(s.length/3)),w=X[64]||"",N=0,A=0;N<s.length-2;N+=3){var U=s[N],rt=s[N+1],q=s[N+2],yt=X[U>>2];U=X[(U&3)<<4|rt>>4],rt=X[(rt&15)<<2|q>>6],q=X[q&63],R[A++]=yt+U+rt+q}switch(yt=0,q=w,s.length-N){case 2:yt=s[N+1],q=X[(yt&15)<<2]||w;case 1:s=s[N],R[A]=X[s>>2]+X[(s&3)<<4|yt>>4]+q+w}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 w=new Uint8Array(R),N=0;return he(s,function(A){w[N++]=A}),w.subarray(0,N)}function he(s,X){function R(q){for(;w<s.length;){var yt=s.charAt(w++),Gt=je[yt];if(Gt!=null)return Gt;if(!/^[\s\xa0]*$/.test(yt))throw Error("Unknown base64 encoding at char: "+yt)}return q}Ye();for(var w=0;;){var N=R(-1),A=R(0),U=R(64),rt=R(64);if(rt===64&&N===-1)break;X(N<<2|A>>4),U!=64&&(X(A<<4&240|U>>2),rt!=64&&X(U<<6&192|rt))}}function Ye(){if(!je){je={};for(var s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),X=["+/=","+/","-_=","-_.","-_"],R=0;5>R;R++){var w=s.concat(X[R].split(""));Oe[R]=w;for(var N=0;N<w.length;N++){var A=w[N];je[A]===void 0&&(je[A]=N)}}}}var Pe=typeof Uint8Array=="function",ne;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:Pe&&s instanceof Uint8Array?In(s):null;return s};var sn=typeof Uint8Array.prototype.slice=="function";function Me(s,X,R){return X===R?ne||(ne=new Uint8Array(0)):sn?s.slice(X,R):new Uint8Array(s.subarray(X,R))}var Qt=0,Ze=0;function Ce(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===Ve){if(s.g==null)var X=ne||(ne=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 Bt(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=Ce(X),s.l=0,s.i=s.h.length,s.g=s.l}Bt.prototype.reset=function(){this.g=this.l};function zt(s){s.g>s.i&&(s.j=!0,on(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,zt(s),w):(R=X[s.g+1],w|=(R&127)<<7,128>R?(s.g+=2,zt(s),w):(R=X[s.g+2],w|=(R&127)<<14,128>R?(s.g+=3,zt(s),w):(R=X[s.g+3],w|=(R&127)<<21,128>R?(s.g+=4,zt(s),w):(R=X[s.g+4],w|=(R&15)<<28,128>R?(s.g+=5,zt(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,Fn(),w):(zt(s),w))))))}var we=[];function $e(){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}$e.prototype.length=function(){return this.h},$e.prototype.end=function(){var s=this.g,X=this.h;return this.h=0,Me(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,we.length?(R=we.pop(),X&&(R.u=X.u),s&&Ie(R,s),s=R):s=new Bt(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 Se(s){switch(s.h){case 0:if(s.h!=0)Se(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,zt(s);break t}X++}s.j=!0,Fn()}break;case 1:s=s.g,s.g+=8,zt(s);break;case 2:s.h!=2?Se(s):(X=ye(s.g),s=s.g,s.g+=X,zt(s));break;case 5:s=s.g,s.g+=4,zt(s);break;case 3:X=s.i;do{if(!_e(s)){s.j=!0,on(Error("Unmatched start-group tag: stream EOF"));break}if(s.h==4){s.i!=X&&(s.j=!0,on(Error("Unmatched end-group tag")));break}Se(s)}while(1);break;default:s.j=!0,Xn(s.h,s.l)}}function Wn(s,X,R){s.N||(s=Me(s.g.h,R,s.g.g),(R=X.m)?R.push(s):X.m=[s])}var ln=[];function Qe(){this.h=[],this.i=0,this.g=new $e}function un(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),un(s,s.g.end()),un(s,R)}var Le=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Ge(s,X){Object.isFrozen(s)||(Le?s[Le]|=X:s.g!==void 0?s.g|=X:Object.defineProperties(s,{g:{value:X,configurable:!0,writable:!0,enumerable:!1}}))}function re(s){if(!s)return 0;var X;return Le?X=s[Le]:X=s.g,X==null?0:X}function De(s){return Array.isArray(s)&&Ge(s,1),s}function te(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 hn(s){switch(typeof s){case"number":return isFinite(s)?s:String(s);case"object":return Pe&&s!=null&&s instanceof Uint8Array?In(s):s;default:return s}}function fe(s,X){if(s!=null)return Array.isArray(s)||Pt(s)?Nt(s,X):X(s)}function Nt(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 re(s)&1&&De(R),R}R={};for(w in s)R[w]=fe(s[w],X);return R}var Wt;function ie(s,X,R){var w=Wt;Wt=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],Pt(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]=Fe):(ee(this),(w=this.h[s])?De(w):this.h[s]=Fe)}var Fe=Object.freeze(De([]));function ee(s){var X=s.l+s.j;s.g[X]||(s.h=s.g[X]={})}function oe(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 nt(s,X,R){R=R===void 0?!0:R;var w=w===void 0?!1:w,N=oe(s,X,w);return N==null&&(N=Fe),N===Fe?(N=De([]),at(s,X,N,w)):R&&Array.isArray(N)&&re(N)&2&&(N=N.slice(),at(s,X,N,w)),N}function ot(s,X,R){return s=oe(s,X),s=s==null?s:+s,s==null?R===void 0?0:R:s}function at(s,X,R,w){(w===void 0?0:w)||X>=s.l?(ee(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 N=nt(s,R,!1);w=[];for(var A=Array.isArray(N)?!!(re(N)&2):!1,U=0;U<N.length;U++)w[U]=new X(N[U]),A&&te(w[U].g);A&&(te(w),Object.freeze(w)),s.i[R]=w}return w}function ae(s,X,R,w,N){var A=_t(s,w,X);R=R||new w,s=nt(s,X),N!=null?(A.splice(N,0,R),s.splice(N,0,ue(R))):(A.push(R),s.push(ue(R)))}ie.prototype.toJSON=function(){var s=ue(this);return Nt(s,hn)};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}ie.prototype.toString=function(){return ue(this).toString()};function Tt(s,X){return s=oe(s,X),s==null?0:s}function me(s,X){return s=oe(s,X),s==null?"":s}function Ne(s,X){if(s=s.m){un(X,X.g.end());for(var R=0;R<s.length;R++)un(X,s[R])}}function qe(s){var X=s[0];switch(s.length){case 2:var R=s[1];return function(q,yt,Gt){return X(q,yt,Gt,R)};case 3:var w=s[1],N=s[2];return function(q,yt,Gt){return X(q,yt,Gt,w,N)};case 4:var A=s[1],U=s[2],rt=s[3];return function(q,yt,Gt){return X(q,yt,Gt,A,U,rt)};default:throw Error("unsupported number of parameters, expected [2-4], got "+s.length)}}function tn(s,X,R){for(;_e(X)&&X.h!=4;){var w=X.i,N=R[w];if(N){if(Array.isArray(N)&&(N=R[w]=qe(N)),!N(X,s,w)){w=X,N=s;var A=w.l;Se(w),Wn(w,N,A)}}else w=X,N=s,A=w.l,Se(w),Wn(w,N,A)}return s}function fn(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,N=w.length,A=X=0;A<N;A++){var U=w[A];U.length!==0&&(s.set(U,X),X+=U.length)}w=R.g,N=w.h,N!==0&&(s.set(w.g.subarray(0,N),X),w.h=0),R.h=[s],R=s}return R}function yn(s,X,R){if(ln.length){var w=ln.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>ln.length&&ln.push(s)}}function He(s,X,R){if(X=oe(X,R),X!=null){Ot(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 en(s,X,R){if(s.h!==5)return!1;s=s.g;var w=s.h[s.g],N=s.h[s.g+1],A=s.h[s.g+2],U=s.h[s.g+3];return s.g+=4,zt(s),N=(w<<0|N<<8|A<<16|U<<24)>>>0,s=2*(N>>31)+1,w=N>>>23&255,N&=8388607,at(X,R,w==255?N?NaN:1/0*s:w==0?s*Math.pow(2,-149)*N:s*Math.pow(2,w-150)*(N+Math.pow(2,23))),!0}function zn(s,X,R){if(s.h!==0)return!1;for(var w=s.g,N=128,A=0,U=s=0;4>U&&128<=N;U++)N=w.h[w.g++],A|=(N&127)<<7*U;if(128<=N&&(N=w.h[w.g++],A|=(N&127)<<28,s|=(N&127)>>4),128<=N)for(U=0;5>U&&128<=N;U++)N=w.h[w.g++],s|=(N&127)<<7*U+3;return 128>N?(w=A>>>0,N=s>>>0,(s=N&2147483648)&&(w=~w+1>>>0,N=~N>>>0,w==0&&(N=N+1>>>0)),w=4294967296*N+(w>>>0),s=s?-w:w):(w.j=!0,Fn(),s=void 0),at(X,R,s),!0}function nn(s,X,R){return s.h!==0?!1:(at(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 N=s.g;s.g+=w,zt(s),s=s.h;var A;if(dn)(A=Nn)||(A=Nn=new TextDecoder("utf-8",{fatal:!1})),A=A.decode(s.subarray(N,N+w));else{w=N+w;for(var U=[],rt=null,q,yt,Gt;N<w;)q=s[N++],128>q?U.push(q):224>q?N>=w?U.push(65533):(yt=s[N++],194>q||(yt&192)!==128?(N--,U.push(65533)):U.push((q&31)<<6|yt&63)):240>q?N>=w-1?U.push(65533):(yt=s[N++],(yt&192)!==128||q===224&&160>yt||q===237&&160<=yt||((A=s[N++])&192)!==128?(N--,U.push(65533)):U.push((q&15)<<12|(yt&63)<<6|A&63)):244>=q?N>=w-2?U.push(65533):(yt=s[N++],(yt&192)!==128||(q<<28)+(yt-144)>>30!==0||((A=s[N++])&192)!==128||((Gt=s[N++])&192)!==128?(N--,U.push(65533)):(q=(q&7)<<18|(yt&63)<<12|(A&63)<<6|Gt&63,q-=65536,U.push((q>>10&1023)+55296,(q&1023)+56320))):U.push(65533),8192<=U.length&&(rt=xn(rt,U),U.length=0);A=xn(rt,U)}return at(X,R,A),!0}function Zn(s,X,R,w,N){if(s.h!==2)return!1;var A=new w,U=s.g.i,rt=ye(s.g),q=s.g.g+rt;if(s.g.i=q,N(A,s),N=q-s.g.g,N!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(rt+" bytes, instead read "+(rt-N)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return s.g.g=q,s.g.i=U,ae(X,R,A,w,void 0),!0}function Sn(s){ie.call(this,s)}var Be;ht(Sn,ie);function En(s,X){var R=oe(s,1);if(R!=null&&R!=null){Ot(X.g,8);var w=X.g;if(0<=R)Ot(w,R);else{for(var N=0;9>N;N++)Xe(w,R&127|128),R>>=7;Xe(w,1)}}He(X,s,2),w=oe(s,3),w!=null&&ve(X,3,Hn(w)),w=oe(s,4),w!=null&&ve(X,4,Hn(w)),Ne(s,X)}function rn(s,X){return tn(s,X,Be||(Be={1:nn,2:en,3:Je,4:Je}))}function vn(s){ie.call(this,s,-1,cn)}var Yn;ht(vn,ie),vn.prototype.addClassification=function(s,X){return ae(this,1,s,Sn,X),this};function Mn(s,X){return tn(s,X,Yn||(Yn={1:[Zn,Sn,rn]}))}var cn=[1];function Tn(s){ie.call(this,s)}var Dn;ht(Tn,ie);function $n(s,X){He(X,s,1),He(X,s,2),He(X,s,3),He(X,s,4),He(X,s,5),Ne(s,X)}function wn(s,X){return tn(s,X,Dn||(Dn={1:en,2:en,3:en,4:en,5:en}))}function Cn(s){ie.call(this,s,-1,W)}var p;ht(Cn,ie);function V(s,X){return tn(s,X,p||(p={1:[Zn,Tn,wn]}))}var W=[1];function E(s){ie.call(this,s)}var P;ht(E,ie);function lt(s,X){He(X,s,1),He(X,s,2),He(X,s,3),He(X,s,4),He(X,s,5);var R=oe(s,6);if(R!=null&&R!=null){Ot(X.g,48);var w=X.g,N=R;R=0>N,N=Math.abs(N);var A=N>>>0;for(N=Math.floor((N-A)/4294967296),N>>>=0,R&&(N=~N>>>0,A=(~A>>>0)+1,4294967295<A&&(A=0,N++,4294967295<N&&(N=0))),Qt=A,Ze=N,R=Qt,A=Ze;0<A||127<R;)Xe(w,R&127|128),R=(R>>>7|A<<25)>>>0,A>>>=7;Xe(w,R)}Ne(s,X)}function z(s,X){return tn(s,X,P||(P={1:en,2:en,3:en,4:en,5:en,6:zn}))}function it(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(Y));b=t.m=Y,a.useProgram(b),I=a.getUniformLocation(b,"sampler0"),t.j={J:a.getAttribLocation(b,"aVertex"),I:a.getAttribLocation(b,"aTex"),ja:I},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(I,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 Gt=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 xt(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 Xt(){return gt(function(t){switch(t.g){case 1:return t.m=2,P(t,WebAssembly.instantiate(Gt),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 It(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=w(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=It.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function wt(t){var c,a,b,I,Y,L,U,j,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,Xt(),2)):ft.return();case 2:if(a=ft.h,typeof window=="object")return xt("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),xt("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),L=c.filter(function(mt){return mt.data!==void 0}),U=c.filter(function(mt){return mt.data===void 0}),j=Promise.all(L.map(function(mt){var vt=Z(t,mt.url);if(mt.path!==void 0){var Zt=mt.path;vt=vt.then(function(Kt){return t.overrideFile(Zt,Kt),Promise.resolve(Kt)})}return vt})),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,vt,Zt;return gt(function(Kt){if(Kt.g==1)return mt=window.createMediapipeSolutionsWasm,vt=window.createMediapipeSolutionsPackedAssets,Zt=t,P(Kt,mt(vt),2);Zt.h=Kt.h,Kt.g=0})}),D=function(){return gt(function(mt){return t.g.graph&&t.g.graph.url?mt=P(mt,Z(t,t.g.graph.url),0):(mt.g=0,mt=void 0),mt})}(),P(ft,Promise.all([Q,j,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,E(b)),I=t,P(ft,createMediapipeSolutionsWasm(Module),6);case 6:I.h=ft.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,Y=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ga:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(Y),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 Yt(t){var c,a,b,I,Y,L,U,j;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,Z(t,t.g.graph.url),3)}for(Q.g!=2&&(c=Q.h,t.i.loadGraph(c)),a=w(Object.keys(t.C)),b=a.next();!b.done;b=a.next())I=b.value,t.i.overrideFile(I,t.C[I]);if(t.C={},t.g.listeners)for(Y=w(t.g.listeners),L=Y.next();!L.done;L=Y.next())U=L.value,J(t,U);j=t.j,t.j={},t.setOptions(j),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=[],I=[],Y={},L=w(Object.keys(t)),U=L.next();!U.done;Y={L:Y.L,M:Y.M},U=L.next()){var j=U.value;j in this.j&&this.j[j]===t[j]||(this.j[j]=t[j],U=c[j],U!==void 0&&(U.onChange&&(Y.L=U.onChange,Y.M=t[j],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})}}(Y))),U.graphOptionXref&&(j={valueNumber:U.type===1?t[j]:0,valueBoolean:U.type===0?t[j]:!1,valueString:U.type===2?t[j]:""},U=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),U.graphOptionXref),j),I.push(U))))}(b.length!==0||I.length!==0)&&(this.o=!0,this.B=(this.B===void 0?[]:this.B).concat(I),this.A=(this.A===void 0?[]:this.A).concat(b))}};function l(t){var c,a,b,I,Y,L,U;return gt(function(j){switch(j.g){case 1:if(!t.o)return j.return();if(!t.A){j.g=2;break}c=w(t.A),a=c.next();case 3:if(a.done){j.g=5;break}return b=a.value,P(j,b(),4);case 4:a=c.next(),j.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(I=new t.h.GraphOptionChangeRequestList,Y=w(t.B),L=Y.next();!L.done;L=Y.next())U=L.value,I.push_back(U);t.i.changeOptions(I),I.delete(),t.B=void 0}t.o=!1,j.g=0}})}i.initialize=function(){var t=this;return gt(function(c){return c.g==1?P(c,wt(t),2):c.g!=3?P(c,Yt(t),3):P(c,l(t),0)})};function Z(t,c){var a,b;return gt(function(I){return c in t.G?I.return(t.G[c]):(a=t.locateFile(c,""),b=fetch(a).then(function(Y){return Y.arrayBuffer()}),t.G[c]=b,I.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,I,Y,L,U,j,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(I=new a.h.PacketDataList,Y=w(Object.keys(t)),L=Y.next();!L.done;L=Y.next())if(U=L.value,j=a.g.inputs[U]){t:{var mt=t[U];switch(j.type){case"video":var vt=a.m[j.stream];if(vt||(vt=new B(a.h,a.F),a.m[j.stream]=vt),vt.l===0&&(vt.l=vt.h.createTexture()),typeof HTMLVideoElement<"u"&&mt instanceof HTMLVideoElement)var Zt=mt.videoWidth,Kt=mt.videoHeight;else typeof HTMLImageElement<"u"&&mt instanceof HTMLImageElement?(Zt=mt.naturalWidth,Kt=mt.naturalHeight):(Zt=mt.width,Kt=mt.height);Kt={glName:vt.l,width:Zt,height:Kt},Zt=vt.g,Zt.canvas.width=Kt.width,Zt.canvas.height=Kt.height,Zt.activeTexture(Zt.TEXTURE0),vt.h.bindTexture2d(vt.l),Zt.texImage2D(Zt.TEXTURE_2D,0,Zt.RGBA,Zt.RGBA,Zt.UNSIGNED_BYTE,mt),vt.h.bindTexture2d(0),vt=Kt;break t;case"detections":for(vt=a.m[j.stream],vt||(vt=new yt(a.h),a.m[j.stream]=vt),vt.data||(vt.data=new vt.g.DetectionListData),vt.data.reset(mt.length),Kt=0;Kt<mt.length;++Kt){Zt=mt[Kt];var se=vt.data,le=se.setBoundingBox,Ee=Kt,Rn=Zt.U,ke=new Et;if(ut(ke,1,Rn.aa),ut(ke,2,Rn.ba),ut(ke,3,Rn.height),ut(ke,4,Rn.width),ut(ke,5,Rn.rotation),ut(ke,6,Rn.Z),Rn=Zn(ke,kt),le.call(se,Ee,Rn),Zt.P)for(se=0;se<Zt.P.length;++se){ke=Zt.P[se];var Jn=!!ke.visibility;le=vt.data,Ee=le.addNormalizedLandmark,Rn=Kt,ke=Object.assign(Object.assign({},ke),{visibility:Jn?ke.visibility:0}),Jn=new rt,ut(Jn,1,ke.x),ut(Jn,2,ke.y),ut(Jn,3,ke.z),ke.visibility&&ut(Jn,4,ke.visibility),ke=Zn(Jn,Rt),Ee.call(le,Rn,ke)}if(Zt.N)for(se=0;se<Zt.N.length;++se)le=vt.data,Ee=le.addClassification,Rn=Kt,ke=Zt.N[se],Jn=new W,ut(Jn,2,ke.$),ke.index&&ut(Jn,1,ke.index),ke.label&&ut(Jn,3,ke.label),ke.displayName&&ut(Jn,4,ke.displayName),ke=Zn(Jn,k),Ee.call(le,Rn,ke)}vt=vt.data;break t;default:vt={}}}switch(Q=vt,D=j.stream,j.type){case"video":I.pushTexture2d(Object.assign(Object.assign({},Q),{stream:D,timestamp:b}));break;case"detections":st=Q,st.stream=D,st.timestamp=b,I.pushDetectionList(st);break;default:throw Error("Unknown input config type: '"+j.type+"'")}}return a.i.send(I),P(ft,a.D,4);case 4:I.delete(),ft.g=0}})};function x(t,c,a){var b,I,Y,L,U,j,Q,D,st,ft,mt,vt,Zt,Kt;return gt(function(se){switch(se.g){case 1:if(!a)return se.return(c);for(b={},I=0,Y=w(Object.keys(a)),L=Y.next();!L.done;L=Y.next())U=L.value,j=a[U],typeof j!="string"&&j.type==="texture"&&c[j.stream]!==void 0&&++I;1<I&&(t.H=!1),Q=w(Object.keys(a)),L=Q.next();case 2:if(L.done){se.g=4;break}if(D=L.value,st=a[D],typeof st=="string")return Zt=b,Kt=D,P(se,T(t,D,c[st]),14);if(ft=c[st.stream],st.type==="detection_list"){if(ft){for(var le=ft.getRectList(),Ee=ft.getLandmarksList(),Rn=ft.getClassificationsList(),ke=[],Jn=0;Jn<le.size();++Jn){var br=Sn(le.get(Jn),Et,Tt);br={U:{aa:it(br,1),ba:it(br,2),height:it(br,3),width:it(br,4),rotation:it(br,5,0),Z:me(br,6)},P:ce(Sn(Ee.get(Jn),Ut,Nt),rt,1).map(K),N:N(Sn(Rn.get(Jn),z,ot))},ke.push(br)}le=ke}else le=[];b[D]=le,se.g=7;break}if(st.type==="proto_list"){if(ft){for(le=Array(ft.size()),Ee=0;Ee<ft.size();Ee++)le[Ee]=ft.get(Ee);ft.delete()}else le=[];b[D]=le,se.g=7;break}if(ft===void 0){se.g=3;break}if(st.type==="float_list"){b[D]=ft,se.g=7;break}if(st.type==="proto"){b[D]=ft,se.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),P(se,nt(mt,ft,t.H),13);case 13:vt=se.h,b[D]=vt;case 7:st.transform&&b[D]&&(b[D]=st.transform(b[D])),se.g=3;break;case 14:Zt[Kt]=se.h;case 3:L=Q.next(),se.g=2;break;case 4:return se.return(b)}})}function T(t,c,a){var b;return gt(function(I){return typeof a=="number"||a instanceof Uint8Array||a instanceof t.h.Uint8BlobList?I.return(a):a instanceof t.h.Texture2dDataOut?(b=t.s[c],b||(b=new B(t.h,t.F),t.s[c]=b),I.return(nt(b,a,t.H))):I.return(void 0)})}function J(t,c){for(var a=c.name||"$",b=[].concat(E(c.wants)),I=new t.h.StringList,Y=w(c.wants),L=Y.next();!L.done;L=Y.next())I.push_back(L.value);Y=t.h.PacketListener.implement({onResults:function(U){for(var j={},Q=0;Q<c.wants.length;++Q)j[b[Q]]=U.get(Q);var D=t.listeners[a];D&&(t.D=x(t,j,c.outs).then(function(st){st=D(st);for(var ft=0;ft<c.wants.length;++ft){var mt=j[b[ft]];typeof mt=="object"&&mt.hasOwnProperty&&mt.hasOwnProperty("delete")&&mt.delete()}st&&(t.D=st)}))}}),t.i.attachMultiListener(I,Y),I.delete()}i.onResults=function(t,c){this.listeners[c||"$"]=t},Ht("Solution",It),Ht("OptionType",{BOOL:0,NUMBER:1,ca:2,0:"BOOL",1:"NUMBER",2:"STRING"});function o(t){var c=me(t,1),a=ae(t,h,3);return a={x:it(a,1),y:it(a,2),depth:it(a,3)},t=ae(t,v,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=ce(c,M,2);for(var a=0;a<c.length;a++)t.push({id:me(c[a],1),keypoints:ce(c[a],A,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 f(t){var c=this;t=t||{},this.g=new It({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,I,Y,L;return gt(function(U){return U.g==1?(b=a,c.g.setOptions({allowedLabels:e(b)},u),I=g(b),Y="object_detection_3d.tflite",P(U,Z(c.g,I),2)):(L=U.h,c.g.overrideFile(Y,L),U.return(!0))})}},focalLength:{default:[1,1],onChange:function(a){var b;return gt(function(I){return b=a,c.h=b,c.g.setOptions({focalX:b[0],focalY:b[1]},u),I.return(!0)})}},principalPoint:{default:[0,0],onChange:function(a){var b;return gt(function(I){return b=a,c.i=b,c.g.setOptions({principalX:b[0],principalY:b[1]},u),I.return(!0)})}},imageSize:{onChange:function(a){var b,I,Y,L;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,I=[b[0]/2,b[1]/2],Y=[c.h[0]/I[0],c.h[1]/I[1]],L=[c.i[0]/I[0],c.i[1]/I[1]],c.setOptions({focalLength:Y,principalPoint:L}),U.g=0})}}}})}i=f.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)},Ht("Objectron",f),Ht("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]]),Ht("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}),Ht("VERSION","0.4.1636596145")}).call(pi);const bi={};(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 p(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 G=p(this);function S(s,X){if(X)t:{var R=G;s=s.split(".");for(var F=0;F<s.length-1;F++){var N=s[F];if(!(N in R))break t;R=R[N]}s=s[s.length-1],F=R[s],X=X(F),X!=F&&X!=null&&r(R,s,{configurable:!0,writable:!0,value:X})}}S("Symbol",function(s){function X(K){if(this instanceof X)throw new TypeError("Symbol is not a constructor");return new R(F+(K||"")+"_"+N++,K)}function R(K,B){this.g=K,r(this,"description",{configurable:!0,writable:!0,value:B})}if(s)return s;R.prototype.toString=function(){return this.g};var F="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",N=0;return X}),S("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 F=G[X[R]];typeof F=="function"&&typeof F.prototype[s]!="function"&&r(F.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 w(s){var X=typeof Symbol<"u"&&Symbol.iterator&&s[Symbol.iterator];return X?X.call(s):{next:n(s)}}function E(s){if(!(s instanceof Array)){s=w(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},ct;if(typeof Object.setPrototypeOf=="function")ct=Object.setPrototypeOf;else{var dt;t:{var Ft={a:!0},Lt={};try{Lt.__proto__=Ft,dt=Lt.a;break t}catch{}dt=!1}ct=dt?function(s,X){if(s.__proto__=X,s.__proto__!==X)throw new TypeError(s+" is not extensible");return s}:null}var at=ct;function pt(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 F=Object.getOwnPropertyDescriptor(X,R);F&&Object.defineProperty(s,R,F)}else s[R]=X[R];s.ea=X.prototype}function Mt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Jt(s){if(s.l)throw new TypeError("Generator is already running");s.l=!0}Mt.prototype.o=function(s){this.h=s};function qt(s,X){s.j={U:X,V:!0},s.g=s.m||s.s}Mt.prototype.return=function(s){this.j={return:s},this.g=this.s};function P(s,X,R){return s.g=R,{value:X}}function De(s){this.g=new Mt,this.h=s}function an(s,X){Jt(s.g);var R=s.g.i;return R?Ve(s,"return"in R?R.return:function(F){return{value:F,done:!0}},X,s.g.return):(s.g.return(X),Dt(s))}function Ve(s,X,R,F){try{var N=X.call(s.g.i,R);if(!(N instanceof Object))throw new TypeError("Iterator result "+N+" is not an object");if(!N.done)return s.g.l=!1,N;var K=N.value}catch(B){return s.g.i=null,qt(s.g,B),Dt(s)}return s.g.i=null,F.call(s.g,K),Dt(s)}function Dt(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,qt(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 Kn(s){this.next=function(X){return Jt(s.g),s.g.i?X=Ve(s,s.g.i.next,X,s.g.o):(s.g.o(X),X=Dt(s)),X},this.throw=function(X){return Jt(s.g),s.g.i?X=Ve(s,s.g.i.throw,X,s.g.o):(qt(s.g,X),X=Dt(s)),X},this.return=function(X){return an(s,X)},this[Symbol.iterator]=function(){return this}}function de(s){function X(F){return s.next(F)}function R(F){return s.throw(F)}return new Promise(function(F,N){function K(B){B.done?F(B.value):Promise.resolve(B.value).then(X,R).then(K,N)}K(s.next())})}function gt(s){return de(new Kn(new De(s)))}S("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 F(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 N=G.setTimeout;R.prototype.i=function(B){N(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(Gt){$||($=!0,yt.call(nt,Gt))}}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;N(function(){if(B.B()){var nt=G.console;typeof nt<"u"&&nt.error(B.i)}},1)},X.prototype.B=function(){if(this.o)return!1;var B=G.CustomEvent,nt=G.Event,$=G.dispatchEvent;return typeof $>"u"?!0:(typeof B=="function"?B=new B("unhandledrejection",{cancelable:!0}):typeof nt=="function"?B=new nt("unhandledrejection",{cancelable:!0}):(B=G.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)K.h(this.g[B]);this.g=null}};var K=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 $(xt,ht){return typeof xt=="function"?function(Xt){try{yt(xt(Xt))}catch(It){Gt(It)}}:ht}var yt,Gt,Bt=new X(function(xt,ht){yt=xt,Gt=ht});return this.J($(B,yt),$(nt,Gt)),Bt},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?K.h($):this.g.push($),this.o=!0},X.resolve=F,X.reject=function(B){return new X(function(nt,$){$(B)})},X.race=function(B){return new X(function(nt,$){for(var yt=w(B),Gt=yt.next();!Gt.done;Gt=yt.next())F(Gt.value).J(nt,$)})},X.all=function(B){var nt=w(B),$=nt.next();return $.done?F([]):new X(function(yt,Gt){function Bt(Xt){return function(It){xt[Xt]=It,ht--,ht==0&&yt(xt)}}var xt=[],ht=0;do xt.push(void 0),ht++,F($.value).J(Bt(xt.length-1),Gt),$=nt.next();while(!$.done)})},X});function pn(s,X){s instanceof String&&(s+="");var R=0,F=!1,N={next:function(){if(!F&&R<s.length){var K=R++;return{value:X(K,s[K]),done:!1}}return F=!0,{done:!0,value:void 0}}};return N[Symbol.iterator]=function(){return N},N}var jn=typeof Object.assign=="function"?Object.assign:function(s,X){for(var R=1;R<arguments.length;R++){var F=arguments[R];if(F)for(var N in F)Object.prototype.hasOwnProperty.call(F,N)&&(s[N]=F[N])}return s};S("Object.assign",function(s){return s||jn}),S("Object.is",function(s){return s||function(X,R){return X===R?X!==0||1/X===1/R:X!==X&&R!==R}}),S("Array.prototype.includes",function(s){return s||function(X,R){var F=this;F instanceof String&&(F=String(F));var N=F.length;for(R=R||0,0>R&&(R=Math.max(R+N,0));R<N;R++){var K=F[R];if(K===X||Object.is(K,X))return!0}return!1}}),S("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}}),S("Array.prototype.keys",function(s){return s||function(){return pn(this,function(X){return X})}});var Re=this||self;function Ht(s,X){s=s.split(".");var R=Re;s[0]in R||typeof R.execScript>"u"||R.execScript("var "+s[0]);for(var F;s.length&&(F=s.shift());)s.length||X===void 0?R[F]&&R[F]!==Object.prototype[F]?R=R[F]:R=R[F]={}:R[F]=X}function Te(s){Re.setTimeout(function(){throw s},0)}function on(s){Te(s)}function Xn(s,X){on(Error("Invalid wire type: "+s+" (at position "+X+")"))}function Ln(){on(Error("Failed to read varint, encoding is invalid."))}function xn(s,X){return X=String.fromCharCode.apply(null,X),s==null?X:s+X}var Nn,dn=typeof TextDecoder<"u",bn,En=typeof TextEncoder<"u";function Cn(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,F=new Uint8Array(3*s.length),N=0;N<s.length;N++){var K=s.charCodeAt(N);if(128>K)F[R++]=K;else{if(2048>K)F[R++]=K>>6|192;else{if(55296<=K&&57343>=K){if(56319>=K&&N<s.length){var B=s.charCodeAt(++N);if(56320<=B&&57343>=B){K=1024*(K-55296)+B-56320+65536,F[R++]=K>>18|240,F[R++]=K>>12&63|128,F[R++]=K>>6&63|128,F[R++]=K&63|128;continue}else N--}if(X)throw Error("Found an unpaired surrogate");K=65533}F[R++]=K>>12|224,F[R++]=K>>6&63|128}F[R++]=K&63|128}}s=F.subarray(0,R)}return s}var Oe={},Ke=null;function In(s){var X;X===void 0&&(X=0),Se(),X=Oe[X];for(var R=Array(Math.floor(s.length/3)),F=X[64]||"",N=0,K=0;N<s.length-2;N+=3){var B=s[N],nt=s[N+1],$=s[N+2],yt=X[B>>2];B=X[(B&3)<<4|nt>>4],nt=X[(nt&15)<<2|$>>6],$=X[$&63],R[K++]=yt+B+nt+$}switch(yt=0,$=F,s.length-N){case 2:yt=s[N+1],$=X[(yt&15)<<2]||F;case 1:s=s[N],R[K]=X[s>>2]+X[(s&3)<<4|yt>>4]+$+F}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 F=new Uint8Array(R),N=0;return he(s,function(K){F[N++]=K}),F.subarray(0,N)}function he(s,X){function R($){for(;F<s.length;){var yt=s.charAt(F++),Gt=Ke[yt];if(Gt!=null)return Gt;if(!/^[\s\xa0]*$/.test(yt))throw Error("Unknown base64 encoding at char: "+yt)}return $}Se();for(var F=0;;){var N=R(-1),K=R(0),B=R(64),nt=R(64);if(nt===64&&N===-1)break;X(N<<2|K>>4),B!=64&&(X(K<<4&240|B>>2),nt!=64&&X(B<<6&192|nt))}}function Se(){if(!Ke){Ke={};for(var s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),X=["+/=","+/","-_=","-_.","-_"],R=0;5>R;R++){var F=s.concat(X[R].split(""));Oe[R]=F;for(var N=0;N<F.length;N++){var K=F[N];Ke[K]===void 0&&(Ke[K]=N)}}}}var ze=typeof Uint8Array=="function",ne;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:ze&&s instanceof Uint8Array?In(s):null;return s};var sn=typeof Uint8Array.prototype.slice=="function";function Ue(s,X,R){return X===R?ne||(ne=new Uint8Array(0)):sn?s.slice(X,R):new Uint8Array(s.subarray(X,R))}var _t=0,Ze=0;function Ce(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===We){if(s.g==null)var X=ne||(ne=new Uint8Array(0));else{X=Uint8Array;var R=s.g;R=R==null||ze&&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 At(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&&xe(this,s)}function xe(s,X){s.h=Ce(X),s.l=0,s.i=s.h.length,s.g=s.l}At.prototype.reset=function(){this.g=this.l};function jt(s){s.g>s.i&&(s.j=!0,on(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],F=R&127;return 128>R?(s.g+=1,jt(s),F):(R=X[s.g+1],F|=(R&127)<<7,128>R?(s.g+=2,jt(s),F):(R=X[s.g+2],F|=(R&127)<<14,128>R?(s.g+=3,jt(s),F):(R=X[s.g+3],F|=(R&127)<<21,128>R?(s.g+=4,jt(s),F):(R=X[s.g+4],F|=(R&15)<<28,128>R?(s.g+=5,jt(s),F>>>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,Ln(),F):(jt(s),F))))))}var we=[];function $e(){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}$e.prototype.length=function(){return this.h},$e.prototype.end=function(){var s=this.g,X=this.h;return this.h=0,Ue(s,0,X)};function Ot(s,X){for(;127<X;)Xe(s,X&127|128),X>>>=7;Xe(s,X)}function je(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,we.length?(R=we.pop(),X&&(R.u=X.u),s&&xe(R,s),s=R):s=new At(s,X),this.g=s,this.l=this.g.g,this.h=this.i=-1,this.j=!1}je.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function Pe(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 Ie(s){switch(s.h){case 0:if(s.h!=0)Ie(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,Ln()}break;case 1:s=s.g,s.g+=8,jt(s);break;case 2:s.h!=2?Ie(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(!Pe(s)){s.j=!0,on(Error("Unmatched start-group tag: stream EOF"));break}if(s.h==4){s.i!=X&&(s.j=!0,on(Error("Unmatched end-group tag")));break}Ie(s)}while(1);break;default:s.j=!0,Xn(s.h,s.l)}}function Vn(s,X,R){s.N||(s=Ue(s.g.h,R,s.g.g),(R=X.m)?R.push(s):X.m=[s])}var ln=[];function _e(){this.h=[],this.i=0,this.g=new $e}function cn(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),cn(s,s.g.end()),cn(s,R)}var Fe=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Ge(s,X){Object.isFrozen(s)||(Fe?s[Fe]|=X:s.g!==void 0?s.g|=X:Object.defineProperties(s,{g:{value:X,configurable:!0,writable:!0,enumerable:!1}}))}function re(s){if(!s)return 0;var X;return Fe?X=s[Fe]:X=s.g,X==null?0:X}function Qe(s){return Array.isArray(s)&&Ge(s,1),s}function te(s){if(!Array.isArray(s))throw Error("cannot mark non-array as immutable");Ge(s,2)}function zt(s){return s!==null&&typeof s=="object"&&s.constructor===Object}function hn(s){switch(typeof s){case"number":return isFinite(s)?s:String(s);case"object":return ze&&s!=null&&s instanceof Uint8Array?In(s):s;default:return s}}function fe(s,X){if(s!=null)return Array.isArray(s)||zt(s)?Ct(s,X):X(s)}function Ct(s,X){if(Array.isArray(s)){for(var R=Array(s.length),F=0;F<s.length;F++)R[F]=fe(s[F],X);return re(s)&1&&Qe(R),R}R={};for(F in s)R[F]=fe(s[F],X);return R}var Vt;function ie(s,X,R){var F=Vt;Vt=null,s||(s=F),F=this.constructor.ca,s||(s=F?[F]:[]),this.j=(F?0:-1)-(this.constructor.aa||0),this.i=null,this.g=s;t:{if(F=this.g.length,s=F-1,F&&(F=this.g[s],zt(F))){this.l=s-this.j,this.h=F;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,(F=this.g[s])?Qe(F):this.g[s]=Ye):(ee(this),(F=this.h[s])?Qe(F):this.h[s]=Ye)}var Ye=Object.freeze(Qe([]));function ee(s){var X=s.l+s.j;s.g[X]||(s.h=s.g[X]={})}function oe(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 F=F===void 0?!1:F,N=oe(s,X,F);return N==null&&(N=Ye),N===Ye?(N=Qe([]),ut(s,X,N,F)):R&&Array.isArray(N)&&re(N)&2&&(N=N.slice(),ut(s,X,N,F)),N}function it(s,X,R){return s=oe(s,X),s=s==null?s:+s,s==null?R===void 0?0:R:s}function ut(s,X,R,F){(F===void 0?0:F)||X>=s.l?(ee(s),s.h[X]=R):s.g[X+s.j]=R}function Pt(s,X,R){s.i||(s.i={});var F=s.i[R];if(!F){var N=tt(s,R,!1);F=[];for(var K=Array.isArray(N)?!!(re(N)&2):!1,B=0;B<N.length;B++)F[B]=new X(N[B]),K&&te(F[B].g);K&&(te(F),Object.freeze(F)),s.i[R]=F}return F}function ae(s,X,R,F,N){var K=Pt(s,F,X);R=R||new F,s=tt(s,X),N!=null?(K.splice(N,0,R),s.splice(N,0,ce(R))):(K.push(R),s.push(ce(R)))}ie.prototype.toJSON=function(){var s=ce(this);return Ct(s,hn)};function ce(s){if(s.i)for(var X in s.i){var R=s.i[X];if(Array.isArray(R))for(var F=0;F<R.length;F++)R[F]&&ce(R[F]);else R&&ce(R)}return s.g}ie.prototype.toString=function(){return ce(this).toString()};function St(s,X){return s=oe(s,X),s==null?0:s}function me(s,X){return s=oe(s,X),s==null?"":s}function He(s,X){if(s=s.m){cn(X,X.g.end());for(var R=0;R<s.length;R++)cn(X,s[R])}}function qe(s){var X=s[0];switch(s.length){case 2:var R=s[1];return function($,yt,Gt){return X($,yt,Gt,R)};case 3:var F=s[1],N=s[2];return function($,yt,Gt){return X($,yt,Gt,F,N)};case 4:var K=s[1],B=s[2],nt=s[3];return function($,yt,Gt){return X($,yt,Gt,K,B,nt)};default:throw Error("unsupported number of parameters, expected [2-4], got "+s.length)}}function tn(s,X,R){for(;Pe(X)&&X.h!=4;){var F=X.i,N=R[F];if(N){if(Array.isArray(N)&&(N=R[F]=qe(N)),!N(X,s,F)){F=X,N=s;var K=F.l;Ie(F),Vn(F,N,K)}}else F=X,N=s,K=F.l,Ie(F),Vn(F,N,K)}return s}function fn(s,X){var R=new _e;if(X(s,R),s=R.i+R.g.length(),s===0)R=new Uint8Array(0);else{s=new Uint8Array(s);for(var F=R.h,N=F.length,K=X=0;K<N;K++){var B=F[K];B.length!==0&&(s.set(B,X),X+=B.length)}F=R.g,N=F.h,N!==0&&(s.set(F.g.subarray(0,N),X),F.h=0),R.h=[s],R=s}return R}function yn(s,X,R){if(ln.length){var F=ln.pop();s&&(xe(F.g,s),F.i=-1,F.h=-1),s=F}else s=new je(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>ln.length&&ln.push(s)}}function Le(s,X,R){if(X=oe(X,R),X!=null){Ot(s.g,8*R+5),s=s.g;var F=X;F=(R=0>F?1:0)?-F:F,F===0?0<1/F?_t=Ze=0:(Ze=0,_t=2147483648):isNaN(F)?(Ze=0,_t=2147483647):34028234663852886e22<F?(Ze=0,_t=(R<<31|2139095040)>>>0):11754943508222875e-54>F?(F=Math.round(F/Math.pow(2,-149)),Ze=0,_t=(R<<31|F)>>>0):(X=Math.floor(Math.log(F)/Math.LN2),F*=Math.pow(2,-X),F=Math.round(8388608*F),16777216<=F&&++X,Ze=0,_t=(R<<31|X+127<<23|F&8388607)>>>0),R=_t,Xe(s,R>>>0&255),Xe(s,R>>>8&255),Xe(s,R>>>16&255),Xe(s,R>>>24&255)}}function en(s,X,R){if(s.h!==5)return!1;s=s.g;var F=s.h[s.g],N=s.h[s.g+1],K=s.h[s.g+2],B=s.h[s.g+3];return s.g+=4,jt(s),N=(F<<0|N<<8|K<<16|B<<24)>>>0,s=2*(N>>31)+1,F=N>>>23&255,N&=8388607,ut(X,R,F==255?N?NaN:1/0*s:F==0?s*Math.pow(2,-149)*N:s*Math.pow(2,F-150)*(N+Math.pow(2,23))),!0}function On(s,X,R){if(s.h!==0)return!1;for(var F=s.g,N=128,K=0,B=s=0;4>B&&128<=N;B++)N=F.h[F.g++],K|=(N&127)<<7*B;if(128<=N&&(N=F.h[F.g++],K|=(N&127)<<28,s|=(N&127)>>4),128<=N)for(B=0;5>B&&128<=N;B++)N=F.h[F.g++],s|=(N&127)<<7*B+3;return 128>N?(F=K>>>0,N=s>>>0,(s=N&2147483648)&&(F=~F+1>>>0,N=~N>>>0,F==0&&(N=N+1>>>0)),F=4294967296*N+(F>>>0),s=s?-F:F):(F.j=!0,Ln(),s=void 0),ut(X,R,s),!0}function nn(s,X,R){return s.h!==0?!1:(ut(X,R,ye(s.g)),!0)}function Ne(s,X,R){if(s.h!==2)return!1;var F=ye(s.g);s=s.g;var N=s.g;s.g+=F,jt(s),s=s.h;var K;if(dn)(K=Nn)||(K=Nn=new TextDecoder("utf-8",{fatal:!1})),K=K.decode(s.subarray(N,N+F));else{F=N+F;for(var B=[],nt=null,$,yt,Gt;N<F;)$=s[N++],128>$?B.push($):224>$?N>=F?B.push(65533):(yt=s[N++],194>$||(yt&192)!==128?(N--,B.push(65533)):B.push(($&31)<<6|yt&63)):240>$?N>=F-1?B.push(65533):(yt=s[N++],(yt&192)!==128||$===224&&160>yt||$===237&&160<=yt||((K=s[N++])&192)!==128?(N--,B.push(65533)):B.push(($&15)<<12|(yt&63)<<6|K&63)):244>=$?N>=F-2?B.push(65533):(yt=s[N++],(yt&192)!==128||($<<28)+(yt-144)>>30!==0||((K=s[N++])&192)!==128||((Gt=s[N++])&192)!==128?(N--,B.push(65533)):($=($&7)<<18|(yt&63)<<12|(K&63)<<6|Gt&63,$-=65536,B.push(($>>10&1023)+55296,($&1023)+56320))):B.push(65533),8192<=B.length&&(nt=xn(nt,B),B.length=0);K=xn(nt,B)}return ut(X,R,K),!0}function Zn(s,X,R,F,N){if(s.h!==2)return!1;var K=new F,B=s.g.i,nt=ye(s.g),$=s.g.g+nt;if(s.g.i=$,N(K,s),N=$-s.g.g,N!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(nt+" bytes, instead read "+(nt-N)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return s.g.g=$,s.g.i=B,ae(X,R,K,F,void 0),!0}function Sn(s){ie.call(this,s)}var Be;pt(Sn,ie);function kn(s,X){var R=oe(s,1);if(R!=null&&R!=null){Ot(X.g,8);var F=X.g;if(0<=R)Ot(F,R);else{for(var N=0;9>N;N++)Xe(F,R&127|128),R>>=7;Xe(F,1)}}Le(X,s,2),F=oe(s,3),F!=null&&ve(X,3,Cn(F)),F=oe(s,4),F!=null&&ve(X,4,Cn(F)),He(s,X)}function rn(s,X){return tn(s,X,Be||(Be={1:nn,2:en,3:Ne,4:Ne}))}function vn(s){ie.call(this,s,-1,un)}var Tn;pt(vn,ie),vn.prototype.addClassification=function(s,X){return ae(this,1,s,Sn,X),this};function An(s,X){return tn(s,X,Tn||(Tn={1:[Zn,Sn,rn]}))}var un=[1];function wn(s){ie.call(this,s)}var _n;pt(wn,ie);function Qn(s,X){Le(X,s,1),Le(X,s,2),Le(X,s,3),Le(X,s,4),Le(X,s,5),He(s,X)}function Fn(s,X){return tn(s,X,_n||(_n={1:en,2:en,3:en,4:en,5:en}))}function Hn(s){ie.call(this,s,-1,V)}var m;pt(Hn,ie);function W(s,X){return tn(s,X,m||(m={1:[Zn,wn,Fn]}))}var V=[1];function k(s){ie.call(this,s)}var z;pt(k,ie);function ot(s,X){Le(X,s,1),Le(X,s,2),Le(X,s,3),Le(X,s,4),Le(X,s,5);var R=oe(s,6);if(R!=null&&R!=null){Ot(X.g,48);var F=X.g,N=R;R=0>N,N=Math.abs(N);var K=N>>>0;for(N=Math.floor((N-K)/4294967296),N>>>=0,R&&(N=~N>>>0,K=(~K>>>0)+1,4294967295<K&&(K=0,N++,4294967295<N&&(N=0))),_t=K,Ze=N,R=_t,K=Ze;0<K||127<R;)Xe(F,R&127|128),R=(R>>>7|K<<25)>>>0,K>>>=7;Xe(F,R)}He(s,X)}function O(s,X){return tn(s,X,z||(z={1:en,2:en,3:en,4:en,5:en,6:On}))}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.
|
|
106
105
|
|
|
107
|
-
`+s.getShaderInfoLog(R));return R}function bt(s){return
|
|
106
|
+
`+s.getShaderInfoLog(R));return R}function bt(s){return Pt(s,Sn,1).map(function(X){return{index:St(X,1),X:it(X,2),label:oe(X,3)!=null?me(X,3):void 0,displayName:oe(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:oe(s,4)!=null?it(s,4):void 0}}function Ut(s){return Pt(yn(s,Hn,W),wn,1).map(Rt)}function Nt(s,X){this.h=s,this.g=X,this.l=0}function $t(s,X,R){return Et(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(F){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),F(s.i)}))}function Et(s,X){var R=s.g;if(s.m===void 0){var F=rt(R,`
|
|
108
107
|
attribute vec2 aVertex;
|
|
109
108
|
attribute vec2 aTex;
|
|
110
109
|
varying vec2 vTex;
|
|
111
110
|
void main(void) {
|
|
112
111
|
gl_Position = vec4(aVertex, 0.0, 1.0);
|
|
113
112
|
vTex = aTex;
|
|
114
|
-
}`,0),N=
|
|
113
|
+
}`,0),N=rt(R,`
|
|
115
114
|
precision mediump float;
|
|
116
115
|
varying vec2 vTex;
|
|
117
116
|
uniform sampler2D sampler0;
|
|
118
117
|
void main(){
|
|
119
118
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
120
|
-
}`,1),
|
|
119
|
+
}`,1),K=R.createProgram();if(R.attachShader(K,F),R.attachShader(K,N),R.linkProgram(K),!R.getProgramParameter(K,R.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
121
120
|
|
|
122
|
-
`+R.getProgramInfoLog(A));w=s.m=A,R.useProgram(w),N=R.getUniformLocation(w,"sampler0"),s.j={I:R.getAttribLocation(w,"aVertex"),H:R.getAttribLocation(w,"aTex"),da:N},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(N,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 wt(s){this.g=s}var Kt=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 ce(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,_(s,WebAssembly.instantiate(Kt),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=Y(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)}}}o=ke.prototype,o.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function h(s){var X,R,w,N,A,U,rt,q,yt,Gt,Mt;return gt(function(St){switch(St.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,_(St,ge(),2)):St.return();case 2:if(R=St.h,typeof window=="object")return ce("createMediapipeSolutionsWasm",{locateFile:s.locateFile}),ce("createMediapipeSolutionsPackedAssets",{locateFile:s.locateFile}),U=X.filter(function(ft){return ft.data!==void 0}),rt=X.filter(function(ft){return ft.data===void 0}),q=Promise.all(U.map(function(ft){var Xt=C(s,ft.url);if(ft.path!==void 0){var Yt=ft.path;Xt=Xt.then(function(Ft){return s.overrideFile(Yt,Ft),Promise.resolve(Ft)})}return Xt})),yt=Promise.all(rt.map(function(ft){return ft.simd===void 0||ft.simd&&R||!ft.simd&&!R?pe(s.locateFile(ft.url,s.S)):Promise.resolve()})).then(function(){var ft,Xt,Yt;return gt(function(Ft){if(Ft.g==1)return ft=window.createMediapipeSolutionsWasm,Xt=window.createMediapipeSolutionsPackedAssets,Yt=s,_(Ft,ft(Xt),2);Yt.h=Ft.h,Ft.g=0})}),Gt=function(){return gt(function(ft){return s.g.graph&&s.g.graph.url?ft=_(ft,C(s,s.g.graph.url),0):(ft.g=0,ft=void 0),ft})}(),_(St,Promise.all([yt,q,Gt]),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(ft){return ft.simd===void 0||ft.simd&&R||!ft.simd&&!R}).map(function(ft){return s.locateFile(ft.url,s.S)}),importScripts.apply(null,k(w)),N=s,_(St,createMediapipeSolutionsWasm(Module),6);case 6:N.h=St.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),St.g=4;break;case 7:if(s.l=document.createElement("canvas"),Mt=s.l.getContext("webgl2",{}),!Mt&&(Mt=s.l.getContext("webgl",{}),!Mt))return alert("Failed to create WebGL canvas context when passing video frame."),St.return();s.D=Mt,s.h.canvas=s.l,s.h.createContext(s.l,!0,!0,{});case 4:s.i=new s.h.SolutionWasm,s.R=!1,St.g=0}})}function g(s){var X,R,w,N,A,U,rt,q;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,_(yt,C(s,s.g.graph.url),3)}for(yt.g!=2&&(X=yt.h,s.i.loadGraph(X)),R=Y(Object.keys(s.B)),w=R.next();!w.done;w=R.next())N=w.value,s.i.overrideFile(N,s.B[N]);if(s.B={},s.g.listeners)for(A=Y(s.g.listeners),U=A.next();!U.done;U=A.next())rt=U.value,B(s,rt);q=s.j,s.j={},s.setOptions(q),yt.g=0})}o.reset=function(){var s=this;return gt(function(X){s.i&&(s.i.reset(),s.m={},s.s={}),X.g=0})},o.setOptions=function(s,X){var R=this;if(X=X||this.g.options){for(var w=[],N=[],A={},U=Y(Object.keys(s)),rt=U.next();!rt.done;A={K:A.K,L:A.L},rt=U.next()){var q=rt.value;q in this.j&&this.j[q]===s[q]||(this.j[q]=s[q],rt=X[q],rt!==void 0&&(rt.onChange&&(A.K=rt.onChange,A.L=s[q],w.push(function(yt){return function(){var Gt;return gt(function(Mt){if(Mt.g==1)return _(Mt,yt.K(yt.L),2);Gt=Mt.h,Gt===!0&&(R.o=!0),Mt.g=0})}}(A))),rt.graphOptionXref&&(q={valueNumber:rt.type===1?s[q]:0,valueBoolean:rt.type===0?s[q]:!1,valueString:rt.type===2?s[q]:""},rt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),rt.graphOptionXref),q),N.push(rt))))}(w.length!==0||N.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(N),this.v=(this.v===void 0?[]:this.v).concat(w))}};function G(s){var X,R,w,N,A,U,rt;return gt(function(q){switch(q.g){case 1:if(!s.o)return q.return();if(!s.v){q.g=2;break}X=Y(s.v),R=X.next();case 3:if(R.done){q.g=5;break}return w=R.value,_(q,w(),4);case 4:R=X.next(),q.g=3;break;case 5:s.v=void 0;case 2:if(s.A){for(N=new s.h.GraphOptionChangeRequestList,A=Y(s.A),U=A.next();!U.done;U=A.next())rt=U.value,N.push_back(rt);s.i.changeOptions(N),N.delete(),s.A=void 0}s.o=!1,q.g=0}})}o.initialize=function(){var s=this;return gt(function(X){return X.g==1?_(X,h(s),2):X.g!=3?_(X,g(s),3):_(X,G(s),0)})};function C(s,X){var R,w;return gt(function(N){return X in s.F?N.return(s.F[X]):(R=s.locateFile(X,""),w=fetch(R).then(function(A){return A.arrayBuffer()}),s.F[X]=w,N.return(w))})}o.overrideFile=function(s,X){this.i?this.i.overrideFile(s,X):this.B[s]=X},o.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},o.send=function(s,X){var R=this,w,N,A,U,rt,q,yt,Gt,Mt;return gt(function(St){switch(St.g){case 1:return R.g.inputs?(w=1e3*(X==null?performance.now():X),_(St,R.C,2)):St.return();case 2:return _(St,R.initialize(),3);case 3:for(N=new R.h.PacketDataList,A=Y(Object.keys(s)),U=A.next();!U.done;U=A.next())if(rt=U.value,q=R.g.inputs[rt]){t:{var ft=s[rt];switch(q.type){case"video":var Xt=R.m[q.stream];if(Xt||(Xt=new kt(R.h,R.D),R.m[q.stream]=Xt),Xt.l===0&&(Xt.l=Xt.h.createTexture()),typeof HTMLVideoElement<"u"&&ft instanceof HTMLVideoElement)var Yt=ft.videoWidth,Ft=ft.videoHeight;else typeof HTMLImageElement<"u"&&ft instanceof HTMLImageElement?(Yt=ft.naturalWidth,Ft=ft.naturalHeight):(Yt=ft.width,Ft=ft.height);Ft={glName:Xt.l,width:Yt,height:Ft},Yt=Xt.g,Yt.canvas.width=Ft.width,Yt.canvas.height=Ft.height,Yt.activeTexture(Yt.TEXTURE0),Xt.h.bindTexture2d(Xt.l),Yt.texImage2D(Yt.TEXTURE_2D,0,Yt.RGBA,Yt.RGBA,Yt.UNSIGNED_BYTE,ft),Xt.h.bindTexture2d(0),Xt=Ft;break t;case"detections":for(Xt=R.m[q.stream],Xt||(Xt=new wt(R.h),R.m[q.stream]=Xt),Xt.data||(Xt.data=new Xt.g.DetectionListData),Xt.data.reset(ft.length),Ft=0;Ft<ft.length;++Ft){Yt=ft[Ft];var Ct=Xt.data,l=Ct.setBoundingBox,v=Ft,x=Yt.T,T=new E;if(at(T,1,x.Y),at(T,2,x.Z),at(T,3,x.height),at(T,4,x.width),at(T,5,x.rotation),at(T,6,x.W),x=fn(T,lt),l.call(Ct,v,x),Yt.O)for(Ct=0;Ct<Yt.O.length;++Ct){T=Yt.O[Ct];var J=!!T.visibility;l=Xt.data,v=l.addNormalizedLandmark,x=Ft,T=Object.assign(Object.assign({},T),{visibility:J?T.visibility:0}),J=new Tn,at(J,1,T.x),at(J,2,T.y),at(J,3,T.z),T.visibility&&at(J,4,T.visibility),T=fn(J,$n),v.call(l,x,T)}if(Yt.M)for(Ct=0;Ct<Yt.M.length;++Ct)l=Xt.data,v=l.addClassification,x=Ft,T=Yt.M[Ct],J=new Sn,at(J,2,T.X),T.index&&at(J,1,T.index),T.label&&at(J,3,T.label),T.displayName&&at(J,4,T.displayName),T=fn(J,En),v.call(l,x,T)}Xt=Xt.data;break t;default:Xt={}}}switch(yt=Xt,Gt=q.stream,q.type){case"video":N.pushTexture2d(Object.assign(Object.assign({},yt),{stream:Gt,timestamp:w}));break;case"detections":Mt=yt,Mt.stream=Gt,Mt.timestamp=w,N.pushDetectionList(Mt);break;default:throw Error("Unknown input config type: '"+q.type+"'")}}return R.i.send(N),_(St,R.C,4);case 4:N.delete(),St.g=0}})};function M(s,X,R){var w,N,A,U,rt,q,yt,Gt,Mt,St,ft,Xt,Yt,Ft;return gt(function(Ct){switch(Ct.g){case 1:if(!R)return Ct.return(X);for(w={},N=0,A=Y(Object.keys(R)),U=A.next();!U.done;U=A.next())rt=U.value,q=R[rt],typeof q!="string"&&q.type==="texture"&&X[q.stream]!==void 0&&++N;1<N&&(s.G=!1),yt=Y(Object.keys(R)),U=yt.next();case 2:if(U.done){Ct.g=4;break}if(Gt=U.value,Mt=R[Gt],typeof Mt=="string")return Yt=w,Ft=Gt,_(Ct,Q(s,Gt,X[Mt]),14);if(St=X[Mt.stream],Mt.type==="detection_list"){if(St){for(var l=St.getRectList(),v=St.getLandmarksList(),x=St.getClassificationsList(),T=[],J=0;J<l.size();++J){var i=yn(l.get(J),E,z);i={T:{Y:ot(i,1),Z:ot(i,2),height:ot(i,3),width:ot(i,4),rotation:ot(i,5,0),W:Tt(i,6)},O:Ut(v.get(J)),M:bt(yn(x.get(J),vn,Mn))},T.push(i)}l=T}else l=[];w[Gt]=l,Ct.g=7;break}if(Mt.type==="proto_list"){if(St){for(l=Array(St.size()),v=0;v<St.size();v++)l[v]=St.get(v);St.delete()}else l=[];w[Gt]=l,Ct.g=7;break}if(St===void 0){Ct.g=3;break}if(Mt.type==="float_list"){w[Gt]=St,Ct.g=7;break}if(Mt.type==="proto"){w[Gt]=St,Ct.g=7;break}if(Mt.type!=="texture")throw Error("Unknown output config type: '"+Mt.type+"'");return ft=s.s[Gt],ft||(ft=new kt(s.h,s.D),s.s[Gt]=ft),_(Ct,qt(ft,St,s.G),13);case 13:Xt=Ct.h,w[Gt]=Xt;case 7:Mt.transform&&w[Gt]&&(w[Gt]=Mt.transform(w[Gt])),Ct.g=3;break;case 14:Yt[Ft]=Ct.h;case 3:U=yt.next(),Ct.g=2;break;case 4:return Ct.return(w)}})}function Q(s,X,R){var w;return gt(function(N){return typeof R=="number"||R instanceof Uint8Array||R instanceof s.h.Uint8BlobList?N.return(R):R instanceof s.h.Texture2dDataOut?(w=s.s[X],w||(w=new kt(s.h,s.D),s.s[X]=w),N.return(qt(w,R,s.G))):N.return(void 0)})}function B(s,X){for(var R=X.name||"$",w=[].concat(k(X.wants)),N=new s.h.StringList,A=Y(X.wants),U=A.next();!U.done;U=A.next())N.push_back(U.value);A=s.h.PacketListener.implement({onResults:function(rt){for(var q={},yt=0;yt<X.wants.length;++yt)q[w[yt]]=rt.get(yt);var Gt=s.listeners[R];Gt&&(s.C=M(s,q,X.outs).then(function(Mt){Mt=Gt(Mt);for(var St=0;St<X.wants.length;++St){var ft=q[w[St]];typeof ft=="object"&&ft.hasOwnProperty&&ft.hasOwnProperty("delete")&&ft.delete()}Mt&&(s.C=Mt)}))}}),s.i.attachMultiListener(N,A),N.delete()}o.onResults=function(s,X){this.listeners[X||"$"]=s},Jt("Solution",ke),Jt("OptionType",{BOOL:0,NUMBER:1,$:2,0:"BOOL",1:"NUMBER",2:"STRING"});function tt(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:tt(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,N,A;return gt(function(U){return U.g==1?(w=tt(R),N="third_party/mediapipe/modules/pose_landmark/"+w,_(U,C(X.g,w),2)):(A=U.h,X.g.overrideFile(N,A),U.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"}}}})}o=ct.prototype,o.reset=function(){this.g.reset()},o.close=function(){return this.g.close(),Promise.resolve()},o.onResults=function(s){this.g.onResults(s)},o.initialize=function(){var s=this;return gt(function(X){return _(X,s.g.initialize(),0)})},o.send=function(s,X){var R=this;return gt(function(w){return _(w,R.g.send(s,X),0)})},o.setOptions=function(s){this.g.setOptions(s)},Jt("Pose",ct),Jt("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]]),Jt("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}),Jt("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}),Jt("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}),Jt("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Jt("VERSION","0.5.1635988162")}).call(vi);const lr=class{constructor(){Rt(this,"mediapipeMap_",new Map)}getVersion(n){switch(n){case"face_detection":return yi.VERSION;case"face_mesh":return gi.VERSION;case"hands":return pi.VERSION;case"holistic":return bi.VERSION;case"objectron":return Zi.VERSION;case"selfie_segmentation":return mi.VERSION;case"pose":return vi.VERSION;default:return""}}initialize(n){return new Promise(async(r,m)=>{if(n.mediaPipeModelConfigArray.length==0){m("no model was selected");return}for(let y=0;y<n.mediaPipeModelConfigArray.length;y++){const I=n.mediaPipeModelConfigArray[y];if(this.mediapipeMap_.has(I.modelType)){m("setting same type is not supported");return}if(typeof I.listener!="function"){m(`[${I.modelType}] ResultsListener must be provided`);return}let F;switch(I.modelType){case"face_mesh":F=new gi.FaceMesh({locateFile:(Y,k)=>(I.assetsUri||lr.defaultAssetsBaseUrl+"face_mesh/"+this.getVersion("face_mesh"))+"/"+Y});break;case"face_detection":F=new yi.FaceDetection({locateFile:(Y,k)=>(I.assetsUri||lr.defaultAssetsBaseUrl+"face_detection/"+this.getVersion("face_detection"))+"/"+Y});break;case"hands":F=new pi.Hands({locateFile:(Y,k)=>(I.assetsUri||lr.defaultAssetsBaseUrl+"hands/"+this.getVersion("hands"))+"/"+Y});break;case"holistic":F=new bi.Holistic({locateFile:(Y,k)=>(I.assetsUri||lr.defaultAssetsBaseUrl+"holistic/"+this.getVersion("holistic"))+"/"+Y});break;case"objectron":F=new Zi.Objectron({locateFile:(Y,k)=>(I.assetsUri||lr.defaultAssetsBaseUrl+"objectron/"+this.getVersion("objectron"))+"/"+Y});break;case"selfie_segmentation":F=new mi.SelfieSegmentation({locateFile:(Y,k)=>(I.assetsUri||lr.defaultAssetsBaseUrl+"selfie_segmentation/"+this.getVersion("selfie_segmentation"))+"/"+Y});break;case"pose":F=new vi.Pose({locateFile:(Y,k)=>(I.assetsUri||lr.defaultAssetsBaseUrl+"pose/"+this.getVersion("pose"))+"/"+Y});break;default:m("unknown model type");return}F.onResults(I.listener),I.options&&F.setOptions(I.options);try{await F.initialize(),this.mediapipeMap_.set(I.modelType,F)}catch(Y){m(Y);return}}r()})}close(n){return new Promise((r,m)=>{let y=[];if(n){let I=this.mediapipeMap_.get(n);if(I)this.mediapipeMap_.delete(n),y.push(I.close());else{m("model not exit");return}}else{for(const[I,F]of this.mediapipeMap_.entries())y.push(F.close());this.mediapipeMap_.clear()}Promise.all(y).then(()=>{r()}).catch(I=>{m(I)})})}send(n,r){return new Promise((m,y)=>{let I=[];if(r){let F=this.mediapipeMap_.get(r);if(F)I.push(F.send({image:n}));else{y("model not exit");return}}else for(const[F,Y]of this.mediapipeMap_.entries())I.push(Y.send({image:n}));Promise.all(I).then(()=>{m()}).catch(F=>{y(F)})})}reset(n){if(n){let r=this.mediapipeMap_.get(n);r&&typeof r.reset=="function"&&r.reset()}else for(const[r,m]of this.mediapipeMap_.entries())m&&typeof m.reset=="function"&&m.reset()}};let Gi=lr;Rt(Gi,"defaultAssetsBaseUrl","https://d3opqjmqzxf057.cloudfront.net/ml/mediapipe/");const ar=new WeakMap,Xi=new WeakMap,Br=new WeakMap,fo=Symbol("anyProducer"),Ms=Promise.resolve(),Vi=Symbol("listenerAdded"),Wi=Symbol("listenerRemoved");let mo=!1;function Lr(o){if(typeof o!="string"&&typeof o!="symbol")throw new TypeError("eventName must be a string or a symbol")}function Ri(o){if(typeof o!="function")throw new TypeError("listener must be a function")}function Fr(o,n){const r=Xi.get(o);return r.has(n)||r.set(n,new Set),r.get(n)}function Ar(o,n){const r=typeof n=="string"||typeof n=="symbol"?n:fo,m=Br.get(o);return m.has(r)||m.set(r,new Set),m.get(r)}function e2(o,n,r){const m=Br.get(o);if(m.has(n))for(const y of m.get(n))y.enqueue(r);if(m.has(fo)){const y=Promise.all([n,r]);for(const I of m.get(fo))I.enqueue(y)}}function Bs(o,n){n=Array.isArray(n)?n:[n];let r=!1,m=()=>{},y=[];const I={enqueue(F){y.push(F),m()},finish(){r=!0,m()}};for(const F of n)Ar(o,F).add(I);return{async next(){return y?y.length===0?r?(y=void 0,this.next()):(await new Promise(F=>{m=F}),this.next()):{done:!1,value:await y.shift()}:{done:!0}},async return(F){y=void 0;for(const Y of n)Ar(o,Y).delete(I);return m(),arguments.length>0?{done:!0,value:await F}:{done:!0}},[Symbol.asyncIterator](){return this}}}function As(o){if(o===void 0)return js;if(!Array.isArray(o))throw new TypeError("`methodNames` must be an array of strings");for(const n of o)if(!js.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return o}const po=o=>o===Vi||o===Wi;class Zr{static mixin(n,r){return r=As(r),m=>{if(typeof m!="function")throw new TypeError("`target` must be function");for(const F of r)if(m.prototype[F]!==void 0)throw new Error(`The property \`${F}\` already exists on \`target\``);function y(){return Object.defineProperty(this,n,{enumerable:!1,value:new Zr}),this[n]}Object.defineProperty(m.prototype,n,{enumerable:!1,get:y});const I=F=>function(...Y){return this[n][F](...Y)};for(const F of r)Object.defineProperty(m.prototype,F,{enumerable:!1,value:I(F)});return m}}static get isDebugEnabled(){if(typeof process!="object")return mo;const{env:n}=process||{env:{}};return n.DEBUG==="emittery"||n.DEBUG==="*"||mo}static set isDebugEnabled(n){mo=n}constructor(n={}){ar.set(this,new Set),Xi.set(this,new Map),Br.set(this,new Map),this.debug=n.debug||{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(r,m,y,I)=>{try{I=JSON.stringify(I)}catch{I=`Object with the following keys failed to stringify: ${Object.keys(I).join(",")}`}typeof y=="symbol"&&(y=y.toString());const F=new Date,Y=`${F.getHours()}:${F.getMinutes()}:${F.getSeconds()}.${F.getMilliseconds()}`;console.log(`[${Y}][emittery:${r}][${m}] Event Name: ${y}
|
|
123
|
-
data: ${I}`)})}logIfDebugEnabled(n,r,m){(Zr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,m)}on(n,r){Ri(r),n=Array.isArray(n)?n:[n];for(const m of n)Lr(m),Fr(this,m).add(r),this.logIfDebugEnabled("subscribe",m,void 0),po(m)||this.emit(Vi,{eventName:m,listener:r});return this.off.bind(this,n,r)}off(n,r){Ri(r),n=Array.isArray(n)?n:[n];for(const m of n)Lr(m),Fr(this,m).delete(r),this.logIfDebugEnabled("unsubscribe",m,void 0),po(m)||this.emit(Wi,{eventName:m,listener:r})}once(n){return new Promise(r=>{const m=this.on(n,y=>{m(),r(y)})})}events(n){n=Array.isArray(n)?n:[n];for(const r of n)Lr(r);return Bs(this,n)}async emit(n,r){Lr(n),this.logIfDebugEnabled("emit",n,r),e2(this,n,r);const m=Fr(this,n),y=ar.get(this),I=[...m],F=po(n)?[]:[...y];await Ms,await Promise.all([...I.map(async Y=>{if(m.has(Y))return Y(r)}),...F.map(async Y=>{if(y.has(Y))return Y(n,r)})])}async emitSerial(n,r){Lr(n),this.logIfDebugEnabled("emitSerial",n,r);const m=Fr(this,n),y=ar.get(this),I=[...m],F=[...y];await Ms;for(const Y of I)m.has(Y)&&await Y(r);for(const Y of F)y.has(Y)&&await Y(n,r)}onAny(n){return Ri(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),ar.get(this).add(n),this.emit(Vi,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return Bs(this)}offAny(n){Ri(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(Wi,{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"){Fr(this,r).clear();const m=Ar(this,r);for(const y of m)y.finish();m.clear()}else{ar.get(this).clear();for(const m of Xi.get(this).values())m.clear();for(const m of Br.get(this).values()){for(const y of m)y.finish();m.clear()}}}listenerCount(n){n=Array.isArray(n)?n:[n];let r=0;for(const m of n){if(typeof m=="string"){r+=ar.get(this).size+Fr(this,m).size+Ar(this,m).size+Ar(this).size;continue}typeof m<"u"&&Lr(m),r+=ar.get(this).size;for(const y of Xi.get(this).values())r+=y.size;for(const y of Br.get(this).values())r+=y.size}return r}bindMethods(n,r){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");r=As(r);for(const m of r){if(n[m]!==void 0)throw new Error(`The property \`${m}\` already exists on \`target\``);Object.defineProperty(n,m,{enumerable:!1,value:this[m].bind(this)})}}}const js=Object.getOwnPropertyNames(Zr.prototype).filter(o=>o!=="constructor");Object.defineProperty(Zr,"listenerAdded",{value:Vi,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(Zr,"listenerRemoved",{value:Wi,writable:!1,enumerable:!0,configurable:!1});var zs=Zr,vr=(o=>(o[o.INIT=0]="INIT",o[o.FORWARD=1]="FORWARD",o[o.TERMINATE=2]="TERMINATE",o))(vr||{});function Os(o){return[ImageBitmap,ReadableStream,WritableStream].some(n=>o instanceof n)}let n2=0;function bo(o,n,r,m,y){const I=n2++;return o.postMessage({id:I,type:n,functionName:r,args:m},m.filter(F=>Os(F))),new Promise(F=>{y.set(I,F)})}async function r2(o,n,r){const m=new n;if(m.addEventListener("message",({data:y})=>{var I;(I=r.get(y.id))==null||I(y.result),r.delete(y.id)}),!await bo(m,vr.INIT,"",[o.workerId],r))throw"Failed to instantiate workerized class";return m}async function i2(o,n,r){const m={};return Object.getOwnPropertyNames(o.prototype).forEach(y=>{m[y]=(...I)=>bo(n,vr.FORWARD,y,I,r)}),m.terminate=async(...y)=>{const I=await bo(n,vr.TERMINATE,"",y,r);return n.terminate(),m.worker=void 0,I},m.worker=n,m}async function o2(o,n){const r=new Map,m=await r2(o,n,r);return i2(o,m,r)}function yo(o,n){const{id:r}=o,m=Array.isArray(n)?n:[n];postMessage({id:r,result:n},m.filter(y=>Os(y)))}async function s2(o,n){const{functionName:r,args:m}=o;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}`;yo(o,await n.instance[r](...m!=null?m:[]))}function Ps(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}const _s={};function l2(o,n){n.workerId=o,Ps()&&(_s[n.workerId]=n)}function u2(o,n){if(!o.args)throw"Missing className while initializing worker";const[r]=o.args,m=_s[r];if(m)n.instance=new m(o.args.slice(1));else throw`unknown worker class ${r}`;yo(o,typeof n.instance!==void 0)}async function c2(o,n){const{args:r}=o;if(!n.instance)throw"instance not initialized";let m;n.instance.terminate&&(m=await n.instance.terminate(...r!=null?r:[])),yo(o,m)}function a2(){const o={};onmessage=async n=>{const r=n.data;switch(r.type){case vr.INIT:u2(r,o);break;case vr.FORWARD:s2(r,o);break;case vr.TERMINATE:c2(r,o);break}}}Ps()&&a2();class Qs{static async createVideoReadable(n){return new Promise((r,m)=>{const y=document.createElement("video");let I=new AbortController,F=new AbortController;y.addEventListener("canplay",()=>{I.abort(),y.muted=!0,y.loop=!0,y.play().then(()=>{try{const Y=y.captureStream(),k=new MediaStreamTrackProcessor(Y.getVideoTracks()[0]);r(k.readable)}catch(Y){m(Y)}})},{once:!0,signal:F.signal}),y.addEventListener("error",Y=>{F.abort(),m("loading error:"+Y)},{once:!0,signal:I.signal}),y.crossOrigin="anonymous",y.src=n})}static async createImageCanvas(n){const m=await(await fetch(n)).blob();return await createImageBitmap(m)}}async function Ds(o){return new Promise(n=>{setTimeout(()=>{n()},o)})}var $s=(o=>(o.PUSH="PUSH",o.POP="POP",o))($s||{});class d2{constructor(n){Rt(this,"context");Rt(this,"extension");Rt(this,"queries",[]);Rt(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 Ds(200)}}}/* @license twgl.js 5.2.0 Copyright (c) 2015, Gregg Tavares All Rights Reserved.
|
|
121
|
+
`+R.getProgramInfoLog(K));F=s.m=K,R.useProgram(F),N=R.getUniformLocation(F,"sampler0"),s.j={I:R.getAttribLocation(F,"aVertex"),H:R.getAttribLocation(F,"aTex"),da:N},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(N,0)}F=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(F.I),R.bindBuffer(R.ARRAY_BUFFER,s.s),R.vertexAttribPointer(F.I,2,R.FLOAT,!1,0,0),R.enableVertexAttribArray(F.H),R.bindBuffer(R.ARRAY_BUFFER,s.o),R.vertexAttribPointer(F.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(F.I),R.disableVertexAttribArray(F.H),R.bindBuffer(R.ARRAY_BUFFER,null),s.h.bindTexture2d(0)}function Tt(s){this.g=s}var kt=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 Qt(s,X){return X+s}function ue(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(kt),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 Je(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||Qt,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=w(Object.keys(s.options));for(var R=X.next();!R.done;R=X.next()){R=R.value;var F=s.options[R].default;F!==void 0&&(this.j[R]=typeof F=="function"?F():F)}}}i=Je.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function h(s){var X,R,F,N,K,B,nt,$,yt,Gt,Bt;return gt(function(xt){switch(xt.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(xt,ge(),2)):xt.return();case 2:if(R=xt.h,typeof window=="object")return ue("createMediapipeSolutionsWasm",{locateFile:s.locateFile}),ue("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 Xt=C(s,ht.url);if(ht.path!==void 0){var It=ht.path;Xt=Xt.then(function(wt){return s.overrideFile(It,wt),Promise.resolve(wt)})}return Xt})),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,Xt,It;return gt(function(wt){if(wt.g==1)return ht=window.createMediapipeSolutionsWasm,Xt=window.createMediapipeSolutionsPackedAssets,It=s,P(wt,ht(Xt),2);It.h=wt.h,wt.g=0})}),Gt=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(xt,Promise.all([yt,$,Gt]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return F=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,E(F)),N=s,P(xt,createMediapipeSolutionsWasm(Module),6);case 6:N.h=xt.h,s.l=new OffscreenCanvas(1,1),s.h.canvas=s.l,K=s.h.GL.createContext(s.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),s.h.GL.makeContextCurrent(K),xt.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."),xt.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,xt.g=0}})}function y(s){var X,R,F,N,K,B,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=w(Object.keys(s.B)),F=R.next();!F.done;F=R.next())N=F.value,s.i.overrideFile(N,s.B[N]);if(s.B={},s.g.listeners)for(K=w(s.g.listeners),B=K.next();!B.done;B=K.next())nt=B.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 F=[],N=[],K={},B=w(Object.keys(s)),nt=B.next();!nt.done;K={K:K.K,L:K.L},nt=B.next()){var $=nt.value;$ in this.j&&this.j[$]===s[$]||(this.j[$]=s[$],nt=X[$],nt!==void 0&&(nt.onChange&&(K.K=nt.onChange,K.L=s[$],F.push(function(yt){return function(){var Gt;return gt(function(Bt){if(Bt.g==1)return P(Bt,yt.K(yt.L),2);Gt=Bt.h,Gt===!0&&(R.o=!0),Bt.g=0})}}(K))),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),$),N.push(nt))))}(F.length!==0||N.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(N),this.v=(this.v===void 0?[]:this.v).concat(F))}};function v(s){var X,R,F,N,K,B,nt;return gt(function($){switch($.g){case 1:if(!s.o)return $.return();if(!s.v){$.g=2;break}X=w(s.v),R=X.next();case 3:if(R.done){$.g=5;break}return F=R.value,P($,F(),4);case 4:R=X.next(),$.g=3;break;case 5:s.v=void 0;case 2:if(s.A){for(N=new s.h.GraphOptionChangeRequestList,K=w(s.A),B=K.next();!B.done;B=K.next())nt=B.value,N.push_back(nt);s.i.changeOptions(N),N.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,v(s),0)})};function C(s,X){var R,F;return gt(function(N){return X in s.F?N.return(s.F[X]):(R=s.locateFile(X,""),F=fetch(R).then(function(K){return K.arrayBuffer()}),s.F[X]=F,N.return(F))})}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,F,N,K,B,nt,$,yt,Gt,Bt;return gt(function(xt){switch(xt.g){case 1:return R.g.inputs?(F=1e3*(X==null?performance.now():X),P(xt,R.C,2)):xt.return();case 2:return P(xt,R.initialize(),3);case 3:for(N=new R.h.PacketDataList,K=w(Object.keys(s)),B=K.next();!B.done;B=K.next())if(nt=B.value,$=R.g.inputs[nt]){t:{var ht=s[nt];switch($.type){case"video":var Xt=R.m[$.stream];if(Xt||(Xt=new Nt(R.h,R.D),R.m[$.stream]=Xt),Xt.l===0&&(Xt.l=Xt.h.createTexture()),typeof HTMLVideoElement<"u"&&ht instanceof HTMLVideoElement)var It=ht.videoWidth,wt=ht.videoHeight;else typeof HTMLImageElement<"u"&&ht instanceof HTMLImageElement?(It=ht.naturalWidth,wt=ht.naturalHeight):(It=ht.width,wt=ht.height);wt={glName:Xt.l,width:It,height:wt},It=Xt.g,It.canvas.width=wt.width,It.canvas.height=wt.height,It.activeTexture(It.TEXTURE0),Xt.h.bindTexture2d(Xt.l),It.texImage2D(It.TEXTURE_2D,0,It.RGBA,It.RGBA,It.UNSIGNED_BYTE,ht),Xt.h.bindTexture2d(0),Xt=wt;break t;case"detections":for(Xt=R.m[$.stream],Xt||(Xt=new Tt(R.h),R.m[$.stream]=Xt),Xt.data||(Xt.data=new Xt.g.DetectionListData),Xt.data.reset(ht.length),wt=0;wt<ht.length;++wt){It=ht[wt];var Yt=Xt.data,l=Yt.setBoundingBox,Z=wt,x=It.T,T=new k;if(ut(T,1,x.Y),ut(T,2,x.Z),ut(T,3,x.height),ut(T,4,x.width),ut(T,5,x.rotation),ut(T,6,x.W),x=fn(T,ot),l.call(Yt,Z,x),It.O)for(Yt=0;Yt<It.O.length;++Yt){T=It.O[Yt];var J=!!T.visibility;l=Xt.data,Z=l.addNormalizedLandmark,x=wt,T=Object.assign(Object.assign({},T),{visibility:J?T.visibility:0}),J=new wn,ut(J,1,T.x),ut(J,2,T.y),ut(J,3,T.z),T.visibility&&ut(J,4,T.visibility),T=fn(J,Qn),Z.call(l,x,T)}if(It.M)for(Yt=0;Yt<It.M.length;++Yt)l=Xt.data,Z=l.addClassification,x=wt,T=It.M[Yt],J=new Sn,ut(J,2,T.X),T.index&&ut(J,1,T.index),T.label&&ut(J,3,T.label),T.displayName&&ut(J,4,T.displayName),T=fn(J,kn),Z.call(l,x,T)}Xt=Xt.data;break t;default:Xt={}}}switch(yt=Xt,Gt=$.stream,$.type){case"video":N.pushTexture2d(Object.assign(Object.assign({},yt),{stream:Gt,timestamp:F}));break;case"detections":Bt=yt,Bt.stream=Gt,Bt.timestamp=F,N.pushDetectionList(Bt);break;default:throw Error("Unknown input config type: '"+$.type+"'")}}return R.i.send(N),P(xt,R.C,4);case 4:N.delete(),xt.g=0}})};function A(s,X,R){var F,N,K,B,nt,$,yt,Gt,Bt,xt,ht,Xt,It,wt;return gt(function(Yt){switch(Yt.g){case 1:if(!R)return Yt.return(X);for(F={},N=0,K=w(Object.keys(R)),B=K.next();!B.done;B=K.next())nt=B.value,$=R[nt],typeof $!="string"&&$.type==="texture"&&X[$.stream]!==void 0&&++N;1<N&&(s.G=!1),yt=w(Object.keys(R)),B=yt.next();case 2:if(B.done){Yt.g=4;break}if(Gt=B.value,Bt=R[Gt],typeof Bt=="string")return It=F,wt=Gt,P(Yt,_(s,Gt,X[Bt]),14);if(xt=X[Bt.stream],Bt.type==="detection_list"){if(xt){for(var l=xt.getRectList(),Z=xt.getLandmarksList(),x=xt.getClassificationsList(),T=[],J=0;J<l.size();++J){var o=yn(l.get(J),k,O);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(Z.get(J)),M:bt(yn(x.get(J),vn,An))},T.push(o)}l=T}else l=[];F[Gt]=l,Yt.g=7;break}if(Bt.type==="proto_list"){if(xt){for(l=Array(xt.size()),Z=0;Z<xt.size();Z++)l[Z]=xt.get(Z);xt.delete()}else l=[];F[Gt]=l,Yt.g=7;break}if(xt===void 0){Yt.g=3;break}if(Bt.type==="float_list"){F[Gt]=xt,Yt.g=7;break}if(Bt.type==="proto"){F[Gt]=xt,Yt.g=7;break}if(Bt.type!=="texture")throw Error("Unknown output config type: '"+Bt.type+"'");return ht=s.s[Gt],ht||(ht=new Nt(s.h,s.D),s.s[Gt]=ht),P(Yt,$t(ht,xt,s.G),13);case 13:Xt=Yt.h,F[Gt]=Xt;case 7:Bt.transform&&F[Gt]&&(F[Gt]=Bt.transform(F[Gt])),Yt.g=3;break;case 14:It[wt]=Yt.h;case 3:B=yt.next(),Yt.g=2;break;case 4:return Yt.return(F)}})}function _(s,X,R){var F;return gt(function(N){return typeof R=="number"||R instanceof Uint8Array||R instanceof s.h.Uint8BlobList?N.return(R):R instanceof s.h.Texture2dDataOut?(F=s.s[X],F||(F=new Nt(s.h,s.D),s.s[X]=F),N.return($t(F,R,s.G))):N.return(void 0)})}function M(s,X){for(var R=X.name||"$",F=[].concat(E(X.wants)),N=new s.h.StringList,K=w(X.wants),B=K.next();!B.done;B=K.next())N.push_back(B.value);K=s.h.PacketListener.implement({onResults:function(nt){for(var $={},yt=0;yt<X.wants.length;++yt)$[F[yt]]=nt.get(yt);var Gt=s.listeners[R];Gt&&(s.C=A(s,$,X.outs).then(function(Bt){Bt=Gt(Bt);for(var xt=0;xt<X.wants.length;++xt){var ht=$[F[xt]];typeof ht=="object"&&ht.hasOwnProperty&&ht.hasOwnProperty("delete")&&ht.delete()}Bt&&(s.C=Bt)}))}}),s.i.attachMultiListener(N,K),N.delete()}i.onResults=function(s,X){this.listeners[X||"$"]=s},Ht("Solution",Je),Ht("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 lt(s){var X=this;s=s||{},this.g=new Je({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 F,N,K;return gt(function(B){return B.g==1?(F=q(R),N="third_party/mediapipe/modules/pose_landmark/"+F,P(B,C(X.g,F),2)):(K=B.h,X.g.overrideFile(N,K),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=lt.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(F){return P(F,R.g.send(s,X),0)})},i.setOptions=function(s){this.g.setOptions(s)},Ht("Pose",lt),Ht("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]]),Ht("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}),Ht("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}),Ht("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}),Ht("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Ht("VERSION","0.5.1635988162")}).call(bi);const ir=class{constructor(){Wt(this,"mediapipeMap_",new Map)}getVersion(n){switch(n){case"face_detection":return fi.VERSION;case"face_mesh":return mi.VERSION;case"hands":return di.VERSION;case"holistic":return hi.VERSION;case"objectron":return pi.VERSION;case"selfie_segmentation":return ai.VERSION;case"pose":return bi.VERSION;default:return""}}initialize(n){return new Promise(async(r,p)=>{if(n.mediaPipeModelConfigArray.length==0){p("no model was selected");return}for(let G=0;G<n.mediaPipeModelConfigArray.length;G++){const S=n.mediaPipeModelConfigArray[G];if(this.mediapipeMap_.has(S.modelType)){p("setting same type is not supported");return}if(typeof S.listener!="function"){p(`[${S.modelType}] ResultsListener must be provided`);return}let H;switch(S.modelType){case"face_mesh":H=new mi.FaceMesh({locateFile:(w,E)=>(S.assetsUri||ir.defaultAssetsBaseUrl+"face_mesh/"+this.getVersion("face_mesh"))+"/"+w});break;case"face_detection":H=new fi.FaceDetection({locateFile:(w,E)=>(S.assetsUri||ir.defaultAssetsBaseUrl+"face_detection/"+this.getVersion("face_detection"))+"/"+w});break;case"hands":H=new di.Hands({locateFile:(w,E)=>(S.assetsUri||ir.defaultAssetsBaseUrl+"hands/"+this.getVersion("hands"))+"/"+w});break;case"holistic":H=new hi.Holistic({locateFile:(w,E)=>(S.assetsUri||ir.defaultAssetsBaseUrl+"holistic/"+this.getVersion("holistic"))+"/"+w});break;case"objectron":H=new pi.Objectron({locateFile:(w,E)=>(S.assetsUri||ir.defaultAssetsBaseUrl+"objectron/"+this.getVersion("objectron"))+"/"+w});break;case"selfie_segmentation":H=new ai.SelfieSegmentation({locateFile:(w,E)=>(S.assetsUri||ir.defaultAssetsBaseUrl+"selfie_segmentation/"+this.getVersion("selfie_segmentation"))+"/"+w});break;case"pose":H=new bi.Pose({locateFile:(w,E)=>(S.assetsUri||ir.defaultAssetsBaseUrl+"pose/"+this.getVersion("pose"))+"/"+w});break;default:p("unknown model type");return}H.onResults(S.listener),S.options&&H.setOptions(S.options);try{await H.initialize(),this.mediapipeMap_.set(S.modelType,H)}catch(w){p(w);return}}r()})}close(n){return new Promise((r,p)=>{let G=[];if(n){let S=this.mediapipeMap_.get(n);if(S)this.mediapipeMap_.delete(n),G.push(S.close());else{p("model not exit");return}}else{for(const[S,H]of this.mediapipeMap_.entries())G.push(H.close());this.mediapipeMap_.clear()}Promise.all(G).then(()=>{r()}).catch(S=>{p(S)})})}send(n,r){return new Promise((p,G)=>{let S=[];if(r){let H=this.mediapipeMap_.get(r);if(H)S.push(H.send({image:n}));else{G("model not exit");return}}else for(const[H,w]of this.mediapipeMap_.entries())S.push(w.send({image:n}));Promise.all(S).then(()=>{p()}).catch(H=>{G(H)})})}reset(n){if(n){let r=this.mediapipeMap_.get(n);r&&typeof r.reset=="function"&&r.reset()}else for(const[r,p]of this.mediapipeMap_.entries())p&&typeof p.reset=="function"&&p.reset()}};let yi=ir;Wt(yi,"defaultAssetsBaseUrl","https://d3opqjmqzxf057.cloudfront.net/ml/mediapipe/");const lr=new WeakMap,vr=new WeakMap,rr=new WeakMap,gi=Symbol("anyProducer"),ds=Promise.resolve(),Zi=Symbol("listenerAdded"),vi=Symbol("listenerRemoved");let Gi=!1,io=!1;function wr(i){if(typeof i!="string"&&typeof i!="symbol"&&typeof i!="number")throw new TypeError("`eventName` must be a string, symbol, or number")}function Xi(i){if(typeof i!="function")throw new TypeError("listener must be a function")}function Fr(i,n){const r=vr.get(i);if(!!r.has(n))return r.get(n)}function Mr(i,n){const r=typeof n=="string"||typeof n=="symbol"||typeof n=="number"?n:gi,p=rr.get(i);if(!!p.has(r))return p.get(r)}function H2(i,n,r){const p=rr.get(i);if(p.has(n))for(const G of p.get(n))G.enqueue(r);if(p.has(gi)){const G=Promise.all([n,r]);for(const S of p.get(gi))S.enqueue(G)}}function hs(i,n){n=Array.isArray(n)?n:[n];let r=!1,p=()=>{},G=[];const S={enqueue(H){G.push(H),p()},finish(){r=!0,p()}};for(const H of n){let w=Mr(i,H);w||(w=new Set,rr.get(i).set(H,w)),w.add(S)}return{async next(){return G?G.length===0?r?(G=void 0,this.next()):(await new Promise(H=>{p=H}),this.next()):{done:!1,value:await G.shift()}:{done:!0}},async return(H){G=void 0;for(const w of n){const E=Mr(i,w);E&&(E.delete(S),E.size===0&&rr.get(i).delete(w))}return p(),arguments.length>0?{done:!0,value:await H}:{done:!0}},[Symbol.asyncIterator](){return this}}}function fs(i){if(i===void 0)return ms;if(!Array.isArray(i))throw new TypeError("`methodNames` must be an array of strings");for(const n of i)if(!ms.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return i}const Yr=i=>i===Zi||i===vi;function Wi(i,n,r){if(Yr(n))try{Gi=!0,i.emit(n,r)}finally{Gi=!1}}class cr{static mixin(n,r){return r=fs(r),p=>{if(typeof p!="function")throw new TypeError("`target` must be function");for(const H of r)if(p.prototype[H]!==void 0)throw new Error(`The property \`${H}\` already exists on \`target\``);function G(){return Object.defineProperty(this,n,{enumerable:!1,value:new cr}),this[n]}Object.defineProperty(p.prototype,n,{enumerable:!1,get:G});const S=H=>function(...w){return this[n][H](...w)};for(const H of r)Object.defineProperty(p.prototype,H,{enumerable:!1,value:S(H)});return p}}static get isDebugEnabled(){var r,p;if(typeof((r=globalThis.process)==null?void 0:r.env)!="object")return io;const{env:n}=(p=globalThis.process)!=null?p:{env:{}};return n.DEBUG==="emittery"||n.DEBUG==="*"||io}static set isDebugEnabled(n){io=n}constructor(n={}){var r;lr.set(this,new Set),vr.set(this,new Map),rr.set(this,new Map),rr.get(this).set(gi,new Set),this.debug=(r=n.debug)!=null?r:{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(p,G,S,H)=>{try{H=JSON.stringify(H)}catch{H=`Object with the following keys failed to stringify: ${Object.keys(H).join(",")}`}(typeof S=="symbol"||typeof S=="number")&&(S=S.toString());const w=new Date,E=`${w.getHours()}:${w.getMinutes()}:${w.getSeconds()}.${w.getMilliseconds()}`;console.log(`[${E}][emittery:${p}][${G}] Event Name: ${S}
|
|
122
|
+
data: ${H}`)})}logIfDebugEnabled(n,r,p){(cr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,p)}on(n,r){Xi(r),n=Array.isArray(n)?n:[n];for(const p of n){wr(p);let G=Fr(this,p);G||(G=new Set,vr.get(this).set(p,G)),G.add(r),this.logIfDebugEnabled("subscribe",p,void 0),Yr(p)||Wi(this,Zi,{eventName:p,listener:r})}return this.off.bind(this,n,r)}off(n,r){Xi(r),n=Array.isArray(n)?n:[n];for(const p of n){wr(p);const G=Fr(this,p);G&&(G.delete(r),G.size===0&&vr.get(this).delete(p)),this.logIfDebugEnabled("unsubscribe",p,void 0),Yr(p)||Wi(this,vi,{eventName:p,listener:r})}}once(n){let r;const p=new Promise(G=>{r=this.on(n,S=>{r(),G(S)})});return p.off=r,p}events(n){n=Array.isArray(n)?n:[n];for(const r of n)wr(r);return hs(this,n)}async emit(n,r){var w;if(wr(n),Yr(n)&&!Gi)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emit",n,r),H2(this,n,r);const p=(w=Fr(this,n))!=null?w:new Set,G=lr.get(this),S=[...p],H=Yr(n)?[]:[...G];await ds,await Promise.all([...S.map(async E=>{if(p.has(E))return E(r)}),...H.map(async E=>{if(G.has(E))return E(n,r)})])}async emitSerial(n,r){var w;if(wr(n),Yr(n)&&!Gi)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emitSerial",n,r);const p=(w=Fr(this,n))!=null?w:new Set,G=lr.get(this),S=[...p],H=[...G];await ds;for(const E of S)p.has(E)&&await E(r);for(const E of H)G.has(E)&&await E(n,r)}onAny(n){return Xi(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),lr.get(this).add(n),Wi(this,Zi,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return hs(this)}offAny(n){Xi(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),Wi(this,vi,{listener:n}),lr.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 p=Fr(this,r);p&&p.clear();const G=Mr(this,r);if(G){for(const S of G)S.finish();G.clear()}}else{lr.get(this).clear();for(const[p,G]of vr.get(this).entries())G.clear(),vr.get(this).delete(p);for(const[p,G]of rr.get(this).entries()){for(const S of G)S.finish();G.clear(),rr.get(this).delete(p)}}}listenerCount(n){var p,G,S,H,w,E;n=Array.isArray(n)?n:[n];let r=0;for(const et of n){if(typeof et=="string"){r+=lr.get(this).size+((G=(p=Fr(this,et))==null?void 0:p.size)!=null?G:0)+((H=(S=Mr(this,et))==null?void 0:S.size)!=null?H:0)+((E=(w=Mr(this))==null?void 0:w.size)!=null?E:0);continue}typeof et<"u"&&wr(et),r+=lr.get(this).size;for(const ct of vr.get(this).values())r+=ct.size;for(const ct of rr.get(this).values())r+=ct.size}return r}bindMethods(n,r){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");r=fs(r);for(const p of r){if(n[p]!==void 0)throw new Error(`The property \`${p}\` already exists on \`target\``);Object.defineProperty(n,p,{enumerable:!1,value:this[p].bind(this)})}}}const ms=Object.getOwnPropertyNames(cr.prototype).filter(i=>i!=="constructor");Object.defineProperty(cr,"listenerAdded",{value:Zi,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(cr,"listenerRemoved",{value:vi,writable:!1,enumerable:!0,configurable:!1});function oo(i,n){return globalThis[i]||(globalThis[i]=n),globalThis[i]}const Lr=oo("globals",{});var $n=(i=>(i.INIT="INIT",i.FORWARD="FORWARD",i.TERMINATE="TERMINATE",i.GLOBALS_SYNC="GLOBALS_SYNC",i))($n||{});function ps(i){return[ImageBitmap,ReadableStream,WritableStream].some(n=>i instanceof n)}let N2=0;function Vi(i,n,r,p,G){const S=N2++;return i.postMessage({id:S,type:n,functionName:r,args:p},p.filter(H=>ps(H))),new Promise(H=>{G==null||G.set(S,H)})}function Kr(i,n){const{id:r,type:p}=i,G=Array.isArray(n)?n:[n];postMessage({id:r,type:p,result:n},G.filter(S=>ps(S)))}const Ri=oo("workerized",{});function so(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function J2(){if(so())Kr({type:$n.GLOBALS_SYNC},Lr);else{const i=[];for(const n in Ri){const{worker:r,resolvers:p}=Ri[n].workerContext;r&&i.push(Vi(r,$n.GLOBALS_SYNC,"",[Lr],p))}await Promise.all(i)}}function jr(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]=[],jr(i[r],n[r])):typeof i[r]=="object"?(n[r]={},jr(i[r],n[r])):n[r]=i[r]}async function E2(i,n,r){const p=new n;if(p.addEventListener("message",async({data:G})=>{var S,H,w,E,et,ct,dt;switch(G.type){case $n.GLOBALS_SYNC:G.id?((H=r.get((S=G.id)!=null?S:-1))==null||H(G.result),r.delete((w=G.id)!=null?w:-1)):(jr((E=G.result)!=null?E:{},Lr),await J2());break;default:(ct=r.get((et=G.id)!=null?et:-1))==null||ct(G.result),r.delete((dt=G.id)!=null?dt:-1)}}),!await Vi(p,$n.INIT,"",[i.workerId,Lr],r))throw"Failed to instantiate workerized class";return p}let k2=0;async function U2(i,n,r){const p={},G=k2++;return Object.getOwnPropertyNames(i.prototype).forEach(S=>{p[S]=(...H)=>Vi(n,$n.FORWARD,S,H,r)}),p.terminate=async(...S)=>{const H=await Vi(n,$n.TERMINATE,"",S,r);return delete Ri[G],n.terminate(),p.workerContext.worker=void 0,H},p.workerContext={id:G,worker:n,resolvers:r},Ri[G]=p,p}async function B2(i,n){const r=new Map,p=await E2(i,n,r);return U2(i,p,r)}async function A2(i,n){const{functionName:r,args:p}=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}`;Kr(i,await n.instance[r](...p!=null?p:[]))}const bs=oo("registeredWorkers",{});function M2(i,n){n.workerId=i,so()&&(bs[n.workerId]=n)}function K2(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,p]=i.args,G=bs[r];if(G)n.instance=new G(i.args.slice(1));else throw`unknown worker class ${r}`;jr(p,Lr),Kr(i,typeof n.instance!==void 0)}async function j2(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let p;n.instance.terminate&&(p=await n.instance.terminate(...r!=null?r:[])),Kr(i,p)}function O2(i){if(!i.args)throw"Missing globals while syncing";jr(i.args[0],Lr),Kr(i,{})}function z2(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case $n.INIT:K2(r,i);break;case $n.FORWARD:A2(r,i);break;case $n.TERMINATE:j2(r,i);break;case $n.GLOBALS_SYNC:O2(r);break}}}so()&&z2();class ys{static async createVideoReadable(n){return new Promise((r,p)=>{const G=document.createElement("video");let S=new AbortController,H=new AbortController;G.addEventListener("canplay",()=>{S.abort(),G.muted=!0,G.loop=!0,G.play().then(()=>{try{const w=G.captureStream(),E=new MediaStreamTrackProcessor(w.getVideoTracks()[0]);r(E.readable)}catch(w){p(w)}})},{once:!0,signal:H.signal}),G.addEventListener("error",w=>{H.abort(),p("loading error:"+w)},{once:!0,signal:S.signal}),G.crossOrigin="anonymous",G.src=n})}static async createImageCanvas(n){const p=await(await fetch(n)).blob();return await createImageBitmap(p)}}var P2=Object.defineProperty,_2=(i,n,r)=>n in i?P2(i,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[n]=r,Q2=(i,n,r)=>(_2(i,typeof n!="symbol"?n+"":n,r),r);const D2="hlg.tokbox.com/prod/logging/vcp_webrtc",$2="https://",q2=1e4;let xi;const t1=new Uint8Array(16);function e1(){if(!xi&&(xi=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!xi))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return xi(t1)}const Bn=[];for(let i=0;i<256;++i)Bn.push((i+256).toString(16).slice(1));function n1(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 r1=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),gs={randomUUID:r1};function i1(i,n,r){if(gs.randomUUID&&!n&&!i)return gs.randomUUID();i=i||{};const p=i.random||(i.rng||e1)();if(p[6]=p[6]&15|64,p[8]=p[8]&63|128,n){r=r||0;for(let G=0;G<16;++G)n[r+G]=p[G];return n}return n1(p)}function lo(i,n){return globalThis[i]||(globalThis[i]=n),globalThis[i]}const ur=lo("globals",{});var Gr=(i=>(i.INIT="INIT",i.FORWARD="FORWARD",i.TERMINATE="TERMINATE",i.GLOBALS_SYNC="GLOBALS_SYNC",i))(Gr||{});function Zs(i){return[ImageBitmap,ReadableStream,WritableStream].some(n=>i instanceof n)}let o1=0;function s1(i,n,r,p,G){const S=o1++;return i.postMessage({id:S,type:n,functionName:r,args:p},p.filter(H=>Zs(H))),new Promise(H=>{G==null||G.set(S,H)})}function Or(i,n){const{id:r,type:p}=i,G=Array.isArray(n)?n:[n];postMessage({id:r,type:p,result:n},G.filter(S=>Zs(S)))}const vs=lo("workerized",{});function Gs(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function l1(){if(Gs())Or({type:Gr.GLOBALS_SYNC},ur);else{const i=[];for(const n in vs){const{worker:r,resolvers:p}=vs[n].workerContext;r&&i.push(s1(r,Gr.GLOBALS_SYNC,"",[ur],p))}await Promise.all(i)}}function Ii(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]=[],Ii(i[r],n[r])):typeof i[r]=="object"?(n[r]={},Ii(i[r],n[r])):n[r]=i[r]}async function c1(i,n){const{functionName:r,args:p}=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}`;Or(i,await n.instance[r](...p!=null?p:[]))}const u1=lo("registeredWorkers",{});function a1(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,p]=i.args,G=u1[r];if(G)n.instance=new G(i.args.slice(1));else throw`unknown worker class ${r}`;Ii(p,ur),Or(i,typeof n.instance!==void 0)}async function d1(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let p;n.instance.terminate&&(p=await n.instance.terminate(...r!=null?r:[])),Or(i,p)}function h1(i){if(!i.args)throw"Missing globals while syncing";Ii(i.args[0],ur),Or(i,{})}function f1(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case Gr.INIT:a1(r,i);break;case Gr.FORWARD:c1(r,i);break;case Gr.TERMINATE:d1(r,i);break;case Gr.GLOBALS_SYNC:h1(r);break}}}Gs()&&f1();function m1(i,n){return ur[i]||(ur[i]=n),[()=>ur[i],async r=>{ur[i]=r,await l1()}]}function p1(i,n){return m1(i,n)}const[b1,m3]=p1("metadata");function co(){return b1()}class y1{constructor(n){Q2(this,"uuid",i1()),this.config=n}async send(n){var r,p,G;const{appId:S,sourceType:H}=(r=co())!=null?r:{};if(!S||!H)return"metadata missing";const w=new AbortController,E=setTimeout(()=>w.abort(),q2);return await((G=(p=this.config)==null?void 0:p.fetch)!=null?G:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(n)),signal:w.signal}),clearTimeout(E),"success"}getUrl(){var n;let r=(n=co().proxyUrl)!=null?n:$2;return r+=(r.at(-1)==="/"?"":"/")+D2,r}getHeaders(){return{"Content-Type":"application/json"}}buildReport(n){const r=co();return{guid:this.uuid,...n,applicationId:r.appId,timestamp:Date.now(),proxyUrl:r.proxyUrl,source:r.sourceType}}}const g1="4.3.6";async function Xs(i){return new Promise(n=>{setTimeout(()=>{n()},i)})}var Ws=(i=>(i.PUSH="PUSH",i.POP="POP",i))(Ws||{});class Z1{constructor(n){Wt(this,"context");Wt(this,"extension");Wt(this,"queries",[]);Wt(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 Xs(200)}}}/* @license twgl.js 5.3.0 Copyright (c) 2015, Gregg Tavares All Rights Reserved.
|
|
124
123
|
Available via the MIT license.
|
|
125
|
-
see: http://github.com/greggman/twgl.js for details */const go=5120,jr=5121,Zo=5122,vo=5123,Go=5124,Xo=5125,Vo=5126,h2=32819,f2=32820,m2=33635,p2=5131,b2=33640,y2=35899,g2=35902,Z2=36269,v2=34042,qs={};{const o=qs;o[go]=Int8Array,o[jr]=Uint8Array,o[Zo]=Int16Array,o[vo]=Uint16Array,o[Go]=Int32Array,o[Xo]=Uint32Array,o[Vo]=Float32Array,o[h2]=Uint16Array,o[f2]=Uint16Array,o[m2]=Uint16Array,o[p2]=Uint16Array,o[b2]=Uint32Array,o[y2]=Uint32Array,o[g2]=Uint32Array,o[Z2]=Uint32Array,o[v2]=Uint32Array}function Wo(o){if(o instanceof Int8Array)return go;if(o instanceof Uint8Array||o instanceof Uint8ClampedArray)return jr;if(o instanceof Int16Array)return Zo;if(o instanceof Uint16Array)return vo;if(o instanceof Int32Array)return Go;if(o instanceof Uint32Array)return Xo;if(o instanceof Float32Array)return Vo;throw new Error("unsupported typed array type")}function tl(o){if(o===Int8Array)return go;if(o===Uint8Array||o===Uint8ClampedArray)return jr;if(o===Int16Array)return Zo;if(o===Uint16Array)return vo;if(o===Int32Array)return Go;if(o===Uint32Array)return Xo;if(o===Float32Array)return Vo;throw new Error("unsupported typed array type")}function el(o){const n=qs[o];if(!n)throw new Error("unknown gl type");return n}const xi=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 nl(...o){console.error(...o)}const rl=new Map;function Ii(o,n){if(!o||typeof o!="object")return!1;let r=rl.get(n);r||(r=new WeakMap,rl.set(n,r));let m=r.get(o);if(m===void 0){const y=Object.prototype.toString.call(o);m=y.substring(8,y.length-1)===n,r.set(o,m)}return m}function G2(o,n){return typeof WebGLBuffer<"u"&&Ii(n,"WebGLBuffer")}function X2(o,n){return typeof WebGLRenderbuffer<"u"&&Ii(n,"WebGLRenderbuffer")}function Ro(o,n){return typeof WebGLTexture<"u"&&Ii(n,"WebGLTexture")}function V2(o,n){return typeof WebGLSampler<"u"&&Ii(n,"WebGLSampler")}const il=35044,Gr=34962,W2=34963,R2=34660,x2=5120,I2=5121,S2=5122,Y2=5123,T2=5124,w2=5125,ol=5126,sl={attribPrefix:""};function L2(o,n,r,m,y){o.bindBuffer(n,r),o.bufferData(n,m,y||il)}function ll(o,n,r,m){if(G2(o,n))return n;r=r||Gr;const y=o.createBuffer();return L2(o,r,y,n,m),y}function ul(o){return o==="indices"}function F2(o){return o===Int8Array||o===Uint8Array}function H2(o){return o.length?o:o.data}const C2=/coord|texture/i,N2=/color|colour/i;function J2(o,n){let r;if(C2.test(o)?r=2:N2.test(o)?r=4:r=3,n%r>0)throw new Error(`Can not guess numComponents for attribute '${o}'. Tried ${r} but ${n} values is not evenly divisible by ${r}. You should specify it.`);return r}function k2(o,n,r){return o.numComponents||o.size||J2(n,r||H2(o).length)}function cl(o,n){if(xi(o))return o;if(xi(o.data))return o.data;Array.isArray(o)&&(o={data:o});let r=o.type?xo(o.type):void 0;return r||(ul(n)?r=Uint16Array:r=Float32Array),new r(o.data)}function E2(o){return typeof o=="number"?o:o?tl(o):ol}function xo(o){return typeof o=="number"?el(o):o||Float32Array}function K2(o,n){return{buffer:n.buffer,numValues:2*3*4,type:E2(n.type),arrayType:xo(n.type)}}function U2(o,n){const r=n.data||n,m=xo(n.type),y=r*m.BYTES_PER_ELEMENT,I=o.createBuffer();return o.bindBuffer(Gr,I),o.bufferData(Gr,y,n.drawType||il),{buffer:I,numValues:r,type:tl(m),arrayType:m}}function M2(o,n,r){const m=cl(n,r);return{arrayType:m.constructor,buffer:ll(o,m,void 0,n.drawType),type:Wo(m),numValues:0}}function B2(o,n){const r={};return Object.keys(n).forEach(function(m){if(!ul(m)){const y=n[m],I=y.attrib||y.name||y.attribName||sl.attribPrefix+m;if(y.value){if(!Array.isArray(y.value)&&!xi(y.value))throw new Error("array.value is not array or typedarray");r[I]={value:y.value}}else{let F;y.buffer&&y.buffer instanceof WebGLBuffer?F=K2:typeof y=="number"||typeof y.data=="number"?F=U2:F=M2;const{buffer:Y,type:k,numValues:et,arrayType:O}=F(o,y,m),st=y.normalize!==void 0?y.normalize:F2(O),xt=k2(y,m,et);r[I]={buffer:Y,numComponents:xt,type:k,normalize:st,stride:y.stride||0,offset:y.offset||0,divisor:y.divisor===void 0?void 0:y.divisor,drawType:y.drawType}}}}),o.bindBuffer(Gr,null),r}function A2(o,n){return n===x2||n===I2?1:n===S2||n===Y2?2:n===T2||n===w2||n===ol?4:0}const Io=["position","positions","a_position"];function j2(o,n){let r,m;for(m=0;m<Io.length&&(r=Io[m],!(r in n||(r=sl.attribPrefix+r,r in n)));++m);m===Io.length&&(r=Object.keys(n)[0]);const y=n[r];if(!y.buffer)return 1;o.bindBuffer(Gr,y.buffer);const I=o.getBufferParameter(Gr,R2);o.bindBuffer(Gr,null);const F=A2(o,y.type),Y=I/F,k=y.numComponents||y.size,et=Y/k;if(et%1!==0)throw new Error(`numComponents ${k} not correct for length ${length}`);return et}function z2(o,n,r){const m=B2(o,n),y=Object.assign({},r||{});y.attribs=Object.assign({},r?r.attribs:{},m);const I=n.indices;if(I){const F=cl(I,"indices");y.indices=ll(o,F,W2),y.numElements=F.length,y.elementType=Wo(F)}else y.numElements||(y.numElements=j2(o,y.attribs));return y}function zr(o){return!!o.texStorage2D}const al=function(){const o={},n={};function r(m){const y=m.constructor.name;if(!o[y]){for(const I in m)if(typeof m[I]=="number"){const F=n[m[I]];n[m[I]]=F?`${F} | ${I}`:I}o[y]=!0}}return function(y,I){return r(y),n[I]||(typeof I=="number"?`0x${I.toString(16)}`:I)}}(),dr={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},Or=xi,dl=function(){let o;return function(){return o=o||(typeof document<"u"&&document.createElement?document.createElement("canvas").getContext("2d"):null),o}}(),hl=6406,sr=6407,Gn=6408,fl=6409,ml=6410,Pr=6402,pl=34041,Si=33071,O2=9728,P2=9729,hr=3553,fr=34067,Xr=32879,Vr=35866,So=34069,_2=34070,Q2=34071,D2=34072,$2=34073,q2=34074,Yo=10241,To=10240,Yi=10242,Ti=10243,bl=32882,t1=33082,e1=33083,n1=33084,r1=33085,wo=3317,yl=3314,gl=32878,Zl=3316,vl=3315,Gl=32877,i1=37443,o1=37441,s1=37440,l1=33321,u1=36756,c1=33325,a1=33326,d1=33330,h1=33329,f1=33338,m1=33337,p1=33340,b1=33339,y1=33323,g1=36757,Z1=33327,v1=33328,G1=33336,X1=33335,V1=33332,W1=33331,R1=33334,x1=33333,I1=32849,S1=35905,Y1=36194,T1=36758,w1=35898,L1=35901,F1=34843,H1=34837,C1=36221,N1=36239,J1=36215,k1=36233,E1=36209,K1=36227,U1=32856,M1=35907,B1=36759,A1=32855,j1=32854,z1=32857,O1=34842,P1=34836,_1=36220,Q1=36238,D1=36975,$1=36214,q1=36232,ta=36226,ea=36208,na=33189,ra=33190,ia=36012,oa=36013,sa=35056,mr=5120,gn=5121,wi=5122,Hr=5123,Li=5124,Wr=5125,Bn=5126,Xl=32819,Vl=32820,Wl=33635,rr=5131,_r=36193,Lo=33640,la=35899,ua=35902,ca=36269,aa=34042,Fi=33319,Cr=33320,Hi=6403,Nr=36244,Jr=36248,Rr=36249;let Fo;function Ci(o){if(!Fo){const n={};n[hl]={textureFormat:hl,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[gn,rr,_r,Bn]},n[fl]={textureFormat:fl,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[gn,rr,_r,Bn]},n[ml]={textureFormat:ml,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[gn,rr,_r,Bn]},n[sr]={textureFormat:sr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[gn,rr,_r,Bn,Wl]},n[Gn]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[gn,rr,_r,Bn,Xl,Vl]},n[Pr]={textureFormat:Pr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Wr,Hr]},n[l1]={textureFormat:Hi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[gn]},n[u1]={textureFormat:Hi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[mr]},n[c1]={textureFormat:Hi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[Bn,rr]},n[a1]={textureFormat:Hi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[Bn]},n[d1]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[gn]},n[h1]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[mr]},n[V1]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Hr]},n[W1]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[wi]},n[R1]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Wr]},n[x1]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Li]},n[y1]={textureFormat:Fi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[gn]},n[g1]={textureFormat:Fi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[mr]},n[Z1]={textureFormat:Fi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[Bn,rr]},n[v1]={textureFormat:Fi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[Bn]},n[G1]={textureFormat:Cr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[gn]},n[X1]={textureFormat:Cr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[mr]},n[f1]={textureFormat:Cr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Hr]},n[m1]={textureFormat:Cr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[wi]},n[p1]={textureFormat:Cr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Wr]},n[b1]={textureFormat:Cr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Li]},n[I1]={textureFormat:sr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[gn]},n[S1]={textureFormat:sr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[gn]},n[Y1]={textureFormat:sr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[gn,Wl]},n[T1]={textureFormat:sr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[mr]},n[w1]={textureFormat:sr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Bn,rr,la]},n[L1]={textureFormat:sr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Bn,rr,ua]},n[F1]={textureFormat:sr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[Bn,rr]},n[H1]={textureFormat:sr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Bn]},n[C1]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[gn]},n[N1]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[mr]},n[J1]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Hr]},n[k1]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[wi]},n[E1]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Wr]},n[K1]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Li]},n[U1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[gn]},n[M1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[gn]},n[B1]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[mr]},n[A1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[gn,Vl,Lo]},n[j1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[gn,Xl]},n[z1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Lo]},n[O1]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[Bn,rr]},n[P1]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[Bn]},n[_1]={textureFormat:Rr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[gn]},n[Q1]={textureFormat:Rr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[mr]},n[D1]={textureFormat:Rr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Lo]},n[$1]={textureFormat:Rr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Hr]},n[q1]={textureFormat:Rr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[wi]},n[ta]={textureFormat:Rr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Li]},n[ea]={textureFormat:Rr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Wr]},n[na]={textureFormat:Pr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Hr,Wr]},n[ra]={textureFormat:Pr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Wr]},n[ia]={textureFormat:Pr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Bn]},n[sa]={textureFormat:pl,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[aa]},n[oa]={textureFormat:pl,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[ca]},Object.keys(n).forEach(function(r){const m=n[r];m.bytesPerElementMap={},m.bytesPerElement.forEach(function(y,I){const F=m.type[I];m.bytesPerElementMap[F]=y})}),Fo=n}return Fo[o]}function da(o,n){const r=Ci(o);if(!r)throw"unknown internal format";const m=r.bytesPerElementMap[n];if(m===void 0)throw"unknown internal format";return m}function Qr(o){const n=Ci(o);if(!n)throw"unknown internal format";return{format:n.textureFormat,type:n.type[0]}}function Rl(o){return(o&o-1)===0}function ha(o,n,r,m){if(!zr(o))return Rl(n)&&Rl(r);const y=Ci(m);if(!y)throw"unknown internal format";return y.colorRenderable&&y.textureFilterable}function fa(o){const n=Ci(o);if(!n)throw"unknown internal format";return n.textureFilterable}function ma(o,n,r){return Or(n)?Wo(n):r||gn}function Ni(o,n,r,m,y){if(y%1!==0)throw"can't guess dimensions";if(!r&&!m){const I=Math.sqrt(y/(n===fr?6:1));I%1===0?(r=I,m=I):(r=y,m=1)}else if(m){if(!r&&(r=y/m,r%1))throw"can't guess dimensions"}else if(m=y/r,m%1)throw"can't guess dimensions";return{width:r,height:m}}function kr(o,n){n.colorspaceConversion!==void 0&&o.pixelStorei(i1,n.colorspaceConversion),n.premultiplyAlpha!==void 0&&o.pixelStorei(o1,n.premultiplyAlpha),n.flipY!==void 0&&o.pixelStorei(s1,n.flipY)}function xl(o){o.pixelStorei(wo,4),zr(o)&&(o.pixelStorei(yl,0),o.pixelStorei(gl,0),o.pixelStorei(Zl,0),o.pixelStorei(vl,0),o.pixelStorei(Gl,0))}function pa(o,n,r,m){m.minMag&&(r.call(o,n,Yo,m.minMag),r.call(o,n,To,m.minMag)),m.min&&r.call(o,n,Yo,m.min),m.mag&&r.call(o,n,To,m.mag),m.wrap&&(r.call(o,n,Yi,m.wrap),r.call(o,n,Ti,m.wrap),(n===Xr||V2(o,n))&&r.call(o,n,bl,m.wrap)),m.wrapR&&r.call(o,n,bl,m.wrapR),m.wrapS&&r.call(o,n,Yi,m.wrapS),m.wrapT&&r.call(o,n,Ti,m.wrapT),m.minLod&&r.call(o,n,t1,m.minLod),m.maxLod&&r.call(o,n,e1,m.maxLod),m.baseLevel&&r.call(o,n,n1,m.baseLevel),m.maxLevel&&r.call(o,n,r1,m.maxLevel)}function Il(o,n,r){const m=r.target||hr;o.bindTexture(m,n),pa(o,m,o.texParameteri,r)}function ba(o){return o=o||dr.textureColor,Or(o)?o:new Uint8Array([o[0]*255,o[1]*255,o[2]*255,o[3]*255])}function Ho(o,n,r,m,y,I){r=r||dr.textureOptions,I=I||Gn;const F=r.target||hr;if(m=m||r.width,y=y||r.height,o.bindTexture(F,n),ha(o,m,y,I))o.generateMipmap(F);else{const Y=fa(I)?P2:O2;o.texParameteri(F,Yo,Y),o.texParameteri(F,To,Y),o.texParameteri(F,Yi,Si),o.texParameteri(F,Ti,Si)}}function Dr(o){return o.auto===!0||o.auto===void 0&&o.level===void 0}function Co(o,n){return n=n||{},n.cubeFaceOrder||[So,_2,Q2,D2,$2,q2]}function No(o,n){const m=Co(o,n).map(function(y,I){return{face:y,ndx:I}});return m.sort(function(y,I){return y.face-I.face}),m}function Sl(o,n,r,m){m=m||dr.textureOptions;const y=m.target||hr,I=m.level||0;let F=r.width,Y=r.height;const k=m.internalFormat||m.format||Gn,et=Qr(k),O=m.format||et.format,st=m.type||et.type;if(kr(o,m),o.bindTexture(y,n),y===fr){const xt=r.width,Vt=r.height;let dt,ht;if(xt/6===Vt)dt=Vt,ht=[0,0,1,0,2,0,3,0,4,0,5,0];else if(Vt/6===xt)dt=xt,ht=[0,0,0,1,0,2,0,3,0,4,0,5];else if(xt/3===Vt/2)dt=xt/3,ht=[0,0,1,0,2,0,0,1,1,1,2,1];else if(xt/2===Vt/3)dt=xt/2,ht=[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 Ht=dl();Ht?(Ht.canvas.width=dt,Ht.canvas.height=dt,F=dt,Y=dt,No(o,m).forEach(function(Lt){const At=ht[Lt.ndx*2+0]*dt,_=ht[Lt.ndx*2+1]*dt;Ht.drawImage(r,At,_,dt,dt,0,0,dt,dt),o.texImage2D(Lt.face,I,k,O,st,Ht.canvas)}),Ht.canvas.width=1,Ht.canvas.height=1):typeof createImageBitmap<"u"&&(F=dt,Y=dt,No(o,m).forEach(function(Lt){const At=ht[Lt.ndx*2+0]*dt,_=ht[Lt.ndx*2+1]*dt;o.texImage2D(Lt.face,I,k,dt,dt,0,O,st,null),createImageBitmap(r,At,_,dt,dt,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then(function(Ee){kr(o,m),o.bindTexture(y,n),o.texImage2D(Lt.face,I,k,O,st,Ee),Dr(m)&&Ho(o,n,m,F,Y,k)})}))}else if(y===Xr||y===Vr){const xt=Math.min(r.width,r.height),Vt=Math.max(r.width,r.height),dt=Vt/xt;if(dt%1!==0)throw"can not compute 3D dimensions of element";const ht=r.width===Vt?1:0,Ht=r.height===Vt?1:0;o.pixelStorei(wo,1),o.pixelStorei(yl,r.width),o.pixelStorei(gl,0),o.pixelStorei(Gl,0),o.texImage3D(y,I,k,xt,xt,xt,0,O,st,null);for(let Lt=0;Lt<dt;++Lt){const At=Lt*xt*ht,_=Lt*xt*Ht;o.pixelStorei(Zl,At),o.pixelStorei(vl,_),o.texSubImage3D(y,I,0,0,Lt,xt,xt,1,O,st,r)}xl(o)}else o.texImage2D(y,I,k,O,st,r);Dr(m)&&Ho(o,n,m,F,Y,k),Il(o,n,m)}function $r(){}function ya(o){if(typeof document<"u"){const n=document.createElement("a");return n.href=o,n.hostname===location.hostname&&n.port===location.port&&n.protocol===location.protocol}else{const n=new URL(location.href).origin;return new URL(o,location.href).origin===n}}function ga(o,n){return n===void 0&&!ya(o)?"anonymous":n}function Za(o,n,r){r=r||$r;let m;if(n=n!==void 0?n:dr.crossOrigin,n=ga(o,n),typeof Image<"u"){m=new Image,n!==void 0&&(m.crossOrigin=n);const y=function(){m.removeEventListener("error",I),m.removeEventListener("load",F),m=null},I=function(){const k="couldn't load image: "+o;nl(k),r(k,m),y()},F=function(){r(null,m),y()};return m.addEventListener("error",I),m.addEventListener("load",F),m.src=o,m}else if(typeof ImageBitmap<"u"){let y,I;const F=function(){r(y,I)},Y={};n&&(Y.mode="cors"),fetch(o,Y).then(function(k){if(!k.ok)throw k;return k.blob()}).then(function(k){return createImageBitmap(k,{premultiplyAlpha:"none",colorSpaceConversion:"none"})}).then(function(k){I=k,setTimeout(F)}).catch(function(k){y=k,setTimeout(F)}),m=null}return m}function Yl(o){return typeof ImageBitmap<"u"&&o instanceof ImageBitmap||typeof ImageData<"u"&&o instanceof ImageData||typeof HTMLElement<"u"&&o instanceof HTMLElement}function Jo(o,n,r){return Yl(o)?(setTimeout(function(){r(null,o)}),o):Za(o,n,r)}function ko(o,n,r){r=r||dr.textureOptions;const m=r.target||hr;if(o.bindTexture(m,n),r.color===!1)return;const y=ba(r.color);if(m===fr)for(let I=0;I<6;++I)o.texImage2D(So+I,0,Gn,1,1,0,Gn,gn,y);else m===Xr||m===Vr?o.texImage3D(m,0,Gn,1,1,1,0,Gn,gn,y):o.texImage2D(m,0,Gn,1,1,0,Gn,gn,y)}function va(o,n,r,m){return m=m||$r,r=r||dr.textureOptions,ko(o,n,r),r=Object.assign({},r),Jo(r.src,r.crossOrigin,function(I,F){I?m(I,n,F):(Sl(o,n,F,r),m(null,n,F))})}function Ga(o,n,r,m){m=m||$r;const y=r.src;if(y.length!==6)throw"there must be 6 urls for a cubemap";const I=r.level||0,F=r.internalFormat||r.format||Gn,Y=Qr(F),k=r.format||Y.format,et=r.type||gn,O=r.target||hr;if(O!==fr)throw"target must be TEXTURE_CUBE_MAP";ko(o,n,r),r=Object.assign({},r);let st=6;const xt=[],Vt=Co(o,r);let dt;function ht(Ht){return function(Lt,At){--st,Lt?xt.push(Lt):At.width!==At.height?xt.push("cubemap face img is not a square: "+At.src):(kr(o,r),o.bindTexture(O,n),st===5?Co().forEach(function(_){o.texImage2D(_,I,F,k,et,At)}):o.texImage2D(Ht,I,F,k,et,At),Dr(r)&&o.generateMipmap(O)),st===0&&m(xt.length?xt:void 0,n,dt)}}dt=y.map(function(Ht,Lt){return Jo(Ht,r.crossOrigin,ht(Vt[Lt]))})}function Xa(o,n,r,m){m=m||$r;const y=r.src,I=r.internalFormat||r.format||Gn,F=Qr(I),Y=r.format||F.format,k=r.type||gn,et=r.target||Vr;if(et!==Xr&&et!==Vr)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";ko(o,n,r),r=Object.assign({},r);let O=y.length;const st=[];let xt;const Vt=r.level||0;let dt=r.width,ht=r.height;const Ht=y.length;let Lt=!0;function At(_){return function(Ee,an){if(--O,Ee)st.push(Ee);else{if(kr(o,r),o.bindTexture(et,n),Lt){Lt=!1,dt=r.width||an.width,ht=r.height||an.height,o.texImage3D(et,Vt,I,dt,ht,Ht,0,Y,k,null);for(let We=0;We<Ht;++We)o.texSubImage3D(et,Vt,0,0,We,dt,ht,1,Y,k,an)}else{let We=an,$t;(an.width!==dt||an.height!==ht)&&($t=dl(),We=$t.canvas,$t.canvas.width=dt,$t.canvas.height=ht,$t.drawImage(an,0,0,dt,ht)),o.texSubImage3D(et,Vt,0,0,_,dt,ht,1,Y,k,We),$t&&We===$t.canvas&&($t.canvas.width=0,$t.canvas.height=0)}Dr(r)&&o.generateMipmap(et)}O===0&&m(st.length?st:void 0,n,xt)}}xt=y.map(function(_,Ee){return Jo(_,r.crossOrigin,At(Ee))})}function Va(o,n,r,m){m=m||dr.textureOptions;const y=m.target||hr;o.bindTexture(y,n);let I=m.width,F=m.height,Y=m.depth;const k=m.level||0,et=m.internalFormat||m.format||Gn,O=Qr(et),st=m.format||O.format,xt=m.type||ma(o,r,O.type);if(Or(r))r instanceof Uint8ClampedArray&&(r=new Uint8Array(r.buffer));else{const Ht=el(xt);r=new Ht(r)}const Vt=da(et,xt),dt=r.byteLength/Vt;if(dt%1)throw"length wrong size for format: "+al(o,st);let ht;if(y===Xr||y===Vr)if(!I&&!F&&!Y){const Ht=Math.cbrt(dt);if(Ht%1!==0)throw"can't guess cube size of array of numElements: "+dt;I=Ht,F=Ht,Y=Ht}else I&&(!F||!Y)?(ht=Ni(o,y,F,Y,dt/I),F=ht.width,Y=ht.height):F&&(!I||!Y)?(ht=Ni(o,y,I,Y,dt/F),I=ht.width,Y=ht.height):(ht=Ni(o,y,I,F,dt/Y),I=ht.width,F=ht.height);else ht=Ni(o,y,I,F,dt),I=ht.width,F=ht.height;if(xl(o),o.pixelStorei(wo,m.unpackAlignment||1),kr(o,m),y===fr){const Ht=Vt/r.BYTES_PER_ELEMENT,Lt=dt/6*Ht;No(o,m).forEach(At=>{const _=Lt*At.ndx,Ee=r.subarray(_,_+Lt);o.texImage2D(At.face,k,et,I,F,0,st,xt,Ee)})}else y===Xr||y===Vr?o.texImage3D(y,k,et,I,F,Y,0,st,xt,r):o.texImage2D(y,k,et,I,F,0,st,xt,r);return{width:I,height:F,depth:Y,type:xt}}function Wa(o,n,r){const m=r.target||hr;o.bindTexture(m,n);const y=r.level||0,I=r.internalFormat||r.format||Gn,F=Qr(I),Y=r.format||F.format,k=r.type||F.type;if(kr(o,r),m===fr)for(let et=0;et<6;++et)o.texImage2D(So+et,y,I,r.width,r.height,0,Y,k,null);else m===Xr||m===Vr?o.texImage3D(m,y,I,r.width,r.height,r.depth,0,Y,k,null):o.texImage2D(m,y,I,r.width,r.height,0,Y,k,null)}function Tl(o,n,r){r=r||$r,n=n||dr.textureOptions;const m=o.createTexture(),y=n.target||hr;let I=n.width||1,F=n.height||1;const Y=n.internalFormat||Gn;o.bindTexture(y,m),y===fr&&(o.texParameteri(y,Yi,Si),o.texParameteri(y,Ti,Si));let k=n.src;if(k)if(typeof k=="function"&&(k=k(o,n)),typeof k=="string")va(o,m,n,r);else if(Or(k)||Array.isArray(k)&&(typeof k[0]=="number"||Array.isArray(k[0])||Or(k[0]))){const et=Va(o,m,k,n);I=et.width,F=et.height}else Array.isArray(k)&&(typeof k[0]=="string"||Yl(k[0]))?y===fr?Ga(o,m,n,r):Xa(o,m,n,r):(Sl(o,m,k,n),I=k.width,F=k.height);else Wa(o,m,n);return Dr(n)&&Ho(o,m,n,I,F,Y),Il(o,m,n),m}const Eo=nl;function wl(o){return typeof document<"u"&&document.getElementById?document.getElementById(o):null}const Ji=33984,ki=34962,Ra=34963,xa=35713,Ia=35714,Sa=35632,Ya=35633,Ta=35981,Ll=35718,wa=35721,La=35971,Fa=35382,Ha=35396,Ca=35398,Na=35392,Ja=35395,Ei=5126,Fl=35664,Hl=35665,Cl=35666,Ko=5124,Nl=35667,Jl=35668,kl=35669,El=35670,Kl=35671,Ul=35672,Ml=35673,Bl=35674,Al=35675,jl=35676,ka=35678,Ea=35680,Ka=35679,Ua=35682,Ma=35685,Ba=35686,Aa=35687,ja=35688,za=35689,Oa=35690,Pa=36289,_a=36292,Qa=36293,Uo=5125,zl=36294,Ol=36295,Pl=36296,Da=36298,$a=36299,qa=36300,t0=36303,e0=36306,n0=36307,r0=36308,i0=36311,Ki=3553,Ui=34067,Mo=32879,Mi=35866,be={};function _l(o,n){return be[n].bindPoint}function o0(o,n){return function(r){o.uniform1f(n,r)}}function s0(o,n){return function(r){o.uniform1fv(n,r)}}function l0(o,n){return function(r){o.uniform2fv(n,r)}}function u0(o,n){return function(r){o.uniform3fv(n,r)}}function c0(o,n){return function(r){o.uniform4fv(n,r)}}function Ql(o,n){return function(r){o.uniform1i(n,r)}}function Dl(o,n){return function(r){o.uniform1iv(n,r)}}function $l(o,n){return function(r){o.uniform2iv(n,r)}}function ql(o,n){return function(r){o.uniform3iv(n,r)}}function tu(o,n){return function(r){o.uniform4iv(n,r)}}function a0(o,n){return function(r){o.uniform1ui(n,r)}}function d0(o,n){return function(r){o.uniform1uiv(n,r)}}function h0(o,n){return function(r){o.uniform2uiv(n,r)}}function f0(o,n){return function(r){o.uniform3uiv(n,r)}}function m0(o,n){return function(r){o.uniform4uiv(n,r)}}function p0(o,n){return function(r){o.uniformMatrix2fv(n,!1,r)}}function b0(o,n){return function(r){o.uniformMatrix3fv(n,!1,r)}}function y0(o,n){return function(r){o.uniformMatrix4fv(n,!1,r)}}function g0(o,n){return function(r){o.uniformMatrix2x3fv(n,!1,r)}}function Z0(o,n){return function(r){o.uniformMatrix3x2fv(n,!1,r)}}function v0(o,n){return function(r){o.uniformMatrix2x4fv(n,!1,r)}}function G0(o,n){return function(r){o.uniformMatrix4x2fv(n,!1,r)}}function X0(o,n){return function(r){o.uniformMatrix3x4fv(n,!1,r)}}function V0(o,n){return function(r){o.uniformMatrix4x3fv(n,!1,r)}}function Pn(o,n,r,m){const y=_l(o,n);return zr(o)?function(I){let F,Y;Ro(o,I)?(F=I,Y=null):(F=I.texture,Y=I.sampler),o.uniform1i(m,r),o.activeTexture(Ji+r),o.bindTexture(y,F),o.bindSampler(r,Y)}:function(I){o.uniform1i(m,r),o.activeTexture(Ji+r),o.bindTexture(y,I)}}function _n(o,n,r,m,y){const I=_l(o,n),F=new Int32Array(y);for(let Y=0;Y<y;++Y)F[Y]=r+Y;return zr(o)?function(Y){o.uniform1iv(m,F),Y.forEach(function(k,et){o.activeTexture(Ji+F[et]);let O,st;Ro(o,k)?(O=k,st=null):(O=k.texture,st=k.sampler),o.bindSampler(r,st),o.bindTexture(I,O)})}:function(Y){o.uniform1iv(m,F),Y.forEach(function(k,et){o.activeTexture(Ji+F[et]),o.bindTexture(I,k)})}}be[Ei]={Type:Float32Array,size:4,setter:o0,arraySetter:s0},be[Fl]={Type:Float32Array,size:8,setter:l0,cols:2},be[Hl]={Type:Float32Array,size:12,setter:u0,cols:3},be[Cl]={Type:Float32Array,size:16,setter:c0,cols:4},be[Ko]={Type:Int32Array,size:4,setter:Ql,arraySetter:Dl},be[Nl]={Type:Int32Array,size:8,setter:$l,cols:2},be[Jl]={Type:Int32Array,size:12,setter:ql,cols:3},be[kl]={Type:Int32Array,size:16,setter:tu,cols:4},be[Uo]={Type:Uint32Array,size:4,setter:a0,arraySetter:d0},be[zl]={Type:Uint32Array,size:8,setter:h0,cols:2},be[Ol]={Type:Uint32Array,size:12,setter:f0,cols:3},be[Pl]={Type:Uint32Array,size:16,setter:m0,cols:4},be[El]={Type:Uint32Array,size:4,setter:Ql,arraySetter:Dl},be[Kl]={Type:Uint32Array,size:8,setter:$l,cols:2},be[Ul]={Type:Uint32Array,size:12,setter:ql,cols:3},be[Ml]={Type:Uint32Array,size:16,setter:tu,cols:4},be[Bl]={Type:Float32Array,size:32,setter:p0,rows:2,cols:2},be[Al]={Type:Float32Array,size:48,setter:b0,rows:3,cols:3},be[jl]={Type:Float32Array,size:64,setter:y0,rows:4,cols:4},be[Ma]={Type:Float32Array,size:32,setter:g0,rows:2,cols:3},be[Ba]={Type:Float32Array,size:32,setter:v0,rows:2,cols:4},be[Aa]={Type:Float32Array,size:48,setter:Z0,rows:3,cols:2},be[ja]={Type:Float32Array,size:48,setter:X0,rows:3,cols:4},be[za]={Type:Float32Array,size:64,setter:G0,rows:4,cols:2},be[Oa]={Type:Float32Array,size:64,setter:V0,rows:4,cols:3},be[ka]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Ki},be[Ea]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Ui},be[Ka]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Mo},be[Ua]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Ki},be[Pa]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Mi},be[_a]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Mi},be[Qa]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Ui},be[Da]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Ki},be[$a]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Mo},be[qa]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Ui},be[t0]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Mi},be[e0]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Ki},be[n0]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Mo},be[r0]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Ui},be[i0]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Mi};function Bi(o,n){return function(r){if(r.value)switch(o.disableVertexAttribArray(n),r.value.length){case 4:o.vertexAttrib4fv(n,r.value);break;case 3:o.vertexAttrib3fv(n,r.value);break;case 2:o.vertexAttrib2fv(n,r.value);break;case 1:o.vertexAttrib1fv(n,r.value);break;default:throw new Error("the length of a float constant value must be between 1 and 4!")}else o.bindBuffer(ki,r.buffer),o.enableVertexAttribArray(n),o.vertexAttribPointer(n,r.numComponents||r.size,r.type||Ei,r.normalize||!1,r.stride||0,r.offset||0),o.vertexAttribDivisor&&o.vertexAttribDivisor(n,r.divisor||0)}}function pr(o,n){return function(r){if(r.value)if(o.disableVertexAttribArray(n),r.value.length===4)o.vertexAttrib4iv(n,r.value);else throw new Error("The length of an integer constant value must be 4!");else o.bindBuffer(ki,r.buffer),o.enableVertexAttribArray(n),o.vertexAttribIPointer(n,r.numComponents||r.size,r.type||Ko,r.stride||0,r.offset||0),o.vertexAttribDivisor&&o.vertexAttribDivisor(n,r.divisor||0)}}function Ai(o,n){return function(r){if(r.value)if(o.disableVertexAttribArray(n),r.value.length===4)o.vertexAttrib4uiv(n,r.value);else throw new Error("The length of an unsigned integer constant value must be 4!");else o.bindBuffer(ki,r.buffer),o.enableVertexAttribArray(n),o.vertexAttribIPointer(n,r.numComponents||r.size,r.type||Uo,r.stride||0,r.offset||0),o.vertexAttribDivisor&&o.vertexAttribDivisor(n,r.divisor||0)}}function Bo(o,n,r){const m=r.size,y=r.count;return function(I){o.bindBuffer(ki,I.buffer);const F=I.size||I.numComponents||m,Y=F/y,k=I.type||Ei,O=be[k].size*F,st=I.normalize||!1,xt=I.offset||0,Vt=O/y;for(let dt=0;dt<y;++dt)o.enableVertexAttribArray(n+dt),o.vertexAttribPointer(n+dt,Y,k,st,O,xt+Vt*dt),o.vertexAttribDivisor&&o.vertexAttribDivisor(n+dt,I.divisor||0)}}const Ln={};Ln[Ei]={size:4,setter:Bi},Ln[Fl]={size:8,setter:Bi},Ln[Hl]={size:12,setter:Bi},Ln[Cl]={size:16,setter:Bi},Ln[Ko]={size:4,setter:pr},Ln[Nl]={size:8,setter:pr},Ln[Jl]={size:12,setter:pr},Ln[kl]={size:16,setter:pr},Ln[Uo]={size:4,setter:Ai},Ln[zl]={size:8,setter:Ai},Ln[Ol]={size:12,setter:Ai},Ln[Pl]={size:16,setter:Ai},Ln[El]={size:4,setter:pr},Ln[Kl]={size:8,setter:pr},Ln[Ul]={size:12,setter:pr},Ln[Ml]={size:16,setter:pr},Ln[Bl]={size:4,setter:Bo,count:2},Ln[Al]={size:9,setter:Bo,count:3},Ln[jl]={size:16,setter:Bo,count:4};const W0=/ERROR:\s*\d+:(\d+)/gi;function R0(o,n="",r=0){const m=[...n.matchAll(W0)],y=new Map(m.map((I,F)=>{const Y=parseInt(I[1]),k=m[F+1],et=k?k.index:n.length,O=n.substring(I.index,et);return[Y-1,O]}));return o.split(`
|
|
126
|
-
`).map((
|
|
127
|
-
|
|
128
|
-
^^^ ${
|
|
129
|
-
`)}const
|
|
130
|
-
${
|
|
131
|
-
`)}`)}),null}function
|
|
132
|
-
Error compiling ${
|
|
133
|
-
${
|
|
134
|
-
`)}`}}function
|
|
135
|
-
`;return n}run(n){var
|
|
124
|
+
see: http://github.com/greggman/twgl.js for details */const uo=5120,zr=5121,ao=5122,ho=5123,fo=5124,mo=5125,po=5126,v1=32819,G1=32820,X1=33635,W1=5131,V1=33640,R1=35899,x1=35902,I1=36269,S1=34042,Vs={};{const i=Vs;i[uo]=Int8Array,i[zr]=Uint8Array,i[ao]=Int16Array,i[ho]=Uint16Array,i[fo]=Int32Array,i[mo]=Uint32Array,i[po]=Float32Array,i[v1]=Uint16Array,i[G1]=Uint16Array,i[X1]=Uint16Array,i[W1]=Uint16Array,i[V1]=Uint32Array,i[R1]=Uint32Array,i[x1]=Uint32Array,i[I1]=Uint32Array,i[S1]=Uint32Array}function bo(i){if(i instanceof Int8Array)return uo;if(i instanceof Uint8Array||i instanceof Uint8ClampedArray)return zr;if(i instanceof Int16Array)return ao;if(i instanceof Uint16Array)return ho;if(i instanceof Int32Array)return fo;if(i instanceof Uint32Array)return mo;if(i instanceof Float32Array)return po;throw new Error("unsupported typed array type")}function Rs(i){if(i===Int8Array)return uo;if(i===Uint8Array||i===Uint8ClampedArray)return zr;if(i===Int16Array)return ao;if(i===Uint16Array)return ho;if(i===Int32Array)return fo;if(i===Uint32Array)return mo;if(i===Float32Array)return po;throw new Error("unsupported typed array type")}function xs(i){const n=Vs[i];if(!n)throw new Error("unknown gl type");return n}const Si=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 Is(...i){console.error(...i)}const Ss=new Map;function Ti(i,n){if(!i||typeof i!="object")return!1;let r=Ss.get(n);r||(r=new WeakMap,Ss.set(n,r));let p=r.get(i);if(p===void 0){const G=Object.prototype.toString.call(i);p=G.substring(8,G.length-1)===n,r.set(i,p)}return p}function T1(i,n){return typeof WebGLBuffer<"u"&&Ti(n,"WebGLBuffer")}function w1(i,n){return typeof WebGLRenderbuffer<"u"&&Ti(n,"WebGLRenderbuffer")}function yo(i,n){return typeof WebGLTexture<"u"&&Ti(n,"WebGLTexture")}function F1(i,n){return typeof WebGLSampler<"u"&&Ti(n,"WebGLSampler")}const Ts=35044,Xr=34962,Y1=34963,L1=34660,C1=5120,H1=5121,N1=5122,J1=5123,E1=5124,k1=5125,ws=5126,Fs={attribPrefix:""};function U1(i,n,r,p,G){i.bindBuffer(n,r),i.bufferData(n,p,G||Ts)}function Ys(i,n,r,p){if(T1(i,n))return n;r=r||Xr;const G=i.createBuffer();return U1(i,r,G,n,p),G}function Ls(i){return i==="indices"}function B1(i){return i===Int8Array||i===Uint8Array}function A1(i){return i.length?i:i.data}const M1=/coord|texture/i,K1=/color|colour/i;function j1(i,n){let r;if(M1.test(i)?r=2:K1.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 O1(i,n,r){return i.numComponents||i.size||j1(n,r||A1(i).length)}function Cs(i,n){if(Si(i))return i;if(Si(i.data))return i.data;Array.isArray(i)&&(i={data:i});let r=i.type?go(i.type):void 0;return r||(Ls(n)?r=Uint16Array:r=Float32Array),new r(i.data)}function z1(i){return typeof i=="number"?i:i?Rs(i):ws}function go(i){return typeof i=="number"?xs(i):i||Float32Array}function P1(i,n){return{buffer:n.buffer,numValues:2*3*4,type:z1(n.type),arrayType:go(n.type)}}function _1(i,n){const r=n.data||n,p=go(n.type),G=r*p.BYTES_PER_ELEMENT,S=i.createBuffer();return i.bindBuffer(Xr,S),i.bufferData(Xr,G,n.drawType||Ts),{buffer:S,numValues:r,type:Rs(p),arrayType:p}}function Q1(i,n,r){const p=Cs(n,r);return{arrayType:p.constructor,buffer:Ys(i,p,void 0,n.drawType),type:bo(p),numValues:0}}function D1(i,n){const r={};return Object.keys(n).forEach(function(p){if(!Ls(p)){const G=n[p],S=G.attrib||G.name||G.attribName||Fs.attribPrefix+p;if(G.value){if(!Array.isArray(G.value)&&!Si(G.value))throw new Error("array.value is not array or typedarray");r[S]={value:G.value}}else{let H;G.buffer&&G.buffer instanceof WebGLBuffer?H=P1:typeof G=="number"||typeof G.data=="number"?H=_1:H=Q1;const{buffer:w,type:E,numValues:et,arrayType:ct}=H(i,G,p),dt=G.normalize!==void 0?G.normalize:B1(ct),Ft=O1(G,p,et);r[S]={buffer:w,numComponents:Ft,type:E,normalize:dt,stride:G.stride||0,offset:G.offset||0,divisor:G.divisor===void 0?void 0:G.divisor,drawType:G.drawType}}}}),i.bindBuffer(Xr,null),r}function $1(i,n){return n===C1||n===H1?1:n===N1||n===J1?2:n===E1||n===k1||n===ws?4:0}const Zo=["position","positions","a_position"];function q1(i,n){let r,p;for(p=0;p<Zo.length&&(r=Zo[p],!(r in n||(r=Fs.attribPrefix+r,r in n)));++p);p===Zo.length&&(r=Object.keys(n)[0]);const G=n[r];if(!G.buffer)return 1;i.bindBuffer(Xr,G.buffer);const S=i.getBufferParameter(Xr,L1);i.bindBuffer(Xr,null);const H=$1(i,G.type),w=S/H,E=G.numComponents||G.size,et=w/E;if(et%1!==0)throw new Error(`numComponents ${E} not correct for length ${length}`);return et}function tc(i,n,r){const p=D1(i,n),G=Object.assign({},r||{});G.attribs=Object.assign({},r?r.attribs:{},p);const S=n.indices;if(S){const H=Cs(S,"indices");G.indices=Ys(i,H,Y1),G.numElements=H.length,G.elementType=bo(H)}else G.numElements||(G.numElements=q1(i,G.attribs));return G}function Pr(i){return!!i.texStorage2D}const Hs=function(){const i={},n={};function r(p){const G=p.constructor.name;if(!i[G]){for(const S in p)if(typeof p[S]=="number"){const H=n[p[S]];n[p[S]]=H?`${H} | ${S}`:S}i[G]=!0}}return function(G,S){return r(G),n[S]||(typeof S=="number"?`0x${S.toString(16)}`:S)}}(),ar={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},_r=Si,Ns=function(){let i;return function(){return i=i||(typeof document<"u"&&document.createElement?document.createElement("canvas").getContext("2d"):null),i}}(),Js=6406,er=6407,Gn=6408,Es=6409,ks=6410,Qr=6402,Us=34041,wi=33071,ec=9728,nc=9729,dr=3553,hr=34067,Wr=32879,Vr=35866,vo=34069,rc=34070,ic=34071,oc=34072,sc=34073,lc=34074,Go=10241,Xo=10240,Fi=10242,Yi=10243,Bs=32882,cc=33082,uc=33083,ac=33084,dc=33085,Wo=3317,As=3314,Ms=32878,Ks=3316,js=3315,Os=32877,hc=37443,fc=37441,mc=37440,pc=33321,bc=36756,yc=33325,gc=33326,Zc=33330,vc=33329,Gc=33338,Xc=33337,Wc=33340,Vc=33339,Rc=33323,xc=36757,Ic=33327,Sc=33328,Tc=33336,wc=33335,Fc=33332,Yc=33331,Lc=33334,Cc=33333,Hc=32849,Nc=35905,Jc=36194,Ec=36758,kc=35898,Uc=35901,Bc=34843,Ac=34837,Mc=36221,Kc=36239,jc=36215,Oc=36233,zc=36209,Pc=36227,_c=32856,Qc=35907,Dc=36759,$c=32855,qc=32854,tu=32857,eu=34842,nu=34836,ru=36220,iu=36238,ou=36975,su=36214,lu=36232,cu=36226,uu=36208,au=33189,du=33190,hu=36012,fu=36013,mu=35056,fr=5120,gn=5121,Li=5122,Cr=5123,Ci=5124,Rr=5125,Mn=5126,zs=32819,Ps=32820,_s=33635,qn=5131,Dr=36193,Vo=33640,pu=35899,bu=35902,yu=36269,gu=34042,Hi=33319,Hr=33320,Ni=6403,Nr=36244,Jr=36248,xr=36249;let Ro;function Ji(i){if(!Ro){const n={};n[Js]={textureFormat:Js,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[gn,qn,Dr,Mn]},n[Es]={textureFormat:Es,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[gn,qn,Dr,Mn]},n[ks]={textureFormat:ks,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[gn,qn,Dr,Mn]},n[er]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[gn,qn,Dr,Mn,_s]},n[Gn]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[gn,qn,Dr,Mn,zs,Ps]},n[Qr]={textureFormat:Qr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Rr,Cr]},n[pc]={textureFormat:Ni,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[gn]},n[bc]={textureFormat:Ni,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[fr]},n[yc]={textureFormat:Ni,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[Mn,qn]},n[gc]={textureFormat:Ni,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[Mn]},n[Zc]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[gn]},n[vc]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[fr]},n[Fc]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Cr]},n[Yc]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Li]},n[Lc]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Rr]},n[Cc]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Ci]},n[Rc]={textureFormat:Hi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[gn]},n[xc]={textureFormat:Hi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[fr]},n[Ic]={textureFormat:Hi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[Mn,qn]},n[Sc]={textureFormat:Hi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[Mn]},n[Tc]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[gn]},n[wc]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[fr]},n[Gc]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Cr]},n[Xc]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Li]},n[Wc]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Rr]},n[Vc]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Ci]},n[Hc]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[gn]},n[Nc]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[gn]},n[Jc]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[gn,_s]},n[Ec]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[fr]},n[kc]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Mn,qn,pu]},n[Uc]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Mn,qn,bu]},n[Bc]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[Mn,qn]},n[Ac]={textureFormat:er,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Mn]},n[Mc]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[gn]},n[Kc]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[fr]},n[jc]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Cr]},n[Oc]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Li]},n[zc]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Rr]},n[Pc]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Ci]},n[_c]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[gn]},n[Qc]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[gn]},n[Dc]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[fr]},n[$c]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[gn,Ps,Vo]},n[qc]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[gn,zs]},n[tu]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Vo]},n[eu]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[Mn,qn]},n[nu]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[Mn]},n[ru]={textureFormat:xr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[gn]},n[iu]={textureFormat:xr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[fr]},n[ou]={textureFormat:xr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Vo]},n[su]={textureFormat:xr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Cr]},n[lu]={textureFormat:xr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Li]},n[cu]={textureFormat:xr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Ci]},n[uu]={textureFormat:xr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Rr]},n[au]={textureFormat:Qr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Cr,Rr]},n[du]={textureFormat:Qr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Rr]},n[hu]={textureFormat:Qr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Mn]},n[mu]={textureFormat:Us,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[gu]},n[fu]={textureFormat:Us,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[yu]},Object.keys(n).forEach(function(r){const p=n[r];p.bytesPerElementMap={},p.bytesPerElement.forEach(function(G,S){const H=p.type[S];p.bytesPerElementMap[H]=G})}),Ro=n}return Ro[i]}function Zu(i,n){const r=Ji(i);if(!r)throw"unknown internal format";const p=r.bytesPerElementMap[n];if(p===void 0)throw"unknown internal format";return p}function $r(i){const n=Ji(i);if(!n)throw"unknown internal format";return{format:n.textureFormat,type:n.type[0]}}function Qs(i){return(i&i-1)===0}function vu(i,n,r,p){if(!Pr(i))return Qs(n)&&Qs(r);const G=Ji(p);if(!G)throw"unknown internal format";return G.colorRenderable&&G.textureFilterable}function Gu(i){const n=Ji(i);if(!n)throw"unknown internal format";return n.textureFilterable}function Xu(i,n,r){return _r(n)?bo(n):r||gn}function Ei(i,n,r,p,G){if(G%1!==0)throw"can't guess dimensions";if(!r&&!p){const S=Math.sqrt(G/(n===hr?6:1));S%1===0?(r=S,p=S):(r=G,p=1)}else if(p){if(!r&&(r=G/p,r%1))throw"can't guess dimensions"}else if(p=G/r,p%1)throw"can't guess dimensions";return{width:r,height:p}}function Er(i,n){n.colorspaceConversion!==void 0&&i.pixelStorei(hc,n.colorspaceConversion),n.premultiplyAlpha!==void 0&&i.pixelStorei(fc,n.premultiplyAlpha),n.flipY!==void 0&&i.pixelStorei(mc,n.flipY)}function Ds(i){i.pixelStorei(Wo,4),Pr(i)&&(i.pixelStorei(As,0),i.pixelStorei(Ms,0),i.pixelStorei(Ks,0),i.pixelStorei(js,0),i.pixelStorei(Os,0))}function Wu(i,n,r,p){p.minMag&&(r.call(i,n,Go,p.minMag),r.call(i,n,Xo,p.minMag)),p.min&&r.call(i,n,Go,p.min),p.mag&&r.call(i,n,Xo,p.mag),p.wrap&&(r.call(i,n,Fi,p.wrap),r.call(i,n,Yi,p.wrap),(n===Wr||F1(i,n))&&r.call(i,n,Bs,p.wrap)),p.wrapR&&r.call(i,n,Bs,p.wrapR),p.wrapS&&r.call(i,n,Fi,p.wrapS),p.wrapT&&r.call(i,n,Yi,p.wrapT),p.minLod&&r.call(i,n,cc,p.minLod),p.maxLod&&r.call(i,n,uc,p.maxLod),p.baseLevel&&r.call(i,n,ac,p.baseLevel),p.maxLevel&&r.call(i,n,dc,p.maxLevel)}function $s(i,n,r){const p=r.target||dr;i.bindTexture(p,n),Wu(i,p,i.texParameteri,r)}function Vu(i){return i=i||ar.textureColor,_r(i)?i:new Uint8Array([i[0]*255,i[1]*255,i[2]*255,i[3]*255])}function xo(i,n,r,p,G,S){r=r||ar.textureOptions,S=S||Gn;const H=r.target||dr;if(p=p||r.width,G=G||r.height,i.bindTexture(H,n),vu(i,p,G,S))i.generateMipmap(H);else{const w=Gu(S)?nc:ec;i.texParameteri(H,Go,w),i.texParameteri(H,Xo,w),i.texParameteri(H,Fi,wi),i.texParameteri(H,Yi,wi)}}function qr(i){return i.auto===!0||i.auto===void 0&&i.level===void 0}function Io(i,n){return n=n||{},n.cubeFaceOrder||[vo,rc,ic,oc,sc,lc]}function So(i,n){const p=Io(i,n).map(function(G,S){return{face:G,ndx:S}});return p.sort(function(G,S){return G.face-S.face}),p}function qs(i,n,r,p){p=p||ar.textureOptions;const G=p.target||dr,S=p.level||0;let H=r.width,w=r.height;const E=p.internalFormat||p.format||Gn,et=$r(E),ct=p.format||et.format,dt=p.type||et.type;if(Er(i,p),i.bindTexture(G,n),G===hr){const Ft=r.width,Lt=r.height;let at,pt;if(Ft/6===Lt)at=Lt,pt=[0,0,1,0,2,0,3,0,4,0,5,0];else if(Lt/6===Ft)at=Ft,pt=[0,0,0,1,0,2,0,3,0,4,0,5];else if(Ft/3===Lt/2)at=Ft/3,pt=[0,0,1,0,2,0,0,1,1,1,2,1];else if(Ft/2===Lt/3)at=Ft/2,pt=[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 Mt=Ns();Mt?(Mt.canvas.width=at,Mt.canvas.height=at,H=at,w=at,So(i,p).forEach(function(Jt){const qt=pt[Jt.ndx*2+0]*at,P=pt[Jt.ndx*2+1]*at;Mt.drawImage(r,qt,P,at,at,0,0,at,at),i.texImage2D(Jt.face,S,E,ct,dt,Mt.canvas)}),Mt.canvas.width=1,Mt.canvas.height=1):typeof createImageBitmap<"u"&&(H=at,w=at,So(i,p).forEach(function(Jt){const qt=pt[Jt.ndx*2+0]*at,P=pt[Jt.ndx*2+1]*at;i.texImage2D(Jt.face,S,E,at,at,0,ct,dt,null),createImageBitmap(r,qt,P,at,at,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then(function(De){Er(i,p),i.bindTexture(G,n),i.texImage2D(Jt.face,S,E,ct,dt,De),qr(p)&&xo(i,n,p,H,w,E)})}))}else if(G===Wr||G===Vr){const Ft=Math.min(r.width,r.height),Lt=Math.max(r.width,r.height),at=Lt/Ft;if(at%1!==0)throw"can not compute 3D dimensions of element";const pt=r.width===Lt?1:0,Mt=r.height===Lt?1:0;i.pixelStorei(Wo,1),i.pixelStorei(As,r.width),i.pixelStorei(Ms,0),i.pixelStorei(Os,0),i.texImage3D(G,S,E,Ft,Ft,Ft,0,ct,dt,null);for(let Jt=0;Jt<at;++Jt){const qt=Jt*Ft*pt,P=Jt*Ft*Mt;i.pixelStorei(Ks,qt),i.pixelStorei(js,P),i.texSubImage3D(G,S,0,0,Jt,Ft,Ft,1,ct,dt,r)}Ds(i)}else i.texImage2D(G,S,E,ct,dt,r);qr(p)&&xo(i,n,p,H,w,E),$s(i,n,p)}function ti(){}function Ru(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 xu(i,n){return n===void 0&&!Ru(i)?"anonymous":n}function Iu(i,n,r){r=r||ti;let p;if(n=n!==void 0?n:ar.crossOrigin,n=xu(i,n),typeof Image<"u"){p=new Image,n!==void 0&&(p.crossOrigin=n);const G=function(){p.removeEventListener("error",S),p.removeEventListener("load",H),p=null},S=function(){const E="couldn't load image: "+i;Is(E),r(E,p),G()},H=function(){r(null,p),G()};return p.addEventListener("error",S),p.addEventListener("load",H),p.src=i,p}else if(typeof ImageBitmap<"u"){let G,S;const H=function(){r(G,S)},w={};n&&(w.mode="cors"),fetch(i,w).then(function(E){if(!E.ok)throw E;return E.blob()}).then(function(E){return createImageBitmap(E,{premultiplyAlpha:"none",colorSpaceConversion:"none"})}).then(function(E){S=E,setTimeout(H)}).catch(function(E){G=E,setTimeout(H)}),p=null}return p}function tl(i){return typeof ImageBitmap<"u"&&i instanceof ImageBitmap||typeof ImageData<"u"&&i instanceof ImageData||typeof HTMLElement<"u"&&i instanceof HTMLElement}function To(i,n,r){return tl(i)?(setTimeout(function(){r(null,i)}),i):Iu(i,n,r)}function wo(i,n,r){r=r||ar.textureOptions;const p=r.target||dr;if(i.bindTexture(p,n),r.color===!1)return;const G=Vu(r.color);if(p===hr)for(let S=0;S<6;++S)i.texImage2D(vo+S,0,Gn,1,1,0,Gn,gn,G);else p===Wr||p===Vr?i.texImage3D(p,0,Gn,1,1,1,0,Gn,gn,G):i.texImage2D(p,0,Gn,1,1,0,Gn,gn,G)}function Su(i,n,r,p){return p=p||ti,r=r||ar.textureOptions,wo(i,n,r),r=Object.assign({},r),To(r.src,r.crossOrigin,function(S,H){S?p(S,n,H):(qs(i,n,H,r),p(null,n,H))})}function Tu(i,n,r,p){p=p||ti;const G=r.src;if(G.length!==6)throw"there must be 6 urls for a cubemap";const S=r.level||0,H=r.internalFormat||r.format||Gn,w=$r(H),E=r.format||w.format,et=r.type||gn,ct=r.target||dr;if(ct!==hr)throw"target must be TEXTURE_CUBE_MAP";wo(i,n,r),r=Object.assign({},r);let dt=6;const Ft=[],Lt=Io(i,r);let at;function pt(Mt){return function(Jt,qt){--dt,Jt?Ft.push(Jt):qt.width!==qt.height?Ft.push("cubemap face img is not a square: "+qt.src):(Er(i,r),i.bindTexture(ct,n),dt===5?Io().forEach(function(P){i.texImage2D(P,S,H,E,et,qt)}):i.texImage2D(Mt,S,H,E,et,qt),qr(r)&&i.generateMipmap(ct)),dt===0&&p(Ft.length?Ft:void 0,n,at)}}at=G.map(function(Mt,Jt){return To(Mt,r.crossOrigin,pt(Lt[Jt]))})}function wu(i,n,r,p){p=p||ti;const G=r.src,S=r.internalFormat||r.format||Gn,H=$r(S),w=r.format||H.format,E=r.type||gn,et=r.target||Vr;if(et!==Wr&&et!==Vr)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";wo(i,n,r),r=Object.assign({},r);let ct=G.length;const dt=[];let Ft;const Lt=r.level||0;let at=r.width,pt=r.height;const Mt=G.length;let Jt=!0;function qt(P){return function(De,an){if(--ct,De)dt.push(De);else{if(Er(i,r),i.bindTexture(et,n),Jt){Jt=!1,at=r.width||an.width,pt=r.height||an.height,i.texImage3D(et,Lt,S,at,pt,Mt,0,w,E,null);for(let Ve=0;Ve<Mt;++Ve)i.texSubImage3D(et,Lt,0,0,Ve,at,pt,1,w,E,an)}else{let Ve=an,Dt;(an.width!==at||an.height!==pt)&&(Dt=Ns(),Ve=Dt.canvas,Dt.canvas.width=at,Dt.canvas.height=pt,Dt.drawImage(an,0,0,at,pt)),i.texSubImage3D(et,Lt,0,0,P,at,pt,1,w,E,Ve),Dt&&Ve===Dt.canvas&&(Dt.canvas.width=0,Dt.canvas.height=0)}qr(r)&&i.generateMipmap(et)}ct===0&&p(dt.length?dt:void 0,n,Ft)}}Ft=G.map(function(P,De){return To(P,r.crossOrigin,qt(De))})}function Fu(i,n,r,p){p=p||ar.textureOptions;const G=p.target||dr;i.bindTexture(G,n);let S=p.width,H=p.height,w=p.depth;const E=p.level||0,et=p.internalFormat||p.format||Gn,ct=$r(et),dt=p.format||ct.format,Ft=p.type||Xu(i,r,ct.type);if(_r(r))r instanceof Uint8ClampedArray&&(r=new Uint8Array(r.buffer));else{const Mt=xs(Ft);r=new Mt(r)}const Lt=Zu(et,Ft),at=r.byteLength/Lt;if(at%1)throw"length wrong size for format: "+Hs(i,dt);let pt;if(G===Wr||G===Vr)if(!S&&!H&&!w){const Mt=Math.cbrt(at);if(Mt%1!==0)throw"can't guess cube size of array of numElements: "+at;S=Mt,H=Mt,w=Mt}else S&&(!H||!w)?(pt=Ei(i,G,H,w,at/S),H=pt.width,w=pt.height):H&&(!S||!w)?(pt=Ei(i,G,S,w,at/H),S=pt.width,w=pt.height):(pt=Ei(i,G,S,H,at/w),S=pt.width,H=pt.height);else pt=Ei(i,G,S,H,at),S=pt.width,H=pt.height;if(Ds(i),i.pixelStorei(Wo,p.unpackAlignment||1),Er(i,p),G===hr){const Mt=Lt/r.BYTES_PER_ELEMENT,Jt=at/6*Mt;So(i,p).forEach(qt=>{const P=Jt*qt.ndx,De=r.subarray(P,P+Jt);i.texImage2D(qt.face,E,et,S,H,0,dt,Ft,De)})}else G===Wr||G===Vr?i.texImage3D(G,E,et,S,H,w,0,dt,Ft,r):i.texImage2D(G,E,et,S,H,0,dt,Ft,r);return{width:S,height:H,depth:w,type:Ft}}function Yu(i,n,r){const p=r.target||dr;i.bindTexture(p,n);const G=r.level||0,S=r.internalFormat||r.format||Gn,H=$r(S),w=r.format||H.format,E=r.type||H.type;if(Er(i,r),p===hr)for(let et=0;et<6;++et)i.texImage2D(vo+et,G,S,r.width,r.height,0,w,E,null);else p===Wr||p===Vr?i.texImage3D(p,G,S,r.width,r.height,r.depth,0,w,E,null):i.texImage2D(p,G,S,r.width,r.height,0,w,E,null)}function el(i,n,r){r=r||ti,n=n||ar.textureOptions;const p=i.createTexture(),G=n.target||dr;let S=n.width||1,H=n.height||1;const w=n.internalFormat||Gn;i.bindTexture(G,p),G===hr&&(i.texParameteri(G,Fi,wi),i.texParameteri(G,Yi,wi));let E=n.src;if(E)if(typeof E=="function"&&(E=E(i,n)),typeof E=="string")Su(i,p,n,r);else if(_r(E)||Array.isArray(E)&&(typeof E[0]=="number"||Array.isArray(E[0])||_r(E[0]))){const et=Fu(i,p,E,n);S=et.width,H=et.height}else Array.isArray(E)&&(typeof E[0]=="string"||tl(E[0]))?G===hr?Tu(i,p,n,r):wu(i,p,n,r):(qs(i,p,E,n),S=E.width,H=E.height);else Yu(i,p,n);return qr(n)&&xo(i,p,n,S,H,w),$s(i,p,n),p}const Fo=Is;function nl(i){return typeof document<"u"&&document.getElementById?document.getElementById(i):null}const ki=33984,Ui=34962,Lu=34963,Cu=35713,Hu=35714,Nu=35632,Ju=35633,Eu=35981,rl=35718,ku=35721,Uu=35971,Bu=35382,Au=35396,Mu=35398,Ku=35392,ju=35395,Bi=5126,il=35664,ol=35665,sl=35666,Yo=5124,ll=35667,cl=35668,ul=35669,al=35670,dl=35671,hl=35672,fl=35673,ml=35674,pl=35675,bl=35676,Ou=35678,zu=35680,Pu=35679,_u=35682,Qu=35685,Du=35686,$u=35687,qu=35688,ta=35689,ea=35690,na=36289,ra=36292,ia=36293,Lo=5125,yl=36294,gl=36295,Zl=36296,oa=36298,sa=36299,la=36300,ca=36303,ua=36306,aa=36307,da=36308,ha=36311,Ai=3553,Mi=34067,Co=32879,Ki=35866,be={};function vl(i,n){return be[n].bindPoint}function fa(i,n){return function(r){i.uniform1f(n,r)}}function ma(i,n){return function(r){i.uniform1fv(n,r)}}function pa(i,n){return function(r){i.uniform2fv(n,r)}}function ba(i,n){return function(r){i.uniform3fv(n,r)}}function ya(i,n){return function(r){i.uniform4fv(n,r)}}function Gl(i,n){return function(r){i.uniform1i(n,r)}}function Xl(i,n){return function(r){i.uniform1iv(n,r)}}function Wl(i,n){return function(r){i.uniform2iv(n,r)}}function Vl(i,n){return function(r){i.uniform3iv(n,r)}}function Rl(i,n){return function(r){i.uniform4iv(n,r)}}function ga(i,n){return function(r){i.uniform1ui(n,r)}}function Za(i,n){return function(r){i.uniform1uiv(n,r)}}function va(i,n){return function(r){i.uniform2uiv(n,r)}}function Ga(i,n){return function(r){i.uniform3uiv(n,r)}}function Xa(i,n){return function(r){i.uniform4uiv(n,r)}}function Wa(i,n){return function(r){i.uniformMatrix2fv(n,!1,r)}}function Va(i,n){return function(r){i.uniformMatrix3fv(n,!1,r)}}function Ra(i,n){return function(r){i.uniformMatrix4fv(n,!1,r)}}function xa(i,n){return function(r){i.uniformMatrix2x3fv(n,!1,r)}}function Ia(i,n){return function(r){i.uniformMatrix3x2fv(n,!1,r)}}function Sa(i,n){return function(r){i.uniformMatrix2x4fv(n,!1,r)}}function Ta(i,n){return function(r){i.uniformMatrix4x2fv(n,!1,r)}}function wa(i,n){return function(r){i.uniformMatrix3x4fv(n,!1,r)}}function Fa(i,n){return function(r){i.uniformMatrix4x3fv(n,!1,r)}}function zn(i,n,r,p){const G=vl(i,n);return Pr(i)?function(S){let H,w;!S||yo(i,S)?(H=S,w=null):(H=S.texture,w=S.sampler),i.uniform1i(p,r),i.activeTexture(ki+r),i.bindTexture(G,H),i.bindSampler(r,w)}:function(S){i.uniform1i(p,r),i.activeTexture(ki+r),i.bindTexture(G,S)}}function Pn(i,n,r,p,G){const S=vl(i,n),H=new Int32Array(G);for(let w=0;w<G;++w)H[w]=r+w;return Pr(i)?function(w){i.uniform1iv(p,H),w.forEach(function(E,et){i.activeTexture(ki+H[et]);let ct,dt;yo(i,E)?(ct=E,dt=null):(ct=E.texture,dt=E.sampler),i.bindSampler(r,dt),i.bindTexture(S,ct)})}:function(w){i.uniform1iv(p,H),w.forEach(function(E,et){i.activeTexture(ki+H[et]),i.bindTexture(S,E)})}}be[Bi]={Type:Float32Array,size:4,setter:fa,arraySetter:ma},be[il]={Type:Float32Array,size:8,setter:pa,cols:2},be[ol]={Type:Float32Array,size:12,setter:ba,cols:3},be[sl]={Type:Float32Array,size:16,setter:ya,cols:4},be[Yo]={Type:Int32Array,size:4,setter:Gl,arraySetter:Xl},be[ll]={Type:Int32Array,size:8,setter:Wl,cols:2},be[cl]={Type:Int32Array,size:12,setter:Vl,cols:3},be[ul]={Type:Int32Array,size:16,setter:Rl,cols:4},be[Lo]={Type:Uint32Array,size:4,setter:ga,arraySetter:Za},be[yl]={Type:Uint32Array,size:8,setter:va,cols:2},be[gl]={Type:Uint32Array,size:12,setter:Ga,cols:3},be[Zl]={Type:Uint32Array,size:16,setter:Xa,cols:4},be[al]={Type:Uint32Array,size:4,setter:Gl,arraySetter:Xl},be[dl]={Type:Uint32Array,size:8,setter:Wl,cols:2},be[hl]={Type:Uint32Array,size:12,setter:Vl,cols:3},be[fl]={Type:Uint32Array,size:16,setter:Rl,cols:4},be[ml]={Type:Float32Array,size:32,setter:Wa,rows:2,cols:2},be[pl]={Type:Float32Array,size:48,setter:Va,rows:3,cols:3},be[bl]={Type:Float32Array,size:64,setter:Ra,rows:4,cols:4},be[Qu]={Type:Float32Array,size:32,setter:xa,rows:2,cols:3},be[Du]={Type:Float32Array,size:32,setter:Sa,rows:2,cols:4},be[$u]={Type:Float32Array,size:48,setter:Ia,rows:3,cols:2},be[qu]={Type:Float32Array,size:48,setter:wa,rows:3,cols:4},be[ta]={Type:Float32Array,size:64,setter:Ta,rows:4,cols:2},be[ea]={Type:Float32Array,size:64,setter:Fa,rows:4,cols:3},be[Ou]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ai},be[zu]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Mi},be[Pu]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Co},be[_u]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ai},be[na]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ki},be[ra]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ki},be[ia]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Mi},be[oa]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ai},be[sa]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Co},be[la]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Mi},be[ca]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ki},be[ua]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ai},be[aa]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Co},be[da]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Mi},be[ha]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ki};function ji(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(Ui,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribPointer(n,r.numComponents||r.size,r.type||Bi,r.normalize||!1,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function mr(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(Ui,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribIPointer(n,r.numComponents||r.size,r.type||Yo,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function Oi(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(Ui,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribIPointer(n,r.numComponents||r.size,r.type||Lo,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function Ho(i,n,r){const p=r.size,G=r.count;return function(S){i.bindBuffer(Ui,S.buffer);const H=S.size||S.numComponents||p,w=H/G,E=S.type||Bi,ct=be[E].size*H,dt=S.normalize||!1,Ft=S.offset||0,Lt=ct/G;for(let at=0;at<G;++at)i.enableVertexAttribArray(n+at),i.vertexAttribPointer(n+at,w,E,dt,ct,Ft+Lt*at),i.vertexAttribDivisor&&i.vertexAttribDivisor(n+at,S.divisor||0)}}const Yn={};Yn[Bi]={size:4,setter:ji},Yn[il]={size:8,setter:ji},Yn[ol]={size:12,setter:ji},Yn[sl]={size:16,setter:ji},Yn[Yo]={size:4,setter:mr},Yn[ll]={size:8,setter:mr},Yn[cl]={size:12,setter:mr},Yn[ul]={size:16,setter:mr},Yn[Lo]={size:4,setter:Oi},Yn[yl]={size:8,setter:Oi},Yn[gl]={size:12,setter:Oi},Yn[Zl]={size:16,setter:Oi},Yn[al]={size:4,setter:mr},Yn[dl]={size:8,setter:mr},Yn[hl]={size:12,setter:mr},Yn[fl]={size:16,setter:mr},Yn[ml]={size:4,setter:Ho,count:2},Yn[pl]={size:9,setter:Ho,count:3},Yn[bl]={size:16,setter:Ho,count:4};const Ya=/ERROR:\s*\d+:(\d+)/gi;function La(i,n="",r=0){const p=[...n.matchAll(Ya)],G=new Map(p.map((S,H)=>{const w=parseInt(S[1]),E=p[H+1],et=E?E.index:n.length,ct=n.substring(S.index,et);return[w-1,ct]}));return i.split(`
|
|
125
|
+
`).map((S,H)=>{const w=G.get(H);return`${H+1+r}: ${S}${w?`
|
|
126
|
+
|
|
127
|
+
^^^ ${w}`:""}`}).join(`
|
|
128
|
+
`)}const xl=/^[ \t]*\n/;function Il(i){let n=0;return xl.test(i)&&(n=1,i=i.replace(xl,"")),{lineOffset:n,shaderSource:i}}function Ca(i,n){return i.errorCallback(n),i.callback&&setTimeout(()=>{i.callback(`${n}
|
|
129
|
+
${i.errors.join(`
|
|
130
|
+
`)}`)}),null}function Ha(i,n,r,p){if(p=p||Fo,!i.getShaderParameter(r,Cu)){const S=i.getShaderInfoLog(r),{lineOffset:H,shaderSource:w}=Il(i.getShaderSource(r)),E=`${La(w,S,H)}
|
|
131
|
+
Error compiling ${Hs(i,n)}: ${S}`;return p(E),E}return""}function No(i,n,r){let p,G,S;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,p=et.transformFeedbackVaryings,G=et.transformFeedbackMode,S=et.callback}const H=r||Fo,w=[],E={errorCallback(et,...ct){w.push(et),H(et,...ct)},transformFeedbackVaryings:p,transformFeedbackMode:G,callback:S,errors:w};{let et={};Array.isArray(i)?i.forEach(function(ct,dt){et[ct]=n?n[dt]:dt}):et=i||{},E.attribLocations=et}return E}const Na=["VERTEX_SHADER","FRAGMENT_SHADER"];function Ja(i,n){if(n.indexOf("frag")>=0)return Nu;if(n.indexOf("vert")>=0)return Ju}function Ea(i,n,r){const p=i.getAttachedShaders(n);for(const G of p)r.has(G)&&i.deleteShader(G);i.deleteProgram(n)}const ka=(i=0)=>new Promise(n=>setTimeout(n,i));function Ua(i,n,r){const p=i.createProgram(),{attribLocations:G,transformFeedbackVaryings:S,transformFeedbackMode:H}=No(r);for(let w=0;w<n.length;++w){let E=n[w];if(typeof E=="string"){const et=nl(E),ct=et?et.text:E;let dt=i[Na[w]];et&&et.type&&(dt=Ja(i,et.type)||dt),E=i.createShader(dt),i.shaderSource(E,Il(ct).shaderSource),i.compileShader(E),i.attachShader(p,E)}}Object.entries(G).forEach(([w,E])=>i.bindAttribLocation(p,E,w));{let w=S;w&&(w.attribs&&(w=w.attribs),Array.isArray(w)||(w=Object.keys(w)),i.transformFeedbackVaryings(p,w,H||Eu))}return i.linkProgram(p),p}function Ba(i,n,r,p,G){const S=No(r,p,G),H=new Set(n),w=Ua(i,n,S);function E(et,ct){const dt=Ma(et,ct,S.errorCallback);return dt&&Ea(et,ct,H),dt}if(S.callback){Aa(i,w).then(()=>{const et=E(i,w);S.callback(et,et?void 0:w)});return}return E(i,w)?void 0:w}async function Aa(i,n){const r=i.getExtension("KHR_parallel_shader_compile"),p=r?(S,H)=>S.getProgramParameter(H,r.COMPLETION_STATUS_KHR):()=>!0;let G=0;do await ka(G),G=1e3/60;while(!p(i,n))}function Ma(i,n,r){if(r=r||Fo,!i.getProgramParameter(n,Hu)){const G=i.getProgramInfoLog(n);r(`Error in program linking: ${G}`);const H=i.getAttachedShaders(n).map(w=>Ha(i,i.getShaderParameter(w,i.SHADER_TYPE),w,r));return`${G}
|
|
132
|
+
${H.filter(w=>w).join(`
|
|
133
|
+
`)}`}}function Ka(i,n,r,p,G){return Ba(i,n,r,p,G)}function Sl(i){const n=i.name;return n.startsWith("gl_")||n.startsWith("webgl_")}const ja=/(\.|\[|]|\w+)/g,Oa=i=>i>="0"&&i<="9";function za(i,n,r,p){const G=i.split(ja).filter(w=>w!=="");let S=0,H="";for(;;){const w=G[S++];H+=w;const E=Oa(w[0]),et=E?parseInt(w):w;if(E&&(H+=G[S++]),S===G.length){r[et]=n;break}else{const dt=G[S++],Ft=dt==="[",Lt=r[et]||(Ft?[]:{});r[et]=Lt,r=Lt,p[H]=p[H]||function(at){return function(pt){Tl(at,pt)}}(Lt),H+=dt}}}function Pa(i,n){let r=0;function p(w,E,et){const ct=E.name.endsWith("[0]"),dt=E.type,Ft=be[dt];if(!Ft)throw new Error(`unknown type: 0x${dt.toString(16)}`);let Lt;if(Ft.bindPoint){const at=r;r+=E.size,ct?Lt=Ft.arraySetter(i,dt,at,et,E.size):Lt=Ft.setter(i,dt,at,et,E.size)}else Ft.arraySetter&&ct?Lt=Ft.arraySetter(i,et):Lt=Ft.setter(i,et);return Lt.location=et,Lt}const G={},S={},H=i.getProgramParameter(n,rl);for(let w=0;w<H;++w){const E=i.getActiveUniform(n,w);if(Sl(E))continue;let et=E.name;et.endsWith("[0]")&&(et=et.substr(0,et.length-3));const ct=i.getUniformLocation(n,E.name);if(ct){const dt=p(n,E,ct);G[et]=dt,za(et,dt,S,G)}}return G}function _a(i,n){const r={},p=i.getProgramParameter(n,Uu);for(let G=0;G<p;++G){const S=i.getTransformFeedbackVarying(n,G);r[S.name]={index:G,type:S.type,size:S.size}}return r}function Qa(i,n){const r=i.getProgramParameter(n,rl),p=[],G=[];for(let w=0;w<r;++w){G.push(w),p.push({});const E=i.getActiveUniform(n,w);p[w].name=E.name}[["UNIFORM_TYPE","type"],["UNIFORM_SIZE","size"],["UNIFORM_BLOCK_INDEX","blockNdx"],["UNIFORM_OFFSET","offset"]].forEach(function(w){const E=w[0],et=w[1];i.getActiveUniforms(n,G,i[E]).forEach(function(ct,dt){p[dt][et]=ct})});const S={},H=i.getProgramParameter(n,Bu);for(let w=0;w<H;++w){const E=i.getActiveUniformBlockName(n,w),et={index:i.getUniformBlockIndex(n,E),usedByVertexShader:i.getActiveUniformBlockParameter(n,w,Au),usedByFragmentShader:i.getActiveUniformBlockParameter(n,w,Mu),size:i.getActiveUniformBlockParameter(n,w,Ku),uniformIndices:i.getActiveUniformBlockParameter(n,w,ju)};et.used=et.usedByVertexShader||et.usedByFragmentShader,S[E]=et}return{blockSpecs:S,uniformData:p}}function Tl(i,n){for(const r in n){const p=i[r];typeof p=="function"?p(n[r]):Tl(i[r],n[r])}}function wl(i,...n){const r=i.uniformSetters||i,p=n.length;for(let G=0;G<p;++G){const S=n[G];if(Array.isArray(S)){const H=S.length;for(let w=0;w<H;++w)wl(r,S[w])}else for(const H in S){const w=r[H];w&&w(S[H])}}}function Da(i,n){const r={},p=i.getProgramParameter(n,ku);for(let G=0;G<p;++G){const S=i.getActiveAttrib(n,G);if(Sl(S))continue;const H=i.getAttribLocation(n,S.name),w=Yn[S.type],E=w.setter(i,H,w);E.location=H,r[S.name]=E}return r}function $a(i,n){for(const r in n){const p=i[r];p&&p(n[r])}}function qa(i,n,r){r.vertexArrayObject?i.bindVertexArray(r.vertexArrayObject):($a(n.attribSetters||n,r.attribs),r.indices&&i.bindBuffer(Lu,r.indices))}function Fl(i,n){const r=Pa(i,n),p=Da(i,n),G={program:n,uniformSetters:r,attribSetters:p};return Pr(i)&&(G.uniformBlockSpec=Qa(i,n),G.transformFeedbackInfo=_a(i,n)),G}const t0=/\s|{|}|;/;function e0(i,n,r,p,G){const S=No(r,p,G),H=[];if(n=n.map(function(et){if(!t0.test(et)){const ct=nl(et);if(ct)et=ct.text;else{const dt=`no element with id: ${et}`;S.errorCallback(dt),H.push(dt)}}return et}),H.length)return Ca(S,"");const w=S.callback;w&&(S.callback=(et,ct)=>{w(et,et?void 0:Fl(i,ct))});const E=Ka(i,n,S);return E?Fl(i,E):null}const n0=4,Yl=5123;function r0(i,n,r,p,G,S){r=r===void 0?n0:r;const H=n.indices,w=n.elementType,E=p===void 0?n.numElements:p;G=G===void 0?0:G,w||H?S!==void 0?i.drawElementsInstanced(r,E,w===void 0?Yl:n.elementType,G,S):i.drawElements(r,E,w===void 0?Yl:n.elementType,G):S!==void 0?i.drawArraysInstanced(r,G,E,S):i.drawArrays(r,G,E)}const Ll=36160,zi=36161,i0=3553,o0=5121,s0=6402,l0=6408,c0=33190,u0=36012,a0=35056,d0=36013,h0=32854,f0=32855,m0=36194,Cl=33189,Hl=6401,Nl=36168,Jo=34041,Eo=36064,Pi=36096,Jl=36128,ko=33306,Uo=33071,Bo=9729,p0=[{format:l0,type:o0,min:Bo,wrap:Uo},{format:Jo}],tr={};tr[Jo]=ko,tr[Hl]=Jl,tr[Nl]=Jl,tr[s0]=Pi,tr[Cl]=Pi,tr[c0]=Pi,tr[u0]=Pi,tr[a0]=ko,tr[d0]=ko;function b0(i,n){return tr[i]||tr[n]}const pr={};pr[h0]=!0,pr[f0]=!0,pr[m0]=!0,pr[Jo]=!0,pr[Cl]=!0,pr[Hl]=!0,pr[Nl]=!0;function y0(i){return pr[i]}const g0=32;function Z0(i){return i>=Eo&&i<Eo+g0}function _i(i,n,r,p){const G=Ll,S=i.createFramebuffer();i.bindFramebuffer(G,S),r=r||i.drawingBufferWidth,p=p||i.drawingBufferHeight,n=n||p0;const H=[],w={framebuffer:S,attachments:[],width:r,height:p};return n.forEach(function(E,et){let ct=E.attachment;const dt=E.samples,Ft=E.format;let Lt=E.attachmentPoint||b0(Ft,E.internalFormat);if(Lt||(Lt=Eo+et),Z0(Lt)&&H.push(Lt),!ct)if(dt!==void 0||y0(Ft))ct=i.createRenderbuffer(),i.bindRenderbuffer(zi,ct),dt>1?i.renderbufferStorageMultisample(zi,dt,Ft,r,p):i.renderbufferStorage(zi,Ft,r,p);else{const at=Object.assign({},E);at.width=r,at.height=p,at.auto===void 0&&(at.auto=!1,at.min=at.min||at.minMag||Bo,at.mag=at.mag||at.minMag||Bo,at.wrapS=at.wrapS||at.wrap||Uo,at.wrapT=at.wrapT||at.wrap||Uo),ct=el(i,at)}if(w1(i,ct))i.framebufferRenderbuffer(G,Lt,zi,ct);else if(yo(i,ct))E.layer!==void 0?i.framebufferTextureLayer(G,Lt,ct,E.level||0,E.layer):i.framebufferTexture2D(G,Lt,E.target||i0,ct,E.level||0);else throw new Error("unknown attachment type");w.attachments.push(ct)}),i.drawBuffers&&i.drawBuffers(H),w}function v0(i,n,r){r=r||Ll,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 mn(i,n){return()=>n instanceof WebGLTexture?n:el(i,{src:n,wrap:i.CLAMP_TO_EDGE})}const El=2;class Ir{constructor(n){Wt(this,"id","_");Wt(this,"context");Wt(this,"output");Wt(this,"fbi");Wt(this,"options");Wt(this,"programInfo");Wt(this,"bufferInfo");Wt(this,"profiler");Wt(this,"lastRun");const{context:r,width:p,height:G}=n;this.context=r,this.options=n;const S=this.buildDefines();this.programInfo=e0(this.context,[S+this.getVertexShader(),S+this.getFragmentShader()]),this.bufferInfo=tc(this.context,this.getBuffers()),this.fbi=_i(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],p,G),this.output=this.fbi.attachments[0]}resizeOutput(n,r){this.fbi=_i(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 p in r)n+=`#define ${p} ${r[p].toFixed(1)}
|
|
134
|
+
`;return n}run(n){var G,S,H,w,E,et;(G=this.profiler)==null||G.pushContext(`[${this.id}] PROG : ${this.constructor.name}`),(S=this.profiler)==null||S.pushContext(`[${this.id}] UNIFORMS`);for(const ct in n)typeof n[ct]=="function"&&((H=this.profiler)==null||H.pushContext(`[${this.id}] UNI : ${ct}`),n[ct]=n[ct](),(w=this.profiler)==null||w.popContext(`[${this.id}] UNI : ${ct}`));(E=this.profiler)==null||E.popContext(`[${this.id}] UNIFORMS`);const r=Date.now();let p=0;this.lastRun&&(p=(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),qa(this.context,this.programInfo,this.bufferInfo),wl(this.programInfo,{delta:p,canvas:[this.context.canvas.width,this.context.canvas.height],...n}),v0(this.context,this.options.disableFramebuffer?null:this.fbi),r0(this.context,this.bufferInfo),(et=this.profiler)==null||et.popContext(`[${this.id}] PROG : ${this.constructor.name}`)}setProfiler(n){this.profiler=n}}const G0=`precision mediump float;
|
|
136
135
|
|
|
137
136
|
varying vec2 _texture_coord;
|
|
138
137
|
|
|
@@ -143,7 +142,7 @@ uniform sampler2D mask;
|
|
|
143
142
|
vec4 loop();
|
|
144
143
|
|
|
145
144
|
void main() { gl_FragColor = loop(); }
|
|
146
|
-
`,
|
|
145
|
+
`,X0=`varying vec2 _texture_coord;
|
|
147
146
|
|
|
148
147
|
attribute vec2 position;
|
|
149
148
|
attribute vec2 texture_coord;
|
|
@@ -152,7 +151,7 @@ void main() {
|
|
|
152
151
|
gl_Position = vec4(position, 0., 1.);
|
|
153
152
|
_texture_coord = texture_coord;
|
|
154
153
|
}
|
|
155
|
-
`;class
|
|
154
|
+
`;class W0 extends Ir{getDefines(){var n;return{RADIUS:(n=this.options.radius)!=null?n:1}}getFragmentShader(){return G0+this.createLoopFunction()}getVertexShader(){return X0}createLoopFunction(){var r;let n=(r=this.options.radius)!=null?r:1;return`
|
|
156
155
|
|
|
157
156
|
vec4 loop() {
|
|
158
157
|
vec4 result = vec4(0,0,0,0);
|
|
@@ -174,7 +173,7 @@ void main() {
|
|
|
174
173
|
diff.x = normalizedRadius.x;
|
|
175
174
|
}
|
|
176
175
|
return result / factorSum;
|
|
177
|
-
}`}}const
|
|
176
|
+
}`}}const V0=`precision mediump float;
|
|
178
177
|
|
|
179
178
|
varying vec2 _texture_coord;
|
|
180
179
|
|
|
@@ -189,7 +188,7 @@ void main() {
|
|
|
189
188
|
gl_FragColor = foregroundColor * tresholdColor.a +
|
|
190
189
|
backgroundColor * (1. - tresholdColor.a);
|
|
191
190
|
}
|
|
192
|
-
`,
|
|
191
|
+
`,R0=`varying vec2 _texture_coord;
|
|
193
192
|
|
|
194
193
|
attribute vec2 position;
|
|
195
194
|
attribute vec2 texture_coord;
|
|
@@ -199,7 +198,7 @@ void main() {
|
|
|
199
198
|
_texture_coord = texture_coord;
|
|
200
199
|
_texture_coord.y = 1. - texture_coord.y;
|
|
201
200
|
}
|
|
202
|
-
`;class
|
|
201
|
+
`;class Ao extends Ir{getFragmentShader(){return V0}getVertexShader(){return R0}}class Mo{constructor(){Wt(this,"steps",[]);Wt(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 p,G;(p=this.profiler)==null||p.pushContext(`PIP [${this.constructor.name}]`);for(const S of this.steps)S.preventResize||S.program.resizeOutput(n,r);(G=this.profiler)==null||G.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 Ko extends Mo{constructor(){super(...arguments);Wt(this,"preciseMaskEnabled",!1)}}const x0=10,I0=2,S0=8;class T0 extends Ko{constructor(r,p){super();Wt(this,"inputImage");Wt(this,"inputMask");Wt(this,"blur");this.context=r,this.radius=p;const G={context:r,height:r.canvas.height,width:r.canvas.width};this.blur=new W0({...G,radius:p,...this.getBlurTextureSize(r.canvas.width,r.canvas.height)});const S=new Ao({...G,disableFramebuffer:!0});this.addStep({program:this.blur,preventResize:!0,getUniforms:()=>({texture:mn(r,this.inputImage),mask:mn(r,this.inputMask)})}),this.addStep({program:S,getUniforms:()=>({background:mn(r,this.blur.output),foreground:mn(r,this.inputImage),threshold:mn(r,this.inputMask)})})}getBlurTextureSize(r,p){const G=this.radius>x0?S0:I0;return{width:Math.max(El,r/G),height:Math.max(El,p/G)}}setData(r,p){this.inputImage=r,this.inputMask=p}resizeOutput(r,p){super.resizeOutput(r,p);const G=this.getBlurTextureSize(r,p);this.blur.resizeOutput(G.width,G.height)}}class kl extends Ko{constructor(r){super();Wt(this,"inputImage");Wt(this,"inputBackgroundImage");Wt(this,"inputMask");Wt(this,"preciseMaskEnabled",!0);this.context=r;const p={context:r,height:r.canvas.height,width:r.canvas.width},G=new Ao({...p,disableFramebuffer:!0});this.addStep({program:G,getUniforms:()=>({background:mn(r,this.inputBackgroundImage),foreground:mn(r,this.inputImage),threshold:mn(r,this.inputMask)})})}setData(r,p){this.inputImage=r,this.inputMask=p}}class w0 extends kl{constructor(){super(...arguments);Wt(this,"frameReader");Wt(this,"preciseMaskEnabled",!0)}set inputVideo(r){this.frameReader=r.getReader(),this.readNextVideoFrame()}async run(){this.frameReader&&(await super.run(),this.readNextVideoFrame())}async readNextVideoFrame(){var p;const r=await((p=this.frameReader)==null?void 0:p.read());r!=null&&r.value&&(this.inputBackgroundImage=await createImageBitmap(r.value),r.value.close())}}const F0=`precision mediump float;
|
|
203
202
|
|
|
204
203
|
varying vec2 _texture_coord;
|
|
205
204
|
|
|
@@ -209,7 +208,7 @@ uniform sampler2D texture;
|
|
|
209
208
|
vec4 loop();
|
|
210
209
|
|
|
211
210
|
void main() { gl_FragColor = loop(); }
|
|
212
|
-
`,
|
|
211
|
+
`,Y0=`varying vec2 _texture_coord;
|
|
213
212
|
|
|
214
213
|
attribute vec2 position;
|
|
215
214
|
attribute vec2 texture_coord;
|
|
@@ -218,7 +217,7 @@ void main() {
|
|
|
218
217
|
gl_Position = vec4(position, 0., 1.);
|
|
219
218
|
_texture_coord = texture_coord;
|
|
220
219
|
}
|
|
221
|
-
`;var
|
|
220
|
+
`;var jo=(i=>(i[i.LINEAR=0]="LINEAR",i[i.GAUSSIAN=1]="GAUSSIAN",i))(jo||{});class Ul extends Ir{getDefines(){var n;return{RADIUS:(n=this.options.radius)!=null?n:1}}getFragmentShader(){return F0+this.createLoopFunction()}getVertexShader(){return Y0}createLoopFunction(){var r;let n=(r=this.options.radius)!=null?r:1;return`
|
|
222
221
|
|
|
223
222
|
vec4 loop() {
|
|
224
223
|
vec4 result = vec4(0,0,0,0);
|
|
@@ -239,7 +238,7 @@ void main() {
|
|
|
239
238
|
diff.x = normalizedRadius.x;
|
|
240
239
|
}
|
|
241
240
|
return result / factorSum;
|
|
242
|
-
}`}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
|
|
241
|
+
}`}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 E;const p=Math.PI*2,G=Math.max((E=this.options.radius)!=null?E:1,1),S=1/(p*G**2),H=-(n**2+r**2),w=S*H;return S*Math.E**w}}class L0 extends Ko{constructor(r,p){super();Wt(this,"inputImage");Wt(this,"inputMask");this.context=r;const G={context:r,height:r.canvas.height,width:r.canvas.width},S=new Ul({...G,radius:p,type:jo.GAUSSIAN}),H=new Ao({...G,disableFramebuffer:!0});this.addStep({program:S,getUniforms:()=>({texture:mn(r,this.inputImage)})}),this.addStep({program:H,getUniforms:()=>({background:mn(r,this.inputImage),foreground:mn(r,S.output),threshold:mn(r,this.inputMask)})})}setData(r,p){this.inputImage=r,this.inputMask=p}}class Oo extends Ir{constructor(r){super(r);Wt(this,"fbi2");this.fbi2=_i(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 p=this.fbi;this.fbi=this.fbi2,this.fbi2=p,this.output=this.fbi.attachments[0],super.run({...r,previous_rendering:this.fbi2.attachments[0]})}resizeOutput(r,p){super.resizeOutput(r,p),this.fbi2=_i(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],r,p)}}const C0=`precision mediump float;
|
|
243
242
|
|
|
244
243
|
varying vec2 _texture_coord;
|
|
245
244
|
|
|
@@ -292,7 +291,7 @@ void main() {
|
|
|
292
291
|
gl_FragColor *= (1. - threshold);
|
|
293
292
|
}
|
|
294
293
|
}
|
|
295
|
-
`,
|
|
294
|
+
`,H0=`varying vec2 _texture_coord;
|
|
296
295
|
|
|
297
296
|
attribute vec2 position;
|
|
298
297
|
attribute vec2 texture_coord;
|
|
@@ -301,7 +300,7 @@ void main() {
|
|
|
301
300
|
gl_Position = vec4(position, 0., 1.);
|
|
302
301
|
_texture_coord = texture_coord;
|
|
303
302
|
}
|
|
304
|
-
`;class
|
|
303
|
+
`;class N0 extends Oo{getFragmentShader(){return C0}getVertexShader(){return H0}}const J0=`#version 300 es
|
|
305
304
|
// https://github.com/Volcomix/virtual-background/blob/main/src/pipelines/webgl2/jointBilateralFilterStage.ts
|
|
306
305
|
|
|
307
306
|
precision highp float;
|
|
@@ -347,14 +346,14 @@ void main() {
|
|
|
347
346
|
}
|
|
348
347
|
newVal /= totalWeight;
|
|
349
348
|
outColor = vec4(vec3(0.), newVal);
|
|
350
|
-
}`,
|
|
349
|
+
}`,E0=`#version 300 es
|
|
351
350
|
in vec2 position;
|
|
352
351
|
in vec2 texture_coord;
|
|
353
352
|
out vec2 _texture_coord;
|
|
354
353
|
void main() {
|
|
355
354
|
gl_Position = vec4(position, 0.0, 1.0);
|
|
356
355
|
_texture_coord = texture_coord;
|
|
357
|
-
}`;class
|
|
356
|
+
}`;class k0 extends Ir{getFragmentShader(){return J0}getVertexShader(){return E0}}const U0=`precision mediump float;
|
|
358
357
|
|
|
359
358
|
varying vec2 _texture_coord;
|
|
360
359
|
|
|
@@ -376,7 +375,7 @@ void main() {
|
|
|
376
375
|
gl_FragColor = texture2D(texture, _texture_coord);
|
|
377
376
|
}
|
|
378
377
|
}
|
|
379
|
-
`,
|
|
378
|
+
`,B0=`varying vec2 _texture_coord;
|
|
380
379
|
|
|
381
380
|
attribute vec2 position;
|
|
382
381
|
attribute vec2 texture_coord;
|
|
@@ -385,7 +384,7 @@ void main() {
|
|
|
385
384
|
gl_Position = vec4(position, 0., 1.);
|
|
386
385
|
_texture_coord = texture_coord;
|
|
387
386
|
}
|
|
388
|
-
`;class
|
|
387
|
+
`;class A0 extends Ir{getFragmentShader(){return U0}getVertexShader(){return B0}}const M0=`precision mediump float;
|
|
389
388
|
|
|
390
389
|
varying vec2 _texture_coord;
|
|
391
390
|
|
|
@@ -404,7 +403,7 @@ void main() {
|
|
|
404
403
|
|
|
405
404
|
gl_FragColor = color;
|
|
406
405
|
}
|
|
407
|
-
`,
|
|
406
|
+
`,K0=`varying vec2 _texture_coord;
|
|
408
407
|
|
|
409
408
|
attribute vec2 position;
|
|
410
409
|
attribute vec2 texture_coord;
|
|
@@ -413,7 +412,7 @@ void main() {
|
|
|
413
412
|
gl_Position = vec4(position, 0., 1.);
|
|
414
413
|
_texture_coord = texture_coord;
|
|
415
414
|
}
|
|
416
|
-
`;class
|
|
415
|
+
`;class j0 extends Oo{getFragmentShader(){return M0}getVertexShader(){return K0}}const O0=`precision mediump float;
|
|
417
416
|
|
|
418
417
|
varying vec2 _texture_coord;
|
|
419
418
|
|
|
@@ -427,7 +426,7 @@ void main() {
|
|
|
427
426
|
gl_FragColor = inputs_color;
|
|
428
427
|
}
|
|
429
428
|
}
|
|
430
|
-
`,
|
|
429
|
+
`,z0=`varying vec2 _texture_coord;
|
|
431
430
|
|
|
432
431
|
attribute vec2 position;
|
|
433
432
|
attribute vec2 texture_coord;
|
|
@@ -436,13 +435,13 @@ void main() {
|
|
|
436
435
|
gl_Position = vec4(position, 0., 1.);
|
|
437
436
|
_texture_coord = texture_coord;
|
|
438
437
|
}
|
|
439
|
-
`;class
|
|
438
|
+
`;class P0 extends Oo{getFragmentShader(){return O0}getVertexShader(){return z0}}class _0 extends Mo{constructor(r,p,G){super();Wt(this,"inputImage");Wt(this,"inputMask");Wt(this,"previousInputImage");Wt(this,"previousInputMask");Wt(this,"output");Wt(this,"options",{currentThresholdMinimum:0,currentThresholdMaximum:1,previousThresholdMinimum:0,previousThresholdMaximum:1,thresholdMinimum:0,thresholdMaximum:1,thresholdFactor:1});this.context=r;const S={context:r,height:G,width:p},H=new N0(S),w=new Ul({...S,radius:1,type:jo.GAUSSIAN}),E=new P0(S),et=new j0(S),ct=new A0(S),dt=new k0({...S}),Ft=.66,Lt=640,at=480,pt=256,Mt=144;let Jt=1;Jt*=Math.max(Lt/pt,at/Mt);const qt=Math.max(1,Math.sqrt(Jt)*Ft),P=1/Lt,De=1/at;this.addStep({program:H,getUniforms:()=>({image_now:mn(r,this.inputImage),image_before:mn(r,this.previousInputImage),mask_now:mn(r,this.inputMask),mask_before:mn(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:E,getUniforms:()=>({inputs:mn(r,this.inputMask),threshold:mn(r,H.output)})}),this.addStep({program:ct,getUniforms:()=>({texture:mn(r,E.output)})}),this.addStep({program:et,getUniforms:()=>({texture:mn(r,ct.output)})}),this.addStep({program:w,getUniforms:()=>({texture:mn(r,et.output)})}),this.addStep({program:dt,getUniforms:()=>({input_frame:mn(r,this.inputImage),segmentation_mask:mn(r,this.inputMask),threshold:mn(r,w.output),texel_size:[P,De],step:qt,radius:Jt,offset:qt>1?qt*.5:0,sigma_texel:Math.max(P,De)*Jt,sigma_color:.1})}),this.output=dt.output}setData(r,p){this.previousInputImage=this.inputImage?this.inputImage:r,this.previousInputMask=this.inputMask?this.inputMask:p,this.inputImage=r,this.inputMask=p}setOptions(r){this.options=r}}const Q0=`precision mediump float;
|
|
440
439
|
|
|
441
440
|
varying vec2 _texture_coord;
|
|
442
441
|
uniform sampler2D texture;
|
|
443
442
|
|
|
444
443
|
void main() { gl_FragColor = texture2D(texture, _texture_coord); }
|
|
445
|
-
`,
|
|
444
|
+
`,D0=`varying vec2 _texture_coord;
|
|
446
445
|
|
|
447
446
|
attribute vec2 position;
|
|
448
447
|
attribute vec2 texture_coord;
|
|
@@ -455,4 +454,4 @@ void main() {
|
|
|
455
454
|
_texture_coord.y = 1. - texture_coord.y;
|
|
456
455
|
}
|
|
457
456
|
}
|
|
458
|
-
`;class A3 extends xr{getFragmentShader(){return M3}getVertexShader(){return B3}}class j3 extends Do{constructor(r,m,y){super();Rt(this,"inputImage");this.context=r;const I={context:r,height:y,width:m};this.addStep({program:new A3({...I,disableFramebuffer:!0}),getUniforms:()=>({texture:mn(r,this.inputImage),invert_y:!0})})}setData(r){this.inputImage=r}}class z3{constructor(n){Rt(this,"resize");Rt(this,"canvas");Rt(this,"context");this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("webgl2"),this.canvas.width=n.width,this.canvas.height=n.height,this.resize=new j3(this.context,n.width,n.height)}resizeForeground(n,r){this.canvas.width=n,this.canvas.height=r,this.resize.resizeOutput(n,r)}async process(n){var r,m;return this.canvas.width=this.canvas.width,(r=this.resize)==null||r.setData(n),(m=this.resize)==null||m.run(),this.canvas}}class O3{constructor(n,r){Rt(this,"improveMaskSegmentation");Rt(this,"backgroundResizer");Rt(this,"backgroundImage");Rt(this,"backgroundVideo");Rt(this,"profiler");Rt(this,"activePipeline");Rt(this,"canvas");Rt(this,"options");Rt(this,"context");Rt(this,"virtualBGImage");this.id=n,this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("webgl2"),this.canvas.width=r.foregroundWidth,this.canvas.height=r.foregroundHeight,this.improveMaskSegmentation=new U3(this.context,r.maskWidth,r.maskHeight),this.backgroundImage=new mu(this.context),this.backgroundVideo=new X3(this.context),this.backgroundResizer=new z3({width:r.foregroundWidth,height:r.foregroundHeight})}setBackgroundOptions(n){switch(n.transformerType){case"BackgroundBlur":this.activePipeline=new G3(this.context,this.getBlurSize(n.radius));break;case"SilhouetteBlur":this.activePipeline=new R3(this.context,this.getBlurSize(n.radius));break;case"VideoBackground":this.activePipeline=this.backgroundVideo;break;case"VirtualBackground":this.activePipeline=this.backgroundImage;break}this.options=n}setFlickeringOptions(n){var r;(r=this.improveMaskSegmentation)==null||r.setOptions(n)}setVideoBGReadable(n){this.backgroundVideo.inputVideo=n}async setVirtualBGImage(n){this.virtualBGImage=n,this.backgroundImage.inputBackgroundImage=await this.backgroundResizer.process(n)}async process(n,r){var m,y,I,F,Y,k,et;if(this.activePipeline&&n.width&&(r==null?void 0:r.width)){const O=`[${this.id}] background-filter`;(m=this.profiler)==null||m.pushContext(O);let st=r;(((y=this.options)==null?void 0:y.selfieSegmentationType)&&((I=this.options)==null?void 0:I.selfieSegmentationType)==="PRECISE"||!((F=this.options)!=null&&F.selfieSegmentationType)&&this.activePipeline.preciseMaskEnabled)&&(this.improveMaskSegmentation.setId(this.id),this.improveMaskSegmentation.setProfiler(this.profiler),this.improveMaskSegmentation.setData(n,r),this.improveMaskSegmentation.run(),st=this.improveMaskSegmentation.output),this.activePipeline.setId(this.id),this.activePipeline.setProfiler(this.profiler),(Y=this.activePipeline)==null||Y.setData(n,st),(k=this.activePipeline)==null||k.run(),(et=this.profiler)==null||et.popContext(O)}}async resizeForeground(n,r){var m;this.canvas.width=n,this.canvas.height=r,this.backgroundImage.resizeOutput(n,r),this.backgroundVideo.resizeOutput(n,r),this.backgroundResizer.resizeForeground(n,r),(m=this.activePipeline)==null||m.resizeOutput(n,r),this.virtualBGImage&&(this.backgroundImage.inputBackgroundImage=await this.backgroundResizer.process(this.virtualBGImage))}async profile(n){const r=new d2(this.context);return this.profiler=r,r.start(),await Ds(n),this.profiler=void 0,r.stop(),r.getResolvedQueries()}getBlurSize(n=Mr.Low){switch(n){case Mr.Low:return 5;case Mr.High:return 12}return n}}class bu{constructor(){Rt(this,"selfieSegmentation",new Ks);Rt(this,"backgroundFilter");Rt(this,"previousDimensions",{width:0,height:0})}async init(n,r){await this.selfieSegmentation.init(r.wasmAssetUriPath,r.tfliteAssetUriPath);const{width:m,height:y}=this.selfieSegmentation.getOutputDimensions();this.backgroundFilter=new O3(n,{foregroundWidth:1,foregroundHeight:1,maskWidth:m,maskHeight:y})}async transform(n,r){var F,Y,k,et;const m=(F=n.timestamp)!=null?F:0,y=await createImageBitmap(n),I=await this.selfieSegmentation.process(y);I?((y.width!==this.previousDimensions.width||y.height!==this.previousDimensions.height)&&(this.previousDimensions.width=y.width,this.previousDimensions.height=y.height,await((Y=this.backgroundFilter)==null?void 0:Y.resizeForeground(y.width,y.height))),await((k=this.backgroundFilter)==null?void 0:k.process(y,I)),n.close(),r.enqueue(new VideoFrame((et=this.backgroundFilter)==null?void 0:et.canvas,{timestamp:m,alpha:"discard"}))):r.enqueue(n)}async setBackgroundOptions(n){var r;await((r=this.backgroundFilter)==null?void 0:r.setBackgroundOptions(n))}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)}async profile(n){var r,m;return(m=(r=this.backgroundFilter)==null?void 0:r.profile(n))!=null?m:[]}}const rs=class{constructor(){Rt(this,"backgroundTransformer",new bu);Rt(this,"mediaProcessor",new Ac);Rt(this,"rate",30);Rt(this,"resolveOnMediaProcessor");Rt(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((m,y)=>{this.resolveOnMediaProcessor?(this.resolveOnMediaProcessor({name:m,data:y}),this.resolveOnMediaProcessor=void 0):this.eventsQueue.push({name:m,data:y})})}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){Tc(n)}async profile(n){return JSON.stringify(await this.backgroundTransformer.profile(n))}};let es=rs;(()=>{l2("ProcessorWorker",rs)})();const yu="dmFyIGVkPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgdGQ9KEssdGUscmUpPT50ZSBpbiBLP2VkKEssdGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnJlfSk6S1t0ZV09cmU7dmFyIHA9KEssdGUscmUpPT4odGQoSyx0eXBlb2YgdGUhPSJzeW1ib2wiP3RlKyIiOnRlLHJlKSxyZSk7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBLPShyPT4ocltyLklOSVQ9MF09IklOSVQiLHJbci5GT1JXQVJEPTFdPSJGT1JXQVJEIixyW3IuVEVSTUlOQVRFPTJdPSJURVJNSU5BVEUiLHIpKShLfHx7fSk7ZnVuY3Rpb24gdGUocil7cmV0dXJuW0ltYWdlQml0bWFwLFJlYWRhYmxlU3RyZWFtLFdyaXRhYmxlU3RyZWFtXS5zb21lKGU9PnIgaW5zdGFuY2VvZiBlKX1mdW5jdGlvbiByZShyLGUpe2NvbnN0e2lkOnR9PXIsbj1BcnJheS5pc0FycmF5KGUpP2U6W2VdO3Bvc3RNZXNzYWdlKHtpZDp0LHJlc3VsdDplfSxuLmZpbHRlcihpPT50ZShpKSkpfWFzeW5jIGZ1bmN0aW9uIHFpKHIsZSl7Y29uc3R7ZnVuY3Rpb25OYW1lOnQsYXJnczpufT1yO2lmKCFlLmluc3RhbmNlKXRocm93Imluc3RhbmNlIG5vdCBpbml0aWFsaXplZCI7aWYoIXQpdGhyb3cibWlzc2luZyBmdW5jdGlvbiBuYW1lIHRvIGNhbGwiO2lmKCFlLmluc3RhbmNlW3RdKXRocm93YHVuZGVmaW5lZCBmdW5jdGlvbiBbJHt0fV0gaW4gY2xhc3MgJHtlLmluc3RhbmNlLmNvbnN0cnVjdG9yLndvcmtlcklkfWA7cmUocixhd2FpdCBlLmluc3RhbmNlW3RdKC4uLm4hPW51bGw/bjpbXSkpfWZ1bmN0aW9uICRyKCl7cmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZX1jb25zdCBHcj17fTtmdW5jdGlvbiBYaShyLGUpe2Uud29ya2VySWQ9ciwkcigpJiYoR3JbZS53b3JrZXJJZF09ZSl9ZnVuY3Rpb24gWWkocixlKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgY2xhc3NOYW1lIHdoaWxlIGluaXRpYWxpemluZyB3b3JrZXIiO2NvbnN0W3RdPXIuYXJncyxuPUdyW3RdO2lmKG4pZS5pbnN0YW5jZT1uZXcgbihyLmFyZ3Muc2xpY2UoMSkpO2Vsc2UgdGhyb3dgdW5rbm93biB3b3JrZXIgY2xhc3MgJHt0fWA7cmUocix0eXBlb2YgZS5pbnN0YW5jZSE9PXZvaWQgMCl9YXN5bmMgZnVuY3Rpb24gUWkocixlKXtjb25zdHthcmdzOnR9PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtsZXQgbjtlLmluc3RhbmNlLnRlcm1pbmF0ZSYmKG49YXdhaXQgZS5pbnN0YW5jZS50ZXJtaW5hdGUoLi4udCE9bnVsbD90OltdKSkscmUocixuKX1mdW5jdGlvbiBLaSgpe2NvbnN0IHI9e307b25tZXNzYWdlPWFzeW5jIGU9Pntjb25zdCB0PWUuZGF0YTtzd2l0Y2godC50eXBlKXtjYXNlIEsuSU5JVDpZaSh0LHIpO2JyZWFrO2Nhc2UgSy5GT1JXQVJEOnFpKHQscik7YnJlYWs7Y2FzZSBLLlRFUk1JTkFURTpRaSh0LHIpO2JyZWFrfX19JHIoKSYmS2koKTtjbGFzcyBuZXt9bmUudXBkYXRlcz17dHJhbnNmb3JtZXJfbmV3OiJOZXcgdHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyX251bGw6Ik51bGwgdHJhbnNmb3JtZXIifSxuZS5lcnJvcnM9e3RyYW5zZm9ybWVyX25vbmU6Ik5vIHRyYW5zZm9ybWVycyBwcm92aWRlZCIsdHJhbnNmb3JtZXJfc3RhcnQ6IkNhbm5vdCBzdGFydCB0cmFuc2Zvcm1lciIsdHJhbnNmb3JtZXJfdHJhbnNmb3JtOiJDYW5ub3QgdHJhbnNmb3JtIGZyYW1lIix0cmFuc2Zvcm1lcl9mbHVzaDoiQ2Fubm90IGZsdXNoIHRyYW5zZm9ybWVyIixyZWFkYWJsZV9udWxsOiJSZWFkYWJsZSBpcyBudWxsIix3cml0YWJsZV9udWxsOiJXcml0YWJsZSBpcyBudWxsIn07dmFyIE90PXtleHBvcnRzOnt9fSx6cj1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgaT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksbz0wO288aS5sZW5ndGg7bysrKWlbb109YXJndW1lbnRzW29dO3JldHVybiBlLmFwcGx5KHQsaSl9fSxKaT16cixvZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIE50KHIpe3JldHVybiBBcnJheS5pc0FycmF5KHIpfWZ1bmN0aW9uIFV0KHIpe3JldHVybiB0eXBlb2Ygcj4idSJ9ZnVuY3Rpb24gWmkocil7cmV0dXJuIHIhPT1udWxsJiYhVXQocikmJnIuY29uc3RydWN0b3IhPT1udWxsJiYhVXQoci5jb25zdHJ1Y3RvcikmJnR5cGVvZiByLmNvbnN0cnVjdG9yLmlzQnVmZmVyPT0iZnVuY3Rpb24iJiZyLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHIpfWZ1bmN0aW9uIEhyKHIpe3JldHVybiBvZS5jYWxsKHIpPT09IltvYmplY3QgQXJyYXlCdWZmZXJdIn1mdW5jdGlvbiBlbyhyKXtyZXR1cm4gb2UuY2FsbChyKT09PSJbb2JqZWN0IEZvcm1EYXRhXSJ9ZnVuY3Rpb24gdG8ocil7dmFyIGU7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9lPUFycmF5QnVmZmVyLmlzVmlldyhyKTplPXImJnIuYnVmZmVyJiZIcihyLmJ1ZmZlciksZX1mdW5jdGlvbiBybyhyKXtyZXR1cm4gdHlwZW9mIHI9PSJzdHJpbmcifWZ1bmN0aW9uIG5vKHIpe3JldHVybiB0eXBlb2Ygcj09Im51bWJlciJ9ZnVuY3Rpb24gVnIocil7cmV0dXJuIHIhPT1udWxsJiZ0eXBlb2Ygcj09Im9iamVjdCJ9ZnVuY3Rpb24gamUocil7aWYob2UuY2FsbChyKSE9PSJbb2JqZWN0IE9iamVjdF0iKXJldHVybiExO3ZhciBlPU9iamVjdC5nZXRQcm90b3R5cGVPZihyKTtyZXR1cm4gZT09PW51bGx8fGU9PT1PYmplY3QucHJvdG90eXBlfWZ1bmN0aW9uIGlvKHIpe3JldHVybiBvZS5jYWxsKHIpPT09IltvYmplY3QgRGF0ZV0ifWZ1bmN0aW9uIG9vKHIpe3JldHVybiBvZS5jYWxsKHIpPT09IltvYmplY3QgRmlsZV0ifWZ1bmN0aW9uIHNvKHIpe3JldHVybiBvZS5jYWxsKHIpPT09IltvYmplY3QgQmxvYl0ifWZ1bmN0aW9uIFdyKHIpe3JldHVybiBvZS5jYWxsKHIpPT09IltvYmplY3QgRnVuY3Rpb25dIn1mdW5jdGlvbiBhbyhyKXtyZXR1cm4gVnIocikmJldyKHIucGlwZSl9ZnVuY3Rpb24gdW8ocil7cmV0dXJuIG9lLmNhbGwocik9PT0iW29iamVjdCBVUkxTZWFyY2hQYXJhbXNdIn1mdW5jdGlvbiBjbyhyKXtyZXR1cm4gci50cmltP3IudHJpbSgpOnIucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfWZ1bmN0aW9uIGZvKCl7cmV0dXJuIHR5cGVvZiBuYXZpZ2F0b3I8InUiJiYobmF2aWdhdG9yLnByb2R1Y3Q9PT0iUmVhY3ROYXRpdmUifHxuYXZpZ2F0b3IucHJvZHVjdD09PSJOYXRpdmVTY3JpcHQifHxuYXZpZ2F0b3IucHJvZHVjdD09PSJOUyIpPyExOnR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUifWZ1bmN0aW9uIEJ0KHIsZSl7aWYoIShyPT09bnVsbHx8dHlwZW9mIHI+InUiKSlpZih0eXBlb2YgciE9Im9iamVjdCImJihyPVtyXSksTnQocikpZm9yKHZhciB0PTAsbj1yLmxlbmd0aDt0PG47dCsrKWUuY2FsbChudWxsLHJbdF0sdCxyKTtlbHNlIGZvcih2YXIgaSBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGkpJiZlLmNhbGwobnVsbCxyW2ldLGkscil9ZnVuY3Rpb24ga3QoKXt2YXIgcj17fTtmdW5jdGlvbiBlKGksbyl7amUocltvXSkmJmplKGkpP3Jbb109a3QocltvXSxpKTpqZShpKT9yW29dPWt0KHt9LGkpOk50KGkpP3Jbb109aS5zbGljZSgpOnJbb109aX1mb3IodmFyIHQ9MCxuPWFyZ3VtZW50cy5sZW5ndGg7dDxuO3QrKylCdChhcmd1bWVudHNbdF0sZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gbG8ocixlLHQpe3JldHVybiBCdChlLGZ1bmN0aW9uKGksbyl7dCYmdHlwZW9mIGk9PSJmdW5jdGlvbiI/cltvXT1KaShpLHQpOnJbb109aX0pLHJ9ZnVuY3Rpb24gbW8ocil7cmV0dXJuIHIuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYocj1yLnNsaWNlKDEpKSxyfXZhciBHPXtpc0FycmF5Ok50LGlzQXJyYXlCdWZmZXI6SHIsaXNCdWZmZXI6WmksaXNGb3JtRGF0YTplbyxpc0FycmF5QnVmZmVyVmlldzp0byxpc1N0cmluZzpybyxpc051bWJlcjpubyxpc09iamVjdDpWcixpc1BsYWluT2JqZWN0OmplLGlzVW5kZWZpbmVkOlV0LGlzRGF0ZTppbyxpc0ZpbGU6b28saXNCbG9iOnNvLGlzRnVuY3Rpb246V3IsaXNTdHJlYW06YW8saXNVUkxTZWFyY2hQYXJhbXM6dW8saXNTdGFuZGFyZEJyb3dzZXJFbnY6Zm8sZm9yRWFjaDpCdCxtZXJnZTprdCxleHRlbmQ6bG8sdHJpbTpjbyxzdHJpcEJPTTptb30sRWU9RztmdW5jdGlvbiBqcihyKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHIpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX12YXIgcXI9ZnVuY3Rpb24oZSx0LG4pe2lmKCF0KXJldHVybiBlO3ZhciBpO2lmKG4paT1uKHQpO2Vsc2UgaWYoRWUuaXNVUkxTZWFyY2hQYXJhbXModCkpaT10LnRvU3RyaW5nKCk7ZWxzZXt2YXIgbz1bXTtFZS5mb3JFYWNoKHQsZnVuY3Rpb24odSxmKXt1PT09bnVsbHx8dHlwZW9mIHU+InUifHwoRWUuaXNBcnJheSh1KT9mPWYrIltdIjp1PVt1XSxFZS5mb3JFYWNoKHUsZnVuY3Rpb24oZCl7RWUuaXNEYXRlKGQpP2Q9ZC50b0lTT1N0cmluZygpOkVlLmlzT2JqZWN0KGQpJiYoZD1KU09OLnN0cmluZ2lmeShkKSksby5wdXNoKGpyKGYpKyI9IitqcihkKSl9KSl9KSxpPW8uam9pbigiJiIpfWlmKGkpe3ZhciBzPWUuaW5kZXhPZigiIyIpO3MhPT0tMSYmKGU9ZS5zbGljZSgwLHMpKSxlKz0oZS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStpfXJldHVybiBlfSxobz1HO2Z1bmN0aW9uIHFlKCl7dGhpcy5oYW5kbGVycz1bXX1xZS5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6ZSxyZWplY3RlZDp0LHN5bmNocm9ub3VzOm4/bi5zeW5jaHJvbm91czohMSxydW5XaGVuOm4/bi5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfSxxZS5wcm90b3R5cGUuZWplY3Q9ZnVuY3Rpb24oZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9LHFlLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUpe2hvLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihuKXtuIT09bnVsbCYmZShuKX0pfTt2YXIgcG89cWUseW89Ryxfbz1mdW5jdGlvbihlLHQpe3lvLmZvckVhY2goZSxmdW5jdGlvbihpLG8pe28hPT10JiZvLnRvVXBwZXJDYXNlKCk9PT10LnRvVXBwZXJDYXNlKCkmJihlW3RdPWksZGVsZXRlIGVbb10pfSl9LFhyPWZ1bmN0aW9uKGUsdCxuLGksbyl7cmV0dXJuIGUuY29uZmlnPXQsbiYmKGUuY29kZT1uKSxlLnJlcXVlc3Q9aSxlLnJlc3BvbnNlPW8sZS5pc0F4aW9zRXJyb3I9ITAsZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6dGhpcy5jb25maWcsY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fSxlfSx4bz1YcixZcj1mdW5jdGlvbihlLHQsbixpLG8pe3ZhciBzPW5ldyBFcnJvcihlKTtyZXR1cm4geG8ocyx0LG4saSxvKX0sZ289WXIsYm89ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4uY29uZmlnLnZhbGlkYXRlU3RhdHVzOyFuLnN0YXR1c3x8IWl8fGkobi5zdGF0dXMpP2Uobik6dChnbygiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK24uc3RhdHVzLG4uY29uZmlnLG51bGwsbi5yZXF1ZXN0LG4pKX0sWGU9Ryx2bz1YZS5pc1N0YW5kYXJkQnJvd3NlckVudigpP2Z1bmN0aW9uKCl7cmV0dXJue3dyaXRlOmZ1bmN0aW9uKHQsbixpLG8scyxhKXt2YXIgdT1bXTt1LnB1c2godCsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KG4pKSxYZS5pc051bWJlcihpKSYmdS5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUoaSkudG9HTVRTdHJpbmcoKSksWGUuaXNTdHJpbmcobykmJnUucHVzaCgicGF0aD0iK28pLFhlLmlzU3RyaW5nKHMpJiZ1LnB1c2goImRvbWFpbj0iK3MpLGE9PT0hMCYmdS5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9dS5qb2luKCI7ICIpfSxyZWFkOmZ1bmN0aW9uKHQpe3ZhciBuPWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxzKikoIit0KyIpPShbXjtdKikiKSk7cmV0dXJuIG4/ZGVjb2RlVVJJQ29tcG9uZW50KG5bM10pOm51bGx9LHJlbW92ZTpmdW5jdGlvbih0KXt0aGlzLndyaXRlKHQsIiIsRGF0ZS5ub3coKS04NjRlNSl9fX0oKTpmdW5jdGlvbigpe3JldHVybnt3cml0ZTpmdW5jdGlvbigpe30scmVhZDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxyZW1vdmU6ZnVuY3Rpb24oKXt9fX0oKSxFbz1mdW5jdGlvbihlKXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KGUpfSxUbz1mdW5jdGlvbihlLHQpe3JldHVybiB0P2UucmVwbGFjZSgvXC8rJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cLysvLCIiKTplfSxBbz1Fbyx3bz1UbyxSbz1mdW5jdGlvbihlLHQpe3JldHVybiBlJiYhQW8odCk/d28oZSx0KTp0fSxMdD1HLFNvPVsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0sSW89ZnVuY3Rpb24oZSl7dmFyIHQ9e30sbixpLG87cmV0dXJuIGUmJkx0LmZvckVhY2goZS5zcGxpdChgCmApLGZ1bmN0aW9uKGEpe2lmKG89YS5pbmRleE9mKCI6Iiksbj1MdC50cmltKGEuc3Vic3RyKDAsbykpLnRvTG93ZXJDYXNlKCksaT1MdC50cmltKGEuc3Vic3RyKG8rMSkpLG4pe2lmKHRbbl0mJlNvLmluZGV4T2Yobik+PTApcmV0dXJuO249PT0ic2V0LWNvb2tpZSI/dFtuXT0odFtuXT90W25dOltdKS5jb25jYXQoW2ldKTp0W25dPXRbbl0/dFtuXSsiLCAiK2k6aX19KSx0fSxRcj1HLEZvPVFyLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgZT0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLG47ZnVuY3Rpb24gaShvKXt2YXIgcz1vO3JldHVybiBlJiYodC5zZXRBdHRyaWJ1dGUoImhyZWYiLHMpLHM9dC5ocmVmKSx0LnNldEF0dHJpYnV0ZSgiaHJlZiIscykse2hyZWY6dC5ocmVmLHByb3RvY29sOnQucHJvdG9jb2w/dC5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6dC5ob3N0LHNlYXJjaDp0LnNlYXJjaD90LnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOnQuaGFzaD90Lmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTp0Lmhvc3RuYW1lLHBvcnQ6dC5wb3J0LHBhdGhuYW1lOnQucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iP3QucGF0aG5hbWU6Ii8iK3QucGF0aG5hbWV9fXJldHVybiBuPWkod2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKHMpe3ZhciBhPVFyLmlzU3RyaW5nKHMpP2kocyk6cztyZXR1cm4gYS5wcm90b2NvbD09PW4ucHJvdG9jb2wmJmEuaG9zdD09PW4uaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7ZnVuY3Rpb24gJHQocil7dGhpcy5tZXNzYWdlPXJ9JHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkNhbmNlbCIrKHRoaXMubWVzc2FnZT8iOiAiK3RoaXMubWVzc2FnZToiIil9LCR0LnByb3RvdHlwZS5fX0NBTkNFTF9fPSEwO3ZhciBZZT0kdCxRZT1HLFBvPWJvLERvPXZvLE1vPXFyLENvPVJvLE9vPUlvLE5vPUZvLEd0PVlyLFVvPUplLEJvPVllLEtyPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPWUuZGF0YSxzPWUuaGVhZGVycyxhPWUucmVzcG9uc2VUeXBlLHU7ZnVuY3Rpb24gZigpe2UuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUodSksZS5zaWduYWwmJmUuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0Iix1KX1RZS5pc0Zvcm1EYXRhKG8pJiZkZWxldGUgc1siQ29udGVudC1UeXBlIl07dmFyIGM9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKGUuYXV0aCl7dmFyIGQ9ZS5hdXRoLnVzZXJuYW1lfHwiIix5PWUuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZS5hdXRoLnBhc3N3b3JkKSk6IiI7cy5BdXRob3JpemF0aW9uPSJCYXNpYyAiK2J0b2EoZCsiOiIreSl9dmFyIF89Q28oZS5iYXNlVVJMLGUudXJsKTtjLm9wZW4oZS5tZXRob2QudG9VcHBlckNhc2UoKSxNbyhfLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplciksITApLGMudGltZW91dD1lLnRpbWVvdXQ7ZnVuY3Rpb24gbSgpe2lmKCEhYyl7dmFyIHY9ImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBjP09vKGMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpOm51bGwsYj0hYXx8YT09PSJ0ZXh0Inx8YT09PSJqc29uIj9jLnJlc3BvbnNlVGV4dDpjLnJlc3BvbnNlLEE9e2RhdGE6YixzdGF0dXM6Yy5zdGF0dXMsc3RhdHVzVGV4dDpjLnN0YXR1c1RleHQsaGVhZGVyczp2LGNvbmZpZzplLHJlcXVlc3Q6Y307UG8oZnVuY3Rpb24oQyl7bihDKSxmKCl9LGZ1bmN0aW9uKEMpe2koQyksZigpfSxBKSxjPW51bGx9fWlmKCJvbmxvYWRlbmQiaW4gYz9jLm9ubG9hZGVuZD1tOmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWN8fGMucmVhZHlTdGF0ZSE9PTR8fGMuc3RhdHVzPT09MCYmIShjLnJlc3BvbnNlVVJMJiZjLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChtKX0sYy5vbmFib3J0PWZ1bmN0aW9uKCl7IWN8fChpKEd0KCJSZXF1ZXN0IGFib3J0ZWQiLGUsIkVDT05OQUJPUlRFRCIsYykpLGM9bnVsbCl9LGMub25lcnJvcj1mdW5jdGlvbigpe2koR3QoIk5ldHdvcmsgRXJyb3IiLGUsbnVsbCxjKSksYz1udWxsfSxjLm9udGltZW91dD1mdW5jdGlvbigpe3ZhciBiPWUudGltZW91dD8idGltZW91dCBvZiAiK2UudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixBPWUudHJhbnNpdGlvbmFsfHxVby50cmFuc2l0aW9uYWw7ZS50aW1lb3V0RXJyb3JNZXNzYWdlJiYoYj1lLnRpbWVvdXRFcnJvck1lc3NhZ2UpLGkoR3QoYixlLEEuY2xhcmlmeVRpbWVvdXRFcnJvcj8iRVRJTUVET1VUIjoiRUNPTk5BQk9SVEVEIixjKSksYz1udWxsfSxRZS5pc1N0YW5kYXJkQnJvd3NlckVudigpKXt2YXIgeD0oZS53aXRoQ3JlZGVudGlhbHN8fE5vKF8pKSYmZS54c3JmQ29va2llTmFtZT9Eby5yZWFkKGUueHNyZkNvb2tpZU5hbWUpOnZvaWQgMDt4JiYoc1tlLnhzcmZIZWFkZXJOYW1lXT14KX0ic2V0UmVxdWVzdEhlYWRlciJpbiBjJiZRZS5mb3JFYWNoKHMsZnVuY3Rpb24oYixBKXt0eXBlb2Ygbz4idSImJkEudG9Mb3dlckNhc2UoKT09PSJjb250ZW50LXR5cGUiP2RlbGV0ZSBzW0FdOmMuc2V0UmVxdWVzdEhlYWRlcihBLGIpfSksUWUuaXNVbmRlZmluZWQoZS53aXRoQ3JlZGVudGlhbHMpfHwoYy53aXRoQ3JlZGVudGlhbHM9ISFlLndpdGhDcmVkZW50aWFscyksYSYmYSE9PSJqc29uIiYmKGMucmVzcG9uc2VUeXBlPWUucmVzcG9uc2VUeXBlKSx0eXBlb2YgZS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmMuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGUub25Eb3dubG9hZFByb2dyZXNzKSx0eXBlb2YgZS5vblVwbG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZjLnVwbG9hZCYmYy51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGUub25VcGxvYWRQcm9ncmVzcyksKGUuY2FuY2VsVG9rZW58fGUuc2lnbmFsKSYmKHU9ZnVuY3Rpb24odil7IWN8fChpKCF2fHx2JiZ2LnR5cGU/bmV3IEJvKCJjYW5jZWxlZCIpOnYpLGMuYWJvcnQoKSxjPW51bGwpfSxlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnN1YnNjcmliZSh1KSxlLnNpZ25hbCYmKGUuc2lnbmFsLmFib3J0ZWQ/dSgpOmUuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0Iix1KSkpLG98fChvPW51bGwpLGMuc2VuZChvKX0pfSxPPUcsSnI9X28sa289WHIsTG89eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifTtmdW5jdGlvbiBacihyLGUpeyFPLmlzVW5kZWZpbmVkKHIpJiZPLmlzVW5kZWZpbmVkKHJbIkNvbnRlbnQtVHlwZSJdKSYmKHJbIkNvbnRlbnQtVHlwZSJdPWUpfWZ1bmN0aW9uICRvKCl7dmFyIHI7cmV0dXJuKHR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSJ8fHR5cGVvZiBwcm9jZXNzPCJ1IiYmT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nlc3MpPT09IltvYmplY3QgcHJvY2Vzc10iKSYmKHI9S3IpLHJ9ZnVuY3Rpb24gR28ocixlLHQpe2lmKE8uaXNTdHJpbmcocikpdHJ5e3JldHVybihlfHxKU09OLnBhcnNlKShyKSxPLnRyaW0ocil9Y2F0Y2gobil7aWYobi5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyBufXJldHVybih0fHxKU09OLnN0cmluZ2lmeSkocil9dmFyIEtlPXt0cmFuc2l0aW9uYWw6e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9LGFkYXB0ZXI6JG8oKSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe3JldHVybiBKcih0LCJBY2NlcHQiKSxKcih0LCJDb250ZW50LVR5cGUiKSxPLmlzRm9ybURhdGEoZSl8fE8uaXNBcnJheUJ1ZmZlcihlKXx8Ty5pc0J1ZmZlcihlKXx8Ty5pc1N0cmVhbShlKXx8Ty5pc0ZpbGUoZSl8fE8uaXNCbG9iKGUpP2U6Ty5pc0FycmF5QnVmZmVyVmlldyhlKT9lLmJ1ZmZlcjpPLmlzVVJMU2VhcmNoUGFyYW1zKGUpPyhacih0LCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIpLGUudG9TdHJpbmcoKSk6Ty5pc09iamVjdChlKXx8dCYmdFsiQ29udGVudC1UeXBlIl09PT0iYXBwbGljYXRpb24vanNvbiI/KFpyKHQsImFwcGxpY2F0aW9uL2pzb24iKSxHbyhlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXt2YXIgdD10aGlzLnRyYW5zaXRpb25hbHx8S2UudHJhbnNpdGlvbmFsLG49dCYmdC5zaWxlbnRKU09OUGFyc2luZyxpPXQmJnQuZm9yY2VkSlNPTlBhcnNpbmcsbz0hbiYmdGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYob3x8aSYmTy5pc1N0cmluZyhlKSYmZS5sZW5ndGgpdHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKHMpe2lmKG8pdGhyb3cgcy5uYW1lPT09IlN5bnRheEVycm9yIj9rbyhzLHRoaXMsIkVfSlNPTl9QQVJTRSIpOnN9cmV0dXJuIGV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fX07Ty5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCJdLGZ1bmN0aW9uKGUpe0tlLmhlYWRlcnNbZV09e319KSxPLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihlKXtLZS5oZWFkZXJzW2VdPU8ubWVyZ2UoTG8pfSk7dmFyIEplPUtlLHpvPUcsSG89SmUsVm89ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPXRoaXN8fEhvO3JldHVybiB6by5mb3JFYWNoKG4sZnVuY3Rpb24ocyl7ZT1zLmNhbGwoaSxlLHQpfSksZX0sZW49ZnVuY3Rpb24oZSl7cmV0dXJuISEoZSYmZS5fX0NBTkNFTF9fKX0sdG49Ryx6dD1WbyxXbz1lbixqbz1KZSxxbz1ZZTtmdW5jdGlvbiBIdChyKXtpZihyLmNhbmNlbFRva2VuJiZyLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxyLnNpZ25hbCYmci5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgcW8oImNhbmNlbGVkIil9dmFyIFhvPWZ1bmN0aW9uKGUpe0h0KGUpLGUuaGVhZGVycz1lLmhlYWRlcnN8fHt9LGUuZGF0YT16dC5jYWxsKGUsZS5kYXRhLGUuaGVhZGVycyxlLnRyYW5zZm9ybVJlcXVlc3QpLGUuaGVhZGVycz10bi5tZXJnZShlLmhlYWRlcnMuY29tbW9ufHx7fSxlLmhlYWRlcnNbZS5tZXRob2RdfHx7fSxlLmhlYWRlcnMpLHRuLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sZnVuY3Rpb24oaSl7ZGVsZXRlIGUuaGVhZGVyc1tpXX0pO3ZhciB0PWUuYWRhcHRlcnx8am8uYWRhcHRlcjtyZXR1cm4gdChlKS50aGVuKGZ1bmN0aW9uKGkpe3JldHVybiBIdChlKSxpLmRhdGE9enQuY2FsbChlLGkuZGF0YSxpLmhlYWRlcnMsZS50cmFuc2Zvcm1SZXNwb25zZSksaX0sZnVuY3Rpb24oaSl7cmV0dXJuIFdvKGkpfHwoSHQoZSksaSYmaS5yZXNwb25zZSYmKGkucmVzcG9uc2UuZGF0YT16dC5jYWxsKGUsaS5yZXNwb25zZS5kYXRhLGkucmVzcG9uc2UuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0KGkpfSl9LHo9Ryxybj1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIG49e307ZnVuY3Rpb24gaShjLGQpe3JldHVybiB6LmlzUGxhaW5PYmplY3QoYykmJnouaXNQbGFpbk9iamVjdChkKT96Lm1lcmdlKGMsZCk6ei5pc1BsYWluT2JqZWN0KGQpP3oubWVyZ2Uoe30sZCk6ei5pc0FycmF5KGQpP2Quc2xpY2UoKTpkfWZ1bmN0aW9uIG8oYyl7aWYoei5pc1VuZGVmaW5lZCh0W2NdKSl7aWYoIXouaXNVbmRlZmluZWQoZVtjXSkpcmV0dXJuIGkodm9pZCAwLGVbY10pfWVsc2UgcmV0dXJuIGkoZVtjXSx0W2NdKX1mdW5jdGlvbiBzKGMpe2lmKCF6LmlzVW5kZWZpbmVkKHRbY10pKXJldHVybiBpKHZvaWQgMCx0W2NdKX1mdW5jdGlvbiBhKGMpe2lmKHouaXNVbmRlZmluZWQodFtjXSkpe2lmKCF6LmlzVW5kZWZpbmVkKGVbY10pKXJldHVybiBpKHZvaWQgMCxlW2NdKX1lbHNlIHJldHVybiBpKHZvaWQgMCx0W2NdKX1mdW5jdGlvbiB1KGMpe2lmKGMgaW4gdClyZXR1cm4gaShlW2NdLHRbY10pO2lmKGMgaW4gZSlyZXR1cm4gaSh2b2lkIDAsZVtjXSl9dmFyIGY9e3VybDpzLG1ldGhvZDpzLGRhdGE6cyxiYXNlVVJMOmEsdHJhbnNmb3JtUmVxdWVzdDphLHRyYW5zZm9ybVJlc3BvbnNlOmEscGFyYW1zU2VyaWFsaXplcjphLHRpbWVvdXQ6YSx0aW1lb3V0TWVzc2FnZTphLHdpdGhDcmVkZW50aWFsczphLGFkYXB0ZXI6YSxyZXNwb25zZVR5cGU6YSx4c3JmQ29va2llTmFtZTphLHhzcmZIZWFkZXJOYW1lOmEsb25VcGxvYWRQcm9ncmVzczphLG9uRG93bmxvYWRQcm9ncmVzczphLGRlY29tcHJlc3M6YSxtYXhDb250ZW50TGVuZ3RoOmEsbWF4Qm9keUxlbmd0aDphLHRyYW5zcG9ydDphLGh0dHBBZ2VudDphLGh0dHBzQWdlbnQ6YSxjYW5jZWxUb2tlbjphLHNvY2tldFBhdGg6YSxyZXNwb25zZUVuY29kaW5nOmEsdmFsaWRhdGVTdGF0dXM6dX07cmV0dXJuIHouZm9yRWFjaChPYmplY3Qua2V5cyhlKS5jb25jYXQoT2JqZWN0LmtleXModCkpLGZ1bmN0aW9uKGQpe3ZhciB5PWZbZF18fG8sXz15KGQpO3ouaXNVbmRlZmluZWQoXykmJnkhPT11fHwobltkXT1fKX0pLG59LG5uPXt2ZXJzaW9uOiIwLjI1LjAifSxZbz1ubi52ZXJzaW9uLFZ0PXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaChmdW5jdGlvbihyLGUpe1Z0W3JdPWZ1bmN0aW9uKG4pe3JldHVybiB0eXBlb2Ygbj09PXJ8fCJhIisoZTwxPyJuICI6IiAiKStyfX0pO3ZhciBvbj17fTtWdC50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIGkobyxzKXtyZXR1cm4iW0F4aW9zIHYiK1lvKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrbysiJyIrcysobj8iLiAiK246IiIpfXJldHVybiBmdW5jdGlvbihvLHMsYSl7aWYoZT09PSExKXRocm93IG5ldyBFcnJvcihpKHMsIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpKTtyZXR1cm4gdCYmIW9uW3NdJiYob25bc109ITAsY29uc29sZS53YXJuKGkocywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSxlP2UobyxzLGEpOiEwfX07ZnVuY3Rpb24gUW8ocixlLHQpe2lmKHR5cGVvZiByIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iik7Zm9yKHZhciBuPU9iamVjdC5rZXlzKHIpLGk9bi5sZW5ndGg7aS0tID4wOyl7dmFyIG89bltpXSxzPWVbb107aWYocyl7dmFyIGE9cltvXSx1PWE9PT12b2lkIDB8fHMoYSxvLHIpO2lmKHUhPT0hMCl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb24gIitvKyIgbXVzdCBiZSAiK3UpO2NvbnRpbnVlfWlmKHQhPT0hMCl0aHJvdyBFcnJvcigiVW5rbm93biBvcHRpb24gIitvKX19dmFyIEtvPXthc3NlcnRPcHRpb25zOlFvLHZhbGlkYXRvcnM6VnR9LHNuPUcsSm89cXIsYW49cG8sdW49WG8sWmU9cm4sY249S28sVGU9Y24udmFsaWRhdG9ycztmdW5jdGlvbiBNZShyKXt0aGlzLmRlZmF1bHRzPXIsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IGFuLHJlc3BvbnNlOm5ldyBhbn19TWUucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgZT09InN0cmluZyI/KHQ9dHx8e30sdC51cmw9ZSk6dD1lfHx7fSwhdC51cmwpdGhyb3cgbmV3IEVycm9yKCJQcm92aWRlZCBjb25maWcgdXJsIGlzIG5vdCB2YWxpZCIpO3Q9WmUodGhpcy5kZWZhdWx0cyx0KSx0Lm1ldGhvZD90Lm1ldGhvZD10Lm1ldGhvZC50b0xvd2VyQ2FzZSgpOnRoaXMuZGVmYXVsdHMubWV0aG9kP3QubWV0aG9kPXRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk6dC5tZXRob2Q9ImdldCI7dmFyIG49dC50cmFuc2l0aW9uYWw7biE9PXZvaWQgMCYmY24uYXNzZXJ0T3B0aW9ucyhuLHtzaWxlbnRKU09OUGFyc2luZzpUZS50cmFuc2l0aW9uYWwoVGUuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6VGUudHJhbnNpdGlvbmFsKFRlLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6VGUudHJhbnNpdGlvbmFsKFRlLmJvb2xlYW4pfSwhMSk7dmFyIGk9W10sbz0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oXyl7dHlwZW9mIF8ucnVuV2hlbj09ImZ1bmN0aW9uIiYmXy5ydW5XaGVuKHQpPT09ITF8fChvPW8mJl8uc3luY2hyb25vdXMsaS51bnNoaWZ0KF8uZnVsZmlsbGVkLF8ucmVqZWN0ZWQpKX0pO3ZhciBzPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oXyl7cy5wdXNoKF8uZnVsZmlsbGVkLF8ucmVqZWN0ZWQpfSk7dmFyIGE7aWYoIW8pe3ZhciB1PVt1bix2b2lkIDBdO2ZvcihBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseSh1LGkpLHU9dS5jb25jYXQocyksYT1Qcm9taXNlLnJlc29sdmUodCk7dS5sZW5ndGg7KWE9YS50aGVuKHUuc2hpZnQoKSx1LnNoaWZ0KCkpO3JldHVybiBhfWZvcih2YXIgZj10O2kubGVuZ3RoOyl7dmFyIGM9aS5zaGlmdCgpLGQ9aS5zaGlmdCgpO3RyeXtmPWMoZil9Y2F0Y2goeSl7ZCh5KTticmVha319dHJ5e2E9dW4oZil9Y2F0Y2goeSl7cmV0dXJuIFByb21pc2UucmVqZWN0KHkpfWZvcig7cy5sZW5ndGg7KWE9YS50aGVuKHMuc2hpZnQoKSxzLnNoaWZ0KCkpO3JldHVybiBhfSxNZS5wcm90b3R5cGUuZ2V0VXJpPWZ1bmN0aW9uKGUpe2lmKCFlLnVybCl0aHJvdyBuZXcgRXJyb3IoIlByb3ZpZGVkIGNvbmZpZyB1cmwgaXMgbm90IHZhbGlkIik7cmV0dXJuIGU9WmUodGhpcy5kZWZhdWx0cyxlKSxKbyhlLnVybCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cPy8sIiIpfSxzbi5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihlKXtNZS5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KFplKG58fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihufHx7fSkuZGF0YX0pKX19KSxzbi5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oZSl7TWUucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQsbixpKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KFplKGl8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOm59KSl9fSk7dmFyIFpvPU1lLGVzPVllO2Z1bmN0aW9uIEFlKHIpe2lmKHR5cGVvZiByIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTt2YXIgZTt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24oaSl7ZT1pfSk7dmFyIHQ9dGhpczt0aGlzLnByb21pc2UudGhlbihmdW5jdGlvbihuKXtpZighIXQuX2xpc3RlbmVycyl7dmFyIGksbz10Ll9saXN0ZW5lcnMubGVuZ3RoO2ZvcihpPTA7aTxvO2krKyl0Ll9saXN0ZW5lcnNbaV0obik7dC5fbGlzdGVuZXJzPW51bGx9fSksdGhpcy5wcm9taXNlLnRoZW49ZnVuY3Rpb24obil7dmFyIGksbz1uZXcgUHJvbWlzZShmdW5jdGlvbihzKXt0LnN1YnNjcmliZShzKSxpPXN9KS50aGVuKG4pO3JldHVybiBvLmNhbmNlbD1mdW5jdGlvbigpe3QudW5zdWJzY3JpYmUoaSl9LG99LHIoZnVuY3Rpb24oaSl7dC5yZWFzb258fCh0LnJlYXNvbj1uZXcgZXMoaSksZSh0LnJlYXNvbikpfSl9QWUucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn0sQWUucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihlKXtpZih0aGlzLnJlYXNvbil7ZSh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChlKTp0aGlzLl9saXN0ZW5lcnM9W2VdfSxBZS5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oZSl7aWYoISF0aGlzLl9saXN0ZW5lcnMpe3ZhciB0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGUpO3QhPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0LDEpfX0sQWUuc291cmNlPWZ1bmN0aW9uKCl7dmFyIGUsdD1uZXcgQWUoZnVuY3Rpb24oaSl7ZT1pfSk7cmV0dXJue3Rva2VuOnQsY2FuY2VsOmV9fTt2YXIgdHM9QWUscnM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBlLmFwcGx5KG51bGwsbil9fSxucz1HLGlzPWZ1bmN0aW9uKGUpe3JldHVybiBucy5pc09iamVjdChlKSYmZS5pc0F4aW9zRXJyb3I9PT0hMH0sZm49Ryxvcz16cixldD1abyxzcz1ybixhcz1KZTtmdW5jdGlvbiBsbihyKXt2YXIgZT1uZXcgZXQociksdD1vcyhldC5wcm90b3R5cGUucmVxdWVzdCxlKTtyZXR1cm4gZm4uZXh0ZW5kKHQsZXQucHJvdG90eXBlLGUpLGZuLmV4dGVuZCh0LGUpLHQuY3JlYXRlPWZ1bmN0aW9uKGkpe3JldHVybiBsbihzcyhyLGkpKX0sdH12YXIgSj1sbihhcyk7Si5BeGlvcz1ldCxKLkNhbmNlbD1ZZSxKLkNhbmNlbFRva2VuPXRzLEouaXNDYW5jZWw9ZW4sSi5WRVJTSU9OPW5uLnZlcnNpb24sSi5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfSxKLnNwcmVhZD1ycyxKLmlzQXhpb3NFcnJvcj1pcyxPdC5leHBvcnRzPUosT3QuZXhwb3J0cy5kZWZhdWx0PUo7dmFyIHVzPU90LmV4cG9ydHM7Y2xhc3MgVHtpc0VtcHR5KCl7cmV0dXJuIXRoaXMuaXNQcmVzZW50KCl9c3RhdGljIG9mKGUpe2lmKGUhPW51bGwpcmV0dXJuIG5ldyBkbihlKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgcGFzc2VkIHZhbHVlIHdhcyBudWxsIG9yIHVuZGVmaW5lZC4iKX1zdGF0aWMgb2ZOb25OdWxsKGUpe3JldHVybiBULm9mKGUpfXN0YXRpYyBvZk51bGxhYmxlKGUpe3JldHVybiBlIT1udWxsP25ldyBkbihlKTpuZXcgbW59c3RhdGljIGVtcHR5KCl7cmV0dXJuIG5ldyBtbn1zdGF0aWMgZnJvbShlKXtzd2l0Y2goZS5raW5kKXtjYXNlInByZXNlbnQiOnJldHVybiBULm9mKGUudmFsdWUpO2Nhc2UiZW1wdHkiOnJldHVybiBULmVtcHR5KCk7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgcGFzc2VkIHZhbHVlIHdhcyBub3QgYW4gT3B0aW9uIHR5cGUuIil9fX1jbGFzcyBkbiBleHRlbmRzIFR7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnBheWxvYWQ9ZX1pc1ByZXNlbnQoKXtyZXR1cm4hMH1nZXQoKXtyZXR1cm4gdGhpcy5wYXlsb2FkfWlmUHJlc2VudChlKXtlKHRoaXMucGF5bG9hZCl9aWZQcmVzZW50T3JFbHNlKGUsdCl7ZSh0aGlzLnBheWxvYWQpfWZpbHRlcihlKXtyZXR1cm4gZSh0aGlzLnBheWxvYWQpP3RoaXM6VC5lbXB0eSgpfW1hcChlKXtjb25zdCB0PWUodGhpcy5wYXlsb2FkKTtyZXR1cm4gVC5vZk51bGxhYmxlKHQpfWZsYXRNYXAoZSl7cmV0dXJuIGUodGhpcy5wYXlsb2FkKX1vcihlKXtyZXR1cm4gdGhpc31vckVsc2UoZSl7cmV0dXJuIHRoaXMucGF5bG9hZH1vckVsc2VHZXQoZSl7cmV0dXJuIHRoaXMucGF5bG9hZH1vckVsc2VUaHJvdyhlKXtyZXR1cm4gdGhpcy5wYXlsb2FkfW9yTnVsbCgpe3JldHVybiB0aGlzLnBheWxvYWR9b3JVbmRlZmluZWQoKXtyZXR1cm4gdGhpcy5wYXlsb2FkfXRvT3B0aW9uKCl7cmV0dXJue2tpbmQ6InByZXNlbnQiLHZhbHVlOnRoaXMucGF5bG9hZH19bWF0Y2hlcyhlKXtyZXR1cm4gZS5wcmVzZW50KHRoaXMucGF5bG9hZCl9dG9KU09OKGUpe3JldHVybiB0aGlzLnBheWxvYWR9fWNsYXNzIG1uIGV4dGVuZHMgVHtpc1ByZXNlbnQoKXtyZXR1cm4hMX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCl9Z2V0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIG9wdGlvbmFsIGlzIG5vdCBwcmVzZW50LiIpfWlmUHJlc2VudChlKXt9aWZQcmVzZW50T3JFbHNlKGUsdCl7dCgpfWZpbHRlcihlKXtyZXR1cm4gdGhpc31tYXAoZSl7cmV0dXJuIFQuZW1wdHkoKX1mbGF0TWFwKGUpe3JldHVybiBULmVtcHR5KCl9b3IoZSl7cmV0dXJuIGUoKX1vckVsc2UoZSl7cmV0dXJuIGV9b3JFbHNlR2V0KGUpe3JldHVybiB0aGlzLm9yRWxzZShlKCkpfW9yRWxzZVRocm93KGUpe3Rocm93IGUoKX1vck51bGwoKXtyZXR1cm4gbnVsbH1vclVuZGVmaW5lZCgpe310b09wdGlvbigpe3JldHVybntraW5kOiJlbXB0eSJ9fW1hdGNoZXMoZSl7cmV0dXJuIGUuZW1wdHkoKX10b0pTT04oZSl7cmV0dXJuIG51bGx9fWNvbnN0IGNzPSIyLjAuMCI7ZnVuY3Rpb24gZnMocil7Z2xvYmFsVGhpcy5fdm9uYWdlTWVkaWFQcm9jZXNzb3JNZXRhZGF0YT1yfWZ1bmN0aW9uIGxzKCl7cmV0dXJuIGdsb2JhbFRoaXMuX3ZvbmFnZU1lZGlhUHJvY2Vzc29yTWV0YWRhdGF9Y2xhc3MgSHtjb25zdHJ1Y3Rvcigpe2NvbnN0IGU9bHMoKTt0aGlzLl9yZXBvcnQ9e2FjdGlvbjpULmVtcHR5KCksYXBwbGljYXRpb25JZDpULm9mTnVsbGFibGUoZSE9PXZvaWQgMCYmZSE9bnVsbD9lLmFwcElkOm51bGwpLHRpbWVzdGFtcDpEYXRlLm5vdygpLGZwczpULmVtcHR5KCksZnJhbWVzVHJhbnNmb3JtZWQ6VC5lbXB0eSgpLGd1aWQ6VC5lbXB0eSgpLGhpZ2hlc3RGcmFtZVRyYW5zZm9ybUNwdTpULmVtcHR5KCksbWVzc2FnZTpULmVtcHR5KCksc291cmNlOlQub2ZOdWxsYWJsZShlIT09dm9pZCAwJiZlIT1udWxsP2Uuc291cmNlVHlwZTpudWxsKSx0cmFuc2Zvcm1lZEZwczpULmVtcHR5KCksdHJhbnNmb3JtZXJUeXBlOlQuZW1wdHkoKSx2YXJpYXRpb246VC5lbXB0eSgpLHZpZGVvSGVpZ2h0OlQuZW1wdHkoKSx2aWRlb1dpZHRoOlQuZW1wdHkoKSx2ZXJzaW9uOmNzLGVycm9yOlQuZW1wdHkoKSxwcm94eVVybDpULm9mTnVsbGFibGUoZSE9PXZvaWQgMCYmZSE9bnVsbD9lLnByb3h5VXJsOm51bGwpfX1hY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3JlcG9ydC5hY3Rpb249VC5vZk51bGxhYmxlKGUpLHRoaXN9ZnJhbWVzVHJhbnNmb3JtZWQoZSl7cmV0dXJuIHRoaXMuX3JlcG9ydC5mcmFtZXNUcmFuc2Zvcm1lZD1ULm9mTnVsbGFibGUoZSksdGhpc31mcHMoZSl7cmV0dXJuIHRoaXMuX3JlcG9ydC5mcHM9VC5vZk51bGxhYmxlKGUpLHRoaXN9Z3VpZChlKXtyZXR1cm4gdGhpcy5fcmVwb3J0Lmd1aWQ9VC5vZk51bGxhYmxlKGUpLHRoaXN9bWVzc2FnZShlKXtyZXR1cm4gdGhpcy5fcmVwb3J0Lm1lc3NhZ2U9VC5vZk51bGxhYmxlKGUpLHRoaXN9dHJhbnNmb3JtZWRGcHMoZSl7cmV0dXJuIHRoaXMuX3JlcG9ydC50cmFuc2Zvcm1lZEZwcz1ULm9mTnVsbGFibGUoZSksdGhpc310cmFuc2Zvcm1lclR5cGUoZSl7cmV0dXJuIHRoaXMuX3JlcG9ydC50cmFuc2Zvcm1lclR5cGU9VC5vZk51bGxhYmxlKGUpLHRoaXN9dmFyaWF0aW9uKGUpe3JldHVybiB0aGlzLl9yZXBvcnQudmFyaWF0aW9uPVQub2ZOdWxsYWJsZShlKSx0aGlzfXZpZGVvSGVpZ2h0KGUpe3JldHVybiB0aGlzLl9yZXBvcnQudmlkZW9IZWlnaHQ9VC5vZk51bGxhYmxlKGUpLHRoaXN9dmlkZW9XaWR0aChlKXtyZXR1cm4gdGhpcy5fcmVwb3J0LnZpZGVvV2lkdGg9VC5vZk51bGxhYmxlKGUpLHRoaXN9ZXJyb3IoZSl7cmV0dXJuIHRoaXMuX3JlcG9ydC5lcnJvcj1ULm9mTnVsbGFibGUoZSksdGhpc31idWlsZCgpe3JldHVybiB0aGlzLl9yZXBvcnR9fWNvbnN0IGRzPXI9PkpTT04uc3RyaW5naWZ5KHIsKGUsdCk9PntpZih0IT09bnVsbClyZXR1cm4gdH0pO2NsYXNzIFZ7c3RhdGljIHJlcG9ydChlKXtyZXR1cm4gbmV3IFByb21pc2UoKHQsbik9PntpZihlLmFwcGxpY2F0aW9uSWQuaXNFbXB0eSgpfHxlLnNvdXJjZS5pc0VtcHR5KCkpe3QoInN1Y2Nlc3MiKTtyZXR1cm59bGV0IGk9dXMuY3JlYXRlKCksbz17dGltZW91dDoxZTQsdGltZW91dEVycm9yTWVzc2FnZToiUmVxdWVzdCB0aW1lb3V0IixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9fSxzPSJobGcudG9rYm94LmNvbS9wcm9kL2xvZ2dpbmcvdmNwX3dlYnJ0YyI7aWYoZS5wcm94eVVybC5pc0VtcHR5KCkpcz0iaHR0cHM6Ly8iK3M7ZWxzZXtsZXQgYTtlLnByb3h5VXJsLmdldCgpLnNsaWNlKGUucHJveHlVcmwuZ2V0KCkubGVuZ3RoLTEpIT09Ii8iP2E9ZS5wcm94eVVybC5nZXQoKSsiLyI6YT1lLnByb3h5VXJsLmdldCgpLHM9YStzfWkucG9zdChzLGRzKGUpLG8pLnRoZW4oYT0+e2NvbnNvbGUubG9nKGEpLHQoInN1Y2Nlc3MiKX0pLmNhdGNoKGE9Pntjb25zb2xlLmxvZyhhKSxuKGEpfSl9KX19dmFyIHR0LG1zPW5ldyBVaW50OEFycmF5KDE2KTtmdW5jdGlvbiBocygpe2lmKCF0dCYmKHR0PXR5cGVvZiBjcnlwdG88InUiJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKXx8dHlwZW9mIG1zQ3J5cHRvPCJ1IiYmdHlwZW9mIG1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcz09ImZ1bmN0aW9uIiYmbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQobXNDcnlwdG8pLCF0dCkpdGhyb3cgbmV3IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCIpO3JldHVybiB0dChtcyl9dmFyIHBzPS9eKD86WzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzEtNV1bMC05YS1mXXszfS1bODlhYl1bMC05YS1mXXszfS1bMC05YS1mXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaTtmdW5jdGlvbiB5cyhyKXtyZXR1cm4gdHlwZW9mIHI9PSJzdHJpbmciJiZwcy50ZXN0KHIpfWZvcih2YXIgTj1bXSxXdD0wO1d0PDI1NjsrK1d0KU4ucHVzaCgoV3QrMjU2KS50b1N0cmluZygxNikuc3Vic3RyKDEpKTtmdW5jdGlvbiBfcyhyKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MCx0PShOW3JbZSswXV0rTltyW2UrMV1dK05bcltlKzJdXStOW3JbZSszXV0rIi0iK05bcltlKzRdXStOW3JbZSs1XV0rIi0iK05bcltlKzZdXStOW3JbZSs3XV0rIi0iK05bcltlKzhdXStOW3JbZSs5XV0rIi0iK05bcltlKzEwXV0rTltyW2UrMTFdXStOW3JbZSsxMl1dK05bcltlKzEzXV0rTltyW2UrMTRdXStOW3JbZSsxNV1dKS50b0xvd2VyQ2FzZSgpO2lmKCF5cyh0KSl0aHJvdyBUeXBlRXJyb3IoIlN0cmluZ2lmaWVkIFVVSUQgaXMgaW52YWxpZCIpO3JldHVybiB0fWZ1bmN0aW9uIGhuKHIsZSx0KXtyPXJ8fHt9O3ZhciBuPXIucmFuZG9tfHwoci5ybmd8fGhzKSgpO2lmKG5bNl09bls2XSYxNXw2NCxuWzhdPW5bOF0mNjN8MTI4LGUpe3Q9dHx8MDtmb3IodmFyIGk9MDtpPDE2OysraSllW3QraV09bltpXTtyZXR1cm4gZX1yZXR1cm4gX3Mobil9Y29uc3Qgc2U9bmV3IFdlYWtNYXAscnQ9bmV3IFdlYWtNYXAsQ2U9bmV3IFdlYWtNYXAsanQ9U3ltYm9sKCJhbnlQcm9kdWNlciIpLHBuPVByb21pc2UucmVzb2x2ZSgpLG50PVN5bWJvbCgibGlzdGVuZXJBZGRlZCIpLGl0PVN5bWJvbCgibGlzdGVuZXJSZW1vdmVkIik7bGV0IHF0PSExO2Z1bmN0aW9uIHdlKHIpe2lmKHR5cGVvZiByIT0ic3RyaW5nIiYmdHlwZW9mIHIhPSJzeW1ib2wiKXRocm93IG5ldyBUeXBlRXJyb3IoImV2ZW50TmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgc3ltYm9sIil9ZnVuY3Rpb24gb3Qocil7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gUmUocixlKXtjb25zdCB0PXJ0LmdldChyKTtyZXR1cm4gdC5oYXMoZSl8fHQuc2V0KGUsbmV3IFNldCksdC5nZXQoZSl9ZnVuY3Rpb24gT2UocixlKXtjb25zdCB0PXR5cGVvZiBlPT0ic3RyaW5nInx8dHlwZW9mIGU9PSJzeW1ib2wiP2U6anQsbj1DZS5nZXQocik7cmV0dXJuIG4uaGFzKHQpfHxuLnNldCh0LG5ldyBTZXQpLG4uZ2V0KHQpfWZ1bmN0aW9uIHhzKHIsZSx0KXtjb25zdCBuPUNlLmdldChyKTtpZihuLmhhcyhlKSlmb3IoY29uc3QgaSBvZiBuLmdldChlKSlpLmVucXVldWUodCk7aWYobi5oYXMoanQpKXtjb25zdCBpPVByb21pc2UuYWxsKFtlLHRdKTtmb3IoY29uc3QgbyBvZiBuLmdldChqdCkpby5lbnF1ZXVlKGkpfX1mdW5jdGlvbiB5bihyLGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtsZXQgdD0hMSxuPSgpPT57fSxpPVtdO2NvbnN0IG89e2VucXVldWUocyl7aS5wdXNoKHMpLG4oKX0sZmluaXNoKCl7dD0hMCxuKCl9fTtmb3IoY29uc3QgcyBvZiBlKU9lKHIscykuYWRkKG8pO3JldHVybnthc3luYyBuZXh0KCl7cmV0dXJuIGk/aS5sZW5ndGg9PT0wP3Q/KGk9dm9pZCAwLHRoaXMubmV4dCgpKTooYXdhaXQgbmV3IFByb21pc2Uocz0+e249c30pLHRoaXMubmV4dCgpKTp7ZG9uZTohMSx2YWx1ZTphd2FpdCBpLnNoaWZ0KCl9Ontkb25lOiEwfX0sYXN5bmMgcmV0dXJuKHMpe2k9dm9pZCAwO2Zvcihjb25zdCBhIG9mIGUpT2UocixhKS5kZWxldGUobyk7cmV0dXJuIG4oKSxhcmd1bWVudHMubGVuZ3RoPjA/e2RvbmU6ITAsdmFsdWU6YXdhaXQgc306e2RvbmU6ITB9fSxbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9fX1mdW5jdGlvbiBfbihyKXtpZihyPT09dm9pZCAwKXJldHVybiB4bjtpZighQXJyYXkuaXNBcnJheShyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyIpO2Zvcihjb25zdCBlIG9mIHIpaWYoIXhuLmluY2x1ZGVzKGUpKXRocm93IHR5cGVvZiBlIT0ic3RyaW5nIj9uZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIGVsZW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpOm5ldyBFcnJvcihgJHtlfSBpcyBub3QgRW1pdHRlcnkgbWV0aG9kYCk7cmV0dXJuIHJ9Y29uc3QgWHQ9cj0+cj09PW50fHxyPT09aXQ7Y2xhc3MgaGV7c3RhdGljIG1peGluKGUsdCl7cmV0dXJuIHQ9X24odCksbj0+e2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImB0YXJnZXRgIG11c3QgYmUgZnVuY3Rpb24iKTtmb3IoY29uc3QgcyBvZiB0KWlmKG4ucHJvdG90eXBlW3NdIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgVGhlIHByb3BlcnR5IFxgJHtzfVxgIGFscmVhZHkgZXhpc3RzIG9uIFxgdGFyZ2V0XGBgKTtmdW5jdGlvbiBpKCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGUse2VudW1lcmFibGU6ITEsdmFsdWU6bmV3IGhlfSksdGhpc1tlXX1PYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsZSx7ZW51bWVyYWJsZTohMSxnZXQ6aX0pO2NvbnN0IG89cz0+ZnVuY3Rpb24oLi4uYSl7cmV0dXJuIHRoaXNbZV1bc10oLi4uYSl9O2Zvcihjb25zdCBzIG9mIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLHMse2VudW1lcmFibGU6ITEsdmFsdWU6byhzKX0pO3JldHVybiBufX1zdGF0aWMgZ2V0IGlzRGVidWdFbmFibGVkKCl7aWYodHlwZW9mIHByb2Nlc3MhPSJvYmplY3QiKXJldHVybiBxdDtjb25zdHtlbnY6ZX09cHJvY2Vzc3x8e2Vudjp7fX07cmV0dXJuIGUuREVCVUc9PT0iZW1pdHRlcnkifHxlLkRFQlVHPT09IioifHxxdH1zdGF0aWMgc2V0IGlzRGVidWdFbmFibGVkKGUpe3F0PWV9Y29uc3RydWN0b3IoZT17fSl7c2Uuc2V0KHRoaXMsbmV3IFNldCkscnQuc2V0KHRoaXMsbmV3IE1hcCksQ2Uuc2V0KHRoaXMsbmV3IE1hcCksdGhpcy5kZWJ1Zz1lLmRlYnVnfHx7fSx0aGlzLmRlYnVnLmVuYWJsZWQ9PT12b2lkIDAmJih0aGlzLmRlYnVnLmVuYWJsZWQ9ITEpLHRoaXMuZGVidWcubG9nZ2VyfHwodGhpcy5kZWJ1Zy5sb2dnZXI9KHQsbixpLG8pPT57bz1KU09OLnN0cmluZ2lmeShvKSx0eXBlb2YgaT09InN5bWJvbCImJihpPWkudG9TdHJpbmcoKSk7Y29uc3Qgcz1uZXcgRGF0ZSxhPWAke3MuZ2V0SG91cnMoKX06JHtzLmdldE1pbnV0ZXMoKX06JHtzLmdldFNlY29uZHMoKX0uJHtzLmdldE1pbGxpc2Vjb25kcygpfWA7Y29uc29sZS5sb2coYFske2F9XVtlbWl0dGVyeToke3R9XVske259XSBFdmVudCBOYW1lOiAke2l9CglkYXRhOiAke299YCl9KX1sb2dJZkRlYnVnRW5hYmxlZChlLHQsbil7KGhlLmlzRGVidWdFbmFibGVkfHx0aGlzLmRlYnVnLmVuYWJsZWQpJiZ0aGlzLmRlYnVnLmxvZ2dlcihlLHRoaXMuZGVidWcubmFtZSx0LG4pfW9uKGUsdCl7b3QodCksZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCBuIG9mIGUpd2UobiksUmUodGhpcyxuKS5hZGQodCksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlIixuLHZvaWQgMCksWHQobil8fHRoaXMuZW1pdChudCx7ZXZlbnROYW1lOm4sbGlzdGVuZXI6dH0pO3JldHVybiB0aGlzLm9mZi5iaW5kKHRoaXMsZSx0KX1vZmYoZSx0KXtvdCh0KSxlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IG4gb2YgZSl3ZShuKSxSZSh0aGlzLG4pLmRlbGV0ZSh0KSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJ1bnN1YnNjcmliZSIsbix2b2lkIDApLFh0KG4pfHx0aGlzLmVtaXQoaXQse2V2ZW50TmFtZTpuLGxpc3RlbmVyOnR9KX1vbmNlKGUpe3JldHVybiBuZXcgUHJvbWlzZSh0PT57Y29uc3Qgbj10aGlzLm9uKGUsaT0+e24oKSx0KGkpfSl9KX1ldmVudHMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpd2UodCk7cmV0dXJuIHluKHRoaXMsZSl9YXN5bmMgZW1pdChlLHQpe3dlKGUpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoImVtaXQiLGUsdCkseHModGhpcyxlLHQpO2NvbnN0IG49UmUodGhpcyxlKSxpPXNlLmdldCh0aGlzKSxvPVsuLi5uXSxzPVh0KGUpP1tdOlsuLi5pXTthd2FpdCBwbixhd2FpdCBQcm9taXNlLmFsbChbLi4uby5tYXAoYXN5bmMgYT0+e2lmKG4uaGFzKGEpKXJldHVybiBhKHQpfSksLi4ucy5tYXAoYXN5bmMgYT0+e2lmKGkuaGFzKGEpKXJldHVybiBhKGUsdCl9KV0pfWFzeW5jIGVtaXRTZXJpYWwoZSx0KXt3ZShlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJlbWl0U2VyaWFsIixlLHQpO2NvbnN0IG49UmUodGhpcyxlKSxpPXNlLmdldCh0aGlzKSxvPVsuLi5uXSxzPVsuLi5pXTthd2FpdCBwbjtmb3IoY29uc3QgYSBvZiBvKW4uaGFzKGEpJiZhd2FpdCBhKHQpO2Zvcihjb25zdCBhIG9mIHMpaS5oYXMoYSkmJmF3YWl0IGEoZSx0KX1vbkFueShlKXtyZXR1cm4gb3QoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlQW55Iix2b2lkIDAsdm9pZCAwKSxzZS5nZXQodGhpcykuYWRkKGUpLHRoaXMuZW1pdChudCx7bGlzdGVuZXI6ZX0pLHRoaXMub2ZmQW55LmJpbmQodGhpcyxlKX1hbnlFdmVudCgpe3JldHVybiB5bih0aGlzKX1vZmZBbnkoZSl7b3QoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLHRoaXMuZW1pdChpdCx7bGlzdGVuZXI6ZX0pLHNlLmdldCh0aGlzKS5kZWxldGUoZSl9Y2xlYXJMaXN0ZW5lcnMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpaWYodGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiY2xlYXIiLHQsdm9pZCAwKSx0eXBlb2YgdD09InN0cmluZyJ8fHR5cGVvZiB0PT0ic3ltYm9sIil7UmUodGhpcyx0KS5jbGVhcigpO2NvbnN0IG49T2UodGhpcyx0KTtmb3IoY29uc3QgaSBvZiBuKWkuZmluaXNoKCk7bi5jbGVhcigpfWVsc2V7c2UuZ2V0KHRoaXMpLmNsZWFyKCk7Zm9yKGNvbnN0IG4gb2YgcnQuZ2V0KHRoaXMpLnZhbHVlcygpKW4uY2xlYXIoKTtmb3IoY29uc3QgbiBvZiBDZS5nZXQodGhpcykudmFsdWVzKCkpe2Zvcihjb25zdCBpIG9mIG4paS5maW5pc2goKTtuLmNsZWFyKCl9fX1saXN0ZW5lckNvdW50KGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtsZXQgdD0wO2Zvcihjb25zdCBuIG9mIGUpe2lmKHR5cGVvZiBuPT0ic3RyaW5nIil7dCs9c2UuZ2V0KHRoaXMpLnNpemUrUmUodGhpcyxuKS5zaXplK09lKHRoaXMsbikuc2l6ZStPZSh0aGlzKS5zaXplO2NvbnRpbnVlfXR5cGVvZiBuPCJ1IiYmd2UobiksdCs9c2UuZ2V0KHRoaXMpLnNpemU7Zm9yKGNvbnN0IGkgb2YgcnQuZ2V0KHRoaXMpLnZhbHVlcygpKXQrPWkuc2l6ZTtmb3IoY29uc3QgaSBvZiBDZS5nZXQodGhpcykudmFsdWVzKCkpdCs9aS5zaXplfXJldHVybiB0fWJpbmRNZXRob2RzKGUsdCl7aWYodHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJgdGFyZ2V0YCBtdXN0IGJlIGFuIG9iamVjdCIpO3Q9X24odCk7Zm9yKGNvbnN0IG4gb2YgdCl7aWYoZVtuXSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm9wZXJ0eSBcYCR7bn1cYCBhbHJlYWR5IGV4aXN0cyBvbiBcYHRhcmdldFxgYCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMSx2YWx1ZTp0aGlzW25dLmJpbmQodGhpcyl9KX19fWNvbnN0IHhuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlLnByb3RvdHlwZSkuZmlsdGVyKHI9PnIhPT0iY29uc3RydWN0b3IiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaGUsImxpc3RlbmVyQWRkZWQiLHt2YWx1ZTpudCx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoZSwibGlzdGVuZXJSZW1vdmVkIix7dmFsdWU6aXQsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KTt2YXIgWXQ9aGU7ZnVuY3Rpb24gZ3Mocil7cmV0dXJuIHR5cGVvZiByPT0ib2JqZWN0IiYmciE9PW51bGwmJiJtZXNzYWdlImluIHImJnR5cGVvZiByLm1lc3NhZ2U9PSJzdHJpbmcifWZ1bmN0aW9uIGJzKHIpe2lmKGdzKHIpKXJldHVybiByO3RyeXtyZXR1cm4gbmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KHIpKX1jYXRjaHtyZXR1cm4gbmV3IEVycm9yKFN0cmluZyhyKSl9fWZ1bmN0aW9uIFF0KHIpe3JldHVybiBicyhyKS5tZXNzYWdlfXZhciBLdD0ocj0+KHIucGlwZWxpbmVfZW5kZWQ9InBpcGVsaW5lX2VuZGVkIixyLnBpcGVsaW5lX2VuZGVkX3dpdGhfZXJyb3I9InBpcGVsaW5lX2VuZGVkX3dpdGhfZXJyb3IiLHIucGlwZWxpbmVfc3RhcnRlZD0icGlwZWxpbmVfc3RhcnRlZCIsci5waXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3I9InBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvciIsci5waXBlbGluZV9yZXN0YXJ0ZWQ9InBpcGVsaW5lX3Jlc3RhcnRlZCIsci5waXBlbGluZV9yZXN0YXJ0ZWRfd2l0aF9lcnJvcj0icGlwZWxpbmVfcmVzdGFydGVkX3dpdGhfZXJyb3IiLHIpKShLdHx8e30pO2NvbnN0IHZzPTUwMCxFcz0uODtjbGFzcyBUcyBleHRlbmRzIFl0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKSx0aGlzLmluZGV4Xz10LHRoaXMudXVpZF89aG4oKSx0aGlzLmZyYW1lc1RyYW5zZm9ybWVkXz0wLHRoaXMudHJhbnNmb3JtZXJfPWUsdGhpcy5zaG91bGRTdG9wXz0hMSx0aGlzLmlzRmxhc2hlZF89ITEsdGhpcy5mcmFtZXNGcm9tU291cmNlXz0wLHRoaXMuZnBzXz0wLHRoaXMubWVkaWFUcmFuc2Zvcm1lclFvc1JlcG9ydFN0YXJ0VGltZXN0YW1wXz0wLHRoaXMudmlkZW9IZWlnaHRfPTAsdGhpcy52aWRlb1dpZHRoXz0wLHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfPS0xLHRoaXMudHJhbnNmb3JtZXJUeXBlXz0iQ3VzdG9tIiwiZ2V0VHJhbnNmb3JtZXJUeXBlImluIGUmJih0aGlzLnRyYW5zZm9ybWVyVHlwZV89ZS5nZXRUcmFuc2Zvcm1lclR5cGUoKSk7Y29uc3Qgbj1uZXcgSCgpLmFjdGlvbigiTWVkaWFUcmFuc2Zvcm1lciIpLmd1aWQodGhpcy51dWlkXykudHJhbnNmb3JtZXJUeXBlKHRoaXMudHJhbnNmb3JtZXJUeXBlXykudmFyaWF0aW9uKCJDcmVhdGUiKS5idWlsZCgpO1YucmVwb3J0KG4pfXNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMudHJhY2tFeHBlY3RlZFJhdGVfPWV9YXN5bmMgc3RhcnQoZSl7aWYodGhpcy5jb250cm9sbGVyXz1lLHRoaXMudHJhbnNmb3JtZXJfJiZ0eXBlb2YgdGhpcy50cmFuc2Zvcm1lcl8uc3RhcnQ9PSJmdW5jdGlvbiIpdHJ5e2F3YWl0IHRoaXMudHJhbnNmb3JtZXJfLnN0YXJ0KGUpfWNhdGNoKHQpe2NvbnN0IG49bmV3IEgoKS5hY3Rpb24oIk1lZGlhVHJhbnNmb3JtZXIiKS5ndWlkKHRoaXMudXVpZF8pLm1lc3NhZ2UobmUuZXJyb3JzLnRyYW5zZm9ybWVyX3N0YXJ0KS50cmFuc2Zvcm1lclR5cGUodGhpcy50cmFuc2Zvcm1lclR5cGVfKS52YXJpYXRpb24oIkVycm9yIikuZXJyb3IoUXQodCkpLmJ1aWxkKCk7Vi5yZXBvcnQobik7Y29uc3QgaT17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sZXJyb3I6dCxmdW5jdGlvbjoic3RhcnQifTt0aGlzLmVtaXQoImVycm9yIixpKX19YXN5bmMgdHJhbnNmb3JtKGUsdCl7dmFyIG4saSxvLHM7aWYodGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfPT09MCYmKHRoaXMubWVkaWFUcmFuc2Zvcm1lclFvc1JlcG9ydFN0YXJ0VGltZXN0YW1wXz1EYXRlLm5vdygpKSxlIGluc3RhbmNlb2YgVmlkZW9GcmFtZSYmKHRoaXMudmlkZW9IZWlnaHRfPShuPWU9PW51bGw/dm9pZCAwOmUuZGlzcGxheUhlaWdodCkhPW51bGw/bjowLHRoaXMudmlkZW9XaWR0aF89KGk9ZT09bnVsbD92b2lkIDA6ZS5kaXNwbGF5V2lkdGgpIT1udWxsP2k6MCksKyt0aGlzLmZyYW1lc0Zyb21Tb3VyY2VfLHRoaXMudHJhbnNmb3JtZXJfKWlmKHRoaXMuc2hvdWxkU3RvcF8pY29uc29sZS53YXJuKCJbUGlwZWxpbmVdIGZsdXNoIGZyb20gdHJhbnNmb3JtIiksZS5jbG9zZSgpLHRoaXMuZmx1c2godCksdC50ZXJtaW5hdGUoKTtlbHNlIHRyeXthd2FpdCgocz0obz10aGlzLnRyYW5zZm9ybWVyXykudHJhbnNmb3JtKT09bnVsbD92b2lkIDA6cy5jYWxsKG8sZSx0KSksKyt0aGlzLmZyYW1lc1RyYW5zZm9ybWVkXyx0aGlzLmZyYW1lc1RyYW5zZm9ybWVkXz09PXZzJiZ0aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnQoKX1jYXRjaChhKXtjb25zdCB1PW5ldyBIKCkuYWN0aW9uKCJNZWRpYVRyYW5zZm9ybWVyIikuZ3VpZCh0aGlzLnV1aWRfKS5tZXNzYWdlKG5lLmVycm9ycy50cmFuc2Zvcm1lcl90cmFuc2Zvcm0pLnRyYW5zZm9ybWVyVHlwZSh0aGlzLnRyYW5zZm9ybWVyVHlwZV8pLnZhcmlhdGlvbigiRXJyb3IiKS5lcnJvcihRdChhKSkuYnVpbGQoKTtWLnJlcG9ydCh1KTtjb25zdCBmPXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjphLGZ1bmN0aW9uOiJ0cmFuc2Zvcm0ifTt0aGlzLmVtaXQoImVycm9yIixmKX19YXN5bmMgZmx1c2goZSl7aWYodGhpcy50cmFuc2Zvcm1lcl8mJnR5cGVvZiB0aGlzLnRyYW5zZm9ybWVyXy5mbHVzaD09ImZ1bmN0aW9uIiYmIXRoaXMuaXNGbGFzaGVkXyl7dGhpcy5pc0ZsYXNoZWRfPSEwO3RyeXthd2FpdCB0aGlzLnRyYW5zZm9ybWVyXy5mbHVzaChlKX1jYXRjaChuKXtjb25zdCBpPW5ldyBIKCkuYWN0aW9uKCJNZWRpYVRyYW5zZm9ybWVyIikuZ3VpZCh0aGlzLnV1aWRfKS5tZXNzYWdlKG5lLmVycm9ycy50cmFuc2Zvcm1lcl9mbHVzaCkudHJhbnNmb3JtZXJUeXBlKHRoaXMudHJhbnNmb3JtZXJUeXBlXykudmFyaWF0aW9uKCJFcnJvciIpLmVycm9yKFF0KG4pKS5idWlsZCgpO1YucmVwb3J0KGkpO2NvbnN0IG89e2V2ZW50TWV0YURhdGE6e3RyYW5zZm9ybWVySW5kZXg6dGhpcy5pbmRleF99LGVycm9yOm4sZnVuY3Rpb246ImZsdXNoIn07dGhpcy5lbWl0KCJlcnJvciIsbyl9fXRoaXMubWVkaWFUcmFuc2Zvcm1lclFvc1JlcG9ydCgpO2NvbnN0IHQ9bmV3IEgoKS5hY3Rpb24oIk1lZGlhVHJhbnNmb3JtZXIiKS5ndWlkKHRoaXMudXVpZF8pLnRyYW5zZm9ybWVyVHlwZSh0aGlzLnRyYW5zZm9ybWVyVHlwZV8pLnZhcmlhdGlvbigiRGVsZXRlIikuYnVpbGQoKTtWLnJlcG9ydCh0KX1zdG9wKCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gU3RvcCBzdHJlYW0uIiksdGhpcy5jb250cm9sbGVyXyYmKHRoaXMuZmx1c2godGhpcy5jb250cm9sbGVyXyksdGhpcy5jb250cm9sbGVyXy50ZXJtaW5hdGUoKSksdGhpcy5zaG91bGRTdG9wXz0hMH1tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0KCl7bGV0IGU9KERhdGUubm93KCktdGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfKS8xZTMsdD10aGlzLmZyYW1lc0Zyb21Tb3VyY2VfL2Usbj10aGlzLmZyYW1lc1RyYW5zZm9ybWVkXy9lO2lmKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfIT0tMSYmdGhpcy50cmFja0V4cGVjdGVkUmF0ZV8qRXM+dCl7Y29uc3Qgbz17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sd2FybmluZ1R5cGU6ImZwc19kcm9wIixkcm9wSW5mbzp7cmVxdWVzdGVkOnRoaXMudHJhY2tFeHBlY3RlZFJhdGVfLGN1cnJlbnQ6dH19O3RoaXMuZW1pdCgid2FybiIsbyl9Y29uc3QgaT1uZXcgSCgpLmFjdGlvbigiTWVkaWFUcmFuc2Zvcm1lciIpLmZwcyh0KS50cmFuc2Zvcm1lZEZwcyhuKS5mcmFtZXNUcmFuc2Zvcm1lZCh0aGlzLmZyYW1lc1RyYW5zZm9ybWVkXykuZ3VpZCh0aGlzLnV1aWRfKS50cmFuc2Zvcm1lclR5cGUodGhpcy50cmFuc2Zvcm1lclR5cGVfKS52aWRlb0hlaWdodCh0aGlzLnZpZGVvSGVpZ2h0XykudmlkZW9XaWR0aCh0aGlzLnZpZGVvV2lkdGhfKS52YXJpYXRpb24oIlFvUyIpLmJ1aWxkKCk7Vi5yZXBvcnQoaSksdGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfPTAsdGhpcy5mcmFtZXNGcm9tU291cmNlXz0wLHRoaXMuZnJhbWVzVHJhbnNmb3JtZWRfPTB9fWNsYXNzIEFzIGV4dGVuZHMgWXR7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnRyYW5zZm9ybWVyc189W10sdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTE7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCBuPW5ldyBUcyhlW3RdLHQpO24ub24oImVycm9yIixpPT57dGhpcy5lbWl0KCJlcnJvciIsaSl9KSxuLm9uKCJ3YXJuIixpPT57dGhpcy5lbWl0KCJ3YXJuIixpKX0pLHRoaXMudHJhbnNmb3JtZXJzXy5wdXNoKG4pfX1zZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz1lO2ZvcihsZXQgdCBvZiB0aGlzLnRyYW5zZm9ybWVyc18pdC5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyl9YXN5bmMgc3RhcnQoZSx0KXtpZighdGhpcy50cmFuc2Zvcm1lcnNffHx0aGlzLnRyYW5zZm9ybWVyc18ubGVuZ3RoPT09MCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gTm8gdHJhbnNmb3JtZXJzLiIpO3JldHVybn10cnl7bGV0IG49ZTtmb3IobGV0IGkgb2YgdGhpcy50cmFuc2Zvcm1lcnNfKWU9ZS5waXBlVGhyb3VnaChuZXcgVHJhbnNmb3JtU3RyZWFtKGkpKTtlLnBpcGVUbyh0KS50aGVuKGFzeW5jKCk9Pntjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTZXR1cC4iKSxhd2FpdCB0LmFib3J0KCksYXdhaXQgbi5jYW5jZWwoKSx0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX2VuZGVkIil9KS5jYXRjaChhc3luYyBpPT57ZS5jYW5jZWwoKS50aGVuKCgpPT57Y29uc29sZS5sb2coIltQaXBlbGluZV0gU2h1dHRpbmcgZG93biBzdHJlYW1zIGFmdGVyIGFib3J0LiIpfSkuY2F0Y2gobz0+e2NvbnNvbGUuZXJyb3IoIltQaXBlbGluZV0gRXJyb3IgZnJvbSBzdHJlYW0gdHJhbnNmb3JtOiIsbyl9KSxhd2FpdCB0LmFib3J0KGkpLGF3YWl0IG4uY2FuY2VsKGkpLHRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIiwicGlwZWxpbmVfZW5kZWRfd2l0aF9lcnJvciIpfSl9Y2F0Y2h7dGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3IiKSx0aGlzLmRlc3Ryb3koKTtyZXR1cm59dGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9zdGFydGVkIiksY29uc29sZS5sb2coIltQaXBlbGluZV0gUGlwZWxpbmUgc3RhcnRlZC4iKX1hc3luYyBkZXN0cm95KCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gRGVzdHJveWluZyBQaXBlbGluZS4iKTtmb3IobGV0IGUgb2YgdGhpcy50cmFuc2Zvcm1lcnNfKWUuc3RvcCgpfX1jbGFzcyB3cyBleHRlbmRzIFl0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnV1aWRfPWhuKCksdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTE7Y29uc3QgZT1uZXcgSCgpLmFjdGlvbigiTWVkaWFQcm9jZXNzb3IiKS5ndWlkKHRoaXMudXVpZF8pLnZhcmlhdGlvbigiQ3JlYXRlIikuYnVpbGQoKTtWLnJlcG9ydChlKX1zZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz1lLHRoaXMucGlwZWxpbmVfJiZ0aGlzLnBpcGVsaW5lXy5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyl9dHJhbnNmb3JtKGUsdCl7cmV0dXJuIHRoaXMucmVhZGFibGVfPWUsdGhpcy53cml0YWJsZV89dCx0aGlzLnRyYW5zZm9ybUludGVybmFsKCl9dHJhbnNmb3JtSW50ZXJuYWwoKXtyZXR1cm4gbmV3IFByb21pc2UoKGUsdCk9PntpZighdGhpcy50cmFuc2Zvcm1lcnNffHx0aGlzLnRyYW5zZm9ybWVyc18ubGVuZ3RoPT09MCl7Y29uc3QgaT1uZXcgSCgpLmFjdGlvbigiTWVkaWFQcm9jZXNzb3IiKS5ndWlkKHRoaXMudXVpZF8pLm1lc3NhZ2UobmUuZXJyb3JzLnRyYW5zZm9ybWVyX25vbmUpLnZhcmlhdGlvbigiRXJyb3IiKS5idWlsZCgpO1YucmVwb3J0KGkpLHQoIltNZWRpYVByb2Nlc3Nvcl0gTmVlZCB0byBzZXQgdHJhbnNmb3JtZXJzLiIpO3JldHVybn1pZighdGhpcy5yZWFkYWJsZV8pe2NvbnN0IGk9bmV3IEgoKS5hY3Rpb24oIk1lZGlhUHJvY2Vzc29yIikuZ3VpZCh0aGlzLnV1aWRfKS5tZXNzYWdlKG5lLmVycm9ycy5yZWFkYWJsZV9udWxsKS52YXJpYXRpb24oIkVycm9yIikuYnVpbGQoKTtWLnJlcG9ydChpKSx0KCJbTWVkaWFQcm9jZXNzb3JdIFJlYWRhYmxlIGlzIG51bGwuIik7cmV0dXJufWlmKCF0aGlzLndyaXRhYmxlXyl7Y29uc3QgaT1uZXcgSCgpLmFjdGlvbigiTWVkaWFQcm9jZXNzb3IiKS5ndWlkKHRoaXMudXVpZF8pLm1lc3NhZ2UobmUuZXJyb3JzLndyaXRhYmxlX251bGwpLnZhcmlhdGlvbigiRXJyb3IiKS5idWlsZCgpO1YucmVwb3J0KGkpLHQoIltNZWRpYVByb2Nlc3Nvcl0gV3JpdGFibGUgaXMgbnVsbC4iKTtyZXR1cm59bGV0IG49ITE7dGhpcy5waXBlbGluZV8mJihuPSEwLHRoaXMucGlwZWxpbmVfLmNsZWFyTGlzdGVuZXJzKCksdGhpcy5waXBlbGluZV8uZGVzdHJveSgpKSx0aGlzLnBpcGVsaW5lXz1uZXcgQXModGhpcy50cmFuc2Zvcm1lcnNfKSx0aGlzLnBpcGVsaW5lXy5vbigid2FybiIsaT0+e3RoaXMuZW1pdCgid2FybiIsaSl9KSx0aGlzLnBpcGVsaW5lXy5vbigiZXJyb3IiLGk9Pnt0aGlzLmVtaXQoImVycm9yIixpKX0pLHRoaXMucGlwZWxpbmVfLm9uKCJwaXBlbGluZUluZm8iLGk9PntuJiYoaT09PSJwaXBlbGluZV9zdGFydGVkIj9pPUt0LnBpcGVsaW5lX3Jlc3RhcnRlZDppPT09InBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvciImJihpPUt0LnBpcGVsaW5lX3Jlc3RhcnRlZF93aXRoX2Vycm9yKSksdGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLGkpfSksdGhpcy50cmFja0V4cGVjdGVkUmF0ZV8hPS0xJiZ0aGlzLnBpcGVsaW5lXy5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyksdGhpcy5waXBlbGluZV8uc3RhcnQodGhpcy5yZWFkYWJsZV8sdGhpcy53cml0YWJsZV8pLnRoZW4oKCk9PntlKCl9KS5jYXRjaChpPT57dChpKX0pfSl9c2V0VHJhbnNmb3JtZXJzKGUpe2NvbnN0IHQ9bmV3IEgoKS5hY3Rpb24oIk1lZGlhUHJvY2Vzc29yIikuZ3VpZCh0aGlzLnV1aWRfKS5tZXNzYWdlKG5lLnVwZGF0ZXMudHJhbnNmb3JtZXJfbmV3KS52YXJpYXRpb24oIlVwZGF0ZSIpLmJ1aWxkKCk7cmV0dXJuIFYucmVwb3J0KHQpLHRoaXMudHJhbnNmb3JtZXJzXz1lLHRoaXMucmVhZGFibGVfJiZ0aGlzLndyaXRhYmxlXz90aGlzLnRyYW5zZm9ybUludGVybmFsKCk6UHJvbWlzZS5yZXNvbHZlKCl9ZGVzdHJveSgpe3JldHVybiBuZXcgUHJvbWlzZShlPT57dGhpcy5waXBlbGluZV8mJnRoaXMucGlwZWxpbmVfLmRlc3Ryb3koKTtjb25zdCB0PW5ldyBIKCkuYWN0aW9uKCJNZWRpYVByb2Nlc3NvciIpLmd1aWQodGhpcy51dWlkXykudmFyaWF0aW9uKCJEZWxldGUiKS5idWlsZCgpO1YucmVwb3J0KHQpLGUoKX0pfX12YXIgc3Q9KHI9PihyLkxvdz0iTG93IixyLkhpZ2g9IkhpZ2giLHIpKShzdHx8e30pO2FzeW5jIGZ1bmN0aW9uIGduKHIpe3JldHVybiBuZXcgUHJvbWlzZShlPT57c2V0VGltZW91dCgoKT0+e2UoKX0scil9KX1jbGFzcyBSc3tjb25zdHJ1Y3RvcihlKXtwKHRoaXMsImNvbnRleHQiKTtwKHRoaXMsImV4dGVuc2lvbiIpO3AodGhpcywicXVlcmllcyIsW10pO3AodGhpcywiYWN0aXZlUXVlcnkiKTt0aGlzLmNvbnRleHQ9ZSx0aGlzLmV4dGVuc2lvbj1lLmdldEV4dGVuc2lvbigiRVhUX2Rpc2pvaW50X3RpbWVyX3F1ZXJ5X3dlYmdsMiIpfXN0YXJ0KCl7fXN0b3AoKXt0aGlzLmFjdGl2ZVF1ZXJ5JiZ0aGlzLmNvbnRleHQuZW5kUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCl9cHVzaENvbnRleHQoZSl7dGhpcy5jcmVhdGVRdWVyeSgiUFVTSCIsZSl9cG9wQ29udGV4dChlKXt0aGlzLmNyZWF0ZVF1ZXJ5KCJQT1AiLGUpfWNyZWF0ZVF1ZXJ5KGUsdCl7dGhpcy5hY3RpdmVRdWVyeSYmdGhpcy5jb250ZXh0LmVuZFF1ZXJ5KHRoaXMuZXh0ZW5zaW9uLlRJTUVfRUxBUFNFRF9FWFQpLHRoaXMuYWN0aXZlUXVlcnk9dGhpcy5jb250ZXh0LmNyZWF0ZVF1ZXJ5KCksdGhpcy5jb250ZXh0LmJlZ2luUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCx0aGlzLmFjdGl2ZVF1ZXJ5KSx0aGlzLnF1ZXJpZXMucHVzaCh7bmFtZTp0LGFjdGlvbjplLHF1ZXJ5OnRoaXMuYWN0aXZlUXVlcnl9KX1hc3luYyBnZXRSZXNvbHZlZFF1ZXJpZXMoKXtjb25zdCBlPShhd2FpdCBQcm9taXNlLmFsbChbLi4udGhpcy5xdWVyaWVzXS5tYXAodD0+dGhpcy5yZXNvbHZlUXVlcnkodCkpKSkuZmlsdGVyKHQ9PnQpO2ZvcihsZXQgdD0xO3Q8ZS5sZW5ndGg7Kyt0KWVbdF0udGltZXN0YW1wKz1lW3QtMV0uZHVyYXRpb24rZVt0LTFdLnRpbWVzdGFtcDtyZXR1cm4gZX1hc3luYyByZXNvbHZlUXVlcnkoZSl7aWYoIWF3YWl0IHRoaXMuYXdhaXRRdWVyeUF2YWlsYWJsZShlKSl7Y29uc29sZS5sb2coIlVuYXdhaXRhYmxlIHF1ZXJ5IixlKTtyZXR1cm59aWYodGhpcy5jb250ZXh0LmdldFBhcmFtZXRlcih0aGlzLmV4dGVuc2lvbi5HUFVfRElTSk9JTlRfRVhUKSl7Y29uc29sZS5sb2coIkRpc2pvaW50ZWQgcXVlcnkiLGUpO3JldHVybn1yZXR1cm57Li4uZSxkdXJhdGlvbjp0aGlzLmNvbnRleHQuZ2V0UXVlcnlQYXJhbWV0ZXIoZS5xdWVyeSx0aGlzLmNvbnRleHQuUVVFUllfUkVTVUxUKSx0aW1lc3RhbXA6MH19YXN5bmMgYXdhaXRRdWVyeUF2YWlsYWJsZShlKXtmb3IobGV0IHQ9MDt0PDEwOysrdCl7aWYodGhpcy5jb250ZXh0LmdldFF1ZXJ5UGFyYW1ldGVyKGUucXVlcnksdGhpcy5jb250ZXh0LlFVRVJZX1JFU1VMVF9BVkFJTEFCTEUpKXJldHVybiBlO2F3YWl0IGduKDIwMCl9fX0vKiBAbGljZW5zZSB0d2dsLmpzIDUuMi4wIENvcHlyaWdodCAoYykgMjAxNSwgR3JlZ2cgVGF2YXJlcyBBbGwgUmlnaHRzIFJlc2VydmVkLgpBdmFpbGFibGUgdmlhIHRoZSBNSVQgbGljZW5zZS4Kc2VlOiBodHRwOi8vZ2l0aHViLmNvbS9ncmVnZ21hbi90d2dsLmpzIGZvciBkZXRhaWxzICovY29uc3QgSnQ9NTEyMCxOZT01MTIxLFp0PTUxMjIsZXI9NTEyMyx0cj01MTI0LHJyPTUxMjUsbnI9NTEyNixTcz0zMjgxOSxJcz0zMjgyMCxGcz0zMzYzNSxQcz01MTMxLERzPTMzNjQwLE1zPTM1ODk5LENzPTM1OTAyLE9zPTM2MjY5LE5zPTM0MDQyLGJuPXt9O3tjb25zdCByPWJuO3JbSnRdPUludDhBcnJheSxyW05lXT1VaW50OEFycmF5LHJbWnRdPUludDE2QXJyYXkscltlcl09VWludDE2QXJyYXksclt0cl09SW50MzJBcnJheSxyW3JyXT1VaW50MzJBcnJheSxyW25yXT1GbG9hdDMyQXJyYXkscltTc109VWludDE2QXJyYXkscltJc109VWludDE2QXJyYXkscltGc109VWludDE2QXJyYXkscltQc109VWludDE2QXJyYXkscltEc109VWludDMyQXJyYXkscltNc109VWludDMyQXJyYXkscltDc109VWludDMyQXJyYXkscltPc109VWludDMyQXJyYXkscltOc109VWludDMyQXJyYXl9ZnVuY3Rpb24gaXIocil7aWYociBpbnN0YW5jZW9mIEludDhBcnJheSlyZXR1cm4gSnQ7aWYociBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHIgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSlyZXR1cm4gTmU7aWYociBpbnN0YW5jZW9mIEludDE2QXJyYXkpcmV0dXJuIFp0O2lmKHIgaW5zdGFuY2VvZiBVaW50MTZBcnJheSlyZXR1cm4gZXI7aWYociBpbnN0YW5jZW9mIEludDMyQXJyYXkpcmV0dXJuIHRyO2lmKHIgaW5zdGFuY2VvZiBVaW50MzJBcnJheSlyZXR1cm4gcnI7aWYociBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlyZXR1cm4gbnI7dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlZCBhcnJheSB0eXBlIil9ZnVuY3Rpb24gdm4ocil7aWYocj09PUludDhBcnJheSlyZXR1cm4gSnQ7aWYocj09PVVpbnQ4QXJyYXl8fHI9PT1VaW50OENsYW1wZWRBcnJheSlyZXR1cm4gTmU7aWYocj09PUludDE2QXJyYXkpcmV0dXJuIFp0O2lmKHI9PT1VaW50MTZBcnJheSlyZXR1cm4gZXI7aWYocj09PUludDMyQXJyYXkpcmV0dXJuIHRyO2lmKHI9PT1VaW50MzJBcnJheSlyZXR1cm4gcnI7aWYocj09PUZsb2F0MzJBcnJheSlyZXR1cm4gbnI7dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlZCBhcnJheSB0eXBlIil9ZnVuY3Rpb24gRW4ocil7Y29uc3QgZT1ibltyXTtpZighZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gZ2wgdHlwZSIpO3JldHVybiBlfWNvbnN0IGF0PXR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSI/ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuYnVmZmVyJiYoZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8ZS5idWZmZXIgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcil9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmJ1ZmZlciYmZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn07ZnVuY3Rpb24gVG4oLi4ucil7Y29uc29sZS5lcnJvciguLi5yKX1jb25zdCBBbj1uZXcgTWFwO2Z1bmN0aW9uIHV0KHIsZSl7aWYoIXJ8fHR5cGVvZiByIT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1Bbi5nZXQoZSk7dHx8KHQ9bmV3IFdlYWtNYXAsQW4uc2V0KGUsdCkpO2xldCBuPXQuZ2V0KHIpO2lmKG49PT12b2lkIDApe2NvbnN0IGk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpO249aS5zdWJzdHJpbmcoOCxpLmxlbmd0aC0xKT09PWUsdC5zZXQocixuKX1yZXR1cm4gbn1mdW5jdGlvbiBVcyhyLGUpe3JldHVybiB0eXBlb2YgV2ViR0xCdWZmZXI8InUiJiZ1dChlLCJXZWJHTEJ1ZmZlciIpfWZ1bmN0aW9uIEJzKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTFJlbmRlcmJ1ZmZlcjwidSImJnV0KGUsIldlYkdMUmVuZGVyYnVmZmVyIil9ZnVuY3Rpb24gb3IocixlKXtyZXR1cm4gdHlwZW9mIFdlYkdMVGV4dHVyZTwidSImJnV0KGUsIldlYkdMVGV4dHVyZSIpfWZ1bmN0aW9uIGtzKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTFNhbXBsZXI8InUiJiZ1dChlLCJXZWJHTFNhbXBsZXIiKX1jb25zdCB3bj0zNTA0NCxwZT0zNDk2MixMcz0zNDk2Mywkcz0zNDY2MCxHcz01MTIwLHpzPTUxMjEsSHM9NTEyMixWcz01MTIzLFdzPTUxMjQsanM9NTEyNSxSbj01MTI2LFNuPXthdHRyaWJQcmVmaXg6IiJ9O2Z1bmN0aW9uIHFzKHIsZSx0LG4saSl7ci5iaW5kQnVmZmVyKGUsdCksci5idWZmZXJEYXRhKGUsbixpfHx3bil9ZnVuY3Rpb24gSW4ocixlLHQsbil7aWYoVXMocixlKSlyZXR1cm4gZTt0PXR8fHBlO2NvbnN0IGk9ci5jcmVhdGVCdWZmZXIoKTtyZXR1cm4gcXMocix0LGksZSxuKSxpfWZ1bmN0aW9uIEZuKHIpe3JldHVybiByPT09ImluZGljZXMifWZ1bmN0aW9uIFhzKHIpe3JldHVybiByPT09SW50OEFycmF5fHxyPT09VWludDhBcnJheX1mdW5jdGlvbiBZcyhyKXtyZXR1cm4gci5sZW5ndGg/cjpyLmRhdGF9Y29uc3QgUXM9L2Nvb3JkfHRleHR1cmUvaSxLcz0vY29sb3J8Y29sb3VyL2k7ZnVuY3Rpb24gSnMocixlKXtsZXQgdDtpZihRcy50ZXN0KHIpP3Q9MjpLcy50ZXN0KHIpP3Q9NDp0PTMsZSV0PjApdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGd1ZXNzIG51bUNvbXBvbmVudHMgZm9yIGF0dHJpYnV0ZSAnJHtyfScuIFRyaWVkICR7dH0gYnV0ICR7ZX0gdmFsdWVzIGlzIG5vdCBldmVubHkgZGl2aXNpYmxlIGJ5ICR7dH0uIFlvdSBzaG91bGQgc3BlY2lmeSBpdC5gKTtyZXR1cm4gdH1mdW5jdGlvbiBacyhyLGUsdCl7cmV0dXJuIHIubnVtQ29tcG9uZW50c3x8ci5zaXplfHxKcyhlLHR8fFlzKHIpLmxlbmd0aCl9ZnVuY3Rpb24gUG4ocixlKXtpZihhdChyKSlyZXR1cm4gcjtpZihhdChyLmRhdGEpKXJldHVybiByLmRhdGE7QXJyYXkuaXNBcnJheShyKSYmKHI9e2RhdGE6cn0pO2xldCB0PXIudHlwZT9zcihyLnR5cGUpOnZvaWQgMDtyZXR1cm4gdHx8KEZuKGUpP3Q9VWludDE2QXJyYXk6dD1GbG9hdDMyQXJyYXkpLG5ldyB0KHIuZGF0YSl9ZnVuY3Rpb24gZWEocil7cmV0dXJuIHR5cGVvZiByPT0ibnVtYmVyIj9yOnI/dm4ocik6Um59ZnVuY3Rpb24gc3Iocil7cmV0dXJuIHR5cGVvZiByPT0ibnVtYmVyIj9FbihyKTpyfHxGbG9hdDMyQXJyYXl9ZnVuY3Rpb24gdGEocixlKXtyZXR1cm57YnVmZmVyOmUuYnVmZmVyLG51bVZhbHVlczoyKjMqNCx0eXBlOmVhKGUudHlwZSksYXJyYXlUeXBlOnNyKGUudHlwZSl9fWZ1bmN0aW9uIHJhKHIsZSl7Y29uc3QgdD1lLmRhdGF8fGUsbj1zcihlLnR5cGUpLGk9dCpuLkJZVEVTX1BFUl9FTEVNRU5ULG89ci5jcmVhdGVCdWZmZXIoKTtyZXR1cm4gci5iaW5kQnVmZmVyKHBlLG8pLHIuYnVmZmVyRGF0YShwZSxpLGUuZHJhd1R5cGV8fHduKSx7YnVmZmVyOm8sbnVtVmFsdWVzOnQsdHlwZTp2bihuKSxhcnJheVR5cGU6bn19ZnVuY3Rpb24gbmEocixlLHQpe2NvbnN0IG49UG4oZSx0KTtyZXR1cm57YXJyYXlUeXBlOm4uY29uc3RydWN0b3IsYnVmZmVyOkluKHIsbix2b2lkIDAsZS5kcmF3VHlwZSksdHlwZTppcihuKSxudW1WYWx1ZXM6MH19ZnVuY3Rpb24gaWEocixlKXtjb25zdCB0PXt9O3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKCFGbihuKSl7Y29uc3QgaT1lW25dLG89aS5hdHRyaWJ8fGkubmFtZXx8aS5hdHRyaWJOYW1lfHxTbi5hdHRyaWJQcmVmaXgrbjtpZihpLnZhbHVlKXtpZighQXJyYXkuaXNBcnJheShpLnZhbHVlKSYmIWF0KGkudmFsdWUpKXRocm93IG5ldyBFcnJvcigiYXJyYXkudmFsdWUgaXMgbm90IGFycmF5IG9yIHR5cGVkYXJyYXkiKTt0W29dPXt2YWx1ZTppLnZhbHVlfX1lbHNle2xldCBzO2kuYnVmZmVyJiZpLmJ1ZmZlciBpbnN0YW5jZW9mIFdlYkdMQnVmZmVyP3M9dGE6dHlwZW9mIGk9PSJudW1iZXIifHx0eXBlb2YgaS5kYXRhPT0ibnVtYmVyIj9zPXJhOnM9bmE7Y29uc3R7YnVmZmVyOmEsdHlwZTp1LG51bVZhbHVlczpmLGFycmF5VHlwZTpjfT1zKHIsaSxuKSxkPWkubm9ybWFsaXplIT09dm9pZCAwP2kubm9ybWFsaXplOlhzKGMpLHk9WnMoaSxuLGYpO3Rbb109e2J1ZmZlcjphLG51bUNvbXBvbmVudHM6eSx0eXBlOnUsbm9ybWFsaXplOmQsc3RyaWRlOmkuc3RyaWRlfHwwLG9mZnNldDppLm9mZnNldHx8MCxkaXZpc29yOmkuZGl2aXNvcj09PXZvaWQgMD92b2lkIDA6aS5kaXZpc29yLGRyYXdUeXBlOmkuZHJhd1R5cGV9fX19KSxyLmJpbmRCdWZmZXIocGUsbnVsbCksdH1mdW5jdGlvbiBvYShyLGUpe3JldHVybiBlPT09R3N8fGU9PT16cz8xOmU9PT1Ic3x8ZT09PVZzPzI6ZT09PVdzfHxlPT09anN8fGU9PT1Sbj80OjB9Y29uc3QgYXI9WyJwb3NpdGlvbiIsInBvc2l0aW9ucyIsImFfcG9zaXRpb24iXTtmdW5jdGlvbiBzYShyLGUpe2xldCB0LG47Zm9yKG49MDtuPGFyLmxlbmd0aCYmKHQ9YXJbbl0sISh0IGluIGV8fCh0PVNuLmF0dHJpYlByZWZpeCt0LHQgaW4gZSkpKTsrK24pO249PT1hci5sZW5ndGgmJih0PU9iamVjdC5rZXlzKGUpWzBdKTtjb25zdCBpPWVbdF07aWYoIWkuYnVmZmVyKXJldHVybiAxO3IuYmluZEJ1ZmZlcihwZSxpLmJ1ZmZlcik7Y29uc3Qgbz1yLmdldEJ1ZmZlclBhcmFtZXRlcihwZSwkcyk7ci5iaW5kQnVmZmVyKHBlLG51bGwpO2NvbnN0IHM9b2EocixpLnR5cGUpLGE9by9zLHU9aS5udW1Db21wb25lbnRzfHxpLnNpemUsZj1hL3U7aWYoZiUxIT09MCl0aHJvdyBuZXcgRXJyb3IoYG51bUNvbXBvbmVudHMgJHt1fSBub3QgY29ycmVjdCBmb3IgbGVuZ3RoICR7bGVuZ3RofWApO3JldHVybiBmfWZ1bmN0aW9uIGFhKHIsZSx0KXtjb25zdCBuPWlhKHIsZSksaT1PYmplY3QuYXNzaWduKHt9LHR8fHt9KTtpLmF0dHJpYnM9T2JqZWN0LmFzc2lnbih7fSx0P3QuYXR0cmliczp7fSxuKTtjb25zdCBvPWUuaW5kaWNlcztpZihvKXtjb25zdCBzPVBuKG8sImluZGljZXMiKTtpLmluZGljZXM9SW4ocixzLExzKSxpLm51bUVsZW1lbnRzPXMubGVuZ3RoLGkuZWxlbWVudFR5cGU9aXIocyl9ZWxzZSBpLm51bUVsZW1lbnRzfHwoaS5udW1FbGVtZW50cz1zYShyLGkuYXR0cmlicykpO3JldHVybiBpfWZ1bmN0aW9uIFVlKHIpe3JldHVybiEhci50ZXhTdG9yYWdlMkR9Y29uc3QgRG49ZnVuY3Rpb24oKXtjb25zdCByPXt9LGU9e307ZnVuY3Rpb24gdChuKXtjb25zdCBpPW4uY29uc3RydWN0b3IubmFtZTtpZighcltpXSl7Zm9yKGNvbnN0IG8gaW4gbilpZih0eXBlb2YgbltvXT09Im51bWJlciIpe2NvbnN0IHM9ZVtuW29dXTtlW25bb11dPXM/YCR7c30gfCAke299YDpvfXJbaV09ITB9fXJldHVybiBmdW5jdGlvbihpLG8pe3JldHVybiB0KGkpLGVbb118fCh0eXBlb2Ygbz09Im51bWJlciI/YDB4JHtvLnRvU3RyaW5nKDE2KX1gOm8pfX0oKSxhZT17dGV4dHVyZUNvbG9yOm5ldyBVaW50OEFycmF5KFsxMjgsMTkyLDI1NSwyNTVdKSx0ZXh0dXJlT3B0aW9uczp7fSxjcm9zc09yaWdpbjp2b2lkIDB9LEJlPWF0LE1uPWZ1bmN0aW9uKCl7bGV0IHI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHI9cnx8KHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKTpudWxsKSxyfX0oKSxDbj02NDA2LFo9NjQwNyxGPTY0MDgsT249NjQwOSxObj02NDEwLGtlPTY0MDIsVW49MzQwNDEsY3Q9MzMwNzEsdWE9OTcyOCxjYT05NzI5LHVlPTM1NTMsY2U9MzQwNjcseWU9MzI4NzksX2U9MzU4NjYsdXI9MzQwNjksZmE9MzQwNzAsbGE9MzQwNzEsZGE9MzQwNzIsbWE9MzQwNzMsaGE9MzQwNzQsY3I9MTAyNDEsZnI9MTAyNDAsZnQ9MTAyNDIsbHQ9MTAyNDMsQm49MzI4ODIscGE9MzMwODIseWE9MzMwODMsX2E9MzMwODQseGE9MzMwODUsbHI9MzMxNyxrbj0zMzE0LExuPTMyODc4LCRuPTMzMTYsR249MzMxNSx6bj0zMjg3NyxnYT0zNzQ0MyxiYT0zNzQ0MSx2YT0zNzQ0MCxFYT0zMzMyMSxUYT0zNjc1NixBYT0zMzMyNSx3YT0zMzMyNixSYT0zMzMzMCxTYT0zMzMyOSxJYT0zMzMzOCxGYT0zMzMzNyxQYT0zMzM0MCxEYT0zMzMzOSxNYT0zMzMyMyxDYT0zNjc1NyxPYT0zMzMyNyxOYT0zMzMyOCxVYT0zMzMzNixCYT0zMzMzNSxrYT0zMzMzMixMYT0zMzMzMSwkYT0zMzMzNCxHYT0zMzMzMyx6YT0zMjg0OSxIYT0zNTkwNSxWYT0zNjE5NCxXYT0zNjc1OCxqYT0zNTg5OCxxYT0zNTkwMSxYYT0zNDg0MyxZYT0zNDgzNyxRYT0zNjIyMSxLYT0zNjIzOSxKYT0zNjIxNSxaYT0zNjIzMyxldT0zNjIwOSx0dT0zNjIyNyxydT0zMjg1NixudT0zNTkwNyxpdT0zNjc1OSxvdT0zMjg1NSxzdT0zMjg1NCxhdT0zMjg1Nyx1dT0zNDg0MixjdT0zNDgzNixmdT0zNjIyMCxsdT0zNjIzOCxkdT0zNjk3NSxtdT0zNjIxNCxodT0zNjIzMixwdT0zNjIyNix5dT0zNjIwOCxfdT0zMzE4OSx4dT0zMzE5MCxndT0zNjAxMixidT0zNjAxMyx2dT0zNTA1NixmZT01MTIwLEk9NTEyMSxkdD01MTIyLFNlPTUxMjMsbXQ9NTEyNCx4ZT01MTI1LEI9NTEyNixIbj0zMjgxOSxWbj0zMjgyMCxXbj0zMzYzNSxqPTUxMzEsTGU9MzYxOTMsZHI9MzM2NDAsRXU9MzU4OTksVHU9MzU5MDIsQXU9MzYyNjksd3U9MzQwNDIsaHQ9MzMzMTksSWU9MzMzMjAscHQ9NjQwMyxGZT0zNjI0NCxQZT0zNjI0OCxnZT0zNjI0OTtsZXQgbXI7ZnVuY3Rpb24geXQocil7aWYoIW1yKXtjb25zdCBlPXt9O2VbQ25dPXt0ZXh0dXJlRm9ybWF0OkNuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEsMiwyLDRdLHR5cGU6W0ksaixMZSxCXX0sZVtPbl09e3RleHR1cmVGb3JtYXQ6T24sY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMSwyLDIsNF0sdHlwZTpbSSxqLExlLEJdfSxlW05uXT17dGV4dHVyZUZvcm1hdDpObixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsyLDQsNCw4XSx0eXBlOltJLGosTGUsQl19LGVbWl09e3RleHR1cmVGb3JtYXQ6Wixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlszLDYsNiwxMiwyXSx0eXBlOltJLGosTGUsQixXbl19LGVbRl09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDgsOCwxNiwyLDJdLHR5cGU6W0ksaixMZSxCLEhuLFZuXX0sZVtrZV09e3RleHR1cmVGb3JtYXQ6a2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMiw0XSx0eXBlOlt4ZSxTZV19LGVbRWFdPXt0ZXh0dXJlRm9ybWF0OnB0LGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W0ldfSxlW1RhXT17dGV4dHVyZUZvcm1hdDpwdCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxXSx0eXBlOltmZV19LGVbQWFdPXt0ZXh0dXJlRm9ybWF0OnB0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsMl0sdHlwZTpbQixqXX0sZVt3YV09e3RleHR1cmVGb3JtYXQ6cHQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbQl19LGVbUmFdPXt0ZXh0dXJlRm9ybWF0OkZlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W0ldfSxlW1NhXT17dGV4dHVyZUZvcm1hdDpGZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxXSx0eXBlOltmZV19LGVba2FdPXt0ZXh0dXJlRm9ybWF0OkZlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W1NlXX0sZVtMYV09e3RleHR1cmVGb3JtYXQ6RmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbZHRdfSxlWyRhXT17dGV4dHVyZUZvcm1hdDpGZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOlt4ZV19LGVbR2FdPXt0ZXh0dXJlRm9ybWF0OkZlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W210XX0sZVtNYV09e3RleHR1cmVGb3JtYXQ6aHQsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbSV19LGVbQ2FdPXt0ZXh0dXJlRm9ybWF0Omh0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W2ZlXX0sZVtPYV09e3RleHR1cmVGb3JtYXQ6aHQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbOCw0XSx0eXBlOltCLGpdfSxlW05hXT17dGV4dHVyZUZvcm1hdDpodCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltCXX0sZVtVYV09e3RleHR1cmVGb3JtYXQ6SWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbSV19LGVbQmFdPXt0ZXh0dXJlRm9ybWF0OkllLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W2ZlXX0sZVtJYV09e3RleHR1cmVGb3JtYXQ6SWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbU2VdfSxlW0ZhXT17dGV4dHVyZUZvcm1hdDpJZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltkdF19LGVbUGFdPXt0ZXh0dXJlRm9ybWF0OkllLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W3hlXX0sZVtEYV09e3RleHR1cmVGb3JtYXQ6SWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbbXRdfSxlW3phXT17dGV4dHVyZUZvcm1hdDpaLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W0ldfSxlW0hhXT17dGV4dHVyZUZvcm1hdDpaLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W0ldfSxlW1ZhXT17dGV4dHVyZUZvcm1hdDpaLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzMsMl0sdHlwZTpbSSxXbl19LGVbV2FdPXt0ZXh0dXJlRm9ybWF0OlosY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbZmVdfSxlW2phXT17dGV4dHVyZUZvcm1hdDpaLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEyLDYsNF0sdHlwZTpbQixqLEV1XX0sZVtxYV09e3RleHR1cmVGb3JtYXQ6Wixjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxMiw2LDRdLHR5cGU6W0IsaixUdV19LGVbWGFdPXt0ZXh0dXJlRm9ybWF0OlosY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTIsNl0sdHlwZTpbQixqXX0sZVtZYV09e3RleHR1cmVGb3JtYXQ6Wixjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbQl19LGVbUWFdPXt0ZXh0dXJlRm9ybWF0OlBlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W0ldfSxlW0thXT17dGV4dHVyZUZvcm1hdDpQZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlszXSx0eXBlOltmZV19LGVbSmFdPXt0ZXh0dXJlRm9ybWF0OlBlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzZdLHR5cGU6W1NlXX0sZVtaYV09e3RleHR1cmVGb3JtYXQ6UGUsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNl0sdHlwZTpbZHRdfSxlW2V1XT17dGV4dHVyZUZvcm1hdDpQZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbeGVdfSxlW3R1XT17dGV4dHVyZUZvcm1hdDpQZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbbXRdfSxlW3J1XT17dGV4dHVyZUZvcm1hdDpGLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0ldfSxlW251XT17dGV4dHVyZUZvcm1hdDpGLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0ldfSxlW2l1XT17dGV4dHVyZUZvcm1hdDpGLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2ZlXX0sZVtvdV09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDIsNF0sdHlwZTpbSSxWbixkcl19LGVbc3VdPXt0ZXh0dXJlRm9ybWF0OkYsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNCwyXSx0eXBlOltJLEhuXX0sZVthdV09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltkcl19LGVbdXVdPXt0ZXh0dXJlRm9ybWF0OkYsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTYsOF0sdHlwZTpbQixqXX0sZVtjdV09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxNl0sdHlwZTpbQl19LGVbZnVdPXt0ZXh0dXJlRm9ybWF0OmdlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0ldfSxlW2x1XT17dGV4dHVyZUZvcm1hdDpnZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltmZV19LGVbZHVdPXt0ZXh0dXJlRm9ybWF0OmdlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2RyXX0sZVttdV09e3RleHR1cmVGb3JtYXQ6Z2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbU2VdfSxlW2h1XT17dGV4dHVyZUZvcm1hdDpnZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltkdF19LGVbcHVdPXt0ZXh0dXJlRm9ybWF0OmdlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOlttdF19LGVbeXVdPXt0ZXh0dXJlRm9ybWF0OmdlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOlt4ZV19LGVbX3VdPXt0ZXh0dXJlRm9ybWF0OmtlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzIsNF0sdHlwZTpbU2UseGVdfSxlW3h1XT17dGV4dHVyZUZvcm1hdDprZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOlt4ZV19LGVbZ3VdPXt0ZXh0dXJlRm9ybWF0OmtlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0JdfSxlW3Z1XT17dGV4dHVyZUZvcm1hdDpVbixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOlt3dV19LGVbYnVdPXt0ZXh0dXJlRm9ybWF0OlVuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0F1XX0sT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtjb25zdCBuPWVbdF07bi5ieXRlc1BlckVsZW1lbnRNYXA9e30sbi5ieXRlc1BlckVsZW1lbnQuZm9yRWFjaChmdW5jdGlvbihpLG8pe2NvbnN0IHM9bi50eXBlW29dO24uYnl0ZXNQZXJFbGVtZW50TWFwW3NdPWl9KX0pLG1yPWV9cmV0dXJuIG1yW3JdfWZ1bmN0aW9uIFJ1KHIsZSl7Y29uc3QgdD15dChyKTtpZighdCl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7Y29uc3Qgbj10LmJ5dGVzUGVyRWxlbWVudE1hcFtlXTtpZihuPT09dm9pZCAwKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm4gbn1mdW5jdGlvbiAkZShyKXtjb25zdCBlPXl0KHIpO2lmKCFlKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm57Zm9ybWF0OmUudGV4dHVyZUZvcm1hdCx0eXBlOmUudHlwZVswXX19ZnVuY3Rpb24gam4ocil7cmV0dXJuKHImci0xKT09PTB9ZnVuY3Rpb24gU3UocixlLHQsbil7aWYoIVVlKHIpKXJldHVybiBqbihlKSYmam4odCk7Y29uc3QgaT15dChuKTtpZighaSl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7cmV0dXJuIGkuY29sb3JSZW5kZXJhYmxlJiZpLnRleHR1cmVGaWx0ZXJhYmxlfWZ1bmN0aW9uIEl1KHIpe2NvbnN0IGU9eXQocik7aWYoIWUpdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybiBlLnRleHR1cmVGaWx0ZXJhYmxlfWZ1bmN0aW9uIEZ1KHIsZSx0KXtyZXR1cm4gQmUoZSk/aXIoZSk6dHx8SX1mdW5jdGlvbiBfdChyLGUsdCxuLGkpe2lmKGklMSE9PTApdGhyb3ciY2FuJ3QgZ3Vlc3MgZGltZW5zaW9ucyI7aWYoIXQmJiFuKXtjb25zdCBvPU1hdGguc3FydChpLyhlPT09Y2U/NjoxKSk7byUxPT09MD8odD1vLG49byk6KHQ9aSxuPTEpfWVsc2UgaWYobil7aWYoIXQmJih0PWkvbix0JTEpKXRocm93ImNhbid0IGd1ZXNzIGRpbWVuc2lvbnMifWVsc2UgaWYobj1pL3QsbiUxKXRocm93ImNhbid0IGd1ZXNzIGRpbWVuc2lvbnMiO3JldHVybnt3aWR0aDp0LGhlaWdodDpufX1mdW5jdGlvbiBEZShyLGUpe2UuY29sb3JzcGFjZUNvbnZlcnNpb24hPT12b2lkIDAmJnIucGl4ZWxTdG9yZWkoZ2EsZS5jb2xvcnNwYWNlQ29udmVyc2lvbiksZS5wcmVtdWx0aXBseUFscGhhIT09dm9pZCAwJiZyLnBpeGVsU3RvcmVpKGJhLGUucHJlbXVsdGlwbHlBbHBoYSksZS5mbGlwWSE9PXZvaWQgMCYmci5waXhlbFN0b3JlaSh2YSxlLmZsaXBZKX1mdW5jdGlvbiBxbihyKXtyLnBpeGVsU3RvcmVpKGxyLDQpLFVlKHIpJiYoci5waXhlbFN0b3JlaShrbiwwKSxyLnBpeGVsU3RvcmVpKExuLDApLHIucGl4ZWxTdG9yZWkoJG4sMCksci5waXhlbFN0b3JlaShHbiwwKSxyLnBpeGVsU3RvcmVpKHpuLDApKX1mdW5jdGlvbiBQdShyLGUsdCxuKXtuLm1pbk1hZyYmKHQuY2FsbChyLGUsY3Isbi5taW5NYWcpLHQuY2FsbChyLGUsZnIsbi5taW5NYWcpKSxuLm1pbiYmdC5jYWxsKHIsZSxjcixuLm1pbiksbi5tYWcmJnQuY2FsbChyLGUsZnIsbi5tYWcpLG4ud3JhcCYmKHQuY2FsbChyLGUsZnQsbi53cmFwKSx0LmNhbGwocixlLGx0LG4ud3JhcCksKGU9PT15ZXx8a3MocixlKSkmJnQuY2FsbChyLGUsQm4sbi53cmFwKSksbi53cmFwUiYmdC5jYWxsKHIsZSxCbixuLndyYXBSKSxuLndyYXBTJiZ0LmNhbGwocixlLGZ0LG4ud3JhcFMpLG4ud3JhcFQmJnQuY2FsbChyLGUsbHQsbi53cmFwVCksbi5taW5Mb2QmJnQuY2FsbChyLGUscGEsbi5taW5Mb2QpLG4ubWF4TG9kJiZ0LmNhbGwocixlLHlhLG4ubWF4TG9kKSxuLmJhc2VMZXZlbCYmdC5jYWxsKHIsZSxfYSxuLmJhc2VMZXZlbCksbi5tYXhMZXZlbCYmdC5jYWxsKHIsZSx4YSxuLm1heExldmVsKX1mdW5jdGlvbiBYbihyLGUsdCl7Y29uc3Qgbj10LnRhcmdldHx8dWU7ci5iaW5kVGV4dHVyZShuLGUpLFB1KHIsbixyLnRleFBhcmFtZXRlcmksdCl9ZnVuY3Rpb24gRHUocil7cmV0dXJuIHI9cnx8YWUudGV4dHVyZUNvbG9yLEJlKHIpP3I6bmV3IFVpbnQ4QXJyYXkoW3JbMF0qMjU1LHJbMV0qMjU1LHJbMl0qMjU1LHJbM10qMjU1XSl9ZnVuY3Rpb24gaHIocixlLHQsbixpLG8pe3Q9dHx8YWUudGV4dHVyZU9wdGlvbnMsbz1vfHxGO2NvbnN0IHM9dC50YXJnZXR8fHVlO2lmKG49bnx8dC53aWR0aCxpPWl8fHQuaGVpZ2h0LHIuYmluZFRleHR1cmUocyxlKSxTdShyLG4saSxvKSlyLmdlbmVyYXRlTWlwbWFwKHMpO2Vsc2V7Y29uc3QgYT1JdShvKT9jYTp1YTtyLnRleFBhcmFtZXRlcmkocyxjcixhKSxyLnRleFBhcmFtZXRlcmkocyxmcixhKSxyLnRleFBhcmFtZXRlcmkocyxmdCxjdCksci50ZXhQYXJhbWV0ZXJpKHMsbHQsY3QpfX1mdW5jdGlvbiBHZShyKXtyZXR1cm4gci5hdXRvPT09ITB8fHIuYXV0bz09PXZvaWQgMCYmci5sZXZlbD09PXZvaWQgMH1mdW5jdGlvbiBwcihyLGUpe3JldHVybiBlPWV8fHt9LGUuY3ViZUZhY2VPcmRlcnx8W3VyLGZhLGxhLGRhLG1hLGhhXX1mdW5jdGlvbiB5cihyLGUpe2NvbnN0IG49cHIocixlKS5tYXAoZnVuY3Rpb24oaSxvKXtyZXR1cm57ZmFjZTppLG5keDpvfX0pO3JldHVybiBuLnNvcnQoZnVuY3Rpb24oaSxvKXtyZXR1cm4gaS5mYWNlLW8uZmFjZX0pLG59ZnVuY3Rpb24gWW4ocixlLHQsbil7bj1ufHxhZS50ZXh0dXJlT3B0aW9ucztjb25zdCBpPW4udGFyZ2V0fHx1ZSxvPW4ubGV2ZWx8fDA7bGV0IHM9dC53aWR0aCxhPXQuaGVpZ2h0O2NvbnN0IHU9bi5pbnRlcm5hbEZvcm1hdHx8bi5mb3JtYXR8fEYsZj0kZSh1KSxjPW4uZm9ybWF0fHxmLmZvcm1hdCxkPW4udHlwZXx8Zi50eXBlO2lmKERlKHIsbiksci5iaW5kVGV4dHVyZShpLGUpLGk9PT1jZSl7Y29uc3QgeT10LndpZHRoLF89dC5oZWlnaHQ7bGV0IG0seDtpZih5LzY9PT1fKW09Xyx4PVswLDAsMSwwLDIsMCwzLDAsNCwwLDUsMF07ZWxzZSBpZihfLzY9PT15KW09eSx4PVswLDAsMCwxLDAsMiwwLDMsMCw0LDAsNV07ZWxzZSBpZih5LzM9PT1fLzIpbT15LzMseD1bMCwwLDEsMCwyLDAsMCwxLDEsMSwyLDFdO2Vsc2UgaWYoeS8yPT09Xy8zKW09eS8yLHg9WzAsMCwxLDAsMCwxLDEsMSwwLDIsMSwyXTtlbHNlIHRocm93ImNhbid0IGZpZ3VyZSBvdXQgY3ViZSBtYXAgZnJvbSBlbGVtZW50OiAiKyh0LnNyYz90LnNyYzp0Lm5vZGVOYW1lKTtjb25zdCB2PU1uKCk7dj8odi5jYW52YXMud2lkdGg9bSx2LmNhbnZhcy5oZWlnaHQ9bSxzPW0sYT1tLHlyKHIsbikuZm9yRWFjaChmdW5jdGlvbihiKXtjb25zdCBBPXhbYi5uZHgqMiswXSptLFA9eFtiLm5keCoyKzFdKm07di5kcmF3SW1hZ2UodCxBLFAsbSxtLDAsMCxtLG0pLHIudGV4SW1hZ2UyRChiLmZhY2Usbyx1LGMsZCx2LmNhbnZhcyl9KSx2LmNhbnZhcy53aWR0aD0xLHYuY2FudmFzLmhlaWdodD0xKTp0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA8InUiJiYocz1tLGE9bSx5cihyLG4pLmZvckVhY2goZnVuY3Rpb24oYil7Y29uc3QgQT14W2IubmR4KjIrMF0qbSxQPXhbYi5uZHgqMisxXSptO3IudGV4SW1hZ2UyRChiLmZhY2Usbyx1LG0sbSwwLGMsZCxudWxsKSxjcmVhdGVJbWFnZUJpdG1hcCh0LEEsUCxtLG0se3ByZW11bHRpcGx5QWxwaGE6Im5vbmUiLGNvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pLnRoZW4oZnVuY3Rpb24oQyl7RGUocixuKSxyLmJpbmRUZXh0dXJlKGksZSksci50ZXhJbWFnZTJEKGIuZmFjZSxvLHUsYyxkLEMpLEdlKG4pJiZocihyLGUsbixzLGEsdSl9KX0pKX1lbHNlIGlmKGk9PT15ZXx8aT09PV9lKXtjb25zdCB5PU1hdGgubWluKHQud2lkdGgsdC5oZWlnaHQpLF89TWF0aC5tYXgodC53aWR0aCx0LmhlaWdodCksbT1fL3k7aWYobSUxIT09MCl0aHJvdyJjYW4gbm90IGNvbXB1dGUgM0QgZGltZW5zaW9ucyBvZiBlbGVtZW50Ijtjb25zdCB4PXQud2lkdGg9PT1fPzE6MCx2PXQuaGVpZ2h0PT09Xz8xOjA7ci5waXhlbFN0b3JlaShsciwxKSxyLnBpeGVsU3RvcmVpKGtuLHQud2lkdGgpLHIucGl4ZWxTdG9yZWkoTG4sMCksci5waXhlbFN0b3JlaSh6biwwKSxyLnRleEltYWdlM0QoaSxvLHUseSx5LHksMCxjLGQsbnVsbCk7Zm9yKGxldCBiPTA7YjxtOysrYil7Y29uc3QgQT1iKnkqeCxQPWIqeSp2O3IucGl4ZWxTdG9yZWkoJG4sQSksci5waXhlbFN0b3JlaShHbixQKSxyLnRleFN1YkltYWdlM0QoaSxvLDAsMCxiLHkseSwxLGMsZCx0KX1xbihyKX1lbHNlIHIudGV4SW1hZ2UyRChpLG8sdSxjLGQsdCk7R2UobikmJmhyKHIsZSxuLHMsYSx1KSxYbihyLGUsbil9ZnVuY3Rpb24gemUoKXt9ZnVuY3Rpb24gTXUocil7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iil7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7cmV0dXJuIGUuaHJlZj1yLGUuaG9zdG5hbWU9PT1sb2NhdGlvbi5ob3N0bmFtZSYmZS5wb3J0PT09bG9jYXRpb24ucG9ydCYmZS5wcm90b2NvbD09PWxvY2F0aW9uLnByb3RvY29sfWVsc2V7Y29uc3QgZT1uZXcgVVJMKGxvY2F0aW9uLmhyZWYpLm9yaWdpbjtyZXR1cm4gbmV3IFVSTChyLGxvY2F0aW9uLmhyZWYpLm9yaWdpbj09PWV9fWZ1bmN0aW9uIEN1KHIsZSl7cmV0dXJuIGU9PT12b2lkIDAmJiFNdShyKT8iYW5vbnltb3VzIjplfWZ1bmN0aW9uIE91KHIsZSx0KXt0PXR8fHplO2xldCBuO2lmKGU9ZSE9PXZvaWQgMD9lOmFlLmNyb3NzT3JpZ2luLGU9Q3UocixlKSx0eXBlb2YgSW1hZ2U8InUiKXtuPW5ldyBJbWFnZSxlIT09dm9pZCAwJiYobi5jcm9zc09yaWdpbj1lKTtjb25zdCBpPWZ1bmN0aW9uKCl7bi5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsbyksbi5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixzKSxuPW51bGx9LG89ZnVuY3Rpb24oKXtjb25zdCB1PSJjb3VsZG4ndCBsb2FkIGltYWdlOiAiK3I7VG4odSksdCh1LG4pLGkoKX0scz1mdW5jdGlvbigpe3QobnVsbCxuKSxpKCl9O3JldHVybiBuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixvKSxuLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHMpLG4uc3JjPXIsbn1lbHNlIGlmKHR5cGVvZiBJbWFnZUJpdG1hcDwidSIpe2xldCBpLG87Y29uc3Qgcz1mdW5jdGlvbigpe3QoaSxvKX0sYT17fTtlJiYoYS5tb2RlPSJjb3JzIiksZmV0Y2gocixhKS50aGVuKGZ1bmN0aW9uKHUpe2lmKCF1Lm9rKXRocm93IHU7cmV0dXJuIHUuYmxvYigpfSkudGhlbihmdW5jdGlvbih1KXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAodSx7cHJlbXVsdGlwbHlBbHBoYToibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSl9KS50aGVuKGZ1bmN0aW9uKHUpe289dSxzZXRUaW1lb3V0KHMpfSkuY2F0Y2goZnVuY3Rpb24odSl7aT11LHNldFRpbWVvdXQocyl9KSxuPW51bGx9cmV0dXJuIG59ZnVuY3Rpb24gUW4ocil7cmV0dXJuIHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJnIgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcHx8dHlwZW9mIEltYWdlRGF0YTwidSImJnIgaW5zdGFuY2VvZiBJbWFnZURhdGF8fHR5cGVvZiBIVE1MRWxlbWVudDwidSImJnIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH1mdW5jdGlvbiBfcihyLGUsdCl7cmV0dXJuIFFuKHIpPyhzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dChudWxsLHIpfSkscik6T3UocixlLHQpfWZ1bmN0aW9uIHhyKHIsZSx0KXt0PXR8fGFlLnRleHR1cmVPcHRpb25zO2NvbnN0IG49dC50YXJnZXR8fHVlO2lmKHIuYmluZFRleHR1cmUobixlKSx0LmNvbG9yPT09ITEpcmV0dXJuO2NvbnN0IGk9RHUodC5jb2xvcik7aWYobj09PWNlKWZvcihsZXQgbz0wO288NjsrK28pci50ZXhJbWFnZTJEKHVyK28sMCxGLDEsMSwwLEYsSSxpKTtlbHNlIG49PT15ZXx8bj09PV9lP3IudGV4SW1hZ2UzRChuLDAsRiwxLDEsMSwwLEYsSSxpKTpyLnRleEltYWdlMkQobiwwLEYsMSwxLDAsRixJLGkpfWZ1bmN0aW9uIE51KHIsZSx0LG4pe3JldHVybiBuPW58fHplLHQ9dHx8YWUudGV4dHVyZU9wdGlvbnMseHIocixlLHQpLHQ9T2JqZWN0LmFzc2lnbih7fSx0KSxfcih0LnNyYyx0LmNyb3NzT3JpZ2luLGZ1bmN0aW9uKG8scyl7bz9uKG8sZSxzKTooWW4ocixlLHMsdCksbihudWxsLGUscykpfSl9ZnVuY3Rpb24gVXUocixlLHQsbil7bj1ufHx6ZTtjb25zdCBpPXQuc3JjO2lmKGkubGVuZ3RoIT09Nil0aHJvdyJ0aGVyZSBtdXN0IGJlIDYgdXJscyBmb3IgYSBjdWJlbWFwIjtjb25zdCBvPXQubGV2ZWx8fDAscz10LmludGVybmFsRm9ybWF0fHx0LmZvcm1hdHx8RixhPSRlKHMpLHU9dC5mb3JtYXR8fGEuZm9ybWF0LGY9dC50eXBlfHxJLGM9dC50YXJnZXR8fHVlO2lmKGMhPT1jZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFX0NVQkVfTUFQIjt4cihyLGUsdCksdD1PYmplY3QuYXNzaWduKHt9LHQpO2xldCBkPTY7Y29uc3QgeT1bXSxfPXByKHIsdCk7bGV0IG07ZnVuY3Rpb24geCh2KXtyZXR1cm4gZnVuY3Rpb24oYixBKXstLWQsYj95LnB1c2goYik6QS53aWR0aCE9PUEuaGVpZ2h0P3kucHVzaCgiY3ViZW1hcCBmYWNlIGltZyBpcyBub3QgYSBzcXVhcmU6ICIrQS5zcmMpOihEZShyLHQpLHIuYmluZFRleHR1cmUoYyxlKSxkPT09NT9wcigpLmZvckVhY2goZnVuY3Rpb24oUCl7ci50ZXhJbWFnZTJEKFAsbyxzLHUsZixBKX0pOnIudGV4SW1hZ2UyRCh2LG8scyx1LGYsQSksR2UodCkmJnIuZ2VuZXJhdGVNaXBtYXAoYykpLGQ9PT0wJiZuKHkubGVuZ3RoP3k6dm9pZCAwLGUsbSl9fW09aS5tYXAoZnVuY3Rpb24odixiKXtyZXR1cm4gX3Iodix0LmNyb3NzT3JpZ2luLHgoX1tiXSkpfSl9ZnVuY3Rpb24gQnUocixlLHQsbil7bj1ufHx6ZTtjb25zdCBpPXQuc3JjLG89dC5pbnRlcm5hbEZvcm1hdHx8dC5mb3JtYXR8fEYscz0kZShvKSxhPXQuZm9ybWF0fHxzLmZvcm1hdCx1PXQudHlwZXx8SSxmPXQudGFyZ2V0fHxfZTtpZihmIT09eWUmJmYhPT1fZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFXzNEIG9yIFRFWFRVUkVfMkRfQVJSQVkiO3hyKHIsZSx0KSx0PU9iamVjdC5hc3NpZ24oe30sdCk7bGV0IGM9aS5sZW5ndGg7Y29uc3QgZD1bXTtsZXQgeTtjb25zdCBfPXQubGV2ZWx8fDA7bGV0IG09dC53aWR0aCx4PXQuaGVpZ2h0O2NvbnN0IHY9aS5sZW5ndGg7bGV0IGI9ITA7ZnVuY3Rpb24gQShQKXtyZXR1cm4gZnVuY3Rpb24oQyxXKXtpZigtLWMsQylkLnB1c2goQyk7ZWxzZXtpZihEZShyLHQpLHIuYmluZFRleHR1cmUoZixlKSxiKXtiPSExLG09dC53aWR0aHx8Vy53aWR0aCx4PXQuaGVpZ2h0fHxXLmhlaWdodCxyLnRleEltYWdlM0QoZixfLG8sbSx4LHYsMCxhLHUsbnVsbCk7Zm9yKGxldCBpZT0wO2llPHY7KytpZSlyLnRleFN1YkltYWdlM0QoZixfLDAsMCxpZSxtLHgsMSxhLHUsVyl9ZWxzZXtsZXQgaWU9VyxYOyhXLndpZHRoIT09bXx8Vy5oZWlnaHQhPT14KSYmKFg9TW4oKSxpZT1YLmNhbnZhcyxYLmNhbnZhcy53aWR0aD1tLFguY2FudmFzLmhlaWdodD14LFguZHJhd0ltYWdlKFcsMCwwLG0seCkpLHIudGV4U3ViSW1hZ2UzRChmLF8sMCwwLFAsbSx4LDEsYSx1LGllKSxYJiZpZT09PVguY2FudmFzJiYoWC5jYW52YXMud2lkdGg9MCxYLmNhbnZhcy5oZWlnaHQ9MCl9R2UodCkmJnIuZ2VuZXJhdGVNaXBtYXAoZil9Yz09PTAmJm4oZC5sZW5ndGg/ZDp2b2lkIDAsZSx5KX19eT1pLm1hcChmdW5jdGlvbihQLEMpe3JldHVybiBfcihQLHQuY3Jvc3NPcmlnaW4sQShDKSl9KX1mdW5jdGlvbiBrdShyLGUsdCxuKXtuPW58fGFlLnRleHR1cmVPcHRpb25zO2NvbnN0IGk9bi50YXJnZXR8fHVlO3IuYmluZFRleHR1cmUoaSxlKTtsZXQgbz1uLndpZHRoLHM9bi5oZWlnaHQsYT1uLmRlcHRoO2NvbnN0IHU9bi5sZXZlbHx8MCxmPW4uaW50ZXJuYWxGb3JtYXR8fG4uZm9ybWF0fHxGLGM9JGUoZiksZD1uLmZvcm1hdHx8Yy5mb3JtYXQseT1uLnR5cGV8fEZ1KHIsdCxjLnR5cGUpO2lmKEJlKHQpKXQgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSYmKHQ9bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIpKTtlbHNle2NvbnN0IHY9RW4oeSk7dD1uZXcgdih0KX1jb25zdCBfPVJ1KGYseSksbT10LmJ5dGVMZW5ndGgvXztpZihtJTEpdGhyb3cibGVuZ3RoIHdyb25nIHNpemUgZm9yIGZvcm1hdDogIitEbihyLGQpO2xldCB4O2lmKGk9PT15ZXx8aT09PV9lKWlmKCFvJiYhcyYmIWEpe2NvbnN0IHY9TWF0aC5jYnJ0KG0pO2lmKHYlMSE9PTApdGhyb3ciY2FuJ3QgZ3Vlc3MgY3ViZSBzaXplIG9mIGFycmF5IG9mIG51bUVsZW1lbnRzOiAiK207bz12LHM9dixhPXZ9ZWxzZSBvJiYoIXN8fCFhKT8oeD1fdChyLGkscyxhLG0vbykscz14LndpZHRoLGE9eC5oZWlnaHQpOnMmJighb3x8IWEpPyh4PV90KHIsaSxvLGEsbS9zKSxvPXgud2lkdGgsYT14LmhlaWdodCk6KHg9X3QocixpLG8scyxtL2EpLG89eC53aWR0aCxzPXguaGVpZ2h0KTtlbHNlIHg9X3QocixpLG8scyxtKSxvPXgud2lkdGgscz14LmhlaWdodDtpZihxbihyKSxyLnBpeGVsU3RvcmVpKGxyLG4udW5wYWNrQWxpZ25tZW50fHwxKSxEZShyLG4pLGk9PT1jZSl7Y29uc3Qgdj1fL3QuQllURVNfUEVSX0VMRU1FTlQsYj1tLzYqdjt5cihyLG4pLmZvckVhY2goQT0+e2NvbnN0IFA9YipBLm5keCxDPXQuc3ViYXJyYXkoUCxQK2IpO3IudGV4SW1hZ2UyRChBLmZhY2UsdSxmLG8scywwLGQseSxDKX0pfWVsc2UgaT09PXllfHxpPT09X2U/ci50ZXhJbWFnZTNEKGksdSxmLG8scyxhLDAsZCx5LHQpOnIudGV4SW1hZ2UyRChpLHUsZixvLHMsMCxkLHksdCk7cmV0dXJue3dpZHRoOm8saGVpZ2h0OnMsZGVwdGg6YSx0eXBlOnl9fWZ1bmN0aW9uIEx1KHIsZSx0KXtjb25zdCBuPXQudGFyZ2V0fHx1ZTtyLmJpbmRUZXh0dXJlKG4sZSk7Y29uc3QgaT10LmxldmVsfHwwLG89dC5pbnRlcm5hbEZvcm1hdHx8dC5mb3JtYXR8fEYscz0kZShvKSxhPXQuZm9ybWF0fHxzLmZvcm1hdCx1PXQudHlwZXx8cy50eXBlO2lmKERlKHIsdCksbj09PWNlKWZvcihsZXQgZj0wO2Y8NjsrK2Ypci50ZXhJbWFnZTJEKHVyK2YsaSxvLHQud2lkdGgsdC5oZWlnaHQsMCxhLHUsbnVsbCk7ZWxzZSBuPT09eWV8fG49PT1fZT9yLnRleEltYWdlM0QobixpLG8sdC53aWR0aCx0LmhlaWdodCx0LmRlcHRoLDAsYSx1LG51bGwpOnIudGV4SW1hZ2UyRChuLGksbyx0LndpZHRoLHQuaGVpZ2h0LDAsYSx1LG51bGwpfWZ1bmN0aW9uIEtuKHIsZSx0KXt0PXR8fHplLGU9ZXx8YWUudGV4dHVyZU9wdGlvbnM7Y29uc3Qgbj1yLmNyZWF0ZVRleHR1cmUoKSxpPWUudGFyZ2V0fHx1ZTtsZXQgbz1lLndpZHRofHwxLHM9ZS5oZWlnaHR8fDE7Y29uc3QgYT1lLmludGVybmFsRm9ybWF0fHxGO3IuYmluZFRleHR1cmUoaSxuKSxpPT09Y2UmJihyLnRleFBhcmFtZXRlcmkoaSxmdCxjdCksci50ZXhQYXJhbWV0ZXJpKGksbHQsY3QpKTtsZXQgdT1lLnNyYztpZih1KWlmKHR5cGVvZiB1PT0iZnVuY3Rpb24iJiYodT11KHIsZSkpLHR5cGVvZiB1PT0ic3RyaW5nIilOdShyLG4sZSx0KTtlbHNlIGlmKEJlKHUpfHxBcnJheS5pc0FycmF5KHUpJiYodHlwZW9mIHVbMF09PSJudW1iZXIifHxBcnJheS5pc0FycmF5KHVbMF0pfHxCZSh1WzBdKSkpe2NvbnN0IGY9a3UocixuLHUsZSk7bz1mLndpZHRoLHM9Zi5oZWlnaHR9ZWxzZSBBcnJheS5pc0FycmF5KHUpJiYodHlwZW9mIHVbMF09PSJzdHJpbmcifHxRbih1WzBdKSk/aT09PWNlP1V1KHIsbixlLHQpOkJ1KHIsbixlLHQpOihZbihyLG4sdSxlKSxvPXUud2lkdGgscz11LmhlaWdodCk7ZWxzZSBMdShyLG4sZSk7cmV0dXJuIEdlKGUpJiZocihyLG4sZSxvLHMsYSksWG4ocixuLGUpLG59Y29uc3QgZ3I9VG47ZnVuY3Rpb24gSm4ocil7cmV0dXJuIHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmdldEVsZW1lbnRCeUlkP2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIpOm51bGx9Y29uc3QgeHQ9MzM5ODQsZ3Q9MzQ5NjIsJHU9MzQ5NjMsR3U9MzU3MTMsenU9MzU3MTQsSHU9MzU2MzIsVnU9MzU2MzMsV3U9MzU5ODEsWm49MzU3MTgsanU9MzU3MjEscXU9MzU5NzEsWHU9MzUzODIsWXU9MzUzOTYsUXU9MzUzOTgsS3U9MzUzOTIsSnU9MzUzOTUsYnQ9NTEyNixlaT0zNTY2NCx0aT0zNTY2NSxyaT0zNTY2Nixicj01MTI0LG5pPTM1NjY3LGlpPTM1NjY4LG9pPTM1NjY5LHNpPTM1NjcwLGFpPTM1NjcxLHVpPTM1NjcyLGNpPTM1NjczLGZpPTM1Njc0LGxpPTM1Njc1LGRpPTM1Njc2LFp1PTM1Njc4LGVjPTM1NjgwLHRjPTM1Njc5LHJjPTM1NjgyLG5jPTM1Njg1LGljPTM1Njg2LG9jPTM1Njg3LHNjPTM1Njg4LGFjPTM1Njg5LHVjPTM1NjkwLGNjPTM2Mjg5LGZjPTM2MjkyLGxjPTM2MjkzLHZyPTUxMjUsbWk9MzYyOTQsaGk9MzYyOTUscGk9MzYyOTYsZGM9MzYyOTgsbWM9MzYyOTksaGM9MzYzMDAscGM9MzYzMDMseWM9MzYzMDYsX2M9MzYzMDcseGM9MzYzMDgsZ2M9MzYzMTEsdnQ9MzU1MyxFdD0zNDA2NyxFcj0zMjg3OSxUdD0zNTg2NixFPXt9O2Z1bmN0aW9uIHlpKHIsZSl7cmV0dXJuIEVbZV0uYmluZFBvaW50fWZ1bmN0aW9uIGJjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTFmKGUsdCl9fWZ1bmN0aW9uIHZjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTFmdihlLHQpfX1mdW5jdGlvbiBFYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0yZnYoZSx0KX19ZnVuY3Rpb24gVGMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtM2Z2KGUsdCl9fWZ1bmN0aW9uIEFjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTRmdihlLHQpfX1mdW5jdGlvbiBfaShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xaShlLHQpfX1mdW5jdGlvbiB4aShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xaXYoZSx0KX19ZnVuY3Rpb24gZ2kocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMml2KGUsdCl9fWZ1bmN0aW9uIGJpKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTNpdihlLHQpfX1mdW5jdGlvbiB2aShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm00aXYoZSx0KX19ZnVuY3Rpb24gd2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMXVpKGUsdCl9fWZ1bmN0aW9uIFJjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTF1aXYoZSx0KX19ZnVuY3Rpb24gU2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMnVpdihlLHQpfX1mdW5jdGlvbiBJYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0zdWl2KGUsdCl9fWZ1bmN0aW9uIEZjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTR1aXYoZSx0KX19ZnVuY3Rpb24gUGMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4MmZ2KGUsITEsdCl9fWZ1bmN0aW9uIERjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDNmdihlLCExLHQpfX1mdW5jdGlvbiBNYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXg0ZnYoZSwhMSx0KX19ZnVuY3Rpb24gQ2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4MngzZnYoZSwhMSx0KX19ZnVuY3Rpb24gT2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4M3gyZnYoZSwhMSx0KX19ZnVuY3Rpb24gTmMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4Mng0ZnYoZSwhMSx0KX19ZnVuY3Rpb24gVWMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4NHgyZnYoZSwhMSx0KX19ZnVuY3Rpb24gQmMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4M3g0ZnYoZSwhMSx0KX19ZnVuY3Rpb24ga2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4NHgzZnYoZSwhMSx0KX19ZnVuY3Rpb24gTChyLGUsdCxuKXtjb25zdCBpPXlpKHIsZSk7cmV0dXJuIFVlKHIpP2Z1bmN0aW9uKG8pe2xldCBzLGE7b3IocixvKT8ocz1vLGE9bnVsbCk6KHM9by50ZXh0dXJlLGE9by5zYW1wbGVyKSxyLnVuaWZvcm0xaShuLHQpLHIuYWN0aXZlVGV4dHVyZSh4dCt0KSxyLmJpbmRUZXh0dXJlKGkscyksci5iaW5kU2FtcGxlcih0LGEpfTpmdW5jdGlvbihvKXtyLnVuaWZvcm0xaShuLHQpLHIuYWN0aXZlVGV4dHVyZSh4dCt0KSxyLmJpbmRUZXh0dXJlKGksbyl9fWZ1bmN0aW9uICQocixlLHQsbixpKXtjb25zdCBvPXlpKHIsZSkscz1uZXcgSW50MzJBcnJheShpKTtmb3IobGV0IGE9MDthPGk7KythKXNbYV09dCthO3JldHVybiBVZShyKT9mdW5jdGlvbihhKXtyLnVuaWZvcm0xaXYobixzKSxhLmZvckVhY2goZnVuY3Rpb24odSxmKXtyLmFjdGl2ZVRleHR1cmUoeHQrc1tmXSk7bGV0IGMsZDtvcihyLHUpPyhjPXUsZD1udWxsKTooYz11LnRleHR1cmUsZD11LnNhbXBsZXIpLHIuYmluZFNhbXBsZXIodCxkKSxyLmJpbmRUZXh0dXJlKG8sYyl9KX06ZnVuY3Rpb24oYSl7ci51bmlmb3JtMWl2KG4scyksYS5mb3JFYWNoKGZ1bmN0aW9uKHUsZil7ci5hY3RpdmVUZXh0dXJlKHh0K3NbZl0pLHIuYmluZFRleHR1cmUobyx1KX0pfX1FW2J0XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0LHNldHRlcjpiYyxhcnJheVNldHRlcjp2Y30sRVtlaV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6OCxzZXR0ZXI6RWMsY29sczoyfSxFW3RpXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6VGMsY29sczozfSxFW3JpXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6QWMsY29sczo0fSxFW2JyXT17VHlwZTpJbnQzMkFycmF5LHNpemU6NCxzZXR0ZXI6X2ksYXJyYXlTZXR0ZXI6eGl9LEVbbmldPXtUeXBlOkludDMyQXJyYXksc2l6ZTo4LHNldHRlcjpnaSxjb2xzOjJ9LEVbaWldPXtUeXBlOkludDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6YmksY29sczozfSxFW29pXT17VHlwZTpJbnQzMkFycmF5LHNpemU6MTYsc2V0dGVyOnZpLGNvbHM6NH0sRVt2cl09e1R5cGU6VWludDMyQXJyYXksc2l6ZTo0LHNldHRlcjp3YyxhcnJheVNldHRlcjpSY30sRVttaV09e1R5cGU6VWludDMyQXJyYXksc2l6ZTo4LHNldHRlcjpTYyxjb2xzOjJ9LEVbaGldPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6MTIsc2V0dGVyOkljLGNvbHM6M30sRVtwaV09e1R5cGU6VWludDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6RmMsY29sczo0fSxFW3NpXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjQsc2V0dGVyOl9pLGFycmF5U2V0dGVyOnhpfSxFW2FpXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjgsc2V0dGVyOmdpLGNvbHM6Mn0sRVt1aV09e1R5cGU6VWludDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6YmksY29sczozfSxFW2NpXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjE2LHNldHRlcjp2aSxjb2xzOjR9LEVbZmldPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjMyLHNldHRlcjpQYyxyb3dzOjIsY29sczoyfSxFW2xpXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0OCxzZXR0ZXI6RGMscm93czozLGNvbHM6M30sRVtkaV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NjQsc2V0dGVyOk1jLHJvd3M6NCxjb2xzOjR9LEVbbmNdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjMyLHNldHRlcjpDYyxyb3dzOjIsY29sczozfSxFW2ljXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTozMixzZXR0ZXI6TmMscm93czoyLGNvbHM6NH0sRVtvY109e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NDgsc2V0dGVyOk9jLHJvd3M6Myxjb2xzOjJ9LEVbc2NdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQ4LHNldHRlcjpCYyxyb3dzOjMsY29sczo0fSxFW2FjXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6VWMscm93czo0LGNvbHM6Mn0sRVt1Y109e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NjQsc2V0dGVyOmtjLHJvd3M6NCxjb2xzOjN9LEVbWnVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpMLGFycmF5U2V0dGVyOiQsYmluZFBvaW50OnZ0fSxFW2VjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TCxhcnJheVNldHRlcjokLGJpbmRQb2ludDpFdH0sRVt0Y109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkwsYXJyYXlTZXR0ZXI6JCxiaW5kUG9pbnQ6RXJ9LEVbcmNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpMLGFycmF5U2V0dGVyOiQsYmluZFBvaW50OnZ0fSxFW2NjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TCxhcnJheVNldHRlcjokLGJpbmRQb2ludDpUdH0sRVtmY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkwsYXJyYXlTZXR0ZXI6JCxiaW5kUG9pbnQ6VHR9LEVbbGNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpMLGFycmF5U2V0dGVyOiQsYmluZFBvaW50OkV0fSxFW2RjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TCxhcnJheVNldHRlcjokLGJpbmRQb2ludDp2dH0sRVttY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkwsYXJyYXlTZXR0ZXI6JCxiaW5kUG9pbnQ6RXJ9LEVbaGNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpMLGFycmF5U2V0dGVyOiQsYmluZFBvaW50OkV0fSxFW3BjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TCxhcnJheVNldHRlcjokLGJpbmRQb2ludDpUdH0sRVt5Y109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkwsYXJyYXlTZXR0ZXI6JCxiaW5kUG9pbnQ6dnR9LEVbX2NdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpMLGFycmF5U2V0dGVyOiQsYmluZFBvaW50OkVyfSxFW3hjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TCxhcnJheVNldHRlcjokLGJpbmRQb2ludDpFdH0sRVtnY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkwsYXJyYXlTZXR0ZXI6JCxiaW5kUG9pbnQ6VHR9O2Z1bmN0aW9uIEF0KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHQudmFsdWUpc3dpdGNoKHIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHQudmFsdWUubGVuZ3RoKXtjYXNlIDQ6ci52ZXJ0ZXhBdHRyaWI0ZnYoZSx0LnZhbHVlKTticmVhaztjYXNlIDM6ci52ZXJ0ZXhBdHRyaWIzZnYoZSx0LnZhbHVlKTticmVhaztjYXNlIDI6ci52ZXJ0ZXhBdHRyaWIyZnYoZSx0LnZhbHVlKTticmVhaztjYXNlIDE6ci52ZXJ0ZXhBdHRyaWIxZnYoZSx0LnZhbHVlKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidGhlIGxlbmd0aCBvZiBhIGZsb2F0IGNvbnN0YW50IHZhbHVlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA0ISIpfWVsc2Ugci5iaW5kQnVmZmVyKGd0LHQuYnVmZmVyKSxyLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHIudmVydGV4QXR0cmliUG9pbnRlcihlLHQubnVtQ29tcG9uZW50c3x8dC5zaXplLHQudHlwZXx8YnQsdC5ub3JtYWxpemV8fCExLHQuc3RyaWRlfHwwLHQub2Zmc2V0fHwwKSxyLnZlcnRleEF0dHJpYkRpdmlzb3ImJnIudmVydGV4QXR0cmliRGl2aXNvcihlLHQuZGl2aXNvcnx8MCl9fWZ1bmN0aW9uIGxlKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHQudmFsdWUpaWYoci5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZSksdC52YWx1ZS5sZW5ndGg9PT00KXIudmVydGV4QXR0cmliNGl2KGUsdC52YWx1ZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlRoZSBsZW5ndGggb2YgYW4gaW50ZWdlciBjb25zdGFudCB2YWx1ZSBtdXN0IGJlIDQhIik7ZWxzZSByLmJpbmRCdWZmZXIoZ3QsdC5idWZmZXIpLHIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihlLHQubnVtQ29tcG9uZW50c3x8dC5zaXplLHQudHlwZXx8YnIsdC5zdHJpZGV8fDAsdC5vZmZzZXR8fDApLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUsdC5kaXZpc29yfHwwKX19ZnVuY3Rpb24gd3QocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYodC52YWx1ZSlpZihyLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSx0LnZhbHVlLmxlbmd0aD09PTQpci52ZXJ0ZXhBdHRyaWI0dWl2KGUsdC52YWx1ZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlRoZSBsZW5ndGggb2YgYW4gdW5zaWduZWQgaW50ZWdlciBjb25zdGFudCB2YWx1ZSBtdXN0IGJlIDQhIik7ZWxzZSByLmJpbmRCdWZmZXIoZ3QsdC5idWZmZXIpLHIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihlLHQubnVtQ29tcG9uZW50c3x8dC5zaXplLHQudHlwZXx8dnIsdC5zdHJpZGV8fDAsdC5vZmZzZXR8fDApLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUsdC5kaXZpc29yfHwwKX19ZnVuY3Rpb24gVHIocixlLHQpe2NvbnN0IG49dC5zaXplLGk9dC5jb3VudDtyZXR1cm4gZnVuY3Rpb24obyl7ci5iaW5kQnVmZmVyKGd0LG8uYnVmZmVyKTtjb25zdCBzPW8uc2l6ZXx8by5udW1Db21wb25lbnRzfHxuLGE9cy9pLHU9by50eXBlfHxidCxjPUVbdV0uc2l6ZSpzLGQ9by5ub3JtYWxpemV8fCExLHk9by5vZmZzZXR8fDAsXz1jL2k7Zm9yKGxldCBtPTA7bTxpOysrbSlyLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGUrbSksci52ZXJ0ZXhBdHRyaWJQb2ludGVyKGUrbSxhLHUsZCxjLHkrXyptKSxyLnZlcnRleEF0dHJpYkRpdmlzb3ImJnIudmVydGV4QXR0cmliRGl2aXNvcihlK20sby5kaXZpc29yfHwwKX19Y29uc3QgRD17fTtEW2J0XT17c2l6ZTo0LHNldHRlcjpBdH0sRFtlaV09e3NpemU6OCxzZXR0ZXI6QXR9LERbdGldPXtzaXplOjEyLHNldHRlcjpBdH0sRFtyaV09e3NpemU6MTYsc2V0dGVyOkF0fSxEW2JyXT17c2l6ZTo0LHNldHRlcjpsZX0sRFtuaV09e3NpemU6OCxzZXR0ZXI6bGV9LERbaWldPXtzaXplOjEyLHNldHRlcjpsZX0sRFtvaV09e3NpemU6MTYsc2V0dGVyOmxlfSxEW3ZyXT17c2l6ZTo0LHNldHRlcjp3dH0sRFttaV09e3NpemU6OCxzZXR0ZXI6d3R9LERbaGldPXtzaXplOjEyLHNldHRlcjp3dH0sRFtwaV09e3NpemU6MTYsc2V0dGVyOnd0fSxEW3NpXT17c2l6ZTo0LHNldHRlcjpsZX0sRFthaV09e3NpemU6OCxzZXR0ZXI6bGV9LERbdWldPXtzaXplOjEyLHNldHRlcjpsZX0sRFtjaV09e3NpemU6MTYsc2V0dGVyOmxlfSxEW2ZpXT17c2l6ZTo0LHNldHRlcjpUcixjb3VudDoyfSxEW2xpXT17c2l6ZTo5LHNldHRlcjpUcixjb3VudDozfSxEW2RpXT17c2l6ZToxNixzZXR0ZXI6VHIsY291bnQ6NH07Y29uc3QgTGM9L0VSUk9SOlxzKlxkKzooXGQrKS9naTtmdW5jdGlvbiAkYyhyLGU9IiIsdD0wKXtjb25zdCBuPVsuLi5lLm1hdGNoQWxsKExjKV0saT1uZXcgTWFwKG4ubWFwKChvLHMpPT57Y29uc3QgYT1wYXJzZUludChvWzFdKSx1PW5bcysxXSxmPXU/dS5pbmRleDplLmxlbmd0aCxjPWUuc3Vic3RyaW5nKG8uaW5kZXgsZik7cmV0dXJuW2EtMSxjXX0pKTtyZXR1cm4gci5zcGxpdChgCmApLm1hcCgobyxzKT0+e2NvbnN0IGE9aS5nZXQocyk7cmV0dXJuYCR7cysxK3R9OiAke299JHthP2AKCl5eXiAke2F9YDoiIn1gfSkuam9pbihgCmApfWNvbnN0IEVpPS9eWyBcdF0qXG4vO2Z1bmN0aW9uIFRpKHIpe2xldCBlPTA7cmV0dXJuIEVpLnRlc3QocikmJihlPTEscj1yLnJlcGxhY2UoRWksIiIpKSx7bGluZU9mZnNldDplLHNoYWRlclNvdXJjZTpyfX1mdW5jdGlvbiBHYyhyLGUpe3JldHVybiByLmVycm9yQ2FsbGJhY2soZSksci5jYWxsYmFjayYmc2V0VGltZW91dCgoKT0+e3IuY2FsbGJhY2soYCR7ZX0KJHtyLmVycm9ycy5qb2luKGAKYCl9YCl9KSxudWxsfWZ1bmN0aW9uIHpjKHIsZSx0LG4pe2lmKG49bnx8Z3IsIXIuZ2V0U2hhZGVyUGFyYW1ldGVyKHQsR3UpKXtjb25zdCBvPXIuZ2V0U2hhZGVySW5mb0xvZyh0KSx7bGluZU9mZnNldDpzLHNoYWRlclNvdXJjZTphfT1UaShyLmdldFNoYWRlclNvdXJjZSh0KSksdT1gJHskYyhhLG8scyl9CkVycm9yIGNvbXBpbGluZyAke0RuKHIsZSl9OiAke299YDtyZXR1cm4gbih1KSx1fXJldHVybiIifWZ1bmN0aW9uIEFyKHIsZSx0KXtsZXQgbixpLG87aWYodHlwZW9mIGU9PSJmdW5jdGlvbiImJih0PWUsZT12b2lkIDApLHR5cGVvZiByPT0iZnVuY3Rpb24iKXQ9cixyPXZvaWQgMDtlbHNlIGlmKHImJiFBcnJheS5pc0FycmF5KHIpKXtjb25zdCBmPXI7dD1mLmVycm9yQ2FsbGJhY2sscj1mLmF0dHJpYkxvY2F0aW9ucyxuPWYudHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyxpPWYudHJhbnNmb3JtRmVlZGJhY2tNb2RlLG89Zi5jYWxsYmFja31jb25zdCBzPXR8fGdyLGE9W10sdT17ZXJyb3JDYWxsYmFjayhmLC4uLmMpe2EucHVzaChmKSxzKGYsLi4uYyl9LHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3M6bix0cmFuc2Zvcm1GZWVkYmFja01vZGU6aSxjYWxsYmFjazpvLGVycm9yczphfTt7bGV0IGY9e307QXJyYXkuaXNBcnJheShyKT9yLmZvckVhY2goZnVuY3Rpb24oYyxkKXtmW2NdPWU/ZVtkXTpkfSk6Zj1yfHx7fSx1LmF0dHJpYkxvY2F0aW9ucz1mfXJldHVybiB1fWNvbnN0IEhjPVsiVkVSVEVYX1NIQURFUiIsIkZSQUdNRU5UX1NIQURFUiJdO2Z1bmN0aW9uIFZjKHIsZSl7aWYoZS5pbmRleE9mKCJmcmFnIik+PTApcmV0dXJuIEh1O2lmKGUuaW5kZXhPZigidmVydCIpPj0wKXJldHVybiBWdX1mdW5jdGlvbiBXYyhyLGUsdCl7Y29uc3Qgbj1yLmdldEF0dGFjaGVkU2hhZGVycyhlKTtmb3IoY29uc3QgaSBvZiBuKXQuaGFzKGkpJiZyLmRlbGV0ZVNoYWRlcihpKTtyLmRlbGV0ZVByb2dyYW0oZSl9Y29uc3QgamM9KHI9MCk9Pm5ldyBQcm9taXNlKGU9PnNldFRpbWVvdXQoZSxyKSk7ZnVuY3Rpb24gcWMocixlLHQpe2NvbnN0IG49ci5jcmVhdGVQcm9ncmFtKCkse2F0dHJpYkxvY2F0aW9uczppLHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3M6byx0cmFuc2Zvcm1GZWVkYmFja01vZGU6c309QXIodCk7Zm9yKGxldCBhPTA7YTxlLmxlbmd0aDsrK2Epe2xldCB1PWVbYV07aWYodHlwZW9mIHU9PSJzdHJpbmciKXtjb25zdCBmPUpuKHUpLGM9Zj9mLnRleHQ6dTtsZXQgZD1yW0hjW2FdXTtmJiZmLnR5cGUmJihkPVZjKHIsZi50eXBlKXx8ZCksdT1yLmNyZWF0ZVNoYWRlcihkKSxyLnNoYWRlclNvdXJjZSh1LFRpKGMpLnNoYWRlclNvdXJjZSksci5jb21waWxlU2hhZGVyKHUpLHIuYXR0YWNoU2hhZGVyKG4sdSl9fU9iamVjdC5lbnRyaWVzKGkpLmZvckVhY2goKFthLHVdKT0+ci5iaW5kQXR0cmliTG9jYXRpb24obix1LGEpKTt7bGV0IGE9bzthJiYoYS5hdHRyaWJzJiYoYT1hLmF0dHJpYnMpLEFycmF5LmlzQXJyYXkoYSl8fChhPU9iamVjdC5rZXlzKGEpKSxyLnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MobixhLHN8fFd1KSl9cmV0dXJuIHIubGlua1Byb2dyYW0obiksbn1mdW5jdGlvbiBYYyhyLGUsdCxuLGkpe2NvbnN0IG89QXIodCxuLGkpLHM9bmV3IFNldChlKSxhPXFjKHIsZSxvKTtmdW5jdGlvbiB1KGYsYyl7Y29uc3QgZD1RYyhmLGMsby5lcnJvckNhbGxiYWNrKTtyZXR1cm4gZCYmV2MoZixjLHMpLGR9aWYoby5jYWxsYmFjayl7WWMocixhKS50aGVuKCgpPT57Y29uc3QgZj11KHIsYSk7by5jYWxsYmFjayhmLGY/dm9pZCAwOmEpfSk7cmV0dXJufXJldHVybiB1KHIsYSk/dm9pZCAwOmF9YXN5bmMgZnVuY3Rpb24gWWMocixlKXtjb25zdCB0PXIuZ2V0RXh0ZW5zaW9uKCJLSFJfcGFyYWxsZWxfc2hhZGVyX2NvbXBpbGUiKSxuPXQ/KG8scyk9Pm8uZ2V0UHJvZ3JhbVBhcmFtZXRlcihzLHQuQ09NUExFVElPTl9TVEFUVVNfS0hSKTooKT0+ITA7bGV0IGk9MDtkbyBhd2FpdCBqYyhpKSxpPTFlMy82MDt3aGlsZSghbihyLGUpKX1mdW5jdGlvbiBRYyhyLGUsdCl7aWYodD10fHxnciwhci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsenUpKXtjb25zdCBpPXIuZ2V0UHJvZ3JhbUluZm9Mb2coZSk7dChgRXJyb3IgaW4gcHJvZ3JhbSBsaW5raW5nOiAke2l9YCk7Y29uc3Qgcz1yLmdldEF0dGFjaGVkU2hhZGVycyhlKS5tYXAoYT0+emMocixyLmdldFNoYWRlclBhcmFtZXRlcihhLHIuU0hBREVSX1RZUEUpLGEsdCkpO3JldHVybmAke2l9CiR7cy5maWx0ZXIoYT0+YSkuam9pbihgCmApfWB9fWZ1bmN0aW9uIEtjKHIsZSx0LG4saSl7cmV0dXJuIFhjKHIsZSx0LG4saSl9ZnVuY3Rpb24gQWkocil7Y29uc3QgZT1yLm5hbWU7cmV0dXJuIGUuc3RhcnRzV2l0aCgiZ2xfIil8fGUuc3RhcnRzV2l0aCgid2ViZ2xfIil9Y29uc3QgSmM9LyhcLnxcW3xdfFx3KykvZyxaYz1yPT5yPj0iMCImJnI8PSI5IjtmdW5jdGlvbiBlZihyLGUsdCxuKXtjb25zdCBpPXIuc3BsaXQoSmMpLmZpbHRlcihhPT5hIT09IiIpO2xldCBvPTAscz0iIjtmb3IoOzspe2NvbnN0IGE9aVtvKytdO3MrPWE7Y29uc3QgdT1aYyhhWzBdKSxmPXU/cGFyc2VJbnQoYSk6YTtpZih1JiYocys9aVtvKytdKSxvPT09aS5sZW5ndGgpe3RbZl09ZTticmVha31lbHNle2NvbnN0IGQ9aVtvKytdLHk9ZD09PSJbIixfPXRbZl18fCh5P1tdOnt9KTt0W2ZdPV8sdD1fLG5bc109bltzXXx8ZnVuY3Rpb24obSl7cmV0dXJuIGZ1bmN0aW9uKHgpe3dpKG0seCl9fShfKSxzKz1kfX19ZnVuY3Rpb24gdGYocixlKXtsZXQgdD0wO2Z1bmN0aW9uIG4oYSx1LGYpe2NvbnN0IGM9dS5uYW1lLmVuZHNXaXRoKCJbMF0iKSxkPXUudHlwZSx5PUVbZF07aWYoIXkpdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIHR5cGU6IDB4JHtkLnRvU3RyaW5nKDE2KX1gKTtsZXQgXztpZih5LmJpbmRQb2ludCl7Y29uc3QgbT10O3QrPXUuc2l6ZSxjP189eS5hcnJheVNldHRlcihyLGQsbSxmLHUuc2l6ZSk6Xz15LnNldHRlcihyLGQsbSxmLHUuc2l6ZSl9ZWxzZSB5LmFycmF5U2V0dGVyJiZjP189eS5hcnJheVNldHRlcihyLGYpOl89eS5zZXR0ZXIocixmKTtyZXR1cm4gXy5sb2NhdGlvbj1mLF99Y29uc3QgaT17fSxvPXt9LHM9ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsWm4pO2ZvcihsZXQgYT0wO2E8czsrK2Epe2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtKGUsYSk7aWYoQWkodSkpY29udGludWU7bGV0IGY9dS5uYW1lO2YuZW5kc1dpdGgoIlswXSIpJiYoZj1mLnN1YnN0cigwLGYubGVuZ3RoLTMpKTtjb25zdCBjPXIuZ2V0VW5pZm9ybUxvY2F0aW9uKGUsdS5uYW1lKTtpZihjKXtjb25zdCBkPW4oZSx1LGMpO2lbZl09ZCxlZihmLGQsbyxpKX19cmV0dXJuIGl9ZnVuY3Rpb24gcmYocixlKXtjb25zdCB0PXt9LG49ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUscXUpO2ZvcihsZXQgaT0wO2k8bjsrK2kpe2NvbnN0IG89ci5nZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoZSxpKTt0W28ubmFtZV09e2luZGV4OmksdHlwZTpvLnR5cGUsc2l6ZTpvLnNpemV9fXJldHVybiB0fWZ1bmN0aW9uIG5mKHIsZSl7Y29uc3QgdD1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxabiksbj1bXSxpPVtdO2ZvcihsZXQgYT0wO2E8dDsrK2Epe2kucHVzaChhKSxuLnB1c2goe30pO2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtKGUsYSk7blthXS5uYW1lPXUubmFtZX1bWyJVTklGT1JNX1RZUEUiLCJ0eXBlIl0sWyJVTklGT1JNX1NJWkUiLCJzaXplIl0sWyJVTklGT1JNX0JMT0NLX0lOREVYIiwiYmxvY2tOZHgiXSxbIlVOSUZPUk1fT0ZGU0VUIiwib2Zmc2V0Il1dLmZvckVhY2goZnVuY3Rpb24oYSl7Y29uc3QgdT1hWzBdLGY9YVsxXTtyLmdldEFjdGl2ZVVuaWZvcm1zKGUsaSxyW3VdKS5mb3JFYWNoKGZ1bmN0aW9uKGMsZCl7bltkXVtmXT1jfSl9KTtjb25zdCBvPXt9LHM9ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsWHUpO2ZvcihsZXQgYT0wO2E8czsrK2Epe2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKGUsYSksZj17aW5kZXg6ci5nZXRVbmlmb3JtQmxvY2tJbmRleChlLHUpLHVzZWRCeVZlcnRleFNoYWRlcjpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEsWXUpLHVzZWRCeUZyYWdtZW50U2hhZGVyOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSxRdSksc2l6ZTpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEsS3UpLHVuaWZvcm1JbmRpY2VzOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSxKdSl9O2YudXNlZD1mLnVzZWRCeVZlcnRleFNoYWRlcnx8Zi51c2VkQnlGcmFnbWVudFNoYWRlcixvW3VdPWZ9cmV0dXJue2Jsb2NrU3BlY3M6byx1bmlmb3JtRGF0YTpufX1mdW5jdGlvbiB3aShyLGUpe2Zvcihjb25zdCB0IGluIGUpe2NvbnN0IG49clt0XTt0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uKGVbdF0pOndpKHJbdF0sZVt0XSl9fWZ1bmN0aW9uIFJpKHIsLi4uZSl7Y29uc3QgdD1yLnVuaWZvcm1TZXR0ZXJzfHxyLG49ZS5sZW5ndGg7Zm9yKGxldCBpPTA7aTxuOysraSl7Y29uc3Qgbz1lW2ldO2lmKEFycmF5LmlzQXJyYXkobykpe2NvbnN0IHM9by5sZW5ndGg7Zm9yKGxldCBhPTA7YTxzOysrYSlSaSh0LG9bYV0pfWVsc2UgZm9yKGNvbnN0IHMgaW4gbyl7Y29uc3QgYT10W3NdO2EmJmEob1tzXSl9fX1mdW5jdGlvbiBvZihyLGUpe2NvbnN0IHQ9e30sbj1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxqdSk7Zm9yKGxldCBpPTA7aTxuOysraSl7Y29uc3Qgbz1yLmdldEFjdGl2ZUF0dHJpYihlLGkpO2lmKEFpKG8pKWNvbnRpbnVlO2NvbnN0IHM9ci5nZXRBdHRyaWJMb2NhdGlvbihlLG8ubmFtZSksYT1EW28udHlwZV0sdT1hLnNldHRlcihyLHMsYSk7dS5sb2NhdGlvbj1zLHRbby5uYW1lXT11fXJldHVybiB0fWZ1bmN0aW9uIHNmKHIsZSl7Zm9yKGNvbnN0IHQgaW4gZSl7Y29uc3Qgbj1yW3RdO24mJm4oZVt0XSl9fWZ1bmN0aW9uIGFmKHIsZSx0KXt0LnZlcnRleEFycmF5T2JqZWN0P3IuYmluZFZlcnRleEFycmF5KHQudmVydGV4QXJyYXlPYmplY3QpOihzZihlLmF0dHJpYlNldHRlcnN8fGUsdC5hdHRyaWJzKSx0LmluZGljZXMmJnIuYmluZEJ1ZmZlcigkdSx0LmluZGljZXMpKX1mdW5jdGlvbiBTaShyLGUpe2NvbnN0IHQ9dGYocixlKSxuPW9mKHIsZSksaT17cHJvZ3JhbTplLHVuaWZvcm1TZXR0ZXJzOnQsYXR0cmliU2V0dGVyczpufTtyZXR1cm4gVWUocikmJihpLnVuaWZvcm1CbG9ja1NwZWM9bmYocixlKSxpLnRyYW5zZm9ybUZlZWRiYWNrSW5mbz1yZihyLGUpKSxpfWNvbnN0IHVmPS9cc3x7fH18Oy87ZnVuY3Rpb24gY2YocixlLHQsbixpKXtjb25zdCBvPUFyKHQsbixpKSxzPVtdO2lmKGU9ZS5tYXAoZnVuY3Rpb24oZil7aWYoIXVmLnRlc3QoZikpe2NvbnN0IGM9Sm4oZik7aWYoYylmPWMudGV4dDtlbHNle2NvbnN0IGQ9YG5vIGVsZW1lbnQgd2l0aCBpZDogJHtmfWA7by5lcnJvckNhbGxiYWNrKGQpLHMucHVzaChkKX19cmV0dXJuIGZ9KSxzLmxlbmd0aClyZXR1cm4gR2MobywiIik7Y29uc3QgYT1vLmNhbGxiYWNrO2EmJihvLmNhbGxiYWNrPShmLGMpPT57YShmLGY/dm9pZCAwOlNpKHIsYykpfSk7Y29uc3QgdT1LYyhyLGUsbyk7cmV0dXJuIHU/U2kocix1KTpudWxsfWNvbnN0IGZmPTQsSWk9NTEyMztmdW5jdGlvbiBsZihyLGUsdCxuLGksbyl7dD10PT09dm9pZCAwP2ZmOnQ7Y29uc3Qgcz1lLmluZGljZXMsYT1lLmVsZW1lbnRUeXBlLHU9bj09PXZvaWQgMD9lLm51bUVsZW1lbnRzOm47aT1pPT09dm9pZCAwPzA6aSxhfHxzP28hPT12b2lkIDA/ci5kcmF3RWxlbWVudHNJbnN0YW5jZWQodCx1LGE9PT12b2lkIDA/SWk6ZS5lbGVtZW50VHlwZSxpLG8pOnIuZHJhd0VsZW1lbnRzKHQsdSxhPT09dm9pZCAwP0lpOmUuZWxlbWVudFR5cGUsaSk6byE9PXZvaWQgMD9yLmRyYXdBcnJheXNJbnN0YW5jZWQodCxpLHUsbyk6ci5kcmF3QXJyYXlzKHQsaSx1KX1jb25zdCBGaT0zNjE2MCxSdD0zNjE2MSxkZj0zNTUzLG1mPTUxMjEsaGY9NjQwMixwZj02NDA4LHlmPTMzMTkwLF9mPTM2MDEyLHhmPTM1MDU2LGdmPTM2MDEzLGJmPTMyODU0LHZmPTMyODU1LEVmPTM2MTk0LFBpPTMzMTg5LERpPTY0MDEsTWk9MzYxNjgsd3I9MzQwNDEsUnI9MzYwNjQsU3Q9MzYwOTYsQ2k9MzYxMjgsU3I9MzMzMDYsSXI9MzMwNzEsRnI9OTcyOSxUZj1be2Zvcm1hdDpwZix0eXBlOm1mLG1pbjpGcix3cmFwOklyfSx7Zm9ybWF0OndyfV0scT17fTtxW3dyXT1TcixxW0RpXT1DaSxxW01pXT1DaSxxW2hmXT1TdCxxW1BpXT1TdCxxW3lmXT1TdCxxW19mXT1TdCxxW3hmXT1TcixxW2dmXT1TcjtmdW5jdGlvbiBBZihyLGUpe3JldHVybiBxW3JdfHxxW2VdfWNvbnN0IGRlPXt9O2RlW2JmXT0hMCxkZVt2Zl09ITAsZGVbRWZdPSEwLGRlW3dyXT0hMCxkZVtQaV09ITAsZGVbRGldPSEwLGRlW01pXT0hMDtmdW5jdGlvbiB3ZihyKXtyZXR1cm4gZGVbcl19Y29uc3QgUmY9MzI7ZnVuY3Rpb24gU2Yocil7cmV0dXJuIHI+PVJyJiZyPFJyK1JmfWZ1bmN0aW9uIEl0KHIsZSx0LG4pe2NvbnN0IGk9Rmksbz1yLmNyZWF0ZUZyYW1lYnVmZmVyKCk7ci5iaW5kRnJhbWVidWZmZXIoaSxvKSx0PXR8fHIuZHJhd2luZ0J1ZmZlcldpZHRoLG49bnx8ci5kcmF3aW5nQnVmZmVySGVpZ2h0LGU9ZXx8VGY7Y29uc3Qgcz1bXSxhPXtmcmFtZWJ1ZmZlcjpvLGF0dGFjaG1lbnRzOltdLHdpZHRoOnQsaGVpZ2h0Om59O3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24odSxmKXtsZXQgYz11LmF0dGFjaG1lbnQ7Y29uc3QgZD11LnNhbXBsZXMseT11LmZvcm1hdDtsZXQgXz11LmF0dGFjaG1lbnRQb2ludHx8QWYoeSx1LmludGVybmFsRm9ybWF0KTtpZihffHwoXz1ScitmKSxTZihfKSYmcy5wdXNoKF8pLCFjKWlmKGQhPT12b2lkIDB8fHdmKHkpKWM9ci5jcmVhdGVSZW5kZXJidWZmZXIoKSxyLmJpbmRSZW5kZXJidWZmZXIoUnQsYyksZD4xP3IucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKFJ0LGQseSx0LG4pOnIucmVuZGVyYnVmZmVyU3RvcmFnZShSdCx5LHQsbik7ZWxzZXtjb25zdCBtPU9iamVjdC5hc3NpZ24oe30sdSk7bS53aWR0aD10LG0uaGVpZ2h0PW4sbS5hdXRvPT09dm9pZCAwJiYobS5hdXRvPSExLG0ubWluPW0ubWlufHxtLm1pbk1hZ3x8RnIsbS5tYWc9bS5tYWd8fG0ubWluTWFnfHxGcixtLndyYXBTPW0ud3JhcFN8fG0ud3JhcHx8SXIsbS53cmFwVD1tLndyYXBUfHxtLndyYXB8fElyKSxjPUtuKHIsbSl9aWYoQnMocixjKSlyLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGksXyxSdCxjKTtlbHNlIGlmKG9yKHIsYykpdS5sYXllciE9PXZvaWQgMD9yLmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKGksXyxjLHUubGV2ZWx8fDAsdS5sYXllcik6ci5mcmFtZWJ1ZmZlclRleHR1cmUyRChpLF8sdS50YXJnZXR8fGRmLGMsdS5sZXZlbHx8MCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoInVua25vd24gYXR0YWNobWVudCB0eXBlIik7YS5hdHRhY2htZW50cy5wdXNoKGMpfSksci5kcmF3QnVmZmVycyYmci5kcmF3QnVmZmVycyhzKSxhfWZ1bmN0aW9uIElmKHIsZSx0KXt0PXR8fEZpLGU/KHIuYmluZEZyYW1lYnVmZmVyKHQsZS5mcmFtZWJ1ZmZlciksci52aWV3cG9ydCgwLDAsZS53aWR0aCxlLmhlaWdodCkpOihyLmJpbmRGcmFtZWJ1ZmZlcih0LG51bGwpLHIudmlld3BvcnQoMCwwLHIuZHJhd2luZ0J1ZmZlcldpZHRoLHIuZHJhd2luZ0J1ZmZlckhlaWdodCkpfWZ1bmN0aW9uIFMocixlKXtyZXR1cm4oKT0+ZSBpbnN0YW5jZW9mIFdlYkdMVGV4dHVyZT9lOktuKHIse3NyYzplLHdyYXA6ci5DTEFNUF9UT19FREdFfSl9Y29uc3QgT2k9MjtjbGFzcyBiZXtjb25zdHJ1Y3RvcihlKXtwKHRoaXMsImlkIiwiXyIpO3AodGhpcywiY29udGV4dCIpO3AodGhpcywib3V0cHV0Iik7cCh0aGlzLCJmYmkiKTtwKHRoaXMsIm9wdGlvbnMiKTtwKHRoaXMsInByb2dyYW1JbmZvIik7cCh0aGlzLCJidWZmZXJJbmZvIik7cCh0aGlzLCJwcm9maWxlciIpO3AodGhpcywibGFzdFJ1biIpO2NvbnN0e2NvbnRleHQ6dCx3aWR0aDpuLGhlaWdodDppfT1lO3RoaXMuY29udGV4dD10LHRoaXMub3B0aW9ucz1lO2NvbnN0IG89dGhpcy5idWlsZERlZmluZXMoKTt0aGlzLnByb2dyYW1JbmZvPWNmKHRoaXMuY29udGV4dCxbbyt0aGlzLmdldFZlcnRleFNoYWRlcigpLG8rdGhpcy5nZXRGcmFnbWVudFNoYWRlcigpXSksdGhpcy5idWZmZXJJbmZvPWFhKHRoaXMuY29udGV4dCx0aGlzLmdldEJ1ZmZlcnMoKSksdGhpcy5mYmk9SXQodGhpcy5jb250ZXh0LFt7Zm9ybWF0OnRoaXMuY29udGV4dC5SR0JBLHR5cGU6dGhpcy5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnRoaXMuY29udGV4dC5MSU5FQVIsd3JhcDp0aGlzLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLG4saSksdGhpcy5vdXRwdXQ9dGhpcy5mYmkuYXR0YWNobWVudHNbMF19cmVzaXplT3V0cHV0KGUsdCl7dGhpcy5mYmk9SXQodGhpcy5jb250ZXh0LFt7Zm9ybWF0OnRoaXMuY29udGV4dC5SR0JBLHR5cGU6dGhpcy5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnRoaXMuY29udGV4dC5MSU5FQVIsd3JhcDp0aGlzLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLGUsdCksdGhpcy5vcHRpb25zLndpZHRoPWUsdGhpcy5vcHRpb25zLmhlaWdodD10LHRoaXMub3V0cHV0PXRoaXMuZmJpLmF0dGFjaG1lbnRzWzBdfWdldERlZmluZXMoKXtyZXR1cm57fX1nZXRCdWZmZXJzKCl7cmV0dXJue3Bvc2l0aW9uOntudW1Db21wb25lbnRzOjIsZGF0YTpbLTEsLTEsLTEsMSwxLC0xLDEsMSwtMSwxLDEsLTFdfSx0ZXh0dXJlX2Nvb3JkOntudW1Db21wb25lbnRzOjIsZGF0YTpbMCwwLDAsMSwxLDAsMSwxLDAsMSwxLDBdfX19YnVpbGREZWZpbmVzKCl7bGV0IGU9IiI7Y29uc3QgdD10aGlzLmdldERlZmluZXMoKTtmb3IobGV0IG4gaW4gdCllKz1gI2RlZmluZSAke259ICR7dFtuXS50b0ZpeGVkKDEpfQpgO3JldHVybiBlfXJ1bihlKXt2YXIgaSxvLHMsYSx1LGY7KGk9dGhpcy5wcm9maWxlcik9PW51bGx8fGkucHVzaENvbnRleHQoYFske3RoaXMuaWR9XSBQUk9HIDogJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9YCksKG89dGhpcy5wcm9maWxlcik9PW51bGx8fG8ucHVzaENvbnRleHQoYFske3RoaXMuaWR9XSBVTklGT1JNU2ApO2Zvcihjb25zdCBjIGluIGUpdHlwZW9mIGVbY109PSJmdW5jdGlvbiImJigocz10aGlzLnByb2ZpbGVyKT09bnVsbHx8cy5wdXNoQ29udGV4dChgWyR7dGhpcy5pZH1dIFVOSSA6ICR7Y31gKSxlW2NdPWVbY10oKSwoYT10aGlzLnByb2ZpbGVyKT09bnVsbHx8YS5wb3BDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JIDogJHtjfWApKTsodT10aGlzLnByb2ZpbGVyKT09bnVsbHx8dS5wb3BDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JRk9STVNgKTtjb25zdCB0PURhdGUubm93KCk7bGV0IG49MDt0aGlzLmxhc3RSdW4mJihuPSh0LXRoaXMubGFzdFJ1bikvMWUzKSx0aGlzLmxhc3RSdW49dCx0aGlzLmNvbnRleHQudmlld3BvcnQoMCwwLHRoaXMuY29udGV4dC5jYW52YXMud2lkdGgsdGhpcy5jb250ZXh0LmNhbnZhcy5oZWlnaHQpLHRoaXMuY29udGV4dC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbUluZm8ucHJvZ3JhbSksYWYodGhpcy5jb250ZXh0LHRoaXMucHJvZ3JhbUluZm8sdGhpcy5idWZmZXJJbmZvKSxSaSh0aGlzLnByb2dyYW1JbmZvLHtkZWx0YTpuLGNhbnZhczpbdGhpcy5jb250ZXh0LmNhbnZhcy53aWR0aCx0aGlzLmNvbnRleHQuY2FudmFzLmhlaWdodF0sLi4uZX0pLElmKHRoaXMuY29udGV4dCx0aGlzLm9wdGlvbnMuZGlzYWJsZUZyYW1lYnVmZmVyP251bGw6dGhpcy5mYmkpLGxmKHRoaXMuY29udGV4dCx0aGlzLmJ1ZmZlckluZm8pLChmPXRoaXMucHJvZmlsZXIpPT1udWxsfHxmLnBvcENvbnRleHQoYFske3RoaXMuaWR9XSBQUk9HIDogJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9YCl9c2V0UHJvZmlsZXIoZSl7dGhpcy5wcm9maWxlcj1lfX12YXIgRmY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSB2ZWMyIGNhbnZhczsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKdW5pZm9ybSBzYW1wbGVyMkQgbWFzazsKCnZlYzQgbG9vcCgpOwoKdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSBsb29wKCk7IH0KYCxQZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIERmIGV4dGVuZHMgYmV7Z2V0RGVmaW5lcygpe3ZhciBlO3JldHVybntSQURJVVM6KGU9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/ZToxfX1nZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBGZit0aGlzLmNyZWF0ZUxvb3BGdW5jdGlvbigpfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBQZn1jcmVhdGVMb29wRnVuY3Rpb24oKXt2YXIgdDtsZXQgZT0odD10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD90OjE7cmV0dXJuYAoKICAgICAgICB2ZWM0IGxvb3AoKSB7IAogICAgICAgICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMCwwLDAsMCk7CiAgICAgICAgICAgIGZsb2F0IGZhY3RvclN1bSA9IDAuOwoKICAgICAgICAgICAgdmVjMiBub3JtYWxpemVkUmFkaXVzID0gdmVjMigtJHtlfS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRJbmNyZW1lbnQgPSB2ZWMyKDEuKSAvIGNhbnZhczsKICAgICAgICAgICAgdmVjMiBkaWZmID0gbm9ybWFsaXplZFJhZGl1czsKICAgICAgICAgICAgZmxvYXQgbWF4TGVuZ3RoID0gbGVuZ3RoKG5vcm1hbGl6ZWRSYWRpdXMpOwoKICAgICAgICAgICAgZm9yKGludCB5PS0ke2V9OyB5PCR7ZSsxfTsgKyt5KSB7CiAgICAgICAgICAgICAgICBmb3IoaW50IHg9LSR7ZX07IHg8JHtlKzF9OyArK3gpIHsKICAgICAgICAgICAgICAgICAgICBmbG9hdCBmYWN0b3IgPSAoMS4tIHRleHR1cmUyRChtYXNrLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpLmEpICogKG1heExlbmd0aCAtIGxlbmd0aChkaWZmKSkgLyBtYXhMZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZhY3RvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpOwogICAgICAgICAgICAgICAgICAgIGZhY3RvclN1bSArPSBmYWN0b3I7CiAgICAgICAgICAgICAgICAgICAgZGlmZi54ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRpZmYueSArPSBub3JtYWxpemVkSW5jcmVtZW50Lnk7CiAgICAgICAgICAgICAgICBkaWZmLnggPSBub3JtYWxpemVkUmFkaXVzLng7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAvIGZhY3RvclN1bTsKICAgICAgICB9YH19dmFyIE1mPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gc2FtcGxlcjJEIGJhY2tncm91bmQ7CnVuaWZvcm0gc2FtcGxlcjJEIGZvcmVncm91bmQ7CnVuaWZvcm0gc2FtcGxlcjJEIHRocmVzaG9sZDsKCnZvaWQgbWFpbigpIHsKICB2ZWM0IGJhY2tncm91bmRDb2xvciA9IHRleHR1cmUyRChiYWNrZ3JvdW5kLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCBmb3JlZ3JvdW5kQ29sb3IgPSB0ZXh0dXJlMkQoZm9yZWdyb3VuZCwgX3RleHR1cmVfY29vcmQpOwogIHZlYzQgdHJlc2hvbGRDb2xvciA9IHRleHR1cmUyRCh0aHJlc2hvbGQsIF90ZXh0dXJlX2Nvb3JkKTsKICBnbF9GcmFnQ29sb3IgPSBmb3JlZ3JvdW5kQ29sb3IgKiB0cmVzaG9sZENvbG9yLmEgKwogICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvciAqICgxLiAtIHRyZXNob2xkQ29sb3IuYSk7Cn0KYCxDZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKICBfdGV4dHVyZV9jb29yZC55ID0gMS4gLSB0ZXh0dXJlX2Nvb3JkLnk7Cn0KYDtjbGFzcyBQciBleHRlbmRzIGJle2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIE1mfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBDZn19Y2xhc3MgRHJ7Y29uc3RydWN0b3IoKXtwKHRoaXMsInN0ZXBzIixbXSk7cCh0aGlzLCJwcm9maWxlciIpfWFkZFN0ZXAoZSl7dGhpcy5zdGVwcy5wdXNoKGUpfWFzeW5jIHJ1bigpe2Zvcihjb25zdCBlIG9mIHRoaXMuc3RlcHMpZS5wcm9ncmFtLnJ1bihlLmdldFVuaWZvcm1zKCkpfXJlc2l6ZU91dHB1dChlLHQpe3ZhciBuLGk7KG49dGhpcy5wcm9maWxlcik9PW51bGx8fG4ucHVzaENvbnRleHQoYFBJUCBbJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9XWApO2Zvcihjb25zdCBvIG9mIHRoaXMuc3RlcHMpby5wcmV2ZW50UmVzaXplfHxvLnByb2dyYW0ucmVzaXplT3V0cHV0KGUsdCk7KGk9dGhpcy5wcm9maWxlcik9PW51bGx8fGkucG9wQ29udGV4dChgUElQIFske3RoaXMuY29uc3RydWN0b3IubmFtZX1dYCl9c2V0UHJvZmlsZXIoZSl7dGhpcy5wcm9maWxlcj1lO2Zvcihjb25zdCB0IG9mIHRoaXMuc3RlcHMpdC5wcm9ncmFtLnNldFByb2ZpbGVyKGUpfXNldElkKGUpe2Zvcihjb25zdCB0IG9mIHRoaXMuc3RlcHMpdC5wcm9ncmFtLmlkPWV9fWNsYXNzIE1yIGV4dGVuZHMgRHJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpO3AodGhpcywicHJlY2lzZU1hc2tFbmFibGVkIiwhMSl9fWNvbnN0IE9mPTEwLE5mPTIsVWY9ODtjbGFzcyBCZiBleHRlbmRzIE1ye2NvbnN0cnVjdG9yKHQsbil7c3VwZXIoKTtwKHRoaXMsImlucHV0SW1hZ2UiKTtwKHRoaXMsImlucHV0TWFzayIpO3AodGhpcywiYmx1ciIpO3RoaXMuY29udGV4dD10LHRoaXMucmFkaXVzPW47Y29uc3QgaT17Y29udGV4dDp0LGhlaWdodDp0LmNhbnZhcy5oZWlnaHQsd2lkdGg6dC5jYW52YXMud2lkdGh9O3RoaXMuYmx1cj1uZXcgRGYoey4uLmkscmFkaXVzOm4sLi4udGhpcy5nZXRCbHVyVGV4dHVyZVNpemUodC5jYW52YXMud2lkdGgsdC5jYW52YXMuaGVpZ2h0KX0pO2NvbnN0IG89bmV3IFByKHsuLi5pLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTp0aGlzLmJsdXIscHJldmVudFJlc2l6ZTohMCxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOlModCx0aGlzLmlucHV0SW1hZ2UpLG1hc2s6Uyh0LHRoaXMuaW5wdXRNYXNrKX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOm8sZ2V0VW5pZm9ybXM6KCk9Pih7YmFja2dyb3VuZDpTKHQsdGhpcy5ibHVyLm91dHB1dCksZm9yZWdyb3VuZDpTKHQsdGhpcy5pbnB1dEltYWdlKSx0aHJlc2hvbGQ6Uyh0LHRoaXMuaW5wdXRNYXNrKX0pfSl9Z2V0Qmx1clRleHR1cmVTaXplKHQsbil7Y29uc3QgaT10aGlzLnJhZGl1cz5PZj9VZjpOZjtyZXR1cm57d2lkdGg6TWF0aC5tYXgoT2ksdC9pKSxoZWlnaHQ6TWF0aC5tYXgoT2ksbi9pKX19c2V0RGF0YSh0LG4pe3RoaXMuaW5wdXRJbWFnZT10LHRoaXMuaW5wdXRNYXNrPW59cmVzaXplT3V0cHV0KHQsbil7c3VwZXIucmVzaXplT3V0cHV0KHQsbik7Y29uc3QgaT10aGlzLmdldEJsdXJUZXh0dXJlU2l6ZSh0LG4pO3RoaXMuYmx1ci5yZXNpemVPdXRwdXQoaS53aWR0aCxpLmhlaWdodCl9fWNsYXNzIE5pIGV4dGVuZHMgTXJ7Y29uc3RydWN0b3IodCl7c3VwZXIoKTtwKHRoaXMsImlucHV0SW1hZ2UiKTtwKHRoaXMsImlucHV0QmFja2dyb3VuZEltYWdlIik7cCh0aGlzLCJpbnB1dE1hc2siKTtwKHRoaXMsInByZWNpc2VNYXNrRW5hYmxlZCIsITApO3RoaXMuY29udGV4dD10O2NvbnN0IG49e2NvbnRleHQ6dCxoZWlnaHQ6dC5jYW52YXMuaGVpZ2h0LHdpZHRoOnQuY2FudmFzLndpZHRofSxpPW5ldyBQcih7Li4ubixkaXNhYmxlRnJhbWVidWZmZXI6ITB9KTt0aGlzLmFkZFN0ZXAoe3Byb2dyYW06aSxnZXRVbmlmb3JtczooKT0+KHtiYWNrZ3JvdW5kOlModCx0aGlzLmlucHV0QmFja2dyb3VuZEltYWdlKSxmb3JlZ3JvdW5kOlModCx0aGlzLmlucHV0SW1hZ2UpLHRocmVzaG9sZDpTKHQsdGhpcy5pbnB1dE1hc2spfSl9KX1zZXREYXRhKHQsbil7dGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn19Y2xhc3Mga2YgZXh0ZW5kcyBOaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7cCh0aGlzLCJmcmFtZVJlYWRlciIpO3AodGhpcywicHJlY2lzZU1hc2tFbmFibGVkIiwhMCl9c2V0IGlucHV0VmlkZW8odCl7dGhpcy5mcmFtZVJlYWRlcj10LmdldFJlYWRlcigpLHRoaXMucmVhZE5leHRWaWRlb0ZyYW1lKCl9YXN5bmMgcnVuKCl7dGhpcy5mcmFtZVJlYWRlciYmKGF3YWl0IHN1cGVyLnJ1bigpLHRoaXMucmVhZE5leHRWaWRlb0ZyYW1lKCkpfWFzeW5jIHJlYWROZXh0VmlkZW9GcmFtZSgpe3ZhciBuO2NvbnN0IHQ9YXdhaXQoKG49dGhpcy5mcmFtZVJlYWRlcik9PW51bGw/dm9pZCAwOm4ucmVhZCgpKTt0IT1udWxsJiZ0LnZhbHVlJiYodGhpcy5pbnB1dEJhY2tncm91bmRJbWFnZT1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcCh0LnZhbHVlKSx0LnZhbHVlLmNsb3NlKCkpfX12YXIgTGY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSB2ZWMyIGNhbnZhczsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKCnZlYzQgbG9vcCgpOwoKdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSBsb29wKCk7IH0KYCwkZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgLENyPShyPT4ocltyLkxJTkVBUj0wXT0iTElORUFSIixyW3IuR0FVU1NJQU49MV09IkdBVVNTSUFOIixyKSkoQ3J8fHt9KTtjbGFzcyBVaSBleHRlbmRzIGJle2dldERlZmluZXMoKXt2YXIgZTtyZXR1cm57UkFESVVTOihlPXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP2U6MX19Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gTGYrdGhpcy5jcmVhdGVMb29wRnVuY3Rpb24oKX1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gJGZ9Y3JlYXRlTG9vcEZ1bmN0aW9uKCl7dmFyIHQ7bGV0IGU9KHQ9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/dDoxO3JldHVybmAKCiAgICAgICAgdmVjNCBsb29wKCkgeyAKICAgICAgICAgICAgdmVjNCByZXN1bHQgPSB2ZWM0KDAsMCwwLDApOwogICAgICAgICAgICBmbG9hdCBmYWN0b3JTdW0gPSAwLjsKCiAgICAgICAgICAgIHZlYzIgbm9ybWFsaXplZFJhZGl1cyA9IHZlYzIoLSR7ZX0uKSAvIGNhbnZhczsKICAgICAgICAgICAgdmVjMiBub3JtYWxpemVkSW5jcmVtZW50ID0gdmVjMigxLikgLyBjYW52YXM7CiAgICAgICAgICAgIHZlYzIgZGlmZiA9IG5vcm1hbGl6ZWRSYWRpdXM7CgogICAgICAgICAgICBmb3IoaW50IHk9LSR7ZX07IHk8JHtlKzF9OyArK3kpIHsKICAgICAgICAgICAgICAgIGZvcihpbnQgeD0tJHtlfTsgeDwke2UrMX07ICsreCkgewogICAgICAgICAgICAgICAgICAgIGZsb2F0IGZhY3RvciA9IDEuOwogICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBmYWN0b3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQgKyBkaWZmKTsKICAgICAgICAgICAgICAgICAgICBmYWN0b3JTdW0gKz0gZmFjdG9yOwogICAgICAgICAgICAgICAgICAgIGRpZmYueCArPSBub3JtYWxpemVkSW5jcmVtZW50Lng7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkaWZmLnkgKz0gbm9ybWFsaXplZEluY3JlbWVudC55OwogICAgICAgICAgICAgICAgZGlmZi54ID0gbm9ybWFsaXplZFJhZGl1cy54OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByZXN1bHQgLyBmYWN0b3JTdW07CiAgICAgICAgfWB9Z2V0RmFjdG9yKGUsdCl7c3dpdGNoKHRoaXMub3B0aW9ucy50eXBlKXtjYXNlIDE6cmV0dXJuIHRoaXMuZ2V0TGluZWFyRmFjdG9yKGUsdCk7Y2FzZSAwOmRlZmF1bHQ6cmV0dXJuIHRoaXMuZ2V0TGluZWFyRmFjdG9yKGUsdCl9fWdldExpbmVhckZhY3RvcihlLHQpe3JldHVybiAxfWdldEdhdXNzaWFuRmFjdG9yKGUsdCl7dmFyIHU7Y29uc3Qgbj1NYXRoLlBJKjIsaT1NYXRoLm1heCgodT10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD91OjEsMSksbz0xLyhuKmkqKjIpLHM9LShlKioyK3QqKjIpLGE9bypzO3JldHVybiBvKk1hdGguRSoqYX19Y2xhc3MgR2YgZXh0ZW5kcyBNcntjb25zdHJ1Y3Rvcih0LG4pe3N1cGVyKCk7cCh0aGlzLCJpbnB1dEltYWdlIik7cCh0aGlzLCJpbnB1dE1hc2siKTt0aGlzLmNvbnRleHQ9dDtjb25zdCBpPXtjb250ZXh0OnQsaGVpZ2h0OnQuY2FudmFzLmhlaWdodCx3aWR0aDp0LmNhbnZhcy53aWR0aH0sbz1uZXcgVWkoey4uLmkscmFkaXVzOm4sdHlwZTpDci5HQVVTU0lBTn0pLHM9bmV3IFByKHsuLi5pLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTpvLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6Uyh0LHRoaXMuaW5wdXRJbWFnZSl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpzLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6Uyh0LHRoaXMuaW5wdXRJbWFnZSksZm9yZWdyb3VuZDpTKHQsby5vdXRwdXQpLHRocmVzaG9sZDpTKHQsdGhpcy5pbnB1dE1hc2spfSl9KX1zZXREYXRhKHQsbil7dGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn19Y2xhc3MgT3IgZXh0ZW5kcyBiZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KTtwKHRoaXMsImZiaTIiKTt0aGlzLmZiaTI9SXQodC5jb250ZXh0LFt7Zm9ybWF0OnQuY29udGV4dC5SR0JBLHR5cGU6dC5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnQuY29udGV4dC5MSU5FQVIsbWFnOnQuY29udGV4dC5MSU5FQVIsd3JhcDp0LmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLHQud2lkdGgsdC5oZWlnaHQpfXJ1bih0KXtjb25zdCBuPXRoaXMuZmJpO3RoaXMuZmJpPXRoaXMuZmJpMix0aGlzLmZiaTI9bix0aGlzLm91dHB1dD10aGlzLmZiaS5hdHRhY2htZW50c1swXSxzdXBlci5ydW4oey4uLnQscHJldmlvdXNfcmVuZGVyaW5nOnRoaXMuZmJpMi5hdHRhY2htZW50c1swXX0pfXJlc2l6ZU91dHB1dCh0LG4pe3N1cGVyLnJlc2l6ZU91dHB1dCh0LG4pLHRoaXMuZmJpMj1JdCh0aGlzLmNvbnRleHQsW3tmb3JtYXQ6dGhpcy5jb250ZXh0LlJHQkEsdHlwZTp0aGlzLmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dGhpcy5jb250ZXh0LkxJTkVBUix3cmFwOnRoaXMuY29udGV4dC5DTEFNUF9UT19FREdFfV0sdCxuKX19dmFyIHpmPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCi8vIHVuaWZvcm0gZmxvYXQgdHJlc2hvbGQ7CnVuaWZvcm0gc2FtcGxlcjJEIGltYWdlX25vdzsKdW5pZm9ybSBzYW1wbGVyMkQgaW1hZ2VfYmVmb3JlOwp1bmlmb3JtIHNhbXBsZXIyRCBtYXNrX25vdzsKdW5pZm9ybSBzYW1wbGVyMkQgbWFza19iZWZvcmU7CnVuaWZvcm0gc2FtcGxlcjJEIHByZXZpb3VzX3JlbmRlcmluZzsKdW5pZm9ybSB2ZWMyIGNhbnZhczsKCnVuaWZvcm0gZmxvYXQgZGVsdGE7CgpmbG9hdCBjdXJyZW50X2ZhY3RvciA9IDAuNjk7CmZsb2F0IHByZXZpb3VzX2ZhY3RvciA9IDAuNzQ7CmZsb2F0IHRocmVzaG9sZF9hY3RpdmF0aW9uID0gMC41NDsKCmZsb2F0IG1hcChmbG9hdCB2YWx1ZSwgZmxvYXQgbWluMSwgZmxvYXQgbWF4MSwgZmxvYXQgbWluMiwgZmxvYXQgbWF4MikgewogIHJldHVybiBtaW4yICsgKHZhbHVlIC0gbWluMSkgKiAobWF4MiAtIG1pbjIpIC8gKG1heDEgLSBtaW4xKTsKfQoKZmxvYXQgZ2V0VGhyZXNob2xkKCkgewogIHZlYzQgY29sb3IgPSB2ZWM0KDAuKTsKICBmb3IgKGZsb2F0IHkgPSAtNi47IHkgPCA3LjsgeSArPSAxLikgewogICAgZm9yIChmbG9hdCB4ID0gLTYuOyB4IDwgNy47IHggKz0gMS4pIHsKICAgICAgdmVjNCBpbWFnZV9ub3dfY29sb3IgPQogICAgICAgICAgdGV4dHVyZTJEKGltYWdlX25vdywgX3RleHR1cmVfY29vcmQgKyB2ZWMyKHgsIHkpIC8gY2FudmFzKTsKICAgICAgdmVjNCBpbWFnZV9iZWZvcmVfY29sb3IgPQogICAgICAgICAgdGV4dHVyZTJEKGltYWdlX2JlZm9yZSwgX3RleHR1cmVfY29vcmQgKyB2ZWMyKHgsIHkpIC8gY2FudmFzKTsKICAgICAgY29sb3IgKz0gYWJzKGltYWdlX2JlZm9yZV9jb2xvciAtIGltYWdlX25vd19jb2xvcik7CiAgICB9CiAgfQogIHJldHVybiAoY29sb3IueCArIGNvbG9yLnkgKyBjb2xvci56KSAvICgzLiAqIDkuKTsKfQoKdm9pZCBtYWluKCkgewogIGZsb2F0IHRyZXNob2xkX2lucHV0ID0gLjQ7CiAgZmxvYXQgdHJlc2hvbGRfcHJldmlvdXNfcmVuZGVyaW5nID0gLjk4OwoKICB2ZWM0IG1hc2tfbm93X2NvbG9yID0gdGV4dHVyZTJEKG1hc2tfbm93LCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCBtYXNrX2JlZm9yZV9jb2xvciA9IHRleHR1cmUyRChtYXNrX2JlZm9yZSwgX3RleHR1cmVfY29vcmQpOwogIHZlYzQgcHJldmlvdXNfcmVuZGVyaW5nX2NvbG9yID0gdGV4dHVyZTJEKHByZXZpb3VzX3JlbmRlcmluZywgX3RleHR1cmVfY29vcmQpOwoKICB2ZWMzIG1hc2tfZGlmZiA9IGFicyhtYXNrX2JlZm9yZV9jb2xvci54eXogLSBtYXNrX25vd19jb2xvci54eXopOwogIGZsb2F0IGZsaWNrZXJpbmcgPSBtYXNrX2RpZmYueDsKICBmbG9hdCB0aHJlc2hvbGQgPSBnZXRUaHJlc2hvbGQoKTsKICBpZiAodGhyZXNob2xkIDwgdGhyZXNob2xkX2FjdGl2YXRpb24pIHsKICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoZmxpY2tlcmluZywgMC4sIDAuLCAxLikgKiBjdXJyZW50X2ZhY3RvciArCiAgICAgICAgICAgICAgICAgICBwcmV2aW91c19yZW5kZXJpbmdfY29sb3IgKiBwcmV2aW91c19mYWN0b3I7CiAgICBnbF9GcmFnQ29sb3IgKj0gKDEuIC0gdGhyZXNob2xkKTsKICB9Cn0KYCxIZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIFZmIGV4dGVuZHMgT3J7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gemZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIEhmfX12YXIgV2Y9YCN2ZXJzaW9uIDMwMCBlcwovLyBodHRwczovL2dpdGh1Yi5jb20vVm9sY29taXgvdmlydHVhbC1iYWNrZ3JvdW5kL2Jsb2IvbWFpbi9zcmMvcGlwZWxpbmVzL3dlYmdsMi9qb2ludEJpbGF0ZXJhbEZpbHRlclN0YWdlLnRzCgpwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CnVuaWZvcm0gc2FtcGxlcjJEIGlucHV0X2ZyYW1lOwp1bmlmb3JtIHNhbXBsZXIyRCBzZWdtZW50YXRpb25fbWFzazsKdW5pZm9ybSBzYW1wbGVyMkQgdGhyZXNob2xkOwp1bmlmb3JtIHZlYzIgdGV4ZWxfc2l6ZTsKdW5pZm9ybSBmbG9hdCBzdGVwOwp1bmlmb3JtIGZsb2F0IHJhZGl1czsKdW5pZm9ybSBmbG9hdCBvZmZzZXQ7CnVuaWZvcm0gZmxvYXQgc2lnbWFfdGV4ZWw7CnVuaWZvcm0gZmxvYXQgc2lnbWFfY29sb3I7CgppbiB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwpvdXQgdmVjNCBvdXRDb2xvcjsKCmZsb2F0IGdhdXNzaWFuKGZsb2F0IHgsIGZsb2F0IHNpZ21hKSB7CiAgZmxvYXQgY29lZmYgPSAtMC41IC8gKHNpZ21hICogc2lnbWEgKiA0LjAgKyAxLjBlLTYpOwogIHJldHVybiBleHAoKHggKiB4KSAqIGNvZWZmKTsKfQoKdm9pZCBtYWluKCkgewogIHZlYzIgY2VudGVyQ29vcmQgPSBfdGV4dHVyZV9jb29yZDsKICB2ZWMzIGNlbnRlckNvbG9yID0gdGV4dHVyZShpbnB1dF9mcmFtZSwgY2VudGVyQ29vcmQpLnJnYjsKICBmbG9hdCBuZXdWYWwgPSAwLjA7CiAgZmxvYXQgc3BhY2VXZWlnaHQgPSAwLjA7CiAgZmxvYXQgY29sb3JXZWlnaHQgPSAwLjA7CiAgZmxvYXQgdG90YWxXZWlnaHQgPSAwLjA7CiAgLy8gU3Vic2FtcGxlIGtlcm5lbCBzcGFjZS4KICBmb3IgKGZsb2F0IGkgPSAtcmFkaXVzICsgb2Zmc2V0OyBpIDw9IHJhZGl1czsgaSArPSBzdGVwKSB7CiAgICBmb3IgKGZsb2F0IGogPSAtcmFkaXVzICsgb2Zmc2V0OyBqIDw9IHJhZGl1czsgaiArPSBzdGVwKSB7CiAgICAgIHZlYzIgc2hpZnQgPSB2ZWMyKGosIGkpICogdGV4ZWxfc2l6ZTsKICAgICAgdmVjMiBjb29yZCA9IHZlYzIoY2VudGVyQ29vcmQgKyBzaGlmdCk7CiAgICAgIHZlYzMgZnJhbWVDb2xvciA9IHRleHR1cmUoaW5wdXRfZnJhbWUsIGNvb3JkKS5yZ2I7CiAgICAgIGZsb2F0IHRocmVzaG9sZCA9IHRleHR1cmUodGhyZXNob2xkLCBjb29yZCkuYTsKICAgICAgZmxvYXQgb3V0VmFsID0gdGV4dHVyZShzZWdtZW50YXRpb25fbWFzaywgY29vcmQpLmE7CgogICAgICBzcGFjZVdlaWdodCA9IGdhdXNzaWFuKGRpc3RhbmNlKGNlbnRlckNvb3JkLCBjb29yZCksIHNpZ21hX3RleGVsKTsKICAgICAgY29sb3JXZWlnaHQgPSBnYXVzc2lhbihkaXN0YW5jZShjZW50ZXJDb2xvciwgZnJhbWVDb2xvciksIHNpZ21hX2NvbG9yKTsKICAgICAgdG90YWxXZWlnaHQgKz0gc3BhY2VXZWlnaHQgKiBjb2xvcldlaWdodDsKICAgICAgbmV3VmFsICs9IHNwYWNlV2VpZ2h0ICogY29sb3JXZWlnaHQgKiBvdXRWYWwgKiB0aHJlc2hvbGQ7CiAgICB9CiAgfQogIG5ld1ZhbCAvPSB0b3RhbFdlaWdodDsKICBvdXRDb2xvciA9IHZlYzQodmVjMygwLiksIG5ld1ZhbCk7Cn1gLGpmPWAjdmVyc2lvbiAzMDAgZXMKaW4gdmVjMiBwb3NpdGlvbjsKaW4gdmVjMiB0ZXh0dXJlX2Nvb3JkOwpvdXQgdmVjMiBfdGV4dHVyZV9jb29yZDsKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfWA7Y2xhc3MgcWYgZXh0ZW5kcyBiZXtnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBXZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gamZ9fXZhciBYZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdm9pZCBtYWluKCkgewogIGludCBjb3VudCA9IDA7CiAgZm9yIChmbG9hdCB5ID0gLTEuOyB5IDwgMi47IHkgKz0gMS4pIHsKICAgIGZvciAoZmxvYXQgeCA9IC0xLjsgeCA8IDIuOyB4ICs9IDEuKSB7CiAgICAgIHZlYzIgY29vcmQgPSBfdGV4dHVyZV9jb29yZCArIHZlYzIoeSwgeCkgLyBjYW52YXM7CiAgICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgY29vcmQpOwogICAgICBpZiAoY29sb3IuciA+IC4xKSB7CiAgICAgICAgY291bnQrKzsKICAgICAgfQogICAgfQogIH0KICBpZiAoY291bnQgPiA1KSB7CiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQpOwogIH0KfQpgLFlmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgUWYgZXh0ZW5kcyBiZXtnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBYZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gWWZ9fXZhciBLZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdm9pZCBtYWluKCkgewogIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQpOwogIGZvciAoZmxvYXQgeSA9IC0yLjsgeSA8IDMuOyB5ICs9IDEuKSB7CiAgICBmb3IgKGZsb2F0IHggPSAtMi47IHggPCAzLjsgeCArPSAxLikgewogICAgICB2ZWMyIGNvb3JkID0gX3RleHR1cmVfY29vcmQ7CiAgICAgIGNvb3JkICs9IHZlYzIoeSwgeCkgLyBjYW52YXM7CiAgICAgIGNvbG9yICs9IHRleHR1cmUyRCh0ZXh0dXJlLCBjb29yZCkgKiAoMS4gLyA0Lik7CiAgICB9CiAgfQoKICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsKfQpgLEpmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgWmYgZXh0ZW5kcyBPcntnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBLZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gSmZ9fXZhciBlbD1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHNhbXBsZXIyRCB0aHJlc2hvbGQ7CnVuaWZvcm0gc2FtcGxlcjJEIGlucHV0czsKCnZvaWQgbWFpbigpIHsKICB2ZWM0IGlucHV0c19jb2xvciA9IHRleHR1cmUyRChpbnB1dHMsIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IHRocmVzaG9sZF9jb2xvciA9IHRleHR1cmUyRCh0aHJlc2hvbGQsIF90ZXh0dXJlX2Nvb3JkKTsKICBpZiAodGhyZXNob2xkX2NvbG9yLnIgPCAuMSAmJiBpbnB1dHNfY29sb3IuciA+IC41KSB7CiAgICBnbF9GcmFnQ29sb3IgPSBpbnB1dHNfY29sb3I7CiAgfQp9CmAsdGw9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYDtjbGFzcyBybCBleHRlbmRzIE9ye2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIGVsfWdldFZlcnRleFNoYWRlcigpe3JldHVybiB0bH19Y2xhc3MgbmwgZXh0ZW5kcyBEcntjb25zdHJ1Y3Rvcih0LG4saSl7c3VwZXIoKTtwKHRoaXMsImlucHV0SW1hZ2UiKTtwKHRoaXMsImlucHV0TWFzayIpO3AodGhpcywicHJldmlvdXNJbnB1dEltYWdlIik7cCh0aGlzLCJwcmV2aW91c0lucHV0TWFzayIpO3AodGhpcywib3V0cHV0Iik7cCh0aGlzLCJvcHRpb25zIix7Y3VycmVudFRocmVzaG9sZE1pbmltdW06MCxjdXJyZW50VGhyZXNob2xkTWF4aW11bToxLHByZXZpb3VzVGhyZXNob2xkTWluaW11bTowLHByZXZpb3VzVGhyZXNob2xkTWF4aW11bToxLHRocmVzaG9sZE1pbmltdW06MCx0aHJlc2hvbGRNYXhpbXVtOjEsdGhyZXNob2xkRmFjdG9yOjF9KTt0aGlzLmNvbnRleHQ9dDtjb25zdCBvPXtjb250ZXh0OnQsaGVpZ2h0Omksd2lkdGg6bn0scz1uZXcgVmYobyksYT1uZXcgVWkoey4uLm8scmFkaXVzOjEsdHlwZTpDci5HQVVTU0lBTn0pLHU9bmV3IHJsKG8pLGY9bmV3IFpmKG8pLGM9bmV3IFFmKG8pLGQ9bmV3IHFmKHsuLi5vfSkseT0uNjYsXz02NDAsbT00ODAseD0yNTYsdj0xNDQ7bGV0IGI9MTtiKj1NYXRoLm1heChfL3gsbS92KTtjb25zdCBBPU1hdGgubWF4KDEsTWF0aC5zcXJ0KGIpKnkpLFA9MS9fLEM9MS9tO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTpzLGdldFVuaWZvcm1zOigpPT4oe2ltYWdlX25vdzpTKHQsdGhpcy5pbnB1dEltYWdlKSxpbWFnZV9iZWZvcmU6Uyh0LHRoaXMucHJldmlvdXNJbnB1dEltYWdlKSxtYXNrX25vdzpTKHQsdGhpcy5pbnB1dE1hc2spLG1hc2tfYmVmb3JlOlModCx0aGlzLnByZXZpb3VzSW5wdXRNYXNrKSxjdXJyZW50X3RocmVzaG9sZF9taW5pbXVtOnRoaXMub3B0aW9ucy5jdXJyZW50VGhyZXNob2xkTWluaW11bSxjdXJyZW50X3RocmVzaG9sZF9tYXhpbXVtOnRoaXMub3B0aW9ucy5jdXJyZW50VGhyZXNob2xkTWF4aW11bSxwcmV2aW91c190aHJlc2hvbGRfbWluaW11bTp0aGlzLm9wdGlvbnMucHJldmlvdXNUaHJlc2hvbGRNaW5pbXVtLHByZXZpb3VzX3RocmVzaG9sZF9tYXhpbXVtOnRoaXMub3B0aW9ucy5wcmV2aW91c1RocmVzaG9sZE1heGltdW0sdGhyZXNob2xkX21pbmltdW06dGhpcy5vcHRpb25zLnRocmVzaG9sZE1pbmltdW0sdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLnRocmVzaG9sZE1heGltdW0sdGhyZXNob2xkX2ZhY3Rvcjp0aGlzLm9wdGlvbnMudGhyZXNob2xkRmFjdG9yfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06dSxnZXRVbmlmb3JtczooKT0+KHtpbnB1dHM6Uyh0LHRoaXMuaW5wdXRNYXNrKSx0aHJlc2hvbGQ6Uyh0LHMub3V0cHV0KX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmMsZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpTKHQsdS5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06ZixnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOlModCxjLm91dHB1dCl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTphLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6Uyh0LGYub3V0cHV0KX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmQsZ2V0VW5pZm9ybXM6KCk9Pih7aW5wdXRfZnJhbWU6Uyh0LHRoaXMuaW5wdXRJbWFnZSksc2VnbWVudGF0aW9uX21hc2s6Uyh0LHRoaXMuaW5wdXRNYXNrKSx0aHJlc2hvbGQ6Uyh0LGEub3V0cHV0KSx0ZXhlbF9zaXplOltQLENdLHN0ZXA6QSxyYWRpdXM6YixvZmZzZXQ6QT4xP0EqLjU6MCxzaWdtYV90ZXhlbDpNYXRoLm1heChQLEMpKmIsc2lnbWFfY29sb3I6LjF9KX0pLHRoaXMub3V0cHV0PWQub3V0cHV0fXNldERhdGEodCxuKXt0aGlzLnByZXZpb3VzSW5wdXRJbWFnZT10aGlzLmlucHV0SW1hZ2U/dGhpcy5pbnB1dEltYWdlOnQsdGhpcy5wcmV2aW91c0lucHV0TWFzaz10aGlzLmlucHV0TWFzaz90aGlzLmlucHV0TWFzazpuLHRoaXMuaW5wdXRJbWFnZT10LHRoaXMuaW5wdXRNYXNrPW59c2V0T3B0aW9ucyh0KXt0aGlzLm9wdGlvbnM9dH19dmFyIGlsPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKCnZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkKTsgfQpgLG9sPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKdW5pZm9ybSBib29sIGludmVydF95OwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7CiAgaWYgKGludmVydF95KSB7CiAgICBfdGV4dHVyZV9jb29yZC55ID0gMS4gLSB0ZXh0dXJlX2Nvb3JkLnk7CiAgfQp9CmA7Y2xhc3Mgc2wgZXh0ZW5kcyBiZXtnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBpbH1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gb2x9fWNsYXNzIGFsIGV4dGVuZHMgRHJ7Y29uc3RydWN0b3IodCxuLGkpe3N1cGVyKCk7cCh0aGlzLCJpbnB1dEltYWdlIik7dGhpcy5jb250ZXh0PXQ7Y29uc3Qgbz17Y29udGV4dDp0LGhlaWdodDppLHdpZHRoOm59O3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTpuZXcgc2woey4uLm8sZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSksZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpTKHQsdGhpcy5pbnB1dEltYWdlKSxpbnZlcnRfeTohMH0pfSl9c2V0RGF0YSh0KXt0aGlzLmlucHV0SW1hZ2U9dH19Y2xhc3MgdWx7Y29uc3RydWN0b3IoZSl7cCh0aGlzLCJyZXNpemUiKTtwKHRoaXMsImNhbnZhcyIpO3AodGhpcywiY29udGV4dCIpO3RoaXMuY2FudmFzPW5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSx0aGlzLmNvbnRleHQ9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgid2ViZ2wyIiksdGhpcy5jYW52YXMud2lkdGg9ZS53aWR0aCx0aGlzLmNhbnZhcy5oZWlnaHQ9ZS5oZWlnaHQsdGhpcy5yZXNpemU9bmV3IGFsKHRoaXMuY29udGV4dCxlLndpZHRoLGUuaGVpZ2h0KX1yZXNpemVGb3JlZ3JvdW5kKGUsdCl7dGhpcy5jYW52YXMud2lkdGg9ZSx0aGlzLmNhbnZhcy5oZWlnaHQ9dCx0aGlzLnJlc2l6ZS5yZXNpemVPdXRwdXQoZSx0KX1hc3luYyBwcm9jZXNzKGUpe3ZhciB0LG47cmV0dXJuIHRoaXMuY2FudmFzLndpZHRoPXRoaXMuY2FudmFzLndpZHRoLCh0PXRoaXMucmVzaXplKT09bnVsbHx8dC5zZXREYXRhKGUpLChuPXRoaXMucmVzaXplKT09bnVsbHx8bi5ydW4oKSx0aGlzLmNhbnZhc319Y2xhc3MgY2x7Y29uc3RydWN0b3IoZSx0KXtwKHRoaXMsImltcHJvdmVNYXNrU2VnbWVudGF0aW9uIik7cCh0aGlzLCJiYWNrZ3JvdW5kUmVzaXplciIpO3AodGhpcywiYmFja2dyb3VuZEltYWdlIik7cCh0aGlzLCJiYWNrZ3JvdW5kVmlkZW8iKTtwKHRoaXMsInByb2ZpbGVyIik7cCh0aGlzLCJhY3RpdmVQaXBlbGluZSIpO3AodGhpcywiY2FudmFzIik7cCh0aGlzLCJvcHRpb25zIik7cCh0aGlzLCJjb250ZXh0Iik7cCh0aGlzLCJ2aXJ0dWFsQkdJbWFnZSIpO3RoaXMuaWQ9ZSx0aGlzLmNhbnZhcz1uZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCksdGhpcy5jb250ZXh0PXRoaXMuY2FudmFzLmdldENvbnRleHQoIndlYmdsMiIpLHRoaXMuY2FudmFzLndpZHRoPXQuZm9yZWdyb3VuZFdpZHRoLHRoaXMuY2FudmFzLmhlaWdodD10LmZvcmVncm91bmRIZWlnaHQsdGhpcy5pbXByb3ZlTWFza1NlZ21lbnRhdGlvbj1uZXcgbmwodGhpcy5jb250ZXh0LHQubWFza1dpZHRoLHQubWFza0hlaWdodCksdGhpcy5iYWNrZ3JvdW5kSW1hZ2U9bmV3IE5pKHRoaXMuY29udGV4dCksdGhpcy5iYWNrZ3JvdW5kVmlkZW89bmV3IGtmKHRoaXMuY29udGV4dCksdGhpcy5iYWNrZ3JvdW5kUmVzaXplcj1uZXcgdWwoe3dpZHRoOnQuZm9yZWdyb3VuZFdpZHRoLGhlaWdodDp0LmZvcmVncm91bmRIZWlnaHR9KX1zZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKXtzd2l0Y2goZS50cmFuc2Zvcm1lclR5cGUpe2Nhc2UiQmFja2dyb3VuZEJsdXIiOnRoaXMuYWN0aXZlUGlwZWxpbmU9bmV3IEJmKHRoaXMuY29udGV4dCx0aGlzLmdldEJsdXJTaXplKGUucmFkaXVzKSk7YnJlYWs7Y2FzZSJTaWxob3VldHRlQmx1ciI6dGhpcy5hY3RpdmVQaXBlbGluZT1uZXcgR2YodGhpcy5jb250ZXh0LHRoaXMuZ2V0Qmx1clNpemUoZS5yYWRpdXMpKTticmVhaztjYXNlIlZpZGVvQmFja2dyb3VuZCI6dGhpcy5hY3RpdmVQaXBlbGluZT10aGlzLmJhY2tncm91bmRWaWRlbzticmVhaztjYXNlIlZpcnR1YWxCYWNrZ3JvdW5kIjp0aGlzLmFjdGl2ZVBpcGVsaW5lPXRoaXMuYmFja2dyb3VuZEltYWdlO2JyZWFrfXRoaXMub3B0aW9ucz1lfXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe3ZhciB0Oyh0PXRoaXMuaW1wcm92ZU1hc2tTZWdtZW50YXRpb24pPT1udWxsfHx0LnNldE9wdGlvbnMoZSl9c2V0VmlkZW9CR1JlYWRhYmxlKGUpe3RoaXMuYmFja2dyb3VuZFZpZGVvLmlucHV0VmlkZW89ZX1hc3luYyBzZXRWaXJ0dWFsQkdJbWFnZShlKXt0aGlzLnZpcnR1YWxCR0ltYWdlPWUsdGhpcy5iYWNrZ3JvdW5kSW1hZ2UuaW5wdXRCYWNrZ3JvdW5kSW1hZ2U9YXdhaXQgdGhpcy5iYWNrZ3JvdW5kUmVzaXplci5wcm9jZXNzKGUpfWFzeW5jIHByb2Nlc3MoZSx0KXt2YXIgbixpLG8scyxhLHUsZjtpZih0aGlzLmFjdGl2ZVBpcGVsaW5lJiZlLndpZHRoJiYodD09bnVsbD92b2lkIDA6dC53aWR0aCkpe2NvbnN0IGM9YFske3RoaXMuaWR9XSBiYWNrZ3JvdW5kLWZpbHRlcmA7KG49dGhpcy5wcm9maWxlcik9PW51bGx8fG4ucHVzaENvbnRleHQoYyk7bGV0IGQ9dDsoKChpPXRoaXMub3B0aW9ucyk9PW51bGw/dm9pZCAwOmkuc2VsZmllU2VnbWVudGF0aW9uVHlwZSkmJigobz10aGlzLm9wdGlvbnMpPT1udWxsP3ZvaWQgMDpvLnNlbGZpZVNlZ21lbnRhdGlvblR5cGUpPT09IlBSRUNJU0UifHwhKChzPXRoaXMub3B0aW9ucykhPW51bGwmJnMuc2VsZmllU2VnbWVudGF0aW9uVHlwZSkmJnRoaXMuYWN0aXZlUGlwZWxpbmUucHJlY2lzZU1hc2tFbmFibGVkKSYmKHRoaXMuaW1wcm92ZU1hc2tTZWdtZW50YXRpb24uc2V0SWQodGhpcy5pZCksdGhpcy5pbXByb3ZlTWFza1NlZ21lbnRhdGlvbi5zZXRQcm9maWxlcih0aGlzLnByb2ZpbGVyKSx0aGlzLmltcHJvdmVNYXNrU2VnbWVudGF0aW9uLnNldERhdGEoZSx0KSx0aGlzLmltcHJvdmVNYXNrU2VnbWVudGF0aW9uLnJ1bigpLGQ9dGhpcy5pbXByb3ZlTWFza1NlZ21lbnRhdGlvbi5vdXRwdXQpLHRoaXMuYWN0aXZlUGlwZWxpbmUuc2V0SWQodGhpcy5pZCksdGhpcy5hY3RpdmVQaXBlbGluZS5zZXRQcm9maWxlcih0aGlzLnByb2ZpbGVyKSwoYT10aGlzLmFjdGl2ZVBpcGVsaW5lKT09bnVsbHx8YS5zZXREYXRhKGUsZCksKHU9dGhpcy5hY3RpdmVQaXBlbGluZSk9PW51bGx8fHUucnVuKCksKGY9dGhpcy5wcm9maWxlcik9PW51bGx8fGYucG9wQ29udGV4dChjKX19YXN5bmMgcmVzaXplRm9yZWdyb3VuZChlLHQpe3ZhciBuO3RoaXMuY2FudmFzLndpZHRoPWUsdGhpcy5jYW52YXMuaGVpZ2h0PXQsdGhpcy5iYWNrZ3JvdW5kSW1hZ2UucmVzaXplT3V0cHV0KGUsdCksdGhpcy5iYWNrZ3JvdW5kVmlkZW8ucmVzaXplT3V0cHV0KGUsdCksdGhpcy5iYWNrZ3JvdW5kUmVzaXplci5yZXNpemVGb3JlZ3JvdW5kKGUsdCksKG49dGhpcy5hY3RpdmVQaXBlbGluZSk9PW51bGx8fG4ucmVzaXplT3V0cHV0KGUsdCksdGhpcy52aXJ0dWFsQkdJbWFnZSYmKHRoaXMuYmFja2dyb3VuZEltYWdlLmlucHV0QmFja2dyb3VuZEltYWdlPWF3YWl0IHRoaXMuYmFja2dyb3VuZFJlc2l6ZXIucHJvY2Vzcyh0aGlzLnZpcnR1YWxCR0ltYWdlKSl9YXN5bmMgcHJvZmlsZShlKXtjb25zdCB0PW5ldyBScyh0aGlzLmNvbnRleHQpO3JldHVybiB0aGlzLnByb2ZpbGVyPXQsdC5zdGFydCgpLGF3YWl0IGduKGUpLHRoaXMucHJvZmlsZXI9dm9pZCAwLHQuc3RvcCgpLHQuZ2V0UmVzb2x2ZWRRdWVyaWVzKCl9Z2V0Qmx1clNpemUoZT1zdC5Mb3cpe3N3aXRjaChlKXtjYXNlIHN0LkxvdzpyZXR1cm4gNTtjYXNlIHN0LkhpZ2g6cmV0dXJuIDEyfXJldHVybiBlfX12YXIgZmw9ZnVuY3Rpb24oKXt2YXIgcj10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jdXJyZW50U2NyaXB0P2RvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjOnZvaWQgMDtyZXR1cm4gZnVuY3Rpb24oZSl7ZT1lfHx7fTt2YXIgdD10eXBlb2YgZTwidSI/ZTp7fSxuLGk7dC5yZWFkeT1uZXcgUHJvbWlzZShmdW5jdGlvbihsLGgpe249bCxpPWh9KTt2YXIgbz17fSxzO2ZvcihzIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShzKSYmKG9bc109dFtzXSk7dmFyIGE9Ii4vdGhpcy5wcm9ncmFtIix1PWZ1bmN0aW9uKGwsaCl7dGhyb3cgaH0sZj0hMCxjPSIiO2Z1bmN0aW9uIGQobCl7cmV0dXJuIHQubG9jYXRlRmlsZT90LmxvY2F0ZUZpbGUobCxjKTpjK2x9dmFyIHk7dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3VycmVudFNjcmlwdCYmKGM9ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpLHImJihjPXIpLGMuaW5kZXhPZigiYmxvYjoiKSE9PTA/Yz1jLnN1YnN0cigwLGMucmVwbGFjZSgvWz8jXS4qLywiIikubGFzdEluZGV4T2YoIi8iKSsxKTpjPSIiO3ZhciBfPXQucHJpbnR8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksbT10LnByaW50RXJyfHxjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtmb3IocyBpbiBvKW8uaGFzT3duUHJvcGVydHkocykmJih0W3NdPW9bc10pO289bnVsbCx0LmFyZ3VtZW50cyYmdC5hcmd1bWVudHMsdC50aGlzUHJvZ3JhbSYmKGE9dC50aGlzUHJvZ3JhbSksdC5xdWl0JiYodT10LnF1aXQpO3ZhciB4O3Qud2FzbUJpbmFyeSYmKHg9dC53YXNtQmluYXJ5KTt2YXIgdj10Lm5vRXhpdFJ1bnRpbWV8fCEwO3R5cGVvZiBXZWJBc3NlbWJseSE9Im9iamVjdCImJm1lKCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkIik7dmFyIGIsQT0hMSxQPXR5cGVvZiBUZXh0RGVjb2RlcjwidSI/bmV3IFRleHREZWNvZGVyKCJ1dGY4Iik6dm9pZCAwO2Z1bmN0aW9uIEMobCxoLGcpe2Zvcih2YXIgdz1oK2csTT1oO2xbTV0mJiEoTT49dyk7KSsrTTtpZihNLWg+MTYmJmwuc3ViYXJyYXkmJlApcmV0dXJuIFAuZGVjb2RlKGwuc3ViYXJyYXkoaCxNKSk7Zm9yKHZhciBVPSIiO2g8TTspe3ZhciBSPWxbaCsrXTtpZighKFImMTI4KSl7VSs9U3RyaW5nLmZyb21DaGFyQ29kZShSKTtjb250aW51ZX12YXIgaz1sW2grK10mNjM7aWYoKFImMjI0KT09MTkyKXtVKz1TdHJpbmcuZnJvbUNoYXJDb2RlKChSJjMxKTw8NnxrKTtjb250aW51ZX12YXIgZWU9bFtoKytdJjYzO2lmKChSJjI0MCk9PTIyND9SPShSJjE1KTw8MTJ8azw8NnxlZTpSPShSJjcpPDwxOHxrPDwxMnxlZTw8NnxsW2grK10mNjMsUjw2NTUzNilVKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFIpO2Vsc2V7dmFyIGppPVItNjU1MzY7VSs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxqaT4+MTAsNTYzMjB8amkmMTAyMyl9fXJldHVybiBVfWZ1bmN0aW9uIFcobCxoKXtyZXR1cm4gbD9DKEhlLGwsaCk6IiJ9ZnVuY3Rpb24gaWUobCxoLGcpe2Zvcih2YXIgdz0wO3c8bC5sZW5ndGg7Kyt3KUZ0W2grKz4+MF09bC5jaGFyQ29kZUF0KHcpO2d8fChGdFtoPj4wXT0wKX1mdW5jdGlvbiBYKGwsaCl7cmV0dXJuIGwlaD4wJiYobCs9aC1sJWgpLGx9dmFyIGtpLEZ0LEhlLFk7ZnVuY3Rpb24gTGkobCl7a2k9bCx0LkhFQVA4PUZ0PW5ldyBJbnQ4QXJyYXkobCksdC5IRUFQMTY9bmV3IEludDE2QXJyYXkobCksdC5IRUFQMzI9WT1uZXcgSW50MzJBcnJheShsKSx0LkhFQVBVOD1IZT1uZXcgVWludDhBcnJheShsKSx0LkhFQVBVMTY9bmV3IFVpbnQxNkFycmF5KGwpLHQuSEVBUFUzMj1uZXcgVWludDMyQXJyYXkobCksdC5IRUFQRjMyPW5ldyBGbG9hdDMyQXJyYXkobCksdC5IRUFQRjY0PW5ldyBGbG9hdDY0QXJyYXkobCl9dC5JTklUSUFMX01FTU9SWTt2YXIgVXIsJGk9W10sR2k9W10semk9W10sX2w9MDtmdW5jdGlvbiB4bCgpe3JldHVybiB2fHxfbD4wfWZ1bmN0aW9uIGdsKCl7aWYodC5wcmVSdW4pZm9yKHR5cGVvZiB0LnByZVJ1bj09ImZ1bmN0aW9uIiYmKHQucHJlUnVuPVt0LnByZVJ1bl0pO3QucHJlUnVuLmxlbmd0aDspRWwodC5wcmVSdW4uc2hpZnQoKSk7QnIoJGkpfWZ1bmN0aW9uIGJsKCl7QnIoR2kpfWZ1bmN0aW9uIHZsKCl7aWYodC5wb3N0UnVuKWZvcih0eXBlb2YgdC5wb3N0UnVuPT0iZnVuY3Rpb24iJiYodC5wb3N0UnVuPVt0LnBvc3RSdW5dKTt0LnBvc3RSdW4ubGVuZ3RoOylBbCh0LnBvc3RSdW4uc2hpZnQoKSk7QnIoemkpfWZ1bmN0aW9uIEVsKGwpeyRpLnVuc2hpZnQobCl9ZnVuY3Rpb24gVGwobCl7R2kudW5zaGlmdChsKX1mdW5jdGlvbiBBbChsKXt6aS51bnNoaWZ0KGwpfXZhciB2ZT0wLFZlPW51bGw7ZnVuY3Rpb24gd2wobCl7dmUrKyx0Lm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJnQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyh2ZSl9ZnVuY3Rpb24gUmwobCl7aWYodmUtLSx0Lm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJnQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyh2ZSksdmU9PTAmJlZlKXt2YXIgaD1WZTtWZT1udWxsLGgoKX19dC5wcmVsb2FkZWRJbWFnZXM9e30sdC5wcmVsb2FkZWRBdWRpb3M9e307ZnVuY3Rpb24gbWUobCl7dC5vbkFib3J0JiZ0Lm9uQWJvcnQobCksbD0iQWJvcnRlZCgiK2wrIikiLG0obCksQT0hMCxsKz0iLiBCdWlsZCB3aXRoIC1zIEFTU0VSVElPTlM9MSBmb3IgbW9yZSBpbmZvLiI7dmFyIGg9bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcihsKTt0aHJvdyBpKGgpLGh9dmFyIFNsPSJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsIjtmdW5jdGlvbiBIaShsKXtyZXR1cm4gbC5zdGFydHNXaXRoKFNsKX12YXIgUTtRPSJ0ZmxpdGUtc2ltZC53YXNtIixIaShRKXx8KFE9ZChRKSk7ZnVuY3Rpb24gVmkobCl7dHJ5e2lmKGw9PVEmJngpcmV0dXJuIG5ldyBVaW50OEFycmF5KHgpO2lmKCF5KXRocm93ImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIn1jYXRjaChoKXttZShoKX19ZnVuY3Rpb24gSWwoKXtyZXR1cm4heCYmZiYmdHlwZW9mIGZldGNoPT0iZnVuY3Rpb24iP2ZldGNoKFEse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGZ1bmN0aW9uKGwpe2lmKCFsLm9rKXRocm93ImZhaWxlZCB0byBsb2FkIHdhc20gYmluYXJ5IGZpbGUgYXQgJyIrUSsiJyI7cmV0dXJuIGwuYXJyYXlCdWZmZXIoKX0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuIFZpKFEpfSk6UHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBWaShRKX0pfWZ1bmN0aW9uIEZsKCl7dmFyIGw9e2E6UWx9O2Z1bmN0aW9uIGgoUixrKXt2YXIgZWU9Ui5leHBvcnRzO3QuYXNtPWVlLGI9dC5hc20ucSxMaShiLmJ1ZmZlciksVXI9dC5hc20uRSxUbCh0LmFzbS5yKSxSbCgpfXdsKCk7ZnVuY3Rpb24gZyhSKXtoKFIuaW5zdGFuY2UpfWZ1bmN0aW9uIHcoUil7cmV0dXJuIElsKCkudGhlbihmdW5jdGlvbihrKXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoayxsKX0pLnRoZW4oZnVuY3Rpb24oayl7cmV0dXJuIGt9KS50aGVuKFIsZnVuY3Rpb24oayl7bSgiZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogIitrKSxtZShrKX0pfWZ1bmN0aW9uIE0oKXtyZXR1cm4heCYmdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nPT0iZnVuY3Rpb24iJiYhSGkoUSkmJnR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIj9mZXRjaChRLHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSkudGhlbihmdW5jdGlvbihSKXt2YXIgaz1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhSLGwpO3JldHVybiBrLnRoZW4oZyxmdW5jdGlvbihlZSl7cmV0dXJuIG0oIndhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAiK2VlKSxtKCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbiIpLHcoZyl9KX0pOncoZyl9aWYodC5pbnN0YW50aWF0ZVdhc20pdHJ5e3ZhciBVPXQuaW5zdGFudGlhdGVXYXNtKGwsaCk7cmV0dXJuIFV9Y2F0Y2goUil7cmV0dXJuIG0oIk1vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6ICIrUiksITF9cmV0dXJuIE0oKS5jYXRjaChpKSx7fX1mdW5jdGlvbiBCcihsKXtmb3IoO2wubGVuZ3RoPjA7KXt2YXIgaD1sLnNoaWZ0KCk7aWYodHlwZW9mIGg9PSJmdW5jdGlvbiIpe2godCk7Y29udGludWV9dmFyIGc9aC5mdW5jO3R5cGVvZiBnPT0ibnVtYmVyIj9oLmFyZz09PXZvaWQgMD9Vci5nZXQoZykoKTpVci5nZXQoZykoaC5hcmcpOmcoaC5hcmc9PT12b2lkIDA/bnVsbDpoLmFyZyl9fWZ1bmN0aW9uIFBsKGwsaCxnLHcpe21lKCJBc3NlcnRpb24gZmFpbGVkOiAiK1cobCkrIiwgYXQ6ICIrW2g/VyhoKToidW5rbm93biBmaWxlbmFtZSIsZyx3P1codyk6InVua25vd24gZnVuY3Rpb24iXSl9ZnVuY3Rpb24gRGwobCxoKXttZSgiVG8gdXNlIGRsb3BlbiwgeW91IG5lZWQgdG8gdXNlIEVtc2NyaXB0ZW4ncyBsaW5raW5nIHN1cHBvcnQsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZW1zY3JpcHRlbi1jb3JlL2Vtc2NyaXB0ZW4vd2lraS9MaW5raW5nIil9ZnVuY3Rpb24gTWwobCxoKXttZSgiVG8gdXNlIGRsb3BlbiwgeW91IG5lZWQgdG8gdXNlIEVtc2NyaXB0ZW4ncyBsaW5raW5nIHN1cHBvcnQsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZW1zY3JpcHRlbi1jb3JlL2Vtc2NyaXB0ZW4vd2lraS9MaW5raW5nIil9ZnVuY3Rpb24gQ2woKXttZSgiIil9dmFyIFB0O1B0PWZ1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTt2YXIgT2w9ITA7ZnVuY3Rpb24gTmwobCl7cmV0dXJuIFlbV2koKT4+Ml09bCxsfWZ1bmN0aW9uIFVsKGwsaCl7dmFyIGc7aWYobD09PTApZz1EYXRlLm5vdygpO2Vsc2UgaWYoKGw9PT0xfHxsPT09NCkmJk9sKWc9UHQoKTtlbHNlIHJldHVybiBObCgyOCksLTE7cmV0dXJuIFlbaD4+Ml09Zy8xZTN8MCxZW2grND4+Ml09ZyUxZTMqMWUzKjFlM3wwLDB9ZnVuY3Rpb24gQmwoKXtyZXR1cm4gMjE0NzQ4MzY0OH1mdW5jdGlvbiBrbChsLGgsZyl7SGUuY29weVdpdGhpbihsLGgsaCtnKX1mdW5jdGlvbiBMbChsKXt0cnl7cmV0dXJuIGIuZ3JvdyhsLWtpLmJ5dGVMZW5ndGgrNjU1MzU+Pj4xNiksTGkoYi5idWZmZXIpLDF9Y2F0Y2h7fX1mdW5jdGlvbiAkbChsKXt2YXIgaD1IZS5sZW5ndGg7bD1sPj4+MDt2YXIgZz0yMTQ3NDgzNjQ4O2lmKGw+ZylyZXR1cm4hMTtmb3IodmFyIHc9MTt3PD00O3cqPTIpe3ZhciBNPWgqKDErLjIvdyk7TT1NYXRoLm1pbihNLGwrMTAwNjYzMjk2KTt2YXIgVT1NYXRoLm1pbihnLFgoTWF0aC5tYXgobCxNKSw2NTUzNikpLFI9TGwoVSk7aWYoUilyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBHbChsKXtmb3IodmFyIGg9UHQoKTtQdCgpLWg8bDspO312YXIga3I9e307ZnVuY3Rpb24gemwoKXtyZXR1cm4gYXx8Ii4vdGhpcy5wcm9ncmFtIn1mdW5jdGlvbiBXZSgpe2lmKCFXZS5zdHJpbmdzKXt2YXIgbD0odHlwZW9mIG5hdmlnYXRvcj09Im9iamVjdCImJm5hdmlnYXRvci5sYW5ndWFnZXMmJm5hdmlnYXRvci5sYW5ndWFnZXNbMF18fCJDIikucmVwbGFjZSgiLSIsIl8iKSsiLlVURi04IixoPXtVU0VSOiJ3ZWJfdXNlciIsTE9HTkFNRToid2ViX3VzZXIiLFBBVEg6Ii8iLFBXRDoiLyIsSE9NRToiL2hvbWUvd2ViX3VzZXIiLExBTkc6bCxfOnpsKCl9O2Zvcih2YXIgZyBpbiBrcilrcltnXT09PXZvaWQgMD9kZWxldGUgaFtnXTpoW2ddPWtyW2ddO3ZhciB3PVtdO2Zvcih2YXIgZyBpbiBoKXcucHVzaChnKyI9IitoW2ddKTtXZS5zdHJpbmdzPXd9cmV0dXJuIFdlLnN0cmluZ3N9dmFyIER0PXttYXBwaW5nczp7fSxidWZmZXJzOltudWxsLFtdLFtdXSxwcmludENoYXI6ZnVuY3Rpb24obCxoKXt2YXIgZz1EdC5idWZmZXJzW2xdO2g9PT0wfHxoPT09MTA/KChsPT09MT9fOm0pKEMoZywwKSksZy5sZW5ndGg9MCk6Zy5wdXNoKGgpfSx2YXJhcmdzOnZvaWQgMCxnZXQ6ZnVuY3Rpb24oKXtEdC52YXJhcmdzKz00O3ZhciBsPVlbRHQudmFyYXJncy00Pj4yXTtyZXR1cm4gbH0sZ2V0U3RyOmZ1bmN0aW9uKGwpe3ZhciBoPVcobCk7cmV0dXJuIGh9LGdldDY0OmZ1bmN0aW9uKGwsaCl7cmV0dXJuIGx9fTtmdW5jdGlvbiBIbChsLGgpe3ZhciBnPTA7cmV0dXJuIFdlKCkuZm9yRWFjaChmdW5jdGlvbih3LE0pe3ZhciBVPWgrZztZW2wrTSo0Pj4yXT1VLGllKHcsVSksZys9dy5sZW5ndGgrMX0pLDB9ZnVuY3Rpb24gVmwobCxoKXt2YXIgZz1XZSgpO1lbbD4+Ml09Zy5sZW5ndGg7dmFyIHc9MDtyZXR1cm4gZy5mb3JFYWNoKGZ1bmN0aW9uKE0pe3crPU0ubGVuZ3RoKzF9KSxZW2g+PjJdPXcsMH1mdW5jdGlvbiBXbChsKXtKbChsKX1mdW5jdGlvbiBqbChsKXtyZXR1cm4gMH1mdW5jdGlvbiBxbChsLGgsZyx3LE0pe31mdW5jdGlvbiBYbChsLGgsZyx3KXtmb3IodmFyIE09MCxVPTA7VTxnO1UrKyl7Zm9yKHZhciBSPVlbaCtVKjg+PjJdLGs9WVtoKyhVKjgrNCk+PjJdLGVlPTA7ZWU8aztlZSsrKUR0LnByaW50Q2hhcihsLEhlW1IrZWVdKTtNKz1rfXJldHVybiBZW3c+PjJdPU0sMH1mdW5jdGlvbiBZbCgpe2lmKHR5cGVvZiBjcnlwdG89PSJvYmplY3QiJiZ0eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcz09ImZ1bmN0aW9uIil7dmFyIGw9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobCksbFswXX19ZWxzZSByZXR1cm4gZnVuY3Rpb24oKXttZSgicmFuZG9tRGV2aWNlIil9fWZ1bmN0aW9uIE10KGwsaCl7TXQucmFuZG9tRGV2aWNlfHwoTXQucmFuZG9tRGV2aWNlPVlsKCkpO2Zvcih2YXIgZz0wO2c8aDtnKyspRnRbbCtnPj4wXT1NdC5yYW5kb21EZXZpY2UoKTtyZXR1cm4gMH12YXIgUWw9e2E6UGwsZTpEbCxkOk1sLGI6Q2wsbjpVbCxoOkJsLGw6a2wsbTokbCxwOkdsLGY6SGwsZzpWbCxqOldsLGk6amwsazpxbCxjOlhsLG86TXR9O0ZsKCksdC5fX193YXNtX2NhbGxfY3RvcnM9ZnVuY3Rpb24oKXtyZXR1cm4odC5fX193YXNtX2NhbGxfY3RvcnM9dC5hc20ucikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRNb2RlbEJ1ZmZlck1lbW9yeU9mZnNldD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRNb2RlbEJ1ZmZlck1lbW9yeU9mZnNldD10LmFzbS5zKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldElucHV0TWVtb3J5T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldElucHV0TWVtb3J5T2Zmc2V0PXQuYXNtLnQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0SW5wdXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0SW5wdXRIZWlnaHQ9dC5hc20udSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRJbnB1dFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldElucHV0V2lkdGg9dC5hc20udikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRJbnB1dENoYW5uZWxDb3VudD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRJbnB1dENoYW5uZWxDb3VudD10LmFzbS53KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE91dHB1dE1lbW9yeU9mZnNldD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRPdXRwdXRNZW1vcnlPZmZzZXQ9dC5hc20ueCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRPdXRwdXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0SGVpZ2h0PXQuYXNtLnkpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0T3V0cHV0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0V2lkdGg9dC5hc20ueikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRPdXRwdXRDaGFubmVsQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0Q2hhbm5lbENvdW50PXQuYXNtLkEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fbG9hZE1vZGVsPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2xvYWRNb2RlbD10LmFzbS5CKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX3J1bkluZmVyZW5jZT1mdW5jdGlvbigpe3JldHVybih0Ll9ydW5JbmZlcmVuY2U9dC5hc20uQykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9pc0dQVUVuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5faXNHUFVFbmFibGVkPXQuYXNtLkQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIFdpPXQuX19fZXJybm9fbG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4oV2k9dC5fX19lcnJub19sb2NhdGlvbj10LmFzbS5GKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEN0O2Z1bmN0aW9uIEtsKGwpe3RoaXMubmFtZT0iRXhpdFN0YXR1cyIsdGhpcy5tZXNzYWdlPSJQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCIrbCsiKSIsdGhpcy5zdGF0dXM9bH1WZT1mdW5jdGlvbiBsKCl7Q3R8fExyKCksQ3R8fChWZT1sKX07ZnVuY3Rpb24gTHIobCl7aWYodmU+MHx8KGdsKCksdmU+MCkpcmV0dXJuO2Z1bmN0aW9uIGgoKXtDdHx8KEN0PSEwLHQuY2FsbGVkUnVuPSEwLCFBJiYoYmwoKSxuKHQpLHQub25SdW50aW1lSW5pdGlhbGl6ZWQmJnQub25SdW50aW1lSW5pdGlhbGl6ZWQoKSx2bCgpKSl9dC5zZXRTdGF0dXM/KHQuc2V0U3RhdHVzKCJSdW5uaW5nLi4uIiksc2V0VGltZW91dChmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnNldFN0YXR1cygiIil9LDEpLGgoKX0sMSkpOmgoKX10LnJ1bj1McjtmdW5jdGlvbiBKbChsLGgpe1psKGwpfWZ1bmN0aW9uIFpsKGwpe3hsKCl8fCh0Lm9uRXhpdCYmdC5vbkV4aXQobCksQT0hMCksdShsLG5ldyBLbChsKSl9aWYodC5wcmVJbml0KWZvcih0eXBlb2YgdC5wcmVJbml0PT0iZnVuY3Rpb24iJiYodC5wcmVJbml0PVt0LnByZUluaXRdKTt0LnByZUluaXQubGVuZ3RoPjA7KXQucHJlSW5pdC5wb3AoKSgpO3JldHVybiBMcigpLGUucmVhZHl9fSgpO2NsYXNzIGxse2NvbnN0cnVjdG9yKCl7cCh0aGlzLCJzZWxlY3RlZFRGTGl0ZSIpO3AodGhpcywiaXNTSU1EU3VwcG9ydGVkIiwhMSk7cCh0aGlzLCJpc1RocmVhZHNTdXBwb3J0ZWQiLCExKTtwKHRoaXMsImlucHV0V2lkdGgiLDApO3AodGhpcywiaW5wdXRIZWlnaHQiLDApO3AodGhpcywiaW5wdXRDaGFubmVsQ291bnQiLDApO3AodGhpcywiaW5wdXRNZW1vcnlPZmZzZXQiLDApO3AodGhpcywib3V0cHV0V2lkdGgiLDApO3AodGhpcywib3V0cHV0SGVpZ2h0IiwwKTtwKHRoaXMsIm91dHB1dENoYW5uZWxDb3VudCIsMCk7cCh0aGlzLCJvdXRwdXRNZW1vcnlPZmZzZXQiLDApfX1jb25zdCBkbD0iaHR0cHM6Ly9kM29wcWptcXp4ZjA1Ny5jbG91ZGZyb250Lm5ldC92b25hZ2UtdGVuc29yZmxvdy13YXNtL3RmbGl0ZS1zaW1kLXdhc20vMS4xLjMvIixtbD0iaHR0cHM6Ly9kM29wcWptcXp4ZjA1Ny5jbG91ZGZyb250Lm5ldC9tbC9zZWxmaWVfc2VnbWVudGF0aW9uLzQuMC4wLyI7YXN5bmMgZnVuY3Rpb24gaGwocj1kbCxlPW1sKXtsZXQgdD1uZXcgbGw7dmFyIG49bmV3IFByb21pc2UoZnVuY3Rpb24oaSxvKXthc3luYyBmdW5jdGlvbiBzKCl7cmV0dXJuIGZsKHtsb2NhdGVGaWxlOmZ1bmN0aW9uKGYpe3JldHVybiByK2Z9fSl9YXN5bmMgZnVuY3Rpb24gYSh1KXtyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMoZixjKT0+e2NvbnN0IGQ9dTtpZih0eXBlb2YgZD4idSIpcmV0dXJuIGMoIlRGTGl0ZSBiYWNrZW5kIHVuYXZhaWxhYmxlOiB3YXNtU2ltZCIpO2NvbnN0IHk9InNlbGZpZV9zZWdtZW50YXRpb25fbGFuZHNjYXBlIjtjb25zb2xlLmxvZygiTG9hZGluZyB0ZmxpdGUgbW9kZWw6Iix5KTtsZXQgXz1lK2Ake3l9LnRmbGl0ZWA7Y29uc29sZS5sb2coIlRGTGl0ZSBtb2RlbFVybDogIitfKTt0cnl7Y29uc3QgeD1hd2FpdChhd2FpdCBmZXRjaChfKSkuYXJyYXlCdWZmZXIoKTtjb25zb2xlLmxvZygiTW9kZWwgYnVmZmVyIHNpemU6Iix4LmJ5dGVMZW5ndGgpO2NvbnN0IHY9ZC5fZ2V0TW9kZWxCdWZmZXJNZW1vcnlPZmZzZXQoKTtjb25zb2xlLmxvZygiTW9kZWwgYnVmZmVyIG1lbW9yeSBvZmZzZXQ6Iix2KSxjb25zb2xlLmxvZygiTG9hZGluZyBtb2RlbCBidWZmZXIuLi4iKSxkLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoeCksdik7Y29uc3QgYj1kLl9sb2FkTW9kZWwoeC5ieXRlTGVuZ3RoKTtpZihjb25zb2xlLmxvZygiTG9hZCBtb2RlbCByZXN1bHQ6IixiKSxiIT09MCl7YygiQ2Fubm90IGxvYWQgbW9kZWwiKTtyZXR1cm59dC5pbnB1dFdpZHRoPWQuX2dldElucHV0V2lkdGgoKSx0LmlucHV0SGVpZ2h0PWQuX2dldElucHV0SGVpZ2h0KCksdC5pbnB1dENoYW5uZWxDb3VudD1kLl9nZXRJbnB1dENoYW5uZWxDb3VudCgpLHQuaW5wdXRNZW1vcnlPZmZzZXQ9ZC5fZ2V0SW5wdXRNZW1vcnlPZmZzZXQoKSxjb25zb2xlLmxvZygiSW5wdXQgbWVtb3J5IG9mZnNldDoiLHQuaW5wdXRNZW1vcnlPZmZzZXQpLGNvbnNvbGUubG9nKCJJbnB1dCBoZWlnaHQ6Iix0LmlucHV0SGVpZ2h0KSxjb25zb2xlLmxvZygiSW5wdXQgd2lkdGg6Iix0LmlucHV0V2lkdGgpLGNvbnNvbGUubG9nKCJJbnB1dCBjaGFubmVsczoiLHQuaW5wdXRDaGFubmVsQ291bnQpLHQub3V0cHV0TWVtb3J5T2Zmc2V0PWQuX2dldE91dHB1dE1lbW9yeU9mZnNldCgpLHQub3V0cHV0V2lkdGg9ZC5fZ2V0T3V0cHV0V2lkdGgoKSx0Lm91dHB1dEhlaWdodD1kLl9nZXRPdXRwdXRIZWlnaHQoKSx0Lm91dHB1dENoYW5uZWxDb3VudD1kLl9nZXRPdXRwdXRDaGFubmVsQ291bnQoKSxjb25zb2xlLmxvZygiT3V0cHV0IG1lbW9yeSBvZmZzZXQ6Iix0Lm91dHB1dE1lbW9yeU9mZnNldCksY29uc29sZS5sb2coIk91dHB1dCBoZWlnaHQ6Iix0Lm91dHB1dEhlaWdodCksY29uc29sZS5sb2coIk91dHB1dCB3aWR0aDoiLHQub3V0cHV0V2lkdGgpLGNvbnNvbGUubG9nKCJPdXRwdXQgY2hhbm5lbHM6Iix0Lm91dHB1dENoYW5uZWxDb3VudCksdC5zZWxlY3RlZFRGTGl0ZT1kfWNhdGNoKG0pe2MobSk7cmV0dXJufWYoKX0pfXMoKS50aGVuKHU9PntpZih1PT09bnVsbCl0aHJvdyBjb25zb2xlLmVycm9yKCJsb2FkVEZMaXRlIG51bGwiKSwibG9hZFRGTGl0ZSBudWxsIjthKHUpLnRoZW4oZj0+e2kodCl9KS5jYXRjaChmPT57Y29uc29sZS5lcnJvcigibG9hZFRGTGl0ZU1vZGVsIGVycm9yIiksbygibG9hZFRGTGl0ZU1vZGVsIGVycm9yIil9KX0pLmNhdGNoKHU9Pntjb25zb2xlLmVycm9yKCJsb2FkVEZMaXRlIGVycm9yOiIsdSksbygibG9hZFRGTGl0ZSBlcnJvcjoiK3UpfSl9KTtyZXR1cm4gbn1jbGFzcyBwbHtjb25zdHJ1Y3Rvcigpe3AodGhpcywiY2FudmFzIixuZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCkpO3AodGhpcywiY29udGV4dCIsdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiLHt3aWxsUmVhZEZyZXF1ZW50bHk6ITB9KSk7cCh0aGlzLCJwaXhlbENvdW50IiwwKTtwKHRoaXMsImlucHV0T2Zmc2V0IiwwKTtwKHRoaXMsIm91dHB1dE9mZnNldCIsMCk7cCh0aGlzLCJpbmZvcyIpO3AodGhpcywibWFzayIpfWFzeW5jIGluaXQoZSx0KXthd2FpdCB0aGlzLmluaXRXYXNtKGUsdCksdGhpcy5pbmZvcyYmKHRoaXMuY2FudmFzLndpZHRoPXRoaXMuaW5mb3MuaW5wdXRXaWR0aCx0aGlzLmNhbnZhcy5oZWlnaHQ9dGhpcy5pbmZvcy5pbnB1dEhlaWdodCx0aGlzLnBpeGVsQ291bnQ9dGhpcy5pbmZvcy5pbnB1dFdpZHRoKnRoaXMuaW5mb3MuaW5wdXRIZWlnaHQsdGhpcy5tYXNrPW5ldyBJbWFnZURhdGEodGhpcy5pbmZvcy5pbnB1dFdpZHRoLHRoaXMuaW5mb3MuaW5wdXRIZWlnaHQpLHRoaXMuaW5wdXRPZmZzZXQ9dGhpcy5pbmZvcy5pbnB1dE1lbW9yeU9mZnNldC80LHRoaXMub3V0cHV0T2Zmc2V0PXRoaXMuaW5mb3Mub3V0cHV0TWVtb3J5T2Zmc2V0LzQpfWFzeW5jIGluaXRXYXNtKGUsdCl7dGhpcy5pbmZvcz1hd2FpdCBobChlLHQpfWdldE91dHB1dERpbWVuc2lvbnMoKXt2YXIgZSx0LG4saTtyZXR1cm57d2lkdGg6KHQ9KGU9dGhpcy5pbmZvcyk9PW51bGw/dm9pZCAwOmUub3V0cHV0V2lkdGgpIT1udWxsP3Q6MCxoZWlnaHQ6KGk9KG49dGhpcy5pbmZvcyk9PW51bGw/dm9pZCAwOm4ub3V0cHV0SGVpZ2h0KSE9bnVsbD9pOjB9fWFzeW5jIHByb2Nlc3MoZSl7aWYoIXRoaXMubWFza3x8IXRoaXMuaW5mb3MpcmV0dXJuO2NvbnN0IHQ9dGhpcy5pbmZvcy5pbnB1dFdpZHRoLG49dGhpcy5pbmZvcy5pbnB1dEhlaWdodDt0aGlzLmNvbnRleHQuZHJhd0ltYWdlKGUsMCwwLGUud2lkdGgsZS5oZWlnaHQsMCwwLHQsbik7Y29uc3QgaT10aGlzLmNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsMCx0LG4pLG89dGhpcy5pbmZvcy5zZWxlY3RlZFRGTGl0ZS5IRUFQRjMyO2ZvcihsZXQgcz0wO3M8dGhpcy5waXhlbENvdW50O3MrKyl7Y29uc3QgYT10aGlzLmlucHV0T2Zmc2V0K3MqMztvW2FdPWkuZGF0YVtzKjRdLzI1NSxvW2ErMV09aS5kYXRhW3MqNCsxXS8yNTUsb1thKzJdPWkuZGF0YVtzKjQrMl0vMjU1fXRoaXMuaW5mb3Muc2VsZWN0ZWRURkxpdGUuX3J1bkluZmVyZW5jZSgpO2ZvcihsZXQgcz0wO3M8dGhpcy5waXhlbENvdW50O3MrKyl7Y29uc3QgYT10aGlzLmluZm9zLnNlbGVjdGVkVEZMaXRlLkhFQVBGMzJbdGhpcy5vdXRwdXRPZmZzZXQrc107dGhpcy5tYXNrLmRhdGFbcyo0XT10aGlzLm1hc2suZGF0YVtzKjQrM109MjU1KmF9cmV0dXJuIGNyZWF0ZUltYWdlQml0bWFwKHRoaXMubWFzayl9aXNHcHVTdXBwb3J0ZWQoKXt2YXIgZSx0LG47cmV0dXJuKG49KHQ9KGU9dGhpcy5pbmZvcyk9PW51bGw/dm9pZCAwOmUuc2VsZWN0ZWRURkxpdGUpPT1udWxsP3ZvaWQgMDp0Ll9pc0dQVUVuYWJsZWQoKSkhPW51bGw/bjohMX19Y2xhc3MgeWx7Y29uc3RydWN0b3IoKXtwKHRoaXMsInNlbGZpZVNlZ21lbnRhdGlvbiIsbmV3IHBsKTtwKHRoaXMsImJhY2tncm91bmRGaWx0ZXIiKTtwKHRoaXMsInByZXZpb3VzRGltZW5zaW9ucyIse3dpZHRoOjAsaGVpZ2h0OjB9KX1hc3luYyBpbml0KGUsdCl7YXdhaXQgdGhpcy5zZWxmaWVTZWdtZW50YXRpb24uaW5pdCh0Lndhc21Bc3NldFVyaVBhdGgsdC50ZmxpdGVBc3NldFVyaVBhdGgpO2NvbnN0e3dpZHRoOm4saGVpZ2h0Oml9PXRoaXMuc2VsZmllU2VnbWVudGF0aW9uLmdldE91dHB1dERpbWVuc2lvbnMoKTt0aGlzLmJhY2tncm91bmRGaWx0ZXI9bmV3IGNsKGUse2ZvcmVncm91bmRXaWR0aDoxLGZvcmVncm91bmRIZWlnaHQ6MSxtYXNrV2lkdGg6bixtYXNrSGVpZ2h0Oml9KX1hc3luYyB0cmFuc2Zvcm0oZSx0KXt2YXIgcyxhLHUsZjtjb25zdCBuPShzPWUudGltZXN0YW1wKSE9bnVsbD9zOjAsaT1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChlKSxvPWF3YWl0IHRoaXMuc2VsZmllU2VnbWVudGF0aW9uLnByb2Nlc3MoaSk7bz8oKGkud2lkdGghPT10aGlzLnByZXZpb3VzRGltZW5zaW9ucy53aWR0aHx8aS5oZWlnaHQhPT10aGlzLnByZXZpb3VzRGltZW5zaW9ucy5oZWlnaHQpJiYodGhpcy5wcmV2aW91c0RpbWVuc2lvbnMud2lkdGg9aS53aWR0aCx0aGlzLnByZXZpb3VzRGltZW5zaW9ucy5oZWlnaHQ9aS5oZWlnaHQsYXdhaXQoKGE9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6YS5yZXNpemVGb3JlZ3JvdW5kKGkud2lkdGgsaS5oZWlnaHQpKSksYXdhaXQoKHU9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dS5wcm9jZXNzKGksbykpLGUuY2xvc2UoKSx0LmVucXVldWUobmV3IFZpZGVvRnJhbWUoKGY9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6Zi5jYW52YXMse3RpbWVzdGFtcDpuLGFscGhhOiJkaXNjYXJkIn0pKSk6dC5lbnF1ZXVlKGUpfWFzeW5jIHNldEJhY2tncm91bmRPcHRpb25zKGUpe3ZhciB0O2F3YWl0KCh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnQuc2V0QmFja2dyb3VuZE9wdGlvbnMoZSkpfWFzeW5jIHNldFZpZGVvQkdSZWFkYWJsZShlKXt2YXIgdDthd2FpdCgodD10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp0LnNldFZpZGVvQkdSZWFkYWJsZShlKSl9YXN5bmMgc2V0VmlydHVhbEJHSW1hZ2UoZSl7dmFyIHQ7YXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dC5zZXRWaXJ0dWFsQkdJbWFnZShlKSl9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dmFyIHQ7KHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbHx8dC5zZXRGbGlja2VyaW5nT3B0aW9ucyhlKX1hc3luYyBwcm9maWxlKGUpe3ZhciB0LG47cmV0dXJuKG49KHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dC5wcm9maWxlKGUpKSE9bnVsbD9uOltdfX1jb25zdCBOcj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3AodGhpcywiYmFja2dyb3VuZFRyYW5zZm9ybWVyIixuZXcgeWwpO3AodGhpcywibWVkaWFQcm9jZXNzb3IiLG5ldyB3cyk7cCh0aGlzLCJyYXRlIiwzMCk7cCh0aGlzLCJyZXNvbHZlT25NZWRpYVByb2Nlc3NvciIpO3AodGhpcywiZXZlbnRzUXVldWUiLFtdKX1hc3luYyBpbml0KGUsdCl7YXdhaXQgdGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuaW5pdChlLHQpLGF3YWl0IHRoaXMubWVkaWFQcm9jZXNzb3Iuc2V0VHJhbnNmb3JtZXJzKFt0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lcl0pLHRoaXMubWVkaWFQcm9jZXNzb3Iuc2V0VHJhY2tFeHBlY3RlZFJhdGUodGhpcy5yYXRlKSx0aGlzLm1lZGlhUHJvY2Vzc29yLm9uQW55KChuLGkpPT57dGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcj8odGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcih7bmFtZTpuLGRhdGE6aX0pLHRoaXMucmVzb2x2ZU9uTWVkaWFQcm9jZXNzb3I9dm9pZCAwKTp0aGlzLmV2ZW50c1F1ZXVlLnB1c2goe25hbWU6bixkYXRhOml9KX0pfWFzeW5jIG9uTWVkaWFQcm9jZXNzb3JFdmVudCgpe3JldHVybiBhd2FpdCBuZXcgUHJvbWlzZShlPT57dGhpcy5ldmVudHNRdWV1ZS5sZW5ndGg+MD9lKHRoaXMuZXZlbnRzUXVldWUuc2hpZnQoKSk6dGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcj1lfSl9YXN5bmMgc2V0VHJhY2tFeHBlY3RlZFJhdGUoZSl7dGhpcy5yYXRlPWUsdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFja0V4cGVjdGVkUmF0ZShlKX1hc3luYyB0cmFuc2Zvcm0oZSx0KXt0aGlzLm1lZGlhUHJvY2Vzc29yLnRyYW5zZm9ybShlLHQpfWFzeW5jIHNldEJhY2tncm91bmRPcHRpb25zKGUpe3ZhciB0O2F3YWl0KCh0PXRoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyKT09bnVsbD92b2lkIDA6dC5zZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKSl9c2V0VmlkZW9CR1JlYWRhYmxlKGUpe3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnNldFZpZGVvQkdSZWFkYWJsZShlKX1hc3luYyBzZXRWaXJ0dWFsQkdJbWFnZShlKXthd2FpdCB0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5zZXRWaXJ0dWFsQkdJbWFnZShlKX1hc3luYyB0ZXJtaW5hdGUoKXthd2FpdCB0aGlzLm1lZGlhUHJvY2Vzc29yLmRlc3Ryb3koKX1zZXRGbGlja2VyaW5nT3B0aW9ucyhlKXt0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5zZXRGbGlja2VyaW5nT3B0aW9ucyhlKX1zZXRWb25hZ2VNZXRhZGF0YShlKXtmcyhlKX1hc3luYyBwcm9maWxlKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShhd2FpdCB0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5wcm9maWxlKGUpKX19O2xldCBCaT1OcjsoKCk9PntYaSgiUHJvY2Vzc29yV29ya2VyIixOcil9KSgpfSkoKTsK",gu=typeof window<"u"&&window.Blob&&new Blob([atob(yu)],{type:"text/javascript;charset=utf-8"});function P3(){const o=gu&&(window.URL||window.webkitURL).createObjectURL(gu);try{return o?new Worker(o):new Worker("data:application/javascript;base64,"+yu)}finally{o&&(window.URL||window.webkitURL).revokeObjectURL(o)}}const is=class extends zs{constructor(){super(...arguments);Rt(this,"rate",30);Rt(this,"worker")}async init(r){this.worker=await o2(es,P3),await this.worker.init(`worker_${is.initCount++}`,r),await this.worker.setVonageMetadata(Ts()),await this.setBackgroundOptions(r),this.listenWorker()}async setTrackExpectedRate(r){var m;await((m=this.worker)==null?void 0:m.setTrackExpectedRate(r))}async setBackgroundOptions(r){var y,I,F;const{transformerType:m}=r;switch(m){case"VideoBackground":await((y=this.worker)==null?void 0:y.setVideoBGReadable(await Qs.createVideoReadable(r.backgroundAssetUri)));break;case"VirtualBackground":await((I=this.worker)==null?void 0:I.setVirtualBGImage(await Qs.createImageCanvas(r.backgroundAssetUri)));break}await((F=this.worker)==null?void 0:F.setBackgroundOptions(r))}async transform(r,m){var y;await((y=this.worker)==null?void 0:y.transform(r,m))}async destroy(){var r;await((r=this.worker)==null?void 0:r.terminate())}async setFlickeringOptions(r){var m;await((m=this.worker)==null?void 0:m.setFlickeringOptions(r))}async profile(r){var y;const m=await((y=this.worker)==null?void 0:y.profile(r));return JSON.parse(m!=null?m:"[]")}async listenWorker(){var r,m,y;for(;(r=this.worker)!=null&&r.worker;){const{name:I,data:F}=await((m=this.worker)==null?void 0:m.onMediaProcessorEvent());switch(I){case"error":case"warn":this.emit(I,F);break;case"pipelineInfo":switch(this.emit(I,F),F){case"pipeline_ended":case"pipeline_ended_with_error":await((y=this.worker)==null?void 0:y.terminate());return}break}}}};let Pi=is;Rt(Pi,"initCount",0);class _3{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={},m=[];let y=0;for(const F of this.queries){const Y=[];for(const k of F)r[k.name]===void 0&&(r[k.name]=n.length,n.push({name:k.name})),Y.push({type:k.action==$s.PUSH?"O":"C",frame:r[k.name],at:k.timestamp}),y=Math.max(y,k.timestamp+k.duration);m.push({events:Y,type:"evented",name:"GPU Profile",unit:"nanoseconds",startValue:0,endValue:y})}const I={$schema:"https://www.speedscope.app/file-format-schema.json",shared:{frames:n},profiles:m};return JSON.stringify(I,null,2)}}class ns extends zs{constructor(){super();Rt(this,"worker",new Pi);Rt(this,"connector",new zc(this.worker))}async init(r){await this.worker.init(r),this.worker.onAny((m,y)=>this.emit(m,y))}async setBackgroundOptions(r){await this.worker.setBackgroundOptions(r)}setTrackExpectedRate(r){this.worker.setTrackExpectedRate(r)}getConnector(){return this.connector}async profile(r){return this.worker.profile(r)}static async profile(r){const m=await Promise.all(this.instances.map(y=>y.profile(r)));return new _3(m)}static async create(r){const m=new this;return await m.init(r),this.instances.push(m),m}}Rt(ns,"instances",[]);function Q3(){return mi}function D3(){return pi}function $3(){return bi}function q3(){return yi}function td(){return gi}function ed(){return Zi}function nd(){return vi}async function rd(o){return await ns.create(o)}Ae.BackgroundTransformer=bu,Ae.BackgroundTransformerType=ks,Ae.BlurRadius=Mr,Ae.ErrorFunction=Js,Ae.MediapipeHelper=Gi,Ae.PipelineInfoData=fi,Ae.SelfieSegmentationType=Es,Ae.VonageMediaProcessor=ns,Ae.WarningType=Ns,Ae.createVonageMediaProcessor=rd,Ae.getSupportedBrowserFeatures=Us,Ae.getVonageFaceDetection=q3,Ae.getVonageFaceMash=td,Ae.getVonageHands=D3,Ae.getVonageHolistic=$3,Ae.getVonageObjectron=ed,Ae.getVonagePose=nd,Ae.getVonageSelfieSegmentation=Q3,Ae.isSupported=qc,Object.defineProperties(Ae,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
457
|
+
`;class $0 extends Ir{getFragmentShader(){return Q0}getVertexShader(){return D0}}class q0 extends Mo{constructor(r,p,G){super();Wt(this,"inputImage");this.context=r;const S={context:r,height:G,width:p};this.addStep({program:new $0({...S,disableFramebuffer:!0}),getUniforms:()=>({texture:mn(r,this.inputImage),invert_y:!0})})}setData(r){this.inputImage=r}}class t3{constructor(n){Wt(this,"resize");Wt(this,"canvas");Wt(this,"context");this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("webgl2"),this.canvas.width=n.width,this.canvas.height=n.height,this.resize=new q0(this.context,n.width,n.height)}resizeForeground(n,r){this.canvas.width=n,this.canvas.height=r,this.resize.resizeOutput(n,r)}async process(n){var r,p;return this.canvas.width=this.canvas.width,(r=this.resize)==null||r.setData(n),(p=this.resize)==null||p.run(),this.canvas}}class e3{constructor(n,r){Wt(this,"improveMaskSegmentation");Wt(this,"backgroundResizer");Wt(this,"backgroundImage");Wt(this,"backgroundVideo");Wt(this,"profiler");Wt(this,"activePipeline");Wt(this,"canvas");Wt(this,"options");Wt(this,"context");Wt(this,"virtualBGImage");this.id=n,this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("webgl2"),this.canvas.width=r.foregroundWidth,this.canvas.height=r.foregroundHeight,this.improveMaskSegmentation=new _0(this.context,r.maskWidth,r.maskHeight),this.backgroundImage=new kl(this.context),this.backgroundVideo=new w0(this.context),this.backgroundResizer=new t3({width:r.foregroundWidth,height:r.foregroundHeight})}setBackgroundOptions(n){switch(n.transformerType){case"BackgroundBlur":this.activePipeline=new T0(this.context,this.getBlurSize(n.radius));break;case"SilhouetteBlur":this.activePipeline=new L0(this.context,this.getBlurSize(n.radius));break;case"VideoBackground":this.activePipeline=this.backgroundVideo;break;case"VirtualBackground":this.activePipeline=this.backgroundImage;break;default:throw`Unknown transformer type [${n.transformerType}]`}this.options=n}setFlickeringOptions(n){var r;(r=this.improveMaskSegmentation)==null||r.setOptions(n)}setVideoBGReadable(n){this.backgroundVideo.inputVideo=n}async setVirtualBGImage(n){this.virtualBGImage=n,this.backgroundImage.inputBackgroundImage=await this.backgroundResizer.process(n)}async process(n,r){var p,G,S,H,w,E,et;if(this.activePipeline&&n.width&&(r==null?void 0:r.width)){const ct=`[${this.id}] background-filter`;(p=this.profiler)==null||p.pushContext(ct);let dt=r;(((G=this.options)==null?void 0:G.selfieSegmentationType)&&((S=this.options)==null?void 0:S.selfieSegmentationType)==="PRECISE"||!((H=this.options)!=null&&H.selfieSegmentationType)&&this.activePipeline.preciseMaskEnabled)&&(this.improveMaskSegmentation.setId(this.id),this.improveMaskSegmentation.setProfiler(this.profiler),this.improveMaskSegmentation.setData(n,r),this.improveMaskSegmentation.run(),dt=this.improveMaskSegmentation.output),this.activePipeline.setId(this.id),this.activePipeline.setProfiler(this.profiler),(w=this.activePipeline)==null||w.setData(n,dt),(E=this.activePipeline)==null||E.run(),(et=this.profiler)==null||et.popContext(ct)}}async resizeForeground(n,r){var p;this.canvas.width=n,this.canvas.height=r,this.backgroundImage.resizeOutput(n,r),this.backgroundVideo.resizeOutput(n,r),this.backgroundResizer.resizeForeground(n,r),(p=this.activePipeline)==null||p.resizeOutput(n,r),this.virtualBGImage&&(this.backgroundImage.inputBackgroundImage=await this.backgroundResizer.process(this.virtualBGImage))}async profile(n){const r=new Z1(this.context);return this.profiler=r,r.start(),await Xs(n),this.profiler=void 0,r.stop(),r.getResolvedQueries()}getBlurSize(n=Ar.Low){switch(n){case Ar.Low:return 5;case Ar.High:return 12}return n}}class Bl{constructor(){Wt(this,"selfieSegmentation",new us);Wt(this,"backgroundFilter");Wt(this,"reporter",new y1);Wt(this,"previousDimensions",{width:0,height:0});Wt(this,"backgroundOptions")}async init(n,r){await this.selfieSegmentation.init(r.wasmAssetUriPath,r.tfliteAssetUriPath);const{width:p,height:G}=this.selfieSegmentation.getOutputDimensions();this.backgroundFilter=new e3(n,{foregroundWidth:1,foregroundHeight:1,maskWidth:p,maskHeight:G}),this.report({variation:"Create"})}async transform(n,r){var H,w,E,et;const p=(H=n.timestamp)!=null?H:0,G=await createImageBitmap(n),S=await this.selfieSegmentation.process(G);S?((G.width!==this.previousDimensions.width||G.height!==this.previousDimensions.height)&&(this.previousDimensions.width=G.width,this.previousDimensions.height=G.height,await((w=this.backgroundFilter)==null?void 0:w.resizeForeground(G.width,G.height))),await((E=this.backgroundFilter)==null?void 0:E.process(G,S)),n.close(),r.enqueue(new VideoFrame((et=this.backgroundFilter)==null?void 0:et.canvas,{timestamp:p,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,p;return(p=(r=this.backgroundFilter)==null?void 0:r.profile(n))!=null?p:[]}getTransformerType(){var n,r;return(r=(n=this.backgroundOptions)==null?void 0:n.transformerType)!=null?r:"Undefined"}report(n){var r;this.reporter.send({version:g1,action:"MlTransformers",transformerType:(r=this.backgroundOptions)==null?void 0:r.transformerType,config:JSON.stringify(this.backgroundOptions),...n})}}const _o=class{constructor(){Wt(this,"backgroundTransformer",new Bl);Wt(this,"mediaProcessor",new V2);Wt(this,"rate",30);Wt(this,"resolveOnMediaProcessor");Wt(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((p,G)=>{this.resolveOnMediaProcessor?(this.resolveOnMediaProcessor({name:p,data:G}),this.resolveOnMediaProcessor=void 0):this.eventsQueue.push({name:p,data:G})})}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){g2(n)}async profile(n){return JSON.stringify(await this.backgroundTransformer.profile(n))}};let zo=_o;(()=>{M2("ProcessorWorker",_o)})();const Al="dmFyIGlsPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgb2w9KHEsWCx6KT0+WCBpbiBxP2lsKHEsWCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6en0pOnFbWF09ejt2YXIgcD0ocSxYLHopPT4ob2wocSx0eXBlb2YgWCE9InN5bWJvbCI/WCsiIjpYLHopLHopOyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBxKHIsZSl7cmV0dXJuIGdsb2JhbFRoaXNbcl18fChnbG9iYWxUaGlzW3JdPWUpLGdsb2JhbFRoaXNbcl19Y29uc3QgWD1xKCJnbG9iYWxzIix7fSk7dmFyIHo9KHI9PihyLklOSVQ9IklOSVQiLHIuRk9SV0FSRD0iRk9SV0FSRCIsci5URVJNSU5BVEU9IlRFUk1JTkFURSIsci5HTE9CQUxTX1NZTkM9IkdMT0JBTFNfU1lOQyIscikpKHp8fHt9KTtmdW5jdGlvbiBwaShyKXtyZXR1cm5bSW1hZ2VCaXRtYXAsUmVhZGFibGVTdHJlYW0sV3JpdGFibGVTdHJlYW1dLnNvbWUoZT0+ciBpbnN0YW5jZW9mIGUpfWZ1bmN0aW9uIHplKHIsZSl7Y29uc3R7aWQ6dCx0eXBlOm59PXIsaT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO3Bvc3RNZXNzYWdlKHtpZDp0LHR5cGU6bixyZXN1bHQ6ZX0saS5maWx0ZXIobz0+cGkobykpKX1xKCJ3b3JrZXJpemVkIix7fSk7ZnVuY3Rpb24gU3IoKXtyZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlfWZ1bmN0aW9uIFdlKHIsZSl7aWYoQXJyYXkuaXNBcnJheShlKSllLnNwbGljZSgwLGUubGVuZ3RoKTtlbHNlIGlmKHR5cGVvZiBlPT0ib2JqZWN0Iilmb3IoY29uc3QgdCBpbiBlKWRlbGV0ZSBlW3RdO2Zvcihjb25zdCB0IGluIHIpQXJyYXkuaXNBcnJheShyW3RdKT8oZVt0XT1bXSxXZShyW3RdLGVbdF0pKTp0eXBlb2Ygclt0XT09Im9iamVjdCI/KGVbdF09e30sV2Uoclt0XSxlW3RdKSk6ZVt0XT1yW3RdfWFzeW5jIGZ1bmN0aW9uIHlpKHIsZSl7Y29uc3R7ZnVuY3Rpb25OYW1lOnQsYXJnczpufT1yO2lmKCFlLmluc3RhbmNlKXRocm93Imluc3RhbmNlIG5vdCBpbml0aWFsaXplZCI7aWYoIXQpdGhyb3cibWlzc2luZyBmdW5jdGlvbiBuYW1lIHRvIGNhbGwiO2lmKCFlLmluc3RhbmNlW3RdKXRocm93YHVuZGVmaW5lZCBmdW5jdGlvbiBbJHt0fV0gaW4gY2xhc3MgJHtlLmluc3RhbmNlLmNvbnN0cnVjdG9yLndvcmtlcklkfWA7emUocixhd2FpdCBlLmluc3RhbmNlW3RdKC4uLm4hPW51bGw/bjpbXSkpfWNvbnN0IFJyPXEoInJlZ2lzdGVyZWRXb3JrZXJzIix7fSk7ZnVuY3Rpb24gX2kocixlKXtlLndvcmtlcklkPXIsU3IoKSYmKFJyW2Uud29ya2VySWRdPWUpfWZ1bmN0aW9uIHhpKHIsZSl7aWYoIXIuYXJncyl0aHJvdyJNaXNzaW5nIGNsYXNzTmFtZSB3aGlsZSBpbml0aWFsaXppbmcgd29ya2VyIjtjb25zdFt0LG5dPXIuYXJncyxpPVJyW3RdO2lmKGkpZS5pbnN0YW5jZT1uZXcgaShyLmFyZ3Muc2xpY2UoMSkpO2Vsc2UgdGhyb3dgdW5rbm93biB3b3JrZXIgY2xhc3MgJHt0fWA7V2UobixYKSx6ZShyLHR5cGVvZiBlLmluc3RhbmNlIT09dm9pZCAwKX1hc3luYyBmdW5jdGlvbiBnaShyLGUpe2NvbnN0e2FyZ3M6dH09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2xldCBuO2UuaW5zdGFuY2UudGVybWluYXRlJiYobj1hd2FpdCBlLmluc3RhbmNlLnRlcm1pbmF0ZSguLi50IT1udWxsP3Q6W10pKSx6ZShyLG4pfWZ1bmN0aW9uIGJpKHIpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBnbG9iYWxzIHdoaWxlIHN5bmNpbmciO1dlKHIuYXJnc1swXSxYKSx6ZShyLHt9KX1mdW5jdGlvbiB2aSgpe2NvbnN0IHI9e307b25tZXNzYWdlPWFzeW5jIGU9Pntjb25zdCB0PWUuZGF0YTtzd2l0Y2godC50eXBlKXtjYXNlIHouSU5JVDp4aSh0LHIpO2JyZWFrO2Nhc2Ugei5GT1JXQVJEOnlpKHQscik7YnJlYWs7Y2FzZSB6LlRFUk1JTkFURTpnaSh0LHIpO2JyZWFrO2Nhc2Ugei5HTE9CQUxTX1NZTkM6YmkodCk7YnJlYWt9fX1TcigpJiZ2aSgpO3ZhciBFaT1PYmplY3QuZGVmaW5lUHJvcGVydHksVGk9KHIsZSx0KT0+ZSBpbiByP0VpKHIsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dH0pOnJbZV09dCxBPShyLGUsdCk9PihUaShyLHR5cGVvZiBlIT0ic3ltYm9sIj9lKyIiOmUsdCksdCk7Y2xhc3MgSnt9QShKLCJ1cGRhdGVzIix7dHJhbnNmb3JtZXJfbmV3OiJOZXcgdHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyX251bGw6Ik51bGwgdHJhbnNmb3JtZXIifSksQShKLCJlcnJvcnMiLHt0cmFuc2Zvcm1lcl9ub25lOiJObyB0cmFuc2Zvcm1lcnMgcHJvdmlkZWQiLHRyYW5zZm9ybWVyX3N0YXJ0OiJDYW5ub3Qgc3RhcnQgdHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyX3RyYW5zZm9ybToiQ2Fubm90IHRyYW5zZm9ybSBmcmFtZSIsdHJhbnNmb3JtZXJfZmx1c2g6IkNhbm5vdCBmbHVzaCB0cmFuc2Zvcm1lciIscmVhZGFibGVfbnVsbDoiUmVhZGFibGUgaXMgbnVsbCIsd3JpdGFibGVfbnVsbDoiV3JpdGFibGUgaXMgbnVsbCJ9KTtjb25zdCBlZT1uZXcgV2Vha01hcCxWZT1uZXcgV2Vha01hcCxSZT1uZXcgV2Vha01hcCxSdD1TeW1ib2woImFueVByb2R1Y2VyIiksSXI9UHJvbWlzZS5yZXNvbHZlKCksSGU9U3ltYm9sKCJsaXN0ZW5lckFkZGVkIiksWWU9U3ltYm9sKCJsaXN0ZW5lclJlbW92ZWQiKTtsZXQgSXQ9ITE7ZnVuY3Rpb24gYmUocil7aWYodHlwZW9mIHIhPSJzdHJpbmciJiZ0eXBlb2YgciE9InN5bWJvbCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXZlbnROYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBzeW1ib2wiKX1mdW5jdGlvbiBqZShyKXtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB2ZShyLGUpe2NvbnN0IHQ9VmUuZ2V0KHIpO3JldHVybiB0LmhhcyhlKXx8dC5zZXQoZSxuZXcgU2V0KSx0LmdldChlKX1mdW5jdGlvbiBJZShyLGUpe2NvbnN0IHQ9dHlwZW9mIGU9PSJzdHJpbmcifHx0eXBlb2YgZT09InN5bWJvbCI/ZTpSdCxuPVJlLmdldChyKTtyZXR1cm4gbi5oYXModCl8fG4uc2V0KHQsbmV3IFNldCksbi5nZXQodCl9ZnVuY3Rpb24gQWkocixlLHQpe2NvbnN0IG49UmUuZ2V0KHIpO2lmKG4uaGFzKGUpKWZvcihjb25zdCBpIG9mIG4uZ2V0KGUpKWkuZW5xdWV1ZSh0KTtpZihuLmhhcyhSdCkpe2NvbnN0IGk9UHJvbWlzZS5hbGwoW2UsdF0pO2Zvcihjb25zdCBvIG9mIG4uZ2V0KFJ0KSlvLmVucXVldWUoaSl9fWZ1bmN0aW9uIEZyKHIsZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2xldCB0PSExLG49KCk9Pnt9LGk9W107Y29uc3Qgbz17ZW5xdWV1ZShzKXtpLnB1c2gocyksbigpfSxmaW5pc2goKXt0PSEwLG4oKX19O2Zvcihjb25zdCBzIG9mIGUpSWUocixzKS5hZGQobyk7cmV0dXJue2FzeW5jIG5leHQoKXtyZXR1cm4gaT9pLmxlbmd0aD09PTA/dD8oaT12b2lkIDAsdGhpcy5uZXh0KCkpOihhd2FpdCBuZXcgUHJvbWlzZShzPT57bj1zfSksdGhpcy5uZXh0KCkpOntkb25lOiExLHZhbHVlOmF3YWl0IGkuc2hpZnQoKX06e2RvbmU6ITB9fSxhc3luYyByZXR1cm4ocyl7aT12b2lkIDA7Zm9yKGNvbnN0IGEgb2YgZSlJZShyLGEpLmRlbGV0ZShvKTtyZXR1cm4gbigpLGFyZ3VtZW50cy5sZW5ndGg+MD97ZG9uZTohMCx2YWx1ZTphd2FpdCBzfTp7ZG9uZTohMH19LFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtyZXR1cm4gdGhpc319fWZ1bmN0aW9uIFByKHIpe2lmKHI9PT12b2lkIDApcmV0dXJuIERyO2lmKCFBcnJheS5pc0FycmF5KHIpKXRocm93IG5ldyBUeXBlRXJyb3IoImBtZXRob2ROYW1lc2AgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzIik7Zm9yKGNvbnN0IGUgb2YgcilpZighRHIuaW5jbHVkZXMoZSkpdGhyb3cgdHlwZW9mIGUhPSJzdHJpbmciP25ldyBUeXBlRXJyb3IoImBtZXRob2ROYW1lc2AgZWxlbWVudCBtdXN0IGJlIGEgc3RyaW5nIik6bmV3IEVycm9yKGAke2V9IGlzIG5vdCBFbWl0dGVyeSBtZXRob2RgKTtyZXR1cm4gcn1jb25zdCBGdD1yPT5yPT09SGV8fHI9PT1ZZTtjbGFzcyBmZXtzdGF0aWMgbWl4aW4oZSx0KXtyZXR1cm4gdD1Qcih0KSxuPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBmdW5jdGlvbiIpO2Zvcihjb25zdCBzIG9mIHQpaWYobi5wcm90b3R5cGVbc10hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke3N9XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO2Z1bmN0aW9uIGkoKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7ZW51bWVyYWJsZTohMSx2YWx1ZTpuZXcgZmV9KSx0aGlzW2VdfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxlLHtlbnVtZXJhYmxlOiExLGdldDppfSk7Y29uc3Qgbz1zPT5mdW5jdGlvbiguLi5hKXtyZXR1cm4gdGhpc1tlXVtzXSguLi5hKX07Zm9yKGNvbnN0IHMgb2YgdClPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUscyx7ZW51bWVyYWJsZTohMSx2YWx1ZTpvKHMpfSk7cmV0dXJuIG59fXN0YXRpYyBnZXQgaXNEZWJ1Z0VuYWJsZWQoKXtpZih0eXBlb2YgcHJvY2VzcyE9Im9iamVjdCIpcmV0dXJuIEl0O2NvbnN0e2VudjplfT1wcm9jZXNzfHx7ZW52Ont9fTtyZXR1cm4gZS5ERUJVRz09PSJlbWl0dGVyeSJ8fGUuREVCVUc9PT0iKiJ8fEl0fXN0YXRpYyBzZXQgaXNEZWJ1Z0VuYWJsZWQoZSl7SXQ9ZX1jb25zdHJ1Y3RvcihlPXt9KXtlZS5zZXQodGhpcyxuZXcgU2V0KSxWZS5zZXQodGhpcyxuZXcgTWFwKSxSZS5zZXQodGhpcyxuZXcgTWFwKSx0aGlzLmRlYnVnPWUuZGVidWd8fHt9LHRoaXMuZGVidWcuZW5hYmxlZD09PXZvaWQgMCYmKHRoaXMuZGVidWcuZW5hYmxlZD0hMSksdGhpcy5kZWJ1Zy5sb2dnZXJ8fCh0aGlzLmRlYnVnLmxvZ2dlcj0odCxuLGksbyk9Pnt0cnl7bz1KU09OLnN0cmluZ2lmeShvKX1jYXRjaHtvPWBPYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIGtleXMgZmFpbGVkIHRvIHN0cmluZ2lmeTogJHtPYmplY3Qua2V5cyhvKS5qb2luKCIsIil9YH10eXBlb2YgaT09InN5bWJvbCImJihpPWkudG9TdHJpbmcoKSk7Y29uc3Qgcz1uZXcgRGF0ZSxhPWAke3MuZ2V0SG91cnMoKX06JHtzLmdldE1pbnV0ZXMoKX06JHtzLmdldFNlY29uZHMoKX0uJHtzLmdldE1pbGxpc2Vjb25kcygpfWA7Y29uc29sZS5sb2coYFske2F9XVtlbWl0dGVyeToke3R9XVske259XSBFdmVudCBOYW1lOiAke2l9CglkYXRhOiAke299YCl9KX1sb2dJZkRlYnVnRW5hYmxlZChlLHQsbil7KGZlLmlzRGVidWdFbmFibGVkfHx0aGlzLmRlYnVnLmVuYWJsZWQpJiZ0aGlzLmRlYnVnLmxvZ2dlcihlLHRoaXMuZGVidWcubmFtZSx0LG4pfW9uKGUsdCl7amUodCksZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCBuIG9mIGUpYmUobiksdmUodGhpcyxuKS5hZGQodCksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlIixuLHZvaWQgMCksRnQobil8fHRoaXMuZW1pdChIZSx7ZXZlbnROYW1lOm4sbGlzdGVuZXI6dH0pO3JldHVybiB0aGlzLm9mZi5iaW5kKHRoaXMsZSx0KX1vZmYoZSx0KXtqZSh0KSxlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IG4gb2YgZSliZShuKSx2ZSh0aGlzLG4pLmRlbGV0ZSh0KSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJ1bnN1YnNjcmliZSIsbix2b2lkIDApLEZ0KG4pfHx0aGlzLmVtaXQoWWUse2V2ZW50TmFtZTpuLGxpc3RlbmVyOnR9KX1vbmNlKGUpe3JldHVybiBuZXcgUHJvbWlzZSh0PT57Y29uc3Qgbj10aGlzLm9uKGUsaT0+e24oKSx0KGkpfSl9KX1ldmVudHMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpYmUodCk7cmV0dXJuIEZyKHRoaXMsZSl9YXN5bmMgZW1pdChlLHQpe2JlKGUpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoImVtaXQiLGUsdCksQWkodGhpcyxlLHQpO2NvbnN0IG49dmUodGhpcyxlKSxpPWVlLmdldCh0aGlzKSxvPVsuLi5uXSxzPUZ0KGUpP1tdOlsuLi5pXTthd2FpdCBJcixhd2FpdCBQcm9taXNlLmFsbChbLi4uby5tYXAoYXN5bmMgYT0+e2lmKG4uaGFzKGEpKXJldHVybiBhKHQpfSksLi4ucy5tYXAoYXN5bmMgYT0+e2lmKGkuaGFzKGEpKXJldHVybiBhKGUsdCl9KV0pfWFzeW5jIGVtaXRTZXJpYWwoZSx0KXtiZShlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJlbWl0U2VyaWFsIixlLHQpO2NvbnN0IG49dmUodGhpcyxlKSxpPWVlLmdldCh0aGlzKSxvPVsuLi5uXSxzPVsuLi5pXTthd2FpdCBJcjtmb3IoY29uc3QgYSBvZiBvKW4uaGFzKGEpJiZhd2FpdCBhKHQpO2Zvcihjb25zdCBhIG9mIHMpaS5oYXMoYSkmJmF3YWl0IGEoZSx0KX1vbkFueShlKXtyZXR1cm4gamUoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlQW55Iix2b2lkIDAsdm9pZCAwKSxlZS5nZXQodGhpcykuYWRkKGUpLHRoaXMuZW1pdChIZSx7bGlzdGVuZXI6ZX0pLHRoaXMub2ZmQW55LmJpbmQodGhpcyxlKX1hbnlFdmVudCgpe3JldHVybiBGcih0aGlzKX1vZmZBbnkoZSl7amUoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLHRoaXMuZW1pdChZZSx7bGlzdGVuZXI6ZX0pLGVlLmdldCh0aGlzKS5kZWxldGUoZSl9Y2xlYXJMaXN0ZW5lcnMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpaWYodGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiY2xlYXIiLHQsdm9pZCAwKSx0eXBlb2YgdD09InN0cmluZyJ8fHR5cGVvZiB0PT0ic3ltYm9sIil7dmUodGhpcyx0KS5jbGVhcigpO2NvbnN0IG49SWUodGhpcyx0KTtmb3IoY29uc3QgaSBvZiBuKWkuZmluaXNoKCk7bi5jbGVhcigpfWVsc2V7ZWUuZ2V0KHRoaXMpLmNsZWFyKCk7Zm9yKGNvbnN0IG4gb2YgVmUuZ2V0KHRoaXMpLnZhbHVlcygpKW4uY2xlYXIoKTtmb3IoY29uc3QgbiBvZiBSZS5nZXQodGhpcykudmFsdWVzKCkpe2Zvcihjb25zdCBpIG9mIG4paS5maW5pc2goKTtuLmNsZWFyKCl9fX1saXN0ZW5lckNvdW50KGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtsZXQgdD0wO2Zvcihjb25zdCBuIG9mIGUpe2lmKHR5cGVvZiBuPT0ic3RyaW5nIil7dCs9ZWUuZ2V0KHRoaXMpLnNpemUrdmUodGhpcyxuKS5zaXplK0llKHRoaXMsbikuc2l6ZStJZSh0aGlzKS5zaXplO2NvbnRpbnVlfXR5cGVvZiBuPCJ1IiYmYmUobiksdCs9ZWUuZ2V0KHRoaXMpLnNpemU7Zm9yKGNvbnN0IGkgb2YgVmUuZ2V0KHRoaXMpLnZhbHVlcygpKXQrPWkuc2l6ZTtmb3IoY29uc3QgaSBvZiBSZS5nZXQodGhpcykudmFsdWVzKCkpdCs9aS5zaXplfXJldHVybiB0fWJpbmRNZXRob2RzKGUsdCl7aWYodHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJgdGFyZ2V0YCBtdXN0IGJlIGFuIG9iamVjdCIpO3Q9UHIodCk7Zm9yKGNvbnN0IG4gb2YgdCl7aWYoZVtuXSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm9wZXJ0eSBcYCR7bn1cYCBhbHJlYWR5IGV4aXN0cyBvbiBcYHRhcmdldFxgYCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMSx2YWx1ZTp0aGlzW25dLmJpbmQodGhpcyl9KX19fWNvbnN0IERyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGZlLnByb3RvdHlwZSkuZmlsdGVyKHI9PnIhPT0iY29uc3RydWN0b3IiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZmUsImxpc3RlbmVyQWRkZWQiLHt2YWx1ZTpIZSx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmZSwibGlzdGVuZXJSZW1vdmVkIix7dmFsdWU6WWUsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KTt2YXIgUHQ9ZmU7ZnVuY3Rpb24gd2kocil7cmV0dXJuIHR5cGVvZiByPT0ib2JqZWN0IiYmciE9PW51bGwmJiJtZXNzYWdlImluIHImJnR5cGVvZiByLm1lc3NhZ2U9PSJzdHJpbmcifWZ1bmN0aW9uIFNpKHIpe2lmKHdpKHIpKXJldHVybiByO3RyeXtyZXR1cm4gbmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KHIpKX1jYXRjaHtyZXR1cm4gbmV3IEVycm9yKFN0cmluZyhyKSl9fWZ1bmN0aW9uIER0KHIpe3JldHVybiBTaShyKS5tZXNzYWdlfXZhciBSaT1PYmplY3QuZGVmaW5lUHJvcGVydHksSWk9KHIsZSx0KT0+ZSBpbiByP1JpKHIsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dH0pOnJbZV09dCxGaT0ocixlLHQpPT4oSWkocix0eXBlb2YgZSE9InN5bWJvbCI/ZSsiIjplLHQpLHQpO2NvbnN0IFBpPSJobGcudG9rYm94LmNvbS9wcm9kL2xvZ2dpbmcvdmNwX3dlYnJ0YyIsRGk9Imh0dHBzOi8vIixOaT0xZTQ7bGV0IFhlO2NvbnN0IE1pPW5ldyBVaW50OEFycmF5KDE2KTtmdW5jdGlvbiBVaSgpe2lmKCFYZSYmKFhlPXR5cGVvZiBjcnlwdG88InUiJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKSwhWGUpKXRocm93IG5ldyBFcnJvcigiY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQiKTtyZXR1cm4gWGUoTWkpfWNvbnN0IE09W107Zm9yKGxldCByPTA7cjwyNTY7KytyKU0ucHVzaCgocisyNTYpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7ZnVuY3Rpb24ga2kocixlPTApe3JldHVybihNW3JbZSswXV0rTVtyW2UrMV1dK01bcltlKzJdXStNW3JbZSszXV0rIi0iK01bcltlKzRdXStNW3JbZSs1XV0rIi0iK01bcltlKzZdXStNW3JbZSs3XV0rIi0iK01bcltlKzhdXStNW3JbZSs5XV0rIi0iK01bcltlKzEwXV0rTVtyW2UrMTFdXStNW3JbZSsxMl1dK01bcltlKzEzXV0rTVtyW2UrMTRdXStNW3JbZSsxNV1dKS50b0xvd2VyQ2FzZSgpfWNvbnN0IENpPXR5cGVvZiBjcnlwdG88InUiJiZjcnlwdG8ucmFuZG9tVVVJRCYmY3J5cHRvLnJhbmRvbVVVSUQuYmluZChjcnlwdG8pLE5yPXtyYW5kb21VVUlEOkNpfTtmdW5jdGlvbiBPaShyLGUsdCl7aWYoTnIucmFuZG9tVVVJRCYmIWUmJiFyKXJldHVybiBOci5yYW5kb21VVUlEKCk7cj1yfHx7fTtjb25zdCBuPXIucmFuZG9tfHwoci5ybmd8fFVpKSgpO2lmKG5bNl09bls2XSYxNXw2NCxuWzhdPW5bOF0mNjN8MTI4LGUpe3Q9dHx8MDtmb3IobGV0IGk9MDtpPDE2OysraSllW3QraV09bltpXTtyZXR1cm4gZX1yZXR1cm4ga2kobil9ZnVuY3Rpb24gTnQocixlKXtyZXR1cm4gZ2xvYmFsVGhpc1tyXXx8KGdsb2JhbFRoaXNbcl09ZSksZ2xvYmFsVGhpc1tyXX1jb25zdCB0ZT1OdCgiZ2xvYmFscyIse30pO3ZhciBsZT0ocj0+KHIuSU5JVD0iSU5JVCIsci5GT1JXQVJEPSJGT1JXQVJEIixyLlRFUk1JTkFURT0iVEVSTUlOQVRFIixyLkdMT0JBTFNfU1lOQz0iR0xPQkFMU19TWU5DIixyKSkobGV8fHt9KTtmdW5jdGlvbiBNcihyKXtyZXR1cm5bSW1hZ2VCaXRtYXAsUmVhZGFibGVTdHJlYW0sV3JpdGFibGVTdHJlYW1dLnNvbWUoZT0+ciBpbnN0YW5jZW9mIGUpfWxldCBCaT0wO2Z1bmN0aW9uIExpKHIsZSx0LG4saSl7Y29uc3Qgbz1CaSsrO3JldHVybiByLnBvc3RNZXNzYWdlKHtpZDpvLHR5cGU6ZSxmdW5jdGlvbk5hbWU6dCxhcmdzOm59LG4uZmlsdGVyKHM9Pk1yKHMpKSksbmV3IFByb21pc2Uocz0+e2k9PW51bGx8fGkuc2V0KG8scyl9KX1mdW5jdGlvbiBGZShyLGUpe2NvbnN0e2lkOnQsdHlwZTpufT1yLGk9QXJyYXkuaXNBcnJheShlKT9lOltlXTtwb3N0TWVzc2FnZSh7aWQ6dCx0eXBlOm4scmVzdWx0OmV9LGkuZmlsdGVyKG89Pk1yKG8pKSl9Y29uc3QgVXI9TnQoIndvcmtlcml6ZWQiLHt9KTtmdW5jdGlvbiBrcigpe3JldHVybiB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGV9YXN5bmMgZnVuY3Rpb24gR2koKXtpZihrcigpKUZlKHt0eXBlOmxlLkdMT0JBTFNfU1lOQ30sdGUpO2Vsc2V7Y29uc3Qgcj1bXTtmb3IoY29uc3QgZSBpbiBVcil7Y29uc3R7d29ya2VyOnQscmVzb2x2ZXJzOm59PVVyW2VdLndvcmtlckNvbnRleHQ7dCYmci5wdXNoKExpKHQsbGUuR0xPQkFMU19TWU5DLCIiLFt0ZV0sbikpfWF3YWl0IFByb21pc2UuYWxsKHIpfX1mdW5jdGlvbiBRZShyLGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpZS5zcGxpY2UoMCxlLmxlbmd0aCk7ZWxzZSBpZih0eXBlb2YgZT09Im9iamVjdCIpZm9yKGNvbnN0IHQgaW4gZSlkZWxldGUgZVt0XTtmb3IoY29uc3QgdCBpbiByKUFycmF5LmlzQXJyYXkoclt0XSk/KGVbdF09W10sUWUoclt0XSxlW3RdKSk6dHlwZW9mIHJbdF09PSJvYmplY3QiPyhlW3RdPXt9LFFlKHJbdF0sZVt0XSkpOmVbdF09clt0XX1hc3luYyBmdW5jdGlvbiAkaShyLGUpe2NvbnN0e2Z1bmN0aW9uTmFtZTp0LGFyZ3M6bn09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2lmKCF0KXRocm93Im1pc3NpbmcgZnVuY3Rpb24gbmFtZSB0byBjYWxsIjtpZighZS5pbnN0YW5jZVt0XSl0aHJvd2B1bmRlZmluZWQgZnVuY3Rpb24gWyR7dH1dIGluIGNsYXNzICR7ZS5pbnN0YW5jZS5jb25zdHJ1Y3Rvci53b3JrZXJJZH1gO0ZlKHIsYXdhaXQgZS5pbnN0YW5jZVt0XSguLi5uIT1udWxsP246W10pKX1jb25zdCB6aT1OdCgicmVnaXN0ZXJlZFdvcmtlcnMiLHt9KTtmdW5jdGlvbiBXaShyLGUpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBjbGFzc05hbWUgd2hpbGUgaW5pdGlhbGl6aW5nIHdvcmtlciI7Y29uc3RbdCxuXT1yLmFyZ3MsaT16aVt0XTtpZihpKWUuaW5zdGFuY2U9bmV3IGkoci5hcmdzLnNsaWNlKDEpKTtlbHNlIHRocm93YHVua25vd24gd29ya2VyIGNsYXNzICR7dH1gO1FlKG4sdGUpLEZlKHIsdHlwZW9mIGUuaW5zdGFuY2UhPT12b2lkIDApfWFzeW5jIGZ1bmN0aW9uIFZpKHIsZSl7Y29uc3R7YXJnczp0fT1yO2lmKCFlLmluc3RhbmNlKXRocm93Imluc3RhbmNlIG5vdCBpbml0aWFsaXplZCI7bGV0IG47ZS5pbnN0YW5jZS50ZXJtaW5hdGUmJihuPWF3YWl0IGUuaW5zdGFuY2UudGVybWluYXRlKC4uLnQhPW51bGw/dDpbXSkpLEZlKHIsbil9ZnVuY3Rpb24gSGkocil7aWYoIXIuYXJncyl0aHJvdyJNaXNzaW5nIGdsb2JhbHMgd2hpbGUgc3luY2luZyI7UWUoci5hcmdzWzBdLHRlKSxGZShyLHt9KX1mdW5jdGlvbiBZaSgpe2NvbnN0IHI9e307b25tZXNzYWdlPWFzeW5jIGU9Pntjb25zdCB0PWUuZGF0YTtzd2l0Y2godC50eXBlKXtjYXNlIGxlLklOSVQ6V2kodCxyKTticmVhaztjYXNlIGxlLkZPUldBUkQ6JGkodCxyKTticmVhaztjYXNlIGxlLlRFUk1JTkFURTpWaSh0LHIpO2JyZWFrO2Nhc2UgbGUuR0xPQkFMU19TWU5DOkhpKHQpO2JyZWFrfX19a3IoKSYmWWkoKTtmdW5jdGlvbiBqaShyLGUpe3JldHVybiB0ZVtyXXx8KHRlW3JdPWUpLFsoKT0+dGVbcl0sYXN5bmMgdD0+e3RlW3JdPXQsYXdhaXQgR2koKX1dfWZ1bmN0aW9uIFhpKHIsZSl7cmV0dXJuIGppKHIsZSl9Y29uc3RbUWksS2ldPVhpKCJtZXRhZGF0YSIpO2Z1bmN0aW9uIHFpKHIpe0tpKHIpfWZ1bmN0aW9uIE10KCl7cmV0dXJuIFFpKCl9Y2xhc3MgVXR7Y29uc3RydWN0b3IoZSl7RmkodGhpcywidXVpZCIsT2koKSksdGhpcy5jb25maWc9ZX1hc3luYyBzZW5kKGUpe3ZhciB0LG4saTtjb25zdHthcHBJZDpvLHNvdXJjZVR5cGU6c309KHQ9TXQoKSkhPW51bGw/dDp7fTtpZighb3x8IXMpcmV0dXJuIm1ldGFkYXRhIG1pc3NpbmciO2NvbnN0IGE9bmV3IEFib3J0Q29udHJvbGxlcix1PXNldFRpbWVvdXQoKCk9PmEuYWJvcnQoKSxOaSk7cmV0dXJuIGF3YWl0KChpPShuPXRoaXMuY29uZmlnKT09bnVsbD92b2lkIDA6bi5mZXRjaCkhPW51bGw/aTpmZXRjaCkodGhpcy5nZXRVcmwoKSx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnRoaXMuZ2V0SGVhZGVycygpLGJvZHk6SlNPTi5zdHJpbmdpZnkodGhpcy5idWlsZFJlcG9ydChlKSksc2lnbmFsOmEuc2lnbmFsfSksY2xlYXJUaW1lb3V0KHUpLCJzdWNjZXNzIn1nZXRVcmwoKXt2YXIgZTtsZXQgdD0oZT1NdCgpLnByb3h5VXJsKSE9bnVsbD9lOkRpO3JldHVybiB0Kz0odC5hdCgtMSk9PT0iLyI/IiI6Ii8iKStQaSx0fWdldEhlYWRlcnMoKXtyZXR1cm57IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifX1idWlsZFJlcG9ydChlKXtjb25zdCB0PU10KCk7cmV0dXJue2d1aWQ6dGhpcy51dWlkLC4uLmUsYXBwbGljYXRpb25JZDp0LmFwcElkLHRpbWVzdGFtcDpEYXRlLm5vdygpLHByb3h5VXJsOnQucHJveHlVcmwsc291cmNlOnQuc291cmNlVHlwZX19fWNvbnN0IEtlPSIyLjAuMiI7Y2xhc3MgSml7Y29uc3RydWN0b3IoZSl7QSh0aGlzLCJmcmFtZVRyYW5zZm9ybWVkQ291bnQiLDApLEEodGhpcywiZnJhbWVGcm9tU291cmNlQ291bnQiLDApLEEodGhpcywic3RhcnRBdCIsMCksQSh0aGlzLCJyZXBvcnRlciIpLHRoaXMuY29uZmlnPWUsdGhpcy5yZXBvcnRlcj1uZXcgVXQoZSl9YXN5bmMgb25GcmFtZUZyb21Tb3VyY2UoKXt0aGlzLmZyYW1lRnJvbVNvdXJjZUNvdW50Kyt9Z2V0IGZwcygpe2NvbnN0e3N0YXJ0QXQ6ZSxmcmFtZUZyb21Tb3VyY2VDb3VudDp0fT10aGlzLG49KERhdGUubm93KCktZSkvMWUzO3JldHVybiB0L259YXN5bmMgb25GcmFtZVRyYW5zZm9ybWVkKGU9e30sdD0hMSl7dGhpcy5zdGFydEF0PT09MCYmKHRoaXMuc3RhcnRBdD1EYXRlLm5vdygpKSx0aGlzLmZyYW1lVHJhbnNmb3JtZWRDb3VudCsrO2NvbnN0e3N0YXJ0QXQ6bixmcmFtZVRyYW5zZm9ybWVkQ291bnQ6aSxmcmFtZUZyb21Tb3VyY2VDb3VudDpvfT10aGlzLHM9RGF0ZS5ub3coKSxhPShzLW4pLzFlMyx1PWkvYSxmPW8vYTtyZXR1cm4gdHx8dGhpcy5mcmFtZVRyYW5zZm9ybWVkQ291bnQ+PXRoaXMuY29uZmlnLmxvZ2dpbmdJbnRlcnZhbEZyYW1lQ291bnQ/KHRoaXMuZnJhbWVGcm9tU291cmNlQ291bnQ9MCx0aGlzLmZyYW1lVHJhbnNmb3JtZWRDb3VudD0wLHRoaXMuc3RhcnRBdD1zLHRoaXMucmVwb3J0ZXIuY29uZmlnPXRoaXMuY29uZmlnLHRoaXMucmVwb3J0ZXIuc2VuZCh7Li4udGhpcy5jb25maWcucmVwb3J0LHZhcmlhdGlvbjoiUW9TIixmcHM6Zix0cmFuc2Zvcm1lZEZwczp1LGZyYW1lc1RyYW5zZm9ybWVkOmksLi4uZX0pKToic3VjY2VzcyJ9fXZhciBrdD0ocj0+KHIucGlwZWxpbmVfZW5kZWQ9InBpcGVsaW5lX2VuZGVkIixyLnBpcGVsaW5lX2VuZGVkX3dpdGhfZXJyb3I9InBpcGVsaW5lX2VuZGVkX3dpdGhfZXJyb3IiLHIucGlwZWxpbmVfc3RhcnRlZD0icGlwZWxpbmVfc3RhcnRlZCIsci5waXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3I9InBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvciIsci5waXBlbGluZV9yZXN0YXJ0ZWQ9InBpcGVsaW5lX3Jlc3RhcnRlZCIsci5waXBlbGluZV9yZXN0YXJ0ZWRfd2l0aF9lcnJvcj0icGlwZWxpbmVfcmVzdGFydGVkX3dpdGhfZXJyb3IiLHIpKShrdHx8e30pO2NvbnN0IFppPTUwMCxlbz0uODtjbGFzcyB0byBleHRlbmRzIFB0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKSxBKHRoaXMsInJlcG9ydGVyXyIsbmV3IFV0KSxBKHRoaXMsInJlcG9ydGVyUW9zXyIsbmV3IEppKHtsb2dnaW5nSW50ZXJ2YWxGcmFtZUNvdW50OlppLHJlcG9ydDp7dmVyc2lvbjpLZX19KSksQSh0aGlzLCJ0cmFuc2Zvcm1lclR5cGVfIiksQSh0aGlzLCJ0cmFuc2Zvcm1lcl8iKSxBKHRoaXMsInNob3VsZFN0b3BfIiksQSh0aGlzLCJpc0ZsYXNoZWRfIiksQSh0aGlzLCJtZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfIiksQSh0aGlzLCJ2aWRlb0hlaWdodF8iKSxBKHRoaXMsInZpZGVvV2lkdGhfIiksQSh0aGlzLCJ0cmFja0V4cGVjdGVkUmF0ZV8iKSxBKHRoaXMsImluZGV4XyIpLEEodGhpcywiY29udHJvbGxlcl8iKSx0aGlzLmluZGV4Xz10LHRoaXMudHJhbnNmb3JtZXJfPWUsdGhpcy5zaG91bGRTdG9wXz0hMSx0aGlzLmlzRmxhc2hlZF89ITEsdGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfPTAsdGhpcy52aWRlb0hlaWdodF89MCx0aGlzLnZpZGVvV2lkdGhfPTAsdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTEsdGhpcy50cmFuc2Zvcm1lclR5cGVfPSJDdXN0b20iLCJnZXRUcmFuc2Zvcm1lclR5cGUiaW4gZSYmKHRoaXMudHJhbnNmb3JtZXJUeXBlXz1lLmdldFRyYW5zZm9ybWVyVHlwZSgpKSx0aGlzLnJlcG9ydCh7dmFyaWF0aW9uOiJDcmVhdGUifSl9c2V0VHJhY2tFeHBlY3RlZFJhdGUoZSl7dGhpcy50cmFja0V4cGVjdGVkUmF0ZV89ZX1hc3luYyBzdGFydChlKXtpZih0aGlzLmNvbnRyb2xsZXJfPWUsdGhpcy50cmFuc2Zvcm1lcl8mJnR5cGVvZiB0aGlzLnRyYW5zZm9ybWVyXy5zdGFydD09ImZ1bmN0aW9uIil0cnl7YXdhaXQgdGhpcy50cmFuc2Zvcm1lcl8uc3RhcnQoZSl9Y2F0Y2godCl7dGhpcy5yZXBvcnQoe21lc3NhZ2U6Si5lcnJvcnMudHJhbnNmb3JtZXJfc3RhcnQsdmFyaWF0aW9uOiJFcnJvciIsZXJyb3I6RHQodCl9KTtjb25zdCBuPXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjp0LGZ1bmN0aW9uOiJzdGFydCJ9O3RoaXMuZW1pdCgiZXJyb3IiLG4pfX1hc3luYyB0cmFuc2Zvcm0oZSx0KXt2YXIgbixpLG8scztpZih0aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnRTdGFydFRpbWVzdGFtcF89PT0wJiYodGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfPURhdGUubm93KCkpLGUgaW5zdGFuY2VvZiBWaWRlb0ZyYW1lJiYodGhpcy52aWRlb0hlaWdodF89KG49ZT09bnVsbD92b2lkIDA6ZS5kaXNwbGF5SGVpZ2h0KSE9bnVsbD9uOjAsdGhpcy52aWRlb1dpZHRoXz0oaT1lPT1udWxsP3ZvaWQgMDplLmRpc3BsYXlXaWR0aCkhPW51bGw/aTowKSx0aGlzLnJlcG9ydGVyUW9zXy5vbkZyYW1lRnJvbVNvdXJjZSgpLHRoaXMudHJhbnNmb3JtZXJfKWlmKHRoaXMuc2hvdWxkU3RvcF8pY29uc29sZS53YXJuKCJbUGlwZWxpbmVdIGZsdXNoIGZyb20gdHJhbnNmb3JtIiksZS5jbG9zZSgpLHRoaXMuZmx1c2godCksdC50ZXJtaW5hdGUoKTtlbHNle3RyeXthd2FpdCgocz0obz10aGlzLnRyYW5zZm9ybWVyXykudHJhbnNmb3JtKT09bnVsbD92b2lkIDA6cy5jYWxsKG8sZSx0KSksdGhpcy5yZXBvcnRRb3MoKX1jYXRjaChhKXt0aGlzLnJlcG9ydCh7bWVzc2FnZTpKLmVycm9ycy50cmFuc2Zvcm1lcl90cmFuc2Zvcm0sdmFyaWF0aW9uOiJFcnJvciIsZXJyb3I6RHQoYSl9KTtjb25zdCB1PXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjphLGZ1bmN0aW9uOiJ0cmFuc2Zvcm0ifTt0aGlzLmVtaXQoImVycm9yIix1KX1pZih0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyE9LTEmJnRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKmVvPnRoaXMucmVwb3J0ZXJRb3NfLmZwcyl7Y29uc3QgYT17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sd2FybmluZ1R5cGU6ImZwc19kcm9wIixkcm9wSW5mbzp7cmVxdWVzdGVkOnRoaXMudHJhY2tFeHBlY3RlZFJhdGVfLGN1cnJlbnQ6dGhpcy5yZXBvcnRlclFvc18uZnBzfX07dGhpcy5lbWl0KCJ3YXJuIixhKX19fWFzeW5jIGZsdXNoKGUpe2lmKHRoaXMudHJhbnNmb3JtZXJfJiZ0eXBlb2YgdGhpcy50cmFuc2Zvcm1lcl8uZmx1c2g9PSJmdW5jdGlvbiImJiF0aGlzLmlzRmxhc2hlZF8pe3RoaXMuaXNGbGFzaGVkXz0hMDt0cnl7YXdhaXQgdGhpcy50cmFuc2Zvcm1lcl8uZmx1c2goZSl9Y2F0Y2godCl7dGhpcy5yZXBvcnQoe21lc3NhZ2U6Si5lcnJvcnMudHJhbnNmb3JtZXJfZmx1c2gsdmFyaWF0aW9uOiJFcnJvciIsZXJyb3I6RHQodCl9KTtjb25zdCBuPXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjp0LGZ1bmN0aW9uOiJmbHVzaCJ9O3RoaXMuZW1pdCgiZXJyb3IiLG4pfX10aGlzLnJlcG9ydFFvcyghMCksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiRGVsZXRlIn0pfXN0b3AoKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTdG9wIHN0cmVhbS4iKSx0aGlzLmNvbnRyb2xsZXJfJiYodGhpcy5mbHVzaCh0aGlzLmNvbnRyb2xsZXJfKSx0aGlzLmNvbnRyb2xsZXJfLnRlcm1pbmF0ZSgpKSx0aGlzLnNob3VsZFN0b3BfPSEwfXJlcG9ydChlKXt0aGlzLnJlcG9ydGVyXy5zZW5kKHt2ZXJzaW9uOktlLGFjdGlvbjoiTWVkaWFUcmFuc2Zvcm1lciIsdHJhbnNmb3JtZXJUeXBlOnRoaXMudHJhbnNmb3JtZXJUeXBlXywuLi5lfSl9cmVwb3J0UW9zKGU9ITEpe3RoaXMucmVwb3J0ZXJRb3NfLmNvbmZpZz17Li4udGhpcy5yZXBvcnRlclFvc18uY29uZmlnfSx0aGlzLnJlcG9ydGVyUW9zXy5vbkZyYW1lVHJhbnNmb3JtZWQoe3ZlcnNpb246S2UsYWN0aW9uOiJNZWRpYVRyYW5zZm9ybWVyIix0cmFuc2Zvcm1lclR5cGU6dGhpcy50cmFuc2Zvcm1lclR5cGVfLHZpZGVvV2lkdGg6dGhpcy52aWRlb1dpZHRoXyx2aWRlb0hlaWdodDp0aGlzLnZpZGVvSGVpZ2h0X30sZSl9fWNsYXNzIHJvIGV4dGVuZHMgUHR7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSxBKHRoaXMsInRyYW5zZm9ybWVyc18iKSxBKHRoaXMsInRyYWNrRXhwZWN0ZWRSYXRlXyIpLHRoaXMudHJhbnNmb3JtZXJzXz1bXSx0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz0tMTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IG49bmV3IHRvKGVbdF0sdCk7bi5vbigiZXJyb3IiLGk9Pnt0aGlzLmVtaXQoImVycm9yIixpKX0pLG4ub24oIndhcm4iLGk9Pnt0aGlzLmVtaXQoIndhcm4iLGkpfSksdGhpcy50cmFuc2Zvcm1lcnNfLnB1c2gobil9fXNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMudHJhY2tFeHBlY3RlZFJhdGVfPWU7Zm9yKGxldCB0IG9mIHRoaXMudHJhbnNmb3JtZXJzXyl0LnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKX1hc3luYyBzdGFydChlLHQpe2lmKCF0aGlzLnRyYW5zZm9ybWVyc198fHRoaXMudHJhbnNmb3JtZXJzXy5sZW5ndGg9PT0wKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBObyB0cmFuc2Zvcm1lcnMuIik7cmV0dXJufXRyeXtsZXQgbj1lO2ZvcihsZXQgaSBvZiB0aGlzLnRyYW5zZm9ybWVyc18pZT1lLnBpcGVUaHJvdWdoKG5ldyBUcmFuc2Zvcm1TdHJlYW0oaSkpO2UucGlwZVRvKHQpLnRoZW4oYXN5bmMoKT0+e2NvbnNvbGUubG9nKCJbUGlwZWxpbmVdIFNldHVwLiIpLGF3YWl0IHQuYWJvcnQoKSxhd2FpdCBuLmNhbmNlbCgpLHRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIiwicGlwZWxpbmVfZW5kZWQiKX0pLmNhdGNoKGFzeW5jIGk9PntlLmNhbmNlbCgpLnRoZW4oKCk9Pntjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTaHV0dGluZyBkb3duIHN0cmVhbXMgYWZ0ZXIgYWJvcnQuIil9KS5jYXRjaChvPT57Y29uc29sZS5lcnJvcigiW1BpcGVsaW5lXSBFcnJvciBmcm9tIHN0cmVhbSB0cmFuc2Zvcm06IixvKX0pLGF3YWl0IHQuYWJvcnQoaSksYXdhaXQgbi5jYW5jZWwoaSksdGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9lbmRlZF93aXRoX2Vycm9yIil9KX1jYXRjaHt0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvciIpLHRoaXMuZGVzdHJveSgpO3JldHVybn10aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX3N0YXJ0ZWQiKSxjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBQaXBlbGluZSBzdGFydGVkLiIpfWFzeW5jIGRlc3Ryb3koKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBEZXN0cm95aW5nIFBpcGVsaW5lLiIpO2ZvcihsZXQgZSBvZiB0aGlzLnRyYW5zZm9ybWVyc18pZS5zdG9wKCl9fWNsYXNzIG5vIGV4dGVuZHMgUHR7Y29uc3RydWN0b3IoKXtzdXBlcigpLEEodGhpcywicmVwb3J0ZXJfIiksQSh0aGlzLCJwaXBlbGluZV8iKSxBKHRoaXMsInRyYW5zZm9ybWVyc18iKSxBKHRoaXMsInJlYWRhYmxlXyIpLEEodGhpcywid3JpdGFibGVfIiksQSh0aGlzLCJ0cmFja0V4cGVjdGVkUmF0ZV8iKSx0aGlzLnJlcG9ydGVyXz1uZXcgVXQsdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTEsdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiQ3JlYXRlIn0pfXNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMudHJhY2tFeHBlY3RlZFJhdGVfPWUsdGhpcy5waXBlbGluZV8mJnRoaXMucGlwZWxpbmVfLnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKX10cmFuc2Zvcm0oZSx0KXtyZXR1cm4gdGhpcy5yZWFkYWJsZV89ZSx0aGlzLndyaXRhYmxlXz10LHRoaXMudHJhbnNmb3JtSW50ZXJuYWwoKX10cmFuc2Zvcm1JbnRlcm5hbCgpe3JldHVybiBuZXcgUHJvbWlzZShhc3luYyhlLHQpPT57aWYoIXRoaXMudHJhbnNmb3JtZXJzX3x8dGhpcy50cmFuc2Zvcm1lcnNfLmxlbmd0aD09PTApe3RoaXMucmVwb3J0KHttZXNzYWdlOkouZXJyb3JzLnRyYW5zZm9ybWVyX25vbmUsdmFyaWF0aW9uOiJFcnJvciJ9KSx0KCJbTWVkaWFQcm9jZXNzb3JdIE5lZWQgdG8gc2V0IHRyYW5zZm9ybWVycy4iKTtyZXR1cm59aWYoIXRoaXMucmVhZGFibGVfKXt0aGlzLnJlcG9ydCh7dmFyaWF0aW9uOiJFcnJvciIsbWVzc2FnZTpKLmVycm9ycy5yZWFkYWJsZV9udWxsfSksdCgiW01lZGlhUHJvY2Vzc29yXSBSZWFkYWJsZSBpcyBudWxsLiIpO3JldHVybn1pZighdGhpcy53cml0YWJsZV8pe3RoaXMucmVwb3J0KHt2YXJpYXRpb246IkVycm9yIixtZXNzYWdlOkouZXJyb3JzLndyaXRhYmxlX251bGx9KSx0KCJbTWVkaWFQcm9jZXNzb3JdIFdyaXRhYmxlIGlzIG51bGwuIik7cmV0dXJufWxldCBuPSExO3RoaXMucGlwZWxpbmVfJiYobj0hMCx0aGlzLnBpcGVsaW5lXy5jbGVhckxpc3RlbmVycygpLHRoaXMucGlwZWxpbmVfLmRlc3Ryb3koKSksdGhpcy5waXBlbGluZV89bmV3IHJvKHRoaXMudHJhbnNmb3JtZXJzXyksdGhpcy5waXBlbGluZV8ub24oIndhcm4iLGk9Pnt0aGlzLmVtaXQoIndhcm4iLGkpfSksdGhpcy5waXBlbGluZV8ub24oImVycm9yIixpPT57dGhpcy5lbWl0KCJlcnJvciIsaSl9KSx0aGlzLnBpcGVsaW5lXy5vbigicGlwZWxpbmVJbmZvIixpPT57biYmKGk9PT0icGlwZWxpbmVfc3RhcnRlZCI/aT1rdC5waXBlbGluZV9yZXN0YXJ0ZWQ6aT09PSJwaXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3IiJiYoaT1rdC5waXBlbGluZV9yZXN0YXJ0ZWRfd2l0aF9lcnJvcikpLHRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIixpKX0pLHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfIT0tMSYmdGhpcy5waXBlbGluZV8uc2V0VHJhY2tFeHBlY3RlZFJhdGUodGhpcy50cmFja0V4cGVjdGVkUmF0ZV8pLHRoaXMucGlwZWxpbmVfLnN0YXJ0KHRoaXMucmVhZGFibGVfLHRoaXMud3JpdGFibGVfKS50aGVuKCgpPT57ZSgpfSkuY2F0Y2goaT0+e3QoaSl9KX0pfXNldFRyYW5zZm9ybWVycyhlKXtyZXR1cm4gdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiVXBkYXRlIixtZXNzYWdlOkoudXBkYXRlcy50cmFuc2Zvcm1lcl9uZXd9KSx0aGlzLnRyYW5zZm9ybWVyc189ZSx0aGlzLnJlYWRhYmxlXyYmdGhpcy53cml0YWJsZV8/dGhpcy50cmFuc2Zvcm1JbnRlcm5hbCgpOlByb21pc2UucmVzb2x2ZSgpfWRlc3Ryb3koKXtyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgZT0+e3RoaXMucGlwZWxpbmVfJiZ0aGlzLnBpcGVsaW5lXy5kZXN0cm95KCksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiRGVsZXRlIn0pLGUoKX0pfXJlcG9ydChlKXt0aGlzLnJlcG9ydGVyXy5zZW5kKHt2ZXJzaW9uOktlLGFjdGlvbjoiTWVkaWFQcm9jZXNzb3IiLC4uLmV9KX19dmFyIGlvPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxvbz0ocixlLHQpPT5lIGluIHI/aW8ocixlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp0fSk6cltlXT10LHNvPShyLGUsdCk9PihvbyhyLHR5cGVvZiBlIT0ic3ltYm9sIj9lKyIiOmUsdCksdCk7Y29uc3QgYW89ImhsZy50b2tib3guY29tL3Byb2QvbG9nZ2luZy92Y3Bfd2VicnRjIix1bz0iaHR0cHM6Ly8iLGNvPTFlNDtsZXQgcWU7Y29uc3QgZm89bmV3IFVpbnQ4QXJyYXkoMTYpO2Z1bmN0aW9uIGxvKCl7aWYoIXFlJiYocWU9dHlwZW9mIGNyeXB0bzwidSImJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMmJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pLCFxZSkpdGhyb3cgbmV3IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCIpO3JldHVybiBxZShmbyl9Y29uc3QgVT1bXTtmb3IobGV0IHI9MDtyPDI1NjsrK3IpVS5wdXNoKChyKzI1NikudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtmdW5jdGlvbiBtbyhyLGU9MCl7cmV0dXJuKFVbcltlKzBdXStVW3JbZSsxXV0rVVtyW2UrMl1dK1VbcltlKzNdXSsiLSIrVVtyW2UrNF1dK1VbcltlKzVdXSsiLSIrVVtyW2UrNl1dK1VbcltlKzddXSsiLSIrVVtyW2UrOF1dK1VbcltlKzldXSsiLSIrVVtyW2UrMTBdXStVW3JbZSsxMV1dK1VbcltlKzEyXV0rVVtyW2UrMTNdXStVW3JbZSsxNF1dK1VbcltlKzE1XV0pLnRvTG93ZXJDYXNlKCl9Y29uc3QgaG89dHlwZW9mIGNyeXB0bzwidSImJmNyeXB0by5yYW5kb21VVUlEJiZjcnlwdG8ucmFuZG9tVVVJRC5iaW5kKGNyeXB0byksQ3I9e3JhbmRvbVVVSUQ6aG99O2Z1bmN0aW9uIHBvKHIsZSx0KXtpZihDci5yYW5kb21VVUlEJiYhZSYmIXIpcmV0dXJuIENyLnJhbmRvbVVVSUQoKTtyPXJ8fHt9O2NvbnN0IG49ci5yYW5kb218fChyLnJuZ3x8bG8pKCk7aWYobls2XT1uWzZdJjE1fDY0LG5bOF09bls4XSY2M3wxMjgsZSl7dD10fHwwO2ZvcihsZXQgaT0wO2k8MTY7KytpKWVbdCtpXT1uW2ldO3JldHVybiBlfXJldHVybiBtbyhuKX1mdW5jdGlvbiBDdChyLGUpe3JldHVybiBnbG9iYWxUaGlzW3JdfHwoZ2xvYmFsVGhpc1tyXT1lKSxnbG9iYWxUaGlzW3JdfWNvbnN0IHJlPUN0KCJnbG9iYWxzIix7fSk7dmFyIGRlPShyPT4oci5JTklUPSJJTklUIixyLkZPUldBUkQ9IkZPUldBUkQiLHIuVEVSTUlOQVRFPSJURVJNSU5BVEUiLHIuR0xPQkFMU19TWU5DPSJHTE9CQUxTX1NZTkMiLHIpKShkZXx8e30pO2Z1bmN0aW9uIE9yKHIpe3JldHVybltJbWFnZUJpdG1hcCxSZWFkYWJsZVN0cmVhbSxXcml0YWJsZVN0cmVhbV0uc29tZShlPT5yIGluc3RhbmNlb2YgZSl9bGV0IHlvPTA7ZnVuY3Rpb24gX28ocixlLHQsbixpKXtjb25zdCBvPXlvKys7cmV0dXJuIHIucG9zdE1lc3NhZ2Uoe2lkOm8sdHlwZTplLGZ1bmN0aW9uTmFtZTp0LGFyZ3M6bn0sbi5maWx0ZXIocz0+T3IocykpKSxuZXcgUHJvbWlzZShzPT57aT09bnVsbHx8aS5zZXQobyxzKX0pfWZ1bmN0aW9uIFBlKHIsZSl7Y29uc3R7aWQ6dCx0eXBlOm59PXIsaT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO3Bvc3RNZXNzYWdlKHtpZDp0LHR5cGU6bixyZXN1bHQ6ZX0saS5maWx0ZXIobz0+T3IobykpKX1jb25zdCBCcj1DdCgid29ya2VyaXplZCIse30pO2Z1bmN0aW9uIExyKCl7cmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZX1hc3luYyBmdW5jdGlvbiB4bygpe2lmKExyKCkpUGUoe3R5cGU6ZGUuR0xPQkFMU19TWU5DfSxyZSk7ZWxzZXtjb25zdCByPVtdO2Zvcihjb25zdCBlIGluIEJyKXtjb25zdHt3b3JrZXI6dCxyZXNvbHZlcnM6bn09QnJbZV0ud29ya2VyQ29udGV4dDt0JiZyLnB1c2goX28odCxkZS5HTE9CQUxTX1NZTkMsIiIsW3JlXSxuKSl9YXdhaXQgUHJvbWlzZS5hbGwocil9fWZ1bmN0aW9uIEplKHIsZSl7aWYoQXJyYXkuaXNBcnJheShlKSllLnNwbGljZSgwLGUubGVuZ3RoKTtlbHNlIGlmKHR5cGVvZiBlPT0ib2JqZWN0Iilmb3IoY29uc3QgdCBpbiBlKWRlbGV0ZSBlW3RdO2Zvcihjb25zdCB0IGluIHIpQXJyYXkuaXNBcnJheShyW3RdKT8oZVt0XT1bXSxKZShyW3RdLGVbdF0pKTp0eXBlb2Ygclt0XT09Im9iamVjdCI/KGVbdF09e30sSmUoclt0XSxlW3RdKSk6ZVt0XT1yW3RdfWFzeW5jIGZ1bmN0aW9uIGdvKHIsZSl7Y29uc3R7ZnVuY3Rpb25OYW1lOnQsYXJnczpufT1yO2lmKCFlLmluc3RhbmNlKXRocm93Imluc3RhbmNlIG5vdCBpbml0aWFsaXplZCI7aWYoIXQpdGhyb3cibWlzc2luZyBmdW5jdGlvbiBuYW1lIHRvIGNhbGwiO2lmKCFlLmluc3RhbmNlW3RdKXRocm93YHVuZGVmaW5lZCBmdW5jdGlvbiBbJHt0fV0gaW4gY2xhc3MgJHtlLmluc3RhbmNlLmNvbnN0cnVjdG9yLndvcmtlcklkfWA7UGUocixhd2FpdCBlLmluc3RhbmNlW3RdKC4uLm4hPW51bGw/bjpbXSkpfWNvbnN0IGJvPUN0KCJyZWdpc3RlcmVkV29ya2VycyIse30pO2Z1bmN0aW9uIHZvKHIsZSl7aWYoIXIuYXJncyl0aHJvdyJNaXNzaW5nIGNsYXNzTmFtZSB3aGlsZSBpbml0aWFsaXppbmcgd29ya2VyIjtjb25zdFt0LG5dPXIuYXJncyxpPWJvW3RdO2lmKGkpZS5pbnN0YW5jZT1uZXcgaShyLmFyZ3Muc2xpY2UoMSkpO2Vsc2UgdGhyb3dgdW5rbm93biB3b3JrZXIgY2xhc3MgJHt0fWA7SmUobixyZSksUGUocix0eXBlb2YgZS5pbnN0YW5jZSE9PXZvaWQgMCl9YXN5bmMgZnVuY3Rpb24gRW8ocixlKXtjb25zdHthcmdzOnR9PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtsZXQgbjtlLmluc3RhbmNlLnRlcm1pbmF0ZSYmKG49YXdhaXQgZS5pbnN0YW5jZS50ZXJtaW5hdGUoLi4udCE9bnVsbD90OltdKSksUGUocixuKX1mdW5jdGlvbiBUbyhyKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgZ2xvYmFscyB3aGlsZSBzeW5jaW5nIjtKZShyLmFyZ3NbMF0scmUpLFBlKHIse30pfWZ1bmN0aW9uIEFvKCl7Y29uc3Qgcj17fTtvbm1lc3NhZ2U9YXN5bmMgZT0+e2NvbnN0IHQ9ZS5kYXRhO3N3aXRjaCh0LnR5cGUpe2Nhc2UgZGUuSU5JVDp2byh0LHIpO2JyZWFrO2Nhc2UgZGUuRk9SV0FSRDpnbyh0LHIpO2JyZWFrO2Nhc2UgZGUuVEVSTUlOQVRFOkVvKHQscik7YnJlYWs7Y2FzZSBkZS5HTE9CQUxTX1NZTkM6VG8odCk7YnJlYWt9fX1McigpJiZBbygpO2Z1bmN0aW9uIHdvKHIsZSl7cmV0dXJuIHJlW3JdfHwocmVbcl09ZSksWygpPT5yZVtyXSxhc3luYyB0PT57cmVbcl09dCxhd2FpdCB4bygpfV19ZnVuY3Rpb24gU28ocixlKXtyZXR1cm4gd28ocixlKX1jb25zdFtSbyxzbF09U28oIm1ldGFkYXRhIik7ZnVuY3Rpb24gT3QoKXtyZXR1cm4gUm8oKX1jbGFzcyBJb3tjb25zdHJ1Y3RvcihlKXtzbyh0aGlzLCJ1dWlkIixwbygpKSx0aGlzLmNvbmZpZz1lfWFzeW5jIHNlbmQoZSl7dmFyIHQsbixpO2NvbnN0e2FwcElkOm8sc291cmNlVHlwZTpzfT0odD1PdCgpKSE9bnVsbD90Ont9O2lmKCFvfHwhcylyZXR1cm4ibWV0YWRhdGEgbWlzc2luZyI7Y29uc3QgYT1uZXcgQWJvcnRDb250cm9sbGVyLHU9c2V0VGltZW91dCgoKT0+YS5hYm9ydCgpLGNvKTtyZXR1cm4gYXdhaXQoKGk9KG49dGhpcy5jb25maWcpPT1udWxsP3ZvaWQgMDpuLmZldGNoKSE9bnVsbD9pOmZldGNoKSh0aGlzLmdldFVybCgpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6dGhpcy5nZXRIZWFkZXJzKCksYm9keTpKU09OLnN0cmluZ2lmeSh0aGlzLmJ1aWxkUmVwb3J0KGUpKSxzaWduYWw6YS5zaWduYWx9KSxjbGVhclRpbWVvdXQodSksInN1Y2Nlc3MifWdldFVybCgpe3ZhciBlO2xldCB0PShlPU90KCkucHJveHlVcmwpIT1udWxsP2U6dW87cmV0dXJuIHQrPSh0LmF0KC0xKT09PSIvIj8iIjoiLyIpK2FvLHR9Z2V0SGVhZGVycygpe3JldHVybnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9fWJ1aWxkUmVwb3J0KGUpe2NvbnN0IHQ9T3QoKTtyZXR1cm57Z3VpZDp0aGlzLnV1aWQsLi4uZSxhcHBsaWNhdGlvbklkOnQuYXBwSWQsdGltZXN0YW1wOkRhdGUubm93KCkscHJveHlVcmw6dC5wcm94eVVybCxzb3VyY2U6dC5zb3VyY2VUeXBlfX19Y29uc3QgRm89IjQuMy42Ijt2YXIgWmU9KHI9PihyLkxvdz0iTG93IixyLkhpZ2g9IkhpZ2giLHIpKShaZXx8e30pO2FzeW5jIGZ1bmN0aW9uIEdyKHIpe3JldHVybiBuZXcgUHJvbWlzZShlPT57c2V0VGltZW91dCgoKT0+e2UoKX0scil9KX1jbGFzcyBQb3tjb25zdHJ1Y3RvcihlKXtwKHRoaXMsImNvbnRleHQiKTtwKHRoaXMsImV4dGVuc2lvbiIpO3AodGhpcywicXVlcmllcyIsW10pO3AodGhpcywiYWN0aXZlUXVlcnkiKTt0aGlzLmNvbnRleHQ9ZSx0aGlzLmV4dGVuc2lvbj1lLmdldEV4dGVuc2lvbigiRVhUX2Rpc2pvaW50X3RpbWVyX3F1ZXJ5X3dlYmdsMiIpfXN0YXJ0KCl7fXN0b3AoKXt0aGlzLmFjdGl2ZVF1ZXJ5JiZ0aGlzLmNvbnRleHQuZW5kUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCl9cHVzaENvbnRleHQoZSl7dGhpcy5jcmVhdGVRdWVyeSgiUFVTSCIsZSl9cG9wQ29udGV4dChlKXt0aGlzLmNyZWF0ZVF1ZXJ5KCJQT1AiLGUpfWNyZWF0ZVF1ZXJ5KGUsdCl7dGhpcy5hY3RpdmVRdWVyeSYmdGhpcy5jb250ZXh0LmVuZFF1ZXJ5KHRoaXMuZXh0ZW5zaW9uLlRJTUVfRUxBUFNFRF9FWFQpLHRoaXMuYWN0aXZlUXVlcnk9dGhpcy5jb250ZXh0LmNyZWF0ZVF1ZXJ5KCksdGhpcy5jb250ZXh0LmJlZ2luUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCx0aGlzLmFjdGl2ZVF1ZXJ5KSx0aGlzLnF1ZXJpZXMucHVzaCh7bmFtZTp0LGFjdGlvbjplLHF1ZXJ5OnRoaXMuYWN0aXZlUXVlcnl9KX1hc3luYyBnZXRSZXNvbHZlZFF1ZXJpZXMoKXtjb25zdCBlPShhd2FpdCBQcm9taXNlLmFsbChbLi4udGhpcy5xdWVyaWVzXS5tYXAodD0+dGhpcy5yZXNvbHZlUXVlcnkodCkpKSkuZmlsdGVyKHQ9PnQpO2ZvcihsZXQgdD0xO3Q8ZS5sZW5ndGg7Kyt0KWVbdF0udGltZXN0YW1wKz1lW3QtMV0uZHVyYXRpb24rZVt0LTFdLnRpbWVzdGFtcDtyZXR1cm4gZX1hc3luYyByZXNvbHZlUXVlcnkoZSl7aWYoIWF3YWl0IHRoaXMuYXdhaXRRdWVyeUF2YWlsYWJsZShlKSl7Y29uc29sZS5sb2coIlVuYXdhaXRhYmxlIHF1ZXJ5IixlKTtyZXR1cm59aWYodGhpcy5jb250ZXh0LmdldFBhcmFtZXRlcih0aGlzLmV4dGVuc2lvbi5HUFVfRElTSk9JTlRfRVhUKSl7Y29uc29sZS5sb2coIkRpc2pvaW50ZWQgcXVlcnkiLGUpO3JldHVybn1yZXR1cm57Li4uZSxkdXJhdGlvbjp0aGlzLmNvbnRleHQuZ2V0UXVlcnlQYXJhbWV0ZXIoZS5xdWVyeSx0aGlzLmNvbnRleHQuUVVFUllfUkVTVUxUKSx0aW1lc3RhbXA6MH19YXN5bmMgYXdhaXRRdWVyeUF2YWlsYWJsZShlKXtmb3IobGV0IHQ9MDt0PDEwOysrdCl7aWYodGhpcy5jb250ZXh0LmdldFF1ZXJ5UGFyYW1ldGVyKGUucXVlcnksdGhpcy5jb250ZXh0LlFVRVJZX1JFU1VMVF9BVkFJTEFCTEUpKXJldHVybiBlO2F3YWl0IEdyKDIwMCl9fX0vKiBAbGljZW5zZSB0d2dsLmpzIDUuMy4wIENvcHlyaWdodCAoYykgMjAxNSwgR3JlZ2cgVGF2YXJlcyBBbGwgUmlnaHRzIFJlc2VydmVkLgpBdmFpbGFibGUgdmlhIHRoZSBNSVQgbGljZW5zZS4Kc2VlOiBodHRwOi8vZ2l0aHViLmNvbS9ncmVnZ21hbi90d2dsLmpzIGZvciBkZXRhaWxzICovY29uc3QgQnQ9NTEyMCxEZT01MTIxLEx0PTUxMjIsR3Q9NTEyMywkdD01MTI0LHp0PTUxMjUsV3Q9NTEyNixEbz0zMjgxOSxObz0zMjgyMCxNbz0zMzYzNSxVbz01MTMxLGtvPTMzNjQwLENvPTM1ODk5LE9vPTM1OTAyLEJvPTM2MjY5LExvPTM0MDQyLCRyPXt9O3tjb25zdCByPSRyO3JbQnRdPUludDhBcnJheSxyW0RlXT1VaW50OEFycmF5LHJbTHRdPUludDE2QXJyYXkscltHdF09VWludDE2QXJyYXksclskdF09SW50MzJBcnJheSxyW3p0XT1VaW50MzJBcnJheSxyW1d0XT1GbG9hdDMyQXJyYXkscltEb109VWludDE2QXJyYXkscltOb109VWludDE2QXJyYXkscltNb109VWludDE2QXJyYXkscltVb109VWludDE2QXJyYXkscltrb109VWludDMyQXJyYXkscltDb109VWludDMyQXJyYXkscltPb109VWludDMyQXJyYXkscltCb109VWludDMyQXJyYXkscltMb109VWludDMyQXJyYXl9ZnVuY3Rpb24gVnQocil7aWYociBpbnN0YW5jZW9mIEludDhBcnJheSlyZXR1cm4gQnQ7aWYociBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHIgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSlyZXR1cm4gRGU7aWYociBpbnN0YW5jZW9mIEludDE2QXJyYXkpcmV0dXJuIEx0O2lmKHIgaW5zdGFuY2VvZiBVaW50MTZBcnJheSlyZXR1cm4gR3Q7aWYociBpbnN0YW5jZW9mIEludDMyQXJyYXkpcmV0dXJuICR0O2lmKHIgaW5zdGFuY2VvZiBVaW50MzJBcnJheSlyZXR1cm4genQ7aWYociBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlyZXR1cm4gV3Q7dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlZCBhcnJheSB0eXBlIil9ZnVuY3Rpb24genIocil7aWYocj09PUludDhBcnJheSlyZXR1cm4gQnQ7aWYocj09PVVpbnQ4QXJyYXl8fHI9PT1VaW50OENsYW1wZWRBcnJheSlyZXR1cm4gRGU7aWYocj09PUludDE2QXJyYXkpcmV0dXJuIEx0O2lmKHI9PT1VaW50MTZBcnJheSlyZXR1cm4gR3Q7aWYocj09PUludDMyQXJyYXkpcmV0dXJuICR0O2lmKHI9PT1VaW50MzJBcnJheSlyZXR1cm4genQ7aWYocj09PUZsb2F0MzJBcnJheSlyZXR1cm4gV3Q7dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlZCBhcnJheSB0eXBlIil9ZnVuY3Rpb24gV3Iocil7Y29uc3QgZT0kcltyXTtpZighZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gZ2wgdHlwZSIpO3JldHVybiBlfWNvbnN0IGV0PXR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSI/ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuYnVmZmVyJiYoZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8ZS5idWZmZXIgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcil9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmJ1ZmZlciYmZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn07ZnVuY3Rpb24gVnIoLi4ucil7Y29uc29sZS5lcnJvciguLi5yKX1jb25zdCBIcj1uZXcgTWFwO2Z1bmN0aW9uIHR0KHIsZSl7aWYoIXJ8fHR5cGVvZiByIT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1Ici5nZXQoZSk7dHx8KHQ9bmV3IFdlYWtNYXAsSHIuc2V0KGUsdCkpO2xldCBuPXQuZ2V0KHIpO2lmKG49PT12b2lkIDApe2NvbnN0IGk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpO249aS5zdWJzdHJpbmcoOCxpLmxlbmd0aC0xKT09PWUsdC5zZXQocixuKX1yZXR1cm4gbn1mdW5jdGlvbiBHbyhyLGUpe3JldHVybiB0eXBlb2YgV2ViR0xCdWZmZXI8InUiJiZ0dChlLCJXZWJHTEJ1ZmZlciIpfWZ1bmN0aW9uICRvKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTFJlbmRlcmJ1ZmZlcjwidSImJnR0KGUsIldlYkdMUmVuZGVyYnVmZmVyIil9ZnVuY3Rpb24gSHQocixlKXtyZXR1cm4gdHlwZW9mIFdlYkdMVGV4dHVyZTwidSImJnR0KGUsIldlYkdMVGV4dHVyZSIpfWZ1bmN0aW9uIHpvKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTFNhbXBsZXI8InUiJiZ0dChlLCJXZWJHTFNhbXBsZXIiKX1jb25zdCBZcj0zNTA0NCxtZT0zNDk2MixXbz0zNDk2MyxWbz0zNDY2MCxIbz01MTIwLFlvPTUxMjEsam89NTEyMixYbz01MTIzLFFvPTUxMjQsS289NTEyNSxqcj01MTI2LFhyPXthdHRyaWJQcmVmaXg6IiJ9O2Z1bmN0aW9uIHFvKHIsZSx0LG4saSl7ci5iaW5kQnVmZmVyKGUsdCksci5idWZmZXJEYXRhKGUsbixpfHxZcil9ZnVuY3Rpb24gUXIocixlLHQsbil7aWYoR28ocixlKSlyZXR1cm4gZTt0PXR8fG1lO2NvbnN0IGk9ci5jcmVhdGVCdWZmZXIoKTtyZXR1cm4gcW8ocix0LGksZSxuKSxpfWZ1bmN0aW9uIEtyKHIpe3JldHVybiByPT09ImluZGljZXMifWZ1bmN0aW9uIEpvKHIpe3JldHVybiByPT09SW50OEFycmF5fHxyPT09VWludDhBcnJheX1mdW5jdGlvbiBabyhyKXtyZXR1cm4gci5sZW5ndGg/cjpyLmRhdGF9Y29uc3QgZXM9L2Nvb3JkfHRleHR1cmUvaSx0cz0vY29sb3J8Y29sb3VyL2k7ZnVuY3Rpb24gcnMocixlKXtsZXQgdDtpZihlcy50ZXN0KHIpP3Q9Mjp0cy50ZXN0KHIpP3Q9NDp0PTMsZSV0PjApdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGd1ZXNzIG51bUNvbXBvbmVudHMgZm9yIGF0dHJpYnV0ZSAnJHtyfScuIFRyaWVkICR7dH0gYnV0ICR7ZX0gdmFsdWVzIGlzIG5vdCBldmVubHkgZGl2aXNpYmxlIGJ5ICR7dH0uIFlvdSBzaG91bGQgc3BlY2lmeSBpdC5gKTtyZXR1cm4gdH1mdW5jdGlvbiBucyhyLGUsdCl7cmV0dXJuIHIubnVtQ29tcG9uZW50c3x8ci5zaXplfHxycyhlLHR8fFpvKHIpLmxlbmd0aCl9ZnVuY3Rpb24gcXIocixlKXtpZihldChyKSlyZXR1cm4gcjtpZihldChyLmRhdGEpKXJldHVybiByLmRhdGE7QXJyYXkuaXNBcnJheShyKSYmKHI9e2RhdGE6cn0pO2xldCB0PXIudHlwZT9ZdChyLnR5cGUpOnZvaWQgMDtyZXR1cm4gdHx8KEtyKGUpP3Q9VWludDE2QXJyYXk6dD1GbG9hdDMyQXJyYXkpLG5ldyB0KHIuZGF0YSl9ZnVuY3Rpb24gaXMocil7cmV0dXJuIHR5cGVvZiByPT0ibnVtYmVyIj9yOnI/enIocik6anJ9ZnVuY3Rpb24gWXQocil7cmV0dXJuIHR5cGVvZiByPT0ibnVtYmVyIj9XcihyKTpyfHxGbG9hdDMyQXJyYXl9ZnVuY3Rpb24gb3MocixlKXtyZXR1cm57YnVmZmVyOmUuYnVmZmVyLG51bVZhbHVlczoyKjMqNCx0eXBlOmlzKGUudHlwZSksYXJyYXlUeXBlOll0KGUudHlwZSl9fWZ1bmN0aW9uIHNzKHIsZSl7Y29uc3QgdD1lLmRhdGF8fGUsbj1ZdChlLnR5cGUpLGk9dCpuLkJZVEVTX1BFUl9FTEVNRU5ULG89ci5jcmVhdGVCdWZmZXIoKTtyZXR1cm4gci5iaW5kQnVmZmVyKG1lLG8pLHIuYnVmZmVyRGF0YShtZSxpLGUuZHJhd1R5cGV8fFlyKSx7YnVmZmVyOm8sbnVtVmFsdWVzOnQsdHlwZTp6cihuKSxhcnJheVR5cGU6bn19ZnVuY3Rpb24gYXMocixlLHQpe2NvbnN0IG49cXIoZSx0KTtyZXR1cm57YXJyYXlUeXBlOm4uY29uc3RydWN0b3IsYnVmZmVyOlFyKHIsbix2b2lkIDAsZS5kcmF3VHlwZSksdHlwZTpWdChuKSxudW1WYWx1ZXM6MH19ZnVuY3Rpb24gdXMocixlKXtjb25zdCB0PXt9O3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKCFLcihuKSl7Y29uc3QgaT1lW25dLG89aS5hdHRyaWJ8fGkubmFtZXx8aS5hdHRyaWJOYW1lfHxYci5hdHRyaWJQcmVmaXgrbjtpZihpLnZhbHVlKXtpZighQXJyYXkuaXNBcnJheShpLnZhbHVlKSYmIWV0KGkudmFsdWUpKXRocm93IG5ldyBFcnJvcigiYXJyYXkudmFsdWUgaXMgbm90IGFycmF5IG9yIHR5cGVkYXJyYXkiKTt0W29dPXt2YWx1ZTppLnZhbHVlfX1lbHNle2xldCBzO2kuYnVmZmVyJiZpLmJ1ZmZlciBpbnN0YW5jZW9mIFdlYkdMQnVmZmVyP3M9b3M6dHlwZW9mIGk9PSJudW1iZXIifHx0eXBlb2YgaS5kYXRhPT0ibnVtYmVyIj9zPXNzOnM9YXM7Y29uc3R7YnVmZmVyOmEsdHlwZTp1LG51bVZhbHVlczpmLGFycmF5VHlwZTpkfT1zKHIsaSxuKSxoPWkubm9ybWFsaXplIT09dm9pZCAwP2kubm9ybWFsaXplOkpvKGQpLHk9bnMoaSxuLGYpO3Rbb109e2J1ZmZlcjphLG51bUNvbXBvbmVudHM6eSx0eXBlOnUsbm9ybWFsaXplOmgsc3RyaWRlOmkuc3RyaWRlfHwwLG9mZnNldDppLm9mZnNldHx8MCxkaXZpc29yOmkuZGl2aXNvcj09PXZvaWQgMD92b2lkIDA6aS5kaXZpc29yLGRyYXdUeXBlOmkuZHJhd1R5cGV9fX19KSxyLmJpbmRCdWZmZXIobWUsbnVsbCksdH1mdW5jdGlvbiBjcyhyLGUpe3JldHVybiBlPT09SG98fGU9PT1Zbz8xOmU9PT1qb3x8ZT09PVhvPzI6ZT09PVFvfHxlPT09S298fGU9PT1qcj80OjB9Y29uc3QganQ9WyJwb3NpdGlvbiIsInBvc2l0aW9ucyIsImFfcG9zaXRpb24iXTtmdW5jdGlvbiBmcyhyLGUpe2xldCB0LG47Zm9yKG49MDtuPGp0Lmxlbmd0aCYmKHQ9anRbbl0sISh0IGluIGV8fCh0PVhyLmF0dHJpYlByZWZpeCt0LHQgaW4gZSkpKTsrK24pO249PT1qdC5sZW5ndGgmJih0PU9iamVjdC5rZXlzKGUpWzBdKTtjb25zdCBpPWVbdF07aWYoIWkuYnVmZmVyKXJldHVybiAxO3IuYmluZEJ1ZmZlcihtZSxpLmJ1ZmZlcik7Y29uc3Qgbz1yLmdldEJ1ZmZlclBhcmFtZXRlcihtZSxWbyk7ci5iaW5kQnVmZmVyKG1lLG51bGwpO2NvbnN0IHM9Y3MocixpLnR5cGUpLGE9by9zLHU9aS5udW1Db21wb25lbnRzfHxpLnNpemUsZj1hL3U7aWYoZiUxIT09MCl0aHJvdyBuZXcgRXJyb3IoYG51bUNvbXBvbmVudHMgJHt1fSBub3QgY29ycmVjdCBmb3IgbGVuZ3RoICR7bGVuZ3RofWApO3JldHVybiBmfWZ1bmN0aW9uIGxzKHIsZSx0KXtjb25zdCBuPXVzKHIsZSksaT1PYmplY3QuYXNzaWduKHt9LHR8fHt9KTtpLmF0dHJpYnM9T2JqZWN0LmFzc2lnbih7fSx0P3QuYXR0cmliczp7fSxuKTtjb25zdCBvPWUuaW5kaWNlcztpZihvKXtjb25zdCBzPXFyKG8sImluZGljZXMiKTtpLmluZGljZXM9UXIocixzLFdvKSxpLm51bUVsZW1lbnRzPXMubGVuZ3RoLGkuZWxlbWVudFR5cGU9VnQocyl9ZWxzZSBpLm51bUVsZW1lbnRzfHwoaS5udW1FbGVtZW50cz1mcyhyLGkuYXR0cmlicykpO3JldHVybiBpfWZ1bmN0aW9uIE5lKHIpe3JldHVybiEhci50ZXhTdG9yYWdlMkR9Y29uc3QgSnI9ZnVuY3Rpb24oKXtjb25zdCByPXt9LGU9e307ZnVuY3Rpb24gdChuKXtjb25zdCBpPW4uY29uc3RydWN0b3IubmFtZTtpZighcltpXSl7Zm9yKGNvbnN0IG8gaW4gbilpZih0eXBlb2YgbltvXT09Im51bWJlciIpe2NvbnN0IHM9ZVtuW29dXTtlW25bb11dPXM/YCR7c30gfCAke299YDpvfXJbaV09ITB9fXJldHVybiBmdW5jdGlvbihpLG8pe3JldHVybiB0KGkpLGVbb118fCh0eXBlb2Ygbz09Im51bWJlciI/YDB4JHtvLnRvU3RyaW5nKDE2KX1gOm8pfX0oKSxuZT17dGV4dHVyZUNvbG9yOm5ldyBVaW50OEFycmF5KFsxMjgsMTkyLDI1NSwyNTVdKSx0ZXh0dXJlT3B0aW9uczp7fSxjcm9zc09yaWdpbjp2b2lkIDB9LE1lPWV0LFpyPWZ1bmN0aW9uKCl7bGV0IHI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHI9cnx8KHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKTpudWxsKSxyfX0oKSxlbj02NDA2LFE9NjQwNyxGPTY0MDgsdG49NjQwOSxybj02NDEwLFVlPTY0MDIsbm49MzQwNDEscnQ9MzMwNzEsZHM9OTcyOCxtcz05NzI5LGllPTM1NTMsb2U9MzQwNjcsaGU9MzI4NzkscGU9MzU4NjYsWHQ9MzQwNjksaHM9MzQwNzAscHM9MzQwNzEseXM9MzQwNzIsX3M9MzQwNzMseHM9MzQwNzQsUXQ9MTAyNDEsS3Q9MTAyNDAsbnQ9MTAyNDIsaXQ9MTAyNDMsb249MzI4ODIsZ3M9MzMwODIsYnM9MzMwODMsdnM9MzMwODQsRXM9MzMwODUscXQ9MzMxNyxzbj0zMzE0LGFuPTMyODc4LHVuPTMzMTYsY249MzMxNSxmbj0zMjg3NyxUcz0zNzQ0MyxBcz0zNzQ0MSx3cz0zNzQ0MCxTcz0zMzMyMSxScz0zNjc1NixJcz0zMzMyNSxGcz0zMzMyNixQcz0zMzMzMCxEcz0zMzMyOSxOcz0zMzMzOCxNcz0zMzMzNyxVcz0zMzM0MCxrcz0zMzMzOSxDcz0zMzMyMyxPcz0zNjc1NyxCcz0zMzMyNyxMcz0zMzMyOCxHcz0zMzMzNiwkcz0zMzMzNSx6cz0zMzMzMixXcz0zMzMzMSxWcz0zMzMzNCxIcz0zMzMzMyxZcz0zMjg0OSxqcz0zNTkwNSxYcz0zNjE5NCxRcz0zNjc1OCxLcz0zNTg5OCxxcz0zNTkwMSxKcz0zNDg0Myxacz0zNDgzNyxlYT0zNjIyMSx0YT0zNjIzOSxyYT0zNjIxNSxuYT0zNjIzMyxpYT0zNjIwOSxvYT0zNjIyNyxzYT0zMjg1NixhYT0zNTkwNyx1YT0zNjc1OSxjYT0zMjg1NSxmYT0zMjg1NCxsYT0zMjg1NyxkYT0zNDg0MixtYT0zNDgzNixoYT0zNjIyMCxwYT0zNjIzOCx5YT0zNjk3NSxfYT0zNjIxNCx4YT0zNjIzMixnYT0zNjIyNixiYT0zNjIwOCx2YT0zMzE4OSxFYT0zMzE5MCxUYT0zNjAxMixBYT0zNjAxMyx3YT0zNTA1NixzZT01MTIwLFI9NTEyMSxvdD01MTIyLEVlPTUxMjMsc3Q9NTEyNCx5ZT01MTI1LEM9NTEyNixsbj0zMjgxOSxkbj0zMjgyMCxtbj0zMzYzNSxXPTUxMzEsa2U9MzYxOTMsSnQ9MzM2NDAsU2E9MzU4OTksUmE9MzU5MDIsSWE9MzYyNjksRmE9MzQwNDIsYXQ9MzMzMTksVGU9MzMzMjAsdXQ9NjQwMyxBZT0zNjI0NCx3ZT0zNjI0OCxfZT0zNjI0OTtsZXQgWnQ7ZnVuY3Rpb24gY3Qocil7aWYoIVp0KXtjb25zdCBlPXt9O2VbZW5dPXt0ZXh0dXJlRm9ybWF0OmVuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEsMiwyLDRdLHR5cGU6W1IsVyxrZSxDXX0sZVt0bl09e3RleHR1cmVGb3JtYXQ6dG4sY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMSwyLDIsNF0sdHlwZTpbUixXLGtlLENdfSxlW3JuXT17dGV4dHVyZUZvcm1hdDpybixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsyLDQsNCw4XSx0eXBlOltSLFcsa2UsQ119LGVbUV09e3RleHR1cmVGb3JtYXQ6USxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlszLDYsNiwxMiwyXSx0eXBlOltSLFcsa2UsQyxtbl19LGVbRl09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDgsOCwxNiwyLDJdLHR5cGU6W1IsVyxrZSxDLGxuLGRuXX0sZVtVZV09e3RleHR1cmVGb3JtYXQ6VWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMiw0XSx0eXBlOlt5ZSxFZV19LGVbU3NdPXt0ZXh0dXJlRm9ybWF0OnV0LGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W1JdfSxlW1JzXT17dGV4dHVyZUZvcm1hdDp1dCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxXSx0eXBlOltzZV19LGVbSXNdPXt0ZXh0dXJlRm9ybWF0OnV0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsMl0sdHlwZTpbQyxXXX0sZVtGc109e3RleHR1cmVGb3JtYXQ6dXQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbQ119LGVbUHNdPXt0ZXh0dXJlRm9ybWF0OkFlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W1JdfSxlW0RzXT17dGV4dHVyZUZvcm1hdDpBZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxXSx0eXBlOltzZV19LGVbenNdPXt0ZXh0dXJlRm9ybWF0OkFlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W0VlXX0sZVtXc109e3RleHR1cmVGb3JtYXQ6QWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbb3RdfSxlW1ZzXT17dGV4dHVyZUZvcm1hdDpBZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOlt5ZV19LGVbSHNdPXt0ZXh0dXJlRm9ybWF0OkFlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W3N0XX0sZVtDc109e3RleHR1cmVGb3JtYXQ6YXQsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbUl19LGVbT3NdPXt0ZXh0dXJlRm9ybWF0OmF0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W3NlXX0sZVtCc109e3RleHR1cmVGb3JtYXQ6YXQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbOCw0XSx0eXBlOltDLFddfSxlW0xzXT17dGV4dHVyZUZvcm1hdDphdCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltDXX0sZVtHc109e3RleHR1cmVGb3JtYXQ6VGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbUl19LGVbJHNdPXt0ZXh0dXJlRm9ybWF0OlRlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W3NlXX0sZVtOc109e3RleHR1cmVGb3JtYXQ6VGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbRWVdfSxlW01zXT17dGV4dHVyZUZvcm1hdDpUZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltvdF19LGVbVXNdPXt0ZXh0dXJlRm9ybWF0OlRlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W3llXX0sZVtrc109e3RleHR1cmVGb3JtYXQ6VGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbc3RdfSxlW1lzXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W1JdfSxlW2pzXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W1JdfSxlW1hzXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzMsMl0sdHlwZTpbUixtbl19LGVbUXNdPXt0ZXh0dXJlRm9ybWF0OlEsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbc2VdfSxlW0tzXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEyLDYsNF0sdHlwZTpbQyxXLFNhXX0sZVtxc109e3RleHR1cmVGb3JtYXQ6USxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxMiw2LDRdLHR5cGU6W0MsVyxSYV19LGVbSnNdPXt0ZXh0dXJlRm9ybWF0OlEsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTIsNl0sdHlwZTpbQyxXXX0sZVtac109e3RleHR1cmVGb3JtYXQ6USxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbQ119LGVbZWFdPXt0ZXh0dXJlRm9ybWF0OndlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W1JdfSxlW3RhXT17dGV4dHVyZUZvcm1hdDp3ZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlszXSx0eXBlOltzZV19LGVbcmFdPXt0ZXh0dXJlRm9ybWF0OndlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzZdLHR5cGU6W0VlXX0sZVtuYV09e3RleHR1cmVGb3JtYXQ6d2UsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNl0sdHlwZTpbb3RdfSxlW2lhXT17dGV4dHVyZUZvcm1hdDp3ZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbeWVdfSxlW29hXT17dGV4dHVyZUZvcm1hdDp3ZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbc3RdfSxlW3NhXT17dGV4dHVyZUZvcm1hdDpGLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W1JdfSxlW2FhXT17dGV4dHVyZUZvcm1hdDpGLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W1JdfSxlW3VhXT17dGV4dHVyZUZvcm1hdDpGLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W3NlXX0sZVtjYV09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDIsNF0sdHlwZTpbUixkbixKdF19LGVbZmFdPXt0ZXh0dXJlRm9ybWF0OkYsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNCwyXSx0eXBlOltSLGxuXX0sZVtsYV09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltKdF19LGVbZGFdPXt0ZXh0dXJlRm9ybWF0OkYsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTYsOF0sdHlwZTpbQyxXXX0sZVttYV09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxNl0sdHlwZTpbQ119LGVbaGFdPXt0ZXh0dXJlRm9ybWF0Ol9lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W1JdfSxlW3BhXT17dGV4dHVyZUZvcm1hdDpfZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltzZV19LGVbeWFdPXt0ZXh0dXJlRm9ybWF0Ol9lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0p0XX0sZVtfYV09e3RleHR1cmVGb3JtYXQ6X2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbRWVdfSxlW3hhXT17dGV4dHVyZUZvcm1hdDpfZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltvdF19LGVbZ2FdPXt0ZXh0dXJlRm9ybWF0Ol9lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOltzdF19LGVbYmFdPXt0ZXh0dXJlRm9ybWF0Ol9lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOlt5ZV19LGVbdmFdPXt0ZXh0dXJlRm9ybWF0OlVlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzIsNF0sdHlwZTpbRWUseWVdfSxlW0VhXT17dGV4dHVyZUZvcm1hdDpVZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOlt5ZV19LGVbVGFdPXt0ZXh0dXJlRm9ybWF0OlVlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0NdfSxlW3dhXT17dGV4dHVyZUZvcm1hdDpubixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltGYV19LGVbQWFdPXt0ZXh0dXJlRm9ybWF0Om5uLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0lhXX0sT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtjb25zdCBuPWVbdF07bi5ieXRlc1BlckVsZW1lbnRNYXA9e30sbi5ieXRlc1BlckVsZW1lbnQuZm9yRWFjaChmdW5jdGlvbihpLG8pe2NvbnN0IHM9bi50eXBlW29dO24uYnl0ZXNQZXJFbGVtZW50TWFwW3NdPWl9KX0pLFp0PWV9cmV0dXJuIFp0W3JdfWZ1bmN0aW9uIFBhKHIsZSl7Y29uc3QgdD1jdChyKTtpZighdCl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7Y29uc3Qgbj10LmJ5dGVzUGVyRWxlbWVudE1hcFtlXTtpZihuPT09dm9pZCAwKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm4gbn1mdW5jdGlvbiBDZShyKXtjb25zdCBlPWN0KHIpO2lmKCFlKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm57Zm9ybWF0OmUudGV4dHVyZUZvcm1hdCx0eXBlOmUudHlwZVswXX19ZnVuY3Rpb24gaG4ocil7cmV0dXJuKHImci0xKT09PTB9ZnVuY3Rpb24gRGEocixlLHQsbil7aWYoIU5lKHIpKXJldHVybiBobihlKSYmaG4odCk7Y29uc3QgaT1jdChuKTtpZighaSl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7cmV0dXJuIGkuY29sb3JSZW5kZXJhYmxlJiZpLnRleHR1cmVGaWx0ZXJhYmxlfWZ1bmN0aW9uIE5hKHIpe2NvbnN0IGU9Y3Qocik7aWYoIWUpdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybiBlLnRleHR1cmVGaWx0ZXJhYmxlfWZ1bmN0aW9uIE1hKHIsZSx0KXtyZXR1cm4gTWUoZSk/VnQoZSk6dHx8Un1mdW5jdGlvbiBmdChyLGUsdCxuLGkpe2lmKGklMSE9PTApdGhyb3ciY2FuJ3QgZ3Vlc3MgZGltZW5zaW9ucyI7aWYoIXQmJiFuKXtjb25zdCBvPU1hdGguc3FydChpLyhlPT09b2U/NjoxKSk7byUxPT09MD8odD1vLG49byk6KHQ9aSxuPTEpfWVsc2UgaWYobil7aWYoIXQmJih0PWkvbix0JTEpKXRocm93ImNhbid0IGd1ZXNzIGRpbWVuc2lvbnMifWVsc2UgaWYobj1pL3QsbiUxKXRocm93ImNhbid0IGd1ZXNzIGRpbWVuc2lvbnMiO3JldHVybnt3aWR0aDp0LGhlaWdodDpufX1mdW5jdGlvbiBTZShyLGUpe2UuY29sb3JzcGFjZUNvbnZlcnNpb24hPT12b2lkIDAmJnIucGl4ZWxTdG9yZWkoVHMsZS5jb2xvcnNwYWNlQ29udmVyc2lvbiksZS5wcmVtdWx0aXBseUFscGhhIT09dm9pZCAwJiZyLnBpeGVsU3RvcmVpKEFzLGUucHJlbXVsdGlwbHlBbHBoYSksZS5mbGlwWSE9PXZvaWQgMCYmci5waXhlbFN0b3JlaSh3cyxlLmZsaXBZKX1mdW5jdGlvbiBwbihyKXtyLnBpeGVsU3RvcmVpKHF0LDQpLE5lKHIpJiYoci5waXhlbFN0b3JlaShzbiwwKSxyLnBpeGVsU3RvcmVpKGFuLDApLHIucGl4ZWxTdG9yZWkodW4sMCksci5waXhlbFN0b3JlaShjbiwwKSxyLnBpeGVsU3RvcmVpKGZuLDApKX1mdW5jdGlvbiBVYShyLGUsdCxuKXtuLm1pbk1hZyYmKHQuY2FsbChyLGUsUXQsbi5taW5NYWcpLHQuY2FsbChyLGUsS3Qsbi5taW5NYWcpKSxuLm1pbiYmdC5jYWxsKHIsZSxRdCxuLm1pbiksbi5tYWcmJnQuY2FsbChyLGUsS3Qsbi5tYWcpLG4ud3JhcCYmKHQuY2FsbChyLGUsbnQsbi53cmFwKSx0LmNhbGwocixlLGl0LG4ud3JhcCksKGU9PT1oZXx8em8ocixlKSkmJnQuY2FsbChyLGUsb24sbi53cmFwKSksbi53cmFwUiYmdC5jYWxsKHIsZSxvbixuLndyYXBSKSxuLndyYXBTJiZ0LmNhbGwocixlLG50LG4ud3JhcFMpLG4ud3JhcFQmJnQuY2FsbChyLGUsaXQsbi53cmFwVCksbi5taW5Mb2QmJnQuY2FsbChyLGUsZ3Msbi5taW5Mb2QpLG4ubWF4TG9kJiZ0LmNhbGwocixlLGJzLG4ubWF4TG9kKSxuLmJhc2VMZXZlbCYmdC5jYWxsKHIsZSx2cyxuLmJhc2VMZXZlbCksbi5tYXhMZXZlbCYmdC5jYWxsKHIsZSxFcyxuLm1heExldmVsKX1mdW5jdGlvbiB5bihyLGUsdCl7Y29uc3Qgbj10LnRhcmdldHx8aWU7ci5iaW5kVGV4dHVyZShuLGUpLFVhKHIsbixyLnRleFBhcmFtZXRlcmksdCl9ZnVuY3Rpb24ga2Eocil7cmV0dXJuIHI9cnx8bmUudGV4dHVyZUNvbG9yLE1lKHIpP3I6bmV3IFVpbnQ4QXJyYXkoW3JbMF0qMjU1LHJbMV0qMjU1LHJbMl0qMjU1LHJbM10qMjU1XSl9ZnVuY3Rpb24gZXIocixlLHQsbixpLG8pe3Q9dHx8bmUudGV4dHVyZU9wdGlvbnMsbz1vfHxGO2NvbnN0IHM9dC50YXJnZXR8fGllO2lmKG49bnx8dC53aWR0aCxpPWl8fHQuaGVpZ2h0LHIuYmluZFRleHR1cmUocyxlKSxEYShyLG4saSxvKSlyLmdlbmVyYXRlTWlwbWFwKHMpO2Vsc2V7Y29uc3QgYT1OYShvKT9tczpkcztyLnRleFBhcmFtZXRlcmkocyxRdCxhKSxyLnRleFBhcmFtZXRlcmkocyxLdCxhKSxyLnRleFBhcmFtZXRlcmkocyxudCxydCksci50ZXhQYXJhbWV0ZXJpKHMsaXQscnQpfX1mdW5jdGlvbiBPZShyKXtyZXR1cm4gci5hdXRvPT09ITB8fHIuYXV0bz09PXZvaWQgMCYmci5sZXZlbD09PXZvaWQgMH1mdW5jdGlvbiB0cihyLGUpe3JldHVybiBlPWV8fHt9LGUuY3ViZUZhY2VPcmRlcnx8W1h0LGhzLHBzLHlzLF9zLHhzXX1mdW5jdGlvbiBycihyLGUpe2NvbnN0IG49dHIocixlKS5tYXAoZnVuY3Rpb24oaSxvKXtyZXR1cm57ZmFjZTppLG5keDpvfX0pO3JldHVybiBuLnNvcnQoZnVuY3Rpb24oaSxvKXtyZXR1cm4gaS5mYWNlLW8uZmFjZX0pLG59ZnVuY3Rpb24gX24ocixlLHQsbil7bj1ufHxuZS50ZXh0dXJlT3B0aW9ucztjb25zdCBpPW4udGFyZ2V0fHxpZSxvPW4ubGV2ZWx8fDA7bGV0IHM9dC53aWR0aCxhPXQuaGVpZ2h0O2NvbnN0IHU9bi5pbnRlcm5hbEZvcm1hdHx8bi5mb3JtYXR8fEYsZj1DZSh1KSxkPW4uZm9ybWF0fHxmLmZvcm1hdCxoPW4udHlwZXx8Zi50eXBlO2lmKFNlKHIsbiksci5iaW5kVGV4dHVyZShpLGUpLGk9PT1vZSl7Y29uc3QgeT10LndpZHRoLHg9dC5oZWlnaHQ7bGV0IGwsZztpZih5LzY9PT14KWw9eCxnPVswLDAsMSwwLDIsMCwzLDAsNCwwLDUsMF07ZWxzZSBpZih4LzY9PT15KWw9eSxnPVswLDAsMCwxLDAsMiwwLDMsMCw0LDAsNV07ZWxzZSBpZih5LzM9PT14LzIpbD15LzMsZz1bMCwwLDEsMCwyLDAsMCwxLDEsMSwyLDFdO2Vsc2UgaWYoeS8yPT09eC8zKWw9eS8yLGc9WzAsMCwxLDAsMCwxLDEsMSwwLDIsMSwyXTtlbHNlIHRocm93ImNhbid0IGZpZ3VyZSBvdXQgY3ViZSBtYXAgZnJvbSBlbGVtZW50OiAiKyh0LnNyYz90LnNyYzp0Lm5vZGVOYW1lKTtjb25zdCBFPVpyKCk7RT8oRS5jYW52YXMud2lkdGg9bCxFLmNhbnZhcy5oZWlnaHQ9bCxzPWwsYT1sLHJyKHIsbikuZm9yRWFjaChmdW5jdGlvbih2KXtjb25zdCBJPWdbdi5uZHgqMiswXSpsLEQ9Z1t2Lm5keCoyKzFdKmw7RS5kcmF3SW1hZ2UodCxJLEQsbCxsLDAsMCxsLGwpLHIudGV4SW1hZ2UyRCh2LmZhY2Usbyx1LGQsaCxFLmNhbnZhcyl9KSxFLmNhbnZhcy53aWR0aD0xLEUuY2FudmFzLmhlaWdodD0xKTp0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA8InUiJiYocz1sLGE9bCxycihyLG4pLmZvckVhY2goZnVuY3Rpb24odil7Y29uc3QgST1nW3YubmR4KjIrMF0qbCxEPWdbdi5uZHgqMisxXSpsO3IudGV4SW1hZ2UyRCh2LmZhY2Usbyx1LGwsbCwwLGQsaCxudWxsKSxjcmVhdGVJbWFnZUJpdG1hcCh0LEksRCxsLGwse3ByZW11bHRpcGx5QWxwaGE6Im5vbmUiLGNvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pLnRoZW4oZnVuY3Rpb24oRyl7U2UocixuKSxyLmJpbmRUZXh0dXJlKGksZSksci50ZXhJbWFnZTJEKHYuZmFjZSxvLHUsZCxoLEcpLE9lKG4pJiZlcihyLGUsbixzLGEsdSl9KX0pKX1lbHNlIGlmKGk9PT1oZXx8aT09PXBlKXtjb25zdCB5PU1hdGgubWluKHQud2lkdGgsdC5oZWlnaHQpLHg9TWF0aC5tYXgodC53aWR0aCx0LmhlaWdodCksbD14L3k7aWYobCUxIT09MCl0aHJvdyJjYW4gbm90IGNvbXB1dGUgM0QgZGltZW5zaW9ucyBvZiBlbGVtZW50Ijtjb25zdCBnPXQud2lkdGg9PT14PzE6MCxFPXQuaGVpZ2h0PT09eD8xOjA7ci5waXhlbFN0b3JlaShxdCwxKSxyLnBpeGVsU3RvcmVpKHNuLHQud2lkdGgpLHIucGl4ZWxTdG9yZWkoYW4sMCksci5waXhlbFN0b3JlaShmbiwwKSxyLnRleEltYWdlM0QoaSxvLHUseSx5LHksMCxkLGgsbnVsbCk7Zm9yKGxldCB2PTA7djxsOysrdil7Y29uc3QgST12KnkqZyxEPXYqeSpFO3IucGl4ZWxTdG9yZWkodW4sSSksci5waXhlbFN0b3JlaShjbixEKSxyLnRleFN1YkltYWdlM0QoaSxvLDAsMCx2LHkseSwxLGQsaCx0KX1wbihyKX1lbHNlIHIudGV4SW1hZ2UyRChpLG8sdSxkLGgsdCk7T2UobikmJmVyKHIsZSxuLHMsYSx1KSx5bihyLGUsbil9ZnVuY3Rpb24gQmUoKXt9ZnVuY3Rpb24gQ2Eocil7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iil7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7cmV0dXJuIGUuaHJlZj1yLGUuaG9zdG5hbWU9PT1sb2NhdGlvbi5ob3N0bmFtZSYmZS5wb3J0PT09bG9jYXRpb24ucG9ydCYmZS5wcm90b2NvbD09PWxvY2F0aW9uLnByb3RvY29sfWVsc2V7Y29uc3QgZT1uZXcgVVJMKGxvY2F0aW9uLmhyZWYpLm9yaWdpbjtyZXR1cm4gbmV3IFVSTChyLGxvY2F0aW9uLmhyZWYpLm9yaWdpbj09PWV9fWZ1bmN0aW9uIE9hKHIsZSl7cmV0dXJuIGU9PT12b2lkIDAmJiFDYShyKT8iYW5vbnltb3VzIjplfWZ1bmN0aW9uIEJhKHIsZSx0KXt0PXR8fEJlO2xldCBuO2lmKGU9ZSE9PXZvaWQgMD9lOm5lLmNyb3NzT3JpZ2luLGU9T2EocixlKSx0eXBlb2YgSW1hZ2U8InUiKXtuPW5ldyBJbWFnZSxlIT09dm9pZCAwJiYobi5jcm9zc09yaWdpbj1lKTtjb25zdCBpPWZ1bmN0aW9uKCl7bi5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsbyksbi5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixzKSxuPW51bGx9LG89ZnVuY3Rpb24oKXtjb25zdCB1PSJjb3VsZG4ndCBsb2FkIGltYWdlOiAiK3I7VnIodSksdCh1LG4pLGkoKX0scz1mdW5jdGlvbigpe3QobnVsbCxuKSxpKCl9O3JldHVybiBuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixvKSxuLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHMpLG4uc3JjPXIsbn1lbHNlIGlmKHR5cGVvZiBJbWFnZUJpdG1hcDwidSIpe2xldCBpLG87Y29uc3Qgcz1mdW5jdGlvbigpe3QoaSxvKX0sYT17fTtlJiYoYS5tb2RlPSJjb3JzIiksZmV0Y2gocixhKS50aGVuKGZ1bmN0aW9uKHUpe2lmKCF1Lm9rKXRocm93IHU7cmV0dXJuIHUuYmxvYigpfSkudGhlbihmdW5jdGlvbih1KXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAodSx7cHJlbXVsdGlwbHlBbHBoYToibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSl9KS50aGVuKGZ1bmN0aW9uKHUpe289dSxzZXRUaW1lb3V0KHMpfSkuY2F0Y2goZnVuY3Rpb24odSl7aT11LHNldFRpbWVvdXQocyl9KSxuPW51bGx9cmV0dXJuIG59ZnVuY3Rpb24geG4ocil7cmV0dXJuIHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJnIgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcHx8dHlwZW9mIEltYWdlRGF0YTwidSImJnIgaW5zdGFuY2VvZiBJbWFnZURhdGF8fHR5cGVvZiBIVE1MRWxlbWVudDwidSImJnIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH1mdW5jdGlvbiBucihyLGUsdCl7cmV0dXJuIHhuKHIpPyhzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dChudWxsLHIpfSkscik6QmEocixlLHQpfWZ1bmN0aW9uIGlyKHIsZSx0KXt0PXR8fG5lLnRleHR1cmVPcHRpb25zO2NvbnN0IG49dC50YXJnZXR8fGllO2lmKHIuYmluZFRleHR1cmUobixlKSx0LmNvbG9yPT09ITEpcmV0dXJuO2NvbnN0IGk9a2EodC5jb2xvcik7aWYobj09PW9lKWZvcihsZXQgbz0wO288NjsrK28pci50ZXhJbWFnZTJEKFh0K28sMCxGLDEsMSwwLEYsUixpKTtlbHNlIG49PT1oZXx8bj09PXBlP3IudGV4SW1hZ2UzRChuLDAsRiwxLDEsMSwwLEYsUixpKTpyLnRleEltYWdlMkQobiwwLEYsMSwxLDAsRixSLGkpfWZ1bmN0aW9uIExhKHIsZSx0LG4pe3JldHVybiBuPW58fEJlLHQ9dHx8bmUudGV4dHVyZU9wdGlvbnMsaXIocixlLHQpLHQ9T2JqZWN0LmFzc2lnbih7fSx0KSxucih0LnNyYyx0LmNyb3NzT3JpZ2luLGZ1bmN0aW9uKG8scyl7bz9uKG8sZSxzKTooX24ocixlLHMsdCksbihudWxsLGUscykpfSl9ZnVuY3Rpb24gR2EocixlLHQsbil7bj1ufHxCZTtjb25zdCBpPXQuc3JjO2lmKGkubGVuZ3RoIT09Nil0aHJvdyJ0aGVyZSBtdXN0IGJlIDYgdXJscyBmb3IgYSBjdWJlbWFwIjtjb25zdCBvPXQubGV2ZWx8fDAscz10LmludGVybmFsRm9ybWF0fHx0LmZvcm1hdHx8RixhPUNlKHMpLHU9dC5mb3JtYXR8fGEuZm9ybWF0LGY9dC50eXBlfHxSLGQ9dC50YXJnZXR8fGllO2lmKGQhPT1vZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFX0NVQkVfTUFQIjtpcihyLGUsdCksdD1PYmplY3QuYXNzaWduKHt9LHQpO2xldCBoPTY7Y29uc3QgeT1bXSx4PXRyKHIsdCk7bGV0IGw7ZnVuY3Rpb24gZyhFKXtyZXR1cm4gZnVuY3Rpb24odixJKXstLWgsdj95LnB1c2godik6SS53aWR0aCE9PUkuaGVpZ2h0P3kucHVzaCgiY3ViZW1hcCBmYWNlIGltZyBpcyBub3QgYSBzcXVhcmU6ICIrSS5zcmMpOihTZShyLHQpLHIuYmluZFRleHR1cmUoZCxlKSxoPT09NT90cigpLmZvckVhY2goZnVuY3Rpb24oRCl7ci50ZXhJbWFnZTJEKEQsbyxzLHUsZixJKX0pOnIudGV4SW1hZ2UyRChFLG8scyx1LGYsSSksT2UodCkmJnIuZ2VuZXJhdGVNaXBtYXAoZCkpLGg9PT0wJiZuKHkubGVuZ3RoP3k6dm9pZCAwLGUsbCl9fWw9aS5tYXAoZnVuY3Rpb24oRSx2KXtyZXR1cm4gbnIoRSx0LmNyb3NzT3JpZ2luLGcoeFt2XSkpfSl9ZnVuY3Rpb24gJGEocixlLHQsbil7bj1ufHxCZTtjb25zdCBpPXQuc3JjLG89dC5pbnRlcm5hbEZvcm1hdHx8dC5mb3JtYXR8fEYscz1DZShvKSxhPXQuZm9ybWF0fHxzLmZvcm1hdCx1PXQudHlwZXx8UixmPXQudGFyZ2V0fHxwZTtpZihmIT09aGUmJmYhPT1wZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFXzNEIG9yIFRFWFRVUkVfMkRfQVJSQVkiO2lyKHIsZSx0KSx0PU9iamVjdC5hc3NpZ24oe30sdCk7bGV0IGQ9aS5sZW5ndGg7Y29uc3QgaD1bXTtsZXQgeTtjb25zdCB4PXQubGV2ZWx8fDA7bGV0IGw9dC53aWR0aCxnPXQuaGVpZ2h0O2NvbnN0IEU9aS5sZW5ndGg7bGV0IHY9ITA7ZnVuY3Rpb24gSShEKXtyZXR1cm4gZnVuY3Rpb24oRywkKXtpZigtLWQsRyloLnB1c2goRyk7ZWxzZXtpZihTZShyLHQpLHIuYmluZFRleHR1cmUoZixlKSx2KXt2PSExLGw9dC53aWR0aHx8JC53aWR0aCxnPXQuaGVpZ2h0fHwkLmhlaWdodCxyLnRleEltYWdlM0QoZix4LG8sbCxnLEUsMCxhLHUsbnVsbCk7Zm9yKGxldCBaPTA7WjxFOysrWilyLnRleFN1YkltYWdlM0QoZix4LDAsMCxaLGwsZywxLGEsdSwkKX1lbHNle2xldCBaPSQsSDsoJC53aWR0aCE9PWx8fCQuaGVpZ2h0IT09ZykmJihIPVpyKCksWj1ILmNhbnZhcyxILmNhbnZhcy53aWR0aD1sLEguY2FudmFzLmhlaWdodD1nLEguZHJhd0ltYWdlKCQsMCwwLGwsZykpLHIudGV4U3ViSW1hZ2UzRChmLHgsMCwwLEQsbCxnLDEsYSx1LFopLEgmJlo9PT1ILmNhbnZhcyYmKEguY2FudmFzLndpZHRoPTAsSC5jYW52YXMuaGVpZ2h0PTApfU9lKHQpJiZyLmdlbmVyYXRlTWlwbWFwKGYpfWQ9PT0wJiZuKGgubGVuZ3RoP2g6dm9pZCAwLGUseSl9fXk9aS5tYXAoZnVuY3Rpb24oRCxHKXtyZXR1cm4gbnIoRCx0LmNyb3NzT3JpZ2luLEkoRykpfSl9ZnVuY3Rpb24gemEocixlLHQsbil7bj1ufHxuZS50ZXh0dXJlT3B0aW9ucztjb25zdCBpPW4udGFyZ2V0fHxpZTtyLmJpbmRUZXh0dXJlKGksZSk7bGV0IG89bi53aWR0aCxzPW4uaGVpZ2h0LGE9bi5kZXB0aDtjb25zdCB1PW4ubGV2ZWx8fDAsZj1uLmludGVybmFsRm9ybWF0fHxuLmZvcm1hdHx8RixkPUNlKGYpLGg9bi5mb3JtYXR8fGQuZm9ybWF0LHk9bi50eXBlfHxNYShyLHQsZC50eXBlKTtpZihNZSh0KSl0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkmJih0PW5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSk7ZWxzZXtjb25zdCBFPVdyKHkpO3Q9bmV3IEUodCl9Y29uc3QgeD1QYShmLHkpLGw9dC5ieXRlTGVuZ3RoL3g7aWYobCUxKXRocm93Imxlbmd0aCB3cm9uZyBzaXplIGZvciBmb3JtYXQ6ICIrSnIocixoKTtsZXQgZztpZihpPT09aGV8fGk9PT1wZSlpZighbyYmIXMmJiFhKXtjb25zdCBFPU1hdGguY2JydChsKTtpZihFJTEhPT0wKXRocm93ImNhbid0IGd1ZXNzIGN1YmUgc2l6ZSBvZiBhcnJheSBvZiBudW1FbGVtZW50czogIitsO289RSxzPUUsYT1FfWVsc2UgbyYmKCFzfHwhYSk/KGc9ZnQocixpLHMsYSxsL28pLHM9Zy53aWR0aCxhPWcuaGVpZ2h0KTpzJiYoIW98fCFhKT8oZz1mdChyLGksbyxhLGwvcyksbz1nLndpZHRoLGE9Zy5oZWlnaHQpOihnPWZ0KHIsaSxvLHMsbC9hKSxvPWcud2lkdGgscz1nLmhlaWdodCk7ZWxzZSBnPWZ0KHIsaSxvLHMsbCksbz1nLndpZHRoLHM9Zy5oZWlnaHQ7aWYocG4ociksci5waXhlbFN0b3JlaShxdCxuLnVucGFja0FsaWdubWVudHx8MSksU2UocixuKSxpPT09b2Upe2NvbnN0IEU9eC90LkJZVEVTX1BFUl9FTEVNRU5ULHY9bC82KkU7cnIocixuKS5mb3JFYWNoKEk9Pntjb25zdCBEPXYqSS5uZHgsRz10LnN1YmFycmF5KEQsRCt2KTtyLnRleEltYWdlMkQoSS5mYWNlLHUsZixvLHMsMCxoLHksRyl9KX1lbHNlIGk9PT1oZXx8aT09PXBlP3IudGV4SW1hZ2UzRChpLHUsZixvLHMsYSwwLGgseSx0KTpyLnRleEltYWdlMkQoaSx1LGYsbyxzLDAsaCx5LHQpO3JldHVybnt3aWR0aDpvLGhlaWdodDpzLGRlcHRoOmEsdHlwZTp5fX1mdW5jdGlvbiBXYShyLGUsdCl7Y29uc3Qgbj10LnRhcmdldHx8aWU7ci5iaW5kVGV4dHVyZShuLGUpO2NvbnN0IGk9dC5sZXZlbHx8MCxvPXQuaW50ZXJuYWxGb3JtYXR8fHQuZm9ybWF0fHxGLHM9Q2UobyksYT10LmZvcm1hdHx8cy5mb3JtYXQsdT10LnR5cGV8fHMudHlwZTtpZihTZShyLHQpLG49PT1vZSlmb3IobGV0IGY9MDtmPDY7KytmKXIudGV4SW1hZ2UyRChYdCtmLGksbyx0LndpZHRoLHQuaGVpZ2h0LDAsYSx1LG51bGwpO2Vsc2Ugbj09PWhlfHxuPT09cGU/ci50ZXhJbWFnZTNEKG4saSxvLHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCwwLGEsdSxudWxsKTpyLnRleEltYWdlMkQobixpLG8sdC53aWR0aCx0LmhlaWdodCwwLGEsdSxudWxsKX1mdW5jdGlvbiBnbihyLGUsdCl7dD10fHxCZSxlPWV8fG5lLnRleHR1cmVPcHRpb25zO2NvbnN0IG49ci5jcmVhdGVUZXh0dXJlKCksaT1lLnRhcmdldHx8aWU7bGV0IG89ZS53aWR0aHx8MSxzPWUuaGVpZ2h0fHwxO2NvbnN0IGE9ZS5pbnRlcm5hbEZvcm1hdHx8RjtyLmJpbmRUZXh0dXJlKGksbiksaT09PW9lJiYoci50ZXhQYXJhbWV0ZXJpKGksbnQscnQpLHIudGV4UGFyYW1ldGVyaShpLGl0LHJ0KSk7bGV0IHU9ZS5zcmM7aWYodSlpZih0eXBlb2YgdT09ImZ1bmN0aW9uIiYmKHU9dShyLGUpKSx0eXBlb2YgdT09InN0cmluZyIpTGEocixuLGUsdCk7ZWxzZSBpZihNZSh1KXx8QXJyYXkuaXNBcnJheSh1KSYmKHR5cGVvZiB1WzBdPT0ibnVtYmVyInx8QXJyYXkuaXNBcnJheSh1WzBdKXx8TWUodVswXSkpKXtjb25zdCBmPXphKHIsbix1LGUpO289Zi53aWR0aCxzPWYuaGVpZ2h0fWVsc2UgQXJyYXkuaXNBcnJheSh1KSYmKHR5cGVvZiB1WzBdPT0ic3RyaW5nInx8eG4odVswXSkpP2k9PT1vZT9HYShyLG4sZSx0KTokYShyLG4sZSx0KTooX24ocixuLHUsZSksbz11LndpZHRoLHM9dS5oZWlnaHQpO2Vsc2UgV2EocixuLGUpO3JldHVybiBPZShlKSYmZXIocixuLGUsbyxzLGEpLHluKHIsbixlKSxufWNvbnN0IG9yPVZyO2Z1bmN0aW9uIGJuKHIpe3JldHVybiB0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5nZXRFbGVtZW50QnlJZD9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChyKTpudWxsfWNvbnN0IGx0PTMzOTg0LGR0PTM0OTYyLFZhPTM0OTYzLEhhPTM1NzEzLFlhPTM1NzE0LGphPTM1NjMyLFhhPTM1NjMzLFFhPTM1OTgxLHZuPTM1NzE4LEthPTM1NzIxLHFhPTM1OTcxLEphPTM1MzgyLFphPTM1Mzk2LGV1PTM1Mzk4LHR1PTM1MzkyLHJ1PTM1Mzk1LG10PTUxMjYsRW49MzU2NjQsVG49MzU2NjUsQW49MzU2NjYsc3I9NTEyNCx3bj0zNTY2NyxTbj0zNTY2OCxSbj0zNTY2OSxJbj0zNTY3MCxGbj0zNTY3MSxQbj0zNTY3MixEbj0zNTY3MyxObj0zNTY3NCxNbj0zNTY3NSxVbj0zNTY3NixudT0zNTY3OCxpdT0zNTY4MCxvdT0zNTY3OSxzdT0zNTY4MixhdT0zNTY4NSx1dT0zNTY4NixjdT0zNTY4NyxmdT0zNTY4OCxsdT0zNTY4OSxkdT0zNTY5MCxtdT0zNjI4OSxodT0zNjI5MixwdT0zNjI5Myxhcj01MTI1LGtuPTM2Mjk0LENuPTM2Mjk1LE9uPTM2Mjk2LHl1PTM2Mjk4LF91PTM2Mjk5LHh1PTM2MzAwLGd1PTM2MzAzLGJ1PTM2MzA2LHZ1PTM2MzA3LEV1PTM2MzA4LFR1PTM2MzExLGh0PTM1NTMscHQ9MzQwNjcsdXI9MzI4NzkseXQ9MzU4NjYsYj17fTtmdW5jdGlvbiBCbihyLGUpe3JldHVybiBiW2VdLmJpbmRQb2ludH1mdW5jdGlvbiBBdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xZihlLHQpfX1mdW5jdGlvbiB3dShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xZnYoZSx0KX19ZnVuY3Rpb24gU3UocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMmZ2KGUsdCl9fWZ1bmN0aW9uIFJ1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTNmdihlLHQpfX1mdW5jdGlvbiBJdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm00ZnYoZSx0KX19ZnVuY3Rpb24gTG4ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWkoZSx0KX19ZnVuY3Rpb24gR24ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWl2KGUsdCl9fWZ1bmN0aW9uICRuKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTJpdihlLHQpfX1mdW5jdGlvbiB6bihyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0zaXYoZSx0KX19ZnVuY3Rpb24gV24ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtNGl2KGUsdCl9fWZ1bmN0aW9uIEZ1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTF1aShlLHQpfX1mdW5jdGlvbiBQdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xdWl2KGUsdCl9fWZ1bmN0aW9uIER1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTJ1aXYoZSx0KX19ZnVuY3Rpb24gTnUocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtM3VpdihlLHQpfX1mdW5jdGlvbiBNdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm00dWl2KGUsdCl9fWZ1bmN0aW9uIFV1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJmdihlLCExLHQpfX1mdW5jdGlvbiBrdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgzZnYoZSwhMSx0KX19ZnVuY3Rpb24gQ3UocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIE91KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJ4M2Z2KGUsITEsdCl9fWZ1bmN0aW9uIEJ1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDN4MmZ2KGUsITEsdCl9fWZ1bmN0aW9uIEx1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJ4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIEd1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDR4MmZ2KGUsITEsdCl9fWZ1bmN0aW9uICR1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDN4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIHp1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDR4M2Z2KGUsITEsdCl9fWZ1bmN0aW9uIEIocixlLHQsbil7Y29uc3QgaT1CbihyLGUpO3JldHVybiBOZShyKT9mdW5jdGlvbihvKXtsZXQgcyxhOyFvfHxIdChyLG8pPyhzPW8sYT1udWxsKToocz1vLnRleHR1cmUsYT1vLnNhbXBsZXIpLHIudW5pZm9ybTFpKG4sdCksci5hY3RpdmVUZXh0dXJlKGx0K3QpLHIuYmluZFRleHR1cmUoaSxzKSxyLmJpbmRTYW1wbGVyKHQsYSl9OmZ1bmN0aW9uKG8pe3IudW5pZm9ybTFpKG4sdCksci5hY3RpdmVUZXh0dXJlKGx0K3QpLHIuYmluZFRleHR1cmUoaSxvKX19ZnVuY3Rpb24gTChyLGUsdCxuLGkpe2NvbnN0IG89Qm4ocixlKSxzPW5ldyBJbnQzMkFycmF5KGkpO2ZvcihsZXQgYT0wO2E8aTsrK2Epc1thXT10K2E7cmV0dXJuIE5lKHIpP2Z1bmN0aW9uKGEpe3IudW5pZm9ybTFpdihuLHMpLGEuZm9yRWFjaChmdW5jdGlvbih1LGYpe3IuYWN0aXZlVGV4dHVyZShsdCtzW2ZdKTtsZXQgZCxoO0h0KHIsdSk/KGQ9dSxoPW51bGwpOihkPXUudGV4dHVyZSxoPXUuc2FtcGxlciksci5iaW5kU2FtcGxlcih0LGgpLHIuYmluZFRleHR1cmUobyxkKX0pfTpmdW5jdGlvbihhKXtyLnVuaWZvcm0xaXYobixzKSxhLmZvckVhY2goZnVuY3Rpb24odSxmKXtyLmFjdGl2ZVRleHR1cmUobHQrc1tmXSksci5iaW5kVGV4dHVyZShvLHUpfSl9fWJbbXRdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQsc2V0dGVyOkF1LGFycmF5U2V0dGVyOnd1fSxiW0VuXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo4LHNldHRlcjpTdSxjb2xzOjJ9LGJbVG5dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjEyLHNldHRlcjpSdSxjb2xzOjN9LGJbQW5dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjE2LHNldHRlcjpJdSxjb2xzOjR9LGJbc3JdPXtUeXBlOkludDMyQXJyYXksc2l6ZTo0LHNldHRlcjpMbixhcnJheVNldHRlcjpHbn0sYlt3bl09e1R5cGU6SW50MzJBcnJheSxzaXplOjgsc2V0dGVyOiRuLGNvbHM6Mn0sYltTbl09e1R5cGU6SW50MzJBcnJheSxzaXplOjEyLHNldHRlcjp6bixjb2xzOjN9LGJbUm5dPXtUeXBlOkludDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6V24sY29sczo0fSxiW2FyXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjQsc2V0dGVyOkZ1LGFycmF5U2V0dGVyOlB1fSxiW2tuXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjgsc2V0dGVyOkR1LGNvbHM6Mn0sYltDbl09e1R5cGU6VWludDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6TnUsY29sczozfSxiW09uXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjE2LHNldHRlcjpNdSxjb2xzOjR9LGJbSW5dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6NCxzZXR0ZXI6TG4sYXJyYXlTZXR0ZXI6R259LGJbRm5dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6OCxzZXR0ZXI6JG4sY29sczoyfSxiW1BuXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjEyLHNldHRlcjp6bixjb2xzOjN9LGJbRG5dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6MTYsc2V0dGVyOlduLGNvbHM6NH0sYltObl09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6MzIsc2V0dGVyOlV1LHJvd3M6Mixjb2xzOjJ9LGJbTW5dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQ4LHNldHRlcjprdSxyb3dzOjMsY29sczozfSxiW1VuXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6Q3Uscm93czo0LGNvbHM6NH0sYlthdV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6MzIsc2V0dGVyOk91LHJvd3M6Mixjb2xzOjN9LGJbdXVdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjMyLHNldHRlcjpMdSxyb3dzOjIsY29sczo0fSxiW2N1XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0OCxzZXR0ZXI6QnUscm93czozLGNvbHM6Mn0sYltmdV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NDgsc2V0dGVyOiR1LHJvd3M6Myxjb2xzOjR9LGJbbHVdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjY0LHNldHRlcjpHdSxyb3dzOjQsY29sczoyfSxiW2R1XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6enUscm93czo0LGNvbHM6M30sYltudV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6aHR9LGJbaXVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OnB0fSxiW291XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjpMLGJpbmRQb2ludDp1cn0sYltzdV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6aHR9LGJbbXVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOkwsYmluZFBvaW50Onl0fSxiW2h1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjpMLGJpbmRQb2ludDp5dH0sYltwdV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6cHR9LGJbeXVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOkwsYmluZFBvaW50Omh0fSxiW191XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjpMLGJpbmRQb2ludDp1cn0sYlt4dV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6cHR9LGJbZ3VdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOkwsYmluZFBvaW50Onl0fSxiW2J1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjpMLGJpbmRQb2ludDpodH0sYlt2dV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6dXJ9LGJbRXVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OnB0fSxiW1R1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjpMLGJpbmRQb2ludDp5dH07ZnVuY3Rpb24gX3QocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYodC52YWx1ZSlzd2l0Y2goci5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZSksdC52YWx1ZS5sZW5ndGgpe2Nhc2UgNDpyLnZlcnRleEF0dHJpYjRmdihlLHQudmFsdWUpO2JyZWFrO2Nhc2UgMzpyLnZlcnRleEF0dHJpYjNmdihlLHQudmFsdWUpO2JyZWFrO2Nhc2UgMjpyLnZlcnRleEF0dHJpYjJmdihlLHQudmFsdWUpO2JyZWFrO2Nhc2UgMTpyLnZlcnRleEF0dHJpYjFmdihlLHQudmFsdWUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ0aGUgbGVuZ3RoIG9mIGEgZmxvYXQgY29uc3RhbnQgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDQhIil9ZWxzZSByLmJpbmRCdWZmZXIoZHQsdC5idWZmZXIpLHIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52ZXJ0ZXhBdHRyaWJQb2ludGVyKGUsdC5udW1Db21wb25lbnRzfHx0LnNpemUsdC50eXBlfHxtdCx0Lm5vcm1hbGl6ZXx8ITEsdC5zdHJpZGV8fDAsdC5vZmZzZXR8fDApLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUsdC5kaXZpc29yfHwwKX19ZnVuY3Rpb24gYWUocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYodC52YWx1ZSlpZihyLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSx0LnZhbHVlLmxlbmd0aD09PTQpci52ZXJ0ZXhBdHRyaWI0aXYoZSx0LnZhbHVlKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVGhlIGxlbmd0aCBvZiBhbiBpbnRlZ2VyIGNvbnN0YW50IHZhbHVlIG11c3QgYmUgNCEiKTtlbHNlIHIuYmluZEJ1ZmZlcihkdCx0LmJ1ZmZlciksci5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSxyLnZlcnRleEF0dHJpYklQb2ludGVyKGUsdC5udW1Db21wb25lbnRzfHx0LnNpemUsdC50eXBlfHxzcix0LnN0cmlkZXx8MCx0Lm9mZnNldHx8MCksci52ZXJ0ZXhBdHRyaWJEaXZpc29yJiZyLnZlcnRleEF0dHJpYkRpdmlzb3IoZSx0LmRpdmlzb3J8fDApfX1mdW5jdGlvbiB4dChyLGUpe3JldHVybiBmdW5jdGlvbih0KXtpZih0LnZhbHVlKWlmKHIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHQudmFsdWUubGVuZ3RoPT09NClyLnZlcnRleEF0dHJpYjR1aXYoZSx0LnZhbHVlKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVGhlIGxlbmd0aCBvZiBhbiB1bnNpZ25lZCBpbnRlZ2VyIGNvbnN0YW50IHZhbHVlIG11c3QgYmUgNCEiKTtlbHNlIHIuYmluZEJ1ZmZlcihkdCx0LmJ1ZmZlciksci5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSxyLnZlcnRleEF0dHJpYklQb2ludGVyKGUsdC5udW1Db21wb25lbnRzfHx0LnNpemUsdC50eXBlfHxhcix0LnN0cmlkZXx8MCx0Lm9mZnNldHx8MCksci52ZXJ0ZXhBdHRyaWJEaXZpc29yJiZyLnZlcnRleEF0dHJpYkRpdmlzb3IoZSx0LmRpdmlzb3J8fDApfX1mdW5jdGlvbiBjcihyLGUsdCl7Y29uc3Qgbj10LnNpemUsaT10LmNvdW50O3JldHVybiBmdW5jdGlvbihvKXtyLmJpbmRCdWZmZXIoZHQsby5idWZmZXIpO2NvbnN0IHM9by5zaXplfHxvLm51bUNvbXBvbmVudHN8fG4sYT1zL2ksdT1vLnR5cGV8fG10LGQ9Ylt1XS5zaXplKnMsaD1vLm5vcm1hbGl6ZXx8ITEseT1vLm9mZnNldHx8MCx4PWQvaTtmb3IobGV0IGw9MDtsPGk7KytsKXIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZStsKSxyLnZlcnRleEF0dHJpYlBvaW50ZXIoZStsLGEsdSxoLGQseSt4KmwpLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUrbCxvLmRpdmlzb3J8fDApfX1jb25zdCBQPXt9O1BbbXRdPXtzaXplOjQsc2V0dGVyOl90fSxQW0VuXT17c2l6ZTo4LHNldHRlcjpfdH0sUFtUbl09e3NpemU6MTIsc2V0dGVyOl90fSxQW0FuXT17c2l6ZToxNixzZXR0ZXI6X3R9LFBbc3JdPXtzaXplOjQsc2V0dGVyOmFlfSxQW3duXT17c2l6ZTo4LHNldHRlcjphZX0sUFtTbl09e3NpemU6MTIsc2V0dGVyOmFlfSxQW1JuXT17c2l6ZToxNixzZXR0ZXI6YWV9LFBbYXJdPXtzaXplOjQsc2V0dGVyOnh0fSxQW2tuXT17c2l6ZTo4LHNldHRlcjp4dH0sUFtDbl09e3NpemU6MTIsc2V0dGVyOnh0fSxQW09uXT17c2l6ZToxNixzZXR0ZXI6eHR9LFBbSW5dPXtzaXplOjQsc2V0dGVyOmFlfSxQW0ZuXT17c2l6ZTo4LHNldHRlcjphZX0sUFtQbl09e3NpemU6MTIsc2V0dGVyOmFlfSxQW0RuXT17c2l6ZToxNixzZXR0ZXI6YWV9LFBbTm5dPXtzaXplOjQsc2V0dGVyOmNyLGNvdW50OjJ9LFBbTW5dPXtzaXplOjksc2V0dGVyOmNyLGNvdW50OjN9LFBbVW5dPXtzaXplOjE2LHNldHRlcjpjcixjb3VudDo0fTtjb25zdCBXdT0vRVJST1I6XHMqXGQrOihcZCspL2dpO2Z1bmN0aW9uIFZ1KHIsZT0iIix0PTApe2NvbnN0IG49Wy4uLmUubWF0Y2hBbGwoV3UpXSxpPW5ldyBNYXAobi5tYXAoKG8scyk9Pntjb25zdCBhPXBhcnNlSW50KG9bMV0pLHU9bltzKzFdLGY9dT91LmluZGV4OmUubGVuZ3RoLGQ9ZS5zdWJzdHJpbmcoby5pbmRleCxmKTtyZXR1cm5bYS0xLGRdfSkpO3JldHVybiByLnNwbGl0KGAKYCkubWFwKChvLHMpPT57Y29uc3QgYT1pLmdldChzKTtyZXR1cm5gJHtzKzErdH06ICR7b30ke2E/YAoKXl5eICR7YX1gOiIifWB9KS5qb2luKGAKYCl9Y29uc3QgVm49L15bIFx0XSpcbi87ZnVuY3Rpb24gSG4ocil7bGV0IGU9MDtyZXR1cm4gVm4udGVzdChyKSYmKGU9MSxyPXIucmVwbGFjZShWbiwiIikpLHtsaW5lT2Zmc2V0OmUsc2hhZGVyU291cmNlOnJ9fWZ1bmN0aW9uIEh1KHIsZSl7cmV0dXJuIHIuZXJyb3JDYWxsYmFjayhlKSxyLmNhbGxiYWNrJiZzZXRUaW1lb3V0KCgpPT57ci5jYWxsYmFjayhgJHtlfQoke3IuZXJyb3JzLmpvaW4oYApgKX1gKX0pLG51bGx9ZnVuY3Rpb24gWXUocixlLHQsbil7aWYobj1ufHxvciwhci5nZXRTaGFkZXJQYXJhbWV0ZXIodCxIYSkpe2NvbnN0IG89ci5nZXRTaGFkZXJJbmZvTG9nKHQpLHtsaW5lT2Zmc2V0OnMsc2hhZGVyU291cmNlOmF9PUhuKHIuZ2V0U2hhZGVyU291cmNlKHQpKSx1PWAke1Z1KGEsbyxzKX0KRXJyb3IgY29tcGlsaW5nICR7SnIocixlKX06ICR7b31gO3JldHVybiBuKHUpLHV9cmV0dXJuIiJ9ZnVuY3Rpb24gZnIocixlLHQpe2xldCBuLGksbztpZih0eXBlb2YgZT09ImZ1bmN0aW9uIiYmKHQ9ZSxlPXZvaWQgMCksdHlwZW9mIHI9PSJmdW5jdGlvbiIpdD1yLHI9dm9pZCAwO2Vsc2UgaWYociYmIUFycmF5LmlzQXJyYXkocikpe2NvbnN0IGY9cjt0PWYuZXJyb3JDYWxsYmFjayxyPWYuYXR0cmliTG9jYXRpb25zLG49Zi50cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLGk9Zi50cmFuc2Zvcm1GZWVkYmFja01vZGUsbz1mLmNhbGxiYWNrfWNvbnN0IHM9dHx8b3IsYT1bXSx1PXtlcnJvckNhbGxiYWNrKGYsLi4uZCl7YS5wdXNoKGYpLHMoZiwuLi5kKX0sdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nczpuLHRyYW5zZm9ybUZlZWRiYWNrTW9kZTppLGNhbGxiYWNrOm8sZXJyb3JzOmF9O3tsZXQgZj17fTtBcnJheS5pc0FycmF5KHIpP3IuZm9yRWFjaChmdW5jdGlvbihkLGgpe2ZbZF09ZT9lW2hdOmh9KTpmPXJ8fHt9LHUuYXR0cmliTG9jYXRpb25zPWZ9cmV0dXJuIHV9Y29uc3QganU9WyJWRVJURVhfU0hBREVSIiwiRlJBR01FTlRfU0hBREVSIl07ZnVuY3Rpb24gWHUocixlKXtpZihlLmluZGV4T2YoImZyYWciKT49MClyZXR1cm4gamE7aWYoZS5pbmRleE9mKCJ2ZXJ0Iik+PTApcmV0dXJuIFhhfWZ1bmN0aW9uIFF1KHIsZSx0KXtjb25zdCBuPXIuZ2V0QXR0YWNoZWRTaGFkZXJzKGUpO2Zvcihjb25zdCBpIG9mIG4pdC5oYXMoaSkmJnIuZGVsZXRlU2hhZGVyKGkpO3IuZGVsZXRlUHJvZ3JhbShlKX1jb25zdCBLdT0ocj0wKT0+bmV3IFByb21pc2UoZT0+c2V0VGltZW91dChlLHIpKTtmdW5jdGlvbiBxdShyLGUsdCl7Y29uc3Qgbj1yLmNyZWF0ZVByb2dyYW0oKSx7YXR0cmliTG9jYXRpb25zOmksdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nczpvLHRyYW5zZm9ybUZlZWRiYWNrTW9kZTpzfT1mcih0KTtmb3IobGV0IGE9MDthPGUubGVuZ3RoOysrYSl7bGV0IHU9ZVthXTtpZih0eXBlb2YgdT09InN0cmluZyIpe2NvbnN0IGY9Ym4odSksZD1mP2YudGV4dDp1O2xldCBoPXJbanVbYV1dO2YmJmYudHlwZSYmKGg9WHUocixmLnR5cGUpfHxoKSx1PXIuY3JlYXRlU2hhZGVyKGgpLHIuc2hhZGVyU291cmNlKHUsSG4oZCkuc2hhZGVyU291cmNlKSxyLmNvbXBpbGVTaGFkZXIodSksci5hdHRhY2hTaGFkZXIobix1KX19T2JqZWN0LmVudHJpZXMoaSkuZm9yRWFjaCgoW2EsdV0pPT5yLmJpbmRBdHRyaWJMb2NhdGlvbihuLHUsYSkpO3tsZXQgYT1vO2EmJihhLmF0dHJpYnMmJihhPWEuYXR0cmlicyksQXJyYXkuaXNBcnJheShhKXx8KGE9T2JqZWN0LmtleXMoYSkpLHIudHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhuLGEsc3x8UWEpKX1yZXR1cm4gci5saW5rUHJvZ3JhbShuKSxufWZ1bmN0aW9uIEp1KHIsZSx0LG4saSl7Y29uc3Qgbz1mcih0LG4saSkscz1uZXcgU2V0KGUpLGE9cXUocixlLG8pO2Z1bmN0aW9uIHUoZixkKXtjb25zdCBoPWVjKGYsZCxvLmVycm9yQ2FsbGJhY2spO3JldHVybiBoJiZRdShmLGQscyksaH1pZihvLmNhbGxiYWNrKXtadShyLGEpLnRoZW4oKCk9Pntjb25zdCBmPXUocixhKTtvLmNhbGxiYWNrKGYsZj92b2lkIDA6YSl9KTtyZXR1cm59cmV0dXJuIHUocixhKT92b2lkIDA6YX1hc3luYyBmdW5jdGlvbiBadShyLGUpe2NvbnN0IHQ9ci5nZXRFeHRlbnNpb24oIktIUl9wYXJhbGxlbF9zaGFkZXJfY29tcGlsZSIpLG49dD8obyxzKT0+by5nZXRQcm9ncmFtUGFyYW1ldGVyKHMsdC5DT01QTEVUSU9OX1NUQVRVU19LSFIpOigpPT4hMDtsZXQgaT0wO2RvIGF3YWl0IEt1KGkpLGk9MWUzLzYwO3doaWxlKCFuKHIsZSkpfWZ1bmN0aW9uIGVjKHIsZSx0KXtpZih0PXR8fG9yLCFyLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxZYSkpe2NvbnN0IGk9ci5nZXRQcm9ncmFtSW5mb0xvZyhlKTt0KGBFcnJvciBpbiBwcm9ncmFtIGxpbmtpbmc6ICR7aX1gKTtjb25zdCBzPXIuZ2V0QXR0YWNoZWRTaGFkZXJzKGUpLm1hcChhPT5ZdShyLHIuZ2V0U2hhZGVyUGFyYW1ldGVyKGEsci5TSEFERVJfVFlQRSksYSx0KSk7cmV0dXJuYCR7aX0KJHtzLmZpbHRlcihhPT5hKS5qb2luKGAKYCl9YH19ZnVuY3Rpb24gdGMocixlLHQsbixpKXtyZXR1cm4gSnUocixlLHQsbixpKX1mdW5jdGlvbiBZbihyKXtjb25zdCBlPXIubmFtZTtyZXR1cm4gZS5zdGFydHNXaXRoKCJnbF8iKXx8ZS5zdGFydHNXaXRoKCJ3ZWJnbF8iKX1jb25zdCByYz0vKFwufFxbfF18XHcrKS9nLG5jPXI9PnI+PSIwIiYmcjw9IjkiO2Z1bmN0aW9uIGljKHIsZSx0LG4pe2NvbnN0IGk9ci5zcGxpdChyYykuZmlsdGVyKGE9PmEhPT0iIik7bGV0IG89MCxzPSIiO2Zvcig7Oyl7Y29uc3QgYT1pW28rK107cys9YTtjb25zdCB1PW5jKGFbMF0pLGY9dT9wYXJzZUludChhKTphO2lmKHUmJihzKz1pW28rK10pLG89PT1pLmxlbmd0aCl7dFtmXT1lO2JyZWFrfWVsc2V7Y29uc3QgaD1pW28rK10seT1oPT09IlsiLHg9dFtmXXx8KHk/W106e30pO3RbZl09eCx0PXgsbltzXT1uW3NdfHxmdW5jdGlvbihsKXtyZXR1cm4gZnVuY3Rpb24oZyl7am4obCxnKX19KHgpLHMrPWh9fX1mdW5jdGlvbiBvYyhyLGUpe2xldCB0PTA7ZnVuY3Rpb24gbihhLHUsZil7Y29uc3QgZD11Lm5hbWUuZW5kc1dpdGgoIlswXSIpLGg9dS50eXBlLHk9YltoXTtpZigheSl0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gdHlwZTogMHgke2gudG9TdHJpbmcoMTYpfWApO2xldCB4O2lmKHkuYmluZFBvaW50KXtjb25zdCBsPXQ7dCs9dS5zaXplLGQ/eD15LmFycmF5U2V0dGVyKHIsaCxsLGYsdS5zaXplKTp4PXkuc2V0dGVyKHIsaCxsLGYsdS5zaXplKX1lbHNlIHkuYXJyYXlTZXR0ZXImJmQ/eD15LmFycmF5U2V0dGVyKHIsZik6eD15LnNldHRlcihyLGYpO3JldHVybiB4LmxvY2F0aW9uPWYseH1jb25zdCBpPXt9LG89e30scz1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSx2bik7Zm9yKGxldCBhPTA7YTxzOysrYSl7Y29uc3QgdT1yLmdldEFjdGl2ZVVuaWZvcm0oZSxhKTtpZihZbih1KSljb250aW51ZTtsZXQgZj11Lm5hbWU7Zi5lbmRzV2l0aCgiWzBdIikmJihmPWYuc3Vic3RyKDAsZi5sZW5ndGgtMykpO2NvbnN0IGQ9ci5nZXRVbmlmb3JtTG9jYXRpb24oZSx1Lm5hbWUpO2lmKGQpe2NvbnN0IGg9bihlLHUsZCk7aVtmXT1oLGljKGYsaCxvLGkpfX1yZXR1cm4gaX1mdW5jdGlvbiBzYyhyLGUpe2NvbnN0IHQ9e30sbj1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxxYSk7Zm9yKGxldCBpPTA7aTxuOysraSl7Y29uc3Qgbz1yLmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhlLGkpO3Rbby5uYW1lXT17aW5kZXg6aSx0eXBlOm8udHlwZSxzaXplOm8uc2l6ZX19cmV0dXJuIHR9ZnVuY3Rpb24gYWMocixlKXtjb25zdCB0PXIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLHZuKSxuPVtdLGk9W107Zm9yKGxldCBhPTA7YTx0OysrYSl7aS5wdXNoKGEpLG4ucHVzaCh7fSk7Y29uc3QgdT1yLmdldEFjdGl2ZVVuaWZvcm0oZSxhKTtuW2FdLm5hbWU9dS5uYW1lfVtbIlVOSUZPUk1fVFlQRSIsInR5cGUiXSxbIlVOSUZPUk1fU0laRSIsInNpemUiXSxbIlVOSUZPUk1fQkxPQ0tfSU5ERVgiLCJibG9ja05keCJdLFsiVU5JRk9STV9PRkZTRVQiLCJvZmZzZXQiXV0uZm9yRWFjaChmdW5jdGlvbihhKXtjb25zdCB1PWFbMF0sZj1hWzFdO3IuZ2V0QWN0aXZlVW5pZm9ybXMoZSxpLHJbdV0pLmZvckVhY2goZnVuY3Rpb24oZCxoKXtuW2hdW2ZdPWR9KX0pO2NvbnN0IG89e30scz1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxKYSk7Zm9yKGxldCBhPTA7YTxzOysrYSl7Y29uc3QgdT1yLmdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUoZSxhKSxmPXtpbmRleDpyLmdldFVuaWZvcm1CbG9ja0luZGV4KGUsdSksdXNlZEJ5VmVydGV4U2hhZGVyOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSxaYSksdXNlZEJ5RnJhZ21lbnRTaGFkZXI6ci5nZXRBY3RpdmVVbmlmb3JtQmxvY2tQYXJhbWV0ZXIoZSxhLGV1KSxzaXplOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSx0dSksdW5pZm9ybUluZGljZXM6ci5nZXRBY3RpdmVVbmlmb3JtQmxvY2tQYXJhbWV0ZXIoZSxhLHJ1KX07Zi51c2VkPWYudXNlZEJ5VmVydGV4U2hhZGVyfHxmLnVzZWRCeUZyYWdtZW50U2hhZGVyLG9bdV09Zn1yZXR1cm57YmxvY2tTcGVjczpvLHVuaWZvcm1EYXRhOm59fWZ1bmN0aW9uIGpuKHIsZSl7Zm9yKGNvbnN0IHQgaW4gZSl7Y29uc3Qgbj1yW3RdO3R5cGVvZiBuPT0iZnVuY3Rpb24iP24oZVt0XSk6am4oclt0XSxlW3RdKX19ZnVuY3Rpb24gWG4ociwuLi5lKXtjb25zdCB0PXIudW5pZm9ybVNldHRlcnN8fHIsbj1lLmxlbmd0aDtmb3IobGV0IGk9MDtpPG47KytpKXtjb25zdCBvPWVbaV07aWYoQXJyYXkuaXNBcnJheShvKSl7Y29uc3Qgcz1vLmxlbmd0aDtmb3IobGV0IGE9MDthPHM7KythKVhuKHQsb1thXSl9ZWxzZSBmb3IoY29uc3QgcyBpbiBvKXtjb25zdCBhPXRbc107YSYmYShvW3NdKX19fWZ1bmN0aW9uIHVjKHIsZSl7Y29uc3QgdD17fSxuPXIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLEthKTtmb3IobGV0IGk9MDtpPG47KytpKXtjb25zdCBvPXIuZ2V0QWN0aXZlQXR0cmliKGUsaSk7aWYoWW4obykpY29udGludWU7Y29uc3Qgcz1yLmdldEF0dHJpYkxvY2F0aW9uKGUsby5uYW1lKSxhPVBbby50eXBlXSx1PWEuc2V0dGVyKHIscyxhKTt1LmxvY2F0aW9uPXMsdFtvLm5hbWVdPXV9cmV0dXJuIHR9ZnVuY3Rpb24gY2MocixlKXtmb3IoY29uc3QgdCBpbiBlKXtjb25zdCBuPXJbdF07biYmbihlW3RdKX19ZnVuY3Rpb24gZmMocixlLHQpe3QudmVydGV4QXJyYXlPYmplY3Q/ci5iaW5kVmVydGV4QXJyYXkodC52ZXJ0ZXhBcnJheU9iamVjdCk6KGNjKGUuYXR0cmliU2V0dGVyc3x8ZSx0LmF0dHJpYnMpLHQuaW5kaWNlcyYmci5iaW5kQnVmZmVyKFZhLHQuaW5kaWNlcykpfWZ1bmN0aW9uIFFuKHIsZSl7Y29uc3QgdD1vYyhyLGUpLG49dWMocixlKSxpPXtwcm9ncmFtOmUsdW5pZm9ybVNldHRlcnM6dCxhdHRyaWJTZXR0ZXJzOm59O3JldHVybiBOZShyKSYmKGkudW5pZm9ybUJsb2NrU3BlYz1hYyhyLGUpLGkudHJhbnNmb3JtRmVlZGJhY2tJbmZvPXNjKHIsZSkpLGl9Y29uc3QgbGM9L1xzfHt8fXw7LztmdW5jdGlvbiBkYyhyLGUsdCxuLGkpe2NvbnN0IG89ZnIodCxuLGkpLHM9W107aWYoZT1lLm1hcChmdW5jdGlvbihmKXtpZighbGMudGVzdChmKSl7Y29uc3QgZD1ibihmKTtpZihkKWY9ZC50ZXh0O2Vsc2V7Y29uc3QgaD1gbm8gZWxlbWVudCB3aXRoIGlkOiAke2Z9YDtvLmVycm9yQ2FsbGJhY2soaCkscy5wdXNoKGgpfX1yZXR1cm4gZn0pLHMubGVuZ3RoKXJldHVybiBIdShvLCIiKTtjb25zdCBhPW8uY2FsbGJhY2s7YSYmKG8uY2FsbGJhY2s9KGYsZCk9PnthKGYsZj92b2lkIDA6UW4ocixkKSl9KTtjb25zdCB1PXRjKHIsZSxvKTtyZXR1cm4gdT9RbihyLHUpOm51bGx9Y29uc3QgbWM9NCxLbj01MTIzO2Z1bmN0aW9uIGhjKHIsZSx0LG4saSxvKXt0PXQ9PT12b2lkIDA/bWM6dDtjb25zdCBzPWUuaW5kaWNlcyxhPWUuZWxlbWVudFR5cGUsdT1uPT09dm9pZCAwP2UubnVtRWxlbWVudHM6bjtpPWk9PT12b2lkIDA/MDppLGF8fHM/byE9PXZvaWQgMD9yLmRyYXdFbGVtZW50c0luc3RhbmNlZCh0LHUsYT09PXZvaWQgMD9LbjplLmVsZW1lbnRUeXBlLGksbyk6ci5kcmF3RWxlbWVudHModCx1LGE9PT12b2lkIDA/S246ZS5lbGVtZW50VHlwZSxpKTpvIT09dm9pZCAwP3IuZHJhd0FycmF5c0luc3RhbmNlZCh0LGksdSxvKTpyLmRyYXdBcnJheXModCxpLHUpfWNvbnN0IHFuPTM2MTYwLGd0PTM2MTYxLHBjPTM1NTMseWM9NTEyMSxfYz02NDAyLHhjPTY0MDgsZ2M9MzMxOTAsYmM9MzYwMTIsdmM9MzUwNTYsRWM9MzYwMTMsVGM9MzI4NTQsQWM9MzI4NTUsd2M9MzYxOTQsSm49MzMxODksWm49NjQwMSxlaT0zNjE2OCxscj0zNDA0MSxkcj0zNjA2NCxidD0zNjA5Nix0aT0zNjEyOCxtcj0zMzMwNixocj0zMzA3MSxwcj05NzI5LFNjPVt7Zm9ybWF0OnhjLHR5cGU6eWMsbWluOnByLHdyYXA6aHJ9LHtmb3JtYXQ6bHJ9XSxWPXt9O1ZbbHJdPW1yLFZbWm5dPXRpLFZbZWldPXRpLFZbX2NdPWJ0LFZbSm5dPWJ0LFZbZ2NdPWJ0LFZbYmNdPWJ0LFZbdmNdPW1yLFZbRWNdPW1yO2Z1bmN0aW9uIFJjKHIsZSl7cmV0dXJuIFZbcl18fFZbZV19Y29uc3QgdWU9e307dWVbVGNdPSEwLHVlW0FjXT0hMCx1ZVt3Y109ITAsdWVbbHJdPSEwLHVlW0puXT0hMCx1ZVtabl09ITAsdWVbZWldPSEwO2Z1bmN0aW9uIEljKHIpe3JldHVybiB1ZVtyXX1jb25zdCBGYz0zMjtmdW5jdGlvbiBQYyhyKXtyZXR1cm4gcj49ZHImJnI8ZHIrRmN9ZnVuY3Rpb24gdnQocixlLHQsbil7Y29uc3QgaT1xbixvPXIuY3JlYXRlRnJhbWVidWZmZXIoKTtyLmJpbmRGcmFtZWJ1ZmZlcihpLG8pLHQ9dHx8ci5kcmF3aW5nQnVmZmVyV2lkdGgsbj1ufHxyLmRyYXdpbmdCdWZmZXJIZWlnaHQsZT1lfHxTYztjb25zdCBzPVtdLGE9e2ZyYW1lYnVmZmVyOm8sYXR0YWNobWVudHM6W10sd2lkdGg6dCxoZWlnaHQ6bn07cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbih1LGYpe2xldCBkPXUuYXR0YWNobWVudDtjb25zdCBoPXUuc2FtcGxlcyx5PXUuZm9ybWF0O2xldCB4PXUuYXR0YWNobWVudFBvaW50fHxSYyh5LHUuaW50ZXJuYWxGb3JtYXQpO2lmKHh8fCh4PWRyK2YpLFBjKHgpJiZzLnB1c2goeCksIWQpaWYoaCE9PXZvaWQgMHx8SWMoeSkpZD1yLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLHIuYmluZFJlbmRlcmJ1ZmZlcihndCxkKSxoPjE/ci5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoZ3QsaCx5LHQsbik6ci5yZW5kZXJidWZmZXJTdG9yYWdlKGd0LHksdCxuKTtlbHNle2NvbnN0IGw9T2JqZWN0LmFzc2lnbih7fSx1KTtsLndpZHRoPXQsbC5oZWlnaHQ9bixsLmF1dG89PT12b2lkIDAmJihsLmF1dG89ITEsbC5taW49bC5taW58fGwubWluTWFnfHxwcixsLm1hZz1sLm1hZ3x8bC5taW5NYWd8fHByLGwud3JhcFM9bC53cmFwU3x8bC53cmFwfHxocixsLndyYXBUPWwud3JhcFR8fGwud3JhcHx8aHIpLGQ9Z24ocixsKX1pZigkbyhyLGQpKXIuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoaSx4LGd0LGQpO2Vsc2UgaWYoSHQocixkKSl1LmxheWVyIT09dm9pZCAwP3IuZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoaSx4LGQsdS5sZXZlbHx8MCx1LmxheWVyKTpyLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGkseCx1LnRhcmdldHx8cGMsZCx1LmxldmVsfHwwKTtlbHNlIHRocm93IG5ldyBFcnJvcigidW5rbm93biBhdHRhY2htZW50IHR5cGUiKTthLmF0dGFjaG1lbnRzLnB1c2goZCl9KSxyLmRyYXdCdWZmZXJzJiZyLmRyYXdCdWZmZXJzKHMpLGF9ZnVuY3Rpb24gRGMocixlLHQpe3Q9dHx8cW4sZT8oci5iaW5kRnJhbWVidWZmZXIodCxlLmZyYW1lYnVmZmVyKSxyLnZpZXdwb3J0KDAsMCxlLndpZHRoLGUuaGVpZ2h0KSk6KHIuYmluZEZyYW1lYnVmZmVyKHQsbnVsbCksci52aWV3cG9ydCgwLDAsci5kcmF3aW5nQnVmZmVyV2lkdGgsci5kcmF3aW5nQnVmZmVySGVpZ2h0KSl9ZnVuY3Rpb24gUyhyLGUpe3JldHVybigpPT5lIGluc3RhbmNlb2YgV2ViR0xUZXh0dXJlP2U6Z24ocix7c3JjOmUsd3JhcDpyLkNMQU1QX1RPX0VER0V9KX1jb25zdCByaT0yO2NsYXNzIHhle2NvbnN0cnVjdG9yKGUpe3AodGhpcywiaWQiLCJfIik7cCh0aGlzLCJjb250ZXh0Iik7cCh0aGlzLCJvdXRwdXQiKTtwKHRoaXMsImZiaSIpO3AodGhpcywib3B0aW9ucyIpO3AodGhpcywicHJvZ3JhbUluZm8iKTtwKHRoaXMsImJ1ZmZlckluZm8iKTtwKHRoaXMsInByb2ZpbGVyIik7cCh0aGlzLCJsYXN0UnVuIik7Y29uc3R7Y29udGV4dDp0LHdpZHRoOm4saGVpZ2h0Oml9PWU7dGhpcy5jb250ZXh0PXQsdGhpcy5vcHRpb25zPWU7Y29uc3Qgbz10aGlzLmJ1aWxkRGVmaW5lcygpO3RoaXMucHJvZ3JhbUluZm89ZGModGhpcy5jb250ZXh0LFtvK3RoaXMuZ2V0VmVydGV4U2hhZGVyKCksbyt0aGlzLmdldEZyYWdtZW50U2hhZGVyKCldKSx0aGlzLmJ1ZmZlckluZm89bHModGhpcy5jb250ZXh0LHRoaXMuZ2V0QnVmZmVycygpKSx0aGlzLmZiaT12dCh0aGlzLmNvbnRleHQsW3tmb3JtYXQ6dGhpcy5jb250ZXh0LlJHQkEsdHlwZTp0aGlzLmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dGhpcy5jb250ZXh0LkxJTkVBUix3cmFwOnRoaXMuY29udGV4dC5DTEFNUF9UT19FREdFfV0sbixpKSx0aGlzLm91dHB1dD10aGlzLmZiaS5hdHRhY2htZW50c1swXX1yZXNpemVPdXRwdXQoZSx0KXt0aGlzLmZiaT12dCh0aGlzLmNvbnRleHQsW3tmb3JtYXQ6dGhpcy5jb250ZXh0LlJHQkEsdHlwZTp0aGlzLmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dGhpcy5jb250ZXh0LkxJTkVBUix3cmFwOnRoaXMuY29udGV4dC5DTEFNUF9UT19FREdFfV0sZSx0KSx0aGlzLm9wdGlvbnMud2lkdGg9ZSx0aGlzLm9wdGlvbnMuaGVpZ2h0PXQsdGhpcy5vdXRwdXQ9dGhpcy5mYmkuYXR0YWNobWVudHNbMF19Z2V0RGVmaW5lcygpe3JldHVybnt9fWdldEJ1ZmZlcnMoKXtyZXR1cm57cG9zaXRpb246e251bUNvbXBvbmVudHM6MixkYXRhOlstMSwtMSwtMSwxLDEsLTEsMSwxLC0xLDEsMSwtMV19LHRleHR1cmVfY29vcmQ6e251bUNvbXBvbmVudHM6MixkYXRhOlswLDAsMCwxLDEsMCwxLDEsMCwxLDEsMF19fX1idWlsZERlZmluZXMoKXtsZXQgZT0iIjtjb25zdCB0PXRoaXMuZ2V0RGVmaW5lcygpO2ZvcihsZXQgbiBpbiB0KWUrPWAjZGVmaW5lICR7bn0gJHt0W25dLnRvRml4ZWQoMSl9CmA7cmV0dXJuIGV9cnVuKGUpe3ZhciBpLG8scyxhLHUsZjsoaT10aGlzLnByb2ZpbGVyKT09bnVsbHx8aS5wdXNoQ29udGV4dChgWyR7dGhpcy5pZH1dIFBST0cgOiAke3RoaXMuY29uc3RydWN0b3IubmFtZX1gKSwobz10aGlzLnByb2ZpbGVyKT09bnVsbHx8by5wdXNoQ29udGV4dChgWyR7dGhpcy5pZH1dIFVOSUZPUk1TYCk7Zm9yKGNvbnN0IGQgaW4gZSl0eXBlb2YgZVtkXT09ImZ1bmN0aW9uIiYmKChzPXRoaXMucHJvZmlsZXIpPT1udWxsfHxzLnB1c2hDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JIDogJHtkfWApLGVbZF09ZVtkXSgpLChhPXRoaXMucHJvZmlsZXIpPT1udWxsfHxhLnBvcENvbnRleHQoYFske3RoaXMuaWR9XSBVTkkgOiAke2R9YCkpOyh1PXRoaXMucHJvZmlsZXIpPT1udWxsfHx1LnBvcENvbnRleHQoYFske3RoaXMuaWR9XSBVTklGT1JNU2ApO2NvbnN0IHQ9RGF0ZS5ub3coKTtsZXQgbj0wO3RoaXMubGFzdFJ1biYmKG49KHQtdGhpcy5sYXN0UnVuKS8xZTMpLHRoaXMubGFzdFJ1bj10LHRoaXMuY29udGV4dC52aWV3cG9ydCgwLDAsdGhpcy5jb250ZXh0LmNhbnZhcy53aWR0aCx0aGlzLmNvbnRleHQuY2FudmFzLmhlaWdodCksdGhpcy5jb250ZXh0LnVzZVByb2dyYW0odGhpcy5wcm9ncmFtSW5mby5wcm9ncmFtKSxmYyh0aGlzLmNvbnRleHQsdGhpcy5wcm9ncmFtSW5mbyx0aGlzLmJ1ZmZlckluZm8pLFhuKHRoaXMucHJvZ3JhbUluZm8se2RlbHRhOm4sY2FudmFzOlt0aGlzLmNvbnRleHQuY2FudmFzLndpZHRoLHRoaXMuY29udGV4dC5jYW52YXMuaGVpZ2h0XSwuLi5lfSksRGModGhpcy5jb250ZXh0LHRoaXMub3B0aW9ucy5kaXNhYmxlRnJhbWVidWZmZXI/bnVsbDp0aGlzLmZiaSksaGModGhpcy5jb250ZXh0LHRoaXMuYnVmZmVySW5mbyksKGY9dGhpcy5wcm9maWxlcik9PW51bGx8fGYucG9wQ29udGV4dChgWyR7dGhpcy5pZH1dIFBST0cgOiAke3RoaXMuY29uc3RydWN0b3IubmFtZX1gKX1zZXRQcm9maWxlcihlKXt0aGlzLnByb2ZpbGVyPWV9fXZhciBOYz1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwp1bmlmb3JtIHNhbXBsZXIyRCBtYXNrOwoKdmVjNCBsb29wKCk7Cgp2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IGxvb3AoKTsgfQpgLE1jPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgVWMgZXh0ZW5kcyB4ZXtnZXREZWZpbmVzKCl7dmFyIGU7cmV0dXJue1JBRElVUzooZT10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD9lOjF9fWdldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIE5jK3RoaXMuY3JlYXRlTG9vcEZ1bmN0aW9uKCl9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIE1jfWNyZWF0ZUxvb3BGdW5jdGlvbigpe3ZhciB0O2xldCBlPSh0PXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP3Q6MTtyZXR1cm5gCgogICAgICAgIHZlYzQgbG9vcCgpIHsgCiAgICAgICAgICAgIHZlYzQgcmVzdWx0ID0gdmVjNCgwLDAsMCwwKTsKICAgICAgICAgICAgZmxvYXQgZmFjdG9yU3VtID0gMC47CgogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRSYWRpdXMgPSB2ZWMyKC0ke2V9LikgLyBjYW52YXM7CiAgICAgICAgICAgIHZlYzIgbm9ybWFsaXplZEluY3JlbWVudCA9IHZlYzIoMS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIGRpZmYgPSBub3JtYWxpemVkUmFkaXVzOwogICAgICAgICAgICBmbG9hdCBtYXhMZW5ndGggPSBsZW5ndGgobm9ybWFsaXplZFJhZGl1cyk7CgogICAgICAgICAgICBmb3IoaW50IHk9LSR7ZX07IHk8JHtlKzF9OyArK3kpIHsKICAgICAgICAgICAgICAgIGZvcihpbnQgeD0tJHtlfTsgeDwke2UrMX07ICsreCkgewogICAgICAgICAgICAgICAgICAgIGZsb2F0IGZhY3RvciA9ICgxLi0gdGV4dHVyZTJEKG1hc2ssIF90ZXh0dXJlX2Nvb3JkICsgZGlmZikuYSkgKiAobWF4TGVuZ3RoIC0gbGVuZ3RoKGRpZmYpKSAvIG1heExlbmd0aDsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gZmFjdG9yICogdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkICsgZGlmZik7CiAgICAgICAgICAgICAgICAgICAgZmFjdG9yU3VtICs9IGZhY3RvcjsKICAgICAgICAgICAgICAgICAgICBkaWZmLnggKz0gbm9ybWFsaXplZEluY3JlbWVudC54OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZGlmZi55ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueTsKICAgICAgICAgICAgICAgIGRpZmYueCA9IG5vcm1hbGl6ZWRSYWRpdXMueDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVzdWx0IC8gZmFjdG9yU3VtOwogICAgICAgIH1gfX12YXIga2M9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSBzYW1wbGVyMkQgYmFja2dyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgZm9yZWdyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgdGhyZXNob2xkOwoKdm9pZCBtYWluKCkgewogIHZlYzQgYmFja2dyb3VuZENvbG9yID0gdGV4dHVyZTJEKGJhY2tncm91bmQsIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IGZvcmVncm91bmRDb2xvciA9IHRleHR1cmUyRChmb3JlZ3JvdW5kLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCB0cmVzaG9sZENvbG9yID0gdGV4dHVyZTJEKHRocmVzaG9sZCwgX3RleHR1cmVfY29vcmQpOwogIGdsX0ZyYWdDb2xvciA9IGZvcmVncm91bmRDb2xvciAqIHRyZXNob2xkQ29sb3IuYSArCiAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yICogKDEuIC0gdHJlc2hvbGRDb2xvci5hKTsKfQpgLENjPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwogIF90ZXh0dXJlX2Nvb3JkLnkgPSAxLiAtIHRleHR1cmVfY29vcmQueTsKfQpgO2NsYXNzIHlyIGV4dGVuZHMgeGV7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4ga2N9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIENjfX1jbGFzcyBfcntjb25zdHJ1Y3Rvcigpe3AodGhpcywic3RlcHMiLFtdKTtwKHRoaXMsInByb2ZpbGVyIil9YWRkU3RlcChlKXt0aGlzLnN0ZXBzLnB1c2goZSl9YXN5bmMgcnVuKCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5zdGVwcyllLnByb2dyYW0ucnVuKGUuZ2V0VW5pZm9ybXMoKSl9cmVzaXplT3V0cHV0KGUsdCl7dmFyIG4saTsobj10aGlzLnByb2ZpbGVyKT09bnVsbHx8bi5wdXNoQ29udGV4dChgUElQIFske3RoaXMuY29uc3RydWN0b3IubmFtZX1dYCk7Zm9yKGNvbnN0IG8gb2YgdGhpcy5zdGVwcylvLnByZXZlbnRSZXNpemV8fG8ucHJvZ3JhbS5yZXNpemVPdXRwdXQoZSx0KTsoaT10aGlzLnByb2ZpbGVyKT09bnVsbHx8aS5wb3BDb250ZXh0KGBQSVAgWyR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfV1gKX1zZXRQcm9maWxlcihlKXt0aGlzLnByb2ZpbGVyPWU7Zm9yKGNvbnN0IHQgb2YgdGhpcy5zdGVwcyl0LnByb2dyYW0uc2V0UHJvZmlsZXIoZSl9c2V0SWQoZSl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5zdGVwcyl0LnByb2dyYW0uaWQ9ZX19Y2xhc3MgeHIgZXh0ZW5kcyBfcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7cCh0aGlzLCJwcmVjaXNlTWFza0VuYWJsZWQiLCExKX19Y29uc3QgT2M9MTAsQmM9MixMYz04O2NsYXNzIEdjIGV4dGVuZHMgeHJ7Y29uc3RydWN0b3IodCxuKXtzdXBlcigpO3AodGhpcywiaW5wdXRJbWFnZSIpO3AodGhpcywiaW5wdXRNYXNrIik7cCh0aGlzLCJibHVyIik7dGhpcy5jb250ZXh0PXQsdGhpcy5yYWRpdXM9bjtjb25zdCBpPXtjb250ZXh0OnQsaGVpZ2h0OnQuY2FudmFzLmhlaWdodCx3aWR0aDp0LmNhbnZhcy53aWR0aH07dGhpcy5ibHVyPW5ldyBVYyh7Li4uaSxyYWRpdXM6biwuLi50aGlzLmdldEJsdXJUZXh0dXJlU2l6ZSh0LmNhbnZhcy53aWR0aCx0LmNhbnZhcy5oZWlnaHQpfSk7Y29uc3Qgbz1uZXcgeXIoey4uLmksZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSk7dGhpcy5hZGRTdGVwKHtwcm9ncmFtOnRoaXMuYmx1cixwcmV2ZW50UmVzaXplOiEwLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6Uyh0LHRoaXMuaW5wdXRJbWFnZSksbWFzazpTKHQsdGhpcy5pbnB1dE1hc2spfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06byxnZXRVbmlmb3JtczooKT0+KHtiYWNrZ3JvdW5kOlModCx0aGlzLmJsdXIub3V0cHV0KSxmb3JlZ3JvdW5kOlModCx0aGlzLmlucHV0SW1hZ2UpLHRocmVzaG9sZDpTKHQsdGhpcy5pbnB1dE1hc2spfSl9KX1nZXRCbHVyVGV4dHVyZVNpemUodCxuKXtjb25zdCBpPXRoaXMucmFkaXVzPk9jP0xjOkJjO3JldHVybnt3aWR0aDpNYXRoLm1heChyaSx0L2kpLGhlaWdodDpNYXRoLm1heChyaSxuL2kpfX1zZXREYXRhKHQsbil7dGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn1yZXNpemVPdXRwdXQodCxuKXtzdXBlci5yZXNpemVPdXRwdXQodCxuKTtjb25zdCBpPXRoaXMuZ2V0Qmx1clRleHR1cmVTaXplKHQsbik7dGhpcy5ibHVyLnJlc2l6ZU91dHB1dChpLndpZHRoLGkuaGVpZ2h0KX19Y2xhc3MgbmkgZXh0ZW5kcyB4cntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpO3AodGhpcywiaW5wdXRJbWFnZSIpO3AodGhpcywiaW5wdXRCYWNrZ3JvdW5kSW1hZ2UiKTtwKHRoaXMsImlucHV0TWFzayIpO3AodGhpcywicHJlY2lzZU1hc2tFbmFibGVkIiwhMCk7dGhpcy5jb250ZXh0PXQ7Y29uc3Qgbj17Y29udGV4dDp0LGhlaWdodDp0LmNhbnZhcy5oZWlnaHQsd2lkdGg6dC5jYW52YXMud2lkdGh9LGk9bmV3IHlyKHsuLi5uLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTppLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6Uyh0LHRoaXMuaW5wdXRCYWNrZ3JvdW5kSW1hZ2UpLGZvcmVncm91bmQ6Uyh0LHRoaXMuaW5wdXRJbWFnZSksdGhyZXNob2xkOlModCx0aGlzLmlucHV0TWFzayl9KX0pfXNldERhdGEodCxuKXt0aGlzLmlucHV0SW1hZ2U9dCx0aGlzLmlucHV0TWFzaz1ufX1jbGFzcyAkYyBleHRlbmRzIG5pe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKTtwKHRoaXMsImZyYW1lUmVhZGVyIik7cCh0aGlzLCJwcmVjaXNlTWFza0VuYWJsZWQiLCEwKX1zZXQgaW5wdXRWaWRlbyh0KXt0aGlzLmZyYW1lUmVhZGVyPXQuZ2V0UmVhZGVyKCksdGhpcy5yZWFkTmV4dFZpZGVvRnJhbWUoKX1hc3luYyBydW4oKXt0aGlzLmZyYW1lUmVhZGVyJiYoYXdhaXQgc3VwZXIucnVuKCksdGhpcy5yZWFkTmV4dFZpZGVvRnJhbWUoKSl9YXN5bmMgcmVhZE5leHRWaWRlb0ZyYW1lKCl7dmFyIG47Y29uc3QgdD1hd2FpdCgobj10aGlzLmZyYW1lUmVhZGVyKT09bnVsbD92b2lkIDA6bi5yZWFkKCkpO3QhPW51bGwmJnQudmFsdWUmJih0aGlzLmlucHV0QmFja2dyb3VuZEltYWdlPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKHQudmFsdWUpLHQudmFsdWUuY2xvc2UoKSl9fXZhciB6Yz1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdmVjNCBsb29wKCk7Cgp2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IGxvb3AoKTsgfQpgLFdjPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmAsZ3I9KHI9PihyW3IuTElORUFSPTBdPSJMSU5FQVIiLHJbci5HQVVTU0lBTj0xXT0iR0FVU1NJQU4iLHIpKShncnx8e30pO2NsYXNzIGlpIGV4dGVuZHMgeGV7Z2V0RGVmaW5lcygpe3ZhciBlO3JldHVybntSQURJVVM6KGU9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/ZToxfX1nZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiB6Yyt0aGlzLmNyZWF0ZUxvb3BGdW5jdGlvbigpfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBXY31jcmVhdGVMb29wRnVuY3Rpb24oKXt2YXIgdDtsZXQgZT0odD10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD90OjE7cmV0dXJuYAoKICAgICAgICB2ZWM0IGxvb3AoKSB7IAogICAgICAgICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMCwwLDAsMCk7CiAgICAgICAgICAgIGZsb2F0IGZhY3RvclN1bSA9IDAuOwoKICAgICAgICAgICAgdmVjMiBub3JtYWxpemVkUmFkaXVzID0gdmVjMigtJHtlfS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRJbmNyZW1lbnQgPSB2ZWMyKDEuKSAvIGNhbnZhczsKICAgICAgICAgICAgdmVjMiBkaWZmID0gbm9ybWFsaXplZFJhZGl1czsKCiAgICAgICAgICAgIGZvcihpbnQgeT0tJHtlfTsgeTwke2UrMX07ICsreSkgewogICAgICAgICAgICAgICAgZm9yKGludCB4PS0ke2V9OyB4PCR7ZSsxfTsgKyt4KSB7CiAgICAgICAgICAgICAgICAgICAgZmxvYXQgZmFjdG9yID0gMS47CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZhY3RvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpOwogICAgICAgICAgICAgICAgICAgIGZhY3RvclN1bSArPSBmYWN0b3I7CiAgICAgICAgICAgICAgICAgICAgZGlmZi54ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRpZmYueSArPSBub3JtYWxpemVkSW5jcmVtZW50Lnk7CiAgICAgICAgICAgICAgICBkaWZmLnggPSBub3JtYWxpemVkUmFkaXVzLng7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAvIGZhY3RvclN1bTsKICAgICAgICB9YH1nZXRGYWN0b3IoZSx0KXtzd2l0Y2godGhpcy5vcHRpb25zLnR5cGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5nZXRMaW5lYXJGYWN0b3IoZSx0KTtjYXNlIDA6ZGVmYXVsdDpyZXR1cm4gdGhpcy5nZXRMaW5lYXJGYWN0b3IoZSx0KX19Z2V0TGluZWFyRmFjdG9yKGUsdCl7cmV0dXJuIDF9Z2V0R2F1c3NpYW5GYWN0b3IoZSx0KXt2YXIgdTtjb25zdCBuPU1hdGguUEkqMixpPU1hdGgubWF4KCh1PXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP3U6MSwxKSxvPTEvKG4qaSoqMikscz0tKGUqKjIrdCoqMiksYT1vKnM7cmV0dXJuIG8qTWF0aC5FKiphfX1jbGFzcyBWYyBleHRlbmRzIHhye2NvbnN0cnVjdG9yKHQsbil7c3VwZXIoKTtwKHRoaXMsImlucHV0SW1hZ2UiKTtwKHRoaXMsImlucHV0TWFzayIpO3RoaXMuY29udGV4dD10O2NvbnN0IGk9e2NvbnRleHQ6dCxoZWlnaHQ6dC5jYW52YXMuaGVpZ2h0LHdpZHRoOnQuY2FudmFzLndpZHRofSxvPW5ldyBpaSh7Li4uaSxyYWRpdXM6bix0eXBlOmdyLkdBVVNTSUFOfSkscz1uZXcgeXIoey4uLmksZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSk7dGhpcy5hZGRTdGVwKHtwcm9ncmFtOm8sZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpTKHQsdGhpcy5pbnB1dEltYWdlKX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOnMsZ2V0VW5pZm9ybXM6KCk9Pih7YmFja2dyb3VuZDpTKHQsdGhpcy5pbnB1dEltYWdlKSxmb3JlZ3JvdW5kOlModCxvLm91dHB1dCksdGhyZXNob2xkOlModCx0aGlzLmlucHV0TWFzayl9KX0pfXNldERhdGEodCxuKXt0aGlzLmlucHV0SW1hZ2U9dCx0aGlzLmlucHV0TWFzaz1ufX1jbGFzcyBiciBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpO3AodGhpcywiZmJpMiIpO3RoaXMuZmJpMj12dCh0LmNvbnRleHQsW3tmb3JtYXQ6dC5jb250ZXh0LlJHQkEsdHlwZTp0LmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dC5jb250ZXh0LkxJTkVBUixtYWc6dC5jb250ZXh0LkxJTkVBUix3cmFwOnQuY29udGV4dC5DTEFNUF9UT19FREdFfV0sdC53aWR0aCx0LmhlaWdodCl9cnVuKHQpe2NvbnN0IG49dGhpcy5mYmk7dGhpcy5mYmk9dGhpcy5mYmkyLHRoaXMuZmJpMj1uLHRoaXMub3V0cHV0PXRoaXMuZmJpLmF0dGFjaG1lbnRzWzBdLHN1cGVyLnJ1bih7Li4udCxwcmV2aW91c19yZW5kZXJpbmc6dGhpcy5mYmkyLmF0dGFjaG1lbnRzWzBdfSl9cmVzaXplT3V0cHV0KHQsbil7c3VwZXIucmVzaXplT3V0cHV0KHQsbiksdGhpcy5mYmkyPXZ0KHRoaXMuY29udGV4dCxbe2Zvcm1hdDp0aGlzLmNvbnRleHQuUkdCQSx0eXBlOnRoaXMuY29udGV4dC5VTlNJR05FRF9CWVRFLG1pbjp0aGlzLmNvbnRleHQuTElORUFSLHdyYXA6dGhpcy5jb250ZXh0LkNMQU1QX1RPX0VER0V9XSx0LG4pfX12YXIgSGM9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKLy8gdW5pZm9ybSBmbG9hdCB0cmVzaG9sZDsKdW5pZm9ybSBzYW1wbGVyMkQgaW1hZ2Vfbm93Owp1bmlmb3JtIHNhbXBsZXIyRCBpbWFnZV9iZWZvcmU7CnVuaWZvcm0gc2FtcGxlcjJEIG1hc2tfbm93Owp1bmlmb3JtIHNhbXBsZXIyRCBtYXNrX2JlZm9yZTsKdW5pZm9ybSBzYW1wbGVyMkQgcHJldmlvdXNfcmVuZGVyaW5nOwp1bmlmb3JtIHZlYzIgY2FudmFzOwoKdW5pZm9ybSBmbG9hdCBkZWx0YTsKCmZsb2F0IGN1cnJlbnRfZmFjdG9yID0gMC42OTsKZmxvYXQgcHJldmlvdXNfZmFjdG9yID0gMC43NDsKZmxvYXQgdGhyZXNob2xkX2FjdGl2YXRpb24gPSAwLjU0OwoKZmxvYXQgbWFwKGZsb2F0IHZhbHVlLCBmbG9hdCBtaW4xLCBmbG9hdCBtYXgxLCBmbG9hdCBtaW4yLCBmbG9hdCBtYXgyKSB7CiAgcmV0dXJuIG1pbjIgKyAodmFsdWUgLSBtaW4xKSAqIChtYXgyIC0gbWluMikgLyAobWF4MSAtIG1pbjEpOwp9CgpmbG9hdCBnZXRUaHJlc2hvbGQoKSB7CiAgdmVjNCBjb2xvciA9IHZlYzQoMC4pOwogIGZvciAoZmxvYXQgeSA9IC02LjsgeSA8IDcuOyB5ICs9IDEuKSB7CiAgICBmb3IgKGZsb2F0IHggPSAtNi47IHggPCA3LjsgeCArPSAxLikgewogICAgICB2ZWM0IGltYWdlX25vd19jb2xvciA9CiAgICAgICAgICB0ZXh0dXJlMkQoaW1hZ2Vfbm93LCBfdGV4dHVyZV9jb29yZCArIHZlYzIoeCwgeSkgLyBjYW52YXMpOwogICAgICB2ZWM0IGltYWdlX2JlZm9yZV9jb2xvciA9CiAgICAgICAgICB0ZXh0dXJlMkQoaW1hZ2VfYmVmb3JlLCBfdGV4dHVyZV9jb29yZCArIHZlYzIoeCwgeSkgLyBjYW52YXMpOwogICAgICBjb2xvciArPSBhYnMoaW1hZ2VfYmVmb3JlX2NvbG9yIC0gaW1hZ2Vfbm93X2NvbG9yKTsKICAgIH0KICB9CiAgcmV0dXJuIChjb2xvci54ICsgY29sb3IueSArIGNvbG9yLnopIC8gKDMuICogOS4pOwp9Cgp2b2lkIG1haW4oKSB7CiAgZmxvYXQgdHJlc2hvbGRfaW5wdXQgPSAuNDsKICBmbG9hdCB0cmVzaG9sZF9wcmV2aW91c19yZW5kZXJpbmcgPSAuOTg7CgogIHZlYzQgbWFza19ub3dfY29sb3IgPSB0ZXh0dXJlMkQobWFza19ub3csIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IG1hc2tfYmVmb3JlX2NvbG9yID0gdGV4dHVyZTJEKG1hc2tfYmVmb3JlLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCBwcmV2aW91c19yZW5kZXJpbmdfY29sb3IgPSB0ZXh0dXJlMkQocHJldmlvdXNfcmVuZGVyaW5nLCBfdGV4dHVyZV9jb29yZCk7CgogIHZlYzMgbWFza19kaWZmID0gYWJzKG1hc2tfYmVmb3JlX2NvbG9yLnh5eiAtIG1hc2tfbm93X2NvbG9yLnh5eik7CiAgZmxvYXQgZmxpY2tlcmluZyA9IG1hc2tfZGlmZi54OwogIGZsb2F0IHRocmVzaG9sZCA9IGdldFRocmVzaG9sZCgpOwogIGlmICh0aHJlc2hvbGQgPCB0aHJlc2hvbGRfYWN0aXZhdGlvbikgewogICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChmbGlja2VyaW5nLCAwLiwgMC4sIDEuKSAqIGN1cnJlbnRfZmFjdG9yICsKICAgICAgICAgICAgICAgICAgIHByZXZpb3VzX3JlbmRlcmluZ19jb2xvciAqIHByZXZpb3VzX2ZhY3RvcjsKICAgIGdsX0ZyYWdDb2xvciAqPSAoMS4gLSB0aHJlc2hvbGQpOwogIH0KfQpgLFljPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgamMgZXh0ZW5kcyBicntnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBIY31nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gWWN9fXZhciBYYz1gI3ZlcnNpb24gMzAwIGVzCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Wb2xjb21peC92aXJ0dWFsLWJhY2tncm91bmQvYmxvYi9tYWluL3NyYy9waXBlbGluZXMvd2ViZ2wyL2pvaW50QmlsYXRlcmFsRmlsdGVyU3RhZ2UudHMKCnByZWNpc2lvbiBoaWdocCBmbG9hdDsKdW5pZm9ybSBzYW1wbGVyMkQgaW5wdXRfZnJhbWU7CnVuaWZvcm0gc2FtcGxlcjJEIHNlZ21lbnRhdGlvbl9tYXNrOwp1bmlmb3JtIHNhbXBsZXIyRCB0aHJlc2hvbGQ7CnVuaWZvcm0gdmVjMiB0ZXhlbF9zaXplOwp1bmlmb3JtIGZsb2F0IHN0ZXA7CnVuaWZvcm0gZmxvYXQgcmFkaXVzOwp1bmlmb3JtIGZsb2F0IG9mZnNldDsKdW5pZm9ybSBmbG9hdCBzaWdtYV90ZXhlbDsKdW5pZm9ybSBmbG9hdCBzaWdtYV9jb2xvcjsKCmluIHZlYzIgX3RleHR1cmVfY29vcmQ7Cm91dCB2ZWM0IG91dENvbG9yOwoKZmxvYXQgZ2F1c3NpYW4oZmxvYXQgeCwgZmxvYXQgc2lnbWEpIHsKICBmbG9hdCBjb2VmZiA9IC0wLjUgLyAoc2lnbWEgKiBzaWdtYSAqIDQuMCArIDEuMGUtNik7CiAgcmV0dXJuIGV4cCgoeCAqIHgpICogY29lZmYpOwp9Cgp2b2lkIG1haW4oKSB7CiAgdmVjMiBjZW50ZXJDb29yZCA9IF90ZXh0dXJlX2Nvb3JkOwogIHZlYzMgY2VudGVyQ29sb3IgPSB0ZXh0dXJlKGlucHV0X2ZyYW1lLCBjZW50ZXJDb29yZCkucmdiOwogIGZsb2F0IG5ld1ZhbCA9IDAuMDsKICBmbG9hdCBzcGFjZVdlaWdodCA9IDAuMDsKICBmbG9hdCBjb2xvcldlaWdodCA9IDAuMDsKICBmbG9hdCB0b3RhbFdlaWdodCA9IDAuMDsKICAvLyBTdWJzYW1wbGUga2VybmVsIHNwYWNlLgogIGZvciAoZmxvYXQgaSA9IC1yYWRpdXMgKyBvZmZzZXQ7IGkgPD0gcmFkaXVzOyBpICs9IHN0ZXApIHsKICAgIGZvciAoZmxvYXQgaiA9IC1yYWRpdXMgKyBvZmZzZXQ7IGogPD0gcmFkaXVzOyBqICs9IHN0ZXApIHsKICAgICAgdmVjMiBzaGlmdCA9IHZlYzIoaiwgaSkgKiB0ZXhlbF9zaXplOwogICAgICB2ZWMyIGNvb3JkID0gdmVjMihjZW50ZXJDb29yZCArIHNoaWZ0KTsKICAgICAgdmVjMyBmcmFtZUNvbG9yID0gdGV4dHVyZShpbnB1dF9mcmFtZSwgY29vcmQpLnJnYjsKICAgICAgZmxvYXQgdGhyZXNob2xkID0gdGV4dHVyZSh0aHJlc2hvbGQsIGNvb3JkKS5hOwogICAgICBmbG9hdCBvdXRWYWwgPSB0ZXh0dXJlKHNlZ21lbnRhdGlvbl9tYXNrLCBjb29yZCkuYTsKCiAgICAgIHNwYWNlV2VpZ2h0ID0gZ2F1c3NpYW4oZGlzdGFuY2UoY2VudGVyQ29vcmQsIGNvb3JkKSwgc2lnbWFfdGV4ZWwpOwogICAgICBjb2xvcldlaWdodCA9IGdhdXNzaWFuKGRpc3RhbmNlKGNlbnRlckNvbG9yLCBmcmFtZUNvbG9yKSwgc2lnbWFfY29sb3IpOwogICAgICB0b3RhbFdlaWdodCArPSBzcGFjZVdlaWdodCAqIGNvbG9yV2VpZ2h0OwogICAgICBuZXdWYWwgKz0gc3BhY2VXZWlnaHQgKiBjb2xvcldlaWdodCAqIG91dFZhbCAqIHRocmVzaG9sZDsKICAgIH0KICB9CiAgbmV3VmFsIC89IHRvdGFsV2VpZ2h0OwogIG91dENvbG9yID0gdmVjNCh2ZWMzKDAuKSwgbmV3VmFsKTsKfWAsUWM9YCN2ZXJzaW9uIDMwMCBlcwppbiB2ZWMyIHBvc2l0aW9uOwppbiB2ZWMyIHRleHR1cmVfY29vcmQ7Cm91dCB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9YDtjbGFzcyBLYyBleHRlbmRzIHhle2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIFhjfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBRY319dmFyIHFjPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gdmVjMiBjYW52YXM7CnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7Cgp2b2lkIG1haW4oKSB7CiAgaW50IGNvdW50ID0gMDsKICBmb3IgKGZsb2F0IHkgPSAtMS47IHkgPCAyLjsgeSArPSAxLikgewogICAgZm9yIChmbG9hdCB4ID0gLTEuOyB4IDwgMi47IHggKz0gMS4pIHsKICAgICAgdmVjMiBjb29yZCA9IF90ZXh0dXJlX2Nvb3JkICsgdmVjMih5LCB4KSAvIGNhbnZhczsKICAgICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCBjb29yZCk7CiAgICAgIGlmIChjb2xvci5yID4gLjEpIHsKICAgICAgICBjb3VudCsrOwogICAgICB9CiAgICB9CiAgfQogIGlmIChjb3VudCA+IDUpIHsKICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCk7CiAgfQp9CmAsSmM9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYDtjbGFzcyBaYyBleHRlbmRzIHhle2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIHFjfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBKY319dmFyIGVmPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gdmVjMiBjYW52YXM7CnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7Cgp2b2lkIG1haW4oKSB7CiAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCk7CiAgZm9yIChmbG9hdCB5ID0gLTIuOyB5IDwgMy47IHkgKz0gMS4pIHsKICAgIGZvciAoZmxvYXQgeCA9IC0yLjsgeCA8IDMuOyB4ICs9IDEuKSB7CiAgICAgIHZlYzIgY29vcmQgPSBfdGV4dHVyZV9jb29yZDsKICAgICAgY29vcmQgKz0gdmVjMih5LCB4KSAvIGNhbnZhczsKICAgICAgY29sb3IgKz0gdGV4dHVyZTJEKHRleHR1cmUsIGNvb3JkKSAqICgxLiAvIDQuKTsKICAgIH0KICB9CgogIGdsX0ZyYWdDb2xvciA9IGNvbG9yOwp9CmAsdGY9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYDtjbGFzcyByZiBleHRlbmRzIGJye2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIGVmfWdldFZlcnRleFNoYWRlcigpe3JldHVybiB0Zn19dmFyIG5mPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gc2FtcGxlcjJEIHRocmVzaG9sZDsKdW5pZm9ybSBzYW1wbGVyMkQgaW5wdXRzOwoKdm9pZCBtYWluKCkgewogIHZlYzQgaW5wdXRzX2NvbG9yID0gdGV4dHVyZTJEKGlucHV0cywgX3RleHR1cmVfY29vcmQpOwogIHZlYzQgdGhyZXNob2xkX2NvbG9yID0gdGV4dHVyZTJEKHRocmVzaG9sZCwgX3RleHR1cmVfY29vcmQpOwogIGlmICh0aHJlc2hvbGRfY29sb3IuciA8IC4xICYmIGlucHV0c19jb2xvci5yID4gLjUpIHsKICAgIGdsX0ZyYWdDb2xvciA9IGlucHV0c19jb2xvcjsKICB9Cn0KYCxvZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIHNmIGV4dGVuZHMgYnJ7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gbmZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIG9mfX1jbGFzcyBhZiBleHRlbmRzIF9ye2NvbnN0cnVjdG9yKHQsbixpKXtzdXBlcigpO3AodGhpcywiaW5wdXRJbWFnZSIpO3AodGhpcywiaW5wdXRNYXNrIik7cCh0aGlzLCJwcmV2aW91c0lucHV0SW1hZ2UiKTtwKHRoaXMsInByZXZpb3VzSW5wdXRNYXNrIik7cCh0aGlzLCJvdXRwdXQiKTtwKHRoaXMsIm9wdGlvbnMiLHtjdXJyZW50VGhyZXNob2xkTWluaW11bTowLGN1cnJlbnRUaHJlc2hvbGRNYXhpbXVtOjEscHJldmlvdXNUaHJlc2hvbGRNaW5pbXVtOjAscHJldmlvdXNUaHJlc2hvbGRNYXhpbXVtOjEsdGhyZXNob2xkTWluaW11bTowLHRocmVzaG9sZE1heGltdW06MSx0aHJlc2hvbGRGYWN0b3I6MX0pO3RoaXMuY29udGV4dD10O2NvbnN0IG89e2NvbnRleHQ6dCxoZWlnaHQ6aSx3aWR0aDpufSxzPW5ldyBqYyhvKSxhPW5ldyBpaSh7Li4ubyxyYWRpdXM6MSx0eXBlOmdyLkdBVVNTSUFOfSksdT1uZXcgc2YobyksZj1uZXcgcmYobyksZD1uZXcgWmMobyksaD1uZXcgS2Moey4uLm99KSx5PS42Nix4PTY0MCxsPTQ4MCxnPTI1NixFPTE0NDtsZXQgdj0xO3YqPU1hdGgubWF4KHgvZyxsL0UpO2NvbnN0IEk9TWF0aC5tYXgoMSxNYXRoLnNxcnQodikqeSksRD0xL3gsRz0xL2w7dGhpcy5hZGRTdGVwKHtwcm9ncmFtOnMsZ2V0VW5pZm9ybXM6KCk9Pih7aW1hZ2Vfbm93OlModCx0aGlzLmlucHV0SW1hZ2UpLGltYWdlX2JlZm9yZTpTKHQsdGhpcy5wcmV2aW91c0lucHV0SW1hZ2UpLG1hc2tfbm93OlModCx0aGlzLmlucHV0TWFzayksbWFza19iZWZvcmU6Uyh0LHRoaXMucHJldmlvdXNJbnB1dE1hc2spLGN1cnJlbnRfdGhyZXNob2xkX21pbmltdW06dGhpcy5vcHRpb25zLmN1cnJlbnRUaHJlc2hvbGRNaW5pbXVtLGN1cnJlbnRfdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLmN1cnJlbnRUaHJlc2hvbGRNYXhpbXVtLHByZXZpb3VzX3RocmVzaG9sZF9taW5pbXVtOnRoaXMub3B0aW9ucy5wcmV2aW91c1RocmVzaG9sZE1pbmltdW0scHJldmlvdXNfdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLnByZXZpb3VzVGhyZXNob2xkTWF4aW11bSx0aHJlc2hvbGRfbWluaW11bTp0aGlzLm9wdGlvbnMudGhyZXNob2xkTWluaW11bSx0aHJlc2hvbGRfbWF4aW11bTp0aGlzLm9wdGlvbnMudGhyZXNob2xkTWF4aW11bSx0aHJlc2hvbGRfZmFjdG9yOnRoaXMub3B0aW9ucy50aHJlc2hvbGRGYWN0b3J9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTp1LGdldFVuaWZvcm1zOigpPT4oe2lucHV0czpTKHQsdGhpcy5pbnB1dE1hc2spLHRocmVzaG9sZDpTKHQscy5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06ZCxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOlModCx1Lm91dHB1dCl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpmLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6Uyh0LGQub3V0cHV0KX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmEsZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpTKHQsZi5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06aCxnZXRVbmlmb3JtczooKT0+KHtpbnB1dF9mcmFtZTpTKHQsdGhpcy5pbnB1dEltYWdlKSxzZWdtZW50YXRpb25fbWFzazpTKHQsdGhpcy5pbnB1dE1hc2spLHRocmVzaG9sZDpTKHQsYS5vdXRwdXQpLHRleGVsX3NpemU6W0QsR10sc3RlcDpJLHJhZGl1czp2LG9mZnNldDpJPjE/SSouNTowLHNpZ21hX3RleGVsOk1hdGgubWF4KEQsRykqdixzaWdtYV9jb2xvcjouMX0pfSksdGhpcy5vdXRwdXQ9aC5vdXRwdXR9c2V0RGF0YSh0LG4pe3RoaXMucHJldmlvdXNJbnB1dEltYWdlPXRoaXMuaW5wdXRJbWFnZT90aGlzLmlucHV0SW1hZ2U6dCx0aGlzLnByZXZpb3VzSW5wdXRNYXNrPXRoaXMuaW5wdXRNYXNrP3RoaXMuaW5wdXRNYXNrOm4sdGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn1zZXRPcHRpb25zKHQpe3RoaXMub3B0aW9ucz10fX12YXIgdWY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQpOyB9CmAsY2Y9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwp1bmlmb3JtIGJvb2wgaW52ZXJ0X3k7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKICBpZiAoaW52ZXJ0X3kpIHsKICAgIF90ZXh0dXJlX2Nvb3JkLnkgPSAxLiAtIHRleHR1cmVfY29vcmQueTsKICB9Cn0KYDtjbGFzcyBmZiBleHRlbmRzIHhle2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIHVmfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBjZn19Y2xhc3MgbGYgZXh0ZW5kcyBfcntjb25zdHJ1Y3Rvcih0LG4saSl7c3VwZXIoKTtwKHRoaXMsImlucHV0SW1hZ2UiKTt0aGlzLmNvbnRleHQ9dDtjb25zdCBvPXtjb250ZXh0OnQsaGVpZ2h0Omksd2lkdGg6bn07dGhpcy5hZGRTdGVwKHtwcm9ncmFtOm5ldyBmZih7Li4ubyxkaXNhYmxlRnJhbWVidWZmZXI6ITB9KSxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOlModCx0aGlzLmlucHV0SW1hZ2UpLGludmVydF95OiEwfSl9KX1zZXREYXRhKHQpe3RoaXMuaW5wdXRJbWFnZT10fX1jbGFzcyBkZntjb25zdHJ1Y3RvcihlKXtwKHRoaXMsInJlc2l6ZSIpO3AodGhpcywiY2FudmFzIik7cCh0aGlzLCJjb250ZXh0Iik7dGhpcy5jYW52YXM9bmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLHRoaXMuY29udGV4dD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KCJ3ZWJnbDIiKSx0aGlzLmNhbnZhcy53aWR0aD1lLndpZHRoLHRoaXMuY2FudmFzLmhlaWdodD1lLmhlaWdodCx0aGlzLnJlc2l6ZT1uZXcgbGYodGhpcy5jb250ZXh0LGUud2lkdGgsZS5oZWlnaHQpfXJlc2l6ZUZvcmVncm91bmQoZSx0KXt0aGlzLmNhbnZhcy53aWR0aD1lLHRoaXMuY2FudmFzLmhlaWdodD10LHRoaXMucmVzaXplLnJlc2l6ZU91dHB1dChlLHQpfWFzeW5jIHByb2Nlc3MoZSl7dmFyIHQsbjtyZXR1cm4gdGhpcy5jYW52YXMud2lkdGg9dGhpcy5jYW52YXMud2lkdGgsKHQ9dGhpcy5yZXNpemUpPT1udWxsfHx0LnNldERhdGEoZSksKG49dGhpcy5yZXNpemUpPT1udWxsfHxuLnJ1bigpLHRoaXMuY2FudmFzfX1jbGFzcyBtZntjb25zdHJ1Y3RvcihlLHQpe3AodGhpcywiaW1wcm92ZU1hc2tTZWdtZW50YXRpb24iKTtwKHRoaXMsImJhY2tncm91bmRSZXNpemVyIik7cCh0aGlzLCJiYWNrZ3JvdW5kSW1hZ2UiKTtwKHRoaXMsImJhY2tncm91bmRWaWRlbyIpO3AodGhpcywicHJvZmlsZXIiKTtwKHRoaXMsImFjdGl2ZVBpcGVsaW5lIik7cCh0aGlzLCJjYW52YXMiKTtwKHRoaXMsIm9wdGlvbnMiKTtwKHRoaXMsImNvbnRleHQiKTtwKHRoaXMsInZpcnR1YWxCR0ltYWdlIik7dGhpcy5pZD1lLHRoaXMuY2FudmFzPW5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSx0aGlzLmNvbnRleHQ9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgid2ViZ2wyIiksdGhpcy5jYW52YXMud2lkdGg9dC5mb3JlZ3JvdW5kV2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0PXQuZm9yZWdyb3VuZEhlaWdodCx0aGlzLmltcHJvdmVNYXNrU2VnbWVudGF0aW9uPW5ldyBhZih0aGlzLmNvbnRleHQsdC5tYXNrV2lkdGgsdC5tYXNrSGVpZ2h0KSx0aGlzLmJhY2tncm91bmRJbWFnZT1uZXcgbmkodGhpcy5jb250ZXh0KSx0aGlzLmJhY2tncm91bmRWaWRlbz1uZXcgJGModGhpcy5jb250ZXh0KSx0aGlzLmJhY2tncm91bmRSZXNpemVyPW5ldyBkZih7d2lkdGg6dC5mb3JlZ3JvdW5kV2lkdGgsaGVpZ2h0OnQuZm9yZWdyb3VuZEhlaWdodH0pfXNldEJhY2tncm91bmRPcHRpb25zKGUpe3N3aXRjaChlLnRyYW5zZm9ybWVyVHlwZSl7Y2FzZSJCYWNrZ3JvdW5kQmx1ciI6dGhpcy5hY3RpdmVQaXBlbGluZT1uZXcgR2ModGhpcy5jb250ZXh0LHRoaXMuZ2V0Qmx1clNpemUoZS5yYWRpdXMpKTticmVhaztjYXNlIlNpbGhvdWV0dGVCbHVyIjp0aGlzLmFjdGl2ZVBpcGVsaW5lPW5ldyBWYyh0aGlzLmNvbnRleHQsdGhpcy5nZXRCbHVyU2l6ZShlLnJhZGl1cykpO2JyZWFrO2Nhc2UiVmlkZW9CYWNrZ3JvdW5kIjp0aGlzLmFjdGl2ZVBpcGVsaW5lPXRoaXMuYmFja2dyb3VuZFZpZGVvO2JyZWFrO2Nhc2UiVmlydHVhbEJhY2tncm91bmQiOnRoaXMuYWN0aXZlUGlwZWxpbmU9dGhpcy5iYWNrZ3JvdW5kSW1hZ2U7YnJlYWs7ZGVmYXVsdDp0aHJvd2BVbmtub3duIHRyYW5zZm9ybWVyIHR5cGUgWyR7ZS50cmFuc2Zvcm1lclR5cGV9XWB9dGhpcy5vcHRpb25zPWV9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dmFyIHQ7KHQ9dGhpcy5pbXByb3ZlTWFza1NlZ21lbnRhdGlvbik9PW51bGx8fHQuc2V0T3B0aW9ucyhlKX1zZXRWaWRlb0JHUmVhZGFibGUoZSl7dGhpcy5iYWNrZ3JvdW5kVmlkZW8uaW5wdXRWaWRlbz1lfWFzeW5jIHNldFZpcnR1YWxCR0ltYWdlKGUpe3RoaXMudmlydHVhbEJHSW1hZ2U9ZSx0aGlzLmJhY2tncm91bmRJbWFnZS5pbnB1dEJhY2tncm91bmRJbWFnZT1hd2FpdCB0aGlzLmJhY2tncm91bmRSZXNpemVyLnByb2Nlc3MoZSl9YXN5bmMgcHJvY2VzcyhlLHQpe3ZhciBuLGksbyxzLGEsdSxmO2lmKHRoaXMuYWN0aXZlUGlwZWxpbmUmJmUud2lkdGgmJih0PT1udWxsP3ZvaWQgMDp0LndpZHRoKSl7Y29uc3QgZD1gWyR7dGhpcy5pZH1dIGJhY2tncm91bmQtZmlsdGVyYDsobj10aGlzLnByb2ZpbGVyKT09bnVsbHx8bi5wdXNoQ29udGV4dChkKTtsZXQgaD10OygoKGk9dGhpcy5vcHRpb25zKT09bnVsbD92b2lkIDA6aS5zZWxmaWVTZWdtZW50YXRpb25UeXBlKSYmKChvPXRoaXMub3B0aW9ucyk9PW51bGw/dm9pZCAwOm8uc2VsZmllU2VnbWVudGF0aW9uVHlwZSk9PT0iUFJFQ0lTRSJ8fCEoKHM9dGhpcy5vcHRpb25zKSE9bnVsbCYmcy5zZWxmaWVTZWdtZW50YXRpb25UeXBlKSYmdGhpcy5hY3RpdmVQaXBlbGluZS5wcmVjaXNlTWFza0VuYWJsZWQpJiYodGhpcy5pbXByb3ZlTWFza1NlZ21lbnRhdGlvbi5zZXRJZCh0aGlzLmlkKSx0aGlzLmltcHJvdmVNYXNrU2VnbWVudGF0aW9uLnNldFByb2ZpbGVyKHRoaXMucHJvZmlsZXIpLHRoaXMuaW1wcm92ZU1hc2tTZWdtZW50YXRpb24uc2V0RGF0YShlLHQpLHRoaXMuaW1wcm92ZU1hc2tTZWdtZW50YXRpb24ucnVuKCksaD10aGlzLmltcHJvdmVNYXNrU2VnbWVudGF0aW9uLm91dHB1dCksdGhpcy5hY3RpdmVQaXBlbGluZS5zZXRJZCh0aGlzLmlkKSx0aGlzLmFjdGl2ZVBpcGVsaW5lLnNldFByb2ZpbGVyKHRoaXMucHJvZmlsZXIpLChhPXRoaXMuYWN0aXZlUGlwZWxpbmUpPT1udWxsfHxhLnNldERhdGEoZSxoKSwodT10aGlzLmFjdGl2ZVBpcGVsaW5lKT09bnVsbHx8dS5ydW4oKSwoZj10aGlzLnByb2ZpbGVyKT09bnVsbHx8Zi5wb3BDb250ZXh0KGQpfX1hc3luYyByZXNpemVGb3JlZ3JvdW5kKGUsdCl7dmFyIG47dGhpcy5jYW52YXMud2lkdGg9ZSx0aGlzLmNhbnZhcy5oZWlnaHQ9dCx0aGlzLmJhY2tncm91bmRJbWFnZS5yZXNpemVPdXRwdXQoZSx0KSx0aGlzLmJhY2tncm91bmRWaWRlby5yZXNpemVPdXRwdXQoZSx0KSx0aGlzLmJhY2tncm91bmRSZXNpemVyLnJlc2l6ZUZvcmVncm91bmQoZSx0KSwobj10aGlzLmFjdGl2ZVBpcGVsaW5lKT09bnVsbHx8bi5yZXNpemVPdXRwdXQoZSx0KSx0aGlzLnZpcnR1YWxCR0ltYWdlJiYodGhpcy5iYWNrZ3JvdW5kSW1hZ2UuaW5wdXRCYWNrZ3JvdW5kSW1hZ2U9YXdhaXQgdGhpcy5iYWNrZ3JvdW5kUmVzaXplci5wcm9jZXNzKHRoaXMudmlydHVhbEJHSW1hZ2UpKX1hc3luYyBwcm9maWxlKGUpe2NvbnN0IHQ9bmV3IFBvKHRoaXMuY29udGV4dCk7cmV0dXJuIHRoaXMucHJvZmlsZXI9dCx0LnN0YXJ0KCksYXdhaXQgR3IoZSksdGhpcy5wcm9maWxlcj12b2lkIDAsdC5zdG9wKCksdC5nZXRSZXNvbHZlZFF1ZXJpZXMoKX1nZXRCbHVyU2l6ZShlPVplLkxvdyl7c3dpdGNoKGUpe2Nhc2UgWmUuTG93OnJldHVybiA1O2Nhc2UgWmUuSGlnaDpyZXR1cm4gMTJ9cmV0dXJuIGV9fXZhciBoZj1mdW5jdGlvbigpe3ZhciByPXR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQ/ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM6dm9pZCAwO3JldHVybiBmdW5jdGlvbihlKXtlPWV8fHt9O3ZhciB0PXR5cGVvZiBlPCJ1Ij9lOnt9LG4saTt0LnJlYWR5PW5ldyBQcm9taXNlKGZ1bmN0aW9uKGMsbSl7bj1jLGk9bX0pO3ZhciBvPXt9LHM7Zm9yKHMgaW4gdCl0Lmhhc093blByb3BlcnR5KHMpJiYob1tzXT10W3NdKTt2YXIgYT0iLi90aGlzLnByb2dyYW0iLHU9ZnVuY3Rpb24oYyxtKXt0aHJvdyBtfSxmPSEwLGQ9IiI7ZnVuY3Rpb24gaChjKXtyZXR1cm4gdC5sb2NhdGVGaWxlP3QubG9jYXRlRmlsZShjLGQpOmQrY312YXIgeTt0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jdXJyZW50U2NyaXB0JiYoZD1kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyksciYmKGQ9ciksZC5pbmRleE9mKCJibG9iOiIpIT09MD9kPWQuc3Vic3RyKDAsZC5yZXBsYWNlKC9bPyNdLiovLCIiKS5sYXN0SW5kZXhPZigiLyIpKzEpOmQ9IiI7dmFyIHg9dC5wcmludHx8Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSxsPXQucHJpbnRFcnJ8fGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO2ZvcihzIGluIG8pby5oYXNPd25Qcm9wZXJ0eShzKSYmKHRbc109b1tzXSk7bz1udWxsLHQuYXJndW1lbnRzJiZ0LmFyZ3VtZW50cyx0LnRoaXNQcm9ncmFtJiYoYT10LnRoaXNQcm9ncmFtKSx0LnF1aXQmJih1PXQucXVpdCk7dmFyIGc7dC53YXNtQmluYXJ5JiYoZz10Lndhc21CaW5hcnkpO3ZhciBFPXQubm9FeGl0UnVudGltZXx8ITA7dHlwZW9mIFdlYkFzc2VtYmx5IT0ib2JqZWN0IiYmY2UoIm5vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWQiKTt2YXIgdixJPSExLEQ9dHlwZW9mIFRleHREZWNvZGVyPCJ1Ij9uZXcgVGV4dERlY29kZXIoInV0ZjgiKTp2b2lkIDA7ZnVuY3Rpb24gRyhjLG0sXyl7Zm9yKHZhciBUPW0rXyxOPW07Y1tOXSYmIShOPj1UKTspKytOO2lmKE4tbT4xNiYmYy5zdWJhcnJheSYmRClyZXR1cm4gRC5kZWNvZGUoYy5zdWJhcnJheShtLE4pKTtmb3IodmFyIGs9IiI7bTxOOyl7dmFyIHc9Y1ttKytdO2lmKCEodyYxMjgpKXtrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHcpO2NvbnRpbnVlfXZhciBPPWNbbSsrXSY2MztpZigodyYyMjQpPT0xOTIpe2srPVN0cmluZy5mcm9tQ2hhckNvZGUoKHcmMzEpPDw2fE8pO2NvbnRpbnVlfXZhciBLPWNbbSsrXSY2MztpZigodyYyNDApPT0yMjQ/dz0odyYxNSk8PDEyfE88PDZ8Szp3PSh3JjcpPDwxOHxPPDwxMnxLPDw2fGNbbSsrXSY2Myx3PDY1NTM2KWsrPVN0cmluZy5mcm9tQ2hhckNvZGUodyk7ZWxzZXt2YXIgaGk9dy02NTUzNjtrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fGhpPj4xMCw1NjMyMHxoaSYxMDIzKX19cmV0dXJuIGt9ZnVuY3Rpb24gJChjLG0pe3JldHVybiBjP0coTGUsYyxtKToiIn1mdW5jdGlvbiBaKGMsbSxfKXtmb3IodmFyIFQ9MDtUPGMubGVuZ3RoOysrVClFdFttKys+PjBdPWMuY2hhckNvZGVBdChUKTtffHwoRXRbbT4+MF09MCl9ZnVuY3Rpb24gSChjLG0pe3JldHVybiBjJW0+MCYmKGMrPW0tYyVtKSxjfXZhciBzaSxFdCxMZSxZO2Z1bmN0aW9uIGFpKGMpe3NpPWMsdC5IRUFQOD1FdD1uZXcgSW50OEFycmF5KGMpLHQuSEVBUDE2PW5ldyBJbnQxNkFycmF5KGMpLHQuSEVBUDMyPVk9bmV3IEludDMyQXJyYXkoYyksdC5IRUFQVTg9TGU9bmV3IFVpbnQ4QXJyYXkoYyksdC5IRUFQVTE2PW5ldyBVaW50MTZBcnJheShjKSx0LkhFQVBVMzI9bmV3IFVpbnQzMkFycmF5KGMpLHQuSEVBUEYzMj1uZXcgRmxvYXQzMkFycmF5KGMpLHQuSEVBUEY2ND1uZXcgRmxvYXQ2NEFycmF5KGMpfXQuSU5JVElBTF9NRU1PUlk7dmFyIEVyLHVpPVtdLGNpPVtdLGZpPVtdLHZmPTA7ZnVuY3Rpb24gRWYoKXtyZXR1cm4gRXx8dmY+MH1mdW5jdGlvbiBUZigpe2lmKHQucHJlUnVuKWZvcih0eXBlb2YgdC5wcmVSdW49PSJmdW5jdGlvbiImJih0LnByZVJ1bj1bdC5wcmVSdW5dKTt0LnByZVJ1bi5sZW5ndGg7KVNmKHQucHJlUnVuLnNoaWZ0KCkpO1RyKHVpKX1mdW5jdGlvbiBBZigpe1RyKGNpKX1mdW5jdGlvbiB3Zigpe2lmKHQucG9zdFJ1bilmb3IodHlwZW9mIHQucG9zdFJ1bj09ImZ1bmN0aW9uIiYmKHQucG9zdFJ1bj1bdC5wb3N0UnVuXSk7dC5wb3N0UnVuLmxlbmd0aDspSWYodC5wb3N0UnVuLnNoaWZ0KCkpO1RyKGZpKX1mdW5jdGlvbiBTZihjKXt1aS51bnNoaWZ0KGMpfWZ1bmN0aW9uIFJmKGMpe2NpLnVuc2hpZnQoYyl9ZnVuY3Rpb24gSWYoYyl7ZmkudW5zaGlmdChjKX12YXIgZ2U9MCxHZT1udWxsO2Z1bmN0aW9uIEZmKGMpe2dlKyssdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZ0Lm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoZ2UpfWZ1bmN0aW9uIFBmKGMpe2lmKGdlLS0sdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZ0Lm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoZ2UpLGdlPT0wJiZHZSl7dmFyIG09R2U7R2U9bnVsbCxtKCl9fXQucHJlbG9hZGVkSW1hZ2VzPXt9LHQucHJlbG9hZGVkQXVkaW9zPXt9O2Z1bmN0aW9uIGNlKGMpe3Qub25BYm9ydCYmdC5vbkFib3J0KGMpLGM9IkFib3J0ZWQoIitjKyIpIixsKGMpLEk9ITAsYys9Ii4gQnVpbGQgd2l0aCAtcyBBU1NFUlRJT05TPTEgZm9yIG1vcmUgaW5mby4iO3ZhciBtPW5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IoYyk7dGhyb3cgaShtKSxtfXZhciBEZj0iZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCI7ZnVuY3Rpb24gbGkoYyl7cmV0dXJuIGMuc3RhcnRzV2l0aChEZil9dmFyIGo7aj0idGZsaXRlLXNpbWQud2FzbSIsbGkoail8fChqPWgoaikpO2Z1bmN0aW9uIGRpKGMpe3RyeXtpZihjPT1qJiZnKXJldHVybiBuZXcgVWludDhBcnJheShnKTtpZigheSl0aHJvdyJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZCJ9Y2F0Y2gobSl7Y2UobSl9fWZ1bmN0aW9uIE5mKCl7cmV0dXJuIWcmJmYmJnR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIj9mZXRjaChqLHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSkudGhlbihmdW5jdGlvbihjKXtpZighYy5vayl0aHJvdyJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICciK2orIiciO3JldHVybiBjLmFycmF5QnVmZmVyKCl9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiBkaShqKX0pOlByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZGkoail9KX1mdW5jdGlvbiBNZigpe3ZhciBjPXthOmVsfTtmdW5jdGlvbiBtKHcsTyl7dmFyIEs9dy5leHBvcnRzO3QuYXNtPUssdj10LmFzbS5xLGFpKHYuYnVmZmVyKSxFcj10LmFzbS5FLFJmKHQuYXNtLnIpLFBmKCl9RmYoKTtmdW5jdGlvbiBfKHcpe20ody5pbnN0YW5jZSl9ZnVuY3Rpb24gVCh3KXtyZXR1cm4gTmYoKS50aGVuKGZ1bmN0aW9uKE8pe3JldHVybiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShPLGMpfSkudGhlbihmdW5jdGlvbihPKXtyZXR1cm4gT30pLnRoZW4odyxmdW5jdGlvbihPKXtsKCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAiK08pLGNlKE8pfSl9ZnVuY3Rpb24gTigpe3JldHVybiFnJiZ0eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmc9PSJmdW5jdGlvbiImJiFsaShqKSYmdHlwZW9mIGZldGNoPT0iZnVuY3Rpb24iP2ZldGNoKGose2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGZ1bmN0aW9uKHcpe3ZhciBPPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKHcsYyk7cmV0dXJuIE8udGhlbihfLGZ1bmN0aW9uKEspe3JldHVybiBsKCJ3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogIitLKSxsKCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbiIpLFQoXyl9KX0pOlQoXyl9aWYodC5pbnN0YW50aWF0ZVdhc20pdHJ5e3ZhciBrPXQuaW5zdGFudGlhdGVXYXNtKGMsbSk7cmV0dXJuIGt9Y2F0Y2godyl7cmV0dXJuIGwoIk1vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6ICIrdyksITF9cmV0dXJuIE4oKS5jYXRjaChpKSx7fX1mdW5jdGlvbiBUcihjKXtmb3IoO2MubGVuZ3RoPjA7KXt2YXIgbT1jLnNoaWZ0KCk7aWYodHlwZW9mIG09PSJmdW5jdGlvbiIpe20odCk7Y29udGludWV9dmFyIF89bS5mdW5jO3R5cGVvZiBfPT0ibnVtYmVyIj9tLmFyZz09PXZvaWQgMD9Fci5nZXQoXykoKTpFci5nZXQoXykobS5hcmcpOl8obS5hcmc9PT12b2lkIDA/bnVsbDptLmFyZyl9fWZ1bmN0aW9uIFVmKGMsbSxfLFQpe2NlKCJBc3NlcnRpb24gZmFpbGVkOiAiKyQoYykrIiwgYXQ6ICIrW20/JChtKToidW5rbm93biBmaWxlbmFtZSIsXyxUPyQoVCk6InVua25vd24gZnVuY3Rpb24iXSl9ZnVuY3Rpb24ga2YoYyxtKXtjZSgiVG8gdXNlIGRsb3BlbiwgeW91IG5lZWQgdG8gdXNlIEVtc2NyaXB0ZW4ncyBsaW5raW5nIHN1cHBvcnQsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZW1zY3JpcHRlbi1jb3JlL2Vtc2NyaXB0ZW4vd2lraS9MaW5raW5nIil9ZnVuY3Rpb24gQ2YoYyxtKXtjZSgiVG8gdXNlIGRsb3BlbiwgeW91IG5lZWQgdG8gdXNlIEVtc2NyaXB0ZW4ncyBsaW5raW5nIHN1cHBvcnQsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZW1zY3JpcHRlbi1jb3JlL2Vtc2NyaXB0ZW4vd2lraS9MaW5raW5nIil9ZnVuY3Rpb24gT2YoKXtjZSgiIil9dmFyIFR0O1R0PWZ1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTt2YXIgQmY9ITA7ZnVuY3Rpb24gTGYoYyl7cmV0dXJuIFlbbWkoKT4+Ml09YyxjfWZ1bmN0aW9uIEdmKGMsbSl7dmFyIF87aWYoYz09PTApXz1EYXRlLm5vdygpO2Vsc2UgaWYoKGM9PT0xfHxjPT09NCkmJkJmKV89VHQoKTtlbHNlIHJldHVybiBMZigyOCksLTE7cmV0dXJuIFlbbT4+Ml09Xy8xZTN8MCxZW20rND4+Ml09XyUxZTMqMWUzKjFlM3wwLDB9ZnVuY3Rpb24gJGYoKXtyZXR1cm4gMjE0NzQ4MzY0OH1mdW5jdGlvbiB6ZihjLG0sXyl7TGUuY29weVdpdGhpbihjLG0sbStfKX1mdW5jdGlvbiBXZihjKXt0cnl7cmV0dXJuIHYuZ3JvdyhjLXNpLmJ5dGVMZW5ndGgrNjU1MzU+Pj4xNiksYWkodi5idWZmZXIpLDF9Y2F0Y2h7fX1mdW5jdGlvbiBWZihjKXt2YXIgbT1MZS5sZW5ndGg7Yz1jPj4+MDt2YXIgXz0yMTQ3NDgzNjQ4O2lmKGM+XylyZXR1cm4hMTtmb3IodmFyIFQ9MTtUPD00O1QqPTIpe3ZhciBOPW0qKDErLjIvVCk7Tj1NYXRoLm1pbihOLGMrMTAwNjYzMjk2KTt2YXIgaz1NYXRoLm1pbihfLEgoTWF0aC5tYXgoYyxOKSw2NTUzNikpLHc9V2Yoayk7aWYodylyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBIZihjKXtmb3IodmFyIG09VHQoKTtUdCgpLW08YzspO312YXIgQXI9e307ZnVuY3Rpb24gWWYoKXtyZXR1cm4gYXx8Ii4vdGhpcy5wcm9ncmFtIn1mdW5jdGlvbiAkZSgpe2lmKCEkZS5zdHJpbmdzKXt2YXIgYz0odHlwZW9mIG5hdmlnYXRvcj09Im9iamVjdCImJm5hdmlnYXRvci5sYW5ndWFnZXMmJm5hdmlnYXRvci5sYW5ndWFnZXNbMF18fCJDIikucmVwbGFjZSgiLSIsIl8iKSsiLlVURi04IixtPXtVU0VSOiJ3ZWJfdXNlciIsTE9HTkFNRToid2ViX3VzZXIiLFBBVEg6Ii8iLFBXRDoiLyIsSE9NRToiL2hvbWUvd2ViX3VzZXIiLExBTkc6YyxfOllmKCl9O2Zvcih2YXIgXyBpbiBBcilBcltfXT09PXZvaWQgMD9kZWxldGUgbVtfXTptW19dPUFyW19dO3ZhciBUPVtdO2Zvcih2YXIgXyBpbiBtKVQucHVzaChfKyI9IittW19dKTskZS5zdHJpbmdzPVR9cmV0dXJuICRlLnN0cmluZ3N9dmFyIEF0PXttYXBwaW5nczp7fSxidWZmZXJzOltudWxsLFtdLFtdXSxwcmludENoYXI6ZnVuY3Rpb24oYyxtKXt2YXIgXz1BdC5idWZmZXJzW2NdO209PT0wfHxtPT09MTA/KChjPT09MT94OmwpKEcoXywwKSksXy5sZW5ndGg9MCk6Xy5wdXNoKG0pfSx2YXJhcmdzOnZvaWQgMCxnZXQ6ZnVuY3Rpb24oKXtBdC52YXJhcmdzKz00O3ZhciBjPVlbQXQudmFyYXJncy00Pj4yXTtyZXR1cm4gY30sZ2V0U3RyOmZ1bmN0aW9uKGMpe3ZhciBtPSQoYyk7cmV0dXJuIG19LGdldDY0OmZ1bmN0aW9uKGMsbSl7cmV0dXJuIGN9fTtmdW5jdGlvbiBqZihjLG0pe3ZhciBfPTA7cmV0dXJuICRlKCkuZm9yRWFjaChmdW5jdGlvbihULE4pe3ZhciBrPW0rXztZW2MrTio0Pj4yXT1rLFooVCxrKSxfKz1ULmxlbmd0aCsxfSksMH1mdW5jdGlvbiBYZihjLG0pe3ZhciBfPSRlKCk7WVtjPj4yXT1fLmxlbmd0aDt2YXIgVD0wO3JldHVybiBfLmZvckVhY2goZnVuY3Rpb24oTil7VCs9Ti5sZW5ndGgrMX0pLFlbbT4+Ml09VCwwfWZ1bmN0aW9uIFFmKGMpe3JsKGMpfWZ1bmN0aW9uIEtmKGMpe3JldHVybiAwfWZ1bmN0aW9uIHFmKGMsbSxfLFQsTil7fWZ1bmN0aW9uIEpmKGMsbSxfLFQpe2Zvcih2YXIgTj0wLGs9MDtrPF87aysrKXtmb3IodmFyIHc9WVttK2sqOD4+Ml0sTz1ZW20rKGsqOCs0KT4+Ml0sSz0wO0s8TztLKyspQXQucHJpbnRDaGFyKGMsTGVbdytLXSk7Tis9T31yZXR1cm4gWVtUPj4yXT1OLDB9ZnVuY3Rpb24gWmYoKXtpZih0eXBlb2YgY3J5cHRvPT0ib2JqZWN0IiYmdHlwZW9mIGNyeXB0by5nZXRSYW5kb21WYWx1ZXM9PSJmdW5jdGlvbiIpe3ZhciBjPW5ldyBVaW50OEFycmF5KDEpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGMpLGNbMF19fWVsc2UgcmV0dXJuIGZ1bmN0aW9uKCl7Y2UoInJhbmRvbURldmljZSIpfX1mdW5jdGlvbiB3dChjLG0pe3d0LnJhbmRvbURldmljZXx8KHd0LnJhbmRvbURldmljZT1aZigpKTtmb3IodmFyIF89MDtfPG07XysrKUV0W2MrXz4+MF09d3QucmFuZG9tRGV2aWNlKCk7cmV0dXJuIDB9dmFyIGVsPXthOlVmLGU6a2YsZDpDZixiOk9mLG46R2YsaDokZixsOnpmLG06VmYscDpIZixmOmpmLGc6WGYsajpRZixpOktmLGs6cWYsYzpKZixvOnd0fTtNZigpLHQuX19fd2FzbV9jYWxsX2N0b3JzPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX19fd2FzbV9jYWxsX2N0b3JzPXQuYXNtLnIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0TW9kZWxCdWZmZXJNZW1vcnlPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0TW9kZWxCdWZmZXJNZW1vcnlPZmZzZXQ9dC5hc20ucykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRJbnB1dE1lbW9yeU9mZnNldD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRJbnB1dE1lbW9yeU9mZnNldD10LmFzbS50KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldElucHV0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldElucHV0SGVpZ2h0PXQuYXNtLnUpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0SW5wdXRXaWR0aD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRJbnB1dFdpZHRoPXQuYXNtLnYpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0SW5wdXRDaGFubmVsQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0SW5wdXRDaGFubmVsQ291bnQ9dC5hc20udykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRPdXRwdXRNZW1vcnlPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0TWVtb3J5T2Zmc2V0PXQuYXNtLngpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0T3V0cHV0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldE91dHB1dEhlaWdodD10LmFzbS55KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE91dHB1dFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldE91dHB1dFdpZHRoPXQuYXNtLnopLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0T3V0cHV0Q2hhbm5lbENvdW50PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldE91dHB1dENoYW5uZWxDb3VudD10LmFzbS5BKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2xvYWRNb2RlbD1mdW5jdGlvbigpe3JldHVybih0Ll9sb2FkTW9kZWw9dC5hc20uQikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9ydW5JbmZlcmVuY2U9ZnVuY3Rpb24oKXtyZXR1cm4odC5fcnVuSW5mZXJlbmNlPXQuYXNtLkMpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5faXNHUFVFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2lzR1BVRW5hYmxlZD10LmFzbS5EKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBtaT10Ll9fX2Vycm5vX2xvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuKG1pPXQuX19fZXJybm9fbG9jYXRpb249dC5hc20uRikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxTdDtmdW5jdGlvbiB0bChjKXt0aGlzLm5hbWU9IkV4aXRTdGF0dXMiLHRoaXMubWVzc2FnZT0iUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGggZXhpdCgiK2MrIikiLHRoaXMuc3RhdHVzPWN9R2U9ZnVuY3Rpb24gYygpe1N0fHx3cigpLFN0fHwoR2U9Yyl9O2Z1bmN0aW9uIHdyKGMpe2lmKGdlPjB8fChUZigpLGdlPjApKXJldHVybjtmdW5jdGlvbiBtKCl7U3R8fChTdD0hMCx0LmNhbGxlZFJ1bj0hMCwhSSYmKEFmKCksbih0KSx0Lm9uUnVudGltZUluaXRpYWxpemVkJiZ0Lm9uUnVudGltZUluaXRpYWxpemVkKCksd2YoKSkpfXQuc2V0U3RhdHVzPyh0LnNldFN0YXR1cygiUnVubmluZy4uLiIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5zZXRTdGF0dXMoIiIpfSwxKSxtKCl9LDEpKTptKCl9dC5ydW49d3I7ZnVuY3Rpb24gcmwoYyxtKXtubChjKX1mdW5jdGlvbiBubChjKXtFZigpfHwodC5vbkV4aXQmJnQub25FeGl0KGMpLEk9ITApLHUoYyxuZXcgdGwoYykpfWlmKHQucHJlSW5pdClmb3IodHlwZW9mIHQucHJlSW5pdD09ImZ1bmN0aW9uIiYmKHQucHJlSW5pdD1bdC5wcmVJbml0XSk7dC5wcmVJbml0Lmxlbmd0aD4wOyl0LnByZUluaXQucG9wKCkoKTtyZXR1cm4gd3IoKSxlLnJlYWR5fX0oKTtjbGFzcyBwZntjb25zdHJ1Y3Rvcigpe3AodGhpcywic2VsZWN0ZWRURkxpdGUiKTtwKHRoaXMsImlzU0lNRFN1cHBvcnRlZCIsITEpO3AodGhpcywiaXNUaHJlYWRzU3VwcG9ydGVkIiwhMSk7cCh0aGlzLCJpbnB1dFdpZHRoIiwwKTtwKHRoaXMsImlucHV0SGVpZ2h0IiwwKTtwKHRoaXMsImlucHV0Q2hhbm5lbENvdW50IiwwKTtwKHRoaXMsImlucHV0TWVtb3J5T2Zmc2V0IiwwKTtwKHRoaXMsIm91dHB1dFdpZHRoIiwwKTtwKHRoaXMsIm91dHB1dEhlaWdodCIsMCk7cCh0aGlzLCJvdXRwdXRDaGFubmVsQ291bnQiLDApO3AodGhpcywib3V0cHV0TWVtb3J5T2Zmc2V0IiwwKX19Y29uc3QgeWY9Imh0dHBzOi8vZDNvcHFqbXF6eGYwNTcuY2xvdWRmcm9udC5uZXQvdm9uYWdlLXRlbnNvcmZsb3ctd2FzbS90ZmxpdGUtc2ltZC13YXNtLzEuMS4zLyIsX2Y9Imh0dHBzOi8vZDNvcHFqbXF6eGYwNTcuY2xvdWRmcm9udC5uZXQvbWwvc2VsZmllX3NlZ21lbnRhdGlvbi80LjAuMC8iO2FzeW5jIGZ1bmN0aW9uIHhmKHI9eWYsZT1fZil7bGV0IHQ9bmV3IHBmO3ZhciBuPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGksbyl7YXN5bmMgZnVuY3Rpb24gcygpe3JldHVybiBoZih7bG9jYXRlRmlsZTpmdW5jdGlvbihmKXtyZXR1cm4gcitmfX0pfWFzeW5jIGZ1bmN0aW9uIGEodSl7cmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jKGYsZCk9Pntjb25zdCBoPXU7aWYodHlwZW9mIGg+InUiKXJldHVybiBkKCJURkxpdGUgYmFja2VuZCB1bmF2YWlsYWJsZTogd2FzbVNpbWQiKTtjb25zdCB5PSJzZWxmaWVfc2VnbWVudGF0aW9uX2xhbmRzY2FwZSI7Y29uc29sZS5sb2coIkxvYWRpbmcgdGZsaXRlIG1vZGVsOiIseSk7bGV0IHg9ZStgJHt5fS50ZmxpdGVgO2NvbnNvbGUubG9nKCJURkxpdGUgbW9kZWxVcmw6ICIreCk7dHJ5e2NvbnN0IGc9YXdhaXQoYXdhaXQgZmV0Y2goeCkpLmFycmF5QnVmZmVyKCk7Y29uc29sZS5sb2coIk1vZGVsIGJ1ZmZlciBzaXplOiIsZy5ieXRlTGVuZ3RoKTtjb25zdCBFPWguX2dldE1vZGVsQnVmZmVyTWVtb3J5T2Zmc2V0KCk7Y29uc29sZS5sb2coIk1vZGVsIGJ1ZmZlciBtZW1vcnkgb2Zmc2V0OiIsRSksY29uc29sZS5sb2coIkxvYWRpbmcgbW9kZWwgYnVmZmVyLi4uIiksaC5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KGcpLEUpO2NvbnN0IHY9aC5fbG9hZE1vZGVsKGcuYnl0ZUxlbmd0aCk7aWYoY29uc29sZS5sb2coIkxvYWQgbW9kZWwgcmVzdWx0OiIsdiksdiE9PTApe2QoIkNhbm5vdCBsb2FkIG1vZGVsIik7cmV0dXJufXQuaW5wdXRXaWR0aD1oLl9nZXRJbnB1dFdpZHRoKCksdC5pbnB1dEhlaWdodD1oLl9nZXRJbnB1dEhlaWdodCgpLHQuaW5wdXRDaGFubmVsQ291bnQ9aC5fZ2V0SW5wdXRDaGFubmVsQ291bnQoKSx0LmlucHV0TWVtb3J5T2Zmc2V0PWguX2dldElucHV0TWVtb3J5T2Zmc2V0KCksY29uc29sZS5sb2coIklucHV0IG1lbW9yeSBvZmZzZXQ6Iix0LmlucHV0TWVtb3J5T2Zmc2V0KSxjb25zb2xlLmxvZygiSW5wdXQgaGVpZ2h0OiIsdC5pbnB1dEhlaWdodCksY29uc29sZS5sb2coIklucHV0IHdpZHRoOiIsdC5pbnB1dFdpZHRoKSxjb25zb2xlLmxvZygiSW5wdXQgY2hhbm5lbHM6Iix0LmlucHV0Q2hhbm5lbENvdW50KSx0Lm91dHB1dE1lbW9yeU9mZnNldD1oLl9nZXRPdXRwdXRNZW1vcnlPZmZzZXQoKSx0Lm91dHB1dFdpZHRoPWguX2dldE91dHB1dFdpZHRoKCksdC5vdXRwdXRIZWlnaHQ9aC5fZ2V0T3V0cHV0SGVpZ2h0KCksdC5vdXRwdXRDaGFubmVsQ291bnQ9aC5fZ2V0T3V0cHV0Q2hhbm5lbENvdW50KCksY29uc29sZS5sb2coIk91dHB1dCBtZW1vcnkgb2Zmc2V0OiIsdC5vdXRwdXRNZW1vcnlPZmZzZXQpLGNvbnNvbGUubG9nKCJPdXRwdXQgaGVpZ2h0OiIsdC5vdXRwdXRIZWlnaHQpLGNvbnNvbGUubG9nKCJPdXRwdXQgd2lkdGg6Iix0Lm91dHB1dFdpZHRoKSxjb25zb2xlLmxvZygiT3V0cHV0IGNoYW5uZWxzOiIsdC5vdXRwdXRDaGFubmVsQ291bnQpLHQuc2VsZWN0ZWRURkxpdGU9aH1jYXRjaChsKXtkKGwpO3JldHVybn1mKCl9KX1zKCkudGhlbih1PT57aWYodT09PW51bGwpdGhyb3cgY29uc29sZS5lcnJvcigibG9hZFRGTGl0ZSBudWxsIiksImxvYWRURkxpdGUgbnVsbCI7YSh1KS50aGVuKGY9PntpKHQpfSkuY2F0Y2goZj0+e2NvbnNvbGUuZXJyb3IoImxvYWRURkxpdGVNb2RlbCBlcnJvciIpLG8oImxvYWRURkxpdGVNb2RlbCBlcnJvciIpfSl9KS5jYXRjaCh1PT57Y29uc29sZS5lcnJvcigibG9hZFRGTGl0ZSBlcnJvcjoiLHUpLG8oImxvYWRURkxpdGUgZXJyb3I6Iit1KX0pfSk7cmV0dXJuIG59Y2xhc3MgZ2Z7Y29uc3RydWN0b3IoKXtwKHRoaXMsImNhbnZhcyIsbmV3IE9mZnNjcmVlbkNhbnZhcygwLDApKTtwKHRoaXMsImNvbnRleHQiLHRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIix7d2lsbFJlYWRGcmVxdWVudGx5OiEwfSkpO3AodGhpcywicGl4ZWxDb3VudCIsMCk7cCh0aGlzLCJpbnB1dE9mZnNldCIsMCk7cCh0aGlzLCJvdXRwdXRPZmZzZXQiLDApO3AodGhpcywiaW5mb3MiKTtwKHRoaXMsIm1hc2siKX1hc3luYyBpbml0KGUsdCl7YXdhaXQgdGhpcy5pbml0V2FzbShlLHQpLHRoaXMuaW5mb3MmJih0aGlzLmNhbnZhcy53aWR0aD10aGlzLmluZm9zLmlucHV0V2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0PXRoaXMuaW5mb3MuaW5wdXRIZWlnaHQsdGhpcy5waXhlbENvdW50PXRoaXMuaW5mb3MuaW5wdXRXaWR0aCp0aGlzLmluZm9zLmlucHV0SGVpZ2h0LHRoaXMubWFzaz1uZXcgSW1hZ2VEYXRhKHRoaXMuaW5mb3MuaW5wdXRXaWR0aCx0aGlzLmluZm9zLmlucHV0SGVpZ2h0KSx0aGlzLmlucHV0T2Zmc2V0PXRoaXMuaW5mb3MuaW5wdXRNZW1vcnlPZmZzZXQvNCx0aGlzLm91dHB1dE9mZnNldD10aGlzLmluZm9zLm91dHB1dE1lbW9yeU9mZnNldC80KX1hc3luYyBpbml0V2FzbShlLHQpe3RoaXMuaW5mb3M9YXdhaXQgeGYoZSx0KX1nZXRPdXRwdXREaW1lbnNpb25zKCl7dmFyIGUsdCxuLGk7cmV0dXJue3dpZHRoOih0PShlPXRoaXMuaW5mb3MpPT1udWxsP3ZvaWQgMDplLm91dHB1dFdpZHRoKSE9bnVsbD90OjAsaGVpZ2h0OihpPShuPXRoaXMuaW5mb3MpPT1udWxsP3ZvaWQgMDpuLm91dHB1dEhlaWdodCkhPW51bGw/aTowfX1hc3luYyBwcm9jZXNzKGUpe2lmKCF0aGlzLm1hc2t8fCF0aGlzLmluZm9zKXJldHVybjtjb25zdCB0PXRoaXMuaW5mb3MuaW5wdXRXaWR0aCxuPXRoaXMuaW5mb3MuaW5wdXRIZWlnaHQ7dGhpcy5jb250ZXh0LmRyYXdJbWFnZShlLDAsMCxlLndpZHRoLGUuaGVpZ2h0LDAsMCx0LG4pO2NvbnN0IGk9dGhpcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLDAsdCxuKSxvPXRoaXMuaW5mb3Muc2VsZWN0ZWRURkxpdGUuSEVBUEYzMjtmb3IobGV0IHM9MDtzPHRoaXMucGl4ZWxDb3VudDtzKyspe2NvbnN0IGE9dGhpcy5pbnB1dE9mZnNldCtzKjM7b1thXT1pLmRhdGFbcyo0XS8yNTUsb1thKzFdPWkuZGF0YVtzKjQrMV0vMjU1LG9bYSsyXT1pLmRhdGFbcyo0KzJdLzI1NX10aGlzLmluZm9zLnNlbGVjdGVkVEZMaXRlLl9ydW5JbmZlcmVuY2UoKTtmb3IobGV0IHM9MDtzPHRoaXMucGl4ZWxDb3VudDtzKyspe2NvbnN0IGE9dGhpcy5pbmZvcy5zZWxlY3RlZFRGTGl0ZS5IRUFQRjMyW3RoaXMub3V0cHV0T2Zmc2V0K3NdO3RoaXMubWFzay5kYXRhW3MqNF09dGhpcy5tYXNrLmRhdGFbcyo0KzNdPTI1NSphfXJldHVybiBjcmVhdGVJbWFnZUJpdG1hcCh0aGlzLm1hc2spfWlzR3B1U3VwcG9ydGVkKCl7dmFyIGUsdCxuO3JldHVybihuPSh0PShlPXRoaXMuaW5mb3MpPT1udWxsP3ZvaWQgMDplLnNlbGVjdGVkVEZMaXRlKT09bnVsbD92b2lkIDA6dC5faXNHUFVFbmFibGVkKCkpIT1udWxsP246ITF9fWNsYXNzIGJme2NvbnN0cnVjdG9yKCl7cCh0aGlzLCJzZWxmaWVTZWdtZW50YXRpb24iLG5ldyBnZik7cCh0aGlzLCJiYWNrZ3JvdW5kRmlsdGVyIik7cCh0aGlzLCJyZXBvcnRlciIsbmV3IElvKTtwKHRoaXMsInByZXZpb3VzRGltZW5zaW9ucyIse3dpZHRoOjAsaGVpZ2h0OjB9KTtwKHRoaXMsImJhY2tncm91bmRPcHRpb25zIil9YXN5bmMgaW5pdChlLHQpe2F3YWl0IHRoaXMuc2VsZmllU2VnbWVudGF0aW9uLmluaXQodC53YXNtQXNzZXRVcmlQYXRoLHQudGZsaXRlQXNzZXRVcmlQYXRoKTtjb25zdHt3aWR0aDpuLGhlaWdodDppfT10aGlzLnNlbGZpZVNlZ21lbnRhdGlvbi5nZXRPdXRwdXREaW1lbnNpb25zKCk7dGhpcy5iYWNrZ3JvdW5kRmlsdGVyPW5ldyBtZihlLHtmb3JlZ3JvdW5kV2lkdGg6MSxmb3JlZ3JvdW5kSGVpZ2h0OjEsbWFza1dpZHRoOm4sbWFza0hlaWdodDppfSksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiQ3JlYXRlIn0pfWFzeW5jIHRyYW5zZm9ybShlLHQpe3ZhciBzLGEsdSxmO2NvbnN0IG49KHM9ZS50aW1lc3RhbXApIT1udWxsP3M6MCxpPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKGUpLG89YXdhaXQgdGhpcy5zZWxmaWVTZWdtZW50YXRpb24ucHJvY2VzcyhpKTtvPygoaS53aWR0aCE9PXRoaXMucHJldmlvdXNEaW1lbnNpb25zLndpZHRofHxpLmhlaWdodCE9PXRoaXMucHJldmlvdXNEaW1lbnNpb25zLmhlaWdodCkmJih0aGlzLnByZXZpb3VzRGltZW5zaW9ucy53aWR0aD1pLndpZHRoLHRoaXMucHJldmlvdXNEaW1lbnNpb25zLmhlaWdodD1pLmhlaWdodCxhd2FpdCgoYT10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDphLnJlc2l6ZUZvcmVncm91bmQoaS53aWR0aCxpLmhlaWdodCkpKSxhd2FpdCgodT10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp1LnByb2Nlc3MoaSxvKSksZS5jbG9zZSgpLHQuZW5xdWV1ZShuZXcgVmlkZW9GcmFtZSgoZj10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDpmLmNhbnZhcyx7dGltZXN0YW1wOm4sYWxwaGE6ImRpc2NhcmQifSkpKTp0LmVucXVldWUoZSl9YXN5bmMgc2V0QmFja2dyb3VuZE9wdGlvbnMoZSl7dmFyIHQ7dGhpcy5iYWNrZ3JvdW5kT3B0aW9ucz1lLGF3YWl0KCh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnQuc2V0QmFja2dyb3VuZE9wdGlvbnMoZSkpLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IlVwZGF0ZSJ9KX1hc3luYyBzZXRWaWRlb0JHUmVhZGFibGUoZSl7dmFyIHQ7YXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dC5zZXRWaWRlb0JHUmVhZGFibGUoZSkpfWFzeW5jIHNldFZpcnR1YWxCR0ltYWdlKGUpe3ZhciB0O2F3YWl0KCh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnQuc2V0VmlydHVhbEJHSW1hZ2UoZSkpfXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe3ZhciB0Oyh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGx8fHQuc2V0RmxpY2tlcmluZ09wdGlvbnMoZSksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiVXBkYXRlIn0pfWFzeW5jIHByb2ZpbGUoZSl7dmFyIHQsbjtyZXR1cm4obj0odD10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp0LnByb2ZpbGUoZSkpIT1udWxsP246W119Z2V0VHJhbnNmb3JtZXJUeXBlKCl7dmFyIGUsdDtyZXR1cm4odD0oZT10aGlzLmJhY2tncm91bmRPcHRpb25zKT09bnVsbD92b2lkIDA6ZS50cmFuc2Zvcm1lclR5cGUpIT1udWxsP3Q6IlVuZGVmaW5lZCJ9cmVwb3J0KGUpe3ZhciB0O3RoaXMucmVwb3J0ZXIuc2VuZCh7dmVyc2lvbjpGbyxhY3Rpb246Ik1sVHJhbnNmb3JtZXJzIix0cmFuc2Zvcm1lclR5cGU6KHQ9dGhpcy5iYWNrZ3JvdW5kT3B0aW9ucyk9PW51bGw/dm9pZCAwOnQudHJhbnNmb3JtZXJUeXBlLGNvbmZpZzpKU09OLnN0cmluZ2lmeSh0aGlzLmJhY2tncm91bmRPcHRpb25zKSwuLi5lfSl9fWNvbnN0IHZyPWNsYXNze2NvbnN0cnVjdG9yKCl7cCh0aGlzLCJiYWNrZ3JvdW5kVHJhbnNmb3JtZXIiLG5ldyBiZik7cCh0aGlzLCJtZWRpYVByb2Nlc3NvciIsbmV3IG5vKTtwKHRoaXMsInJhdGUiLDMwKTtwKHRoaXMsInJlc29sdmVPbk1lZGlhUHJvY2Vzc29yIik7cCh0aGlzLCJldmVudHNRdWV1ZSIsW10pfWFzeW5jIGluaXQoZSx0KXthd2FpdCB0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5pbml0KGUsdCksYXdhaXQgdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFuc2Zvcm1lcnMoW3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyXSksdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnJhdGUpLHRoaXMubWVkaWFQcm9jZXNzb3Iub25BbnkoKG4saSk9Pnt0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yPyh0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yKHtuYW1lOm4sZGF0YTppfSksdGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcj12b2lkIDApOnRoaXMuZXZlbnRzUXVldWUucHVzaCh7bmFtZTpuLGRhdGE6aX0pfSl9YXN5bmMgb25NZWRpYVByb2Nlc3NvckV2ZW50KCl7cmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGU9Pnt0aGlzLmV2ZW50c1F1ZXVlLmxlbmd0aD4wP2UodGhpcy5ldmVudHNRdWV1ZS5zaGlmdCgpKTp0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yPWV9KX1hc3luYyBzZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnJhdGU9ZSx0aGlzLm1lZGlhUHJvY2Vzc29yLnNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpfWFzeW5jIHRyYW5zZm9ybShlLHQpe3RoaXMubWVkaWFQcm9jZXNzb3IudHJhbnNmb3JtKGUsdCl9YXN5bmMgc2V0QmFja2dyb3VuZE9wdGlvbnMoZSl7dmFyIHQ7YXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIpPT1udWxsP3ZvaWQgMDp0LnNldEJhY2tncm91bmRPcHRpb25zKGUpKX1zZXRWaWRlb0JHUmVhZGFibGUoZSl7dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuc2V0VmlkZW9CR1JlYWRhYmxlKGUpfWFzeW5jIHNldFZpcnR1YWxCR0ltYWdlKGUpe2F3YWl0IHRoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnNldFZpcnR1YWxCR0ltYWdlKGUpfWFzeW5jIHRlcm1pbmF0ZSgpe2F3YWl0IHRoaXMubWVkaWFQcm9jZXNzb3IuZGVzdHJveSgpfXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnNldEZsaWNrZXJpbmdPcHRpb25zKGUpfXNldFZvbmFnZU1ldGFkYXRhKGUpe3FpKGUpfWFzeW5jIHByb2ZpbGUoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGF3YWl0IHRoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnByb2ZpbGUoZSkpfX07bGV0IG9pPXZyOygoKT0+e19pKCJQcm9jZXNzb3JXb3JrZXIiLHZyKX0pKCl9KSgpOwo=",Ml=typeof window<"u"&&window.Blob&&new Blob([atob(Al)],{type:"text/javascript;charset=utf-8"});function n3(){const i=Ml&&(window.URL||window.webkitURL).createObjectURL(Ml);try{return i?new Worker(i):new Worker("data:application/javascript;base64,"+Al)}finally{i&&(window.URL||window.webkitURL).revokeObjectURL(i)}}const Qo=class extends cr{constructor(){super(...arguments);Wt(this,"rate",30);Wt(this,"worker")}async init(r){this.worker=await B2(zo,n3),await this.worker.init(`worker_${Qo.initCount++}`,r),await this.worker.setVonageMetadata(li()),await this.setBackgroundOptions(r),this.listenWorker()}async setTrackExpectedRate(r){var p;await((p=this.worker)==null?void 0:p.setTrackExpectedRate(r))}async setBackgroundOptions(r){var G,S,H;const{transformerType:p}=r;switch(p){case"VideoBackground":await((G=this.worker)==null?void 0:G.setVideoBGReadable(await ys.createVideoReadable(r.backgroundAssetUri)));break;case"VirtualBackground":await((S=this.worker)==null?void 0:S.setVirtualBGImage(await ys.createImageCanvas(r.backgroundAssetUri)));break}await((H=this.worker)==null?void 0:H.setBackgroundOptions(r))}async transform(r,p){var G;await((G=this.worker)==null?void 0:G.transform(r,p))}async destroy(){var r;await((r=this.worker)==null?void 0:r.terminate())}async setFlickeringOptions(r){var p;await((p=this.worker)==null?void 0:p.setFlickeringOptions(r))}async profile(r){var G;const p=await((G=this.worker)==null?void 0:G.profile(r));return JSON.parse(p!=null?p:"[]")}async listenWorker(){var r,p,G;for(;(r=this.worker)!=null&&r.workerContext.worker;){const{name:S,data:H}=await((p=this.worker)==null?void 0:p.onMediaProcessorEvent());switch(S){case"error":case"warn":this.emit(S,H);break;case"pipelineInfo":switch(this.emit(S,H),H){case"pipeline_ended":case"pipeline_ended_with_error":await((G=this.worker)==null?void 0:G.terminate());return}break}}}};let Qi=Qo;Wt(Qi,"initCount",0);class r3{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={},p=[];let G=0;for(const H of this.queries){const w=[];for(const E of H)r[E.name]===void 0&&(r[E.name]=n.length,n.push({name:E.name})),w.push({type:E.action==Ws.PUSH?"O":"C",frame:r[E.name],at:E.timestamp}),G=Math.max(G,E.timestamp+E.duration);p.push({events:w,type:"evented",name:"GPU Profile",unit:"nanoseconds",startValue:0,endValue:G})}const S={$schema:"https://www.speedscope.app/file-format-schema.json",shared:{frames:n},profiles:p};return JSON.stringify(S,null,2)}}class Po extends cr{constructor(){super();Wt(this,"worker",new Qi);Wt(this,"connector",new x2(this.worker))}async init(r){await this.worker.init(r),this.worker.onAny((p,G)=>this.emit(p,G))}async setBackgroundOptions(r){await this.worker.setBackgroundOptions(r)}setTrackExpectedRate(r){this.worker.setTrackExpectedRate(r)}getConnector(){return this.connector}async profile(r){return this.worker.profile(r)}static async profile(r){const p=await Promise.all(this.instances.map(G=>G.profile(r)));return new r3(p)}static async create(r){const p=new this;return await p.init(r),this.instances.push(p),p}}Wt(Po,"instances",[]);function i3(){return ai}function o3(){return di}function s3(){return hi}function l3(){return fi}function c3(){return mi}function u3(){return pi}function a3(){return bi}async function d3(i){return await Po.create(i)}Ae.BackgroundTransformer=Bl,Ae.BackgroundTransformerType=ls,Ae.BlurRadius=Ar,Ae.ErrorFunction=ss,Ae.MediapipeHelper=yi,Ae.PipelineInfoData=ui,Ae.SelfieSegmentationType=cs,Ae.VonageMediaProcessor=Po,Ae.WarningType=os,Ae.createVonageMediaProcessor=d3,Ae.getSupportedBrowserFeatures=as,Ae.getVonageFaceDetection=l3,Ae.getVonageFaceMash=c3,Ae.getVonageHands=o3,Ae.getVonageHolistic=s3,Ae.getVonageObjectron=u3,Ae.getVonagePose=a3,Ae.getVonageSelfieSegmentation=i3,Ae.isSupported=L2,Object.defineProperties(Ae,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|