@vonage/ml-transformers 4.3.2 → 4.3.3

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.
@@ -1,4 +1,4 @@
1
- var du=Object.defineProperty,hu=(t,e,n)=>e in t?du(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,Rt=(t,e,n)=>(hu(t,"symbol"!=typeof e?e+"":e,n),n);function fu(){return new Promise(((t,e)=>{typeof MediaStreamTrackProcessor>"u"||typeof MediaStreamTrackGenerator>"u"?e("Your browser does not support the MediaStreamTrack API for Insertable Streams of Media."):t()}))}class or{}or.updates={transformer_new:"New transformer",transformer_null:"Null transformer"},or.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"};var Go={exports:{}},ks=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return t.apply(e,n)}},mu=ks,dr=Object.prototype.toString;function Xo(t){return Array.isArray(t)}function oo(t){return typeof t>"u"}function pu(t){return null!==t&&!oo(t)&&null!==t.constructor&&!oo(t.constructor)&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}function Es(t){return"[object ArrayBuffer]"===dr.call(t)}function bu(t){return"[object FormData]"===dr.call(t)}function yu(t){return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&Es(t.buffer)}function gu(t){return"string"==typeof t}function Zu(t){return"number"==typeof t}function Us(t){return null!==t&&"object"==typeof t}function li(t){if("[object Object]"!==dr.call(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype}function vu(t){return"[object Date]"===dr.call(t)}function Gu(t){return"[object File]"===dr.call(t)}function Xu(t){return"[object Blob]"===dr.call(t)}function Ks(t){return"[object Function]"===dr.call(t)}function Wu(t){return Us(t)&&Ks(t.pipe)}function Vu(t){return"[object URLSearchParams]"===dr.call(t)}function Ru(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function xu(){return(!(typeof navigator<"u")||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&(typeof window<"u"&&typeof document<"u")}function Wo(t,e){if(!(null===t||typeof t>"u"))if("object"!=typeof t&&(t=[t]),Xo(t))for(var n=0,r=t.length;n<r;n++)e.call(null,t[n],n,t);else for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&e.call(null,t[i],i,t)}function so(){var t={};function e(e,n){li(t[n])&&li(e)?t[n]=so(t[n],e):li(e)?t[n]=so({},e):Xo(e)?t[n]=e.slice():t[n]=e}for(var n=0,r=arguments.length;n<r;n++)Wo(arguments[n],e);return t}function Iu(t,e,n){return Wo(e,(function(e,r){t[r]=n&&"function"==typeof e?mu(e,n):e})),t}function Su(t){return 65279===t.charCodeAt(0)&&(t=t.slice(1)),t}var Qn={isArray:Xo,isArrayBuffer:Es,isBuffer:pu,isFormData:bu,isArrayBufferView:yu,isString:gu,isNumber:Zu,isObject:Us,isPlainObject:li,isUndefined:oo,isDate:vu,isFile:Gu,isBlob:Xu,isFunction:Ks,isStream:Wu,isURLSearchParams:Vu,isStandardBrowserEnv:xu,forEach:Wo,merge:so,extend:Iu,trim:Ru,stripBOM:Su},Rr=Qn;function ns(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var Ms=function(t,e,n){if(!e)return t;var r;if(n)r=n(e);else if(Rr.isURLSearchParams(e))r=e.toString();else{var i=[];Rr.forEach(e,(function(t,e){null===t||typeof t>"u"||(Rr.isArray(t)?e+="[]":t=[t],Rr.forEach(t,(function(t){Rr.isDate(t)?t=t.toISOString():Rr.isObject(t)&&(t=JSON.stringify(t)),i.push(ns(e)+"="+ns(t))})))})),r=i.join("&")}if(r){var o=t.indexOf("#");-1!==o&&(t=t.slice(0,o)),t+=(-1===t.indexOf("?")?"?":"&")+r}return t},Yu=Qn;function Ti(){this.handlers=[]}Ti.prototype.use=function(t,e,n){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1},Ti.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},Ti.prototype.forEach=function(t){Yu.forEach(this.handlers,(function(e){null!==e&&t(e)}))};var Tu=Ti,wu=Qn,Lu=function(t,e){wu.forEach(t,(function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])}))},Bs=function(t,e,n,r,i){return t.config=e,n&&(t.code=n),t.request=r,t.response=i,t.isAxiosError=!0,t.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}},t},Hu=Bs,As=function(t,e,n,r,i){var o=new Error(t);return Hu(o,e,n,r,i)},Fu=As,Cu=function(t,e,n){var r=n.config.validateStatus;n.status&&r&&!r(n.status)?e(Fu("Request failed with status code "+n.status,n.config,null,n.request,n)):t(n)},Qr=Qn,Nu=Qr.isStandardBrowserEnv()?{write:function(t,e,n,r,i,o){var a=[];a.push(t+"="+encodeURIComponent(e)),Qr.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),Qr.isString(r)&&a.push("path="+r),Qr.isString(i)&&a.push("domain="+i),!0===o&&a.push("secure"),document.cookie=a.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}},Ju=function(t){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)},ku=function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t},Eu=Ju,Uu=ku,Ku=function(t,e){return t&&!Eu(e)?Uu(t,e):e},ji=Qn,Mu=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"],Bu=function(t){var e,n,r,i={};return t&&ji.forEach(t.split("\n"),(function(t){if(r=t.indexOf(":"),e=ji.trim(t.substr(0,r)).toLowerCase(),n=ji.trim(t.substr(r+1)),e){if(i[e]&&Mu.indexOf(e)>=0)return;i[e]="set-cookie"===e?(i[e]?i[e]:[]).concat([n]):i[e]?i[e]+", "+n:n}})),i},rs=Qn,Au=rs.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function r(t){var r=t;return e&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return t=r(window.location.href),function(e){var n=rs.isString(e)?r(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return!0};function Vo(t){this.message=t}Vo.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},Vo.prototype.__CANCEL__=!0;var wi=Vo,Dr=Qn,ju=Cu,zu=Nu,Pu=Ms,Ou=Ku,_u=Bu,Qu=Au,zi=As,Du=Hi,$u=wi,is=function(t){return new Promise((function(e,n){var r,i=t.data,o=t.headers,a=t.responseType;function l(){t.cancelToken&&t.cancelToken.unsubscribe(r),t.signal&&t.signal.removeEventListener("abort",r)}Dr.isFormData(i)&&delete o["Content-Type"];var s=new XMLHttpRequest;if(t.auth){var c=t.auth.username||"",u=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";o.Authorization="Basic "+btoa(c+":"+u)}var d=Ou(t.baseURL,t.url);function h(){if(s){var r="getAllResponseHeaders"in s?_u(s.getAllResponseHeaders()):null,i={data:a&&"text"!==a&&"json"!==a?s.response:s.responseText,status:s.status,statusText:s.statusText,headers:r,config:t,request:s};ju((function(t){e(t),l()}),(function(t){n(t),l()}),i),s=null}}if(s.open(t.method.toUpperCase(),Pu(d,t.params,t.paramsSerializer),!0),s.timeout=t.timeout,"onloadend"in s?s.onloadend=h:s.onreadystatechange=function(){!s||4!==s.readyState||0===s.status&&(!s.responseURL||0!==s.responseURL.indexOf("file:"))||setTimeout(h)},s.onabort=function(){!s||(n(zi("Request aborted",t,"ECONNABORTED",s)),s=null)},s.onerror=function(){n(zi("Network Error",t,null,s)),s=null},s.ontimeout=function(){var e=t.timeout?"timeout of "+t.timeout+"ms exceeded":"timeout exceeded",r=t.transitional||Du.transitional;t.timeoutErrorMessage&&(e=t.timeoutErrorMessage),n(zi(e,t,r.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",s)),s=null},Dr.isStandardBrowserEnv()){var m=(t.withCredentials||Qu(d))&&t.xsrfCookieName?zu.read(t.xsrfCookieName):void 0;m&&(o[t.xsrfHeaderName]=m)}"setRequestHeader"in s&&Dr.forEach(o,(function(t,e){typeof i>"u"&&"content-type"===e.toLowerCase()?delete o[e]:s.setRequestHeader(e,t)})),Dr.isUndefined(t.withCredentials)||(s.withCredentials=!!t.withCredentials),a&&"json"!==a&&(s.responseType=t.responseType),"function"==typeof t.onDownloadProgress&&s.addEventListener("progress",t.onDownloadProgress),"function"==typeof t.onUploadProgress&&s.upload&&s.upload.addEventListener("progress",t.onUploadProgress),(t.cancelToken||t.signal)&&(r=function(t){!s||(n(!t||t&&t.type?new $u("canceled"):t),s.abort(),s=null)},t.cancelToken&&t.cancelToken.subscribe(r),t.signal&&(t.signal.aborted?r():t.signal.addEventListener("abort",r))),i||(i=null),s.send(i)}))},Kn=Qn,os=Lu,qu=Bs,tc={"Content-Type":"application/x-www-form-urlencoded"};function ss(t,e){!Kn.isUndefined(t)&&Kn.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}function ec(){var t;return(typeof XMLHttpRequest<"u"||typeof process<"u"&&"[object process]"===Object.prototype.toString.call(process))&&(t=is),t}function nc(t,e,n){if(Kn.isString(t))try{return(e||JSON.parse)(t),Kn.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(n||JSON.stringify)(t)}var Li={transitional:{silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},adapter:ec(),transformRequest:[function(t,e){return os(e,"Accept"),os(e,"Content-Type"),Kn.isFormData(t)||Kn.isArrayBuffer(t)||Kn.isBuffer(t)||Kn.isStream(t)||Kn.isFile(t)||Kn.isBlob(t)?t:Kn.isArrayBufferView(t)?t.buffer:Kn.isURLSearchParams(t)?(ss(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):Kn.isObject(t)||e&&"application/json"===e["Content-Type"]?(ss(e,"application/json"),nc(t)):t}],transformResponse:[function(t){var e=this.transitional||Li.transitional,n=e&&e.silentJSONParsing,r=e&&e.forcedJSONParsing,i=!n&&"json"===this.responseType;if(i||r&&Kn.isString(t)&&t.length)try{return JSON.parse(t)}catch(t){if(i)throw"SyntaxError"===t.name?qu(t,this,"E_JSON_PARSE"):t}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};Kn.forEach(["delete","get","head"],(function(t){Li.headers[t]={}})),Kn.forEach(["post","put","patch"],(function(t){Li.headers[t]=Kn.merge(tc)}));var Hi=Li,rc=Qn,ic=Hi,oc=function(t,e,n){var r=this||ic;return rc.forEach(n,(function(n){t=n.call(r,t,e)})),t},js=function(t){return!(!t||!t.__CANCEL__)},ls=Qn,Pi=oc,sc=js,lc=Hi,uc=wi;function Oi(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new uc("canceled")}var cc=function(t){return Oi(t),t.headers=t.headers||{},t.data=Pi.call(t,t.data,t.headers,t.transformRequest),t.headers=ls.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),ls.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||lc.adapter)(t).then((function(e){return Oi(t),e.data=Pi.call(t,e.data,e.headers,t.transformResponse),e}),(function(e){return sc(e)||(Oi(t),e&&e.response&&(e.response.data=Pi.call(t,e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))},Dn=Qn,zs=function(t,e){e=e||{};var n={};function r(t,e){return Dn.isPlainObject(t)&&Dn.isPlainObject(e)?Dn.merge(t,e):Dn.isPlainObject(e)?Dn.merge({},e):Dn.isArray(e)?e.slice():e}function i(n){return Dn.isUndefined(e[n])?Dn.isUndefined(t[n])?void 0:r(void 0,t[n]):r(t[n],e[n])}function o(t){if(!Dn.isUndefined(e[t]))return r(void 0,e[t])}function a(n){return Dn.isUndefined(e[n])?Dn.isUndefined(t[n])?void 0:r(void 0,t[n]):r(void 0,e[n])}function l(n){return n in e?r(t[n],e[n]):n in t?r(void 0,t[n]):void 0}var s={url:o,method:o,data:o,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:l};return Dn.forEach(Object.keys(t).concat(Object.keys(e)),(function(t){var e=s[t]||i,r=e(t);Dn.isUndefined(r)&&e!==l||(n[t]=r)})),n},Ps={version:"0.25.0"},ac=Ps.version,Ro={};["object","boolean","number","function","string","symbol"].forEach((function(t,e){Ro[t]=function(n){return typeof n===t||"a"+(e<1?"n ":" ")+t}}));var us={};function dc(t,e,n){if("object"!=typeof t)throw new TypeError("options must be an object");for(var r=Object.keys(t),i=r.length;i-- >0;){var o=r[i],a=e[o];if(a){var l=t[o],s=void 0===l||a(l,o,t);if(!0!==s)throw new TypeError("option "+o+" must be "+s)}else if(!0!==n)throw Error("Unknown option "+o)}}Ro.transitional=function(t,e,n){function r(t,e){return"[Axios v"+ac+"] Transitional option '"+t+"'"+e+(n?". "+n:"")}return function(n,i,o){if(!1===t)throw new Error(r(i," has been removed"+(e?" in "+e:"")));return e&&!us[i]&&(us[i]=!0,console.warn(r(i," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(n,i,o)}};var hc={assertOptions:dc,validators:Ro},Os=Qn,fc=Ms,cs=Tu,as=cc,Fi=zs,_s=hc,xr=_s.validators;function zr(t){this.defaults=t,this.interceptors={request:new cs,response:new cs}}zr.prototype.request=function(t,e){if("string"==typeof t?(e=e||{}).url=t:e=t||{},!e.url)throw new Error("Provided config url is not valid");(e=Fi(this.defaults,e)).method?e.method=e.method.toLowerCase():this.defaults.method?e.method=this.defaults.method.toLowerCase():e.method="get";var n=e.transitional;void 0!==n&&_s.assertOptions(n,{silentJSONParsing:xr.transitional(xr.boolean),forcedJSONParsing:xr.transitional(xr.boolean),clarifyTimeoutError:xr.transitional(xr.boolean)},!1);var r=[],i=!0;this.interceptors.request.forEach((function(t){"function"==typeof t.runWhen&&!1===t.runWhen(e)||(i=i&&t.synchronous,r.unshift(t.fulfilled,t.rejected))}));var o,a=[];if(this.interceptors.response.forEach((function(t){a.push(t.fulfilled,t.rejected)})),!i){var l=[as,void 0];for(Array.prototype.unshift.apply(l,r),l=l.concat(a),o=Promise.resolve(e);l.length;)o=o.then(l.shift(),l.shift());return o}for(var s=e;r.length;){var c=r.shift(),u=r.shift();try{s=c(s)}catch(t){u(t);break}}try{o=as(s)}catch(t){return Promise.reject(t)}for(;a.length;)o=o.then(a.shift(),a.shift());return o},zr.prototype.getUri=function(t){if(!t.url)throw new Error("Provided config url is not valid");return t=Fi(this.defaults,t),fc(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")},Os.forEach(["delete","get","head","options"],(function(t){zr.prototype[t]=function(e,n){return this.request(Fi(n||{},{method:t,url:e,data:(n||{}).data}))}})),Os.forEach(["post","put","patch"],(function(t){zr.prototype[t]=function(e,n,r){return this.request(Fi(r||{},{method:t,url:e,data:n}))}}));var mc=zr,pc=wi;function Cr(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var n=this;this.promise.then((function(t){if(n._listeners){var e,r=n._listeners.length;for(e=0;e<r;e++)n._listeners[e](t);n._listeners=null}})),this.promise.then=function(t){var e,r=new Promise((function(t){n.subscribe(t),e=t})).then(t);return r.cancel=function(){n.unsubscribe(e)},r},t((function(t){n.reason||(n.reason=new pc(t),e(n.reason))}))}Cr.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},Cr.prototype.subscribe=function(t){this.reason?t(this.reason):this._listeners?this._listeners.push(t):this._listeners=[t]},Cr.prototype.unsubscribe=function(t){if(this._listeners){var e=this._listeners.indexOf(t);-1!==e&&this._listeners.splice(e,1)}},Cr.source=function(){var t;return{token:new Cr((function(e){t=e})),cancel:t}};var bc=Cr,yc=function(t){return function(e){return t.apply(null,e)}},gc=Qn,Zc=function(t){return gc.isObject(t)&&!0===t.isAxiosError},ds=Qn,vc=ks,ui=mc,Gc=zs,Xc=Hi;function Qs(t){var e=new ui(t),n=vc(ui.prototype.request,e);return ds.extend(n,ui.prototype,e),ds.extend(n,e),n.create=function(e){return Qs(Gc(t,e))},n}var rr=Qs(Xc);rr.Axios=ui,rr.Cancel=wi,rr.CancelToken=bc,rr.isCancel=js,rr.VERSION=Ps.version,rr.all=function(t){return Promise.all(t)},rr.spread=yc,rr.isAxiosError=Zc,Go.exports=rr,Go.exports.default=rr;var Wc=Go.exports;class Se{isEmpty(){return!this.isPresent()}static of(t){if(null!=t)return new hs(t);throw new TypeError("The passed value was null or undefined.")}static ofNonNull(t){return Se.of(t)}static ofNullable(t){return null!=t?new hs(t):new fs}static empty(){return new fs}static from(t){switch(t.kind){case"present":return Se.of(t.value);case"empty":return Se.empty();default:throw new TypeError("The passed value was not an Option type.")}}}class hs extends Se{constructor(t){super(),this.payload=t}isPresent(){return!0}get(){return this.payload}ifPresent(t){t(this.payload)}ifPresentOrElse(t,e){t(this.payload)}filter(t){return t(this.payload)?this:Se.empty()}map(t){const e=t(this.payload);return Se.ofNullable(e)}flatMap(t){return t(this.payload)}or(t){return this}orElse(t){return this.payload}orElseGet(t){return this.payload}orElseThrow(t){return this.payload}orNull(){return this.payload}orUndefined(){return this.payload}toOption(){return{kind:"present",value:this.payload}}matches(t){return t.present(this.payload)}toJSON(t){return this.payload}}class fs extends Se{isPresent(){return!1}constructor(){super()}get(){throw new TypeError("The optional is not present.")}ifPresent(t){}ifPresentOrElse(t,e){e()}filter(t){return this}map(t){return Se.empty()}flatMap(t){return Se.empty()}or(t){return t()}orElse(t){return t}orElseGet(t){return this.orElse(t())}orElseThrow(t){throw t()}orNull(){return null}orUndefined(){}toOption(){return{kind:"empty"}}matches(t){return t.empty()}toJSON(t){return null}}const Vc="2.0.0";function Rc(t){globalThis._vonageMediaProcessorMetadata=t}function Ds(){return globalThis._vonageMediaProcessorMetadata}class $n{constructor(){const t=Ds();this._report={action:Se.empty(),applicationId:Se.ofNullable(void 0!==t&&null!=t?t.appId:null),timestamp:Date.now(),fps:Se.empty(),framesTransformed:Se.empty(),guid:Se.empty(),highestFrameTransformCpu:Se.empty(),message:Se.empty(),source:Se.ofNullable(void 0!==t&&null!=t?t.sourceType:null),transformedFps:Se.empty(),transformerType:Se.empty(),variation:Se.empty(),videoHeight:Se.empty(),videoWidth:Se.empty(),version:Vc,error:Se.empty(),proxyUrl:Se.ofNullable(void 0!==t&&null!=t?t.proxyUrl:null)}}action(t){return this._report.action=Se.ofNullable(t),this}framesTransformed(t){return this._report.framesTransformed=Se.ofNullable(t),this}fps(t){return this._report.fps=Se.ofNullable(t),this}guid(t){return this._report.guid=Se.ofNullable(t),this}message(t){return this._report.message=Se.ofNullable(t),this}transformedFps(t){return this._report.transformedFps=Se.ofNullable(t),this}transformerType(t){return this._report.transformerType=Se.ofNullable(t),this}variation(t){return this._report.variation=Se.ofNullable(t),this}videoHeight(t){return this._report.videoHeight=Se.ofNullable(t),this}videoWidth(t){return this._report.videoWidth=Se.ofNullable(t),this}error(t){return this._report.error=Se.ofNullable(t),this}build(){return this._report}}const xc=t=>JSON.stringify(t,((t,e)=>{if(null!==e)return e}));class qn{static report(t){return new Promise(((e,n)=>{if(t.applicationId.isEmpty()||t.source.isEmpty())return void e("success");let r=Wc.create(),i="hlg.tokbox.com/prod/logging/vcp_webrtc";if(t.proxyUrl.isEmpty())i="https://"+i;else{let e;e="/"!==t.proxyUrl.get().slice(t.proxyUrl.get().length-1)?t.proxyUrl.get()+"/":t.proxyUrl.get(),i=e+i}var o;r.post(i,(o=t,JSON.stringify(o,((t,e)=>{if(null!==e)return e}))),{timeout:1e4,timeoutErrorMessage:"Request timeout",headers:{"Content-Type":"application/json"}}).then((t=>{console.log(t),e("success")})).catch((t=>{console.log(t),n(t)}))}))}}var $r,Ic=new Uint8Array(16);function Sc(){if(!$r&&!($r=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return $r(Ic)}var Yc=/^(?:[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 Tc(t){return"string"==typeof t&&Yc.test(t)}for(var Un=[],_i=0;_i<256;++_i)Un.push((_i+256).toString(16).substr(1));function wc(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=(Un[t[e+0]]+Un[t[e+1]]+Un[t[e+2]]+Un[t[e+3]]+"-"+Un[t[e+4]]+Un[t[e+5]]+"-"+Un[t[e+6]]+Un[t[e+7]]+"-"+Un[t[e+8]]+Un[t[e+9]]+"-"+Un[t[e+10]]+Un[t[e+11]]+Un[t[e+12]]+Un[t[e+13]]+Un[t[e+14]]+Un[t[e+15]]).toLowerCase();if(!Tc(n))throw TypeError("Stringified UUID is invalid");return n}function $s(t,e,n){var r=(t=t||{}).random||(t.rng||Sc)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,e){n=n||0;for(var i=0;i<16;++i)e[n+i]=r[i];return e}return wc(r)}const lr=new WeakMap,ci=new WeakMap,Er=new WeakMap,lo=Symbol("anyProducer"),ms=Promise.resolve(),fi=Symbol("listenerAdded"),mi=Symbol("listenerRemoved");let Qi=!1;function Ir(t){if("string"!=typeof t&&"symbol"!=typeof t)throw new TypeError("eventName must be a string or a symbol")}function qr(t){if("function"!=typeof t)throw new TypeError("listener must be a function")}function Sr(t,e){const n=ci.get(t);return n.has(e)||n.set(e,new Set),n.get(e)}function Ur(t,e){const n="string"==typeof e||"symbol"==typeof e?e:lo,r=Er.get(t);return r.has(n)||r.set(n,new Set),r.get(n)}function Lc(t,e,n){const r=Er.get(t);if(r.has(e))for(const t of r.get(e))t.enqueue(n);if(r.has(lo)){const t=Promise.all([e,n]);for(const e of r.get(lo))e.enqueue(t)}}function ps(t,e){e=Array.isArray(e)?e:[e];let n=!1,r=()=>{},i=[];const o={enqueue(t){i.push(t),r()},finish(){n=!0,r()}};for(const n of e)Ur(t,n).add(o);return{async next(){return i?0===i.length?n?(i=void 0,this.next()):(await new Promise((t=>{r=t})),this.next()):{done:!1,value:await i.shift()}:{done:!0}},async return(n){i=void 0;for(const n of e)Ur(t,n).delete(o);return r(),arguments.length>0?{done:!0,value:await n}:{done:!0}},[Symbol.asyncIterator](){return this}}}function bs(t){if(void 0===t)return ys;if(!Array.isArray(t))throw new TypeError("`methodNames` must be an array of strings");for(const e of t)if(!ys.includes(e))throw"string"!=typeof e?new TypeError("`methodNames` element must be a string"):new Error(`${e} is not Emittery method`);return t}const Di=t=>t===fi||t===mi;class vr{static mixin(t,e){return e=bs(e),n=>{if("function"!=typeof n)throw new TypeError("`target` must be function");for(const t of e)if(void 0!==n.prototype[t])throw new Error(`The property \`${t}\` already exists on \`target\``);Object.defineProperty(n.prototype,t,{enumerable:!1,get:function(){return Object.defineProperty(this,t,{enumerable:!1,value:new vr}),this[t]}});const r=e=>function(...n){return this[t][e](...n)};for(const t of e)Object.defineProperty(n.prototype,t,{enumerable:!1,value:r(t)});return n}}static get isDebugEnabled(){if("object"!=typeof process)return Qi;const{env:t}=process||{env:{}};return"emittery"===t.DEBUG||"*"===t.DEBUG||Qi}static set isDebugEnabled(t){Qi=t}constructor(t={}){lr.set(this,new Set),ci.set(this,new Map),Er.set(this,new Map),this.debug=t.debug||{},void 0===this.debug.enabled&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(t,e,n,r)=>{r=JSON.stringify(r),"symbol"==typeof n&&(n=n.toString());const i=new Date,o=`${i.getHours()}:${i.getMinutes()}:${i.getSeconds()}.${i.getMilliseconds()}`;console.log(`[${o}][emittery:${t}][${e}] Event Name: ${n}\n\tdata: ${r}`)})}logIfDebugEnabled(t,e,n){(vr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(t,this.debug.name,e,n)}on(t,e){qr(e),t=Array.isArray(t)?t:[t];for(const n of t)Ir(n),Sr(this,n).add(e),this.logIfDebugEnabled("subscribe",n,void 0),Di(n)||this.emit(fi,{eventName:n,listener:e});return this.off.bind(this,t,e)}off(t,e){qr(e),t=Array.isArray(t)?t:[t];for(const n of t)Ir(n),Sr(this,n).delete(e),this.logIfDebugEnabled("unsubscribe",n,void 0),Di(n)||this.emit(mi,{eventName:n,listener:e})}once(t){return new Promise((e=>{const n=this.on(t,(t=>{n(),e(t)}))}))}events(t){t=Array.isArray(t)?t:[t];for(const e of t)Ir(e);return ps(this,t)}async emit(t,e){Ir(t),this.logIfDebugEnabled("emit",t,e),Lc(this,t,e);const n=Sr(this,t),r=lr.get(this),i=[...n],o=Di(t)?[]:[...r];await ms,await Promise.all([...i.map((async t=>{if(n.has(t))return t(e)})),...o.map((async n=>{if(r.has(n))return n(t,e)}))])}async emitSerial(t,e){Ir(t),this.logIfDebugEnabled("emitSerial",t,e);const n=Sr(this,t),r=lr.get(this),i=[...n],o=[...r];await ms;for(const t of i)n.has(t)&&await t(e);for(const n of o)r.has(n)&&await n(t,e)}onAny(t){return qr(t),this.logIfDebugEnabled("subscribeAny",void 0,void 0),lr.get(this).add(t),this.emit(fi,{listener:t}),this.offAny.bind(this,t)}anyEvent(){return ps(this)}offAny(t){qr(t),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(mi,{listener:t}),lr.get(this).delete(t)}clearListeners(t){t=Array.isArray(t)?t:[t];for(const e of t)if(this.logIfDebugEnabled("clear",e,void 0),"string"==typeof e||"symbol"==typeof e){Sr(this,e).clear();const t=Ur(this,e);for(const e of t)e.finish();t.clear()}else{lr.get(this).clear();for(const t of ci.get(this).values())t.clear();for(const t of Er.get(this).values()){for(const e of t)e.finish();t.clear()}}}listenerCount(t){t=Array.isArray(t)?t:[t];let e=0;for(const n of t)if("string"!=typeof n){typeof n<"u"&&Ir(n),e+=lr.get(this).size;for(const t of ci.get(this).values())e+=t.size;for(const t of Er.get(this).values())e+=t.size}else e+=lr.get(this).size+Sr(this,n).size+Ur(this,n).size+Ur(this).size;return e}bindMethods(t,e){if("object"!=typeof t||null===t)throw new TypeError("`target` must be an object");e=bs(e);for(const n of e){if(void 0!==t[n])throw new Error(`The property \`${n}\` already exists on \`target\``);Object.defineProperty(t,n,{enumerable:!1,value:this[n].bind(this)})}}}const ys=Object.getOwnPropertyNames(vr.prototype).filter((t=>"constructor"!==t));Object.defineProperty(vr,"listenerAdded",{value:fi,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(vr,"listenerRemoved",{value:mi,writable:!1,enumerable:!0,configurable:!1});var xo=vr;function Hc(t){return"object"==typeof t&&null!==t&&"message"in t&&"string"==typeof t.message}function Fc(t){if(Hc(t))return t;try{return new Error(JSON.stringify(t))}catch{return new Error(String(t))}}function $i(t){return Fc(t).message}var Cc=(t=>(t.FPS_DROP="fps_drop",t))(Cc||{}),Nc=(t=>(t.start="start",t.transform="transform",t.flush="flush",t))(Nc||{}),uo=(t=>(t.pipeline_ended="pipeline_ended",t.pipeline_ended_with_error="pipeline_ended_with_error",t.pipeline_started="pipeline_started",t.pipeline_started_with_error="pipeline_started_with_error",t.pipeline_restarted="pipeline_restarted",t.pipeline_restarted_with_error="pipeline_restarted_with_error",t))(uo||{});const Jc=500,kc=.8;class Ec extends xo{constructor(t,e){super(),this.index_=e,this.uuid_=$s(),this.framesTransformed_=0,this.transformer_=t,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 t&&(this.transformerType_=t.getTransformerType());const n=(new $n).action("MediaTransformer").guid(this.uuid_).transformerType(this.transformerType_).variation("Create").build();qn.report(n)}setTrackExpectedRate(t){this.trackExpectedRate_=t}async start(t){if(this.controller_=t,this.transformer_&&"function"==typeof this.transformer_.start)try{await this.transformer_.start(t)}catch(t){const e=(new $n).action("MediaTransformer").guid(this.uuid_).message(or.errors.transformer_start).transformerType(this.transformerType_).variation("Error").error($i(t)).build();qn.report(e);const n={eventMetaData:{transformerIndex:this.index_},error:t,function:"start"};this.emit("error",n)}}async transform(t,e){var n,r,i,o;if(0===this.mediaTransformerQosReportStartTimestamp_&&(this.mediaTransformerQosReportStartTimestamp_=Date.now()),t instanceof VideoFrame&&(this.videoHeight_=null!=(n=null==t?void 0:t.displayHeight)?n:0,this.videoWidth_=null!=(r=null==t?void 0:t.displayWidth)?r:0),++this.framesFromSource_,this.transformer_)if(this.shouldStop_)console.warn("[Pipeline] flush from transform"),t.close(),this.flush(e),e.terminate();else try{await(null==(o=(i=this.transformer_).transform)?void 0:o.call(i,t,e)),++this.framesTransformed_,this.framesTransformed_===Jc&&this.mediaTransformerQosReport()}catch(t){const e=(new $n).action("MediaTransformer").guid(this.uuid_).message(or.errors.transformer_transform).transformerType(this.transformerType_).variation("Error").error($i(t)).build();qn.report(e);const n={eventMetaData:{transformerIndex:this.index_},error:t,function:"transform"};this.emit("error",n)}}async flush(t){if(this.transformer_&&"function"==typeof this.transformer_.flush&&!this.isFlashed_){this.isFlashed_=!0;try{await this.transformer_.flush(t)}catch(t){const e=(new $n).action("MediaTransformer").guid(this.uuid_).message(or.errors.transformer_flush).transformerType(this.transformerType_).variation("Error").error($i(t)).build();qn.report(e);const n={eventMetaData:{transformerIndex:this.index_},error:t,function:"flush"};this.emit("error",n)}}this.mediaTransformerQosReport();const e=(new $n).action("MediaTransformer").guid(this.uuid_).transformerType(this.transformerType_).variation("Delete").build();qn.report(e)}stop(){console.log("[Pipeline] Stop stream."),this.controller_&&(this.flush(this.controller_),this.controller_.terminate()),this.shouldStop_=!0}mediaTransformerQosReport(){let t=(Date.now()-this.mediaTransformerQosReportStartTimestamp_)/1e3,e=this.framesFromSource_/t,n=this.framesTransformed_/t;if(-1!=this.trackExpectedRate_&&this.trackExpectedRate_*kc>e){const t={eventMetaData:{transformerIndex:this.index_},warningType:"fps_drop",dropInfo:{requested:this.trackExpectedRate_,current:e}};this.emit("warn",t)}const r=(new $n).action("MediaTransformer").fps(e).transformedFps(n).framesTransformed(this.framesTransformed_).guid(this.uuid_).transformerType(this.transformerType_).videoHeight(this.videoHeight_).videoWidth(this.videoWidth_).variation("QoS").build();qn.report(r),this.mediaTransformerQosReportStartTimestamp_=0,this.framesFromSource_=0,this.framesTransformed_=0}}class Uc extends xo{constructor(t){super(),this.transformers_=[],this.trackExpectedRate_=-1;for(let e=0;e<t.length;e++){let n=new Ec(t[e],e);n.on("error",(t=>{this.emit("error",t)})),n.on("warn",(t=>{this.emit("warn",t)})),this.transformers_.push(n)}}setTrackExpectedRate(t){this.trackExpectedRate_=t;for(let t of this.transformers_)t.setTrackExpectedRate(this.trackExpectedRate_)}async start(t,e){if(this.transformers_&&0!==this.transformers_.length){try{let n=t;for(let e of this.transformers_)t=t.pipeThrough(new TransformStream(e));t.pipeTo(e).then((async()=>{console.log("[Pipeline] Setup."),await e.abort(),await n.cancel(),this.emit("pipelineInfo","pipeline_ended")})).catch((async r=>{t.cancel().then((()=>{console.log("[Pipeline] Shutting down streams after abort.")})).catch((t=>{console.error("[Pipeline] Error from stream transform:",t)})),await e.abort(r),await n.cancel(r),this.emit("pipelineInfo","pipeline_ended_with_error")}))}catch{return this.emit("pipelineInfo","pipeline_started_with_error"),void this.destroy()}this.emit("pipelineInfo","pipeline_started"),console.log("[Pipeline] Pipeline started.")}else console.log("[Pipeline] No transformers.")}async destroy(){console.log("[Pipeline] Destroying Pipeline.");for(let t of this.transformers_)t.stop()}}class Kc extends xo{constructor(){super(),this.uuid_=$s(),this.trackExpectedRate_=-1;const t=(new $n).action("MediaProcessor").guid(this.uuid_).variation("Create").build();qn.report(t)}setTrackExpectedRate(t){this.trackExpectedRate_=t,this.pipeline_&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_)}transform(t,e){return this.readable_=t,this.writable_=e,this.transformInternal()}transformInternal(){return new Promise(((t,e)=>{if(!this.transformers_||0===this.transformers_.length){const t=(new $n).action("MediaProcessor").guid(this.uuid_).message(or.errors.transformer_none).variation("Error").build();return qn.report(t),void e("[MediaProcessor] Need to set transformers.")}if(!this.readable_){const t=(new $n).action("MediaProcessor").guid(this.uuid_).message(or.errors.readable_null).variation("Error").build();return qn.report(t),void e("[MediaProcessor] Readable is null.")}if(!this.writable_){const t=(new $n).action("MediaProcessor").guid(this.uuid_).message(or.errors.writable_null).variation("Error").build();return qn.report(t),void e("[MediaProcessor] Writable is null.")}let n=!1;this.pipeline_&&(n=!0,this.pipeline_.clearListeners(),this.pipeline_.destroy()),this.pipeline_=new Uc(this.transformers_),this.pipeline_.on("warn",(t=>{this.emit("warn",t)})),this.pipeline_.on("error",(t=>{this.emit("error",t)})),this.pipeline_.on("pipelineInfo",(t=>{n&&("pipeline_started"===t?t=uo.pipeline_restarted:"pipeline_started_with_error"===t&&(t=uo.pipeline_restarted_with_error)),this.emit("pipelineInfo",t)})),-1!=this.trackExpectedRate_&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_),this.pipeline_.start(this.readable_,this.writable_).then((()=>{t()})).catch((t=>{e(t)}))}))}setTransformers(t){const e=(new $n).action("MediaProcessor").guid(this.uuid_).message(or.updates.transformer_new).variation("Update").build();return qn.report(e),this.transformers_=t,this.readable_&&this.writable_?this.transformInternal():Promise.resolve()}destroy(){return new Promise((t=>{this.pipeline_&&this.pipeline_.destroy();const e=(new $n).action("MediaProcessor").guid(this.uuid_).variation("Delete").build();qn.report(e),t()}))}}class Mc{constructor(){this.processor_=null,this.generator_=null}init(t){return new Promise(((e,n)=>{try{this.processor_=new MediaStreamTrackProcessor(t)}catch(t){console.log(`[InsertableStreamHelper] MediaStreamTrackProcessor failed: ${t}`),n(t)}try{"audio"===t.kind?this.generator_=new MediaStreamTrackGenerator({kind:"audio"}):"video"===t.kind?this.generator_=new MediaStreamTrackGenerator({kind:"video"}):n("kind not supported")}catch(t){console.log(`[InsertableStreamHelper] MediaStreamTrackGenerator failed: ${t}`),n(t)}e()}))}getReadable(){return this.processor_.readable}getWriteable(){return this.generator_.writable}getProccesorTrack(){return this.generator_}}class Bc{constructor(t){this.insertableStreamHelper_=new Mc,this.mediaProcessor_=t}setTrack(t){return new Promise(((e,n)=>{this.insertableStreamHelper_.init(t).then((()=>{this.mediaProcessor_.transform(this.insertableStreamHelper_.getReadable(),this.insertableStreamHelper_.getWriteable()).then((()=>{e(this.insertableStreamHelper_.getProccesorTrack())})).catch((t=>{n(t)}))})).catch((t=>{n(t)}))}))}destroy(){return new Promise(((t,e)=>{this.mediaProcessor_?this.mediaProcessor_.destroy().then((()=>{t()})).catch((t=>{e(t)})):e("no processor")}))}}var ai=(t=>(t.Low="Low",t.High="High",t))(ai||{});const Ac=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 jc=function(){var t=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return function(e){var n,r,i=typeof(e=e||{})<"u"?e:{};i.ready=new Promise((function(t,e){n=t,r=e}));var o,a={};for(o in i)i.hasOwnProperty(o)&&(a[o]=i[o]);var l="./this.program",s=function(t,e){throw e},c="";typeof document<"u"&&document.currentScript&&(c=document.currentScript.src),t&&(c=t),c=0!==c.indexOf("blob:")?c.substr(0,c.replace(/[?#].*/,"").lastIndexOf("/")+1):"";var u,d=i.print||console.log.bind(console),h=i.printErr||console.warn.bind(console);for(o in a)a.hasOwnProperty(o)&&(i[o]=a[o]);a=null,i.arguments&&i.arguments,i.thisProgram&&(l=i.thisProgram),i.quit&&(s=i.quit),i.wasmBinary&&(u=i.wasmBinary);var m=i.noExitRuntime||!0;"object"!=typeof WebAssembly&&H("no native wasm support detected");var p,f,b,g,y,Z=!1,v=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function G(t,e,n){for(var r=e+n,i=e;t[i]&&!(i>=r);)++i;if(i-e>16&&t.subarray&&v)return v.decode(t.subarray(e,i));for(var o="";e<i;){var a=t[e++];if(128&a){var l=63&t[e++];if(192!=(224&a)){var s=63&t[e++];if((a=224==(240&a)?(15&a)<<12|l<<6|s:(7&a)<<18|l<<12|s<<6|63&t[e++])<65536)o+=String.fromCharCode(a);else{var c=a-65536;o+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else o+=String.fromCharCode((31&a)<<6|l)}else o+=String.fromCharCode(a)}return o}function X(t,e){return t?G(g,t,e):""}function W(t,e){return t%e>0&&(t+=e-t%e),t}function V(t){f=t,i.HEAP8=b=new Int8Array(t),i.HEAP16=new Int16Array(t),i.HEAP32=y=new Int32Array(t),i.HEAPU8=g=new Uint8Array(t),i.HEAPU16=new Uint16Array(t),i.HEAPU32=new Uint32Array(t),i.HEAPF32=new Float32Array(t),i.HEAPF64=new Float64Array(t)}i.INITIAL_MEMORY;var R,x=[],I=[],Y=[];var w=0,S=null;function H(t){i.onAbort&&i.onAbort(t),h(t="Aborted("+t+")"),Z=!0,t+=". Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(t);throw r(e),e}i.preloadedImages={},i.preloadedAudios={};var F,L,C;function T(t){return t.startsWith("data:application/octet-stream;base64,")}function k(t){try{if(t==F&&u)return new Uint8Array(u);throw"both async and sync fetching of the wasm failed"}catch(t){H(t)}}function J(t){for(;t.length>0;){var e=t.shift();if("function"!=typeof e){var n=e.func;"number"==typeof n?void 0===e.arg?R.get(n)():R.get(n)(e.arg):n(void 0===e.arg?null:e.arg)}else e(i)}}T(F="tflite-simd.wasm")||(L=F,F=i.locateFile?i.locateFile(L,c):c+L),C=function(){return performance.now()};function N(t){try{return p.grow(t-f.byteLength+65535>>>16),V(p.buffer),1}catch{}}var K={};function U(){if(!U.strings){var t={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:l||"./this.program"};for(var e in K)void 0===K[e]?delete t[e]:t[e]=K[e];var n=[];for(var e in t)n.push(e+"="+t[e]);U.strings=n}return U.strings}var j={mappings:{},buffers:[null,[],[]],printChar:function(t,e){var n=j.buffers[t];0===e||10===e?((1===t?d:h)(G(n,0)),n.length=0):n.push(e)},varargs:void 0,get:function(){return j.varargs+=4,y[j.varargs-4>>2]},getStr:function(t){return X(t)},get64:function(t,e){return t}};var z={a:function(t,e,n,r){H("Assertion failed: "+X(t)+", at: "+[e?X(e):"unknown filename",n,r?X(r):"unknown function"])},e:function(t,e){H("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")},d:function(t,e){H("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")},b:function(){H("")},n:function(t,e){var n;if(0===t)n=Date.now();else{if(1!==t&&4!==t)return function(t){y[M()>>2]=t}(28),-1;n=C()}return y[e>>2]=n/1e3|0,y[e+4>>2]=n%1e3*1e3*1e3|0,0},h:function(){return 2147483648},l:function(t,e,n){g.copyWithin(t,e,e+n)},m:function(t){var e=g.length,n=2147483648;if((t>>>=0)>n)return!1;for(var r=1;r<=4;r*=2){var i=e*(1+.2/r);if(i=Math.min(i,t+100663296),N(Math.min(n,W(Math.max(t,i),65536))))return!0}return!1},p:function(t){for(var e=C();C()-e<t;);},f:function(t,e){var n=0;return U().forEach((function(r,i){var o=e+n;y[t+4*i>>2]=o,function(t,e,n){for(var r=0;r<t.length;++r)b[e++>>0]=t.charCodeAt(r);n||(b[e>>0]=0)}(r,o),n+=r.length+1})),0},g:function(t,e){var n=U();y[t>>2]=n.length;var r=0;return n.forEach((function(t){r+=t.length+1})),y[e>>2]=r,0},j:function(t){!function(t,e){!function(t){m||(i.onExit&&i.onExit(t),Z=!0),s(t,new E(t))}(t)}(t)},i:function(t){return 0},k:function(t,e,n,r,i){},c:function(t,e,n,r){for(var i=0,o=0;o<n;o++){for(var a=y[e+8*o>>2],l=y[e+(8*o+4)>>2],s=0;s<l;s++)j.printChar(t,g[a+s]);i+=l}return y[r>>2]=i,0},o:function t(e,n){t.randomDevice||(t.randomDevice=function(){if("object"==typeof crypto&&"function"==typeof crypto.getRandomValues){var t=new Uint8Array(1);return function(){return crypto.getRandomValues(t),t[0]}}return function(){H("randomDevice")}}());for(var r=0;r<n;r++)b[e+r>>0]=t.randomDevice();return 0}};(function(){var t={a:z};function e(t,e){var n=t.exports;i.asm=n,V((p=i.asm.q).buffer),R=i.asm.E,function(t){I.unshift(t)}(i.asm.r),function(t){if(w--,i.monitorRunDependencies&&i.monitorRunDependencies(w),0==w&&S){var e=S;S=null,e()}}()}function n(t){e(t.instance)}function o(e){return(u||"function"!=typeof fetch?Promise.resolve().then((function(){return k(F)})):fetch(F,{credentials:"same-origin"}).then((function(t){if(!t.ok)throw"failed to load wasm binary file at '"+F+"'";return t.arrayBuffer()})).catch((function(){return k(F)}))).then((function(e){return WebAssembly.instantiate(e,t)})).then((function(t){return t})).then(e,(function(t){h("failed to asynchronously prepare wasm: "+t),H(t)}))}if(w++,i.monitorRunDependencies&&i.monitorRunDependencies(w),i.instantiateWasm)try{return i.instantiateWasm(t,e)}catch(t){return h("Module.instantiateWasm callback failed with error: "+t),!1}(u||"function"!=typeof WebAssembly.instantiateStreaming||T(F)||"function"!=typeof fetch?o(n):fetch(F,{credentials:"same-origin"}).then((function(e){return WebAssembly.instantiateStreaming(e,t).then(n,(function(t){return h("wasm streaming compile failed: "+t),h("falling back to ArrayBuffer instantiation"),o(n)}))}))).catch(r)})(),i.___wasm_call_ctors=function(){return(i.___wasm_call_ctors=i.asm.r).apply(null,arguments)},i._getModelBufferMemoryOffset=function(){return(i._getModelBufferMemoryOffset=i.asm.s).apply(null,arguments)},i._getInputMemoryOffset=function(){return(i._getInputMemoryOffset=i.asm.t).apply(null,arguments)},i._getInputHeight=function(){return(i._getInputHeight=i.asm.u).apply(null,arguments)},i._getInputWidth=function(){return(i._getInputWidth=i.asm.v).apply(null,arguments)},i._getInputChannelCount=function(){return(i._getInputChannelCount=i.asm.w).apply(null,arguments)},i._getOutputMemoryOffset=function(){return(i._getOutputMemoryOffset=i.asm.x).apply(null,arguments)},i._getOutputHeight=function(){return(i._getOutputHeight=i.asm.y).apply(null,arguments)},i._getOutputWidth=function(){return(i._getOutputWidth=i.asm.z).apply(null,arguments)},i._getOutputChannelCount=function(){return(i._getOutputChannelCount=i.asm.A).apply(null,arguments)},i._loadModel=function(){return(i._loadModel=i.asm.B).apply(null,arguments)},i._runInference=function(){return(i._runInference=i.asm.C).apply(null,arguments)},i._isGPUEnabled=function(){return(i._isGPUEnabled=i.asm.D).apply(null,arguments)};var B,M=i.___errno_location=function(){return(M=i.___errno_location=i.asm.F).apply(null,arguments)};function E(t){this.name="ExitStatus",this.message="Program terminated with exit("+t+")",this.status=t}function A(t){function e(){B||(B=!0,i.calledRun=!0,!Z&&(J(I),n(i),i.onRuntimeInitialized&&i.onRuntimeInitialized(),function(){if(i.postRun)for("function"==typeof i.postRun&&(i.postRun=[i.postRun]);i.postRun.length;)t=i.postRun.shift(),Y.unshift(t);var t;J(Y)}()))}w>0||(function(){if(i.preRun)for("function"==typeof i.preRun&&(i.preRun=[i.preRun]);i.preRun.length;)t=i.preRun.shift(),x.unshift(t);var t;J(x)}(),w>0)||(i.setStatus?(i.setStatus("Running..."),setTimeout((function(){setTimeout((function(){i.setStatus("")}),1),e()}),1)):e())}if(S=function t(){B||A(),B||(S=t)},i.run=A,i.preInit)for("function"==typeof i.preInit&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()();return A(),e.ready}}();class zc{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 Pc="https://d3opqjmqzxf057.cloudfront.net/vonage-tensorflow-wasm/tflite-simd-wasm/1.1.3/",Oc="https://d3opqjmqzxf057.cloudfront.net/ml/selfie_segmentation/4.0.0/";async function _c(t=Pc,e=Oc){let n=new zc;return new Promise((function(r,i){(async function(){return jc({locateFile:function(e){return t+e}})})().then((t=>{if(null===t)throw console.error("loadTFLite null"),"loadTFLite null";(async function(t){return new Promise((async(r,i)=>{const o=t;if(typeof o>"u")return i("TFLite backend unavailable: wasmSimd");const a="selfie_segmentation_landscape";console.log("Loading tflite model:",a);let l=e+`${a}.tflite`;console.log("TFLite modelUrl: "+l);try{const t=await(await fetch(l)).arrayBuffer();console.log("Model buffer size:",t.byteLength);const e=o._getModelBufferMemoryOffset();console.log("Model buffer memory offset:",e),console.log("Loading model buffer..."),o.HEAPU8.set(new Uint8Array(t),e);const r=o._loadModel(t.byteLength);if(console.log("Load model result:",r),0!==r)return void i("Cannot load model");n.inputWidth=o._getInputWidth(),n.inputHeight=o._getInputHeight(),n.inputChannelCount=o._getInputChannelCount(),n.inputMemoryOffset=o._getInputMemoryOffset(),console.log("Input memory offset:",n.inputMemoryOffset),console.log("Input height:",n.inputHeight),console.log("Input width:",n.inputWidth),console.log("Input channels:",n.inputChannelCount),n.outputMemoryOffset=o._getOutputMemoryOffset(),n.outputWidth=o._getOutputWidth(),n.outputHeight=o._getOutputHeight(),n.outputChannelCount=o._getOutputChannelCount(),console.log("Output memory offset:",n.outputMemoryOffset),console.log("Output height:",n.outputHeight),console.log("Output width:",n.outputWidth),console.log("Output channels:",n.outputChannelCount),n.selectedTFLite=o}catch(t){return void i(t)}r()}))})(t).then((t=>{r(n)})).catch((t=>{console.error("loadTFLiteModel error"),i("loadTFLiteModel error")}))})).catch((t=>{console.error("loadTFLite error:",t),i("loadTFLite error:"+t)}))}))}class qs{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(t,e){await this.initWasm(t,e),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(t,e){this.infos=await _c(t,e)}getOutputDimensions(){var t,e,n,r;return{width:null!=(e=null==(t=this.infos)?void 0:t.outputWidth)?e:0,height:null!=(r=null==(n=this.infos)?void 0:n.outputHeight)?r:0}}async process(t){if(!this.mask||!this.infos)return;const e=this.infos.inputWidth,n=this.infos.inputHeight;this.context.drawImage(t,0,0,t.width,t.height,0,0,e,n);const r=this.context.getImageData(0,0,e,n),i=this.infos.selectedTFLite.HEAPF32;for(let t=0;t<this.pixelCount;t++){const e=this.inputOffset+3*t;i[e]=r.data[4*t]/255,i[e+1]=r.data[4*t+1]/255,i[e+2]=r.data[4*t+2]/255}this.infos.selectedTFLite._runInference();for(let t=0;t<this.pixelCount;t++){const e=this.infos.selectedTFLite.HEAPF32[this.outputOffset+t];this.mask.data[4*t]=this.mask.data[4*t+3]=255*e}return createImageBitmap(this.mask)}isGpuSupported(){var t,e,n;return null!=(n=null==(e=null==(t=this.infos)?void 0:t.selectedTFLite)?void 0:e._isGPUEnabled())&&n}}async function Q3(t,e){const{wasm:n,insertableStreams:r,simd:i,webgl:o}=await Qc(t,e);if(!n.supported)throw n.message;if(!r.supported)throw r.message;if(!i.supported)throw i.message;if(!o.supported)throw o.message}async function Qc(t,e){const n=new qs;await n.initWasm(t,e);const r={wasm:{supported:"object"==typeof WebAssembly&&"function"==typeof WebAssembly.instantiate,message:"Your browser does not support WebAssembly features."},simd:{supported:await Ac(),message:"Your browser does not support simd features."},insertableStreams:{supported:!0},gpu:{supported:n.isGpuSupported(),message:"Your browser does not support gpu features."},webgl:Dc()};try{await fu()}catch(t){r.insertableStreams.supported=!1,r.insertableStreams.message=t}return r}function Dc(){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 pi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ea=e.prototype}function p(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function f(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={U:e,V:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new p,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.V)throw e.U;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return f(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return f(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){f(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t,e){return e=new G(new y(e)),h&&t.prototype&&h(e,t.prototype),e}p.prototype.o=function(t){this.h=t},p.prototype.return=function(t){this.j={return:t},this.g=this.s};var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.C),reject:t(this.l)}},e.prototype.C=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.F(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.u(t):this.m(t)}},e.prototype.u=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.G(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.D(),this.A()},e.prototype.D=function(){var t=this;o((function(){if(t.B()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.B=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.A=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.F=function(t){var e=this.j();t.J(e.resolve,e.reject)},e.prototype.G=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.J(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.J=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).J(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).J(o(a.length-1),e),r=n.next()}while(!r.done)}))},e})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var I,Y,w=typeof TextDecoder<"u",S=typeof TextEncoder<"u";function H(t){if(S)t=(Y||(Y=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var F={},L=null;function C(t,e){void 0===e&&(e=0),k(),e=F[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function T(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=L[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}k();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function k(){if(!L){L={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));F[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===L[o]&&(L[o]=i)}}}}var J,N="function"==typeof Uint8Array.prototype.slice;function K(t,e,n){return e===n?J||(J=new Uint8Array(0)):N?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var U=0;function j(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.i=this.j=0,this.l=!1,this.v=e,t&&z(this,t)}function z(t,e){e=e.constructor===Uint8Array?e:e.constructor===ArrayBuffer||e.constructor===Array?new Uint8Array(e):e.constructor===String?T(e):e instanceof Uint8Array?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(0),t.h=e,t.j=0,t.i=t.h.length,t.g=t.j}function B(t){var e=t.h,n=e[t.g],r=127&n;return 128>n?(t.g+=1,r):(r|=(127&(n=e[t.g+1]))<<7,128>n?(t.g+=2,r):(r|=(127&(n=e[t.g+2]))<<14,128>n?(t.g+=3,r):(r|=(127&(n=e[t.g+3]))<<21,128>n?(t.g+=4,r):(r|=(15&(n=e[t.g+4]))<<28,128>n?(t.g+=5,r>>>0):(t.g+=5,128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&t.g++,r)))))}function M(t){var e=t.h[t.g],n=t.h[t.g+1],r=t.h[t.g+2],i=t.h[t.g+3];return t.g+=4,t=2*((n=(e<<0|n<<8|r<<16|i<<24)>>>0)>>31)+1,e=n>>>23&255,n&=8388607,255==e?n?NaN:1/0*t:0==e?t*Math.pow(2,-149)*n:t*Math.pow(2,e-150)*(n+Math.pow(2,23))}j.prototype.reset=function(){this.g=this.j};var E=[];function A(){this.g=new Uint8Array(64),this.h=0}function P(t,e){for(;127<e;)t.push(127&e|128),e>>>=7;t.push(e)}function O(t){var e={},n=void 0!==e.N&&e.N;this.o={v:void 0!==e.v&&e.v},this.N=n,e=this.o,E.length?(n=E.pop(),e&&(n.v=e.v),t&&z(n,t),t=n):t=new j(t,e),this.g=t,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}function Q(t){var e=t.g;if((e=e.g==e.i)||(e=t.j)||(e=(e=t.g).l||0>e.g||e.g>e.i),e)return!1;t.m=t.g.g;var n=7&(e=B(t.g));return 0!=n&&5!=n&&1!=n&&2!=n&&3!=n&&4!=n?(t.j=!0,!1):(t.i=e,t.l=e>>>3,t.h=n,!0)}function _(t){switch(t.h){case 0:if(0!=t.h)_(t);else{for(t=t.g;128&t.h[t.g];)t.g++;t.g++}break;case 1:1!=t.h?_(t):(t=t.g).g+=8;break;case 2:if(2!=t.h)_(t);else{var e=B(t.g);(t=t.g).g+=e}break;case 5:5!=t.h?_(t):(t=t.g).g+=4;break;case 3:for(e=t.l;;){if(!Q(t)){t.j=!0;break}if(4==t.h){t.l!=e&&(t.j=!0);break}_(t)}break;default:t.j=!0}}function D(t,e,n){var r=t.g.i,i=B(t.g);return i=t.g.g+i,t.g.i=i,n(e,t),t.g.g=i,t.g.i=r,e}function q(t){var e,n=B(t.g),r=(t=t.g).g;if(t.g+=n,t=t.h,w)(e=I)||(e=I=new TextDecoder("utf-8",{fatal:!1})),e=e.decode(t.subarray(r,r+n));else{n=r+n;for(var i,o,a,l=[],s=null;r<n;)128>(i=t[r++])?l.push(i):224>i?r>=n?l.push(65533):(o=t[r++],194>i||128!=(192&o)?(r--,l.push(65533)):l.push((31&i)<<6|63&o)):240>i?r>=n-1?l.push(65533):128!=(192&(o=t[r++]))||224===i&&160>o||237===i&&160<=o||128!=(192&(e=t[r++]))?(r--,l.push(65533)):l.push((15&i)<<12|(63&o)<<6|63&e):244>=i?r>=n-2?l.push(65533):128!=(192&(o=t[r++]))||o-144+(i<<28)>>30!=0||128!=(192&(e=t[r++]))||128!=(192&(a=t[r++]))?(r--,l.push(65533)):(i=(7&i)<<18|(63&o)<<12|(63&e)<<6|63&a,i-=65536,l.push(55296+(i>>10&1023),56320+(1023&i))):l.push(65533),8192<=l.length&&(s=x(s,l),l.length=0);e=x(s,l)}return e}function $(){this.h=[],this.i=0,this.g=new A}function tt(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function et(t){var e=t.i+t.g.length();if(0===e)return new Uint8Array(0);e=new Uint8Array(e);for(var n=t.h,r=n.length,i=0,o=0;o<r;o++){var a=n[o];0!==a.length&&(e.set(a,i),i+=a.length)}return 0!==(r=(n=t.g).h)&&(e.set(n.g.subarray(0,r),i),n.h=0),t.h=[e],e}function nt(t,e,n){if(null!=n){P(t.g,8*e+5),t=t.g;var r=n;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?U=0:(0,U=2147483648):isNaN(r)?(0,U=2147483647):34028234663852886e22<r?(0,U=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,U=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),r=8388607&Math.round(8388608*r),0,U=(n<<31|e+127<<23|r)>>>0),n=U,t.push(n>>>0&255),t.push(n>>>8&255),t.push(n>>>16&255),t.push(n>>>24&255)}}A.prototype.push=function(t){if(!(this.h+1<this.g.length)){var e=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(e)}this.g[this.h++]=t},A.prototype.length=function(){return this.h},A.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,K(t,0,e)},O.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};var rt="function"==typeof Uint8Array;function it(t,e,n){if(null!=t)return"object"==typeof t?rt&&t instanceof Uint8Array?n(t):ot(t,e,n):e(t)}function ot(t,e,n){if(Array.isArray(t)){for(var r=Array(t.length),i=0;i<t.length;i++)r[i]=it(t[i],e,n);return Array.isArray(t)&&t.W&&ct(r),r}for(i in r={},t)r[i]=it(t[i],e,n);return r}function at(t){return"number"==typeof t?isFinite(t)?t:String(t):t}var lt,st={W:{value:!0,configurable:!0}};function ct(t){return Array.isArray(t)&&!Object.isFrozen(t)&&Object.defineProperties(t,st),t}function ut(t,e,n){var r=lt;if(lt=null,t||(t=r),r=this.constructor.ca,t||(t=r?[r]:[]),this.j=r?0:-1,this.i=null,this.g=t,t=(r=this.g.length)-1,r&&null!==(r=this.g[t])&&"object"==typeof r&&r.constructor===Object?(this.l=t-this.j,this.h=r):void 0!==e&&-1<e?(this.l=Math.max(e,t+1-this.j),this.h=null):this.l=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)(t=n[e])<this.l?(t+=this.j,(r=this.g[t])?ct(r):this.g[t]=dt):(ht(this),(r=this.h[t])?ct(r):this.h[t]=dt)}var dt=Object.freeze(ct([]));function ht(t){var e=t.l+t.j;t.g[e]||(t.h=t.g[e]={})}function mt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.l?t.h?t.h[e]:void 0:t.g[e+t.j]}function pt(t){var e=void 0!==e&&e,n=mt(t,1,e);return null==n&&(n=dt),n===dt&&bt(t,1,n=ct([]),e),n}function ft(t,e,n){return null==(t=null==(t=mt(t,e))?t:+t)?void 0===n?0:n:t}function bt(t,e,n,r){void 0!==r&&r||e>=t.l?(ht(t),t.h[e]=n):t.g[e+t.j]=n}function gt(t,e){t.i||(t.i={});var n=t.i[1];if(!n){var r=pt(t);n=[];for(var i=0;i<r.length;i++)n[i]=new e(r[i]);t.i[1]=n}return n}function yt(t,e,n,r){var i=gt(t,n);e=e||new n,t=pt(t),null!=r?(i.splice(r,0,e),t.splice(r,0,Zt(e))):(i.push(e),t.push(Zt(e)))}function Zt(t,e){if(t.i)for(var n in t.i){var r=t.i[n];if(Array.isArray(r))for(var i=0;i<r.length;i++)r[i]&&Zt(r[i]);else r&&Zt(r)}return t.g}function vt(t,e){return null==(t=mt(t,e))?0:t}function Gt(t,e){return null==(t=mt(t,e))?"":t}function Xt(t,e){if(t=t.m){tt(e,e.g.end());for(var n=0;n<t.length;n++)tt(e,t[n])}}function Wt(t,e){if(4==e.h)return!1;var n=e.m;return _(e),e.N||(e=K(e.g.h,n,e.g.g),(n=t.m)?n.push(e):t.m=[e]),!0}function Vt(t,e){var n=void 0;return new(n||(n=Promise))((function(r,i){function o(t){try{l(e.next(t))}catch(t){i(t)}}function a(t){try{l(e.throw(t))}catch(t){i(t)}}function l(t){t.done?r(t.value):new n((function(e){e(t.value)})).then(o,a)}l((e=e.apply(t,void 0)).next())}))}function Rt(t){ut.call(this,t)}function xt(t,e){for(;Q(e);)switch(e.i){case 8:var n=B(e.g);bt(t,1,n);break;case 21:bt(t,2,n=M(e.g));break;case 26:bt(t,3,n=q(e));break;case 34:bt(t,4,n=q(e));break;default:if(!Wt(t,e))return t}return t}function It(t){ut.call(this,t,-1,Yt)}ut.prototype.toJSON=function(){return ot(Zt(this),at,C)},ut.prototype.toString=function(){return Zt(this).toString()},m(Rt,ut),m(It,ut),It.prototype.addClassification=function(t,e){yt(this,t,Rt,e)};var Yt=[1];function wt(t){ut.call(this,t)}function St(t,e){for(;Q(e);)switch(e.i){case 13:var n=M(e.g);bt(t,1,n);break;case 21:bt(t,2,n=M(e.g));break;case 29:bt(t,3,n=M(e.g));break;case 37:bt(t,4,n=M(e.g));break;case 45:bt(t,5,n=M(e.g));break;default:if(!Wt(t,e))return t}return t}function Ht(t){ut.call(this,t,-1,Ft)}m(wt,ut),m(Ht,ut);var Ft=[1];function Lt(t){ut.call(this,t)}function Ct(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Tt(t){return gt(t,Rt).map((function(t){return{index:vt(t,1),Y:ft(t,2),label:null!=mt(t,3)?Gt(t,3):void 0,displayName:null!=mt(t,4)?Gt(t,4):void 0}}))}function kt(t){return{x:ft(t,1),y:ft(t,2),z:ft(t,3),visibility:null!=mt(t,4)?ft(t,4):void 0}}function Jt(t,e){this.h=t,this.g=e,this.l=0}function Nt(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=Ct(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=Ct(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={I:n.getAttribLocation(r,"aVertex"),H:n.getAttribLocation(r,"aTex"),da:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.H),n.vertexAttribPointer(t.j.H,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.H,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.I),n.disableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function Kt(t){this.g=t}m(Lt,ut);var Ut=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 jt(t,e){return e+t}function zt(t,e){window[t]=e}function Bt(t){if(this.g=t,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=t&&t.locateFile||jt,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.S=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function Mt(t){return Vt(t,(function t(){var e,n,r,i,o,a,s,c,u,d,h,m=this;return X(t,(function(t){switch(t.g){case 1:return e=m,m.R?(n=function(t,e){return void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(e):t.g.files}(m,m.j),g(t,function(){return Vt(this,(function t(){return X(t,(function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(Ut),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)}}))}))}(),2)):t.return();case 2:if(r=t.h,"object"==typeof window)return zt("createMediapipeSolutionsWasm",{locateFile:m.locateFile}),zt("createMediapipeSolutionsPackedAssets",{locateFile:m.locateFile}),a=n.filter((function(t){return void 0!==t.data})),s=n.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(t){var n=Et(e,t.url);if(void 0!==t.path){var r=t.path;n=n.then((function(t){return e.overrideFile(r,t),Promise.resolve(t)}))}return n}))),u=Promise.all(s.map((function(t){return void 0===t.simd||t.simd&&r||!t.simd&&!r?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(e.locateFile(t.url,e.S)):Promise.resolve()}))).then((function(){return Vt(e,(function t(){var e,n,r=this;return X(t,(function(t){if(1==t.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,g(t,e(n),2);r.h=t.h,t.g=0}))}))})),d=Vt(e,(function t(){var e=this;return X(t,(function(t){return e.g.graph&&e.g.graph.url?t=g(t,Et(e,e.g.graph.url),0):(t.g=0,t=void 0),t}))})),g(t,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return i=n.filter((function(t){return void 0===t.simd||t.simd&&r||!t.simd&&!r})).map((function(t){return e.locateFile(t.url,e.S)})),importScripts.apply(null,l(i)),g(t,createMediapipeSolutionsWasm(Module),6);case 6:m.h=t.h,m.l=new OffscreenCanvas(1,1),m.h.canvas=m.l,o=m.h.GL.createContext(m.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),m.h.GL.makeContextCurrent(o),t.g=4;break;case 7:if(m.l=document.createElement("canvas"),!(h=m.l.getContext("webgl2",{}))&&!(h=m.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),t.return();m.D=h,m.h.canvas=m.l,m.h.createContext(m.l,!0,!0,{});case 4:m.i=new m.h.SolutionWasm,m.R=!1,t.g=0}}))}))}function Et(t,e){return Vt(t,(function t(){var n,r,i=this;return X(t,(function(t){return e in i.F?t.return(i.F[e]):(n=i.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),i.F[e]=r,t.return(r))}))}))}function At(t,e,n){return Vt(t,(function t(){var r,i,o,l,s,c,u,d,h,m,p,f,b,y,Z=this;return X(t,(function(t){switch(t.g){case 1:if(!n)return t.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(Z.G=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){t.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(t,function(t,e,n){return Vt(t,(function t(){var r,i=this;return X(t,(function(t){return"number"==typeof n||n instanceof Uint8Array||n instanceof i.h.Uint8BlobList?t.return(n):n instanceof i.h.Texture2dDataOut?((r=i.s[e])||(r=new Jt(i.h,i.D),i.s[e]=r),t.return(Nt(r,n,i.G))):t.return(void 0)}))}))}(Z,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=v.get(R);t:{var I=new Lt;for(x=new O(x);Q(x);)switch(x.i){case 13:var Y=M(x.g);bt(I,1,Y);break;case 21:bt(I,2,Y=M(x.g));break;case 29:bt(I,3,Y=M(x.g));break;case 37:bt(I,4,Y=M(x.g));break;case 45:bt(I,5,Y=M(x.g));break;case 48:for(var w=x.g,S=128,H=0,F=Y=0;4>F&&128<=S;F++)H|=(127&(S=w.h[w.g++]))<<7*F;if(128<=S&&(H|=(127&(S=w.h[w.g++]))<<28,Y|=(127&S)>>4),128<=S)for(F=0;5>F&&128<=S;F++)Y|=(127&(S=w.h[w.g++]))<<7*F+3;128>S?(w=H>>>0,(Y=2147483648&(S=Y>>>0))&&(S=~S>>>0,0==(w=1+~w>>>0)&&(S=S+1>>>0)),w=4294967296*S+(w>>>0),Y=Y?-w:w):(w.l=!0,Y=void 0),bt(I,6,Y);break;default:if(!Wt(I,x))break t}}I={Z:ft(I,1),$:ft(I,2),height:ft(I,3),width:ft(I,4),rotation:ft(I,5,0),X:vt(I,6)},Y=G.get(R);t:for(x=new Ht,Y=new O(Y);Q(Y);)if(10===Y.i)yt(x,w=D(Y,new wt,St),wt,void 0);else if(!Wt(x,Y))break t;x=gt(x,wt).map(kt),w=W.get(R);t:for(Y=new It,w=new O(w);Q(w);)if(10===w.i)Y.addClassification(D(w,new Rt,xt));else if(!Wt(Y,w))break t;I={T:I,O:x,M:Tt(Y)},V.push(I)}v=V}else v=[];r[d]=v,t.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,t.g=7;break}if(void 0===m){t.g=3;break}if("float_list"===h.type){r[d]=m,t.g=7;break}if("proto"===h.type){r[d]=m,t.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(p=Z.s[d])||(p=new Jt(Z.h,Z.D),Z.s[d]=p),g(t,Nt(p,m,Z.G),13);case 13:f=t.h,r[d]=f;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),t.g=3;break;case 14:b[y]=t.h;case 3:l=u.next(),t.g=2;break;case 4:return t.return(r)}}))}))}function Pt(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.C=At(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.C=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Ot(t){return 1===(void 0===t&&(t=0),t)?"selfie_segmentation_landscape.tflite":"selfie_segmentation.tflite"}function Qt(t){var e=this;t=t||{},this.g=new Bt({locateFile:t.locateFile,files:function(t){return[{simd:!0,url:"selfie_segmentation_solution_simd_wasm_bin.js"},{simd:!1,url:"selfie_segmentation_solution_wasm_bin.js"},{data:!0,url:Ot(t.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(t){return Vt(e,(function e(){var n,r,i,o=this;return X(e,(function(e){return 1==e.g?(n=Ot(t),r="third_party/mediapipe/modules/selfie_segmentation/"+n,g(e,Et(o.g,n),2)):(i=e.h,o.g.overrideFile(r,i),e.return(!0))}))}))}}}})}(t=Bt.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){return Vt(this,(function t(){var e=this;return X(t,(function(t){e.i&&(e.i.reset(),e.m={},e.s={}),t.g=0}))}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={K:o.K,L:o.L},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.K=s.onChange,o.L=t[c],r.push(function(t){return function(){return Vt(n,(function e(){var n=this;return X(e,(function(e){if(1==e.g)return g(e,t.K(t.L),2);!0===e.h&&(n.o=!0),e.g=0}))}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.A=(void 0===this.A?[]:this.A).concat(i),this.u=(void 0===this.u?[]:this.u).concat(r))}},t.initialize=function(){return Vt(this,(function t(){var e=this;return X(t,(function(t){return 1==t.g?g(t,Mt(e),2):3!=t.g?g(t,function(t){return Vt(t,(function t(){var e,n,r,i,o,l,s,c,u=this;return X(t,(function(t){if(1==t.g)return u.g.graph&&u.g.graph.url&&u.P===u.g.graph.url?t.return():(u.o=!0,u.g.graph&&u.g.graph.url?(u.P=u.g.graph.url,g(t,Et(u,u.g.graph.url),3)):void(t.g=2));for(2!=t.g&&(e=t.h,u.i.loadGraph(e)),n=a(Object.keys(u.B)),r=n.next();!r.done;r=n.next())i=r.value,u.i.overrideFile(i,u.B[i]);if(u.B={},u.g.listeners)for(o=a(u.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Pt(u,s);c=u.j,u.j={},u.setOptions(c),t.g=0}))}))}(e),3):g(t,function(t){return Vt(t,(function t(){var e,n,r,i,o,l,s=this;return X(t,(function(t){switch(t.g){case 1:if(!s.o)return t.return();if(!s.u){t.g=2;break}e=a(s.u),n=e.next();case 3:if(n.done){t.g=5;break}return g(t,(0,n.value)(),4);case 4:n=e.next(),t.g=3;break;case 5:s.u=void 0;case 2:if(s.A){for(r=new s.h.GraphOptionChangeRequestList,i=a(s.A),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);s.i.changeOptions(r),r.delete(),s.A=void 0}s.o=!1,t.g=0}}))}))}(e),0)}))}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.B[t]=e},t.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){return Vt(this,(function n(){var r,i,o,l,s,c,u,d,h,m=this;return X(n,(function(n){switch(n.g){case 1:return m.g.inputs?(r=1e3*(null==e?performance.now():e),g(n,m.C,2)):n.return();case 2:return g(n,m.initialize(),3);case 3:for(i=new m.h.PacketDataList,o=a(Object.keys(t)),l=o.next();!l.done;l=o.next())if(s=l.value,c=m.g.inputs[s]){t:{var p=m,f=t[s];switch(c.type){case"video":var b=p.m[c.stream];if(b||(b=new Jt(p.h,p.D),p.m[c.stream]=b),0===(p=b).l&&(p.l=p.h.createTexture()),typeof HTMLVideoElement<"u"&&f instanceof HTMLVideoElement){var y=f.videoWidth;b=f.videoHeight}else typeof HTMLImageElement<"u"&&f instanceof HTMLImageElement?(y=f.naturalWidth,b=f.naturalHeight):(y=f.width,b=f.height);b={glName:p.l,width:y,height:b},(y=p.g).canvas.width=b.width,y.canvas.height=b.height,y.activeTexture(y.TEXTURE0),p.h.bindTexture2d(p.l),y.texImage2D(y.TEXTURE_2D,0,y.RGBA,y.RGBA,y.UNSIGNED_BYTE,f),p.h.bindTexture2d(0),p=b;break t;case"detections":for((b=p.m[c.stream])||(b=new Kt(p.h),p.m[c.stream]=b),(p=b).data||(p.data=new p.g.DetectionListData),p.data.reset(f.length),b=0;b<f.length;++b){y=f[b];var Z=p.data,v=Z.setBoundingBox,G=b,X=y.T,W=new Lt;bt(W,1,X.Z),bt(W,2,X.$),bt(W,3,X.height),bt(W,4,X.width),bt(W,5,X.rotation),bt(W,6,X.X);var V=X=new $;nt(V,1,mt(W,1)),nt(V,2,mt(W,2)),nt(V,3,mt(W,3)),nt(V,4,mt(W,4)),nt(V,5,mt(W,5));var R=mt(W,6);if(null!=R&&null!=R){P(V.g,48);var x=V.g,I=R;R=0>I;var Y=(I=Math.abs(I))>>>0;for(I=Math.floor((I-Y)/4294967296),I>>>=0,R&&(I=~I>>>0,4294967295<(Y=1+(~Y>>>0))&&(Y=0,4294967295<++I&&(I=0))),R=U=Y,Y=I;0<Y||127<R;)x.push(127&R|128),R=(R>>>7|Y<<25)>>>0,Y>>>=7;x.push(R)}if(Xt(W,V),X=et(X),v.call(Z,G,X),y.O)for(Z=0;Z<y.O.length;++Z)V=!!(W=y.O[Z]).visibility,G=(v=p.data).addNormalizedLandmark,X=b,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),bt(V=new wt,1,W.x),bt(V,2,W.y),bt(V,3,W.z),W.visibility&&bt(V,4,W.visibility),nt(x=W=new $,1,mt(V,1)),nt(x,2,mt(V,2)),nt(x,3,mt(V,3)),nt(x,4,mt(V,4)),nt(x,5,mt(V,5)),Xt(V,x),W=et(W),G.call(v,X,W);if(y.M)for(Z=0;Z<y.M.length;++Z){if(G=(v=p.data).addClassification,X=b,W=y.M[Z],bt(V=new Rt,2,W.Y),W.index&&bt(V,1,W.index),W.label&&bt(V,3,W.label),W.displayName&&bt(V,4,W.displayName),x=W=new $,null!=(Y=mt(V,1))&&null!=Y)if(P(x.g,8),R=x.g,0<=Y)P(R,Y);else{for(I=0;9>I;I++)R.push(127&Y|128),Y>>=7;R.push(1)}nt(x,2,mt(V,2)),null!=(R=mt(V,3))&&(R=H(R),P(x.g,26),P(x.g,R.length),tt(x,x.g.end()),tt(x,R)),null!=(R=mt(V,4))&&(R=H(R),P(x.g,34),P(x.g,R.length),tt(x,x.g.end()),tt(x,R)),Xt(V,x),W=et(W),G.call(v,X,W)}}p=p.data;break t;default:p={}}}switch(u=p,d=c.stream,c.type){case"video":i.pushTexture2d(Object.assign(Object.assign({},u),{stream:d,timestamp:r}));break;case"detections":(h=u).stream=d,h.timestamp=r,i.pushDetectionList(h);break;default:throw Error("Unknown input config type: '"+c.type+"'")}}return m.i.send(i),g(n,m.C,4);case 4:i.delete(),n.g=0}}))}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",Bt),R("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=Qt.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){return Vt(this,(function t(){var e=this;return X(t,(function(t){return g(t,e.g.initialize(),0)}))}))},t.reset=function(){this.g.reset()},t.send=function(t){return Vt(this,(function e(){var n=this;return X(e,(function(e){return g(e,n.g.send(t),0)}))}))},t.setOptions=function(t){this.g.setOptions(t)},R("SelfieSegmentation",Qt),R("VERSION","0.1.1632777926")}).call(pi);const bi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ra=e.prototype}function p(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function f(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={fa:e,ga:!0},t.g=t.o||t.u}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new p,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.ga)throw e.fa;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return f(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.s):(t.g.s(e),e=v(t)),e},this.throw=function(e){return f(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.s):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){f(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}p.prototype.s=function(t){this.h=t},p.prototype.return=function(t){this.j={return:t},this.g=this.u},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.s=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.D),reject:t(this.l)}},e.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.H(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.A(t):this.o(t)}},e.prototype.A=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.I(e,t):this.o(t)},e.prototype.l=function(t){this.u(2,t)},e.prototype.o=function(t){this.u(1,t)},e.prototype.u=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.G(),this.B()},e.prototype.G=function(){var t=this;o((function(){if(t.C()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.C=function(){if(this.s)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.B=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.H=function(t){var e=this.j();t.M(e.resolve,e.reject)},e.prototype.I=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.M(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.M=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.s=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).M(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).M(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(){throw Error("Invalid UTF8")}function I(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var Y,w,S=typeof TextDecoder<"u",H=typeof TextEncoder<"u",F={},L=null;function C(t){var e;void 0===e&&(e=0),k(),e=F[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function T(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=L[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}k();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),i!==n?r.subarray(0,i):r}function k(){if(!L){L={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));F[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===L[o]&&(L[o]=i)}}}}var J,N="function"==typeof Uint8Array;function K(t){return N&&null!=t&&t instanceof Uint8Array}function U(t){if(this.L=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}var j="function"==typeof Uint8Array.prototype.slice,z=0;function B(t,e){return Error("Invalid wire type: "+t+" (at position "+e+")")}function M(){return Error("Failed to read varint, encoding is invalid.")}function E(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.i=this.j=0,this.v=e,t&&A(this,t)}function A(t,e){t.h=function(t,e){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 T(t);if(t.constructor===U)return!e&&(e=t.L)&&e.constructor===Uint8Array?e:(e=null==(e=t.L)||K(e)?e:"string"==typeof e?T(e):null,(t=t.L=e)?new Uint8Array(t):J||(J=new Uint8Array(0)));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")}(e,t.v),t.j=0,t.i=t.h.length,t.g=t.j}function P(t){if(t.g>t.i)throw Error("Tried to read past the end of the data "+t.g+" > "+t.i)}function O(t){var e=t.h,n=e[t.g],r=127&n;if(128>n)return t.g+=1,P(t),r;if(r|=(127&(n=e[t.g+1]))<<7,128>n)return t.g+=2,P(t),r;if(r|=(127&(n=e[t.g+2]))<<14,128>n)return t.g+=3,P(t),r;if(r|=(127&(n=e[t.g+3]))<<21,128>n)return t.g+=4,P(t),r;if(n=e[t.g+4],t.g+=5,r|=(15&n)<<28,128>n)return P(t),r;if(128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++])throw M();return P(t),r}E.prototype.reset=function(){this.g=this.j};var Q=[];function _(){this.g=[]}function D(t,e){for(;127<e;)t.g.push(127&e|128),e>>>=7;t.g.push(e)}function q(t){var e={},n=void 0!==e.W&&e.W;this.l={v:void 0!==e.v&&e.v},this.W=n,e=this.l,Q.length?(n=Q.pop(),e&&(n.v=e.v),t&&A(n,t),t=n):t=new E(t,e),this.g=t,this.j=this.g.g,this.h=this.i=-1}function $(t){var e=t.g;if(e.g==e.i)return!1;t.j=t.g.g;var n=O(t.g)>>>0;if(e=n>>>3,!(0<=(n&=7)&&5>=n))throw B(n,t.j);if(1>e)throw Error("Invalid field number: "+e+" (at position "+t.j+")");return t.i=e,t.h=n,!0}function tt(t){switch(t.h){case 0:if(0!=t.h)tt(t);else t:{for(var e=(t=t.g).g,n=e+10;e<n;)if(0==(128&t.h[e++])){t.g=e,P(t);break t}throw M()}break;case 1:(t=t.g).g+=8,P(t);break;case 2:2!=t.h?tt(t):(e=O(t.g)>>>0,(t=t.g).g+=e,P(t));break;case 5:(t=t.g).g+=4,P(t);break;case 3:for(e=t.i;;){if(!$(t))throw Error("Unmatched start-group tag: stream EOF");if(4==t.h){if(t.i!=e)throw Error("Unmatched end-group tag");break}tt(t)}break;default:throw B(t.h,t.j)}}_.prototype.length=function(){return this.g.length},_.prototype.end=function(){var t=this.g;return this.g=[],t},q.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};var et=[];function nt(){this.i=[],this.h=0,this.g=new _}function rt(t,e){0!==e.length&&(t.i.push(e),t.h+=e.length)}var it="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ot(t,e){Object.isFrozen(t)||(it?t[it]|=e:void 0!==t.N?t.N|=e:Object.defineProperties(t,{N:{value:e,configurable:!0,writable:!0,enumerable:!1}}))}function at(t){var e;return null==(e=it?t[it]:t.N)?0:e}function lt(t){return ot(t,1),t}function st(t){return!!Array.isArray(t)&&!!(2&at(t))}function ct(t){if(!Array.isArray(t))throw Error("cannot mark non-array as immutable");ot(t,2)}function ut(t){return null!==t&&"object"==typeof t&&!Array.isArray(t)&&t.constructor===Object}var dt=Object.freeze(lt([]));function ht(t){if(st(t.m))throw Error("Cannot mutate an immutable Message")}var mt,pt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function ft(t){return{value:t,configurable:!1,writable:!1,enumerable:!1}}function bt(t,e,n){return-1===e?null:e>=t.i?t.g?t.g[e]:void 0:void 0!==n&&n&&t.g&&null!=(n=t.g[e])?n:t.m[e+t.h]}function gt(t,e,n,r){r=void 0!==r&&r,ht(t),e<t.i&&!r?t.m[e+t.h]=n:(t.g||(t.g=t.m[t.i+t.h]={}))[e]=n}function yt(t,e,n,r){n=void 0===n||n;var i=bt(t,e,r=void 0!==r&&r);return null==i&&(i=dt),st(t.m)?n&&(ct(i),Object.freeze(i)):(i===dt||st(i))&&gt(t,e,i=lt(i.slice()),r),i}function Zt(t,e,n){return null==(t=null==(t=bt(t,e))?t:+t)?void 0===n?0:n:t}function vt(t,e,n,r){t.j||(t.j={});var i=st(t.m),o=t.j[n];if(!o){r=yt(t,n,!0,void 0!==r&&r),o=[],i=i||st(r);for(var a=0;a<r.length;a++)o[a]=new e(r[a]),i&&ct(o[a].m);i&&(ct(o),Object.freeze(o)),t.j[n]=o}return o}function Gt(t,e,n,r,i){var o=void 0!==o&&o;return ht(t),o=vt(t,n,e,o),n=r||new n,t=yt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,n.m)):(o.push(n),t.push(n.m)),n}function Xt(t,e){return null==(t=bt(t,e))?0:t}function Wt(t,e){return null==(t=bt(t,e))?"":t}function Vt(t){var e=It;return xt(t,e=void 0===e?Yt:e)}function Rt(t,e){if(null!=t){if(Array.isArray(t))t=xt(t,e);else if(ut(t)){var n,r={};for(n in t)r[n]=Rt(t[n],e);t=r}else t=e(t);return t}}function xt(t,e){for(var n=t.slice(),r=0;r<n.length;r++)n[r]=Rt(n[r],e);return Array.isArray(t)&&1&at(t)&&lt(n),n}function It(t){return t&&"object"==typeof t&&t.toJSON?t.toJSON():(t=function(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(t&&!Array.isArray(t)){if(K(t))return C(t);if(t instanceof U){var e=t.L;return e=null==e||"string"==typeof e?e:N&&e instanceof Uint8Array?C(e):null,(t.L=e)||""}}}return t}(t),Array.isArray(t)?Vt(t):t)}function Yt(t){return K(t)?new Uint8Array(t):t}function wt(t,e,n){t||(t=mt),mt=null;var r=this.constructor.h;if(t||(t=r?[r]:[]),this.h=(r?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=t,t=(r=this.m.length)-1,r&&ut(r=this.m[t])?(this.i=t-this.h,this.g=r):void 0!==e&&-1<e?(this.i=Math.max(e,t+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)if((t=n[e])<this.i)t+=this.h,(r=this.m[t])?Array.isArray(r)&&lt(r):this.m[t]=dt;else{var i=(r=this.g||(this.g=this.m[this.i+this.h]={}))[t];i?Array.isArray(i)&&lt(i):r[t]=dt}}function St(){wt.apply(this,arguments)}if(wt.prototype.toJSON=function(){return Vt(this.m)},wt.prototype.toString=function(){return this.m.toString()},m(St,wt),pt){var Ht={};Object.defineProperties(St,(Ht[Symbol.hasInstance]=ft((function(){throw Error("Cannot perform instanceof checks for MutableMessage")})),Ht))}function Ft(t,e,n){if(n){var r,i={};for(r in n){var o=n[r],a=o.ja;a||(i.F=o.pa||o.ha.P,o.ba?(i.U=Kt(o.ba),a=function(t){return function(e,n,r){return t.F(e,n,r,t.U)}}(i)):o.da?(i.T=Ut(o.X.g,o.da),a=function(t){return function(e,n,r){return t.F(e,n,r,t.T)}}(i)):a=i.F,o.ja=a),a(e,t,o.X),i={F:i.F,U:i.U,T:i.T}}}!function(t,e){if(e=e.ca){rt(t,t.g.end());for(var n=0;n<e.length;n++)rt(t,e[n])}}(e,t)}var Lt=Symbol();function Ct(t,e,n){return t[Lt]||(t[Lt]=function(t,r){return e(t,r,n)})}function Tt(t){var e=t[Lt];if(!e){var n=qt(t);e=function(t,e){return $t(t,e,n)},t[Lt]=e}return e}function kt(t){var e=function(t){var e=t.ba;return e?Tt(e):(e=t.oa)?Ct(t.X.g,e,t.da):void 0}(t),n=t.X,r=t.ha.O;return e?function(t,i){return r(t,i,n,e)}:function(t,e){return r(t,e,n)}}function Jt(t,e,n,r,i,o){var a=0;for((t=t()).length&&"number"!=typeof t[0]&&(n(e,t[0]),a++);a<t.length;){n=t[a++];for(var l=a+1;l<t.length&&"number"!=typeof t[l];)l++;var s=t[a++];switch(l-=a){case 0:r(e,n,s);break;case 1:r(e,n,s,t[a++]);break;case 2:i(e,n,s,t[a++],t[a++]);break;case 3:l=t[a++];var c=t[a++],u=t[a++];Array.isArray(u)?i(e,n,s,l,c,u):o(e,n,s,l,c,u);break;case 4:o(e,n,s,t[a++],t[a++],t[a++],t[a++]);break;default:throw Error("unexpected number of binary field arguments: "+l)}}return e}var Nt=Symbol();function Kt(t){var e=t[Nt];if(!e){var n=At(t);e=function(t,e){return ee(t,e,n)},t[Nt]=e}return e}function Ut(t,e){var n=t[Nt];return n||(n=function(t,n){return Ft(t,n,e)},t[Nt]=n),n}var jt=Symbol();function zt(t,e){t.push(e)}function Bt(t,e,n){t.push(e,n.P)}function Mt(t,e,n,r,i){var o=Kt(i),a=n.P;t.push(e,(function(t,e,n){return a(t,e,n,r,o)}))}function Et(t,e,n,r,i,o){var a=Ut(r,o),l=n.P;t.push(e,(function(t,e,n){return l(t,e,n,r,a)}))}function At(t){return t[jt]||Jt(t,t[jt]=[],zt,Bt,Mt,Et)}var Pt=Symbol();function Ot(t,e){t[0]=e}function Qt(t,e,n,r){var i=n.O;t[e]=r?function(t,e,n){return i(t,e,n,r)}:i}function _t(t,e,n,r,i,o){var a=n.O,l=Tt(i);t[e]=function(t,e,n){return a(t,e,n,r,l,o)}}function Dt(t,e,n,r,i,o,a){var l=n.O,s=Ct(r,i,o);t[e]=function(t,e,n){return l(t,e,n,r,s,a)}}function qt(t){return t[Pt]||Jt(t,t[Pt]={},Ot,Qt,_t,Dt)}function $t(t,e,n){for(;$(e)&&4!=e.h;){var r=e.i,i=n[r];if(!i){var o=n[0];o&&(o=o[r])&&(i=n[r]=kt(o))}if(!(i&&i(e,t,r)||(i=e,r=t,o=i.j,tt(i),i.W))){var a=i.g.h;i=o===(i=i.g.g)?J||(J=new Uint8Array(0)):j?a.slice(o,i):new Uint8Array(a.subarray(o,i)),(o=r.ca)?o.push(i):r.ca=[i]}}return t}function te(t,e,n){if(et.length){var r=et.pop();t&&(A(r.g,t),r.i=-1,r.h=-1),t=r}else t=new q(t);try{return $t(new e,t,qt(n))}finally{(e=t.g).h=null,e.j=0,e.i=0,e.g=0,e.v=!1,t.i=-1,t.h=-1,100>et.length&&et.push(t)}}function ee(t,e,n){for(var r=n.length,i=r%2==1,o=i?1:0;o<r;o+=2)(0,n[o+1])(e,t,n[o]);Ft(t,e,i?n[0]:void 0)}function ne(t,e){var n=new nt;ee(t,n,At(e)),rt(n,n.g.end()),t=new Uint8Array(n.h);for(var r=(e=n.i).length,i=0,o=0;o<r;o++){var a=e[o];t.set(a,i),i+=a.length}return n.i=[t],t}function re(t,e){return{O:t,P:e}}var ie=re((function(t,e,n){if(5!==t.h)return!1;var r=(t=t.g).h[t.g],i=t.h[t.g+1],o=t.h[t.g+2],a=t.h[t.g+3];return t.g+=4,P(t),t=2*((i=(r<<0|i<<8|o<<16|a<<24)>>>0)>>31)+1,r=i>>>23&255,i&=8388607,gt(e,n,255==r?i?NaN:1/0*t:0==r?t*Math.pow(2,-149)*i:t*Math.pow(2,r-150)*(i+Math.pow(2,23))),!0}),(function(t,e,n){if(null!=(e=bt(e,n))){D(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?z=0:(0,z=2147483648):isNaN(r)?(0,z=2147483647):34028234663852886e22<r?(0,z=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,z=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,z=(n<<31|e+127<<23|8388607&r)>>>0),n=z,t.g.push(n>>>0&255),t.g.push(n>>>8&255),t.g.push(n>>>16&255),t.g.push(n>>>24&255)}})),oe=re((function(t,e,n){if(0!==t.h)return!1;for(var r=t.g,i=128,o=0,a=t=0;4>a&&128<=i;a++)i=r.h[r.g++],P(r),o|=(127&i)<<7*a;if(128<=i&&(i=r.h[r.g++],P(r),o|=(127&i)<<28,t|=(127&i)>>4),128<=i)for(a=0;5>a&&128<=i;a++)i=r.h[r.g++],P(r),t|=(127&i)<<7*a+3;if(!(128>i))throw M();return r=o>>>0,(t=2147483648&(i=t>>>0))&&(i=~i>>>0,0==(r=1+~r>>>0)&&(i=i+1>>>0)),r=4294967296*i+(r>>>0),gt(e,n,t?-r:r),!0}),(function(t,e,n){if(null!=(e=bt(e,n))&&null!=e){D(t.g,8*n),t=t.g;var r=e;for(n=0>r,e=(r=Math.abs(r))>>>0,r=Math.floor((r-e)/4294967296),r>>>=0,n&&(r=~r>>>0,4294967295<(e=1+(~e>>>0))&&(e=0,4294967295<++r&&(r=0))),n=z=e,e=r;0<e||127<n;)t.g.push(127&n|128),n=(n>>>7|e<<25)>>>0,e>>>=7;t.g.push(n)}})),ae=re((function(t,e,n){return 0===t.h&&(gt(e,n,O(t.g)),!0)}),(function(t,e,n){if(null!=(e=bt(e,n))&&null!=e)if(D(t.g,8*n),t=t.g,0<=(n=e))D(t,n);else{for(e=0;9>e;e++)t.g.push(127&n|128),n>>=7;t.g.push(1)}})),le=re((function(t,e,n){if(2!==t.h)return!1;var r,i=O(t.g)>>>0,o=(t=t.g).g;if(t.g+=i,P(t),t=t.h,S)(r=Y)||(r=Y=new TextDecoder("utf-8",{fatal:!0})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?x():(l=t[o++],194>a||128!=(192&l)?(o--,x()):c.push((31&a)<<6|63&l)):240>a?o>=i-1?x():128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,x()):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?x():128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,x()):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):x(),8192<=c.length&&(u=I(u,c),c.length=0);r=I(u,c)}return gt(e,n,r),!0}),(function(t,e,n){if(null!=(e=bt(e,n))){var r=!1;if(r=void 0!==r&&r,H){if(r&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(e))throw Error("Found an unpaired surrogate");e=(w||(w=new TextEncoder)).encode(e)}else{for(var i=0,o=new Uint8Array(3*e.length),a=0;a<e.length;a++){var l=e.charCodeAt(a);if(128>l)o[i++]=l;else{if(2048>l)o[i++]=l>>6|192;else{if(55296<=l&&57343>=l){if(56319>=l&&a<e.length){var s=e.charCodeAt(++a);if(56320<=s&&57343>=s){l=1024*(l-55296)+s-56320+65536,o[i++]=l>>18|240,o[i++]=l>>12&63|128,o[i++]=l>>6&63|128,o[i++]=63&l|128;continue}a--}if(r)throw Error("Found an unpaired surrogate");l=65533}o[i++]=l>>12|224,o[i++]=l>>6&63|128}o[i++]=63&l|128}}e=o.subarray(0,i)}D(t.g,8*n+2),D(t.g,e.length),rt(t,t.g.end()),rt(t,e)}})),se=re((function(t,e,n,r,i){if(2!==t.h)return!1;e=Gt(e,n,r),n=t.g.i,r=O(t.g)>>>0;var o=t.g.g+r,a=o-n;if(0>=a&&(t.g.i=o,i(e,t),a=o-t.g.g),a)throw Error("Message parsing ended unexpectedly. Expected to read "+r+" bytes, instead read "+(r-a)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.i=n,!0}),(function(t,e,n,r,i){if(null!=(e=vt(e,r,n)))for(r=0;r<e.length;r++){var o=t;D(o.g,8*n+2);var a=o.g.end();rt(o,a),a.push(o.h),o=a,i(e[r],t),a=t;var l=o.pop();for(l=a.h+a.g.length()-l;127<l;)o.push(127&l|128),l>>>=7,a.h++;o.push(l),a.h++}}));function ce(){St.apply(this,arguments)}if(m(ce,St),pt){var ue={};Object.defineProperties(ce,(ue[Symbol.hasInstance]=ft(Object[Symbol.hasInstance]),ue))}function de(t){ce.call(this,t)}function he(){return[1,ae,2,ie,3,le,4,le]}function me(t){ce.call(this,t,-1,fe)}function pe(){return[1,se,de,he]}m(de,ce),m(me,ce),me.prototype.addClassification=function(t,e){return Gt(this,1,de,t,e),this};var fe=[1];function be(t){ce.call(this,t)}function ge(){return[1,ie,2,ie,3,ie,4,ie,5,ie]}function ye(t){ce.call(this,t,-1,ve)}function Ze(){return[1,se,be,ge]}m(be,ce),m(ye,ce);var ve=[1];function Ge(t){ce.call(this,t)}function Xe(){return[1,ie,2,ie,3,ie,4,ie,5,ie,6,oe]}function We(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Ve(t){return vt(t,de,1).map((function(t){return{index:Xt(t,1),score:Zt(t,2),label:null!=bt(t,3)?Wt(t,3):void 0,displayName:null!=bt(t,4)?Wt(t,4):void 0}}))}function Re(t){return{x:Zt(t,1),y:Zt(t,2),z:Zt(t,3),visibility:null!=bt(t,4)?Zt(t,4):void 0}}function xe(t){return t.map((function(t){return vt(te(t,ye,Ze),be,1).map(Re)}))}function Ie(t,e){this.h=t,this.g=e,this.l=0}function Ye(t,e,n){return function(t,e){var n=t.g;if(void 0===t.o){var r=We(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=We(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.o=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={K:n.getAttribLocation(r,"aVertex"),J:n.getAttribLocation(r,"aTex"),qa:i},t.u=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.u),n.enableVertexAttribArray(t.j.K),n.vertexAttribPointer(t.j.K,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.J),n.vertexAttribPointer(t.j.J,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.o),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.K),n.bindBuffer(n.ARRAY_BUFFER,t.u),n.vertexAttribPointer(r.K,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.J,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.K),n.disableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function we(t){this.g=t}m(Ge,ce);var Se=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 He(t,e){return e+t}function Fe(t,e){window[t]=e}function Le(t){if(this.g=t,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=t&&t.locateFile||He,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.aa=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function Ce(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(m){switch(m.g){case 1:return t.$?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(m,X((function(t){switch(t.g){case 1:return t.o=2,g(t,WebAssembly.instantiate(Se),4);case 4:t.g=3,t.o=0;break;case 2:return t.o=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})),2)):m.return();case 2:if(n=m.h,"object"==typeof window)return Fe("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),Fe("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=Te(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.aa)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,Te(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(m,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.aa)})),importScripts.apply(null,l(r)),i=t,g(m,createMediapipeSolutionsWasm(Module),6);case 6:i.h=m.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,na:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),m.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),m.return();t.G=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.$=!1,m.g=0}}))}function Te(t,e){var n,r;return X((function(i){return e in t.H?i.return(t.H[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.H[e]=r,i.return(r))}))}function ke(t,e,n){var r,i,o,l,s,c,u,d,h,m,p,f,b,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.I=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.u[e])||(r=new Ie(t.h,t.G),t.u[e]=r),i.return(Ye(r,n,t.I))):i.return(void 0)}))}(t,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=te(v.get(R),Ge,Xe);x={ea:{ka:Zt(x,1),la:Zt(x,2),height:Zt(x,3),width:Zt(x,4),rotation:Zt(x,5,0),ia:Xt(x,6)},Y:vt(te(G.get(R),ye,Ze),be,1).map(Re),V:Ve(te(W.get(R),me,pe))},V.push(x)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===m){Z.g=3;break}if("float_list"===h.type){r[d]=m,Z.g=7;break}if("proto"===h.type){r[d]=m,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(p=t.u[d])||(p=new Ie(t.h,t.G),t.u[d]=p),g(Z,Ye(p,m,t.I),13);case 13:f=Z.h,r[d]=f;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:b[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function Je(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.D=ke(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.D=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Ne(t){return void 0===t&&(t=0),1===t?"hand_landmark_full.tflite":"hand_landmark_lite.tflite"}function Ke(t){var e=this;t=t||{},this.g=new Le({locateFile:t.locateFile,files:function(t){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:Ne(t.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:xe},multiHandWorldLandmarks:{type:"proto_list",stream:"multi_hand_world_landmarks",transform:xe},multiHandedness:{type:"proto_list",stream:"multi_handedness",transform:function(t){return t.map((function(t){return Ve(te(t,me,pe))[0]}))}}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"object"==typeof window&&void 0!==window.navigator&&("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(t){var n,r,i;return X((function(o){return 1==o.g?(n=Ne(t),r="third_party/mediapipe/modules/hand_landmark/"+n,g(o,Te(e.g,n),2)):(i=o.h,e.g.overrideFile(r,i),o.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"}}}})}(t=Le.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.o={},t.u={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={R:o.R,S:o.S},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.R=s.onChange,o.S=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.R(t.S),2);!0===e.h&&(n.s=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.s=!0,this.B=(void 0===this.B?[]:this.B).concat(i),this.A=(void 0===this.A?[]:this.A).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,Ce(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.Z===t.g.graph.url?u.return():(t.s=!0,t.g.graph&&t.g.graph.url?(t.Z=t.g.graph.url,g(u,Te(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.C)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.C[i]);if(t.C={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Je(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.s)return s.return();if(!t.A){s.g=2;break}e=a(t.A),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.B),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.B=void 0}t.s=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.C[t]=e},t.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(m){switch(m.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(m,h.D,2)):m.return();case 2:return g(m,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var p=t[l];switch(s.type){case"video":var f=h.o[s.stream];if(f||(f=new Ie(h.h,h.G),h.o[s.stream]=f),0===f.l&&(f.l=f.h.createTexture()),typeof HTMLVideoElement<"u"&&p instanceof HTMLVideoElement)var b=p.videoWidth,y=p.videoHeight;else typeof HTMLImageElement<"u"&&p instanceof HTMLImageElement?(b=p.naturalWidth,y=p.naturalHeight):(b=p.width,y=p.height);y={glName:f.l,width:b,height:y},(b=f.g).canvas.width=y.width,b.canvas.height=y.height,b.activeTexture(b.TEXTURE0),f.h.bindTexture2d(f.l),b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,p),f.h.bindTexture2d(0),f=y;break t;case"detections":for((f=h.o[s.stream])||(f=new we(h.h),h.o[s.stream]=f),f.data||(f.data=new f.g.DetectionListData),f.data.reset(p.length),y=0;y<p.length;++y){b=p[y];var Z=f.data,v=Z.setBoundingBox,G=y,X=b.ea,W=new Ge;if(gt(W,1,X.ka),gt(W,2,X.la),gt(W,3,X.height),gt(W,4,X.width),gt(W,5,X.rotation),gt(W,6,X.ia),X=ne(W,Xe),v.call(Z,G,X),b.Y)for(Z=0;Z<b.Y.length;++Z){var V=!!(W=b.Y[Z]).visibility;G=(v=f.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),gt(V=new be,1,W.x),gt(V,2,W.y),gt(V,3,W.z),W.visibility&&gt(V,4,W.visibility),W=ne(V,ge),G.call(v,X,W)}if(b.V)for(Z=0;Z<b.V.length;++Z)G=(v=f.data).addClassification,X=y,W=b.V[Z],gt(V=new de,2,W.score),W.index&&gt(V,1,W.index),W.label&&gt(V,3,W.label),W.displayName&&gt(V,4,W.displayName),W=ne(V,he),G.call(v,X,W)}f=f.data;break t;default:f={}}}switch(c=f,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(m,h.D,4);case 4:r.delete(),m.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",Le),R("OptionType",{BOOL:0,NUMBER:1,ma:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=Ke.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return X((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},R("Hands",Ke),R("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]]),R("VERSION","0.4.1646424915")}).call(bi);var yi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.da=e.prototype}function p(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function f(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={U:e,V:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new p,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.V)throw e.U;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return f(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return f(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){f(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}p.prototype.o=function(t){this.h=t},p.prototype.return=function(t){this.j={return:t},this.g=this.s},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.C),reject:t(this.l)}},e.prototype.C=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.F(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.v(t):this.m(t)}},e.prototype.v=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.G(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.D(),this.A()},e.prototype.D=function(){var t=this;o((function(){if(t.B()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.B=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.A=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.F=function(t){var e=this.j();t.J(e.resolve,e.reject)},e.prototype.G=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.J(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.J=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).J(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).J(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(t){!function(t){V.setTimeout((function(){throw t}),0)}(t)}function I(t,e){x(Error("Invalid wire type: "+t+" (at position "+e+")"))}function Y(){x(Error("Failed to read varint, encoding is invalid."))}function w(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var S,H,F=typeof TextDecoder<"u",L=typeof TextEncoder<"u";function C(t){if(L)t=(H||(H=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var T={},k=null;function J(t){var e;void 0===e&&(e=0),K(),e=T[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function N(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=k[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}K();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function K(){if(!k){k={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));T[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===k[o]&&(k[o]=i)}}}}var U,j="function"==typeof Uint8Array;function z(t){if(this.g=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}z.prototype.toJSON=function(){if(null==this.g)var t="";else t=this.g,t=this.g=null==t||"string"==typeof t?t:j&&t instanceof Uint8Array?J(t):null;return t};var B="function"==typeof Uint8Array.prototype.slice;function M(t,e,n){return e===n?U||(U=new Uint8Array(0)):B?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var E=0;function A(t,e){e=void 0!==(e=void 0===e?{}:e).u&&e.u,this.h=null,this.g=this.i=this.m=0,this.l=!1,this.u=e,t&&P(this,t)}function P(t,e){t.h=function(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 N(t);if(t.constructor===z){if(null==t.g)var e=U||(U=new Uint8Array(0));else{e=Uint8Array;var n=t.g;n=null==n||j&&null!=n&&n instanceof Uint8Array?n:"string"==typeof n?N(n):null,e=new e(t=t.g=n)}return e}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")}(e),t.m=0,t.i=t.h.length,t.g=t.m}function O(t){for(var e=128,n=0,r=0,i=0;4>i&&128<=e;i++)n|=(127&(e=t.h[t.g++]))<<7*i;if(128<=e&&(n|=(127&(e=t.h[t.g++]))<<28,r|=(127&e)>>4),128<=e)for(i=0;5>i&&128<=e;i++)r|=(127&(e=t.h[t.g++]))<<7*i+3;if(128>e)return t=n>>>0,(r=2147483648&(e=r>>>0))&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),t=4294967296*e+(t>>>0),r?-t:t;t.l=!0,Y()}function Q(t){t.g>t.i&&(t.l=!0,x(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}A.prototype.reset=function(){this.g=this.m},A.prototype.j=function(){var t=this.h,e=t[this.g],n=127&e;return 128>e?(this.g+=1,Q(this),n):(n|=(127&(e=t[this.g+1]))<<7,128>e?(this.g+=2,Q(this),n):(n|=(127&(e=t[this.g+2]))<<14,128>e?(this.g+=3,Q(this),n):(n|=(127&(e=t[this.g+3]))<<21,128>e?(this.g+=4,Q(this),n):(n|=(15&(e=t[this.g+4]))<<28,128>e?(this.g+=5,Q(this),n>>>0):(this.g+=5,128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]?(this.l=!0,Y(),n):(Q(this),n))))))},A.prototype.o=function(){var t=this.h[this.g],e=this.h[this.g+1],n=this.h[this.g+2],r=this.h[this.g+3];return this.g+=4,Q(this),t=2*((n=(t<<0|e<<8|n<<16|r<<24)>>>0)>>31)+1,e=n>>>23&255,n&=8388607,255==e?n?NaN:1/0*t:0==e?t*Math.pow(2,-149)*n:t*Math.pow(2,e-150)*(n+Math.pow(2,23))};var _=[];function D(){this.g=new Uint8Array(64),this.h=0}function q(t,e){if(!(t.h+1<t.g.length)){var n=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(n)}t.g[t.h++]=e}function $(t,e){for(;127<e;)q(t,127&e|128),e>>>=7;q(t,e)}function tt(t){var e={},n=void 0!==e.N&&e.N;this.m={u:void 0!==e.u&&e.u},this.N=n,e=this.m,_.length?(n=_.pop(),e&&(n.u=e.u),t&&P(n,t),t=n):t=new A(t,e),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}function et(t){var e=t.g;if((e=e.g==e.i)||(e=t.j)||(e=(e=t.g).l||0>e.g||e.g>e.i),e)return!1;t.l=t.g.g;var n=t.g.j();return e=n>>>3,0<=(n&=7)&&5>=n?(t.i=e,t.h=n,!0):(t.j=!0,I(n,t.l),!1)}function nt(t){switch(t.h){case 0:if(0!=t.h)nt(t);else t:{for(var e=(t=t.g).g,n=0;10>n;n++){if(0==(128&t.h[e])){t.g=e+1,Q(t);break t}e++}t.l=!0,Y()}break;case 1:(t=t.g).g+=8,Q(t);break;case 2:2!=t.h?nt(t):(e=t.g.j(),(t=t.g).g+=e,Q(t));break;case 5:(t=t.g).g+=4,Q(t);break;case 3:for(e=t.i;;){if(!et(t)){t.j=!0,x(Error("Unmatched start-group tag: stream EOF"));break}if(4==t.h){t.i!=e&&(t.j=!0,x(Error("Unmatched end-group tag")));break}nt(t)}break;default:t.j=!0,I(t.h,t.l)}}function rt(t,e,n){t.N||(t=M(t.g.h,n,t.g.g),(n=e.o)?n.push(t):e.o=[t])}function it(t,e,n){var r=t.g.i,i=t.g.j(),o=t.g.g+i;if(t.g.i=o,n(e,t),0!==(n=o-t.g.g))throw Error("Message parsing ended unexpectedly. Expected to read "+i+" bytes, instead read "+(i-n)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.i=r,e}function ot(t,e,n){var r=t.g.j();for(r=t.g.g+r;t.g.g<r;)n.push(e.call(t.g))}D.prototype.length=function(){return this.h},D.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,M(t,0,e)},tt.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};var at=[];function lt(){this.h=[],this.i=0,this.g=new D}function st(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function ct(t,e,n){$(t.g,8*e+2),$(t.g,n.length),st(t,t.g.end()),st(t,n)}var ut,dt="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ht(t,e){Object.isFrozen(t)||(dt?t[dt]|=e:void 0!==t.g?t.g|=e:Object.defineProperties(t,{g:{value:e,configurable:!0,writable:!0,enumerable:!1}}))}function mt(t){return t?null==(e=dt?t[dt]:t.g)?0:e:0;var e}function pt(t){return Array.isArray(t)&&ht(t,1),t}function ft(t){if(!Array.isArray(t))throw Error("cannot mark non-array as immutable");ht(t,2)}function bt(t){return null!==t&&"object"==typeof t&&t.constructor===Object}function gt(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":return j&&null!=t&&t instanceof Uint8Array?J(t):t;default:return t}}function yt(t,e){if(null!=t)return Array.isArray(t)||bt(t)?Zt(t,e):e(t)}function Zt(t,e){if(Array.isArray(t)){for(var n=Array(t.length),r=0;r<t.length;r++)n[r]=yt(t[r],e);return 1&mt(t)&&pt(n),n}for(r in n={},t)n[r]=yt(t[r],e);return n}function vt(t,e,n){var r=ut;if(ut=null,t||(t=r),r=this.constructor.ba,t||(t=r?[r]:[]),this.j=(r?0:-1)-(this.constructor.$||0),this.m=this.g=null,this.h=t,t=(r=this.h.length)-1,r&&bt(r=this.h[t])?(this.l=t-this.j,this.i=r):void 0!==e&&-1<e?(this.l=Math.max(e,t+1-this.j),this.i=null):this.l=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)(t=n[e])<this.l?(t+=this.j,(r=this.h[t])?pt(r):this.h[t]=Xt):(Wt(this),(r=this.i[t])?pt(r):this.i[t]=Xt)}var Gt,Xt=Object.freeze(pt([]));function Wt(t){var e=t.l+t.j;t.h[e]||(t.i=t.h[e]={})}function Vt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.l?t.i?t.i[e]:void 0:t.h[e+t.j]}function Rt(t,e,n){n=void 0===n||n;var r=void 0!==r&&r,i=Vt(t,e,r);return null==i&&(i=Xt),i===Xt?wt(t,e,i=pt([]),r):n&&Array.isArray(i)&&2&mt(i)&&wt(t,e,i=i.slice(),r),i}function xt(t){var e=Rt(t,3,!1);if(t.m||(t.m={}),!t.m[3]){for(var n=0;n<e.length;n++)e[n]=+e[n];t.m[3]=!0}return e}function It(t,e,n){return null==(t=Vt(t,e))?n:t}function Yt(t,e,n){return null==(t=null==(t=Vt(t,e))?t:+t)?void 0===n?0:n:t}function wt(t,e,n,r){void 0!==r&&r||e>=t.l?(Wt(t),t.i[e]=n):t.h[e+t.j]=n}function St(t,e,n){if(-1===n)return null;t.g||(t.g={});var r=t.g[n];if(r)return r;var i=Vt(t,n,!1);return null==i?r:(e=new e(i),t.g[n]=e)}function Ht(t,e,n){t.g||(t.g={});var r=t.g[n];if(!r){var i=Rt(t,n,!1);r=[];for(var o=!!Array.isArray(i)&&!!(2&mt(i)),a=0;a<i.length;a++)r[a]=new e(i[a]),o&&ft(r[a].h);o&&(ft(r),Object.freeze(r)),t.g[n]=r}return r}function Ft(t,e,n,r,i){var o=Ht(t,r,e);n=n||new r,t=Rt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,Lt(n))):(o.push(n),t.push(Lt(n)))}function Lt(t){if(t.g)for(var e in t.g){var n=t.g[e];if(Array.isArray(n))for(var r=0;r<n.length;r++)n[r]&&Lt(n[r]);else n&&Lt(n)}return t.h}function Ct(t,e){if(t=t.o){st(e,e.g.end());for(var n=0;n<t.length;n++)st(e,t[n])}}function Tt(t){var e=t[0];switch(t.length){case 2:var n=t[1];return function(t,r,i){return e(t,r,i,n)};case 3:var r=t[1],i=t[2];return function(t,n,o){return e(t,n,o,r,i)};case 4:var o=t[1],a=t[2],l=t[3];return function(t,n,r){return e(t,n,r,o,a,l)};default:throw Error("unsupported number of parameters, expected [2-4], got "+t.length)}}function kt(t,e,n){for(;et(e)&&4!=e.h;){var r=e.i,i=n[r];if(i){if(Array.isArray(i)&&(i=n[r]=Tt(i)),!i(e,t,r)){i=t;var o=(r=e).l;nt(r),rt(r,i,o)}}else i=t,o=(r=e).l,nt(r),rt(r,i,o)}return t}function Jt(t,e){var n=new lt;if(e(t,n),0===(t=n.i+n.g.length()))n=new Uint8Array(0);else{t=new Uint8Array(t);for(var r=n.h,i=r.length,o=e=0;o<i;o++){var a=r[o];0!==a.length&&(t.set(a,e),e+=a.length)}0!==(i=(r=n.g).h)&&(t.set(r.g.subarray(0,i),e),r.h=0),n.h=[t],n=t}return n}function Nt(t,e,n){if(at.length){var r=at.pop();t&&(P(r.g,t),r.i=-1,r.h=-1),t=r}else t=new tt(t);try{return n(new e,t)}finally{(e=t.g).h=null,e.m=0,e.i=0,e.g=0,e.l=!1,e.u=!1,t.i=-1,t.h=-1,t.j=!1,100>at.length&&at.push(t)}}function Kt(t,e,n){if(null!=(e=Vt(e,n))){$(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?E=0:(0,E=2147483648):isNaN(r)?(0,E=2147483647):34028234663852886e22<r?(0,E=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,E=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,E=(n<<31|e+127<<23|8388607&r)>>>0),q(t,(n=E)>>>0&255),q(t,n>>>8&255),q(t,n>>>16&255),q(t,n>>>24&255)}}function Ut(t,e,n){return 5===t.h&&(wt(e,n,t.g.o()),!0)}function jt(t,e,n){return(5===t.h||2===t.h)&&(e=Rt(e,n),2==t.h?ot(t,A.prototype.o,e):e.push(t.g.o()),!0)}function zt(t,e,n){return 0===t.h&&(wt(e,n,O(t.g)),!0)}function Bt(t,e,n){return 0===t.h&&(wt(e,n,t.g.j()),!0)}function Mt(t,e,n){if(2!==t.h)return!1;var r,i=t.g.j(),o=(t=t.g).g;if(t.g+=i,Q(t),t=t.h,F)(r=S)||(r=S=new TextDecoder("utf-8",{fatal:!1})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?c.push(65533):(l=t[o++],194>a||128!=(192&l)?(o--,c.push(65533)):c.push((31&a)<<6|63&l)):240>a?o>=i-1?c.push(65533):128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,c.push(65533)):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?c.push(65533):128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,c.push(65533)):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):c.push(65533),8192<=c.length&&(u=w(u,c),c.length=0);r=w(u,c)}return wt(e,n,r),!0}function Et(t,e,n,r,i){if(2!==t.h)return!1;t=it(t,new r,i);var o=void 0!==o&&o;return e.g||(e.g={}),r=t&&Lt(t),e.g[n]=t,wt(e,n,r,o),!0}function At(t,e,n,r,i){return 2===t.h&&(Ft(e,n,t=it(t,new r,i),r,void 0),!0)}function Pt(t,e,n){return(0===t.h||2===t.h)&&(e=Rt(e,n),2==t.h?ot(t,A.prototype.j,e):e.push(t.g.j()),!0)}function Ot(t,e,n){return 0===t.h&&(wt(e,n,O(t.g)),!0)}function Qt(t){vt.call(this,t,-1,$t)}function _t(t,e){return kt(t,e,Gt||(Gt={1:Bt,2:Bt,3:jt,4:Ot}))}vt.prototype.toJSON=function(){return Zt(Lt(this),gt)},vt.prototype.toString=function(){return Lt(this).toString()},m(Qt,vt),Qt.prototype.getRows=function(){return Vt(this,1)},Qt.prototype.getCols=function(){return Vt(this,2)},Qt.prototype.getPackedDataList=function(){return xt(this)},Qt.prototype.getLayout=function(){return It(this,4,0)};var Dt,qt,$t=[3];function te(t){vt.call(this,t)}function ee(t,e){var n=Vt(t,1);if(null!=n&&null!=n){$(e.g,8);var r=e.g;if(0<=n)$(r,n);else{for(var i=0;9>i;i++)q(r,127&n|128),n>>=7;q(r,1)}}Kt(e,t,2),null!=(r=Vt(t,3))&&ct(e,3,C(r)),null!=(r=Vt(t,4))&&ct(e,4,C(r)),Ct(t,e)}function ne(t,e){return kt(t,e,Dt||(Dt={1:Bt,2:Ut,3:Mt,4:Mt}))}function re(t){vt.call(this,t,-1,le)}function ie(t,e){return kt(t,e,qt||(qt={1:[At,te,ne]}))}m(te,vt),m(re,vt),re.prototype.addClassification=function(t,e){return Ft(this,1,t,te,e),this};var oe,ae,le=[1];function se(t){vt.call(this,t)}function ce(t,e){Kt(e,t,1),Kt(e,t,2),Kt(e,t,3),Kt(e,t,4),Kt(e,t,5),Ct(t,e)}function ue(t,e){return kt(t,e,oe||(oe={1:Ut,2:Ut,3:Ut,4:Ut,5:Ut}))}function de(t){vt.call(this,t,-1,fe)}function he(t,e){return kt(t,e,ae||(ae={1:[At,se,ue]}))}m(se,vt),m(de,vt);var me,pe,fe=[1];function be(t){vt.call(this,t)}function ge(t,e){Kt(e,t,1),Kt(e,t,2),Kt(e,t,3),Kt(e,t,4),Kt(e,t,5);var n=Vt(t,6);if(null!=n&&null!=n){$(e.g,48);var r=e.g,i=n;n=0>i;var o=(i=Math.abs(i))>>>0;for(i=Math.floor((i-o)/4294967296),i>>>=0,n&&(i=~i>>>0,4294967295<(o=1+(~o>>>0))&&(o=0,4294967295<++i&&(i=0))),n=E=o,o=i;0<o||127<n;)q(r,127&n|128),n=(n>>>7|o<<25)>>>0,o>>>=7;q(r,n)}Ct(t,e)}function ye(t,e){return kt(t,e,me||(me={1:Ut,2:Ut,3:Ut,4:Ut,5:Ut,6:zt}))}function Ze(t){vt.call(this,t,-1,Xe)}function ve(t,e){return kt(t,e,pe||(pe={1:Ot,2:Ot,3:jt,4:Pt}))}m(be,vt),m(Ze,vt),Ze.prototype.getVertexType=function(){return It(this,1,0)},Ze.prototype.getPrimitiveType=function(){return It(this,2,0)},Ze.prototype.getVertexBufferList=function(){return xt(this)},Ze.prototype.getIndexBufferList=function(){return Rt(this,4)};var Ge,Xe=[3,4];function We(t){vt.call(this,t)}function Ve(t,e){return kt(t,e,Ge||(Ge={1:[Et,Ze,ve],2:[Et,Qt,_t]}))}m(We,vt),We.prototype.getMesh=function(){return St(this,Ze,1)},We.prototype.getPoseTransformMatrix=function(){return St(this,Qt,2)};var Re=[[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]],xe=[[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]],Ie=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Ye=[[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]],we=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Se=[[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]],He=[].concat(l(Re),l(xe),l(Ie),l(Ye),l(we),l(Se));function Fe(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Le(t){return Ht(t,te,1).map((function(t){return{index:It(t,1,0),score:Yt(t,2),label:null!=Vt(t,3)?It(t,3,""):void 0,displayName:null!=Vt(t,4)?It(t,4,""):void 0}}))}function Ce(t){return{x:Yt(t,1),y:Yt(t,2),z:Yt(t,3),visibility:null!=Vt(t,4)?Yt(t,4):void 0}}function Te(t){return Ht(Nt(t,de,he),se,1).map(Ce)}function ke(t,e){this.h=t,this.g=e,this.l=0}function Je(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=Fe(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=Fe(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={I:n.getAttribLocation(r,"aVertex"),H:n.getAttribLocation(r,"aTex"),ca:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.H),n.vertexAttribPointer(t.j.H,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.H,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.I),n.disableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function Ne(t){this.g=t}var Ke=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 Ue(t,e){return e+t}function je(t,e){window[t]=e}function ze(t){if(this.g=t,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=t&&t.locateFile||Ue,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.S=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function Be(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(m){switch(m.g){case 1:return t.R?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(m,X((function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(Ke),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)}})),2)):m.return();case 2:if(n=m.h,"object"==typeof window)return je("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),je("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=Me(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.S)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,Me(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(m,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.S)})),importScripts.apply(null,l(r)),i=t,g(m,createMediapipeSolutionsWasm(Module),6);case 6:i.h=m.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,aa:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),m.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),m.return();t.D=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.R=!1,m.g=0}}))}function Me(t,e){var n,r;return X((function(i){return e in t.F?i.return(t.F[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.F[e]=r,i.return(r))}))}function Ee(t,e,n){var r,i,o,l,s,c,u,d,h,m,p,f,b,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.G=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.s[e])||(r=new ke(t.h,t.D),t.s[e]=r),i.return(Je(r,n,t.G))):i.return(void 0)}))}(t,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=Nt(v.get(R),be,ye);x={T:{X:Yt(x,1),Y:Yt(x,2),height:Yt(x,3),width:Yt(x,4),rotation:Yt(x,5,0),W:It(x,6,0)},O:Te(G.get(R)),M:Le(Nt(W.get(R),re,ie))},V.push(x)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===m){Z.g=3;break}if("float_list"===h.type){r[d]=m,Z.g=7;break}if("proto"===h.type){r[d]=m,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(p=t.s[d])||(p=new ke(t.h,t.D),t.s[d]=p),g(Z,Je(p,m,t.G),13);case 13:f=Z.h,r[d]=f;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:b[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function Ae(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.C=Ee(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.C=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Pe(t){return t.map(Oe)}function Oe(t){var e=(t=Nt(t,We,Ve)).getMesh();if(!e)return t;var n=new Float32Array(e.getVertexBufferList());e.getVertexBufferList=function(){return n};var r=new Uint32Array(e.getIndexBufferList());return e.getIndexBufferList=function(){return r},t}function Qe(t){var e=this;t=t||{},this.g=new ze({locateFile:t.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:Te},rightHandLandmarks:{type:"proto",stream:"right_hand_landmarks",transform:Te},faceLandmarks:{type:"proto",stream:"face_landmarks",transform:Te},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:Te},ea:{type:"proto",stream:"world_landmarks",transform:Te},segmentationMask:{type:"texture",stream:"segmentation_mask"},multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:Pe}}}],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(t){var n,r,i,o;return X((function(a){if(1==a.g){switch(n="",t){case 1:n="pose_landmark_full.tflite";break;case 2:n="pose_landmark_heavy.tflite";break;default:n="pose_landmark_lite.tflite"}return r="third_party/mediapipe/modules/pose_landmark/"+n,i=e.g.locateFile(n,""),g(a,fetch(i),3)}return 2!=a.g?g(a,a.h.arrayBuffer(),2):(o=a.h,e.g.overrideFile(r,o),g(a,e.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"}}}})}(t=ze.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.m={},t.s={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={K:o.K,L:o.L},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.K=s.onChange,o.L=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.K(t.L),2);!0===e.h&&(n.o=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.A=(void 0===this.A?[]:this.A).concat(i),this.v=(void 0===this.v?[]:this.v).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,Be(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.P===t.g.graph.url?u.return():(t.o=!0,t.g.graph&&t.g.graph.url?(t.P=t.g.graph.url,g(u,Me(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.B)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.B[i]);if(t.B={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Ae(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.o)return s.return();if(!t.v){s.g=2;break}e=a(t.v),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.v=void 0;case 2:if(t.A){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.A),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.A=void 0}t.o=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.B[t]=e},t.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(m){switch(m.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(m,h.C,2)):m.return();case 2:return g(m,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var p=t[l];switch(s.type){case"video":var f=h.m[s.stream];if(f||(f=new ke(h.h,h.D),h.m[s.stream]=f),0===f.l&&(f.l=f.h.createTexture()),typeof HTMLVideoElement<"u"&&p instanceof HTMLVideoElement)var b=p.videoWidth,y=p.videoHeight;else typeof HTMLImageElement<"u"&&p instanceof HTMLImageElement?(b=p.naturalWidth,y=p.naturalHeight):(b=p.width,y=p.height);y={glName:f.l,width:b,height:y},(b=f.g).canvas.width=y.width,b.canvas.height=y.height,b.activeTexture(b.TEXTURE0),f.h.bindTexture2d(f.l),b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,p),f.h.bindTexture2d(0),f=y;break t;case"detections":for((f=h.m[s.stream])||(f=new Ne(h.h),h.m[s.stream]=f),f.data||(f.data=new f.g.DetectionListData),f.data.reset(p.length),y=0;y<p.length;++y){b=p[y];var Z=f.data,v=Z.setBoundingBox,G=y,X=b.T,W=new be;if(wt(W,1,X.X),wt(W,2,X.Y),wt(W,3,X.height),wt(W,4,X.width),wt(W,5,X.rotation),wt(W,6,X.W),X=Jt(W,ge),v.call(Z,G,X),b.O)for(Z=0;Z<b.O.length;++Z){var V=!!(W=b.O[Z]).visibility;G=(v=f.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),wt(V=new se,1,W.x),wt(V,2,W.y),wt(V,3,W.z),W.visibility&&wt(V,4,W.visibility),W=Jt(V,ce),G.call(v,X,W)}if(b.M)for(Z=0;Z<b.M.length;++Z)G=(v=f.data).addClassification,X=y,W=b.M[Z],wt(V=new te,2,W.score),W.index&&wt(V,1,W.index),W.label&&wt(V,3,W.label),W.displayName&&wt(V,4,W.displayName),W=Jt(V,ee),G.call(v,X,W)}f=f.data;break t;default:f={}}}switch(c=f,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(m,h.C,4);case 4:r.delete(),m.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",ze),R("OptionType",{BOOL:0,NUMBER:1,Z:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=Qe.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return X((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},R("Holistic",Qe),R("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}}),R("FACEMESH_LIPS",Re),R("FACEMESH_LEFT_EYE",xe),R("FACEMESH_LEFT_EYEBROW",Ie),R("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),R("FACEMESH_RIGHT_EYE",Ye),R("FACEMESH_RIGHT_EYEBROW",we),R("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),R("FACEMESH_FACE_OVAL",Se),R("FACEMESH_CONTOURS",He),R("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]]),R("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]]),R("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]]),R("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}),R("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}),R("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}),R("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),R("matrixDataToMatrix",(function(t){for(var e=t.getCols(),n=t.getRows(),r=t.getPackedDataList(),i=[],o=0;o<n;o++)i.push(Array(e));for(o=0;o<n;o++)for(var a=0;a<e;a++){var l=1===t.getLayout()?o*e+a:a*n+o;i[o][a]=r[l]}return i})),R("VERSION","0.5.1635989137")}).call(yi);const gi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.na=e.prototype}function p(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function f(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={da:e,ea:!0},t.g=t.o||t.u}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new p,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.ea)throw e.da;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return f(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.s):(t.g.s(e),e=v(t)),e},this.throw=function(e){return f(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.s):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){f(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}p.prototype.s=function(t){this.h=t},p.prototype.return=function(t){this.j={return:t},this.g=this.u},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.s=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.D),reject:t(this.l)}},e.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.H(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.A(t):this.o(t)}},e.prototype.A=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.I(e,t):this.o(t)},e.prototype.l=function(t){this.u(2,t)},e.prototype.o=function(t){this.u(1,t)},e.prototype.u=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.G(),this.B()},e.prototype.G=function(){var t=this;o((function(){if(t.C()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.C=function(){if(this.s)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.B=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.H=function(t){var e=this.j();t.M(e.resolve,e.reject)},e.prototype.I=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.M(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.M=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.s=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).M(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).M(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(){throw Error("Invalid UTF8")}function I(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var Y,w,S=typeof TextDecoder<"u",H=typeof TextEncoder<"u",F={},L=null;function C(t){var e;void 0===e&&(e=0),k(),e=F[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function T(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=L[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}k();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),i!==n?r.subarray(0,i):r}function k(){if(!L){L={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));F[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===L[o]&&(L[o]=i)}}}}var J,N="function"==typeof Uint8Array;function K(t){return N&&null!=t&&t instanceof Uint8Array}function U(t){if(this.L=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}var j="function"==typeof Uint8Array.prototype.slice,z=0;function B(t,e){return Error("Invalid wire type: "+t+" (at position "+e+")")}function M(){return Error("Failed to read varint, encoding is invalid.")}function E(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.i=this.j=0,this.v=e,t&&A(this,t)}function A(t,e){t.h=function(t,e){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 T(t);if(t.constructor===U)return!e&&(e=t.L)&&e.constructor===Uint8Array?e:(e=null==(e=t.L)||K(e)?e:"string"==typeof e?T(e):null,(t=t.L=e)?new Uint8Array(t):J||(J=new Uint8Array(0)));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")}(e,t.v),t.j=0,t.i=t.h.length,t.g=t.j}function P(t){if(t.g>t.i)throw Error("Tried to read past the end of the data "+t.g+" > "+t.i)}function O(t){var e=t.h,n=e[t.g],r=127&n;if(128>n)return t.g+=1,P(t),r;if(r|=(127&(n=e[t.g+1]))<<7,128>n)return t.g+=2,P(t),r;if(r|=(127&(n=e[t.g+2]))<<14,128>n)return t.g+=3,P(t),r;if(r|=(127&(n=e[t.g+3]))<<21,128>n)return t.g+=4,P(t),r;if(n=e[t.g+4],t.g+=5,r|=(15&n)<<28,128>n)return P(t),r;if(128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++])throw M();return P(t),r}E.prototype.reset=function(){this.g=this.j};var Q=[];function _(){this.g=[]}function D(t,e){for(;127<e;)t.g.push(127&e|128),e>>>=7;t.g.push(e)}function q(t){var e={},n=void 0!==e.W&&e.W;this.l={v:void 0!==e.v&&e.v},this.W=n,e=this.l,Q.length?(n=Q.pop(),e&&(n.v=e.v),t&&A(n,t),t=n):t=new E(t,e),this.g=t,this.j=this.g.g,this.h=this.i=-1}function $(t){var e=t.g;if(e.g==e.i)return!1;t.j=t.g.g;var n=O(t.g)>>>0;if(e=n>>>3,!(0<=(n&=7)&&5>=n))throw B(n,t.j);if(1>e)throw Error("Invalid field number: "+e+" (at position "+t.j+")");return t.i=e,t.h=n,!0}function tt(t){switch(t.h){case 0:if(0!=t.h)tt(t);else t:{for(var e=(t=t.g).g,n=e+10;e<n;)if(0==(128&t.h[e++])){t.g=e,P(t);break t}throw M()}break;case 1:(t=t.g).g+=8,P(t);break;case 2:2!=t.h?tt(t):(e=O(t.g)>>>0,(t=t.g).g+=e,P(t));break;case 5:(t=t.g).g+=4,P(t);break;case 3:for(e=t.i;;){if(!$(t))throw Error("Unmatched start-group tag: stream EOF");if(4==t.h){if(t.i!=e)throw Error("Unmatched end-group tag");break}tt(t)}break;default:throw B(t.h,t.j)}}_.prototype.length=function(){return this.g.length},_.prototype.end=function(){var t=this.g;return this.g=[],t},q.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};var et=[];function nt(){this.i=[],this.h=0,this.g=new _}function rt(t,e){0!==e.length&&(t.i.push(e),t.h+=e.length)}var it="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ot(t,e){Object.isFrozen(t)||(it?t[it]|=e:void 0!==t.N?t.N|=e:Object.defineProperties(t,{N:{value:e,configurable:!0,writable:!0,enumerable:!1}}))}function at(t){var e;return null==(e=it?t[it]:t.N)?0:e}function lt(t){return ot(t,1),t}function st(t){return!!Array.isArray(t)&&!!(2&at(t))}function ct(t){if(!Array.isArray(t))throw Error("cannot mark non-array as immutable");ot(t,2)}function ut(t){return null!==t&&"object"==typeof t&&!Array.isArray(t)&&t.constructor===Object}var dt=Object.freeze(lt([]));function ht(t){if(st(t.m))throw Error("Cannot mutate an immutable Message")}var mt,pt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function ft(t){return{value:t,configurable:!1,writable:!1,enumerable:!1}}function bt(t,e,n){return-1===e?null:e>=t.i?t.g?t.g[e]:void 0:void 0!==n&&n&&t.g&&null!=(n=t.g[e])?n:t.m[e+t.h]}function gt(t,e,n,r){r=void 0!==r&&r,ht(t),e<t.i&&!r?t.m[e+t.h]=n:(t.g||(t.g=t.m[t.i+t.h]={}))[e]=n}function yt(t,e,n,r){n=void 0===n||n;var i=bt(t,e,r=void 0!==r&&r);return null==i&&(i=dt),st(t.m)?n&&(ct(i),Object.freeze(i)):(i===dt||st(i))&&gt(t,e,i=lt(i.slice()),r),i}function Zt(t,e,n){return null==(t=null==(t=bt(t,e))?t:+t)?void 0===n?0:n:t}function vt(t,e,n,r){t.j||(t.j={});var i=st(t.m),o=t.j[n];if(!o){r=yt(t,n,!0,void 0!==r&&r),o=[],i=i||st(r);for(var a=0;a<r.length;a++)o[a]=new e(r[a]),i&&ct(o[a].m);i&&(ct(o),Object.freeze(o)),t.j[n]=o}return o}function Gt(t,e,n,r,i){var o=void 0!==o&&o;return ht(t),o=vt(t,n,e,o),n=r||new n,t=yt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,n.m)):(o.push(n),t.push(n.m)),n}function Xt(t,e){return null==(t=bt(t,e))?0:t}function Wt(t,e){return null==(t=bt(t,e))?"":t}function Vt(t){var e=It;return xt(t,e=void 0===e?Yt:e)}function Rt(t,e){if(null!=t){if(Array.isArray(t))t=xt(t,e);else if(ut(t)){var n,r={};for(n in t)r[n]=Rt(t[n],e);t=r}else t=e(t);return t}}function xt(t,e){for(var n=t.slice(),r=0;r<n.length;r++)n[r]=Rt(n[r],e);return Array.isArray(t)&&1&at(t)&&lt(n),n}function It(t){return t&&"object"==typeof t&&t.toJSON?t.toJSON():(t=function(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(t&&!Array.isArray(t)){if(K(t))return C(t);if(t instanceof U){var e=t.L;return e=null==e||"string"==typeof e?e:N&&e instanceof Uint8Array?C(e):null,(t.L=e)||""}}}return t}(t),Array.isArray(t)?Vt(t):t)}function Yt(t){return K(t)?new Uint8Array(t):t}function wt(t,e,n){t||(t=mt),mt=null;var r=this.constructor.h;if(t||(t=r?[r]:[]),this.h=(r?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=t,t=(r=this.m.length)-1,r&&ut(r=this.m[t])?(this.i=t-this.h,this.g=r):void 0!==e&&-1<e?(this.i=Math.max(e,t+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)if((t=n[e])<this.i)t+=this.h,(r=this.m[t])?Array.isArray(r)&&lt(r):this.m[t]=dt;else{var i=(r=this.g||(this.g=this.m[this.i+this.h]={}))[t];i?Array.isArray(i)&&lt(i):r[t]=dt}}function St(){wt.apply(this,arguments)}if(wt.prototype.toJSON=function(){return Vt(this.m)},wt.prototype.toString=function(){return this.m.toString()},m(St,wt),pt){var Ht={};Object.defineProperties(St,(Ht[Symbol.hasInstance]=ft((function(){throw Error("Cannot perform instanceof checks for MutableMessage")})),Ht))}function Ft(t,e,n){if(n){var r,i={};for(r in n){var o=n[r],a=o.ha;a||(i.F=o.la||o.fa.P,o.aa?(i.U=Kt(o.aa),a=function(t){return function(e,n,r){return t.F(e,n,r,t.U)}}(i)):o.ca?(i.T=Ut(o.X.g,o.ca),a=function(t){return function(e,n,r){return t.F(e,n,r,t.T)}}(i)):a=i.F,o.ha=a),a(e,t,o.X),i={F:i.F,U:i.U,T:i.T}}}!function(t,e){if(e=e.ba){rt(t,t.g.end());for(var n=0;n<e.length;n++)rt(t,e[n])}}(e,t)}var Lt=Symbol();function Ct(t,e,n){return t[Lt]||(t[Lt]=function(t,r){return e(t,r,n)})}function Tt(t){var e=t[Lt];if(!e){var n=qt(t);e=function(t,e){return $t(t,e,n)},t[Lt]=e}return e}function kt(t){var e=function(t){var e=t.aa;return e?Tt(e):(e=t.ka)?Ct(t.X.g,e,t.ca):void 0}(t),n=t.X,r=t.fa.O;return e?function(t,i){return r(t,i,n,e)}:function(t,e){return r(t,e,n)}}function Jt(t,e,n,r,i,o){var a=0;for((t=t()).length&&"number"!=typeof t[0]&&(n(e,t[0]),a++);a<t.length;){n=t[a++];for(var l=a+1;l<t.length&&"number"!=typeof t[l];)l++;var s=t[a++];switch(l-=a){case 0:r(e,n,s);break;case 1:r(e,n,s,t[a++]);break;case 2:i(e,n,s,t[a++],t[a++]);break;case 3:l=t[a++];var c=t[a++],u=t[a++];Array.isArray(u)?i(e,n,s,l,c,u):o(e,n,s,l,c,u);break;case 4:o(e,n,s,t[a++],t[a++],t[a++],t[a++]);break;default:throw Error("unexpected number of binary field arguments: "+l)}}return e}var Nt=Symbol();function Kt(t){var e=t[Nt];if(!e){var n=At(t);e=function(t,e){return ee(t,e,n)},t[Nt]=e}return e}function Ut(t,e){var n=t[Nt];return n||(n=function(t,n){return Ft(t,n,e)},t[Nt]=n),n}var jt=Symbol();function zt(t,e){t.push(e)}function Bt(t,e,n){t.push(e,n.P)}function Mt(t,e,n,r,i){var o=Kt(i),a=n.P;t.push(e,(function(t,e,n){return a(t,e,n,r,o)}))}function Et(t,e,n,r,i,o){var a=Ut(r,o),l=n.P;t.push(e,(function(t,e,n){return l(t,e,n,r,a)}))}function At(t){return t[jt]||Jt(t,t[jt]=[],zt,Bt,Mt,Et)}var Pt=Symbol();function Ot(t,e){t[0]=e}function Qt(t,e,n,r){var i=n.O;t[e]=r?function(t,e,n){return i(t,e,n,r)}:i}function _t(t,e,n,r,i,o){var a=n.O,l=Tt(i);t[e]=function(t,e,n){return a(t,e,n,r,l,o)}}function Dt(t,e,n,r,i,o,a){var l=n.O,s=Ct(r,i,o);t[e]=function(t,e,n){return l(t,e,n,r,s,a)}}function qt(t){return t[Pt]||Jt(t,t[Pt]={},Ot,Qt,_t,Dt)}function $t(t,e,n){for(;$(e)&&4!=e.h;){var r=e.i,i=n[r];if(!i){var o=n[0];o&&(o=o[r])&&(i=n[r]=kt(o))}if(!(i&&i(e,t,r)||(i=e,r=t,o=i.j,tt(i),i.W))){var a=i.g.h;i=o===(i=i.g.g)?J||(J=new Uint8Array(0)):j?a.slice(o,i):new Uint8Array(a.subarray(o,i)),(o=r.ba)?o.push(i):r.ba=[i]}}return t}function te(t,e,n){if(et.length){var r=et.pop();t&&(A(r.g,t),r.i=-1,r.h=-1),t=r}else t=new q(t);try{return $t(new e,t,qt(n))}finally{(e=t.g).h=null,e.j=0,e.i=0,e.g=0,e.v=!1,t.i=-1,t.h=-1,100>et.length&&et.push(t)}}function ee(t,e,n){for(var r=n.length,i=r%2==1,o=i?1:0;o<r;o+=2)(0,n[o+1])(e,t,n[o]);Ft(t,e,i?n[0]:void 0)}function ne(t,e){var n=new nt;ee(t,n,At(e)),rt(n,n.g.end()),t=new Uint8Array(n.h);for(var r=(e=n.i).length,i=0,o=0;o<r;o++){var a=e[o];t.set(a,i),i+=a.length}return n.i=[t],t}function re(t,e){return{O:t,P:e}}var ie=re((function(t,e,n){if(5!==t.h)return!1;var r=(t=t.g).h[t.g],i=t.h[t.g+1],o=t.h[t.g+2],a=t.h[t.g+3];return t.g+=4,P(t),t=2*((i=(r<<0|i<<8|o<<16|a<<24)>>>0)>>31)+1,r=i>>>23&255,i&=8388607,gt(e,n,255==r?i?NaN:1/0*t:0==r?t*Math.pow(2,-149)*i:t*Math.pow(2,r-150)*(i+Math.pow(2,23))),!0}),(function(t,e,n){if(null!=(e=bt(e,n))){D(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?z=0:(0,z=2147483648):isNaN(r)?(0,z=2147483647):34028234663852886e22<r?(0,z=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,z=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,z=(n<<31|e+127<<23|8388607&r)>>>0),n=z,t.g.push(n>>>0&255),t.g.push(n>>>8&255),t.g.push(n>>>16&255),t.g.push(n>>>24&255)}})),oe=re((function(t,e,n){if(0!==t.h)return!1;for(var r=t.g,i=128,o=0,a=t=0;4>a&&128<=i;a++)i=r.h[r.g++],P(r),o|=(127&i)<<7*a;if(128<=i&&(i=r.h[r.g++],P(r),o|=(127&i)<<28,t|=(127&i)>>4),128<=i)for(a=0;5>a&&128<=i;a++)i=r.h[r.g++],P(r),t|=(127&i)<<7*a+3;if(!(128>i))throw M();return r=o>>>0,(t=2147483648&(i=t>>>0))&&(i=~i>>>0,0==(r=1+~r>>>0)&&(i=i+1>>>0)),r=4294967296*i+(r>>>0),gt(e,n,t?-r:r),!0}),(function(t,e,n){if(null!=(e=bt(e,n))&&null!=e){D(t.g,8*n),t=t.g;var r=e;for(n=0>r,e=(r=Math.abs(r))>>>0,r=Math.floor((r-e)/4294967296),r>>>=0,n&&(r=~r>>>0,4294967295<(e=1+(~e>>>0))&&(e=0,4294967295<++r&&(r=0))),n=z=e,e=r;0<e||127<n;)t.g.push(127&n|128),n=(n>>>7|e<<25)>>>0,e>>>=7;t.g.push(n)}})),ae=re((function(t,e,n){return 0===t.h&&(gt(e,n,O(t.g)),!0)}),(function(t,e,n){if(null!=(e=bt(e,n))&&null!=e)if(D(t.g,8*n),t=t.g,0<=(n=e))D(t,n);else{for(e=0;9>e;e++)t.g.push(127&n|128),n>>=7;t.g.push(1)}})),le=re((function(t,e,n){if(2!==t.h)return!1;var r,i=O(t.g)>>>0,o=(t=t.g).g;if(t.g+=i,P(t),t=t.h,S)(r=Y)||(r=Y=new TextDecoder("utf-8",{fatal:!0})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?x():(l=t[o++],194>a||128!=(192&l)?(o--,x()):c.push((31&a)<<6|63&l)):240>a?o>=i-1?x():128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,x()):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?x():128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,x()):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):x(),8192<=c.length&&(u=I(u,c),c.length=0);r=I(u,c)}return gt(e,n,r),!0}),(function(t,e,n){if(null!=(e=bt(e,n))){var r=!1;if(r=void 0!==r&&r,H){if(r&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(e))throw Error("Found an unpaired surrogate");e=(w||(w=new TextEncoder)).encode(e)}else{for(var i=0,o=new Uint8Array(3*e.length),a=0;a<e.length;a++){var l=e.charCodeAt(a);if(128>l)o[i++]=l;else{if(2048>l)o[i++]=l>>6|192;else{if(55296<=l&&57343>=l){if(56319>=l&&a<e.length){var s=e.charCodeAt(++a);if(56320<=s&&57343>=s){l=1024*(l-55296)+s-56320+65536,o[i++]=l>>18|240,o[i++]=l>>12&63|128,o[i++]=l>>6&63|128,o[i++]=63&l|128;continue}a--}if(r)throw Error("Found an unpaired surrogate");l=65533}o[i++]=l>>12|224,o[i++]=l>>6&63|128}o[i++]=63&l|128}}e=o.subarray(0,i)}D(t.g,8*n+2),D(t.g,e.length),rt(t,t.g.end()),rt(t,e)}})),se=re((function(t,e,n,r,i){if(2!==t.h)return!1;e=Gt(e,n,r),n=t.g.i,r=O(t.g)>>>0;var o=t.g.g+r,a=o-n;if(0>=a&&(t.g.i=o,i(e,t),a=o-t.g.g),a)throw Error("Message parsing ended unexpectedly. Expected to read "+r+" bytes, instead read "+(r-a)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.i=n,!0}),(function(t,e,n,r,i){if(null!=(e=vt(e,r,n)))for(r=0;r<e.length;r++){var o=t;D(o.g,8*n+2);var a=o.g.end();rt(o,a),a.push(o.h),o=a,i(e[r],t),a=t;var l=o.pop();for(l=a.h+a.g.length()-l;127<l;)o.push(127&l|128),l>>>=7,a.h++;o.push(l),a.h++}}));function ce(){St.apply(this,arguments)}if(m(ce,St),pt){var ue={};Object.defineProperties(ce,(ue[Symbol.hasInstance]=ft(Object[Symbol.hasInstance]),ue))}function de(t){ce.call(this,t)}function he(){return[1,ae,2,ie,3,le,4,le]}function me(t){ce.call(this,t,-1,fe)}function pe(){return[1,se,de,he]}m(de,ce),m(me,ce),me.prototype.addClassification=function(t,e){return Gt(this,1,de,t,e),this};var fe=[1];function be(t){ce.call(this,t)}function ge(){return[1,ie,2,ie,3,ie,4,ie,5,ie]}function ye(t){ce.call(this,t,-1,ve)}function Ze(){return[1,se,be,ge]}m(be,ce),m(ye,ce);var ve=[1];function Ge(t){ce.call(this,t)}function Xe(){return[1,ie,2,ie,3,ie,4,ie,5,ie,6,oe]}m(Ge,ce);var We=[[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]],Ve=[[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]],Re=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],xe=[[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]],Ie=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Ye=[[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]],we=[].concat(l(We),l(Ve),l(Re),l(xe),l(Ie),l(Ye));function Se(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function He(t){return vt(t,de,1).map((function(t){return{index:Xt(t,1),ga:Zt(t,2),label:null!=bt(t,3)?Wt(t,3):void 0,displayName:null!=bt(t,4)?Wt(t,4):void 0}}))}function Fe(t){return{x:Zt(t,1),y:Zt(t,2),z:Zt(t,3),visibility:null!=bt(t,4)?Zt(t,4):void 0}}function Le(t,e){this.h=t,this.g=e,this.l=0}function Ce(t,e,n){return function(t,e){var n=t.g;if(void 0===t.o){var r=Se(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=Se(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.o=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={K:n.getAttribLocation(r,"aVertex"),J:n.getAttribLocation(r,"aTex"),ma:i},t.u=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.u),n.enableVertexAttribArray(t.j.K),n.vertexAttribPointer(t.j.K,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.J),n.vertexAttribPointer(t.j.J,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.o),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.K),n.bindBuffer(n.ARRAY_BUFFER,t.u),n.vertexAttribPointer(r.K,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.J,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.K),n.disableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function Te(t){this.g=t}var ke=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(t,e){return e+t}function Ne(t,e){window[t]=e}function Ke(t){if(this.g=t,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=t&&t.locateFile||Je,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.$=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function Ue(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(m){switch(m.g){case 1:return t.Z?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(m,X((function(t){switch(t.g){case 1:return t.o=2,g(t,WebAssembly.instantiate(ke),4);case 4:t.g=3,t.o=0;break;case 2:return t.o=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})),2)):m.return();case 2:if(n=m.h,"object"==typeof window)return Ne("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),Ne("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=je(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.$)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,je(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(m,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.$)})),importScripts.apply(null,l(r)),i=t,g(m,createMediapipeSolutionsWasm(Module),6);case 6:i.h=m.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ja:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),m.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),m.return();t.G=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.Z=!1,m.g=0}}))}function je(t,e){var n,r;return X((function(i){return e in t.H?i.return(t.H[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.H[e]=r,i.return(r))}))}function ze(t,e,n){var r,i,o,l,s,c,u,d,h,m,p,f,b,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.I=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.u[e])||(r=new Le(t.h,t.G),t.u[e]=r),i.return(Ce(r,n,t.I))):i.return(void 0)}))}(t,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=te(v.get(R),Ge,Xe);x={boundingBox:{xCenter:Zt(x,1),yCenter:Zt(x,2),height:Zt(x,3),width:Zt(x,4),rotation:Zt(x,5,0),rectId:Xt(x,6)},landmarks:vt(te(G.get(R),ye,Ze),be,1).map(Fe),V:He(te(W.get(R),me,pe))},V.push(x)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===m){Z.g=3;break}if("float_list"===h.type){r[d]=m,Z.g=7;break}if("proto"===h.type){r[d]=m,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(p=t.u[d])||(p=new Le(t.h,t.G),t.u[d]=p),g(Z,Ce(p,m,t.I),13);case 13:f=Z.h,r[d]=f;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:b[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function Be(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.D=ze(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.D=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Me(t){var e=this;t=t||{};var n={url:"face_detection_short.binarypb"},r={type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}};this.g=new Ke({locateFile:t.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:n,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:"object"==typeof window&&void 0!==window.navigator&&("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(t){var i,o,l,s,c;return X((function(u){switch(u.g){case 1:i=a("short"===t?["face_detection_short_range.tflite"]:["face_detection_full_range_sparse.tflite"]),o=i.next();case 2:if(o.done){u.g=4;break}return l=o.value,s="third_party/mediapipe/modules/face_detection/"+l,g(u,je(e.g,l),5);case 5:c=u.h,e.g.overrideFile(s,c),o=i.next(),u.g=2;break;case 4:return n.url="short"===t?"face_detection_short.binarypb":"face_detection_full.binarypb",r.graphOptionXref.calculatorName="short"===t?"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator":"facedetectionfullrangegpu__facedetectionfullrangecommon__TensorsToDetectionsCalculator",u.return(!0)}}))}},minDetectionConfidence:r}})}(t=Ke.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.o={},t.u={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={R:o.R,S:o.S},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.R=s.onChange,o.S=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.R(t.S),2);!0===e.h&&(n.s=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.s=!0,this.B=(void 0===this.B?[]:this.B).concat(i),this.A=(void 0===this.A?[]:this.A).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,Ue(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.Y===t.g.graph.url?u.return():(t.s=!0,t.g.graph&&t.g.graph.url?(t.Y=t.g.graph.url,g(u,je(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.C)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.C[i]);if(t.C={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Be(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.s)return s.return();if(!t.A){s.g=2;break}e=a(t.A),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.B),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.B=void 0}t.s=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.C[t]=e},t.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(m){switch(m.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(m,h.D,2)):m.return();case 2:return g(m,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var p=t[l];switch(s.type){case"video":var f=h.o[s.stream];if(f||(f=new Le(h.h,h.G),h.o[s.stream]=f),0===f.l&&(f.l=f.h.createTexture()),typeof HTMLVideoElement<"u"&&p instanceof HTMLVideoElement)var b=p.videoWidth,y=p.videoHeight;else typeof HTMLImageElement<"u"&&p instanceof HTMLImageElement?(b=p.naturalWidth,y=p.naturalHeight):(b=p.width,y=p.height);y={glName:f.l,width:b,height:y},(b=f.g).canvas.width=y.width,b.canvas.height=y.height,b.activeTexture(b.TEXTURE0),f.h.bindTexture2d(f.l),b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,p),f.h.bindTexture2d(0),f=y;break t;case"detections":for((f=h.o[s.stream])||(f=new Te(h.h),h.o[s.stream]=f),f.data||(f.data=new f.g.DetectionListData),f.data.reset(p.length),y=0;y<p.length;++y){b=p[y];var Z=f.data,v=Z.setBoundingBox,G=y,X=b.boundingBox,W=new Ge;if(gt(W,1,X.xCenter),gt(W,2,X.yCenter),gt(W,3,X.height),gt(W,4,X.width),gt(W,5,X.rotation),gt(W,6,X.rectId),X=ne(W,Xe),v.call(Z,G,X),b.landmarks)for(Z=0;Z<b.landmarks.length;++Z){var V=!!(W=b.landmarks[Z]).visibility;G=(v=f.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),gt(V=new be,1,W.x),gt(V,2,W.y),gt(V,3,W.z),W.visibility&&gt(V,4,W.visibility),W=ne(V,ge),G.call(v,X,W)}if(b.V)for(Z=0;Z<b.V.length;++Z)G=(v=f.data).addClassification,X=y,W=b.V[Z],gt(V=new de,2,W.ga),W.index&&gt(V,1,W.index),W.label&&gt(V,3,W.label),W.displayName&&gt(V,4,W.displayName),W=ne(V,he),G.call(v,X,W)}f=f.data;break t;default:f={}}}switch(c=f,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(m,h.D,4);case 4:r.delete(),m.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",Ke),R("OptionType",{BOOL:0,NUMBER:1,ia:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=Me.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return X((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},R("FaceDetection",Me),R("FACEDETECTION_LIPS",We),R("FACEDETECTION_LEFT_EYE",Ve),R("FACEDETECTION_LEFT_EYEBROW",Re),R("FACEDETECTION_RIGHT_EYE",xe),R("FACEDETECTION_RIGHT_EYEBROW",Ie),R("FACEDETECTION_FACE_OVAL",Ye),R("FACEDETECTION_CONTOURS",we),R("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]]),R("VERSION","0.4.1646425229")}).call(gi);const Zi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ea=e.prototype}function p(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function f(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={U:e,V:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new p,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.V)throw e.U;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return f(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return f(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){f(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t,e){return e=new G(new y(e)),h&&t.prototype&&h(e,t.prototype),e}p.prototype.o=function(t){this.h=t},p.prototype.return=function(t){this.j={return:t},this.g=this.s};var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.C),reject:t(this.l)}},e.prototype.C=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.F(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.u(t):this.m(t)}},e.prototype.u=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.G(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.D(),this.A()},e.prototype.D=function(){var t=this;o((function(){if(t.B()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.B=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.A=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.F=function(t){var e=this.j();t.J(e.resolve,e.reject)},e.prototype.G=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.J(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.J=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).J(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).J(o(a.length-1),e),r=n.next()}while(!r.done)}))},e})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var I,Y,w=typeof TextDecoder<"u",S=typeof TextEncoder<"u";function H(t){if(S)t=(Y||(Y=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var F={},L=null;function C(t,e){void 0===e&&(e=0),k(),e=F[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function T(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=L[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}k();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function k(){if(!L){L={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));F[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===L[o]&&(L[o]=i)}}}}var J,N="function"==typeof Uint8Array.prototype.slice;function K(t,e,n){return e===n?J||(J=new Uint8Array(0)):N?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var U=0;function j(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.j=this.l=0,this.m=!1,this.v=e,t&&z(this,t)}function z(t,e){e=e.constructor===Uint8Array?e:e.constructor===ArrayBuffer||e.constructor===Array?new Uint8Array(e):e.constructor===String?T(e):e instanceof Uint8Array?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(0),t.h=e,t.l=0,t.j=t.h.length,t.g=t.l}function B(t){for(var e=128,n=0,r=0,i=0;4>i&&128<=e;i++)n|=(127&(e=t.h[t.g++]))<<7*i;if(128<=e&&(n|=(127&(e=t.h[t.g++]))<<28,r|=(127&e)>>4),128<=e)for(i=0;5>i&&128<=e;i++)r|=(127&(e=t.h[t.g++]))<<7*i+3;if(128>e)return t=n>>>0,(r=2147483648&(e=r>>>0))&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),t=4294967296*e+(t>>>0),r?-t:t;t.m=!0}j.prototype.reset=function(){this.g=this.l},j.prototype.i=function(){var t=this.h,e=t[this.g],n=127&e;return 128>e?(this.g+=1,n):(n|=(127&(e=t[this.g+1]))<<7,128>e?(this.g+=2,n):(n|=(127&(e=t[this.g+2]))<<14,128>e?(this.g+=3,n):(n|=(127&(e=t[this.g+3]))<<21,128>e?(this.g+=4,n):(n|=(15&(e=t[this.g+4]))<<28,128>e?(this.g+=5,n>>>0):(this.g+=5,128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&this.g++,n)))))},j.prototype.o=function(){var t=this.h[this.g],e=this.h[this.g+1],n=this.h[this.g+2],r=this.h[this.g+3];return this.g+=4,t=2*((n=(t<<0|e<<8|n<<16|r<<24)>>>0)>>31)+1,e=n>>>23&255,n&=8388607,255==e?n?NaN:1/0*t:0==e?t*Math.pow(2,-149)*n:t*Math.pow(2,e-150)*(n+Math.pow(2,23))};var M=[];function E(){this.g=new Uint8Array(64),this.h=0}function A(t,e){for(;127<e;)t.push(127&e|128),e>>>=7;t.push(e)}function P(t){var e={},n=void 0!==e.N&&e.N;this.o={v:void 0!==e.v&&e.v},this.N=n,e=this.o,M.length?(n=M.pop(),e&&(n.v=e.v),t&&z(n,t),t=n):t=new j(t,e),this.g=t,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}function O(t){var e=t.g;if((e=e.g==e.j)||(e=t.j)||(e=(e=t.g).m||0>e.g||e.g>e.j),e)return!1;t.m=t.g.g;var n=7&(e=t.g.i());return 0!=n&&5!=n&&1!=n&&2!=n&&3!=n&&4!=n?(t.j=!0,!1):(t.i=e,t.l=e>>>3,t.h=n,!0)}function Q(t){switch(t.h){case 0:if(0!=t.h)Q(t);else{for(t=t.g;128&t.h[t.g];)t.g++;t.g++}break;case 1:1!=t.h?Q(t):(t=t.g).g+=8;break;case 2:if(2!=t.h)Q(t);else{var e=t.g.i();(t=t.g).g+=e}break;case 5:5!=t.h?Q(t):(t=t.g).g+=4;break;case 3:for(e=t.l;;){if(!O(t)){t.j=!0;break}if(4==t.h){t.l!=e&&(t.j=!0);break}Q(t)}break;default:t.j=!0}}function _(t,e,n){var r=t.g.j,i=t.g.i(),o=t.g.g+i;if(t.g.j=o,n(e,t),0!==(n=o-t.g.g))throw Error("Message parsing ended unexpectedly. Expected to read "+i+" bytes, instead read "+(i-n)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.j=r,e}function D(t){return t.g.o()}function q(t){var e,n=t.g.i(),r=(t=t.g).g;if(t.g+=n,t=t.h,w)(e=I)||(e=I=new TextDecoder("utf-8",{fatal:!1})),e=e.decode(t.subarray(r,r+n));else{n=r+n;for(var i,o,a,l=[],s=null;r<n;)128>(i=t[r++])?l.push(i):224>i?r>=n?l.push(65533):(o=t[r++],194>i||128!=(192&o)?(r--,l.push(65533)):l.push((31&i)<<6|63&o)):240>i?r>=n-1?l.push(65533):128!=(192&(o=t[r++]))||224===i&&160>o||237===i&&160<=o||128!=(192&(e=t[r++]))?(r--,l.push(65533)):l.push((15&i)<<12|(63&o)<<6|63&e):244>=i?r>=n-2?l.push(65533):128!=(192&(o=t[r++]))||o-144+(i<<28)>>30!=0||128!=(192&(e=t[r++]))||128!=(192&(a=t[r++]))?(r--,l.push(65533)):(i=(7&i)<<18|(63&o)<<12|(63&e)<<6|63&a,i-=65536,l.push(55296+(i>>10&1023),56320+(1023&i))):l.push(65533),8192<=l.length&&(s=x(s,l),l.length=0);e=x(s,l)}return e}function $(t,e,n){var r=t.g.i();for(r=t.g.g+r;t.g.g<r;)n.push(e.call(t.g))}function tt(t,e){2==t.h?$(t,j.prototype.o,e):e.push(D(t))}function et(){this.h=[],this.i=0,this.g=new E}function nt(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function rt(t){var e=t.i+t.g.length();if(0===e)return new Uint8Array(0);e=new Uint8Array(e);for(var n=t.h,r=n.length,i=0,o=0;o<r;o++){var a=n[o];0!==a.length&&(e.set(a,i),i+=a.length)}return 0!==(r=(n=t.g).h)&&(e.set(n.g.subarray(0,r),i),n.h=0),t.h=[e],e}function it(t,e,n){if(null!=n){A(t.g,8*e+5),t=t.g;var r=n;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?U=0:(0,U=2147483648):isNaN(r)?(0,U=2147483647):34028234663852886e22<r?(0,U=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,U=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,U=(n<<31|e+127<<23|8388607&r)>>>0),n=U,t.push(n>>>0&255),t.push(n>>>8&255),t.push(n>>>16&255),t.push(n>>>24&255)}}E.prototype.push=function(t){if(!(this.h+1<this.g.length)){var e=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(e)}this.g[this.h++]=t},E.prototype.length=function(){return this.h},E.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,K(t,0,e)},P.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};var ot="function"==typeof Uint8Array;function at(t,e,n){if(null!=t)return"object"==typeof t?ot&&t instanceof Uint8Array?n(t):lt(t,e,n):e(t)}function lt(t,e,n){if(Array.isArray(t)){for(var r=Array(t.length),i=0;i<t.length;i++)r[i]=at(t[i],e,n);return Array.isArray(t)&&t.W&&dt(r),r}for(i in r={},t)r[i]=at(t[i],e,n);return r}function st(t){return"number"==typeof t?isFinite(t)?t:String(t):t}var ct,ut={W:{value:!0,configurable:!0}};function dt(t){return Array.isArray(t)&&!Object.isFrozen(t)&&Object.defineProperties(t,ut),t}function ht(t,e,n){var r=ct;if(ct=null,t||(t=r),r=this.constructor.ca,t||(t=r?[r]:[]),this.j=r?0:-1,this.m=this.g=null,this.h=t,t=(r=this.h.length)-1,!r||(null===(r=this.h[t])||"object"!=typeof r||Array.isArray(r)||ot&&r instanceof Uint8Array)?void 0!==e&&-1<e?(this.l=Math.max(e,t+1-this.j),this.i=null):this.l=Number.MAX_VALUE:(this.l=t-this.j,this.i=r),n)for(e=0;e<n.length;e++)(t=n[e])<this.l?(t+=this.j,(r=this.h[t])?dt(r):this.h[t]=mt):(pt(this),(r=this.i[t])?dt(r):this.i[t]=mt)}var mt=Object.freeze(dt([]));function pt(t){var e=t.l+t.j;t.h[e]||(t.i=t.h[e]={})}function ft(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.l?t.i?t.i[e]:void 0:t.h[e+t.j]}function bt(t,e){var n=void 0!==n&&n,r=ft(t,e,n);return null==r&&(r=mt),r===mt&&vt(t,e,r=dt([]),n),r}function gt(t){var e=bt(t,3);if(t.m||(t.m={}),!t.m[3]){for(var n=0;n<e.length;n++)e[n]=+e[n];t.m[3]=!0}return e}function yt(t,e,n){return null==(t=ft(t,e))?n:t}function Zt(t,e,n){return null==(t=null==(t=ft(t,e))?t:+t)?void 0===n?0:n:t}function vt(t,e,n,r){void 0!==r&&r||e>=t.l?(pt(t),t.i[e]=n):t.h[e+t.j]=n}function Gt(t,e,n){if(-1===n)return null;if(t.g||(t.g={}),!t.g[n]){var r=ft(t,n,!1);r&&(t.g[n]=new e(r))}return t.g[n]}function Xt(t,e){t.g||(t.g={});var n=t.g[1];if(!n){var r=bt(t,1);n=[];for(var i=0;i<r.length;i++)n[i]=new e(r[i]);t.g[1]=n}return n}function Wt(t,e,n){var r=void 0!==r&&r;t.g||(t.g={});var i=n&&Rt(n);t.g[e]=n,vt(t,e,i,r)}function Vt(t,e,n,r){var i=Xt(t,n);e=e||new n,t=bt(t,1),null!=r?(i.splice(r,0,e),t.splice(r,0,Rt(e))):(i.push(e),t.push(Rt(e)))}function Rt(t,e){if(t.g)for(var n in t.g){var r=t.g[n];if(Array.isArray(r))for(var i=0;i<r.length;i++)r[i]&&Rt(r[i]);else r&&Rt(r)}return t.h}function xt(t,e){if(t=t.o){nt(e,e.g.end());for(var n=0;n<t.length;n++)nt(e,t[n])}}function It(t,e){if(4==e.h)return!1;var n=e.m;return Q(e),e.N||(e=K(e.g.h,n,e.g.g),(n=t.o)?n.push(e):t.o=[e]),!0}function Yt(t){ht.call(this,t,-1,St)}function wt(t,e){for(;O(e);)switch(e.i){case 8:var n=e.g.i();vt(t,1,n);break;case 16:vt(t,2,n=e.g.i());break;case 29:case 26:tt(e,t.getPackedDataList());break;case 32:vt(t,4,n=B(e.g));break;default:if(!It(t,e))return t}return t}ht.prototype.toJSON=function(){return lt(Rt(this),st,C)},ht.prototype.toString=function(){return Rt(this).toString()},m(Yt,ht),Yt.prototype.getRows=function(){return ft(this,1)},Yt.prototype.getCols=function(){return ft(this,2)},Yt.prototype.getPackedDataList=function(){return gt(this)},Yt.prototype.getLayout=function(){return yt(this,4,0)};var St=[3];function Ht(t,e){var n=void 0;return new(n||(n=Promise))((function(r,i){function o(t){try{l(e.next(t))}catch(t){i(t)}}function a(t){try{l(e.throw(t))}catch(t){i(t)}}function l(t){t.done?r(t.value):new n((function(e){e(t.value)})).then(o,a)}l((e=e.apply(t,void 0)).next())}))}function Ft(t){ht.call(this,t)}function Lt(t,e){for(;O(e);)switch(e.i){case 8:var n=e.g.i();vt(t,1,n);break;case 21:vt(t,2,n=D(e));break;case 26:vt(t,3,n=q(e));break;case 34:vt(t,4,n=q(e));break;default:if(!It(t,e))return t}return t}function Ct(t){ht.call(this,t,-1,Tt)}m(Ft,ht),m(Ct,ht),Ct.prototype.addClassification=function(t,e){return Vt(this,t,Ft,e),this};var Tt=[1];function kt(t){ht.call(this,t)}function Jt(t,e){for(;O(e);)switch(e.i){case 13:var n=D(e);vt(t,1,n);break;case 21:vt(t,2,n=D(e));break;case 29:vt(t,3,n=D(e));break;case 37:vt(t,4,n=D(e));break;case 45:vt(t,5,n=D(e));break;default:if(!It(t,e))return t}return t}function Nt(t){ht.call(this,t,-1,Ut)}function Kt(t){t:{var e=new Nt;for(t=new P(t);O(t);)if(10===t.i){Vt(e,_(t,new kt,Jt),kt,void 0)}else if(!It(e,t))break t}return e}m(kt,ht),m(Nt,ht);var Ut=[1];function jt(t){ht.call(this,t)}function zt(t){ht.call(this,t,-1,Mt)}function Bt(t,e){for(;O(e);)switch(e.i){case 8:var n=B(e.g);vt(t,1,n);break;case 16:vt(t,2,n=B(e.g));break;case 29:case 26:tt(e,t.getVertexBufferList());break;case 32:case 34:n=e;var r=t.getIndexBufferList();2==n.h?$(n,j.prototype.i,r):r.push(n.g.i());break;default:if(!It(t,e))return t}return t}m(jt,ht),m(zt,ht),zt.prototype.getVertexType=function(){return yt(this,1,0)},zt.prototype.getPrimitiveType=function(){return yt(this,2,0)},zt.prototype.getVertexBufferList=function(){return gt(this)},zt.prototype.getIndexBufferList=function(){return bt(this,4)};var Mt=[3,4];function Et(t){ht.call(this,t)}function At(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Pt(t){return Xt(t,Ft).map((function(t){return{index:yt(t,1,0),Y:Zt(t,2),label:null!=ft(t,3)?yt(t,3,""):void 0,displayName:null!=ft(t,4)?yt(t,4,""):void 0}}))}function Ot(t){return{x:Zt(t,1),y:Zt(t,2),z:Zt(t,3),visibility:null!=ft(t,4)?Zt(t,4):void 0}}function Qt(t,e){this.h=t,this.g=e,this.l=0}function _t(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=At(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=At(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={I:n.getAttribLocation(r,"aVertex"),H:n.getAttribLocation(r,"aTex"),da:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.H),n.vertexAttribPointer(t.j.H,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.H,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.I),n.disableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function Dt(t){this.g=t}m(Et,ht),Et.prototype.getMesh=function(){return Gt(this,zt,1)},Et.prototype.getPoseTransformMatrix=function(){return Gt(this,Yt,2)};var qt=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 $t(t,e){return e+t}function te(t,e){window[t]=e}function ee(t){if(this.g=t,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=t&&t.locateFile||$t,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.S=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function ne(t){return Ht(t,(function t(){var e,n,r,i,o,a,s,c,u,d,h,m=this;return X(t,(function(t){switch(t.g){case 1:return e=m,m.R?(n=function(t,e){return void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(e):t.g.files}(m,m.j),g(t,function(){return Ht(this,(function t(){return X(t,(function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(qt),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)}}))}))}(),2)):t.return();case 2:if(r=t.h,"object"==typeof window)return te("createMediapipeSolutionsWasm",{locateFile:m.locateFile}),te("createMediapipeSolutionsPackedAssets",{locateFile:m.locateFile}),a=n.filter((function(t){return void 0!==t.data})),s=n.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(t){var n=re(e,t.url);if(void 0!==t.path){var r=t.path;n=n.then((function(t){return e.overrideFile(r,t),Promise.resolve(t)}))}return n}))),u=Promise.all(s.map((function(t){return void 0===t.simd||t.simd&&r||!t.simd&&!r?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(e.locateFile(t.url,e.S)):Promise.resolve()}))).then((function(){return Ht(e,(function t(){var e,n,r=this;return X(t,(function(t){if(1==t.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,g(t,e(n),2);r.h=t.h,t.g=0}))}))})),d=Ht(e,(function t(){var e=this;return X(t,(function(t){return e.g.graph&&e.g.graph.url?t=g(t,re(e,e.g.graph.url),0):(t.g=0,t=void 0),t}))})),g(t,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return i=n.filter((function(t){return void 0===t.simd||t.simd&&r||!t.simd&&!r})).map((function(t){return e.locateFile(t.url,e.S)})),importScripts.apply(null,l(i)),g(t,createMediapipeSolutionsWasm(Module),6);case 6:m.h=t.h,m.l=new OffscreenCanvas(1,1),m.h.canvas=m.l,o=m.h.GL.createContext(m.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),m.h.GL.makeContextCurrent(o),t.g=4;break;case 7:if(m.l=document.createElement("canvas"),!(h=m.l.getContext("webgl2",{}))&&!(h=m.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),t.return();m.D=h,m.h.canvas=m.l,m.h.createContext(m.l,!0,!0,{});case 4:m.i=new m.h.SolutionWasm,m.R=!1,t.g=0}}))}))}function re(t,e){return Ht(t,(function t(){var n,r,i=this;return X(t,(function(t){return e in i.F?t.return(i.F[e]):(n=i.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),i.F[e]=r,t.return(r))}))}))}function ie(t,e,n){return Ht(t,(function t(){var r,i,o,l,s,c,u,d,h,m,p,f,b,y,Z=this;return X(t,(function(t){switch(t.g){case 1:if(!n)return t.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(Z.G=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){t.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(t,function(t,e,n){return Ht(t,(function t(){var r,i=this;return X(t,(function(t){return"number"==typeof n||n instanceof Uint8Array||n instanceof i.h.Uint8BlobList?t.return(n):n instanceof i.h.Texture2dDataOut?((r=i.s[e])||(r=new Qt(i.h,i.D),i.s[e]=r),t.return(_t(r,n,i.G))):t.return(void 0)}))}))}(Z,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=v.get(R);t:{var I=new jt;for(x=new P(x);O(x);)switch(x.i){case 13:var Y=D(x);vt(I,1,Y);break;case 21:vt(I,2,Y=D(x));break;case 29:vt(I,3,Y=D(x));break;case 37:vt(I,4,Y=D(x));break;case 45:vt(I,5,Y=D(x));break;case 48:vt(I,6,Y=B(x.g));break;default:if(!It(I,x))break t}}I={Z:Zt(I,1),$:Zt(I,2),height:Zt(I,3),width:Zt(I,4),rotation:Zt(I,5,0),X:yt(I,6,0)},x=Xt(Kt(G.get(R)),kt).map(Ot);var w=W.get(R);t:for(Y=new Ct,w=new P(w);O(w);)if(10===w.i)Y.addClassification(_(w,new Ft,Lt));else if(!It(Y,w))break t;I={T:I,O:x,M:Pt(Y)},V.push(I)}v=V}else v=[];r[d]=v,t.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,t.g=7;break}if(void 0===m){t.g=3;break}if("float_list"===h.type){r[d]=m,t.g=7;break}if("proto"===h.type){r[d]=m,t.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(p=Z.s[d])||(p=new Qt(Z.h,Z.D),Z.s[d]=p),g(t,_t(p,m,Z.G),13);case 13:f=t.h,r[d]=f;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),t.g=3;break;case 14:b[y]=t.h;case 3:l=u.next(),t.g=2;break;case 4:return t.return(r)}}))}))}function oe(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.C=ie(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.C=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function ae(t){t=function(t){t:{var e=new Et;for(t=new P(t);O(t);)switch(t.i){case 10:var n=_(t,new zt,Bt);Wt(e,1,n);break;case 18:Wt(e,2,n=_(t,new Yt,wt));break;default:if(!It(e,t))break t}}return e}(t);var e=t.getMesh();if(!e)return t;var n=new Float32Array(e.getVertexBufferList());e.getVertexBufferList=function(){return n};var r=new Uint32Array(e.getIndexBufferList());return e.getIndexBufferList=function(){return r},t}(t=ee.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){return Ht(this,(function t(){var e=this;return X(t,(function(t){e.i&&(e.i.reset(),e.m={},e.s={}),t.g=0}))}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={K:o.K,L:o.L},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.K=s.onChange,o.L=t[c],r.push(function(t){return function(){return Ht(n,(function e(){var n=this;return X(e,(function(e){if(1==e.g)return g(e,t.K(t.L),2);!0===e.h&&(n.o=!0),e.g=0}))}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.A=(void 0===this.A?[]:this.A).concat(i),this.u=(void 0===this.u?[]:this.u).concat(r))}},t.initialize=function(){return Ht(this,(function t(){var e=this;return X(t,(function(t){return 1==t.g?g(t,ne(e),2):3!=t.g?g(t,function(t){return Ht(t,(function t(){var e,n,r,i,o,l,s,c,u=this;return X(t,(function(t){if(1==t.g)return u.g.graph&&u.g.graph.url&&u.P===u.g.graph.url?t.return():(u.o=!0,u.g.graph&&u.g.graph.url?(u.P=u.g.graph.url,g(t,re(u,u.g.graph.url),3)):void(t.g=2));for(2!=t.g&&(e=t.h,u.i.loadGraph(e)),n=a(Object.keys(u.B)),r=n.next();!r.done;r=n.next())i=r.value,u.i.overrideFile(i,u.B[i]);if(u.B={},u.g.listeners)for(o=a(u.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,oe(u,s);c=u.j,u.j={},u.setOptions(c),t.g=0}))}))}(e),3):g(t,function(t){return Ht(t,(function t(){var e,n,r,i,o,l,s=this;return X(t,(function(t){switch(t.g){case 1:if(!s.o)return t.return();if(!s.u){t.g=2;break}e=a(s.u),n=e.next();case 3:if(n.done){t.g=5;break}return g(t,(0,n.value)(),4);case 4:n=e.next(),t.g=3;break;case 5:s.u=void 0;case 2:if(s.A){for(r=new s.h.GraphOptionChangeRequestList,i=a(s.A),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);s.i.changeOptions(r),r.delete(),s.A=void 0}s.o=!1,t.g=0}}))}))}(e),0)}))}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.B[t]=e},t.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){return Ht(this,(function n(){var r,i,o,l,s,c,u,d,h,m=this;return X(n,(function(n){switch(n.g){case 1:return m.g.inputs?(r=1e3*(null==e?performance.now():e),g(n,m.C,2)):n.return();case 2:return g(n,m.initialize(),3);case 3:for(i=new m.h.PacketDataList,o=a(Object.keys(t)),l=o.next();!l.done;l=o.next())if(s=l.value,c=m.g.inputs[s]){t:{var p=m,f=t[s];switch(c.type){case"video":var b=p.m[c.stream];if(b||(b=new Qt(p.h,p.D),p.m[c.stream]=b),0===(p=b).l&&(p.l=p.h.createTexture()),typeof HTMLVideoElement<"u"&&f instanceof HTMLVideoElement){var y=f.videoWidth;b=f.videoHeight}else typeof HTMLImageElement<"u"&&f instanceof HTMLImageElement?(y=f.naturalWidth,b=f.naturalHeight):(y=f.width,b=f.height);b={glName:p.l,width:y,height:b},(y=p.g).canvas.width=b.width,y.canvas.height=b.height,y.activeTexture(y.TEXTURE0),p.h.bindTexture2d(p.l),y.texImage2D(y.TEXTURE_2D,0,y.RGBA,y.RGBA,y.UNSIGNED_BYTE,f),p.h.bindTexture2d(0),p=b;break t;case"detections":for((b=p.m[c.stream])||(b=new Dt(p.h),p.m[c.stream]=b),(p=b).data||(p.data=new p.g.DetectionListData),p.data.reset(f.length),b=0;b<f.length;++b){y=f[b];var Z=p.data,v=Z.setBoundingBox,G=b,X=y.T,W=new jt;vt(W,1,X.Z),vt(W,2,X.$),vt(W,3,X.height),vt(W,4,X.width),vt(W,5,X.rotation),vt(W,6,X.X);var V=X=new et;it(V,1,ft(W,1)),it(V,2,ft(W,2)),it(V,3,ft(W,3)),it(V,4,ft(W,4)),it(V,5,ft(W,5));var R=ft(W,6);if(null!=R&&null!=R){A(V.g,48);var x=V.g,I=R;R=0>I;var Y=(I=Math.abs(I))>>>0;for(I=Math.floor((I-Y)/4294967296),I>>>=0,R&&(I=~I>>>0,4294967295<(Y=1+(~Y>>>0))&&(Y=0,4294967295<++I&&(I=0))),R=U=Y,Y=I;0<Y||127<R;)x.push(127&R|128),R=(R>>>7|Y<<25)>>>0,Y>>>=7;x.push(R)}if(xt(W,V),X=rt(X),v.call(Z,G,X),y.O)for(Z=0;Z<y.O.length;++Z)V=!!(W=y.O[Z]).visibility,G=(v=p.data).addNormalizedLandmark,X=b,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),vt(V=new kt,1,W.x),vt(V,2,W.y),vt(V,3,W.z),W.visibility&&vt(V,4,W.visibility),it(x=W=new et,1,ft(V,1)),it(x,2,ft(V,2)),it(x,3,ft(V,3)),it(x,4,ft(V,4)),it(x,5,ft(V,5)),xt(V,x),W=rt(W),G.call(v,X,W);if(y.M)for(Z=0;Z<y.M.length;++Z){if(G=(v=p.data).addClassification,X=b,W=y.M[Z],vt(V=new Ft,2,W.Y),W.index&&vt(V,1,W.index),W.label&&vt(V,3,W.label),W.displayName&&vt(V,4,W.displayName),x=W=new et,null!=(Y=ft(V,1))&&null!=Y)if(A(x.g,8),R=x.g,0<=Y)A(R,Y);else{for(I=0;9>I;I++)R.push(127&Y|128),Y>>=7;R.push(1)}it(x,2,ft(V,2)),null!=(R=ft(V,3))&&(R=H(R),A(x.g,26),A(x.g,R.length),nt(x,x.g.end()),nt(x,R)),null!=(R=ft(V,4))&&(R=H(R),A(x.g,34),A(x.g,R.length),nt(x,x.g.end()),nt(x,R)),xt(V,x),W=rt(W),G.call(v,X,W)}}p=p.data;break t;default:p={}}}switch(u=p,d=c.stream,c.type){case"video":i.pushTexture2d(Object.assign(Object.assign({},u),{stream:d,timestamp:r}));break;case"detections":(h=u).stream=d,h.timestamp=r,i.pushDetectionList(h);break;default:throw Error("Unknown input config type: '"+c.type+"'")}}return m.i.send(i),g(n,m.C,4);case 4:i.delete(),n.g=0}}))}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",ee),R("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});var le={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(t){return t.map(ae)}},multiFaceLandmarks:{type:"proto_list",stream:"multi_face_landmarks",transform:function(t){return t.map((function(t){return Xt(Kt(t),kt).map(Ot)}))}}}}],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"}}}},se=[[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]],ce=[[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]],ue=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],de=[[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]],he=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],me=[[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]],pe=[].concat(l(se),l(ce),l(ue),l(de),l(he),l(me));function fe(t){t=t||{},t=Object.assign(Object.assign({},le),t),this.g=new ee(t)}(t=fe.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){return Ht(this,(function t(){var e=this;return X(t,(function(t){return g(t,e.g.initialize(),0)}))}))},t.reset=function(){this.g.reset()},t.send=function(t){return Ht(this,(function e(){var n=this;return X(e,(function(e){return g(e,n.g.send(t),0)}))}))},t.setOptions=function(t){this.g.setOptions(t)},R("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}}),R("FaceMesh",fe),R("FACEMESH_LIPS",se),R("FACEMESH_LEFT_EYE",ce),R("FACEMESH_LEFT_EYEBROW",ue),R("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),R("FACEMESH_RIGHT_EYE",de),R("FACEMESH_RIGHT_EYEBROW",he),R("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),R("FACEMESH_FACE_OVAL",me),R("FACEMESH_CONTOURS",pe),R("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]]),R("matrixDataToMatrix",(function(t){for(var e=t.getCols(),n=t.getRows(),r=t.getPackedDataList(),i=[],o=0;o<n;o++)i.push(Array(e));for(o=0;o<n;o++)for(var a=0;a<e;a++){var l=1===t.getLayout()?o*e+a:a*n+o;i[o][a]=r[l]}return i})),R("VERSION","0.4.1633559619")}).call(Zi);const vi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ka=e.prototype}function p(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function f(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={V:e,X:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new p,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.X)throw e.V;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return f(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return f(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){f(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}p.prototype.o=function(t){this.h=t},p.prototype.return=function(t){this.j={return:t},this.g=this.s},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.D),reject:t(this.l)}},e.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.G(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.A(t):this.m(t)}},e.prototype.A=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.H(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.F(),this.B()},e.prototype.F=function(){var t=this;o((function(){if(t.C()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.C=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.B=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.G=function(t){var e=this.j();t.K(e.resolve,e.reject)},e.prototype.H=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.K(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.K=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).K(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).K(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(t){throw t}function I(t,e){x(Error("Invalid wire type: "+t+" (at position "+e+")"))}function Y(){x(Error("Failed to read varint, encoding is invalid."))}function w(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var S,H,F=typeof TextDecoder<"u",L=typeof TextEncoder<"u";function C(t){if(L)t=(H||(H=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var T={},k=null;function J(t){var e;void 0===e&&(e=0),K(),e=T[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function N(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=k[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}K();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function K(){if(!k){k={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));T[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===k[o]&&(k[o]=i)}}}}var U,j="function"==typeof Uint8Array;function z(t){if(this.g=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}var B="function"==typeof Uint8Array.prototype.slice;function M(t,e,n){return e===n?U||(U=new Uint8Array(0)):B?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var E=0;function A(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.v=e,t&&P(this,t)}function P(t,e){t.h=function(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 N(t);if(t.constructor===z){if(null==t.g)var e=U||(U=new Uint8Array(0));else{e=Uint8Array;var n=t.g;n=null==n||j&&null!=n&&n instanceof Uint8Array?n:"string"==typeof n?N(n):null,e=new e(t=t.g=n)}return e}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")}(e),t.l=0,t.i=t.h.length,t.g=t.l}function O(t){for(var e=128,n=0,r=0,i=0;4>i&&128<=e;i++)n|=(127&(e=t.h[t.g++]))<<7*i;if(128<=e&&(n|=(127&(e=t.h[t.g++]))<<28,r|=(127&e)>>4),128<=e)for(i=0;5>i&&128<=e;i++)r|=(127&(e=t.h[t.g++]))<<7*i+3;if(128>e)return t=n>>>0,(r=2147483648&(e=r>>>0))&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),t=4294967296*e+(t>>>0),r?-t:t;t.j=!0,Y()}function Q(t){t.g>t.i&&(t.j=!0,x(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}function _(t){var e=t.h,n=e[t.g],r=127&n;return 128>n?(t.g+=1,Q(t),r):(r|=(127&(n=e[t.g+1]))<<7,128>n?(t.g+=2,Q(t),r):(r|=(127&(n=e[t.g+2]))<<14,128>n?(t.g+=3,Q(t),r):(r|=(127&(n=e[t.g+3]))<<21,128>n?(t.g+=4,Q(t),r):(r|=(15&(n=e[t.g+4]))<<28,128>n?(t.g+=5,Q(t),r>>>0):(t.g+=5,128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]?(t.j=!0,Y(),r):(Q(t),r))))))}function D(t){var e=t.h[t.g],n=t.h[t.g+1],r=t.h[t.g+2],i=t.h[t.g+3];return t.g+=4,Q(t),(e<<0|n<<8|r<<16|i<<24)>>>0}A.prototype.reset=function(){this.g=this.l},A.prototype.m=function(){var t=D(this),e=2*(t>>31)+1,n=t>>>23&255;return t&=8388607,255==n?t?NaN:1/0*e:0==n?e*Math.pow(2,-149)*t:e*Math.pow(2,n-150)*(t+Math.pow(2,23))};var q=[];function $(){this.g=new Uint8Array(64),this.h=0}function tt(t,e){if(!(t.h+1<t.g.length)){var n=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(n)}t.g[t.h++]=e}function et(t,e){for(;127<e;)tt(t,127&e|128),e>>>=7;tt(t,e)}function nt(t){var e={},n=void 0!==e.O&&e.O;this.m={v:void 0!==e.v&&e.v},this.O=n,e=this.m,q.length?(n=q.pop(),e&&(n.v=e.v),t&&P(n,t),t=n):t=new A(t,e),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}function rt(t){var e=t.g;if((e=e.g==e.i)||(e=t.j)||(e=(e=t.g).j||0>e.g||e.g>e.i),e)return!1;t.l=t.g.g;var n=_(t.g);return e=n>>>3,0<=(n&=7)&&5>=n?(t.i=e,t.h=n,!0):(t.j=!0,I(n,t.l),!1)}function it(t){switch(t.h){case 0:if(0!=t.h)it(t);else t:{for(var e=(t=t.g).g,n=0;10>n;n++){if(0==(128&t.h[e])){t.g=e+1,Q(t);break t}e++}t.j=!0,Y()}break;case 1:(t=t.g).g+=8,Q(t);break;case 2:2!=t.h?it(t):(e=_(t.g),(t=t.g).g+=e,Q(t));break;case 5:(t=t.g).g+=4,Q(t);break;case 3:for(e=t.i;;){if(!rt(t)){t.j=!0,x(Error("Unmatched start-group tag: stream EOF"));break}if(4==t.h){t.i!=e&&(t.j=!0,x(Error("Unmatched end-group tag")));break}it(t)}break;default:t.j=!0,I(t.h,t.l)}}function ot(t,e,n){var r=t.g.i,i=_(t.g),o=t.g.g+i;if(t.g.i=o,n(e,t),0!==(n=o-t.g.g))throw Error("Message parsing ended unexpectedly. Expected to read "+i+" bytes, instead read "+(i-n)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.i=r,e}$.prototype.length=function(){return this.h},$.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,M(t,0,e)},nt.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};var at=[];function lt(){this.h=[],this.i=0,this.g=new $}function st(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function ct(t,e,n){et(t.g,8*e+2),et(t.g,n.length),st(t,t.g.end()),st(t,n)}var ut,dt="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ht(t){return Object.isFrozen(t)||(dt?t[dt]|=1:void 0!==t.g?t.g|=1:Object.defineProperties(t,{g:{value:1,configurable:!0,writable:!0,enumerable:!1}})),t}function mt(t){return null!==t&&"object"==typeof t&&t.constructor===Object}function pt(t,e){if(null!=t)return Array.isArray(t)||mt(t)?ft(t,e):e(t)}function ft(t,e){if(Array.isArray(t)){for(var n=Array(t.length),r=0;r<t.length;r++)n[r]=pt(t[r],e);var i;if(e=Array.isArray(t))e=1&(null==(i=dt?t[dt]:t.g)?0:i);return e&&ht(n),n}for(n in i={},t)i[n]=pt(t[n],e);return i}function bt(t){return t=function(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(j&&null!=t&&t instanceof Uint8Array)return J(t);if(t instanceof z){if(null==t.g)t="";else{var e=t.g;e=null==e||"string"==typeof e?e:j&&e instanceof Uint8Array?J(e):null,t=t.g=e}return t}}return t}(t),Array.isArray(t)?ft(t,bt):t}function gt(t,e,n){var r=ut;if(ut=null,t||(t=r),r=this.constructor.ha,t||(t=r?[r]:[]),this.i=(r?0:-1)-(this.constructor.fa||0),this.l=this.g=null,this.u=t,t=(r=this.u.length)-1,r&&mt(r=this.u[t])?(this.j=t-this.i,this.h=r):void 0!==e&&-1<e?(this.j=Math.max(e,t+1-this.i),this.h=null):this.j=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)(t=n[e])<this.j?(t+=this.i,(r=this.u[t])?Array.isArray(r)&&ht(r):this.u[t]=yt):(Zt(this),(r=this.h[t])?Array.isArray(r)&&ht(r):this.h[t]=yt)}var yt=Object.freeze(ht([]));function Zt(t){var e=t.j+t.i;t.u[e]||(t.h=t.u[e]={})}function vt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.j?t.h?t.h[e]:void 0:t.u[e+t.i]}function Gt(t,e,n){var r=vt(t,e,n=void 0!==n&&n);return null==r&&(r=yt),r===yt&&Vt(t,e,r=ht(r.slice()),n),r}function Xt(t,e){var n=Gt(t,e);if(t.l||(t.l={}),!t.l[e]){for(var r=0;r<n.length;r++)n[r]=+n[r];t.l[e]=!0}return n}function Wt(t,e,n){return null==(t=null==(t=vt(t,e))?t:+t)?void 0===n?0:n:t}function Vt(t,e,n,r){void 0!==r&&r||e>=t.j?(Zt(t),t.h[e]=n):t.u[e+t.i]=n}function Rt(t,e,n,r){n!==r?Vt(t,e,n):Vt(t,e,void 0,!1)}function xt(t,e,n){if(-1===n)return null;t.g||(t.g={});var r=t.g[n];if(r)return r;var i=vt(t,n,!1);return null==i?r:(e=new e(i),t.g[n]=e)}function It(t,e,n){t.g||(t.g={});var r=t.g[n];if(!r){var i=Gt(t,n,!1);r=[];for(var o=0;o<i.length;o++)r[o]=new e(i[o]);t.g[n]=r}return r}function Yt(t,e,n,r,i){var o=It(t,r,e);n=n||new r,t=Gt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,n.u)):(o.push(n),t.push(n.u))}function wt(t,e){return null==(t=vt(t,e))?0:t}function St(t,e){return null==(t=vt(t,e))?"":t}function Ht(t,e){if(t=t.m){st(e,e.g.end());for(var n=0;n<t.length;n++)st(e,t[n])}}gt.prototype.toJSON=function(){return ft(this.u,bt)},gt.prototype.toString=function(){return this.u.toString()};var Ft=Symbol();function Lt(t,e,n){return t[Ft]||(t[Ft]=function(t,r){return e(t,r,n)})}function Ct(t){var e=t[Ft];if(!e){var n=t[Jt]||(t[Jt]=t());e=function(t,e){return Nt(t,e,n)},t[Ft]=e}return e}function Tt(t){var e=function(t){var e=t.da;if(e)return Ct(e);if(e=t.ia){var n=t.Y;return delete t.Y,Lt(t.W.g,e,n)}}(t),n=t.W,r=t.ea;return e?function(t,i){return r(t,i,n,e)}:function(t,e){return r(t,e,n)}}function kt(t){var e=t[0];switch(t.length){case 2:var n=t[1];return function(t,r,i){return e(t,r,i,n)};case 3:var r=t[1],i=Ct(t[2]);return function(t,n,o){return e(t,n,o,r,i)};case 4:var o=t[1],a=t[3],l=Ct(t[2]);return function(t,n,r){return e(t,n,r,o,l,a)};case 5:var s=t[1],c=Lt(s,t[3],t[4]);return function(t,n,r){return e(t,n,r,s,c)};case 6:var u=t[1],d=t[5],h=Lt(u,t[3],t[4]);return function(t,n,r){return e(t,n,r,u,h,d)};default:throw Error("Unsupported number of parameters, expected [2-6], got "+t.length)}}var Jt=Symbol();function Nt(t,e,n){for(;rt(e)&&4!=e.h;){var r=e.i,i=n[r];if(i)Array.isArray(i)&&(i=n[r]=kt(i));else{var o=n[0];o&&(o=o[r])&&(i=n[r]=Tt(o))}i&&i(e,t,r)||(r=t,o=(i=e).l,it(i),i.O||(i=M(i.g.h,o,i.g.g),(o=r.m)?o.push(i):r.m=[i]))}return t}function Kt(t,e){var n=new lt;if(e(t,n),0===(t=n.i+n.g.length()))n=new Uint8Array(0);else{t=new Uint8Array(t);for(var r=n.h,i=r.length,o=e=0;o<i;o++){var a=r[o];0!==a.length&&(t.set(a,e),e+=a.length)}0!==(i=(r=n.g).h)&&(t.set(r.g.subarray(0,i),e),r.h=0),n.h=[t],n=t}return n}function Ut(t,e,n){if(at.length){var r=at.pop();t&&(P(r.g,t),r.i=-1,r.h=-1),t=r}else t=new nt(t);try{return Nt(new e,t,n[Jt]||(n[Jt]=n()))}finally{(e=t.g).h=null,e.l=0,e.i=0,e.g=0,e.j=!1,e.v=!1,t.i=-1,t.h=-1,t.j=!1,100>at.length&&at.push(t)}}function jt(t,e,n){if(null!=(e=vt(e,n))){et(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?E=0:(0,E=2147483648):isNaN(r)?(0,E=2147483647):34028234663852886e22<r?(0,E=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,E=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,E=(n<<31|e+127<<23|8388607&r)>>>0),tt(t,(n=E)>>>0&255),tt(t,n>>>8&255),tt(t,n>>>16&255),tt(t,n>>>24&255)}}function zt(t,e,n){if(1!==t.h)return!1;var r=t.g;t=D(r);var i=D(r);r=2*(i>>31)+1;var o=i>>>20&2047;return t=4294967296*(1048575&i)+t,Rt(e,n,2047==o?t?NaN:1/0*r:0==o?r*Math.pow(2,-1074)*t:r*Math.pow(2,o-1075)*(t+4503599627370496),0),!0}function Bt(t,e,n){return 5===t.h&&(Vt(e,n,t.g.m()),!0)}function Mt(t,e,n){if(5!==t.h&&2!==t.h)return!1;if(e=Gt(e,n),2==t.h){n=A.prototype.m;var r=_(t.g);for(r=t.g.g+r;t.g.g<r;)e.push(n.call(t.g))}else e.push(t.g.m());return!0}function Et(t,e,n){return 5===t.h&&(Rt(e,n,t=t.g.m(),0),!0)}function At(t,e,n){return 0===t.h&&(Vt(e,n,O(t.g)),!0)}function Pt(t,e,n){return 0===t.h&&(Vt(e,n,_(t.g)),!0)}function Ot(t,e,n){return 0===t.h&&(Rt(e,n,t=_(t.g),0),!0)}function Qt(t,e,n){return 0===t.h&&(Rt(e,n,t=!!_(t.g),!1),!0)}function _t(t,e,n){if(2!==t.h)return!1;var r,i=_(t.g),o=(t=t.g).g;if(t.g+=i,Q(t),t=t.h,F)(r=S)||(r=S=new TextDecoder("utf-8",{fatal:!1})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?c.push(65533):(l=t[o++],194>a||128!=(192&l)?(o--,c.push(65533)):c.push((31&a)<<6|63&l)):240>a?o>=i-1?c.push(65533):128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,c.push(65533)):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?c.push(65533):128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,c.push(65533)):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):c.push(65533),8192<=c.length&&(u=w(u,c),c.length=0);r=w(u,c)}return Vt(e,n,r),!0}function Dt(t,e,n,r,i){return 2===t.h&&(t=ot(t,new r,i),e.g||(e.g={}),r=t&&t.u,e.g[n]=t,Vt(e,n,r,!1),!0)}function qt(t,e,n,r,i){return 2===t.h&&(Yt(e,n,t=ot(t,new r,i),r,void 0),!0)}function $t(t,e,n){return 0===t.h&&(Vt(e,n,O(t.g)),!0)}function te(t){gt.call(this,t)}function ee(){return{1:Pt,2:Bt,3:_t,4:_t}}function ne(t,e){var n=vt(t,1);if(null!=n&&null!=n){et(e.g,8);var r=e.g;if(0<=n)et(r,n);else{for(var i=0;9>i;i++)tt(r,127&n|128),n>>=7;tt(r,1)}}jt(e,t,2),null!=(r=vt(t,3))&&ct(e,3,C(r)),null!=(r=vt(t,4))&&ct(e,4,C(r)),Ht(t,e)}function re(t){gt.call(this,t,-1,oe)}function ie(){return{1:[qt,te,ee]}}m(te,gt),m(re,gt),re.prototype.addClassification=function(t,e){return Yt(this,1,t,te,e),this};var oe=[1];function ae(t){gt.call(this,t)}function le(){return{1:Bt,2:Bt,3:Bt,4:Bt,5:Bt}}function se(t,e){jt(e,t,1),jt(e,t,2),jt(e,t,3),jt(e,t,4),jt(e,t,5),Ht(t,e)}function ce(t){gt.call(this,t,-1,de)}function ue(){return{1:[qt,ae,le]}}m(ae,gt),m(ce,gt);var de=[1];function he(t){gt.call(this,t)}function me(){return{1:Bt,2:Bt,3:Bt,4:Bt,5:Bt,6:At}}function pe(t,e){jt(e,t,1),jt(e,t,2),jt(e,t,3),jt(e,t,4),jt(e,t,5);var n=vt(t,6);if(null!=n&&null!=n){et(e.g,48);var r=e.g,i=n;n=0>i;var o=(i=Math.abs(i))>>>0;for(i=Math.floor((i-o)/4294967296),i>>>=0,n&&(i=~i>>>0,4294967295<(o=1+(~o>>>0))&&(o=0,4294967295<++i&&(i=0))),n=E=o,o=i;0<o||127<n;)tt(r,127&n|128),n=(n>>>7|o<<25)>>>0,o>>>=7;tt(r,n)}Ht(t,e)}function fe(t){gt.call(this,t,-1,Ze)}function be(){return{1:$t,2:$t,3:Mt,4:[Dt,ge,ye],5:Pt,6:Pt,7:Mt,8:Mt,9:Mt}}function ge(t){gt.call(this,t)}function ye(){return{1:Bt,2:Bt,3:Bt}}m(he,gt),m(fe,gt),m(ge,gt);var Ze=[3,7,8,9];function ve(t){gt.call(this,t)}function Ge(){return{1:Et,2:Et,3:Et}}function Xe(t){gt.call(this,t)}function We(){return{1:Et,2:Et,3:Et}}function Ve(t){gt.call(this,t)}function Re(){return{1:Ot,2:[Dt,Xe,We],3:[Dt,ve,Ge],4:Qt}}function xe(t){gt.call(this,t,-1,Ye)}function Ie(){return{1:Ot,2:[qt,Ve,Re],3:Et,4:Mt,5:Mt,6:Mt}}m(ve,gt),m(Xe,gt),m(Ve,gt),m(xe,gt);var Ye=[2,4,5,6];function we(t){gt.call(this,t,-1,He)}function Se(){return{1:Ot,2:[qt,xe,Ie],3:[Dt,fe,be],4:zt,5:Mt,6:Mt}}m(we,gt);var He=[2,5,6];function Fe(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Le(t){return It(t,te,1).map((function(t){return{index:wt(t,1),$:Wt(t,2),label:null!=vt(t,3)?St(t,3):void 0,displayName:null!=vt(t,4)?St(t,4):void 0}}))}function Ce(t){return{x:Wt(t,1),y:Wt(t,2),z:Wt(t,3),visibility:null!=vt(t,4)?Wt(t,4):void 0}}function Te(t,e){this.h=t,this.g=e,this.l=0}function ke(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=Fe(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=Fe(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={J:n.getAttribLocation(r,"aVertex"),I:n.getAttribLocation(r,"aTex"),ja:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.J),n.vertexAttribPointer(t.j.J,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.J,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.J),n.disableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function Je(t){this.g=t}var Ne=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 Ke(t,e){return e+t}function Ue(t,e){window[t]=e}function je(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||Ke,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.T=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function ze(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(m){switch(m.g){case 1:return t.S?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(m,X((function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(Ne),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)}})),2)):m.return();case 2:if(n=m.h,"object"==typeof window)return Ue("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),Ue("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=Be(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.T)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,Be(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(m,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.T)})),importScripts.apply(null,l(r)),i=t,g(m,createMediapipeSolutionsWasm(Module),6);case 6:i.h=m.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ga:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),m.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),m.return();t.F=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.S=!1,m.g=0}}))}function Be(t,e){var n,r;return X((function(i){return e in t.G?i.return(t.G[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.G[e]=r,i.return(r))}))}function Me(t,e,n){var r,i,o,l,s,c,u,d,h,m,p,f,b,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.H=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.s[e])||(r=new Te(t.h,t.F),t.s[e]=r),i.return(ke(r,n,t.H))):i.return(void 0)}))}(t,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=Ut(v.get(R),he,me);x={U:{aa:Wt(x,1),ba:Wt(x,2),height:Wt(x,3),width:Wt(x,4),rotation:Wt(x,5,0),Z:wt(x,6)},P:It(Ut(G.get(R),ce,ue),ae,1).map(Ce),N:Le(Ut(W.get(R),re,ie))},V.push(x)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===m){Z.g=3;break}if("float_list"===h.type){r[d]=m,Z.g=7;break}if("proto"===h.type){r[d]=m,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(p=t.s[d])||(p=new Te(t.h,t.F),t.s[d]=p),g(Z,ke(p,m,t.H),13);case 13:f=Z.h,r[d]=f;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:b[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function Ee(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.D=Me(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.D=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Ae(t){var e=wt(t,1),n=xt(t,ve,3);return{id:e,point2d:n={x:Wt(n,1),y:Wt(n,2),depth:Wt(n,3)},point3d:{x:Wt(t=xt(t,Xe,2),1),y:Wt(t,2),z:Wt(t,3)}}}function Pe(t){var e=Ut(t,we,Se);t=[],e=It(e,xe,2);for(var n=0;n<e.length;n++)t.push({id:wt(e[n],1),keypoints:It(e[n],Ve,2).map(Ae),visibility:Wt(e[n],3),scale:Xt(e[n],6),translation:Xt(e[n],5),rotation:Xt(e[n],4)});return t}function Oe(t){switch(t){case"Camera":return"Camera";case"Chair":return"Chair";case"Cup":return"Coffee cup, Mug";default:return"Footwear"}}(t=je.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.m={},t.s={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={L:o.L,M:o.M},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.L=s.onChange,o.M=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.L(t.M),2);!0===e.h&&(n.o=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.B=(void 0===this.B?[]:this.B).concat(i),this.A=(void 0===this.A?[]:this.A).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,ze(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.R===t.g.graph.url?u.return():(t.o=!0,t.g.graph&&t.g.graph.url?(t.R=t.g.graph.url,g(u,Be(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.C)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.C[i]);if(t.C={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Ee(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.o)return s.return();if(!t.A){s.g=2;break}e=a(t.A),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.B),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.B=void 0}t.o=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.C[t]=e},t.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(m){switch(m.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(m,h.D,2)):m.return();case 2:return g(m,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var p=t[l];switch(s.type){case"video":var f=h.m[s.stream];if(f||(f=new Te(h.h,h.F),h.m[s.stream]=f),0===f.l&&(f.l=f.h.createTexture()),typeof HTMLVideoElement<"u"&&p instanceof HTMLVideoElement)var b=p.videoWidth,y=p.videoHeight;else typeof HTMLImageElement<"u"&&p instanceof HTMLImageElement?(b=p.naturalWidth,y=p.naturalHeight):(b=p.width,y=p.height);y={glName:f.l,width:b,height:y},(b=f.g).canvas.width=y.width,b.canvas.height=y.height,b.activeTexture(b.TEXTURE0),f.h.bindTexture2d(f.l),b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,p),f.h.bindTexture2d(0),f=y;break t;case"detections":for((f=h.m[s.stream])||(f=new Je(h.h),h.m[s.stream]=f),f.data||(f.data=new f.g.DetectionListData),f.data.reset(p.length),y=0;y<p.length;++y){b=p[y];var Z=f.data,v=Z.setBoundingBox,G=y,X=b.U,W=new he;if(Vt(W,1,X.aa),Vt(W,2,X.ba),Vt(W,3,X.height),Vt(W,4,X.width),Vt(W,5,X.rotation),Vt(W,6,X.Z),X=Kt(W,pe),v.call(Z,G,X),b.P)for(Z=0;Z<b.P.length;++Z){var V=!!(W=b.P[Z]).visibility;G=(v=f.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),Vt(V=new ae,1,W.x),Vt(V,2,W.y),Vt(V,3,W.z),W.visibility&&Vt(V,4,W.visibility),W=Kt(V,se),G.call(v,X,W)}if(b.N)for(Z=0;Z<b.N.length;++Z)G=(v=f.data).addClassification,X=y,W=b.N[Z],Vt(V=new te,2,W.$),W.index&&Vt(V,1,W.index),W.label&&Vt(V,3,W.label),W.displayName&&Vt(V,4,W.displayName),W=Kt(V,ne),G.call(v,X,W)}f=f.data;break t;default:f={}}}switch(c=f,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(m,h.D,4);case 4:r.delete(),m.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",je),R("OptionType",{BOOL:0,NUMBER:1,ca:2,0:"BOOL",1:"NUMBER",2:"STRING"});var Qe={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 _e(t){var e=this;t=t||{},this.g=new je({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:Pe}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"object"==typeof window&&void 0!==window.navigator&&("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(t){var n,r,i,o;return X((function(a){return 1==a.g?(n=t,e.g.setOptions({allowedLabels:Oe(n)},Qe),r=function(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"}}(n),i="object_detection_3d.tflite",g(a,Be(e.g,r),2)):(o=a.h,e.g.overrideFile(i,o),a.return(!0))}))}},focalLength:{default:[1,1],onChange:function(t){var n;return X((function(r){return n=t,e.h=n,e.g.setOptions({focalX:n[0],focalY:n[1]},Qe),r.return(!0)}))}},principalPoint:{default:[0,0],onChange:function(t){var n;return X((function(r){return n=t,e.i=n,e.g.setOptions({principalX:n[0],principalY:n[1]},Qe),r.return(!0)}))}},imageSize:{onChange:function(t){var n,r,i,o;return X((function(a){if(void 0===e.h||void 0===e.i)return console.error('"focalLength" and "principalPoint" must be set if setting image size'),a.return();r=[(n=t)[0]/2,n[1]/2],i=[e.h[0]/r[0],e.h[1]/r[1]],o=[e.i[0]/r[0],e.i[1]/r[1]],e.setOptions({focalLength:i,principalPoint:o}),a.g=0}))}}}})}(t=_e.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return X((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},R("Objectron",_e),R("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]]),R("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}),R("VERSION","0.4.1636596145")}).call(vi);const Gi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ea=e.prototype}function p(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function f(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={U:e,V:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new p,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.V)throw e.U;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return f(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return f(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){f(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}p.prototype.o=function(t){this.h=t},p.prototype.return=function(t){this.j={return:t},this.g=this.s},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.C),reject:t(this.l)}},e.prototype.C=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.F(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.v(t):this.m(t)}},e.prototype.v=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.G(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.D(),this.A()},e.prototype.D=function(){var t=this;o((function(){if(t.B()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.B=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.A=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.F=function(t){var e=this.j();t.J(e.resolve,e.reject)},e.prototype.G=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.J(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.J=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).J(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).J(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(t){!function(t){V.setTimeout((function(){throw t}),0)}(t)}function I(t,e){x(Error("Invalid wire type: "+t+" (at position "+e+")"))}function Y(){x(Error("Failed to read varint, encoding is invalid."))}function w(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var S,H,F=typeof TextDecoder<"u",L=typeof TextEncoder<"u";function C(t){if(L)t=(H||(H=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var T={},k=null;function J(t){var e;void 0===e&&(e=0),K(),e=T[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function N(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=k[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}K();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function K(){if(!k){k={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));T[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===k[o]&&(k[o]=i)}}}}var U,j="function"==typeof Uint8Array;function z(t){if(this.g=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}z.prototype.toJSON=function(){if(null==this.g)var t="";else t=this.g,t=this.g=null==t||"string"==typeof t?t:j&&t instanceof Uint8Array?J(t):null;return t};var B="function"==typeof Uint8Array.prototype.slice;function M(t,e,n){return e===n?U||(U=new Uint8Array(0)):B?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var E=0;function A(t,e){e=void 0!==(e=void 0===e?{}:e).u&&e.u,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.u=e,t&&P(this,t)}function P(t,e){t.h=function(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 N(t);if(t.constructor===z){if(null==t.g)var e=U||(U=new Uint8Array(0));else{e=Uint8Array;var n=t.g;n=null==n||j&&null!=n&&n instanceof Uint8Array?n:"string"==typeof n?N(n):null,e=new e(t=t.g=n)}return e}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")}(e),t.l=0,t.i=t.h.length,t.g=t.l}function O(t){t.g>t.i&&(t.j=!0,x(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}function Q(t){var e=t.h,n=e[t.g],r=127&n;return 128>n?(t.g+=1,O(t),r):(r|=(127&(n=e[t.g+1]))<<7,128>n?(t.g+=2,O(t),r):(r|=(127&(n=e[t.g+2]))<<14,128>n?(t.g+=3,O(t),r):(r|=(127&(n=e[t.g+3]))<<21,128>n?(t.g+=4,O(t),r):(r|=(15&(n=e[t.g+4]))<<28,128>n?(t.g+=5,O(t),r>>>0):(t.g+=5,128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]?(t.j=!0,Y(),r):(O(t),r))))))}A.prototype.reset=function(){this.g=this.l};var _=[];function D(){this.g=new Uint8Array(64),this.h=0}function q(t,e){if(!(t.h+1<t.g.length)){var n=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(n)}t.g[t.h++]=e}function $(t,e){for(;127<e;)q(t,127&e|128),e>>>=7;q(t,e)}function tt(t){var e={},n=void 0!==e.N&&e.N;this.m={u:void 0!==e.u&&e.u},this.N=n,e=this.m,_.length?(n=_.pop(),e&&(n.u=e.u),t&&P(n,t),t=n):t=new A(t,e),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}function et(t){var e=t.g;if((e=e.g==e.i)||(e=t.j)||(e=(e=t.g).j||0>e.g||e.g>e.i),e)return!1;t.l=t.g.g;var n=Q(t.g);return e=n>>>3,0<=(n&=7)&&5>=n?(t.i=e,t.h=n,!0):(t.j=!0,I(n,t.l),!1)}function nt(t){switch(t.h){case 0:if(0!=t.h)nt(t);else t:{for(var e=(t=t.g).g,n=0;10>n;n++){if(0==(128&t.h[e])){t.g=e+1,O(t);break t}e++}t.j=!0,Y()}break;case 1:(t=t.g).g+=8,O(t);break;case 2:2!=t.h?nt(t):(e=Q(t.g),(t=t.g).g+=e,O(t));break;case 5:(t=t.g).g+=4,O(t);break;case 3:for(e=t.i;;){if(!et(t)){t.j=!0,x(Error("Unmatched start-group tag: stream EOF"));break}if(4==t.h){t.i!=e&&(t.j=!0,x(Error("Unmatched end-group tag")));break}nt(t)}break;default:t.j=!0,I(t.h,t.l)}}function rt(t,e,n){t.N||(t=M(t.g.h,n,t.g.g),(n=e.m)?n.push(t):e.m=[t])}D.prototype.length=function(){return this.h},D.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,M(t,0,e)},tt.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};var it=[];function ot(){this.h=[],this.i=0,this.g=new D}function at(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function lt(t,e,n){$(t.g,8*e+2),$(t.g,n.length),at(t,t.g.end()),at(t,n)}var st,ct="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ut(t,e){Object.isFrozen(t)||(ct?t[ct]|=e:void 0!==t.g?t.g|=e:Object.defineProperties(t,{g:{value:e,configurable:!0,writable:!0,enumerable:!1}}))}function dt(t){return t?null==(e=ct?t[ct]:t.g)?0:e:0;var e}function ht(t){return Array.isArray(t)&&ut(t,1),t}function mt(t){if(!Array.isArray(t))throw Error("cannot mark non-array as immutable");ut(t,2)}function pt(t){return null!==t&&"object"==typeof t&&t.constructor===Object}function ft(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":return j&&null!=t&&t instanceof Uint8Array?J(t):t;default:return t}}function bt(t,e){if(null!=t)return Array.isArray(t)||pt(t)?gt(t,e):e(t)}function gt(t,e){if(Array.isArray(t)){for(var n=Array(t.length),r=0;r<t.length;r++)n[r]=bt(t[r],e);return 1&dt(t)&&ht(n),n}for(r in n={},t)n[r]=bt(t[r],e);return n}function yt(t,e,n){var r=st;if(st=null,t||(t=r),r=this.constructor.ca,t||(t=r?[r]:[]),this.j=(r?0:-1)-(this.constructor.aa||0),this.i=null,this.g=t,t=(r=this.g.length)-1,r&&pt(r=this.g[t])?(this.l=t-this.j,this.h=r):void 0!==e&&-1<e?(this.l=Math.max(e,t+1-this.j),this.h=null):this.l=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)(t=n[e])<this.l?(t+=this.j,(r=this.g[t])?ht(r):this.g[t]=Gt):(Xt(this),(r=this.h[t])?ht(r):this.h[t]=Gt)}var Zt,vt,Gt=Object.freeze(ht([]));function Xt(t){var e=t.l+t.j;t.g[e]||(t.h=t.g[e]={})}function Wt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.l?t.h?t.h[e]:void 0:t.g[e+t.j]}function Vt(t,e,n){n=void 0===n||n;var r=void 0!==r&&r,i=Wt(t,e,r);return null==i&&(i=Gt),i===Gt?xt(t,e,i=ht([]),r):n&&Array.isArray(i)&&2&dt(i)&&xt(t,e,i=i.slice(),r),i}function Rt(t,e,n){return null==(t=null==(t=Wt(t,e))?t:+t)?void 0===n?0:n:t}function xt(t,e,n,r){void 0!==r&&r||e>=t.l?(Xt(t),t.h[e]=n):t.g[e+t.j]=n}function It(t,e,n){t.i||(t.i={});var r=t.i[n];if(!r){var i=Vt(t,n,!1);r=[];for(var o=!!Array.isArray(i)&&!!(2&dt(i)),a=0;a<i.length;a++)r[a]=new e(i[a]),o&&mt(r[a].g);o&&(mt(r),Object.freeze(r)),t.i[n]=r}return r}function Yt(t,e,n,r,i){var o=It(t,r,e);n=n||new r,t=Vt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,wt(n))):(o.push(n),t.push(wt(n)))}function wt(t){if(t.i)for(var e in t.i){var n=t.i[e];if(Array.isArray(n))for(var r=0;r<n.length;r++)n[r]&&wt(n[r]);else n&&wt(n)}return t.g}function St(t,e){return null==(t=Wt(t,e))?0:t}function Ht(t,e){return null==(t=Wt(t,e))?"":t}function Ft(t,e){if(t=t.m){at(e,e.g.end());for(var n=0;n<t.length;n++)at(e,t[n])}}function Lt(t){var e=t[0];switch(t.length){case 2:var n=t[1];return function(t,r,i){return e(t,r,i,n)};case 3:var r=t[1],i=t[2];return function(t,n,o){return e(t,n,o,r,i)};case 4:var o=t[1],a=t[2],l=t[3];return function(t,n,r){return e(t,n,r,o,a,l)};default:throw Error("unsupported number of parameters, expected [2-4], got "+t.length)}}function Ct(t,e,n){for(;et(e)&&4!=e.h;){var r=e.i,i=n[r];if(i){if(Array.isArray(i)&&(i=n[r]=Lt(i)),!i(e,t,r)){i=t;var o=(r=e).l;nt(r),rt(r,i,o)}}else i=t,o=(r=e).l,nt(r),rt(r,i,o)}return t}function Tt(t,e){var n=new ot;if(e(t,n),0===(t=n.i+n.g.length()))n=new Uint8Array(0);else{t=new Uint8Array(t);for(var r=n.h,i=r.length,o=e=0;o<i;o++){var a=r[o];0!==a.length&&(t.set(a,e),e+=a.length)}0!==(i=(r=n.g).h)&&(t.set(r.g.subarray(0,i),e),r.h=0),n.h=[t],n=t}return n}function kt(t,e,n){if(it.length){var r=it.pop();t&&(P(r.g,t),r.i=-1,r.h=-1),t=r}else t=new tt(t);try{return n(new e,t)}finally{(e=t.g).h=null,e.l=0,e.i=0,e.g=0,e.j=!1,e.u=!1,t.i=-1,t.h=-1,t.j=!1,100>it.length&&it.push(t)}}function Jt(t,e,n){if(null!=(e=Wt(e,n))){$(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?E=0:(0,E=2147483648):isNaN(r)?(0,E=2147483647):34028234663852886e22<r?(0,E=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,E=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,E=(n<<31|e+127<<23|8388607&r)>>>0),q(t,(n=E)>>>0&255),q(t,n>>>8&255),q(t,n>>>16&255),q(t,n>>>24&255)}}function Nt(t,e,n){if(5!==t.h)return!1;var r=(t=t.g).h[t.g],i=t.h[t.g+1],o=t.h[t.g+2],a=t.h[t.g+3];return t.g+=4,O(t),t=2*((i=(r<<0|i<<8|o<<16|a<<24)>>>0)>>31)+1,r=i>>>23&255,i&=8388607,xt(e,n,255==r?i?NaN:1/0*t:0==r?t*Math.pow(2,-149)*i:t*Math.pow(2,r-150)*(i+Math.pow(2,23))),!0}function Kt(t,e,n){if(0!==t.h)return!1;for(var r=t.g,i=128,o=0,a=t=0;4>a&&128<=i;a++)o|=(127&(i=r.h[r.g++]))<<7*a;if(128<=i&&(o|=(127&(i=r.h[r.g++]))<<28,t|=(127&i)>>4),128<=i)for(a=0;5>a&&128<=i;a++)t|=(127&(i=r.h[r.g++]))<<7*a+3;return 128>i?(r=o>>>0,(t=2147483648&(i=t>>>0))&&(i=~i>>>0,0==(r=1+~r>>>0)&&(i=i+1>>>0)),r=4294967296*i+(r>>>0),t=t?-r:r):(r.j=!0,Y(),t=void 0),xt(e,n,t),!0}function Ut(t,e,n){return 0===t.h&&(xt(e,n,Q(t.g)),!0)}function jt(t,e,n){if(2!==t.h)return!1;var r,i=Q(t.g),o=(t=t.g).g;if(t.g+=i,O(t),t=t.h,F)(r=S)||(r=S=new TextDecoder("utf-8",{fatal:!1})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?c.push(65533):(l=t[o++],194>a||128!=(192&l)?(o--,c.push(65533)):c.push((31&a)<<6|63&l)):240>a?o>=i-1?c.push(65533):128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,c.push(65533)):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?c.push(65533):128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,c.push(65533)):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):c.push(65533),8192<=c.length&&(u=w(u,c),c.length=0);r=w(u,c)}return xt(e,n,r),!0}function zt(t,e,n,r,i){if(2!==t.h)return!1;var o=new r,a=t.g.i,l=Q(t.g),s=t.g.g+l;if(t.g.i=s,i(o,t),0!==(i=s-t.g.g))throw Error("Message parsing ended unexpectedly. Expected to read "+l+" bytes, instead read "+(l-i)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=s,t.g.i=a,Yt(e,n,o,r,void 0),!0}function Bt(t){yt.call(this,t)}function Mt(t,e){var n=Wt(t,1);if(null!=n&&null!=n){$(e.g,8);var r=e.g;if(0<=n)$(r,n);else{for(var i=0;9>i;i++)q(r,127&n|128),n>>=7;q(r,1)}}Jt(e,t,2),null!=(r=Wt(t,3))&&lt(e,3,C(r)),null!=(r=Wt(t,4))&&lt(e,4,C(r)),Ft(t,e)}function Et(t,e){return Ct(t,e,Zt||(Zt={1:Ut,2:Nt,3:jt,4:jt}))}function At(t){yt.call(this,t,-1,_t)}function Pt(t,e){return Ct(t,e,vt||(vt={1:[zt,Bt,Et]}))}yt.prototype.toJSON=function(){return gt(wt(this),ft)},yt.prototype.toString=function(){return wt(this).toString()},m(Bt,yt),m(At,yt),At.prototype.addClassification=function(t,e){return Yt(this,1,t,Bt,e),this};var Ot,Qt,_t=[1];function Dt(t){yt.call(this,t)}function qt(t,e){Jt(e,t,1),Jt(e,t,2),Jt(e,t,3),Jt(e,t,4),Jt(e,t,5),Ft(t,e)}function $t(t,e){return Ct(t,e,Ot||(Ot={1:Nt,2:Nt,3:Nt,4:Nt,5:Nt}))}function te(t){yt.call(this,t,-1,re)}function ee(t,e){return Ct(t,e,Qt||(Qt={1:[zt,Dt,$t]}))}m(Dt,yt),m(te,yt);var ne,re=[1];function ie(t){yt.call(this,t)}function oe(t,e){Jt(e,t,1),Jt(e,t,2),Jt(e,t,3),Jt(e,t,4),Jt(e,t,5);var n=Wt(t,6);if(null!=n&&null!=n){$(e.g,48);var r=e.g,i=n;n=0>i;var o=(i=Math.abs(i))>>>0;for(i=Math.floor((i-o)/4294967296),i>>>=0,n&&(i=~i>>>0,4294967295<(o=1+(~o>>>0))&&(o=0,4294967295<++i&&(i=0))),n=E=o,o=i;0<o||127<n;)q(r,127&n|128),n=(n>>>7|o<<25)>>>0,o>>>=7;q(r,n)}Ft(t,e)}function ae(t,e){return Ct(t,e,ne||(ne={1:Nt,2:Nt,3:Nt,4:Nt,5:Nt,6:Kt}))}function le(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function se(t){return It(t,Bt,1).map((function(t){return{index:St(t,1),X:Rt(t,2),label:null!=Wt(t,3)?Ht(t,3):void 0,displayName:null!=Wt(t,4)?Ht(t,4):void 0}}))}function ce(t){return{x:Rt(t,1),y:Rt(t,2),z:Rt(t,3),visibility:null!=Wt(t,4)?Rt(t,4):void 0}}function ue(t){return It(kt(t,te,ee),Dt,1).map(ce)}function de(t,e){this.h=t,this.g=e,this.l=0}function he(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=le(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=le(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={I:n.getAttribLocation(r,"aVertex"),H:n.getAttribLocation(r,"aTex"),da:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.H),n.vertexAttribPointer(t.j.H,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.H,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.I),n.disableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function me(t){this.g=t}m(ie,yt);var pe=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 fe(t,e){return e+t}function be(t,e){window[t]=e}function ge(t){if(this.g=t,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=t&&t.locateFile||fe,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.S=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function ye(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(m){switch(m.g){case 1:return t.R?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(m,X((function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(pe),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)}})),2)):m.return();case 2:if(n=m.h,"object"==typeof window)return be("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),be("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=Ze(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.S)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,Ze(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(m,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.S)})),importScripts.apply(null,l(r)),i=t,g(m,createMediapipeSolutionsWasm(Module),6);case 6:i.h=m.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),m.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),m.return();t.D=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.R=!1,m.g=0}}))}function Ze(t,e){var n,r;return X((function(i){return e in t.F?i.return(t.F[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.F[e]=r,i.return(r))}))}function ve(t,e,n){var r,i,o,l,s,c,u,d,h,m,p,f,b,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.G=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.s[e])||(r=new de(t.h,t.D),t.s[e]=r),i.return(he(r,n,t.G))):i.return(void 0)}))}(t,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=kt(v.get(R),ie,ae);x={T:{Y:Rt(x,1),Z:Rt(x,2),height:Rt(x,3),width:Rt(x,4),rotation:Rt(x,5,0),W:St(x,6)},O:ue(G.get(R)),M:se(kt(W.get(R),At,Pt))},V.push(x)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===m){Z.g=3;break}if("float_list"===h.type){r[d]=m,Z.g=7;break}if("proto"===h.type){r[d]=m,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(p=t.s[d])||(p=new de(t.h,t.D),t.s[d]=p),g(Z,he(p,m,t.G),13);case 13:f=Z.h,r[d]=f;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:b[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function Ge(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.C=ve(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.C=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Xe(t){switch(void 0===t&&(t=0),t){case 1:return"pose_landmark_full.tflite";case 2:return"pose_landmark_heavy.tflite";default:return"pose_landmark_lite.tflite"}}function We(t){var e=this;t=t||{},this.g=new ge({locateFile:t.locateFile,files:function(t){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:Xe(t.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:ue},poseWorldLandmarks:{type:"proto",stream:"world_landmarks",transform:ue},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(t){var n,r,i;return X((function(o){return 1==o.g?(n=Xe(t),r="third_party/mediapipe/modules/pose_landmark/"+n,g(o,Ze(e.g,n),2)):(i=o.h,e.g.overrideFile(r,i),o.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"}}}})}(t=ge.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.m={},t.s={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={K:o.K,L:o.L},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.K=s.onChange,o.L=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.K(t.L),2);!0===e.h&&(n.o=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.A=(void 0===this.A?[]:this.A).concat(i),this.v=(void 0===this.v?[]:this.v).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,ye(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.P===t.g.graph.url?u.return():(t.o=!0,t.g.graph&&t.g.graph.url?(t.P=t.g.graph.url,g(u,Ze(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.B)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.B[i]);if(t.B={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Ge(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.o)return s.return();if(!t.v){s.g=2;break}e=a(t.v),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.v=void 0;case 2:if(t.A){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.A),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.A=void 0}t.o=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.B[t]=e},t.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(m){switch(m.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(m,h.C,2)):m.return();case 2:return g(m,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var p=t[l];switch(s.type){case"video":var f=h.m[s.stream];if(f||(f=new de(h.h,h.D),h.m[s.stream]=f),0===f.l&&(f.l=f.h.createTexture()),typeof HTMLVideoElement<"u"&&p instanceof HTMLVideoElement)var b=p.videoWidth,y=p.videoHeight;else typeof HTMLImageElement<"u"&&p instanceof HTMLImageElement?(b=p.naturalWidth,y=p.naturalHeight):(b=p.width,y=p.height);y={glName:f.l,width:b,height:y},(b=f.g).canvas.width=y.width,b.canvas.height=y.height,b.activeTexture(b.TEXTURE0),f.h.bindTexture2d(f.l),b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,p),f.h.bindTexture2d(0),f=y;break t;case"detections":for((f=h.m[s.stream])||(f=new me(h.h),h.m[s.stream]=f),f.data||(f.data=new f.g.DetectionListData),f.data.reset(p.length),y=0;y<p.length;++y){b=p[y];var Z=f.data,v=Z.setBoundingBox,G=y,X=b.T,W=new ie;if(xt(W,1,X.Y),xt(W,2,X.Z),xt(W,3,X.height),xt(W,4,X.width),xt(W,5,X.rotation),xt(W,6,X.W),X=Tt(W,oe),v.call(Z,G,X),b.O)for(Z=0;Z<b.O.length;++Z){var V=!!(W=b.O[Z]).visibility;G=(v=f.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),xt(V=new Dt,1,W.x),xt(V,2,W.y),xt(V,3,W.z),W.visibility&&xt(V,4,W.visibility),W=Tt(V,qt),G.call(v,X,W)}if(b.M)for(Z=0;Z<b.M.length;++Z)G=(v=f.data).addClassification,X=y,W=b.M[Z],xt(V=new Bt,2,W.X),W.index&&xt(V,1,W.index),W.label&&xt(V,3,W.label),W.displayName&&xt(V,4,W.displayName),W=Tt(V,Mt),G.call(v,X,W)}f=f.data;break t;default:f={}}}switch(c=f,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(m,h.C,4);case 4:r.delete(),m.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",ge),R("OptionType",{BOOL:0,NUMBER:1,$:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=We.prototype).reset=function(){this.g.reset()},t.close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.send=function(t,e){var n=this;return X((function(r){return g(r,n.g.send(t,e),0)}))},t.setOptions=function(t){this.g.setOptions(t)},R("Pose",We),R("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]]),R("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}),R("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}),R("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}),R("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),R("VERSION","0.5.1635988162")}).call(Gi);const ir=class{constructor(){Rt(this,"mediapipeMap_",new Map)}getVersion(t){switch(t){case"face_detection":return gi.VERSION;case"face_mesh":return Zi.VERSION;case"hands":return bi.VERSION;case"holistic":return yi.VERSION;case"objectron":return vi.VERSION;case"selfie_segmentation":return pi.VERSION;case"pose":return Gi.VERSION;default:return""}}initialize(t){return new Promise((async(e,n)=>{if(0!=t.mediaPipeModelConfigArray.length){for(let e=0;e<t.mediaPipeModelConfigArray.length;e++){const r=t.mediaPipeModelConfigArray[e];if(this.mediapipeMap_.has(r.modelType))return void n("setting same type is not supported");if("function"!=typeof r.listener)return void n(`[${r.modelType}] ResultsListener must be provided`);let i;switch(r.modelType){case"face_mesh":i=new Zi.FaceMesh({locateFile:(t,e)=>(r.assetsUri||ir.defaultAssetsBaseUrl+"face_mesh/"+this.getVersion("face_mesh"))+"/"+t});break;case"face_detection":i=new gi.FaceDetection({locateFile:(t,e)=>(r.assetsUri||ir.defaultAssetsBaseUrl+"face_detection/"+this.getVersion("face_detection"))+"/"+t});break;case"hands":i=new bi.Hands({locateFile:(t,e)=>(r.assetsUri||ir.defaultAssetsBaseUrl+"hands/"+this.getVersion("hands"))+"/"+t});break;case"holistic":i=new yi.Holistic({locateFile:(t,e)=>(r.assetsUri||ir.defaultAssetsBaseUrl+"holistic/"+this.getVersion("holistic"))+"/"+t});break;case"objectron":i=new vi.Objectron({locateFile:(t,e)=>(r.assetsUri||ir.defaultAssetsBaseUrl+"objectron/"+this.getVersion("objectron"))+"/"+t});break;case"selfie_segmentation":i=new pi.SelfieSegmentation({locateFile:(t,e)=>(r.assetsUri||ir.defaultAssetsBaseUrl+"selfie_segmentation/"+this.getVersion("selfie_segmentation"))+"/"+t});break;case"pose":i=new Gi.Pose({locateFile:(t,e)=>(r.assetsUri||ir.defaultAssetsBaseUrl+"pose/"+this.getVersion("pose"))+"/"+t});break;default:return void n("unknown model type")}i.onResults(r.listener),r.options&&i.setOptions(r.options);try{await i.initialize(),this.mediapipeMap_.set(r.modelType,i)}catch(t){return void n(t)}}e()}else n("no model was selected")}))}close(t){return new Promise(((e,n)=>{let r=[];if(t){let e=this.mediapipeMap_.get(t);if(!e)return void n("model not exit");this.mediapipeMap_.delete(t),r.push(e.close())}else{for(const[t,e]of this.mediapipeMap_.entries())r.push(e.close());this.mediapipeMap_.clear()}Promise.all(r).then((()=>{e()})).catch((t=>{n(t)}))}))}send(t,e){return new Promise(((n,r)=>{let i=[];if(e){let n=this.mediapipeMap_.get(e);if(!n)return void r("model not exit");i.push(n.send({image:t}))}else for(const[e,n]of this.mediapipeMap_.entries())i.push(n.send({image:t}));Promise.all(i).then((()=>{n()})).catch((t=>{r(t)}))}))}reset(t){if(t){let e=this.mediapipeMap_.get(t);e&&"function"==typeof e.reset&&e.reset()}else for(const[t,e]of this.mediapipeMap_.entries())e&&"function"==typeof e.reset&&e.reset()}};let qi=ir;Rt(qi,"defaultAssetsBaseUrl","https://d3opqjmqzxf057.cloudfront.net/ml/mediapipe/");const ur=new WeakMap,di=new WeakMap,Kr=new WeakMap,co=Symbol("anyProducer"),gs=Promise.resolve(),Xi=Symbol("listenerAdded"),Wi=Symbol("listenerRemoved");let to=!1;function Yr(t){if("string"!=typeof t&&"symbol"!=typeof t)throw new TypeError("eventName must be a string or a symbol")}function ti(t){if("function"!=typeof t)throw new TypeError("listener must be a function")}function Tr(t,e){const n=di.get(t);return n.has(e)||n.set(e,new Set),n.get(e)}function Mr(t,e){const n="string"==typeof e||"symbol"==typeof e?e:co,r=Kr.get(t);return r.has(n)||r.set(n,new Set),r.get(n)}function $c(t,e,n){const r=Kr.get(t);if(r.has(e))for(const t of r.get(e))t.enqueue(n);if(r.has(co)){const t=Promise.all([e,n]);for(const e of r.get(co))e.enqueue(t)}}function Zs(t,e){e=Array.isArray(e)?e:[e];let n=!1,r=()=>{},i=[];const o={enqueue(t){i.push(t),r()},finish(){n=!0,r()}};for(const n of e)Mr(t,n).add(o);return{async next(){return i?0===i.length?n?(i=void 0,this.next()):(await new Promise((t=>{r=t})),this.next()):{done:!1,value:await i.shift()}:{done:!0}},async return(n){i=void 0;for(const n of e)Mr(t,n).delete(o);return r(),arguments.length>0?{done:!0,value:await n}:{done:!0}},[Symbol.asyncIterator](){return this}}}function vs(t){if(void 0===t)return Gs;if(!Array.isArray(t))throw new TypeError("`methodNames` must be an array of strings");for(const e of t)if(!Gs.includes(e))throw"string"!=typeof e?new TypeError("`methodNames` element must be a string"):new Error(`${e} is not Emittery method`);return t}const eo=t=>t===Xi||t===Wi;class Gr{static mixin(t,e){return e=vs(e),n=>{if("function"!=typeof n)throw new TypeError("`target` must be function");for(const t of e)if(void 0!==n.prototype[t])throw new Error(`The property \`${t}\` already exists on \`target\``);Object.defineProperty(n.prototype,t,{enumerable:!1,get:function(){return Object.defineProperty(this,t,{enumerable:!1,value:new Gr}),this[t]}});const r=e=>function(...n){return this[t][e](...n)};for(const t of e)Object.defineProperty(n.prototype,t,{enumerable:!1,value:r(t)});return n}}static get isDebugEnabled(){if("object"!=typeof process)return to;const{env:t}=process||{env:{}};return"emittery"===t.DEBUG||"*"===t.DEBUG||to}static set isDebugEnabled(t){to=t}constructor(t={}){ur.set(this,new Set),di.set(this,new Map),Kr.set(this,new Map),this.debug=t.debug||{},void 0===this.debug.enabled&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(t,e,n,r)=>{try{r=JSON.stringify(r)}catch{r=`Object with the following keys failed to stringify: ${Object.keys(r).join(",")}`}"symbol"==typeof n&&(n=n.toString());const i=new Date,o=`${i.getHours()}:${i.getMinutes()}:${i.getSeconds()}.${i.getMilliseconds()}`;console.log(`[${o}][emittery:${t}][${e}] Event Name: ${n}\n\tdata: ${r}`)})}logIfDebugEnabled(t,e,n){(Gr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(t,this.debug.name,e,n)}on(t,e){ti(e),t=Array.isArray(t)?t:[t];for(const n of t)Yr(n),Tr(this,n).add(e),this.logIfDebugEnabled("subscribe",n,void 0),eo(n)||this.emit(Xi,{eventName:n,listener:e});return this.off.bind(this,t,e)}off(t,e){ti(e),t=Array.isArray(t)?t:[t];for(const n of t)Yr(n),Tr(this,n).delete(e),this.logIfDebugEnabled("unsubscribe",n,void 0),eo(n)||this.emit(Wi,{eventName:n,listener:e})}once(t){return new Promise((e=>{const n=this.on(t,(t=>{n(),e(t)}))}))}events(t){t=Array.isArray(t)?t:[t];for(const e of t)Yr(e);return Zs(this,t)}async emit(t,e){Yr(t),this.logIfDebugEnabled("emit",t,e),$c(this,t,e);const n=Tr(this,t),r=ur.get(this),i=[...n],o=eo(t)?[]:[...r];await gs,await Promise.all([...i.map((async t=>{if(n.has(t))return t(e)})),...o.map((async n=>{if(r.has(n))return n(t,e)}))])}async emitSerial(t,e){Yr(t),this.logIfDebugEnabled("emitSerial",t,e);const n=Tr(this,t),r=ur.get(this),i=[...n],o=[...r];await gs;for(const t of i)n.has(t)&&await t(e);for(const n of o)r.has(n)&&await n(t,e)}onAny(t){return ti(t),this.logIfDebugEnabled("subscribeAny",void 0,void 0),ur.get(this).add(t),this.emit(Xi,{listener:t}),this.offAny.bind(this,t)}anyEvent(){return Zs(this)}offAny(t){ti(t),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(Wi,{listener:t}),ur.get(this).delete(t)}clearListeners(t){t=Array.isArray(t)?t:[t];for(const e of t)if(this.logIfDebugEnabled("clear",e,void 0),"string"==typeof e||"symbol"==typeof e){Tr(this,e).clear();const t=Mr(this,e);for(const e of t)e.finish();t.clear()}else{ur.get(this).clear();for(const t of di.get(this).values())t.clear();for(const t of Kr.get(this).values()){for(const e of t)e.finish();t.clear()}}}listenerCount(t){t=Array.isArray(t)?t:[t];let e=0;for(const n of t)if("string"!=typeof n){typeof n<"u"&&Yr(n),e+=ur.get(this).size;for(const t of di.get(this).values())e+=t.size;for(const t of Kr.get(this).values())e+=t.size}else e+=ur.get(this).size+Tr(this,n).size+Mr(this,n).size+Mr(this).size;return e}bindMethods(t,e){if("object"!=typeof t||null===t)throw new TypeError("`target` must be an object");e=vs(e);for(const n of e){if(void 0!==t[n])throw new Error(`The property \`${n}\` already exists on \`target\``);Object.defineProperty(t,n,{enumerable:!1,value:this[n].bind(this)})}}}const Gs=Object.getOwnPropertyNames(Gr.prototype).filter((t=>"constructor"!==t));Object.defineProperty(Gr,"listenerAdded",{value:Xi,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(Gr,"listenerRemoved",{value:Wi,writable:!1,enumerable:!0,configurable:!1});var tl=Gr,gr=(t=>(t[t.INIT=0]="INIT",t[t.FORWARD=1]="FORWARD",t[t.TERMINATE=2]="TERMINATE",t))(gr||{});function el(t){return[ImageBitmap,ReadableStream,WritableStream].some((e=>t instanceof e))}let qc=0;function ao(t,e,n,r,i){const o=qc++;return t.postMessage({id:o,type:e,functionName:n,args:r},r.filter((t=>el(t)))),new Promise((t=>{i.set(o,t)}))}async function t2(t,e,n){const r=new e;if(r.addEventListener("message",(({data:t})=>{var e;null==(e=n.get(t.id))||e(t.result),n.delete(t.id)})),!await ao(r,gr.INIT,"",[t.workerId],n))throw"Failed to instantiate workerized class";return r}async function e2(t,e,n){const r={};return Object.getOwnPropertyNames(t.prototype).forEach((t=>{r[t]=(...r)=>ao(e,gr.FORWARD,t,r,n)})),r.terminate=async(...t)=>{const i=await ao(e,gr.TERMINATE,"",t,n);return e.terminate(),r.worker=void 0,i},r.worker=e,r}async function n2(t,e){const n=new Map;return e2(t,await t2(t,e,n),n)}function Io(t,e){const{id:n}=t,r=Array.isArray(e)?e:[e];postMessage({id:n,result:e},r.filter((t=>el(t))))}async function r2(t,e){const{functionName:n,args:r}=t;if(!e.instance)throw"instance not initialized";if(!n)throw"missing function name to call";if(!e.instance[n])throw`undefined function [${n}] in class ${e.instance.constructor.workerId}`;Io(t,await e.instance[n](...null!=r?r:[]))}function nl(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}const rl={};function i2(t,e){e.workerId=t,nl()&&(rl[e.workerId]=e)}function o2(t,e){if(!t.args)throw"Missing className while initializing worker";const[n]=t.args,r=rl[n];if(!r)throw`unknown worker class ${n}`;e.instance=new r(t.args.slice(1)),Io(t,void 0!==typeof e.instance)}async function s2(t,e){const{args:n}=t;if(!e.instance)throw"instance not initialized";let r;e.instance.terminate&&(r=await e.instance.terminate(...null!=n?n:[])),Io(t,r)}function l2(){const t={};onmessage=async e=>{const n=e.data;switch(n.type){case gr.INIT:o2(n,t);break;case gr.FORWARD:r2(n,t);break;case gr.TERMINATE:s2(n,t)}}}nl()&&l2();class Xs{static async createVideoReadable(t){return new Promise(((e,n)=>{const r=document.createElement("video");let i=new AbortController,o=new AbortController;r.addEventListener("canplay",(()=>{i.abort(),r.muted=!0,r.loop=!0,r.play().then((()=>{try{const t=r.captureStream(),n=new MediaStreamTrackProcessor(t.getVideoTracks()[0]);e(n.readable)}catch(t){n(t)}}))}),{once:!0,signal:o.signal}),r.addEventListener("error",(t=>{o.abort(),n("loading error:"+t)}),{once:!0,signal:i.signal}),r.crossOrigin="anonymous",r.src=t}))}static async createImageCanvas(t){const e=await(await fetch(t)).blob();return await createImageBitmap(e)}}async function il(t){return new Promise((e=>{setTimeout((()=>{e()}),t)}))}var ol=(t=>(t.PUSH="PUSH",t.POP="POP",t))(ol||{});class u2{constructor(t){Rt(this,"context"),Rt(this,"extension"),Rt(this,"queries",[]),Rt(this,"activeQuery"),this.context=t,this.extension=t.getExtension("EXT_disjoint_timer_query_webgl2")}start(){}stop(){this.activeQuery&&this.context.endQuery(this.extension.TIME_ELAPSED_EXT)}pushContext(t){this.createQuery("PUSH",t)}popContext(t){this.createQuery("POP",t)}createQuery(t,e){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:e,action:t,query:this.activeQuery})}async getResolvedQueries(){const t=(await Promise.all([...this.queries].map((t=>this.resolveQuery(t))))).filter((t=>t));for(let e=1;e<t.length;++e)t[e].timestamp+=t[e-1].duration+t[e-1].timestamp;return t}async resolveQuery(t){if(await this.awaitQueryAvailable(t)){if(!this.context.getParameter(this.extension.GPU_DISJOINT_EXT))return{...t,duration:this.context.getQueryParameter(t.query,this.context.QUERY_RESULT),timestamp:0};console.log("Disjointed query",t)}else console.log("Unawaitable query",t)}async awaitQueryAvailable(t){for(let e=0;e<10;++e){if(this.context.getQueryParameter(t.query,this.context.QUERY_RESULT_AVAILABLE))return t;await il(200)}}}
1
+ var du=Object.defineProperty,hu=(t,e,n)=>e in t?du(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,Rt=(t,e,n)=>(hu(t,"symbol"!=typeof e?e+"":e,n),n);function fu(){return new Promise(((t,e)=>{typeof MediaStreamTrackProcessor>"u"||typeof MediaStreamTrackGenerator>"u"?e("Your browser does not support the MediaStreamTrack API for Insertable Streams of Media."):t()}))}class or{}or.updates={transformer_new:"New transformer",transformer_null:"Null transformer"},or.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"};var Go={exports:{}},ks=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return t.apply(e,n)}},mu=ks,dr=Object.prototype.toString;function Xo(t){return Array.isArray(t)}function oo(t){return typeof t>"u"}function pu(t){return null!==t&&!oo(t)&&null!==t.constructor&&!oo(t.constructor)&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}function Es(t){return"[object ArrayBuffer]"===dr.call(t)}function bu(t){return"[object FormData]"===dr.call(t)}function yu(t){return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&Es(t.buffer)}function gu(t){return"string"==typeof t}function Zu(t){return"number"==typeof t}function Ks(t){return null!==t&&"object"==typeof t}function li(t){if("[object Object]"!==dr.call(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype}function vu(t){return"[object Date]"===dr.call(t)}function Gu(t){return"[object File]"===dr.call(t)}function Xu(t){return"[object Blob]"===dr.call(t)}function Us(t){return"[object Function]"===dr.call(t)}function Vu(t){return Ks(t)&&Us(t.pipe)}function Wu(t){return"[object URLSearchParams]"===dr.call(t)}function Ru(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function xu(){return(!(typeof navigator<"u")||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&(typeof window<"u"&&typeof document<"u")}function Vo(t,e){if(!(null===t||typeof t>"u"))if("object"!=typeof t&&(t=[t]),Xo(t))for(var n=0,r=t.length;n<r;n++)e.call(null,t[n],n,t);else for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&e.call(null,t[i],i,t)}function so(){var t={};function e(e,n){li(t[n])&&li(e)?t[n]=so(t[n],e):li(e)?t[n]=so({},e):Xo(e)?t[n]=e.slice():t[n]=e}for(var n=0,r=arguments.length;n<r;n++)Vo(arguments[n],e);return t}function Iu(t,e,n){return Vo(e,(function(e,r){t[r]=n&&"function"==typeof e?mu(e,n):e})),t}function Su(t){return 65279===t.charCodeAt(0)&&(t=t.slice(1)),t}var Qn={isArray:Xo,isArrayBuffer:Es,isBuffer:pu,isFormData:bu,isArrayBufferView:yu,isString:gu,isNumber:Zu,isObject:Ks,isPlainObject:li,isUndefined:oo,isDate:vu,isFile:Gu,isBlob:Xu,isFunction:Us,isStream:Vu,isURLSearchParams:Wu,isStandardBrowserEnv:xu,forEach:Vo,merge:so,extend:Iu,trim:Ru,stripBOM:Su},Rr=Qn;function ns(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var Ms=function(t,e,n){if(!e)return t;var r;if(n)r=n(e);else if(Rr.isURLSearchParams(e))r=e.toString();else{var i=[];Rr.forEach(e,(function(t,e){null===t||typeof t>"u"||(Rr.isArray(t)?e+="[]":t=[t],Rr.forEach(t,(function(t){Rr.isDate(t)?t=t.toISOString():Rr.isObject(t)&&(t=JSON.stringify(t)),i.push(ns(e)+"="+ns(t))})))})),r=i.join("&")}if(r){var o=t.indexOf("#");-1!==o&&(t=t.slice(0,o)),t+=(-1===t.indexOf("?")?"?":"&")+r}return t},Yu=Qn;function Ti(){this.handlers=[]}Ti.prototype.use=function(t,e,n){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1},Ti.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},Ti.prototype.forEach=function(t){Yu.forEach(this.handlers,(function(e){null!==e&&t(e)}))};var Tu=Ti,wu=Qn,Lu=function(t,e){wu.forEach(t,(function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])}))},Bs=function(t,e,n,r,i){return t.config=e,n&&(t.code=n),t.request=r,t.response=i,t.isAxiosError=!0,t.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}},t},Fu=Bs,As=function(t,e,n,r,i){var o=new Error(t);return Fu(o,e,n,r,i)},Hu=As,Cu=function(t,e,n){var r=n.config.validateStatus;n.status&&r&&!r(n.status)?e(Hu("Request failed with status code "+n.status,n.config,null,n.request,n)):t(n)},Qr=Qn,Nu=Qr.isStandardBrowserEnv()?{write:function(t,e,n,r,i,o){var a=[];a.push(t+"="+encodeURIComponent(e)),Qr.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),Qr.isString(r)&&a.push("path="+r),Qr.isString(i)&&a.push("domain="+i),!0===o&&a.push("secure"),document.cookie=a.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}},Ju=function(t){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)},ku=function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t},Eu=Ju,Ku=ku,Uu=function(t,e){return t&&!Eu(e)?Ku(t,e):e},ji=Qn,Mu=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"],Bu=function(t){var e,n,r,i={};return t&&ji.forEach(t.split("\n"),(function(t){if(r=t.indexOf(":"),e=ji.trim(t.substr(0,r)).toLowerCase(),n=ji.trim(t.substr(r+1)),e){if(i[e]&&Mu.indexOf(e)>=0)return;i[e]="set-cookie"===e?(i[e]?i[e]:[]).concat([n]):i[e]?i[e]+", "+n:n}})),i},rs=Qn,Au=rs.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function r(t){var r=t;return e&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return t=r(window.location.href),function(e){var n=rs.isString(e)?r(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return!0};function Wo(t){this.message=t}Wo.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},Wo.prototype.__CANCEL__=!0;var wi=Wo,Dr=Qn,ju=Cu,zu=Nu,Ou=Ms,Pu=Uu,_u=Bu,Qu=Au,zi=As,Du=Fi,$u=wi,is=function(t){return new Promise((function(e,n){var r,i=t.data,o=t.headers,a=t.responseType;function l(){t.cancelToken&&t.cancelToken.unsubscribe(r),t.signal&&t.signal.removeEventListener("abort",r)}Dr.isFormData(i)&&delete o["Content-Type"];var s=new XMLHttpRequest;if(t.auth){var c=t.auth.username||"",u=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";o.Authorization="Basic "+btoa(c+":"+u)}var d=Pu(t.baseURL,t.url);function h(){if(s){var r="getAllResponseHeaders"in s?_u(s.getAllResponseHeaders()):null,i={data:a&&"text"!==a&&"json"!==a?s.response:s.responseText,status:s.status,statusText:s.statusText,headers:r,config:t,request:s};ju((function(t){e(t),l()}),(function(t){n(t),l()}),i),s=null}}if(s.open(t.method.toUpperCase(),Ou(d,t.params,t.paramsSerializer),!0),s.timeout=t.timeout,"onloadend"in s?s.onloadend=h:s.onreadystatechange=function(){!s||4!==s.readyState||0===s.status&&(!s.responseURL||0!==s.responseURL.indexOf("file:"))||setTimeout(h)},s.onabort=function(){!s||(n(zi("Request aborted",t,"ECONNABORTED",s)),s=null)},s.onerror=function(){n(zi("Network Error",t,null,s)),s=null},s.ontimeout=function(){var e=t.timeout?"timeout of "+t.timeout+"ms exceeded":"timeout exceeded",r=t.transitional||Du.transitional;t.timeoutErrorMessage&&(e=t.timeoutErrorMessage),n(zi(e,t,r.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",s)),s=null},Dr.isStandardBrowserEnv()){var m=(t.withCredentials||Qu(d))&&t.xsrfCookieName?zu.read(t.xsrfCookieName):void 0;m&&(o[t.xsrfHeaderName]=m)}"setRequestHeader"in s&&Dr.forEach(o,(function(t,e){typeof i>"u"&&"content-type"===e.toLowerCase()?delete o[e]:s.setRequestHeader(e,t)})),Dr.isUndefined(t.withCredentials)||(s.withCredentials=!!t.withCredentials),a&&"json"!==a&&(s.responseType=t.responseType),"function"==typeof t.onDownloadProgress&&s.addEventListener("progress",t.onDownloadProgress),"function"==typeof t.onUploadProgress&&s.upload&&s.upload.addEventListener("progress",t.onUploadProgress),(t.cancelToken||t.signal)&&(r=function(t){!s||(n(!t||t&&t.type?new $u("canceled"):t),s.abort(),s=null)},t.cancelToken&&t.cancelToken.subscribe(r),t.signal&&(t.signal.aborted?r():t.signal.addEventListener("abort",r))),i||(i=null),s.send(i)}))},Un=Qn,os=Lu,qu=Bs,tc={"Content-Type":"application/x-www-form-urlencoded"};function ss(t,e){!Un.isUndefined(t)&&Un.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}function ec(){var t;return(typeof XMLHttpRequest<"u"||typeof process<"u"&&"[object process]"===Object.prototype.toString.call(process))&&(t=is),t}function nc(t,e,n){if(Un.isString(t))try{return(e||JSON.parse)(t),Un.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(n||JSON.stringify)(t)}var Li={transitional:{silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},adapter:ec(),transformRequest:[function(t,e){return os(e,"Accept"),os(e,"Content-Type"),Un.isFormData(t)||Un.isArrayBuffer(t)||Un.isBuffer(t)||Un.isStream(t)||Un.isFile(t)||Un.isBlob(t)?t:Un.isArrayBufferView(t)?t.buffer:Un.isURLSearchParams(t)?(ss(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):Un.isObject(t)||e&&"application/json"===e["Content-Type"]?(ss(e,"application/json"),nc(t)):t}],transformResponse:[function(t){var e=this.transitional||Li.transitional,n=e&&e.silentJSONParsing,r=e&&e.forcedJSONParsing,i=!n&&"json"===this.responseType;if(i||r&&Un.isString(t)&&t.length)try{return JSON.parse(t)}catch(t){if(i)throw"SyntaxError"===t.name?qu(t,this,"E_JSON_PARSE"):t}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};Un.forEach(["delete","get","head"],(function(t){Li.headers[t]={}})),Un.forEach(["post","put","patch"],(function(t){Li.headers[t]=Un.merge(tc)}));var Fi=Li,rc=Qn,ic=Fi,oc=function(t,e,n){var r=this||ic;return rc.forEach(n,(function(n){t=n.call(r,t,e)})),t},js=function(t){return!(!t||!t.__CANCEL__)},ls=Qn,Oi=oc,sc=js,lc=Fi,uc=wi;function Pi(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new uc("canceled")}var cc=function(t){return Pi(t),t.headers=t.headers||{},t.data=Oi.call(t,t.data,t.headers,t.transformRequest),t.headers=ls.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),ls.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||lc.adapter)(t).then((function(e){return Pi(t),e.data=Oi.call(t,e.data,e.headers,t.transformResponse),e}),(function(e){return sc(e)||(Pi(t),e&&e.response&&(e.response.data=Oi.call(t,e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))},Dn=Qn,zs=function(t,e){e=e||{};var n={};function r(t,e){return Dn.isPlainObject(t)&&Dn.isPlainObject(e)?Dn.merge(t,e):Dn.isPlainObject(e)?Dn.merge({},e):Dn.isArray(e)?e.slice():e}function i(n){return Dn.isUndefined(e[n])?Dn.isUndefined(t[n])?void 0:r(void 0,t[n]):r(t[n],e[n])}function o(t){if(!Dn.isUndefined(e[t]))return r(void 0,e[t])}function a(n){return Dn.isUndefined(e[n])?Dn.isUndefined(t[n])?void 0:r(void 0,t[n]):r(void 0,e[n])}function l(n){return n in e?r(t[n],e[n]):n in t?r(void 0,t[n]):void 0}var s={url:o,method:o,data:o,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:l};return Dn.forEach(Object.keys(t).concat(Object.keys(e)),(function(t){var e=s[t]||i,r=e(t);Dn.isUndefined(r)&&e!==l||(n[t]=r)})),n},Os={version:"0.25.0"},ac=Os.version,Ro={};["object","boolean","number","function","string","symbol"].forEach((function(t,e){Ro[t]=function(n){return typeof n===t||"a"+(e<1?"n ":" ")+t}}));var us={};function dc(t,e,n){if("object"!=typeof t)throw new TypeError("options must be an object");for(var r=Object.keys(t),i=r.length;i-- >0;){var o=r[i],a=e[o];if(a){var l=t[o],s=void 0===l||a(l,o,t);if(!0!==s)throw new TypeError("option "+o+" must be "+s)}else if(!0!==n)throw Error("Unknown option "+o)}}Ro.transitional=function(t,e,n){function r(t,e){return"[Axios v"+ac+"] Transitional option '"+t+"'"+e+(n?". "+n:"")}return function(n,i,o){if(!1===t)throw new Error(r(i," has been removed"+(e?" in "+e:"")));return e&&!us[i]&&(us[i]=!0,console.warn(r(i," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(n,i,o)}};var hc={assertOptions:dc,validators:Ro},Ps=Qn,fc=Ms,cs=Tu,as=cc,Hi=zs,_s=hc,xr=_s.validators;function zr(t){this.defaults=t,this.interceptors={request:new cs,response:new cs}}zr.prototype.request=function(t,e){if("string"==typeof t?(e=e||{}).url=t:e=t||{},!e.url)throw new Error("Provided config url is not valid");(e=Hi(this.defaults,e)).method?e.method=e.method.toLowerCase():this.defaults.method?e.method=this.defaults.method.toLowerCase():e.method="get";var n=e.transitional;void 0!==n&&_s.assertOptions(n,{silentJSONParsing:xr.transitional(xr.boolean),forcedJSONParsing:xr.transitional(xr.boolean),clarifyTimeoutError:xr.transitional(xr.boolean)},!1);var r=[],i=!0;this.interceptors.request.forEach((function(t){"function"==typeof t.runWhen&&!1===t.runWhen(e)||(i=i&&t.synchronous,r.unshift(t.fulfilled,t.rejected))}));var o,a=[];if(this.interceptors.response.forEach((function(t){a.push(t.fulfilled,t.rejected)})),!i){var l=[as,void 0];for(Array.prototype.unshift.apply(l,r),l=l.concat(a),o=Promise.resolve(e);l.length;)o=o.then(l.shift(),l.shift());return o}for(var s=e;r.length;){var c=r.shift(),u=r.shift();try{s=c(s)}catch(t){u(t);break}}try{o=as(s)}catch(t){return Promise.reject(t)}for(;a.length;)o=o.then(a.shift(),a.shift());return o},zr.prototype.getUri=function(t){if(!t.url)throw new Error("Provided config url is not valid");return t=Hi(this.defaults,t),fc(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")},Ps.forEach(["delete","get","head","options"],(function(t){zr.prototype[t]=function(e,n){return this.request(Hi(n||{},{method:t,url:e,data:(n||{}).data}))}})),Ps.forEach(["post","put","patch"],(function(t){zr.prototype[t]=function(e,n,r){return this.request(Hi(r||{},{method:t,url:e,data:n}))}}));var mc=zr,pc=wi;function Cr(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var n=this;this.promise.then((function(t){if(n._listeners){var e,r=n._listeners.length;for(e=0;e<r;e++)n._listeners[e](t);n._listeners=null}})),this.promise.then=function(t){var e,r=new Promise((function(t){n.subscribe(t),e=t})).then(t);return r.cancel=function(){n.unsubscribe(e)},r},t((function(t){n.reason||(n.reason=new pc(t),e(n.reason))}))}Cr.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},Cr.prototype.subscribe=function(t){this.reason?t(this.reason):this._listeners?this._listeners.push(t):this._listeners=[t]},Cr.prototype.unsubscribe=function(t){if(this._listeners){var e=this._listeners.indexOf(t);-1!==e&&this._listeners.splice(e,1)}},Cr.source=function(){var t;return{token:new Cr((function(e){t=e})),cancel:t}};var bc=Cr,yc=function(t){return function(e){return t.apply(null,e)}},gc=Qn,Zc=function(t){return gc.isObject(t)&&!0===t.isAxiosError},ds=Qn,vc=ks,ui=mc,Gc=zs,Xc=Fi;function Qs(t){var e=new ui(t),n=vc(ui.prototype.request,e);return ds.extend(n,ui.prototype,e),ds.extend(n,e),n.create=function(e){return Qs(Gc(t,e))},n}var rr=Qs(Xc);rr.Axios=ui,rr.Cancel=wi,rr.CancelToken=bc,rr.isCancel=js,rr.VERSION=Os.version,rr.all=function(t){return Promise.all(t)},rr.spread=yc,rr.isAxiosError=Zc,Go.exports=rr,Go.exports.default=rr;var Vc=Go.exports;class Se{isEmpty(){return!this.isPresent()}static of(t){if(null!=t)return new hs(t);throw new TypeError("The passed value was null or undefined.")}static ofNonNull(t){return Se.of(t)}static ofNullable(t){return null!=t?new hs(t):new fs}static empty(){return new fs}static from(t){switch(t.kind){case"present":return Se.of(t.value);case"empty":return Se.empty();default:throw new TypeError("The passed value was not an Option type.")}}}class hs extends Se{constructor(t){super(),this.payload=t}isPresent(){return!0}get(){return this.payload}ifPresent(t){t(this.payload)}ifPresentOrElse(t,e){t(this.payload)}filter(t){return t(this.payload)?this:Se.empty()}map(t){const e=t(this.payload);return Se.ofNullable(e)}flatMap(t){return t(this.payload)}or(t){return this}orElse(t){return this.payload}orElseGet(t){return this.payload}orElseThrow(t){return this.payload}orNull(){return this.payload}orUndefined(){return this.payload}toOption(){return{kind:"present",value:this.payload}}matches(t){return t.present(this.payload)}toJSON(t){return this.payload}}class fs extends Se{isPresent(){return!1}constructor(){super()}get(){throw new TypeError("The optional is not present.")}ifPresent(t){}ifPresentOrElse(t,e){e()}filter(t){return this}map(t){return Se.empty()}flatMap(t){return Se.empty()}or(t){return t()}orElse(t){return t}orElseGet(t){return this.orElse(t())}orElseThrow(t){throw t()}orNull(){return null}orUndefined(){}toOption(){return{kind:"empty"}}matches(t){return t.empty()}toJSON(t){return null}}const Wc="2.0.0";function Rc(t){globalThis._vonageMediaProcessorMetadata=t}function Ds(){return globalThis._vonageMediaProcessorMetadata}class $n{constructor(){const t=Ds();this._report={action:Se.empty(),applicationId:Se.ofNullable(void 0!==t&&null!=t?t.appId:null),timestamp:Date.now(),fps:Se.empty(),framesTransformed:Se.empty(),guid:Se.empty(),highestFrameTransformCpu:Se.empty(),message:Se.empty(),source:Se.ofNullable(void 0!==t&&null!=t?t.sourceType:null),transformedFps:Se.empty(),transformerType:Se.empty(),variation:Se.empty(),videoHeight:Se.empty(),videoWidth:Se.empty(),version:Wc,error:Se.empty(),proxyUrl:Se.ofNullable(void 0!==t&&null!=t?t.proxyUrl:null)}}action(t){return this._report.action=Se.ofNullable(t),this}framesTransformed(t){return this._report.framesTransformed=Se.ofNullable(t),this}fps(t){return this._report.fps=Se.ofNullable(t),this}guid(t){return this._report.guid=Se.ofNullable(t),this}message(t){return this._report.message=Se.ofNullable(t),this}transformedFps(t){return this._report.transformedFps=Se.ofNullable(t),this}transformerType(t){return this._report.transformerType=Se.ofNullable(t),this}variation(t){return this._report.variation=Se.ofNullable(t),this}videoHeight(t){return this._report.videoHeight=Se.ofNullable(t),this}videoWidth(t){return this._report.videoWidth=Se.ofNullable(t),this}error(t){return this._report.error=Se.ofNullable(t),this}build(){return this._report}}const xc=t=>JSON.stringify(t,((t,e)=>{if(null!==e)return e}));class qn{static report(t){return new Promise(((e,n)=>{if(t.applicationId.isEmpty()||t.source.isEmpty())return void e("success");let r=Vc.create(),i="hlg.tokbox.com/prod/logging/vcp_webrtc";if(t.proxyUrl.isEmpty())i="https://"+i;else{let e;e="/"!==t.proxyUrl.get().slice(t.proxyUrl.get().length-1)?t.proxyUrl.get()+"/":t.proxyUrl.get(),i=e+i}var o;r.post(i,(o=t,JSON.stringify(o,((t,e)=>{if(null!==e)return e}))),{timeout:1e4,timeoutErrorMessage:"Request timeout",headers:{"Content-Type":"application/json"}}).then((t=>{console.log(t),e("success")})).catch((t=>{console.log(t),n(t)}))}))}}var $r,Ic=new Uint8Array(16);function Sc(){if(!$r&&!($r=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return $r(Ic)}var Yc=/^(?:[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 Tc(t){return"string"==typeof t&&Yc.test(t)}for(var Kn=[],_i=0;_i<256;++_i)Kn.push((_i+256).toString(16).substr(1));function wc(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=(Kn[t[e+0]]+Kn[t[e+1]]+Kn[t[e+2]]+Kn[t[e+3]]+"-"+Kn[t[e+4]]+Kn[t[e+5]]+"-"+Kn[t[e+6]]+Kn[t[e+7]]+"-"+Kn[t[e+8]]+Kn[t[e+9]]+"-"+Kn[t[e+10]]+Kn[t[e+11]]+Kn[t[e+12]]+Kn[t[e+13]]+Kn[t[e+14]]+Kn[t[e+15]]).toLowerCase();if(!Tc(n))throw TypeError("Stringified UUID is invalid");return n}function $s(t,e,n){var r=(t=t||{}).random||(t.rng||Sc)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,e){n=n||0;for(var i=0;i<16;++i)e[n+i]=r[i];return e}return wc(r)}const lr=new WeakMap,ci=new WeakMap,Er=new WeakMap,lo=Symbol("anyProducer"),ms=Promise.resolve(),fi=Symbol("listenerAdded"),mi=Symbol("listenerRemoved");let Qi=!1;function Ir(t){if("string"!=typeof t&&"symbol"!=typeof t)throw new TypeError("eventName must be a string or a symbol")}function qr(t){if("function"!=typeof t)throw new TypeError("listener must be a function")}function Sr(t,e){const n=ci.get(t);return n.has(e)||n.set(e,new Set),n.get(e)}function Kr(t,e){const n="string"==typeof e||"symbol"==typeof e?e:lo,r=Er.get(t);return r.has(n)||r.set(n,new Set),r.get(n)}function Lc(t,e,n){const r=Er.get(t);if(r.has(e))for(const t of r.get(e))t.enqueue(n);if(r.has(lo)){const t=Promise.all([e,n]);for(const e of r.get(lo))e.enqueue(t)}}function ps(t,e){e=Array.isArray(e)?e:[e];let n=!1,r=()=>{},i=[];const o={enqueue(t){i.push(t),r()},finish(){n=!0,r()}};for(const n of e)Kr(t,n).add(o);return{async next(){return i?0===i.length?n?(i=void 0,this.next()):(await new Promise((t=>{r=t})),this.next()):{done:!1,value:await i.shift()}:{done:!0}},async return(n){i=void 0;for(const n of e)Kr(t,n).delete(o);return r(),arguments.length>0?{done:!0,value:await n}:{done:!0}},[Symbol.asyncIterator](){return this}}}function bs(t){if(void 0===t)return ys;if(!Array.isArray(t))throw new TypeError("`methodNames` must be an array of strings");for(const e of t)if(!ys.includes(e))throw"string"!=typeof e?new TypeError("`methodNames` element must be a string"):new Error(`${e} is not Emittery method`);return t}const Di=t=>t===fi||t===mi;class vr{static mixin(t,e){return e=bs(e),n=>{if("function"!=typeof n)throw new TypeError("`target` must be function");for(const t of e)if(void 0!==n.prototype[t])throw new Error(`The property \`${t}\` already exists on \`target\``);Object.defineProperty(n.prototype,t,{enumerable:!1,get:function(){return Object.defineProperty(this,t,{enumerable:!1,value:new vr}),this[t]}});const r=e=>function(...n){return this[t][e](...n)};for(const t of e)Object.defineProperty(n.prototype,t,{enumerable:!1,value:r(t)});return n}}static get isDebugEnabled(){if("object"!=typeof process)return Qi;const{env:t}=process||{env:{}};return"emittery"===t.DEBUG||"*"===t.DEBUG||Qi}static set isDebugEnabled(t){Qi=t}constructor(t={}){lr.set(this,new Set),ci.set(this,new Map),Er.set(this,new Map),this.debug=t.debug||{},void 0===this.debug.enabled&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(t,e,n,r)=>{r=JSON.stringify(r),"symbol"==typeof n&&(n=n.toString());const i=new Date,o=`${i.getHours()}:${i.getMinutes()}:${i.getSeconds()}.${i.getMilliseconds()}`;console.log(`[${o}][emittery:${t}][${e}] Event Name: ${n}\n\tdata: ${r}`)})}logIfDebugEnabled(t,e,n){(vr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(t,this.debug.name,e,n)}on(t,e){qr(e),t=Array.isArray(t)?t:[t];for(const n of t)Ir(n),Sr(this,n).add(e),this.logIfDebugEnabled("subscribe",n,void 0),Di(n)||this.emit(fi,{eventName:n,listener:e});return this.off.bind(this,t,e)}off(t,e){qr(e),t=Array.isArray(t)?t:[t];for(const n of t)Ir(n),Sr(this,n).delete(e),this.logIfDebugEnabled("unsubscribe",n,void 0),Di(n)||this.emit(mi,{eventName:n,listener:e})}once(t){return new Promise((e=>{const n=this.on(t,(t=>{n(),e(t)}))}))}events(t){t=Array.isArray(t)?t:[t];for(const e of t)Ir(e);return ps(this,t)}async emit(t,e){Ir(t),this.logIfDebugEnabled("emit",t,e),Lc(this,t,e);const n=Sr(this,t),r=lr.get(this),i=[...n],o=Di(t)?[]:[...r];await ms,await Promise.all([...i.map((async t=>{if(n.has(t))return t(e)})),...o.map((async n=>{if(r.has(n))return n(t,e)}))])}async emitSerial(t,e){Ir(t),this.logIfDebugEnabled("emitSerial",t,e);const n=Sr(this,t),r=lr.get(this),i=[...n],o=[...r];await ms;for(const t of i)n.has(t)&&await t(e);for(const n of o)r.has(n)&&await n(t,e)}onAny(t){return qr(t),this.logIfDebugEnabled("subscribeAny",void 0,void 0),lr.get(this).add(t),this.emit(fi,{listener:t}),this.offAny.bind(this,t)}anyEvent(){return ps(this)}offAny(t){qr(t),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(mi,{listener:t}),lr.get(this).delete(t)}clearListeners(t){t=Array.isArray(t)?t:[t];for(const e of t)if(this.logIfDebugEnabled("clear",e,void 0),"string"==typeof e||"symbol"==typeof e){Sr(this,e).clear();const t=Kr(this,e);for(const e of t)e.finish();t.clear()}else{lr.get(this).clear();for(const t of ci.get(this).values())t.clear();for(const t of Er.get(this).values()){for(const e of t)e.finish();t.clear()}}}listenerCount(t){t=Array.isArray(t)?t:[t];let e=0;for(const n of t)if("string"!=typeof n){typeof n<"u"&&Ir(n),e+=lr.get(this).size;for(const t of ci.get(this).values())e+=t.size;for(const t of Er.get(this).values())e+=t.size}else e+=lr.get(this).size+Sr(this,n).size+Kr(this,n).size+Kr(this).size;return e}bindMethods(t,e){if("object"!=typeof t||null===t)throw new TypeError("`target` must be an object");e=bs(e);for(const n of e){if(void 0!==t[n])throw new Error(`The property \`${n}\` already exists on \`target\``);Object.defineProperty(t,n,{enumerable:!1,value:this[n].bind(this)})}}}const ys=Object.getOwnPropertyNames(vr.prototype).filter((t=>"constructor"!==t));Object.defineProperty(vr,"listenerAdded",{value:fi,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(vr,"listenerRemoved",{value:mi,writable:!1,enumerable:!0,configurable:!1});var xo=vr;function Fc(t){return"object"==typeof t&&null!==t&&"message"in t&&"string"==typeof t.message}function Hc(t){if(Fc(t))return t;try{return new Error(JSON.stringify(t))}catch{return new Error(String(t))}}function $i(t){return Hc(t).message}var Cc=(t=>(t.FPS_DROP="fps_drop",t))(Cc||{}),Nc=(t=>(t.start="start",t.transform="transform",t.flush="flush",t))(Nc||{}),uo=(t=>(t.pipeline_ended="pipeline_ended",t.pipeline_ended_with_error="pipeline_ended_with_error",t.pipeline_started="pipeline_started",t.pipeline_started_with_error="pipeline_started_with_error",t.pipeline_restarted="pipeline_restarted",t.pipeline_restarted_with_error="pipeline_restarted_with_error",t))(uo||{});const Jc=500,kc=.8;class Ec extends xo{constructor(t,e){super(),this.index_=e,this.uuid_=$s(),this.framesTransformed_=0,this.transformer_=t,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 t&&(this.transformerType_=t.getTransformerType());const n=(new $n).action("MediaTransformer").guid(this.uuid_).transformerType(this.transformerType_).variation("Create").build();qn.report(n)}setTrackExpectedRate(t){this.trackExpectedRate_=t}async start(t){if(this.controller_=t,this.transformer_&&"function"==typeof this.transformer_.start)try{await this.transformer_.start(t)}catch(t){const e=(new $n).action("MediaTransformer").guid(this.uuid_).message(or.errors.transformer_start).transformerType(this.transformerType_).variation("Error").error($i(t)).build();qn.report(e);const n={eventMetaData:{transformerIndex:this.index_},error:t,function:"start"};this.emit("error",n)}}async transform(t,e){var n,r,i,o;if(0===this.mediaTransformerQosReportStartTimestamp_&&(this.mediaTransformerQosReportStartTimestamp_=Date.now()),t instanceof VideoFrame&&(this.videoHeight_=null!=(n=null==t?void 0:t.displayHeight)?n:0,this.videoWidth_=null!=(r=null==t?void 0:t.displayWidth)?r:0),++this.framesFromSource_,this.transformer_)if(this.shouldStop_)console.warn("[Pipeline] flush from transform"),t.close(),this.flush(e),e.terminate();else try{await(null==(o=(i=this.transformer_).transform)?void 0:o.call(i,t,e)),++this.framesTransformed_,this.framesTransformed_===Jc&&this.mediaTransformerQosReport()}catch(t){const e=(new $n).action("MediaTransformer").guid(this.uuid_).message(or.errors.transformer_transform).transformerType(this.transformerType_).variation("Error").error($i(t)).build();qn.report(e);const n={eventMetaData:{transformerIndex:this.index_},error:t,function:"transform"};this.emit("error",n)}}async flush(t){if(this.transformer_&&"function"==typeof this.transformer_.flush&&!this.isFlashed_){this.isFlashed_=!0;try{await this.transformer_.flush(t)}catch(t){const e=(new $n).action("MediaTransformer").guid(this.uuid_).message(or.errors.transformer_flush).transformerType(this.transformerType_).variation("Error").error($i(t)).build();qn.report(e);const n={eventMetaData:{transformerIndex:this.index_},error:t,function:"flush"};this.emit("error",n)}}this.mediaTransformerQosReport();const e=(new $n).action("MediaTransformer").guid(this.uuid_).transformerType(this.transformerType_).variation("Delete").build();qn.report(e)}stop(){console.log("[Pipeline] Stop stream."),this.controller_&&(this.flush(this.controller_),this.controller_.terminate()),this.shouldStop_=!0}mediaTransformerQosReport(){let t=(Date.now()-this.mediaTransformerQosReportStartTimestamp_)/1e3,e=this.framesFromSource_/t,n=this.framesTransformed_/t;if(-1!=this.trackExpectedRate_&&this.trackExpectedRate_*kc>e){const t={eventMetaData:{transformerIndex:this.index_},warningType:"fps_drop",dropInfo:{requested:this.trackExpectedRate_,current:e}};this.emit("warn",t)}const r=(new $n).action("MediaTransformer").fps(e).transformedFps(n).framesTransformed(this.framesTransformed_).guid(this.uuid_).transformerType(this.transformerType_).videoHeight(this.videoHeight_).videoWidth(this.videoWidth_).variation("QoS").build();qn.report(r),this.mediaTransformerQosReportStartTimestamp_=0,this.framesFromSource_=0,this.framesTransformed_=0}}class Kc extends xo{constructor(t){super(),this.transformers_=[],this.trackExpectedRate_=-1;for(let e=0;e<t.length;e++){let n=new Ec(t[e],e);n.on("error",(t=>{this.emit("error",t)})),n.on("warn",(t=>{this.emit("warn",t)})),this.transformers_.push(n)}}setTrackExpectedRate(t){this.trackExpectedRate_=t;for(let t of this.transformers_)t.setTrackExpectedRate(this.trackExpectedRate_)}async start(t,e){if(this.transformers_&&0!==this.transformers_.length){try{let n=t;for(let e of this.transformers_)t=t.pipeThrough(new TransformStream(e));t.pipeTo(e).then((async()=>{console.log("[Pipeline] Setup."),await e.abort(),await n.cancel(),this.emit("pipelineInfo","pipeline_ended")})).catch((async r=>{t.cancel().then((()=>{console.log("[Pipeline] Shutting down streams after abort.")})).catch((t=>{console.error("[Pipeline] Error from stream transform:",t)})),await e.abort(r),await n.cancel(r),this.emit("pipelineInfo","pipeline_ended_with_error")}))}catch{return this.emit("pipelineInfo","pipeline_started_with_error"),void this.destroy()}this.emit("pipelineInfo","pipeline_started"),console.log("[Pipeline] Pipeline started.")}else console.log("[Pipeline] No transformers.")}async destroy(){console.log("[Pipeline] Destroying Pipeline.");for(let t of this.transformers_)t.stop()}}class Uc extends xo{constructor(){super(),this.uuid_=$s(),this.trackExpectedRate_=-1;const t=(new $n).action("MediaProcessor").guid(this.uuid_).variation("Create").build();qn.report(t)}setTrackExpectedRate(t){this.trackExpectedRate_=t,this.pipeline_&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_)}transform(t,e){return this.readable_=t,this.writable_=e,this.transformInternal()}transformInternal(){return new Promise(((t,e)=>{if(!this.transformers_||0===this.transformers_.length){const t=(new $n).action("MediaProcessor").guid(this.uuid_).message(or.errors.transformer_none).variation("Error").build();return qn.report(t),void e("[MediaProcessor] Need to set transformers.")}if(!this.readable_){const t=(new $n).action("MediaProcessor").guid(this.uuid_).message(or.errors.readable_null).variation("Error").build();return qn.report(t),void e("[MediaProcessor] Readable is null.")}if(!this.writable_){const t=(new $n).action("MediaProcessor").guid(this.uuid_).message(or.errors.writable_null).variation("Error").build();return qn.report(t),void e("[MediaProcessor] Writable is null.")}let n=!1;this.pipeline_&&(n=!0,this.pipeline_.clearListeners(),this.pipeline_.destroy()),this.pipeline_=new Kc(this.transformers_),this.pipeline_.on("warn",(t=>{this.emit("warn",t)})),this.pipeline_.on("error",(t=>{this.emit("error",t)})),this.pipeline_.on("pipelineInfo",(t=>{n&&("pipeline_started"===t?t=uo.pipeline_restarted:"pipeline_started_with_error"===t&&(t=uo.pipeline_restarted_with_error)),this.emit("pipelineInfo",t)})),-1!=this.trackExpectedRate_&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_),this.pipeline_.start(this.readable_,this.writable_).then((()=>{t()})).catch((t=>{e(t)}))}))}setTransformers(t){const e=(new $n).action("MediaProcessor").guid(this.uuid_).message(or.updates.transformer_new).variation("Update").build();return qn.report(e),this.transformers_=t,this.readable_&&this.writable_?this.transformInternal():Promise.resolve()}destroy(){return new Promise((t=>{this.pipeline_&&this.pipeline_.destroy();const e=(new $n).action("MediaProcessor").guid(this.uuid_).variation("Delete").build();qn.report(e),t()}))}}class Mc{constructor(){this.processor_=null,this.generator_=null}init(t){return new Promise(((e,n)=>{try{this.processor_=new MediaStreamTrackProcessor(t)}catch(t){console.log(`[InsertableStreamHelper] MediaStreamTrackProcessor failed: ${t}`),n(t)}try{"audio"===t.kind?this.generator_=new MediaStreamTrackGenerator({kind:"audio"}):"video"===t.kind?this.generator_=new MediaStreamTrackGenerator({kind:"video"}):n("kind not supported")}catch(t){console.log(`[InsertableStreamHelper] MediaStreamTrackGenerator failed: ${t}`),n(t)}e()}))}getReadable(){return this.processor_.readable}getWriteable(){return this.generator_.writable}getProccesorTrack(){return this.generator_}}class Bc{constructor(t){this.insertableStreamHelper_=new Mc,this.mediaProcessor_=t}setTrack(t){return new Promise(((e,n)=>{this.insertableStreamHelper_.init(t).then((()=>{this.mediaProcessor_.transform(this.insertableStreamHelper_.getReadable(),this.insertableStreamHelper_.getWriteable()).then((()=>{e(this.insertableStreamHelper_.getProccesorTrack())})).catch((t=>{n(t)}))})).catch((t=>{n(t)}))}))}destroy(){return new Promise(((t,e)=>{this.mediaProcessor_?this.mediaProcessor_.destroy().then((()=>{t()})).catch((t=>{e(t)})):e("no processor")}))}}var ai=(t=>(t.Low="Low",t.High="High",t))(ai||{});const Ac=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 jc=function(){var t=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return function(e){var n,r,i=typeof(e=e||{})<"u"?e:{};i.ready=new Promise((function(t,e){n=t,r=e}));var o,a={};for(o in i)i.hasOwnProperty(o)&&(a[o]=i[o]);var l="./this.program",s=function(t,e){throw e},c="";typeof document<"u"&&document.currentScript&&(c=document.currentScript.src),t&&(c=t),c=0!==c.indexOf("blob:")?c.substr(0,c.replace(/[?#].*/,"").lastIndexOf("/")+1):"";var u,d=i.print||console.log.bind(console),h=i.printErr||console.warn.bind(console);for(o in a)a.hasOwnProperty(o)&&(i[o]=a[o]);a=null,i.arguments&&i.arguments,i.thisProgram&&(l=i.thisProgram),i.quit&&(s=i.quit),i.wasmBinary&&(u=i.wasmBinary);var m=i.noExitRuntime||!0;"object"!=typeof WebAssembly&&H("no native wasm support detected");var f,p,b,g,y,Z=!1,v=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function G(t,e,n){for(var r=e+n,i=e;t[i]&&!(i>=r);)++i;if(i-e>16&&t.subarray&&v)return v.decode(t.subarray(e,i));for(var o="";e<i;){var a=t[e++];if(128&a){var l=63&t[e++];if(192!=(224&a)){var s=63&t[e++];if((a=224==(240&a)?(15&a)<<12|l<<6|s:(7&a)<<18|l<<12|s<<6|63&t[e++])<65536)o+=String.fromCharCode(a);else{var c=a-65536;o+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else o+=String.fromCharCode((31&a)<<6|l)}else o+=String.fromCharCode(a)}return o}function X(t,e){return t?G(g,t,e):""}function W(t,e){return t%e>0&&(t+=e-t%e),t}function V(t){p=t,i.HEAP8=b=new Int8Array(t),i.HEAP16=new Int16Array(t),i.HEAP32=y=new Int32Array(t),i.HEAPU8=g=new Uint8Array(t),i.HEAPU16=new Uint16Array(t),i.HEAPU32=new Uint32Array(t),i.HEAPF32=new Float32Array(t),i.HEAPF64=new Float64Array(t)}i.INITIAL_MEMORY;var R,x=[],I=[],Y=[];var w=0,S=null;function H(t){i.onAbort&&i.onAbort(t),h(t="Aborted("+t+")"),Z=!0,t+=". Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(t);throw r(e),e}i.preloadedImages={},i.preloadedAudios={};var F,L,C;function T(t){return t.startsWith("data:application/octet-stream;base64,")}function k(t){try{if(t==F&&u)return new Uint8Array(u);throw"both async and sync fetching of the wasm failed"}catch(t){H(t)}}function J(t){for(;t.length>0;){var e=t.shift();if("function"!=typeof e){var n=e.func;"number"==typeof n?void 0===e.arg?R.get(n)():R.get(n)(e.arg):n(void 0===e.arg?null:e.arg)}else e(i)}}T(F="tflite-simd.wasm")||(L=F,F=i.locateFile?i.locateFile(L,c):c+L),C=function(){return performance.now()};function N(t){try{return f.grow(t-p.byteLength+65535>>>16),V(f.buffer),1}catch{}}var K={};function U(){if(!U.strings){var t={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:l||"./this.program"};for(var e in K)void 0===K[e]?delete t[e]:t[e]=K[e];var n=[];for(var e in t)n.push(e+"="+t[e]);U.strings=n}return U.strings}var j={mappings:{},buffers:[null,[],[]],printChar:function(t,e){var n=j.buffers[t];0===e||10===e?((1===t?d:h)(G(n,0)),n.length=0):n.push(e)},varargs:void 0,get:function(){return j.varargs+=4,y[j.varargs-4>>2]},getStr:function(t){return X(t)},get64:function(t,e){return t}};var z={a:function(t,e,n,r){H("Assertion failed: "+X(t)+", at: "+[e?X(e):"unknown filename",n,r?X(r):"unknown function"])},e:function(t,e){H("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")},d:function(t,e){H("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")},b:function(){H("")},n:function(t,e){var n;if(0===t)n=Date.now();else{if(1!==t&&4!==t)return function(t){y[M()>>2]=t}(28),-1;n=C()}return y[e>>2]=n/1e3|0,y[e+4>>2]=n%1e3*1e3*1e3|0,0},h:function(){return 2147483648},l:function(t,e,n){g.copyWithin(t,e,e+n)},m:function(t){var e=g.length,n=2147483648;if((t>>>=0)>n)return!1;for(var r=1;r<=4;r*=2){var i=e*(1+.2/r);if(i=Math.min(i,t+100663296),N(Math.min(n,W(Math.max(t,i),65536))))return!0}return!1},p:function(t){for(var e=C();C()-e<t;);},f:function(t,e){var n=0;return U().forEach((function(r,i){var o=e+n;y[t+4*i>>2]=o,function(t,e,n){for(var r=0;r<t.length;++r)b[e++>>0]=t.charCodeAt(r);n||(b[e>>0]=0)}(r,o),n+=r.length+1})),0},g:function(t,e){var n=U();y[t>>2]=n.length;var r=0;return n.forEach((function(t){r+=t.length+1})),y[e>>2]=r,0},j:function(t){!function(t,e){!function(t){m||(i.onExit&&i.onExit(t),Z=!0),s(t,new E(t))}(t)}(t)},i:function(t){return 0},k:function(t,e,n,r,i){},c:function(t,e,n,r){for(var i=0,o=0;o<n;o++){for(var a=y[e+8*o>>2],l=y[e+(8*o+4)>>2],s=0;s<l;s++)j.printChar(t,g[a+s]);i+=l}return y[r>>2]=i,0},o:function t(e,n){t.randomDevice||(t.randomDevice=function(){if("object"==typeof crypto&&"function"==typeof crypto.getRandomValues){var t=new Uint8Array(1);return function(){return crypto.getRandomValues(t),t[0]}}return function(){H("randomDevice")}}());for(var r=0;r<n;r++)b[e+r>>0]=t.randomDevice();return 0}};(function(){var t={a:z};function e(t,e){var n=t.exports;i.asm=n,V((f=i.asm.q).buffer),R=i.asm.E,function(t){I.unshift(t)}(i.asm.r),function(t){if(w--,i.monitorRunDependencies&&i.monitorRunDependencies(w),0==w&&S){var e=S;S=null,e()}}()}function n(t){e(t.instance)}function o(e){return(u||"function"!=typeof fetch?Promise.resolve().then((function(){return k(F)})):fetch(F,{credentials:"same-origin"}).then((function(t){if(!t.ok)throw"failed to load wasm binary file at '"+F+"'";return t.arrayBuffer()})).catch((function(){return k(F)}))).then((function(e){return WebAssembly.instantiate(e,t)})).then((function(t){return t})).then(e,(function(t){h("failed to asynchronously prepare wasm: "+t),H(t)}))}if(w++,i.monitorRunDependencies&&i.monitorRunDependencies(w),i.instantiateWasm)try{return i.instantiateWasm(t,e)}catch(t){return h("Module.instantiateWasm callback failed with error: "+t),!1}(u||"function"!=typeof WebAssembly.instantiateStreaming||T(F)||"function"!=typeof fetch?o(n):fetch(F,{credentials:"same-origin"}).then((function(e){return WebAssembly.instantiateStreaming(e,t).then(n,(function(t){return h("wasm streaming compile failed: "+t),h("falling back to ArrayBuffer instantiation"),o(n)}))}))).catch(r)})(),i.___wasm_call_ctors=function(){return(i.___wasm_call_ctors=i.asm.r).apply(null,arguments)},i._getModelBufferMemoryOffset=function(){return(i._getModelBufferMemoryOffset=i.asm.s).apply(null,arguments)},i._getInputMemoryOffset=function(){return(i._getInputMemoryOffset=i.asm.t).apply(null,arguments)},i._getInputHeight=function(){return(i._getInputHeight=i.asm.u).apply(null,arguments)},i._getInputWidth=function(){return(i._getInputWidth=i.asm.v).apply(null,arguments)},i._getInputChannelCount=function(){return(i._getInputChannelCount=i.asm.w).apply(null,arguments)},i._getOutputMemoryOffset=function(){return(i._getOutputMemoryOffset=i.asm.x).apply(null,arguments)},i._getOutputHeight=function(){return(i._getOutputHeight=i.asm.y).apply(null,arguments)},i._getOutputWidth=function(){return(i._getOutputWidth=i.asm.z).apply(null,arguments)},i._getOutputChannelCount=function(){return(i._getOutputChannelCount=i.asm.A).apply(null,arguments)},i._loadModel=function(){return(i._loadModel=i.asm.B).apply(null,arguments)},i._runInference=function(){return(i._runInference=i.asm.C).apply(null,arguments)},i._isGPUEnabled=function(){return(i._isGPUEnabled=i.asm.D).apply(null,arguments)};var B,M=i.___errno_location=function(){return(M=i.___errno_location=i.asm.F).apply(null,arguments)};function E(t){this.name="ExitStatus",this.message="Program terminated with exit("+t+")",this.status=t}function A(t){function e(){B||(B=!0,i.calledRun=!0,!Z&&(J(I),n(i),i.onRuntimeInitialized&&i.onRuntimeInitialized(),function(){if(i.postRun)for("function"==typeof i.postRun&&(i.postRun=[i.postRun]);i.postRun.length;)t=i.postRun.shift(),Y.unshift(t);var t;J(Y)}()))}w>0||(function(){if(i.preRun)for("function"==typeof i.preRun&&(i.preRun=[i.preRun]);i.preRun.length;)t=i.preRun.shift(),x.unshift(t);var t;J(x)}(),w>0)||(i.setStatus?(i.setStatus("Running..."),setTimeout((function(){setTimeout((function(){i.setStatus("")}),1),e()}),1)):e())}if(S=function t(){B||A(),B||(S=t)},i.run=A,i.preInit)for("function"==typeof i.preInit&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()();return A(),e.ready}}();class zc{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 Oc="https://d3opqjmqzxf057.cloudfront.net/vonage-tensorflow-wasm/tflite-simd-wasm/1.1.3/",Pc="https://d3opqjmqzxf057.cloudfront.net/ml/selfie_segmentation/4.0.0/";async function _c(t=Oc,e=Pc){let n=new zc;return new Promise((function(r,i){(async function(){return jc({locateFile:function(e){return t+e}})})().then((t=>{if(null===t)throw console.error("loadTFLite null"),"loadTFLite null";(async function(t){return new Promise((async(r,i)=>{const o=t;if(typeof o>"u")return i("TFLite backend unavailable: wasmSimd");const a="selfie_segmentation_landscape";console.log("Loading tflite model:",a);let l=e+`${a}.tflite`;console.log("TFLite modelUrl: "+l);try{const t=await(await fetch(l)).arrayBuffer();console.log("Model buffer size:",t.byteLength);const e=o._getModelBufferMemoryOffset();console.log("Model buffer memory offset:",e),console.log("Loading model buffer..."),o.HEAPU8.set(new Uint8Array(t),e);const r=o._loadModel(t.byteLength);if(console.log("Load model result:",r),0!==r)return void i("Cannot load model");n.inputWidth=o._getInputWidth(),n.inputHeight=o._getInputHeight(),n.inputChannelCount=o._getInputChannelCount(),n.inputMemoryOffset=o._getInputMemoryOffset(),console.log("Input memory offset:",n.inputMemoryOffset),console.log("Input height:",n.inputHeight),console.log("Input width:",n.inputWidth),console.log("Input channels:",n.inputChannelCount),n.outputMemoryOffset=o._getOutputMemoryOffset(),n.outputWidth=o._getOutputWidth(),n.outputHeight=o._getOutputHeight(),n.outputChannelCount=o._getOutputChannelCount(),console.log("Output memory offset:",n.outputMemoryOffset),console.log("Output height:",n.outputHeight),console.log("Output width:",n.outputWidth),console.log("Output channels:",n.outputChannelCount),n.selectedTFLite=o}catch(t){return void i(t)}r()}))})(t).then((t=>{r(n)})).catch((t=>{console.error("loadTFLiteModel error"),i("loadTFLiteModel error")}))})).catch((t=>{console.error("loadTFLite error:",t),i("loadTFLite error:"+t)}))}))}class qs{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(t,e){await this.initWasm(t,e),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(t,e){this.infos=await _c(t,e)}getOutputDimensions(){var t,e,n,r;return{width:null!=(e=null==(t=this.infos)?void 0:t.outputWidth)?e:0,height:null!=(r=null==(n=this.infos)?void 0:n.outputHeight)?r:0}}async process(t){if(!this.mask||!this.infos)return;const e=this.infos.inputWidth,n=this.infos.inputHeight;this.context.drawImage(t,0,0,t.width,t.height,0,0,e,n);const r=this.context.getImageData(0,0,e,n),i=this.infos.selectedTFLite.HEAPF32;for(let t=0;t<this.pixelCount;t++){const e=this.inputOffset+3*t;i[e]=r.data[4*t]/255,i[e+1]=r.data[4*t+1]/255,i[e+2]=r.data[4*t+2]/255}this.infos.selectedTFLite._runInference();for(let t=0;t<this.pixelCount;t++){const e=this.infos.selectedTFLite.HEAPF32[this.outputOffset+t];this.mask.data[4*t]=this.mask.data[4*t+3]=255*e}return createImageBitmap(this.mask)}isGpuSupported(){var t,e,n;return null!=(n=null==(e=null==(t=this.infos)?void 0:t.selectedTFLite)?void 0:e._isGPUEnabled())&&n}}async function Q3(t,e){const{wasm:n,insertableStreams:r,simd:i,webgl:o}=await Qc(t,e);if(!n.supported)throw n.message;if(!r.supported)throw r.message;if(!i.supported)throw i.message;if(!o.supported)throw o.message}async function Qc(t,e){const n=new qs;await n.initWasm(t,e);const r={wasm:{supported:"object"==typeof WebAssembly&&"function"==typeof WebAssembly.instantiate,message:"Your browser does not support WebAssembly features."},simd:{supported:await Ac(),message:"Your browser does not support simd features."},insertableStreams:{supported:!0},gpu:{supported:n.isGpuSupported(),message:"Your browser does not support gpu features."},webgl:Dc()};try{await fu()}catch(t){r.insertableStreams.supported=!1,r.insertableStreams.message=t}return r}function Dc(){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 pi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ea=e.prototype}function f(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={U:e,V:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new f,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.V)throw e.U;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t,e){return e=new G(new y(e)),h&&t.prototype&&h(e,t.prototype),e}f.prototype.o=function(t){this.h=t},f.prototype.return=function(t){this.j={return:t},this.g=this.s};var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.C),reject:t(this.l)}},e.prototype.C=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.F(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.u(t):this.m(t)}},e.prototype.u=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.G(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.D(),this.A()},e.prototype.D=function(){var t=this;o((function(){if(t.B()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.B=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.A=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.F=function(t){var e=this.j();t.J(e.resolve,e.reject)},e.prototype.G=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.J(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.J=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).J(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).J(o(a.length-1),e),r=n.next()}while(!r.done)}))},e})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var I,Y,w=typeof TextDecoder<"u",S=typeof TextEncoder<"u";function H(t){if(S)t=(Y||(Y=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var F={},L=null;function C(t,e){void 0===e&&(e=0),k(),e=F[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function T(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=L[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}k();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function k(){if(!L){L={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));F[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===L[o]&&(L[o]=i)}}}}var J,N="function"==typeof Uint8Array.prototype.slice;function K(t,e,n){return e===n?J||(J=new Uint8Array(0)):N?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var U=0;function j(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.i=this.j=0,this.l=!1,this.v=e,t&&z(this,t)}function z(t,e){e=e.constructor===Uint8Array?e:e.constructor===ArrayBuffer||e.constructor===Array?new Uint8Array(e):e.constructor===String?T(e):e instanceof Uint8Array?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(0),t.h=e,t.j=0,t.i=t.h.length,t.g=t.j}function B(t){var e=t.h,n=e[t.g],r=127&n;return 128>n?(t.g+=1,r):(r|=(127&(n=e[t.g+1]))<<7,128>n?(t.g+=2,r):(r|=(127&(n=e[t.g+2]))<<14,128>n?(t.g+=3,r):(r|=(127&(n=e[t.g+3]))<<21,128>n?(t.g+=4,r):(r|=(15&(n=e[t.g+4]))<<28,128>n?(t.g+=5,r>>>0):(t.g+=5,128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&t.g++,r)))))}function M(t){var e=t.h[t.g],n=t.h[t.g+1],r=t.h[t.g+2],i=t.h[t.g+3];return t.g+=4,t=2*((n=(e<<0|n<<8|r<<16|i<<24)>>>0)>>31)+1,e=n>>>23&255,n&=8388607,255==e?n?NaN:1/0*t:0==e?t*Math.pow(2,-149)*n:t*Math.pow(2,e-150)*(n+Math.pow(2,23))}j.prototype.reset=function(){this.g=this.j};var E=[];function A(){this.g=new Uint8Array(64),this.h=0}function O(t,e){for(;127<e;)t.push(127&e|128),e>>>=7;t.push(e)}function P(t){var e={},n=void 0!==e.N&&e.N;this.o={v:void 0!==e.v&&e.v},this.N=n,e=this.o,E.length?(n=E.pop(),e&&(n.v=e.v),t&&z(n,t),t=n):t=new j(t,e),this.g=t,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}function Q(t){var e=t.g;if((e=e.g==e.i)||(e=t.j)||(e=(e=t.g).l||0>e.g||e.g>e.i),e)return!1;t.m=t.g.g;var n=7&(e=B(t.g));return 0!=n&&5!=n&&1!=n&&2!=n&&3!=n&&4!=n?(t.j=!0,!1):(t.i=e,t.l=e>>>3,t.h=n,!0)}function _(t){switch(t.h){case 0:if(0!=t.h)_(t);else{for(t=t.g;128&t.h[t.g];)t.g++;t.g++}break;case 1:1!=t.h?_(t):(t=t.g).g+=8;break;case 2:if(2!=t.h)_(t);else{var e=B(t.g);(t=t.g).g+=e}break;case 5:5!=t.h?_(t):(t=t.g).g+=4;break;case 3:for(e=t.l;;){if(!Q(t)){t.j=!0;break}if(4==t.h){t.l!=e&&(t.j=!0);break}_(t)}break;default:t.j=!0}}function D(t,e,n){var r=t.g.i,i=B(t.g);return i=t.g.g+i,t.g.i=i,n(e,t),t.g.g=i,t.g.i=r,e}function q(t){var e,n=B(t.g),r=(t=t.g).g;if(t.g+=n,t=t.h,w)(e=I)||(e=I=new TextDecoder("utf-8",{fatal:!1})),e=e.decode(t.subarray(r,r+n));else{n=r+n;for(var i,o,a,l=[],s=null;r<n;)128>(i=t[r++])?l.push(i):224>i?r>=n?l.push(65533):(o=t[r++],194>i||128!=(192&o)?(r--,l.push(65533)):l.push((31&i)<<6|63&o)):240>i?r>=n-1?l.push(65533):128!=(192&(o=t[r++]))||224===i&&160>o||237===i&&160<=o||128!=(192&(e=t[r++]))?(r--,l.push(65533)):l.push((15&i)<<12|(63&o)<<6|63&e):244>=i?r>=n-2?l.push(65533):128!=(192&(o=t[r++]))||o-144+(i<<28)>>30!=0||128!=(192&(e=t[r++]))||128!=(192&(a=t[r++]))?(r--,l.push(65533)):(i=(7&i)<<18|(63&o)<<12|(63&e)<<6|63&a,i-=65536,l.push(55296+(i>>10&1023),56320+(1023&i))):l.push(65533),8192<=l.length&&(s=x(s,l),l.length=0);e=x(s,l)}return e}function $(){this.h=[],this.i=0,this.g=new A}function tt(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function et(t){var e=t.i+t.g.length();if(0===e)return new Uint8Array(0);e=new Uint8Array(e);for(var n=t.h,r=n.length,i=0,o=0;o<r;o++){var a=n[o];0!==a.length&&(e.set(a,i),i+=a.length)}return 0!==(r=(n=t.g).h)&&(e.set(n.g.subarray(0,r),i),n.h=0),t.h=[e],e}function nt(t,e,n){if(null!=n){O(t.g,8*e+5),t=t.g;var r=n;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?U=0:(0,U=2147483648):isNaN(r)?(0,U=2147483647):34028234663852886e22<r?(0,U=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,U=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),r=8388607&Math.round(8388608*r),0,U=(n<<31|e+127<<23|r)>>>0),n=U,t.push(n>>>0&255),t.push(n>>>8&255),t.push(n>>>16&255),t.push(n>>>24&255)}}A.prototype.push=function(t){if(!(this.h+1<this.g.length)){var e=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(e)}this.g[this.h++]=t},A.prototype.length=function(){return this.h},A.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,K(t,0,e)},P.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};var rt="function"==typeof Uint8Array;function it(t,e,n){if(null!=t)return"object"==typeof t?rt&&t instanceof Uint8Array?n(t):ot(t,e,n):e(t)}function ot(t,e,n){if(Array.isArray(t)){for(var r=Array(t.length),i=0;i<t.length;i++)r[i]=it(t[i],e,n);return Array.isArray(t)&&t.W&&ct(r),r}for(i in r={},t)r[i]=it(t[i],e,n);return r}function at(t){return"number"==typeof t?isFinite(t)?t:String(t):t}var lt,st={W:{value:!0,configurable:!0}};function ct(t){return Array.isArray(t)&&!Object.isFrozen(t)&&Object.defineProperties(t,st),t}function ut(t,e,n){var r=lt;if(lt=null,t||(t=r),r=this.constructor.ca,t||(t=r?[r]:[]),this.j=r?0:-1,this.i=null,this.g=t,t=(r=this.g.length)-1,r&&null!==(r=this.g[t])&&"object"==typeof r&&r.constructor===Object?(this.l=t-this.j,this.h=r):void 0!==e&&-1<e?(this.l=Math.max(e,t+1-this.j),this.h=null):this.l=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)(t=n[e])<this.l?(t+=this.j,(r=this.g[t])?ct(r):this.g[t]=dt):(ht(this),(r=this.h[t])?ct(r):this.h[t]=dt)}var dt=Object.freeze(ct([]));function ht(t){var e=t.l+t.j;t.g[e]||(t.h=t.g[e]={})}function mt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.l?t.h?t.h[e]:void 0:t.g[e+t.j]}function ft(t){var e=void 0!==e&&e,n=mt(t,1,e);return null==n&&(n=dt),n===dt&&bt(t,1,n=ct([]),e),n}function pt(t,e,n){return null==(t=null==(t=mt(t,e))?t:+t)?void 0===n?0:n:t}function bt(t,e,n,r){void 0!==r&&r||e>=t.l?(ht(t),t.h[e]=n):t.g[e+t.j]=n}function gt(t,e){t.i||(t.i={});var n=t.i[1];if(!n){var r=ft(t);n=[];for(var i=0;i<r.length;i++)n[i]=new e(r[i]);t.i[1]=n}return n}function yt(t,e,n,r){var i=gt(t,n);e=e||new n,t=ft(t),null!=r?(i.splice(r,0,e),t.splice(r,0,Zt(e))):(i.push(e),t.push(Zt(e)))}function Zt(t,e){if(t.i)for(var n in t.i){var r=t.i[n];if(Array.isArray(r))for(var i=0;i<r.length;i++)r[i]&&Zt(r[i]);else r&&Zt(r)}return t.g}function vt(t,e){return null==(t=mt(t,e))?0:t}function Gt(t,e){return null==(t=mt(t,e))?"":t}function Xt(t,e){if(t=t.m){tt(e,e.g.end());for(var n=0;n<t.length;n++)tt(e,t[n])}}function Wt(t,e){if(4==e.h)return!1;var n=e.m;return _(e),e.N||(e=K(e.g.h,n,e.g.g),(n=t.m)?n.push(e):t.m=[e]),!0}function Vt(t,e){var n=void 0;return new(n||(n=Promise))((function(r,i){function o(t){try{l(e.next(t))}catch(t){i(t)}}function a(t){try{l(e.throw(t))}catch(t){i(t)}}function l(t){t.done?r(t.value):new n((function(e){e(t.value)})).then(o,a)}l((e=e.apply(t,void 0)).next())}))}function Rt(t){ut.call(this,t)}function xt(t,e){for(;Q(e);)switch(e.i){case 8:var n=B(e.g);bt(t,1,n);break;case 21:bt(t,2,n=M(e.g));break;case 26:bt(t,3,n=q(e));break;case 34:bt(t,4,n=q(e));break;default:if(!Wt(t,e))return t}return t}function It(t){ut.call(this,t,-1,Yt)}ut.prototype.toJSON=function(){return ot(Zt(this),at,C)},ut.prototype.toString=function(){return Zt(this).toString()},m(Rt,ut),m(It,ut),It.prototype.addClassification=function(t,e){yt(this,t,Rt,e)};var Yt=[1];function wt(t){ut.call(this,t)}function St(t,e){for(;Q(e);)switch(e.i){case 13:var n=M(e.g);bt(t,1,n);break;case 21:bt(t,2,n=M(e.g));break;case 29:bt(t,3,n=M(e.g));break;case 37:bt(t,4,n=M(e.g));break;case 45:bt(t,5,n=M(e.g));break;default:if(!Wt(t,e))return t}return t}function Ht(t){ut.call(this,t,-1,Ft)}m(wt,ut),m(Ht,ut);var Ft=[1];function Lt(t){ut.call(this,t)}function Ct(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Tt(t){return gt(t,Rt).map((function(t){return{index:vt(t,1),Y:pt(t,2),label:null!=mt(t,3)?Gt(t,3):void 0,displayName:null!=mt(t,4)?Gt(t,4):void 0}}))}function kt(t){return{x:pt(t,1),y:pt(t,2),z:pt(t,3),visibility:null!=mt(t,4)?pt(t,4):void 0}}function Jt(t,e){this.h=t,this.g=e,this.l=0}function Nt(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=Ct(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=Ct(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={I:n.getAttribLocation(r,"aVertex"),H:n.getAttribLocation(r,"aTex"),da:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.H),n.vertexAttribPointer(t.j.H,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.H,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.I),n.disableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function Kt(t){this.g=t}m(Lt,ut);var Ut=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 jt(t,e){return e+t}function zt(t,e){window[t]=e}function Bt(t){if(this.g=t,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=t&&t.locateFile||jt,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.S=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function Mt(t){return Vt(t,(function t(){var e,n,r,i,o,a,s,c,u,d,h,m=this;return X(t,(function(t){switch(t.g){case 1:return e=m,m.R?(n=function(t,e){return void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(e):t.g.files}(m,m.j),g(t,function(){return Vt(this,(function t(){return X(t,(function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(Ut),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)}}))}))}(),2)):t.return();case 2:if(r=t.h,"object"==typeof window)return zt("createMediapipeSolutionsWasm",{locateFile:m.locateFile}),zt("createMediapipeSolutionsPackedAssets",{locateFile:m.locateFile}),a=n.filter((function(t){return void 0!==t.data})),s=n.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(t){var n=Et(e,t.url);if(void 0!==t.path){var r=t.path;n=n.then((function(t){return e.overrideFile(r,t),Promise.resolve(t)}))}return n}))),u=Promise.all(s.map((function(t){return void 0===t.simd||t.simd&&r||!t.simd&&!r?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(e.locateFile(t.url,e.S)):Promise.resolve()}))).then((function(){return Vt(e,(function t(){var e,n,r=this;return X(t,(function(t){if(1==t.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,g(t,e(n),2);r.h=t.h,t.g=0}))}))})),d=Vt(e,(function t(){var e=this;return X(t,(function(t){return e.g.graph&&e.g.graph.url?t=g(t,Et(e,e.g.graph.url),0):(t.g=0,t=void 0),t}))})),g(t,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return i=n.filter((function(t){return void 0===t.simd||t.simd&&r||!t.simd&&!r})).map((function(t){return e.locateFile(t.url,e.S)})),importScripts.apply(null,l(i)),g(t,createMediapipeSolutionsWasm(Module),6);case 6:m.h=t.h,m.l=new OffscreenCanvas(1,1),m.h.canvas=m.l,o=m.h.GL.createContext(m.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),m.h.GL.makeContextCurrent(o),t.g=4;break;case 7:if(m.l=document.createElement("canvas"),!(h=m.l.getContext("webgl2",{}))&&!(h=m.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),t.return();m.D=h,m.h.canvas=m.l,m.h.createContext(m.l,!0,!0,{});case 4:m.i=new m.h.SolutionWasm,m.R=!1,t.g=0}}))}))}function Et(t,e){return Vt(t,(function t(){var n,r,i=this;return X(t,(function(t){return e in i.F?t.return(i.F[e]):(n=i.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),i.F[e]=r,t.return(r))}))}))}function At(t,e,n){return Vt(t,(function t(){var r,i,o,l,s,c,u,d,h,m,f,p,b,y,Z=this;return X(t,(function(t){switch(t.g){case 1:if(!n)return t.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(Z.G=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){t.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(t,function(t,e,n){return Vt(t,(function t(){var r,i=this;return X(t,(function(t){return"number"==typeof n||n instanceof Uint8Array||n instanceof i.h.Uint8BlobList?t.return(n):n instanceof i.h.Texture2dDataOut?((r=i.s[e])||(r=new Jt(i.h,i.D),i.s[e]=r),t.return(Nt(r,n,i.G))):t.return(void 0)}))}))}(Z,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=v.get(R);t:{var I=new Lt;for(x=new P(x);Q(x);)switch(x.i){case 13:var Y=M(x.g);bt(I,1,Y);break;case 21:bt(I,2,Y=M(x.g));break;case 29:bt(I,3,Y=M(x.g));break;case 37:bt(I,4,Y=M(x.g));break;case 45:bt(I,5,Y=M(x.g));break;case 48:for(var w=x.g,S=128,H=0,F=Y=0;4>F&&128<=S;F++)H|=(127&(S=w.h[w.g++]))<<7*F;if(128<=S&&(H|=(127&(S=w.h[w.g++]))<<28,Y|=(127&S)>>4),128<=S)for(F=0;5>F&&128<=S;F++)Y|=(127&(S=w.h[w.g++]))<<7*F+3;128>S?(w=H>>>0,(Y=2147483648&(S=Y>>>0))&&(S=~S>>>0,0==(w=1+~w>>>0)&&(S=S+1>>>0)),w=4294967296*S+(w>>>0),Y=Y?-w:w):(w.l=!0,Y=void 0),bt(I,6,Y);break;default:if(!Wt(I,x))break t}}I={Z:pt(I,1),$:pt(I,2),height:pt(I,3),width:pt(I,4),rotation:pt(I,5,0),X:vt(I,6)},Y=G.get(R);t:for(x=new Ht,Y=new P(Y);Q(Y);)if(10===Y.i)yt(x,w=D(Y,new wt,St),wt,void 0);else if(!Wt(x,Y))break t;x=gt(x,wt).map(kt),w=W.get(R);t:for(Y=new It,w=new P(w);Q(w);)if(10===w.i)Y.addClassification(D(w,new Rt,xt));else if(!Wt(Y,w))break t;I={T:I,O:x,M:Tt(Y)},V.push(I)}v=V}else v=[];r[d]=v,t.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,t.g=7;break}if(void 0===m){t.g=3;break}if("float_list"===h.type){r[d]=m,t.g=7;break}if("proto"===h.type){r[d]=m,t.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(f=Z.s[d])||(f=new Jt(Z.h,Z.D),Z.s[d]=f),g(t,Nt(f,m,Z.G),13);case 13:p=t.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),t.g=3;break;case 14:b[y]=t.h;case 3:l=u.next(),t.g=2;break;case 4:return t.return(r)}}))}))}function Ot(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.C=At(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.C=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Pt(t){return 1===(void 0===t&&(t=0),t)?"selfie_segmentation_landscape.tflite":"selfie_segmentation.tflite"}function Qt(t){var e=this;t=t||{},this.g=new Bt({locateFile:t.locateFile,files:function(t){return[{simd:!0,url:"selfie_segmentation_solution_simd_wasm_bin.js"},{simd:!1,url:"selfie_segmentation_solution_wasm_bin.js"},{data:!0,url:Pt(t.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(t){return Vt(e,(function e(){var n,r,i,o=this;return X(e,(function(e){return 1==e.g?(n=Pt(t),r="third_party/mediapipe/modules/selfie_segmentation/"+n,g(e,Et(o.g,n),2)):(i=e.h,o.g.overrideFile(r,i),e.return(!0))}))}))}}}})}(t=Bt.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){return Vt(this,(function t(){var e=this;return X(t,(function(t){e.i&&(e.i.reset(),e.m={},e.s={}),t.g=0}))}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={K:o.K,L:o.L},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.K=s.onChange,o.L=t[c],r.push(function(t){return function(){return Vt(n,(function e(){var n=this;return X(e,(function(e){if(1==e.g)return g(e,t.K(t.L),2);!0===e.h&&(n.o=!0),e.g=0}))}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.A=(void 0===this.A?[]:this.A).concat(i),this.u=(void 0===this.u?[]:this.u).concat(r))}},t.initialize=function(){return Vt(this,(function t(){var e=this;return X(t,(function(t){return 1==t.g?g(t,Mt(e),2):3!=t.g?g(t,function(t){return Vt(t,(function t(){var e,n,r,i,o,l,s,c,u=this;return X(t,(function(t){if(1==t.g)return u.g.graph&&u.g.graph.url&&u.P===u.g.graph.url?t.return():(u.o=!0,u.g.graph&&u.g.graph.url?(u.P=u.g.graph.url,g(t,Et(u,u.g.graph.url),3)):void(t.g=2));for(2!=t.g&&(e=t.h,u.i.loadGraph(e)),n=a(Object.keys(u.B)),r=n.next();!r.done;r=n.next())i=r.value,u.i.overrideFile(i,u.B[i]);if(u.B={},u.g.listeners)for(o=a(u.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Ot(u,s);c=u.j,u.j={},u.setOptions(c),t.g=0}))}))}(e),3):g(t,function(t){return Vt(t,(function t(){var e,n,r,i,o,l,s=this;return X(t,(function(t){switch(t.g){case 1:if(!s.o)return t.return();if(!s.u){t.g=2;break}e=a(s.u),n=e.next();case 3:if(n.done){t.g=5;break}return g(t,(0,n.value)(),4);case 4:n=e.next(),t.g=3;break;case 5:s.u=void 0;case 2:if(s.A){for(r=new s.h.GraphOptionChangeRequestList,i=a(s.A),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);s.i.changeOptions(r),r.delete(),s.A=void 0}s.o=!1,t.g=0}}))}))}(e),0)}))}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.B[t]=e},t.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){return Vt(this,(function n(){var r,i,o,l,s,c,u,d,h,m=this;return X(n,(function(n){switch(n.g){case 1:return m.g.inputs?(r=1e3*(null==e?performance.now():e),g(n,m.C,2)):n.return();case 2:return g(n,m.initialize(),3);case 3:for(i=new m.h.PacketDataList,o=a(Object.keys(t)),l=o.next();!l.done;l=o.next())if(s=l.value,c=m.g.inputs[s]){t:{var f=m,p=t[s];switch(c.type){case"video":var b=f.m[c.stream];if(b||(b=new Jt(f.h,f.D),f.m[c.stream]=b),0===(f=b).l&&(f.l=f.h.createTexture()),typeof HTMLVideoElement<"u"&&p instanceof HTMLVideoElement){var y=p.videoWidth;b=p.videoHeight}else typeof HTMLImageElement<"u"&&p instanceof HTMLImageElement?(y=p.naturalWidth,b=p.naturalHeight):(y=p.width,b=p.height);b={glName:f.l,width:y,height:b},(y=f.g).canvas.width=b.width,y.canvas.height=b.height,y.activeTexture(y.TEXTURE0),f.h.bindTexture2d(f.l),y.texImage2D(y.TEXTURE_2D,0,y.RGBA,y.RGBA,y.UNSIGNED_BYTE,p),f.h.bindTexture2d(0),f=b;break t;case"detections":for((b=f.m[c.stream])||(b=new Kt(f.h),f.m[c.stream]=b),(f=b).data||(f.data=new f.g.DetectionListData),f.data.reset(p.length),b=0;b<p.length;++b){y=p[b];var Z=f.data,v=Z.setBoundingBox,G=b,X=y.T,W=new Lt;bt(W,1,X.Z),bt(W,2,X.$),bt(W,3,X.height),bt(W,4,X.width),bt(W,5,X.rotation),bt(W,6,X.X);var V=X=new $;nt(V,1,mt(W,1)),nt(V,2,mt(W,2)),nt(V,3,mt(W,3)),nt(V,4,mt(W,4)),nt(V,5,mt(W,5));var R=mt(W,6);if(null!=R&&null!=R){O(V.g,48);var x=V.g,I=R;R=0>I;var Y=(I=Math.abs(I))>>>0;for(I=Math.floor((I-Y)/4294967296),I>>>=0,R&&(I=~I>>>0,4294967295<(Y=1+(~Y>>>0))&&(Y=0,4294967295<++I&&(I=0))),R=U=Y,Y=I;0<Y||127<R;)x.push(127&R|128),R=(R>>>7|Y<<25)>>>0,Y>>>=7;x.push(R)}if(Xt(W,V),X=et(X),v.call(Z,G,X),y.O)for(Z=0;Z<y.O.length;++Z)V=!!(W=y.O[Z]).visibility,G=(v=f.data).addNormalizedLandmark,X=b,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),bt(V=new wt,1,W.x),bt(V,2,W.y),bt(V,3,W.z),W.visibility&&bt(V,4,W.visibility),nt(x=W=new $,1,mt(V,1)),nt(x,2,mt(V,2)),nt(x,3,mt(V,3)),nt(x,4,mt(V,4)),nt(x,5,mt(V,5)),Xt(V,x),W=et(W),G.call(v,X,W);if(y.M)for(Z=0;Z<y.M.length;++Z){if(G=(v=f.data).addClassification,X=b,W=y.M[Z],bt(V=new Rt,2,W.Y),W.index&&bt(V,1,W.index),W.label&&bt(V,3,W.label),W.displayName&&bt(V,4,W.displayName),x=W=new $,null!=(Y=mt(V,1))&&null!=Y)if(O(x.g,8),R=x.g,0<=Y)O(R,Y);else{for(I=0;9>I;I++)R.push(127&Y|128),Y>>=7;R.push(1)}nt(x,2,mt(V,2)),null!=(R=mt(V,3))&&(R=H(R),O(x.g,26),O(x.g,R.length),tt(x,x.g.end()),tt(x,R)),null!=(R=mt(V,4))&&(R=H(R),O(x.g,34),O(x.g,R.length),tt(x,x.g.end()),tt(x,R)),Xt(V,x),W=et(W),G.call(v,X,W)}}f=f.data;break t;default:f={}}}switch(u=f,d=c.stream,c.type){case"video":i.pushTexture2d(Object.assign(Object.assign({},u),{stream:d,timestamp:r}));break;case"detections":(h=u).stream=d,h.timestamp=r,i.pushDetectionList(h);break;default:throw Error("Unknown input config type: '"+c.type+"'")}}return m.i.send(i),g(n,m.C,4);case 4:i.delete(),n.g=0}}))}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",Bt),R("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=Qt.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){return Vt(this,(function t(){var e=this;return X(t,(function(t){return g(t,e.g.initialize(),0)}))}))},t.reset=function(){this.g.reset()},t.send=function(t){return Vt(this,(function e(){var n=this;return X(e,(function(e){return g(e,n.g.send(t),0)}))}))},t.setOptions=function(t){this.g.setOptions(t)},R("SelfieSegmentation",Qt),R("VERSION","0.1.1632777926")}).call(pi);const bi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ra=e.prototype}function f(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={fa:e,ga:!0},t.g=t.o||t.u}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new f,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.ga)throw e.fa;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.s):(t.g.s(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.s):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}f.prototype.s=function(t){this.h=t},f.prototype.return=function(t){this.j={return:t},this.g=this.u},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.s=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.D),reject:t(this.l)}},e.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.H(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.A(t):this.o(t)}},e.prototype.A=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.I(e,t):this.o(t)},e.prototype.l=function(t){this.u(2,t)},e.prototype.o=function(t){this.u(1,t)},e.prototype.u=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.G(),this.B()},e.prototype.G=function(){var t=this;o((function(){if(t.C()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.C=function(){if(this.s)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.B=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.H=function(t){var e=this.j();t.M(e.resolve,e.reject)},e.prototype.I=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.M(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.M=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.s=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).M(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).M(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(){throw Error("Invalid UTF8")}function I(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var Y,w,S=typeof TextDecoder<"u",H=typeof TextEncoder<"u",F={},L=null;function C(t){var e;void 0===e&&(e=0),k(),e=F[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function T(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=L[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}k();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),i!==n?r.subarray(0,i):r}function k(){if(!L){L={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));F[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===L[o]&&(L[o]=i)}}}}var J,N="function"==typeof Uint8Array;function K(t){return N&&null!=t&&t instanceof Uint8Array}function U(t){if(this.L=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}var j="function"==typeof Uint8Array.prototype.slice,z=0;function B(t,e){return Error("Invalid wire type: "+t+" (at position "+e+")")}function M(){return Error("Failed to read varint, encoding is invalid.")}function E(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.i=this.j=0,this.v=e,t&&A(this,t)}function A(t,e){t.h=function(t,e){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 T(t);if(t.constructor===U)return!e&&(e=t.L)&&e.constructor===Uint8Array?e:(e=null==(e=t.L)||K(e)?e:"string"==typeof e?T(e):null,(t=t.L=e)?new Uint8Array(t):J||(J=new Uint8Array(0)));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")}(e,t.v),t.j=0,t.i=t.h.length,t.g=t.j}function O(t){if(t.g>t.i)throw Error("Tried to read past the end of the data "+t.g+" > "+t.i)}function P(t){var e=t.h,n=e[t.g],r=127&n;if(128>n)return t.g+=1,O(t),r;if(r|=(127&(n=e[t.g+1]))<<7,128>n)return t.g+=2,O(t),r;if(r|=(127&(n=e[t.g+2]))<<14,128>n)return t.g+=3,O(t),r;if(r|=(127&(n=e[t.g+3]))<<21,128>n)return t.g+=4,O(t),r;if(n=e[t.g+4],t.g+=5,r|=(15&n)<<28,128>n)return O(t),r;if(128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++])throw M();return O(t),r}E.prototype.reset=function(){this.g=this.j};var Q=[];function _(){this.g=[]}function D(t,e){for(;127<e;)t.g.push(127&e|128),e>>>=7;t.g.push(e)}function q(t){var e={},n=void 0!==e.W&&e.W;this.l={v:void 0!==e.v&&e.v},this.W=n,e=this.l,Q.length?(n=Q.pop(),e&&(n.v=e.v),t&&A(n,t),t=n):t=new E(t,e),this.g=t,this.j=this.g.g,this.h=this.i=-1}function $(t){var e=t.g;if(e.g==e.i)return!1;t.j=t.g.g;var n=P(t.g)>>>0;if(e=n>>>3,!(0<=(n&=7)&&5>=n))throw B(n,t.j);if(1>e)throw Error("Invalid field number: "+e+" (at position "+t.j+")");return t.i=e,t.h=n,!0}function tt(t){switch(t.h){case 0:if(0!=t.h)tt(t);else t:{for(var e=(t=t.g).g,n=e+10;e<n;)if(0==(128&t.h[e++])){t.g=e,O(t);break t}throw M()}break;case 1:(t=t.g).g+=8,O(t);break;case 2:2!=t.h?tt(t):(e=P(t.g)>>>0,(t=t.g).g+=e,O(t));break;case 5:(t=t.g).g+=4,O(t);break;case 3:for(e=t.i;;){if(!$(t))throw Error("Unmatched start-group tag: stream EOF");if(4==t.h){if(t.i!=e)throw Error("Unmatched end-group tag");break}tt(t)}break;default:throw B(t.h,t.j)}}_.prototype.length=function(){return this.g.length},_.prototype.end=function(){var t=this.g;return this.g=[],t},q.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};var et=[];function nt(){this.i=[],this.h=0,this.g=new _}function rt(t,e){0!==e.length&&(t.i.push(e),t.h+=e.length)}var it="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ot(t,e){Object.isFrozen(t)||(it?t[it]|=e:void 0!==t.N?t.N|=e:Object.defineProperties(t,{N:{value:e,configurable:!0,writable:!0,enumerable:!1}}))}function at(t){var e;return null==(e=it?t[it]:t.N)?0:e}function lt(t){return ot(t,1),t}function st(t){return!!Array.isArray(t)&&!!(2&at(t))}function ct(t){if(!Array.isArray(t))throw Error("cannot mark non-array as immutable");ot(t,2)}function ut(t){return null!==t&&"object"==typeof t&&!Array.isArray(t)&&t.constructor===Object}var dt=Object.freeze(lt([]));function ht(t){if(st(t.m))throw Error("Cannot mutate an immutable Message")}var mt,ft=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function pt(t){return{value:t,configurable:!1,writable:!1,enumerable:!1}}function bt(t,e,n){return-1===e?null:e>=t.i?t.g?t.g[e]:void 0:void 0!==n&&n&&t.g&&null!=(n=t.g[e])?n:t.m[e+t.h]}function gt(t,e,n,r){r=void 0!==r&&r,ht(t),e<t.i&&!r?t.m[e+t.h]=n:(t.g||(t.g=t.m[t.i+t.h]={}))[e]=n}function yt(t,e,n,r){n=void 0===n||n;var i=bt(t,e,r=void 0!==r&&r);return null==i&&(i=dt),st(t.m)?n&&(ct(i),Object.freeze(i)):(i===dt||st(i))&&gt(t,e,i=lt(i.slice()),r),i}function Zt(t,e,n){return null==(t=null==(t=bt(t,e))?t:+t)?void 0===n?0:n:t}function vt(t,e,n,r){t.j||(t.j={});var i=st(t.m),o=t.j[n];if(!o){r=yt(t,n,!0,void 0!==r&&r),o=[],i=i||st(r);for(var a=0;a<r.length;a++)o[a]=new e(r[a]),i&&ct(o[a].m);i&&(ct(o),Object.freeze(o)),t.j[n]=o}return o}function Gt(t,e,n,r,i){var o=void 0!==o&&o;return ht(t),o=vt(t,n,e,o),n=r||new n,t=yt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,n.m)):(o.push(n),t.push(n.m)),n}function Xt(t,e){return null==(t=bt(t,e))?0:t}function Wt(t,e){return null==(t=bt(t,e))?"":t}function Vt(t){var e=It;return xt(t,e=void 0===e?Yt:e)}function Rt(t,e){if(null!=t){if(Array.isArray(t))t=xt(t,e);else if(ut(t)){var n,r={};for(n in t)r[n]=Rt(t[n],e);t=r}else t=e(t);return t}}function xt(t,e){for(var n=t.slice(),r=0;r<n.length;r++)n[r]=Rt(n[r],e);return Array.isArray(t)&&1&at(t)&&lt(n),n}function It(t){return t&&"object"==typeof t&&t.toJSON?t.toJSON():(t=function(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(t&&!Array.isArray(t)){if(K(t))return C(t);if(t instanceof U){var e=t.L;return e=null==e||"string"==typeof e?e:N&&e instanceof Uint8Array?C(e):null,(t.L=e)||""}}}return t}(t),Array.isArray(t)?Vt(t):t)}function Yt(t){return K(t)?new Uint8Array(t):t}function wt(t,e,n){t||(t=mt),mt=null;var r=this.constructor.h;if(t||(t=r?[r]:[]),this.h=(r?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=t,t=(r=this.m.length)-1,r&&ut(r=this.m[t])?(this.i=t-this.h,this.g=r):void 0!==e&&-1<e?(this.i=Math.max(e,t+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)if((t=n[e])<this.i)t+=this.h,(r=this.m[t])?Array.isArray(r)&&lt(r):this.m[t]=dt;else{var i=(r=this.g||(this.g=this.m[this.i+this.h]={}))[t];i?Array.isArray(i)&&lt(i):r[t]=dt}}function St(){wt.apply(this,arguments)}if(wt.prototype.toJSON=function(){return Vt(this.m)},wt.prototype.toString=function(){return this.m.toString()},m(St,wt),ft){var Ht={};Object.defineProperties(St,(Ht[Symbol.hasInstance]=pt((function(){throw Error("Cannot perform instanceof checks for MutableMessage")})),Ht))}function Ft(t,e,n){if(n){var r,i={};for(r in n){var o=n[r],a=o.ja;a||(i.F=o.pa||o.ha.P,o.ba?(i.U=Kt(o.ba),a=function(t){return function(e,n,r){return t.F(e,n,r,t.U)}}(i)):o.da?(i.T=Ut(o.X.g,o.da),a=function(t){return function(e,n,r){return t.F(e,n,r,t.T)}}(i)):a=i.F,o.ja=a),a(e,t,o.X),i={F:i.F,U:i.U,T:i.T}}}!function(t,e){if(e=e.ca){rt(t,t.g.end());for(var n=0;n<e.length;n++)rt(t,e[n])}}(e,t)}var Lt=Symbol();function Ct(t,e,n){return t[Lt]||(t[Lt]=function(t,r){return e(t,r,n)})}function Tt(t){var e=t[Lt];if(!e){var n=qt(t);e=function(t,e){return $t(t,e,n)},t[Lt]=e}return e}function kt(t){var e=function(t){var e=t.ba;return e?Tt(e):(e=t.oa)?Ct(t.X.g,e,t.da):void 0}(t),n=t.X,r=t.ha.O;return e?function(t,i){return r(t,i,n,e)}:function(t,e){return r(t,e,n)}}function Jt(t,e,n,r,i,o){var a=0;for((t=t()).length&&"number"!=typeof t[0]&&(n(e,t[0]),a++);a<t.length;){n=t[a++];for(var l=a+1;l<t.length&&"number"!=typeof t[l];)l++;var s=t[a++];switch(l-=a){case 0:r(e,n,s);break;case 1:r(e,n,s,t[a++]);break;case 2:i(e,n,s,t[a++],t[a++]);break;case 3:l=t[a++];var c=t[a++],u=t[a++];Array.isArray(u)?i(e,n,s,l,c,u):o(e,n,s,l,c,u);break;case 4:o(e,n,s,t[a++],t[a++],t[a++],t[a++]);break;default:throw Error("unexpected number of binary field arguments: "+l)}}return e}var Nt=Symbol();function Kt(t){var e=t[Nt];if(!e){var n=At(t);e=function(t,e){return ee(t,e,n)},t[Nt]=e}return e}function Ut(t,e){var n=t[Nt];return n||(n=function(t,n){return Ft(t,n,e)},t[Nt]=n),n}var jt=Symbol();function zt(t,e){t.push(e)}function Bt(t,e,n){t.push(e,n.P)}function Mt(t,e,n,r,i){var o=Kt(i),a=n.P;t.push(e,(function(t,e,n){return a(t,e,n,r,o)}))}function Et(t,e,n,r,i,o){var a=Ut(r,o),l=n.P;t.push(e,(function(t,e,n){return l(t,e,n,r,a)}))}function At(t){return t[jt]||Jt(t,t[jt]=[],zt,Bt,Mt,Et)}var Ot=Symbol();function Pt(t,e){t[0]=e}function Qt(t,e,n,r){var i=n.O;t[e]=r?function(t,e,n){return i(t,e,n,r)}:i}function _t(t,e,n,r,i,o){var a=n.O,l=Tt(i);t[e]=function(t,e,n){return a(t,e,n,r,l,o)}}function Dt(t,e,n,r,i,o,a){var l=n.O,s=Ct(r,i,o);t[e]=function(t,e,n){return l(t,e,n,r,s,a)}}function qt(t){return t[Ot]||Jt(t,t[Ot]={},Pt,Qt,_t,Dt)}function $t(t,e,n){for(;$(e)&&4!=e.h;){var r=e.i,i=n[r];if(!i){var o=n[0];o&&(o=o[r])&&(i=n[r]=kt(o))}if(!(i&&i(e,t,r)||(i=e,r=t,o=i.j,tt(i),i.W))){var a=i.g.h;i=o===(i=i.g.g)?J||(J=new Uint8Array(0)):j?a.slice(o,i):new Uint8Array(a.subarray(o,i)),(o=r.ca)?o.push(i):r.ca=[i]}}return t}function te(t,e,n){if(et.length){var r=et.pop();t&&(A(r.g,t),r.i=-1,r.h=-1),t=r}else t=new q(t);try{return $t(new e,t,qt(n))}finally{(e=t.g).h=null,e.j=0,e.i=0,e.g=0,e.v=!1,t.i=-1,t.h=-1,100>et.length&&et.push(t)}}function ee(t,e,n){for(var r=n.length,i=r%2==1,o=i?1:0;o<r;o+=2)(0,n[o+1])(e,t,n[o]);Ft(t,e,i?n[0]:void 0)}function ne(t,e){var n=new nt;ee(t,n,At(e)),rt(n,n.g.end()),t=new Uint8Array(n.h);for(var r=(e=n.i).length,i=0,o=0;o<r;o++){var a=e[o];t.set(a,i),i+=a.length}return n.i=[t],t}function re(t,e){return{O:t,P:e}}var ie=re((function(t,e,n){if(5!==t.h)return!1;var r=(t=t.g).h[t.g],i=t.h[t.g+1],o=t.h[t.g+2],a=t.h[t.g+3];return t.g+=4,O(t),t=2*((i=(r<<0|i<<8|o<<16|a<<24)>>>0)>>31)+1,r=i>>>23&255,i&=8388607,gt(e,n,255==r?i?NaN:1/0*t:0==r?t*Math.pow(2,-149)*i:t*Math.pow(2,r-150)*(i+Math.pow(2,23))),!0}),(function(t,e,n){if(null!=(e=bt(e,n))){D(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?z=0:(0,z=2147483648):isNaN(r)?(0,z=2147483647):34028234663852886e22<r?(0,z=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,z=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,z=(n<<31|e+127<<23|8388607&r)>>>0),n=z,t.g.push(n>>>0&255),t.g.push(n>>>8&255),t.g.push(n>>>16&255),t.g.push(n>>>24&255)}})),oe=re((function(t,e,n){if(0!==t.h)return!1;for(var r=t.g,i=128,o=0,a=t=0;4>a&&128<=i;a++)i=r.h[r.g++],O(r),o|=(127&i)<<7*a;if(128<=i&&(i=r.h[r.g++],O(r),o|=(127&i)<<28,t|=(127&i)>>4),128<=i)for(a=0;5>a&&128<=i;a++)i=r.h[r.g++],O(r),t|=(127&i)<<7*a+3;if(!(128>i))throw M();return r=o>>>0,(t=2147483648&(i=t>>>0))&&(i=~i>>>0,0==(r=1+~r>>>0)&&(i=i+1>>>0)),r=4294967296*i+(r>>>0),gt(e,n,t?-r:r),!0}),(function(t,e,n){if(null!=(e=bt(e,n))&&null!=e){D(t.g,8*n),t=t.g;var r=e;for(n=0>r,e=(r=Math.abs(r))>>>0,r=Math.floor((r-e)/4294967296),r>>>=0,n&&(r=~r>>>0,4294967295<(e=1+(~e>>>0))&&(e=0,4294967295<++r&&(r=0))),n=z=e,e=r;0<e||127<n;)t.g.push(127&n|128),n=(n>>>7|e<<25)>>>0,e>>>=7;t.g.push(n)}})),ae=re((function(t,e,n){return 0===t.h&&(gt(e,n,P(t.g)),!0)}),(function(t,e,n){if(null!=(e=bt(e,n))&&null!=e)if(D(t.g,8*n),t=t.g,0<=(n=e))D(t,n);else{for(e=0;9>e;e++)t.g.push(127&n|128),n>>=7;t.g.push(1)}})),le=re((function(t,e,n){if(2!==t.h)return!1;var r,i=P(t.g)>>>0,o=(t=t.g).g;if(t.g+=i,O(t),t=t.h,S)(r=Y)||(r=Y=new TextDecoder("utf-8",{fatal:!0})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?x():(l=t[o++],194>a||128!=(192&l)?(o--,x()):c.push((31&a)<<6|63&l)):240>a?o>=i-1?x():128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,x()):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?x():128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,x()):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):x(),8192<=c.length&&(u=I(u,c),c.length=0);r=I(u,c)}return gt(e,n,r),!0}),(function(t,e,n){if(null!=(e=bt(e,n))){var r=!1;if(r=void 0!==r&&r,H){if(r&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(e))throw Error("Found an unpaired surrogate");e=(w||(w=new TextEncoder)).encode(e)}else{for(var i=0,o=new Uint8Array(3*e.length),a=0;a<e.length;a++){var l=e.charCodeAt(a);if(128>l)o[i++]=l;else{if(2048>l)o[i++]=l>>6|192;else{if(55296<=l&&57343>=l){if(56319>=l&&a<e.length){var s=e.charCodeAt(++a);if(56320<=s&&57343>=s){l=1024*(l-55296)+s-56320+65536,o[i++]=l>>18|240,o[i++]=l>>12&63|128,o[i++]=l>>6&63|128,o[i++]=63&l|128;continue}a--}if(r)throw Error("Found an unpaired surrogate");l=65533}o[i++]=l>>12|224,o[i++]=l>>6&63|128}o[i++]=63&l|128}}e=o.subarray(0,i)}D(t.g,8*n+2),D(t.g,e.length),rt(t,t.g.end()),rt(t,e)}})),se=re((function(t,e,n,r,i){if(2!==t.h)return!1;e=Gt(e,n,r),n=t.g.i,r=P(t.g)>>>0;var o=t.g.g+r,a=o-n;if(0>=a&&(t.g.i=o,i(e,t),a=o-t.g.g),a)throw Error("Message parsing ended unexpectedly. Expected to read "+r+" bytes, instead read "+(r-a)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.i=n,!0}),(function(t,e,n,r,i){if(null!=(e=vt(e,r,n)))for(r=0;r<e.length;r++){var o=t;D(o.g,8*n+2);var a=o.g.end();rt(o,a),a.push(o.h),o=a,i(e[r],t),a=t;var l=o.pop();for(l=a.h+a.g.length()-l;127<l;)o.push(127&l|128),l>>>=7,a.h++;o.push(l),a.h++}}));function ce(){St.apply(this,arguments)}if(m(ce,St),ft){var ue={};Object.defineProperties(ce,(ue[Symbol.hasInstance]=pt(Object[Symbol.hasInstance]),ue))}function de(t){ce.call(this,t)}function he(){return[1,ae,2,ie,3,le,4,le]}function me(t){ce.call(this,t,-1,pe)}function fe(){return[1,se,de,he]}m(de,ce),m(me,ce),me.prototype.addClassification=function(t,e){return Gt(this,1,de,t,e),this};var pe=[1];function be(t){ce.call(this,t)}function ge(){return[1,ie,2,ie,3,ie,4,ie,5,ie]}function ye(t){ce.call(this,t,-1,ve)}function Ze(){return[1,se,be,ge]}m(be,ce),m(ye,ce);var ve=[1];function Ge(t){ce.call(this,t)}function Xe(){return[1,ie,2,ie,3,ie,4,ie,5,ie,6,oe]}function We(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Ve(t){return vt(t,de,1).map((function(t){return{index:Xt(t,1),score:Zt(t,2),label:null!=bt(t,3)?Wt(t,3):void 0,displayName:null!=bt(t,4)?Wt(t,4):void 0}}))}function Re(t){return{x:Zt(t,1),y:Zt(t,2),z:Zt(t,3),visibility:null!=bt(t,4)?Zt(t,4):void 0}}function xe(t){return t.map((function(t){return vt(te(t,ye,Ze),be,1).map(Re)}))}function Ie(t,e){this.h=t,this.g=e,this.l=0}function Ye(t,e,n){return function(t,e){var n=t.g;if(void 0===t.o){var r=We(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=We(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.o=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={K:n.getAttribLocation(r,"aVertex"),J:n.getAttribLocation(r,"aTex"),qa:i},t.u=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.u),n.enableVertexAttribArray(t.j.K),n.vertexAttribPointer(t.j.K,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.J),n.vertexAttribPointer(t.j.J,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.o),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.K),n.bindBuffer(n.ARRAY_BUFFER,t.u),n.vertexAttribPointer(r.K,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.J,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.K),n.disableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function we(t){this.g=t}m(Ge,ce);var Se=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 He(t,e){return e+t}function Fe(t,e){window[t]=e}function Le(t){if(this.g=t,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=t&&t.locateFile||He,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.aa=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function Ce(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(m){switch(m.g){case 1:return t.$?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(m,X((function(t){switch(t.g){case 1:return t.o=2,g(t,WebAssembly.instantiate(Se),4);case 4:t.g=3,t.o=0;break;case 2:return t.o=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})),2)):m.return();case 2:if(n=m.h,"object"==typeof window)return Fe("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),Fe("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=Te(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.aa)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,Te(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(m,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.aa)})),importScripts.apply(null,l(r)),i=t,g(m,createMediapipeSolutionsWasm(Module),6);case 6:i.h=m.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,na:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),m.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),m.return();t.G=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.$=!1,m.g=0}}))}function Te(t,e){var n,r;return X((function(i){return e in t.H?i.return(t.H[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.H[e]=r,i.return(r))}))}function ke(t,e,n){var r,i,o,l,s,c,u,d,h,m,f,p,b,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.I=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.u[e])||(r=new Ie(t.h,t.G),t.u[e]=r),i.return(Ye(r,n,t.I))):i.return(void 0)}))}(t,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=te(v.get(R),Ge,Xe);x={ea:{ka:Zt(x,1),la:Zt(x,2),height:Zt(x,3),width:Zt(x,4),rotation:Zt(x,5,0),ia:Xt(x,6)},Y:vt(te(G.get(R),ye,Ze),be,1).map(Re),V:Ve(te(W.get(R),me,fe))},V.push(x)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===m){Z.g=3;break}if("float_list"===h.type){r[d]=m,Z.g=7;break}if("proto"===h.type){r[d]=m,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(f=t.u[d])||(f=new Ie(t.h,t.G),t.u[d]=f),g(Z,Ye(f,m,t.I),13);case 13:p=Z.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:b[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function Je(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.D=ke(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.D=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Ne(t){return void 0===t&&(t=0),1===t?"hand_landmark_full.tflite":"hand_landmark_lite.tflite"}function Ke(t){var e=this;t=t||{},this.g=new Le({locateFile:t.locateFile,files:function(t){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:Ne(t.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:xe},multiHandWorldLandmarks:{type:"proto_list",stream:"multi_hand_world_landmarks",transform:xe},multiHandedness:{type:"proto_list",stream:"multi_handedness",transform:function(t){return t.map((function(t){return Ve(te(t,me,fe))[0]}))}}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"object"==typeof window&&void 0!==window.navigator&&("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(t){var n,r,i;return X((function(o){return 1==o.g?(n=Ne(t),r="third_party/mediapipe/modules/hand_landmark/"+n,g(o,Te(e.g,n),2)):(i=o.h,e.g.overrideFile(r,i),o.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"}}}})}(t=Le.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.o={},t.u={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={R:o.R,S:o.S},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.R=s.onChange,o.S=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.R(t.S),2);!0===e.h&&(n.s=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.s=!0,this.B=(void 0===this.B?[]:this.B).concat(i),this.A=(void 0===this.A?[]:this.A).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,Ce(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.Z===t.g.graph.url?u.return():(t.s=!0,t.g.graph&&t.g.graph.url?(t.Z=t.g.graph.url,g(u,Te(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.C)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.C[i]);if(t.C={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Je(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.s)return s.return();if(!t.A){s.g=2;break}e=a(t.A),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.B),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.B=void 0}t.s=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.C[t]=e},t.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(m){switch(m.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(m,h.D,2)):m.return();case 2:return g(m,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var f=t[l];switch(s.type){case"video":var p=h.o[s.stream];if(p||(p=new Ie(h.h,h.G),h.o[s.stream]=p),0===p.l&&(p.l=p.h.createTexture()),typeof HTMLVideoElement<"u"&&f instanceof HTMLVideoElement)var b=f.videoWidth,y=f.videoHeight;else typeof HTMLImageElement<"u"&&f instanceof HTMLImageElement?(b=f.naturalWidth,y=f.naturalHeight):(b=f.width,y=f.height);y={glName:p.l,width:b,height:y},(b=p.g).canvas.width=y.width,b.canvas.height=y.height,b.activeTexture(b.TEXTURE0),p.h.bindTexture2d(p.l),b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,f),p.h.bindTexture2d(0),p=y;break t;case"detections":for((p=h.o[s.stream])||(p=new we(h.h),h.o[s.stream]=p),p.data||(p.data=new p.g.DetectionListData),p.data.reset(f.length),y=0;y<f.length;++y){b=f[y];var Z=p.data,v=Z.setBoundingBox,G=y,X=b.ea,W=new Ge;if(gt(W,1,X.ka),gt(W,2,X.la),gt(W,3,X.height),gt(W,4,X.width),gt(W,5,X.rotation),gt(W,6,X.ia),X=ne(W,Xe),v.call(Z,G,X),b.Y)for(Z=0;Z<b.Y.length;++Z){var V=!!(W=b.Y[Z]).visibility;G=(v=p.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),gt(V=new be,1,W.x),gt(V,2,W.y),gt(V,3,W.z),W.visibility&&gt(V,4,W.visibility),W=ne(V,ge),G.call(v,X,W)}if(b.V)for(Z=0;Z<b.V.length;++Z)G=(v=p.data).addClassification,X=y,W=b.V[Z],gt(V=new de,2,W.score),W.index&&gt(V,1,W.index),W.label&&gt(V,3,W.label),W.displayName&&gt(V,4,W.displayName),W=ne(V,he),G.call(v,X,W)}p=p.data;break t;default:p={}}}switch(c=p,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(m,h.D,4);case 4:r.delete(),m.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",Le),R("OptionType",{BOOL:0,NUMBER:1,ma:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=Ke.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return X((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},R("Hands",Ke),R("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]]),R("VERSION","0.4.1646424915")}).call(bi);var yi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.da=e.prototype}function f(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={U:e,V:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new f,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.V)throw e.U;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}f.prototype.o=function(t){this.h=t},f.prototype.return=function(t){this.j={return:t},this.g=this.s},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.C),reject:t(this.l)}},e.prototype.C=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.F(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.v(t):this.m(t)}},e.prototype.v=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.G(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.D(),this.A()},e.prototype.D=function(){var t=this;o((function(){if(t.B()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.B=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.A=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.F=function(t){var e=this.j();t.J(e.resolve,e.reject)},e.prototype.G=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.J(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.J=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).J(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).J(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(t){!function(t){V.setTimeout((function(){throw t}),0)}(t)}function I(t,e){x(Error("Invalid wire type: "+t+" (at position "+e+")"))}function Y(){x(Error("Failed to read varint, encoding is invalid."))}function w(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var S,H,F=typeof TextDecoder<"u",L=typeof TextEncoder<"u";function C(t){if(L)t=(H||(H=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var T={},k=null;function J(t){var e;void 0===e&&(e=0),K(),e=T[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function N(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=k[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}K();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function K(){if(!k){k={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));T[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===k[o]&&(k[o]=i)}}}}var U,j="function"==typeof Uint8Array;function z(t){if(this.g=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}z.prototype.toJSON=function(){if(null==this.g)var t="";else t=this.g,t=this.g=null==t||"string"==typeof t?t:j&&t instanceof Uint8Array?J(t):null;return t};var B="function"==typeof Uint8Array.prototype.slice;function M(t,e,n){return e===n?U||(U=new Uint8Array(0)):B?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var E=0;function A(t,e){e=void 0!==(e=void 0===e?{}:e).u&&e.u,this.h=null,this.g=this.i=this.m=0,this.l=!1,this.u=e,t&&O(this,t)}function O(t,e){t.h=function(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 N(t);if(t.constructor===z){if(null==t.g)var e=U||(U=new Uint8Array(0));else{e=Uint8Array;var n=t.g;n=null==n||j&&null!=n&&n instanceof Uint8Array?n:"string"==typeof n?N(n):null,e=new e(t=t.g=n)}return e}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")}(e),t.m=0,t.i=t.h.length,t.g=t.m}function P(t){for(var e=128,n=0,r=0,i=0;4>i&&128<=e;i++)n|=(127&(e=t.h[t.g++]))<<7*i;if(128<=e&&(n|=(127&(e=t.h[t.g++]))<<28,r|=(127&e)>>4),128<=e)for(i=0;5>i&&128<=e;i++)r|=(127&(e=t.h[t.g++]))<<7*i+3;if(128>e)return t=n>>>0,(r=2147483648&(e=r>>>0))&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),t=4294967296*e+(t>>>0),r?-t:t;t.l=!0,Y()}function Q(t){t.g>t.i&&(t.l=!0,x(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}A.prototype.reset=function(){this.g=this.m},A.prototype.j=function(){var t=this.h,e=t[this.g],n=127&e;return 128>e?(this.g+=1,Q(this),n):(n|=(127&(e=t[this.g+1]))<<7,128>e?(this.g+=2,Q(this),n):(n|=(127&(e=t[this.g+2]))<<14,128>e?(this.g+=3,Q(this),n):(n|=(127&(e=t[this.g+3]))<<21,128>e?(this.g+=4,Q(this),n):(n|=(15&(e=t[this.g+4]))<<28,128>e?(this.g+=5,Q(this),n>>>0):(this.g+=5,128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]?(this.l=!0,Y(),n):(Q(this),n))))))},A.prototype.o=function(){var t=this.h[this.g],e=this.h[this.g+1],n=this.h[this.g+2],r=this.h[this.g+3];return this.g+=4,Q(this),t=2*((n=(t<<0|e<<8|n<<16|r<<24)>>>0)>>31)+1,e=n>>>23&255,n&=8388607,255==e?n?NaN:1/0*t:0==e?t*Math.pow(2,-149)*n:t*Math.pow(2,e-150)*(n+Math.pow(2,23))};var _=[];function D(){this.g=new Uint8Array(64),this.h=0}function q(t,e){if(!(t.h+1<t.g.length)){var n=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(n)}t.g[t.h++]=e}function $(t,e){for(;127<e;)q(t,127&e|128),e>>>=7;q(t,e)}function tt(t){var e={},n=void 0!==e.N&&e.N;this.m={u:void 0!==e.u&&e.u},this.N=n,e=this.m,_.length?(n=_.pop(),e&&(n.u=e.u),t&&O(n,t),t=n):t=new A(t,e),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}function et(t){var e=t.g;if((e=e.g==e.i)||(e=t.j)||(e=(e=t.g).l||0>e.g||e.g>e.i),e)return!1;t.l=t.g.g;var n=t.g.j();return e=n>>>3,0<=(n&=7)&&5>=n?(t.i=e,t.h=n,!0):(t.j=!0,I(n,t.l),!1)}function nt(t){switch(t.h){case 0:if(0!=t.h)nt(t);else t:{for(var e=(t=t.g).g,n=0;10>n;n++){if(0==(128&t.h[e])){t.g=e+1,Q(t);break t}e++}t.l=!0,Y()}break;case 1:(t=t.g).g+=8,Q(t);break;case 2:2!=t.h?nt(t):(e=t.g.j(),(t=t.g).g+=e,Q(t));break;case 5:(t=t.g).g+=4,Q(t);break;case 3:for(e=t.i;;){if(!et(t)){t.j=!0,x(Error("Unmatched start-group tag: stream EOF"));break}if(4==t.h){t.i!=e&&(t.j=!0,x(Error("Unmatched end-group tag")));break}nt(t)}break;default:t.j=!0,I(t.h,t.l)}}function rt(t,e,n){t.N||(t=M(t.g.h,n,t.g.g),(n=e.o)?n.push(t):e.o=[t])}function it(t,e,n){var r=t.g.i,i=t.g.j(),o=t.g.g+i;if(t.g.i=o,n(e,t),0!==(n=o-t.g.g))throw Error("Message parsing ended unexpectedly. Expected to read "+i+" bytes, instead read "+(i-n)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.i=r,e}function ot(t,e,n){var r=t.g.j();for(r=t.g.g+r;t.g.g<r;)n.push(e.call(t.g))}D.prototype.length=function(){return this.h},D.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,M(t,0,e)},tt.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};var at=[];function lt(){this.h=[],this.i=0,this.g=new D}function st(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function ct(t,e,n){$(t.g,8*e+2),$(t.g,n.length),st(t,t.g.end()),st(t,n)}var ut,dt="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ht(t,e){Object.isFrozen(t)||(dt?t[dt]|=e:void 0!==t.g?t.g|=e:Object.defineProperties(t,{g:{value:e,configurable:!0,writable:!0,enumerable:!1}}))}function mt(t){return t?null==(e=dt?t[dt]:t.g)?0:e:0;var e}function ft(t){return Array.isArray(t)&&ht(t,1),t}function pt(t){if(!Array.isArray(t))throw Error("cannot mark non-array as immutable");ht(t,2)}function bt(t){return null!==t&&"object"==typeof t&&t.constructor===Object}function gt(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":return j&&null!=t&&t instanceof Uint8Array?J(t):t;default:return t}}function yt(t,e){if(null!=t)return Array.isArray(t)||bt(t)?Zt(t,e):e(t)}function Zt(t,e){if(Array.isArray(t)){for(var n=Array(t.length),r=0;r<t.length;r++)n[r]=yt(t[r],e);return 1&mt(t)&&ft(n),n}for(r in n={},t)n[r]=yt(t[r],e);return n}function vt(t,e,n){var r=ut;if(ut=null,t||(t=r),r=this.constructor.ba,t||(t=r?[r]:[]),this.j=(r?0:-1)-(this.constructor.$||0),this.m=this.g=null,this.h=t,t=(r=this.h.length)-1,r&&bt(r=this.h[t])?(this.l=t-this.j,this.i=r):void 0!==e&&-1<e?(this.l=Math.max(e,t+1-this.j),this.i=null):this.l=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)(t=n[e])<this.l?(t+=this.j,(r=this.h[t])?ft(r):this.h[t]=Xt):(Wt(this),(r=this.i[t])?ft(r):this.i[t]=Xt)}var Gt,Xt=Object.freeze(ft([]));function Wt(t){var e=t.l+t.j;t.h[e]||(t.i=t.h[e]={})}function Vt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.l?t.i?t.i[e]:void 0:t.h[e+t.j]}function Rt(t,e,n){n=void 0===n||n;var r=void 0!==r&&r,i=Vt(t,e,r);return null==i&&(i=Xt),i===Xt?wt(t,e,i=ft([]),r):n&&Array.isArray(i)&&2&mt(i)&&wt(t,e,i=i.slice(),r),i}function xt(t){var e=Rt(t,3,!1);if(t.m||(t.m={}),!t.m[3]){for(var n=0;n<e.length;n++)e[n]=+e[n];t.m[3]=!0}return e}function It(t,e,n){return null==(t=Vt(t,e))?n:t}function Yt(t,e,n){return null==(t=null==(t=Vt(t,e))?t:+t)?void 0===n?0:n:t}function wt(t,e,n,r){void 0!==r&&r||e>=t.l?(Wt(t),t.i[e]=n):t.h[e+t.j]=n}function St(t,e,n){if(-1===n)return null;t.g||(t.g={});var r=t.g[n];if(r)return r;var i=Vt(t,n,!1);return null==i?r:(e=new e(i),t.g[n]=e)}function Ht(t,e,n){t.g||(t.g={});var r=t.g[n];if(!r){var i=Rt(t,n,!1);r=[];for(var o=!!Array.isArray(i)&&!!(2&mt(i)),a=0;a<i.length;a++)r[a]=new e(i[a]),o&&pt(r[a].h);o&&(pt(r),Object.freeze(r)),t.g[n]=r}return r}function Ft(t,e,n,r,i){var o=Ht(t,r,e);n=n||new r,t=Rt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,Lt(n))):(o.push(n),t.push(Lt(n)))}function Lt(t){if(t.g)for(var e in t.g){var n=t.g[e];if(Array.isArray(n))for(var r=0;r<n.length;r++)n[r]&&Lt(n[r]);else n&&Lt(n)}return t.h}function Ct(t,e){if(t=t.o){st(e,e.g.end());for(var n=0;n<t.length;n++)st(e,t[n])}}function Tt(t){var e=t[0];switch(t.length){case 2:var n=t[1];return function(t,r,i){return e(t,r,i,n)};case 3:var r=t[1],i=t[2];return function(t,n,o){return e(t,n,o,r,i)};case 4:var o=t[1],a=t[2],l=t[3];return function(t,n,r){return e(t,n,r,o,a,l)};default:throw Error("unsupported number of parameters, expected [2-4], got "+t.length)}}function kt(t,e,n){for(;et(e)&&4!=e.h;){var r=e.i,i=n[r];if(i){if(Array.isArray(i)&&(i=n[r]=Tt(i)),!i(e,t,r)){i=t;var o=(r=e).l;nt(r),rt(r,i,o)}}else i=t,o=(r=e).l,nt(r),rt(r,i,o)}return t}function Jt(t,e){var n=new lt;if(e(t,n),0===(t=n.i+n.g.length()))n=new Uint8Array(0);else{t=new Uint8Array(t);for(var r=n.h,i=r.length,o=e=0;o<i;o++){var a=r[o];0!==a.length&&(t.set(a,e),e+=a.length)}0!==(i=(r=n.g).h)&&(t.set(r.g.subarray(0,i),e),r.h=0),n.h=[t],n=t}return n}function Nt(t,e,n){if(at.length){var r=at.pop();t&&(O(r.g,t),r.i=-1,r.h=-1),t=r}else t=new tt(t);try{return n(new e,t)}finally{(e=t.g).h=null,e.m=0,e.i=0,e.g=0,e.l=!1,e.u=!1,t.i=-1,t.h=-1,t.j=!1,100>at.length&&at.push(t)}}function Kt(t,e,n){if(null!=(e=Vt(e,n))){$(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?E=0:(0,E=2147483648):isNaN(r)?(0,E=2147483647):34028234663852886e22<r?(0,E=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,E=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,E=(n<<31|e+127<<23|8388607&r)>>>0),q(t,(n=E)>>>0&255),q(t,n>>>8&255),q(t,n>>>16&255),q(t,n>>>24&255)}}function Ut(t,e,n){return 5===t.h&&(wt(e,n,t.g.o()),!0)}function jt(t,e,n){return(5===t.h||2===t.h)&&(e=Rt(e,n),2==t.h?ot(t,A.prototype.o,e):e.push(t.g.o()),!0)}function zt(t,e,n){return 0===t.h&&(wt(e,n,P(t.g)),!0)}function Bt(t,e,n){return 0===t.h&&(wt(e,n,t.g.j()),!0)}function Mt(t,e,n){if(2!==t.h)return!1;var r,i=t.g.j(),o=(t=t.g).g;if(t.g+=i,Q(t),t=t.h,F)(r=S)||(r=S=new TextDecoder("utf-8",{fatal:!1})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?c.push(65533):(l=t[o++],194>a||128!=(192&l)?(o--,c.push(65533)):c.push((31&a)<<6|63&l)):240>a?o>=i-1?c.push(65533):128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,c.push(65533)):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?c.push(65533):128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,c.push(65533)):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):c.push(65533),8192<=c.length&&(u=w(u,c),c.length=0);r=w(u,c)}return wt(e,n,r),!0}function Et(t,e,n,r,i){if(2!==t.h)return!1;t=it(t,new r,i);var o=void 0!==o&&o;return e.g||(e.g={}),r=t&&Lt(t),e.g[n]=t,wt(e,n,r,o),!0}function At(t,e,n,r,i){return 2===t.h&&(Ft(e,n,t=it(t,new r,i),r,void 0),!0)}function Ot(t,e,n){return(0===t.h||2===t.h)&&(e=Rt(e,n),2==t.h?ot(t,A.prototype.j,e):e.push(t.g.j()),!0)}function Pt(t,e,n){return 0===t.h&&(wt(e,n,P(t.g)),!0)}function Qt(t){vt.call(this,t,-1,$t)}function _t(t,e){return kt(t,e,Gt||(Gt={1:Bt,2:Bt,3:jt,4:Pt}))}vt.prototype.toJSON=function(){return Zt(Lt(this),gt)},vt.prototype.toString=function(){return Lt(this).toString()},m(Qt,vt),Qt.prototype.getRows=function(){return Vt(this,1)},Qt.prototype.getCols=function(){return Vt(this,2)},Qt.prototype.getPackedDataList=function(){return xt(this)},Qt.prototype.getLayout=function(){return It(this,4,0)};var Dt,qt,$t=[3];function te(t){vt.call(this,t)}function ee(t,e){var n=Vt(t,1);if(null!=n&&null!=n){$(e.g,8);var r=e.g;if(0<=n)$(r,n);else{for(var i=0;9>i;i++)q(r,127&n|128),n>>=7;q(r,1)}}Kt(e,t,2),null!=(r=Vt(t,3))&&ct(e,3,C(r)),null!=(r=Vt(t,4))&&ct(e,4,C(r)),Ct(t,e)}function ne(t,e){return kt(t,e,Dt||(Dt={1:Bt,2:Ut,3:Mt,4:Mt}))}function re(t){vt.call(this,t,-1,le)}function ie(t,e){return kt(t,e,qt||(qt={1:[At,te,ne]}))}m(te,vt),m(re,vt),re.prototype.addClassification=function(t,e){return Ft(this,1,t,te,e),this};var oe,ae,le=[1];function se(t){vt.call(this,t)}function ce(t,e){Kt(e,t,1),Kt(e,t,2),Kt(e,t,3),Kt(e,t,4),Kt(e,t,5),Ct(t,e)}function ue(t,e){return kt(t,e,oe||(oe={1:Ut,2:Ut,3:Ut,4:Ut,5:Ut}))}function de(t){vt.call(this,t,-1,pe)}function he(t,e){return kt(t,e,ae||(ae={1:[At,se,ue]}))}m(se,vt),m(de,vt);var me,fe,pe=[1];function be(t){vt.call(this,t)}function ge(t,e){Kt(e,t,1),Kt(e,t,2),Kt(e,t,3),Kt(e,t,4),Kt(e,t,5);var n=Vt(t,6);if(null!=n&&null!=n){$(e.g,48);var r=e.g,i=n;n=0>i;var o=(i=Math.abs(i))>>>0;for(i=Math.floor((i-o)/4294967296),i>>>=0,n&&(i=~i>>>0,4294967295<(o=1+(~o>>>0))&&(o=0,4294967295<++i&&(i=0))),n=E=o,o=i;0<o||127<n;)q(r,127&n|128),n=(n>>>7|o<<25)>>>0,o>>>=7;q(r,n)}Ct(t,e)}function ye(t,e){return kt(t,e,me||(me={1:Ut,2:Ut,3:Ut,4:Ut,5:Ut,6:zt}))}function Ze(t){vt.call(this,t,-1,Xe)}function ve(t,e){return kt(t,e,fe||(fe={1:Pt,2:Pt,3:jt,4:Ot}))}m(be,vt),m(Ze,vt),Ze.prototype.getVertexType=function(){return It(this,1,0)},Ze.prototype.getPrimitiveType=function(){return It(this,2,0)},Ze.prototype.getVertexBufferList=function(){return xt(this)},Ze.prototype.getIndexBufferList=function(){return Rt(this,4)};var Ge,Xe=[3,4];function We(t){vt.call(this,t)}function Ve(t,e){return kt(t,e,Ge||(Ge={1:[Et,Ze,ve],2:[Et,Qt,_t]}))}m(We,vt),We.prototype.getMesh=function(){return St(this,Ze,1)},We.prototype.getPoseTransformMatrix=function(){return St(this,Qt,2)};var Re=[[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]],xe=[[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]],Ie=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Ye=[[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]],we=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Se=[[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]],He=[].concat(l(Re),l(xe),l(Ie),l(Ye),l(we),l(Se));function Fe(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Le(t){return Ht(t,te,1).map((function(t){return{index:It(t,1,0),score:Yt(t,2),label:null!=Vt(t,3)?It(t,3,""):void 0,displayName:null!=Vt(t,4)?It(t,4,""):void 0}}))}function Ce(t){return{x:Yt(t,1),y:Yt(t,2),z:Yt(t,3),visibility:null!=Vt(t,4)?Yt(t,4):void 0}}function Te(t){return Ht(Nt(t,de,he),se,1).map(Ce)}function ke(t,e){this.h=t,this.g=e,this.l=0}function Je(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=Fe(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=Fe(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={I:n.getAttribLocation(r,"aVertex"),H:n.getAttribLocation(r,"aTex"),ca:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.H),n.vertexAttribPointer(t.j.H,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.H,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.I),n.disableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function Ne(t){this.g=t}var Ke=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 Ue(t,e){return e+t}function je(t,e){window[t]=e}function ze(t){if(this.g=t,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=t&&t.locateFile||Ue,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.S=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function Be(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(m){switch(m.g){case 1:return t.R?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(m,X((function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(Ke),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)}})),2)):m.return();case 2:if(n=m.h,"object"==typeof window)return je("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),je("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=Me(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.S)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,Me(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(m,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.S)})),importScripts.apply(null,l(r)),i=t,g(m,createMediapipeSolutionsWasm(Module),6);case 6:i.h=m.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,aa:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),m.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),m.return();t.D=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.R=!1,m.g=0}}))}function Me(t,e){var n,r;return X((function(i){return e in t.F?i.return(t.F[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.F[e]=r,i.return(r))}))}function Ee(t,e,n){var r,i,o,l,s,c,u,d,h,m,f,p,b,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.G=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.s[e])||(r=new ke(t.h,t.D),t.s[e]=r),i.return(Je(r,n,t.G))):i.return(void 0)}))}(t,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=Nt(v.get(R),be,ye);x={T:{X:Yt(x,1),Y:Yt(x,2),height:Yt(x,3),width:Yt(x,4),rotation:Yt(x,5,0),W:It(x,6,0)},O:Te(G.get(R)),M:Le(Nt(W.get(R),re,ie))},V.push(x)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===m){Z.g=3;break}if("float_list"===h.type){r[d]=m,Z.g=7;break}if("proto"===h.type){r[d]=m,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(f=t.s[d])||(f=new ke(t.h,t.D),t.s[d]=f),g(Z,Je(f,m,t.G),13);case 13:p=Z.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:b[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function Ae(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.C=Ee(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.C=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Oe(t){return t.map(Pe)}function Pe(t){var e=(t=Nt(t,We,Ve)).getMesh();if(!e)return t;var n=new Float32Array(e.getVertexBufferList());e.getVertexBufferList=function(){return n};var r=new Uint32Array(e.getIndexBufferList());return e.getIndexBufferList=function(){return r},t}function Qe(t){var e=this;t=t||{},this.g=new ze({locateFile:t.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:Te},rightHandLandmarks:{type:"proto",stream:"right_hand_landmarks",transform:Te},faceLandmarks:{type:"proto",stream:"face_landmarks",transform:Te},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:Te},ea:{type:"proto",stream:"world_landmarks",transform:Te},segmentationMask:{type:"texture",stream:"segmentation_mask"},multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:Oe}}}],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(t){var n,r,i,o;return X((function(a){if(1==a.g){switch(n="",t){case 1:n="pose_landmark_full.tflite";break;case 2:n="pose_landmark_heavy.tflite";break;default:n="pose_landmark_lite.tflite"}return r="third_party/mediapipe/modules/pose_landmark/"+n,i=e.g.locateFile(n,""),g(a,fetch(i),3)}return 2!=a.g?g(a,a.h.arrayBuffer(),2):(o=a.h,e.g.overrideFile(r,o),g(a,e.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"}}}})}(t=ze.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.m={},t.s={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={K:o.K,L:o.L},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.K=s.onChange,o.L=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.K(t.L),2);!0===e.h&&(n.o=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.A=(void 0===this.A?[]:this.A).concat(i),this.v=(void 0===this.v?[]:this.v).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,Be(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.P===t.g.graph.url?u.return():(t.o=!0,t.g.graph&&t.g.graph.url?(t.P=t.g.graph.url,g(u,Me(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.B)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.B[i]);if(t.B={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Ae(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.o)return s.return();if(!t.v){s.g=2;break}e=a(t.v),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.v=void 0;case 2:if(t.A){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.A),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.A=void 0}t.o=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.B[t]=e},t.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(m){switch(m.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(m,h.C,2)):m.return();case 2:return g(m,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var f=t[l];switch(s.type){case"video":var p=h.m[s.stream];if(p||(p=new ke(h.h,h.D),h.m[s.stream]=p),0===p.l&&(p.l=p.h.createTexture()),typeof HTMLVideoElement<"u"&&f instanceof HTMLVideoElement)var b=f.videoWidth,y=f.videoHeight;else typeof HTMLImageElement<"u"&&f instanceof HTMLImageElement?(b=f.naturalWidth,y=f.naturalHeight):(b=f.width,y=f.height);y={glName:p.l,width:b,height:y},(b=p.g).canvas.width=y.width,b.canvas.height=y.height,b.activeTexture(b.TEXTURE0),p.h.bindTexture2d(p.l),b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,f),p.h.bindTexture2d(0),p=y;break t;case"detections":for((p=h.m[s.stream])||(p=new Ne(h.h),h.m[s.stream]=p),p.data||(p.data=new p.g.DetectionListData),p.data.reset(f.length),y=0;y<f.length;++y){b=f[y];var Z=p.data,v=Z.setBoundingBox,G=y,X=b.T,W=new be;if(wt(W,1,X.X),wt(W,2,X.Y),wt(W,3,X.height),wt(W,4,X.width),wt(W,5,X.rotation),wt(W,6,X.W),X=Jt(W,ge),v.call(Z,G,X),b.O)for(Z=0;Z<b.O.length;++Z){var V=!!(W=b.O[Z]).visibility;G=(v=p.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),wt(V=new se,1,W.x),wt(V,2,W.y),wt(V,3,W.z),W.visibility&&wt(V,4,W.visibility),W=Jt(V,ce),G.call(v,X,W)}if(b.M)for(Z=0;Z<b.M.length;++Z)G=(v=p.data).addClassification,X=y,W=b.M[Z],wt(V=new te,2,W.score),W.index&&wt(V,1,W.index),W.label&&wt(V,3,W.label),W.displayName&&wt(V,4,W.displayName),W=Jt(V,ee),G.call(v,X,W)}p=p.data;break t;default:p={}}}switch(c=p,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(m,h.C,4);case 4:r.delete(),m.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",ze),R("OptionType",{BOOL:0,NUMBER:1,Z:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=Qe.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return X((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},R("Holistic",Qe),R("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}}),R("FACEMESH_LIPS",Re),R("FACEMESH_LEFT_EYE",xe),R("FACEMESH_LEFT_EYEBROW",Ie),R("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),R("FACEMESH_RIGHT_EYE",Ye),R("FACEMESH_RIGHT_EYEBROW",we),R("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),R("FACEMESH_FACE_OVAL",Se),R("FACEMESH_CONTOURS",He),R("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]]),R("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]]),R("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]]),R("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}),R("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}),R("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}),R("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),R("matrixDataToMatrix",(function(t){for(var e=t.getCols(),n=t.getRows(),r=t.getPackedDataList(),i=[],o=0;o<n;o++)i.push(Array(e));for(o=0;o<n;o++)for(var a=0;a<e;a++){var l=1===t.getLayout()?o*e+a:a*n+o;i[o][a]=r[l]}return i})),R("VERSION","0.5.1635989137")}).call(yi);const gi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.na=e.prototype}function f(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={da:e,ea:!0},t.g=t.o||t.u}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new f,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.ea)throw e.da;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.s):(t.g.s(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.s):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}f.prototype.s=function(t){this.h=t},f.prototype.return=function(t){this.j={return:t},this.g=this.u},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.s=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.D),reject:t(this.l)}},e.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.H(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.A(t):this.o(t)}},e.prototype.A=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.I(e,t):this.o(t)},e.prototype.l=function(t){this.u(2,t)},e.prototype.o=function(t){this.u(1,t)},e.prototype.u=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.G(),this.B()},e.prototype.G=function(){var t=this;o((function(){if(t.C()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.C=function(){if(this.s)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.B=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.H=function(t){var e=this.j();t.M(e.resolve,e.reject)},e.prototype.I=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.M(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.M=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.s=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).M(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).M(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(){throw Error("Invalid UTF8")}function I(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var Y,w,S=typeof TextDecoder<"u",H=typeof TextEncoder<"u",F={},L=null;function C(t){var e;void 0===e&&(e=0),k(),e=F[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function T(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=L[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}k();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),i!==n?r.subarray(0,i):r}function k(){if(!L){L={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));F[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===L[o]&&(L[o]=i)}}}}var J,N="function"==typeof Uint8Array;function K(t){return N&&null!=t&&t instanceof Uint8Array}function U(t){if(this.L=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}var j="function"==typeof Uint8Array.prototype.slice,z=0;function B(t,e){return Error("Invalid wire type: "+t+" (at position "+e+")")}function M(){return Error("Failed to read varint, encoding is invalid.")}function E(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.i=this.j=0,this.v=e,t&&A(this,t)}function A(t,e){t.h=function(t,e){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 T(t);if(t.constructor===U)return!e&&(e=t.L)&&e.constructor===Uint8Array?e:(e=null==(e=t.L)||K(e)?e:"string"==typeof e?T(e):null,(t=t.L=e)?new Uint8Array(t):J||(J=new Uint8Array(0)));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")}(e,t.v),t.j=0,t.i=t.h.length,t.g=t.j}function O(t){if(t.g>t.i)throw Error("Tried to read past the end of the data "+t.g+" > "+t.i)}function P(t){var e=t.h,n=e[t.g],r=127&n;if(128>n)return t.g+=1,O(t),r;if(r|=(127&(n=e[t.g+1]))<<7,128>n)return t.g+=2,O(t),r;if(r|=(127&(n=e[t.g+2]))<<14,128>n)return t.g+=3,O(t),r;if(r|=(127&(n=e[t.g+3]))<<21,128>n)return t.g+=4,O(t),r;if(n=e[t.g+4],t.g+=5,r|=(15&n)<<28,128>n)return O(t),r;if(128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++])throw M();return O(t),r}E.prototype.reset=function(){this.g=this.j};var Q=[];function _(){this.g=[]}function D(t,e){for(;127<e;)t.g.push(127&e|128),e>>>=7;t.g.push(e)}function q(t){var e={},n=void 0!==e.W&&e.W;this.l={v:void 0!==e.v&&e.v},this.W=n,e=this.l,Q.length?(n=Q.pop(),e&&(n.v=e.v),t&&A(n,t),t=n):t=new E(t,e),this.g=t,this.j=this.g.g,this.h=this.i=-1}function $(t){var e=t.g;if(e.g==e.i)return!1;t.j=t.g.g;var n=P(t.g)>>>0;if(e=n>>>3,!(0<=(n&=7)&&5>=n))throw B(n,t.j);if(1>e)throw Error("Invalid field number: "+e+" (at position "+t.j+")");return t.i=e,t.h=n,!0}function tt(t){switch(t.h){case 0:if(0!=t.h)tt(t);else t:{for(var e=(t=t.g).g,n=e+10;e<n;)if(0==(128&t.h[e++])){t.g=e,O(t);break t}throw M()}break;case 1:(t=t.g).g+=8,O(t);break;case 2:2!=t.h?tt(t):(e=P(t.g)>>>0,(t=t.g).g+=e,O(t));break;case 5:(t=t.g).g+=4,O(t);break;case 3:for(e=t.i;;){if(!$(t))throw Error("Unmatched start-group tag: stream EOF");if(4==t.h){if(t.i!=e)throw Error("Unmatched end-group tag");break}tt(t)}break;default:throw B(t.h,t.j)}}_.prototype.length=function(){return this.g.length},_.prototype.end=function(){var t=this.g;return this.g=[],t},q.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};var et=[];function nt(){this.i=[],this.h=0,this.g=new _}function rt(t,e){0!==e.length&&(t.i.push(e),t.h+=e.length)}var it="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ot(t,e){Object.isFrozen(t)||(it?t[it]|=e:void 0!==t.N?t.N|=e:Object.defineProperties(t,{N:{value:e,configurable:!0,writable:!0,enumerable:!1}}))}function at(t){var e;return null==(e=it?t[it]:t.N)?0:e}function lt(t){return ot(t,1),t}function st(t){return!!Array.isArray(t)&&!!(2&at(t))}function ct(t){if(!Array.isArray(t))throw Error("cannot mark non-array as immutable");ot(t,2)}function ut(t){return null!==t&&"object"==typeof t&&!Array.isArray(t)&&t.constructor===Object}var dt=Object.freeze(lt([]));function ht(t){if(st(t.m))throw Error("Cannot mutate an immutable Message")}var mt,ft=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function pt(t){return{value:t,configurable:!1,writable:!1,enumerable:!1}}function bt(t,e,n){return-1===e?null:e>=t.i?t.g?t.g[e]:void 0:void 0!==n&&n&&t.g&&null!=(n=t.g[e])?n:t.m[e+t.h]}function gt(t,e,n,r){r=void 0!==r&&r,ht(t),e<t.i&&!r?t.m[e+t.h]=n:(t.g||(t.g=t.m[t.i+t.h]={}))[e]=n}function yt(t,e,n,r){n=void 0===n||n;var i=bt(t,e,r=void 0!==r&&r);return null==i&&(i=dt),st(t.m)?n&&(ct(i),Object.freeze(i)):(i===dt||st(i))&&gt(t,e,i=lt(i.slice()),r),i}function Zt(t,e,n){return null==(t=null==(t=bt(t,e))?t:+t)?void 0===n?0:n:t}function vt(t,e,n,r){t.j||(t.j={});var i=st(t.m),o=t.j[n];if(!o){r=yt(t,n,!0,void 0!==r&&r),o=[],i=i||st(r);for(var a=0;a<r.length;a++)o[a]=new e(r[a]),i&&ct(o[a].m);i&&(ct(o),Object.freeze(o)),t.j[n]=o}return o}function Gt(t,e,n,r,i){var o=void 0!==o&&o;return ht(t),o=vt(t,n,e,o),n=r||new n,t=yt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,n.m)):(o.push(n),t.push(n.m)),n}function Xt(t,e){return null==(t=bt(t,e))?0:t}function Wt(t,e){return null==(t=bt(t,e))?"":t}function Vt(t){var e=It;return xt(t,e=void 0===e?Yt:e)}function Rt(t,e){if(null!=t){if(Array.isArray(t))t=xt(t,e);else if(ut(t)){var n,r={};for(n in t)r[n]=Rt(t[n],e);t=r}else t=e(t);return t}}function xt(t,e){for(var n=t.slice(),r=0;r<n.length;r++)n[r]=Rt(n[r],e);return Array.isArray(t)&&1&at(t)&&lt(n),n}function It(t){return t&&"object"==typeof t&&t.toJSON?t.toJSON():(t=function(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(t&&!Array.isArray(t)){if(K(t))return C(t);if(t instanceof U){var e=t.L;return e=null==e||"string"==typeof e?e:N&&e instanceof Uint8Array?C(e):null,(t.L=e)||""}}}return t}(t),Array.isArray(t)?Vt(t):t)}function Yt(t){return K(t)?new Uint8Array(t):t}function wt(t,e,n){t||(t=mt),mt=null;var r=this.constructor.h;if(t||(t=r?[r]:[]),this.h=(r?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=t,t=(r=this.m.length)-1,r&&ut(r=this.m[t])?(this.i=t-this.h,this.g=r):void 0!==e&&-1<e?(this.i=Math.max(e,t+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)if((t=n[e])<this.i)t+=this.h,(r=this.m[t])?Array.isArray(r)&&lt(r):this.m[t]=dt;else{var i=(r=this.g||(this.g=this.m[this.i+this.h]={}))[t];i?Array.isArray(i)&&lt(i):r[t]=dt}}function St(){wt.apply(this,arguments)}if(wt.prototype.toJSON=function(){return Vt(this.m)},wt.prototype.toString=function(){return this.m.toString()},m(St,wt),ft){var Ht={};Object.defineProperties(St,(Ht[Symbol.hasInstance]=pt((function(){throw Error("Cannot perform instanceof checks for MutableMessage")})),Ht))}function Ft(t,e,n){if(n){var r,i={};for(r in n){var o=n[r],a=o.ha;a||(i.F=o.la||o.fa.P,o.aa?(i.U=Kt(o.aa),a=function(t){return function(e,n,r){return t.F(e,n,r,t.U)}}(i)):o.ca?(i.T=Ut(o.X.g,o.ca),a=function(t){return function(e,n,r){return t.F(e,n,r,t.T)}}(i)):a=i.F,o.ha=a),a(e,t,o.X),i={F:i.F,U:i.U,T:i.T}}}!function(t,e){if(e=e.ba){rt(t,t.g.end());for(var n=0;n<e.length;n++)rt(t,e[n])}}(e,t)}var Lt=Symbol();function Ct(t,e,n){return t[Lt]||(t[Lt]=function(t,r){return e(t,r,n)})}function Tt(t){var e=t[Lt];if(!e){var n=qt(t);e=function(t,e){return $t(t,e,n)},t[Lt]=e}return e}function kt(t){var e=function(t){var e=t.aa;return e?Tt(e):(e=t.ka)?Ct(t.X.g,e,t.ca):void 0}(t),n=t.X,r=t.fa.O;return e?function(t,i){return r(t,i,n,e)}:function(t,e){return r(t,e,n)}}function Jt(t,e,n,r,i,o){var a=0;for((t=t()).length&&"number"!=typeof t[0]&&(n(e,t[0]),a++);a<t.length;){n=t[a++];for(var l=a+1;l<t.length&&"number"!=typeof t[l];)l++;var s=t[a++];switch(l-=a){case 0:r(e,n,s);break;case 1:r(e,n,s,t[a++]);break;case 2:i(e,n,s,t[a++],t[a++]);break;case 3:l=t[a++];var c=t[a++],u=t[a++];Array.isArray(u)?i(e,n,s,l,c,u):o(e,n,s,l,c,u);break;case 4:o(e,n,s,t[a++],t[a++],t[a++],t[a++]);break;default:throw Error("unexpected number of binary field arguments: "+l)}}return e}var Nt=Symbol();function Kt(t){var e=t[Nt];if(!e){var n=At(t);e=function(t,e){return ee(t,e,n)},t[Nt]=e}return e}function Ut(t,e){var n=t[Nt];return n||(n=function(t,n){return Ft(t,n,e)},t[Nt]=n),n}var jt=Symbol();function zt(t,e){t.push(e)}function Bt(t,e,n){t.push(e,n.P)}function Mt(t,e,n,r,i){var o=Kt(i),a=n.P;t.push(e,(function(t,e,n){return a(t,e,n,r,o)}))}function Et(t,e,n,r,i,o){var a=Ut(r,o),l=n.P;t.push(e,(function(t,e,n){return l(t,e,n,r,a)}))}function At(t){return t[jt]||Jt(t,t[jt]=[],zt,Bt,Mt,Et)}var Ot=Symbol();function Pt(t,e){t[0]=e}function Qt(t,e,n,r){var i=n.O;t[e]=r?function(t,e,n){return i(t,e,n,r)}:i}function _t(t,e,n,r,i,o){var a=n.O,l=Tt(i);t[e]=function(t,e,n){return a(t,e,n,r,l,o)}}function Dt(t,e,n,r,i,o,a){var l=n.O,s=Ct(r,i,o);t[e]=function(t,e,n){return l(t,e,n,r,s,a)}}function qt(t){return t[Ot]||Jt(t,t[Ot]={},Pt,Qt,_t,Dt)}function $t(t,e,n){for(;$(e)&&4!=e.h;){var r=e.i,i=n[r];if(!i){var o=n[0];o&&(o=o[r])&&(i=n[r]=kt(o))}if(!(i&&i(e,t,r)||(i=e,r=t,o=i.j,tt(i),i.W))){var a=i.g.h;i=o===(i=i.g.g)?J||(J=new Uint8Array(0)):j?a.slice(o,i):new Uint8Array(a.subarray(o,i)),(o=r.ba)?o.push(i):r.ba=[i]}}return t}function te(t,e,n){if(et.length){var r=et.pop();t&&(A(r.g,t),r.i=-1,r.h=-1),t=r}else t=new q(t);try{return $t(new e,t,qt(n))}finally{(e=t.g).h=null,e.j=0,e.i=0,e.g=0,e.v=!1,t.i=-1,t.h=-1,100>et.length&&et.push(t)}}function ee(t,e,n){for(var r=n.length,i=r%2==1,o=i?1:0;o<r;o+=2)(0,n[o+1])(e,t,n[o]);Ft(t,e,i?n[0]:void 0)}function ne(t,e){var n=new nt;ee(t,n,At(e)),rt(n,n.g.end()),t=new Uint8Array(n.h);for(var r=(e=n.i).length,i=0,o=0;o<r;o++){var a=e[o];t.set(a,i),i+=a.length}return n.i=[t],t}function re(t,e){return{O:t,P:e}}var ie=re((function(t,e,n){if(5!==t.h)return!1;var r=(t=t.g).h[t.g],i=t.h[t.g+1],o=t.h[t.g+2],a=t.h[t.g+3];return t.g+=4,O(t),t=2*((i=(r<<0|i<<8|o<<16|a<<24)>>>0)>>31)+1,r=i>>>23&255,i&=8388607,gt(e,n,255==r?i?NaN:1/0*t:0==r?t*Math.pow(2,-149)*i:t*Math.pow(2,r-150)*(i+Math.pow(2,23))),!0}),(function(t,e,n){if(null!=(e=bt(e,n))){D(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?z=0:(0,z=2147483648):isNaN(r)?(0,z=2147483647):34028234663852886e22<r?(0,z=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,z=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,z=(n<<31|e+127<<23|8388607&r)>>>0),n=z,t.g.push(n>>>0&255),t.g.push(n>>>8&255),t.g.push(n>>>16&255),t.g.push(n>>>24&255)}})),oe=re((function(t,e,n){if(0!==t.h)return!1;for(var r=t.g,i=128,o=0,a=t=0;4>a&&128<=i;a++)i=r.h[r.g++],O(r),o|=(127&i)<<7*a;if(128<=i&&(i=r.h[r.g++],O(r),o|=(127&i)<<28,t|=(127&i)>>4),128<=i)for(a=0;5>a&&128<=i;a++)i=r.h[r.g++],O(r),t|=(127&i)<<7*a+3;if(!(128>i))throw M();return r=o>>>0,(t=2147483648&(i=t>>>0))&&(i=~i>>>0,0==(r=1+~r>>>0)&&(i=i+1>>>0)),r=4294967296*i+(r>>>0),gt(e,n,t?-r:r),!0}),(function(t,e,n){if(null!=(e=bt(e,n))&&null!=e){D(t.g,8*n),t=t.g;var r=e;for(n=0>r,e=(r=Math.abs(r))>>>0,r=Math.floor((r-e)/4294967296),r>>>=0,n&&(r=~r>>>0,4294967295<(e=1+(~e>>>0))&&(e=0,4294967295<++r&&(r=0))),n=z=e,e=r;0<e||127<n;)t.g.push(127&n|128),n=(n>>>7|e<<25)>>>0,e>>>=7;t.g.push(n)}})),ae=re((function(t,e,n){return 0===t.h&&(gt(e,n,P(t.g)),!0)}),(function(t,e,n){if(null!=(e=bt(e,n))&&null!=e)if(D(t.g,8*n),t=t.g,0<=(n=e))D(t,n);else{for(e=0;9>e;e++)t.g.push(127&n|128),n>>=7;t.g.push(1)}})),le=re((function(t,e,n){if(2!==t.h)return!1;var r,i=P(t.g)>>>0,o=(t=t.g).g;if(t.g+=i,O(t),t=t.h,S)(r=Y)||(r=Y=new TextDecoder("utf-8",{fatal:!0})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?x():(l=t[o++],194>a||128!=(192&l)?(o--,x()):c.push((31&a)<<6|63&l)):240>a?o>=i-1?x():128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,x()):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?x():128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,x()):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):x(),8192<=c.length&&(u=I(u,c),c.length=0);r=I(u,c)}return gt(e,n,r),!0}),(function(t,e,n){if(null!=(e=bt(e,n))){var r=!1;if(r=void 0!==r&&r,H){if(r&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(e))throw Error("Found an unpaired surrogate");e=(w||(w=new TextEncoder)).encode(e)}else{for(var i=0,o=new Uint8Array(3*e.length),a=0;a<e.length;a++){var l=e.charCodeAt(a);if(128>l)o[i++]=l;else{if(2048>l)o[i++]=l>>6|192;else{if(55296<=l&&57343>=l){if(56319>=l&&a<e.length){var s=e.charCodeAt(++a);if(56320<=s&&57343>=s){l=1024*(l-55296)+s-56320+65536,o[i++]=l>>18|240,o[i++]=l>>12&63|128,o[i++]=l>>6&63|128,o[i++]=63&l|128;continue}a--}if(r)throw Error("Found an unpaired surrogate");l=65533}o[i++]=l>>12|224,o[i++]=l>>6&63|128}o[i++]=63&l|128}}e=o.subarray(0,i)}D(t.g,8*n+2),D(t.g,e.length),rt(t,t.g.end()),rt(t,e)}})),se=re((function(t,e,n,r,i){if(2!==t.h)return!1;e=Gt(e,n,r),n=t.g.i,r=P(t.g)>>>0;var o=t.g.g+r,a=o-n;if(0>=a&&(t.g.i=o,i(e,t),a=o-t.g.g),a)throw Error("Message parsing ended unexpectedly. Expected to read "+r+" bytes, instead read "+(r-a)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.i=n,!0}),(function(t,e,n,r,i){if(null!=(e=vt(e,r,n)))for(r=0;r<e.length;r++){var o=t;D(o.g,8*n+2);var a=o.g.end();rt(o,a),a.push(o.h),o=a,i(e[r],t),a=t;var l=o.pop();for(l=a.h+a.g.length()-l;127<l;)o.push(127&l|128),l>>>=7,a.h++;o.push(l),a.h++}}));function ce(){St.apply(this,arguments)}if(m(ce,St),ft){var ue={};Object.defineProperties(ce,(ue[Symbol.hasInstance]=pt(Object[Symbol.hasInstance]),ue))}function de(t){ce.call(this,t)}function he(){return[1,ae,2,ie,3,le,4,le]}function me(t){ce.call(this,t,-1,pe)}function fe(){return[1,se,de,he]}m(de,ce),m(me,ce),me.prototype.addClassification=function(t,e){return Gt(this,1,de,t,e),this};var pe=[1];function be(t){ce.call(this,t)}function ge(){return[1,ie,2,ie,3,ie,4,ie,5,ie]}function ye(t){ce.call(this,t,-1,ve)}function Ze(){return[1,se,be,ge]}m(be,ce),m(ye,ce);var ve=[1];function Ge(t){ce.call(this,t)}function Xe(){return[1,ie,2,ie,3,ie,4,ie,5,ie,6,oe]}m(Ge,ce);var We=[[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]],Ve=[[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]],Re=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],xe=[[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]],Ie=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Ye=[[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]],we=[].concat(l(We),l(Ve),l(Re),l(xe),l(Ie),l(Ye));function Se(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function He(t){return vt(t,de,1).map((function(t){return{index:Xt(t,1),ga:Zt(t,2),label:null!=bt(t,3)?Wt(t,3):void 0,displayName:null!=bt(t,4)?Wt(t,4):void 0}}))}function Fe(t){return{x:Zt(t,1),y:Zt(t,2),z:Zt(t,3),visibility:null!=bt(t,4)?Zt(t,4):void 0}}function Le(t,e){this.h=t,this.g=e,this.l=0}function Ce(t,e,n){return function(t,e){var n=t.g;if(void 0===t.o){var r=Se(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=Se(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.o=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={K:n.getAttribLocation(r,"aVertex"),J:n.getAttribLocation(r,"aTex"),ma:i},t.u=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.u),n.enableVertexAttribArray(t.j.K),n.vertexAttribPointer(t.j.K,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.J),n.vertexAttribPointer(t.j.J,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.o),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.K),n.bindBuffer(n.ARRAY_BUFFER,t.u),n.vertexAttribPointer(r.K,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.J,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.K),n.disableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function Te(t){this.g=t}var ke=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(t,e){return e+t}function Ne(t,e){window[t]=e}function Ke(t){if(this.g=t,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=t&&t.locateFile||Je,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.$=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function Ue(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(m){switch(m.g){case 1:return t.Z?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(m,X((function(t){switch(t.g){case 1:return t.o=2,g(t,WebAssembly.instantiate(ke),4);case 4:t.g=3,t.o=0;break;case 2:return t.o=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})),2)):m.return();case 2:if(n=m.h,"object"==typeof window)return Ne("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),Ne("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=je(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.$)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,je(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(m,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.$)})),importScripts.apply(null,l(r)),i=t,g(m,createMediapipeSolutionsWasm(Module),6);case 6:i.h=m.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ja:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),m.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),m.return();t.G=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.Z=!1,m.g=0}}))}function je(t,e){var n,r;return X((function(i){return e in t.H?i.return(t.H[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.H[e]=r,i.return(r))}))}function ze(t,e,n){var r,i,o,l,s,c,u,d,h,m,f,p,b,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.I=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.u[e])||(r=new Le(t.h,t.G),t.u[e]=r),i.return(Ce(r,n,t.I))):i.return(void 0)}))}(t,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=te(v.get(R),Ge,Xe);x={boundingBox:{xCenter:Zt(x,1),yCenter:Zt(x,2),height:Zt(x,3),width:Zt(x,4),rotation:Zt(x,5,0),rectId:Xt(x,6)},landmarks:vt(te(G.get(R),ye,Ze),be,1).map(Fe),V:He(te(W.get(R),me,fe))},V.push(x)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===m){Z.g=3;break}if("float_list"===h.type){r[d]=m,Z.g=7;break}if("proto"===h.type){r[d]=m,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(f=t.u[d])||(f=new Le(t.h,t.G),t.u[d]=f),g(Z,Ce(f,m,t.I),13);case 13:p=Z.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:b[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function Be(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.D=ze(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.D=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Me(t){var e=this;t=t||{};var n={url:"face_detection_short.binarypb"},r={type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}};this.g=new Ke({locateFile:t.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:n,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:"object"==typeof window&&void 0!==window.navigator&&("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(t){var i,o,l,s,c;return X((function(u){switch(u.g){case 1:i=a("short"===t?["face_detection_short_range.tflite"]:["face_detection_full_range_sparse.tflite"]),o=i.next();case 2:if(o.done){u.g=4;break}return l=o.value,s="third_party/mediapipe/modules/face_detection/"+l,g(u,je(e.g,l),5);case 5:c=u.h,e.g.overrideFile(s,c),o=i.next(),u.g=2;break;case 4:return n.url="short"===t?"face_detection_short.binarypb":"face_detection_full.binarypb",r.graphOptionXref.calculatorName="short"===t?"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator":"facedetectionfullrangegpu__facedetectionfullrangecommon__TensorsToDetectionsCalculator",u.return(!0)}}))}},minDetectionConfidence:r}})}(t=Ke.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.o={},t.u={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={R:o.R,S:o.S},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.R=s.onChange,o.S=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.R(t.S),2);!0===e.h&&(n.s=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.s=!0,this.B=(void 0===this.B?[]:this.B).concat(i),this.A=(void 0===this.A?[]:this.A).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,Ue(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.Y===t.g.graph.url?u.return():(t.s=!0,t.g.graph&&t.g.graph.url?(t.Y=t.g.graph.url,g(u,je(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.C)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.C[i]);if(t.C={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Be(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.s)return s.return();if(!t.A){s.g=2;break}e=a(t.A),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.B),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.B=void 0}t.s=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.C[t]=e},t.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(m){switch(m.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(m,h.D,2)):m.return();case 2:return g(m,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var f=t[l];switch(s.type){case"video":var p=h.o[s.stream];if(p||(p=new Le(h.h,h.G),h.o[s.stream]=p),0===p.l&&(p.l=p.h.createTexture()),typeof HTMLVideoElement<"u"&&f instanceof HTMLVideoElement)var b=f.videoWidth,y=f.videoHeight;else typeof HTMLImageElement<"u"&&f instanceof HTMLImageElement?(b=f.naturalWidth,y=f.naturalHeight):(b=f.width,y=f.height);y={glName:p.l,width:b,height:y},(b=p.g).canvas.width=y.width,b.canvas.height=y.height,b.activeTexture(b.TEXTURE0),p.h.bindTexture2d(p.l),b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,f),p.h.bindTexture2d(0),p=y;break t;case"detections":for((p=h.o[s.stream])||(p=new Te(h.h),h.o[s.stream]=p),p.data||(p.data=new p.g.DetectionListData),p.data.reset(f.length),y=0;y<f.length;++y){b=f[y];var Z=p.data,v=Z.setBoundingBox,G=y,X=b.boundingBox,W=new Ge;if(gt(W,1,X.xCenter),gt(W,2,X.yCenter),gt(W,3,X.height),gt(W,4,X.width),gt(W,5,X.rotation),gt(W,6,X.rectId),X=ne(W,Xe),v.call(Z,G,X),b.landmarks)for(Z=0;Z<b.landmarks.length;++Z){var V=!!(W=b.landmarks[Z]).visibility;G=(v=p.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),gt(V=new be,1,W.x),gt(V,2,W.y),gt(V,3,W.z),W.visibility&&gt(V,4,W.visibility),W=ne(V,ge),G.call(v,X,W)}if(b.V)for(Z=0;Z<b.V.length;++Z)G=(v=p.data).addClassification,X=y,W=b.V[Z],gt(V=new de,2,W.ga),W.index&&gt(V,1,W.index),W.label&&gt(V,3,W.label),W.displayName&&gt(V,4,W.displayName),W=ne(V,he),G.call(v,X,W)}p=p.data;break t;default:p={}}}switch(c=p,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(m,h.D,4);case 4:r.delete(),m.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",Ke),R("OptionType",{BOOL:0,NUMBER:1,ia:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=Me.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return X((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},R("FaceDetection",Me),R("FACEDETECTION_LIPS",We),R("FACEDETECTION_LEFT_EYE",Ve),R("FACEDETECTION_LEFT_EYEBROW",Re),R("FACEDETECTION_RIGHT_EYE",xe),R("FACEDETECTION_RIGHT_EYEBROW",Ie),R("FACEDETECTION_FACE_OVAL",Ye),R("FACEDETECTION_CONTOURS",we),R("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]]),R("VERSION","0.4.1646425229")}).call(gi);const Zi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ea=e.prototype}function f(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={U:e,V:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new f,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.V)throw e.U;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t,e){return e=new G(new y(e)),h&&t.prototype&&h(e,t.prototype),e}f.prototype.o=function(t){this.h=t},f.prototype.return=function(t){this.j={return:t},this.g=this.s};var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.C),reject:t(this.l)}},e.prototype.C=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.F(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.u(t):this.m(t)}},e.prototype.u=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.G(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.D(),this.A()},e.prototype.D=function(){var t=this;o((function(){if(t.B()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.B=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.A=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.F=function(t){var e=this.j();t.J(e.resolve,e.reject)},e.prototype.G=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.J(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.J=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).J(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).J(o(a.length-1),e),r=n.next()}while(!r.done)}))},e})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var I,Y,w=typeof TextDecoder<"u",S=typeof TextEncoder<"u";function H(t){if(S)t=(Y||(Y=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var F={},L=null;function C(t,e){void 0===e&&(e=0),k(),e=F[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function T(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=L[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}k();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function k(){if(!L){L={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));F[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===L[o]&&(L[o]=i)}}}}var J,N="function"==typeof Uint8Array.prototype.slice;function K(t,e,n){return e===n?J||(J=new Uint8Array(0)):N?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var U=0;function j(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.j=this.l=0,this.m=!1,this.v=e,t&&z(this,t)}function z(t,e){e=e.constructor===Uint8Array?e:e.constructor===ArrayBuffer||e.constructor===Array?new Uint8Array(e):e.constructor===String?T(e):e instanceof Uint8Array?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(0),t.h=e,t.l=0,t.j=t.h.length,t.g=t.l}function B(t){for(var e=128,n=0,r=0,i=0;4>i&&128<=e;i++)n|=(127&(e=t.h[t.g++]))<<7*i;if(128<=e&&(n|=(127&(e=t.h[t.g++]))<<28,r|=(127&e)>>4),128<=e)for(i=0;5>i&&128<=e;i++)r|=(127&(e=t.h[t.g++]))<<7*i+3;if(128>e)return t=n>>>0,(r=2147483648&(e=r>>>0))&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),t=4294967296*e+(t>>>0),r?-t:t;t.m=!0}j.prototype.reset=function(){this.g=this.l},j.prototype.i=function(){var t=this.h,e=t[this.g],n=127&e;return 128>e?(this.g+=1,n):(n|=(127&(e=t[this.g+1]))<<7,128>e?(this.g+=2,n):(n|=(127&(e=t[this.g+2]))<<14,128>e?(this.g+=3,n):(n|=(127&(e=t[this.g+3]))<<21,128>e?(this.g+=4,n):(n|=(15&(e=t[this.g+4]))<<28,128>e?(this.g+=5,n>>>0):(this.g+=5,128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&this.g++,n)))))},j.prototype.o=function(){var t=this.h[this.g],e=this.h[this.g+1],n=this.h[this.g+2],r=this.h[this.g+3];return this.g+=4,t=2*((n=(t<<0|e<<8|n<<16|r<<24)>>>0)>>31)+1,e=n>>>23&255,n&=8388607,255==e?n?NaN:1/0*t:0==e?t*Math.pow(2,-149)*n:t*Math.pow(2,e-150)*(n+Math.pow(2,23))};var M=[];function E(){this.g=new Uint8Array(64),this.h=0}function A(t,e){for(;127<e;)t.push(127&e|128),e>>>=7;t.push(e)}function O(t){var e={},n=void 0!==e.N&&e.N;this.o={v:void 0!==e.v&&e.v},this.N=n,e=this.o,M.length?(n=M.pop(),e&&(n.v=e.v),t&&z(n,t),t=n):t=new j(t,e),this.g=t,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}function P(t){var e=t.g;if((e=e.g==e.j)||(e=t.j)||(e=(e=t.g).m||0>e.g||e.g>e.j),e)return!1;t.m=t.g.g;var n=7&(e=t.g.i());return 0!=n&&5!=n&&1!=n&&2!=n&&3!=n&&4!=n?(t.j=!0,!1):(t.i=e,t.l=e>>>3,t.h=n,!0)}function Q(t){switch(t.h){case 0:if(0!=t.h)Q(t);else{for(t=t.g;128&t.h[t.g];)t.g++;t.g++}break;case 1:1!=t.h?Q(t):(t=t.g).g+=8;break;case 2:if(2!=t.h)Q(t);else{var e=t.g.i();(t=t.g).g+=e}break;case 5:5!=t.h?Q(t):(t=t.g).g+=4;break;case 3:for(e=t.l;;){if(!P(t)){t.j=!0;break}if(4==t.h){t.l!=e&&(t.j=!0);break}Q(t)}break;default:t.j=!0}}function _(t,e,n){var r=t.g.j,i=t.g.i(),o=t.g.g+i;if(t.g.j=o,n(e,t),0!==(n=o-t.g.g))throw Error("Message parsing ended unexpectedly. Expected to read "+i+" bytes, instead read "+(i-n)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.j=r,e}function D(t){return t.g.o()}function q(t){var e,n=t.g.i(),r=(t=t.g).g;if(t.g+=n,t=t.h,w)(e=I)||(e=I=new TextDecoder("utf-8",{fatal:!1})),e=e.decode(t.subarray(r,r+n));else{n=r+n;for(var i,o,a,l=[],s=null;r<n;)128>(i=t[r++])?l.push(i):224>i?r>=n?l.push(65533):(o=t[r++],194>i||128!=(192&o)?(r--,l.push(65533)):l.push((31&i)<<6|63&o)):240>i?r>=n-1?l.push(65533):128!=(192&(o=t[r++]))||224===i&&160>o||237===i&&160<=o||128!=(192&(e=t[r++]))?(r--,l.push(65533)):l.push((15&i)<<12|(63&o)<<6|63&e):244>=i?r>=n-2?l.push(65533):128!=(192&(o=t[r++]))||o-144+(i<<28)>>30!=0||128!=(192&(e=t[r++]))||128!=(192&(a=t[r++]))?(r--,l.push(65533)):(i=(7&i)<<18|(63&o)<<12|(63&e)<<6|63&a,i-=65536,l.push(55296+(i>>10&1023),56320+(1023&i))):l.push(65533),8192<=l.length&&(s=x(s,l),l.length=0);e=x(s,l)}return e}function $(t,e,n){var r=t.g.i();for(r=t.g.g+r;t.g.g<r;)n.push(e.call(t.g))}function tt(t,e){2==t.h?$(t,j.prototype.o,e):e.push(D(t))}function et(){this.h=[],this.i=0,this.g=new E}function nt(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function rt(t){var e=t.i+t.g.length();if(0===e)return new Uint8Array(0);e=new Uint8Array(e);for(var n=t.h,r=n.length,i=0,o=0;o<r;o++){var a=n[o];0!==a.length&&(e.set(a,i),i+=a.length)}return 0!==(r=(n=t.g).h)&&(e.set(n.g.subarray(0,r),i),n.h=0),t.h=[e],e}function it(t,e,n){if(null!=n){A(t.g,8*e+5),t=t.g;var r=n;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?U=0:(0,U=2147483648):isNaN(r)?(0,U=2147483647):34028234663852886e22<r?(0,U=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,U=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,U=(n<<31|e+127<<23|8388607&r)>>>0),n=U,t.push(n>>>0&255),t.push(n>>>8&255),t.push(n>>>16&255),t.push(n>>>24&255)}}E.prototype.push=function(t){if(!(this.h+1<this.g.length)){var e=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(e)}this.g[this.h++]=t},E.prototype.length=function(){return this.h},E.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,K(t,0,e)},O.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};var ot="function"==typeof Uint8Array;function at(t,e,n){if(null!=t)return"object"==typeof t?ot&&t instanceof Uint8Array?n(t):lt(t,e,n):e(t)}function lt(t,e,n){if(Array.isArray(t)){for(var r=Array(t.length),i=0;i<t.length;i++)r[i]=at(t[i],e,n);return Array.isArray(t)&&t.W&&dt(r),r}for(i in r={},t)r[i]=at(t[i],e,n);return r}function st(t){return"number"==typeof t?isFinite(t)?t:String(t):t}var ct,ut={W:{value:!0,configurable:!0}};function dt(t){return Array.isArray(t)&&!Object.isFrozen(t)&&Object.defineProperties(t,ut),t}function ht(t,e,n){var r=ct;if(ct=null,t||(t=r),r=this.constructor.ca,t||(t=r?[r]:[]),this.j=r?0:-1,this.m=this.g=null,this.h=t,t=(r=this.h.length)-1,!r||(null===(r=this.h[t])||"object"!=typeof r||Array.isArray(r)||ot&&r instanceof Uint8Array)?void 0!==e&&-1<e?(this.l=Math.max(e,t+1-this.j),this.i=null):this.l=Number.MAX_VALUE:(this.l=t-this.j,this.i=r),n)for(e=0;e<n.length;e++)(t=n[e])<this.l?(t+=this.j,(r=this.h[t])?dt(r):this.h[t]=mt):(ft(this),(r=this.i[t])?dt(r):this.i[t]=mt)}var mt=Object.freeze(dt([]));function ft(t){var e=t.l+t.j;t.h[e]||(t.i=t.h[e]={})}function pt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.l?t.i?t.i[e]:void 0:t.h[e+t.j]}function bt(t,e){var n=void 0!==n&&n,r=pt(t,e,n);return null==r&&(r=mt),r===mt&&vt(t,e,r=dt([]),n),r}function gt(t){var e=bt(t,3);if(t.m||(t.m={}),!t.m[3]){for(var n=0;n<e.length;n++)e[n]=+e[n];t.m[3]=!0}return e}function yt(t,e,n){return null==(t=pt(t,e))?n:t}function Zt(t,e,n){return null==(t=null==(t=pt(t,e))?t:+t)?void 0===n?0:n:t}function vt(t,e,n,r){void 0!==r&&r||e>=t.l?(ft(t),t.i[e]=n):t.h[e+t.j]=n}function Gt(t,e,n){if(-1===n)return null;if(t.g||(t.g={}),!t.g[n]){var r=pt(t,n,!1);r&&(t.g[n]=new e(r))}return t.g[n]}function Xt(t,e){t.g||(t.g={});var n=t.g[1];if(!n){var r=bt(t,1);n=[];for(var i=0;i<r.length;i++)n[i]=new e(r[i]);t.g[1]=n}return n}function Wt(t,e,n){var r=void 0!==r&&r;t.g||(t.g={});var i=n&&Rt(n);t.g[e]=n,vt(t,e,i,r)}function Vt(t,e,n,r){var i=Xt(t,n);e=e||new n,t=bt(t,1),null!=r?(i.splice(r,0,e),t.splice(r,0,Rt(e))):(i.push(e),t.push(Rt(e)))}function Rt(t,e){if(t.g)for(var n in t.g){var r=t.g[n];if(Array.isArray(r))for(var i=0;i<r.length;i++)r[i]&&Rt(r[i]);else r&&Rt(r)}return t.h}function xt(t,e){if(t=t.o){nt(e,e.g.end());for(var n=0;n<t.length;n++)nt(e,t[n])}}function It(t,e){if(4==e.h)return!1;var n=e.m;return Q(e),e.N||(e=K(e.g.h,n,e.g.g),(n=t.o)?n.push(e):t.o=[e]),!0}function Yt(t){ht.call(this,t,-1,St)}function wt(t,e){for(;P(e);)switch(e.i){case 8:var n=e.g.i();vt(t,1,n);break;case 16:vt(t,2,n=e.g.i());break;case 29:case 26:tt(e,t.getPackedDataList());break;case 32:vt(t,4,n=B(e.g));break;default:if(!It(t,e))return t}return t}ht.prototype.toJSON=function(){return lt(Rt(this),st,C)},ht.prototype.toString=function(){return Rt(this).toString()},m(Yt,ht),Yt.prototype.getRows=function(){return pt(this,1)},Yt.prototype.getCols=function(){return pt(this,2)},Yt.prototype.getPackedDataList=function(){return gt(this)},Yt.prototype.getLayout=function(){return yt(this,4,0)};var St=[3];function Ht(t,e){var n=void 0;return new(n||(n=Promise))((function(r,i){function o(t){try{l(e.next(t))}catch(t){i(t)}}function a(t){try{l(e.throw(t))}catch(t){i(t)}}function l(t){t.done?r(t.value):new n((function(e){e(t.value)})).then(o,a)}l((e=e.apply(t,void 0)).next())}))}function Ft(t){ht.call(this,t)}function Lt(t,e){for(;P(e);)switch(e.i){case 8:var n=e.g.i();vt(t,1,n);break;case 21:vt(t,2,n=D(e));break;case 26:vt(t,3,n=q(e));break;case 34:vt(t,4,n=q(e));break;default:if(!It(t,e))return t}return t}function Ct(t){ht.call(this,t,-1,Tt)}m(Ft,ht),m(Ct,ht),Ct.prototype.addClassification=function(t,e){return Vt(this,t,Ft,e),this};var Tt=[1];function kt(t){ht.call(this,t)}function Jt(t,e){for(;P(e);)switch(e.i){case 13:var n=D(e);vt(t,1,n);break;case 21:vt(t,2,n=D(e));break;case 29:vt(t,3,n=D(e));break;case 37:vt(t,4,n=D(e));break;case 45:vt(t,5,n=D(e));break;default:if(!It(t,e))return t}return t}function Nt(t){ht.call(this,t,-1,Ut)}function Kt(t){t:{var e=new Nt;for(t=new O(t);P(t);)if(10===t.i){Vt(e,_(t,new kt,Jt),kt,void 0)}else if(!It(e,t))break t}return e}m(kt,ht),m(Nt,ht);var Ut=[1];function jt(t){ht.call(this,t)}function zt(t){ht.call(this,t,-1,Mt)}function Bt(t,e){for(;P(e);)switch(e.i){case 8:var n=B(e.g);vt(t,1,n);break;case 16:vt(t,2,n=B(e.g));break;case 29:case 26:tt(e,t.getVertexBufferList());break;case 32:case 34:n=e;var r=t.getIndexBufferList();2==n.h?$(n,j.prototype.i,r):r.push(n.g.i());break;default:if(!It(t,e))return t}return t}m(jt,ht),m(zt,ht),zt.prototype.getVertexType=function(){return yt(this,1,0)},zt.prototype.getPrimitiveType=function(){return yt(this,2,0)},zt.prototype.getVertexBufferList=function(){return gt(this)},zt.prototype.getIndexBufferList=function(){return bt(this,4)};var Mt=[3,4];function Et(t){ht.call(this,t)}function At(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Ot(t){return Xt(t,Ft).map((function(t){return{index:yt(t,1,0),Y:Zt(t,2),label:null!=pt(t,3)?yt(t,3,""):void 0,displayName:null!=pt(t,4)?yt(t,4,""):void 0}}))}function Pt(t){return{x:Zt(t,1),y:Zt(t,2),z:Zt(t,3),visibility:null!=pt(t,4)?Zt(t,4):void 0}}function Qt(t,e){this.h=t,this.g=e,this.l=0}function _t(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=At(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=At(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={I:n.getAttribLocation(r,"aVertex"),H:n.getAttribLocation(r,"aTex"),da:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.H),n.vertexAttribPointer(t.j.H,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.H,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.I),n.disableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function Dt(t){this.g=t}m(Et,ht),Et.prototype.getMesh=function(){return Gt(this,zt,1)},Et.prototype.getPoseTransformMatrix=function(){return Gt(this,Yt,2)};var qt=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 $t(t,e){return e+t}function te(t,e){window[t]=e}function ee(t){if(this.g=t,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=t&&t.locateFile||$t,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.S=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function ne(t){return Ht(t,(function t(){var e,n,r,i,o,a,s,c,u,d,h,m=this;return X(t,(function(t){switch(t.g){case 1:return e=m,m.R?(n=function(t,e){return void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(e):t.g.files}(m,m.j),g(t,function(){return Ht(this,(function t(){return X(t,(function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(qt),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)}}))}))}(),2)):t.return();case 2:if(r=t.h,"object"==typeof window)return te("createMediapipeSolutionsWasm",{locateFile:m.locateFile}),te("createMediapipeSolutionsPackedAssets",{locateFile:m.locateFile}),a=n.filter((function(t){return void 0!==t.data})),s=n.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(t){var n=re(e,t.url);if(void 0!==t.path){var r=t.path;n=n.then((function(t){return e.overrideFile(r,t),Promise.resolve(t)}))}return n}))),u=Promise.all(s.map((function(t){return void 0===t.simd||t.simd&&r||!t.simd&&!r?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(e.locateFile(t.url,e.S)):Promise.resolve()}))).then((function(){return Ht(e,(function t(){var e,n,r=this;return X(t,(function(t){if(1==t.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,g(t,e(n),2);r.h=t.h,t.g=0}))}))})),d=Ht(e,(function t(){var e=this;return X(t,(function(t){return e.g.graph&&e.g.graph.url?t=g(t,re(e,e.g.graph.url),0):(t.g=0,t=void 0),t}))})),g(t,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return i=n.filter((function(t){return void 0===t.simd||t.simd&&r||!t.simd&&!r})).map((function(t){return e.locateFile(t.url,e.S)})),importScripts.apply(null,l(i)),g(t,createMediapipeSolutionsWasm(Module),6);case 6:m.h=t.h,m.l=new OffscreenCanvas(1,1),m.h.canvas=m.l,o=m.h.GL.createContext(m.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),m.h.GL.makeContextCurrent(o),t.g=4;break;case 7:if(m.l=document.createElement("canvas"),!(h=m.l.getContext("webgl2",{}))&&!(h=m.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),t.return();m.D=h,m.h.canvas=m.l,m.h.createContext(m.l,!0,!0,{});case 4:m.i=new m.h.SolutionWasm,m.R=!1,t.g=0}}))}))}function re(t,e){return Ht(t,(function t(){var n,r,i=this;return X(t,(function(t){return e in i.F?t.return(i.F[e]):(n=i.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),i.F[e]=r,t.return(r))}))}))}function ie(t,e,n){return Ht(t,(function t(){var r,i,o,l,s,c,u,d,h,m,f,p,b,y,Z=this;return X(t,(function(t){switch(t.g){case 1:if(!n)return t.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(Z.G=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){t.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(t,function(t,e,n){return Ht(t,(function t(){var r,i=this;return X(t,(function(t){return"number"==typeof n||n instanceof Uint8Array||n instanceof i.h.Uint8BlobList?t.return(n):n instanceof i.h.Texture2dDataOut?((r=i.s[e])||(r=new Qt(i.h,i.D),i.s[e]=r),t.return(_t(r,n,i.G))):t.return(void 0)}))}))}(Z,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=v.get(R);t:{var I=new jt;for(x=new O(x);P(x);)switch(x.i){case 13:var Y=D(x);vt(I,1,Y);break;case 21:vt(I,2,Y=D(x));break;case 29:vt(I,3,Y=D(x));break;case 37:vt(I,4,Y=D(x));break;case 45:vt(I,5,Y=D(x));break;case 48:vt(I,6,Y=B(x.g));break;default:if(!It(I,x))break t}}I={Z:Zt(I,1),$:Zt(I,2),height:Zt(I,3),width:Zt(I,4),rotation:Zt(I,5,0),X:yt(I,6,0)},x=Xt(Kt(G.get(R)),kt).map(Pt);var w=W.get(R);t:for(Y=new Ct,w=new O(w);P(w);)if(10===w.i)Y.addClassification(_(w,new Ft,Lt));else if(!It(Y,w))break t;I={T:I,O:x,M:Ot(Y)},V.push(I)}v=V}else v=[];r[d]=v,t.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,t.g=7;break}if(void 0===m){t.g=3;break}if("float_list"===h.type){r[d]=m,t.g=7;break}if("proto"===h.type){r[d]=m,t.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(f=Z.s[d])||(f=new Qt(Z.h,Z.D),Z.s[d]=f),g(t,_t(f,m,Z.G),13);case 13:p=t.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),t.g=3;break;case 14:b[y]=t.h;case 3:l=u.next(),t.g=2;break;case 4:return t.return(r)}}))}))}function oe(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.C=ie(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.C=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function ae(t){t=function(t){t:{var e=new Et;for(t=new O(t);P(t);)switch(t.i){case 10:var n=_(t,new zt,Bt);Wt(e,1,n);break;case 18:Wt(e,2,n=_(t,new Yt,wt));break;default:if(!It(e,t))break t}}return e}(t);var e=t.getMesh();if(!e)return t;var n=new Float32Array(e.getVertexBufferList());e.getVertexBufferList=function(){return n};var r=new Uint32Array(e.getIndexBufferList());return e.getIndexBufferList=function(){return r},t}(t=ee.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){return Ht(this,(function t(){var e=this;return X(t,(function(t){e.i&&(e.i.reset(),e.m={},e.s={}),t.g=0}))}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={K:o.K,L:o.L},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.K=s.onChange,o.L=t[c],r.push(function(t){return function(){return Ht(n,(function e(){var n=this;return X(e,(function(e){if(1==e.g)return g(e,t.K(t.L),2);!0===e.h&&(n.o=!0),e.g=0}))}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.A=(void 0===this.A?[]:this.A).concat(i),this.u=(void 0===this.u?[]:this.u).concat(r))}},t.initialize=function(){return Ht(this,(function t(){var e=this;return X(t,(function(t){return 1==t.g?g(t,ne(e),2):3!=t.g?g(t,function(t){return Ht(t,(function t(){var e,n,r,i,o,l,s,c,u=this;return X(t,(function(t){if(1==t.g)return u.g.graph&&u.g.graph.url&&u.P===u.g.graph.url?t.return():(u.o=!0,u.g.graph&&u.g.graph.url?(u.P=u.g.graph.url,g(t,re(u,u.g.graph.url),3)):void(t.g=2));for(2!=t.g&&(e=t.h,u.i.loadGraph(e)),n=a(Object.keys(u.B)),r=n.next();!r.done;r=n.next())i=r.value,u.i.overrideFile(i,u.B[i]);if(u.B={},u.g.listeners)for(o=a(u.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,oe(u,s);c=u.j,u.j={},u.setOptions(c),t.g=0}))}))}(e),3):g(t,function(t){return Ht(t,(function t(){var e,n,r,i,o,l,s=this;return X(t,(function(t){switch(t.g){case 1:if(!s.o)return t.return();if(!s.u){t.g=2;break}e=a(s.u),n=e.next();case 3:if(n.done){t.g=5;break}return g(t,(0,n.value)(),4);case 4:n=e.next(),t.g=3;break;case 5:s.u=void 0;case 2:if(s.A){for(r=new s.h.GraphOptionChangeRequestList,i=a(s.A),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);s.i.changeOptions(r),r.delete(),s.A=void 0}s.o=!1,t.g=0}}))}))}(e),0)}))}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.B[t]=e},t.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){return Ht(this,(function n(){var r,i,o,l,s,c,u,d,h,m=this;return X(n,(function(n){switch(n.g){case 1:return m.g.inputs?(r=1e3*(null==e?performance.now():e),g(n,m.C,2)):n.return();case 2:return g(n,m.initialize(),3);case 3:for(i=new m.h.PacketDataList,o=a(Object.keys(t)),l=o.next();!l.done;l=o.next())if(s=l.value,c=m.g.inputs[s]){t:{var f=m,p=t[s];switch(c.type){case"video":var b=f.m[c.stream];if(b||(b=new Qt(f.h,f.D),f.m[c.stream]=b),0===(f=b).l&&(f.l=f.h.createTexture()),typeof HTMLVideoElement<"u"&&p instanceof HTMLVideoElement){var y=p.videoWidth;b=p.videoHeight}else typeof HTMLImageElement<"u"&&p instanceof HTMLImageElement?(y=p.naturalWidth,b=p.naturalHeight):(y=p.width,b=p.height);b={glName:f.l,width:y,height:b},(y=f.g).canvas.width=b.width,y.canvas.height=b.height,y.activeTexture(y.TEXTURE0),f.h.bindTexture2d(f.l),y.texImage2D(y.TEXTURE_2D,0,y.RGBA,y.RGBA,y.UNSIGNED_BYTE,p),f.h.bindTexture2d(0),f=b;break t;case"detections":for((b=f.m[c.stream])||(b=new Dt(f.h),f.m[c.stream]=b),(f=b).data||(f.data=new f.g.DetectionListData),f.data.reset(p.length),b=0;b<p.length;++b){y=p[b];var Z=f.data,v=Z.setBoundingBox,G=b,X=y.T,W=new jt;vt(W,1,X.Z),vt(W,2,X.$),vt(W,3,X.height),vt(W,4,X.width),vt(W,5,X.rotation),vt(W,6,X.X);var V=X=new et;it(V,1,pt(W,1)),it(V,2,pt(W,2)),it(V,3,pt(W,3)),it(V,4,pt(W,4)),it(V,5,pt(W,5));var R=pt(W,6);if(null!=R&&null!=R){A(V.g,48);var x=V.g,I=R;R=0>I;var Y=(I=Math.abs(I))>>>0;for(I=Math.floor((I-Y)/4294967296),I>>>=0,R&&(I=~I>>>0,4294967295<(Y=1+(~Y>>>0))&&(Y=0,4294967295<++I&&(I=0))),R=U=Y,Y=I;0<Y||127<R;)x.push(127&R|128),R=(R>>>7|Y<<25)>>>0,Y>>>=7;x.push(R)}if(xt(W,V),X=rt(X),v.call(Z,G,X),y.O)for(Z=0;Z<y.O.length;++Z)V=!!(W=y.O[Z]).visibility,G=(v=f.data).addNormalizedLandmark,X=b,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),vt(V=new kt,1,W.x),vt(V,2,W.y),vt(V,3,W.z),W.visibility&&vt(V,4,W.visibility),it(x=W=new et,1,pt(V,1)),it(x,2,pt(V,2)),it(x,3,pt(V,3)),it(x,4,pt(V,4)),it(x,5,pt(V,5)),xt(V,x),W=rt(W),G.call(v,X,W);if(y.M)for(Z=0;Z<y.M.length;++Z){if(G=(v=f.data).addClassification,X=b,W=y.M[Z],vt(V=new Ft,2,W.Y),W.index&&vt(V,1,W.index),W.label&&vt(V,3,W.label),W.displayName&&vt(V,4,W.displayName),x=W=new et,null!=(Y=pt(V,1))&&null!=Y)if(A(x.g,8),R=x.g,0<=Y)A(R,Y);else{for(I=0;9>I;I++)R.push(127&Y|128),Y>>=7;R.push(1)}it(x,2,pt(V,2)),null!=(R=pt(V,3))&&(R=H(R),A(x.g,26),A(x.g,R.length),nt(x,x.g.end()),nt(x,R)),null!=(R=pt(V,4))&&(R=H(R),A(x.g,34),A(x.g,R.length),nt(x,x.g.end()),nt(x,R)),xt(V,x),W=rt(W),G.call(v,X,W)}}f=f.data;break t;default:f={}}}switch(u=f,d=c.stream,c.type){case"video":i.pushTexture2d(Object.assign(Object.assign({},u),{stream:d,timestamp:r}));break;case"detections":(h=u).stream=d,h.timestamp=r,i.pushDetectionList(h);break;default:throw Error("Unknown input config type: '"+c.type+"'")}}return m.i.send(i),g(n,m.C,4);case 4:i.delete(),n.g=0}}))}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",ee),R("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});var le={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(t){return t.map(ae)}},multiFaceLandmarks:{type:"proto_list",stream:"multi_face_landmarks",transform:function(t){return t.map((function(t){return Xt(Kt(t),kt).map(Pt)}))}}}}],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"}}}},se=[[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]],ce=[[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]],ue=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],de=[[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]],he=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],me=[[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]],fe=[].concat(l(se),l(ce),l(ue),l(de),l(he),l(me));function pe(t){t=t||{},t=Object.assign(Object.assign({},le),t),this.g=new ee(t)}(t=pe.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){return Ht(this,(function t(){var e=this;return X(t,(function(t){return g(t,e.g.initialize(),0)}))}))},t.reset=function(){this.g.reset()},t.send=function(t){return Ht(this,(function e(){var n=this;return X(e,(function(e){return g(e,n.g.send(t),0)}))}))},t.setOptions=function(t){this.g.setOptions(t)},R("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}}),R("FaceMesh",pe),R("FACEMESH_LIPS",se),R("FACEMESH_LEFT_EYE",ce),R("FACEMESH_LEFT_EYEBROW",ue),R("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),R("FACEMESH_RIGHT_EYE",de),R("FACEMESH_RIGHT_EYEBROW",he),R("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),R("FACEMESH_FACE_OVAL",me),R("FACEMESH_CONTOURS",fe),R("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]]),R("matrixDataToMatrix",(function(t){for(var e=t.getCols(),n=t.getRows(),r=t.getPackedDataList(),i=[],o=0;o<n;o++)i.push(Array(e));for(o=0;o<n;o++)for(var a=0;a<e;a++){var l=1===t.getLayout()?o*e+a:a*n+o;i[o][a]=r[l]}return i})),R("VERSION","0.4.1633559619")}).call(Zi);const vi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ka=e.prototype}function f(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={V:e,X:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new f,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.X)throw e.V;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}f.prototype.o=function(t){this.h=t},f.prototype.return=function(t){this.j={return:t},this.g=this.s},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.D),reject:t(this.l)}},e.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.G(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.A(t):this.m(t)}},e.prototype.A=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.H(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.F(),this.B()},e.prototype.F=function(){var t=this;o((function(){if(t.C()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.C=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.B=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.G=function(t){var e=this.j();t.K(e.resolve,e.reject)},e.prototype.H=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.K(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.K=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).K(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).K(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(t){throw t}function I(t,e){x(Error("Invalid wire type: "+t+" (at position "+e+")"))}function Y(){x(Error("Failed to read varint, encoding is invalid."))}function w(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var S,H,F=typeof TextDecoder<"u",L=typeof TextEncoder<"u";function C(t){if(L)t=(H||(H=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var T={},k=null;function J(t){var e;void 0===e&&(e=0),K(),e=T[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function N(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=k[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}K();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function K(){if(!k){k={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));T[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===k[o]&&(k[o]=i)}}}}var U,j="function"==typeof Uint8Array;function z(t){if(this.g=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}var B="function"==typeof Uint8Array.prototype.slice;function M(t,e,n){return e===n?U||(U=new Uint8Array(0)):B?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var E=0;function A(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.v=e,t&&O(this,t)}function O(t,e){t.h=function(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 N(t);if(t.constructor===z){if(null==t.g)var e=U||(U=new Uint8Array(0));else{e=Uint8Array;var n=t.g;n=null==n||j&&null!=n&&n instanceof Uint8Array?n:"string"==typeof n?N(n):null,e=new e(t=t.g=n)}return e}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")}(e),t.l=0,t.i=t.h.length,t.g=t.l}function P(t){for(var e=128,n=0,r=0,i=0;4>i&&128<=e;i++)n|=(127&(e=t.h[t.g++]))<<7*i;if(128<=e&&(n|=(127&(e=t.h[t.g++]))<<28,r|=(127&e)>>4),128<=e)for(i=0;5>i&&128<=e;i++)r|=(127&(e=t.h[t.g++]))<<7*i+3;if(128>e)return t=n>>>0,(r=2147483648&(e=r>>>0))&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),t=4294967296*e+(t>>>0),r?-t:t;t.j=!0,Y()}function Q(t){t.g>t.i&&(t.j=!0,x(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}function _(t){var e=t.h,n=e[t.g],r=127&n;return 128>n?(t.g+=1,Q(t),r):(r|=(127&(n=e[t.g+1]))<<7,128>n?(t.g+=2,Q(t),r):(r|=(127&(n=e[t.g+2]))<<14,128>n?(t.g+=3,Q(t),r):(r|=(127&(n=e[t.g+3]))<<21,128>n?(t.g+=4,Q(t),r):(r|=(15&(n=e[t.g+4]))<<28,128>n?(t.g+=5,Q(t),r>>>0):(t.g+=5,128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]?(t.j=!0,Y(),r):(Q(t),r))))))}function D(t){var e=t.h[t.g],n=t.h[t.g+1],r=t.h[t.g+2],i=t.h[t.g+3];return t.g+=4,Q(t),(e<<0|n<<8|r<<16|i<<24)>>>0}A.prototype.reset=function(){this.g=this.l},A.prototype.m=function(){var t=D(this),e=2*(t>>31)+1,n=t>>>23&255;return t&=8388607,255==n?t?NaN:1/0*e:0==n?e*Math.pow(2,-149)*t:e*Math.pow(2,n-150)*(t+Math.pow(2,23))};var q=[];function $(){this.g=new Uint8Array(64),this.h=0}function tt(t,e){if(!(t.h+1<t.g.length)){var n=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(n)}t.g[t.h++]=e}function et(t,e){for(;127<e;)tt(t,127&e|128),e>>>=7;tt(t,e)}function nt(t){var e={},n=void 0!==e.O&&e.O;this.m={v:void 0!==e.v&&e.v},this.O=n,e=this.m,q.length?(n=q.pop(),e&&(n.v=e.v),t&&O(n,t),t=n):t=new A(t,e),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}function rt(t){var e=t.g;if((e=e.g==e.i)||(e=t.j)||(e=(e=t.g).j||0>e.g||e.g>e.i),e)return!1;t.l=t.g.g;var n=_(t.g);return e=n>>>3,0<=(n&=7)&&5>=n?(t.i=e,t.h=n,!0):(t.j=!0,I(n,t.l),!1)}function it(t){switch(t.h){case 0:if(0!=t.h)it(t);else t:{for(var e=(t=t.g).g,n=0;10>n;n++){if(0==(128&t.h[e])){t.g=e+1,Q(t);break t}e++}t.j=!0,Y()}break;case 1:(t=t.g).g+=8,Q(t);break;case 2:2!=t.h?it(t):(e=_(t.g),(t=t.g).g+=e,Q(t));break;case 5:(t=t.g).g+=4,Q(t);break;case 3:for(e=t.i;;){if(!rt(t)){t.j=!0,x(Error("Unmatched start-group tag: stream EOF"));break}if(4==t.h){t.i!=e&&(t.j=!0,x(Error("Unmatched end-group tag")));break}it(t)}break;default:t.j=!0,I(t.h,t.l)}}function ot(t,e,n){var r=t.g.i,i=_(t.g),o=t.g.g+i;if(t.g.i=o,n(e,t),0!==(n=o-t.g.g))throw Error("Message parsing ended unexpectedly. Expected to read "+i+" bytes, instead read "+(i-n)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.i=r,e}$.prototype.length=function(){return this.h},$.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,M(t,0,e)},nt.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};var at=[];function lt(){this.h=[],this.i=0,this.g=new $}function st(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function ct(t,e,n){et(t.g,8*e+2),et(t.g,n.length),st(t,t.g.end()),st(t,n)}var ut,dt="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ht(t){return Object.isFrozen(t)||(dt?t[dt]|=1:void 0!==t.g?t.g|=1:Object.defineProperties(t,{g:{value:1,configurable:!0,writable:!0,enumerable:!1}})),t}function mt(t){return null!==t&&"object"==typeof t&&t.constructor===Object}function ft(t,e){if(null!=t)return Array.isArray(t)||mt(t)?pt(t,e):e(t)}function pt(t,e){if(Array.isArray(t)){for(var n=Array(t.length),r=0;r<t.length;r++)n[r]=ft(t[r],e);var i;if(e=Array.isArray(t))e=1&(null==(i=dt?t[dt]:t.g)?0:i);return e&&ht(n),n}for(n in i={},t)i[n]=ft(t[n],e);return i}function bt(t){return t=function(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(j&&null!=t&&t instanceof Uint8Array)return J(t);if(t instanceof z){if(null==t.g)t="";else{var e=t.g;e=null==e||"string"==typeof e?e:j&&e instanceof Uint8Array?J(e):null,t=t.g=e}return t}}return t}(t),Array.isArray(t)?pt(t,bt):t}function gt(t,e,n){var r=ut;if(ut=null,t||(t=r),r=this.constructor.ha,t||(t=r?[r]:[]),this.i=(r?0:-1)-(this.constructor.fa||0),this.l=this.g=null,this.u=t,t=(r=this.u.length)-1,r&&mt(r=this.u[t])?(this.j=t-this.i,this.h=r):void 0!==e&&-1<e?(this.j=Math.max(e,t+1-this.i),this.h=null):this.j=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)(t=n[e])<this.j?(t+=this.i,(r=this.u[t])?Array.isArray(r)&&ht(r):this.u[t]=yt):(Zt(this),(r=this.h[t])?Array.isArray(r)&&ht(r):this.h[t]=yt)}var yt=Object.freeze(ht([]));function Zt(t){var e=t.j+t.i;t.u[e]||(t.h=t.u[e]={})}function vt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.j?t.h?t.h[e]:void 0:t.u[e+t.i]}function Gt(t,e,n){var r=vt(t,e,n=void 0!==n&&n);return null==r&&(r=yt),r===yt&&Vt(t,e,r=ht(r.slice()),n),r}function Xt(t,e){var n=Gt(t,e);if(t.l||(t.l={}),!t.l[e]){for(var r=0;r<n.length;r++)n[r]=+n[r];t.l[e]=!0}return n}function Wt(t,e,n){return null==(t=null==(t=vt(t,e))?t:+t)?void 0===n?0:n:t}function Vt(t,e,n,r){void 0!==r&&r||e>=t.j?(Zt(t),t.h[e]=n):t.u[e+t.i]=n}function Rt(t,e,n,r){n!==r?Vt(t,e,n):Vt(t,e,void 0,!1)}function xt(t,e,n){if(-1===n)return null;t.g||(t.g={});var r=t.g[n];if(r)return r;var i=vt(t,n,!1);return null==i?r:(e=new e(i),t.g[n]=e)}function It(t,e,n){t.g||(t.g={});var r=t.g[n];if(!r){var i=Gt(t,n,!1);r=[];for(var o=0;o<i.length;o++)r[o]=new e(i[o]);t.g[n]=r}return r}function Yt(t,e,n,r,i){var o=It(t,r,e);n=n||new r,t=Gt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,n.u)):(o.push(n),t.push(n.u))}function wt(t,e){return null==(t=vt(t,e))?0:t}function St(t,e){return null==(t=vt(t,e))?"":t}function Ht(t,e){if(t=t.m){st(e,e.g.end());for(var n=0;n<t.length;n++)st(e,t[n])}}gt.prototype.toJSON=function(){return pt(this.u,bt)},gt.prototype.toString=function(){return this.u.toString()};var Ft=Symbol();function Lt(t,e,n){return t[Ft]||(t[Ft]=function(t,r){return e(t,r,n)})}function Ct(t){var e=t[Ft];if(!e){var n=t[Jt]||(t[Jt]=t());e=function(t,e){return Nt(t,e,n)},t[Ft]=e}return e}function Tt(t){var e=function(t){var e=t.da;if(e)return Ct(e);if(e=t.ia){var n=t.Y;return delete t.Y,Lt(t.W.g,e,n)}}(t),n=t.W,r=t.ea;return e?function(t,i){return r(t,i,n,e)}:function(t,e){return r(t,e,n)}}function kt(t){var e=t[0];switch(t.length){case 2:var n=t[1];return function(t,r,i){return e(t,r,i,n)};case 3:var r=t[1],i=Ct(t[2]);return function(t,n,o){return e(t,n,o,r,i)};case 4:var o=t[1],a=t[3],l=Ct(t[2]);return function(t,n,r){return e(t,n,r,o,l,a)};case 5:var s=t[1],c=Lt(s,t[3],t[4]);return function(t,n,r){return e(t,n,r,s,c)};case 6:var u=t[1],d=t[5],h=Lt(u,t[3],t[4]);return function(t,n,r){return e(t,n,r,u,h,d)};default:throw Error("Unsupported number of parameters, expected [2-6], got "+t.length)}}var Jt=Symbol();function Nt(t,e,n){for(;rt(e)&&4!=e.h;){var r=e.i,i=n[r];if(i)Array.isArray(i)&&(i=n[r]=kt(i));else{var o=n[0];o&&(o=o[r])&&(i=n[r]=Tt(o))}i&&i(e,t,r)||(r=t,o=(i=e).l,it(i),i.O||(i=M(i.g.h,o,i.g.g),(o=r.m)?o.push(i):r.m=[i]))}return t}function Kt(t,e){var n=new lt;if(e(t,n),0===(t=n.i+n.g.length()))n=new Uint8Array(0);else{t=new Uint8Array(t);for(var r=n.h,i=r.length,o=e=0;o<i;o++){var a=r[o];0!==a.length&&(t.set(a,e),e+=a.length)}0!==(i=(r=n.g).h)&&(t.set(r.g.subarray(0,i),e),r.h=0),n.h=[t],n=t}return n}function Ut(t,e,n){if(at.length){var r=at.pop();t&&(O(r.g,t),r.i=-1,r.h=-1),t=r}else t=new nt(t);try{return Nt(new e,t,n[Jt]||(n[Jt]=n()))}finally{(e=t.g).h=null,e.l=0,e.i=0,e.g=0,e.j=!1,e.v=!1,t.i=-1,t.h=-1,t.j=!1,100>at.length&&at.push(t)}}function jt(t,e,n){if(null!=(e=vt(e,n))){et(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?E=0:(0,E=2147483648):isNaN(r)?(0,E=2147483647):34028234663852886e22<r?(0,E=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,E=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,E=(n<<31|e+127<<23|8388607&r)>>>0),tt(t,(n=E)>>>0&255),tt(t,n>>>8&255),tt(t,n>>>16&255),tt(t,n>>>24&255)}}function zt(t,e,n){if(1!==t.h)return!1;var r=t.g;t=D(r);var i=D(r);r=2*(i>>31)+1;var o=i>>>20&2047;return t=4294967296*(1048575&i)+t,Rt(e,n,2047==o?t?NaN:1/0*r:0==o?r*Math.pow(2,-1074)*t:r*Math.pow(2,o-1075)*(t+4503599627370496),0),!0}function Bt(t,e,n){return 5===t.h&&(Vt(e,n,t.g.m()),!0)}function Mt(t,e,n){if(5!==t.h&&2!==t.h)return!1;if(e=Gt(e,n),2==t.h){n=A.prototype.m;var r=_(t.g);for(r=t.g.g+r;t.g.g<r;)e.push(n.call(t.g))}else e.push(t.g.m());return!0}function Et(t,e,n){return 5===t.h&&(Rt(e,n,t=t.g.m(),0),!0)}function At(t,e,n){return 0===t.h&&(Vt(e,n,P(t.g)),!0)}function Ot(t,e,n){return 0===t.h&&(Vt(e,n,_(t.g)),!0)}function Pt(t,e,n){return 0===t.h&&(Rt(e,n,t=_(t.g),0),!0)}function Qt(t,e,n){return 0===t.h&&(Rt(e,n,t=!!_(t.g),!1),!0)}function _t(t,e,n){if(2!==t.h)return!1;var r,i=_(t.g),o=(t=t.g).g;if(t.g+=i,Q(t),t=t.h,F)(r=S)||(r=S=new TextDecoder("utf-8",{fatal:!1})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?c.push(65533):(l=t[o++],194>a||128!=(192&l)?(o--,c.push(65533)):c.push((31&a)<<6|63&l)):240>a?o>=i-1?c.push(65533):128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,c.push(65533)):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?c.push(65533):128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,c.push(65533)):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):c.push(65533),8192<=c.length&&(u=w(u,c),c.length=0);r=w(u,c)}return Vt(e,n,r),!0}function Dt(t,e,n,r,i){return 2===t.h&&(t=ot(t,new r,i),e.g||(e.g={}),r=t&&t.u,e.g[n]=t,Vt(e,n,r,!1),!0)}function qt(t,e,n,r,i){return 2===t.h&&(Yt(e,n,t=ot(t,new r,i),r,void 0),!0)}function $t(t,e,n){return 0===t.h&&(Vt(e,n,P(t.g)),!0)}function te(t){gt.call(this,t)}function ee(){return{1:Ot,2:Bt,3:_t,4:_t}}function ne(t,e){var n=vt(t,1);if(null!=n&&null!=n){et(e.g,8);var r=e.g;if(0<=n)et(r,n);else{for(var i=0;9>i;i++)tt(r,127&n|128),n>>=7;tt(r,1)}}jt(e,t,2),null!=(r=vt(t,3))&&ct(e,3,C(r)),null!=(r=vt(t,4))&&ct(e,4,C(r)),Ht(t,e)}function re(t){gt.call(this,t,-1,oe)}function ie(){return{1:[qt,te,ee]}}m(te,gt),m(re,gt),re.prototype.addClassification=function(t,e){return Yt(this,1,t,te,e),this};var oe=[1];function ae(t){gt.call(this,t)}function le(){return{1:Bt,2:Bt,3:Bt,4:Bt,5:Bt}}function se(t,e){jt(e,t,1),jt(e,t,2),jt(e,t,3),jt(e,t,4),jt(e,t,5),Ht(t,e)}function ce(t){gt.call(this,t,-1,de)}function ue(){return{1:[qt,ae,le]}}m(ae,gt),m(ce,gt);var de=[1];function he(t){gt.call(this,t)}function me(){return{1:Bt,2:Bt,3:Bt,4:Bt,5:Bt,6:At}}function fe(t,e){jt(e,t,1),jt(e,t,2),jt(e,t,3),jt(e,t,4),jt(e,t,5);var n=vt(t,6);if(null!=n&&null!=n){et(e.g,48);var r=e.g,i=n;n=0>i;var o=(i=Math.abs(i))>>>0;for(i=Math.floor((i-o)/4294967296),i>>>=0,n&&(i=~i>>>0,4294967295<(o=1+(~o>>>0))&&(o=0,4294967295<++i&&(i=0))),n=E=o,o=i;0<o||127<n;)tt(r,127&n|128),n=(n>>>7|o<<25)>>>0,o>>>=7;tt(r,n)}Ht(t,e)}function pe(t){gt.call(this,t,-1,Ze)}function be(){return{1:$t,2:$t,3:Mt,4:[Dt,ge,ye],5:Ot,6:Ot,7:Mt,8:Mt,9:Mt}}function ge(t){gt.call(this,t)}function ye(){return{1:Bt,2:Bt,3:Bt}}m(he,gt),m(pe,gt),m(ge,gt);var Ze=[3,7,8,9];function ve(t){gt.call(this,t)}function Ge(){return{1:Et,2:Et,3:Et}}function Xe(t){gt.call(this,t)}function We(){return{1:Et,2:Et,3:Et}}function Ve(t){gt.call(this,t)}function Re(){return{1:Pt,2:[Dt,Xe,We],3:[Dt,ve,Ge],4:Qt}}function xe(t){gt.call(this,t,-1,Ye)}function Ie(){return{1:Pt,2:[qt,Ve,Re],3:Et,4:Mt,5:Mt,6:Mt}}m(ve,gt),m(Xe,gt),m(Ve,gt),m(xe,gt);var Ye=[2,4,5,6];function we(t){gt.call(this,t,-1,He)}function Se(){return{1:Pt,2:[qt,xe,Ie],3:[Dt,pe,be],4:zt,5:Mt,6:Mt}}m(we,gt);var He=[2,5,6];function Fe(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Le(t){return It(t,te,1).map((function(t){return{index:wt(t,1),$:Wt(t,2),label:null!=vt(t,3)?St(t,3):void 0,displayName:null!=vt(t,4)?St(t,4):void 0}}))}function Ce(t){return{x:Wt(t,1),y:Wt(t,2),z:Wt(t,3),visibility:null!=vt(t,4)?Wt(t,4):void 0}}function Te(t,e){this.h=t,this.g=e,this.l=0}function ke(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=Fe(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=Fe(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={J:n.getAttribLocation(r,"aVertex"),I:n.getAttribLocation(r,"aTex"),ja:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.J),n.vertexAttribPointer(t.j.J,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.J,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.J),n.disableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function Je(t){this.g=t}var Ne=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 Ke(t,e){return e+t}function Ue(t,e){window[t]=e}function je(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||Ke,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.T=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function ze(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(m){switch(m.g){case 1:return t.S?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(m,X((function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(Ne),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)}})),2)):m.return();case 2:if(n=m.h,"object"==typeof window)return Ue("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),Ue("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=Be(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.T)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,Be(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(m,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.T)})),importScripts.apply(null,l(r)),i=t,g(m,createMediapipeSolutionsWasm(Module),6);case 6:i.h=m.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ga:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),m.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),m.return();t.F=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.S=!1,m.g=0}}))}function Be(t,e){var n,r;return X((function(i){return e in t.G?i.return(t.G[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.G[e]=r,i.return(r))}))}function Me(t,e,n){var r,i,o,l,s,c,u,d,h,m,f,p,b,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.H=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.s[e])||(r=new Te(t.h,t.F),t.s[e]=r),i.return(ke(r,n,t.H))):i.return(void 0)}))}(t,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=Ut(v.get(R),he,me);x={U:{aa:Wt(x,1),ba:Wt(x,2),height:Wt(x,3),width:Wt(x,4),rotation:Wt(x,5,0),Z:wt(x,6)},P:It(Ut(G.get(R),ce,ue),ae,1).map(Ce),N:Le(Ut(W.get(R),re,ie))},V.push(x)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===m){Z.g=3;break}if("float_list"===h.type){r[d]=m,Z.g=7;break}if("proto"===h.type){r[d]=m,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(f=t.s[d])||(f=new Te(t.h,t.F),t.s[d]=f),g(Z,ke(f,m,t.H),13);case 13:p=Z.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:b[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function Ee(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.D=Me(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.D=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Ae(t){var e=wt(t,1),n=xt(t,ve,3);return{id:e,point2d:n={x:Wt(n,1),y:Wt(n,2),depth:Wt(n,3)},point3d:{x:Wt(t=xt(t,Xe,2),1),y:Wt(t,2),z:Wt(t,3)}}}function Oe(t){var e=Ut(t,we,Se);t=[],e=It(e,xe,2);for(var n=0;n<e.length;n++)t.push({id:wt(e[n],1),keypoints:It(e[n],Ve,2).map(Ae),visibility:Wt(e[n],3),scale:Xt(e[n],6),translation:Xt(e[n],5),rotation:Xt(e[n],4)});return t}function Pe(t){switch(t){case"Camera":return"Camera";case"Chair":return"Chair";case"Cup":return"Coffee cup, Mug";default:return"Footwear"}}(t=je.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.m={},t.s={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={L:o.L,M:o.M},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.L=s.onChange,o.M=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.L(t.M),2);!0===e.h&&(n.o=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.B=(void 0===this.B?[]:this.B).concat(i),this.A=(void 0===this.A?[]:this.A).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,ze(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.R===t.g.graph.url?u.return():(t.o=!0,t.g.graph&&t.g.graph.url?(t.R=t.g.graph.url,g(u,Be(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.C)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.C[i]);if(t.C={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Ee(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.o)return s.return();if(!t.A){s.g=2;break}e=a(t.A),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.B),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.B=void 0}t.o=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.C[t]=e},t.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(m){switch(m.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(m,h.D,2)):m.return();case 2:return g(m,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var f=t[l];switch(s.type){case"video":var p=h.m[s.stream];if(p||(p=new Te(h.h,h.F),h.m[s.stream]=p),0===p.l&&(p.l=p.h.createTexture()),typeof HTMLVideoElement<"u"&&f instanceof HTMLVideoElement)var b=f.videoWidth,y=f.videoHeight;else typeof HTMLImageElement<"u"&&f instanceof HTMLImageElement?(b=f.naturalWidth,y=f.naturalHeight):(b=f.width,y=f.height);y={glName:p.l,width:b,height:y},(b=p.g).canvas.width=y.width,b.canvas.height=y.height,b.activeTexture(b.TEXTURE0),p.h.bindTexture2d(p.l),b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,f),p.h.bindTexture2d(0),p=y;break t;case"detections":for((p=h.m[s.stream])||(p=new Je(h.h),h.m[s.stream]=p),p.data||(p.data=new p.g.DetectionListData),p.data.reset(f.length),y=0;y<f.length;++y){b=f[y];var Z=p.data,v=Z.setBoundingBox,G=y,X=b.U,W=new he;if(Vt(W,1,X.aa),Vt(W,2,X.ba),Vt(W,3,X.height),Vt(W,4,X.width),Vt(W,5,X.rotation),Vt(W,6,X.Z),X=Kt(W,fe),v.call(Z,G,X),b.P)for(Z=0;Z<b.P.length;++Z){var V=!!(W=b.P[Z]).visibility;G=(v=p.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),Vt(V=new ae,1,W.x),Vt(V,2,W.y),Vt(V,3,W.z),W.visibility&&Vt(V,4,W.visibility),W=Kt(V,se),G.call(v,X,W)}if(b.N)for(Z=0;Z<b.N.length;++Z)G=(v=p.data).addClassification,X=y,W=b.N[Z],Vt(V=new te,2,W.$),W.index&&Vt(V,1,W.index),W.label&&Vt(V,3,W.label),W.displayName&&Vt(V,4,W.displayName),W=Kt(V,ne),G.call(v,X,W)}p=p.data;break t;default:p={}}}switch(c=p,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(m,h.D,4);case 4:r.delete(),m.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",je),R("OptionType",{BOOL:0,NUMBER:1,ca:2,0:"BOOL",1:"NUMBER",2:"STRING"});var Qe={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 _e(t){var e=this;t=t||{},this.g=new je({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:Oe}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"object"==typeof window&&void 0!==window.navigator&&("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(t){var n,r,i,o;return X((function(a){return 1==a.g?(n=t,e.g.setOptions({allowedLabels:Pe(n)},Qe),r=function(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"}}(n),i="object_detection_3d.tflite",g(a,Be(e.g,r),2)):(o=a.h,e.g.overrideFile(i,o),a.return(!0))}))}},focalLength:{default:[1,1],onChange:function(t){var n;return X((function(r){return n=t,e.h=n,e.g.setOptions({focalX:n[0],focalY:n[1]},Qe),r.return(!0)}))}},principalPoint:{default:[0,0],onChange:function(t){var n;return X((function(r){return n=t,e.i=n,e.g.setOptions({principalX:n[0],principalY:n[1]},Qe),r.return(!0)}))}},imageSize:{onChange:function(t){var n,r,i,o;return X((function(a){if(void 0===e.h||void 0===e.i)return console.error('"focalLength" and "principalPoint" must be set if setting image size'),a.return();r=[(n=t)[0]/2,n[1]/2],i=[e.h[0]/r[0],e.h[1]/r[1]],o=[e.i[0]/r[0],e.i[1]/r[1]],e.setOptions({focalLength:i,principalPoint:o}),a.g=0}))}}}})}(t=_e.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return X((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},R("Objectron",_e),R("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]]),R("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}),R("VERSION","0.4.1636596145")}).call(vi);const Gi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ea=e.prototype}function f(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function b(t,e){t.j={U:e,V:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new f,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,b(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,b(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.V)throw e.U;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(b(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}f.prototype.o=function(t){this.h=t},f.prototype.return=function(t){this.j={return:t},this.g=this.s},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.C),reject:t(this.l)}},e.prototype.C=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.F(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.v(t):this.m(t)}},e.prototype.v=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.G(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.D(),this.A()},e.prototype.D=function(){var t=this;o((function(){if(t.B()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.B=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.A=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.F=function(t){var e=this.j();t.J(e.resolve,e.reject)},e.prototype.G=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.J(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.J=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).J(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).J(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(t){!function(t){V.setTimeout((function(){throw t}),0)}(t)}function I(t,e){x(Error("Invalid wire type: "+t+" (at position "+e+")"))}function Y(){x(Error("Failed to read varint, encoding is invalid."))}function w(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var S,H,F=typeof TextDecoder<"u",L=typeof TextEncoder<"u";function C(t){if(L)t=(H||(H=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var T={},k=null;function J(t){var e;void 0===e&&(e=0),K(),e=T[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function N(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=k[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}K();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function K(){if(!k){k={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));T[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===k[o]&&(k[o]=i)}}}}var U,j="function"==typeof Uint8Array;function z(t){if(this.g=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}z.prototype.toJSON=function(){if(null==this.g)var t="";else t=this.g,t=this.g=null==t||"string"==typeof t?t:j&&t instanceof Uint8Array?J(t):null;return t};var B="function"==typeof Uint8Array.prototype.slice;function M(t,e,n){return e===n?U||(U=new Uint8Array(0)):B?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var E=0;function A(t,e){e=void 0!==(e=void 0===e?{}:e).u&&e.u,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.u=e,t&&O(this,t)}function O(t,e){t.h=function(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 N(t);if(t.constructor===z){if(null==t.g)var e=U||(U=new Uint8Array(0));else{e=Uint8Array;var n=t.g;n=null==n||j&&null!=n&&n instanceof Uint8Array?n:"string"==typeof n?N(n):null,e=new e(t=t.g=n)}return e}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")}(e),t.l=0,t.i=t.h.length,t.g=t.l}function P(t){t.g>t.i&&(t.j=!0,x(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}function Q(t){var e=t.h,n=e[t.g],r=127&n;return 128>n?(t.g+=1,P(t),r):(r|=(127&(n=e[t.g+1]))<<7,128>n?(t.g+=2,P(t),r):(r|=(127&(n=e[t.g+2]))<<14,128>n?(t.g+=3,P(t),r):(r|=(127&(n=e[t.g+3]))<<21,128>n?(t.g+=4,P(t),r):(r|=(15&(n=e[t.g+4]))<<28,128>n?(t.g+=5,P(t),r>>>0):(t.g+=5,128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]?(t.j=!0,Y(),r):(P(t),r))))))}A.prototype.reset=function(){this.g=this.l};var _=[];function D(){this.g=new Uint8Array(64),this.h=0}function q(t,e){if(!(t.h+1<t.g.length)){var n=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(n)}t.g[t.h++]=e}function $(t,e){for(;127<e;)q(t,127&e|128),e>>>=7;q(t,e)}function tt(t){var e={},n=void 0!==e.N&&e.N;this.m={u:void 0!==e.u&&e.u},this.N=n,e=this.m,_.length?(n=_.pop(),e&&(n.u=e.u),t&&O(n,t),t=n):t=new A(t,e),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}function et(t){var e=t.g;if((e=e.g==e.i)||(e=t.j)||(e=(e=t.g).j||0>e.g||e.g>e.i),e)return!1;t.l=t.g.g;var n=Q(t.g);return e=n>>>3,0<=(n&=7)&&5>=n?(t.i=e,t.h=n,!0):(t.j=!0,I(n,t.l),!1)}function nt(t){switch(t.h){case 0:if(0!=t.h)nt(t);else t:{for(var e=(t=t.g).g,n=0;10>n;n++){if(0==(128&t.h[e])){t.g=e+1,P(t);break t}e++}t.j=!0,Y()}break;case 1:(t=t.g).g+=8,P(t);break;case 2:2!=t.h?nt(t):(e=Q(t.g),(t=t.g).g+=e,P(t));break;case 5:(t=t.g).g+=4,P(t);break;case 3:for(e=t.i;;){if(!et(t)){t.j=!0,x(Error("Unmatched start-group tag: stream EOF"));break}if(4==t.h){t.i!=e&&(t.j=!0,x(Error("Unmatched end-group tag")));break}nt(t)}break;default:t.j=!0,I(t.h,t.l)}}function rt(t,e,n){t.N||(t=M(t.g.h,n,t.g.g),(n=e.m)?n.push(t):e.m=[t])}D.prototype.length=function(){return this.h},D.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,M(t,0,e)},tt.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};var it=[];function ot(){this.h=[],this.i=0,this.g=new D}function at(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function lt(t,e,n){$(t.g,8*e+2),$(t.g,n.length),at(t,t.g.end()),at(t,n)}var st,ct="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ut(t,e){Object.isFrozen(t)||(ct?t[ct]|=e:void 0!==t.g?t.g|=e:Object.defineProperties(t,{g:{value:e,configurable:!0,writable:!0,enumerable:!1}}))}function dt(t){return t?null==(e=ct?t[ct]:t.g)?0:e:0;var e}function ht(t){return Array.isArray(t)&&ut(t,1),t}function mt(t){if(!Array.isArray(t))throw Error("cannot mark non-array as immutable");ut(t,2)}function ft(t){return null!==t&&"object"==typeof t&&t.constructor===Object}function pt(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":return j&&null!=t&&t instanceof Uint8Array?J(t):t;default:return t}}function bt(t,e){if(null!=t)return Array.isArray(t)||ft(t)?gt(t,e):e(t)}function gt(t,e){if(Array.isArray(t)){for(var n=Array(t.length),r=0;r<t.length;r++)n[r]=bt(t[r],e);return 1&dt(t)&&ht(n),n}for(r in n={},t)n[r]=bt(t[r],e);return n}function yt(t,e,n){var r=st;if(st=null,t||(t=r),r=this.constructor.ca,t||(t=r?[r]:[]),this.j=(r?0:-1)-(this.constructor.aa||0),this.i=null,this.g=t,t=(r=this.g.length)-1,r&&ft(r=this.g[t])?(this.l=t-this.j,this.h=r):void 0!==e&&-1<e?(this.l=Math.max(e,t+1-this.j),this.h=null):this.l=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)(t=n[e])<this.l?(t+=this.j,(r=this.g[t])?ht(r):this.g[t]=Gt):(Xt(this),(r=this.h[t])?ht(r):this.h[t]=Gt)}var Zt,vt,Gt=Object.freeze(ht([]));function Xt(t){var e=t.l+t.j;t.g[e]||(t.h=t.g[e]={})}function Wt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.l?t.h?t.h[e]:void 0:t.g[e+t.j]}function Vt(t,e,n){n=void 0===n||n;var r=void 0!==r&&r,i=Wt(t,e,r);return null==i&&(i=Gt),i===Gt?xt(t,e,i=ht([]),r):n&&Array.isArray(i)&&2&dt(i)&&xt(t,e,i=i.slice(),r),i}function Rt(t,e,n){return null==(t=null==(t=Wt(t,e))?t:+t)?void 0===n?0:n:t}function xt(t,e,n,r){void 0!==r&&r||e>=t.l?(Xt(t),t.h[e]=n):t.g[e+t.j]=n}function It(t,e,n){t.i||(t.i={});var r=t.i[n];if(!r){var i=Vt(t,n,!1);r=[];for(var o=!!Array.isArray(i)&&!!(2&dt(i)),a=0;a<i.length;a++)r[a]=new e(i[a]),o&&mt(r[a].g);o&&(mt(r),Object.freeze(r)),t.i[n]=r}return r}function Yt(t,e,n,r,i){var o=It(t,r,e);n=n||new r,t=Vt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,wt(n))):(o.push(n),t.push(wt(n)))}function wt(t){if(t.i)for(var e in t.i){var n=t.i[e];if(Array.isArray(n))for(var r=0;r<n.length;r++)n[r]&&wt(n[r]);else n&&wt(n)}return t.g}function St(t,e){return null==(t=Wt(t,e))?0:t}function Ht(t,e){return null==(t=Wt(t,e))?"":t}function Ft(t,e){if(t=t.m){at(e,e.g.end());for(var n=0;n<t.length;n++)at(e,t[n])}}function Lt(t){var e=t[0];switch(t.length){case 2:var n=t[1];return function(t,r,i){return e(t,r,i,n)};case 3:var r=t[1],i=t[2];return function(t,n,o){return e(t,n,o,r,i)};case 4:var o=t[1],a=t[2],l=t[3];return function(t,n,r){return e(t,n,r,o,a,l)};default:throw Error("unsupported number of parameters, expected [2-4], got "+t.length)}}function Ct(t,e,n){for(;et(e)&&4!=e.h;){var r=e.i,i=n[r];if(i){if(Array.isArray(i)&&(i=n[r]=Lt(i)),!i(e,t,r)){i=t;var o=(r=e).l;nt(r),rt(r,i,o)}}else i=t,o=(r=e).l,nt(r),rt(r,i,o)}return t}function Tt(t,e){var n=new ot;if(e(t,n),0===(t=n.i+n.g.length()))n=new Uint8Array(0);else{t=new Uint8Array(t);for(var r=n.h,i=r.length,o=e=0;o<i;o++){var a=r[o];0!==a.length&&(t.set(a,e),e+=a.length)}0!==(i=(r=n.g).h)&&(t.set(r.g.subarray(0,i),e),r.h=0),n.h=[t],n=t}return n}function kt(t,e,n){if(it.length){var r=it.pop();t&&(O(r.g,t),r.i=-1,r.h=-1),t=r}else t=new tt(t);try{return n(new e,t)}finally{(e=t.g).h=null,e.l=0,e.i=0,e.g=0,e.j=!1,e.u=!1,t.i=-1,t.h=-1,t.j=!1,100>it.length&&it.push(t)}}function Jt(t,e,n){if(null!=(e=Wt(e,n))){$(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?E=0:(0,E=2147483648):isNaN(r)?(0,E=2147483647):34028234663852886e22<r?(0,E=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,E=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,E=(n<<31|e+127<<23|8388607&r)>>>0),q(t,(n=E)>>>0&255),q(t,n>>>8&255),q(t,n>>>16&255),q(t,n>>>24&255)}}function Nt(t,e,n){if(5!==t.h)return!1;var r=(t=t.g).h[t.g],i=t.h[t.g+1],o=t.h[t.g+2],a=t.h[t.g+3];return t.g+=4,P(t),t=2*((i=(r<<0|i<<8|o<<16|a<<24)>>>0)>>31)+1,r=i>>>23&255,i&=8388607,xt(e,n,255==r?i?NaN:1/0*t:0==r?t*Math.pow(2,-149)*i:t*Math.pow(2,r-150)*(i+Math.pow(2,23))),!0}function Kt(t,e,n){if(0!==t.h)return!1;for(var r=t.g,i=128,o=0,a=t=0;4>a&&128<=i;a++)o|=(127&(i=r.h[r.g++]))<<7*a;if(128<=i&&(o|=(127&(i=r.h[r.g++]))<<28,t|=(127&i)>>4),128<=i)for(a=0;5>a&&128<=i;a++)t|=(127&(i=r.h[r.g++]))<<7*a+3;return 128>i?(r=o>>>0,(t=2147483648&(i=t>>>0))&&(i=~i>>>0,0==(r=1+~r>>>0)&&(i=i+1>>>0)),r=4294967296*i+(r>>>0),t=t?-r:r):(r.j=!0,Y(),t=void 0),xt(e,n,t),!0}function Ut(t,e,n){return 0===t.h&&(xt(e,n,Q(t.g)),!0)}function jt(t,e,n){if(2!==t.h)return!1;var r,i=Q(t.g),o=(t=t.g).g;if(t.g+=i,P(t),t=t.h,F)(r=S)||(r=S=new TextDecoder("utf-8",{fatal:!1})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?c.push(65533):(l=t[o++],194>a||128!=(192&l)?(o--,c.push(65533)):c.push((31&a)<<6|63&l)):240>a?o>=i-1?c.push(65533):128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,c.push(65533)):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?c.push(65533):128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,c.push(65533)):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):c.push(65533),8192<=c.length&&(u=w(u,c),c.length=0);r=w(u,c)}return xt(e,n,r),!0}function zt(t,e,n,r,i){if(2!==t.h)return!1;var o=new r,a=t.g.i,l=Q(t.g),s=t.g.g+l;if(t.g.i=s,i(o,t),0!==(i=s-t.g.g))throw Error("Message parsing ended unexpectedly. Expected to read "+l+" bytes, instead read "+(l-i)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=s,t.g.i=a,Yt(e,n,o,r,void 0),!0}function Bt(t){yt.call(this,t)}function Mt(t,e){var n=Wt(t,1);if(null!=n&&null!=n){$(e.g,8);var r=e.g;if(0<=n)$(r,n);else{for(var i=0;9>i;i++)q(r,127&n|128),n>>=7;q(r,1)}}Jt(e,t,2),null!=(r=Wt(t,3))&&lt(e,3,C(r)),null!=(r=Wt(t,4))&&lt(e,4,C(r)),Ft(t,e)}function Et(t,e){return Ct(t,e,Zt||(Zt={1:Ut,2:Nt,3:jt,4:jt}))}function At(t){yt.call(this,t,-1,_t)}function Ot(t,e){return Ct(t,e,vt||(vt={1:[zt,Bt,Et]}))}yt.prototype.toJSON=function(){return gt(wt(this),pt)},yt.prototype.toString=function(){return wt(this).toString()},m(Bt,yt),m(At,yt),At.prototype.addClassification=function(t,e){return Yt(this,1,t,Bt,e),this};var Pt,Qt,_t=[1];function Dt(t){yt.call(this,t)}function qt(t,e){Jt(e,t,1),Jt(e,t,2),Jt(e,t,3),Jt(e,t,4),Jt(e,t,5),Ft(t,e)}function $t(t,e){return Ct(t,e,Pt||(Pt={1:Nt,2:Nt,3:Nt,4:Nt,5:Nt}))}function te(t){yt.call(this,t,-1,re)}function ee(t,e){return Ct(t,e,Qt||(Qt={1:[zt,Dt,$t]}))}m(Dt,yt),m(te,yt);var ne,re=[1];function ie(t){yt.call(this,t)}function oe(t,e){Jt(e,t,1),Jt(e,t,2),Jt(e,t,3),Jt(e,t,4),Jt(e,t,5);var n=Wt(t,6);if(null!=n&&null!=n){$(e.g,48);var r=e.g,i=n;n=0>i;var o=(i=Math.abs(i))>>>0;for(i=Math.floor((i-o)/4294967296),i>>>=0,n&&(i=~i>>>0,4294967295<(o=1+(~o>>>0))&&(o=0,4294967295<++i&&(i=0))),n=E=o,o=i;0<o||127<n;)q(r,127&n|128),n=(n>>>7|o<<25)>>>0,o>>>=7;q(r,n)}Ft(t,e)}function ae(t,e){return Ct(t,e,ne||(ne={1:Nt,2:Nt,3:Nt,4:Nt,5:Nt,6:Kt}))}function le(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function se(t){return It(t,Bt,1).map((function(t){return{index:St(t,1),X:Rt(t,2),label:null!=Wt(t,3)?Ht(t,3):void 0,displayName:null!=Wt(t,4)?Ht(t,4):void 0}}))}function ce(t){return{x:Rt(t,1),y:Rt(t,2),z:Rt(t,3),visibility:null!=Wt(t,4)?Rt(t,4):void 0}}function ue(t){return It(kt(t,te,ee),Dt,1).map(ce)}function de(t,e){this.h=t,this.g=e,this.l=0}function he(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=le(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=le(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={I:n.getAttribLocation(r,"aVertex"),H:n.getAttribLocation(r,"aTex"),da:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.H),n.vertexAttribPointer(t.j.H,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.H,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.I),n.disableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function me(t){this.g=t}m(ie,yt);var fe=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 pe(t,e){return e+t}function be(t,e){window[t]=e}function ge(t){if(this.g=t,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=t&&t.locateFile||pe,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.S=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function ye(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(m){switch(m.g){case 1:return t.R?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(m,X((function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(fe),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)}})),2)):m.return();case 2:if(n=m.h,"object"==typeof window)return be("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),be("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=Ze(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.S)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,Ze(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(m,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.S)})),importScripts.apply(null,l(r)),i=t,g(m,createMediapipeSolutionsWasm(Module),6);case 6:i.h=m.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),m.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),m.return();t.D=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.R=!1,m.g=0}}))}function Ze(t,e){var n,r;return X((function(i){return e in t.F?i.return(t.F[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.F[e]=r,i.return(r))}))}function ve(t,e,n){var r,i,o,l,s,c,u,d,h,m,f,p,b,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.G=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return b=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.s[e])||(r=new de(t.h,t.D),t.s[e]=r),i.return(he(r,n,t.G))):i.return(void 0)}))}(t,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=kt(v.get(R),ie,ae);x={T:{Y:Rt(x,1),Z:Rt(x,2),height:Rt(x,3),width:Rt(x,4),rotation:Rt(x,5,0),W:St(x,6)},O:ue(G.get(R)),M:se(kt(W.get(R),At,Ot))},V.push(x)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===m){Z.g=3;break}if("float_list"===h.type){r[d]=m,Z.g=7;break}if("proto"===h.type){r[d]=m,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(f=t.s[d])||(f=new de(t.h,t.D),t.s[d]=f),g(Z,he(f,m,t.G),13);case 13:p=Z.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:b[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function Ge(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.C=ve(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.C=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Xe(t){switch(void 0===t&&(t=0),t){case 1:return"pose_landmark_full.tflite";case 2:return"pose_landmark_heavy.tflite";default:return"pose_landmark_lite.tflite"}}function We(t){var e=this;t=t||{},this.g=new ge({locateFile:t.locateFile,files:function(t){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:Xe(t.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:ue},poseWorldLandmarks:{type:"proto",stream:"world_landmarks",transform:ue},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(t){var n,r,i;return X((function(o){return 1==o.g?(n=Xe(t),r="third_party/mediapipe/modules/pose_landmark/"+n,g(o,Ze(e.g,n),2)):(i=o.h,e.g.overrideFile(r,i),o.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"}}}})}(t=ge.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.m={},t.s={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={K:o.K,L:o.L},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.K=s.onChange,o.L=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.K(t.L),2);!0===e.h&&(n.o=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.A=(void 0===this.A?[]:this.A).concat(i),this.v=(void 0===this.v?[]:this.v).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,ye(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.P===t.g.graph.url?u.return():(t.o=!0,t.g.graph&&t.g.graph.url?(t.P=t.g.graph.url,g(u,Ze(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.B)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.B[i]);if(t.B={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Ge(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.o)return s.return();if(!t.v){s.g=2;break}e=a(t.v),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.v=void 0;case 2:if(t.A){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.A),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.A=void 0}t.o=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.B[t]=e},t.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(m){switch(m.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(m,h.C,2)):m.return();case 2:return g(m,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var f=t[l];switch(s.type){case"video":var p=h.m[s.stream];if(p||(p=new de(h.h,h.D),h.m[s.stream]=p),0===p.l&&(p.l=p.h.createTexture()),typeof HTMLVideoElement<"u"&&f instanceof HTMLVideoElement)var b=f.videoWidth,y=f.videoHeight;else typeof HTMLImageElement<"u"&&f instanceof HTMLImageElement?(b=f.naturalWidth,y=f.naturalHeight):(b=f.width,y=f.height);y={glName:p.l,width:b,height:y},(b=p.g).canvas.width=y.width,b.canvas.height=y.height,b.activeTexture(b.TEXTURE0),p.h.bindTexture2d(p.l),b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,f),p.h.bindTexture2d(0),p=y;break t;case"detections":for((p=h.m[s.stream])||(p=new me(h.h),h.m[s.stream]=p),p.data||(p.data=new p.g.DetectionListData),p.data.reset(f.length),y=0;y<f.length;++y){b=f[y];var Z=p.data,v=Z.setBoundingBox,G=y,X=b.T,W=new ie;if(xt(W,1,X.Y),xt(W,2,X.Z),xt(W,3,X.height),xt(W,4,X.width),xt(W,5,X.rotation),xt(W,6,X.W),X=Tt(W,oe),v.call(Z,G,X),b.O)for(Z=0;Z<b.O.length;++Z){var V=!!(W=b.O[Z]).visibility;G=(v=p.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),xt(V=new Dt,1,W.x),xt(V,2,W.y),xt(V,3,W.z),W.visibility&&xt(V,4,W.visibility),W=Tt(V,qt),G.call(v,X,W)}if(b.M)for(Z=0;Z<b.M.length;++Z)G=(v=p.data).addClassification,X=y,W=b.M[Z],xt(V=new Bt,2,W.X),W.index&&xt(V,1,W.index),W.label&&xt(V,3,W.label),W.displayName&&xt(V,4,W.displayName),W=Tt(V,Mt),G.call(v,X,W)}p=p.data;break t;default:p={}}}switch(c=p,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(m,h.C,4);case 4:r.delete(),m.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",ge),R("OptionType",{BOOL:0,NUMBER:1,$:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=We.prototype).reset=function(){this.g.reset()},t.close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.send=function(t,e){var n=this;return X((function(r){return g(r,n.g.send(t,e),0)}))},t.setOptions=function(t){this.g.setOptions(t)},R("Pose",We),R("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]]),R("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}),R("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}),R("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}),R("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),R("VERSION","0.5.1635988162")}).call(Gi);const ir=class{constructor(){Rt(this,"mediapipeMap_",new Map)}getVersion(t){switch(t){case"face_detection":return gi.VERSION;case"face_mesh":return Zi.VERSION;case"hands":return bi.VERSION;case"holistic":return yi.VERSION;case"objectron":return vi.VERSION;case"selfie_segmentation":return pi.VERSION;case"pose":return Gi.VERSION;default:return""}}initialize(t){return new Promise((async(e,n)=>{if(0!=t.mediaPipeModelConfigArray.length){for(let e=0;e<t.mediaPipeModelConfigArray.length;e++){const r=t.mediaPipeModelConfigArray[e];if(this.mediapipeMap_.has(r.modelType))return void n("setting same type is not supported");if("function"!=typeof r.listener)return void n(`[${r.modelType}] ResultsListener must be provided`);let i;switch(r.modelType){case"face_mesh":i=new Zi.FaceMesh({locateFile:(t,e)=>(r.assetsUri||ir.defaultAssetsBaseUrl+"face_mesh/"+this.getVersion("face_mesh"))+"/"+t});break;case"face_detection":i=new gi.FaceDetection({locateFile:(t,e)=>(r.assetsUri||ir.defaultAssetsBaseUrl+"face_detection/"+this.getVersion("face_detection"))+"/"+t});break;case"hands":i=new bi.Hands({locateFile:(t,e)=>(r.assetsUri||ir.defaultAssetsBaseUrl+"hands/"+this.getVersion("hands"))+"/"+t});break;case"holistic":i=new yi.Holistic({locateFile:(t,e)=>(r.assetsUri||ir.defaultAssetsBaseUrl+"holistic/"+this.getVersion("holistic"))+"/"+t});break;case"objectron":i=new vi.Objectron({locateFile:(t,e)=>(r.assetsUri||ir.defaultAssetsBaseUrl+"objectron/"+this.getVersion("objectron"))+"/"+t});break;case"selfie_segmentation":i=new pi.SelfieSegmentation({locateFile:(t,e)=>(r.assetsUri||ir.defaultAssetsBaseUrl+"selfie_segmentation/"+this.getVersion("selfie_segmentation"))+"/"+t});break;case"pose":i=new Gi.Pose({locateFile:(t,e)=>(r.assetsUri||ir.defaultAssetsBaseUrl+"pose/"+this.getVersion("pose"))+"/"+t});break;default:return void n("unknown model type")}i.onResults(r.listener),r.options&&i.setOptions(r.options);try{await i.initialize(),this.mediapipeMap_.set(r.modelType,i)}catch(t){return void n(t)}}e()}else n("no model was selected")}))}close(t){return new Promise(((e,n)=>{let r=[];if(t){let e=this.mediapipeMap_.get(t);if(!e)return void n("model not exit");this.mediapipeMap_.delete(t),r.push(e.close())}else{for(const[t,e]of this.mediapipeMap_.entries())r.push(e.close());this.mediapipeMap_.clear()}Promise.all(r).then((()=>{e()})).catch((t=>{n(t)}))}))}send(t,e){return new Promise(((n,r)=>{let i=[];if(e){let n=this.mediapipeMap_.get(e);if(!n)return void r("model not exit");i.push(n.send({image:t}))}else for(const[e,n]of this.mediapipeMap_.entries())i.push(n.send({image:t}));Promise.all(i).then((()=>{n()})).catch((t=>{r(t)}))}))}reset(t){if(t){let e=this.mediapipeMap_.get(t);e&&"function"==typeof e.reset&&e.reset()}else for(const[t,e]of this.mediapipeMap_.entries())e&&"function"==typeof e.reset&&e.reset()}};let qi=ir;Rt(qi,"defaultAssetsBaseUrl","https://d3opqjmqzxf057.cloudfront.net/ml/mediapipe/");const ur=new WeakMap,di=new WeakMap,Ur=new WeakMap,co=Symbol("anyProducer"),gs=Promise.resolve(),Xi=Symbol("listenerAdded"),Vi=Symbol("listenerRemoved");let to=!1;function Yr(t){if("string"!=typeof t&&"symbol"!=typeof t)throw new TypeError("eventName must be a string or a symbol")}function ti(t){if("function"!=typeof t)throw new TypeError("listener must be a function")}function Tr(t,e){const n=di.get(t);return n.has(e)||n.set(e,new Set),n.get(e)}function Mr(t,e){const n="string"==typeof e||"symbol"==typeof e?e:co,r=Ur.get(t);return r.has(n)||r.set(n,new Set),r.get(n)}function $c(t,e,n){const r=Ur.get(t);if(r.has(e))for(const t of r.get(e))t.enqueue(n);if(r.has(co)){const t=Promise.all([e,n]);for(const e of r.get(co))e.enqueue(t)}}function Zs(t,e){e=Array.isArray(e)?e:[e];let n=!1,r=()=>{},i=[];const o={enqueue(t){i.push(t),r()},finish(){n=!0,r()}};for(const n of e)Mr(t,n).add(o);return{async next(){return i?0===i.length?n?(i=void 0,this.next()):(await new Promise((t=>{r=t})),this.next()):{done:!1,value:await i.shift()}:{done:!0}},async return(n){i=void 0;for(const n of e)Mr(t,n).delete(o);return r(),arguments.length>0?{done:!0,value:await n}:{done:!0}},[Symbol.asyncIterator](){return this}}}function vs(t){if(void 0===t)return Gs;if(!Array.isArray(t))throw new TypeError("`methodNames` must be an array of strings");for(const e of t)if(!Gs.includes(e))throw"string"!=typeof e?new TypeError("`methodNames` element must be a string"):new Error(`${e} is not Emittery method`);return t}const eo=t=>t===Xi||t===Vi;class Gr{static mixin(t,e){return e=vs(e),n=>{if("function"!=typeof n)throw new TypeError("`target` must be function");for(const t of e)if(void 0!==n.prototype[t])throw new Error(`The property \`${t}\` already exists on \`target\``);Object.defineProperty(n.prototype,t,{enumerable:!1,get:function(){return Object.defineProperty(this,t,{enumerable:!1,value:new Gr}),this[t]}});const r=e=>function(...n){return this[t][e](...n)};for(const t of e)Object.defineProperty(n.prototype,t,{enumerable:!1,value:r(t)});return n}}static get isDebugEnabled(){if("object"!=typeof process)return to;const{env:t}=process||{env:{}};return"emittery"===t.DEBUG||"*"===t.DEBUG||to}static set isDebugEnabled(t){to=t}constructor(t={}){ur.set(this,new Set),di.set(this,new Map),Ur.set(this,new Map),this.debug=t.debug||{},void 0===this.debug.enabled&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(t,e,n,r)=>{try{r=JSON.stringify(r)}catch{r=`Object with the following keys failed to stringify: ${Object.keys(r).join(",")}`}"symbol"==typeof n&&(n=n.toString());const i=new Date,o=`${i.getHours()}:${i.getMinutes()}:${i.getSeconds()}.${i.getMilliseconds()}`;console.log(`[${o}][emittery:${t}][${e}] Event Name: ${n}\n\tdata: ${r}`)})}logIfDebugEnabled(t,e,n){(Gr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(t,this.debug.name,e,n)}on(t,e){ti(e),t=Array.isArray(t)?t:[t];for(const n of t)Yr(n),Tr(this,n).add(e),this.logIfDebugEnabled("subscribe",n,void 0),eo(n)||this.emit(Xi,{eventName:n,listener:e});return this.off.bind(this,t,e)}off(t,e){ti(e),t=Array.isArray(t)?t:[t];for(const n of t)Yr(n),Tr(this,n).delete(e),this.logIfDebugEnabled("unsubscribe",n,void 0),eo(n)||this.emit(Vi,{eventName:n,listener:e})}once(t){return new Promise((e=>{const n=this.on(t,(t=>{n(),e(t)}))}))}events(t){t=Array.isArray(t)?t:[t];for(const e of t)Yr(e);return Zs(this,t)}async emit(t,e){Yr(t),this.logIfDebugEnabled("emit",t,e),$c(this,t,e);const n=Tr(this,t),r=ur.get(this),i=[...n],o=eo(t)?[]:[...r];await gs,await Promise.all([...i.map((async t=>{if(n.has(t))return t(e)})),...o.map((async n=>{if(r.has(n))return n(t,e)}))])}async emitSerial(t,e){Yr(t),this.logIfDebugEnabled("emitSerial",t,e);const n=Tr(this,t),r=ur.get(this),i=[...n],o=[...r];await gs;for(const t of i)n.has(t)&&await t(e);for(const n of o)r.has(n)&&await n(t,e)}onAny(t){return ti(t),this.logIfDebugEnabled("subscribeAny",void 0,void 0),ur.get(this).add(t),this.emit(Xi,{listener:t}),this.offAny.bind(this,t)}anyEvent(){return Zs(this)}offAny(t){ti(t),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(Vi,{listener:t}),ur.get(this).delete(t)}clearListeners(t){t=Array.isArray(t)?t:[t];for(const e of t)if(this.logIfDebugEnabled("clear",e,void 0),"string"==typeof e||"symbol"==typeof e){Tr(this,e).clear();const t=Mr(this,e);for(const e of t)e.finish();t.clear()}else{ur.get(this).clear();for(const t of di.get(this).values())t.clear();for(const t of Ur.get(this).values()){for(const e of t)e.finish();t.clear()}}}listenerCount(t){t=Array.isArray(t)?t:[t];let e=0;for(const n of t)if("string"!=typeof n){typeof n<"u"&&Yr(n),e+=ur.get(this).size;for(const t of di.get(this).values())e+=t.size;for(const t of Ur.get(this).values())e+=t.size}else e+=ur.get(this).size+Tr(this,n).size+Mr(this,n).size+Mr(this).size;return e}bindMethods(t,e){if("object"!=typeof t||null===t)throw new TypeError("`target` must be an object");e=vs(e);for(const n of e){if(void 0!==t[n])throw new Error(`The property \`${n}\` already exists on \`target\``);Object.defineProperty(t,n,{enumerable:!1,value:this[n].bind(this)})}}}const Gs=Object.getOwnPropertyNames(Gr.prototype).filter((t=>"constructor"!==t));Object.defineProperty(Gr,"listenerAdded",{value:Xi,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(Gr,"listenerRemoved",{value:Vi,writable:!1,enumerable:!0,configurable:!1});var tl=Gr,gr=(t=>(t[t.INIT=0]="INIT",t[t.FORWARD=1]="FORWARD",t[t.TERMINATE=2]="TERMINATE",t))(gr||{});function el(t){return[ImageBitmap,ReadableStream,WritableStream].some((e=>t instanceof e))}let qc=0;function ao(t,e,n,r,i){const o=qc++;return t.postMessage({id:o,type:e,functionName:n,args:r},r.filter((t=>el(t)))),new Promise((t=>{i.set(o,t)}))}async function t2(t,e,n){const r=new e;if(r.addEventListener("message",(({data:t})=>{var e;null==(e=n.get(t.id))||e(t.result),n.delete(t.id)})),!await ao(r,gr.INIT,"",[t.workerId],n))throw"Failed to instantiate workerized class";return r}async function e2(t,e,n){const r={};return Object.getOwnPropertyNames(t.prototype).forEach((t=>{r[t]=(...r)=>ao(e,gr.FORWARD,t,r,n)})),r.terminate=async(...t)=>{const i=await ao(e,gr.TERMINATE,"",t,n);return e.terminate(),r.worker=void 0,i},r.worker=e,r}async function n2(t,e){const n=new Map;return e2(t,await t2(t,e,n),n)}function Io(t,e){const{id:n}=t,r=Array.isArray(e)?e:[e];postMessage({id:n,result:e},r.filter((t=>el(t))))}async function r2(t,e){const{functionName:n,args:r}=t;if(!e.instance)throw"instance not initialized";if(!n)throw"missing function name to call";if(!e.instance[n])throw`undefined function [${n}] in class ${e.instance.constructor.workerId}`;Io(t,await e.instance[n](...null!=r?r:[]))}function nl(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}const rl={};function i2(t,e){e.workerId=t,nl()&&(rl[e.workerId]=e)}function o2(t,e){if(!t.args)throw"Missing className while initializing worker";const[n]=t.args,r=rl[n];if(!r)throw`unknown worker class ${n}`;e.instance=new r(t.args.slice(1)),Io(t,void 0!==typeof e.instance)}async function s2(t,e){const{args:n}=t;if(!e.instance)throw"instance not initialized";let r;e.instance.terminate&&(r=await e.instance.terminate(...null!=n?n:[])),Io(t,r)}function l2(){const t={};onmessage=async e=>{const n=e.data;switch(n.type){case gr.INIT:o2(n,t);break;case gr.FORWARD:r2(n,t);break;case gr.TERMINATE:s2(n,t)}}}nl()&&l2();class Xs{static async createVideoReadable(t){return new Promise(((e,n)=>{const r=document.createElement("video");let i=new AbortController,o=new AbortController;r.addEventListener("canplay",(()=>{i.abort(),r.muted=!0,r.loop=!0,r.play().then((()=>{try{const t=r.captureStream(),n=new MediaStreamTrackProcessor(t.getVideoTracks()[0]);e(n.readable)}catch(t){n(t)}}))}),{once:!0,signal:o.signal}),r.addEventListener("error",(t=>{o.abort(),n("loading error:"+t)}),{once:!0,signal:i.signal}),r.crossOrigin="anonymous",r.src=t}))}static async createImageCanvas(t){const e=await(await fetch(t)).blob();return await createImageBitmap(e)}}async function il(t){return new Promise((e=>{setTimeout((()=>{e()}),t)}))}var ol=(t=>(t.PUSH="PUSH",t.POP="POP",t))(ol||{});class u2{constructor(t){Rt(this,"context"),Rt(this,"extension"),Rt(this,"queries",[]),Rt(this,"activeQuery"),this.context=t,this.extension=t.getExtension("EXT_disjoint_timer_query_webgl2")}start(){}stop(){this.activeQuery&&this.context.endQuery(this.extension.TIME_ELAPSED_EXT)}pushContext(t){this.createQuery("PUSH",t)}popContext(t){this.createQuery("POP",t)}createQuery(t,e){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:e,action:t,query:this.activeQuery})}async getResolvedQueries(){const t=(await Promise.all([...this.queries].map((t=>this.resolveQuery(t))))).filter((t=>t));for(let e=1;e<t.length;++e)t[e].timestamp+=t[e-1].duration+t[e-1].timestamp;return t}async resolveQuery(t){if(await this.awaitQueryAvailable(t)){if(!this.context.getParameter(this.extension.GPU_DISJOINT_EXT))return{...t,duration:this.context.getQueryParameter(t.query,this.context.QUERY_RESULT),timestamp:0};console.log("Disjointed query",t)}else console.log("Unawaitable query",t)}async awaitQueryAvailable(t){for(let e=0;e<10;++e){if(this.context.getQueryParameter(t.query,this.context.QUERY_RESULT_AVAILABLE))return t;await il(200)}}}
2
2
  /* @license twgl.js 5.2.0 Copyright (c) 2015, Gregg Tavares All Rights Reserved.
3
3
  Available via the MIT license.
4
- see: http://github.com/greggman/twgl.js for details */const So=5120,Br=5121,Yo=5122,To=5123,wo=5124,Lo=5125,Ho=5126,c2=32819,a2=32820,d2=33635,h2=5131,f2=33640,m2=35899,p2=35902,b2=36269,y2=34042,sl={};{const t=sl;t[So]=Int8Array,t[Br]=Uint8Array,t[Yo]=Int16Array,t[To]=Uint16Array,t[wo]=Int32Array,t[Lo]=Uint32Array,t[Ho]=Float32Array,t[c2]=Uint16Array,t[a2]=Uint16Array,t[d2]=Uint16Array,t[h2]=Uint16Array,t[f2]=Uint32Array,t[m2]=Uint32Array,t[p2]=Uint32Array,t[b2]=Uint32Array,t[y2]=Uint32Array}function Fo(t){if(t instanceof Int8Array)return So;if(t instanceof Uint8Array||t instanceof Uint8ClampedArray)return Br;if(t instanceof Int16Array)return Yo;if(t instanceof Uint16Array)return To;if(t instanceof Int32Array)return wo;if(t instanceof Uint32Array)return Lo;if(t instanceof Float32Array)return Ho;throw new Error("unsupported typed array type")}function ll(t){if(t===Int8Array)return So;if(t===Uint8Array||t===Uint8ClampedArray)return Br;if(t===Int16Array)return Yo;if(t===Uint16Array)return To;if(t===Int32Array)return wo;if(t===Uint32Array)return Lo;if(t===Float32Array)return Ho;throw new Error("unsupported typed array type")}function ul(t){const e=sl[t];if(!e)throw new Error("unknown gl type");return e}const Vi=typeof SharedArrayBuffer<"u"?function(t){return t&&t.buffer&&(t.buffer instanceof ArrayBuffer||t.buffer instanceof SharedArrayBuffer)}:function(t){return t&&t.buffer&&t.buffer instanceof ArrayBuffer};function cl(...t){console.error(...t)}const Ws=new Map;function Ci(t,e){if(!t||"object"!=typeof t)return!1;let n=Ws.get(e);n||(n=new WeakMap,Ws.set(e,n));let r=n.get(t);if(void 0===r){const i=Object.prototype.toString.call(t);r=i.substring(8,i.length-1)===e,n.set(t,r)}return r}function g2(t,e){return typeof WebGLBuffer<"u"&&Ci(e,"WebGLBuffer")}function Z2(t,e){return typeof WebGLRenderbuffer<"u"&&Ci(e,"WebGLRenderbuffer")}function Co(t,e){return typeof WebGLTexture<"u"&&Ci(e,"WebGLTexture")}function v2(t,e){return typeof WebGLSampler<"u"&&Ci(e,"WebGLSampler")}const al=35044,Zr=34962,G2=34963,X2=34660,W2=5120,V2=5121,R2=5122,x2=5123,I2=5124,S2=5125,dl=5126,hl={attribPrefix:""};function Y2(t,e,n,r,i){t.bindBuffer(e,n),t.bufferData(e,r,i||al)}function fl(t,e,n,r){if(g2(t,e))return e;n=n||Zr;const i=t.createBuffer();return Y2(t,n,i,e,r),i}function ml(t){return"indices"===t}function T2(t){return t===Int8Array||t===Uint8Array}function w2(t){return t.length?t:t.data}const L2=/coord|texture/i,H2=/color|colour/i;function F2(t,e){let n;if(n=L2.test(t)?2:H2.test(t)?4:3,e%n>0)throw new Error(`Can not guess numComponents for attribute '${t}'. Tried ${n} but ${e} values is not evenly divisible by ${n}. You should specify it.`);return n}function C2(t,e,n){return t.numComponents||t.size||F2(e,n||w2(t).length)}function pl(t,e){if(Vi(t))return t;if(Vi(t.data))return t.data;Array.isArray(t)&&(t={data:t});let n=t.type?No(t.type):void 0;return n||(n=ml(e)?Uint16Array:Float32Array),new n(t.data)}function N2(t){return"number"==typeof t?t:t?ll(t):dl}function No(t){return"number"==typeof t?ul(t):t||Float32Array}function J2(t,e){return{buffer:e.buffer,numValues:24,type:N2(e.type),arrayType:No(e.type)}}function k2(t,e){const n=e.data||e,r=No(e.type),i=n*r.BYTES_PER_ELEMENT,o=t.createBuffer();return t.bindBuffer(Zr,o),t.bufferData(Zr,i,e.drawType||al),{buffer:o,numValues:n,type:ll(r),arrayType:r}}function E2(t,e,n){const r=pl(e,n);return{arrayType:r.constructor,buffer:fl(t,r,void 0,e.drawType),type:Fo(r),numValues:0}}function U2(t,e){const n={};return Object.keys(e).forEach((function(r){if(!ml(r)){const i=e[r],o=i.attrib||i.name||i.attribName||hl.attribPrefix+r;if(i.value){if(!Array.isArray(i.value)&&!Vi(i.value))throw new Error("array.value is not array or typedarray");n[o]={value:i.value}}else{let e;e=i.buffer&&i.buffer instanceof WebGLBuffer?J2:"number"==typeof i||"number"==typeof i.data?k2:E2;const{buffer:a,type:l,numValues:s,arrayType:c}=e(t,i,r),u=void 0!==i.normalize?i.normalize:T2(c),d=C2(i,r,s);n[o]={buffer:a,numComponents:d,type:l,normalize:u,stride:i.stride||0,offset:i.offset||0,divisor:void 0===i.divisor?void 0:i.divisor,drawType:i.drawType}}}})),t.bindBuffer(Zr,null),n}function K2(t,e){return e===W2||e===V2?1:e===R2||e===x2?2:e===I2||e===S2||e===dl?4:0}const no=["position","positions","a_position"];function M2(t,e){let n,r;for(r=0;r<no.length&&(n=no[r],!(n in e)&&(n=hl.attribPrefix+n,!(n in e)));++r);r===no.length&&(n=Object.keys(e)[0]);const i=e[n];if(!i.buffer)return 1;t.bindBuffer(Zr,i.buffer);const o=t.getBufferParameter(Zr,X2);t.bindBuffer(Zr,null);const a=o/K2(t,i.type),l=i.numComponents||i.size,s=a/l;if(s%1!=0)throw new Error(`numComponents ${l} not correct for length ${length}`);return s}function B2(t,e,n){const r=U2(t,e),i=Object.assign({},n||{});i.attribs=Object.assign({},n?n.attribs:{},r);const o=e.indices;if(o){const e=pl(o,"indices");i.indices=fl(t,e,G2),i.numElements=e.length,i.elementType=Fo(e)}else i.numElements||(i.numElements=M2(t,i.attribs));return i}function Pr(t){return!!t.texStorage2D}const bl=function(){const t={},e={};return function(n,r){return function(n){const r=n.constructor.name;if(!t[r]){for(const t in n)if("number"==typeof n[t]){const r=e[n[t]];e[n[t]]=r?`${r} | ${t}`:t}t[r]=!0}}(n),e[r]||("number"==typeof r?`0x${r.toString(16)}`:r)}}(),hr={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},Ar=Vi,yl=function(){let t;return function(){return t=t||(typeof document<"u"&&document.createElement?document.createElement("canvas").getContext("2d"):null),t}}(),Vs=6406,nr=6407,Vn=6408,Rs=6409,xs=6410,Jr=6402,Is=34041,Ri=33071,A2=9728,j2=9729,fr=3553,ar=34067,Xr=32879,Wr=35866,Jo=34069,z2=34070,P2=34071,O2=34072,_2=34073,Q2=34074,ho=10241,fo=10240,xi=10242,Ii=10243,Ss=32882,D2=33082,$2=33083,q2=33084,t1=33085,ko=3317,gl=3314,Zl=32878,vl=3316,Gl=3315,Xl=32877,e1=37443,n1=37441,r1=37440,i1=33321,o1=36756,s1=33325,l1=33326,u1=33330,c1=33329,a1=33338,d1=33337,h1=33340,f1=33339,m1=33323,p1=36757,b1=33327,y1=33328,g1=33336,Z1=33335,v1=33332,G1=33331,X1=33334,W1=33333,V1=32849,R1=35905,x1=36194,I1=36758,S1=35898,Y1=35901,T1=34843,w1=34837,L1=36221,H1=36239,F1=36215,C1=36233,N1=36209,J1=36227,k1=32856,E1=35907,U1=36759,K1=32855,M1=32854,B1=32857,A1=34842,j1=34836,z1=36220,P1=36238,O1=36975,_1=36214,Q1=36232,D1=36226,$1=36208,q1=33189,ta=33190,ea=36012,na=36013,ra=35056,cr=5120,Zn=5121,ei=5122,wr=5123,ni=5124,br=5125,jn=5126,Ys=32819,Ts=32820,ws=33635,tr=5131,kr=36193,ro=33640,ia=35899,oa=35902,sa=36269,la=34042,ri=33319,Lr=33320,ii=6403,Hr=36244,Fr=36248,yr=36249;let io;function Ni(t){if(!io){const t={};t[Vs]={textureFormat:Vs,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[Zn,tr,kr,jn]},t[Rs]={textureFormat:Rs,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[Zn,tr,kr,jn]},t[xs]={textureFormat:xs,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[Zn,tr,kr,jn]},t[nr]={textureFormat:nr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[Zn,tr,kr,jn,ws]},t[Vn]={textureFormat:Vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[Zn,tr,kr,jn,Ys,Ts]},t[Jr]={textureFormat:Jr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[br,wr]},t[i1]={textureFormat:ii,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[Zn]},t[o1]={textureFormat:ii,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[cr]},t[s1]={textureFormat:ii,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[jn,tr]},t[l1]={textureFormat:ii,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[jn]},t[u1]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[Zn]},t[c1]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[cr]},t[v1]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[wr]},t[G1]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[ei]},t[X1]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[br]},t[W1]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[ni]},t[m1]={textureFormat:ri,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[Zn]},t[p1]={textureFormat:ri,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[cr]},t[b1]={textureFormat:ri,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[jn,tr]},t[y1]={textureFormat:ri,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[jn]},t[g1]={textureFormat:Lr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Zn]},t[Z1]={textureFormat:Lr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[cr]},t[a1]={textureFormat:Lr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[wr]},t[d1]={textureFormat:Lr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[ei]},t[h1]={textureFormat:Lr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[br]},t[f1]={textureFormat:Lr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[ni]},t[V1]={textureFormat:nr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[Zn]},t[R1]={textureFormat:nr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[Zn]},t[x1]={textureFormat:nr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[Zn,ws]},t[I1]={textureFormat:nr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[cr]},t[S1]={textureFormat:nr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[jn,tr,ia]},t[Y1]={textureFormat:nr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[jn,tr,oa]},t[T1]={textureFormat:nr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[jn,tr]},t[w1]={textureFormat:nr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[jn]},t[L1]={textureFormat:Fr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[Zn]},t[H1]={textureFormat:Fr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[cr]},t[F1]={textureFormat:Fr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[wr]},t[C1]={textureFormat:Fr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[ei]},t[N1]={textureFormat:Fr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[br]},t[J1]={textureFormat:Fr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[ni]},t[k1]={textureFormat:Vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Zn]},t[E1]={textureFormat:Vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Zn]},t[U1]={textureFormat:Vn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[cr]},t[K1]={textureFormat:Vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[Zn,Ts,ro]},t[M1]={textureFormat:Vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[Zn,Ys]},t[B1]={textureFormat:Vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[ro]},t[A1]={textureFormat:Vn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[jn,tr]},t[j1]={textureFormat:Vn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[jn]},t[z1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Zn]},t[P1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[cr]},t[O1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[ro]},t[_1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[wr]},t[Q1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[ei]},t[D1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[ni]},t[$1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[br]},t[q1]={textureFormat:Jr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[wr,br]},t[ta]={textureFormat:Jr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[br]},t[ea]={textureFormat:Jr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[jn]},t[ra]={textureFormat:Is,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[la]},t[na]={textureFormat:Is,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[sa]},Object.keys(t).forEach((function(e){const n=t[e];n.bytesPerElementMap={},n.bytesPerElement.forEach((function(t,e){const r=n.type[e];n.bytesPerElementMap[r]=t}))})),io=t}return io[t]}function ua(t,e){const n=Ni(t);if(!n)throw"unknown internal format";const r=n.bytesPerElementMap[e];if(void 0===r)throw"unknown internal format";return r}function Or(t){const e=Ni(t);if(!e)throw"unknown internal format";return{format:e.textureFormat,type:e.type[0]}}function Ls(t){return 0==(t&t-1)}function ca(t,e,n,r){if(!Pr(t))return Ls(e)&&Ls(n);const i=Ni(r);if(!i)throw"unknown internal format";return i.colorRenderable&&i.textureFilterable}function aa(t){const e=Ni(t);if(!e)throw"unknown internal format";return e.textureFilterable}function da(t,e,n){return Ar(e)?Fo(e):n||Zn}function oi(t,e,n,r,i){if(i%1!=0)throw"can't guess dimensions";if(n||r){if(r){if(!n&&(n=i/r)%1)throw"can't guess dimensions"}else if((r=i/n)%1)throw"can't guess dimensions"}else{const t=Math.sqrt(i/(e===ar?6:1));t%1==0?(n=t,r=t):(n=i,r=1)}return{width:n,height:r}}function Nr(t,e){void 0!==e.colorspaceConversion&&t.pixelStorei(e1,e.colorspaceConversion),void 0!==e.premultiplyAlpha&&t.pixelStorei(n1,e.premultiplyAlpha),void 0!==e.flipY&&t.pixelStorei(r1,e.flipY)}function Wl(t){t.pixelStorei(ko,4),Pr(t)&&(t.pixelStorei(gl,0),t.pixelStorei(Zl,0),t.pixelStorei(vl,0),t.pixelStorei(Gl,0),t.pixelStorei(Xl,0))}function ha(t,e,n,r){r.minMag&&(n.call(t,e,ho,r.minMag),n.call(t,e,fo,r.minMag)),r.min&&n.call(t,e,ho,r.min),r.mag&&n.call(t,e,fo,r.mag),r.wrap&&(n.call(t,e,xi,r.wrap),n.call(t,e,Ii,r.wrap),(e===Xr||v2(t,e))&&n.call(t,e,Ss,r.wrap)),r.wrapR&&n.call(t,e,Ss,r.wrapR),r.wrapS&&n.call(t,e,xi,r.wrapS),r.wrapT&&n.call(t,e,Ii,r.wrapT),r.minLod&&n.call(t,e,D2,r.minLod),r.maxLod&&n.call(t,e,$2,r.maxLod),r.baseLevel&&n.call(t,e,q2,r.baseLevel),r.maxLevel&&n.call(t,e,t1,r.maxLevel)}function Vl(t,e,n){const r=n.target||fr;t.bindTexture(r,e),ha(t,r,t.texParameteri,n)}function fa(t){return Ar(t=t||hr.textureColor)?t:new Uint8Array([255*t[0],255*t[1],255*t[2],255*t[3]])}function mo(t,e,n,r,i,o){o=o||Vn;const a=(n=n||hr.textureOptions).target||fr;if(r=r||n.width,i=i||n.height,t.bindTexture(a,e),ca(t,r,i,o))t.generateMipmap(a);else{const e=aa(o)?j2:A2;t.texParameteri(a,ho,e),t.texParameteri(a,fo,e),t.texParameteri(a,xi,Ri),t.texParameteri(a,Ii,Ri)}}function jr(t){return!0===t.auto||void 0===t.auto&&void 0===t.level}function po(t,e){return(e=e||{}).cubeFaceOrder||[Jo,z2,P2,O2,_2,Q2]}function bo(t,e){const n=po(t,e).map((function(t,e){return{face:t,ndx:e}}));return n.sort((function(t,e){return t.face-e.face})),n}function Rl(t,e,n,r){const i=(r=r||hr.textureOptions).target||fr,o=r.level||0;let a=n.width,l=n.height;const s=r.internalFormat||r.format||Vn,c=Or(s),u=r.format||c.format,d=r.type||c.type;if(Nr(t,r),t.bindTexture(i,e),i===ar){const c=n.width,h=n.height;let m,p;if(c/6===h)m=h,p=[0,0,1,0,2,0,3,0,4,0,5,0];else if(h/6===c)m=c,p=[0,0,0,1,0,2,0,3,0,4,0,5];else if(c/3==h/2)m=c/3,p=[0,0,1,0,2,0,0,1,1,1,2,1];else{if(c/2!=h/3)throw"can't figure out cube map from element: "+(n.src?n.src:n.nodeName);m=c/2,p=[0,0,1,0,0,1,1,1,0,2,1,2]}const f=yl();f?(f.canvas.width=m,f.canvas.height=m,a=m,l=m,bo(t,r).forEach((function(e){const r=p[2*e.ndx+0]*m,i=p[2*e.ndx+1]*m;f.drawImage(n,r,i,m,m,0,0,m,m),t.texImage2D(e.face,o,s,u,d,f.canvas)})),f.canvas.width=1,f.canvas.height=1):typeof createImageBitmap<"u"&&(a=m,l=m,bo(t,r).forEach((function(c){const h=p[2*c.ndx+0]*m,f=p[2*c.ndx+1]*m;t.texImage2D(c.face,o,s,m,m,0,u,d,null),createImageBitmap(n,h,f,m,m,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then((function(n){Nr(t,r),t.bindTexture(i,e),t.texImage2D(c.face,o,s,u,d,n),jr(r)&&mo(t,e,r,a,l,s)}))})))}else if(i===Xr||i===Wr){const e=Math.min(n.width,n.height),r=Math.max(n.width,n.height),a=r/e;if(a%1!=0)throw"can not compute 3D dimensions of element";const l=n.width===r?1:0,c=n.height===r?1:0;t.pixelStorei(ko,1),t.pixelStorei(gl,n.width),t.pixelStorei(Zl,0),t.pixelStorei(Xl,0),t.texImage3D(i,o,s,e,e,e,0,u,d,null);for(let r=0;r<a;++r){const a=r*e*l,s=r*e*c;t.pixelStorei(vl,a),t.pixelStorei(Gl,s),t.texSubImage3D(i,o,0,0,r,e,e,1,u,d,n)}Wl(t)}else t.texImage2D(i,o,s,u,d,n);jr(r)&&mo(t,e,r,a,l,s),Vl(t,e,r)}function _r(){}function ma(t){if(typeof document<"u"){const e=document.createElement("a");return e.href=t,e.hostname===location.hostname&&e.port===location.port&&e.protocol===location.protocol}{const e=new URL(location.href).origin;return new URL(t,location.href).origin===e}}function pa(t,e){return void 0!==e||ma(t)?e:"anonymous"}function ba(t,e,n){let r;if(n=n||_r,e=pa(t,e=void 0!==e?e:hr.crossOrigin),typeof Image<"u"){r=new Image,void 0!==e&&(r.crossOrigin=e);const i=function(){r.removeEventListener("error",o),r.removeEventListener("load",a),r=null},o=function(){const e="couldn't load image: "+t;cl(e),n(e,r),i()},a=function(){n(null,r),i()};return r.addEventListener("error",o),r.addEventListener("load",a),r.src=t,r}if(typeof ImageBitmap<"u"){let i,o;const a=function(){n(i,o)},l={};e&&(l.mode="cors"),fetch(t,l).then((function(t){if(!t.ok)throw t;return t.blob()})).then((function(t){return createImageBitmap(t,{premultiplyAlpha:"none",colorSpaceConversion:"none"})})).then((function(t){o=t,setTimeout(a)})).catch((function(t){i=t,setTimeout(a)})),r=null}return r}function xl(t){return typeof ImageBitmap<"u"&&t instanceof ImageBitmap||typeof ImageData<"u"&&t instanceof ImageData||typeof HTMLElement<"u"&&t instanceof HTMLElement}function Eo(t,e,n){return xl(t)?(setTimeout((function(){n(null,t)})),t):ba(t,e,n)}function Uo(t,e,n){const r=(n=n||hr.textureOptions).target||fr;if(t.bindTexture(r,e),!1===n.color)return;const i=fa(n.color);if(r===ar)for(let e=0;e<6;++e)t.texImage2D(Jo+e,0,Vn,1,1,0,Vn,Zn,i);else r===Xr||r===Wr?t.texImage3D(r,0,Vn,1,1,1,0,Vn,Zn,i):t.texImage2D(r,0,Vn,1,1,0,Vn,Zn,i)}function ya(t,e,n,r){return r=r||_r,Uo(t,e,n=n||hr.textureOptions),Eo((n=Object.assign({},n)).src,n.crossOrigin,(function(i,o){i?r(i,e,o):(Rl(t,e,o,n),r(null,e,o))}))}function ga(t,e,n,r){r=r||_r;const i=n.src;if(6!==i.length)throw"there must be 6 urls for a cubemap";const o=n.level||0,a=n.internalFormat||n.format||Vn,l=Or(a),s=n.format||l.format,c=n.type||Zn,u=n.target||fr;if(u!==ar)throw"target must be TEXTURE_CUBE_MAP";Uo(t,e,n),n=Object.assign({},n);let d=6;const h=[],m=po(t,n);let p;p=i.map((function(i,l){return Eo(i,n.crossOrigin,function(i){return function(l,m){--d,l?h.push(l):m.width!==m.height?h.push("cubemap face img is not a square: "+m.src):(Nr(t,n),t.bindTexture(u,e),5===d?po().forEach((function(e){t.texImage2D(e,o,a,s,c,m)})):t.texImage2D(i,o,a,s,c,m),jr(n)&&t.generateMipmap(u)),0===d&&r(h.length?h:void 0,e,p)}}(m[l]))}))}function Za(t,e,n,r){r=r||_r;const i=n.src,o=n.internalFormat||n.format||Vn,a=Or(o),l=n.format||a.format,s=n.type||Zn,c=n.target||Wr;if(c!==Xr&&c!==Wr)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";Uo(t,e,n),n=Object.assign({},n);let u=i.length;const d=[];let h;const m=n.level||0;let p=n.width,f=n.height;const b=i.length;let g=!0;h=i.map((function(i,a){return Eo(i,n.crossOrigin,function(i){return function(a,y){if(--u,a)d.push(a);else{if(Nr(t,n),t.bindTexture(c,e),g){g=!1,p=n.width||y.width,f=n.height||y.height,t.texImage3D(c,m,o,p,f,b,0,l,s,null);for(let e=0;e<b;++e)t.texSubImage3D(c,m,0,0,e,p,f,1,l,s,y)}else{let e,n=y;(y.width!==p||y.height!==f)&&(e=yl(),n=e.canvas,e.canvas.width=p,e.canvas.height=f,e.drawImage(y,0,0,p,f)),t.texSubImage3D(c,m,0,0,i,p,f,1,l,s,n),e&&n===e.canvas&&(e.canvas.width=0,e.canvas.height=0)}jr(n)&&t.generateMipmap(c)}0===u&&r(d.length?d:void 0,e,h)}}(a))}))}function va(t,e,n,r){const i=(r=r||hr.textureOptions).target||fr;t.bindTexture(i,e);let o=r.width,a=r.height,l=r.depth;const s=r.level||0,c=r.internalFormat||r.format||Vn,u=Or(c),d=r.format||u.format,h=r.type||da(t,n,u.type);if(Ar(n))n instanceof Uint8ClampedArray&&(n=new Uint8Array(n.buffer));else{const t=ul(h);n=new t(n)}const m=ua(c,h),p=n.byteLength/m;if(p%1)throw"length wrong size for format: "+bl(t,d);let f;if(i===Xr||i===Wr)if(o||a||l)!o||a&&l?!a||o&&l?(f=oi(t,i,o,a,p/l),o=f.width,a=f.height):(f=oi(t,i,o,l,p/a),o=f.width,l=f.height):(f=oi(t,i,a,l,p/o),a=f.width,l=f.height);else{const t=Math.cbrt(p);if(t%1!=0)throw"can't guess cube size of array of numElements: "+p;o=t,a=t,l=t}else f=oi(t,i,o,a,p),o=f.width,a=f.height;if(Wl(t),t.pixelStorei(ko,r.unpackAlignment||1),Nr(t,r),i===ar){const e=p/6*(m/n.BYTES_PER_ELEMENT);bo(t,r).forEach((r=>{const i=e*r.ndx,l=n.subarray(i,i+e);t.texImage2D(r.face,s,c,o,a,0,d,h,l)}))}else i===Xr||i===Wr?t.texImage3D(i,s,c,o,a,l,0,d,h,n):t.texImage2D(i,s,c,o,a,0,d,h,n);return{width:o,height:a,depth:l,type:h}}function Ga(t,e,n){const r=n.target||fr;t.bindTexture(r,e);const i=n.level||0,o=n.internalFormat||n.format||Vn,a=Or(o),l=n.format||a.format,s=n.type||a.type;if(Nr(t,n),r===ar)for(let e=0;e<6;++e)t.texImage2D(Jo+e,i,o,n.width,n.height,0,l,s,null);else r===Xr||r===Wr?t.texImage3D(r,i,o,n.width,n.height,n.depth,0,l,s,null):t.texImage2D(r,i,o,n.width,n.height,0,l,s,null)}function Il(t,e,n){n=n||_r,e=e||hr.textureOptions;const r=t.createTexture(),i=e.target||fr;let o=e.width||1,a=e.height||1;const l=e.internalFormat||Vn;t.bindTexture(i,r),i===ar&&(t.texParameteri(i,xi,Ri),t.texParameteri(i,Ii,Ri));let s=e.src;if(s)if("function"==typeof s&&(s=s(t,e)),"string"==typeof s)ya(t,r,e,n);else if(Ar(s)||Array.isArray(s)&&("number"==typeof s[0]||Array.isArray(s[0])||Ar(s[0]))){const n=va(t,r,s,e);o=n.width,a=n.height}else Array.isArray(s)&&("string"==typeof s[0]||xl(s[0]))?i===ar?ga(t,r,e,n):Za(t,r,e,n):(Rl(t,r,s,e),o=s.width,a=s.height);else Ga(t,r,e);return jr(e)&&mo(t,r,e,o,a,l),Vl(t,r,e),r}const Ko=cl;function Sl(t){return typeof document<"u"&&document.getElementById?document.getElementById(t):null}const Si=33984,Ji=34962,Xa=34963,Wa=35713,Va=35714,Ra=35632,xa=35633,Ia=35981,Yl=35718,Sa=35721,Ya=35971,Ta=35382,wa=35396,La=35398,Ha=35392,Fa=35395,ki=5126,Tl=35664,wl=35665,Ll=35666,Mo=5124,Hl=35667,Fl=35668,Cl=35669,Nl=35670,Jl=35671,kl=35672,El=35673,Ul=35674,Kl=35675,Ml=35676,Ca=35678,Na=35680,Ja=35679,ka=35682,Ea=35685,Ua=35686,Ka=35687,Ma=35688,Ba=35689,Aa=35690,ja=36289,za=36292,Pa=36293,Bo=5125,Bl=36294,Al=36295,jl=36296,Oa=36298,_a=36299,Qa=36300,Da=36303,$a=36306,qa=36307,t0=36308,e0=36311,Ei=3553,Ui=34067,Ao=32879,Ki=35866,ge={};function zl(t,e){return ge[e].bindPoint}function n0(t,e){return function(n){t.uniform1f(e,n)}}function r0(t,e){return function(n){t.uniform1fv(e,n)}}function i0(t,e){return function(n){t.uniform2fv(e,n)}}function o0(t,e){return function(n){t.uniform3fv(e,n)}}function s0(t,e){return function(n){t.uniform4fv(e,n)}}function Pl(t,e){return function(n){t.uniform1i(e,n)}}function Ol(t,e){return function(n){t.uniform1iv(e,n)}}function _l(t,e){return function(n){t.uniform2iv(e,n)}}function Ql(t,e){return function(n){t.uniform3iv(e,n)}}function Dl(t,e){return function(n){t.uniform4iv(e,n)}}function l0(t,e){return function(n){t.uniform1ui(e,n)}}function u0(t,e){return function(n){t.uniform1uiv(e,n)}}function c0(t,e){return function(n){t.uniform2uiv(e,n)}}function a0(t,e){return function(n){t.uniform3uiv(e,n)}}function d0(t,e){return function(n){t.uniform4uiv(e,n)}}function h0(t,e){return function(n){t.uniformMatrix2fv(e,!1,n)}}function f0(t,e){return function(n){t.uniformMatrix3fv(e,!1,n)}}function m0(t,e){return function(n){t.uniformMatrix4fv(e,!1,n)}}function p0(t,e){return function(n){t.uniformMatrix2x3fv(e,!1,n)}}function b0(t,e){return function(n){t.uniformMatrix3x2fv(e,!1,n)}}function y0(t,e){return function(n){t.uniformMatrix2x4fv(e,!1,n)}}function g0(t,e){return function(n){t.uniformMatrix4x2fv(e,!1,n)}}function Z0(t,e){return function(n){t.uniformMatrix3x4fv(e,!1,n)}}function v0(t,e){return function(n){t.uniformMatrix4x3fv(e,!1,n)}}function zn(t,e,n,r){const i=zl(t,e);return Pr(t)?function(e){let o,a;Co(t,e)?(o=e,a=null):(o=e.texture,a=e.sampler),t.uniform1i(r,n),t.activeTexture(Si+n),t.bindTexture(i,o),t.bindSampler(n,a)}:function(e){t.uniform1i(r,n),t.activeTexture(Si+n),t.bindTexture(i,e)}}function Pn(t,e,n,r,i){const o=zl(t,e),a=new Int32Array(i);for(let t=0;t<i;++t)a[t]=n+t;return Pr(t)?function(e){t.uniform1iv(r,a),e.forEach((function(e,r){let i,l;t.activeTexture(Si+a[r]),Co(t,e)?(i=e,l=null):(i=e.texture,l=e.sampler),t.bindSampler(n,l),t.bindTexture(o,i)}))}:function(e){t.uniform1iv(r,a),e.forEach((function(e,n){t.activeTexture(Si+a[n]),t.bindTexture(o,e)}))}}function Mi(t,e){return function(n){if(n.value)switch(t.disableVertexAttribArray(e),n.value.length){case 4:t.vertexAttrib4fv(e,n.value);break;case 3:t.vertexAttrib3fv(e,n.value);break;case 2:t.vertexAttrib2fv(e,n.value);break;case 1:t.vertexAttrib1fv(e,n.value);break;default:throw new Error("the length of a float constant value must be between 1 and 4!")}else t.bindBuffer(Ji,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribPointer(e,n.numComponents||n.size,n.type||ki,n.normalize||!1,n.stride||0,n.offset||0),t.vertexAttribDivisor&&t.vertexAttribDivisor(e,n.divisor||0)}}function mr(t,e){return function(n){if(n.value){if(t.disableVertexAttribArray(e),4!==n.value.length)throw new Error("The length of an integer constant value must be 4!");t.vertexAttrib4iv(e,n.value)}else t.bindBuffer(Ji,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribIPointer(e,n.numComponents||n.size,n.type||Mo,n.stride||0,n.offset||0),t.vertexAttribDivisor&&t.vertexAttribDivisor(e,n.divisor||0)}}function Bi(t,e){return function(n){if(n.value){if(t.disableVertexAttribArray(e),4!==n.value.length)throw new Error("The length of an unsigned integer constant value must be 4!");t.vertexAttrib4uiv(e,n.value)}else t.bindBuffer(Ji,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribIPointer(e,n.numComponents||n.size,n.type||Bo,n.stride||0,n.offset||0),t.vertexAttribDivisor&&t.vertexAttribDivisor(e,n.divisor||0)}}function jo(t,e,n){const r=n.size,i=n.count;return function(n){t.bindBuffer(Ji,n.buffer);const o=n.size||n.numComponents||r,a=o/i,l=n.type||ki,s=ge[l].size*o,c=n.normalize||!1,u=n.offset||0,d=s/i;for(let r=0;r<i;++r)t.enableVertexAttribArray(e+r),t.vertexAttribPointer(e+r,a,l,c,s,u+d*r),t.vertexAttribDivisor&&t.vertexAttribDivisor(e+r,n.divisor||0)}}ge[ki]={Type:Float32Array,size:4,setter:n0,arraySetter:r0},ge[Tl]={Type:Float32Array,size:8,setter:i0,cols:2},ge[wl]={Type:Float32Array,size:12,setter:o0,cols:3},ge[Ll]={Type:Float32Array,size:16,setter:s0,cols:4},ge[Mo]={Type:Int32Array,size:4,setter:Pl,arraySetter:Ol},ge[Hl]={Type:Int32Array,size:8,setter:_l,cols:2},ge[Fl]={Type:Int32Array,size:12,setter:Ql,cols:3},ge[Cl]={Type:Int32Array,size:16,setter:Dl,cols:4},ge[Bo]={Type:Uint32Array,size:4,setter:l0,arraySetter:u0},ge[Bl]={Type:Uint32Array,size:8,setter:c0,cols:2},ge[Al]={Type:Uint32Array,size:12,setter:a0,cols:3},ge[jl]={Type:Uint32Array,size:16,setter:d0,cols:4},ge[Nl]={Type:Uint32Array,size:4,setter:Pl,arraySetter:Ol},ge[Jl]={Type:Uint32Array,size:8,setter:_l,cols:2},ge[kl]={Type:Uint32Array,size:12,setter:Ql,cols:3},ge[El]={Type:Uint32Array,size:16,setter:Dl,cols:4},ge[Ul]={Type:Float32Array,size:32,setter:h0,rows:2,cols:2},ge[Kl]={Type:Float32Array,size:48,setter:f0,rows:3,cols:3},ge[Ml]={Type:Float32Array,size:64,setter:m0,rows:4,cols:4},ge[Ea]={Type:Float32Array,size:32,setter:p0,rows:2,cols:3},ge[Ua]={Type:Float32Array,size:32,setter:y0,rows:2,cols:4},ge[Ka]={Type:Float32Array,size:48,setter:b0,rows:3,cols:2},ge[Ma]={Type:Float32Array,size:48,setter:Z0,rows:3,cols:4},ge[Ba]={Type:Float32Array,size:64,setter:g0,rows:4,cols:2},ge[Aa]={Type:Float32Array,size:64,setter:v0,rows:4,cols:3},ge[Ca]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ei},ge[Na]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ui},ge[Ja]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ao},ge[ka]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ei},ge[ja]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ki},ge[za]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ki},ge[Pa]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ui},ge[Oa]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ei},ge[_a]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ao},ge[Qa]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ui},ge[Da]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ki},ge[$a]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ei},ge[qa]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ao},ge[t0]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ui},ge[e0]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ki};const Fn={};Fn[ki]={size:4,setter:Mi},Fn[Tl]={size:8,setter:Mi},Fn[wl]={size:12,setter:Mi},Fn[Ll]={size:16,setter:Mi},Fn[Mo]={size:4,setter:mr},Fn[Hl]={size:8,setter:mr},Fn[Fl]={size:12,setter:mr},Fn[Cl]={size:16,setter:mr},Fn[Bo]={size:4,setter:Bi},Fn[Bl]={size:8,setter:Bi},Fn[Al]={size:12,setter:Bi},Fn[jl]={size:16,setter:Bi},Fn[Nl]={size:4,setter:mr},Fn[Jl]={size:8,setter:mr},Fn[kl]={size:12,setter:mr},Fn[El]={size:16,setter:mr},Fn[Ul]={size:4,setter:jo,count:2},Fn[Kl]={size:9,setter:jo,count:3},Fn[Ml]={size:16,setter:jo,count:4};const G0=/ERROR:\s*\d+:(\d+)/gi;function X0(t,e="",n=0){const r=[...e.matchAll(G0)],i=new Map(r.map(((t,n)=>{const i=parseInt(t[1]),o=r[n+1],a=o?o.index:e.length;return[i-1,e.substring(t.index,a)]})));return t.split("\n").map(((t,e)=>{const r=i.get(e);return`${e+1+n}: ${t}${r?`\n\n^^^ ${r}`:""}`})).join("\n")}const Hs=/^[ \t]*\n/;function $l(t){let e=0;return Hs.test(t)&&(e=1,t=t.replace(Hs,"")),{lineOffset:e,shaderSource:t}}function W0(t,e){return t.errorCallback(e),t.callback&&setTimeout((()=>{t.callback(`${e}\n${t.errors.join("\n")}`)})),null}function V0(t,e,n,r){if(r=r||Ko,!t.getShaderParameter(n,Wa)){const i=t.getShaderInfoLog(n),{lineOffset:o,shaderSource:a}=$l(t.getShaderSource(n)),l=`${X0(a,i,o)}\nError compiling ${bl(t,e)}: ${i}`;return r(l),l}return""}function zo(t,e,n){let r,i,o;if("function"==typeof e&&(n=e,e=void 0),"function"==typeof t)n=t,t=void 0;else if(t&&!Array.isArray(t)){const e=t;n=e.errorCallback,t=e.attribLocations,r=e.transformFeedbackVaryings,i=e.transformFeedbackMode,o=e.callback}const a=n||Ko,l=[],s={errorCallback(t,...e){l.push(t),a(t,...e)},transformFeedbackVaryings:r,transformFeedbackMode:i,callback:o,errors:l};{let n={};Array.isArray(t)?t.forEach((function(t,r){n[t]=e?e[r]:r})):n=t||{},s.attribLocations=n}return s}const R0=["VERTEX_SHADER","FRAGMENT_SHADER"];function x0(t,e){return e.indexOf("frag")>=0?Ra:e.indexOf("vert")>=0?xa:void 0}function I0(t,e,n){const r=t.getAttachedShaders(e);for(const e of r)n.has(e)&&t.deleteShader(e);t.deleteProgram(e)}const S0=(t=0)=>new Promise((e=>setTimeout(e,t)));function Y0(t,e,n){const r=t.createProgram(),{attribLocations:i,transformFeedbackVaryings:o,transformFeedbackMode:a}=zo(n);for(let n=0;n<e.length;++n){let i=e[n];if("string"==typeof i){const e=Sl(i),o=e?e.text:i;let a=t[R0[n]];e&&e.type&&(a=x0(t,e.type)||a),i=t.createShader(a),t.shaderSource(i,$l(o).shaderSource),t.compileShader(i),t.attachShader(r,i)}}Object.entries(i).forEach((([e,n])=>t.bindAttribLocation(r,n,e)));{let e=o;e&&(e.attribs&&(e=e.attribs),Array.isArray(e)||(e=Object.keys(e)),t.transformFeedbackVaryings(r,e,a||Ia))}return t.linkProgram(r),r}function T0(t,e,n,r,i){const o=zo(n,r,i),a=new Set(e),l=Y0(t,e,o);function s(t,e){const n=L0(t,e,o.errorCallback);return n&&I0(t,e,a),n}if(!o.callback)return s(t,l)?void 0:l;w0(t,l).then((()=>{const e=s(t,l);o.callback(e,e?void 0:l)}))}async function w0(t,e){const n=t.getExtension("KHR_parallel_shader_compile"),r=n?(t,e)=>t.getProgramParameter(e,n.COMPLETION_STATUS_KHR):()=>!0;let i=0;do{await S0(i),i=1e3/60}while(!r(t,e))}function L0(t,e,n){if(n=n||Ko,!t.getProgramParameter(e,Va)){const r=t.getProgramInfoLog(e);n(`Error in program linking: ${r}`);return`${r}\n${t.getAttachedShaders(e).map((e=>V0(t,t.getShaderParameter(e,t.SHADER_TYPE),e,n))).filter((t=>t)).join("\n")}`}}function H0(t,e,n,r,i){return T0(t,e,n,r,i)}function ql(t){const e=t.name;return e.startsWith("gl_")||e.startsWith("webgl_")}const F0=/(\.|\[|]|\w+)/g,C0=t=>t>="0"&&t<="9";function N0(t,e,n,r){const i=t.split(F0).filter((t=>""!==t));let o=0,a="";for(;;){const t=i[o++];a+=t;const l=C0(t[0]),s=l?parseInt(t):t;if(l&&(a+=i[o++]),o===i.length){n[s]=e;break}{const t=i[o++],e="["===t,l=n[s]||(e?[]:{});n[s]=l,n=l,r[a]=r[a]||function(t){return function(e){tu(t,e)}}(l),a+=t}}}function J0(t,e){let n=0;function r(e,r,i){const o=r.name.endsWith("[0]"),a=r.type,l=ge[a];if(!l)throw new Error(`unknown type: 0x${a.toString(16)}`);let s;if(l.bindPoint){const e=n;n+=r.size,s=o?l.arraySetter(t,a,e,i,r.size):l.setter(t,a,e,i,r.size)}else s=l.arraySetter&&o?l.arraySetter(t,i):l.setter(t,i);return s.location=i,s}const i={},o={},a=t.getProgramParameter(e,Yl);for(let n=0;n<a;++n){const a=t.getActiveUniform(e,n);if(ql(a))continue;let l=a.name;l.endsWith("[0]")&&(l=l.substr(0,l.length-3));const s=t.getUniformLocation(e,a.name);if(s){const t=r(0,a,s);i[l]=t,N0(l,t,o,i)}}return i}function k0(t,e){const n={},r=t.getProgramParameter(e,Ya);for(let i=0;i<r;++i){const r=t.getTransformFeedbackVarying(e,i);n[r.name]={index:i,type:r.type,size:r.size}}return n}function E0(t,e){const n=t.getProgramParameter(e,Yl),r=[],i=[];for(let o=0;o<n;++o){i.push(o),r.push({});const n=t.getActiveUniform(e,o);r[o].name=n.name}[["UNIFORM_TYPE","type"],["UNIFORM_SIZE","size"],["UNIFORM_BLOCK_INDEX","blockNdx"],["UNIFORM_OFFSET","offset"]].forEach((function(n){const o=n[0],a=n[1];t.getActiveUniforms(e,i,t[o]).forEach((function(t,e){r[e][a]=t}))}));const o={},a=t.getProgramParameter(e,Ta);for(let n=0;n<a;++n){const r=t.getActiveUniformBlockName(e,n),i={index:t.getUniformBlockIndex(e,r),usedByVertexShader:t.getActiveUniformBlockParameter(e,n,wa),usedByFragmentShader:t.getActiveUniformBlockParameter(e,n,La),size:t.getActiveUniformBlockParameter(e,n,Ha),uniformIndices:t.getActiveUniformBlockParameter(e,n,Fa)};i.used=i.usedByVertexShader||i.usedByFragmentShader,o[r]=i}return{blockSpecs:o,uniformData:r}}function tu(t,e){for(const n in e){const r=t[n];"function"==typeof r?r(e[n]):tu(t[n],e[n])}}function eu(t,...e){const n=t.uniformSetters||t,r=e.length;for(let t=0;t<r;++t){const r=e[t];if(Array.isArray(r)){const t=r.length;for(let e=0;e<t;++e)eu(n,r[e])}else for(const t in r){const e=n[t];e&&e(r[t])}}}function U0(t,e){const n={},r=t.getProgramParameter(e,Sa);for(let i=0;i<r;++i){const r=t.getActiveAttrib(e,i);if(ql(r))continue;const o=t.getAttribLocation(e,r.name),a=Fn[r.type],l=a.setter(t,o,a);l.location=o,n[r.name]=l}return n}function K0(t,e){for(const n in e){const r=t[n];r&&r(e[n])}}function M0(t,e,n){n.vertexArrayObject?t.bindVertexArray(n.vertexArrayObject):(K0(e.attribSetters||e,n.attribs),n.indices&&t.bindBuffer(Xa,n.indices))}function Fs(t,e){const n={program:e,uniformSetters:J0(t,e),attribSetters:U0(t,e)};return Pr(t)&&(n.uniformBlockSpec=E0(t,e),n.transformFeedbackInfo=k0(t,e)),n}const B0=/\s|{|}|;/;function A0(t,e,n,r,i){const o=zo(n,r,i),a=[];if(e=e.map((function(t){if(!B0.test(t)){const e=Sl(t);if(e)t=e.text;else{const e=`no element with id: ${t}`;o.errorCallback(e),a.push(e)}}return t})),a.length)return W0(o,"");const l=o.callback;l&&(o.callback=(e,n)=>{l(e,e?void 0:Fs(t,n))});const s=H0(t,e,o);return s?Fs(t,s):null}const j0=4,Cs=5123;function z0(t,e,n,r,i,o){n=void 0===n?4:n;const a=e.indices,l=e.elementType,s=void 0===r?e.numElements:r;i=void 0===i?0:i,l||a?void 0!==o?t.drawElementsInstanced(n,s,void 0===l?Cs:e.elementType,i,o):t.drawElements(n,s,void 0===l?Cs:e.elementType,i):void 0!==o?t.drawArraysInstanced(n,i,s,o):t.drawArrays(n,i,s)}const nu=36160,si=36161,P0=3553,O0=5121,_0=6402,Q0=6408,D0=33190,$0=36012,q0=35056,t3=36013,e3=32854,n3=32855,r3=36194,ru=33189,iu=6401,ou=36168,Po=34041,yo=36064,Ai=36096,su=36128,Oo=33306,go=33071,Zo=9729,i3=[{format:Q0,type:O0,min:Zo,wrap:go},{format:Po}],er={};function o3(t,e){return er[t]||er[e]}er[Po]=Oo,er[iu]=su,er[ou]=su,er[_0]=Ai,er[ru]=Ai,er[D0]=Ai,er[$0]=Ai,er[q0]=Oo,er[t3]=Oo;const pr={};function s3(t){return pr[t]}pr[e3]=!0,pr[n3]=!0,pr[r3]=!0,pr[Po]=!0,pr[ru]=!0,pr[iu]=!0,pr[ou]=!0;const l3=32;function u3(t){return t>=yo&&t<36096}function Yi(t,e,n,r){const i=nu,o=t.createFramebuffer();t.bindFramebuffer(i,o),n=n||t.drawingBufferWidth,r=r||t.drawingBufferHeight;const a=[],l={framebuffer:o,attachments:[],width:n,height:r};return(e=e||i3).forEach((function(e,o){let s=e.attachment;const c=e.samples,u=e.format;let d=e.attachmentPoint||o3(u,e.internalFormat);if(d||(d=yo+o),u3(d)&&a.push(d),!s)if(void 0!==c||s3(u))s=t.createRenderbuffer(),t.bindRenderbuffer(si,s),c>1?t.renderbufferStorageMultisample(si,c,u,n,r):t.renderbufferStorage(si,u,n,r);else{const i=Object.assign({},e);i.width=n,i.height=r,void 0===i.auto&&(i.auto=!1,i.min=i.min||i.minMag||Zo,i.mag=i.mag||i.minMag||Zo,i.wrapS=i.wrapS||i.wrap||go,i.wrapT=i.wrapT||i.wrap||go),s=Il(t,i)}if(Z2(t,s))t.framebufferRenderbuffer(i,d,si,s);else{if(!Co(t,s))throw new Error("unknown attachment type");void 0!==e.layer?t.framebufferTextureLayer(i,d,s,e.level||0,e.layer):t.framebufferTexture2D(i,d,e.target||P0,s,e.level||0)}l.attachments.push(s)})),t.drawBuffers&&t.drawBuffers(a),l}function c3(t,e,n){n=n||nu,e?(t.bindFramebuffer(n,e.framebuffer),t.viewport(0,0,e.width,e.height)):(t.bindFramebuffer(n,null),t.viewport(0,0,t.drawingBufferWidth,t.drawingBufferHeight))}function bn(t,e){return()=>e instanceof WebGLTexture?e:Il(t,{src:e,wrap:t.CLAMP_TO_EDGE})}const Ns=2;class Vr{constructor(t){Rt(this,"id","_"),Rt(this,"context"),Rt(this,"output"),Rt(this,"fbi"),Rt(this,"options"),Rt(this,"programInfo"),Rt(this,"bufferInfo"),Rt(this,"profiler"),Rt(this,"lastRun");const{context:e,width:n,height:r}=t;this.context=e,this.options=t;const i=this.buildDefines();this.programInfo=A0(this.context,[i+this.getVertexShader(),i+this.getFragmentShader()]),this.bufferInfo=B2(this.context,this.getBuffers()),this.fbi=Yi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],n,r),this.output=this.fbi.attachments[0]}resizeOutput(t,e){this.fbi=Yi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],t,e),this.options.width=t,this.options.height=e,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 t="";const e=this.getDefines();for(let n in e)t+=`#define ${n} ${e[n].toFixed(1)}\n`;return t}run(t){var e,n,r,i,o,a;null==(e=this.profiler)||e.pushContext(`[${this.id}] PROG : ${this.constructor.name}`),null==(n=this.profiler)||n.pushContext(`[${this.id}] UNIFORMS`);for(const e in t)"function"==typeof t[e]&&(null==(r=this.profiler)||r.pushContext(`[${this.id}] UNI : ${e}`),t[e]=t[e](),null==(i=this.profiler)||i.popContext(`[${this.id}] UNI : ${e}`));null==(o=this.profiler)||o.popContext(`[${this.id}] UNIFORMS`);const l=Date.now();let s=0;this.lastRun&&(s=(l-this.lastRun)/1e3),this.lastRun=l,this.context.viewport(0,0,this.context.canvas.width,this.context.canvas.height),this.context.useProgram(this.programInfo.program),M0(this.context,this.programInfo,this.bufferInfo),eu(this.programInfo,{delta:s,canvas:[this.context.canvas.width,this.context.canvas.height],...t}),c3(this.context,this.options.disableFramebuffer?null:this.fbi),z0(this.context,this.bufferInfo),null==(a=this.profiler)||a.popContext(`[${this.id}] PROG : ${this.constructor.name}`)}setProfiler(t){this.profiler=t}}const a3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\nuniform sampler2D mask;\n\nvec4 loop();\n\nvoid main() { gl_FragColor = loop(); }\n",d3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class h3 extends Vr{getDefines(){var t;return{RADIUS:null!=(t=this.options.radius)?t:1}}getFragmentShader(){return a3+this.createLoopFunction()}getVertexShader(){return d3}createLoopFunction(){var t;let e=null!=(t=this.options.radius)?t:1;return`\n\n vec4 loop() { \n vec4 result = vec4(0,0,0,0);\n float factorSum = 0.;\n\n vec2 normalizedRadius = vec2(-${e}.) / canvas;\n vec2 normalizedIncrement = vec2(1.) / canvas;\n vec2 diff = normalizedRadius;\n float maxLength = length(normalizedRadius);\n\n for(int y=-${e}; y<${e+1}; ++y) {\n for(int x=-${e}; x<${e+1}; ++x) {\n float factor = (1.- texture2D(mask, _texture_coord + diff).a) * (maxLength - length(diff)) / maxLength;\n result += factor * texture2D(texture, _texture_coord + diff);\n factorSum += factor;\n diff.x += normalizedIncrement.x;\n }\n diff.y += normalizedIncrement.y;\n diff.x = normalizedRadius.x;\n }\n return result / factorSum;\n }`}}const f3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform sampler2D background;\nuniform sampler2D foreground;\nuniform sampler2D threshold;\n\nvoid main() {\n vec4 backgroundColor = texture2D(background, _texture_coord);\n vec4 foregroundColor = texture2D(foreground, _texture_coord);\n vec4 tresholdColor = texture2D(threshold, _texture_coord);\n gl_FragColor = foregroundColor * tresholdColor.a +\n backgroundColor * (1. - tresholdColor.a);\n}\n",m3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n _texture_coord.y = 1. - texture_coord.y;\n}\n";class _o extends Vr{getFragmentShader(){return f3}getVertexShader(){return m3}}class Qo{constructor(){Rt(this,"steps",[]),Rt(this,"profiler")}addStep(t){this.steps.push(t)}async run(){for(const t of this.steps)t.program.run(t.getUniforms())}resizeOutput(t,e){var n,r;null==(n=this.profiler)||n.pushContext(`PIP [${this.constructor.name}]`);for(const n of this.steps)n.preventResize||n.program.resizeOutput(t,e);null==(r=this.profiler)||r.popContext(`PIP [${this.constructor.name}]`)}setProfiler(t){this.profiler=t;for(const e of this.steps)e.program.setProfiler(t)}setId(t){for(const e of this.steps)e.program.id=t}}class Do extends Qo{constructor(){super(...arguments),Rt(this,"preciseMaskEnabled",!1)}}const p3=10,b3=2,y3=8;class g3 extends Do{constructor(t,e){super(),Rt(this,"inputImage"),Rt(this,"inputMask"),Rt(this,"blur"),this.context=t,this.radius=e;const n={context:t,height:t.canvas.height,width:t.canvas.width};this.blur=new h3({...n,radius:e,...this.getBlurTextureSize(t.canvas.width,t.canvas.height)});const r=new _o({...n,disableFramebuffer:!0});this.addStep({program:this.blur,preventResize:!0,getUniforms:()=>({texture:bn(t,this.inputImage),mask:bn(t,this.inputMask)})}),this.addStep({program:r,getUniforms:()=>({background:bn(t,this.blur.output),foreground:bn(t,this.inputImage),threshold:bn(t,this.inputMask)})})}getBlurTextureSize(t,e){const n=this.radius>10?8:2;return{width:Math.max(2,t/n),height:Math.max(2,e/n)}}setData(t,e){this.inputImage=t,this.inputMask=e}resizeOutput(t,e){super.resizeOutput(t,e);const n=this.getBlurTextureSize(t,e);this.blur.resizeOutput(n.width,n.height)}}class lu extends Do{constructor(t){super(),Rt(this,"inputImage"),Rt(this,"inputBackgroundImage"),Rt(this,"inputMask"),Rt(this,"preciseMaskEnabled",!0),this.context=t;const e={context:t,height:t.canvas.height,width:t.canvas.width},n=new _o({...e,disableFramebuffer:!0});this.addStep({program:n,getUniforms:()=>({background:bn(t,this.inputBackgroundImage),foreground:bn(t,this.inputImage),threshold:bn(t,this.inputMask)})})}setData(t,e){this.inputImage=t,this.inputMask=e}}class Z3 extends lu{constructor(){super(...arguments),Rt(this,"frameReader"),Rt(this,"preciseMaskEnabled",!0)}set inputVideo(t){this.frameReader=t.getReader(),this.readNextVideoFrame()}async run(){this.frameReader&&(await super.run(),this.readNextVideoFrame())}async readNextVideoFrame(){var t;const e=await(null==(t=this.frameReader)?void 0:t.read());null!=e&&e.value&&(this.inputBackgroundImage=await createImageBitmap(e.value),e.value.close())}}const v3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\n\nvec4 loop();\n\nvoid main() { gl_FragColor = loop(); }\n",G3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";var $o=(t=>(t[t.LINEAR=0]="LINEAR",t[t.GAUSSIAN=1]="GAUSSIAN",t))($o||{});class uu extends Vr{getDefines(){var t;return{RADIUS:null!=(t=this.options.radius)?t:1}}getFragmentShader(){return v3+this.createLoopFunction()}getVertexShader(){return G3}createLoopFunction(){var t;let e=null!=(t=this.options.radius)?t:1;return`\n\n vec4 loop() { \n vec4 result = vec4(0,0,0,0);\n float factorSum = 0.;\n\n vec2 normalizedRadius = vec2(-${e}.) / canvas;\n vec2 normalizedIncrement = vec2(1.) / canvas;\n vec2 diff = normalizedRadius;\n\n for(int y=-${e}; y<${e+1}; ++y) {\n for(int x=-${e}; x<${e+1}; ++x) {\n float factor = 1.;\n result += factor * texture2D(texture, _texture_coord + diff);\n factorSum += factor;\n diff.x += normalizedIncrement.x;\n }\n diff.y += normalizedIncrement.y;\n diff.x = normalizedRadius.x;\n }\n return result / factorSum;\n }`}getFactor(t,e){return this.options.type,this.getLinearFactor(t,e)}getLinearFactor(t,e){return 1}getGaussianFactor(t,e){var n;const r=1/(2*Math.PI*Math.max(null!=(n=this.options.radius)?n:1,1)**2),i=r*-(t**2+e**2);return r*Math.E**i}}class X3 extends Do{constructor(t,e){super(),Rt(this,"inputImage"),Rt(this,"inputMask"),this.context=t;const n={context:t,height:t.canvas.height,width:t.canvas.width},r=new uu({...n,radius:e,type:$o.GAUSSIAN}),i=new _o({...n,disableFramebuffer:!0});this.addStep({program:r,getUniforms:()=>({texture:bn(t,this.inputImage)})}),this.addStep({program:i,getUniforms:()=>({background:bn(t,this.inputImage),foreground:bn(t,r.output),threshold:bn(t,this.inputMask)})})}setData(t,e){this.inputImage=t,this.inputMask=e}}class qo extends Vr{constructor(t){super(t),Rt(this,"fbi2"),this.fbi2=Yi(t.context,[{format:t.context.RGBA,type:t.context.UNSIGNED_BYTE,min:t.context.LINEAR,mag:t.context.LINEAR,wrap:t.context.CLAMP_TO_EDGE}],t.width,t.height)}run(t){const e=this.fbi;this.fbi=this.fbi2,this.fbi2=e,this.output=this.fbi.attachments[0],super.run({...t,previous_rendering:this.fbi2.attachments[0]})}resizeOutput(t,e){super.resizeOutput(t,e),this.fbi2=Yi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],t,e)}}const W3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\n// uniform float treshold;\nuniform sampler2D image_now;\nuniform sampler2D image_before;\nuniform sampler2D mask_now;\nuniform sampler2D mask_before;\nuniform sampler2D previous_rendering;\nuniform vec2 canvas;\n\nuniform float delta;\n\nfloat current_factor = 0.69;\nfloat previous_factor = 0.74;\nfloat threshold_activation = 0.54;\n\nfloat map(float value, float min1, float max1, float min2, float max2) {\n return min2 + (value - min1) * (max2 - min2) / (max1 - min1);\n}\n\nfloat getThreshold() {\n vec4 color = vec4(0.);\n for (float y = -6.; y < 7.; y += 1.) {\n for (float x = -6.; x < 7.; x += 1.) {\n vec4 image_now_color =\n texture2D(image_now, _texture_coord + vec2(x, y) / canvas);\n vec4 image_before_color =\n texture2D(image_before, _texture_coord + vec2(x, y) / canvas);\n color += abs(image_before_color - image_now_color);\n }\n }\n return (color.x + color.y + color.z) / (3. * 9.);\n}\n\nvoid main() {\n float treshold_input = .4;\n float treshold_previous_rendering = .98;\n\n vec4 mask_now_color = texture2D(mask_now, _texture_coord);\n vec4 mask_before_color = texture2D(mask_before, _texture_coord);\n vec4 previous_rendering_color = texture2D(previous_rendering, _texture_coord);\n\n vec3 mask_diff = abs(mask_before_color.xyz - mask_now_color.xyz);\n float flickering = mask_diff.x;\n float threshold = getThreshold();\n if (threshold < threshold_activation) {\n gl_FragColor = vec4(flickering, 0., 0., 1.) * current_factor +\n previous_rendering_color * previous_factor;\n gl_FragColor *= (1. - threshold);\n }\n}\n",V3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class R3 extends qo{getFragmentShader(){return W3}getVertexShader(){return V3}}const x3="#version 300 es\n// https://github.com/Volcomix/virtual-background/blob/main/src/pipelines/webgl2/jointBilateralFilterStage.ts\n\nprecision highp float;\nuniform sampler2D input_frame;\nuniform sampler2D segmentation_mask;\nuniform sampler2D threshold;\nuniform vec2 texel_size;\nuniform float step;\nuniform float radius;\nuniform float offset;\nuniform float sigma_texel;\nuniform float sigma_color;\n\nin vec2 _texture_coord;\nout vec4 outColor;\n\nfloat gaussian(float x, float sigma) {\n float coeff = -0.5 / (sigma * sigma * 4.0 + 1.0e-6);\n return exp((x * x) * coeff);\n}\n\nvoid main() {\n vec2 centerCoord = _texture_coord;\n vec3 centerColor = texture(input_frame, centerCoord).rgb;\n float newVal = 0.0;\n float spaceWeight = 0.0;\n float colorWeight = 0.0;\n float totalWeight = 0.0;\n // Subsample kernel space.\n for (float i = -radius + offset; i <= radius; i += step) {\n for (float j = -radius + offset; j <= radius; j += step) {\n vec2 shift = vec2(j, i) * texel_size;\n vec2 coord = vec2(centerCoord + shift);\n vec3 frameColor = texture(input_frame, coord).rgb;\n float threshold = texture(threshold, coord).a;\n float outVal = texture(segmentation_mask, coord).a;\n\n spaceWeight = gaussian(distance(centerCoord, coord), sigma_texel);\n colorWeight = gaussian(distance(centerColor, frameColor), sigma_color);\n totalWeight += spaceWeight * colorWeight;\n newVal += spaceWeight * colorWeight * outVal * threshold;\n }\n }\n newVal /= totalWeight;\n outColor = vec4(vec3(0.), newVal);\n}",I3="#version 300 es\nin vec2 position;\nin vec2 texture_coord;\nout vec2 _texture_coord;\nvoid main() {\n gl_Position = vec4(position, 0.0, 1.0);\n _texture_coord = texture_coord;\n}";class S3 extends Vr{getFragmentShader(){return x3}getVertexShader(){return I3}}const Y3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\n\nvoid main() {\n int count = 0;\n for (float y = -1.; y < 2.; y += 1.) {\n for (float x = -1.; x < 2.; x += 1.) {\n vec2 coord = _texture_coord + vec2(y, x) / canvas;\n vec4 color = texture2D(texture, coord);\n if (color.r > .1) {\n count++;\n }\n }\n }\n if (count > 5) {\n gl_FragColor = texture2D(texture, _texture_coord);\n }\n}\n",T3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class w3 extends Vr{getFragmentShader(){return Y3}getVertexShader(){return T3}}const L3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\n\nvoid main() {\n vec4 color = texture2D(texture, _texture_coord);\n for (float y = -2.; y < 3.; y += 1.) {\n for (float x = -2.; x < 3.; x += 1.) {\n vec2 coord = _texture_coord;\n coord += vec2(y, x) / canvas;\n color += texture2D(texture, coord) * (1. / 4.);\n }\n }\n\n gl_FragColor = color;\n}\n",H3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class F3 extends qo{getFragmentShader(){return L3}getVertexShader(){return H3}}const C3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform sampler2D threshold;\nuniform sampler2D inputs;\n\nvoid main() {\n vec4 inputs_color = texture2D(inputs, _texture_coord);\n vec4 threshold_color = texture2D(threshold, _texture_coord);\n if (threshold_color.r < .1 && inputs_color.r > .5) {\n gl_FragColor = inputs_color;\n }\n}\n",N3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class J3 extends qo{getFragmentShader(){return C3}getVertexShader(){return N3}}class k3 extends Qo{constructor(t,e,n){super(),Rt(this,"inputImage"),Rt(this,"inputMask"),Rt(this,"previousInputImage"),Rt(this,"previousInputMask"),Rt(this,"output"),Rt(this,"options",{currentThresholdMinimum:0,currentThresholdMaximum:1,previousThresholdMinimum:0,previousThresholdMaximum:1,thresholdMinimum:0,thresholdMaximum:1,thresholdFactor:1}),this.context=t;const r={context:t,height:n,width:e},i=new R3(r),o=new uu({...r,radius:1,type:$o.GAUSSIAN}),a=new J3(r),l=new F3(r),s=new w3(r),c=new S3({...r});let u=1;u*=Math.max(2.5,480/144);const d=Math.max(1,.66*Math.sqrt(u)),h=1/640,m=1/480;this.addStep({program:i,getUniforms:()=>({image_now:bn(t,this.inputImage),image_before:bn(t,this.previousInputImage),mask_now:bn(t,this.inputMask),mask_before:bn(t,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:a,getUniforms:()=>({inputs:bn(t,this.inputMask),threshold:bn(t,i.output)})}),this.addStep({program:s,getUniforms:()=>({texture:bn(t,a.output)})}),this.addStep({program:l,getUniforms:()=>({texture:bn(t,s.output)})}),this.addStep({program:o,getUniforms:()=>({texture:bn(t,l.output)})}),this.addStep({program:c,getUniforms:()=>({input_frame:bn(t,this.inputImage),segmentation_mask:bn(t,this.inputMask),threshold:bn(t,o.output),texel_size:[h,m],step:d,radius:u,offset:d>1?.5*d:0,sigma_texel:Math.max(h,m)*u,sigma_color:.1})}),this.output=c.output}setData(t,e){this.previousInputImage=this.inputImage?this.inputImage:t,this.previousInputMask=this.inputMask?this.inputMask:e,this.inputImage=t,this.inputMask=e}setOptions(t){this.options=t}}const E3="precision mediump float;\n\nvarying vec2 _texture_coord;\nuniform sampler2D texture;\n\nvoid main() { gl_FragColor = texture2D(texture, _texture_coord); }\n",U3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\nuniform bool invert_y;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n if (invert_y) {\n _texture_coord.y = 1. - texture_coord.y;\n }\n}\n";class K3 extends Vr{getFragmentShader(){return E3}getVertexShader(){return U3}}class M3 extends Qo{constructor(t,e,n){super(),Rt(this,"inputImage"),this.context=t;const r={context:t,height:n,width:e};this.addStep({program:new K3({...r,disableFramebuffer:!0}),getUniforms:()=>({texture:bn(t,this.inputImage),invert_y:!0})})}setData(t){this.inputImage=t}}class B3{constructor(t){Rt(this,"resize"),Rt(this,"canvas"),Rt(this,"context"),this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("webgl2"),this.canvas.width=t.width,this.canvas.height=t.height,this.resize=new M3(this.context,t.width,t.height)}resizeForeground(t,e){this.canvas.width=t,this.canvas.height=e,this.resize.resizeOutput(t,e)}async process(t){var e,n;return this.canvas.width=this.canvas.width,null==(e=this.resize)||e.setData(t),null==(n=this.resize)||n.run(),this.canvas}}class A3{constructor(t,e){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=t,this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("webgl2"),this.canvas.width=e.foregroundWidth,this.canvas.height=e.foregroundHeight,this.improveMaskSegmentation=new k3(this.context,e.maskWidth,e.maskHeight),this.backgroundImage=new lu(this.context),this.backgroundVideo=new Z3(this.context),this.backgroundResizer=new B3({width:e.foregroundWidth,height:e.foregroundHeight})}setBackgroundOptions(t){switch(t.transformerType){case"BackgroundBlur":this.activePipeline=new g3(this.context,this.getBlurSize(t.radius));break;case"SilhouetteBlur":this.activePipeline=new X3(this.context,this.getBlurSize(t.radius));break;case"VideoBackground":this.activePipeline=this.backgroundVideo;break;case"VirtualBackground":this.activePipeline=this.backgroundImage}this.options=t}setFlickeringOptions(t){var e;null==(e=this.improveMaskSegmentation)||e.setOptions(t)}setVideoBGReadable(t){this.backgroundVideo.inputVideo=t}async setVirtualBGImage(t){this.virtualBGImage=t,this.backgroundImage.inputBackgroundImage=await this.backgroundResizer.process(t)}async process(t,e){var n,r,i,o,a,l,s;if(this.activePipeline&&t.width&&(null==e?void 0:e.width)){const c=`[${this.id}] background-filter`;null==(n=this.profiler)||n.pushContext(c);let u=e;((null==(r=this.options)?void 0:r.selfieSegmentationType)&&"PRECISE"===(null==(i=this.options)?void 0:i.selfieSegmentationType)||!(null!=(o=this.options)&&o.selfieSegmentationType)&&this.activePipeline.preciseMaskEnabled)&&(this.improveMaskSegmentation.setId(this.id),this.improveMaskSegmentation.setProfiler(this.profiler),this.improveMaskSegmentation.setData(t,e),this.improveMaskSegmentation.run(),u=this.improveMaskSegmentation.output),this.activePipeline.setId(this.id),this.activePipeline.setProfiler(this.profiler),null==(a=this.activePipeline)||a.setData(t,u),null==(l=this.activePipeline)||l.run(),null==(s=this.profiler)||s.popContext(c)}}async resizeForeground(t,e){var n;this.canvas.width=t,this.canvas.height=e,this.backgroundImage.resizeOutput(t,e),this.backgroundVideo.resizeOutput(t,e),this.backgroundResizer.resizeForeground(t,e),null==(n=this.activePipeline)||n.resizeOutput(t,e),this.virtualBGImage&&(this.backgroundImage.inputBackgroundImage=await this.backgroundResizer.process(this.virtualBGImage))}async profile(t){const e=new u2(this.context);return this.profiler=e,e.start(),await il(t),this.profiler=void 0,e.stop(),e.getResolvedQueries()}getBlurSize(t=ai.Low){switch(t){case ai.Low:return 5;case ai.High:return 12}return t}}class j3{constructor(){Rt(this,"selfieSegmentation",new qs),Rt(this,"backgroundFilter"),Rt(this,"previousDimensions",{width:0,height:0})}async init(t,e){await this.selfieSegmentation.init(e.wasmAssetUriPath,e.tfliteAssetUriPath);const{width:n,height:r}=this.selfieSegmentation.getOutputDimensions();this.backgroundFilter=new A3(t,{foregroundWidth:1,foregroundHeight:1,maskWidth:n,maskHeight:r})}async transform(t,e){var n,r,i,o;const a=await createImageBitmap(t),l=await this.selfieSegmentation.process(a);l?((a.width!==this.previousDimensions.width||a.height!==this.previousDimensions.height)&&(this.previousDimensions.width=a.width,this.previousDimensions.height=a.height,await(null==(n=this.backgroundFilter)?void 0:n.resizeForeground(a.width,a.height))),await(null==(r=this.backgroundFilter)?void 0:r.process(a,l)),t.close(),e.enqueue(new VideoFrame(null==(i=this.backgroundFilter)?void 0:i.canvas,{timestamp:null!=(o=t.timestamp)?o:0,alpha:"discard"}))):e.enqueue(t)}async setBackgroundOptions(t){var e;await(null==(e=this.backgroundFilter)?void 0:e.setBackgroundOptions(t))}async setVideoBGReadable(t){var e;await(null==(e=this.backgroundFilter)?void 0:e.setVideoBGReadable(t))}async setVirtualBGImage(t){var e;await(null==(e=this.backgroundFilter)?void 0:e.setVirtualBGImage(t))}setFlickeringOptions(t){var e;null==(e=this.backgroundFilter)||e.setFlickeringOptions(t)}async profile(t){var e,n;return null!=(n=null==(e=this.backgroundFilter)?void 0:e.profile(t))?n:[]}}const ts=class{constructor(){Rt(this,"backgroundTransformer",new j3),Rt(this,"mediaProcessor",new Kc),Rt(this,"rate",30),Rt(this,"resolveOnMediaProcessor"),Rt(this,"eventsQueue",[])}async init(t,e){await this.backgroundTransformer.init(t,e),await this.mediaProcessor.setTransformers([this.backgroundTransformer]),this.mediaProcessor.setTrackExpectedRate(this.rate),this.mediaProcessor.onAny(((t,e)=>{this.resolveOnMediaProcessor?(this.resolveOnMediaProcessor({name:t,data:e}),this.resolveOnMediaProcessor=void 0):this.eventsQueue.push({name:t,data:e})}))}async onMediaProcessorEvent(){return await new Promise((t=>{this.eventsQueue.length>0?t(this.eventsQueue.shift()):this.resolveOnMediaProcessor=t}))}async setTrackExpectedRate(t){this.rate=t,this.mediaProcessor.setTrackExpectedRate(t)}async transform(t,e){this.mediaProcessor.transform(t,e)}async setBackgroundOptions(t){var e;await(null==(e=this.backgroundTransformer)?void 0:e.setBackgroundOptions(t))}setVideoBGReadable(t){this.backgroundTransformer.setVideoBGReadable(t)}async setVirtualBGImage(t){await this.backgroundTransformer.setVirtualBGImage(t)}async terminate(){await this.mediaProcessor.destroy()}setFlickeringOptions(t){this.backgroundTransformer.setFlickeringOptions(t)}setVonageMetadata(t){Rc(t)}async profile(t){return JSON.stringify(await this.backgroundTransformer.profile(t))}};let vo=ts;i2("ProcessorWorker",ts);const cu="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/bjohMX19Y2xhc3MgeWx7Y29uc3RydWN0b3IoKXtwKHRoaXMsInNlbGZpZVNlZ21lbnRhdGlvbiIsbmV3IHBsKTtwKHRoaXMsImJhY2tncm91bmRGaWx0ZXIiKTtwKHRoaXMsInByZXZpb3VzRGltZW5zaW9ucyIse3dpZHRoOjAsaGVpZ2h0OjB9KX1hc3luYyBpbml0KGUsdCl7YXdhaXQgdGhpcy5zZWxmaWVTZWdtZW50YXRpb24uaW5pdCh0Lndhc21Bc3NldFVyaVBhdGgsdC50ZmxpdGVBc3NldFVyaVBhdGgpO2NvbnN0e3dpZHRoOm4saGVpZ2h0Oml9PXRoaXMuc2VsZmllU2VnbWVudGF0aW9uLmdldE91dHB1dERpbWVuc2lvbnMoKTt0aGlzLmJhY2tncm91bmRGaWx0ZXI9bmV3IGNsKGUse2ZvcmVncm91bmRXaWR0aDoxLGZvcmVncm91bmRIZWlnaHQ6MSxtYXNrV2lkdGg6bixtYXNrSGVpZ2h0Oml9KX1hc3luYyB0cmFuc2Zvcm0oZSx0KXt2YXIgbyxzLGEsdTtjb25zdCBuPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKGUpLGk9YXdhaXQgdGhpcy5zZWxmaWVTZWdtZW50YXRpb24ucHJvY2VzcyhuKTtpPygobi53aWR0aCE9PXRoaXMucHJldmlvdXNEaW1lbnNpb25zLndpZHRofHxuLmhlaWdodCE9PXRoaXMucHJldmlvdXNEaW1lbnNpb25zLmhlaWdodCkmJih0aGlzLnByZXZpb3VzRGltZW5zaW9ucy53aWR0aD1uLndpZHRoLHRoaXMucHJldmlvdXNEaW1lbnNpb25zLmhlaWdodD1uLmhlaWdodCxhd2FpdCgobz10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDpvLnJlc2l6ZUZvcmVncm91bmQobi53aWR0aCxuLmhlaWdodCkpKSxhd2FpdCgocz10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDpzLnByb2Nlc3MobixpKSksZS5jbG9zZSgpLHQuZW5xdWV1ZShuZXcgVmlkZW9GcmFtZSgoYT10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDphLmNhbnZhcyx7dGltZXN0YW1wOih1PWUudGltZXN0YW1wKSE9bnVsbD91OjAsYWxwaGE6ImRpc2NhcmQifSkpKTp0LmVucXVldWUoZSl9YXN5bmMgc2V0QmFja2dyb3VuZE9wdGlvbnMoZSl7dmFyIHQ7YXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dC5zZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKSl9YXN5bmMgc2V0VmlkZW9CR1JlYWRhYmxlKGUpe3ZhciB0O2F3YWl0KCh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnQuc2V0VmlkZW9CR1JlYWRhYmxlKGUpKX1hc3luYyBzZXRWaXJ0dWFsQkdJbWFnZShlKXt2YXIgdDthd2FpdCgodD10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp0LnNldFZpcnR1YWxCR0ltYWdlKGUpKX1zZXRGbGlja2VyaW5nT3B0aW9ucyhlKXt2YXIgdDsodD10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsfHx0LnNldEZsaWNrZXJpbmdPcHRpb25zKGUpfWFzeW5jIHByb2ZpbGUoZSl7dmFyIHQsbjtyZXR1cm4obj0odD10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp0LnByb2ZpbGUoZSkpIT1udWxsP246W119fWNvbnN0IE5yPWNsYXNze2NvbnN0cnVjdG9yKCl7cCh0aGlzLCJiYWNrZ3JvdW5kVHJhbnNmb3JtZXIiLG5ldyB5bCk7cCh0aGlzLCJtZWRpYVByb2Nlc3NvciIsbmV3IHdzKTtwKHRoaXMsInJhdGUiLDMwKTtwKHRoaXMsInJlc29sdmVPbk1lZGlhUHJvY2Vzc29yIik7cCh0aGlzLCJldmVudHNRdWV1ZSIsW10pfWFzeW5jIGluaXQoZSx0KXthd2FpdCB0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5pbml0KGUsdCksYXdhaXQgdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFuc2Zvcm1lcnMoW3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyXSksdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnJhdGUpLHRoaXMubWVkaWFQcm9jZXNzb3Iub25BbnkoKG4saSk9Pnt0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yPyh0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yKHtuYW1lOm4sZGF0YTppfSksdGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcj12b2lkIDApOnRoaXMuZXZlbnRzUXVldWUucHVzaCh7bmFtZTpuLGRhdGE6aX0pfSl9YXN5bmMgb25NZWRpYVByb2Nlc3NvckV2ZW50KCl7cmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGU9Pnt0aGlzLmV2ZW50c1F1ZXVlLmxlbmd0aD4wP2UodGhpcy5ldmVudHNRdWV1ZS5zaGlmdCgpKTp0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yPWV9KX1hc3luYyBzZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnJhdGU9ZSx0aGlzLm1lZGlhUHJvY2Vzc29yLnNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpfWFzeW5jIHRyYW5zZm9ybShlLHQpe3RoaXMubWVkaWFQcm9jZXNzb3IudHJhbnNmb3JtKGUsdCl9YXN5bmMgc2V0QmFja2dyb3VuZE9wdGlvbnMoZSl7dmFyIHQ7YXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIpPT1udWxsP3ZvaWQgMDp0LnNldEJhY2tncm91bmRPcHRpb25zKGUpKX1zZXRWaWRlb0JHUmVhZGFibGUoZSl7dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuc2V0VmlkZW9CR1JlYWRhYmxlKGUpfWFzeW5jIHNldFZpcnR1YWxCR0ltYWdlKGUpe2F3YWl0IHRoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnNldFZpcnR1YWxCR0ltYWdlKGUpfWFzeW5jIHRlcm1pbmF0ZSgpe2F3YWl0IHRoaXMubWVkaWFQcm9jZXNzb3IuZGVzdHJveSgpfXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnNldEZsaWNrZXJpbmdPcHRpb25zKGUpfXNldFZvbmFnZU1ldGFkYXRhKGUpe2ZzKGUpfWFzeW5jIHByb2ZpbGUoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGF3YWl0IHRoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnByb2ZpbGUoZSkpfX07bGV0IEJpPU5yOygoKT0+e1hpKCJQcm9jZXNzb3JXb3JrZXIiLE5yKX0pKCl9KSgpOwo=",Js=typeof window<"u"&&window.Blob&&new Blob([atob(cu)],{type:"text/javascript;charset=utf-8"});function z3(){const t=Js&&(window.URL||window.webkitURL).createObjectURL(Js);try{return t?new Worker(t):new Worker("data:application/javascript;base64,"+cu)}finally{t&&(window.URL||window.webkitURL).revokeObjectURL(t)}}const es=class extends tl{constructor(){super(...arguments),Rt(this,"rate",30),Rt(this,"worker")}async init(t){this.worker=await n2(vo,z3),await this.worker.init("worker_"+es.initCount++,t),await this.worker.setVonageMetadata(Ds()),await this.setBackgroundOptions(t),this.listenWorker()}async setTrackExpectedRate(t){var e;await(null==(e=this.worker)?void 0:e.setTrackExpectedRate(t))}async setBackgroundOptions(t){var e,n,r;const{transformerType:i}=t;switch(i){case"VideoBackground":await(null==(e=this.worker)?void 0:e.setVideoBGReadable(await Xs.createVideoReadable(t.backgroundAssetUri)));break;case"VirtualBackground":await(null==(n=this.worker)?void 0:n.setVirtualBGImage(await Xs.createImageCanvas(t.backgroundAssetUri)))}await(null==(r=this.worker)?void 0:r.setBackgroundOptions(t))}async transform(t,e){var n;await(null==(n=this.worker)?void 0:n.transform(t,e))}async destroy(){var t;await(null==(t=this.worker)?void 0:t.terminate())}async setFlickeringOptions(t){var e;await(null==(e=this.worker)?void 0:e.setFlickeringOptions(t))}async profile(t){var e;const n=await(null==(e=this.worker)?void 0:e.profile(t));return JSON.parse(null!=n?n:"[]")}async listenWorker(){for(var t,e,n;null!=(t=this.worker)&&t.worker;){const{name:t,data:r}=await(null==(e=this.worker)?void 0:e.onMediaProcessorEvent());switch(t){case"error":case"warn":this.emit(t,r);break;case"pipelineInfo":switch(this.emit(t,r),r){case"pipeline_ended":case"pipeline_ended_with_error":return void await(null==(n=this.worker)?void 0:n.terminate())}}}}};let hi=es;Rt(hi,"initCount",0);class P3{constructor(t){this.queries=t}async downloadSpeedscope(){this.download(await this.convertToSpeedscope())}download(t){const e=document.createElement("a");e.href=URL.createObjectURL(new Blob([t],{type:"application/json"})),e.download=`profile-${+new Date}.speedscope.json`,document.body.appendChild(e),e.click(),document.body.removeChild(e)}convertToSpeedscope(){const t=[],e={},n=[];let r=0;for(const i of this.queries){const o=[];for(const n of i)void 0===e[n.name]&&(e[n.name]=t.length,t.push({name:n.name})),o.push({type:n.action==ol.PUSH?"O":"C",frame:e[n.name],at:n.timestamp}),r=Math.max(r,n.timestamp+n.duration);n.push({events:o,type:"evented",name:"GPU Profile",unit:"nanoseconds",startValue:0,endValue:r})}const i={$schema:"https://www.speedscope.app/file-format-schema.json",shared:{frames:t},profiles:n};return JSON.stringify(i,null,2)}}class au extends tl{constructor(){super(),Rt(this,"worker",new hi),Rt(this,"connector",new Bc(this.worker))}async init(t){await this.worker.init(t),this.worker.onAny(((t,e)=>this.emit(t,e)))}async setBackgroundOptions(t){await this.worker.setBackgroundOptions(t)}setTrackExpectedRate(t){this.worker.setTrackExpectedRate(t)}getConnector(){return this.connector}async profile(t){return this.worker.profile(t)}static async profile(t){const e=await Promise.all(this.instances.map((e=>e.profile(t))));return new P3(e)}static async create(t){const e=new this;return await e.init(t),this.instances.push(e),e}}function D3(){return pi}function $3(){return bi}function q3(){return yi}function td(){return gi}function ed(){return Zi}function nd(){return vi}function rd(){return Gi}Rt(au,"instances",[]);var O3=(t=>(t.FAST="FAST",t.PRECISE="PRECISE",t))(O3||{});async function id(t){return await au.create(t)}export{j3 as BackgroundTransformer,ai as BlurRadius,Nc as ErrorFunction,qi as MediapipeHelper,uo as PipelineInfoData,O3 as SelfieSegmentationType,au as VonageMediaProcessor,Cc as WarningType,id as createVonageMediaProcessor,Qc as getSupportedBrowserFeatures,td as getVonageFaceDetection,ed as getVonageFaceMash,$3 as getVonageHands,q3 as getVonageHolistic,nd as getVonageObjectron,rd as getVonagePose,D3 as getVonageSelfieSegmentation,Q3 as isSupported};
4
+ see: http://github.com/greggman/twgl.js for details */const So=5120,Br=5121,Yo=5122,To=5123,wo=5124,Lo=5125,Fo=5126,c2=32819,a2=32820,d2=33635,h2=5131,f2=33640,m2=35899,p2=35902,b2=36269,y2=34042,sl={};{const t=sl;t[So]=Int8Array,t[Br]=Uint8Array,t[Yo]=Int16Array,t[To]=Uint16Array,t[wo]=Int32Array,t[Lo]=Uint32Array,t[Fo]=Float32Array,t[c2]=Uint16Array,t[a2]=Uint16Array,t[d2]=Uint16Array,t[h2]=Uint16Array,t[f2]=Uint32Array,t[m2]=Uint32Array,t[p2]=Uint32Array,t[b2]=Uint32Array,t[y2]=Uint32Array}function Ho(t){if(t instanceof Int8Array)return So;if(t instanceof Uint8Array||t instanceof Uint8ClampedArray)return Br;if(t instanceof Int16Array)return Yo;if(t instanceof Uint16Array)return To;if(t instanceof Int32Array)return wo;if(t instanceof Uint32Array)return Lo;if(t instanceof Float32Array)return Fo;throw new Error("unsupported typed array type")}function ll(t){if(t===Int8Array)return So;if(t===Uint8Array||t===Uint8ClampedArray)return Br;if(t===Int16Array)return Yo;if(t===Uint16Array)return To;if(t===Int32Array)return wo;if(t===Uint32Array)return Lo;if(t===Float32Array)return Fo;throw new Error("unsupported typed array type")}function ul(t){const e=sl[t];if(!e)throw new Error("unknown gl type");return e}const Wi=typeof SharedArrayBuffer<"u"?function(t){return t&&t.buffer&&(t.buffer instanceof ArrayBuffer||t.buffer instanceof SharedArrayBuffer)}:function(t){return t&&t.buffer&&t.buffer instanceof ArrayBuffer};function cl(...t){console.error(...t)}const Vs=new Map;function Ci(t,e){if(!t||"object"!=typeof t)return!1;let n=Vs.get(e);n||(n=new WeakMap,Vs.set(e,n));let r=n.get(t);if(void 0===r){const i=Object.prototype.toString.call(t);r=i.substring(8,i.length-1)===e,n.set(t,r)}return r}function g2(t,e){return typeof WebGLBuffer<"u"&&Ci(e,"WebGLBuffer")}function Z2(t,e){return typeof WebGLRenderbuffer<"u"&&Ci(e,"WebGLRenderbuffer")}function Co(t,e){return typeof WebGLTexture<"u"&&Ci(e,"WebGLTexture")}function v2(t,e){return typeof WebGLSampler<"u"&&Ci(e,"WebGLSampler")}const al=35044,Zr=34962,G2=34963,X2=34660,V2=5120,W2=5121,R2=5122,x2=5123,I2=5124,S2=5125,dl=5126,hl={attribPrefix:""};function Y2(t,e,n,r,i){t.bindBuffer(e,n),t.bufferData(e,r,i||al)}function fl(t,e,n,r){if(g2(t,e))return e;n=n||Zr;const i=t.createBuffer();return Y2(t,n,i,e,r),i}function ml(t){return"indices"===t}function T2(t){return t===Int8Array||t===Uint8Array}function w2(t){return t.length?t:t.data}const L2=/coord|texture/i,F2=/color|colour/i;function H2(t,e){let n;if(n=L2.test(t)?2:F2.test(t)?4:3,e%n>0)throw new Error(`Can not guess numComponents for attribute '${t}'. Tried ${n} but ${e} values is not evenly divisible by ${n}. You should specify it.`);return n}function C2(t,e,n){return t.numComponents||t.size||H2(e,n||w2(t).length)}function pl(t,e){if(Wi(t))return t;if(Wi(t.data))return t.data;Array.isArray(t)&&(t={data:t});let n=t.type?No(t.type):void 0;return n||(n=ml(e)?Uint16Array:Float32Array),new n(t.data)}function N2(t){return"number"==typeof t?t:t?ll(t):dl}function No(t){return"number"==typeof t?ul(t):t||Float32Array}function J2(t,e){return{buffer:e.buffer,numValues:24,type:N2(e.type),arrayType:No(e.type)}}function k2(t,e){const n=e.data||e,r=No(e.type),i=n*r.BYTES_PER_ELEMENT,o=t.createBuffer();return t.bindBuffer(Zr,o),t.bufferData(Zr,i,e.drawType||al),{buffer:o,numValues:n,type:ll(r),arrayType:r}}function E2(t,e,n){const r=pl(e,n);return{arrayType:r.constructor,buffer:fl(t,r,void 0,e.drawType),type:Ho(r),numValues:0}}function K2(t,e){const n={};return Object.keys(e).forEach((function(r){if(!ml(r)){const i=e[r],o=i.attrib||i.name||i.attribName||hl.attribPrefix+r;if(i.value){if(!Array.isArray(i.value)&&!Wi(i.value))throw new Error("array.value is not array or typedarray");n[o]={value:i.value}}else{let e;e=i.buffer&&i.buffer instanceof WebGLBuffer?J2:"number"==typeof i||"number"==typeof i.data?k2:E2;const{buffer:a,type:l,numValues:s,arrayType:c}=e(t,i,r),u=void 0!==i.normalize?i.normalize:T2(c),d=C2(i,r,s);n[o]={buffer:a,numComponents:d,type:l,normalize:u,stride:i.stride||0,offset:i.offset||0,divisor:void 0===i.divisor?void 0:i.divisor,drawType:i.drawType}}}})),t.bindBuffer(Zr,null),n}function U2(t,e){return e===V2||e===W2?1:e===R2||e===x2?2:e===I2||e===S2||e===dl?4:0}const no=["position","positions","a_position"];function M2(t,e){let n,r;for(r=0;r<no.length&&(n=no[r],!(n in e)&&(n=hl.attribPrefix+n,!(n in e)));++r);r===no.length&&(n=Object.keys(e)[0]);const i=e[n];if(!i.buffer)return 1;t.bindBuffer(Zr,i.buffer);const o=t.getBufferParameter(Zr,X2);t.bindBuffer(Zr,null);const a=o/U2(t,i.type),l=i.numComponents||i.size,s=a/l;if(s%1!=0)throw new Error(`numComponents ${l} not correct for length ${length}`);return s}function B2(t,e,n){const r=K2(t,e),i=Object.assign({},n||{});i.attribs=Object.assign({},n?n.attribs:{},r);const o=e.indices;if(o){const e=pl(o,"indices");i.indices=fl(t,e,G2),i.numElements=e.length,i.elementType=Ho(e)}else i.numElements||(i.numElements=M2(t,i.attribs));return i}function Or(t){return!!t.texStorage2D}const bl=function(){const t={},e={};return function(n,r){return function(n){const r=n.constructor.name;if(!t[r]){for(const t in n)if("number"==typeof n[t]){const r=e[n[t]];e[n[t]]=r?`${r} | ${t}`:t}t[r]=!0}}(n),e[r]||("number"==typeof r?`0x${r.toString(16)}`:r)}}(),hr={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},Ar=Wi,yl=function(){let t;return function(){return t=t||(typeof document<"u"&&document.createElement?document.createElement("canvas").getContext("2d"):null),t}}(),Ws=6406,nr=6407,Wn=6408,Rs=6409,xs=6410,Jr=6402,Is=34041,Ri=33071,A2=9728,j2=9729,fr=3553,ar=34067,Xr=32879,Vr=35866,Jo=34069,z2=34070,O2=34071,P2=34072,_2=34073,Q2=34074,ho=10241,fo=10240,xi=10242,Ii=10243,Ss=32882,D2=33082,$2=33083,q2=33084,t1=33085,ko=3317,gl=3314,Zl=32878,vl=3316,Gl=3315,Xl=32877,e1=37443,n1=37441,r1=37440,i1=33321,o1=36756,s1=33325,l1=33326,u1=33330,c1=33329,a1=33338,d1=33337,h1=33340,f1=33339,m1=33323,p1=36757,b1=33327,y1=33328,g1=33336,Z1=33335,v1=33332,G1=33331,X1=33334,V1=33333,W1=32849,R1=35905,x1=36194,I1=36758,S1=35898,Y1=35901,T1=34843,w1=34837,L1=36221,F1=36239,H1=36215,C1=36233,N1=36209,J1=36227,k1=32856,E1=35907,K1=36759,U1=32855,M1=32854,B1=32857,A1=34842,j1=34836,z1=36220,O1=36238,P1=36975,_1=36214,Q1=36232,D1=36226,$1=36208,q1=33189,ta=33190,ea=36012,na=36013,ra=35056,cr=5120,Zn=5121,ei=5122,wr=5123,ni=5124,br=5125,jn=5126,Ys=32819,Ts=32820,ws=33635,tr=5131,kr=36193,ro=33640,ia=35899,oa=35902,sa=36269,la=34042,ri=33319,Lr=33320,ii=6403,Fr=36244,Hr=36248,yr=36249;let io;function Ni(t){if(!io){const t={};t[Ws]={textureFormat:Ws,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[Zn,tr,kr,jn]},t[Rs]={textureFormat:Rs,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[Zn,tr,kr,jn]},t[xs]={textureFormat:xs,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[Zn,tr,kr,jn]},t[nr]={textureFormat:nr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[Zn,tr,kr,jn,ws]},t[Wn]={textureFormat:Wn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[Zn,tr,kr,jn,Ys,Ts]},t[Jr]={textureFormat:Jr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[br,wr]},t[i1]={textureFormat:ii,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[Zn]},t[o1]={textureFormat:ii,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[cr]},t[s1]={textureFormat:ii,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[jn,tr]},t[l1]={textureFormat:ii,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[jn]},t[u1]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[Zn]},t[c1]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[cr]},t[v1]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[wr]},t[G1]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[ei]},t[X1]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[br]},t[V1]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[ni]},t[m1]={textureFormat:ri,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[Zn]},t[p1]={textureFormat:ri,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[cr]},t[b1]={textureFormat:ri,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[jn,tr]},t[y1]={textureFormat:ri,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[jn]},t[g1]={textureFormat:Lr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Zn]},t[Z1]={textureFormat:Lr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[cr]},t[a1]={textureFormat:Lr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[wr]},t[d1]={textureFormat:Lr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[ei]},t[h1]={textureFormat:Lr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[br]},t[f1]={textureFormat:Lr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[ni]},t[W1]={textureFormat:nr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[Zn]},t[R1]={textureFormat:nr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[Zn]},t[x1]={textureFormat:nr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[Zn,ws]},t[I1]={textureFormat:nr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[cr]},t[S1]={textureFormat:nr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[jn,tr,ia]},t[Y1]={textureFormat:nr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[jn,tr,oa]},t[T1]={textureFormat:nr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[jn,tr]},t[w1]={textureFormat:nr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[jn]},t[L1]={textureFormat:Hr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[Zn]},t[F1]={textureFormat:Hr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[cr]},t[H1]={textureFormat:Hr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[wr]},t[C1]={textureFormat:Hr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[ei]},t[N1]={textureFormat:Hr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[br]},t[J1]={textureFormat:Hr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[ni]},t[k1]={textureFormat:Wn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Zn]},t[E1]={textureFormat:Wn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Zn]},t[K1]={textureFormat:Wn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[cr]},t[U1]={textureFormat:Wn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[Zn,Ts,ro]},t[M1]={textureFormat:Wn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[Zn,Ys]},t[B1]={textureFormat:Wn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[ro]},t[A1]={textureFormat:Wn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[jn,tr]},t[j1]={textureFormat:Wn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[jn]},t[z1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Zn]},t[O1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[cr]},t[P1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[ro]},t[_1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[wr]},t[Q1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[ei]},t[D1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[ni]},t[$1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[br]},t[q1]={textureFormat:Jr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[wr,br]},t[ta]={textureFormat:Jr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[br]},t[ea]={textureFormat:Jr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[jn]},t[ra]={textureFormat:Is,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[la]},t[na]={textureFormat:Is,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[sa]},Object.keys(t).forEach((function(e){const n=t[e];n.bytesPerElementMap={},n.bytesPerElement.forEach((function(t,e){const r=n.type[e];n.bytesPerElementMap[r]=t}))})),io=t}return io[t]}function ua(t,e){const n=Ni(t);if(!n)throw"unknown internal format";const r=n.bytesPerElementMap[e];if(void 0===r)throw"unknown internal format";return r}function Pr(t){const e=Ni(t);if(!e)throw"unknown internal format";return{format:e.textureFormat,type:e.type[0]}}function Ls(t){return 0==(t&t-1)}function ca(t,e,n,r){if(!Or(t))return Ls(e)&&Ls(n);const i=Ni(r);if(!i)throw"unknown internal format";return i.colorRenderable&&i.textureFilterable}function aa(t){const e=Ni(t);if(!e)throw"unknown internal format";return e.textureFilterable}function da(t,e,n){return Ar(e)?Ho(e):n||Zn}function oi(t,e,n,r,i){if(i%1!=0)throw"can't guess dimensions";if(n||r){if(r){if(!n&&(n=i/r)%1)throw"can't guess dimensions"}else if((r=i/n)%1)throw"can't guess dimensions"}else{const t=Math.sqrt(i/(e===ar?6:1));t%1==0?(n=t,r=t):(n=i,r=1)}return{width:n,height:r}}function Nr(t,e){void 0!==e.colorspaceConversion&&t.pixelStorei(e1,e.colorspaceConversion),void 0!==e.premultiplyAlpha&&t.pixelStorei(n1,e.premultiplyAlpha),void 0!==e.flipY&&t.pixelStorei(r1,e.flipY)}function Vl(t){t.pixelStorei(ko,4),Or(t)&&(t.pixelStorei(gl,0),t.pixelStorei(Zl,0),t.pixelStorei(vl,0),t.pixelStorei(Gl,0),t.pixelStorei(Xl,0))}function ha(t,e,n,r){r.minMag&&(n.call(t,e,ho,r.minMag),n.call(t,e,fo,r.minMag)),r.min&&n.call(t,e,ho,r.min),r.mag&&n.call(t,e,fo,r.mag),r.wrap&&(n.call(t,e,xi,r.wrap),n.call(t,e,Ii,r.wrap),(e===Xr||v2(t,e))&&n.call(t,e,Ss,r.wrap)),r.wrapR&&n.call(t,e,Ss,r.wrapR),r.wrapS&&n.call(t,e,xi,r.wrapS),r.wrapT&&n.call(t,e,Ii,r.wrapT),r.minLod&&n.call(t,e,D2,r.minLod),r.maxLod&&n.call(t,e,$2,r.maxLod),r.baseLevel&&n.call(t,e,q2,r.baseLevel),r.maxLevel&&n.call(t,e,t1,r.maxLevel)}function Wl(t,e,n){const r=n.target||fr;t.bindTexture(r,e),ha(t,r,t.texParameteri,n)}function fa(t){return Ar(t=t||hr.textureColor)?t:new Uint8Array([255*t[0],255*t[1],255*t[2],255*t[3]])}function mo(t,e,n,r,i,o){o=o||Wn;const a=(n=n||hr.textureOptions).target||fr;if(r=r||n.width,i=i||n.height,t.bindTexture(a,e),ca(t,r,i,o))t.generateMipmap(a);else{const e=aa(o)?j2:A2;t.texParameteri(a,ho,e),t.texParameteri(a,fo,e),t.texParameteri(a,xi,Ri),t.texParameteri(a,Ii,Ri)}}function jr(t){return!0===t.auto||void 0===t.auto&&void 0===t.level}function po(t,e){return(e=e||{}).cubeFaceOrder||[Jo,z2,O2,P2,_2,Q2]}function bo(t,e){const n=po(t,e).map((function(t,e){return{face:t,ndx:e}}));return n.sort((function(t,e){return t.face-e.face})),n}function Rl(t,e,n,r){const i=(r=r||hr.textureOptions).target||fr,o=r.level||0;let a=n.width,l=n.height;const s=r.internalFormat||r.format||Wn,c=Pr(s),u=r.format||c.format,d=r.type||c.type;if(Nr(t,r),t.bindTexture(i,e),i===ar){const c=n.width,h=n.height;let m,f;if(c/6===h)m=h,f=[0,0,1,0,2,0,3,0,4,0,5,0];else if(h/6===c)m=c,f=[0,0,0,1,0,2,0,3,0,4,0,5];else if(c/3==h/2)m=c/3,f=[0,0,1,0,2,0,0,1,1,1,2,1];else{if(c/2!=h/3)throw"can't figure out cube map from element: "+(n.src?n.src:n.nodeName);m=c/2,f=[0,0,1,0,0,1,1,1,0,2,1,2]}const p=yl();p?(p.canvas.width=m,p.canvas.height=m,a=m,l=m,bo(t,r).forEach((function(e){const r=f[2*e.ndx+0]*m,i=f[2*e.ndx+1]*m;p.drawImage(n,r,i,m,m,0,0,m,m),t.texImage2D(e.face,o,s,u,d,p.canvas)})),p.canvas.width=1,p.canvas.height=1):typeof createImageBitmap<"u"&&(a=m,l=m,bo(t,r).forEach((function(c){const h=f[2*c.ndx+0]*m,p=f[2*c.ndx+1]*m;t.texImage2D(c.face,o,s,m,m,0,u,d,null),createImageBitmap(n,h,p,m,m,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then((function(n){Nr(t,r),t.bindTexture(i,e),t.texImage2D(c.face,o,s,u,d,n),jr(r)&&mo(t,e,r,a,l,s)}))})))}else if(i===Xr||i===Vr){const e=Math.min(n.width,n.height),r=Math.max(n.width,n.height),a=r/e;if(a%1!=0)throw"can not compute 3D dimensions of element";const l=n.width===r?1:0,c=n.height===r?1:0;t.pixelStorei(ko,1),t.pixelStorei(gl,n.width),t.pixelStorei(Zl,0),t.pixelStorei(Xl,0),t.texImage3D(i,o,s,e,e,e,0,u,d,null);for(let r=0;r<a;++r){const a=r*e*l,s=r*e*c;t.pixelStorei(vl,a),t.pixelStorei(Gl,s),t.texSubImage3D(i,o,0,0,r,e,e,1,u,d,n)}Vl(t)}else t.texImage2D(i,o,s,u,d,n);jr(r)&&mo(t,e,r,a,l,s),Wl(t,e,r)}function _r(){}function ma(t){if(typeof document<"u"){const e=document.createElement("a");return e.href=t,e.hostname===location.hostname&&e.port===location.port&&e.protocol===location.protocol}{const e=new URL(location.href).origin;return new URL(t,location.href).origin===e}}function pa(t,e){return void 0!==e||ma(t)?e:"anonymous"}function ba(t,e,n){let r;if(n=n||_r,e=pa(t,e=void 0!==e?e:hr.crossOrigin),typeof Image<"u"){r=new Image,void 0!==e&&(r.crossOrigin=e);const i=function(){r.removeEventListener("error",o),r.removeEventListener("load",a),r=null},o=function(){const e="couldn't load image: "+t;cl(e),n(e,r),i()},a=function(){n(null,r),i()};return r.addEventListener("error",o),r.addEventListener("load",a),r.src=t,r}if(typeof ImageBitmap<"u"){let i,o;const a=function(){n(i,o)},l={};e&&(l.mode="cors"),fetch(t,l).then((function(t){if(!t.ok)throw t;return t.blob()})).then((function(t){return createImageBitmap(t,{premultiplyAlpha:"none",colorSpaceConversion:"none"})})).then((function(t){o=t,setTimeout(a)})).catch((function(t){i=t,setTimeout(a)})),r=null}return r}function xl(t){return typeof ImageBitmap<"u"&&t instanceof ImageBitmap||typeof ImageData<"u"&&t instanceof ImageData||typeof HTMLElement<"u"&&t instanceof HTMLElement}function Eo(t,e,n){return xl(t)?(setTimeout((function(){n(null,t)})),t):ba(t,e,n)}function Ko(t,e,n){const r=(n=n||hr.textureOptions).target||fr;if(t.bindTexture(r,e),!1===n.color)return;const i=fa(n.color);if(r===ar)for(let e=0;e<6;++e)t.texImage2D(Jo+e,0,Wn,1,1,0,Wn,Zn,i);else r===Xr||r===Vr?t.texImage3D(r,0,Wn,1,1,1,0,Wn,Zn,i):t.texImage2D(r,0,Wn,1,1,0,Wn,Zn,i)}function ya(t,e,n,r){return r=r||_r,Ko(t,e,n=n||hr.textureOptions),Eo((n=Object.assign({},n)).src,n.crossOrigin,(function(i,o){i?r(i,e,o):(Rl(t,e,o,n),r(null,e,o))}))}function ga(t,e,n,r){r=r||_r;const i=n.src;if(6!==i.length)throw"there must be 6 urls for a cubemap";const o=n.level||0,a=n.internalFormat||n.format||Wn,l=Pr(a),s=n.format||l.format,c=n.type||Zn,u=n.target||fr;if(u!==ar)throw"target must be TEXTURE_CUBE_MAP";Ko(t,e,n),n=Object.assign({},n);let d=6;const h=[],m=po(t,n);let f;f=i.map((function(i,l){return Eo(i,n.crossOrigin,function(i){return function(l,m){--d,l?h.push(l):m.width!==m.height?h.push("cubemap face img is not a square: "+m.src):(Nr(t,n),t.bindTexture(u,e),5===d?po().forEach((function(e){t.texImage2D(e,o,a,s,c,m)})):t.texImage2D(i,o,a,s,c,m),jr(n)&&t.generateMipmap(u)),0===d&&r(h.length?h:void 0,e,f)}}(m[l]))}))}function Za(t,e,n,r){r=r||_r;const i=n.src,o=n.internalFormat||n.format||Wn,a=Pr(o),l=n.format||a.format,s=n.type||Zn,c=n.target||Vr;if(c!==Xr&&c!==Vr)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";Ko(t,e,n),n=Object.assign({},n);let u=i.length;const d=[];let h;const m=n.level||0;let f=n.width,p=n.height;const b=i.length;let g=!0;h=i.map((function(i,a){return Eo(i,n.crossOrigin,function(i){return function(a,y){if(--u,a)d.push(a);else{if(Nr(t,n),t.bindTexture(c,e),g){g=!1,f=n.width||y.width,p=n.height||y.height,t.texImage3D(c,m,o,f,p,b,0,l,s,null);for(let e=0;e<b;++e)t.texSubImage3D(c,m,0,0,e,f,p,1,l,s,y)}else{let e,n=y;(y.width!==f||y.height!==p)&&(e=yl(),n=e.canvas,e.canvas.width=f,e.canvas.height=p,e.drawImage(y,0,0,f,p)),t.texSubImage3D(c,m,0,0,i,f,p,1,l,s,n),e&&n===e.canvas&&(e.canvas.width=0,e.canvas.height=0)}jr(n)&&t.generateMipmap(c)}0===u&&r(d.length?d:void 0,e,h)}}(a))}))}function va(t,e,n,r){const i=(r=r||hr.textureOptions).target||fr;t.bindTexture(i,e);let o=r.width,a=r.height,l=r.depth;const s=r.level||0,c=r.internalFormat||r.format||Wn,u=Pr(c),d=r.format||u.format,h=r.type||da(t,n,u.type);if(Ar(n))n instanceof Uint8ClampedArray&&(n=new Uint8Array(n.buffer));else{const t=ul(h);n=new t(n)}const m=ua(c,h),f=n.byteLength/m;if(f%1)throw"length wrong size for format: "+bl(t,d);let p;if(i===Xr||i===Vr)if(o||a||l)!o||a&&l?!a||o&&l?(p=oi(t,i,o,a,f/l),o=p.width,a=p.height):(p=oi(t,i,o,l,f/a),o=p.width,l=p.height):(p=oi(t,i,a,l,f/o),a=p.width,l=p.height);else{const t=Math.cbrt(f);if(t%1!=0)throw"can't guess cube size of array of numElements: "+f;o=t,a=t,l=t}else p=oi(t,i,o,a,f),o=p.width,a=p.height;if(Vl(t),t.pixelStorei(ko,r.unpackAlignment||1),Nr(t,r),i===ar){const e=f/6*(m/n.BYTES_PER_ELEMENT);bo(t,r).forEach((r=>{const i=e*r.ndx,l=n.subarray(i,i+e);t.texImage2D(r.face,s,c,o,a,0,d,h,l)}))}else i===Xr||i===Vr?t.texImage3D(i,s,c,o,a,l,0,d,h,n):t.texImage2D(i,s,c,o,a,0,d,h,n);return{width:o,height:a,depth:l,type:h}}function Ga(t,e,n){const r=n.target||fr;t.bindTexture(r,e);const i=n.level||0,o=n.internalFormat||n.format||Wn,a=Pr(o),l=n.format||a.format,s=n.type||a.type;if(Nr(t,n),r===ar)for(let e=0;e<6;++e)t.texImage2D(Jo+e,i,o,n.width,n.height,0,l,s,null);else r===Xr||r===Vr?t.texImage3D(r,i,o,n.width,n.height,n.depth,0,l,s,null):t.texImage2D(r,i,o,n.width,n.height,0,l,s,null)}function Il(t,e,n){n=n||_r,e=e||hr.textureOptions;const r=t.createTexture(),i=e.target||fr;let o=e.width||1,a=e.height||1;const l=e.internalFormat||Wn;t.bindTexture(i,r),i===ar&&(t.texParameteri(i,xi,Ri),t.texParameteri(i,Ii,Ri));let s=e.src;if(s)if("function"==typeof s&&(s=s(t,e)),"string"==typeof s)ya(t,r,e,n);else if(Ar(s)||Array.isArray(s)&&("number"==typeof s[0]||Array.isArray(s[0])||Ar(s[0]))){const n=va(t,r,s,e);o=n.width,a=n.height}else Array.isArray(s)&&("string"==typeof s[0]||xl(s[0]))?i===ar?ga(t,r,e,n):Za(t,r,e,n):(Rl(t,r,s,e),o=s.width,a=s.height);else Ga(t,r,e);return jr(e)&&mo(t,r,e,o,a,l),Wl(t,r,e),r}const Uo=cl;function Sl(t){return typeof document<"u"&&document.getElementById?document.getElementById(t):null}const Si=33984,Ji=34962,Xa=34963,Va=35713,Wa=35714,Ra=35632,xa=35633,Ia=35981,Yl=35718,Sa=35721,Ya=35971,Ta=35382,wa=35396,La=35398,Fa=35392,Ha=35395,ki=5126,Tl=35664,wl=35665,Ll=35666,Mo=5124,Fl=35667,Hl=35668,Cl=35669,Nl=35670,Jl=35671,kl=35672,El=35673,Kl=35674,Ul=35675,Ml=35676,Ca=35678,Na=35680,Ja=35679,ka=35682,Ea=35685,Ka=35686,Ua=35687,Ma=35688,Ba=35689,Aa=35690,ja=36289,za=36292,Oa=36293,Bo=5125,Bl=36294,Al=36295,jl=36296,Pa=36298,_a=36299,Qa=36300,Da=36303,$a=36306,qa=36307,t0=36308,e0=36311,Ei=3553,Ki=34067,Ao=32879,Ui=35866,ge={};function zl(t,e){return ge[e].bindPoint}function n0(t,e){return function(n){t.uniform1f(e,n)}}function r0(t,e){return function(n){t.uniform1fv(e,n)}}function i0(t,e){return function(n){t.uniform2fv(e,n)}}function o0(t,e){return function(n){t.uniform3fv(e,n)}}function s0(t,e){return function(n){t.uniform4fv(e,n)}}function Ol(t,e){return function(n){t.uniform1i(e,n)}}function Pl(t,e){return function(n){t.uniform1iv(e,n)}}function _l(t,e){return function(n){t.uniform2iv(e,n)}}function Ql(t,e){return function(n){t.uniform3iv(e,n)}}function Dl(t,e){return function(n){t.uniform4iv(e,n)}}function l0(t,e){return function(n){t.uniform1ui(e,n)}}function u0(t,e){return function(n){t.uniform1uiv(e,n)}}function c0(t,e){return function(n){t.uniform2uiv(e,n)}}function a0(t,e){return function(n){t.uniform3uiv(e,n)}}function d0(t,e){return function(n){t.uniform4uiv(e,n)}}function h0(t,e){return function(n){t.uniformMatrix2fv(e,!1,n)}}function f0(t,e){return function(n){t.uniformMatrix3fv(e,!1,n)}}function m0(t,e){return function(n){t.uniformMatrix4fv(e,!1,n)}}function p0(t,e){return function(n){t.uniformMatrix2x3fv(e,!1,n)}}function b0(t,e){return function(n){t.uniformMatrix3x2fv(e,!1,n)}}function y0(t,e){return function(n){t.uniformMatrix2x4fv(e,!1,n)}}function g0(t,e){return function(n){t.uniformMatrix4x2fv(e,!1,n)}}function Z0(t,e){return function(n){t.uniformMatrix3x4fv(e,!1,n)}}function v0(t,e){return function(n){t.uniformMatrix4x3fv(e,!1,n)}}function zn(t,e,n,r){const i=zl(t,e);return Or(t)?function(e){let o,a;Co(t,e)?(o=e,a=null):(o=e.texture,a=e.sampler),t.uniform1i(r,n),t.activeTexture(Si+n),t.bindTexture(i,o),t.bindSampler(n,a)}:function(e){t.uniform1i(r,n),t.activeTexture(Si+n),t.bindTexture(i,e)}}function On(t,e,n,r,i){const o=zl(t,e),a=new Int32Array(i);for(let t=0;t<i;++t)a[t]=n+t;return Or(t)?function(e){t.uniform1iv(r,a),e.forEach((function(e,r){let i,l;t.activeTexture(Si+a[r]),Co(t,e)?(i=e,l=null):(i=e.texture,l=e.sampler),t.bindSampler(n,l),t.bindTexture(o,i)}))}:function(e){t.uniform1iv(r,a),e.forEach((function(e,n){t.activeTexture(Si+a[n]),t.bindTexture(o,e)}))}}function Mi(t,e){return function(n){if(n.value)switch(t.disableVertexAttribArray(e),n.value.length){case 4:t.vertexAttrib4fv(e,n.value);break;case 3:t.vertexAttrib3fv(e,n.value);break;case 2:t.vertexAttrib2fv(e,n.value);break;case 1:t.vertexAttrib1fv(e,n.value);break;default:throw new Error("the length of a float constant value must be between 1 and 4!")}else t.bindBuffer(Ji,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribPointer(e,n.numComponents||n.size,n.type||ki,n.normalize||!1,n.stride||0,n.offset||0),t.vertexAttribDivisor&&t.vertexAttribDivisor(e,n.divisor||0)}}function mr(t,e){return function(n){if(n.value){if(t.disableVertexAttribArray(e),4!==n.value.length)throw new Error("The length of an integer constant value must be 4!");t.vertexAttrib4iv(e,n.value)}else t.bindBuffer(Ji,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribIPointer(e,n.numComponents||n.size,n.type||Mo,n.stride||0,n.offset||0),t.vertexAttribDivisor&&t.vertexAttribDivisor(e,n.divisor||0)}}function Bi(t,e){return function(n){if(n.value){if(t.disableVertexAttribArray(e),4!==n.value.length)throw new Error("The length of an unsigned integer constant value must be 4!");t.vertexAttrib4uiv(e,n.value)}else t.bindBuffer(Ji,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribIPointer(e,n.numComponents||n.size,n.type||Bo,n.stride||0,n.offset||0),t.vertexAttribDivisor&&t.vertexAttribDivisor(e,n.divisor||0)}}function jo(t,e,n){const r=n.size,i=n.count;return function(n){t.bindBuffer(Ji,n.buffer);const o=n.size||n.numComponents||r,a=o/i,l=n.type||ki,s=ge[l].size*o,c=n.normalize||!1,u=n.offset||0,d=s/i;for(let r=0;r<i;++r)t.enableVertexAttribArray(e+r),t.vertexAttribPointer(e+r,a,l,c,s,u+d*r),t.vertexAttribDivisor&&t.vertexAttribDivisor(e+r,n.divisor||0)}}ge[ki]={Type:Float32Array,size:4,setter:n0,arraySetter:r0},ge[Tl]={Type:Float32Array,size:8,setter:i0,cols:2},ge[wl]={Type:Float32Array,size:12,setter:o0,cols:3},ge[Ll]={Type:Float32Array,size:16,setter:s0,cols:4},ge[Mo]={Type:Int32Array,size:4,setter:Ol,arraySetter:Pl},ge[Fl]={Type:Int32Array,size:8,setter:_l,cols:2},ge[Hl]={Type:Int32Array,size:12,setter:Ql,cols:3},ge[Cl]={Type:Int32Array,size:16,setter:Dl,cols:4},ge[Bo]={Type:Uint32Array,size:4,setter:l0,arraySetter:u0},ge[Bl]={Type:Uint32Array,size:8,setter:c0,cols:2},ge[Al]={Type:Uint32Array,size:12,setter:a0,cols:3},ge[jl]={Type:Uint32Array,size:16,setter:d0,cols:4},ge[Nl]={Type:Uint32Array,size:4,setter:Ol,arraySetter:Pl},ge[Jl]={Type:Uint32Array,size:8,setter:_l,cols:2},ge[kl]={Type:Uint32Array,size:12,setter:Ql,cols:3},ge[El]={Type:Uint32Array,size:16,setter:Dl,cols:4},ge[Kl]={Type:Float32Array,size:32,setter:h0,rows:2,cols:2},ge[Ul]={Type:Float32Array,size:48,setter:f0,rows:3,cols:3},ge[Ml]={Type:Float32Array,size:64,setter:m0,rows:4,cols:4},ge[Ea]={Type:Float32Array,size:32,setter:p0,rows:2,cols:3},ge[Ka]={Type:Float32Array,size:32,setter:y0,rows:2,cols:4},ge[Ua]={Type:Float32Array,size:48,setter:b0,rows:3,cols:2},ge[Ma]={Type:Float32Array,size:48,setter:Z0,rows:3,cols:4},ge[Ba]={Type:Float32Array,size:64,setter:g0,rows:4,cols:2},ge[Aa]={Type:Float32Array,size:64,setter:v0,rows:4,cols:3},ge[Ca]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ei},ge[Na]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ki},ge[Ja]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ao},ge[ka]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ei},ge[ja]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ui},ge[za]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ui},ge[Oa]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ki},ge[Pa]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ei},ge[_a]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ao},ge[Qa]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ki},ge[Da]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ui},ge[$a]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ei},ge[qa]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ao},ge[t0]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ki},ge[e0]={Type:null,size:0,setter:zn,arraySetter:On,bindPoint:Ui};const Hn={};Hn[ki]={size:4,setter:Mi},Hn[Tl]={size:8,setter:Mi},Hn[wl]={size:12,setter:Mi},Hn[Ll]={size:16,setter:Mi},Hn[Mo]={size:4,setter:mr},Hn[Fl]={size:8,setter:mr},Hn[Hl]={size:12,setter:mr},Hn[Cl]={size:16,setter:mr},Hn[Bo]={size:4,setter:Bi},Hn[Bl]={size:8,setter:Bi},Hn[Al]={size:12,setter:Bi},Hn[jl]={size:16,setter:Bi},Hn[Nl]={size:4,setter:mr},Hn[Jl]={size:8,setter:mr},Hn[kl]={size:12,setter:mr},Hn[El]={size:16,setter:mr},Hn[Kl]={size:4,setter:jo,count:2},Hn[Ul]={size:9,setter:jo,count:3},Hn[Ml]={size:16,setter:jo,count:4};const G0=/ERROR:\s*\d+:(\d+)/gi;function X0(t,e="",n=0){const r=[...e.matchAll(G0)],i=new Map(r.map(((t,n)=>{const i=parseInt(t[1]),o=r[n+1],a=o?o.index:e.length;return[i-1,e.substring(t.index,a)]})));return t.split("\n").map(((t,e)=>{const r=i.get(e);return`${e+1+n}: ${t}${r?`\n\n^^^ ${r}`:""}`})).join("\n")}const Fs=/^[ \t]*\n/;function $l(t){let e=0;return Fs.test(t)&&(e=1,t=t.replace(Fs,"")),{lineOffset:e,shaderSource:t}}function V0(t,e){return t.errorCallback(e),t.callback&&setTimeout((()=>{t.callback(`${e}\n${t.errors.join("\n")}`)})),null}function W0(t,e,n,r){if(r=r||Uo,!t.getShaderParameter(n,Va)){const i=t.getShaderInfoLog(n),{lineOffset:o,shaderSource:a}=$l(t.getShaderSource(n)),l=`${X0(a,i,o)}\nError compiling ${bl(t,e)}: ${i}`;return r(l),l}return""}function zo(t,e,n){let r,i,o;if("function"==typeof e&&(n=e,e=void 0),"function"==typeof t)n=t,t=void 0;else if(t&&!Array.isArray(t)){const e=t;n=e.errorCallback,t=e.attribLocations,r=e.transformFeedbackVaryings,i=e.transformFeedbackMode,o=e.callback}const a=n||Uo,l=[],s={errorCallback(t,...e){l.push(t),a(t,...e)},transformFeedbackVaryings:r,transformFeedbackMode:i,callback:o,errors:l};{let n={};Array.isArray(t)?t.forEach((function(t,r){n[t]=e?e[r]:r})):n=t||{},s.attribLocations=n}return s}const R0=["VERTEX_SHADER","FRAGMENT_SHADER"];function x0(t,e){return e.indexOf("frag")>=0?Ra:e.indexOf("vert")>=0?xa:void 0}function I0(t,e,n){const r=t.getAttachedShaders(e);for(const e of r)n.has(e)&&t.deleteShader(e);t.deleteProgram(e)}const S0=(t=0)=>new Promise((e=>setTimeout(e,t)));function Y0(t,e,n){const r=t.createProgram(),{attribLocations:i,transformFeedbackVaryings:o,transformFeedbackMode:a}=zo(n);for(let n=0;n<e.length;++n){let i=e[n];if("string"==typeof i){const e=Sl(i),o=e?e.text:i;let a=t[R0[n]];e&&e.type&&(a=x0(t,e.type)||a),i=t.createShader(a),t.shaderSource(i,$l(o).shaderSource),t.compileShader(i),t.attachShader(r,i)}}Object.entries(i).forEach((([e,n])=>t.bindAttribLocation(r,n,e)));{let e=o;e&&(e.attribs&&(e=e.attribs),Array.isArray(e)||(e=Object.keys(e)),t.transformFeedbackVaryings(r,e,a||Ia))}return t.linkProgram(r),r}function T0(t,e,n,r,i){const o=zo(n,r,i),a=new Set(e),l=Y0(t,e,o);function s(t,e){const n=L0(t,e,o.errorCallback);return n&&I0(t,e,a),n}if(!o.callback)return s(t,l)?void 0:l;w0(t,l).then((()=>{const e=s(t,l);o.callback(e,e?void 0:l)}))}async function w0(t,e){const n=t.getExtension("KHR_parallel_shader_compile"),r=n?(t,e)=>t.getProgramParameter(e,n.COMPLETION_STATUS_KHR):()=>!0;let i=0;do{await S0(i),i=1e3/60}while(!r(t,e))}function L0(t,e,n){if(n=n||Uo,!t.getProgramParameter(e,Wa)){const r=t.getProgramInfoLog(e);n(`Error in program linking: ${r}`);return`${r}\n${t.getAttachedShaders(e).map((e=>W0(t,t.getShaderParameter(e,t.SHADER_TYPE),e,n))).filter((t=>t)).join("\n")}`}}function F0(t,e,n,r,i){return T0(t,e,n,r,i)}function ql(t){const e=t.name;return e.startsWith("gl_")||e.startsWith("webgl_")}const H0=/(\.|\[|]|\w+)/g,C0=t=>t>="0"&&t<="9";function N0(t,e,n,r){const i=t.split(H0).filter((t=>""!==t));let o=0,a="";for(;;){const t=i[o++];a+=t;const l=C0(t[0]),s=l?parseInt(t):t;if(l&&(a+=i[o++]),o===i.length){n[s]=e;break}{const t=i[o++],e="["===t,l=n[s]||(e?[]:{});n[s]=l,n=l,r[a]=r[a]||function(t){return function(e){tu(t,e)}}(l),a+=t}}}function J0(t,e){let n=0;function r(e,r,i){const o=r.name.endsWith("[0]"),a=r.type,l=ge[a];if(!l)throw new Error(`unknown type: 0x${a.toString(16)}`);let s;if(l.bindPoint){const e=n;n+=r.size,s=o?l.arraySetter(t,a,e,i,r.size):l.setter(t,a,e,i,r.size)}else s=l.arraySetter&&o?l.arraySetter(t,i):l.setter(t,i);return s.location=i,s}const i={},o={},a=t.getProgramParameter(e,Yl);for(let n=0;n<a;++n){const a=t.getActiveUniform(e,n);if(ql(a))continue;let l=a.name;l.endsWith("[0]")&&(l=l.substr(0,l.length-3));const s=t.getUniformLocation(e,a.name);if(s){const t=r(0,a,s);i[l]=t,N0(l,t,o,i)}}return i}function k0(t,e){const n={},r=t.getProgramParameter(e,Ya);for(let i=0;i<r;++i){const r=t.getTransformFeedbackVarying(e,i);n[r.name]={index:i,type:r.type,size:r.size}}return n}function E0(t,e){const n=t.getProgramParameter(e,Yl),r=[],i=[];for(let o=0;o<n;++o){i.push(o),r.push({});const n=t.getActiveUniform(e,o);r[o].name=n.name}[["UNIFORM_TYPE","type"],["UNIFORM_SIZE","size"],["UNIFORM_BLOCK_INDEX","blockNdx"],["UNIFORM_OFFSET","offset"]].forEach((function(n){const o=n[0],a=n[1];t.getActiveUniforms(e,i,t[o]).forEach((function(t,e){r[e][a]=t}))}));const o={},a=t.getProgramParameter(e,Ta);for(let n=0;n<a;++n){const r=t.getActiveUniformBlockName(e,n),i={index:t.getUniformBlockIndex(e,r),usedByVertexShader:t.getActiveUniformBlockParameter(e,n,wa),usedByFragmentShader:t.getActiveUniformBlockParameter(e,n,La),size:t.getActiveUniformBlockParameter(e,n,Fa),uniformIndices:t.getActiveUniformBlockParameter(e,n,Ha)};i.used=i.usedByVertexShader||i.usedByFragmentShader,o[r]=i}return{blockSpecs:o,uniformData:r}}function tu(t,e){for(const n in e){const r=t[n];"function"==typeof r?r(e[n]):tu(t[n],e[n])}}function eu(t,...e){const n=t.uniformSetters||t,r=e.length;for(let t=0;t<r;++t){const r=e[t];if(Array.isArray(r)){const t=r.length;for(let e=0;e<t;++e)eu(n,r[e])}else for(const t in r){const e=n[t];e&&e(r[t])}}}function K0(t,e){const n={},r=t.getProgramParameter(e,Sa);for(let i=0;i<r;++i){const r=t.getActiveAttrib(e,i);if(ql(r))continue;const o=t.getAttribLocation(e,r.name),a=Hn[r.type],l=a.setter(t,o,a);l.location=o,n[r.name]=l}return n}function U0(t,e){for(const n in e){const r=t[n];r&&r(e[n])}}function M0(t,e,n){n.vertexArrayObject?t.bindVertexArray(n.vertexArrayObject):(U0(e.attribSetters||e,n.attribs),n.indices&&t.bindBuffer(Xa,n.indices))}function Hs(t,e){const n={program:e,uniformSetters:J0(t,e),attribSetters:K0(t,e)};return Or(t)&&(n.uniformBlockSpec=E0(t,e),n.transformFeedbackInfo=k0(t,e)),n}const B0=/\s|{|}|;/;function A0(t,e,n,r,i){const o=zo(n,r,i),a=[];if(e=e.map((function(t){if(!B0.test(t)){const e=Sl(t);if(e)t=e.text;else{const e=`no element with id: ${t}`;o.errorCallback(e),a.push(e)}}return t})),a.length)return V0(o,"");const l=o.callback;l&&(o.callback=(e,n)=>{l(e,e?void 0:Hs(t,n))});const s=F0(t,e,o);return s?Hs(t,s):null}const j0=4,Cs=5123;function z0(t,e,n,r,i,o){n=void 0===n?4:n;const a=e.indices,l=e.elementType,s=void 0===r?e.numElements:r;i=void 0===i?0:i,l||a?void 0!==o?t.drawElementsInstanced(n,s,void 0===l?Cs:e.elementType,i,o):t.drawElements(n,s,void 0===l?Cs:e.elementType,i):void 0!==o?t.drawArraysInstanced(n,i,s,o):t.drawArrays(n,i,s)}const nu=36160,si=36161,O0=3553,P0=5121,_0=6402,Q0=6408,D0=33190,$0=36012,q0=35056,t3=36013,e3=32854,n3=32855,r3=36194,ru=33189,iu=6401,ou=36168,Oo=34041,yo=36064,Ai=36096,su=36128,Po=33306,go=33071,Zo=9729,i3=[{format:Q0,type:P0,min:Zo,wrap:go},{format:Oo}],er={};function o3(t,e){return er[t]||er[e]}er[Oo]=Po,er[iu]=su,er[ou]=su,er[_0]=Ai,er[ru]=Ai,er[D0]=Ai,er[$0]=Ai,er[q0]=Po,er[t3]=Po;const pr={};function s3(t){return pr[t]}pr[e3]=!0,pr[n3]=!0,pr[r3]=!0,pr[Oo]=!0,pr[ru]=!0,pr[iu]=!0,pr[ou]=!0;const l3=32;function u3(t){return t>=yo&&t<36096}function Yi(t,e,n,r){const i=nu,o=t.createFramebuffer();t.bindFramebuffer(i,o),n=n||t.drawingBufferWidth,r=r||t.drawingBufferHeight;const a=[],l={framebuffer:o,attachments:[],width:n,height:r};return(e=e||i3).forEach((function(e,o){let s=e.attachment;const c=e.samples,u=e.format;let d=e.attachmentPoint||o3(u,e.internalFormat);if(d||(d=yo+o),u3(d)&&a.push(d),!s)if(void 0!==c||s3(u))s=t.createRenderbuffer(),t.bindRenderbuffer(si,s),c>1?t.renderbufferStorageMultisample(si,c,u,n,r):t.renderbufferStorage(si,u,n,r);else{const i=Object.assign({},e);i.width=n,i.height=r,void 0===i.auto&&(i.auto=!1,i.min=i.min||i.minMag||Zo,i.mag=i.mag||i.minMag||Zo,i.wrapS=i.wrapS||i.wrap||go,i.wrapT=i.wrapT||i.wrap||go),s=Il(t,i)}if(Z2(t,s))t.framebufferRenderbuffer(i,d,si,s);else{if(!Co(t,s))throw new Error("unknown attachment type");void 0!==e.layer?t.framebufferTextureLayer(i,d,s,e.level||0,e.layer):t.framebufferTexture2D(i,d,e.target||O0,s,e.level||0)}l.attachments.push(s)})),t.drawBuffers&&t.drawBuffers(a),l}function c3(t,e,n){n=n||nu,e?(t.bindFramebuffer(n,e.framebuffer),t.viewport(0,0,e.width,e.height)):(t.bindFramebuffer(n,null),t.viewport(0,0,t.drawingBufferWidth,t.drawingBufferHeight))}function bn(t,e){return()=>e instanceof WebGLTexture?e:Il(t,{src:e,wrap:t.CLAMP_TO_EDGE})}const Ns=2;class Wr{constructor(t){Rt(this,"id","_"),Rt(this,"context"),Rt(this,"output"),Rt(this,"fbi"),Rt(this,"options"),Rt(this,"programInfo"),Rt(this,"bufferInfo"),Rt(this,"profiler"),Rt(this,"lastRun");const{context:e,width:n,height:r}=t;this.context=e,this.options=t;const i=this.buildDefines();this.programInfo=A0(this.context,[i+this.getVertexShader(),i+this.getFragmentShader()]),this.bufferInfo=B2(this.context,this.getBuffers()),this.fbi=Yi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],n,r),this.output=this.fbi.attachments[0]}resizeOutput(t,e){this.fbi=Yi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],t,e),this.options.width=t,this.options.height=e,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 t="";const e=this.getDefines();for(let n in e)t+=`#define ${n} ${e[n].toFixed(1)}\n`;return t}run(t){var e,n,r,i,o,a;null==(e=this.profiler)||e.pushContext(`[${this.id}] PROG : ${this.constructor.name}`),null==(n=this.profiler)||n.pushContext(`[${this.id}] UNIFORMS`);for(const e in t)"function"==typeof t[e]&&(null==(r=this.profiler)||r.pushContext(`[${this.id}] UNI : ${e}`),t[e]=t[e](),null==(i=this.profiler)||i.popContext(`[${this.id}] UNI : ${e}`));null==(o=this.profiler)||o.popContext(`[${this.id}] UNIFORMS`);const l=Date.now();let s=0;this.lastRun&&(s=(l-this.lastRun)/1e3),this.lastRun=l,this.context.viewport(0,0,this.context.canvas.width,this.context.canvas.height),this.context.useProgram(this.programInfo.program),M0(this.context,this.programInfo,this.bufferInfo),eu(this.programInfo,{delta:s,canvas:[this.context.canvas.width,this.context.canvas.height],...t}),c3(this.context,this.options.disableFramebuffer?null:this.fbi),z0(this.context,this.bufferInfo),null==(a=this.profiler)||a.popContext(`[${this.id}] PROG : ${this.constructor.name}`)}setProfiler(t){this.profiler=t}}const a3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\nuniform sampler2D mask;\n\nvec4 loop();\n\nvoid main() { gl_FragColor = loop(); }\n",d3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class h3 extends Wr{getDefines(){var t;return{RADIUS:null!=(t=this.options.radius)?t:1}}getFragmentShader(){return a3+this.createLoopFunction()}getVertexShader(){return d3}createLoopFunction(){var t;let e=null!=(t=this.options.radius)?t:1;return`\n\n vec4 loop() { \n vec4 result = vec4(0,0,0,0);\n float factorSum = 0.;\n\n vec2 normalizedRadius = vec2(-${e}.) / canvas;\n vec2 normalizedIncrement = vec2(1.) / canvas;\n vec2 diff = normalizedRadius;\n float maxLength = length(normalizedRadius);\n\n for(int y=-${e}; y<${e+1}; ++y) {\n for(int x=-${e}; x<${e+1}; ++x) {\n float factor = (1.- texture2D(mask, _texture_coord + diff).a) * (maxLength - length(diff)) / maxLength;\n result += factor * texture2D(texture, _texture_coord + diff);\n factorSum += factor;\n diff.x += normalizedIncrement.x;\n }\n diff.y += normalizedIncrement.y;\n diff.x = normalizedRadius.x;\n }\n return result / factorSum;\n }`}}const f3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform sampler2D background;\nuniform sampler2D foreground;\nuniform sampler2D threshold;\n\nvoid main() {\n vec4 backgroundColor = texture2D(background, _texture_coord);\n vec4 foregroundColor = texture2D(foreground, _texture_coord);\n vec4 tresholdColor = texture2D(threshold, _texture_coord);\n gl_FragColor = foregroundColor * tresholdColor.a +\n backgroundColor * (1. - tresholdColor.a);\n}\n",m3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n _texture_coord.y = 1. - texture_coord.y;\n}\n";class _o extends Wr{getFragmentShader(){return f3}getVertexShader(){return m3}}class Qo{constructor(){Rt(this,"steps",[]),Rt(this,"profiler")}addStep(t){this.steps.push(t)}async run(){for(const t of this.steps)t.program.run(t.getUniforms())}resizeOutput(t,e){var n,r;null==(n=this.profiler)||n.pushContext(`PIP [${this.constructor.name}]`);for(const n of this.steps)n.preventResize||n.program.resizeOutput(t,e);null==(r=this.profiler)||r.popContext(`PIP [${this.constructor.name}]`)}setProfiler(t){this.profiler=t;for(const e of this.steps)e.program.setProfiler(t)}setId(t){for(const e of this.steps)e.program.id=t}}class Do extends Qo{constructor(){super(...arguments),Rt(this,"preciseMaskEnabled",!1)}}const p3=10,b3=2,y3=8;class g3 extends Do{constructor(t,e){super(),Rt(this,"inputImage"),Rt(this,"inputMask"),Rt(this,"blur"),this.context=t,this.radius=e;const n={context:t,height:t.canvas.height,width:t.canvas.width};this.blur=new h3({...n,radius:e,...this.getBlurTextureSize(t.canvas.width,t.canvas.height)});const r=new _o({...n,disableFramebuffer:!0});this.addStep({program:this.blur,preventResize:!0,getUniforms:()=>({texture:bn(t,this.inputImage),mask:bn(t,this.inputMask)})}),this.addStep({program:r,getUniforms:()=>({background:bn(t,this.blur.output),foreground:bn(t,this.inputImage),threshold:bn(t,this.inputMask)})})}getBlurTextureSize(t,e){const n=this.radius>10?8:2;return{width:Math.max(2,t/n),height:Math.max(2,e/n)}}setData(t,e){this.inputImage=t,this.inputMask=e}resizeOutput(t,e){super.resizeOutput(t,e);const n=this.getBlurTextureSize(t,e);this.blur.resizeOutput(n.width,n.height)}}class lu extends Do{constructor(t){super(),Rt(this,"inputImage"),Rt(this,"inputBackgroundImage"),Rt(this,"inputMask"),Rt(this,"preciseMaskEnabled",!0),this.context=t;const e={context:t,height:t.canvas.height,width:t.canvas.width},n=new _o({...e,disableFramebuffer:!0});this.addStep({program:n,getUniforms:()=>({background:bn(t,this.inputBackgroundImage),foreground:bn(t,this.inputImage),threshold:bn(t,this.inputMask)})})}setData(t,e){this.inputImage=t,this.inputMask=e}}class Z3 extends lu{constructor(){super(...arguments),Rt(this,"frameReader"),Rt(this,"preciseMaskEnabled",!0)}set inputVideo(t){this.frameReader=t.getReader(),this.readNextVideoFrame()}async run(){this.frameReader&&(await super.run(),this.readNextVideoFrame())}async readNextVideoFrame(){var t;const e=await(null==(t=this.frameReader)?void 0:t.read());null!=e&&e.value&&(this.inputBackgroundImage=await createImageBitmap(e.value),e.value.close())}}const v3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\n\nvec4 loop();\n\nvoid main() { gl_FragColor = loop(); }\n",G3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";var $o=(t=>(t[t.LINEAR=0]="LINEAR",t[t.GAUSSIAN=1]="GAUSSIAN",t))($o||{});class uu extends Wr{getDefines(){var t;return{RADIUS:null!=(t=this.options.radius)?t:1}}getFragmentShader(){return v3+this.createLoopFunction()}getVertexShader(){return G3}createLoopFunction(){var t;let e=null!=(t=this.options.radius)?t:1;return`\n\n vec4 loop() { \n vec4 result = vec4(0,0,0,0);\n float factorSum = 0.;\n\n vec2 normalizedRadius = vec2(-${e}.) / canvas;\n vec2 normalizedIncrement = vec2(1.) / canvas;\n vec2 diff = normalizedRadius;\n\n for(int y=-${e}; y<${e+1}; ++y) {\n for(int x=-${e}; x<${e+1}; ++x) {\n float factor = 1.;\n result += factor * texture2D(texture, _texture_coord + diff);\n factorSum += factor;\n diff.x += normalizedIncrement.x;\n }\n diff.y += normalizedIncrement.y;\n diff.x = normalizedRadius.x;\n }\n return result / factorSum;\n }`}getFactor(t,e){return this.options.type,this.getLinearFactor(t,e)}getLinearFactor(t,e){return 1}getGaussianFactor(t,e){var n;const r=1/(2*Math.PI*Math.max(null!=(n=this.options.radius)?n:1,1)**2),i=r*-(t**2+e**2);return r*Math.E**i}}class X3 extends Do{constructor(t,e){super(),Rt(this,"inputImage"),Rt(this,"inputMask"),this.context=t;const n={context:t,height:t.canvas.height,width:t.canvas.width},r=new uu({...n,radius:e,type:$o.GAUSSIAN}),i=new _o({...n,disableFramebuffer:!0});this.addStep({program:r,getUniforms:()=>({texture:bn(t,this.inputImage)})}),this.addStep({program:i,getUniforms:()=>({background:bn(t,this.inputImage),foreground:bn(t,r.output),threshold:bn(t,this.inputMask)})})}setData(t,e){this.inputImage=t,this.inputMask=e}}class qo extends Wr{constructor(t){super(t),Rt(this,"fbi2"),this.fbi2=Yi(t.context,[{format:t.context.RGBA,type:t.context.UNSIGNED_BYTE,min:t.context.LINEAR,mag:t.context.LINEAR,wrap:t.context.CLAMP_TO_EDGE}],t.width,t.height)}run(t){const e=this.fbi;this.fbi=this.fbi2,this.fbi2=e,this.output=this.fbi.attachments[0],super.run({...t,previous_rendering:this.fbi2.attachments[0]})}resizeOutput(t,e){super.resizeOutput(t,e),this.fbi2=Yi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],t,e)}}const V3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\n// uniform float treshold;\nuniform sampler2D image_now;\nuniform sampler2D image_before;\nuniform sampler2D mask_now;\nuniform sampler2D mask_before;\nuniform sampler2D previous_rendering;\nuniform vec2 canvas;\n\nuniform float delta;\n\nfloat current_factor = 0.69;\nfloat previous_factor = 0.74;\nfloat threshold_activation = 0.54;\n\nfloat map(float value, float min1, float max1, float min2, float max2) {\n return min2 + (value - min1) * (max2 - min2) / (max1 - min1);\n}\n\nfloat getThreshold() {\n vec4 color = vec4(0.);\n for (float y = -6.; y < 7.; y += 1.) {\n for (float x = -6.; x < 7.; x += 1.) {\n vec4 image_now_color =\n texture2D(image_now, _texture_coord + vec2(x, y) / canvas);\n vec4 image_before_color =\n texture2D(image_before, _texture_coord + vec2(x, y) / canvas);\n color += abs(image_before_color - image_now_color);\n }\n }\n return (color.x + color.y + color.z) / (3. * 9.);\n}\n\nvoid main() {\n float treshold_input = .4;\n float treshold_previous_rendering = .98;\n\n vec4 mask_now_color = texture2D(mask_now, _texture_coord);\n vec4 mask_before_color = texture2D(mask_before, _texture_coord);\n vec4 previous_rendering_color = texture2D(previous_rendering, _texture_coord);\n\n vec3 mask_diff = abs(mask_before_color.xyz - mask_now_color.xyz);\n float flickering = mask_diff.x;\n float threshold = getThreshold();\n if (threshold < threshold_activation) {\n gl_FragColor = vec4(flickering, 0., 0., 1.) * current_factor +\n previous_rendering_color * previous_factor;\n gl_FragColor *= (1. - threshold);\n }\n}\n",W3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class R3 extends qo{getFragmentShader(){return V3}getVertexShader(){return W3}}const x3="#version 300 es\n// https://github.com/Volcomix/virtual-background/blob/main/src/pipelines/webgl2/jointBilateralFilterStage.ts\n\nprecision highp float;\nuniform sampler2D input_frame;\nuniform sampler2D segmentation_mask;\nuniform sampler2D threshold;\nuniform vec2 texel_size;\nuniform float step;\nuniform float radius;\nuniform float offset;\nuniform float sigma_texel;\nuniform float sigma_color;\n\nin vec2 _texture_coord;\nout vec4 outColor;\n\nfloat gaussian(float x, float sigma) {\n float coeff = -0.5 / (sigma * sigma * 4.0 + 1.0e-6);\n return exp((x * x) * coeff);\n}\n\nvoid main() {\n vec2 centerCoord = _texture_coord;\n vec3 centerColor = texture(input_frame, centerCoord).rgb;\n float newVal = 0.0;\n float spaceWeight = 0.0;\n float colorWeight = 0.0;\n float totalWeight = 0.0;\n // Subsample kernel space.\n for (float i = -radius + offset; i <= radius; i += step) {\n for (float j = -radius + offset; j <= radius; j += step) {\n vec2 shift = vec2(j, i) * texel_size;\n vec2 coord = vec2(centerCoord + shift);\n vec3 frameColor = texture(input_frame, coord).rgb;\n float threshold = texture(threshold, coord).a;\n float outVal = texture(segmentation_mask, coord).a;\n\n spaceWeight = gaussian(distance(centerCoord, coord), sigma_texel);\n colorWeight = gaussian(distance(centerColor, frameColor), sigma_color);\n totalWeight += spaceWeight * colorWeight;\n newVal += spaceWeight * colorWeight * outVal * threshold;\n }\n }\n newVal /= totalWeight;\n outColor = vec4(vec3(0.), newVal);\n}",I3="#version 300 es\nin vec2 position;\nin vec2 texture_coord;\nout vec2 _texture_coord;\nvoid main() {\n gl_Position = vec4(position, 0.0, 1.0);\n _texture_coord = texture_coord;\n}";class S3 extends Wr{getFragmentShader(){return x3}getVertexShader(){return I3}}const Y3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\n\nvoid main() {\n int count = 0;\n for (float y = -1.; y < 2.; y += 1.) {\n for (float x = -1.; x < 2.; x += 1.) {\n vec2 coord = _texture_coord + vec2(y, x) / canvas;\n vec4 color = texture2D(texture, coord);\n if (color.r > .1) {\n count++;\n }\n }\n }\n if (count > 5) {\n gl_FragColor = texture2D(texture, _texture_coord);\n }\n}\n",T3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class w3 extends Wr{getFragmentShader(){return Y3}getVertexShader(){return T3}}const L3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\n\nvoid main() {\n vec4 color = texture2D(texture, _texture_coord);\n for (float y = -2.; y < 3.; y += 1.) {\n for (float x = -2.; x < 3.; x += 1.) {\n vec2 coord = _texture_coord;\n coord += vec2(y, x) / canvas;\n color += texture2D(texture, coord) * (1. / 4.);\n }\n }\n\n gl_FragColor = color;\n}\n",F3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class H3 extends qo{getFragmentShader(){return L3}getVertexShader(){return F3}}const C3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform sampler2D threshold;\nuniform sampler2D inputs;\n\nvoid main() {\n vec4 inputs_color = texture2D(inputs, _texture_coord);\n vec4 threshold_color = texture2D(threshold, _texture_coord);\n if (threshold_color.r < .1 && inputs_color.r > .5) {\n gl_FragColor = inputs_color;\n }\n}\n",N3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class J3 extends qo{getFragmentShader(){return C3}getVertexShader(){return N3}}class k3 extends Qo{constructor(t,e,n){super(),Rt(this,"inputImage"),Rt(this,"inputMask"),Rt(this,"previousInputImage"),Rt(this,"previousInputMask"),Rt(this,"output"),Rt(this,"options",{currentThresholdMinimum:0,currentThresholdMaximum:1,previousThresholdMinimum:0,previousThresholdMaximum:1,thresholdMinimum:0,thresholdMaximum:1,thresholdFactor:1}),this.context=t;const r={context:t,height:n,width:e},i=new R3(r),o=new uu({...r,radius:1,type:$o.GAUSSIAN}),a=new J3(r),l=new H3(r),s=new w3(r),c=new S3({...r});let u=1;u*=Math.max(2.5,480/144);const d=Math.max(1,.66*Math.sqrt(u)),h=1/640,m=1/480;this.addStep({program:i,getUniforms:()=>({image_now:bn(t,this.inputImage),image_before:bn(t,this.previousInputImage),mask_now:bn(t,this.inputMask),mask_before:bn(t,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:a,getUniforms:()=>({inputs:bn(t,this.inputMask),threshold:bn(t,i.output)})}),this.addStep({program:s,getUniforms:()=>({texture:bn(t,a.output)})}),this.addStep({program:l,getUniforms:()=>({texture:bn(t,s.output)})}),this.addStep({program:o,getUniforms:()=>({texture:bn(t,l.output)})}),this.addStep({program:c,getUniforms:()=>({input_frame:bn(t,this.inputImage),segmentation_mask:bn(t,this.inputMask),threshold:bn(t,o.output),texel_size:[h,m],step:d,radius:u,offset:d>1?.5*d:0,sigma_texel:Math.max(h,m)*u,sigma_color:.1})}),this.output=c.output}setData(t,e){this.previousInputImage=this.inputImage?this.inputImage:t,this.previousInputMask=this.inputMask?this.inputMask:e,this.inputImage=t,this.inputMask=e}setOptions(t){this.options=t}}const E3="precision mediump float;\n\nvarying vec2 _texture_coord;\nuniform sampler2D texture;\n\nvoid main() { gl_FragColor = texture2D(texture, _texture_coord); }\n",K3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\nuniform bool invert_y;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n if (invert_y) {\n _texture_coord.y = 1. - texture_coord.y;\n }\n}\n";class U3 extends Wr{getFragmentShader(){return E3}getVertexShader(){return K3}}class M3 extends Qo{constructor(t,e,n){super(),Rt(this,"inputImage"),this.context=t;const r={context:t,height:n,width:e};this.addStep({program:new U3({...r,disableFramebuffer:!0}),getUniforms:()=>({texture:bn(t,this.inputImage),invert_y:!0})})}setData(t){this.inputImage=t}}class B3{constructor(t){Rt(this,"resize"),Rt(this,"canvas"),Rt(this,"context"),this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("webgl2"),this.canvas.width=t.width,this.canvas.height=t.height,this.resize=new M3(this.context,t.width,t.height)}resizeForeground(t,e){this.canvas.width=t,this.canvas.height=e,this.resize.resizeOutput(t,e)}async process(t){var e,n;return this.canvas.width=this.canvas.width,null==(e=this.resize)||e.setData(t),null==(n=this.resize)||n.run(),this.canvas}}class A3{constructor(t,e){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=t,this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("webgl2"),this.canvas.width=e.foregroundWidth,this.canvas.height=e.foregroundHeight,this.improveMaskSegmentation=new k3(this.context,e.maskWidth,e.maskHeight),this.backgroundImage=new lu(this.context),this.backgroundVideo=new Z3(this.context),this.backgroundResizer=new B3({width:e.foregroundWidth,height:e.foregroundHeight})}setBackgroundOptions(t){switch(t.transformerType){case"BackgroundBlur":this.activePipeline=new g3(this.context,this.getBlurSize(t.radius));break;case"SilhouetteBlur":this.activePipeline=new X3(this.context,this.getBlurSize(t.radius));break;case"VideoBackground":this.activePipeline=this.backgroundVideo;break;case"VirtualBackground":this.activePipeline=this.backgroundImage}this.options=t}setFlickeringOptions(t){var e;null==(e=this.improveMaskSegmentation)||e.setOptions(t)}setVideoBGReadable(t){this.backgroundVideo.inputVideo=t}async setVirtualBGImage(t){this.virtualBGImage=t,this.backgroundImage.inputBackgroundImage=await this.backgroundResizer.process(t)}async process(t,e){var n,r,i,o,a,l,s;if(this.activePipeline&&t.width&&(null==e?void 0:e.width)){const c=`[${this.id}] background-filter`;null==(n=this.profiler)||n.pushContext(c);let u=e;((null==(r=this.options)?void 0:r.selfieSegmentationType)&&"PRECISE"===(null==(i=this.options)?void 0:i.selfieSegmentationType)||!(null!=(o=this.options)&&o.selfieSegmentationType)&&this.activePipeline.preciseMaskEnabled)&&(this.improveMaskSegmentation.setId(this.id),this.improveMaskSegmentation.setProfiler(this.profiler),this.improveMaskSegmentation.setData(t,e),this.improveMaskSegmentation.run(),u=this.improveMaskSegmentation.output),this.activePipeline.setId(this.id),this.activePipeline.setProfiler(this.profiler),null==(a=this.activePipeline)||a.setData(t,u),null==(l=this.activePipeline)||l.run(),null==(s=this.profiler)||s.popContext(c)}}async resizeForeground(t,e){var n;this.canvas.width=t,this.canvas.height=e,this.backgroundImage.resizeOutput(t,e),this.backgroundVideo.resizeOutput(t,e),this.backgroundResizer.resizeForeground(t,e),null==(n=this.activePipeline)||n.resizeOutput(t,e),this.virtualBGImage&&(this.backgroundImage.inputBackgroundImage=await this.backgroundResizer.process(this.virtualBGImage))}async profile(t){const e=new u2(this.context);return this.profiler=e,e.start(),await il(t),this.profiler=void 0,e.stop(),e.getResolvedQueries()}getBlurSize(t=ai.Low){switch(t){case ai.Low:return 5;case ai.High:return 12}return t}}class j3{constructor(){Rt(this,"selfieSegmentation",new qs),Rt(this,"backgroundFilter"),Rt(this,"previousDimensions",{width:0,height:0})}async init(t,e){await this.selfieSegmentation.init(e.wasmAssetUriPath,e.tfliteAssetUriPath);const{width:n,height:r}=this.selfieSegmentation.getOutputDimensions();this.backgroundFilter=new A3(t,{foregroundWidth:1,foregroundHeight:1,maskWidth:n,maskHeight:r})}async transform(t,e){var n,r,i,o;const a=null!=(n=t.timestamp)?n:0,l=await createImageBitmap(t),s=await this.selfieSegmentation.process(l);s?((l.width!==this.previousDimensions.width||l.height!==this.previousDimensions.height)&&(this.previousDimensions.width=l.width,this.previousDimensions.height=l.height,await(null==(r=this.backgroundFilter)?void 0:r.resizeForeground(l.width,l.height))),await(null==(i=this.backgroundFilter)?void 0:i.process(l,s)),t.close(),e.enqueue(new VideoFrame(null==(o=this.backgroundFilter)?void 0:o.canvas,{timestamp:a,alpha:"discard"}))):e.enqueue(t)}async setBackgroundOptions(t){var e;await(null==(e=this.backgroundFilter)?void 0:e.setBackgroundOptions(t))}async setVideoBGReadable(t){var e;await(null==(e=this.backgroundFilter)?void 0:e.setVideoBGReadable(t))}async setVirtualBGImage(t){var e;await(null==(e=this.backgroundFilter)?void 0:e.setVirtualBGImage(t))}setFlickeringOptions(t){var e;null==(e=this.backgroundFilter)||e.setFlickeringOptions(t)}async profile(t){var e,n;return null!=(n=null==(e=this.backgroundFilter)?void 0:e.profile(t))?n:[]}}const ts=class{constructor(){Rt(this,"backgroundTransformer",new j3),Rt(this,"mediaProcessor",new Uc),Rt(this,"rate",30),Rt(this,"resolveOnMediaProcessor"),Rt(this,"eventsQueue",[])}async init(t,e){await this.backgroundTransformer.init(t,e),await this.mediaProcessor.setTransformers([this.backgroundTransformer]),this.mediaProcessor.setTrackExpectedRate(this.rate),this.mediaProcessor.onAny(((t,e)=>{this.resolveOnMediaProcessor?(this.resolveOnMediaProcessor({name:t,data:e}),this.resolveOnMediaProcessor=void 0):this.eventsQueue.push({name:t,data:e})}))}async onMediaProcessorEvent(){return await new Promise((t=>{this.eventsQueue.length>0?t(this.eventsQueue.shift()):this.resolveOnMediaProcessor=t}))}async setTrackExpectedRate(t){this.rate=t,this.mediaProcessor.setTrackExpectedRate(t)}async transform(t,e){this.mediaProcessor.transform(t,e)}async setBackgroundOptions(t){var e;await(null==(e=this.backgroundTransformer)?void 0:e.setBackgroundOptions(t))}setVideoBGReadable(t){this.backgroundTransformer.setVideoBGReadable(t)}async setVirtualBGImage(t){await this.backgroundTransformer.setVirtualBGImage(t)}async terminate(){await this.mediaProcessor.destroy()}setFlickeringOptions(t){this.backgroundTransformer.setFlickeringOptions(t)}setVonageMetadata(t){Rc(t)}async profile(t){return JSON.stringify(await this.backgroundTransformer.profile(t))}};let vo=ts;i2("ProcessorWorker",ts);const cu="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",Js=typeof window<"u"&&window.Blob&&new Blob([atob(cu)],{type:"text/javascript;charset=utf-8"});function z3(){const t=Js&&(window.URL||window.webkitURL).createObjectURL(Js);try{return t?new Worker(t):new Worker("data:application/javascript;base64,"+cu)}finally{t&&(window.URL||window.webkitURL).revokeObjectURL(t)}}const es=class extends tl{constructor(){super(...arguments),Rt(this,"rate",30),Rt(this,"worker")}async init(t){this.worker=await n2(vo,z3),await this.worker.init("worker_"+es.initCount++,t),await this.worker.setVonageMetadata(Ds()),await this.setBackgroundOptions(t),this.listenWorker()}async setTrackExpectedRate(t){var e;await(null==(e=this.worker)?void 0:e.setTrackExpectedRate(t))}async setBackgroundOptions(t){var e,n,r;const{transformerType:i}=t;switch(i){case"VideoBackground":await(null==(e=this.worker)?void 0:e.setVideoBGReadable(await Xs.createVideoReadable(t.backgroundAssetUri)));break;case"VirtualBackground":await(null==(n=this.worker)?void 0:n.setVirtualBGImage(await Xs.createImageCanvas(t.backgroundAssetUri)))}await(null==(r=this.worker)?void 0:r.setBackgroundOptions(t))}async transform(t,e){var n;await(null==(n=this.worker)?void 0:n.transform(t,e))}async destroy(){var t;await(null==(t=this.worker)?void 0:t.terminate())}async setFlickeringOptions(t){var e;await(null==(e=this.worker)?void 0:e.setFlickeringOptions(t))}async profile(t){var e;const n=await(null==(e=this.worker)?void 0:e.profile(t));return JSON.parse(null!=n?n:"[]")}async listenWorker(){for(var t,e,n;null!=(t=this.worker)&&t.worker;){const{name:t,data:r}=await(null==(e=this.worker)?void 0:e.onMediaProcessorEvent());switch(t){case"error":case"warn":this.emit(t,r);break;case"pipelineInfo":switch(this.emit(t,r),r){case"pipeline_ended":case"pipeline_ended_with_error":return void await(null==(n=this.worker)?void 0:n.terminate())}}}}};let hi=es;Rt(hi,"initCount",0);class O3{constructor(t){this.queries=t}async downloadSpeedscope(){this.download(await this.convertToSpeedscope())}download(t){const e=document.createElement("a");e.href=URL.createObjectURL(new Blob([t],{type:"application/json"})),e.download=`profile-${+new Date}.speedscope.json`,document.body.appendChild(e),e.click(),document.body.removeChild(e)}convertToSpeedscope(){const t=[],e={},n=[];let r=0;for(const i of this.queries){const o=[];for(const n of i)void 0===e[n.name]&&(e[n.name]=t.length,t.push({name:n.name})),o.push({type:n.action==ol.PUSH?"O":"C",frame:e[n.name],at:n.timestamp}),r=Math.max(r,n.timestamp+n.duration);n.push({events:o,type:"evented",name:"GPU Profile",unit:"nanoseconds",startValue:0,endValue:r})}const i={$schema:"https://www.speedscope.app/file-format-schema.json",shared:{frames:t},profiles:n};return JSON.stringify(i,null,2)}}class au extends tl{constructor(){super(),Rt(this,"worker",new hi),Rt(this,"connector",new Bc(this.worker))}async init(t){await this.worker.init(t),this.worker.onAny(((t,e)=>this.emit(t,e)))}async setBackgroundOptions(t){await this.worker.setBackgroundOptions(t)}setTrackExpectedRate(t){this.worker.setTrackExpectedRate(t)}getConnector(){return this.connector}async profile(t){return this.worker.profile(t)}static async profile(t){const e=await Promise.all(this.instances.map((e=>e.profile(t))));return new O3(e)}static async create(t){const e=new this;return await e.init(t),this.instances.push(e),e}}function D3(){return pi}function $3(){return bi}function q3(){return yi}function td(){return gi}function ed(){return Zi}function nd(){return vi}function rd(){return Gi}Rt(au,"instances",[]);var P3=(t=>(t.FAST="FAST",t.PRECISE="PRECISE",t))(P3||{});async function id(t){return await au.create(t)}export{j3 as BackgroundTransformer,ai as BlurRadius,Nc as ErrorFunction,qi as MediapipeHelper,uo as PipelineInfoData,P3 as SelfieSegmentationType,au as VonageMediaProcessor,Cc as WarningType,id as createVonageMediaProcessor,Qc as getSupportedBrowserFeatures,td as getVonageFaceDetection,ed as getVonageFaceMash,$3 as getVonageHands,q3 as getVonageHolistic,nd as getVonageObjectron,rd as getVonagePose,D3 as getVonageSelfieSegmentation,Q3 as isSupported};