@vonage/ml-transformers 4.0.1 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/docs/assets/search.js +1 -1
  2. package/dist/docs/classes/BackgroundTransformer.html +1 -0
  3. package/dist/docs/classes/MediapipeHelper.html +1 -1
  4. package/dist/docs/classes/VonageMediaProcessor.html +1 -1
  5. package/dist/docs/enums/BlurRadius.html +1 -1
  6. package/dist/docs/enums/ErrorFunction.html +1 -1
  7. package/dist/docs/enums/PipelineInfoData.html +1 -1
  8. package/dist/docs/enums/SelfieSegmentationType.html +1 -1
  9. package/dist/docs/enums/WarningType.html +1 -1
  10. package/dist/docs/index.html +1 -1
  11. package/dist/docs/interfaces/FaceDetectionOptions.html +1 -1
  12. package/dist/docs/interfaces/FaceDetectionResults.html +1 -1
  13. package/dist/docs/interfaces/FaceMeshOptions.html +1 -1
  14. package/dist/docs/interfaces/FaceMeshResults.html +1 -1
  15. package/dist/docs/interfaces/FeatureSupport.html +7 -0
  16. package/dist/docs/interfaces/HandsOptions.html +1 -1
  17. package/dist/docs/interfaces/HandsResults.html +1 -1
  18. package/dist/docs/interfaces/HolisticOptions.html +1 -1
  19. package/dist/docs/interfaces/HolisticResults.html +1 -1
  20. package/dist/docs/interfaces/ObjectronOptions.html +1 -1
  21. package/dist/docs/interfaces/ObjectronResults.html +1 -1
  22. package/dist/docs/interfaces/PoseOptions.html +1 -1
  23. package/dist/docs/interfaces/PoseResults.html +1 -1
  24. package/dist/docs/interfaces/SelfieSegmentationOptions.html +1 -1
  25. package/dist/docs/interfaces/SelfieSegmentationResults.html +1 -1
  26. package/dist/docs/interfaces/SupportedBrowserFeatures.html +11 -0
  27. package/dist/docs/modules.html +8 -5
  28. package/dist/ml-transformers.es.js +20573 -20543
  29. package/dist/ml-transformers.min.js +4 -0
  30. package/dist/ml-transformers.static.js +29539 -0
  31. package/dist/ml-transformers.umd.js +50 -50
  32. package/dist/types/main.d.ts +5 -4
  33. package/dist/types/src/types.d.ts +34 -0
  34. package/dist/types/src/utils/support.d.ts +9 -3
  35. package/dist/types/src/wasm/selfie-segmentation/loader.d.ts +1 -0
  36. package/dist/types/src/wasm/selfie-segmentation/wrapper.d.ts +2 -0
  37. package/package.json +4 -2
@@ -0,0 +1,4 @@
1
+ function isSupported$1(){return new Promise(((t,e)=>{"undefined"==typeof MediaStreamTrackProcessor||"undefined"==typeof MediaStreamTrackGenerator?e("Your browser does not support the MediaStreamTrack API for Insertable Streams of Media."):t()}))}class Key{}Key.updates={transformer_new:"New transformer",transformer_null:"Null transformer"},Key.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 axios$2={exports:{}},bind$2=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)}},bind$1=bind$2,toString=Object.prototype.toString;function isArray(t){return Array.isArray(t)}function isUndefined(t){return void 0===t}function isBuffer$1(t){return null!==t&&!isUndefined(t)&&null!==t.constructor&&!isUndefined(t.constructor)&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}function isArrayBuffer$2(t){return"[object ArrayBuffer]"===toString.call(t)}function isFormData(t){return"[object FormData]"===toString.call(t)}function isArrayBufferView(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&isArrayBuffer$2(t.buffer)}function isString(t){return"string"==typeof t}function isNumber(t){return"number"==typeof t}function isObject(t){return null!==t&&"object"==typeof t}function isPlainObject(t){if("[object Object]"!==toString.call(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype}function isDate(t){return"[object Date]"===toString.call(t)}function isFile(t){return"[object File]"===toString.call(t)}function isBlob(t){return"[object Blob]"===toString.call(t)}function isFunction(t){return"[object Function]"===toString.call(t)}function isStream(t){return isObject(t)&&isFunction(t.pipe)}function isURLSearchParams(t){return"[object URLSearchParams]"===toString.call(t)}function trim(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function isStandardBrowserEnv(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)}function forEach(t,e){if(null!=t)if("object"!=typeof t&&(t=[t]),isArray(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 merge(){var t={};function e(e,n){isPlainObject(t[n])&&isPlainObject(e)?t[n]=merge(t[n],e):isPlainObject(e)?t[n]=merge({},e):isArray(e)?t[n]=e.slice():t[n]=e}for(var n=0,r=arguments.length;n<r;n++)forEach(arguments[n],e);return t}function extend(t,e,n){return forEach(e,(function(e,r){t[r]=n&&"function"==typeof e?bind$1(e,n):e})),t}function stripBOM(t){return 65279===t.charCodeAt(0)&&(t=t.slice(1)),t}var utils$e={isArray:isArray,isArrayBuffer:isArrayBuffer$2,isBuffer:isBuffer$1,isFormData:isFormData,isArrayBufferView:isArrayBufferView,isString:isString,isNumber:isNumber,isObject:isObject,isPlainObject:isPlainObject,isUndefined:isUndefined,isDate:isDate,isFile:isFile,isBlob:isBlob,isFunction:isFunction,isStream:isStream,isURLSearchParams:isURLSearchParams,isStandardBrowserEnv:isStandardBrowserEnv,forEach:forEach,merge:merge,extend:extend,trim:trim,stripBOM:stripBOM},utils$d=utils$e;function encode(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var buildURL$2=function(t,e,n){if(!e)return t;var r;if(n)r=n(e);else if(utils$d.isURLSearchParams(e))r=e.toString();else{var i=[];utils$d.forEach(e,(function(t,e){null!=t&&(utils$d.isArray(t)?e+="[]":t=[t],utils$d.forEach(t,(function(t){utils$d.isDate(t)?t=t.toISOString():utils$d.isObject(t)&&(t=JSON.stringify(t)),i.push(encode(e)+"="+encode(t))})))})),r=i.join("&")}if(r){var o=t.indexOf("#");-1!==o&&(t=t.slice(0,o)),t+=(-1===t.indexOf("?")?"?":"&")+r}return t},utils$c=utils$e;function InterceptorManager$1(){this.handlers=[]}InterceptorManager$1.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},InterceptorManager$1.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},InterceptorManager$1.prototype.forEach=function(t){utils$c.forEach(this.handlers,(function(e){null!==e&&t(e)}))};var InterceptorManager_1=InterceptorManager$1,utils$b=utils$e,normalizeHeaderName$1=function(t,e){utils$b.forEach(t,(function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])}))},enhanceError$2=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},enhanceError$1=enhanceError$2,createError$2=function(t,e,n,r,i){var o=new Error(t);return enhanceError$1(o,e,n,r,i)},createError$1=createError$2,settle$1=function(t,e,n){var r=n.config.validateStatus;n.status&&r&&!r(n.status)?e(createError$1("Request failed with status code "+n.status,n.config,null,n.request,n)):t(n)},utils$a=utils$e,cookies$1=utils$a.isStandardBrowserEnv()?{write:function(t,e,n,r,i,o){var a=[];a.push(t+"="+encodeURIComponent(e)),utils$a.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),utils$a.isString(r)&&a.push("path="+r),utils$a.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(){}},isAbsoluteURL$1=function(t){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)},combineURLs$1=function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t},isAbsoluteURL2=isAbsoluteURL$1,combineURLs2=combineURLs$1,buildFullPath$1=function(t,e){return t&&!isAbsoluteURL2(e)?combineURLs2(t,e):e},utils$9=utils$e,ignoreDuplicateOf=["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"],parseHeaders$1=function(t){var e,n,r,i={};return t?(utils$9.forEach(t.split("\n"),(function(t){if(r=t.indexOf(":"),e=utils$9.trim(t.substr(0,r)).toLowerCase(),n=utils$9.trim(t.substr(r+1)),e){if(i[e]&&ignoreDuplicateOf.indexOf(e)>=0)return;i[e]="set-cookie"===e?(i[e]?i[e]:[]).concat([n]):i[e]?i[e]+", "+n:n}})),i):i},utils$8=utils$e,isURLSameOrigin$1=utils$8.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=utils$8.isString(e)?r(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return!0};function Cancel$3(t){this.message=t}Cancel$3.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},Cancel$3.prototype.__CANCEL__=!0;var Cancel_1=Cancel$3,utils$7=utils$e,settle2=settle$1,cookies=cookies$1,buildURL$1=buildURL$2,buildFullPath2=buildFullPath$1,parseHeaders2=parseHeaders$1,isURLSameOrigin=isURLSameOrigin$1,createError2=createError$2,defaults$4=defaults_1,Cancel$2=Cancel_1,xhr=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)}utils$7.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=buildFullPath2(t.baseURL,t.url);function h(){if(s){var r="getAllResponseHeaders"in s?parseHeaders2(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};settle2((function(t){e(t),l()}),(function(t){n(t),l()}),i),s=null}}if(s.open(t.method.toUpperCase(),buildURL$1(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(createError2("Request aborted",t,"ECONNABORTED",s)),s=null)},s.onerror=function(){n(createError2("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||defaults$4.transitional;t.timeoutErrorMessage&&(e=t.timeoutErrorMessage),n(createError2(e,t,r.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",s)),s=null},utils$7.isStandardBrowserEnv()){var m=(t.withCredentials||isURLSameOrigin(d))&&t.xsrfCookieName?cookies.read(t.xsrfCookieName):void 0;m&&(o[t.xsrfHeaderName]=m)}"setRequestHeader"in s&&utils$7.forEach(o,(function(t,e){void 0===i&&"content-type"===e.toLowerCase()?delete o[e]:s.setRequestHeader(e,t)})),utils$7.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 Cancel$2("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)}))},utils$6=utils$e,normalizeHeaderName2=normalizeHeaderName$1,enhanceError2=enhanceError$2,DEFAULT_CONTENT_TYPE={"Content-Type":"application/x-www-form-urlencoded"};function setContentTypeIfUnset(t,e){!utils$6.isUndefined(t)&&utils$6.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}function getDefaultAdapter(){var t;return("undefined"!=typeof XMLHttpRequest||"undefined"!=typeof process&&"[object process]"===Object.prototype.toString.call(process))&&(t=xhr),t}function stringifySafely(t,e,n){if(utils$6.isString(t))try{return(e||JSON.parse)(t),utils$6.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(n||JSON.stringify)(t)}var defaults$3={transitional:{silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},adapter:getDefaultAdapter(),transformRequest:[function(t,e){return normalizeHeaderName2(e,"Accept"),normalizeHeaderName2(e,"Content-Type"),utils$6.isFormData(t)||utils$6.isArrayBuffer(t)||utils$6.isBuffer(t)||utils$6.isStream(t)||utils$6.isFile(t)||utils$6.isBlob(t)?t:utils$6.isArrayBufferView(t)?t.buffer:utils$6.isURLSearchParams(t)?(setContentTypeIfUnset(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):utils$6.isObject(t)||e&&"application/json"===e["Content-Type"]?(setContentTypeIfUnset(e,"application/json"),stringifySafely(t)):t}],transformResponse:[function(t){var e=this.transitional||defaults$3.transitional,n=e&&e.silentJSONParsing,r=e&&e.forcedJSONParsing,i=!n&&"json"===this.responseType;if(i||r&&utils$6.isString(t)&&t.length)try{return JSON.parse(t)}catch(t){if(i){if("SyntaxError"===t.name)throw enhanceError2(t,this,"E_JSON_PARSE");throw 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, */*"}}};utils$6.forEach(["delete","get","head"],(function(t){defaults$3.headers[t]={}})),utils$6.forEach(["post","put","patch"],(function(t){defaults$3.headers[t]=utils$6.merge(DEFAULT_CONTENT_TYPE)}));var defaults_1=defaults$3,utils$5=utils$e,defaults$2=defaults_1,transformData$1=function(t,e,n){var r=this||defaults$2;return utils$5.forEach(n,(function(n){t=n.call(r,t,e)})),t},isCancel$1=function(t){return!(!t||!t.__CANCEL__)},utils$4=utils$e,transformData2=transformData$1,isCancel2=isCancel$1,defaults$1$1=defaults_1,Cancel$1=Cancel_1;function throwIfCancellationRequested(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new Cancel$1("canceled")}var dispatchRequest$1=function(t){return throwIfCancellationRequested(t),t.headers=t.headers||{},t.data=transformData2.call(t,t.data,t.headers,t.transformRequest),t.headers=utils$4.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),utils$4.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||defaults$1$1.adapter)(t).then((function(e){return throwIfCancellationRequested(t),e.data=transformData2.call(t,e.data,e.headers,t.transformResponse),e}),(function(e){return isCancel2(e)||(throwIfCancellationRequested(t),e&&e.response&&(e.response.data=transformData2.call(t,e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))},utils$3=utils$e,mergeConfig$2=function(t,e){e=e||{};var n={};function r(t,e){return utils$3.isPlainObject(t)&&utils$3.isPlainObject(e)?utils$3.merge(t,e):utils$3.isPlainObject(e)?utils$3.merge({},e):utils$3.isArray(e)?e.slice():e}function i(n){return utils$3.isUndefined(e[n])?utils$3.isUndefined(t[n])?void 0:r(void 0,t[n]):r(t[n],e[n])}function o(t){if(!utils$3.isUndefined(e[t]))return r(void 0,e[t])}function a(n){return utils$3.isUndefined(e[n])?utils$3.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 utils$3.forEach(Object.keys(t).concat(Object.keys(e)),(function(t){var e=s[t]||i,r=e(t);utils$3.isUndefined(r)&&e!==l||(n[t]=r)})),n},data={version:"0.25.0"},VERSION=data.version,validators$1={};["object","boolean","number","function","string","symbol"].forEach((function(t,e){validators$1[t]=function(n){return typeof n===t||"a"+(e<1?"n ":" ")+t}}));var deprecatedWarnings={};function assertOptions(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)}}validators$1.transitional=function(t,e,n){function r(t,e){return"[Axios v"+VERSION+"] 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&&!deprecatedWarnings[i]&&(deprecatedWarnings[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 validator$1={assertOptions:assertOptions,validators:validators$1},utils$2=utils$e,buildURL2=buildURL$2,InterceptorManager=InterceptorManager_1,dispatchRequest2=dispatchRequest$1,mergeConfig$1=mergeConfig$2,validator=validator$1,validators=validator.validators;function Axios$1(t){this.defaults=t,this.interceptors={request:new InterceptorManager,response:new InterceptorManager}}Axios$1.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=mergeConfig$1(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&&validator.assertOptions(n,{silentJSONParsing:validators.transitional(validators.boolean),forcedJSONParsing:validators.transitional(validators.boolean),clarifyTimeoutError:validators.transitional(validators.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=[dispatchRequest2,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=dispatchRequest2(s)}catch(t){return Promise.reject(t)}for(;a.length;)o=o.then(a.shift(),a.shift());return o},Axios$1.prototype.getUri=function(t){if(!t.url)throw new Error("Provided config url is not valid");return t=mergeConfig$1(this.defaults,t),buildURL2(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")},utils$2.forEach(["delete","get","head","options"],(function(t){Axios$1.prototype[t]=function(e,n){return this.request(mergeConfig$1(n||{},{method:t,url:e,data:(n||{}).data}))}})),utils$2.forEach(["post","put","patch"],(function(t){Axios$1.prototype[t]=function(e,n,r){return this.request(mergeConfig$1(r||{},{method:t,url:e,data:n}))}}));var Axios_1=Axios$1,Cancel=Cancel_1;function CancelToken(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 Cancel(t),e(n.reason))}))}CancelToken.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},CancelToken.prototype.subscribe=function(t){this.reason?t(this.reason):this._listeners?this._listeners.push(t):this._listeners=[t]},CancelToken.prototype.unsubscribe=function(t){if(this._listeners){var e=this._listeners.indexOf(t);-1!==e&&this._listeners.splice(e,1)}},CancelToken.source=function(){var t;return{token:new CancelToken((function(e){t=e})),cancel:t}};var CancelToken_1=CancelToken,spread=function(t){return function(e){return t.apply(null,e)}},utils$1=utils$e,isAxiosError=function(t){return utils$1.isObject(t)&&!0===t.isAxiosError},utils=utils$e,bind2=bind$2,Axios=Axios_1,mergeConfig2=mergeConfig$2,defaults$5=defaults_1;function createInstance(t){var e=new Axios(t),n=bind2(Axios.prototype.request,e);return utils.extend(n,Axios.prototype,e),utils.extend(n,e),n.create=function(e){return createInstance(mergeConfig2(t,e))},n}var axios$1=createInstance(defaults$5);axios$1.Axios=Axios,axios$1.Cancel=Cancel_1,axios$1.CancelToken=CancelToken_1,axios$1.isCancel=isCancel$1,axios$1.VERSION=data.version,axios$1.all=function(t){return Promise.all(t)},axios$1.spread=spread,axios$1.isAxiosError=isAxiosError,axios$2.exports=axios$1,axios$2.exports.default=axios$1;var axios=axios$2.exports;class Optional{isEmpty(){return!this.isPresent()}static of(t){if(null!=t)return new PresentOptional(t);throw new TypeError("The passed value was null or undefined.")}static ofNonNull(t){return Optional.of(t)}static ofNullable(t){return null!=t?new PresentOptional(t):new EmptyOptional}static empty(){return new EmptyOptional}static from(t){switch(t.kind){case"present":return Optional.of(t.value);case"empty":return Optional.empty();default:throw new TypeError("The passed value was not an Option type.")}}}class PresentOptional extends Optional{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:Optional.empty()}map(t){const e=t(this.payload);return Optional.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 EmptyOptional extends Optional{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 Optional.empty()}flatMap(t){return Optional.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 version="2.0.0";function setVonageMetadata(t){globalThis._vonageMediaProcessorMetadata=t}function getVonageMetadata(){return globalThis._vonageMediaProcessorMetadata}class ReportBuilder{constructor(){const t=getVonageMetadata();this._report={action:Optional.empty(),applicationId:Optional.ofNullable(void 0!==t&&null!=t?t.appId:null),timestamp:Date.now(),fps:Optional.empty(),framesTransformed:Optional.empty(),guid:Optional.empty(),highestFrameTransformCpu:Optional.empty(),message:Optional.empty(),source:Optional.ofNullable(void 0!==t&&null!=t?t.sourceType:null),transformedFps:Optional.empty(),transformerType:Optional.empty(),variation:Optional.empty(),videoHeight:Optional.empty(),videoWidth:Optional.empty(),version:"2.0.0",error:Optional.empty(),proxyUrl:Optional.ofNullable(void 0!==t&&null!=t?t.proxyUrl:null)}}action(t){return this._report.action=Optional.ofNullable(t),this}framesTransformed(t){return this._report.framesTransformed=Optional.ofNullable(t),this}fps(t){return this._report.fps=Optional.ofNullable(t),this}guid(t){return this._report.guid=Optional.ofNullable(t),this}message(t){return this._report.message=Optional.ofNullable(t),this}transformedFps(t){return this._report.transformedFps=Optional.ofNullable(t),this}transformerType(t){return this._report.transformerType=Optional.ofNullable(t),this}variation(t){return this._report.variation=Optional.ofNullable(t),this}videoHeight(t){return this._report.videoHeight=Optional.ofNullable(t),this}videoWidth(t){return this._report.videoWidth=Optional.ofNullable(t),this}error(t){return this._report.error=Optional.ofNullable(t),this}build(){return this._report}}const serializeReport=t=>JSON.stringify(t,((t,e)=>{if(null!==e)return e}));class Reporter{static report(t){return new Promise(((e,n)=>{if(t.applicationId.isEmpty()||t.source.isEmpty())return void e("success");let r=axios.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}r.post(i,serializeReport(t),{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 getRandomValues,rnds8=new Uint8Array(16);function rng(){if(!getRandomValues&&!(getRandomValues="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"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 getRandomValues(rnds8)}var REGEX=/^(?:[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 validate(t){return"string"==typeof t&&REGEX.test(t)}for(var byteToHex=[],i=0;i<256;++i)byteToHex.push((i+256).toString(16).substr(1));function stringify(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=(byteToHex[t[e+0]]+byteToHex[t[e+1]]+byteToHex[t[e+2]]+byteToHex[t[e+3]]+"-"+byteToHex[t[e+4]]+byteToHex[t[e+5]]+"-"+byteToHex[t[e+6]]+byteToHex[t[e+7]]+"-"+byteToHex[t[e+8]]+byteToHex[t[e+9]]+"-"+byteToHex[t[e+10]]+byteToHex[t[e+11]]+byteToHex[t[e+12]]+byteToHex[t[e+13]]+byteToHex[t[e+14]]+byteToHex[t[e+15]]).toLowerCase();if(!validate(n))throw TypeError("Stringified UUID is invalid");return n}function v4(t,e,n){var r=(t=t||{}).random||(t.rng||rng)();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 stringify(r)}const anyMap$1=new WeakMap,eventsMap$1=new WeakMap,producersMap$1=new WeakMap,anyProducer$1=Symbol("anyProducer"),resolvedPromise$1=Promise.resolve(),listenerAdded$1=Symbol("listenerAdded"),listenerRemoved$1=Symbol("listenerRemoved");let isGlobalDebugEnabled$1=!1;function assertEventName$1(t){if("string"!=typeof t&&"symbol"!=typeof t)throw new TypeError("eventName must be a string or a symbol")}function assertListener$1(t){if("function"!=typeof t)throw new TypeError("listener must be a function")}function getListeners$1(t,e){const n=eventsMap$1.get(t);return n.has(e)||n.set(e,new Set),n.get(e)}function getEventProducers$1(t,e){const n="string"==typeof e||"symbol"==typeof e?e:anyProducer$1,r=producersMap$1.get(t);return r.has(n)||r.set(n,new Set),r.get(n)}function enqueueProducers$1(t,e,n){const r=producersMap$1.get(t);if(r.has(e))for(const t of r.get(e))t.enqueue(n);if(r.has(anyProducer$1)){const t=Promise.all([e,n]);for(const e of r.get(anyProducer$1))e.enqueue(t)}}function iterator$1(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)getEventProducers$1(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)getEventProducers$1(t,n).delete(o);return r(),arguments.length>0?{done:!0,value:await n}:{done:!0}},[Symbol.asyncIterator](){return this}}}function defaultMethodNamesOrAssert$1(t){if(void 0===t)return allEmitteryMethods$1;if(!Array.isArray(t))throw new TypeError("`methodNames` must be an array of strings");for(const e of t)if(!allEmitteryMethods$1.includes(e)){if("string"!=typeof e)throw new TypeError("`methodNames` element must be a string");throw new Error(`${e} is not Emittery method`)}return t}const isListenerSymbol$1=t=>t===listenerAdded$1||t===listenerRemoved$1;class Emittery$1{static mixin(t,e){return e=defaultMethodNamesOrAssert$1(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 Emittery$1}),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 isGlobalDebugEnabled$1;const{env:t}=process||{env:{}};return"emittery"===t.DEBUG||"*"===t.DEBUG||isGlobalDebugEnabled$1}static set isDebugEnabled(t){isGlobalDebugEnabled$1=t}constructor(t={}){anyMap$1.set(this,new Set),eventsMap$1.set(this,new Map),producersMap$1.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){(Emittery$1.isDebugEnabled||this.debug.enabled)&&this.debug.logger(t,this.debug.name,e,n)}on(t,e){assertListener$1(e),t=Array.isArray(t)?t:[t];for(const n of t)assertEventName$1(n),getListeners$1(this,n).add(e),this.logIfDebugEnabled("subscribe",n,void 0),isListenerSymbol$1(n)||this.emit(listenerAdded$1,{eventName:n,listener:e});return this.off.bind(this,t,e)}off(t,e){assertListener$1(e),t=Array.isArray(t)?t:[t];for(const n of t)assertEventName$1(n),getListeners$1(this,n).delete(e),this.logIfDebugEnabled("unsubscribe",n,void 0),isListenerSymbol$1(n)||this.emit(listenerRemoved$1,{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)assertEventName$1(e);return iterator$1(this,t)}async emit(t,e){assertEventName$1(t),this.logIfDebugEnabled("emit",t,e),enqueueProducers$1(this,t,e);const n=getListeners$1(this,t),r=anyMap$1.get(this),i=[...n],o=isListenerSymbol$1(t)?[]:[...r];await resolvedPromise$1,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){assertEventName$1(t),this.logIfDebugEnabled("emitSerial",t,e);const n=getListeners$1(this,t),r=anyMap$1.get(this),i=[...n],o=[...r];await resolvedPromise$1;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 assertListener$1(t),this.logIfDebugEnabled("subscribeAny",void 0,void 0),anyMap$1.get(this).add(t),this.emit(listenerAdded$1,{listener:t}),this.offAny.bind(this,t)}anyEvent(){return iterator$1(this)}offAny(t){assertListener$1(t),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(listenerRemoved$1,{listener:t}),anyMap$1.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){getListeners$1(this,e).clear();const t=getEventProducers$1(this,e);for(const e of t)e.finish();t.clear()}else{anyMap$1.get(this).clear();for(const t of eventsMap$1.get(this).values())t.clear();for(const t of producersMap$1.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){void 0!==n&&assertEventName$1(n),e+=anyMap$1.get(this).size;for(const t of eventsMap$1.get(this).values())e+=t.size;for(const t of producersMap$1.get(this).values())e+=t.size}else e+=anyMap$1.get(this).size+getListeners$1(this,n).size+getEventProducers$1(this,n).size+getEventProducers$1(this).size;return e}bindMethods(t,e){if("object"!=typeof t||null===t)throw new TypeError("`target` must be an object");e=defaultMethodNamesOrAssert$1(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 allEmitteryMethods$1=Object.getOwnPropertyNames(Emittery$1.prototype).filter((t=>"constructor"!==t));Object.defineProperty(Emittery$1,"listenerAdded",{value:listenerAdded$1,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(Emittery$1,"listenerRemoved",{value:listenerRemoved$1,writable:!1,enumerable:!0,configurable:!1});var emittery$1=Emittery$1;function isErrorWithMessage(t){return"object"==typeof t&&null!==t&&"message"in t&&"string"==typeof t.message}function toErrorWithMessage(t){if(isErrorWithMessage(t))return t;try{return new Error(JSON.stringify(t))}catch{return new Error(String(t))}}function getErrorMessage(t){return toErrorWithMessage(t).message}var WarningType=(t=>(t.FPS_DROP="fps_drop",t))(WarningType||{}),ErrorFunction=(t=>(t.start="start",t.transform="transform",t.flush="flush",t))(ErrorFunction||{}),PipelineInfoData=(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))(PipelineInfoData||{});const TELEMETRY_MEDIA_TRANSFORMER_QOS_REPORT_INTERVAL=500,RATE_DROP_TO_PRECENT=.8;class InternalTransformer extends emittery$1{constructor(t,e){super(),this.index_=e,this.uuid_=v4(),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 ReportBuilder).action("MediaTransformer").guid(this.uuid_).transformerType(this.transformerType_).variation("Create").build();Reporter.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 ReportBuilder).action("MediaTransformer").guid(this.uuid_).message(Key.errors.transformer_start).transformerType(this.transformerType_).variation("Error").error(getErrorMessage(t)).build();Reporter.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_,500===this.framesTransformed_&&this.mediaTransformerQosReport()}catch(t){const e=(new ReportBuilder).action("MediaTransformer").guid(this.uuid_).message(Key.errors.transformer_transform).transformerType(this.transformerType_).variation("Error").error(getErrorMessage(t)).build();Reporter.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 ReportBuilder).action("MediaTransformer").guid(this.uuid_).message(Key.errors.transformer_flush).transformerType(this.transformerType_).variation("Error").error(getErrorMessage(t)).build();Reporter.report(e);const n={eventMetaData:{transformerIndex:this.index_},error:t,function:"flush"};this.emit("error",n)}}this.mediaTransformerQosReport();const e=(new ReportBuilder).action("MediaTransformer").guid(this.uuid_).transformerType(this.transformerType_).variation("Delete").build();Reporter.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_&&.8*this.trackExpectedRate_>e){const t={eventMetaData:{transformerIndex:this.index_},warningType:"fps_drop",dropInfo:{requested:this.trackExpectedRate_,current:e}};this.emit("warn",t)}const r=(new ReportBuilder).action("MediaTransformer").fps(e).transformedFps(n).framesTransformed(this.framesTransformed_).guid(this.uuid_).transformerType(this.transformerType_).videoHeight(this.videoHeight_).videoWidth(this.videoWidth_).variation("QoS").build();Reporter.report(r),this.mediaTransformerQosReportStartTimestamp_=0,this.framesFromSource_=0,this.framesTransformed_=0}}class Pipeline extends emittery$1{constructor(t){super(),this.transformers_=[],this.trackExpectedRate_=-1;for(let e=0;e<t.length;e++){let n=new InternalTransformer(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(t){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 MediaProcessor extends emittery$1{constructor(){super(),this.uuid_=v4(),this.trackExpectedRate_=-1;const t=(new ReportBuilder).action("MediaProcessor").guid(this.uuid_).variation("Create").build();Reporter.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 ReportBuilder).action("MediaProcessor").guid(this.uuid_).message(Key.errors.transformer_none).variation("Error").build();return Reporter.report(t),void e("[MediaProcessor] Need to set transformers.")}if(!this.readable_){const t=(new ReportBuilder).action("MediaProcessor").guid(this.uuid_).message(Key.errors.readable_null).variation("Error").build();return Reporter.report(t),void e("[MediaProcessor] Readable is null.")}if(!this.writable_){const t=(new ReportBuilder).action("MediaProcessor").guid(this.uuid_).message(Key.errors.writable_null).variation("Error").build();return Reporter.report(t),void e("[MediaProcessor] Writable is null.")}let n=!1;this.pipeline_&&(n=!0,this.pipeline_.clearListeners(),this.pipeline_.destroy()),this.pipeline_=new Pipeline(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=PipelineInfoData.pipeline_restarted:"pipeline_started_with_error"===t&&(t=PipelineInfoData.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 ReportBuilder).action("MediaProcessor").guid(this.uuid_).message(Key.updates.transformer_new).variation("Update").build();return Reporter.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 ReportBuilder).action("MediaProcessor").guid(this.uuid_).variation("Delete").build();Reporter.report(e),t()}))}}class InsertableStreamHelper{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 MediaProcessorConnector{constructor(t){this.insertableStreamHelper_=new InsertableStreamHelper,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 BlurRadius=(t=>(t.Low="Low",t.High="High",t))(BlurRadius||{});const simd=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 createVonageTFLiteSimdModule=function(){var t="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0;return function(e){var n,r,i=void 0!==(e=e||{})?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="";"undefined"!=typeof document&&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,f=i.noExitRuntime||!0;"object"!=typeof WebAssembly&&L("no native wasm support detected");var p,b,g,y,Z,v=!1,G="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function W(t,e,n){for(var r=e+n,i=e;t[i]&&!(i>=r);)++i;if(i-e>16&&t.subarray&&G)return G.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?W(g,t,e):""}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=[];var S=0,T=null;function L(t){i.onAbort&&i.onAbort(t),h(t="Aborted("+t+")"),v=!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 w,F,Y;function H(t){return t.startsWith("data:application/octet-stream;base64,")}function C(t){try{if(t==w&&u)return new Uint8Array(u);throw"both async and sync fetching of the wasm failed"}catch(t){L(t)}}function N(t){for(;t.length>0;){var e=t.shift();if("function"!=typeof e){var n=e.func;"number"==typeof n?void 0===e.arg?Z.get(n)():Z.get(n)(e.arg):n(void 0===e.arg?null:e.arg)}else e(i)}}H(w="tflite-simd.wasm")||(F=w,w=i.locateFile?i.locateFile(F,c):c+F),Y=function(){return performance.now()};function k(t){try{return m.grow(t-p.byteLength+65535>>>16),V(m.buffer),1}catch(t){}}var E={};function J(){if(!J.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 E)void 0===E[e]?delete t[e]:t[e]=E[e];var n=[];for(var e in t)n.push(e+"="+t[e]);J.strings=n}return J.strings}var U={mappings:{},buffers:[null,[],[]],printChar:function(t,e){var n=U.buffers[t];0===e||10===e?((1===t?d:h)(W(n,0)),n.length=0):n.push(e)},varargs:void 0,get:function(){return U.varargs+=4,y[U.varargs-4>>2]},getStr:function(t){return X(t)},get64:function(t,e){return t}};var A={a:function(t,e,n,r){L("Assertion failed: "+X(t)+", at: "+[e?X(e):"unknown filename",n,r?X(r):"unknown function"])},e:function(t,e){L("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")},d:function(t,e){L("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")},b:function(){L("")},n:function(t,e){var n,r;if(0===t)n=Date.now();else{if(1!==t&&4!==t)return r=28,y[M()>>2]=r,-1;n=Y()}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,n,r=g.length,i=2147483648;if((t>>>=0)>i)return!1;for(var o=1;o<=4;o*=2){var a=r*(1+.2/o);if(a=Math.min(a,t+100663296),k(Math.min(i,((e=Math.max(t,a))%(n=65536)>0&&(e+=n-e%n),e))))return!0}return!1},p:function(t){for(var e=Y();Y()-e<t;);},f:function(t,e){var n=0;return J().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=J();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){f||(i.onExit&&i.onExit(t),v=!0);s(t,new K(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++)U.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(){L("randomDevice")}}());for(var r=0;r<n;r++)b[e+r>>0]=t.randomDevice();return 0}};!function(){var t={a:A};function e(t,e){var n,r=t.exports;i.asm=r,V((m=i.asm.q).buffer),Z=i.asm.E,n=i.asm.r,x.unshift(n),function(t){if(S--,i.monitorRunDependencies&&i.monitorRunDependencies(S),0==S&&T){var e=T;T=null,e()}}()}function n(t){e(t.instance)}function o(e){return(u||"function"!=typeof fetch?Promise.resolve().then((function(){return C(w)})):fetch(w,{credentials:"same-origin"}).then((function(t){if(!t.ok)throw"failed to load wasm binary file at '"+w+"'";return t.arrayBuffer()})).catch((function(){return C(w)}))).then((function(e){return WebAssembly.instantiate(e,t)})).then((function(t){return t})).then(e,(function(t){h("failed to asynchronously prepare wasm: "+t),L(t)}))}if(S++,i.monitorRunDependencies&&i.monitorRunDependencies(S),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||H(w)||"function"!=typeof fetch?o(n):fetch(w,{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 K(t){this.name="ExitStatus",this.message="Program terminated with exit("+t+")",this.status=t}function j(t){function e(){B||(B=!0,i.calledRun=!0,v||(N(x),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(),I.unshift(t);var t;N(I)}()))}S>0||(!function(){if(i.preRun)for("function"==typeof i.preRun&&(i.preRun=[i.preRun]);i.preRun.length;)t=i.preRun.shift(),R.unshift(t);var t;N(R)}(),S>0||(i.setStatus?(i.setStatus("Running..."),setTimeout((function(){setTimeout((function(){i.setStatus("")}),1),e()}),1)):e()))}if(T=function t(){B||j(),B||(T=t)},i.run=j,i.preInit)for("function"==typeof i.preInit&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()();return j(),e.ready}}();"object"==typeof exports&&"object"==typeof module?module.exports=createVonageTFLiteSimdModule:"function"==typeof define&&define.amd?define([],(function(){return createVonageTFLiteSimdModule})):"object"==typeof exports&&(exports.createVonageTFLiteSimdModule=createVonageTFLiteSimdModule);class VonageTFLiteInfo{constructor(){this.isSIMDSupported=!1,this.isThreadsSupported=!1,this.inputWidth=0,this.inputHeight=0,this.inputChannelCount=0,this.inputMemoryOffset=0,this.outputWidth=0,this.outputHeight=0,this.outputChannelCount=0,this.outputMemoryOffset=0}}const defaultWasmAssetUri="https://d3opqjmqzxf057.cloudfront.net/vonage-tensorflow-wasm/tflite-simd-wasm/1.1.3/",defaultTfliteAssetUriPath="https://d3opqjmqzxf057.cloudfront.net/ml/selfie_segmentation/4.0.0/";async function loadSelfieSegmentation(t=defaultWasmAssetUri,e=defaultTfliteAssetUriPath){let n=new VonageTFLiteInfo;return new Promise((function(r,i){(async function(){return createVonageTFLiteSimdModule({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(void 0===o)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 fetch(l),e=await t.arrayBuffer();console.log("Model buffer size:",e.byteLength);const r=o._getModelBufferMemoryOffset();console.log("Model buffer memory offset:",r),console.log("Loading model buffer..."),o.HEAPU8.set(new Uint8Array(e),r);const a=o._loadModel(e.byteLength);if(console.log("Load model result:",a),0!==a)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 SelfieSegmentation{constructor(){this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("2d",{willReadFrequently:!0}),this.pixelCount=0,this.inputOffset=0,this.outputOffset=0}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 loadSelfieSegmentation(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 isSupported(t,e){const{wasm:n,insertableStreams:r,simd:i}=await getSupportedBrowserFeatures(t,e);if(!n.supported)throw n.message;if(!r.supported)throw r.message;if(!i.supported)throw i.message}async function getSupportedBrowserFeatures(t,e){const n=new SelfieSegmentation;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 simd(),message:"Your browser does not support simd features."},insertableStreams:{supported:!0},gpu:{supported:n.isGpuSupported(),message:"Your browser does not support gpu features."}};try{await isSupported$1()}catch(t){r.insertableStreams.supported=!1,r.insertableStreams.message=t}return r}const VonageSelfiesegmentation={};(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="undefined"!=typeof Symbol&&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(t){}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 W(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 X="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||X})),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;void 0!==e&&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 void 0===n||("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||void 0===r.execScript||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,S,T="undefined"!=typeof TextDecoder,L="undefined"!=typeof TextEncoder;function w(t){if(L)t=(S||(S=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={},Y=null;function H(t,e){void 0===e&&(e=0),N(),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 C(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=Y[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}N();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 N(){if(!Y){Y={};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===Y[o]&&(Y[o]=i)}}}}var k,E="function"==typeof Uint8Array.prototype.slice;function J(t,e,n){return e===n?k||(k=new Uint8Array(0)):E?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var U=0;function A(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&&B(this,t)}function B(t,e){e=e.constructor===Uint8Array?e:e.constructor===ArrayBuffer||e.constructor===Array?new Uint8Array(e):e.constructor===String?C(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 M(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 K(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))}A.prototype.reset=function(){this.g=this.j};var j=[];function z(){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,j.length?(n=j.pop(),e&&(n.v=e.v),t&&B(n,t),t=n):t=new A(t,e),this.g=t,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}function _(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=M(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 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=M(t.g);(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(!_(t)){t.j=!0;break}if(4==t.h){t.l!=e&&(t.j=!0);break}Q(t)}break;default:t.j=!0}}function D(t,e,n){var r=t.g.i,i=M(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 $(t){var e,n=M(t.g),r=(t=t.g).g;if(t.g+=n,t=t.h,T)(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++]))||0!=o-144+(i<<28)>>30||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 q(){this.h=[],this.i=0,this.g=new z}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)}}z.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},z.prototype.length=function(){return this.h},z.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,J(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 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 Wt(t,e){if(t=t.m){tt(e,e.g.end());for(var n=0;n<t.length;n++)tt(e,t[n])}}function Xt(t,e){if(4==e.h)return!1;var n=e.m;return Q(e),e.N||(e=J(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(;_(e);)switch(e.i){case 8:var n=M(e.g);bt(t,1,n);break;case 21:bt(t,2,n=K(e.g));break;case 26:bt(t,3,n=$(e));break;case 34:bt(t,4,n=$(e));break;default:if(!Xt(t,e))return t}return t}function It(t){ut.call(this,t,-1,St)}ut.prototype.toJSON=function(){return ot(Zt(this),at,H)},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 St=[1];function Tt(t){ut.call(this,t)}function Lt(t,e){for(;_(e);)switch(e.i){case 13:var n=K(e.g);bt(t,1,n);break;case 21:bt(t,2,n=K(e.g));break;case 29:bt(t,3,n=K(e.g));break;case 37:bt(t,4,n=K(e.g));break;case 45:bt(t,5,n=K(e.g));break;default:if(!Xt(t,e))return t}return t}function wt(t){ut.call(this,t,-1,Ft)}m(Tt,ut),m(wt,ut);var Ft=[1];function Yt(t){ut.call(this,t)}function Ht(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 Ct(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 Nt(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 kt(t,e){this.h=t,this.g=e,this.l=0}function Et(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=Ht(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=Ht(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 Jt(t){this.g=t}m(Yt,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 At(t,e){return e+t}function Bt(t,e){window[t]=e}function Mt(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||At,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if("undefined"==typeof location)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 Kt(t){return Vt(t,(function t(){var e,n,r,i,o,a,s,c,u,d,h,m=this;return W(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 W(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 Bt("createMediapipeSolutionsWasm",{locateFile:m.locateFile}),Bt("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=jt(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 W(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 W(t,(function(t){return e.g.graph&&e.g.graph.url?t=g(t,jt(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:"undefined"!=typeof WebGL2RenderingContext?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 jt(t,e){return Vt(t,(function t(){var n,r,i=this;return W(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 zt(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 W(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 W(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 kt(i.h,i.D),i.s[e]=r),t.return(Et(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(),X=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=v.get(R);t:{var I=new Yt;for(x=new O(x);_(x);)switch(x.i){case 13:var S=K(x.g);bt(I,1,S);break;case 21:bt(I,2,S=K(x.g));break;case 29:bt(I,3,S=K(x.g));break;case 37:bt(I,4,S=K(x.g));break;case 45:bt(I,5,S=K(x.g));break;case 48:for(var T=x.g,L=128,w=0,F=S=0;4>F&&128<=L;F++)w|=(127&(L=T.h[T.g++]))<<7*F;if(128<=L&&(w|=(127&(L=T.h[T.g++]))<<28,S|=(127&L)>>4),128<=L)for(F=0;5>F&&128<=L;F++)S|=(127&(L=T.h[T.g++]))<<7*F+3;128>L?(T=w>>>0,(S=2147483648&(L=S>>>0))&&(L=~L>>>0,0==(T=1+~T>>>0)&&(L=L+1>>>0)),T=4294967296*L+(T>>>0),S=S?-T:T):(T.l=!0,S=void 0),bt(I,6,S);break;default:if(!Xt(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)},S=G.get(R);t:for(x=new wt,S=new O(S);_(S);)if(10===S.i)yt(x,T=D(S,new Tt,Lt),Tt,void 0);else if(!Xt(x,S))break t;x=gt(x,Tt).map(Nt),T=X.get(R);t:for(S=new It,T=new O(T);_(T);)if(10===T.i)S.addClassification(D(T,new Rt,xt));else if(!Xt(S,T))break t;I={T:I,O:x,M:Ct(S)},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 kt(Z.h,Z.D),Z.s[d]=f),g(t,Et(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 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=zt(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 void 0===t&&(t=0),1===t?"selfie_segmentation_landscape.tflite":"selfie_segmentation.tflite"}function _t(t){var e=this;t=t||{},this.g=new Mt({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 W(e,(function(e){return 1==e.g?(n=Ot(t),r="third_party/mediapipe/modules/selfie_segmentation/"+n,g(e,jt(o.g,n),2)):(i=e.h,o.g.overrideFile(r,i),e.return(!0))}))}))}}}})}(t=Mt.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){return Vt(this,(function t(){var e=this;return W(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 W(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 W(t,(function(t){return 1==t.g?g(t,Kt(e),2):3!=t.g?g(t,Vt(e,(function t(){var e,n,r,i,o,l,s,c,u=this;return W(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,jt(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}))})),3):g(t,function(t){return Vt(t,(function t(){var e,n,r,i,o,l,s=this;return W(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 W(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 kt(f.h,f.D),f.m[c.stream]=b),0===(f=b).l&&(f.l=f.h.createTexture()),"undefined"!=typeof HTMLVideoElement&&p instanceof HTMLVideoElement){var y=p.videoWidth;b=p.videoHeight}else"undefined"!=typeof HTMLImageElement&&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 Jt(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,W=y.T,X=new Yt;bt(X,1,W.Z),bt(X,2,W.$),bt(X,3,W.height),bt(X,4,W.width),bt(X,5,W.rotation),bt(X,6,W.X);var V=W=new q;nt(V,1,mt(X,1)),nt(V,2,mt(X,2)),nt(V,3,mt(X,3)),nt(V,4,mt(X,4)),nt(V,5,mt(X,5));var R=mt(X,6);if(null!=R&&null!=R){P(V.g,48);var x=V.g,I=R;R=0>I;var S=(I=Math.abs(I))>>>0;for(I=Math.floor((I-S)/4294967296),I>>>=0,R&&(I=~I>>>0,4294967295<(S=1+(~S>>>0))&&(S=0,4294967295<++I&&(I=0))),R=U=S,S=I;0<S||127<R;)x.push(127&R|128),R=(R>>>7|S<<25)>>>0,S>>>=7;x.push(R)}if(Wt(X,V),W=et(W),v.call(Z,G,W),y.O)for(Z=0;Z<y.O.length;++Z)V=!!(X=y.O[Z]).visibility,G=(v=f.data).addNormalizedLandmark,W=b,X=Object.assign(Object.assign({},X),{visibility:V?X.visibility:0}),bt(V=new Tt,1,X.x),bt(V,2,X.y),bt(V,3,X.z),X.visibility&&bt(V,4,X.visibility),nt(x=X=new q,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)),Wt(V,x),X=et(X),G.call(v,W,X);if(y.M)for(Z=0;Z<y.M.length;++Z){if(G=(v=f.data).addClassification,W=b,X=y.M[Z],bt(V=new Rt,2,X.Y),X.index&&bt(V,1,X.index),X.label&&bt(V,3,X.label),X.displayName&&bt(V,4,X.displayName),x=X=new q,null!=(S=mt(V,1))&&null!=S)if(P(x.g,8),R=x.g,0<=S)P(R,S);else{for(I=0;9>I;I++)R.push(127&S|128),S>>=7;R.push(1)}nt(x,2,mt(V,2)),null!=(R=mt(V,3))&&(R=w(R),P(x.g,26),P(x.g,R.length),tt(x,x.g.end()),tt(x,R)),null!=(R=mt(V,4))&&(R=w(R),P(x.g,34),P(x.g,R.length),tt(x,x.g.end()),tt(x,R)),Wt(V,x),X=et(X),G.call(v,W,X)}}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",Mt),R("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=_t.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 W(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 W(e,(function(e){return g(e,n.g.send(t),0)}))}))},t.setOptions=function(t){this.g.setOptions(t)},R("SelfieSegmentation",_t),R("VERSION","0.1.1632777926")}).call(VonageSelfiesegmentation);const VonageHands={};(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="undefined"!=typeof Symbol&&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(t){}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 W(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;void 0!==e&&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 void 0===n||("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 X="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||X})),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||void 0===r.execScript||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 S,T,L="undefined"!=typeof TextDecoder,w="undefined"!=typeof TextEncoder,F={},Y=null;function H(t){var e;void 0===e&&(e=0),N(),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 C(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=Y[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}N();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 N(){if(!Y){Y={};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===Y[o]&&(Y[o]=i)}}}}var k,E="function"==typeof Uint8Array;function J(t){return E&&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 A="function"==typeof Uint8Array.prototype.slice,B=0;function M(t,e){return Error("Invalid wire type: "+t+" (at position "+e+")")}function K(){return Error("Failed to read varint, encoding is invalid.")}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.v=e,t&&z(this,t)}function z(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 C(t);if(t.constructor===U)return!e&&(e=t.L)&&e.constructor===Uint8Array?e:(e=null==(e=t.L)||J(e)?e:"string"==typeof e?C(e):null,(t=t.L=e)?new Uint8Array(t):k||(k=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 K();return P(t),r}j.prototype.reset=function(){this.g=this.j};var _=[];function Q(){this.g=[]}function D(t,e){for(;127<e;)t.g.push(127&e|128),e>>>=7;t.g.push(e)}function $(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,_.length?(n=_.pop(),e&&(n.v=e.v),t&&z(n,t),t=n):t=new j(t,e),this.g=t,this.j=this.g.g,this.h=this.i=-1}function q(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 M(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 K()}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(!q(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 M(t.h,t.j)}}Q.prototype.length=function(){return this.g.length},Q.prototype.end=function(){var t=this.g;return this.g=[],t},$.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 Q}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="undefined"!=typeof Symbol&&void 0!==Symbol.hasInstance;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 Wt(t,e){return null==(t=bt(t,e))?0:t}function Xt(t,e){return null==(t=bt(t,e))?"":t}function Vt(t){var e=It;return xt(t,e=void 0===e?St: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(J(t))return H(t);if(t instanceof U){var e=t.L;return e=null==e||"string"==typeof e?e:E&&e instanceof Uint8Array?H(e):null,(t.L=e)||""}}}return t}(t),Array.isArray(t)?Vt(t):t)}function St(t){return J(t)?new Uint8Array(t):t}function Tt(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 Lt(){Tt.apply(this,arguments)}if(Tt.prototype.toJSON=function(){return Vt(this.m)},Tt.prototype.toString=function(){return this.m.toString()},m(Lt,Tt),ft){var wt={};Object.defineProperties(Lt,(wt[Symbol.hasInstance]=pt((function(){throw Error("Cannot perform instanceof checks for MutableMessage")})),wt))}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=Jt(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 Yt=Symbol();function Ht(t,e,n){return t[Yt]||(t[Yt]=function(t,r){return e(t,r,n)})}function Ct(t){var e=t[Yt];if(!e){var n=$t(t);e=function(t,e){return qt(t,e,n)},t[Yt]=e}return e}function Nt(t){var e=function(t){var e=t.ba;return e?Ct(e):(e=t.oa)?Ht(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 kt(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 Et=Symbol();function Jt(t){var e=t[Et];if(!e){var n=zt(t);e=function(t,e){return ee(t,e,n)},t[Et]=e}return e}function Ut(t,e){var n=t[Et];return n||(n=function(t,n){return Ft(t,n,e)},t[Et]=n),n}var At=Symbol();function Bt(t,e){t.push(e)}function Mt(t,e,n){t.push(e,n.P)}function Kt(t,e,n,r,i){var o=Jt(i),a=n.P;t.push(e,(function(t,e,n){return a(t,e,n,r,o)}))}function jt(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 zt(t){var e=t[At];return e||kt(t,t[At]=[],Bt,Mt,Kt,jt)}var Pt=Symbol();function Ot(t,e){t[0]=e}function _t(t,e,n,r){var i=n.O;t[e]=r?function(t,e,n){return i(t,e,n,r)}:i}function Qt(t,e,n,r,i,o){var a=n.O,l=Ct(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=Ht(r,i,o);t[e]=function(t,e,n){return l(t,e,n,r,s,a)}}function $t(t){var e=t[Pt];return e||kt(t,t[Pt]={},Ot,_t,Qt,Dt)}function qt(t,e,n){for(;q(e)&&4!=e.h;){var r=e.i,i=n[r];if(!i){var o=n[0];o&&(o=o[r])&&(i=n[r]=Nt(o))}if(!(i&&i(e,t,r)||(r=t,o=(i=e).j,tt(i),i.W))){var a=i.g.h;i=o===(i=i.g.g)?k||(k=new Uint8Array(0)):A?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&&(z(r.g,t),r.i=-1,r.h=-1),t=r}else t=new $(t);try{return qt(new e,t,$t(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=1==r%2,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,zt(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?B=0:(0,B=2147483648):isNaN(r)?(0,B=2147483647):34028234663852886e22<r?(0,B=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,B=(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,B=(n<<31|e+127<<23|8388607&r)>>>0),n=B,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 K();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=B=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,L)(r=S)||(r=S=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++]))||0!=l-144+(a<<28)>>30||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,w){if(r&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(e))throw Error("Found an unpaired surrogate");e=(T||(T=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(){Lt.apply(this,arguments)}if(m(ce,Lt),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 We(){return[1,ie,2,ie,3,ie,4,ie,5,ie,6,oe]}function Xe(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:Wt(t,1),score:Zt(t,2),label:null!=bt(t,3)?Xt(t,3):void 0,displayName:null!=bt(t,4)?Xt(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 Se(t,e,n){return function(t,e){var n=t.g;if(void 0===t.o){var r=Xe(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=Xe(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 Te(t){this.g=t}m(Ge,ce);var Le=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 we(t,e){return e+t}function Fe(t,e){window[t]=e}function Ye(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||we,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if("undefined"==typeof location)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 He(t){var e,n,r,i,o,a,s,c,u,d,h;return W((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,W((function(t){switch(t.g){case 1:return t.o=2,g(t,WebAssembly.instantiate(Le),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=Ce(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 W((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=W((function(e){return t.g.graph&&t.g.graph.url?e=g(e,Ce(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:"undefined"!=typeof WebGL2RenderingContext?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 Ce(t,e){var n,r;return W((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 Ne(t,e,n){var r,i,o,l,s,c,u,d,h,m,f,p,b,y;return W((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 W((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(Se(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(),X=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=te(v.get(R),Ge,We);x={ea:{ka:Zt(x,1),la:Zt(x,2),height:Zt(x,3),width:Zt(x,4),rotation:Zt(x,5,0),ia:Wt(x,6)},Y:vt(te(G.get(R),ye,Ze),be,1).map(Re),V:Ve(te(X.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,Se(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 ke(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=Ne(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 Ee(t){return void 0===t&&(t=0),1===t?"hand_landmark_full.tflite":"hand_landmark_lite.tflite"}function Je(t){var e=this;t=t||{},this.g=new Ye({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:Ee(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 W((function(o){return 1==o.g?(n=Ee(t),r="third_party/mediapipe/modules/hand_landmark/"+n,g(o,Ce(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=Ye.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return W((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 W((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 W((function(e){return 1==e.g?g(e,He(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return W((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,Ce(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,ke(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 W((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 W((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()),"undefined"!=typeof HTMLVideoElement&&f instanceof HTMLVideoElement)var b=f.videoWidth,y=f.videoHeight;else"undefined"!=typeof HTMLImageElement&&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,W=b.ea,X=new Ge;if(gt(X,1,W.ka),gt(X,2,W.la),gt(X,3,W.height),gt(X,4,W.width),gt(X,5,W.rotation),gt(X,6,W.ia),W=ne(X,We),v.call(Z,G,W),b.Y)for(Z=0;Z<b.Y.length;++Z){var V=!!(X=b.Y[Z]).visibility;G=(v=p.data).addNormalizedLandmark,W=y,X=Object.assign(Object.assign({},X),{visibility:V?X.visibility:0}),gt(V=new be,1,X.x),gt(V,2,X.y),gt(V,3,X.z),X.visibility&&gt(V,4,X.visibility),X=ne(V,ge),G.call(v,W,X)}if(b.V)for(Z=0;Z<b.V.length;++Z)G=(v=p.data).addClassification,W=y,X=b.V[Z],gt(V=new de,2,X.score),X.index&&gt(V,1,X.index),X.label&&gt(V,3,X.label),X.displayName&&gt(V,4,X.displayName),X=ne(V,he),G.call(v,W,X)}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",Ye),R("OptionType",{BOOL:0,NUMBER:1,ma:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=Je.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return W((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return W((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},R("Hands",Je),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(VonageHands);var VonageHolistic={};(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="undefined"!=typeof Symbol&&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(t){}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 W(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;void 0!==e&&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 void 0===n||("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 X="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||X})),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||void 0===r.execScript||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 S(){x(Error("Failed to read varint, encoding is invalid."))}function T(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var L,w,F="undefined"!=typeof TextDecoder,Y="undefined"!=typeof TextEncoder;function H(t){if(Y)t=(w||(w=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 C={},N=null;function k(t){var e;void 0===e&&(e=0),J(),e=C[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 E(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=N[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}J();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 J(){if(!N){N={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));C[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===N[o]&&(N[o]=i)}}}}var U,A="function"==typeof Uint8Array;function B(t){if(this.g=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}B.prototype.toJSON=function(){if(null==this.g)var t="";else t=this.g,t=this.g=null==t||"string"==typeof t?t:A&&t instanceof Uint8Array?k(t):null;return t};var M="function"==typeof Uint8Array.prototype.slice;function K(t,e,n){return e===n?U||(U=new Uint8Array(0)):M?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var j=0;function z(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 E(t);if(t.constructor===B){if(null==t.g)var e=U||(U=new Uint8Array(0));else{e=Uint8Array;var n=t.g;n=null==n||A&&null!=n&&n instanceof Uint8Array?n:"string"==typeof n?E(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,S()}function _(t){t.g>t.i&&(t.l=!0,x(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}z.prototype.reset=function(){this.g=this.m},z.prototype.j=function(){var t=this.h,e=t[this.g],n=127&e;return 128>e?(this.g+=1,_(this),n):(n|=(127&(e=t[this.g+1]))<<7,128>e?(this.g+=2,_(this),n):(n|=(127&(e=t[this.g+2]))<<14,128>e?(this.g+=3,_(this),n):(n|=(127&(e=t[this.g+3]))<<21,128>e?(this.g+=4,_(this),n):(n|=(15&(e=t[this.g+4]))<<28,128>e?(this.g+=5,_(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,S(),n):(_(this),n))))))},z.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,_(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 Q=[];function D(){this.g=new Uint8Array(64),this.h=0}function $(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 q(t,e){for(;127<e;)$(t,127&e|128),e>>>=7;$(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,Q.length?(n=Q.pop(),e&&(n.u=e.u),t&&P(n,t),t=n):t=new z(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,_(t);break t}e++}t.l=!0,S()}break;case 1:(t=t.g).g+=8,_(t);break;case 2:2!=t.h?nt(t):(e=t.g.j(),(t=t.g).g+=e,_(t));break;case 5:(t=t.g).g+=4,_(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=K(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,K(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){q(t.g,8*e+2),q(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):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 A&&null!=t&&t instanceof Uint8Array?k(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]=Wt):(Xt(this),(r=this.i[t])?ft(r):this.i[t]=Wt)}var Gt,Wt=Object.freeze(ft([]));function Xt(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=Wt),i===Wt?Tt(t,e,i=ft([]),r):n&&Array.isArray(i)&&2&mt(i)&&Tt(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 St(t,e,n){return null==(t=null==(t=Vt(t,e))?t:+t)?void 0===n?0:n:t}function Tt(t,e,n,r){void 0!==r&&r||e>=t.l?(Xt(t),t.i[e]=n):t.h[e+t.j]=n}function Lt(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 wt(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=wt(t,r,e);n=n||new r,t=Rt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,Yt(n))):(o.push(n),t.push(Yt(n)))}function Yt(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]&&Yt(n[r]);else n&&Yt(n)}return t.h}function Ht(t,e){if(t=t.o){st(e,e.g.end());for(var n=0;n<t.length;n++)st(e,t[n])}}function Ct(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 Nt(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]=Ct(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 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 Et(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 Jt(t,e,n){if(null!=(e=Vt(e,n))){q(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?j=0:(0,j=2147483648):isNaN(r)?(0,j=2147483647):34028234663852886e22<r?(0,j=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,j=(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,j=(n<<31|e+127<<23|8388607&r)>>>0),$(t,(n=j)>>>0&255),$(t,n>>>8&255),$(t,n>>>16&255),$(t,n>>>24&255)}}function Ut(t,e,n){return 5===t.h&&(Tt(e,n,t.g.o()),!0)}function At(t,e,n){return(5===t.h||2===t.h)&&(e=Rt(e,n),2==t.h?ot(t,z.prototype.o,e):e.push(t.g.o()),!0)}function Bt(t,e,n){return 0===t.h&&(Tt(e,n,O(t.g)),!0)}function Mt(t,e,n){return 0===t.h&&(Tt(e,n,t.g.j()),!0)}function Kt(t,e,n){if(2!==t.h)return!1;var r,i=t.g.j(),o=(t=t.g).g;if(t.g+=i,_(t),t=t.h,F)(r=L)||(r=L=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++]))||0!=l-144+(a<<28)>>30||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=T(u,c),c.length=0);r=T(u,c)}return Tt(e,n,r),!0}function jt(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?Yt(t):t,e.g[n]=t,Tt(e,n,r,o),!0}function zt(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,z.prototype.j,e):e.push(t.g.j()),!0)}function Ot(t,e,n){return 0===t.h&&(Tt(e,n,O(t.g)),!0)}function _t(t){vt.call(this,t,-1,qt)}function Qt(t,e){return Nt(t,e,Gt||(Gt={1:Mt,2:Mt,3:At,4:Ot}))}vt.prototype.toJSON=function(){return Zt(Yt(this),gt)},vt.prototype.toString=function(){return Yt(this).toString()},m(_t,vt),_t.prototype.getRows=function(){return Vt(this,1)},_t.prototype.getCols=function(){return Vt(this,2)},_t.prototype.getPackedDataList=function(){return xt(this)},_t.prototype.getLayout=function(){return It(this,4,0)};var Dt,$t,qt=[3];function te(t){vt.call(this,t)}function ee(t,e){var n=Vt(t,1);if(null!=n&&null!=n){q(e.g,8);var r=e.g;if(0<=n)q(r,n);else{for(var i=0;9>i;i++)$(r,127&n|128),n>>=7;$(r,1)}}Jt(e,t,2),null!=(r=Vt(t,3))&&ct(e,3,H(r)),null!=(r=Vt(t,4))&&ct(e,4,H(r)),Ht(t,e)}function ne(t,e){return Nt(t,e,Dt||(Dt={1:Mt,2:Ut,3:Kt,4:Kt}))}function re(t){vt.call(this,t,-1,le)}function ie(t,e){return Nt(t,e,$t||($t={1:[zt,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){Jt(e,t,1),Jt(e,t,2),Jt(e,t,3),Jt(e,t,4),Jt(e,t,5),Ht(t,e)}function ue(t,e){return Nt(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 Nt(t,e,ae||(ae={1:[zt,se,ue]}))}m(se,vt),m(de,vt);var me,fe,pe=[1];function be(t){vt.call(this,t)}function ge(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){q(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=j=o,o=i;0<o||127<n;)$(r,127&n|128),n=(n>>>7|o<<25)>>>0,o>>>=7;$(r,n)}Ht(t,e)}function ye(t,e){return Nt(t,e,me||(me={1:Ut,2:Ut,3:Ut,4:Ut,5:Ut,6:Bt}))}function Ze(t){vt.call(this,t,-1,We)}function ve(t,e){return Nt(t,e,fe||(fe={1:Ot,2:Ot,3:At,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,We=[3,4];function Xe(t){vt.call(this,t)}function Ve(t,e){return Nt(t,e,Ge||(Ge={1:[jt,Ze,ve],2:[jt,_t,Qt]}))}m(Xe,vt),Xe.prototype.getMesh=function(){return Lt(this,Ze,1)},Xe.prototype.getPoseTransformMatrix=function(){return Lt(this,_t,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]],Se=[[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]],Te=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Le=[[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(Re),l(xe),l(Ie),l(Se),l(Te),l(Le));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 Ye(t){return wt(t,te,1).map((function(t){return{index:It(t,1,0),score:St(t,2),label:null!=Vt(t,3)?It(t,3,""):void 0,displayName:null!=Vt(t,4)?It(t,4,""):void 0}}))}function He(t){return{x:St(t,1),y:St(t,2),z:St(t,3),visibility:null!=Vt(t,4)?St(t,4):void 0}}function Ce(t){return wt(Et(t,de,he),se,1).map(He)}function Ne(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={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 Ee(t){this.g=t}var Je=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 Ae(t,e){window[t]=e}function Be(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("undefined"==typeof location)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 Me(t){var e,n,r,i,o,a,s,c,u,d,h;return W((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,W((function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(Je),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 Ae("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),Ae("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=Ke(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 W((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=W((function(e){return t.g.graph&&t.g.graph.url?e=g(e,Ke(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:"undefined"!=typeof WebGL2RenderingContext?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 Ke(t,e){var n,r;return W((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 je(t,e,n){var r,i,o,l,s,c,u,d,h,m,f,p,b,y;return W((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 W((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 Ne(t.h,t.D),t.s[e]=r),i.return(ke(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(),X=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=Et(v.get(R),be,ye);x={T:{X:St(x,1),Y:St(x,2),height:St(x,3),width:St(x,4),rotation:St(x,5,0),W:It(x,6,0)},O:Ce(G.get(R)),M:Ye(Et(X.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 Ne(t.h,t.D),t.s[d]=f),g(Z,ke(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 ze(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=je(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=Et(t,Xe,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 _e(t){var e=this;t=t||{},this.g=new Be({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:Ce},rightHandLandmarks:{type:"proto",stream:"right_hand_landmarks",transform:Ce},faceLandmarks:{type:"proto",stream:"face_landmarks",transform:Ce},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:Ce},ea:{type:"proto",stream:"world_landmarks",transform:Ce},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 W((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=Be.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return W((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 W((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 W((function(e){return 1==e.g?g(e,Me(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return W((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,Ke(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,ze(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 W((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 W((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 Ne(h.h,h.D),h.m[s.stream]=p),0===p.l&&(p.l=p.h.createTexture()),"undefined"!=typeof HTMLVideoElement&&f instanceof HTMLVideoElement)var b=f.videoWidth,y=f.videoHeight;else"undefined"!=typeof HTMLImageElement&&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 Ee(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,W=b.T,X=new be;if(Tt(X,1,W.X),Tt(X,2,W.Y),Tt(X,3,W.height),Tt(X,4,W.width),Tt(X,5,W.rotation),Tt(X,6,W.W),W=kt(X,ge),v.call(Z,G,W),b.O)for(Z=0;Z<b.O.length;++Z){var V=!!(X=b.O[Z]).visibility;G=(v=p.data).addNormalizedLandmark,W=y,X=Object.assign(Object.assign({},X),{visibility:V?X.visibility:0}),Tt(V=new se,1,X.x),Tt(V,2,X.y),Tt(V,3,X.z),X.visibility&&Tt(V,4,X.visibility),X=kt(V,ce),G.call(v,W,X)}if(b.M)for(Z=0;Z<b.M.length;++Z)G=(v=p.data).addClassification,W=y,X=b.M[Z],Tt(V=new te,2,X.score),X.index&&Tt(V,1,X.index),X.label&&Tt(V,3,X.label),X.displayName&&Tt(V,4,X.displayName),X=kt(V,ee),G.call(v,W,X)}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",Be),R("OptionType",{BOOL:0,NUMBER:1,Z:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(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 W((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return W((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},R("Holistic",_e),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",Se),R("FACEMESH_RIGHT_EYEBROW",Te),R("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),R("FACEMESH_FACE_OVAL",Le),R("FACEMESH_CONTOURS",we),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(VonageHolistic);const VonageFacedetection={};(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="undefined"!=typeof Symbol&&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(t){}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 W(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;void 0!==e&&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 void 0===n||("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 X="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||X})),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||void 0===r.execScript||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 S,T,L="undefined"!=typeof TextDecoder,w="undefined"!=typeof TextEncoder,F={},Y=null;function H(t){var e;void 0===e&&(e=0),N(),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 C(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=Y[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}N();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 N(){if(!Y){Y={};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===Y[o]&&(Y[o]=i)}}}}var k,E="function"==typeof Uint8Array;function J(t){return E&&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 A="function"==typeof Uint8Array.prototype.slice,B=0;function M(t,e){return Error("Invalid wire type: "+t+" (at position "+e+")")}function K(){return Error("Failed to read varint, encoding is invalid.")}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.v=e,t&&z(this,t)}function z(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 C(t);if(t.constructor===U)return!e&&(e=t.L)&&e.constructor===Uint8Array?e:(e=null==(e=t.L)||J(e)?e:"string"==typeof e?C(e):null,(t=t.L=e)?new Uint8Array(t):k||(k=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 K();return P(t),r}j.prototype.reset=function(){this.g=this.j};var _=[];function Q(){this.g=[]}function D(t,e){for(;127<e;)t.g.push(127&e|128),e>>>=7;t.g.push(e)}function $(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,_.length?(n=_.pop(),e&&(n.v=e.v),t&&z(n,t),t=n):t=new j(t,e),this.g=t,this.j=this.g.g,this.h=this.i=-1}function q(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 M(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 K()}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(!q(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 M(t.h,t.j)}}Q.prototype.length=function(){return this.g.length},Q.prototype.end=function(){var t=this.g;return this.g=[],t},$.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 Q}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="undefined"!=typeof Symbol&&void 0!==Symbol.hasInstance;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 Wt(t,e){return null==(t=bt(t,e))?0:t}function Xt(t,e){return null==(t=bt(t,e))?"":t}function Vt(t){var e=It;return xt(t,e=void 0===e?St: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(J(t))return H(t);if(t instanceof U){var e=t.L;return e=null==e||"string"==typeof e?e:E&&e instanceof Uint8Array?H(e):null,(t.L=e)||""}}}return t}(t),Array.isArray(t)?Vt(t):t)}function St(t){return J(t)?new Uint8Array(t):t}function Tt(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 Lt(){Tt.apply(this,arguments)}if(Tt.prototype.toJSON=function(){return Vt(this.m)},Tt.prototype.toString=function(){return this.m.toString()},m(Lt,Tt),ft){var wt={};Object.defineProperties(Lt,(wt[Symbol.hasInstance]=pt((function(){throw Error("Cannot perform instanceof checks for MutableMessage")})),wt))}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=Jt(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 Yt=Symbol();function Ht(t,e,n){return t[Yt]||(t[Yt]=function(t,r){return e(t,r,n)})}function Ct(t){var e=t[Yt];if(!e){var n=$t(t);e=function(t,e){return qt(t,e,n)},t[Yt]=e}return e}function Nt(t){var e=function(t){var e=t.aa;return e?Ct(e):(e=t.ka)?Ht(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 kt(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 Et=Symbol();function Jt(t){var e=t[Et];if(!e){var n=zt(t);e=function(t,e){return ee(t,e,n)},t[Et]=e}return e}function Ut(t,e){var n=t[Et];return n||(n=function(t,n){return Ft(t,n,e)},t[Et]=n),n}var At=Symbol();function Bt(t,e){t.push(e)}function Mt(t,e,n){t.push(e,n.P)}function Kt(t,e,n,r,i){var o=Jt(i),a=n.P;t.push(e,(function(t,e,n){return a(t,e,n,r,o)}))}function jt(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 zt(t){var e=t[At];return e||kt(t,t[At]=[],Bt,Mt,Kt,jt)}var Pt=Symbol();function Ot(t,e){t[0]=e}function _t(t,e,n,r){var i=n.O;t[e]=r?function(t,e,n){return i(t,e,n,r)}:i}function Qt(t,e,n,r,i,o){var a=n.O,l=Ct(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=Ht(r,i,o);t[e]=function(t,e,n){return l(t,e,n,r,s,a)}}function $t(t){var e=t[Pt];return e||kt(t,t[Pt]={},Ot,_t,Qt,Dt)}function qt(t,e,n){for(;q(e)&&4!=e.h;){var r=e.i,i=n[r];if(!i){var o=n[0];o&&(o=o[r])&&(i=n[r]=Nt(o))}if(!(i&&i(e,t,r)||(r=t,o=(i=e).j,tt(i),i.W))){var a=i.g.h;i=o===(i=i.g.g)?k||(k=new Uint8Array(0)):A?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&&(z(r.g,t),r.i=-1,r.h=-1),t=r}else t=new $(t);try{return qt(new e,t,$t(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=1==r%2,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,zt(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?B=0:(0,B=2147483648):isNaN(r)?(0,B=2147483647):34028234663852886e22<r?(0,B=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,B=(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,B=(n<<31|e+127<<23|8388607&r)>>>0),n=B,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 K();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=B=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,L)(r=S)||(r=S=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++]))||0!=l-144+(a<<28)>>30||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,w){if(r&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(e))throw Error("Found an unpaired surrogate");e=(T||(T=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(){Lt.apply(this,arguments)}if(m(ce,Lt),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 We(){return[1,ie,2,ie,3,ie,4,ie,5,ie,6,oe]}m(Ge,ce);var Xe=[[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]],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]],Te=[].concat(l(Xe),l(Ve),l(Re),l(xe),l(Ie),l(Se));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 we(t){return vt(t,de,1).map((function(t){return{index:Wt(t,1),ga:Zt(t,2),label:null!=bt(t,3)?Xt(t,3):void 0,displayName:null!=bt(t,4)?Xt(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 Ye(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.o){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.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 Ce(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 Ee(t,e){window[t]=e}function Je(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||ke,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if("undefined"==typeof location)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 W((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,W((function(t){switch(t.g){case 1:return t.o=2,g(t,WebAssembly.instantiate(Ne),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 Ee("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),Ee("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=Ae(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 W((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=W((function(e){return t.g.graph&&t.g.graph.url?e=g(e,Ae(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:"undefined"!=typeof WebGL2RenderingContext?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 Ae(t,e){var n,r;return W((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 Be(t,e,n){var r,i,o,l,s,c,u,d,h,m,f,p,b,y;return W((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 W((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 Ye(t.h,t.G),t.u[e]=r),i.return(He(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(),X=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=te(v.get(R),Ge,We);x={boundingBox:{xCenter:Zt(x,1),yCenter:Zt(x,2),height:Zt(x,3),width:Zt(x,4),rotation:Zt(x,5,0),rectId:Wt(x,6)},landmarks:vt(te(G.get(R),ye,Ze),be,1).map(Fe),V:we(te(X.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 Ye(t.h,t.G),t.u[d]=f),g(Z,He(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 Me(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=Be(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 Ke(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 Je({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 W((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,Ae(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=Je.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return W((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 W((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 W((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 W((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,Ae(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,Me(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 W((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 W((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 Ye(h.h,h.G),h.o[s.stream]=p),0===p.l&&(p.l=p.h.createTexture()),"undefined"!=typeof HTMLVideoElement&&f instanceof HTMLVideoElement)var b=f.videoWidth,y=f.videoHeight;else"undefined"!=typeof HTMLImageElement&&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 Ce(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,W=b.boundingBox,X=new Ge;if(gt(X,1,W.xCenter),gt(X,2,W.yCenter),gt(X,3,W.height),gt(X,4,W.width),gt(X,5,W.rotation),gt(X,6,W.rectId),W=ne(X,We),v.call(Z,G,W),b.landmarks)for(Z=0;Z<b.landmarks.length;++Z){var V=!!(X=b.landmarks[Z]).visibility;G=(v=p.data).addNormalizedLandmark,W=y,X=Object.assign(Object.assign({},X),{visibility:V?X.visibility:0}),gt(V=new be,1,X.x),gt(V,2,X.y),gt(V,3,X.z),X.visibility&&gt(V,4,X.visibility),X=ne(V,ge),G.call(v,W,X)}if(b.V)for(Z=0;Z<b.V.length;++Z)G=(v=p.data).addClassification,W=y,X=b.V[Z],gt(V=new de,2,X.ga),X.index&&gt(V,1,X.index),X.label&&gt(V,3,X.label),X.displayName&&gt(V,4,X.displayName),X=ne(V,he),G.call(v,W,X)}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,ia: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 W((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return W((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},R("FaceDetection",Ke),R("FACEDETECTION_LIPS",Xe),R("FACEDETECTION_LEFT_EYE",Ve),R("FACEDETECTION_LEFT_EYEBROW",Re),R("FACEDETECTION_RIGHT_EYE",xe),R("FACEDETECTION_RIGHT_EYEBROW",Ie),R("FACEDETECTION_FACE_OVAL",Se),R("FACEDETECTION_CONTOURS",Te),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(VonageFacedetection);const VonageFacemash={};(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="undefined"!=typeof Symbol&&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(t){}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 W(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 X="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||X})),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;void 0!==e&&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 void 0===n||("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||void 0===r.execScript||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,S,T="undefined"!=typeof TextDecoder,L="undefined"!=typeof TextEncoder;function w(t){if(L)t=(S||(S=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={},Y=null;function H(t,e){void 0===e&&(e=0),N(),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 C(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=Y[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}N();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 N(){if(!Y){Y={};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===Y[o]&&(Y[o]=i)}}}}var k,E="function"==typeof Uint8Array.prototype.slice;function J(t,e,n){return e===n?k||(k=new Uint8Array(0)):E?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var U=0;function A(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&&B(this,t)}function B(t,e){e=e.constructor===Uint8Array?e:e.constructor===ArrayBuffer||e.constructor===Array?new Uint8Array(e):e.constructor===String?C(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 M(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}A.prototype.reset=function(){this.g=this.l},A.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)))))},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,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 K=[];function j(){this.g=new Uint8Array(64),this.h=0}function z(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,K.length?(n=K.pop(),e&&(n.v=e.v),t&&B(n,t),t=n):t=new A(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 _(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=t.g.i();(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(!O(t)){t.j=!0;break}if(4==t.h){t.l!=e&&(t.j=!0);break}_(t)}break;default:t.j=!0}}function Q(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 $(t){var e,n=t.g.i(),r=(t=t.g).g;if(t.g+=n,t=t.h,T)(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++]))||0!=o-144+(i<<28)>>30||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 q(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?q(t,A.prototype.o,e):e.push(D(t))}function et(){this.h=[],this.i=0,this.g=new j}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){z(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)}}j.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},j.prototype.length=function(){return this.h},j.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,J(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):(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 Wt(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 Xt(t,e,n){var r=void 0!==r&&r;t.g||(t.g={});var i=n?Rt(n):n;t.g[e]=n,vt(t,e,i,r)}function Vt(t,e,n,r){var i=Wt(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 _(e),e.N||(e=J(e.g.h,n,e.g.g),(n=t.o)?n.push(e):t.o=[e]),!0}function St(t){ht.call(this,t,-1,Lt)}function Tt(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=M(e.g));break;default:if(!It(t,e))return t}return t}ht.prototype.toJSON=function(){return lt(Rt(this),st,H)},ht.prototype.toString=function(){return Rt(this).toString()},m(St,ht),St.prototype.getRows=function(){return pt(this,1)},St.prototype.getCols=function(){return pt(this,2)},St.prototype.getPackedDataList=function(){return gt(this)},St.prototype.getLayout=function(){return yt(this,4,0)};var Lt=[3];function wt(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 Yt(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=$(e));break;case 34:vt(t,4,n=$(e));break;default:if(!It(t,e))return t}return t}function Ht(t){ht.call(this,t,-1,Ct)}m(Ft,ht),m(Ht,ht),Ht.prototype.addClassification=function(t,e){return Vt(this,t,Ft,e),this};var Ct=[1];function Nt(t){ht.call(this,t)}function kt(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 Et(t){ht.call(this,t,-1,Ut)}function Jt(t){t:{var e=new Et;for(t=new P(t);O(t);)if(10===t.i){Vt(e,Q(t,new Nt,kt),Nt,void 0)}else if(!It(e,t))break t}return e}m(Nt,ht),m(Et,ht);var Ut=[1];function At(t){ht.call(this,t)}function Bt(t){ht.call(this,t,-1,Kt)}function Mt(t,e){for(;O(e);)switch(e.i){case 8:var n=M(e.g);vt(t,1,n);break;case 16:vt(t,2,n=M(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?q(n,A.prototype.i,r):r.push(n.g.i());break;default:if(!It(t,e))return t}return t}m(At,ht),m(Bt,ht),Bt.prototype.getVertexType=function(){return yt(this,1,0)},Bt.prototype.getPrimitiveType=function(){return yt(this,2,0)},Bt.prototype.getVertexBufferList=function(){return gt(this)},Bt.prototype.getIndexBufferList=function(){return bt(this,4)};var Kt=[3,4];function jt(t){ht.call(this,t)}function zt(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 Wt(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 Ot(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 _t(t,e){this.h=t,this.g=e,this.l=0}function Qt(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=zt(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=zt(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(jt,ht),jt.prototype.getMesh=function(){return Gt(this,Bt,1)},jt.prototype.getPoseTransformMatrix=function(){return Gt(this,St,2)};var $t=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function qt(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||qt,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if("undefined"==typeof location)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 wt(t,(function t(){var e,n,r,i,o,a,s,c,u,d,h,m=this;return W(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 wt(this,(function t(){return W(t,(function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate($t),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 wt(e,(function t(){var e,n,r=this;return W(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=wt(e,(function t(){var e=this;return W(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:"undefined"!=typeof WebGL2RenderingContext?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 wt(t,(function t(){var n,r,i=this;return W(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 wt(t,(function t(){var r,i,o,l,s,c,u,d,h,m,f,p,b,y,Z=this;return W(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 wt(t,(function t(){var r,i=this;return W(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 _t(i.h,i.D),i.s[e]=r),t.return(Qt(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(),X=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=v.get(R);t:{var I=new At;for(x=new P(x);O(x);)switch(x.i){case 13:var S=D(x);vt(I,1,S);break;case 21:vt(I,2,S=D(x));break;case 29:vt(I,3,S=D(x));break;case 37:vt(I,4,S=D(x));break;case 45:vt(I,5,S=D(x));break;case 48:vt(I,6,S=M(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=Wt(Jt(G.get(R)),Nt).map(Ot);var T=X.get(R);t:for(S=new Ht,T=new P(T);O(T);)if(10===T.i)S.addClassification(Q(T,new Ft,Yt));else if(!It(S,T))break t;I={T:I,O:x,M:Pt(S)},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 _t(Z.h,Z.D),Z.s[d]=f),g(t,Qt(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 jt;for(t=new P(t);O(t);)switch(t.i){case 10:var n=Q(t,new Bt,Mt);Xt(e,1,n);break;case 18:Xt(e,2,n=Q(t,new St,Tt));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 wt(this,(function t(){var e=this;return W(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 wt(n,(function e(){var n=this;return W(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 wt(this,(function t(){var e=this;return W(t,(function(t){return 1==t.g?g(t,ne(e),2):3!=t.g?g(t,wt(e,(function t(){var e,n,r,i,o,l,s,c,u=this;return W(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}))})),3):g(t,function(t){return wt(t,(function t(){var e,n,r,i,o,l,s=this;return W(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 wt(this,(function n(){var r,i,o,l,s,c,u,d,h,m=this;return W(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 _t(f.h,f.D),f.m[c.stream]=b),0===(f=b).l&&(f.l=f.h.createTexture()),"undefined"!=typeof HTMLVideoElement&&p instanceof HTMLVideoElement){var y=p.videoWidth;b=p.videoHeight}else"undefined"!=typeof HTMLImageElement&&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,W=y.T,X=new At;vt(X,1,W.Z),vt(X,2,W.$),vt(X,3,W.height),vt(X,4,W.width),vt(X,5,W.rotation),vt(X,6,W.X);var V=W=new et;it(V,1,pt(X,1)),it(V,2,pt(X,2)),it(V,3,pt(X,3)),it(V,4,pt(X,4)),it(V,5,pt(X,5));var R=pt(X,6);if(null!=R&&null!=R){z(V.g,48);var x=V.g,I=R;R=0>I;var S=(I=Math.abs(I))>>>0;for(I=Math.floor((I-S)/4294967296),I>>>=0,R&&(I=~I>>>0,4294967295<(S=1+(~S>>>0))&&(S=0,4294967295<++I&&(I=0))),R=U=S,S=I;0<S||127<R;)x.push(127&R|128),R=(R>>>7|S<<25)>>>0,S>>>=7;x.push(R)}if(xt(X,V),W=rt(W),v.call(Z,G,W),y.O)for(Z=0;Z<y.O.length;++Z)V=!!(X=y.O[Z]).visibility,G=(v=f.data).addNormalizedLandmark,W=b,X=Object.assign(Object.assign({},X),{visibility:V?X.visibility:0}),vt(V=new Nt,1,X.x),vt(V,2,X.y),vt(V,3,X.z),X.visibility&&vt(V,4,X.visibility),it(x=X=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),X=rt(X),G.call(v,W,X);if(y.M)for(Z=0;Z<y.M.length;++Z){if(G=(v=f.data).addClassification,W=b,X=y.M[Z],vt(V=new Ft,2,X.Y),X.index&&vt(V,1,X.index),X.label&&vt(V,3,X.label),X.displayName&&vt(V,4,X.displayName),x=X=new et,null!=(S=pt(V,1))&&null!=S)if(z(x.g,8),R=x.g,0<=S)z(R,S);else{for(I=0;9>I;I++)R.push(127&S|128),S>>=7;R.push(1)}it(x,2,pt(V,2)),null!=(R=pt(V,3))&&(R=w(R),z(x.g,26),z(x.g,R.length),nt(x,x.g.end()),nt(x,R)),null!=(R=pt(V,4))&&(R=w(R),z(x.g,34),z(x.g,R.length),nt(x,x.g.end()),nt(x,R)),xt(V,x),X=rt(X),G.call(v,W,X)}}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 Wt(Jt(t),Nt).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]],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 wt(this,(function t(){var e=this;return W(t,(function(t){return g(t,e.g.initialize(),0)}))}))},t.reset=function(){this.g.reset()},t.send=function(t){return wt(this,(function e(){var n=this;return W(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(VonageFacemash);const VonageObjectron={};(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="undefined"!=typeof Symbol&&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(t){}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 W(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;void 0!==e&&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 void 0===n||("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 X="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||X})),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||void 0===r.execScript||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 S(){x(Error("Failed to read varint, encoding is invalid."))}function T(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var L,w,F="undefined"!=typeof TextDecoder,Y="undefined"!=typeof TextEncoder;function H(t){if(Y)t=(w||(w=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 C={},N=null;function k(t){var e;void 0===e&&(e=0),J(),e=C[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 E(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=N[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}J();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 J(){if(!N){N={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));C[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===N[o]&&(N[o]=i)}}}}var U,A="function"==typeof Uint8Array;function B(t){if(this.g=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}var M="function"==typeof Uint8Array.prototype.slice;function K(t,e,n){return e===n?U||(U=new Uint8Array(0)):M?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var j=0;function z(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 E(t);if(t.constructor===B){if(null==t.g)var e=U||(U=new Uint8Array(0));else{e=Uint8Array;var n=t.g;n=null==n||A&&null!=n&&n instanceof Uint8Array?n:"string"==typeof n?E(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,S()}function _(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,_(t),r):(r|=(127&(n=e[t.g+1]))<<7,128>n?(t.g+=2,_(t),r):(r|=(127&(n=e[t.g+2]))<<14,128>n?(t.g+=3,_(t),r):(r|=(127&(n=e[t.g+3]))<<21,128>n?(t.g+=4,_(t),r):(r|=(15&(n=e[t.g+4]))<<28,128>n?(t.g+=5,_(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,S(),r):(_(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,_(t),(e<<0|n<<8|r<<16|i<<24)>>>0}z.prototype.reset=function(){this.g=this.l},z.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 $=[];function q(){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,$.length?(n=$.pop(),e&&(n.v=e.v),t&&P(n,t),t=n):t=new z(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=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 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,_(t);break t}e++}t.j=!0,S()}break;case 1:(t=t.g).g+=8,_(t);break;case 2:2!=t.h?it(t):(e=Q(t.g),(t=t.g).g+=e,_(t));break;case 5:(t=t.g).g+=4,_(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=Q(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}q.prototype.length=function(){return this.h},q.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,K(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 q}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(A&&null!=t&&t instanceof Uint8Array)return k(t);if(t instanceof B){if(null==t.g)t="";else{var e=t.g;e=null==e||"string"==typeof e?e:A&&e instanceof Uint8Array?k(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 Wt(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 Xt(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 St(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 Tt(t,e){return null==(t=vt(t,e))?0:t}function Lt(t,e){return null==(t=vt(t,e))?"":t}function wt(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 Yt(t,e,n){return t[Ft]||(t[Ft]=function(t,r){return e(t,r,n)})}function Ht(t){var e=t[Ft];if(!e){var n=t[kt]||(t[kt]=t());e=function(t,e){return Et(t,e,n)},t[Ft]=e}return e}function Ct(t){var e=function(t){var e=t.da;if(e)return Ht(e);if(e=t.ia){var n=t.Y;return delete t.Y,Yt(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 Nt(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=Ht(t[2]);return function(t,n,o){return e(t,n,o,r,i)};case 4:var o=t[1],a=t[3],l=Ht(t[2]);return function(t,n,r){return e(t,n,r,o,l,a)};case 5:var s=t[1],c=Yt(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=Yt(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 kt=Symbol();function Et(t,e,n){for(;rt(e)&&4!=e.h;){var r=e.i,i=n[r];if(i)Array.isArray(i)&&(i=n[r]=Nt(i));else{var o=n[0];o&&(o=o[r])&&(i=n[r]=Ct(o))}i&&i(e,t,r)||(r=t,o=(i=e).l,it(i),i.O||(i=K(i.g.h,o,i.g.g),(o=r.m)?o.push(i):r.m=[i]))}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 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 Et(new e,t,n[kt]||(n[kt]=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 At(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?j=0:(0,j=2147483648):isNaN(r)?(0,j=2147483647):34028234663852886e22<r?(0,j=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,j=(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,j=(n<<31|e+127<<23|8388607&r)>>>0),tt(t,(n=j)>>>0&255),tt(t,n>>>8&255),tt(t,n>>>16&255),tt(t,n>>>24&255)}}function Bt(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 Mt(t,e,n){return 5===t.h&&(Vt(e,n,t.g.m()),!0)}function Kt(t,e,n){if(5!==t.h&&2!==t.h)return!1;if(e=Gt(e,n),2==t.h){n=z.prototype.m;var r=Q(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 jt(t,e,n){return 5===t.h&&(Rt(e,n,t=t.g.m(),0),!0)}function zt(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,Q(t.g)),!0)}function Ot(t,e,n){return 0===t.h&&(Rt(e,n,t=Q(t.g),0),!0)}function _t(t,e,n){return 0===t.h&&(Rt(e,n,t=!!Q(t.g),!1),!0)}function Qt(t,e,n){if(2!==t.h)return!1;var r,i=Q(t.g),o=(t=t.g).g;if(t.g+=i,_(t),t=t.h,F)(r=L)||(r=L=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++]))||0!=l-144+(a<<28)>>30||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=T(u,c),c.length=0);r=T(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:t,e.g[n]=t,Vt(e,n,r,!1),!0)}function $t(t,e,n,r,i){return 2===t.h&&(St(e,n,t=ot(t,new r,i),r,void 0),!0)}function qt(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:Mt,3:Qt,4:Qt}}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)}}At(e,t,2),null!=(r=vt(t,3))&&ct(e,3,H(r)),null!=(r=vt(t,4))&&ct(e,4,H(r)),wt(t,e)}function re(t){gt.call(this,t,-1,oe)}function ie(){return{1:[$t,te,ee]}}m(te,gt),m(re,gt),re.prototype.addClassification=function(t,e){return St(this,1,t,te,e),this};var oe=[1];function ae(t){gt.call(this,t)}function le(){return{1:Mt,2:Mt,3:Mt,4:Mt,5:Mt}}function se(t,e){At(e,t,1),At(e,t,2),At(e,t,3),At(e,t,4),At(e,t,5),wt(t,e)}function ce(t){gt.call(this,t,-1,de)}function ue(){return{1:[$t,ae,le]}}m(ae,gt),m(ce,gt);var de=[1];function he(t){gt.call(this,t)}function me(){return{1:Mt,2:Mt,3:Mt,4:Mt,5:Mt,6:zt}}function fe(t,e){At(e,t,1),At(e,t,2),At(e,t,3),At(e,t,4),At(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=j=o,o=i;0<o||127<n;)tt(r,127&n|128),n=(n>>>7|o<<25)>>>0,o>>>=7;tt(r,n)}wt(t,e)}function pe(t){gt.call(this,t,-1,Ze)}function be(){return{1:qt,2:qt,3:Kt,4:[Dt,ge,ye],5:Pt,6:Pt,7:Kt,8:Kt,9:Kt}}function ge(t){gt.call(this,t)}function ye(){return{1:Mt,2:Mt,3:Mt}}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:jt,2:jt,3:jt}}function We(t){gt.call(this,t)}function Xe(){return{1:jt,2:jt,3:jt}}function Ve(t){gt.call(this,t)}function Re(){return{1:Ot,2:[Dt,We,Xe],3:[Dt,ve,Ge],4:_t}}function xe(t){gt.call(this,t,-1,Se)}function Ie(){return{1:Ot,2:[$t,Ve,Re],3:jt,4:Kt,5:Kt,6:Kt}}m(ve,gt),m(We,gt),m(Ve,gt),m(xe,gt);var Se=[2,4,5,6];function Te(t){gt.call(this,t,-1,we)}function Le(){return{1:Ot,2:[$t,xe,Ie],3:[Dt,pe,be],4:Bt,5:Kt,6:Kt}}m(Te,gt);var we=[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 Ye(t){return It(t,te,1).map((function(t){return{index:Tt(t,1),$:Xt(t,2),label:null!=vt(t,3)?Lt(t,3):void 0,displayName:null!=vt(t,4)?Lt(t,4):void 0}}))}function He(t){return{x:Xt(t,1),y:Xt(t,2),z:Xt(t,3),visibility:null!=vt(t,4)?Xt(t,4):void 0}}function Ce(t,e){this.h=t,this.g=e,this.l=0}function Ne(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 ke(t){this.g=t}var Ee=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 Ue(t,e){window[t]=e}function Ae(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||Je,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if("undefined"==typeof location)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 Be(t){var e,n,r,i,o,a,s,c,u,d,h;return W((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,W((function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(Ee),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=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.T)):Promise.resolve()}))).then((function(){var e,n,r;return W((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=W((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.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:"undefined"!=typeof WebGL2RenderingContext?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 Me(t,e){var n,r;return W((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 Ke(t,e,n){var r,i,o,l,s,c,u,d,h,m,f,p,b,y;return W((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 W((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 Ce(t.h,t.F),t.s[e]=r),i.return(Ne(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(),X=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=Ut(v.get(R),he,me);x={U:{aa:Xt(x,1),ba:Xt(x,2),height:Xt(x,3),width:Xt(x,4),rotation:Xt(x,5,0),Z:Tt(x,6)},P:It(Ut(G.get(R),ce,ue),ae,1).map(He),N:Ye(Ut(X.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 Ce(t.h,t.F),t.s[d]=f),g(Z,Ne(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 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 ze(t){var e=Tt(t,1),n=xt(t,ve,3);return{id:e,point2d:n={x:Xt(n,1),y:Xt(n,2),depth:Xt(n,3)},point3d:{x:Xt(t=xt(t,We,2),1),y:Xt(t,2),z:Xt(t,3)}}}function Pe(t){var e=Ut(t,Te,Le);t=[],e=It(e,xe,2);for(var n=0;n<e.length;n++)t.push({id:Tt(e[n],1),keypoints:It(e[n],Ve,2).map(ze),visibility:Xt(e[n],3),scale:Wt(e[n],6),translation:Wt(e[n],5),rotation:Wt(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=Ae.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return W((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 W((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 W((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 W((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,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.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 W((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 W((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 Ce(h.h,h.F),h.m[s.stream]=p),0===p.l&&(p.l=p.h.createTexture()),"undefined"!=typeof HTMLVideoElement&&f instanceof HTMLVideoElement)var b=f.videoWidth,y=f.videoHeight;else"undefined"!=typeof HTMLImageElement&&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 ke(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,W=b.U,X=new he;if(Vt(X,1,W.aa),Vt(X,2,W.ba),Vt(X,3,W.height),Vt(X,4,W.width),Vt(X,5,W.rotation),Vt(X,6,W.Z),W=Jt(X,fe),v.call(Z,G,W),b.P)for(Z=0;Z<b.P.length;++Z){var V=!!(X=b.P[Z]).visibility;G=(v=p.data).addNormalizedLandmark,W=y,X=Object.assign(Object.assign({},X),{visibility:V?X.visibility:0}),Vt(V=new ae,1,X.x),Vt(V,2,X.y),Vt(V,3,X.z),X.visibility&&Vt(V,4,X.visibility),X=Jt(V,se),G.call(v,W,X)}if(b.N)for(Z=0;Z<b.N.length;++Z)G=(v=p.data).addClassification,W=y,X=b.N[Z],Vt(V=new te,2,X.$),X.index&&Vt(V,1,X.index),X.label&&Vt(V,3,X.label),X.displayName&&Vt(V,4,X.displayName),X=Jt(V,ne),G.call(v,W,X)}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",Ae),R("OptionType",{BOOL:0,NUMBER:1,ca:2,0:"BOOL",1:"NUMBER",2:"STRING"});var _e={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 Qe(t){var e=this;t=t||{},this.g=new Ae({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 W((function(a){return 1==a.g?(n=t,e.g.setOptions({allowedLabels:Oe(n)},_e),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,Me(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 W((function(r){return n=t,e.h=n,e.g.setOptions({focalX:n[0],focalY:n[1]},_e),r.return(!0)}))}},principalPoint:{default:[0,0],onChange:function(t){var n;return W((function(r){return n=t,e.i=n,e.g.setOptions({principalX:n[0],principalY:n[1]},_e),r.return(!0)}))}},imageSize:{onChange:function(t){var n,r,i,o;return W((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=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 W((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return W((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},R("Objectron",Qe),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(VonageObjectron);const VonagePose={};(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="undefined"!=typeof Symbol&&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(t){}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 W(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;void 0!==e&&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 void 0===n||("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 X="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||X})),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||void 0===r.execScript||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 S(){x(Error("Failed to read varint, encoding is invalid."))}function T(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var L,w,F="undefined"!=typeof TextDecoder,Y="undefined"!=typeof TextEncoder;function H(t){if(Y)t=(w||(w=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 C={},N=null;function k(t){var e;void 0===e&&(e=0),J(),e=C[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 E(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=N[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}J();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 J(){if(!N){N={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));C[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===N[o]&&(N[o]=i)}}}}var U,A="function"==typeof Uint8Array;function B(t){if(this.g=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}B.prototype.toJSON=function(){if(null==this.g)var t="";else t=this.g,t=this.g=null==t||"string"==typeof t?t:A&&t instanceof Uint8Array?k(t):null;return t};var M="function"==typeof Uint8Array.prototype.slice;function K(t,e,n){return e===n?U||(U=new Uint8Array(0)):M?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var j=0;function z(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 E(t);if(t.constructor===B){if(null==t.g)var e=U||(U=new Uint8Array(0));else{e=Uint8Array;var n=t.g;n=null==n||A&&null!=n&&n instanceof Uint8Array?n:"string"==typeof n?E(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 _(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,S(),r):(O(t),r))))))}z.prototype.reset=function(){this.g=this.l};var Q=[];function D(){this.g=new Uint8Array(64),this.h=0}function $(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 q(t,e){for(;127<e;)$(t,127&e|128),e>>>=7;$(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,Q.length?(n=Q.pop(),e&&(n.u=e.u),t&&P(n,t),t=n):t=new z(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=_(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,S()}break;case 1:(t=t.g).g+=8,O(t);break;case 2:2!=t.h?nt(t):(e=_(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=K(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,K(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){q(t.g,8*e+2),q(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):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 A&&null!=t&&t instanceof Uint8Array?k(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):(Wt(this),(r=this.h[t])?ht(r):this.h[t]=Gt)}var Zt,vt,Gt=Object.freeze(ht([]));function Wt(t){var e=t.l+t.j;t.g[e]||(t.h=t.g[e]={})}function Xt(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=Xt(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=Xt(t,e))?t:+t)?void 0===n?0:n:t}function xt(t,e,n,r){void 0!==r&&r||e>=t.l?(Wt(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 St(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,Tt(n))):(o.push(n),t.push(Tt(n)))}function Tt(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]&&Tt(n[r]);else n&&Tt(n)}return t.g}function Lt(t,e){return null==(t=Xt(t,e))?0:t}function wt(t,e){return null==(t=Xt(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 Yt(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 Ht(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]=Yt(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 Ct(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 Nt(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 kt(t,e,n){if(null!=(e=Xt(e,n))){q(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?j=0:(0,j=2147483648):isNaN(r)?(0,j=2147483647):34028234663852886e22<r?(0,j=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,j=(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,j=(n<<31|e+127<<23|8388607&r)>>>0),$(t,(n=j)>>>0&255),$(t,n>>>8&255),$(t,n>>>16&255),$(t,n>>>24&255)}}function Et(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 Jt(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,S(),t=void 0),xt(e,n,t),!0}function Ut(t,e,n){return 0===t.h&&(xt(e,n,_(t.g)),!0)}function At(t,e,n){if(2!==t.h)return!1;var r,i=_(t.g),o=(t=t.g).g;if(t.g+=i,O(t),t=t.h,F)(r=L)||(r=L=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++]))||0!=l-144+(a<<28)>>30||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=T(u,c),c.length=0);r=T(u,c)}return xt(e,n,r),!0}function Bt(t,e,n,r,i){if(2!==t.h)return!1;var o=new r,a=t.g.i,l=_(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,St(e,n,o,r,void 0),!0}function Mt(t){yt.call(this,t)}function Kt(t,e){var n=Xt(t,1);if(null!=n&&null!=n){q(e.g,8);var r=e.g;if(0<=n)q(r,n);else{for(var i=0;9>i;i++)$(r,127&n|128),n>>=7;$(r,1)}}kt(e,t,2),null!=(r=Xt(t,3))&&lt(e,3,H(r)),null!=(r=Xt(t,4))&&lt(e,4,H(r)),Ft(t,e)}function jt(t,e){return Ht(t,e,Zt||(Zt={1:Ut,2:Et,3:At,4:At}))}function zt(t){yt.call(this,t,-1,Qt)}function Pt(t,e){return Ht(t,e,vt||(vt={1:[Bt,Mt,jt]}))}yt.prototype.toJSON=function(){return gt(Tt(this),pt)},yt.prototype.toString=function(){return Tt(this).toString()},m(Mt,yt),m(zt,yt),zt.prototype.addClassification=function(t,e){return St(this,1,t,Mt,e),this};var Ot,_t,Qt=[1];function Dt(t){yt.call(this,t)}function $t(t,e){kt(e,t,1),kt(e,t,2),kt(e,t,3),kt(e,t,4),kt(e,t,5),Ft(t,e)}function qt(t,e){return Ht(t,e,Ot||(Ot={1:Et,2:Et,3:Et,4:Et,5:Et}))}function te(t){yt.call(this,t,-1,re)}function ee(t,e){return Ht(t,e,_t||(_t={1:[Bt,Dt,qt]}))}m(Dt,yt),m(te,yt);var ne,re=[1];function ie(t){yt.call(this,t)}function oe(t,e){kt(e,t,1),kt(e,t,2),kt(e,t,3),kt(e,t,4),kt(e,t,5);var n=Xt(t,6);if(null!=n&&null!=n){q(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=j=o,o=i;0<o||127<n;)$(r,127&n|128),n=(n>>>7|o<<25)>>>0,o>>>=7;$(r,n)}Ft(t,e)}function ae(t,e){return Ht(t,e,ne||(ne={1:Et,2:Et,3:Et,4:Et,5:Et,6:Jt}))}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,Mt,1).map((function(t){return{index:Lt(t,1),X:Rt(t,2),label:null!=Xt(t,3)?wt(t,3):void 0,displayName:null!=Xt(t,4)?wt(t,4):void 0}}))}function ce(t){return{x:Rt(t,1),y:Rt(t,2),z:Rt(t,3),visibility:null!=Xt(t,4)?Rt(t,4):void 0}}function ue(t){return It(Nt(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("undefined"==typeof location)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 W((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,W((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 W((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=W((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:"undefined"!=typeof WebGL2RenderingContext?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 W((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 W((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 W((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(),X=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=Nt(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:Lt(x,6)},O:ue(G.get(R)),M:se(Nt(X.get(R),zt,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(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 We(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 Xe(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:We(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 W((function(o){return 1==o.g?(n=We(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 W((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 W((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 W((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 W((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 W((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 W((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()),"undefined"!=typeof HTMLVideoElement&&f instanceof HTMLVideoElement)var b=f.videoWidth,y=f.videoHeight;else"undefined"!=typeof HTMLImageElement&&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,W=b.T,X=new ie;if(xt(X,1,W.Y),xt(X,2,W.Z),xt(X,3,W.height),xt(X,4,W.width),xt(X,5,W.rotation),xt(X,6,W.W),W=Ct(X,oe),v.call(Z,G,W),b.O)for(Z=0;Z<b.O.length;++Z){var V=!!(X=b.O[Z]).visibility;G=(v=p.data).addNormalizedLandmark,W=y,X=Object.assign(Object.assign({},X),{visibility:V?X.visibility:0}),xt(V=new Dt,1,X.x),xt(V,2,X.y),xt(V,3,X.z),X.visibility&&xt(V,4,X.visibility),X=Ct(V,$t),G.call(v,W,X)}if(b.M)for(Z=0;Z<b.M.length;++Z)G=(v=p.data).addClassification,W=y,X=b.M[Z],xt(V=new Mt,2,X.X),X.index&&xt(V,1,X.index),X.label&&xt(V,3,X.label),X.displayName&&xt(V,4,X.displayName),X=Ct(V,Kt),G.call(v,W,X)}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=Xe.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 W((function(e){return g(e,t.g.initialize(),0)}))},t.send=function(t,e){var n=this;return W((function(r){return g(r,n.g.send(t,e),0)}))},t.setOptions=function(t){this.g.setOptions(t)},R("Pose",Xe),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(VonagePose);const _MediapipeHelper=class{constructor(){this.mediapipeMap_=new Map}getVersion(t){switch(t){case"face_detection":return VonageFacedetection.VERSION;case"face_mesh":return VonageFacemash.VERSION;case"hands":return VonageHands.VERSION;case"holistic":return VonageHolistic.VERSION;case"objectron":return VonageObjectron.VERSION;case"selfie_segmentation":return VonageSelfiesegmentation.VERSION;case"pose":return VonagePose.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 VonageFacemash.FaceMesh({locateFile:(t,e)=>(r.assetsUri||_MediapipeHelper.defaultAssetsBaseUrl+"face_mesh/"+this.getVersion("face_mesh"))+"/"+t});break;case"face_detection":i=new VonageFacedetection.FaceDetection({locateFile:(t,e)=>(r.assetsUri||_MediapipeHelper.defaultAssetsBaseUrl+"face_detection/"+this.getVersion("face_detection"))+"/"+t});break;case"hands":i=new VonageHands.Hands({locateFile:(t,e)=>(r.assetsUri||_MediapipeHelper.defaultAssetsBaseUrl+"hands/"+this.getVersion("hands"))+"/"+t});break;case"holistic":i=new VonageHolistic.Holistic({locateFile:(t,e)=>(r.assetsUri||_MediapipeHelper.defaultAssetsBaseUrl+"holistic/"+this.getVersion("holistic"))+"/"+t});break;case"objectron":i=new VonageObjectron.Objectron({locateFile:(t,e)=>(r.assetsUri||_MediapipeHelper.defaultAssetsBaseUrl+"objectron/"+this.getVersion("objectron"))+"/"+t});break;case"selfie_segmentation":i=new VonageSelfiesegmentation.SelfieSegmentation({locateFile:(t,e)=>(r.assetsUri||_MediapipeHelper.defaultAssetsBaseUrl+"selfie_segmentation/"+this.getVersion("selfie_segmentation"))+"/"+t});break;case"pose":i=new VonagePose.Pose({locateFile:(t,e)=>(r.assetsUri||_MediapipeHelper.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 MediapipeHelper=_MediapipeHelper;MediapipeHelper.defaultAssetsBaseUrl="https://d3opqjmqzxf057.cloudfront.net/ml/mediapipe/";const anyMap=new WeakMap,eventsMap=new WeakMap,producersMap=new WeakMap,anyProducer=Symbol("anyProducer"),resolvedPromise=Promise.resolve(),listenerAdded=Symbol("listenerAdded"),listenerRemoved=Symbol("listenerRemoved");let isGlobalDebugEnabled=!1;function assertEventName(t){if("string"!=typeof t&&"symbol"!=typeof t)throw new TypeError("eventName must be a string or a symbol")}function assertListener(t){if("function"!=typeof t)throw new TypeError("listener must be a function")}function getListeners(t,e){const n=eventsMap.get(t);return n.has(e)||n.set(e,new Set),n.get(e)}function getEventProducers(t,e){const n="string"==typeof e||"symbol"==typeof e?e:anyProducer,r=producersMap.get(t);return r.has(n)||r.set(n,new Set),r.get(n)}function enqueueProducers(t,e,n){const r=producersMap.get(t);if(r.has(e))for(const t of r.get(e))t.enqueue(n);if(r.has(anyProducer)){const t=Promise.all([e,n]);for(const e of r.get(anyProducer))e.enqueue(t)}}function iterator(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)getEventProducers(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)getEventProducers(t,n).delete(o);return r(),arguments.length>0?{done:!0,value:await n}:{done:!0}},[Symbol.asyncIterator](){return this}}}function defaultMethodNamesOrAssert(t){if(void 0===t)return allEmitteryMethods;if(!Array.isArray(t))throw new TypeError("`methodNames` must be an array of strings");for(const e of t)if(!allEmitteryMethods.includes(e)){if("string"!=typeof e)throw new TypeError("`methodNames` element must be a string");throw new Error(`${e} is not Emittery method`)}return t}const isListenerSymbol=t=>t===listenerAdded||t===listenerRemoved;class Emittery{static mixin(t,e){return e=defaultMethodNamesOrAssert(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 Emittery}),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 isGlobalDebugEnabled;const{env:t}=process||{env:{}};return"emittery"===t.DEBUG||"*"===t.DEBUG||isGlobalDebugEnabled}static set isDebugEnabled(t){isGlobalDebugEnabled=t}constructor(t={}){anyMap.set(this,new Set),eventsMap.set(this,new Map),producersMap.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){(Emittery.isDebugEnabled||this.debug.enabled)&&this.debug.logger(t,this.debug.name,e,n)}on(t,e){assertListener(e),t=Array.isArray(t)?t:[t];for(const n of t)assertEventName(n),getListeners(this,n).add(e),this.logIfDebugEnabled("subscribe",n,void 0),isListenerSymbol(n)||this.emit(listenerAdded,{eventName:n,listener:e});return this.off.bind(this,t,e)}off(t,e){assertListener(e),t=Array.isArray(t)?t:[t];for(const n of t)assertEventName(n),getListeners(this,n).delete(e),this.logIfDebugEnabled("unsubscribe",n,void 0),isListenerSymbol(n)||this.emit(listenerRemoved,{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)assertEventName(e);return iterator(this,t)}async emit(t,e){assertEventName(t),this.logIfDebugEnabled("emit",t,e),enqueueProducers(this,t,e);const n=getListeners(this,t),r=anyMap.get(this),i=[...n],o=isListenerSymbol(t)?[]:[...r];await resolvedPromise,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){assertEventName(t),this.logIfDebugEnabled("emitSerial",t,e);const n=getListeners(this,t),r=anyMap.get(this),i=[...n],o=[...r];await resolvedPromise;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 assertListener(t),this.logIfDebugEnabled("subscribeAny",void 0,void 0),anyMap.get(this).add(t),this.emit(listenerAdded,{listener:t}),this.offAny.bind(this,t)}anyEvent(){return iterator(this)}offAny(t){assertListener(t),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(listenerRemoved,{listener:t}),anyMap.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){getListeners(this,e).clear();const t=getEventProducers(this,e);for(const e of t)e.finish();t.clear()}else{anyMap.get(this).clear();for(const t of eventsMap.get(this).values())t.clear();for(const t of producersMap.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){void 0!==n&&assertEventName(n),e+=anyMap.get(this).size;for(const t of eventsMap.get(this).values())e+=t.size;for(const t of producersMap.get(this).values())e+=t.size}else e+=anyMap.get(this).size+getListeners(this,n).size+getEventProducers(this,n).size+getEventProducers(this).size;return e}bindMethods(t,e){if("object"!=typeof t||null===t)throw new TypeError("`target` must be an object");e=defaultMethodNamesOrAssert(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 allEmitteryMethods=Object.getOwnPropertyNames(Emittery.prototype).filter((t=>"constructor"!==t));Object.defineProperty(Emittery,"listenerAdded",{value:listenerAdded,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(Emittery,"listenerRemoved",{value:listenerRemoved,writable:!1,enumerable:!0,configurable:!1});var emittery=Emittery,a=(t=>(t[t.INIT=0]="INIT",t[t.FORWARD=1]="FORWARD",t[t.TERMINATE=2]="TERMINATE",t))(a||{});function w(t){return[ImageBitmap,ReadableStream,WritableStream].some((e=>t instanceof e))}let k=0;function f(t,e,n,r,i){const o=k++;return t.postMessage({id:o,type:e,functionName:n,args:r},r.filter((t=>w(t)))),new Promise((t=>{i.set(o,t)}))}async function I(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 f(r,a.INIT,"",[t.workerId],n))throw"Failed to instantiate workerized class";return r}async function p(t,e,n){const r={};return Object.getOwnPropertyNames(t.prototype).forEach((t=>{r[t]=(...r)=>f(e,a.FORWARD,t,r,n)})),r.terminate=async(...t)=>{const i=await f(e,a.TERMINATE,"",t,n);return e.terminate(),r.worker=void 0,i},r.worker=e,r}async function y(t,e){const n=new Map;return p(t,await I(t,e,n),n)}function l(t,e){const{id:n}=t,r=Array.isArray(e)?e:[e];postMessage({id:n,result:e},r.filter((t=>w(t))))}async function m(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}`;l(t,await e.instance[n](...null!=r?r:[]))}function u(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}const d={};function A(t,e){e.workerId=t,u()&&(d[e.workerId]=e)}function h(t,e){if(!t.args)throw"Missing className while initializing worker";const[n]=t.args,r=d[n];if(!r)throw`unknown worker class ${n}`;e.instance=new r(t.args.slice(1)),l(t,void 0!==typeof e.instance)}async function R(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:[])),l(t,r)}function W(){const t={};onmessage=async e=>{const n=e.data;switch(n.type){case a.INIT:h(n,t);break;case a.FORWARD:m(n,t);break;case a.TERMINATE:R(n,t)}}}u()&&W();class VonageAssetsLoaderHelper{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 fetch(t),n=await e.blob();return await createImageBitmap(n)}}
2
+ /* @license twgl.js 5.0.4 Copyright (c) 2015, Gregg Tavares All Rights Reserved.
3
+ Available via the MIT license.
4
+ see: http://github.com/greggman/twgl.js for details */const BYTE=5120,UNSIGNED_BYTE=5121,SHORT=5122,UNSIGNED_SHORT=5123,INT=5124,UNSIGNED_INT=5125,FLOAT=5126,UNSIGNED_SHORT_4_4_4_4=32819,UNSIGNED_SHORT_5_5_5_1=32820,UNSIGNED_SHORT_5_6_5=33635,HALF_FLOAT=5131,UNSIGNED_INT_2_10_10_10_REV=33640,UNSIGNED_INT_10F_11F_11F_REV=35899,UNSIGNED_INT_5_9_9_9_REV=35902,FLOAT_32_UNSIGNED_INT_24_8_REV=36269,UNSIGNED_INT_24_8=34042,glTypeToTypedArray={};{const t=glTypeToTypedArray;t[5120]=Int8Array,t[5121]=Uint8Array,t[5122]=Int16Array,t[5123]=Uint16Array,t[INT]=Int32Array,t[5125]=Uint32Array,t[5126]=Float32Array,t[32819]=Uint16Array,t[32820]=Uint16Array,t[33635]=Uint16Array,t[5131]=Uint16Array,t[33640]=Uint32Array,t[35899]=Uint32Array,t[35902]=Uint32Array,t[36269]=Uint32Array,t[34042]=Uint32Array}function getGLTypeForTypedArray(t){if(t instanceof Int8Array)return 5120;if(t instanceof Uint8Array)return 5121;if(t instanceof Uint8ClampedArray)return 5121;if(t instanceof Int16Array)return 5122;if(t instanceof Uint16Array)return 5123;if(t instanceof Int32Array)return INT;if(t instanceof Uint32Array)return 5125;if(t instanceof Float32Array)return 5126;throw new Error("unsupported typed array type")}function getGLTypeForTypedArrayType(t){if(t===Int8Array)return 5120;if(t===Uint8Array)return 5121;if(t===Uint8ClampedArray)return 5121;if(t===Int16Array)return 5122;if(t===Uint16Array)return 5123;if(t===Int32Array)return INT;if(t===Uint32Array)return 5125;if(t===Float32Array)return 5126;throw new Error("unsupported typed array type")}function getTypedArrayTypeForGLType(t){const e=glTypeToTypedArray[t];if(!e)throw new Error("unknown gl type");return e}const isArrayBuffer="undefined"!=typeof SharedArrayBuffer?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 error(...t){console.error(...t)}const isTypeWeakMaps=new Map;function isType(t,e){if(!t||"object"!=typeof t)return!1;let n=isTypeWeakMaps.get(e);n||(n=new WeakMap,isTypeWeakMaps.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 isBuffer(t,e){return"undefined"!=typeof WebGLBuffer&&isType(e,"WebGLBuffer")}function isRenderbuffer(t,e){return"undefined"!=typeof WebGLRenderbuffer&&isType(e,"WebGLRenderbuffer")}function isShader(t,e){return"undefined"!=typeof WebGLShader&&isType(e,"WebGLShader")}function isTexture(t,e){return"undefined"!=typeof WebGLTexture&&isType(e,"WebGLTexture")}function isSampler(t,e){return"undefined"!=typeof WebGLSampler&&isType(e,"WebGLSampler")}const STATIC_DRAW=35044,ARRAY_BUFFER=34962,ELEMENT_ARRAY_BUFFER=34963,BUFFER_SIZE=34660,BYTE$1=5120,UNSIGNED_BYTE$1=5121,SHORT$1=5122,UNSIGNED_SHORT$1=5123,INT$1=5124,UNSIGNED_INT$1=5125,FLOAT$1=5126,defaults={attribPrefix:""};function setBufferFromTypedArray(t,e,n,r,i){t.bindBuffer(e,n),t.bufferData(e,r,i||35044)}function createBufferFromTypedArray(t,e,n,r){if(isBuffer(t,e))return e;n=n||34962;const i=t.createBuffer();return setBufferFromTypedArray(t,n,i,e,r),i}function isIndices(t){return"indices"===t}function getNormalizationForTypedArray(t){return t instanceof Int8Array||t instanceof Uint8Array}function getNormalizationForTypedArrayType(t){return t===Int8Array||t===Uint8Array}function getArray(t){return t.length?t:t.data}const texcoordRE=/coord|texture/i,colorRE=/color|colour/i;function guessNumComponentsFromName(t,e){let n;if(n=texcoordRE.test(t)?2:colorRE.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 getNumComponents(t,e){return t.numComponents||t.size||guessNumComponentsFromName(e,getArray(t).length)}function makeTypedArray(t,e){if(isArrayBuffer(t))return t;if(isArrayBuffer(t.data))return t.data;Array.isArray(t)&&(t={data:t});let n=t.type;return n||(n=isIndices(e)?Uint16Array:Float32Array),new n(t.data)}function createAttribsFromArrays(t,e){const n={};return Object.keys(e).forEach((function(r){if(!isIndices(r)){const i=e[r],o=i.attrib||i.name||i.attribName||defaults.attribPrefix+r;if(i.value){if(!Array.isArray(i.value)&&!isArrayBuffer(i.value))throw new Error("array.value is not array or typedarray");n[o]={value:i.value}}else{let e,a,l,s;if(i.buffer&&i.buffer instanceof WebGLBuffer)e=i.buffer,s=i.numComponents||i.size,a=i.type,l=i.normalize;else if("number"==typeof i||"number"==typeof i.data){const n=i.data||i,o=i.type||Float32Array,c=n*o.BYTES_PER_ELEMENT;a=getGLTypeForTypedArrayType(o),l=void 0!==i.normalize?i.normalize:getNormalizationForTypedArrayType(o),s=i.numComponents||i.size||guessNumComponentsFromName(r,n),e=t.createBuffer(),t.bindBuffer(34962,e),t.bufferData(34962,c,i.drawType||35044)}else{const n=makeTypedArray(i,r);e=createBufferFromTypedArray(t,n,void 0,i.drawType),a=getGLTypeForTypedArray(n),l=void 0!==i.normalize?i.normalize:getNormalizationForTypedArray(n),s=getNumComponents(i,r)}n[o]={buffer:e,numComponents:s,type:a,normalize:l,stride:i.stride||0,offset:i.offset||0,divisor:void 0===i.divisor?void 0:i.divisor,drawType:i.drawType}}}})),t.bindBuffer(34962,null),n}function getBytesPerValueForGLType(t,e){return 5120===e||5121===e?1:5122===e||5123===e?2:5124===e||5125===e||5126===e?4:0}const positionKeys=["position","positions","a_position"];function getNumElementsFromAttributes(t,e){let n,r;for(r=0;r<positionKeys.length&&(n=positionKeys[r],!(n in e))&&(n=defaults.attribPrefix+n,!(n in e));++r);r===positionKeys.length&&(n=Object.keys(e)[0]);const i=e[n];if(!i.buffer)return 1;t.bindBuffer(34962,i.buffer);const o=t.getBufferParameter(34962,34660);t.bindBuffer(34962,null);const a=o/getBytesPerValueForGLType(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 createBufferInfoFromArrays(t,e,n){const r=createAttribsFromArrays(t,e),i=Object.assign({},n||{});i.attribs=Object.assign({},n?n.attribs:{},r);const o=e.indices;if(o){const e=makeTypedArray(o,"indices");i.indices=createBufferFromTypedArray(t,e,34963),i.numElements=e.length,i.elementType=getGLTypeForTypedArray(e)}else i.numElements||(i.numElements=getNumElementsFromAttributes(t,i.attribs));return i}function isWebGL2(t){return!!t.texStorage2D}const glEnumToString=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)}}(),defaults$1={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},isArrayBuffer$1=isArrayBuffer,getShared2DContext=function(){let t;return function(){return t=t||("undefined"!=typeof document&&document.createElement?document.createElement("canvas").getContext("2d"):null),t}}(),ALPHA=6406,RGB=6407,RGBA=6408,LUMINANCE=6409,LUMINANCE_ALPHA=6410,DEPTH_COMPONENT=6402,DEPTH_STENCIL=34041,CLAMP_TO_EDGE=33071,NEAREST=9728,LINEAR=9729,TEXTURE_2D=3553,TEXTURE_CUBE_MAP=34067,TEXTURE_3D=32879,TEXTURE_2D_ARRAY=35866,TEXTURE_CUBE_MAP_POSITIVE_X=34069,TEXTURE_CUBE_MAP_NEGATIVE_X=34070,TEXTURE_CUBE_MAP_POSITIVE_Y=34071,TEXTURE_CUBE_MAP_NEGATIVE_Y=34072,TEXTURE_CUBE_MAP_POSITIVE_Z=34073,TEXTURE_CUBE_MAP_NEGATIVE_Z=34074,TEXTURE_MIN_FILTER=10241,TEXTURE_MAG_FILTER=10240,TEXTURE_WRAP_S=10242,TEXTURE_WRAP_T=10243,TEXTURE_WRAP_R=32882,TEXTURE_MIN_LOD=33082,TEXTURE_MAX_LOD=33083,TEXTURE_BASE_LEVEL=33084,TEXTURE_MAX_LEVEL=33085,UNPACK_ALIGNMENT=3317,UNPACK_ROW_LENGTH=3314,UNPACK_IMAGE_HEIGHT=32878,UNPACK_SKIP_PIXELS=3316,UNPACK_SKIP_ROWS=3315,UNPACK_SKIP_IMAGES=32877,UNPACK_COLORSPACE_CONVERSION_WEBGL=37443,UNPACK_PREMULTIPLY_ALPHA_WEBGL=37441,UNPACK_FLIP_Y_WEBGL=37440,R8=33321,R8_SNORM=36756,R16F=33325,R32F=33326,R8UI=33330,R8I=33329,RG16UI=33338,RG16I=33337,RG32UI=33340,RG32I=33339,RG8=33323,RG8_SNORM=36757,RG16F=33327,RG32F=33328,RG8UI=33336,RG8I=33335,R16UI=33332,R16I=33331,R32UI=33334,R32I=33333,RGB8=32849,SRGB8=35905,RGB565=36194,RGB8_SNORM=36758,R11F_G11F_B10F=35898,RGB9_E5=35901,RGB16F=34843,RGB32F=34837,RGB8UI=36221,RGB8I=36239,RGB16UI=36215,RGB16I=36233,RGB32UI=36209,RGB32I=36227,RGBA8=32856,SRGB8_ALPHA8=35907,RGBA8_SNORM=36759,RGB5_A1=32855,RGBA4=32854,RGB10_A2=32857,RGBA16F=34842,RGBA32F=34836,RGBA8UI=36220,RGBA8I=36238,RGB10_A2UI=36975,RGBA16UI=36214,RGBA16I=36232,RGBA32I=36226,RGBA32UI=36208,DEPTH_COMPONENT16=33189,DEPTH_COMPONENT24=33190,DEPTH_COMPONENT32F=36012,DEPTH32F_STENCIL8=36013,DEPTH24_STENCIL8=35056,BYTE$2=5120,UNSIGNED_BYTE$2=5121,SHORT$2=5122,UNSIGNED_SHORT$2=5123,INT$2=5124,UNSIGNED_INT$2=5125,FLOAT$2=5126,UNSIGNED_SHORT_4_4_4_4$1=32819,UNSIGNED_SHORT_5_5_5_1$1=32820,UNSIGNED_SHORT_5_6_5$1=33635,HALF_FLOAT$1=5131,HALF_FLOAT_OES=36193,UNSIGNED_INT_2_10_10_10_REV$1=33640,UNSIGNED_INT_10F_11F_11F_REV$1=35899,UNSIGNED_INT_5_9_9_9_REV$1=35902,FLOAT_32_UNSIGNED_INT_24_8_REV$1=36269,UNSIGNED_INT_24_8$1=34042,RG=33319,RG_INTEGER=33320,RED=6403,RED_INTEGER=36244,RGB_INTEGER=36248,RGBA_INTEGER=36249;let s_textureInternalFormatInfo;function getTextureInternalFormatInfo(t){if(!s_textureInternalFormatInfo){const t={6406:{textureFormat:6406,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[5121,5131,36193,5126]},6409:{textureFormat:6409,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[5121,5131,36193,5126]},6410:{textureFormat:6410,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[5121,5131,36193,5126]}};t[RGB]={textureFormat:RGB,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[5121,5131,36193,5126,33635]},t[6408]={textureFormat:6408,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[5121,5131,36193,5126,32819,32820]},t[6402]={textureFormat:6402,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[5125,5123]},t[R8]={textureFormat:RED,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[5121]},t[36756]={textureFormat:RED,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[5120]},t[R16F]={textureFormat:RED,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[5126,5131]},t[R32F]={textureFormat:RED,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[5126]},t[R8UI]={textureFormat:36244,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[5121]},t[R8I]={textureFormat:36244,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[5120]},t[33332]={textureFormat:36244,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[5123]},t[R16I]={textureFormat:36244,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[5122]},t[33334]={textureFormat:36244,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[5125]},t[R32I]={textureFormat:36244,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[5124]},t[RG8]={textureFormat:RG,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[5121]},t[36757]={textureFormat:RG,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[5120]},t[33327]={textureFormat:RG,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[5126,5131]},t[33328]={textureFormat:RG,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[5126]},t[33336]={textureFormat:33320,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[5121]},t[RG8I]={textureFormat:33320,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[5120]},t[33338]={textureFormat:33320,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[5123]},t[33337]={textureFormat:33320,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[5122]},t[33340]={textureFormat:33320,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[5125]},t[33339]={textureFormat:33320,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[5124]},t[RGB8]={textureFormat:RGB,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[5121]},t[35905]={textureFormat:RGB,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[5121]},t[36194]={textureFormat:RGB,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[5121,33635]},t[36758]={textureFormat:RGB,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[5120]},t[35898]={textureFormat:RGB,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[5126,5131,35899]},t[35901]={textureFormat:RGB,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[5126,5131,35902]},t[34843]={textureFormat:RGB,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[5126,5131]},t[34837]={textureFormat:RGB,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[5126]},t[36221]={textureFormat:36248,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[5121]},t[36239]={textureFormat:36248,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[5120]},t[36215]={textureFormat:36248,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[5123]},t[36233]={textureFormat:36248,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[5122]},t[36209]={textureFormat:36248,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[5125]},t[36227]={textureFormat:36248,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[5124]},t[32856]={textureFormat:6408,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[5121]},t[35907]={textureFormat:6408,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[5121]},t[36759]={textureFormat:6408,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[5120]},t[32855]={textureFormat:6408,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[5121,32820,33640]},t[32854]={textureFormat:6408,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[5121,32819]},t[32857]={textureFormat:6408,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[33640]},t[34842]={textureFormat:6408,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[5126,5131]},t[34836]={textureFormat:6408,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[5126]},t[36220]={textureFormat:36249,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[5121]},t[36238]={textureFormat:36249,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[5120]},t[36975]={textureFormat:36249,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[33640]},t[36214]={textureFormat:36249,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[5123]},t[36232]={textureFormat:36249,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[5122]},t[36226]={textureFormat:36249,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[5124]},t[36208]={textureFormat:36249,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[5125]},t[33189]={textureFormat:6402,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[5123,5125]},t[33190]={textureFormat:6402,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[5125]},t[36012]={textureFormat:6402,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[5126]},t[35056]={textureFormat:34041,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[34042]},t[36013]={textureFormat:34041,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[36269]},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}))})),s_textureInternalFormatInfo=t}return s_textureInternalFormatInfo[t]}function getBytesPerElementForInternalFormat(t,e){const n=getTextureInternalFormatInfo(t);if(!n)throw"unknown internal format";const r=n.bytesPerElementMap[e];if(void 0===r)throw"unknown internal format";return r}function getFormatAndTypeForInternalFormat(t){const e=getTextureInternalFormatInfo(t);if(!e)throw"unknown internal format";return{format:e.textureFormat,type:e.type[0]}}function isPowerOf2(t){return 0==(t&t-1)}function canGenerateMipmap(t,e,n,r){if(!isWebGL2(t))return isPowerOf2(e)&&isPowerOf2(n);const i=getTextureInternalFormatInfo(r);if(!i)throw"unknown internal format";return i.colorRenderable&&i.textureFilterable}function canFilter(t){const e=getTextureInternalFormatInfo(t);if(!e)throw"unknown internal format";return e.textureFilterable}function getTextureTypeForArrayType(t,e,n){return isArrayBuffer$1(e)?getGLTypeForTypedArray(e):n||5121}function guessDimensions(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/(34067===e?6:1));t%1==0?(n=t,r=t):(n=i,r=1)}return{width:n,height:r}}function setPackState(t,e){void 0!==e.colorspaceConversion&&t.pixelStorei(37443,e.colorspaceConversion),void 0!==e.premultiplyAlpha&&t.pixelStorei(37441,e.premultiplyAlpha),void 0!==e.flipY&&t.pixelStorei(37440,e.flipY)}function setSkipStateToDefault(t){t.pixelStorei(3317,4),isWebGL2(t)&&(t.pixelStorei(3314,0),t.pixelStorei(32878,0),t.pixelStorei(3316,0),t.pixelStorei(3315,0),t.pixelStorei(32877,0))}function setTextureSamplerParameters(t,e,n,r){r.minMag&&(n.call(t,e,10241,r.minMag),n.call(t,e,10240,r.minMag)),r.min&&n.call(t,e,10241,r.min),r.mag&&n.call(t,e,10240,r.mag),r.wrap&&(n.call(t,e,10242,r.wrap),n.call(t,e,10243,r.wrap),(32879===e||isSampler(t,e))&&n.call(t,e,32882,r.wrap)),r.wrapR&&n.call(t,e,32882,r.wrapR),r.wrapS&&n.call(t,e,10242,r.wrapS),r.wrapT&&n.call(t,e,10243,r.wrapT),r.minLod&&n.call(t,e,33082,r.minLod),r.maxLod&&n.call(t,e,33083,r.maxLod),r.baseLevel&&n.call(t,e,33084,r.baseLevel),r.maxLevel&&n.call(t,e,33085,r.maxLevel)}function setTextureParameters(t,e,n){const r=n.target||3553;t.bindTexture(r,e),setTextureSamplerParameters(t,r,t.texParameteri,n)}function make1Pixel(t){return isArrayBuffer$1(t=t||defaults$1.textureColor)?t:new Uint8Array([255*t[0],255*t[1],255*t[2],255*t[3]])}function setTextureFilteringForSize(t,e,n,r,i,o){o=o||6408;const a=(n=n||defaults$1.textureOptions).target||3553;if(r=r||n.width,i=i||n.height,t.bindTexture(a,e),canGenerateMipmap(t,r,i,o))t.generateMipmap(a);else{const e=canFilter(o)?9729:9728;t.texParameteri(a,10241,e),t.texParameteri(a,10240,e),t.texParameteri(a,10242,33071),t.texParameteri(a,10243,33071)}}function shouldAutomaticallySetTextureFilteringForSize(t){return!0===t.auto||void 0===t.auto&&void 0===t.level}function getCubeFaceOrder(t,e){return(e=e||{}).cubeFaceOrder||[34069,34070,34071,34072,34073,34074]}function getCubeFacesWithNdx(t,e){const n=getCubeFaceOrder(t,e).map((function(t,e){return{face:t,ndx:e}}));return n.sort((function(t,e){return t.face-e.face})),n}function setTextureFromElement(t,e,n,r){const i=(r=r||defaults$1.textureOptions).target||3553,o=r.level||0;let a=n.width,l=n.height;const s=r.internalFormat||r.format||6408,c=getFormatAndTypeForInternalFormat(s),u=r.format||c.format,d=r.type||c.type;if(setPackState(t,r),t.bindTexture(i,e),34067===i){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=getShared2DContext();p?(p.canvas.width=m,p.canvas.height=m,a=m,l=m,getCubeFacesWithNdx(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):"undefined"!=typeof createImageBitmap&&(a=m,l=m,getCubeFacesWithNdx(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){setPackState(t,r),t.bindTexture(i,e),t.texImage2D(c.face,o,s,u,d,n),shouldAutomaticallySetTextureFilteringForSize(r)&&setTextureFilteringForSize(t,e,r,a,l,s)}))})))}else if(32879===i||35866===i){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(3317,1),t.pixelStorei(3314,n.width),t.pixelStorei(32878,0),t.pixelStorei(32877,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(3316,a),t.pixelStorei(3315,s),t.texSubImage3D(i,o,0,0,r,e,e,1,u,d,n)}setSkipStateToDefault(t)}else t.texImage2D(i,o,s,u,d,n);shouldAutomaticallySetTextureFilteringForSize(r)&&setTextureFilteringForSize(t,e,r,a,l,s),setTextureParameters(t,e,r)}function noop(){}function urlIsSameOrigin(t){if("undefined"!=typeof document){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 setToAnonymousIfUndefinedAndURLIsNotSameOrigin(t,e){return void 0!==e||urlIsSameOrigin(t)?e:"anonymous"}function loadImage(t,e,n){let r;if(n=n||noop,e=setToAnonymousIfUndefinedAndURLIsNotSameOrigin(t,e=void 0!==e?e:defaults$1.crossOrigin),"undefined"!=typeof Image){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;error(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("undefined"!=typeof ImageBitmap){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 isTexImageSource(t){return"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap||"undefined"!=typeof ImageData&&t instanceof ImageData||"undefined"!=typeof HTMLElement&&t instanceof HTMLElement}function loadAndUseImage(t,e,n){return isTexImageSource(t)?(setTimeout((function(){n(null,t)})),t):loadImage(t,e,n)}function setTextureTo1PixelColor(t,e,n){const r=(n=n||defaults$1.textureOptions).target||3553;if(t.bindTexture(r,e),!1===n.color)return;const i=make1Pixel(n.color);if(34067===r)for(let e=0;e<6;++e)t.texImage2D(34069+e,0,6408,1,1,0,6408,5121,i);else 32879===r||35866===r?t.texImage3D(r,0,6408,1,1,1,0,6408,5121,i):t.texImage2D(r,0,6408,1,1,0,6408,5121,i)}function loadTextureFromUrl(t,e,n,r){r=r||noop,setTextureTo1PixelColor(t,e,n=n||defaults$1.textureOptions);return loadAndUseImage((n=Object.assign({},n)).src,n.crossOrigin,(function(i,o){i?r(i,e,o):(setTextureFromElement(t,e,o,n),r(null,e,o))}))}function loadCubemapFromUrls(t,e,n,r){r=r||noop;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||6408,l=getFormatAndTypeForInternalFormat(a),s=n.format||l.format,c=n.type||5121,u=n.target||3553;if(34067!==u)throw"target must be TEXTURE_CUBE_MAP";setTextureTo1PixelColor(t,e,n),n=Object.assign({},n);let d=6;const h=[],m=getCubeFaceOrder(t,n);let f;f=i.map((function(i,l){return loadAndUseImage(i,n.crossOrigin,(p=m[l],function(i,l){--d,i?h.push(i):l.width!==l.height?h.push("cubemap face img is not a square: "+l.src):(setPackState(t,n),t.bindTexture(u,e),5===d?getCubeFaceOrder().forEach((function(e){t.texImage2D(e,o,a,s,c,l)})):t.texImage2D(p,o,a,s,c,l),shouldAutomaticallySetTextureFilteringForSize(n)&&t.generateMipmap(u)),0===d&&r(h.length?h:void 0,e,f)}));var p}))}function loadSlicesFromUrls(t,e,n,r){r=r||noop;const i=n.src,o=n.internalFormat||n.format||6408,a=getFormatAndTypeForInternalFormat(o),l=n.format||a.format,s=n.type||5121,c=n.target||35866;if(32879!==c&&35866!==c)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";setTextureTo1PixelColor(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 loadAndUseImage(i,n.crossOrigin,(y=a,function(i,a){if(--u,i)d.push(i);else{if(setPackState(t,n),t.bindTexture(c,e),g){g=!1,f=n.width||a.width,p=n.height||a.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,a)}else{let e,n=a;a.width===f&&a.height===p||(e=getShared2DContext(),n=e.canvas,e.canvas.width=f,e.canvas.height=p,e.drawImage(a,0,0,f,p)),t.texSubImage3D(c,m,0,0,y,f,p,1,l,s,n),e&&n===e.canvas&&(e.canvas.width=0,e.canvas.height=0)}shouldAutomaticallySetTextureFilteringForSize(n)&&t.generateMipmap(c)}0===u&&r(d.length?d:void 0,e,h)}));var y}))}function setTextureFromArray(t,e,n,r){const i=(r=r||defaults$1.textureOptions).target||3553;t.bindTexture(i,e);let o=r.width,a=r.height,l=r.depth;const s=r.level||0,c=r.internalFormat||r.format||6408,u=getFormatAndTypeForInternalFormat(c),d=r.format||u.format,h=r.type||getTextureTypeForArrayType(t,n,u.type);if(isArrayBuffer$1(n))n instanceof Uint8ClampedArray&&(n=new Uint8Array(n.buffer));else{const t=getTypedArrayTypeForGLType(h);n=new t(n)}const m=getBytesPerElementForInternalFormat(c,h),f=n.byteLength/m;if(f%1)throw"length wrong size for format: "+glEnumToString(t,d);let p;if(32879===i||35866===i)if(o||a||l)!o||a&&l?!a||o&&l?(p=guessDimensions(t,i,o,a,f/l),o=p.width,a=p.height):(p=guessDimensions(t,i,o,l,f/a),o=p.width,l=p.height):(p=guessDimensions(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=guessDimensions(t,i,o,a,f),o=p.width,a=p.height;if(setSkipStateToDefault(t),t.pixelStorei(3317,r.unpackAlignment||1),setPackState(t,r),34067===i){const e=f/6*(m/n.BYTES_PER_ELEMENT);getCubeFacesWithNdx(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 32879===i||35866===i?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 setEmptyTexture(t,e,n){const r=n.target||3553;t.bindTexture(r,e);const i=n.level||0,o=n.internalFormat||n.format||6408,a=getFormatAndTypeForInternalFormat(o),l=n.format||a.format,s=n.type||a.type;if(setPackState(t,n),34067===r)for(let e=0;e<6;++e)t.texImage2D(34069+e,i,o,n.width,n.height,0,l,s,null);else 32879===r||35866===r?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 createTexture(t,e,n){n=n||noop,e=e||defaults$1.textureOptions;const r=t.createTexture(),i=e.target||3553;let o=e.width||1,a=e.height||1;const l=e.internalFormat||6408;t.bindTexture(i,r),34067===i&&(t.texParameteri(i,10242,33071),t.texParameteri(i,10243,33071));let s=e.src;if(s)if("function"==typeof s&&(s=s(t,e)),"string"==typeof s)loadTextureFromUrl(t,r,e,n);else if(isArrayBuffer$1(s)||Array.isArray(s)&&("number"==typeof s[0]||Array.isArray(s[0])||isArrayBuffer$1(s[0]))){const n=setTextureFromArray(t,r,s,e);o=n.width,a=n.height}else Array.isArray(s)&&("string"==typeof s[0]||isTexImageSource(s[0]))?34067===i?loadCubemapFromUrls(t,r,e,n):loadSlicesFromUrls(t,r,e,n):(setTextureFromElement(t,r,s,e),o=s.width,a=s.height);else setEmptyTexture(t,r,e);return shouldAutomaticallySetTextureFilteringForSize(e)&&setTextureFilteringForSize(t,r,e,o,a,l),setTextureParameters(t,r,e),r}const error$1=error;function getElementById(t){return"undefined"!=typeof document&&document.getElementById?document.getElementById(t):null}const TEXTURE0=33984,ARRAY_BUFFER$1=34962,ELEMENT_ARRAY_BUFFER$1=34963,COMPILE_STATUS=35713,LINK_STATUS=35714,FRAGMENT_SHADER=35632,VERTEX_SHADER=35633,SEPARATE_ATTRIBS=35981,ACTIVE_UNIFORMS=35718,ACTIVE_ATTRIBUTES=35721,TRANSFORM_FEEDBACK_VARYINGS=35971,ACTIVE_UNIFORM_BLOCKS=35382,UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER=35396,UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER=35398,UNIFORM_BLOCK_DATA_SIZE=35392,UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES=35395,FLOAT$3=5126,FLOAT_VEC2=35664,FLOAT_VEC3=35665,FLOAT_VEC4=35666,INT$3=5124,INT_VEC2=35667,INT_VEC3=35668,INT_VEC4=35669,BOOL=35670,BOOL_VEC2=35671,BOOL_VEC3=35672,BOOL_VEC4=35673,FLOAT_MAT2=35674,FLOAT_MAT3=35675,FLOAT_MAT4=35676,SAMPLER_2D=35678,SAMPLER_CUBE=35680,SAMPLER_3D=35679,SAMPLER_2D_SHADOW=35682,FLOAT_MAT2x3=35685,FLOAT_MAT2x4=35686,FLOAT_MAT3x2=35687,FLOAT_MAT3x4=35688,FLOAT_MAT4x2=35689,FLOAT_MAT4x3=35690,SAMPLER_2D_ARRAY=36289,SAMPLER_2D_ARRAY_SHADOW=36292,SAMPLER_CUBE_SHADOW=36293,UNSIGNED_INT$3=5125,UNSIGNED_INT_VEC2=36294,UNSIGNED_INT_VEC3=36295,UNSIGNED_INT_VEC4=36296,INT_SAMPLER_2D=36298,INT_SAMPLER_3D=36299,INT_SAMPLER_CUBE=36300,INT_SAMPLER_2D_ARRAY=36303,UNSIGNED_INT_SAMPLER_2D=36306,UNSIGNED_INT_SAMPLER_3D=36307,UNSIGNED_INT_SAMPLER_CUBE=36308,UNSIGNED_INT_SAMPLER_2D_ARRAY=36311,TEXTURE_2D$1=3553,TEXTURE_CUBE_MAP$1=34067,TEXTURE_3D$1=32879,TEXTURE_2D_ARRAY$1=35866,typeMap={};function getBindPointForSamplerType(t,e){return typeMap[e].bindPoint}function floatSetter(t,e){return function(n){t.uniform1f(e,n)}}function floatArraySetter(t,e){return function(n){t.uniform1fv(e,n)}}function floatVec2Setter(t,e){return function(n){t.uniform2fv(e,n)}}function floatVec3Setter(t,e){return function(n){t.uniform3fv(e,n)}}function floatVec4Setter(t,e){return function(n){t.uniform4fv(e,n)}}function intSetter(t,e){return function(n){t.uniform1i(e,n)}}function intArraySetter(t,e){return function(n){t.uniform1iv(e,n)}}function intVec2Setter(t,e){return function(n){t.uniform2iv(e,n)}}function intVec3Setter(t,e){return function(n){t.uniform3iv(e,n)}}function intVec4Setter(t,e){return function(n){t.uniform4iv(e,n)}}function uintSetter(t,e){return function(n){t.uniform1ui(e,n)}}function uintArraySetter(t,e){return function(n){t.uniform1uiv(e,n)}}function uintVec2Setter(t,e){return function(n){t.uniform2uiv(e,n)}}function uintVec3Setter(t,e){return function(n){t.uniform3uiv(e,n)}}function uintVec4Setter(t,e){return function(n){t.uniform4uiv(e,n)}}function floatMat2Setter(t,e){return function(n){t.uniformMatrix2fv(e,!1,n)}}function floatMat3Setter(t,e){return function(n){t.uniformMatrix3fv(e,!1,n)}}function floatMat4Setter(t,e){return function(n){t.uniformMatrix4fv(e,!1,n)}}function floatMat23Setter(t,e){return function(n){t.uniformMatrix2x3fv(e,!1,n)}}function floatMat32Setter(t,e){return function(n){t.uniformMatrix3x2fv(e,!1,n)}}function floatMat24Setter(t,e){return function(n){t.uniformMatrix2x4fv(e,!1,n)}}function floatMat42Setter(t,e){return function(n){t.uniformMatrix4x2fv(e,!1,n)}}function floatMat34Setter(t,e){return function(n){t.uniformMatrix3x4fv(e,!1,n)}}function floatMat43Setter(t,e){return function(n){t.uniformMatrix4x3fv(e,!1,n)}}function samplerSetter(t,e,n,r){const i=getBindPointForSamplerType(t,e);return isWebGL2(t)?function(e){let o,a;isTexture(t,e)?(o=e,a=null):(o=e.texture,a=e.sampler),t.uniform1i(r,n),t.activeTexture(33984+n),t.bindTexture(i,o),t.bindSampler(n,a)}:function(e){t.uniform1i(r,n),t.activeTexture(33984+n),t.bindTexture(i,e)}}function samplerArraySetter(t,e,n,r,i){const o=getBindPointForSamplerType(t,e),a=new Int32Array(i);for(let t=0;t<i;++t)a[t]=n+t;return isWebGL2(t)?function(e){t.uniform1iv(r,a),e.forEach((function(e,r){let i,l;t.activeTexture(33984+a[r]),isTexture(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(33984+a[n]),t.bindTexture(o,e)}))}}function floatAttribSetter(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(34962,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribPointer(e,n.numComponents||n.size,n.type||5126,n.normalize||!1,n.stride||0,n.offset||0),t.vertexAttribDivisor&&t.vertexAttribDivisor(e,n.divisor||0)}}function intAttribSetter(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(34962,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribIPointer(e,n.numComponents||n.size,n.type||5124,n.stride||0,n.offset||0),t.vertexAttribDivisor&&t.vertexAttribDivisor(e,n.divisor||0)}}function uintAttribSetter(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(34962,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribIPointer(e,n.numComponents||n.size,n.type||5125,n.stride||0,n.offset||0),t.vertexAttribDivisor&&t.vertexAttribDivisor(e,n.divisor||0)}}function matAttribSetter(t,e,n){const r=n.size,i=n.count;return function(n){t.bindBuffer(34962,n.buffer);const o=n.size||n.numComponents||r,a=o/i,l=n.type||5126,s=typeMap[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)}}typeMap[5126]={Type:Float32Array,size:4,setter:floatSetter,arraySetter:floatArraySetter},typeMap[35664]={Type:Float32Array,size:8,setter:floatVec2Setter,cols:2},typeMap[35665]={Type:Float32Array,size:12,setter:floatVec3Setter,cols:3},typeMap[35666]={Type:Float32Array,size:16,setter:floatVec4Setter,cols:4},typeMap[5124]={Type:Int32Array,size:4,setter:intSetter,arraySetter:intArraySetter},typeMap[35667]={Type:Int32Array,size:8,setter:intVec2Setter,cols:2},typeMap[35668]={Type:Int32Array,size:12,setter:intVec3Setter,cols:3},typeMap[35669]={Type:Int32Array,size:16,setter:intVec4Setter,cols:4},typeMap[5125]={Type:Uint32Array,size:4,setter:uintSetter,arraySetter:uintArraySetter},typeMap[36294]={Type:Uint32Array,size:8,setter:uintVec2Setter,cols:2},typeMap[36295]={Type:Uint32Array,size:12,setter:uintVec3Setter,cols:3},typeMap[36296]={Type:Uint32Array,size:16,setter:uintVec4Setter,cols:4},typeMap[BOOL]={Type:Uint32Array,size:4,setter:intSetter,arraySetter:intArraySetter},typeMap[35671]={Type:Uint32Array,size:8,setter:intVec2Setter,cols:2},typeMap[35672]={Type:Uint32Array,size:12,setter:intVec3Setter,cols:3},typeMap[35673]={Type:Uint32Array,size:16,setter:intVec4Setter,cols:4},typeMap[35674]={Type:Float32Array,size:32,setter:floatMat2Setter,rows:2,cols:2},typeMap[35675]={Type:Float32Array,size:48,setter:floatMat3Setter,rows:3,cols:3},typeMap[35676]={Type:Float32Array,size:64,setter:floatMat4Setter,rows:4,cols:4},typeMap[35685]={Type:Float32Array,size:32,setter:floatMat23Setter,rows:2,cols:3},typeMap[35686]={Type:Float32Array,size:32,setter:floatMat24Setter,rows:2,cols:4},typeMap[35687]={Type:Float32Array,size:48,setter:floatMat32Setter,rows:3,cols:2},typeMap[35688]={Type:Float32Array,size:48,setter:floatMat34Setter,rows:3,cols:4},typeMap[35689]={Type:Float32Array,size:64,setter:floatMat42Setter,rows:4,cols:2},typeMap[35690]={Type:Float32Array,size:64,setter:floatMat43Setter,rows:4,cols:3},typeMap[35678]={Type:null,size:0,setter:samplerSetter,arraySetter:samplerArraySetter,bindPoint:3553},typeMap[35680]={Type:null,size:0,setter:samplerSetter,arraySetter:samplerArraySetter,bindPoint:34067},typeMap[35679]={Type:null,size:0,setter:samplerSetter,arraySetter:samplerArraySetter,bindPoint:32879},typeMap[35682]={Type:null,size:0,setter:samplerSetter,arraySetter:samplerArraySetter,bindPoint:3553},typeMap[36289]={Type:null,size:0,setter:samplerSetter,arraySetter:samplerArraySetter,bindPoint:35866},typeMap[36292]={Type:null,size:0,setter:samplerSetter,arraySetter:samplerArraySetter,bindPoint:35866},typeMap[36293]={Type:null,size:0,setter:samplerSetter,arraySetter:samplerArraySetter,bindPoint:34067},typeMap[36298]={Type:null,size:0,setter:samplerSetter,arraySetter:samplerArraySetter,bindPoint:3553},typeMap[36299]={Type:null,size:0,setter:samplerSetter,arraySetter:samplerArraySetter,bindPoint:32879},typeMap[36300]={Type:null,size:0,setter:samplerSetter,arraySetter:samplerArraySetter,bindPoint:34067},typeMap[36303]={Type:null,size:0,setter:samplerSetter,arraySetter:samplerArraySetter,bindPoint:35866},typeMap[36306]={Type:null,size:0,setter:samplerSetter,arraySetter:samplerArraySetter,bindPoint:3553},typeMap[36307]={Type:null,size:0,setter:samplerSetter,arraySetter:samplerArraySetter,bindPoint:32879},typeMap[36308]={Type:null,size:0,setter:samplerSetter,arraySetter:samplerArraySetter,bindPoint:34067},typeMap[36311]={Type:null,size:0,setter:samplerSetter,arraySetter:samplerArraySetter,bindPoint:35866};const attrTypeMap={};attrTypeMap[5126]={size:4,setter:floatAttribSetter},attrTypeMap[35664]={size:8,setter:floatAttribSetter},attrTypeMap[35665]={size:12,setter:floatAttribSetter},attrTypeMap[35666]={size:16,setter:floatAttribSetter},attrTypeMap[5124]={size:4,setter:intAttribSetter},attrTypeMap[35667]={size:8,setter:intAttribSetter},attrTypeMap[35668]={size:12,setter:intAttribSetter},attrTypeMap[35669]={size:16,setter:intAttribSetter},attrTypeMap[5125]={size:4,setter:uintAttribSetter},attrTypeMap[36294]={size:8,setter:uintAttribSetter},attrTypeMap[36295]={size:12,setter:uintAttribSetter},attrTypeMap[36296]={size:16,setter:uintAttribSetter},attrTypeMap[BOOL]={size:4,setter:intAttribSetter},attrTypeMap[35671]={size:8,setter:intAttribSetter},attrTypeMap[35672]={size:12,setter:intAttribSetter},attrTypeMap[35673]={size:16,setter:intAttribSetter},attrTypeMap[35674]={size:4,setter:matAttribSetter,count:2},attrTypeMap[35675]={size:9,setter:matAttribSetter,count:3},attrTypeMap[35676]={size:16,setter:matAttribSetter,count:4};const errorRE=/ERROR:\s*\d+:(\d+)/gi;function addLineNumbersWithError(t,e="",n=0){const r=[...e.matchAll(errorRE)],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 spaceRE=/^[ \t]*\n/;function prepShaderSource(t){let e=0;return spaceRE.test(t)&&(e=1,t=t.replace(spaceRE,"")),{lineOffset:e,shaderSource:t}}function reportError(t,e){return t.errorCallback(e),t.callback&&setTimeout((()=>{t.callback(`${e}\n${t.errors.join("\n")}`)})),null}function loadShader(t,e,n,r){const i=t.createShader(n);return t.shaderSource(i,prepShaderSource(e).shaderSource),t.compileShader(i),r.callback||checkShaderStatus(t,n,i,r.errorCallback)?i:(t.deleteShader(i),null)}function checkShaderStatus(t,e,n,r){r=r||error$1;const i=t.getShaderParameter(n,35713);if(!i){const i=t.getShaderInfoLog(n),{lineOffset:o,shaderSource:a}=prepShaderSource(t.getShaderSource(n));r(`${addLineNumbersWithError(a,i,o)}\nError compiling ${glEnumToString(t,e)}: ${i}`)}return i}function getProgramOptions(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)){if(t.errorCallback&&t.errors)return t;const e=t;n=e.errorCallback,t=e.attribLocations,r=e.transformFeedbackVaryings,i=e.transformFeedbackMode,o=e.callback}const a=n||error$1,l=[],s={errorCallback(t,...e){l.push(t),a(t,...e)},transformFeedbackVaryings:r,transformFeedbackMode:i,callback:o,errors:l};if(t){let n={};Array.isArray(t)?t.forEach((function(t,r){n[t]=e?e[r]:r})):n=t,s.attribLocations=n}return s}const defaultShaderType=["VERTEX_SHADER","FRAGMENT_SHADER"];function getShaderTypeFromScriptType(t,e){return e.indexOf("frag")>=0?35632:e.indexOf("vert")>=0?35633:void 0}function deleteShaders(t,e){e.forEach((function(e){t.deleteShader(e)}))}const wait=(t=0)=>new Promise((e=>setTimeout(e,t)));function createProgram(t,e,n,r,i){const o=getProgramOptions(n,r,i),a=[],l=[];for(let n=0;n<e.length;++n){let r=e[n];if("string"==typeof r){const e=getElementById(r),i=e?e.text:r;let a=t[defaultShaderType[n]];e&&e.type&&(a=getShaderTypeFromScriptType(t,e.type)||a),r=loadShader(t,i,a,o),l.push(r)}isShader(t,r)&&a.push(r)}if(a.length!==e.length)return deleteShaders(t,l),reportError(o,"not enough shaders for program");const s=t.createProgram();a.forEach((function(e){t.attachShader(s,e)})),o.attribLocations&&Object.keys(o.attribLocations).forEach((function(e){t.bindAttribLocation(s,o.attribLocations[e],e)}));let c=o.transformFeedbackVaryings;return c&&(c.attribs&&(c=c.attribs),Array.isArray(c)||(c=Object.keys(c)),t.transformFeedbackVaryings(s,c,o.transformFeedbackMode||35981)),t.linkProgram(s),o.callback?(checkForProgramLinkCompletionAsync(t,s,o),null):checkProgramStatus(t,s,o.errorCallback)?s:(t.deleteProgram(s),deleteShaders(t,l),null)}async function checkForProgramLinkCompletionAsync(t,e,n){const r=t.getExtension("KHR_parallel_shader_compile"),i=r?(t,e)=>t.getProgramParameter(e,r.COMPLETION_STATUS_KHR):()=>!0;let o=0;do{await wait(o),o=1e3/60}while(!i(t,e));const a=checkProgramStatus(t,e,n.errorCallback),l=a?void 0:n.errors.join("\n");if(!a){(n.errorCallback||error$1)(l),t.deleteProgram(e),e=null}n.callback(l,e)}function checkProgramStatus(t,e,n){n=n||error$1;const r=t.getProgramParameter(e,35714);if(!r){n(`Error in program linking: ${t.getProgramInfoLog(e)}`)}return r}function createProgramFromSources(t,e,n,r,i){const o=getProgramOptions(n,r,i),a=[];for(let n=0;n<e.length;++n){const r=loadShader(t,e[n],t[defaultShaderType[n]],o);if(!o.callback&&!r)return null;a.push(r)}return createProgram(t,a,o)}function isBuiltIn(t){const e=t.name;return e.startsWith("gl_")||e.startsWith("webgl_")}const tokenRE=/(\.|\[|]|\w+)/g,isDigit=t=>t>="0"&&t<="9";function addSetterToUniformTree(t,e,n,r){const i=t.split(tokenRE).filter((t=>""!==t));let o=0,a="";for(;;){const t=i[o++];a+=t;const s=(l=t[0])>="0"&&l<="9",c=s?parseInt(t):t;s&&(a+=i[o++]);if(o===i.length){n[c]=e;break}{const t=i[o++],e="["===t,l=n[c]||(e?[]:{});n[c]=l,n=l,r[a]=r[a]||function(t){return function(e){setUniformTree(t,e)}}(l),a+=t}}var l}function createUniformSetters(t,e){let n=0;function r(e,r,i){const o=r.name.endsWith("[0]"),a=r.type,l=typeMap[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,35718);for(let n=0;n<a;++n){const a=t.getActiveUniform(e,n);if(isBuiltIn(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,addSetterToUniformTree(l,t,o,i)}}return i}function createTransformFeedbackInfo(t,e){const n={},r=t.getProgramParameter(e,35971);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 createUniformBlockSpecFromProgram(t,e){const n=t.getProgramParameter(e,35718),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,35382);for(let n=0;n<a;++n){const r=t.getActiveUniformBlockName(e,n),i={index:t.getUniformBlockIndex(e,r),usedByVertexShader:t.getActiveUniformBlockParameter(e,n,35396),usedByFragmentShader:t.getActiveUniformBlockParameter(e,n,35398),size:t.getActiveUniformBlockParameter(e,n,35392),uniformIndices:t.getActiveUniformBlockParameter(e,n,35395)};i.used=i.usedByVertexShader||i.usedByFragmentShader,o[r]=i}return{blockSpecs:o,uniformData:r}}function setUniformTree(t,e){for(const n in e){const r=t[n];"function"==typeof r?r(e[n]):setUniformTree(t[n],e[n])}}function setUniforms(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)setUniforms(n,r[e])}else for(const t in r){const e=n[t];e&&e(r[t])}}}function createAttributeSetters(t,e){const n={},r=t.getProgramParameter(e,35721);for(let i=0;i<r;++i){const r=t.getActiveAttrib(e,i);if(isBuiltIn(r))continue;const o=t.getAttribLocation(e,r.name),a=attrTypeMap[r.type],l=a.setter(t,o,a);l.location=o,n[r.name]=l}return n}function setAttributes(t,e){for(const n in e){const r=t[n];r&&r(e[n])}}function setBuffersAndAttributes(t,e,n){n.vertexArrayObject?t.bindVertexArray(n.vertexArrayObject):(setAttributes(e.attribSetters||e,n.attribs),n.indices&&t.bindBuffer(34963,n.indices))}function createProgramInfoFromProgram(t,e){const n={program:e,uniformSetters:createUniformSetters(t,e),attribSetters:createAttributeSetters(t,e)};return isWebGL2(t)&&(n.uniformBlockSpec=createUniformBlockSpecFromProgram(t,e),n.transformFeedbackInfo=createTransformFeedbackInfo(t,e)),n}const notIdRE=/\s|{|}|;/;function createProgramInfo(t,e,n,r,i){const o=getProgramOptions(n,r,i),a=[];if(e=e.map((function(t){if(!notIdRE.test(t)){const e=getElementById(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 reportError(o,"");const l=o.callback;l&&(o.callback=(e,n)=>{let r;e||(r=createProgramInfoFromProgram(t,n)),l(e,r)});const s=createProgramFromSources(t,e,o);return s?createProgramInfoFromProgram(t,s):null}const TRIANGLES=4,UNSIGNED_SHORT$3=5123;function drawBufferInfo(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?5123:e.elementType,i,o):t.drawElements(n,s,void 0===l?5123:e.elementType,i):void 0!==o?t.drawArraysInstanced(n,i,s,o):t.drawArrays(n,i,s)}const FRAMEBUFFER=36160,RENDERBUFFER=36161,TEXTURE_2D$2=3553,UNSIGNED_BYTE$3=5121,DEPTH_COMPONENT$1=6402,RGBA$1=6408,DEPTH_COMPONENT24$1=33190,DEPTH_COMPONENT32F$1=36012,DEPTH24_STENCIL8$1=35056,DEPTH32F_STENCIL8$1=36013,RGBA4$1=32854,RGB5_A1$1=32855,RGB565$1=36194,DEPTH_COMPONENT16$1=33189,STENCIL_INDEX=6401,STENCIL_INDEX8=36168,DEPTH_STENCIL$1=34041,COLOR_ATTACHMENT0=36064,DEPTH_ATTACHMENT=36096,STENCIL_ATTACHMENT=36128,DEPTH_STENCIL_ATTACHMENT=33306,CLAMP_TO_EDGE$1=33071,LINEAR$1=9729,defaultAttachments=[{format:6408,type:5121,min:9729,wrap:33071},{format:34041}],attachmentsByFormat={};function getAttachmentPointForFormat(t,e){return attachmentsByFormat[t]||attachmentsByFormat[e]}attachmentsByFormat[34041]=33306,attachmentsByFormat[6401]=36128,attachmentsByFormat[36168]=36128,attachmentsByFormat[6402]=36096,attachmentsByFormat[33189]=36096,attachmentsByFormat[33190]=36096,attachmentsByFormat[36012]=36096,attachmentsByFormat[35056]=33306,attachmentsByFormat[36013]=33306;const renderbufferFormats={};function isRenderbufferFormat(t){return renderbufferFormats[t]}renderbufferFormats[32854]=!0,renderbufferFormats[32855]=!0,renderbufferFormats[36194]=!0,renderbufferFormats[34041]=!0,renderbufferFormats[33189]=!0,renderbufferFormats[6401]=!0,renderbufferFormats[36168]=!0;const MAX_COLOR_ATTACHMENT_POINTS=32;function isColorAttachmentPoint(t){return t>=36064&&t<36096}function createFramebufferInfo(t,e,n,r){const i=36160,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||defaultAttachments).forEach((function(e,o){let s=e.attachment;const c=e.samples,u=e.format;let d=e.attachmentPoint||getAttachmentPointForFormat(u,e.internalFormat);if(d||(d=36064+o),isColorAttachmentPoint(d)&&a.push(d),!s)if(void 0!==c||isRenderbufferFormat(u))s=t.createRenderbuffer(),t.bindRenderbuffer(36161,s),c>1?t.renderbufferStorageMultisample(36161,c,u,n,r):t.renderbufferStorage(36161,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||9729,i.mag=i.mag||i.minMag||9729,i.wrapS=i.wrapS||i.wrap||33071,i.wrapT=i.wrapT||i.wrap||33071),s=createTexture(t,i)}if(isRenderbuffer(t,s))t.framebufferRenderbuffer(i,d,36161,s);else{if(!isTexture(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||3553,s,e.level||0)}l.attachments.push(s)})),t.drawBuffers&&t.drawBuffers(a),l}function bindFramebufferInfo(t,e,n){n=n||36160,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 texture(t,e){return e instanceof WebGLTexture?e:createTexture(t,{src:e,wrap:t.CLAMP_TO_EDGE})}class WebglPipelineProgram{constructor(t){const{context:e,width:n,height:r}=t;this.context=e,this.options=t;const i=this.buildDefines();this.programInfo=createProgramInfo(this.context,[i+this.getVertexShader(),i+this.getFragmentShader()]),this.bufferInfo=createBufferInfoFromArrays(this.context,this.getBuffers()),this.fbi=createFramebufferInfo(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=createFramebufferInfo(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){const e=Date.now();let n=0;this.lastRun&&(n=(e-this.lastRun)/1e3),this.lastRun=e,this.context.viewport(0,0,this.context.canvas.width,this.context.canvas.height),this.context.useProgram(this.programInfo.program),setBuffersAndAttributes(this.context,this.programInfo,this.bufferInfo),setUniforms(this.programInfo,{delta:n,canvas:[this.context.canvas.width,this.context.canvas.height],...t}),bindFramebufferInfo(this.context,this.options.disableFramebuffer?null:this.fbi),drawBufferInfo(this.context,this.bufferInfo)}}var fragmentShader$8="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",vertexShader$8="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 BlurMasked extends WebglPipelineProgram{getDefines(){var t;return{RADIUS:null!=(t=this.options.radius)?t:1}}getFragmentShader(){return fragmentShader$8+this.createLoopFunction()}getVertexShader(){return vertexShader$8}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 }`}}var fragmentShader$7="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",vertexShader$7="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 Mix extends WebglPipelineProgram{getFragmentShader(){return fragmentShader$7}getVertexShader(){return vertexShader$7}}class WebglPipeline{constructor(){this.steps=[]}addStep(t){this.steps.push(t)}async run(){for(const t of this.steps)t.program.run(t.getUniforms())}resizeOutput(t,e){for(const n of this.steps)n.program.resizeOutput(t,e)}}class WebglTransformerPipeline extends WebglPipeline{constructor(){super(...arguments),this.preciseMaskEnabled=!1}}class BackgroundBlur extends WebglTransformerPipeline{constructor(t,e){super(),this.context=t;const n={context:t,height:t.canvas.height,width:t.canvas.width},r=new BlurMasked({...n,radius:e}),i=new Mix({...n,disableFramebuffer:!0});this.addStep({program:r,getUniforms:()=>({texture:texture(t,this.inputImage),mask:texture(t,this.inputMask)})}),this.addStep({program:i,getUniforms:()=>({background:texture(t,r.output),foreground:texture(t,this.inputImage),threshold:texture(t,this.inputMask)})})}setData(t,e){this.inputImage=t,this.inputMask=e}}class BackgroundImage extends WebglTransformerPipeline{constructor(t){super(),this.context=t,this.preciseMaskEnabled=!0;const e={context:t,height:t.canvas.height,width:t.canvas.width},n=new Mix({...e,disableFramebuffer:!0});this.addStep({program:n,getUniforms:()=>({background:texture(t,this.inputBackgroundImage),foreground:texture(t,this.inputImage),threshold:texture(t,this.inputMask)})})}setData(t,e){this.inputImage=t,this.inputMask=e}}class BackgroundVideo extends BackgroundImage{constructor(){super(...arguments),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?void 0:e.value)&&(this.inputBackgroundImage=await createImageBitmap(e.value),e.value.close())}}var fragmentShader$6="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",vertexShader$6="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",BLUR_TYPE=(t=>(t[t.LINEAR=0]="LINEAR",t[t.GAUSSIAN=1]="GAUSSIAN",t))(BLUR_TYPE||{});class Blur extends WebglPipelineProgram{getDefines(){var t;return{RADIUS:null!=(t=this.options.radius)?t:1}}getFragmentShader(){return fragmentShader$6+this.createLoopFunction()}getVertexShader(){return vertexShader$6}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 ForegroundBlur extends WebglTransformerPipeline{constructor(t,e){super(),this.context=t;const n={context:t,height:t.canvas.height,width:t.canvas.width},r=new Blur({...n,radius:e,type:BLUR_TYPE.GAUSSIAN}),i=new Mix({...n,disableFramebuffer:!0});this.addStep({program:r,getUniforms:()=>({texture:texture(t,this.inputImage)})}),this.addStep({program:i,getUniforms:()=>({background:texture(t,this.inputImage),foreground:texture(t,r.output),threshold:texture(t,this.inputMask)})})}setData(t,e){this.inputImage=t,this.inputMask=e}}class WebglPipelineProgramDoubleBuffer extends WebglPipelineProgram{constructor(t){super(t),this.fbi2=createFramebufferInfo(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=createFramebufferInfo(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],t,e)}}var fragmentShader$5="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",vertexShader$5="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 Flickering extends WebglPipelineProgramDoubleBuffer{getFragmentShader(){return fragmentShader$5}getVertexShader(){return vertexShader$5}}var fragmentShader$4="#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}",vertexShader$4="#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 JointBilateral extends WebglPipelineProgram{getFragmentShader(){return fragmentShader$4}getVertexShader(){return vertexShader$4}}var fragmentShader$3="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",vertexShader$3="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 MinimumSurface extends WebglPipelineProgram{getFragmentShader(){return fragmentShader$3}getVertexShader(){return vertexShader$3}}var fragmentShader$2="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",vertexShader$2="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 Smooth extends WebglPipelineProgramDoubleBuffer{getFragmentShader(){return fragmentShader$2}getVertexShader(){return vertexShader$2}}var fragmentShader$1="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",vertexShader$1="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 Track extends WebglPipelineProgramDoubleBuffer{getFragmentShader(){return fragmentShader$1}getVertexShader(){return vertexShader$1}}class ImproveSegmentationMask extends WebglPipeline{constructor(t,e,n){super(),this.context=t,this.options={currentThresholdMinimum:0,currentThresholdMaximum:1,previousThresholdMinimum:0,previousThresholdMaximum:1,thresholdMinimum:0,thresholdMaximum:1,thresholdFactor:1};const r={context:t,height:n,width:e},i=new Flickering(r),o=new Blur({...r,radius:1,type:BLUR_TYPE.GAUSSIAN}),a=new Track(r),l=new Smooth(r),s=new MinimumSurface(r),c=new JointBilateral({...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:texture(t,this.inputImage),image_before:texture(t,this.previousInputImage),mask_now:texture(t,this.inputMask),mask_before:texture(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:texture(t,this.inputMask),threshold:texture(t,i.output)})}),this.addStep({program:s,getUniforms:()=>({texture:texture(t,a.output)})}),this.addStep({program:l,getUniforms:()=>({texture:texture(t,s.output)})}),this.addStep({program:o,getUniforms:()=>({texture:texture(t,l.output)})}),this.addStep({program:c,getUniforms:()=>({input_frame:texture(t,this.inputImage),segmentation_mask:texture(t,this.inputMask),threshold:texture(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}}var fragmentShader="precision mediump float;\n\nvarying vec2 _texture_coord;\nuniform sampler2D texture;\n\nvoid main() { gl_FragColor = texture2D(texture, _texture_coord); }\n",vertexShader="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 RenderTexture extends WebglPipelineProgram{getFragmentShader(){return fragmentShader}getVertexShader(){return vertexShader}}class ResizeImage extends WebglPipeline{constructor(t,e,n){super(),this.context=t;const r={context:t,height:n,width:e};this.addStep({program:new RenderTexture({...r,disableFramebuffer:!0}),getUniforms:()=>({texture:texture(t,this.inputImage),invert_y:!0})})}setData(t){this.inputImage=t}}class ResizeFilter{constructor(t){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 ResizeImage(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 BackgroundFilter{constructor(t){this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("webgl2"),this.canvas.width=t.foregroundWidth,this.canvas.height=t.foregroundHeight,this.improveMaskSegmentation=new ImproveSegmentationMask(this.context,t.maskWidth,t.maskHeight),this.backgroundImage=new BackgroundImage(this.context),this.backgroundVideo=new BackgroundVideo(this.context),this.backgroundResizer=new ResizeFilter({width:t.foregroundWidth,height:t.foregroundHeight})}setBackgroundOptions(t){switch(t.transformerType){case"BackgroundBlur":this.activePipeline=new BackgroundBlur(this.context,this.getBlurSize(t.radius));break;case"SilhouetteBlur":this.activePipeline=new ForegroundBlur(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;if(this.activePipeline&&t.width&&(null==e?void 0:e.width)){let l=e;((null==(n=this.options)?void 0:n.selfieSegmentationType)&&"PRECISE"===(null==(r=this.options)?void 0:r.selfieSegmentationType)||!(null==(i=this.options)?void 0:i.selfieSegmentationType)&&this.activePipeline.preciseMaskEnabled)&&(this.improveMaskSegmentation.setData(t,e),this.improveMaskSegmentation.run(),l=this.improveMaskSegmentation.output),null==(o=this.activePipeline)||o.setData(t,l),null==(a=this.activePipeline)||a.run()}}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))}getBlurSize(t=BlurRadius.Low){switch(t){case BlurRadius.Low:return 5;case BlurRadius.High:return 12}return t}}class BackgroundTransformer{constructor(){this.selfieSegmentation=new SelfieSegmentation,this.previousDimensions={width:0,height:0}}async init(t){await this.selfieSegmentation.init(t.wasmAssetUriPath,t.tfliteAssetUriPath);const{width:e,height:n}=this.selfieSegmentation.getOutputDimensions();this.backgroundFilter=new BackgroundFilter({foregroundWidth:1,foregroundHeight:1,maskWidth:e,maskHeight:n})}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)}}const _ProcessorWorker=class{constructor(){this.backgroundTransformer=new BackgroundTransformer,this.mediaProcessor=new MediaProcessor,this.rate=30}async init(t){await this.backgroundTransformer.init(t),await this.mediaProcessor.setTransformers([this.backgroundTransformer]),this.mediaProcessor.setTrackExpectedRate(this.rate),this.mediaProcessor.onAny(((t,e)=>{var n;null==(n=this.resolveOnMediaProcessor)||n.call(this,{name:t,data:e})}))}async onMediaProcessorEvent(){return await new Promise((t=>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){setVonageMetadata(t)}};let ProcessorWorker=_ProcessorWorker;A("ProcessorWorker",_ProcessorWorker);const encodedJs="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBIZT0ocj0+KHJbci5JTklUPTBdPSJJTklUIixyW3IuRk9SV0FSRD0xXT0iRk9SV0FSRCIscltyLlRFUk1JTkFURT0yXT0iVEVSTUlOQVRFIixyKSkoSGV8fHt9KTtmdW5jdGlvbiBqaShyKXtyZXR1cm5bSW1hZ2VCaXRtYXAsUmVhZGFibGVTdHJlYW0sV3JpdGFibGVTdHJlYW1dLnNvbWUoZT0+ciBpbnN0YW5jZW9mIGUpfWZ1bmN0aW9uIE90KHIsZSl7Y29uc3R7aWQ6dH09cixuPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07cG9zdE1lc3NhZ2Uoe2lkOnQscmVzdWx0OmV9LG4uZmlsdGVyKGk9PmppKGkpKSl9YXN5bmMgZnVuY3Rpb24gcWkocixlKXtjb25zdHtmdW5jdGlvbk5hbWU6dCxhcmdzOm59PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtpZighdCl0aHJvdyJtaXNzaW5nIGZ1bmN0aW9uIG5hbWUgdG8gY2FsbCI7aWYoIWUuaW5zdGFuY2VbdF0pdGhyb3dgdW5kZWZpbmVkIGZ1bmN0aW9uIFske3R9XSBpbiBjbGFzcyAke2UuaW5zdGFuY2UuY29uc3RydWN0b3Iud29ya2VySWR9YDtPdChyLGF3YWl0IGUuaW5zdGFuY2VbdF0oLi4ubiE9bnVsbD9uOltdKSl9ZnVuY3Rpb24ga3IoKXtyZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlfWNvbnN0IExyPXt9O2Z1bmN0aW9uIFhpKHIsZSl7ZS53b3JrZXJJZD1yLGtyKCkmJihMcltlLndvcmtlcklkXT1lKX1mdW5jdGlvbiBZaShyLGUpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBjbGFzc05hbWUgd2hpbGUgaW5pdGlhbGl6aW5nIHdvcmtlciI7Y29uc3RbdF09ci5hcmdzLG49THJbdF07aWYobillLmluc3RhbmNlPW5ldyBuKHIuYXJncy5zbGljZSgxKSk7ZWxzZSB0aHJvd2B1bmtub3duIHdvcmtlciBjbGFzcyAke3R9YDtPdChyLHR5cGVvZiBlLmluc3RhbmNlIT09dm9pZCAwKX1hc3luYyBmdW5jdGlvbiBLaShyLGUpe2NvbnN0e2FyZ3M6dH09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2xldCBuO2UuaW5zdGFuY2UudGVybWluYXRlJiYobj1hd2FpdCBlLmluc3RhbmNlLnRlcm1pbmF0ZSguLi50IT1udWxsP3Q6W10pKSxPdChyLG4pfWZ1bmN0aW9uIEppKCl7Y29uc3Qgcj17fTtvbm1lc3NhZ2U9YXN5bmMgZT0+e2NvbnN0IHQ9ZS5kYXRhO3N3aXRjaCh0LnR5cGUpe2Nhc2UgSGUuSU5JVDpZaSh0LHIpO2JyZWFrO2Nhc2UgSGUuRk9SV0FSRDpxaSh0LHIpO2JyZWFrO2Nhc2UgSGUuVEVSTUlOQVRFOktpKHQscik7YnJlYWt9fX1rcigpJiZKaSgpO2NsYXNzIFp7fVoudXBkYXRlcz17dHJhbnNmb3JtZXJfbmV3OiJOZXcgdHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyX251bGw6Ik51bGwgdHJhbnNmb3JtZXIifSxaLmVycm9ycz17dHJhbnNmb3JtZXJfbm9uZToiTm8gdHJhbnNmb3JtZXJzIHByb3ZpZGVkIix0cmFuc2Zvcm1lcl9zdGFydDoiQ2Fubm90IHN0YXJ0IHRyYW5zZm9ybWVyIix0cmFuc2Zvcm1lcl90cmFuc2Zvcm06IkNhbm5vdCB0cmFuc2Zvcm0gZnJhbWUiLHRyYW5zZm9ybWVyX2ZsdXNoOiJDYW5ub3QgZmx1c2ggdHJhbnNmb3JtZXIiLHJlYWRhYmxlX251bGw6IlJlYWRhYmxlIGlzIG51bGwiLHdyaXRhYmxlX251bGw6IldyaXRhYmxlIGlzIG51bGwifTt2YXIgTXQ9e2V4cG9ydHM6e319LCRyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxvPTA7bzxpLmxlbmd0aDtvKyspaVtvXT1hcmd1bWVudHNbb107cmV0dXJuIGUuYXBwbHkodCxpKX19LFFpPSRyLHRlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gTnQocil7cmV0dXJuIEFycmF5LmlzQXJyYXkocil9ZnVuY3Rpb24gVXQocil7cmV0dXJuIHR5cGVvZiByPT0idW5kZWZpbmVkIn1mdW5jdGlvbiBaaShyKXtyZXR1cm4gciE9PW51bGwmJiFVdChyKSYmci5jb25zdHJ1Y3RvciE9PW51bGwmJiFVdChyLmNvbnN0cnVjdG9yKSYmdHlwZW9mIHIuY29uc3RydWN0b3IuaXNCdWZmZXI9PSJmdW5jdGlvbiImJnIuY29uc3RydWN0b3IuaXNCdWZmZXIocil9ZnVuY3Rpb24gR3Iocil7cmV0dXJuIHRlLmNhbGwocik9PT0iW29iamVjdCBBcnJheUJ1ZmZlcl0ifWZ1bmN0aW9uIGVvKHIpe3JldHVybiB0ZS5jYWxsKHIpPT09IltvYmplY3QgRm9ybURhdGFdIn1mdW5jdGlvbiB0byhyKXt2YXIgZTtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyIT0idW5kZWZpbmVkIiYmQXJyYXlCdWZmZXIuaXNWaWV3P2U9QXJyYXlCdWZmZXIuaXNWaWV3KHIpOmU9ciYmci5idWZmZXImJkdyKHIuYnVmZmVyKSxlfWZ1bmN0aW9uIHJvKHIpe3JldHVybiB0eXBlb2Ygcj09InN0cmluZyJ9ZnVuY3Rpb24gbm8ocil7cmV0dXJuIHR5cGVvZiByPT0ibnVtYmVyIn1mdW5jdGlvbiB6cihyKXtyZXR1cm4gciE9PW51bGwmJnR5cGVvZiByPT0ib2JqZWN0In1mdW5jdGlvbiBWZShyKXtpZih0ZS5jYWxsKHIpIT09IltvYmplY3QgT2JqZWN0XSIpcmV0dXJuITE7dmFyIGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpO3JldHVybiBlPT09bnVsbHx8ZT09PU9iamVjdC5wcm90b3R5cGV9ZnVuY3Rpb24gaW8ocil7cmV0dXJuIHRlLmNhbGwocik9PT0iW29iamVjdCBEYXRlXSJ9ZnVuY3Rpb24gb28ocil7cmV0dXJuIHRlLmNhbGwocik9PT0iW29iamVjdCBGaWxlXSJ9ZnVuY3Rpb24gc28ocil7cmV0dXJuIHRlLmNhbGwocik9PT0iW29iamVjdCBCbG9iXSJ9ZnVuY3Rpb24gSHIocil7cmV0dXJuIHRlLmNhbGwocik9PT0iW29iamVjdCBGdW5jdGlvbl0ifWZ1bmN0aW9uIGFvKHIpe3JldHVybiB6cihyKSYmSHIoci5waXBlKX1mdW5jdGlvbiB1byhyKXtyZXR1cm4gdGUuY2FsbChyKT09PSJbb2JqZWN0IFVSTFNlYXJjaFBhcmFtc10ifWZ1bmN0aW9uIGNvKHIpe3JldHVybiByLnRyaW0/ci50cmltKCk6ci5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9ZnVuY3Rpb24gZm8oKXtyZXR1cm4gdHlwZW9mIG5hdmlnYXRvciE9InVuZGVmaW5lZCImJihuYXZpZ2F0b3IucHJvZHVjdD09PSJSZWFjdE5hdGl2ZSJ8fG5hdmlnYXRvci5wcm9kdWN0PT09Ik5hdGl2ZVNjcmlwdCJ8fG5hdmlnYXRvci5wcm9kdWN0PT09Ik5TIik/ITE6dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJnR5cGVvZiBkb2N1bWVudCE9InVuZGVmaW5lZCJ9ZnVuY3Rpb24gQnQocixlKXtpZighKHI9PT1udWxsfHx0eXBlb2Ygcj09InVuZGVmaW5lZCIpKWlmKHR5cGVvZiByIT0ib2JqZWN0IiYmKHI9W3JdKSxOdChyKSlmb3IodmFyIHQ9MCxuPXIubGVuZ3RoO3Q8bjt0KyspZS5jYWxsKG51bGwsclt0XSx0LHIpO2Vsc2UgZm9yKHZhciBpIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsaSkmJmUuY2FsbChudWxsLHJbaV0saSxyKX1mdW5jdGlvbiBrdCgpe3ZhciByPXt9O2Z1bmN0aW9uIGUoaSxvKXtWZShyW29dKSYmVmUoaSk/cltvXT1rdChyW29dLGkpOlZlKGkpP3Jbb109a3Qoe30saSk6TnQoaSk/cltvXT1pLnNsaWNlKCk6cltvXT1pfWZvcih2YXIgdD0wLG49YXJndW1lbnRzLmxlbmd0aDt0PG47dCsrKUJ0KGFyZ3VtZW50c1t0XSxlKTtyZXR1cm4gcn1mdW5jdGlvbiBsbyhyLGUsdCl7cmV0dXJuIEJ0KGUsZnVuY3Rpb24oaSxvKXt0JiZ0eXBlb2YgaT09ImZ1bmN0aW9uIj9yW29dPVFpKGksdCk6cltvXT1pfSkscn1mdW5jdGlvbiBtbyhyKXtyZXR1cm4gci5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihyPXIuc2xpY2UoMSkpLHJ9dmFyICQ9e2lzQXJyYXk6TnQsaXNBcnJheUJ1ZmZlcjpHcixpc0J1ZmZlcjpaaSxpc0Zvcm1EYXRhOmVvLGlzQXJyYXlCdWZmZXJWaWV3OnRvLGlzU3RyaW5nOnJvLGlzTnVtYmVyOm5vLGlzT2JqZWN0OnpyLGlzUGxhaW5PYmplY3Q6VmUsaXNVbmRlZmluZWQ6VXQsaXNEYXRlOmlvLGlzRmlsZTpvbyxpc0Jsb2I6c28saXNGdW5jdGlvbjpIcixpc1N0cmVhbTphbyxpc1VSTFNlYXJjaFBhcmFtczp1byxpc1N0YW5kYXJkQnJvd3NlckVudjpmbyxmb3JFYWNoOkJ0LG1lcmdlOmt0LGV4dGVuZDpsbyx0cmltOmNvLHN0cmlwQk9NOm1vfSx4ZT0kO2Z1bmN0aW9uIFZyKHIpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQocikucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfXZhciBXcj1mdW5jdGlvbihlLHQsbil7aWYoIXQpcmV0dXJuIGU7dmFyIGk7aWYobilpPW4odCk7ZWxzZSBpZih4ZS5pc1VSTFNlYXJjaFBhcmFtcyh0KSlpPXQudG9TdHJpbmcoKTtlbHNle3ZhciBvPVtdO3hlLmZvckVhY2godCxmdW5jdGlvbih1LGYpe3U9PT1udWxsfHx0eXBlb2YgdT09InVuZGVmaW5lZCJ8fCh4ZS5pc0FycmF5KHUpP2Y9ZisiW10iOnU9W3VdLHhlLmZvckVhY2godSxmdW5jdGlvbihkKXt4ZS5pc0RhdGUoZCk/ZD1kLnRvSVNPU3RyaW5nKCk6eGUuaXNPYmplY3QoZCkmJihkPUpTT04uc3RyaW5naWZ5KGQpKSxvLnB1c2goVnIoZikrIj0iK1ZyKGQpKX0pKX0pLGk9by5qb2luKCImIil9aWYoaSl7dmFyIHM9ZS5pbmRleE9mKCIjIik7cyE9PS0xJiYoZT1lLnNsaWNlKDAscykpLGUrPShlLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK2l9cmV0dXJuIGV9LGhvPSQ7ZnVuY3Rpb24gV2UoKXt0aGlzLmhhbmRsZXJzPVtdfVdlLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6bj9uLnN5bmNocm9ub3VzOiExLHJ1bldoZW46bj9uLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9LFdlLnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX0sV2UucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7aG8uZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKG4pe24hPT1udWxsJiZlKG4pfSl9O3ZhciBwbz1XZSx5bz0kLF9vPWZ1bmN0aW9uKGUsdCl7eW8uZm9yRWFjaChlLGZ1bmN0aW9uKGksbyl7byE9PXQmJm8udG9VcHBlckNhc2UoKT09PXQudG9VcHBlckNhc2UoKSYmKGVbdF09aSxkZWxldGUgZVtvXSl9KX0sanI9ZnVuY3Rpb24oZSx0LG4saSxvKXtyZXR1cm4gZS5jb25maWc9dCxuJiYoZS5jb2RlPW4pLGUucmVxdWVzdD1pLGUucmVzcG9uc2U9byxlLmlzQXhpb3NFcnJvcj0hMCxlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzp0aGlzLmNvbmZpZyxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19LGV9LHhvPWpyLHFyPWZ1bmN0aW9uKGUsdCxuLGksbyl7dmFyIHM9bmV3IEVycm9yKGUpO3JldHVybiB4byhzLHQsbixpLG8pfSxibz1xcixnbz1mdW5jdGlvbihlLHQsbil7dmFyIGk9bi5jb25maWcudmFsaWRhdGVTdGF0dXM7IW4uc3RhdHVzfHwhaXx8aShuLnN0YXR1cyk/ZShuKTp0KGJvKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrbi5zdGF0dXMsbi5jb25maWcsbnVsbCxuLnJlcXVlc3QsbikpfSxqZT0kLHZvPWplLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXtyZXR1cm57d3JpdGU6ZnVuY3Rpb24odCxuLGksbyxzLGEpe3ZhciB1PVtdO3UucHVzaCh0KyI9IitlbmNvZGVVUklDb21wb25lbnQobikpLGplLmlzTnVtYmVyKGkpJiZ1LnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShpKS50b0dNVFN0cmluZygpKSxqZS5pc1N0cmluZyhvKSYmdS5wdXNoKCJwYXRoPSIrbyksamUuaXNTdHJpbmcocykmJnUucHVzaCgiZG9tYWluPSIrcyksYT09PSEwJiZ1LnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT11LmpvaW4oIjsgIil9LHJlYWQ6ZnVuY3Rpb24odCl7dmFyIG49ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK3QrIik9KFteO10qKSIpKTtyZXR1cm4gbj9kZWNvZGVVUklDb21wb25lbnQoblszXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKHQpe3RoaXMud3JpdGUodCwiIixEYXRlLm5vdygpLTg2NGU1KX19fSgpOmZ1bmN0aW9uKCl7cmV0dXJue3dyaXRlOmZ1bmN0aW9uKCl7fSxyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHJlbW92ZTpmdW5jdGlvbigpe319fSgpLEVvPWZ1bmN0aW9uKGUpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoZSl9LFRvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/ZS5yZXBsYWNlKC9cLyskLywiIikrIi8iK3QucmVwbGFjZSgvXlwvKy8sIiIpOmV9LEFvPUVvLHdvPVRvLFJvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJiFBbyh0KT93byhlLHQpOnR9LEx0PSQsU289WyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSxJbz1mdW5jdGlvbihlKXt2YXIgdD17fSxuLGksbztyZXR1cm4gZSYmTHQuZm9yRWFjaChlLnNwbGl0KGAKYCksZnVuY3Rpb24oYSl7aWYobz1hLmluZGV4T2YoIjoiKSxuPUx0LnRyaW0oYS5zdWJzdHIoMCxvKSkudG9Mb3dlckNhc2UoKSxpPUx0LnRyaW0oYS5zdWJzdHIobysxKSksbil7aWYodFtuXSYmU28uaW5kZXhPZihuKT49MClyZXR1cm47bj09PSJzZXQtY29va2llIj90W25dPSh0W25dP3Rbbl06W10pLmNvbmNhdChbaV0pOnRbbl09dFtuXT90W25dKyIsICIraTppfX0pLHR9LFhyPSQsRm89WHIuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT9mdW5jdGlvbigpe3ZhciBlPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksbjtmdW5jdGlvbiBpKG8pe3ZhciBzPW87cmV0dXJuIGUmJih0LnNldEF0dHJpYnV0ZSgiaHJlZiIscykscz10LmhyZWYpLHQuc2V0QXR0cmlidXRlKCJocmVmIixzKSx7aHJlZjp0LmhyZWYscHJvdG9jb2w6dC5wcm90b2NvbD90LnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDp0Lmhvc3Qsc2VhcmNoOnQuc2VhcmNoP3Quc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6dC5oYXNoP3QuaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOnQuaG9zdG5hbWUscG9ydDp0LnBvcnQscGF0aG5hbWU6dC5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/dC5wYXRobmFtZToiLyIrdC5wYXRobmFtZX19cmV0dXJuIG49aSh3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24ocyl7dmFyIGE9WHIuaXNTdHJpbmcocyk/aShzKTpzO3JldHVybiBhLnByb3RvY29sPT09bi5wcm90b2NvbCYmYS5ob3N0PT09bi5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKTtmdW5jdGlvbiAkdChyKXt0aGlzLm1lc3NhZ2U9cn0kdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQ2FuY2VsIisodGhpcy5tZXNzYWdlPyI6ICIrdGhpcy5tZXNzYWdlOiIiKX0sJHQucHJvdG90eXBlLl9fQ0FOQ0VMX189ITA7dmFyIHFlPSR0LFhlPSQsUG89Z28sRG89dm8sQ289V3IsT289Um8sTW89SW8sTm89Rm8sR3Q9cXIsVW89S2UsQm89cWUsWXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89ZS5kYXRhLHM9ZS5oZWFkZXJzLGE9ZS5yZXNwb25zZVR5cGUsdTtmdW5jdGlvbiBmKCl7ZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZSh1KSxlLnNpZ25hbCYmZS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHUpfVhlLmlzRm9ybURhdGEobykmJmRlbGV0ZSBzWyJDb250ZW50LVR5cGUiXTt2YXIgYz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoZS5hdXRoKXt2YXIgZD1lLmF1dGgudXNlcm5hbWV8fCIiLHA9ZS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlLmF1dGgucGFzc3dvcmQpKToiIjtzLkF1dGhvcml6YXRpb249IkJhc2ljICIrYnRvYShkKyI6IitwKX12YXIgeT1PbyhlLmJhc2VVUkwsZS51cmwpO2Mub3BlbihlLm1ldGhvZC50b1VwcGVyQ2FzZSgpLENvKHksZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKSwhMCksYy50aW1lb3V0PWUudGltZW91dDtmdW5jdGlvbiBtKCl7aWYoISFjKXt2YXIgYj0iZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGM/TW8oYy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk6bnVsbCxnPSFhfHxhPT09InRleHQifHxhPT09Impzb24iP2MucmVzcG9uc2VUZXh0OmMucmVzcG9uc2UsVD17ZGF0YTpnLHN0YXR1czpjLnN0YXR1cyxzdGF0dXNUZXh0OmMuc3RhdHVzVGV4dCxoZWFkZXJzOmIsY29uZmlnOmUscmVxdWVzdDpjfTtQbyhmdW5jdGlvbihMKXtuKEwpLGYoKX0sZnVuY3Rpb24oTCl7aShMKSxmKCl9LFQpLGM9bnVsbH19aWYoIm9ubG9hZGVuZCJpbiBjP2Mub25sb2FkZW5kPW06Yy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshY3x8Yy5yZWFkeVN0YXRlIT09NHx8Yy5zdGF0dXM9PT0wJiYhKGMucmVzcG9uc2VVUkwmJmMucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KG0pfSxjLm9uYWJvcnQ9ZnVuY3Rpb24oKXshY3x8KGkoR3QoIlJlcXVlc3QgYWJvcnRlZCIsZSwiRUNPTk5BQk9SVEVEIixjKSksYz1udWxsKX0sYy5vbmVycm9yPWZ1bmN0aW9uKCl7aShHdCgiTmV0d29yayBFcnJvciIsZSxudWxsLGMpKSxjPW51bGx9LGMub250aW1lb3V0PWZ1bmN0aW9uKCl7dmFyIGc9ZS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrZS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLFQ9ZS50cmFuc2l0aW9uYWx8fFVvLnRyYW5zaXRpb25hbDtlLnRpbWVvdXRFcnJvck1lc3NhZ2UmJihnPWUudGltZW91dEVycm9yTWVzc2FnZSksaShHdChnLGUsVC5jbGFyaWZ5VGltZW91dEVycm9yPyJFVElNRURPVVQiOiJFQ09OTkFCT1JURUQiLGMpKSxjPW51bGx9LFhlLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpe3ZhciBfPShlLndpdGhDcmVkZW50aWFsc3x8Tm8oeSkpJiZlLnhzcmZDb29raWVOYW1lP0RvLnJlYWQoZS54c3JmQ29va2llTmFtZSk6dm9pZCAwO18mJihzW2UueHNyZkhlYWRlck5hbWVdPV8pfSJzZXRSZXF1ZXN0SGVhZGVyImluIGMmJlhlLmZvckVhY2gocyxmdW5jdGlvbihnLFQpe3R5cGVvZiBvPT0idW5kZWZpbmVkIiYmVC50b0xvd2VyQ2FzZSgpPT09ImNvbnRlbnQtdHlwZSI/ZGVsZXRlIHNbVF06Yy5zZXRSZXF1ZXN0SGVhZGVyKFQsZyl9KSxYZS5pc1VuZGVmaW5lZChlLndpdGhDcmVkZW50aWFscyl8fChjLndpdGhDcmVkZW50aWFscz0hIWUud2l0aENyZWRlbnRpYWxzKSxhJiZhIT09Impzb24iJiYoYy5yZXNwb25zZVR5cGU9ZS5yZXNwb25zZVR5cGUpLHR5cGVvZiBlLm9uRG93bmxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmYy5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vbkRvd25sb2FkUHJvZ3Jlc3MpLHR5cGVvZiBlLm9uVXBsb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmMudXBsb2FkJiZjLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vblVwbG9hZFByb2dyZXNzKSwoZS5jYW5jZWxUb2tlbnx8ZS5zaWduYWwpJiYodT1mdW5jdGlvbihiKXshY3x8KGkoIWJ8fGImJmIudHlwZT9uZXcgQm8oImNhbmNlbGVkIik6YiksYy5hYm9ydCgpLGM9bnVsbCl9LGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKHUpLGUuc2lnbmFsJiYoZS5zaWduYWwuYWJvcnRlZD91KCk6ZS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHUpKSksb3x8KG89bnVsbCksYy5zZW5kKG8pfSl9LEM9JCxLcj1fbyxrbz1qcixMbz17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIEpyKHIsZSl7IUMuaXNVbmRlZmluZWQocikmJkMuaXNVbmRlZmluZWQoclsiQ29udGVudC1UeXBlIl0pJiYoclsiQ29udGVudC1UeXBlIl09ZSl9ZnVuY3Rpb24gJG8oKXt2YXIgcjtyZXR1cm4odHlwZW9mIFhNTEh0dHBSZXF1ZXN0IT0idW5kZWZpbmVkInx8dHlwZW9mIHByb2Nlc3MhPSJ1bmRlZmluZWQiJiZPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2Vzcyk9PT0iW29iamVjdCBwcm9jZXNzXSIpJiYocj1Zcikscn1mdW5jdGlvbiBHbyhyLGUsdCl7aWYoQy5pc1N0cmluZyhyKSl0cnl7cmV0dXJuKGV8fEpTT04ucGFyc2UpKHIpLEMudHJpbShyKX1jYXRjaChuKXtpZihuLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IG59cmV0dXJuKHR8fEpTT04uc3RyaW5naWZ5KShyKX12YXIgWWU9e3RyYW5zaXRpb25hbDp7c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX0sYWRhcHRlcjokbygpLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKGUsdCl7cmV0dXJuIEtyKHQsIkFjY2VwdCIpLEtyKHQsIkNvbnRlbnQtVHlwZSIpLEMuaXNGb3JtRGF0YShlKXx8Qy5pc0FycmF5QnVmZmVyKGUpfHxDLmlzQnVmZmVyKGUpfHxDLmlzU3RyZWFtKGUpfHxDLmlzRmlsZShlKXx8Qy5pc0Jsb2IoZSk/ZTpDLmlzQXJyYXlCdWZmZXJWaWV3KGUpP2UuYnVmZmVyOkMuaXNVUkxTZWFyY2hQYXJhbXMoZSk/KEpyKHQsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiksZS50b1N0cmluZygpKTpDLmlzT2JqZWN0KGUpfHx0JiZ0WyJDb250ZW50LVR5cGUiXT09PSJhcHBsaWNhdGlvbi9qc29uIj8oSnIodCwiYXBwbGljYXRpb24vanNvbiIpLEdvKGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe3ZhciB0PXRoaXMudHJhbnNpdGlvbmFsfHxZZS50cmFuc2l0aW9uYWwsbj10JiZ0LnNpbGVudEpTT05QYXJzaW5nLGk9dCYmdC5mb3JjZWRKU09OUGFyc2luZyxvPSFuJiZ0aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZihvfHxpJiZDLmlzU3RyaW5nKGUpJiZlLmxlbmd0aCl0cnl7cmV0dXJuIEpTT04ucGFyc2UoZSl9Y2F0Y2gocyl7aWYobyl0aHJvdyBzLm5hbWU9PT0iU3ludGF4RXJyb3IiP2tvKHMsdGhpcywiRV9KU09OX1BBUlNFIik6c31yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIn19fTtDLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIl0sZnVuY3Rpb24oZSl7WWUuaGVhZGVyc1tlXT17fX0pLEMuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKGUpe1llLmhlYWRlcnNbZV09Qy5tZXJnZShMbyl9KTt2YXIgS2U9WWUsem89JCxIbz1LZSxWbz1mdW5jdGlvbihlLHQsbil7dmFyIGk9dGhpc3x8SG87cmV0dXJuIHpvLmZvckVhY2gobixmdW5jdGlvbihzKXtlPXMuY2FsbChpLGUsdCl9KSxlfSxRcj1mdW5jdGlvbihlKXtyZXR1cm4hIShlJiZlLl9fQ0FOQ0VMX18pfSxacj0kLHp0PVZvLFdvPVFyLGpvPUtlLHFvPXFlO2Z1bmN0aW9uIEh0KHIpe2lmKHIuY2FuY2VsVG9rZW4mJnIuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLHIuc2lnbmFsJiZyLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBxbygiY2FuY2VsZWQiKX12YXIgWG89ZnVuY3Rpb24oZSl7SHQoZSksZS5oZWFkZXJzPWUuaGVhZGVyc3x8e30sZS5kYXRhPXp0LmNhbGwoZSxlLmRhdGEsZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVxdWVzdCksZS5oZWFkZXJzPVpyLm1lcmdlKGUuaGVhZGVycy5jb21tb258fHt9LGUuaGVhZGVyc1tlLm1ldGhvZF18fHt9LGUuaGVhZGVycyksWnIuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxmdW5jdGlvbihpKXtkZWxldGUgZS5oZWFkZXJzW2ldfSk7dmFyIHQ9ZS5hZGFwdGVyfHxqby5hZGFwdGVyO3JldHVybiB0KGUpLnRoZW4oZnVuY3Rpb24oaSl7cmV0dXJuIEh0KGUpLGkuZGF0YT16dC5jYWxsKGUsaS5kYXRhLGkuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSxpfSxmdW5jdGlvbihpKXtyZXR1cm4gV28oaSl8fChIdChlKSxpJiZpLnJlc3BvbnNlJiYoaS5yZXNwb25zZS5kYXRhPXp0LmNhbGwoZSxpLnJlc3BvbnNlLmRhdGEsaS5yZXNwb25zZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpKSksUHJvbWlzZS5yZWplY3QoaSl9KX0sRz0kLGVuPWZ1bmN0aW9uKGUsdCl7dD10fHx7fTt2YXIgbj17fTtmdW5jdGlvbiBpKGMsZCl7cmV0dXJuIEcuaXNQbGFpbk9iamVjdChjKSYmRy5pc1BsYWluT2JqZWN0KGQpP0cubWVyZ2UoYyxkKTpHLmlzUGxhaW5PYmplY3QoZCk/Ry5tZXJnZSh7fSxkKTpHLmlzQXJyYXkoZCk/ZC5zbGljZSgpOmR9ZnVuY3Rpb24gbyhjKXtpZihHLmlzVW5kZWZpbmVkKHRbY10pKXtpZighRy5pc1VuZGVmaW5lZChlW2NdKSlyZXR1cm4gaSh2b2lkIDAsZVtjXSl9ZWxzZSByZXR1cm4gaShlW2NdLHRbY10pfWZ1bmN0aW9uIHMoYyl7aWYoIUcuaXNVbmRlZmluZWQodFtjXSkpcmV0dXJuIGkodm9pZCAwLHRbY10pfWZ1bmN0aW9uIGEoYyl7aWYoRy5pc1VuZGVmaW5lZCh0W2NdKSl7aWYoIUcuaXNVbmRlZmluZWQoZVtjXSkpcmV0dXJuIGkodm9pZCAwLGVbY10pfWVsc2UgcmV0dXJuIGkodm9pZCAwLHRbY10pfWZ1bmN0aW9uIHUoYyl7aWYoYyBpbiB0KXJldHVybiBpKGVbY10sdFtjXSk7aWYoYyBpbiBlKXJldHVybiBpKHZvaWQgMCxlW2NdKX12YXIgZj17dXJsOnMsbWV0aG9kOnMsZGF0YTpzLGJhc2VVUkw6YSx0cmFuc2Zvcm1SZXF1ZXN0OmEsdHJhbnNmb3JtUmVzcG9uc2U6YSxwYXJhbXNTZXJpYWxpemVyOmEsdGltZW91dDphLHRpbWVvdXRNZXNzYWdlOmEsd2l0aENyZWRlbnRpYWxzOmEsYWRhcHRlcjphLHJlc3BvbnNlVHlwZTphLHhzcmZDb29raWVOYW1lOmEseHNyZkhlYWRlck5hbWU6YSxvblVwbG9hZFByb2dyZXNzOmEsb25Eb3dubG9hZFByb2dyZXNzOmEsZGVjb21wcmVzczphLG1heENvbnRlbnRMZW5ndGg6YSxtYXhCb2R5TGVuZ3RoOmEsdHJhbnNwb3J0OmEsaHR0cEFnZW50OmEsaHR0cHNBZ2VudDphLGNhbmNlbFRva2VuOmEsc29ja2V0UGF0aDphLHJlc3BvbnNlRW5jb2Rpbmc6YSx2YWxpZGF0ZVN0YXR1czp1fTtyZXR1cm4gRy5mb3JFYWNoKE9iamVjdC5rZXlzKGUpLmNvbmNhdChPYmplY3Qua2V5cyh0KSksZnVuY3Rpb24oZCl7dmFyIHA9ZltkXXx8byx5PXAoZCk7Ry5pc1VuZGVmaW5lZCh5KSYmcCE9PXV8fChuW2RdPXkpfSksbn0sdG49e3ZlcnNpb246IjAuMjUuMCJ9LFlvPXRuLnZlcnNpb24sVnQ9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKGZ1bmN0aW9uKHIsZSl7VnRbcl09ZnVuY3Rpb24obil7cmV0dXJuIHR5cGVvZiBuPT09cnx8ImEiKyhlPDE/Im4gIjoiICIpK3J9fSk7dmFyIHJuPXt9O1Z0LnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gaShvLHMpe3JldHVybiJbQXhpb3MgdiIrWW8rIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitvKyInIitzKyhuPyIuICIrbjoiIil9cmV0dXJuIGZ1bmN0aW9uKG8scyxhKXtpZihlPT09ITEpdGhyb3cgbmV3IEVycm9yKGkocywiIGhhcyBiZWVuIHJlbW92ZWQiKyh0PyIgaW4gIit0OiIiKSkpO3JldHVybiB0JiYhcm5bc10mJihybltzXT0hMCxjb25zb2xlLndhcm4oaShzLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLGU/ZShvLHMsYSk6ITB9fTtmdW5jdGlvbiBLbyhyLGUsdCl7aWYodHlwZW9mIHIhPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtmb3IodmFyIG49T2JqZWN0LmtleXMociksaT1uLmxlbmd0aDtpLS0gPjA7KXt2YXIgbz1uW2ldLHM9ZVtvXTtpZihzKXt2YXIgYT1yW29dLHU9YT09PXZvaWQgMHx8cyhhLG8scik7aWYodSE9PSEwKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbiAiK28rIiBtdXN0IGJlICIrdSk7Y29udGludWV9aWYodCE9PSEwKXRocm93IEVycm9yKCJVbmtub3duIG9wdGlvbiAiK28pfX12YXIgSm89e2Fzc2VydE9wdGlvbnM6S28sdmFsaWRhdG9yczpWdH0sbm49JCxRbz1Xcixvbj1wbyxzbj1YbyxKZT1lbixhbj1KbyxiZT1hbi52YWxpZGF0b3JzO2Z1bmN0aW9uIEllKHIpe3RoaXMuZGVmYXVsdHM9cix0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgb24scmVzcG9uc2U6bmV3IG9ufX1JZS5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbihlLHQpe2lmKHR5cGVvZiBlPT0ic3RyaW5nIj8odD10fHx7fSx0LnVybD1lKTp0PWV8fHt9LCF0LnVybCl0aHJvdyBuZXcgRXJyb3IoIlByb3ZpZGVkIGNvbmZpZyB1cmwgaXMgbm90IHZhbGlkIik7dD1KZSh0aGlzLmRlZmF1bHRzLHQpLHQubWV0aG9kP3QubWV0aG9kPXQubWV0aG9kLnRvTG93ZXJDYXNlKCk6dGhpcy5kZWZhdWx0cy5tZXRob2Q/dC5tZXRob2Q9dGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKTp0Lm1ldGhvZD0iZ2V0Ijt2YXIgbj10LnRyYW5zaXRpb25hbDtuIT09dm9pZCAwJiZhbi5hc3NlcnRPcHRpb25zKG4se3NpbGVudEpTT05QYXJzaW5nOmJlLnRyYW5zaXRpb25hbChiZS5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpiZS50cmFuc2l0aW9uYWwoYmUuYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpiZS50cmFuc2l0aW9uYWwoYmUuYm9vbGVhbil9LCExKTt2YXIgaT1bXSxvPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbih5KXt0eXBlb2YgeS5ydW5XaGVuPT0iZnVuY3Rpb24iJiZ5LnJ1bldoZW4odCk9PT0hMXx8KG89byYmeS5zeW5jaHJvbm91cyxpLnVuc2hpZnQoeS5mdWxmaWxsZWQseS5yZWplY3RlZCkpfSk7dmFyIHM9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbih5KXtzLnB1c2goeS5mdWxmaWxsZWQseS5yZWplY3RlZCl9KTt2YXIgYTtpZighbyl7dmFyIHU9W3NuLHZvaWQgMF07Zm9yKEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KHUsaSksdT11LmNvbmNhdChzKSxhPVByb21pc2UucmVzb2x2ZSh0KTt1Lmxlbmd0aDspYT1hLnRoZW4odS5zaGlmdCgpLHUuc2hpZnQoKSk7cmV0dXJuIGF9Zm9yKHZhciBmPXQ7aS5sZW5ndGg7KXt2YXIgYz1pLnNoaWZ0KCksZD1pLnNoaWZ0KCk7dHJ5e2Y9YyhmKX1jYXRjaChwKXtkKHApO2JyZWFrfX10cnl7YT1zbihmKX1jYXRjaChwKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QocCl9Zm9yKDtzLmxlbmd0aDspYT1hLnRoZW4ocy5zaGlmdCgpLHMuc2hpZnQoKSk7cmV0dXJuIGF9LEllLnByb3RvdHlwZS5nZXRVcmk9ZnVuY3Rpb24oZSl7aWYoIWUudXJsKXRocm93IG5ldyBFcnJvcigiUHJvdmlkZWQgY29uZmlnIHVybCBpcyBub3QgdmFsaWQiKTtyZXR1cm4gZT1KZSh0aGlzLmRlZmF1bHRzLGUpLFFvKGUudXJsLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlw/LywiIil9LG5uLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKGUpe0llLnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLnJlcXVlc3QoSmUobnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6KG58fHt9KS5kYXRhfSkpfX0pLG5uLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihlKXtJZS5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuLGkpe3JldHVybiB0aGlzLnJlcXVlc3QoSmUoaXx8e30se21ldGhvZDplLHVybDp0LGRhdGE6bn0pKX19KTt2YXIgWm89SWUsZXM9cWU7ZnVuY3Rpb24gZ2Uocil7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO3ZhciBlO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihpKXtlPWl9KTt2YXIgdD10aGlzO3RoaXMucHJvbWlzZS50aGVuKGZ1bmN0aW9uKG4pe2lmKCEhdC5fbGlzdGVuZXJzKXt2YXIgaSxvPXQuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKGk9MDtpPG87aSsrKXQuX2xpc3RlbmVyc1tpXShuKTt0Ll9saXN0ZW5lcnM9bnVsbH19KSx0aGlzLnByb21pc2UudGhlbj1mdW5jdGlvbihuKXt2YXIgaSxvPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHMpe3Quc3Vic2NyaWJlKHMpLGk9c30pLnRoZW4obik7cmV0dXJuIG8uY2FuY2VsPWZ1bmN0aW9uKCl7dC51bnN1YnNjcmliZShpKX0sb30scihmdW5jdGlvbihpKXt0LnJlYXNvbnx8KHQucmVhc29uPW5ldyBlcyhpKSxlKHQucmVhc29uKSl9KX1nZS5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZD1mdW5jdGlvbigpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufSxnZS5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe2lmKHRoaXMucmVhc29uKXtlKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19LGdlLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbihlKXtpZighIXRoaXMuX2xpc3RlbmVycyl7dmFyIHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7dCE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9fSxnZS5zb3VyY2U9ZnVuY3Rpb24oKXt2YXIgZSx0PW5ldyBnZShmdW5jdGlvbihpKXtlPWl9KTtyZXR1cm57dG9rZW46dCxjYW5jZWw6ZX19O3ZhciB0cz1nZSxycz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUuYXBwbHkobnVsbCxuKX19LG5zPSQsaXM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5zLmlzT2JqZWN0KGUpJiZlLmlzQXhpb3NFcnJvcj09PSEwfSx1bj0kLG9zPSRyLFFlPVpvLHNzPWVuLGFzPUtlO2Z1bmN0aW9uIGNuKHIpe3ZhciBlPW5ldyBRZShyKSx0PW9zKFFlLnByb3RvdHlwZS5yZXF1ZXN0LGUpO3JldHVybiB1bi5leHRlbmQodCxRZS5wcm90b3R5cGUsZSksdW4uZXh0ZW5kKHQsZSksdC5jcmVhdGU9ZnVuY3Rpb24oaSl7cmV0dXJuIGNuKHNzKHIsaSkpfSx0fXZhciBLPWNuKGFzKTtLLkF4aW9zPVFlLEsuQ2FuY2VsPXFlLEsuQ2FuY2VsVG9rZW49dHMsSy5pc0NhbmNlbD1RcixLLlZFUlNJT049dG4udmVyc2lvbixLLmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9LEsuc3ByZWFkPXJzLEsuaXNBeGlvc0Vycm9yPWlzLE10LmV4cG9ydHM9SyxNdC5leHBvcnRzLmRlZmF1bHQ9Szt2YXIgdXM9TXQuZXhwb3J0cztjbGFzcyBFe2lzRW1wdHkoKXtyZXR1cm4hdGhpcy5pc1ByZXNlbnQoKX1zdGF0aWMgb2YoZSl7aWYoZSE9bnVsbClyZXR1cm4gbmV3IGZuKGUpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBwYXNzZWQgdmFsdWUgd2FzIG51bGwgb3IgdW5kZWZpbmVkLiIpfXN0YXRpYyBvZk5vbk51bGwoZSl7cmV0dXJuIEUub2YoZSl9c3RhdGljIG9mTnVsbGFibGUoZSl7cmV0dXJuIGUhPW51bGw/bmV3IGZuKGUpOm5ldyBsbn1zdGF0aWMgZW1wdHkoKXtyZXR1cm4gbmV3IGxufXN0YXRpYyBmcm9tKGUpe3N3aXRjaChlLmtpbmQpe2Nhc2UicHJlc2VudCI6cmV0dXJuIEUub2YoZS52YWx1ZSk7Y2FzZSJlbXB0eSI6cmV0dXJuIEUuZW1wdHkoKTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBwYXNzZWQgdmFsdWUgd2FzIG5vdCBhbiBPcHRpb24gdHlwZS4iKX19fWNsYXNzIGZuIGV4dGVuZHMgRXtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMucGF5bG9hZD1lfWlzUHJlc2VudCgpe3JldHVybiEwfWdldCgpe3JldHVybiB0aGlzLnBheWxvYWR9aWZQcmVzZW50KGUpe2UodGhpcy5wYXlsb2FkKX1pZlByZXNlbnRPckVsc2UoZSx0KXtlKHRoaXMucGF5bG9hZCl9ZmlsdGVyKGUpe3JldHVybiBlKHRoaXMucGF5bG9hZCk/dGhpczpFLmVtcHR5KCl9bWFwKGUpe2NvbnN0IHQ9ZSh0aGlzLnBheWxvYWQpO3JldHVybiBFLm9mTnVsbGFibGUodCl9ZmxhdE1hcChlKXtyZXR1cm4gZSh0aGlzLnBheWxvYWQpfW9yKGUpe3JldHVybiB0aGlzfW9yRWxzZShlKXtyZXR1cm4gdGhpcy5wYXlsb2FkfW9yRWxzZUdldChlKXtyZXR1cm4gdGhpcy5wYXlsb2FkfW9yRWxzZVRocm93KGUpe3JldHVybiB0aGlzLnBheWxvYWR9b3JOdWxsKCl7cmV0dXJuIHRoaXMucGF5bG9hZH1vclVuZGVmaW5lZCgpe3JldHVybiB0aGlzLnBheWxvYWR9dG9PcHRpb24oKXtyZXR1cm57a2luZDoicHJlc2VudCIsdmFsdWU6dGhpcy5wYXlsb2FkfX1tYXRjaGVzKGUpe3JldHVybiBlLnByZXNlbnQodGhpcy5wYXlsb2FkKX10b0pTT04oZSl7cmV0dXJuIHRoaXMucGF5bG9hZH19Y2xhc3MgbG4gZXh0ZW5kcyBFe2lzUHJlc2VudCgpe3JldHVybiExfWNvbnN0cnVjdG9yKCl7c3VwZXIoKX1nZXQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgb3B0aW9uYWwgaXMgbm90IHByZXNlbnQuIil9aWZQcmVzZW50KGUpe31pZlByZXNlbnRPckVsc2UoZSx0KXt0KCl9ZmlsdGVyKGUpe3JldHVybiB0aGlzfW1hcChlKXtyZXR1cm4gRS5lbXB0eSgpfWZsYXRNYXAoZSl7cmV0dXJuIEUuZW1wdHkoKX1vcihlKXtyZXR1cm4gZSgpfW9yRWxzZShlKXtyZXR1cm4gZX1vckVsc2VHZXQoZSl7cmV0dXJuIHRoaXMub3JFbHNlKGUoKSl9b3JFbHNlVGhyb3coZSl7dGhyb3cgZSgpfW9yTnVsbCgpe3JldHVybiBudWxsfW9yVW5kZWZpbmVkKCl7fXRvT3B0aW9uKCl7cmV0dXJue2tpbmQ6ImVtcHR5In19bWF0Y2hlcyhlKXtyZXR1cm4gZS5lbXB0eSgpfXRvSlNPTihlKXtyZXR1cm4gbnVsbH19Y29uc3QgY3M9IjIuMC4wIjtmdW5jdGlvbiBmcyhyKXtnbG9iYWxUaGlzLl92b25hZ2VNZWRpYVByb2Nlc3Nvck1ldGFkYXRhPXJ9ZnVuY3Rpb24gbHMoKXtyZXR1cm4gZ2xvYmFsVGhpcy5fdm9uYWdlTWVkaWFQcm9jZXNzb3JNZXRhZGF0YX1jbGFzcyB6e2NvbnN0cnVjdG9yKCl7Y29uc3QgZT1scygpO3RoaXMuX3JlcG9ydD17YWN0aW9uOkUuZW1wdHkoKSxhcHBsaWNhdGlvbklkOkUub2ZOdWxsYWJsZShlIT09dm9pZCAwJiZlIT1udWxsP2UuYXBwSWQ6bnVsbCksdGltZXN0YW1wOkRhdGUubm93KCksZnBzOkUuZW1wdHkoKSxmcmFtZXNUcmFuc2Zvcm1lZDpFLmVtcHR5KCksZ3VpZDpFLmVtcHR5KCksaGlnaGVzdEZyYW1lVHJhbnNmb3JtQ3B1OkUuZW1wdHkoKSxtZXNzYWdlOkUuZW1wdHkoKSxzb3VyY2U6RS5vZk51bGxhYmxlKGUhPT12b2lkIDAmJmUhPW51bGw/ZS5zb3VyY2VUeXBlOm51bGwpLHRyYW5zZm9ybWVkRnBzOkUuZW1wdHkoKSx0cmFuc2Zvcm1lclR5cGU6RS5lbXB0eSgpLHZhcmlhdGlvbjpFLmVtcHR5KCksdmlkZW9IZWlnaHQ6RS5lbXB0eSgpLHZpZGVvV2lkdGg6RS5lbXB0eSgpLHZlcnNpb246Y3MsZXJyb3I6RS5lbXB0eSgpLHByb3h5VXJsOkUub2ZOdWxsYWJsZShlIT09dm9pZCAwJiZlIT1udWxsP2UucHJveHlVcmw6bnVsbCl9fWFjdGlvbihlKXtyZXR1cm4gdGhpcy5fcmVwb3J0LmFjdGlvbj1FLm9mTnVsbGFibGUoZSksdGhpc31mcmFtZXNUcmFuc2Zvcm1lZChlKXtyZXR1cm4gdGhpcy5fcmVwb3J0LmZyYW1lc1RyYW5zZm9ybWVkPUUub2ZOdWxsYWJsZShlKSx0aGlzfWZwcyhlKXtyZXR1cm4gdGhpcy5fcmVwb3J0LmZwcz1FLm9mTnVsbGFibGUoZSksdGhpc31ndWlkKGUpe3JldHVybiB0aGlzLl9yZXBvcnQuZ3VpZD1FLm9mTnVsbGFibGUoZSksdGhpc31tZXNzYWdlKGUpe3JldHVybiB0aGlzLl9yZXBvcnQubWVzc2FnZT1FLm9mTnVsbGFibGUoZSksdGhpc310cmFuc2Zvcm1lZEZwcyhlKXtyZXR1cm4gdGhpcy5fcmVwb3J0LnRyYW5zZm9ybWVkRnBzPUUub2ZOdWxsYWJsZShlKSx0aGlzfXRyYW5zZm9ybWVyVHlwZShlKXtyZXR1cm4gdGhpcy5fcmVwb3J0LnRyYW5zZm9ybWVyVHlwZT1FLm9mTnVsbGFibGUoZSksdGhpc312YXJpYXRpb24oZSl7cmV0dXJuIHRoaXMuX3JlcG9ydC52YXJpYXRpb249RS5vZk51bGxhYmxlKGUpLHRoaXN9dmlkZW9IZWlnaHQoZSl7cmV0dXJuIHRoaXMuX3JlcG9ydC52aWRlb0hlaWdodD1FLm9mTnVsbGFibGUoZSksdGhpc312aWRlb1dpZHRoKGUpe3JldHVybiB0aGlzLl9yZXBvcnQudmlkZW9XaWR0aD1FLm9mTnVsbGFibGUoZSksdGhpc31lcnJvcihlKXtyZXR1cm4gdGhpcy5fcmVwb3J0LmVycm9yPUUub2ZOdWxsYWJsZShlKSx0aGlzfWJ1aWxkKCl7cmV0dXJuIHRoaXMuX3JlcG9ydH19Y29uc3QgZHM9cj0+SlNPTi5zdHJpbmdpZnkociwoZSx0KT0+e2lmKHQhPT1udWxsKXJldHVybiB0fSk7Y2xhc3MgSHtzdGF0aWMgcmVwb3J0KGUpe3JldHVybiBuZXcgUHJvbWlzZSgodCxuKT0+e2lmKGUuYXBwbGljYXRpb25JZC5pc0VtcHR5KCl8fGUuc291cmNlLmlzRW1wdHkoKSl7dCgic3VjY2VzcyIpO3JldHVybn1sZXQgaT11cy5jcmVhdGUoKSxvPXt0aW1lb3V0OjFlNCx0aW1lb3V0RXJyb3JNZXNzYWdlOiJSZXF1ZXN0IHRpbWVvdXQiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn19LHM9ImhsZy50b2tib3guY29tL3Byb2QvbG9nZ2luZy92Y3Bfd2VicnRjIjtpZihlLnByb3h5VXJsLmlzRW1wdHkoKSlzPSJodHRwczovLyIrcztlbHNle2xldCBhO2UucHJveHlVcmwuZ2V0KCkuc2xpY2UoZS5wcm94eVVybC5nZXQoKS5sZW5ndGgtMSkhPT0iLyI/YT1lLnByb3h5VXJsLmdldCgpKyIvIjphPWUucHJveHlVcmwuZ2V0KCkscz1hK3N9aS5wb3N0KHMsZHMoZSksbykudGhlbihhPT57Y29uc29sZS5sb2coYSksdCgic3VjY2VzcyIpfSkuY2F0Y2goYT0+e2NvbnNvbGUubG9nKGEpLG4oYSl9KX0pfX12YXIgWmUsbXM9bmV3IFVpbnQ4QXJyYXkoMTYpO2Z1bmN0aW9uIGhzKCl7aWYoIVplJiYoWmU9dHlwZW9mIGNyeXB0byE9InVuZGVmaW5lZCImJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMmJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pfHx0eXBlb2YgbXNDcnlwdG8hPSJ1bmRlZmluZWQiJiZ0eXBlb2YgbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzPT0iZnVuY3Rpb24iJiZtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChtc0NyeXB0byksIVplKSl0aHJvdyBuZXcgRXJyb3IoImNyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkIik7cmV0dXJuIFplKG1zKX12YXIgcHM9L14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pO2Z1bmN0aW9uIHlzKHIpe3JldHVybiB0eXBlb2Ygcj09InN0cmluZyImJnBzLnRlc3Qocil9Zm9yKHZhciBPPVtdLFd0PTA7V3Q8MjU2OysrV3QpTy5wdXNoKChXdCsyNTYpLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSkpO2Z1bmN0aW9uIF9zKHIpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLHQ9KE9bcltlKzBdXStPW3JbZSsxXV0rT1tyW2UrMl1dK09bcltlKzNdXSsiLSIrT1tyW2UrNF1dK09bcltlKzVdXSsiLSIrT1tyW2UrNl1dK09bcltlKzddXSsiLSIrT1tyW2UrOF1dK09bcltlKzldXSsiLSIrT1tyW2UrMTBdXStPW3JbZSsxMV1dK09bcltlKzEyXV0rT1tyW2UrMTNdXStPW3JbZSsxNF1dK09bcltlKzE1XV0pLnRvTG93ZXJDYXNlKCk7aWYoIXlzKHQpKXRocm93IFR5cGVFcnJvcigiU3RyaW5naWZpZWQgVVVJRCBpcyBpbnZhbGlkIik7cmV0dXJuIHR9ZnVuY3Rpb24gZG4ocixlLHQpe3I9cnx8e307dmFyIG49ci5yYW5kb218fChyLnJuZ3x8aHMpKCk7aWYobls2XT1uWzZdJjE1fDY0LG5bOF09bls4XSY2M3wxMjgsZSl7dD10fHwwO2Zvcih2YXIgaT0wO2k8MTY7KytpKWVbdCtpXT1uW2ldO3JldHVybiBlfXJldHVybiBfcyhuKX1jb25zdCByZT1uZXcgV2Vha01hcCxldD1uZXcgV2Vha01hcCxGZT1uZXcgV2Vha01hcCxqdD1TeW1ib2woImFueVByb2R1Y2VyIiksbW49UHJvbWlzZS5yZXNvbHZlKCksdHQ9U3ltYm9sKCJsaXN0ZW5lckFkZGVkIikscnQ9U3ltYm9sKCJsaXN0ZW5lclJlbW92ZWQiKTtsZXQgcXQ9ITE7ZnVuY3Rpb24gdmUocil7aWYodHlwZW9mIHIhPSJzdHJpbmciJiZ0eXBlb2YgciE9InN5bWJvbCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXZlbnROYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBzeW1ib2wiKX1mdW5jdGlvbiBudChyKXtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBFZShyLGUpe2NvbnN0IHQ9ZXQuZ2V0KHIpO3JldHVybiB0LmhhcyhlKXx8dC5zZXQoZSxuZXcgU2V0KSx0LmdldChlKX1mdW5jdGlvbiBQZShyLGUpe2NvbnN0IHQ9dHlwZW9mIGU9PSJzdHJpbmcifHx0eXBlb2YgZT09InN5bWJvbCI/ZTpqdCxuPUZlLmdldChyKTtyZXR1cm4gbi5oYXModCl8fG4uc2V0KHQsbmV3IFNldCksbi5nZXQodCl9ZnVuY3Rpb24geHMocixlLHQpe2NvbnN0IG49RmUuZ2V0KHIpO2lmKG4uaGFzKGUpKWZvcihjb25zdCBpIG9mIG4uZ2V0KGUpKWkuZW5xdWV1ZSh0KTtpZihuLmhhcyhqdCkpe2NvbnN0IGk9UHJvbWlzZS5hbGwoW2UsdF0pO2Zvcihjb25zdCBvIG9mIG4uZ2V0KGp0KSlvLmVucXVldWUoaSl9fWZ1bmN0aW9uIGhuKHIsZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2xldCB0PSExLG49KCk9Pnt9LGk9W107Y29uc3Qgbz17ZW5xdWV1ZShzKXtpLnB1c2gocyksbigpfSxmaW5pc2goKXt0PSEwLG4oKX19O2Zvcihjb25zdCBzIG9mIGUpUGUocixzKS5hZGQobyk7cmV0dXJue2FzeW5jIG5leHQoKXtyZXR1cm4gaT9pLmxlbmd0aD09PTA/dD8oaT12b2lkIDAsdGhpcy5uZXh0KCkpOihhd2FpdCBuZXcgUHJvbWlzZShzPT57bj1zfSksdGhpcy5uZXh0KCkpOntkb25lOiExLHZhbHVlOmF3YWl0IGkuc2hpZnQoKX06e2RvbmU6ITB9fSxhc3luYyByZXR1cm4ocyl7aT12b2lkIDA7Zm9yKGNvbnN0IGEgb2YgZSlQZShyLGEpLmRlbGV0ZShvKTtyZXR1cm4gbigpLGFyZ3VtZW50cy5sZW5ndGg+MD97ZG9uZTohMCx2YWx1ZTphd2FpdCBzfTp7ZG9uZTohMH19LFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtyZXR1cm4gdGhpc319fWZ1bmN0aW9uIHBuKHIpe2lmKHI9PT12b2lkIDApcmV0dXJuIHluO2lmKCFBcnJheS5pc0FycmF5KHIpKXRocm93IG5ldyBUeXBlRXJyb3IoImBtZXRob2ROYW1lc2AgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzIik7Zm9yKGNvbnN0IGUgb2YgcilpZigheW4uaW5jbHVkZXMoZSkpdGhyb3cgdHlwZW9mIGUhPSJzdHJpbmciP25ldyBUeXBlRXJyb3IoImBtZXRob2ROYW1lc2AgZWxlbWVudCBtdXN0IGJlIGEgc3RyaW5nIik6bmV3IEVycm9yKGAke2V9IGlzIG5vdCBFbWl0dGVyeSBtZXRob2RgKTtyZXR1cm4gcn1jb25zdCBYdD1yPT5yPT09dHR8fHI9PT1ydDtjbGFzcyBmZXtzdGF0aWMgbWl4aW4oZSx0KXtyZXR1cm4gdD1wbih0KSxuPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBmdW5jdGlvbiIpO2Zvcihjb25zdCBzIG9mIHQpaWYobi5wcm90b3R5cGVbc10hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke3N9XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO2Z1bmN0aW9uIGkoKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7ZW51bWVyYWJsZTohMSx2YWx1ZTpuZXcgZmV9KSx0aGlzW2VdfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxlLHtlbnVtZXJhYmxlOiExLGdldDppfSk7Y29uc3Qgbz1zPT5mdW5jdGlvbiguLi5hKXtyZXR1cm4gdGhpc1tlXVtzXSguLi5hKX07Zm9yKGNvbnN0IHMgb2YgdClPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUscyx7ZW51bWVyYWJsZTohMSx2YWx1ZTpvKHMpfSk7cmV0dXJuIG59fXN0YXRpYyBnZXQgaXNEZWJ1Z0VuYWJsZWQoKXtpZih0eXBlb2YgcHJvY2VzcyE9Im9iamVjdCIpcmV0dXJuIHF0O2NvbnN0e2VudjplfT1wcm9jZXNzfHx7ZW52Ont9fTtyZXR1cm4gZS5ERUJVRz09PSJlbWl0dGVyeSJ8fGUuREVCVUc9PT0iKiJ8fHF0fXN0YXRpYyBzZXQgaXNEZWJ1Z0VuYWJsZWQoZSl7cXQ9ZX1jb25zdHJ1Y3RvcihlPXt9KXtyZS5zZXQodGhpcyxuZXcgU2V0KSxldC5zZXQodGhpcyxuZXcgTWFwKSxGZS5zZXQodGhpcyxuZXcgTWFwKSx0aGlzLmRlYnVnPWUuZGVidWd8fHt9LHRoaXMuZGVidWcuZW5hYmxlZD09PXZvaWQgMCYmKHRoaXMuZGVidWcuZW5hYmxlZD0hMSksdGhpcy5kZWJ1Zy5sb2dnZXJ8fCh0aGlzLmRlYnVnLmxvZ2dlcj0odCxuLGksbyk9PntvPUpTT04uc3RyaW5naWZ5KG8pLHR5cGVvZiBpPT0ic3ltYm9sIiYmKGk9aS50b1N0cmluZygpKTtjb25zdCBzPW5ldyBEYXRlLGE9YCR7cy5nZXRIb3VycygpfToke3MuZ2V0TWludXRlcygpfToke3MuZ2V0U2Vjb25kcygpfS4ke3MuZ2V0TWlsbGlzZWNvbmRzKCl9YDtjb25zb2xlLmxvZyhgWyR7YX1dW2VtaXR0ZXJ5OiR7dH1dWyR7bn1dIEV2ZW50IE5hbWU6ICR7aX0KCWRhdGE6ICR7b31gKX0pfWxvZ0lmRGVidWdFbmFibGVkKGUsdCxuKXsoZmUuaXNEZWJ1Z0VuYWJsZWR8fHRoaXMuZGVidWcuZW5hYmxlZCkmJnRoaXMuZGVidWcubG9nZ2VyKGUsdGhpcy5kZWJ1Zy5uYW1lLHQsbil9b24oZSx0KXtudCh0KSxlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IG4gb2YgZSl2ZShuKSxFZSh0aGlzLG4pLmFkZCh0KSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJzdWJzY3JpYmUiLG4sdm9pZCAwKSxYdChuKXx8dGhpcy5lbWl0KHR0LHtldmVudE5hbWU6bixsaXN0ZW5lcjp0fSk7cmV0dXJuIHRoaXMub2ZmLmJpbmQodGhpcyxlLHQpfW9mZihlLHQpe250KHQpLGU9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgbiBvZiBlKXZlKG4pLEVlKHRoaXMsbikuZGVsZXRlKHQpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoInVuc3Vic2NyaWJlIixuLHZvaWQgMCksWHQobil8fHRoaXMuZW1pdChydCx7ZXZlbnROYW1lOm4sbGlzdGVuZXI6dH0pfW9uY2UoZSl7cmV0dXJuIG5ldyBQcm9taXNlKHQ9Pntjb25zdCBuPXRoaXMub24oZSxpPT57bigpLHQoaSl9KX0pfWV2ZW50cyhlKXtlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IHQgb2YgZSl2ZSh0KTtyZXR1cm4gaG4odGhpcyxlKX1hc3luYyBlbWl0KGUsdCl7dmUoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiZW1pdCIsZSx0KSx4cyh0aGlzLGUsdCk7Y29uc3Qgbj1FZSh0aGlzLGUpLGk9cmUuZ2V0KHRoaXMpLG89Wy4uLm5dLHM9WHQoZSk/W106Wy4uLmldO2F3YWl0IG1uLGF3YWl0IFByb21pc2UuYWxsKFsuLi5vLm1hcChhc3luYyBhPT57aWYobi5oYXMoYSkpcmV0dXJuIGEodCl9KSwuLi5zLm1hcChhc3luYyBhPT57aWYoaS5oYXMoYSkpcmV0dXJuIGEoZSx0KX0pXSl9YXN5bmMgZW1pdFNlcmlhbChlLHQpe3ZlKGUpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoImVtaXRTZXJpYWwiLGUsdCk7Y29uc3Qgbj1FZSh0aGlzLGUpLGk9cmUuZ2V0KHRoaXMpLG89Wy4uLm5dLHM9Wy4uLmldO2F3YWl0IG1uO2Zvcihjb25zdCBhIG9mIG8pbi5oYXMoYSkmJmF3YWl0IGEodCk7Zm9yKGNvbnN0IGEgb2YgcylpLmhhcyhhKSYmYXdhaXQgYShlLHQpfW9uQW55KGUpe3JldHVybiBudChlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJzdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLHJlLmdldCh0aGlzKS5hZGQoZSksdGhpcy5lbWl0KHR0LHtsaXN0ZW5lcjplfSksdGhpcy5vZmZBbnkuYmluZCh0aGlzLGUpfWFueUV2ZW50KCl7cmV0dXJuIGhuKHRoaXMpfW9mZkFueShlKXtudChlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJ1bnN1YnNjcmliZUFueSIsdm9pZCAwLHZvaWQgMCksdGhpcy5lbWl0KHJ0LHtsaXN0ZW5lcjplfSkscmUuZ2V0KHRoaXMpLmRlbGV0ZShlKX1jbGVhckxpc3RlbmVycyhlKXtlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IHQgb2YgZSlpZih0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJjbGVhciIsdCx2b2lkIDApLHR5cGVvZiB0PT0ic3RyaW5nInx8dHlwZW9mIHQ9PSJzeW1ib2wiKXtFZSh0aGlzLHQpLmNsZWFyKCk7Y29uc3Qgbj1QZSh0aGlzLHQpO2Zvcihjb25zdCBpIG9mIG4paS5maW5pc2goKTtuLmNsZWFyKCl9ZWxzZXtyZS5nZXQodGhpcykuY2xlYXIoKTtmb3IoY29uc3QgbiBvZiBldC5nZXQodGhpcykudmFsdWVzKCkpbi5jbGVhcigpO2Zvcihjb25zdCBuIG9mIEZlLmdldCh0aGlzKS52YWx1ZXMoKSl7Zm9yKGNvbnN0IGkgb2YgbilpLmZpbmlzaCgpO24uY2xlYXIoKX19fWxpc3RlbmVyQ291bnQoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2xldCB0PTA7Zm9yKGNvbnN0IG4gb2YgZSl7aWYodHlwZW9mIG49PSJzdHJpbmciKXt0Kz1yZS5nZXQodGhpcykuc2l6ZStFZSh0aGlzLG4pLnNpemUrUGUodGhpcyxuKS5zaXplK1BlKHRoaXMpLnNpemU7Y29udGludWV9dHlwZW9mIG4hPSJ1bmRlZmluZWQiJiZ2ZShuKSx0Kz1yZS5nZXQodGhpcykuc2l6ZTtmb3IoY29uc3QgaSBvZiBldC5nZXQodGhpcykudmFsdWVzKCkpdCs9aS5zaXplO2Zvcihjb25zdCBpIG9mIEZlLmdldCh0aGlzKS52YWx1ZXMoKSl0Kz1pLnNpemV9cmV0dXJuIHR9YmluZE1ldGhvZHMoZSx0KXtpZih0eXBlb2YgZSE9Im9iamVjdCJ8fGU9PT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoImB0YXJnZXRgIG11c3QgYmUgYW4gb2JqZWN0Iik7dD1wbih0KTtmb3IoY29uc3QgbiBvZiB0KXtpZihlW25dIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgVGhlIHByb3BlcnR5IFxgJHtufVxgIGFscmVhZHkgZXhpc3RzIG9uIFxgdGFyZ2V0XGBgKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtlbnVtZXJhYmxlOiExLHZhbHVlOnRoaXNbbl0uYmluZCh0aGlzKX0pfX19Y29uc3QgeW49T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZmUucHJvdG90eXBlKS5maWx0ZXIocj0+ciE9PSJjb25zdHJ1Y3RvciIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShmZSwibGlzdGVuZXJBZGRlZCIse3ZhbHVlOnR0LHdyaXRhYmxlOiExLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGZlLCJsaXN0ZW5lclJlbW92ZWQiLHt2YWx1ZTpydCx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pO3ZhciBZdD1mZTtmdW5jdGlvbiBicyhyKXtyZXR1cm4gdHlwZW9mIHI9PSJvYmplY3QiJiZyIT09bnVsbCYmIm1lc3NhZ2UiaW4gciYmdHlwZW9mIHIubWVzc2FnZT09InN0cmluZyJ9ZnVuY3Rpb24gZ3Mocil7aWYoYnMocikpcmV0dXJuIHI7dHJ5e3JldHVybiBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkocikpfWNhdGNoe3JldHVybiBuZXcgRXJyb3IoU3RyaW5nKHIpKX19ZnVuY3Rpb24gS3Qocil7cmV0dXJuIGdzKHIpLm1lc3NhZ2V9dmFyIEp0PShyPT4oci5waXBlbGluZV9lbmRlZD0icGlwZWxpbmVfZW5kZWQiLHIucGlwZWxpbmVfZW5kZWRfd2l0aF9lcnJvcj0icGlwZWxpbmVfZW5kZWRfd2l0aF9lcnJvciIsci5waXBlbGluZV9zdGFydGVkPSJwaXBlbGluZV9zdGFydGVkIixyLnBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvcj0icGlwZWxpbmVfc3RhcnRlZF93aXRoX2Vycm9yIixyLnBpcGVsaW5lX3Jlc3RhcnRlZD0icGlwZWxpbmVfcmVzdGFydGVkIixyLnBpcGVsaW5lX3Jlc3RhcnRlZF93aXRoX2Vycm9yPSJwaXBlbGluZV9yZXN0YXJ0ZWRfd2l0aF9lcnJvciIscikpKEp0fHx7fSk7Y29uc3QgdnM9NTAwLEVzPS44O2NsYXNzIFRzIGV4dGVuZHMgWXR7Y29uc3RydWN0b3IoZSx0KXtzdXBlcigpLHRoaXMuaW5kZXhfPXQsdGhpcy51dWlkXz1kbigpLHRoaXMuZnJhbWVzVHJhbnNmb3JtZWRfPTAsdGhpcy50cmFuc2Zvcm1lcl89ZSx0aGlzLnNob3VsZFN0b3BfPSExLHRoaXMuaXNGbGFzaGVkXz0hMSx0aGlzLmZyYW1lc0Zyb21Tb3VyY2VfPTAsdGhpcy5mcHNfPTAsdGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfPTAsdGhpcy52aWRlb0hlaWdodF89MCx0aGlzLnZpZGVvV2lkdGhfPTAsdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTEsdGhpcy50cmFuc2Zvcm1lclR5cGVfPSJDdXN0b20iLCJnZXRUcmFuc2Zvcm1lclR5cGUiaW4gZSYmKHRoaXMudHJhbnNmb3JtZXJUeXBlXz1lLmdldFRyYW5zZm9ybWVyVHlwZSgpKTtjb25zdCBuPW5ldyB6KCkuYWN0aW9uKCJNZWRpYVRyYW5zZm9ybWVyIikuZ3VpZCh0aGlzLnV1aWRfKS50cmFuc2Zvcm1lclR5cGUodGhpcy50cmFuc2Zvcm1lclR5cGVfKS52YXJpYXRpb24oIkNyZWF0ZSIpLmJ1aWxkKCk7SC5yZXBvcnQobil9c2V0VHJhY2tFeHBlY3RlZFJhdGUoZSl7dGhpcy50cmFja0V4cGVjdGVkUmF0ZV89ZX1hc3luYyBzdGFydChlKXtpZih0aGlzLmNvbnRyb2xsZXJfPWUsdGhpcy50cmFuc2Zvcm1lcl8mJnR5cGVvZiB0aGlzLnRyYW5zZm9ybWVyXy5zdGFydD09ImZ1bmN0aW9uIil0cnl7YXdhaXQgdGhpcy50cmFuc2Zvcm1lcl8uc3RhcnQoZSl9Y2F0Y2godCl7Y29uc3Qgbj1uZXcgeigpLmFjdGlvbigiTWVkaWFUcmFuc2Zvcm1lciIpLmd1aWQodGhpcy51dWlkXykubWVzc2FnZShaLmVycm9ycy50cmFuc2Zvcm1lcl9zdGFydCkudHJhbnNmb3JtZXJUeXBlKHRoaXMudHJhbnNmb3JtZXJUeXBlXykudmFyaWF0aW9uKCJFcnJvciIpLmVycm9yKEt0KHQpKS5idWlsZCgpO0gucmVwb3J0KG4pO2NvbnN0IGk9e2V2ZW50TWV0YURhdGE6e3RyYW5zZm9ybWVySW5kZXg6dGhpcy5pbmRleF99LGVycm9yOnQsZnVuY3Rpb246InN0YXJ0In07dGhpcy5lbWl0KCJlcnJvciIsaSl9fWFzeW5jIHRyYW5zZm9ybShlLHQpe3ZhciBuLGksbyxzO2lmKHRoaXMubWVkaWFUcmFuc2Zvcm1lclFvc1JlcG9ydFN0YXJ0VGltZXN0YW1wXz09PTAmJih0aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnRTdGFydFRpbWVzdGFtcF89RGF0ZS5ub3coKSksZSBpbnN0YW5jZW9mIFZpZGVvRnJhbWUmJih0aGlzLnZpZGVvSGVpZ2h0Xz0obj1lPT1udWxsP3ZvaWQgMDplLmRpc3BsYXlIZWlnaHQpIT1udWxsP246MCx0aGlzLnZpZGVvV2lkdGhfPShpPWU9PW51bGw/dm9pZCAwOmUuZGlzcGxheVdpZHRoKSE9bnVsbD9pOjApLCsrdGhpcy5mcmFtZXNGcm9tU291cmNlXyx0aGlzLnRyYW5zZm9ybWVyXylpZih0aGlzLnNob3VsZFN0b3BfKWNvbnNvbGUud2FybigiW1BpcGVsaW5lXSBmbHVzaCBmcm9tIHRyYW5zZm9ybSIpLGUuY2xvc2UoKSx0aGlzLmZsdXNoKHQpLHQudGVybWluYXRlKCk7ZWxzZSB0cnl7YXdhaXQoKHM9KG89dGhpcy50cmFuc2Zvcm1lcl8pLnRyYW5zZm9ybSk9PW51bGw/dm9pZCAwOnMuY2FsbChvLGUsdCkpLCsrdGhpcy5mcmFtZXNUcmFuc2Zvcm1lZF8sdGhpcy5mcmFtZXNUcmFuc2Zvcm1lZF89PT12cyYmdGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0KCl9Y2F0Y2goYSl7Y29uc3QgdT1uZXcgeigpLmFjdGlvbigiTWVkaWFUcmFuc2Zvcm1lciIpLmd1aWQodGhpcy51dWlkXykubWVzc2FnZShaLmVycm9ycy50cmFuc2Zvcm1lcl90cmFuc2Zvcm0pLnRyYW5zZm9ybWVyVHlwZSh0aGlzLnRyYW5zZm9ybWVyVHlwZV8pLnZhcmlhdGlvbigiRXJyb3IiKS5lcnJvcihLdChhKSkuYnVpbGQoKTtILnJlcG9ydCh1KTtjb25zdCBmPXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjphLGZ1bmN0aW9uOiJ0cmFuc2Zvcm0ifTt0aGlzLmVtaXQoImVycm9yIixmKX19YXN5bmMgZmx1c2goZSl7aWYodGhpcy50cmFuc2Zvcm1lcl8mJnR5cGVvZiB0aGlzLnRyYW5zZm9ybWVyXy5mbHVzaD09ImZ1bmN0aW9uIiYmIXRoaXMuaXNGbGFzaGVkXyl7dGhpcy5pc0ZsYXNoZWRfPSEwO3RyeXthd2FpdCB0aGlzLnRyYW5zZm9ybWVyXy5mbHVzaChlKX1jYXRjaChuKXtjb25zdCBpPW5ldyB6KCkuYWN0aW9uKCJNZWRpYVRyYW5zZm9ybWVyIikuZ3VpZCh0aGlzLnV1aWRfKS5tZXNzYWdlKFouZXJyb3JzLnRyYW5zZm9ybWVyX2ZsdXNoKS50cmFuc2Zvcm1lclR5cGUodGhpcy50cmFuc2Zvcm1lclR5cGVfKS52YXJpYXRpb24oIkVycm9yIikuZXJyb3IoS3QobikpLmJ1aWxkKCk7SC5yZXBvcnQoaSk7Y29uc3Qgbz17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sZXJyb3I6bixmdW5jdGlvbjoiZmx1c2gifTt0aGlzLmVtaXQoImVycm9yIixvKX19dGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0KCk7Y29uc3QgdD1uZXcgeigpLmFjdGlvbigiTWVkaWFUcmFuc2Zvcm1lciIpLmd1aWQodGhpcy51dWlkXykudHJhbnNmb3JtZXJUeXBlKHRoaXMudHJhbnNmb3JtZXJUeXBlXykudmFyaWF0aW9uKCJEZWxldGUiKS5idWlsZCgpO0gucmVwb3J0KHQpfXN0b3AoKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTdG9wIHN0cmVhbS4iKSx0aGlzLmNvbnRyb2xsZXJfJiYodGhpcy5mbHVzaCh0aGlzLmNvbnRyb2xsZXJfKSx0aGlzLmNvbnRyb2xsZXJfLnRlcm1pbmF0ZSgpKSx0aGlzLnNob3VsZFN0b3BfPSEwfW1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnQoKXtsZXQgZT0oRGF0ZS5ub3coKS10aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnRTdGFydFRpbWVzdGFtcF8pLzFlMyx0PXRoaXMuZnJhbWVzRnJvbVNvdXJjZV8vZSxuPXRoaXMuZnJhbWVzVHJhbnNmb3JtZWRfL2U7aWYodGhpcy50cmFja0V4cGVjdGVkUmF0ZV8hPS0xJiZ0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXypFcz50KXtjb25zdCBvPXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSx3YXJuaW5nVHlwZToiZnBzX2Ryb3AiLGRyb3BJbmZvOntyZXF1ZXN0ZWQ6dGhpcy50cmFja0V4cGVjdGVkUmF0ZV8sY3VycmVudDp0fX07dGhpcy5lbWl0KCJ3YXJuIixvKX1jb25zdCBpPW5ldyB6KCkuYWN0aW9uKCJNZWRpYVRyYW5zZm9ybWVyIikuZnBzKHQpLnRyYW5zZm9ybWVkRnBzKG4pLmZyYW1lc1RyYW5zZm9ybWVkKHRoaXMuZnJhbWVzVHJhbnNmb3JtZWRfKS5ndWlkKHRoaXMudXVpZF8pLnRyYW5zZm9ybWVyVHlwZSh0aGlzLnRyYW5zZm9ybWVyVHlwZV8pLnZpZGVvSGVpZ2h0KHRoaXMudmlkZW9IZWlnaHRfKS52aWRlb1dpZHRoKHRoaXMudmlkZW9XaWR0aF8pLnZhcmlhdGlvbigiUW9TIikuYnVpbGQoKTtILnJlcG9ydChpKSx0aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnRTdGFydFRpbWVzdGFtcF89MCx0aGlzLmZyYW1lc0Zyb21Tb3VyY2VfPTAsdGhpcy5mcmFtZXNUcmFuc2Zvcm1lZF89MH19Y2xhc3MgQXMgZXh0ZW5kcyBZdHtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMudHJhbnNmb3JtZXJzXz1bXSx0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz0tMTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IG49bmV3IFRzKGVbdF0sdCk7bi5vbigiZXJyb3IiLGk9Pnt0aGlzLmVtaXQoImVycm9yIixpKX0pLG4ub24oIndhcm4iLGk9Pnt0aGlzLmVtaXQoIndhcm4iLGkpfSksdGhpcy50cmFuc2Zvcm1lcnNfLnB1c2gobil9fXNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMudHJhY2tFeHBlY3RlZFJhdGVfPWU7Zm9yKGxldCB0IG9mIHRoaXMudHJhbnNmb3JtZXJzXyl0LnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKX1hc3luYyBzdGFydChlLHQpe2lmKCF0aGlzLnRyYW5zZm9ybWVyc198fHRoaXMudHJhbnNmb3JtZXJzXy5sZW5ndGg9PT0wKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBObyB0cmFuc2Zvcm1lcnMuIik7cmV0dXJufXRyeXtsZXQgbj1lO2ZvcihsZXQgaSBvZiB0aGlzLnRyYW5zZm9ybWVyc18pZT1lLnBpcGVUaHJvdWdoKG5ldyBUcmFuc2Zvcm1TdHJlYW0oaSkpO2UucGlwZVRvKHQpLnRoZW4oYXN5bmMoKT0+e2NvbnNvbGUubG9nKCJbUGlwZWxpbmVdIFNldHVwLiIpLGF3YWl0IHQuYWJvcnQoKSxhd2FpdCBuLmNhbmNlbCgpLHRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIiwicGlwZWxpbmVfZW5kZWQiKX0pLmNhdGNoKGFzeW5jIGk9PntlLmNhbmNlbCgpLnRoZW4oKCk9Pntjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTaHV0dGluZyBkb3duIHN0cmVhbXMgYWZ0ZXIgYWJvcnQuIil9KS5jYXRjaChvPT57Y29uc29sZS5lcnJvcigiW1BpcGVsaW5lXSBFcnJvciBmcm9tIHN0cmVhbSB0cmFuc2Zvcm06IixvKX0pLGF3YWl0IHQuYWJvcnQoaSksYXdhaXQgbi5jYW5jZWwoaSksdGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9lbmRlZF93aXRoX2Vycm9yIil9KX1jYXRjaHt0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvciIpLHRoaXMuZGVzdHJveSgpO3JldHVybn10aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX3N0YXJ0ZWQiKSxjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBQaXBlbGluZSBzdGFydGVkLiIpfWFzeW5jIGRlc3Ryb3koKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBEZXN0cm95aW5nIFBpcGVsaW5lLiIpO2ZvcihsZXQgZSBvZiB0aGlzLnRyYW5zZm9ybWVyc18pZS5zdG9wKCl9fWNsYXNzIHdzIGV4dGVuZHMgWXR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudXVpZF89ZG4oKSx0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz0tMTtjb25zdCBlPW5ldyB6KCkuYWN0aW9uKCJNZWRpYVByb2Nlc3NvciIpLmd1aWQodGhpcy51dWlkXykudmFyaWF0aW9uKCJDcmVhdGUiKS5idWlsZCgpO0gucmVwb3J0KGUpfXNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMudHJhY2tFeHBlY3RlZFJhdGVfPWUsdGhpcy5waXBlbGluZV8mJnRoaXMucGlwZWxpbmVfLnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKX10cmFuc2Zvcm0oZSx0KXtyZXR1cm4gdGhpcy5yZWFkYWJsZV89ZSx0aGlzLndyaXRhYmxlXz10LHRoaXMudHJhbnNmb3JtSW50ZXJuYWwoKX10cmFuc2Zvcm1JbnRlcm5hbCgpe3JldHVybiBuZXcgUHJvbWlzZSgoZSx0KT0+e2lmKCF0aGlzLnRyYW5zZm9ybWVyc198fHRoaXMudHJhbnNmb3JtZXJzXy5sZW5ndGg9PT0wKXtjb25zdCBpPW5ldyB6KCkuYWN0aW9uKCJNZWRpYVByb2Nlc3NvciIpLmd1aWQodGhpcy51dWlkXykubWVzc2FnZShaLmVycm9ycy50cmFuc2Zvcm1lcl9ub25lKS52YXJpYXRpb24oIkVycm9yIikuYnVpbGQoKTtILnJlcG9ydChpKSx0KCJbTWVkaWFQcm9jZXNzb3JdIE5lZWQgdG8gc2V0IHRyYW5zZm9ybWVycy4iKTtyZXR1cm59aWYoIXRoaXMucmVhZGFibGVfKXtjb25zdCBpPW5ldyB6KCkuYWN0aW9uKCJNZWRpYVByb2Nlc3NvciIpLmd1aWQodGhpcy51dWlkXykubWVzc2FnZShaLmVycm9ycy5yZWFkYWJsZV9udWxsKS52YXJpYXRpb24oIkVycm9yIikuYnVpbGQoKTtILnJlcG9ydChpKSx0KCJbTWVkaWFQcm9jZXNzb3JdIFJlYWRhYmxlIGlzIG51bGwuIik7cmV0dXJufWlmKCF0aGlzLndyaXRhYmxlXyl7Y29uc3QgaT1uZXcgeigpLmFjdGlvbigiTWVkaWFQcm9jZXNzb3IiKS5ndWlkKHRoaXMudXVpZF8pLm1lc3NhZ2UoWi5lcnJvcnMud3JpdGFibGVfbnVsbCkudmFyaWF0aW9uKCJFcnJvciIpLmJ1aWxkKCk7SC5yZXBvcnQoaSksdCgiW01lZGlhUHJvY2Vzc29yXSBXcml0YWJsZSBpcyBudWxsLiIpO3JldHVybn1sZXQgbj0hMTt0aGlzLnBpcGVsaW5lXyYmKG49ITAsdGhpcy5waXBlbGluZV8uY2xlYXJMaXN0ZW5lcnMoKSx0aGlzLnBpcGVsaW5lXy5kZXN0cm95KCkpLHRoaXMucGlwZWxpbmVfPW5ldyBBcyh0aGlzLnRyYW5zZm9ybWVyc18pLHRoaXMucGlwZWxpbmVfLm9uKCJ3YXJuIixpPT57dGhpcy5lbWl0KCJ3YXJuIixpKX0pLHRoaXMucGlwZWxpbmVfLm9uKCJlcnJvciIsaT0+e3RoaXMuZW1pdCgiZXJyb3IiLGkpfSksdGhpcy5waXBlbGluZV8ub24oInBpcGVsaW5lSW5mbyIsaT0+e24mJihpPT09InBpcGVsaW5lX3N0YXJ0ZWQiP2k9SnQucGlwZWxpbmVfcmVzdGFydGVkOmk9PT0icGlwZWxpbmVfc3RhcnRlZF93aXRoX2Vycm9yIiYmKGk9SnQucGlwZWxpbmVfcmVzdGFydGVkX3dpdGhfZXJyb3IpKSx0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsaSl9KSx0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyE9LTEmJnRoaXMucGlwZWxpbmVfLnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKSx0aGlzLnBpcGVsaW5lXy5zdGFydCh0aGlzLnJlYWRhYmxlXyx0aGlzLndyaXRhYmxlXykudGhlbigoKT0+e2UoKX0pLmNhdGNoKGk9Pnt0KGkpfSl9KX1zZXRUcmFuc2Zvcm1lcnMoZSl7Y29uc3QgdD1uZXcgeigpLmFjdGlvbigiTWVkaWFQcm9jZXNzb3IiKS5ndWlkKHRoaXMudXVpZF8pLm1lc3NhZ2UoWi51cGRhdGVzLnRyYW5zZm9ybWVyX25ldykudmFyaWF0aW9uKCJVcGRhdGUiKS5idWlsZCgpO3JldHVybiBILnJlcG9ydCh0KSx0aGlzLnRyYW5zZm9ybWVyc189ZSx0aGlzLnJlYWRhYmxlXyYmdGhpcy53cml0YWJsZV8/dGhpcy50cmFuc2Zvcm1JbnRlcm5hbCgpOlByb21pc2UucmVzb2x2ZSgpfWRlc3Ryb3koKXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3RoaXMucGlwZWxpbmVfJiZ0aGlzLnBpcGVsaW5lXy5kZXN0cm95KCk7Y29uc3QgdD1uZXcgeigpLmFjdGlvbigiTWVkaWFQcm9jZXNzb3IiKS5ndWlkKHRoaXMudXVpZF8pLnZhcmlhdGlvbigiRGVsZXRlIikuYnVpbGQoKTtILnJlcG9ydCh0KSxlKCl9KX19dmFyIGl0PShyPT4oci5Mb3c9IkxvdyIsci5IaWdoPSJIaWdoIixyKSkoaXR8fHt9KTsvKiBAbGljZW5zZSB0d2dsLmpzIDUuMC40IENvcHlyaWdodCAoYykgMjAxNSwgR3JlZ2cgVGF2YXJlcyBBbGwgUmlnaHRzIFJlc2VydmVkLgpBdmFpbGFibGUgdmlhIHRoZSBNSVQgbGljZW5zZS4Kc2VlOiBodHRwOi8vZ2l0aHViLmNvbS9ncmVnZ21hbi90d2dsLmpzIGZvciBkZXRhaWxzICovY29uc3QgUXQ9NTEyMCxEZT01MTIxLFp0PTUxMjIsZXI9NTEyMyx0cj01MTI0LHJyPTUxMjUsbnI9NTEyNixScz0zMjgxOSxTcz0zMjgyMCxJcz0zMzYzNSxGcz01MTMxLFBzPTMzNjQwLERzPTM1ODk5LENzPTM1OTAyLE9zPTM2MjY5LE1zPTM0MDQyLF9uPXt9O3tjb25zdCByPV9uO3JbUXRdPUludDhBcnJheSxyW0RlXT1VaW50OEFycmF5LHJbWnRdPUludDE2QXJyYXkscltlcl09VWludDE2QXJyYXksclt0cl09SW50MzJBcnJheSxyW3JyXT1VaW50MzJBcnJheSxyW25yXT1GbG9hdDMyQXJyYXkscltSc109VWludDE2QXJyYXkscltTc109VWludDE2QXJyYXkscltJc109VWludDE2QXJyYXkscltGc109VWludDE2QXJyYXkscltQc109VWludDMyQXJyYXkscltEc109VWludDMyQXJyYXkscltDc109VWludDMyQXJyYXkscltPc109VWludDMyQXJyYXkscltNc109VWludDMyQXJyYXl9ZnVuY3Rpb24gaXIocil7aWYociBpbnN0YW5jZW9mIEludDhBcnJheSlyZXR1cm4gUXQ7aWYociBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHIgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSlyZXR1cm4gRGU7aWYociBpbnN0YW5jZW9mIEludDE2QXJyYXkpcmV0dXJuIFp0O2lmKHIgaW5zdGFuY2VvZiBVaW50MTZBcnJheSlyZXR1cm4gZXI7aWYociBpbnN0YW5jZW9mIEludDMyQXJyYXkpcmV0dXJuIHRyO2lmKHIgaW5zdGFuY2VvZiBVaW50MzJBcnJheSlyZXR1cm4gcnI7aWYociBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlyZXR1cm4gbnI7dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlZCBhcnJheSB0eXBlIil9ZnVuY3Rpb24gTnMocil7aWYocj09PUludDhBcnJheSlyZXR1cm4gUXQ7aWYocj09PVVpbnQ4QXJyYXl8fHI9PT1VaW50OENsYW1wZWRBcnJheSlyZXR1cm4gRGU7aWYocj09PUludDE2QXJyYXkpcmV0dXJuIFp0O2lmKHI9PT1VaW50MTZBcnJheSlyZXR1cm4gZXI7aWYocj09PUludDMyQXJyYXkpcmV0dXJuIHRyO2lmKHI9PT1VaW50MzJBcnJheSlyZXR1cm4gcnI7aWYocj09PUZsb2F0MzJBcnJheSlyZXR1cm4gbnI7dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlZCBhcnJheSB0eXBlIil9ZnVuY3Rpb24gVXMocil7Y29uc3QgZT1fbltyXTtpZighZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gZ2wgdHlwZSIpO3JldHVybiBlfWNvbnN0IG90PXR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciE9InVuZGVmaW5lZCI/ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuYnVmZmVyJiYoZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8ZS5idWZmZXIgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcil9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmJ1ZmZlciYmZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn07ZnVuY3Rpb24geG4oLi4ucil7Y29uc29sZS5lcnJvciguLi5yKX1jb25zdCBibj1uZXcgTWFwO2Z1bmN0aW9uIENlKHIsZSl7aWYoIXJ8fHR5cGVvZiByIT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1ibi5nZXQoZSk7dHx8KHQ9bmV3IFdlYWtNYXAsYm4uc2V0KGUsdCkpO2xldCBuPXQuZ2V0KHIpO2lmKG49PT12b2lkIDApe2NvbnN0IGk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpO249aS5zdWJzdHJpbmcoOCxpLmxlbmd0aC0xKT09PWUsdC5zZXQocixuKX1yZXR1cm4gbn1mdW5jdGlvbiBCcyhyLGUpe3JldHVybiB0eXBlb2YgV2ViR0xCdWZmZXIhPSJ1bmRlZmluZWQiJiZDZShlLCJXZWJHTEJ1ZmZlciIpfWZ1bmN0aW9uIGtzKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTFJlbmRlcmJ1ZmZlciE9InVuZGVmaW5lZCImJkNlKGUsIldlYkdMUmVuZGVyYnVmZmVyIil9ZnVuY3Rpb24gTHMocixlKXtyZXR1cm4gdHlwZW9mIFdlYkdMU2hhZGVyIT0idW5kZWZpbmVkIiYmQ2UoZSwiV2ViR0xTaGFkZXIiKX1mdW5jdGlvbiBvcihyLGUpe3JldHVybiB0eXBlb2YgV2ViR0xUZXh0dXJlIT0idW5kZWZpbmVkIiYmQ2UoZSwiV2ViR0xUZXh0dXJlIil9ZnVuY3Rpb24gJHMocixlKXtyZXR1cm4gdHlwZW9mIFdlYkdMU2FtcGxlciE9InVuZGVmaW5lZCImJkNlKGUsIldlYkdMU2FtcGxlciIpfWNvbnN0IGduPTM1MDQ0LGxlPTM0OTYyLEdzPTM0OTYzLHpzPTM0NjYwLEhzPTUxMjAsVnM9NTEyMSxXcz01MTIyLGpzPTUxMjMscXM9NTEyNCxYcz01MTI1LFlzPTUxMjYsdm49e2F0dHJpYlByZWZpeDoiIn07ZnVuY3Rpb24gS3MocixlLHQsbixpKXtyLmJpbmRCdWZmZXIoZSx0KSxyLmJ1ZmZlckRhdGEoZSxuLGl8fGduKX1mdW5jdGlvbiBFbihyLGUsdCxuKXtpZihCcyhyLGUpKXJldHVybiBlO3Q9dHx8bGU7Y29uc3QgaT1yLmNyZWF0ZUJ1ZmZlcigpO3JldHVybiBLcyhyLHQsaSxlLG4pLGl9ZnVuY3Rpb24gVG4ocil7cmV0dXJuIHI9PT0iaW5kaWNlcyJ9ZnVuY3Rpb24gSnMocil7cmV0dXJuIHIgaW5zdGFuY2VvZiBJbnQ4QXJyYXl8fHIgaW5zdGFuY2VvZiBVaW50OEFycmF5fWZ1bmN0aW9uIFFzKHIpe3JldHVybiByPT09SW50OEFycmF5fHxyPT09VWludDhBcnJheX1mdW5jdGlvbiBacyhyKXtyZXR1cm4gci5sZW5ndGg/cjpyLmRhdGF9Y29uc3QgZWE9L2Nvb3JkfHRleHR1cmUvaSx0YT0vY29sb3J8Y29sb3VyL2k7ZnVuY3Rpb24gQW4ocixlKXtsZXQgdDtpZihlYS50ZXN0KHIpP3Q9Mjp0YS50ZXN0KHIpP3Q9NDp0PTMsZSV0PjApdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGd1ZXNzIG51bUNvbXBvbmVudHMgZm9yIGF0dHJpYnV0ZSAnJHtyfScuIFRyaWVkICR7dH0gYnV0ICR7ZX0gdmFsdWVzIGlzIG5vdCBldmVubHkgZGl2aXNpYmxlIGJ5ICR7dH0uIFlvdSBzaG91bGQgc3BlY2lmeSBpdC5gKTtyZXR1cm4gdH1mdW5jdGlvbiByYShyLGUpe3JldHVybiByLm51bUNvbXBvbmVudHN8fHIuc2l6ZXx8QW4oZSxacyhyKS5sZW5ndGgpfWZ1bmN0aW9uIHduKHIsZSl7aWYob3QocikpcmV0dXJuIHI7aWYob3Qoci5kYXRhKSlyZXR1cm4gci5kYXRhO0FycmF5LmlzQXJyYXkocikmJihyPXtkYXRhOnJ9KTtsZXQgdD1yLnR5cGU7cmV0dXJuIHR8fChUbihlKT90PVVpbnQxNkFycmF5OnQ9RmxvYXQzMkFycmF5KSxuZXcgdChyLmRhdGEpfWZ1bmN0aW9uIG5hKHIsZSl7Y29uc3QgdD17fTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbihuKXtpZighVG4obikpe2NvbnN0IGk9ZVtuXSxvPWkuYXR0cmlifHxpLm5hbWV8fGkuYXR0cmliTmFtZXx8dm4uYXR0cmliUHJlZml4K247aWYoaS52YWx1ZSl7aWYoIUFycmF5LmlzQXJyYXkoaS52YWx1ZSkmJiFvdChpLnZhbHVlKSl0aHJvdyBuZXcgRXJyb3IoImFycmF5LnZhbHVlIGlzIG5vdCBhcnJheSBvciB0eXBlZGFycmF5Iik7dFtvXT17dmFsdWU6aS52YWx1ZX19ZWxzZXtsZXQgcyxhLHUsZjtpZihpLmJ1ZmZlciYmaS5idWZmZXIgaW5zdGFuY2VvZiBXZWJHTEJ1ZmZlcilzPWkuYnVmZmVyLGY9aS5udW1Db21wb25lbnRzfHxpLnNpemUsYT1pLnR5cGUsdT1pLm5vcm1hbGl6ZTtlbHNlIGlmKHR5cGVvZiBpPT0ibnVtYmVyInx8dHlwZW9mIGkuZGF0YT09Im51bWJlciIpe2NvbnN0IGM9aS5kYXRhfHxpLGQ9aS50eXBlfHxGbG9hdDMyQXJyYXkscD1jKmQuQllURVNfUEVSX0VMRU1FTlQ7YT1OcyhkKSx1PWkubm9ybWFsaXplIT09dm9pZCAwP2kubm9ybWFsaXplOlFzKGQpLGY9aS5udW1Db21wb25lbnRzfHxpLnNpemV8fEFuKG4sYykscz1yLmNyZWF0ZUJ1ZmZlcigpLHIuYmluZEJ1ZmZlcihsZSxzKSxyLmJ1ZmZlckRhdGEobGUscCxpLmRyYXdUeXBlfHxnbil9ZWxzZXtjb25zdCBjPXduKGksbik7cz1FbihyLGMsdm9pZCAwLGkuZHJhd1R5cGUpLGE9aXIoYyksdT1pLm5vcm1hbGl6ZSE9PXZvaWQgMD9pLm5vcm1hbGl6ZTpKcyhjKSxmPXJhKGksbil9dFtvXT17YnVmZmVyOnMsbnVtQ29tcG9uZW50czpmLHR5cGU6YSxub3JtYWxpemU6dSxzdHJpZGU6aS5zdHJpZGV8fDAsb2Zmc2V0Omkub2Zmc2V0fHwwLGRpdmlzb3I6aS5kaXZpc29yPT09dm9pZCAwP3ZvaWQgMDppLmRpdmlzb3IsZHJhd1R5cGU6aS5kcmF3VHlwZX19fX0pLHIuYmluZEJ1ZmZlcihsZSxudWxsKSx0fWZ1bmN0aW9uIGlhKHIsZSl7cmV0dXJuIGU9PT1Ic3x8ZT09PVZzPzE6ZT09PVdzfHxlPT09anM/MjplPT09cXN8fGU9PT1Yc3x8ZT09PVlzPzQ6MH1jb25zdCBzcj1bInBvc2l0aW9uIiwicG9zaXRpb25zIiwiYV9wb3NpdGlvbiJdO2Z1bmN0aW9uIG9hKHIsZSl7bGV0IHQsbjtmb3Iobj0wO248c3IubGVuZ3RoJiYodD1zcltuXSwhKHQgaW4gZXx8KHQ9dm4uYXR0cmliUHJlZml4K3QsdCBpbiBlKSkpOysrbik7bj09PXNyLmxlbmd0aCYmKHQ9T2JqZWN0LmtleXMoZSlbMF0pO2NvbnN0IGk9ZVt0XTtpZighaS5idWZmZXIpcmV0dXJuIDE7ci5iaW5kQnVmZmVyKGxlLGkuYnVmZmVyKTtjb25zdCBvPXIuZ2V0QnVmZmVyUGFyYW1ldGVyKGxlLHpzKTtyLmJpbmRCdWZmZXIobGUsbnVsbCk7Y29uc3Qgcz1pYShyLGkudHlwZSksYT1vL3MsdT1pLm51bUNvbXBvbmVudHN8fGkuc2l6ZSxmPWEvdTtpZihmJTEhPT0wKXRocm93IG5ldyBFcnJvcihgbnVtQ29tcG9uZW50cyAke3V9IG5vdCBjb3JyZWN0IGZvciBsZW5ndGggJHtsZW5ndGh9YCk7cmV0dXJuIGZ9ZnVuY3Rpb24gc2EocixlLHQpe2NvbnN0IG49bmEocixlKSxpPU9iamVjdC5hc3NpZ24oe30sdHx8e30pO2kuYXR0cmlicz1PYmplY3QuYXNzaWduKHt9LHQ/dC5hdHRyaWJzOnt9LG4pO2NvbnN0IG89ZS5pbmRpY2VzO2lmKG8pe2NvbnN0IHM9d24obywiaW5kaWNlcyIpO2kuaW5kaWNlcz1FbihyLHMsR3MpLGkubnVtRWxlbWVudHM9cy5sZW5ndGgsaS5lbGVtZW50VHlwZT1pcihzKX1lbHNlIGkubnVtRWxlbWVudHN8fChpLm51bUVsZW1lbnRzPW9hKHIsaS5hdHRyaWJzKSk7cmV0dXJuIGl9ZnVuY3Rpb24gT2Uocil7cmV0dXJuISFyLnRleFN0b3JhZ2UyRH1jb25zdCBSbj1mdW5jdGlvbigpe2NvbnN0IHI9e30sZT17fTtmdW5jdGlvbiB0KG4pe2NvbnN0IGk9bi5jb25zdHJ1Y3Rvci5uYW1lO2lmKCFyW2ldKXtmb3IoY29uc3QgbyBpbiBuKWlmKHR5cGVvZiBuW29dPT0ibnVtYmVyIil7Y29uc3Qgcz1lW25bb11dO2VbbltvXV09cz9gJHtzfSB8ICR7b31gOm99cltpXT0hMH19cmV0dXJuIGZ1bmN0aW9uKGksbyl7cmV0dXJuIHQoaSksZVtvXXx8KHR5cGVvZiBvPT0ibnVtYmVyIj9gMHgke28udG9TdHJpbmcoMTYpfWA6byl9fSgpLG5lPXt0ZXh0dXJlQ29sb3I6bmV3IFVpbnQ4QXJyYXkoWzEyOCwxOTIsMjU1LDI1NV0pLHRleHR1cmVPcHRpb25zOnt9LGNyb3NzT3JpZ2luOnZvaWQgMH0sTWU9b3QsU249ZnVuY3Rpb24oKXtsZXQgcjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcj1yfHwodHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmZG9jdW1lbnQuY3JlYXRlRWxlbWVudD9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpOm51bGwpLHJ9fSgpLEluPTY0MDYsSj02NDA3LEk9NjQwOCxGbj02NDA5LFBuPTY0MTAsTmU9NjQwMixEbj0zNDA0MSxzdD0zMzA3MSxhYT05NzI4LHVhPTk3MjksaWU9MzU1MyxvZT0zNDA2NyxkZT0zMjg3OSxtZT0zNTg2Nixhcj0zNDA2OSxjYT0zNDA3MCxmYT0zNDA3MSxsYT0zNDA3MixkYT0zNDA3MyxtYT0zNDA3NCx1cj0xMDI0MSxjcj0xMDI0MCxhdD0xMDI0Mix1dD0xMDI0MyxDbj0zMjg4MixoYT0zMzA4MixwYT0zMzA4Myx5YT0zMzA4NCxfYT0zMzA4NSxmcj0zMzE3LE9uPTMzMTQsTW49MzI4NzgsTm49MzMxNixVbj0zMzE1LEJuPTMyODc3LHhhPTM3NDQzLGJhPTM3NDQxLGdhPTM3NDQwLHZhPTMzMzIxLEVhPTM2NzU2LFRhPTMzMzI1LEFhPTMzMzI2LHdhPTMzMzMwLFJhPTMzMzI5LFNhPTMzMzM4LElhPTMzMzM3LEZhPTMzMzQwLFBhPTMzMzM5LERhPTMzMzIzLENhPTM2NzU3LE9hPTMzMzI3LE1hPTMzMzI4LE5hPTMzMzM2LFVhPTMzMzM1LEJhPTMzMzMyLGthPTMzMzMxLExhPTMzMzM0LCRhPTMzMzMzLEdhPTMyODQ5LHphPTM1OTA1LEhhPTM2MTk0LFZhPTM2NzU4LFdhPTM1ODk4LGphPTM1OTAxLHFhPTM0ODQzLFhhPTM0ODM3LFlhPTM2MjIxLEthPTM2MjM5LEphPTM2MjE1LFFhPTM2MjMzLFphPTM2MjA5LGV1PTM2MjI3LHR1PTMyODU2LHJ1PTM1OTA3LG51PTM2NzU5LGl1PTMyODU1LG91PTMyODU0LHN1PTMyODU3LGF1PTM0ODQyLHV1PTM0ODM2LGN1PTM2MjIwLGZ1PTM2MjM4LGx1PTM2OTc1LGR1PTM2MjE0LG11PTM2MjMyLGh1PTM2MjI2LHB1PTM2MjA4LHl1PTMzMTg5LF91PTMzMTkwLHh1PTM2MDEyLGJ1PTM2MDEzLGd1PTM1MDU2LHNlPTUxMjAsUz01MTIxLGN0PTUxMjIsVGU9NTEyMyxmdD01MTI0LGhlPTUxMjUsTj01MTI2LGtuPTMyODE5LExuPTMyODIwLCRuPTMzNjM1LFc9NTEzMSxVZT0zNjE5Myxscj0zMzY0MCx2dT0zNTg5OSxFdT0zNTkwMixUdT0zNjI2OSxBdT0zNDA0MixsdD0zMzMxOSxBZT0zMzMyMCxkdD02NDAzLHdlPTM2MjQ0LFJlPTM2MjQ4LHBlPTM2MjQ5O2xldCBkcjtmdW5jdGlvbiBtdChyKXtpZighZHIpe2NvbnN0IGU9e307ZVtJbl09e3RleHR1cmVGb3JtYXQ6SW4sY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMSwyLDIsNF0sdHlwZTpbUyxXLFVlLE5dfSxlW0ZuXT17dGV4dHVyZUZvcm1hdDpGbixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxLDIsMiw0XSx0eXBlOltTLFcsVWUsTl19LGVbUG5dPXt0ZXh0dXJlRm9ybWF0OlBuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzIsNCw0LDhdLHR5cGU6W1MsVyxVZSxOXX0sZVtKXT17dGV4dHVyZUZvcm1hdDpKLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzMsNiw2LDEyLDJdLHR5cGU6W1MsVyxVZSxOLCRuXX0sZVtJXT17dGV4dHVyZUZvcm1hdDpJLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsOCw4LDE2LDIsMl0sdHlwZTpbUyxXLFVlLE4sa24sTG5dfSxlW05lXT17dGV4dHVyZUZvcm1hdDpOZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyLDRdLHR5cGU6W2hlLFRlXX0sZVt2YV09e3RleHR1cmVGb3JtYXQ6ZHQsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMV0sdHlwZTpbU119LGVbRWFdPXt0ZXh0dXJlRm9ybWF0OmR0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W3NlXX0sZVtUYV09e3RleHR1cmVGb3JtYXQ6ZHQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNCwyXSx0eXBlOltOLFddfSxlW0FhXT17dGV4dHVyZUZvcm1hdDpkdCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltOXX0sZVt3YV09e3RleHR1cmVGb3JtYXQ6d2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMV0sdHlwZTpbU119LGVbUmFdPXt0ZXh0dXJlRm9ybWF0OndlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W3NlXX0sZVtCYV09e3RleHR1cmVGb3JtYXQ6d2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbVGVdfSxlW2thXT17dGV4dHVyZUZvcm1hdDp3ZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltjdF19LGVbTGFdPXt0ZXh0dXJlRm9ybWF0OndlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2hlXX0sZVskYV09e3RleHR1cmVGb3JtYXQ6d2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbZnRdfSxlW0RhXT17dGV4dHVyZUZvcm1hdDpsdCxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltTXX0sZVtDYV09e3RleHR1cmVGb3JtYXQ6bHQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbc2VdfSxlW09hXT17dGV4dHVyZUZvcm1hdDpsdCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols4LDRdLHR5cGU6W04sV119LGVbTWFdPXt0ZXh0dXJlRm9ybWF0Omx0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W05dfSxlW05hXT17dGV4dHVyZUZvcm1hdDpBZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltTXX0sZVtVYV09e3RleHR1cmVGb3JtYXQ6QWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbc2VdfSxlW1NhXT17dGV4dHVyZUZvcm1hdDpBZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltUZV19LGVbSWFdPXt0ZXh0dXJlRm9ybWF0OkFlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2N0XX0sZVtGYV09e3RleHR1cmVGb3JtYXQ6QWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbaGVdfSxlW1BhXT17dGV4dHVyZUZvcm1hdDpBZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltmdF19LGVbR2FdPXt0ZXh0dXJlRm9ybWF0OkosY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbU119LGVbemFdPXt0ZXh0dXJlRm9ybWF0OkosY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbU119LGVbSGFdPXt0ZXh0dXJlRm9ybWF0OkosY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMywyXSx0eXBlOltTLCRuXX0sZVtWYV09e3RleHR1cmVGb3JtYXQ6Sixjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlszXSx0eXBlOltzZV19LGVbV2FdPXt0ZXh0dXJlRm9ybWF0OkosY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTIsNiw0XSx0eXBlOltOLFcsdnVdfSxlW2phXT17dGV4dHVyZUZvcm1hdDpKLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEyLDYsNF0sdHlwZTpbTixXLEV1XX0sZVtxYV09e3RleHR1cmVGb3JtYXQ6Sixjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxMiw2XSx0eXBlOltOLFddfSxlW1hhXT17dGV4dHVyZUZvcm1hdDpKLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOltOXX0sZVtZYV09e3RleHR1cmVGb3JtYXQ6UmUsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbU119LGVbS2FdPXt0ZXh0dXJlRm9ybWF0OlJlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W3NlXX0sZVtKYV09e3RleHR1cmVGb3JtYXQ6UmUsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNl0sdHlwZTpbVGVdfSxlW1FhXT17dGV4dHVyZUZvcm1hdDpSZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols2XSx0eXBlOltjdF19LGVbWmFdPXt0ZXh0dXJlRm9ybWF0OlJlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOltoZV19LGVbZXVdPXt0ZXh0dXJlRm9ybWF0OlJlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOltmdF19LGVbdHVdPXt0ZXh0dXJlRm9ybWF0OkksY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbU119LGVbcnVdPXt0ZXh0dXJlRm9ybWF0OkksY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbU119LGVbbnVdPXt0ZXh0dXJlRm9ybWF0OkksY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbc2VdfSxlW2l1XT17dGV4dHVyZUZvcm1hdDpJLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsMiw0XSx0eXBlOltTLExuLGxyXX0sZVtvdV09e3RleHR1cmVGb3JtYXQ6SSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDJdLHR5cGU6W1Msa25dfSxlW3N1XT17dGV4dHVyZUZvcm1hdDpJLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2xyXX0sZVthdV09e3RleHR1cmVGb3JtYXQ6SSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxNiw4XSx0eXBlOltOLFddfSxlW3V1XT17dGV4dHVyZUZvcm1hdDpJLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOltOXX0sZVtjdV09e3RleHR1cmVGb3JtYXQ6cGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbU119LGVbZnVdPXt0ZXh0dXJlRm9ybWF0OnBlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W3NlXX0sZVtsdV09e3RleHR1cmVGb3JtYXQ6cGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbbHJdfSxlW2R1XT17dGV4dHVyZUZvcm1hdDpwZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltUZV19LGVbbXVdPXt0ZXh0dXJlRm9ybWF0OnBlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W2N0XX0sZVtodV09e3RleHR1cmVGb3JtYXQ6cGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMTZdLHR5cGU6W2Z0XX0sZVtwdV09e3RleHR1cmVGb3JtYXQ6cGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMTZdLHR5cGU6W2hlXX0sZVt5dV09e3RleHR1cmVGb3JtYXQ6TmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMiw0XSx0eXBlOltUZSxoZV19LGVbX3VdPXt0ZXh0dXJlRm9ybWF0Ok5lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2hlXX0sZVt4dV09e3RleHR1cmVGb3JtYXQ6TmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbTl19LGVbZ3VdPXt0ZXh0dXJlRm9ybWF0OkRuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0F1XX0sZVtidV09e3RleHR1cmVGb3JtYXQ6RG4sY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbVHVdfSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2NvbnN0IG49ZVt0XTtuLmJ5dGVzUGVyRWxlbWVudE1hcD17fSxuLmJ5dGVzUGVyRWxlbWVudC5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7Y29uc3Qgcz1uLnR5cGVbb107bi5ieXRlc1BlckVsZW1lbnRNYXBbc109aX0pfSksZHI9ZX1yZXR1cm4gZHJbcl19ZnVuY3Rpb24gd3UocixlKXtjb25zdCB0PW10KHIpO2lmKCF0KXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0Ijtjb25zdCBuPXQuYnl0ZXNQZXJFbGVtZW50TWFwW2VdO2lmKG49PT12b2lkIDApdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybiBufWZ1bmN0aW9uIEJlKHIpe2NvbnN0IGU9bXQocik7aWYoIWUpdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybntmb3JtYXQ6ZS50ZXh0dXJlRm9ybWF0LHR5cGU6ZS50eXBlWzBdfX1mdW5jdGlvbiBHbihyKXtyZXR1cm4ociZyLTEpPT09MH1mdW5jdGlvbiBSdShyLGUsdCxuKXtpZighT2UocikpcmV0dXJuIEduKGUpJiZHbih0KTtjb25zdCBpPW10KG4pO2lmKCFpKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm4gaS5jb2xvclJlbmRlcmFibGUmJmkudGV4dHVyZUZpbHRlcmFibGV9ZnVuY3Rpb24gU3Uocil7Y29uc3QgZT1tdChyKTtpZighZSl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7cmV0dXJuIGUudGV4dHVyZUZpbHRlcmFibGV9ZnVuY3Rpb24gSXUocixlLHQpe3JldHVybiBNZShlKT9pcihlKTp0fHxTfWZ1bmN0aW9uIGh0KHIsZSx0LG4saSl7aWYoaSUxIT09MCl0aHJvdyJjYW4ndCBndWVzcyBkaW1lbnNpb25zIjtpZighdCYmIW4pe2NvbnN0IG89TWF0aC5zcXJ0KGkvKGU9PT1vZT82OjEpKTtvJTE9PT0wPyh0PW8sbj1vKToodD1pLG49MSl9ZWxzZSBpZihuKXtpZighdCYmKHQ9aS9uLHQlMSkpdGhyb3ciY2FuJ3QgZ3Vlc3MgZGltZW5zaW9ucyJ9ZWxzZSBpZihuPWkvdCxuJTEpdGhyb3ciY2FuJ3QgZ3Vlc3MgZGltZW5zaW9ucyI7cmV0dXJue3dpZHRoOnQsaGVpZ2h0Om59fWZ1bmN0aW9uIFNlKHIsZSl7ZS5jb2xvcnNwYWNlQ29udmVyc2lvbiE9PXZvaWQgMCYmci5waXhlbFN0b3JlaSh4YSxlLmNvbG9yc3BhY2VDb252ZXJzaW9uKSxlLnByZW11bHRpcGx5QWxwaGEhPT12b2lkIDAmJnIucGl4ZWxTdG9yZWkoYmEsZS5wcmVtdWx0aXBseUFscGhhKSxlLmZsaXBZIT09dm9pZCAwJiZyLnBpeGVsU3RvcmVpKGdhLGUuZmxpcFkpfWZ1bmN0aW9uIHpuKHIpe3IucGl4ZWxTdG9yZWkoZnIsNCksT2UocikmJihyLnBpeGVsU3RvcmVpKE9uLDApLHIucGl4ZWxTdG9yZWkoTW4sMCksci5waXhlbFN0b3JlaShObiwwKSxyLnBpeGVsU3RvcmVpKFVuLDApLHIucGl4ZWxTdG9yZWkoQm4sMCkpfWZ1bmN0aW9uIEZ1KHIsZSx0LG4pe24ubWluTWFnJiYodC5jYWxsKHIsZSx1cixuLm1pbk1hZyksdC5jYWxsKHIsZSxjcixuLm1pbk1hZykpLG4ubWluJiZ0LmNhbGwocixlLHVyLG4ubWluKSxuLm1hZyYmdC5jYWxsKHIsZSxjcixuLm1hZyksbi53cmFwJiYodC5jYWxsKHIsZSxhdCxuLndyYXApLHQuY2FsbChyLGUsdXQsbi53cmFwKSwoZT09PWRlfHwkcyhyLGUpKSYmdC5jYWxsKHIsZSxDbixuLndyYXApKSxuLndyYXBSJiZ0LmNhbGwocixlLENuLG4ud3JhcFIpLG4ud3JhcFMmJnQuY2FsbChyLGUsYXQsbi53cmFwUyksbi53cmFwVCYmdC5jYWxsKHIsZSx1dCxuLndyYXBUKSxuLm1pbkxvZCYmdC5jYWxsKHIsZSxoYSxuLm1pbkxvZCksbi5tYXhMb2QmJnQuY2FsbChyLGUscGEsbi5tYXhMb2QpLG4uYmFzZUxldmVsJiZ0LmNhbGwocixlLHlhLG4uYmFzZUxldmVsKSxuLm1heExldmVsJiZ0LmNhbGwocixlLF9hLG4ubWF4TGV2ZWwpfWZ1bmN0aW9uIEhuKHIsZSx0KXtjb25zdCBuPXQudGFyZ2V0fHxpZTtyLmJpbmRUZXh0dXJlKG4sZSksRnUocixuLHIudGV4UGFyYW1ldGVyaSx0KX1mdW5jdGlvbiBQdShyKXtyZXR1cm4gcj1yfHxuZS50ZXh0dXJlQ29sb3IsTWUocik/cjpuZXcgVWludDhBcnJheShbclswXSoyNTUsclsxXSoyNTUsclsyXSoyNTUsclszXSoyNTVdKX1mdW5jdGlvbiBtcihyLGUsdCxuLGksbyl7dD10fHxuZS50ZXh0dXJlT3B0aW9ucyxvPW98fEk7Y29uc3Qgcz10LnRhcmdldHx8aWU7aWYobj1ufHx0LndpZHRoLGk9aXx8dC5oZWlnaHQsci5iaW5kVGV4dHVyZShzLGUpLFJ1KHIsbixpLG8pKXIuZ2VuZXJhdGVNaXBtYXAocyk7ZWxzZXtjb25zdCBhPVN1KG8pP3VhOmFhO3IudGV4UGFyYW1ldGVyaShzLHVyLGEpLHIudGV4UGFyYW1ldGVyaShzLGNyLGEpLHIudGV4UGFyYW1ldGVyaShzLGF0LHN0KSxyLnRleFBhcmFtZXRlcmkocyx1dCxzdCl9fWZ1bmN0aW9uIGtlKHIpe3JldHVybiByLmF1dG89PT0hMHx8ci5hdXRvPT09dm9pZCAwJiZyLmxldmVsPT09dm9pZCAwfWZ1bmN0aW9uIGhyKHIsZSl7cmV0dXJuIGU9ZXx8e30sZS5jdWJlRmFjZU9yZGVyfHxbYXIsY2EsZmEsbGEsZGEsbWFdfWZ1bmN0aW9uIHByKHIsZSl7Y29uc3Qgbj1ocihyLGUpLm1hcChmdW5jdGlvbihpLG8pe3JldHVybntmYWNlOmksbmR4Om99fSk7cmV0dXJuIG4uc29ydChmdW5jdGlvbihpLG8pe3JldHVybiBpLmZhY2Utby5mYWNlfSksbn1mdW5jdGlvbiBWbihyLGUsdCxuKXtuPW58fG5lLnRleHR1cmVPcHRpb25zO2NvbnN0IGk9bi50YXJnZXR8fGllLG89bi5sZXZlbHx8MDtsZXQgcz10LndpZHRoLGE9dC5oZWlnaHQ7Y29uc3QgdT1uLmludGVybmFsRm9ybWF0fHxuLmZvcm1hdHx8SSxmPUJlKHUpLGM9bi5mb3JtYXR8fGYuZm9ybWF0LGQ9bi50eXBlfHxmLnR5cGU7aWYoU2UocixuKSxyLmJpbmRUZXh0dXJlKGksZSksaT09PW9lKXtjb25zdCBwPXQud2lkdGgseT10LmhlaWdodDtsZXQgbSxfO2lmKHAvNj09PXkpbT15LF89WzAsMCwxLDAsMiwwLDMsMCw0LDAsNSwwXTtlbHNlIGlmKHkvNj09PXApbT1wLF89WzAsMCwwLDEsMCwyLDAsMywwLDQsMCw1XTtlbHNlIGlmKHAvMz09PXkvMiltPXAvMyxfPVswLDAsMSwwLDIsMCwwLDEsMSwxLDIsMV07ZWxzZSBpZihwLzI9PT15LzMpbT1wLzIsXz1bMCwwLDEsMCwwLDEsMSwxLDAsMiwxLDJdO2Vsc2UgdGhyb3ciY2FuJ3QgZmlndXJlIG91dCBjdWJlIG1hcCBmcm9tIGVsZW1lbnQ6ICIrKHQuc3JjP3Quc3JjOnQubm9kZU5hbWUpO2NvbnN0IGI9U24oKTtiPyhiLmNhbnZhcy53aWR0aD1tLGIuY2FudmFzLmhlaWdodD1tLHM9bSxhPW0scHIocixuKS5mb3JFYWNoKGZ1bmN0aW9uKGcpe2NvbnN0IFQ9X1tnLm5keCoyKzBdKm0sRj1fW2cubmR4KjIrMV0qbTtiLmRyYXdJbWFnZSh0LFQsRixtLG0sMCwwLG0sbSksci50ZXhJbWFnZTJEKGcuZmFjZSxvLHUsYyxkLGIuY2FudmFzKX0pLGIuY2FudmFzLndpZHRoPTEsYi5jYW52YXMuaGVpZ2h0PTEpOnR5cGVvZiBjcmVhdGVJbWFnZUJpdG1hcCE9InVuZGVmaW5lZCImJihzPW0sYT1tLHByKHIsbikuZm9yRWFjaChmdW5jdGlvbihnKXtjb25zdCBUPV9bZy5uZHgqMiswXSptLEY9X1tnLm5keCoyKzFdKm07ci50ZXhJbWFnZTJEKGcuZmFjZSxvLHUsbSxtLDAsYyxkLG51bGwpLGNyZWF0ZUltYWdlQml0bWFwKHQsVCxGLG0sbSx7cHJlbXVsdGlwbHlBbHBoYToibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSkudGhlbihmdW5jdGlvbihMKXtTZShyLG4pLHIuYmluZFRleHR1cmUoaSxlKSxyLnRleEltYWdlMkQoZy5mYWNlLG8sdSxjLGQsTCksa2UobikmJm1yKHIsZSxuLHMsYSx1KX0pfSkpfWVsc2UgaWYoaT09PWRlfHxpPT09bWUpe2NvbnN0IHA9TWF0aC5taW4odC53aWR0aCx0LmhlaWdodCkseT1NYXRoLm1heCh0LndpZHRoLHQuaGVpZ2h0KSxtPXkvcDtpZihtJTEhPT0wKXRocm93ImNhbiBub3QgY29tcHV0ZSAzRCBkaW1lbnNpb25zIG9mIGVsZW1lbnQiO2NvbnN0IF89dC53aWR0aD09PXk/MTowLGI9dC5oZWlnaHQ9PT15PzE6MDtyLnBpeGVsU3RvcmVpKGZyLDEpLHIucGl4ZWxTdG9yZWkoT24sdC53aWR0aCksci5waXhlbFN0b3JlaShNbiwwKSxyLnBpeGVsU3RvcmVpKEJuLDApLHIudGV4SW1hZ2UzRChpLG8sdSxwLHAscCwwLGMsZCxudWxsKTtmb3IobGV0IGc9MDtnPG07KytnKXtjb25zdCBUPWcqcCpfLEY9ZypwKmI7ci5waXhlbFN0b3JlaShObixUKSxyLnBpeGVsU3RvcmVpKFVuLEYpLHIudGV4U3ViSW1hZ2UzRChpLG8sMCwwLGcscCxwLDEsYyxkLHQpfXpuKHIpfWVsc2Ugci50ZXhJbWFnZTJEKGksbyx1LGMsZCx0KTtrZShuKSYmbXIocixlLG4scyxhLHUpLEhuKHIsZSxuKX1mdW5jdGlvbiBMZSgpe31mdW5jdGlvbiBEdShyKXtpZih0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiKXtjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gZS5ocmVmPXIsZS5ob3N0bmFtZT09PWxvY2F0aW9uLmhvc3RuYW1lJiZlLnBvcnQ9PT1sb2NhdGlvbi5wb3J0JiZlLnByb3RvY29sPT09bG9jYXRpb24ucHJvdG9jb2x9ZWxzZXtjb25zdCBlPW5ldyBVUkwobG9jYXRpb24uaHJlZikub3JpZ2luO3JldHVybiBuZXcgVVJMKHIsbG9jYXRpb24uaHJlZikub3JpZ2luPT09ZX19ZnVuY3Rpb24gQ3UocixlKXtyZXR1cm4gZT09PXZvaWQgMCYmIUR1KHIpPyJhbm9ueW1vdXMiOmV9ZnVuY3Rpb24gT3UocixlLHQpe3Q9dHx8TGU7bGV0IG47aWYoZT1lIT09dm9pZCAwP2U6bmUuY3Jvc3NPcmlnaW4sZT1DdShyLGUpLHR5cGVvZiBJbWFnZSE9InVuZGVmaW5lZCIpe249bmV3IEltYWdlLGUhPT12b2lkIDAmJihuLmNyb3NzT3JpZ2luPWUpO2NvbnN0IGk9ZnVuY3Rpb24oKXtuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixvKSxuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHMpLG49bnVsbH0sbz1mdW5jdGlvbigpe2NvbnN0IHU9ImNvdWxkbid0IGxvYWQgaW1hZ2U6ICIrcjt4bih1KSx0KHUsbiksaSgpfSxzPWZ1bmN0aW9uKCl7dChudWxsLG4pLGkoKX07cmV0dXJuIG4uYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLG8pLG4uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIscyksbi5zcmM9cixufWVsc2UgaWYodHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIil7bGV0IGksbztjb25zdCBzPWZ1bmN0aW9uKCl7dChpLG8pfSxhPXt9O2UmJihhLm1vZGU9ImNvcnMiKSxmZXRjaChyLGEpLnRoZW4oZnVuY3Rpb24odSl7aWYoIXUub2spdGhyb3cgdTtyZXR1cm4gdS5ibG9iKCl9KS50aGVuKGZ1bmN0aW9uKHUpe3JldHVybiBjcmVhdGVJbWFnZUJpdG1hcCh1LHtwcmVtdWx0aXBseUFscGhhOiJub25lIixjb2xvclNwYWNlQ29udmVyc2lvbjoibm9uZSJ9KX0pLnRoZW4oZnVuY3Rpb24odSl7bz11LHNldFRpbWVvdXQocyl9KS5jYXRjaChmdW5jdGlvbih1KXtpPXUsc2V0VGltZW91dChzKX0pLG49bnVsbH1yZXR1cm4gbn1mdW5jdGlvbiBXbihyKXtyZXR1cm4gdHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmciBpbnN0YW5jZW9mIEltYWdlQml0bWFwfHx0eXBlb2YgSW1hZ2VEYXRhIT0idW5kZWZpbmVkIiYmciBpbnN0YW5jZW9mIEltYWdlRGF0YXx8dHlwZW9mIEhUTUxFbGVtZW50IT0idW5kZWZpbmVkIiYmciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fWZ1bmN0aW9uIHlyKHIsZSx0KXtyZXR1cm4gV24ocik/KHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0KG51bGwscil9KSxyKTpPdShyLGUsdCl9ZnVuY3Rpb24gX3IocixlLHQpe3Q9dHx8bmUudGV4dHVyZU9wdGlvbnM7Y29uc3Qgbj10LnRhcmdldHx8aWU7aWYoci5iaW5kVGV4dHVyZShuLGUpLHQuY29sb3I9PT0hMSlyZXR1cm47Y29uc3QgaT1QdSh0LmNvbG9yKTtpZihuPT09b2UpZm9yKGxldCBvPTA7bzw2OysrbylyLnRleEltYWdlMkQoYXIrbywwLEksMSwxLDAsSSxTLGkpO2Vsc2Ugbj09PWRlfHxuPT09bWU/ci50ZXhJbWFnZTNEKG4sMCxJLDEsMSwxLDAsSSxTLGkpOnIudGV4SW1hZ2UyRChuLDAsSSwxLDEsMCxJLFMsaSl9ZnVuY3Rpb24gTXUocixlLHQsbil7cmV0dXJuIG49bnx8TGUsdD10fHxuZS50ZXh0dXJlT3B0aW9ucyxfcihyLGUsdCksdD1PYmplY3QuYXNzaWduKHt9LHQpLHlyKHQuc3JjLHQuY3Jvc3NPcmlnaW4sZnVuY3Rpb24obyxzKXtvP24obyxlLHMpOihWbihyLGUscyx0KSxuKG51bGwsZSxzKSl9KX1mdW5jdGlvbiBOdShyLGUsdCxuKXtuPW58fExlO2NvbnN0IGk9dC5zcmM7aWYoaS5sZW5ndGghPT02KXRocm93InRoZXJlIG11c3QgYmUgNiB1cmxzIGZvciBhIGN1YmVtYXAiO2NvbnN0IG89dC5sZXZlbHx8MCxzPXQuaW50ZXJuYWxGb3JtYXR8fHQuZm9ybWF0fHxJLGE9QmUocyksdT10LmZvcm1hdHx8YS5mb3JtYXQsZj10LnR5cGV8fFMsYz10LnRhcmdldHx8aWU7aWYoYyE9PW9lKXRocm93InRhcmdldCBtdXN0IGJlIFRFWFRVUkVfQ1VCRV9NQVAiO19yKHIsZSx0KSx0PU9iamVjdC5hc3NpZ24oe30sdCk7bGV0IGQ9Njtjb25zdCBwPVtdLHk9aHIocix0KTtsZXQgbTtmdW5jdGlvbiBfKGIpe3JldHVybiBmdW5jdGlvbihnLFQpey0tZCxnP3AucHVzaChnKTpULndpZHRoIT09VC5oZWlnaHQ/cC5wdXNoKCJjdWJlbWFwIGZhY2UgaW1nIGlzIG5vdCBhIHNxdWFyZTogIitULnNyYyk6KFNlKHIsdCksci5iaW5kVGV4dHVyZShjLGUpLGQ9PT01P2hyKCkuZm9yRWFjaChmdW5jdGlvbihGKXtyLnRleEltYWdlMkQoRixvLHMsdSxmLFQpfSk6ci50ZXhJbWFnZTJEKGIsbyxzLHUsZixUKSxrZSh0KSYmci5nZW5lcmF0ZU1pcG1hcChjKSksZD09PTAmJm4ocC5sZW5ndGg/cDp2b2lkIDAsZSxtKX19bT1pLm1hcChmdW5jdGlvbihiLGcpe3JldHVybiB5cihiLHQuY3Jvc3NPcmlnaW4sXyh5W2ddKSl9KX1mdW5jdGlvbiBVdShyLGUsdCxuKXtuPW58fExlO2NvbnN0IGk9dC5zcmMsbz10LmludGVybmFsRm9ybWF0fHx0LmZvcm1hdHx8SSxzPUJlKG8pLGE9dC5mb3JtYXR8fHMuZm9ybWF0LHU9dC50eXBlfHxTLGY9dC50YXJnZXR8fG1lO2lmKGYhPT1kZSYmZiE9PW1lKXRocm93InRhcmdldCBtdXN0IGJlIFRFWFRVUkVfM0Qgb3IgVEVYVFVSRV8yRF9BUlJBWSI7X3IocixlLHQpLHQ9T2JqZWN0LmFzc2lnbih7fSx0KTtsZXQgYz1pLmxlbmd0aDtjb25zdCBkPVtdO2xldCBwO2NvbnN0IHk9dC5sZXZlbHx8MDtsZXQgbT10LndpZHRoLF89dC5oZWlnaHQ7Y29uc3QgYj1pLmxlbmd0aDtsZXQgZz0hMDtmdW5jdGlvbiBUKEYpe3JldHVybiBmdW5jdGlvbihMLFYpe2lmKC0tYyxMKWQucHVzaChMKTtlbHNle2lmKFNlKHIsdCksci5iaW5kVGV4dHVyZShmLGUpLGcpe2c9ITEsbT10LndpZHRofHxWLndpZHRoLF89dC5oZWlnaHR8fFYuaGVpZ2h0LHIudGV4SW1hZ2UzRChmLHksbyxtLF8sYiwwLGEsdSxudWxsKTtmb3IobGV0IGVlPTA7ZWU8YjsrK2VlKXIudGV4U3ViSW1hZ2UzRChmLHksMCwwLGVlLG0sXywxLGEsdSxWKX1lbHNle2xldCBlZT1WLHE7KFYud2lkdGghPT1tfHxWLmhlaWdodCE9PV8pJiYocT1TbigpLGVlPXEuY2FudmFzLHEuY2FudmFzLndpZHRoPW0scS5jYW52YXMuaGVpZ2h0PV8scS5kcmF3SW1hZ2UoViwwLDAsbSxfKSksci50ZXhTdWJJbWFnZTNEKGYseSwwLDAsRixtLF8sMSxhLHUsZWUpLHEmJmVlPT09cS5jYW52YXMmJihxLmNhbnZhcy53aWR0aD0wLHEuY2FudmFzLmhlaWdodD0wKX1rZSh0KSYmci5nZW5lcmF0ZU1pcG1hcChmKX1jPT09MCYmbihkLmxlbmd0aD9kOnZvaWQgMCxlLHApfX1wPWkubWFwKGZ1bmN0aW9uKEYsTCl7cmV0dXJuIHlyKEYsdC5jcm9zc09yaWdpbixUKEwpKX0pfWZ1bmN0aW9uIEJ1KHIsZSx0LG4pe249bnx8bmUudGV4dHVyZU9wdGlvbnM7Y29uc3QgaT1uLnRhcmdldHx8aWU7ci5iaW5kVGV4dHVyZShpLGUpO2xldCBvPW4ud2lkdGgscz1uLmhlaWdodCxhPW4uZGVwdGg7Y29uc3QgdT1uLmxldmVsfHwwLGY9bi5pbnRlcm5hbEZvcm1hdHx8bi5mb3JtYXR8fEksYz1CZShmKSxkPW4uZm9ybWF0fHxjLmZvcm1hdCxwPW4udHlwZXx8SXUocix0LGMudHlwZSk7aWYoTWUodCkpdCBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5JiYodD1uZXcgVWludDhBcnJheSh0LmJ1ZmZlcikpO2Vsc2V7Y29uc3QgYj1VcyhwKTt0PW5ldyBiKHQpfWNvbnN0IHk9d3UoZixwKSxtPXQuYnl0ZUxlbmd0aC95O2lmKG0lMSl0aHJvdyJsZW5ndGggd3Jvbmcgc2l6ZSBmb3IgZm9ybWF0OiAiK1JuKHIsZCk7bGV0IF87aWYoaT09PWRlfHxpPT09bWUpaWYoIW8mJiFzJiYhYSl7Y29uc3QgYj1NYXRoLmNicnQobSk7aWYoYiUxIT09MCl0aHJvdyJjYW4ndCBndWVzcyBjdWJlIHNpemUgb2YgYXJyYXkgb2YgbnVtRWxlbWVudHM6ICIrbTtvPWIscz1iLGE9Yn1lbHNlIG8mJighc3x8IWEpPyhfPWh0KHIsaSxzLGEsbS9vKSxzPV8ud2lkdGgsYT1fLmhlaWdodCk6cyYmKCFvfHwhYSk/KF89aHQocixpLG8sYSxtL3MpLG89Xy53aWR0aCxhPV8uaGVpZ2h0KTooXz1odChyLGksbyxzLG0vYSksbz1fLndpZHRoLHM9Xy5oZWlnaHQpO2Vsc2UgXz1odChyLGksbyxzLG0pLG89Xy53aWR0aCxzPV8uaGVpZ2h0O2lmKHpuKHIpLHIucGl4ZWxTdG9yZWkoZnIsbi51bnBhY2tBbGlnbm1lbnR8fDEpLFNlKHIsbiksaT09PW9lKXtjb25zdCBiPXkvdC5CWVRFU19QRVJfRUxFTUVOVCxnPW0vNipiO3ByKHIsbikuZm9yRWFjaChUPT57Y29uc3QgRj1nKlQubmR4LEw9dC5zdWJhcnJheShGLEYrZyk7ci50ZXhJbWFnZTJEKFQuZmFjZSx1LGYsbyxzLDAsZCxwLEwpfSl9ZWxzZSBpPT09ZGV8fGk9PT1tZT9yLnRleEltYWdlM0QoaSx1LGYsbyxzLGEsMCxkLHAsdCk6ci50ZXhJbWFnZTJEKGksdSxmLG8scywwLGQscCx0KTtyZXR1cm57d2lkdGg6byxoZWlnaHQ6cyxkZXB0aDphLHR5cGU6cH19ZnVuY3Rpb24ga3UocixlLHQpe2NvbnN0IG49dC50YXJnZXR8fGllO3IuYmluZFRleHR1cmUobixlKTtjb25zdCBpPXQubGV2ZWx8fDAsbz10LmludGVybmFsRm9ybWF0fHx0LmZvcm1hdHx8SSxzPUJlKG8pLGE9dC5mb3JtYXR8fHMuZm9ybWF0LHU9dC50eXBlfHxzLnR5cGU7aWYoU2Uocix0KSxuPT09b2UpZm9yKGxldCBmPTA7Zjw2OysrZilyLnRleEltYWdlMkQoYXIrZixpLG8sdC53aWR0aCx0LmhlaWdodCwwLGEsdSxudWxsKTtlbHNlIG49PT1kZXx8bj09PW1lP3IudGV4SW1hZ2UzRChuLGksbyx0LndpZHRoLHQuaGVpZ2h0LHQuZGVwdGgsMCxhLHUsbnVsbCk6ci50ZXhJbWFnZTJEKG4saSxvLHQud2lkdGgsdC5oZWlnaHQsMCxhLHUsbnVsbCl9ZnVuY3Rpb24gam4ocixlLHQpe3Q9dHx8TGUsZT1lfHxuZS50ZXh0dXJlT3B0aW9ucztjb25zdCBuPXIuY3JlYXRlVGV4dHVyZSgpLGk9ZS50YXJnZXR8fGllO2xldCBvPWUud2lkdGh8fDEscz1lLmhlaWdodHx8MTtjb25zdCBhPWUuaW50ZXJuYWxGb3JtYXR8fEk7ci5iaW5kVGV4dHVyZShpLG4pLGk9PT1vZSYmKHIudGV4UGFyYW1ldGVyaShpLGF0LHN0KSxyLnRleFBhcmFtZXRlcmkoaSx1dCxzdCkpO2xldCB1PWUuc3JjO2lmKHUpaWYodHlwZW9mIHU9PSJmdW5jdGlvbiImJih1PXUocixlKSksdHlwZW9mIHU9PSJzdHJpbmciKU11KHIsbixlLHQpO2Vsc2UgaWYoTWUodSl8fEFycmF5LmlzQXJyYXkodSkmJih0eXBlb2YgdVswXT09Im51bWJlciJ8fEFycmF5LmlzQXJyYXkodVswXSl8fE1lKHVbMF0pKSl7Y29uc3QgZj1CdShyLG4sdSxlKTtvPWYud2lkdGgscz1mLmhlaWdodH1lbHNlIEFycmF5LmlzQXJyYXkodSkmJih0eXBlb2YgdVswXT09InN0cmluZyJ8fFduKHVbMF0pKT9pPT09b2U/TnUocixuLGUsdCk6VXUocixuLGUsdCk6KFZuKHIsbix1LGUpLG89dS53aWR0aCxzPXUuaGVpZ2h0KTtlbHNlIGt1KHIsbixlKTtyZXR1cm4ga2UoZSkmJm1yKHIsbixlLG8scyxhKSxIbihyLG4sZSksbn1jb25zdCBwdD14bjtmdW5jdGlvbiBxbihyKXtyZXR1cm4gdHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQ/ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocik6bnVsbH1jb25zdCB5dD0zMzk4NCxfdD0zNDk2MixMdT0zNDk2MywkdT0zNTcxMyxHdT0zNTcxNCx6dT0zNTYzMixIdT0zNTYzMyxWdT0zNTk4MSxYbj0zNTcxOCxXdT0zNTcyMSxqdT0zNTk3MSxxdT0zNTM4MixYdT0zNTM5NixZdT0zNTM5OCxLdT0zNTM5MixKdT0zNTM5NSx4dD01MTI2LFluPTM1NjY0LEtuPTM1NjY1LEpuPTM1NjY2LHhyPTUxMjQsUW49MzU2NjcsWm49MzU2NjgsZWk9MzU2NjksdGk9MzU2NzAscmk9MzU2NzEsbmk9MzU2NzIsaWk9MzU2NzMsb2k9MzU2NzQsc2k9MzU2NzUsYWk9MzU2NzYsUXU9MzU2NzgsWnU9MzU2ODAsZWM9MzU2NzksdGM9MzU2ODIscmM9MzU2ODUsbmM9MzU2ODYsaWM9MzU2ODcsb2M9MzU2ODgsc2M9MzU2ODksYWM9MzU2OTAsdWM9MzYyODksY2M9MzYyOTIsZmM9MzYyOTMsYnI9NTEyNSx1aT0zNjI5NCxjaT0zNjI5NSxmaT0zNjI5NixsYz0zNjI5OCxkYz0zNjI5OSxtYz0zNjMwMCxoYz0zNjMwMyxwYz0zNjMwNix5Yz0zNjMwNyxfYz0zNjMwOCx4Yz0zNjMxMSxidD0zNTUzLGd0PTM0MDY3LGdyPTMyODc5LHZ0PTM1ODY2LHY9e307ZnVuY3Rpb24gbGkocixlKXtyZXR1cm4gdltlXS5iaW5kUG9pbnR9ZnVuY3Rpb24gYmMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWYoZSx0KX19ZnVuY3Rpb24gZ2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWZ2KGUsdCl9fWZ1bmN0aW9uIHZjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTJmdihlLHQpfX1mdW5jdGlvbiBFYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0zZnYoZSx0KX19ZnVuY3Rpb24gVGMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtNGZ2KGUsdCl9fWZ1bmN0aW9uIGRpKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTFpKGUsdCl9fWZ1bmN0aW9uIG1pKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTFpdihlLHQpfX1mdW5jdGlvbiBoaShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0yaXYoZSx0KX19ZnVuY3Rpb24gcGkocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtM2l2KGUsdCl9fWZ1bmN0aW9uIHlpKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTRpdihlLHQpfX1mdW5jdGlvbiBBYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xdWkoZSx0KX19ZnVuY3Rpb24gd2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMXVpdihlLHQpfX1mdW5jdGlvbiBSYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0ydWl2KGUsdCl9fWZ1bmN0aW9uIFNjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTN1aXYoZSx0KX19ZnVuY3Rpb24gSWMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtNHVpdihlLHQpfX1mdW5jdGlvbiBGYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgyZnYoZSwhMSx0KX19ZnVuY3Rpb24gUGMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4M2Z2KGUsITEsdCl9fWZ1bmN0aW9uIERjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDRmdihlLCExLHQpfX1mdW5jdGlvbiBDYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgyeDNmdihlLCExLHQpfX1mdW5jdGlvbiBPYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgzeDJmdihlLCExLHQpfX1mdW5jdGlvbiBNYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgyeDRmdihlLCExLHQpfX1mdW5jdGlvbiBOYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXg0eDJmdihlLCExLHQpfX1mdW5jdGlvbiBVYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgzeDRmdihlLCExLHQpfX1mdW5jdGlvbiBCYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXg0eDNmdihlLCExLHQpfX1mdW5jdGlvbiBCKHIsZSx0LG4pe2NvbnN0IGk9bGkocixlKTtyZXR1cm4gT2Uocik/ZnVuY3Rpb24obyl7bGV0IHMsYTtvcihyLG8pPyhzPW8sYT1udWxsKToocz1vLnRleHR1cmUsYT1vLnNhbXBsZXIpLHIudW5pZm9ybTFpKG4sdCksci5hY3RpdmVUZXh0dXJlKHl0K3QpLHIuYmluZFRleHR1cmUoaSxzKSxyLmJpbmRTYW1wbGVyKHQsYSl9OmZ1bmN0aW9uKG8pe3IudW5pZm9ybTFpKG4sdCksci5hY3RpdmVUZXh0dXJlKHl0K3QpLHIuYmluZFRleHR1cmUoaSxvKX19ZnVuY3Rpb24gayhyLGUsdCxuLGkpe2NvbnN0IG89bGkocixlKSxzPW5ldyBJbnQzMkFycmF5KGkpO2ZvcihsZXQgYT0wO2E8aTsrK2Epc1thXT10K2E7cmV0dXJuIE9lKHIpP2Z1bmN0aW9uKGEpe3IudW5pZm9ybTFpdihuLHMpLGEuZm9yRWFjaChmdW5jdGlvbih1LGYpe3IuYWN0aXZlVGV4dHVyZSh5dCtzW2ZdKTtsZXQgYyxkO29yKHIsdSk/KGM9dSxkPW51bGwpOihjPXUudGV4dHVyZSxkPXUuc2FtcGxlciksci5iaW5kU2FtcGxlcih0LGQpLHIuYmluZFRleHR1cmUobyxjKX0pfTpmdW5jdGlvbihhKXtyLnVuaWZvcm0xaXYobixzKSxhLmZvckVhY2goZnVuY3Rpb24odSxmKXtyLmFjdGl2ZVRleHR1cmUoeXQrc1tmXSksci5iaW5kVGV4dHVyZShvLHUpfSl9fXZbeHRdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQsc2V0dGVyOmJjLGFycmF5U2V0dGVyOmdjfSx2W1luXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo4LHNldHRlcjp2Yyxjb2xzOjJ9LHZbS25dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjEyLHNldHRlcjpFYyxjb2xzOjN9LHZbSm5dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjE2LHNldHRlcjpUYyxjb2xzOjR9LHZbeHJdPXtUeXBlOkludDMyQXJyYXksc2l6ZTo0LHNldHRlcjpkaSxhcnJheVNldHRlcjptaX0sdltRbl09e1R5cGU6SW50MzJBcnJheSxzaXplOjgsc2V0dGVyOmhpLGNvbHM6Mn0sdltabl09e1R5cGU6SW50MzJBcnJheSxzaXplOjEyLHNldHRlcjpwaSxjb2xzOjN9LHZbZWldPXtUeXBlOkludDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6eWksY29sczo0fSx2W2JyXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjQsc2V0dGVyOkFjLGFycmF5U2V0dGVyOndjfSx2W3VpXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjgsc2V0dGVyOlJjLGNvbHM6Mn0sdltjaV09e1R5cGU6VWludDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6U2MsY29sczozfSx2W2ZpXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjE2LHNldHRlcjpJYyxjb2xzOjR9LHZbdGldPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6NCxzZXR0ZXI6ZGksYXJyYXlTZXR0ZXI6bWl9LHZbcmldPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6OCxzZXR0ZXI6aGksY29sczoyfSx2W25pXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjEyLHNldHRlcjpwaSxjb2xzOjN9LHZbaWldPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6MTYsc2V0dGVyOnlpLGNvbHM6NH0sdltvaV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6MzIsc2V0dGVyOkZjLHJvd3M6Mixjb2xzOjJ9LHZbc2ldPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQ4LHNldHRlcjpQYyxyb3dzOjMsY29sczozfSx2W2FpXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6RGMscm93czo0LGNvbHM6NH0sdltyY109e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6MzIsc2V0dGVyOkNjLHJvd3M6Mixjb2xzOjN9LHZbbmNdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjMyLHNldHRlcjpNYyxyb3dzOjIsY29sczo0fSx2W2ljXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0OCxzZXR0ZXI6T2Mscm93czozLGNvbHM6Mn0sdltvY109e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NDgsc2V0dGVyOlVjLHJvd3M6Myxjb2xzOjR9LHZbc2NdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjY0LHNldHRlcjpOYyxyb3dzOjQsY29sczoyfSx2W2FjXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6QmMscm93czo0LGNvbHM6M30sdltRdV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6ayxiaW5kUG9pbnQ6YnR9LHZbWnVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOmssYmluZFBvaW50Omd0fSx2W2VjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjprLGJpbmRQb2ludDpncn0sdlt0Y109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6ayxiaW5kUG9pbnQ6YnR9LHZbdWNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOmssYmluZFBvaW50OnZ0fSx2W2NjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjprLGJpbmRQb2ludDp2dH0sdltmY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6ayxiaW5kUG9pbnQ6Z3R9LHZbbGNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOmssYmluZFBvaW50OmJ0fSx2W2RjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjprLGJpbmRQb2ludDpncn0sdlttY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6ayxiaW5kUG9pbnQ6Z3R9LHZbaGNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOmssYmluZFBvaW50OnZ0fSx2W3BjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjprLGJpbmRQb2ludDpidH0sdlt5Y109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6ayxiaW5kUG9pbnQ6Z3J9LHZbX2NdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOmssYmluZFBvaW50Omd0fSx2W3hjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjprLGJpbmRQb2ludDp2dH07ZnVuY3Rpb24gRXQocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYodC52YWx1ZSlzd2l0Y2goci5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZSksdC52YWx1ZS5sZW5ndGgpe2Nhc2UgNDpyLnZlcnRleEF0dHJpYjRmdihlLHQudmFsdWUpO2JyZWFrO2Nhc2UgMzpyLnZlcnRleEF0dHJpYjNmdihlLHQudmFsdWUpO2JyZWFrO2Nhc2UgMjpyLnZlcnRleEF0dHJpYjJmdihlLHQudmFsdWUpO2JyZWFrO2Nhc2UgMTpyLnZlcnRleEF0dHJpYjFmdihlLHQudmFsdWUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ0aGUgbGVuZ3RoIG9mIGEgZmxvYXQgY29uc3RhbnQgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDQhIil9ZWxzZSByLmJpbmRCdWZmZXIoX3QsdC5idWZmZXIpLHIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52ZXJ0ZXhBdHRyaWJQb2ludGVyKGUsdC5udW1Db21wb25lbnRzfHx0LnNpemUsdC50eXBlfHx4dCx0Lm5vcm1hbGl6ZXx8ITEsdC5zdHJpZGV8fDAsdC5vZmZzZXR8fDApLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUsdC5kaXZpc29yfHwwKX19ZnVuY3Rpb24gYWUocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYodC52YWx1ZSlpZihyLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSx0LnZhbHVlLmxlbmd0aD09PTQpci52ZXJ0ZXhBdHRyaWI0aXYoZSx0LnZhbHVlKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVGhlIGxlbmd0aCBvZiBhbiBpbnRlZ2VyIGNvbnN0YW50IHZhbHVlIG11c3QgYmUgNCEiKTtlbHNlIHIuYmluZEJ1ZmZlcihfdCx0LmJ1ZmZlciksci5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSxyLnZlcnRleEF0dHJpYklQb2ludGVyKGUsdC5udW1Db21wb25lbnRzfHx0LnNpemUsdC50eXBlfHx4cix0LnN0cmlkZXx8MCx0Lm9mZnNldHx8MCksci52ZXJ0ZXhBdHRyaWJEaXZpc29yJiZyLnZlcnRleEF0dHJpYkRpdmlzb3IoZSx0LmRpdmlzb3J8fDApfX1mdW5jdGlvbiBUdChyLGUpe3JldHVybiBmdW5jdGlvbih0KXtpZih0LnZhbHVlKWlmKHIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHQudmFsdWUubGVuZ3RoPT09NClyLnZlcnRleEF0dHJpYjR1aXYoZSx0LnZhbHVlKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVGhlIGxlbmd0aCBvZiBhbiB1bnNpZ25lZCBpbnRlZ2VyIGNvbnN0YW50IHZhbHVlIG11c3QgYmUgNCEiKTtlbHNlIHIuYmluZEJ1ZmZlcihfdCx0LmJ1ZmZlciksci5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSxyLnZlcnRleEF0dHJpYklQb2ludGVyKGUsdC5udW1Db21wb25lbnRzfHx0LnNpemUsdC50eXBlfHxicix0LnN0cmlkZXx8MCx0Lm9mZnNldHx8MCksci52ZXJ0ZXhBdHRyaWJEaXZpc29yJiZyLnZlcnRleEF0dHJpYkRpdmlzb3IoZSx0LmRpdmlzb3J8fDApfX1mdW5jdGlvbiB2cihyLGUsdCl7Y29uc3Qgbj10LnNpemUsaT10LmNvdW50O3JldHVybiBmdW5jdGlvbihvKXtyLmJpbmRCdWZmZXIoX3Qsby5idWZmZXIpO2NvbnN0IHM9by5zaXplfHxvLm51bUNvbXBvbmVudHN8fG4sYT1zL2ksdT1vLnR5cGV8fHh0LGM9dlt1XS5zaXplKnMsZD1vLm5vcm1hbGl6ZXx8ITEscD1vLm9mZnNldHx8MCx5PWMvaTtmb3IobGV0IG09MDttPGk7KyttKXIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSttKSxyLnZlcnRleEF0dHJpYlBvaW50ZXIoZSttLGEsdSxkLGMscCt5Km0pLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUrbSxvLmRpdmlzb3J8fDApfX1jb25zdCBQPXt9O1BbeHRdPXtzaXplOjQsc2V0dGVyOkV0fSxQW1luXT17c2l6ZTo4LHNldHRlcjpFdH0sUFtLbl09e3NpemU6MTIsc2V0dGVyOkV0fSxQW0puXT17c2l6ZToxNixzZXR0ZXI6RXR9LFBbeHJdPXtzaXplOjQsc2V0dGVyOmFlfSxQW1FuXT17c2l6ZTo4LHNldHRlcjphZX0sUFtabl09e3NpemU6MTIsc2V0dGVyOmFlfSxQW2VpXT17c2l6ZToxNixzZXR0ZXI6YWV9LFBbYnJdPXtzaXplOjQsc2V0dGVyOlR0fSxQW3VpXT17c2l6ZTo4LHNldHRlcjpUdH0sUFtjaV09e3NpemU6MTIsc2V0dGVyOlR0fSxQW2ZpXT17c2l6ZToxNixzZXR0ZXI6VHR9LFBbdGldPXtzaXplOjQsc2V0dGVyOmFlfSxQW3JpXT17c2l6ZTo4LHNldHRlcjphZX0sUFtuaV09e3NpemU6MTIsc2V0dGVyOmFlfSxQW2lpXT17c2l6ZToxNixzZXR0ZXI6YWV9LFBbb2ldPXtzaXplOjQsc2V0dGVyOnZyLGNvdW50OjJ9LFBbc2ldPXtzaXplOjksc2V0dGVyOnZyLGNvdW50OjN9LFBbYWldPXtzaXplOjE2LHNldHRlcjp2cixjb3VudDo0fTtjb25zdCBrYz0vRVJST1I6XHMqXGQrOihcZCspL2dpO2Z1bmN0aW9uIExjKHIsZT0iIix0PTApe2NvbnN0IG49Wy4uLmUubWF0Y2hBbGwoa2MpXSxpPW5ldyBNYXAobi5tYXAoKG8scyk9Pntjb25zdCBhPXBhcnNlSW50KG9bMV0pLHU9bltzKzFdLGY9dT91LmluZGV4OmUubGVuZ3RoLGM9ZS5zdWJzdHJpbmcoby5pbmRleCxmKTtyZXR1cm5bYS0xLGNdfSkpO3JldHVybiByLnNwbGl0KGAKYCkubWFwKChvLHMpPT57Y29uc3QgYT1pLmdldChzKTtyZXR1cm5gJHtzKzErdH06ICR7b30ke2E/YAoKXl5eICR7YX1gOiIifWB9KS5qb2luKGAKYCl9Y29uc3QgX2k9L15bIFx0XSpcbi87ZnVuY3Rpb24geGkocil7bGV0IGU9MDtyZXR1cm4gX2kudGVzdChyKSYmKGU9MSxyPXIucmVwbGFjZShfaSwiIikpLHtsaW5lT2Zmc2V0OmUsc2hhZGVyU291cmNlOnJ9fWZ1bmN0aW9uIGJpKHIsZSl7cmV0dXJuIHIuZXJyb3JDYWxsYmFjayhlKSxyLmNhbGxiYWNrJiZzZXRUaW1lb3V0KCgpPT57ci5jYWxsYmFjayhgJHtlfQoke3IuZXJyb3JzLmpvaW4oYApgKX1gKX0pLG51bGx9ZnVuY3Rpb24gZ2kocixlLHQsbil7Y29uc3QgaT1yLmNyZWF0ZVNoYWRlcih0KTtyZXR1cm4gci5zaGFkZXJTb3VyY2UoaSx4aShlKS5zaGFkZXJTb3VyY2UpLHIuY29tcGlsZVNoYWRlcihpKSwhbi5jYWxsYmFjayYmISRjKHIsdCxpLG4uZXJyb3JDYWxsYmFjayk/KHIuZGVsZXRlU2hhZGVyKGkpLG51bGwpOml9ZnVuY3Rpb24gJGMocixlLHQsbil7bj1ufHxwdDtjb25zdCBpPXIuZ2V0U2hhZGVyUGFyYW1ldGVyKHQsJHUpO2lmKCFpKXtjb25zdCBvPXIuZ2V0U2hhZGVySW5mb0xvZyh0KSx7bGluZU9mZnNldDpzLHNoYWRlclNvdXJjZTphfT14aShyLmdldFNoYWRlclNvdXJjZSh0KSk7bihgJHtMYyhhLG8scyl9CkVycm9yIGNvbXBpbGluZyAke1JuKHIsZSl9OiAke299YCl9cmV0dXJuIGl9ZnVuY3Rpb24gRXIocixlLHQpe2xldCBuLGksbztpZih0eXBlb2YgZT09ImZ1bmN0aW9uIiYmKHQ9ZSxlPXZvaWQgMCksdHlwZW9mIHI9PSJmdW5jdGlvbiIpdD1yLHI9dm9pZCAwO2Vsc2UgaWYociYmIUFycmF5LmlzQXJyYXkocikpe2lmKHIuZXJyb3JDYWxsYmFjayYmci5lcnJvcnMpcmV0dXJuIHI7Y29uc3QgZj1yO3Q9Zi5lcnJvckNhbGxiYWNrLHI9Zi5hdHRyaWJMb2NhdGlvbnMsbj1mLnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsaT1mLnRyYW5zZm9ybUZlZWRiYWNrTW9kZSxvPWYuY2FsbGJhY2t9Y29uc3Qgcz10fHxwdCxhPVtdLHU9e2Vycm9yQ2FsbGJhY2soZiwuLi5jKXthLnB1c2goZikscyhmLC4uLmMpfSx0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzOm4sdHJhbnNmb3JtRmVlZGJhY2tNb2RlOmksY2FsbGJhY2s6byxlcnJvcnM6YX07aWYocil7bGV0IGY9e307QXJyYXkuaXNBcnJheShyKT9yLmZvckVhY2goZnVuY3Rpb24oYyxkKXtmW2NdPWU/ZVtkXTpkfSk6Zj1yLHUuYXR0cmliTG9jYXRpb25zPWZ9cmV0dXJuIHV9Y29uc3Qgdmk9WyJWRVJURVhfU0hBREVSIiwiRlJBR01FTlRfU0hBREVSIl07ZnVuY3Rpb24gR2MocixlKXtpZihlLmluZGV4T2YoImZyYWciKT49MClyZXR1cm4genU7aWYoZS5pbmRleE9mKCJ2ZXJ0Iik+PTApcmV0dXJuIEh1fWZ1bmN0aW9uIEVpKHIsZSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IuZGVsZXRlU2hhZGVyKHQpfSl9Y29uc3QgemM9KHI9MCk9Pm5ldyBQcm9taXNlKGU9PnNldFRpbWVvdXQoZSxyKSk7ZnVuY3Rpb24gSGMocixlLHQsbixpKXtjb25zdCBvPUVyKHQsbixpKSxzPVtdLGE9W107Zm9yKGxldCBjPTA7YzxlLmxlbmd0aDsrK2Mpe2xldCBkPWVbY107aWYodHlwZW9mIGQ9PSJzdHJpbmciKXtjb25zdCBwPXFuKGQpLHk9cD9wLnRleHQ6ZDtsZXQgbT1yW3ZpW2NdXTtwJiZwLnR5cGUmJihtPUdjKHIscC50eXBlKXx8bSksZD1naShyLHksbSxvKSxhLnB1c2goZCl9THMocixkKSYmcy5wdXNoKGQpfWlmKHMubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuIEVpKHIsYSksYmkobywibm90IGVub3VnaCBzaGFkZXJzIGZvciBwcm9ncmFtIik7Y29uc3QgdT1yLmNyZWF0ZVByb2dyYW0oKTtzLmZvckVhY2goZnVuY3Rpb24oYyl7ci5hdHRhY2hTaGFkZXIodSxjKX0pLG8uYXR0cmliTG9jYXRpb25zJiZPYmplY3Qua2V5cyhvLmF0dHJpYkxvY2F0aW9ucykuZm9yRWFjaChmdW5jdGlvbihjKXtyLmJpbmRBdHRyaWJMb2NhdGlvbih1LG8uYXR0cmliTG9jYXRpb25zW2NdLGMpfSk7bGV0IGY9by50cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzO3JldHVybiBmJiYoZi5hdHRyaWJzJiYoZj1mLmF0dHJpYnMpLEFycmF5LmlzQXJyYXkoZil8fChmPU9iamVjdC5rZXlzKGYpKSxyLnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3ModSxmLG8udHJhbnNmb3JtRmVlZGJhY2tNb2RlfHxWdSkpLHIubGlua1Byb2dyYW0odSksby5jYWxsYmFjaz8oVmMocix1LG8pLG51bGwpOlRpKHIsdSxvLmVycm9yQ2FsbGJhY2spP3U6KHIuZGVsZXRlUHJvZ3JhbSh1KSxFaShyLGEpLG51bGwpfWFzeW5jIGZ1bmN0aW9uIFZjKHIsZSx0KXtjb25zdCBuPXIuZ2V0RXh0ZW5zaW9uKCJLSFJfcGFyYWxsZWxfc2hhZGVyX2NvbXBpbGUiKSxpPW4/KHUsZik9PnUuZ2V0UHJvZ3JhbVBhcmFtZXRlcihmLG4uQ09NUExFVElPTl9TVEFUVVNfS0hSKTooKT0+ITA7bGV0IG89MDtkbyBhd2FpdCB6YyhvKSxvPTFlMy82MDt3aGlsZSghaShyLGUpKTtjb25zdCBzPVRpKHIsZSx0LmVycm9yQ2FsbGJhY2spLGE9cz92b2lkIDA6dC5lcnJvcnMuam9pbihgCmApO3N8fCgodC5lcnJvckNhbGxiYWNrfHxwdCkoYSksci5kZWxldGVQcm9ncmFtKGUpLGU9bnVsbCksdC5jYWxsYmFjayhhLGUpfWZ1bmN0aW9uIFRpKHIsZSx0KXt0PXR8fHB0O2NvbnN0IG49ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsR3UpO2lmKCFuKXtjb25zdCBpPXIuZ2V0UHJvZ3JhbUluZm9Mb2coZSk7dChgRXJyb3IgaW4gcHJvZ3JhbSBsaW5raW5nOiAke2l9YCl9cmV0dXJuIG59ZnVuY3Rpb24gV2MocixlLHQsbixpKXtjb25zdCBvPUVyKHQsbixpKSxzPVtdO2ZvcihsZXQgYT0wO2E8ZS5sZW5ndGg7KythKXtjb25zdCB1PWdpKHIsZVthXSxyW3ZpW2FdXSxvKTtpZighby5jYWxsYmFjayYmIXUpcmV0dXJuIG51bGw7cy5wdXNoKHUpfXJldHVybiBIYyhyLHMsbyl9ZnVuY3Rpb24gQWkocil7Y29uc3QgZT1yLm5hbWU7cmV0dXJuIGUuc3RhcnRzV2l0aCgiZ2xfIil8fGUuc3RhcnRzV2l0aCgid2ViZ2xfIil9Y29uc3QgamM9LyhcLnxcW3xdfFx3KykvZyxxYz1yPT5yPj0iMCImJnI8PSI5IjtmdW5jdGlvbiBYYyhyLGUsdCxuKXtjb25zdCBpPXIuc3BsaXQoamMpLmZpbHRlcihhPT5hIT09IiIpO2xldCBvPTAscz0iIjtmb3IoOzspe2NvbnN0IGE9aVtvKytdO3MrPWE7Y29uc3QgdT1xYyhhWzBdKSxmPXU/cGFyc2VJbnQoYSk6YTtpZih1JiYocys9aVtvKytdKSxvPT09aS5sZW5ndGgpe3RbZl09ZTticmVha31lbHNle2NvbnN0IGQ9aVtvKytdLHA9ZD09PSJbIix5PXRbZl18fChwP1tdOnt9KTt0W2ZdPXksdD15LG5bc109bltzXXx8ZnVuY3Rpb24obSl7cmV0dXJuIGZ1bmN0aW9uKF8pe3dpKG0sXyl9fSh5KSxzKz1kfX19ZnVuY3Rpb24gWWMocixlKXtsZXQgdD0wO2Z1bmN0aW9uIG4oYSx1LGYpe2NvbnN0IGM9dS5uYW1lLmVuZHNXaXRoKCJbMF0iKSxkPXUudHlwZSxwPXZbZF07aWYoIXApdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIHR5cGU6IDB4JHtkLnRvU3RyaW5nKDE2KX1gKTtsZXQgeTtpZihwLmJpbmRQb2ludCl7Y29uc3QgbT10O3QrPXUuc2l6ZSxjP3k9cC5hcnJheVNldHRlcihyLGQsbSxmLHUuc2l6ZSk6eT1wLnNldHRlcihyLGQsbSxmLHUuc2l6ZSl9ZWxzZSBwLmFycmF5U2V0dGVyJiZjP3k9cC5hcnJheVNldHRlcihyLGYpOnk9cC5zZXR0ZXIocixmKTtyZXR1cm4geS5sb2NhdGlvbj1mLHl9Y29uc3QgaT17fSxvPXt9LHM9ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsWG4pO2ZvcihsZXQgYT0wO2E8czsrK2Epe2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtKGUsYSk7aWYoQWkodSkpY29udGludWU7bGV0IGY9dS5uYW1lO2YuZW5kc1dpdGgoIlswXSIpJiYoZj1mLnN1YnN0cigwLGYubGVuZ3RoLTMpKTtjb25zdCBjPXIuZ2V0VW5pZm9ybUxvY2F0aW9uKGUsdS5uYW1lKTtpZihjKXtjb25zdCBkPW4oZSx1LGMpO2lbZl09ZCxYYyhmLGQsbyxpKX19cmV0dXJuIGl9ZnVuY3Rpb24gS2MocixlKXtjb25zdCB0PXt9LG49ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsanUpO2ZvcihsZXQgaT0wO2k8bjsrK2kpe2NvbnN0IG89ci5nZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoZSxpKTt0W28ubmFtZV09e2luZGV4OmksdHlwZTpvLnR5cGUsc2l6ZTpvLnNpemV9fXJldHVybiB0fWZ1bmN0aW9uIEpjKHIsZSl7Y29uc3QgdD1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxYbiksbj1bXSxpPVtdO2ZvcihsZXQgYT0wO2E8dDsrK2Epe2kucHVzaChhKSxuLnB1c2goe30pO2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtKGUsYSk7blthXS5uYW1lPXUubmFtZX1bWyJVTklGT1JNX1RZUEUiLCJ0eXBlIl0sWyJVTklGT1JNX1NJWkUiLCJzaXplIl0sWyJVTklGT1JNX0JMT0NLX0lOREVYIiwiYmxvY2tOZHgiXSxbIlVOSUZPUk1fT0ZGU0VUIiwib2Zmc2V0Il1dLmZvckVhY2goZnVuY3Rpb24oYSl7Y29uc3QgdT1hWzBdLGY9YVsxXTtyLmdldEFjdGl2ZVVuaWZvcm1zKGUsaSxyW3VdKS5mb3JFYWNoKGZ1bmN0aW9uKGMsZCl7bltkXVtmXT1jfSl9KTtjb25zdCBvPXt9LHM9ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUscXUpO2ZvcihsZXQgYT0wO2E8czsrK2Epe2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKGUsYSksZj17aW5kZXg6ci5nZXRVbmlmb3JtQmxvY2tJbmRleChlLHUpLHVzZWRCeVZlcnRleFNoYWRlcjpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEsWHUpLHVzZWRCeUZyYWdtZW50U2hhZGVyOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSxZdSksc2l6ZTpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEsS3UpLHVuaWZvcm1JbmRpY2VzOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSxKdSl9O2YudXNlZD1mLnVzZWRCeVZlcnRleFNoYWRlcnx8Zi51c2VkQnlGcmFnbWVudFNoYWRlcixvW3VdPWZ9cmV0dXJue2Jsb2NrU3BlY3M6byx1bmlmb3JtRGF0YTpufX1mdW5jdGlvbiB3aShyLGUpe2Zvcihjb25zdCB0IGluIGUpe2NvbnN0IG49clt0XTt0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uKGVbdF0pOndpKHJbdF0sZVt0XSl9fWZ1bmN0aW9uIFJpKHIsLi4uZSl7Y29uc3QgdD1yLnVuaWZvcm1TZXR0ZXJzfHxyLG49ZS5sZW5ndGg7Zm9yKGxldCBpPTA7aTxuOysraSl7Y29uc3Qgbz1lW2ldO2lmKEFycmF5LmlzQXJyYXkobykpe2NvbnN0IHM9by5sZW5ndGg7Zm9yKGxldCBhPTA7YTxzOysrYSlSaSh0LG9bYV0pfWVsc2UgZm9yKGNvbnN0IHMgaW4gbyl7Y29uc3QgYT10W3NdO2EmJmEob1tzXSl9fX1mdW5jdGlvbiBRYyhyLGUpe2NvbnN0IHQ9e30sbj1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxXdSk7Zm9yKGxldCBpPTA7aTxuOysraSl7Y29uc3Qgbz1yLmdldEFjdGl2ZUF0dHJpYihlLGkpO2lmKEFpKG8pKWNvbnRpbnVlO2NvbnN0IHM9ci5nZXRBdHRyaWJMb2NhdGlvbihlLG8ubmFtZSksYT1QW28udHlwZV0sdT1hLnNldHRlcihyLHMsYSk7dS5sb2NhdGlvbj1zLHRbby5uYW1lXT11fXJldHVybiB0fWZ1bmN0aW9uIFpjKHIsZSl7Zm9yKGNvbnN0IHQgaW4gZSl7Y29uc3Qgbj1yW3RdO24mJm4oZVt0XSl9fWZ1bmN0aW9uIGVmKHIsZSx0KXt0LnZlcnRleEFycmF5T2JqZWN0P3IuYmluZFZlcnRleEFycmF5KHQudmVydGV4QXJyYXlPYmplY3QpOihaYyhlLmF0dHJpYlNldHRlcnN8fGUsdC5hdHRyaWJzKSx0LmluZGljZXMmJnIuYmluZEJ1ZmZlcihMdSx0LmluZGljZXMpKX1mdW5jdGlvbiBTaShyLGUpe2NvbnN0IHQ9WWMocixlKSxuPVFjKHIsZSksaT17cHJvZ3JhbTplLHVuaWZvcm1TZXR0ZXJzOnQsYXR0cmliU2V0dGVyczpufTtyZXR1cm4gT2UocikmJihpLnVuaWZvcm1CbG9ja1NwZWM9SmMocixlKSxpLnRyYW5zZm9ybUZlZWRiYWNrSW5mbz1LYyhyLGUpKSxpfWNvbnN0IHRmPS9cc3x7fH18Oy87ZnVuY3Rpb24gcmYocixlLHQsbixpKXtjb25zdCBvPUVyKHQsbixpKSxzPVtdO2lmKGU9ZS5tYXAoZnVuY3Rpb24oZil7aWYoIXRmLnRlc3QoZikpe2NvbnN0IGM9cW4oZik7aWYoYylmPWMudGV4dDtlbHNle2NvbnN0IGQ9YG5vIGVsZW1lbnQgd2l0aCBpZDogJHtmfWA7by5lcnJvckNhbGxiYWNrKGQpLHMucHVzaChkKX19cmV0dXJuIGZ9KSxzLmxlbmd0aClyZXR1cm4gYmkobywiIik7Y29uc3QgYT1vLmNhbGxiYWNrO2EmJihvLmNhbGxiYWNrPShmLGMpPT57bGV0IGQ7Znx8KGQ9U2kocixjKSksYShmLGQpfSk7Y29uc3QgdT1XYyhyLGUsbyk7cmV0dXJuIHU/U2kocix1KTpudWxsfWNvbnN0IG5mPTQsSWk9NTEyMztmdW5jdGlvbiBvZihyLGUsdCxuLGksbyl7dD10PT09dm9pZCAwP25mOnQ7Y29uc3Qgcz1lLmluZGljZXMsYT1lLmVsZW1lbnRUeXBlLHU9bj09PXZvaWQgMD9lLm51bUVsZW1lbnRzOm47aT1pPT09dm9pZCAwPzA6aSxhfHxzP28hPT12b2lkIDA/ci5kcmF3RWxlbWVudHNJbnN0YW5jZWQodCx1LGE9PT12b2lkIDA/SWk6ZS5lbGVtZW50VHlwZSxpLG8pOnIuZHJhd0VsZW1lbnRzKHQsdSxhPT09dm9pZCAwP0lpOmUuZWxlbWVudFR5cGUsaSk6byE9PXZvaWQgMD9yLmRyYXdBcnJheXNJbnN0YW5jZWQodCxpLHUsbyk6ci5kcmF3QXJyYXlzKHQsaSx1KX1jb25zdCBGaT0zNjE2MCxBdD0zNjE2MSxzZj0zNTUzLGFmPTUxMjEsdWY9NjQwMixjZj02NDA4LGZmPTMzMTkwLGxmPTM2MDEyLGRmPTM1MDU2LG1mPTM2MDEzLGhmPTMyODU0LHBmPTMyODU1LHlmPTM2MTk0LFBpPTMzMTg5LERpPTY0MDEsQ2k9MzYxNjgsVHI9MzQwNDEsQXI9MzYwNjQsd3Q9MzYwOTYsT2k9MzYxMjgsd3I9MzMzMDYsUnI9MzMwNzEsU3I9OTcyOSxfZj1be2Zvcm1hdDpjZix0eXBlOmFmLG1pbjpTcix3cmFwOlJyfSx7Zm9ybWF0OlRyfV0saj17fTtqW1RyXT13cixqW0RpXT1PaSxqW0NpXT1PaSxqW3VmXT13dCxqW1BpXT13dCxqW2ZmXT13dCxqW2xmXT13dCxqW2RmXT13cixqW21mXT13cjtmdW5jdGlvbiB4ZihyLGUpe3JldHVybiBqW3JdfHxqW2VdfWNvbnN0IHVlPXt9O3VlW2hmXT0hMCx1ZVtwZl09ITAsdWVbeWZdPSEwLHVlW1RyXT0hMCx1ZVtQaV09ITAsdWVbRGldPSEwLHVlW0NpXT0hMDtmdW5jdGlvbiBiZihyKXtyZXR1cm4gdWVbcl19Y29uc3QgZ2Y9MzI7ZnVuY3Rpb24gdmYocil7cmV0dXJuIHI+PUFyJiZyPEFyK2dmfWZ1bmN0aW9uIFJ0KHIsZSx0LG4pe2NvbnN0IGk9Rmksbz1yLmNyZWF0ZUZyYW1lYnVmZmVyKCk7ci5iaW5kRnJhbWVidWZmZXIoaSxvKSx0PXR8fHIuZHJhd2luZ0J1ZmZlcldpZHRoLG49bnx8ci5kcmF3aW5nQnVmZmVySGVpZ2h0LGU9ZXx8X2Y7Y29uc3Qgcz1bXSxhPXtmcmFtZWJ1ZmZlcjpvLGF0dGFjaG1lbnRzOltdLHdpZHRoOnQsaGVpZ2h0Om59O3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24odSxmKXtsZXQgYz11LmF0dGFjaG1lbnQ7Y29uc3QgZD11LnNhbXBsZXMscD11LmZvcm1hdDtsZXQgeT11LmF0dGFjaG1lbnRQb2ludHx8eGYocCx1LmludGVybmFsRm9ybWF0KTtpZih5fHwoeT1BcitmKSx2Zih5KSYmcy5wdXNoKHkpLCFjKWlmKGQhPT12b2lkIDB8fGJmKHApKWM9ci5jcmVhdGVSZW5kZXJidWZmZXIoKSxyLmJpbmRSZW5kZXJidWZmZXIoQXQsYyksZD4xP3IucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEF0LGQscCx0LG4pOnIucmVuZGVyYnVmZmVyU3RvcmFnZShBdCxwLHQsbik7ZWxzZXtjb25zdCBtPU9iamVjdC5hc3NpZ24oe30sdSk7bS53aWR0aD10LG0uaGVpZ2h0PW4sbS5hdXRvPT09dm9pZCAwJiYobS5hdXRvPSExLG0ubWluPW0ubWlufHxtLm1pbk1hZ3x8U3IsbS5tYWc9bS5tYWd8fG0ubWluTWFnfHxTcixtLndyYXBTPW0ud3JhcFN8fG0ud3JhcHx8UnIsbS53cmFwVD1tLndyYXBUfHxtLndyYXB8fFJyKSxjPWpuKHIsbSl9aWYoa3MocixjKSlyLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGkseSxBdCxjKTtlbHNlIGlmKG9yKHIsYykpdS5sYXllciE9PXZvaWQgMD9yLmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKGkseSxjLHUubGV2ZWx8fDAsdS5sYXllcik6ci5mcmFtZWJ1ZmZlclRleHR1cmUyRChpLHksdS50YXJnZXR8fHNmLGMsdS5sZXZlbHx8MCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoInVua25vd24gYXR0YWNobWVudCB0eXBlIik7YS5hdHRhY2htZW50cy5wdXNoKGMpfSksci5kcmF3QnVmZmVycyYmci5kcmF3QnVmZmVycyhzKSxhfWZ1bmN0aW9uIEVmKHIsZSx0KXt0PXR8fEZpLGU/KHIuYmluZEZyYW1lYnVmZmVyKHQsZS5mcmFtZWJ1ZmZlciksci52aWV3cG9ydCgwLDAsZS53aWR0aCxlLmhlaWdodCkpOihyLmJpbmRGcmFtZWJ1ZmZlcih0LG51bGwpLHIudmlld3BvcnQoMCwwLHIuZHJhd2luZ0J1ZmZlcldpZHRoLHIuZHJhd2luZ0J1ZmZlckhlaWdodCkpfWZ1bmN0aW9uIFIocixlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFdlYkdMVGV4dHVyZT9lOmpuKHIse3NyYzplLHdyYXA6ci5DTEFNUF9UT19FREdFfSl9Y2xhc3MgeWV7Y29uc3RydWN0b3IoZSl7Y29uc3R7Y29udGV4dDp0LHdpZHRoOm4saGVpZ2h0Oml9PWU7dGhpcy5jb250ZXh0PXQsdGhpcy5vcHRpb25zPWU7Y29uc3Qgbz10aGlzLmJ1aWxkRGVmaW5lcygpO3RoaXMucHJvZ3JhbUluZm89cmYodGhpcy5jb250ZXh0LFtvK3RoaXMuZ2V0VmVydGV4U2hhZGVyKCksbyt0aGlzLmdldEZyYWdtZW50U2hhZGVyKCldKSx0aGlzLmJ1ZmZlckluZm89c2EodGhpcy5jb250ZXh0LHRoaXMuZ2V0QnVmZmVycygpKSx0aGlzLmZiaT1SdCh0aGlzLmNvbnRleHQsW3tmb3JtYXQ6dGhpcy5jb250ZXh0LlJHQkEsdHlwZTp0aGlzLmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dGhpcy5jb250ZXh0LkxJTkVBUix3cmFwOnRoaXMuY29udGV4dC5DTEFNUF9UT19FREdFfV0sbixpKSx0aGlzLm91dHB1dD10aGlzLmZiaS5hdHRhY2htZW50c1swXX1yZXNpemVPdXRwdXQoZSx0KXt0aGlzLmZiaT1SdCh0aGlzLmNvbnRleHQsW3tmb3JtYXQ6dGhpcy5jb250ZXh0LlJHQkEsdHlwZTp0aGlzLmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dGhpcy5jb250ZXh0LkxJTkVBUix3cmFwOnRoaXMuY29udGV4dC5DTEFNUF9UT19FREdFfV0sZSx0KSx0aGlzLm9wdGlvbnMud2lkdGg9ZSx0aGlzLm9wdGlvbnMuaGVpZ2h0PXQsdGhpcy5vdXRwdXQ9dGhpcy5mYmkuYXR0YWNobWVudHNbMF19Z2V0RGVmaW5lcygpe3JldHVybnt9fWdldEJ1ZmZlcnMoKXtyZXR1cm57cG9zaXRpb246e251bUNvbXBvbmVudHM6MixkYXRhOlstMSwtMSwtMSwxLDEsLTEsMSwxLC0xLDEsMSwtMV19LHRleHR1cmVfY29vcmQ6e251bUNvbXBvbmVudHM6MixkYXRhOlswLDAsMCwxLDEsMCwxLDEsMCwxLDEsMF19fX1idWlsZERlZmluZXMoKXtsZXQgZT0iIjtjb25zdCB0PXRoaXMuZ2V0RGVmaW5lcygpO2ZvcihsZXQgbiBpbiB0KWUrPWAjZGVmaW5lICR7bn0gJHt0W25dLnRvRml4ZWQoMSl9CmA7cmV0dXJuIGV9cnVuKGUpe2NvbnN0IHQ9RGF0ZS5ub3coKTtsZXQgbj0wO3RoaXMubGFzdFJ1biYmKG49KHQtdGhpcy5sYXN0UnVuKS8xZTMpLHRoaXMubGFzdFJ1bj10LHRoaXMuY29udGV4dC52aWV3cG9ydCgwLDAsdGhpcy5jb250ZXh0LmNhbnZhcy53aWR0aCx0aGlzLmNvbnRleHQuY2FudmFzLmhlaWdodCksdGhpcy5jb250ZXh0LnVzZVByb2dyYW0odGhpcy5wcm9ncmFtSW5mby5wcm9ncmFtKSxlZih0aGlzLmNvbnRleHQsdGhpcy5wcm9ncmFtSW5mbyx0aGlzLmJ1ZmZlckluZm8pLFJpKHRoaXMucHJvZ3JhbUluZm8se2RlbHRhOm4sY2FudmFzOlt0aGlzLmNvbnRleHQuY2FudmFzLndpZHRoLHRoaXMuY29udGV4dC5jYW52YXMuaGVpZ2h0XSwuLi5lfSksRWYodGhpcy5jb250ZXh0LHRoaXMub3B0aW9ucy5kaXNhYmxlRnJhbWVidWZmZXI/bnVsbDp0aGlzLmZiaSksb2YodGhpcy5jb250ZXh0LHRoaXMuYnVmZmVySW5mbyl9fXZhciBUZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwp1bmlmb3JtIHNhbXBsZXIyRCBtYXNrOwoKdmVjNCBsb29wKCk7Cgp2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IGxvb3AoKTsgfQpgLEFmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3Mgd2YgZXh0ZW5kcyB5ZXtnZXREZWZpbmVzKCl7dmFyIGU7cmV0dXJue1JBRElVUzooZT10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD9lOjF9fWdldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIFRmK3RoaXMuY3JlYXRlTG9vcEZ1bmN0aW9uKCl9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIEFmfWNyZWF0ZUxvb3BGdW5jdGlvbigpe3ZhciB0O2xldCBlPSh0PXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP3Q6MTtyZXR1cm5gCgogICAgICAgIHZlYzQgbG9vcCgpIHsgCiAgICAgICAgICAgIHZlYzQgcmVzdWx0ID0gdmVjNCgwLDAsMCwwKTsKICAgICAgICAgICAgZmxvYXQgZmFjdG9yU3VtID0gMC47CgogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRSYWRpdXMgPSB2ZWMyKC0ke2V9LikgLyBjYW52YXM7CiAgICAgICAgICAgIHZlYzIgbm9ybWFsaXplZEluY3JlbWVudCA9IHZlYzIoMS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIGRpZmYgPSBub3JtYWxpemVkUmFkaXVzOwogICAgICAgICAgICBmbG9hdCBtYXhMZW5ndGggPSBsZW5ndGgobm9ybWFsaXplZFJhZGl1cyk7CgogICAgICAgICAgICBmb3IoaW50IHk9LSR7ZX07IHk8JHtlKzF9OyArK3kpIHsKICAgICAgICAgICAgICAgIGZvcihpbnQgeD0tJHtlfTsgeDwke2UrMX07ICsreCkgewogICAgICAgICAgICAgICAgICAgIGZsb2F0IGZhY3RvciA9ICgxLi0gdGV4dHVyZTJEKG1hc2ssIF90ZXh0dXJlX2Nvb3JkICsgZGlmZikuYSkgKiAobWF4TGVuZ3RoIC0gbGVuZ3RoKGRpZmYpKSAvIG1heExlbmd0aDsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gZmFjdG9yICogdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkICsgZGlmZik7CiAgICAgICAgICAgICAgICAgICAgZmFjdG9yU3VtICs9IGZhY3RvcjsKICAgICAgICAgICAgICAgICAgICBkaWZmLnggKz0gbm9ybWFsaXplZEluY3JlbWVudC54OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZGlmZi55ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueTsKICAgICAgICAgICAgICAgIGRpZmYueCA9IG5vcm1hbGl6ZWRSYWRpdXMueDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVzdWx0IC8gZmFjdG9yU3VtOwogICAgICAgIH1gfX12YXIgUmY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSBzYW1wbGVyMkQgYmFja2dyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgZm9yZWdyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgdGhyZXNob2xkOwoKdm9pZCBtYWluKCkgewogIHZlYzQgYmFja2dyb3VuZENvbG9yID0gdGV4dHVyZTJEKGJhY2tncm91bmQsIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IGZvcmVncm91bmRDb2xvciA9IHRleHR1cmUyRChmb3JlZ3JvdW5kLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCB0cmVzaG9sZENvbG9yID0gdGV4dHVyZTJEKHRocmVzaG9sZCwgX3RleHR1cmVfY29vcmQpOwogIGdsX0ZyYWdDb2xvciA9IGZvcmVncm91bmRDb2xvciAqIHRyZXNob2xkQ29sb3IuYSArCiAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yICogKDEuIC0gdHJlc2hvbGRDb2xvci5hKTsKfQpgLFNmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwogIF90ZXh0dXJlX2Nvb3JkLnkgPSAxLiAtIHRleHR1cmVfY29vcmQueTsKfQpgO2NsYXNzIElyIGV4dGVuZHMgeWV7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gUmZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIFNmfX1jbGFzcyBGcntjb25zdHJ1Y3Rvcigpe3RoaXMuc3RlcHM9W119YWRkU3RlcChlKXt0aGlzLnN0ZXBzLnB1c2goZSl9YXN5bmMgcnVuKCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5zdGVwcyllLnByb2dyYW0ucnVuKGUuZ2V0VW5pZm9ybXMoKSl9cmVzaXplT3V0cHV0KGUsdCl7Zm9yKGNvbnN0IG4gb2YgdGhpcy5zdGVwcyluLnByb2dyYW0ucmVzaXplT3V0cHV0KGUsdCl9fWNsYXNzIFByIGV4dGVuZHMgRnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucHJlY2lzZU1hc2tFbmFibGVkPSExfX1jbGFzcyBJZiBleHRlbmRzIFBye2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKSx0aGlzLmNvbnRleHQ9ZTtjb25zdCBuPXtjb250ZXh0OmUsaGVpZ2h0OmUuY2FudmFzLmhlaWdodCx3aWR0aDplLmNhbnZhcy53aWR0aH0saT1uZXcgd2Yoey4uLm4scmFkaXVzOnR9KSxvPW5ldyBJcih7Li4ubixkaXNhYmxlRnJhbWVidWZmZXI6ITB9KTt0aGlzLmFkZFN0ZXAoe3Byb2dyYW06aSxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOlIoZSx0aGlzLmlucHV0SW1hZ2UpLG1hc2s6UihlLHRoaXMuaW5wdXRNYXNrKX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOm8sZ2V0VW5pZm9ybXM6KCk9Pih7YmFja2dyb3VuZDpSKGUsaS5vdXRwdXQpLGZvcmVncm91bmQ6UihlLHRoaXMuaW5wdXRJbWFnZSksdGhyZXNob2xkOlIoZSx0aGlzLmlucHV0TWFzayl9KX0pfXNldERhdGEoZSx0KXt0aGlzLmlucHV0SW1hZ2U9ZSx0aGlzLmlucHV0TWFzaz10fX1jbGFzcyBNaSBleHRlbmRzIFBye2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5jb250ZXh0PWUsdGhpcy5wcmVjaXNlTWFza0VuYWJsZWQ9ITA7Y29uc3QgdD17Y29udGV4dDplLGhlaWdodDplLmNhbnZhcy5oZWlnaHQsd2lkdGg6ZS5jYW52YXMud2lkdGh9LG49bmV3IElyKHsuLi50LGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTpuLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6UihlLHRoaXMuaW5wdXRCYWNrZ3JvdW5kSW1hZ2UpLGZvcmVncm91bmQ6UihlLHRoaXMuaW5wdXRJbWFnZSksdGhyZXNob2xkOlIoZSx0aGlzLmlucHV0TWFzayl9KX0pfXNldERhdGEoZSx0KXt0aGlzLmlucHV0SW1hZ2U9ZSx0aGlzLmlucHV0TWFzaz10fX1jbGFzcyBGZiBleHRlbmRzIE1pe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnByZWNpc2VNYXNrRW5hYmxlZD0hMH1zZXQgaW5wdXRWaWRlbyhlKXt0aGlzLmZyYW1lUmVhZGVyPWUuZ2V0UmVhZGVyKCksdGhpcy5yZWFkTmV4dFZpZGVvRnJhbWUoKX1hc3luYyBydW4oKXt0aGlzLmZyYW1lUmVhZGVyJiYoYXdhaXQgc3VwZXIucnVuKCksdGhpcy5yZWFkTmV4dFZpZGVvRnJhbWUoKSl9YXN5bmMgcmVhZE5leHRWaWRlb0ZyYW1lKCl7dmFyIHQ7Y29uc3QgZT1hd2FpdCgodD10aGlzLmZyYW1lUmVhZGVyKT09bnVsbD92b2lkIDA6dC5yZWFkKCkpO2UhPW51bGwmJmUudmFsdWUmJih0aGlzLmlucHV0QmFja2dyb3VuZEltYWdlPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKGUudmFsdWUpLGUudmFsdWUuY2xvc2UoKSl9fXZhciBQZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdmVjNCBsb29wKCk7Cgp2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IGxvb3AoKTsgfQpgLERmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmAsRHI9KHI9PihyW3IuTElORUFSPTBdPSJMSU5FQVIiLHJbci5HQVVTU0lBTj0xXT0iR0FVU1NJQU4iLHIpKShEcnx8e30pO2NsYXNzIE5pIGV4dGVuZHMgeWV7Z2V0RGVmaW5lcygpe3ZhciBlO3JldHVybntSQURJVVM6KGU9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/ZToxfX1nZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBQZit0aGlzLmNyZWF0ZUxvb3BGdW5jdGlvbigpfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBEZn1jcmVhdGVMb29wRnVuY3Rpb24oKXt2YXIgdDtsZXQgZT0odD10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD90OjE7cmV0dXJuYAoKICAgICAgICB2ZWM0IGxvb3AoKSB7IAogICAgICAgICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMCwwLDAsMCk7CiAgICAgICAgICAgIGZsb2F0IGZhY3RvclN1bSA9IDAuOwoKICAgICAgICAgICAgdmVjMiBub3JtYWxpemVkUmFkaXVzID0gdmVjMigtJHtlfS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRJbmNyZW1lbnQgPSB2ZWMyKDEuKSAvIGNhbnZhczsKICAgICAgICAgICAgdmVjMiBkaWZmID0gbm9ybWFsaXplZFJhZGl1czsKCiAgICAgICAgICAgIGZvcihpbnQgeT0tJHtlfTsgeTwke2UrMX07ICsreSkgewogICAgICAgICAgICAgICAgZm9yKGludCB4PS0ke2V9OyB4PCR7ZSsxfTsgKyt4KSB7CiAgICAgICAgICAgICAgICAgICAgZmxvYXQgZmFjdG9yID0gMS47CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZhY3RvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpOwogICAgICAgICAgICAgICAgICAgIGZhY3RvclN1bSArPSBmYWN0b3I7CiAgICAgICAgICAgICAgICAgICAgZGlmZi54ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRpZmYueSArPSBub3JtYWxpemVkSW5jcmVtZW50Lnk7CiAgICAgICAgICAgICAgICBkaWZmLnggPSBub3JtYWxpemVkUmFkaXVzLng7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAvIGZhY3RvclN1bTsKICAgICAgICB9YH1nZXRGYWN0b3IoZSx0KXtzd2l0Y2godGhpcy5vcHRpb25zLnR5cGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5nZXRMaW5lYXJGYWN0b3IoZSx0KTtjYXNlIDA6ZGVmYXVsdDpyZXR1cm4gdGhpcy5nZXRMaW5lYXJGYWN0b3IoZSx0KX19Z2V0TGluZWFyRmFjdG9yKGUsdCl7cmV0dXJuIDF9Z2V0R2F1c3NpYW5GYWN0b3IoZSx0KXt2YXIgdTtjb25zdCBuPU1hdGguUEkqMixpPU1hdGgubWF4KCh1PXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP3U6MSwxKSxvPTEvKG4qaSoqMikscz0tKGUqKjIrdCoqMiksYT1vKnM7cmV0dXJuIG8qTWF0aC5FKiphfX1jbGFzcyBDZiBleHRlbmRzIFBye2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKSx0aGlzLmNvbnRleHQ9ZTtjb25zdCBuPXtjb250ZXh0OmUsaGVpZ2h0OmUuY2FudmFzLmhlaWdodCx3aWR0aDplLmNhbnZhcy53aWR0aH0saT1uZXcgTmkoey4uLm4scmFkaXVzOnQsdHlwZTpEci5HQVVTU0lBTn0pLG89bmV3IElyKHsuLi5uLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTppLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6UihlLHRoaXMuaW5wdXRJbWFnZSl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpvLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6UihlLHRoaXMuaW5wdXRJbWFnZSksZm9yZWdyb3VuZDpSKGUsaS5vdXRwdXQpLHRocmVzaG9sZDpSKGUsdGhpcy5pbnB1dE1hc2spfSl9KX1zZXREYXRhKGUsdCl7dGhpcy5pbnB1dEltYWdlPWUsdGhpcy5pbnB1dE1hc2s9dH19Y2xhc3MgQ3IgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLmZiaTI9UnQoZS5jb250ZXh0LFt7Zm9ybWF0OmUuY29udGV4dC5SR0JBLHR5cGU6ZS5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOmUuY29udGV4dC5MSU5FQVIsbWFnOmUuY29udGV4dC5MSU5FQVIsd3JhcDplLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLGUud2lkdGgsZS5oZWlnaHQpfXJ1bihlKXtjb25zdCB0PXRoaXMuZmJpO3RoaXMuZmJpPXRoaXMuZmJpMix0aGlzLmZiaTI9dCx0aGlzLm91dHB1dD10aGlzLmZiaS5hdHRhY2htZW50c1swXSxzdXBlci5ydW4oey4uLmUscHJldmlvdXNfcmVuZGVyaW5nOnRoaXMuZmJpMi5hdHRhY2htZW50c1swXX0pfXJlc2l6ZU91dHB1dChlLHQpe3N1cGVyLnJlc2l6ZU91dHB1dChlLHQpLHRoaXMuZmJpMj1SdCh0aGlzLmNvbnRleHQsW3tmb3JtYXQ6dGhpcy5jb250ZXh0LlJHQkEsdHlwZTp0aGlzLmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dGhpcy5jb250ZXh0LkxJTkVBUix3cmFwOnRoaXMuY29udGV4dC5DTEFNUF9UT19FREdFfV0sZSx0KX19dmFyIE9mPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCi8vIHVuaWZvcm0gZmxvYXQgdHJlc2hvbGQ7CnVuaWZvcm0gc2FtcGxlcjJEIGltYWdlX25vdzsKdW5pZm9ybSBzYW1wbGVyMkQgaW1hZ2VfYmVmb3JlOwp1bmlmb3JtIHNhbXBsZXIyRCBtYXNrX25vdzsKdW5pZm9ybSBzYW1wbGVyMkQgbWFza19iZWZvcmU7CnVuaWZvcm0gc2FtcGxlcjJEIHByZXZpb3VzX3JlbmRlcmluZzsKdW5pZm9ybSB2ZWMyIGNhbnZhczsKCnVuaWZvcm0gZmxvYXQgZGVsdGE7CgpmbG9hdCBjdXJyZW50X2ZhY3RvciA9IDAuNjk7CmZsb2F0IHByZXZpb3VzX2ZhY3RvciA9IDAuNzQ7CmZsb2F0IHRocmVzaG9sZF9hY3RpdmF0aW9uID0gMC41NDsKCmZsb2F0IG1hcChmbG9hdCB2YWx1ZSwgZmxvYXQgbWluMSwgZmxvYXQgbWF4MSwgZmxvYXQgbWluMiwgZmxvYXQgbWF4MikgewogIHJldHVybiBtaW4yICsgKHZhbHVlIC0gbWluMSkgKiAobWF4MiAtIG1pbjIpIC8gKG1heDEgLSBtaW4xKTsKfQoKZmxvYXQgZ2V0VGhyZXNob2xkKCkgewogIHZlYzQgY29sb3IgPSB2ZWM0KDAuKTsKICBmb3IgKGZsb2F0IHkgPSAtNi47IHkgPCA3LjsgeSArPSAxLikgewogICAgZm9yIChmbG9hdCB4ID0gLTYuOyB4IDwgNy47IHggKz0gMS4pIHsKICAgICAgdmVjNCBpbWFnZV9ub3dfY29sb3IgPQogICAgICAgICAgdGV4dHVyZTJEKGltYWdlX25vdywgX3RleHR1cmVfY29vcmQgKyB2ZWMyKHgsIHkpIC8gY2FudmFzKTsKICAgICAgdmVjNCBpbWFnZV9iZWZvcmVfY29sb3IgPQogICAgICAgICAgdGV4dHVyZTJEKGltYWdlX2JlZm9yZSwgX3RleHR1cmVfY29vcmQgKyB2ZWMyKHgsIHkpIC8gY2FudmFzKTsKICAgICAgY29sb3IgKz0gYWJzKGltYWdlX2JlZm9yZV9jb2xvciAtIGltYWdlX25vd19jb2xvcik7CiAgICB9CiAgfQogIHJldHVybiAoY29sb3IueCArIGNvbG9yLnkgKyBjb2xvci56KSAvICgzLiAqIDkuKTsKfQoKdm9pZCBtYWluKCkgewogIGZsb2F0IHRyZXNob2xkX2lucHV0ID0gLjQ7CiAgZmxvYXQgdHJlc2hvbGRfcHJldmlvdXNfcmVuZGVyaW5nID0gLjk4OwoKICB2ZWM0IG1hc2tfbm93X2NvbG9yID0gdGV4dHVyZTJEKG1hc2tfbm93LCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCBtYXNrX2JlZm9yZV9jb2xvciA9IHRleHR1cmUyRChtYXNrX2JlZm9yZSwgX3RleHR1cmVfY29vcmQpOwogIHZlYzQgcHJldmlvdXNfcmVuZGVyaW5nX2NvbG9yID0gdGV4dHVyZTJEKHByZXZpb3VzX3JlbmRlcmluZywgX3RleHR1cmVfY29vcmQpOwoKICB2ZWMzIG1hc2tfZGlmZiA9IGFicyhtYXNrX2JlZm9yZV9jb2xvci54eXogLSBtYXNrX25vd19jb2xvci54eXopOwogIGZsb2F0IGZsaWNrZXJpbmcgPSBtYXNrX2RpZmYueDsKICBmbG9hdCB0aHJlc2hvbGQgPSBnZXRUaHJlc2hvbGQoKTsKICBpZiAodGhyZXNob2xkIDwgdGhyZXNob2xkX2FjdGl2YXRpb24pIHsKICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoZmxpY2tlcmluZywgMC4sIDAuLCAxLikgKiBjdXJyZW50X2ZhY3RvciArCiAgICAgICAgICAgICAgICAgICBwcmV2aW91c19yZW5kZXJpbmdfY29sb3IgKiBwcmV2aW91c19mYWN0b3I7CiAgICBnbF9GcmFnQ29sb3IgKj0gKDEuIC0gdGhyZXNob2xkKTsKICB9Cn0KYCxNZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIE5mIGV4dGVuZHMgQ3J7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gT2Z9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIE1mfX12YXIgVWY9YCN2ZXJzaW9uIDMwMCBlcwovLyBodHRwczovL2dpdGh1Yi5jb20vVm9sY29taXgvdmlydHVhbC1iYWNrZ3JvdW5kL2Jsb2IvbWFpbi9zcmMvcGlwZWxpbmVzL3dlYmdsMi9qb2ludEJpbGF0ZXJhbEZpbHRlclN0YWdlLnRzCgpwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CnVuaWZvcm0gc2FtcGxlcjJEIGlucHV0X2ZyYW1lOwp1bmlmb3JtIHNhbXBsZXIyRCBzZWdtZW50YXRpb25fbWFzazsKdW5pZm9ybSBzYW1wbGVyMkQgdGhyZXNob2xkOwp1bmlmb3JtIHZlYzIgdGV4ZWxfc2l6ZTsKdW5pZm9ybSBmbG9hdCBzdGVwOwp1bmlmb3JtIGZsb2F0IHJhZGl1czsKdW5pZm9ybSBmbG9hdCBvZmZzZXQ7CnVuaWZvcm0gZmxvYXQgc2lnbWFfdGV4ZWw7CnVuaWZvcm0gZmxvYXQgc2lnbWFfY29sb3I7CgppbiB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwpvdXQgdmVjNCBvdXRDb2xvcjsKCmZsb2F0IGdhdXNzaWFuKGZsb2F0IHgsIGZsb2F0IHNpZ21hKSB7CiAgZmxvYXQgY29lZmYgPSAtMC41IC8gKHNpZ21hICogc2lnbWEgKiA0LjAgKyAxLjBlLTYpOwogIHJldHVybiBleHAoKHggKiB4KSAqIGNvZWZmKTsKfQoKdm9pZCBtYWluKCkgewogIHZlYzIgY2VudGVyQ29vcmQgPSBfdGV4dHVyZV9jb29yZDsKICB2ZWMzIGNlbnRlckNvbG9yID0gdGV4dHVyZShpbnB1dF9mcmFtZSwgY2VudGVyQ29vcmQpLnJnYjsKICBmbG9hdCBuZXdWYWwgPSAwLjA7CiAgZmxvYXQgc3BhY2VXZWlnaHQgPSAwLjA7CiAgZmxvYXQgY29sb3JXZWlnaHQgPSAwLjA7CiAgZmxvYXQgdG90YWxXZWlnaHQgPSAwLjA7CiAgLy8gU3Vic2FtcGxlIGtlcm5lbCBzcGFjZS4KICBmb3IgKGZsb2F0IGkgPSAtcmFkaXVzICsgb2Zmc2V0OyBpIDw9IHJhZGl1czsgaSArPSBzdGVwKSB7CiAgICBmb3IgKGZsb2F0IGogPSAtcmFkaXVzICsgb2Zmc2V0OyBqIDw9IHJhZGl1czsgaiArPSBzdGVwKSB7CiAgICAgIHZlYzIgc2hpZnQgPSB2ZWMyKGosIGkpICogdGV4ZWxfc2l6ZTsKICAgICAgdmVjMiBjb29yZCA9IHZlYzIoY2VudGVyQ29vcmQgKyBzaGlmdCk7CiAgICAgIHZlYzMgZnJhbWVDb2xvciA9IHRleHR1cmUoaW5wdXRfZnJhbWUsIGNvb3JkKS5yZ2I7CiAgICAgIGZsb2F0IHRocmVzaG9sZCA9IHRleHR1cmUodGhyZXNob2xkLCBjb29yZCkuYTsKICAgICAgZmxvYXQgb3V0VmFsID0gdGV4dHVyZShzZWdtZW50YXRpb25fbWFzaywgY29vcmQpLmE7CgogICAgICBzcGFjZVdlaWdodCA9IGdhdXNzaWFuKGRpc3RhbmNlKGNlbnRlckNvb3JkLCBjb29yZCksIHNpZ21hX3RleGVsKTsKICAgICAgY29sb3JXZWlnaHQgPSBnYXVzc2lhbihkaXN0YW5jZShjZW50ZXJDb2xvciwgZnJhbWVDb2xvciksIHNpZ21hX2NvbG9yKTsKICAgICAgdG90YWxXZWlnaHQgKz0gc3BhY2VXZWlnaHQgKiBjb2xvcldlaWdodDsKICAgICAgbmV3VmFsICs9IHNwYWNlV2VpZ2h0ICogY29sb3JXZWlnaHQgKiBvdXRWYWwgKiB0aHJlc2hvbGQ7CiAgICB9CiAgfQogIG5ld1ZhbCAvPSB0b3RhbFdlaWdodDsKICBvdXRDb2xvciA9IHZlYzQodmVjMygwLiksIG5ld1ZhbCk7Cn1gLEJmPWAjdmVyc2lvbiAzMDAgZXMKaW4gdmVjMiBwb3NpdGlvbjsKaW4gdmVjMiB0ZXh0dXJlX2Nvb3JkOwpvdXQgdmVjMiBfdGV4dHVyZV9jb29yZDsKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfWA7Y2xhc3Mga2YgZXh0ZW5kcyB5ZXtnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBVZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gQmZ9fXZhciBMZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdm9pZCBtYWluKCkgewogIGludCBjb3VudCA9IDA7CiAgZm9yIChmbG9hdCB5ID0gLTEuOyB5IDwgMi47IHkgKz0gMS4pIHsKICAgIGZvciAoZmxvYXQgeCA9IC0xLjsgeCA8IDIuOyB4ICs9IDEuKSB7CiAgICAgIHZlYzIgY29vcmQgPSBfdGV4dHVyZV9jb29yZCArIHZlYzIoeSwgeCkgLyBjYW52YXM7CiAgICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgY29vcmQpOwogICAgICBpZiAoY29sb3IuciA+IC4xKSB7CiAgICAgICAgY291bnQrKzsKICAgICAgfQogICAgfQogIH0KICBpZiAoY291bnQgPiA1KSB7CiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQpOwogIH0KfQpgLCRmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgR2YgZXh0ZW5kcyB5ZXtnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBMZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gJGZ9fXZhciB6Zj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdm9pZCBtYWluKCkgewogIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQpOwogIGZvciAoZmxvYXQgeSA9IC0yLjsgeSA8IDMuOyB5ICs9IDEuKSB7CiAgICBmb3IgKGZsb2F0IHggPSAtMi47IHggPCAzLjsgeCArPSAxLikgewogICAgICB2ZWMyIGNvb3JkID0gX3RleHR1cmVfY29vcmQ7CiAgICAgIGNvb3JkICs9IHZlYzIoeSwgeCkgLyBjYW52YXM7CiAgICAgIGNvbG9yICs9IHRleHR1cmUyRCh0ZXh0dXJlLCBjb29yZCkgKiAoMS4gLyA0Lik7CiAgICB9CiAgfQoKICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsKfQpgLEhmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgVmYgZXh0ZW5kcyBDcntnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiB6Zn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gSGZ9fXZhciBXZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHNhbXBsZXIyRCB0aHJlc2hvbGQ7CnVuaWZvcm0gc2FtcGxlcjJEIGlucHV0czsKCnZvaWQgbWFpbigpIHsKICB2ZWM0IGlucHV0c19jb2xvciA9IHRleHR1cmUyRChpbnB1dHMsIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IHRocmVzaG9sZF9jb2xvciA9IHRleHR1cmUyRCh0aHJlc2hvbGQsIF90ZXh0dXJlX2Nvb3JkKTsKICBpZiAodGhyZXNob2xkX2NvbG9yLnIgPCAuMSAmJiBpbnB1dHNfY29sb3IuciA+IC41KSB7CiAgICBnbF9GcmFnQ29sb3IgPSBpbnB1dHNfY29sb3I7CiAgfQp9CmAsamY9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYDtjbGFzcyBxZiBleHRlbmRzIENye2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIFdmfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBqZn19Y2xhc3MgWGYgZXh0ZW5kcyBGcntjb25zdHJ1Y3RvcihlLHQsbil7c3VwZXIoKSx0aGlzLmNvbnRleHQ9ZSx0aGlzLm9wdGlvbnM9e2N1cnJlbnRUaHJlc2hvbGRNaW5pbXVtOjAsY3VycmVudFRocmVzaG9sZE1heGltdW06MSxwcmV2aW91c1RocmVzaG9sZE1pbmltdW06MCxwcmV2aW91c1RocmVzaG9sZE1heGltdW06MSx0aHJlc2hvbGRNaW5pbXVtOjAsdGhyZXNob2xkTWF4aW11bToxLHRocmVzaG9sZEZhY3RvcjoxfTtjb25zdCBpPXtjb250ZXh0OmUsaGVpZ2h0Om4sd2lkdGg6dH0sbz1uZXcgTmYoaSkscz1uZXcgTmkoey4uLmkscmFkaXVzOjEsdHlwZTpEci5HQVVTU0lBTn0pLGE9bmV3IHFmKGkpLHU9bmV3IFZmKGkpLGY9bmV3IEdmKGkpLGM9bmV3IGtmKHsuLi5pfSksZD0uNjYscD02NDAseT00ODAsbT0yNTYsXz0xNDQ7bGV0IGI9MTtiKj1NYXRoLm1heChwL20seS9fKTtjb25zdCBnPU1hdGgubWF4KDEsTWF0aC5zcXJ0KGIpKmQpLFQ9MS9wLEY9MS95O3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTpvLGdldFVuaWZvcm1zOigpPT4oe2ltYWdlX25vdzpSKGUsdGhpcy5pbnB1dEltYWdlKSxpbWFnZV9iZWZvcmU6UihlLHRoaXMucHJldmlvdXNJbnB1dEltYWdlKSxtYXNrX25vdzpSKGUsdGhpcy5pbnB1dE1hc2spLG1hc2tfYmVmb3JlOlIoZSx0aGlzLnByZXZpb3VzSW5wdXRNYXNrKSxjdXJyZW50X3RocmVzaG9sZF9taW5pbXVtOnRoaXMub3B0aW9ucy5jdXJyZW50VGhyZXNob2xkTWluaW11bSxjdXJyZW50X3RocmVzaG9sZF9tYXhpbXVtOnRoaXMub3B0aW9ucy5jdXJyZW50VGhyZXNob2xkTWF4aW11bSxwcmV2aW91c190aHJlc2hvbGRfbWluaW11bTp0aGlzLm9wdGlvbnMucHJldmlvdXNUaHJlc2hvbGRNaW5pbXVtLHByZXZpb3VzX3RocmVzaG9sZF9tYXhpbXVtOnRoaXMub3B0aW9ucy5wcmV2aW91c1RocmVzaG9sZE1heGltdW0sdGhyZXNob2xkX21pbmltdW06dGhpcy5vcHRpb25zLnRocmVzaG9sZE1pbmltdW0sdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLnRocmVzaG9sZE1heGltdW0sdGhyZXNob2xkX2ZhY3Rvcjp0aGlzLm9wdGlvbnMudGhyZXNob2xkRmFjdG9yfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06YSxnZXRVbmlmb3JtczooKT0+KHtpbnB1dHM6UihlLHRoaXMuaW5wdXRNYXNrKSx0aHJlc2hvbGQ6UihlLG8ub3V0cHV0KX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmYsZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpSKGUsYS5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06dSxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOlIoZSxmLm91dHB1dCl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpzLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6UihlLHUub3V0cHV0KX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmMsZ2V0VW5pZm9ybXM6KCk9Pih7aW5wdXRfZnJhbWU6UihlLHRoaXMuaW5wdXRJbWFnZSksc2VnbWVudGF0aW9uX21hc2s6UihlLHRoaXMuaW5wdXRNYXNrKSx0aHJlc2hvbGQ6UihlLHMub3V0cHV0KSx0ZXhlbF9zaXplOltULEZdLHN0ZXA6ZyxyYWRpdXM6YixvZmZzZXQ6Zz4xP2cqLjU6MCxzaWdtYV90ZXhlbDpNYXRoLm1heChULEYpKmIsc2lnbWFfY29sb3I6LjF9KX0pLHRoaXMub3V0cHV0PWMub3V0cHV0fXNldERhdGEoZSx0KXt0aGlzLnByZXZpb3VzSW5wdXRJbWFnZT10aGlzLmlucHV0SW1hZ2U/dGhpcy5pbnB1dEltYWdlOmUsdGhpcy5wcmV2aW91c0lucHV0TWFzaz10aGlzLmlucHV0TWFzaz90aGlzLmlucHV0TWFzazp0LHRoaXMuaW5wdXRJbWFnZT1lLHRoaXMuaW5wdXRNYXNrPXR9c2V0T3B0aW9ucyhlKXt0aGlzLm9wdGlvbnM9ZX19dmFyIFlmPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKCnZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkKTsgfQpgLEtmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKdW5pZm9ybSBib29sIGludmVydF95OwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7CiAgaWYgKGludmVydF95KSB7CiAgICBfdGV4dHVyZV9jb29yZC55ID0gMS4gLSB0ZXh0dXJlX2Nvb3JkLnk7CiAgfQp9CmA7Y2xhc3MgSmYgZXh0ZW5kcyB5ZXtnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBZZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gS2Z9fWNsYXNzIFFmIGV4dGVuZHMgRnJ7Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKCksdGhpcy5jb250ZXh0PWU7Y29uc3QgaT17Y29udGV4dDplLGhlaWdodDpuLHdpZHRoOnR9O3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTpuZXcgSmYoey4uLmksZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSksZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpSKGUsdGhpcy5pbnB1dEltYWdlKSxpbnZlcnRfeTohMH0pfSl9c2V0RGF0YShlKXt0aGlzLmlucHV0SW1hZ2U9ZX19Y2xhc3MgWmZ7Y29uc3RydWN0b3IoZSl7dGhpcy5jYW52YXM9bmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLHRoaXMuY29udGV4dD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KCJ3ZWJnbDIiKSx0aGlzLmNhbnZhcy53aWR0aD1lLndpZHRoLHRoaXMuY2FudmFzLmhlaWdodD1lLmhlaWdodCx0aGlzLnJlc2l6ZT1uZXcgUWYodGhpcy5jb250ZXh0LGUud2lkdGgsZS5oZWlnaHQpfXJlc2l6ZUZvcmVncm91bmQoZSx0KXt0aGlzLmNhbnZhcy53aWR0aD1lLHRoaXMuY2FudmFzLmhlaWdodD10LHRoaXMucmVzaXplLnJlc2l6ZU91dHB1dChlLHQpfWFzeW5jIHByb2Nlc3MoZSl7dmFyIHQsbjtyZXR1cm4gdGhpcy5jYW52YXMud2lkdGg9dGhpcy5jYW52YXMud2lkdGgsKHQ9dGhpcy5yZXNpemUpPT1udWxsfHx0LnNldERhdGEoZSksKG49dGhpcy5yZXNpemUpPT1udWxsfHxuLnJ1bigpLHRoaXMuY2FudmFzfX1jbGFzcyBlbHtjb25zdHJ1Y3RvcihlKXt0aGlzLmNhbnZhcz1uZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCksdGhpcy5jb250ZXh0PXRoaXMuY2FudmFzLmdldENvbnRleHQoIndlYmdsMiIpLHRoaXMuY2FudmFzLndpZHRoPWUuZm9yZWdyb3VuZFdpZHRoLHRoaXMuY2FudmFzLmhlaWdodD1lLmZvcmVncm91bmRIZWlnaHQsdGhpcy5pbXByb3ZlTWFza1NlZ21lbnRhdGlvbj1uZXcgWGYodGhpcy5jb250ZXh0LGUubWFza1dpZHRoLGUubWFza0hlaWdodCksdGhpcy5iYWNrZ3JvdW5kSW1hZ2U9bmV3IE1pKHRoaXMuY29udGV4dCksdGhpcy5iYWNrZ3JvdW5kVmlkZW89bmV3IEZmKHRoaXMuY29udGV4dCksdGhpcy5iYWNrZ3JvdW5kUmVzaXplcj1uZXcgWmYoe3dpZHRoOmUuZm9yZWdyb3VuZFdpZHRoLGhlaWdodDplLmZvcmVncm91bmRIZWlnaHR9KX1zZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKXtzd2l0Y2goZS50cmFuc2Zvcm1lclR5cGUpe2Nhc2UiQmFja2dyb3VuZEJsdXIiOnRoaXMuYWN0aXZlUGlwZWxpbmU9bmV3IElmKHRoaXMuY29udGV4dCx0aGlzLmdldEJsdXJTaXplKGUucmFkaXVzKSk7YnJlYWs7Y2FzZSJTaWxob3VldHRlQmx1ciI6dGhpcy5hY3RpdmVQaXBlbGluZT1uZXcgQ2YodGhpcy5jb250ZXh0LHRoaXMuZ2V0Qmx1clNpemUoZS5yYWRpdXMpKTticmVhaztjYXNlIlZpZGVvQmFja2dyb3VuZCI6dGhpcy5hY3RpdmVQaXBlbGluZT10aGlzLmJhY2tncm91bmRWaWRlbzticmVhaztjYXNlIlZpcnR1YWxCYWNrZ3JvdW5kIjp0aGlzLmFjdGl2ZVBpcGVsaW5lPXRoaXMuYmFja2dyb3VuZEltYWdlO2JyZWFrfXRoaXMub3B0aW9ucz1lfXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe3ZhciB0Oyh0PXRoaXMuaW1wcm92ZU1hc2tTZWdtZW50YXRpb24pPT1udWxsfHx0LnNldE9wdGlvbnMoZSl9c2V0VmlkZW9CR1JlYWRhYmxlKGUpe3RoaXMuYmFja2dyb3VuZFZpZGVvLmlucHV0VmlkZW89ZX1hc3luYyBzZXRWaXJ0dWFsQkdJbWFnZShlKXt0aGlzLnZpcnR1YWxCR0ltYWdlPWUsdGhpcy5iYWNrZ3JvdW5kSW1hZ2UuaW5wdXRCYWNrZ3JvdW5kSW1hZ2U9YXdhaXQgdGhpcy5iYWNrZ3JvdW5kUmVzaXplci5wcm9jZXNzKGUpfWFzeW5jIHByb2Nlc3MoZSx0KXt2YXIgbixpLG8scyxhO2lmKHRoaXMuYWN0aXZlUGlwZWxpbmUmJmUud2lkdGgmJih0PT1udWxsP3ZvaWQgMDp0LndpZHRoKSl7bGV0IHU9dDsoKChuPXRoaXMub3B0aW9ucyk9PW51bGw/dm9pZCAwOm4uc2VsZmllU2VnbWVudGF0aW9uVHlwZSkmJigoaT10aGlzLm9wdGlvbnMpPT1udWxsP3ZvaWQgMDppLnNlbGZpZVNlZ21lbnRhdGlvblR5cGUpPT09IlBSRUNJU0UifHwhKChvPXRoaXMub3B0aW9ucykhPW51bGwmJm8uc2VsZmllU2VnbWVudGF0aW9uVHlwZSkmJnRoaXMuYWN0aXZlUGlwZWxpbmUucHJlY2lzZU1hc2tFbmFibGVkKSYmKHRoaXMuaW1wcm92ZU1hc2tTZWdtZW50YXRpb24uc2V0RGF0YShlLHQpLHRoaXMuaW1wcm92ZU1hc2tTZWdtZW50YXRpb24ucnVuKCksdT10aGlzLmltcHJvdmVNYXNrU2VnbWVudGF0aW9uLm91dHB1dCksKHM9dGhpcy5hY3RpdmVQaXBlbGluZSk9PW51bGx8fHMuc2V0RGF0YShlLHUpLChhPXRoaXMuYWN0aXZlUGlwZWxpbmUpPT1udWxsfHxhLnJ1bigpfX1hc3luYyByZXNpemVGb3JlZ3JvdW5kKGUsdCl7dmFyIG47dGhpcy5jYW52YXMud2lkdGg9ZSx0aGlzLmNhbnZhcy5oZWlnaHQ9dCx0aGlzLmJhY2tncm91bmRJbWFnZS5yZXNpemVPdXRwdXQoZSx0KSx0aGlzLmJhY2tncm91bmRWaWRlby5yZXNpemVPdXRwdXQoZSx0KSx0aGlzLmJhY2tncm91bmRSZXNpemVyLnJlc2l6ZUZvcmVncm91bmQoZSx0KSwobj10aGlzLmFjdGl2ZVBpcGVsaW5lKT09bnVsbHx8bi5yZXNpemVPdXRwdXQoZSx0KSx0aGlzLnZpcnR1YWxCR0ltYWdlJiYodGhpcy5iYWNrZ3JvdW5kSW1hZ2UuaW5wdXRCYWNrZ3JvdW5kSW1hZ2U9YXdhaXQgdGhpcy5iYWNrZ3JvdW5kUmVzaXplci5wcm9jZXNzKHRoaXMudmlydHVhbEJHSW1hZ2UpKX1nZXRCbHVyU2l6ZShlPWl0Lkxvdyl7c3dpdGNoKGUpe2Nhc2UgaXQuTG93OnJldHVybiA1O2Nhc2UgaXQuSGlnaDpyZXR1cm4gMTJ9cmV0dXJuIGV9fXZhciBTdD1mdW5jdGlvbigpe3ZhciByPXR5cGVvZiBkb2N1bWVudCE9InVuZGVmaW5lZCImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQ/ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM6dm9pZCAwO3JldHVybiBmdW5jdGlvbihlKXtlPWV8fHt9O3ZhciB0PXR5cGVvZiBlIT0idW5kZWZpbmVkIj9lOnt9LG4saTt0LnJlYWR5PW5ldyBQcm9taXNlKGZ1bmN0aW9uKGwsaCl7bj1sLGk9aH0pO3ZhciBvPXt9LHM7Zm9yKHMgaW4gdCl0Lmhhc093blByb3BlcnR5KHMpJiYob1tzXT10W3NdKTt2YXIgYT0iLi90aGlzLnByb2dyYW0iLHU9ZnVuY3Rpb24obCxoKXt0aHJvdyBofSxmPSEwLGM9IiI7ZnVuY3Rpb24gZChsKXtyZXR1cm4gdC5sb2NhdGVGaWxlP3QubG9jYXRlRmlsZShsLGMpOmMrbH12YXIgcDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiZkb2N1bWVudC5jdXJyZW50U2NyaXB0JiYoYz1kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyksciYmKGM9ciksYy5pbmRleE9mKCJibG9iOiIpIT09MD9jPWMuc3Vic3RyKDAsYy5yZXBsYWNlKC9bPyNdLiovLCIiKS5sYXN0SW5kZXhPZigiLyIpKzEpOmM9IiI7dmFyIHk9dC5wcmludHx8Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSxtPXQucHJpbnRFcnJ8fGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO2ZvcihzIGluIG8pby5oYXNPd25Qcm9wZXJ0eShzKSYmKHRbc109b1tzXSk7bz1udWxsLHQuYXJndW1lbnRzJiZ0LmFyZ3VtZW50cyx0LnRoaXNQcm9ncmFtJiYoYT10LnRoaXNQcm9ncmFtKSx0LnF1aXQmJih1PXQucXVpdCk7dmFyIF87dC53YXNtQmluYXJ5JiYoXz10Lndhc21CaW5hcnkpO3ZhciBiPXQubm9FeGl0UnVudGltZXx8ITA7dHlwZW9mIFdlYkFzc2VtYmx5IT0ib2JqZWN0IiYmY2UoIm5vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWQiKTt2YXIgZyxUPSExLEY9dHlwZW9mIFRleHREZWNvZGVyIT0idW5kZWZpbmVkIj9uZXcgVGV4dERlY29kZXIoInV0ZjgiKTp2b2lkIDA7ZnVuY3Rpb24gTChsLGgseCl7Zm9yKHZhciBBPWgreCxEPWg7bFtEXSYmIShEPj1BKTspKytEO2lmKEQtaD4xNiYmbC5zdWJhcnJheSYmRilyZXR1cm4gRi5kZWNvZGUobC5zdWJhcnJheShoLEQpKTtmb3IodmFyIE09IiI7aDxEOyl7dmFyIHc9bFtoKytdO2lmKCEodyYxMjgpKXtNKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHcpO2NvbnRpbnVlfXZhciBVPWxbaCsrXSY2MztpZigodyYyMjQpPT0xOTIpe00rPVN0cmluZy5mcm9tQ2hhckNvZGUoKHcmMzEpPDw2fFUpO2NvbnRpbnVlfXZhciBRPWxbaCsrXSY2MztpZigodyYyNDApPT0yMjQ/dz0odyYxNSk8PDEyfFU8PDZ8UTp3PSh3JjcpPDwxOHxVPDwxMnxRPDw2fGxbaCsrXSY2Myx3PDY1NTM2KU0rPVN0cmluZy5mcm9tQ2hhckNvZGUodyk7ZWxzZXt2YXIgV2k9dy02NTUzNjtNKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fFdpPj4xMCw1NjMyMHxXaSYxMDIzKX19cmV0dXJuIE19ZnVuY3Rpb24gVihsLGgpe3JldHVybiBsP0woJGUsbCxoKToiIn1mdW5jdGlvbiBlZShsLGgseCl7Zm9yKHZhciBBPTA7QTxsLmxlbmd0aDsrK0EpSXRbaCsrPj4wXT1sLmNoYXJDb2RlQXQoQSk7eHx8KEl0W2g+PjBdPTApfWZ1bmN0aW9uIHEobCxoKXtyZXR1cm4gbCVoPjAmJihsKz1oLWwlaCksbH12YXIgQmksSXQsJGUsWDtmdW5jdGlvbiBraShsKXtCaT1sLHQuSEVBUDg9SXQ9bmV3IEludDhBcnJheShsKSx0LkhFQVAxNj1uZXcgSW50MTZBcnJheShsKSx0LkhFQVAzMj1YPW5ldyBJbnQzMkFycmF5KGwpLHQuSEVBUFU4PSRlPW5ldyBVaW50OEFycmF5KGwpLHQuSEVBUFUxNj1uZXcgVWludDE2QXJyYXkobCksdC5IRUFQVTMyPW5ldyBVaW50MzJBcnJheShsKSx0LkhFQVBGMzI9bmV3IEZsb2F0MzJBcnJheShsKSx0LkhFQVBGNjQ9bmV3IEZsb2F0NjRBcnJheShsKX10LklOSVRJQUxfTUVNT1JZO3ZhciBNcixMaT1bXSwkaT1bXSxHaT1bXSxhbD0wO2Z1bmN0aW9uIHVsKCl7cmV0dXJuIGJ8fGFsPjB9ZnVuY3Rpb24gY2woKXtpZih0LnByZVJ1bilmb3IodHlwZW9mIHQucHJlUnVuPT0iZnVuY3Rpb24iJiYodC5wcmVSdW49W3QucHJlUnVuXSk7dC5wcmVSdW4ubGVuZ3RoOylkbCh0LnByZVJ1bi5zaGlmdCgpKTtOcihMaSl9ZnVuY3Rpb24gZmwoKXtOcigkaSl9ZnVuY3Rpb24gbGwoKXtpZih0LnBvc3RSdW4pZm9yKHR5cGVvZiB0LnBvc3RSdW49PSJmdW5jdGlvbiImJih0LnBvc3RSdW49W3QucG9zdFJ1bl0pO3QucG9zdFJ1bi5sZW5ndGg7KWhsKHQucG9zdFJ1bi5zaGlmdCgpKTtOcihHaSl9ZnVuY3Rpb24gZGwobCl7TGkudW5zaGlmdChsKX1mdW5jdGlvbiBtbChsKXskaS51bnNoaWZ0KGwpfWZ1bmN0aW9uIGhsKGwpe0dpLnVuc2hpZnQobCl9dmFyIF9lPTAsR2U9bnVsbDtmdW5jdGlvbiBwbChsKXtfZSsrLHQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKF9lKX1mdW5jdGlvbiB5bChsKXtpZihfZS0tLHQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKF9lKSxfZT09MCYmR2Upe3ZhciBoPUdlO0dlPW51bGwsaCgpfX10LnByZWxvYWRlZEltYWdlcz17fSx0LnByZWxvYWRlZEF1ZGlvcz17fTtmdW5jdGlvbiBjZShsKXt0Lm9uQWJvcnQmJnQub25BYm9ydChsKSxsPSJBYm9ydGVkKCIrbCsiKSIsbShsKSxUPSEwLGwrPSIuIEJ1aWxkIHdpdGggLXMgQVNTRVJUSU9OUz0xIGZvciBtb3JlIGluZm8uIjt2YXIgaD1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKGwpO3Rocm93IGkoaCksaH12YXIgX2w9ImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwiO2Z1bmN0aW9uIHppKGwpe3JldHVybiBsLnN0YXJ0c1dpdGgoX2wpfXZhciBZO1k9InRmbGl0ZS1zaW1kLndhc20iLHppKFkpfHwoWT1kKFkpKTtmdW5jdGlvbiBIaShsKXt0cnl7aWYobD09WSYmXylyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoXyk7aWYoIXApdGhyb3ciYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWQifWNhdGNoKGgpe2NlKGgpfX1mdW5jdGlvbiB4bCgpe3JldHVybiFfJiZmJiZ0eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiI/ZmV0Y2goWSx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24obCl7aWYoIWwub2spdGhyb3ciZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnIitZKyInIjtyZXR1cm4gbC5hcnJheUJ1ZmZlcigpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gSGkoWSl9KTpQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIEhpKFkpfSl9ZnVuY3Rpb24gYmwoKXt2YXIgbD17YTokbH07ZnVuY3Rpb24gaCh3LFUpe3ZhciBRPXcuZXhwb3J0czt0LmFzbT1RLGc9dC5hc20ucSxraShnLmJ1ZmZlciksTXI9dC5hc20uRSxtbCh0LmFzbS5yKSx5bCgpfXBsKCk7ZnVuY3Rpb24geCh3KXtoKHcuaW5zdGFuY2UpfWZ1bmN0aW9uIEEodyl7cmV0dXJuIHhsKCkudGhlbihmdW5jdGlvbihVKXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoVSxsKX0pLnRoZW4oZnVuY3Rpb24oVSl7cmV0dXJuIFV9KS50aGVuKHcsZnVuY3Rpb24oVSl7bSgiZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogIitVKSxjZShVKX0pfWZ1bmN0aW9uIEQoKXtyZXR1cm4hXyYmdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nPT0iZnVuY3Rpb24iJiYhemkoWSkmJnR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIj9mZXRjaChZLHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSkudGhlbihmdW5jdGlvbih3KXt2YXIgVT1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyh3LGwpO3JldHVybiBVLnRoZW4oeCxmdW5jdGlvbihRKXtyZXR1cm4gbSgid2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICIrUSksbSgiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSxBKHgpfSl9KTpBKHgpfWlmKHQuaW5zdGFudGlhdGVXYXNtKXRyeXt2YXIgTT10Lmluc3RhbnRpYXRlV2FzbShsLGgpO3JldHVybiBNfWNhdGNoKHcpe3JldHVybiBtKCJNb2R1bGUuaW5zdGFudGlhdGVXYXNtIGNhbGxiYWNrIGZhaWxlZCB3aXRoIGVycm9yOiAiK3cpLCExfXJldHVybiBEKCkuY2F0Y2goaSkse319ZnVuY3Rpb24gTnIobCl7Zm9yKDtsLmxlbmd0aD4wOyl7dmFyIGg9bC5zaGlmdCgpO2lmKHR5cGVvZiBoPT0iZnVuY3Rpb24iKXtoKHQpO2NvbnRpbnVlfXZhciB4PWguZnVuYzt0eXBlb2YgeD09Im51bWJlciI/aC5hcmc9PT12b2lkIDA/TXIuZ2V0KHgpKCk6TXIuZ2V0KHgpKGguYXJnKTp4KGguYXJnPT09dm9pZCAwP251bGw6aC5hcmcpfX1mdW5jdGlvbiBnbChsLGgseCxBKXtjZSgiQXNzZXJ0aW9uIGZhaWxlZDogIitWKGwpKyIsIGF0OiAiK1toP1YoaCk6InVua25vd24gZmlsZW5hbWUiLHgsQT9WKEEpOiJ1bmtub3duIGZ1bmN0aW9uIl0pfWZ1bmN0aW9uIHZsKGwsaCl7Y2UoIlRvIHVzZSBkbG9wZW4sIHlvdSBuZWVkIHRvIHVzZSBFbXNjcmlwdGVuJ3MgbGlua2luZyBzdXBwb3J0LCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Vtc2NyaXB0ZW4tY29yZS9lbXNjcmlwdGVuL3dpa2kvTGlua2luZyIpfWZ1bmN0aW9uIEVsKGwsaCl7Y2UoIlRvIHVzZSBkbG9wZW4sIHlvdSBuZWVkIHRvIHVzZSBFbXNjcmlwdGVuJ3MgbGlua2luZyBzdXBwb3J0LCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Vtc2NyaXB0ZW4tY29yZS9lbXNjcmlwdGVuL3dpa2kvTGlua2luZyIpfWZ1bmN0aW9uIFRsKCl7Y2UoIiIpfXZhciBGdDtGdD1mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX07dmFyIEFsPSEwO2Z1bmN0aW9uIHdsKGwpe3JldHVybiBYW1ZpKCk+PjJdPWwsbH1mdW5jdGlvbiBSbChsLGgpe3ZhciB4O2lmKGw9PT0wKXg9RGF0ZS5ub3coKTtlbHNlIGlmKChsPT09MXx8bD09PTQpJiZBbCl4PUZ0KCk7ZWxzZSByZXR1cm4gd2woMjgpLC0xO3JldHVybiBYW2g+PjJdPXgvMWUzfDAsWFtoKzQ+PjJdPXglMWUzKjFlMyoxZTN8MCwwfWZ1bmN0aW9uIFNsKCl7cmV0dXJuIDIxNDc0ODM2NDh9ZnVuY3Rpb24gSWwobCxoLHgpeyRlLmNvcHlXaXRoaW4obCxoLGgreCl9ZnVuY3Rpb24gRmwobCl7dHJ5e3JldHVybiBnLmdyb3cobC1CaS5ieXRlTGVuZ3RoKzY1NTM1Pj4+MTYpLGtpKGcuYnVmZmVyKSwxfWNhdGNoe319ZnVuY3Rpb24gUGwobCl7dmFyIGg9JGUubGVuZ3RoO2w9bD4+PjA7dmFyIHg9MjE0NzQ4MzY0ODtpZihsPngpcmV0dXJuITE7Zm9yKHZhciBBPTE7QTw9NDtBKj0yKXt2YXIgRD1oKigxKy4yL0EpO0Q9TWF0aC5taW4oRCxsKzEwMDY2MzI5Nik7dmFyIE09TWF0aC5taW4oeCxxKE1hdGgubWF4KGwsRCksNjU1MzYpKSx3PUZsKE0pO2lmKHcpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gRGwobCl7Zm9yKHZhciBoPUZ0KCk7RnQoKS1oPGw7KTt9dmFyIFVyPXt9O2Z1bmN0aW9uIENsKCl7cmV0dXJuIGF8fCIuL3RoaXMucHJvZ3JhbSJ9ZnVuY3Rpb24gemUoKXtpZighemUuc3RyaW5ncyl7dmFyIGw9KHR5cGVvZiBuYXZpZ2F0b3I9PSJvYmplY3QiJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdfHwiQyIpLnJlcGxhY2UoIi0iLCJfIikrIi5VVEYtOCIsaD17VVNFUjoid2ViX3VzZXIiLExPR05BTUU6IndlYl91c2VyIixQQVRIOiIvIixQV0Q6Ii8iLEhPTUU6Ii9ob21lL3dlYl91c2VyIixMQU5HOmwsXzpDbCgpfTtmb3IodmFyIHggaW4gVXIpVXJbeF09PT12b2lkIDA/ZGVsZXRlIGhbeF06aFt4XT1Vclt4XTt2YXIgQT1bXTtmb3IodmFyIHggaW4gaClBLnB1c2goeCsiPSIraFt4XSk7emUuc3RyaW5ncz1BfXJldHVybiB6ZS5zdHJpbmdzfXZhciBQdD17bWFwcGluZ3M6e30sYnVmZmVyczpbbnVsbCxbXSxbXV0scHJpbnRDaGFyOmZ1bmN0aW9uKGwsaCl7dmFyIHg9UHQuYnVmZmVyc1tsXTtoPT09MHx8aD09PTEwPygobD09PTE/eTptKShMKHgsMCkpLHgubGVuZ3RoPTApOngucHVzaChoKX0sdmFyYXJnczp2b2lkIDAsZ2V0OmZ1bmN0aW9uKCl7UHQudmFyYXJncys9NDt2YXIgbD1YW1B0LnZhcmFyZ3MtND4+Ml07cmV0dXJuIGx9LGdldFN0cjpmdW5jdGlvbihsKXt2YXIgaD1WKGwpO3JldHVybiBofSxnZXQ2NDpmdW5jdGlvbihsLGgpe3JldHVybiBsfX07ZnVuY3Rpb24gT2wobCxoKXt2YXIgeD0wO3JldHVybiB6ZSgpLmZvckVhY2goZnVuY3Rpb24oQSxEKXt2YXIgTT1oK3g7WFtsK0QqND4+Ml09TSxlZShBLE0pLHgrPUEubGVuZ3RoKzF9KSwwfWZ1bmN0aW9uIE1sKGwsaCl7dmFyIHg9emUoKTtYW2w+PjJdPXgubGVuZ3RoO3ZhciBBPTA7cmV0dXJuIHguZm9yRWFjaChmdW5jdGlvbihEKXtBKz1ELmxlbmd0aCsxfSksWFtoPj4yXT1BLDB9ZnVuY3Rpb24gTmwobCl7emwobCl9ZnVuY3Rpb24gVWwobCl7cmV0dXJuIDB9ZnVuY3Rpb24gQmwobCxoLHgsQSxEKXt9ZnVuY3Rpb24ga2wobCxoLHgsQSl7Zm9yKHZhciBEPTAsTT0wO008eDtNKyspe2Zvcih2YXIgdz1YW2grTSo4Pj4yXSxVPVhbaCsoTSo4KzQpPj4yXSxRPTA7UTxVO1ErKylQdC5wcmludENoYXIobCwkZVt3K1FdKTtEKz1VfXJldHVybiBYW0E+PjJdPUQsMH1mdW5jdGlvbiBMbCgpe2lmKHR5cGVvZiBjcnlwdG89PSJvYmplY3QiJiZ0eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcz09ImZ1bmN0aW9uIil7dmFyIGw9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobCksbFswXX19ZWxzZSByZXR1cm4gZnVuY3Rpb24oKXtjZSgicmFuZG9tRGV2aWNlIil9fWZ1bmN0aW9uIER0KGwsaCl7RHQucmFuZG9tRGV2aWNlfHwoRHQucmFuZG9tRGV2aWNlPUxsKCkpO2Zvcih2YXIgeD0wO3g8aDt4KyspSXRbbCt4Pj4wXT1EdC5yYW5kb21EZXZpY2UoKTtyZXR1cm4gMH12YXIgJGw9e2E6Z2wsZTp2bCxkOkVsLGI6VGwsbjpSbCxoOlNsLGw6SWwsbTpQbCxwOkRsLGY6T2wsZzpNbCxqOk5sLGk6VWwsazpCbCxjOmtsLG86RHR9O2JsKCksdC5fX193YXNtX2NhbGxfY3RvcnM9ZnVuY3Rpb24oKXtyZXR1cm4odC5fX193YXNtX2NhbGxfY3RvcnM9dC5hc20ucikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRNb2RlbEJ1ZmZlck1lbW9yeU9mZnNldD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRNb2RlbEJ1ZmZlck1lbW9yeU9mZnNldD10LmFzbS5zKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldElucHV0TWVtb3J5T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldElucHV0TWVtb3J5T2Zmc2V0PXQuYXNtLnQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0SW5wdXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0SW5wdXRIZWlnaHQ9dC5hc20udSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRJbnB1dFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldElucHV0V2lkdGg9dC5hc20udikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRJbnB1dENoYW5uZWxDb3VudD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRJbnB1dENoYW5uZWxDb3VudD10LmFzbS53KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE91dHB1dE1lbW9yeU9mZnNldD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRPdXRwdXRNZW1vcnlPZmZzZXQ9dC5hc20ueCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRPdXRwdXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0SGVpZ2h0PXQuYXNtLnkpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0T3V0cHV0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0V2lkdGg9dC5hc20ueikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRPdXRwdXRDaGFubmVsQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0Q2hhbm5lbENvdW50PXQuYXNtLkEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fbG9hZE1vZGVsPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2xvYWRNb2RlbD10LmFzbS5CKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX3J1bkluZmVyZW5jZT1mdW5jdGlvbigpe3JldHVybih0Ll9ydW5JbmZlcmVuY2U9dC5hc20uQykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9pc0dQVUVuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5faXNHUFVFbmFibGVkPXQuYXNtLkQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIFZpPXQuX19fZXJybm9fbG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4oVmk9dC5fX19lcnJub19sb2NhdGlvbj10LmFzbS5GKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEN0O2Z1bmN0aW9uIEdsKGwpe3RoaXMubmFtZT0iRXhpdFN0YXR1cyIsdGhpcy5tZXNzYWdlPSJQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCIrbCsiKSIsdGhpcy5zdGF0dXM9bH1HZT1mdW5jdGlvbiBsKCl7Q3R8fEJyKCksQ3R8fChHZT1sKX07ZnVuY3Rpb24gQnIobCl7aWYoX2U+MHx8KGNsKCksX2U+MCkpcmV0dXJuO2Z1bmN0aW9uIGgoKXtDdHx8KEN0PSEwLHQuY2FsbGVkUnVuPSEwLCFUJiYoZmwoKSxuKHQpLHQub25SdW50aW1lSW5pdGlhbGl6ZWQmJnQub25SdW50aW1lSW5pdGlhbGl6ZWQoKSxsbCgpKSl9dC5zZXRTdGF0dXM/KHQuc2V0U3RhdHVzKCJSdW5uaW5nLi4uIiksc2V0VGltZW91dChmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnNldFN0YXR1cygiIil9LDEpLGgoKX0sMSkpOmgoKX10LnJ1bj1CcjtmdW5jdGlvbiB6bChsLGgpe0hsKGwpfWZ1bmN0aW9uIEhsKGwpe3VsKCl8fCh0Lm9uRXhpdCYmdC5vbkV4aXQobCksVD0hMCksdShsLG5ldyBHbChsKSl9aWYodC5wcmVJbml0KWZvcih0eXBlb2YgdC5wcmVJbml0PT0iZnVuY3Rpb24iJiYodC5wcmVJbml0PVt0LnByZUluaXRdKTt0LnByZUluaXQubGVuZ3RoPjA7KXQucHJlSW5pdC5wb3AoKSgpO3JldHVybiBCcigpLGUucmVhZHl9fSgpO3R5cGVvZiBleHBvcnRzPT0ib2JqZWN0IiYmdHlwZW9mIG1vZHVsZT09Im9iamVjdCI/bW9kdWxlLmV4cG9ydHM9U3Q6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoW10sZnVuY3Rpb24oKXtyZXR1cm4gU3R9KTp0eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJihleHBvcnRzLmNyZWF0ZVZvbmFnZVRGTGl0ZVNpbWRNb2R1bGU9U3QpO2NsYXNzIHRse2NvbnN0cnVjdG9yKCl7dGhpcy5pc1NJTURTdXBwb3J0ZWQ9ITEsdGhpcy5pc1RocmVhZHNTdXBwb3J0ZWQ9ITEsdGhpcy5pbnB1dFdpZHRoPTAsdGhpcy5pbnB1dEhlaWdodD0wLHRoaXMuaW5wdXRDaGFubmVsQ291bnQ9MCx0aGlzLmlucHV0TWVtb3J5T2Zmc2V0PTAsdGhpcy5vdXRwdXRXaWR0aD0wLHRoaXMub3V0cHV0SGVpZ2h0PTAsdGhpcy5vdXRwdXRDaGFubmVsQ291bnQ9MCx0aGlzLm91dHB1dE1lbW9yeU9mZnNldD0wfX1jb25zdCBybD0iaHR0cHM6Ly9kM29wcWptcXp4ZjA1Ny5jbG91ZGZyb250Lm5ldC92b25hZ2UtdGVuc29yZmxvdy13YXNtL3RmbGl0ZS1zaW1kLXdhc20vMS4xLjMvIixubD0iaHR0cHM6Ly9kM29wcWptcXp4ZjA1Ny5jbG91ZGZyb250Lm5ldC9tbC9zZWxmaWVfc2VnbWVudGF0aW9uLzQuMC4wLyI7YXN5bmMgZnVuY3Rpb24gaWwocj1ybCxlPW5sKXtsZXQgdD1uZXcgdGw7dmFyIG49bmV3IFByb21pc2UoZnVuY3Rpb24oaSxvKXthc3luYyBmdW5jdGlvbiBzKCl7cmV0dXJuIFN0KHtsb2NhdGVGaWxlOmZ1bmN0aW9uKGYpe3JldHVybiByK2Z9fSl9YXN5bmMgZnVuY3Rpb24gYSh1KXtyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMoZixjKT0+e2NvbnN0IGQ9dTtpZih0eXBlb2YgZD09InVuZGVmaW5lZCIpcmV0dXJuIGMoIlRGTGl0ZSBiYWNrZW5kIHVuYXZhaWxhYmxlOiB3YXNtU2ltZCIpO2NvbnN0IHA9InNlbGZpZV9zZWdtZW50YXRpb25fbGFuZHNjYXBlIjtjb25zb2xlLmxvZygiTG9hZGluZyB0ZmxpdGUgbW9kZWw6IixwKTtsZXQgeT1lK2Ake3B9LnRmbGl0ZWA7Y29uc29sZS5sb2coIlRGTGl0ZSBtb2RlbFVybDogIit5KTt0cnl7Y29uc3QgXz1hd2FpdChhd2FpdCBmZXRjaCh5KSkuYXJyYXlCdWZmZXIoKTtjb25zb2xlLmxvZygiTW9kZWwgYnVmZmVyIHNpemU6IixfLmJ5dGVMZW5ndGgpO2NvbnN0IGI9ZC5fZ2V0TW9kZWxCdWZmZXJNZW1vcnlPZmZzZXQoKTtjb25zb2xlLmxvZygiTW9kZWwgYnVmZmVyIG1lbW9yeSBvZmZzZXQ6IixiKSxjb25zb2xlLmxvZygiTG9hZGluZyBtb2RlbCBidWZmZXIuLi4iKSxkLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoXyksYik7Y29uc3QgZz1kLl9sb2FkTW9kZWwoXy5ieXRlTGVuZ3RoKTtpZihjb25zb2xlLmxvZygiTG9hZCBtb2RlbCByZXN1bHQ6IixnKSxnIT09MCl7YygiQ2Fubm90IGxvYWQgbW9kZWwiKTtyZXR1cm59dC5pbnB1dFdpZHRoPWQuX2dldElucHV0V2lkdGgoKSx0LmlucHV0SGVpZ2h0PWQuX2dldElucHV0SGVpZ2h0KCksdC5pbnB1dENoYW5uZWxDb3VudD1kLl9nZXRJbnB1dENoYW5uZWxDb3VudCgpLHQuaW5wdXRNZW1vcnlPZmZzZXQ9ZC5fZ2V0SW5wdXRNZW1vcnlPZmZzZXQoKSxjb25zb2xlLmxvZygiSW5wdXQgbWVtb3J5IG9mZnNldDoiLHQuaW5wdXRNZW1vcnlPZmZzZXQpLGNvbnNvbGUubG9nKCJJbnB1dCBoZWlnaHQ6Iix0LmlucHV0SGVpZ2h0KSxjb25zb2xlLmxvZygiSW5wdXQgd2lkdGg6Iix0LmlucHV0V2lkdGgpLGNvbnNvbGUubG9nKCJJbnB1dCBjaGFubmVsczoiLHQuaW5wdXRDaGFubmVsQ291bnQpLHQub3V0cHV0TWVtb3J5T2Zmc2V0PWQuX2dldE91dHB1dE1lbW9yeU9mZnNldCgpLHQub3V0cHV0V2lkdGg9ZC5fZ2V0T3V0cHV0V2lkdGgoKSx0Lm91dHB1dEhlaWdodD1kLl9nZXRPdXRwdXRIZWlnaHQoKSx0Lm91dHB1dENoYW5uZWxDb3VudD1kLl9nZXRPdXRwdXRDaGFubmVsQ291bnQoKSxjb25zb2xlLmxvZygiT3V0cHV0IG1lbW9yeSBvZmZzZXQ6Iix0Lm91dHB1dE1lbW9yeU9mZnNldCksY29uc29sZS5sb2coIk91dHB1dCBoZWlnaHQ6Iix0Lm91dHB1dEhlaWdodCksY29uc29sZS5sb2coIk91dHB1dCB3aWR0aDoiLHQub3V0cHV0V2lkdGgpLGNvbnNvbGUubG9nKCJPdXRwdXQgY2hhbm5lbHM6Iix0Lm91dHB1dENoYW5uZWxDb3VudCksdC5zZWxlY3RlZFRGTGl0ZT1kfWNhdGNoKG0pe2MobSk7cmV0dXJufWYoKX0pfXMoKS50aGVuKHU9PntpZih1PT09bnVsbCl0aHJvdyBjb25zb2xlLmVycm9yKCJsb2FkVEZMaXRlIG51bGwiKSwibG9hZFRGTGl0ZSBudWxsIjthKHUpLnRoZW4oZj0+e2kodCl9KS5jYXRjaChmPT57Y29uc29sZS5lcnJvcigibG9hZFRGTGl0ZU1vZGVsIGVycm9yIiksbygibG9hZFRGTGl0ZU1vZGVsIGVycm9yIil9KX0pLmNhdGNoKHU9Pntjb25zb2xlLmVycm9yKCJsb2FkVEZMaXRlIGVycm9yOiIsdSksbygibG9hZFRGTGl0ZSBlcnJvcjoiK3UpfSl9KTtyZXR1cm4gbn1jbGFzcyBvbHtjb25zdHJ1Y3Rvcigpe3RoaXMuY2FudmFzPW5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSx0aGlzLmNvbnRleHQ9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiLHt3aWxsUmVhZEZyZXF1ZW50bHk6ITB9KSx0aGlzLnBpeGVsQ291bnQ9MCx0aGlzLmlucHV0T2Zmc2V0PTAsdGhpcy5vdXRwdXRPZmZzZXQ9MH1hc3luYyBpbml0KGUsdCl7YXdhaXQgdGhpcy5pbml0V2FzbShlLHQpLHRoaXMuaW5mb3MmJih0aGlzLmNhbnZhcy53aWR0aD10aGlzLmluZm9zLmlucHV0V2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0PXRoaXMuaW5mb3MuaW5wdXRIZWlnaHQsdGhpcy5waXhlbENvdW50PXRoaXMuaW5mb3MuaW5wdXRXaWR0aCp0aGlzLmluZm9zLmlucHV0SGVpZ2h0LHRoaXMubWFzaz1uZXcgSW1hZ2VEYXRhKHRoaXMuaW5mb3MuaW5wdXRXaWR0aCx0aGlzLmluZm9zLmlucHV0SGVpZ2h0KSx0aGlzLmlucHV0T2Zmc2V0PXRoaXMuaW5mb3MuaW5wdXRNZW1vcnlPZmZzZXQvNCx0aGlzLm91dHB1dE9mZnNldD10aGlzLmluZm9zLm91dHB1dE1lbW9yeU9mZnNldC80KX1hc3luYyBpbml0V2FzbShlLHQpe3RoaXMuaW5mb3M9YXdhaXQgaWwoZSx0KX1nZXRPdXRwdXREaW1lbnNpb25zKCl7dmFyIGUsdCxuLGk7cmV0dXJue3dpZHRoOih0PShlPXRoaXMuaW5mb3MpPT1udWxsP3ZvaWQgMDplLm91dHB1dFdpZHRoKSE9bnVsbD90OjAsaGVpZ2h0OihpPShuPXRoaXMuaW5mb3MpPT1udWxsP3ZvaWQgMDpuLm91dHB1dEhlaWdodCkhPW51bGw/aTowfX1hc3luYyBwcm9jZXNzKGUpe2lmKCF0aGlzLm1hc2t8fCF0aGlzLmluZm9zKXJldHVybjtjb25zdCB0PXRoaXMuaW5mb3MuaW5wdXRXaWR0aCxuPXRoaXMuaW5mb3MuaW5wdXRIZWlnaHQ7dGhpcy5jb250ZXh0LmRyYXdJbWFnZShlLDAsMCxlLndpZHRoLGUuaGVpZ2h0LDAsMCx0LG4pO2NvbnN0IGk9dGhpcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLDAsdCxuKSxvPXRoaXMuaW5mb3Muc2VsZWN0ZWRURkxpdGUuSEVBUEYzMjtmb3IobGV0IHM9MDtzPHRoaXMucGl4ZWxDb3VudDtzKyspe2NvbnN0IGE9dGhpcy5pbnB1dE9mZnNldCtzKjM7b1thXT1pLmRhdGFbcyo0XS8yNTUsb1thKzFdPWkuZGF0YVtzKjQrMV0vMjU1LG9bYSsyXT1pLmRhdGFbcyo0KzJdLzI1NX10aGlzLmluZm9zLnNlbGVjdGVkVEZMaXRlLl9ydW5JbmZlcmVuY2UoKTtmb3IobGV0IHM9MDtzPHRoaXMucGl4ZWxDb3VudDtzKyspe2NvbnN0IGE9dGhpcy5pbmZvcy5zZWxlY3RlZFRGTGl0ZS5IRUFQRjMyW3RoaXMub3V0cHV0T2Zmc2V0K3NdO3RoaXMubWFzay5kYXRhW3MqNF09dGhpcy5tYXNrLmRhdGFbcyo0KzNdPTI1NSphfXJldHVybiBjcmVhdGVJbWFnZUJpdG1hcCh0aGlzLm1hc2spfWlzR3B1U3VwcG9ydGVkKCl7dmFyIGUsdCxuO3JldHVybihuPSh0PShlPXRoaXMuaW5mb3MpPT1udWxsP3ZvaWQgMDplLnNlbGVjdGVkVEZMaXRlKT09bnVsbD92b2lkIDA6dC5faXNHUFVFbmFibGVkKCkpIT1udWxsP246ITF9fWNsYXNzIHNse2NvbnN0cnVjdG9yKCl7dGhpcy5zZWxmaWVTZWdtZW50YXRpb249bmV3IG9sLHRoaXMucHJldmlvdXNEaW1lbnNpb25zPXt3aWR0aDowLGhlaWdodDowfX1hc3luYyBpbml0KGUpe2F3YWl0IHRoaXMuc2VsZmllU2VnbWVudGF0aW9uLmluaXQoZS53YXNtQXNzZXRVcmlQYXRoLGUudGZsaXRlQXNzZXRVcmlQYXRoKTtjb25zdHt3aWR0aDp0LGhlaWdodDpufT10aGlzLnNlbGZpZVNlZ21lbnRhdGlvbi5nZXRPdXRwdXREaW1lbnNpb25zKCk7dGhpcy5iYWNrZ3JvdW5kRmlsdGVyPW5ldyBlbCh7Zm9yZWdyb3VuZFdpZHRoOjEsZm9yZWdyb3VuZEhlaWdodDoxLG1hc2tXaWR0aDp0LG1hc2tIZWlnaHQ6bn0pfWFzeW5jIHRyYW5zZm9ybShlLHQpe3ZhciBvLHMsYSx1O2NvbnN0IG49YXdhaXQgY3JlYXRlSW1hZ2VCaXRtYXAoZSksaT1hd2FpdCB0aGlzLnNlbGZpZVNlZ21lbnRhdGlvbi5wcm9jZXNzKG4pO2k/KChuLndpZHRoIT09dGhpcy5wcmV2aW91c0RpbWVuc2lvbnMud2lkdGh8fG4uaGVpZ2h0IT09dGhpcy5wcmV2aW91c0RpbWVuc2lvbnMuaGVpZ2h0KSYmKHRoaXMucHJldmlvdXNEaW1lbnNpb25zLndpZHRoPW4ud2lkdGgsdGhpcy5wcmV2aW91c0RpbWVuc2lvbnMuaGVpZ2h0PW4uaGVpZ2h0LGF3YWl0KChvPXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOm8ucmVzaXplRm9yZWdyb3VuZChuLndpZHRoLG4uaGVpZ2h0KSkpLGF3YWl0KChzPXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnMucHJvY2VzcyhuLGkpKSxlLmNsb3NlKCksdC5lbnF1ZXVlKG5ldyBWaWRlb0ZyYW1lKChhPXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOmEuY2FudmFzLHt0aW1lc3RhbXA6KHU9ZS50aW1lc3RhbXApIT1udWxsP3U6MCxhbHBoYToiZGlzY2FyZCJ9KSkpOnQuZW5xdWV1ZShlKX1hc3luYyBzZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKXt2YXIgdDthd2FpdCgodD10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp0LnNldEJhY2tncm91bmRPcHRpb25zKGUpKX1hc3luYyBzZXRWaWRlb0JHUmVhZGFibGUoZSl7dmFyIHQ7YXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dC5zZXRWaWRlb0JHUmVhZGFibGUoZSkpfWFzeW5jIHNldFZpcnR1YWxCR0ltYWdlKGUpe3ZhciB0O2F3YWl0KCh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnQuc2V0VmlydHVhbEJHSW1hZ2UoZSkpfXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe3ZhciB0Oyh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGx8fHQuc2V0RmxpY2tlcmluZ09wdGlvbnMoZSl9fWNvbnN0IE9yPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXI9bmV3IHNsLHRoaXMubWVkaWFQcm9jZXNzb3I9bmV3IHdzLHRoaXMucmF0ZT0zMH1hc3luYyBpbml0KGUpe2F3YWl0IHRoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLmluaXQoZSksYXdhaXQgdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFuc2Zvcm1lcnMoW3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyXSksdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnJhdGUpLHRoaXMubWVkaWFQcm9jZXNzb3Iub25BbnkoKHQsbik9Pnt2YXIgaTsoaT10aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yKT09bnVsbHx8aS5jYWxsKHRoaXMse25hbWU6dCxkYXRhOm59KX0pfWFzeW5jIG9uTWVkaWFQcm9jZXNzb3JFdmVudCgpe3JldHVybiBhd2FpdCBuZXcgUHJvbWlzZShlPT50aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yPWUpfWFzeW5jIHNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMucmF0ZT1lLHRoaXMubWVkaWFQcm9jZXNzb3Iuc2V0VHJhY2tFeHBlY3RlZFJhdGUoZSl9YXN5bmMgdHJhbnNmb3JtKGUsdCl7dGhpcy5tZWRpYVByb2Nlc3Nvci50cmFuc2Zvcm0oZSx0KX1hc3luYyBzZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKXt2YXIgdDthd2FpdCgodD10aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lcik9PW51bGw/dm9pZCAwOnQuc2V0QmFja2dyb3VuZE9wdGlvbnMoZSkpfXNldFZpZGVvQkdSZWFkYWJsZShlKXt0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5zZXRWaWRlb0JHUmVhZGFibGUoZSl9YXN5bmMgc2V0VmlydHVhbEJHSW1hZ2UoZSl7YXdhaXQgdGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuc2V0VmlydHVhbEJHSW1hZ2UoZSl9YXN5bmMgdGVybWluYXRlKCl7YXdhaXQgdGhpcy5tZWRpYVByb2Nlc3Nvci5kZXN0cm95KCl9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuc2V0RmxpY2tlcmluZ09wdGlvbnMoZSl9c2V0Vm9uYWdlTWV0YWRhdGEoZSl7ZnMoZSl9fTtsZXQgVWk9T3I7KCgpPT57WGkoIlByb2Nlc3NvcldvcmtlciIsT3IpfSkoKX0pKCk7Cg==",blob="undefined"!=typeof window&&window.Blob&&new Blob([atob(encodedJs)],{type:"text/javascript;charset=utf-8"});function WorkerWrapper(){const t=blob&&(window.URL||window.webkitURL).createObjectURL(blob);try{return t?new Worker(t,{}):new Worker("data:application/javascript;base64,"+encodedJs,{type:"module"})}finally{t&&(window.URL||window.webkitURL).revokeObjectURL(t)}}class ProcessorMain extends emittery{constructor(){super(...arguments),this.rate=30}async init(t){this.worker=await y(ProcessorWorker,WorkerWrapper),await this.worker.init(t),await this.worker.setVonageMetadata(getVonageMetadata()),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 VonageAssetsLoaderHelper.createVideoReadable(t.backgroundAssetUri)));break;case"VirtualBackground":await(null==(n=this.worker)?void 0:n.setVirtualBGImage(await VonageAssetsLoaderHelper.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 listenWorker(){for(var t,e,n;null==(t=this.worker)?void 0: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())}}}}}class VonageMediaProcessor extends emittery{constructor(){super(),this.worker=new ProcessorMain,this.connector=new MediaProcessorConnector(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}static async create(t){const e=new this;return await e.init(t),e}}function getVonageSelfieSegmentation(){return VonageSelfiesegmentation}function getVonageHands(){return VonageHands}function getVonageHolistic(){return VonageHolistic}function getVonageFaceDetection(){return VonageFacedetection}function getVonageFaceMash(){return VonageFacemash}function getVonageObjectron(){return VonageObjectron}function getVonagePose(){return VonagePose}var SelfieSegmentationType=(t=>(t.FAST="FAST",t.PRECISE="PRECISE",t))(SelfieSegmentationType||{});async function createVonageMediaProcessor(t){return await VonageMediaProcessor.create(t)}